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

linld: add isoboot
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun May 24 16:16:52 2020 +0000 (2020-05-24)
parents 664d83fb04f9
children fc88d0826de4
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@23806 88 ifdef ISOHOOK
pascal@23806 89 extrn iso_cleanup_hack:word
pascal@23806 90 call [iso_cleanup_hack] ; or ret
pascal@23806 91 endif
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@19571 101 extrn _cmdline:word
pascal@19571 102 mov si,[_cmdline]
pascal@19571 103 mov di,8000h
pascal@22288 104 mov cx,2000h ; 4k for cmdline + 4k up to sp
pascal@19571 105 rep
pascal@19571 106 movsb
pascal@22288 107 push es
pascal@22288 108 pop ss
pascal@22288 109 mov sp,di
pascal@22019 110
pascal@22288 111 mov dx,2000h
pascal@22288 112 global _csip_hilo:word
pascal@22288 113 org $-2
pascal@22288 114 _csip_hilo dw ?
pascal@22288 115 xchg al,dh ; 9020 / 9000
pascal@22288 116 push ax
pascal@22288 117 push dx ; 0000 / 0042
pascal@22288 118
pascal@22288 119 mov cl,1 ; load high ?
pascal@22179 120 org $-1
pascal@22288 121 global _pm_low:byte
pascal@22288 122 _pm_low db ?
pascal@22019 123 push cx
pascal@22019 124 mov ax,[word ss:024Ch]
pascal@22019 125 xor ax,2b30h ; ipxe ?
pascal@22019 126 loopne @@notipxe
pascal@22019 127
pascal@22019 128 ; finish loading
pascal@22019 129 extrn @last_ditch$qv:near
pascal@22008 130 push cs
pascal@22008 131 call @last_ditch$qv
pascal@22152 132 dos_shutdown ; clear si; ds=0; kill VCPI
pascal@22152 133 push cs
pascal@22152 134 pop ds
pascal@22019 135
pascal@22019 136 @@notipxe:
pascal@22019 137 pop cx
pascal@22019 138 loop @@isbzimage
pascal@22019 139
pascal@20477 140 ; prepare memcpy32 size & srcofs param to move zImage pm
pascal@21781 141 ifndef NO386
pascal@21781 142 push 8 ; size hi
pascal@21781 143 else
pascal@20477 144 mov dx,8
pascal@20477 145 push dx ; size hi
pascal@21781 146 endif
pascal@22288 147 push si ; size lo=up to 512k
pascal@22288 148 push [dword _imgs+2] ; src ofs = pm.fallback
pascal@20477 149
pascal@19538 150 ;in al,70h
pascal@19538 151 ;or al,80h ; disable NMI
pascal@19538 152 ;out 70h,al
pascal@20477 153
pascal@22288 154 push si ; src seg=0
pascal@21628 155 inc cx
pascal@21628 156 push cx ; dst ofs hi
pascal@22288 157 push si ; dst ofs lo : 64k
pascal@22288 158
pascal@22288 159 ; self move
pascal@22288 160 extrn gdt_data
pascal@22288 161 mov cx,offset gdt_data+8
pascal@22288 162 ;xor di,di ; A000 -9000 -0800(>movedend)
pascal@22288 163
pascal@22288 164 ifdef NO386
pascal@22288 165 mov ax,ss
pascal@22288 166 add ax,900h
pascal@22288 167 push ax ; topseg()+0x0900
pascal@22288 168 else
pascal@22288 169 push 9800h+(4096/16) ; 4096 bytes for cmdline
pascal@22288 170 endif
pascal@22288 171 pop es
pascal@22288 172 push es
pascal@22288 173
pascal@22288 174 call near @@movsb@jmp ; movsb; pop cs ; ds=es=ss
pascal@22288 175
pascal@20528 176 extrn memcpy32:near
pascal@20528 177 call memcpy32
pascal@19515 178
pascal@22176 179 ifdef MOVE_SETUP
pascal@22288 180 mov si,0
pascal@22288 181 global _rm_offset:word
pascal@22288 182 org $-2
pascal@22288 183 _rm_offset dw ?
pascal@22176 184 ;xor di,di
pascal@22288 185 ;mov cx,8000h
pascal@22176 186 ;sub cx,si
pascal@22288 187 ;rep
pascal@22288 188 ; movsb
pascal@22176 189 endif
pascal@22176 190
pascal@19515 191 ifndef noelks
pascal@22288 192 ifdef MOVE_SETUP
pascal@19515 193 ifndef NO386
pascal@22288 194 mov eax,[dword si+1E6h]
pascal@22288 195 xor eax,'SKLE'
pascal@22288 196 else
pascal@22288 197 mov ax,[si+1E6h]
pascal@22288 198 xor ax,'LE'
pascal@20473 199 jne @@notelks
pascal@22288 200 mov ax,[si+1E8h]
pascal@22288 201 xor ax,'SK'
pascal@22288 202 endif
pascal@19515 203 else
pascal@22288 204 ifndef NO386
pascal@22288 205 mov eax,[dword 1E6h]
pascal@22288 206 xor eax,'SKLE'
pascal@22288 207 else
pascal@22288 208 mov ax,[1E6h]
pascal@22288 209 xor ax,'LE'
pascal@19905 210 jne @@notelks
pascal@22288 211 mov ax,[1E8h]
pascal@20481 212 xor ax,'SK'
pascal@22288 213 endif
pascal@22288 214 endif
pascal@20473 215 jne @@notelks
pascal@22288 216 mov cx,100h ; DS=ES=SS=0100
pascal@22288 217 mov ss,cx
pascal@22288 218 push ss
pascal@22288 219 pop es
pascal@22288 220 mov cl,20h ; CS=0120
pascal@22288 221 push cx
pascal@22288 222 push ax ; IP=0000
pascal@19515 223 endif
pascal@22179 224 ifdef MOVE_SETUP
pascal@22288 225 @@notelks:
pascal@22288 226 mov ch,7Eh
pascal@22288 227 @@movsb@jmp:
pascal@22288 228 xor di,di
pascal@22288 229 rep
pascal@22288 230 movsb
pascal@22179 231 else
pascal@22288 232 ifndef noelks
pascal@22288 233 xchg ax,si
pascal@22288 234 mov ch,7Eh ; 0Ah min, 7Eh max
pascal@22288 235 @@movsb@jmp:
pascal@22288 236 xor di,di
pascal@19515 237 rep
pascal@22288 238 movsb
pascal@19905 239 @@notelks:
pascal@22288 240 endif
pascal@19515 241 endif
pascal@19905 242 @@isbzimage:
pascal@19515 243 push ss
pascal@19515 244 pop ds
pascal@20475 245 push ss
pascal@20475 246 pop es
pascal@19636 247 ifndef NO386
pascal@19515 248 push ss
pascal@19515 249 pop fs
pascal@19515 250 push ss
pascal@19515 251 pop gs
pascal@19636 252 endif
pascal@19515 253 assume nothing
pascal@19515 254 assume cs:DGROUP
pascal@19515 255 retf
pascal@19515 256
pascal@20473 257 step19code
pascal@20477 258
pascal@20477 259 endp _boot_kernel
pascal@20477 260
pascal@19515 261 movedend:
pascal@19515 262
pascal@19515 263 ends _TEXT
pascal@19515 264
pascal@19515 265 end
pascal@19515 266
pascal@19515 267 ;###### END OF FILE ############################################