Skip to content

Other Note File Formats

bryc edited this page Aug 13, 2021 · 4 revisions

Just for fun, I thought I'd try to make a parser for other note files. These formats use strings, so are not that hard to handle in JS.

Though honestly, I don't feel they are worth implementing. Instead, I've just documented the formats, and commented on the potential issues inherent in them. In essence, Adaptoid64 is highly flawed, essentially broken. And MMF is annoying and incredibly rare (less than 4 files in existence, and actual creation software is unknown).

.mmf

I have no idea what creates this file, but it's probably some utility for Z64/V64/CD64. A few MMF files are found in Dextrose's archives.

It's a relatively simple but quirky format. But it uses strings and has a variable length header, which is annoying.

Also, the character $ cannot be relied on, because the letter K in n64code maps the same value as ASCII $. However this value has a fixed length of 20 bytes, so one must skip ahead.

A B
Separator ASCII $
Identifier ASCII $FILE$
Separator ASCII $
N64 NoteName n64code NoteName + NoteExt, 20 bytes
Separator ASCII $
Data size ASCII e.g. 256 or 1024
Separator ASCII $
N64 GameCode ASCII e.g. 1313429061 or 1314468432
Separator ASCII $
N64 PubCode ASCII e.g. 13361 or 13636
Separator ASCII $
Raw Data Binary data

.a64 (Adaptoid)

A text-based format that isn't reliable. It has quite a few failure points.

  • This format can fail to parse Japanese saves, because { and } represent some Japanese symbols.
  • This format fails to save Wave Race 64 saves because it assumes pubCode will be ASCII.
  • Other games that rely on noteName may fail to save or load properly.
  • This format will fail to save if homebrew doesn't use ASCII.
.a64 header should look something like this:
NBCE 01 0203 0 {} {BLASTCORPS GAME}
first 4 chars are the first 4 bytes
next 2 chars are the next 2 bytes
next 4 chars are bytes 8 and 9, in hex (huh?)
next character is byte 10, in hex (but only one character this time)
now we've got two sets of braces... the first one contains byte 12 in encoded form (use ReverseNotesA)
the second one should contain bytes 16 through 31 (ReverseNotesA)

---
a64-notes
[Game Save Description (optional, written by user)]
a64-data
[Game Header Data]
[64x230 Character Hex Code]
a64-crc
[8 Character CRC Code]
a64-end