mirror of
https://github.com/holub/mame
synced 2025-06-05 20:33:45 +03:00
video/psx.cpp: Eliminate register_postload; separate out screen device (nw)
This commit is contained in:
parent
a24d2275d3
commit
1f7ff8fd9a
@ -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));
|
||||
}
|
||||
|
@ -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; }
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user