wok annotate linld/stuff/src/JUMP.ASM @ rev 24924

Add as & asxxxx
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Apr 13 10:27:34 2022 +0000 (2022-04-13)
parents 530dacfd6585
children
rev   line source
pascal@19515 1 ;***************************************************************
pascal@19515 2 ;****** This file is distributed under GPL
pascal@19515 3 ;***************************************************************
pascal@19515 4 ideal
pascal@24034 5 %PAGESIZE 255
pascal@19515 6 %crefref
pascal@19515 7 %noincl
pascal@19515 8 %nomacs
pascal@24019 9
pascal@24019 10 include "common.inc"
pascal@24019 11
pascal@19636 12 ifdef NO386
pascal@19636 13 p8086
pascal@19636 14 else
pascal@19515 15 p386
pascal@19636 16 endif
pascal@19515 17
pascal@23983 18 group DGROUP _TEXT
pascal@19515 19 assume cs:DGROUP,ds:DGROUP
pascal@19515 20
pascal@19515 21 segment _TEXT byte public use16 'CODE'
pascal@19515 22
pascal@19905 23 ;***************************************************************
pascal@20473 24 ;void dos_shutdown()
pascal@20473 25 ;***************************************************************
pascal@20473 26
pascal@20473 27 macro dos_shutdown
pascal@24067 28 xor bx,bx
pascal@24013 29 ifdef QUICK_BOOT
pascal@24564 30 CMDNUMOFS = 20
pascal@24564 31 ifdef MINRAM
pascal@24564 32 CMDNUMOFS = CMDNUMOFS+4
pascal@24564 33 endif
pascal@24564 34 ifdef CPUTYPE
pascal@24564 35 CMDNUMOFS = CMDNUMOFS+4
pascal@24564 36 endif
pascal@24013 37 extrn _cmdnum:dword
pascal@24564 38 quickboot = (byte _cmdnum+CMDNUMOFS)
pascal@24067 39 cmp bl,[quickboot]
pascal@24067 40 mov ds,bx
pascal@24013 41 jne skip_shutdown
pascal@24013 42 else
pascal@24067 43 mov ds,bx
pascal@24013 44 endif
pascal@20473 45 ifndef NO386
pascal@24067 46 push [dword bx+4] ; save step
pascal@24067 47 mov [word bx+4],offset step19
pascal@20473 48 else
pascal@20473 49 mov ax,offset step19
pascal@24067 50 xchg ax,[word bx+4]
pascal@24067 51 push [word bx+6]
pascal@20473 52 push ax ; save step
pascal@20473 53 endif
pascal@20473 54 mov [word cs:sssp],sp
pascal@24067 55 ;cmp [byte bx+7],0F0h
pascal@20473 56 ;jnc notdos
pascal@24067 57 mov [bx+6],cs
pascal@20473 58 pushf
pascal@20473 59 pushf
pascal@20473 60 pop ax
pascal@20473 61 inc ah ; set TF
pascal@20473 62 push ax
pascal@20473 63 popf
pascal@24067 64 call [dword bx+4*19h]
pascal@20473 65 notdos:
pascal@20473 66 ifndef NO386
pascal@20473 67 lss sp,[dword cs:sssp]
pascal@20473 68 else
pascal@20473 69 lds ax,[dword cs:sssp]
pascal@20473 70 push ds
pascal@20473 71 pop ss
pascal@20473 72 xchg ax,sp
pascal@20473 73 endif
pascal@21342 74 xor si,si
pascal@21342 75 mov ds,si
pascal@21342 76 pop [dword si+4] ; restore step
pascal@24013 77 skip_shutdown:
pascal@20473 78 endm
pascal@20473 79 macro step19code
pascal@20473 80 step19:
pascal@21342 81 push si
pascal@20473 82 push ds
pascal@21342 83 mov si,sp
pascal@21342 84 lds si,[dword ss:si+4] ; read cs:ip
pascal@21342 85 cmp [word si],19CDh ; int 19h ?
pascal@20473 86 pop ds
pascal@21342 87 pop si
pascal@20473 88 je notdos
pascal@20473 89 iret
pascal@20473 90 endm
pascal@20473 91
pascal@20473 92
pascal@20473 93 ;***************************************************************
pascal@19905 94 ;void boot_kernel();
pascal@19905 95 ;****** Never returns
pascal@19905 96 ;***************************************************************
pascal@19905 97 proc _boot_kernel near
pascal@19905 98
pascal@21757 99 ifdef NO386
pascal@20142 100 p8086
pascal@19903 101 else
pascal@20142 102 p386
pascal@19903 103 endif
pascal@20473 104 ;cli ; we start doing destructive things to DOS
pascal@21757 105 extrn sssp:word
pascal@22288 106 mov ax,[sssp+2]
pascal@22288 107 mov es,ax
pascal@23996 108 extrn _cmdstr:word
pascal@23996 109 _cmdline = _cmdstr+0
pascal@19571 110 mov si,[_cmdline]
pascal@19571 111 mov di,8000h
pascal@24095 112 mov cx,1000h ; 4k for cmdline + 4k up to sp
pascal@19571 113 rep
pascal@24095 114 movsw
pascal@22288 115 push es
pascal@22288 116 pop ss
pascal@22288 117 mov sp,di
pascal@22019 118
pascal@24019 119 ifdef LINUX001
pascal@22288 120 mov dx,2000h
pascal@22288 121 global _csip_hilo:word
pascal@22288 122 org $-2
pascal@22288 123 _csip_hilo dw ?
pascal@22288 124 xchg al,dh ; 9020 / 9000
pascal@24019 125 else
pascal@24019 126 mov al,20h ; 9020:0
pascal@24019 127 xor dx,dx
pascal@24019 128 endif
pascal@22288 129 push ax
pascal@22288 130 push dx ; 0000 / 0042
pascal@22288 131
pascal@22288 132 mov cl,1 ; load high ?
pascal@22179 133 org $-1
pascal@22288 134 global _pm_low:byte
pascal@22288 135 _pm_low db ?
pascal@22019 136 push cx
pascal@24019 137 ifdef IPXE
pascal@22019 138 mov ax,[word ss:024Ch]
pascal@22019 139 xor ax,2b30h ; ipxe ?
pascal@22019 140 loopne @@notipxe
pascal@24019 141 else
pascal@24019 142 loop @@truebzimage
pascal@24019 143 endif
pascal@22019 144
pascal@22019 145 ; finish loading
pascal@22019 146 extrn @last_ditch$qv:near
pascal@22008 147 push cs
pascal@22008 148 call @last_ditch$qv
pascal@24019 149 ifdef SHUTDOWN
pascal@22152 150 dos_shutdown ; clear si; ds=0; kill VCPI
pascal@22152 151 push cs
pascal@22152 152 pop ds
pascal@24019 153 else
pascal@24019 154 xor si,si
pascal@24019 155 endif
pascal@22019 156
pascal@24019 157 @@truebzimage:
pascal@22019 158 @@notipxe:
pascal@22019 159 pop cx
pascal@22019 160 loop @@isbzimage
pascal@22019 161
pascal@20477 162 ; prepare memcpy32 size & srcofs param to move zImage pm
pascal@21781 163 ifndef NO386
pascal@21781 164 push 8 ; size hi
pascal@21781 165 else
pascal@20477 166 mov dx,8
pascal@20477 167 push dx ; size hi
pascal@21781 168 endif
pascal@22288 169 push si ; size lo=up to 512k
pascal@23984 170
pascal@23984 171 include "himem.inc"
pascal@23984 172
pascal@23984 173 extrn _imgs:image_himem
pascal@24034 174 ifdef NO386
pascal@24034 175 les ax,[_imgs.fallback] ; src ofs = pm.fallback
pascal@24034 176 push es
pascal@24034 177 push ax
pascal@24034 178 else
pascal@23984 179 push [_imgs.fallback] ; src ofs = pm.fallback
pascal@24034 180 endif
pascal@20477 181
pascal@19538 182 ;in al,70h
pascal@19538 183 ;or al,80h ; disable NMI
pascal@19538 184 ;out 70h,al
pascal@20477 185
pascal@22288 186 push si ; src seg=0
pascal@21628 187 inc cx
pascal@21628 188 push cx ; dst ofs hi
pascal@24013 189 push si ; dst ofs lo : 64k = 0x10000
pascal@22288 190
pascal@22288 191 ; self move
pascal@22288 192 extrn gdt_data
pascal@22288 193 mov cx,offset gdt_data+8
pascal@22288 194 ;xor di,di ; A000 -9000 -0800(>movedend)
pascal@22288 195
pascal@22288 196 ifdef NO386
pascal@22288 197 mov ax,ss
pascal@24034 198 add ax,800h+(4096/16)
pascal@22288 199 push ax ; topseg()+0x0900
pascal@22288 200 else
pascal@22288 201 push 9800h+(4096/16) ; 4096 bytes for cmdline
pascal@22288 202 endif
pascal@22288 203 pop es
pascal@22288 204 push es
pascal@22288 205
pascal@24019 206 ifdef ELKS
pascal@22288 207 call near @@movsb@jmp ; movsb; pop cs ; ds=es=ss
pascal@24019 208 elseifdef MOVE_SETUP
pascal@24019 209 call near @@movsb@jmp ; movsb; pop cs ; ds=es=ss
pascal@24019 210 else
pascal@24019 211 xor di,di
pascal@24019 212 rep
pascal@24019 213 movsb
pascal@24034 214 call near @@isbzimage ; pop cs ; ds=es=ss
pascal@24019 215 endif
pascal@22288 216
pascal@24034 217 ;mov es,cx
pascal@24034 218 ;mov [es:15*4+2],cs ; update int15/88h hook
pascal@24034 219
pascal@20528 220 extrn memcpy32:near
pascal@20528 221 call memcpy32
pascal@19515 222
pascal@22176 223 ifdef MOVE_SETUP
pascal@22288 224 mov si,0
pascal@22288 225 global _rm_offset:word
pascal@22288 226 org $-2
pascal@22288 227 _rm_offset dw ?
pascal@22176 228 ;xor di,di
pascal@22288 229 ;mov cx,8000h
pascal@22176 230 ;sub cx,si
pascal@22288 231 ;rep
pascal@22288 232 ; movsb
pascal@22176 233 endif
pascal@22176 234
pascal@24019 235 ifdef ELKS
pascal@22288 236 ifdef MOVE_SETUP
pascal@19515 237 ifndef NO386
pascal@22288 238 mov eax,[dword si+1E6h]
pascal@22288 239 xor eax,'SKLE'
pascal@22288 240 else
pascal@24162 241 cmp [word si+1E6h],'LE'
pascal@20473 242 jne @@notelks
pascal@22288 243 mov ax,[si+1E8h]
pascal@22288 244 xor ax,'SK'
pascal@22288 245 endif
pascal@19515 246 else
pascal@22288 247 ifndef NO386
pascal@22288 248 mov eax,[dword 1E6h]
pascal@22288 249 xor eax,'SKLE'
pascal@22288 250 else
pascal@22288 251 mov ax,[1E6h]
pascal@22288 252 xor ax,'LE'
pascal@19905 253 jne @@notelks
pascal@22288 254 mov ax,[1E8h]
pascal@20481 255 xor ax,'SK'
pascal@22288 256 endif
pascal@22288 257 endif
pascal@20473 258 jne @@notelks
pascal@22288 259 mov cx,100h ; DS=ES=SS=0100
pascal@22288 260 mov ss,cx
pascal@22288 261 push ss
pascal@22288 262 pop es
pascal@22288 263 mov cl,20h ; CS=0120
pascal@22288 264 push cx
pascal@22288 265 push ax ; IP=0000
pascal@19515 266 endif
pascal@22179 267 ifdef MOVE_SETUP
pascal@22288 268 @@notelks:
pascal@22288 269 mov ch,7Eh
pascal@22288 270 @@movsb@jmp:
pascal@22288 271 xor di,di
pascal@22288 272 rep
pascal@22288 273 movsb
pascal@22179 274 else
pascal@24019 275 ifdef ELKS
pascal@22288 276 xchg ax,si
pascal@22288 277 mov ch,7Eh ; 0Ah min, 7Eh max
pascal@22288 278 @@movsb@jmp:
pascal@22288 279 xor di,di
pascal@19515 280 rep
pascal@22288 281 movsb
pascal@19905 282 @@notelks:
pascal@22288 283 endif
pascal@19515 284 endif
pascal@19905 285 @@isbzimage:
pascal@19515 286 push ss
pascal@19515 287 pop ds
pascal@20475 288 push ss
pascal@20475 289 pop es
pascal@19636 290 ifndef NO386
pascal@19515 291 push ss
pascal@19515 292 pop fs
pascal@19515 293 push ss
pascal@19515 294 pop gs
pascal@19636 295 endif
pascal@19515 296 assume nothing
pascal@19515 297 assume cs:DGROUP
pascal@19515 298 retf
pascal@19515 299
pascal@24019 300 ifdef SHUTDOWN
pascal@20473 301 step19code
pascal@24019 302 endif
pascal@20477 303
pascal@20477 304 endp _boot_kernel
pascal@20477 305
pascal@19515 306 ends _TEXT
pascal@19515 307
pascal@19515 308 end
pascal@19515 309
pascal@19515 310 ;###### END OF FILE ############################################