src/mame/drivers/amaticmg.c
| r15021 | r15022 | |
| 1 | 1 | /********************************************************************************** |
| 2 | 2 | |
| 3 | AMA-8000-1 / AMA-8000-2 Multi Game System. |
| 4 | Amatic Trading GmbH. |
| 3 | 5 | |
| 4 | | AMATIC - MULTI GAME SYSTEM |
| 5 | | -------------------------- |
| 6 | Encrypted gambling hardware based on a custom CPU. |
| 6 | 7 | |
| 7 | | Preliminary driver by Roberto Fresca. |
| 8 | Driver by Roberto Fresca & Angelo Salese. |
| 8 | 9 | |
| 9 | 10 | |
| 10 | | Encrypted gambling hardware based on a custom CPU. |
| 11 | | |
| 12 | | |
| 13 | 11 | *********************************************************************************** |
| 14 | 12 | |
| 15 | | |
| 16 | 13 | Hardware Notes |
| 17 | 14 | -------------- |
| 18 | 15 | |
| 19 | 16 | ------------------------------------------------ |
| 20 | | Board #1 (unknown slots game) |
| 17 | Board #1 (Super Stars) AMA-8000-1 |
| 21 | 18 | ------------------------------------------------ |
| 22 | 19 | |
| 23 | 20 | 1x 40-pin custom CPU labeled: |
| r15021 | r15022 | |
| 58 | 55 | |
| 59 | 56 | |
| 60 | 57 | ------------------------------------------------ |
| 61 | | Multi-Game I v2.4 |
| 58 | Multi-Game I v2.4 (AMA-8000-2) |
| 62 | 59 | ------------------------------------------------ |
| 63 | 60 | |
| 64 | 61 | 1x 40-pin custom CPU labeled: |
| r15021 | r15022 | |
| 185 | 182 | |
| 186 | 183 | |
| 187 | 184 | ------------------------------------------------ |
| 188 | | Multi-Game III v3.5 |
| 185 | Multi-Game III v3.5 (AMA-8000-2) |
| 189 | 186 | ------------------------------------------------ |
| 190 | 187 | |
| 191 | 188 | 1x 40-pin custom CPU labeled: |
| r15021 | r15022 | |
| 229 | 226 | *********************************************************************************** |
| 230 | 227 | |
| 231 | 228 | |
| 232 | | Memory Map |
| 233 | | ---------- |
| 229 | Memory Map |
| 230 | ---------- |
| 234 | 231 | |
| 235 | | $00000 - $FFFFF Still unknown... |
| 232 | 0000-7FFF ROM Space. |
| 233 | 8000-9FFF NVRAM. |
| 234 | A000-AFFF Video RAM. |
| 235 | B000-BFFF RAM. |
| 236 | C000-FFFF ROM Banking |
| 236 | 237 | |
| 238 | I/O |
| 237 | 239 | |
| 240 | 00-03 PPI 8255 0 |
| 241 | 20-23 PPI 8255 1 |
| 242 | 40-41 YM3812 Sound device. |
| 243 | 60-60 MC6845 CRTC Address. |
| 244 | 61-61 MC6845 CRTC Register. |
| 245 | 80-80 unknown (W) |
| 246 | C0-C0 ROM Bank selector. |
| 247 | E6-E6 NMI Mask. |
| 248 | |
| 249 | |
| 238 | 250 | *********************************************************************************** |
| 239 | 251 | |
| 240 | 252 | +------------------------------------------------------------------------------+ |
| r15021 | r15022 | |
| 350 | 362 | *********************************************************************************** |
| 351 | 363 | |
| 352 | 364 | |
| 365 | [2012/04/23] |
| 366 | |
| 367 | - A lot of work on AMA-8000-1 machine and gfx. |
| 368 | - Identified the slots game as Super Stars. |
| 369 | - Changed am_uslot to suprstar. |
| 370 | - Reworked inputs from the scratch. |
| 371 | - Added support for outputs: lamps & counters. |
| 372 | - Added a button-lamps layout. |
| 373 | - Promoted the game to working state. |
| 374 | - Added technical notes. |
| 375 | - Renamed amaticmg3 to amaticmg2 since is the AMA-8000-2 system. |
| 376 | - Found the hopper motor signal. Mapped the hopper pay pulse to |
| 377 | key 'Q'. Now is possible to payout manually, avoiding the hang |
| 378 | for hopper empty or timeout. |
| 379 | |
| 353 | 380 | [2009/09/11] |
| 354 | 381 | |
| 355 | 382 | - Initial release. |
| r15021 | r15022 | |
| 362 | 389 | |
| 363 | 390 | *** TO DO *** |
| 364 | 391 | |
| 365 | | - Decrypt the program ROMs. |
| 366 | | - Identify the CPU type. |
| 367 | | - Memory map. |
| 392 | - Super Stars: video garbage at first boot (doesn't happen if you soft-reset), btanb? |
| 368 | 393 | - Hook the remaining GFX bitplanes. |
| 369 | | - CRTC |
| 370 | | - Proper inputs. |
| 371 | 394 | - Color decode routines. |
| 372 | | - Sound support. |
| 395 | - Remaining sound devices. |
| 396 | - Hopper as device... ;) |
| 373 | 397 | |
| 374 | 398 | |
| 375 | 399 | ***********************************************************************************/ |
| r15021 | r15022 | |
| 384 | 408 | #include "emu.h" |
| 385 | 409 | #include "cpu/z80/z80.h" |
| 386 | 410 | #include "video/mc6845.h" |
| 387 | | #include "machine/8255ppi.h" |
| 411 | #include "machine/i8255.h" |
| 388 | 412 | #include "sound/3812intf.h" |
| 389 | 413 | #include "sound/dac.h" |
| 390 | 414 | |
| 415 | #include "suprstar.lh" |
| 391 | 416 | |
| 417 | |
| 392 | 418 | class amaticmg_state : public driver_device |
| 393 | 419 | { |
| 394 | 420 | public: |
| 395 | 421 | amaticmg_state(const machine_config &mconfig, device_type type, const char *tag) |
| 396 | | : driver_device(mconfig, type, tag) { } |
| 422 | : driver_device(mconfig, type, tag), |
| 423 | m_attr(*this, "attr"), |
| 424 | m_vram(*this, "vram") |
| 425 | { } |
| 397 | 426 | |
| 427 | required_shared_ptr<UINT8> m_attr; |
| 428 | required_shared_ptr<UINT8> m_vram; |
| 429 | |
| 430 | DECLARE_WRITE8_MEMBER(rombank_w); |
| 431 | DECLARE_WRITE8_MEMBER(nmi_mask_w); |
| 432 | DECLARE_WRITE8_MEMBER(unk80_w); |
| 433 | |
| 434 | UINT8 m_nmi_mask; |
| 398 | 435 | }; |
| 399 | 436 | |
| 400 | 437 | |
| r15021 | r15022 | |
| 408 | 445 | |
| 409 | 446 | static SCREEN_UPDATE_IND16( amaticmg ) |
| 410 | 447 | { |
| 448 | amaticmg_state *state = screen.machine().driver_data<amaticmg_state>(); |
| 449 | const gfx_element *gfx = screen.machine().gfx[0]; |
| 450 | int y,x; |
| 451 | int count = 0; |
| 452 | |
| 453 | for (y=0;y<32;y++) |
| 454 | { |
| 455 | for (x=0;x<96;x++) |
| 456 | { |
| 457 | UINT16 tile = state->m_vram[count]; |
| 458 | UINT8 color; |
| 459 | |
| 460 | tile += ((state->m_attr[count]&0x0f)<<8); |
| 461 | /* TODO: this looks so out of place ... */ |
| 462 | color = (state->m_attr[count]&0xf0)>>3; |
| 463 | |
| 464 | drawgfx_opaque(bitmap,cliprect,gfx,tile,color,0,0,x*4,y*8); |
| 465 | count++; |
| 466 | } |
| 467 | } |
| 468 | |
| 411 | 469 | return 0; |
| 412 | 470 | } |
| 413 | 471 | |
| 472 | static SCREEN_UPDATE_IND16( amaticmg2 ) |
| 473 | { |
| 474 | amaticmg_state *state = screen.machine().driver_data<amaticmg_state>(); |
| 475 | const gfx_element *gfx = screen.machine().gfx[0]; |
| 476 | int y,x; |
| 477 | int count = 0; |
| 478 | |
| 479 | for (y=0;y<32;y++) |
| 480 | { |
| 481 | for (x=0;x<96;x++) |
| 482 | { |
| 483 | UINT16 tile = state->m_vram[count]; |
| 484 | UINT8 color; |
| 485 | |
| 486 | tile += ((state->m_attr[count]&0xff)<<8); |
| 487 | color = 0; |
| 488 | |
| 489 | drawgfx_opaque(bitmap,cliprect,gfx,tile,color,0,0,x*4,y*8); |
| 490 | count++; |
| 491 | } |
| 492 | } |
| 493 | |
| 494 | return 0; |
| 495 | } |
| 496 | |
| 414 | 497 | static PALETTE_INIT( amaticmg ) |
| 415 | 498 | { |
| 416 | 499 | const UINT8 *color_prom = machine.root_device().memregion("proms")->base(); |
| r15021 | r15022 | |
| 422 | 505 | bit0 = 0; |
| 423 | 506 | bit1 = (color_prom[0] >> 6) & 0x01; |
| 424 | 507 | bit2 = (color_prom[0] >> 7) & 0x01; |
| 425 | | b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; |
| 426 | | bit0 = (color_prom[0] >> 3) & 0x01; |
| 427 | | bit1 = (color_prom[0] >> 4) & 0x01; |
| 428 | | bit2 = (color_prom[0] >> 5) & 0x01; |
| 429 | 508 | g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; |
| 430 | 509 | bit0 = (color_prom[0] >> 0) & 0x01; |
| 431 | 510 | bit1 = (color_prom[0] >> 1) & 0x01; |
| 432 | 511 | bit2 = (color_prom[0] >> 2) & 0x01; |
| 433 | 512 | r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; |
| 513 | bit0 = (color_prom[0] >> 3) & 0x01; |
| 514 | bit1 = (color_prom[0] >> 4) & 0x01; |
| 515 | bit2 = (color_prom[0] >> 5) & 0x01; |
| 516 | b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; |
| 434 | 517 | |
| 435 | 518 | palette_set_color(machine, i, MAKE_RGB(r, g, b)); |
| 436 | 519 | color_prom++; |
| r15021 | r15022 | |
| 438 | 521 | } |
| 439 | 522 | |
| 440 | 523 | |
| 441 | | static PALETTE_INIT( amaticmg3 ) |
| 524 | static PALETTE_INIT( amaticmg2 ) |
| 442 | 525 | { |
| 443 | 526 | const UINT8 *color_prom = machine.root_device().memregion("proms")->base(); |
| 444 | 527 | int r, g, b; |
| r15021 | r15022 | |
| 459 | 542 | * Read/Write Handlers * |
| 460 | 543 | ************************************/ |
| 461 | 544 | |
| 545 | WRITE8_MEMBER( amaticmg_state::rombank_w ) |
| 546 | { |
| 547 | membank("bank1")->set_entry(data & 0xf); |
| 548 | } |
| 462 | 549 | |
| 550 | WRITE8_MEMBER( amaticmg_state::nmi_mask_w ) |
| 551 | { |
| 552 | m_nmi_mask = (data & 1) ^ 1; |
| 553 | } |
| 463 | 554 | |
| 555 | static WRITE8_DEVICE_HANDLER(out_a_w) |
| 556 | { |
| 557 | /* LAMPS A: |
| 558 | |
| 559 | 7654 3210 |
| 560 | x--- -xxx (unknown) |
| 561 | ---- x--- START |
| 562 | ---x ---- BET |
| 563 | --x- ---- HOLD3 |
| 564 | -x-- ---- HOLD4 |
| 565 | */ |
| 566 | |
| 567 | output_set_lamp_value(0, (data >> 3) & 1); /* START */ |
| 568 | output_set_lamp_value(1, (data >> 4) & 1); /* BET */ |
| 569 | output_set_lamp_value(2, (data >> 5) & 1); /* HOLD3 */ |
| 570 | output_set_lamp_value(3, (data >> 6) & 1); /* HOLD4 */ |
| 571 | |
| 572 | logerror("port A: %2X\n", data); |
| 573 | } |
| 574 | |
| 575 | static WRITE8_DEVICE_HANDLER(out_c_w) |
| 576 | { |
| 577 | /* LAMPS B: |
| 578 | |
| 579 | 7654 3210 |
| 580 | ---- ---x Coin Out counter |
| 581 | ---- --x- HOLD1 |
| 582 | ---- -x-- Coin In counter |
| 583 | ---x ---- HOLD2 |
| 584 | -x-- ---- CANCEL |
| 585 | x--- ---- Hopper motor |
| 586 | --x- x--- (unknown) |
| 587 | */ |
| 588 | output_set_lamp_value(4, (data >> 1) & 1); /* HOLD1 */ |
| 589 | output_set_lamp_value(5, (data >> 4) & 1); /* HOLD2 */ |
| 590 | output_set_lamp_value(6, (data >> 6) & 1); /* CANCEL */ |
| 591 | |
| 592 | // coin_counter_w(machine(), 0, data & 0x04); /* Coin In */ |
| 593 | // coin_counter_w(machine(), 1, data & 0x01); /* Coin Out */ |
| 594 | |
| 595 | logerror("port C: %2X\n", data); |
| 596 | } |
| 597 | |
| 598 | WRITE8_MEMBER( amaticmg_state::unk80_w ) |
| 599 | { |
| 600 | // dac_data_w(machine().device("dac"), data & 0x01); /* Sound DAC */ |
| 601 | } |
| 602 | |
| 603 | |
| 604 | |
| 464 | 605 | /************************************ |
| 465 | 606 | * Memory Map Information * |
| 466 | 607 | ************************************/ |
| 467 | 608 | |
| 468 | 609 | static ADDRESS_MAP_START( amaticmg_map, AS_PROGRAM, 8, amaticmg_state ) |
| 469 | | AM_RANGE(0x00000, 0x3ffff) AM_ROM |
| 470 | | // AM_RANGE(0x0000, 0x0000) AM_RAM // AM_SHARE("nvram") |
| 471 | | // AM_RANGE(0x0000, 0x0000) AM_DEVWRITE_LEGACY("crtc", mc6845_address_w) |
| 472 | | // AM_RANGE(0x0000, 0x0000) AM_DEVREADWRITE_LEGACY("crtc", mc6845_register_r, mc6845_register_w) |
| 473 | | // AM_RANGE(0x0000, 0x0000) AM_RAM_WRITE_LEGACY(amaticmg_videoram_w) AM_BASE_LEGACY(&amaticmg_videoram) |
| 474 | | // AM_RANGE(0x0000, 0x0000) AM_RAM_WRITE_LEGACY(amaticmg_colorram_w) AM_BASE_LEGACY(&amaticmg_colorram) |
| 610 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 611 | AM_RANGE(0x8000, 0x9fff) AM_RAM // AM_SHARE("nvram") |
| 612 | AM_RANGE(0xa000, 0xafff) AM_RAM AM_SHARE("vram") |
| 613 | AM_RANGE(0xb000, 0xbfff) AM_RAM AM_SHARE("attr") |
| 614 | AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bank1") |
| 475 | 615 | ADDRESS_MAP_END |
| 476 | 616 | |
| 477 | 617 | static ADDRESS_MAP_START( amaticmg_portmap, AS_IO, 8, amaticmg_state ) |
| 478 | 618 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 479 | | // AM_RANGE(0x00, 0x00) AM_DEVREADWRITE_LEGACY("ppi8255_0", ppi8255_r, ppi8255_w) |
| 480 | | // AM_RANGE(0x00, 0x00) AM_DEVREADWRITE_LEGACY("ppi8255_1", ppi8255_r, ppi8255_w) |
| 619 | AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write) |
| 620 | AM_RANGE(0x20, 0x23) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) |
| 621 | AM_RANGE(0x40, 0x41) AM_DEVWRITE_LEGACY("ymsnd", ym3812_w) |
| 622 | AM_RANGE(0x60, 0x60) AM_DEVWRITE("crtc", mc6845_device, address_w) |
| 623 | AM_RANGE(0x61, 0x61) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w) |
| 624 | AM_RANGE(0x80, 0x80) AM_WRITE(unk80_w) |
| 625 | AM_RANGE(0xc0, 0xc0) AM_WRITE(rombank_w) |
| 481 | 626 | // AM_RANGE(0x00, 0x00) AM_DEVREADWRITE_LEGACY("ppi8255_2", ppi8255_r, ppi8255_w) |
| 482 | | // AM_RANGE(0x00, 0x00) AM_DEVWRITE_LEGACY("ymsnd", ym3812_w) |
| 483 | 627 | // AM_RANGE(0x00, 0x00) AM_DEVWRITE_LEGACY("dac1", dac_signed_w) |
| 484 | 628 | // AM_RANGE(0x00, 0x00) AM_DEVWRITE_LEGACY("dac2", dac_signed_w) |
| 485 | 629 | |
| 486 | 630 | ADDRESS_MAP_END |
| 487 | 631 | |
| 632 | static ADDRESS_MAP_START( amaticmg2_portmap, AS_IO, 8, amaticmg_state ) |
| 633 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 634 | // ADDRESS_MAP_UNMAP_HIGH |
| 635 | AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write) |
| 636 | AM_RANGE(0x20, 0x23) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) |
| 637 | AM_RANGE(0x40, 0x41) AM_DEVWRITE_LEGACY("ymsnd", ym3812_w) |
| 638 | AM_RANGE(0x60, 0x60) AM_DEVWRITE("crtc", mc6845_device, address_w) |
| 639 | AM_RANGE(0x61, 0x61) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w) |
| 640 | AM_RANGE(0xc0, 0xc0) AM_WRITE(rombank_w) |
| 641 | AM_RANGE(0xe6, 0xe6) AM_WRITE(nmi_mask_w) |
| 642 | ADDRESS_MAP_END |
| 643 | |
| 644 | |
| 488 | 645 | /* |
| 489 | 646 | Unknown R/W |
| 490 | 647 | ----------- |
| r15021 | r15022 | |
| 499 | 656 | |
| 500 | 657 | static INPUT_PORTS_START( amaticmg ) |
| 501 | 658 | PORT_START("IN0") |
| 502 | | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-1") PORT_CODE(KEYCODE_1) |
| 503 | | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-2") PORT_CODE(KEYCODE_2) |
| 504 | | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-3") PORT_CODE(KEYCODE_3) |
| 505 | | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-4") PORT_CODE(KEYCODE_4) |
| 506 | | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-5") PORT_CODE(KEYCODE_5) |
| 507 | | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-6") PORT_CODE(KEYCODE_6) |
| 508 | | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-7") PORT_CODE(KEYCODE_7) |
| 509 | | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-8") PORT_CODE(KEYCODE_8) |
| 659 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 660 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 661 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 662 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 663 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 664 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 665 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 666 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("Coin 1 (Muenze 1)") PORT_IMPULSE(3) |
| 510 | 667 | |
| 511 | 668 | PORT_START("IN1") |
| 512 | | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-1") PORT_CODE(KEYCODE_Q) |
| 513 | | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-2") PORT_CODE(KEYCODE_W) |
| 514 | | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-3") PORT_CODE(KEYCODE_E) |
| 515 | | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-4") PORT_CODE(KEYCODE_R) |
| 516 | | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-5") PORT_CODE(KEYCODE_T) |
| 517 | | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-6") PORT_CODE(KEYCODE_Y) |
| 518 | | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-7") PORT_CODE(KEYCODE_U) |
| 519 | | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-8") PORT_CODE(KEYCODE_I) |
| 669 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 670 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Service B (Dienst B") PORT_CODE(KEYCODE_8) PORT_TOGGLE |
| 671 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME("Coin 2 (Muenze 2)") PORT_IMPULSE(3) |
| 672 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Hopper Payout pulse") PORT_IMPULSE(3) PORT_CODE(KEYCODE_Q) // Hopper paying pulse |
| 673 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 674 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_W) // 'Ausgegeben 0 - Hopper Leer' (spent 0 - hopper empty) |
| 675 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 (Halten 3)") |
| 676 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 (Halten 2)") |
| 520 | 677 | |
| 521 | 678 | PORT_START("IN2") |
| 522 | | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-1") PORT_CODE(KEYCODE_A) |
| 523 | | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-2") PORT_CODE(KEYCODE_S) |
| 524 | | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-3") PORT_CODE(KEYCODE_D) |
| 525 | | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-4") PORT_CODE(KEYCODE_F) |
| 526 | | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-5") PORT_CODE(KEYCODE_G) |
| 527 | | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-6") PORT_CODE(KEYCODE_H) |
| 528 | | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-7") PORT_CODE(KEYCODE_J) |
| 529 | | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-8") PORT_CODE(KEYCODE_K) |
| 679 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start") |
| 680 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Clear / Take (Loeschen)") |
| 681 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 (Halten 1)") |
| 682 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service A (Dienst A") PORT_CODE(KEYCODE_7) PORT_TOGGLE |
| 683 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_NAME("Bet (Setzen) / Half Take") |
| 684 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Service C (Dienst C") PORT_CODE(KEYCODE_9) PORT_TOGGLE |
| 685 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service (Master)") PORT_CODE(KEYCODE_0) |
| 686 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 (Halten 4)") |
| 530 | 687 | |
| 531 | 688 | PORT_START("IN3") |
| 532 | | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-1") PORT_CODE(KEYCODE_Z) |
| 533 | | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-2") PORT_CODE(KEYCODE_X) |
| 534 | | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-3") PORT_CODE(KEYCODE_C) |
| 535 | | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-4") PORT_CODE(KEYCODE_V) |
| 536 | | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-5") PORT_CODE(KEYCODE_B) |
| 537 | | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-6") PORT_CODE(KEYCODE_N) |
| 538 | | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-7") PORT_CODE(KEYCODE_M) |
| 539 | | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("3-8") PORT_CODE(KEYCODE_L) |
| 689 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 690 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 691 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 692 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 693 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 694 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 695 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 696 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 540 | 697 | |
| 541 | 698 | PORT_START("SW1") |
| 542 | | PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) |
| 543 | | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 544 | | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 545 | | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
| 546 | | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 547 | | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 548 | | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) |
| 549 | | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 550 | | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 551 | | PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) |
| 552 | | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 553 | | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 554 | | PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) |
| 555 | | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 556 | | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 557 | | PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) |
| 558 | | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) |
| 559 | | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 560 | | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) |
| 561 | | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 562 | | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 563 | | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
| 564 | | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 565 | | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 699 | PORT_DIPNAME( 0x01, 0x01, "DIP1") PORT_DIPLOCATION("DIP:1") |
| 700 | PORT_DIPSETTING( 0x01, "Off (Aus)" ) |
| 701 | PORT_DIPSETTING( 0x00, "On (Ein)" ) |
| 702 | PORT_DIPNAME( 0x02, 0x02, "DIP2") PORT_DIPLOCATION("DIP:2") |
| 703 | PORT_DIPSETTING( 0x02, "Off (Aus)" ) |
| 704 | PORT_DIPSETTING( 0x00, "On (Ein)" ) |
| 705 | PORT_DIPNAME( 0x04, 0x04, "Coin 1 (Muenzen 1)" ) PORT_DIPLOCATION("DIP:3") |
| 706 | PORT_DIPSETTING( 0x04, "10" ) |
| 707 | PORT_DIPSETTING( 0x00, "5" ) |
| 708 | PORT_DIPNAME( 0x08, 0x08, "Coin 2 (Muenzen 2)" ) PORT_DIPLOCATION("DIP:4") |
| 709 | PORT_DIPSETTING( 0x08, "100" ) |
| 710 | PORT_DIPSETTING( 0x00, "5" ) |
| 711 | PORT_DIPNAME( 0x10, 0x10, "Jackpot") PORT_DIPLOCATION("DIP:5") |
| 712 | PORT_DIPSETTING( 0x10, "Jackpot KZB") |
| 713 | PORT_DIPSETTING( 0x00, "Jackpot LZB") |
| 714 | PORT_DIPNAME( 0x20, 0x20, "Fruechtebonus" ) PORT_DIPLOCATION("DIP:6") |
| 715 | PORT_DIPSETTING( 0x20, "Fruechtebonus Bleibt" ) |
| 716 | PORT_DIPSETTING( 0x00, "Fruechtebonus Clear" ) |
| 717 | PORT_DIPNAME( 0x40, 0x40, "DIP7") PORT_DIPLOCATION("DIP:7") |
| 718 | PORT_DIPSETTING( 0x40, "Off (Aus)" ) |
| 719 | PORT_DIPSETTING( 0x00, "On (Ein)" ) |
| 720 | PORT_DIPNAME( 0x80, 0x80, "BH") PORT_DIPLOCATION("DIP:8") |
| 721 | PORT_DIPSETTING( 0x80, "BH Dreifach") |
| 722 | PORT_DIPSETTING( 0x00, "BH Normal") |
| 566 | 723 | INPUT_PORTS_END |
| 567 | 724 | |
| 568 | 725 | |
| r15021 | r15022 | |
| 575 | 732 | 4,8, |
| 576 | 733 | RGN_FRAC(1,2), |
| 577 | 734 | 4, |
| 578 | | { RGN_FRAC(0,2) + 0, RGN_FRAC(0,2) + 4, RGN_FRAC(1,2) + 0, RGN_FRAC(1,2) + 4 }, //TODO: rom order is unknown |
| 579 | | { 3, 2, 1, 0 }, /* tiles are x-flipped */ |
| 735 | { RGN_FRAC(0,2), RGN_FRAC(0,2) + 4, RGN_FRAC(1,2), RGN_FRAC(1,2) + 4 }, |
| 736 | { 3, 2, 1, 0 }, |
| 580 | 737 | { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, |
| 581 | 738 | 8*4*2 |
| 582 | 739 | }; |
| r15021 | r15022 | |
| 586 | 743 | 4,8, |
| 587 | 744 | RGN_FRAC(1,3), |
| 588 | 745 | 6, |
| 589 | | { RGN_FRAC(0,3) + 0, RGN_FRAC(0,3) + 4, RGN_FRAC(1,3) + 0, RGN_FRAC(1,3) + 4,RGN_FRAC(2,3) + 0, RGN_FRAC(2,3) + 4, }, //TODO: rom order is unknown |
| 746 | { RGN_FRAC(0,3) + 0, RGN_FRAC(0,3) + 4, RGN_FRAC(1,3) + 0, RGN_FRAC(1,3) + 4,RGN_FRAC(2,3) + 0, RGN_FRAC(2,3) + 4, }, |
| 590 | 747 | { 3, 2, 1, 0 }, /* tiles are x-flipped */ |
| 591 | 748 | { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, |
| 592 | 749 | 8*4*2 |
| r15021 | r15022 | |
| 601 | 758 | GFXDECODE_ENTRY( "gfx1", 0x0000, charlayout_4bpp, 0, 0x20 ) |
| 602 | 759 | GFXDECODE_END |
| 603 | 760 | |
| 604 | | static GFXDECODE_START( amaticmg3 ) |
| 605 | | GFXDECODE_ENTRY( "gfx1", 0x0000, charlayout_6bpp, 0, 0x20 ) |
| 761 | static GFXDECODE_START( amaticmg2 ) |
| 762 | GFXDECODE_ENTRY( "gfx1", 0x0000, charlayout_6bpp, 0, 0x10000/0x40 ) |
| 606 | 763 | GFXDECODE_END |
| 607 | 764 | |
| 608 | 765 | /************************************ |
| 609 | 766 | * Sound Interface * |
| 610 | 767 | ************************************/ |
| 611 | 768 | |
| 612 | | //static const ym3812_interface ym3812_config = |
| 613 | | //{ |
| 614 | | // sound_irq |
| 615 | | //}; |
| 769 | static const ym3812_interface ym3812_config = |
| 770 | { |
| 771 | 0 |
| 772 | }; |
| 616 | 773 | |
| 617 | 774 | |
| 618 | 775 | /************************************ |
| 619 | 776 | * CRTC Interface * |
| 620 | 777 | ************************************/ |
| 621 | 778 | |
| 622 | | //static const mc6845_interface mc6845_intf = |
| 623 | | //{ |
| 624 | | // "screen", /* screen we are acting on */ |
| 625 | | // 8, /* number of pixels per video memory address */ |
| 626 | | // NULL, /* before pixel update callback */ |
| 627 | | // NULL, /* row update callback */ |
| 628 | | // NULL, /* after pixel update callback */ |
| 629 | | // DEVCB_NULL, /* callback for display state changes */ |
| 630 | | // DEVCB_NULL, /* callback for cursor state changes */ |
| 631 | | // DEVCB_NULL, /* HSYNC callback */ |
| 632 | | // DEVCB_NULL, /* VSYNC callback */ |
| 633 | | // NULL /* update address callback */ |
| 634 | | //}; |
| 779 | static const mc6845_interface mc6845_intf = |
| 780 | { |
| 781 | "screen", /* screen we are acting on */ |
| 782 | 4, /* number of pixels per video memory address */ |
| 783 | NULL, /* before pixel update callback */ |
| 784 | NULL, /* row update callback */ |
| 785 | NULL, /* after pixel update callback */ |
| 786 | DEVCB_NULL, /* callback for display state changes */ |
| 787 | DEVCB_NULL, /* callback for cursor state changes */ |
| 788 | DEVCB_NULL, /* HSYNC callback */ |
| 789 | DEVCB_NULL, /* VSYNC callback */ |
| 790 | NULL /* update address callback */ |
| 791 | }; |
| 635 | 792 | |
| 636 | 793 | |
| 637 | 794 | /************************************ |
| 638 | 795 | * PPI 8255 (x3) Interface * |
| 639 | 796 | ************************************/ |
| 640 | 797 | |
| 641 | | //static const ppi8255_interface ppi8255_intf[3] = |
| 642 | | //{ |
| 643 | | // { /* (00-00) Mode X - Port X set as input */ |
| 644 | | // DEVCB_NULL, /* Port A read */ |
| 645 | | // DEVCB_NULL, /* Port B read */ |
| 646 | | // DEVCB_NULL, /* Port C read */ |
| 647 | | // DEVCB_NULL, /* Port A write */ |
| 648 | | // DEVCB_NULL, /* Port B write */ |
| 649 | | // DEVCB_NULL, /* Port C write */ |
| 650 | | // }, |
| 651 | | // { /* (00-00) Mode X - Port X set as input */ |
| 652 | | // DEVCB_NULL, /* Port A read */ |
| 653 | | // DEVCB_NULL, /* Port B read */ |
| 654 | | // DEVCB_NULL, /* Port C read */ |
| 655 | | // DEVCB_NULL, /* Port A write */ |
| 656 | | // DEVCB_NULL, /* Port B write */ |
| 657 | | // DEVCB_NULL, /* Port C write */ |
| 658 | | // }, |
| 659 | | // { /* (00-00) Mode X - Port X set as input */ |
| 660 | | // DEVCB_NULL, /* Port A read */ |
| 661 | | // DEVCB_NULL, /* Port B read */ |
| 662 | | // DEVCB_NULL, /* Port C read */ |
| 663 | | // DEVCB_NULL, /* Port A write */ |
| 664 | | // DEVCB_NULL, /* Port B write */ |
| 665 | | // DEVCB_NULL, /* Port C write */ |
| 666 | | // } |
| 667 | | //}; |
| 798 | static I8255A_INTERFACE( ppi8255_intf_0 ) |
| 799 | { |
| 800 | DEVCB_INPUT_PORT("IN0"), /* Port A read */ |
| 801 | DEVCB_NULL, /* Port A write */ |
| 802 | DEVCB_INPUT_PORT("IN1"), /* Port B read */ |
| 803 | DEVCB_NULL, /* Port B write */ |
| 804 | DEVCB_INPUT_PORT("IN2"), /* Port C read */ |
| 805 | DEVCB_NULL /* Port C write */ |
| 806 | }; |
| 668 | 807 | |
| 808 | static I8255A_INTERFACE( ppi8255_intf_1 ) |
| 809 | { |
| 810 | DEVCB_NULL, /* Port A read */ |
| 811 | DEVCB_HANDLER(out_a_w), /* Port A write */ |
| 812 | DEVCB_INPUT_PORT("SW1"), /* Port B read */ |
| 813 | DEVCB_NULL, /* Port B write */ |
| 814 | DEVCB_NULL, /* Port C read */ |
| 815 | DEVCB_HANDLER(out_c_w) /* Port C write */ |
| 816 | }; |
| 817 | |
| 818 | static MACHINE_START( amaticmg ) |
| 819 | { |
| 820 | UINT8 *rombank = machine.root_device().memregion("maincpu")->base(); |
| 821 | |
| 822 | machine.root_device().membank("bank1")->configure_entries(0, 0x10, &rombank[0x8000], 0x4000); |
| 823 | } |
| 824 | |
| 825 | static MACHINE_RESET( amaticmg ) |
| 826 | { |
| 827 | amaticmg_state *state = machine.driver_data<amaticmg_state>(); |
| 828 | |
| 829 | state->membank("bank1")->set_entry(0); |
| 830 | state->m_nmi_mask = 0; |
| 831 | } |
| 832 | |
| 669 | 833 | /************************************ |
| 670 | 834 | * Machine Drivers * |
| 671 | 835 | ************************************/ |
| r15021 | r15022 | |
| 675 | 839 | MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) /* WRONG! */ |
| 676 | 840 | MCFG_CPU_PROGRAM_MAP(amaticmg_map) |
| 677 | 841 | MCFG_CPU_IO_MAP(amaticmg_portmap) |
| 678 | | MCFG_CPU_VBLANK_INT("screen", irq0_line_hold) |
| 842 | MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse) // no NMI mask? |
| 679 | 843 | |
| 680 | 844 | // MCFG_NVRAM_ADD_0FILL("nvram") |
| 681 | 845 | |
| 682 | 846 | /* 3x 8255 */ |
| 683 | | // MCFG_PPI8255_ADD( "ppi8255_0", ppi8255_intf[0] ) |
| 684 | | // MCFG_PPI8255_ADD( "ppi8255_1", ppi8255_intf[1] ) |
| 847 | MCFG_I8255A_ADD( "ppi8255_0", ppi8255_intf_0 ) |
| 848 | MCFG_I8255A_ADD( "ppi8255_1", ppi8255_intf_1 ) |
| 685 | 849 | // MCFG_PPI8255_ADD( "ppi8255_2", ppi8255_intf[2] ) |
| 686 | 850 | |
| 687 | 851 | /* video hardware */ |
| r15021 | r15022 | |
| 692 | 856 | MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) |
| 693 | 857 | MCFG_SCREEN_UPDATE_STATIC(amaticmg) |
| 694 | 858 | |
| 695 | | // MCFG_MC6845_ADD("crtc", MC6845, CRTC_CLOCK, mc6845_intf) |
| 859 | MCFG_MC6845_ADD("crtc", MC6845, CRTC_CLOCK, mc6845_intf) |
| 696 | 860 | |
| 697 | 861 | MCFG_GFXDECODE(amaticmg) |
| 698 | 862 | |
| r15021 | r15022 | |
| 700 | 864 | MCFG_PALETTE_LENGTH(0x200) |
| 701 | 865 | MCFG_VIDEO_START(amaticmg) |
| 702 | 866 | |
| 867 | MCFG_MACHINE_START(amaticmg) |
| 868 | MCFG_MACHINE_RESET(amaticmg) |
| 869 | |
| 703 | 870 | /* sound hardware */ |
| 704 | | // MCFG_SPEAKER_STANDARD_MONO("mono") |
| 871 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 705 | 872 | |
| 706 | | // MCFG_SOUND_ADD("ymsnd", YM3812, SND_CLOCK) |
| 707 | | // MCFG_SOUND_CONFIG(ym3812_config) |
| 708 | | // MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 873 | MCFG_SOUND_ADD("ymsnd", YM3812, SND_CLOCK) |
| 874 | MCFG_SOUND_CONFIG(ym3812_config) |
| 875 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 709 | 876 | |
| 710 | | // MCFG_SOUND_ADD("dac", DAC, 0) /* Y3014B */ |
| 711 | | // MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 877 | // MCFG_SOUND_ADD("dac", DAC, 0) /* Y3014B */ |
| 878 | // MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 712 | 879 | |
| 713 | 880 | MACHINE_CONFIG_END |
| 714 | 881 | |
| 715 | | static MACHINE_CONFIG_DERIVED( amaticmg3, amaticmg ) |
| 716 | 882 | |
| 717 | | MCFG_GFXDECODE(amaticmg3) |
| 718 | | MCFG_PALETTE_INIT(amaticmg3) |
| 883 | static INTERRUPT_GEN( amaticmg2_irq ) |
| 884 | { |
| 885 | amaticmg_state *state = device->machine().driver_data<amaticmg_state>(); |
| 886 | |
| 887 | if(state->m_nmi_mask) |
| 888 | device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); |
| 889 | } |
| 890 | |
| 891 | |
| 892 | static MACHINE_CONFIG_DERIVED( amaticmg2, amaticmg ) |
| 893 | |
| 894 | MCFG_CPU_MODIFY("maincpu") |
| 895 | MCFG_CPU_IO_MAP(amaticmg2_portmap) |
| 896 | MCFG_CPU_VBLANK_INT("screen", amaticmg2_irq) |
| 897 | |
| 898 | MCFG_SCREEN_MODIFY("screen") |
| 899 | MCFG_SCREEN_UPDATE_STATIC(amaticmg2) |
| 900 | |
| 901 | MCFG_GFXDECODE(amaticmg2) |
| 902 | MCFG_PALETTE_INIT(amaticmg2) |
| 719 | 903 | MCFG_PALETTE_LENGTH(0x10000) |
| 720 | 904 | MACHINE_CONFIG_END |
| 721 | 905 | |
| 906 | |
| 722 | 907 | /************************************ |
| 723 | 908 | * Rom Load * |
| 724 | 909 | ************************************/ |
| 725 | 910 | |
| 726 | | ROM_START( am_uslot ) |
| 911 | ROM_START( suprstar ) |
| 727 | 912 | ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE00 ) |
| 728 | 913 | |
| 729 | 914 | ROM_REGION( 0x20000, "mainprg", 0 ) /* encrypted program ROM...*/ |
| 730 | 915 | ROM_LOAD( "u3.bin", 0x00000, 0x20000, CRC(29bf4a95) SHA1(a73873f7cd1fdf5accc3e79f4619949f261400b8) ) |
| 731 | 916 | |
| 732 | | ROM_REGION( 0x30000, "gfx1", 0 ) |
| 733 | | ROM_LOAD( "u9.bin", 0x00000, 0x10000, CRC(823a736a) SHA1(a5227e3080367736aac1198d9dbb55efc4114624) ) |
| 734 | | ROM_LOAD( "u10.bin", 0x10000, 0x10000, CRC(6a811c81) SHA1(af01cd9b1ce6aca92df71febb05fe216b18cf42a) ) |
| 917 | ROM_REGION( 0x10000, "gfx1", 0 ) |
| 918 | ROM_LOAD( "u10.bin", 0x00000, 0x08000, CRC(6a811c81) SHA1(af01cd9b1ce6aca92df71febb05fe216b18cf42a) ) |
| 919 | ROM_CONTINUE( 0x00000, 0x08000 ) |
| 920 | ROM_LOAD( "u9.bin", 0x08000, 0x08000, CRC(823a736a) SHA1(a5227e3080367736aac1198d9dbb55efc4114624) ) |
| 921 | ROM_CONTINUE( 0x08000, 0x08000 ) |
| 735 | 922 | |
| 736 | 923 | ROM_REGION( 0x0200, "proms", 0 ) |
| 737 | 924 | ROM_LOAD( "n82s147a.bin", 0x0000, 0x0200, CRC(dfeabd11) SHA1(21e8bbcf4aba5e4d672e5585890baf8c5bc77c98) ) |
| r15021 | r15022 | |
| 745 | 932 | ROM_LOAD( "mgi_vger_3.9-i-8201.i6.bin", 0x00000, 0x40000, CRC(9ce159f7) SHA1(101c277d579a69cb03f879288b2cecf838cf1741) ) |
| 746 | 933 | |
| 747 | 934 | ROM_REGION( 0x180000, "gfx1", 0 ) |
| 748 | | ROM_LOAD( "multi_2.4_zg1.i17.bin", 0x000000, 0x80000, CRC(4a60a718) SHA1(626991abee768da58e87c7cdfc4fcbae86c6ea2a) ) |
| 935 | ROM_LOAD( "multi_2.4_zg1.i17.bin", 0x100000, 0x80000, CRC(4a60a718) SHA1(626991abee768da58e87c7cdfc4fcbae86c6ea2a) ) |
| 749 | 936 | ROM_LOAD( "multi_2.4_zg2.i18.bin", 0x080000, 0x80000, CRC(b504e1b8) SHA1(ffa17a2c212eb2fffb89b131868e69430cb41203) ) |
| 750 | | ROM_LOAD( "multi_2.4_zg3.i33.bin", 0x100000, 0x80000, CRC(9b66bb4d) SHA1(64035d2028a9b68164c87475a1ec9754453ad572) ) |
| 937 | ROM_LOAD( "multi_2.4_zg3.i33.bin", 0x000000, 0x80000, CRC(9b66bb4d) SHA1(64035d2028a9b68164c87475a1ec9754453ad572) ) |
| 751 | 938 | |
| 752 | 939 | ROM_REGION( 0x20000/*0x0400*/, "proms", 0 ) |
| 753 | 940 | ROM_LOAD( "n82s147a_1.bin", 0x0000, 0x0200, NO_DUMP ) |
| r15021 | r15022 | |
| 761 | 948 | ROM_LOAD( "mg_iii_vger_3.5-i-8205.bin", 0x00000, 0x40000, CRC(21d64029) SHA1(d5c3fde02833a96dd7a43481a489bfc4a5c9609d) ) |
| 762 | 949 | |
| 763 | 950 | ROM_REGION( 0x180000, "gfx1", 0 ) |
| 764 | | ROM_LOAD( "mg_iii_51_zg1.bin", 0x000000, 0x80000, CRC(84f86874) SHA1(c483a50df6a9a71ddfdf8530a894135f9b852b89) ) |
| 951 | ROM_LOAD( "mg_iii_51_zg1.bin", 0x100000, 0x80000, CRC(84f86874) SHA1(c483a50df6a9a71ddfdf8530a894135f9b852b89) ) |
| 765 | 952 | ROM_LOAD( "mg_iii_51_zg2.bin", 0x080000, 0x80000, CRC(4425e535) SHA1(726c322c5d0b391b82e49dd1797ebf0abfa4a65a) ) |
| 766 | | ROM_LOAD( "mg_iii_51_zg3.bin", 0x100000, 0x80000, CRC(36d4c0fa) SHA1(20352dbbb2ce2233be0f4f694ddf49b8f5d6a64f) ) |
| 953 | ROM_LOAD( "mg_iii_51_zg3.bin", 0x000000, 0x80000, CRC(36d4c0fa) SHA1(20352dbbb2ce2233be0f4f694ddf49b8f5d6a64f) ) |
| 767 | 954 | |
| 768 | 955 | ROM_REGION( 0x20000, "proms", 0 ) |
| 769 | 956 | ROM_LOAD( "v.bin", 0x00000, 0x20000, CRC(524767e2) SHA1(03a108494f42365c820fdfbcba9496bda86f3081) ) |
| r15021 | r15022 | |
| 804 | 991 | } |
| 805 | 992 | } |
| 806 | 993 | |
| 807 | | static DRIVER_INIT( amaticmg ) |
| 994 | static DRIVER_INIT( ama8000_1_x ) |
| 808 | 995 | { |
| 809 | 996 | decrypt(machine, 0x4c2, 0xf5); |
| 810 | 997 | } |
| 811 | 998 | |
| 812 | | static DRIVER_INIT( amaticmg3 ) |
| 999 | static DRIVER_INIT( ama8000_2_i ) |
| 813 | 1000 | { |
| 814 | 1001 | decrypt(machine, 0x426, 0x55); |
| 815 | 1002 | } |
| r15021 | r15022 | |
| 819 | 1006 | * Game Drivers * |
| 820 | 1007 | ************************************/ |
| 821 | 1008 | |
| 822 | | /* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS */ |
| 823 | | GAME( 1996, am_uslot, 0, amaticmg, amaticmg, amaticmg, ROT0, "Amatic Trading GmbH", "Amatic Unknown Slots Game", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_UNEMULATED_PROTECTION | GAME_NO_SOUND | GAME_NOT_WORKING ) |
| 824 | | GAME( 2000, am_mg24, 0, amaticmg3, amaticmg, amaticmg3, ROT0, "Amatic Trading GmbH", "Multi Game I (V.Ger 2.4)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_UNEMULATED_PROTECTION | GAME_NO_SOUND | GAME_NOT_WORKING ) |
| 825 | | GAME( 2000, am_mg3, 0, amaticmg3, amaticmg, amaticmg3, ROT0, "Amatic Trading GmbH", "Multi Game III (V.Ger 3.5)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_UNEMULATED_PROTECTION | GAME_NO_SOUND | GAME_NOT_WORKING ) |
| 1009 | /* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ |
| 1010 | GAMEL( 1996, suprstar, 0, amaticmg, amaticmg, ama8000_1_x, ROT90, "Amatic Trading GmbH", "Super Stars", GAME_IMPERFECT_SOUND, layout_suprstar ) |
| 1011 | GAME( 2000, am_mg24, 0, amaticmg2, amaticmg, ama8000_2_i, ROT0, "Amatic Trading GmbH", "Multi Game I (V.Ger 2.4)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_UNEMULATED_PROTECTION | GAME_NO_SOUND | GAME_NOT_WORKING ) |
| 1012 | GAME( 2000, am_mg3, 0, amaticmg2, amaticmg, ama8000_2_i, ROT0, "Amatic Trading GmbH", "Multi Game III (V.Ger 3.5)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_UNEMULATED_PROTECTION | GAME_NO_SOUND | GAME_NOT_WORKING ) |
src/mame/drivers/bloodbro.c
| r15021 | r15022 | |
| 1 | 1 | /************************************************************************** |
| 2 | 2 | |
| 3 | | Blood Bros, West Story [+Sky Smasher] |
| 3 | Blood Bros, West Story & Sky Smasher |
| 4 | 4 | TAD Corporation 1990 |
| 5 | 5 | 68000 + Z80 + YM3931 + YM3812 |
| 6 | 6 | |
| r15021 | r15022 | |
| 14 | 14 | - runs too fast? (vblank flag somewhere?) |
| 15 | 15 | |
| 16 | 16 | |
| 17 | Blood Bros (c) 1990 Nihon System [Seibu hardware] |
| 18 | ----------- |
| 19 | The manual states: |
| 20 | |
| 21 | At Power On, if you touch the joystick, you will have DIP-SW setting on |
| 22 | the screen |
| 23 | |
| 24 | This works for all sets and the bootleg. |
| 25 | |
| 17 | 26 | Sky Smasher (c) 1990 Nihon System [Seibu hardware] |
| 18 | 27 | ----------- |
| 19 | 28 | |
| 20 | 29 | Like some other Seibu hardware games, hold P1 right at boot to |
| 21 | | view DIP descriptions. |
| 30 | view DIP descriptions. The manual states: |
| 22 | 31 | |
| 32 | At Power On, if you touch the joystick or SHOOT or MISSILE button, you will |
| 33 | have DIP-SW setting on the screen |
| 34 | |
| 23 | 35 | Game does not appear to have cocktail mode. The screen hardware |
| 24 | 36 | is undoubtedly capable of flipscreen and layer priority flipping |
| 25 | 37 | however.(which is why we have GAME_NO_COCKTAIL despite the games |
| r15021 | r15022 | |
| 100 | 112 | Dip Switch as in 'toki' (same manufacturer and similar hardware). |
| 101 | 113 | |
| 102 | 114 | |
| 103 | | DIP locations verified for: |
| 104 | | - bloodbro (manual) |
| 115 | DIP locations verified for Blood Bros. & Sky Smasher via manual & DIP-SW setting |
| 116 | screens at power up. |
| 105 | 117 | |
| 106 | 118 | **************************************************************************/ |
| 107 | 119 | |
| r15021 | r15022 | |
| 474 | 486 | |
| 475 | 487 | ROM_START( bloodbro ) |
| 476 | 488 | ROM_REGION( 0x80000, "maincpu", 0 ) |
| 477 | | ROM_LOAD16_BYTE( "2j.u021", 0x00001, 0x20000, CRC(c0fdc3e4) SHA1(31968f693de2054a0c8ba50a8d44a371dd9c2848) ) |
| 478 | | ROM_LOAD16_BYTE( "1j.i022", 0x00000, 0x20000, CRC(2d7e0fdf) SHA1(8fe22d8a1ef7d562a475a5b6c98303b0cb1af561) ) |
| 479 | | ROM_LOAD16_BYTE( "bb_04.bin", 0x40001, 0x20000, CRC(fd951c2c) SHA1(f4031bf303c67c82f2f78f7456f78382d8c1ac85) ) |
| 480 | | ROM_LOAD16_BYTE( "bb_03.bin", 0x40000, 0x20000, CRC(18d3c460) SHA1(93b86af1199f0fedeaf1fe64d27ffede4b819e42) ) |
| 489 | ROM_LOAD16_BYTE( "2j.u021", 0x00001, 0x20000, CRC(c0fdc3e4) SHA1(31968f693de2054a0c8ba50a8d44a371dd9c2848) ) |
| 490 | ROM_LOAD16_BYTE( "1j.i022", 0x00000, 0x20000, CRC(2d7e0fdf) SHA1(8fe22d8a1ef7d562a475a5b6c98303b0cb1af561) ) |
| 491 | ROM_LOAD16_BYTE( "bb_04.bin", 0x40001, 0x20000, CRC(fd951c2c) SHA1(f4031bf303c67c82f2f78f7456f78382d8c1ac85) ) |
| 492 | ROM_LOAD16_BYTE( "bb_03.bin", 0x40000, 0x20000, CRC(18d3c460) SHA1(93b86af1199f0fedeaf1fe64d27ffede4b819e42) ) |
| 481 | 493 | |
| 482 | 494 | ROM_REGION( 0x20000, "audiocpu", 0 ) |
| 483 | | ROM_LOAD( "bb_07.bin", 0x000000, 0x08000, CRC(411b94e8) SHA1(6968441f64212c0935afeca68f07deaadf86d614) ) |
| 484 | | ROM_CONTINUE( 0x010000, 0x08000 ) |
| 495 | ROM_LOAD( "bb_07.bin", 0x000000, 0x08000, CRC(411b94e8) SHA1(6968441f64212c0935afeca68f07deaadf86d614) ) |
| 496 | ROM_CONTINUE( 0x010000, 0x08000 ) |
| 485 | 497 | ROM_COPY( "audiocpu", 0, 0x018000, 0x08000 ) |
| 486 | 498 | |
| 487 | 499 | ROM_REGION( 0x20000, "gfx1", 0 ) |
| 488 | | ROM_LOAD( "bb_05.bin", 0x00000, 0x10000, CRC(04ba6d19) SHA1(7333075c3323756d51917418b5234d785a9bee00) ) /* characters */ |
| 489 | | ROM_LOAD( "bb_06.bin", 0x10000, 0x10000, CRC(7092e35b) SHA1(659d30b2e2fd9ffa34a47e98193c8f0a87ac1315) ) |
| 500 | ROM_LOAD( "bb_05.bin", 0x00000, 0x10000, CRC(04ba6d19) SHA1(7333075c3323756d51917418b5234d785a9bee00) ) /* characters */ |
| 501 | ROM_LOAD( "bb_06.bin", 0x10000, 0x10000, CRC(7092e35b) SHA1(659d30b2e2fd9ffa34a47e98193c8f0a87ac1315) ) |
| 490 | 502 | |
| 491 | 503 | ROM_REGION( 0x100000, "gfx2", 0 ) |
| 492 | | ROM_LOAD( "bloodb.bk", 0x00000, 0x100000, CRC(1aa87ee6) SHA1(e7843c1e8a0f3a685f0b5d6e3a2eb3176c410847) ) /* Background+Foreground */ |
| 504 | ROM_LOAD( "bloodb.bk", 0x00000, 0x100000, CRC(1aa87ee6) SHA1(e7843c1e8a0f3a685f0b5d6e3a2eb3176c410847) ) /* Background+Foreground */ |
| 493 | 505 | |
| 494 | 506 | ROM_REGION( 0x100000, "gfx3", 0 ) |
| 495 | | ROM_LOAD( "bloodb.obj", 0x00000, 0x100000, CRC(d27c3952) SHA1(de7306432b682f238b911507ad7aa2fa8acbee80) ) /* sprites */ |
| 507 | ROM_LOAD( "bloodb.obj", 0x00000, 0x100000, CRC(d27c3952) SHA1(de7306432b682f238b911507ad7aa2fa8acbee80) ) /* sprites */ |
| 496 | 508 | |
| 497 | 509 | ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */ |
| 498 | | ROM_LOAD( "bb_08.bin", 0x00000, 0x20000, CRC(deb1b975) SHA1(08f2e9a0a23171201b71d381d091edcd3787c287) ) |
| 510 | ROM_LOAD( "bb_08.bin", 0x00000, 0x20000, CRC(deb1b975) SHA1(08f2e9a0a23171201b71d381d091edcd3787c287) ) |
| 499 | 511 | ROM_END |
| 500 | 512 | |
| 501 | 513 | ROM_START( bloodbroa ) |
| 502 | 514 | ROM_REGION( 0x80000, "maincpu", 0 ) |
| 503 | | ROM_LOAD16_BYTE( "2j.21", 0x00001, 0x20000, CRC(e8ca21b8) SHA1(65330368c29ec64ca03124d28a7f8b49d7a15566) ) |
| 504 | | ROM_LOAD16_BYTE( "1j.22", 0x00000, 0x20000, CRC(6b28cfc7) SHA1(dedd06cab61381f3e27dc14315f283d707d06bcb) ) |
| 505 | | ROM_LOAD16_BYTE( "bb_04.bin", 0x40001, 0x20000, CRC(fd951c2c) SHA1(f4031bf303c67c82f2f78f7456f78382d8c1ac85) ) |
| 506 | | ROM_LOAD16_BYTE( "bb_03.bin", 0x40000, 0x20000, CRC(18d3c460) SHA1(93b86af1199f0fedeaf1fe64d27ffede4b819e42) ) |
| 515 | ROM_LOAD16_BYTE( "2j.21", 0x00001, 0x20000, CRC(e8ca21b8) SHA1(65330368c29ec64ca03124d28a7f8b49d7a15566) ) |
| 516 | ROM_LOAD16_BYTE( "1j.22", 0x00000, 0x20000, CRC(6b28cfc7) SHA1(dedd06cab61381f3e27dc14315f283d707d06bcb) ) |
| 517 | ROM_LOAD16_BYTE( "bb_04.bin", 0x40001, 0x20000, CRC(fd951c2c) SHA1(f4031bf303c67c82f2f78f7456f78382d8c1ac85) ) |
| 518 | ROM_LOAD16_BYTE( "bb_03.bin", 0x40000, 0x20000, CRC(18d3c460) SHA1(93b86af1199f0fedeaf1fe64d27ffede4b819e42) ) |
| 507 | 519 | |
| 508 | 520 | ROM_REGION( 0x20000, "audiocpu", 0 ) |
| 509 | | ROM_LOAD( "bb_07.bin", 0x000000, 0x08000, CRC(411b94e8) SHA1(6968441f64212c0935afeca68f07deaadf86d614) ) |
| 510 | | ROM_CONTINUE( 0x010000, 0x08000 ) |
| 521 | ROM_LOAD( "bb_07.bin", 0x000000, 0x08000, CRC(411b94e8) SHA1(6968441f64212c0935afeca68f07deaadf86d614) ) |
| 522 | ROM_CONTINUE( 0x010000, 0x08000 ) |
| 511 | 523 | ROM_COPY( "audiocpu", 0, 0x018000, 0x08000 ) |
| 512 | 524 | |
| 513 | 525 | ROM_REGION( 0x20000, "gfx1", 0 ) |
| 514 | | ROM_LOAD( "bb_05.bin", 0x00000, 0x10000, CRC(04ba6d19) SHA1(7333075c3323756d51917418b5234d785a9bee00) ) /* characters */ |
| 515 | | ROM_LOAD( "bb_06.bin", 0x10000, 0x10000, CRC(7092e35b) SHA1(659d30b2e2fd9ffa34a47e98193c8f0a87ac1315) ) |
| 526 | ROM_LOAD( "bb_05.bin", 0x00000, 0x10000, CRC(04ba6d19) SHA1(7333075c3323756d51917418b5234d785a9bee00) ) /* characters */ |
| 527 | ROM_LOAD( "bb_06.bin", 0x10000, 0x10000, CRC(7092e35b) SHA1(659d30b2e2fd9ffa34a47e98193c8f0a87ac1315) ) |
| 516 | 528 | |
| 517 | 529 | ROM_REGION( 0x100000, "gfx2", 0 ) |
| 518 | | ROM_LOAD( "bloodb.bk", 0x00000, 0x100000, CRC(1aa87ee6) SHA1(e7843c1e8a0f3a685f0b5d6e3a2eb3176c410847) ) /* Background+Foreground */ |
| 530 | ROM_LOAD( "bloodb.bk", 0x00000, 0x100000, CRC(1aa87ee6) SHA1(e7843c1e8a0f3a685f0b5d6e3a2eb3176c410847) ) /* Background+Foreground */ |
| 519 | 531 | |
| 520 | 532 | ROM_REGION( 0x100000, "gfx3", 0 ) |
| 521 | | ROM_LOAD( "bloodb.obj", 0x00000, 0x100000, CRC(d27c3952) SHA1(de7306432b682f238b911507ad7aa2fa8acbee80) ) /* sprites */ |
| 533 | ROM_LOAD( "bloodb.obj", 0x00000, 0x100000, CRC(d27c3952) SHA1(de7306432b682f238b911507ad7aa2fa8acbee80) ) /* sprites */ |
| 522 | 534 | |
| 523 | 535 | ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */ |
| 524 | | ROM_LOAD( "bb_08.bin", 0x00000, 0x20000, CRC(deb1b975) SHA1(08f2e9a0a23171201b71d381d091edcd3787c287) ) |
| 536 | ROM_LOAD( "bb_08.bin", 0x00000, 0x20000, CRC(deb1b975) SHA1(08f2e9a0a23171201b71d381d091edcd3787c287) ) |
| 525 | 537 | ROM_END |
| 526 | 538 | |
| 527 | 539 | ROM_START( bloodbrob ) |
| 528 | 540 | ROM_REGION( 0x80000, "maincpu", 0 ) |
| 529 | | ROM_LOAD16_BYTE( "bloodbros02.bin", 0x00001, 0x20000, CRC(204dca6e) SHA1(f04cb2116d699ac2deec2d55597beb5d7b3dc793) ) |
| 530 | | ROM_LOAD16_BYTE( "bloodbros01.bin", 0x00000, 0x20000, CRC(ac6719e7) SHA1(bcefd61ed5d2f5eeb4424243f03037c7d123b9f6) ) |
| 531 | | ROM_LOAD16_BYTE( "bb_04.bin", 0x40001, 0x20000, CRC(fd951c2c) SHA1(f4031bf303c67c82f2f78f7456f78382d8c1ac85) ) |
| 532 | | ROM_LOAD16_BYTE( "bb_03.bin", 0x40000, 0x20000, CRC(18d3c460) SHA1(93b86af1199f0fedeaf1fe64d27ffede4b819e42) ) |
| 541 | ROM_LOAD16_BYTE( "bloodbros02.bin", 0x00001, 0x20000, CRC(204dca6e) SHA1(f04cb2116d699ac2deec2d55597beb5d7b3dc793) ) |
| 542 | ROM_LOAD16_BYTE( "bloodbros01.bin", 0x00000, 0x20000, CRC(ac6719e7) SHA1(bcefd61ed5d2f5eeb4424243f03037c7d123b9f6) ) |
| 543 | ROM_LOAD16_BYTE( "bb_04.bin", 0x40001, 0x20000, CRC(fd951c2c) SHA1(f4031bf303c67c82f2f78f7456f78382d8c1ac85) ) |
| 544 | ROM_LOAD16_BYTE( "bb_03.bin", 0x40000, 0x20000, CRC(18d3c460) SHA1(93b86af1199f0fedeaf1fe64d27ffede4b819e42) ) |
| 533 | 545 | |
| 534 | 546 | ROM_REGION( 0x20000, "audiocpu", 0 ) |
| 535 | | ROM_LOAD( "bb_07.bin", 0x000000, 0x08000, CRC(411b94e8) SHA1(6968441f64212c0935afeca68f07deaadf86d614) ) |
| 536 | | ROM_CONTINUE( 0x010000, 0x08000 ) |
| 547 | ROM_LOAD( "bb_07.bin", 0x000000, 0x08000, CRC(411b94e8) SHA1(6968441f64212c0935afeca68f07deaadf86d614) ) |
| 548 | ROM_CONTINUE( 0x010000, 0x08000 ) |
| 537 | 549 | ROM_COPY( "audiocpu", 0, 0x018000, 0x08000 ) |
| 538 | 550 | |
| 539 | 551 | ROM_REGION( 0x20000, "gfx1", 0 ) |
| 540 | | ROM_LOAD( "bb_05.bin", 0x00000, 0x10000, CRC(04ba6d19) SHA1(7333075c3323756d51917418b5234d785a9bee00) ) /* characters */ |
| 541 | | ROM_LOAD( "bb_06.bin", 0x10000, 0x10000, CRC(7092e35b) SHA1(659d30b2e2fd9ffa34a47e98193c8f0a87ac1315) ) |
| 552 | ROM_LOAD( "bb_05.bin", 0x00000, 0x10000, CRC(04ba6d19) SHA1(7333075c3323756d51917418b5234d785a9bee00) ) /* characters */ |
| 553 | ROM_LOAD( "bb_06.bin", 0x10000, 0x10000, CRC(7092e35b) SHA1(659d30b2e2fd9ffa34a47e98193c8f0a87ac1315) ) |
| 542 | 554 | |
| 543 | 555 | ROM_REGION( 0x100000, "gfx2", 0 ) |
| 544 | | ROM_LOAD( "bloodb.bk", 0x00000, 0x100000, CRC(1aa87ee6) SHA1(e7843c1e8a0f3a685f0b5d6e3a2eb3176c410847) ) /* Background+Foreground */ |
| 556 | ROM_LOAD( "bloodb.bk", 0x00000, 0x100000, CRC(1aa87ee6) SHA1(e7843c1e8a0f3a685f0b5d6e3a2eb3176c410847) ) /* Background+Foreground */ |
| 545 | 557 | |
| 546 | 558 | ROM_REGION( 0x100000, "gfx3", 0 ) |
| 547 | | ROM_LOAD( "bloodb.obj", 0x00000, 0x100000, CRC(d27c3952) SHA1(de7306432b682f238b911507ad7aa2fa8acbee80) ) /* sprites */ |
| 559 | ROM_LOAD( "bloodb.obj", 0x00000, 0x100000, CRC(d27c3952) SHA1(de7306432b682f238b911507ad7aa2fa8acbee80) ) /* sprites */ |
| 548 | 560 | |
| 549 | 561 | ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */ |
| 550 | | ROM_LOAD( "bb_08.bin", 0x00000, 0x20000, CRC(deb1b975) SHA1(08f2e9a0a23171201b71d381d091edcd3787c287) ) |
| 562 | ROM_LOAD( "bb_08.bin", 0x00000, 0x20000, CRC(deb1b975) SHA1(08f2e9a0a23171201b71d381d091edcd3787c287) ) |
| 551 | 563 | ROM_END |
| 552 | 564 | |
| 553 | 565 | |
| 554 | 566 | ROM_START( weststry ) |
| 555 | 567 | ROM_REGION( 0x80000, "maincpu", 0 ) /* 64k for cpu code */ |
| 556 | | ROM_LOAD16_BYTE( "ws13.bin", 0x00001, 0x20000, CRC(158e302a) SHA1(52cc1bf526424ff025a6b79f3fc7bba4b9bbfcbb) ) |
| 557 | | ROM_LOAD16_BYTE( "ws15.bin", 0x00000, 0x20000, CRC(672e9027) SHA1(71cb9fcef04edb972ba88de45d605dcff539ea2d) ) |
| 558 | | ROM_LOAD16_BYTE( "bb_04.bin", 0x40001, 0x20000, CRC(fd951c2c) SHA1(f4031bf303c67c82f2f78f7456f78382d8c1ac85) ) |
| 559 | | ROM_LOAD16_BYTE( "bb_03.bin", 0x40000, 0x20000, CRC(18d3c460) SHA1(93b86af1199f0fedeaf1fe64d27ffede4b819e42) ) |
| 568 | ROM_LOAD16_BYTE( "ws13.bin", 0x00001, 0x20000, CRC(158e302a) SHA1(52cc1bf526424ff025a6b79f3fc7bba4b9bbfcbb) ) |
| 569 | ROM_LOAD16_BYTE( "ws15.bin", 0x00000, 0x20000, CRC(672e9027) SHA1(71cb9fcef04edb972ba88de45d605dcff539ea2d) ) |
| 570 | ROM_LOAD16_BYTE( "bb_04.bin", 0x40001, 0x20000, CRC(fd951c2c) SHA1(f4031bf303c67c82f2f78f7456f78382d8c1ac85) ) |
| 571 | ROM_LOAD16_BYTE( "bb_03.bin", 0x40000, 0x20000, CRC(18d3c460) SHA1(93b86af1199f0fedeaf1fe64d27ffede4b819e42) ) |
| 560 | 572 | |
| 561 | 573 | ROM_REGION( 0x20000, "audiocpu", 0 ) /* 64k for sound cpu code */ |
| 562 | 574 | ROM_LOAD( "ws17.bin", 0x000000, 0x08000, CRC(e00a8f09) SHA1(e7247ce0ab99d0726f31dee5de5ba33f4ebd183e) ) |
| r15021 | r15022 | |
| 564 | 576 | ROM_COPY( "audiocpu", 0, 0x018000, 0x08000 ) |
| 565 | 577 | |
| 566 | 578 | ROM_REGION( 0x20000, "gfx1", 0 ) // first half of these is blank |
| 567 | | ROM_LOAD( "ws09.bin", 0x00000, 0x08000, CRC(f05b2b3e) SHA1(6570d795d68655ace9668f32dc0bf5c2d2372411) ) /* characters */ |
| 568 | | ROM_CONTINUE( 0x00000, 0x08000 ) |
| 569 | | ROM_LOAD( "ws11.bin", 0x08000, 0x08000, CRC(2b10e3d2) SHA1(0f5045615b44e2300745fd3afac7f1441352cca5) ) |
| 570 | | ROM_CONTINUE( 0x08000, 0x08000 ) |
| 571 | | ROM_LOAD( "ws10.bin", 0x10000, 0x08000, CRC(efdf7c82) SHA1(65392697f56473cfe90d9733b9c49f2da6f9b7e6) ) |
| 572 | | ROM_CONTINUE( 0x10000, 0x08000 ) |
| 573 | | ROM_LOAD( "ws12.bin", 0x18000, 0x08000, CRC(af993578) SHA1(b250b562deeab3bb2c79002e5e1f0b6e17986848) ) |
| 574 | | ROM_CONTINUE( 0x18000, 0x08000 ) |
| 579 | ROM_LOAD( "ws09.bin", 0x00000, 0x08000, CRC(f05b2b3e) SHA1(6570d795d68655ace9668f32dc0bf5c2d2372411) ) /* characters */ |
| 580 | ROM_CONTINUE( 0x00000, 0x08000 ) |
| 581 | ROM_LOAD( "ws11.bin", 0x08000, 0x08000, CRC(2b10e3d2) SHA1(0f5045615b44e2300745fd3afac7f1441352cca5) ) |
| 582 | ROM_CONTINUE( 0x08000, 0x08000 ) |
| 583 | ROM_LOAD( "ws10.bin", 0x10000, 0x08000, CRC(efdf7c82) SHA1(65392697f56473cfe90d9733b9c49f2da6f9b7e6) ) |
| 584 | ROM_CONTINUE( 0x10000, 0x08000 ) |
| 585 | ROM_LOAD( "ws12.bin", 0x18000, 0x08000, CRC(af993578) SHA1(b250b562deeab3bb2c79002e5e1f0b6e17986848) ) |
| 586 | ROM_CONTINUE( 0x18000, 0x08000 ) |
| 575 | 587 | |
| 576 | 588 | ROM_REGION( 0x100000, "gfx2", 0 ) |
| 577 | | ROM_LOAD( "ws01.bin", 0x20000, 0x20000, CRC(32bda4bc) SHA1(ed0c0740c7af513b341b2b7ff3e0bf6045e930e9) ) /* Foreground */ |
| 578 | | ROM_LOAD( "ws03.bin", 0x60000, 0x20000, CRC(046b51f8) SHA1(25af752caebdec762582fc0130cf14546110bb54) ) |
| 579 | | ROM_LOAD( "ws02.bin", 0xa0000, 0x20000, CRC(ed9d682e) SHA1(0f79ea09a7af367d175081f72f2bc94f6caad463) ) |
| 580 | | ROM_LOAD( "ws04.bin", 0xe0000, 0x20000, CRC(75f082e5) SHA1(b29f09a3cc9a0ac3f982be3981f5e895050c49e8) ) |
| 581 | | ROM_LOAD( "ws05.bin", 0x00000, 0x20000, CRC(007c8dc0) SHA1(f44576da3b89d6a889fdb564825ac6ce3bb4cffe) ) /* Background */ |
| 582 | | ROM_LOAD( "ws07.bin", 0x40000, 0x20000, CRC(0f0c8d9a) SHA1(f5fe9b5ee4c8ffd7caf5313d13fb5f6e181ed9b6) ) |
| 583 | | ROM_LOAD( "ws06.bin", 0x80000, 0x20000, CRC(459d075e) SHA1(24cd0bffe7c5bbccf653ced0b73579059603d187) ) |
| 584 | | ROM_LOAD( "ws08.bin", 0xc0000, 0x20000, CRC(4d6783b3) SHA1(9870fe9570afeff179b6080581fd6bb187898ff0) ) |
| 589 | ROM_LOAD( "ws01.bin", 0x20000, 0x20000, CRC(32bda4bc) SHA1(ed0c0740c7af513b341b2b7ff3e0bf6045e930e9) ) /* Foreground */ |
| 590 | ROM_LOAD( "ws03.bin", 0x60000, 0x20000, CRC(046b51f8) SHA1(25af752caebdec762582fc0130cf14546110bb54) ) |
| 591 | ROM_LOAD( "ws02.bin", 0xa0000, 0x20000, CRC(ed9d682e) SHA1(0f79ea09a7af367d175081f72f2bc94f6caad463) ) |
| 592 | ROM_LOAD( "ws04.bin", 0xe0000, 0x20000, CRC(75f082e5) SHA1(b29f09a3cc9a0ac3f982be3981f5e895050c49e8) ) |
| 593 | ROM_LOAD( "ws05.bin", 0x00000, 0x20000, CRC(007c8dc0) SHA1(f44576da3b89d6a889fdb564825ac6ce3bb4cffe) ) /* Background */ |
| 594 | ROM_LOAD( "ws07.bin", 0x40000, 0x20000, CRC(0f0c8d9a) SHA1(f5fe9b5ee4c8ffd7caf5313d13fb5f6e181ed9b6) ) |
| 595 | ROM_LOAD( "ws06.bin", 0x80000, 0x20000, CRC(459d075e) SHA1(24cd0bffe7c5bbccf653ced0b73579059603d187) ) |
| 596 | ROM_LOAD( "ws08.bin", 0xc0000, 0x20000, CRC(4d6783b3) SHA1(9870fe9570afeff179b6080581fd6bb187898ff0) ) |
| 585 | 597 | |
| 586 | 598 | ROM_REGION( 0x100000, "gfx3", ROMREGION_INVERT ) |
| 587 | | ROM_LOAD( "ws25.bin", 0x00000, 0x20000, BAD_DUMP CRC(8092e8e9) SHA1(eabe58ac0f88234b0dddf361f56aad509a83012e) ) /* sprites */ |
| 588 | | ROM_LOAD( "ws26.bin", 0x20000, 0x20000, BAD_DUMP CRC(f6a1f42c) SHA1(6d5503e1a9b00104970292d22301ed28893c5223) ) |
| 589 | | ROM_LOAD( "ws23.bin", 0x40000, 0x20000, CRC(43d58e24) SHA1(99e255faa9716d9102a1223419084fc209ab4024) ) |
| 590 | | ROM_LOAD( "ws24.bin", 0x60000, 0x20000, CRC(20a867ea) SHA1(d3985002931fd4180fc541d61a94371871f3709d) ) |
| 591 | | ROM_LOAD( "ws21.bin", 0x80000, 0x20000, CRC(e23d7296) SHA1(33bbced960be22efc7d2681e06a27feba09e0fc0) ) |
| 592 | | ROM_LOAD( "ws22.bin", 0xa0000, 0x20000, CRC(7150a060) SHA1(73bdd7d6752f7fe9e23073d835dbc468d57865fa) ) |
| 593 | | ROM_LOAD( "ws19.bin", 0xc0000, 0x20000, CRC(c5dd0a96) SHA1(4696ab1b02d40c54a7dacf0bdf90b624b7d6812e) ) |
| 594 | | ROM_LOAD( "ws20.bin", 0xe0000, 0x20000, CRC(f1245c16) SHA1(f3941bf5830995f65a5378326fdb72687fbbddcf) ) |
| 599 | ROM_LOAD( "ws25.bin", 0x00000, 0x20000, BAD_DUMP CRC(8092e8e9) SHA1(eabe58ac0f88234b0dddf361f56aad509a83012e) ) /* sprites */ |
| 600 | ROM_LOAD( "ws26.bin", 0x20000, 0x20000, BAD_DUMP CRC(f6a1f42c) SHA1(6d5503e1a9b00104970292d22301ed28893c5223) ) |
| 601 | ROM_LOAD( "ws23.bin", 0x40000, 0x20000, CRC(43d58e24) SHA1(99e255faa9716d9102a1223419084fc209ab4024) ) |
| 602 | ROM_LOAD( "ws24.bin", 0x60000, 0x20000, CRC(20a867ea) SHA1(d3985002931fd4180fc541d61a94371871f3709d) ) |
| 603 | ROM_LOAD( "ws21.bin", 0x80000, 0x20000, CRC(e23d7296) SHA1(33bbced960be22efc7d2681e06a27feba09e0fc0) ) |
| 604 | ROM_LOAD( "ws22.bin", 0xa0000, 0x20000, CRC(7150a060) SHA1(73bdd7d6752f7fe9e23073d835dbc468d57865fa) ) |
| 605 | ROM_LOAD( "ws19.bin", 0xc0000, 0x20000, CRC(c5dd0a96) SHA1(4696ab1b02d40c54a7dacf0bdf90b624b7d6812e) ) |
| 606 | ROM_LOAD( "ws20.bin", 0xe0000, 0x20000, CRC(f1245c16) SHA1(f3941bf5830995f65a5378326fdb72687fbbddcf) ) |
| 595 | 607 | |
| 596 | 608 | ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */ |
| 597 | | ROM_LOAD( "bb_08.bin", 0x00000, 0x20000, CRC(deb1b975) SHA1(08f2e9a0a23171201b71d381d091edcd3787c287) ) |
| 609 | ROM_LOAD( "bb_08.bin", 0x00000, 0x20000, CRC(deb1b975) SHA1(08f2e9a0a23171201b71d381d091edcd3787c287) ) |
| 598 | 610 | ROM_END |
| 599 | 611 | |
| 600 | 612 | ROM_START( skysmash ) |
| 601 | 613 | ROM_REGION( 0x80000, "maincpu", 0 ) |
| 602 | | ROM_LOAD16_BYTE( "rom5", 0x00000, 0x20000, CRC(867f9897) SHA1(7751f9d03d71bd5db0b82bda6e4d5231a30c1ad0) ) |
| 603 | | ROM_LOAD16_BYTE( "rom6", 0x00001, 0x20000, CRC(e9c1d308) SHA1(d7032345b91f87de64ad09ffea49e39b755cac44) ) |
| 604 | | ROM_LOAD16_BYTE( "rom7", 0x40000, 0x20000, CRC(d209db4d) SHA1(1cf85d39d12e92c1b97f7e5a148f3ad56cdca963) ) |
| 605 | | ROM_LOAD16_BYTE( "rom8", 0x40001, 0x20000, CRC(d3646728) SHA1(898606be662214d2ba99e9a3e3cc0c7e7609a719) ) |
| 614 | ROM_LOAD16_BYTE( "rom5", 0x00000, 0x20000, CRC(867f9897) SHA1(7751f9d03d71bd5db0b82bda6e4d5231a30c1ad0) ) |
| 615 | ROM_LOAD16_BYTE( "rom6", 0x00001, 0x20000, CRC(e9c1d308) SHA1(d7032345b91f87de64ad09ffea49e39b755cac44) ) |
| 616 | ROM_LOAD16_BYTE( "rom7", 0x40000, 0x20000, CRC(d209db4d) SHA1(1cf85d39d12e92c1b97f7e5a148f3ad56cdca963) ) |
| 617 | ROM_LOAD16_BYTE( "rom8", 0x40001, 0x20000, CRC(d3646728) SHA1(898606be662214d2ba99e9a3e3cc0c7e7609a719) ) |
| 606 | 618 | |
| 607 | 619 | ROM_REGION( 0x20000, "audiocpu", 0 ) |
| 608 | | ROM_LOAD( "rom2", 0x000000, 0x08000, CRC(75b194cf) SHA1(6aaf36cdab06c0aa5328f5176557387a5d3f7d26) ) |
| 609 | | ROM_CONTINUE( 0x010000, 0x08000 ) |
| 620 | ROM_LOAD( "rom2", 0x000000, 0x08000, CRC(75b194cf) SHA1(6aaf36cdab06c0aa5328f5176557387a5d3f7d26) ) |
| 621 | ROM_CONTINUE( 0x010000, 0x08000 ) |
| 610 | 622 | ROM_COPY( "audiocpu", 0, 0x018000, 0x08000 ) |
| 611 | 623 | |
| 612 | 624 | ROM_REGION( 0x20000, "gfx1", 0 ) |
| 613 | | ROM_LOAD( "rom3", 0x00000, 0x10000, CRC(fbb241be) SHA1(cd94c328891538bbd8c062d90a47ddf3d7d05bb0) ) /* characters */ |
| 614 | | ROM_LOAD( "rom4", 0x10000, 0x10000, CRC(ad3cde81) SHA1(2bd0c707e5b67d3699a743d989cb5384cbe37ff7) ) |
| 625 | ROM_LOAD( "rom3", 0x00000, 0x10000, CRC(fbb241be) SHA1(cd94c328891538bbd8c062d90a47ddf3d7d05bb0) ) /* characters */ |
| 626 | ROM_LOAD( "rom4", 0x10000, 0x10000, CRC(ad3cde81) SHA1(2bd0c707e5b67d3699a743d989cb5384cbe37ff7) ) |
| 615 | 627 | |
| 616 | 628 | ROM_REGION( 0x100000, "gfx2", 0 ) |
| 617 | | ROM_LOAD( "rom9", 0x00000, 0x100000, CRC(b0a5eecf) SHA1(9e8191c7ae4a32dc16aebc37fa942afc531eddd4) ) /* Background + Foreground */ |
| 629 | ROM_LOAD( "rom9", 0x00000, 0x100000, CRC(b0a5eecf) SHA1(9e8191c7ae4a32dc16aebc37fa942afc531eddd4) ) /* Background + Foreground */ |
| 618 | 630 | |
| 619 | 631 | ROM_REGION( 0x80000, "gfx3", 0 ) |
| 620 | | ROM_LOAD( "rom10", 0x00000, 0x080000, CRC(1bbcda5d) SHA1(63915221f70a7dfda6a4d8ac7f5c663c9316610a) ) /* sprites */ |
| 632 | ROM_LOAD( "rom10", 0x00000, 0x080000, CRC(1bbcda5d) SHA1(63915221f70a7dfda6a4d8ac7f5c663c9316610a) ) /* sprites */ |
| 621 | 633 | |
| 622 | 634 | ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */ |
| 623 | | ROM_LOAD( "rom1", 0x00000, 0x20000, CRC(e69986f6) SHA1(de38bf2d5638cb40740882e1abccf7928e43a5a6) ) |
| 635 | ROM_LOAD( "rom1", 0x00000, 0x20000, CRC(e69986f6) SHA1(de38bf2d5638cb40740882e1abccf7928e43a5a6) ) |
| 624 | 636 | ROM_END |
| 625 | 637 | |
| 626 | 638 | |
| 627 | 639 | /* Game Drivers */ |
| 628 | 640 | |
| 629 | | GAME( 1990, bloodbro, 0, bloodbro, bloodbro, 0, ROT0, "TAD Corporation", "Blood Bros. (set 1)", GAME_NO_COCKTAIL ) |
| 630 | | GAME( 1990, bloodbroa,bloodbro, bloodbro, bloodbro, 0, ROT0, "TAD Corporation", "Blood Bros. (set 2)", GAME_NO_COCKTAIL ) |
| 631 | | GAME( 1990, bloodbrob,bloodbro, bloodbro, bloodbro, 0, ROT0, "TAD Corporation", "Blood Bros. (set 3)", GAME_NO_COCKTAIL ) |
| 632 | | GAME( 1990, weststry, bloodbro, weststry, weststry, 0, ROT0, "bootleg (Datsu)", "West Story (bootleg of Blood Bros.)", GAME_NO_COCKTAIL | GAME_NO_SOUND ) |
| 633 | | GAME( 1990, skysmash, 0, skysmash, skysmash, 0, ROT270, "Nihon System", "Sky Smasher", 0 ) |
| 641 | GAME( 1990, bloodbro, 0, bloodbro, bloodbro, 0, ROT0, "TAD Corporation", "Blood Bros. (set 1)", GAME_NO_COCKTAIL ) |
| 642 | GAME( 1990, bloodbroa,bloodbro, bloodbro, bloodbro, 0, ROT0, "TAD Corporation", "Blood Bros. (set 2)", GAME_NO_COCKTAIL ) |
| 643 | GAME( 1990, bloodbrob,bloodbro, bloodbro, bloodbro, 0, ROT0, "TAD Corporation", "Blood Bros. (set 3)", GAME_NO_COCKTAIL ) |
| 644 | GAME( 1990, weststry, bloodbro, weststry, weststry, 0, ROT0, "bootleg (Datsu)", "West Story (bootleg of Blood Bros.)", GAME_NO_COCKTAIL | GAME_NO_SOUND ) |
| 645 | GAME( 1990, skysmash, 0, skysmash, skysmash, 0, ROT270, "Nihon System", "Sky Smasher", 0 ) |
src/mame/drivers/meyc8088.c
| r15021 | r15022 | |
| 10 | 10 | also thanks to Darrell Hal Smith, Kevin Mullins |
| 11 | 11 | |
| 12 | 12 | |
| 13 | TODO: |
| 14 | - fix vblank failure |
| 15 | - inputs |
| 16 | |
| 13 | 17 | ****************************************************************/ |
| 14 | 18 | |
| 15 | 19 | #include "emu.h" |
| 16 | 20 | #include "cpu/i86/i86.h" |
| 17 | 21 | #include "machine/i8155.h" |
| 18 | 22 | #include "sound/dac.h" |
| 23 | #include "machine/nvram.h" |
| 19 | 24 | |
| 20 | 25 | class meyc8088_state : public driver_device |
| 21 | 26 | { |
| r15021 | r15022 | |
| 49 | 54 | static SCREEN_UPDATE_IND16( meyc8088 ) |
| 50 | 55 | { |
| 51 | 56 | meyc8088_state *state = screen.machine().driver_data<meyc8088_state>(); |
| 57 | UINT8 v[5]; |
| 58 | v[4] = state->m_status << 2 & 0x10; // video5: color prom d4 |
| 52 | 59 | |
| 53 | | for (int y = 0; y < 512; y++) |
| 60 | if (~state->m_status & 2) |
| 54 | 61 | { |
| 55 | | for (int x = 0; x < 64; x++) |
| 56 | | { |
| 57 | | UINT8 data = state->m_vram[y*64+x]; |
| 58 | | for (int i = 0; i < 8; i++) |
| 59 | | { |
| 60 | | bitmap.pix16(y, x << 3 | i) = (data << i & 0x80) ? 1 : 0; |
| 61 | | } |
| 62 | // screen off |
| 63 | bitmap.fill(v[4]); |
| 64 | return 0; |
| 65 | } |
| 62 | 66 | |
| 63 | | } |
| 67 | for (offs_t offs = 0x800; offs < 0x4000; offs+=2) |
| 68 | { |
| 69 | UINT8 y = (offs-0x800) >> 6; |
| 70 | UINT8 x = (offs-0x800) << 2; |
| 71 | |
| 72 | v[0] = state->m_vram[offs|0x0000]; // video1: color prom d0 |
| 73 | v[1] = state->m_vram[offs|0x0001]; // video2: color prom d1 |
| 74 | v[2] = state->m_vram[offs|0x4000]; // video3: color prom d2 |
| 75 | v[3] = state->m_vram[offs|0x4001]; // video4: color prom d3 |
| 76 | |
| 77 | for (int i = 0; i < 8; i++) |
| 78 | bitmap.pix16(y, x | i) = ((v[0] << i) >> 7 & 1) | ((v[1] << i) >> 6 & 2) | ((v[2] << i) >> 5 & 4) | ((v[3] << i) >> 4 & 8) | v[4]; |
| 64 | 79 | } |
| 65 | 80 | |
| 66 | 81 | return 0; |
| 67 | 82 | } |
| 68 | 83 | |
| 84 | static SCREEN_VBLANK( meyc8088 ) |
| 85 | { |
| 86 | meyc8088_state *state = screen.machine().driver_data<meyc8088_state>(); |
| 69 | 87 | |
| 88 | // INTR on LC255 (pulses at start and end of vblank), INTA hardwired to $20 |
| 89 | generic_pulse_irq_line_and_vector(state->m_maincpu, 0, 0x20, 1); |
| 90 | } |
| 91 | |
| 92 | |
| 70 | 93 | /*************************************************************************** |
| 71 | 94 | |
| 72 | 95 | I/O |
| r15021 | r15022 | |
| 107 | 130 | |
| 108 | 131 | |
| 109 | 132 | static ADDRESS_MAP_START( meyc8088_map, AS_PROGRAM, 8, meyc8088_state ) |
| 110 | | AM_RANGE(0x00000, 0x007ff) AM_RAM |
| 133 | AM_RANGE(0x00000, 0x007ff) AM_RAM AM_SHARE("nvram") |
| 111 | 134 | AM_RANGE(0x70000, 0x77fff) AM_RAM AM_SHARE("vram") |
| 112 | 135 | AM_RANGE(0xb0000, 0xb00ff) AM_DEVREADWRITE("i8155_2", i8155_device, memory_r, memory_w) |
| 113 | 136 | AM_RANGE(0xb0800, 0xb0807) AM_DEVREADWRITE("i8155_2", i8155_device, io_r, io_w) |
| 114 | 137 | AM_RANGE(0xb1000, 0xb10ff) AM_DEVREADWRITE("i8155_1", i8155_device, memory_r, memory_w) |
| 115 | 138 | AM_RANGE(0xb1800, 0xb1807) AM_DEVREADWRITE("i8155_1", i8155_device, io_r, io_w) |
| 116 | 139 | AM_RANGE(0xb2000, 0xb2000) AM_WRITE(drive_w) |
| 117 | | // AM_RANGE(0xb3000, 0xb3000) AM_NOP // 8251A, debug related |
| 118 | | // AM_RANGE(0xb3800, 0xb3800) AM_NOP // " |
| 140 | AM_RANGE(0xb3000, 0xb3000) AM_NOP // i8251A data (debug related, unpopulated on sold boards) |
| 141 | AM_RANGE(0xb3800, 0xb3800) AM_NOP // " |
| 119 | 142 | AM_RANGE(0xb4000, 0xb4000) AM_READWRITE(screen_flip_r, screen_flip_w) |
| 120 | 143 | AM_RANGE(0xb5000, 0xb5000) AM_READWRITE(video5_flip_r, video5_flip_w) |
| 121 | 144 | AM_RANGE(0xf8000, 0xfffff) AM_ROM |
| 122 | 145 | ADDRESS_MAP_END |
| 123 | 146 | |
| 124 | 147 | |
| 148 | static READ8_DEVICE_HANDLER(meyc8088_input_r) |
| 149 | { |
| 150 | meyc8088_state *state = device->machine().driver_data<meyc8088_state>(); |
| 151 | UINT8 ret = 0xff; |
| 152 | |
| 153 | // multiplexed switch inputs |
| 154 | if (~state->m_common & 1) ret &= input_port_read_safe(device->machine(), "C0", 0); // bit switches |
| 155 | if (~state->m_common & 2) ret &= input_port_read_safe(device->machine(), "C1", 0); // control switches |
| 156 | if (~state->m_common & 4) ret &= input_port_read_safe(device->machine(), "C2", 0); // light switches |
| 157 | if (~state->m_common & 8) ret &= input_port_read_safe(device->machine(), "C3", 0); // light switches |
| 158 | |
| 159 | return ret; |
| 160 | } |
| 161 | |
| 162 | static READ8_DEVICE_HANDLER(meyc8088_status_r) |
| 163 | { |
| 164 | meyc8088_state *state = device->machine().driver_data<meyc8088_state>(); |
| 165 | |
| 166 | // d0: /CR2 |
| 167 | // d1: screen on |
| 168 | // d2: video5 |
| 169 | // d3: N/C |
| 170 | // d4: battery ok |
| 171 | // d5: /drive on |
| 172 | return (state->m_status & 7) | 0x18; |
| 173 | } |
| 174 | |
| 175 | |
| 125 | 176 | static WRITE8_DEVICE_HANDLER(meyc8088_lights1_w) |
| 126 | 177 | { |
| 127 | 178 | // lite 1-8 |
| r15021 | r15022 | |
| 148 | 199 | |
| 149 | 200 | // d2-d5: /common |
| 150 | 201 | state->m_common = data >> 2 & 0xf; |
| 151 | | |
| 152 | | logerror("i8155 Port C: %02X\n", data); |
| 153 | 202 | } |
| 154 | 203 | |
| 155 | | static WRITE_LINE_DEVICE_HANDLER(meyc8088_i8155_1_timer_out) |
| 204 | static WRITE_LINE_DEVICE_HANDLER(meyc8088_sound_out) |
| 156 | 205 | { |
| 157 | | // clock 8251A |
| 158 | | //logerror("Timer 1 out %d\n", state); |
| 206 | dac_signed_w(device->machine().device("dac"), 0, state ? 0x7f : 0); |
| 159 | 207 | } |
| 160 | 208 | |
| 161 | | static WRITE_LINE_DEVICE_HANDLER(meyc8088_i8155_2_timer_out) |
| 162 | | { |
| 163 | | // sound dac |
| 164 | | //logerror("Timer 2 out %d\n", state); |
| 165 | | } |
| 166 | 209 | |
| 167 | | |
| 168 | | static READ8_DEVICE_HANDLER(meyc8088_status_r) |
| 169 | | { |
| 170 | | meyc8088_state *state = device->machine().driver_data<meyc8088_state>(); |
| 171 | | |
| 172 | | // d0: /CR2 |
| 173 | | // d1: screen on |
| 174 | | // d2: video5 |
| 175 | | // d3: N/C |
| 176 | | // d4: battery ok |
| 177 | | // d5: /drive on |
| 178 | | return (state->m_status & 7) | 0x18; |
| 179 | | } |
| 180 | | |
| 181 | 210 | static const i8155_interface i8155_intf[2] = |
| 182 | 211 | { |
| 183 | 212 | { |
| 184 | 213 | // all ports set to input |
| 185 | | DEVCB_INPUT_PORT("IN0"), |
| 214 | DEVCB_HANDLER(meyc8088_input_r), |
| 186 | 215 | DEVCB_NULL, |
| 187 | | DEVCB_INPUT_PORT("IN1"), |
| 216 | DEVCB_INPUT_PORT("SW"), // filtered switch inputs |
| 188 | 217 | DEVCB_NULL, |
| 189 | 218 | DEVCB_HANDLER(meyc8088_status_r), |
| 190 | 219 | DEVCB_NULL, |
| 191 | | DEVCB_LINE(meyc8088_i8155_1_timer_out) |
| 220 | DEVCB_NULL // i8251A trigger txc/rxc (debug related, unpopulated on sold boards) |
| 192 | 221 | }, |
| 193 | 222 | { |
| 194 | 223 | // all ports set to output |
| r15021 | r15022 | |
| 198 | 227 | DEVCB_HANDLER(meyc8088_lights1_w), |
| 199 | 228 | DEVCB_NULL, |
| 200 | 229 | DEVCB_HANDLER(meyc8088_common_w), |
| 201 | | DEVCB_LINE(meyc8088_i8155_2_timer_out) |
| 230 | DEVCB_LINE(meyc8088_sound_out) |
| 202 | 231 | } |
| 203 | 232 | }; |
| 204 | 233 | |
| r15021 | r15022 | |
| 210 | 239 | ***************************************************************************/ |
| 211 | 240 | |
| 212 | 241 | static INPUT_PORTS_START( gldarrow ) |
| 213 | | PORT_START("IN0") |
| 214 | | PORT_DIPNAME( 0x01, 0x01, "IN0 1" ) |
| 242 | PORT_START("SW") |
| 243 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_VBLANK ) |
| 244 | PORT_DIPNAME( 0x02, 0x02, "SW 2" ) |
| 245 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 246 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 247 | PORT_DIPNAME( 0x04, 0x04, "SW 3" ) |
| 248 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 249 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 250 | PORT_DIPNAME( 0x08, 0x08, "SW 4" ) |
| 251 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 252 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 253 | PORT_DIPNAME( 0x10, 0x10, "SW 5" ) |
| 254 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 255 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 256 | PORT_DIPNAME( 0x20, 0x20, "SW 6" ) |
| 257 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) |
| 258 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 259 | PORT_DIPNAME( 0x40, 0x40, "SW 7" ) |
| 260 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 261 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 262 | PORT_DIPNAME( 0x80, 0x80, "SW 8" ) |
| 263 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 264 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 265 | |
| 266 | PORT_START("C0") |
| 267 | PORT_DIPNAME( 0x01, 0x00, "Bit Switch 1" ) PORT_DIPLOCATION("BSW:1") |
| 268 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 269 | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) |
| 270 | PORT_DIPNAME( 0x02, 0x00, "Bit Switch 2" ) PORT_DIPLOCATION("BSW:2") |
| 271 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 272 | PORT_DIPSETTING( 0x02, DEF_STR( On ) ) |
| 273 | PORT_DIPNAME( 0x04, 0x00, "Bit Switch 3" ) PORT_DIPLOCATION("BSW:3") |
| 274 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 275 | PORT_DIPSETTING( 0x04, DEF_STR( On ) ) |
| 276 | PORT_DIPNAME( 0x08, 0x00, "Bit Switch 4" ) PORT_DIPLOCATION("BSW:4") |
| 277 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 278 | PORT_DIPSETTING( 0x08, DEF_STR( On ) ) |
| 279 | PORT_DIPNAME( 0x10, 0x00, "Bit Switch 5" ) PORT_DIPLOCATION("BSW:5") |
| 280 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 281 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 282 | PORT_DIPNAME( 0x20, 0x00, "Bit Switch 6" ) PORT_DIPLOCATION("BSW:6") |
| 283 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 284 | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) |
| 285 | PORT_DIPNAME( 0x40, 0x00, "Bit Switch 7" ) PORT_DIPLOCATION("BSW:7") |
| 286 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 287 | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
| 288 | PORT_DIPNAME( 0x80, 0x00, "Bit Switch 8" ) PORT_DIPLOCATION("BSW:8") |
| 289 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 290 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 291 | |
| 292 | PORT_START("C1") |
| 293 | PORT_DIPNAME( 0x01, 0x01, "C1 1" ) |
| 215 | 294 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 216 | 295 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 217 | | PORT_DIPNAME( 0x02, 0x02, "IN0 2" ) |
| 296 | PORT_DIPNAME( 0x02, 0x02, "C1 2" ) |
| 218 | 297 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 219 | 298 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 220 | | PORT_DIPNAME( 0x04, 0x04, "IN0 3" ) |
| 299 | PORT_DIPNAME( 0x04, 0x04, "C1 3" ) |
| 221 | 300 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 222 | 301 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 223 | | PORT_DIPNAME( 0x08, 0x08, "IN0 4" ) |
| 302 | PORT_DIPNAME( 0x08, 0x08, "C1 4" ) |
| 224 | 303 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 225 | 304 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 226 | | PORT_DIPNAME( 0x10, 0x10, "IN0 5" ) |
| 305 | PORT_DIPNAME( 0x10, 0x10, "C1 5" ) |
| 227 | 306 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 228 | 307 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 229 | | PORT_DIPNAME( 0x20, 0x20, "IN0 6" ) |
| 308 | PORT_DIPNAME( 0x20, 0x20, "C1 6" ) |
| 230 | 309 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) |
| 231 | 310 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 232 | | PORT_DIPNAME( 0x40, 0x40, "IN0 7" ) |
| 311 | PORT_DIPNAME( 0x40, 0x40, "C1 7" ) |
| 233 | 312 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 234 | 313 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 235 | | PORT_DIPNAME( 0x80, 0x80, "IN0 8" ) |
| 314 | PORT_DIPNAME( 0x80, 0x80, "C1 8" ) |
| 236 | 315 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 237 | 316 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 238 | 317 | |
| 239 | | PORT_START("IN1") |
| 240 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_VBLANK ) |
| 241 | | PORT_DIPNAME( 0x02, 0x02, "IN1 2" ) |
| 318 | PORT_START("C2") |
| 319 | PORT_DIPNAME( 0x01, 0x01, "C2 1" ) |
| 320 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 321 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 322 | PORT_DIPNAME( 0x02, 0x02, "C2 2" ) |
| 242 | 323 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 243 | 324 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 244 | | PORT_DIPNAME( 0x04, 0x04, "IN1 3" ) |
| 325 | PORT_DIPNAME( 0x04, 0x04, "C2 3" ) |
| 245 | 326 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 246 | 327 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 247 | | PORT_DIPNAME( 0x08, 0x08, "IN1 4" ) |
| 328 | PORT_DIPNAME( 0x08, 0x08, "C2 4" ) |
| 248 | 329 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 249 | 330 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 250 | | PORT_DIPNAME( 0x10, 0x10, "IN1 5" ) |
| 331 | PORT_DIPNAME( 0x10, 0x10, "C2 5" ) |
| 251 | 332 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 252 | 333 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 253 | | PORT_DIPNAME( 0x20, 0x20, "IN1 6" ) |
| 334 | PORT_DIPNAME( 0x20, 0x20, "C2 6" ) |
| 254 | 335 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) |
| 255 | 336 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 256 | | PORT_DIPNAME( 0x40, 0x40, "IN1 7" ) |
| 337 | PORT_DIPNAME( 0x40, 0x40, "C2 7" ) |
| 257 | 338 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 258 | 339 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 259 | | PORT_DIPNAME( 0x80, 0x80, "IN1 8" ) |
| 340 | PORT_DIPNAME( 0x80, 0x80, "C2 8" ) |
| 260 | 341 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 261 | 342 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 262 | 343 | |
| 263 | | PORT_START("IN2") |
| 264 | | PORT_DIPNAME( 0x01, 0x01, "IN2 1" ) |
| 344 | PORT_START("C3") |
| 345 | PORT_DIPNAME( 0x01, 0x01, "C3 1" ) |
| 265 | 346 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 266 | 347 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 267 | | PORT_DIPNAME( 0x02, 0x02, "IN2 2" ) |
| 348 | PORT_DIPNAME( 0x02, 0x02, "C3 2" ) |
| 268 | 349 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 269 | 350 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 270 | | PORT_DIPNAME( 0x04, 0x04, "IN2 3" ) |
| 351 | PORT_DIPNAME( 0x04, 0x04, "C3 3" ) |
| 271 | 352 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 272 | 353 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 273 | | PORT_DIPNAME( 0x08, 0x08, "IN2 4" ) |
| 354 | PORT_DIPNAME( 0x08, 0x08, "C3 4" ) |
| 274 | 355 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 275 | 356 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 276 | | PORT_DIPNAME( 0x10, 0x10, "IN2 5" ) |
| 357 | PORT_DIPNAME( 0x10, 0x10, "C3 5" ) |
| 277 | 358 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 278 | 359 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 279 | | PORT_DIPNAME( 0x20, 0x20, "IN2 6" ) |
| 360 | PORT_DIPNAME( 0x20, 0x20, "C3 6" ) |
| 280 | 361 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) |
| 281 | 362 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 282 | | PORT_DIPNAME( 0x40, 0x40, "IN2 7" ) |
| 363 | PORT_DIPNAME( 0x40, 0x40, "C3 7" ) |
| 283 | 364 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 284 | 365 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 285 | | PORT_DIPNAME( 0x80, 0x80, "IN2 8" ) |
| 366 | PORT_DIPNAME( 0x80, 0x80, "C3 8" ) |
| 286 | 367 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 287 | 368 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 288 | 369 | INPUT_PORTS_END |
| r15021 | r15022 | |
| 294 | 375 | |
| 295 | 376 | ***************************************************************************/ |
| 296 | 377 | |
| 297 | | static INTERRUPT_GEN( meyc8088_irq ) |
| 298 | | { |
| 299 | | // INTR on LC255, INTA hardwired to $20 |
| 300 | | device_set_input_line_and_vector(device, 0, HOLD_LINE, 0x20); |
| 301 | | } |
| 302 | | |
| 303 | 378 | static MACHINE_CONFIG_START( meyc8088, meyc8088_state ) |
| 304 | 379 | |
| 305 | 380 | /* basic machine hardware */ |
| 306 | 381 | MCFG_CPU_ADD("maincpu", I8088, XTAL_15MHz / 3) |
| 307 | 382 | MCFG_CPU_PROGRAM_MAP(meyc8088_map) |
| 308 | | MCFG_CPU_VBLANK_INT("screen", meyc8088_irq) |
| 309 | 383 | |
| 310 | | MCFG_I8155_ADD("i8155_1", XTAL_15MHz / 3, i8155_intf[0]) |
| 311 | | MCFG_I8155_ADD("i8155_2", XTAL_15MHz / 3, i8155_intf[1]) |
| 384 | MCFG_I8155_ADD("i8155_1", XTAL_15MHz / (3*2*1), i8155_intf[0]) |
| 385 | MCFG_I8155_ADD("i8155_2", XTAL_15MHz / (3*2*32), i8155_intf[1]) |
| 312 | 386 | |
| 387 | MCFG_NVRAM_ADD_0FILL("nvram") |
| 388 | |
| 313 | 389 | /* video hardware */ |
| 314 | 390 | MCFG_SCREEN_ADD("screen", RASTER) |
| 315 | | MCFG_SCREEN_REFRESH_RATE(60) |
| 316 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) |
| 317 | | MCFG_SCREEN_SIZE(512,512) |
| 318 | | MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 512-1) |
| 391 | MCFG_SCREEN_RAW_PARAMS(XTAL_15MHz/3, 320, 0, 256, 261, 0, 224) |
| 319 | 392 | MCFG_SCREEN_UPDATE_STATIC(meyc8088) |
| 393 | MCFG_SCREEN_VBLANK_STATIC(meyc8088) |
| 320 | 394 | |
| 321 | | MCFG_PALETTE_LENGTH(8) |
| 395 | MCFG_PALETTE_LENGTH(32) |
| 322 | 396 | |
| 397 | /* sound hardware */ |
| 398 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 399 | |
| 400 | MCFG_SOUND_ADD("dac", DAC, 0) |
| 401 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 323 | 402 | MACHINE_CONFIG_END |
| 324 | 403 | |
| 325 | 404 | |
| r15021 | r15022 | |
| 334 | 413 | ROM_END |
| 335 | 414 | |
| 336 | 415 | |
| 337 | | GAME( 1984, gldarrow, 0, meyc8088, gldarrow, 0, ROT0, "Meyco Games, Inc.", "Golden Arrow", GAME_NOT_WORKING | GAME_NO_SOUND ) |
| 416 | GAME( 1984, gldarrow, 0, meyc8088, gldarrow, 0, ROT0, "Meyco Games, Inc.", "Golden Arrow", GAME_NOT_WORKING | GAME_WRONG_COLORS ) |