update core

This commit is contained in:
Logan McNaughton committed 2022-07-25 08:57:09 -06:00
1 parent 07669b5c87
commit 853c41ca99
13 files changed
+28 -44

No files matched your search

-2
View File
@@ -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]
-1
View File
@@ -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;
}
-1
View File
@@ -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;
/* ----------------------------------------- */
+5 -4
View File
@@ -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,
+1 -1
View File
@@ -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 */
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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),
-18
View File
@@ -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);
-4
View File
@@ -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 };