MooglyGuy's Shoddily-Put-Together WIP Page
To see the full list of opcode statii, click here.
List of Contributors (in no specific order)
- R. Belmont - Moral support
- [-|-] - Doctor V64 purchase
- Adam Gashlin (hcs) - Toolchain setup
- pinchy - PIF ROM hookup advice
- Anonymous - RSP and RDP reverse-engineering advice
- zilmar - Debugging advice
- Vas Crabb - Initial RSP endian-compliance patch and initial webhost
- ColourBorrower - Visual reference
- angrylion - Collaboration
Click here to go home.

2/5/2008 - Blargh
To hell with this antiquated method of posting regular updates. Click here.
2/1/2008 - Eye of the Tiger
One "angrylion" told me that apparently Ziggy's MESS-derived LLE plugin, Z64, handles
RSP DMA in a somewhat different manner than MESS. Impressively, there's a marked
difference in some games versus the mangled jumble of polygons that they used to show:
Mario Golf


Mario Tennis


Pokemon Stadium

Unfortunately, it also manages to break Ocarina of Time, Jet Force Gemini, and
possibly others, so it's not something I'm going to be submitting anytime soon.
Hopefully it'll provide a good starting point for more investigation, though.
1/19/2008 - All of the Day and All of the Night
In MAME-related news, I've found a potentially serious bug in the way MAME handles VRCP.
Check out the message board post here.
In other news, have you ever wanted to see what my workspace looks like? Of course you haven't,
but I'm going to show it to you anyway.
My A/V setup (click for big):

My sitting setup (click for big):

Until next time...
1/16/2008 - One Step Forward and No Steps Back
A couple new discoveries:
- The RSP's registers power up to a random state, excluding accumulators, which are initialized to zero.
- The RSP executes exactly one instruction before kicking into single-step mode, rather than immediately changing modes.
What's next? Who knows!
1/15/2008 - You Can't Kill the Metal
Looking for yet another emulation forum to join and complain about
emulators? Look no further - the Moogle Technologies forums are
now open!
1/7/2008 (2) - His Pokemans
ColourBorrower showed me them.
In case anyone feels like comparing against reference material, the
good ColourBorrower provided me with a link to various Pokemon Puzzle
League videos, found here.
The strange corruption in the collage on 1/6/2008, "My Pokemans",
seems to be caused when the game attempts to draw the borders around
the playfield and meters. Now I just need to figure out why.
In other news, Ziggy's Z64 plugin is great, I'm sure, but it rewrites a
fairly substantial amount of MESS's RDP functionality in order to get
hardware acceleration working. I can't make heads or tails of what the
changes were under the hood versus MESS's behavior, so I've put in a
request for the man to summarize the changes he made. Here's hoping
it works.
1/7/2008 - This Is A Call
Tonight I intend to look into backporting any fixes made in Ziggy's
RSP / RDP plugin, which was based off of code found in MESS a while ago.
Hopefully that will go well.
On a different subject, I could use some help from anyone who owns a
copy of Pokemon Puzzle League. As you can see in the screenshot posted
below, there's some weird corruption present on the screen when in-game.
If someone could please get me a high-quality screenshot of what the
game is actually supposed to look like when in-game in 2D mode, that
would be great. Ping me on AIM, YIM or ICQ and throw the screenshot up
onto Waffleimages or something, and I'll be your best friend!
1/6/2008 - My Pokemans
Let me show you them:
pokemans.jpg
I finally got into the swing of writing test code for the N64 again,
and decided to tackle the fact that the behavior of DMA transfers when
the Count and Skip fields were non-zero was unknown. A couple hours
later, I have a fix for almost any game in MESS that previously died
with a non-zero dma_count or dma_skip assertion. Wonder of wonders,
Pokemon Puzzle League now fires right up and is fully playable.
Yesterday I fixed texture loading and texel fetching for 32-bit RGBA
textures, which fixes Mario Kart 64's title logo:

Last but not least, I was able to reenable texture clamping. It was
previously disabled because enabling it broke Rampage: World Tour, but
it was able to be reenabled once I discovered the reason. If you're
curious, apparently texture coordinates should be recentered on 0,0 for
the sake of texel lookup after coordinate clamping and mirroring,
not before.
12/29/2007 - Triangles
Today was
a pretty productive day, adding support for the following commands:
- Triangle (all modes)
- Set Scissor
- Set Fill Color
- Set Fog Color
- Set Blend Color
- Set Env. Color
With the triangle and color editing, we can send Mario on our very
own LSD trip:
lsd.png
The Set Scissor command, as the name implies, affects the scissor
box for polygon drawing:
scissor.png
The remaining commands that I need to support are as follows:
- Set Key GB
- Set Key R
- Set Convert
- Set Prim Depth
- Set Other Modes
- Load TLUT
- Set Tile Size
- Load Block
- Load Tile
- Set Tile
- Fill Rectangle
- Set Prim Color
- Set Texture Image
- Set Z Image
- Set Color Image
Some of these probably don't actually need to be edited - for
instance, I hear that color keying is actually broken in production
N64 units. Who knew?
12/28/2007 - Hack 'n Slash
Well, that ended up being a lot easier than I thought it would be,
though I'm not 100% sure it's accurate to the hardware. I put in
a specific check to disable writing the pixel to the framebuffer
and Z-buffer if the alpha of the pixel, post-color-combine, is
zero. Surprisingly, it didn't seem to adversely affect things:
trees.png
stars2.png
Cool!
12/27/2007 (2) - Retro-Active
Now we go into the realm of 2D, with the ability to edit Textured
Rectangle commands. After some jiggery-pokery to support
non-fullsreen UIScreen instances, we have a handy editor for
the aforementioned commands:
rect_edit.png
After some fooling around, we can enhance Super Mario 64 for the
visually impaired!
texrect.png
Not sure what command I'm going to support next.
12/27/2007 - The Freeman's Nemesis
The first command-editing screen is now in, it allows you to edit
the "Set Combine" command. To do so, I had to create a new part,
the UIDropdown class. When you have a Set Combine command
selected in the main event list, pressing 'E' will bring up the
command edtior screen for the command, if one is relevant:
edit_combine_screen.png
Once you press 'D' (Done) the editor screen will go
away and return you to the main event list.
As a demonstration, I edited most of the Set Combine events to
use the following equation for texture color:
( C_ZERO - C_ZERO ) * C_ZERO + C_TEX0
Which results in the following scene:
edit_combine.png
Cool, huh?
12/24/2007 (2) - Erroneously Abled
I've added another UIList to the upper-right pane in the window
so that you can see additional info on the command that you have
selected. In doing so, PIN64 has made its first true step towards
usefulness.
For instance, it seemed to me that the bottom face of the first
billboard you encounter in Mario 64 was being drawn incorrectly.
Now that I have the ability to get a proper interactive view of
the commands being sent to the RDP, I can see that the errant
drawing is not due to an RDP implementaton bug, but is in
fact probably due to an RSP core bug. Observe:
rsp_err.png
What you're looking at is the little white line to the left of
Mario's head. In fact, it should be shorter than it is and drawn
approximately centered on the post that's already been drawn.
However, from the X coordinates of the three points (xl, xh and xm),
it's clear that the incorrect coordinates are being passed to the
RDP that something is going awry further up in the chain. I guess
this just gives me more motivation to kick my ass into gear and
start running comprehensive RSP test batteries at night when I'm
in bed.
Next stop: Command editing!
12/24/2007 - Differently Abled
I've put in the ability to disable events. Observe the scene with
the water polys enabled:
enable.png
And disabled:
disable.png
Next stop: Command info pane!
12/22/2007 - Little Shop of Horrors
Is it just me, or does Mario without a moustache look like Rick
Moranis?
mario_moranis.png
12/19/2007 - English Pastimes and Other Boring Activities
I've brought the UITextQueue class up to date, and am now keeping
a list of the events that are queued:
event_queue.png
Sometime over the holiday break I intend to bring the UIList part
up to speed so that I can actually have a scrollable list of
events.
12/16/2007 - PEBKAC
Over the past two weeks I've been overhauling PIN64 under the hood
to use proper classes and singletons rather than make everything an
ungodly mess of global functions and typedefs. I've done a first
pass at converting the UI system found in NUTS - I now have the
UITextField class converted over and I've created a new UIRect
class to encapsulate colored tiles of arbitrary size in order to
get filled window backgrounds and such.
It's very rudimentary, but the following demonstrates one UIRect
instance and two UITextField instances contained within a single
UIScreen instance inside the UI singleton:
prelim_ui.png
Also note that I've added the ability to highlight the
currently-selected triangle event with a white line around the
edges.
No PIN64 release is planned for the forseeable future, not the
least reason being that all of my N64 work is in a legal state of
limbo until I can get some sort of contractual exemption. Nintendo
were stingy enough with proper hardware-level documentation that
there's no way in hell I could be using any sort of work-related
materials to develop this.
As always, more info as it develops.
Previous Months
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007