video/psx.cpp: Eliminate register_postload; separate out screen device (nw)

This commit is contained in:
AJR 2018-09-11 17:06:03 -04:00
parent a24d2275d3
commit 1f7ff8fd9a
12 changed files with 91 additions and 31 deletions

View File

@ -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));
}

View File

@ -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 <class Object> devcb_base &set_vblank_handler(Object &&cb) { return m_vblank_handler.set_callback(std::forward<Object>(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; }

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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<ram_device>("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)

View File

@ -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)

View File

@ -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();

View File

@ -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 <algorithm>
@ -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();

View File

@ -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();

View File

@ -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));