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

Openssh (8.5p1)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Thu Apr 08 09:21:26 2021 +0000 (2021-04-08)
parents 217c02cbbe8d
children 06547d8cf241
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@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@19905 90 proc _boot_kernel near
pascal@19905 91
pascal@21757 92 ifdef NO386
pascal@20142 93 p8086
pascal@19903 94 else
pascal@20142 95 p386
pascal@19903 96 endif
pascal@20473 97 ;cli ; we start doing destructive things to DOS
pascal@21757 98 extrn sssp:word
pascal@22288 99 mov ax,[sssp+2]
pascal@22288 100 mov es,ax
pascal@23996 101 extrn _cmdstr:word
pascal@23996 102 _cmdline = _cmdstr+0
pascal@19571 103 mov si,[_cmdline]
pascal@19571 104 mov di,8000h
pascal@22288 105 mov cx,2000h ; 4k for cmdline + 4k up to sp
pascal@19571 106 rep
pascal@19571 107 movsb
pascal@22288 108 push es
pascal@22288 109 pop ss
pascal@22288 110 mov sp,di
pascal@22019 111
pascal@24019 112 ifdef LINUX001
pascal@22288 113 mov dx,2000h
pascal@22288 114 global _csip_hilo:word
pascal@22288 115 org $-2
pascal@22288 116 _csip_hilo dw ?
pascal@22288 117 xchg al,dh ; 9020 / 9000
pascal@24019 118 else
pascal@24019 119 mov al,20h ; 9020:0
pascal@24019 120 xor dx,dx
pascal@24019 121 endif
pascal@22288 122 push ax
pascal@22288 123 push dx ; 0000 / 0042
pascal@22288 124
pascal@22288 125 mov cl,1 ; load high ?
pascal@22179 126 org $-1
pascal@22288 127 global _pm_low:byte
pascal@22288 128 _pm_low db ?
pascal@22019 129 push cx
pascal@24019 130 ifdef IPXE
pascal@22019 131 mov ax,[word ss:024Ch]
pascal@22019 132 xor ax,2b30h ; ipxe ?
pascal@22019 133 loopne @@notipxe
pascal@24019 134 else
pascal@24019 135 loop @@truebzimage
pascal@24019 136 endif
pascal@22019 137
pascal@22019 138 ; finish loading
pascal@22019 139 extrn @last_ditch$qv:near
pascal@22008 140 push cs
pascal@22008 141 call @last_ditch$qv
pascal@24019 142 ifdef SHUTDOWN
pascal@22152 143 dos_shutdown ; clear si; ds=0; kill VCPI
pascal@22152 144 push cs
pascal@22152 145 pop ds
pascal@24019 146 else
pascal@24019 147 xor si,si
pascal@24019 148 endif
pascal@22019 149
pascal@24019 150 @@truebzimage:
pascal@22019 151 @@notipxe:
pascal@22019 152 pop cx
pascal@22019 153 loop @@isbzimage
pascal@22019 154
pascal@20477 155 ; prepare memcpy32 size & srcofs param to move zImage pm
pascal@21781 156 ifndef NO386
pascal@21781 157 push 8 ; size hi
pascal@21781 158 else
pascal@20477 159 mov dx,8
pascal@20477 160 push dx ; size hi
pascal@21781 161 endif
pascal@22288 162 push si ; size lo=up to 512k
pascal@23984 163
pascal@23984 164 include "himem.inc"
pascal@23984 165
pascal@23984 166 extrn _imgs:image_himem
pascal@24034 167 ifdef NO386
pascal@24034 168 les ax,[_imgs.fallback] ; src ofs = pm.fallback
pascal@24034 169 push es
pascal@24034 170 push ax
pascal@24034 171 else
pascal@23984 172 push [_imgs.fallback] ; src ofs = pm.fallback
pascal@24034 173 endif
pascal@20477 174
pascal@19538 175 ;in al,70h
pascal@19538 176 ;or al,80h ; disable NMI
pascal@19538 177 ;out 70h,al
pascal@20477 178
pascal@22288 179 push si ; src seg=0
pascal@21628 180 inc cx
pascal@21628 181 push cx ; dst ofs hi
pascal@24013 182 push si ; dst ofs lo : 64k = 0x10000
pascal@22288 183
pascal@22288 184 ; self move
pascal@22288 185 extrn gdt_data
pascal@22288 186 mov cx,offset gdt_data+8
pascal@22288 187 ;xor di,di ; A000 -9000 -0800(>movedend)
pascal@22288 188
pascal@22288 189 ifdef NO386
pascal@22288 190 mov ax,ss
pascal@24034 191 add ax,800h+(4096/16)
pascal@22288 192 push ax ; topseg()+0x0900
pascal@22288 193 else
pascal@22288 194 push 9800h+(4096/16) ; 4096 bytes for cmdline
pascal@22288 195 endif
pascal@22288 196 pop es
pascal@22288 197 push es
pascal@22288 198
pascal@24019 199 ifdef ELKS
pascal@22288 200 call near @@movsb@jmp ; movsb; pop cs ; ds=es=ss
pascal@24019 201 elseifdef MOVE_SETUP
pascal@24019 202 call near @@movsb@jmp ; movsb; pop cs ; ds=es=ss
pascal@24019 203 else
pascal@24019 204 xor di,di
pascal@24019 205 rep
pascal@24019 206 movsb
pascal@24034 207 call near @@isbzimage ; pop cs ; ds=es=ss
pascal@24019 208 endif
pascal@22288 209
pascal@24034 210 ;mov es,cx
pascal@24034 211 ;mov [es:15*4+2],cs ; update int15/88h hook
pascal@24034 212
pascal@20528 213 extrn memcpy32:near
pascal@20528 214 call memcpy32
pascal@19515 215
pascal@22176 216 ifdef MOVE_SETUP
pascal@22288 217 mov si,0
pascal@22288 218 global _rm_offset:word
pascal@22288 219 org $-2
pascal@22288 220 _rm_offset dw ?
pascal@22176 221 ;xor di,di
pascal@22288 222 ;mov cx,8000h
pascal@22176 223 ;sub cx,si
pascal@22288 224 ;rep
pascal@22288 225 ; movsb
pascal@22176 226 endif
pascal@22176 227
pascal@24019 228 ifdef ELKS
pascal@22288 229 ifdef MOVE_SETUP
pascal@19515 230 ifndef NO386
pascal@22288 231 mov eax,[dword si+1E6h]
pascal@22288 232 xor eax,'SKLE'
pascal@22288 233 else
pascal@22288 234 mov ax,[si+1E6h]
pascal@22288 235 xor ax,'LE'
pascal@20473 236 jne @@notelks
pascal@22288 237 mov ax,[si+1E8h]
pascal@22288 238 xor ax,'SK'
pascal@22288 239 endif
pascal@19515 240 else
pascal@22288 241 ifndef NO386
pascal@22288 242 mov eax,[dword 1E6h]
pascal@22288 243 xor eax,'SKLE'
pascal@22288 244 else
pascal@22288 245 mov ax,[1E6h]
pascal@22288 246 xor ax,'LE'
pascal@19905 247 jne @@notelks
pascal@22288 248 mov ax,[1E8h]
pascal@20481 249 xor ax,'SK'
pascal@22288 250 endif
pascal@22288 251 endif
pascal@20473 252 jne @@notelks
pascal@22288 253 mov cx,100h ; DS=ES=SS=0100
pascal@22288 254 mov ss,cx
pascal@22288 255 push ss
pascal@22288 256 pop es
pascal@22288 257 mov cl,20h ; CS=0120
pascal@22288 258 push cx
pascal@22288 259 push ax ; IP=0000
pascal@19515 260 endif
pascal@22179 261 ifdef MOVE_SETUP
pascal@22288 262 @@notelks:
pascal@22288 263 mov ch,7Eh
pascal@22288 264 @@movsb@jmp:
pascal@22288 265 xor di,di
pascal@22288 266 rep
pascal@22288 267 movsb
pascal@22179 268 else
pascal@24019 269 ifdef ELKS
pascal@22288 270 xchg ax,si
pascal@22288 271 mov ch,7Eh ; 0Ah min, 7Eh max
pascal@22288 272 @@movsb@jmp:
pascal@22288 273 xor di,di
pascal@19515 274 rep
pascal@22288 275 movsb
pascal@19905 276 @@notelks:
pascal@22288 277 endif
pascal@19515 278 endif
pascal@19905 279 @@isbzimage:
pascal@19515 280 push ss
pascal@19515 281 pop ds
pascal@20475 282 push ss
pascal@20475 283 pop es
pascal@19636 284 ifndef NO386
pascal@19515 285 push ss
pascal@19515 286 pop fs
pascal@19515 287 push ss
pascal@19515 288 pop gs
pascal@19636 289 endif
pascal@19515 290 assume nothing
pascal@19515 291 assume cs:DGROUP
pascal@19515 292 retf
pascal@19515 293
pascal@24019 294 ifdef SHUTDOWN
pascal@20473 295 step19code
pascal@24019 296 endif
pascal@20477 297
pascal@20477 298 endp _boot_kernel
pascal@20477 299
pascal@19515 300 ends _TEXT
pascal@19515 301
pascal@19515 302 end
pascal@19515 303
pascal@19515 304 ;###### END OF FILE ############################################