short cut to ... [main] [news] [forum] [download] [Hall of Fame] [game] [cg] [link]

NSD Format Spec

By: Mamiya

V0.9.2.1 Jul.12,2000 Fixed variable length data type
V0.9.2.0 Jul.11,2000 First draft-NSD specification file

[HEADER FORMAT]

0000 5BYTES	MAGIC 'NESD',$1A
0005 BYTE	FORMAT VERSION(must be 0)
0006 BYTE	Reserved(must be 0)
0007 BYTE	SYNC TYPE1 0:1789772.5MHz, 1:60Hz, 2:50Hz
0008 DWORD(LE)	SYNC TYPE2 0:use SYNC TYPE1 1-:n/(256-SYNC TYPE1)Hz
000C BYTE	Extra Sound Device Support
000D 3BYTES	Reserved(must be 0)
0010 DWORD(LE)	FILE OFFSET TO SONG NAME If value is 0, not exist.
0014 DWORD(LE)	FILE OFFSET TO ARTIST If value is 0, not exist.
0018 DWORD(LE)	FILE OFFSET TO COPYRIGHT If value is 0, not exist.
001C DWORD(LE)	Reserved(must be 0)
0020 DWORD(LE)	SIZE OF DPCM INFO
0024 DWORD(LE)	Reserved(must be 0)
0028 DWORD(LE)	FILE OFFSET TO DPCM INFO If value is 0, not exist.
002C DWORD(LE)	Reserved(must be 0)
0030 DWORD(LE)	SIZE OF DUMP DATA
0034 DWORD(LE)	COMPRESSING 'Inflate' size in byte.If value is 0, notcompressed.
0038 DWORD(LE)	FILE OFFSET TO DUMP DATA
003C DWORD(LE)	FILE OFFSET TO LOOP POINT DUMP DATA
0040-007F	HEADER RESERVE(must be 0)

[DPCM INFO FORMAT]

0000 BYTE	NUMBER OF 4kBANK

0001 VBYTES	(data length)*2+(data exist flag)
???? nBYTES	(data length)bytes raw data, if data exist.

repeat {
???? VBYTES	(data length)*2+(data exist flag)
???? nBYTES	(data length)bytes raw data, if data exists.
}

[DUMP DATA FORMAT]

$00-15 dd     write $dd to APU($4000-4015)
$16 dd        write $dd to volume port of VRC6 square#0
$17 dd        write $dd to freq-l port of VRC6 square#0
$18 dd        write $dd to freq-h port of VRC6 square#0
$19 dd        write $dd to volume port of VRC6 square#1
$1A dd        write $dd to freq-l port of VRC6 square#1
$1B dd        write $dd to freq-h port of VRC6 square#1
$1C dd        write $dd to volume port of VRC6 saw
$1D dd        write $dd to freq-l port of VRC6 saw
$1E dd        write $dd to freq-h port of VRC6 saw
$1F aa dd     write $dd to address $aa of VRC7
$20-35 dd     write $dd to MMC5($5000-5015)
$36 aa dd     write $dd to address $aa of N106
$37 aa dd     write $dd to address $aa of FME7
$3C dd        write $dd to DPCM BANK SELECT C
$3D dd        write $dd to DPCM BANK SELECT D
$3E dd        write $dd to DPCM BANK SELECT E
$3F dd        write $dd to DPCM BANK SELECT F
$40-8F dd     write $dd to FDS($4040-408F)

$FF          1SYNC
$FE vv...    nSYNC
$FD          END/LOOP

vv...:VBYTES(variable length BYTE DATA)

int getvv(byte *p)
{
    int n = 0;
    do
    {
        s <<= 7;
        n |= (*p & 0x7f);
    }
    while (*p++ & 0x80);
    return n + 3;
}



.