Some more attempts at fixing things

This commit is contained in:
Donkey Kong 2023-08-08 21:34:21 +09:30
parent 2e8ea3f6c1
commit d78dc1b31c
6 changed files with 184 additions and 57 deletions

View File

@ -188,7 +188,8 @@ segments:
- [0x11180, rodata, os/exceptasm]
- [0x111D0, rodata, gu/cosf]
- [0x11220, rodata, gu/sinf]
- [0x11270, .rodata, io/devmgr]
- [0x11270, rodata]
- [0x112F0, .rodata, io/devmgr]
- [0x11310, rodata]
- { start: 0x11320, type: bss, vram: 0x80010720 }
- name: assets
@ -554,7 +555,7 @@ segments:
# - [0x21CDEF0, bin, data_213C0]
# - [0x21CDF58, rgba16, img/arcade_80045428.rgba16, 48, 41]
# - [0x21CEEB8, bin, data_22338]
- [0x21D3370, rodata, code_0]
- [0x21D3370, .rodata, code_0]
- { start: 0x21D3730, type: bss, vram: 0x8004AC00 }
- name: jetpac
dir: jetpac

View File

@ -1,4 +1,6 @@
#!/bin/bash
cmp -l baserom.us.decompressed.z64 build/us/donkeykong64.us.uncompressed.z64 | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'
vbindiff baserom.us.decompressed.z64 ./build/us/donkeykong64.us.uncompressed.z64
# cmp -l baserom.us.decompressed.z64 build/us/donkeykong64.us.uncompressed.z64 | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'
#diff -y <(xxd build/us/$1.us.bin) <(xxd build/us/$1.full)

View File

@ -285,7 +285,7 @@ extern u8 D_arcade_8004A9D0;
extern u8 D_arcade_8004A9DC;
/*jmp_tbl D_arcade_8004A9EC[6]*/
extern f32 D_arcade_8004AA18;
extern f32 D_arcade_8004AA18; // 1170.2857666
extern f64 D_arcade_8004AA98;
extern f64 D_arcade_8004AAA0;
extern f64 D_arcade_8004AAA8;

View File

@ -1812,7 +1812,8 @@ void func_arcade_8002AFA4(Gfx **arg0, s32 arg1) {
if (D_arcade_8004A338[D_arcade_8004BCD0[arg1].unk18] & 1) {
phi_f0 = 1024.0f;
} else {
phi_f0 = D_arcade_8004AA18;
// phi_f0 = D_arcade_8004AA18;
phi_f0 = 1170.2857666f;
}
guSprite2DInit(
&D_arcade_8004AC00[D_global_asm_807444FC].sprite[arg1], D_arcade_8004BCD0[arg1].unk14, 0,
@ -2648,7 +2649,8 @@ void func_arcade_8002E3D4(s32 arg0) {
D_arcade_8004BCD0[newFlameIndex].unk19 = 3;
D_arcade_8004BCD0[newFlameIndex].y_velocity = -1;
if (arcade_background_visual == 1) {
D_arcade_8004BCD0[newFlameIndex].x_velocity = D_arcade_8004AB24;
// D_arcade_8004BCD0[newFlameIndex].x_velocity = D_arcade_8004AB24;
D_arcade_8004BCD0[newFlameIndex].x_velocity = 0.4f;
} else {
if (D_arcade_8004BCD0[D_arcade_8004C71F].x_position < 160) {
D_arcade_8004BCD0[newFlameIndex].x_velocity = -0.5f;
@ -2810,8 +2812,8 @@ void arcade_dk_title_update(s32 arg0) {
}
if (phi_v1 >= 0x3C) {
if (phi_v1 >= 0x169) {
D_arcade_8004BCD0[arg0].y_velocity += D_arcade_8004AB28;
//D_arcade_8004BCD0[arg0].unkC += 0.05;
// D_arcade_8004BCD0[arg0].y_velocity += D_arcade_8004AB28;
D_arcade_8004BCD0[arg0].y_velocity += 0.05;
D_arcade_8004BCD0[arg0].y_position += D_arcade_8004BCD0[arg0].y_velocity;
D_arcade_8004BCD0[arg0].x_position += D_arcade_8004BCD0[arg0].x_velocity;
if ((D_arcade_8004BCD0[arg0].y_velocity > 0.0f) && (D_arcade_8004BCD0[arg0].y_position >= 38.0f)) {
@ -2825,15 +2827,15 @@ void arcade_dk_title_update(s32 arg0) {
if ((phi_v1 == 0x2D0) || (phi_v1 < 0x26C)) {
D_arcade_8004BCD0[arg0].unk14 = &D_arcade_80040540;
}
if (D_arcade_8004AB30 < D_arcade_8004BCD0[arg0].y_velocity) {
//if (0.06 < D_arcade_8004BCD0[arg0].unkC) {
// if (D_arcade_8004AB30 < D_arcade_8004BCD0[arg0].y_velocity) {
if (0.06 < D_arcade_8004BCD0[arg0].y_velocity) {
D_arcade_8004C708 = (s32) (D_arcade_8004C708 + 1);
func_global_asm_80737638(D_global_asm_8076D1F8, SFX_42_ARCADE_JUMPMAN_HIT, 0x7FFF, 0x3F, 1.0f, 0, 0);
}
if ((D_arcade_8004BCD0[arg0].x_position > 74.0f) && !(D_arcade_8004C6DC < 0x1A5)) {
D_arcade_8004BCD0[arg0].x_velocity = -0.5f;
D_arcade_8004BCD0[arg0].y_velocity = D_arcade_8004AB38;
//D_arcade_8004BCD0[arg0].unkC = -0.81f;
// D_arcade_8004BCD0[arg0].y_velocity = D_arcade_8004AB38;
D_arcade_8004BCD0[arg0].y_velocity = -0.81f;
}
else {
D_arcade_8004BCD0[arg0].x_velocity = 0.0f;
@ -3446,54 +3448,54 @@ void func_arcade_8003159C(Gfx **arg0) {
if (D_arcade_8004C724 == 3) {
func_arcade_800244E4(0x00, 0xff, 0xff, 0xff);
func_arcade_80024508(0x78, 0x3b);
func_dk64_boot_800031E0(sp50, &D_arcade_8004A840, &D_arcade_8004A774);
//func_dk64_boot_800031E0(sp50, "NAME %.3s", &D_arcade_8004A774);
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A840, &D_arcade_8004A774);
func_dk64_boot_800031E0(sp50, "NAME %.3s", &D_arcade_8004A774);
func_arcade_8002451C(&spA0, sp50);
func_arcade_80024508(0xA0, 0x41);
func_dk64_boot_800031E0(sp50, &D_arcade_8004A84C);
//func_dk64_boot_800031E0(sp50, "---");
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A84C);
func_dk64_boot_800031E0(sp50, "---");
func_arcade_8002451C(&spA0, sp50);
if (D_arcade_8004C6DC < 1800) {
func_arcade_80024508(0x60, 0x7b);
func_dk64_boot_800031E0(sp50, &D_arcade_8004A850, 30 - D_arcade_8004C6DC/60);
//func_dk64_boot_800031E0(sp50, "REGI TIME <%02d>", 30 - D_arcade_8004C6DC/60);
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A850, 30 - D_arcade_8004C6DC/60);
func_dk64_boot_800031E0(sp50, "REGI TIME <%02d>", 30 - D_arcade_8004C6DC/60);
} else {//L800316A0
func_arcade_80024508(0x40, 0x7b);
func_dk64_boot_800031E0(sp50, &D_arcade_8004A864);
//func_dk64_boot_800031E0(sp50, "YOUR NAME WAS");
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A864);
func_dk64_boot_800031E0(sp50, "YOUR NAME WAS");
func_arcade_8002451C(&spA0, sp50);
func_arcade_80024508(0xb0, 0x7b);
func_dk64_boot_800031E0(sp50, &D_arcade_8004A874);
//func_dk64_boot_800031E0(sp50, "REGISTERED.");
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A874);
func_dk64_boot_800031E0(sp50, "REGISTERED.");
}//L800316E8
func_arcade_8002451C(&spA0, sp50);
func_arcade_800244E4(0xff, 0x00, 0x00, 0xff);
func_arcade_80024508(0x58, 0x2b);
func_dk64_boot_800031E0(sp50, &D_arcade_8004A880);
//func_dk64_boot_800031E0(sp50, "NAME REGISTRATION");
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A880);
func_dk64_boot_800031E0(sp50, "NAME REGISTRATION");
func_arcade_8002451C(&spA0, sp50);
func_arcade_800244E4(0x00, 0xff, 0x00, 0xff);
func_arcade_80024508(0x58, 0x4b);
func_dk64_boot_800031E0(sp50, &D_arcade_8004A894);
//func_dk64_boot_800031E0(sp50, "A B C D E F G H I J");
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A894);
func_dk64_boot_800031E0(sp50, "A B C D E F G H I J");
func_arcade_8002451C(&spA0, sp50);
func_arcade_80024508(0x58, 0x5b);
func_dk64_boot_800031E0(sp50, &D_arcade_8004A8A8);
//func_dk64_boot_800031E0(sp50, "K L M N O P Q R S T");
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A8A8);
func_dk64_boot_800031E0(sp50, "K L M N O P Q R S T");
func_arcade_8002451C(&spA0, sp50);
func_arcade_80024508(0x58, 0x6b);
func_dk64_boot_800031E0(sp50, &D_arcade_8004A8BC);
//func_dk64_boot_800031E0(sp50, "U V W X Y Z . -");
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A8BC);
func_dk64_boot_800031E0(sp50, "U V W X Y Z . -");
func_arcade_8002451C(&spA0, sp50);
func_arcade_80024508(0xd4, 0x6b);
func_dk64_boot_800031E0(sp50, &D_arcade_8004A8CC);
//func_dk64_boot_800031E0(sp50, "ba");
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A8CC);
func_dk64_boot_800031E0(sp50, "ba");
func_arcade_8002451C(&spA0, sp50);
}//L800317E0
@ -3506,16 +3508,19 @@ void func_arcade_8003159C(Gfx **arg0) {
&& D_arcade_8004C6DC & 0x20
&& D_arcade_8004C724 == 3
) {
func_dk64_boot_800031E0(sp50, &D_arcade_8004A8D0, &D_arcade_8004A82C[i]);
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A8D0, &D_arcade_8004A82C[i]);
func_dk64_boot_800031E0(sp50, "%.3s", &D_arcade_8004A82C[i]);
} else {//L80031888
func_dk64_boot_800031E0(sp50, &D_arcade_8004A8D8, D_arcade_8004A82C[i], arcade_saved_high_scores[i], arcade_saved_high_score_initials[i]);
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A8D8, D_arcade_8004A82C[i], arcade_saved_high_scores[i], arcade_saved_high_score_initials[i]);
func_dk64_boot_800031E0(sp50, "%.3s %06d %.3s", D_arcade_8004A82C[i], arcade_saved_high_scores[i], arcade_saved_high_score_initials[i]);
}//L800318B8
func_arcade_8002451C(&spA0, sp50);
}
func_arcade_800244E4(0x00, 0xff, 0x00, 0xff);
func_arcade_80024508(0xb8, 0xdb);
func_dk64_boot_800031E0(sp50, &D_arcade_8004A8EC);
// func_dk64_boot_800031E0(sp50, &D_arcade_8004A8EC);
func_dk64_boot_800031E0(sp50, "CREDIT 00");
func_arcade_8002451C(&spA0, sp50);
*arg0 = spA0;

View File

@ -1,5 +1,113 @@
#include <ultra64.h>
#include <rcp.h>
#include "piint.h"
void __osDevMgrMain(void *args)
{
OSIoMesg *mb;
OSMesg em;
OSMesg dummy;
s32 ret;
OSDevMgr *dm;
s32 messageSend;
#pragma GLOBAL_ASM("asm/nonmatchings/dk64_boot/io/devmgr/__osDevMgrMain.s")
messageSend = 0;
mb = NULL;
ret = 0;
dm = (OSDevMgr *)args;
while (TRUE)
{
osRecvMesg(dm->cmdQueue, (OSMesg)&mb, OS_MESG_BLOCK);
if (mb->piHandle != NULL &&
mb->piHandle->type == DEVICE_TYPE_64DD &&
(mb->piHandle->transferInfo.cmdType == LEO_CMD_TYPE_0 ||
mb->piHandle->transferInfo.cmdType == LEO_CMD_TYPE_1))
{
__OSBlockInfo *blockInfo;
__OSTranxInfo *info;
info = &mb->piHandle->transferInfo;
blockInfo = &info->block[info->blockNum];
info->sectorNum = -1;
if (info->transferMode != LEO_SECTOR_MODE)
{
blockInfo->dramAddr = (void *)((u32)blockInfo->dramAddr - blockInfo->sectorSize);
}
if (info->transferMode == LEO_TRACK_MODE && mb->piHandle->transferInfo.cmdType == LEO_CMD_TYPE_0)
messageSend = 1;
else
messageSend = 0;
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
__osResetGlobalIntMask(OS_IM_PI);
osEPiRawWriteIo(mb->piHandle, LEO_BM_CTL, (info->bmCtlShadow | 0x80000000));
while (TRUE)
{
osRecvMesg(dm->evtQueue, &em, OS_MESG_BLOCK);
info = &mb->piHandle->transferInfo;
blockInfo = &info->block[info->blockNum];
if (blockInfo->errStatus == LEO_ERROR_29)
{
u32 stat;
osEPiRawWriteIo(mb->piHandle, LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_RESET); //TODO: remove magic constants
osEPiRawWriteIo(mb->piHandle, LEO_BM_CTL, info->bmCtlShadow);
osEPiRawReadIo(mb->piHandle, LEO_STATUS, &stat);
if (stat & LEO_STATUS_MECHANIC_INTERRUPT) //TODO: remove magic constants
{
osEPiRawWriteIo(mb->piHandle, LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_CLR_MECHANIC_INTR);
}
blockInfo->errStatus = LEO_ERROR_4;
IO_WRITE(PI_STATUS_REG, PI_CLR_INTR);
__osSetGlobalIntMask(OS_IM_PI | SR_IBIT4);
}
osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK);
if (messageSend != 1)
break;
if (mb->piHandle->transferInfo.block[0].errStatus != LEO_ERROR_GOOD)
break;
messageSend = 0;
}
osSendMesg(dm->acsQueue, NULL, OS_MESG_NOBLOCK);
if (mb->piHandle->transferInfo.blockNum == 1)
osYieldThread();
}
else
{
switch (mb->hdr.type)
{
case OS_MESG_TYPE_DMAREAD:
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
ret = dm->dma(OS_READ, mb->devAddr, mb->dramAddr, mb->size);
break;
case OS_MESG_TYPE_DMAWRITE:
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
ret = dm->dma(OS_WRITE, mb->devAddr, mb->dramAddr, mb->size);
break;
case OS_MESG_TYPE_EDMAREAD:
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
ret = dm->edma(mb->piHandle, OS_READ, mb->devAddr, mb->dramAddr,
mb->size);
break;
case OS_MESG_TYPE_EDMAWRITE:
osRecvMesg(dm->acsQueue, &dummy, OS_MESG_BLOCK);
ret = dm->edma(mb->piHandle, OS_WRITE, mb->devAddr, mb->dramAddr,
mb->size);
break;
case OS_MESG_TYPE_LOOPBACK:
osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK);
ret = -1;
break;
default:
ret = -1;
break;
}
if (ret == 0)
{
osRecvMesg(dm->evtQueue, &em, OS_MESG_BLOCK);
osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK);
osSendMesg(dm->acsQueue, NULL, OS_MESG_NOBLOCK);
}
}
}
}

View File

@ -404,36 +404,47 @@ arcade_lives_visual = 0x8004C71C; // segment:arcade
arcade_game_state = 0x8004C71D; // segment:arcade
arcade_background_visual = 0x8004C722; // segment:arcade
D_arcade_8004C6DC = 0x8004C6DC; // segment:arcade
D_arcade_8004A840 = 0x8004A840; // segment:arcade
D_arcade_8004A874 = 0x8004A874; // segment:arcade
D_arcade_8004A880 = 0x8004A880; // segment:arcade
D_arcade_8004A8A8 = 0x8004A8A8; // segment:arcade
D_arcade_8004A8EC = 0x8004A8EC; // segment:arcade
D_arcade_8004AA18 = 0x8004AA18; // segment:arcade
D_arcade_8004AB24 = 0x8004AB24; // segment:arcade
D_arcade_8004AB28 = 0x8004AB28; // segment:arcade
D_arcade_8004AB30 = 0x8004AB30; // segment:arcade
D_arcade_8004AC00 = 0x8004AC00; // segment:arcade
D_arcade_8004BCD0 = 0x8004BCD0; // segment:arcade
D_arcade_8004C724 = 0x8004C724; // segment:arcade
D_arcade_8004C70C = 0x8004C70C; // segment:arcade
D_arcade_8004C723 = 0x8004C723; // segment:arcade
D_arcade_8004C71A = 0x8004C71A; // segment:arcade
D_arcade_8004C719 = 0x8004C719; // segment:arcade
D_arcade_8004C6D4 = 0x8004C6D4; // segment:arcade
D_arcade_8004C6D0 = 0x8004C6D0; // segment:arcade
D_arcade_8004BB00 = 0x8004BB00; // segment:arcade
D_arcade_8004BB30 = 0x8004BB30; // segment:arcade
D_arcade_8004BB60 = 0x8004BB60; // segment:arcade
D_arcade_8004BB90 = 0x8004BB90; // segment:arcade
D_arcade_8004BBC0 = 0x8004BBC0; // segment:arcade
D_arcade_8004C6D6 = 0x8004C6D6; // segment:arcade
D_arcade_8004C708 = 0x8004C708; // segment:arcade
D_arcade_8004BB00 = 0x8004BB00; // segment:arcade
D_arcade_8004C71F = 0x8004C71F; // segment:arcade
D_arcade_8004BC88 = 0x8004BC88; // segment:arcade
D_arcade_8004C71E = 0x8004C71E; // segment:arcade
D_arcade_8004C710 = 0x8004C710; // segment:arcade
D_arcade_8004C718 = 0x8004C718; // segment:arcade
D_arcade_8004C6F8 = 0x8004C6F8; // segment:arcade
D_arcade_8004C721 = 0x8004C721; // segment:arcade
D_arcade_8004C6F0 = 0x8004C6F0; // segment:arcade
D_arcade_8004C6F4 = 0x8004C6F4; // segment:arcade
D_arcade_8004C6E0 = 0x8004C6E0; // segment:arcade
D_arcade_8004C6E4 = 0x8004C6E4; // segment:arcade
D_arcade_8004C6E8 = 0x8004C6E8; // segment:arcade
D_arcade_8004C6EC = 0x8004C6EC; // segment:arcade
D_arcade_8004AC00 = 0x8004AC00; // segment:arcade
D_arcade_8004C6F0 = 0x8004C6F0; // segment:arcade
D_arcade_8004C6F4 = 0x8004C6F4; // segment:arcade
D_arcade_8004C6D0 = 0x8004C6D0; // segment:arcade
D_arcade_8004C6D4 = 0x8004C6D4; // segment:arcade
D_arcade_8004C6D6 = 0x8004C6D6; // segment:arcade
D_arcade_8004C6DC = 0x8004C6DC; // segment:arcade
D_arcade_8004C6F8 = 0x8004C6F8; // segment:arcade
D_arcade_8004C708 = 0x8004C708; // segment:arcade
D_arcade_8004C70C = 0x8004C70C; // segment:arcade
D_arcade_8004C710 = 0x8004C710; // segment:arcade
D_arcade_8004C718 = 0x8004C718; // segment:arcade
D_arcade_8004C719 = 0x8004C719; // segment:arcade
D_arcade_8004C71A = 0x8004C71A; // segment:arcade
D_arcade_8004C71E = 0x8004C71E; // segment:arcade
D_arcade_8004C71F = 0x8004C71F; // segment:arcade
D_arcade_8004C721 = 0x8004C721; // segment:arcade
D_arcade_8004C723 = 0x8004C723; // segment:arcade
D_arcade_8004C724 = 0x8004C724; // segment:arcade
D_jetpac_8002EC30 = 0x8002EC30; // segment:jetpac
D_jetpac_8002EC48 = 0x8002EC48; // segment:jetpac