Added kysc to remove macros and removed no_segmented_memory

This commit is contained in:
KiritoDv
2023-08-15 11:23:39 -06:00
parent bb04ebdcc7
commit 290058189d
24 changed files with 442 additions and 446 deletions
-39
View File
@@ -34,7 +34,6 @@
#define REGULAR_FACE 0x0002
#define DIZZY_FACE 0x0003
#ifdef NO_SEGMENTED_MEMORY
#define EXECUTE(seg, script, scriptEnd, entry) \
CMD_BBH(0x00, 0x10, 0x0000), \
CMD_PTR(NULL), \
@@ -46,19 +45,6 @@
CMD_PTR(NULL), \
CMD_PTR(NULL), \
CMD_PTR(entry)
#else
#define EXECUTE(seg, script, scriptEnd, entry) \
CMD_BBH(0x00, 0x10, seg), \
CMD_PTR(script), \
CMD_PTR(scriptEnd), \
CMD_PTR(entry)
#define EXIT_AND_EXECUTE(seg, script, scriptEnd, entry) \
CMD_BBH(0x01, 0x10, seg), \
CMD_PTR(script), \
CMD_PTR(scriptEnd), \
CMD_PTR(entry)
#endif
#define EXIT() \
CMD_BBH(0x02, 0x04, 0x0000)
@@ -132,7 +118,6 @@
#define POP_POOL() \
CMD_BBH(0x15, 0x04, 0x0000)
#ifdef NO_SEGMENTED_MEMORY
#define FIXED_LOAD(loadAddr, romStart, romEnd) \
CMD_BBH(0x16, 0x10, 0x0000), \
CMD_PTR(NULL), \
@@ -148,38 +133,14 @@
CMD_BBH(0x18, 0x0C, 0x0000), \
CMD_PTR(NULL), \
CMD_PTR(NULL)
#else
#define FIXED_LOAD(loadAddr, romStart, romEnd) \
CMD_BBH(0x16, 0x10, 0x0000), \
CMD_PTR(loadAddr), \
CMD_PTR(romStart), \
CMD_PTR(romEnd)
#define LOAD_RAW(seg, romStart, romEnd) \
CMD_BBH(0x17, 0x0C, seg), \
CMD_PTR(romStart), \
CMD_PTR(romEnd)
#define LOAD_MIO0(seg, romStart, romEnd) \
CMD_BBH(0x18, 0x0C, seg), \
CMD_PTR(romStart), \
CMD_PTR(romEnd)
#endif
#define LOAD_MARIO_HEAD(sethead) \
CMD_BBH(0x19, 0x04, sethead)
#ifdef NO_SEGMENTED_MEMORY
#define LOAD_MIO0_TEXTURE(seg, romStart, romEnd) \
CMD_BBH(0x1A, 0x0C, 0x0000), \
CMD_PTR(NULL), \
CMD_PTR(NULL)
#else
#define LOAD_MIO0_TEXTURE(seg, romStart, romEnd) \
CMD_BBH(0x1A, 0x0C, seg), \
CMD_PTR(romStart), \
CMD_PTR(romEnd)
#endif
#define INIT_LEVEL() \
CMD_BBH(0x1B, 0x04, 0x0000)
-11
View File
@@ -47,20 +47,9 @@
#define ALIGNED16
#endif
#ifndef NO_SEGMENTED_MEMORY
// convert a virtual address to physical.
#define VIRTUAL_TO_PHYSICAL(addr) ((uintptr_t)(addr) & 0x1FFFFFFF)
// convert a physical address to virtual.
#define PHYSICAL_TO_VIRTUAL(addr) ((uintptr_t)(addr) | 0x80000000)
// another way of converting virtual to physical
#define VIRTUAL_TO_PHYSICAL2(addr) ((u8 *)(addr) - 0x80000000U)
#else
// no conversion needed other than cast
#define VIRTUAL_TO_PHYSICAL(addr) ((uintptr_t)(addr))
#define PHYSICAL_TO_VIRTUAL(addr) ((uintptr_t)(addr))
#define VIRTUAL_TO_PHYSICAL2(addr) ((void *)(addr))
#endif
#endif // MACROS_H
-90
View File
@@ -1,95 +1,5 @@
#ifndef SEGMENT_SYMBOLS_H
#define SEGMENT_SYMBOLS_H
#ifndef NO_SEGMENTED_MEMORY
#define DECLARE_SEGMENT(name) \
extern u8 _##name##SegmentRomStart[]; \
extern u8 _##name##SegmentRomEnd[];
#define DECLARE_ACTOR_SEGMENT(name) \
DECLARE_SEGMENT(name##_mio0) \
DECLARE_SEGMENT(name##_geo)
#define DECLARE_LEVEL_SEGMENT(name) \
DECLARE_SEGMENT(name) \
DECLARE_SEGMENT(name##_segment_7)
DECLARE_ACTOR_SEGMENT(common0)
DECLARE_ACTOR_SEGMENT(common1)
DECLARE_ACTOR_SEGMENT(group0)
DECLARE_ACTOR_SEGMENT(group1)
DECLARE_ACTOR_SEGMENT(group2)
DECLARE_ACTOR_SEGMENT(group3)
DECLARE_ACTOR_SEGMENT(group4)
DECLARE_ACTOR_SEGMENT(group5)
DECLARE_ACTOR_SEGMENT(group6)
DECLARE_ACTOR_SEGMENT(group7)
DECLARE_ACTOR_SEGMENT(group8)
DECLARE_ACTOR_SEGMENT(group9)
DECLARE_ACTOR_SEGMENT(group10)
DECLARE_ACTOR_SEGMENT(group11)
DECLARE_ACTOR_SEGMENT(group12)
DECLARE_ACTOR_SEGMENT(group13)
DECLARE_ACTOR_SEGMENT(group14)
DECLARE_ACTOR_SEGMENT(group15)
DECLARE_ACTOR_SEGMENT(group16)
DECLARE_ACTOR_SEGMENT(group17)
DECLARE_SEGMENT(entry)
DECLARE_SEGMENT(engine)
DECLARE_SEGMENT(behavior)
DECLARE_SEGMENT(scripts)
DECLARE_SEGMENT(goddard)
extern u8 _goddardSegmentStart[];
DECLARE_LEVEL_SEGMENT(menu)
DECLARE_LEVEL_SEGMENT(intro)
DECLARE_LEVEL_SEGMENT(ending)
#define STUB_LEVEL(_0, _1, _2, _3, _4, _5, _6, _7, _8)
#define DEFINE_LEVEL(_0, _1, _2, folder, _4, _5, _6, _7, _8, _9, _10) DECLARE_LEVEL_SEGMENT(folder)
#include "levels/level_defines.h"
#undef STUB_LEVEL
#undef DEFINE_LEVEL
DECLARE_SEGMENT(segment2_mio0)
DECLARE_SEGMENT(water_skybox_mio0)
DECLARE_SEGMENT(ccm_skybox_mio0)
DECLARE_SEGMENT(clouds_skybox_mio0)
DECLARE_SEGMENT(bitfs_skybox_mio0)
DECLARE_SEGMENT(wdw_skybox_mio0)
DECLARE_SEGMENT(cloud_floor_skybox_mio0)
DECLARE_SEGMENT(ssl_skybox_mio0)
DECLARE_SEGMENT(bbh_skybox_mio0)
DECLARE_SEGMENT(bidw_skybox_mio0)
DECLARE_SEGMENT(bits_skybox_mio0)
DECLARE_SEGMENT(fire_mio0)
DECLARE_SEGMENT(spooky_mio0)
DECLARE_SEGMENT(generic_mio0)
DECLARE_SEGMENT(water_mio0)
DECLARE_SEGMENT(sky_mio0)
DECLARE_SEGMENT(snow_mio0)
DECLARE_SEGMENT(cave_mio0)
DECLARE_SEGMENT(machine_mio0)
DECLARE_SEGMENT(mountain_mio0)
DECLARE_SEGMENT(grass_mio0)
DECLARE_SEGMENT(outside_mio0)
DECLARE_SEGMENT(inside_mio0)
DECLARE_SEGMENT(effect_mio0)
DECLARE_SEGMENT(title_screen_bg_mio0)
DECLARE_SEGMENT(debug_level_select_mio0)
#ifdef VERSION_EU
DECLARE_SEGMENT(translation_de_mio0)
DECLARE_SEGMENT(translation_en_mio0)
DECLARE_SEGMENT(translation_fr_mio0)
#endif
#endif
#endif // SEGMENT_SYMBOLS_H
-5
View File
@@ -72,18 +72,13 @@ const LevelScript level_main_menu_entry_2[] = {
/*25*/ FREE_LEVEL_POOL(),
/*26*/ LOAD_AREA(/*area*/ 2),
#ifdef NO_SEGMENTED_MEMORY
// sVisibleStars is set to 0 during FIXED_LOAD above on N64, but not when NO_SEGMENTED_MEMORY is used.
// lvl_init_act_selector_values_and_stars must be called here otherwise the previous
// value is retained and causes incorrect drawing during the 16 transition frames.
CALL(/*arg*/ 0, /*func*/ lvl_init_act_selector_values_and_stars),
#endif
/*27*/ TRANSITION(/*transType*/ WARP_TRANSITION_FADE_FROM_COLOR, /*time*/ 16, /*color*/ 0xFF, 0xFF, 0xFF),
/*29*/ SLEEP(/*frames*/ 16),
/*30*/ SET_MENU_MUSIC(/*seq*/ 0x000D),
#ifndef NO_SEGMENTED_MEMORY
/*31*/ CALL(/*arg*/ 0, /*func*/ lvl_init_act_selector_values_and_stars),
#endif
/*33*/ CALL_LOOP(/*arg*/ 0, /*func*/ lvl_update_obj_and_load_act_button_actions),
/*35*/ GET_OR_SET(/*op*/ OP_SET, /*var*/ VAR_CURR_ACT_NUM),
/*36*/ STOP_MUSIC(/*fadeOutTime*/ 0x00BE),
@@ -20,10 +20,6 @@
#define PORTAMENTO_MODE_5 5
#define COPT 0
#if COPT
#define M64_READ_U8(state, dst) \
dst = m64_read_u8(state);
#else
#define M64_READ_U8(state, dst) \
{ \
u8 * _ptr_pc; \
@@ -33,13 +29,8 @@
_pc = *_ptr_pc; \
dst = _pc; \
}
#endif
#if COPT
#define M64_READ_S16(state, dst) \
dst = m64_read_s16(state);
#else
#define M64_READ_S16(state, dst) \
{ \
s16 _ret; \
@@ -49,11 +40,6 @@
((*state).pc)++; \
dst = _ret; \
}
#endif
#if COPT
#define M64_READ_COMPRESSED_U16(state, dst) \
dst = m64_read_compressed_u16(state);
#else
#define M64_READ_COMPRESSED_U16(state, dst) \
{ \
u16 ret = *(state->pc++); \
@@ -63,12 +49,7 @@
} \
dst = ret; \
}
#endif
#if COPT
#define GET_INSTRUMENT(seqChannel, instId, _instOut, _adsr, dst, l) \
dst = get_instrument(seqChannel, instId, _instOut, _adsr);
#else
#define GET_INSTRUMENT(seqChannel, instId, _instOut, _adsr, dst, l) \
{ \
struct AdsrSettings *adsr = _adsr; \
@@ -112,7 +93,6 @@ struct Instrument **instOut = _instOut;\
*instOut = NULL; \
ret ## l: ; \
}
#endif
void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) {
struct SequencePlayer *seqPlayer; // sp5C, t4
-16
View File
@@ -271,12 +271,6 @@ struct Drum *get_drum(s32 bankId, s32 drumId) {
return NULL;
}
#ifndef NO_SEGMENTED_MEMORY
if ((uintptr_t) gCtlEntries[bankId].drums < 0x80000000U) {
stubbed_printf("Percussion Pointer Error\n");
return NULL;
}
#endif
drum = gCtlEntries[bankId].drums[drumId];
if (drum == NULL) {
@@ -393,11 +387,6 @@ void process_notes(void) {
#if defined(VERSION_EU) || defined(VERSION_SH)
playbackState = (struct NotePlaybackState *) &note->priority;
if (note->parentLayer != NO_LAYER) {
#ifndef NO_SEGMENTED_MEMORY
if ((uintptr_t) playbackState->parentLayer < 0x7fffffffU) {
continue;
}
#endif
#ifdef VERSION_SH
if (note != playbackState->parentLayer->note && playbackState->unkSH34 == 0) {
playbackState->adsr.action |= ADSR_ACTION_RELEASE;
@@ -680,11 +669,6 @@ struct Drum *get_drum(s32 bankId, s32 drumId) {
return NULL;
}
#ifndef NO_SEGMENTED_MEMORY
if ((uintptr_t) gCtlEntries[bankId].drums < 0x80000000U) {
return NULL;
}
#endif
drum = gCtlEntries[bankId].drums[drumId];
if (drum == NULL) {
-10
View File
@@ -1,7 +1,5 @@
#include <libultraship.h>
#ifdef NO_SEGMENTED_MEMORY
#include <string.h>
#endif
#include "sm64.h"
#include "audio/external.h"
@@ -594,9 +592,6 @@ static void level_cmd_set_gamma(void) {
static void level_cmd_set_terrain_data(void) {
if (sCurrAreaIndex != -1) {
#ifndef NO_SEGMENTED_MEMORY
gAreas[sCurrAreaIndex].terrainData = segmented_to_virtual(CMD_GET(void *, 4));
#else
Collision *data;
u32 size;
@@ -605,7 +600,6 @@ static void level_cmd_set_terrain_data(void) {
size = get_area_terrain_size(data) * sizeof(Collision);
gAreas[sCurrAreaIndex].terrainData = alloc_only_pool_alloc(sLevelPool, size);
memcpy(gAreas[sCurrAreaIndex].terrainData, data, size);
#endif
}
sCurrentCmd = CMD_NEXT;
}
@@ -619,9 +613,6 @@ static void level_cmd_set_rooms(void) {
static void level_cmd_set_macro_objects(void) {
if (sCurrAreaIndex != -1) {
#ifndef NO_SEGMENTED_MEMORY
gAreas[sCurrAreaIndex].macroObjects = segmented_to_virtual(CMD_GET(void *, 4));
#else
// The game modifies the macro object data (for example marking coins as taken),
// so it must be reset when the level reloads.
MacroObject *data = segmented_to_virtual(CMD_GET(void *, 4));
@@ -631,7 +622,6 @@ static void level_cmd_set_macro_objects(void) {
}
gAreas[sCurrAreaIndex].macroObjects = alloc_only_pool_alloc(sLevelPool, len * sizeof(MacroObject));
memcpy(gAreas[sCurrAreaIndex].macroObjects, data, len * sizeof(MacroObject));
#endif
}
sCurrentCmd = CMD_NEXT;
}
-2
View File
@@ -529,7 +529,6 @@ void alloc_surface_pools(void) {
reset_red_coins_collected();
}
#ifdef NO_SEGMENTED_MEMORY
/**
* Get the size of the terrain data, to get the correct size when copying later.
*/
@@ -577,7 +576,6 @@ u32 get_area_terrain_size(s16 *data) {
return data - startPos;
}
#endif
/**
-2
View File
@@ -32,9 +32,7 @@ extern struct Surface *sSurfacePool;
extern s16 sSurfacePoolSize;
void alloc_surface_pools(void);
#ifdef NO_SEGMENTED_MEMORY
u32 get_area_terrain_size(s16 *data);
#endif
void load_area_terrain(s16 index, s16 *data, s8 *surfaceRooms, s16 *macroObjects);
void clear_dynamic_surfaces(void);
void load_object_collision_model(void);
-2
View File
@@ -324,7 +324,6 @@ void spawn_special_objects(s16 areaIndex, s16 **specialObjList) {
}
}
#ifdef NO_SEGMENTED_MEMORY
u32 get_special_objects_size(s16 *data) {
s16 *startPos = data;
s32 numOfSpecialObjects;
@@ -368,4 +367,3 @@ u32 get_special_objects_size(s16 *data) {
return data - startPos;
}
#endif
-2
View File
@@ -14,8 +14,6 @@ void spawn_macro_abs_special(s32 model, const BehaviorScript *behavior, s16 x, s
void spawn_macro_objects(s16 areaIndex, s16 *macroObjList);
void spawn_macro_objects_hardcoded(s16 areaIndex, s16 *macroObjList);
void spawn_special_objects(s16 areaIndex, s16 **specialObjList);
#ifdef NO_SEGMENTED_MEMORY
u32 get_special_objects_size(s16 *data);
#endif
#endif // MACRO_SPECIAL_OBJECTS_H
-118
View File
@@ -73,28 +73,6 @@ void *get_segment_base_addr(s32 segment) {
return (void *) (sSegmentTable[segment] | 0x80000000);
}
#ifndef NO_SEGMENTED_MEMORY
void *segmented_to_virtual(const void *addr) {
size_t segment = (uintptr_t) addr >> 24;
size_t offset = (uintptr_t) addr & 0x00FFFFFF;
return (void *) ((sSegmentTable[segment] + offset) | 0x80000000);
}
void *virtual_to_segmented(u32 segment, const void *addr) {
size_t offset = ((uintptr_t) addr & 0x1FFFFFFF) - sSegmentTable[segment];
return (void *) ((segment << 24) + offset);
}
void move_segment_table_to_dmem(void) {
s32 i;
for (i = 0; i < 16; i++) {
gSPSegment(gDisplayListHead++, i, sSegmentTable[i]);
}
}
#else
void *segmented_to_virtual(const void *addr) {
return (void *) addr;
}
@@ -105,7 +83,6 @@ void *virtual_to_segmented(u32 segment, const void *addr) {
void move_segment_table_to_dmem(void) {
}
#endif
/**
* Initialize the main memory pool. This pool is conceptually a pair of stacks
@@ -275,101 +252,6 @@ static void *dynamic_dma_read(u8 *srcStart, u8 *srcEnd, u32 side) {
return dest;
}
#ifndef NO_SEGMENTED_MEMORY
/**
* Load data from ROM into a newly allocated block, and set the segment base
* address to this block.
*/
void *load_segment(s32 segment, u8 *srcStart, u8 *srcEnd, u32 side) {
void *addr = dynamic_dma_read(srcStart, srcEnd, side);
if (addr != NULL) {
set_segment_base_addr(segment, addr);
}
return addr;
}
/*
* Allocate a block of memory starting at destAddr and ending at the end of
* the memory pool. Then copy srcStart through srcEnd from ROM to this block.
* If this block is not large enough to hold the ROM data, or that portion
* of the pool is already allocated, return NULL.
*/
void *load_to_fixed_pool_addr(u8 *destAddr, u8 *srcStart, u8 *srcEnd) {
void *dest = NULL;
u32 srcSize = ALIGN16(srcEnd - srcStart);
u32 destSize = ALIGN16((u8 *) sPoolListHeadR - destAddr);
if (srcSize <= destSize) {
dest = main_pool_alloc(destSize, MEMORY_POOL_RIGHT);
if (dest != NULL) {
bzero(dest, destSize);
osWritebackDCacheAll();
dma_read(dest, srcStart, srcEnd);
osInvalICache(dest, destSize);
osInvalDCache(dest, destSize);
}
} else {
}
return dest;
}
/**
* Decompress the block of ROM data from srcStart to srcEnd and return a
* pointer to an allocated buffer holding the decompressed data. Set the
* base address of segment to this address.
*/
void *load_segment_decompress(s32 segment, u8 *srcStart, u8 *srcEnd) {
void *dest = NULL;
u32 compSize = ALIGN16(srcEnd - srcStart);
u8 *compressed = main_pool_alloc(compSize, MEMORY_POOL_RIGHT);
// Decompressed size from mio0 header
u32 *size = (u32 *) (compressed + 4);
if (compressed != NULL) {
dma_read(compressed, srcStart, srcEnd);
dest = main_pool_alloc(*size, MEMORY_POOL_LEFT);
if (dest != NULL) {
decompress(compressed, dest);
set_segment_base_addr(segment, dest);
main_pool_free(compressed);
} else {
}
} else {
}
return dest;
}
void *load_segment_decompress_heap(u32 segment, u8 *srcStart, u8 *srcEnd) {
UNUSED void *dest = NULL;
u32 compSize = ALIGN16(srcEnd - srcStart);
u8 *compressed = main_pool_alloc(compSize, MEMORY_POOL_RIGHT);
UNUSED u32 *pUncSize = (u32 *) (compressed + 4);
if (compressed != NULL) {
dma_read(compressed, srcStart, srcEnd);
decompress(compressed, gDecompressionHeap);
set_segment_base_addr(segment, gDecompressionHeap);
main_pool_free(compressed);
} else {
}
return gDecompressionHeap;
}
void load_engine_code_segment(void) {
void *startAddr = (void *) SEG_ENGINE;
u32 totalSize = SEG_FRAMEBUFFERS - SEG_ENGINE;
UNUSED u32 alignedSize = ALIGN16(_engineSegmentRomEnd - _engineSegmentRomStart);
bzero(startAddr, totalSize);
osWritebackDCacheAll();
dma_read(startAddr, _engineSegmentRomStart, _engineSegmentRomEnd);
osInvalICache(startAddr, totalSize);
osInvalDCache(startAddr, totalSize);
}
#endif
/**
* Allocate an allocation-only pool from the main pool. This pool doesn't
-8
View File
@@ -55,19 +55,11 @@ u32 main_pool_available(void);
u32 main_pool_push_state(void);
u32 main_pool_pop_state(void);
#ifndef NO_SEGMENTED_MEMORY
void *load_segment(s32 segment, u8 *srcStart, u8 *srcEnd, u32 side);
void *load_to_fixed_pool_addr(u8 *destAddr, u8 *srcStart, u8 *srcEnd);
void *load_segment_decompress(s32 segment, u8 *srcStart, u8 *srcEnd);
void *load_segment_decompress_heap(u32 segment, u8 *srcStart, u8 *srcEnd);
void load_engine_code_segment(void);
#else
#define load_segment(...)
#define load_to_fixed_pool_addr(...)
#define load_segment_decompress(...)
#define load_segment_decompress_heap(...)
#define load_engine_code_segment(...)
#endif
struct AllocOnlyPool *alloc_only_pool_init(u32 size, u32 side);
void *alloc_only_pool_alloc(struct AllocOnlyPool *pool, s32 size);
-2
View File
@@ -1066,7 +1066,6 @@ void reset_painting(struct Painting *painting) {
gRipplingPainting = NULL;
#ifdef NO_SEGMENTED_MEMORY
// Make sure all variables are reset correctly.
// With segmented memory the segments that contain the relevant
// Painting structs are reloaded from ROM upon level load.
@@ -1083,7 +1082,6 @@ void reset_painting(struct Painting *painting) {
// that moves the painting stops during level unload.
painting->posX = 3456.0f;
}
#endif
}
/**
-99
View File
@@ -23,15 +23,9 @@
#define MAX_GD_DLS 1000
#define OS_MESG_SI_COMPLETE 0x33333333
#ifndef NO_SEGMENTED_MEMORY
#define GD_VIRTUAL_TO_PHYSICAL(addr) ((uintptr_t)(addr) &0x0FFFFFFF)
#define GD_LOWER_24(addr) ((uintptr_t)(addr) &0x00FFFFFF)
#define GD_LOWER_29(addr) (((uintptr_t)(addr)) & 0x1FFFFFFF)
#else
#define GD_VIRTUAL_TO_PHYSICAL(addr) (addr)
#define GD_LOWER_24(addr) ((uintptr_t)(addr))
#define GD_LOWER_29(addr) (((uintptr_t)(addr)))
#endif
#define MTX_INTPART_PACK(w1, w2) (((w1) &0xFFFF0000) | (((w2) >> 16) & 0xFFFF))
#define MTX_FRACPART_PACK(w1, w2) ((((w1) << 16) & 0xFFFF0000) | ((w2) &0xFFFF))
@@ -3708,102 +3702,9 @@ void stub_renderer_18(UNUSED u32 a0) {
void stub_renderer_19(UNUSED u32 a0) {
}
#ifndef NO_SEGMENTED_MEMORY
/**
* Copies `size` bytes of data from ROM address `romAddr` to RAM address `vAddr`.
*/
static void gd_block_dma(u32 romAddr, void *vAddr, s32 size) {
s32 blockSize;
do {
if ((blockSize = size) > 0x1000) {
blockSize = 0x1000;
}
osPiStartDma(&sGdDMAReqMesg, OS_MESG_PRI_NORMAL, OS_READ, romAddr, vAddr, blockSize, &sGdDMAQueue);
osRecvMesg(&sGdDMAQueue, &sGdDMACompleteMsg, OS_MESG_BLOCK);
romAddr += blockSize;
vAddr = (void *) ((uintptr_t) vAddr + blockSize);
size -= 0x1000;
} while (size > 0);
}
/**
* Loads the specified DynList from ROM and processes it.
*/
struct GdObj *load_dynlist(struct DynList *dynlist) {
u32 segSize;
u8 *allocSegSpace;
void *allocPtr;
uintptr_t dynlistSegStart;
uintptr_t dynlistSegEnd;
s32 i;
s32 tlbEntries;
struct GdObj *loadedList;
i = -1;
// Make sure the dynlist exists
while (sDynLists[++i].list != NULL) {
if (sDynLists[i].list == dynlist) {
break;
}
}
if (sDynLists[i].list == NULL) {
fatal_printf("load_dynlist() ptr not found in any banks");
}
switch (sDynLists[i].flag) {
case STD_LIST_BANK:
dynlistSegStart = (uintptr_t) _gd_dynlistsSegmentRomStart;
dynlistSegEnd = (uintptr_t) _gd_dynlistsSegmentRomEnd;
break;
default:
fatal_printf("load_dynlist() unkown bank");
}
#define PAGE_SIZE 65536 // size of a 64K TLB page
segSize = dynlistSegEnd - dynlistSegStart;
allocSegSpace = gd_malloc_temp(segSize + PAGE_SIZE);
if ((allocPtr = (void *) allocSegSpace) == NULL) {
fatal_printf("Not enough DRAM for DATA segment \n");
}
allocSegSpace = (u8 *) (((uintptr_t) allocSegSpace + PAGE_SIZE) & 0xFFFF0000);
// Copy the dynlist data from ROM
gd_block_dma(dynlistSegStart, (void *) allocSegSpace, segSize);
tlbEntries = (segSize / PAGE_SIZE) / 2 + 1;
if (tlbEntries >= 31) {
fatal_printf("load_dynlist() too many TLBs");
}
// Map virtual address 0x04000000 to `allocSegSpace`
for (i = 0; i < tlbEntries; i++) {
osMapTLB(i, 0,
(void *) (uintptr_t) (0x04000000 + (i * 2 * PAGE_SIZE)), // virtual address to map
GD_LOWER_24(((uintptr_t) allocSegSpace) + (i * 2 * PAGE_SIZE) + 0), // even page address
GD_LOWER_24(((uintptr_t) allocSegSpace) + (i * 2 * PAGE_SIZE) + PAGE_SIZE), // odd page address
-1);
}
#undef PAGE_SIZE
// process the dynlist
loadedList = proc_dynlist(dynlist);
gd_free(allocPtr);
return loadedList;
}
#else
struct GdObj *load_dynlist(struct DynList *dynlist) {
return proc_dynlist(dynlist);
}
#endif
/**
* Unused (not called)
-4
View File
@@ -14114,7 +14114,6 @@ int afGetVirtualChannels (AFfilehandle file, int trackid)
#define SEG_MASK (0x70) /* Segment field mask. */
/* see libst.h */
#ifdef SUPERCEDED
static const short seg_end[8] = {0xFF, 0x1FF, 0x3FF, 0x7FF,
0xFFF, 0x1FFF, 0x3FFF, 0x7FFF};
@@ -14298,7 +14297,6 @@ int _af_ulaw2linear (unsigned char u_val)
return ((u_val & SIGN_BIT) ? (BIAS - t) : (t - BIAS));
}
#endif
// file: openclose.cpp
/*
@@ -14326,9 +14324,7 @@ int _af_ulaw2linear (unsigned char u_val)
#include <assert.h>
#include <string.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <audiofile.h>
-10
View File
@@ -172,9 +172,7 @@ static char ctype[] = { 0,
#define REDIRECT_USR_LIB
#ifdef REDIRECT_USR_LIB
static char bin_dir[PATH_MAX + 1];
#endif
static int g_file_max = 3;
#if defined(__CYGWIN__) || defined(__APPLE__)
@@ -236,7 +234,6 @@ static void free_all_file_bufs(uint8_t *mem) {
}
static void find_bin_dir(void) {
#ifdef REDIRECT_USR_LIB
// gets the current executable's path
char path[PATH_MAX + 1] = {0};
#ifdef __CYGWIN__
@@ -257,7 +254,6 @@ static void find_bin_dir(void) {
#endif
strcpy(bin_dir, dirname(path));
#endif
}
int main(int argc, char *argv[]) {
@@ -1205,7 +1201,6 @@ static uint32_t init_file(uint8_t *mem, int fd, int i, const char *path, const c
}
if (fd == -1) {
#ifdef REDIRECT_USR_LIB
char fixed_path[PATH_MAX + 1];
if (!strcmp(path, "/usr/lib/err.english.cc") && bin_dir[0] != '\0') {
int n = snprintf(fixed_path, sizeof(fixed_path), "%s/err.english.cc", bin_dir);
@@ -1213,7 +1208,6 @@ static uint32_t init_file(uint8_t *mem, int fd, int i, const char *path, const c
path = fixed_path;
}
}
#endif
fd = open(path, flags, 0666);
if (fd < 0) {
MEM_U32(ERRNO_ADDR) = errno;
@@ -2438,7 +2432,6 @@ int wrapper_execvp(uint8_t *mem, uint32_t file_addr, uint32_t argv_addr) {
}
argv[argc] = NULL;
#ifdef REDIRECT_USR_LIB
if (!strncmp(file, "/usr/lib/", 9) && bin_dir[0] != '\0') {
char fixed_path[PATH_MAX + 1];
#ifdef __CYGWIN__
@@ -2454,9 +2447,6 @@ int wrapper_execvp(uint8_t *mem, uint32_t file_addr, uint32_t argv_addr) {
} else {
execvp(file, argv);
}
#else
execvp(file, argv);
#endif
MEM_U32(ERRNO_ADDR) = errno;
for (uint32_t i = 0; i < argc; i++) {
-6
View File
@@ -797,9 +797,6 @@ static void pass2(void) {
uint32_t faddr = insn.operands[1].imm;
li_function_pointers.insert(faddr);
functions[faddr].referenced_by_function_pointer = true;
#if INSPECT_FUNCTION_POINTERS
fprintf(stderr, "li function pointer: 0x%x at 0x%x\n", faddr, addr);
#endif
}
}
for (auto it = functions.begin(); it != functions.end(); ++it) {
@@ -2288,9 +2285,6 @@ static void inspect_data_function_pointers(vector<pair<uint32_t, uint32_t>>& ret
continue;
}
if (addr >= text_vaddr && addr < text_vaddr + text_section_len && addr % 4 == 0) {
#if INSPECT_FUNCTION_POINTERS
fprintf(stderr, "assuming function pointer 0x%x at 0x%x\n", addr, section_vaddr + i);
#endif
ret.push_back(make_pair(section_vaddr + i, addr));
label_addresses.insert(addr);
functions[addr].referenced_by_function_pointer = true;
+1
View File
@@ -0,0 +1 @@
target/
+320
View File
@@ -0,0 +1,320 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "anstream"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-wincon",
"concolor-override",
"concolor-query",
"is-terminal",
"utf8parse",
]
[[package]]
name = "anstyle"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2"
[[package]]
name = "anstyle-parse"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-wincon"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa"
dependencies = [
"anstyle",
"windows-sys",
]
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "cc"
version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
[[package]]
name = "clap"
version = "4.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3"
dependencies = [
"clap_builder",
"clap_derive",
"once_cell",
]
[[package]]
name = "clap_builder"
version = "4.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f"
dependencies = [
"anstream",
"anstyle",
"bitflags",
"clap_lex",
"strsim",
]
[[package]]
name = "clap_derive"
version = "4.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "clap_lex"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
[[package]]
name = "concolor-override"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f"
[[package]]
name = "concolor-query"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf"
dependencies = [
"windows-sys",
]
[[package]]
name = "errno"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0"
dependencies = [
"errno-dragonfly",
"libc",
"windows-sys",
]
[[package]]
name = "errno-dragonfly"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
dependencies = [
"cc",
"libc",
]
[[package]]
name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hermit-abi"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
[[package]]
name = "io-lifetimes"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb"
dependencies = [
"hermit-abi",
"libc",
"windows-sys",
]
[[package]]
name = "is-terminal"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8"
dependencies = [
"hermit-abi",
"io-lifetimes",
"rustix",
"windows-sys",
]
[[package]]
name = "kysc"
version = "0.1.0"
dependencies = [
"clap",
]
[[package]]
name = "libc"
version = "0.2.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
[[package]]
name = "linux-raw-sys"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd550e73688e6d578f0ac2119e32b797a327631a42f9433e59d02e139c8df60d"
[[package]]
name = "once_cell"
version = "1.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
[[package]]
name = "proc-macro2"
version = "1.0.54"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
dependencies = [
"proc-macro2",
]
[[package]]
name = "rustix"
version = "0.37.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e78cc525325c06b4a7ff02db283472f3c042b7ff0c391f96c6d5ac6f4f91b75"
dependencies = [
"bitflags",
"errno",
"io-lifetimes",
"libc",
"linux-raw-sys",
"windows-sys",
]
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "syn"
version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79d9531f94112cfc3e4c8f5f02cb2b58f72c97b7efd85f70203cc6d8efda5927"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
[[package]]
name = "utf8parse"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
[[package]]
name = "windows-sys"
version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
dependencies = [
"windows-targets",
]
[[package]]
name = "windows-targets"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"

Some files were not shown because too many files have changed in this diff Show More