ps2sony: Some basic VU1 support, major file reshuffling, nw

This commit is contained in:
mooglyguy 2018-07-20 02:27:17 +02:00
parent bbfb764647
commit eed782f1e3
47 changed files with 595 additions and 225 deletions

View File

@ -1263,8 +1263,10 @@ if (CPUS["MIPS"]~=null) then
MAME_DIR .. "src/devices/cpu/mips/mips3fe.cpp",
MAME_DIR .. "src/devices/cpu/mips/mips3fe.h",
MAME_DIR .. "src/devices/cpu/mips/mips3drc.cpp",
MAME_DIR .. "src/devices/cpu/mips/sonyvu.cpp",
MAME_DIR .. "src/devices/cpu/mips/sonyvu.h",
MAME_DIR .. "src/devices/cpu/mips/ps2vu.cpp",
MAME_DIR .. "src/devices/cpu/mips/ps2vu.h",
MAME_DIR .. "src/devices/cpu/mips/ps2vif1.cpp",
MAME_DIR .. "src/devices/cpu/mips/ps2vif1.h",
}
end

View File

@ -3568,4 +3568,134 @@ if (MACHINES["I8291A"]~=null) then
}
end
---------------------------------------------------
--
--@src/devices/machine/ps2dma.h,MACHINES["PS2DMAC"] = true
---------------------------------------------------
if (MACHINES["PS2DMAC"]~=null) then
files {
MAME_DIR .. "src/devices/machine/ps2dma.cpp",
MAME_DIR .. "src/devices/machine/ps2dma.h",
}
end
---------------------------------------------------
--
--@src/devices/machine/ps2intc.h,MACHINES["PS2INTC"] = true
---------------------------------------------------
if (MACHINES["PS2INTC"]~=null) then
files {
MAME_DIR .. "src/devices/machine/ps2intc.cpp",
MAME_DIR .. "src/devices/machine/ps2intc.h",
}
end
---------------------------------------------------
--
--@src/devices/machine/ps2mc.h,MACHINES["PS2MC"] = true
---------------------------------------------------
if (MACHINES["PS2MC"]~=null) then
files {
MAME_DIR .. "src/devices/machine/ps2mc.cpp",
MAME_DIR .. "src/devices/machine/ps2mc.h",
}
end
---------------------------------------------------
--
--@src/devices/machine/ps2pad.h,MACHINES["PS2PAD"] = true
---------------------------------------------------
if (MACHINES["PS2PAD"]~=null) then
files {
MAME_DIR .. "src/devices/machine/ps2pad.cpp",
MAME_DIR .. "src/devices/machine/ps2pad.h",
}
end
---------------------------------------------------
--
--@src/devices/machine/ps2sif.h,MACHINES["PS2SIF"] = true
---------------------------------------------------
if (MACHINES["PS2SIF"]~=null) then
files {
MAME_DIR .. "src/devices/machine/ps2sif.cpp",
MAME_DIR .. "src/devices/machine/ps2sif.h",
}
end
---------------------------------------------------
--
--@src/devices/machine/ps2timer.h,MACHINES["PS2TIMER"] = true
---------------------------------------------------
if (MACHINES["PS2TIMER"]~=null) then
files {
MAME_DIR .. "src/devices/machine/ps2timer.cpp",
MAME_DIR .. "src/devices/machine/ps2timer.h",
}
end
---------------------------------------------------
--
--@src/devices/machine/iopcdvd.h,MACHINES["IOPCDVD"] = true
---------------------------------------------------
if (MACHINES["IOPCDVD"]~=null) then
files {
MAME_DIR .. "src/devices/machine/iopcdvd.cpp",
MAME_DIR .. "src/devices/machine/iopcdvd.h",
}
end
---------------------------------------------------
--
--@src/devices/machine/iopdma.h,MACHINES["IOPDMA"] = true
---------------------------------------------------
if (MACHINES["IOPDMA"]~=null) then
files {
MAME_DIR .. "src/devices/machine/iopdma.cpp",
MAME_DIR .. "src/devices/machine/iopdma.h",
}
end
---------------------------------------------------
--
--@src/devices/machine/iopintc.h,MACHINES["IOPINTC"] = true
---------------------------------------------------
if (MACHINES["IOPINTC"]~=null) then
files {
MAME_DIR .. "src/devices/machine/iopintc.cpp",
MAME_DIR .. "src/devices/machine/iopintc.h",
}
end
---------------------------------------------------
--
--@src/devices/machine/iopsio2.h,MACHINES["IOPSIO2"] = true
---------------------------------------------------
if (MACHINES["IOPSIO2"]~=null) then
files {
MAME_DIR .. "src/devices/machine/iopsio2.cpp",
MAME_DIR .. "src/devices/machine/iopsio2.h",
}
end
---------------------------------------------------
--
--@src/devices/machine/ioptimer.h,MACHINES["IOPTIMER"] = true
---------------------------------------------------
if (MACHINES["IOPTIMER"]~=null) then
files {
MAME_DIR .. "src/devices/machine/ioptimer.cpp",
MAME_DIR .. "src/devices/machine/ioptimer.h",
}
end

View File

@ -1471,3 +1471,15 @@ if (SOUNDS["UPD934G"]~=null) then
MAME_DIR .. "src/devices/sound/upd934g.h",
}
end
---------------------------------------------------
--
--@src/devices/sound/iopspu.h,SOUNDS["IOPSPU"] = true
---------------------------------------------------
if (SOUNDS["IOPSPU"]~=null) then
files {
MAME_DIR .. "src/devices/sound/iopspu.cpp",
MAME_DIR .. "src/devices/sound/iopspu.h",
}
end

View File

@ -1090,3 +1090,25 @@ if (VIDEOS["NEREID"]~=null) then
MAME_DIR .. "src/devices/video/nereid.h",
}
end
--------------------------------------------------
--
--@src/devices/video/ps2gif.h,VIDEOS["PS2GIF"] = true
--------------------------------------------------
if (VIDEOS["PS2GIF"]~=null) then
files {
MAME_DIR .. "src/devices/video/ps2gif.cpp",
MAME_DIR .. "src/devices/video/ps2gif.h",
}
end
--------------------------------------------------
--
--@src/devices/video/ps2gs.h,VIDEOS["PS2GS"] = true
--------------------------------------------------
if (VIDEOS["PS2GS"]~=null) then
files {
MAME_DIR .. "src/devices/video/ps2gs.cpp",
MAME_DIR .. "src/devices/video/ps2gs.h",
}
end

View File

@ -271,6 +271,7 @@ SOUNDS["MEA8000"] = true
SOUNDS["DAVE"] = true
--SOUNDS["LC7535"] = true
SOUNDS["UPD934G"] = true
SOUNDS["IOPSPU"] = true
--------------------------------------------------
-- specify available video cores
@ -360,6 +361,8 @@ VIDEOS["MGA2064W"] = true
VIDEOS["PPU2C0X"] = true
VIDEOS["DP8510"] = true
VIDEOS["MB88303"] = true
VIDEOS["PS2GS"] = true
VIDEOS["PS2GIF"] = true
--------------------------------------------------
-- specify available machine cores
@ -642,6 +645,17 @@ MACHINES["ADC0844"] = true
MACHINES["28FXXX"] = true
-- MACHINES["GEN_FIFO"] = true
MACHINES["Z80DAISY"] = true
MACHINES["PS2DMAC"] = true
MACHINES["PS2INTC"] = true
MACHINES["PS2MC"] = true
MACHINES["PS2PAD"] = true
MACHINES["PS2SIF"] = true
MACHINES["PS2TIMER"] = true
MACHINES["IOPCDVD"] = true
MACHINES["IOPDMA"] = true
MACHINES["IOPINTC"] = true
MACHINES["IOPSIO2"] = true
MACHINES["IOPTIMER"] = true
--------------------------------------------------
-- specify available bus cores
@ -3064,36 +3078,6 @@ files {
MAME_DIR .. "src/mame/drivers/pve500.cpp",
MAME_DIR .. "src/mame/drivers/smc777.cpp",
MAME_DIR .. "src/mame/drivers/ps2sony.cpp",
MAME_DIR .. "src/mame/machine/ps2dma.cpp",
MAME_DIR .. "src/mame/machine/ps2dma.h",
MAME_DIR .. "src/mame/machine/ps2gif.cpp",
MAME_DIR .. "src/mame/machine/ps2gif.h",
MAME_DIR .. "src/mame/machine/ps2intc.cpp",
MAME_DIR .. "src/mame/machine/ps2intc.h",
MAME_DIR .. "src/mame/machine/ps2mc.cpp",
MAME_DIR .. "src/mame/machine/ps2mc.h",
MAME_DIR .. "src/mame/machine/ps2pad.cpp",
MAME_DIR .. "src/mame/machine/ps2pad.h",
MAME_DIR .. "src/mame/machine/ps2sif.cpp",
MAME_DIR .. "src/mame/machine/ps2sif.h",
MAME_DIR .. "src/mame/machine/ps2timer.cpp",
MAME_DIR .. "src/mame/machine/ps2timer.h",
MAME_DIR .. "src/mame/machine/ps2vif1.cpp",
MAME_DIR .. "src/mame/machine/ps2vif1.h",
MAME_DIR .. "src/mame/machine/iopcdvd.cpp",
MAME_DIR .. "src/mame/machine/iopcdvd.h",
MAME_DIR .. "src/mame/machine/iopdma.cpp",
MAME_DIR .. "src/mame/machine/iopdma.h",
MAME_DIR .. "src/mame/machine/iopintc.cpp",
MAME_DIR .. "src/mame/machine/iopintc.h",
MAME_DIR .. "src/mame/machine/iopsio2.cpp",
MAME_DIR .. "src/mame/machine/iopsio2.h",
MAME_DIR .. "src/mame/machine/ioptimer.cpp",
MAME_DIR .. "src/mame/machine/ioptimer.h",
MAME_DIR .. "src/mame/audio/iopspu.cpp",
MAME_DIR .. "src/mame/audio/iopspu.h",
MAME_DIR .. "src/mame/video/ps2gs.cpp",
MAME_DIR .. "src/mame/video/ps2gs.h",
}
createMESSProjects(_target, _subtarget, "sord")

View File

@ -13,11 +13,11 @@
#include "mips3.h"
#include "mips3com.h"
#include "mips3dsm.h"
#include "ps2vu.h"
#define ENABLE_OVERFLOWS (0)
#define ENABLE_EE_ELF_LOADER (0)
#define ENABLE_EE_DECI2 (0)
#define ENABLE_EE_DECI2 (1)
/***************************************************************************
HELPER MACROS
@ -3035,7 +3035,7 @@ void r5900le_device::handle_extra_cop2(uint32_t op)
{
if (BIT(op, 24-field))
{
fd[field] = m_core->vacc[field] + fs[field] + ft[bc];
fd[field] = m_core->vacc[field] + fs[field] * ft[bc];
}
}
}
@ -3216,12 +3216,11 @@ void r5900le_device::handle_extra_cop2(uint32_t op)
const uint32_t bc = op & 3;
float *fs = m_core->vfr[rs];
float *ft = m_core->vfr[rt];
float *fd = m_core->vfr[rd];
for (int field = 0; field < 4; field++)
{
if (BIT(op, 24-field))
{
fd[field] = m_core->vacc[field] + fs[field] * ft[bc];
m_core->vacc[field] += fs[field] * ft[bc];
}
}
}

View File

@ -18,8 +18,8 @@ MIPS III/IV emulator.
#include "divtlb.h"
#include "cpu/drcfe.h"
#include "cpu/drcuml.h"
#include "sonyvu.h"
class sonyvu0_device;
// NEC VR4300 series is MIPS III with 32-bit address bus and slightly custom COP0/TLB
DECLARE_DEVICE_TYPE(VR4300BE, vr4300be_device)

View File

@ -10,6 +10,7 @@
#include "emu.h"
#include "mips3com.h"
#include "ps2vu.h"
/***************************************************************************

View File

@ -28,6 +28,7 @@
#include "mips3com.h"
#include "mips3fe.h"
#include "mips3dsm.h"
#include "ps2vu.h"
#include "cpu/drcfe.h"
#include "cpu/drcuml.h"
#include "cpu/drcumlsh.h"

View File

@ -11,6 +11,7 @@
#include "emu.h"
#include "mips3fe.h"
#include "mips3com.h"
#include "ps2vu.h"
//**************************************************************************

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 VU1 interface (VIF1) device skeleton
* Sony PlayStation 2 VU1 interface device skeleton
*
* To Do:
* Everything
@ -12,8 +12,11 @@
*/
#include "ps2vif1.h"
#include "ps2vu.h"
#include "video/ps2gs.h"
#include "video/ps2gif.h"
DEFINE_DEVICE_TYPE(SONYPS2_VIF1, ps2_vif1_device, "ps2vif1", "Playstation 2 VIF1")
DEFINE_DEVICE_TYPE(SONYPS2_VIF1, ps2_vif1_device, "ps2vif1", "PlayStation 2 VIF1")
/*static*/ const size_t ps2_vif1_device::BUFFER_SIZE = 0x40;
/*static*/ const uint32_t ps2_vif1_device::FORMAT_SIZE[] = {
@ -26,7 +29,7 @@ DEFINE_DEVICE_TYPE(SONYPS2_VIF1, ps2_vif1_device, "ps2vif1", "Playstation 2 VIF1
ps2_vif1_device::ps2_vif1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYPS2_VIF1, tag, owner, clock)
, device_execute_interface(mconfig, *this)
, m_gif(*this, finder_base::DUMMY_TAG)
, m_gs(*this, finder_base::DUMMY_TAG)
, m_vu1(*this, finder_base::DUMMY_TAG)
{
}
@ -510,13 +513,25 @@ void ps2_vif1_device::decode_vifcode()
logerror("%s: MODE: %03x\n", machine().describe_context(), m_mode);
break;
case 0x06: /* MSKPATH3 */
m_gif->set_path3_mask(BIT(m_code, 15));
m_gs->interface()->set_path3_mask(BIT(m_code, 15));
logerror("%s: MSKPATH3: %d\n", machine().describe_context(), BIT(m_code, 15));
break;
case 0x07: /* Oh hi, MARK */
m_mark = (uint16_t)m_code;
logerror("%s: MARK: %04x\n", machine().describe_context(), (uint16_t)m_mark);
break;
case 0x14: /* MSCAL */
logerror("%s: MSCAL %04x\n", machine().describe_context(), (uint16_t)m_code);
if (m_vu1->running())
{
m_icount--;
return;
}
else
{
m_vu1->start((uint16_t)m_code);
}
break;
case 0x20: /* STMASK */
m_data_needed = 1;
m_data_index = 0;
@ -585,7 +600,7 @@ void ps2_vif1_device::decode_vifcode()
if (trigger_interrupt)
{
printf("******************\n");
//printf("******************\n");
}
}

View File

@ -2,30 +2,31 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 VU1 interface (VIF1) device skeleton
* Sony PlayStation 2 VU1 interface device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_PS2VIF1_H
#define MAME_MACHINE_PS2VIF1_H
#ifndef DEVICES_MACHINE_VIF1_H
#define DEVICES_MACHINE_VIF1_H
#pragma once
#include "emu.h"
#include "cpu/mips/sonyvu.h"
#include "ps2gif.h"
class ps2_gs_device;
class sonyvu1_device;
class ps2_vif1_device : public device_t, public device_execute_interface
{
public:
template <typename T, typename U>
ps2_vif1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&gif_tag, U &&vu1_tag)
ps2_vif1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&gs_tag, U &&vu1_tag)
: ps2_vif1_device(mconfig, tag, owner, clock)
{
m_gif.set_tag(std::forward<T>(gif_tag));
m_gs.set_tag(std::forward<T>(gs_tag));
m_vu1.set_tag(std::forward<U>(vu1_tag));
}
@ -105,7 +106,7 @@ protected:
FMT_V4_5 = 0x0f,
};
required_device<ps2_gif_device> m_gif;
required_device<ps2_gs_device> m_gs;
required_device<sonyvu1_device> m_vu1;
int m_icount;
@ -156,4 +157,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYPS2_VIF1, ps2_vif1_device)
#endif // MAME_MACHINE_PS2VIF1_H
#endif // DEVICES_MACHINE_PS2VIF1_H

View File

@ -10,18 +10,20 @@
*/
#include "emu.h"
#include "sonyvu.h"
#include "ps2vu.h"
#include "ps2vif1.h"
#include "video/ps2gs.h"
#include "vudasm.h"
#include "debugger.h"
DEFINE_DEVICE_TYPE(SONYVU0, sonyvu0_device, "sonyvu0", "Sony PlayStation 2 VU0")
DEFINE_DEVICE_TYPE(SONYVU1, sonyvu1_device, "sonyvu1", "Sony PlayStation 2 VU1")
DEFINE_DEVICE_TYPE(SONYPS2_VU0, sonyvu0_device, "sonyvu0", "Sony PlayStation 2 VU0")
DEFINE_DEVICE_TYPE(SONYPS2_VU1, sonyvu1_device, "sonyvu1", "Sony PlayStation 2 VU1")
sonyvu_device::sonyvu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock,
address_map_constructor micro_cons, address_map_constructor vu_cons, chip_type chiptype, uint32_t mem_size)
: cpu_device(mconfig, type, tag, owner, clock)
, m_micro_config("micro", ENDIANNESS_LITTLE, 64, 12, 0, micro_cons)
, m_vu_config("vu", ENDIANNESS_LITTLE, 32, 12, 0, vu_cons)
, m_micro_config("micro", ENDIANNESS_BIG, 64, 12, 0, micro_cons)
, m_vu_config("vu", ENDIANNESS_BIG, 32, 12, 0, vu_cons)
, m_micro_space(nullptr)
, m_vu_space(nullptr)
, m_mem_size(mem_size)
@ -38,22 +40,45 @@ sonyvu_device::sonyvu_device(const machine_config &mconfig, device_type type, co
, m_i(0.0f)
, m_q(0.0f)
, m_pc(0)
, m_delay_pc(0)
, m_start_pc(0)
, m_running(false)
, m_icount(0)
{
}
sonyvu0_device::sonyvu0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: sonyvu_device(mconfig, SONYVU0, tag, owner, clock, address_map_constructor(FUNC(sonyvu0_device::micro_map), this), address_map_constructor(FUNC(sonyvu0_device::vu_map), this), CHIP_TYPE_VU0, 0x1000)
: sonyvu_device(mconfig, SONYPS2_VU0, tag, owner, clock, address_map_constructor(FUNC(sonyvu0_device::micro_map), this), address_map_constructor(FUNC(sonyvu0_device::vu_map), this), CHIP_TYPE_VU0, 0x1000)
, m_vu1(*this, finder_base::DUMMY_TAG)
{
}
sonyvu1_device::sonyvu1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: sonyvu_device(mconfig, SONYVU1, tag, owner, clock, address_map_constructor(FUNC(sonyvu1_device::micro_map), this), address_map_constructor(FUNC(sonyvu1_device::vu_map), this), CHIP_TYPE_VU0, 0x4000)
: sonyvu_device(mconfig, SONYPS2_VU1, tag, owner, clock, address_map_constructor(FUNC(sonyvu1_device::micro_map), this), address_map_constructor(FUNC(sonyvu1_device::vu_map), this), CHIP_TYPE_VU0, 0x4000)
, m_gs(*this, finder_base::DUMMY_TAG)
, m_vif(*this, "vif")
{
}
MACHINE_CONFIG_START(sonyvu1_device::device_add_mconfig)
MCFG_DEVICE_ADD(m_vif, SONYPS2_VIF1, 294912000/2, m_gs, DEVICE_SELF)
MACHINE_CONFIG_END
ps2_vif1_device* sonyvu1_device::interface()
{
return m_vif.target();
}
READ64_MEMBER(sonyvu1_device::vif_r)
{
return m_vif->mmio_r(space, offset, mem_mask);
}
WRITE64_MEMBER(sonyvu1_device::vif_w)
{
m_vif->mmio_w(space, offset, data, mem_mask);
}
void sonyvu_device::device_start()
{
// set our instruction counter
@ -82,8 +107,11 @@ void sonyvu_device::device_start()
save_item(NAME(m_i));
save_item(NAME(m_q));
save_item(NAME(m_pc));
save_item(NAME(m_delay_pc));
save_item(NAME(m_start_pc));
state_add(STATE_GENPC, "GENPC", m_pc).noshow();
state_add(STATE_GENPCBASE, "CURPC", m_pc).noshow();
state_add(SONYVU_TPC, "TPC", m_pc);
state_add(SONYVU_SF, "SF", m_status_flag);
state_add(SONYVU_MF, "MF", m_mac_flag);
@ -134,6 +162,8 @@ void sonyvu_device::device_reset()
m_i = 0.0f;
m_q = 0.0f;
m_pc = 0;
m_delay_pc = ~0;
m_start_pc = 0;
m_v[3] = 1.0f;
@ -331,6 +361,13 @@ void sonyvu_device::execute_run()
debugger_instruction_hook(m_pc);
const uint64_t op = m_micro_mem[(m_pc & m_mem_mask) >> 3];
m_pc += 8;
if (m_delay_pc != ~0)
{
m_pc = m_delay_pc;
m_delay_pc = ~0;
}
execute_upper((uint32_t)(op >> 32));
if (op & OP_UPPER_I)
{
@ -342,13 +379,16 @@ void sonyvu_device::execute_run()
execute_lower((uint32_t)op);
}
m_pc += 8;
m_icount--;
}
}
void sonyvu_device::execute_upper(const uint32_t op)
{
const int rs = (op >> 11) & 31;
const int rt = (op >> 16) & 31;
const int rd = (op >> 6) & 31;
switch (op & 0x3f)
{
case 0x00: case 0x01: case 0x02: case 0x03: // ADDbc
@ -358,7 +398,20 @@ void sonyvu_device::execute_upper(const uint32_t op)
printf("Unsupported VU instruction: SUBbc\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
break;
case 0x08: case 0x09: case 0x0a: case 0x0b: // MADDbc
printf("Unsupported VU instruction: MADDbc\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
if (rd)
{
const uint32_t bc = op & 3;
float *fs = m_vfr[rs];
float *ft = m_vfr[rt];
float *fd = m_vfr[rd];
for (int field = 0; field < 4; field++)
{
if (BIT(op, 24-field))
{
fd[field] = m_acc[field] + fs[field] * ft[bc];
}
}
}
break;
case 0x0c: case 0x0d: case 0x0e: case 0x0f: // MSUBbc
printf("Unsupported VU instruction: MSUBbc\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
@ -444,14 +497,37 @@ void sonyvu_device::execute_upper(const uint32_t op)
printf("Unsupported VU instruction: SUBAbc\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
break;
case 0x08: case 0x09: case 0x0a: case 0x0b: // MADDAbc
printf("Unsupported VU instruction: MADDAbc\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
if (rd)
{
const uint32_t bc = op & 3;
float *fs = m_vfr[rs];
float *ft = m_vfr[rt];
for (int field = 0; field < 4; field++)
{
if (BIT(op, 24-field))
{
m_acc[field] += fs[field] * ft[bc];
}
}
}
break;
case 0x0c: case 0x0d: case 0x0e: case 0x0f: // MSUBAbc
printf("Unsupported VU instruction: MSUBAbc\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
break;
case 0x18: case 0x19: case 0x1a: case 0x1b: // MULAbc
printf("Unsupported VU instruction: MULAbc\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
{
const uint32_t bc = op & 3;
float *fs = m_vfr[rs];
float *ft = m_vfr[rt];
for (int field = 0; field < 4; field++)
{
if (BIT(op, 24-field))
{
m_acc[field] = fs[field] * ft[bc];
}
}
break;
}
case 0x10: // ITOF0
printf("Unsupported VU instruction: ITOF0\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
break;
@ -546,6 +622,11 @@ void sonyvu_device::execute_upper(const uint32_t op)
void sonyvu_device::execute_lower(const uint32_t op)
{
const int rd = (op >> 6) & 31;
const int rs = (op >> 11) & 31;
const int rt = (op >> 16) & 31;
const int dest = (op >> 21) & 15;
switch ((op >> 25) & 0x7f)
{
case 0x00: // LQ
@ -561,7 +642,8 @@ void sonyvu_device::execute_lower(const uint32_t op)
printf("Unsupported VU instruction: ISW\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
break;
case 0x08: // IADDIU
printf("Unsupported VU instruction: IADDIU\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
if (rt)
m_vcr[rt] = (uint16_t)(m_vcr[rs] + (op & 0x7ff));
break;
case 0x09: // ISUBIU
printf("Unsupported VU instruction: ISUBIU\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
@ -606,10 +688,12 @@ void sonyvu_device::execute_lower(const uint32_t op)
printf("Unsupported VU instruction: B\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
break;
case 0x21: // BAL
printf("Unsupported VU instruction: BAL\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
if (rt)
m_vcr[rt] = m_pc + 8;
m_delay_pc = (m_pc + (immediate_s11(op) * 8)) & m_mem_mask;
break;
case 0x24: // JR
printf("Unsupported VU instruction: JR\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
m_delay_pc = m_vcr[rs] & m_mem_mask;
break;
case 0x25: // JALR
printf("Unsupported VU instruction: JALR\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
@ -639,17 +723,51 @@ void sonyvu_device::execute_lower(const uint32_t op)
uint8_t type4_op = ((op & 0x7c0) >> 4) | (op & 3);
switch (type4_op)
{
case 0x30: // MOVE
case 0x30:
if (rs == 0 && rt == 0 && dest == 0)
{ // NOP
}
else
{ // MOVE
printf("Unsupported VU instruction: MOVE\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
}
break;
case 0x31: // MR32
printf("Unsupported VU instruction: MR32\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
break;
case 0x34: // LQI
printf("Unsupported VU instruction: LQI\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
{
if (rt)
{
uint16_t addr = (m_vcr[rs] << 2) & m_mem_mask;
float* vumem = reinterpret_cast<float*>(&m_vu_mem[0]);
float* base = m_vfr[rt];
for (int field = 0; field < 4; field++)
{
if (BIT(op, 24-field))
{
base[field] = vumem[addr + field];
}
}
m_vcr[rs] = (uint16_t)(m_vcr[rs] + 1);
}
break;
}
case 0x35: // SQI
printf("Unsupported VU instruction: SQI\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
if (rt)
{
uint16_t addr = (m_vcr[rt] << 2) & m_mem_mask;
float* vumem = reinterpret_cast<float*>(&m_vu_mem[0]);
float* base = m_vfr[rs];
for (int field = 0; field < 4; field++)
{
if (BIT(op, 24-field))
{
vumem[addr + field] = base[field];
}
}
m_vcr[rt] = (uint16_t)(m_vcr[rt] + 1);
}
break;
case 0x36: // LQD
printf("Unsupported VU instruction: LQD\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
@ -758,19 +876,23 @@ void sonyvu_device::execute_lower(const uint32_t op)
switch (op & 0x3f)
{
case 0x30: // IADD
printf("Unsupported VU instruction: IADD\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
if (rd)
m_vcr[rd] = (uint16_t)(m_vcr[rs] + m_vcr[rt]);
break;
case 0x31: // ISUB
printf("Unsupported VU instruction: ISUB\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
if (rd)
m_vcr[rd] = (uint16_t)(m_vcr[rs] - m_vcr[rt]);
break;
case 0x32: // IADDI
printf("Unsupported VU instruction: IADDI\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
break;
case 0x34: // IAND
printf("Unsupported VU instruction: IAND\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
if (rd)
m_vcr[rd] = (uint16_t)(m_vcr[rs] & m_vcr[rt]);
break;
case 0x35: // IOR
printf("Unsupported VU instruction: IOR\n"); fflush(stdout); fatalerror("Unsupported VU instruction\n"); break;
if (rd)
m_vcr[rd] = (uint16_t)(m_vcr[rs] | m_vcr[rt]);
break;
default:
logerror("%s: %08x: Unknown lower opcode %08x\n", machine().describe_context(), m_pc, op);
@ -876,3 +998,15 @@ void sonyvu_device::write_micro_mem(uint32_t address, uint64_t data)
{
m_micro_mem[(address & m_mem_mask) >> 3] = data;
}
void sonyvu_device::start(uint32_t address)
{
m_pc = address & m_mem_mask;
m_running = true;
}
int16_t sonyvu_device::immediate_s11(const uint32_t op)
{
int16_t sval = (int16_t)(op << 5);
return sval >> 5;
}

View File

@ -9,11 +9,14 @@
*
*/
#ifndef MAME_CPU_MIPS_SONYVU_H
#define MAME_CPU_MIPS_SONYVU_H
#ifndef MAME_CPU_MIPS_PS2VU_H
#define MAME_CPU_MIPS_PS2VU_H
#pragma once
class ps2_gs_device;
class ps2_vif1_device;
enum
{
SONYVU_TPC,
@ -79,6 +82,9 @@ public:
void write_micro_mem(uint32_t address, uint64_t data);
float* vector_regs() { return m_v; }
bool running() const { return m_running; }
void start(uint32_t address);
protected:
enum chip_type
{
@ -122,6 +128,8 @@ protected:
void execute_upper(const uint32_t op);
void execute_lower(const uint32_t op);
static int16_t immediate_s11(const uint32_t op);
// address spaces
const address_space_config m_micro_config;
const address_space_config m_vu_config;
@ -137,7 +145,7 @@ protected:
uint32_t* m_vimem;
float m_vfr[32][4]; // 0..3 = x..w
uint32_t m_vcr[16];
uint32_t m_vcr[32];
float m_acc[4];
float* m_v;
@ -150,6 +158,9 @@ protected:
float m_q;
uint32_t m_pc;
uint32_t m_delay_pc;
uint32_t m_start_pc;
bool m_running;
int m_icount;
@ -158,17 +169,33 @@ protected:
class sonyvu1_device : public sonyvu_device
{
public:
template <typename T>
sonyvu1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&gs_tag)
: sonyvu1_device(mconfig, tag, owner, clock)
{
m_gs.set_tag(std::forward<T>(gs_tag));
}
sonyvu1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
ps2_vif1_device* interface();
DECLARE_READ64_MEMBER(vif_r);
DECLARE_WRITE64_MEMBER(vif_w);
protected:
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
void micro_map(address_map &map);
void vu_map(address_map &map);
required_device<ps2_gs_device> m_gs;
required_device<ps2_vif1_device> m_vif;
float m_p;
};
@ -203,7 +230,7 @@ protected:
uint32_t m_cmsar1;
};
DECLARE_DEVICE_TYPE(SONYVU1, sonyvu1_device)
DECLARE_DEVICE_TYPE(SONYVU0, sonyvu0_device)
DECLARE_DEVICE_TYPE(SONYPS2_VU1, sonyvu1_device)
DECLARE_DEVICE_TYPE(SONYPS2_VU0, sonyvu0_device)
#endif // MAME_CPU_MIPS_SONYVU_H
#endif // MAME_CPU_MIPS_PS2VU_H

View File

@ -15,7 +15,7 @@
#define ENABLE_OVERFLOWS (0)
#define ENABLE_IOP_KPUTS (0)
#define ENABLE_IOP_KPUTS (1)
/***************************************************************************

View File

@ -262,6 +262,9 @@ void sonyvu_disassembler::dasm_lower(uint32_t pc, uint32_t op, std::ostream &str
switch (type4_op)
{
case 0x30: // MOVE
if (((op >> 21) & 15) == 0 && rt == 0 && rs == 0)
util::stream_format(stream, "nop");
else
util::stream_format(stream, "move.%s %s%s %s%s", dest, VFREG[rt], destc, VFREG[rs], dest);
break;
case 0x31: // MR32
@ -386,7 +389,7 @@ void sonyvu_disassembler::dasm_lower(uint32_t pc, uint32_t op, std::ostream &str
util::stream_format(stream, "isub %s, %s, %s", VIREG[rd], VIREG[rs], VIREG[rt]);
break;
case 0x32: // IADDI
util::stream_format(stream, "iaddi %s, %s, %s", VIREG[rt], VIREG[rs], signed_5bit(op));
util::stream_format(stream, "iaddi %s, %s, %s", VIREG[rt], VIREG[rs], signed_5bit_rd(op));
break;
case 0x34: // IAND
util::stream_format(stream, "iand %s, %s, %s", VIREG[rd], VIREG[rs], VIREG[rt]);
@ -424,6 +427,25 @@ std::string sonyvu_disassembler::signed_5bit(uint16_t val)
return util::string_format("$%x", sval);
}
std::string sonyvu_disassembler::signed_5bit_rd(uint16_t val)
{
int16_t sval = (int32_t)((val >> 6) & 0x1f);
sval <<= 11;
sval >>= 11;
if (sval < 0)
return util::string_format("-$%x", -sval);
else
return util::string_format("$%x", sval);
}
std::string sonyvu_disassembler::unsigned_11bit(uint16_t val)
{
val <<= 5;
val >>= 5;
return util::string_format("$%x", val);
}
std::string sonyvu_disassembler::signed_11bit(uint16_t val)
{
int16_t sval = (int32_t)val;
@ -447,15 +469,3 @@ std::string sonyvu_disassembler::signed_11bit_x8(uint16_t val)
else
return util::string_format("$%x", sval * 8);
}
std::string sonyvu_disassembler::signed_15bit(uint16_t val)
{
int16_t sval = (int32_t)val;
sval <<= 1;
sval >>= 1;
if (sval < 0)
return util::string_format("-$%x", -sval);
else
return util::string_format("$%x", sval);
}

View File

@ -24,6 +24,8 @@ private:
void dasm_upper(uint32_t pc, uint32_t op, std::ostream &stream);
void dasm_lower(uint32_t pc, uint32_t op, std::ostream &stream);
std::string signed_5bit(uint16_t val);
std::string signed_5bit_rd(uint16_t val);
std::string unsigned_11bit(uint16_t val);
std::string signed_11bit(uint16_t val);
std::string signed_11bit_x8(uint16_t val);
std::string signed_15bit(uint16_t val);

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 disc controller device skeleton
* Sony PlayStation 2 disc controller device skeleton
*
* To Do:
* Everything
@ -11,9 +11,9 @@
#include "iopcdvd.h"
/*static*/ const size_t iop_cdvd_device::BUFFER_SIZE = 16; // Total guess
DEFINE_DEVICE_TYPE(SONYIOP_CDVD, iop_cdvd_device, "iopcdvd", "PlayStation 2 disc controller")
DEFINE_DEVICE_TYPE(SONYIOP_CDVD, iop_cdvd_device, "iopcdvd", "Playstation 2 disc controller")
/*static*/ const size_t iop_cdvd_device::BUFFER_SIZE = 16; // Total guess
iop_cdvd_device::iop_cdvd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYIOP_CDVD, tag, owner, clock)

View File

@ -2,15 +2,15 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 disc controller device skeleton
* Sony PlayStation 2 disc controller device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_IOPCDVD_H
#define MAME_MACHINE_IOPCDVD_H
#ifndef DEVICES_MACHINE_IOPCDVD_H
#define DEVICES_MACHINE_IOPCDVD_H
#pragma once
@ -70,4 +70,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYIOP_CDVD, iop_cdvd_device)
#endif // MAME_MACHINE_IOPCDVD_H
#endif // DEVICES_MACHINE_IOPCDVD_H

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 IOP DMA device skeleton
* Sony PlayStation 2 IOP DMAC device skeleton
*
* To Do:
* Everything
@ -11,8 +11,9 @@
#include "emu.h"
#include "iopdma.h"
#include "cpu/mips/ps2vu.h"
DEFINE_DEVICE_TYPE(SONYIOP_DMA, iop_dma_device, "iopdma", "Sony IOP DMA")
DEFINE_DEVICE_TYPE(SONYIOP_DMA, iop_dma_device, "iopdma", "PlayStation 2 IOP DMAC")
iop_dma_device::iop_dma_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYIOP_DMA, tag, owner, clock)

View File

@ -2,15 +2,15 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 IOP DMA device skeleton
* Sony PlayStation 2 IOP DMAC device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_IOPDMA_H
#define MAME_MACHINE_IOPDMA_H
#ifndef DEVICES_MACHINE_IOPDMA_H
#define DEVICES_MACHINE_IOPDMA_H
#pragma once
@ -18,7 +18,7 @@
#include "ps2sif.h"
#include "iopintc.h"
#include "iopsio2.h"
#include "audio/iopspu.h"
#include "sound/iopspu.h"
class iop_dma_device : public device_t, public device_execute_interface
{
@ -161,4 +161,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYIOP_DMA, iop_dma_device)
#endif // MAME_MACHINE_IOPDMA_H
#endif // DEVICES_MACHINE_IOPDMA_H

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 IOP interrupt controller device skeleton
* Sony PlayStation 2 IOP interrupt controller device skeleton
*
* To Do:
* Everything
@ -11,7 +11,7 @@
#include "iopintc.h"
DEFINE_DEVICE_TYPE(SONYIOP_INTC, iop_intc_device, "iopintc", "Playstation 2 IOP INTC")
DEFINE_DEVICE_TYPE(SONYIOP_INTC, iop_intc_device, "iopintc", "PlayStation 2 IOP INTC")
iop_intc_device::iop_intc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYIOP_INTC, tag, owner, clock)

View File

@ -2,15 +2,15 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 IOP interrupt controller device skeleton
* Sony PlayStation 2 IOP interrupt controller device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_IOPINTC_H
#define MAME_MACHINE_IOPINTC_H
#ifndef DEVICES_MACHINE_IOPINTC_H
#define DEVICES_MACHINE_IOPINTC_H
#pragma once
@ -58,4 +58,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYIOP_INTC, iop_intc_device)
#endif // MAME_MACHINE_IOPINTC_H
#endif // DEVICES_MACHINE_IOPINTC_H

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 SIO2 device skeleton
* Sony PlayStation 2 IOP SIO2 device skeleton
*
* To Do:
* Everything
@ -11,9 +11,9 @@
#include "iopsio2.h"
/*static*/ const size_t iop_sio2_device::BUFFER_SIZE = 512; // total guess based on memcard block size
DEFINE_DEVICE_TYPE(SONYIOP_SIO2, iop_sio2_device, "iopsio2", "PlayStation 2 IOP SIO2")
DEFINE_DEVICE_TYPE(SONYIOP_SIO2, iop_sio2_device, "iopsio2", "Playstation 2 SIO2")
/*static*/ const size_t iop_sio2_device::BUFFER_SIZE = 512; // total guess based on memcard block size
iop_sio2_device::iop_sio2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYIOP_SIO2, tag, owner, clock)

View File

@ -2,15 +2,15 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 SIO2 device skeleton
* Sony PlayStation 2 IOP SIO2 device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_IOPSIO2_H
#define MAME_MACHINE_IOPSIO2_H
#ifndef DEVICES_MACHINE_IOPSIO2_H
#define DEVICES_MACHINE_IOPSIO2_H
#pragma once
@ -87,4 +87,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYIOP_SIO2, iop_sio2_device)
#endif // MAME_MACHINE_IOPSIO2_H
#endif // DEVICES_MACHINE_IOPSIO2_H

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 IOP Timer device skeleton
* Sony PlayStation 2 IOP timer device skeleton
*
* To Do:
* Everything
@ -12,7 +12,7 @@
#include "emu.h"
#include "ioptimer.h"
DEFINE_DEVICE_TYPE(SONYIOP_TIMER, iop_timer_device, "ioptimer", "Sony IOP Timer")
DEFINE_DEVICE_TYPE(SONYIOP_TIMER, iop_timer_device, "ioptimer", "PlayStation 2 IOP timer")
iop_timer_device::iop_timer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYIOP_TIMER, tag, owner, clock)

View File

@ -2,19 +2,18 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 IOP Timer device skeleton
* Sony PlayStation 2 IOP timer device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_IOPTIMER_H
#define MAME_MACHINE_IOPTIMER_H
#ifndef DEVICES_MACHINE_IOPTIMER_H
#define DEVICES_MACHINE_IOPTIMER_H
#pragma once
#define MCFG_IOP_TIMER_IRQ_CALLBACK(_write) \
downcast<iop_timer_device &>(*device).set_int_cb(DEVCB_##_write);
@ -96,4 +95,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYIOP_TIMER, iop_timer_device)
#endif // MAME_MACHINE_IOPTIMER_H
#endif // DEVICES_MACHINE_IOPTIMER_H

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 DMAC device skeleton
* Sony PlayStation 2 EE DMA controller device skeleton
*
* To Do:
* Everything
@ -12,8 +12,10 @@
#include "ps2sif.h"
#include "ps2dma.h"
#include "cpu/mips/mips3.h"
#include "cpu/mips/ps2vif1.h"
#include "video/ps2gif.h"
DEFINE_DEVICE_TYPE(SONYPS2_DMAC, ps2_dmac_device, "ps2dmac", "EE Core DMAC")
DEFINE_DEVICE_TYPE(SONYPS2_DMAC, ps2_dmac_device, "ps2dmac", "PlayStation 2 EE DMAC")
ps2_dmac_device::ps2_dmac_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYPS2_DMAC, tag, owner, clock)
@ -21,8 +23,8 @@ ps2_dmac_device::ps2_dmac_device(const machine_config &mconfig, const char *tag,
, m_ee(*this, finder_base::DUMMY_TAG)
, m_ram(*this, finder_base::DUMMY_TAG)
, m_sif(*this, finder_base::DUMMY_TAG)
, m_gif(*this, finder_base::DUMMY_TAG)
, m_vif1(*this, finder_base::DUMMY_TAG)
, m_gs(*this, finder_base::DUMMY_TAG)
, m_vu1(*this, finder_base::DUMMY_TAG)
, m_icount(0)
{
}
@ -129,7 +131,7 @@ void ps2_dmac_device::transfer_vif1()
if (count)
{
//logerror("%s: DMAC VIF1 quadword count: %08x\n", machine().describe_context(), count);
if (m_vif1->fifo_available(4))
if (m_vu1->interface()->fifo_available(4))
{
uint32_t addr = channel.addr();
if (BIT(addr, 31))
@ -141,7 +143,7 @@ void ps2_dmac_device::transfer_vif1()
words[word] = space.read_dword(addr);
addr += 4;
}
m_vif1->dma_write(((uint64_t)words[3] << 32) | words[2], ((uint64_t)words[1] << 32) | words[0]);
m_vu1->interface()->dma_write(((uint64_t)words[3] << 32) | words[2], ((uint64_t)words[1] << 32) | words[0]);
channel.set_addr(channel.addr() + 0x10);
channel.set_quadword_count(count - 1);
}
@ -151,7 +153,7 @@ void ps2_dmac_device::transfer_vif1()
logerror("%s: DMAC VIF1 end tag\n", machine().describe_context());
transfer_finish(VIF1);
}
else if (m_vif1->fifo_available(2))
else if (m_vu1->interface()->fifo_available(2))
{
logerror("%s: DMAC VIF1 following source tag\n", machine().describe_context());
uint32_t tag_addr = channel.tag_addr();
@ -164,7 +166,7 @@ void ps2_dmac_device::transfer_vif1()
words[word] = space.read_dword(tag_addr);
tag_addr += 4;
}
m_vif1->tag_write(words);
m_vu1->interface()->tag_write(words);
follow_source_tag(VIF1);
}
}
@ -193,7 +195,7 @@ void ps2_dmac_device::transfer_gif()
words[word] = space.read_dword(addr);
addr += 4;
}
m_gif->write_path3(((uint64_t)words[3] << 32) | words[2], ((uint64_t)words[1] << 32) | words[0]);
m_gs->interface()->write_path3(((uint64_t)words[3] << 32) | words[2], ((uint64_t)words[1] << 32) | words[0]);
channel.set_addr(channel.addr() + 0x10);
channel.set_quadword_count(count - 1);
}

View File

@ -2,34 +2,34 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 DMAC device skeleton
* Sony PlayStation 2 EE DMA controller device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_PS2DMAC_H
#define MAME_MACHINE_PS2DMAC_H
#ifndef DEVICES_MACHINE_PS2DMAC_H
#define DEVICES_MACHINE_PS2DMAC_H
#pragma once
#include "emu.h"
#include "ps2gif.h"
#include "ps2vif1.h"
#include "video/ps2gs.h"
#include "cpu/mips/ps2vu.h"
class ps2_dmac_device : public device_t, public device_execute_interface
{
public:
template <typename T, typename U, typename V, typename W, typename X>
ps2_dmac_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&ee_tag, U &&ram_tag, V &&sif_tag, W &&gif_tag, X &&vif1_tag)
ps2_dmac_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&ee_tag, U &&ram_tag, V &&sif_tag, W &&gs_tag, X &&vu1_tag)
: ps2_dmac_device(mconfig, tag, owner, clock)
{
m_ee.set_tag(std::forward<T>(ee_tag));
m_ram.set_tag(std::forward<U>(ram_tag));
m_sif.set_tag(std::forward<V>(sif_tag));
m_gif.set_tag(std::forward<W>(gif_tag));
m_vif1.set_tag(std::forward<X>(vif1_tag));
m_gs.set_tag(std::forward<W>(gs_tag));
m_vu1.set_tag(std::forward<X>(vu1_tag));
}
ps2_dmac_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
@ -128,8 +128,8 @@ protected:
required_device<cpu_device> m_ee;
required_shared_ptr<uint64_t> m_ram;
required_device<ps2_sif_device> m_sif;
required_device<ps2_gif_device> m_gif;
required_device<ps2_vif1_device> m_vif1;
required_device<ps2_gs_device> m_gs;
required_device<sonyvu1_device> m_vu1;
int m_icount;
@ -148,4 +148,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYPS2_DMAC, ps2_dmac_device)
#endif // MAME_MACHINE_PS2DMAC_H
#endif // DEVICES_MACHINE_PS2DMAC_H

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 EE interrupt controller device skeleton
* Sony PlayStation 2 EE interrupt controller device skeleton
*
* To Do:
* Everything
@ -10,8 +10,9 @@
*/
#include "ps2intc.h"
#include "cpu/mips/ps2vu.h"
DEFINE_DEVICE_TYPE(SONYPS2_INTC, ps2_intc_device, "ps2intc", "Playstation 2 EE INTC")
DEFINE_DEVICE_TYPE(SONYPS2_INTC, ps2_intc_device, "ps2intc", "PlayStation 2 EE INTC")
ps2_intc_device::ps2_intc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYPS2_INTC, tag, owner, clock)

View File

@ -2,15 +2,15 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 EE interrupt controller device skeleton
* Sony PlayStation 2 EE interrupt controller device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_PS2INTC_H
#define MAME_MACHINE_PS2INTC_H
#ifndef DEVICES_MACHINE_PS2INTC_H
#define DEVICES_MACHINE_PS2INTC_H
#pragma once
@ -67,4 +67,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYPS2_INTC, ps2_intc_device)
#endif // MAME_MACHINE_PS2INTC_H
#endif // DEVICES_MACHINE_PS2INTC_H

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 memory card skeleton
* Sony PlayStation 2 memory card device skeleton
*
* To Do:
* Everything
@ -11,11 +11,11 @@
#include "ps2mc.h"
DEFINE_DEVICE_TYPE(SONYPS2_MC, ps2_mc_device, "ps2mc", "PlayStation 2 Memory Card")
/*static*/ const size_t ps2_mc_device::BUFFER_SIZE = 512; // Total guess
/*static*/ const uint8_t ps2_mc_device::DEFAULT_TERMINATOR = 0x55;
DEFINE_DEVICE_TYPE(SONYPS2_MC, ps2_mc_device, "ps2mc", "PlayStation 2 Memory Card")
ps2_mc_device::ps2_mc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYPS2_MC, tag, owner, clock)
{

View File

@ -2,15 +2,15 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 memory card skeleton
* Sony PlayStation 2 memory card device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_PS2MC_H
#define MAME_MACHINE_PS2MC_H
#ifndef DEVICES_MACHINE_PS2MC_H
#define DEVICES_MACHINE_PS2MC_H
#pragma once
@ -72,4 +72,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYPS2_MC, ps2_mc_device)
#endif // MAME_MACHINE_PS2MC_H
#endif // DEVICES_MACHINE_PS2MC_H

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 DualShock 2 ('pad') device skeleton
* Sony DualShock 2 device skeleton
*
* To Do:
* Everything
@ -11,9 +11,9 @@
#include "ps2pad.h"
/*static*/ const size_t ps2_pad_device::BUFFER_SIZE = 64; // Total guess
DEFINE_DEVICE_TYPE(SONYPS2_PAD, ps2_pad_device, "ps2pad", "Sony DualShock 2")
DEFINE_DEVICE_TYPE(SONYPS2_PAD, ps2_pad_device, "ps2pad", "DualShock 2")
/*static*/ const size_t ps2_pad_device::BUFFER_SIZE = 64; // Total guess
ps2_pad_device::ps2_pad_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYPS2_PAD, tag, owner, clock)

View File

@ -2,15 +2,15 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 DualShock 2 ('pad') device skeleton
* Sony DualShock 2 device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_PS2PAD_H
#define MAME_MACHINE_PS2PAD_H
#ifndef DEVICES_MACHINE_PS2PAD_H
#define DEVICES_MACHINE_PS2PAD_H
#pragma once
@ -75,4 +75,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYPS2_PAD, ps2_pad_device)
#endif // MAME_MACHINE_PS2PAD_H
#endif // DEVICES_MACHINE_PS2PAD_H

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 SIF device skeleton
* Sony PlayStation 2 SIF device skeleton
*
* To Do:
* Everything
@ -10,11 +10,12 @@
*/
#include "ps2sif.h"
#include "cpu/mips/ps2vu.h"
DEFINE_DEVICE_TYPE(SONYPS2_SIF, ps2_sif_device, "ps2sif", "PlayStation 2 SIF")
/*static*/ const size_t ps2_sif_device::MAX_FIFO_DEPTH = 0x20;
DEFINE_DEVICE_TYPE(SONYPS2_SIF, ps2_sif_device, "ps2sif", "Playstation 2 SIF")
ps2_sif_device::ps2_sif_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYPS2_SIF, tag, owner, clock)
, m_intc(*this, finder_base::DUMMY_TAG)

View File

@ -2,15 +2,15 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 SIF device skeleton
* Sony PlayStation 2 SIF device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_PS2SIF_H
#define MAME_MACHINE_PS2SIF_H
#ifndef DEVICES_MACHINE_PS2SIF_H
#define DEVICES_MACHINE_PS2SIF_H
#pragma once
@ -58,4 +58,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYPS2_SIF, ps2_sif_device)
#endif // MAME_MACHINE_PS2SIF_H
#endif // DEVICES_MACHINE_PS2SIF_H

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 Timer device skeleton
* Sony PlayStation 2 EE timer device skeleton
*
* To Do:
* Everything
@ -12,7 +12,7 @@
#include "emu.h"
#include "ps2timer.h"
DEFINE_DEVICE_TYPE(SONYPS2_TIMER, ps2_timer_device, "ps2timer", "EE Core Timer")
DEFINE_DEVICE_TYPE(SONYPS2_TIMER, ps2_timer_device, "ps2timer", "PlayStation 2 EE Core Timer")
ps2_timer_device::ps2_timer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYPS2_TIMER, tag, owner, clock)

View File

@ -2,19 +2,18 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 Timer device skeleton
* Sony PlayStation 2 EE timer device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_PS2TIMER_H
#define MAME_MACHINE_PS2TIMER_H
#ifndef DEVICES_MACHINE_PS2TIMER_H
#define DEVICES_MACHINE_PS2TIMER_H
#pragma once
class ps2_timer_device : public device_t
{
public:
@ -114,4 +113,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYPS2_TIMER, ps2_timer_device)
#endif // MAME_MACHINE_PS2TIMER_H
#endif // DEVICES_MACHINE_PS2TIMER_H

View File

@ -2,7 +2,7 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 IOP SPU device skeleton
* Sony PlayStation 2 IOP SPU device skeleton
*
* To Do:
* Everything
@ -11,7 +11,7 @@
#include "iopspu.h"
DEFINE_DEVICE_TYPE(SONYIOP_SPU, iop_spu_device, "iopspu", "Playstation 2 IOP SPU")
DEFINE_DEVICE_TYPE(SONYIOP_SPU, iop_spu_device, "iopspu", "PlayStation 2 IOP SPU")
iop_spu_device::iop_spu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYIOP_SPU, tag, owner, clock)

View File

@ -2,15 +2,15 @@
// copyright-holders:Ryan Holtz
/******************************************************************************
*
* Sony Playstation 2 IOP SPU device skeleton
* Sony PlayStation 2 IOP SPU device skeleton
*
* To Do:
* Everything
*
*/
#ifndef MAME_MACHINE_IOPSPU_H
#define MAME_MACHINE_IOPSPU_H
#ifndef DEVICES_MACHINE_IOPSPU_H
#define DEVICES_MACHINE_IOPSPU_H
#pragma once
@ -98,4 +98,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYIOP_SPU, iop_spu_device)
#endif // MAME_MACHINE_IOPSPU_H
#endif // DEVICES_MACHINE_IOPSPU_H

View File

@ -10,6 +10,8 @@
*/
#include "ps2gif.h"
#include "ps2gs.h"
#include "cpu/mips/ps2vu.h"
DEFINE_DEVICE_TYPE(SONYPS2_GIF, ps2_gif_device, "ps2gif", "Playstation 2 GIF")
@ -253,4 +255,3 @@ void ps2_gif_device::set_path3_mask(bool masked)
{
m_p3mask = masked;
}

View File

@ -9,13 +9,14 @@
*
*/
#ifndef MAME_MACHINE_PS2GIF_H
#define MAME_MACHINE_PS2GIF_H
#ifndef DEVICES_VIDEO_PS2GIF_H
#define DEVICES_VIDEO_PS2GIF_H
#pragma once
#include "emu.h"
#include "video/ps2gs.h"
class ps2_gs_device;
class ps2_gif_device : public device_t
{
@ -106,4 +107,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYPS2_GIF, ps2_gif_device)
#endif // MAME_MACHINE_PS2GIF_H
#endif // DEVICES_VIDEO_PS2GIF_H

View File

@ -10,6 +10,8 @@
*/
#include "ps2gs.h"
#include "ps2gif.h"
#include "cpu/mips/ps2vu.h"
DEFINE_DEVICE_TYPE(SONYPS2_GS, ps2_gs_device, "ps2gs", "Playstation 2 GS")
@ -42,9 +44,14 @@ DEFINE_DEVICE_TYPE(SONYPS2_GS, ps2_gs_device, "ps2gs", "Playstation 2 GS")
ps2_gs_device::ps2_gs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SONYPS2_GS, tag, owner, clock)
, m_intc(*this, finder_base::DUMMY_TAG)
, m_gif(*this, "gif")
{
}
MACHINE_CONFIG_START(ps2_gs_device::device_add_mconfig)
MCFG_DEVICE_ADD(m_gif, SONYPS2_GIF, DEVICE_SELF)
MACHINE_CONFIG_END
void ps2_gs_device::device_start()
{
save_item(NAME(m_bitbltbuf));
@ -730,3 +737,18 @@ void ps2_gs_device::vblank_end()
else
m_csr |= CSR_FIELD_ODD;
}
ps2_gif_device* ps2_gs_device::interface()
{
return m_gif.target();
}
READ32_MEMBER(ps2_gs_device::gif_r)
{
return m_gif->read(space, offset, mem_mask);
}
WRITE32_MEMBER(ps2_gs_device::gif_w)
{
m_gif->write(space, offset, data, mem_mask);
}

View File

@ -9,14 +9,16 @@
*
*/
#ifndef MAME_MACHINE_PS2GS_H
#define MAME_MACHINE_PS2GS_H
#ifndef DEVICES_VIDEO_PS2GS_H
#define DEVICES_VIDEO_PS2GS_H
#pragma once
#include "emu.h"
#include "machine/ps2intc.h"
class ps2_gif_device;
class ps2_gs_device : public device_t
{
public:
@ -37,6 +39,11 @@ public:
DECLARE_WRITE64_MEMBER(regs_w);
DECLARE_READ32_MEMBER(gif_r);
DECLARE_WRITE32_MEMBER(gif_w);
ps2_gif_device* interface();
void reg_write(const uint8_t reg, const uint64_t value);
void write_packed(const uint8_t reg, const uint64_t hi, const uint64_t lo);
@ -46,6 +53,7 @@ public:
protected:
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
void copy_dword_from_host(uint64_t data);
@ -161,6 +169,7 @@ protected:
};
required_device<ps2_intc_device> m_intc;
required_device<ps2_gif_device> m_gif;
std::unique_ptr<uint32_t[]> m_ram;
std::unique_ptr<vertex_t[]> m_vertices;
@ -301,4 +310,4 @@ protected:
DECLARE_DEVICE_TYPE(SONYPS2_GS, ps2_gs_device)
#endif // MAME_MACHINE_PS2GS_H
#endif // DEVICES_VIDEO_PS2GS_H

View File

@ -719,7 +719,7 @@ void debug_disasm_buffer::debug_data_buffer::setup_methods()
m_do_r64 = [this](offs_t pc) -> u64 {
fill(pc, 2);
const u32 *src = get_ptr<u32>(pc);
return src[0] | (u64(src[1]) << 32);
return u64(src[0]) | (u64(src[1]) << 32);
};
}
break;
@ -782,7 +782,7 @@ void debug_disasm_buffer::debug_data_buffer::setup_methods()
m_do_r64 = [this](offs_t pc) -> u64 {
fill(pc, 4);
const u16 *src = get_ptr<u16>(pc);
return src[0] | (src[1] << 16) | (u64(src[2]) << 32) | (u64(src[3]) << 48);
return u64(src[0]) | (u64(src[1]) << 16) | (u64(src[2]) << 32) | (u64(src[3]) << 48);
};
}
break;
@ -815,7 +815,7 @@ void debug_disasm_buffer::debug_data_buffer::setup_methods()
m_do_r64 = [this](offs_t pc) -> u64 {
fill(pc, 4);
const u16 *src = get_ptr<u16>(pc);
return (u64(src[0]) << 48) | (u64(src[1]) << 32) | u32(src[2] << 16) | src[3];
return (u64(src[0]) << 48) | (u64(src[1]) << 32) | u64(src[2] << 16) | u64(src[3]);
};
}
break;
@ -872,7 +872,7 @@ void debug_disasm_buffer::debug_data_buffer::setup_methods()
m_do_r64 = [this](offs_t pc) -> u64 {
fill(pc, 8);
const u8 *src = get_ptr<u8>(pc);
return src[0] | (src[1] << 8) | (src[2] << 16) | u32(src[3] << 24) |
return u64(src[0]) | (u64(src[1]) << 8) | (u64(src[2]) << 16) | (u64(src[3]) << 24) |
(u64(src[4]) << 32) | (u64(src[5]) << 40) | (u64(src[6]) << 48) | (u64(src[7]) << 56);
};
}
@ -920,8 +920,8 @@ void debug_disasm_buffer::debug_data_buffer::setup_methods()
m_do_r64 = [this](offs_t pc) -> u64 {
fill(pc, 8);
const u8 *src = get_ptr<u8>(pc);
return (u64(src[0]) << 56) | (u64(src[1]) << 32) | (u64(src[2]) << 40) | (u64(src[3]) << 32) |
(src[4] << 24) | (src[5] << 16) | (src[6] << 8) | src[7];
return (u64(src[0]) << 56) | (u64(src[1]) << 48) | (u64(src[2]) << 40) | (u64(src[3]) << 32) |
(u64(src[4]) << 24) | (u64(src[5]) << 16) | (u64(src[6]) << 8) | u64(src[7]);
};
}
break;
@ -945,7 +945,7 @@ void debug_disasm_buffer::debug_data_buffer::setup_methods()
m_do_r64 = [this](offs_t pc) -> u64 {
fill(pc, 64);
const u16 *src = reinterpret_cast<u16 *>(&m_buffer[0]) + ((pc - m_lstart) >> 4);
return src[0] | (src[1] << 16) | (u64(src[2]) << 32) | (u64(src[3]) << 48);
return u64(src[0]) | (u64(src[1]) << 16) | (u64(src[2]) << 32) | (u64(src[3]) << 48);
};
break;
}

View File

@ -158,11 +158,10 @@ iLinkSGUID=0x--------
#include "emu.h"
#include "audio/iopspu.h"
#include "cpu/mips/mips3.h"
#include "cpu/mips/r3000.h"
#include "cpu/mips/sonyvu.h"
#include "cpu/mips/ps2vu.h"
#include "cpu/mips/ps2vif1.h"
#include "machine/iopcdvd.h"
#include "machine/iopdma.h"
@ -171,15 +170,16 @@ iLinkSGUID=0x--------
#include "machine/ioptimer.h"
#include "machine/ps2dma.h"
#include "machine/ps2gif.h"
#include "machine/ps2intc.h"
#include "machine/ps2mc.h"
#include "machine/ps2pad.h"
#include "machine/ps2sif.h"
#include "machine/ps2timer.h"
#include "machine/ps2vif1.h"
#include "sound/iopspu.h"
#include "video/ps2gs.h"
#include "video/ps2gif.h"
#include "emupal.h"
#include "screen.h"
@ -201,9 +201,7 @@ public:
, m_iop_spu(*this, "iop_spu")
, m_iop_cdvd(*this, "iop_cdvd")
, m_iop_sio2(*this, "iop_sio2")
, m_gif(*this, "gif")
, m_gs(*this, "gs")
, m_vif1(*this, "vif1")
, m_vu0(*this, "vu0")
, m_vu1(*this, "vu1")
, m_pad(*this, "pad%u", 0U)
@ -266,9 +264,7 @@ protected:
required_device<iop_spu_device> m_iop_spu;
required_device<iop_cdvd_device> m_iop_cdvd;
required_device<iop_sio2_device> m_iop_sio2;
required_device<ps2_gif_device> m_gif;
required_device<ps2_gs_device> m_gs;
required_device<ps2_vif1_device> m_vif1;
required_device<sonyvu0_device> m_vu0;
required_device<sonyvu1_device> m_vu1;
required_device_array<ps2_pad_device, 2> m_pad;
@ -580,7 +576,7 @@ TIMER_CALLBACK_MEMBER(ps2sony_state::vblank)
WRITE8_MEMBER(ps2sony_state::debug_w)
{
//printf("%c", (char)data);
printf("%c", (char)data);
}
WRITE64_MEMBER(ps2sony_state::ee_iop_ram_w)
@ -688,9 +684,9 @@ void ps2sony_state::mem_map(address_map &map)
map(0x10001000, 0x100017ff).rw(m_timer[2], FUNC(ps2_timer_device::read), FUNC(ps2_timer_device::write)).umask64(0x00000000ffffffff);
map(0x10001800, 0x10001fff).rw(m_timer[3], FUNC(ps2_timer_device::read), FUNC(ps2_timer_device::write)).umask64(0x00000000ffffffff);
map(0x10002000, 0x10002fff).rw(FUNC(ps2sony_state::ipu_r), FUNC(ps2sony_state::ipu_w)).umask64(0x00000000ffffffff);
map(0x10003000, 0x100030af).rw(m_gif, FUNC(ps2_gif_device::read), FUNC(ps2_gif_device::write));
map(0x10003000, 0x100030af).rw(m_gs, FUNC(ps2_gs_device::gif_r), FUNC(ps2_gs_device::gif_w));
map(0x10004000, 0x1000400f).mirror(0xff0).rw(FUNC(ps2sony_state::vif0_fifo_r), FUNC(ps2sony_state::vif0_fifo_w));
map(0x10005000, 0x1000500f).mirror(0xff0).rw(m_vif1, FUNC(ps2_vif1_device::mmio_r), FUNC(ps2_vif1_device::mmio_w));
map(0x10005000, 0x1000500f).mirror(0xff0).rw(m_vu1, FUNC(sonyvu1_device::vif_r), FUNC(sonyvu1_device::vif_w));
map(0x10006000, 0x1000600f).mirror(0xff0).rw(FUNC(ps2sony_state::gif_fifo_r), FUNC(ps2sony_state::gif_fifo_w));
map(0x10007000, 0x1000701f).mirror(0xfe0).rw(FUNC(ps2sony_state::ipu_fifo_r), FUNC(ps2sony_state::ipu_fifo_w));
map(0x10008000, 0x1000dfff).rw(m_dmac, FUNC(ps2_dmac_device::channel_r), FUNC(ps2_dmac_device::channel_w)).umask64(0x00000000ffffffff);;
@ -745,10 +741,8 @@ MACHINE_CONFIG_START(ps2sony_state::ps2sony)
MCFG_MIPS3_DCACHE_SIZE(16384)
MCFG_DEVICE_PROGRAM_MAP(mem_map)
MCFG_DEVICE_ADD(m_vu0, SONYVU0, 294'912'000, m_vu1)
MCFG_DEVICE_ADD(m_vu1, SONYVU1, 294'912'000)
MCFG_DEVICE_ADD(m_vif1, SONYPS2_VIF1, 294912000/2, m_gif, m_vu1)
MCFG_DEVICE_ADD(m_vu0, SONYPS2_VU0, 294'912'000, m_vu1)
MCFG_DEVICE_ADD(m_vu1, SONYPS2_VU1, 294'912'000, m_gs)
MCFG_DEVICE_ADD(m_timer[0], SONYPS2_TIMER, 294912000/2, true)
MCFG_DEVICE_ADD(m_timer[1], SONYPS2_TIMER, 294912000/2, true)
@ -757,9 +751,8 @@ MACHINE_CONFIG_START(ps2sony_state::ps2sony)
MCFG_DEVICE_ADD(m_intc, SONYPS2_INTC, m_maincpu)
MCFG_DEVICE_ADD(m_gs, SONYPS2_GS, 294912000/2, m_intc)
MCFG_DEVICE_ADD(m_dmac, SONYPS2_DMAC, 294912000/2, m_maincpu, m_ram, m_sif, m_gif, m_vif1)
MCFG_DEVICE_ADD(m_dmac, SONYPS2_DMAC, 294912000/2, m_maincpu, m_ram, m_sif, m_gs, m_vu1)
MCFG_DEVICE_ADD(m_sif, SONYPS2_SIF, m_intc)
MCFG_DEVICE_ADD(m_gif, SONYPS2_GIF, m_gs)
MCFG_DEVICE_ADD(m_iop, SONYPS2_IOP, XTAL(67'737'600)/2)
MCFG_DEVICE_PROGRAM_MAP(iop_map)