mirror of
https://github.com/simple64/simple64.git
synced 2026-11-14 08:08:42 +01:00
update core
This commit is contained in:
1 parent
07669b5c87
commit
853c41ca99
13 files changed
+28
-44
No files matched your search
@@ -6227,7 +6227,6 @@ CRC=D3F10E5D 052EA579
|
||||
Players=1
|
||||
SaveType=Eeprom 4KB
|
||||
Rumble=Yes
|
||||
AiDmaModifier=83
|
||||
|
||||
[DCC316EFFC4928F5B0AE8D273D8024BF]
|
||||
GoodName=HiRes CFB Demo (PD)
|
||||
@@ -11786,7 +11785,6 @@ CRC=3F245305 FC0B74AA
|
||||
Players=1
|
||||
SaveType=Eeprom 4KB
|
||||
Rumble=Yes
|
||||
AiDmaModifier=83
|
||||
|
||||
[D0AE6C07AC0481EBA5FF9CE798A69574]
|
||||
GoodName=Pikachu Genki Dechu (J) [b1]
|
||||
|
||||
@@ -427,7 +427,6 @@ EXPORT m64p_error CALL CoreGetRomSettings(m64p_rom_settings *RomSettings, int Ro
|
||||
RomSettings->disableextramem = entry->disableextramem;
|
||||
RomSettings->rspforceinterrupt = entry->rspforceinterrupt;
|
||||
RomSettings->savetype = entry->savetype;
|
||||
RomSettings->aidmamodifier = entry->aidmamodifier;
|
||||
|
||||
return M64ERR_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -281,7 +281,6 @@ typedef struct
|
||||
unsigned char biopak; /* 0 - No, 1 - Yes boolean for bio pak support. */
|
||||
unsigned char disableextramem; /* 0 - No, 1 - Yes boolean for disabling 4MB expansion RAM pack */
|
||||
unsigned char rspforceinterrupt;
|
||||
unsigned int aidmamodifier; /* Percentage modifier for AI DMA duration */
|
||||
} m64p_rom_settings;
|
||||
|
||||
/* ----------------------------------------- */
|
||||
|
||||
@@ -90,7 +90,7 @@ void init_device(struct device* dev,
|
||||
/* rsp */
|
||||
uint32_t rsp_force_interrupt,
|
||||
/* ai */
|
||||
void* aout, const struct audio_out_backend_interface* iaout, float dma_modifier,
|
||||
void* aout, const struct audio_out_backend_interface* iaout,
|
||||
/* rdram */
|
||||
size_t dram_size,
|
||||
/* pif */
|
||||
@@ -118,14 +118,15 @@ void init_device(struct device* dev,
|
||||
{ &dev->si, si_end_of_dma_event }, /* SI */
|
||||
{ &dev->pi, pi_end_of_dma_event }, /* PI */
|
||||
{ &dev->r4300.cp0, special_int_handler }, /* SPECIAL */
|
||||
{ &dev->ai, ai_end_of_dma_event }, /* AI */
|
||||
{ &dev->ai, ai_end_of_interrupt_event }, /* AI */
|
||||
{ &dev->sp, rsp_interrupt_event }, /* SP */
|
||||
{ &dev->dp, rdp_interrupt_event }, /* DP */
|
||||
{ &dev->pif, hw2_int_handler }, /* HW2 */
|
||||
{ dev, nmi_int_handler }, /* NMI */
|
||||
{ dev, reset_hard_handler }, /* reset_hard */
|
||||
{ &dev->sp, rsp_end_of_dma_event },
|
||||
{ &dev->sp, rsp_end_of_tsk_event }
|
||||
{ &dev->sp, rsp_end_of_tsk_event },
|
||||
{ &dev->ai, ai_end_of_dma_event }
|
||||
};
|
||||
|
||||
#define R(x) read_ ## x
|
||||
@@ -183,7 +184,7 @@ void init_device(struct device* dev,
|
||||
emumode, no_compiled_jump, randomize_interrupt, start_address);
|
||||
init_rdp(&dev->dp, &dev->sp, &dev->mi, &dev->mem, &dev->rdram, &dev->r4300);
|
||||
init_rsp(&dev->sp, mem_base_u32(base, MM_RSP_MEM), &dev->mi, &dev->dp, &dev->ri, rsp_force_interrupt);
|
||||
init_ai(&dev->ai, &dev->mi, &dev->ri, &dev->vi, aout, iaout, dma_modifier);
|
||||
init_ai(&dev->ai, &dev->mi, &dev->ri, &dev->vi, aout, iaout);
|
||||
init_mi(&dev->mi, &dev->r4300);
|
||||
init_pi(&dev->pi,
|
||||
get_pi_dma_handler,
|
||||
|
||||
@@ -126,7 +126,7 @@ void init_device(struct device* dev,
|
||||
/* rsp */
|
||||
uint32_t rsp_force_interrupt,
|
||||
/* ai */
|
||||
void* aout, const struct audio_out_backend_interface* iaout, float dma_modifier,
|
||||
void* aout, const struct audio_out_backend_interface* iaout,
|
||||
/* rdram */
|
||||
size_t dram_size,
|
||||
/* pif */
|
||||
|
||||
@@ -166,7 +166,7 @@ struct interrupt_handler
|
||||
void (*callback)(void*);
|
||||
};
|
||||
|
||||
enum { CP0_INTERRUPT_HANDLERS_COUNT = 14 };
|
||||
enum { CP0_INTERRUPT_HANDLERS_COUNT = 15 };
|
||||
|
||||
enum {
|
||||
INTR_UNSAFE_R4300 = 0x01,
|
||||
|
||||
@@ -646,6 +646,11 @@ void gen_interrupt(struct r4300_core* r4300)
|
||||
call_interrupt_handler(&r4300->cp0, 13);
|
||||
break;
|
||||
|
||||
case AI_DMA:
|
||||
remove_interrupt_event(&r4300->cp0);
|
||||
call_interrupt_handler(&r4300->cp0, 14);
|
||||
break;
|
||||
|
||||
default:
|
||||
DebugMessage(M64MSG_ERROR, "Unknown interrupt queue event type %.8X.", r4300->cp0.q.first->data.type);
|
||||
remove_interrupt_event(&r4300->cp0);
|
||||
|
||||
@@ -67,5 +67,6 @@ void nmi_int_handler(void* opaque);
|
||||
#define NMI_INT 0x0400
|
||||
#define RSP_DMA_EVT 0x0800
|
||||
#define RSP_TSK_EVT 0x1000
|
||||
#define AI_DMA 0x2000
|
||||
|
||||
#endif /* M64P_DEVICE_R4300_INTERRUPT_H */
|
||||
@@ -45,7 +45,7 @@ static uint32_t get_remaining_dma_length(struct ai_controller* ai)
|
||||
if (ai->fifo[0].duration == 0)
|
||||
return 0;
|
||||
|
||||
next_ai_event = get_event(&ai->mi->r4300->cp0.q, AI_INT);
|
||||
next_ai_event = get_event(&ai->mi->r4300->cp0.q, AI_DMA);
|
||||
if (next_ai_event == NULL)
|
||||
return 0;
|
||||
|
||||
@@ -93,12 +93,13 @@ static void do_dma(struct ai_controller* ai, struct ai_dma* dma)
|
||||
ai->delayed_carry = 0;
|
||||
|
||||
/* schedule end of dma event */
|
||||
add_interrupt_event(&ai->mi->r4300->cp0, AI_INT, dma->duration);
|
||||
add_interrupt_event(&ai->mi->r4300->cp0, AI_INT, dma->duration / 2);
|
||||
add_interrupt_event(&ai->mi->r4300->cp0, AI_DMA, dma->duration);
|
||||
}
|
||||
|
||||
static void fifo_push(struct ai_controller* ai)
|
||||
{
|
||||
unsigned int duration = get_dma_duration(ai) * ai->dma_modifier;
|
||||
unsigned int duration = get_dma_duration(ai);
|
||||
|
||||
if (ai->regs[AI_STATUS_REG] & AI_STATUS_BUSY)
|
||||
{
|
||||
@@ -142,15 +143,13 @@ void init_ai(struct ai_controller* ai,
|
||||
struct ri_controller* ri,
|
||||
struct vi_controller* vi,
|
||||
void* aout,
|
||||
const struct audio_out_backend_interface* iaout,
|
||||
float dma_modifier)
|
||||
const struct audio_out_backend_interface* iaout)
|
||||
{
|
||||
ai->mi = mi;
|
||||
ai->ri = ri;
|
||||
ai->vi = vi;
|
||||
ai->aout = aout;
|
||||
ai->iaout = iaout;
|
||||
ai->dma_modifier = dma_modifier;
|
||||
}
|
||||
|
||||
void poweron_ai(struct ai_controller* ai)
|
||||
@@ -218,6 +217,13 @@ void write_ai_regs(void* opaque, uint32_t address, uint32_t value, uint32_t mask
|
||||
masked_write(&ai->regs[reg], value, mask);
|
||||
}
|
||||
|
||||
void ai_end_of_interrupt_event(void* opaque)
|
||||
{
|
||||
struct ai_controller* ai = (struct ai_controller*)opaque;
|
||||
|
||||
raise_rcp_interrupt(ai->mi, MI_INTR_AI);
|
||||
}
|
||||
|
||||
void ai_end_of_dma_event(void* opaque)
|
||||
{
|
||||
struct ai_controller* ai = (struct ai_controller*)opaque;
|
||||
@@ -231,6 +237,4 @@ void ai_end_of_dma_event(void* opaque)
|
||||
}
|
||||
|
||||
fifo_pop(ai);
|
||||
raise_rcp_interrupt(ai->mi, MI_INTR_AI);
|
||||
}
|
||||
|
||||
@@ -59,7 +59,6 @@ struct ai_controller
|
||||
unsigned int samples_format_changed;
|
||||
uint32_t last_read;
|
||||
uint32_t delayed_carry;
|
||||
float dma_modifier;
|
||||
|
||||
struct mi_controller* mi;
|
||||
struct ri_controller* ri;
|
||||
@@ -79,14 +78,14 @@ void init_ai(struct ai_controller* ai,
|
||||
struct ri_controller* ri,
|
||||
struct vi_controller* vi,
|
||||
void* aout,
|
||||
const struct audio_out_backend_interface* iaout,
|
||||
float dma_modifier);
|
||||
const struct audio_out_backend_interface* iaout);
|
||||
|
||||
void poweron_ai(struct ai_controller* ai);
|
||||
|
||||
void read_ai_regs(void* opaque, uint32_t address, uint32_t* value);
|
||||
void write_ai_regs(void* opaque, uint32_t address, uint32_t value, uint32_t mask);
|
||||
|
||||
void ai_end_of_interrupt_event(void* opaque);
|
||||
void ai_end_of_dma_event(void* opaque);
|
||||
|
||||
#endif
|
||||
@@ -1778,7 +1778,7 @@ m64p_error main_run(void)
|
||||
randomize_interrupt,
|
||||
g_start_address,
|
||||
rsp_force_interrupt,
|
||||
&g_dev.ai, &g_iaudio_out_backend_plugin_compat, ((float)ROM_SETTINGS.aidmamodifier / 100.0),
|
||||
&g_dev.ai, &g_iaudio_out_backend_plugin_compat,
|
||||
rdram_size,
|
||||
joybus_devices, ijoybus_devices,
|
||||
vi_clock_from_tv_standard(ROM_PARAMS.systemtype), vi_expected_refresh_rate_from_tv_standard(ROM_PARAMS.systemtype),
|
||||
|
||||
@@ -180,7 +180,6 @@ m64p_error open_rom(const unsigned char* romimage, unsigned int size)
|
||||
ROM_SETTINGS.biopak = entry->biopak;
|
||||
ROM_SETTINGS.disableextramem = entry->disableextramem;
|
||||
ROM_SETTINGS.rspforceinterrupt = entry->rspforceinterrupt;
|
||||
ROM_SETTINGS.aidmamodifier = entry->aidmamodifier;
|
||||
ROM_PARAMS.cheats = entry->cheats;
|
||||
}
|
||||
else
|
||||
@@ -197,7 +196,6 @@ m64p_error open_rom(const unsigned char* romimage, unsigned int size)
|
||||
ROM_SETTINGS.biopak = 0;
|
||||
ROM_SETTINGS.disableextramem = DEFAULT_DISABLE_EXTRA_MEM;
|
||||
ROM_SETTINGS.rspforceinterrupt = DEFAULT_RSP_FORCE_INTERRUPT;
|
||||
ROM_SETTINGS.aidmamodifier = DEFAULT_AI_DMA_MODIFIER;
|
||||
ROM_PARAMS.cheats = NULL;
|
||||
}
|
||||
|
||||
@@ -360,12 +358,6 @@ static size_t romdatabase_resolve_round(void)
|
||||
entry->entry.set_flags |= ROMDATABASE_ENTRY_BIOPAK;
|
||||
}
|
||||
|
||||
if (!isset_bitmask(entry->entry.set_flags, ROMDATABASE_ENTRY_AIDMAMODIFIER) &&
|
||||
isset_bitmask(ref->set_flags, ROMDATABASE_ENTRY_AIDMAMODIFIER)) {
|
||||
entry->entry.aidmamodifier = ref->aidmamodifier;
|
||||
entry->entry.set_flags |= ROMDATABASE_ENTRY_AIDMAMODIFIER;
|
||||
}
|
||||
|
||||
free(entry->entry.refmd5);
|
||||
entry->entry.refmd5 = NULL;
|
||||
}
|
||||
@@ -461,7 +453,6 @@ void romdatabase_open(void)
|
||||
search->entry.transferpak = 0;
|
||||
search->entry.mempak = 1;
|
||||
search->entry.biopak = 0;
|
||||
search->entry.aidmamodifier = DEFAULT_AI_DMA_MODIFIER;
|
||||
search->entry.set_flags = ROMDATABASE_ENTRY_NONE;
|
||||
|
||||
search->next_entry = NULL;
|
||||
@@ -645,15 +636,6 @@ void romdatabase_open(void)
|
||||
DebugMessage(M64MSG_WARNING, "ROM Database: Invalid biopak string on line %i", lineno);
|
||||
}
|
||||
}
|
||||
else if(!strcmp(l.name, "AiDmaModifier"))
|
||||
{
|
||||
if (string_to_int(l.value, &value) && value >= 0 && value <= 200) {
|
||||
search->entry.aidmamodifier = value;
|
||||
search->entry.set_flags |= ROMDATABASE_ENTRY_AIDMAMODIFIER;
|
||||
} else {
|
||||
DebugMessage(M64MSG_WARNING, "ROM Database: Invalid AiDmaModifier on line %i", lineno);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugMessage(M64MSG_WARNING, "ROM Database: Unknown property on line %i", lineno);
|
||||
|
||||
@@ -112,7 +112,6 @@ typedef struct
|
||||
unsigned char transferpak; /* 0 - No, 1 - Yes boolean for transferpak support. */
|
||||
unsigned char mempak; /* 0 - No, 1 - Yes boolean for mempak support. */
|
||||
unsigned char biopak; /* 0 - No, 1 - Yes boolean for biopak support. */
|
||||
unsigned int aidmamodifier;
|
||||
uint32_t set_flags;
|
||||
} romdatabase_entry;
|
||||
|
||||
@@ -128,13 +127,10 @@ typedef struct
|
||||
#define ROMDATABASE_ENTRY_TRANSFERPAK BIT(9)
|
||||
#define ROMDATABASE_ENTRY_MEMPAK BIT(10)
|
||||
#define ROMDATABASE_ENTRY_BIOPAK BIT(11)
|
||||
#define ROMDATABASE_ENTRY_AIDMAMODIFIER BIT(13)
|
||||
#define ROMDATABASE_ENTRY_RSPFORCEINTERRUPT BIT(14)
|
||||
|
||||
/* by default, extra mem is enabled */
|
||||
enum { DEFAULT_DISABLE_EXTRA_MEM = 0 };
|
||||
/* Default AI DMA modifier */
|
||||
enum { DEFAULT_AI_DMA_MODIFIER = 100 };
|
||||
/* Default RSP Force Interrupt */
|
||||
enum { DEFAULT_RSP_FORCE_INTERRUPT = 0 };
|
||||
|
||||
|
||||
Reference in new issue
Block a user