2 SANYO PHC-25 Emulator 'ePHC-25'
3 SEIKO MAP-1010 Emulator 'eMAP-1010'
5 Author : Takeda.Toshiya
15 #define SET_BANK(s, e, w, r) { \
16 int sb = (s) >> 11, eb = (e) >> 11; \
17 for(int i = sb; i <= eb; i++) { \
21 wbank[i] = (w) + 0x800 * (i - sb); \
26 rbank[i] = (r) + 0x800 * (i - sb); \
31 void MEMORY::initialize()
33 memset(rom, 0xff, sizeof(rom));
34 memset(rdmy, 0xff, sizeof(rdmy));
37 FILEIO* fio = new FILEIO();
38 if(fio->Fopen(create_local_path(_T("BASIC.ROM")), FILEIO_READ_BINARY)) {
39 fio->Fread(rom, sizeof(rom), 1);
46 SET_BANK(0x0000, 0x5fff, wdmy, rom );
47 SET_BANK(0x6000, 0x77ff, vram, vram);
48 SET_BANK(0x7800, 0x7fff, wdmy, rdmy);
49 SET_BANK(0x8000, 0xffff, ram, ram );
51 SET_BANK(0x0000, 0x5fff, wdmy, rom );
52 SET_BANK(0x6000, 0x77ff, vram, vram);
53 SET_BANK(0x7800, 0xbfff, wdmy, rdmy);
54 SET_BANK(0xc000, 0xffff, ram, ram );
60 memset(ram, 0, sizeof(ram));
61 memset(vram, 0, sizeof(vram));
64 void MEMORY::write_data8(uint32_t addr, uint32_t data)
68 if(0x7800 <= addr && addr < 0x8000) {
73 wbank[addr >> 11][addr & 0x7ff] = data;
76 uint32_t MEMORY::read_data8(uint32_t addr)
80 if(0x7800 <= addr && addr < 0x7860) {
81 return d_kbd->read_io8(addr);
82 } else if(0x7860 <= addr && addr < 0x8000) {
87 return rbank[addr >> 11][addr & 0x7ff];
90 #define STATE_VERSION 1
92 bool MEMORY::process_state(FILEIO* state_fio, bool loading)
94 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
97 if(!state_fio->StateCheckInt32(this_device_id)) {
100 state_fio->StateBuffer(ram, sizeof(ram), 1);
101 state_fio->StateBuffer(vram, sizeof(vram), 1);