From b410116212b76f289a347f76c3a6a503921a1252 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 24 May 2021 10:08:40 -0400 Subject: xerox820.cpp: Use memory view for bankswitching --- src/mame/drivers/xerox820.cpp | 70 +++++++++++-------------------------------- src/mame/includes/xerox820.h | 7 ++--- 2 files changed, 20 insertions(+), 57 deletions(-) diff --git a/src/mame/drivers/xerox820.cpp b/src/mame/drivers/xerox820.cpp index 9f17964ed56..04d3a8fedff 100644 --- a/src/mame/drivers/xerox820.cpp +++ b/src/mame/drivers/xerox820.cpp @@ -64,45 +64,6 @@ /* Read/Write Handlers */ -void xerox820_state::bankswitch(int bank) -{ - address_space &program = m_maincpu->space(AS_PROGRAM); - uint8_t *ram = m_ram->pointer(); - - if (bank) - { - /* ROM */ - program.install_rom(0x0000, 0x0fff, m_rom->base()); - program.unmap_readwrite(0x1000, 0x1fff); - program.install_ram(0x3000, 0x3fff, m_video_ram); - } - else - { - /* RAM */ - program.install_ram(0x0000, 0x3fff, ram); - } -} - -void xerox820ii_state::bankswitch(int bank) -{ - address_space &program = m_maincpu->space(AS_PROGRAM); - uint8_t *ram = m_ram->pointer(); - - if (bank) - { - /* ROM */ - program.install_rom(0x0000, 0x1fff, m_rom->base()); - program.unmap_readwrite(0x2000, 0x2fff); - program.install_ram(0x3000, 0x3fff, m_video_ram); - program.unmap_readwrite(0x4000, 0xbfff); - } - else - { - /* RAM */ - program.install_ram(0x0000, 0xbfff, ram); - } -} - uint8_t xerox820_state::fdc_r(offs_t offset) { return m_fdc->read(offset) ^ 0xff; @@ -175,7 +136,10 @@ void xerox820ii_state::sync_w(offs_t offset, uint8_t data) void xerox820_state::xerox820_mem(address_map &map) { map.unmap_value_high(); - map(0x3000, 0x3fff).ram().share("video_ram"); + map(0x0000, 0x3fff).view(m_view); + m_view[0](0x0000, 0x3fff).ram(); + m_view[1](0x0000, 0x0fff).rom().region(Z80_TAG, 0); + m_view[1](0x3000, 0x3fff).ram().share("video_ram"); map(0x4000, 0xffff).ram(); } @@ -194,7 +158,10 @@ void xerox820_state::xerox820_io(address_map &map) void xerox820ii_state::xerox820ii_mem(address_map &map) { map.unmap_value_high(); - map(0x3000, 0x3fff).ram().share("video_ram"); + map(0x0000, 0xbfff).view(m_view); + m_view[0](0x0000, 0xbfff).ram(); + m_view[1](0x0000, 0x1fff).rom().region(Z80_TAG, 0); + m_view[1](0x3000, 0x3fff).ram().share("video_ram"); map(0xc000, 0xffff).ram(); } @@ -217,6 +184,9 @@ void xerox820ii_state::xerox168_mem(address_map &map) void xerox820_state::mk83_mem(address_map &map) { map.unmap_value_high(); + map(0x0000, 0x2fff).view(m_view); + m_view[0](0x0000, 0x2fff).ram(); + m_view[1](0x0000, 0x0fff).rom().region(Z80_TAG, 0); map(0x3000, 0x6fff).ram(); map(0x7000, 0x7fff).ram().share("video_ram"); map(0x8000, 0xffff).ram(); @@ -312,7 +282,7 @@ void xerox820_state::kbpio_pa_w(uint8_t data) m_ncset2 = !BIT(data, 6); /* bank switching */ - bankswitch(BIT(data, 7)); + m_view.select(BIT(data, 7)); } void bigboard_state::kbpio_pa_w(uint8_t data) @@ -413,7 +383,7 @@ QUICKLOAD_LOAD_MEMBER(xerox820_state::quickload_cb) if (image.length() >= 0xfd00) return image_init_result::FAIL; - bankswitch(0); + m_view.select(0); /* Avoid loading a program if CP/M-80 is not in memory */ if ((prog_space.read_byte(0) != 0xc3) || (prog_space.read_byte(5) != 0xc3)) @@ -544,14 +514,14 @@ void xerox820_state::machine_start() void xerox820_state::machine_reset() { - bankswitch(1); + m_view.select(1); m_fdc->reset(); } void bigboard_state::machine_reset() { - bankswitch(1); + m_view.select(1); /* bigboard has a one-pulse output to drive a user-supplied beeper */ m_beeper->set_state(0); @@ -561,7 +531,7 @@ void bigboard_state::machine_reset() void xerox820ii_state::machine_reset() { - bankswitch(1); + m_view.select(1); m_fdc->reset(); @@ -684,9 +654,6 @@ void xerox820_state::xerox820(machine_config &config) XEROX_820_KEYBOARD(config, m_kb, 0); m_kb->kbstb_wr_callback().set(m_kbpio, FUNC(z80pio_device::strobe_b)); - /* internal ram */ - RAM(config, m_ram).set_default_size("64K"); - // software lists SOFTWARE_LIST(config, "flop_list").set_original("xerox820"); QUICKLOAD(config, "quickload", "com,cpm", attotime::from_seconds(3)).set_load_callback(FUNC(xerox820_state::quickload_cb)); @@ -793,9 +760,6 @@ void xerox820ii_state::xerox820ii(machine_config &config) INPUT_BUFFER(config, "sasi_data_in"); INPUT_BUFFER(config, "sasi_ctrl_in"); - /* internal ram */ - RAM(config, m_ram).set_default_size("64K"); - // software lists SOFTWARE_LIST(config, "flop_list").set_original("xerox820ii"); QUICKLOAD(config, "quickload", "com,cpm", attotime::from_seconds(3)).set_load_callback(FUNC(xerox820_state::quickload_cb)); @@ -808,7 +772,7 @@ void xerox820ii_state::xerox168(machine_config &config) i8086.set_addrmap(AS_PROGRAM, &xerox820ii_state::xerox168_mem); /* internal ram */ - m_ram->set_default_size("192K").set_extra_options("320K"); + RAM(config, m_ram).set_default_size("192K").set_extra_options("320K"); } void xerox820_state::mk83(machine_config & config) diff --git a/src/mame/includes/xerox820.h b/src/mame/includes/xerox820.h index e5e9c9c3f81..850a7c7a9c2 100644 --- a/src/mame/includes/xerox820.h +++ b/src/mame/includes/xerox820.h @@ -65,6 +65,7 @@ public: m_rom(*this, Z80_TAG), m_char_rom(*this, "chargen"), m_video_ram(*this, "video_ram"), + m_view(*this, "view"), m_fdc_irq(0), m_fdc_drq(0), m_8n5(0), @@ -104,7 +105,7 @@ protected: required_device m_ctc; required_device m_sio; required_device m_fdc; - required_device m_ram; + optional_device m_ram; required_device m_palette; required_device m_floppy0; required_device m_floppy1; @@ -112,8 +113,8 @@ protected: required_memory_region m_rom; required_memory_region m_char_rom; required_shared_ptr m_video_ram; + memory_view m_view; - virtual void bankswitch(int bank); void update_nmi(); /* video state */ @@ -181,8 +182,6 @@ public: protected: virtual void machine_reset() override; - void bankswitch(int bank) override; - required_device m_speaker; required_device m_sasibus; }; -- cgit v1.2.3