58 lines
1.6 KiB
C
58 lines
1.6 KiB
C
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////
|
||
|
|
// Mapper 20
|
||
|
|
class NES_mapper20 : public NES_mapper
|
||
|
|
{
|
||
|
|
friend void adopt_MPRD(SnssMapperBlock* block, NES* nes);
|
||
|
|
friend int extract_MPRD(SnssMapperBlock* block, NES* nes);
|
||
|
|
|
||
|
|
friend void adopt_ExMPRD(const char* fn, NES* nes);
|
||
|
|
friend void extract_ExMPRD(const char* fn, NES* nes);
|
||
|
|
|
||
|
|
public:
|
||
|
|
NES_mapper20(NES* parent) : NES_mapper(parent) {}
|
||
|
|
~NES_mapper20() {}
|
||
|
|
|
||
|
|
void Reset();
|
||
|
|
uint8 MemoryReadLow(uint32 addr);
|
||
|
|
void MemoryWriteLow(uint32 addr, uint8 data);
|
||
|
|
void MemoryWriteSaveRAM(uint32 addr, uint8 data);
|
||
|
|
void MemoryWrite(uint32 addr, uint8 data);
|
||
|
|
void HSync(uint32 scanline);
|
||
|
|
void VSync();
|
||
|
|
|
||
|
|
uint8 GetDiskSideNum() { return ROM_banks[4]; }
|
||
|
|
uint8 GetDiskSide() { return current_side; }
|
||
|
|
void SetDiskSide(uint8 side) { if(side <= ROM_banks[4]) {current_side = side; insert_wait = 0;} }
|
||
|
|
uint8 GetDiskData(uint32 pt) { return disk[pt]; }
|
||
|
|
void SetDiskData(uint32 pt, uint8 data) { disk[pt] = data; }
|
||
|
|
uint8 DiskAccessed() { uint8 retval = access_flag; access_flag = 0; return retval; }
|
||
|
|
|
||
|
|
protected:
|
||
|
|
uint8 bios[0x2000];
|
||
|
|
uint8 wram[0x8000];
|
||
|
|
uint8 disk[0x40000];
|
||
|
|
|
||
|
|
uint8 irq_enabled;
|
||
|
|
uint32 irq_counter;
|
||
|
|
uint32 irq_latch;
|
||
|
|
uint8 irq_wait;
|
||
|
|
|
||
|
|
uint8 disk_enabled;
|
||
|
|
uint32 head_position;
|
||
|
|
uint8 write_skip;
|
||
|
|
uint8 disk_status;
|
||
|
|
uint8 write_reg;
|
||
|
|
uint8 current_side;
|
||
|
|
|
||
|
|
uint8 access_flag;
|
||
|
|
uint8 last_side;
|
||
|
|
uint8 insert_wait;
|
||
|
|
|
||
|
|
void SNSS_fixup();
|
||
|
|
|
||
|
|
private:
|
||
|
|
};
|
||
|
|
/////////////////////////////////////////////////////////////////////
|
||
|
|
|