snes-disassembler
Version:
A Super Nintendo (SNES) ROM disassembler for 65816 assembly
89 lines • 2.74 kB
TypeScript
import { CartridgeInfo, MemoryRegion } from './cartridge-types';
export interface SNESHeader {
title: string;
mapMode: number;
cartridgeType: number;
romSize: number;
ramSize: number;
countryCode: number;
licenseCode: number;
versionNumber: number;
checksum: number;
complement: number;
nativeVectors: {
cop: number;
brk: number;
abort: number;
nmi: number;
reset: number;
irq: number;
};
emulationVectors: {
cop: number;
brk: number;
abort: number;
nmi: number;
reset: number;
irq: number;
};
}
export interface SNESRom {
header: SNESHeader;
data: Buffer;
isHiRom: boolean;
hasHeader: boolean;
cartridgeInfo: CartridgeInfo;
memoryRegions: MemoryRegion[];
isInterleaved?: boolean;
isSplitRom?: boolean;
isOverdumped?: boolean;
originalSize?: number;
}
export declare class RomParser {
static parse(filePath: string): SNESRom;
private static scoreHeader;
private static parseHeader;
private static getROMSize;
private static getSpecialChipName;
static getRomOffset(address: number, cartridgeInfo: CartridgeInfo, romSize?: number): number;
private static getRomOffsetWithWrapping;
private static calculateHiROMOffset;
private static calculateLoROMOffset;
static getRomOffsetLegacy(address: number, isHiRom: boolean): number;
static getPhysicalAddress(romOffset: number, isHiRom: boolean): number;
/**
* Detect and handle split ROM files (multi-part dumps)
* Based on file naming conventions and size analysis
*/
static detectSplitRom(filePath: string): string[];
/**
* Combine split ROM parts into single buffer
*/
static combineSplitRom(splitParts: string[]): Buffer;
/**
* Detect interleaved ROM format
* Common in older ROM dumps where odd/even bytes are swapped
*/
static detectInterleavedFormat(data: Buffer): boolean;
/**
* De-interleave ROM data (swap odd/even bytes)
*/
static deInterleaveRom(data: Buffer): Buffer;
/**
* Detect overdumped ROMs (ROMs with extra data beyond the actual ROM size)
* Common in older dumps where ROMs were padded to standard sizes
*/
static detectOverdump(data: Buffer, expectedSize: number): {
isOverdumped: boolean;
originalSize: number;
};
/**
* Remove overdump padding from ROM data
*/
static removeOverdump(data: Buffer, originalSize: number): Buffer;
/**
* Enhanced ROM parsing with support for special formats
*/
static parseAdvanced(filePath: string): SNESRom;
}
//# sourceMappingURL=rom-parser.d.ts.map