diff options
Diffstat (limited to 'src/mame/drivers/sitcom.cpp')
-rw-r--r-- | src/mame/drivers/sitcom.cpp | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/src/mame/drivers/sitcom.cpp b/src/mame/drivers/sitcom.cpp new file mode 100644 index 00000000000..4f98a75a42d --- /dev/null +++ b/src/mame/drivers/sitcom.cpp @@ -0,0 +1,135 @@ +// license:BSD-3-Clause +// copyright-holders:Robbbert +/*************************************************************************** + + SITCOM (known as Sitcom, Sitcom85, Sitcom8085) + + 25/09/2011 Driver [Robbbert] + + http://www.izabella.me.uk/html/sitcom_.html + http://www.sbprojects.com/sitcom/sitcom.htm + + The display consists of a LED connected to SOD, and a pair of + DL1414 intelligent alphanumeric displays. + + The idea of this device is that you write a 8085 program with an + assembler on your PC. You then compile it, and then send it to + the SITCOM via a serial cable. The program then (hopefully) runs + on the SITCOM. With the 8255 expansion, you could wire up input + devices or other hardware for your program to use. + + The SOD LED blinks slowly while waiting; stays on while downloading; + and blinks quickly if an error occurs. + + After a successful download, the ROM is switched out and the RAM + mirrored to the lower 32k. The downloaded program is then executed. + This part is not emulated. + + In MESS, start emulation. After about 10 seconds the display will + scroll sideways with a message and a weblink. There are no input keys. + +****************************************************************************/ + +#include "emu.h" +#include "cpu/i8085/i8085.h" +#include "video/dl1416.h" +#include "sitcom.lh" + + + +class sitcom_state : public driver_device +{ +public: + sitcom_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_ds0(*this, "ds0"), + m_ds1(*this, "ds1") + { } + + required_device<cpu_device> m_maincpu; + required_device<dl1416_device> m_ds0; + required_device<dl1416_device> m_ds1; + DECLARE_WRITE_LINE_MEMBER(sod_led); + DECLARE_READ_LINE_MEMBER(sid_line); + virtual void machine_reset(); + DECLARE_WRITE16_MEMBER(sitcom_update_ds0); + DECLARE_WRITE16_MEMBER(sitcom_update_ds1); +}; + +static ADDRESS_MAP_START( sitcom_mem, AS_PROGRAM, 8, sitcom_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x07ff) AM_ROM + AM_RANGE(0x8000, 0xffff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( sitcom_io, AS_IO, 8, sitcom_state ) + ADDRESS_MAP_UNMAP_HIGH + ADDRESS_MAP_GLOBAL_MASK(0xff) + // AM_RANGE(0x00, 0x1f) 8255 for expansion only + AM_RANGE(0xc0, 0xc3) AM_DEVWRITE("ds0", dl1416_device, data_w) //left display + AM_RANGE(0xe0, 0xe3) AM_DEVWRITE("ds1", dl1416_device, data_w) //right display +ADDRESS_MAP_END + +/* Input ports */ +static INPUT_PORTS_START( sitcom ) +INPUT_PORTS_END + +void sitcom_state::machine_reset() +{ + m_ds0->ce_w(0); // enable + m_ds0->wr_w(0); + m_ds0->cu_w(1); // no cursor + m_ds1->ce_w(0); + m_ds1->wr_w(0); + m_ds1->cu_w(1); +} + +WRITE16_MEMBER(sitcom_state::sitcom_update_ds0) +{ + output_set_digit_value(offset, data); +} + +WRITE16_MEMBER(sitcom_state::sitcom_update_ds1) +{ + output_set_digit_value(4 + offset, data); +} + +// SID line used as serial input from a pc +READ_LINE_MEMBER( sitcom_state::sid_line ) +{ + return 1; //idle - changing to 0 gives a FR ERROR +} + +WRITE_LINE_MEMBER( sitcom_state::sod_led ) +{ + output_set_value("sod_led", state); +} + +static 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 + MCFG_CPU_PROGRAM_MAP(sitcom_mem) + MCFG_CPU_IO_MAP(sitcom_io) + MCFG_I8085A_SID(READLINE(sitcom_state, sid_line)) + MCFG_I8085A_SOD(WRITELINE(sitcom_state, sod_led)) + + MCFG_DEFAULT_LAYOUT(layout_sitcom) + + /* video hardware */ + MCFG_DEVICE_ADD("ds0", DL1416B, 0) + MCFG_DL1416_UPDATE_HANDLER(WRITE16(sitcom_state, sitcom_update_ds0)) + MCFG_DEVICE_ADD("ds1", DL1416B, 0) + MCFG_DL1416_UPDATE_HANDLER(WRITE16(sitcom_state, sitcom_update_ds1)) +MACHINE_CONFIG_END + +/* ROM definition */ +ROM_START( sitcom ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "boot8085.bin", 0x0000, 0x06b8, CRC(1b5e3310) SHA1(3323b65f0c10b7ab6bb75ec824e6d5fb643693a8)) +ROM_END + +/* Driver */ + +/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ +COMP( 2002, sitcom, 0, 0, sitcom, sitcom, driver_device, 0, "San Bergmans & Izabella Malcolm", "Sitcom", MACHINE_NO_SOUND_HW) |