mirror of
https://github.com/zeldaret/af.git
synced 2026-09-26 13:33:16 -04:00
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:
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "ultra64.h"
|
||||
#include "z64math.h"
|
||||
#include "unk.h"
|
||||
|
||||
struct Game_Play;
|
||||
|
||||
|
||||
@@ -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*);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {};
|
||||
}
|
||||
}
|
||||
@@ -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
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user