]> github.com/historicalsource and other repositories - DRGNSRC.git/blob - DDSPRT.ASM
Fixed README extension
[DRGNSRC.git] / DDSPRT.ASM
1 \r
2 cseg            segment public 'code'\r
3 \r
4 public          draw_sprt, undraw_sprt,undraw_cont,draw_cont\r
5 public          mk_mask,mk_flipc\r
6 \r
7 extrn           enter_chunk: near, stack_base: word\r
8 \r
9 assume          cs: cseg, ds: dseg\r
10 \r
11 include         ddeqfile        ;for left !\r
12 \r
13 mk_mask:\r
14         push    ds\r
15         push    es\r
16 \r
17         mov     ax,seg msk_tab\r
18         mov     ds,ax\r
19         mov     es,ax\r
20 \r
21         mov     bx,offset msk_tab\r
22 \r
23         mov     cl,0\r
24 msk_lp:\r
25         mov     al,cl\r
26         xor     al,01010101b    ;make a cyan 00\r
27         mov     ah,al\r
28         and     al,10101010b\r
29         and     ah,01010101b\r
30         mov     dx,ax   ;copy this half\r
31         shr     al,1\r
32         shl     ah,1\r
33         or      ax,dx   ;or in the stuff\r
34         or      al,ah   ;now the other set ones\r
35 ;not    al\r
36         mov     ds:[bx],al      ;put the data in\r
37         inc     bx\r
38 \r
39         inc     cl\r
40         cmp     cl,0\r
41         jne     msk_lp\r
42 \r
43         pop     es\r
44         pop     ds\r
45         ret\r
46 \r
47 \r
48 mk_flipc:\r
49         push    es\r
50         push    ds\r
51 \r
52 ;\r
53 ;       make the cga flip table\r
54 ;\r
55         mov     ax,seg flp_tab\r
56         mov     ds,ax\r
57         mov     es,ax\r
58         mov     di,offset flp_tab\r
59 \r
60         mov     ch,0    ;counter\r
61 fl_lp:\r
62         mov     al,ch\r
63         mov     ah,ch\r
64         mov     bx,ax\r
65         \r
66         and     al,3\r
67         and     ah,3*4\r
68         and     bl,3*16\r
69         and     bh,3*64\r
70 \r
71         mov     cl,6\r
72         shr     bh,cl   ; move 6 places right \r
73         shr     bl,1\r
74         shr     bl,1    ; move 2 places right\r
75         shl     ah,1\r
76         shl     ah,1    ; move 2 places left\r
77         shl     al,cl   ; move 6 places left\r
78         and     al,3*64\r
79         and     ah,3*16\r
80         and     bl,3*4\r
81         and     bh,3\r
82 \r
83         or      ax,bx\r
84         or      al,ah\r
85         mov     [di],al\r
86         inc     di\r
87         inc     ch\r
88         cmp     ch,0\r
89         jne     fl_lp\r
90 \r
91         pop     ds\r
92         pop     es\r
93         ret\r
94 \r
95 \r
96 flip_spr:\r
97         push    es\r
98 ;push   bp\r
99         push    si\r
100         push    cx\r
101         push    dx\r
102         push    di\r
103         push    bx\r
104         push    ds\r
105 \r
106         mov     cx,sprt_cols\r
107         mov     dx,sprt_rows\r
108         mov     si,bp   ;assume these have been set up !\r
109 \r
110         mov     ax,ss_save\r
111         mov     es,ax   ;ds is the sprite data dippo !\r
112         mov     ax,seg new_spr\r
113         mov     ds,ax   ;in data segment\r
114 \r
115         mov     di,offset new_spr       ;4k for the sprite ?\r
116         mov     bx,offset flp_tab       ;try this one !\r
117         mov     spr_rows,dx\r
118         mov     bp,cx\r
119 ;shl    bp,1    ;this IS REDICULOUS !!\r
120         inc     cx\r
121         shr     cx,1    ; divide by two for this loop\r
122 row_lp:\r
123         add     di,bp   ;move to right of this row ?!\r
124         push    cx\r
125 byte_lp:        ; christ is it okay to lodsw ???\r
126         sub     di,2\r
127         mov     ax,es:[si]\r
128         add     si,2    ;crikey are all sprites even bytes wides\r
129         xlat\r
130         xchg    al,ah\r
131         xlat\r
132         mov     [di],ax\r
133         loop    byte_lp         ;hmmm can I extend this loop a bit\r
134         pop     cx\r
135         add     di,bp\r
136         dec     spr_rows\r
137         jne     row_lp\r
138         pop     ds\r
139         mov     ax,seg new_spr\r
140         mov     ss_save,ax\r
141         mov     si,offset new_spr       ;\r
142         mov     bp,si                   ;bp is at the moment the data_ptr\r
143 ;mov    sp_save,si      ;?doubt it but might as well try ?\r
144         pop     bx\r
145         pop     di\r
146         pop     dx\r
147         pop     cx\r
148 ;pop    bp\r
149         pop     si\r
150         pop     es\r
151         ret\r
152 \r
153 \r
154 \r
155 draw_w          macro   disp\r
156         mov     ax,[di+disp]\r
157         mov     es:[si+disp],ax\r
158         mov     dx,ax\r
159         mov     ax,ss:[bp]\r
160 ;mov    ax,1010101101010100b    ; red then cyan\r
161 ;xchg   al,ah   ;try swapping here !\r
162         add     bp,2\r
163         mov     cx,ax\r
164         xlat\r
165         xchg    al,ah\r
166         xlat\r
167         xchg    al,ah   ;ax=mask cx=data dx=screen\r
168         and     cx,ax   ;mask out cyan from data (forgot about that !)\r
169         not     ax\r
170         and     ax,dx\r
171         or      ax,cx\r
172         mov     [di+disp],ax\r
173 \r
174         endm\r
175 \r
176 \r
177 draw_b          macro   disp\r
178         mov     al, [di+disp]\r
179         mov     es:[si+disp], al\r
180         mov     dl, al\r
181         mov     ah,ss:[bp]\r
182         inc     bp\r
183         mov     al,ah\r
184         xlat\r
185         and     ah,al\r
186         not     al\r
187         and     al,dl\r
188         or      al,ah\r
189         mov     [di+disp],al\r
190                 endm\r
191 \r
192 \r
193 draw_ptrs       macro\r
194                 add     bp, skip_words  ;MUST FIX SKIP WORDS !\r
195                 add     di, 60\r
196                 add     si, bled_cols   ;must fix this annall!\r
197                 endm\r
198 \r
199 \r
200 draw_sprt:\r
201                 JMP     WORD PTR [JUMPTAB+2]\r
202 draw_cont:\r
203         push    ds\r
204                 mov     di, offset sprt_x\r
205                 movsw\r
206                 movsw\r
207                 movsw\r
208                 movsw\r
209                 movsw\r
210                 movsw\r
211                 movsw\r
212                 push    si\r
213 ;mov    si,person_on    ;my setup doesnt use si\r
214 ;mov    al,byte ptr [si+4]\r
215 ;mov    al,0    ;face only one direction\r
216 ;mov    ddd,al\r
217                 call    setup_sprt\r
218                 push    es\r
219                 mov     ax, buff_seg\r
220                 mov     es, ax\r
221                 mov     cx, rows_b4_wrap\r
222                 call    draw_main               ; draw main part before wrap\r
223                 mov     cx, cols_b4_wrap\r
224                 call    draw_wrap               ; draw wrap-line part 1\r
225                 sub     di, 9600                ; wraparound in dummy scrn\r
226                 mov     cx, cols_aftr_wrap\r
227                 call    draw_wrap               ; draw wrap-line part 2\r
228                 mov     ax, cols_b4_wrap        ; if wrap-line has been drawn\r
229                 or      ax, cols_aftr_wrap      ; then update ptrs, ignoring\r
230                 jz      over_ds                 ; save ptr\r
231                 sub     di,bled_cols\r
232                 add     di,60\r
233                 mov     ax,skip_words\r
234                 add     sp_save, ax\r
235 over_ds:        mov     cx, rows_aftr_wrap\r
236                 call    draw_main               ; draw main part after wrap\r
237                 pop     es\r
238                 pop     di\r
239                 mov     si, offset bled_x\r
240         pop     ds\r
241                 movsw\r
242                 movsw\r
243                 movsw\r
244                 movsw\r
245                 movsw\r
246                 movsw\r
247                 movsw\r
248                 movsw\r
249                 movsw\r
250 exit_ds:        ret\r
251 \r
252 \r
253 draw_wrap:\r
254                 jcxz    exit_dw\r
255                 cli\r
256                 mov     ax, ss\r
257                 xchg    ax, ss_save\r
258                 mov     ss, ax\r
259                 xchg    sp, sp_save\r
260         xchg    bp,sp   ;oh christ oh christ\r
261 next_byte_dw:   \r
262         mov     al,[di]\r
263         mov     es:[si],al\r
264         mov     dl,al\r
265         mov     al,ss:[bp]\r
266         inc     bp\r
267         mov     ah,al\r
268         xlat    ;make the mask\r
269         and     ah,al   ;get rid of cyan\r
270         not     al\r
271         and     al,dl\r
272         or      al,ah\r
273         mov     ds:[di],al\r
274         inc     di\r
275         inc     si\r
276         loop    next_byte_dw\r
277         xchg    bp,sp   ;hmmm city !!\r
278                 mov     ax, ss\r
279                 xchg    ax, ss_save\r
280                 mov     ss, ax\r
281                 xchg    sp, sp_save\r
282                 sti\r
283 exit_dw:        ret\r
284 \r
285 \r
286 \r
287 \r
288 draw_main:\r
289                 jcxz    exit_dm\r
290                 mov     bp, bled_cols\r
291                 shl     bp, 1\r
292                 add     bp, offset draw_jump_tabl - 2\r
293                 mov     dx, cs: [bp]            ; index into jump table\r
294                 cli\r
295                 mov     ax, ss\r
296                 xchg    ax, ss_save\r
297                 mov     ss, ax\r
298                 xchg    sp, sp_save\r
299         xchg    bp,sp   ;make bp be the sprite pointer\r
300         mov     loop_var,cx     ;set up here !\r
301                 jmp     dx\r
302 restore_stack:  \r
303         xchg    bp,sp   ;forgot !\r
304                 xchg    sp, sp_save\r
305                 mov     ax, ss\r
306                 xchg    ax, ss_save\r
307                 mov     ss, ax\r
308                 sti\r
309 exit_dm:        ret\r
310 \r
311 \r
312 \r
313 \r
314 undraw_sprt:\r
315                 JMP     WORD PTR [JUMPTAB]\r
316 undraw_cont:\r
317 \r
318                 mov     di, offset sprt_cols\r
319                 add     si, 4\r
320                 mov     cx, 14\r
321                 rep     movsw\r
322 \r
323                 push    ds\r
324                 mov     ax, buff_seg\r
325                 mov     ds, ax\r
326         mov     ax,seg save_ptr\r
327         mov     es,ax           ;check the set up\r
328                 mov     si, es:save_ptr\r
329                 mov     di, es:bled_bkgd_ptr\r
330                 mov     cx, es:rows_b4_wrap\r
331                 call    undraw_main             ; undraw main part before wrap\r
332                 mov     cx, es:cols_b4_wrap\r
333                 rep     movsb                   ; undraw wrap-line part 1\r
334                 sub     di, 9600                ; wraparound in dummy scrn\r
335                 mov     cx, es:cols_aftr_wrap\r
336                 rep     movsb                   ; undraw wrap-line part 2\r
337                 mov     ax, es:cols_b4_wrap     ; if wrap-line has been drawn\r
338                 or      ax, es:cols_aftr_wrap   ; then update bkgd ptr\r
339                 jz      over_us\r
340                 mov     ax, es:bled_cols\r
341                 sub     di, ax\r
342                 add     di, 60\r
343 over_us:        mov     cx, es:rows_aftr_wrap\r
344                 call    undraw_main             ; undraw main part after wrap\r
345                 pop     ds\r
346 exit_us:        ret\r
347 \r
348 \r
349 \r
350 \r
351 undraw_main:\r
352                 jcxz    exit_um\r
353                 mov     bx, es:bled_cols\r
354                 shl     bx, 1\r
355                 add     bx, offset undw_jump_tabl - 2\r
356                 mov     ax, cs: [bx]            ; index into jump table\r
357                 mov     dx, 60\r
358                 sub     dx, es:bled_cols\r
359                 jmp     ax\r
360 exit_um:        ret\r
361 \r
362 \r
363 \r
364 \r
365 setup_sprt:\r
366                 mov     si, offset sprt_x       ; assume initial values for\r
367                 movsw                           ; bled coords, sizes and\r
368                 movsw                           ; data ptrs\r
369                 movsw\r
370                 movsw\r
371 \r
372         test    flip_dir,left\r
373         jz      not_left_face\r
374         mov     al,spr_l_offs           ;[bx+6] ;offset of sprt\r
375         cbw                     ; -ve \r
376         shl     ax,1\r
377         sub     sprt_x,ax       ;lose last one\r
378 \r
379 ;add    ax,sprt_cols    ;making new offset\r
380 ;neg    ax      ;want new -ve offset\r
381 ;sar    ax,1    ;good grief\r
382         mov     ax,sprt_cols\r
383 ;shr    ax,1\r
384         sub     sprt_x,ax       ;christ\r
385 not_left_face:\r
386                 mov     bp,data_ptr\r
387                 mov     si,save_ptr\r
388         test    flip_dir,left\r
389         jz      n_l_f\r
390         call    flip_spr        ;address data-ptr in bp !\r
391 n_l_f:\r
392                 mov     di,window_topleft\r
393                 mov     bx,offset msk_tab               ;colr_map\r
394 test_above:     mov     ax, sprt_y\r
395                 cmp     ax, 0                   ; all or part above scrn ?\r
396                 jge     over_ss2                ; - no\r
397                 add     bled_rows, ax           ; - yes\r
398                 jg      over_ss1                ; all above scrn ?\r
399                 jmp     sprt_offscrn            ; - yes\r
400 over_ss1:       mov     bled_y, 0               ; - no, bled sprt at scrn top\r
401                 neg     ax\r
402                 mul     sprt_cols\r
403 ;shl    ax, 1   ha you little bastard\r
404                 add     bp, ax                  ; adjust sprt/mask data ptr\r
405                 jmp     test_left               ; but leave bkgd ptr unchanged\r
406 over_ss2:       mov     dh, al\r
407                 xor     dl, dl\r
408                 shr     dx, 1\r
409                 shr     dx, 1\r
410                 shl     ax, 1\r
411                 shl     ax, 1\r
412                 add     di, dx                  ; top onscrn, update bkgd ptr\r
413                 sub     di, ax\r
414 test_below:     mov     ax, 160\r
415                 sub     ax, sprt_y              ; all below scrn ?\r
416                 jg      over_ss3                ; - no\r
417                 jmp     sprt_offscrn            ; - yes\r
418 over_ss3:       cmp     ax, sprt_rows           ; part below scrn ?\r
419                 jge     test_left               ; - no\r
420                 mov     bled_rows, ax           ; - yes\r
421 test_left:      mov     ax,sprt_x\r
422                 cmp     ax,0                    ; all or part left of scrn ?\r
423                 jge     over_ss5                ; - no\r
424                 add     bled_cols,ax            ; - yes\r
425                 jg      over_ss4                ; all left of scrn ?\r
426                 jmp     sprt_offscrn            ; - yes\r
427 over_ss4:       mov     bled_x,0                ; - no, bled sprt at scrn left\r
428 ;shl    ax,1\r
429                 sub     bp,ax                   ; adjust data ptr\r
430                 jmp     ptrs_bled               ; but leave bkgd ptr unchanged\r
431 over_ss5:       add     di,ax                   ; left onscrn, update bkgd ptr\r
432 test_right:     mov     ax,60\r
433                 sub     ax,sprt_x               ; all right of scrn ?\r
434                 jg      over_ss6                ; - no\r
435                 jmp     sprt_offscrn            ; - yes\r
436 over_ss6:       cmp     ax, sprt_cols           ; part right of scrn ?\r
437                 jge     ptrs_bled               ; - no\r
438                 mov     bled_cols, ax           ; - yes\r
439 ptrs_bled:      mov     bled_bkgd_ptr, di       ; store, for undrawing\r
440                 mov     sp_save, bp\r
441                 mov     ax,sprt_cols\r
442                 sub     ax,bled_cols\r
443 ;shl    ax,1\r
444                 mov     skip_words, ax\r
445                 mov     ax,60                   ; eval cols before wrap\r
446                 sub     ax,window_left\r
447                 sub     ax,bled_x\r
448                 jge     over_ss7\r
449                 xor     ax,ax\r
450 over_ss7:       cmp     ax,bled_cols\r
451                 jle     over_ss8\r
452                 mov     ax,bled_cols\r
453 over_ss8:       mov     cols_b4_wrap, ax\r
454                 neg     ax                      ; eval cols atfer wrap\r
455                 add     ax, bled_cols\r
456                 mov     cols_aftr_wrap, ax\r
457                 mov     ax,159                  ; eval rows before wrap\r
458                 sub     ax,window_top\r
459                 sub     ax,bled_y\r
460                 jge     over_ss9\r
461                 xor     ax, ax\r
462 over_ss9:       cmp     ax, bled_rows\r
463                 jl      over_ss10\r
464                 mov     ax, bled_rows\r
465                 mov     cols_b4_wrap,0          ; if whole sprt is one main\r
466                 mov     cols_aftr_wrap,0        ; part then no wrap-line\r
467 over_ss10:      mov     rows_b4_wrap,ax\r
468                 mov     ax,window_top           ; eval rows after wrap\r
469                 add     ax,bled_y\r
470                 add     ax,bled_rows\r
471                 sub     ax,160\r
472                 jge     over_ss11\r
473                 xor     ax,ax\r
474 over_ss11:      cmp     ax,bled_rows\r
475                 jl      over_ss12\r
476                 mov     ax, bled_rows\r
477                 mov     cols_b4_wrap,0          ; if whole sprt is one main\r
478                 mov     cols_aftr_wrap, 0       ; part then no wrap-line\r
479 over_ss12:      mov     rows_aftr_wrap, ax\r
480                 ret\r
481 \r
482 sprt_offscrn:   xor     ax, ax\r
483                 mov     bled_rows, 0\r
484                 mov     rows_b4_wrap, ax\r
485                 mov     rows_aftr_wrap, ax\r
486                 mov     cols_b4_wrap, ax\r
487                 mov     cols_aftr_wrap, ax\r
488                 ret\r
489 \r
490 draw_jump_tabl: dw      offset draw_1_col\r
491                 dw      offset draw_2_cols\r
492                 dw      offset draw_3_cols\r
493                 dw      offset draw_4_cols\r
494                 dw      offset draw_5_cols\r
495                 dw      offset draw_6_cols\r
496                 dw      offset draw_7_cols\r
497                 dw      offset draw_8_cols\r
498                 dw      offset draw_9_cols\r
499                 dw      offset draw_10_cols\r
500                 dw      offset draw_11_cols\r
501                 dw      offset draw_12_cols\r
502                 dw      offset draw_13_cols\r
503                 dw      offset draw_14_cols\r
504                 dw      offset draw_15_cols\r
505                 dw      offset draw_16_cols\r
506                 dw      offset draw_17_cols\r
507                 dw      offset draw_18_cols\r
508                 dw      offset draw_19_cols\r
509                 dw      offset draw_20_cols\r
510                 dw      offset draw_21_cols\r
511                 dw      offset draw_22_cols\r
512                 dw      offset draw_23_cols\r
513 \r
514 draw_1_col:\r
515                 draw_b  0\r
516                 draw_ptrs\r
517                 dec     word ptr loop_var\r
518                 jne     draw_1_col\r
519                 jmp     restore_stack\r
520 \r
521 draw_2_cols:\r
522                 draw_w  0\r
523                 draw_ptrs\r
524                 dec     word ptr loop_var\r
525                 jne     draw_2_cols\r
526                 jmp     restore_stack\r
527 \r
528 draw_3_cols:\r
529                 draw_w  0\r
530                 draw_b  2\r
531                 draw_ptrs\r
532                 dec     word ptr loop_var\r
533                 jne     draw_3_cols\r
534                 jmp     restore_stack\r
535 \r
536 draw_4_cols:\r
537                 draw_w  0\r
538                 draw_w  2\r
539                 draw_ptrs\r
540                 dec     word ptr loop_var\r
541                 jne     draw_4_cols\r
542                 jmp     restore_stack\r
543 \r
544 draw_5_cols:\r
545                 draw_w  0\r
546                 draw_w  2\r
547                 draw_b  4\r
548                 draw_ptrs\r
549                 dec     loop_var\r
550                 jne     draw_5_cols\r
551                 jmp     restore_stack\r
552 \r
553 draw_6_cols:\r
554                 draw_w  0\r
555                 draw_w  2\r
556                 draw_w  4\r
557                 draw_ptrs\r
558                 dec     word ptr loop_var\r
559                 jne     draw_6_cols\r
560                 jmp     restore_stack\r
561 \r
562 draw_7_cols:    \r
563                 draw_w  0\r
564                 draw_w  2\r
565                 draw_w  4\r
566                 draw_b  6\r
567                 draw_ptrs\r
568                 dec     word ptr loop_var\r
569                 jne     over_d7c\r
570                 jmp     restore_stack\r
571 over_d7c:       jmp     draw_7_cols\r
572 \r
573 draw_8_cols:    \r
574                 draw_w  0\r
575                 draw_w  2\r
576                 draw_w  4\r
577                 draw_w  6\r
578                 draw_ptrs\r
579                 dec     word ptr loop_var\r
580                 jne     over_d8c\r
581                 jmp     restore_stack\r
582 over_d8c:       jmp     draw_8_cols\r
583 \r
584 draw_9_cols:\r
585                 draw_w  0\r
586                 draw_w  2\r
587                 draw_w  4\r
588                 draw_w  6\r
589                 draw_b  8\r
590                 draw_ptrs\r
591                 dec     word ptr loop_var\r
592                 jne     over_d9c\r
593                 jmp     restore_stack\r
594 over_d9c:       jmp     draw_9_cols\r
595 \r
596 draw_10_cols:   \r
597                 draw_w  0\r
598                 draw_w  2\r
599                 draw_w  4\r
600                 draw_w  6\r
601                 draw_w  8\r
602                 draw_ptrs\r
603                 dec     word ptr loop_var\r
604                 jne     over_d10c\r
605                 jmp     restore_stack\r
606 over_d10c:      jmp     draw_10_cols\r
607 \r
608 draw_11_cols:   \r
609                 draw_w  0\r
610                 draw_w  2\r
611                 draw_w  4\r
612                 draw_w  6\r
613                 draw_w  8\r
614                 draw_b  10\r
615                 draw_ptrs\r
616                 dec     word ptr loop_var\r
617                 jne     over_d11c\r
618                 jmp     restore_stack\r
619 over_d11c:      jmp     draw_11_cols\r
620 \r
621 draw_12_cols:\r
622                 draw_w  0\r
623                 draw_w  2\r
624                 draw_w  4\r
625                 draw_w  6\r
626                 draw_w  8\r
627                 draw_w  10\r
628                 draw_ptrs\r
629                 dec     word ptr loop_var\r
630                 jne     over_d12c\r
631                 jmp     restore_stack\r
632 over_d12c:      jmp     draw_12_cols\r
633 \r
634 draw_13_cols:\r
635                 draw_w  0\r
636                 draw_w  2\r
637                 draw_w  4\r
638                 draw_w  6\r
639                 draw_w  8\r
640                 draw_w  10\r
641                 draw_b  12\r
642                 draw_ptrs\r
643                 dec     word ptr loop_var\r
644                 jne     over_d13c\r
645                 jmp     restore_stack\r
646 over_d13c:      jmp     draw_13_cols\r
647 \r
648 draw_14_cols:   \r
649                 draw_w  0\r
650                 draw_w  2\r
651                 draw_w  4\r
652                 draw_w  6\r
653                 draw_w  8\r
654                 draw_w  10\r
655                 draw_w  12\r
656                 draw_ptrs\r
657                 dec     word ptr loop_var\r
658                 jne     over_d14c\r
659                 jmp     restore_stack\r
660 over_d14c:      jmp     draw_14_cols\r
661 \r
662 draw_15_cols:   \r
663                 draw_w  0\r
664                 draw_w  2\r
665                 draw_w  4\r
666                 draw_w  6\r
667                 draw_w  8\r
668                 draw_w  10\r
669                 draw_w  12\r
670                 draw_b  14\r
671                 draw_ptrs\r
672                 dec     word ptr loop_var\r
673                 jne     over_d15c\r
674                 jmp     restore_stack\r
675 over_d15c:      jmp     draw_15_cols\r
676 \r
677 draw_16_cols:\r
678                 draw_w  0\r
679                 draw_w  2\r
680                 draw_w  4\r
681                 draw_w  6\r
682                 draw_w  8\r
683                 draw_w  10\r
684                 draw_w  12\r
685                 draw_w  14\r
686                 draw_ptrs\r
687                 dec     word ptr loop_var\r
688                 jne     over_d16c\r
689                 jmp     restore_stack\r
690 over_d16c:      jmp     draw_16_cols\r
691 \r
692 draw_17_cols:\r
693                 draw_w  0\r
694                 draw_w  2\r
695                 draw_w  4\r
696                 draw_w  6\r
697                 draw_w  8\r
698                 draw_w  10\r
699                 draw_w  12\r
700                 draw_w  14\r
701                 draw_b  16\r
702                 draw_ptrs\r
703                 dec     word ptr loop_var\r
704                 jne     over_d17c\r
705                 jmp     restore_stack\r
706 over_d17c:      jmp     draw_17_cols\r
707 \r
708 \r
709 \r
710 draw_18_cols:\r
711                 draw_w  0\r
712                 draw_w  2\r
713                 draw_w  4\r
714                 draw_w  6\r
715                 draw_w  8\r
716                 draw_w  10\r
717                 draw_w  12\r
718                 draw_w  14\r
719                 draw_w  16\r
720                 draw_ptrs\r
721                 dec     word ptr loop_var\r
722                 jne     over_d18c\r
723                 jmp     restore_stack\r
724 over_d18c:      jmp     draw_18_cols\r
725 \r
726 draw_19_cols:\r
727                 draw_w  0\r
728                 draw_w  2\r
729                 draw_w  4\r
730                 draw_w  6\r
731                 draw_w  8\r
732                 draw_w  10\r
733                 draw_w  12\r
734                 draw_w  14\r
735                 draw_w  16\r
736                 draw_b  18\r
737                 draw_ptrs\r
738                 dec     word ptr loop_var\r
739                 jne     over_d19c\r
740                 jmp     restore_stack\r
741 over_d19c:      jmp     draw_19_cols\r
742 \r
743 \r
744 draw_20_cols:\r
745                 draw_w  0\r
746                 draw_w  2\r
747                 draw_w  4\r
748                 draw_w  6\r
749                 draw_w  8\r
750                 draw_w  10\r
751                 draw_w  12\r
752                 draw_w  14\r
753                 draw_w  16\r
754                 draw_w  18\r
755                 draw_ptrs\r
756                 dec     word ptr loop_var\r
757                 jne     over_d20c\r
758                 jmp     restore_stack\r
759 over_d20c:      jmp     draw_20_cols\r
760 \r
761 draw_21_cols:\r
762                 draw_w  0\r
763                 draw_w  2\r
764                 draw_w  4\r
765                 draw_w  6\r
766                 draw_w  8\r
767                 draw_w  10\r
768                 draw_w  12\r
769                 draw_w  14\r
770                 draw_w  16\r
771                 draw_w  18\r
772                 draw_b  20\r
773                 draw_ptrs\r
774                 dec     word ptr loop_var\r
775                 jne     over_d21c\r
776                 jmp     restore_stack\r
777 over_d21c:      jmp     draw_21_cols\r
778 \r
779 draw_22_cols:\r
780                 draw_w  0\r
781                 draw_w  2\r
782                 draw_w  4\r
783                 draw_w  6\r
784                 draw_w  8\r
785                 draw_w  10\r
786                 draw_w  12\r
787                 draw_w  14\r
788                 draw_w  16\r
789                 draw_w  18\r
790                 draw_w  20\r
791                 draw_ptrs\r
792                 dec     word ptr loop_var\r
793                 jne     over_d22c\r
794                 jmp     restore_stack\r
795 over_d22c:      jmp     draw_22_cols\r
796 \r
797 draw_23_cols:\r
798                 draw_w  0\r
799                 draw_w  2\r
800                 draw_w  4\r
801                 draw_w  6\r
802                 draw_w  8\r
803                 draw_w  10\r
804                 draw_w  12\r
805                 draw_w  14\r
806                 draw_w  16\r
807                 draw_w  18\r
808                 draw_w  20\r
809                 draw_b  22\r
810                 draw_ptrs\r
811                 dec     word ptr loop_var\r
812                 jne     over_d23c\r
813                 jmp     restore_stack\r
814 over_d23c:      jmp     draw_23_cols\r
815 \r
816 \r
817 \r
818 \r
819 undw_jump_tabl: dw      offset undraw_1_col\r
820                 dw      offset undraw_2_cols\r
821                 dw      offset undraw_3_cols\r
822                 dw      offset undraw_4_cols\r
823                 dw      offset undraw_5_cols\r
824                 dw      offset undraw_6_cols\r
825                 dw      offset undraw_7_cols\r
826                 dw      offset undraw_8_cols\r
827                 dw      offset undraw_9_cols\r
828                 dw      offset undraw_10_cols\r
829                 dw      offset undraw_11_cols\r
830                 dw      offset undraw_12_cols\r
831                 dw      offset undraw_13_cols\r
832                 dw      offset undraw_14_cols\r
833                 dw      offset undraw_15_cols\r
834                 dw      offset undraw_16_cols\r
835                 dw      offset undraw_17_cols\r
836                 dw      offset undraw_18_cols\r
837                 dw      offset undraw_19_cols\r
838                 dw      offset undraw_20_cols\r
839                 dw      offset undraw_21_cols\r
840                 dw      offset undraw_22_cols\r
841                 dw      offset undraw_23_cols\r
842 \r
843 \r
844 \r
845 undraw_1_col:   movsb\r
846                 add     di, dx\r
847                 loop    undraw_1_col\r
848                 jmp     exit_um\r
849 \r
850 undraw_2_cols:  movsw\r
851                 add     di, dx\r
852                 loop    undraw_2_cols\r
853                 jmp     exit_um\r
854 \r
855 undraw_3_cols:  movsw\r
856                 movsb\r
857                 add     di, dx\r
858                 loop    undraw_3_cols\r
859                 jmp     exit_um\r
860 \r
861 undraw_4_cols:  movsw\r
862                 movsw\r
863                 add     di, dx\r
864                 loop    undraw_4_cols\r
865                 jmp     exit_um\r
866 \r
867 undraw_5_cols:  movsw\r
868                 movsw\r
869                 movsb\r
870                 add     di, dx\r
871                 loop    undraw_5_cols\r
872                 jmp     exit_um\r
873 \r
874 undraw_6_cols:  movsw\r
875                 movsw\r
876                 movsw\r
877                 add     di, dx\r
878                 loop    undraw_6_cols\r
879                 jmp     exit_um\r
880 \r
881 undraw_7_cols:  movsw\r
882                 movsw\r
883                 movsw\r
884                 movsb\r
885                 add     di, dx\r
886                 loop    undraw_7_cols\r
887                 jmp     exit_um\r
888 \r
889 undraw_8_cols:  movsw\r
890                 movsw\r
891                 movsw\r
892                 movsw\r
893                 add     di, dx\r
894                 loop    undraw_8_cols\r
895                 jmp     exit_um\r
896 \r
897 undraw_9_cols:  movsw\r
898                 movsw\r
899                 movsw\r
900                 movsw\r
901                 movsb\r
902                 add     di, dx\r
903                 loop    undraw_9_cols\r
904                 jmp     exit_um\r
905 \r
906 undraw_10_cols:\r
907         mov     bx,cx\r
908         mov     cx,5\r
909         rep     movsw\r
910         mov     cx,bx\r
911                 add     di, dx\r
912                 loop    undraw_10_cols\r
913                 jmp     exit_um\r
914 \r
915 undraw_11_cols: \r
916         mov     bx,cx\r
917         mov     cx,5\r
918         rep     movsw\r
919         mov     cx,bx\r
920                 movsb\r
921                 add     di, dx\r
922                 loop    undraw_11_cols\r
923                 jmp     exit_um\r
924 \r
925 undraw_12_cols:\r
926         mov     bx,cx\r
927         mov     cx,6\r
928         rep     movsw\r
929         mov     cx,bx\r
930                 add     di, dx\r
931                 loop    undraw_12_cols\r
932                 jmp     exit_um\r
933 \r
934 undraw_13_cols:\r
935         mov     bx,cx\r
936         mov     cx,6\r
937         rep     movsw\r
938         mov     cx,bx\r
939                 movsb\r
940                 add     di, dx\r
941                 loop    undraw_13_cols\r
942                 jmp     exit_um\r
943 \r
944 undraw_14_cols: \r
945         mov     bx,cx\r
946         mov     cx,7\r
947         rep     movsw\r
948         mov     cx,bx\r
949                 add     di, dx\r
950                 loop    undraw_14_cols\r
951                 jmp     exit_um\r
952 \r
953 undraw_15_cols:\r
954         mov     bx,cx\r
955         mov     cx,7\r
956         rep     movsw\r
957         mov     cx,bx\r
958                 movsb\r
959                 add     di, dx\r
960                 loop    undraw_15_cols\r
961                 jmp     exit_um\r
962 \r
963 undraw_16_cols: \r
964         mov     bx,cx\r
965         mov     cx,8\r
966         rep     movsw\r
967         mov     cx,bx\r
968                 add     di, dx\r
969                 loop    undraw_16_cols\r
970                 jmp     exit_um\r
971 \r
972 undraw_17_cols: \r
973         mov     bx,cx\r
974         mov     cx,8\r
975         rep     movsw\r
976         mov     cx,bx\r
977                 movsb\r
978                 add     di, dx\r
979                 loop    undraw_17_cols\r
980                 jmp     exit_um\r
981 \r
982 undraw_18_cols: \r
983         mov     bx,cx\r
984         mov     cx,9\r
985         rep     movsw\r
986         mov     cx,bx\r
987                 add     di, dx\r
988                 loop    undraw_18_cols\r
989                 jmp     exit_um\r
990 \r
991 undraw_19_cols: \r
992         mov     bx,cx\r
993         mov     cx,9\r
994         rep     movsw\r
995         mov     cx,bx\r
996                 movsb\r
997                 add     di, dx\r
998                 loop    undraw_19_cols\r
999                 jmp     exit_um\r
1000 \r
1001 undraw_20_cols: \r
1002         mov     bx,cx\r
1003         mov     cx,10\r
1004         rep     movsw\r
1005         mov     cx,bx\r
1006                 add     di, dx\r
1007                 loop    undraw_20_cols\r
1008                 jmp     exit_um\r
1009 \r
1010 undraw_21_cols:\r
1011         mov     bx,cx\r
1012         mov     cx,10\r
1013         rep     movsw\r
1014         mov     cx,bx\r
1015                 movsb\r
1016                 add     di, dx\r
1017                 loop    undraw_21_cols\r
1018                 jmp     exit_um\r
1019 \r
1020 undraw_22_cols: \r
1021         mov     bx,cx\r
1022         mov     cx,11\r
1023         rep     movsw\r
1024         mov     cx,bx\r
1025                 add     di, dx\r
1026                 loop    undraw_22_cols\r
1027                 jmp     exit_um\r
1028 \r
1029 undraw_23_cols:\r
1030         mov     bx,cx\r
1031         mov     cx,11\r
1032         rep     movsw\r
1033         mov     cx,bx\r
1034                 movsb\r
1035                 add     di, dx\r
1036                 loop    undraw_23_cols\r
1037                 jmp     exit_um\r
1038 \r
1039 cseg            ends\r
1040 \r
1041 dseg            segment page public 'data'\r
1042 \r
1043 flp_tab         db      256 dup (?)     ;placed on a 256 byte boundary !\r
1044 \r
1045 public          bled_x, bled_y, bled_cols, bled_rows, sprt_table, ss_save\r
1046 public          sprt_x, sprt_y, sprt_cols, sprt_rows, data_ptr, colr_map\r
1047 PUBLIC          BLED_BKGD_PTR,SAVE_PTR,msk_tab\r
1048 \r
1049 extrn           window_topleft: word, window_top: word, window_left: word\r
1050 extrn           scroll_flag: byte,SIXTEENCOL:BYTE\r
1051 EXTRN           JUMPTAB:WORD\r
1052 extrn           person_on:word , flip_dir:word , spr_l_offs:byte\r
1053 \r
1054 \r
1055 loop_var        dw      ?\r
1056 \r
1057 even\r
1058 ;       vers is either 1 : cga 2 : vga !\r
1059 save_0  equ     offset save_area\r
1060 save_1  equ     save_0+1200*vers\r
1061 save_2  equ     save_1+1200*vers\r
1062 save_3  equ     save_2+1600*vers\r
1063 save_4  equ     save_3+1600*vers\r
1064 save_5  equ     save_4+1600*vers\r
1065 save_6  equ     save_5+2000*vers\r
1066 \r
1067 save_7  equ     save_6+2000*vers\r
1068 save_8  equ     save_7+400*vers  ;      knives/balls/whips/spades\r
1069 save_9  equ     save_8+400*vers  ;      knives/balls/whips/spades\r
1070 save_10 equ     save_9+400*vers  ;      knives/balls/whips/spades\r
1071 save_11 equ     save_10+680*vers ;      all\r
1072 save_12 equ     save_11+680*vers ;      all !\r
1073 \r
1074 save_end        equ     save_12+680*vers\r
1075 \r
1076 sprt_table      dw  6 dup (?), save_0, 9 dup (?)        ;pl1 1200\r
1077                 dw  6 dup (?), save_1, 9 dup (?)        ;pl2 1200\r
1078                 dw  6 dup (?), save_2, 9 dup (?)        ;    1600\r
1079                 dw  6 dup (?), save_3, 9 dup (?)        ;    1600\r
1080                 dw  6 dup (?), save_4, 9 dup (?)        ;    1600\r
1081                 dw  6 dup (?), save_5, 9 dup (?)        ;    2000\r
1082                 dw  6 dup (?), save_6, 9 dup (?)        ;    2000\r
1083 \r
1084                 dw      6 dup (?), save_7, 9 dup (?)    ;knifes or grenades only\r
1085                 dw      6 dup (?), save_8, 9 dup (?)    ;knifes or grenades only\r
1086                 dw      6 dup (?), save_9, 9 dup (?)    ;whips / spades\r
1087                 dw      6 dup (?), save_10, 9 dup (?)   ;whips / spades\r
1088                 dw      6 dup (?), save_11, 9 dup (?)   ;rocks/balls/crates\r
1089                 dw      6 dup (?), save_12, 9 dup (?)   ;rocks/balls/crates\r
1090 ;2000 bytes per object ?!\r
1091 sprt_x          dw      ?\r
1092 sprt_y          dw      ?\r
1093 sprt_cols       dw      ?\r
1094 sprt_rows       dw      ?\r
1095 data_ptr        dw      ?\r
1096 colr_map        dw      ?\r
1097 save_ptr        dw      ?\r
1098 \r
1099 bled_x          dw      ?\r
1100 bled_y          dw      ?\r
1101 bled_cols       dw      ?\r
1102 bled_rows       dw      ?\r
1103 cols_b4_wrap    dw      ?\r
1104 cols_aftr_wrap  dw      ?\r
1105 rows_b4_wrap    dw      ?\r
1106 rows_aftr_wrap  dw      ?\r
1107 bled_bkgd_ptr   dw      ?\r
1108 \r
1109 skip_words      dw      ?\r
1110 \r
1111 sp_save         dw      ?\r
1112 ss_save         dw      ?\r
1113 spr_rows        dw      0\r
1114 \r
1115 even\r
1116 \r
1117 msk_tab db      256 dup (?)\r
1118 \r
1119         db      20 dup (?) ; where didst that corruption come from\r
1120 new_spr db      2048 dup (?)    ;this might be it.( or then again?)\r
1121 \r
1122 dseg            ends\r
1123 \r
1124 buff_seg        segment public 'data'\r
1125 public          save_area\r
1126 \r
1127 res_mem         save_area , 30400 , 15600\r
1128 \r
1129 ; have added 700 to both hopefully to stop corruption of VGA loading !\r
1130 ;       cga loading probs mean another extension !\r
1131 \r
1132 buff_seg        ends\r
1133 \r
1134 end\r
1135 \1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a