trunk/src/mame/drivers/plygonet.c
| r23867 | r23868 | |
| 50 | 50 | 5c0000-5fffff = UNUSED |
| 51 | 51 | |
| 52 | 52 | |
| 53 | | SYS (Write only?) |
| 54 | | ================= |
| 55 | | |
| 56 | | D28 = /FIXKILL - Disable 'FIX' layer? |
| 57 | | D27 = MUTE |
| 58 | | D26 = EEPROM CLK |
| 59 | | D25 = EEPROM CS |
| 60 | | D24 = EEPROM DATA |
| 61 | | D23 = BRMAS - 68k bus error mask |
| 62 | | D22 = L7MAS - L7 interrupt mask (unusued - should always be '1') |
| 63 | | D21 = /L5MAS - L5 interrupt mask/acknowledge |
| 64 | | D20 = L3MAS - L3 interrupt mask |
| 65 | | D19 = VFLIP - Flip video vertically |
| 66 | | D18 = HFLIP - Flip video horizontally |
| 67 | | D17 = COIN2 - Coin counter 2 |
| 68 | | D16 = COIN1 - Coin counter 1 |
| 69 | | |
| 70 | | |
| 71 | 53 | DSP |
| 72 | 54 | === |
| 73 | 55 | |
| r23867 | r23868 | |
| 92 | 74 | |
| 93 | 75 | static const eeprom_interface eeprom_intf = |
| 94 | 76 | { |
| 95 | | 7, /* address bits */ |
| 96 | | 8, /* data bits */ |
| 97 | | "011000", /* read command */ |
| 98 | | "010100", /* write command */ |
| 99 | | "0100100000000",/* erase command */ |
| 100 | | "0100000000000",/* lock command */ |
| 101 | | "0100110000000" /* unlock command */ |
| 77 | 9, // address bits |
| 78 | 8, // data bits |
| 79 | "*110", // read command |
| 80 | "*101", // write command |
| 81 | "*111", // erase command |
| 82 | "*10000xxxxxxx", // lock command |
| 83 | "*10011xxxxxxx", // unlock command |
| 84 | 1, |
| 85 | 0 |
| 86 | // "*10001xxxxxxx", // write all |
| 87 | // "*10010xxxxxxx" // erase all |
| 102 | 88 | }; |
| 103 | 89 | |
| 104 | | READ32_MEMBER(polygonet_state::polygonet_eeprom_r) |
| 90 | READ8_MEMBER(polygonet_state::polygonet_inputs_r) |
| 105 | 91 | { |
| 106 | | if (ACCESSING_BITS_0_15) |
| 107 | | { |
| 108 | | return 0x0200 | (m_eeprom->read_bit() << 8); |
| 109 | | } |
| 110 | | else |
| 111 | | { |
| 112 | | UINT8 lowInputBits = ioport("IN1")->read(); |
| 113 | | UINT8 highInputBits = ioport("IN0")->read(); |
| 114 | | return ((highInputBits << 24) | (lowInputBits << 16)); |
| 115 | | } |
| 116 | | |
| 117 | | logerror("unk access to eeprom port (mask %x)\n", mem_mask); |
| 118 | | return 0; |
| 92 | return m_inputs[offset]->read(); |
| 119 | 93 | } |
| 120 | 94 | |
| 121 | 95 | |
| 122 | | WRITE32_MEMBER(polygonet_state::polygonet_eeprom_w) |
| 96 | WRITE8_MEMBER(polygonet_state::polygonet_sys_w) |
| 123 | 97 | { |
| 124 | | if (ACCESSING_BITS_24_31) |
| 98 | switch (offset) |
| 125 | 99 | { |
| 126 | | ioport("EEPROMOUT")->write(data, 0xffffffff); |
| 127 | | return; |
| 100 | case 0: |
| 101 | /* |
| 102 | D28 = /FIXKILL - Disable 'FIX' layer? |
| 103 | D27 = MUTE |
| 104 | D26 = EEPROM CLK |
| 105 | D25 = EEPROM CS |
| 106 | D24 = EEPROM DATA |
| 107 | */ |
| 108 | m_eeprom->write_bit(data & 1); |
| 109 | m_eeprom->set_cs_line((data & 2) ? CLEAR_LINE : ASSERT_LINE); |
| 110 | m_eeprom->set_clock_line((data & 4) ? ASSERT_LINE : CLEAR_LINE); |
| 111 | |
| 112 | m_sys0 = data; |
| 113 | break; |
| 114 | |
| 115 | case 1: |
| 116 | /* |
| 117 | D23 = BRMAS - 68k bus error mask |
| 118 | D22 = L7MAS - L7 interrupt mask (unused - should always be '1') |
| 119 | D21 = /L5MAS - L5 interrupt mask/acknowledge (vblank) |
| 120 | D20 = L3MAS - L3 interrupt mask (network) |
| 121 | D19 = VFLIP - Flip video vertically |
| 122 | D18 = HFLIP - Flip video horizontally |
| 123 | D17 = COIN2 - Coin counter 2 |
| 124 | D16 = COIN1 - Coin counter 1 |
| 125 | */ |
| 126 | coin_counter_w(machine(), 0, data & 1); |
| 127 | coin_counter_w(machine(), 1, data & 2); |
| 128 | |
| 129 | if (~data & 0x20) |
| 130 | m_maincpu->set_input_line(M68K_IRQ_5, CLEAR_LINE); |
| 131 | |
| 132 | m_sys1 = data; |
| 133 | break; |
| 134 | |
| 135 | default: |
| 136 | break; |
| 128 | 137 | } |
| 129 | | |
| 130 | | logerror("unknown write %x (mask %x) to eeprom\n", data, mem_mask); |
| 131 | 138 | } |
| 132 | 139 | |
| 133 | | /* TTL tile readback for ROM test */ |
| 134 | | READ32_MEMBER(polygonet_state::ttl_rom_r) |
| 135 | | { |
| 136 | | UINT32 *ROM; |
| 137 | | ROM = (UINT32 *)memregion("gfx1")->base(); |
| 138 | 140 | |
| 139 | | return ROM[offset]; |
| 140 | | } |
| 141 | | |
| 142 | | /* PSAC2 tile readback for ROM test */ |
| 143 | | READ32_MEMBER(polygonet_state::psac_rom_r) |
| 144 | | { |
| 145 | | UINT32 *ROM; |
| 146 | | ROM = (UINT32 *)memregion("gfx2")->base(); |
| 147 | | |
| 148 | | return ROM[offset]; |
| 149 | | } |
| 150 | | |
| 151 | 141 | /* irqs 3, 5, and 7 have valid vectors */ |
| 152 | 142 | /* irq 3 is network. don't generate if you don't emulate the network h/w! */ |
| 153 | 143 | /* irq 5 is vblank */ |
| 154 | 144 | /* irq 7 does nothing (it jsrs to a rts and then rte) */ |
| 155 | 145 | INTERRUPT_GEN_MEMBER(polygonet_state::polygonet_interrupt) |
| 156 | 146 | { |
| 157 | | device.execute().set_input_line(M68K_IRQ_5, HOLD_LINE); |
| 147 | if (m_sys1 & 0x20) |
| 148 | device.execute().set_input_line(M68K_IRQ_5, ASSERT_LINE); |
| 158 | 149 | } |
| 159 | 150 | |
| 160 | 151 | /* sound CPU communications */ |
| 161 | | READ32_MEMBER(polygonet_state::sound_r) |
| 152 | READ8_MEMBER(polygonet_state::sound_comms_r) |
| 162 | 153 | { |
| 163 | | int latch = soundlatch3_byte_r(space, 0); |
| 164 | | |
| 165 | | if ((latch == 0xd) || (latch == 0xe)) latch = 0xf; /* hack: until 54539 NMI disable found */ |
| 166 | | |
| 167 | | return latch<<8; |
| 154 | switch (offset) |
| 155 | { |
| 156 | case 0: |
| 157 | // unknown |
| 158 | return 0; |
| 159 | |
| 160 | case 2: |
| 161 | return soundlatch_byte_r(space, 0); |
| 162 | |
| 163 | default: |
| 164 | break; |
| 165 | } |
| 166 | |
| 167 | return 0; |
| 168 | 168 | } |
| 169 | 169 | |
| 170 | | WRITE32_MEMBER(polygonet_state::sound_w) |
| 170 | WRITE8_MEMBER(polygonet_state::sound_comms_w) |
| 171 | 171 | { |
| 172 | | if (ACCESSING_BITS_8_15) |
| 172 | switch (offset) |
| 173 | 173 | { |
| 174 | | soundlatch_byte_w(space, 0, (data>>8)&0xff); |
| 174 | case 0: |
| 175 | // unknown |
| 176 | break; |
| 177 | |
| 178 | case 2: |
| 179 | soundlatch2_byte_w(space, 0, data); |
| 180 | break; |
| 181 | |
| 182 | case 3: |
| 183 | soundlatch3_byte_w(space, 0, data); |
| 184 | break; |
| 185 | |
| 186 | default: |
| 187 | break; |
| 175 | 188 | } |
| 176 | | else |
| 177 | | { |
| 178 | | soundlatch2_byte_w(space, 0, data&0xff); |
| 179 | | } |
| 180 | 189 | } |
| 181 | 190 | |
| 182 | 191 | WRITE32_MEMBER(polygonet_state::sound_irq_w) |
| 183 | 192 | { |
| 184 | | m_soundcpu->set_input_line(0, HOLD_LINE); |
| 193 | m_audiocpu->set_input_line(0, HOLD_LINE); // where is ack? |
| 185 | 194 | } |
| 186 | 195 | |
| 187 | 196 | /* DSP communications */ |
| r23867 | r23868 | |
| 256 | 265 | { |
| 257 | 266 | // logerror("RESET ASSERTED\n"); |
| 258 | 267 | m_dsp->set_input_line(DSP56K_IRQ_RESET, ASSERT_LINE); |
| 259 | | |
| 260 | | /* A little hacky - I can't seem to set these lines anywhere else where reset is asserted, so i do it here */ |
| 261 | | m_dsp->set_input_line(DSP56K_IRQ_MODA, ASSERT_LINE); |
| 262 | | m_dsp->set_input_line(DSP56K_IRQ_MODB, CLEAR_LINE); |
| 263 | 268 | } |
| 264 | 269 | |
| 265 | 270 | /* 0x04000000 is the COMBNK line - it switches who has access to the shared RAM - the dsp or the 68020 */ |
| r23867 | r23868 | |
| 503 | 508 | AM_RANGE(0x200000, 0x21ffff) AM_RAM_WRITE(plygonet_palette_w) AM_SHARE("paletteram") |
| 504 | 509 | AM_RANGE(0x400000, 0x40001f) AM_DEVREADWRITE16_LEGACY("k053936", k053936_ctrl_r, k053936_ctrl_w, 0xffffffff) |
| 505 | 510 | AM_RANGE(0x440000, 0x440fff) AM_READWRITE(polygonet_roz_ram_r, polygonet_roz_ram_w) |
| 506 | | AM_RANGE(0x480000, 0x4bffff) AM_READ(polygonet_eeprom_r) |
| 507 | | AM_RANGE(0x4C0000, 0x4fffff) AM_WRITE(polygonet_eeprom_w) |
| 511 | AM_RANGE(0x480000, 0x480003) AM_READ8(polygonet_inputs_r, 0xffffffff) |
| 512 | AM_RANGE(0x4c0000, 0x4c0003) AM_WRITE8(polygonet_sys_w, 0xffffffff) |
| 508 | 513 | AM_RANGE(0x500000, 0x503fff) AM_RAM_WRITE(shared_ram_write) AM_SHARE("shared_ram") |
| 509 | 514 | AM_RANGE(0x504000, 0x504003) AM_WRITE(dsp_w_lines) |
| 510 | 515 | AM_RANGE(0x506000, 0x50600f) AM_READWRITE(dsp_host_interface_r, dsp_host_interface_w) |
| r23867 | r23868 | |
| 512 | 517 | AM_RANGE(0x541000, 0x54101f) AM_RAM |
| 513 | 518 | AM_RANGE(0x580000, 0x5807ff) AM_RAM |
| 514 | 519 | AM_RANGE(0x580800, 0x580803) AM_READ(network_r) AM_WRITENOP /* network RAM | registers? */ |
| 515 | | AM_RANGE(0x600004, 0x600007) AM_WRITE(sound_w) |
| 516 | | AM_RANGE(0x600008, 0x60000b) AM_READ(sound_r) |
| 520 | AM_RANGE(0x600004, 0x600007) AM_WRITE8(sound_comms_w, 0xffffffff) |
| 521 | AM_RANGE(0x600008, 0x60000b) AM_READ8(sound_comms_r, 0xffffffff) |
| 517 | 522 | AM_RANGE(0x640000, 0x640003) AM_WRITE(sound_irq_w) |
| 518 | 523 | AM_RANGE(0x680000, 0x680003) AM_WRITE(watchdog_reset32_w) |
| 519 | | AM_RANGE(0x700000, 0x73ffff) AM_READ(psac_rom_r) |
| 520 | | AM_RANGE(0x780000, 0x79ffff) AM_READ(ttl_rom_r) |
| 524 | AM_RANGE(0x700000, 0x73ffff) AM_ROM AM_REGION("gfx2", 0) |
| 525 | AM_RANGE(0x780000, 0x79ffff) AM_ROM AM_REGION("gfx1", 0) |
| 521 | 526 | AM_RANGE(0xff8000, 0xffffff) AM_RAM |
| 522 | 527 | ADDRESS_MAP_END |
| 523 | 528 | |
| r23867 | r23868 | |
| 540 | 545 | |
| 541 | 546 | /**********************************************************************************/ |
| 542 | 547 | |
| 543 | | void polygonet_state::reset_sound_region() |
| 544 | | { |
| 545 | | membank("bank2")->set_base(memregion("soundcpu")->base() + 0x10000 + m_cur_sound_region*0x4000); |
| 546 | | } |
| 547 | 548 | |
| 548 | 549 | WRITE8_MEMBER(polygonet_state::sound_bankswitch_w) |
| 549 | 550 | { |
| 550 | | m_cur_sound_region = (data & 0x1f); |
| 551 | | reset_sound_region(); |
| 551 | // d0-d2: bank |
| 552 | // higher bits: ? (only used in plygonet) |
| 553 | if ((m_sound_bank & 7) != (data & 7)) |
| 554 | membank("bank1")->set_entry(data & 7); |
| 555 | |
| 556 | m_sound_bank = data; |
| 552 | 557 | } |
| 553 | 558 | |
| 554 | | INTERRUPT_GEN_MEMBER(polygonet_state::audio_interrupt) |
| 555 | | { |
| 556 | | device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| 557 | | } |
| 558 | 559 | |
| 560 | |
| 559 | 561 | static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, polygonet_state ) |
| 560 | 562 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 561 | | AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2") |
| 562 | | AM_RANGE(0x0000, 0xbfff) AM_WRITENOP |
| 563 | AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") |
| 563 | 564 | AM_RANGE(0xc000, 0xdfff) AM_RAM |
| 564 | 565 | AM_RANGE(0xe000, 0xe22f) AM_DEVREADWRITE("k054539_1", k054539_device, read, write) |
| 565 | 566 | AM_RANGE(0xe230, 0xe3ff) AM_RAM |
| 566 | 567 | AM_RANGE(0xe400, 0xe62f) AM_DEVREADWRITE("k054539_2", k054539_device, read, write) |
| 567 | 568 | AM_RANGE(0xe630, 0xe7ff) AM_RAM |
| 568 | | AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch3_byte_w) |
| 569 | | AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch_byte_r) |
| 570 | | AM_RANGE(0xf003, 0xf003) AM_READ(soundlatch2_byte_r) |
| 569 | AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch_byte_w) |
| 570 | AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch2_byte_r) |
| 571 | AM_RANGE(0xf003, 0xf003) AM_READ(soundlatch3_byte_r) |
| 571 | 572 | AM_RANGE(0xf800, 0xf800) AM_WRITE(sound_bankswitch_w) |
| 572 | | AM_RANGE(0xfff1, 0xfff3) AM_WRITENOP |
| 573 | 573 | ADDRESS_MAP_END |
| 574 | 574 | |
| 575 | |
| 576 | static void sound_nmi( device_t *device ) |
| 577 | { |
| 578 | polygonet_state *state = device->machine().driver_data<polygonet_state>(); |
| 579 | state->m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); // where is ack? |
| 580 | } |
| 581 | |
| 582 | |
| 575 | 583 | static const k054539_interface k054539_config = |
| 576 | 584 | { |
| 577 | | "shared" |
| 585 | "shared", |
| 586 | NULL, |
| 587 | sound_nmi |
| 578 | 588 | }; |
| 579 | 589 | |
| 580 | 590 | /**********************************************************************************/ |
| r23867 | r23868 | |
| 589 | 599 | { 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4, 8*4, |
| 590 | 600 | 9*4, 10*4, 11*4, 12*4, 13*4, 14*4, 15*4 }, |
| 591 | 601 | |
| 592 | | 128*8 |
| 602 | 128*8 |
| 593 | 603 | }; |
| 594 | 604 | |
| 595 | 605 | static GFXDECODE_START( plygonet ) |
| 596 | 606 | GFXDECODE_ENTRY( "gfx2", 0, bglayout, 0x0000, 64 ) |
| 597 | 607 | GFXDECODE_END |
| 598 | 608 | |
| 599 | | void polygonet_state::machine_start() |
| 609 | |
| 610 | void polygonet_state::machine_reset() |
| 600 | 611 | { |
| 601 | | logerror("Polygonet machine start\n"); |
| 612 | membank("bank1")->set_entry(0); |
| 613 | m_sound_bank = 0; |
| 614 | |
| 615 | m_sys0 = 0; |
| 616 | m_sys1 = 0; |
| 602 | 617 | |
| 603 | | /* Set the dsp56k lines */ |
| 604 | 618 | /* It's presumed the hardware has hard-wired operating mode 1 (MODA = 1, MODB = 0) */ |
| 605 | | /* TODO: This should work, but the MAME core appears to do something funny. |
| 606 | | Not a big deal - it's hacked in dsp_w_lines. */ |
| 607 | | //m_dsp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); |
| 608 | | //m_dsp->set_input_line(DSP56K_IRQ_MODA, ASSERT_LINE); |
| 609 | | //m_dsp->set_input_line(DSP56K_IRQ_MODB, CLEAR_LINE); |
| 619 | m_dsp->set_input_line(DSP56K_IRQ_RESET, ASSERT_LINE); |
| 620 | m_dsp->set_input_line(DSP56K_IRQ_MODA, ASSERT_LINE); |
| 621 | m_dsp->set_input_line(DSP56K_IRQ_MODB, CLEAR_LINE); |
| 610 | 622 | } |
| 611 | 623 | |
| 624 | void polygonet_state::machine_start() |
| 625 | { |
| 626 | m_inputs[0] = ioport("IN0"); |
| 627 | m_inputs[1] = ioport("IN1"); |
| 628 | m_inputs[2] = ioport("IN2"); |
| 629 | m_inputs[3] = ioport("IN3"); |
| 630 | |
| 631 | /* save states */ |
| 632 | save_item(NAME(m_dsp56k_bank00_ram)); |
| 633 | save_item(NAME(m_dsp56k_bank01_ram)); |
| 634 | save_item(NAME(m_dsp56k_bank02_ram)); |
| 635 | save_item(NAME(m_dsp56k_shared_ram_16)); |
| 636 | save_item(NAME(m_dsp56k_bank04_ram)); |
| 637 | save_item(NAME(m_sys0)); |
| 638 | save_item(NAME(m_sys1)); |
| 639 | save_item(NAME(m_sound_bank)); |
| 640 | } |
| 641 | |
| 612 | 642 | static const k053936_interface polygonet_k053936_intf = |
| 613 | 643 | { |
| 614 | 644 | 0, 0, 0 /* wrap, xoff, yoff */ |
| r23867 | r23868 | |
| 616 | 646 | |
| 617 | 647 | static MACHINE_CONFIG_START( plygonet, polygonet_state ) |
| 618 | 648 | |
| 619 | | MCFG_CPU_ADD("maincpu", M68EC020, 16000000) /* 16 MHz (xtal is 32.0 MHz) */ |
| 649 | MCFG_CPU_ADD("maincpu", M68EC020, XTAL_32MHz/2) |
| 620 | 650 | MCFG_CPU_PROGRAM_MAP(main_map) |
| 621 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", polygonet_state, polygonet_interrupt) |
| 651 | MCFG_CPU_VBLANK_INT_DRIVER("screen", polygonet_state, polygonet_interrupt) |
| 622 | 652 | |
| 623 | | MCFG_CPU_ADD("dsp", DSP56156, 40000000) /* xtal is 40.0 MHz, DSP has an internal divide-by-2 */ |
| 653 | MCFG_CPU_ADD("dsp", DSP56156, XTAL_40MHz) |
| 624 | 654 | MCFG_CPU_PROGRAM_MAP(dsp_program_map) |
| 625 | 655 | MCFG_CPU_DATA_MAP(dsp_data_map) |
| 626 | 656 | |
| 627 | | MCFG_CPU_ADD("soundcpu", Z80, 8000000) |
| 657 | MCFG_CPU_ADD("audiocpu", Z80, 8000000) |
| 628 | 658 | MCFG_CPU_PROGRAM_MAP(sound_map) |
| 629 | | MCFG_CPU_PERIODIC_INT_DRIVER(polygonet_state, audio_interrupt, 480) |
| 659 | |
| 660 | MCFG_QUANTUM_PERFECT_CPU("maincpu") /* TODO: TEMPORARY! UNTIL A MORE LOCALIZED SYNC CAN BE MADE */ |
| 630 | 661 | |
| 662 | MCFG_EEPROM_ADD("eeprom", eeprom_intf) |
| 631 | 663 | |
| 632 | 664 | MCFG_GFXDECODE(plygonet) |
| 633 | 665 | |
| 634 | | MCFG_EEPROM_ADD("eeprom", eeprom_intf) |
| 635 | | |
| 636 | | /* TODO: TEMPORARY! UNTIL A MORE LOCALIZED SYNC CAN BE MADE */ |
| 637 | | MCFG_QUANTUM_TIME(attotime::from_hz(1200000)) |
| 638 | | |
| 639 | 666 | /* video hardware */ |
| 640 | 667 | MCFG_SCREEN_ADD("screen", RASTER) |
| 641 | 668 | MCFG_SCREEN_REFRESH_RATE(60) |
| r23867 | r23868 | |
| 646 | 673 | |
| 647 | 674 | MCFG_PALETTE_LENGTH(32768) |
| 648 | 675 | |
| 649 | | |
| 650 | 676 | MCFG_K053936_ADD("k053936", polygonet_k053936_intf) |
| 651 | 677 | |
| 652 | 678 | /* sound hardware */ |
| r23867 | r23868 | |
| 668 | 694 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 669 | 695 | PORT_SERVICE_NO_TOGGLE( 0x02, IP_ACTIVE_LOW ) |
| 670 | 696 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 671 | | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 672 | | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) /* SW1 (changes player color). It's mapped on the JAMMA connector and plugs into an external switch mech. */ |
| 673 | | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON4 ) /* SW2 (changes player color). It's mapped on the JAMMA connector and plugs into an external switch mech. */ |
| 697 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) // Start 1, unused |
| 698 | PORT_DIPNAME( 0x30, 0x00, "Player Color" ) /* 0x10(SW1), 0x20(SW2). It's mapped on the JAMMA connector and plugs into an external switch mech. */ |
| 699 | PORT_DIPSETTING( 0x00, "Red" ) |
| 700 | PORT_DIPSETTING( 0x10, "Yellow" ) |
| 701 | PORT_DIPSETTING( 0x20, "Green" ) |
| 702 | PORT_DIPSETTING( 0x30, "Blue" ) |
| 674 | 703 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 675 | 704 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 676 | | |
| 705 | |
| 677 | 706 | PORT_START("IN1") |
| 678 | | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP ) PORT_PLAYER(1) |
| 679 | | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN ) PORT_PLAYER(1) |
| 680 | | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP ) PORT_PLAYER(1) |
| 681 | | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN ) PORT_PLAYER(1) |
| 682 | | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 683 | | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) |
| 707 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP ) |
| 708 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN ) |
| 709 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP ) |
| 710 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN ) |
| 711 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) |
| 712 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) |
| 684 | 713 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 685 | 714 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 686 | 715 | |
| 687 | | PORT_START( "EEPROMOUT" ) |
| 688 | | PORT_BIT( 0x01000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, write_bit) |
| 689 | | PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_cs_line) |
| 690 | | PORT_BIT( 0x04000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_clock_line) |
| 691 | | INPUT_PORTS_END |
| 692 | | |
| 693 | | static INPUT_PORTS_START( polynetw ) |
| 694 | | PORT_START("IN0") |
| 695 | | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 696 | | PORT_SERVICE_NO_TOGGLE( 0x02, IP_ACTIVE_LOW ) |
| 697 | | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 698 | | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 699 | | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* SW1 (changes player color). It's mapped on the JAMMA connector and plugs into an external switch mech. */ |
| 700 | | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) /* SW2 (changes player color). It's mapped on the JAMMA connector and plugs into an external switch mech. */ |
| 716 | PORT_START("IN2") |
| 717 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_device, read_bit) |
| 718 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_TILT ) |
| 719 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 720 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) // Start 2, unused |
| 721 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 722 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 701 | 723 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 702 | 724 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 703 | 725 | |
| 704 | | PORT_START("IN1") |
| 705 | | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) |
| 706 | | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) |
| 707 | | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) |
| 708 | | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) |
| 709 | | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 710 | | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_PLAYER(1) |
| 726 | PORT_START("IN3") |
| 727 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 728 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 729 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 730 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 731 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 732 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 711 | 733 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 712 | 734 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 735 | INPUT_PORTS_END |
| 713 | 736 | |
| 714 | | PORT_START( "EEPROMOUT" ) |
| 715 | | PORT_BIT( 0x01000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, write_bit) |
| 716 | | PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_cs_line) |
| 717 | | PORT_BIT( 0x04000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_clock_line) |
| 737 | static INPUT_PORTS_START( polynetw ) |
| 738 | PORT_INCLUDE( polygonet ) |
| 739 | |
| 740 | PORT_MODIFY("IN1") |
| 741 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) |
| 742 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) |
| 743 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) |
| 744 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) |
| 745 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 718 | 746 | INPUT_PORTS_END |
| 719 | 747 | |
| 720 | 748 | |
| 721 | 749 | /**********************************************************************************/ |
| 722 | 750 | DRIVER_INIT_MEMBER(polygonet_state,polygonet) |
| 723 | 751 | { |
| 724 | | /* Set default bankswitch */ |
| 725 | | m_cur_sound_region = 2; |
| 726 | | reset_sound_region(); |
| 752 | membank("bank1")->configure_entries(0, 8, memregion("audiocpu")->base(), 0x4000); |
| 727 | 753 | |
| 728 | 754 | /* Allocate space for the dsp56k banking */ |
| 729 | 755 | memset(m_dsp56k_bank00_ram, 0, sizeof(m_dsp56k_bank00_ram)); |
| r23867 | r23868 | |
| 735 | 761 | /* The dsp56k occasionally executes out of mapped memory */ |
| 736 | 762 | address_space &space = machine().device<dsp56k_device>("dsp")->space(AS_PROGRAM); |
| 737 | 763 | m_dsp56k_update_handler = space.set_direct_update_handler(direct_update_delegate(FUNC(polygonet_state::plygonet_dsp56k_direct_handler), this)); |
| 738 | | |
| 739 | | /* save states */ |
| 740 | | save_item(NAME(m_dsp56k_bank00_ram)); |
| 741 | | save_item(NAME(m_dsp56k_bank01_ram)); |
| 742 | | save_item(NAME(m_dsp56k_bank02_ram)); |
| 743 | | save_item(NAME(m_dsp56k_shared_ram_16)); |
| 744 | | save_item(NAME(m_dsp56k_bank04_ram)); |
| 745 | | save_item(NAME(m_cur_sound_region)); |
| 746 | 764 | } |
| 747 | 765 | |
| 748 | 766 | |
| 749 | 767 | /**********************************************************************************/ |
| 750 | 768 | ROM_START( plygonet ) |
| 751 | | /* main program */ |
| 752 | | ROM_REGION( 0x200000, "maincpu", 0) |
| 753 | | ROM_LOAD32_BYTE( "305uaa01.4k", 0x000003, 512*1024, CRC(8bdb6c95) SHA1(e981833842f8fd89b9726901fbe2058444204792) ) /* Boards exist without the "UA" in the label IE: 305a01, ect... */ |
| 769 | ROM_REGION( 0x200000, "maincpu", 0) /* main program */ |
| 770 | ROM_LOAD32_BYTE( "305uaa01.4k", 0x000003, 512*1024, CRC(8bdb6c95) SHA1(e981833842f8fd89b9726901fbe2058444204792) ) /* Boards exist without the "UA" in the label IE: 305a01, etc... */ |
| 754 | 771 | ROM_LOAD32_BYTE( "305uaa02.2k", 0x000002, 512*1024, CRC(4d7e32b3) SHA1(25731526535036972577637d186f02ae467296bd) ) |
| 755 | 772 | ROM_LOAD32_BYTE( "305uaa03.2h", 0x000001, 512*1024, CRC(36e4e3fe) SHA1(e8fcad4f196c9b225a0fbe70791493ff07c648a9) ) |
| 756 | 773 | ROM_LOAD32_BYTE( "305uaa04.4h", 0x000000, 512*1024, CRC(d8394e72) SHA1(eb6bcf8aedb9ba5843204ab8aacb735cbaafb74d) ) |
| 757 | | |
| 758 | | /* Z80 sound program */ |
| 759 | | ROM_REGION( 0x30000, "soundcpu", 0 ) |
| 774 | |
| 775 | ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 sound program */ |
| 760 | 776 | ROM_LOAD("305b05.7b", 0x000000, 0x20000, CRC(2d3d9654) SHA1(784a409df47cee877e507b8bbd3610d161d63753) ) |
| 761 | | ROM_RELOAD( 0x10000, 0x20000) |
| 762 | | |
| 763 | | /* TTL text plane tiles */ |
| 764 | | ROM_REGION( 0x20000, "gfx1", 0 ) |
| 777 | |
| 778 | ROM_REGION( 0x20000, "gfx1", 0 ) /* TTL text plane tiles */ |
| 765 | 779 | ROM_LOAD( "305b06.18g", 0x000000, 0x20000, CRC(decd6e42) SHA1(4c23dcb1d68132d3381007096e014ee4b6007086) ) |
| 766 | | |
| 767 | | /* '936 tiles */ |
| 768 | | ROM_REGION( 0x40000, "gfx2", 0 ) |
| 780 | |
| 781 | ROM_REGION( 0x40000, "gfx2", 0 ) /* '936 tiles */ |
| 769 | 782 | ROM_LOAD( "305b07.20d", 0x000000, 0x40000, CRC(e4320bc3) SHA1(b0bb2dac40d42f97da94516d4ebe29b1c3d77c37) ) |
| 770 | | |
| 771 | | /* sound data */ |
| 772 | | ROM_REGION( 0x200000, "shared", 0 ) |
| 783 | |
| 784 | ROM_REGION( 0x200000, "shared", 0 ) /* sound data */ |
| 773 | 785 | ROM_LOAD( "305b08.2e", 0x000000, 0x200000, CRC(874607df) SHA1(763b44a80abfbc355bcb9be8bf44373254976019) ) |
| 774 | 786 | |
| 775 | | ROM_REGION16_BE( 0x80, "eeprom", 0 ) |
| 787 | ROM_REGION16_BE( 0x200, "eeprom", ROMREGION_ERASEFF ) |
| 776 | 788 | ROM_LOAD( "plygonet.nv", 0x0000, 0x0080, CRC(627748ac) SHA1(ea1b06739fee235b049ff8daffff7d43cb093112) ) |
| 777 | 789 | ROM_END |
| 778 | 790 | |
| 779 | 791 | ROM_START( polynetw ) |
| 780 | | /* main program */ |
| 781 | | ROM_REGION( 0x200000, "maincpu", 0) |
| 792 | ROM_REGION( 0x200000, "maincpu", 0) /* main program */ |
| 782 | 793 | ROM_LOAD32_BYTE( "305jaa01.4k", 0x000003, 0x080000, CRC(ea889bd9) SHA1(102e7c0f0c064662c0f6137ad5da97a9ccd49a97) ) |
| 783 | 794 | ROM_LOAD32_BYTE( "305jaa02.2k", 0x000002, 0x080000, CRC(d0710379) SHA1(cf0970d63e8d021edf2d404838c658a5b7cb8fb8) ) |
| 784 | 795 | ROM_LOAD32_BYTE( "305jaa03.2h", 0x000001, 0x080000, CRC(278b5928) SHA1(2ea96054e2ef637731cd64f2bef0b5b2bbe7e24f) ) |
| 785 | 796 | ROM_LOAD32_BYTE( "305jaa04.4h", 0x000000, 0x080000, CRC(b069353b) SHA1(12fbe2df09328bb7193e89a49d84a61eab5bfdcb) ) |
| 786 | | |
| 787 | | /* Z80 sound program */ |
| 788 | | ROM_REGION( 0x30000, "soundcpu", 0 ) |
| 797 | |
| 798 | ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 sound program */ |
| 789 | 799 | ROM_LOAD( "305jaa05.7b", 0x000000, 0x020000, CRC(06053db6) SHA1(c7d43c2650d949ee552a49db93dece842c17e68d) ) |
| 790 | | ROM_RELOAD( 0x10000, 0x20000) |
| 791 | | |
| 792 | | /* TTL text plane tiles */ |
| 793 | | ROM_REGION( 0x20000, "gfx1", 0 ) |
| 800 | |
| 801 | ROM_REGION( 0x20000, "gfx1", 0 ) /* TTL text plane tiles */ |
| 794 | 802 | ROM_LOAD( "305a06.18g", 0x000000, 0x020000, CRC(4b9b7e9c) SHA1(8c3c0f1ec7e26fd9552f6da1e6bdd7ff4453ba57) ) |
| 795 | | |
| 796 | | /* '936 tiles */ |
| 797 | | ROM_REGION( 0x40000, "gfx2", 0 ) |
| 803 | |
| 804 | ROM_REGION( 0x40000, "gfx2", 0 ) /* '936 tiles */ |
| 798 | 805 | ROM_LOAD( "305a07.20d", 0x000000, 0x020000, CRC(0959283b) SHA1(482caf96e8e430b87810508b1a1420cd3b58f203) ) |
| 799 | | |
| 800 | | /* sound data */ |
| 801 | | ROM_REGION( 0x400000, "shared", 0 ) |
| 806 | |
| 807 | ROM_REGION( 0x400000, "shared", 0 ) /* sound data */ |
| 802 | 808 | ROM_LOAD( "305a08.2e", 0x000000, 0x200000, CRC(7ddb8a52) SHA1(3199b347fc433ffe0de8521001df77672d40771e) ) |
| 803 | 809 | ROM_LOAD( "305a09.3e", 0x200000, 0x200000, CRC(6da1be58) SHA1(d63ac16ac551193ff8a6036724fb59e1d702e06b) ) |
| 804 | 810 | |
| 805 | | ROM_REGION16_BE( 0x80, "eeprom", 0 ) |
| 811 | ROM_REGION16_BE( 0x200, "eeprom", ROMREGION_ERASEFF ) |
| 806 | 812 | ROM_LOAD( "polynetw.nv", 0x0000, 0x0080, CRC(8f39d644) SHA1(8733e1a288ba20c4b04b3aedde52801d05cebdf9) ) |
| 807 | 813 | ROM_END |
| 808 | 814 | |