diff --git a/hash/sitcom.xml b/hash/sitcom.xml index 52bdcc2feb9..c5cc461799c 100644 --- a/hash/sitcom.xml +++ b/hash/sitcom.xml @@ -7,7 +7,7 @@ San 2002 San Bergmans - + @@ -18,30 +18,41 @@ Flash 1 2002 Izabella Malcolm - + + + Camera Shutter Speed Timer + 2002 + Izabella Malcolm + + + + + + + Lesson 1 2002 Izabella Malcolm - - + + - - + + - - + + @@ -51,23 +62,23 @@ 2002 Izabella Malcolm - - + + - - + + - - + + - - + + @@ -77,23 +88,23 @@ 2002 Izabella Malcolm - - + + - - + + - - + + - - + + @@ -103,23 +114,54 @@ 2002 Izabella Malcolm - - + + - - + + - - + + - - + + + + + + + + Lesson 5 + 2002 + Izabella Malcolm + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/drivers/sitcom.cpp b/src/mame/drivers/sitcom.cpp index 73db2ef3df9..468737ba611 100644 --- a/src/mame/drivers/sitcom.cpp +++ b/src/mame/drivers/sitcom.cpp @@ -45,6 +45,9 @@ #include "softlist_dev.h" #include "sitcom.lh" +#include "sitcomtmr.lh" + +#include namespace { @@ -66,10 +69,10 @@ public: DECLARE_WRITE_LINE_MEMBER(sod_led) { output().set_value("sod_led", state); } DECLARE_READ_LINE_MEMBER(sid_line) { return m_rxd ? 1 : 0; } - DECLARE_WRITE8_MEMBER(update_pia_pa); - DECLARE_WRITE8_MEMBER(update_pia_pb); + virtual DECLARE_WRITE8_MEMBER(update_pia_pa); + virtual DECLARE_WRITE8_MEMBER(update_pia_pb); - DECLARE_INPUT_CHANGED_MEMBER(buttons); + DECLARE_INPUT_CHANGED_MEMBER(update_buttons); protected: virtual void machine_start() override; @@ -82,15 +85,60 @@ protected: bool m_rxd; }; + +class sitcom_timer_state : public sitcom_state +{ +public: + enum + { + TIMER_SHUTTER + }; + + sitcom_timer_state(const machine_config &mconfig, device_type type, const char *tag) + : sitcom_state(mconfig, type, tag) + , m_speed(*this, "SPEED") + , m_pia(*this, "pia") + , m_ds2(*this, "ds2") + , m_shutter_timer(nullptr) + , m_shutter(false) + , m_dac_cs(true) + , m_dac_wr(true) + { + } + + virtual DECLARE_WRITE8_MEMBER(update_pia_pa) override; + virtual DECLARE_WRITE8_MEMBER(update_pia_pb) override; + DECLARE_READ_LINE_MEMBER(shutter_r); + + DECLARE_INPUT_CHANGED_MEMBER(update_shutter); + +protected: + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + + virtual void machine_start() override; + virtual void machine_reset() override; + + void update_dac(uint8_t value); + + required_ioport m_speed; + required_device m_pia; + required_device m_ds2; + emu_timer *m_shutter_timer; + + bool m_shutter; + bool m_dac_cs, m_dac_wr; +}; + + ADDRESS_MAP_START( sitcom_bank, AS_PROGRAM, 8, sitcom_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x07ff) AM_ROM AM_REGION("maincpu", 0) + AM_RANGE(0x0000, 0x07ff) AM_ROM AM_REGION("bootstrap", 0) AM_RANGE(0x8000, 0xffff) AM_RAM AM_SHARE("ram") ADDRESS_MAP_END ADDRESS_MAP_START( sitcom_mem, AS_PROGRAM, 8, sitcom_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x07ff) AM_DEVICE("bank", address_map_bank_device, amap8) + AM_RANGE(0x0000, 0x7fff) AM_DEVICE("bank", address_map_bank_device, amap8) AM_RANGE(0x8000, 0xffff) AM_RAM AM_SHARE("ram") ADDRESS_MAP_END @@ -105,8 +153,43 @@ ADDRESS_MAP_END INPUT_PORTS_START( sitcom ) PORT_START("BUTTONS") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Boot") PORT_CHANGED_MEMBER(DEVICE_SELF, sitcom_state, buttons, 0) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, sitcom_state, buttons, 0) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Boot") PORT_CHANGED_MEMBER(DEVICE_SELF, sitcom_state, update_buttons, 0) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, sitcom_state, update_buttons, 0) + + PORT_START("PORTC") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("0") PORT_CODE(KEYCODE_0) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("1") PORT_CODE(KEYCODE_1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("2") PORT_CODE(KEYCODE_2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("3") PORT_CODE(KEYCODE_3) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("4") PORT_CODE(KEYCODE_4) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("5") PORT_CODE(KEYCODE_5) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("6") PORT_CODE(KEYCODE_6) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("7") PORT_CODE(KEYCODE_7) +INPUT_PORTS_END + +INPUT_PORTS_START( sitcomtmr ) + PORT_INCLUDE(sitcom) + + PORT_MODIFY("BUTTONS") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Shutter") PORT_CHANGED_MEMBER(DEVICE_SELF, sitcom_timer_state, update_shutter, 0) + + PORT_MODIFY("PORTC") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Grey") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Blue") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER(DEVICE_SELF, sitcom_timer_state, shutter_r) + PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("SPEED") + PORT_CONFNAME(0xff, 0x1e, "Shutter Speed") + PORT_CONFSETTING(0x00, "B") + PORT_CONFSETTING(0x01, "1") + PORT_CONFSETTING(0x02, "1/2") + PORT_CONFSETTING(0x04, "1/4") + PORT_CONFSETTING(0x08, "1/8") + PORT_CONFSETTING(0x0f, "1/15") + PORT_CONFSETTING(0x1e, "1/30") + PORT_CONFSETTING(0x3c, "1/60") + PORT_CONFSETTING(0x7d, "1/125") INPUT_PORTS_END @@ -134,7 +217,7 @@ WRITE8_MEMBER( sitcom_state::update_pia_pb ) output().set_indexed_value("pb", i, BIT(data, i)); } -INPUT_CHANGED_MEMBER( sitcom_state::buttons ) +INPUT_CHANGED_MEMBER( sitcom_state::update_buttons ) { bool const boot(BIT(m_buttons->read(), 0)); bool const reset(BIT(m_buttons->read(), 1)); @@ -148,6 +231,91 @@ INPUT_CHANGED_MEMBER( sitcom_state::buttons ) } +WRITE8_MEMBER( sitcom_timer_state::update_pia_pa ) +{ + if (!m_dac_cs && !m_dac_wr) + update_dac(data); + + m_ds2->data_w(data & 0x7f); +} + +WRITE8_MEMBER( sitcom_timer_state::update_pia_pb ) +{ + if (!m_dac_cs && !BIT(data, 0)) + update_dac(m_pia->pa_r()); + m_dac_wr = BIT(data, 0); + m_dac_cs = BIT(data, 1); + + m_ds2->wr_w(BIT(data, 2)); + m_ds2->addr_w(bitswap<2>(data, 3, 4)); + output().set_value("test_led", BIT(data, 5)); +} + +READ_LINE_MEMBER( sitcom_timer_state::shutter_r ) +{ + return m_shutter ? 0 : 1; +} + +INPUT_CHANGED_MEMBER( sitcom_timer_state::update_shutter ) +{ + ioport_value const speed(m_speed->read()); + if (!speed) + { + m_shutter = bool(newval); + } + else if (!m_shutter && newval) + { + m_shutter = true; + m_shutter_timer->adjust(attotime::from_hz(speed)); + } +} + +void sitcom_timer_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch (id) + { + case TIMER_SHUTTER: + m_shutter = false; + break; + default: + sitcom_state::device_timer(timer, id, param, ptr); + } +} + +void sitcom_timer_state::machine_start() +{ + sitcom_state::machine_start(); + + m_shutter_timer = timer_alloc(TIMER_SHUTTER); + + save_item(NAME(m_shutter)); + save_item(NAME(m_dac_cs)); + save_item(NAME(m_dac_wr)); + + m_shutter = false; + m_dac_cs = true; + m_dac_wr = true; +} + +void sitcom_timer_state::machine_reset() +{ + sitcom_state::machine_reset(); + + m_ds2->ce_w(0); +} + +void sitcom_timer_state::update_dac(uint8_t value) +{ + // supposed to be a DAC and an analog meter, but that's hard to do with internal layouts + constexpr u8 s_7seg[10] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f }; + output().set_digit_value(12, s_7seg[value % 10]); + value /= 10; + output().set_digit_value(13, s_7seg[value % 10]); + value /= 10; + output().set_digit_value(14, s_7seg[value % 10] | 0x80); +} + + MACHINE_CONFIG_START( sitcom, sitcom_state ) // basic machine hardware MCFG_CPU_ADD("maincpu", I8085A, XTAL_6_144MHz) // 3.072MHz can be used for an old slow 8085 @@ -169,6 +337,7 @@ MACHINE_CONFIG_START( sitcom, sitcom_state ) MCFG_DEVICE_ADD("pia", I8255, 0) MCFG_I8255_OUT_PORTA_CB(WRITE8(sitcom_state, update_pia_pa)) MCFG_I8255_OUT_PORTB_CB(WRITE8(sitcom_state, update_pia_pb)) + MCFG_I8255_IN_PORTC_CB(IOPORT("PORTC")) // video hardware MCFG_DEVICE_ADD("ds0", DL1414T, 0) // left display @@ -185,8 +354,21 @@ MACHINE_CONFIG_START( sitcom, sitcom_state ) MACHINE_CONFIG_END +MACHINE_CONFIG_DERIVED_CLASS( sitcomtmr, sitcom, sitcom_timer_state ) + MCFG_DEVICE_ADD("ds2", DL1414T, 0) // remote display + MCFG_DL1414_UPDATE_HANDLER(WRITE16(sitcom_state, update_ds<2>)) + + MCFG_DEFAULT_LAYOUT(layout_sitcomtmr) +MACHINE_CONFIG_END + + ROM_START( sitcom ) - ROM_REGION( 0x8000, "maincpu", ROMREGION_ERASEFF ) + ROM_REGION( 0x8000, "bootstrap", ROMREGION_ERASEFF ) + ROM_LOAD( "boot8085.bin", 0x0000, 0x06b8, CRC(1b5e3310) SHA1(3323b65f0c10b7ab6bb75ec824e6d5fb643693a8) ) +ROM_END + +ROM_START( sitcomtmr ) + ROM_REGION( 0x8000, "bootstrap", ROMREGION_ERASEFF ) ROM_LOAD( "boot8085.bin", 0x0000, 0x06b8, CRC(1b5e3310) SHA1(3323b65f0c10b7ab6bb75ec824e6d5fb643693a8) ) ROM_END @@ -195,5 +377,6 @@ ROM_END /* Driver */ -/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */ -COMP( 2002, sitcom, 0, 0, sitcom, sitcom, driver_device, 0, "San Bergmans & Izabella Malcolm", "Sitcom", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW) +/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */ +COMP( 2002, sitcom, 0, 0, sitcom, sitcom, driver_device, 0, "San Bergmans & Izabella Malcolm", "Sitcom", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW) +COMP( 2002, sitcomtmr, sitcom, 0, sitcomtmr, sitcomtmr, driver_device, 0, "San Bergmans & Izabella Malcolm", "Sitcom Timer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW) diff --git a/src/mame/layout/sitcom.lay b/src/mame/layout/sitcom.lay index 4a6720ea3ae..b7e11f6460a 100644 --- a/src/mame/layout/sitcom.lay +++ b/src/mame/layout/sitcom.lay @@ -40,7 +40,7 @@ - + diff --git a/src/mame/layout/sitcomtmr.lay b/src/mame/layout/sitcomtmr.lay new file mode 100644 index 00000000000..b13f2d0172b --- /dev/null +++ b/src/mame/layout/sitcomtmr.lay @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 7b82302aa69..d7a6bb4cb06 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -33732,6 +33732,7 @@ simpsons4pa // GX072 (c) 1991 @source:sitcom.cpp sitcom // +sitcomtmr // @source:skeetsht.cpp popshot // (c) 1991 (prototype)