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

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