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

linld/tazboot: fix memcpy32
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Apr 09 12:22:58 2017 +0200 (2017-04-09)
parents df6498976257
children e17c7b3f75a8
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@19903 32 global _boot_kernel:near
pascal@19903 33 _boot_kernel:
pascal@19903 34 ; Shrink stack: we won't need much of it now and have no malloc() plans
pascal@19903 35 extrn _heap_top:word
pascal@19903 36 mov ax,[_heap_top]
pascal@19903 37 inc ah
pascal@19903 38 cmp ax,sp
pascal@19903 39 ja samesp
pascal@19903 40 xchg ax,sp
pascal@19903 41 samesp:
pascal@19903 42 ifdef NO386
pascal@19903 43 extrn _topseg:near
pascal@19903 44 call near _topseg
pascal@19903 45 mov es,ax
pascal@19903 46 xchg ax,bx
pascal@19903 47 mov cl,4
pascal@19903 48 mov ax,sp
pascal@19903 49 shr ax,cl
pascal@19903 50 else
pascal@19903 51 mov bx,9000h
pascal@19903 52 mov es,bx
pascal@19903 53 mov ax,sp
pascal@19903 54 shr ax,4
pascal@19903 55 endif
pascal@19903 56 mov dx,cs
pascal@19903 57 add ax,dx
pascal@19903 58 cmp ax,bx
pascal@19903 59 jb nooverflow
pascal@19903 60 ; Oops! We can stomp on our toes... better stop now
pascal@19903 61 mov bx,offset overflow
pascal@19903 62 extrn die:near
pascal@19903 63 jmp near die
pascal@19903 64 nooverflow:
pascal@19515 65 ;***************************************************************
pascal@19571 66 ;void set_sregs_jump_seg_ofs(u32 csip);
pascal@19515 67 ;****** Never returns
pascal@19515 68 ;***************************************************************
pascal@19515 69 global _set_sregs_jump_seg_ofs:near
pascal@19515 70 proc _set_sregs_jump_seg_ofs near
pascal@19515 71
pascal@19515 72 extrn dos_shutdown:near
pascal@19515 73
pascal@19636 74 cli ; we start doing destructive things to DOS
pascal@19571 75 push es
pascal@19571 76 pop ss
pascal@19571 77 mov sp,0A000h
pascal@19900 78 extrn _csip:dword
pascal@19900 79 push [dword _csip]
pascal@19636 80 extrn _rm_size:word
pascal@19636 81 mov si,offset _rm_size ; _rm_size, _pm_high, _rm_buf
pascal@19636 82 lodsw
pascal@19636 83 xchg ax,cx ; _rm_size
pascal@19636 84 lodsb ; _pm_high
pascal@19636 85 mov si,[si] ; _rm_buf
pascal@19571 86 xor di,di
pascal@19571 87 ;cld
pascal@19571 88 rep
pascal@19571 89 movsb
pascal@19571 90 extrn _cmdline:word
pascal@19571 91 mov si,[_cmdline]
pascal@19571 92 mov di,8000h
pascal@19571 93 mov ch,10h ; 4k
pascal@19571 94 rep
pascal@19571 95 movsb
pascal@19636 96 cmp al,cl ; load high ?
pascal@19515 97 jne isbzimage
pascal@19637 98 ifdef NO386
pascal@19637 99 add bh,9
pascal@19637 100 push bx ; topseg()+0x0900
pascal@19637 101 else
pascal@19637 102 push 9900h ; 4096 bytes for cmdline
pascal@19637 103 ;push 9820h ; 512 bytes for cmdline
pascal@19637 104 endif
pascal@19515 105 ; finish loading
pascal@19515 106 extrn @last_ditch$qv:near
pascal@19515 107 push cs
pascal@19515 108 call @last_ditch$qv
pascal@19899 109 mov ax,[word _imgs+2+2] ; get pm->fallback high word
pascal@19515 110 ; self move
pascal@19571 111 ;cld
pascal@19538 112 pop es ; min 2048 bytes for stack
pascal@19538 113 xor si,si ; A000 -9000 -0800(>movedend)
pascal@19515 114 xor di,di ; set ZF
pascal@19538 115 mov cx,offset movedend
pascal@19515 116 global _bss_end:byte
pascal@19538 117 ;mov cx,offset _bss_end
pascal@19515 118 rep
pascal@19515 119 movsb
pascal@19515 120 push es
pascal@19515 121 call near doretf ; mov cs,es
pascal@19571 122 push ss
pascal@19571 123 pop es
pascal@19515 124 push cs
pascal@19515 125 pop ds
pascal@19571 126 push ax
pascal@19515 127 call near dos_shutdown
pascal@19538 128 ;in al,70h
pascal@19538 129 ;or al,80h ; disable NMI
pascal@19538 130 ;out 70h,al
pascal@19538 131 pop bx
pascal@19515 132 ; move zImage pm
pascal@19515 133 mov ax,8
pascal@19900 134 cwd ; clear dx
pascal@19515 135 cmp bx,ax
pascal@19538 136 ja bufhigh
pascal@19515 137 sub ax,bx
pascal@19515 138 inc ax
pascal@19515 139 bufhigh:
pascal@19515 140 push ax
pascal@19515 141 push dx ; size=up to 512k
pascal@19515 142 push bx ; src ofs= pm.fallback
pascal@19515 143 push dx
pascal@19515 144 push dx ; srcseg=0
pascal@19636 145 ifdef NO386
pascal@19636 146 inc dx
pascal@19636 147 push dx ; dst
pascal@19636 148 dec dx
pascal@19636 149 else
pascal@19636 150 push 1 ; dst
pascal@19636 151 endif
pascal@19515 152 push dx ; ofs=64k
pascal@19515 153 extrn _memcpy32:near
pascal@19515 154 call _memcpy32
pascal@19538 155 add sp,14
pascal@19515 156
pascal@19515 157 ifndef noelks
pascal@19515 158 push ss
pascal@19515 159 pop ds
pascal@19515 160 ifndef NO386
pascal@19515 161 cmp [dword 1E6h],'SKLE'
pascal@19515 162 else
pascal@19515 163 cmp [word 1E6h],'LE'
pascal@19515 164 jne notelks
pascal@19515 165 cmp [word 1E8h],'SK'
pascal@19515 166 endif
pascal@19515 167 jne notelks
pascal@19636 168 ifdef NO386
pascal@19636 169 mov cx,120h
pascal@19636 170 push cx
pascal@19636 171 mov cl,0h
pascal@19636 172 push cx
pascal@19636 173 else
pascal@19636 174 push 120h
pascal@19515 175 push 100h
pascal@19636 176 endif
pascal@19515 177 pop es
pascal@19515 178 xor si,si
pascal@19515 179 xor di,di
pascal@19515 180 mov ch,05h
pascal@19515 181 rep
pascal@19515 182 movsw
pascal@19515 183 push es
pascal@19515 184 pop ss
pascal@19636 185 push cx
pascal@19515 186 notelks:
pascal@19515 187 endif
pascal@19515 188
pascal@19571 189 isbzimage:
pascal@19515 190 push ss
pascal@19515 191 pop ds
pascal@19571 192 ;push ss
pascal@19571 193 ;pop es
pascal@19636 194 ifndef NO386
pascal@19515 195 push ss
pascal@19515 196 pop fs
pascal@19515 197 push ss
pascal@19515 198 pop gs
pascal@19636 199 endif
pascal@19515 200 assume nothing
pascal@19515 201 assume cs:DGROUP
pascal@19515 202
pascal@19515 203 doretf:
pascal@19515 204 retf
pascal@19515 205
pascal@19515 206 movedend:
pascal@19515 207 endp _set_sregs_jump_seg_ofs
pascal@19515 208
pascal@19515 209 ends _TEXT
pascal@19515 210
pascal@19515 211 end
pascal@19515 212
pascal@19515 213 ;###### END OF FILE ############################################