3 // PUBLIC C plzline, C setplzparas, C psini, C lsini4, C lsini16
\r
6 // INCLUDE 'psini.inc'
\r
10 // INCLUDE 'lsini4.inc'
\r
11 // ; db 16384 dup(?)
\r
13 // LABEL lsini16 WORD
\r
14 // INCLUDE 'lsini16.inc'
\r
15 // ; db 16384 dup(?)
\r
18 word anSelfModifyOffsets[5*84];
\r
22 word anSelfModifyOffsets_ReadWord(word nOffset)
\r
24 //return anSelfModifyOffsets[nOffset];
\r
28 void anSelfModifyOffsets_WriteWord(word nOffset, word nValue)
\r
30 anSelfModifyOffsets[nOffset] = nValue;
\r
33 word set_plzstart(word start)
\r
37 mov al, 18h ; linecompare
\r
38 mov ah, [Byte PTR start]
\r
41 mov ah, [Byte PTR start+1]
\r
48 out dx, ax ; 8th bit
\r
53 int plzline(int y, int vseg)
\r
55 // vseg represented a segment, so multiply by sixteen (shift left by 4)
\r
56 // to convert into an offset.
\r
57 var nVgaYOffset = vseg * 16;
\r
61 3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12,19,18,17,16,23,22,21,20,27,26,25,24,31,30,29,28,35,34,33,32,39,38,37,36,43,42,41,40,47,46,45,44,51,50,49,48,55,54,53,52,59,58,57,56,63,62,61,60,67,66,65,64,71,70,69,68,75,74,73,72,79,78,77,76,83,82,81,80
\r
69 for (var nIndex = 0; nIndex < nCount; nIndex++)
\r
71 var ccc = cccTable[nIndex];
\r
75 var nByteOffset = 0;
\r
78 nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((2 * 84) + ccc);
\r
79 nByteOffset &= 0xFFFF;
\r
80 bx = psini_ReadWord(nByteOffset);
\r
82 nByteOffset = bx + anSelfModifyOffsets_ReadWord((1 * 84) + ccc);
\r
83 nByteOffset &= 0xFFFF;
\r
84 ah = psini_ReadByte(nByteOffset);
\r
86 nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((4 * 84) + ccc);
\r
87 nByteOffset &= 0xFFFF;
\r
88 bx = psini_ReadWord(nByteOffset);
\r
90 nByteOffset = bx + (y * 2) + anSelfModifyOffsets_ReadWord((3 * 84) + ccc);
\r
91 nByteOffset &= 0xFFFF;
\r
92 ah += psini_ReadByte(nByteOffset);
\r
97 var nByteOffset = 0;
\r
100 nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((2 * 84) + ccc);
\r
101 nByteOffset &= 0xFFFF;
\r
102 bx = psini_ReadWord(nByteOffset);
\r
104 nByteOffset = bx + anSelfModifyOffsets_ReadWord((1 * 84) + ccc);
\r
105 nByteOffset &= 0xFFFF;
\r
106 al = psini_ReadByte(nByteOffset);
\r
108 nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((4 * 84) + ccc);
\r
109 nByteOffset &= 0xFFFF;
\r
110 bx = psini_ReadWord(nByteOffset);
\r
112 nByteOffset = bx + (y * 2) + anSelfModifyOffsets_ReadWord((3 * 84) + ccc);
\r
113 nByteOffset &= 0xFFFF;
\r
114 al += psini_ReadByte(nByteOffset);
\r
118 if ((ccc & 3) == 2)
\r
120 eax = (ah << 8) | (al << 0);
\r
124 if ((ccc & 3) == 0)
\r
126 eax |= (ah << 8) | (al << 0);
\r
128 VGA_WriteDword(nVgaYOffset + ccc, eax);
\r
136 int setplzparas(int c1, int c2, int c3, int c4)
\r
138 // static word psini;
\r
139 // static word lsini4;
\r
140 // static word lsini16;
\r
143 'psini.inc' INCLUDE
\r
146 'lsini4.inc' INCLUDE
\r
148 lsini16 WORD .LABEL
\r
149 'lsini16.inc' INCLUDE
\r
151 IRP ccc, <0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83>
\r
153 add ax, OFFSET psini+ccc*8
\r
154 mov [word (cs:lc1_&ccc)], ax
\r
157 add ax, OFFSET lsini16-ccc*8+80*8
\r
158 mov [word (cs:lc2_&ccc)], ax
\r
160 add ax, OFFSET psini-ccc*4+80*4
\r
161 mov [word (cs:lc3_&ccc)], ax
\r
164 add ax, OFFSET lsini4+ccc*32
\r
165 mov [word (cs:lc4_&ccc)], ax
\r
171 /* var psiniOffset = 0;
\r
172 var lsini16Offset = lsini16_GetOffset();
\r
173 var lsini4Offset = lsini4_GetOffset();
\r
175 for (var ccc = 0; ccc < 84; ccc++)
\r
177 var lc1 = c1 + psiniOffset + (ccc * 8);
\r
179 anSelfModifyOffsets_WriteWord((1 * 84) + ccc, lc1);
\r
181 var lc2 = (c2 * 2) + lsini16Offset - (ccc * 8) + (80 * 8);
\r
183 anSelfModifyOffsets_WriteWord((2 * 84) + ccc, lc2);
\r
185 var lc3 = c3 + psiniOffset - (ccc * 4) + (80 * 4);
\r
187 anSelfModifyOffsets_WriteWord((3 * 84) + ccc, lc3);
\r
189 var lc4 = (c4 * 2) + lsini4Offset + (ccc * 32);
\r
191 anSelfModifyOffsets_WriteWord((4 * 84) + ccc, lc4);
\r