wok view linld/stuff/src/JUMP.ASM @ rev 19781

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