mirror of
https://github.com/holub/mame
synced 2025-04-27 18:53:05 +03:00
namcos22: move video todo over to main driver file (nw)
This commit is contained in:
parent
ed5e9df496
commit
06c33074aa
@ -1,7 +1,7 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:Phil Stroffolino, hap, R. Belmont
|
// copyright-holders:Phil Stroffolino, hap, R. Belmont
|
||||||
/**
|
/**
|
||||||
* This driver describes Namco's System22 and Super System 22 hardware.
|
* This driver describes Namco's System22 and System Super22 hardware.
|
||||||
*
|
*
|
||||||
* driver provided with thanks to:
|
* driver provided with thanks to:
|
||||||
* - hap
|
* - hap
|
||||||
@ -10,13 +10,48 @@
|
|||||||
* - trackmaster@gmx.net (Bjorn Sunder)
|
* - trackmaster@gmx.net (Bjorn Sunder)
|
||||||
* - team vivanonno
|
* - team vivanonno
|
||||||
*
|
*
|
||||||
* TODO: (for video related issues, see video source file)
|
* TODO:
|
||||||
* - finish slave DSP emulation
|
* - finish slave DSP emulation
|
||||||
* - emulate System 22 I/O board C74
|
* - emulate System22 I/O board C74
|
||||||
* - tokyowar tanks are not shootable, same for timecris helicopter, there's still a very small hitbox but almost impossible to hit.
|
* - tokyowar tanks are not shootable, same for timecris helicopter, there's still a very small hitbox but almost impossible to hit.
|
||||||
* - alpinesa doesn't work, protection related?
|
* - alpinesa doesn't work, protection related?
|
||||||
* - C139 for linked cabinets, as well as in RR fullscale
|
* - C139 for linked cabinets, as well as in RR fullscale
|
||||||
* - confirm DSP and MCU clocks and their IRQ timing
|
* - confirm DSP and MCU clocks and their IRQ timing
|
||||||
|
* - texture u/v mapping is often 1 pixel off, resulting in many glitch lines/gaps between textures. The glitch may be in MAME core:
|
||||||
|
* it used to be much worse with the legacy_poly_manager
|
||||||
|
* - find out how/where vics num_sprites is determined exactly, currently a workaround is needed for airco22b and dirtdash
|
||||||
|
* - improve ss22 fogging:
|
||||||
|
* + scene changes too rapidly sometimes, eg. dirtdash snow level finish (see attract), or aquajet going down the waterfall
|
||||||
|
* + timecris submarine explosion
|
||||||
|
* + aquajet underwater should show blue haze
|
||||||
|
* + 100% fog if you start dirtdash at the hill level
|
||||||
|
* - improve ss22 lighting, eg. mountains in alpinr2b selection screen
|
||||||
|
* - improve ss22 spot: the bugs hint toward an extra bg layer bank?
|
||||||
|
* + dirtdash spotlight is opaque for a short time when exiting the jungle level
|
||||||
|
* + dirtdash speedometer has wrong colors when in the jungle level
|
||||||
|
* + dirtdash record time message creates a 'gap' in the spotlight when entering the jungle level
|
||||||
|
* - polygon layer stays visible sometimes when it shouldn't:
|
||||||
|
* + cybrcomm/victlapw namco logo screen after attract demo
|
||||||
|
* + airco22b title logo after attract demo
|
||||||
|
* + aquajet namco logo/game over after ending
|
||||||
|
* - cybrcomm arrows(black part) should be below textlayer when a messagebox pops up
|
||||||
|
* - cybrcomm enemies should flash white when you shoot them, it's not poly fog
|
||||||
|
* - cybrcycc speed dial needle is missing
|
||||||
|
* - s22 background color control? see victlapw attract mode
|
||||||
|
* - window clipping is wrong in acedrvrw, victlapw (see rear-view mirrors), and alpinr2b character selection screen
|
||||||
|
* - ridgerac waving flag title screen is missing, just an empty beach scenery instead
|
||||||
|
* - global offset is wrong in non-super22 servicemode video test, and above that, it flickers in acedrvrw, victlapw
|
||||||
|
* - dirtdash polys are broken at the start section of the mountain level, maybe bad rom?
|
||||||
|
* - propcycl scoreboard sprite part should fade out in attract mode and just before game over, fader or fog related?
|
||||||
|
* - ridgerac fogging isn't applied to the upper/side part of the sky (best seen when driving down a hill), it's fine in ridgera2
|
||||||
|
* czram contents is rather odd here and partly cleared (probably the cause?):
|
||||||
|
* $0000-$0d7f - gradual increase from $00-$7c
|
||||||
|
* $0d80-$0fff - $73, huh, why lower?
|
||||||
|
* $1000-$19ff - $00, huh!? (it's specifically cleared, memsetting czram at boot does not fix the issue)
|
||||||
|
* $1a00-$0dff - $77
|
||||||
|
* $1e00-$1fff - $78
|
||||||
|
*
|
||||||
|
* - lots of smaller issues
|
||||||
*
|
*
|
||||||
**********************************************************************************************************
|
**********************************************************************************************************
|
||||||
* Input
|
* Input
|
||||||
@ -89,7 +124,7 @@
|
|||||||
* - some (typically racing) games may be linked together
|
* - some (typically racing) games may be linked together
|
||||||
* - serial controller is C139 SCI (same as System21).
|
* - serial controller is C139 SCI (same as System21).
|
||||||
*
|
*
|
||||||
* "Super" System22
|
* System Super22
|
||||||
* - different memory map
|
* - different memory map
|
||||||
* - different CPU controller register layout
|
* - different CPU controller register layout
|
||||||
* - sound CPU uses external ROM (i.e. pr1data.8k) instead of internal BIOS (C74)
|
* - sound CPU uses external ROM (i.e. pr1data.8k) instead of internal BIOS (C74)
|
||||||
@ -1235,7 +1270,7 @@ WRITE32_MEMBER(namcos22_state::namcos22_sci_w)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* system controller (super system22)
|
/* system controller (ss22)
|
||||||
|
|
||||||
0x00: vblank irq level
|
0x00: vblank irq level
|
||||||
0x01: hblank irq level
|
0x01: hblank irq level
|
||||||
@ -1709,8 +1744,8 @@ READ16_MEMBER(namcos22_state::namcos22_dipswitch_r)
|
|||||||
WRITE16_MEMBER(namcos22_state::namcos22_cpuleds_w)
|
WRITE16_MEMBER(namcos22_state::namcos22_cpuleds_w)
|
||||||
{
|
{
|
||||||
// 8 leds on cpu board, 0=on 1=off
|
// 8 leds on cpu board, 0=on 1=off
|
||||||
// on system 22: two rows of 4 red leds
|
// on System22: two rows of 4 red leds
|
||||||
// on super system 22: GYRGYRGY green/yellow/red
|
// on SS22: GYRGYRGY green/yellow/red
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
m_cpuled[i] = (~data << i & 0x80) ? 0 : 1;
|
m_cpuled[i] = (~data << i & 0x80) ? 0 : 1;
|
||||||
}
|
}
|
||||||
@ -1732,7 +1767,7 @@ WRITE32_MEMBER(namcos22_state::namcos22s_chipselect_w)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// System 22
|
// System22
|
||||||
void namcos22_state::namcos22_am(address_map &map)
|
void namcos22_state::namcos22_am(address_map &map)
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -1936,7 +1971,7 @@ void namcos22_state::namcos22_am(address_map &map)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Super System 22
|
// System Super22
|
||||||
void namcos22_state::namcos22s_am(address_map &map)
|
void namcos22_state::namcos22s_am(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x000000, 0x3fffff).rom();
|
map(0x000000, 0x3fffff).rom();
|
||||||
@ -2184,7 +2219,7 @@ READ16_MEMBER(namcos22_state::pdp_begin_r)
|
|||||||
* This presumably kickstarts the PDP(polygon display parser/processor?)
|
* This presumably kickstarts the PDP(polygon display parser/processor?)
|
||||||
* It parses through the displaylist and sends commands to the 3D render device.
|
* It parses through the displaylist and sends commands to the 3D render device.
|
||||||
* In MAME, this main task is done in simulate_slavedsp instead. Ideally, we'd make the PDP a device with execute_run
|
* In MAME, this main task is done in simulate_slavedsp instead. Ideally, we'd make the PDP a device with execute_run
|
||||||
* Super System 22 supports more than just "goto" and render commands, they are handled here.
|
* SS22 supports more than just "goto" and render commands, they are handled here.
|
||||||
*/
|
*/
|
||||||
m_dsp_master_bioz = 1;
|
m_dsp_master_bioz = 1;
|
||||||
uint16_t offs = (m_is_ss22) ? pdp_polygonram_read(0x7fff) : m_pdp_base;
|
uint16_t offs = (m_is_ss22) ? pdp_polygonram_read(0x7fff) : m_pdp_base;
|
||||||
@ -2632,7 +2667,7 @@ void namcos22_state::slave_dsp_io(address_map &map)
|
|||||||
000000-00027f: internal MCU registers and RAM
|
000000-00027f: internal MCU registers and RAM
|
||||||
002000-002fff: C352 PCM chip
|
002000-002fff: C352 PCM chip
|
||||||
004000-00bfff: shared RAM with host CPU
|
004000-00bfff: shared RAM with host CPU
|
||||||
00c000-00ffff: BIOS ROM (internal on System 22, external on Super)
|
00c000-00ffff: BIOS ROM (internal on System22, external on Super)
|
||||||
200000-27ffff: data ROM
|
200000-27ffff: data ROM
|
||||||
301000-301001: watchdog?
|
301000-301001: watchdog?
|
||||||
308000-308003: unknown (I/O?)
|
308000-308003: unknown (I/O?)
|
||||||
@ -2651,7 +2686,7 @@ void namcos22_state::slave_dsp_io(address_map &map)
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// System 22 37702
|
// System22 37702
|
||||||
|
|
||||||
READ8_MEMBER(namcos22_state::mcu_port4_s22_r)
|
READ8_MEMBER(namcos22_state::mcu_port4_s22_r)
|
||||||
{
|
{
|
||||||
@ -2693,7 +2728,7 @@ void namcos22_state::iomcu_s22_io(address_map &map)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Super System 22 M37710
|
// System Super22 M37710
|
||||||
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::mcu_irq)
|
TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::mcu_irq)
|
||||||
{
|
{
|
||||||
@ -3602,7 +3637,7 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
/*********************************************************************************************/
|
/*********************************************************************************************/
|
||||||
|
|
||||||
/* Super System22 supports a sprite layer.
|
/* System Super22 supports a sprite layer.
|
||||||
* Sprites are rendered as part of the polygon draw list, based on a per-sprite Z attribute.
|
* Sprites are rendered as part of the polygon draw list, based on a per-sprite Z attribute.
|
||||||
* Each sprite has explicit placement/color/zoom controls.
|
* Each sprite has explicit placement/color/zoom controls.
|
||||||
*/
|
*/
|
||||||
@ -3690,7 +3725,7 @@ void namcos22_state::machine_start()
|
|||||||
m_portbits[1] = 0xffff;
|
m_portbits[1] = 0xffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
// System 22
|
// System22
|
||||||
MACHINE_CONFIG_START(namcos22_state::namcos22)
|
MACHINE_CONFIG_START(namcos22_state::namcos22)
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -3759,7 +3794,7 @@ MACHINE_CONFIG_START(namcos22_state::cybrcomm)
|
|||||||
MCFG_SOUND_ROUTE(3, "rear_right", 1.00)
|
MCFG_SOUND_ROUTE(3, "rear_right", 1.00)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
// Super System 22
|
// System Super22
|
||||||
MACHINE_CONFIG_START(namcos22_state::namcos22s)
|
MACHINE_CONFIG_START(namcos22_state::namcos22s)
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -5616,7 +5651,7 @@ void namcos22_state::init_dirtdash()
|
|||||||
/*********************************************************************************************/
|
/*********************************************************************************************/
|
||||||
|
|
||||||
/* YEAR, NAME, PARENT, MACHINE, INPUT, CLASS, INIT, MNTR, COMPANY, FULLNAME, FLAGS */
|
/* YEAR, NAME, PARENT, MACHINE, INPUT, CLASS, INIT, MNTR, COMPANY, FULLNAME, FLAGS */
|
||||||
/* System22 games */
|
// System22 games
|
||||||
GAME( 1993, ridgerac, 0, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR3, World)", MACHINE_IMPERFECT_GRAPHICS ) // 1994-01-17
|
GAME( 1993, ridgerac, 0, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR3, World)", MACHINE_IMPERFECT_GRAPHICS ) // 1994-01-17
|
||||||
GAME( 1993, ridgerac3, ridgerac, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR2 Ver.B, World, 3-screen?)", MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-28, no indication that this really is a 3-screen version.
|
GAME( 1993, ridgerac3, ridgerac, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR2 Ver.B, World, 3-screen?)", MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-28, no indication that this really is a 3-screen version.
|
||||||
GAME( 1993, ridgeracb, ridgerac, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR2, World)", MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-07
|
GAME( 1993, ridgeracb, ridgerac, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR2, World)", MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-07
|
||||||
@ -5632,7 +5667,7 @@ GAME( 1995, raveracja, raveracw, namcos22, raveracw, namcos22_state, init_rave
|
|||||||
GAME( 1994, acedrvrw, 0, namcos22, acedrvr, namcos22_state, init_acedrvr, ROT0, "Namco", "Ace Driver: Racing Evolution (Rev. AD2, World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 94/10/20 16:22:25
|
GAME( 1994, acedrvrw, 0, namcos22, acedrvr, namcos22_state, init_acedrvr, ROT0, "Namco", "Ace Driver: Racing Evolution (Rev. AD2, World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 94/10/20 16:22:25
|
||||||
GAME( 1996, victlapw, 0, namcos22, victlap, namcos22_state, init_victlap, ROT0, "Namco", "Ace Driver: Victory Lap (Rev. ADV2, World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/02/13 17:50:06
|
GAME( 1996, victlapw, 0, namcos22, victlap, namcos22_state, init_victlap, ROT0, "Namco", "Ace Driver: Victory Lap (Rev. ADV2, World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/02/13 17:50:06
|
||||||
|
|
||||||
/* Super System22 games */
|
// System Super22 games
|
||||||
GAME( 1994, alpinerd, 0, alpine, alpiner, namcos22_state, init_alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.D, World)", MACHINE_IMPERFECT_GRAPHICS )
|
GAME( 1994, alpinerd, 0, alpine, alpiner, namcos22_state, init_alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.D, World)", MACHINE_IMPERFECT_GRAPHICS )
|
||||||
GAME( 1994, alpinerc, alpinerd, alpine, alpiner, namcos22_state, init_alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.C, World)", MACHINE_IMPERFECT_GRAPHICS )
|
GAME( 1994, alpinerc, alpinerd, alpine, alpiner, namcos22_state, init_alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.C, World)", MACHINE_IMPERFECT_GRAPHICS )
|
||||||
GAME( 1995, airco22b, 0, airco22b, airco22, namcos22_state, init_airco22, ROT0, "Namco", "Air Combat 22 (Rev. ACS1 Ver.B, Japan)", MACHINE_IMPERFECT_GRAPHICS )
|
GAME( 1995, airco22b, 0, airco22b, airco22, namcos22_state, init_airco22, ROT0, "Namco", "Air Combat 22 (Rev. ACS1 Ver.B, Japan)", MACHINE_IMPERFECT_GRAPHICS )
|
||||||
|
@ -1,41 +1,10 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:Phil Stroffolino, hap, R. Belmont
|
// copyright-holders:Phil Stroffolino, hap, R. Belmont
|
||||||
/**
|
/*
|
||||||
* video hardware for Namco System22
|
|
||||||
*
|
Namco System22 + System Super22 video hardware emulation
|
||||||
* TODO:
|
|
||||||
* - texture u/v mapping is often 1 pixel off, resulting in many glitch lines/gaps between textures. The glitch may be in MAME core:
|
*/
|
||||||
* it used to be much worse with the legacy_poly_manager
|
|
||||||
* - find out how/where vics num_sprites is determined exactly, currently a workaround is needed for airco22b and dirtdash
|
|
||||||
* - improve ss22 fogging:
|
|
||||||
* + scene changes too rapidly sometimes, eg. dirtdash snow level finish (see attract), or aquajet going down the waterfall
|
|
||||||
* + 100% fog if you start dirtdash at the hill level
|
|
||||||
* - improve ss22 lighting, eg. mountains in alpinr2b selection screen
|
|
||||||
* - improve ss22 spot: the bugs hint toward an extra bg layer bank?
|
|
||||||
* + dirtdash spotlight is opaque for a short time when exiting the jungle level
|
|
||||||
* + dirtdash speedometer has wrong colors when in the jungle level
|
|
||||||
* + dirtdash record time message creates a 'gap' in the spotlight when entering the jungle level
|
|
||||||
* - polygon layer stays visible sometimes when it shouldn't:
|
|
||||||
* + cybrcomm/victlapw namco logo screen after attract demo
|
|
||||||
* + airco22b title logo after attract demo
|
|
||||||
* + aquajet namco logo/game over after ending
|
|
||||||
* - window clipping is wrong in acedrvrw, victlapw (see rear-view mirrors), and alpinr2b character selection screen
|
|
||||||
* - ridgerac waving flag title screen is missing, just an empty beach scenery instead
|
|
||||||
* - global offset is wrong in non-super22 servicemode video test, and above that, it flickers in acedrvrw, victlapw
|
|
||||||
* - dirtdash polys are broken at the start section of the mountain level, maybe bad rom?
|
|
||||||
* - propcycl scoreboard sprite part should fade out in attract mode and just before game over, fader or fog related?
|
|
||||||
* - ridgerac fogging isn't applied to the upper/side part of the sky (best seen when driving down a hill), it's fine in ridgera2
|
|
||||||
* czram contents is rather odd here and partly cleared (probably the cause?):
|
|
||||||
* $0000-$0d7f - gradual increase from $00-$7c
|
|
||||||
* $0d80-$0fff - $73, huh, why lower?
|
|
||||||
* $1000-$19ff - $00, huh!? (it's specifically cleared, memsetting czram at boot does not fix the issue)
|
|
||||||
* $1a00-$0dff - $77
|
|
||||||
* $1e00-$1fff - $78
|
|
||||||
*
|
|
||||||
* - lots of smaller issues
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*******************************/
|
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "includes/namcos22.h"
|
#include "includes/namcos22.h"
|
||||||
@ -58,9 +27,6 @@ void namcos22_renderer::reset()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************************************/
|
|
||||||
|
|
||||||
// poly scanline callbacks
|
// poly scanline callbacks
|
||||||
void namcos22_renderer::renderscanline_uvi_full(int32_t scanline, const extent_t &extent, const namcos22_object_data &extra, int threadid)
|
void namcos22_renderer::renderscanline_uvi_full(int32_t scanline, const extent_t &extent, const namcos22_object_data &extra, int threadid)
|
||||||
{
|
{
|
||||||
@ -1822,7 +1788,7 @@ WRITE32_MEMBER(namcos22_state::namcos22_tilemapattr_w)
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
0.hiword R/W x offset
|
0.hiword R/W x offset
|
||||||
0.loword R/W y offset, bit 9 for interlacing?(cybrcomm, tokyowar)
|
0.loword R/W y offset
|
||||||
1.hiword R/W ??? always 0x006e?
|
1.hiword R/W ??? always 0x006e?
|
||||||
1.loword ? unused?
|
1.loword ? unused?
|
||||||
2.hiword R/W posirq scanline? - not hooked up yet
|
2.hiword R/W posirq scanline? - not hooked up yet
|
||||||
@ -1831,7 +1797,7 @@ WRITE32_MEMBER(namcos22_state::namcos22_tilemapattr_w)
|
|||||||
3.loword R ???
|
3.loword R ???
|
||||||
*/
|
*/
|
||||||
COMBINE_DATA(&m_tilemapattr[offset]);
|
COMBINE_DATA(&m_tilemapattr[offset]);
|
||||||
// popmessage("%08x\n%08x\n%08x\n%08x\n",m_tilemapattr[0],m_tilemapattr[1],m_tilemapattr[2],m_tilemapattr[3]);
|
//popmessage("%08x\n%08x\n%08x\n%08x\n",m_tilemapattr[0],m_tilemapattr[1],m_tilemapattr[2],m_tilemapattr[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2473,7 +2439,7 @@ void namcos22_state::init_tables()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// following setup is Namco System 22 specific
|
// following setup is System22 specific
|
||||||
switch (m_gametype)
|
switch (m_gametype)
|
||||||
{
|
{
|
||||||
case NAMCOS22_RIDGE_RACER:
|
case NAMCOS22_RIDGE_RACER:
|
||||||
|
Loading…
Reference in New Issue
Block a user