mirror of
https://github.com/holub/mame
synced 2025-06-07 21:33:45 +03:00
segac2: decouple driver class from md_base_state
This commit is contained in:
parent
f3b2d781de
commit
f99b3f756e
@ -70,24 +70,24 @@
|
|||||||
Razoola & Antiriad .. for helping teach me some 68k ASM needed to work out just why
|
Razoola & Antiriad .. for helping teach me some 68k ASM needed to work out just why
|
||||||
the games were crashing :)
|
the games were crashing :)
|
||||||
Sega for producing some Fantastic Games...
|
Sega for producing some Fantastic Games...
|
||||||
The Japanese magazine that proudly previewed OOParts as "FARTS"
|
The Japanese magazine that proudly previewed OOPArts as "FARTS"
|
||||||
and anyone else who knows they've contributed :)
|
and anyone else who knows they've contributed :)
|
||||||
|
|
||||||
***********************************************************************************************/
|
***********************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "includes/megadriv.h"
|
|
||||||
#include "includes/segaipt.h"
|
#include "includes/segaipt.h"
|
||||||
|
|
||||||
#include "cpu/m68000/m68000.h"
|
#include "cpu/m68000/m68000.h"
|
||||||
#include "machine/nvram.h"
|
#include "machine/nvram.h"
|
||||||
#include "machine/315_5296.h"
|
#include "machine/315_5296.h"
|
||||||
#include "sound/okim6295.h"
|
|
||||||
#include "sound/sn76496.h"
|
#include "sound/sn76496.h"
|
||||||
#include "sound/upd7759.h"
|
#include "sound/upd7759.h"
|
||||||
#include "sound/ymopn.h"
|
#include "sound/ymopn.h"
|
||||||
|
#include "video/315_5313.h"
|
||||||
|
|
||||||
#include "emupal.h"
|
#include "emupal.h"
|
||||||
|
#include "screen.h"
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
|
||||||
|
|
||||||
@ -103,20 +103,21 @@ namespace {
|
|||||||
|
|
||||||
typedef device_delegate<int (int in)> segac2_prot_delegate;
|
typedef device_delegate<int (int in)> segac2_prot_delegate;
|
||||||
|
|
||||||
// does this need to inherit from md_base? really we only need the VDP and some basics like the maincpu
|
class segac2_state : public driver_device
|
||||||
class segac2_state : public md_base_state
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
segac2_state(const machine_config &mconfig, device_type type, const char *tag)
|
segac2_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: md_base_state(mconfig, type, tag)
|
: driver_device(mconfig, type, tag)
|
||||||
|
, m_maincpu(*this, "maincpu")
|
||||||
, m_paletteram(*this, "paletteram")
|
, m_paletteram(*this, "paletteram")
|
||||||
, m_upd_region(*this, "upd")
|
, m_vdp(*this, "gen_vdp")
|
||||||
, m_prot_func(*this)
|
|
||||||
, m_sound_banks(0)
|
|
||||||
, m_upd7759(*this, "upd")
|
|
||||||
, m_screen(*this, "screen")
|
, m_screen(*this, "screen")
|
||||||
|
, m_upd_region(*this, "upd")
|
||||||
|
, m_upd7759(*this, "upd")
|
||||||
|
, m_ymsnd(*this, "ymsnd")
|
||||||
, m_palette(*this, "palette")
|
, m_palette(*this, "palette")
|
||||||
, m_io(*this, "io")
|
, m_io(*this, "io")
|
||||||
|
, m_prot_func(*this)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void segac2(machine_config &config);
|
void segac2(machine_config &config);
|
||||||
@ -152,8 +153,15 @@ protected:
|
|||||||
|
|
||||||
int m_segac2_enable_display;
|
int m_segac2_enable_display;
|
||||||
|
|
||||||
|
required_device<m68000_base_device> m_maincpu;
|
||||||
required_shared_ptr<uint16_t> m_paletteram;
|
required_shared_ptr<uint16_t> m_paletteram;
|
||||||
|
required_device<sega315_5313_device> m_vdp;
|
||||||
|
required_device<screen_device> m_screen;
|
||||||
optional_memory_region m_upd_region;
|
optional_memory_region m_upd_region;
|
||||||
|
optional_device<upd7759_device> m_upd7759;
|
||||||
|
required_device<ym3438_device> m_ymsnd;
|
||||||
|
required_device<palette_device> m_palette;
|
||||||
|
required_device<sega_315_5296_device> m_io;
|
||||||
|
|
||||||
/* protection-related tracking */
|
/* protection-related tracking */
|
||||||
segac2_prot_delegate m_prot_func; /* emulation of protection chip */
|
segac2_prot_delegate m_prot_func; /* emulation of protection chip */
|
||||||
@ -169,7 +177,7 @@ protected:
|
|||||||
/* sound-related variables */
|
/* sound-related variables */
|
||||||
uint8_t m_sound_banks; /* number of sound banks */
|
uint8_t m_sound_banks; /* number of sound banks */
|
||||||
|
|
||||||
void segac2_common_init(segac2_prot_delegate prot_func);
|
void set_prot_func(segac2_prot_delegate prot_func) { m_prot_func = prot_func; }
|
||||||
|
|
||||||
uint32_t screen_update_segac2_new(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
uint32_t screen_update_segac2_new(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||||
int m_segac2_bg_pal_lookup[4];
|
int m_segac2_bg_pal_lookup[4];
|
||||||
@ -179,12 +187,13 @@ protected:
|
|||||||
DECLARE_WRITE_LINE_MEMBER(vdp_sndirqline_callback_c2);
|
DECLARE_WRITE_LINE_MEMBER(vdp_sndirqline_callback_c2);
|
||||||
DECLARE_WRITE_LINE_MEMBER(vdp_lv6irqline_callback_c2);
|
DECLARE_WRITE_LINE_MEMBER(vdp_lv6irqline_callback_c2);
|
||||||
DECLARE_WRITE_LINE_MEMBER(vdp_lv4irqline_callback_c2);
|
DECLARE_WRITE_LINE_MEMBER(vdp_lv4irqline_callback_c2);
|
||||||
|
IRQ_CALLBACK_MEMBER(int_callback);
|
||||||
|
|
||||||
uint8_t io_portc_r();
|
uint8_t io_portc_r();
|
||||||
void io_portd_w(uint8_t data);
|
void io_portd_w(uint8_t data);
|
||||||
void io_porth_w(uint8_t data);
|
void io_porth_w(uint8_t data);
|
||||||
|
|
||||||
void segac2_upd7759_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
|
void segac2_upd7759_w(uint8_t data);
|
||||||
uint16_t palette_r(offs_t offset);
|
uint16_t palette_r(offs_t offset);
|
||||||
void palette_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
|
void palette_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
|
||||||
void control_w(uint8_t data);
|
void control_w(uint8_t data);
|
||||||
@ -193,10 +202,6 @@ protected:
|
|||||||
void counter_timer_w(uint8_t data);
|
void counter_timer_w(uint8_t data);
|
||||||
uint16_t ichirjbl_prot_r();
|
uint16_t ichirjbl_prot_r();
|
||||||
DECLARE_WRITE_LINE_MEMBER(segac2_irq2_interrupt);
|
DECLARE_WRITE_LINE_MEMBER(segac2_irq2_interrupt);
|
||||||
optional_device<upd7759_device> m_upd7759;
|
|
||||||
required_device<screen_device> m_screen;
|
|
||||||
required_device<palette_device> m_palette;
|
|
||||||
required_device<sega_315_5296_device> m_io;
|
|
||||||
|
|
||||||
int prot_func_dummy(int in);
|
int prot_func_dummy(int in);
|
||||||
int prot_func_columns(int in);
|
int prot_func_columns(int in);
|
||||||
@ -217,7 +222,8 @@ protected:
|
|||||||
int prot_func_puyopuy2(int in);
|
int prot_func_puyopuy2(int in);
|
||||||
int prot_func_zunkyou(int in);
|
int prot_func_zunkyou(int in);
|
||||||
|
|
||||||
void main_map(address_map &map);
|
void segac_map(address_map &map);
|
||||||
|
void segac2_map(address_map &map);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -265,12 +271,7 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Machine init
|
Machine start/reset
|
||||||
*******************************************************************************
|
|
||||||
|
|
||||||
This is called at init time, when it's safe to create a timer. We use
|
|
||||||
it to prime the scanline interrupt timer.
|
|
||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
void segac2_state::machine_start()
|
void segac2_state::machine_start()
|
||||||
@ -278,14 +279,23 @@ void segac2_state::machine_start()
|
|||||||
save_item(NAME(m_prot_write_buf));
|
save_item(NAME(m_prot_write_buf));
|
||||||
save_item(NAME(m_prot_read_buf));
|
save_item(NAME(m_prot_read_buf));
|
||||||
|
|
||||||
|
// determine how many sound banks
|
||||||
|
if (m_upd_region != nullptr)
|
||||||
|
m_sound_banks = m_upd_region->bytes() / 0x20000;
|
||||||
|
else
|
||||||
|
m_sound_banks = 0;
|
||||||
|
|
||||||
|
// init the VDP
|
||||||
|
m_vdp->set_use_cram(0); // C2 uses its own palette ram
|
||||||
|
m_vdp->set_vdp_pal(false);
|
||||||
|
m_vdp->set_framerate(60);
|
||||||
|
m_vdp->set_total_scanlines(262);
|
||||||
m_vdp->stop_timers();
|
m_vdp->stop_timers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void segac2_state::machine_reset()
|
void segac2_state::machine_reset()
|
||||||
{
|
{
|
||||||
// megadriv_scanline_timer = machine().device<timer_device>("md_scan_timer");
|
|
||||||
// megadriv_scanline_timer->adjust(attotime::zero);
|
|
||||||
m_segac2_bg_pal_lookup[0] = 0x00;
|
m_segac2_bg_pal_lookup[0] = 0x00;
|
||||||
m_segac2_bg_pal_lookup[1] = 0x10;
|
m_segac2_bg_pal_lookup[1] = 0x10;
|
||||||
m_segac2_bg_pal_lookup[2] = 0x20;
|
m_segac2_bg_pal_lookup[2] = 0x20;
|
||||||
@ -298,13 +308,6 @@ void segac2_state::machine_reset()
|
|||||||
|
|
||||||
m_vdp->device_reset_old();
|
m_vdp->device_reset_old();
|
||||||
|
|
||||||
/* determine how many sound banks */
|
|
||||||
m_sound_banks = 0;
|
|
||||||
if (m_upd_region != nullptr)
|
|
||||||
{
|
|
||||||
m_sound_banks = m_upd_region->bytes() / 0x20000;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* reset the protection */
|
/* reset the protection */
|
||||||
m_prot_write_buf = 0;
|
m_prot_write_buf = 0;
|
||||||
m_prot_read_buf = 0;
|
m_prot_read_buf = 0;
|
||||||
@ -332,19 +335,11 @@ void segac2_state::machine_reset()
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/* handle writes to the UPD7759 */
|
/* handle writes to the UPD7759 */
|
||||||
void segac2_state::segac2_upd7759_w(offs_t offset, uint16_t data, uint16_t mem_mask)
|
void segac2_state::segac2_upd7759_w(uint8_t data)
|
||||||
{
|
{
|
||||||
/* make sure we have a UPD chip */
|
m_upd7759->port_w(data);
|
||||||
if (m_upd7759 == nullptr)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* only works if we're accessing the low byte */
|
|
||||||
if (ACCESSING_BITS_0_7)
|
|
||||||
{
|
|
||||||
m_upd7759->port_w(data & 0xff);
|
|
||||||
m_upd7759->start_w(0);
|
m_upd7759->start_w(0);
|
||||||
m_upd7759->start_w(1);
|
m_upd7759->start_w(1);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -676,7 +671,7 @@ void pclub_state::print_club_camera_w(uint16_t data)
|
|||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
void segac2_state::main_map(address_map &map)
|
void segac2_state::segac_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x000000, 0x1fffff).rom();
|
map(0x000000, 0x1fffff).rom();
|
||||||
map(0x800001, 0x800001).mirror(0x13fdfe).rw(FUNC(segac2_state::prot_r), FUNC(segac2_state::prot_w));
|
map(0x800001, 0x800001).mirror(0x13fdfe).rw(FUNC(segac2_state::prot_r), FUNC(segac2_state::prot_w));
|
||||||
@ -689,6 +684,12 @@ void segac2_state::main_map(address_map &map)
|
|||||||
map(0xe00000, 0xe0ffff).mirror(0x1f0000).ram().share("nvram");
|
map(0xe00000, 0xe0ffff).mirror(0x1f0000).ram().share("nvram");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void segac2_state::segac2_map(address_map &map)
|
||||||
|
{
|
||||||
|
segac_map(map);
|
||||||
|
map(0x880000, 0x880001).mirror(0x13fefe).w(FUNC(segac2_state::segac2_upd7759_w)).umask16(0x00ff);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Input Ports
|
Input Ports
|
||||||
@ -1647,30 +1648,14 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Sound interfaces
|
Screen update
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER(segac2_state::segac2_irq2_interrupt)
|
|
||||||
{
|
|
||||||
//printf("sound irq %d\n", state);
|
|
||||||
m_maincpu->set_input_line(2, state ? ASSERT_LINE : CLEAR_LINE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
Machine Drivers
|
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
General Overview
|
C2 doesn't use the internal VDP CRAM, instead it uses the digital
|
||||||
M68000 @ 10MHz (Main Processor)
|
output of the chip and applies it's own external colour circuity.
|
||||||
YM3438 (Fm Sound)
|
|
||||||
SN76489 (PSG, Noise, Part of the VDP)
|
|
||||||
UPD7759 (Sample Playback, C-2 Only)
|
|
||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// C2 doesn't use the internal VDP CRAM, instead it uses the digital output of the chip
|
|
||||||
// and applies it's own external colour circuity
|
|
||||||
uint32_t segac2_state::screen_update_segac2_new(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
uint32_t segac2_state::screen_update_segac2_new(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||||
{
|
{
|
||||||
const pen_t *paldata = m_palette->pens();
|
const pen_t *paldata = m_palette->pens();
|
||||||
@ -1728,6 +1713,16 @@ uint32_t segac2_state::screen_update_segac2_new(screen_device &screen, bitmap_rg
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
Interrupt handling
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
WRITE_LINE_MEMBER(segac2_state::segac2_irq2_interrupt)
|
||||||
|
{
|
||||||
|
//printf("sound irq %d\n", state);
|
||||||
|
m_maincpu->set_input_line(2, state ? ASSERT_LINE : CLEAR_LINE);
|
||||||
|
}
|
||||||
|
|
||||||
// the main interrupt on C2 comes from the vdp line used to drive the z80 interrupt on a regular genesis(!)
|
// the main interrupt on C2 comes from the vdp line used to drive the z80 interrupt on a regular genesis(!)
|
||||||
WRITE_LINE_MEMBER(segac2_state::vdp_sndirqline_callback_c2)
|
WRITE_LINE_MEMBER(segac2_state::vdp_sndirqline_callback_c2)
|
||||||
{
|
{
|
||||||
@ -1750,18 +1745,39 @@ WRITE_LINE_MEMBER(segac2_state::vdp_lv4irqline_callback_c2)
|
|||||||
m_maincpu->set_input_line(4, CLEAR_LINE);
|
m_maincpu->set_input_line(4, CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Callback when the 68k takes an IRQ */
|
||||||
|
IRQ_CALLBACK_MEMBER(segac2_state::int_callback)
|
||||||
|
{
|
||||||
|
if (irqline == 4)
|
||||||
|
m_vdp->vdp_clear_irq4_pending();
|
||||||
|
|
||||||
|
return (0x60 + irqline * 4) / 4; // vector address
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
Machine Drivers
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
|
General Overview
|
||||||
|
M68000 @ 10MHz (Main Processor)
|
||||||
|
YM3438 (Fm Sound)
|
||||||
|
SN76489 (PSG, Noise, Part of the VDP)
|
||||||
|
UPD7759 (Sample Playback, C-2 Only)
|
||||||
|
|
||||||
sound output balance (tfrceac)
|
sound output balance (tfrceac)
|
||||||
reference 1: https://youtu.be/AOmeWp9qe5E
|
reference 1: https://youtu.be/AOmeWp9qe5E
|
||||||
reference 2: https://youtu.be/Tq8VkJYmij8
|
reference 2: https://youtu.be/Tq8VkJYmij8
|
||||||
reference 3: https://youtu.be/VId_HWdNuyA
|
reference 3: https://youtu.be/VId_HWdNuyA
|
||||||
*/
|
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
void segac2_state::segac(machine_config &config)
|
void segac2_state::segac(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
M68000(config, m_maincpu, XL2_CLOCK/6);
|
M68000(config, m_maincpu, XL2_CLOCK/6);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &segac2_state::main_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &segac2_state::segac_map);
|
||||||
m_maincpu->set_irq_acknowledge_callback(FUNC(md_base_state::genesis_int_callback));
|
m_maincpu->set_irq_acknowledge_callback(FUNC(segac2_state::int_callback));
|
||||||
|
|
||||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); // borencha requires 0xff fill or there is no sound (it lacks some of the init code of the borench set)
|
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); // borencha requires 0xff fill or there is no sound (it lacks some of the init code of the borench set)
|
||||||
|
|
||||||
@ -1794,16 +1810,15 @@ void segac2_state::segac(machine_config &config)
|
|||||||
m_screen->set_size(512, 262);
|
m_screen->set_size(512, 262);
|
||||||
m_screen->set_visarea(0, 32*8-1, 0, 28*8-1);
|
m_screen->set_visarea(0, 32*8-1, 0, 28*8-1);
|
||||||
m_screen->set_screen_update(FUNC(segac2_state::screen_update_segac2_new));
|
m_screen->set_screen_update(FUNC(segac2_state::screen_update_segac2_new));
|
||||||
m_screen->screen_vblank().set(FUNC(segac2_state::screen_vblank_megadriv));
|
|
||||||
|
|
||||||
PALETTE(config, m_palette).set_entries(2048*3);
|
PALETTE(config, m_palette).set_entries(2048*3);
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
SPEAKER(config, "mono").front_center();
|
SPEAKER(config, "mono").front_center();
|
||||||
|
|
||||||
ym3438_device &ymsnd(YM3438(config, "ymsnd", XL2_CLOCK/7));
|
YM3438(config, m_ymsnd, XL2_CLOCK/7);
|
||||||
ymsnd.irq_handler().set(FUNC(segac2_state::segac2_irq2_interrupt));
|
m_ymsnd->irq_handler().set(FUNC(segac2_state::segac2_irq2_interrupt));
|
||||||
ymsnd.add_route(0, "mono", 0.50);
|
m_ymsnd->add_route(0, "mono", 0.50);
|
||||||
/* right channel not connected */
|
/* right channel not connected */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1812,6 +1827,7 @@ void segac2_state::segac2(machine_config &config)
|
|||||||
segac(config);
|
segac(config);
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
|
m_maincpu->set_addrmap(AS_PROGRAM, &segac2_state::segac2_map);
|
||||||
subdevice<sega_315_5296_device>("io")->out_cnt1_callback().set(m_upd7759, FUNC(upd7759_device::reset_w));
|
subdevice<sega_315_5296_device>("io")->out_cnt1_callback().set(m_upd7759, FUNC(upd7759_device::reset_w));
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
@ -2435,15 +2451,6 @@ it should be, otherwise I don't see how the formula could be computed.
|
|||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
void segac2_state::segac2_common_init(segac2_prot_delegate prot_func)
|
|
||||||
{
|
|
||||||
init_megadriv_c2();
|
|
||||||
m_prot_func = prot_func;
|
|
||||||
|
|
||||||
if (m_upd7759 != nullptr)
|
|
||||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x880000, 0x880001, 0, 0x13fefe, 0, write16s_delegate(*this, FUNC(segac2_state::segac2_upd7759_w)));
|
|
||||||
}
|
|
||||||
|
|
||||||
int segac2_state::prot_func_dummy(int in)
|
int segac2_state::prot_func_dummy(int in)
|
||||||
{
|
{
|
||||||
return 0x0;
|
return 0x0;
|
||||||
@ -2671,25 +2678,24 @@ int pclub_state::prot_func_pclubjv5(int in)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void segac2_state::init_noprot()
|
void segac2_state::init_noprot()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_dummy)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_dummy)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_columns()
|
void segac2_state::init_columns()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_columns)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_columns)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_columns2()
|
void segac2_state::init_columns2()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_columns2)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_columns2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_tfrceac()
|
void segac2_state::init_tfrceac()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_tfrceac)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_tfrceac)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_tfrceacb()
|
void segac2_state::init_tfrceacb()
|
||||||
@ -2702,62 +2708,62 @@ void segac2_state::init_tfrceacb()
|
|||||||
|
|
||||||
void segac2_state::init_borench()
|
void segac2_state::init_borench()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_borench)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_borench)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_twinsqua()
|
void segac2_state::init_twinsqua()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_twinsqua)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_twinsqua)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_ribbit()
|
void segac2_state::init_ribbit()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_ribbit)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_ribbit)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_puyo()
|
void segac2_state::init_puyo()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_puyo)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_puyo)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_tantr()
|
void segac2_state::init_tantr()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_tantr)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_tantr)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_tantrkor()
|
void segac2_state::init_tantrkor()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_tantrkor)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_tantrkor)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_potopoto()
|
void segac2_state::init_potopoto()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_potopoto)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_potopoto)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_stkclmns()
|
void segac2_state::init_stkclmns()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_stkclmns)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_stkclmns)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_stkclmnj()
|
void segac2_state::init_stkclmnj()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_stkclmnj)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_stkclmnj)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_ichir()
|
void segac2_state::init_ichir()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_ichir)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_ichir)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_ichirk()
|
void segac2_state::init_ichirk()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_ichirk)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_ichirk)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_ichirj()
|
void segac2_state::init_ichirj()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_ichirj)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_ichirj)));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t segac2_state::ichirjbl_prot_r()
|
uint16_t segac2_state::ichirjbl_prot_r()
|
||||||
@ -2774,12 +2780,12 @@ void segac2_state::init_ichirjbl()
|
|||||||
|
|
||||||
void segac2_state::init_puyopuy2()
|
void segac2_state::init_puyopuy2()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_puyopuy2)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_puyopuy2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void segac2_state::init_zunkyou()
|
void segac2_state::init_zunkyou()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_zunkyou)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(segac2_state::prot_func_zunkyou)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void pclub_state::init_pclub()
|
void pclub_state::init_pclub()
|
||||||
@ -2791,25 +2797,25 @@ void pclub_state::init_pclub()
|
|||||||
|
|
||||||
void pclub_state::init_pclubj()
|
void pclub_state::init_pclubj()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(pclub_state::prot_func_pclub)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(pclub_state::prot_func_pclub)));
|
||||||
init_pclub();
|
init_pclub();
|
||||||
}
|
}
|
||||||
|
|
||||||
void pclub_state::init_pclubjv2()
|
void pclub_state::init_pclubjv2()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(pclub_state::prot_func_pclubjv2)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(pclub_state::prot_func_pclubjv2)));
|
||||||
init_pclub();
|
init_pclub();
|
||||||
}
|
}
|
||||||
|
|
||||||
void pclub_state::init_pclubjv4()
|
void pclub_state::init_pclubjv4()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(pclub_state::prot_func_pclubjv4)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(pclub_state::prot_func_pclubjv4)));
|
||||||
init_pclub();
|
init_pclub();
|
||||||
}
|
}
|
||||||
|
|
||||||
void pclub_state::init_pclubjv5()
|
void pclub_state::init_pclubjv5()
|
||||||
{
|
{
|
||||||
segac2_common_init(segac2_prot_delegate(*this, FUNC(pclub_state::prot_func_pclubjv5)));
|
set_prot_func(segac2_prot_delegate(*this, FUNC(pclub_state::prot_func_pclubjv5)));
|
||||||
init_pclub();
|
init_pclub();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,7 +73,6 @@ struct genesis_z80_vars
|
|||||||
genesis_z80_vars m_genz80;
|
genesis_z80_vars m_genz80;
|
||||||
int m_version_hi_nibble;
|
int m_version_hi_nibble;
|
||||||
|
|
||||||
void init_megadriv_c2();
|
|
||||||
void init_megadrie();
|
void init_megadrie();
|
||||||
void init_megadriv();
|
void init_megadriv();
|
||||||
void init_megadrij();
|
void init_megadrij();
|
||||||
|
@ -1033,20 +1033,6 @@ void md_base_state::megadriv_init_common()
|
|||||||
m_megadrive_io_write_data_port_ptr = write16sm_delegate(*this, FUNC(md_base_state::megadrive_io_write_data_port_3button));
|
m_megadrive_io_write_data_port_ptr = write16sm_delegate(*this, FUNC(md_base_state::megadrive_io_write_data_port_3button));
|
||||||
}
|
}
|
||||||
|
|
||||||
void md_base_state::init_megadriv_c2()
|
|
||||||
{
|
|
||||||
megadriv_init_common();
|
|
||||||
|
|
||||||
m_vdp->set_use_cram(0); // C2 uses its own palette ram
|
|
||||||
m_vdp->set_vdp_pal(false);
|
|
||||||
m_vdp->set_framerate(60);
|
|
||||||
m_vdp->set_total_scanlines(262);
|
|
||||||
|
|
||||||
m_version_hi_nibble = 0x20; // JPN NTSC no-SCD
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void md_base_state::init_megadriv()
|
void md_base_state::init_megadriv()
|
||||||
{
|
{
|
||||||
megadriv_init_common();
|
megadriv_init_common();
|
||||||
|
Loading…
Reference in New Issue
Block a user