trunk/src/mame/drivers/zn.c
r23155 | r23156 | |
97 | 97 | DECLARE_MACHINE_RESET(coh1001l); |
98 | 98 | DECLARE_MACHINE_RESET(coh1002v); |
99 | 99 | DECLARE_MACHINE_RESET(coh1002m); |
| 100 | DECLARE_MACHINE_RESET(coh1002msnd); |
100 | 101 | DECLARE_WRITE_LINE_MEMBER(irqhandler); |
101 | 102 | INTERRUPT_GEN_MEMBER(qsound_interrupt); |
102 | 103 | void atpsx_dma_read(UINT32 *p_n_psxram, UINT32 n_address, INT32 n_size ); |
r23155 | r23156 | |
119 | 120 | size_t m_nbajamex_eeprom_size; |
120 | 121 | UINT8 *m_nbajamex_eeprom; |
121 | 122 | |
122 | | int m_cbaj_to_z80_status; |
123 | | int m_cbaj_from_z80_status; |
124 | | int m_latch_to_z80; |
| 123 | UINT8 m_cbaj_fifo_buffer[2][0x400]; |
| 124 | int m_cbaj_fifo_main_ptr[2]; |
| 125 | int m_cbaj_fifo_z80_ptr[2]; |
125 | 126 | |
126 | 127 | required_device<psxgpu_device> m_gpu; |
127 | 128 | required_device<znsec_device> m_znsec0; |
r23155 | r23156 | |
2197 | 2198 | |
2198 | 2199 | MCFG_SOUND_ADD("ymz", YMZ280B, XTAL_16_9344MHz) |
2199 | 2200 | MCFG_YMZ280B_IRQ_HANDLER(WRITELINE(zn_state, coh1001l_ymz_irq)) |
2200 | | MCFG_SOUND_ROUTE(0, "lspeaker", 0.37) |
2201 | | MCFG_SOUND_ROUTE(1, "rspeaker", 0.37) |
| 2201 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) |
| 2202 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.35) |
2202 | 2203 | MACHINE_CONFIG_END |
2203 | 2204 | |
2204 | 2205 | /* |
r23155 | r23156 | |
2423 | 2424 | |
2424 | 2425 | READ8_MEMBER(zn_state::cbaj_from_z80_latch_r) |
2425 | 2426 | { |
2426 | | machine().scheduler().synchronize(); |
2427 | | |
2428 | | m_cbaj_from_z80_status &= ~2; |
2429 | | return soundlatch2_byte_r(space,0); |
| 2427 | UINT8 ret = m_cbaj_fifo_buffer[1][m_cbaj_fifo_main_ptr[1]]; |
| 2428 | m_cbaj_fifo_main_ptr[1] = (m_cbaj_fifo_main_ptr[1] + 1) & 0x3ff; |
| 2429 | return ret; |
2430 | 2430 | } |
2431 | 2431 | |
2432 | 2432 | WRITE8_MEMBER(zn_state::cbaj_to_z80_latch_w) |
2433 | 2433 | { |
2434 | | machine().scheduler().synchronize(); |
2435 | | |
2436 | | m_cbaj_to_z80_status |= 2; |
2437 | | m_latch_to_z80 = data; |
| 2434 | m_cbaj_fifo_buffer[0][m_cbaj_fifo_main_ptr[0]] = data; |
| 2435 | m_cbaj_fifo_main_ptr[0] = (m_cbaj_fifo_main_ptr[0] + 1) & 0x3ff; |
2438 | 2436 | } |
2439 | 2437 | |
2440 | 2438 | READ8_MEMBER(zn_state::cbaj_from_z80_status_r) |
2441 | 2439 | { |
2442 | | machine().scheduler().synchronize(); |
2443 | | |
2444 | | int ready = m_cbaj_from_z80_status; |
2445 | | m_cbaj_from_z80_status &= ~2; |
2446 | | return ready; |
| 2440 | return (m_cbaj_fifo_main_ptr[1] != m_cbaj_fifo_z80_ptr[1]) ? 0x02 : 0x00; |
2447 | 2441 | } |
2448 | 2442 | |
2449 | 2443 | static ADDRESS_MAP_START(coh1002msnd_map, AS_PROGRAM, 32, zn_state) |
r23155 | r23156 | |
2455 | 2449 | |
2456 | 2450 | READ8_MEMBER(zn_state::cbaj_to_z80_latch_r) |
2457 | 2451 | { |
2458 | | m_cbaj_to_z80_status &= ~2; |
2459 | | return m_latch_to_z80; |
| 2452 | UINT8 ret = m_cbaj_fifo_buffer[0][m_cbaj_fifo_z80_ptr[0]]; |
| 2453 | m_cbaj_fifo_z80_ptr[0] = (m_cbaj_fifo_z80_ptr[0] + 1) & 0x3ff; |
| 2454 | return ret; |
2460 | 2455 | } |
2461 | 2456 | |
2462 | 2457 | WRITE8_MEMBER(zn_state::cbaj_from_z80_latch_w) |
2463 | 2458 | { |
2464 | | m_cbaj_from_z80_status |= 2; |
2465 | | soundlatch2_byte_w(space, 0, data); |
| 2459 | m_cbaj_fifo_buffer[1][m_cbaj_fifo_z80_ptr[1]] = data; |
| 2460 | m_cbaj_fifo_z80_ptr[1] = (m_cbaj_fifo_z80_ptr[1] + 1) & 0x3ff; |
2466 | 2461 | } |
2467 | 2462 | |
2468 | 2463 | READ8_MEMBER(zn_state::cbaj_to_z80_status_r) |
2469 | 2464 | { |
2470 | | int ret = m_cbaj_to_z80_status; |
2471 | | m_cbaj_to_z80_status &= ~2; |
2472 | | return ret; |
| 2465 | return (m_cbaj_fifo_main_ptr[0] != m_cbaj_fifo_z80_ptr[0]) ? 0x02 : 0x00; |
2473 | 2466 | } |
2474 | 2467 | |
2475 | 2468 | static ADDRESS_MAP_START( cbaj_z80_map, AS_PROGRAM, 8, zn_state ) |
r23155 | r23156 | |
2484 | 2477 | AM_RANGE(0x91, 0x91) AM_READ(cbaj_to_z80_status_r) |
2485 | 2478 | ADDRESS_MAP_END |
2486 | 2479 | |
| 2480 | MACHINE_RESET_MEMBER(zn_state,coh1002msnd) |
| 2481 | { |
| 2482 | m_cbaj_fifo_main_ptr[0] = m_cbaj_fifo_main_ptr[1] = 0; |
| 2483 | m_cbaj_fifo_z80_ptr[0] = m_cbaj_fifo_z80_ptr[1] = 0; |
2487 | 2484 | |
| 2485 | MACHINE_RESET_CALL_MEMBER(coh1002m); |
| 2486 | } |
| 2487 | |
2488 | 2488 | static MACHINE_CONFIG_DERIVED( coh1002msnd, coh1002m ) |
2489 | 2489 | MCFG_CPU_MODIFY("maincpu") |
2490 | 2490 | MCFG_CPU_PROGRAM_MAP(coh1002msnd_map) |
r23155 | r23156 | |
2493 | 2493 | MCFG_CPU_PROGRAM_MAP(cbaj_z80_map) |
2494 | 2494 | MCFG_CPU_IO_MAP(cbaj_z80_port_map) |
2495 | 2495 | |
| 2496 | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) |
| 2497 | MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1002msnd) |
| 2498 | |
2496 | 2499 | MCFG_SOUND_ADD("ymz", YMZ280B, XTAL_16_9344MHz) |
2497 | | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
2498 | | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 2500 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) |
| 2501 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.35) |
2499 | 2502 | MACHINE_CONFIG_END |
2500 | 2503 | |
2501 | 2504 | |