cleanup and getchs
[bootcensus] / src / boot / boot2.s
index 86ee611..838af46 100644 (file)
@@ -2,7 +2,6 @@
        .code16
        .section .boot2,"a"
 
-       .extern print_num
        .extern ser_putchar
 
        mov $0x13, %ax
@@ -16,8 +15,8 @@
        mov $0x3c8, %dx
        movb %cl, %al
        outb %al, %dx
-       #DBG
-       call print_num
+       #### DBG
+       call ser_print_num
        mov $58, %al
        call ser_putchar
        mov $32, %al
@@ -30,8 +29,8 @@
        inc %si
        shr $2, %al
        outb %al, %dx
-       #DBG
-       call print_num
+       #### DBG
+       call ser_print_num
        mov $32, %al
        call ser_putchar
        xor %eax, %eax
@@ -41,8 +40,8 @@
        inc %si
        shr $2, %al
        outb %al, %dx
-       #DBG
-       call print_num
+       #### DBG
+       call ser_print_num
        mov $32, %al
        call ser_putchar
        xor %eax, %eax
        inc %si
        shr $2, %al
        outb %al, %dx
-       #DBG
-       call print_num
+       #### DBG
+       call ser_print_num
        mov $32, %al
        call ser_putchar
-       mov $13, %al
-       call ser_putchar
        mov $10, %al
        call ser_putchar
        xor %eax, %eax
        cli
        hlt
 
+       # expects string pointer in ds:si
+ser_print_str:
+       pusha
+
+0:     mov (%si), %al
+       cmp $0, %al
+       jz .Lend
+       call ser_putchar
+       inc %si
+       jmp 0b
+
+.Lend: popa
+       ret
+
+
+       # expects number in eax
+ser_print_num:
+       # save registers
+       pusha
+
+       movw $numbuf + 16, %si
+       movb $0, (%si)
+       mov $10, %ebx
+.Lconvloop:
+       xor %edx, %edx
+       div %ebx
+       add $48, %dl
+       dec %si
+       mov %dl, (%si)
+       cmp $0, %eax
+       jnz .Lconvloop
+
+       call ser_print_str
+
+       # restore regs
+       popa
+       ret
+
+numbuf: .space 16
+
 logo_pal:
        .incbin "logo.pal"