From 1f7ff8fd9a3ba33985803857ca0afe336d6ddc0d Mon Sep 17 00:00:00 2001 From: AJR Date: Tue, 11 Sep 2018 17:06:03 -0400 Subject: video/psx.cpp: Eliminate register_postload; separate out screen device (nw) --- src/devices/video/psx.cpp | 36 +++++++++++++++++++++++++----------- src/devices/video/psx.h | 7 +++---- src/mame/drivers/konamigq.cpp | 4 ++++ src/mame/drivers/konamigv.cpp | 4 ++++ src/mame/drivers/ksys573.cpp | 8 +++++--- src/mame/drivers/namcos10.cpp | 7 +++++++ src/mame/drivers/namcos11.cpp | 5 +++++ src/mame/drivers/namcos12.cpp | 18 +++++++++++------- src/mame/drivers/psx.cpp | 7 +++++++ src/mame/drivers/taitogn.cpp | 4 ++++ src/mame/drivers/twinkle.cpp | 4 ++++ src/mame/drivers/zn.cpp | 18 ++++++++++++------ 12 files changed, 91 insertions(+), 31 deletions(-) diff --git a/src/devices/video/psx.cpp b/src/devices/video/psx.cpp index 0c6bfa6e38d..0b5ad06948a 100644 --- a/src/devices/video/psx.cpp +++ b/src/devices/video/psx.cpp @@ -37,6 +37,8 @@ void psxgpu_device::device_start() { m_vblank_handler.resolve_safe(); + screen().register_vblank_callback(vblank_state_delegate(&psxgpu_device::vblank, this)); + for( int n_colour = 0; n_colour < 0x10000; n_colour++ ) { set_pen_color( n_colour, pal555(n_colour,0, 5, 10) ); @@ -608,8 +610,11 @@ void psxgpu_device::psx_gpu_init( int n_gputype ) save_item(NAME(n_ix)); save_item(NAME(n_iy)); save_item(NAME(n_ti)); +} - machine().save().register_postload( save_prepost_delegate( FUNC( psxgpu_device::updatevisiblearea ), this ) ); +void psxgpu_device::device_post_load() +{ + updatevisiblearea(); } uint32_t psxgpu_device::update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) @@ -3884,15 +3889,24 @@ void psxgpu_device::lightgun_set( int n_x, int n_y ) } //------------------------------------------------- -// device_add_mconfig - add device configuration +// device_config_complete - perform any +// operations now that the configuration is +// complete //------------------------------------------------- -MACHINE_CONFIG_START(psxgpu_device::device_add_mconfig) - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE( 60 ) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE( 1024, 1024 ) - MCFG_SCREEN_VISIBLE_AREA( 0, 639, 0, 479 ) - MCFG_SCREEN_UPDATE_DEVICE( DEVICE_SELF, psxgpu_device, update_screen ) - ((screen_device *)device)->register_vblank_callback(vblank_state_delegate(&psxgpu_device::vblank, this)); -MACHINE_CONFIG_END +void psxgpu_device::device_config_complete() +{ + if (!has_screen()) + return; + + if (!screen().refresh_attoseconds()) + { + screen().set_refresh_hz(60); + screen().set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen().set_size(1024, 1024); + screen().set_visarea(0, 639, 0, 479); + } + + if (!screen().has_screen_update()) + screen().set_screen_update(screen_update_rgb32_delegate(FUNC(psxgpu_device::update_screen), this)); +} diff --git a/src/devices/video/psx.h b/src/devices/video/psx.h index 09c591563fb..6fdbcc80633 100644 --- a/src/devices/video/psx.h +++ b/src/devices/video/psx.h @@ -38,9 +38,6 @@ MCFG_PSX_DMA_CHANNEL_READ( cputag, 2, psxdma_device::write_delegate(&psxgpu_device::dma_read, (psxgpu_device *) device ) ) \ MCFG_PSX_DMA_CHANNEL_WRITE( cputag, 2, psxdma_device::read_delegate(&psxgpu_device::dma_write, (psxgpu_device *) device ) ) -#define MCFG_PSXGPU_VBLANK_CALLBACK( _delegate ) \ - ((screen_device *) config.device_find( device, "screen" ))->register_vblank_callback( _delegate ); - DECLARE_DEVICE_TYPE(CXD8514Q, cxd8514q_device) DECLARE_DEVICE_TYPE(CXD8538Q, cxd8538q_device) DECLARE_DEVICE_TYPE(CXD8561Q, cxd8561q_device) @@ -53,6 +50,7 @@ class psxgpu_device : public device_t, public device_video_interface, public dev public: // configuration helpers template devcb_base &set_vblank_handler(Object &&cb) { return m_vblank_handler.set_callback(std::forward(cb)); } + auto vblank_callback() { return m_vblank_handler.bind(); } void set_vram_size(int size) { vramSize = size; } DECLARE_WRITE32_MEMBER( write ); @@ -73,8 +71,9 @@ protected: psxgpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); virtual void device_start() override; + virtual void device_post_load() override; virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; + virtual void device_config_complete() override; // device_palette_interface overrides virtual uint32_t palette_entries() const override { return 32*32*32*2; } diff --git a/src/mame/drivers/konamigq.cpp b/src/mame/drivers/konamigq.cpp index 2709fe85176..41ba62ced58 100644 --- a/src/mame/drivers/konamigq.cpp +++ b/src/mame/drivers/konamigq.cpp @@ -81,6 +81,7 @@ #include "sound/k054539.h" #include "sound/k056800.h" #include "video/psx.h" +#include "screen.h" #include "speaker.h" @@ -362,6 +363,9 @@ MACHINE_CONFIG_START(konamigq_state::konamigq) /* video hardware */ MCFG_PSXGPU_ADD("maincpu", "gpu", CXD8538Q, 0x200000, XTAL(53'693'175)) + MCFG_VIDEO_SET_SCREEN("screen") + + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/konamigv.cpp b/src/mame/drivers/konamigv.cpp index f6783885128..1d126a06536 100644 --- a/src/mame/drivers/konamigv.cpp +++ b/src/mame/drivers/konamigv.cpp @@ -135,6 +135,7 @@ Notes: #include "sound/cdda.h" #include "sound/spu.h" #include "video/psx.h" +#include "screen.h" #include "speaker.h" #include "cdrom.h" @@ -376,6 +377,9 @@ MACHINE_CONFIG_START(konamigv_state::konamigv) /* video hardware */ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8514Q, 0x100000, XTAL(53'693'175) ) + MCFG_VIDEO_SET_SCREEN("screen") + + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/ksys573.cpp b/src/mame/drivers/ksys573.cpp index f90f802df5e..b937fcd8a44 100644 --- a/src/mame/drivers/ksys573.cpp +++ b/src/mame/drivers/ksys573.cpp @@ -523,7 +523,7 @@ private: void cdrom_dma_read( uint32_t *ram, uint32_t n_address, int32_t n_size ); void cdrom_dma_write( uint32_t *ram, uint32_t n_address, int32_t n_size ); - void sys573_vblank( screen_device &screen, bool vblank_state ); + DECLARE_WRITE_LINE_MEMBER( sys573_vblank ); void punchmania_cassette_install(device_t *device); void salarymc_cassette_install(device_t *device); @@ -823,7 +823,7 @@ MACHINE_RESET_MEMBER( ksys573_state,konami573 ) m_h8_clk = 0; } -void ksys573_state::sys573_vblank( screen_device &screen, bool vblank_state ) +WRITE_LINE_MEMBER(ksys573_state::sys573_vblank) { update_disc(); @@ -2128,7 +2128,9 @@ MACHINE_CONFIG_START(ksys573_state::konami573) /* video hardware */ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561Q, 0x200000, XTAL(53'693'175) ) - MCFG_PSXGPU_VBLANK_CALLBACK(vblank_state_delegate(&ksys573_state::sys573_vblank, this )) + MCFG_VIDEO_SET_SCREEN("screen") + + SCREEN(config, "screen", SCREEN_TYPE_RASTER).screen_vblank().set(FUNC(ksys573_state::sys573_vblank)); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/namcos10.cpp b/src/mame/drivers/namcos10.cpp index c391fd6a288..58930b534a5 100644 --- a/src/mame/drivers/namcos10.cpp +++ b/src/mame/drivers/namcos10.cpp @@ -398,6 +398,7 @@ earlier TK games, so it appears to be optional or is only used by the later TK51 #include "cpu/psx/psx.h" #include "machine/ram.h" #include "video/psx.h" +#include "screen.h" #include "speaker.h" @@ -938,6 +939,9 @@ MACHINE_CONFIG_START(namcos10_state::namcos10_memm) /* video hardware */ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561CQ, 0x200000, XTAL(53'693'175) ) + MCFG_VIDEO_SET_SCREEN("screen") + + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -962,6 +966,9 @@ MACHINE_CONFIG_START(namcos10_state::namcos10_memn) /* video hardware */ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561CQ, 0x200000, XTAL(53'693'175) ) + MCFG_VIDEO_SET_SCREEN("screen") + + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/namcos11.cpp b/src/mame/drivers/namcos11.cpp index 9c0a010dc03..fd434f52ebe 100644 --- a/src/mame/drivers/namcos11.cpp +++ b/src/mame/drivers/namcos11.cpp @@ -304,6 +304,7 @@ Pin 22 Solder Side - Gun 2 Trigger #include "machine/timer.h" #include "sound/c352.h" #include "video/psx.h" +#include "screen.h" #include "speaker.h" #define C76_SPEEDUP ( 1 ) /* sound cpu idle skipping */ @@ -623,6 +624,9 @@ MACHINE_CONFIG_START(namcos11_state::coh110) MCFG_TIMER_DRIVER_ADD_PERIODIC("mcu_adc", namcos11_state, mcu_adc_cb, attotime::from_hz(60)) MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561Q, 0x200000, XTAL(53'693'175) ) + MCFG_VIDEO_SET_SCREEN("screen") + + SCREEN(config, "screen", SCREEN_TYPE_RASTER); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); @@ -644,6 +648,7 @@ MACHINE_CONFIG_START(namcos11_state::coh100) subdevice("maincpu:ram")->set_default_size("4M"); MCFG_PSXGPU_REPLACE( "maincpu", "gpu", CXD8538Q, 0x200000, XTAL(53'693'175) ) + MCFG_VIDEO_SET_SCREEN("screen") MACHINE_CONFIG_END MACHINE_CONFIG_START(namcos11_state::tekken) diff --git a/src/mame/drivers/namcos12.cpp b/src/mame/drivers/namcos12.cpp index 412e29b2fbd..eed67de65d1 100644 --- a/src/mame/drivers/namcos12.cpp +++ b/src/mame/drivers/namcos12.cpp @@ -1207,7 +1207,7 @@ private: inline void ATTR_PRINTF(3,4) verboselog( int n_level, const char *s_fmt, ... ); void namcos12_rom_read( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size ); - void namcos12_sub_irq( screen_device &screen, bool vblank_state ); + DECLARE_WRITE_LINE_MEMBER(namcos12_sub_irq); }; @@ -1347,11 +1347,11 @@ void namcos12_state::namcos12_rom_read( uint32_t *p_n_psxram, uint32_t n_address } } -void namcos12_state::namcos12_sub_irq( screen_device &screen, bool vblank_state ) +WRITE_LINE_MEMBER(namcos12_state::namcos12_sub_irq) { - m_sub->set_input_line(1, vblank_state ? ASSERT_LINE : CLEAR_LINE); - m_adc->adtrg_w(vblank_state); - m_sub_portb = (m_sub_portb & 0x7f) | (vblank_state << 7); + m_sub->set_input_line(1, state ? ASSERT_LINE : CLEAR_LINE); + m_adc->adtrg_w(state); + m_sub_portb = (m_sub_portb & 0x7f) | (state << 7); } void namcos12_state::namcos12_map(address_map &map) @@ -1768,7 +1768,9 @@ MACHINE_CONFIG_START(namcos12_state::coh700) /* video hardware */ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8654Q, 0x200000, XTAL(53'693'175) ) - MCFG_PSXGPU_VBLANK_CALLBACK(vblank_state_delegate(&namcos12_state::namcos12_sub_irq, this ) ) + MCFG_VIDEO_SET_SCREEN("screen") + + SCREEN(config, "screen", SCREEN_TYPE_RASTER).screen_vblank().set(FUNC(namcos12_state::namcos12_sub_irq)); MACHINE_CONFIG_END // CPU PCB COH716 @@ -1784,7 +1786,9 @@ MACHINE_CONFIG_START(namcos12_state::coh716) /* video hardware */ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561CQ, 0x400000, XTAL(53'693'175) ) - MCFG_PSXGPU_VBLANK_CALLBACK(vblank_state_delegate(&namcos12_state::namcos12_sub_irq, this ) ) + MCFG_VIDEO_SET_SCREEN("screen") + + SCREEN(config, "screen", SCREEN_TYPE_RASTER).screen_vblank().set(FUNC(namcos12_state::namcos12_sub_irq)); MACHINE_CONFIG_END MACHINE_CONFIG_START(namcos12_boothack_state::ptblank2) diff --git a/src/mame/drivers/psx.cpp b/src/mame/drivers/psx.cpp index 908c21e1426..1d4260396d8 100644 --- a/src/mame/drivers/psx.cpp +++ b/src/mame/drivers/psx.cpp @@ -23,6 +23,7 @@ #include "video/psx.h" #include "debugger.h" +#include "screen.h" #include "softlist.h" #include "speaker.h" @@ -536,6 +537,9 @@ MACHINE_CONFIG_START(psx1_state::psj) /* video hardware */ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561Q, 0x100000, XTAL(53'693'175) ) + MCFG_VIDEO_SET_SCREEN("screen") + + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -587,6 +591,9 @@ MACHINE_CONFIG_START(psx1_state::pse) /* video hardware */ /* TODO: visible area and refresh rate */ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561Q, 0x100000, XTAL(53'693'175) ) + MCFG_VIDEO_SET_SCREEN("screen") + + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/taitogn.cpp b/src/mame/drivers/taitogn.cpp index bc3cd545d24..ac8ce300943 100644 --- a/src/mame/drivers/taitogn.cpp +++ b/src/mame/drivers/taitogn.cpp @@ -344,6 +344,7 @@ Type 3 (PCMCIA Compact Flash Adaptor + Compact Flash card, sealed together with #include "machine/znmcu.h" #include "sound/spu.h" #include "video/psx.h" +#include "screen.h" #include "speaker.h" #include @@ -735,6 +736,9 @@ MACHINE_CONFIG_START(taitogn_state::coh3002t) /* video hardware */ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8654Q, 0x200000, XTAL(53'693'175) ) + MCFG_VIDEO_SET_SCREEN("screen") + + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/twinkle.cpp b/src/mame/drivers/twinkle.cpp index cea9840352d..042f08abef0 100644 --- a/src/mame/drivers/twinkle.cpp +++ b/src/mame/drivers/twinkle.cpp @@ -245,6 +245,7 @@ Notes: #include "sound/spu.h" #include "sound/cdda.h" #include "sound/rf5c400.h" +#include "screen.h" #include "speaker.h" #include "bmiidx.lh" @@ -1122,6 +1123,9 @@ MACHINE_CONFIG_START(twinkle_state::twinkle) /* video hardware */ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561Q, 0x200000, XTAL(53'693'175) ) + MCFG_VIDEO_SET_SCREEN("screen") + + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "speakerleft").front_left(); diff --git a/src/mame/drivers/zn.cpp b/src/mame/drivers/zn.cpp index 42fa318be5a..b6eb60e5b30 100644 --- a/src/mame/drivers/zn.cpp +++ b/src/mame/drivers/zn.cpp @@ -52,7 +52,7 @@ public: zn_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_gpu(*this, "gpu"), - m_gpu_screen(*this, "gpu:screen"), + m_gpu_screen(*this, "screen"), m_sio0(*this, "maincpu:sio0"), m_cat702(*this, "cat702_%u", 1), m_znmcu(*this, "znmcu"), @@ -172,7 +172,7 @@ private: INTERRUPT_GEN_MEMBER(qsound_interrupt); void atpsx_dma_read(uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size ); void atpsx_dma_write(uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size ); - void jdredd_vblank(screen_device &screen, bool vblank_state); + DECLARE_WRITE_LINE_MEMBER(jdredd_vblank); void atlus_snd_map(address_map &map); void bam2_map(address_map &map); @@ -407,6 +407,9 @@ MACHINE_CONFIG_START(zn_state::zn1_1mb_vram) /* video hardware */ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561Q, 0x100000, XTAL(53'693'175) ) + MCFG_VIDEO_SET_SCREEN(m_gpu_screen) + + SCREEN(config, m_gpu_screen, SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -424,6 +427,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(zn_state::zn1_2mb_vram) zn1_1mb_vram(config); MCFG_PSXGPU_REPLACE( "maincpu", "gpu", CXD8561Q, 0x200000, XTAL(53'693'175) ) + MCFG_VIDEO_SET_SCREEN(m_gpu_screen) MACHINE_CONFIG_END MACHINE_CONFIG_START(zn_state::zn2) @@ -453,6 +457,9 @@ MACHINE_CONFIG_START(zn_state::zn2) /* video hardware */ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8654Q, 0x200000, XTAL(53'693'175) ) + MCFG_VIDEO_SET_SCREEN(m_gpu_screen) + + SCREEN(config, m_gpu_screen, SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -2023,12 +2030,12 @@ CUSTOM_INPUT_MEMBER(zn_state::jdredd_gun_mux_read) return m_jdredd_gun_mux; } -void zn_state::jdredd_vblank(screen_device &screen, bool vblank_state) +WRITE_LINE_MEMBER(zn_state::jdredd_vblank) { int x; int y; - if( vblank_state ) + if (state) { m_jdredd_gun_mux = !m_jdredd_gun_mux; @@ -2214,8 +2221,7 @@ MACHINE_CONFIG_START(zn_state::jdredd) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(jdredd_map) - MCFG_DEVICE_MODIFY("gpu") - MCFG_PSXGPU_VBLANK_CALLBACK(vblank_state_delegate(&zn_state::jdredd_vblank, this)) + m_gpu_screen->screen_vblank().set(FUNC(zn_state::jdredd_vblank)); ata_interface_device &ata(ATA_INTERFACE(config, "ata").options(ata_devices, "hdd", nullptr, true)); ata.irq_handler().set("maincpu:irq", FUNC(psxirq_device::intin10)); -- cgit v1.2.3