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

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