src/mess/drivers/vidbrain.c
| r7764 | r7765 | |
| 1 | 1 | /*************************************************************************** |
| 2 | 2 | |
| 3 | | VideoBrain |
| 3 | VideoBrain Family Computer |
| 4 | 4 | |
| 5 | 5 | http://www.seanriddle.com/vbinfo.html |
| 6 | 6 | http://www.seanriddle.com/videobrain.html |
| r7764 | r7765 | |
| 14 | 14 | TODO: |
| 15 | 15 | |
| 16 | 16 | - video |
| 17 | | - sound |
| 18 | | - cartridge |
| 19 | | - keyboard |
| 20 | | - 4 analog joysticks |
| 21 | | - memory mirrors |
| 22 | | - I/O map |
| 17 | - discrete sound |
| 18 | - keyboard column 8 |
| 19 | - joystick scan timer 555 |
| 23 | 20 | - expander 1 (cassette, RS-232) |
| 24 | 21 | - expander 2 (modem) |
| 25 | 22 | |
| r7764 | r7765 | |
| 28 | 25 | #include "emu.h" |
| 29 | 26 | #include "includes/vidbrain.h" |
| 30 | 27 | #include "cpu/f8/f8.h" |
| 28 | #include "devices/cartslot.h" |
| 29 | #include "devices/cassette.h" |
| 30 | #include "devices/messram.h" |
| 31 | #include "sound/discrete.h" |
| 31 | 32 | |
| 32 | | static ADDRESS_MAP_START(vidbrain_mem, ADDRESS_SPACE_PROGRAM, 8) |
| 33 | | AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0xc000) AM_ROM AM_REGION(F3850_TAG, 0) |
| 34 | | AM_RANGE(0x0c00, 0x0fff) AM_RAM |
| 35 | | // AM_RANGE(0x1000, 0x1fff) AM_ROM cartridge |
| 36 | | AM_RANGE(0x2000, 0x27ff) AM_ROM AM_REGION(F3850_TAG, 0x800) |
| 33 | /*************************************************************************** |
| 34 | READ/WRITE HANDLERS |
| 35 | ***************************************************************************/ |
| 36 | |
| 37 | /*------------------------------------------------- |
| 38 | keyboard_w - keyboard column write |
| 39 | -------------------------------------------------*/ |
| 40 | |
| 41 | WRITE8_HANDLER( keyboard_w ) |
| 42 | { |
| 43 | /* |
| 44 | |
| 45 | bit description |
| 46 | |
| 47 | 0 keyboard column 0, sound data 0 |
| 48 | 1 keyboard column 1, sound data 1 |
| 49 | 2 keyboard column 2 |
| 50 | 3 keyboard column 3 |
| 51 | 4 keyboard column 4 |
| 52 | 5 keyboard column 5 |
| 53 | 6 keyboard column 6 |
| 54 | 7 keyboard column 7 |
| 55 | |
| 56 | */ |
| 57 | |
| 58 | vidbrain_state *state = (vidbrain_state *)space->machine->driver_data; |
| 59 | |
| 60 | state->keylatch = data; |
| 61 | } |
| 62 | |
| 63 | /*------------------------------------------------- |
| 64 | keyboard_r - keyboard row read |
| 65 | -------------------------------------------------*/ |
| 66 | |
| 67 | READ8_HANDLER( keyboard_r ) |
| 68 | { |
| 69 | /* |
| 70 | |
| 71 | bit description |
| 72 | |
| 73 | 0 keyboard row 0 |
| 74 | 1 keyboard row 1 |
| 75 | 2 keyboard row 2 |
| 76 | 3 keyboard row 3 |
| 77 | 4 |
| 78 | 5 |
| 79 | 6 |
| 80 | 7 |
| 81 | |
| 82 | */ |
| 83 | |
| 84 | vidbrain_state *state = (vidbrain_state *)space->machine->driver_data; |
| 85 | |
| 86 | UINT8 data = input_port_read(space->machine, "JOY-R"); |
| 87 | |
| 88 | if (!BIT(state->keylatch, 0)) data &= input_port_read(space->machine, "IO00"); |
| 89 | if (!BIT(state->keylatch, 1)) data &= input_port_read(space->machine, "IO01"); |
| 90 | if (!BIT(state->keylatch, 2)) data &= input_port_read(space->machine, "IO02"); |
| 91 | if (!BIT(state->keylatch, 3)) data &= input_port_read(space->machine, "IO03"); |
| 92 | if (!BIT(state->keylatch, 4)) data &= input_port_read(space->machine, "IO04"); |
| 93 | if (!BIT(state->keylatch, 5)) data &= input_port_read(space->machine, "IO05"); |
| 94 | if (!BIT(state->keylatch, 6)) data &= input_port_read(space->machine, "IO06"); |
| 95 | if (!BIT(state->keylatch, 7)) data &= input_port_read(space->machine, "IO07"); |
| 96 | |
| 97 | return data; |
| 98 | } |
| 99 | |
| 100 | /*------------------------------------------------- |
| 101 | sound_w - sound clock write |
| 102 | -------------------------------------------------*/ |
| 103 | |
| 104 | WRITE8_HANDLER( sound_w ) |
| 105 | { |
| 106 | /* |
| 107 | |
| 108 | bit description |
| 109 | |
| 110 | 0 |
| 111 | 1 |
| 112 | 2 |
| 113 | 3 |
| 114 | 4 sound clock |
| 115 | 5 |
| 116 | 6 |
| 117 | 7 joystick enable |
| 118 | |
| 119 | */ |
| 120 | |
| 121 | vidbrain_state *state = (vidbrain_state *)space->machine->driver_data; |
| 122 | |
| 123 | /* sound clock */ |
| 124 | discrete_sound_w(state->discrete, NODE_01, BIT(state->keylatch, 0)); |
| 125 | discrete_sound_w(state->discrete, NODE_02, BIT(state->keylatch, 1)); |
| 126 | |
| 127 | /* joystick enable */ |
| 128 | state->joy_enable = BIT(data, 7); |
| 129 | } |
| 130 | |
| 131 | /*************************************************************************** |
| 132 | MEMORY MAPS |
| 133 | ***************************************************************************/ |
| 134 | |
| 135 | /*------------------------------------------------- |
| 136 | ADDRESS_MAP( vidbrain_mem ) |
| 137 | -------------------------------------------------*/ |
| 138 | |
| 139 | static ADDRESS_MAP_START( vidbrain_mem, ADDRESS_SPACE_PROGRAM, 8 ) |
| 140 | AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0xc000) AM_ROM |
| 141 | // AM_RANGE(0x0800, 0x08ff) video chip |
| 142 | AM_RANGE(0x0c00, 0x0fff) AM_MIRROR(0xe000) AM_RAM |
| 143 | AM_RANGE(0x1000, 0x1fff) AM_ROM |
| 144 | AM_RANGE(0x2000, 0x27ff) AM_MIRROR(0xc000) AM_ROM |
| 37 | 145 | ADDRESS_MAP_END |
| 38 | 146 | |
| 39 | | /* Input ports */ |
| 40 | | static INPUT_PORTS_START( vidbrain ) |
| 41 | | INPUT_PORTS_END |
| 147 | /*------------------------------------------------- |
| 148 | ADDRESS_MAP( vidbrain_io ) |
| 149 | -------------------------------------------------*/ |
| 42 | 150 | |
| 151 | static ADDRESS_MAP_START( vidbrain_io, ADDRESS_SPACE_IO, 8 ) |
| 152 | AM_RANGE(0x00, 0x00) AM_WRITE(keyboard_w) |
| 153 | AM_RANGE(0x01, 0x01) AM_READWRITE(keyboard_r, sound_w) |
| 154 | ADDRESS_MAP_END |
| 43 | 155 | |
| 44 | | static MACHINE_RESET(vidbrain) |
| 156 | /*************************************************************************** |
| 157 | INPUT PORTS |
| 158 | ***************************************************************************/ |
| 159 | |
| 160 | /*------------------------------------------------- |
| 161 | INPUT_PORTS( vidbrain ) |
| 162 | -------------------------------------------------*/ |
| 163 | |
| 164 | static INPUT_CHANGED( trigger_reset ) |
| 45 | 165 | { |
| 166 | cputag_set_input_line(field->port->machine, F3850_TAG, INPUT_LINE_RESET, newval ? CLEAR_LINE : ASSERT_LINE); |
| 46 | 167 | } |
| 47 | 168 | |
| 169 | static INPUT_PORTS_START( vidbrain ) |
| 170 | PORT_START("IO00") |
| 171 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('"') |
| 172 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('#') |
| 173 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("P \xC2\xA2") PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR(0x00a2) |
| 174 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("; \xC2\xB6") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(0x00b6) |
| 175 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 176 | |
| 177 | PORT_START("IO01") |
| 178 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('!') |
| 179 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR(')') |
| 180 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('$') |
| 181 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR('\'') PORT_CHAR('*') |
| 182 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 183 | |
| 184 | PORT_START("IO02") |
| 185 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Y \xC3\xB7") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR(0x00f7) |
| 186 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('(') |
| 187 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR(':') |
| 188 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) |
| 189 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 190 | |
| 191 | PORT_START("IO03") |
| 192 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("T \xC3\x97") PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR(0x00d7) |
| 193 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('/') |
| 194 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR(',') |
| 195 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ERASE RESTART") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) |
| 196 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 197 | |
| 198 | PORT_START("IO04") |
| 199 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('9') |
| 200 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('-') |
| 201 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('=') |
| 202 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE RUN/STOP") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') |
| 203 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 204 | |
| 205 | PORT_START("IO05") |
| 206 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('8') |
| 207 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('6') |
| 208 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('+') |
| 209 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPECIAL ALARM") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) |
| 210 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 211 | |
| 212 | PORT_START("IO06") |
| 213 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('7') |
| 214 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('5') |
| 215 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('3') |
| 216 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("NEXT CLOCK") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) |
| 217 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 218 | |
| 219 | PORT_START("IO07") |
| 220 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('%') |
| 221 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('4') |
| 222 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('2') |
| 223 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PREVIOUS COLOR") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) |
| 224 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 225 | |
| 226 | PORT_START("UV201-31") |
| 227 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('.') |
| 228 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('1') |
| 229 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('?') PORT_CHAR('0') |
| 230 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("BACK TEXT") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) |
| 231 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 232 | |
| 233 | PORT_START("RESET") |
| 234 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("MASTER CONTROL") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) PORT_CHANGED(trigger_reset, 0) |
| 235 | |
| 236 | PORT_START("JOY1-X") |
| 237 | PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_PLAYER(1) |
| 238 | |
| 239 | PORT_START("JOY1-Y") |
| 240 | PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_PLAYER(1) |
| 241 | |
| 242 | PORT_START("JOY2-X") |
| 243 | PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_PLAYER(2) |
| 244 | |
| 245 | PORT_START("JOY2-Y") |
| 246 | PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_PLAYER(2) |
| 247 | |
| 248 | PORT_START("JOY3-X") |
| 249 | PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_PLAYER(3) |
| 250 | |
| 251 | PORT_START("JOY3-Y") |
| 252 | PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_PLAYER(3) |
| 253 | |
| 254 | PORT_START("JOY4-X") |
| 255 | PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_PLAYER(4) |
| 256 | |
| 257 | PORT_START("JOY4-Y") |
| 258 | PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_PLAYER(4) |
| 259 | |
| 260 | PORT_START("JOY-R") |
| 261 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 262 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 263 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) |
| 264 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) |
| 265 | PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 266 | INPUT_PORTS_END |
| 267 | |
| 268 | /*************************************************************************** |
| 269 | VIDEO |
| 270 | ***************************************************************************/ |
| 271 | |
| 272 | /*------------------------------------------------- |
| 273 | VIDEO_START( vidbrain ) |
| 274 | -------------------------------------------------*/ |
| 275 | |
| 48 | 276 | static VIDEO_START( vidbrain ) |
| 49 | 277 | { |
| 50 | 278 | } |
| 51 | 279 | |
| 280 | /*------------------------------------------------- |
| 281 | VIDEO_UPDATE( vidbrain ) |
| 282 | -------------------------------------------------*/ |
| 283 | |
| 52 | 284 | static VIDEO_UPDATE( vidbrain ) |
| 53 | 285 | { |
| 54 | 286 | return 0; |
| 55 | 287 | } |
| 56 | 288 | |
| 57 | | /* F4 Character Displayer */ |
| 289 | /*------------------------------------------------- |
| 290 | gfx_layout vidbrain_charlayout |
| 291 | -------------------------------------------------*/ |
| 292 | |
| 58 | 293 | static const gfx_layout vidbrain_charlayout = |
| 59 | 294 | { |
| 60 | 295 | 8, 7, /* 8 x 7 characters */ |
| 61 | | 59, /* 59 characters */ |
| 62 | | 1, /* 1 bits per pixel */ |
| 296 | 59, /* 59 characters */ |
| 297 | 1, /* 1 bits per pixel */ |
| 63 | 298 | { 0 }, /* no bitplanes */ |
| 64 | 299 | /* x offsets */ |
| 65 | 300 | { 0, 1, 2, 3, 4, 5, 6, 7 }, |
| r7764 | r7765 | |
| 68 | 303 | 8*7 /* every char takes 7 bytes */ |
| 69 | 304 | }; |
| 70 | 305 | |
| 306 | /*------------------------------------------------- |
| 307 | GFXDECODE( vidbrain ) |
| 308 | -------------------------------------------------*/ |
| 309 | |
| 71 | 310 | static GFXDECODE_START( vidbrain ) |
| 72 | | GFXDECODE_ENTRY( F3850_TAG, 0x0810, vidbrain_charlayout, 0, 1 ) |
| 311 | GFXDECODE_ENTRY( F3850_TAG, 0x2010, vidbrain_charlayout, 0, 1 ) |
| 73 | 312 | GFXDECODE_END |
| 74 | 313 | |
| 314 | /*************************************************************************** |
| 315 | SOUND |
| 316 | ***************************************************************************/ |
| 317 | |
| 318 | /*------------------------------------------------- |
| 319 | DISCRETE_SOUND( vidbrain ) |
| 320 | -------------------------------------------------*/ |
| 321 | |
| 322 | static DISCRETE_SOUND_START( vidbrain ) |
| 323 | DISCRETE_INPUT_LOGIC(NODE_01) |
| 324 | DISCRETE_INPUT_LOGIC(NODE_02) |
| 325 | DISCRETE_OUTPUT(NODE_02, 5000) |
| 326 | DISCRETE_SOUND_END |
| 327 | |
| 328 | /*************************************************************************** |
| 329 | DEVICE CONFIGURATION |
| 330 | ***************************************************************************/ |
| 331 | |
| 332 | /*------------------------------------------------- |
| 333 | cassette_config vidbrain_cassette_config |
| 334 | -------------------------------------------------*/ |
| 335 | |
| 336 | static const cassette_config vidbrain_cassette_config = |
| 337 | { |
| 338 | cassette_default_formats, |
| 339 | NULL, |
| 340 | (cassette_state)(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED) |
| 341 | }; |
| 342 | |
| 343 | /*************************************************************************** |
| 344 | MACHINE INITIALIZATION |
| 345 | ***************************************************************************/ |
| 346 | |
| 347 | /*------------------------------------------------- |
| 348 | MACHINE_START( vidbrain ) |
| 349 | -------------------------------------------------*/ |
| 350 | |
| 351 | static MACHINE_START( vidbrain ) |
| 352 | { |
| 353 | vidbrain_state *state = (vidbrain_state *)machine->driver_data; |
| 354 | |
| 355 | /* find devices */ |
| 356 | state->discrete = devtag_get_device(machine, DISCRETE_TAG); |
| 357 | |
| 358 | /* register for state saving */ |
| 359 | state_save_register_global(machine, state->keylatch); |
| 360 | state_save_register_global(machine, state->joy_enable); |
| 361 | } |
| 362 | |
| 363 | /*************************************************************************** |
| 364 | MACHINE DRIVERS |
| 365 | ***************************************************************************/ |
| 366 | |
| 367 | /*------------------------------------------------- |
| 368 | MACHINE_DRIVER_START( vidbrain ) |
| 369 | -------------------------------------------------*/ |
| 370 | |
| 75 | 371 | static MACHINE_DRIVER_START( vidbrain ) |
| 76 | 372 | MDRV_DRIVER_DATA(vidbrain_state) |
| 77 | 373 | |
| 78 | 374 | /* basic machine hardware */ |
| 79 | 375 | MDRV_CPU_ADD(F3850_TAG, F8, XTAL_14_31818MHz/8) |
| 80 | 376 | MDRV_CPU_PROGRAM_MAP(vidbrain_mem) |
| 377 | MDRV_CPU_IO_MAP(vidbrain_io) |
| 81 | 378 | |
| 82 | | MDRV_MACHINE_RESET(vidbrain) |
| 379 | MDRV_MACHINE_START(vidbrain) |
| 83 | 380 | |
| 84 | 381 | /* video hardware */ |
| 85 | 382 | MDRV_SCREEN_ADD(SCREEN_TAG, RASTER) |
| r7764 | r7765 | |
| 89 | 386 | MDRV_SCREEN_SIZE(640, 480) |
| 90 | 387 | MDRV_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) |
| 91 | 388 | MDRV_GFXDECODE(vidbrain) |
| 92 | | MDRV_PALETTE_LENGTH(2) |
| 93 | | MDRV_PALETTE_INIT(black_and_white) |
| 389 | MDRV_PALETTE_LENGTH(16) |
| 94 | 390 | |
| 95 | 391 | MDRV_VIDEO_START(vidbrain) |
| 96 | 392 | MDRV_VIDEO_UPDATE(vidbrain) |
| 393 | |
| 394 | /* sound hardware */ |
| 395 | MDRV_SPEAKER_STANDARD_MONO("mono") |
| 396 | |
| 397 | MDRV_SOUND_ADD(DISCRETE_TAG, DISCRETE, 0) |
| 398 | MDRV_SOUND_CONFIG_DISCRETE(vidbrain) |
| 399 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 400 | |
| 401 | /* devices */ |
| 402 | MDRV_CASSETTE_ADD(CASSETTE_TAG, vidbrain_cassette_config) |
| 403 | |
| 404 | /* cartridge */ |
| 405 | MDRV_CARTSLOT_ADD("cart") |
| 406 | MDRV_CARTSLOT_EXTENSION_LIST("bin") |
| 407 | |
| 408 | /* internal ram */ |
| 409 | MDRV_RAM_ADD("messram") |
| 410 | MDRV_RAM_DEFAULT_SIZE("1K") |
| 97 | 411 | MACHINE_DRIVER_END |
| 98 | 412 | |
| 99 | | /* ROM definition */ |
| 413 | /*************************************************************************** |
| 414 | ROMS |
| 415 | ***************************************************************************/ |
| 416 | |
| 100 | 417 | ROM_START( vidbrain ) |
| 101 | | ROM_REGION( 0x1000, F3850_TAG, 0 ) |
| 102 | | ROM_LOAD( "res1.d67", 0x0000, 0x0800, CRC(065fe7c2) SHA1(9776f9b18cd4d7142e58eff45ac5ee4bc1fa5a2a) ) |
| 103 | | ROM_LOAD( "res2.e5", 0x0800, 0x0800, CRC(1d85d7be) SHA1(26c5a25d1289dedf107fa43aa8dfc14692fd9ee6) ) |
| 418 | ROM_REGION( 0x3000, F3850_TAG, 0 ) |
| 419 | ROM_LOAD( "res1.d67", 0x0000, 0x0800, CRC(065fe7c2) SHA1(9776f9b18cd4d7142e58eff45ac5ee4bc1fa5a2a) ) |
| 420 | ROM_CART_LOAD( "cart", 0x1000, 0x1000, 0 ) |
| 421 | ROM_LOAD( "res2.e5", 0x2000, 0x0800, CRC(1d85d7be) SHA1(26c5a25d1289dedf107fa43aa8dfc14692fd9ee6) ) |
| 104 | 422 | ROM_END |
| 105 | 423 | |
| 106 | | /* Driver */ |
| 424 | /*************************************************************************** |
| 425 | SYSTEM DRIVERS |
| 426 | ***************************************************************************/ |
| 107 | 427 | |
| 108 | | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 109 | | COMP( 1977, vidbrain, 0, 0, vidbrain, vidbrain, 0, "VideoBrain Computer Company", "VideoBrain Family Computer", GAME_NOT_WORKING | GAME_NO_SOUND ) |
| 428 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 429 | COMP( 1977, vidbrain, 0, 0, vidbrain, vidbrain, 0, "VideoBrain Computer Company", "VideoBrain Family Computer", GAME_NOT_WORKING | GAME_NO_SOUND ) |