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

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