diff --git a/librecomp/src/dp.cpp b/librecomp/src/dp.cpp index 3ad5327..3098778 100644 --- a/librecomp/src/dp.cpp +++ b/librecomp/src/dp.cpp @@ -1,30 +1,30 @@ #include "recomp.h" enum class RDPStatusBit { - XbusDmem = 0, - Freeze = 1, - Flush = 2, - CommandBusy = 6, - BufferReady = 7, - DmaBusy = 8, - EndValid = 9, - StartValid = 10, + XbusDmem = 0, + Freeze = 1, + Flush = 2, + CommandBusy = 6, + BufferReady = 7, + DmaBusy = 8, + EndValid = 9, + StartValid = 10, }; constexpr void update_bit(uint32_t& state, uint32_t flags, RDPStatusBit bit) { - int set_bit_pos = (int)bit * 2 + 0; - int reset_bit_pos = (int)bit * 2 + 1; - bool set = (flags & (1U << set_bit_pos)) != 0; - bool reset = (flags & (1U << reset_bit_pos)) != 0; + int set_bit_pos = (int)bit * 2 + 0; + int reset_bit_pos = (int)bit * 2 + 1; + bool set = (flags & (1U << set_bit_pos)) != 0; + bool reset = (flags & (1U << reset_bit_pos)) != 0; - if (set ^ reset) { - if (set) { - state |= (1U << (int)bit); - } - else { - state &= ~(1U << (int)bit); - } - } + if (set ^ reset) { + if (set) { + state |= (1U << (int)bit); + } + else { + state &= ~(1U << (int)bit); + } + } } uint32_t rdp_state = 1 << (int)RDPStatusBit::BufferReady; @@ -34,11 +34,11 @@ extern "C" void osDpSetNextBuffer_recomp(uint8_t* rdram, recomp_context* ctx) { } extern "C" void osDpGetStatus_recomp(uint8_t* rdram, recomp_context* ctx) { - ctx->r2 = rdp_state; + ctx->r2 = rdp_state; } extern "C" void osDpSetStatus_recomp(uint8_t* rdram, recomp_context* ctx) { - update_bit(rdp_state, ctx->r4, RDPStatusBit::XbusDmem); - update_bit(rdp_state, ctx->r4, RDPStatusBit::Freeze); - update_bit(rdp_state, ctx->r4, RDPStatusBit::Flush); + update_bit(rdp_state, ctx->r4, RDPStatusBit::XbusDmem); + update_bit(rdp_state, ctx->r4, RDPStatusBit::Freeze); + update_bit(rdp_state, ctx->r4, RDPStatusBit::Flush); } diff --git a/librecomp/src/flash.cpp b/librecomp/src/flash.cpp index 01ee0f3..43407e8 100644 --- a/librecomp/src/flash.cpp +++ b/librecomp/src/flash.cpp @@ -21,22 +21,22 @@ void save_clear(uint32_t start, uint32_t size, char value); std::array write_buffer; extern "C" void osFlashInit_recomp(uint8_t * rdram, recomp_context * ctx) { - ctx->r2 = ultramodern::flash_handle; + ctx->r2 = ultramodern::flash_handle; } extern "C" void osFlashReadStatus_recomp(uint8_t * rdram, recomp_context * ctx) { - PTR(u8) flash_status = ctx->r4; + PTR(u8) flash_status = ctx->r4; - MEM_B(0, flash_status) = 0; + MEM_B(0, flash_status) = 0; } extern "C" void osFlashReadId_recomp(uint8_t * rdram, recomp_context * ctx) { - PTR(u32) flash_type = ctx->r4; - PTR(u32) flash_maker = ctx->r5; + PTR(u32) flash_type = ctx->r4; + PTR(u32) flash_maker = ctx->r5; - // Mimic a real flash chip's type and maker, as some games actually check if one is present. - MEM_W(0, flash_type) = 0x11118001; - MEM_W(0, flash_maker) = 0x00C2001E; + // Mimic a real flash chip's type and maker, as some games actually check if one is present. + MEM_W(0, flash_type) = 0x11118001; + MEM_W(0, flash_maker) = 0x00C2001E; } extern "C" void osFlashClearStatus_recomp(uint8_t * rdram, recomp_context * ctx) { @@ -44,98 +44,98 @@ extern "C" void osFlashClearStatus_recomp(uint8_t * rdram, recomp_context * ctx) } extern "C" void osFlashAllErase_recomp(uint8_t * rdram, recomp_context * ctx) { - save_clear(0, ultramodern::save_size, 0xFF); + save_clear(0, ultramodern::save_size, 0xFF); - ctx->r2 = 0; + ctx->r2 = 0; } extern "C" void osFlashAllEraseThrough_recomp(uint8_t * rdram, recomp_context * ctx) { - save_clear(0, ultramodern::save_size, 0xFF); + save_clear(0, ultramodern::save_size, 0xFF); - ctx->r2 = 0; + ctx->r2 = 0; } // This function is named sector but really means page. extern "C" void osFlashSectorErase_recomp(uint8_t * rdram, recomp_context * ctx) { - uint32_t page_num = (uint32_t)ctx->r4; + uint32_t page_num = (uint32_t)ctx->r4; - // Prevent out of bounds erase - if (page_num >= page_count) { - ctx->r2 = -1; - return; - } + // Prevent out of bounds erase + if (page_num >= page_count) { + ctx->r2 = -1; + return; + } - save_clear(page_num * page_size, page_size, 0xFF); + save_clear(page_num * page_size, page_size, 0xFF); - ctx->r2 = 0; + ctx->r2 = 0; } // Same naming issue as above. extern "C" void osFlashSectorEraseThrough_recomp(uint8_t * rdram, recomp_context * ctx) { - uint32_t page_num = (uint32_t)ctx->r4; + uint32_t page_num = (uint32_t)ctx->r4; - // Prevent out of bounds erase - if (page_num >= page_count) { - ctx->r2 = -1; - return; - } + // Prevent out of bounds erase + if (page_num >= page_count) { + ctx->r2 = -1; + return; + } - save_clear(page_num * page_size, page_size, 0xFF); + save_clear(page_num * page_size, page_size, 0xFF); - ctx->r2 = 0; + ctx->r2 = 0; } extern "C" void osFlashCheckEraseEnd_recomp(uint8_t * rdram, recomp_context * ctx) { - // All erases are blocking in this implementation, so this should always return OK. - ctx->r2 = 0; // FLASH_STATUS_ERASE_OK + // All erases are blocking in this implementation, so this should always return OK. + ctx->r2 = 0; // FLASH_STATUS_ERASE_OK } extern "C" void osFlashWriteBuffer_recomp(uint8_t * rdram, recomp_context * ctx) { - OSIoMesg* mb = TO_PTR(OSIoMesg, ctx->r4); - int32_t pri = ctx->r5; - PTR(void) dramAddr = ctx->r6; - PTR(OSMesgQueue) mq = ctx->r7; - - // Copy the input data into the write buffer - for (size_t i = 0; i < page_size; i++) { - write_buffer[i] = MEM_B(i, dramAddr); - } + OSIoMesg* mb = TO_PTR(OSIoMesg, ctx->r4); + int32_t pri = ctx->r5; + PTR(void) dramAddr = ctx->r6; + PTR(OSMesgQueue) mq = ctx->r7; + + // Copy the input data into the write buffer + for (size_t i = 0; i < page_size; i++) { + write_buffer[i] = MEM_B(i, dramAddr); + } - // Send the message indicating write completion - osSendMesg(PASS_RDRAM mq, 0, OS_MESG_NOBLOCK); + // Send the message indicating write completion + osSendMesg(PASS_RDRAM mq, 0, OS_MESG_NOBLOCK); - ctx->r2 = 0; + ctx->r2 = 0; } extern "C" void osFlashWriteArray_recomp(uint8_t * rdram, recomp_context * ctx) { - uint32_t page_num = ctx->r4; + uint32_t page_num = ctx->r4; - // Copy the write buffer into the save file - save_write_ptr(write_buffer.data(), page_num * page_size, page_size); + // Copy the write buffer into the save file + save_write_ptr(write_buffer.data(), page_num * page_size, page_size); - ctx->r2 = 0; + ctx->r2 = 0; } extern "C" void osFlashReadArray_recomp(uint8_t * rdram, recomp_context * ctx) { - OSIoMesg* mb = TO_PTR(OSIoMesg, ctx->r4); - int32_t pri = ctx->r5; - uint32_t page_num = ctx->r6; - PTR(void) dramAddr = ctx->r7; - uint32_t n_pages = MEM_W(0x10, ctx->r29); - PTR(OSMesgQueue) mq = MEM_W(0x14, ctx->r29); + OSIoMesg* mb = TO_PTR(OSIoMesg, ctx->r4); + int32_t pri = ctx->r5; + uint32_t page_num = ctx->r6; + PTR(void) dramAddr = ctx->r7; + uint32_t n_pages = MEM_W(0x10, ctx->r29); + PTR(OSMesgQueue) mq = MEM_W(0x14, ctx->r29); - uint32_t offset = page_num * page_size; - uint32_t count = n_pages * page_size; + uint32_t offset = page_num * page_size; + uint32_t count = n_pages * page_size; - // Read from the save file into the provided buffer - save_read(PASS_RDRAM dramAddr, offset, count); + // Read from the save file into the provided buffer + save_read(PASS_RDRAM dramAddr, offset, count); - // Send the message indicating read completion - osSendMesg(PASS_RDRAM mq, 0, OS_MESG_NOBLOCK); + // Send the message indicating read completion + osSendMesg(PASS_RDRAM mq, 0, OS_MESG_NOBLOCK); - ctx->r2 = 0; + ctx->r2 = 0; } extern "C" void osFlashChange_recomp(uint8_t * rdram, recomp_context * ctx) { - assert(false); + assert(false); } diff --git a/librecomp/src/pak.cpp b/librecomp/src/pak.cpp index 7335419..92e0f10 100644 --- a/librecomp/src/pak.cpp +++ b/librecomp/src/pak.cpp @@ -3,33 +3,33 @@ #include extern "C" void osPfsInitPak_recomp(uint8_t * rdram, recomp_context* ctx) { - ctx->r2 = 1; // PFS_ERR_NOPACK + ctx->r2 = 1; // PFS_ERR_NOPACK } extern "C" void osPfsFreeBlocks_recomp(uint8_t * rdram, recomp_context * ctx) { - ctx->r2 = 1; // PFS_ERR_NOPACK + ctx->r2 = 1; // PFS_ERR_NOPACK } extern "C" void osPfsAllocateFile_recomp(uint8_t * rdram, recomp_context * ctx) { - ctx->r2 = 1; // PFS_ERR_NOPACK + ctx->r2 = 1; // PFS_ERR_NOPACK } extern "C" void osPfsDeleteFile_recomp(uint8_t * rdram, recomp_context * ctx) { - ctx->r2 = 1; // PFS_ERR_NOPACK + ctx->r2 = 1; // PFS_ERR_NOPACK } extern "C" void osPfsFileState_recomp(uint8_t * rdram, recomp_context * ctx) { - ctx->r2 = 1; // PFS_ERR_NOPACK + ctx->r2 = 1; // PFS_ERR_NOPACK } extern "C" void osPfsFindFile_recomp(uint8_t * rdram, recomp_context * ctx) { - ctx->r2 = 1; // PFS_ERR_NOPACK + ctx->r2 = 1; // PFS_ERR_NOPACK } extern "C" void osPfsReadWriteFile_recomp(uint8_t * rdram, recomp_context * ctx) { - ctx->r2 = 1; // PFS_ERR_NOPACK + ctx->r2 = 1; // PFS_ERR_NOPACK } extern "C" void osPfsChecker_recomp(uint8_t * rdram, recomp_context * ctx) { - ctx->r2 = 1; // PFS_ERR_NOPACK + ctx->r2 = 1; // PFS_ERR_NOPACK } diff --git a/librecomp/src/patch_loading.cpp b/librecomp/src/patch_loading.cpp index 225bef9..660d6a5 100644 --- a/librecomp/src/patch_loading.cpp +++ b/librecomp/src/patch_loading.cpp @@ -7,5 +7,5 @@ void load_special_overlay(const SectionTableEntry& section, int32_t ram); void load_patch_functions() { - load_special_overlay(section_table[0], section_table[0].ram_addr); + load_special_overlay(section_table[0], section_table[0].ram_addr); } diff --git a/ultramodern/src/audio.cpp b/ultramodern/src/audio.cpp index f4f7257..b24e686 100644 --- a/ultramodern/src/audio.cpp +++ b/ultramodern/src/audio.cpp @@ -7,32 +7,32 @@ static uint32_t sample_rate = 48000; static ultramodern::audio_callbacks_t audio_callbacks; void set_audio_callbacks(const ultramodern::audio_callbacks_t& callbacks) { - audio_callbacks = callbacks; + audio_callbacks = callbacks; } void ultramodern::init_audio() { - // Pick an initial dummy sample rate; this will be set by the game later to the true sample rate. - set_audio_frequency(48000); + // Pick an initial dummy sample rate; this will be set by the game later to the true sample rate. + set_audio_frequency(48000); } void ultramodern::set_audio_frequency(uint32_t freq) { - if (audio_callbacks.set_frequency) { - audio_callbacks.set_frequency(freq); - } - sample_rate = freq; + if (audio_callbacks.set_frequency) { + audio_callbacks.set_frequency(freq); + } + sample_rate = freq; } void ultramodern::queue_audio_buffer(RDRAM_ARG PTR(int16_t) audio_data_, uint32_t byte_count) { - // Ensure that the byte count is an integer multiple of samples. - assert((byte_count & 1) == 0); + // Ensure that the byte count is an integer multiple of samples. + assert((byte_count & 1) == 0); - // Calculate the number of samples from the number of bytes. - uint32_t sample_count = byte_count / sizeof(int16_t); + // Calculate the number of samples from the number of bytes. + uint32_t sample_count = byte_count / sizeof(int16_t); - // Queue the swapped audio data. - if (audio_callbacks.queue_samples) { - audio_callbacks.queue_samples(TO_PTR(int16_t, audio_data_), sample_count); - } + // Queue the swapped audio data. + if (audio_callbacks.queue_samples) { + audio_callbacks.queue_samples(TO_PTR(int16_t, audio_data_), sample_count); + } } // For SDL2 @@ -44,24 +44,24 @@ float buffer_offset_frames = 0.5f; // the remaining sample count and reporting a number that's too high here can lead to issues. // Reporting a number that's too low can lead to audio lag in some games. uint32_t ultramodern::get_remaining_audio_bytes() { - // Get the number of remaining buffered audio bytes. - uint32_t buffered_byte_count; - if (audio_callbacks.get_frames_remaining != nullptr) { - buffered_byte_count = audio_callbacks.get_frames_remaining() * 2 * sizeof(int16_t); - } - else { - buffered_byte_count = 100; - } - // Adjust the reported count to be some number of refreshes in the future, which helps ensure that - // there are enough samples even if the audio thread experiences a small amount of lag. This prevents - // audio popping on games that use the buffered audio byte count to determine how many samples - // to generate. - uint32_t samples_per_vi = (sample_rate / 60); - if (buffered_byte_count > static_cast(buffer_offset_frames * sizeof(int16_t) * samples_per_vi)) { - buffered_byte_count -= static_cast(buffer_offset_frames * sizeof(int16_t) * samples_per_vi); - } - else { - buffered_byte_count = 0; - } - return buffered_byte_count; + // Get the number of remaining buffered audio bytes. + uint32_t buffered_byte_count; + if (audio_callbacks.get_frames_remaining != nullptr) { + buffered_byte_count = audio_callbacks.get_frames_remaining() * 2 * sizeof(int16_t); + } + else { + buffered_byte_count = 100; + } + // Adjust the reported count to be some number of refreshes in the future, which helps ensure that + // there are enough samples even if the audio thread experiences a small amount of lag. This prevents + // audio popping on games that use the buffered audio byte count to determine how many samples + // to generate. + uint32_t samples_per_vi = (sample_rate / 60); + if (buffered_byte_count > static_cast(buffer_offset_frames * sizeof(int16_t) * samples_per_vi)) { + buffered_byte_count -= static_cast(buffer_offset_frames * sizeof(int16_t) * samples_per_vi); + } + else { + buffered_byte_count = 0; + } + return buffered_byte_count; } diff --git a/ultramodern/src/events.cpp b/ultramodern/src/events.cpp index 957d704..669a05a 100644 --- a/ultramodern/src/events.cpp +++ b/ultramodern/src/events.cpp @@ -458,14 +458,14 @@ extern "C" void osViSetMode(RDRAM_ARG PTR(OSViMode) mode_) { #define VI_CTRL_PIXEL_ADV_3 0x03000 #define VI_CTRL_DITHER_FILTER_ON 0x10000 -#define OS_VI_GAMMA_ON 0x0001 -#define OS_VI_GAMMA_OFF 0x0002 -#define OS_VI_GAMMA_DITHER_ON 0x0004 -#define OS_VI_GAMMA_DITHER_OFF 0x0008 -#define OS_VI_DIVOT_ON 0x0010 -#define OS_VI_DIVOT_OFF 0x0020 -#define OS_VI_DITHER_FILTER_ON 0x0040 -#define OS_VI_DITHER_FILTER_OFF 0x0080 +#define OS_VI_GAMMA_ON 0x0001 +#define OS_VI_GAMMA_OFF 0x0002 +#define OS_VI_GAMMA_DITHER_ON 0x0004 +#define OS_VI_GAMMA_DITHER_OFF 0x0008 +#define OS_VI_DIVOT_ON 0x0010 +#define OS_VI_DIVOT_OFF 0x0020 +#define OS_VI_DITHER_FILTER_ON 0x0040 +#define OS_VI_DITHER_FILTER_OFF 0x0080 extern "C" void osViSetSpecialFeatures(uint32_t func) { if ((func & OS_VI_GAMMA_ON) != 0) { diff --git a/ultramodern/src/misc_ultra.cpp b/ultramodern/src/misc_ultra.cpp index 2b794b7..c01b9f7 100644 --- a/ultramodern/src/misc_ultra.cpp +++ b/ultramodern/src/misc_ultra.cpp @@ -1,12 +1,12 @@ #include "ultra64.h" -#define K0BASE 0x80000000 -#define K1BASE 0xA0000000 -#define K2BASE 0xC0000000 -#define IS_KSEG0(x) ((u32)(x) >= K0BASE && (u32)(x) < K1BASE) -#define IS_KSEG1(x) ((u32)(x) >= K1BASE && (u32)(x) < K2BASE) -#define K0_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* kseg0 to physical */ -#define K1_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* kseg1 to physical */ +#define K0BASE 0x80000000 +#define K1BASE 0xA0000000 +#define K2BASE 0xC0000000 +#define IS_KSEG0(x) ((u32)(x) >= K0BASE && (u32)(x) < K1BASE) +#define IS_KSEG1(x) ((u32)(x) >= K1BASE && (u32)(x) < K2BASE) +#define K0_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) +#define K1_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) u32 osVirtualToPhysical(PTR(void) addr) { uintptr_t addr_val = (uintptr_t)addr;