sys_initial_check OK (#129)

* initial commit

* almost matching, need to figure out segment stuff

* fully matching

* file description

* m_std_dma
This commit is contained in:
emilybrooks
2024-01-02 11:14:05 -07:00
committed by GitHub
parent 72514d5aae
commit ebd97e9fd1
8 changed files with 100 additions and 11 deletions
+1
View File
@@ -3,6 +3,7 @@
#include "ultra64.h"
#include "z64math.h"
#include "unk.h"
struct Game_Play;
+2
View File
@@ -28,6 +28,8 @@
#define FAULT_ESC '\x1A'
#define FAULT_COLOR(n) "\x1A" FAULT_COLOR_EXPAND_AND_STRINGIFY(FAULT_COLOR_ ## n)
// Address at the end of "non-expansion" memory space
#define FAULT_FB_ADDRESS (void*)((PHYS_TO_K0(0x400000) - SCREEN_HEIGHT * SCREEN_WIDTH * sizeof(u16)))
typedef void (*FaultClientCallback)(void*, void*);
+2
View File
@@ -97,6 +97,8 @@ DECLARE_SEGMENT(catalog_ovl);
DECLARE_SEGMENT(ac_set_ovl_insect);
DECLARE_SEGMENT(ac_set_ovl_gyoei);
DECLARE_SEGMENT(locerrmsg);
DECLARE_SEGMENT(segment_00A58000);
DECLARE_SEGMENT(segment_00E02000);
+1 -1
View File
@@ -1854,7 +1854,7 @@ DEFINE_DMA_ENTRY(segment_009F5000, "segment_009F5000")
DEFINE_DMA_ENTRY(segment_00A00000, "segment_00A00000")
DEFINE_DMA_ENTRY(segment_00A0B000, "segment_00A0B000")
DEFINE_DMA_ENTRY(segment_00A16000, "segment_00A16000")
DEFINE_DMA_ENTRY(segment_00A21000, "segment_00A21000")
DEFINE_DMA_ENTRY(locerrmsg, "locerrmsg")
DEFINE_DMA_ENTRY(gameplay_keep, "gameplay_keep")
DEFINE_DMA_ENTRY(segment_00A30000, "segment_00A30000")
DEFINE_DMA_ENTRY(segment_00A40000, "segment_00A40000")
+6 -6
View File
@@ -3564,12 +3564,12 @@ func_800D9788_jp = 0x800D9788; // type:func
func_800D97A0_jp = 0x800D97A0; // type:func
func_800D97F8_jp = 0x800D97F8; // type:func
func_800D986C_jp = 0x800D986C; // type:func
func_800D9890_jp = 0x800D9890; // type:func
func_800D98C0_jp = 0x800D98C0; // type:func
func_800D9900_jp = 0x800D9900; // type:func
func_800D99F0_jp = 0x800D99F0; // type:func
func_800D9A6C_jp = 0x800D9A6C; // type:func
func_800D9B44_jp = 0x800D9B44; // type:func
Check_WriteRGBA16Pixel = 0x800D9890; // type:func
Check_WriteI4Pixel = 0x800D98C0; // type:func
Check_DrawI4Texture = 0x800D9900; // type:func
Check_ClearRGBA16 = 0x800D99F0; // type:func
Check_DrawRegionLockErrorMessage = 0x800D9A6C; // type:func
Check_RegionIsSupported = 0x800D9B44; // type:func
reverse_u32 = 0x800D9BA0; // type:func
init_rnd = 0x800D9C30; // type:func
ffact = 0x800D9C60; // type:func
+82
View File
@@ -0,0 +1,82 @@
/**
* @file sys_initial_check.c
* Functions for checking the TV type (PAL/NTSC/MPAL), and printing an error message to the screen if it's not NTSC
*/
#include "color.h"
#include "macros.h"
#include "m_std_dma.h"
#include "segment_symbols.h"
#include "fault.h"
void Check_WriteRGBA16Pixel(u16* buffer, u32 x, u32 y, u32 value) {
if (value & RGBA16_PIXEL_OPAQUE) {
(&buffer[x])[y * SCREEN_WIDTH] = value;
}
}
void Check_WriteI4Pixel(u16* buffer, u32 x, u32 y, u32 value) {
Check_WriteRGBA16Pixel(buffer, x, y, value * GPACK_RGBA5551(16, 16, 16, 0) + GPACK_RGBA5551(12, 12, 12, 1));
}
void Check_DrawI4Texture(u16* buffer, s32 x, s32 y, s32 width, s32 height, u8* texture) {
s32 v;
s32 u;
u8 pixelPair;
u8* pixelPairPointer = texture;
for (v = 0; v < height; v++) {
for (u = 0; u < width; u += 2, pixelPairPointer++) {
pixelPair = *pixelPairPointer;
Check_WriteI4Pixel(buffer, x + u, y + v, pixelPair >> 4);
pixelPair = *pixelPairPointer;
Check_WriteI4Pixel(buffer, x + u + 1, y + v, pixelPair & 0xF);
}
}
}
void Check_ClearRGBA16(u16* buffer) {
u32 x;
u32 y;
for (y = 0; y < SCREEN_HEIGHT; y++) {
for (x = 0; x < SCREEN_WIDTH; x++) {
Check_WriteRGBA16Pixel(buffer, x, y, 1);
}
}
}
#define ERROR_TEXTURE_WIDTH 208
#define ERROR_TEXTURE_HEIGHT 16
#define ERROR_TEXTURE_SIZE (ERROR_TEXTURE_WIDTH * ERROR_TEXTURE_HEIGHT / 2)
#define ERROR_TEXTURE_VRAM (u8*)((uintptr_t)FAULT_FB_ADDRESS - ERROR_TEXTURE_SIZE)
u8 Check_ErrorTextureYCoords[] = { 112, 0 };
void Check_DrawRegionLockErrorMessage(void) {
s32 i;
DmaMgr_RequestSyncDebug(ERROR_TEXTURE_VRAM, SEGMENT_ROM_START(locerrmsg), SEGMENT_VRAM_SIZE(locerrmsg),
"../sys_initial_check.c", 130);
Check_ClearRGBA16(FAULT_FB_ADDRESS);
for (i = 0; i < 1; i++) {
Check_DrawI4Texture(FAULT_FB_ADDRESS, 56, Check_ErrorTextureYCoords[i], ERROR_TEXTURE_WIDTH,
ERROR_TEXTURE_HEIGHT, ERROR_TEXTURE_VRAM + i * ERROR_TEXTURE_SIZE);
}
osWritebackDCacheAll();
osViSwapBuffer(FAULT_FB_ADDRESS);
osViBlack(false);
}
void Check_RegionIsSupported(void) {
s32 regionSupported = false;
if (osTvType == OS_TV_NTSC) {
regionSupported = true;
}
if (!regionSupported) {
Check_DrawRegionLockErrorMessage();
osDestroyThread(NULL);
while (true) {};
}
}
+2 -2
View File
@@ -62,10 +62,10 @@
align: 0x1000
- [0xA20010]
- name: segment_00A21000
- name: locerrmsg
type: bin
start: 0xA21000
# vram:
vram: 0x01000000
compress: True
align: 0x1000
- [0xA21680]
+4 -2
View File
@@ -104,7 +104,7 @@
- [0x6FB340, asm, code/6FB340]
- [0x6FC540, asm, code/speed_meter]
- [0x6FD190, asm, code/6FD190]
- [0x6FD530, asm, code/sys_initial_check]
- [0x6FD530, c, code/sys_initial_check]
- [0x6FD840, asm, code/sys_math]
- [0x6FDC40, asm, code/sys_math3d]
- [0x703C30, c, code/sys_math_atan]
@@ -169,6 +169,8 @@
- [0x732C70, .data, code/lb_rtc]
- [0x732C80, .data, code/lb_reki]
- [0x733080, data, code/733080]
- [0x7330F0, .data, code/sys_initial_check]
- [0x733100, data, code/733100]
- [0x733160, .data, code/sys_math_atan]
- [0x733970, .data, code/sys_matrix]
- [0x7339F0, .data, code/sys_ucode]
@@ -242,7 +244,7 @@
- [0x73BB80, rodata, code/73BB80]
- [0x73BCA0, rodata, code/73BCA0]
- [0x73BD20, rodata, code/73BD20]
- [0x73BD30, rodata, code/73BD30]
- [0x73BD30, .rodata, code/sys_initial_check]
- [0x73BD50, rodata, code/73BD50]
- [0x73BD70, rodata, code/sys_math3d]
- [0x73BE00, .rodata, code/sys_math_atan]