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

linld: check asm instructions again processor type
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Jan 20 09:55:25 2017 +0100 (2017-01-20)
parents e428345df29a
children cde5f1326cbc
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@19515 14 group DGROUP _TEXT,_BSS
pascal@19515 15 assume cs:DGROUP,ds:DGROUP
pascal@19515 16
pascal@19515 17 segment _BSS byte public use16 'BSS'
pascal@19515 18
pascal@19515 19 global _pm:dword
pascal@19515 20
pascal@19515 21 ends _BSS
pascal@19515 22
pascal@19515 23
pascal@19515 24 segment _TEXT byte public use16 'CODE'
pascal@19515 25
pascal@19515 26 ;***************************************************************
pascal@19571 27 ;void set_sregs_jump_seg_ofs(u32 csip);
pascal@19515 28 ;****** Never returns
pascal@19515 29 ;***************************************************************
pascal@19515 30 global _set_sregs_jump_seg_ofs:near
pascal@19515 31 proc _set_sregs_jump_seg_ofs near
pascal@19515 32
pascal@19515 33 extrn dos_shutdown:near
pascal@19515 34
pascal@19636 35 pop ax ; caller return address
pascal@19571 36 ifdef NO386
pascal@19571 37 extrn _topseg:near
pascal@19571 38 call near _topseg
pascal@19571 39 mov es,ax
pascal@19571 40 else
pascal@19571 41 push 9000h
pascal@19571 42 pop es
pascal@19571 43 endif
pascal@19571 44 pop cx ; ip
pascal@19571 45 pop dx ; cs
pascal@19636 46 cli ; we start doing destructive things to DOS
pascal@19571 47 push es
pascal@19571 48 pop ss
pascal@19571 49 mov sp,0A000h
pascal@19571 50 push dx cx
pascal@19636 51 extrn _rm_size:word
pascal@19636 52 mov si,offset _rm_size ; _rm_size, _pm_high, _rm_buf
pascal@19636 53 lodsw
pascal@19636 54 xchg ax,cx ; _rm_size
pascal@19636 55 lodsb ; _pm_high
pascal@19636 56 mov si,[si] ; _rm_buf
pascal@19571 57 xor di,di
pascal@19571 58 ;cld
pascal@19571 59 rep
pascal@19571 60 movsb
pascal@19571 61 extrn _cmdline:word
pascal@19571 62 mov si,[_cmdline]
pascal@19571 63 mov di,8000h
pascal@19571 64 mov ch,10h ; 4k
pascal@19571 65 rep
pascal@19571 66 movsb
pascal@19636 67 cmp al,cl ; load high ?
pascal@19515 68 jne isbzimage
pascal@19515 69 ; finish loading
pascal@19515 70 extrn @last_ditch$qv:near
pascal@19515 71 push cs
pascal@19515 72 call @last_ditch$qv
pascal@19571 73 mov ax,[word _pm+2+2] ; get pm->fallback high word
pascal@19515 74 ; self move
pascal@19571 75 ;cld
pascal@19636 76 ifdef NO386
pascal@19636 77 mov cx,9900h
pascal@19636 78 push cx
pascal@19636 79 else
pascal@19538 80 push 9900h ; 4096 bytes for cmdline
pascal@19538 81 ;push 9820h ; 512 bytes for cmdline
pascal@19636 82 endif
pascal@19538 83 pop es ; min 2048 bytes for stack
pascal@19538 84 xor si,si ; A000 -9000 -0800(>movedend)
pascal@19515 85 xor di,di ; set ZF
pascal@19538 86 mov cx,offset movedend
pascal@19515 87 global _bss_end:byte
pascal@19538 88 ;mov cx,offset _bss_end
pascal@19515 89 rep
pascal@19515 90 movsb
pascal@19515 91 push es
pascal@19515 92 call near doretf ; mov cs,es
pascal@19571 93 push ss
pascal@19571 94 pop es
pascal@19515 95 push cs
pascal@19515 96 pop ds
pascal@19571 97 push ax
pascal@19515 98 call near dos_shutdown
pascal@19538 99 ;in al,70h
pascal@19538 100 ;or al,80h ; disable NMI
pascal@19538 101 ;out 70h,al
pascal@19538 102 pop bx
pascal@19515 103 ; move zImage pm
pascal@19515 104 mov ax,8
pascal@19515 105 cwd
pascal@19515 106 cmp bx,ax
pascal@19538 107 ja bufhigh
pascal@19515 108 sub ax,bx
pascal@19515 109 inc ax
pascal@19515 110 bufhigh:
pascal@19515 111 push ax
pascal@19515 112 push dx ; size=up to 512k
pascal@19515 113 push bx ; src ofs= pm.fallback
pascal@19515 114 push dx
pascal@19515 115 push dx ; srcseg=0
pascal@19636 116 ifdef NO386
pascal@19636 117 inc dx
pascal@19636 118 push dx ; dst
pascal@19636 119 dec dx
pascal@19636 120 else
pascal@19636 121 push 1 ; dst
pascal@19636 122 endif
pascal@19515 123 push dx ; ofs=64k
pascal@19515 124 extrn _memcpy32:near
pascal@19515 125 call _memcpy32
pascal@19538 126 add sp,14
pascal@19515 127
pascal@19515 128 ifndef noelks
pascal@19515 129 push ss
pascal@19515 130 pop ds
pascal@19515 131 ifndef NO386
pascal@19515 132 cmp [dword 1E6h],'SKLE'
pascal@19515 133 else
pascal@19515 134 cmp [word 1E6h],'LE'
pascal@19515 135 jne notelks
pascal@19515 136 cmp [word 1E8h],'SK'
pascal@19515 137 endif
pascal@19515 138 jne notelks
pascal@19636 139 ifdef NO386
pascal@19636 140 mov cx,120h
pascal@19636 141 push cx
pascal@19636 142 mov cl,0h
pascal@19636 143 push cx
pascal@19636 144 else
pascal@19636 145 push 120h
pascal@19515 146 push 100h
pascal@19636 147 endif
pascal@19515 148 pop es
pascal@19515 149 xor si,si
pascal@19515 150 xor di,di
pascal@19515 151 mov ch,05h
pascal@19515 152 rep
pascal@19515 153 movsw
pascal@19515 154 push es
pascal@19515 155 pop ss
pascal@19636 156 push cx
pascal@19515 157 notelks:
pascal@19515 158 endif
pascal@19515 159
pascal@19571 160 isbzimage:
pascal@19515 161 push ss
pascal@19515 162 pop ds
pascal@19571 163 ;push ss
pascal@19571 164 ;pop es
pascal@19636 165 ifndef NO386
pascal@19515 166 push ss
pascal@19515 167 pop fs
pascal@19515 168 push ss
pascal@19515 169 pop gs
pascal@19636 170 endif
pascal@19515 171 assume nothing
pascal@19515 172 assume cs:DGROUP
pascal@19515 173
pascal@19515 174 doretf:
pascal@19515 175 retf
pascal@19515 176
pascal@19515 177 movedend:
pascal@19515 178 endp _set_sregs_jump_seg_ofs
pascal@19515 179
pascal@19515 180 ends _TEXT
pascal@19515 181
pascal@19515 182 end
pascal@19515 183
pascal@19515 184 ;###### END OF FILE ############################################