rev |
line source |
pascal@19941
|
1 // Image/zImage boot sector
|
pascal@19941
|
2
|
pascal@15188
|
3 SYSSEG = 0x1000
|
pascal@15188
|
4 INITSEG = 0x9000
|
pascal@15188
|
5 SETUPSEG = 0x9020
|
pascal@19941
|
6 setup_sects = 497
|
pascal@19941
|
7 syssize = 500
|
pascal@15188
|
8
|
pascal@15188
|
9 .text
|
pascal@15188
|
10 .code16
|
pascal@15188
|
11 .org 0
|
pascal@15188
|
12 .globl _start
|
pascal@15188
|
13 _start:
|
pascal@15188
|
14
|
pascal@19399
|
15 #define CODESZ 512 /* patched by installer */
|
pascal@15188
|
16
|
pascal@15188
|
17 /* some extra features */
|
pascal@15188
|
18 #define EXE_SUPPORT real mode dos .exe file support
|
pascal@19941
|
19 #define CMDLINE 0x9E00
|
pascal@19941
|
20 #define VCPI VCPI 4.0 support
|
pascal@19399
|
21 #define SHUTDOWNDOS shutdown DOS services
|
pascal@15188
|
22
|
pascal@15188
|
23 /* some contraints to reduce the size */
|
pascal@19941
|
24 //#define FLOPPY_1440K_ONLY 1.44M floppies support only -33
|
pascal@19941
|
25 //#define FLOPPY_HAS_2_SIDES hardcoded heads count to 2 -13
|
pascal@19941
|
26 //#define MOVE_MAX_SYSSIZE always memcpy 512Kb -2
|
pascal@19941
|
27 //#define NO_CURSOR_DEFINITION -8
|
pascal@19941
|
28 //#define NO_CMDLINE_SHRINK remove heading spaces ? -6
|
pascal@19941
|
29 //#define NO_DOTS show progression dots ? -8
|
pascal@15188
|
30
|
pascal@15188
|
31 #ifdef EXE_SUPPORT
|
pascal@19399
|
32 #define EXEADRS(x) (x+0xE0)
|
pascal@19941
|
33 #define FLAT20(x) (x+16*INITSEG)
|
pascal@19941
|
34
|
pascal@19941
|
35 .macro trace_int19
|
pascal@19941
|
36 pushl $4
|
pascal@19941
|
37 popw %si
|
pascal@19941
|
38 popw %ds
|
pascal@19400
|
39 pushl (%si)
|
pascal@19941
|
40 movl $step19+(INITSEG<<16), (%si)
|
pascal@19399
|
41 pushfw
|
pascal@19399
|
42 popw %ax
|
pascal@19399
|
43 incb %ah # set TF
|
pascal@19399
|
44 pushw %ax
|
pascal@19399
|
45 popfw
|
pascal@19400
|
46 ljmp *4*0x19-4(%si)
|
pascal@19941
|
47 .endm
|
pascal@19941
|
48
|
pascal@19941
|
49 stacktop = 0x9E00 # in 0x8000 .. 0xA000
|
pascal@19941
|
50 decw %bp // Magic number: MZ
|
pascal@19941
|
51 popw %dx
|
pascal@19941
|
52 jmp start // Bytes on last page of file
|
pascal@19941
|
53 .word (CODESZ+511)/512 // Pages in file INSTALLER
|
pascal@19941
|
54 .word 0 // Relocations
|
pascal@19941
|
55 .word (end_header-_start)/16 // Size of header in paragraphs
|
pascal@19941
|
56 .word (CODESZ+stacktop+15)/16 // Minimum extra paragraphs needed INSTALLER
|
pascal@19941
|
57 .word -1 // Maximum extra paragraphs needed
|
pascal@19941
|
58 .word (CODESZ+15)/16 // Initial (relative) SS value INSTALLER
|
pascal@19941
|
59 .word stacktop // Initial SP value
|
pascal@19941
|
60 .word 0 // Checksum INSTALLER?
|
pascal@19941
|
61 .word EXEADRS(comstart) // Initial IP value
|
pascal@19941
|
62 .word 0xFFF0 // Initial (relative) CS value
|
pascal@19941
|
63 // .word 0x001C // File address of relocation table
|
pascal@19941
|
64 // .word 0,0,0 // Overlay number
|
pascal@19399
|
65 #endif
|
pascal@15188
|
66 start:
|
pascal@15188
|
67 cld # assume nothing
|
pascal@19941
|
68 xorw %ax, %ax # %ax = 0
|
pascal@15188
|
69 zeroed = 12 # zeroed registers
|
pascal@19941
|
70 stacktop = 0x9E00 # in 0x8000 .. 0xA000 (+zeroed+12)
|
pascal@19941
|
71 pushw $INITSEG
|
pascal@19941
|
72 popw %ss # %ss contain INITSEG
|
pascal@19941
|
73 pushw %ss
|
pascal@19941
|
74 end_header:
|
pascal@19941
|
75 popw %es # %es = %ss = INITSEG
|
pascal@19941
|
76 # cmdline offset at 0x22
|
pascal@19941
|
77 movw $stacktop, %di # stacktop is an arbitrary value >=
|
pascal@15188
|
78 # length of bootsect + length of
|
pascal@15188
|
79 # setup + room for stack;
|
pascal@15188
|
80 # 12 is disk parm size.
|
pascal@15188
|
81 movw %di, %sp # put stack at INITSEG:stacktop-...
|
pascal@19941
|
82 #ifdef EXE_SUPPORT
|
pascal@19941
|
83 cwd # %dx = 0
|
pascal@19941
|
84 #endif
|
pascal@15188
|
85
|
pascal@15188
|
86 # Many BIOS's default disk parameter tables will not recognize
|
pascal@15188
|
87 # multi-sector reads beyond the maximum sector number specified
|
pascal@15188
|
88 # in the default diskette parameter tables - this may mean 7
|
pascal@15188
|
89 # sectors in some cases.
|
pascal@15188
|
90 #
|
pascal@15188
|
91 # Since single sector reads are slow and out of the question,
|
pascal@15188
|
92 # we must take care of this by creating new parameter tables
|
pascal@15188
|
93 # (for the first disk) in RAM. We can set the maximum sector
|
pascal@15188
|
94 # count to 36 - the most we will encounter on an ED 2.88.
|
pascal@15188
|
95 #
|
pascal@15188
|
96 # High doesn't hurt. Low does. Let's use the max: 63
|
pascal@15188
|
97
|
pascal@15188
|
98 movw $zeroed/2, %cx # clear gdt + offset, %ds, limits
|
pascal@15188
|
99 rep # don't worry about cld
|
pascal@15188
|
100 stosw # already done above
|
pascal@15188
|
101 popw %bx # offset = 0
|
pascal@15188
|
102 popw %ds # %ds = 0
|
pascal@15188
|
103 popw %fs # %fs = 0
|
pascal@15188
|
104
|
pascal@15188
|
105 movb setup_sects+0x7C00, %al # read bootsector + setup (%ds = 0)
|
pascal@15188
|
106 incw %ax
|
pascal@15188
|
107
|
pascal@15188
|
108 ldsw 0x78(%bx), %si # %ds:%bx+0x78 is parameter table address
|
pascal@15188
|
109 pushw %es
|
pascal@15188
|
110 pushw %di
|
pascal@15188
|
111 movb $6, %cl # copy 12 bytes
|
pascal@15188
|
112 rep # don't worry about cld
|
pascal@15188
|
113 movsw # already done above
|
pascal@15188
|
114 pushw %ss
|
pascal@15188
|
115 popw %ds # now %ds = %es = %ss = INITSEG
|
pascal@15188
|
116 popl %fs:0x78(%bx) # update parameter table address
|
pascal@15188
|
117 movb $63, 0x4-12(%di) # patch sector count, %di = stacktop
|
pascal@15188
|
118 cli
|
pascal@15188
|
119
|
pascal@15188
|
120 xchg %ax, %di # sector count
|
pascal@15188
|
121 popw %ax # limits = 0
|
pascal@15188
|
122 incw %cx # cylinder 0, sector 1, clear Z
|
pascal@15188
|
123 call read_first_sectors # read setup
|
pascal@15188
|
124
|
pascal@15188
|
125 # This routine loads the system at address LOADSEG, making sure
|
pascal@15188
|
126 # no 64kB boundaries are crossed. We try to load it as fast as
|
pascal@15188
|
127 # possible, loading whole tracks whenever we can.
|
pascal@15188
|
128
|
pascal@19941
|
129 #ifndef NO_DOTS
|
pascal@15188
|
130 popw %bx # clear %bx
|
pascal@19941
|
131 #endif
|
pascal@15188
|
132 movw syssize, %di
|
pascal@17223
|
133 decw %di
|
pascal@15188
|
134 shrw $9-4, %di
|
pascal@17223
|
135 incw %di
|
pascal@15188
|
136 movw $SYSSEG, %cx
|
pascal@15188
|
137 call read_sectorsCX
|
pascal@15188
|
138
|
pascal@15188
|
139 # This procedure turns off the floppy drive motor, so
|
pascal@15188
|
140 # that we enter the kernel in a known state, and
|
pascal@15188
|
141 # don't have to worry about it later.
|
pascal@15188
|
142
|
pascal@15188
|
143 kill_motor:
|
pascal@15188
|
144 xchgw %ax, %di # reset FDC (%di < 128)
|
pascal@15188
|
145 int $0x13
|
pascal@15188
|
146
|
pascal@15188
|
147 # After that (everything loaded), we jump to the setup-routine
|
pascal@15188
|
148 # loaded directly after the bootblock:
|
pascal@15188
|
149 # Segments are as follows: %ds = %ss = INITSEG
|
pascal@15188
|
150
|
pascal@15188
|
151 jmp_setup:
|
pascal@15188
|
152 ljmp $SETUPSEG, $0
|
pascal@15188
|
153
|
pascal@15188
|
154 #ifdef EXE_SUPPORT
|
pascal@19399
|
155 #ifdef SHUTDOWNDOS
|
pascal@19399
|
156 doiret:
|
pascal@19399
|
157 iret
|
pascal@19399
|
158 step19:
|
pascal@19399
|
159 pushw %si
|
pascal@19399
|
160 pushw %ds
|
pascal@19399
|
161 movw %sp, %si
|
pascal@19399
|
162 ldsw %ss:4(%si), %si
|
pascal@19399
|
163 cmpw $0x19CD, (%si)
|
pascal@19399
|
164 popw %ds
|
pascal@19399
|
165 popw %si
|
pascal@19399
|
166 jne doiret
|
pascal@19399
|
167 xorw %si, %si
|
pascal@19402
|
168 movw %si, %ds
|
pascal@19401
|
169 pushw %cs
|
pascal@19401
|
170 popw %ss
|
pascal@19400
|
171 movw $stacktop-4-16, %sp
|
pascal@19399
|
172 popl 4(%si)
|
pascal@19399
|
173 popaw
|
pascal@19399
|
174 #endif
|
pascal@19941
|
175 movesys: // %ax = SYSSEG, %bx = DS, %si
|
pascal@19941
|
176 //movw %cs:syssize, %bp
|
pascal@19941
|
177 movw $0x8000, %bp
|
pascal@19193
|
178 shrw $4, %si
|
pascal@19193
|
179 addw %si, %bx
|
pascal@17223
|
180 subw %ax, %bx
|
pascal@15188
|
181 jnc forward
|
pascal@15188
|
182 addw %bp, %ax
|
pascal@15188
|
183 forward:
|
pascal@15188
|
184 movw %ax, %es
|
pascal@17223
|
185 movw %ax, %dx
|
pascal@17223
|
186 addw %bx, %dx
|
pascal@17223
|
187 movw %dx, %ds
|
pascal@17223
|
188 sbbw %dx, %dx // %dx = 0 : -1
|
pascal@17223
|
189 cmc // C = 1 : 0
|
pascal@17223
|
190 adcw %dx, %ax
|
pascal@19193
|
191 xorw %si, %si
|
pascal@15188
|
192 xorw %di, %di
|
pascal@15188
|
193 movb $8, %cl
|
pascal@15188
|
194 rep
|
pascal@15188
|
195 movsw
|
pascal@15188
|
196 decw %bp
|
pascal@15188
|
197 jns forward
|
pascal@15188
|
198 #ifndef NO_CURSOR_DEFINITION
|
pascal@15188
|
199 movb $1, %ah
|
pascal@15188
|
200 movb $0, %bh
|
pascal@15188
|
201 movb $0x20, %ch // 0x2000
|
pascal@15188
|
202 int $0x10
|
pascal@15188
|
203 #endif
|
pascal@15188
|
204 pushw %ss
|
pascal@15188
|
205 popw %ds
|
pascal@15188
|
206 jmp jmp_setup
|
pascal@19941
|
207 comstart:
|
pascal@19941
|
208 cld # assume nothing
|
pascal@19941
|
209 pushw $INITSEG
|
pascal@19941
|
210 popw %es
|
pascal@19941
|
211 #ifdef CMDLINE
|
pascal@19941
|
212 movw %sp, %di
|
pascal@19941
|
213 movw $0x80, %si
|
pascal@19941
|
214 lodsb
|
pascal@19941
|
215 cbw
|
pascal@19941
|
216 xchgw %ax, %cx
|
pascal@19941
|
217 jcxz nocmdline
|
pascal@19941
|
218 movw $0xA33F, 0x7F(%si)
|
pascal@19941
|
219 # ifndef NO_CMDLINE_SHRINK
|
pascal@19941
|
220 skipspace:
|
pascal@19941
|
221 lodsb
|
pascal@19941
|
222 cmpb $0x20, %al
|
pascal@19941
|
223 je skipspace
|
pascal@19941
|
224 decw %si
|
pascal@19941
|
225 # endif
|
pascal@19941
|
226 rep
|
pascal@19941
|
227 movsb
|
pascal@19941
|
228 nocmdline:
|
pascal@15188
|
229 #endif
|
pascal@19941
|
230 movb $(512-(end_header-_start))/2, %cl
|
pascal@19941
|
231 movb EXEADRS(setup_sects), %ch
|
pascal@19941
|
232 movw $0x100, %si
|
pascal@19941
|
233 movw $end_header, %di
|
pascal@19941
|
234 rep
|
pascal@19941
|
235 movsw
|
pascal@19941
|
236 movw $SYSSEG, %ax
|
pascal@19941
|
237 movw %ds, %bx
|
pascal@19941
|
238 pushw %es
|
pascal@19941
|
239 popw %ss
|
pascal@19941
|
240 #ifndef SHUTDOWNDOS
|
pascal@19941
|
241 pushw %es
|
pascal@19941
|
242 pushw $movesys
|
pascal@15188
|
243 #endif
|
pascal@19941
|
244 #ifdef VCPI
|
pascal@19941
|
245 # ifndef SHUTDOWNDOS
|
pascal@19941
|
246 pushw %es
|
pascal@19941
|
247 pushw %ds
|
pascal@19941
|
248 # endif
|
pascal@19941
|
249 pushaw
|
pascal@19941
|
250 smsww %ax
|
pascal@19941
|
251 andb $1, %al
|
pascal@19941
|
252 je isrm
|
pascal@19941
|
253 movw $EXEADRS(gdt_vcpi),%si
|
pascal@19941
|
254 pushw $pagebuf/16
|
pascal@19941
|
255 popw %es
|
pascal@19941
|
256 movl $pagebuf+3,%es:0x1000
|
pascal@19941
|
257 xorw %di,%di
|
pascal@19941
|
258 call_vcpi:
|
pascal@19941
|
259 movb $0xDE,%ah // DE01, EBX = getiface(DS:SI, ES:DI)
|
pascal@19941
|
260 int $0x67
|
pascal@19941
|
261 movl $FLAT20(sw2pm_params),%esi
|
pascal@19941
|
262 movb $0x0C,%al // DE0C switchpm(ESI)
|
pascal@19941
|
263 cli
|
pascal@19941
|
264 jmp call_vcpi
|
pascal@19941
|
265 pm_code:
|
pascal@19941
|
266 movl %cr0,%eax
|
pascal@19941
|
267 andl $0x7FFFFFFE,%eax
|
pascal@19941
|
268 movl %eax,%cr0
|
pascal@19941
|
269 movl %eax,%cr3
|
pascal@19941
|
270 isrm:
|
pascal@19941
|
271 # ifdef SHUTDOWNDOS
|
pascal@19941
|
272 trace_int19
|
pascal@19941
|
273 # else
|
pascal@19941
|
274 lssw %cs:EXEADRS(saved_ss_sp),%sp
|
pascal@19941
|
275 popaw
|
pascal@19941
|
276 popw %ds
|
pascal@19941
|
277 popw %es
|
pascal@19941
|
278 retf
|
pascal@19941
|
279 # endif
|
pascal@19941
|
280 #else
|
pascal@19941
|
281 # ifdef SHUTDOWNDOS
|
pascal@19941
|
282 pushaw
|
pascal@19941
|
283 trace_int19
|
pascal@19941
|
284 # endif
|
pascal@19941
|
285 retf
|
pascal@19941
|
286 #endif
|
pascal@19941
|
287 #endif
|
pascal@15188
|
288
|
pascal@15188
|
289 # read_sectors reads %di sectors into %es:0 buffer.
|
pascal@15188
|
290 # %es:0 is updated to the next memory location.
|
pascal@15188
|
291 # First, sectors are read sector by sector until
|
pascal@15188
|
292 # sector per track count is known. Then they are
|
pascal@15188
|
293 # read track by track.
|
pascal@15188
|
294 # Assume no error on first track.
|
pascal@15188
|
295
|
pascal@15188
|
296 #ifdef FLOPPY_1440K_ONLY
|
pascal@19941
|
297 #define FLOPPY_HAS_2_SIDES hardcore heads count to 2
|
pascal@15188
|
298 #define FLOPPY_SECTORS 18 /* 18 sectors */
|
pascal@15188
|
299 #else
|
pascal@15188
|
300 #define FLOPPY_HEADS 2 /* 2 heads minimum */
|
pascal@15188
|
301 #define FLOPPY_SECTORS 9 /* 9 sectors minimum */
|
pascal@15188
|
302 #endif
|
pascal@15188
|
303
|
pascal@19941
|
304 return:
|
pascal@19941
|
305 #ifndef NO_DOTS
|
pascal@19941
|
306 movw $0xE2E,%ax
|
pascal@19941
|
307 movb $7,%bl
|
pascal@19941
|
308 int $0x10
|
pascal@19941
|
309 #endif
|
pascal@19941
|
310 ret
|
pascal@19941
|
311
|
pascal@15188
|
312 check_limits:
|
pascal@15188
|
313 #ifndef FLOPPY_1440K_ONLY
|
pascal@15188
|
314 popw %dx
|
pascal@15188
|
315 #ifdef FLOPPY_SECTORS
|
pascal@15188
|
316 cmpb $FLOPPY_SECTORS+1, %cl # minimum sector count
|
pascal@15188
|
317 jb check_head
|
pascal@15188
|
318 #endif
|
pascal@15188
|
319 cmpb %al, %cl # max sector known ?
|
pascal@15188
|
320 ja next_head # no -> store it
|
pascal@19941
|
321 #ifndef FLOPPY_HAS_2_SIDES
|
pascal@15188
|
322 check_head:
|
pascal@15188
|
323 #ifdef FLOPPY_HEADS
|
pascal@15188
|
324 cmpb $FLOPPY_HEADS, %dh # 2 heads minimum
|
pascal@15188
|
325 jb check_cylinder
|
pascal@15188
|
326 #endif
|
pascal@15188
|
327 cmpb %ah, %dh # max head known ?
|
pascal@15188
|
328 ja next_cylinder # no -> store it
|
pascal@15188
|
329 check_cylinder:
|
pascal@15188
|
330 #endif
|
pascal@19941
|
331 #endif
|
pascal@15188
|
332 pushaw
|
pascal@15188
|
333 #ifndef FLOPPY_1440K_ONLY
|
pascal@15188
|
334 cbw # %ah = 0
|
pascal@15188
|
335 #endif
|
pascal@15188
|
336 int $0x13 # reset controler
|
pascal@15188
|
337 popaw
|
pascal@15188
|
338 movb $1, %al # sector by sector...
|
pascal@15188
|
339 read_sectorslp:
|
pascal@15188
|
340 pushw %dx # some bios break dx...
|
pascal@15188
|
341 #ifndef FLOPPY_1440K_ONLY
|
pascal@15188
|
342 pushw %ax # limits
|
pascal@15188
|
343 subb %cl, %al # sectors remaining in track
|
pascal@15188
|
344 ja tolastsect
|
pascal@15188
|
345 movb $1, %al # 1 sector mini
|
pascal@15188
|
346 tolastsect:
|
pascal@15188
|
347 #else
|
pascal@19402
|
348 movb $FLOPPY_SECTORS+1, %al
|
pascal@15188
|
349 subb %cl, %al # sectors remaining in track
|
pascal@15188
|
350 #endif
|
pascal@15188
|
351 cbw
|
pascal@15188
|
352 cmpw %di, %ax
|
pascal@15188
|
353 jb more1trk
|
pascal@15188
|
354 movw %di, %ax # sectors to read
|
pascal@15188
|
355 more1trk:
|
pascal@15188
|
356 pushw %ax # save context
|
pascal@15188
|
357 movb $2, %ah # cmd: read chs
|
pascal@15188
|
358 int $0x13
|
pascal@15188
|
359 #ifndef FLOPPY_1440K_ONLY
|
pascal@15188
|
360 popw %dx # save %ax
|
pascal@15188
|
361 popw %ax # limits
|
pascal@15188
|
362 #else
|
pascal@15188
|
363 popw %ax # restore context
|
pascal@15188
|
364 popw %dx
|
pascal@15188
|
365 #endif
|
pascal@15188
|
366 jc check_limits
|
pascal@15188
|
367 #ifndef FLOPPY_1440K_ONLY
|
pascal@15188
|
368 xchgw %ax, %bp
|
pascal@15188
|
369 addw %dx,%cx # next sector
|
pascal@15188
|
370 movw %cx, %gs
|
pascal@15188
|
371 movw %es, %cx
|
pascal@15188
|
372 pushw %dx
|
pascal@15188
|
373 shlw $5, %dx
|
pascal@15188
|
374 addw %dx, %cx
|
pascal@15188
|
375 popw %dx
|
pascal@15188
|
376 subw %dx,%di # update sector counter
|
pascal@15188
|
377 popw %dx
|
pascal@15188
|
378 #else
|
pascal@15188
|
379 addw %ax,%cx # next sector
|
pascal@15188
|
380 movw %cx, %gs
|
pascal@15188
|
381 movw %es, %cx
|
pascal@15188
|
382 pushw %ax
|
pascal@15188
|
383 shlw $5, %ax
|
pascal@15188
|
384 addw %ax, %cx
|
pascal@15188
|
385 popw %ax
|
pascal@15188
|
386 subw %ax,%di # update sector counter
|
pascal@19941
|
387 #endif
|
pascal@15188
|
388 read_sectorsCX:
|
pascal@15188
|
389 movw %cx, %es # next location
|
pascal@19941
|
390 jz return
|
pascal@15188
|
391 read_sectors:
|
pascal@15188
|
392 movw %gs, %cx
|
pascal@15188
|
393 #ifndef FLOPPY_1440K_ONLY
|
pascal@15188
|
394 # al is last sector+1
|
pascal@15188
|
395 # ah is last cylinder+1
|
pascal@15188
|
396 xchgw %ax, %bp
|
pascal@15188
|
397 #endif
|
pascal@15188
|
398 #ifndef FLOPPY_1440K_ONLY
|
pascal@15188
|
399 cmpb %al,%cl # reach sector limit ?
|
pascal@15188
|
400 jne bdendlp
|
pascal@15188
|
401 next_head:
|
pascal@15188
|
402 movb %cl,%al
|
pascal@15188
|
403 #else
|
pascal@15188
|
404 cmpb $FLOPPY_SECTORS+1,%cl # reach sector limit ?
|
pascal@15188
|
405 jne bdendlp
|
pascal@15188
|
406 #endif
|
pascal@19941
|
407 movb $1,%cl # first sector
|
pascal@19941
|
408 #ifndef FLOPPY_HAS_2_SIDES
|
pascal@15188
|
409 incb %dh # next head
|
pascal@15188
|
410 cmpb %ah, %dh # reach head limit ?
|
pascal@15188
|
411 jne bdendlp
|
pascal@15188
|
412 next_cylinder:
|
pascal@15188
|
413 movb %dh,%ah
|
pascal@19941
|
414 movb $0,%dh # first head
|
pascal@15188
|
415 #else
|
pascal@19941
|
416 xorb %cl,%dh # next head
|
pascal@19941
|
417 jne bdendlp # reach head limit ?
|
pascal@15188
|
418 #endif
|
pascal@15188
|
419 # NOTE : support 256 cylinders max
|
pascal@15188
|
420 incb %ch # next cylinder
|
pascal@15188
|
421 read_first_sectors:
|
pascal@15188
|
422 bdendlp:
|
pascal@15188
|
423 jmp read_sectorslp
|
pascal@15188
|
424
|
pascal@19941
|
425 #ifdef VCPI
|
pascal@19941
|
426 pagebuf = 0x98000
|
pascal@19920
|
427 tss = gdt_abs-40
|
pascal@19920
|
428 gdt = gdt_abs-32
|
pascal@19920
|
429 gdt_null = gdt_abs-32
|
pascal@19920
|
430 gdt_vcpi = gdt_abs-24
|
pascal@19920
|
431 gdt_vcpi2 = gdt_abs-16
|
pascal@19920
|
432 gdt_vcpi3 = gdt_abs-8
|
pascal@19920
|
433 gdt_abs:
|
pascal@19941
|
434 .word 0xFFFF
|
pascal@19941
|
435 .long 0x92000000
|
pascal@19941
|
436 .byte 0xCF,0
|
pascal@19920
|
437 gdt_code:
|
pascal@19920
|
438 .word 0xFFFF
|
pascal@19920
|
439 gdt_code_base:
|
pascal@19941
|
440 .long 0x9A000000+FLAT20(0)
|
pascal@19920
|
441 .byte 0x8F,0
|
pascal@19920
|
442 gdt_tss:
|
pascal@19920
|
443 .word 0x00FF
|
pascal@19920
|
444 gdt_tss_base:
|
pascal@19941
|
445 .long 0x89000000+FLAT20(tss)
|
pascal@19920
|
446 .byte 0,0
|
pascal@19920
|
447 gdtr:
|
pascal@19920
|
448 gdt_lim:
|
pascal@19920
|
449 .word 0xFFFF
|
pascal@19920
|
450 gdt_base:
|
pascal@19941
|
451 .long FLAT20(gdt)
|
pascal@19920
|
452 sw2pm_params:
|
pascal@19920
|
453 sw2pm_cr3:
|
pascal@19920
|
454 .long pagebuf+0x1000
|
pascal@19920
|
455 sw2pm_gdtr_ptr:
|
pascal@19941
|
456 .long FLAT20(gdtr)
|
pascal@19920
|
457 sw2pm_idtr_ptr:
|
pascal@19941
|
458 .long FLAT20(idtr)
|
pascal@19920
|
459 sw2pm_ldtr:
|
pascal@19920
|
460 .word 0
|
pascal@19920
|
461 sw2pm_tr:
|
pascal@19920
|
462 SEL_TSS = gdt_tss-gdt_null
|
pascal@19920
|
463 .word SEL_TSS
|
pascal@19920
|
464 sw2pm_jumpaddr:
|
pascal@19941
|
465 .long pm_code
|
pascal@19920
|
466 SEL_CODE = gdt_code-gdt_null
|
pascal@19920
|
467 .word SEL_CODE
|
pascal@19920
|
468 idtr:
|
pascal@19920
|
469 idt_lim:
|
pascal@19920
|
470 .word 0x03FF
|
pascal@19920
|
471 idt_base:
|
pascal@19920
|
472 .long 0
|
pascal@19941
|
473 # ifndef SHUTDOWNDOS
|
pascal@19941
|
474 saved_ss_sp:
|
pascal@19941
|
475 .word stacktop-4-16-4,INITSEG
|
pascal@19941
|
476 # endif
|
pascal@19920
|
477 #endif
|
pascal@19941
|
478
|
pascal@15188
|
479 helpmsg:
|
pascal@19941
|
480 .ascii "SliTaz zImage boot"
|
pascal@19941
|
481 .org 497
|
pascal@19920
|
482 helpend:
|