X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fboot%2Fboot.s;h=b9e1a76b1da7c01a26489aaf0b43f501133ea3b9;hb=e552b31989dbb36f780428332be1b4958d26a37b;hp=8ba4a11f18f786d11b557e98537d1ac635a37581;hpb=60068d8dc031615c486e458d0426c659f72cb182;p=bootcensus diff --git a/src/boot/boot.s b/src/boot/boot.s index 8ba4a11..b9e1a76 100644 --- a/src/boot/boot.s +++ b/src/boot/boot.s @@ -1,12 +1,15 @@ .code16 .section .boot,"a" + .set scratchbuf, 0x7b00 + +boot: cli cld # move stack to just below the code xor %ax, %ax mov %ax, %ss - mov $0x7c00, %sp + mov $0x7b00, %sp # use the code segment for data access mov %cs, %ax mov %ax, %ds @@ -16,9 +19,6 @@ call setup_serial - mov $_boot2_size, %eax - call print_num - # load the second stage boot loader and jump to it mov $_boot2_size, %eax mov %eax, %ebx @@ -37,9 +37,6 @@ call read_sectors jmp boot2_addr - cli - hlt - .set SECT_PER_TRACK, 18 .set ARG_NSECT, 6 @@ -66,10 +63,7 @@ read_sectors: ret .set VAR_ATTEMPTS, -2 -str_rdsec_msg: .asciz "rdsec: " -str_cyl_msg: .asciz " C " -str_head_msg: .asciz " H " -str_sec_msg: .asciz " S " +#str_rdsec_msg: .asciz "rdsec: " # read_sector(sidx) read_sector: @@ -84,8 +78,8 @@ read_sector: .Lread_try: # calculate the track (sidx / sectors_per_track) mov 4(%bp), %ax - mov $str_rdsec_msg, %si - call print_str_num16 +# mov $str_rdsec_msg, %si +# call print_str_num16 xor %dx, %dx mov $SECT_PER_TRACK, %cx @@ -104,23 +98,6 @@ read_sector: inc %al or %al, %cl - mov $str_cyl_msg, %si - mov %cx, %ax - rol $2, %al - and $3, %al - ror $8, %ax - call print_str_num16 - - mov $str_head_msg, %si - xor %ax, %ax - mov %dh, %al - call print_str_num16 - - mov $str_sec_msg, %si - mov %cl, %al - and $0x3f, %ax - call print_str_num16 - # ah = 2 (read), al = 1 sectors mov $0x0201, %ax movb drive_number, %dl @@ -141,9 +118,14 @@ read_sector: jmp abort_read .Lread_ok: + # DBG print first dword +# mov $str_read_error + 4, %si +# mov %es:(%bx), %eax +# call print_str_num + # increment es:bx accordingly (advance es if bx overflows) add $512, %bx - jno 0f + jnc 0f mov %es, %ax add $4096, %ax mov %ax, %es @@ -154,12 +136,11 @@ read_sector: pop %bp ret -str_read_error: .asciz "err read sector: " +str_read_error: .asciz "err read sect: " abort_read: mov $str_read_error, %si call print_str_num16 - cli hlt cursor_x: .byte 0 @@ -170,6 +151,8 @@ print_str_num: call print_str pop %eax call print_num + mov $13, %al + call ser_putchar mov $10, %al call ser_putchar ret @@ -210,13 +193,14 @@ print_str: ret # expects number in eax + .global print_num print_num: # save registers push %es pusha xor %cx, %cx - movw $numbuf, %si + movw $scratchbuf, %si mov $10, %ebx 0: xor %edx, %edx @@ -300,6 +284,7 @@ setup_serial: ret # expects a character in al + .global ser_putchar ser_putchar: push %dx @@ -328,7 +313,6 @@ ser_putstr: drive_number: .byte 0 -numbuf: .space 8 .org 510 .byte 0x55 .byte 0xaa