2 NEC PC-9801VX Emulator 'ePC-9801VX'
3 NEC PC-9801RA Emulator 'ePC-9801RA'
4 NEC PC-98XA Emulator 'ePC-98XA'
5 NEC PC-98XL Emulator 'ePC-98XL'
6 NEC PC-98RL Emulator 'ePC-98RL'
8 Author : Takeda.Toshiya
17 static const int bank_lo_id[] = {
18 SIG_I8237_BANK1, SIG_I8237_BANK2, SIG_I8237_BANK3, SIG_I8237_BANK0,
20 static const int bank_hi_id[] = {
21 SIG_I8237_BANK0, SIG_I8237_BANK1, SIG_I8237_BANK2, SIG_I8237_BANK3,
23 static const int mask_id[] = {
24 SIG_I8237_MASK0, SIG_I8237_MASK1, SIG_I8237_MASK2, SIG_I8237_MASK3,
27 void DMAREG::write_io8(uint32_t addr, uint32_t data)
34 #if defined(SUPPORT_32BIT_ADDRESS)
35 d_dma->write_signal(bank_lo_id[((addr - 0x0021) >> 1) & 3], data & 0xff, 0x00ff);
36 #elif defined(_PC98XA)
37 d_dma->write_signal(bank_lo_id[((addr - 0x0021) >> 1) & 3], data & 0x7f, 0x00ff);
38 #elif defined(SUPPORT_24BIT_ADDRESS)
39 d_dma->write_signal(bank_lo_id[((addr - 0x0021) >> 1) & 3], data & 0xff, 0x00ff);
41 d_dma->write_signal(bank_lo_id[((addr - 0x0021) >> 1) & 3], data & 0x0f, 0x00ff);
44 #if defined(SUPPORT_24BIT_ADDRESS) || defined(SUPPORT_32BIT_ADDRESS)
48 d_dma->write_signal(mask_id[data & 3], 0x0000, 0xffff); // 64KB
51 d_dma->write_signal(mask_id[data & 3], 0x000f, 0xffff); // 1MB
54 d_dma->write_signal(mask_id[data & 3], 0x00ff, 0xffff); // 16MB
59 #if defined(SUPPORT_32BIT_ADDRESS)
64 d_dma->write_signal(bank_hi_id[((addr - 0xe05) >> 1) & 3], (data & 0xff) << 8, 0xff00);
70 uint32_t DMAREG::read_io8(uint32_t addr)
77 return d_dma->read_signal(bank_lo_id[((addr - 0x0021) >> 1) & 3]);
83 #define STATE_VERSION 1
85 #include "../statesub.h"
87 void DMAREG::decl_state()
89 enter_decl_state(STATE_VERSION);
94 void DMAREG::save_state(FILEIO* state_fio)
96 if(state_entry != NULL) {
97 state_entry->save_state(state_fio);
99 // state_fio->FputUint32(STATE_VERSION);
100 // state_fio->FputInt32(this_device_id);
104 bool DMAREG::load_state(FILEIO* state_fio)
108 if(state_entry != NULL) {
109 mb = state_entry->load_state(state_fio);
111 if(!mb) return false;
112 // if(state_fio->FgetUint32() != STATE_VERSION) {
115 // if(state_fio->FgetInt32() != this_device_id) {