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

linld: ipxe support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Oct 19 11:12:33 2019 +0200 (2019-10-19)
parents fcb1de9af8f7
children db46d017dfe4
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,_BSS
16 assume cs:DGROUP,ds:DGROUP
18 segment _BSS byte public use16 'BSS'
20 global _imgs:dword
22 ends _BSS
25 segment _TEXT byte public use16 'CODE'
27 ;***************************************************************
28 ;void dos_shutdown()
29 ;***************************************************************
31 macro dos_shutdown
32 xor si,si
33 mov ds,si
34 ifndef NO386
35 push [dword si+4] ; save step
36 mov [word si+4],offset step19
37 else
38 mov ax,offset step19
39 xchg ax,[word si+4]
40 push [word si+6]
41 push ax ; save step
42 endif
43 mov [word cs:sssp],sp
44 ;cmp [byte si+7],0F0h
45 ;jnc notdos
46 mov [si+6],cs
47 pushf
48 pushf
49 pop ax
50 inc ah ; set TF
51 push ax
52 popf
53 call [dword si+4*19h]
54 notdos:
55 ifndef NO386
56 lss sp,[dword cs:sssp]
57 else
58 lds ax,[dword cs:sssp]
59 push ds
60 pop ss
61 xchg ax,sp
62 endif
63 xor si,si
64 mov ds,si
65 pop [dword si+4] ; restore step
66 endm
67 macro step19code
68 step19:
69 push si
70 push ds
71 mov si,sp
72 lds si,[dword ss:si+4] ; read cs:ip
73 cmp [word si],19CDh ; int 19h ?
74 pop ds
75 pop si
76 je notdos
77 iret
78 endm
81 ;***************************************************************
82 ;void boot_kernel();
83 ;****** Never returns
84 ;***************************************************************
85 global _boot_kernel:near
86 proc _boot_kernel near
88 ifdef NO386
89 p8086
90 else
91 p386
92 endif
93 ;cli ; we start doing destructive things to DOS
94 extrn sssp:word
95 mov es,[sssp+2]
96 push es
97 pop ss
98 mov sp,0A000h
99 extrn _rm_size:word
100 ifdef NO386
101 mov si,offset _rm_size-2 ; _rm_size, _pm_high, _rm_buf
102 lodsw
103 push ax ; _csip high
104 push [word si-4] ; _csip low
105 lodsw
106 else
107 mov si,offset _rm_size+2 ; _rm_size, _pm_high, _rm_buf
108 push [dword si-6] ; _csip
109 endif
110 lodsb ; _pm_high
111 extrn _cmdline:word
112 mov si,[_cmdline]
113 mov di,8000h
114 mov ch,10h ; 4k
115 rep
116 movsb
117 ifdef NO386
118 mov bx,ss
119 add bh,9
120 push bx ; topseg()+0x0900
121 else
122 push 9800h+(4096/16) ; 4096 bytes for cmdline
123 endif
124 cmp al,cl ; load high ?
125 pushf
126 ; finish loading
127 extrn @last_ditch$qv:near
128 mov ax,[ss:024Ch]
129 jne @@notzimage
130 @@isipxe:
131 dos_shutdown ; clear si; ds=0
132 push cs
133 pop ds
134 push cs
135 call @last_ditch$qv
136 @@notzimage:
137 xor ax,2b30h
138 je @@isipxe
139 popf
140 ; self move
141 ;cld
142 pop es ; min 2048 bytes for stack
143 jne @@isbzimage
144 extrn gdt_data
145 mov cx,offset gdt_data+8
146 xor di,di ; A000 -9000 -0800(>movedend)
147 rep
148 movsb
149 mov si,offset _imgs+2
150 lodsw
151 xchg ax,bx ; get pm->fallback low word
152 lodsw ; get pm->fallback high word
153 push es
154 call near @@isbzimage ; pop cs ; ds=es=ss
156 ; prepare memcpy32 size & srcofs param to move zImage pm
157 ifndef NO386
158 push 8 ; size hi
159 else
160 mov dx,8
161 push dx ; size hi
162 endif
163 push cx ; size lo=up to 512k
164 push ax ; src ofs hi = pm.fallback
166 ;in al,70h
167 ;or al,80h ; disable NMI
168 ;out 70h,al
170 push bx ; src ofs lo
171 xor di,di
172 push di ; src seg=0
173 inc cx
174 push cx ; dst ofs hi
175 push di ; dst ofs lo : 64k
176 extrn memcpy32:near
177 call memcpy32
179 ifndef noelks
180 ifndef NO386
181 cmp [dword 1E6h],'SKLE'
182 jne @@notelks
183 xor si,si
184 else
185 mov si,1E6h
186 lodsw
187 cmp ax,'LE'
188 jne @@notelks
189 lodsw
190 xor ax,'SK'
191 jne @@notelks
192 xchg ax,si
193 endif
194 mov cx,100h ; DS=ES=SS=0100
195 mov ss,cx
196 mov es,cx
197 mov cl,20h ; CS=0120
198 push cx
199 push si ; IP=0000
200 mov ch,3Fh ; 05h min, 3Fh max
201 rep
202 movsw
203 @@notelks:
204 endif
205 @@isbzimage:
206 push ss
207 pop ds
208 push ss
209 pop es
210 ifndef NO386
211 push ss
212 pop fs
213 push ss
214 pop gs
215 endif
216 assume nothing
217 assume cs:DGROUP
218 retf
220 step19code
222 endp _boot_kernel
224 movedend:
226 ends _TEXT
228 end
230 ;###### END OF FILE ############################################