--- np2/io/egc.c 2003/10/18 00:35:35 1.2 +++ np2/io/egc.c 2005/02/16 09:31:55 1.9 @@ -1,27 +1,27 @@ #include "compiler.h" -#include "memory.h" -#include "egcmem.h" +#include "cpucore.h" #include "pccore.h" #include "iocore.h" +#include "memegc.h" #include "vram.h" // エンディアン修正しる。 -const UINT32 maskword[16][2] = { - {0x00000000, 0x00000000}, {0x0000ffff, 0x00000000}, - {0xffff0000, 0x00000000}, {0xffffffff, 0x00000000}, - {0x00000000, 0x0000ffff}, {0x0000ffff, 0x0000ffff}, - {0xffff0000, 0x0000ffff}, {0xffffffff, 0x0000ffff}, - {0x00000000, 0xffff0000}, {0x0000ffff, 0xffff0000}, - {0xffff0000, 0xffff0000}, {0xffffffff, 0xffff0000}, - {0x00000000, 0xffffffff}, {0x0000ffff, 0xffffffff}, - {0xffff0000, 0xffffffff}, {0xffffffff, 0xffffffff}}; +static const UINT16 maskword[16][4] = { + {0x0000,0x0000,0x0000,0x0000}, {0xffff,0x0000,0x0000,0x0000}, + {0x0000,0xffff,0x0000,0x0000}, {0xffff,0xffff,0x0000,0x0000}, + {0x0000,0x0000,0xffff,0x0000}, {0xffff,0x0000,0xffff,0x0000}, + {0x0000,0xffff,0xffff,0x0000}, {0xffff,0xffff,0xffff,0x0000}, + {0x0000,0x0000,0x0000,0xffff}, {0xffff,0x0000,0x0000,0xffff}, + {0x0000,0xffff,0x0000,0xffff}, {0xffff,0xffff,0x0000,0xffff}, + {0x0000,0x0000,0xffff,0xffff}, {0xffff,0x0000,0xffff,0xffff}, + {0x0000,0xffff,0xffff,0xffff}, {0xffff,0xffff,0xffff,0xffff}}; -static void IOOUTCALL egc_o4a0(UINT port, BYTE value) { +static void IOOUTCALL egc_o4a0(UINT port, REG8 value) { - if (!(vramop.operate & VOP_EGCBIT)) { + if (!(vramop.operate & (1 << VOPBIT_EGC))) { return; } @@ -57,8 +57,8 @@ static void IOOUTCALL egc_o4a0(UINT port case 0x06: egc.fg &= 0xff00; egc.fg |= value; - egc.fgc.d[0] = maskword[value & 15][0]; - egc.fgc.d[1] = maskword[value & 15][1]; + egc.fgc.d[0] = *(UINT32 *)(maskword[value & 15] + 0); + egc.fgc.d[1] = *(UINT32 *)(maskword[value & 15] + 2); break; case 0x07: egc.fg &= 0x00ff; @@ -67,20 +67,20 @@ static void IOOUTCALL egc_o4a0(UINT port case 0x08: if (!(egc.fgbg & 0x6000)) { - egc.mask._b[EGCADDR_L] = value; + egc.mask._b[0] = value; } break; case 0x09: if (!(egc.fgbg & 0x6000)) { - egc.mask._b[EGCADDR_H] = value; + egc.mask._b[1] = value; } break; case 0x0a: egc.bg &= 0xff00; egc.bg |= value; - egc.bgc.d[0] = maskword[value & 15][0]; - egc.bgc.d[1] = maskword[value & 15][1]; + egc.bgc.d[0] = *(UINT32 *)(maskword[value & 15] + 0); + egc.bgc.d[1] = *(UINT32 *)(maskword[value & 15] + 2); break; case 0x0b: egc.bg &= 0x00ff; @@ -91,22 +91,26 @@ static void IOOUTCALL egc_o4a0(UINT port egc.sft &= 0xff00; egc.sft |= value; egcshift(); + egc.srcmask.w = 0xffff; break; case 0x0d: egc.sft &= 0x00ff; egc.sft |= value << 8; egcshift(); + egc.srcmask.w = 0xffff; break; case 0x0e: egc.leng &= 0xff00; egc.leng |= value; egcshift(); + egc.srcmask.w = 0xffff; break; case 0x0f: egc.leng &= 0x00ff; egc.leng |= value << 8; egcshift(); + egc.srcmask.w = 0xffff; break; } } @@ -119,6 +123,7 @@ void egc_reset(void) { egc.mask.w = 0xffff; egc.leng = 0x000f; egcshift(); + egc.srcmask.w = 0xffff; } void egc_bind(void) { @@ -130,9 +135,9 @@ void egc_bind(void) { } } -void IOOUTCALL egc_w16(UINT port, UINT16 value) { +void IOOUTCALL egc_w16(UINT port, REG16 value) { - if (!(vramop.operate & VOP_EGCBIT)) { + if (!(vramop.operate & (1 << VOPBIT_EGC))) { return; } @@ -152,8 +157,8 @@ void IOOUTCALL egc_w16(UINT port, UINT16 case 0x06: egc.fg = value; - egc.fgc.d[0] = maskword[value & 15][0]; - egc.fgc.d[1] = maskword[value & 15][1]; + egc.fgc.d[0] = *(UINT32 *)(maskword[value & 15] + 0); + egc.fgc.d[1] = *(UINT32 *)(maskword[value & 15] + 2); break; case 0x08: @@ -164,18 +169,20 @@ void IOOUTCALL egc_w16(UINT port, UINT16 case 0x0a: egc.bg = value; - egc.bgc.d[0] = maskword[value & 15][0]; - egc.bgc.d[1] = maskword[value & 15][1]; + egc.bgc.d[0] = *(UINT32 *)(maskword[value & 15] + 0); + egc.bgc.d[1] = *(UINT32 *)(maskword[value & 15] + 2); break; case 0x0c: egc.sft = value; egcshift(); + egc.srcmask.w = 0xffff; break; case 0x0e: egc.leng = value; egcshift(); + egc.srcmask.w = 0xffff; break; } }