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

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