wok diff memtest/stuff/bootloader.S @ rev 19399
memtest: DOS shutdown
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Sep 03 09:48:39 2016 +0200 (2016-09-03) |
parents | 2638f54b93f1 |
children | 03eb90ac5d1f |
line diff
1.1 --- a/memtest/stuff/bootloader.S Mon Jun 06 12:49:31 2016 +0200 1.2 +++ b/memtest/stuff/bootloader.S Sat Sep 03 09:48:39 2016 +0200 1.3 @@ -8,20 +8,21 @@ 1.4 .globl _start 1.5 _start: 1.6 1.7 -#define CODESZ 512 1.8 +#define CODESZ 512 /* patched by installer */ 1.9 1.10 /* some extra features */ 1.11 #define EXE_SUPPORT real mode dos .exe file support 1.12 #define CMDLINE 0x9E00 1.13 #define HELP store help message for /? argument 1.14 #define CHECK_REALMODE does not support vm86 1.15 +#define SHUTDOWNDOS shutdown DOS services 1.16 1.17 /* some contraints to reduce the size */ 1.18 //#define FLOPPY_1440K_ONLY 1.44M floppies support only 1.19 #define NO_CURSOR_DEFINITION 1.20 1.21 #ifdef EXE_SUPPORT 1.22 -#define EXEADRS(x) x+0xE0 1.23 +#define EXEADRS(x) (x+0xE0) 1.24 stacktop = 0x9E00 # in 0x8000 .. 0xA000 1.25 decw %bp // Magic number: MZ 1.26 popw %dx 1.27 @@ -105,7 +106,24 @@ 1.28 movw $end_header, %di 1.29 rep 1.30 movsw 1.31 +#ifndef SHUTDOWNDOS 1.32 ljmp $INITSEG, $movesys 1.33 +#else 1.34 + pushaw 1.35 + pushw %es 1.36 + xorw %si, %si 1.37 + movw %si, %ds # %ds = 0 1.38 + pushl 4(%si) 1.39 + movw %sp, %es:loadsp19+1(%si) 1.40 + movw $step19, 4(%si) 1.41 + movw %es, 6(%si) 1.42 + pushfw 1.43 + popw %ax 1.44 + incb %ah # set TF 1.45 + pushw %ax 1.46 + popfw 1.47 + ljmp *4*0x19(%si) 1.48 +#endif 1.49 start: 1.50 pushw %dx 1.51 #else 1.52 @@ -207,6 +225,27 @@ 1.53 int $0x20 // dos exit 1.54 #endif 1.55 #ifdef EXE_SUPPORT 1.56 +#ifdef SHUTDOWNDOS 1.57 +doiret: 1.58 + iret 1.59 +step19: 1.60 + pushw %si 1.61 + pushw %ds 1.62 + movw %sp, %si 1.63 + ldsw %ss:4(%si), %si 1.64 + cmpw $0x19CD, (%si) 1.65 + popw %ds 1.66 + popw %si 1.67 + jne doiret 1.68 + xorw %si, %si 1.69 + mov %si, %ds 1.70 + popl 4*0x19(%si) 1.71 +loadsp19: 1.72 + movw $0, %sp 1.73 + popl 4(%si) 1.74 + popw %es 1.75 + popaw 1.76 +#endif 1.77 movesys: // %ax = SYSSEG 1.78 pushw %es 1.79 popw %ss