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
20 word set_plzstart(word start)
\r
24 mov al, 18h ; linecompare
\r
25 mov ah, [Byte PTR start]
\r
28 mov ah, [Byte PTR start+1]
\r
35 out dx, ax ; 8th bit
\r
40 int plzline(int y, int vseg)
\r
42 // vseg represented a segment, so multiply by sixteen (shift left by 4)
\r
43 // to convert into an offset.
\r
44 var nVgaYOffset = vseg * 16;
\r
48 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
56 for (var nIndex = 0; nIndex < nCount; nIndex++)
\r
58 var ccc = cccTable[nIndex];
\r
62 var nByteOffset = 0;
\r
65 nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((2 * 84) + ccc);
\r
66 nByteOffset &= 0xFFFF;
\r
67 bx = psini_ReadWord(nByteOffset);
\r
69 nByteOffset = bx + anSelfModifyOffsets_ReadWord((1 * 84) + ccc);
\r
70 nByteOffset &= 0xFFFF;
\r
71 ah = psini_ReadByte(nByteOffset);
\r
73 nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((4 * 84) + ccc);
\r
74 nByteOffset &= 0xFFFF;
\r
75 bx = psini_ReadWord(nByteOffset);
\r
77 nByteOffset = bx + (y * 2) + anSelfModifyOffsets_ReadWord((3 * 84) + ccc);
\r
78 nByteOffset &= 0xFFFF;
\r
79 ah += psini_ReadByte(nByteOffset);
\r
84 var nByteOffset = 0;
\r
87 nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((2 * 84) + ccc);
\r
88 nByteOffset &= 0xFFFF;
\r
89 bx = psini_ReadWord(nByteOffset);
\r
91 nByteOffset = bx + anSelfModifyOffsets_ReadWord((1 * 84) + ccc);
\r
92 nByteOffset &= 0xFFFF;
\r
93 al = psini_ReadByte(nByteOffset);
\r
95 nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((4 * 84) + ccc);
\r
96 nByteOffset &= 0xFFFF;
\r
97 bx = psini_ReadWord(nByteOffset);
\r
99 nByteOffset = bx + (y * 2) + anSelfModifyOffsets_ReadWord((3 * 84) + ccc);
\r
100 nByteOffset &= 0xFFFF;
\r
101 al += psini_ReadByte(nByteOffset);
\r
105 if ((ccc & 3) == 2)
\r
107 eax = (ah << 8) | (al << 0);
\r
111 if ((ccc & 3) == 0)
\r
113 eax |= (ah << 8) | (al << 0);
\r
115 VGA_WriteDword(nVgaYOffset + ccc, eax);
\r
123 int setplzparas(int c1, int c2, int c3, int c4)
\r
127 INCLUDE 'psini.inc'
\r
130 INCLUDE 'lsini4.inc'
\r
133 INCLUDE 'lsini16.inc'
\r
135 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
137 add ax, OFFSET psini+ccc*8
\r
138 mov [word (cs:lc1_&ccc)], ax
\r
141 add ax, OFFSET lsini16-ccc*8+80*8
\r
142 mov [word (cs:lc2_&ccc)], ax
\r
144 add ax, OFFSET psini-ccc*4+80*4
\r
145 mov [word (cs:lc3_&ccc)], ax
\r
148 add ax, OFFSET lsini4+ccc*32
\r
149 mov [word (cs:lc4_&ccc)], ax
\r
154 /* var psiniOffset = 0;
\r
155 var lsini16Offset = lsini16_GetOffset();
\r
156 var lsini4Offset = lsini4_GetOffset();
\r
158 for (var ccc = 0; ccc < 84; ccc++)
\r
160 var lc1 = c1 + psiniOffset + (ccc * 8);
\r
162 anSelfModifyOffsets_WriteWord((1 * 84) + ccc, lc1);
\r
164 var lc2 = (c2 * 2) + lsini16Offset - (ccc * 8) + (80 * 8);
\r
166 anSelfModifyOffsets_WriteWord((2 * 84) + ccc, lc2);
\r
168 var lc3 = c3 + psiniOffset - (ccc * 4) + (80 * 4);
\r
170 anSelfModifyOffsets_WriteWord((3 * 84) + ccc, lc3);
\r
172 var lc4 = (c4 * 2) + lsini4Offset + (ccc * 32);
\r
174 anSelfModifyOffsets_WriteWord((4 * 84) + ccc, lc4);
\r