diff --git a/src/alist.c b/src/alist.c index cc3df7f..9f32584 100644 --- a/src/alist.c +++ b/src/alist.c @@ -100,30 +100,30 @@ void alist_process(struct hle_t* hle, const acmd_callback_t abi[], unsigned int if (acmd < abi_size) (*abi[acmd])(hle, w1, w2); else - WarnMessage("Invalid ABI command %u", acmd); + HleWarnMessage(hle->user_defined, "Invalid ABI command %u", acmd); } } -uint32_t alist_get_address(uint32_t so, const uint32_t *segments, size_t n) +uint32_t alist_get_address(struct hle_t* hle, uint32_t so, const uint32_t *segments, size_t n) { uint8_t segment = (so >> 24); uint32_t offset = (so & 0xffffff); if (segment >= n) { - WarnMessage("Invalid segment %u", segment); + HleWarnMessage(hle->user_defined, "Invalid segment %u", segment); return offset; } return segments[segment] + offset; } -void alist_set_address(uint32_t so, uint32_t *segments, size_t n) +void alist_set_address(struct hle_t* hle, uint32_t so, uint32_t *segments, size_t n) { uint8_t segment = (so >> 24); uint32_t offset = (so & 0xffffff); if (segment >= n) { - WarnMessage("Invalid segment %u", segment); + HleWarnMessage(hle->user_defined, "Invalid segment %u", segment); return; } @@ -563,7 +563,7 @@ void alist_resample( ipos -= 4; if (flag2) - WarnMessage("alist_resample: flag2 is not implemented"); + HleWarnMessage(hle->user_defined, "alist_resample: flag2 is not implemented"); if (init) alist_resample_reset(hle, ipos, &pitch_accu); diff --git a/src/alist_audio.c b/src/alist_audio.c index ff9dec6..c8a0c78 100644 --- a/src/alist_audio.c +++ b/src/alist_audio.c @@ -34,12 +34,12 @@ enum { DMEM_BASE = 0x5c0 }; /* helper functions */ static uint32_t get_address(struct hle_t* hle, uint32_t so) { - return alist_get_address(so, hle->alist_audio.segments, N_SEGMENTS); + return alist_get_address(hle, so, hle->alist_audio.segments, N_SEGMENTS); } static void set_address(struct hle_t* hle, uint32_t so) { - alist_set_address(so, hle->alist_audio.segments, N_SEGMENTS); + alist_set_address(hle, so, hle->alist_audio.segments, N_SEGMENTS); } static void clear_segments(struct hle_t* hle) diff --git a/src/alist_internal.h b/src/alist_internal.h index 0d7cfd6..8500919 100644 --- a/src/alist_internal.h +++ b/src/alist_internal.h @@ -31,8 +31,8 @@ struct hle_t; typedef void (*acmd_callback_t)(struct hle_t* hle, uint32_t w1, uint32_t w2); void alist_process(struct hle_t* hle, const acmd_callback_t abi[], unsigned int abi_size); -uint32_t alist_get_address(uint32_t so, const uint32_t *segments, size_t n); -void alist_set_address(uint32_t so, uint32_t *segments, size_t n); +uint32_t alist_get_address(struct hle_t* hle, uint32_t so, const uint32_t *segments, size_t n); +void alist_set_address(struct hle_t* hle, uint32_t so, uint32_t *segments, size_t n); void alist_clear(struct hle_t* hle, uint16_t dmem, uint16_t count); void alist_load(struct hle_t* hle, uint16_t dmem, uint32_t address, uint16_t count); void alist_save(struct hle_t* hle, uint16_t dmem, uint32_t address, uint16_t count); diff --git a/src/alist_naudio.c b/src/alist_naudio.c index 6baf744..243e078 100644 --- a/src/alist_naudio.c +++ b/src/alist_naudio.c @@ -47,8 +47,9 @@ static void UNKNOWN(struct hle_t* hle, uint32_t w1, uint32_t w2) { uint8_t acmd = (w1 >> 24); - WarnMessage("Unknown audio command %d: %08x %08x", - acmd, w1, w2); + HleWarnMessage(hle->user_defined, + "Unknown audio command %d: %08x %08x", + acmd, w1, w2); } @@ -90,7 +91,8 @@ static void NAUDIO_14(struct hle_t* hle, uint32_t w1, uint32_t w2) address); } else - WarnMessage("NAUDIO_14: non null codebook[0-3] case not implemented."); + HleWarnMessage(hle->user_defined, + "NAUDIO_14: non null codebook[0-3] case not implemented."); } static void SETVOL(struct hle_t* hle, uint32_t w1, uint32_t w2) diff --git a/src/alist_nead.c b/src/alist_nead.c index 9fe9004..e2ff559 100644 --- a/src/alist_nead.c +++ b/src/alist_nead.c @@ -39,8 +39,9 @@ static void UNKNOWN(struct hle_t* hle, uint32_t w1, uint32_t w2) { uint8_t acmd = (w1 >> 24); - WarnMessage("Unknown audio command %d: %08x %08x", - acmd, w1, w2); + HleWarnMessage(hle->user_defined, + "Unknown audio command %d: %08x %08x", + acmd, w1, w2); } diff --git a/src/jpeg.c b/src/jpeg.c index cdc9457..d22038d 100644 --- a/src/jpeg.c +++ b/src/jpeg.c @@ -168,10 +168,11 @@ void jpeg_decode_OB(struct hle_t* hle) const unsigned int macroblock_count = *dmem_u32(hle, TASK_DATA_SIZE); const int qscale = *dmem_u32(hle, TASK_YIELD_DATA_SIZE); - VerboseMessage("jpeg_decode_OB: *buffer=%x, #MB=%d, qscale=%d", - address, - macroblock_count, - qscale); + HleVerboseMessage(hle->user_defined, + "jpeg_decode_OB: *buffer=%x, #MB=%d, qscale=%d", + address, + macroblock_count, + qscale); if (qscale != 0) { if (qscale > 0) @@ -214,7 +215,8 @@ static void jpeg_decode_std(struct hle_t* hle, uint32_t data_ptr; if (*dmem_u32(hle, TASK_FLAGS) & 0x1) { - WarnMessage("jpeg_decode_%s: task yielding not implemented", version); + HleWarnMessage(hle->user_defined, + "jpeg_decode_%s: task yielding not implemented", version); return; } @@ -226,17 +228,19 @@ static void jpeg_decode_std(struct hle_t* hle, qtableU_ptr = *dram_u32(hle, data_ptr + 16); qtableV_ptr = *dram_u32(hle, data_ptr + 20); - VerboseMessage("jpeg_decode_%s: *buffer=%x, #MB=%d, mode=%d, *Qy=%x, *Qu=%x, *Qv=%x", - version, - address, - macroblock_count, - mode, - qtableY_ptr, - qtableU_ptr, - qtableV_ptr); + HleVerboseMessage(hle->user_defined, + "jpeg_decode_%s: *buffer=%x, #MB=%d, mode=%d, *Qy=%x, *Qu=%x, *Qv=%x", + version, + address, + macroblock_count, + mode, + qtableY_ptr, + qtableU_ptr, + qtableV_ptr); if (mode != 0 && mode != 2) { - WarnMessage("jpeg_decode_%s: invalid mode %d", version, mode); + HleWarnMessage(hle->user_defined, + "jpeg_decode_%s: invalid mode %d", version, mode); return; } diff --git a/src/main.c b/src/main.c index 9590d25..0d28fad 100644 --- a/src/main.c +++ b/src/main.c @@ -119,13 +119,13 @@ static void rsp_break(struct hle_t* hle, unsigned int setbits) if ((*hle->sp_status & SP_STATUS_INTR_ON_BREAK)) { *hle->mi_intr |= MI_INTR_SP; - CheckInterrupts(); + HleCheckInterrupts(hle->user_defined); } } static void forward_gfx_task(struct hle_t* hle) { - ProcessDlistList(); + HleProcessDlistList(hle->user_defined); *hle->dpc_status &= ~DP_STATUS_FREEZE; } @@ -147,7 +147,7 @@ static bool try_fast_audio_dispatching(struct hle_t* hle) case 0x1e3c1390: /* BlastCorp, DiddyKongRacing */ alist_process_audio_bc(hle); return true; default: - WarnMessage("ABI1 identification regression: v=%08x", v); + HleWarnMessage(hle->user_defined, "ABI1 identification regression: v=%08x", v); } } else { v = *dram_u32(hle, ucode_data + 0x10); @@ -179,7 +179,7 @@ static bool try_fast_audio_dispatching(struct hle_t* hle) musyx_v2_task(hle); return true; default: - WarnMessage("ABI2 identification regression: v=%08x", v); + HleWarnMessage(hle->user_defined, "ABI2 identification regression: v=%08x", v); } } } else { @@ -203,7 +203,7 @@ static bool try_fast_audio_dispatching(struct hle_t* hle) alist_process_naudio_cbfd(hle); return true; default: - WarnMessage("ABI3 identification regression: v=%08x", v); + HleWarnMessage(hle->user_defined, "ABI3 identification regression: v=%08x", v); } } @@ -223,14 +223,14 @@ static bool try_fast_task_dispatching(struct hle_t* hle) case 2: if (FORWARD_AUDIO) { - ProcessAlistList(); + HleProcessAlistList(hle->user_defined); return true; } else if (try_fast_audio_dispatching(hle)) return true; break; case 7: - ShowCFB(); + HleShowCFB(hle->user_defined); return true; } @@ -273,7 +273,7 @@ static void normal_task_dispatching(struct hle_t* hle) return; } - WarnMessage("unknown OSTask: sum: %x PC:%x", sum, *hle->sp_pc); + HleWarnMessage(hle->user_defined, "unknown OSTask: sum: %x PC:%x", sum, *hle->sp_pc); #ifdef ENABLE_TASK_DUMP dump_unknown_task(hle, sum); #endif @@ -291,7 +291,7 @@ static void non_task_dispatching(struct hle_t* hle) return; } - WarnMessage("unknown RSP code: sum: %x PC:%x", sum, *hle->sp_pc); + HleWarnMessage(hle->user_defined, "unknown RSP code: sum: %x PC:%x", sum, *hle->sp_pc); #ifdef ENABLE_TASK_DUMP dump_unknown_non_task(hle, sum); #endif @@ -356,10 +356,10 @@ static void dump_binary(const char *const filename, const unsigned char *const b f = fopen(filename, "wb"); if (f != NULL) { if (fwrite(bytes, 1, size, f) != size) - ErrorMessage("Writing error on %s", filename); + hleErrorMessage(hle->user_defined, "Writing error on %s", filename); fclose(f); } else - ErrorMessage("Couldn't open %s for writing !", filename); + hleErrorMessage(hle->user_defined, "Couldn't open %s for writing !", filename); } else fclose(f); } diff --git a/src/main.h b/src/main.h index 7c3362c..04bb5af 100644 --- a/src/main.h +++ b/src/main.h @@ -79,6 +79,9 @@ struct hle_t uint32_t mp3_t6; uint32_t mp3_t5; uint32_t mp3_t4; + + /* for user convenience, ths will be passed to "external" functions */ + void* user_defined; }; void hle_execute(struct hle_t* hle); diff --git a/src/musyx.c b/src/musyx.c index f1c1d19..9b616c9 100644 --- a/src/musyx.c +++ b/src/musyx.c @@ -151,7 +151,8 @@ static void load_samples_PCM16(struct hle_t* hle, uint32_t voice_ptr, int16_t *s static void load_samples_ADPCM(struct hle_t* hle, uint32_t voice_ptr, int16_t *samples, unsigned *segbase, unsigned *offset); -static void adpcm_decode_frames(int16_t *dst, const uint8_t *src, +static void adpcm_decode_frames(struct hle_t* hle, + int16_t *dst, const uint8_t *src, const int16_t *table, uint8_t count, uint8_t skip_samples); @@ -205,9 +206,10 @@ void musyx_v1_task(struct hle_t* hle) uint32_t state_ptr; musyx_t musyx; - VerboseMessage("musyx_v1_task: *data=%x, #SF=%d", - sfd_ptr, - sfd_count); + HleVerboseMessage(hle->user_defined, + "musyx_v1_task: *data=%x, #SF=%d", + sfd_ptr, + sfd_count); state_ptr = *dram_u32(hle, sfd_ptr + SFD_STATE_PTR); @@ -264,9 +266,10 @@ void musyx_v2_task(struct hle_t* hle) uint32_t sfd_count = *dmem_u32(hle, TASK_DATA_SIZE); musyx_t musyx; - VerboseMessage("musyx_v2_task: *data=%x, #SF=%d", - sfd_ptr, - sfd_count); + HleVerboseMessage(hle->user_defined, + "musyx_v2_task: *data=%x, #SF=%d", + sfd_ptr, + sfd_count); for (;;) { /* parse SFD structure */ @@ -299,8 +302,9 @@ void musyx_v2_task(struct hle_t* hle) if (ptr_10) { /* TODO */ - WarnMessage("ptr_10=%08x mask_14=%02x ptr_24=%08x", - ptr_10, mask_14, ptr_24); + HleWarnMessage(hle->user_defined, + "ptr_10=%08x mask_14=%02x ptr_24=%08x", + ptr_10, mask_14, ptr_24); } /* active voices get mixed into L,R,cc0,e50 subframes (optional) */ @@ -364,9 +368,10 @@ static void update_base_vol(struct hle_t* hle, int32_t *base_vol, unsigned i, k; uint32_t mask; - VerboseMessage("base_vol voice_mask = %08x", voice_mask); - VerboseMessage("BEFORE: base_vol = %08x %08x %08x %08x", - base_vol[0], base_vol[1], base_vol[2], base_vol[3]); + HleVerboseMessage(hle->user_defined, "base_vol voice_mask = %08x", voice_mask); + HleVerboseMessage(hle->user_defined, + "BEFORE: base_vol = %08x %08x %08x %08x", + base_vol[0], base_vol[1], base_vol[2], base_vol[3]); /* optim: skip voices contributions entirely if voice_mask is empty */ if (voice_mask != 0) { @@ -396,8 +401,9 @@ static void update_base_vol(struct hle_t* hle, int32_t *base_vol, for (k = 0; k < 4; ++k) base_vol[k] = (base_vol[k] * 0x0000f850) >> 16; - VerboseMessage("AFTER: base_vol = %08x %08x %08x %08x", - base_vol[0], base_vol[1], base_vol[2], base_vol[3]); + HleVerboseMessage(hle->user_defined, + "AFTER: base_vol = %08x %08x %08x %08x", + base_vol[0], base_vol[1], base_vol[2], base_vol[3]); } @@ -457,7 +463,7 @@ static uint32_t voice_stage(struct hle_t* hle, musyx_t *musyx, /* voice stage can be skipped if first voice has no samples */ if (*dram_u16(hle, voice_ptr + VOICE_CATSRC_0 + CATSRC_SIZE1) == 0) { - VerboseMessage("Skipping Voice stage"); + HleVerboseMessage(hle->user_defined, "Skipping Voice stage"); output_ptr = *dram_u32(hle, voice_ptr + VOICE_INTERLEAVED_PTR); } else { /* otherwise process voices until a non null output_ptr is encountered */ @@ -467,7 +473,7 @@ static uint32_t voice_stage(struct hle_t* hle, musyx_t *musyx, unsigned segbase; unsigned offset; - VerboseMessage("Processing Voice #%d", i); + HleVerboseMessage(hle->user_defined, "Processing Voice #%d", i); if (*dram_u8(hle, voice_ptr + VOICE_ADPCM_FRAMES) == 0) load_samples_PCM16(hle, voice_ptr, samples, &segbase, &offset); @@ -502,11 +508,12 @@ static void dma_cat8(struct hle_t* hle, uint8_t *dst, uint32_t catsrc_ptr) size_t count1 = size1; size_t count2 = size2; - VerboseMessage("dma_cat: %08x %08x %04x %04x", - ptr1, - ptr2, - size1, - size2); + HleVerboseMessage(hle->user_defined, + "dma_cat: %08x %08x %04x %04x", + ptr1, + ptr2, + size1, + size2); dram_load_u8(hle, dst, ptr1, count1); @@ -526,11 +533,12 @@ static void dma_cat16(struct hle_t* hle, uint16_t *dst, uint32_t catsrc_ptr) size_t count1 = size1 >> 1; size_t count2 = size2 >> 1; - VerboseMessage("dma_cat: %08x %08x %04x %04x", - ptr1, - ptr2, - size1, - size2); + HleVerboseMessage(hle->user_defined, + "dma_cat: %08x %08x %04x %04x", + ptr1, + ptr2, + size1, + size2); dram_load_u16(hle, dst, ptr1, count1); @@ -550,7 +558,7 @@ static void load_samples_PCM16(struct hle_t* hle, uint32_t voice_ptr, int16_t *s unsigned count = align(u16_40 + u8_3e, 4); - VerboseMessage("Format: PCM16"); + HleVerboseMessage(hle->user_defined, "Format: PCM16"); *segbase = SAMPLE_BUFFER_SIZE - count; *offset = u8_3e; @@ -576,9 +584,9 @@ static void load_samples_ADPCM(struct hle_t* hle, uint32_t voice_ptr, int16_t *s uint32_t adpcm_table_ptr = *dram_u32(hle, voice_ptr + VOICE_ADPCM_TABLE_PTR); unsigned count; - VerboseMessage("Format: ADPCM"); + HleVerboseMessage(hle->user_defined, "Format: ADPCM"); - VerboseMessage("Loading ADPCM table: %08x", adpcm_table_ptr); + HleVerboseMessage(hle->user_defined, "Loading ADPCM table: %08x", adpcm_table_ptr); dram_load_u16(hle, (uint16_t *)adpcm_table, adpcm_table_ptr, 128); count = u8_3c << 5; @@ -587,15 +595,16 @@ static void load_samples_ADPCM(struct hle_t* hle, uint32_t voice_ptr, int16_t *s *offset = u8_3e & 0x1f; dma_cat8(hle, buffer, voice_ptr + VOICE_CATSRC_0); - adpcm_decode_frames(samples + *segbase, buffer, adpcm_table, u8_3c, u8_3e); + adpcm_decode_frames(hle, samples + *segbase, buffer, adpcm_table, u8_3c, u8_3e); if (u8_3d != 0) { dma_cat8(hle, buffer, voice_ptr + VOICE_CATSRC_1); - adpcm_decode_frames(samples, buffer, adpcm_table, u8_3d, u8_3f); + adpcm_decode_frames(hle, samples, buffer, adpcm_table, u8_3d, u8_3f); } } -static void adpcm_decode_frames(int16_t *dst, const uint8_t *src, +static void adpcm_decode_frames(struct hle_t* hle, + int16_t *dst, const uint8_t *src, const int16_t *table, uint8_t count, uint8_t skip_samples) { @@ -604,7 +613,9 @@ static void adpcm_decode_frames(int16_t *dst, const uint8_t *src, unsigned i; bool jump_gap = false; - VerboseMessage("ADPCM decode: count=%d, skip=%d", count, skip_samples); + HleVerboseMessage(hle->user_defined, + "ADPCM decode: count=%d, skip=%d", + count, skip_samples); if (skip_samples >= 32) { jump_gap = true; @@ -693,18 +704,19 @@ static void mix_voice_samples(struct hle_t* hle, musyx_t *musyx, v4_dst[2] = musyx->cc0; v4_dst[3] = musyx->e50; - VerboseMessage("Voice debug: segbase=%d" - "\tu16_4e=%04x\n" - "\tpitch: frac0=%04x shift=%04x\n" - "\tend_point=%04x restart_point=%04x\n" - "\tenv = %08x %08x %08x %08x\n" - "\tenv_step = %08x %08x %08x %08x\n", - segbase, - u16_4e, - pitch_q16, pitch_shift, - end_point, restart_point, - v4_env[0], v4_env[1], v4_env[2], v4_env[3], - v4_env_step[0], v4_env_step[1], v4_env_step[2], v4_env_step[3]); + HleVerboseMessage(hle->user_defined, + "Voice debug: segbase=%d" + "\tu16_4e=%04x\n" + "\tpitch: frac0=%04x shift=%04x\n" + "\tend_point=%04x restart_point=%04x\n" + "\tenv = %08x %08x %08x %08x\n" + "\tenv_step = %08x %08x %08x %08x\n", + segbase, + u16_4e, + pitch_q16, pitch_shift, + end_point, restart_point, + v4_env[0], v4_env[1], v4_env[2], v4_env[3], + v4_env_step[0], v4_env_step[1], v4_env_step[2], v4_env_step[3]); for (i = 0; i < SUBFRAME_SIZE; ++i) { /* update sample and lut pointers and then pitch_accu */ @@ -739,8 +751,9 @@ static void mix_voice_samples(struct hle_t* hle, musyx_t *musyx, /* save last resampled sample */ dram_store_u16(hle, (uint16_t *)v4, last_sample_ptr, 4); - VerboseMessage("last_sample = %04x %04x %04x %04x", - v4[0], v4[1], v4[2], v4[3]); + HleVerboseMessage(hle->user_defined, + "last_sample = %04x %04x %04x %04x", + v4[0], v4[1], v4[2], v4[3]); } @@ -767,7 +780,7 @@ static void sfx_stage(struct hle_t* hle, mix_sfx_with_main_subframes_t mix_sfx_w int16_t fir4_hgain; uint16_t sfx_gains[2]; - VerboseMessage("SFX: %08x, idx=%d", sfx_ptr, idx); + HleVerboseMessage(hle->user_defined, "SFX: %08x, idx=%d", sfx_ptr, idx); if (sfx_ptr == 0) return; @@ -787,23 +800,26 @@ static void sfx_stage(struct hle_t* hle, mix_sfx_with_main_subframes_t mix_sfx_w sfx_gains[0] = *dram_u16(hle, sfx_ptr + SFX_U16_3C); sfx_gains[1] = *dram_u16(hle, sfx_ptr + SFX_U16_3E); - VerboseMessage("cbuffer: ptr=%08x length=%x", cbuffer_ptr, - cbuffer_length); + HleVerboseMessage(hle->user_defined, + "cbuffer: ptr=%08x length=%x", cbuffer_ptr, + cbuffer_length); - VerboseMessage("fir4: hgain=%04x hcoeff=%04x %04x %04x %04x", - fir4_hgain, fir4_hcoeffs[0], fir4_hcoeffs[1], fir4_hcoeffs[2], - fir4_hcoeffs[3]); + HleVerboseMessage(hle->user_defined, + "fir4: hgain=%04x hcoeff=%04x %04x %04x %04x", + fir4_hgain, + fir4_hcoeffs[0], fir4_hcoeffs[1], fir4_hcoeffs[2], fir4_hcoeffs[3]); - VerboseMessage("tap count=%d\n" - "delays: %08x %08x %08x %08x %08x %08x %08x %08x\n" - "gains: %04x %04x %04x %04x %04x %04x %04x %04x", - tap_count, - tap_delays[0], tap_delays[1], tap_delays[2], tap_delays[3], - tap_delays[4], tap_delays[5], tap_delays[6], tap_delays[7], - tap_gains[0], tap_gains[1], tap_gains[2], tap_gains[3], - tap_gains[4], tap_gains[5], tap_gains[6], tap_gains[7]); + HleVerboseMessage(hle->user_defined, + "tap count=%d\n" + "delays: %08x %08x %08x %08x %08x %08x %08x %08x\n" + "gains: %04x %04x %04x %04x %04x %04x %04x %04x", + tap_count, + tap_delays[0], tap_delays[1], tap_delays[2], tap_delays[3], + tap_delays[4], tap_delays[5], tap_delays[6], tap_delays[7], + tap_gains[0], tap_gains[1], tap_gains[2], tap_gains[3], + tap_gains[4], tap_gains[5], tap_gains[6], tap_gains[7]); - VerboseMessage("sfx_gains=%04x %04x", sfx_gains[0], sfx_gains[1]); + HleVerboseMessage(hle->user_defined, "sfx_gains=%04x %04x", sfx_gains[0], sfx_gains[1]); /* mix up to 8 delayed subframes */ memset(subframe, 0, SUBFRAME_SIZE * sizeof(subframe[0])); @@ -902,7 +918,7 @@ static void interleave_stage_v1(struct hle_t* hle, musyx_t *musyx, uint32_t outp int16_t *right; uint32_t *dst; - VerboseMessage("interleave: %08x", output_ptr); + HleVerboseMessage(hle->user_defined, "interleave: %08x", output_ptr); base_left = clamp_s16(musyx->base_vol[0]); base_right = clamp_s16(musyx->base_vol[1]); @@ -928,8 +944,9 @@ static void interleave_stage_v2(struct hle_t* hle, musyx_t *musyx, uint32_t *dst; uint16_t mask; - VerboseMessage("mask_16=%04x ptr_18=%08x ptr_1c=%08x output_ptr=%08x", - mask_16, ptr_18, ptr_1c, output_ptr); + HleVerboseMessage(hle->user_defined, + "mask_16=%04x ptr_18=%08x ptr_1c=%08x output_ptr=%08x", + mask_16, ptr_18, ptr_1c, output_ptr); /* compute L_total, R_total and update subframe @ptr_1c */ memset(subframe, 0, SUBFRAME_SIZE*sizeof(subframe[0])); diff --git a/src/plugin.c b/src/plugin.c index a6c5ec0..c600ac5 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -59,7 +59,7 @@ static void DebugMessage(int level, const char *message, va_list args) } /* Global functions needed by HLE core */ -void VerboseMessage(const char *message, ...) +void HleVerboseMessage(void* user_defined, const char *message, ...) { va_list args; va_start(args, message); @@ -67,7 +67,7 @@ void VerboseMessage(const char *message, ...) va_end(args); } -void ErrorMessage(const char *message, ...) +void HleErrorMessage(void* user_defined, const char *message, ...) { va_list args; va_start(args, message); @@ -75,7 +75,7 @@ void ErrorMessage(const char *message, ...) va_end(args); } -void WarnMessage(const char *message, ...) +void HleWarnMessage(void* user_defined, const char *message, ...) { va_list args; va_start(args, message); @@ -83,7 +83,7 @@ void WarnMessage(const char *message, ...) va_end(args); } -void CheckInterrupts(void) +void HleCheckInterrupts(void* user_defined) { if (l_CheckInterrupts == NULL) return; @@ -91,7 +91,7 @@ void CheckInterrupts(void) (*l_CheckInterrupts)(); } -void ProcessDlistList(void) +void HleProcessDlistList(void* user_defined) { if (l_ProcessDlistList == NULL) return; @@ -99,7 +99,7 @@ void ProcessDlistList(void) (*l_ProcessDlistList)(); } -void ProcessAlistList(void) +void HleProcessAlistList(void* user_defined) { if (l_ProcessAlistList == NULL) return; @@ -107,7 +107,7 @@ void ProcessAlistList(void) (*l_ProcessAlistList)(); } -void ProcessRdpList(void) +void HleProcessRdpList(void* user_defined) { if (l_ProcessRdpList == NULL) return; @@ -115,7 +115,7 @@ void ProcessRdpList(void) (*l_ProcessRdpList)(); } -void ShowCFB(void) +void HleShowCFB(void* user_defined) { if (l_ShowCFB == NULL) return; @@ -208,6 +208,9 @@ EXPORT void CALL InitiateRSP(RSP_INFO Rsp_Info, unsigned int *CycleCount) g_hle.dpc_pipebusy = Rsp_Info.DPC_PIPEBUSY_REG; g_hle.dpc_tmem = Rsp_Info.DPC_TMEM_REG; + /* not used in m64p */ + g_hle.user_defined = NULL; + l_CheckInterrupts = Rsp_Info.CheckInterrupts; l_ProcessDlistList = Rsp_Info.ProcessDlistList; l_ProcessAlistList = Rsp_Info.ProcessAlistList; diff --git a/src/plugin.h b/src/plugin.h index 3ada8a5..fa4438f 100644 --- a/src/plugin.h +++ b/src/plugin.h @@ -22,15 +22,15 @@ #ifndef PLUGIN_H #define PLUGIN_H -void VerboseMessage(const char *message, ...); -void ErrorMessage(const char *message, ...); -void WarnMessage(const char *message, ...); +void HleVerboseMessage(void* user_defined, const char *message, ...); +void HleErrorMessage(void* user_defined, const char *message, ...); +void HleWarnMessage(void* user_defined, const char *message, ...); -void CheckInterrupts(void); -void ProcessDlistList(void); -void ProcessAlistList(void); -void ProcessRdpList(void); -void ShowCFB(void); +void HleCheckInterrupts(void* user_defined); +void HleProcessDlistList(void* user_defined); +void HleProcessAlistList(void* user_defined); +void HleProcessRdpList(void* user_defined); +void HleShowCFB(void* user_defined); #endif