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

linld: more ram for zImage (again)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat May 25 13:23:29 2019 +0200 (2019-05-25)
parents 094f58ac8183
children 0e811092e7bb
rev   line source
pascal@19515 1 ;***************************************************************
pascal@19515 2 ;****** This file is distributed under GPL
pascal@19515 3 ;***************************************************************
pascal@19515 4 ideal
pascal@19515 5 %crefref
pascal@19515 6 %noincl
pascal@19515 7 %nomacs
pascal@19636 8 ifdef NO386
pascal@19636 9 p8086
pascal@19636 10 else
pascal@19515 11 p386
pascal@19636 12 endif
pascal@19515 13
pascal@19903 14 group DGROUP _TEXT,_DATA,_BSS
pascal@19515 15 assume cs:DGROUP,ds:DGROUP
pascal@19515 16
pascal@19903 17 segment _DATA byte public use16 'DATA'
pascal@19903 18
pascal@19903 19 overflow db "Loaded too close to 9000:0",0
pascal@19903 20
pascal@19903 21 ends _DATA
pascal@19903 22
pascal@19515 23 segment _BSS byte public use16 'BSS'
pascal@19515 24
pascal@19899 25 global _imgs:dword
pascal@19515 26
pascal@19515 27 ends _BSS
pascal@19515 28
pascal@19515 29
pascal@19515 30 segment _TEXT byte public use16 'CODE'
pascal@19515 31
pascal@19905 32 ;***************************************************************
pascal@20473 33 ;void dos_shutdown()
pascal@20473 34 ;***************************************************************
pascal@20473 35
pascal@20473 36 macro dos_shutdown
pascal@21342 37 xor si,si
pascal@21342 38 mov ds,si
pascal@20473 39 ifndef NO386
pascal@21342 40 push [dword si+4] ; save step
pascal@21342 41 mov [word si+4],offset step19
pascal@20473 42 else
pascal@20473 43 mov ax,offset step19
pascal@21342 44 xchg ax,[word si+4]
pascal@21342 45 push [word si+6]
pascal@20473 46 push ax ; save step
pascal@20473 47 endif
pascal@20473 48 mov [word cs:sssp],sp
pascal@21342 49 ;cmp [byte si+7],0F0h
pascal@20473 50 ;jnc notdos
pascal@21342 51 mov [si+6],cs
pascal@20473 52 pushf
pascal@20473 53 pushf
pascal@20473 54 pop ax
pascal@20473 55 inc ah ; set TF
pascal@20473 56 push ax
pascal@20473 57 popf
pascal@21342 58 call [dword si+4*19h]
pascal@20473 59 notdos:
pascal@20473 60 ifndef NO386
pascal@20473 61 lss sp,[dword cs:sssp]
pascal@20473 62 else
pascal@20473 63 lds ax,[dword cs:sssp]
pascal@20473 64 push ds
pascal@20473 65 pop ss
pascal@20473 66 xchg ax,sp
pascal@20473 67 endif
pascal@21342 68 xor si,si
pascal@21342 69 mov ds,si
pascal@21342 70 pop [dword si+4] ; restore step
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@20142 93 p8086
pascal@19903 94 extrn _heap_top:word
pascal@20527 95 global sssp:dword
pascal@19903 96 ifdef NO386
pascal@19903 97 extrn _topseg:near
pascal@19903 98 call near _topseg
pascal@20483 99 mov cl,4
pascal@20527 100 org $-4
pascal@20527 101 sssp dd ?
pascal@20475 102 mov [word sssp+2],ax
pascal@19903 103 xchg ax,bx
pascal@20473 104 mov ax,[_heap_top]
pascal@19903 105 shr ax,cl
pascal@19903 106 else
pascal@20142 107 p386
pascal@20473 108 mov ax,[_heap_top]
pascal@20520 109 shr ax,4
pascal@20475 110 mov bx,9000h
pascal@20520 111 org $-4
pascal@20520 112 sssp dd ?
pascal@19903 113 endif
pascal@20473 114 mov es,bx
pascal@19903 115 mov dx,cs
pascal@19903 116 add ax,dx
pascal@19903 117 cmp ax,bx
pascal@19905 118 jb @@nooverflow
pascal@19903 119 ; Oops! We can stomp on our toes... better stop now
pascal@19903 120 mov bx,offset overflow
pascal@19903 121 extrn die:near
pascal@20427 122 call near die
pascal@19905 123 @@nooverflow:
pascal@20473 124 ;cli ; we start doing destructive things to DOS
pascal@19571 125 push es
pascal@19571 126 pop ss
pascal@19571 127 mov sp,0A000h
pascal@19636 128 extrn _rm_size:word
pascal@20745 129 ifdef NO386
pascal@20745 130 mov si,offset _rm_size-2 ; _rm_size, _pm_high, _rm_buf
pascal@20745 131 lodsw
pascal@20745 132 push ax ; _csip high
pascal@20745 133 push [word si-4] ; _csip low
pascal@20745 134 else
pascal@19636 135 mov si,offset _rm_size ; _rm_size, _pm_high, _rm_buf
pascal@20751 136 push [dword si-4] ; _csip
pascal@20745 137 endif
pascal@19636 138 lodsw
pascal@19636 139 xchg ax,cx ; _rm_size
pascal@19636 140 lodsb ; _pm_high
pascal@19636 141 mov si,[si] ; _rm_buf
pascal@19571 142 xor di,di
pascal@19571 143 ;cld
pascal@19571 144 rep
pascal@19571 145 movsb
pascal@19571 146 extrn _cmdline:word
pascal@19571 147 mov si,[_cmdline]
pascal@19571 148 mov di,8000h
pascal@19571 149 mov ch,10h ; 4k
pascal@19571 150 rep
pascal@19571 151 movsb
pascal@20481 152 ifdef NO386
pascal@20481 153 add bh,9
pascal@19637 154 push bx ; topseg()+0x0900
pascal@19637 155 else
pascal@19905 156 push 9800h+(4096/16) ; 4096 bytes for cmdline
pascal@19637 157 endif
pascal@20485 158 cmp al,cl ; load high ?
pascal@20485 159 pushf
pascal@19515 160 ; finish loading
pascal@19515 161 extrn @last_ditch$qv:near
pascal@21332 162 mov ax,[ss:024Ch]
pascal@21332 163 jne @@notzimage
pascal@21332 164 @@isipxe:
pascal@21332 165 push cs
pascal@19515 166 call @last_ditch$qv
pascal@21342 167 dos_shutdown ; clear si; ds=0
pascal@20485 168 push cs
pascal@20485 169 pop ds
pascal@21332 170 @@notzimage:
pascal@21332 171 xor ax,2b30h
pascal@21332 172 je @@isipxe
pascal@20485 173 popf
pascal@19515 174 ; self move
pascal@19571 175 ;cld
pascal@19538 176 pop es ; min 2048 bytes for stack
pascal@20485 177 jne @@isbzimage
pascal@20534 178 extrn gdt_data
pascal@20534 179 mov cx,offset gdt_data+8
pascal@21342 180 xor di,di ; A000 -9000 -0800(>movedend)
pascal@19515 181 rep
pascal@19515 182 movsb
pascal@20485 183 mov ax,[word _imgs+2+2] ; get pm->fallback high word
pascal@20484 184 push es
pascal@20484 185 call near @@isbzimage ; pop cs ; ds=es=ss
pascal@20477 186
pascal@20477 187 ; prepare memcpy32 size & srcofs param to move zImage pm
pascal@20477 188 mov dx,8
pascal@20477 189 cmp ax,dx ; buf > 80000h ?
pascal@20477 190 ja @@bufhigh
pascal@20477 191 sub dx,ax
pascal@20477 192 inc dx ; up to 90000h-1
pascal@20477 193 @@bufhigh:
pascal@20477 194 push dx ; size hi
pascal@20477 195 push cx ; size lo=up to 512k
pascal@20477 196 push ax ; src ofs ho = pm.fallback
pascal@20477 197
pascal@19538 198 ;in al,70h
pascal@19538 199 ;or al,80h ; disable NMI
pascal@19538 200 ;out 70h,al
pascal@20477 201
pascal@20485 202 xor di,di
pascal@20481 203 push di ; src ofs lo
pascal@20481 204 push di ; src seg=0
pascal@19636 205 ifdef NO386
pascal@20481 206 inc di
pascal@20481 207 push di ; dst ofs hi
pascal@20481 208 dec di
pascal@19636 209 else
pascal@20477 210 push 1 ; dst ofs hi
pascal@19636 211 endif
pascal@20481 212 push di ; dst ofs lo : 64k
pascal@20528 213 extrn memcpy32:near
pascal@20528 214 call memcpy32
pascal@19515 215
pascal@19515 216 ifndef noelks
pascal@19515 217 ifndef NO386
pascal@19515 218 cmp [dword 1E6h],'SKLE'
pascal@20473 219 jne @@notelks
pascal@20481 220 xor si,si
pascal@19515 221 else
pascal@20481 222 mov si,1E6h
pascal@20481 223 lodsw
pascal@20481 224 cmp ax,'LE'
pascal@19905 225 jne @@notelks
pascal@20481 226 lodsw
pascal@20481 227 xor ax,'SK'
pascal@20473 228 jne @@notelks
pascal@20481 229 xchg ax,si
pascal@19515 230 endif
pascal@20481 231 push es
pascal@20481 232 pop ss
pascal@20481 233 mov cx,120h ; CS=0120
pascal@20481 234 push cx
pascal@20481 235 push si ; IP=0000
pascal@20481 236 mov cl,0 ; DS=ES=SS=0100
pascal@20475 237 mov es,cx
pascal@20475 238 mov ch,05h ; 500h mini
pascal@19515 239 rep
pascal@19515 240 movsw
pascal@19905 241 @@notelks:
pascal@19515 242 endif
pascal@19905 243 @@isbzimage:
pascal@19515 244 push ss
pascal@19515 245 pop ds
pascal@20475 246 push ss
pascal@20475 247 pop es
pascal@19636 248 ifndef NO386
pascal@19515 249 push ss
pascal@19515 250 pop fs
pascal@19515 251 push ss
pascal@19515 252 pop gs
pascal@19636 253 endif
pascal@19515 254 assume nothing
pascal@19515 255 assume cs:DGROUP
pascal@19515 256 retf
pascal@19515 257
pascal@20473 258 step19code
pascal@20477 259
pascal@20477 260 endp _boot_kernel
pascal@20477 261
pascal@19515 262 movedend:
pascal@19515 263
pascal@19515 264 ends _TEXT
pascal@19515 265
pascal@19515 266 end
pascal@19515 267
pascal@19515 268 ;###### END OF FILE ############################################