diff --git a/src/devices/cpu/mcs51/mcs51.cpp b/src/devices/cpu/mcs51/mcs51.cpp index 6fd711a781c..f75c3cdda3b 100644 --- a/src/devices/cpu/mcs51/mcs51.cpp +++ b/src/devices/cpu/mcs51/mcs51.cpp @@ -266,6 +266,7 @@ DEFINE_DEVICE_TYPE(DS80C320, ds80c320_device, "ds80c320", "Dallas DS80C320 HSM") DEFINE_DEVICE_TYPE(SAB80C535, sab80c535_device, "sab80c535", "Siemens SAB80C535") DEFINE_DEVICE_TYPE(I8344, i8344_device, "i8344", "Intel 8344AH RUPI-44") DEFINE_DEVICE_TYPE(I8744, i8744_device, "i8744", "Intel 8744H RUPI-44") +DEFINE_DEVICE_TYPE(P80C552, p80c552_device, "p80c552", "Philips P80C552") DEFINE_DEVICE_TYPE(P87C552, p87c552_device, "p87c552", "Philips P87C552") DEFINE_DEVICE_TYPE(P80C562, p80c562_device, "p80c562", "Philips P80C562") DEFINE_DEVICE_TYPE(DS5002FP, ds5002fp_device, "ds5002fp", "Dallas DS5002FP") @@ -464,6 +465,11 @@ p80c562_device::p80c562_device(const machine_config &mconfig, const char *tag, d { } +p80c552_device::p80c552_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : p80c562_device(mconfig, P80C552, tag, owner, clock, 0, 8) +{ +} + p87c552_device::p87c552_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : p80c562_device(mconfig, P87C552, tag, owner, clock, 12, 8) { @@ -2775,6 +2781,11 @@ std::unique_ptr p80c562_device::create_disassembler() return std::make_unique(); } +std::unique_ptr p80c552_device::create_disassembler() +{ + return std::make_unique(); +} + std::unique_ptr p87c552_device::create_disassembler() { return std::make_unique(); diff --git a/src/devices/cpu/mcs51/mcs51.h b/src/devices/cpu/mcs51/mcs51.h index 676f6709357..8ac6effd4d3 100644 --- a/src/devices/cpu/mcs51/mcs51.h +++ b/src/devices/cpu/mcs51/mcs51.h @@ -340,6 +340,7 @@ DECLARE_DEVICE_TYPE(AT89C52, at89c52_device) DECLARE_DEVICE_TYPE(AT89S52, at89s52_device) DECLARE_DEVICE_TYPE(DS80C320, ds80c320_device) DECLARE_DEVICE_TYPE(SAB80C535, sab80c535_device) +DECLARE_DEVICE_TYPE(P80C552, p80c552_device) DECLARE_DEVICE_TYPE(P87C552, p87c552_device) DECLARE_DEVICE_TYPE(P80C562, p80c562_device) /* 4k internal perom and 128 internal ram and 2 analog comparators */ @@ -566,6 +567,16 @@ class p80c562_device : public i80c51_device virtual std::unique_ptr create_disassembler() override; }; +class p80c552_device : public p80c562_device +{ +public: + // construction/destruction + p80c552_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual std::unique_ptr create_disassembler() override; +}; + class p87c552_device : public p80c562_device { public: diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 7765a307f4f..0878dc9949b 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -41946,6 +41946,10 @@ pv9234 // @source:skeleton/pwp14.cpp pwp14 // Smith Corona PWP System 14 +@source:skeleton/qmsirius.cpp +qmrave // +qmsirius // + @source:skeleton/qtsbc.cpp qtsbc // diff --git a/src/mame/skeleton/qmsirius.cpp b/src/mame/skeleton/qmsirius.cpp new file mode 100644 index 00000000000..c19daf65142 --- /dev/null +++ b/src/mame/skeleton/qmsirius.cpp @@ -0,0 +1,95 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + Skeleton driver for Quasimidi Sirius keyboard and Rave-O-Lution module. + +***************************************************************************/ + +#include "emu.h" +#include "cpu/mcs51/mcs51.h" +#include "video/hd44780.h" +#include "emupal.h" +#include "screen.h" + +namespace { + +class qmsirius_state : public driver_device +{ +public: + qmsirius_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + { + } + + void qmsirius(machine_config &config); + +private: + HD44780_PIXEL_UPDATE(lcd_pixel_update); + + void prog_map(address_map &map); + void ext_map(address_map &map); + + required_device m_maincpu; +}; + +HD44780_PIXEL_UPDATE(qmsirius_state::lcd_pixel_update) +{ + if (x < 5 && y < 8 && line < 2 && pos < 16) + bitmap.pix(line * 8 + y, pos * 6 + x) = state; +} + +void qmsirius_state::prog_map(address_map &map) +{ + map(0x0000, 0xffff).rom().region("program", 0); +} + +void qmsirius_state::ext_map(address_map &map) +{ + map(0x8000, 0x8001).w("lcdc", FUNC(hd44780_device::write)); + map(0x8002, 0x8003).r("lcdc", FUNC(hd44780_device::read)); +} + +static INPUT_PORTS_START(qmsirius) +INPUT_PORTS_END + +void qmsirius_state::qmsirius(machine_config &config) +{ + P80C552(config, m_maincpu, 12'000'000); // type guessed; clock unknown + m_maincpu->set_addrmap(AS_PROGRAM, &qmsirius_state::prog_map); + m_maincpu->set_addrmap(AS_IO, &qmsirius_state::ext_map); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update("lcdc", FUNC(hd44780_device::screen_update)); + screen.set_size(6*16, 8*2); + screen.set_visarea_full(); + screen.set_palette("palette"); + + PALETTE(config, "palette", palette_device::MONOCHROME_INVERTED); + + hd44780_device &lcdc(HD44780(config, "lcdc", 270'000)); // TODO: clock not measured, datasheet typical clock used + lcdc.set_lcd_size(2, 16); + lcdc.set_pixel_update_cb(FUNC(qmsirius_state::lcd_pixel_update)); +} + +ROM_START(qmsirius) + ROM_REGION(0x80000, "program", 0) + ROM_DEFAULT_BIOS("v205a") + ROM_SYSTEM_BIOS(0, "v205a", "Version No. 2.05a") + ROMX_LOAD("siriusv205a.bin", 0x00000, 0x80000, CRC(3e974cec) SHA1(d44dca58717f89c6eabcf329a39014df1dea215c), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "v203", "Version No. 2.03") + ROMX_LOAD("siriusv203.bin", 0x00000, 0x80000, CRC(34e08d49) SHA1(fc50b9f89d66eddd0aac4ffc2447ee4be7cc41f6), ROM_BIOS(1)) // TMS27C040-12 +ROM_END + +ROM_START(qmrave) + ROM_REGION(0x80000, "program", 0) + ROM_LOAD("quasimidi raveolution 309 os v2.0e.bin", 0x00000, 0x80000, CRC(b0872f0b) SHA1(db71b3654981ef82eeaa2c999453824ea7d2676e)) +ROM_END + +} // anonymous namespace + +SYST(1998, qmsirius, 0, 0, qmsirius, qmsirius, qmsirius_state, empty_init, "Quasimidi Musikelektronik GmbH", "Quasimidi Sirius", MACHINE_IS_SKELETON) +SYST(1996, qmrave, 0, 0, qmsirius, qmsirius, qmsirius_state, empty_init, "Quasimidi Musikelektronik GmbH", "Rave-O-Lution 309", MACHINE_IS_SKELETON)