]> 4ch.mooo.com Git - plz.git/blob - asmyt._c_
wwww
[plz.git] / asmyt._c_
1 #include "asmyt.h"\r
2 // __asm{\r
3 // PUBLIC C plzline, C setplzparas, C psini, C lsini4, C lsini16\r
4 //\r
5 // LABEL psini BYTE\r
6 // INCLUDE 'psini.inc'\r
7 // ;       db      16384 dup(?)\r
8 //\r
9 // LABEL lsini4 WORD\r
10 // INCLUDE 'lsini4.inc'\r
11 // ;       db      16384 dup(?)\r
12 //\r
13 // LABEL lsini16 WORD\r
14 // INCLUDE 'lsini16.inc'\r
15 // ;       db      16384 dup(?)\r
16 // }\r
17 \r
18 word anSelfModifyOffsets[5*84];\r
19 \r
20 //int ccc;\r
21 \r
22 void lsini4_WriteWord(nIndex, nValue)\r
23 {\r
24         word nByteOffset = lsini4_GetOffset() + (nIndex * 2);\r
25         psini_WriteWord(nByteOffset, nValue);\r
26 }\r
27 \r
28 void lsini16_WriteWord(word nIndex, word nValue)\r
29 {\r
30         word nByteOffset = lsini16_GetOffset() + (nIndex * 2);\r
31         psini_WriteWord(nByteOffset, nValue);\r
32 }\r
33 \r
34 void anSelfModifyOffsets_WriteWord(word nOffset, word nValue)\r
35 {\r
36         anSelfModifyOffsets[nOffset] = nValue;\r
37 }\r
38 \r
39 word set_plzstart(word start)\r
40 {\r
41 __asm{\r
42         mov     dx, 3d4h\r
43         mov     al, 18h         ; linecompare\r
44         mov     ah, [Byte PTR start]\r
45         out     dx, ax\r
46         mov     al, 07h\r
47         mov     ah, [Byte PTR start+1]\r
48         shl     ah, 1d\r
49         shl     ah, 1d\r
50         shl     ah, 1d\r
51         shl     ah, 1d\r
52         and     ah, 10h\r
53         or      ah, 0fh\r
54         out     dx, ax                  ; 8th bit\r
55 }\r
56         return start;\r
57 }\r
58 /*\r
59 int plzline(int y, int vseg)\r
60 {\r
61         // vseg represented a segment, so multiply by sixteen (shift left by 4)\r
62         // to convert into an offset.\r
63         var nVgaYOffset = vseg * 16;\r
64 \r
65         var cccTable =\r
66         [\r
67                 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
68         ];\r
69         var nCount = 84;\r
70 \r
71         var ah = 0;\r
72         var al = 0;\r
73         var eax = 0;\r
74 \r
75         for (var nIndex = 0; nIndex < nCount; nIndex++)\r
76         {\r
77                 var ccc = cccTable[nIndex];\r
78 \r
79                 if ((ccc & 1) == 1)\r
80                 {\r
81                         var nByteOffset = 0;\r
82                         var bx = 0;\r
83 \r
84                         nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((2 * 84) + ccc);\r
85                         nByteOffset &= 0xFFFF;\r
86                         bx = psini_ReadWord(nByteOffset);\r
87 \r
88                         nByteOffset = bx + anSelfModifyOffsets_ReadWord((1 * 84) + ccc);\r
89                         nByteOffset &= 0xFFFF;\r
90                         ah = psini_ReadByte(nByteOffset);\r
91 \r
92                         nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((4 * 84) + ccc);\r
93                         nByteOffset &= 0xFFFF;\r
94                         bx = psini_ReadWord(nByteOffset);\r
95 \r
96                         nByteOffset = bx + (y * 2) + anSelfModifyOffsets_ReadWord((3 * 84) + ccc);\r
97                         nByteOffset &= 0xFFFF;\r
98                         ah += psini_ReadByte(nByteOffset);\r
99                         ah &= 0xFF;\r
100                 }\r
101                 else\r
102                 {\r
103                         var nByteOffset = 0;\r
104                         var bx = 0;\r
105 \r
106                         nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((2 * 84) + ccc);\r
107                         nByteOffset &= 0xFFFF;\r
108                         bx = psini_ReadWord(nByteOffset);\r
109 \r
110                         nByteOffset = bx + anSelfModifyOffsets_ReadWord((1 * 84) + ccc);\r
111                         nByteOffset &= 0xFFFF;\r
112                         al = psini_ReadByte(nByteOffset);\r
113 \r
114                         nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((4 * 84) + ccc);\r
115                         nByteOffset &= 0xFFFF;\r
116                         bx = psini_ReadWord(nByteOffset);\r
117 \r
118                         nByteOffset = bx + (y * 2) + anSelfModifyOffsets_ReadWord((3 * 84) + ccc);\r
119                         nByteOffset &= 0xFFFF;\r
120                         al += psini_ReadByte(nByteOffset);\r
121                         al &= 0xFF;\r
122                 }\r
123 \r
124                 if ((ccc & 3) == 2)\r
125                 {\r
126                         eax = (ah << 8) | (al << 0);\r
127                         eax <<= 16;\r
128                 }\r
129 \r
130                 if ((ccc & 3) == 0)\r
131                 {\r
132                         eax |= (ah << 8) | (al << 0);\r
133 \r
134                         VGA_WriteDword(nVgaYOffset + ccc, eax);\r
135                 }\r
136         }\r
137 \r
138         return 0;\r
139 }\r
140 \r
141 */\r
142 int setplzparas(int c1, int c2, int c3, int c4)\r
143 {\r
144 //      static word psini;\r
145 //      static word lsini4;\r
146 //      static word lsini16;\r
147 /*      __asm{\r
148 psini WORD .LABEL\r
149 'psini.inc' INCLUDE\r
150 \r
151 lsini4 WORD .LABEL\r
152 'lsini4.inc' INCLUDE\r
153 \r
154 lsini16 WORD .LABEL\r
155 'lsini16.inc' INCLUDE\r
156 \r
157                 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
158                 mov     ax, [c1]\r
159                 add     ax, OFFSET psini+ccc*8\r
160                 mov     [word (cs:lc1_&ccc)], ax\r
161                 mov     ax, [c2]\r
162                 shl     ax, 1d\r
163                 add     ax, OFFSET lsini16-ccc*8+80*8\r
164                 mov     [word (cs:lc2_&ccc)], ax\r
165                 mov     ax, [c3]\r
166                 add     ax, OFFSET psini-ccc*4+80*4\r
167                 mov     [word (cs:lc3_&ccc)], ax\r
168                 mov     ax, [c4]\r
169                 shl     ax, 1d\r
170                 add     ax, OFFSET lsini4+ccc*32\r
171                 mov     [word (cs:lc4_&ccc)], ax\r
172                 ENDM\r
173                 ret\r
174         }*/\r
175         word psiniOffset = 0;\r
176         word lsini16Offset = lsini16_GetOffset();\r
177         word lsini4Offset = lsini4_GetOffset();\r
178         word ccc;\r
179         word lc1, lc2, lc3, lc4;\r
180 \r
181         for (ccc=0; ccc < 84; ccc++)\r
182         {\r
183                 word lc1 = c1 + psiniOffset + (ccc * 8);\r
184                 lc1 &= 0xFFFF;\r
185                 anSelfModifyOffsets_WriteWord((1 * 84) + ccc, lc1);\r
186 \r
187                 lc2 = (c2 * 2) + lsini16Offset - (ccc * 8) + (80 * 8);\r
188                 lc2 &= 0xFFFF;\r
189                 anSelfModifyOffsets_WriteWord((2 * 84) + ccc, lc2);\r
190 \r
191                 lc3 = c3 + psiniOffset - (ccc * 4) + (80 * 4);\r
192                 lc3 &= 0xFFFF;\r
193                 anSelfModifyOffsets_WriteWord((3 * 84) + ccc, lc3);\r
194 \r
195                 lc4 = (c4 * 2) + lsini4Offset + (ccc * 32);\r
196                 lc4 &= 0xFFFF;\r
197                 anSelfModifyOffsets_WriteWord((4 * 84) + ccc, lc4);\r
198         }\r
199         return 0;\r
200 }\r