mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
made rsp core use callbacks (no whatsnew)
This commit is contained in:
parent
a90283d6cc
commit
24fe8c73fa
@ -182,11 +182,11 @@ static UINT32 get_cop0_reg(rsp_state *rsp, int reg)
|
||||
reg &= 0xf;
|
||||
if (reg < 8)
|
||||
{
|
||||
return (rsp->config->sp_reg_r)(rsp->device, reg, 0x00000000);
|
||||
return (rsp->sp_reg_r_func)(reg, 0x00000000);
|
||||
}
|
||||
else if (reg >= 8 && reg < 16)
|
||||
{
|
||||
return (rsp->config->dp_reg_r)(rsp->device, reg - 8, 0x00000000);
|
||||
return (rsp->dp_reg_r_func)(reg - 8, 0x00000000);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -197,11 +197,11 @@ static void set_cop0_reg(rsp_state *rsp, int reg, UINT32 data)
|
||||
reg &= 0xf;
|
||||
if (reg < 8)
|
||||
{
|
||||
(rsp->config->sp_reg_w)(rsp->device, reg, data, 0x00000000);
|
||||
(rsp->sp_reg_w_func)(reg, data, 0x00000000);
|
||||
}
|
||||
else if (reg >= 8 && reg < 16)
|
||||
{
|
||||
(rsp->config->dp_reg_w)(rsp->device, reg - 8, data, 0x00000000);
|
||||
(rsp->dp_reg_w_func)(reg - 8, data, 0x00000000);
|
||||
}
|
||||
}
|
||||
|
||||
@ -274,7 +274,13 @@ static CPU_INIT( rsp )
|
||||
rsp_state *rsp = get_safe_token(device);
|
||||
int regIdx;
|
||||
int accumIdx;
|
||||
rsp->config = (const rsp_config *)device->static_config();
|
||||
const rsp_config *config = (const rsp_config *)device->static_config();
|
||||
// resolve callbacks
|
||||
rsp->dp_reg_r_func.resolve(config->dp_reg_r_cb, *device);
|
||||
rsp->dp_reg_w_func.resolve(config->dp_reg_w_cb, *device);
|
||||
rsp->sp_reg_r_func.resolve(config->sp_reg_r_cb, *device);
|
||||
rsp->sp_reg_w_func.resolve(config->sp_reg_w_cb, *device);
|
||||
rsp->sp_set_status_func.resolve(config->sp_set_status_cb, *device);
|
||||
|
||||
if (LOG_INSTRUCTION_EXECUTION)
|
||||
rsp->exec_output = fopen("rsp_execute.txt", "wt");
|
||||
@ -2715,7 +2721,7 @@ static CPU_EXECUTE( rsp )
|
||||
case 0x09: /* JALR */ JUMP_PC_L(RSVAL, RDREG); break;
|
||||
case 0x0d: /* BREAK */
|
||||
{
|
||||
(rsp->config->sp_set_status)(rsp->device, 0x3);
|
||||
(rsp->sp_set_status_func)(0, 0x3);
|
||||
rsp->icount = MIN(rsp->icount, 1);
|
||||
|
||||
if (LOG_INSTRUCTION_EXECUTION) fprintf(rsp->exec_output, "\n---------- break ----------\n\n");
|
||||
|
@ -68,15 +68,13 @@ enum
|
||||
STRUCTURES
|
||||
***************************************************************************/
|
||||
|
||||
typedef void (*rsp_set_status_func)(device_t *device, UINT32 status);
|
||||
|
||||
struct rsp_config
|
||||
{
|
||||
read32_device_func dp_reg_r;
|
||||
write32_device_func dp_reg_w;
|
||||
read32_device_func sp_reg_r;
|
||||
write32_device_func sp_reg_w;
|
||||
rsp_set_status_func sp_set_status;
|
||||
devcb_read32 dp_reg_r_cb;
|
||||
devcb_write32 dp_reg_w_cb;
|
||||
devcb_read32 sp_reg_r_cb;
|
||||
devcb_write32 sp_reg_w_cb;
|
||||
devcb_write32 sp_set_status_cb;
|
||||
};
|
||||
|
||||
|
||||
@ -156,7 +154,6 @@ union ACCUMULATOR_REG
|
||||
struct rspimp_state;
|
||||
struct rsp_state
|
||||
{
|
||||
const rsp_config *config;
|
||||
FILE *exec_output;
|
||||
|
||||
UINT32 pc;
|
||||
@ -191,6 +188,12 @@ struct rsp_state
|
||||
UINT8 *imem8;
|
||||
|
||||
rspimp_state* impstate;
|
||||
|
||||
devcb_resolved_read32 dp_reg_r_func;
|
||||
devcb_resolved_write32 dp_reg_w_func;
|
||||
devcb_resolved_read32 sp_reg_r_func;
|
||||
devcb_resolved_write32 sp_reg_w_func;
|
||||
devcb_resolved_write32 sp_set_status_func;
|
||||
};
|
||||
|
||||
DECLARE_LEGACY_CPU_DEVICE(RSP, rsp);
|
||||
|
@ -472,14 +472,14 @@ static void cfunc_get_cop0_reg(void *param)
|
||||
{
|
||||
if(dest)
|
||||
{
|
||||
rsp->r[dest] = (rsp->config->sp_reg_r)(rsp->device, *rsp->program, reg, 0x00000000);
|
||||
rsp->r[dest] = (rsp->sp_reg_r_func)(reg, 0x00000000);
|
||||
}
|
||||
}
|
||||
else if (reg >= 8 && reg < 16)
|
||||
{
|
||||
if(dest)
|
||||
{
|
||||
rsp->r[dest] = (rsp->config->dp_reg_r)(rsp->device, *rsp->program, reg - 8, 0x00000000);
|
||||
rsp->r[dest] = (rsp->dp_reg_r_func)(reg - 8, 0x00000000);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -496,11 +496,11 @@ static void cfunc_set_cop0_reg(void *param)
|
||||
|
||||
if (reg >= 0 && reg < 8)
|
||||
{
|
||||
(rsp->config->sp_reg_w)(rsp->device, *rsp->program, reg, data, 0x00000000);
|
||||
(rsp->sp_reg_w_func)(reg, data, 0x00000000);
|
||||
}
|
||||
else if (reg >= 8 && reg < 16)
|
||||
{
|
||||
(rsp->config->dp_reg_w)(rsp->device, *rsp->program, reg - 8, data, 0x00000000);
|
||||
(rsp->dp_reg_w_func)(reg - 8, data, 0x00000000);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -585,7 +585,14 @@ static void rspcom_init(rsp_state *rsp, legacy_cpu_device *device, device_irq_ac
|
||||
|
||||
memset(rsp, 0, sizeof(*rsp));
|
||||
|
||||
rsp->config = (const rsp_config *)device->static_config();
|
||||
const rsp_config *config = (const rsp_config *)device->static_config();
|
||||
// resolve callbacks
|
||||
rsp->dp_reg_r_func.resolve(config->dp_reg_r_cb, *device);
|
||||
rsp->dp_reg_w_func.resolve(config->dp_reg_w_cb, *device);
|
||||
rsp->sp_reg_r_func.resolve(config->sp_reg_r_cb, *device);
|
||||
rsp->sp_reg_w_func.resolve(config->sp_reg_w_cb, *device);
|
||||
rsp->sp_set_status_func.resolve(config->sp_set_status_cb, *device);
|
||||
|
||||
rsp->irq_callback = irqcallback;
|
||||
rsp->device = device;
|
||||
rsp->program = &device->space(AS_PROGRAM);
|
||||
@ -3371,7 +3378,7 @@ INLINE void cfunc_rsp_vrsqh(void *param)
|
||||
static void cfunc_sp_set_status_cb(void *param)
|
||||
{
|
||||
rsp_state *rsp = (rsp_state*)param;
|
||||
(rsp->config->sp_set_status)(rsp->device, rsp->impstate->arg0);
|
||||
(rsp->sp_set_status_func)(0, rsp->impstate->arg0);
|
||||
}
|
||||
|
||||
static CPU_EXECUTE( rsp )
|
||||
|
@ -553,9 +553,9 @@ void n64_periphs::sp_dma(int direction)
|
||||
}
|
||||
}
|
||||
|
||||
static void sp_set_status(device_t *device, UINT32 status)
|
||||
static WRITE32_DEVICE_HANDLER(sp_set_status)
|
||||
{
|
||||
device->machine().device<n64_periphs>("rcp")->sp_set_status(status);
|
||||
device->machine().device<n64_periphs>("rcp")->sp_set_status(data);
|
||||
}
|
||||
|
||||
void n64_periphs::sp_set_status(UINT32 status)
|
||||
@ -991,11 +991,11 @@ WRITE32_DEVICE_HANDLER( n64_dp_reg_w )
|
||||
|
||||
const rsp_config n64_rsp_config =
|
||||
{
|
||||
n64_dp_reg_r,
|
||||
n64_dp_reg_w,
|
||||
n64_sp_reg_r,
|
||||
n64_sp_reg_w,
|
||||
sp_set_status
|
||||
DEVCB_DEVICE_HANDLER("rcp",n64_dp_reg_r),
|
||||
DEVCB_DEVICE_HANDLER("rcp",n64_dp_reg_w),
|
||||
DEVCB_DEVICE_HANDLER("rcp",n64_sp_reg_r),
|
||||
DEVCB_DEVICE_HANDLER("rcp",n64_sp_reg_w),
|
||||
DEVCB_DEVICE_HANDLER("rcp",sp_set_status)
|
||||
};
|
||||
|
||||
TIMER_CALLBACK_MEMBER(n64_periphs::vi_scanline_callback)
|
||||
|
Loading…
Reference in New Issue
Block a user