1 ////////////////////////////////////////////////// 2 // // 3 // Emu64 // 4 // von Thorsten Kattanek // 5 // // 6 // #file: mmu_class.h // 7 // // 8 // Dieser Sourcecode ist Copyright geschützt! // 9 // Geistiges Eigentum von Th.Kattanek // 10 // // 11 // Letzte Änderung am 13.09.2019 // 12 // www.emu64.de // 13 // // 14 ////////////////////////////////////////////////// 15 16 #ifndef MMU_CLASS_H 17 #define MMU_CLASS_H 18 19 #include <functional> 20 21 #include "./structs.h" 22 #include "./mos6510_class.h" 23 24 class MMU 25 { 26 public: 27 /// Funktionen /// 28 MMU(void); 29 ~MMU(void); 30 void Reset(); 31 32 void ChangeMemMap(void); 33 unsigned char* GetFarbramPointer(void); 34 unsigned char* GetRAMPointer(void); 35 bool LoadKernalRom(const char *filename); 36 bool LoadBasicRom(const char *filename); 37 bool LoadCharRom(const char *filename); 38 unsigned char GetReadSource(unsigned char page); 39 unsigned char GetWriteDestination(unsigned char page); 40 //bool SaveFreez(FILE* File); 41 //bool LoadFreez(FILE *File,unsigned short Version); 42 /// Variablen /// 43 44 MOS6510_PORT *CPU_PORT; 45 46 // Zeiger für Read / Write Funktionen /// 47 // Diese werden Teilweise Intern und Extern gesetzt /// 48 // Ein Aufruf erfolg immer ohne Überprüfung auf gültigen Zeiger !!! // 49 50 std::function<unsigned char(unsigned short)> CPUReadProcTbl[0x100]; 51 std::function<void(unsigned short,unsigned char)> CPUWriteProcTbl[0x100]; 52 std::function<unsigned char(unsigned short)> VICReadProcTbl[0x100]; 53 54 std::function<unsigned char(unsigned short)>* GetCPUReadProcTable; 55 std::function<unsigned char(unsigned short)>* GetVICReadProcTable; 56 std::function<void(unsigned short, unsigned char)>* GetCPUWriteProcTable(); 57 std::function<void(unsigned short,unsigned char)> VicIOWriteProc; 58 std::function<void(unsigned short,unsigned char)> SidIOWriteProc; 59 std::function<void(unsigned short,unsigned char)> Cia1IOWriteProc; 60 std::function<void(unsigned short,unsigned char)> Cia2IOWriteProc; 61 std::function<void(unsigned short,unsigned char)> IO1WriteProc; 62 std::function<void(unsigned short,unsigned char)> IO2WriteProc; 63 std::function<void(unsigned short,unsigned char)> CRTRom1WriteProc; 64 std::function<void(unsigned short,unsigned char)> CRTRom2WriteProc; 65 std::function<void(unsigned short,unsigned char)> CRTRom3WriteProc; 66 std::function<unsigned char(unsigned short)> CRTRom1ReadProc; 67 std::function<unsigned char(unsigned short)> CRTRom2ReadProc; 68 std::function<unsigned char(unsigned short)> CRTRom3ReadProc; 69 std::function<unsigned char(unsigned short)> VicIOReadProc; 70 std::function<unsigned char(unsigned short)> SidIOReadProc; 71 std::function<unsigned char(unsigned short)> Cia1IOReadProc; 72 std::function<unsigned char(unsigned short)> Cia2IOReadProc; 73 std::function<unsigned char(unsigned short)> IO1ReadProc; 74 std::function<unsigned char(unsigned short)> IO2ReadProc; 75 76 bool *GAME; 77 bool *EXROM; 78 bool *RAM_H; 79 bool *RAM_L; 80 81 unsigned char MEMORY_MAP; 82 unsigned char MEMORY_MAP_OLD; 83 84 bool *EasyFlashDirty1; 85 unsigned char *EasyFlashByte1; 86 bool *EasyFlashDirty2; 87 unsigned char *EasyFlashByte2; 88 89 private: 90 /// Funktionen /// 91 void InitProcTables(void); 92 unsigned char ReadZeroPage(unsigned short adresse); 93 void WriteZeroPage(unsigned short adresse, unsigned char wert); 94 unsigned char ReadRam(unsigned short adresse); 95 void WriteRam(unsigned short adresse, unsigned char wert); 96 unsigned char ReadFarbRam(unsigned short adresse); 97 void WriteFarbRam(unsigned short adresse, unsigned char wert); 98 unsigned char ReadKernalRom(unsigned short adresse); 99 unsigned char ReadBasicRom(unsigned short adresse); 100 unsigned char ReadCharRom(unsigned short adresse); 101 unsigned char ReadCRT1(unsigned short adresse); 102 void WriteCRT1(unsigned short adresse, unsigned char wert); 103 unsigned char ReadCRT2(unsigned short adresse); 104 void WriteCRT2(unsigned short adresse, unsigned char wert); 105 unsigned char ReadCRT3(unsigned short adresse); 106 void WriteCRT3(unsigned short adresse, unsigned char wert); 107 unsigned char ReadVicCharRomBank0(unsigned short adresse); 108 unsigned char ReadVicCharRomBank2(unsigned short adresse); 109 unsigned char ReadVicRam(unsigned short adresse); 110 unsigned char ReadOpenAdress(unsigned short adresse); 111 void WriteOpenAdress(unsigned short adresse, unsigned char wert); 112 113 /// Variablen /// 114 unsigned char RAM[0x10000]; // 64KB 115 unsigned char BASIC_ROM[0x2000]; // 8KB ab 0xA000 116 unsigned char CHAR_ROM[0x1000]; // 4KB ab 0xD000 117 unsigned char FARB_RAM[0x0400]; // 1KB ab 0xD800 118 unsigned char KERNAL_ROM[0x2000]; // 8KB ab 0xE000 119 120 /// AktMemoryMap Visuall /// 121 unsigned char MapReadSource[0x100]; 122 unsigned char MapWriteDestination[0x100]; 123 }; 124 #endif // MMU_CLASS_H 125