public short ReadWord(int address) { address &= 0x00FFFFFF; int maskedAddr; if (address < 0x400000) { return((short)((RomData[address] << 8) | RomData[address + 1])); } if (address >= 0xE00000) // Work RAM { maskedAddr = address & 0xFFFE; return((short)((Ram[maskedAddr] << 8) | Ram[maskedAddr + 1])); } if (address >= 0xC00000 && address < 0xC00010) { return((short)VDP.ReadVdp(address & 0x0E)); } if (address >= 0xA10000 && address <= 0xA1001F) { return((sbyte)ReadIO(address)); } if (address == 0xA11100) // Z80 BUS status { return((short)(M68000HasZ80Bus && Z80Reset == false ? 0x0000 : 0x0100)); } Console.WriteLine("UNHANDLED READW {0:X6}", address); return(0x7DCD); }
public sbyte ReadByte(int address) { address &= 0x00FFFFFF; if (address < 0x200000) { return((sbyte)RomData[address]); } if (address < 0x400000) { if (SaveRamEnabled && address >= SaveRamStartOffset && address < SaveRamEndOffset) { if (SaveRamEveryOtherByte) { return((sbyte)SaveRAM[(address - SaveRamStartOffset) >> 1]); } else { return((sbyte)SaveRAM[address - SaveRamStartOffset]); } } return((sbyte)RomData[address]); } if (address >= 0xE00000) { return((sbyte)Ram[address & 0xFFFF]); } if (address == 0xA11100) // Z80 BUS status { //Console.WriteLine("QUERY z80 bus status. 68000 can access? " + (M68000HasZ80Bus && Z80Reset == false)); return((sbyte)(M68000HasZ80Bus && Z80Reset == false ? 0 : 1)); } if (address >= 0xA10000 && address <= 0xA1001F) { return((sbyte)ReadIO(address)); } if ((address & 0xFF0000) == 0xA00000) { return((sbyte)ReadMemoryZ80((ushort)(address & 0x7FFF))); } if (address >= 0xC00000 && address < 0xC00010) { //Console.WriteLine("byte-reading the VDP. someone is probably stupid."); ushort value = VDP.ReadVdp(address & 0x0E); if ((address & 1) == 0) // read MSB { return((sbyte)(value >> 8)); } return((sbyte)value); // read LSB } Console.WriteLine("UNHANDLED READB {0:X6}", address); return(0x7D); }