summaryrefslogtreecommitdiff
path: root/src/bootloader/bios_functions/print.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootloader/bios_functions/print.asm')
-rw-r--r--src/bootloader/bios_functions/print.asm29
1 files changed, 14 insertions, 15 deletions
diff --git a/src/bootloader/bios_functions/print.asm b/src/bootloader/bios_functions/print.asm
index d071cd9..303fa8f 100644
--- a/src/bootloader/bios_functions/print.asm
+++ b/src/bootloader/bios_functions/print.asm
@@ -1,25 +1,24 @@
-;TODO fix null problem, allow direct passes
+;TODO fix null problem, allow passing value insted of pointer
bios_print:
-;push ax ; we need to use ax, so let's push it in case whoever called needs it
pusha
-mov ah, 0x0e ; tells bios we're in tty mode
+mov ah, 0x0e
.print_loop:
-mov al, [bx] ; al is the char MEANT TO BE CX
-cmp al, 0 ; compare the char we're about to print with null
-je .fini ; if it is null, we gonna scoot the fuck outta here
+mov al, [bx]
+cmp al, 0
+je .fini
test cx, cx ; if cx is zero, ascii, otherwise hex string
jne .print_hex
-int 0x10 ; bios call, actually prints the char
+int 0x10
.print_hex_ret:
-inc bx ; adds to the pointer
-jmp .print_loop ; goes back to loop start
+inc bx
+jmp .print_loop
.fini:
-mov al, 0xd ; \r
+mov al, 0xd
int 0x10
-mov al, 0xa ; \n
+mov al, 0xa
int 0x10
popa
ret
@@ -32,7 +31,7 @@ int 0x10
mov al, 'x'
int 0x10
-mov al, [bx] ; shift bits to get first nibble
+mov al, [bx]
shr al, 4
call .bios_print_nibble
@@ -47,13 +46,13 @@ jmp .print_hex_ret
.bios_print_nibble:
-cmp al, 9 ; see if letter worthy
+cmp al, 9
ja .print_hex_letter
-add al, 0x30 ;'1'
+add al, 0x30
int 0x10
ret
.print_hex_letter:
-add al, 0x57 ;'a'
+add al, 0x57
int 0x10
ret