예제 #1
0
        void InitEEPROMMapper()
        {
            ReadMemoryMapper  = ReadMemoryEEPROM;
            WriteMemoryMapper = WriteMemoryEEPROM;
            MapMemory         = MapMemoryEEPROM;
            WriteMemoryEEPROM(0xFFFC, 0);
            WriteMemoryEEPROM(0xFFFD, 0);
            WriteMemoryEEPROM(0xFFFE, 1);
            WriteMemoryEEPROM(0xFFFF, 2);

            EEPROM = new EEPROM93c46();
        }
예제 #2
0
        CDLog_MapResults MapMemoryEEPROM(ushort address, bool write)
        {
            if (address < 0xC000)
            {
                if ((Port3E & 0x48) == 0x48)                 // cart and bios disabled, return empty bus
                {
                    return(new CDLog_MapResults());
                }
                if (BiosMapped && BiosRom != null)
                {
                    return(new CDLog_MapResults());                    //bios tracking of CDL is not supported
                }
                if (address < 1024)
                {
                    return new CDLog_MapResults {
                               Type = CDLog_AddrType.ROM, Address = address
                    }
                }
                ;
                if (address < 0x4000)
                {
                    return new CDLog_MapResults {
                               Type = CDLog_AddrType.ROM, Address = (RomBank0 * BankSize) + address
                    }
                }
                ;
                if (address < 0x8000)
                {
                    return new CDLog_MapResults {
                               Type = CDLog_AddrType.ROM, Address = (RomBank1 * BankSize) + (address & BankSizeMask)
                    }
                }
                ;
                switch (SaveRamBank)
                {
                case 0: return(new CDLog_MapResults {
                        Type = CDLog_AddrType.ROM, Address = (RomBank2 * BankSize) + (address & BankSizeMask)
                    });

                case 1: return(new CDLog_MapResults());                        // a serial IO port

                case 2: return(new CDLog_MapResults());                        // a serial IO port

                default:
                    return(new CDLog_MapResults {
                        Type = CDLog_AddrType.MainRAM, Address = address & RamSizeMask
                    });
                }
            }

            return(new CDLog_MapResults {
                Type = CDLog_AddrType.MainRAM, Address = address & RamSizeMask
            });
        }

        void WriteMemoryEEPROM(ushort address, byte value)
        {
            if (address >= 0xC000)
            {
                SystemRam[address & RamSizeMask] = value;
            }

            else if (address >= 0x8000)
            {
                if (SaveRAM != null)
                {
                    SaveRamModified = true;
                    EEPROM.Write(value, SaveRAM);
                    return;
                }

                Console.WriteLine("Game attempt to use SRAM but SRAM not present");
            }

            if (address >= 0xFFFC)
            {
                if (address == 0xFFFC)
                {
                    if ((value & 8) != 0)
                    {
                        SaveRamBank = (byte)((value & 4) == 0 ? 1 : 2);                         // SaveRAM selected
                    }
                    else
                    {
                        SaveRamBank = 0;                         // ROM bank selected
                    }
                }
                else if (address == 0xFFFD)
                {
                    RomBank0 = (byte)(value % RomBanks);
                }
                else if (address == 0xFFFE)
                {
                    RomBank1 = (byte)(value % RomBanks);
                }
                else if (address == 0xFFFF)
                {
                    RomBank2 = (byte)(value % RomBanks);
                }
            }
        }

        void InitEEPROMMapper()
        {
            ReadMemoryMapper  = ReadMemoryEEPROM;
            WriteMemoryMapper = WriteMemoryEEPROM;
            MapMemory         = MapMemoryEEPROM;
            WriteMemoryEEPROM(0xFFFC, 0);
            WriteMemoryEEPROM(0xFFFD, 0);
            WriteMemoryEEPROM(0xFFFE, 1);
            WriteMemoryEEPROM(0xFFFF, 2);

            EEPROM = new EEPROM93c46();
        }
    }
}