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

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