diff --git a/lboot.S b/lboot.S index 88bf871..d184b33 100644 --- a/lboot.S +++ b/lboot.S @@ -59,6 +59,8 @@ _start: cli call init_com1 + mov $msg_start, %si + call print mov $msg_start, %si call print @@ -352,6 +354,13 @@ tftp_open: push %ecx push server_ip+2 push server_ip push $0 + + mov %ss, %esi + shl $4, %esi + add %esp, %esi + mov $128, %ecx + call dump + pxe_call PXE_TFTP_OPEN leave @@ -400,33 +409,91 @@ out_of_mem: mov $msg_memerr, %si // print: print NUL-terminated string pointed to by SI print: push %eax + push %si + push %bp + mov %sp, %bp +1: lodsb + or %al, %al + jz 2f + call printch + jmp 1b +2: leave + pop %si + pop %eax + ret + +printch: push %eax push %ebx push %edx + push %ebp + + mov %ax, %bx + +1: mov $COM1+5, %dx + inb %dx, %al + test $0x20, %al + jz 1b + + mov %bx, %ax + + mov $COM1, %dx + outb %al, %dx + + xor %bx, %bx + mov $0x0E, %ah + int $0x10 + + pop %ebp + pop %edx + pop %ebx + pop %eax + ret + +dump: push %eax + push %ebx + push %ecx + push %edx push %esi push %bp mov %sp, %bp - xor %bx, %bx + xor %dx, %dx -_prnext: mov $COM1+5, %dx - inb %dx, %al - test $0x20, %al - jz _prnext +1: cmp %cx, %dx + jae 2f + inc %dx - lodsb - or %al, %al - jz _prdone + addr32 lodsb + push %ax + mov %al, %bl + shr $4, %bx + and $0x0F, %bx + mov hex_digits(%bx), %al + call printch + pop %bx + and $0x0F, %bx + mov hex_digits(%bx), %al + call printch - mov $COM1, %dx - outb %al, %dx + mov $' ', %al + call printch + test $0xF, %dx + jnz 1b + mov $'\r', %al + call printch + mov $'\n', %al + call printch + jmp 1b - mov $0x0E, %ah - int $0x10 - jmp _prnext +2: mov $'\r', %al + call printch + mov $'\n', %al + call printch -_prdone: leave + leave pop %esi pop %edx + pop %ecx pop %ebx pop %eax ret