wok-6.x view linld/stuff/src/JUMP.ASM @ rev 23984

linld: fix bootiso/strhead
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Nov 25 20:41:41 2020 +0000 (2020-11-25)
parents fc88d0826de4
children a946c1651082
line source
1 ;***************************************************************
2 ;****** This file is distributed under GPL
3 ;***************************************************************
4 ideal
5 %PAGESIZE 1000
6 %crefref
7 %noincl
8 %nomacs
9 ifdef NO386
10 p8086
11 else
12 p386
13 endif
15 group DGROUP _TEXT
16 assume cs:DGROUP,ds:DGROUP
18 segment _TEXT byte public use16 'CODE'
20 ;***************************************************************
21 ;void dos_shutdown()
22 ;***************************************************************
24 macro dos_shutdown
25 xor si,si
26 mov ds,si
27 ifndef NO386
28 push [dword si+4] ; save step
29 mov [word si+4],offset step19
30 else
31 mov ax,offset step19
32 xchg ax,[word si+4]
33 push [word si+6]
34 push ax ; save step
35 endif
36 mov [word cs:sssp],sp
37 ;cmp [byte si+7],0F0h
38 ;jnc notdos
39 mov [si+6],cs
40 pushf
41 pushf
42 pop ax
43 inc ah ; set TF
44 push ax
45 popf
46 call [dword si+4*19h]
47 notdos:
48 ifndef NO386
49 lss sp,[dword cs:sssp]
50 else
51 lds ax,[dword cs:sssp]
52 push ds
53 pop ss
54 xchg ax,sp
55 endif
56 xor si,si
57 mov ds,si
58 pop [dword si+4] ; restore step
59 endm
60 macro step19code
61 step19:
62 push si
63 push ds
64 mov si,sp
65 lds si,[dword ss:si+4] ; read cs:ip
66 cmp [word si],19CDh ; int 19h ?
67 pop ds
68 pop si
69 je notdos
70 iret
71 endm
74 ;***************************************************************
75 ;void boot_kernel();
76 ;****** Never returns
77 ;***************************************************************
78 global _boot_kernel:near
79 proc _boot_kernel near
81 ifdef NO386
82 p8086
83 else
84 p386
85 endif
86 ;cli ; we start doing destructive things to DOS
87 extrn sssp:word
88 mov ax,[sssp+2]
89 mov es,ax
90 extrn _cmdline:word
91 mov si,[_cmdline]
92 mov di,8000h
93 mov cx,2000h ; 4k for cmdline + 4k up to sp
94 rep
95 movsb
96 push es
97 pop ss
98 mov sp,di
100 mov dx,2000h
101 global _csip_hilo:word
102 org $-2
103 _csip_hilo dw ?
104 xchg al,dh ; 9020 / 9000
105 push ax
106 push dx ; 0000 / 0042
108 mov cl,1 ; load high ?
109 org $-1
110 global _pm_low:byte
111 _pm_low db ?
112 push cx
113 mov ax,[word ss:024Ch]
114 xor ax,2b30h ; ipxe ?
115 loopne @@notipxe
117 ; finish loading
118 extrn @last_ditch$qv:near
119 push cs
120 call @last_ditch$qv
121 dos_shutdown ; clear si; ds=0; kill VCPI
122 push cs
123 pop ds
125 @@notipxe:
126 pop cx
127 loop @@isbzimage
129 ; prepare memcpy32 size & srcofs param to move zImage pm
130 ifndef NO386
131 push 8 ; size hi
132 else
133 mov dx,8
134 push dx ; size hi
135 endif
136 push si ; size lo=up to 512k
138 include "himem.inc"
140 extrn _imgs:image_himem
141 push [_imgs.fallback] ; src ofs = pm.fallback
143 ;in al,70h
144 ;or al,80h ; disable NMI
145 ;out 70h,al
147 push si ; src seg=0
148 inc cx
149 push cx ; dst ofs hi
150 push si ; dst ofs lo : 64k
152 ; self move
153 extrn gdt_data
154 mov cx,offset gdt_data+8
155 ;xor di,di ; A000 -9000 -0800(>movedend)
157 ifdef NO386
158 mov ax,ss
159 add ax,900h
160 push ax ; topseg()+0x0900
161 else
162 push 9800h+(4096/16) ; 4096 bytes for cmdline
163 endif
164 pop es
165 push es
167 call near @@movsb@jmp ; movsb; pop cs ; ds=es=ss
169 extrn memcpy32:near
170 call memcpy32
172 ifdef MOVE_SETUP
173 mov si,0
174 global _rm_offset:word
175 org $-2
176 _rm_offset dw ?
177 ;xor di,di
178 ;mov cx,8000h
179 ;sub cx,si
180 ;rep
181 ; movsb
182 endif
184 ifndef noelks
185 ifdef MOVE_SETUP
186 ifndef NO386
187 mov eax,[dword si+1E6h]
188 xor eax,'SKLE'
189 else
190 mov ax,[si+1E6h]
191 xor ax,'LE'
192 jne @@notelks
193 mov ax,[si+1E8h]
194 xor ax,'SK'
195 endif
196 else
197 ifndef NO386
198 mov eax,[dword 1E6h]
199 xor eax,'SKLE'
200 else
201 mov ax,[1E6h]
202 xor ax,'LE'
203 jne @@notelks
204 mov ax,[1E8h]
205 xor ax,'SK'
206 endif
207 endif
208 jne @@notelks
209 mov cx,100h ; DS=ES=SS=0100
210 mov ss,cx
211 push ss
212 pop es
213 mov cl,20h ; CS=0120
214 push cx
215 push ax ; IP=0000
216 endif
217 ifdef MOVE_SETUP
218 @@notelks:
219 mov ch,7Eh
220 @@movsb@jmp:
221 xor di,di
222 rep
223 movsb
224 else
225 ifndef noelks
226 xchg ax,si
227 mov ch,7Eh ; 0Ah min, 7Eh max
228 @@movsb@jmp:
229 xor di,di
230 rep
231 movsb
232 @@notelks:
233 endif
234 endif
235 @@isbzimage:
236 push ss
237 pop ds
238 push ss
239 pop es
240 ifndef NO386
241 push ss
242 pop fs
243 push ss
244 pop gs
245 endif
246 assume nothing
247 assume cs:DGROUP
248 retf
250 step19code
252 endp _boot_kernel
254 movedend:
256 ends _TEXT
258 end
260 ;###### END OF FILE ############################################