summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2020-03-24 21:52:56 -0400
committer AJR <ajrhacker@users.noreply.github.com>2020-03-24 21:52:56 -0400
commit09e533a9fb660823dc3aaccb25ee8052104c5d62 (patch)
treeaf005001b00fb44062c5cfcf6b9ad642588c2700
parentf097f89b914b83360e8ce0e18673044f35c4db42 (diff)
roland_s50.cpp: Bank the SRAM (nw)
-rw-r--r--src/mame/drivers/roland_s50.cpp48
1 files changed, 44 insertions, 4 deletions
diff --git a/src/mame/drivers/roland_s50.cpp b/src/mame/drivers/roland_s50.cpp
index 4661fbb6a0a..50ef482b2b1 100644
--- a/src/mame/drivers/roland_s50.cpp
+++ b/src/mame/drivers/roland_s50.cpp
@@ -10,6 +10,7 @@
//#include "bus/midi/midi.h"
#include "cpu/mcs96/i8x9x.h"
#include "imagedev/floppy.h"
+#include "machine/bankdev.h"
#include "machine/mb63h149.h"
#include "machine/timer.h"
#include "machine/wd_fdc.h"
@@ -23,6 +24,7 @@ public:
roland_s50_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_sram(*this, "sram")
, m_fdc(*this, "fdc")
, m_floppy(*this, "fdc:0")
, m_vdp(*this, "vdp")
@@ -37,9 +39,11 @@ protected:
TIMER_DEVICE_CALLBACK_MEMBER(vdp_timer);
+ void ioga_out_w(u8 data);
u8 floppy_status_r();
u8 floppy_unknown_r();
+ void sram_map(address_map &map);
void vram_map(address_map &map);
private:
@@ -48,6 +52,7 @@ private:
protected:
required_device<i8x9x_device> m_maincpu;
+ required_device<address_map_bank_device> m_sram;
required_device<wd_fdc_digital_device_base> m_fdc;
required_device<floppy_connector> m_floppy;
required_device<tms3556_device> m_vdp;
@@ -93,6 +98,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(roland_s50_state::vdp_timer)
}
+void roland_s50_state::ioga_out_w(u8 data)
+{
+ m_sram->set_bank(BIT(data, 6, 2));
+}
+
u8 roland_s50_state::floppy_status_r()
{
return m_fdc->intrq_r() << 2;
@@ -125,7 +135,9 @@ u8 roland_w30_state::unknown2_status_r()
void roland_s50_state::s50_mem_map(address_map &map)
{
map(0x0000, 0x3fff).rom().region("program", 0);
- map(0x4000, 0xbfff).ram(); // TODO: banking
+ map(0x4000, 0x7fff).ram().share("common");
+ map(0x8000, 0xbfff).m(m_sram, FUNC(address_map_bank_device::amap16));
+ map(0xc000, 0xc000).w(FUNC(roland_s50_state::ioga_out_w));
map(0xc200, 0xc200).r(FUNC(roland_s50_state::floppy_status_r));
map(0xc300, 0xc300).r(FUNC(roland_s50_state::floppy_unknown_r));
map(0xc800, 0xc807).rw(m_fdc, FUNC(wd1772_device::read), FUNC(wd1772_device::write)).umask16(0x00ff);
@@ -133,12 +145,15 @@ void roland_s50_state::s50_mem_map(address_map &map)
map(0xd202, 0xd203).nopr();
map(0xd202, 0xd202).w(m_vdp, FUNC(tms3556_device::vram_w));
map(0xd204, 0xd204).rw(m_vdp, FUNC(tms3556_device::reg_r), FUNC(tms3556_device::reg_w));
+ //map(0xc000, 0xffff).rw(m_wave, FUNC(rf5c16_device::read), FUNC(rf5c16_device::write)).umask16(0xff00);
}
void roland_s50_state::s550_mem_map(address_map &map)
{
map(0x0000, 0x3fff).rom().region("program", 0);
- map(0x4000, 0xbfff).ram(); // TODO: banking
+ map(0x4000, 0x7fff).ram().share("common");
+ map(0x8000, 0xbfff).m(m_sram, FUNC(address_map_bank_device::amap16));
+ map(0xc000, 0xc000).w(FUNC(roland_s50_state::ioga_out_w));
map(0xc200, 0xc200).r(FUNC(roland_s50_state::floppy_status_r));
map(0xc300, 0xc300).r(FUNC(roland_s50_state::floppy_unknown_r));
map(0xc800, 0xc807).rw(m_fdc, FUNC(wd1772_device::read), FUNC(wd1772_device::write)).umask16(0x00ff);
@@ -146,24 +161,35 @@ void roland_s50_state::s550_mem_map(address_map &map)
map(0xd002, 0xd003).nopr();
map(0xd002, 0xd002).w(m_vdp, FUNC(tms3556_device::vram_w));
map(0xd004, 0xd004).rw(m_vdp, FUNC(tms3556_device::reg_r), FUNC(tms3556_device::reg_w));
+ //map(0xc000, 0xffff).rw(m_wave, FUNC(rf5c16_device::read), FUNC(rf5c16_device::write)).umask16(0xff00);
}
void roland_w30_state::w30_mem_map(address_map &map)
{
map(0x0000, 0x3fff).rom().region("program", 0);
- map(0x4000, 0x7fff).ram(); // TODO: banking
+ map(0x4000, 0x7fff).ram().share("common");
+ map(0x8000, 0xbfff).m(m_sram, FUNC(address_map_bank_device::amap16)); // TODO: banking differs
map(0xd806, 0xd806).r(FUNC(roland_w30_state::unknown_status_r));
map(0xe402, 0xe402).r(FUNC(roland_w30_state::unknown2_status_r));
+ //map(0xc000, 0xffff).rw(m_wave, FUNC(sa16_device::read), FUNC(sa16_device::write)).umask16(0xff00);
}
#ifdef UNUSED_DEFINITION
void roland_w30_state::s330_mem_map(address_map &map)
{
map(0x0000, 0x3fff).rom().region("program", 0);
- map(0x4000, 0xbfff).ram(); // TODO: banking
+ map(0x4000, 0x7fff).ram().share("common");
+ map(0x8000, 0xbfff).m(m_sram, FUNC(address_map_bank_device::amap16)); // TODO: banking differs?
+ //map(0xc000, 0xffff).rw(m_wave, FUNC(sa16_device::read), FUNC(sa16_device::write)).umask16(0xff00);
}
#endif
+void roland_s50_state::sram_map(address_map &map)
+{
+ map(0x0000, 0x3fff).ram().share("common");
+ map(0x4000, 0xffff).ram();
+}
+
void roland_s50_state::vram_map(address_map &map)
{
map(0x0000, 0xffff).ram();
@@ -193,6 +219,13 @@ void roland_s50_state::s50(machine_config &config)
C8095_90(config, m_maincpu, 24_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &roland_s50_state::s50_mem_map);
+ ADDRESS_MAP_BANK(config, m_sram);
+ m_sram->set_endianness(ENDIANNESS_LITTLE);
+ m_sram->set_data_width(16);
+ m_sram->set_addr_width(16);
+ m_sram->set_stride(0x4000);
+ m_sram->set_addrmap(0, &roland_s50_state::sram_map);
+
mb63h149_device &keyscan(MB63H149(config, "keyscan", 24_MHz_XTAL / 2));
(void)keyscan; //keyscan.int_callback().set_inputline(m_maincpu, i8x9x_device::EXTINT_LINE);
@@ -243,6 +276,13 @@ void roland_w30_state::w30(machine_config &config)
N8097BH(config, m_maincpu, 24_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &roland_w30_state::w30_mem_map);
+ ADDRESS_MAP_BANK(config, m_sram);
+ m_sram->set_endianness(ENDIANNESS_LITTLE);
+ m_sram->set_data_width(16);
+ m_sram->set_addr_width(16);
+ m_sram->set_stride(0x4000);
+ m_sram->set_addrmap(0, &roland_w30_state::sram_map);
+
mb63h149_device &keyscan(MB63H149(config, "keyscan", 24_MHz_XTAL / 2));
(void)keyscan; //keyscan.int_callback().set_inputline(m_maincpu, i8x9x_device::EXTINT_LINE);