From d78b5e9f718b476da74ec67e05def9ceb622270e Mon Sep 17 00:00:00 2001 From: TheMas3212 Date: Mon, 25 Sep 2023 12:38:37 +1000 Subject: Update to match specification as of 2023-09-25 Update TRANSITION Add PORT_OVERREAD Add SNES_LATCH_FILTER Remove SNES_OVERREAD Remove NES_OVERREAD --- src/packets/general.ts | 30 ++++++++++++++++++++++++++++-- src/packets/index.ts | 4 ++-- src/packets/input.ts | 33 +++++++++++++++++++++++---------- src/packets/nes.ts | 23 +---------------------- src/packets/snes.ts | 28 ++++++++++++++-------------- 5 files changed, 68 insertions(+), 50 deletions(-) (limited to 'src/packets') diff --git a/src/packets/general.ts b/src/packets/general.ts index 7e0cb1f..cf8d61e 100644 --- a/src/packets/general.ts +++ b/src/packets/general.ts @@ -1,5 +1,9 @@ import { PACKET_TYPES } from "../constants"; -import { encodeString, readBoolean, readString, readUint16, readUint32, readUint64, readUint8, writeBoolean, writeString, writeUint16, writeUint32, writeUint64, writeUint8 } from "../utils"; +import { + encodeString, readString, writeString, readBoolean, writeBoolean, + readUint8, writeUint8, readUint16, writeUint16, + readUint32, writeUint32, readUint64, writeUint64 +} from "../utils"; import { TASDPacket, buildBuffer } from "./utils"; export class ConsoleTypePacket implements TASDPacket { @@ -483,4 +487,26 @@ export class PortControllerPacket implements TASDPacket { toString() { return `PortController ${this.port}, 0x${this.type.toString(16).padStart(4, '0')}`; } -} \ No newline at end of file +} + +export class PortOverreadPacket implements TASDPacket { + constructor(public port: number, public high: boolean) {} + get key() { + return PACKET_TYPES.PORT_OVERREAD; + } + get size() { + return 2; + } + static fromBuffer(buffer: Uint8Array) { + return new this(readUint8(buffer, 0), readBoolean(buffer, 1)); + } + toBuffer(g_keylen: number): Uint8Array { + const payload = new Uint8Array(2); + writeUint8(this.port, payload, 0); + writeBoolean(this.high, payload, 1); + return buildBuffer(g_keylen, this.key, payload); + } + toString(): string { + return `PortOverreadPacket ${this.port}, ${this.high}`; + } +} diff --git a/src/packets/index.ts b/src/packets/index.ts index 71ede01..a8ae2bd 100644 --- a/src/packets/index.ts +++ b/src/packets/index.ts @@ -40,14 +40,14 @@ export function parse(type: number, buffer: Uint8Array): TASDPacket { case PACKET_TYPES.MOVIE_LICENSE: return general.MovieLicensePacket.fromBuffer(buffer); case PACKET_TYPES.MOVIE_FILE: return general.MovieFilePacket.fromBuffer(buffer); case PACKET_TYPES.PORT_CONTROLLER: return general.PortControllerPacket.fromBuffer(buffer); + case PACKET_TYPES.PORT_OVERREAD: return general.PortOverreadPacket.fromBuffer(buffer); // NES case PACKET_TYPES.NES_LATCH_FILTER: return nes.NESLatchFilterPacket.fromBuffer(buffer); case PACKET_TYPES.NES_CLOCK_FILTER: return nes.NESClockFilterPacket.fromBuffer(buffer); - case PACKET_TYPES.NES_OVERREAD: return nes.NESOverreadPacket.fromBuffer(buffer); case PACKET_TYPES.NES_GAME_GENIE_CODE: return nes.NESGameGenieCodePacket.fromBuffer(buffer); // SNES + case PACKET_TYPES.SNES_LATCH_FILTER: return snes.SNESLatchFilterPacket.fromBuffer(buffer); case PACKET_TYPES.SNES_CLOCK_FILTER: return snes.SNESClockFilterPacket.fromBuffer(buffer); - case PACKET_TYPES.SNES_OVERREAD: return snes.SNESOverreadPacket.fromBuffer(buffer); case PACKET_TYPES.SNES_GAME_GENIE_CODE: return snes.SNESGameGenieCodePacket.fromBuffer(buffer); case PACKET_TYPES.SNES_LATCH_TRAIN: return snes.SNESLatchTrainPacket.fromBuffer(buffer); // Genesis diff --git a/src/packets/input.ts b/src/packets/input.ts index 7d02a2e..e2e712d 100644 --- a/src/packets/input.ts +++ b/src/packets/input.ts @@ -25,7 +25,12 @@ export class InputChunkPacket implements TASDPacket { } export class InputMomentPacket implements TASDPacket { - constructor(public port: number, public indexType: number, public index: bigint, public inputs: Uint8Array) {} + constructor( + public port: number, + public indexType: number, + public index: bigint, + public inputs: Uint8Array + ) {} get key() { return PACKET_TYPES.INPUT_MOMENT; } @@ -53,26 +58,34 @@ export class InputMomentPacket implements TASDPacket { } export class TransitionPacket implements TASDPacket { - constructor(public indexType: number, public index: bigint, public type: number, public data: Uint8Array) {} + constructor( + public indexType: number, + public port: number, + public index: bigint, + public type: number, + public data: Uint8Array + ) {} get key() { return PACKET_TYPES.TRANSITION; } get size() { - return 10 + this.data.length; + return 11 + this.data.length; } static fromBuffer(buffer: Uint8Array) { const indexType = readUint8(buffer, 0); - const index = readUint64(buffer, 1); - const type = readUint8(buffer, 9); - const data = buffer.subarray(10); - return new this(indexType, index, type, data); + const port = readUint8(buffer, 1); + const index = readUint64(buffer, 2); + const type = readUint8(buffer, 10); + const data = buffer.subarray(11); + return new this(indexType, port, index, type, data); } toBuffer(g_keylen: number): Uint8Array { const payload = new Uint8Array(this.size); writeUint8(this.indexType, payload, 0); - writeUint64(this.index, payload, 1); - writeUint8(this.type, payload, 9); - payload.set(this.data, 10); + writeUint8(this.port, payload, 1); + writeUint64(this.index, payload, 2); + writeUint8(this.type, payload, 10); + payload.set(this.data, 11); return buildBuffer(g_keylen, this.key, payload); } toString(): string { diff --git a/src/packets/nes.ts b/src/packets/nes.ts index 30b1418..5c15966 100644 --- a/src/packets/nes.ts +++ b/src/packets/nes.ts @@ -1,5 +1,5 @@ import { PACKET_TYPES } from "../constants"; -import { encodeString, readBoolean, readString, readUint16, readUint8, writeBoolean, writeUint16, writeUint8 } from "../utils"; +import { encodeString, readString, readUint16, readUint8, writeUint16, writeUint8 } from "../utils"; import { TASDPacket, buildBuffer } from "./utils"; export class NESLatchFilterPacket implements TASDPacket { @@ -44,27 +44,6 @@ export class NESClockFilterPacket implements TASDPacket { } } -export class NESOverreadPacket implements TASDPacket { - constructor(public high: boolean) {} - get key() { - return PACKET_TYPES.NES_OVERREAD; - } - get size() { - return 1; - } - static fromBuffer(buffer: Uint8Array) { - return new this(readBoolean(buffer, 0)); - } - toBuffer(g_keylen: number): Uint8Array { - const payload = new Uint8Array(1); - writeBoolean(this.high, payload, 0); - return buildBuffer(g_keylen, this.key, payload); - } - toString(): string { - return `NESOverread ${this.high}`; - } -} - export class NESGameGenieCodePacket implements TASDPacket { constructor(public code: string) {} get key() { diff --git a/src/packets/snes.ts b/src/packets/snes.ts index 07ee91b..5235a79 100644 --- a/src/packets/snes.ts +++ b/src/packets/snes.ts @@ -1,46 +1,46 @@ import { PACKET_TYPES } from "../constants"; -import { encodeString, readBoolean, readString, readUint64, readUint8, writeBoolean, writeUint64, writeUint8 } from "../utils"; +import { encodeString, readString, readUint16, readUint64, readUint8, writeUint16, writeUint64, writeUint8 } from "../utils"; import { TASDPacket, buildBuffer } from "./utils"; -export class SNESClockFilterPacket implements TASDPacket { +export class SNESLatchFilterPacket implements TASDPacket { constructor(public time: number) {} get key() { - return PACKET_TYPES.SNES_CLOCK_FILTER; + return PACKET_TYPES.SNES_LATCH_FILTER; } get size() { - return 1; + return 2; } static fromBuffer(buffer: Uint8Array) { - return new this(readUint8(buffer, 0)); + return new this(readUint16(buffer, 0)); } toBuffer(g_keylen: number): Uint8Array { - const payload = new Uint8Array(1); - writeUint8(this.time, payload, 0); + const payload = new Uint8Array(2); + writeUint16(this.time, payload, 0); return buildBuffer(g_keylen, this.key, payload); } toString(): string { - return `SNESClockFilter ${this.time}`; + return `SNESLatchFilter ${this.time}`; } } -export class SNESOverreadPacket implements TASDPacket { - constructor(public high: boolean) {} +export class SNESClockFilterPacket implements TASDPacket { + constructor(public time: number) {} get key() { - return PACKET_TYPES.SNES_OVERREAD; + return PACKET_TYPES.SNES_CLOCK_FILTER; } get size() { return 1; } static fromBuffer(buffer: Uint8Array) { - return new this(readBoolean(buffer, 0)); + return new this(readUint8(buffer, 0)); } toBuffer(g_keylen: number): Uint8Array { const payload = new Uint8Array(1); - writeBoolean(this.high, payload, 0); + writeUint8(this.time, payload, 0); return buildBuffer(g_keylen, this.key, payload); } toString(): string { - return `SNESOverread ${this.high}`; + return `SNESClockFilter ${this.time}`; } } -- cgit v1.2.3