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