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

linld: fix strtol
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Nov 24 08:47:45 2020 +0000 (2020-11-24)
parents d70f7cc6e3ac
children 431c14b76522
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
137 extrn _imgs:dword
138 push [dword _imgs+2] ; src ofs = pm.fallback
140 ;in al,70h
141 ;or al,80h ; disable NMI
142 ;out 70h,al
144 push si ; src seg=0
145 inc cx
146 push cx ; dst ofs hi
147 push si ; dst ofs lo : 64k
149 ; self move
150 extrn gdt_data
151 mov cx,offset gdt_data+8
152 ;xor di,di ; A000 -9000 -0800(>movedend)
154 ifdef NO386
155 mov ax,ss
156 add ax,900h
157 push ax ; topseg()+0x0900
158 else
159 push 9800h+(4096/16) ; 4096 bytes for cmdline
160 endif
161 pop es
162 push es
164 call near @@movsb@jmp ; movsb; pop cs ; ds=es=ss
166 extrn memcpy32:near
167 call memcpy32
169 ifdef MOVE_SETUP
170 mov si,0
171 global _rm_offset:word
172 org $-2
173 _rm_offset dw ?
174 ;xor di,di
175 ;mov cx,8000h
176 ;sub cx,si
177 ;rep
178 ; movsb
179 endif
181 ifndef noelks
182 ifdef MOVE_SETUP
183 ifndef NO386
184 mov eax,[dword si+1E6h]
185 xor eax,'SKLE'
186 else
187 mov ax,[si+1E6h]
188 xor ax,'LE'
189 jne @@notelks
190 mov ax,[si+1E8h]
191 xor ax,'SK'
192 endif
193 else
194 ifndef NO386
195 mov eax,[dword 1E6h]
196 xor eax,'SKLE'
197 else
198 mov ax,[1E6h]
199 xor ax,'LE'
200 jne @@notelks
201 mov ax,[1E8h]
202 xor ax,'SK'
203 endif
204 endif
205 jne @@notelks
206 mov cx,100h ; DS=ES=SS=0100
207 mov ss,cx
208 push ss
209 pop es
210 mov cl,20h ; CS=0120
211 push cx
212 push ax ; IP=0000
213 endif
214 ifdef MOVE_SETUP
215 @@notelks:
216 mov ch,7Eh
217 @@movsb@jmp:
218 xor di,di
219 rep
220 movsb
221 else
222 ifndef noelks
223 xchg ax,si
224 mov ch,7Eh ; 0Ah min, 7Eh max
225 @@movsb@jmp:
226 xor di,di
227 rep
228 movsb
229 @@notelks:
230 endif
231 endif
232 @@isbzimage:
233 push ss
234 pop ds
235 push ss
236 pop es
237 ifndef NO386
238 push ss
239 pop fs
240 push ss
241 pop gs
242 endif
243 assume nothing
244 assume cs:DGROUP
245 retf
247 step19code
249 endp _boot_kernel
251 movedend:
253 ends _TEXT
255 end
257 ;###### END OF FILE ############################################