trunk/src/mame/drivers/atvtrack.c
| r242121 | r242122 | |
| 56 | 56 | |
| 57 | 57 | */ |
| 58 | 58 | |
| 59 | /* |
| 60 | |
| 61 | notes from DEMUL team |
| 62 | |
| 63 | Smashing Drive needs a working SH4 MMU emulation, ATV Track does not. |
| 64 | |
| 65 | Audio - is a simple buffered DAC. |
| 66 | frequency is 32kHz |
| 67 | data written by CPU to buffer have such meaning: |
| 68 | offs 0 - s16 bass channel 0 |
| 69 | offs 2 - s16 bass channel 1 |
| 70 | offs 4 - s16 left channel |
| 71 | offs 6 - s16 right channel |
| 72 | and so on |
| 73 | |
| 74 | buffer is 2x32bytes |
| 75 | then it becomes (I suppose half) empty - SH4 IRL5 IRQ generated |
| 76 | |
| 77 | |
| 78 | "control registers" (Smashing Drive) |
| 79 | 0 - read - various statuses, returning -1 is OK |
| 80 | write - enable slave CPU, gpu, etc most of bits is unclear |
| 81 | 4 - r/w - communication port (for cabinet linking), returning 0 is OK |
| 82 | also there some bits on SH4 PDTRA port, I'll hook it later by myself |
| 83 | |
| 84 | about clocks - SH4s is clocked at 33000000*6 |
| 85 | but unlike to DC/AW/Naomi SH4 'peripheral clock' (at which works TMU timers and other internal stuff) is 1/6 from CPU clock, not 1/4 |
| 86 | |
| 87 | */ |
| 88 | |
| 59 | 89 | #include "emu.h" |
| 60 | 90 | #include "cpu/sh4/sh4.h" |
| 61 | 91 | #include "debugger.h" |
| r242121 | r242122 | |
| 96 | 126 | required_device<sh4_device> m_subcpu; |
| 97 | 127 | }; |
| 98 | 128 | |
| 129 | |
| 130 | class smashdrv_state : public atvtrack_state |
| 131 | { |
| 132 | public: |
| 133 | smashdrv_state(const machine_config &mconfig, device_type type, const char *tag) |
| 134 | : atvtrack_state(mconfig, type, tag) { } |
| 135 | |
| 136 | virtual void machine_start(); |
| 137 | virtual void machine_reset(); |
| 138 | }; |
| 139 | |
| 99 | 140 | void atvtrack_state::logbinary(UINT32 data,int high=31,int low=0) |
| 100 | 141 | { |
| 101 | 142 | UINT32 s; |
| r242121 | r242122 | |
| 358 | 399 | m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); |
| 359 | 400 | } |
| 360 | 401 | |
| 402 | |
| 403 | void smashdrv_state::machine_start() |
| 404 | { |
| 405 | |
| 406 | } |
| 407 | |
| 408 | void smashdrv_state::machine_reset() |
| 409 | { |
| 410 | |
| 411 | } |
| 412 | |
| 413 | // ATV Track |
| 414 | |
| 361 | 415 | static ADDRESS_MAP_START( atvtrack_main_map, AS_PROGRAM, 64, atvtrack_state ) |
| 362 | 416 | AM_RANGE(0x00000000, 0x000003ff) AM_RAM AM_SHARE("sharedmem") |
| 363 | | AM_RANGE(0x00020000, 0x00020007) AM_READWRITE(area1_r, area1_w) |
| 417 | AM_RANGE(0x00020000, 0x00020007) AM_READWRITE(area1_r, area1_w) // control registers |
| 418 | // AM_RANGE(0x00020040, 0x0002007f) // audio DAC buffer |
| 364 | 419 | AM_RANGE(0x14000000, 0x14000007) AM_READWRITE(area2_r, area2_w) // data |
| 365 | 420 | AM_RANGE(0x14100000, 0x14100007) AM_READWRITE(area3_r, area3_w) // command |
| 366 | 421 | AM_RANGE(0x14200000, 0x14200007) AM_READWRITE(area4_r, area4_w) // address |
| 367 | | AM_RANGE(0x0c000000, 0x0cffffff) AM_RAM |
| 422 | AM_RANGE(0x0c000000, 0x0c7fffff) AM_RAM |
| 368 | 423 | ADDRESS_MAP_END |
| 369 | 424 | |
| 370 | 425 | static ADDRESS_MAP_START( atvtrack_main_port, AS_IO, 64, atvtrack_state ) |
| 371 | 426 | AM_RANGE(0x00, 0x1f) AM_READWRITE(ioport_r, ioport_w) |
| 372 | 427 | ADDRESS_MAP_END |
| 373 | 428 | |
| 429 | // Smashing Drive |
| 430 | |
| 431 | static ADDRESS_MAP_START( smashdrv_main_map, AS_PROGRAM, 64, smashdrv_state ) |
| 432 | AM_RANGE(0x00000000, 0x03ffffff) AM_ROM |
| 433 | AM_RANGE(0x0c000000, 0x0c7fffff) AM_RAM |
| 434 | AM_RANGE(0x10000000, 0x100003ff) AM_RAM AM_SHARE("sharedmem") |
| 435 | // 0x10000400 - 0x1000043F control registers |
| 436 | // 0x10000440 - 0x1000047F Audio DAC buffer |
| 437 | AM_RANGE(0x14000000, 0x143fffff) AM_ROM AM_REGION("data", 0) |
| 438 | ADDRESS_MAP_END |
| 439 | |
| 440 | static ADDRESS_MAP_START( smashdrv_main_port, AS_IO, 64, smashdrv_state ) |
| 441 | ADDRESS_MAP_END |
| 442 | |
| 443 | // Sub CPU (same for both games) |
| 444 | |
| 374 | 445 | static ADDRESS_MAP_START( atvtrack_sub_map, AS_PROGRAM, 64, atvtrack_state ) |
| 375 | 446 | AM_RANGE(0x00000000, 0x000003ff) AM_RAM AM_SHARE("sharedmem") |
| 376 | 447 | AM_RANGE(0x0c000000, 0x0cffffff) AM_RAM |
| 448 | // 0x14000000 - 0x1400xxxx GPU registers |
| 449 | // 0x18000000 - 0x19FFFFFF GPU RAM (32MB) |
| 377 | 450 | ADDRESS_MAP_END |
| 378 | 451 | |
| 379 | 452 | static ADDRESS_MAP_START( atvtrack_sub_port, AS_IO, 64, atvtrack_state ) |
| r242121 | r242122 | |
| 427 | 500 | MCFG_SCREEN_UPDATE_DRIVER(atvtrack_state, screen_update_atvtrack) |
| 428 | 501 | |
| 429 | 502 | MCFG_PALETTE_ADD("palette", 0x1000) |
| 503 | MACHINE_CONFIG_END |
| 430 | 504 | |
| 505 | static MACHINE_CONFIG_DERIVED_CLASS( smashdrv, atvtrack, smashdrv_state ) |
| 506 | MCFG_CPU_MODIFY("maincpu") |
| 507 | MCFG_CPU_PROGRAM_MAP(smashdrv_main_map) |
| 508 | MCFG_CPU_IO_MAP(smashdrv_main_port) |
| 509 | |
| 431 | 510 | MACHINE_CONFIG_END |
| 432 | 511 | |
| 512 | |
| 433 | 513 | ROM_START( atvtrack ) |
| 434 | 514 | ROM_REGION( 0x4200000, "maincpu", ROMREGION_ERASEFF) // NAND roms, contain additional data hence the sizes |
| 435 | 515 | ROM_LOAD32_BYTE("15.bin", 0x0000000, 0x1080000, CRC(84eaede7) SHA1(6e6230165c3bb35e49c660dfd0d07c132ed89e6a) ) |
| r242121 | r242122 | |
| 489 | 569 | */ |
| 490 | 570 | |
| 491 | 571 | ROM_START( smashdrv ) |
| 572 | ROM_REGION64_LE( 0x0400000, "data", ROMREGION_ERASEFF) |
| 573 | ROM_LOAD("prg.ic23", 0x0000000, 0x0400000, CRC(5cc6d3ac) SHA1(0c8426774212d891796b59c95b8c70f64db5b67a) ) |
| 574 | |
| 492 | 575 | ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASEFF) |
| 493 | | ROM_LOAD("prg.ic23", 0x0000000, 0x0400000, CRC(5cc6d3ac) SHA1(0c8426774212d891796b59c95b8c70f64db5b67a) ) |
| 494 | | ROM_LOAD("sdra.ic15", 0x1000000, 0x1000000, CRC(cf702287) SHA1(84cd83c339831deff15fe5fcc353e0b596667500) ) |
| 495 | | ROM_LOAD("sdrb.ic14", 0x2000000, 0x1000000, CRC(39b76f0e) SHA1(529943b6075925e5f72c6e966796e04b2c33686c) ) |
| 496 | | ROM_LOAD("sdrc.ic20", 0x3000000, 0x1000000, CRC(c9021dd7) SHA1(1d08aab433614810af858a0fc5d7f03c7b782237) ) |
| 576 | ROM_LOAD32_WORD("sdra.ic15", 0x00000000, 0x01000000, CRC(cf702287) SHA1(84cd83c339831deff15fe5fcc353e0b596667500) ) |
| 577 | ROM_LOAD32_WORD("sdrb.ic14", 0x00000002, 0x01000000, CRC(39b76f0e) SHA1(529943b6075925e5f72c6e966796e04b2c33686c) ) |
| 578 | ROM_LOAD32_WORD("sdrc.ic20", 0x02000000, 0x01000000, CRC(c9021dd7) SHA1(1d08aab433614810af858a0fc5d7f03c7b782237) ) |
| 579 | // ic21 unpopulated |
| 497 | 580 | ROM_END |
| 498 | 581 | |
| 499 | 582 | GAME( 2002, atvtrack, 0, atvtrack, atvtrack, driver_device, 0, ROT0, "Gaelco", "ATV Track (set 1)", GAME_NOT_WORKING | GAME_NO_SOUND ) |
| 500 | 583 | GAME( 2002, atvtracka, atvtrack, atvtrack, atvtrack, driver_device, 0, ROT0, "Gaelco", "ATV Track (set 2)", GAME_NOT_WORKING | GAME_NO_SOUND ) |
| 501 | 584 | |
| 502 | 585 | // not the same HW, but has dual SH4 at least |
| 503 | | GAME( 2000, smashdrv, 0, atvtrack, atvtrack, driver_device, 0, ROT0, "Gaelco", "Smashing Drive", GAME_NOT_WORKING | GAME_NO_SOUND ) |
| 586 | GAME( 2000, smashdrv, 0, smashdrv, atvtrack, driver_device, 0, ROT0, "Gaelco", "Smashing Drive", GAME_NOT_WORKING | GAME_NO_SOUND ) |