Observations about assembly language programming on the ps2

this will be updated periodically
I've been messing around with programming on my playstation 2 (slim) for a few days and have found some interesting things which I will jot down in this website.
First off, I should say what my setup looks like
I'm using:

Before I start writing a program, I turn on the ps2 slim with the FreeDVDBoot dvd inside, and the usb drive inserted. It usually takes a few attempts (opening and closing the disc bay) before it reads the dvd.
Then I use ULaunchElf to launch ps2link, and leave it on the side til I've written a program for it. If you're launching ps2link for the first time, you'll want to note the IP Address it shows on screen.
You should save this as an environment variable in linux ($PS2HOSTNAME). That way, you don't need to write the address every time you use ps2client
Also, you'll need an RGB or yPbPr/component video output from your ps2. One of those ps2-specific HDMI converter things should work fine too. PS2Link's text is nearly unreadable with composite video.
On the ubuntu vm, I write my program in MIPS assembly, then assemble and link it as a .elf file, using the ps2dev toolchain's appropriate as and ld programs.
Then, I use ps2client (included with the ps2dev toolchain) to send the .elf file to my ps2. Like this: ps2client execee host:ratfun.elf
ANYWAYS:
I haven't gotten very far with my coding in this way. I'm following along with this MIPS assembly course and I'm still on very basic stuff,
arithmetic and bit logic between registers, no I/O, that kinda thing. At this level of program, I can't even begin to have my own graphical output and I can't quite get that ps2client debug stuff to work.
However, when the ps2 runs into an Emotion Engine Exception, ps2link will show a debug screen with what all the general purpose registers contain. So all my programs, right now, end with the following:

The Magic Instruction that Bugchecks Your PS2

teq $0,$0
"teq" means "Trap on Equal". It takes in 2 registers and compares their values. If those 2 values are equal, it causes a Trap exception, which throws up that debug screen we want, so we can see what we've done to the registers.
Any register passed into it twice will probably make it Always trap, but I use $0 since register 0 will never ever change its value from 0, so it's guaranteed to work.

anyways, those observations And Whatnot