From 6eca218f8eade55f7e7a15f3cc87bb814e6b7726 Mon Sep 17 00:00:00 2001 From: Nero <41307858+nero@users.noreply.github.com> Date: Fri, 3 Apr 2020 19:43:10 +0000 Subject: [PATCH] Explain the booterr code a bit --- inc/booterr.asm | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/inc/booterr.asm b/inc/booterr.asm index 8a8af3a..21dbcbc 100644 --- a/inc/booterr.asm +++ b/inc/booterr.asm @@ -1,18 +1,27 @@ -errcll: pop dx +errcll: ; put return address into dx + pop dx errjmp: call dmpdx hlt: hlt jmp hlt -dmpdx: xor bx, bx +dmpdx: ; setup bx and ah for int 10h call + xor bx, bx mov ah, 0x0e mov cl, 4 + ; this double-call is essentially a 4 times repeating loop call dmpdx1 dmpdx1: call dmpdx2 -dmpdx2: mov al, dh +dmpdx2: ; grab highest nibble from dx + mov al, dh + ; remove highest nibble from dx shl dx, cl + ; shift away second-highest nibble that we accidentally copied shr al, cl + ; map 0-9 to ascii codes for '0' to '9' add al, 0x30 + ; if result is larger than '9', ... cmp al, 0x3a jl dmpdx3 + ; ... add 7 so we continue at 'A' add al, 7 dmpdx3: int 0x10 ret