2 NEC N5200 Emulator 'eN5200'
\r
4 Author : Takeda.Toshiya
\r
11 #include "../../fileio.h"
\r
13 #define SET_BANK(s, e, w, r) { \
\r
14 int sb = (s) >> 11, eb = (e) >> 11; \
\r
15 for(int i = sb; i <= eb; i++) { \
\r
19 wbank[i] = (w) + 0x800 * (i - sb); \
\r
24 rbank[i] = (r) + 0x800 * (i - sb); \
\r
29 void MEMORY::initialize()
\r
32 memset(ram, 0, sizeof(ram));
\r
33 memset(exram, 0, sizeof(exram));
\r
34 memset(vram, 0, sizeof(vram));
\r
35 memset(tvram, 0, sizeof(tvram));
\r
36 memset(backup, 0, sizeof(backup));
\r
37 memset(ipl, 0xff, sizeof(ipl));
\r
38 memset(rdmy, 0xff, sizeof(rdmy));
\r
41 FILEIO* fio = new FILEIO();
\r
42 if(fio->Fopen(emu->bios_path(_T("IPL.ROM")), FILEIO_READ_BINARY)) {
\r
43 fio->Fread(ipl, sizeof(ipl), 1);
\r
45 for(int i = 0xa8e; i < 0xafc; i++) {
\r
52 void MEMORY::release()
\r
55 FILEIO* fio = new FILEIO();
\r
56 if(fio->Fopen(emu->bios_path(_T("TVRAM.BIN")), FILEIO_WRITE_BINARY)) {
\r
57 fio->Fwrite(tvram, sizeof(tvram), 1);
\r
63 void MEMORY::reset()
\r
65 SET_BANK(0x000000, 0xffffff, wdmy, rdmy);
\r
66 SET_BANK(0x000000, 0x0bffff, ram, ram);
\r
67 SET_BANK(0x0c0000, 0x0dffff, vram, vram); // ???
\r
68 SET_BANK(0x0e0000, 0x0e77ff, tvram, tvram);
\r
69 SET_BANK(0x0e7800, 0x0effff, backup, backup);
\r
70 SET_BANK(0x0f0000, 0x0fffff, wdmy, ipl);
\r
71 SET_BANK(0x100000, 0x1fffff, exram, exram);
\r
72 SET_BANK(0xff0000, 0xffffff, wdmy, ipl);
\r
77 void MEMORY::write_data8(uint32 addr, uint32 data)
\r
80 if(0xe7800 <= addr && addr < 0xf0000 && protect) {
\r
83 wbank[addr >> 11][addr & 0x7ff] = data;
\r
86 uint32 MEMORY::read_data8(uint32 addr)
\r
89 return rbank[addr >> 11][addr & 0x7ff];
\r
92 void MEMORY::write_io8(uint32 addr, uint32 data)
\r
96 protect = ((data & 1) != 0);
\r
101 uint32 MEMORY::read_io8(uint32 addr)
\r