OSDN Git Service

got 8086 port of wolf3d to work and sod to work
[proj16/16.git] / 16 / sod8086 / id_vh_a.asm
1 ; ID_VL.ASM\r
2 \r
3         IDEAL\r
4         MODEL   MEDIUM,C\r
5 \r
6         INCLUDE 'ID_VL.EQU'\r
7 \r
8 SCREENSEG       =       0a000h\r
9 \r
10 UPDATEWIDE      =       20\r
11 UPDATEHIGH      =       13\r
12 \r
13         DATASEG\r
14 \r
15 \r
16 EXTRN   bufferofs                       :WORD\r
17 EXTRN   displayofs                      :WORD\r
18 EXTRN   ylookup                         :WORD\r
19 EXTRN   linewidth                       :WORD\r
20 EXTRN   blockstarts                     :WORD   ;offsets from drawofs for each update block\r
21 \r
22 EXTRN   update                          :BYTE\r
23 \r
24         CODESEG\r
25 \r
26 \r
27 ;=================\r
28 ;\r
29 ; VH_UpdateScreen\r
30 ;\r
31 ;=================\r
32 \r
33 PROC    VH_UpdateScreen\r
34 PUBLIC  VH_UpdateScreen\r
35 USES    si,di\r
36 \r
37         mov     dx,SC_INDEX\r
38         mov     ax,SC_MAPMASK+15*256\r
39         out     dx,ax\r
40 \r
41         mov dx,GC_INDEX\r
42         mov al,GC_MODE\r
43         out dx,al\r
44 \r
45         inc dx\r
46         in      al,dx\r
47         and al,252\r
48         or      al,1\r
49         out dx,al\r
50 \r
51         mov     bx,UPDATEWIDE*UPDATEHIGH-1              ; bx is the tile number\r
52         mov     dx,[linewidth]\r
53 \r
54 ;\r
55 ; see if the tile needs to be copied\r
56 ;\r
57 @@checktile:\r
58         test    [update+bx],1\r
59         jnz     @@copytile\r
60 @@next:\r
61         dec     bx\r
62         jns     @@checktile\r
63 \r
64 ;\r
65 ; done\r
66 ;\r
67         mov dx,GC_INDEX+1\r
68         in      al,dx\r
69         and al,NOT 3\r
70         or      al,0\r
71         out dx,al\r
72         ret\r
73 \r
74 ;\r
75 ; copy a tile\r
76 ;\r
77 @@copytile:\r
78         mov     [update+bx],0\r
79         shl     bx,1\r
80         mov     si,[blockstarts+bx]\r
81         shr     bx,1\r
82         mov     di,si\r
83         add     si,[bufferofs]\r
84         add     di,[displayofs]\r
85 \r
86         mov     ax,SCREENSEG\r
87         mov     ds,ax\r
88 \r
89 REPT    16\r
90         mov     al,[si]\r
91         mov     [di],al\r
92         mov     al,[si+1]\r
93         mov     [di+1],al\r
94         mov     al,[si+2]\r
95         mov     [di+2],al\r
96         mov     al,[si+3]\r
97         mov     [di+3],al\r
98         add     si,dx\r
99         add     di,dx\r
100 ENDM\r
101 \r
102         mov     ax,ss\r
103         mov     ds,ax\r
104         jmp     @@next\r
105 \r
106 ENDP\r
107 \r
108 \r
109         END\r
110 \r