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 set_plzstart(word start)
\r
22 mov al, 18h ; linecompare
\r
23 mov ah, [Byte PTR start]
\r
26 mov ah, [Byte PTR start+1]
\r
33 out dx, ax ; 8th bit
\r
38 function plzline(y, vseg)
\r
40 // vseg represented a segment, so multiply by sixteen (shift left by 4)
\r
41 // to convert into an offset.
\r
42 var nVgaYOffset = vseg * 16;
\r
46 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
54 for (var nIndex = 0; nIndex < nCount; nIndex++)
\r
56 var ccc = cccTable[nIndex];
\r
60 var nByteOffset = 0;
\r
63 nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((2 * 84) + ccc);
\r
64 nByteOffset &= 0xFFFF;
\r
65 bx = psini_ReadWord(nByteOffset);
\r
67 nByteOffset = bx + anSelfModifyOffsets_ReadWord((1 * 84) + ccc);
\r
68 nByteOffset &= 0xFFFF;
\r
69 ah = psini_ReadByte(nByteOffset);
\r
71 nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((4 * 84) + ccc);
\r
72 nByteOffset &= 0xFFFF;
\r
73 bx = psini_ReadWord(nByteOffset);
\r
75 nByteOffset = bx + (y * 2) + anSelfModifyOffsets_ReadWord((3 * 84) + ccc);
\r
76 nByteOffset &= 0xFFFF;
\r
77 ah += psini_ReadByte(nByteOffset);
\r
82 var nByteOffset = 0;
\r
85 nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((2 * 84) + ccc);
\r
86 nByteOffset &= 0xFFFF;
\r
87 bx = psini_ReadWord(nByteOffset);
\r
89 nByteOffset = bx + anSelfModifyOffsets_ReadWord((1 * 84) + ccc);
\r
90 nByteOffset &= 0xFFFF;
\r
91 al = psini_ReadByte(nByteOffset);
\r
93 nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((4 * 84) + ccc);
\r
94 nByteOffset &= 0xFFFF;
\r
95 bx = psini_ReadWord(nByteOffset);
\r
97 nByteOffset = bx + (y * 2) + anSelfModifyOffsets_ReadWord((3 * 84) + ccc);
\r
98 nByteOffset &= 0xFFFF;
\r
99 al += psini_ReadByte(nByteOffset);
\r
103 if ((ccc & 3) == 2)
\r
105 eax = (ah << 8) | (al << 0);
\r
109 if ((ccc & 3) == 0)
\r
111 eax |= (ah << 8) | (al << 0);
\r
113 VGA_WriteDword(nVgaYOffset + ccc, eax);
\r
120 function setplzparas(c1, c2, c3, c4)
\r
122 var psiniOffset = 0;
\r
123 var lsini16Offset = lsini16_GetOffset();
\r
124 var lsini4Offset = lsini4_GetOffset();
\r
126 for (var ccc = 0; ccc < 84; ccc++)
\r
128 var lc1 = c1 + psiniOffset + (ccc * 8);
\r
130 anSelfModifyOffsets_WriteWord((1 * 84) + ccc, lc1);
\r
132 var lc2 = (c2 * 2) + lsini16Offset - (ccc * 8) + (80 * 8);
\r
134 anSelfModifyOffsets_WriteWord((2 * 84) + ccc, lc2);
\r
136 var lc3 = c3 + psiniOffset - (ccc * 4) + (80 * 4);
\r
138 anSelfModifyOffsets_WriteWord((3 * 84) + ccc, lc3);
\r
140 var lc4 = (c4 * 2) + lsini4Offset + (ccc * 32);
\r
142 anSelfModifyOffsets_WriteWord((4 * 84) + ccc, lc4);
\r