]> 4ch.mooo.com Git - plz.git/blob - asmyt.c
f06b7af698a5a846167a0fde37c49b7d8d9dc4e6
[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 set_plzstart(word start)\r
19 {\r
20 __asm{\r
21         mov     dx, 3d4h\r
22         mov     al, 18h         ; linecompare\r
23         mov     ah, [Byte PTR start]\r
24         out     dx, ax\r
25         mov     al, 07h\r
26         mov     ah, [Byte PTR start+1]\r
27         shl     ah, 1d\r
28         shl     ah, 1d\r
29         shl     ah, 1d\r
30         shl     ah, 1d\r
31         and     ah, 10h\r
32         or      ah, 0fh\r
33         out     dx, ax                  ; 8th bit\r
34 }\r
35         return start;\r
36 }\r
37 /*\r
38 function plzline(y, vseg)\r
39 {\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
43 \r
44         var cccTable =\r
45         [\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
47         ];\r
48         var nCount = 84;\r
49 \r
50         var ah = 0;\r
51         var al = 0;\r
52         var eax = 0;\r
53 \r
54         for (var nIndex = 0; nIndex < nCount; nIndex++)\r
55         {\r
56                 var ccc = cccTable[nIndex];\r
57 \r
58                 if ((ccc & 1) == 1)\r
59                 {\r
60                         var nByteOffset = 0;\r
61                         var bx = 0;\r
62 \r
63                         nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((2 * 84) + ccc);\r
64                         nByteOffset &= 0xFFFF;\r
65                         bx = psini_ReadWord(nByteOffset);\r
66 \r
67                         nByteOffset = bx + anSelfModifyOffsets_ReadWord((1 * 84) + ccc);\r
68                         nByteOffset &= 0xFFFF;\r
69                         ah = psini_ReadByte(nByteOffset);\r
70 \r
71                         nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((4 * 84) + ccc);\r
72                         nByteOffset &= 0xFFFF;\r
73                         bx = psini_ReadWord(nByteOffset);\r
74 \r
75                         nByteOffset = bx + (y * 2) + anSelfModifyOffsets_ReadWord((3 * 84) + ccc);\r
76                         nByteOffset &= 0xFFFF;\r
77                         ah += psini_ReadByte(nByteOffset);\r
78                         ah &= 0xFF;\r
79                 }\r
80                 else\r
81                 {\r
82                         var nByteOffset = 0;\r
83                         var bx = 0;\r
84 \r
85                         nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((2 * 84) + ccc);\r
86                         nByteOffset &= 0xFFFF;\r
87                         bx = psini_ReadWord(nByteOffset);\r
88 \r
89                         nByteOffset = bx + anSelfModifyOffsets_ReadWord((1 * 84) + ccc);\r
90                         nByteOffset &= 0xFFFF;\r
91                         al = psini_ReadByte(nByteOffset);\r
92 \r
93                         nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((4 * 84) + ccc);\r
94                         nByteOffset &= 0xFFFF;\r
95                         bx = psini_ReadWord(nByteOffset);\r
96 \r
97                         nByteOffset = bx + (y * 2) + anSelfModifyOffsets_ReadWord((3 * 84) + ccc);\r
98                         nByteOffset &= 0xFFFF;\r
99                         al += psini_ReadByte(nByteOffset);\r
100                         al &= 0xFF;\r
101                 }\r
102 \r
103                 if ((ccc & 3) == 2)\r
104                 {\r
105                         eax = (ah << 8) | (al << 0);\r
106                         eax <<= 16;\r
107                 }\r
108 \r
109                 if ((ccc & 3) == 0)\r
110                 {\r
111                         eax |= (ah << 8) | (al << 0);\r
112 \r
113                         VGA_WriteDword(nVgaYOffset + ccc, eax);\r
114                 }\r
115         }\r
116 \r
117         return 0;\r
118 }\r
119 \r
120 function setplzparas(c1, c2, c3, c4)\r
121 {\r
122         var psiniOffset = 0;\r
123         var lsini16Offset = lsini16_GetOffset();\r
124         var lsini4Offset = lsini4_GetOffset();\r
125 \r
126         for (var ccc = 0; ccc < 84; ccc++)\r
127         {\r
128                 var lc1 = c1 + psiniOffset + (ccc * 8);\r
129                 lc1 &= 0xFFFF;\r
130                 anSelfModifyOffsets_WriteWord((1 * 84) + ccc, lc1);\r
131 \r
132                 var lc2 = (c2 * 2) + lsini16Offset - (ccc * 8) + (80 * 8);\r
133                 lc2 &= 0xFFFF;\r
134                 anSelfModifyOffsets_WriteWord((2 * 84) + ccc, lc2);\r
135 \r
136                 var lc3 = c3 + psiniOffset - (ccc * 4) + (80 * 4);\r
137                 lc3 &= 0xFFFF;\r
138                 anSelfModifyOffsets_WriteWord((3 * 84) + ccc, lc3);\r
139 \r
140                 var lc4 = (c4 * 2) + lsini4Offset + (ccc * 32);\r
141                 lc4 &= 0xFFFF;\r
142                 anSelfModifyOffsets_WriteWord((4 * 84) + ccc, lc4);\r
143         }\r
144 \r
145         return 0;\r
146 }*/\r