diff --git a/src/emu/video/psx.c b/src/emu/video/psx.c index d4479889f90..b6082b67ee7 100644 --- a/src/emu/video/psx.c +++ b/src/emu/video/psx.c @@ -2924,7 +2924,15 @@ void psxgpu_device::MoveImage( void ) } } -void psxgpu_device::dma_write( UINT32 *p_ram, INT32 n_size ) +void psxgpu_device::dma_write( UINT32 n_address, INT32 n_size ) +{ + psx_state *p_psx = machine().driver_data(); + UINT32 *p_n_psxram = p_psx->m_p_n_psxram; + + gpu_write( &p_n_psxram[ n_address / 4 ], n_size ); +} + +void psxgpu_device::gpu_write( UINT32 *p_ram, INT32 n_size ) { while( n_size > 0 ) { @@ -3418,7 +3426,7 @@ WRITE32_MEMBER( psxgpu_device::write ) switch( offset ) { case 0x00: - dma_write( &data, 1 ); + gpu_write( &data, 1 ); break; case 0x01: switch( data >> 24 ) @@ -3556,7 +3564,15 @@ WRITE32_MEMBER( psxgpu_device::write ) } -void psxgpu_device::dma_read( UINT32 *p_ram, INT32 n_size ) +void psxgpu_device::dma_read( UINT32 n_address, INT32 n_size ) +{ + psx_state *p_psx = machine().driver_data(); + UINT32 *p_n_psxram = p_psx->m_p_n_psxram; + + gpu_read( &p_n_psxram[ n_address / 4 ], n_size ); +} + +void psxgpu_device::gpu_read( UINT32 *p_ram, INT32 n_size ) { while( n_size > 0 ) { @@ -3611,7 +3627,7 @@ READ32_MEMBER( psxgpu_device::read ) switch( offset ) { case 0x00: - dma_read( &data, 1 ); + gpu_read( &data, 1 ); break; case 0x01: data = n_gpustatus; diff --git a/src/emu/video/psx.h b/src/emu/video/psx.h index 105c6d3994b..383bcbedf25 100644 --- a/src/emu/video/psx.h +++ b/src/emu/video/psx.h @@ -12,6 +12,11 @@ #include "emu.h" +#define MCFG_PSXGPU_ADD( cputag, tag, type, clock ) \ + MCFG_DEVICE_ADD( tag, type, clock ) \ + MCFG_PSX_DMA_CHANNEL_READ( cputag, 2, psx_dma_write_delegate( FUNC( psxgpu_device::dma_read ), (psxgpu_device *) device ) ) \ + MCFG_PSX_DMA_CHANNEL_WRITE( cputag, 2, psx_dma_read_delegate( FUNC( psxgpu_device::dma_write ), (psxgpu_device *) device ) ) + extern const device_type CXD8514Q; extern const device_type CXD8538Q; extern const device_type CXD8561Q; @@ -168,8 +173,8 @@ public: void update_screen(bitmap_t *bitmap, const rectangle *cliprect); WRITE32_MEMBER( write ); READ32_MEMBER( read ); - void dma_read( UINT32 *p_ram, INT32 n_size ); - void dma_write( UINT32 *p_ram, INT32 n_size ); + void dma_read( UINT32 n_address, INT32 n_size ); + void dma_write( UINT32 n_address, INT32 n_size ); void lightgun_set( int, int ); void vblank( void ); @@ -195,6 +200,8 @@ protected: void MoveImage( void ); void psx_gpu_init( int n_gputype ); void gpu_reset(); + void gpu_read( UINT32 *p_ram, INT32 n_size ); + void gpu_write( UINT32 *p_ram, INT32 n_size ); #if defined( MAME_DEBUG ) void DebugMeshInit( void ); diff --git a/src/mame/drivers/konamigq.c b/src/mame/drivers/konamigq.c index 126415240ca..cd5d59004b9 100644 --- a/src/mame/drivers/konamigq.c +++ b/src/mame/drivers/konamigq.c @@ -391,7 +391,7 @@ static MACHINE_CONFIG_START( konamigq, konamigq_state ) MCFG_PALETTE_LENGTH( 65536 ) MCFG_PALETTE_INIT( psx ) - MCFG_DEVICE_ADD( "gpu", CXD8538Q, 0 ) + MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8538Q, 0 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/konamigv.c b/src/mame/drivers/konamigv.c index 2ac40c5f679..a5027337e92 100644 --- a/src/mame/drivers/konamigv.c +++ b/src/mame/drivers/konamigv.c @@ -350,7 +350,7 @@ static MACHINE_CONFIG_START( konamigv, konamigv_state ) MCFG_PALETTE_LENGTH( 65536 ) MCFG_PALETTE_INIT( psx ) - MCFG_DEVICE_ADD( "gpu", CXD8514Q, 0 ) + MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8514Q, 0 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/ksys573.c b/src/mame/drivers/ksys573.c index 6f6babbcb0e..20c3cfb40af 100644 --- a/src/mame/drivers/ksys573.c +++ b/src/mame/drivers/ksys573.c @@ -2988,7 +2988,7 @@ static MACHINE_CONFIG_START( konami573, ksys573_state ) MCFG_PALETTE_LENGTH( 65536 ) MCFG_PALETTE_INIT( psx ) - MCFG_DEVICE_ADD( "gpu", CXD8561Q, 0 ) + MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561Q, 0 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/namcos10.c b/src/mame/drivers/namcos10.c index 36abdc2e79d..6320770e91c 100644 --- a/src/mame/drivers/namcos10.c +++ b/src/mame/drivers/namcos10.c @@ -491,7 +491,7 @@ static MACHINE_CONFIG_START( namcos10, namcos10_state ) MCFG_PALETTE_LENGTH( 65536 ) MCFG_PALETTE_INIT( psx ) - MCFG_DEVICE_ADD( "gpu", CXD8561CQ, 0 ) + MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561CQ, 0 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/namcos11.c b/src/mame/drivers/namcos11.c index 7266108e985..2e22fdad940 100644 --- a/src/mame/drivers/namcos11.c +++ b/src/mame/drivers/namcos11.c @@ -1006,7 +1006,7 @@ static MACHINE_CONFIG_START( coh100, namcos11_state ) MCFG_PALETTE_LENGTH( 65536 ) MCFG_PALETTE_INIT( psx ) - MCFG_DEVICE_ADD( "gpu", CXD8538Q, 0 ) + MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8538Q, 0 ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("c352", C352, 16384000) diff --git a/src/mame/drivers/namcos12.c b/src/mame/drivers/namcos12.c index 110590c766f..3ab850f16f7 100644 --- a/src/mame/drivers/namcos12.c +++ b/src/mame/drivers/namcos12.c @@ -1670,7 +1670,7 @@ static MACHINE_CONFIG_START( coh700, namcos12_state ) MCFG_PALETTE_LENGTH( 65536 ) MCFG_PALETTE_INIT( psx ) - MCFG_DEVICE_ADD( "gpu", CXD8654Q, 0 ) + MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8654Q, 0 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/taitogn.c b/src/mame/drivers/taitogn.c index acb76f51278..84cafac4453 100644 --- a/src/mame/drivers/taitogn.c +++ b/src/mame/drivers/taitogn.c @@ -975,7 +975,7 @@ static MACHINE_CONFIG_START( coh3002t, taitogn_state ) MCFG_PALETTE_LENGTH( 65536 ) MCFG_PALETTE_INIT( psx ) - MCFG_DEVICE_ADD( "gpu", CXD8654Q, 0 ) + MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8654Q, 0 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/twinkle.c b/src/mame/drivers/twinkle.c index acfd8e23309..402deef5a2c 100644 --- a/src/mame/drivers/twinkle.c +++ b/src/mame/drivers/twinkle.c @@ -906,7 +906,7 @@ static MACHINE_CONFIG_START( twinkle, twinkle_state ) MCFG_PALETTE_LENGTH( 65536 ) MCFG_PALETTE_INIT( psx ) - MCFG_DEVICE_ADD( "gpu", CXD8561Q, 0 ) + MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561Q, 0 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("speakerleft", "speakerright") diff --git a/src/mame/drivers/zn.c b/src/mame/drivers/zn.c index 7707eef46d9..eabae5145c7 100644 --- a/src/mame/drivers/zn.c +++ b/src/mame/drivers/zn.c @@ -502,7 +502,7 @@ static MACHINE_CONFIG_START( zn1_1mb_vram, zn_state ) MCFG_PALETTE_LENGTH( 65536 ) MCFG_PALETTE_INIT( psx ) - MCFG_DEVICE_ADD( "gpu", CXD8561Q, 0 ) + MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561Q, 0 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -538,7 +538,7 @@ static MACHINE_CONFIG_START( zn2, zn_state ) MCFG_PALETTE_LENGTH( 65536 ) MCFG_PALETTE_INIT( psx ) - MCFG_DEVICE_ADD( "gpu", CXD8654Q, 0 ) + MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8654Q, 0 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/includes/psx.h b/src/mame/includes/psx.h index cacf38119bb..7b1df1d569b 100644 --- a/src/mame/includes/psx.h +++ b/src/mame/includes/psx.h @@ -32,8 +32,6 @@ VIDEO_START( psx_type2 ); SCREEN_UPDATE( psx ); INTERRUPT_GEN( psx_vblank ); extern void psx_gpu_reset( running_machine &machine ); -extern void psx_gpu_read( running_machine &, UINT32 *p_ram, INT32 n_size ); -extern void psx_gpu_write( running_machine &, UINT32 *p_ram, INT32 n_size ); READ32_HANDLER( psx_gpu_r ); WRITE32_HANDLER( psx_gpu_w ); extern void psx_lightgun_set( running_machine &, int, int ); diff --git a/src/mame/machine/psx.c b/src/mame/machine/psx.c index 40a0f521860..965033068b8 100644 --- a/src/mame/machine/psx.c +++ b/src/mame/machine/psx.c @@ -84,22 +84,6 @@ void psx_sio_input( running_machine &machine, int n_port, int n_mask, int n_data psxcpu_device::sio_input( *machine.device("maincpu"), "maincpu", n_port, n_mask, n_data ); } -static void gpu_read( psx_state *p_psx, UINT32 n_address, INT32 n_size ) -{ - psxgpu_device *gpu = downcast( p_psx->machine().device("gpu") ); - UINT32 *p_n_psxram = p_psx->m_p_n_psxram; - - gpu->dma_read( &p_n_psxram[ n_address / 4 ], n_size ); -} - -static void gpu_write( psx_state *p_psx, UINT32 n_address, INT32 n_size ) -{ - psxgpu_device *gpu = downcast( p_psx->machine().device("gpu") ); - UINT32 *p_n_psxram = p_psx->m_p_n_psxram; - - gpu->dma_write( &p_n_psxram[ n_address / 4 ], n_size ); -} - void psx_driver_init( running_machine &machine ) { psx_state *p_psx = machine.driver_data(); @@ -107,9 +91,6 @@ void psx_driver_init( running_machine &machine ) p_psx->b_need_sianniv_vblank_hack = !strcmp(machine.system().name, "sianniv"); p_psx->m_p_n_psxram = (UINT32 *)memory_get_shared(machine, "share1", p_psx->m_n_psxramsize); - - psx_dma_install_read_handler( machine, 2, psx_dma_read_delegate( FUNC( gpu_read ), p_psx ) ); - psx_dma_install_write_handler( machine, 2, psx_dma_write_delegate( FUNC( gpu_write ), p_psx ) ); } SCREEN_UPDATE( psx )