wok-next rev 19400
memtest: DOS shutdown (again)
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Sep 03 11:26:12 2016 +0200 (2016-09-03) |
parents | ebf8313df61f |
children | 50b423f7711b |
files | memtest/stuff/bootloader.S |
line diff
1.1 --- a/memtest/stuff/bootloader.S Sat Sep 03 09:48:39 2016 +0200 1.2 +++ b/memtest/stuff/bootloader.S Sat Sep 03 11:26:12 2016 +0200 1.3 @@ -44,7 +44,7 @@ 1.4 comstart: 1.5 cld # assume nothing 1.6 #ifdef CMDLINE 1.7 - movw $stacktop, %di 1.8 + movw %sp, %di 1.9 #else 1.10 #undef HELP 1.11 #endif 1.12 @@ -77,9 +77,15 @@ 1.13 nocmdline: 1.14 #endif 1.15 movw $SYSSEG, %ax 1.16 + movb $(512-(end_header-_start))/2, %cl 1.17 + movw $end_header, %di 1.18 #ifdef CHECK_REALMODE 1.19 #define PUTS 1.20 movw $EXEADRS(realmode_expected), %si 1.21 + //movw syssize-realmode_expected(%si), %bp 1.22 + .byte 0x8B, 0x6C, syssize-realmode_expected 1.23 + //movb setup_sects-realmode_expected(%si), %ch 1.24 + .byte 0x8A, 0x6C, setup_sects-realmode_expected 1.25 // bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1.26 // flags 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF 1.27 //movb $0x10, %ah // DF = IF = TF = 0 1.28 @@ -93,36 +99,29 @@ 1.29 smsww %dx 1.30 shrw $1, %dx 1.31 jc puts 1.32 - //movw syssize-realmode_expected(%si), %bp 1.33 - .byte 0x8B, 0x6C, syssize-realmode_expected 1.34 - //movb setup_sects-realmode_expected(%si), %ch 1.35 - .byte 0x8A, 0x6C, setup_sects-realmode_expected 1.36 #else 1.37 movw EXEADRS(syssize), %bp 1.38 movb EXEADRS(setup_sects), %ch 1.39 #endif 1.40 - movb $(512-(end_header-_start))/2, %cl 1.41 movw $0x100, %si 1.42 - movw $end_header, %di 1.43 rep 1.44 movsw 1.45 + movw %ds, %bx 1.46 #ifndef SHUTDOWNDOS 1.47 ljmp $INITSEG, $movesys 1.48 #else 1.49 pushaw 1.50 - pushw %es 1.51 - xorw %si, %si 1.52 - movw %si, %ds # %ds = 0 1.53 - pushl 4(%si) 1.54 - movw %sp, %es:loadsp19+1(%si) 1.55 - movw $step19, 4(%si) 1.56 - movw %es, 6(%si) 1.57 + movw %cx, %ds # %ds = 0 1.58 + movw $4, %si 1.59 + pushl (%si) 1.60 + movw $step19, (%si) 1.61 + movw %es, 2(%si) 1.62 pushfw 1.63 popw %ax 1.64 incb %ah # set TF 1.65 pushw %ax 1.66 popfw 1.67 - ljmp *4*0x19(%si) 1.68 + ljmp *4*0x19-4(%si) 1.69 #endif 1.70 start: 1.71 pushw %dx 1.72 @@ -240,16 +239,13 @@ 1.73 xorw %si, %si 1.74 mov %si, %ds 1.75 popl 4*0x19(%si) 1.76 -loadsp19: 1.77 - movw $0, %sp 1.78 + movw $stacktop-4-16, %sp 1.79 popl 4(%si) 1.80 - popw %es 1.81 popaw 1.82 #endif 1.83 movesys: // %ax = SYSSEG 1.84 - pushw %es 1.85 + pushw %cs 1.86 popw %ss 1.87 - movw %ds, %bx 1.88 shrw $4, %si 1.89 addw %si, %bx 1.90 subw %ax, %bx