mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
namcos22: small misc update (nw)
This commit is contained in:
parent
dc83a12d67
commit
e740962d5f
@ -2170,129 +2170,127 @@ READ16_MEMBER(namcos22_state::pdp_status_r)
|
||||
return m_dsp_master_bioz;
|
||||
}
|
||||
|
||||
uint32_t namcos22_state::pdp_polygonram_read(offs_t offs)
|
||||
{
|
||||
return m_polygonram[offs & 0x7fff];
|
||||
}
|
||||
|
||||
void namcos22_state::pdp_polygonram_write(offs_t offs, uint32_t data)
|
||||
{
|
||||
m_polygonram[offs & 0x7fff] = data;
|
||||
}
|
||||
|
||||
READ16_MEMBER(namcos22_state::pdp_begin_r)
|
||||
{
|
||||
/* this feature appears to be only used on Super System22 hardware */
|
||||
if (m_is_ss22)
|
||||
/**
|
||||
* This presumably kickstarts the PDP(polygon display parser/processor?)
|
||||
* 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
|
||||
* Super System 22 supports more than just "goto" and render commands, they are handled here.
|
||||
*/
|
||||
m_dsp_master_bioz = 1;
|
||||
uint16_t offs = (m_is_ss22) ? pdp_polygonram_read(0x7fff) : m_pdp_base;
|
||||
|
||||
if (!m_is_ss22)
|
||||
return 0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
uint16_t offs = pdp_polygonram_read(0x7fff);
|
||||
m_dsp_master_bioz = 1;
|
||||
for (;;)
|
||||
offs &= 0x7fff;
|
||||
uint16_t start = offs;
|
||||
uint16_t cmd = pdp_polygonram_read(offs++);
|
||||
uint32_t srcAddr;
|
||||
uint32_t dstAddr;
|
||||
uint32_t numWords;
|
||||
uint32_t data;
|
||||
switch (cmd)
|
||||
{
|
||||
uint16_t start = offs;
|
||||
uint16_t cmd = pdp_polygonram_read(offs++);
|
||||
uint32_t srcAddr;
|
||||
uint32_t dstAddr;
|
||||
uint32_t numWords;
|
||||
uint32_t data;
|
||||
switch (cmd)
|
||||
{
|
||||
case 0xfff0:
|
||||
/* NOP? used in 'PDP LOOP TEST' */
|
||||
break;
|
||||
case 0xfff0:
|
||||
// NOP? used in 'PDP LOOP TEST'
|
||||
break;
|
||||
|
||||
case 0xfff5:
|
||||
/* write to point ram */
|
||||
dstAddr = pdp_polygonram_read(offs++); /* 32 bit PointRAM address */
|
||||
data = pdp_polygonram_read(offs++); /* 24 bit data */
|
||||
point_write(dstAddr, data);
|
||||
break;
|
||||
case 0xfff5:
|
||||
// write to point ram
|
||||
dstAddr = pdp_polygonram_read(offs++); // 32 bit PointRAM address
|
||||
data = pdp_polygonram_read(offs++); // 24 bit data
|
||||
point_write(dstAddr, data);
|
||||
break;
|
||||
|
||||
case 0xfff6:
|
||||
/* read word from point ram */
|
||||
srcAddr = pdp_polygonram_read(offs++); /* 32 bit PointRAM address */
|
||||
dstAddr = pdp_polygonram_read(offs++); /* CommRAM address; receives 24 bit PointRAM data */
|
||||
data = point_read(srcAddr);
|
||||
pdp_polygonram_write(dstAddr, data);
|
||||
break;
|
||||
case 0xfff6:
|
||||
/* read word from point ram */
|
||||
srcAddr = pdp_polygonram_read(offs++); // 32 bit PointRAM address
|
||||
dstAddr = pdp_polygonram_read(offs++); // CommRAM address; receives 24 bit PointRAM data
|
||||
data = point_read(srcAddr);
|
||||
pdp_polygonram_write(dstAddr, data);
|
||||
break;
|
||||
|
||||
case 0xfff7:
|
||||
/* block move (CommRAM to CommRAM) */
|
||||
srcAddr = pdp_polygonram_read(offs++);
|
||||
dstAddr = pdp_polygonram_read(offs++);
|
||||
numWords = pdp_polygonram_read(offs++);
|
||||
while (numWords--)
|
||||
{
|
||||
data = pdp_polygonram_read(srcAddr++);
|
||||
pdp_polygonram_write(dstAddr++, data);
|
||||
}
|
||||
break;
|
||||
case 0xfff7:
|
||||
// block move (CommRAM to CommRAM)
|
||||
srcAddr = pdp_polygonram_read(offs++);
|
||||
dstAddr = pdp_polygonram_read(offs++);
|
||||
numWords = pdp_polygonram_read(offs++);
|
||||
while (numWords--)
|
||||
{
|
||||
data = pdp_polygonram_read(srcAddr++);
|
||||
pdp_polygonram_write(dstAddr++, data);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xfffa:
|
||||
/* read block from point ram */
|
||||
srcAddr = pdp_polygonram_read(offs++); /* 32 bit PointRAM address */
|
||||
dstAddr = pdp_polygonram_read(offs++); /* CommRAM address; receives data */
|
||||
numWords = pdp_polygonram_read(offs++); /* block size */
|
||||
while (numWords--)
|
||||
{
|
||||
data = point_read(srcAddr++);
|
||||
pdp_polygonram_write(dstAddr++, data);
|
||||
}
|
||||
break;
|
||||
case 0xfffa:
|
||||
// read block from point ram
|
||||
srcAddr = pdp_polygonram_read(offs++); // 32 bit PointRAM address
|
||||
dstAddr = pdp_polygonram_read(offs++); // CommRAM address; receives data
|
||||
numWords = pdp_polygonram_read(offs++); // block size
|
||||
while (numWords--)
|
||||
{
|
||||
data = point_read(srcAddr++);
|
||||
pdp_polygonram_write(dstAddr++, data);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xfffb:
|
||||
/* write block to point ram */
|
||||
dstAddr = pdp_polygonram_read(offs++); /* 32 bit PointRAM address */
|
||||
numWords = pdp_polygonram_read(offs++); /* block size */
|
||||
while (numWords--)
|
||||
{
|
||||
data = pdp_polygonram_read(offs++); /* 24 bit source data */
|
||||
point_write(dstAddr++, data);
|
||||
}
|
||||
break;
|
||||
case 0xfffb:
|
||||
// write block to point ram
|
||||
dstAddr = pdp_polygonram_read(offs++); // 32 bit PointRAM address
|
||||
numWords = pdp_polygonram_read(offs++); // block size
|
||||
while (numWords--)
|
||||
{
|
||||
data = pdp_polygonram_read(offs++); // 24 bit source data
|
||||
point_write(dstAddr++, data);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xfffc:
|
||||
/* point ram to point ram */
|
||||
srcAddr = pdp_polygonram_read(offs++);
|
||||
dstAddr = pdp_polygonram_read(offs++);
|
||||
numWords = pdp_polygonram_read(offs++);
|
||||
while (numWords--)
|
||||
{
|
||||
data = point_read(srcAddr++);
|
||||
point_write(dstAddr++, data);
|
||||
}
|
||||
break;
|
||||
case 0xfffc:
|
||||
// point ram to point ram
|
||||
srcAddr = pdp_polygonram_read(offs++);
|
||||
dstAddr = pdp_polygonram_read(offs++);
|
||||
numWords = pdp_polygonram_read(offs++);
|
||||
while (numWords--)
|
||||
{
|
||||
data = point_read(srcAddr++);
|
||||
point_write(dstAddr++, data);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xfffd:
|
||||
/* direct command to render device */
|
||||
// len -> command (eg. BB0003) -> data
|
||||
numWords = pdp_polygonram_read(offs++);
|
||||
while (numWords--)
|
||||
{
|
||||
data = pdp_polygonram_read(offs++);
|
||||
//namcos22_WriteDataToRenderDevice(data);
|
||||
}
|
||||
break;
|
||||
case 0xfffd:
|
||||
// direct command to render device
|
||||
// len -> command (eg. BB0003) -> data
|
||||
numWords = pdp_polygonram_read(offs++);
|
||||
while (numWords--)
|
||||
{
|
||||
data = pdp_polygonram_read(offs++);
|
||||
//namcos22_WriteDataToRenderDevice(data);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xfffe:
|
||||
/* unknown */
|
||||
data = pdp_polygonram_read(offs++); /* ??? (usually 0x400 or 0) */
|
||||
break;
|
||||
case 0xfffe:
|
||||
// unknown
|
||||
data = pdp_polygonram_read(offs++); // ??? (usually 0x400 or 0)
|
||||
break;
|
||||
|
||||
case 0xffff:
|
||||
/* "goto" command */
|
||||
offs = pdp_polygonram_read(offs);
|
||||
if (offs == start)
|
||||
{
|
||||
/* most commands end with a "goto self" */
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("unknown PDP cmd = 0x%04x!\n", cmd);
|
||||
case 0xffff:
|
||||
// "goto" command
|
||||
offs = pdp_polygonram_read(offs) & 0x7fff;
|
||||
if (offs == start)
|
||||
{
|
||||
// MAME will get stuck with a "goto self", so bail out
|
||||
// in reality, the cpu can overwrite this address or retrigger pdp_begin
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("unknown PDP cmd = 0x%04x!\n", cmd);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2334,6 +2332,7 @@ WRITE16_MEMBER(namcos22_state::dsp_unk2_w)
|
||||
* Prop Cycle doesn't use this; instead it writes this
|
||||
* addr to the uppermost word of CommRAM.
|
||||
*/
|
||||
m_pdp_base = data;
|
||||
}
|
||||
|
||||
READ16_MEMBER(namcos22_state::dsp_unk_port3_r)
|
||||
@ -2550,7 +2549,7 @@ void namcos22_state::master_dsp_io(address_map &map)
|
||||
}
|
||||
|
||||
|
||||
READ16_MEMBER(namcos22_state::dsp_bioz_r)
|
||||
READ16_MEMBER(namcos22_state::dsp_slave_bioz_r)
|
||||
{
|
||||
/* STUB */
|
||||
return 1;
|
||||
@ -3368,13 +3367,13 @@ static INPUT_PORTS_START( airco22 )
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("ADC.0")
|
||||
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_MINMAX(0x40, 0xc0) PORT_SENSITIVITY(100) PORT_KEYDELTA(2)
|
||||
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_MINMAX(0x40, 0xc0) PORT_SENSITIVITY(100) PORT_KEYDELTA(3)
|
||||
|
||||
PORT_START("ADC.1")
|
||||
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_MINMAX(0x40, 0xc0) PORT_SENSITIVITY(100) PORT_KEYDELTA(2)
|
||||
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_MINMAX(0x40, 0xc0) PORT_SENSITIVITY(100) PORT_KEYDELTA(3)
|
||||
|
||||
PORT_START("ADC.2") // throttle stick auto-centers
|
||||
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Z ) PORT_MINMAX(0x40, 0xc0) PORT_SENSITIVITY(100) PORT_KEYDELTA(2) PORT_NAME("Throttle Stick")
|
||||
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Z ) PORT_MINMAX(0x40, 0xc0) PORT_SENSITIVITY(100) PORT_KEYDELTA(3) PORT_NAME("Throttle Stick")
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( cybrcycc )
|
||||
@ -3750,7 +3749,7 @@ MACHINE_CONFIG_START(namcos22_state::namcos22)
|
||||
slave.set_addrmap(AS_PROGRAM, &namcos22_state::slave_dsp_program);
|
||||
slave.set_addrmap(AS_DATA, &namcos22_state::slave_dsp_data);
|
||||
slave.set_addrmap(AS_IO, &namcos22_state::slave_dsp_io);
|
||||
slave.bio_in_cb().set(FUNC(namcos22_state::dsp_bioz_r));
|
||||
slave.bio_in_cb().set(FUNC(namcos22_state::dsp_slave_bioz_r));
|
||||
slave.hold_in_cb().set(FUNC(namcos22_state::dsp_hold_signal_r));
|
||||
slave.hold_ack_out_cb().set(FUNC(namcos22_state::dsp_hold_ack_w));
|
||||
slave.xf_out_cb().set(FUNC(namcos22_state::dsp_xf_output_w));
|
||||
@ -3787,8 +3786,8 @@ MACHINE_CONFIG_END
|
||||
MACHINE_CONFIG_START(namcos22_state::cybrcomm)
|
||||
namcos22(config);
|
||||
|
||||
SPEAKER(config, "rear_left", -0.2, 0.0, -0.5);
|
||||
SPEAKER(config, "rear_right", 0.2, 0.0, -0.5);
|
||||
SPEAKER(config, "rear_left").rear_left();
|
||||
SPEAKER(config, "rear_right").rear_right();
|
||||
|
||||
MCFG_DEVICE_MODIFY("c352")
|
||||
MCFG_SOUND_ROUTE(2, "rear_left", 1.00)
|
||||
@ -3819,7 +3818,7 @@ MACHINE_CONFIG_START(namcos22_state::namcos22s)
|
||||
slave.set_addrmap(AS_PROGRAM, &namcos22_state::slave_dsp_program);
|
||||
slave.set_addrmap(AS_DATA, &namcos22_state::slave_dsp_data);
|
||||
slave.set_addrmap(AS_IO, &namcos22_state::slave_dsp_io);
|
||||
slave.bio_in_cb().set(FUNC(namcos22_state::dsp_bioz_r));
|
||||
slave.bio_in_cb().set(FUNC(namcos22_state::dsp_slave_bioz_r));
|
||||
slave.hold_in_cb().set(FUNC(namcos22_state::dsp_hold_signal_r));
|
||||
slave.hold_ack_out_cb().set(FUNC(namcos22_state::dsp_hold_ack_w));
|
||||
slave.xf_out_cb().set(FUNC(namcos22_state::dsp_xf_output_w));
|
||||
@ -3853,10 +3852,10 @@ MACHINE_CONFIG_END
|
||||
MACHINE_CONFIG_START(namcos22_state::airco22b)
|
||||
namcos22s(config);
|
||||
|
||||
SPEAKER(config, "bodysonic").front_center();
|
||||
SPEAKER(config, "bodysonic").subwoofer();
|
||||
|
||||
MCFG_DEVICE_MODIFY("c352")
|
||||
MCFG_SOUND_ROUTE(2, "bodysonic", 0.50)
|
||||
MCFG_SOUND_ROUTE(2, "bodysonic", 0.50) // to subwoofer
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_START(namcos22_state::alpine)
|
||||
@ -3880,7 +3879,7 @@ MACHINE_CONFIG_END
|
||||
MACHINE_CONFIG_START(namcos22_state::cybrcycc)
|
||||
namcos22s(config);
|
||||
|
||||
SPEAKER(config, "tank").front_center();
|
||||
SPEAKER(config, "tank", 0.0, 0.0, 0.0);
|
||||
|
||||
MCFG_DEVICE_MODIFY("c352")
|
||||
MCFG_SOUND_ROUTE(2, "tank", 1.00)
|
||||
@ -3889,12 +3888,10 @@ MACHINE_CONFIG_END
|
||||
MACHINE_CONFIG_START(namcos22_state::dirtdash)
|
||||
namcos22s(config);
|
||||
|
||||
SPEAKER(config, "road").front_center();
|
||||
SPEAKER(config, "under").front_center();
|
||||
SPEAKER(config, "road", 0.0, 0.0, 0.0);
|
||||
|
||||
MCFG_DEVICE_MODIFY("c352")
|
||||
MCFG_SOUND_ROUTE(2, "road", 1.00)
|
||||
MCFG_SOUND_ROUTE(3, "under", 0.50) // from sound test
|
||||
MCFG_SOUND_ROUTE(3, "road", 1.00)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_START(namcos22_state::timecris)
|
||||
@ -3908,12 +3905,12 @@ MACHINE_CONFIG_END
|
||||
MACHINE_CONFIG_START(namcos22_state::tokyowar)
|
||||
namcos22s(config);
|
||||
|
||||
SPEAKER(config, "seat", 0.0, 0.0, 0.0);
|
||||
SPEAKER(config, "vibration", 0.0, 0.0, 0.0);
|
||||
SPEAKER(config, "vibration").subwoofer();
|
||||
SPEAKER(config, "seat", 0.0, 0.0, -0.5);
|
||||
|
||||
MCFG_DEVICE_MODIFY("c352")
|
||||
MCFG_SOUND_ROUTE(2, "vibration", 0.50) // to "bass shaker"
|
||||
MCFG_SOUND_ROUTE(3, "seat", 1.00)
|
||||
MCFG_SOUND_ROUTE(2, "vibration", 0.50)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_START(namcos22_state::propcycl)
|
||||
|
@ -1133,9 +1133,9 @@ MACHINE_CONFIG_START(taitojc_state::dendego)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(taitojc_state, screen_update_dendego)
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "subwoofer", 0.0, 0.0, 1.0);
|
||||
SPEAKER(config, "vibration").subwoofer();
|
||||
MCFG_DEVICE_ADD("oki", OKIM6295, 1056000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "subwoofer", 0.20)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "vibration", 0.20)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -323,7 +323,7 @@ private:
|
||||
DECLARE_WRITE16_MEMBER(dsp_led_w);
|
||||
DECLARE_WRITE16_MEMBER(dsp_unk8_w);
|
||||
DECLARE_WRITE16_MEMBER(master_render_device_w);
|
||||
DECLARE_READ16_MEMBER(dsp_bioz_r);
|
||||
DECLARE_READ16_MEMBER(dsp_slave_bioz_r);
|
||||
DECLARE_READ16_MEMBER(dsp_slave_port3_r);
|
||||
DECLARE_READ16_MEMBER(dsp_slave_port4_r);
|
||||
DECLARE_READ16_MEMBER(dsp_slave_port5_r);
|
||||
@ -379,8 +379,8 @@ private:
|
||||
void handle_driving_io();
|
||||
void handle_coinage(int slots, int address_is_odd);
|
||||
void handle_cybrcomm_io();
|
||||
uint32_t pdp_polygonram_read(offs_t offs);
|
||||
void pdp_polygonram_write(offs_t offs, uint32_t data);
|
||||
inline uint32_t pdp_polygonram_read(offs_t offs) { return m_polygonram[offs & 0x7fff]; }
|
||||
inline void pdp_polygonram_write(offs_t offs, uint32_t data) { m_polygonram[offs & 0x7fff] = data; }
|
||||
void point_write(offs_t offs, uint32_t data);
|
||||
int32_t pointram_read(offs_t offs);
|
||||
inline int32_t point_read(offs_t offs) { offs &= 0x00ffffff; return (offs < m_pointrom_size) ? m_pointrom[offs] : pointram_read(offs); }
|
||||
@ -394,24 +394,24 @@ private:
|
||||
void transform_normal(float *nx, float *ny, float *nz, float m[4][4]);
|
||||
void register_normals(int32_t addr, float m[4][4]);
|
||||
|
||||
void blit_single_quad(bitmap_rgb32 &bitmap, uint32_t color, uint32_t addr, float m[4][4], int32_t polyshift, int flags, int packetformat);
|
||||
void blit_quads(bitmap_rgb32 &bitmap, int32_t addr, float m[4][4], int32_t base);
|
||||
void blit_polyobject(bitmap_rgb32 &bitmap, int code, float m[4][4]);
|
||||
void blit_single_quad(uint32_t color, uint32_t addr, float m[4][4], int32_t polyshift, int flags, int packetformat);
|
||||
void blit_quads(int32_t addr, float m[4][4], int32_t base);
|
||||
void blit_polyobject(int code, float m[4][4]);
|
||||
|
||||
void slavesim_handle_bb0003(const int32_t *src);
|
||||
void slavesim_handle_200002(bitmap_rgb32 &bitmap, const int32_t *src);
|
||||
void slavesim_handle_200002(const int32_t *src);
|
||||
void slavesim_handle_300000(const int32_t *src);
|
||||
void slavesim_handle_233002(const int32_t *src);
|
||||
void simulate_slavedsp(bitmap_rgb32 &bitmap);
|
||||
void simulate_slavedsp();
|
||||
|
||||
void init_tables();
|
||||
void update_mixer();
|
||||
void update_palette();
|
||||
void recalc_czram();
|
||||
void draw_direct_poly(const uint16_t *src);
|
||||
void draw_polygons(bitmap_rgb32 &bitmap);
|
||||
void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
void draw_sprite_group(bitmap_rgb32 &bitmap, const rectangle &cliprect, const uint32_t *src, const uint32_t *attr, int num_sprites, int deltax, int deltay, int y_lowres);
|
||||
void draw_polygons();
|
||||
void draw_sprites();
|
||||
void draw_sprite_group(const uint32_t *src, const uint32_t *attr, int num_sprites, int deltax, int deltay, int y_lowres);
|
||||
void draw_text_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
void namcos22s_mix_text_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int prival);
|
||||
void namcos22_mix_text_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
@ -495,6 +495,7 @@ private:
|
||||
uint32_t m_old_coin_state;
|
||||
uint32_t m_credits1;
|
||||
uint32_t m_credits2;
|
||||
uint16_t m_pdp_base;
|
||||
uint32_t m_point_address;
|
||||
uint32_t m_point_data;
|
||||
uint16_t m_SerialDataSlaveToMasterNext;
|
||||
|
@ -986,7 +986,7 @@ void namcos22_state::draw_direct_poly(const uint16_t *src)
|
||||
* 0x07350 - guardrail
|
||||
* 0x061a8 - red car
|
||||
*/
|
||||
void namcos22_state::blit_single_quad(bitmap_rgb32 &bitmap, uint32_t color, uint32_t addr, float m[4][4], int32_t polyshift, int flags, int packetformat)
|
||||
void namcos22_state::blit_single_quad(uint32_t color, uint32_t addr, float m[4][4], int32_t polyshift, int flags, int packetformat)
|
||||
{
|
||||
int absolute_priority = m_absolute_priority;
|
||||
int32_t zsort;
|
||||
@ -1130,7 +1130,7 @@ void namcos22_state::blit_single_quad(bitmap_rgb32 &bitmap, uint32_t color, uint
|
||||
}
|
||||
|
||||
|
||||
void namcos22_state::blit_quads(bitmap_rgb32 &bitmap, int32_t addr, float m[4][4], int32_t base)
|
||||
void namcos22_state::blit_quads(int32_t addr, float m[4][4], int32_t base)
|
||||
{
|
||||
// int additionalnormals = 0;
|
||||
int chunklength = point_read(addr++);
|
||||
@ -1169,7 +1169,7 @@ void namcos22_state::blit_quads(bitmap_rgb32 &bitmap, int32_t addr, float m[4][4
|
||||
flags = point_read(addr + 1);
|
||||
color = point_read(addr + 2);
|
||||
bias = 0;
|
||||
blit_single_quad(bitmap, color, addr + 3, m, bias, flags, packetformat);
|
||||
blit_single_quad(color, addr + 3, m, bias, flags, packetformat);
|
||||
break;
|
||||
|
||||
case 0x18:
|
||||
@ -1182,7 +1182,7 @@ void namcos22_state::blit_quads(bitmap_rgb32 &bitmap, int32_t addr, float m[4][4
|
||||
flags = point_read(addr + 1);
|
||||
color = point_read(addr + 2);
|
||||
bias = point_read(addr + 3);
|
||||
blit_single_quad(bitmap, color, addr + 4, m, bias, flags, packetformat);
|
||||
blit_single_quad(color, addr + 4, m, bias, flags, packetformat);
|
||||
break;
|
||||
|
||||
case 0x10: /* vertex lighting */
|
||||
@ -1219,7 +1219,7 @@ void namcos22_state::blit_quads(bitmap_rgb32 &bitmap, int32_t addr, float m[4][4
|
||||
}
|
||||
}
|
||||
|
||||
void namcos22_state::blit_polyobject(bitmap_rgb32 &bitmap, int code, float m[4][4])
|
||||
void namcos22_state::blit_polyobject(int code, float m[4][4])
|
||||
{
|
||||
uint32_t addr1 = point_read(code);
|
||||
m_LitSurfaceCount = 0;
|
||||
@ -1230,7 +1230,7 @@ void namcos22_state::blit_polyobject(bitmap_rgb32 &bitmap, int code, float m[4][
|
||||
int32_t addr2 = point_read(addr1++);
|
||||
if (addr2 < 0)
|
||||
break;
|
||||
blit_quads(bitmap, addr2, m, code);
|
||||
blit_quads(addr2, m, code);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1318,7 +1318,7 @@ void namcos22_state::slavesim_handle_bb0003(const int32_t *src)
|
||||
transform_normal(&m_camera_lx, &m_camera_ly, &m_camera_lz, m_viewmatrix);
|
||||
}
|
||||
|
||||
void namcos22_state::slavesim_handle_200002(bitmap_rgb32 &bitmap, const int32_t *src)
|
||||
void namcos22_state::slavesim_handle_200002(const int32_t *src)
|
||||
{
|
||||
/**
|
||||
* 0xfffd
|
||||
@ -1351,7 +1351,7 @@ void namcos22_state::slavesim_handle_200002(bitmap_rgb32 &bitmap, const int32_t
|
||||
m[3][2] = src[0xc]; /* zpos */
|
||||
|
||||
matrix3d_multiply(m, m_viewmatrix);
|
||||
blit_polyobject(bitmap, m_PrimitiveID, m);
|
||||
blit_polyobject(m_PrimitiveID, m);
|
||||
}
|
||||
else if (m_PrimitiveID != 0 && m_PrimitiveID != 2)
|
||||
{
|
||||
@ -1393,7 +1393,7 @@ void namcos22_state::slavesim_handle_233002(const int32_t *src)
|
||||
m_objectshift = src[2];
|
||||
}
|
||||
|
||||
void namcos22_state::simulate_slavedsp(bitmap_rgb32 &bitmap)
|
||||
void namcos22_state::simulate_slavedsp()
|
||||
{
|
||||
const int32_t *src = 0x300 + (int32_t *)m_polygonram.target();
|
||||
|
||||
@ -1433,7 +1433,7 @@ void namcos22_state::simulate_slavedsp(bitmap_rgb32 &bitmap)
|
||||
break;
|
||||
|
||||
case 0x0d:
|
||||
slavesim_handle_200002(bitmap, src); /* render primitive */
|
||||
slavesim_handle_200002(src); /* render primitive */
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -1455,7 +1455,7 @@ void namcos22_state::simulate_slavedsp(bitmap_rgb32 &bitmap)
|
||||
|
||||
src += len;
|
||||
src++; /* always 0xffff */
|
||||
uint16_t next = 0x7fff & *src++; /* link to next command */
|
||||
uint16_t next = *src++ & 0x7fff; /* link to next command */
|
||||
if (next != (index + len + 1 + 1))
|
||||
{
|
||||
/* end of list */
|
||||
@ -1469,11 +1469,11 @@ void namcos22_state::simulate_slavedsp(bitmap_rgb32 &bitmap)
|
||||
}
|
||||
}
|
||||
|
||||
void namcos22_state::draw_polygons(bitmap_rgb32 &bitmap)
|
||||
void namcos22_state::draw_polygons()
|
||||
{
|
||||
if (m_slave_simulation_active)
|
||||
{
|
||||
simulate_slavedsp(bitmap);
|
||||
simulate_slavedsp();
|
||||
m_poly->wait("draw_polygons");
|
||||
}
|
||||
}
|
||||
@ -1482,7 +1482,7 @@ void namcos22_state::draw_polygons(bitmap_rgb32 &bitmap)
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
void namcos22_state::draw_sprite_group(bitmap_rgb32 &bitmap, const rectangle &cliprect, const uint32_t *src, const uint32_t *attr, int num_sprites, int deltax, int deltay, int y_lowres)
|
||||
void namcos22_state::draw_sprite_group(const uint32_t *src, const uint32_t *attr, int num_sprites, int deltax, int deltay, int y_lowres)
|
||||
{
|
||||
for (int i = 0; i < num_sprites; i++)
|
||||
{
|
||||
@ -1607,7 +1607,7 @@ void namcos22_state::draw_sprite_group(bitmap_rgb32 &bitmap, const rectangle &cl
|
||||
}
|
||||
}
|
||||
|
||||
void namcos22_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
void namcos22_state::draw_sprites()
|
||||
{
|
||||
const uint32_t *src;
|
||||
const uint32_t *attr;
|
||||
@ -1678,7 +1678,7 @@ void namcos22_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprec
|
||||
{
|
||||
src = &m_spriteram[0x04000/4 + base*4];
|
||||
attr = &m_spriteram[0x20000/4 + base*2];
|
||||
draw_sprite_group(bitmap, cliprect, src, attr, num_sprites, deltax, deltay, y_lowres);
|
||||
draw_sprite_group(src, attr, num_sprites, deltax, deltay, y_lowres);
|
||||
}
|
||||
|
||||
/* VICS RAM provides two additional banks (also many unknown regs here) */
|
||||
@ -1712,7 +1712,7 @@ void namcos22_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprec
|
||||
{
|
||||
src = &m_vics_data[(m_vics_control[0x48/4] & 0xffff)/4];
|
||||
attr = &m_vics_data[(m_vics_control[0x58/4] & 0xffff)/4];
|
||||
draw_sprite_group(bitmap, cliprect, src, attr, num_sprites, deltax, deltay, y_lowres);
|
||||
draw_sprite_group(src, attr, num_sprites, deltax, deltay, y_lowres);
|
||||
}
|
||||
|
||||
num_sprites = m_vics_control[0x60/4] >> 4 & 0x1ff; // no +1
|
||||
@ -1728,7 +1728,7 @@ void namcos22_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprec
|
||||
{
|
||||
src = &m_vics_data[(m_vics_control[0x68/4] & 0xffff)/4];
|
||||
attr = &m_vics_data[(m_vics_control[0x78/4] & 0xffff)/4];
|
||||
draw_sprite_group(bitmap, cliprect, src, attr, num_sprites, deltax, deltay, y_lowres);
|
||||
draw_sprite_group(src, attr, num_sprites, deltax, deltay, y_lowres);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2341,8 +2341,8 @@ uint32_t namcos22_state::screen_update_namcos22s(screen_device &screen, bitmap_r
|
||||
// layers
|
||||
uint8_t layer = nthbyte(m_mixer, 0x1f);
|
||||
if (layer & 4) draw_text_layer(screen, bitmap, cliprect);
|
||||
if (layer & 2) draw_sprites(bitmap, cliprect);
|
||||
if (layer & 1) draw_polygons(bitmap);
|
||||
if (layer & 2) draw_sprites();
|
||||
if (layer & 1) draw_polygons();
|
||||
m_poly->render_scene(screen, bitmap);
|
||||
if (layer & 4) namcos22s_mix_text_layer(screen, bitmap, cliprect, 6);
|
||||
|
||||
@ -2376,7 +2376,7 @@ uint32_t namcos22_state::screen_update_namcos22(screen_device &screen, bitmap_rg
|
||||
bitmap.fill(m_palette->pen(0x7fff), cliprect);
|
||||
|
||||
// layers
|
||||
draw_polygons(bitmap);
|
||||
draw_polygons();
|
||||
m_poly->render_scene(screen, bitmap);
|
||||
draw_text_layer(screen, bitmap, cliprect); // text layer + final mix(gamma)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user