trunk/src/mess/drivers/ravens.c
| r22534 | r22535 | |
| 9 | 9 | |
| 10 | 10 | 2013-04-23 Skeleton driver. |
| 11 | 11 | |
| 12 | |
| 13 | Version 0.9 |
| 14 | ----------- |
| 12 | 15 | Hardware: |
| 13 | 16 | 0000-07FF ROM "MON1" |
| 14 | 17 | 0800-1FFF RAM (3x HM6116) |
| r22534 | r22535 | |
| 23 | 26 | ToDo: |
| 24 | 27 | - Everything |
| 25 | 28 | |
| 29 | Version V2.0 |
| 30 | ------------ |
| 31 | This used a terminal interface with a few non-standard control codes. |
| 32 | The pushbuttons and LEDs appear to have been done away with. |
| 33 | |
| 34 | Commands (must be in uppercase): |
| 35 | A ? |
| 36 | B ? |
| 37 | C ? |
| 38 | D Dump to screen |
| 39 | E Execute |
| 40 | I ? |
| 41 | L Load |
| 42 | R ? |
| 43 | V ? |
| 44 | |
| 26 | 45 | ****************************************************************************/ |
| 27 | 46 | |
| 28 | 47 | #include "emu.h" |
| 29 | 48 | #include "cpu/s2650/s2650.h" |
| 30 | 49 | //#include "sound/speaker.h" |
| 50 | #include "machine/terminal.h" |
| 31 | 51 | #include "ravens.lh" |
| 32 | 52 | |
| 33 | 53 | |
| r22534 | r22535 | |
| 38 | 58 | : driver_device(mconfig, type, tag), |
| 39 | 59 | m_maincpu(*this, "maincpu") |
| 40 | 60 | // , m_speaker(*this, "speaker") |
| 61 | , m_terminal(*this, TERMINAL_TAG) |
| 41 | 62 | { } |
| 42 | 63 | |
| 43 | 64 | DECLARE_READ8_MEMBER(port07_r); |
| 44 | | DECLARE_WRITE8_MEMBER(port00_w); |
| 45 | | DECLARE_WRITE8_MEMBER(port06_w); |
| 46 | | UINT8 m_last_key; |
| 47 | | bool m_speaker_state; |
| 65 | DECLARE_READ8_MEMBER(port17_r); |
| 66 | DECLARE_WRITE8_MEMBER(leds_w); |
| 67 | DECLARE_WRITE8_MEMBER(kbd_put); |
| 68 | // UINT8 m_last_key; |
| 69 | UINT8 m_term_data; |
| 70 | // bool m_speaker_state; |
| 48 | 71 | required_device<cpu_device> m_maincpu; |
| 49 | 72 | // required_device<speaker_sound_device> m_speaker; |
| 73 | optional_device<generic_terminal_device> m_terminal; |
| 50 | 74 | }; |
| 51 | 75 | |
| 52 | | WRITE8_MEMBER( ravens_state::port00_w ) |
| 76 | WRITE8_MEMBER( ravens_state::leds_w ) |
| 53 | 77 | { |
| 54 | 78 | output_set_digit_value(offset, data); |
| 55 | 79 | } |
| 56 | 80 | |
| 57 | | WRITE8_MEMBER( ravens_state::port06_w ) |
| 58 | | { |
| 81 | //WRITE8_MEMBER( ravens_state::port06_w ) |
| 82 | //{ |
| 59 | 83 | // m_speaker_state ^=1; |
| 60 | 84 | // speaker_level_w(m_speaker, m_speaker_state); |
| 61 | | } |
| 85 | //} |
| 62 | 86 | |
| 63 | 87 | READ8_MEMBER( ravens_state::port07_r ) |
| 64 | 88 | { |
| 65 | | UINT8 keyin, i, data = 0x40; |
| 89 | UINT8 ret = m_term_data; |
| 90 | m_term_data = 0x80; |
| 91 | return ret; |
| 92 | } |
| 66 | 93 | |
| 94 | READ8_MEMBER( ravens_state::port17_r ) |
| 95 | { |
| 96 | UINT8 keyin, i, data = 0x80; |
| 97 | |
| 67 | 98 | keyin = ioport("X0")->read(); |
| 68 | 99 | if (keyin != 0xff) |
| 69 | 100 | for (i = 0; i < 8; i++) |
| 70 | 101 | if BIT(~keyin, i) |
| 71 | | data = i | 0xc0; |
| 102 | return i; |
| 72 | 103 | |
| 73 | 104 | keyin = ioport("X1")->read(); |
| 74 | 105 | if (keyin != 0xff) |
| 75 | 106 | for (i = 0; i < 8; i++) |
| 76 | 107 | if BIT(~keyin, i) |
| 77 | | data = i | 0xc8; |
| 108 | return i | 8; |
| 78 | 109 | |
| 79 | | if (data == m_last_key) |
| 80 | | data &= 0x7f; |
| 81 | | else |
| 82 | | m_last_key = data; |
| 110 | keyin = ioport("X2")->read(); |
| 111 | if (keyin != 0xff) |
| 112 | for (i = 0; i < 8; i++) |
| 113 | if BIT(~keyin, i) |
| 114 | return i<<4; |
| 83 | 115 | |
| 84 | | data |= ioport("X2")->read(); |
| 116 | keyin = ioport("X3")->read(); |
| 117 | if (keyin != 0xff) |
| 118 | for (i = 0; i < 8; i++) |
| 119 | if BIT(~keyin, i) |
| 120 | return (i | 8)<<4; |
| 85 | 121 | |
| 122 | // if (data == m_last_key) |
| 123 | // data &= 0x7f; |
| 124 | // else |
| 125 | // m_last_key = data; |
| 126 | |
| 86 | 127 | return data; |
| 87 | 128 | } |
| 88 | 129 | |
| r22534 | r22535 | |
| 94 | 135 | |
| 95 | 136 | static ADDRESS_MAP_START( ravens_io, AS_IO, 8, ravens_state ) |
| 96 | 137 | ADDRESS_MAP_UNMAP_HIGH |
| 97 | | AM_RANGE(0x00, 0x03) AM_WRITE(port00_w) // 4-led display |
| 98 | | AM_RANGE(0x06, 0x06) AM_WRITE(port06_w) // speaker (NOT a keyclick) |
| 138 | AM_RANGE(0x10, 0x15) AM_WRITE(leds_w) // 6-led display |
| 139 | // AM_RANGE(0x06, 0x06) AM_WRITE(port06_w) // speaker (NOT a keyclick) |
| 140 | AM_RANGE(0x17, 0x17) AM_READ(port17_r) // pushbuttons |
| 141 | //AM_RANGE(S2650_SENSE_PORT, S2650_FO_PORT) AM_READWRITE(ravens_cass_in,ravens_cass_out) |
| 142 | AM_RANGE(0x102, 0x103) AM_NOP // stops error log filling up while using debug |
| 143 | ADDRESS_MAP_END |
| 144 | |
| 145 | static ADDRESS_MAP_START( ravens2_io, AS_IO, 8, ravens_state ) |
| 146 | ADDRESS_MAP_UNMAP_HIGH |
| 99 | 147 | AM_RANGE(0x07, 0x07) AM_READ(port07_r) // pushbuttons |
| 148 | AM_RANGE(0x1b, 0x1b) AM_WRITENOP // signals a character is being sent to terminal, we dont need |
| 149 | AM_RANGE(0x1c, 0x1c) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write) |
| 100 | 150 | //AM_RANGE(S2650_SENSE_PORT, S2650_FO_PORT) AM_READWRITE(ravens_cass_in,ravens_cass_out) |
| 101 | 151 | AM_RANGE(0x102, 0x103) AM_NOP // stops error log filling up while using debug |
| 102 | 152 | ADDRESS_MAP_END |
| r22534 | r22535 | |
| 124 | 174 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') |
| 125 | 175 | |
| 126 | 176 | PORT_START("X2") |
| 127 | | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("NXT") PORT_CODE(KEYCODE_UP) PORT_CHAR('^') |
| 128 | | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ADR") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') |
| 177 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("NXT") PORT_CODE(KEYCODE_UP) PORT_CHAR('^') |
| 178 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ADR") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') |
| 179 | PORT_BIT(0xCF, IP_ACTIVE_LOW, IPT_UNUSED) |
| 180 | |
| 181 | PORT_START("X3") |
| 182 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') |
| 183 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('W') |
| 129 | 184 | INPUT_PORTS_END |
| 130 | 185 | |
| 186 | WRITE8_MEMBER( ravens_state::kbd_put ) |
| 187 | { |
| 188 | m_term_data = data; |
| 189 | } |
| 131 | 190 | |
| 191 | static GENERIC_TERMINAL_INTERFACE( terminal_intf ) |
| 192 | { |
| 193 | DEVCB_DRIVER_MEMBER(ravens_state, kbd_put) |
| 194 | }; |
| 195 | |
| 132 | 196 | static MACHINE_CONFIG_START( ravens, ravens_state ) |
| 133 | 197 | /* basic machine hardware */ |
| 134 | | MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz) |
| 198 | MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz) // frequency is unknown |
| 135 | 199 | MCFG_CPU_PROGRAM_MAP(ravens_mem) |
| 136 | 200 | MCFG_CPU_IO_MAP(ravens_io) |
| 137 | 201 | |
| r22534 | r22535 | |
| 144 | 208 | // MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 145 | 209 | MACHINE_CONFIG_END |
| 146 | 210 | |
| 211 | static MACHINE_CONFIG_START( ravens2, ravens_state ) |
| 212 | /* basic machine hardware */ |
| 213 | MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz) // frequency is unknown |
| 214 | MCFG_CPU_PROGRAM_MAP(ravens_mem) |
| 215 | MCFG_CPU_IO_MAP(ravens2_io) |
| 216 | |
| 217 | /* video hardware */ |
| 218 | MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) |
| 219 | |
| 220 | /* sound hardware */ |
| 221 | // MCFG_SPEAKER_STANDARD_MONO("mono") |
| 222 | // MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 223 | // MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 224 | MACHINE_CONFIG_END |
| 225 | |
| 147 | 226 | /* ROM definition */ |
| 148 | 227 | ROM_START( ravens ) |
| 149 | 228 | ROM_REGION( 0x8000, "maincpu", 0 ) |
| 150 | | ROM_SYSTEM_BIOS(0, "v2.0", "V2.0") |
| 151 | | ROMX_LOAD( "mon_v2.0.bin", 0x0000, 0x0800, CRC(bcd47c58) SHA1(f261a3f128fbedbf59a8b5480758fff4d7f76de1), ROM_BIOS(1)) |
| 152 | | ROM_SYSTEM_BIOS(1, "v0.9", "V0.9") |
| 153 | | ROMX_LOAD( "mon_v0.9.bin", 0x0000, 0x0800, CRC(785eb1ad) SHA1(c316b8ac32ab6aa37746af37b9f81a23367fedd8), ROM_BIOS(2)) |
| 229 | ROM_LOAD( "mon_v0.9.bin", 0x0000, 0x0800, CRC(785eb1ad) SHA1(c316b8ac32ab6aa37746af37b9f81a23367fedd8)) |
| 154 | 230 | ROM_END |
| 155 | 231 | |
| 232 | ROM_START( ravens2 ) |
| 233 | ROM_REGION( 0x8000, "maincpu", 0 ) |
| 234 | ROM_LOAD( "mon_v2.0.bin", 0x0000, 0x0800, CRC(bcd47c58) SHA1(f261a3f128fbedbf59a8b5480758fff4d7f76de1)) |
| 235 | ROM_END |
| 236 | |
| 156 | 237 | /* Driver */ |
| 157 | 238 | |
| 158 | | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 159 | | COMP( 1979, ravens, 0, 0, ravens, ravens, driver_device, 0, "Joseph Glagla and Dieter Feiler", "Ravensburger Selbstbaucomputer", GAME_NOT_WORKING | GAME_NO_SOUND_HW ) |
| 239 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ |
| 240 | 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 ) |
| 241 | 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 ) |