the cutting room mirror

Tetris 64

This article has a talk page!
view on tcrf.net

This page is rather stubbly and could use some expansion.
Are you a bad enough dude to rescue this article?

Tetris 64 (not to be confused with The New Tetris, which is probably what you're looking for) is a Japan-only rendition of the classic game for the Nintendo 64.

Being from Japan, it has some weird features, such as the Bio Tetris mode which changes the Tetriminos based on the player's heart rate, measured by a special accessory plugged into the controller and the player's ear... ouch!

Unused Text#

Starting at 0x4A628 is something which looks like a reference table of some sort for ASM instructions.

cache   %s,IX
R(RD)=R(RT)%sB(SA)
R(RD)%s=B(SA)

nop
R(RD)=R(RT)%sR(RS)
R(RD)%s=R(RS)

R(RD)=0
R(RD)=R(RT)
R(RD)=R(RS)
R(RD)=R(RS)%sR(RT)
R(RD)%s=R(RT)

R(RD)=R(RS)%sR(RT)
R(RD)%s=R(RT)

!(R(RS))()
jalr    R(RD),R(RS)

rts
jmp     (R(RS))

bcf
bc;CP;f RL
bct
bc;CP;t RL
bcfl

bc;CP;fl    RL
bctl

bc;CP;tl    RL
tlbr

tlbr

tlbwi

tlbwi

tlbwr

tlbwr

tlbp

tlbp

eret

eret

mfc0

R(RT)=cp;CP( R(RD) )

dmfc0

d.R(RT)=cp;CP( R(RD) )
cfc0

cfc;CP  R(RT),R(RD)
mtc0

cp;CP( R(RD) )=R(RT)

dmtc0

l.cp;CP( R(RD) )=R(RT)
ctc0

ctc;CP  R(RT),R(RD)
��

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?
fadd

FM.F(FD)=F(FS)+F(FT)

fsub

FM.F(FD)=F(FS)-F(FT)

fmul

FM.F(FD)=F(FS)*F(FT)

fdiv

FM.F(FD)=F(FS)/F(FT)

fsqrt

FM.F(FD)=fsqrt(F(FS))

fabs

FM.F(FD)=fabs(F(FS))

fmov

FM.F(FD)=F(FS)
fneg

FM.F(FD)=fneg(F(FS))

fround.l

d.F(FD)=FM.fround(F(FS))

ftrunc.l

d.F(FD)=FM.ftrunc(F(FS))

fceil.l
d.F(FD)=FM.fceil(F(FS))
ffloor.l

d.F(FD)=FM.ffloor(F(FS))

fround.w

l.F(FD)=FM.fround(F(FS))

ftrunc.w

l.F(FD)=FM.ftrunc(F(FS))

fceil.w
l.F(FD)=FM.fceil(F(FS))
ffloor.w

l.F(FD)=FM.ffloor(F(FS))

fcvt.s
fs.F(FD]=FM.F(FS)

fcvt.d
fd.F(FD]=FM.F(FS)

fcvt.w
l.F(FD]=FM.F(FS)

fcvt.l
d.F(FD]=FM.F(FS)

fc.f

fc.f    F(FS),F(FT)

fc.un

fc.un   F(FS),F(FT)

fc.eq

fc      F(FS)==F(FT)

fc.ueq
fc.ueq  F(FS),F(FT)
fc.olt
fc      F(FS)<F(FT)
fc.ult
fc.ult  F(FS),F(FT)
fc.ole
fc      F(FS)<=F(FT)

fc.ule
fc.ule  F(FS),F(FT)
fc.sf

fc.sf   F(FS),F(FT)

fc.ngle
fc.ngle F(FS),F(FT)
fc.seq
fc      F(FS).==F(FT)

fc.ngl
fc.ngl  F(FS),F(FT)
fc.lt

fc      F(FS).<F(FT)

fc.nge
fc.nge  F(FS),F(FT)
fc.le

fc      F(FS).<=F(FT)

fc.ngt
fc.ngt  F(FS),F(FT)
mfc0

R(RT)=cp;CP( R(RD) )

dmfc0

d.R(RT)=cp;CP( R(RD) )
cfc0

cfc;CP  R(RT),R(RD)
mtc0

cp;CP( R(RD) )=R(RT)

dmtc0

l.cp;CP( R(RD) )=R(RT)
ctc0

ctc;CP  R(RT),R(RD)
��

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?
sll
<<
srl
>>
sra
.>>
sllv

<<
srlv

>>
srav

.>>
jr
jalr

syscall
syscall RV
brk
brk     RV
sync

sync    RV
mfhi

R(RD)=hi

mthi

hi=R(RS)

mflo

R(RD)=lo

mtlo

lo=R(RS)

dsllv

d.R(RD)=R(RT)<<R(RS)

dsrlv

d.R(RD)=R(RT)>>R(RS)

dsrav

d.R(RD)=R(RT).>>R(RS)

mult

R(RS).*R(RT)

multu

R(RS)*R(RT)
div
R(RS)./R(RT)

divu

R(RS)/R(RT)
dmult

d.R(RS).*R(RT)
dmultu
d.R(RS)*R(RT)

ddiv

d.R(RS)./R(RT)
ddivu

d.R(RS)/R(RT)

add
.+
addu


+

sub
.-
subu

-

and
&

or
|

xor
^

nor
^|
slt
R(RD)=( R(RS).<R(RT) )
sltu

R(RD)=( R(RS)<R(RT) )

dadd

d.R(RD)=R(RS).+R(RT)

daddu

d.R(RD)=R(RS)+R(RT)
dsub

d.R(RD)=R(RS).-R(RT)

dsubu

d.R(RD)=R(RS)-R(RT)
tge
tge     R(RS),R(RT)

tgeu

tgeu    R(RS),R(RT)

tlt
tlt     R(RS),R(RT)

tltu

tltu    R(RS),R(RT)

teq
teq     R(RS),R(RT)

tne
tne     R(RS),R(RT)

dsll

d.R(RD)=R(RT)<<B(RS)

dsrl

d.R(RD)=R(RT)>>B(RS)

dsra

d.R(RD)=R(RT).>>B(RS)

dsll32
dsll32  R(RD),R(RT),B(SA)

dsrl32
dsrl32  R(RD),R(RT),B(SA)

dsra32
dsra32  R(RD),R(RT),B(SA)

bltz

if R(RS)<0 goto RL
bgez

if R(RS)>=0 goto RL
bltzl

if R(RS)<0 gotol RL
bgezl

if R(RS)>=0 gotol RL

tgei

tgei    R(RS),SI

tgeiu

tgeiu   R(RS),SI
tlti

tlti    R(RS),SI

tltiu

tltiu   R(RS),SI
teqi

teqi    R(RS),SI

tnei

tnei    R(RS),SI

bltzal
bltzal  R(RS),RL
bgezal
bgezal  R(RS),RL
bltzall
bltzall R(RS),RL

bgezall
bgezall R(RS),RL


?
��
j

jmp     JA
jal
!JA()

beq
if R(RS)==R(RT) goto RL
bne
if R(RS)!=R(RT) goto RL
blez

if R(RS)<=0 goto RL
bgtz

if R(RS)>0 goto RL
addi

.

addiu



slti

R(RT)=( R(RS).<#SI )

sltiu

R(RT)=( R(RS)<#UI )
andi

&

ori
|

xori

^

lui
u.R(RT)=UI
��
��
beql

if R(RS)==R(RT) gotol RL

bnel

if R(RS)!=R(RT) gotol RL

blezl

if R(RS)<=0 gotol RL

bgtzl

if R(RS)>0 gotol RL
daddi

d.R(RT)=R(RS).+SI

daddiu
d.R(RT)=R(RS)+SI

ldl
ldl     R(RT),IX

ldr
ldr     R(RT),IX

lb
b.R(RT).=IX
lh
w.R(RT).=IX
lwl
l.R(RT)=IX
lw
l.R(RT)=IX
lbu
b.R(RT)=IX
lhu
w.R(RT)=IX
lwr
lwr     R(RT),IX

lwu
lwu     R(RT),IX

sb
b.IX=R(RT)
sh
w.IX=R(RT)
swl
swl     IX,R(RT)

sw
l.IX=R(RT)
sdl
sdl     IX,R(RT)

sdr
sdr     IX,R(RT)

swr
swr     IX,R(RT)

cache

ll
ll      R(RT),IX

lwc1

l.cp1( R(RT) )=IX

lwc2

l.cp2( R(RT) )=IX

lld
lld     R(RT),IX

ldc1

d.cp1( R(RT) )=IX

ldc2

d.cp1( R(RT) )=IX

ld
d.R(RT)=IX
sc
sc      IX,R(RT)

swc1

l.IX=cp1( R(RT) )

swc2

l.IX=cp2( R(RT) )

scd
scd     IX,R(RT)

sdc1

d.IX=cp1( R(RT) )

sdc2

d.IX=cp2( R(RT) )

sd
d.IX=R(RT)

At 0x49A509 is some help for a command-line tool:

Seta Polygon Editor Ver.2.09.e by K.Takahashi

Usage:spe2 [] [.spf]

  -v  : Verbose Mode
   -z  : Debug Mode

A similar help, for a different program, is present at 0x4FC63D:

Texture Viewer Ver.0.00 by K.Takahashi
Usage : tiv <files(tif&sbf)>