MooglyGuy's Shoddily-Put-Together N64 WIP Page - April 2007 Entries
04/13/2007 - No News Is Good News
No, really. Nothing's good news. Through a combination of Super
Paper Mario and working 12-hour days at work, I've had precious little
time or motivation to look at anything N64-related.
On an unrelated tangent, if you happen to be looking at this page
and you weren't directed here from the message boards on
bannister.org, either drop me a line at moc.liamg@yugylgoom (take
that, spam harvester bots) or shoot a message over to mega64man1 on
AIM. If you're the aforementioned Anonymous Troma Fan, then such
advice goes double - it's a physical impossibility for someone to
be so mysterious about off-work time!
04/06/2007 - She'll Dance
At first, I was under the impression that it would take a prohibitive
amount of time to comprehensively test the reciprocal and reciprocal
square-root functions due to the fact that VRCPH/L and VRSQH/L operate
on 32-bit operands, and it takes long enough to do a test run of a
standard single-element opcode. Initial estimates based on 8 hours for
a 2^14-iteration test on a given opcode resulted in a rough guesstimate
of approximately 60 years(!) to run through all possible values for both
VRCPH/L and VRSQH/L.
However, whilst daydreaming at work today, I hit upon the notion that it
might enter the realm of feasibility if I were to cut out the main two
bottlenecks - most notably the full register mirroring, opcode-level
interleave, and general emulation of the full RSP. With that in mind, I
went about writing a very short function to populate the entirety of
DMEM with a given span of 0x800 reciprocal values, and a custom function
to calculate what the emulator would generate based on simply
copy/pasting the single opcode's source into a for loop. Amazingly,
this managed to reduce the time domain from taking on the order of 32
hours to test all 2^16 input values for an opcode to two seconds.
At this point, it appears that a conservative estimate would be
approximately 24 to 48 hours to test all possible values of VRCPH and
VRCPL.
Since I do not currently have a DexDrive or memory pack, I will be
dumping all discrepant values to the screen and transcribing them - not
anywhere near as Sisyphean a task as transcribing all values in their
entirety. With that, I leave you with a snapshot of the first page of
values for me to transcribe. The values are found in the
format:
<Value>:<Real Result>:<Emulated Result>

04/05/2007 - Theatre of the Macabre
Several points to touch upon tonight:
- As it turns out, the massive geometry corruption in the Zelda games
as well as Diddy Kong Racing and Mickey's Speedway is due to unaligned
DMA. Apparently this is causing trashed display lists to be sent, which
is naturally a bad thing. This is likely due to a CPU core bug, though
I will be writing a separate probe program to test behavior when
performing unaligned DMA anyway.
- As it turns out, my initial fix to VRCP was only a fix for the gross
inaccuracy in looking up the appropriate element. After extended
testing, it has been discovered that some values will occasionally
generate a result that is very slightly different between the N64 and
emulated RSP, for no apparent reason. For a solution, see the point
below.
- An anonymous contributor has suggested
simply dumping out full tables for all values that VRCP, VRCPH/VRCPL,
VRSQH and VRSQL can generate, storing the results on a memory pack which
can then be read on the PC via a DexDrive. However, one point I
failed to note during the discussion was that while VRCP works with a
single 16-bit element, VRCPH/L and VRSQH/L utilize two 16-bit elements
to form a 32-bit value. Hence, full tables would be prohibitive in
size. However, a viable alternative is to store a table (presumably
much smaller) of only those values that differ between cores. It's a
hack, granted, but it still results in the proper effect.
Stay tuned for more updates at they happen. Do note that due to forces
outside of my control, development will be slow until mid-May.
Current News
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007