From 2341a7ec25e85481251d803be42597981d2bb9db Mon Sep 17 00:00:00 2001 From: TheMas3212 Date: Sun, 24 Sep 2023 20:57:51 +1000 Subject: NES, SNES, Genesis and Extra Packets --- src/packets/nes.ts | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 src/packets/nes.ts (limited to 'src/packets/nes.ts') diff --git a/src/packets/nes.ts b/src/packets/nes.ts new file mode 100644 index 0000000..30b1418 --- /dev/null +++ b/src/packets/nes.ts @@ -0,0 +1,85 @@ +import { PACKET_TYPES } from "../constants"; +import { encodeString, readBoolean, readString, readUint16, readUint8, writeBoolean, writeUint16, writeUint8 } from "../utils"; +import { TASDPacket, buildBuffer } from "./utils"; + +export class NESLatchFilterPacket implements TASDPacket { + constructor(public time: number) {} + get key() { + return PACKET_TYPES.NES_LATCH_FILTER; + } + get size() { + return 2; + } + static fromBuffer(buffer: Uint8Array) { + return new this(readUint16(buffer, 0)); + } + toBuffer(g_keylen: number): Uint8Array { + const payload = new Uint8Array(2); + writeUint16(this.time, payload, 0); + return buildBuffer(g_keylen, this.key, payload); + } + toString(): string { + return `NESLatchFilter ${this.time}`; + } +} + +export class NESClockFilterPacket implements TASDPacket { + constructor(public time: number) {} + get key() { + return PACKET_TYPES.NES_CLOCK_FILTER; + } + get size() { + return 1; + } + static fromBuffer(buffer: Uint8Array) { + return new this(readUint8(buffer, 0)); + } + toBuffer(g_keylen: number): Uint8Array { + const payload = new Uint8Array(1); + writeUint8(this.time, payload, 0); + return buildBuffer(g_keylen, this.key, payload); + } + toString(): string { + return `NESClockFilter ${this.time}`; + } +} + +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() { + return PACKET_TYPES.NES_GAME_GENIE_CODE; + } + get size() { + return this.code.length; + } + static fromBuffer(buffer: Uint8Array) { + return new this(readString(buffer, 0, buffer.length)); + } + toBuffer(g_keylen: number): Uint8Array { + return buildBuffer(g_keylen, this.key, encodeString(this.code)); + } + toString(): string { + return `NESGameGenieCode ${this.code}`; + } +} \ No newline at end of file -- cgit v1.2.3