wok-6.x diff memtest/stuff/bootloader.S @ rev 19920

memtest: VCPI support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Apr 19 22:14:58 2017 +0200 (2017-04-19)
parents 67179a0300fd
children 9e463ebef079
line diff
     1.1 --- a/memtest/stuff/bootloader.S	Sat Sep 03 19:40:30 2016 +0200
     1.2 +++ b/memtest/stuff/bootloader.S	Wed Apr 19 22:14:58 2017 +0200
     1.3 @@ -14,7 +14,9 @@
     1.4  #define EXE_SUPPORT		real mode dos .exe file support
     1.5  #define CMDLINE	0x9E00
     1.6  #define HELP			store help message for /? argument
     1.7 -#define CHECK_REALMODE		does not support vm86
     1.8 +#define TINYSYSTEM		the full file in one segment
     1.9 +#define CHECK_CPU		need a 386+
    1.10 +#define VM2RM			(0x3C+0x19B)
    1.11  #define SHUTDOWNDOS		shutdown DOS services
    1.12  
    1.13  /* some contraints to reduce the size */
    1.14 @@ -26,7 +28,7 @@
    1.15  stacktop	= 0x9E00		# in 0x8000 .. 0xA000
    1.16  	decw	%bp			// Magic number: MZ
    1.17  	popw	%dx
    1.18 -	jmp	start			// Bytes on last page of file
    1.19 +	jmp	startz			// Bytes on last page of file
    1.20  	.word	(CODESZ+511)/512	// Pages in file
    1.21  	.word	0			// Relocations
    1.22  	.word	(end_header-_start)/16	// Size of header in paragraphs
    1.23 @@ -39,7 +41,9 @@
    1.24  	.word	0xFFF0			// Initial (relative) CS value
    1.25  //	.word	0x001C			// File address of relocation table
    1.26  //	.word	0,0,0			// Overlay number
    1.27 -	.ascii  "(SliTaz)"
    1.28 +	.ascii  "SliTaz"
    1.29 +startz:
    1.30 +	jmp	start
    1.31  end_header:
    1.32  comstart:
    1.33  	cld				# assume nothing
    1.34 @@ -68,7 +72,7 @@
    1.35  # define PUTS
    1.36  	movw	$EXEADRS(helpmsg), %si
    1.37  	cmpb	$'/'+1, %al
    1.38 -#  ifdef CHECK_REALMODE
    1.39 +#  ifdef CHECK_CPU
    1.40  	js	jsputs
    1.41  #  else
    1.42  	js	puts
    1.43 @@ -79,7 +83,7 @@
    1.44  	movw	$SYSSEG, %ax
    1.45  	movb	$(512-(end_header-_start))/2, %cl
    1.46  	movw	$end_header, %di
    1.47 -#ifdef CHECK_REALMODE
    1.48 +#ifdef CHECK_CPU
    1.49  #define PUTS
    1.50  	movw	$EXEADRS(realmode_expected), %si
    1.51  	//movb	setup_sects-realmode_expected(%si), %ch
    1.52 @@ -96,7 +100,14 @@
    1.53  	js	puts		// S= not 386+
    1.54  	smsww	%dx
    1.55  	shrw	$1, %dx
    1.56 +# ifdef VM2RM
    1.57 +	jnc	isrm
    1.58 +	push	%cs
    1.59 +	call	VM2RM
    1.60 +isrm:
    1.61 +# else
    1.62  	jc	puts		// protected mode: vm86
    1.63 +# endif
    1.64  #else
    1.65  	movb	EXEADRS(setup_sects), %ch
    1.66  #endif
    1.67 @@ -127,7 +138,7 @@
    1.68  #else
    1.69  #undef HELP
    1.70  #undef CMDLINE
    1.71 -#undef CHECK_REALMODE
    1.72 +#undef CHECK_CPU
    1.73  #endif
    1.74  	cld				# assume nothing
    1.75  stacktop	= 0x9E00		# in 0x8000 .. 0xA000
    1.76 @@ -244,6 +255,28 @@
    1.77  	popaw
    1.78  #endif
    1.79  movesys:				// %ax = SYSSEG
    1.80 +#ifdef TINYSYSTEM
    1.81 +	movw	%si, %cx
    1.82 +	negw	%cx
    1.83 +	xorw	%di, %di
    1.84 +	movw	%ax, %es
    1.85 +	movw	%si, %dx
    1.86 +	shrw	$4, %dx
    1.87 +# ifdef SHUTDOWNDOS
    1.88 +	movw	%bx, %ds
    1.89 +# endif
    1.90 +	addw	%dx, %bx
    1.91 +	subw	%ax, %bx
    1.92 +	jnc	forward
    1.93 +	addw	%cx, %di
    1.94 +	addw	%cx, %si
    1.95 +	incw	%cx
    1.96 +	std
    1.97 +forward:
    1.98 +	rep
    1.99 +	  movsb
   1.100 +	cld
   1.101 +#else
   1.102  	movw	%cs:syssize, %bp
   1.103  	shrw	$4, %si
   1.104  	addw	%si, %bx
   1.105 @@ -265,6 +298,7 @@
   1.106  	  movsw
   1.107  	decw	%bp
   1.108  	jns	forward
   1.109 +#endif
   1.110  #ifndef NO_CURSOR_DEFINITION
   1.111  	movb	$1, %ah
   1.112  	movb	$0, %bh
   1.113 @@ -415,17 +449,77 @@
   1.114  bdendlp:
   1.115          jmp	read_sectorslp
   1.116  
   1.117 +#ifdef VM2RM
   1.118 +pagebuf		=	0x96000
   1.119 +saved_ss_sp	=	gdt_abs-44
   1.120 +saved_sp	=	gdt_abs-44
   1.121 +saved_ss	=	gdt_abs-42
   1.122 +tss		=	gdt_abs-40
   1.123 +gdt		=	gdt_abs-32
   1.124 +gdt_null	=	gdt_abs-32
   1.125 +gdt_vcpi	=	gdt_abs-24
   1.126 +gdt_vcpi2	=	gdt_abs-16
   1.127 +gdt_vcpi3	=	gdt_abs-8
   1.128 +gdt_abs:
   1.129 +	.word	0xFFFF,0
   1.130 +	.byte	0,0x92,0xCF,0
   1.131 +gdt_code:
   1.132 +	.word	0xFFFF
   1.133 +gdt_code_base:
   1.134 +	.long	0x9A000000
   1.135 +	.byte	0x8F,0
   1.136 +gdt_tss:
   1.137 +	.word	0x00FF
   1.138 +gdt_tss_base:
   1.139 +	.long	0x89000000+EXEADRS(tss)
   1.140 +	.byte	0,0
   1.141 +gdtr:
   1.142 +gdt_lim:
   1.143 +	.word	0xFFFF
   1.144 +gdt_base:
   1.145 +	.long	EXEADRS(gdt)
   1.146 +sw2pm_params:
   1.147 +sw2pm_cr3:
   1.148 +	.long	pagebuf+0x1000
   1.149 +sw2pm_gdtr_ptr:
   1.150 +	.long	EXEADRS(gdtr)
   1.151 +sw2pm_idtr_ptr:
   1.152 +	.long	EXEADRS(idtr)
   1.153 +sw2pm_ldtr:
   1.154 +	.word	0
   1.155 +sw2pm_tr:
   1.156 +SEL_TSS		= gdt_tss-gdt_null
   1.157 +	.word	SEL_TSS
   1.158 +sw2pm_jumpaddr:
   1.159 +#define SETUPEXEADRS(x)	(x+0x2E0)
   1.160 +pm_code		=	0x0084
   1.161 +	.long	SETUPEXEADRS(pm_code)
   1.162 +SEL_CODE	= gdt_code-gdt_null
   1.163 +	.word	SEL_CODE
   1.164 +idtr:
   1.165 +idt_lim:
   1.166 +	.word	0x03FF
   1.167 +idt_base:
   1.168 +	.long	0
   1.169 +#endif
   1.170  #ifdef HELP
   1.171  helpmsg:
   1.172 -	.ascii	"No help available."
   1.173 +	.ascii	"No help."
   1.174  	.byte	13,10
   1.175  	.byte	0
   1.176  #endif
   1.177 -#ifdef CHECK_REALMODE
   1.178 +#ifdef CHECK_CPU
   1.179 +# if VM2RM
   1.180 +	.org	484
   1.181 +realmode_expected:
   1.182 +helpend:
   1.183 +	.ascii	"386+ only."
   1.184 +# else
   1.185  	.org	475
   1.186  realmode_expected:
   1.187  helpend:
   1.188  	.ascii	"386 real mode only."
   1.189 +# endif
   1.190  	.byte	13,10,0
   1.191  #endif
   1.192  	.org	497