Super Mario 64 (Nintendo 64DD)
|Super Mario 64: Disk Version|
|This game was never completed and/or given a public release.|
As a result of this, keep in mind that the developers might have used or deleted some of the content featured here, had the game actually been released.
The 64DD version of Super Mario 64 would've taken the Nintendo 64 version and made the purchase of the expensive disk drive really worth it. It was displayed on a 64DD demo unit at the Nintendo Shoshinkai 1996 show. Notably, this version has much longer load times; but that’s to be expected, since it runs from the proprietary disk format, rather than a cartridge.
- 1 Duplicate Sound Effects
- 2 Debug Stuff
- 3 Unused Graphics
- 4 Differences From N64 Release
- 5 Error Messages
- 6 Messages For N64 Libraries
Duplicate Sound Effects
In Nintendo 64 games, the audiotable is the file that contains all of the raw binary sound effects and instruments a game uses. The 64DD version of Super Mario 64 is unique because it contains two copies of the audiotable, possibly indicating the developers might not have been concerned about optimizing 64DD disk space. These audiotables also contain duplicate sound effects for particular sounds, which varies from the US/Japanese release counterparts that store each sound effect only once.
The sound effect of Mario saying "Bye-Bye!" that was introduced in the July 1997 Japanese Shindou edition also exists in this version:
Classic Debug Display
Debug Resource Meter
Complex Debug Display
A handful of graphics are scattered around the disk in RGBA5551 format. These include...
A couple of renders from Mario Kart 64 - Wario and Yoshi.
Differences From N64 Release
The Nintendo 64 version of Super Mario 64 contains 35 audio sequences used for music. There are 36 sequences in the 64DD version, with the extra sequence containing an alternate introduction with a slightly-modified jingle. This jingle is used in the PAL release.
|N64 Intro||64DD Intro|
The audio sequence for the Peach's Castle music contains notes that are less staccato than the Nintendo 64 release:
Having more detail is always a good thing.
Specifically: How does this differ?
The 64DD version has the Japanese text saved to the disk twice, which varies from the retail release that contains the Japanese script just once.
Having more detail is always a good thing.
Specifically: Why does this crash this version but not the others?
Entering the inside of the island in Tiny-Huge Island, where Wiggler and red coins reside, will crash the game. This makes collecting all 120 stars impossible on this version.
When Wiggler is initialized, his health value is 1024 for a single frame before being reset to 3. Wiggler uses his health to index into a table to get his speed (to move faster when at lower health); 1024 causes it to index out of range and read a denormalized floating-point number as his health, which causes an unimplemented operation exception since the N64 does not implement any operations on denormalized floats except comparisons. The original Japanese and USA releases do not crash from this programming oversight as a coincidence.
Found at 0x120320 and repeated at 0xB08560 are several error messages. Many of these seem to have come from Mario Kart 64, while others are related to the 64DD itself.
Terminate-Canceled Channel %d,Phase %d Copy %d %d->%d pitch %x: delaybytes %d : olddelay %d cont %x: delaybytes %d : olddelay %d Warning:Kill Note %x Kill Voice %d (ID %d) %d Warning: Running Sequence's data disappear! Audio:Memory:Heap OverFlow : Not Allocate %d! Audio:Memory:DataHeap Not Allocate StayHeap Not Allocate %d AutoHeap Not Allocate %d Status ID0 : %d ID1 : %d id 0 is Stopping id 0 is Stop id 1 is Stopping id 1 is Stop WARNING: NO FREE AUTOSEQ AREA. WARNING: NO STOP AUTO AREA AND TRY FORCE TO STOP SIDE Check ID0 (seq ID %d) Useing ... Check ID1 (seq ID %d) Useing ... No Free Seq area. CH %d: ID %d TWO SIDES ARE LOADING... ALLOC CANCELED. WARNING: Before Area Overlaid After. WARNING: After Area Overlaid Before. MEMORY:SzHeapAlloc ERROR: sza->side %d Audio:MEMORY:SzHeap Overflow error. (%d bytes) Auto Heap Unhit for ID %d Heap Reconstruct Start %x AHPBASE %x AHPCUR %x HeapTop %x SynoutRate %d / %d FXSIZE %d FXCOMP %d FXDOWN %d WaveCacheLen: %d SpecChange Finished Fbank Seq %x Already Load Type %d,ID %d Warning:Emem Over,not alloc %d Write %d Check Wave Bank ID %d Wave ID %d This Table is DISK-ROM Already Table is staying. %x Diskcopy %x -> %x ,size %x Diskcopy end Slow Diskcopy %x -> %x ,size %x Slow Diskcopy end Slow 4096Diskcopy %x -> %x ,size %x Slow 4096Diskcopy End Wave-Load from %x size %x Error: No Wave Load Memory. Table Load from ROM %x to RDRAM %x SIZE %x Count %d, %d INSTTOP %x INSTMAP %x already flags %d already flags %d Offset %x / TableBase %x CAUTION:WAVE CACHE FULL %d LOAD Rom :%x -> Ram :%x Len:%x BASE %x %x LOAD %x %x %x INSTTOP %x INSTMAP %x already flags %d already flags %d ERR:SLOW BANK DMA BUSY ERR:SLOW DMA BUSY Check %d bank %d Cache Check NO BANK ERROR BANK %d LOADING START BANK %d LOAD MISS (NO MEMORY)!
BANK %d ALREADY CACHED Table is none. Bank and Wave Reload BANK LOAD MISS! FOR %d Seq %d Loading Start Heap Overflow Error SEQ %d ALREADY CACHED Ok,one bank slow load Start Sorry,too many %d bank is none.fast load Start Seq %d:Default Load Id is %d Seq Loading Start Error:Before Sequence-SlowDma remain Cancel Seq Start. SEQ %d ALREADY CACHED Clear Workarea %x -%x size %x AudioHeap is %x Heap reset.Synth Change %x Heap %x %x %x Main Heap Initialize ---------- Init Completed. ------------ Syndrv :[%6d] Seqdrv :[%6d] audiodata :[%6d] --------------------------------------- Audio: setvol: volume minus %f Audio: setvol: volume overflow %f Audio: setpitch: pitch minus %f Audio: voiceman: No bank error %d Audio: voiceman: progNo. overflow %d,%d Audio: voiceman: progNo. undefined %d,%d Audio: voiceman: No bank error %d Audio: voiceman: Percussion Overflow %d,%d Audio: voiceman: Percussion table pointer (bank %d) is irregular Audio: voiceman: Percpointer NULL %d,%d --4 %x Stoped Voice CAUTION:SUB IS SEPARATED FROM GROUP Error:Wait Track disappear Slow Release Batting @ Audio:Wavemem: Bad voiceno (%d) Audio: C-Alloc : Dealloc voice is NULL Alloc Error:Dim voice-Alloc %d Error:Same List Add Already Cut Audio: C-Alloc : lowerPrio is NULL Sub Limited Warning: Drop Voice Warning: Drop Voice Warning: Drop Voice Warning: Drop Voice Env-Clear 0 Audio:Envp: overflow %f Audio:Track:Warning: No Free Notetrack SUBTRACK DIM Audio:Track: Warning :SUBTRACK had been stolen by other Group SEQID %d,BANKID %d ERR:SUBTRACK %d NOT ALLOCATED Error:Same List Add Macro Level Over Error! Macro Level Over Error! WARNING: NPRG: cannot change %d Audio:Track:NOTE:UNDEFINED NOTE COM. %x Audio: Note:Velocity Error %d Error: Subtrack no prg ERR %x Error: Your assignchannel is stolen Audio:Track :Call Macro Level Over Error! Audio:Track :Loops Macro Level Over Error! SUB:ERR:BANK %d NOT CACHED SUB:ERR:BANK %d NOT CACHED Audio:Track: CTBLCALL Macro Level Over Error! [%2x] Err :Sub %x ,address %x:Undefined SubTrack Function %x Disappear Sequence or Bank %d Macro Level Over Error! Macro Level Over Error! Group:Undefine upper C0h command (%x) Group:Undefined Command
Messages For N64 Libraries
Found at 0x1255C0 and 0xB0D800 are several strings related to N64 libraries. Several of these strings exist in the original release of Super Mario 64, but many are unique to the 64DD version.
AUTOSEQ AUTOBNK STAYSEQ [%2x] <%5x / %5x>%2x \ STAYBNK [%2x] <%5x / %5x>%2x 0123456789ABCDEF0123456789ABCDEF01234567 -------------------------------------------- SEQ %1x BNK %1x FIXHEAP %4x / %4x DRVHEAP %5x / %5x DMACACHE %4d Blocks CHANNELS %2d / MAX %3d TEMPOMAX %d TEMPO G0 %d TEMPO G1 %d TEMPO G2 %d DEBUGFLAG %8x COUNT %8d Error : Queue is not empty ( %x ) specchg error Opening Voice Canceled Stage Change Start %d ActiveCourse %d ActiveLevel %d ActiveScene %d ActiveStage %d Second1 Load Start Second2 Load Start Second3 Load Start DAC:Lost 1 Frame DMA: Request queue over( %d ) DMA [ %d lines] TIMEOUT Warning: WaveDmaQ contains %d msgs Audio:now-max tasklen is %d / %d Audio:Warning:ABI Tasklist length over (%d) AudioSend: %d -> %d (%d) Undefined Port Command mq != NULL /io/viseteventcmodep != NULL /io/visetmode.c frameBufPtr != NULL /io/viswapbuf.c ASSERTION FAULT: (devAddr & 0x7) == 0 /io/sprawdma.c ((u32)dramAddr & 0x7) == 0 /io/sprawdma.c(size & 0x7) == 0 /io/sprawdma.c (devAddr & 0x3) == 0 /io/sirawread.c data != NULL /io/sirawread.c
(devAddr & 0x3) == 0 /io/sirawwrite.c data != NULL /io/pirawread.c ((u32)dramAddr & 0x3) == 0 /io/sirawdma.c data != NULL /io/epirawread.c NaNInf0 ReadMem @ %08x for %d WriteMem Long unaligned write RCP write not an integral number of words ListProcesses LoadProgram GetExeNameimemrmon GetRegionCount GetRegions StopThreads %d Couldn't stop thread %d Couldn't stop thread %d ListThreads ThreadStatus %d method %d StopThread %d RunThread %d SetFault PANIC!! SetComm GetGRegisters SetGRegisters GetFRegisters SetFRegisters GetSRegisters SetSRegisters GetVRegisters SetVRegs Set temp BP at %08x and %08x ClearTempBreak @ %08x ClearTempBreak @ %08x SetBreak at %08x, method %d* (%08x) = %08x (was %08x) ListBreak ClearBreak SingleStep Break %d in thread %d HitBreak Hit SP Break HitCpuFault Brk in thread %d @ %08x, inst %08x rmon: Thread %d created rmon: Thread %d destroyed (devAddr & 0x3) == 0 /io/sprawwrite.c (devAddr & 0x3) == 0 /io/sprawreadcdata != NULL /io/sprawread.c