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