init
This commit is contained in:
453
cd_extra_main_source.asm
Normal file
453
cd_extra_main_source.asm
Normal file
@@ -0,0 +1,453 @@
|
||||
DrawCharLine_19000:
|
||||
addiu sp, sp, -0x50
|
||||
sw s6, 0x40(sp)
|
||||
move s6, a0
|
||||
sw s1, 0x2c(sp)
|
||||
move s1, a1
|
||||
sw s2, 0x30(sp)
|
||||
move s2, a2
|
||||
sw s3, 0x34(sp)
|
||||
|
||||
lui s3, 0x1f80
|
||||
ori s3, s3, 0x3d0
|
||||
|
||||
lui t0, 0xff
|
||||
ori t0, t0, 0xffff
|
||||
sw s0, 0x28(sp)
|
||||
andi s0, a3, 0xff
|
||||
move a0, s0
|
||||
|
||||
InitDMA:
|
||||
lui a3, 0x8008
|
||||
lui a2, 0xff00
|
||||
addiu t1, a3, -0x6c20
|
||||
lw v1, -0x6c20(a3)
|
||||
lbu a1, 0x60(sp)
|
||||
lui v0, 0x8000
|
||||
|
||||
sw ra, 0x4c(sp)
|
||||
sw s8, 0x48(sp)
|
||||
sw s7, 0x44(sp)
|
||||
sw s5, 0x3c(sp)
|
||||
sw s4, 0x38(sp)
|
||||
|
||||
and a2, v1, a2
|
||||
andi a1, a1, 0xff
|
||||
and v1, v1, t0
|
||||
or s4, v1, v0
|
||||
|
||||
lw v0, 0x4(t1)
|
||||
lw v1, 0x0(s4)
|
||||
addiu v0, v0, -0x1
|
||||
and v1, v1, t0
|
||||
or a2, a2, v1
|
||||
sw v0, 0x4(t1)
|
||||
|
||||
jal FUN_8001adc8
|
||||
sw a2, -0x6c20(a3)
|
||||
move a0, s4
|
||||
|
||||
sll a1, s1, 0x10
|
||||
sra a1, a1, 0x10
|
||||
sll a2, s2, 0x10
|
||||
sra a2, a2, 0x10
|
||||
jal FUN_80019d70
|
||||
move a3, s0
|
||||
|
||||
; Настройка GPU регистров
|
||||
SetupGPURegisters:
|
||||
lui a3, 0x1f80
|
||||
ori a3, a3, 0x348
|
||||
lui a2, 0x1f80
|
||||
ori a2, a2, 0x38c
|
||||
|
||||
li v0, 0x3
|
||||
sh v0, 0x1c(sp)
|
||||
li v0, 0x6
|
||||
li a1, 0xd
|
||||
lui a0, 0xa000
|
||||
|
||||
; GPU init in scratch
|
||||
ScratchCPUtoVRAMinit:
|
||||
sh v0, 0x1e(sp)
|
||||
sb a1, 0x3(a3)
|
||||
sw a0, 0x4(a3)
|
||||
|
||||
lhu t0, 0x9c(gp)
|
||||
lhu v0, 0x9e(gp)
|
||||
lui v1, 0x100
|
||||
|
||||
lui at, 0x1f80
|
||||
sw v1, 0x37c(at)
|
||||
|
||||
sb a1, 0x3(a2)
|
||||
sw a0, 0x4(a2)
|
||||
|
||||
calculateCoords:
|
||||
lh a1, 0x9c(gp)
|
||||
move s8, s2
|
||||
lui at, 0x1f80
|
||||
sw v1, 0x3c0(at)
|
||||
|
||||
sh t0, 0x18(sp)
|
||||
sh v0, 0x1a(sp)
|
||||
lw a0, 0x18(sp)
|
||||
addiu v0, v0, 0x6
|
||||
sh v0, 0x1a(sp)
|
||||
|
||||
lw v0, 0x1c(sp)
|
||||
lw v1, 0x18(sp)
|
||||
move t0, a1
|
||||
sw v0, 0xc(a3)
|
||||
sw v0, 0xc(a2)
|
||||
|
||||
lui v0, 0x8001
|
||||
sw a0, 0x8(a3)
|
||||
sw v1, 0x8(a2)
|
||||
|
||||
|
||||
;4bit pattern in scratch
|
||||
lui t8, 0x1f80
|
||||
ori t8, t8, 0x2e0
|
||||
addiu t7, v0, 0x3e8
|
||||
lwl t5, 0x3(t7)
|
||||
lwr t5, 0x0(t7)
|
||||
lwl t6, 0x7(t7)
|
||||
lwr t6, 0x4(t7)
|
||||
swl t5, 0x3(t8)
|
||||
swr t5, 0x0(t8)
|
||||
swl t6, 0x7(t8)
|
||||
swr t6, 0x4(t8)
|
||||
lwl t5, 0xb(t7)
|
||||
lwr t5, 0x8(t7)
|
||||
lwl t6, 0xf(t7)
|
||||
lwr t6, 0xc(t7)
|
||||
swl t5, 0xb(t8)
|
||||
swr t5, 0x8(t8)
|
||||
swl t6, 0xf(t8)
|
||||
swr t6, 0xc(t8)
|
||||
lwl t5, 0x13(t7)
|
||||
lwr t5, 0x10(t7)
|
||||
lwl t6, 0x17(t7)
|
||||
lwr t6, 0x14(t7)
|
||||
swl t5, 0x13(t8)
|
||||
swr t5, 0x10(t8)
|
||||
swl t6, 0x17(t8)
|
||||
swr t6, 0x14(t8)
|
||||
lwl t5, 0x1b(t7)
|
||||
lwr t5, 0x18(t7)
|
||||
lwl t6, 0x1f(t7)
|
||||
lwr t6, 0x1c(t7)
|
||||
swl t5, 0x1b(t8)
|
||||
swr t5, 0x18(t8)
|
||||
swl t6, 0x1f(t8)
|
||||
swr t6, 0x1c(t8)
|
||||
|
||||
; Copy Sprite DMA Command Forming
|
||||
li v0, 0x4
|
||||
sb v0, 0x3(s3)
|
||||
li v0, 0x64
|
||||
sb v0, 0x7(s3)
|
||||
li v0, 0x80
|
||||
sb v0, 0x4(s3)
|
||||
sb v0, 0x5(s3)
|
||||
sb v0, 0x6(s3)
|
||||
|
||||
bgez a1, LAB_800191fc
|
||||
sh s1, 0x20(sp)
|
||||
|
||||
AddOffsetX:
|
||||
addiu t0, a1, 0x3f
|
||||
|
||||
LAB_800191fc:
|
||||
sra v0, t0, 0x6
|
||||
sll v0, v0, 0x6
|
||||
subu v0, a1, v0
|
||||
lh v1, 0x9e(gp)
|
||||
sll v0, v0, 0x2
|
||||
sb v0, 0xc(s3)
|
||||
|
||||
bgez v1, LAB_80019220
|
||||
move v0, v1
|
||||
|
||||
AddOffsetY:
|
||||
addiu v0, v1, 0xff
|
||||
|
||||
LAB_80019220:
|
||||
sra v0, v0, 0x8
|
||||
sll v0, v0, 0x8
|
||||
subu v0, v1, v0
|
||||
sb v0, 0xd(s3)
|
||||
|
||||
lhu v1, 0xa4(gp)
|
||||
li v0, 0xc
|
||||
sh v0, 0x10(s3)
|
||||
sh v0, 0x12(s3)
|
||||
sh v1, 0xe(s3)
|
||||
|
||||
LoadCharacter:
|
||||
lhu a0, 0x0(s6)
|
||||
nop
|
||||
sltiu v0, a0, 0x1000
|
||||
beq v0, zero, LAB_80019518
|
||||
addiu s6, s6, 0x2
|
||||
|
||||
; Подготовка к отрисовке символа
|
||||
lui s1, 0x8008
|
||||
addiu s5, s1, -0x6c20
|
||||
lui s0, 0xff
|
||||
ori s0, s0, 0xffff
|
||||
lui s7, 0x8000
|
||||
|
||||
LAB_8001926c:
|
||||
jal MakeCharInScratch
|
||||
clear s2
|
||||
|
||||
; Настройка DMA для символа
|
||||
SetupDMAForChar:
|
||||
lw v0, 0xac(gp)
|
||||
lhu v1, 0x4(s4)
|
||||
addiu v0, v0, 0xc
|
||||
mult v1, v0
|
||||
lui t2, 0xff00
|
||||
move t4, s4
|
||||
addiu t3, sp, 0x10
|
||||
move t1, s4
|
||||
|
||||
sh s8, 0xa(s3)
|
||||
lhu t5, 0x20(sp)
|
||||
mflo t6
|
||||
addu v0, t5, t6
|
||||
sh v0, 0x8(s3)
|
||||
|
||||
LAB_800192a8:
|
||||
lw v0, -0x6c20(s1)
|
||||
nop
|
||||
and a0, v0, t2
|
||||
and v0, v0, s0
|
||||
or a1, v0, s7
|
||||
lw v0, 0x4(s5)
|
||||
lw v1, 0x0(a1)
|
||||
addiu v0, v0, -0x1
|
||||
and v1, v1, s0
|
||||
or a0, a0, v1
|
||||
sw v0, 0x4(s5)
|
||||
sw a0, -0x6c20(s1)
|
||||
|
||||
|
||||
lw t7, 0x0(s3)
|
||||
lw t8, 0x4(s3)
|
||||
lw t5, 0x8(s3)
|
||||
lw t6, 0xc(s3)
|
||||
|
||||
sw t7, 0x0(a1)
|
||||
sw t8, 0x4(a1)
|
||||
sw t5, 0x8(a1)
|
||||
sw t6, 0xc(a1)
|
||||
|
||||
lw t7, 0x10(s3)
|
||||
nop
|
||||
sw t7, 0x10(a1)
|
||||
|
||||
; Подготовка адресов в DMA-цепочке в RAM
|
||||
DMAcharAddres:
|
||||
lw v1, 0x18(t1)
|
||||
lw v0, 0x0(a1)
|
||||
lw v1, 0x0(v1)
|
||||
and v0, v0, t2
|
||||
and v1, v1, s0
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a1)
|
||||
|
||||
lw a0, 0x18(t1)
|
||||
nop
|
||||
lw v0, 0x0(a0)
|
||||
and v1, a1, s0
|
||||
and v0, v0, t2
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a0)
|
||||
sw a1, 0x18(t1)
|
||||
|
||||
|
||||
lhu v0, 0x4(t4)
|
||||
nop
|
||||
bne v0, zero, LAB_80019354
|
||||
clear t0
|
||||
|
||||
sw a1, 0x28(t1)
|
||||
|
||||
LAB_80019354:
|
||||
move a3, t0
|
||||
move a2, t3
|
||||
|
||||
LAB_8001935c:
|
||||
lui a1, 0x1f80
|
||||
lw v0, -0x6c20(s1)
|
||||
ori a1, a1, 0x348
|
||||
and v0, v0, s0
|
||||
or v0, v0, s7
|
||||
sw v0, 0x0(a2)
|
||||
lw v1, -0x6c20(s1)
|
||||
lw v0, 0x0(v0)
|
||||
lw a0, 0x4(s5)
|
||||
and v1, v1, t2
|
||||
and v0, v0, s0
|
||||
or v1, v1, v0
|
||||
addiu a0, a0, -0x1
|
||||
sw v1, -0x6c20(s1)
|
||||
sw a0, 0x4(s5)
|
||||
lw a0, 0x0(a2)
|
||||
addu v1, a3, a1
|
||||
or v0, v1, a0
|
||||
andi v0, v0, 0x3
|
||||
beq v0, zero, LAB_80019404
|
||||
addiu v0, v1, 0x30
|
||||
|
||||
LAB_800193b0:
|
||||
lwl t7, 0x3(v1)
|
||||
lwr t7, 0x0(v1)
|
||||
lwl t8, 0x7(v1)
|
||||
lwr t8, 0x4(v1)
|
||||
lwl t5, 0xb(v1)
|
||||
lwr t5, 0x8(v1)
|
||||
lwl t6, 0xf(v1)
|
||||
lwr t6, 0xc(v1)
|
||||
swl t7, 0x3(a0)
|
||||
swr t7, 0x0(a0)
|
||||
swl t8, 0x7(a0)
|
||||
swr t8, 0x4(a0)
|
||||
swl t5, 0xb(a0)
|
||||
swr t5, 0x8(a0)
|
||||
swl t6, 0xf(a0)
|
||||
swr t6, 0xc(a0)
|
||||
addiu v1, v1, 0x10
|
||||
bne v1, v0, LAB_800193b0
|
||||
addiu a0, a0, 0x10
|
||||
j LAB_80019430
|
||||
nop
|
||||
|
||||
LAB_80019404:
|
||||
lw t7, 0x0(v1)
|
||||
lw t8, 0x4(v1)
|
||||
lw t5, 0x8(v1)
|
||||
lw t6, 0xc(v1)
|
||||
sw t7, 0x0(a0)
|
||||
sw t8, 0x4(a0)
|
||||
sw t5, 0x8(a0)
|
||||
sw t6, 0xc(a0)
|
||||
addiu v1, v1, 0x10
|
||||
bne v1, v0, LAB_80019404
|
||||
addiu a0, a0, 0x10
|
||||
|
||||
LAB_80019430:
|
||||
lwl t7, 0x3(v1)
|
||||
lwr t7, 0x0(v1)
|
||||
lwl t8, 0x7(v1)
|
||||
lwr t8, 0x4(v1)
|
||||
swl t7, 0x3(a0)
|
||||
swr t7, 0x0(a0)
|
||||
swl t8, 0x7(a0)
|
||||
swr t8, 0x4(a0)
|
||||
addiu a3, a3, 0x44
|
||||
addiu t0, t0, 0x1
|
||||
sltiu v0, t0, 0x2
|
||||
bne v0, zero, LAB_8001935c
|
||||
addiu a2, a2, 0x4
|
||||
lw a0, 0x10(sp)
|
||||
lw v1, 0x18(t1)
|
||||
lw v0, 0x0(a0)
|
||||
lw v1, 0x0(v1)
|
||||
and v0, v0, t2
|
||||
and v1, v1, s0
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a0)
|
||||
lw a0, 0x18(t1)
|
||||
lw v1, 0x10(sp)
|
||||
lw v0, 0x0(a0)
|
||||
and v1, v1, s0
|
||||
and v0, v0, t2
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a0)
|
||||
lw a0, 0x14(sp)
|
||||
lw v1, 0x10(sp)
|
||||
lw v0, 0x0(a0)
|
||||
lw v1, 0x0(v1)
|
||||
and v0, v0, t2
|
||||
and v1, v1, s0
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a0)
|
||||
lw a0, 0x10(sp)
|
||||
lw v1, 0x14(sp)
|
||||
lw v0, 0x0(a0)
|
||||
and v1, v1, s0
|
||||
and v0, v0, t2
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a0)
|
||||
lw v0, 0x14(sp)
|
||||
addiu s2, s2, 0x1
|
||||
sw v0, 0x18(t1)
|
||||
sltiu v0, s2, 0x2
|
||||
bne v0, zero, LAB_800192a8
|
||||
addiu t1, t1, 0x4
|
||||
lhu v0, 0x4(s4)
|
||||
nop
|
||||
addiu v0, v0, 0x1
|
||||
sh v0, 0x4(s4)
|
||||
lhu a0, 0x0(s6)
|
||||
nop
|
||||
sltiu v0, a0, 0x1000
|
||||
bne v0, zero, LAB_8001926c
|
||||
addiu s6, s6, 0x2
|
||||
|
||||
LAB_80019518:
|
||||
clear s2
|
||||
lui s3, 0x8008
|
||||
addiu s5, s3, -0x6c20
|
||||
lui s1, 0xff
|
||||
ori s1, s1, 0xffff
|
||||
move s0, s4
|
||||
clear a1
|
||||
|
||||
LAB_80019534:
|
||||
li a2, 0x1
|
||||
addu s2, s2, a2
|
||||
lui v0, 0x8000
|
||||
lui a0, 0xff00
|
||||
lw v1, -0x6c20(s3)
|
||||
lw a3, 0xa0(gp)
|
||||
and v1, v1, s1
|
||||
or v1, v1, v0
|
||||
sw v1, 0x30(s0)
|
||||
|
||||
lw v0, -0x6c20(s3)
|
||||
lw v1, 0x0(v1)
|
||||
and v0, v0, a0
|
||||
and v1, v1, s1
|
||||
lw a0, 0x4(s5)
|
||||
or v0, v0, v1
|
||||
sw v0, -0x6c20(s3)
|
||||
addiu a0, a0, -0x1
|
||||
sw a0, 0x4(s5)
|
||||
|
||||
lw a0, 0x30(s0)
|
||||
jal SetDrawTPage
|
||||
addiu s0, s0, 0x4
|
||||
|
||||
sltiu v0, s2, 0x2
|
||||
bne v0, zero, LAB_80019534
|
||||
clear a1
|
||||
|
||||
move v0, s4
|
||||
lw ra, 0x4c(sp)
|
||||
lw s8, 0x48(sp)
|
||||
lw s7, 0x44(sp)
|
||||
lw s6, 0x40(sp)
|
||||
lw s5, 0x3c(sp)
|
||||
lw s4, 0x38(sp)
|
||||
lw s3, 0x34(sp)
|
||||
lw s2, 0x30(sp)
|
||||
lw s1, 0x2c(sp)
|
||||
lw s0, 0x28(sp)
|
||||
|
||||
jr ra
|
||||
addiu sp, sp, 0x50
|
||||
Reference in New Issue
Block a user