mirror of
https://github.com/HackerN64/HackerOoT.git
synced 2026-01-21 10:37:37 -08:00
First proper commit.
This commit is contained in:
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
44
.gitignore
vendored
Normal file
44
.gitignore
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
# Cache files
|
||||
__pycache__/
|
||||
.pyc
|
||||
|
||||
# Text editor remnants
|
||||
.vscode/
|
||||
.vs/
|
||||
.idea/
|
||||
CMakeLists.txt
|
||||
cmake-build-debug
|
||||
venv/
|
||||
|
||||
# Project-specific ignores
|
||||
build/
|
||||
notes/
|
||||
baserom/
|
||||
*.elf
|
||||
*.sra
|
||||
*.z64
|
||||
*.map
|
||||
*.dump
|
||||
out.txt
|
||||
|
||||
# Tool artifacts
|
||||
tools/ido7.1_compiler/*
|
||||
tools/overlayhelpers/batchdisasm/output/*
|
||||
tools/overlayhelpers/batchdisasm/output2/*
|
||||
tools/overlayhelpers/batchdisasm/mipsdisasm/*
|
||||
tools/disasm/output/*
|
||||
tools/asmsplitter/asm/*
|
||||
tools/asmsplitter/c/*
|
||||
|
||||
# Assets
|
||||
*.rgba32.png
|
||||
*.rgb5a1.png
|
||||
*.i4.png
|
||||
*.i8.png
|
||||
*.ia4.png
|
||||
*.ia8.png
|
||||
*.ci4.png
|
||||
*.ci8.png
|
||||
|
||||
#Per-user configuration
|
||||
.python-version
|
||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
[submodule "tools/ZAP2"]
|
||||
path = tools/ZAP2
|
||||
url = https://github.com/NEstelami/ZAP2.git
|
||||
22
README.md
22
README.md
@@ -1 +1,21 @@
|
||||
oot
|
||||
# Legend of Zelda: Ocarina of Time Master Quest (debug)
|
||||
|
||||
```diff
|
||||
- WARNING! -
|
||||
|
||||
The ROM this repository builds while has a matching checksum cannot be 'shifted' due
|
||||
to hardcoded pointers which have yet to be dumped. Thus this repository is currently
|
||||
in an experimental and research phase and cannot currently be used traditionally as a
|
||||
source code base for general changes.
|
||||
```
|
||||
|
||||
This repo does not include all assets necessary for compiling the ROM. A prior copy of the game is required to extract the required assets.
|
||||
|
||||
This is a disassembly and decompilation of Legend of Zelda: Ocarina of Time Master Quest (debug)
|
||||
|
||||
It builds the following ROM:
|
||||
* zelda_ocarina_mq_dbg.z64 `md5: 717179476af84133b14ff73af87db57a`
|
||||
|
||||
Please refer to the Getting Started guide in the Wiki for setup instructions.
|
||||
|
||||
Thanks to z64me and CrookedPoe for their actor documentation. https://github.com/CrookedPoe/z64-rw
|
||||
|
||||
2936
asm/PreRender.s
Normal file
2936
asm/PreRender.s
Normal file
File diff suppressed because it is too large
Load Diff
41
asm/__osDisableInt.s
Normal file
41
asm/__osDisableInt.s
Normal file
@@ -0,0 +1,41 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel __osDisableInt
|
||||
/* 007E80 80007280 3C0A8001 */ lui $t2, %hi(__OSGlobalIntMask) # $t2, 0x8001
|
||||
/* 007E84 80007284 254AAD00 */ addiu $t2, %lo(__OSGlobalIntMask) # addiu $t2, $t2, -0x5300
|
||||
/* 007E88 80007288 8D4B0000 */ lw $t3, ($t2)
|
||||
/* 007E8C 8000728C 316BFF00 */ andi $t3, $t3, 0xff00
|
||||
/* 007E90 80007290 40086000 */ mfc0 $t0, $12
|
||||
/* 007E94 80007294 2401FFFE */ li $at, -2
|
||||
/* 007E98 80007298 01014824 */ and $t1, $t0, $at
|
||||
/* 007E9C 8000729C 40896000 */ mtc0 $t1, $12
|
||||
/* 007EA0 800072A0 31020001 */ andi $v0, $t0, 1
|
||||
/* 007EA4 800072A4 8D480000 */ lw $t0, ($t2)
|
||||
/* 007EA8 800072A8 3108FF00 */ andi $t0, $t0, 0xff00
|
||||
/* 007EAC 800072AC 110B000E */ beq $t0, $t3, .L800072E8
|
||||
/* 007EB0 800072B0 3C0A8001 */ lui $t2, %hi(__osRunningThread) # $t2, 0x8001
|
||||
/* 007EB4 800072B4 254AAD50 */ addiu $t2, %lo(__osRunningThread) # addiu $t2, $t2, -0x52b0
|
||||
/* 007EB8 800072B8 8D490118 */ lw $t1, 0x118($t2)
|
||||
/* 007EBC 800072BC 312AFF00 */ andi $t2, $t1, 0xff00
|
||||
/* 007EC0 800072C0 01485024 */ and $t2, $t2, $t0
|
||||
/* 007EC4 800072C4 3C01FFFF */ lui $at, (0xFFFF00FF >> 16) # lui $at, 0xffff
|
||||
/* 007EC8 800072C8 342100FF */ ori $at, (0xFFFF00FF & 0xFFFF) # ori $at, $at, 0xff
|
||||
/* 007ECC 800072CC 01214824 */ and $t1, $t1, $at
|
||||
/* 007ED0 800072D0 012A4825 */ or $t1, $t1, $t2
|
||||
/* 007ED4 800072D4 2401FFFE */ li $at, -2
|
||||
/* 007ED8 800072D8 01214824 */ and $t1, $t1, $at
|
||||
/* 007EDC 800072DC 40896000 */ mtc0 $t1, $12
|
||||
/* 007EE0 800072E0 00000000 */ nop
|
||||
/* 007EE4 800072E4 00000000 */ nop
|
||||
.L800072E8:
|
||||
/* 007EE8 800072E8 03E00008 */ jr $ra
|
||||
/* 007EEC 800072EC 00000000 */ nop
|
||||
15
asm/__osGetCause.s
Normal file
15
asm/__osGetCause.s
Normal file
@@ -0,0 +1,15 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel __osGetCause
|
||||
/* 008790 80007B90 40026800 */ mfc0 $v0, $13
|
||||
/* 008794 80007B94 03E00008 */ jr $ra
|
||||
/* 008798 80007B98 00000000 */ nop
|
||||
15
asm/__osGetFpcCsr.s
Normal file
15
asm/__osGetFpcCsr.s
Normal file
@@ -0,0 +1,15 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel __osGetFpcCsr
|
||||
/* 008680 80007A80 4442F800 */ cfc1 $v0, $31
|
||||
/* 008684 80007A84 03E00008 */ jr $ra
|
||||
/* 008688 80007A88 00000000 */ nop
|
||||
15
asm/__osGetSR.s
Normal file
15
asm/__osGetSR.s
Normal file
@@ -0,0 +1,15 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel __osGetSR
|
||||
/* 0052B0 800046B0 40026000 */ mfc0 $v0, $12
|
||||
/* 0052B4 800046B4 03E00008 */ jr $ra
|
||||
/* 0052B8 800046B8 00000000 */ nop
|
||||
62
asm/__osProbeTLB.s
Normal file
62
asm/__osProbeTLB.s
Normal file
@@ -0,0 +1,62 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel __osProbeTLB
|
||||
/* 005C40 80005040 40085000 */ mfc0 $t0, $10
|
||||
/* 005C44 80005044 310900FF */ andi $t1, $t0, 0xff
|
||||
/* 005C48 80005048 2401E000 */ li $at, -8192
|
||||
/* 005C4C 8000504C 00815024 */ and $t2, $a0, $at
|
||||
/* 005C50 80005050 012A4825 */ or $t1, $t1, $t2
|
||||
/* 005C54 80005054 40895000 */ mtc0 $t1, $10
|
||||
/* 005C58 80005058 00000000 */ nop
|
||||
/* 005C5C 8000505C 00000000 */ nop
|
||||
/* 005C60 80005060 00000000 */ nop
|
||||
/* 005C64 80005064 42000008 */ tlbp
|
||||
/* 005C68 80005068 00000000 */ nop
|
||||
/* 005C6C 8000506C 00000000 */ nop
|
||||
/* 005C70 80005070 400B0000 */ mfc0 $t3, $0
|
||||
/* 005C74 80005074 3C018000 */ lui $at, 0x8000
|
||||
/* 005C78 80005078 01615824 */ and $t3, $t3, $at
|
||||
/* 005C7C 8000507C 1560001A */ bnez $t3, .L800050E8
|
||||
/* 005C80 80005080 00000000 */ nop
|
||||
/* 005C84 80005084 42000001 */ tlbr
|
||||
/* 005C88 80005088 00000000 */ nop
|
||||
/* 005C8C 8000508C 00000000 */ nop
|
||||
/* 005C90 80005090 00000000 */ nop
|
||||
/* 005C94 80005094 400B2800 */ mfc0 $t3, $5
|
||||
/* 005C98 80005098 216B2000 */ addi $t3, $t3, 0x2000
|
||||
/* 005C9C 8000509C 000B5842 */ srl $t3, $t3, 1
|
||||
/* 005CA0 800050A0 01646024 */ and $t4, $t3, $a0
|
||||
/* 005CA4 800050A4 15800004 */ bnez $t4, .L800050B8
|
||||
/* 005CA8 800050A8 216BFFFF */ addi $t3, $t3, -1
|
||||
/* 005CAC 800050AC 40021000 */ mfc0 $v0, $2
|
||||
/* 005CB0 800050B0 10000002 */ b .L800050BC
|
||||
/* 005CB4 800050B4 00000000 */ nop
|
||||
.L800050B8:
|
||||
/* 005CB8 800050B8 40021800 */ mfc0 $v0, $3
|
||||
.L800050BC:
|
||||
/* 005CBC 800050BC 304D0002 */ andi $t5, $v0, 2
|
||||
/* 005CC0 800050C0 11A00009 */ beqz $t5, .L800050E8
|
||||
/* 005CC4 800050C4 00000000 */ nop
|
||||
/* 005CC8 800050C8 3C013FFF */ lui $at, (0x3FFFFFC0 >> 16) # lui $at, 0x3fff
|
||||
/* 005CCC 800050CC 3421FFC0 */ ori $at, (0x3FFFFFC0 & 0xFFFF) # ori $at, $at, 0xffc0
|
||||
/* 005CD0 800050D0 00411024 */ and $v0, $v0, $at
|
||||
/* 005CD4 800050D4 00021180 */ sll $v0, $v0, 6
|
||||
/* 005CD8 800050D8 008B6824 */ and $t5, $a0, $t3
|
||||
/* 005CDC 800050DC 004D1020 */ add $v0, $v0, $t5
|
||||
/* 005CE0 800050E0 10000002 */ b .L800050EC
|
||||
/* 005CE4 800050E4 00000000 */ nop
|
||||
.L800050E8:
|
||||
/* 005CE8 800050E8 2402FFFF */ li $v0, -1
|
||||
.L800050EC:
|
||||
/* 005CEC 800050EC 40885000 */ mtc0 $t0, $10
|
||||
/* 005CF0 800050F0 03E00008 */ jr $ra
|
||||
/* 005CF4 800050F4 00000000 */ nop
|
||||
19
asm/__osRestoreInt.s
Normal file
19
asm/__osRestoreInt.s
Normal file
@@ -0,0 +1,19 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel __osRestoreInt
|
||||
/* 007EF0 800072F0 40086000 */ mfc0 $t0, $12
|
||||
/* 007EF4 800072F4 01044025 */ or $t0, $t0, $a0
|
||||
/* 007EF8 800072F8 40886000 */ mtc0 $t0, $12
|
||||
/* 007EFC 800072FC 00000000 */ nop
|
||||
/* 007F00 80007300 00000000 */ nop
|
||||
/* 007F04 80007304 03E00008 */ jr $ra
|
||||
/* 007F08 80007308 00000000 */ nop
|
||||
15
asm/__osSetCompare.s
Normal file
15
asm/__osSetCompare.s
Normal file
@@ -0,0 +1,15 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel __osSetCompare
|
||||
/* 007B00 80006F00 40845800 */ mtc0 $a0, $11
|
||||
/* 007B04 80006F04 03E00008 */ jr $ra
|
||||
/* 007B08 80006F08 00000000 */ nop
|
||||
16
asm/__osSetFpcCsr.s
Normal file
16
asm/__osSetFpcCsr.s
Normal file
@@ -0,0 +1,16 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel __osSetFpcCsr
|
||||
/* 008670 80007A70 4442F800 */ cfc1 $v0, $31
|
||||
/* 008674 80007A74 44C4F800 */ ctc1 $a0, $31
|
||||
/* 008678 80007A78 03E00008 */ jr $ra
|
||||
/* 00867C 80007A7C 00000000 */ nop
|
||||
16
asm/__osSetSR.s
Normal file
16
asm/__osSetSR.s
Normal file
@@ -0,0 +1,16 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel __osSetSR
|
||||
/* 0052A0 800046A0 40846000 */ mtc0 $a0, $12
|
||||
/* 0052A4 800046A4 00000000 */ nop
|
||||
/* 0052A8 800046A8 03E00008 */ jr $ra
|
||||
/* 0052AC 800046AC 00000000 */ nop
|
||||
16
asm/__osSetWatchLo.s
Normal file
16
asm/__osSetWatchLo.s
Normal file
@@ -0,0 +1,16 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel __osSetWatchLo
|
||||
/* 009F10 80009310 40849000 */ mtc0 $a0, $18
|
||||
/* 009F14 80009314 00000000 */ nop
|
||||
/* 009F18 80009318 03E00008 */ jr $ra
|
||||
/* 009F1C 8000931C 00000000 */ nop
|
||||
94
asm/bcmp.s
Normal file
94
asm/bcmp.s
Normal file
@@ -0,0 +1,94 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel bcmp
|
||||
/* 0074C0 800068C0 28C10010 */ slti $at, $a2, 0x10
|
||||
/* 0074C4 800068C4 14200037 */ bnez $at, .bytecmp
|
||||
/* 0074C8 800068C8 00851026 */ xor $v0, $a0, $a1
|
||||
/* 0074CC 800068CC 30420003 */ andi $v0, $v0, 3
|
||||
/* 0074D0 800068D0 14400019 */ bnez $v0, .unalgncmp
|
||||
/* 0074D4 800068D4 0004C023 */ negu $t8, $a0
|
||||
/* 0074D8 800068D8 33180003 */ andi $t8, $t8, 3
|
||||
/* 0074DC 800068DC 13000007 */ beqz $t8, .wordcmp
|
||||
/* 0074E0 800068E0 00D83023 */ subu $a2, $a2, $t8
|
||||
/* 0074E4 800068E4 00601025 */ move $v0, $v1
|
||||
/* 0074E8 800068E8 88820000 */ lwl $v0, ($a0)
|
||||
/* 0074EC 800068EC 88A30000 */ lwl $v1, ($a1)
|
||||
/* 0074F0 800068F0 00982021 */ addu $a0, $a0, $t8
|
||||
/* 0074F4 800068F4 00B82821 */ addu $a1, $a1, $t8
|
||||
/* 0074F8 800068F8 14430036 */ bne $v0, $v1, .cmpdone
|
||||
.wordcmp:
|
||||
/* 0074FC 800068FC 2401FFFC */ li $at, -4
|
||||
/* 007500 80006900 00C13824 */ and $a3, $a2, $at
|
||||
/* 007504 80006904 10E00027 */ beqz $a3, .bytecmp
|
||||
/* 007508 80006908 00C73023 */ subu $a2, $a2, $a3
|
||||
/* 00750C 8000690C 00E43821 */ addu $a3, $a3, $a0
|
||||
/* 007510 80006910 8C820000 */ lw $v0, ($a0)
|
||||
.L80006914:
|
||||
/* 007514 80006914 8CA30000 */ lw $v1, ($a1)
|
||||
/* 007518 80006918 24840004 */ addiu $a0, $a0, 4
|
||||
/* 00751C 8000691C 24A50004 */ addiu $a1, $a1, 4
|
||||
/* 007520 80006920 1443002C */ bne $v0, $v1, .cmpdone
|
||||
/* 007524 80006924 00000000 */ nop
|
||||
/* 007528 80006928 5487FFFA */ bnel $a0, $a3, .L80006914
|
||||
/* 00752C 8000692C 8C820000 */ lw $v0, ($a0)
|
||||
/* 007530 80006930 1000001C */ b .bytecmp
|
||||
/* 007534 80006934 00000000 */ nop
|
||||
.unalgncmp:
|
||||
/* 007538 80006938 00053823 */ negu $a3, $a1
|
||||
/* 00753C 8000693C 30E70003 */ andi $a3, $a3, 3
|
||||
/* 007540 80006940 10E0000A */ beqz $a3, .partaligncmp
|
||||
/* 007544 80006944 00C73023 */ subu $a2, $a2, $a3
|
||||
/* 007548 80006948 00E43821 */ addu $a3, $a3, $a0
|
||||
/* 00754C 8000694C 90820000 */ lbu $v0, ($a0)
|
||||
.L80006950:
|
||||
/* 007550 80006950 90A30000 */ lbu $v1, ($a1)
|
||||
/* 007554 80006954 24840001 */ addiu $a0, $a0, 1
|
||||
/* 007558 80006958 24A50001 */ addiu $a1, $a1, 1
|
||||
/* 00755C 8000695C 1443001D */ bne $v0, $v1, .cmpdone
|
||||
/* 007560 80006960 00000000 */ nop
|
||||
/* 007564 80006964 5487FFFA */ bnel $a0, $a3, .L80006950
|
||||
/* 007568 80006968 90820000 */ lbu $v0, ($a0)
|
||||
.partaligncmp:
|
||||
/* 00756C 8000696C 2401FFFC */ li $at, -4
|
||||
/* 007570 80006970 00C13824 */ and $a3, $a2, $at
|
||||
/* 007574 80006974 10E0000B */ beqz $a3, .bytecmp
|
||||
/* 007578 80006978 00C73023 */ subu $a2, $a2, $a3
|
||||
/* 00757C 8000697C 00E43821 */ addu $a3, $a3, $a0
|
||||
/* 007580 80006980 88820000 */ lwl $v0, ($a0)
|
||||
.L80006984:
|
||||
/* 007584 80006984 8CA30000 */ lw $v1, ($a1)
|
||||
/* 007588 80006988 98820003 */ lwr $v0, 3($a0)
|
||||
/* 00758C 8000698C 24840004 */ addiu $a0, $a0, 4
|
||||
/* 007590 80006990 24A50004 */ addiu $a1, $a1, 4
|
||||
/* 007594 80006994 1443000F */ bne $v0, $v1, .cmpdone
|
||||
/* 007598 80006998 00000000 */ nop
|
||||
/* 00759C 8000699C 5487FFF9 */ bnel $a0, $a3, .L80006984
|
||||
/* 0075A0 800069A0 88820000 */ lwl $v0, ($a0)
|
||||
.bytecmp:
|
||||
/* 0075A4 800069A4 18C00009 */ blez $a2, .L800069CC
|
||||
/* 0075A8 800069A8 00C43821 */ addu $a3, $a2, $a0
|
||||
/* 0075AC 800069AC 90820000 */ lbu $v0, ($a0)
|
||||
.L800069B0:
|
||||
/* 0075B0 800069B0 90A30000 */ lbu $v1, ($a1)
|
||||
/* 0075B4 800069B4 24840001 */ addiu $a0, $a0, 1
|
||||
/* 0075B8 800069B8 24A50001 */ addiu $a1, $a1, 1
|
||||
/* 0075BC 800069BC 14430005 */ bne $v0, $v1, .cmpdone
|
||||
/* 0075C0 800069C0 00000000 */ nop
|
||||
/* 0075C4 800069C4 5487FFFA */ bnel $a0, $a3, .L800069B0
|
||||
/* 0075C8 800069C8 90820000 */ lbu $v0, ($a0)
|
||||
.L800069CC:
|
||||
/* 0075CC 800069CC 03E00008 */ jr $ra
|
||||
/* 0075D0 800069D0 00001025 */ move $v0, $zero
|
||||
|
||||
.cmpdone:
|
||||
/* 0075D4 800069D4 03E00008 */ jr $ra
|
||||
/* 0075D8 800069D8 24020001 */ li $v0, 1
|
||||
230
asm/bcopy.s
Normal file
230
asm/bcopy.s
Normal file
@@ -0,0 +1,230 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel bcopy
|
||||
/* 007B10 80006F10 10C0001A */ beqz $a2, ret
|
||||
/* 007B14 80006F14 00A03825 */ move $a3, $a1
|
||||
/* 007B18 80006F18 10850018 */ beq $a0, $a1, ret
|
||||
/* 007B1C 80006F1C 00A4082A */ slt $at, $a1, $a0
|
||||
/* 007B20 80006F20 54200008 */ bnezl $at, goforwards
|
||||
/* 007B24 80006F24 28C10010 */ slti $at, $a2, 0x10
|
||||
/* 007B28 80006F28 00861020 */ add $v0, $a0, $a2
|
||||
/* 007B2C 80006F2C 00A2082A */ slt $at, $a1, $v0
|
||||
/* 007B30 80006F30 50200004 */ beql $at, $zero, goforwards
|
||||
/* 007B34 80006F34 28C10010 */ slti $at, $a2, 0x10
|
||||
/* 007B38 80006F38 1000005B */ b gobackwards
|
||||
/* 007B3C 80006F3C 28C10010 */ slti $at, $a2, 0x10
|
||||
/* 007B40 80006F40 28C10010 */ slti $at, $a2, 0x10
|
||||
goforwards:
|
||||
/* 007B44 80006F44 14200005 */ bnez $at, forwards_bytecopy
|
||||
/* 007B48 80006F48 00000000 */ nop
|
||||
/* 007B4C 80006F4C 30820003 */ andi $v0, $a0, 3
|
||||
/* 007B50 80006F50 30A30003 */ andi $v1, $a1, 3
|
||||
/* 007B54 80006F54 1043000B */ beq $v0, $v1, forwalignable
|
||||
/* 007B58 80006F58 00000000 */ nop
|
||||
forwards_bytecopy:
|
||||
/* 007B5C 80006F5C 10C00007 */ beqz $a2, ret
|
||||
/* 007B60 80006F60 00000000 */ nop
|
||||
/* 007B64 80006F64 00861821 */ addu $v1, $a0, $a2
|
||||
.L80006F68:
|
||||
/* 007B68 80006F68 80820000 */ lb $v0, ($a0)
|
||||
/* 007B6C 80006F6C 24840001 */ addiu $a0, $a0, 1
|
||||
/* 007B70 80006F70 24A50001 */ addiu $a1, $a1, 1
|
||||
/* 007B74 80006F74 1483FFFC */ bne $a0, $v1, .L80006F68
|
||||
/* 007B78 80006F78 A0A2FFFF */ sb $v0, -1($a1)
|
||||
ret:
|
||||
/* 007B7C 80006F7C 03E00008 */ jr $ra
|
||||
/* 007B80 80006F80 00E01025 */ move $v0, $a3
|
||||
|
||||
forwalignable:
|
||||
/* 007B84 80006F84 10400018 */ beqz $v0, forwards_32
|
||||
/* 007B88 80006F88 24010001 */ li $at, 1
|
||||
/* 007B8C 80006F8C 1041000F */ beq $v0, $at, forw_copy3
|
||||
/* 007B90 80006F90 24010002 */ li $at, 2
|
||||
/* 007B94 80006F94 50410008 */ beql $v0, $at, forw_copy2
|
||||
/* 007B98 80006F98 84820000 */ lh $v0, ($a0)
|
||||
/* 007B9C 80006F9C 80820000 */ lb $v0, ($a0)
|
||||
/* 007BA0 80006FA0 24840001 */ addiu $a0, $a0, 1
|
||||
/* 007BA4 80006FA4 24A50001 */ addiu $a1, $a1, 1
|
||||
/* 007BA8 80006FA8 24C6FFFF */ addiu $a2, $a2, -1
|
||||
/* 007BAC 80006FAC 1000000E */ b forwards_32
|
||||
/* 007BB0 80006FB0 A0A2FFFF */ sb $v0, -1($a1)
|
||||
/* 007BB4 80006FB4 84820000 */ lh $v0, ($a0)
|
||||
forw_copy2:
|
||||
/* 007BB8 80006FB8 24840002 */ addiu $a0, $a0, 2
|
||||
/* 007BBC 80006FBC 24A50002 */ addiu $a1, $a1, 2
|
||||
/* 007BC0 80006FC0 24C6FFFE */ addiu $a2, $a2, -2
|
||||
/* 007BC4 80006FC4 10000008 */ b forwards_32
|
||||
/* 007BC8 80006FC8 A4A2FFFE */ sh $v0, -2($a1)
|
||||
forw_copy3:
|
||||
/* 007BCC 80006FCC 80820000 */ lb $v0, ($a0)
|
||||
/* 007BD0 80006FD0 84830001 */ lh $v1, 1($a0)
|
||||
/* 007BD4 80006FD4 24840003 */ addiu $a0, $a0, 3
|
||||
/* 007BD8 80006FD8 24A50003 */ addiu $a1, $a1, 3
|
||||
/* 007BDC 80006FDC 24C6FFFD */ addiu $a2, $a2, -3
|
||||
/* 007BE0 80006FE0 A0A2FFFD */ sb $v0, -3($a1)
|
||||
/* 007BE4 80006FE4 A4A3FFFE */ sh $v1, -2($a1)
|
||||
forwards_32:
|
||||
/* 007BE8 80006FE8 28C10020 */ slti $at, $a2, 0x20
|
||||
/* 007BEC 80006FEC 54200016 */ bnezl $at, .L80007048
|
||||
/* 007BF0 80006FF0 28C10010 */ slti $at, $a2, 0x10
|
||||
/* 007BF4 80006FF4 8C820000 */ lw $v0, ($a0)
|
||||
/* 007BF8 80006FF8 8C830004 */ lw $v1, 4($a0)
|
||||
/* 007BFC 80006FFC 8C880008 */ lw $t0, 8($a0)
|
||||
/* 007C00 80007000 8C89000C */ lw $t1, 0xc($a0)
|
||||
/* 007C04 80007004 8C8A0010 */ lw $t2, 0x10($a0)
|
||||
/* 007C08 80007008 8C8B0014 */ lw $t3, 0x14($a0)
|
||||
/* 007C0C 8000700C 8C8C0018 */ lw $t4, 0x18($a0)
|
||||
/* 007C10 80007010 8C8D001C */ lw $t5, 0x1c($a0)
|
||||
/* 007C14 80007014 24840020 */ addiu $a0, $a0, 0x20
|
||||
/* 007C18 80007018 24A50020 */ addiu $a1, $a1, 0x20
|
||||
/* 007C1C 8000701C 24C6FFE0 */ addiu $a2, $a2, -0x20
|
||||
/* 007C20 80007020 ACA2FFE0 */ sw $v0, -0x20($a1)
|
||||
/* 007C24 80007024 ACA3FFE4 */ sw $v1, -0x1c($a1)
|
||||
/* 007C28 80007028 ACA8FFE8 */ sw $t0, -0x18($a1)
|
||||
/* 007C2C 8000702C ACA9FFEC */ sw $t1, -0x14($a1)
|
||||
/* 007C30 80007030 ACAAFFF0 */ sw $t2, -0x10($a1)
|
||||
/* 007C34 80007034 ACABFFF4 */ sw $t3, -0xc($a1)
|
||||
/* 007C38 80007038 ACACFFF8 */ sw $t4, -8($a1)
|
||||
/* 007C3C 8000703C 1000FFEA */ b forwards_32
|
||||
/* 007C40 80007040 ACADFFFC */ sw $t5, -4($a1)
|
||||
forwards_16:
|
||||
/* 007C44 80007044 28C10010 */ slti $at, $a2, 0x10
|
||||
.L80007048:
|
||||
/* 007C48 80007048 5420000E */ bnezl $at, .L80007084
|
||||
/* 007C4C 8000704C 28C10004 */ slti $at, $a2, 4
|
||||
/* 007C50 80007050 8C820000 */ lw $v0, ($a0)
|
||||
/* 007C54 80007054 8C830004 */ lw $v1, 4($a0)
|
||||
/* 007C58 80007058 8C880008 */ lw $t0, 8($a0)
|
||||
/* 007C5C 8000705C 8C89000C */ lw $t1, 0xc($a0)
|
||||
/* 007C60 80007060 24840010 */ addiu $a0, $a0, 0x10
|
||||
/* 007C64 80007064 24A50010 */ addiu $a1, $a1, 0x10
|
||||
/* 007C68 80007068 24C6FFF0 */ addiu $a2, $a2, -0x10
|
||||
/* 007C6C 8000706C ACA2FFF0 */ sw $v0, -0x10($a1)
|
||||
/* 007C70 80007070 ACA3FFF4 */ sw $v1, -0xc($a1)
|
||||
/* 007C74 80007074 ACA8FFF8 */ sw $t0, -8($a1)
|
||||
/* 007C78 80007078 1000FFF2 */ b forwards_16
|
||||
/* 007C7C 8000707C ACA9FFFC */ sw $t1, -4($a1)
|
||||
forwards_4:
|
||||
/* 007C80 80007080 28C10004 */ slti $at, $a2, 4
|
||||
.L80007084:
|
||||
/* 007C84 80007084 1420FFB5 */ bnez $at, forwards_bytecopy
|
||||
/* 007C88 80007088 00000000 */ nop
|
||||
/* 007C8C 8000708C 8C820000 */ lw $v0, ($a0)
|
||||
/* 007C90 80007090 24840004 */ addiu $a0, $a0, 4
|
||||
/* 007C94 80007094 24A50004 */ addiu $a1, $a1, 4
|
||||
/* 007C98 80007098 24C6FFFC */ addiu $a2, $a2, -4
|
||||
/* 007C9C 8000709C 1000FFF8 */ b forwards_4
|
||||
/* 007CA0 800070A0 ACA2FFFC */ sw $v0, -4($a1)
|
||||
/* 007CA4 800070A4 28C10010 */ slti $at, $a2, 0x10
|
||||
gobackwards:
|
||||
/* 007CA8 800070A8 00862020 */ add $a0, $a0, $a2
|
||||
/* 007CAC 800070AC 14200005 */ bnez $at, backwards_bytecopy
|
||||
/* 007CB0 800070B0 00A62820 */ add $a1, $a1, $a2
|
||||
/* 007CB4 800070B4 30820003 */ andi $v0, $a0, 3
|
||||
/* 007CB8 800070B8 30A30003 */ andi $v1, $a1, 3
|
||||
/* 007CBC 800070BC 1043000D */ beq $v0, $v1, backalignable
|
||||
/* 007CC0 800070C0 00000000 */ nop
|
||||
backwards_bytecopy:
|
||||
/* 007CC4 800070C4 10C0FFAD */ beqz $a2, ret
|
||||
/* 007CC8 800070C8 00000000 */ nop
|
||||
/* 007CCC 800070CC 2484FFFF */ addiu $a0, $a0, -1
|
||||
/* 007CD0 800070D0 24A5FFFF */ addiu $a1, $a1, -1
|
||||
/* 007CD4 800070D4 00861823 */ subu $v1, $a0, $a2
|
||||
.L800070D8:
|
||||
/* 007CD8 800070D8 80820000 */ lb $v0, ($a0)
|
||||
/* 007CDC 800070DC 2484FFFF */ addiu $a0, $a0, -1
|
||||
/* 007CE0 800070E0 24A5FFFF */ addiu $a1, $a1, -1
|
||||
/* 007CE4 800070E4 1483FFFC */ bne $a0, $v1, .L800070D8
|
||||
/* 007CE8 800070E8 A0A20001 */ sb $v0, 1($a1)
|
||||
/* 007CEC 800070EC 03E00008 */ jr $ra
|
||||
/* 007CF0 800070F0 00E01025 */ move $v0, $a3
|
||||
|
||||
backalignable:
|
||||
/* 007CF4 800070F4 10400018 */ beqz $v0, backwards_32
|
||||
/* 007CF8 800070F8 24010003 */ li $at, 3
|
||||
/* 007CFC 800070FC 1041000F */ beq $v0, $at, back_copy3
|
||||
/* 007D00 80007100 24010002 */ li $at, 2
|
||||
/* 007D04 80007104 50410008 */ beql $v0, $at, back_copy2
|
||||
/* 007D08 80007108 8482FFFE */ lh $v0, -2($a0)
|
||||
/* 007D0C 8000710C 8082FFFF */ lb $v0, -1($a0)
|
||||
/* 007D10 80007110 2484FFFF */ addiu $a0, $a0, -1
|
||||
/* 007D14 80007114 24A5FFFF */ addiu $a1, $a1, -1
|
||||
/* 007D18 80007118 24C6FFFF */ addiu $a2, $a2, -1
|
||||
/* 007D1C 8000711C 1000000E */ b backwards_32
|
||||
/* 007D20 80007120 A0A20000 */ sb $v0, ($a1)
|
||||
/* 007D24 80007124 8482FFFE */ lh $v0, -2($a0)
|
||||
back_copy2:
|
||||
/* 007D28 80007128 2484FFFE */ addiu $a0, $a0, -2
|
||||
/* 007D2C 8000712C 24A5FFFE */ addiu $a1, $a1, -2
|
||||
/* 007D30 80007130 24C6FFFE */ addiu $a2, $a2, -2
|
||||
/* 007D34 80007134 10000008 */ b backwards_32
|
||||
/* 007D38 80007138 A4A20000 */ sh $v0, ($a1)
|
||||
back_copy3:
|
||||
/* 007D3C 8000713C 8082FFFF */ lb $v0, -1($a0)
|
||||
/* 007D40 80007140 8483FFFD */ lh $v1, -3($a0)
|
||||
/* 007D44 80007144 2484FFFD */ addiu $a0, $a0, -3
|
||||
/* 007D48 80007148 24A5FFFD */ addiu $a1, $a1, -3
|
||||
/* 007D4C 8000714C 24C6FFFD */ addiu $a2, $a2, -3
|
||||
/* 007D50 80007150 A0A20002 */ sb $v0, 2($a1)
|
||||
/* 007D54 80007154 A4A30000 */ sh $v1, ($a1)
|
||||
backwards_32:
|
||||
/* 007D58 80007158 28C10020 */ slti $at, $a2, 0x20
|
||||
/* 007D5C 8000715C 54200016 */ bnezl $at, .L800071B8
|
||||
/* 007D60 80007160 28C10010 */ slti $at, $a2, 0x10
|
||||
/* 007D64 80007164 8C82FFFC */ lw $v0, -4($a0)
|
||||
/* 007D68 80007168 8C83FFF8 */ lw $v1, -8($a0)
|
||||
/* 007D6C 8000716C 8C88FFF4 */ lw $t0, -0xc($a0)
|
||||
/* 007D70 80007170 8C89FFF0 */ lw $t1, -0x10($a0)
|
||||
/* 007D74 80007174 8C8AFFEC */ lw $t2, -0x14($a0)
|
||||
/* 007D78 80007178 8C8BFFE8 */ lw $t3, -0x18($a0)
|
||||
/* 007D7C 8000717C 8C8CFFE4 */ lw $t4, -0x1c($a0)
|
||||
/* 007D80 80007180 8C8DFFE0 */ lw $t5, -0x20($a0)
|
||||
/* 007D84 80007184 2484FFE0 */ addiu $a0, $a0, -0x20
|
||||
/* 007D88 80007188 24A5FFE0 */ addiu $a1, $a1, -0x20
|
||||
/* 007D8C 8000718C 24C6FFE0 */ addiu $a2, $a2, -0x20
|
||||
/* 007D90 80007190 ACA2001C */ sw $v0, 0x1c($a1)
|
||||
/* 007D94 80007194 ACA30018 */ sw $v1, 0x18($a1)
|
||||
/* 007D98 80007198 ACA80014 */ sw $t0, 0x14($a1)
|
||||
/* 007D9C 8000719C ACA90010 */ sw $t1, 0x10($a1)
|
||||
/* 007DA0 800071A0 ACAA000C */ sw $t2, 0xc($a1)
|
||||
/* 007DA4 800071A4 ACAB0008 */ sw $t3, 8($a1)
|
||||
/* 007DA8 800071A8 ACAC0004 */ sw $t4, 4($a1)
|
||||
/* 007DAC 800071AC 1000FFEA */ b backwards_32
|
||||
/* 007DB0 800071B0 ACAD0000 */ sw $t5, ($a1)
|
||||
backwards_16:
|
||||
/* 007DB4 800071B4 28C10010 */ slti $at, $a2, 0x10
|
||||
.L800071B8:
|
||||
/* 007DB8 800071B8 5420000E */ bnezl $at, .L800071F4
|
||||
/* 007DBC 800071BC 28C10004 */ slti $at, $a2, 4
|
||||
/* 007DC0 800071C0 8C82FFFC */ lw $v0, -4($a0)
|
||||
/* 007DC4 800071C4 8C83FFF8 */ lw $v1, -8($a0)
|
||||
/* 007DC8 800071C8 8C88FFF4 */ lw $t0, -0xc($a0)
|
||||
/* 007DCC 800071CC 8C89FFF0 */ lw $t1, -0x10($a0)
|
||||
/* 007DD0 800071D0 2484FFF0 */ addiu $a0, $a0, -0x10
|
||||
/* 007DD4 800071D4 24A5FFF0 */ addiu $a1, $a1, -0x10
|
||||
/* 007DD8 800071D8 24C6FFF0 */ addiu $a2, $a2, -0x10
|
||||
/* 007DDC 800071DC ACA2000C */ sw $v0, 0xc($a1)
|
||||
/* 007DE0 800071E0 ACA30008 */ sw $v1, 8($a1)
|
||||
/* 007DE4 800071E4 ACA80004 */ sw $t0, 4($a1)
|
||||
/* 007DE8 800071E8 1000FFF2 */ b backwards_16
|
||||
/* 007DEC 800071EC ACA90000 */ sw $t1, ($a1)
|
||||
backwards_4:
|
||||
/* 007DF0 800071F0 28C10004 */ slti $at, $a2, 4
|
||||
.L800071F4:
|
||||
/* 007DF4 800071F4 1420FFB3 */ bnez $at, backwards_bytecopy
|
||||
/* 007DF8 800071F8 00000000 */ nop
|
||||
/* 007DFC 800071FC 8C82FFFC */ lw $v0, -4($a0)
|
||||
/* 007E00 80007200 2484FFFC */ addiu $a0, $a0, -4
|
||||
/* 007E04 80007204 24A5FFFC */ addiu $a1, $a1, -4
|
||||
/* 007E08 80007208 24C6FFFC */ addiu $a2, $a2, -4
|
||||
/* 007E0C 8000720C 1000FFF8 */ b backwards_4
|
||||
/* 007E10 80007210 ACA20000 */ sw $v0, ($a1)
|
||||
84
asm/bzero.s
Normal file
84
asm/bzero.s
Normal file
@@ -0,0 +1,84 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel bzero
|
||||
/* 005050 80004450 28A1000C */ slti $at, $a1, 0xc
|
||||
/* 005054 80004454 1420001D */ bnez $at, .bytezero
|
||||
/* 005058 80004458 00041823 */ negu $v1, $a0
|
||||
/* 00505C 8000445C 30630003 */ andi $v1, $v1, 3
|
||||
/* 005060 80004460 10600003 */ beqz $v1, .blkzero
|
||||
/* 005064 80004464 00A32823 */ subu $a1, $a1, $v1
|
||||
/* 005068 80004468 A8800000 */ swl $zero, ($a0)
|
||||
/* 00506C 8000446C 00832021 */ addu $a0, $a0, $v1
|
||||
.blkzero:
|
||||
/* 005070 80004470 2401FFE0 */ li $at, -32
|
||||
/* 005074 80004474 00A13824 */ and $a3, $a1, $at
|
||||
/* 005078 80004478 10E0000C */ beqz $a3, .wordzero
|
||||
/* 00507C 8000447C 00A72823 */ subu $a1, $a1, $a3
|
||||
/* 005080 80004480 00E43821 */ addu $a3, $a3, $a0
|
||||
.L80004484:
|
||||
/* 005084 80004484 24840020 */ addiu $a0, $a0, 0x20
|
||||
/* 005088 80004488 AC80FFE0 */ sw $zero, -0x20($a0)
|
||||
/* 00508C 8000448C AC80FFE4 */ sw $zero, -0x1c($a0)
|
||||
/* 005090 80004490 AC80FFE8 */ sw $zero, -0x18($a0)
|
||||
/* 005094 80004494 AC80FFEC */ sw $zero, -0x14($a0)
|
||||
/* 005098 80004498 AC80FFF0 */ sw $zero, -0x10($a0)
|
||||
/* 00509C 8000449C AC80FFF4 */ sw $zero, -0xc($a0)
|
||||
/* 0050A0 800044A0 AC80FFF8 */ sw $zero, -8($a0)
|
||||
/* 0050A4 800044A4 1487FFF7 */ bne $a0, $a3, .L80004484
|
||||
/* 0050A8 800044A8 AC80FFFC */ sw $zero, -4($a0)
|
||||
.wordzero:
|
||||
/* 0050AC 800044AC 2401FFFC */ li $at, -4
|
||||
/* 0050B0 800044B0 00A13824 */ and $a3, $a1, $at
|
||||
/* 0050B4 800044B4 10E00005 */ beqz $a3, .bytezero
|
||||
/* 0050B8 800044B8 00A72823 */ subu $a1, $a1, $a3
|
||||
/* 0050BC 800044BC 00E43821 */ addu $a3, $a3, $a0
|
||||
.L800044C0:
|
||||
/* 0050C0 800044C0 24840004 */ addiu $a0, $a0, 4
|
||||
/* 0050C4 800044C4 1487FFFE */ bne $a0, $a3, .L800044C0
|
||||
/* 0050C8 800044C8 AC80FFFC */ sw $zero, -4($a0)
|
||||
.bytezero:
|
||||
/* 0050CC 800044CC 18A00005 */ blez $a1, .zerodone
|
||||
/* 0050D0 800044D0 00000000 */ nop
|
||||
/* 0050D4 800044D4 00A42821 */ addu $a1, $a1, $a0
|
||||
.L800044D8:
|
||||
/* 0050D8 800044D8 24840001 */ addiu $a0, $a0, 1
|
||||
/* 0050DC 800044DC 1485FFFE */ bne $a0, $a1, .L800044D8
|
||||
/* 0050E0 800044E0 A080FFFF */ sb $zero, -1($a0)
|
||||
.zerodone:
|
||||
/* 0050E4 800044E4 03E00008 */ jr $ra
|
||||
/* 0050E8 800044E8 00000000 */ nop
|
||||
|
||||
/* 0050EC 800044EC 00000000 */ nop
|
||||
/* 0050F0 800044F0 00000000 */ nop
|
||||
/* 0050F4 800044F4 00000000 */ nop
|
||||
/* 0050F8 800044F8 00000000 */ nop
|
||||
/* 0050FC 800044FC 00000000 */ nop
|
||||
/* 005100 80004500 00000000 */ nop
|
||||
/* 005104 80004504 00000000 */ nop
|
||||
/* 005108 80004508 00000000 */ nop
|
||||
/* 00510C 8000450C 00000000 */ nop
|
||||
/* 005110 80004510 00000000 */ nop
|
||||
/* 005114 80004514 00000000 */ nop
|
||||
/* 005118 80004518 00000000 */ nop
|
||||
/* 00511C 8000451C 00000000 */ nop
|
||||
/* 005120 80004520 00000000 */ nop
|
||||
/* 005124 80004524 00000000 */ nop
|
||||
/* 005128 80004528 00000000 */ nop
|
||||
/* 00512C 8000452C 00000000 */ nop
|
||||
/* 005130 80004530 00000000 */ nop
|
||||
/* 005134 80004534 00000000 */ nop
|
||||
/* 005138 80004538 00000000 */ nop
|
||||
/* 00513C 8000453C 00000000 */ nop
|
||||
/* 005140 80004540 00000000 */ nop
|
||||
/* 005144 80004544 00000000 */ nop
|
||||
/* 005148 80004548 00000000 */ nop
|
||||
/* 00514C 8000454C 00000000 */ nop
|
||||
137
asm/code_8006BA00.s
Normal file
137
asm/code_8006BA00.s
Normal file
@@ -0,0 +1,137 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel func_8006BA00
|
||||
/* AE2BA0 8006BA00 24831DB4 */ addiu $v1, $a0, 0x1db4
|
||||
/* AE2BA4 8006BA04 24040010 */ li $a0, 16
|
||||
/* AE2BA8 8006BA08 00001025 */ move $v0, $zero
|
||||
.L8006BA0C:
|
||||
/* AE2BAC 8006BA0C 24420004 */ addiu $v0, $v0, 4
|
||||
/* AE2BB0 8006BA10 A4600000 */ sh $zero, ($v1)
|
||||
/* AE2BB4 8006BA14 A460001C */ sh $zero, 0x1c($v1)
|
||||
/* AE2BB8 8006BA18 A4600038 */ sh $zero, 0x38($v1)
|
||||
/* AE2BBC 8006BA1C A4600054 */ sh $zero, 0x54($v1)
|
||||
/* AE2BC0 8006BA20 1444FFFA */ bne $v0, $a0, .L8006BA0C
|
||||
/* AE2BC4 8006BA24 24630070 */ addiu $v1, $v1, 0x70
|
||||
/* AE2BC8 8006BA28 03E00008 */ jr $ra
|
||||
/* AE2BCC 8006BA2C 00000000 */ nop
|
||||
|
||||
glabel func_8006BA30
|
||||
/* AE2BD0 8006BA30 27BDFFD0 */ addiu $sp, $sp, -0x30
|
||||
/* AE2BD4 8006BA34 AFB40028 */ sw $s4, 0x28($sp)
|
||||
/* AE2BD8 8006BA38 AFB30024 */ sw $s3, 0x24($sp)
|
||||
/* AE2BDC 8006BA3C AFB20020 */ sw $s2, 0x20($sp)
|
||||
/* AE2BE0 8006BA40 AFB1001C */ sw $s1, 0x1c($sp)
|
||||
/* AE2BE4 8006BA44 AFB00018 */ sw $s0, 0x18($sp)
|
||||
/* AE2BE8 8006BA48 3C140001 */ lui $s4, (0x00011D60 >> 16) # lui $s4, 1
|
||||
/* AE2BEC 8006BA4C 00809025 */ move $s2, $a0
|
||||
/* AE2BF0 8006BA50 AFBF002C */ sw $ra, 0x2c($sp)
|
||||
/* AE2BF4 8006BA54 24901DB4 */ addiu $s0, $a0, 0x1db4
|
||||
/* AE2BF8 8006BA58 36941D60 */ ori $s4, (0x00011D60 & 0xFFFF) # ori $s4, $s4, 0x1d60
|
||||
/* AE2BFC 8006BA5C 00008825 */ move $s1, $zero
|
||||
/* AE2C00 8006BA60 24130010 */ li $s3, 16
|
||||
.L8006BA64:
|
||||
/* AE2C04 8006BA64 96020000 */ lhu $v0, ($s0)
|
||||
/* AE2C08 8006BA68 50400011 */ beql $v0, $zero, .L8006BAB0
|
||||
/* AE2C0C 8006BA6C 26310001 */ addiu $s1, $s1, 1
|
||||
/* AE2C10 8006BA70 14400003 */ bnez $v0, .L8006BA80
|
||||
/* AE2C14 8006BA74 244EFFFF */ addiu $t6, $v0, -1
|
||||
/* AE2C18 8006BA78 10000003 */ b .L8006BA88
|
||||
/* AE2C1C 8006BA7C 00001825 */ move $v1, $zero
|
||||
.L8006BA80:
|
||||
/* AE2C20 8006BA80 A60E0000 */ sh $t6, ($s0)
|
||||
/* AE2C24 8006BA84 31C3FFFF */ andi $v1, $t6, 0xffff
|
||||
.L8006BA88:
|
||||
/* AE2C28 8006BA88 14600005 */ bnez $v1, .L8006BAA0
|
||||
/* AE2C2C 8006BA8C 02542021 */ addu $a0, $s2, $s4
|
||||
/* AE2C30 8006BA90 0C03E27A */ jal func_800F89E8
|
||||
/* AE2C34 8006BA94 26040010 */ addiu $a0, $s0, 0x10
|
||||
/* AE2C38 8006BA98 10000005 */ b .L8006BAB0
|
||||
/* AE2C3C 8006BA9C 26310001 */ addiu $s1, $s1, 1
|
||||
.L8006BAA0:
|
||||
/* AE2C40 8006BAA0 26050004 */ addiu $a1, $s0, 4
|
||||
/* AE2C44 8006BAA4 0C029BBD */ jal func_800A6EF4
|
||||
/* AE2C48 8006BAA8 26060010 */ addiu $a2, $s0, 0x10
|
||||
/* AE2C4C 8006BAAC 26310001 */ addiu $s1, $s1, 1
|
||||
.L8006BAB0:
|
||||
/* AE2C50 8006BAB0 1633FFEC */ bne $s1, $s3, .L8006BA64
|
||||
/* AE2C54 8006BAB4 2610001C */ addiu $s0, $s0, 0x1c
|
||||
/* AE2C58 8006BAB8 8FBF002C */ lw $ra, 0x2c($sp)
|
||||
/* AE2C5C 8006BABC 8FB00018 */ lw $s0, 0x18($sp)
|
||||
/* AE2C60 8006BAC0 8FB1001C */ lw $s1, 0x1c($sp)
|
||||
/* AE2C64 8006BAC4 8FB20020 */ lw $s2, 0x20($sp)
|
||||
/* AE2C68 8006BAC8 8FB30024 */ lw $s3, 0x24($sp)
|
||||
/* AE2C6C 8006BACC 8FB40028 */ lw $s4, 0x28($sp)
|
||||
/* AE2C70 8006BAD0 03E00008 */ jr $ra
|
||||
/* AE2C74 8006BAD4 27BD0030 */ addiu $sp, $sp, 0x30
|
||||
|
||||
glabel Audio_PlaySoundAtPosition
|
||||
/* AE2C78 8006BAD8 27BDFFC8 */ addiu $sp, $sp, -0x38
|
||||
/* AE2C7C 8006BADC AFA40038 */ sw $a0, 0x38($sp)
|
||||
/* AE2C80 8006BAE0 AFA5003C */ sw $a1, 0x3c($sp)
|
||||
/* AE2C84 8006BAE4 24881DB4 */ addiu $t0, $a0, 0x1db4
|
||||
/* AE2C88 8006BAE8 AFBF001C */ sw $ra, 0x1c($sp)
|
||||
/* AE2C8C 8006BAEC AFA60040 */ sw $a2, 0x40($sp)
|
||||
/* AE2C90 8006BAF0 AFA70044 */ sw $a3, 0x44($sp)
|
||||
/* AE2C94 8006BAF4 340AFFFF */ li $t2, 65535
|
||||
/* AE2C98 8006BAF8 24040010 */ li $a0, 16
|
||||
/* AE2C9C 8006BAFC 8FA50028 */ lw $a1, 0x28($sp)
|
||||
/* AE2CA0 8006BB00 00004825 */ move $t1, $zero
|
||||
.L8006BB04:
|
||||
/* AE2CA4 8006BB04 95020000 */ lhu $v0, ($t0)
|
||||
/* AE2CA8 8006BB08 10400007 */ beqz $v0, .L8006BB28
|
||||
/* AE2CAC 8006BB0C 004A082A */ slt $at, $v0, $t2
|
||||
/* AE2CB0 8006BB10 10200003 */ beqz $at, .L8006BB20
|
||||
/* AE2CB4 8006BB14 25290001 */ addiu $t1, $t1, 1
|
||||
/* AE2CB8 8006BB18 00405025 */ move $t2, $v0
|
||||
/* AE2CBC 8006BB1C 01002825 */ move $a1, $t0
|
||||
.L8006BB20:
|
||||
/* AE2CC0 8006BB20 1524FFF8 */ bne $t1, $a0, .L8006BB04
|
||||
/* AE2CC4 8006BB24 2508001C */ addiu $t0, $t0, 0x1c
|
||||
.L8006BB28:
|
||||
/* AE2CC8 8006BB28 29210010 */ slti $at, $t1, 0x10
|
||||
/* AE2CCC 8006BB2C 14200004 */ bnez $at, .L8006BB40
|
||||
/* AE2CD0 8006BB30 24A40010 */ addiu $a0, $a1, 0x10
|
||||
/* AE2CD4 8006BB34 0C03E27A */ jal func_800F89E8
|
||||
/* AE2CD8 8006BB38 AFA50030 */ sw $a1, 0x30($sp)
|
||||
/* AE2CDC 8006BB3C 8FA80030 */ lw $t0, 0x30($sp)
|
||||
.L8006BB40:
|
||||
/* AE2CE0 8006BB40 8FAE003C */ lw $t6, 0x3c($sp)
|
||||
/* AE2CE4 8006BB44 25050004 */ addiu $a1, $t0, 4
|
||||
/* AE2CE8 8006BB48 3C010001 */ lui $at, (0x00011D60 >> 16) # lui $at, 1
|
||||
/* AE2CEC 8006BB4C 8DD80000 */ lw $t8, ($t6)
|
||||
/* AE2CF0 8006BB50 34211D60 */ ori $at, (0x00011D60 & 0xFFFF) # ori $at, $at, 0x1d60
|
||||
/* AE2CF4 8006BB54 25060010 */ addiu $a2, $t0, 0x10
|
||||
/* AE2CF8 8006BB58 ACB80000 */ sw $t8, ($a1)
|
||||
/* AE2CFC 8006BB5C 8DCF0004 */ lw $t7, 4($t6)
|
||||
/* AE2D00 8006BB60 ACAF0004 */ sw $t7, 4($a1)
|
||||
/* AE2D04 8006BB64 8DD80008 */ lw $t8, 8($t6)
|
||||
/* AE2D08 8006BB68 ACB80008 */ sw $t8, 8($a1)
|
||||
/* AE2D0C 8006BB6C 8FB90040 */ lw $t9, 0x40($sp)
|
||||
/* AE2D10 8006BB70 A5190000 */ sh $t9, ($t0)
|
||||
/* AE2D14 8006BB74 8FA40038 */ lw $a0, 0x38($sp)
|
||||
/* AE2D18 8006BB78 AFA60020 */ sw $a2, 0x20($sp)
|
||||
/* AE2D1C 8006BB7C 0C029BBD */ jal func_800A6EF4
|
||||
/* AE2D20 8006BB80 00812021 */ addu $a0, $a0, $at
|
||||
/* AE2D24 8006BB84 3C078013 */ lui $a3, %hi(D_801333E0) # $a3, 0x8013
|
||||
/* AE2D28 8006BB88 3C0B8013 */ lui $t3, %hi(D_801333E8) # $t3, 0x8013
|
||||
/* AE2D2C 8006BB8C 24E733E0 */ addiu $a3, %lo(D_801333E0) # addiu $a3, $a3, 0x33e0
|
||||
/* AE2D30 8006BB90 256B33E8 */ addiu $t3, %lo(D_801333E8) # addiu $t3, $t3, 0x33e8
|
||||
/* AE2D34 8006BB94 AFAB0014 */ sw $t3, 0x14($sp)
|
||||
/* AE2D38 8006BB98 AFA70010 */ sw $a3, 0x10($sp)
|
||||
/* AE2D3C 8006BB9C 97A40046 */ lhu $a0, 0x46($sp)
|
||||
/* AE2D40 8006BBA0 8FA50020 */ lw $a1, 0x20($sp)
|
||||
/* AE2D44 8006BBA4 0C03DCE3 */ jal Audio_PlaySoundGeneral
|
||||
/* AE2D48 8006BBA8 24060004 */ li $a2, 4
|
||||
/* AE2D4C 8006BBAC 8FBF001C */ lw $ra, 0x1c($sp)
|
||||
/* AE2D50 8006BBB0 27BD0038 */ addiu $sp, $sp, 0x38
|
||||
/* AE2D54 8006BBB4 03E00008 */ jr $ra
|
||||
/* AE2D58 8006BBB8 00000000 */ nop
|
||||
132
asm/code_8008E4E0.s
Normal file
132
asm/code_8008E4E0.s
Normal file
@@ -0,0 +1,132 @@
|
||||
.include "macro.inc"
|
||||
|
||||
# assembler directives
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
.set gp=64 # allow use of 64-bit general purposee registers
|
||||
|
||||
.section .text
|
||||
|
||||
.align 4
|
||||
|
||||
glabel func_8008E4E0
|
||||
/* B05680 8008E4E0 AFA50004 */ sw $a1, 4($sp)
|
||||
/* B05684 8008E4E4 AFA60008 */ sw $a2, 8($sp)
|
||||
/* B05688 8008E4E8 00063400 */ sll $a2, $a2, 0x10
|
||||
/* B0568C 8008E4EC 00052C00 */ sll $a1, $a1, 0x10
|
||||
/* B05690 8008E4F0 00052C03 */ sra $a1, $a1, 0x10
|
||||
/* B05694 8008E4F4 00063403 */ sra $a2, $a2, 0x10
|
||||
/* B05698 8008E4F8 10A60007 */ beq $a1, $a2, .L8008E518
|
||||
/* B0569C 8008E4FC 00001825 */ move $v1, $zero
|
||||
/* B056A0 8008E500 3C0E0001 */ lui $t6, 1
|
||||
/* B056A4 8008E504 01C47021 */ addu $t6, $t6, $a0
|
||||
/* B056A8 8008E508 8DCE1E08 */ lw $t6, 0x1e08($t6)
|
||||
/* B056AC 8008E50C 000578C0 */ sll $t7, $a1, 3
|
||||
/* B056B0 8008E510 03E00008 */ jr $ra
|
||||
/* B056B4 8008E514 01CF1021 */ addu $v0, $t6, $t7
|
||||
.L8008E518:
|
||||
/* B056B8 8008E518 03E00008 */ jr $ra
|
||||
/* B056BC 8008E51C 00601025 */ move $v0, $v1
|
||||
|
||||
glabel func_8008E520
|
||||
/* B056C0 8008E520 27BDFFE0 */ addiu $sp, $sp, -0x20
|
||||
/* B056C4 8008E524 AFA60028 */ sw $a2, 0x28($sp)
|
||||
/* B056C8 8008E528 00063400 */ sll $a2, $a2, 0x10
|
||||
/* B056CC 8008E52C 00063403 */ sra $a2, $a2, 0x10
|
||||
/* B056D0 8008E530 AFBF0014 */ sw $ra, 0x14($sp)
|
||||
/* B056D4 8008E534 14A00005 */ bnez $a1, .L8008E54C
|
||||
/* B056D8 8008E538 AFA7002C */ sw $a3, 0x2c($sp)
|
||||
/* B056DC 8008E53C 3C01BF80 */ li $at, 0xBF800000 # 0.000000
|
||||
/* B056E0 8008E540 44810000 */ mtc1 $at, $f0
|
||||
/* B056E4 8008E544 1000002E */ b .L8008E600
|
||||
/* B056E8 8008E548 8FBF0014 */ lw $ra, 0x14($sp)
|
||||
.L8008E54C:
|
||||
/* B056EC 8008E54C 8CA30004 */ lw $v1, 4($a1)
|
||||
/* B056F0 8008E550 3C198016 */ lui $t9, %hi(gSegments)
|
||||
/* B056F4 8008E554 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
|
||||
/* B056F8 8008E558 00037100 */ sll $t6, $v1, 4
|
||||
/* B056FC 8008E55C 000E7F02 */ srl $t7, $t6, 0x1c
|
||||
/* B05700 8008E560 000FC080 */ sll $t8, $t7, 2
|
||||
/* B05704 8008E564 0338C821 */ addu $t9, $t9, $t8
|
||||
/* B05708 8008E568 8F396FA8 */ lw $t9, %lo(gSegments)($t9)
|
||||
/* B0570C 8008E56C 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
|
||||
/* B05710 8008E570 00614024 */ and $t0, $v1, $at
|
||||
/* B05714 8008E574 00064880 */ sll $t1, $a2, 2
|
||||
/* B05718 8008E578 3C018000 */ lui $at, 0x8000
|
||||
/* B0571C 8008E57C 01264823 */ subu $t1, $t1, $a2
|
||||
/* B05720 8008E580 03281021 */ addu $v0, $t9, $t0
|
||||
/* B05724 8008E584 00411021 */ addu $v0, $v0, $at
|
||||
/* B05728 8008E588 00094840 */ sll $t1, $t1, 1
|
||||
/* B0572C 8008E58C 01221021 */ addu $v0, $t1, $v0
|
||||
/* B05730 8008E590 844A0000 */ lh $t2, ($v0)
|
||||
/* B05734 8008E594 844B0004 */ lh $t3, 4($v0)
|
||||
/* B05738 8008E598 C4880024 */ lwc1 $f8, 0x24($a0)
|
||||
/* B0573C 8008E59C 448A2000 */ mtc1 $t2, $f4
|
||||
/* B05740 8008E5A0 448B5000 */ mtc1 $t3, $f10
|
||||
/* B05744 8008E5A4 C492002C */ lwc1 $f18, 0x2c($a0)
|
||||
/* B05748 8008E5A8 468021A0 */ cvt.s.w $f6, $f4
|
||||
/* B0574C 8008E5AC 46805420 */ cvt.s.w $f16, $f10
|
||||
/* B05750 8008E5B0 46083301 */ sub.s $f12, $f6, $f8
|
||||
/* B05754 8008E5B4 46128381 */ sub.s $f14, $f16, $f18
|
||||
/* B05758 8008E5B8 E7AC001C */ swc1 $f12, 0x1c($sp)
|
||||
/* B0575C 8008E5BC 0C03F494 */ jal func_800FD250
|
||||
/* B05760 8008E5C0 E7AE0018 */ swc1 $f14, 0x18($sp)
|
||||
/* B05764 8008E5C4 3C018014 */ lui $at, %hi(D_8013E760)
|
||||
/* B05768 8008E5C8 C424E760 */ lwc1 $f4, %lo(D_8013E760)($at)
|
||||
/* B0576C 8008E5CC C7AC001C */ lwc1 $f12, 0x1c($sp)
|
||||
/* B05770 8008E5D0 C7AE0018 */ lwc1 $f14, 0x18($sp)
|
||||
/* B05774 8008E5D4 46040182 */ mul.s $f6, $f0, $f4
|
||||
/* B05778 8008E5D8 8FAE002C */ lw $t6, 0x2c($sp)
|
||||
/* B0577C 8008E5DC 460C6282 */ mul.s $f10, $f12, $f12
|
||||
/* B05780 8008E5E0 00000000 */ nop
|
||||
/* B05784 8008E5E4 460E7402 */ mul.s $f16, $f14, $f14
|
||||
/* B05788 8008E5E8 4600320D */ trunc.w.s $f8, $f6
|
||||
/* B0578C 8008E5EC 46105000 */ add.s $f0, $f10, $f16
|
||||
/* B05790 8008E5F0 440D4000 */ mfc1 $t5, $f8
|
||||
/* B05794 8008E5F4 00000000 */ nop
|
||||
/* B05798 8008E5F8 A5CD0000 */ sh $t5, ($t6)
|
||||
/* B0579C 8008E5FC 8FBF0014 */ lw $ra, 0x14($sp)
|
||||
.L8008E600:
|
||||
/* B057A0 8008E600 27BD0020 */ addiu $sp, $sp, 0x20
|
||||
/* B057A4 8008E604 03E00008 */ jr $ra
|
||||
/* B057A8 8008E608 00000000 */ nop
|
||||
|
||||
glabel func_8008E60C
|
||||
/* B057AC 8008E60C 10800022 */ beqz $a0, .L8008E698
|
||||
/* B057B0 8008E610 3C198016 */ lui $t9, %hi(gSegments)
|
||||
/* B057B4 8008E614 8C830004 */ lw $v1, 4($a0)
|
||||
/* B057B8 8008E618 908A0000 */ lbu $t2, ($a0)
|
||||
/* B057BC 8008E61C 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
|
||||
/* B057C0 8008E620 00037100 */ sll $t6, $v1, 4
|
||||
/* B057C4 8008E624 000E7F02 */ srl $t7, $t6, 0x1c
|
||||
/* B057C8 8008E628 000FC080 */ sll $t8, $t7, 2
|
||||
/* B057CC 8008E62C 0338C821 */ addu $t9, $t9, $t8
|
||||
/* B057D0 8008E630 8F396FA8 */ lw $t9, %lo(gSegments)($t9)
|
||||
/* B057D4 8008E634 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
|
||||
/* B057D8 8008E638 00614024 */ and $t0, $v1, $at
|
||||
/* B057DC 8008E63C 000A5880 */ sll $t3, $t2, 2
|
||||
/* B057E0 8008E640 016A5823 */ subu $t3, $t3, $t2
|
||||
/* B057E4 8008E644 000B5840 */ sll $t3, $t3, 1
|
||||
/* B057E8 8008E648 3C017FFF */ lui $at, (0x7FFFFFFA >> 16) # lui $at, 0x7fff
|
||||
/* B057EC 8008E64C 03284821 */ addu $t1, $t9, $t0
|
||||
/* B057F0 8008E650 012B1021 */ addu $v0, $t1, $t3
|
||||
/* B057F4 8008E654 3421FFFA */ ori $at, (0x7FFFFFFA & 0xFFFF) # ori $at, $at, 0xfffa
|
||||
/* B057F8 8008E658 00411021 */ addu $v0, $v0, $at
|
||||
/* B057FC 8008E65C 844C0000 */ lh $t4, ($v0)
|
||||
/* B05800 8008E660 448C2000 */ mtc1 $t4, $f4
|
||||
/* B05804 8008E664 00000000 */ nop
|
||||
/* B05808 8008E668 468021A0 */ cvt.s.w $f6, $f4
|
||||
/* B0580C 8008E66C E4A60000 */ swc1 $f6, ($a1)
|
||||
/* B05810 8008E670 844D0002 */ lh $t5, 2($v0)
|
||||
/* B05814 8008E674 448D4000 */ mtc1 $t5, $f8
|
||||
/* B05818 8008E678 00000000 */ nop
|
||||
/* B0581C 8008E67C 468042A0 */ cvt.s.w $f10, $f8
|
||||
/* B05820 8008E680 E4AA0004 */ swc1 $f10, 4($a1)
|
||||
/* B05824 8008E684 844E0004 */ lh $t6, 4($v0)
|
||||
/* B05828 8008E688 448E8000 */ mtc1 $t6, $f16
|
||||
/* B0582C 8008E68C 00000000 */ nop
|
||||
/* B05830 8008E690 468084A0 */ cvt.s.w $f18, $f16
|
||||
/* B05834 8008E694 E4B20008 */ swc1 $f18, 8($a1)
|
||||
.L8008E698:
|
||||
/* B05838 8008E698 03E00008 */ jr $ra
|
||||
/* B0583C 8008E69C 00000000 */ nop
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user