wok view linld/stuff/src/JUMP.ASM @ rev 20520

Up sshguard (2.2.0)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Mon Nov 05 11:52:27 2018 +0100 (2018-11-05)
parents f5088c165f51
children 17c0ad41f5bf
line source
1 ;***************************************************************
2 ;****** This file is distributed under GPL
3 ;***************************************************************
4 ideal
5 %crefref
6 %noincl
7 %nomacs
8 ifdef NO386
9 p8086
10 else
11 p386
12 endif
14 group DGROUP _TEXT,_DATA,_BSS
15 assume cs:DGROUP,ds:DGROUP
17 segment _DATA byte public use16 'DATA'
19 overflow db "Loaded too close to 9000:0",0
21 ends _DATA
23 segment _BSS byte public use16 'BSS'
25 global _imgs:dword
27 ends _BSS
30 segment _TEXT byte public use16 'CODE'
32 ;***************************************************************
33 ;void dos_shutdown()
34 ;***************************************************************
36 macro dos_shutdown
37 xor di,di
38 mov ds,di
39 ifndef NO386
40 push [dword di+4] ; save step
41 mov [word di+4],offset step19
42 else
43 mov ax,offset step19
44 xchg ax,[word di+4]
45 push [word di+6]
46 push ax ; save step
47 endif
48 mov [word cs:sssp],sp
49 ;cmp [byte di+7],0F0h
50 ;jnc notdos
51 mov [di+6],cs
52 pushf
53 pushf
54 pop ax
55 inc ah ; set TF
56 push ax
57 popf
58 call [dword di+4*19h]
59 notdos:
60 ifndef NO386
61 lss sp,[dword cs:sssp]
62 else
63 lds ax,[dword cs:sssp]
64 push ds
65 pop ss
66 xchg ax,sp
67 endif
68 xor di,di
69 mov ds,di
70 pop [dword di+4] ; restore step
71 endm
72 macro step19code
73 step19:
74 push di
75 push ds
76 mov di,sp
77 lds di,[dword ss:di+4] ; read cs:ip
78 cmp [word di],19CDh ; int 19h ?
79 pop ds
80 pop di
81 je notdos
82 iret
83 endm
86 ;***************************************************************
87 ;void boot_kernel();
88 ;****** Never returns
89 ;***************************************************************
90 global _boot_kernel:near
91 proc _boot_kernel near
93 p8086
94 extrn _heap_top:word
95 global sssp
96 ifdef NO386
97 sssp:
98 extrn _topseg:near
99 call near _topseg
100 mov cl,4
101 mov [word sssp+2],ax
102 xchg ax,bx
103 mov ax,[_heap_top]
104 shr ax,cl
105 else
106 p386
107 mov ax,[_heap_top]
108 shr ax,4
109 mov bx,9000h
110 org $-4
111 sssp dd ?
112 endif
113 mov es,bx
114 mov dx,cs
115 add ax,dx
116 cmp ax,bx
117 jb @@nooverflow
118 ; Oops! We can stomp on our toes... better stop now
119 mov bx,offset overflow
120 extrn die:near
121 call near die
122 @@nooverflow:
123 ;cli ; we start doing destructive things to DOS
124 push es
125 pop ss
126 mov sp,0A000h
127 extrn _csip:dword
128 push [dword _csip]
129 extrn _rm_size:word
130 mov si,offset _rm_size ; _rm_size, _pm_high, _rm_buf
131 lodsw
132 xchg ax,cx ; _rm_size
133 lodsb ; _pm_high
134 mov si,[si] ; _rm_buf
135 xor di,di
136 ;cld
137 rep
138 movsb
139 extrn _cmdline:word
140 mov si,[_cmdline]
141 mov di,8000h
142 mov ch,10h ; 4k
143 rep
144 movsb
145 ifdef NO386
146 add bh,9
147 push bx ; topseg()+0x0900
148 else
149 push 9800h+(4096/16) ; 4096 bytes for cmdline
150 endif
151 cmp al,cl ; load high ?
152 pushf
153 ; finish loading
154 extrn @last_ditch$qv:near
155 call @last_ditch$qv
156 dos_shutdown ; clear di; ds=0
157 push cs
158 pop ds
159 popf
160 ; self move
161 ;cld
162 pop es ; min 2048 bytes for stack
163 jne @@isbzimage
164 mov cx,offset movedend
165 xor si,si ; A000 -9000 -0800(>movedend)
166 rep
167 movsb
168 mov ax,[word _imgs+2+2] ; get pm->fallback high word
169 push es
170 call near @@isbzimage ; pop cs ; ds=es=ss
172 ; prepare memcpy32 size & srcofs param to move zImage pm
173 mov dx,8
174 cmp ax,dx ; buf > 80000h ?
175 ja @@bufhigh
176 sub dx,ax
177 inc dx ; up to 90000h-1
178 @@bufhigh:
179 push dx ; size hi
180 push cx ; size lo=up to 512k
181 push ax ; src ofs ho = pm.fallback
183 ;in al,70h
184 ;or al,80h ; disable NMI
185 ;out 70h,al
187 xor di,di
188 push di ; src ofs lo
189 push di ; src seg=0
190 ifdef NO386
191 inc di
192 push di ; dst ofs hi
193 dec di
194 else
195 push 1 ; dst ofs hi
196 endif
197 push di ; dst ofs lo : 64k
198 extrn _memcpy32:near
199 call _memcpy32
200 add sp,14
202 ifndef noelks
203 ifndef NO386
204 cmp [dword 1E6h],'SKLE'
205 jne @@notelks
206 xor si,si
207 else
208 mov si,1E6h
209 lodsw
210 cmp ax,'LE'
211 jne @@notelks
212 lodsw
213 xor ax,'SK'
214 jne @@notelks
215 xchg ax,si
216 endif
217 push es
218 pop ss
219 mov cx,120h ; CS=0120
220 push cx
221 push si ; IP=0000
222 mov cl,0 ; DS=ES=SS=0100
223 mov es,cx
224 mov ch,05h ; 500h mini
225 rep
226 movsw
227 @@notelks:
228 endif
229 @@isbzimage:
230 push ss
231 pop ds
232 push ss
233 pop es
234 ifndef NO386
235 push ss
236 pop fs
237 push ss
238 pop gs
239 endif
240 assume nothing
241 assume cs:DGROUP
242 retf
244 step19code
246 endp _boot_kernel
248 movedend:
250 ends _TEXT
252 end
254 ;###### END OF FILE ############################################