Decompile __osViInit

This commit is contained in:
Ryan Dwyer
2021-01-26 20:53:56 +10:00
parent 6a5a67c882
commit 1602590ab4
7 changed files with 146 additions and 163 deletions
+1
View File
@@ -69,6 +69,7 @@ $(B_DIR)/lib/ultra/io/dpctr.o: OPT_LVL := -O1
$(B_DIR)/lib/ultra/io/sp.o: OPT_LVL := -O1
$(B_DIR)/lib/ultra/io/spsetpc.o: OPT_LVL := -O1
$(B_DIR)/lib/ultra/io/sptaskyielded.o: OPT_LVL := -O1
$(B_DIR)/lib/ultra/io/vi.o: OPT_LVL := -O1
$(B_DIR)/lib/ultra/io/vigetcurrframebuf.o: OPT_LVL := -O1
$(B_DIR)/lib/ultra/io/vigetnextframebuf.o: OPT_LVL := -O1
$(B_DIR)/lib/ultra/io/visetevent.o: OPT_LVL := -O1
+103 -64
View File
@@ -2278,10 +2278,9 @@ u32 __osTimerList = (u32) &var8009c760;
u32 var800608a4 = 0x00000000;
u32 var800608a8 = 0x00000000;
u32 var800608ac = 0x00000000;
__OSViContext var800608b0 = {0};
__OSViContext var800608e0 = {0};
__OSViContext *__osViCurr = &var800608b0;
__OSViContext *__osViNext = &var800608e0;
__OSViContext var800608b0[2] = {0};
__OSViContext *__osViCurr = &var800608b0[0];
__OSViContext *__osViNext = &var800608b0[1];
u32 var80060918 = 0x00000000;
u32 var8006091c = 0x00000000;
u32 __osPiAccessQueueEnabled = 0x00000000;
@@ -2868,66 +2867,106 @@ u32 var80061230 = 0x03030303;
u32 var80061234 = 0x00000000;
u32 var80061238 = 0x00000000;
u32 var8006123c = 0x00000000;
u32 var80061240 = 0x10000000;
u32 var80061244 = 0x0000311e;
u32 var80061248 = 0x00000140;
u32 var8006124c = 0x04541e3a;
u32 var80061250 = 0x00000271;
u32 var80061254 = 0x00170c69;
u32 var80061258 = 0x0c6f0c6d;
u32 var8006125c = 0x00800300;
u32 var80061260 = 0x00000200;
u32 var80061264 = 0x00000000;
u32 var80061268 = 0x00000280;
u32 var8006126c = 0x00000400;
u32 var80061270 = 0x005f0239;
u32 var80061274 = 0x0009026b;
u32 var80061278 = 0x00000002;
u32 var8006127c = 0x00000280;
u32 var80061280 = 0x00000400;
u32 var80061284 = 0x005f0239;
u32 var80061288 = 0x0009026b;
u32 var8006128c = 0x00000002;
u32 var80061290 = 0x1e000000;
u32 var80061294 = 0x0000311e;
u32 var80061298 = 0x00000140;
u32 var8006129c = 0x04651e39;
u32 var800612a0 = 0x0000020d;
u32 var800612a4 = 0x00040c11;
u32 var800612a8 = 0x0c190c1a;
u32 var800612ac = 0x006c02ec;
u32 var800612b0 = 0x00000200;
u32 var800612b4 = 0x00000000;
u32 var800612b8 = 0x00000280;
u32 var800612bc = 0x00000400;
u32 var800612c0 = 0x002501ff;
u32 var800612c4 = 0x000e0204;
u32 var800612c8 = 0x00000002;
u32 var800612cc = 0x00000280;
u32 var800612d0 = 0x00000400;
u32 var800612d4 = 0x002501ff;
u32 var800612d8 = 0x000e0204;
u32 var800612dc = 0x00000002;
u32 var800612e0 = 0x02000000;
u32 var800612e4 = 0x0000311e;
u32 var800612e8 = 0x00000140;
u32 var800612ec = 0x03e52239;
u32 var800612f0 = 0x0000020d;
u32 var800612f4 = 0x00000c15;
u32 var800612f8 = 0x0c150c15;
u32 var800612fc = 0x006c02ec;
u32 var80061300 = 0x00000200;
u32 var80061304 = 0x00000000;
u32 var80061308 = 0x00000280;
u32 var8006130c = 0x00000400;
u32 var80061310 = 0x002501ff;
u32 var80061314 = 0x000e0204;
u32 var80061318 = 0x00000002;
u32 var8006131c = 0x00000280;
u32 var80061320 = 0x00000400;
u32 var80061324 = 0x002501ff;
u32 var80061328 = 0x000e0204;
u32 var8006132c = 0x00000002;
OSViMode osViModePalLan1 = {
OS_VI_PAL_LAN1, // type
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON |
VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 | 0x3000, // ctrl
WIDTH(320), // width
BURST(58, 30, 4, 69), // burst
VSYNC(625), // vSync
HSYNC(3177, 23), // hSync
LEAP(3183, 3181), // leap
HSTART(128, 768), // hStart
SCALE(2, 0), // xScale
VCURRENT(0), // vCurrent
},
{// fldRegs
{
//[0]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(95, 569), // vStart
BURST(107, 2, 9, 0), // vBurst
VINTR(2), // vIntr
},
{
//[1]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(95, 569), // vStart
BURST(107, 2, 9, 0), // vBurst
VINTR(2), // vIntr
}}};
OSViMode osViModeMpalLan1 = {
OS_VI_MPAL_LAN1, // type
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON |
VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 | 0x3000, // ctrl
WIDTH(320), // width
BURST(57, 30, 5, 70), // burst
VSYNC(525), // vSync
HSYNC(3089, 4), // hSync
LEAP(3097, 3098), // leap
HSTART(108, 748), // hStart
SCALE(2, 0), // xScale
VCURRENT(0), // vCurrent
},
{// fldRegs
{
//[0]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(37, 511), // vStart
BURST(4, 2, 14, 0), // vBurst
VINTR(2), // vIntr
},
{
//[1]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(37, 511), // vStart
BURST(4, 2, 14, 0), // vBurst
VINTR(2), // vIntr
}}};
OSViMode osViModeNtscLan1 = {
OS_VI_NTSC_LAN1, // type
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON |
VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 | 0x3000, // ctrl
WIDTH(320), // width
BURST(57, 34, 5, 62), // burst
VSYNC(525), // vSync
HSYNC(3093, 0), // hSync
LEAP(3093, 3093), // leap
HSTART(108, 748), // hStart
SCALE(2, 0), // xScale
VCURRENT(0), // vCurrent
},
{// fldRegs
{
//[0]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(37, 511), // vStart
BURST(4, 2, 14, 0), // vBurst
VINTR(2), // vIntr
},
{
//[1]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(37, 511), // vStart
BURST(4, 2, 14, 0), // vBurst
VINTR(2), // vIntr
}}};
u32 var80061330 = 0x30313233;
u32 var80061334 = 0x34353637;
u32 var80061338 = 0x38396162;
+5 -5
View File
@@ -1,13 +1,13 @@
#ifndef _LIBULTRA_H
#define _LIBULTRA_H
#define TV_TYPE_NTSC 1
#define TV_TYPE_PAL 0
#define TV_TYPE_MPAL 2
#define OS_TV_TYPE_PAL 0
#define OS_TV_TYPE_NTSC 1
#define OS_TV_TYPE_MPAL 2
#define RESET_TYPE_COLD_RESET 0
#define RESET_TYPE_NMI 1
#define RESET_TYPE_BOOT_DISK 2
#define RESET_TYPE_NMI 1
#define RESET_TYPE_BOOT_DISK 2
extern u32 osTvType;
extern u32 osRomBase;
+2
View File
@@ -69,6 +69,8 @@
#define OS_VI_UNK200 0x200
#define OS_VI_UNK100 0x100
#define VI_STATE_BLACK 0x20
#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 /* Bit [9:8] anti-alias mode */
#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 /* Bit [9:8] anti-alias mode */
#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 /* Bit [9:8] anti-alias mode */
+4 -4
View File
@@ -178,7 +178,7 @@ extern u32 var80060190;
extern u32 var800601b0;
extern u32 var80060340;
extern u32 var80060368;
extern __OSViContext var800608b0;
extern __OSViContext var800608b0[2];
extern __OSViContext *__osViCurr;
extern __OSViContext *__osViNext;
extern u32 __osThreadTail;
@@ -189,9 +189,9 @@ extern u32 var80060970;
extern u32 var800609a0;
extern u32 var800609c4;
extern u32 var800611f0;
extern u32 var80061240;
extern u32 var80061290;
extern u32 var800612e0;
extern OSViMode osViModePalLan1;
extern OSViMode osViModeMpalLan1;
extern OSViMode osViModeNtscLan1;
extern u32 var80061330;
extern u32 var80061344;
extern u32 var80061360;
+2 -2
View File
@@ -702,7 +702,7 @@ const char var70053aa0[] = " -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400";
// }
//
// // Copy the texture to the framebuffer
// if (osTvType != TV_TYPE_PAL) {
// if (osTvType != OS_TV_TYPE_PAL) {
// s32 fby = 0;
//
// for (y = 0; y < 48 * 507; y += 507) {
@@ -746,7 +746,7 @@ const char var70053aa0[] = " -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400";
// // Design the program to either go into an infinite loop or display a
// // message indicating a system error.
// //
// if (osTvType == TV_TYPE_PAL) {
// if (osTvType == OS_TV_TYPE_PAL) {
// while (1);
// }
//
+29 -88
View File
@@ -1,90 +1,31 @@
#include <libultra_internal.h>
#include "game/data/data_000000.h"
GLOBAL_ASM(
glabel __osViInit
/* 49640: 27bdffe8 */ addiu $sp,$sp,-24
/* 49644: afbf0014 */ sw $ra,0x14($sp)
/* 49648: 3c048006 */ lui $a0,%hi(var800608b0)
/* 4964c: 248408b0 */ addiu $a0,$a0,%lo(var800608b0)
/* 49650: 0c012c30 */ jal bzero
/* 49654: 24050060 */ addiu $a1,$zero,0x60
/* 49658: 3c0e8006 */ lui $t6,%hi(var800608b0)
/* 4965c: 25ce08b0 */ addiu $t6,$t6,%lo(var800608b0)
/* 49660: 3c018006 */ lui $at,%hi(__osViCurr)
/* 49664: ac2e0910 */ sw $t6,%lo(__osViCurr)($at)
/* 49668: 3c018006 */ lui $at,%hi(__osViNext)
/* 4966c: 25cf0030 */ addiu $t7,$t6,0x30
/* 49670: ac2f0914 */ sw $t7,%lo(__osViNext)($at)
/* 49674: 24180001 */ addiu $t8,$zero,0x1
/* 49678: a5d80032 */ sh $t8,0x32($t6)
/* 4967c: 3c088006 */ lui $t0,%hi(__osViCurr)
/* 49680: 8d080910 */ lw $t0,%lo(__osViCurr)($t0)
/* 49684: 24190001 */ addiu $t9,$zero,0x1
/* 49688: 3c0a8006 */ lui $t2,%hi(__osViNext)
/* 4968c: a5190002 */ sh $t9,0x2($t0)
/* 49690: 8d4a0914 */ lw $t2,%lo(__osViNext)($t2)
/* 49694: 3c098000 */ lui $t1,0x8000
/* 49698: 3c0c8006 */ lui $t4,%hi(__osViCurr)
/* 4969c: ad490004 */ sw $t1,0x4($t2)
/* 496a0: 8d8c0910 */ lw $t4,%lo(__osViCurr)($t4)
/* 496a4: 3c0b8000 */ lui $t3,0x8000
/* 496a8: 3c0d8000 */ lui $t5,0x8000
/* 496ac: ad8b0004 */ sw $t3,0x4($t4)
/* 496b0: 8dad0300 */ lw $t5,0x300($t5)
/* 496b4: 15a00007 */ bnez $t5,.L000496d4
/* 496b8: 00000000 */ nop
/* 496bc: 3c188006 */ lui $t8,%hi(__osViNext)
/* 496c0: 8f180914 */ lw $t8,%lo(__osViNext)($t8)
/* 496c4: 3c0f8006 */ lui $t7,%hi(var80061240)
/* 496c8: 25ef1240 */ addiu $t7,$t7,%lo(var80061240)
/* 496cc: 10000011 */ b .L00049714
/* 496d0: af0f0008 */ sw $t7,0x8($t8)
.L000496d4:
/* 496d4: 3c0e8000 */ lui $t6,0x8000
/* 496d8: 8dce0300 */ lw $t6,0x300($t6)
/* 496dc: 24010002 */ addiu $at,$zero,0x2
/* 496e0: 15c10007 */ bne $t6,$at,.L00049700
/* 496e4: 00000000 */ nop
/* 496e8: 3c088006 */ lui $t0,%hi(__osViNext)
/* 496ec: 8d080914 */ lw $t0,%lo(__osViNext)($t0)
/* 496f0: 3c198006 */ lui $t9,%hi(var80061290)
/* 496f4: 27391290 */ addiu $t9,$t9,%lo(var80061290)
/* 496f8: 10000006 */ b .L00049714
/* 496fc: ad190008 */ sw $t9,0x8($t0)
.L00049700:
/* 49700: 3c0a8006 */ lui $t2,%hi(__osViNext)
/* 49704: 8d4a0914 */ lw $t2,%lo(__osViNext)($t2)
/* 49708: 3c098006 */ lui $t1,%hi(var800612e0)
/* 4970c: 252912e0 */ addiu $t1,$t1,%lo(var800612e0)
/* 49710: ad490008 */ sw $t1,0x8($t2)
.L00049714:
/* 49714: 3c0c8006 */ lui $t4,%hi(__osViNext)
/* 49718: 8d8c0914 */ lw $t4,%lo(__osViNext)($t4)
/* 4971c: 240b0020 */ addiu $t3,$zero,0x20
/* 49720: 3c0d8006 */ lui $t5,%hi(__osViNext)
/* 49724: a58b0000 */ sh $t3,0x0($t4)
/* 49728: 8dad0914 */ lw $t5,%lo(__osViNext)($t5)
/* 4972c: 3c0ea440 */ lui $t6,0xa440
/* 49730: 8daf0008 */ lw $t7,0x8($t5)
/* 49734: 8df80004 */ lw $t8,0x4($t7)
/* 49738: adb8000c */ sw $t8,0xc($t5)
/* 4973c: 8dd90010 */ lw $t9,0x10($t6)
/* 49740: 2f21000b */ sltiu $at,$t9,0xb
/* 49744: 14200006 */ bnez $at,.L00049760
/* 49748: 00000000 */ nop
.L0004974c:
/* 4974c: 3c08a440 */ lui $t0,0xa440
/* 49750: 8d090010 */ lw $t1,0x10($t0)
/* 49754: 2d21000b */ sltiu $at,$t1,0xb
/* 49758: 1020fffc */ beqz $at,.L0004974c
/* 4975c: 00000000 */ nop
.L00049760:
/* 49760: 3c0aa440 */ lui $t2,0xa440
/* 49764: 0c0125e4 */ jal __osViSwapContext
/* 49768: ad400000 */ sw $zero,0x0($t2)
/* 4976c: 8fbf0014 */ lw $ra,0x14($sp)
/* 49770: 27bd0018 */ addiu $sp,$sp,0x18
/* 49774: 03e00008 */ jr $ra
/* 49778: 00000000 */ nop
/* 4977c: 00000000 */ nop
);
void __osViInit(void)
{
bzero(&var800608b0, sizeof(var800608b0));
__osViCurr = &var800608b0[0];
__osViNext = &var800608b0[1];
__osViNext->retraceCount = 1;
__osViCurr->retraceCount = 1;
__osViNext->framep = (void*)K0BASE;
__osViCurr->framep = (void*)K0BASE;
if (osTvType == OS_TV_TYPE_PAL) {
__osViNext->modep = &osViModePalLan1;
} else if (osTvType == OS_TV_TYPE_MPAL) {
__osViNext->modep = &osViModeMpalLan1;
} else {
__osViNext->modep = &osViModeNtscLan1;
}
__osViNext->state = VI_STATE_BLACK;
__osViNext->control = __osViNext->modep->comRegs.ctrl;
while (IO_READ(VI_CURRENT_REG) > 10);
IO_WRITE(VI_CONTROL_REG, 0);
__osViSwapContext();
}