snes-disassembler
Version:
A Super Nintendo (SNES) ROM disassembler for 65816 assembly
144 lines • 3.5 kB
TypeScript
/**
* SPC File Export for SNES Disassembler
* Implements SPC700 state export for audio playback as per SPC File Format v0.30
*
* Based on SPC File Format Specification:
* - 27-byte header with SPC700 register states
* - 64KB SPC700 RAM state
* - 128 bytes DSP register states
* - ID666 metadata tags support
* - Timer and I/O port states
*/
export interface SPC700State {
pc: number;
a: number;
x: number;
y: number;
psw: number;
sp: number;
ram: Uint8Array;
timer0: {
value: number;
target: number;
enabled: boolean;
};
timer1: {
value: number;
target: number;
enabled: boolean;
};
timer2: {
value: number;
target: number;
enabled: boolean;
};
ports: {
cpuToApu: Uint8Array;
apuToCpu: Uint8Array;
};
}
export interface DSPState {
registers: Uint8Array;
voices: Array<{
volumeLeft: number;
volumeRight: number;
pitch: number;
sourceNumber: number;
adsr1: number;
adsr2: number;
gain: number;
envx: number;
outx: number;
}>;
mainVolumeLeft: number;
mainVolumeRight: number;
echoVolumeLeft: number;
echoVolumeRight: number;
keyOn: number;
keyOff: number;
flg: number;
endx: number;
efb: number;
pmon: number;
non: number;
eon: number;
dir: number;
esa: number;
edl: number;
}
export interface ID666Metadata {
songTitle?: string;
gameTitle?: string;
dumperName?: string;
comments?: string;
dumpDate?: string;
playTime?: number;
fadeLength?: number;
artist?: string;
defaultChannelDisables?: number;
emulator?: number;
publisher?: string;
year?: number;
genre?: string;
originalSoundtrack?: string;
introduction?: number;
loop?: number;
ending?: number;
mixing?: number;
preamp?: number;
}
export interface SPCExportOptions {
includeID666?: boolean;
binaryFormat?: boolean;
includeExtended?: boolean;
filename?: string;
validate?: boolean;
}
export declare class SPCExporter {
private static readonly SPC_HEADER;
private static readonly SPC_SIGNATURE;
private static readonly RAM_SIZE;
private static readonly DSP_REG_SIZE;
private static readonly EXTRA_RAM_SIZE;
/**
* Export SPC700 and DSP state to SPC file format
*/
static exportSPC(spcState: SPC700State, dspState: DSPState, metadata?: ID666Metadata, options?: SPCExportOptions): Uint8Array;
/**
* Write SPC file header including SPC700 register states
*/
private static writeHeader;
/**
* Write ID666 metadata tags
*/
private static writeID666;
/**
* Create extended ID666 (xid6) chunk
*/
private static createExtendedID666;
/**
* Create individual xid6 sub-chunk
*/
private static createXID6Chunk;
/**
* Write string to buffer with null padding
*/
private static writeString;
/**
* Parse date string to binary format
*/
private static parseDateToBinary;
/**
* Validate exported SPC file
*/
private static validateSPCFile;
/**
* Create default SPC700 state for testing
*/
static createDefaultSPC700State(): SPC700State;
/**
* Create default DSP state for testing
*/
static createDefaultDSPState(): DSPState;
}
//# sourceMappingURL=spc-exporter.d.ts.map