trunk/src/mame/drivers/konamigv.c
| r22718 | r22719 | |
| 137 | 137 | konamigv_state(const machine_config &mconfig, device_type type, const char *tag) |
| 138 | 138 | : driver_device(mconfig, type, tag), |
| 139 | 139 | m_am53cf96(*this, "scsi:am53cf96"), |
| 140 | | m_maincpu(*this, "maincpu"), |
| 141 | | m_eeprom(*this, "eeprom") { } |
| 140 | m_maincpu(*this, "maincpu") |
| 141 | { |
| 142 | } |
| 142 | 143 | |
| 143 | 144 | required_device<am53cf96_device> m_am53cf96; |
| 144 | 145 | |
| 145 | 146 | UINT32 m_flash_address; |
| 146 | 147 | |
| 147 | 148 | UINT16 m_trackball_prev[ 2 ]; |
| 148 | | UINT32 m_trackball_data[ 2 ]; |
| 149 | UINT16 m_trackball_data[ 2 ]; |
| 149 | 150 | UINT16 m_btc_trackball_prev[ 4 ]; |
| 150 | | UINT32 m_btc_trackball_data[ 4 ]; |
| 151 | UINT16 m_btc_trackball_data[ 4 ]; |
| 151 | 152 | |
| 152 | 153 | fujitsu_29f016a_device *m_flash8[4]; |
| 153 | | sharp_lh28f400_device *m_flash16[4]; |
| 154 | sharp_lh28f400_device *m_flash16[1]; |
| 154 | 155 | |
| 155 | 156 | UINT8 m_sector_buffer[ 4096 ]; |
| 156 | | DECLARE_WRITE32_MEMBER(mb89371_w); |
| 157 | | DECLARE_READ32_MEMBER(mb89371_r); |
| 158 | | DECLARE_READ32_MEMBER(flash_r); |
| 159 | | DECLARE_WRITE32_MEMBER(flash_w); |
| 160 | | DECLARE_READ32_MEMBER(trackball_r); |
| 161 | | DECLARE_READ32_MEMBER(unknown_r); |
| 162 | | DECLARE_READ32_MEMBER(btcflash_r); |
| 163 | | DECLARE_WRITE32_MEMBER(btcflash_w); |
| 164 | | DECLARE_READ32_MEMBER(btc_trackball_r); |
| 165 | | DECLARE_WRITE32_MEMBER(btc_trackball_w); |
| 166 | | DECLARE_READ32_MEMBER(tokimeki_serial_r); |
| 167 | | DECLARE_WRITE32_MEMBER(tokimeki_serial_w); |
| 168 | | DECLARE_WRITE32_MEMBER(kdeadeye_0_w); |
| 169 | | DECLARE_WRITE32_MEMBER(eeprom_w); |
| 157 | DECLARE_WRITE16_MEMBER(mb89371_w); |
| 158 | DECLARE_READ16_MEMBER(mb89371_r); |
| 159 | DECLARE_READ16_MEMBER(flash_r); |
| 160 | DECLARE_WRITE16_MEMBER(flash_w); |
| 161 | DECLARE_READ16_MEMBER(trackball_r); |
| 162 | DECLARE_READ16_MEMBER(unknown_r); |
| 163 | DECLARE_READ16_MEMBER(btcflash_r); |
| 164 | DECLARE_WRITE16_MEMBER(btcflash_w); |
| 165 | DECLARE_READ16_MEMBER(btc_trackball_r); |
| 166 | DECLARE_WRITE16_MEMBER(btc_trackball_w); |
| 167 | DECLARE_READ16_MEMBER(tokimeki_serial_r); |
| 168 | DECLARE_WRITE16_MEMBER(tokimeki_serial_w); |
| 170 | 169 | DECLARE_DRIVER_INIT(simpbowl); |
| 171 | 170 | DECLARE_DRIVER_INIT(tokimosh); |
| 172 | 171 | DECLARE_DRIVER_INIT(kdeadeye); |
| r22718 | r22719 | |
| 176 | 175 | void scsi_dma_read( UINT32 *p_n_psxram, UINT32 n_address, INT32 n_size ); |
| 177 | 176 | void scsi_dma_write( UINT32 *p_n_psxram, UINT32 n_address, INT32 n_size ); |
| 178 | 177 | required_device<cpu_device> m_maincpu; |
| 179 | | required_device<eeprom_device> m_eeprom; |
| 180 | 178 | }; |
| 181 | 179 | |
| 182 | | /* EEPROM handlers */ |
| 183 | | |
| 184 | | WRITE32_MEMBER(konamigv_state::eeprom_w) |
| 180 | WRITE16_MEMBER(konamigv_state::mb89371_w) |
| 185 | 181 | { |
| 186 | | m_eeprom->write_bit((data&0x01) ? 1 : 0); |
| 187 | | m_eeprom->set_clock_line((data&0x04) ? ASSERT_LINE : CLEAR_LINE); |
| 188 | | m_eeprom->set_cs_line((data&0x02) ? CLEAR_LINE : ASSERT_LINE); |
| 189 | 182 | } |
| 190 | 183 | |
| 191 | | WRITE32_MEMBER(konamigv_state::mb89371_w) |
| 184 | READ16_MEMBER(konamigv_state::mb89371_r) |
| 192 | 185 | { |
| 186 | return 0xffff; |
| 193 | 187 | } |
| 194 | 188 | |
| 195 | | READ32_MEMBER(konamigv_state::mb89371_r) |
| 196 | | { |
| 197 | | return 0xffffffff; |
| 198 | | } |
| 199 | | |
| 200 | 189 | static ADDRESS_MAP_START( konamigv_map, AS_PROGRAM, 32, konamigv_state ) |
| 201 | 190 | AM_RANGE(0x1f000000, 0x1f00001f) AM_DEVREADWRITE8("scsi:am53cf96", am53cf96_device, read, write, 0x00ff00ff) |
| 202 | 191 | AM_RANGE(0x1f100000, 0x1f100003) AM_READ_PORT("P1") |
| 203 | 192 | AM_RANGE(0x1f100004, 0x1f100007) AM_READ_PORT("P2") |
| 204 | 193 | AM_RANGE(0x1f100008, 0x1f10000b) AM_READ_PORT("P3_P4") |
| 205 | | AM_RANGE(0x1f180000, 0x1f180003) AM_WRITE(eeprom_w) |
| 206 | | AM_RANGE(0x1f680000, 0x1f68001f) AM_READWRITE(mb89371_r, mb89371_w) |
| 194 | AM_RANGE(0x1f180000, 0x1f180003) AM_WRITE_PORT("EEPROMOUT") |
| 195 | AM_RANGE(0x1f680000, 0x1f68001f) AM_READWRITE16(mb89371_r, mb89371_w, 0xffffffff) |
| 207 | 196 | AM_RANGE(0x1f780000, 0x1f780003) AM_WRITENOP /* watchdog? */ |
| 208 | 197 | ADDRESS_MAP_END |
| 209 | 198 | |
| 199 | static ADDRESS_MAP_START( simpbowl_map, AS_PROGRAM, 32, konamigv_state ) |
| 200 | AM_IMPORT_FROM( konamigv_map ) |
| 201 | |
| 202 | AM_RANGE(0x1f680080, 0x1f68008f) AM_READWRITE16(flash_r, flash_w, 0xffffffff) |
| 203 | AM_RANGE(0x1f6800c0, 0x1f6800c7) AM_READ16(trackball_r, 0xffffffff) |
| 204 | AM_RANGE(0x1f6800c8, 0x1f6800cb) AM_READ16(unknown_r, 0x0000ffff) /* ?? */ |
| 205 | ADDRESS_MAP_END |
| 206 | |
| 207 | static ADDRESS_MAP_START( btchamp_map, AS_PROGRAM, 32, konamigv_state ) |
| 208 | AM_IMPORT_FROM( konamigv_map ) |
| 209 | |
| 210 | AM_RANGE(0x1f380000, 0x1f3fffff) AM_READWRITE16(btcflash_r, btcflash_w, 0xffffffff) |
| 211 | AM_RANGE(0x1f680080, 0x1f680087) AM_READ16(btc_trackball_r, 0xffffffff) |
| 212 | AM_RANGE(0x1f680088, 0x1f68008b) AM_WRITE16(btc_trackball_w, 0xffffffff) |
| 213 | AM_RANGE(0x1f6800e0, 0x1f6800e3) AM_WRITENOP |
| 214 | ADDRESS_MAP_END |
| 215 | |
| 216 | static ADDRESS_MAP_START( kdeadeye_map, AS_PROGRAM, 32, konamigv_state ) |
| 217 | AM_IMPORT_FROM( konamigv_map ) |
| 218 | |
| 219 | AM_RANGE(0x1f380000, 0x1f3fffff) AM_READWRITE16(btcflash_r, btcflash_w, 0xffffffff) |
| 220 | AM_RANGE(0x1f680080, 0x1f680083) AM_READ_PORT("GUNX1") |
| 221 | AM_RANGE(0x1f680090, 0x1f680093) AM_READ_PORT("GUNY1") |
| 222 | AM_RANGE(0x1f6800a0, 0x1f6800a3) AM_READ_PORT("GUNX2") |
| 223 | AM_RANGE(0x1f6800b0, 0x1f6800b3) AM_READ_PORT("GUNY2") |
| 224 | AM_RANGE(0x1f6800c0, 0x1f6800c3) AM_READ_PORT("BUTTONS") |
| 225 | AM_RANGE(0x1f6800e0, 0x1f6800e3) AM_WRITENOP |
| 226 | ADDRESS_MAP_END |
| 227 | |
| 228 | static ADDRESS_MAP_START( tokimosh_map, AS_PROGRAM, 32, konamigv_state ) |
| 229 | AM_IMPORT_FROM( konamigv_map ) |
| 230 | |
| 231 | AM_RANGE(0x1f680080, 0x1f680083) AM_READ16(tokimeki_serial_r, 0x0000ffff) |
| 232 | AM_RANGE(0x1f680090, 0x1f680093) AM_WRITE16(tokimeki_serial_w, 0x0000ffff) |
| 233 | ADDRESS_MAP_END |
| 234 | |
| 210 | 235 | /* SCSI */ |
| 211 | 236 | |
| 212 | 237 | void konamigv_state::scsi_dma_read( UINT32 *p_n_psxram, UINT32 n_address, INT32 n_size ) |
| r22718 | r22719 | |
| 394 | 419 | PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) |
| 395 | 420 | PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_START4 ) |
| 396 | 421 | PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 422 | |
| 423 | PORT_START("EEPROMOUT") |
| 424 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, write_bit) |
| 425 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_cs_line) |
| 426 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_clock_line) |
| 397 | 427 | INPUT_PORTS_END |
| 398 | 428 | |
| 399 | 429 | /* Simpsons Bowling */ |
| 400 | 430 | |
| 401 | | READ32_MEMBER(konamigv_state::flash_r) |
| 431 | READ16_MEMBER(konamigv_state::flash_r) |
| 402 | 432 | { |
| 403 | | int reg = offset*2; |
| 404 | | //int shift = 0; |
| 405 | | |
| 406 | | if (mem_mask == 0xffff0000) |
| 433 | if (offset == 4) // set odd address |
| 407 | 434 | { |
| 408 | | reg++; |
| 409 | | //shift = 16; |
| 410 | | } |
| 411 | | |
| 412 | | if (reg == 4) // set odd address |
| 413 | | { |
| 414 | 435 | m_flash_address |= 1; |
| 415 | 436 | } |
| 416 | 437 | |
| 417 | | if (reg == 0) |
| 438 | if (offset == 0) |
| 418 | 439 | { |
| 419 | 440 | int chip = (m_flash_address >= 0x200000) ? 2 : 0; |
| 420 | | int ret; |
| 421 | 441 | |
| 422 | | ret = m_flash8[chip]->read(m_flash_address & 0x1fffff) & 0xff; |
| 423 | | ret |= m_flash8[chip+1]->read(m_flash_address & 0x1fffff)<<8; |
| 442 | int ret = ( m_flash8[chip]->read(m_flash_address & 0x1fffff) & 0xff ) | |
| 443 | ( m_flash8[chip+1]->read(m_flash_address & 0x1fffff) << 8 ); |
| 444 | |
| 424 | 445 | m_flash_address++; |
| 425 | 446 | |
| 426 | 447 | return ret; |
| 427 | 448 | } |
| 449 | |
| 428 | 450 | return 0; |
| 429 | 451 | } |
| 430 | 452 | |
| 431 | | WRITE32_MEMBER(konamigv_state::flash_w) |
| 453 | WRITE16_MEMBER(konamigv_state::flash_w) |
| 432 | 454 | { |
| 433 | | int reg = offset*2; |
| 434 | 455 | int chip; |
| 435 | 456 | |
| 436 | | if (mem_mask == 0xffff0000) |
| 457 | switch (offset) |
| 437 | 458 | { |
| 438 | | reg++; |
| 439 | | data>>= 16; |
| 440 | | } |
| 441 | | |
| 442 | | switch (reg) |
| 443 | | { |
| 444 | 459 | case 0: |
| 445 | 460 | chip = (m_flash_address >= 0x200000) ? 2 : 0; |
| 446 | 461 | m_flash8[chip]->write(m_flash_address & 0x1fffff, data&0xff); |
| r22718 | r22719 | |
| 451 | 466 | m_flash_address = 0; |
| 452 | 467 | m_flash_address |= (data<<1); |
| 453 | 468 | break; |
| 469 | |
| 454 | 470 | case 2: |
| 455 | 471 | m_flash_address &= 0xff00ff; |
| 456 | 472 | m_flash_address |= (data<<8); |
| 457 | 473 | break; |
| 474 | |
| 458 | 475 | case 3: |
| 459 | 476 | m_flash_address &= 0x00ffff; |
| 460 | 477 | m_flash_address |= (data<<15); |
| r22718 | r22719 | |
| 462 | 479 | } |
| 463 | 480 | } |
| 464 | 481 | |
| 465 | | READ32_MEMBER(konamigv_state::trackball_r) |
| 482 | READ16_MEMBER(konamigv_state::trackball_r) |
| 466 | 483 | { |
| 467 | | if( offset == 0 && mem_mask == 0x0000ffff ) |
| 484 | if( offset == 0 ) |
| 468 | 485 | { |
| 469 | | int axis; |
| 470 | | UINT16 diff; |
| 471 | | UINT16 value; |
| 472 | 486 | static const char *const axisnames[] = { "TRACK0_X", "TRACK0_Y" }; |
| 473 | 487 | |
| 474 | | for( axis = 0; axis < 2; axis++ ) |
| 488 | for( int axis = 0; axis < 2; axis++ ) |
| 475 | 489 | { |
| 476 | | value = ioport(axisnames[axis])->read(); |
| 477 | | diff = value - m_trackball_prev[ axis ]; |
| 490 | UINT16 value = ioport(axisnames[axis])->read(); |
| 491 | m_trackball_data[ axis ] = value - m_trackball_prev[ axis ]; |
| 478 | 492 | m_trackball_prev[ axis ] = value; |
| 479 | | m_trackball_data[ axis ] = ( ( diff & 0xf00 ) << 16 ) | ( ( diff & 0xff ) << 8 ); |
| 480 | 493 | } |
| 481 | 494 | } |
| 482 | | return m_trackball_data[ offset ]; |
| 495 | |
| 496 | if( ( offset & 1 ) == 0 ) |
| 497 | { |
| 498 | return m_trackball_data[ offset >> 1 ] << 8; |
| 499 | } |
| 500 | |
| 501 | return m_trackball_data[ offset >> 1 ] & 0xf00; |
| 483 | 502 | } |
| 484 | 503 | |
| 485 | | READ32_MEMBER(konamigv_state::unknown_r) |
| 504 | READ16_MEMBER(konamigv_state::unknown_r) |
| 486 | 505 | { |
| 487 | | return 0xffffffff; |
| 506 | return 0xffff; |
| 488 | 507 | } |
| 489 | 508 | |
| 490 | 509 | DRIVER_INIT_MEMBER(konamigv_state,simpbowl) |
| r22718 | r22719 | |
| 494 | 513 | m_flash8[2] = machine().device<fujitsu_29f016a_device>("flash2"); |
| 495 | 514 | m_flash8[3] = machine().device<fujitsu_29f016a_device>("flash3"); |
| 496 | 515 | |
| 497 | | m_maincpu->space(AS_PROGRAM).install_readwrite_handler( 0x1f680080, 0x1f68008f, read32_delegate(FUNC(konamigv_state::flash_r),this), write32_delegate(FUNC(konamigv_state::flash_w),this) ); |
| 498 | | m_maincpu->space(AS_PROGRAM).install_read_handler ( 0x1f6800c0, 0x1f6800c7, read32_delegate(FUNC(konamigv_state::trackball_r),this)); |
| 499 | | m_maincpu->space(AS_PROGRAM).install_read_handler ( 0x1f6800c8, 0x1f6800cb, read32_delegate(FUNC(konamigv_state::unknown_r),this)); /* ?? */ |
| 500 | | |
| 501 | 516 | DRIVER_INIT_CALL(konamigv); |
| 502 | 517 | } |
| 503 | 518 | |
| 504 | 519 | static MACHINE_CONFIG_DERIVED( simpbowl, konamigv ) |
| 520 | MCFG_CPU_MODIFY( "maincpu" ) |
| 521 | MCFG_CPU_PROGRAM_MAP( simpbowl_map ) |
| 522 | |
| 505 | 523 | MCFG_FUJITSU_29F016A_ADD("flash0") |
| 506 | 524 | MCFG_FUJITSU_29F016A_ADD("flash1") |
| 507 | 525 | MCFG_FUJITSU_29F016A_ADD("flash2") |
| r22718 | r22719 | |
| 521 | 539 | |
| 522 | 540 | /* Beat the Champ */ |
| 523 | 541 | |
| 524 | | READ32_MEMBER(konamigv_state::btcflash_r) |
| 542 | READ16_MEMBER(konamigv_state::btcflash_r) |
| 525 | 543 | { |
| 526 | | if (mem_mask == 0x0000ffff) |
| 527 | | { |
| 528 | | return m_flash16[0]->read(offset*2); |
| 529 | | } |
| 530 | | else if (mem_mask == 0xffff0000) |
| 531 | | { |
| 532 | | return m_flash16[0]->read((offset*2)+1)<<16; |
| 533 | | } |
| 534 | | |
| 535 | | return 0; |
| 544 | return m_flash16[0]->read(offset); |
| 536 | 545 | } |
| 537 | 546 | |
| 538 | | WRITE32_MEMBER(konamigv_state::btcflash_w) |
| 547 | WRITE16_MEMBER(konamigv_state::btcflash_w) |
| 539 | 548 | { |
| 540 | | if (mem_mask == 0x0000ffff) |
| 541 | | { |
| 542 | | m_flash16[0]->write(offset*2, data&0xffff); |
| 543 | | } |
| 544 | | else if (mem_mask == 0xffff0000) |
| 545 | | { |
| 546 | | m_flash16[0]->write((offset*2)+1, (data>>16)&0xffff); |
| 547 | | } |
| 549 | m_flash16[0]->write(offset, data); |
| 548 | 550 | } |
| 549 | 551 | |
| 550 | | READ32_MEMBER(konamigv_state::btc_trackball_r) |
| 552 | READ16_MEMBER(konamigv_state::btc_trackball_r) |
| 551 | 553 | { |
| 552 | 554 | // mame_printf_debug( "r %08x %08x %08x\n", space.device().safe_pc(), offset, mem_mask ); |
| 553 | 555 | |
| 554 | | if( offset == 1 && mem_mask == 0xffff0000 ) |
| 556 | if( offset == 3 ) |
| 555 | 557 | { |
| 556 | | int axis; |
| 557 | | UINT16 diff; |
| 558 | | UINT16 value; |
| 559 | 558 | static const char *const axisnames[] = { "TRACK0_X", "TRACK0_Y", "TRACK1_X", "TRACK1_Y" }; |
| 560 | 559 | |
| 561 | | for( axis = 0; axis < 4; axis++ ) |
| 560 | for( int axis = 0; axis < 4; axis++ ) |
| 562 | 561 | { |
| 563 | | value = ioport(axisnames[axis])->read(); |
| 564 | | diff = value - m_btc_trackball_prev[ axis ]; |
| 562 | UINT16 value = ioport(axisnames[axis])->read(); |
| 563 | m_btc_trackball_data[ axis ] = value - m_btc_trackball_prev[ axis ]; |
| 565 | 564 | m_btc_trackball_prev[ axis ] = value; |
| 566 | | m_btc_trackball_data[ axis ] = ( ( diff & 0xf00 ) << 16 ) | ( ( diff & 0xff ) << 8 ); |
| 567 | 565 | } |
| 568 | 566 | } |
| 569 | 567 | |
| 570 | | return m_btc_trackball_data[ offset ] | ( m_btc_trackball_data[ offset + 2 ] >> 8 ); |
| 568 | if( ( offset & 1 ) == 0 ) |
| 569 | { |
| 570 | return ( m_btc_trackball_data[ offset >> 1 ] << 8 ) | ( m_btc_trackball_data[ ( offset >> 1 ) + 2 ] & 0xff ); |
| 571 | } |
| 572 | |
| 573 | return ( m_btc_trackball_data[ offset >> 1 ] & 0xf00 ) | ( m_btc_trackball_data[ ( offset >> 1 ) + 2 ] >> 8 ); |
| 571 | 574 | } |
| 572 | 575 | |
| 573 | | WRITE32_MEMBER(konamigv_state::btc_trackball_w) |
| 576 | WRITE16_MEMBER(konamigv_state::btc_trackball_w) |
| 574 | 577 | { |
| 575 | 578 | // mame_printf_debug( "w %08x %08x %08x %08x\n", space.device().safe_pc(), offset, data, mem_mask ); |
| 576 | 579 | } |
| r22718 | r22719 | |
| 579 | 582 | { |
| 580 | 583 | m_flash16[0] = machine().device<sharp_lh28f400_device>("flash"); |
| 581 | 584 | |
| 582 | | m_maincpu->space(AS_PROGRAM).install_readwrite_handler( 0x1f680080, 0x1f68008f, read32_delegate(FUNC(konamigv_state::btc_trackball_r),this), write32_delegate(FUNC(konamigv_state::btc_trackball_w),this)); |
| 583 | | m_maincpu->space(AS_PROGRAM).nop_write ( 0x1f6800e0, 0x1f6800e3); |
| 584 | | m_maincpu->space(AS_PROGRAM).install_readwrite_handler( 0x1f380000, 0x1f3fffff, read32_delegate(FUNC(konamigv_state::btcflash_r),this), write32_delegate(FUNC(konamigv_state::btcflash_w),this) ); |
| 585 | | |
| 586 | 585 | DRIVER_INIT_CALL(konamigv); |
| 587 | 586 | } |
| 588 | 587 | |
| 589 | 588 | static MACHINE_CONFIG_DERIVED( btchamp, konamigv ) |
| 589 | MCFG_CPU_MODIFY( "maincpu" ) |
| 590 | MCFG_CPU_PROGRAM_MAP( btchamp_map ) |
| 591 | |
| 590 | 592 | MCFG_SHARP_LH28F400_ADD("flash") |
| 591 | 593 | MACHINE_CONFIG_END |
| 592 | 594 | |
| r22718 | r22719 | |
| 608 | 610 | |
| 609 | 611 | /* Tokimeki Memorial games - have a mouse and printer and who knows what else */ |
| 610 | 612 | |
| 611 | | READ32_MEMBER(konamigv_state::tokimeki_serial_r) |
| 613 | READ16_MEMBER(konamigv_state::tokimeki_serial_r) |
| 612 | 614 | { |
| 613 | 615 | // bits checked: 0x80 and 0x20 for periodic status (800b6968 and 800b69e0 in tokimosh) |
| 614 | 616 | // 0x08 for reading the serial device (8005e624) |
| 615 | 617 | |
| 616 | | return 0xffffffff; |
| 618 | return 0xffff; |
| 617 | 619 | } |
| 618 | 620 | |
| 619 | | WRITE32_MEMBER(konamigv_state::tokimeki_serial_w) |
| 621 | WRITE16_MEMBER(konamigv_state::tokimeki_serial_w) |
| 620 | 622 | { |
| 621 | 623 | /* |
| 622 | 624 | serial EEPROM-like device here: when mem_mask == 0x000000ff only, |
| r22718 | r22719 | |
| 634 | 636 | |
| 635 | 637 | DRIVER_INIT_MEMBER(konamigv_state,tokimosh) |
| 636 | 638 | { |
| 637 | | m_maincpu->space(AS_PROGRAM).install_read_handler ( 0x1f680080, 0x1f680083, read32_delegate(FUNC(konamigv_state::tokimeki_serial_r),this)); |
| 638 | | m_maincpu->space(AS_PROGRAM).install_write_handler( 0x1f680090, 0x1f680093, write32_delegate(FUNC(konamigv_state::tokimeki_serial_w),this)); |
| 639 | | |
| 640 | 639 | DRIVER_INIT_CALL(konamigv); |
| 641 | 640 | } |
| 642 | 641 | |
| 642 | static MACHINE_CONFIG_DERIVED( tokimosh, konamigv ) |
| 643 | MCFG_CPU_MODIFY( "maincpu" ) |
| 644 | MCFG_CPU_PROGRAM_MAP( tokimosh_map ) |
| 645 | MACHINE_CONFIG_END |
| 646 | |
| 643 | 647 | /* |
| 644 | 648 | Dead Eye |
| 645 | 649 | |
| r22718 | r22719 | |
| 650 | 654 | A01 |
| 651 | 655 | */ |
| 652 | 656 | |
| 653 | | WRITE32_MEMBER(konamigv_state::kdeadeye_0_w) |
| 654 | | { |
| 655 | | } |
| 656 | | |
| 657 | 657 | DRIVER_INIT_MEMBER(konamigv_state,kdeadeye) |
| 658 | 658 | { |
| 659 | 659 | m_flash16[0] = machine().device<sharp_lh28f400_device>("flash"); |
| 660 | 660 | |
| 661 | | m_maincpu->space(AS_PROGRAM).install_read_port ( 0x1f680080, 0x1f680083, "GUNX1" ); |
| 662 | | m_maincpu->space(AS_PROGRAM).install_read_port ( 0x1f680090, 0x1f680093, "GUNY1" ); |
| 663 | | m_maincpu->space(AS_PROGRAM).install_read_port ( 0x1f6800a0, 0x1f6800a3, "GUNX2" ); |
| 664 | | m_maincpu->space(AS_PROGRAM).install_read_port ( 0x1f6800b0, 0x1f6800b3, "GUNY2" ); |
| 665 | | m_maincpu->space(AS_PROGRAM).install_read_port ( 0x1f6800c0, 0x1f6800c3, "BUTTONS" ); |
| 666 | | m_maincpu->space(AS_PROGRAM).install_write_handler ( 0x1f6800e0, 0x1f6800e3, write32_delegate(FUNC(konamigv_state::kdeadeye_0_w),this) ); |
| 667 | | m_maincpu->space(AS_PROGRAM).install_readwrite_handler( 0x1f380000, 0x1f3fffff, read32_delegate(FUNC(konamigv_state::btcflash_r),this), write32_delegate(FUNC(konamigv_state::btcflash_w),this)); |
| 668 | | |
| 669 | 661 | DRIVER_INIT_CALL(konamigv); |
| 670 | 662 | } |
| 671 | 663 | |
| 672 | 664 | static MACHINE_CONFIG_DERIVED( kdeadeye, konamigv ) |
| 665 | MCFG_CPU_MODIFY( "maincpu" ) |
| 666 | MCFG_CPU_PROGRAM_MAP( kdeadeye_map ) |
| 667 | |
| 673 | 668 | MCFG_SHARP_LH28F400_ADD("flash") |
| 674 | 669 | MACHINE_CONFIG_END |
| 675 | 670 | |
| r22718 | r22719 | |
| 852 | 847 | GAME( 1996, hyperath, konamigv, konamigv, konamigv, konamigv_state, konamigv, ROT0, "Konami", "Hyper Athlete (GV021 Japan 1.00)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 853 | 848 | GAME( 1996, lacrazyc, konamigv, konamigv, konamigv, konamigv_state, konamigv, ROT0, "Konami", "Let's Attack Crazy Cross (GV027 Asia 1.10)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 854 | 849 | GAME( 1996, susume, lacrazyc, konamigv, konamigv, konamigv_state, konamigv, ROT0, "Konami", "Susume! Taisen Puzzle-Dama (GV027 Japan 1.20)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 855 | | GAME( 1996, btchamp, konamigv, btchamp, btchamp, konamigv_state, btchamp, ROT0, "Konami", "Beat the Champ (GV053 UAA01)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 850 | GAME( 1996, btchamp, konamigv, btchamp, btchamp, konamigv_state, btchamp, ROT0, "Konami", "Beat the Champ (GV053 UAA01)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 856 | 851 | GAME( 1996, kdeadeye, konamigv, kdeadeye, kdeadeye, konamigv_state, kdeadeye, ROT0, "Konami", "Dead Eye (GV054 UAA01)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 857 | 852 | GAME( 1997, weddingr, konamigv, konamigv, konamigv, konamigv_state, konamigv, ROT0, "Konami", "Wedding Rhapsody (GX624 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 858 | | GAME( 1997, tokimosh, konamigv, konamigv, konamigv, konamigv_state, tokimosh, ROT0, "Konami", "Tokimeki Memorial Oshiete Your Heart (GE755 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 859 | | GAME( 1997, tokimosp, konamigv, konamigv, konamigv, konamigv_state, tokimosh, ROT0, "Konami", "Tokimeki Memorial Oshiete Your Heart Seal version PLUS (GE756 JAB)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 853 | GAME( 1997, tokimosh, konamigv, tokimosh, konamigv, konamigv_state, tokimosh, ROT0, "Konami", "Tokimeki Memorial Oshiete Your Heart (GE755 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 854 | GAME( 1997, tokimosp, konamigv, tokimosh, konamigv, konamigv_state, tokimosh, ROT0, "Konami", "Tokimeki Memorial Oshiete Your Heart Seal version PLUS (GE756 JAB)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 860 | 855 | GAME( 1998, nagano98, konamigv, konamigv, konamigv, konamigv_state, konamigv, ROT0, "Konami", "Nagano Winter Olympics '98 (GX720 EAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE) |
| 861 | 856 | GAME( 1998, naganoj, nagano98, konamigv, konamigv, konamigv_state, konamigv, ROT0, "Konami", "Hyper Olympic in Nagano (GX720 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE) |
| 862 | 857 | GAME( 2000, simpbowl, konamigv, simpbowl, simpbowl, konamigv_state, simpbowl, ROT0, "Konami", "Simpsons Bowling (GQ829 UAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE) |
trunk/src/mame/drivers/konamigq.c
| r22718 | r22719 | |
| 62 | 62 | : driver_device(mconfig, type, tag), |
| 63 | 63 | m_am53cf96(*this, "scsi:am53cf96"), |
| 64 | 64 | m_maincpu(*this, "maincpu"), |
| 65 | | m_soundcpu(*this, "soundcpu") { } |
| 65 | m_soundcpu(*this, "soundcpu") |
| 66 | { |
| 67 | } |
| 66 | 68 | |
| 67 | 69 | required_device<am53cf96_device> m_am53cf96; |
| 68 | 70 | |
| r22718 | r22719 | |
| 70 | 72 | UINT8 m_sndtor3k[ 16 ]; |
| 71 | 73 | UINT8 *m_p_n_pcmram; |
| 72 | 74 | UINT8 m_sector_buffer[ 512 ]; |
| 73 | | DECLARE_WRITE32_MEMBER(soundr3k_w); |
| 74 | | DECLARE_READ32_MEMBER(soundr3k_r); |
| 75 | | DECLARE_WRITE32_MEMBER(mb89371_w); |
| 76 | | DECLARE_READ32_MEMBER(mb89371_r); |
| 77 | | DECLARE_WRITE32_MEMBER(eeprom_w); |
| 78 | | DECLARE_WRITE32_MEMBER(pcmram_w); |
| 79 | | DECLARE_READ32_MEMBER(pcmram_r); |
| 75 | DECLARE_WRITE16_MEMBER(soundr3k_w); |
| 76 | DECLARE_READ16_MEMBER(soundr3k_r); |
| 77 | DECLARE_WRITE16_MEMBER(mb89371_w); |
| 78 | DECLARE_READ16_MEMBER(mb89371_r); |
| 79 | DECLARE_WRITE16_MEMBER(eeprom_w); |
| 80 | DECLARE_WRITE16_MEMBER(pcmram_w); |
| 81 | DECLARE_READ16_MEMBER(pcmram_r); |
| 80 | 82 | DECLARE_READ16_MEMBER(sndcomm68k_r); |
| 81 | 83 | DECLARE_WRITE16_MEMBER(sndcomm68k_w); |
| 82 | 84 | DECLARE_READ16_MEMBER(tms57002_data_word_r); |
| r22718 | r22719 | |
| 94 | 96 | |
| 95 | 97 | /* Sound */ |
| 96 | 98 | |
| 97 | | WRITE32_MEMBER(konamigq_state::soundr3k_w) |
| 99 | WRITE16_MEMBER(konamigq_state::soundr3k_w) |
| 98 | 100 | { |
| 99 | | if( ACCESSING_BITS_16_31 ) |
| 101 | m_sndto000[ offset ] = data; |
| 102 | if( offset == 7 ) |
| 100 | 103 | { |
| 101 | | m_sndto000[ ( offset << 1 ) + 1 ] = data >> 16; |
| 102 | | if( offset == 3 ) |
| 103 | | { |
| 104 | | m_soundcpu->set_input_line(1, HOLD_LINE ); |
| 105 | | } |
| 104 | m_soundcpu->set_input_line(1, HOLD_LINE ); |
| 106 | 105 | } |
| 107 | | if( ACCESSING_BITS_0_15 ) |
| 108 | | { |
| 109 | | m_sndto000[ offset << 1 ] = data; |
| 110 | | } |
| 111 | 106 | } |
| 112 | 107 | |
| 113 | | READ32_MEMBER(konamigq_state::soundr3k_r) |
| 108 | READ16_MEMBER(konamigq_state::soundr3k_r) |
| 114 | 109 | { |
| 115 | | UINT32 data; |
| 116 | | |
| 117 | | data = ( m_sndtor3k[ ( offset << 1 ) + 1 ] << 16 ) | m_sndtor3k[ offset << 1 ]; |
| 118 | | |
| 119 | 110 | /* hack to help the main program start up */ |
| 120 | | if( offset == 1 ) |
| 111 | if( offset == 2 || offset == 3 ) |
| 121 | 112 | { |
| 122 | | data = 0; |
| 113 | return 0; |
| 123 | 114 | } |
| 124 | 115 | |
| 125 | | return data; |
| 116 | return m_sndtor3k[ offset ]; |
| 126 | 117 | } |
| 127 | 118 | |
| 128 | 119 | /* UART */ |
| 129 | 120 | |
| 130 | | WRITE32_MEMBER(konamigq_state::mb89371_w) |
| 121 | WRITE16_MEMBER(konamigq_state::mb89371_w) |
| 131 | 122 | { |
| 132 | 123 | } |
| 133 | 124 | |
| 134 | | READ32_MEMBER(konamigq_state::mb89371_r) |
| 125 | READ16_MEMBER(konamigq_state::mb89371_r) |
| 135 | 126 | { |
| 136 | | return 0xffffffff; |
| 127 | return 0xffff; |
| 137 | 128 | } |
| 138 | 129 | |
| 139 | 130 | /* EEPROM */ |
| r22718 | r22719 | |
| 150 | 141 | 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, |
| 151 | 142 | }; |
| 152 | 143 | |
| 153 | | WRITE32_MEMBER(konamigq_state::eeprom_w) |
| 144 | WRITE16_MEMBER(konamigq_state::eeprom_w) |
| 154 | 145 | { |
| 155 | 146 | ioport("EEPROMOUT")->write(data & 0x07, 0xff); |
| 156 | 147 | m_soundcpu->set_input_line(INPUT_LINE_RESET, ( data & 0x40 ) ? CLEAR_LINE : ASSERT_LINE ); |
| r22718 | r22719 | |
| 159 | 150 | |
| 160 | 151 | /* PCM RAM */ |
| 161 | 152 | |
| 162 | | WRITE32_MEMBER(konamigq_state::pcmram_w) |
| 153 | WRITE16_MEMBER(konamigq_state::pcmram_w) |
| 163 | 154 | { |
| 164 | | if( ACCESSING_BITS_0_7 ) |
| 165 | | { |
| 166 | | m_p_n_pcmram[ offset << 1 ] = data; |
| 167 | | } |
| 168 | | if( ACCESSING_BITS_16_23 ) |
| 169 | | { |
| 170 | | m_p_n_pcmram[ ( offset << 1 ) + 1 ] = data >> 16; |
| 171 | | } |
| 155 | m_p_n_pcmram[ offset ] = data; |
| 172 | 156 | } |
| 173 | 157 | |
| 174 | | READ32_MEMBER(konamigq_state::pcmram_r) |
| 158 | READ16_MEMBER(konamigq_state::pcmram_r) |
| 175 | 159 | { |
| 176 | | return ( m_p_n_pcmram[ ( offset << 1 ) + 1 ] << 16 ) | m_p_n_pcmram[ offset << 1 ]; |
| 160 | return m_p_n_pcmram[ offset ]; |
| 177 | 161 | } |
| 178 | 162 | |
| 179 | 163 | /* Video */ |
| 180 | 164 | |
| 181 | 165 | static ADDRESS_MAP_START( konamigq_map, AS_PROGRAM, 32, konamigq_state ) |
| 182 | 166 | AM_RANGE(0x1f000000, 0x1f00001f) AM_DEVREADWRITE8("scsi:am53cf96", am53cf96_device, read, write, 0x00ff00ff) |
| 183 | | AM_RANGE(0x1f100000, 0x1f10000f) AM_WRITE(soundr3k_w) |
| 184 | | AM_RANGE(0x1f100010, 0x1f10001f) AM_READ(soundr3k_r) |
| 185 | | AM_RANGE(0x1f180000, 0x1f180003) AM_WRITE(eeprom_w) |
| 167 | AM_RANGE(0x1f100000, 0x1f10000f) AM_WRITE16(soundr3k_w, 0xffffffff) |
| 168 | AM_RANGE(0x1f100010, 0x1f10001f) AM_READ16(soundr3k_r, 0xffffffff) |
| 169 | AM_RANGE(0x1f180000, 0x1f180003) AM_WRITE16(eeprom_w, 0x0000ffff) |
| 186 | 170 | AM_RANGE(0x1f198000, 0x1f198003) AM_WRITENOP /* cabinet lamps? */ |
| 187 | 171 | AM_RANGE(0x1f1a0000, 0x1f1a0003) AM_WRITENOP /* indicates gun trigger */ |
| 188 | 172 | AM_RANGE(0x1f200000, 0x1f200003) AM_READ_PORT("GUNX1") |
| r22718 | r22719 | |
| 194 | 178 | AM_RANGE(0x1f230000, 0x1f230003) AM_READ_PORT("P1_P2") |
| 195 | 179 | AM_RANGE(0x1f230004, 0x1f230007) AM_READ_PORT("P3_SERVICE") |
| 196 | 180 | AM_RANGE(0x1f238000, 0x1f238003) AM_READ_PORT("DSW") |
| 197 | | AM_RANGE(0x1f300000, 0x1f5fffff) AM_READWRITE(pcmram_r, pcmram_w) |
| 198 | | AM_RANGE(0x1f680000, 0x1f68001f) AM_READWRITE(mb89371_r, mb89371_w) |
| 181 | AM_RANGE(0x1f300000, 0x1f5fffff) AM_READWRITE16(pcmram_r, pcmram_w, 0xffffffff) |
| 182 | AM_RANGE(0x1f680000, 0x1f68001f) AM_READWRITE16(mb89371_r, mb89371_w, 0xffffffff) |
| 199 | 183 | AM_RANGE(0x1f780000, 0x1f780003) AM_WRITENOP /* watchdog? */ |
| 200 | 184 | ADDRESS_MAP_END |
| 201 | 185 | |