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