Пример #1
0
        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);
        }
Пример #2
0
        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);
        }