EP: text print fixes
This commit is contained in:
@@ -29,9 +29,9 @@
|
||||
ExternalPrint:
|
||||
;;;;;;;text routing test routine
|
||||
; move r3,s3
|
||||
; move s3,r4
|
||||
; move s3,a0
|
||||
|
||||
lhu v0,0x0(a0) ;read half 2 bytes of text (r4, not s1+0c!!!!!)
|
||||
lhu v0,0x0(a0) ;read half 2 bytes of text (a0, not s1+0c!!!!!)
|
||||
nop
|
||||
; move s3,r3
|
||||
srl v1,v0,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
@@ -44,11 +44,11 @@ ExternalPrint:
|
||||
MyPrintLineRoutine:
|
||||
addiu sp,sp,-0x50
|
||||
sw s4,0x38(sp)
|
||||
move s4,r4 ;textReadAddr - S4 (NOT S6!)
|
||||
move s4,a0 ;textReadAddr - S4 (NOT S6!)
|
||||
sw s0,0x28(sp)
|
||||
move s0,r5
|
||||
move s0,a1
|
||||
sw s1,0x2c(sp)
|
||||
move s1,r6
|
||||
move s1,a2
|
||||
sw s3,0x34(sp)
|
||||
|
||||
; NEW COMMAND OBRAB
|
||||
@@ -71,13 +71,13 @@ MyPrintLineRoutine:
|
||||
ori t0,t0,0xffff ;t0 = 00FFFFFF
|
||||
|
||||
;sw s0, 0x28(sp) ;save s0 in stack
|
||||
andi r4,r7,0xff ;s0 - cut textMode (color & shadow)
|
||||
lui r7, 0x8008 ;r7 = 8008 0000
|
||||
lui r6, 0xff00 ;r6 = FF000000
|
||||
andi a0,a3,0xff ;s0 - cut textMode (color & shadow)
|
||||
lui a3, 0x8008 ;a3 = 8008 0000
|
||||
lui a2, 0xff00 ;a2 = FF000000
|
||||
|
||||
addiu t1,r7,-0x31a8 ;t1 = 8007b6d0 - new free CHAIN Here
|
||||
lw v1, -0x31a8(r7) ;r3/v1 = load freeChain
|
||||
lbu r5,0x60(sp) ;shadow flag from stack to r5
|
||||
addiu t1,a3,-0x31a8 ;t1 = 8007b6d0 - new free CHAIN Here
|
||||
lw v1, -0x31a8(a3) ;r3/v1 = load freeChain
|
||||
lbu a1,0x60(sp) ;shadow flag from stack to a1
|
||||
lui v0,0x8000 ;r2 = 8000 0000
|
||||
sw ra,0x48(sp)
|
||||
sw s7,0x44(sp)
|
||||
@@ -86,32 +86,32 @@ MyPrintLineRoutine:
|
||||
sw s2,0x30(sp)
|
||||
|
||||
;;init chains
|
||||
and r6,v1,r6 ;r6 = r3 & ff000000 = FF000000
|
||||
andi r5,r5,0xff ;clean text mode (color/shadow)
|
||||
and a2,v1,a2 ;a2 = r3 & ff000000 = FF000000
|
||||
andi a1,a1,0xff ;clean text mode (color/shadow)
|
||||
and v1,v1,t0 ;r3 & 00ffffff
|
||||
or s5,v1,v0 ;r20 - 80...+r3 = freeChain Main Addr
|
||||
lw v0,0x4(t1) ;Load DMA Counter
|
||||
lw v1,0x0(s5) ;r3 = next free Chain
|
||||
addiu v0,v0,-0x1 ;DMA Counter-1
|
||||
and v1,v1,t0 ; r3 & r8 (00ffffff) cut f.byte
|
||||
or r6,r6,v1 ; r6 | r3 = ff+r3 = next free Chain (FF...) +
|
||||
or a2,a2,v1 ; a2 | r3 = ff+r3 = next free Chain (FF...) +
|
||||
sw v0,0x4(t1) ;save DMACounter
|
||||
jal storeColor
|
||||
sw r6,-0x31a8(r7) ;SAVE next free Chain (FF...) to 7b6d0
|
||||
move r4,s5 ;currentChainAddr
|
||||
sll r5,s0,0x10 ;r5 = X<<10h (003A0000)
|
||||
sra r5,r5,0x10 ; r5=r5>>10h 0000003A
|
||||
sll r6,s1,0x10 ; r6 = Y << 10h
|
||||
sw a2,-0x31a8(a3) ;SAVE next free Chain (FF...) to 7b6d0
|
||||
move a0,s5 ;currentChainAddr
|
||||
sll a1,s0,0x10 ;a1 = X<<10h (003A0000)
|
||||
sra a1,a1,0x10 ; a1=a1>>10h 0000003A
|
||||
sll a2,s1,0x10 ; a2 = Y << 10h
|
||||
jal initCopyCharChain ;init line chains
|
||||
sra r6,r6,0x10 ;r6>>10h - 100% clean coords
|
||||
;move r7,s0 ;store textMode _THIS IS FOR INIT
|
||||
sra a2,a2,0x10 ;a2>>10h - 100% clean coords
|
||||
;move a3,s0 ;store textMode _THIS IS FOR INIT
|
||||
|
||||
;;;;init ScratchPad
|
||||
;;;;;;;;;;;;;;;;;; CPU TO VRAM
|
||||
lui r6,0x1f80
|
||||
ori r6,r6,0x348 ;r7 = FIRST CHAR START
|
||||
;lui r6,0x1f80 ;LOWER HALF OF CHAR - DONT NEED!!!
|
||||
;ori r6,r6,0x38c
|
||||
lui a2,0x1f80
|
||||
ori a2,a2,0x348 ;a3 = FIRST CHAR START
|
||||
;lui a2,0x1f80 ;LOWER HALF OF CHAR - DONT NEED!!!
|
||||
;ori a2,a2,0x38c
|
||||
|
||||
|
||||
;4bit table pattern
|
||||
@@ -121,8 +121,8 @@ MyPrintLineRoutine:
|
||||
li v0,0x2
|
||||
sh v0,0x1c(sp)
|
||||
li v0,0xc
|
||||
li r4,0x10 ;COMMANDS IN CHAR FORMING CHAIN?
|
||||
lui r3,0xa000 ;r4 = a000 0000
|
||||
li a0,0x10 ;COMMANDS IN CHAR FORMING CHAIN?
|
||||
lui r3,0xa000 ;a0 = a000 0000
|
||||
sh v0,0x1e(sp) ; SAVE 000C0002 TO STACK+1c
|
||||
|
||||
|
||||
@@ -130,8 +130,8 @@ MyPrintLineRoutine:
|
||||
; INIT CHAR
|
||||
lui v0,0x100 ;FLUSH CACHE 01 00 00 00 =>DAT_1f80034b
|
||||
|
||||
sb r4,0x3(r6) ;SAVE 0d 00 00 00 =>DAT_1f80034c cmdcount\
|
||||
sw r3,0x4(r6); SAVE a000000 TO DAT_1f80034c
|
||||
sb a0,0x3(a2) ;SAVE 0d 00 00 00 =>DAT_1f80034c cmdcount\
|
||||
sw r3,0x4(a2); SAVE a000000 TO DAT_1f80034c
|
||||
|
||||
|
||||
lui at,0x1f80 ;scrathcpadStart
|
||||
@@ -144,7 +144,7 @@ MyPrintLineRoutine:
|
||||
li v0,0x64
|
||||
sb v0,0x7(s3) ;sb 64 to 3d7 (copySpriteCommand)
|
||||
|
||||
lhu r4,0x98(gp) ;0310 ;Load x(0310) to r8
|
||||
lhu a0,0x98(gp) ;0310 ;Load x(0310) to r8
|
||||
lhu r3,0x9a(gp) ;01f0 ;Load y(01F0)to r2
|
||||
;lui v1,0x100 ;0100 0000 flushcache
|
||||
|
||||
@@ -159,27 +159,27 @@ setY1:
|
||||
|
||||
lw v0,0x1c(sp) ; r2 = 000c0002 from stack
|
||||
|
||||
lh r7,0x98(gp) ;for futher sprite X calc
|
||||
sh r4,0x18(sp)
|
||||
lh a3,0x98(gp) ;for futher sprite X calc
|
||||
sh a0,0x18(sp)
|
||||
sh r3,0x1a(sp) ;SAVE CONCAT 013001f0 to stack
|
||||
|
||||
lw r4,0x18(sp) ;LOAD 013001f0 from stack
|
||||
lw a0,0x18(sp) ;LOAD 013001f0 from stack
|
||||
;lw v1,0x18(sp)
|
||||
|
||||
move t0,r7
|
||||
sw r4,0x8(r6) ;DAT_1f800350 load r4 (upper coord 01f6) to r7+8 (DMA)
|
||||
sw v0,0xc(r6) ;=>DAT_1f800354 r2 - 000c0002 to 1st char (to r7+0c)
|
||||
move t0,a3
|
||||
sw a0,0x8(a2) ;DAT_1f800350 load a0 (upper coord 01f6) to a3+8 (DMA)
|
||||
sw v0,0xc(a2) ;=>DAT_1f800354 r2 - 000c0002 to 1st char (to a3+0c)
|
||||
|
||||
bgez r7,LAB_800194fc
|
||||
bgez a3,LAB_800194fc
|
||||
SetX1:
|
||||
sh s1,0x20(sp) ;store X half to sp+10 !!!!!!!!!!!!!!!!!
|
||||
addiu t0,r7,0x3f
|
||||
addiu t0,a3,0x3f
|
||||
|
||||
|
||||
LAB_800194fc: ;decoding coords for source sprite
|
||||
sra v0,t0,0x6 ;r2 = r6 >> 6 = 4
|
||||
sra v0,t0,0x6 ;r2 = a2 >> 6 = 4
|
||||
sll v0,v0,0x6 ;r2 << 6 = 100
|
||||
subu v0,r7,v0 ;r2 = r6 - r2 = 30
|
||||
subu v0,a3,v0 ;r2 = a2 - r2 = 30
|
||||
lh v1,0x9a(gp) ;r3 = load Y half from mem
|
||||
sll v0,v0,0x2 ;r2 << 2
|
||||
sb v0,0xc(s3) ; >DAT_1f8003dc ;STORE CHAR SPRITE X BYTE
|
||||
@@ -208,7 +208,7 @@ LAB_80019520:
|
||||
|
||||
|
||||
|
||||
lbu r4,0x0(s4) ;MAIN READ CHAR COMMAND - Load Byte Unsigned
|
||||
lbu a0,0x0(s4) ;MAIN READ CHAR COMMAND - Load Byte Unsigned
|
||||
nop
|
||||
addiu s4,s4,0x1 ;Shift read address +1 byte
|
||||
|
||||
@@ -220,12 +220,12 @@ LAB_80019520:
|
||||
ori s0,s0,0xffff ;s0 = 00 ff ff ff
|
||||
lui s1,0x8000 ;r3 = 8000 0000
|
||||
NextChar:
|
||||
addiu r4,r4,-0x20 ;Shift unprintable symbols
|
||||
addiu a0,a0,-0x20 ;Shift unprintable symbols
|
||||
|
||||
|
||||
;ОБРАБОТКА ПРОБЕЛОВ
|
||||
|
||||
bne r4,zero,SpaceCheckBranch ;Если не пробел - перепрыгиваем сразу
|
||||
bne a0,zero,SpaceCheckBranch ;Если не пробел - перепрыгиваем сразу
|
||||
nop
|
||||
|
||||
lui t2,MyAddr
|
||||
@@ -240,7 +240,7 @@ NextChar:
|
||||
;ITS A SPACE!!!!
|
||||
sh v0,-0xE(t2) ;Save charcount += 1
|
||||
nop
|
||||
lbu r4,0x0(s4) ;LOAD NEXT CHAR
|
||||
lbu a0,0x0(s4) ;LOAD NEXT CHAR
|
||||
;j SpaceJump
|
||||
|
||||
;X COORD SHIFT (+6)
|
||||
@@ -287,16 +287,16 @@ PageLoop:
|
||||
;MAKING COPYSPRITE CHAIN
|
||||
lw v0,-0x3198(s6); r2 = *freeChainAddr
|
||||
nop
|
||||
and r4,v0,t2 ; r4 = r2 & ff00..
|
||||
and a0,v0,t2 ; a0 = r2 & ff00..
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF
|
||||
or r5,v0,s1 ; r5 = r2 or r23 (80000000) = 801ADF10
|
||||
or a1,v0,s1 ; a1 = r2 or r23 (80000000) = 801ADF10
|
||||
lw v0,0x4(s7) ; CmdCounter r2 = *7b6d0+4 = 705
|
||||
lw v1,0x0(r5) ; r3 = New Free ChainAddr
|
||||
lw v1,0x0(a1) ; r3 = New Free ChainAddr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF cut begin byte
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
or a0,a0,v1 ; a0 & r3 = ff......
|
||||
sw v0,0x4(s7) ; CmdCounter save DMA Counter
|
||||
sw r4,-0x3198(s6); freeChain save new freeChain
|
||||
sw a0,-0x3198(s6); freeChain save new freeChain
|
||||
|
||||
CopyCmdFromScratch:
|
||||
; CopyScriptChain copy from scratch
|
||||
@@ -304,35 +304,35 @@ CopyCmdFromScratch:
|
||||
lw t7,0x4(s3) ;>DAT_1f8003d4 r15 = 64808080 - CopySpriteCmd
|
||||
lw t8,0x8(s3) ;>DAT_1f8003d8 r24 = 001500d1 - xy screen coords
|
||||
lw t5,0xc(s3); >DAT_1f8003dc r13 = 7fd3f0c0 (CLUT & tex coord page)
|
||||
sw t9,0x0(r5) ; *r5 = r14
|
||||
sw t7,0x4(r5) ; *r5+4 = r15
|
||||
sw t8,0x8(r5) ; *r5+8 = r24
|
||||
sw t5,0xc(r5) ; *r5+c = r13
|
||||
sw t9,0x0(a1) ; *a1 = r14
|
||||
sw t7,0x4(a1) ; *a1+4 = r15
|
||||
sw t8,0x8(a1) ; *a1+8 = r24
|
||||
sw t5,0xc(a1) ; *a1+c = r13
|
||||
lw t9,0x10(s3);>DAT_1f8003e0 r14 = 000c0008 - spritesize after copy
|
||||
nop
|
||||
sw t9,0x10(r5) ; *r5+10 = r14 - LAST COMMAND SAVE
|
||||
sw t9,0x10(a1) ; *a1+10 = r14 - LAST COMMAND SAVE
|
||||
; t1 = t0 (small) !!!!
|
||||
; t4 = t1 (small) !!!!
|
||||
lw v1,0x18(t1) ;r3 = *r9+18 (next param???)
|
||||
lw v0,0x0(r5) ; r2 = *cur New Chainaddr
|
||||
lw v0,0x0(a1) ; r2 = *cur New Chainaddr
|
||||
lw v1,0x0(v1) ; r3 = *r3
|
||||
and v0,v0,t2 ; r2 & ff000000
|
||||
and v1,v1,s0 ;r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 04FFFFFF - commands with FFFFFF
|
||||
sw v0,0x0(r5) ; *curChainAddr r5 = r2 (upd ..04 with ..FF04)
|
||||
lw r4,0x18(t1) ; r4 = *r8+18 (first chain addr?)
|
||||
sw v0,0x0(a1) ; *curChainAddr a1 = r2 (upd ..04 with ..FF04)
|
||||
lw a0,0x18(t1) ; a0 = *r8+18 (first chain addr?)
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 FIRST CHAIN LINK TO NEXT??
|
||||
and v1,r5,s0 ; r3 = r5 (cur chain) & 00FFFFFF
|
||||
lw v0,0x0(a0) ; r2 = *a0 FIRST CHAIN LINK TO NEXT??
|
||||
and v1,a1,s0 ; r3 = a1 (cur chain) & 00FFFFFF
|
||||
and v0,v0,t2 ; r2 & FF000000
|
||||
or v0,v0,v1 ; r2 | r3 = last chain adr w 10&....
|
||||
sw v0,0x0(r4) ; *r4 = r2 FIRST CHAIN NEXT ADDR???
|
||||
sw r5,0x18(t1) ;t0->t1 ; r5 = *r8+18 curChainAddr
|
||||
sw v0,0x0(a0) ; *a0 = r2 FIRST CHAIN NEXT ADDR???
|
||||
sw a1,0x18(t1) ;t0->t1 ; a1 = *r8+18 curChainAddr
|
||||
lhu v0,0x4(t6) ;t1->t6 r2 = half (DMA params)+4 (charCounter)
|
||||
nop
|
||||
bne v0,zero,NotFirstChar ; if CharCount<>0 then Goto...
|
||||
nop ;clear t0
|
||||
sw r5,0x28(t1) ;t0->t1 ;*curChain+28 = Set first Char Chain
|
||||
sw a1,0x28(t1) ;t0->t1 ;*curChain+28 = Set first Char Chain
|
||||
sw t8,0xc(t6) ;t1->t6 ; Params+0c = save STORE COORDS to params
|
||||
;sh s2,0xe(t4) ;t1->t6 ;Params+0e = save half Y
|
||||
NotFirstChar:
|
||||
@@ -341,26 +341,26 @@ NotFirstChar:
|
||||
; ori t3,t3,0x388 ; Scratch DMAChain CharEndAddr
|
||||
|
||||
|
||||
lui r5,0x1f80 ;;;;;;;;;;;;;;;;;;;;;;;ADDRESS OF CHAR HERe ---> SLL CHARNUM, 6
|
||||
lui a1,0x1f80 ;;;;;;;;;;;;;;;;;;;;;;;ADDRESS OF CHAR HERe ---> SLL CHARNUM, 6
|
||||
|
||||
lw v0,-0x31a8(t3);>8007b6d0_freeChain r2 = *nextFreeChain
|
||||
ori r5,r5,0x348 ; r5 | 1f800348 = Scratch CharData
|
||||
and r4,v0,t2 ; r4 = r2 & FF000000 FFNEXTCHAIN
|
||||
ori a1,a1,0x348 ; a1 | 1f800348 = Scratch CharData
|
||||
and a0,v0,t2 ; a0 = r2 & FF000000 FFNEXTCHAIN
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF = 00XTCHAN
|
||||
or r7,v0,s1 ;or (800...) ; r7 = r2 | r12 = nextChain & 80...
|
||||
move r6,r7 ; r6 = r7 (nextChain)
|
||||
or a3,v0,s1 ;or (800...) ; a3 = r2 | r12 = nextChain & 80...
|
||||
move a2,a3 ; a2 = a3 (nextChain)
|
||||
lw v0,0x4(t4) ; CmdCounter r2 = DMA Counter
|
||||
lw v1,0x0(r7) ; r3 = New Free ChainAddr / currHeader Addr
|
||||
lw v1,0x0(a3) ; r3 = New Free ChainAddr / currHeader Addr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 80.... commandCount / currHeader
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
or a0,a0,v1 ; a0 & r3 = ff......
|
||||
sw v0,0x4(t4);>DAT_8007b6d4_CmdCounter save DMA Counter
|
||||
andi v0,r7,0x3 ; r2 = r7 & 3 (check destAddr MOD 4)
|
||||
sw r4,-0x31a8(t3);>8007b6d0_freeChain save new freeChain
|
||||
andi v0,a3,0x3 ; r2 = a3 & 3 (check destAddr MOD 4)
|
||||
sw a0,-0x31a8(t3);>8007b6d0_freeChain save new freeChain
|
||||
|
||||
|
||||
beq v0,zero,Copy16Bytes ; if r7 MOD 4 = 0 then Branch
|
||||
addiu v0,r5,0x40 ;T3 = 388!
|
||||
beq v0,zero,Copy16Bytes ; if a3 MOD 4 = 0 then Branch
|
||||
addiu v0,a1,0x40 ;T3 = 388!
|
||||
|
||||
;;;;;;;;;;;;;;;Copy from ScratchPad To Chain
|
||||
|
||||
@@ -369,45 +369,45 @@ NotFirstChar:
|
||||
|
||||
|
||||
CopyBy2Bytes:
|
||||
lwl t9,0x3(r5) ; if r7 mod4 <> 0 - копируем по 2 байта
|
||||
lwr t9,0x0(r5);>DAT_1f800348
|
||||
lwl t7,0x7(r5)
|
||||
lwr t7,0x4(r5);>DAT_1f80034c
|
||||
lwl t8,0xb(r5)
|
||||
lwr t8,0x8(r5);>DAT_1f800350
|
||||
lwl t5,0xf(r5)
|
||||
lwr t5,0xc(r5);>DAT_1f800354
|
||||
swl t9,0x3(r6)
|
||||
swr t9,0x0(r6)
|
||||
swl t7,0x7(r6)
|
||||
swr t7,0x4(r6)
|
||||
swl t8,0xb(r6)
|
||||
swr t8,0x8(r6)
|
||||
swl t5,0xf(r6)
|
||||
swr t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,v0,CopyBy2Bytes
|
||||
addiu r6,r6,0x10
|
||||
lwl t9,0x3(a1) ; if a3 mod4 <> 0 - копируем по 2 байта
|
||||
lwr t9,0x0(a1);>DAT_1f800348
|
||||
lwl t7,0x7(a1)
|
||||
lwr t7,0x4(a1);>DAT_1f80034c
|
||||
lwl t8,0xb(a1)
|
||||
lwr t8,0x8(a1);>DAT_1f800350
|
||||
lwl t5,0xf(a1)
|
||||
lwr t5,0xc(a1);>DAT_1f800354
|
||||
swl t9,0x3(a2)
|
||||
swr t9,0x0(a2)
|
||||
swl t7,0x7(a2)
|
||||
swr t7,0x4(a2)
|
||||
swl t8,0xb(a2)
|
||||
swr t8,0x8(a2)
|
||||
swl t5,0xf(a2)
|
||||
swr t5,0xc(a2)
|
||||
addiu a1,a1,0x10
|
||||
bne a1,v0,CopyBy2Bytes
|
||||
addiu a2,a2,0x10
|
||||
j last4BytesCopy
|
||||
nop
|
||||
Copy16Bytes:
|
||||
lw t9,0x0(r5);>DAT_1f800348 r5 - curScratchAddr,r6 -cur DMAAddr
|
||||
lw t7,0x4(r5)
|
||||
lw t8,0x8(r5)
|
||||
lw t5,0xc(r5)
|
||||
sw t9,0x0(r6)
|
||||
sw t7,0x4(r6)
|
||||
sw t8,0x8(r6)
|
||||
sw t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,v0,Copy16Bytes
|
||||
addiu r6,r6,0x10
|
||||
lw t9,0x0(a1);>DAT_1f800348 a1 - curScratchAddr,a2 -cur DMAAddr
|
||||
lw t7,0x4(a1)
|
||||
lw t8,0x8(a1)
|
||||
lw t5,0xc(a1)
|
||||
sw t9,0x0(a2)
|
||||
sw t7,0x4(a2)
|
||||
sw t8,0x8(a2)
|
||||
sw t5,0xc(a2)
|
||||
addiu a1,a1,0x10
|
||||
bne a1,v0,Copy16Bytes
|
||||
addiu a2,a2,0x10
|
||||
last4BytesCopy:
|
||||
lwl t9,0x3(r5) ; r14 left = 2 bytes from *r5+3
|
||||
lwr t9,0x0(r5);>DAT_1f800358 r14 right = 2 bytes from *r5
|
||||
lwl t9,0x3(a1) ; r14 left = 2 bytes from *a1+3
|
||||
lwr t9,0x0(a1);>DAT_1f800358 r14 right = 2 bytes from *a1
|
||||
nop
|
||||
swl t9,0x3(r6) ; *r6 = r14 left
|
||||
swr t9,0x0(r6) ; *r6+3 = r14 right
|
||||
swl t9,0x3(a2) ; *a2 = r14 left
|
||||
swr t9,0x0(a2) ; *a2+3 = r14 right
|
||||
|
||||
|
||||
; linking DMA char+copysprite
|
||||
@@ -416,22 +416,22 @@ last4BytesCopy:
|
||||
; t1 (smallSRC) = t6 (HERE) !!!! ;r9 = r14 !!!!!!!!!!!!
|
||||
|
||||
lw v1,0x18(t1) ; r3 = current DMACopySprite Chain
|
||||
lw v0,0x0(r7) ; r2 = current CharChainCommands
|
||||
lw v0,0x0(a3) ; r2 = current CharChainCommands
|
||||
lw v1,0x0(v1) ; r3 = *r3 (comNum+FFFFFF(nextLink))
|
||||
and v0,v0,t2 ; r2 & FF.....
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 10FFFFFF(cmdNum&FF..)
|
||||
sw v0,0x0(r7) ; *r7 = r2 saveCurChainCmd (10FFFFFF)
|
||||
sw v0,0x0(a3) ; *a3 = r2 saveCurChainCmd (10FFFFFF)
|
||||
|
||||
lw r4,0x18(t1) ; r4 = r8+18h - cur CopySpriteCmd hdrAddr
|
||||
lw a0,0x18(t1) ; a0 = r8+18h - cur CopySpriteCmd hdrAddr
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 (04FFFFFF)
|
||||
and v1,r7,s0 ; r3 = r7 & 00FFFFFF (Copying Cur Char Chain)
|
||||
lw v0,0x0(a0) ; r2 = *a0 (04FFFFFF)
|
||||
and v1,a3,s0 ; r3 = a3 & 00FFFFFF (Copying Cur Char Chain)
|
||||
and v0,v0,t2 ; r2 & FF000000 (04000000) CmdCount
|
||||
or v0,v0,v1 ; R2 | R3 = 04(cmd)..+CharChainAddr
|
||||
sw v0,0x0(r4) ; *r4 = r2 = FullCommand With Link!!!
|
||||
sw v0,0x0(a0) ; *a0 = r2 = FullCommand With Link!!!
|
||||
; (04..CharAddr) + SpriteCopyCommand
|
||||
sw r7,0x18(t1) ; *r8+18 = Last Char Chain!
|
||||
sw a3,0x18(t1) ; *r8+18 = Last Char Chain!
|
||||
|
||||
addiu t1,t1,0x4 ; r8 (params) += 4 (shift params for NextPage)
|
||||
addiu v0,t6,0x8 ; r2 = r9+8 (shift first chain param for Page)
|
||||
@@ -472,7 +472,7 @@ SpaceJump:
|
||||
lhu v0,-0xE(t3) ; r2 = charCount In string
|
||||
lhu v1,-0x10(t3) ; r3 = My charOverAll In string
|
||||
addiu v0,v0,0x1 ; a += 1
|
||||
lbu r4,0x0(s4) ; load next Char to r4 (byte)
|
||||
lbu a0,0x0(s4) ; load next Char to a0 (byte)
|
||||
|
||||
sh v0,-0xE(t3) ; store myCharCounter to MyAddr-E
|
||||
addiu s4,s4,0x1 ;Shift CharAddr
|
||||
@@ -481,38 +481,38 @@ SpaceJump:
|
||||
nop
|
||||
|
||||
TextEnd:
|
||||
clear r18
|
||||
clear s2
|
||||
lui s3,0x8008
|
||||
addiu s4,s3,-0x3198 ; r19 = 80080000, r21 = 7b6d0
|
||||
lui s1,0xff ; r17 = 00ff0000
|
||||
ori s1,s1,0xffff ; r17 & ffff = 00ff ffff
|
||||
move s0,s5 ; r16 = r20 (currentTLineParam)
|
||||
clear r5
|
||||
clear a1
|
||||
PageTLoop: ;ALMOST FINISH!!!!
|
||||
li r6,0x1 ; r6=1
|
||||
addu r18,r18,r6 ; r18(Counter) += r6
|
||||
li a2,0x1 ; a2=1
|
||||
addu s2,s2,a2 ; s2(Counter) += a2
|
||||
lui v0,0x8000 ; r2 = 80000000
|
||||
lui r4,0xff00 ; r4 = ff00 0000
|
||||
lui a0,0xff00 ; a0 = ff00 0000
|
||||
lw v1,-0x3198(s3);>8007b6d0_freeChain r3 = next free Chain (*7b6d0)
|
||||
lw r7,0x9c(gp);>DAT_8007b234 r7 = someParam(почти DMA)gp+a4 = 34
|
||||
lw a3,0x9c(gp);>DAT_8007b234 a3 = someParam(почти DMA)gp+a4 = 34
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
or v1,v1,v0 ; r3 | r2 = 80.....
|
||||
sw v1,0x30(s0) ; store last free ChAddr to DMAParams
|
||||
lw v0,-0x3198(s3);>8007b6d0_freeChain r2 = next free chain
|
||||
lw v1,0x0(v1) ; r3 = *r3 = last chain - made one more chain
|
||||
and v0,v0,r4 ; a2 & ff000000
|
||||
and v0,v0,a0 ; a2 & ff000000
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
lw r4,0x4(s4);>DAT_8007b6d4_CmdCounter r4 = DMA Counter
|
||||
lw a0,0x4(s4);>DAT_8007b6d4_CmdCounter a0 = DMA Counter
|
||||
or v0,v0,v1 ; r2 | r3
|
||||
sw v0,-0x3198(s3);>8007b6d0_freeChain new free chain addr add to *7b6b0
|
||||
addiu r4,r4,-0x1 ; DMA Cunter =- 1
|
||||
sw r4,0x4(s4);>DAT_8007b6d4_CmdCounter Store DMA Count
|
||||
lw r4,0x30(s0) ; r4 = *DMA params + 30 = Start Of DMA Chain
|
||||
addiu a0,a0,-0x1 ; DMA Cunter =- 1
|
||||
sw a0,0x4(s4);>DAT_8007b6d4_CmdCounter Store DMA Count
|
||||
lw a0,0x30(s0) ; a0 = *DMA params + 30 = Start Of DMA Chain
|
||||
jal SetDrawTPage ; Set DRAW PAGE
|
||||
addiu s0,s0,0x4 ; r16 += 4 - Shgift DMAParams for next Page
|
||||
sltiu v0,r18,0x2 ; r2 = r18<2
|
||||
sltiu v0,s2,0x2 ; r2 = s2<2
|
||||
bne v0,zero,PageTLoop ; if not r2 then goto Loop
|
||||
clear r5 ; r5 = 0
|
||||
clear a1 ; a1 = 0
|
||||
move v0,s5 ; r2 = DMAParamsMain
|
||||
|
||||
lw ra,0x48(sp)
|
||||
|
||||
Reference in New Issue
Block a user