src/mess/drivers/bob85.c
| r9803 | r9804 | |
| 9 | 9 | |
| 10 | 10 | #include "emu.h" |
| 11 | 11 | #include "cpu/i8085/i8085.h" |
| 12 | #include "devices/cassette.h" |
| 12 | 13 | #include "bob85.lh" |
| 13 | 14 | |
| 14 | 15 | |
| r9803 | r9804 | |
| 23 | 24 | }; |
| 24 | 25 | |
| 25 | 26 | |
| 26 | | static ADDRESS_MAP_START(bob85_mem, ADDRESS_SPACE_PROGRAM, 8) |
| 27 | | ADDRESS_MAP_UNMAP_HIGH |
| 28 | | AM_RANGE( 0x0000, 0x02ff ) AM_ROM |
| 29 | | AM_RANGE( 0x0300, 0x1fff ) AM_RAM |
| 30 | | ADDRESS_MAP_END |
| 31 | 27 | |
| 32 | | |
| 33 | 28 | static READ8_HANDLER(bob85_keyboard_r) |
| 34 | 29 | { |
| 35 | 30 | bob85_state *state = space->machine->driver_data<bob85_state>(); |
| r9803 | r9804 | |
| 100 | 95 | output_set_digit_value(offset,BITSWAP8( data,3,2,1,0,7,6,5,4 )); |
| 101 | 96 | } |
| 102 | 97 | |
| 103 | | static ADDRESS_MAP_START( bob85_io , ADDRESS_SPACE_IO, 8) |
| 98 | static ADDRESS_MAP_START( bob85_mem, ADDRESS_SPACE_PROGRAM, 8 ) |
| 104 | 99 | ADDRESS_MAP_UNMAP_HIGH |
| 105 | | AM_RANGE ( 0x0A, 0x0A ) AM_READ(bob85_keyboard_r) |
| 106 | | AM_RANGE ( 0x0A, 0x0F ) AM_WRITE(bob85_7seg_w) |
| 100 | AM_RANGE(0x0000, 0x02ff) AM_ROM |
| 101 | AM_RANGE(0x0600, 0x09ff) AM_RAM |
| 107 | 102 | ADDRESS_MAP_END |
| 108 | 103 | |
| 104 | static ADDRESS_MAP_START( bob85_io, ADDRESS_SPACE_IO, 8 ) |
| 105 | ADDRESS_MAP_UNMAP_HIGH |
| 106 | AM_RANGE(0x0a, 0x0a) AM_READ(bob85_keyboard_r) |
| 107 | AM_RANGE(0x0a, 0x0f) AM_WRITE(bob85_7seg_w) |
| 108 | ADDRESS_MAP_END |
| 109 | |
| 109 | 110 | /* Input ports */ |
| 110 | 111 | static INPUT_PORTS_START( bob85 ) |
| 111 | 112 | PORT_START("LINE0") |
| 112 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') |
| 113 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') |
| 114 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') |
| 115 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') |
| 116 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') |
| 117 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') |
| 118 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') |
| 119 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') |
| 113 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') |
| 114 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') |
| 115 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') |
| 116 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') |
| 117 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') |
| 118 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') |
| 119 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') |
| 120 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') |
| 121 | |
| 120 | 122 | PORT_START("LINE1") |
| 121 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') |
| 122 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') |
| 123 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') |
| 124 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') |
| 125 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') |
| 126 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') |
| 127 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') |
| 128 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') |
| 123 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') |
| 124 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') |
| 125 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') |
| 126 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') |
| 127 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') |
| 128 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') |
| 129 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') |
| 130 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') |
| 131 | |
| 129 | 132 | PORT_START("LINE2") |
| 130 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("GO") PORT_CODE(KEYCODE_F1) |
| 131 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SMEM") PORT_CODE(KEYCODE_F2) |
| 132 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("REC") PORT_CODE(KEYCODE_F3) |
| 133 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("VEK1") PORT_CODE(KEYCODE_F4) |
| 134 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("VEK2") PORT_CODE(KEYCODE_F5) |
| 135 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("NEXT") PORT_CODE(KEYCODE_F6) |
| 136 | | PORT_BIT(0xC0, IP_ACTIVE_HIGH, IPT_UNUSED) |
| 133 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("GO") PORT_CODE(KEYCODE_F1) |
| 134 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SMEM") PORT_CODE(KEYCODE_F2) |
| 135 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("REC") PORT_CODE(KEYCODE_F3) |
| 136 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("VEK1") PORT_CODE(KEYCODE_F4) |
| 137 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("VEK2") PORT_CODE(KEYCODE_F5) |
| 138 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("NEXT") PORT_CODE(KEYCODE_F6) |
| 139 | PORT_BIT(0xC0, IP_ACTIVE_HIGH, IPT_UNUSED) |
| 137 | 140 | INPUT_PORTS_END |
| 138 | 141 | |
| 139 | | |
| 140 | 142 | static MACHINE_RESET(bob85) |
| 141 | 143 | { |
| 142 | 144 | } |
| 143 | 145 | |
| 146 | static const cassette_config bob85_cassette_config = |
| 147 | { |
| 148 | cassette_default_formats, |
| 149 | NULL, |
| 150 | (cassette_state)(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED), |
| 151 | NULL |
| 152 | }; |
| 153 | |
| 154 | static WRITE_LINE_DEVICE_HANDLER( sod_w ) |
| 155 | { |
| 156 | cassette_output(device, state ? +1.0 : -1.0); |
| 157 | } |
| 158 | |
| 159 | static READ_LINE_DEVICE_HANDLER( sid_r ) |
| 160 | { |
| 161 | return cassette_input(device) > 0.0; |
| 162 | } |
| 163 | |
| 164 | static I8085_CONFIG( cpu_config ) |
| 165 | { |
| 166 | DEVCB_NULL, /* STATUS changed callback */ |
| 167 | DEVCB_NULL, /* INTE changed callback */ |
| 168 | DEVCB_DEVICE_LINE("cassette", sid_r), /* SID changed callback (I8085A only) */ |
| 169 | DEVCB_DEVICE_LINE("cassette", sod_w) /* SOD changed callback (I8085A only) */ |
| 170 | }; |
| 171 | |
| 144 | 172 | static MACHINE_CONFIG_START( bob85, bob85_state ) |
| 145 | 173 | /* basic machine hardware */ |
| 146 | | MDRV_CPU_ADD("maincpu",I8085A, 2000000) |
| 174 | MDRV_CPU_ADD("maincpu", I8085A, XTAL_5MHz) |
| 147 | 175 | MDRV_CPU_PROGRAM_MAP(bob85_mem) |
| 148 | 176 | MDRV_CPU_IO_MAP(bob85_io) |
| 177 | MDRV_CPU_CONFIG(cpu_config) |
| 149 | 178 | |
| 150 | 179 | MDRV_MACHINE_RESET(bob85) |
| 151 | 180 | |
| 152 | 181 | /* video hardware */ |
| 153 | 182 | MDRV_DEFAULT_LAYOUT(layout_bob85) |
| 183 | |
| 184 | // devices |
| 185 | MDRV_CASSETTE_ADD("cassette", bob85_cassette_config) |
| 154 | 186 | MACHINE_CONFIG_END |
| 155 | 187 | |
| 156 | 188 | /* ROM definition */ |
| 157 | 189 | ROM_START( bob85 ) |
| 158 | | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) |
| 159 | | ROM_LOAD( "bob85.rom", 0x0000, 0x0300, CRC(adde33a8) SHA1(00f26dd0c52005e7705e6cc9cb11a20e572682c6)) |
| 190 | ROM_REGION( 0x600, "maincpu", ROMREGION_ERASEFF ) |
| 191 | ROM_LOAD( "bob85.rom", 0x0000, 0x0300, BAD_DUMP CRC(adde33a8) SHA1(00f26dd0c52005e7705e6cc9cb11a20e572682c6) ) // should be 6 separate 74S287's (256x4) |
| 160 | 192 | ROM_END |
| 161 | 193 | |
| 162 | 194 | /* Driver */ |
| 163 | 195 | |
| 164 | 196 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 165 | | COMP( 19??, bob85, 0, 0, bob85, bob85, 0, "<unknown>", "BOB85", GAME_NOT_WORKING | GAME_NO_SOUND) |
| 197 | COMP( 1984, bob85, 0, 0, bob85, bob85, 0, "Josef Kratochvil", "BOB-85", GAME_NOT_WORKING | GAME_NO_SOUND) |