mirror of
https://github.com/zeldaret/mm.git
synced 2026-06-16 14:30:26 -04:00
osFlash (#158)
* some matches * Decompile code_0x80186A70 Add defines for KSEG0/1 and (Un)Cached RDRAM * format * cleanup * moved osFlash and imported data * implement fixes * format again * Update include/functions.h Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * Update include/variables.h Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * Update src/libultra/flash/osFlash.c Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * Update src/libultra/flash/osFlash.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * returns are needed * format * Update src/libultra/flash/osFlash.c Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * Update src/libultra/flash/osFlash.c Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * Update src/libultra/flash/osFlash.c Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * Update src/libultra/flash/osFlash.c Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com> * Update src/libultra/flash/osFlash.c Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com> * Update src/libultra/flash/osFlash.c Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com> * should be fixed Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain> Co-authored-by: MMDecomp <mmdecomp@gmail.com> Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com>
This commit is contained in:
+17
-15
@@ -416,7 +416,7 @@ void __osViInit(void);
|
||||
void __osViSwapContext(void);
|
||||
OSMesgQueue* osPiGetCmdQueue(void);
|
||||
f32 __cosf(f32 __x);
|
||||
// void osEPiReadIo(void);
|
||||
s32 osEPiReadIo(OSPiHandle* pihandle, u32 devAddr, u32* data);
|
||||
void osViSetSpecialFeatures(u32 func);
|
||||
s16 coss(u16 x);
|
||||
void osSetTime(OSTime ticks);
|
||||
@@ -439,7 +439,7 @@ u32 __osGetFpcCsr(void);
|
||||
// void corrupted_init(void);
|
||||
// void corrupted(void);
|
||||
u32 osAiGetLength(void);
|
||||
// void osEPiWriteIo(void);
|
||||
s32 osEPiWriteIo(OSPiHandle* pihandle, u32 devAddr, u32 data);
|
||||
void osMapTLBRdb(void);
|
||||
void osYieldThread(void);
|
||||
// void guTranslate(void);
|
||||
@@ -3494,19 +3494,21 @@ void SysFlashrom_ThreadEntry(s80185D40* param_1);
|
||||
// void func_80185F04(void);
|
||||
// void func_80185F64(void);
|
||||
s32 func_80185F90(u32 param_1);
|
||||
// void func_80186A70(void);
|
||||
// void func_80186B78(void);
|
||||
// void func_80186CAC(void);
|
||||
// void func_80186D60(void);
|
||||
// void func_80186E64(void);
|
||||
// void func_80186EC8(void);
|
||||
// void func_80187018(void);
|
||||
// void func_80187080(void);
|
||||
// void func_80187124(void);
|
||||
// void func_80187284(void);
|
||||
// void func_801872FC(void);
|
||||
// void func_801873BC(void);
|
||||
// void func_8018752C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
|
||||
u32 osFlashGetAddr(u32 pageNum);
|
||||
OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start);
|
||||
void osFlashChange(u32 flashNum);
|
||||
OSPiHandle* osFlashInit(void);
|
||||
void osFlashReadStatus(u8* flashStatus);
|
||||
void osFlashReadId(u32* flashType, u32* flashVendor);
|
||||
void osFlashClearStatus(void);
|
||||
s32 osFlashAllErase(void);
|
||||
void osFlashAllEraseThrough(void);
|
||||
s32 osFlashCheckEraseEnd(void);
|
||||
s32 osFlashSectorErase(u32 pageNum);
|
||||
void osFlashSectorEraseThrough(u32 pageNum);
|
||||
s32 osFlashWriteBuffer(OSIoMesg* mb, s32 priority, void* dramAddr, OSMesgQueue* mq);
|
||||
s32 osFlashWriteArray(u32 pageNum);
|
||||
s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u32 pageCount, OSMesgQueue* mq);
|
||||
// void func_801877D0(void);
|
||||
// void func_80187B64(void);
|
||||
// void func_80187BEC(void);
|
||||
|
||||
+4
-7
@@ -8,13 +8,10 @@
|
||||
#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0]))
|
||||
#define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0]))
|
||||
|
||||
#define HW_REG(reg, type) *(volatile type*)((reg) | 0xa0000000)
|
||||
|
||||
// TODO: After uintptr_t cast change should have an AVOID_UB target that just toggles the KSEG0 bit in the address
|
||||
// rather than add/sub 0x80000000
|
||||
#define PHYSICAL_TO_VIRTUAL(addr) ((uintptr_t)(addr) + 0x80000000)
|
||||
#define PHYSICAL_TO_VIRTUAL2(addr) ((uintptr_t)(addr)-0x80000000)
|
||||
#define VIRTUAL_TO_PHYSICAL(addr) (uintptr_t)((u8*)(addr)-0x80000000)
|
||||
// TODO: After uintptr_t cast change should have an AVOID_UB target that just toggles the KSEG0 bit in the address rather than add/sub 0x80000000
|
||||
#define PHYSICAL_TO_VIRTUAL(addr) ((uintptr_t)(addr) + RDRAM_CACHED)
|
||||
#define PHYSICAL_TO_VIRTUAL2(addr) ((uintptr_t)(addr) - RDRAM_CACHED)
|
||||
#define VIRTUAL_TO_PHYSICAL(addr) (uintptr_t)((u8*)(addr) - RDRAM_CACHED)
|
||||
#define SEGMENTED_TO_VIRTUAL(addr) (void*)(PHYSICAL_TO_VIRTUAL(gSegments[SEGMENT_NUMBER(addr)]) + SEGMENT_OFFSET(addr))
|
||||
|
||||
#define GET_ACTIVE_CAM(globalCtx) ((globalCtx)->cameraPtrs[(globalCtx)->activeCamera])
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
#ifndef _ULTRA64_HARDWARE_H_
|
||||
#define _ULTRA64_HARDWARE_H_
|
||||
|
||||
#define HW_REG(reg, type) *(volatile type*)((reg) | 0xa0000000)
|
||||
// Segment Wrapper
|
||||
// Uncached RDRAM
|
||||
#define KSEG1 0xA0000000 // 0xA0000000 - 0xBFFFFFFF Physical memory, uncached, unmapped
|
||||
#define RDRAM_UNCACHED KSEG1
|
||||
|
||||
// Cached RDRAM
|
||||
#define KSEG0 0x80000000 // 0x80000000 - 0x9FFFFFFF Physical memory, cached, unmapped
|
||||
#define RDRAM_CACHED KSEG0
|
||||
|
||||
// Volatile access wrapper, enforcing uncached memory
|
||||
#define HW_REG(reg, type) *(volatile type*)((reg) | KSEG1)
|
||||
|
||||
#define AI_DRAM_ADDR_REG 0x04500000
|
||||
#define AI_LEN_REG 0x04500004
|
||||
|
||||
@@ -3538,12 +3538,6 @@ extern StackEntry sys_flashromStackEntry;
|
||||
extern OSThread sys_flashromOSThread;
|
||||
extern s80185D40 D_801FD008;
|
||||
extern OSMesg D_801FD034;
|
||||
// extern UNK_TYPE1 D_801FD040;
|
||||
extern OSIoMesg D_801FD050;
|
||||
extern OSMesgQueue D_801FD068;
|
||||
extern OSPiHandle D_801FD080;
|
||||
// extern UNK_TYPE1 D_801FD0F4;
|
||||
// extern UNK_TYPE1 D_801FD0F8;
|
||||
// extern UNK_TYPE1 D_801FD120;
|
||||
// extern UNK_TYPE1 D_801FD140;
|
||||
// extern UNK_TYPE1 D_801FD158;
|
||||
|
||||
@@ -1694,4 +1694,43 @@ typedef struct {
|
||||
/* 0x04 */ const char* name;
|
||||
} FlagSetEntry; // size = 0x08
|
||||
|
||||
// TODO: Dedicated Header?
|
||||
#define FRAM_BASE_ADDRESS 0x08000000 // FRAM Base Address in Cart Memory
|
||||
#define FRAM_STATUS_REGISTER FRAM_BASE_ADDRESS // FRAM Base Address in Cart Memory
|
||||
#define FRAM_COMMAND_REGISTER 0x10000 // Located at 0x08010000 on the Cart
|
||||
|
||||
enum fram_command {
|
||||
/* Does nothing for FRAM_COMMAND_SET_MODE_READ_AND_STATUS, FRAM_MODE_NOP, FRAM_COMMAND_SET_MODE_STATUS_AND_STATUS
|
||||
Initializes fram to 0xFF in FRAM_MODE_ERASE
|
||||
Writes Contents in FLASHRAM_MODE_WRITE
|
||||
After execution, sets FRAM_MODE to FRAM_MODE_NOP */
|
||||
FRAM_COMMAND_EXECUTE = 0xD2000000,
|
||||
/* flashram->erase_offset = (command & 0xffff) * 128; */
|
||||
FRAM_COMMAND_SET_ERASE_SECTOR_OFFSET = 0x4B000000,
|
||||
/* flashram->mode = FLASHRAM_MODE_ERASE;
|
||||
flashram->status = 0x1111800800c20000LL; */
|
||||
FRAM_COMMAND_SET_MODE_ERASE_AND_STATUS = 0x78000000,
|
||||
/* flashram->erase_offset = (command & 0xffff) * 128;
|
||||
flashram->status = 0x1111800400c20000LL; */
|
||||
FRAM_COMMAND_SET_ERASE_SECTOR_OFFSET_AND_STATUS = 0xA5000000,
|
||||
/* flashram->mode = FLASHRAM_MODE_WRITE; */
|
||||
FRAM_COMMAND_SET_MODE_WRITE = 0xB4000000,
|
||||
/* flashram->mode = FLASHRAM_MODE_STATUS;
|
||||
flashram->status = 0x1111800100c20000LL; */
|
||||
FRAM_COMMAND_SET_MODE_STATUS_AND_STATUS = 0xE1000000,
|
||||
/* flashram->mode = FLASHRAM_MODE_READ;
|
||||
flashram->status = 0x11118004f0000000LL; */
|
||||
FRAM_COMMAND_SET_MODE_READ_AND_STATUS = 0xF0000000,
|
||||
/* unk */
|
||||
FRAM_COMMAND_UNK_ERASE_OPERATION = 0x3C000000
|
||||
};
|
||||
|
||||
enum fram_mode {
|
||||
FRAM_MODE_NOP = 0,
|
||||
FRAM_MODE_ERASE,
|
||||
FRAM_MODE_WRITE,
|
||||
FRAM_MODE_READ,
|
||||
FRAM_MODE_STATUS
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user