mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
Match vi.c
This commit is contained in:
@@ -1,91 +0,0 @@
|
||||
glabel __osViInit
|
||||
/* 0D3710 800D2B10 27BDFFE8 */ addiu $sp, $sp, -0x18
|
||||
/* 0D3714 800D2B14 AFBF0014 */ sw $ra, 0x14($sp)
|
||||
/* 0D3718 800D2B18 3C04800E */ lui $a0, %hi(vi) # $a0, 0x800e
|
||||
/* 0D371C 800D2B1C 24844810 */ addiu $a0, %lo(vi) # addiu $a0, $a0, 0x4810
|
||||
/* 0D3720 800D2B20 0C034138 */ jal bzero
|
||||
/* 0D3724 800D2B24 24050060 */ li $a1, 96
|
||||
/* 0D3728 800D2B28 3C0E800E */ lui $t6, %hi(vi) # $t6, 0x800e
|
||||
/* 0D372C 800D2B2C 25CE4810 */ addiu $t6, %lo(vi) # addiu $t6, $t6, 0x4810
|
||||
/* 0D3730 800D2B30 3C01800E */ lui $at, %hi(__osViCurr) # $at, 0x800e
|
||||
/* 0D3734 800D2B34 AC2E4870 */ sw $t6, %lo(__osViCurr)($at)
|
||||
/* 0D3738 800D2B38 3C01800E */ lui $at, %hi(__osViNext) # $at, 0x800e
|
||||
/* 0D373C 800D2B3C 25CF0030 */ addiu $t7, $t6, 0x30
|
||||
/* 0D3740 800D2B40 AC2F4874 */ sw $t7, %lo(__osViNext)($at)
|
||||
/* 0D3744 800D2B44 24180001 */ li $t8, 1
|
||||
/* 0D3748 800D2B48 A5D80032 */ sh $t8, 0x32($t6)
|
||||
/* 0D374C 800D2B4C 3C08800E */ lui $t0, %hi(__osViCurr) # $t0, 0x800e
|
||||
/* 0D3750 800D2B50 8D084870 */ lw $t0, %lo(__osViCurr)($t0)
|
||||
/* 0D3754 800D2B54 24190001 */ li $t9, 1
|
||||
/* 0D3758 800D2B58 3C098000 */ lui $t1, %hi(osTvType) # $t1, 0x8000
|
||||
/* 0D375C 800D2B5C A5190002 */ sh $t9, 2($t0)
|
||||
/* 0D3760 800D2B60 8D290300 */ lw $t1, %lo(osTvType)($t1)
|
||||
/* 0D3764 800D2B64 1520000B */ bnez $t1, .L800D2B94
|
||||
/* 0D3768 800D2B68 00000000 */ nop
|
||||
/* 0D376C 800D2B6C 3C0B800E */ lui $t3, %hi(__osViNext) # $t3, 0x800e
|
||||
/* 0D3770 800D2B70 8D6B4874 */ lw $t3, %lo(__osViNext)($t3)
|
||||
/* 0D3774 800D2B74 3C0A800E */ lui $t2, %hi(D_800E4760) # $t2, 0x800e
|
||||
/* 0D3778 800D2B78 254A4760 */ addiu $t2, %lo(D_800E4760) # addiu $t2, $t2, 0x4760
|
||||
/* 0D377C 800D2B7C 3C0C02F5 */ lui $t4, (0x02F5B2D2 >> 16) # lui $t4, 0x2f5
|
||||
/* 0D3780 800D2B80 358CB2D2 */ ori $t4, (0x02F5B2D2 & 0xFFFF) # ori $t4, $t4, 0xb2d2
|
||||
/* 0D3784 800D2B84 3C01800E */ lui $at, %hi(osViClock) # $at, 0x800e
|
||||
/* 0D3788 800D2B88 AD6A0008 */ sw $t2, 8($t3)
|
||||
/* 0D378C 800D2B8C 10000019 */ b .L800D2BF4
|
||||
/* 0D3790 800D2B90 AC2C4878 */ sw $t4, %lo(osViClock)($at)
|
||||
.L800D2B94:
|
||||
/* 0D3794 800D2B94 3C0D8000 */ lui $t5, %hi(osTvType) # $t5, 0x8000
|
||||
/* 0D3798 800D2B98 8DAD0300 */ lw $t5, %lo(osTvType)($t5)
|
||||
/* 0D379C 800D2B9C 24010002 */ li $at, 2
|
||||
/* 0D37A0 800D2BA0 15A1000B */ bne $t5, $at, .L800D2BD0
|
||||
/* 0D37A4 800D2BA4 00000000 */ nop
|
||||
/* 0D37A8 800D2BA8 3C18800E */ lui $t8, %hi(__osViNext) # $t8, 0x800e
|
||||
/* 0D37AC 800D2BAC 8F184874 */ lw $t8, %lo(__osViNext)($t8)
|
||||
/* 0D37B0 800D2BB0 3C0F800E */ lui $t7, %hi(D_800E47B0) # $t7, 0x800e
|
||||
/* 0D37B4 800D2BB4 25EF47B0 */ addiu $t7, %lo(D_800E47B0) # addiu $t7, $t7, 0x47b0
|
||||
/* 0D37B8 800D2BB8 3C0E02E6 */ lui $t6, (0x02E6025C >> 16) # lui $t6, 0x2e6
|
||||
/* 0D37BC 800D2BBC 35CE025C */ ori $t6, (0x02E6025C & 0xFFFF) # ori $t6, $t6, 0x25c
|
||||
/* 0D37C0 800D2BC0 3C01800E */ lui $at, %hi(osViClock) # $at, 0x800e
|
||||
/* 0D37C4 800D2BC4 AF0F0008 */ sw $t7, 8($t8)
|
||||
/* 0D37C8 800D2BC8 1000000A */ b .L800D2BF4
|
||||
/* 0D37CC 800D2BCC AC2E4878 */ sw $t6, %lo(osViClock)($at)
|
||||
.L800D2BD0:
|
||||
/* 0D37D0 800D2BD0 3C08800E */ lui $t0, %hi(__osViNext) # $t0, 0x800e
|
||||
/* 0D37D4 800D2BD4 8D084874 */ lw $t0, %lo(__osViNext)($t0)
|
||||
/* 0D37D8 800D2BD8 3C19800E */ lui $t9, %hi(D_800E4710) # $t9, 0x800e
|
||||
/* 0D37DC 800D2BDC 27394710 */ addiu $t9, %lo(D_800E4710) # addiu $t9, $t9, 0x4710
|
||||
/* 0D37E0 800D2BE0 3C0902E6 */ lui $t1, (0x02E6D354 >> 16) # lui $t1, 0x2e6
|
||||
/* 0D37E4 800D2BE4 3529D354 */ ori $t1, (0x02E6D354 & 0xFFFF) # ori $t1, $t1, 0xd354
|
||||
/* 0D37E8 800D2BE8 3C01800E */ lui $at, %hi(osViClock) # $at, 0x800e
|
||||
/* 0D37EC 800D2BEC AD190008 */ sw $t9, 8($t0)
|
||||
/* 0D37F0 800D2BF0 AC294878 */ sw $t1, %lo(osViClock)($at)
|
||||
.L800D2BF4:
|
||||
/* 0D37F4 800D2BF4 3C0B800E */ lui $t3, %hi(__osViNext) # $t3, 0x800e
|
||||
/* 0D37F8 800D2BF8 8D6B4874 */ lw $t3, %lo(__osViNext)($t3)
|
||||
/* 0D37FC 800D2BFC 240A0020 */ li $t2, 32
|
||||
/* 0D3800 800D2C00 3C0C800E */ lui $t4, %hi(__osViNext) # $t4, 0x800e
|
||||
/* 0D3804 800D2C04 A56A0000 */ sh $t2, ($t3)
|
||||
/* 0D3808 800D2C08 8D8C4874 */ lw $t4, %lo(__osViNext)($t4)
|
||||
/* 0D380C 800D2C0C 3C18A440 */ lui $t8, %hi(VI_CURRENT_REG) # $t8, 0xa440
|
||||
/* 0D3810 800D2C10 8D8D0008 */ lw $t5, 8($t4)
|
||||
/* 0D3814 800D2C14 8DAF0004 */ lw $t7, 4($t5)
|
||||
/* 0D3818 800D2C18 AD8F000C */ sw $t7, 0xc($t4)
|
||||
/* 0D381C 800D2C1C 8F0E0010 */ lw $t6, %lo(VI_CURRENT_REG)($t8)
|
||||
/* 0D3820 800D2C20 2DC1000B */ sltiu $at, $t6, 0xb
|
||||
/* 0D3824 800D2C24 14200006 */ bnez $at, .L800D2C40
|
||||
/* 0D3828 800D2C28 00000000 */ nop
|
||||
.L800D2C2C:
|
||||
/* 0D382C 800D2C2C 3C19A440 */ lui $t9, %hi(VI_CURRENT_REG) # $t9, 0xa440
|
||||
/* 0D3830 800D2C30 8F280010 */ lw $t0, %lo(VI_CURRENT_REG)($t9)
|
||||
/* 0D3834 800D2C34 2D01000B */ sltiu $at, $t0, 0xb
|
||||
/* 0D3838 800D2C38 1020FFFC */ beqz $at, .L800D2C2C
|
||||
/* 0D383C 800D2C3C 00000000 */ nop
|
||||
.L800D2C40:
|
||||
/* 0D3840 800D2C40 3C09A440 */ lui $t1, 0xa440
|
||||
/* 0D3844 800D2C44 0C035824 */ jal __osViSwapContext
|
||||
/* 0D3848 800D2C48 AD200000 */ sw $zero, ($t1)
|
||||
/* 0D384C 800D2C4C 8FBF0014 */ lw $ra, 0x14($sp)
|
||||
/* 0D3850 800D2C50 27BD0018 */ addiu $sp, $sp, 0x18
|
||||
/* 0D3854 800D2C54 03E00008 */ jr $ra
|
||||
/* 0D3858 800D2C58 00000000 */ nop
|
||||
|
||||
/* 0D385C 800D2C5C 00000000 */ nop
|
||||
@@ -46,7 +46,7 @@ void osInitialize() {
|
||||
osMapTLBRdb();
|
||||
osPiRawReadIo(4, &clock); //TODO: remove magic constant;
|
||||
clock &= ~0xf; //clear lower 4 bits
|
||||
if (clock != 0) {
|
||||
if (clock) {
|
||||
osClockRate = clock;
|
||||
}
|
||||
osClockRate = osClockRate * 3 / 4;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
#include "libultra_internal.h"
|
||||
|
||||
extern OSDevMgr __osPiDevMgr; //__osPiDevMgr;
|
||||
extern OSDevMgr __osPiDevMgr;
|
||||
|
||||
s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction, u32 devAddr, void *dramAddr, u32 size, OSMesgQueue *mq) {
|
||||
register s32 ret;
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
#include "macros.h"
|
||||
#include "libultra_internal.h"
|
||||
|
||||
extern OSTimer D_8012D200;
|
||||
OSTimer *__osTimerList = &D_8012D200;
|
||||
extern OSTimer __osBaseTimer;
|
||||
OSTimer *__osTimerList = &__osBaseTimer;
|
||||
|
||||
extern OSTime __osCurrentTime;
|
||||
extern u32 __osBaseCounter;
|
||||
@@ -16,7 +16,7 @@ extern u32 __osTimerCounter;
|
||||
OSTime __osInsertTimer(OSTimer *t);
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
//Seems to be a mistmatch based on where __osCurrentTime is defined.
|
||||
//Seems to be a mismatch based on where __osCurrentTime is defined.
|
||||
//Scratch proving that: https://decomp.me/scratch/OB3iP
|
||||
void __osTimerServicesInit(void) {
|
||||
__osCurrentTime = 0;
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ OSTask tmp_task; //Supposed to be statically declared in sptask.c
|
||||
#define PI_Q_BUF_LEN 1
|
||||
OSMesg piAccessBuf[PI_Q_BUF_LEN]; //Should be static, but this works for now
|
||||
s32 __osPiAccessQueue[6];
|
||||
OSTimer D_8012D200;
|
||||
OSTimer __osBaseTimer;
|
||||
OSTime __osCurrentTime;
|
||||
s32 __osBaseCounter;
|
||||
s32 __osViIntrCount;
|
||||
|
||||
+32
-3
@@ -1,8 +1,37 @@
|
||||
/* The comment below is needed for this file to be picked up by generate_ld */
|
||||
/* RAM_POS: 0x800D2B10 */
|
||||
|
||||
#include "types.h"
|
||||
#include "macros.h"
|
||||
#include "libultra_internal.h"
|
||||
#include "viint.h"
|
||||
#include "video.h"
|
||||
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osViInit.s")
|
||||
extern OSViMode osViModeNtscLan1;
|
||||
extern OSViMode osViModePalLan1;
|
||||
extern OSViMode osViModeMpalLan1;
|
||||
extern __OSViContext vi[2];
|
||||
extern __OSViContext *__osViCurr;
|
||||
extern __OSViContext *__osViNext;
|
||||
extern s32 osViClock;
|
||||
|
||||
void __osViInit(void) {
|
||||
bzero(vi, sizeof(vi));
|
||||
__osViCurr = &vi[0];
|
||||
__osViNext = &vi[1];
|
||||
__osViNext->retraceCount = 1;
|
||||
__osViCurr->retraceCount = 1;
|
||||
if (osTvType == OS_TV_TYPE_PAL) {
|
||||
__osViNext->modep = &osViModePalLan1;
|
||||
osViClock = VI_PAL_CLOCK;
|
||||
} else if (osTvType == OS_TV_TYPE_MPAL) {
|
||||
__osViNext->modep = &osViModeMpalLan1;
|
||||
osViClock = VI_MPAL_CLOCK;
|
||||
} else {
|
||||
__osViNext->modep = &osViModeNtscLan1;
|
||||
osViClock = VI_NTSC_CLOCK;
|
||||
}
|
||||
__osViNext->state = VI_STATE_BLACK;
|
||||
__osViNext->control = __osViNext->modep->comRegs.ctrl;
|
||||
while (IO_READ(VI_CURRENT_REG) > 10); //wait for vsync?
|
||||
IO_WRITE(VI_CONTROL_REG, 0); //pixel size blank (no data, no sync)
|
||||
__osViSwapContext();
|
||||
}
|
||||
|
||||
+100
-15
@@ -1571,29 +1571,114 @@ s32 D_800E46C0[20] = {
|
||||
0x00000400, 0x002501FF, 0x000E0204, 0x00000002
|
||||
};
|
||||
|
||||
s32 D_800E4710[20] = {
|
||||
0x02000000, 0x0000311E, 0x00000140, 0x03E52239,
|
||||
0x0000020D, 0x00000C15, 0x0C150C15, 0x006C02EC,
|
||||
0x00000200, 0x00000000, 0x00000280, 0x00000400,
|
||||
0x002501FF, 0x000E0204, 0x00000002, 0x00000280,
|
||||
0x00000400, 0x002501FF, 0x000E0204, 0x00000002
|
||||
};
|
||||
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
|
||||
}}};
|
||||
|
||||
s32 D_800E4760[20] = {
|
||||
s32 osViModePalLan1[20] = {
|
||||
0x10000000, 0x0000311E, 0x00000140, 0x0404233A,
|
||||
0x00000271, 0x00150C69, 0x0C6F0C6E, 0x00800300,
|
||||
0x00000200, 0x00000000, 0x00000280, 0x00000400,
|
||||
0x005F0239, 0x0009026B, 0x00000002, 0x00000280,
|
||||
0x00000400, 0x005F0239, 0x0009026B, 0x00000002
|
||||
};
|
||||
/*
|
||||
//TODO: Figure out why this doesn't match from libreultra
|
||||
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
|
||||
}}};
|
||||
*/
|
||||
|
||||
s32 D_800E47B0[20] = {
|
||||
0x1E000000, 0x0000311E, 0x00000140, 0x04651E39,
|
||||
0x0000020D, 0x00040C11, 0x0C190C1A, 0x006C02EC,
|
||||
0x00000200, 0x00000000, 0x00000280, 0x00000400,
|
||||
0x002501FF, 0x000E0204, 0x00000002, 0x00000280,
|
||||
0x00000400, 0x002501FF, 0x000E0204, 0x00000002
|
||||
};
|
||||
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
|
||||
}}};
|
||||
|
||||
// This needs to be moved.
|
||||
u32 __osPiAccessQueueEnabled = 0;
|
||||
|
||||
+3
-3
@@ -161,11 +161,11 @@ void init_vi_settings(void) {
|
||||
break;
|
||||
case 3:
|
||||
stubbed_printf("640 by 240 Anti-aliased, Non interlaced.\n");
|
||||
tvViMode = &D_800E4710;
|
||||
tvViMode = &osViModeNtscLan1;
|
||||
if (osTvType == TV_TYPE_PAL) {
|
||||
tvViMode = &D_800E4760;
|
||||
tvViMode = &osViModePalLan1;
|
||||
} else if (osTvType == TV_TYPE_MPAL) {
|
||||
tvViMode = &D_800E47B0;
|
||||
tvViMode = &osViModeMpalLan1;
|
||||
}
|
||||
memory_copy(tvViMode, &D_80126260, sizeof(OSViMode));
|
||||
D_80126260.comRegs.width = 0x280;
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ extern u16 *gVideoDepthBuffer;
|
||||
extern s32 D_800DE774;
|
||||
extern s8 D_800DE778;
|
||||
|
||||
extern OSViMode D_800E4620, D_800E4670, D_800E46C0, D_800E4760, D_800E4710, D_800E47B0;
|
||||
extern OSViMode D_800E4620, D_800E4670, D_800E46C0, osViModePalLan1, osViModeNtscLan1, osViModeMpalLan1;
|
||||
|
||||
/* Size: 0x08 bytes */
|
||||
typedef struct VideoModeResolution {
|
||||
|
||||
Reference in New Issue
Block a user