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

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