Add ReadWord, ReadLong, WriteWord, and WriteLong to nec/Vez

This commit is contained in:
iq_132 2014-09-12 04:57:10 +00:00
parent bf9b7bf001
commit f0abebd206
2 changed files with 81 additions and 0 deletions

View File

@ -143,6 +143,80 @@ void cpu_writemem20(UINT32 a, UINT8 d)
VezCurrentCPU->WriteHandler(a, d);
}
void VezWriteByte(UINT32 a, UINT8 d)
{
a &= 0xFFFFF;
UINT8 * p = VezCurrentCPU->ppMemWrite[ a >> VEZ_MEM_SHIFT ];
if ( p )
*(p + a) = d;
else
VezCurrentCPU->WriteHandler(a, d);
}
void VezWriteWord(UINT32 a, UINT16 d)
{
a &= 0xFFFFF;
UINT16 * p = (UINT16*)VezCurrentCPU->ppMemWrite[ a >> VEZ_MEM_SHIFT ];
if ( p )
*(p + (a / 2)) = d;
else {
VezCurrentCPU->WriteHandler(a, d);
VezCurrentCPU->WriteHandler(a+1, d >> 8);
}
}
void VezWriteLong(UINT32 a, UINT32 d)
{
a &= 0xFFFFF;
UINT32 * p = (UINT32*)VezCurrentCPU->ppMemWrite[ a >> VEZ_MEM_SHIFT ];
if ( p )
*(p + (a / 4)) = d;
else {
VezCurrentCPU->WriteHandler(a, d);
VezCurrentCPU->WriteHandler(a+1, d >> 8);
VezCurrentCPU->WriteHandler(a+2, d >> 16);
VezCurrentCPU->WriteHandler(a+3, d >> 24);
}
}
UINT8 VezReadByte(UINT32 a)
{
a &= 0xFFFFF;
UINT8 * p = VezCurrentCPU->ppMemRead[ a >> VEZ_MEM_SHIFT ];
if ( p )
return *(p + a);
else
return VezCurrentCPU->ReadHandler(a);
}
UINT16 VezReadWord(UINT32 a)
{
a &= 0xFFFFF;
UINT16 * p = (UINT16*)VezCurrentCPU->ppMemRead[ a >> VEZ_MEM_SHIFT ];
if ( p )
return *(p + (a / 2));
else
return VezCurrentCPU->ReadHandler(a) + (VezCurrentCPU->ReadHandler(a+1) * 0x100);
}
UINT32 VezReadLong(UINT32 a)
{
a &= 0xFFFFF;
UINT32 * p = (UINT32*)VezCurrentCPU->ppMemRead[ a >> VEZ_MEM_SHIFT ];
if ( p )
return *(p + (a / 4));
else
return VezCurrentCPU->ReadHandler(a) + (VezCurrentCPU->ReadHandler(a+1) * 0x100) +
(VezCurrentCPU->ReadHandler(a+2) * 0x10000) + (VezCurrentCPU->ReadHandler(a+3) * 0x1000000);
}
static void VezCheatWrite(UINT32 a, UINT8 d)
{
a &= 0xfffff;

View File

@ -37,6 +37,13 @@ INT32 VezMapArea(INT32 nStart, INT32 nEnd, INT32 nMode, UINT8 *Mem1, UINT8 *Mem2
void VezSetReadHandler(UINT8 (__fastcall*)(UINT32));
void VezSetWriteHandler(void (__fastcall*)(UINT32, UINT8));
void VezWriteByte(UINT32 a, UINT8 d);
void VezWriteWord(UINT32 a, UINT16 d);
void VezWriteLong(UINT32 a, UINT32 d);
UINT8 VezReadByte(UINT32 a);
UINT16 VezReadWord(UINT32 a);
UINT32 VezReadLong(UINT32 a);
#define V25_PORT_P0 0x10000
#define V25_PORT_P1 0x10002
#define V25_PORT_P2 0x10004