diff options
author | 2020-10-21 21:18:07 -0400 | |
---|---|---|
committer | 2020-10-21 21:18:07 -0400 | |
commit | a63bc543aad058326bf6c18a9486ca56717f95da (patch) | |
tree | e34e8c4160ed2c5a1687d8e5dd77a2eabfe8513d | |
parent | 5a545f9d9a22872b9e755a0802b548d1c9de8dd4 (diff) |
emax.cpp: Add some peripherals
-rw-r--r-- | src/mame/drivers/emax.cpp | 124 |
1 files changed, 102 insertions, 22 deletions
diff --git a/src/mame/drivers/emax.cpp b/src/mame/drivers/emax.cpp index c08718c9646..fefad123da5 100644 --- a/src/mame/drivers/emax.cpp +++ b/src/mame/drivers/emax.cpp @@ -10,6 +10,8 @@ #include "cpu/ns32000/ns32000.h" #include "machine/6850acia.h" #include "machine/eepromser.h" +#include "machine/pit8253.h" +#include "machine/wd_fdc.h" #include "video/hd44780.h" #include "emupal.h" #include "screen.h" @@ -20,6 +22,8 @@ public: emax_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") + , m_ctc(*this, "ctc") + , m_fdc(*this, "fdc") , m_lcdc(*this, "lcdc") { } @@ -31,13 +35,21 @@ public: private: HD44780_PIXEL_UPDATE(pixel_update); + u8 timer_r(offs_t offset); + void timer_w(offs_t offset, u8 data); + void mux_w(u8 data); + void dac_w(u8 data); + void palette_init(palette_device &palette); + void emax_periphs(address_map &map); void emax_map(address_map &map); void emaxp_map(address_map &map); void emax2_map(address_map &map); required_device<cpu_device> m_maincpu; + required_device<pit8254_device> m_ctc; + required_device<wd1772_device> m_fdc; required_device<hd44780_device> m_lcdc; }; @@ -48,18 +60,55 @@ HD44780_PIXEL_UPDATE(emax_state::pixel_update) } -void emax_state::emax_map(address_map &map) +u8 emax_state::timer_r(offs_t offset) { - map(0x000000, 0x000fff).rom().region("bootprom", 0); - map(0x008100, 0x0081ff).ram(); - map(0x010000, 0x017fff).ram(); - map(0x822400, 0x822400).nopr(); - map(0x824004, 0x824004).nopw(); - map(0x824006, 0x824006).nopw(); + return m_ctc->read(offset >> 1); +} + +void emax_state::timer_w(offs_t offset, u8 data) +{ + m_ctc->write(offset >> 1, data); +} + +void emax_state::mux_w(u8 data) +{ +} + +void emax_state::dac_w(u8 data) +{ +} + +void emax_state::emax_periphs(address_map &map) +{ + map(0x2c0000, 0x2c0000).select(6).rw(FUNC(emax_state::timer_r), FUNC(emax_state::timer_w)); + map(0x818048, 0x818048).w("acia", FUNC(acia6850_device::control_w)); + map(0x81804a, 0x81804a).r("acia", FUNC(acia6850_device::status_r)); + map(0x81804c, 0x81804c).w("acia", FUNC(acia6850_device::data_w)); + map(0x81804e, 0x81804e).r("acia", FUNC(acia6850_device::data_r)); + map(0x822000, 0x822000).w(m_fdc, FUNC(wd1772_device::cmd_w)); + map(0x822400, 0x822400).r(m_fdc, FUNC(wd1772_device::status_r)); + map(0x822800, 0x822800).w(m_fdc, FUNC(wd1772_device::track_w)); + map(0x822c00, 0x822c00).r(m_fdc, FUNC(wd1772_device::track_r)); + map(0x823000, 0x823000).w(m_fdc, FUNC(wd1772_device::sector_w)); + map(0x823400, 0x823400).r(m_fdc, FUNC(wd1772_device::sector_r)); + map(0x823800, 0x823800).w(m_fdc, FUNC(wd1772_device::data_w)); + map(0x823c00, 0x823c00).r(m_fdc, FUNC(wd1772_device::data_r)); + map(0x824004, 0x824004).w(FUNC(emax_state::mux_w)); + map(0x824006, 0x824006).w(FUNC(emax_state::dac_w)); map(0x890000, 0x890000).w(m_lcdc, FUNC(hd44780_device::control_w)); map(0x890002, 0x890002).r(m_lcdc, FUNC(hd44780_device::control_r)); map(0x890004, 0x890004).w(m_lcdc, FUNC(hd44780_device::data_w)); map(0x890006, 0x890006).r(m_lcdc, FUNC(hd44780_device::data_r)); + //map(0xaa2000, 0xaa2000).select(0x800).w(FUNC(emax_state::echip_w)); + //map(0xaa2400, 0xaa2400).select(0x800).r(FUNC(emax_state::echip_r)); +} + +void emax_state::emax_map(address_map &map) +{ + map(0x000000, 0x000fff).rom().region("bootprom", 0); + map(0x008100, 0x0081ff).ram(); + map(0x010000, 0x017fff).ram(); + emax_periphs(map); } void emax_state::emaxp_map(address_map &map) @@ -67,26 +116,35 @@ void emax_state::emaxp_map(address_map &map) map(0x000000, 0x001fff).rom().region("bootprom", 0); map(0x008100, 0x0081ff).ram(); map(0x010000, 0x017fff).ram(); - map(0x822400, 0x822400).nopr(); - map(0x824004, 0x824004).nopw(); - map(0x824006, 0x824006).nopw(); - map(0x890000, 0x890000).w(m_lcdc, FUNC(hd44780_device::control_w)); - map(0x890002, 0x890002).r(m_lcdc, FUNC(hd44780_device::control_r)); - map(0x890004, 0x890004).w(m_lcdc, FUNC(hd44780_device::data_w)); - map(0x890006, 0x890006).r(m_lcdc, FUNC(hd44780_device::data_r)); + emax_periphs(map); } void emax_state::emax2_map(address_map &map) { map(0x000000, 0x003fff).rom().region("bootprom", 0); map(0x008000, 0x01ffff).ram(); - map(0x0a8018, 0x0a801b).rw("acia", FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff); - map(0x0a801e, 0x0a801f).nopr(); + map(0x0a8018, 0x0a8018).w("acia1", FUNC(acia6850_device::control_w)); + map(0x0a801a, 0x0a801a).r("acia1", FUNC(acia6850_device::status_r)); + map(0x0a801c, 0x0a801c).w("acia1", FUNC(acia6850_device::data_w)); + map(0x0a801e, 0x0a801e).r("acia1", FUNC(acia6850_device::data_r)); + map(0x0a8028, 0x0a8028).w("acia2", FUNC(acia6850_device::control_w)); + map(0x0a802a, 0x0a802a).r("acia2", FUNC(acia6850_device::status_r)); + map(0x0a802c, 0x0a802c).w("acia2", FUNC(acia6850_device::data_w)); + map(0x0a802e, 0x0a802e).r("acia2", FUNC(acia6850_device::data_r)); map(0x0b0000, 0x0b0000).w(m_lcdc, FUNC(hd44780_device::control_w)); map(0x0b0002, 0x0b0002).r(m_lcdc, FUNC(hd44780_device::control_r)); map(0x0b0004, 0x0b0004).w(m_lcdc, FUNC(hd44780_device::data_w)); map(0x0b0006, 0x0b0006).r(m_lcdc, FUNC(hd44780_device::data_r)); + map(0x3f8000, 0x3f8007).rw(m_ctc, FUNC(pit8254_device::read), FUNC(pit8254_device::write)).umask16(0x00ff); map(0x8e8000, 0x8e82ff).ram(); + map(0xae2000, 0xae2000).w(m_fdc, FUNC(wd1772_device::cmd_w)); + map(0xae2400, 0xae2400).r(m_fdc, FUNC(wd1772_device::status_r)); + map(0xae2800, 0xae2800).w(m_fdc, FUNC(wd1772_device::track_w)); + map(0xae2c00, 0xae2c00).r(m_fdc, FUNC(wd1772_device::track_r)); + map(0xae3000, 0xae3000).w(m_fdc, FUNC(wd1772_device::sector_w)); + map(0xae3400, 0xae3400).r(m_fdc, FUNC(wd1772_device::sector_r)); + map(0xae3800, 0xae3800).w(m_fdc, FUNC(wd1772_device::data_w)); + map(0xae3c00, 0xae3c00).r(m_fdc, FUNC(wd1772_device::data_r)); } @@ -104,9 +162,20 @@ void emax_state::palette_init(palette_device &palette) void emax_state::emax(machine_config &config) { - NS32008(config, m_maincpu, 8'000'000); // NS32008D-8 + NS32008(config, m_maincpu, 16_MHz_XTAL / 2); // NS32008D-8 + NS32C201D-10 m_maincpu->set_addrmap(AS_PROGRAM, &emax_state::emax_map); + //R6500_11(config, "scannercpu", 16_MHz_XTAL / 4); + + PIT8254(config, m_ctc); + m_ctc->set_clk<0>(16_MHz_XTAL / 2); + m_ctc->set_clk<1>(16_MHz_XTAL / 2); + m_ctc->set_clk<2>(16_MHz_XTAL / 32); + + WD1772(config, m_fdc, 16_MHz_XTAL / 2); // WD1772-PA + + ACIA6850(config, "acia"); // MC68A50P + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); screen.set_refresh_hz(50); screen.set_screen_update(m_lcdc, FUNC(hd44780_device::screen_update)); @@ -120,7 +189,7 @@ void emax_state::emax(machine_config &config) PALETTE(config, "palette", FUNC(emax_state::palette_init), 2); - // TODO: add other peripherals + //EMU_IM374(config, "echip", 16_MHz_XTAL / 2); } void emax_state::emaxp(machine_config &config) @@ -138,7 +207,12 @@ void emax_state::emax2(machine_config &config) EEPROM_93C06_16BIT(config, "eeprom"); // NMC93C06N - ACIA6850(config, "acia"); + PIT8254(config, m_ctc); + + WD1772(config, m_fdc, 8'000'000); + + ACIA6850(config, "acia1"); + ACIA6850(config, "acia2"); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); screen.set_refresh_hz(50); @@ -160,19 +234,25 @@ ROM_START(emax) ROM_REGION(0x1000, "bootprom", 0) // v2, Rev C mainboard, non-SE/HD version ROM_LOAD("emax.bin", 0x0000, 0x1000, CRC(b55210aa) SHA1(9b02dfc28700e07be5e044d53035041a54732927)) + ROM_REGION(0xc00, "scannercpu", 0) + ROM_LOAD("im368-1_ba__r1129-11.ic7", 0x000, 0xc00, NO_DUMP) + ROM_REGION(0x104, "cspal", 0) - ROM_LOAD("ip345c.bin", 0x000, 0x104, CRC(7bae1347) SHA1(a49ab0bae41132e60c113d2117c5a042c2a1e44d)) + ROM_LOAD("ip345c.bin", 0x000, 0x104, CRC(7bae1347) SHA1(a49ab0bae41132e60c113d2117c5a042c2a1e44d)) // PAL16R4 ROM_END ROM_START(emaxp) ROM_REGION(0x2000, "bootprom", 0) // SCSI upgrade ROM_LOAD("ip424a3089.bin", 0x0000, 0x2000, CRC(3abd3a16) SHA1(8d7ac39c8147bdc2ead9fedee463d1bbe94332c5)) + ROM_REGION(0xc00, "scannercpu", 0) + ROM_LOAD("im368-1_ba__r1129-11.ic7", 0x000, 0xc00, NO_DUMP) + ROM_REGION(0x104, "cspal", 0) - ROM_LOAD("ip345c.bin", 0x000, 0x104, CRC(7bae1347) SHA1(a49ab0bae41132e60c113d2117c5a042c2a1e44d)) + ROM_LOAD("ip345c.bin", 0x000, 0x104, CRC(7bae1347) SHA1(a49ab0bae41132e60c113d2117c5a042c2a1e44d)) // PAL16R4 ROM_REGION(0x104, "timpal", 0) - ROM_LOAD("ip379a.bin", 0x000, 0x104, CRC(fb50f8bd) SHA1(5b8b7904736188c4cf8b36a4bf5ad685422ec760)) + ROM_LOAD("ip379a.bin", 0x000, 0x104, CRC(fb50f8bd) SHA1(5b8b7904736188c4cf8b36a4bf5ad685422ec760)) // PAL16R4 ROM_END ROM_START(emax2) |