NES Tags are commands used by the NES Emulator in N64 & GC Animal Crossing games.
They tell the emulator to set specific settings for the ROM that is being loaded.
This page contains a list of all tags with a description and argument list for each one.


END

End

Signals the end of command tags. Terminates the parser immediately.
VEQ

Version Equals

If the byte Version is greater than 0, the next tag will be skipped.
Argument #1: byte Version
VNE

Version Not Equal

If the byte Version is 0, the next tag will be skipped.
Argument #1: byte Version
GID

Game ID

The ID of the game. Can be anything.
Argument #1: char[] GameId
GNM

Game Name

The name of the game. Can be anything.
Argument #1: char[] GameName
CPN

Controller Pack Name

The name of the game's save data. Can be anything.
Argument #1: char[] ControllerPackName
OFS

Offset

Sets the write offset/size used in various other tags.
Argument #1: ushort Offset
HSC

High Scores

Tells the emulator that specific area(s) of the ROM should be treated as a high score. If it is the first time loading the game, DefaultValues will be copied starting at CurrentOffset + Offset.
Argument #1: ushort Offset
Argument #2: char[] DefaultValues
GNO

Game Number

Sets the ROM's game number. This value is used to pull high scores from save data. Limited to between 0 and 31.
Argument #1: byte GameNumber
BBR

Battery Backup

Tells the emulator to save an area of RAM as battery backed up memory. Used for storing save data. Offset is added to the current offset value.
Argument #1: ushort Offset
Argument #2: ushort Size
QDS

Quick Disk Save

Tells the emulator to save an area of RAM as a Famicom Quick Disk save file. Used for storing save data. OffsetUpper and OffsetLower are concatenated to make a 24-bit value that is added to the current offset value.
Argument #1: byte OffsetUpper
Argument #2: ushort OffsetLower
Argument #3: ushort Size
SPE

Special

Sets up specific patches to the currently loaded ROM. Only used in The Legend of Zelda.
TCS

Tags Checksum

Calculates a checksum for the tag data. If the additive checksum isn't equal to 0, the tags are considered corrupted & the parser immediately stops execution.
Argument #1: ushort TagsChecksumInverse
ICS

Image Checksum

Calculates a checksum for the NES ROM Image. If the additive checksum isn't equal to 0, the ROM is considered corrupted.
Argument #1: ushort ImageChecksumInverse
ESZ

Expanded Size

Sets the emulator's ROM expanded size parameter. ExpandSize is the expanded size shifted right by 4.
Argument #1: ushort ExpandSize
ROM

ROM Data Reference

Loads another NES ROM from the internal list using RomId to determine which ROM to load. The original tags for the ROM loaded are not used.
Argument #1: byte RomId
MOV

Move Data (Block Transfer)

Moves a section of data in the ROM from one location to another. WriteAddress and ReadAddress are shifted right by four.
Argument #1: ushort WriteAddress
Argument #2: ushort ReadAddress
Argument #3: ushort Size
NHD

NES Header Data

Copies HeaderData to the iNES ROM's header. The size of the copy is determined by the Tag's argument size byte.
Argument #1: byte[] HeaderData
DIF

Difference

Patches multiple sections of the ROM using data from DifferenceData. This command supports multiple changes. To end the changes, set the final OffsetFromLastDifference to 0xFFFFFFFF.
Argument #1: uint OffsetFromLastDifference
Argument #2: int DifferenceSize
Argument #3: byte[] DifferenceData
Repeats
PAT

Patch

Writes PatchData to a memory address which is calculated using PatchType and PatchOffset.
Argument #1: byte PatchType
    [N64] If PatchType is 1, the write address is set to the address of enables[PatchOffset].
    If PatchType is 2, the write address will be the address of the ROM + PatchOffset.
    [N64] If PatchType is 3, the write address is set to osAppNMIBuffer + PatchOffset.
    [GC] If PatchType is 3, the patch is skipped.
    [N64] If PatchType is 4, the write address is set to _ovl_famicom_emuSegmentTextStart + PatchOffset * 4.
    [N64] If PatchType is 5, the write address is set to _ovl_famicom_emuSegmentDataStart + PatchOffset * 4.
    [N64] If PatchType is 6, the write address is set to _ovl_famicom_emuSegmentBssStart + PatchOffset * 4.
    [GC] If PatchType is 9, the write address will be the address of the ROM + PatchOffset << 4.
    If PatchType is >= 0x80, the write address will be ((0x7F80 + PatchType) << 16) | PatchOffset.

Argument #2: byte PatchSize
    Has a maximum size of 0xFB.
    A Tag's argument max length is 0xFF and the arguments take up the first four bytes.

Argument #3: ushort PatchOffset
Argument #4: byte[] PatchData
PAD

Padding

Used as padding for alignment. Does not affect anything.
Argument #1: byte[] Padding

Unused Tags

FIL

WRAM Initialization Fill Data

Copies data to initialize WRAM. Unused in GC titles.
Argument #1: byte* FillDataPtr
ISZ

Image Size

Specifies the size of the ROM image. It is unused in all versions.
Argument #1: ushort ImageSize
IFM

Image Format

The ROM Image format. Goes unused in all versions.
Argument #1: byte ImageFormat
REM

Remarks

Holds comments about the ROM.
Argument #1: char[] Remarks
APL

Application Info

Holds information about the ROM image for use in other applications. Goes unused in the emulator.
Argument #1: byte[] Info
FGN

Full Game Name

The full game name in Shift-JIS encoding. Unused in emulator.
Argument #1: byte[] FullGameName