trunk/src/mess/drivers/ravens.c
r0 | r22511 | |
| 1 | /*************************************************************************** |
| 2 | |
| 3 | Ravensburger Selbstbaucomputer |
| 4 | |
| 5 | This is a project described in "Ravensburger" magazine. You had to make |
| 6 | the entire thing (including the circuit boards) yourself. |
| 7 | |
| 8 | http://petersieg.bplaced.com/?2650_Computer:2650_Selbstbaucomputer |
| 9 | |
| 10 | 2013-04-23 Skeleton driver. |
| 11 | |
| 12 | Hardware: |
| 13 | 0000-07FF ROM "MON1" |
| 14 | 0800-1FFF RAM (3x HM6116) |
| 15 | 24 pushbuttons and 6-digit LED display on front panel. |
| 16 | Other buttons and switches on the main board. |
| 17 | |
| 18 | The few photos show the CPU and a number of ordinary 74LSxxx chips. |
| 19 | There is a XTAL of unknown frequency. |
| 20 | |
| 21 | There is a cassette interface.. |
| 22 | |
| 23 | ToDo: |
| 24 | - Everything |
| 25 | |
| 26 | ****************************************************************************/ |
| 27 | |
| 28 | #include "emu.h" |
| 29 | #include "cpu/s2650/s2650.h" |
| 30 | //#include "sound/speaker.h" |
| 31 | #include "ravens.lh" |
| 32 | |
| 33 | |
| 34 | class ravens_state : public driver_device |
| 35 | { |
| 36 | public: |
| 37 | ravens_state(const machine_config &mconfig, device_type type, const char *tag) |
| 38 | : driver_device(mconfig, type, tag), |
| 39 | m_maincpu(*this, "maincpu") |
| 40 | // , m_speaker(*this, "speaker") |
| 41 | { } |
| 42 | |
| 43 | 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; |
| 48 | required_device<cpu_device> m_maincpu; |
| 49 | // required_device<speaker_sound_device> m_speaker; |
| 50 | }; |
| 51 | |
| 52 | WRITE8_MEMBER( ravens_state::port00_w ) |
| 53 | { |
| 54 | output_set_digit_value(offset, data); |
| 55 | } |
| 56 | |
| 57 | WRITE8_MEMBER( ravens_state::port06_w ) |
| 58 | { |
| 59 | // m_speaker_state ^=1; |
| 60 | // speaker_level_w(m_speaker, m_speaker_state); |
| 61 | } |
| 62 | |
| 63 | READ8_MEMBER( ravens_state::port07_r ) |
| 64 | { |
| 65 | UINT8 keyin, i, data = 0x40; |
| 66 | |
| 67 | keyin = ioport("X0")->read(); |
| 68 | if (keyin != 0xff) |
| 69 | for (i = 0; i < 8; i++) |
| 70 | if BIT(~keyin, i) |
| 71 | data = i | 0xc0; |
| 72 | |
| 73 | keyin = ioport("X1")->read(); |
| 74 | if (keyin != 0xff) |
| 75 | for (i = 0; i < 8; i++) |
| 76 | if BIT(~keyin, i) |
| 77 | data = i | 0xc8; |
| 78 | |
| 79 | if (data == m_last_key) |
| 80 | data &= 0x7f; |
| 81 | else |
| 82 | m_last_key = data; |
| 83 | |
| 84 | data |= ioport("X2")->read(); |
| 85 | |
| 86 | return data; |
| 87 | } |
| 88 | |
| 89 | static ADDRESS_MAP_START( ravens_mem, AS_PROGRAM, 8, ravens_state ) |
| 90 | ADDRESS_MAP_UNMAP_HIGH |
| 91 | AM_RANGE( 0x0000, 0x07ff) AM_ROM |
| 92 | AM_RANGE( 0x0800, 0x1fff) AM_RAM |
| 93 | ADDRESS_MAP_END |
| 94 | |
| 95 | static ADDRESS_MAP_START( ravens_io, AS_IO, 8, ravens_state ) |
| 96 | 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) |
| 99 | AM_RANGE(0x07, 0x07) AM_READ(port07_r) // pushbuttons |
| 100 | //AM_RANGE(S2650_SENSE_PORT, S2650_FO_PORT) AM_READWRITE(ravens_cass_in,ravens_cass_out) |
| 101 | AM_RANGE(0x102, 0x103) AM_NOP // stops error log filling up while using debug |
| 102 | ADDRESS_MAP_END |
| 103 | |
| 104 | /* Input ports */ |
| 105 | static INPUT_PORTS_START( ravens ) |
| 106 | PORT_START("X0") |
| 107 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') |
| 108 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') |
| 109 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') |
| 110 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') |
| 111 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') |
| 112 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') |
| 113 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') |
| 114 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') |
| 115 | |
| 116 | PORT_START("X1") |
| 117 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') |
| 118 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') |
| 119 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A') |
| 120 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B') |
| 121 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C') |
| 122 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D') |
| 123 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E') |
| 124 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') |
| 125 | |
| 126 | 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('-') |
| 129 | INPUT_PORTS_END |
| 130 | |
| 131 | |
| 132 | static MACHINE_CONFIG_START( ravens, ravens_state ) |
| 133 | /* basic machine hardware */ |
| 134 | MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz) |
| 135 | MCFG_CPU_PROGRAM_MAP(ravens_mem) |
| 136 | MCFG_CPU_IO_MAP(ravens_io) |
| 137 | |
| 138 | /* video hardware */ |
| 139 | MCFG_DEFAULT_LAYOUT(layout_ravens) |
| 140 | |
| 141 | /* sound hardware */ |
| 142 | // MCFG_SPEAKER_STANDARD_MONO("mono") |
| 143 | // MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 144 | // MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 145 | MACHINE_CONFIG_END |
| 146 | |
| 147 | /* ROM definition */ |
| 148 | ROM_START( ravens ) |
| 149 | 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)) |
| 154 | ROM_END |
| 155 | |
| 156 | /* Driver */ |
| 157 | |
| 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 ) |