Switch project to use host's assembler and disassemble osSetIntMask

This commit is contained in:
Ryan Dwyer 2021-10-05 20:51:32 +10:00
parent 71e3d57f0e
commit ee1f882b5b
15 changed files with 221 additions and 183 deletions

View File

@ -7,12 +7,10 @@ QEMU_IRIX ?= tools/irix/qemu-irix
IRIX_ROOT ?= tools/irix/root
IDOCC ?= $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc
IDOAS ?= $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/as
################################################################################
QEMUCC = $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc
QEMUAS = $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/as
export ROMID
@ -46,6 +44,11 @@ ifeq ($(ROMID),jpn-final)
VERSION=5
endif
DEFINES := VERSION=$(VERSION) NTSC=$(NTSC) PAL=$(PAL) JPN=$(JPN) PIRACYCHECKS=$(PIRACYCHECKS)
C_DEFINES := $(foreach d,$(DEFINES),-D$(d))
AS_DEFINES := $(foreach d,$(DEFINES),--defsym $(d)) --defsym _LANGUAGE_ASSEMBLY=1
A_DIR := src/assets/$(ROMID)
B_DIR := build/$(ROMID)
E_DIR := extracted/$(ROMID)
@ -62,6 +65,8 @@ else
TOOLCHAIN := mips-elf
endif
AS := $(TOOLCHAIN)-as
MIPSISET := -mips2 -32
OPT_LVL := -O2
LOOPUNROLL := -Wo,-loopunroll,0
@ -153,11 +158,7 @@ ifeq ($(ROMID), ntsc-beta)
$(B_DIR)/lib/ultra/io/pfsisplug.o: OPT_LVL := -O1
endif
CFLAGS = -DVERSION=$(VERSION) \
-DNTSC=$(NTSC) \
-DPAL=$(PAL) \
-DJPN=$(JPN) \
-DPIRACYCHECKS=$(PIRACYCHECKS) \
CFLAGS = $(C_DEFINES) \
$(LOOPUNROLL) \
-Wab,-r4300_mul \
-non_shared \
@ -171,6 +172,8 @@ CFLAGS = -DVERSION=$(VERSION) \
$(OPT_LVL) \
$(MIPSISET)
ASFLAGS = -march=vr4300 -mabi=32 -Isrc/include $(AS_DEFINES)
C_FILES := $(shell find src/lib src/game src/inflate -name '*.c')
S_FILES := $(shell find src/lib src/game -name '*.s')
@ -518,7 +521,7 @@ $(B_DIR)/%.o: src/%.c $(ASSETMGR_O_FILES)
$(B_DIR)/%.o: src/%.s
@mkdir -p $(dir $@)
$(IDOAS) $(CFLAGS) $< -o $@
cpp -P -Wno-trigraphs -I src/include $(C_DEFINES) -D_LANGUAGE_ASSEMBLY -D_MIPSEB $< | $(AS) $(ASFLAGS) -o $@
$(B_DIR)/assets/%.o: $(A_DIR)/%.c
@mkdir -p $(dir $@)

View File

@ -1,7 +1,4 @@
# Assembly Macros
.macro glabel label
.global \label
\label:
.endm

View File

@ -1,41 +1,36 @@
#include "asm_helper.h"
#include "macros.inc"
.set noat
.set noreorder
.text
LEAF(segGetDataStart)
lui v0, %hi(_dataSegmentStart)
jr ra
addiu v0, v0, %lo(_dataSegmentStart)
END(segGetDataStart)
.section .text
LEAF(segGetDatazipRomStart)
lui v0, %hi(_datazipSegmentRomStart)
jr ra
addiu v0, v0, %lo(_datazipSegmentRomStart)
END(segGetDatazipRomStart)
glabel segGetDataStart
lui $v0, %hi(_dataSegmentStart)
jr $ra
addiu $v0, $v0, %lo(_dataSegmentStart)
LEAF(segGetInflateRomStart)
lui v0, %hi(_inflateSegmentRomStart)
jr ra
addiu v0, v0, %lo(_inflateSegmentRomStart)
END(segGetInflateRomStart)
glabel segGetDatazipRomStart
lui $v0, %hi(_datazipSegmentRomStart)
jr $ra
addiu $v0, $v0, %lo(_datazipSegmentRomStart)
LEAF(segGetInflateRomStart2)
lui v0, %hi(_inflateSegmentRomStart)
jr ra
addiu v0, v0, %lo(_inflateSegmentRomStart)
END(segGetInflateRomStart2)
glabel segGetInflateRomStart
lui $v0, %hi(_inflateSegmentRomStart)
jr $ra
addiu $v0, $v0, %lo(_inflateSegmentRomStart)
LEAF(segGetGamezipsRomStart)
lui v0, %hi(_gamezipSegmentRomStart)
jr ra
addiu v0, v0, %lo(_gamezipSegmentRomStart)
END(segGetGamezipsRomStart)
glabel segGetInflateRomStart2
lui $v0, %hi(_inflateSegmentRomStart)
jr $ra
addiu $v0, $v0, %lo(_inflateSegmentRomStart)
LEAF(bootInflate)
lui a3, %hi(inflate1173)
addiu a3, a3, %lo(inflate1173)
jr a3
glabel segGetGamezipsRomStart
lui $v0, %hi(_gamezipSegmentRomStart)
jr $ra
addiu $v0, $v0, %lo(_gamezipSegmentRomStart)
glabel bootInflate
lui $a3, %hi(inflate1173)
addiu $a3, $a3, %lo(inflate1173)
jr $a3
nop
END(bootInflate)

View File

@ -1,7 +1,7 @@
#include "asm_helper.h"
#include "macros.inc"
.text
LEAF(sqrtf)
.section .text
glabel sqrtf
sqrt.s $f0, $f12
jr ra
END(sqrtf)
jr $ra

View File

@ -1,7 +1,8 @@
#include "asm_helper.h"
#include "macros.inc"
.text
LEAF(__osGetCause)
STAY2(mfc0 v0, C0_CAUSE)
jr ra
END(__osGetCause)
.section .text
glabel __osGetCause
STAY2(mfc0 $v0, C0_CAUSE)
jr $ra

View File

@ -1,7 +1,8 @@
#include "asm_helper.h"
#include "macros.inc"
.text
LEAF(osGetCount)
STAY2(mfc0 v0, C0_COUNT)
jr ra
END(osGetCount)
.section .text
glabel osGetCount
STAY2(mfc0 $v0, C0_COUNT)
jr $ra

View File

@ -1,7 +1,8 @@
#include "asm_helper.h"
#include "macros.inc"
.text
LEAF(__osGetFpcCsr)
STAY2(cfc1 v0, $31)
jr ra
END(__osGetFpcCsr)
.section .text
glabel __osGetFpcCsr
STAY2(cfc1 $v0, $31)
jr $ra

View File

@ -1,7 +1,8 @@
#include "asm_helper.h"
#include "macros.inc"
.text
LEAF(__osGetSR)
STAY2(mfc0 v0, C0_SR)
jr ra
END(__osGetSR)
.section .text
glabel __osGetSR
STAY2(mfc0 $v0, C0_SR)
jr $ra

View File

@ -1,29 +1,30 @@
#include "asm_helper.h"
#include "macros.inc"
.set noat
.set noreorder
.text
LEAF(osMapTLBRdb)
mfc0 t0, C0_ENTRYHI
li t1, 1
mtc0 t1, C0_INX
mtc0 zero, C0_PAGEMASK
li t2, TLBLO_UNCACHED | TLBLO_D | TLBLO_V | TLBLO_G
li t1, K2BASE
mtc0 t1, C0_ENTRYHI
li t1, KUSIZE
srl t3, t1,TLBLO_PFNSHIFT
or t3, t3,t2
mtc0 t3, C0_ENTRYLO0
li t1, TLBLO_G
mtc0 t1, C0_ENTRYLO1
.section .text
glabel osMapTLBRdb
mfc0 $t0, C0_ENTRYHI
li $t1, 1
mtc0 $t1, C0_INX
mtc0 $zero, C0_PAGEMASK
li $t2, TLBLO_UNCACHED | TLBLO_D | TLBLO_V | TLBLO_G
li $t1, K2BASE
mtc0 $t1, C0_ENTRYHI
li $t1, KUSIZE
srl $t3, $t1, TLBLO_PFNSHIFT
or $t3, $t3, $t2
mtc0 $t3, C0_ENTRYLO0
li $t1, TLBLO_G
mtc0 $t1, C0_ENTRYLO1
nop
tlbwi
nop
nop
nop
nop
mtc0 t0, C0_ENTRYHI
jr ra
mtc0 $t0, C0_ENTRYHI
jr $ra
nop
END(osMapTLBRdb)

View File

@ -1,9 +1,10 @@
#include "asm_helper.h"
#include "macros.inc"
.set noreorder
.text
LEAF(__osSetCompare)
mtc0 a0, C0_COMPARE
jr ra
.section .text
glabel __osSetCompare
mtc0 $a0, C0_COMPARE
jr $ra
nop
END(__osSetCompare)

View File

@ -1,11 +1,10 @@
#include "asm_helper.h"
#include "macros.inc"
.set noreorder
.text
LEAF(__osSetFpcCsr)
cfc1 v0, $31
ctc1 a0, $31
jr ra
glabel __osSetFpcCsr
cfc1 $v0, $31
ctc1 $a0, $31
jr $ra
nop
END(__osSetFpcCsr)

View File

@ -1,80 +0,0 @@
#include <libultra_internal.h>
#include "data.h"
const u32 var70059e30[] = {0x05550556};
const u32 var70059e34[] = {0x0559055a};
const u32 var70059e38[] = {0x05650566};
const u32 var70059e3c[] = {0x0569056a};
const u32 var70059e40[] = {0x05950596};
const u32 var70059e44[] = {0x0599059a};
const u32 var70059e48[] = {0x05a505a6};
const u32 var70059e4c[] = {0x05a905aa};
const u32 var70059e50[] = {0x06550656};
const u32 var70059e54[] = {0x0659065a};
const u32 var70059e58[] = {0x06650666};
const u32 var70059e5c[] = {0x0669066a};
const u32 var70059e60[] = {0x06950696};
const u32 var70059e64[] = {0x0699069a};
const u32 var70059e68[] = {0x06a506a6};
const u32 var70059e6c[] = {0x06a906aa};
const u32 var70059e70[] = {0x09550956};
const u32 var70059e74[] = {0x0959095a};
const u32 var70059e78[] = {0x09650966};
const u32 var70059e7c[] = {0x0969096a};
const u32 var70059e80[] = {0x09950996};
const u32 var70059e84[] = {0x0999099a};
const u32 var70059e88[] = {0x09a509a6};
const u32 var70059e8c[] = {0x09a909aa};
const u32 var70059e90[] = {0x0a550a56};
const u32 var70059e94[] = {0x0a590a5a};
const u32 var70059e98[] = {0x0a650a66};
const u32 var70059e9c[] = {0x0a690a6a};
const u32 var70059ea0[] = {0x0a950a96};
const u32 var70059ea4[] = {0x0a990a9a};
const u32 var70059ea8[] = {0x0aa50aa6};
const u32 var70059eac[] = {0x0aa90aaa};
GLOBAL_ASM(
glabel osSetIntMask
/* 48650: 400c6000 */ mfc0 $t4,$12
/* 48654: 3182ff01 */ andi $v0,$t4,0xff01
/* 48658: 3c088006 */ lui $t0,%hi(__osGlobalIntMask)
/* 4865c: 2508cf70 */ addiu $t0,$t0,%lo(__osGlobalIntMask)
/* 48660: 8d0b0000 */ lw $t3,0x0($t0)
/* 48664: 2401ffff */ addiu $at,$zero,-1
/* 48668: 01614026 */ xor $t0,$t3,$at
/* 4866c: 3108ff00 */ andi $t0,$t0,0xff00
/* 48670: 00481025 */ or $v0,$v0,$t0
/* 48674: 3c0aa430 */ lui $t2,0xa430
/* 48678: 8d4a000c */ lw $t2,0xc($t2)
/* 4867c: 11400005 */ beqz $t2,.L00048694
/* 48680: 000b4c02 */ srl $t1,$t3,0x10
/* 48684: 2401ffff */ addiu $at,$zero,-1
/* 48688: 01214826 */ xor $t1,$t1,$at
/* 4868c: 3129003f */ andi $t1,$t1,0x3f
/* 48690: 01495025 */ or $t2,$t2,$t1
.L00048694:
/* 48694: 000a5400 */ sll $t2,$t2,0x10
/* 48698: 004a1025 */ or $v0,$v0,$t2
/* 4869c: 3c01003f */ lui $at,0x3f
/* 486a0: 00814024 */ and $t0,$a0,$at
/* 486a4: 010b4024 */ and $t0,$t0,$t3
/* 486a8: 000843c2 */ srl $t0,$t0,0xf
/* 486ac: 3c0a7006 */ lui $t2,%hi(var70059e30)
/* 486b0: 01485021 */ addu $t2,$t2,$t0
/* 486b4: 954a9e30 */ lhu $t2,%lo(var70059e30)($t2)
/* 486b8: 3c01a430 */ lui $at,0xa430
/* 486bc: ac2a000c */ sw $t2,0xc($at)
/* 486c0: 3088ff01 */ andi $t0,$a0,0xff01
/* 486c4: 3169ff00 */ andi $t1,$t3,0xff00
/* 486c8: 01094024 */ and $t0,$t0,$t1
/* 486cc: 3c01ffff */ lui $at,0xffff
/* 486d0: 342100ff */ ori $at,$at,0xff
/* 486d4: 01816024 */ and $t4,$t4,$at
/* 486d8: 01886025 */ or $t4,$t4,$t0
/* 486dc: 408c6000 */ mtc0 $t4,$12
/* 486e0: 00000000 */ nop
/* 486e4: 00000000 */ nop
/* 486e8: 03e00008 */ jr $ra
/* 486ec: 00000000 */ nop
);

View File

@ -0,0 +1,117 @@
#include "macros.inc"
.set noat
.set noreorder
.section .text
glabel osSetIntMask
mfc0 $t4, $12
andi $v0, $t4, 0xff01
lui $t0, %hi(__osGlobalIntMask)
addiu $t0, $t0, %lo(__osGlobalIntMask)
lw $t3, 0x0($t0)
addiu $at, $zero, -1
xor $t0, $t3, $at
andi $t0, $t0, 0xff00
or $v0, $v0, $t0
lui $t2, 0xa430
lw $t2, 0xc($t2)
beqz $t2, .L00048694
srl $t1, $t3, 0x10
addiu $at, $zero, -1
xor $t1, $t1, $at
andi $t1, $t1, 0x3f
or $t2, $t2, $t1
.L00048694:
sll $t2, $t2, 0x10
or $v0, $v0, $t2
lui $at, 0x3f
and $t0, $a0, $at
and $t0, $t0, $t3
srl $t0, $t0, 0xf
lui $t2, %hi(var70059e30)
addu $t2, $t2, $t0
lhu $t2, %lo(var70059e30)($t2)
lui $at, 0xa430
sw $t2, 0xc($at)
andi $t0, $a0, 0xff01
andi $t1, $t3, 0xff00
and $t0, $t0, $t1
lui $at, 0xffff
ori $at, $at, 0xff
and $t4, $t4, $at
or $t4, $t4, $t0
mtc0 $t4, $12
nop
nop
jr $ra
nop
.section .rodata
glabel var70059e30
.half 0x0555
.half 0x0556
.half 0x0559
.half 0x055a
.half 0x0565
.half 0x0566
.half 0x0569
.half 0x056a
.half 0x0595
.half 0x0596
.half 0x0599
.half 0x059a
.half 0x05a5
.half 0x05a6
.half 0x05a9
.half 0x05aa
.half 0x0655
.half 0x0656
.half 0x0659
.half 0x065a
.half 0x0665
.half 0x0666
.half 0x0669
.half 0x066a
.half 0x0695
.half 0x0696
.half 0x0699
.half 0x069a
.half 0x06a5
.half 0x06a6
.half 0x06a9
.half 0x06aa
.half 0x0955
.half 0x0956
.half 0x0959
.half 0x095a
.half 0x0965
.half 0x0966
.half 0x0969
.half 0x096a
.half 0x0995
.half 0x0996
.half 0x0999
.half 0x099a
.half 0x09a5
.half 0x09a6
.half 0x09a9
.half 0x09aa
.half 0x0a55
.half 0x0a56
.half 0x0a59
.half 0x0a5a
.half 0x0a65
.half 0x0a66
.half 0x0a69
.half 0x0a6a
.half 0x0a95
.half 0x0a96
.half 0x0a99
.half 0x0a9a
.half 0x0aa5
.half 0x0aa6
.half 0x0aa9
.half 0x0aaa

View File

@ -1,10 +1,11 @@
#include "asm_helper.h"
#include "macros.inc"
.set noreorder
.text
LEAF(__osSetSR)
mtc0 a0, C0_SR
.section .text
glabel __osSetSR
mtc0 $a0, C0_SR
nop
jr ra
jr $ra
nop
END(__osSetSR)

View File

@ -1,5 +1,5 @@
.set noat
.set noreorder
.set gp=64
.include "macros.inc"
.include "src/include/macros.inc"