X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=asmyt.c;h=4427c78941f202f9ca31d88c2461baf9528863bf;hb=bb9fe2bc82f2f7126bc7a9fde2b70bc67d17a8a9;hp=d906446b629b1536e30397c13a8fa174ee44f384;hpb=0cb0d7318ce5253197b6554553340ab1b2286417;p=plz.git diff --git a/asmyt.c b/asmyt.c index d906446..4427c78 100755 --- a/asmyt.c +++ b/asmyt.c @@ -1,17 +1,146 @@ #include "asmyt.h" -void set_plzstart(word start) +// __asm{ +// PUBLIC C plzline, C setplzparas, C psini, C lsini4, C lsini16 +// +// LABEL psini BYTE +// INCLUDE 'psini.inc' +// ; db 16384 dup(?) +// +// LABEL lsini4 WORD +// INCLUDE 'lsini4.inc' +// ; db 16384 dup(?) +// +// LABEL lsini16 WORD +// INCLUDE 'lsini16.inc' +// ; db 16384 dup(?) +// } + +word set_plzstart(word start) { __asm{ mov dx, 3d4h mov al, 18h ; linecompare - mov ah, [Byte start] + mov ah, [Byte PTR start] out dx, ax mov al, 07h - mov ah, [Byte start+1] - shl ah, 4d + mov ah, [Byte PTR start+1] + shl ah, 1d + shl ah, 1d + shl ah, 1d + shl ah, 1d and ah, 10h or ah, 0fh out dx, ax ; 8th bit } return start; } +/* +int plzline(int y, int vseg) +{ + // vseg represented a segment, so multiply by sixteen (shift left by 4) + // to convert into an offset. + var nVgaYOffset = vseg * 16; + + var cccTable = + [ + 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 + ]; + var nCount = 84; + + var ah = 0; + var al = 0; + var eax = 0; + + for (var nIndex = 0; nIndex < nCount; nIndex++) + { + var ccc = cccTable[nIndex]; + + if ((ccc & 1) == 1) + { + var nByteOffset = 0; + var bx = 0; + + nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((2 * 84) + ccc); + nByteOffset &= 0xFFFF; + bx = psini_ReadWord(nByteOffset); + + nByteOffset = bx + anSelfModifyOffsets_ReadWord((1 * 84) + ccc); + nByteOffset &= 0xFFFF; + ah = psini_ReadByte(nByteOffset); + + nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((4 * 84) + ccc); + nByteOffset &= 0xFFFF; + bx = psini_ReadWord(nByteOffset); + + nByteOffset = bx + (y * 2) + anSelfModifyOffsets_ReadWord((3 * 84) + ccc); + nByteOffset &= 0xFFFF; + ah += psini_ReadByte(nByteOffset); + ah &= 0xFF; + } + else + { + var nByteOffset = 0; + var bx = 0; + + nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((2 * 84) + ccc); + nByteOffset &= 0xFFFF; + bx = psini_ReadWord(nByteOffset); + + nByteOffset = bx + anSelfModifyOffsets_ReadWord((1 * 84) + ccc); + nByteOffset &= 0xFFFF; + al = psini_ReadByte(nByteOffset); + + nByteOffset = (y * 2) + anSelfModifyOffsets_ReadWord((4 * 84) + ccc); + nByteOffset &= 0xFFFF; + bx = psini_ReadWord(nByteOffset); + + nByteOffset = bx + (y * 2) + anSelfModifyOffsets_ReadWord((3 * 84) + ccc); + nByteOffset &= 0xFFFF; + al += psini_ReadByte(nByteOffset); + al &= 0xFF; + } + + if ((ccc & 3) == 2) + { + eax = (ah << 8) | (al << 0); + eax <<= 16; + } + + if ((ccc & 3) == 0) + { + eax |= (ah << 8) | (al << 0); + + VGA_WriteDword(nVgaYOffset + ccc, eax); + } + } + + return 0; +} + +int setplzparas(int c1, int c2, int c3, int c4) +{ + var psiniOffset = 0; + var lsini16Offset = lsini16_GetOffset(); + var lsini4Offset = lsini4_GetOffset(); + + for (var ccc = 0; ccc < 84; ccc++) + { + var lc1 = c1 + psiniOffset + (ccc * 8); + lc1 &= 0xFFFF; + anSelfModifyOffsets_WriteWord((1 * 84) + ccc, lc1); + + var lc2 = (c2 * 2) + lsini16Offset - (ccc * 8) + (80 * 8); + lc2 &= 0xFFFF; + anSelfModifyOffsets_WriteWord((2 * 84) + ccc, lc2); + + var lc3 = c3 + psiniOffset - (ccc * 4) + (80 * 4); + lc3 &= 0xFFFF; + anSelfModifyOffsets_WriteWord((3 * 84) + ccc, lc3); + + var lc4 = (c4 * 2) + lsini4Offset + (ccc * 32); + lc4 &= 0xFFFF; + anSelfModifyOffsets_WriteWord((4 * 84) + ccc, lc4); + } + + return 0; +}*/