diff options
| author | 2025-12-05 12:17:37 +0100 | |
|---|---|---|
| committer | 2025-12-05 12:30:24 +0100 | |
| commit | 8c5eeb2787d81a718e85d19e37a5f10eaa40e025 (patch) | |
| tree | 8c4b48eae150979b76e959302ee68d7524840fe5 | |
| parent | 620be7f11561c39180bc7345ea5da3e1df95e7f1 (diff) | |
New systems marked not working
------------------------------
Brainchild PLS-1000 [Sean Riddle]
| -rw-r--r-- | src/mame/mame.lst | 3 | ||||
| -rw-r--r-- | src/mame/misc/pls1000.cpp | 116 |
2 files changed, 119 insertions, 0 deletions
diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 105604b8754..c428c02cec1 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -32672,6 +32672,9 @@ plycntrchtrc plycntrchtrk plycntre3 +@source:misc/pls1000.cpp +pls1000 + @source:misc/plsonic4.cpp plsonic4 diff --git a/src/mame/misc/pls1000.cpp b/src/mame/misc/pls1000.cpp new file mode 100644 index 00000000000..0287a37b11e --- /dev/null +++ b/src/mame/misc/pls1000.cpp @@ -0,0 +1,116 @@ +// license:BSD-3-Clause +// copyright-holders: +/************************************************************************************************** + +Brainchild PLS-1000 "Personal Learning System" + +TODO: +- keeps looping on INT_TIMER2 events in DragonBall core +(shouldn't take them? may require a first cart boot that populates the stack?): +':maincpu' (0062B4): tcmp_w<1>: TCMP2 = 028f +':maincpu' (0062B8): tstat_r: TSTAT2: 0000 +':maincpu' (0062BE): tctl_w<1>: TCTL2 = 0039 +TCTL_TEN, TCTL_CLKSOURCE_32KHZ4, TCTL_OM, TCTL_IRQEN + +- Requires cart dumps to go further; + +=================================================================================================== + +MC68328PV16V at U1 +Atmel AT27C512R ROM at U2 +HY62256ALJ-10 CMOS at U3 +power switch labeled SW1 +two knobs at console bottom sides, VR1/VR2 + +**************************************************************************************************/ + +#include "emu.h" + +#include "cpu/m68000/m68000.h" +#include "machine/mc68328.h" +#include "video/mc68328lcd.h" + +//#include "speaker.h" +#include "screen.h" + +namespace { + +class pls1000_state : public driver_device +{ +public: + pls1000_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_lcdctrl(*this, "lcdctrl") + , m_screen(*this, "screen") + { } + + void pls1000(machine_config &config); + +protected: + void main_map(address_map &map) ATTR_COLD; + +private: + required_device<mc68328_base_device> m_maincpu; + required_device<mc68328_lcd_device> m_lcdctrl; + required_device<screen_device> m_screen; + + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + +}; + +u32 pls1000_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + m_lcdctrl->video_update(bitmap, cliprect); + return 0; +} + +void pls1000_state::main_map(address_map &map) +{ + map(0x000000, 0x00ffff).rom().region("bios", 0); + map(0x200000, 0x207fff).ram(); +// map(0x800000, 0x8.....) cart space (checks 0x5a05 header there) +} + +static INPUT_PORTS_START( pls1000 ) +INPUT_PORTS_END + +void pls1000_state::pls1000(machine_config &config) +{ + // TODO: unverified clock + MC68328(config, m_maincpu, 32768*506); // MC68328PV16VA + m_maincpu->set_addrmap(AS_PROGRAM, &pls1000_state::main_map); + + // TODO: I/O ports + + m_maincpu->out_flm().set(m_lcdctrl, FUNC(mc68328_lcd_device::flm_w)); + m_maincpu->out_llp().set(m_lcdctrl, FUNC(mc68328_lcd_device::llp_w)); + m_maincpu->out_lsclk().set(m_lcdctrl, FUNC(mc68328_lcd_device::lsclk_w)); + m_maincpu->out_ld().set(m_lcdctrl, FUNC(mc68328_lcd_device::ld_w)); + m_maincpu->set_lcd_info_changed(m_lcdctrl, FUNC(mc68328_lcd_device::lcd_info_changed)); + + // TODO: check vertical + SCREEN(config, m_screen, SCREEN_TYPE_LCD); + m_screen->set_refresh_hz(60); + m_screen->set_size(240, 160); + m_screen->set_visarea(0, 240 - 1, 0, 160 - 1); + m_screen->set_screen_update(FUNC(pls1000_state::screen_update)); + + MC68328_LCD(config, m_lcdctrl, 0); + +// SPEAKER(config, "speaker").front_center(); +// DAC_1BIT(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); +} + + + +ROM_START( pls1000 ) + ROM_REGION16_BE( 0x208000, "bios", 0 ) + ROM_LOAD16_WORD( "at27c512r.u2", 0x000000, 0x10000, CRC(77f2beed) SHA1(7118108bd491434934910df072842d46a9ea6223) ) +ROM_END + + +} // anonymous namespace + +CONS( 1998, pls1000, 0, 0, pls1000, pls1000, pls1000_state, empty_init, "Brainchild", "PLS-1000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) + |
