From 913db8bbcb05de1192ef50eecaa17d340e91e935 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Thu, 25 Apr 2013 04:19:31 +0000 Subject: [PATCH] (MESS) ravens WIP --- src/mess/drivers/ravens.c | 136 ++++++++++++++++++++++++++++++-------- src/mess/mess.lst | 1 + 2 files changed, 110 insertions(+), 27 deletions(-) diff --git a/src/mess/drivers/ravens.c b/src/mess/drivers/ravens.c index 63d8a3a2963..ec50a593cc3 100644 --- a/src/mess/drivers/ravens.c +++ b/src/mess/drivers/ravens.c @@ -9,6 +9,9 @@ http://petersieg.bplaced.com/?2650_Computer:2650_Selbstbaucomputer 2013-04-23 Skeleton driver. + +Version 0.9 +----------- Hardware: 0000-07FF ROM "MON1" 0800-1FFF RAM (3x HM6116) @@ -23,11 +26,28 @@ There is a cassette interface.. ToDo: - Everything +Version V2.0 +------------ +This used a terminal interface with a few non-standard control codes. +The pushbuttons and LEDs appear to have been done away with. + +Commands (must be in uppercase): +A ? +B ? +C ? +D Dump to screen +E Execute +I ? +L Load +R ? +V ? + ****************************************************************************/ #include "emu.h" #include "cpu/s2650/s2650.h" //#include "sound/speaker.h" +#include "machine/terminal.h" #include "ravens.lh" @@ -38,50 +58,71 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu") // , m_speaker(*this, "speaker") + , m_terminal(*this, TERMINAL_TAG) { } DECLARE_READ8_MEMBER(port07_r); - DECLARE_WRITE8_MEMBER(port00_w); - DECLARE_WRITE8_MEMBER(port06_w); - UINT8 m_last_key; - bool m_speaker_state; + DECLARE_READ8_MEMBER(port17_r); + DECLARE_WRITE8_MEMBER(leds_w); + DECLARE_WRITE8_MEMBER(kbd_put); +// UINT8 m_last_key; + UINT8 m_term_data; +// bool m_speaker_state; required_device m_maincpu; // required_device m_speaker; + optional_device m_terminal; }; -WRITE8_MEMBER( ravens_state::port00_w ) +WRITE8_MEMBER( ravens_state::leds_w ) { output_set_digit_value(offset, data); } -WRITE8_MEMBER( ravens_state::port06_w ) -{ +//WRITE8_MEMBER( ravens_state::port06_w ) +//{ // m_speaker_state ^=1; // speaker_level_w(m_speaker, m_speaker_state); -} +//} READ8_MEMBER( ravens_state::port07_r ) { - UINT8 keyin, i, data = 0x40; + UINT8 ret = m_term_data; + m_term_data = 0x80; + return ret; +} + +READ8_MEMBER( ravens_state::port17_r ) +{ + UINT8 keyin, i, data = 0x80; keyin = ioport("X0")->read(); if (keyin != 0xff) for (i = 0; i < 8; i++) if BIT(~keyin, i) - data = i | 0xc0; + return i; keyin = ioport("X1")->read(); if (keyin != 0xff) for (i = 0; i < 8; i++) if BIT(~keyin, i) - data = i | 0xc8; + return i | 8; - if (data == m_last_key) - data &= 0x7f; - else - m_last_key = data; + keyin = ioport("X2")->read(); + if (keyin != 0xff) + for (i = 0; i < 8; i++) + if BIT(~keyin, i) + return i<<4; - data |= ioport("X2")->read(); + keyin = ioport("X3")->read(); + if (keyin != 0xff) + for (i = 0; i < 8; i++) + if BIT(~keyin, i) + return (i | 8)<<4; + +// if (data == m_last_key) +// data &= 0x7f; +// else +// m_last_key = data; return data; } @@ -94,9 +135,18 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( ravens_io, AS_IO, 8, ravens_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x00, 0x03) AM_WRITE(port00_w) // 4-led display - AM_RANGE(0x06, 0x06) AM_WRITE(port06_w) // speaker (NOT a keyclick) + AM_RANGE(0x10, 0x15) AM_WRITE(leds_w) // 6-led display +// AM_RANGE(0x06, 0x06) AM_WRITE(port06_w) // speaker (NOT a keyclick) + AM_RANGE(0x17, 0x17) AM_READ(port17_r) // pushbuttons + //AM_RANGE(S2650_SENSE_PORT, S2650_FO_PORT) AM_READWRITE(ravens_cass_in,ravens_cass_out) + AM_RANGE(0x102, 0x103) AM_NOP // stops error log filling up while using debug +ADDRESS_MAP_END + +static ADDRESS_MAP_START( ravens2_io, AS_IO, 8, ravens_state ) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x07, 0x07) AM_READ(port07_r) // pushbuttons + AM_RANGE(0x1b, 0x1b) AM_WRITENOP // signals a character is being sent to terminal, we dont need + AM_RANGE(0x1c, 0x1c) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write) //AM_RANGE(S2650_SENSE_PORT, S2650_FO_PORT) AM_READWRITE(ravens_cass_in,ravens_cass_out) AM_RANGE(0x102, 0x103) AM_NOP // stops error log filling up while using debug ADDRESS_MAP_END @@ -124,14 +174,28 @@ static INPUT_PORTS_START( ravens ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_START("X2") - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("NXT") PORT_CODE(KEYCODE_UP) PORT_CHAR('^') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ADR") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("NXT") PORT_CODE(KEYCODE_UP) PORT_CHAR('^') + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ADR") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') + PORT_BIT(0xCF, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("X3") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('W') INPUT_PORTS_END +WRITE8_MEMBER( ravens_state::kbd_put ) +{ + m_term_data = data; +} + +static GENERIC_TERMINAL_INTERFACE( terminal_intf ) +{ + DEVCB_DRIVER_MEMBER(ravens_state, kbd_put) +}; static MACHINE_CONFIG_START( ravens, ravens_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz) + MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz) // frequency is unknown MCFG_CPU_PROGRAM_MAP(ravens_mem) MCFG_CPU_IO_MAP(ravens_io) @@ -144,16 +208,34 @@ static MACHINE_CONFIG_START( ravens, ravens_state ) // MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) MACHINE_CONFIG_END +static MACHINE_CONFIG_START( ravens2, ravens_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz) // frequency is unknown + MCFG_CPU_PROGRAM_MAP(ravens_mem) + MCFG_CPU_IO_MAP(ravens2_io) + + /* video hardware */ + MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) + + /* sound hardware */ +// MCFG_SPEAKER_STANDARD_MONO("mono") +// MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) +// MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) +MACHINE_CONFIG_END + /* ROM definition */ ROM_START( ravens ) ROM_REGION( 0x8000, "maincpu", 0 ) - ROM_SYSTEM_BIOS(0, "v2.0", "V2.0") - ROMX_LOAD( "mon_v2.0.bin", 0x0000, 0x0800, CRC(bcd47c58) SHA1(f261a3f128fbedbf59a8b5480758fff4d7f76de1), ROM_BIOS(1)) - ROM_SYSTEM_BIOS(1, "v0.9", "V0.9") - ROMX_LOAD( "mon_v0.9.bin", 0x0000, 0x0800, CRC(785eb1ad) SHA1(c316b8ac32ab6aa37746af37b9f81a23367fedd8), ROM_BIOS(2)) + ROM_LOAD( "mon_v0.9.bin", 0x0000, 0x0800, CRC(785eb1ad) SHA1(c316b8ac32ab6aa37746af37b9f81a23367fedd8)) +ROM_END + +ROM_START( ravens2 ) + ROM_REGION( 0x8000, "maincpu", 0 ) + ROM_LOAD( "mon_v2.0.bin", 0x0000, 0x0800, CRC(bcd47c58) SHA1(f261a3f128fbedbf59a8b5480758fff4d7f76de1)) ROM_END /* Driver */ -/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ -COMP( 1979, ravens, 0, 0, ravens, ravens, driver_device, 0, "Joseph Glagla and Dieter Feiler", "Ravensburger Selbstbaucomputer", GAME_NOT_WORKING | GAME_NO_SOUND_HW ) +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +COMP( 1985, ravens, 0, 0, ravens, ravens, driver_device, 0, "Joseph Glagla and Dieter Feiler", "Ravensburger Selbstbaucomputer V0.9", GAME_NOT_WORKING | GAME_NO_SOUND_HW ) +COMP( 1985, ravens2, ravens, 0, ravens2, ravens, driver_device, 0, "Joseph Glagla and Dieter Feiler", "Ravensburger Selbstbaucomputer V2.0", GAME_NOT_WORKING | GAME_NO_SOUND_HW ) diff --git a/src/mess/mess.lst b/src/mess/mess.lst index 33ee6e86ff8..7b90e2db00d 100644 --- a/src/mess/mess.lst +++ b/src/mess/mess.lst @@ -2209,3 +2209,4 @@ binbug dg680 besta88 ravens +ravens2