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 bool DMAREG::process_state(FILEIO* state_fio, bool loading)
87 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
90 if(!state_fio->StateCheckInt32(this_device_id)) {