install: add install sources and resources
[doom2d-restoration.git] / GAME / VGA2.ASM
blobaabfd25f2bb042f3ccff9a127df3d84c2a4a22e4
1 ideal
2 p386
3 model flat,cpp
5 macro CutLin
6 local a
7 call CutLine
8 or      bx,bx
9 jnz     a
10 ret
12 endm
14 udataseg
16 extrn scra:dword,scrx:word,scrw:word,scry:word,scrh:word
18 __c db ?
20 _xlen dw ?
21 _ylen dw ?
22 _stepy dd ?
24 codeseg
26 proc CutLine near uses si di
27 ;ax=pos,bx=len,cx=spos,dx=slen
28 mov     si,cx
29 add     si,dx
30 cmp     ax,si
31 jl      @@a
32         mov     bx,0
33         ret
34 @@a:
35 cmp     ax,cx
36 jge     @@1
37 add     ax,bx
38 cmp     ax,cx
39 jg      @@b
40         mov     bx,0
41         ret
42 @@b:
43 mov     bx,ax
44 sub     bx,cx
45 mov     ax,cx
46 @@1:
47 mov     di,ax
48 add     di,bx
49 cmp     di,si
50 jng     @@1a
51         mov     bx,si
52         sub     bx,ax
53 @@1a:
54 ret
55 endp
57 macro prep_img
58 mov     esi,[@@adr]
59 mov     ax,[word @@x]
60 sub ax,[esi+4]
61 mov [word @@x],ax
62 mov     bx,[esi]
63 mov     cx,[scrx]
64 mov     dx,[scrw]
65 CutLin
66 mov     [_xlen],bx
67 mov     dx,[esi]
68 sub     dx,bx
69 movzx edx,dx
70 mov     [_stepy],edx
71 mov     di,ax
72 sub     di,[word @@x]
73 mov     [word @@x],ax
74 mov     ax,[word @@y]
75 sub ax,[esi+6]
76 mov [word @@y],ax
77 mov     bx,[esi+2]
78 mov     cx,[scry]
79 mov     dx,[scrh]
80 CutLin
81 mov     [_ylen],bx
82 mov     bx,ax
83 sub     ax,[word @@y]
84 mul     [word esi]
85 add     di,ax
86 mov     [word @@y],bx
87 movzx edi,di
88 add     esi,edi
89 add     esi,8
90 mov ax,320
91 mul [word @@y]
92 add     ax,[word @@x]
93 movzx   edi,ax
94 add     edi,[scra]
95 mov ax,ds
96 mov es,ax
97 endm
99 proc V_manspr uses ebx ecx esi edi, @@x:dword,@@y:dword,@@adr:dword,@@c:dword
100 public V_manspr
101 prep_img
102 mov al,[byte @@c]
103 mov [__c],al
104 mov edx,edi
105 mov ebx,[_stepy]
107         @@1:
108         mov edi,edx
109                 movzx ecx,[_xlen]
110                 @@2:
111                 lodsb
112                 or al,al
113                 jnz @@2a
114                 inc edi
115                 jmp short @@2b
116                 @@2a:
117                 cmp al,70h
118                 jb @@2c
119                 cmp al,7Fh
120                 ja @@2c
121                 sub al,70h
122                 add al,[__c]
123                 @@2c:
124                 stosb
125                 @@2b:
126                 loop @@2
127         add esi,ebx
128         add edx,320
129         dec [_ylen]
130         jnz @@1
132 endp
134 proc V_manspr2 uses ebx ecx esi edi, @@x:dword,@@y:dword,@@adr:dword,@@c:dword
135 public V_manspr2
136 mov     esi,[@@adr]
137 mov     ax,[word @@x]
138 sub ax,[esi]
139 add ax,[esi+4]
140 mov [word @@x],ax
141 mov     bx,[esi]
142 mov     cx,[scrx]
143 mov     dx,[scrw]
144 CutLin
145 mov     [_xlen],bx
146 mov     dx,[esi]
147 sub     dx,bx
148 movzx edx,dx
149 mov     [_stepy],edx
150 mov di,[word @@x]
151 add di,[esi]
152 sub di,ax
153 sub di,bx
154 add ax,bx
155 dec ax
156 mov     [word @@x],ax
157 mov     ax,[word @@y]
158 sub ax,[esi+6]
159 mov [word @@y],ax
160 mov     bx,[esi+2]
161 mov     cx,[scry]
162 mov     dx,[scrh]
163 CutLin
164 mov     [_ylen],bx
165 mov     bx,ax
166 sub     ax,[word @@y]
167 mul     [word ptr esi]
168 add     di,ax
169 mov     [word @@y],bx
170 movzx   edi,di
171 add     esi,edi
172 add     esi,8
173 mov ax,320
174 mul [word @@y]
175 add     ax,[word @@x]
176 movzx   edi,ax
177 add     edi,[scra]
178 mov ax,ds
179 mov es,ax
180 mov al,[byte @@c]
181 mov [__c],al
182 mov edx,edi
183 mov ebx,[_stepy]
184         @@1:
185         mov edi,edx
186                 movzx ecx,[_xlen]
187                 @@2:
188                 cld
189                 lodsb
190                 or al,al
191                 jnz @@2a
192                 dec edi
193                 jmp short @@2b
194                 @@2a:
195                 cmp al,70h
196                 jb @@2c
197                 cmp al,7Fh
198                 ja @@2c
199                 sub al,70h
200                 add al,[__c]
201                 @@2c:
202                 std
203                 stosb
204                 @@2b:
205                 loop @@2
206         add esi,ebx
207         add edx,320
208         dec [_ylen]
209         jnz @@1
212 endp
214 proc V_remap_rect uses ebx ecx esi edi, @@x:dword,@@w:dword,@@y:dword,@@h:dword,@@m:dword
215 public V_remap_rect
216 mov ax,[word @@x]
217 mov bx,[word @@w]
218 mov cx,[scrx]
219 mov dx,[scrw]
220 CutLin
221 mov [word @@x],ax
222 mov [word @@w],bx
223 mov ax,[word @@y]
224 mov bx,[word @@h]
225 mov cx,[scry]
226 mov dx,[scrh]
227 CutLin
228 mov [word @@y],ax
229 mov [word @@h],bx
230 mov ax,ds
231 mov es,ax
232 mov ax,320
233 mul [word @@y]
234 add ax,[word @@x]
235 movzx esi,ax
236 add esi,[scra]
238 mov ebx,[@@m]
239 mov dx,[word @@w]
240         @@1:
241         mov edi,esi
242         movzx ecx,dx
243         @@2:
244                 mov al,[edi]
245                 xlat
246                 stosb
247                 loop @@2
248         add esi,320
249         dec [word @@h]
250         jnz @@1
252 endp
254 proc V_maptoscr uses ebx ecx esi edi, @@x:dword,@@w:dword,@@y:dword,@@h:dword,@@m:dword
255 public V_maptoscr
256         mov ax,[word @@w]
257         add ax,[word @@x]
258         add ax,3
259         and ax,0FFFCh
260         and [word @@x],0FFFCh
261         sub ax,[word @@x]
262         mov [word @@w],ax
263         mov ax,320
264         mul [word @@y]
265         add ax,[word @@x]
266         movzx esi,ax
267         mov edi,esi
268         add esi,[scra]
269         add edi,0A0000h
270         movzx ecx,[word @@w]
271         mov edx,320
272         sub edx,ecx
273         shr cx,1
274         mov ax,ds
275         mov es,ax
276         mov ebx,[@@m]
277         cld
278 @@1:    push ecx
279         @@2:
280                 lodsw
281                 xlat
282                 xchg al,ah
283                 xlat
284                 xchg al,ah
285                 stosw
286                 loop @@2
287         pop ecx
288         add esi,edx
289         add edi,edx
290         dec [word @@h]
291         jnz @@1
292         ret
293 endp