commodore64- fix VIC character memory addressing
This commit is contained in:
parent
d1613d2cb5
commit
7d68c5b518
|
@ -60,7 +60,6 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
||||||
public byte cia2B;
|
public byte cia2B;
|
||||||
public byte[] colorRam;
|
public byte[] colorRam;
|
||||||
public byte[] ram;
|
public byte[] ram;
|
||||||
public ushort vicOffset;
|
|
||||||
|
|
||||||
// registers
|
// registers
|
||||||
public byte busData;
|
public byte busData;
|
||||||
|
@ -440,15 +439,30 @@ namespace BizHawk.Emulation.Computers.Commodore64
|
||||||
|
|
||||||
public byte VicRead(ushort addr)
|
public byte VicRead(ushort addr)
|
||||||
{
|
{
|
||||||
addr = (ushort)(addr & 0x1FFF);
|
addr = (ushort)(addr & 0x3FFF);
|
||||||
if (addr >= 0x1000 && addr < 0x2000)
|
if (addr >= 0x1000 && addr < 0x2000)
|
||||||
{
|
{
|
||||||
return charRom[addr & 0x0FFF];
|
return charRom[addr & 0x0FFF];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int baseAddr = (3 - (cia1PortA.Data & 0x03)) << 14;
|
int baseAddr = 0;
|
||||||
return ram[addr | baseAddr];
|
switch (cia1PortA.Data & 0x03)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
baseAddr = 0xC000 | addr;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
baseAddr = 0x8000 | addr;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
baseAddr = 0x4000 | addr;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
baseAddr = addr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ram[(ushort)baseAddr];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue