taito_z: add 3d scope view for enforceja

This commit is contained in:
hap 2021-04-13 11:44:53 +02:00
parent d32e1606d2
commit 2347348c8c
5 changed files with 205 additions and 36 deletions

View File

@ -1121,8 +1121,6 @@ True to original?
Some layer offsets are out a little.
Road layer has wrong colors--regression?
Battle Shark
------------
@ -1279,9 +1277,10 @@ DIP switches are not verified
#include "sound/ym2610.h"
#include "speaker.h"
#include "chasehq.lh"
#include "contcirc.lh"
#include "dblaxle.lh"
#include "enforce.lh"
#include "enforceja.lh"
void taitoz_state::parse_cpu_control()
@ -1678,7 +1677,7 @@ void taitoz_state::enforce_map(address_map &map)
map(0x000000, 0x03ffff).rom();
map(0x100000, 0x103fff).ram();
map(0x104000, 0x107fff).ram().share("share1");
map(0x200000, 0x200001).w(FUNC(taitoz_state::cpua_ctrl_w)); // works without?
map(0x200001, 0x200001).w(FUNC(taitoz_state::contcirc_out_w));
map(0x300000, 0x3006ff).ram().share("spriteram");
map(0x400000, 0x401fff).rw(m_tc0150rod, FUNC(tc0150rod_device::word_r), FUNC(tc0150rod_device::word_w)); /* "root ram" ??? */
map(0x500000, 0x500007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_rbswap_word_w)); /* palette */
@ -3145,6 +3144,14 @@ void taitoz_state::machine_start()
/* these are specific to various games: we ought to split the inits */
save_item(NAME(m_sci_int6));
save_item(NAME(m_ioc220_port));
// 3d scope on contcirc/enforceja
m_shutter_out.resolve();
m_shutter_toggle = 0;
m_shutter_control = 0;
save_item(NAME(m_shutter_toggle));
save_item(NAME(m_shutter_control));
}
MACHINE_START_MEMBER(taitoz_state,chasehq)
@ -3154,18 +3161,6 @@ MACHINE_START_MEMBER(taitoz_state,chasehq)
m_lamps.resolve();
}
MACHINE_START_MEMBER(taitoz_state,contcirc)
{
machine_start();
m_shutter_out.resolve();
m_shutter_toggle = 0;
m_shutter_control = 0;
save_item(NAME(m_shutter_toggle));
save_item(NAME(m_shutter_control));
}
void taitoz_state::machine_reset()
{
m_cpua_ctrl = 0xff;
@ -3206,11 +3201,10 @@ void taitoz_state::contcirc(machine_config &config)
screen_config(config, 24, 248);
m_screen->set_screen_update(FUNC(taitoz_state::screen_update_contcirc));
m_screen->set_palette(m_tc0110pcr);
m_screen->screen_vblank().set(FUNC(taitoz_state::contcirc_vblank));
m_screen->screen_vblank().set(FUNC(taitoz_state::scope_vblank));
GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_taitoz);
MCFG_MACHINE_START_OVERRIDE(taitoz_state,contcirc)
MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz)
TC0100SCN(config, m_tc0100scn, 0);
@ -3334,6 +3328,7 @@ void taitoz_state::enforce(machine_config &config)
screen_config(config, 24, 248);
m_screen->set_screen_update(FUNC(taitoz_state::screen_update_contcirc));
m_screen->set_palette(m_tc0110pcr);
m_screen->screen_vblank().set(FUNC(taitoz_state::scope_vblank));
GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_taitoz);
@ -5555,27 +5550,27 @@ void taitoz_state::init_bshark()
GAMEL(1987, contcirc, 0, contcirc, contcirc, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Continental Circus (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1987, contcircu, contcirc, contcirc, contcrcu, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Continental Circus (US set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1987, contcircua, contcirc, contcirc, contcrcj, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Continental Circus (US set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1987, contcircj , contcirc, contcirc, contcrcj, taitoz_state, empty_init, ROT0, "Taito Corporation", "Continental Circus (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1987, contcircj, contcirc, contcirc, contcrcj, taitoz_state, empty_init, ROT0, "Taito Corporation", "Continental Circus (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1988, chasehq, 0, chasehq, chasehq, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Chase H.Q. (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1988, chasehqj, chasehq, chasehq, chasehqj, taitoz_state, empty_init, ROT0, "Taito Corporation", "Chase H.Q. (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1988, chasehqju, chasehq, chasehq, chasehq, taitoz_state, empty_init, ROT0, "Taito Corporation", "Chase H.Q. (Japan, upright?)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc ) // same code rev as Chase H.Q. (World)
GAMEL(1988, chasehqu, chasehq, chasehq, chasehq, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Chase H.Q. (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1988, chasehq, 0, chasehq, chasehq, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Chase H.Q. (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq )
GAMEL(1988, chasehqj, chasehq, chasehq, chasehqj, taitoz_state, empty_init, ROT0, "Taito Corporation", "Chase H.Q. (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq )
GAMEL(1988, chasehqju, chasehq, chasehq, chasehq, taitoz_state, empty_init, ROT0, "Taito Corporation", "Chase H.Q. (Japan, upright?)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) // same code rev as Chase H.Q. (World)
GAMEL(1988, chasehqu, chasehq, chasehq, chasehq, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Chase H.Q. (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq )
GAME( 1988, enforce, 0, enforce, enforce, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Enforce (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1988, enforcej, enforce, enforce, enforcej, taitoz_state, empty_init, ROT0, "Taito Corporation", "Enforce (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAMEL( 1988, enforceja, enforce, enforce, enforceja, taitoz_state, empty_init, ROT0, "Taito Corporation", "Enforce (Japan, Analog Controls)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_enforce )
GAMEL(1988, enforceja, enforce, enforce, enforceja, taitoz_state, empty_init, ROT0, "Taito Corporation", "Enforce (Japan, Analog Controls)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_enforceja )
GAME( 1989, bshark, 0, bshark, bshark, taitoz_state, init_bshark, ORIENTATION_FLIP_X, "Taito Corporation Japan", "Battle Shark (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1989, bsharku, bshark, bshark, bsharku, taitoz_state, init_bshark, ORIENTATION_FLIP_X, "Taito America Corporation", "Battle Shark (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1989, bsharkj, bshark, bshark, bsharkj, taitoz_state, init_bshark, ORIENTATION_FLIP_X, "Taito Corporation", "Battle Shark (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1989, bsharkjjs, bshark, bsharkjjs, bsharkjjs, taitoz_state, init_bshark, ORIENTATION_FLIP_X, "Taito Corporation", "Battle Shark (Japan, Joystick)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAMEL(1989, sci, 0, sci, sci, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Special Criminal Investigation (World set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1989, scia, sci, sci, sci, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Special Criminal Investigation (World set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1989, scij, sci, sci, scij, taitoz_state, empty_init, ROT0, "Taito Corporation", "Special Criminal Investigation (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1989, sciu, sci, sci, sciu, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Special Criminal Investigation (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1991, scin, sci, sci, sci, taitoz_state, empty_init, ROT0, "hack (Negro Torino)", "Super Special Criminal Investigation (Negro Torino hack)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc )
GAMEL(1989, sci, 0, sci, sci, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Special Criminal Investigation (World set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq )
GAMEL(1989, scia, sci, sci, sci, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Special Criminal Investigation (World set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq )
GAMEL(1989, scij, sci, sci, scij, taitoz_state, empty_init, ROT0, "Taito Corporation", "Special Criminal Investigation (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq )
GAMEL(1989, sciu, sci, sci, sciu, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Special Criminal Investigation (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq )
GAMEL(1991, scin, sci, sci, sci, taitoz_state, empty_init, ROT0, "hack (Negro Torino)", "Super Special Criminal Investigation (Negro Torino hack)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq )
GAME( 1989, nightstr, 0, nightstr, nightstr, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Night Striker (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1989, nightstrj, nightstr, nightstr, nghtstrj, taitoz_state, empty_init, ROT0, "Taito Corporation", "Night Striker (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )

View File

@ -148,10 +148,9 @@ private:
u16 sci_spriteframe_r();
void sci_spriteframe_w(u16 data);
void contcirc_out_w(u8 data);
DECLARE_WRITE_LINE_MEMBER(contcirc_vblank);
DECLARE_WRITE_LINE_MEMBER(scope_vblank);
DECLARE_VIDEO_START(taitoz);
DECLARE_MACHINE_START(chasehq);
DECLARE_MACHINE_START(contcirc);
u32 screen_update_contcirc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
u32 screen_update_chasehq(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
u32 screen_update_bshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);

View File

@ -55,7 +55,7 @@ license:CC0
<screen index="0">
<bounds x="0" y="0" width="640" height="480" />
</screen>
<element ref="shifter" inputtag="IN2" inputmask="0x01">
<element ref="shifter" inputtag="IN1" inputmask="0x10">
<bounds x="606" y="414" width="32" height="64" />
<color alpha="0.6" />
</element>
@ -64,7 +64,7 @@ license:CC0
<screen index="0">
<bounds x="0" y="0" width="640" height="480" />
</screen>
<element ref="shifter" inputtag="IN2" inputmask="0x01">
<element ref="shifter" inputtag="IN1" inputmask="0x10">
<bounds x="2" y="414" width="32" height="64" />
<color alpha="0.6" />
</element>
@ -73,7 +73,7 @@ license:CC0
<screen index="0">
<bounds x="0" y="0" width="640" height="480" />
</screen>
<element ref="shifter" inputtag="IN2" inputmask="0x01">
<element ref="shifter" inputtag="IN1" inputmask="0x10">
<bounds x="648" y="414" width="32" height="64" />
</element>
</view>
@ -81,7 +81,7 @@ license:CC0
<screen index="0">
<bounds x="0" y="0" width="640" height="480" />
</screen>
<element ref="shifter" inputtag="IN2" inputmask="0x01">
<element ref="shifter" inputtag="IN1" inputmask="0x10">
<bounds x="-40" y="414" width="32" height="64" />
</element>
</view>

View File

@ -0,0 +1,175 @@
<?xml version="1.0"?>
<!--
license:CC0
-->
<mamelayout version="2">
<!-- define elements -->
<element name="shutter" defstate="0">
<rect state="1"><color red="0" green="0" blue="0" /></rect>
</element>
<element name="shifter" defstate="0">
<rect>
<bounds left="0" right="32" top="0" bottom="64" />
<color red="0.85" green="0.4" blue="0.3" />
</rect>
<rect>
<bounds left="2" right="30" top="2" bottom="62" />
<color red="0.14" green="0.17" blue="0.2" />
</rect>
<rect>
<bounds left="14" right="18" top="15" bottom="49" />
<color red="0.44" green="0.47" blue="0.5" />
</rect>
<disk>
<bounds left="14" right="18" top="13" bottom="17" />
<color red="0.44" green="0.47" blue="0.5" />
</disk>
<disk>
<bounds left="14" right="18" top="47" bottom="51" />
<color red="0.44" green="0.47" blue="0.5" />
</disk>
<text string="LOW" state="0">
<bounds left="3" right="29" top="2" bottom="12" />
<color red="1.0" green="1.0" blue="0.4" />
</text>
<text string="LOW" state="1">
<bounds left="3" right="29" top="2" bottom="12" />
<color red="1.0" green="1.0" blue="1.0" />
</text>
<text string="HIGH" state="0">
<bounds left="3" right="29" top="52" bottom="62" />
<color red="1.0" green="1.0" blue="1.0" />
</text>
<text string="HIGH" state="1">
<bounds left="3" right="29" top="52" bottom="62" />
<color red="1.0" green="1.0" blue="0.4" />
</text>
<disk state="0">
<bounds left="9" right="23" top="14" bottom="28" />
<color red="0.85" green="0.4" blue="0.3" />
</disk>
<disk state="1">
<bounds left="9" right="23" top="36" bottom="50" />
<color red="0.85" green="0.4" blue="0.3" />
</disk>
</element>
<!-- build screen -->
<view name="Shifter-R">
<screen index="0">
<bounds x="0" y="0" width="640" height="480" />
</screen>
<element ref="shifter" inputtag="IN2" inputmask="0x01">
<bounds x="606" y="414" width="32" height="64" />
<color alpha="0.6" />
</element>
</view>
<view name="Shifter-L">
<screen index="0">
<bounds x="0" y="0" width="640" height="480" />
</screen>
<element ref="shifter" inputtag="IN2" inputmask="0x01">
<bounds x="2" y="414" width="32" height="64" />
<color alpha="0.6" />
</element>
</view>
<view name="Widescreen Shifter-R">
<screen index="0">
<bounds x="0" y="0" width="640" height="480" />
</screen>
<element ref="shifter" inputtag="IN2" inputmask="0x01">
<bounds x="648" y="414" width="32" height="64" />
</element>
</view>
<view name="Widescreen Shifter-L">
<screen index="0">
<bounds x="0" y="0" width="640" height="480" />
</screen>
<element ref="shifter" inputtag="IN2" inputmask="0x01">
<bounds x="-40" y="414" width="32" height="64" />
</element>
</view>
<view name="3D Scope Straight View">
<!-- parallel-eyed -->
<screen index="0"><bounds x="0" y="0" width="640" height="480" /></screen>
<element name="shutter1" ref="shutter"><bounds x="0" y="0" width="640" height="480" /></element>
<screen index="0"><bounds x="644" y="0" width="640" height="480" /></screen>
<element name="shutter0" ref="shutter"><bounds x="644" y="0" width="640" height="480" /></element>
<!-- shifter options (off-screen shifter is not possible here) -->
<collection name="Shifter-R" visible="no">
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="606" y="414" width="32" height="64" /><color alpha="0.6" /></element>
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="1250" y="414" width="32" height="64" /><color alpha="0.6" /></element>
</collection>
<collection name="Shifter-L" visible="no">
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="2" y="414" width="32" height="64" /><color alpha="0.6" /></element>
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="646" y="414" width="32" height="64" /><color alpha="0.6" /></element>
</collection>
</view>
<view name="3D Scope Cross View">
<!-- cross-eyed -->
<screen index="0"><bounds x="0" y="0" width="640" height="480" /></screen>
<element name="shutter0" ref="shutter"><bounds x="0" y="0" width="640" height="480" /></element>
<screen index="0"><bounds x="644" y="0" width="640" height="480" /></screen>
<element name="shutter1" ref="shutter"><bounds x="644" y="0" width="640" height="480" /></element>
<!-- shifter options (off-screen shifter is not possible here) -->
<collection name="Shifter-R" visible="no">
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="606" y="414" width="32" height="64" /><color alpha="0.6" /></element>
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="1250" y="414" width="32" height="64" /><color alpha="0.6" /></element>
</collection>
<collection name="Shifter-L" visible="no">
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="2" y="414" width="32" height="64" /><color alpha="0.6" /></element>
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="646" y="414" width="32" height="64" /><color alpha="0.6" /></element>
</collection>
</view>
<view name="3D Scope Left">
<screen index="0"><bounds x="0" y="0" width="640" height="480" /></screen>
<element name="shutter1" ref="shutter"><bounds x="0" y="0" width="640" height="480" /></element>
<!-- shifter options -->
<collection name="Shifter-R" visible="no">
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="606" y="414" width="32" height="64" /><color alpha="0.6" /></element>
</collection>
<collection name="Shifter-L" visible="no">
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="2" y="414" width="32" height="64" /><color alpha="0.6" /></element>
</collection>
<collection name="Widescreen Shifter-R" visible="no">
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="648" y="414" width="32" height="64" /></element>
</collection>
<collection name="Widescreen Shifter-L" visible="no">
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="-40" y="414" width="32" height="64" /></element>
</collection>
</view>
<view name="3D Scope Right">
<screen index="0"><bounds x="0" y="0" width="640" height="480" /></screen>
<element name="shutter0" ref="shutter"><bounds x="0" y="0" width="640" height="480" /></element>
<!-- shifter options -->
<collection name="Shifter-R" visible="no">
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="606" y="414" width="32" height="64" /><color alpha="0.6" /></element>
</collection>
<collection name="Shifter-L" visible="no">
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="2" y="414" width="32" height="64" /><color alpha="0.6" /></element>
</collection>
<collection name="Widescreen Shifter-R" visible="no">
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="648" y="414" width="32" height="64" /></element>
</collection>
<collection name="Widescreen Shifter-L" visible="no">
<element ref="shifter" inputtag="IN2" inputmask="0x01"><bounds x="-40" y="414" width="32" height="64" /></element>
</collection>
</view>
</mamelayout>

View File

@ -790,7 +790,7 @@ void taitoz_state::contcirc_out_w(u8 data)
m_road_palbank = (data & 0xc0) >> 6;
}
WRITE_LINE_MEMBER(taitoz_state::contcirc_vblank)
WRITE_LINE_MEMBER(taitoz_state::scope_vblank)
{
if (state)
{