commodore64- fix VIC character memory addressing

This commit is contained in:
saxxonpike 2012-11-06 18:13:48 +00:00
parent d1613d2cb5
commit 7d68c5b518
1 changed files with 18 additions and 4 deletions

View File

@ -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];
} }
} }