trunk/src/mame/audio/hng64.c
| r244928 | r244929 | |
| 23 | 23 | |
| 24 | 24 | so levels 0,1,2,5 are unmasked |
| 25 | 25 | |
| 26 | returning random values / triggering random interrupts eventually results in a situation |
| 27 | where the CPU stops writing to the sound related addresses and starts reading / masking the |
| 28 | serial comms register. |
| 29 | |
| 26 | 30 | */ |
| 27 | 31 | |
| 28 | 32 | |
| r244928 | r244929 | |
| 191 | 195 | |
| 192 | 196 | READ16_MEMBER(hng64_state::hng64_sound_port_0004_r) |
| 193 | 197 | { |
| 198 | // it writes the channel select before reading this.. so either it works on channels, or the command.. |
| 194 | 199 | // read in irq5 |
| 195 | | logerror("%08x: hng64_sound_port_0004_r mask (%04x)\n", space.device().safe_pc(), mem_mask); |
| 200 | printf("%08x: hng64_sound_port_0004_r mask (%04x) chn %04x\n", space.device().safe_pc(), mem_mask, m_audiochannel); |
| 196 | 201 | return rand(); |
| 197 | 202 | } |
| 198 | 203 | |
| 199 | 204 | READ16_MEMBER(hng64_state::hng64_sound_port_0006_r) |
| 200 | 205 | { |
| 206 | // it writes the channel select before reading this.. so either it works on channels, or the command.. |
| 201 | 207 | // read in irq5 |
| 202 | | logerror("%08x: hng64_sound_port_0006_r mask (%04x)\n", space.device().safe_pc(), mem_mask); |
| 208 | printf("%08x: hng64_sound_port_0006_r mask (%04x) chn %04x\n", space.device().safe_pc(), mem_mask, m_audiochannel); |
| 203 | 209 | return rand(); |
| 204 | 210 | } |
| 205 | 211 | |
| r244928 | r244929 | |
| 212 | 218 | |
| 213 | 219 | WRITE16_MEMBER(hng64_state::hng64_sound_select_w) |
| 214 | 220 | { |
| 215 | | // seems to write values in the format xxyy where yy is 0x00-0x1f and xx is oten 00/01/0a |
| 216 | | // there are said to be 32 audio channels, so maybe the lower byte is the channel? |
| 221 | // I'm guessing these addresses are the sound chip / DSP? |
| 217 | 222 | |
| 218 | | // logerror("hng64_sound_select_w") |
| 223 | // ---- ---- 000c cccc |
| 224 | // c = channel |
| 225 | |
| 226 | if (data & 0x00e0) printf("hng64_sound_select_w unknown channel %02x\n", data & 0x00ff); |
| 227 | |
| 228 | UINT8 command = data >> 8; |
| 229 | |
| 230 | switch (command) |
| 231 | { |
| 232 | case 0x00: |
| 233 | case 0x01: |
| 234 | case 0x02: |
| 235 | case 0x03: // 00003fffffff (startup only?) |
| 236 | case 0x04: // doesn't use 6 |
| 237 | case 0x05: // 00003fffffff (mostly, often) |
| 238 | case 0x06: // 00007ff0ffff mostly |
| 239 | case 0x07: // 0000000f0708 etc. (low values) |
| 240 | case 0x08: // doesn't write to 2/4/6 with this set?? |
| 241 | case 0x09: // doesn't write to 2/4/6 with this set?? |
| 242 | case 0x0a: // random looking values |
| 243 | |
| 244 | break; |
| 245 | |
| 246 | default: |
| 247 | printf("hng64_sound_select_w unrecognized command %02x\n", command); |
| 248 | break; |
| 249 | } |
| 250 | |
| 219 | 251 | COMBINE_DATA(&m_audiochannel); |
| 220 | 252 | } |
| 221 | 253 | |
| 222 | 254 | WRITE16_MEMBER(hng64_state::hng64_sound_data_02_w) |
| 223 | 255 | { |
| 224 | 256 | m_audiodat[m_audiochannel].dat[2] = data; |
| 225 | | // logerror("write port 0x0002 chansel %04x data %04x (%04x%04x%04x)\n", m_audiochannel, data, m_audiodat[m_audiochannel].dat[0], m_audiodat[m_audiochannel].dat[1], m_audiodat[m_audiochannel].dat[2]); |
| 257 | |
| 258 | // if ((m_audiochannel & 0xff00) == 0x0a00) |
| 259 | // printf("write port 0x0002 chansel %04x data %04x (%04x%04x%04x)\n", m_audiochannel, data, m_audiodat[m_audiochannel].dat[0], m_audiodat[m_audiochannel].dat[1], m_audiodat[m_audiochannel].dat[2]); |
| 226 | 260 | } |
| 227 | 261 | |
| 228 | 262 | WRITE16_MEMBER(hng64_state::hng64_sound_data_04_w) |
| 229 | 263 | { |
| 230 | 264 | m_audiodat[m_audiochannel].dat[1] = data; |
| 231 | | // logerror("write port 0x0004 chansel %04x data %04x (%04x%04x%04x)\n", m_audiochannel, data, m_audiodat[m_audiochannel].dat[0], m_audiodat[m_audiochannel].dat[1], m_audiodat[m_audiochannel].dat[2]); |
| 265 | |
| 266 | // if ((m_audiochannel & 0xff00) == 0x0a00) |
| 267 | // printf("write port 0x0004 chansel %04x data %04x (%04x%04x%04x)\n", m_audiochannel, data, m_audiodat[m_audiochannel].dat[0], m_audiodat[m_audiochannel].dat[1], m_audiodat[m_audiochannel].dat[2]); |
| 232 | 268 | } |
| 233 | 269 | WRITE16_MEMBER(hng64_state::hng64_sound_data_06_w) |
| 234 | 270 | { |
| 235 | 271 | m_audiodat[m_audiochannel].dat[0] = data; |
| 236 | | // logerror("write port 0x0006 chansel %04x data %04x (%04x%04x%04x)\n", m_audiochannel, data, m_audiodat[m_audiochannel].dat[0], m_audiodat[m_audiochannel].dat[1], m_audiodat[m_audiochannel].dat[2]); |
| 272 | |
| 273 | // if ((m_audiochannel & 0xff00) == 0x0a00) |
| 274 | // printf("write port 0x0006 chansel %04x data %04x (%04x%04x%04x)\n", m_audiochannel, data, m_audiodat[m_audiochannel].dat[0], m_audiodat[m_audiochannel].dat[1], m_audiodat[m_audiochannel].dat[2]); |
| 237 | 275 | } |
| 238 | 276 | |
| 239 | 277 | // but why not just use the V33/V53 XA mode?? |
| r244928 | r244929 | |
| 377 | 415 | { |
| 378 | 416 | // these are very active, maybe they feed back into the v53 via one of the IRQ pins? TM2 toggles more rapidly than TM1 |
| 379 | 417 | // logerror("tcu_tm2_cb %02x\n", state); |
| 380 | | m_audiocpu->set_input_line(2, state? ASSERT_LINE:CLEAR_LINE); // not accurate, just so we have a trigger |
| 418 | |
| 419 | // NOT ACCURATE, just so that all the interrupts get triggered for now. |
| 420 | static int i = 0; |
| 421 | m_audiocpu->set_input_line(i, state? ASSERT_LINE:CLEAR_LINE); |
| 422 | i++; |
| 423 | if (i == 3) i = 0; |
| 381 | 424 | } |
| 382 | 425 | |
| 383 | 426 | |
trunk/src/mame/drivers/taito_l.c
| r244928 | r244929 | |
| 2352 | 2352 | ROM_LOAD( "c20-05.ic3", 0x0000, 0x0144, CRC(f90e5594) SHA1(6181bb25b77028bb150c84bdc073f0457efd7eaa) ) // Confirmed/Matches Japan Set |
| 2353 | 2353 | ROM_END |
| 2354 | 2354 | |
| 2355 | | ROM_START( puzznici ) /* bootleg */ |
| 2355 | ROM_START( puzznici ) /* bootleg (original main board, bootleg sub-board without MCU) */ |
| 2356 | 2356 | ROM_REGION( 0x20000, "maincpu", 0 ) |
| 2357 | 2357 | ROM_LOAD( "1.ic11", 0x00000, 0x20000, CRC(4612f5e0) SHA1(dc07a365414666568537d31ef01b58f2362cadaf) ) |
| 2358 | 2358 | |
| r244928 | r244929 | |
| 2361 | 2361 | ROM_LOAD16_BYTE( "3.ic9", 0x00001, 0x20000, CRC(2bf5232a) SHA1(a8fc06bb8bae2ca6bd21e3a96c9ed38bb356d5d7) ) |
| 2362 | 2362 | ROM_END |
| 2363 | 2363 | |
| 2364 | ROM_START( puzznicb ) /* bootleg (original main board, bootleg sub-board without MCU) */ |
| 2365 | ROM_REGION( 0x20000, "maincpu", 0 ) |
| 2366 | ROM_LOAD( "ic11.bin", 0x00000, 0x20000, CRC(2510df4d) SHA1(534327e3d7f847b6c0effc5fd0fb9f5da9b0d3b1) ) |
| 2367 | |
| 2368 | ROM_REGION( 0x20000, "gfx1", 0 ) // this has the bad line in tile 1 fixed (unused I believe) are we sure the roms used in the original sets are a good dump? |
| 2369 | ROM_LOAD16_BYTE( "ic10.bin", 0x00000, 0x10000, CRC(be12749a) SHA1(c67d1a434486843a6776d89e905362b7db595d8d) ) |
| 2370 | ROM_LOAD16_BYTE( "ic9.bin", 0x00001, 0x10000, CRC(0f183340) SHA1(9eef7de801eb9763313f55a38e567b92fca3bfa6) ) |
| 2371 | ROM_END |
| 2372 | |
| 2364 | 2373 | /* |
| 2365 | 2374 | |
| 2366 | 2375 | Taito's Horse Shoe |
| r244928 | r244929 | |
| 2588 | 2597 | GAME( 1989, puzznic, 0, puzznic, puzznic, driver_device, 0, ROT0, "Taito Corporation Japan", "Puzznic (World)", 0 ) |
| 2589 | 2598 | GAME( 1989, puzznicj, puzznic, puzznic, puzznic, driver_device, 0, ROT0, "Taito Corporation", "Puzznic (Japan)", 0 ) |
| 2590 | 2599 | GAME( 1989, puzznici, puzznic, puzznici, puzznic, driver_device, 0, ROT0, "bootleg", "Puzznic (Italian bootleg)", 0 ) |
| 2600 | GAME( 1989, puzznicb, puzznic, puzznici, puzznic, driver_device, 0, ROT0, "bootleg", "Puzznic (bootleg)", 0 ) |
| 2591 | 2601 | |
| 2592 | 2602 | GAME( 1990, horshoes, 0, horshoes, horshoes, driver_device, 0, ROT270, "Taito America Corporation", "American Horseshoes (US)", 0 ) |
| 2593 | 2603 | |
| 2594 | 2604 | GAME( 1990, palamed, 0, palamed, palamed, driver_device, 0, ROT0, "Taito Corporation", "Palamedes (Japan)", 0 ) |
| 2595 | 2605 | |
| 2596 | 2606 | GAME( 1993, cachat, 0, cachat, cachat, driver_device, 0, ROT0, "Taito Corporation", "Cachat (Japan)", 0 ) |
| 2597 | | |
| 2598 | 2607 | GAME( 1993, tubeit, cachat, cachat, tubeit, driver_device, 0, ROT0, "bootleg", "Tube-It", 0 ) // No (c) message |
| 2599 | 2608 | |
| 2600 | 2609 | GAME( 199?, cubybop, 0, cachat, cubybop, driver_device, 0, ROT0, "Hot-B", "Cuby Bop (location test)", 0 ) // No (c) message, but Hot-B company logo in tile gfx |
| r244928 | r244929 | |
| 2603 | 2612 | GAME( 1992, lagirl, plgirls, cachat, plgirls, driver_device, 0, ROT270, "bootleg", "LA Girl", 0 ) // bootleg hardware with changed title & backgrounds |
| 2604 | 2613 | |
| 2605 | 2614 | GAME( 1993, plgirls2, 0, cachat, plgirls2, driver_device, 0, ROT270, "Hot-B", "Play Girls 2", 0 ) |
| 2606 | | GAME( 1993, plgirls2b, plgirls2, cachat, plgirls2, driver_device, 0, ROT270, "bootleg", "Play Girls 2 (bootleg)", 0 ) // bootleg hardware (regular Z80 etc. instead of TC0090LVC, but acts the same) |
| 2615 | GAME( 1993, plgirls2b, plgirls2, cachat, plgirls2, driver_device, 0, ROT270, "bootleg", "Play Girls 2 (bootleg)", GAME_IMPERFECT_GRAPHICS ) // bootleg hardware (regular Z80 etc. instead of TC0090LVC, but acts almost the same - scroll offset problems) |
| 2607 | 2616 | |
| 2608 | 2617 | GAME( 1990, evilston, 0, evilston, evilston, driver_device, 0, ROT270, "Spacy Industrial, Ltd.", "Evil Stone", GAME_IMPERFECT_SOUND ) // not Taito PCB, just uses TC0090LVC |