summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/namcos22.cpp
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2018-10-04 12:30:39 +0200
committer hap <happppp@users.noreply.github.com>2018-10-04 12:30:56 +0200
commite740962d5fcea1cc640eb169cbeed7118771277d (patch)
tree314f6491684413307c5d5e63fc3438d3ed6c9645 /src/mame/drivers/namcos22.cpp
parentdc83a12d6707764a58738a5de9a781d4cf984afa (diff)
namcos22: small misc update (nw)
Diffstat (limited to 'src/mame/drivers/namcos22.cpp')
-rw-r--r--src/mame/drivers/namcos22.cpp249
1 files changed, 123 insertions, 126 deletions
diff --git a/src/mame/drivers/namcos22.cpp b/src/mame/drivers/namcos22.cpp
index 5c822bb8085..7a719b4c752 100644
--- a/src/mame/drivers/namcos22.cpp
+++ b/src/mame/drivers/namcos22.cpp
@@ -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)
+READ16_MEMBER(namcos22_state::pdp_begin_r)
{
- return m_polygonram[offs & 0x7fff];
-}
+ /**
+ * 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;
-void namcos22_state::pdp_polygonram_write(offs_t offs, uint32_t data)
-{
- m_polygonram[offs & 0x7fff] = data;
-}
+ if (!m_is_ss22)
+ return 0;
-READ16_MEMBER(namcos22_state::pdp_begin_r)
-{
- /* this feature appears to be only used on Super System22 hardware */
- if (m_is_ss22)
+ 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 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 0xfff0:
+ // NOP? used in 'PDP LOOP TEST'
+ 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 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 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 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 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 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 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 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 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 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 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 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 0xfffe:
- /* unknown */
- data = pdp_polygonram_read(offs++); /* ??? (usually 0x400 or 0) */
- 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 0xffff:
- /* "goto" command */
- offs = pdp_polygonram_read(offs);
- if (offs == start)
- {
- /* most commands end with a "goto self" */
- return 0;
- }
- break;
+ case 0xfffe:
+ // unknown
+ data = pdp_polygonram_read(offs++); // ??? (usually 0x400 or 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)