diff options
Diffstat (limited to 'src/mame/drivers/pc88va.cpp')
-rw-r--r-- | src/mame/drivers/pc88va.cpp | 82 |
1 files changed, 42 insertions, 40 deletions
diff --git a/src/mame/drivers/pc88va.cpp b/src/mame/drivers/pc88va.cpp index a192520e40e..7cddd40f074 100644 --- a/src/mame/drivers/pc88va.cpp +++ b/src/mame/drivers/pc88va.cpp @@ -673,13 +673,14 @@ WRITE16_MEMBER(pc88va_state::sys_mem_w) } } -ADDRESS_MAP_START(pc88va_state::pc88va_map) - AM_RANGE(0x00000, 0x7ffff) AM_RAM +void pc88va_state::pc88va_map(address_map &map) +{ + map(0x00000, 0x7ffff).ram(); // AM_RANGE(0x80000, 0x9ffff) AM_RAM // EMM - AM_RANGE(0xa0000, 0xdffff) AM_READWRITE(sys_mem_r,sys_mem_w) - AM_RANGE(0xe0000, 0xeffff) AM_ROMBANK("rom00_bank") - AM_RANGE(0xf0000, 0xfffff) AM_ROMBANK("rom10_bank") -ADDRESS_MAP_END + map(0xa0000, 0xdffff).rw(this, FUNC(pc88va_state::sys_mem_r), FUNC(pc88va_state::sys_mem_w)); + map(0xe0000, 0xeffff).bankr("rom00_bank"); + map(0xf0000, 0xfffff).bankr("rom10_bank"); +} /* IDP = NEC uPD72022 */ READ8_MEMBER(pc88va_state::idp_status_r) @@ -1248,23 +1249,24 @@ READ8_MEMBER(pc88va_state::no_subfdc_r) } #endif -ADDRESS_MAP_START(pc88va_state::pc88va_io_map) - AM_RANGE(0x0000, 0x000f) AM_READ8(key_r,0xffff) // Keyboard ROW reading +void pc88va_state::pc88va_io_map(address_map &map) +{ + map(0x0000, 0x000f).r(this, FUNC(pc88va_state::key_r)); // Keyboard ROW reading // AM_RANGE(0x0010, 0x0010) Printer / Calendar Clock Interface - AM_RANGE(0x0020, 0x0021) AM_NOP // RS-232C - AM_RANGE(0x0030, 0x0031) AM_READWRITE8(backupram_dsw_r,sys_port1_w,0xffff) // 0x30 (R) DSW1 (W) Text Control Port 0 / 0x31 (R) DSW2 (W) System Port 1 + map(0x0020, 0x0021).noprw(); // RS-232C + map(0x0030, 0x0031).rw(this, FUNC(pc88va_state::backupram_dsw_r), FUNC(pc88va_state::sys_port1_w)); // 0x30 (R) DSW1 (W) Text Control Port 0 / 0x31 (R) DSW2 (W) System Port 1 // AM_RANGE(0x0032, 0x0032) (R) ? (W) System Port 2 // AM_RANGE(0x0034, 0x0034) GVRAM Control Port 1 // AM_RANGE(0x0035, 0x0035) GVRAM Control Port 2 - AM_RANGE(0x0040, 0x0041) AM_READ(sys_port4_r) // (R) System Port 4 (W) System port 3 (strobe port) - AM_RANGE(0x0044, 0x0045) AM_MIRROR(0x0002) AM_DEVREADWRITE8("ym", ym2203_device, read, write, 0xffff) + map(0x0040, 0x0041).r(this, FUNC(pc88va_state::sys_port4_r)); // (R) System Port 4 (W) System port 3 (strobe port) + map(0x0044, 0x0045).mirror(0x0002).rw("ym", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); // AM_RANGE(0x005c, 0x005c) (R) GVRAM status // AM_RANGE(0x005c, 0x005f) (W) GVRAM selection // AM_RANGE(0x0070, 0x0070) ? (*) // AM_RANGE(0x0071, 0x0071) Expansion ROM select (*) // AM_RANGE(0x0078, 0x0078) Memory offset increment (*) // AM_RANGE(0x0080, 0x0081) HDD related - AM_RANGE(0x0082, 0x0083) AM_READ8(hdd_status_r,0x00ff)// HDD control, byte access 7-0 + map(0x0082, 0x0082).r(this, FUNC(pc88va_state::hdd_status_r));// HDD control, byte access 7-0 // AM_RANGE(0x00bc, 0x00bf) d8255 1 // AM_RANGE(0x00e2, 0x00e3) Expansion RAM selection (*) // AM_RANGE(0x00e4, 0x00e4) 8214 IRQ control (*) @@ -1272,14 +1274,14 @@ ADDRESS_MAP_START(pc88va_state::pc88va_io_map) // AM_RANGE(0x00e8, 0x00e9) ? (*) // AM_RANGE(0x00ec, 0x00ed) ? (*) #if TEST_SUBFDC - AM_RANGE(0x00fc, 0x00ff) AM_DEVREADWRITE8("d8255_2", i8255_device, read, write, 0xffff) // d8255 2, FDD + map(0x00fc, 0x00ff).rw("d8255_2", FUNC(i8255_device::read), FUNC(i8255_device::write)); // d8255 2, FDD #else - AM_RANGE(0x00fc, 0x00ff) AM_READ8(no_subfdc_r,0xffff) AM_WRITENOP + map(0x00fc, 0x00ff).r(this, FUNC(pc88va_state::no_subfdc_r)).nopw(); #endif - AM_RANGE(0x0100, 0x0101) AM_READWRITE(screen_ctrl_r,screen_ctrl_w) // Screen Control Register + map(0x0100, 0x0101).rw(this, FUNC(pc88va_state::screen_ctrl_r), FUNC(pc88va_state::screen_ctrl_w)); // Screen Control Register // AM_RANGE(0x0102, 0x0103) Graphic Screen Control Register - AM_RANGE(0x0106, 0x0109) AM_WRITE(video_pri_w) // Palette Control Register (priority) / Direct Color Control Register (priority) + map(0x0106, 0x0109).w(this, FUNC(pc88va_state::video_pri_w)); // Palette Control Register (priority) / Direct Color Control Register (priority) // AM_RANGE(0x010a, 0x010b) Picture Mask Mode Register // AM_RANGE(0x010c, 0x010d) Color Palette Mode Register // AM_RANGE(0x010e, 0x010f) Backdrop Color Register @@ -1288,41 +1290,41 @@ ADDRESS_MAP_START(pc88va_state::pc88va_io_map) // AM_RANGE(0x0126, 0x0127) ? (related to Transparent Color of Graphic Screen 1) // AM_RANGE(0x012e, 0x012f) ? (related to Transparent Color of Text/Sprite) // AM_RANGE(0x0130, 0x0137) Picture Mask Parameter - AM_RANGE(0x0142, 0x0143) AM_READWRITE8(idp_status_r,idp_command_w,0x00ff) //Text Controller (IDP) - (R) Status (W) command - AM_RANGE(0x0146, 0x0147) AM_WRITE8(idp_param_w,0x00ff) //Text Controller (IDP) - (R/W) Parameter + map(0x0142, 0x0142).rw(this, FUNC(pc88va_state::idp_status_r), FUNC(pc88va_state::idp_command_w)); //Text Controller (IDP) - (R) Status (W) command + map(0x0146, 0x0146).w(this, FUNC(pc88va_state::idp_param_w)); //Text Controller (IDP) - (R/W) Parameter // AM_RANGE(0x0148, 0x0149) Text control port 1 // AM_RANGE(0x014c, 0x014f) ? CG Port - AM_RANGE(0x0150, 0x0151) AM_READ(sysop_r) // System Operational Mode - AM_RANGE(0x0152, 0x0153) AM_READWRITE(bios_bank_r,bios_bank_w) // Memory Map Register + map(0x0150, 0x0151).r(this, FUNC(pc88va_state::sysop_r)); // System Operational Mode + map(0x0152, 0x0153).rw(this, FUNC(pc88va_state::bios_bank_r), FUNC(pc88va_state::bios_bank_w)); // Memory Map Register // AM_RANGE(0x0154, 0x0155) Refresh Register (wait states) - AM_RANGE(0x0156, 0x0157) AM_READ8(rom_bank_r,0x00ff) // ROM bank status + map(0x0156, 0x0156).r(this, FUNC(pc88va_state::rom_bank_r)); // ROM bank status // AM_RANGE(0x0158, 0x0159) Interruption Mode Modification // AM_RANGE(0x015c, 0x015f) NMI mask port (strobe port) - AM_RANGE(0x0160, 0x016f) AM_DEVREADWRITE8("dmac", am9517a_device, read, write, 0xffff) // DMA Controller - AM_RANGE(0x0184, 0x0187) AM_DEVREADWRITE8("pic8259_slave", pic8259_device, read, write, 0x00ff) - AM_RANGE(0x0188, 0x018b) AM_DEVREADWRITE8("pic8259_master", pic8259_device, read, write, 0x00ff) // ICU, also controls 8214 emulation + map(0x0160, 0x016f).rw(m_dmac, FUNC(am9517a_device::read), FUNC(am9517a_device::write)); // DMA Controller + map(0x0184, 0x0187).rw("pic8259_slave", FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff); + map(0x0188, 0x018b).rw("pic8259_master", FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff); // ICU, also controls 8214 emulation // AM_RANGE(0x0190, 0x0191) System Port 5 // AM_RANGE(0x0196, 0x0197) Keyboard sub CPU command port - AM_RANGE(0x0198, 0x0199) AM_WRITE(backupram_wp_1_w) //Backup RAM write inhibit - AM_RANGE(0x019a, 0x019b) AM_WRITE(backupram_wp_0_w) //Backup RAM write permission - AM_RANGE(0x01a0, 0x01a7) AM_DEVREADWRITE8("pit8253", pit8253_device, read, write, 0x00ff)// vTCU (timer counter unit) - AM_RANGE(0x01a8, 0x01a9) AM_WRITE8(timer3_ctrl_reg_w,0x00ff) // General-purpose timer 3 control port - AM_RANGE(0x01b0, 0x01b7) AM_READWRITE8(pc88va_fdc_r,pc88va_fdc_w,0x00ff)// FDC related (765) - AM_RANGE(0x01b8, 0x01bb) AM_DEVICE8("upd765", upd765a_device, map, 0x00ff) + map(0x0198, 0x0199).w(this, FUNC(pc88va_state::backupram_wp_1_w)); //Backup RAM write inhibit + map(0x019a, 0x019b).w(this, FUNC(pc88va_state::backupram_wp_0_w)); //Backup RAM write permission + map(0x01a0, 0x01a7).rw("pit8253", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);// vTCU (timer counter unit) + map(0x01a8, 0x01a8).w(this, FUNC(pc88va_state::timer3_ctrl_reg_w)); // General-purpose timer 3 control port + map(0x01b0, 0x01b7).rw(this, FUNC(pc88va_state::pc88va_fdc_r), FUNC(pc88va_state::pc88va_fdc_w)).umask16(0x00ff);// FDC related (765) + map(0x01b8, 0x01bb).m(m_fdc, FUNC(upd765a_device::map)).umask16(0x00ff); // AM_RANGE(0x01c0, 0x01c1) ? - AM_RANGE(0x01c6, 0x01c7) AM_WRITENOP // ??? - AM_RANGE(0x01c8, 0x01cf) AM_DEVREADWRITE8("d8255_3", i8255_device, read, write,0xff00) //i8255 3 (byte access) + map(0x01c6, 0x01c7).nopw(); // ??? + map(0x01c8, 0x01cf).rw("d8255_3", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0xff00); //i8255 3 (byte access) // AM_RANGE(0x01d0, 0x01d1) Expansion RAM bank selection - AM_RANGE(0x0200, 0x021f) AM_RAM // Frame buffer 0 control parameter - AM_RANGE(0x0220, 0x023f) AM_RAM // Frame buffer 1 control parameter - AM_RANGE(0x0240, 0x025f) AM_RAM // Frame buffer 2 control parameter - AM_RANGE(0x0260, 0x027f) AM_RAM // Frame buffer 3 control parameter - AM_RANGE(0x0300, 0x033f) AM_RAM_WRITE(palette_ram_w) AM_SHARE("palram") // Palette RAM (xBBBBxRRRRxGGGG format) + map(0x0200, 0x021f).ram(); // Frame buffer 0 control parameter + map(0x0220, 0x023f).ram(); // Frame buffer 1 control parameter + map(0x0240, 0x025f).ram(); // Frame buffer 2 control parameter + map(0x0260, 0x027f).ram(); // Frame buffer 3 control parameter + map(0x0300, 0x033f).ram().w(this, FUNC(pc88va_state::palette_ram_w)).share("palram"); // Palette RAM (xBBBBxRRRRxGGGG format) // AM_RANGE(0x0500, 0x05ff) GVRAM // AM_RANGE(0x1000, 0xfeff) user area (???) - AM_RANGE(0xff00, 0xffff) AM_NOP // CPU internal use -ADDRESS_MAP_END + map(0xff00, 0xffff).noprw(); // CPU internal use +} // (*) are specific N88 V1 / V2 ports TIMER_CALLBACK_MEMBER(pc88va_state::pc8801fd_upd765_tc_to_zero) |