OSCR
Open Source Cartridge Reader
Loading...
Searching...
No Matches
NES.h
1#pragma once
2#if !defined(OSCR_CORE_NES_H_)
3# define OSCR_CORE_NES_H_
4
5# include "config.h"
6
7# if HAS_NES
8# include "syslibinc.h"
9# include "common/Types.h"
10
11# define nesCRDB ((OSCR::Databases::NES *)cartCRDB)
12
13# define NES_MAPPER romDetail->mapper
14# define NES_SUBMAPPER romDetail->submapper
15# define NES_PRGSIZE romDetail->prgsize
16# define NES_PRG romDetail->prg
17# define NES_CHRSIZE romDetail->chrsize
18# define NES_CHR romDetail->chr
19# define NES_RAMSIZE romDetail->ramsize
20# define NES_RAM romDetail->ram
21# define NES_INES romDetail->iNES
22# define NES_NAME romDetail->name
23# define NES_NAME_SIZE 101
24
25# define NES_ROMSEL_HI PORTF |= (1 << 1)
26# define NES_ROMSEL_LOW PORTF &= ~(1 << 1)
27# define NES_PHI2_HI PORTF |= (1 << 0)
28# define NES_PHI2_LOW PORTF &= ~(1 << 0)
29# define NES_PRG_READ PORTF |= (1 << 7)
30# define NES_PRG_WRITE PORTF &= ~(1 << 7)
31# define NES_CHR_READ_HI PORTF |= (1 << 5)
32# define NES_CHR_READ_LOW PORTF &= ~(1 << 5)
33# define NES_CHR_WRITE_HI PORTF |= (1 << 2)
34# define NES_CHR_WRITE_LOW PORTF &= ~(1 << 2)
35
36# define NES_MODE_WRITE DDRK = 0xFF
37# define NES_MODE_READ \
38 { \
39 PORTK = 0xFF; \
40 DDRK = 0; \
41 }
42
47{
48 struct mapper_t
49 {
50 uint16_t mapper;
51 uint8_t prglo;
52 uint8_t prghi;
53 uint8_t chrlo;
54 uint8_t chrhi;
55 uint8_t ramlo;
56 uint8_t ramhi;
57 };
58
60 {
61 uint32_t mapper;
62 uint32_t submapper;
63 uint32_t prglo;
64 uint32_t prghi;
65 uint32_t chrlo;
66 uint32_t chrhi;
67 uint32_t ramlo;
68 uint32_t ramhi;
69 };
70
72 {
73 crc32_t crc32;
74 crc32_t id32a;
75 crc32_t id32b;
76 uint16_t mapper;
77 uint16_t submapper;
78 uint16_t prgsize;
79 uint16_t prg;
80 uint16_t chrsize;
81 uint16_t chr;
82 uint16_t ramsize;
83 uint8_t ram;
84 uint8_t iNES[16];
85 char name[101];
86 };
87
88 extern crdbNESRecord* romDetail;
89 extern crdbNESMapperRecord* mapperDetail;
90
91 void openCRDB();
92 void closeCRDB();
93
94 void cartOn();
95 void cartOff();
96
97 void printHeader();
98
99 void menu();
100 void dbBrowseMenu();
101
102 void chipMenu();
103
104 void readRom();
105 void readRaw();
106
107 uint8_t read_chr_byte(uint16_t address);
108 uint8_t read_prg_byte(uint16_t address);
109 void write_prg_byte(uint16_t address, uint8_t data);
110 void write_reg_byte(uint16_t address, uint8_t data);
111 void write_ram_byte(uint16_t address, uint8_t data);
112 void write_wram_byte(uint16_t address, uint8_t data);
113
114 void printNESSettings(void);
115
116 void getMapping();
117
118 //void read(char const * fileSuffix, uint8_t const * header, uint8_t headersize, bool renamerom);
119 void read(bool const renamerom);
120
121 void write_mmc1_byte(uint16_t address, uint8_t data);
122
123 void dumpPRG_pulsem2(uint16_t base, uint16_t address);
124 void dumpCHR_pulsem2(uint16_t address);
125
126 void CreateRAMFileInSD();
127
128 bool setMapper();
129 void checkMapperSize();
130
131 void setPRGSize();
132 void setCHRSize();
133 void setRAMSize();
134
135 void checkMMC6();
136 void checkStatus();
137
138 void dumpPRG(uint16_t base, uint16_t address);
139 void dumpCHR(uint16_t address);
140 void dumpCHR_M2(uint16_t address);
141 void dumpMMC5RAM(uint16_t base, uint16_t address);
142 void writeMMC5RAM(uint16_t base, uint16_t address);
143 void dumpBankPRG(size_t from, size_t to, size_t base);
144 void dumpBankCHR(size_t from, size_t to);
145 void readPRG(bool readrom);
146 void readCHR(bool readrom);
147 void readRAM();
148
149 void writeBankPRG(size_t from, size_t to, size_t base);
150 void writeBankWRAM(size_t from, size_t to, size_t base);
151 void writeRAM();
152
153 void eepromStart();
154 void eepromStop();
155 void eepromSet0();
156 void eepromSet1();
157 void eepromStatus();
158 void eepromReadData();
159 void eepromDevice();
160 void eepromReadMode();
161 void eepromWriteMode();
162 void eepromFinish();
163 void eepromSetAddress01(uint8_t address);
164 void eepromSetAddress02(uint8_t address);
165 void eepromWriteData01(uint8_t & data);
166 void eepromWriteData02(uint8_t & data);
167 void eepromRead(uint8_t address);
168 void eepromWrite(uint8_t address);
169
170# if defined(ENABLE_PINCONTROL)
171 uint8_t read_prg_byte(uint16_t address);
172 uint8_t read_chr_byte(uint16_t address);
173# else /* !ENABLE_PINCONTROL */
174 //
175# endif /* ENABLE_PINCONTROL */
176
177# if HAS_FLASH
178 void flashMenu();
179 void writeFlash();
180
181 void NESmaker_Cmd(uint8_t cmd);
182 void NESmaker_ID();
183 void NESmaker_SectorErase(uint8_t bank, uint16_t address);
184 void NESmaker_ByteProgram(uint8_t bank, uint16_t address, uint8_t data);
185 void NESmaker_ChipErase();
186
187 void A29040B_ID();
188 void A29040B_PRG_ResetFlash();
189 void A29040B_PRG_Write(uint16_t address, uint8_t data);
190 void A29040B_PRG_SectorErase(uint16_t sec);
191 void A29040B_PRG_ChipErase();
192 void A29040B_CHR_ResetFlash();
193 void A29040B_CHR_Write(uint16_t address, uint8_t data);
194 void A29040B_CHR_SectorErase(uint16_t sec);
195 void A29040B_CHR_ChipErase();
196 void A29040B_writeFlash();
197# endif /* HAS_FLASH */
198} /* namespace OSCR::Cores::NES */
199
200# endif /* HAS_NES */
201#endif /* OSCR_CORE_NES_H_ */
System core for the NES.
Definition NES.h:47
Definition NES.h:49
Interface for handling CRC32 values.
Definition crc32_t.h:14