furnace-module-interface
Version:
An interface for loading, processing and saving furnace modules in an object-oriented manner. Fully typed via TypeScript.
329 lines (328 loc) • 14.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FurnaceChipVRC7 = exports.FurnaceSystemVRC7 = exports.FurnaceChipVRC6 = exports.FurnaceSystemVRC6 = exports.FurnaceSystemNESVRC7 = exports.FurnaceChipRicoh2A03 = exports.FurnaceSystemNES = exports.FurnaceChipPCEngine = exports.FurnaceSystemPCEngine = exports.FurnaceChipGameBoy = exports.FurnaceSystemGameBoy = exports.FurnaceChipYM2612ExtendedWithDualPCM = exports.FurnaceSystemYM2612ExtendedWithDualPCM = exports.FurnaceChipYM2612Extended = exports.FurnaceSystemYM2612Extended = exports.FurnaceSystemGenesisExtended = exports.FurnaceChipYM2612WithDualPCM = exports.FurnaceSystemYM2612WithDualPCM = exports.FurnaceChipYM2612 = exports.FurnaceSystemYM2612 = exports.FurnaceSystemGenesis = exports.FurnaceChipSN76489 = exports.FurnaceSystemSMS = exports.FurnaceChipEnum = exports.FurnaceSystemEnum = exports.loadSystem = void 0;
function loadSystem(id) {
switch (id) {
case FurnaceSystemEnum.Null: return null;
case FurnaceSystemEnum.GameBoy: return new FurnaceSystemGameBoy();
case FurnaceSystemEnum.PCEngine: return new FurnaceSystemPCEngine();
case FurnaceSystemEnum.SMS: return new FurnaceSystemSMS();
case FurnaceSystemEnum.YM2612: return new FurnaceSystemYM2612();
case FurnaceSystemEnum.YM2612Extended: return new FurnaceSystemYM2612Extended();
case FurnaceSystemEnum.Genesis: return new FurnaceSystemGenesis();
case FurnaceSystemEnum.GenesisExtended: return new FurnaceSystemGenesisExtended();
case FurnaceSystemEnum.YM2612WithDualPCM: return new FurnaceSystemYM2612WithDualPCM();
case FurnaceSystemEnum.YM2612ExtendedWithDualPCM: return new FurnaceSystemYM2612ExtendedWithDualPCM();
case FurnaceSystemEnum.NES: return new FurnaceSystemNES();
case FurnaceSystemEnum.NESVRC7: return new FurnaceSystemNESVRC7();
case FurnaceSystemEnum.KonamiVRC6: return new FurnaceSystemVRC6();
case FurnaceSystemEnum.KonamiVRC7: return new FurnaceSystemVRC7();
}
throw new Error("Unknown or unsupported system id 0x" + id.toString(16));
}
exports.loadSystem = loadSystem;
var FurnaceSystemEnum;
(function (FurnaceSystemEnum) {
FurnaceSystemEnum[FurnaceSystemEnum["Null"] = 0] = "Null";
FurnaceSystemEnum[FurnaceSystemEnum["Genesis"] = 2] = "Genesis";
FurnaceSystemEnum[FurnaceSystemEnum["GenesisExtended"] = 66] = "GenesisExtended";
FurnaceSystemEnum[FurnaceSystemEnum["YM2612"] = 131] = "YM2612";
FurnaceSystemEnum[FurnaceSystemEnum["YM2612Extended"] = 160] = "YM2612Extended";
FurnaceSystemEnum[FurnaceSystemEnum["SMS"] = 3] = "SMS";
FurnaceSystemEnum[FurnaceSystemEnum["YM2612WithDualPCM"] = 190] = "YM2612WithDualPCM";
FurnaceSystemEnum[FurnaceSystemEnum["YM2612ExtendedWithDualPCM"] = 189] = "YM2612ExtendedWithDualPCM";
FurnaceSystemEnum[FurnaceSystemEnum["GameBoy"] = 4] = "GameBoy";
FurnaceSystemEnum[FurnaceSystemEnum["PCEngine"] = 5] = "PCEngine";
FurnaceSystemEnum[FurnaceSystemEnum["NES"] = 6] = "NES";
FurnaceSystemEnum[FurnaceSystemEnum["NESVRC7"] = 70] = "NESVRC7";
FurnaceSystemEnum[FurnaceSystemEnum["KonamiVRC6"] = 136] = "KonamiVRC6";
FurnaceSystemEnum[FurnaceSystemEnum["KonamiVRC7"] = 157] = "KonamiVRC7";
})(FurnaceSystemEnum = exports.FurnaceSystemEnum || (exports.FurnaceSystemEnum = {}));
var FurnaceChipEnum;
(function (FurnaceChipEnum) {
FurnaceChipEnum[FurnaceChipEnum["YM2612"] = 131] = "YM2612";
FurnaceChipEnum[FurnaceChipEnum["YM2612Extended"] = 160] = "YM2612Extended";
FurnaceChipEnum[FurnaceChipEnum["DualPCMYM2612"] = 190] = "DualPCMYM2612";
FurnaceChipEnum[FurnaceChipEnum["DualPCMYM2612Extended"] = 189] = "DualPCMYM2612Extended";
FurnaceChipEnum[FurnaceChipEnum["SN76489"] = 3] = "SN76489";
FurnaceChipEnum[FurnaceChipEnum["GameBoy"] = 4] = "GameBoy";
FurnaceChipEnum[FurnaceChipEnum["PCEngine"] = 5] = "PCEngine";
FurnaceChipEnum[FurnaceChipEnum["Ricoh2A03"] = 6] = "Ricoh2A03";
FurnaceChipEnum[FurnaceChipEnum["VRC6"] = 136] = "VRC6";
FurnaceChipEnum[FurnaceChipEnum["VRC7"] = 157] = "VRC7";
})(FurnaceChipEnum = exports.FurnaceChipEnum || (exports.FurnaceChipEnum = {}));
class FurnaceSystemSMS {
constructor() {
this.systemId = FurnaceSystemEnum.SMS;
this.name = "SMS (SN76489)";
this.chips = [new FurnaceChipSN76489(),];
}
}
exports.FurnaceSystemSMS = FurnaceSystemSMS;
class FurnaceChipSN76489 {
constructor() {
this.chipId = FurnaceChipEnum.SN76489;
this.channels = [
{ longname: "Square 1", shortname: "S1", },
{ longname: "Square 2", shortname: "S2", },
{ longname: "Square 3", shortname: "S3", },
{ longname: "Noise", shortname: "NO", },
];
this.volume = 64;
this.panning = 0;
this.flags = 0;
}
}
exports.FurnaceChipSN76489 = FurnaceChipSN76489;
class FurnaceSystemGenesis {
constructor() {
this.systemId = FurnaceSystemEnum.Genesis;
this.name = "Genesis";
this.chips = [new FurnaceChipYM2612(), new FurnaceChipSN76489(),];
}
}
exports.FurnaceSystemGenesis = FurnaceSystemGenesis;
class FurnaceSystemYM2612 {
constructor() {
this.systemId = FurnaceSystemEnum.YM2612;
this.name = "YM2612 alone";
this.chips = [new FurnaceChipYM2612(),];
}
}
exports.FurnaceSystemYM2612 = FurnaceSystemYM2612;
class FurnaceChipYM2612 {
constructor() {
this.chipId = FurnaceChipEnum.YM2612;
this.channels = [
{ longname: "FM 1", shortname: "F1", },
{ longname: "FM 2", shortname: "F2", },
{ longname: "FM 3", shortname: "F3", },
{ longname: "FM 4", shortname: "F4", },
{ longname: "FM 5", shortname: "F5", },
{ longname: "FM 6", shortname: "F6", },
];
this.volume = 64;
this.panning = 0;
this.flags = 0;
}
}
exports.FurnaceChipYM2612 = FurnaceChipYM2612;
class FurnaceSystemYM2612WithDualPCM {
constructor() {
this.systemId = FurnaceSystemEnum.YM2612WithDualPCM;
this.name = "YM2612 With Dual PCM";
this.chips = [new FurnaceChipYM2612WithDualPCM(),];
}
}
exports.FurnaceSystemYM2612WithDualPCM = FurnaceSystemYM2612WithDualPCM;
class FurnaceChipYM2612WithDualPCM {
constructor() {
this.chipId = FurnaceChipEnum.DualPCMYM2612;
this.channels = [
{ longname: "FM 1", shortname: "F1", },
{ longname: "FM 2", shortname: "F2", },
{ longname: "FM 3", shortname: "F3", },
{ longname: "FM 4", shortname: "F4", },
{ longname: "FM 5", shortname: "F5", },
{ longname: "FM 6/PCM 1", shortname: "P1", },
{ longname: "PCM 2", shortname: "P2", },
];
this.volume = 64;
this.panning = 0;
this.flags = 0;
}
}
exports.FurnaceChipYM2612WithDualPCM = FurnaceChipYM2612WithDualPCM;
class FurnaceSystemGenesisExtended {
constructor() {
this.systemId = FurnaceSystemEnum.GenesisExtended;
this.name = "Genesis Extended";
this.chips = [new FurnaceChipYM2612Extended(), new FurnaceChipSN76489(),];
}
}
exports.FurnaceSystemGenesisExtended = FurnaceSystemGenesisExtended;
class FurnaceSystemYM2612Extended {
constructor() {
this.systemId = FurnaceSystemEnum.YM2612Extended;
this.name = "YM2612 Extended";
this.chips = [new FurnaceChipYM2612Extended(),];
}
}
exports.FurnaceSystemYM2612Extended = FurnaceSystemYM2612Extended;
class FurnaceChipYM2612Extended {
constructor() {
this.chipId = FurnaceChipEnum.DualPCMYM2612Extended;
this.channels = [
{ longname: "FM 1", shortname: "F1", },
{ longname: "FM 2", shortname: "F2", },
{ longname: "FM 3 OP1", shortname: "O1", },
{ longname: "FM 3 OP2", shortname: "O2", },
{ longname: "FM 3 OP3", shortname: "O3", },
{ longname: "FM 3 OP4", shortname: "O4", },
{ longname: "FM 4", shortname: "F4", },
{ longname: "FM 5", shortname: "F5", },
{ longname: "FM 6", shortname: "F6", },
];
this.volume = 64;
this.panning = 0;
this.flags = 0;
}
}
exports.FurnaceChipYM2612Extended = FurnaceChipYM2612Extended;
class FurnaceSystemYM2612ExtendedWithDualPCM {
constructor() {
this.systemId = FurnaceSystemEnum.YM2612ExtendedWithDualPCM;
this.name = "YM2612 Extended With Dual PCM and CSM";
this.chips = [new FurnaceChipYM2612ExtendedWithDualPCM(),];
}
}
exports.FurnaceSystemYM2612ExtendedWithDualPCM = FurnaceSystemYM2612ExtendedWithDualPCM;
class FurnaceChipYM2612ExtendedWithDualPCM {
constructor() {
this.chipId = FurnaceChipEnum.DualPCMYM2612Extended;
this.channels = [
{ longname: "FM 1", shortname: "F1", },
{ longname: "FM 2", shortname: "F2", },
{ longname: "FM 3 OP1", shortname: "O1", },
{ longname: "FM 3 OP2", shortname: "O2", },
{ longname: "FM 3 OP3", shortname: "O3", },
{ longname: "FM 3 OP4", shortname: "O4", },
{ longname: "FM 4", shortname: "F4", },
{ longname: "FM 5", shortname: "F5", },
{ longname: "FM 6/PCM 1", shortname: "P1", },
{ longname: "PCM 2", shortname: "P2", },
{ longname: "CSM Timer", shortname: "CSM", },
];
this.volume = 64;
this.panning = 0;
this.flags = 0;
}
}
exports.FurnaceChipYM2612ExtendedWithDualPCM = FurnaceChipYM2612ExtendedWithDualPCM;
class FurnaceSystemGameBoy {
constructor() {
this.systemId = FurnaceSystemEnum.GameBoy;
this.name = "Game Boy";
this.chips = [new FurnaceChipGameBoy(),];
}
}
exports.FurnaceSystemGameBoy = FurnaceSystemGameBoy;
class FurnaceChipGameBoy {
constructor() {
this.chipId = FurnaceChipEnum.GameBoy;
this.channels = [
{ longname: "Pulse 1", shortname: "S1", },
{ longname: "Pulse 2", shortname: "S2", },
{ longname: "Wavetable", shortname: "WA", },
{ longname: "Noise", shortname: "NO", },
];
this.volume = 64;
this.panning = 0;
this.flags = 0;
}
}
exports.FurnaceChipGameBoy = FurnaceChipGameBoy;
class FurnaceSystemPCEngine {
constructor() {
this.systemId = FurnaceSystemEnum.PCEngine;
this.name = "PC Engine";
this.chips = [new FurnaceChipPCEngine(),];
}
}
exports.FurnaceSystemPCEngine = FurnaceSystemPCEngine;
class FurnaceChipPCEngine {
constructor() {
this.chipId = FurnaceChipEnum.PCEngine;
this.channels = [
{ longname: "Channel 1", shortname: "CH1", },
{ longname: "Channel 2", shortname: "CH2", },
{ longname: "Channel 3", shortname: "CH3", },
{ longname: "Channel 4", shortname: "CH4", },
{ longname: "Channel 5", shortname: "CH5", },
{ longname: "Channel 6", shortname: "CH6", },
];
this.volume = 64;
this.panning = 0;
this.flags = 0;
}
}
exports.FurnaceChipPCEngine = FurnaceChipPCEngine;
class FurnaceSystemNES {
constructor() {
this.systemId = FurnaceSystemEnum.NES;
this.name = "NES";
this.chips = [new FurnaceChipRicoh2A03(),];
}
}
exports.FurnaceSystemNES = FurnaceSystemNES;
class FurnaceChipRicoh2A03 {
constructor() {
this.chipId = FurnaceChipEnum.Ricoh2A03;
this.channels = [
{ longname: "Pulse 1", shortname: "S1", },
{ longname: "Pulse 2", shortname: "S2", },
{ longname: "Triangle", shortname: "TR", },
{ longname: "Noise", shortname: "NO", },
{ longname: "PCM", shortname: "PCM", },
];
this.volume = 64;
this.panning = 0;
this.flags = 0;
}
}
exports.FurnaceChipRicoh2A03 = FurnaceChipRicoh2A03;
class FurnaceSystemNESVRC7 {
constructor() {
this.systemId = FurnaceSystemEnum.NES;
this.name = "NES With Konami VRC7";
this.chips = [new FurnaceChipRicoh2A03(), new FurnaceChipVRC7(),];
}
}
exports.FurnaceSystemNESVRC7 = FurnaceSystemNESVRC7;
class FurnaceSystemVRC6 {
constructor() {
this.systemId = FurnaceSystemEnum.NES;
this.name = "Konami VRC6";
this.chips = [new FurnaceChipVRC6(),];
}
}
exports.FurnaceSystemVRC6 = FurnaceSystemVRC6;
class FurnaceChipVRC6 {
constructor() {
this.chipId = FurnaceChipEnum.Ricoh2A03;
this.channels = [
{ longname: "VRC6 1", shortname: "V1", },
{ longname: "VRC6 2", shortname: "V2", },
{ longname: "VRC6 Saw", shortname: "VS", },
];
this.volume = 64;
this.panning = 0;
this.flags = 0;
}
}
exports.FurnaceChipVRC6 = FurnaceChipVRC6;
class FurnaceSystemVRC7 {
constructor() {
this.systemId = FurnaceSystemEnum.NES;
this.name = "Konami VRC7";
this.chips = [new FurnaceChipVRC7(),];
}
}
exports.FurnaceSystemVRC7 = FurnaceSystemVRC7;
class FurnaceChipVRC7 {
constructor() {
this.chipId = FurnaceChipEnum.Ricoh2A03;
this.channels = [
{ longname: "FM 1", shortname: "F1", },
{ longname: "FM 2", shortname: "F2", },
{ longname: "FM 3", shortname: "F3", },
{ longname: "FM 4", shortname: "F4", },
{ longname: "FM 5", shortname: "F5", },
{ longname: "FM 6", shortname: "F6", },
];
this.volume = 64;
this.panning = 0;
this.flags = 0;
}
}
exports.FurnaceChipVRC7 = FurnaceChipVRC7;