Files
Persona2-PSX-asm-sources/3_CD_EXTRA/cd_extra_main_source.asm
2025-11-04 23:06:09 +05:00

453 lines
10 KiB
NASM

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