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

Up ncdu (1.13)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Oct 16 16:37:20 2018 +0200 (2018-10-16)
parents f4bc280fe3c4
children 8e449fe1df2e
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@20473 37 xor bx,bx
pascal@20473 38 mov ds,bx
pascal@20473 39 ifndef NO386
pascal@20473 40 push [dword bx+4] ; save step
pascal@20473 41 mov [word bx+4],offset step19
pascal@20473 42 else
pascal@20473 43 mov ax,offset step19
pascal@20473 44 xchg ax,[word bx+4]
pascal@20473 45 push [word bx+6]
pascal@20473 46 push ax ; save step
pascal@20473 47 endif
pascal@20473 48 mov [word cs:sssp],sp
pascal@20473 49 ;cmp [byte bx+7],0F0h
pascal@20473 50 ;jnc notdos
pascal@20473 51 mov [bx+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@20473 58 call [dword bx+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@20473 68 xor bx,bx
pascal@20473 69 mov ds,bx
pascal@20473 70 ifndef NO386
pascal@20473 71 pop [dword bx+4] ; restore step
pascal@20473 72 else
pascal@20473 73 pop [word bx+4] ; restore step
pascal@20473 74 pop [word bx+6]
pascal@20473 75 endif
pascal@20473 76 endm
pascal@20473 77 macro step19code
pascal@20473 78 step19:
pascal@20473 79 push bx
pascal@20473 80 push ds
pascal@20473 81 mov bx,sp
pascal@20473 82 lds bx,[dword ss:bx+4] ; read cs:ip
pascal@20473 83 cmp [word bx],19CDh ; int 19h ?
pascal@20473 84 pop ds
pascal@20473 85 pop bx
pascal@20473 86 je notdos
pascal@20473 87 iret
pascal@20473 88 endm
pascal@20473 89
pascal@20473 90
pascal@20473 91 ;***************************************************************
pascal@19905 92 ;void boot_kernel();
pascal@19905 93 ;****** Never returns
pascal@19905 94 ;***************************************************************
pascal@19903 95 global _boot_kernel:near
pascal@19905 96 proc _boot_kernel near
pascal@19905 97
pascal@20142 98 p8086
pascal@19903 99 extrn _heap_top:word
pascal@19903 100 ifdef NO386
pascal@19903 101 extrn _topseg:near
pascal@19903 102 call near _topseg
pascal@19903 103 xchg ax,bx
pascal@20473 104 mov ax,[_heap_top]
pascal@20473 105 inc ah
pascal@19903 106 mov cl,4
pascal@19903 107 shr ax,cl
pascal@19903 108 else
pascal@20142 109 p386
pascal@19903 110 mov bx,9000h
pascal@20473 111 mov ax,[_heap_top]
pascal@20473 112 inc ah
pascal@19903 113 shr ax,4
pascal@19903 114 endif
pascal@20473 115 mov es,bx
pascal@19903 116 mov dx,cs
pascal@19903 117 add ax,dx
pascal@19903 118 cmp ax,bx
pascal@19905 119 jb @@nooverflow
pascal@20473 120 global sssp
pascal@20473 121 sssp:
pascal@19903 122 ; Oops! We can stomp on our toes... better stop now
pascal@19903 123 mov bx,offset overflow
pascal@19903 124 extrn die:near
pascal@20427 125 call near die
pascal@19905 126 @@nooverflow:
pascal@20473 127 ;cli ; we start doing destructive things to DOS
pascal@19571 128 push es
pascal@19571 129 pop ss
pascal@19571 130 mov sp,0A000h
pascal@20473 131 mov [word sssp+2],ss
pascal@19900 132 extrn _csip:dword
pascal@19900 133 push [dword _csip]
pascal@19636 134 extrn _rm_size:word
pascal@19636 135 mov si,offset _rm_size ; _rm_size, _pm_high, _rm_buf
pascal@19636 136 lodsw
pascal@19636 137 xchg ax,cx ; _rm_size
pascal@19636 138 lodsb ; _pm_high
pascal@19636 139 mov si,[si] ; _rm_buf
pascal@19571 140 xor di,di
pascal@19571 141 ;cld
pascal@19571 142 rep
pascal@19571 143 movsb
pascal@19571 144 extrn _cmdline:word
pascal@19571 145 mov si,[_cmdline]
pascal@19571 146 mov di,8000h
pascal@19571 147 mov ch,10h ; 4k
pascal@19571 148 rep
pascal@19571 149 movsb
pascal@19636 150 cmp al,cl ; load high ?
pascal@20473 151 ifdef noelks
pascal@19905 152 jne @@isbzimage
pascal@20473 153 else
pascal@20473 154 jne @@isbzimagez
pascal@20473 155 endif
pascal@19637 156 ifdef NO386
pascal@19637 157 add bh,9
pascal@19637 158 push bx ; topseg()+0x0900
pascal@19637 159 else
pascal@19905 160 push 9800h+(4096/16) ; 4096 bytes for cmdline
pascal@19637 161 endif
pascal@19515 162 ; finish loading
pascal@19515 163 extrn @last_ditch$qv:near
pascal@19515 164 push cs
pascal@19515 165 call @last_ditch$qv
pascal@19899 166 mov ax,[word _imgs+2+2] ; get pm->fallback high word
pascal@19515 167 ; self move
pascal@19571 168 ;cld
pascal@19538 169 pop es ; min 2048 bytes for stack
pascal@19538 170 xor si,si ; A000 -9000 -0800(>movedend)
pascal@19515 171 xor di,di ; set ZF
pascal@19538 172 mov cx,offset movedend
pascal@19515 173 rep
pascal@19515 174 movsb
pascal@20473 175 push ax
pascal@19515 176 push es
pascal@20473 177 dos_shutdown ; clear bx
pascal@20473 178 call near @@doretf ; pop cs
pascal@19515 179 push cs
pascal@19515 180 pop ds
pascal@19538 181 ;in al,70h
pascal@19538 182 ;or al,80h ; disable NMI
pascal@19538 183 ;out 70h,al
pascal@20473 184 pop dx
pascal@19515 185 ; move zImage pm
pascal@19515 186 mov ax,8
pascal@20473 187 cmp dx,ax
pascal@19905 188 ja @@bufhigh
pascal@20473 189 sub ax,dx
pascal@19515 190 inc ax
pascal@19905 191 @@bufhigh:
pascal@19515 192 push ax
pascal@20473 193 push bx ; size=up to 512k
pascal@20473 194 push dx ; src ofs= pm.fallback
pascal@20473 195 push bx
pascal@20473 196 push bx ; srcseg=0
pascal@19636 197 ifdef NO386
pascal@20473 198 inc bx
pascal@20473 199 push bx ; dst
pascal@20473 200 dec bx
pascal@19636 201 else
pascal@19636 202 push 1 ; dst
pascal@19636 203 endif
pascal@20473 204 push bx ; ofs=64k
pascal@19515 205 extrn _memcpy32:near
pascal@19515 206 call _memcpy32
pascal@19538 207 add sp,14
pascal@19515 208
pascal@19515 209 ifndef noelks
pascal@19515 210 push ss
pascal@19515 211 pop ds
pascal@19515 212 ifndef NO386
pascal@19515 213 cmp [dword 1E6h],'SKLE'
pascal@20473 214 jne @@notelks
pascal@20473 215 @@isbzimagez:
pascal@20473 216 jne @@isbzimage
pascal@19515 217 else
pascal@19515 218 cmp [word 1E6h],'LE'
pascal@19905 219 jne @@notelks
pascal@20473 220 @@isbzimagez:
pascal@20473 221 jne @@isbzimage
pascal@19515 222 cmp [word 1E8h],'SK'
pascal@20473 223 jne @@notelks
pascal@19515 224 endif
pascal@19636 225 ifdef NO386
pascal@20473 226 mov cx,120h ; CS=0120
pascal@19636 227 push cx
pascal@20473 228 mov cl,0h ; DS=ES=SS=0100
pascal@19636 229 push cx
pascal@19636 230 else
pascal@20473 231 push 120h ; CS=0120
pascal@20473 232 push 100h ; DS=ES=SS=0100
pascal@19636 233 endif
pascal@19515 234 pop es
pascal@19515 235 xor si,si
pascal@19515 236 xor di,di
pascal@20473 237 mov ch,05h ; 500h mini
pascal@19515 238 rep
pascal@19515 239 movsw
pascal@19515 240 push es
pascal@19515 241 pop ss
pascal@20473 242 push cx ; IP=0000
pascal@19905 243 @@notelks:
pascal@19515 244 endif
pascal@19905 245 @@isbzimage:
pascal@19515 246 push ss
pascal@19515 247 pop ds
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@19905 256 @@doretf:
pascal@20473 257 push ss
pascal@20473 258 pop es
pascal@19515 259 retf
pascal@19515 260
pascal@20473 261 step19code
pascal@19515 262 movedend:
pascal@19905 263 endp _boot_kernel
pascal@19515 264
pascal@19515 265 ends _TEXT
pascal@19515 266
pascal@19515 267 end
pascal@19515 268
pascal@19515 269 ;###### END OF FILE ############################################