TASD File Format Specification | October 2023 | |
Grey, et al. | Informational | [Page] |
The TASD file format is used for storing "Tool Assisted Speedrun" or "Tool Assisted Superplay" (TAS) data for TAS replay devices to replay on physical video game console hardware. The format is defined to be expandable for future needs. The format is also defined to be parsable by programs that do not understand portions of the format, whether that is due to incomplete support of the format specification or due to new features being added to later versions of the specification at a later date.¶
This document defines the file format specification for TASD files.¶
The Tool Assisted Speedrun Dump (TASD) interchange format is a file format for storing data to allow "Tool Assisted Speedruns" or "Tool Assisted Superplays" to be played on physical video game console hardware using TAS replay devices. Created to be hardware and software agnostic, the TASD interchange format uses a key-based, binary, packet format to break up pieces of information into easily-parsable and forward-compatible chunks. The format is extensible by simply defining additional keys or value types as necessary. When parsing the file, software can skip any packets whose key is unknown or unsupported.¶
Packets of a given type can be used multiple times or completely omitted as needed. This reusability eliminates the need of a predefined delimiter to separate pieces of data such as a list of TAS authors.¶
While files generated by emulator dump scripts should provide as much information as possible, because packets are optional, the file can be expanded later with any additional data as desired. No intermediary file format is necessary.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
Data Types:¶
We use the terms byte and octet interchangeably in this document.¶
Unless specified otherwise, all multi-octet integers are big-endian.¶
We use the terms Tool Assisted Speedrun, Tool Assisted Superplay and TAS interchangeably in this document.¶
In subsections of (Section 4.2), the term "in direct form" is used. That term is defined to mean a packet in a TASD file directly (first order packet) rather than a packet inside a TRANSITION or MOVIE_TRANSITION packet (second order packet).¶
String values MUST use UTF-8 encoding. If an example of a string value is given, the example will be between quotation marks. The quotation marks are not included in the string. Not all content between quotations will be string value examples, so be aware of that when continuing through this document.¶
Unsigned and signed integers can have different bit widths. For instance, an 8-bit integer can be used in one part of the specification and a 64-bit integer can be used in another part of the specification.¶
Boolean values MUST be a single octet with the value of 0
for FALSE or 1
for TRUE.¶
[N octets]
[00 7F FF]
00
, 7F
, and FF
in that order.¶
In packet diagrams, a single octet is represented with a box like this:¶
+-----+ | Var | <-- Vertical bars MAY be missing +-----+¶
In packet diagrams, an arbitrary number of octets are represented with a box like this:¶
+=====+ | Var | +=====+¶
In packet diagrams, boxes can be connected like these examples:¶
+-----------+-----------+ | Var 1 (B) | Var 2 (I) | +-----------+-----------+¶
+-----+-----+===========+ | Var 1 (N) | Var 2 (S) | +-----+-----+===========+¶
In packet diagrams, boxes MAY have relative offset values above them like in the following example:¶
0 1 2... +-----+-----+===========+ | Var 1 (N) | Var 2 (S) | +-----+-----+===========+¶
Packet diagrams MAY be split into multiple lined sections like in the following example:¶
0 1 2 3 +-----------+-----------+-----------+-----------+ | Var 1 (N) | Var 2 (I) | Var 3 (B) | Var 4 (I) | ... +-----------+-----------+-----------+-----------+ 4 5 +-----------+===========+ | Var 5 (N) | Var 6 (S) | +-----------+===========+¶
...
) on the same text row as the variable names to signify that the packet diagram is continuing.¶
This file format's primary goal is to provide a comprehensive and replay device agnostic TAS movie controller input dump format that is usable for any console. Additional goals include:¶
Consideration is also given to how usable the format would be for the software that interacts with replay devices (examples: methods of ingestion/parsing, ease of ingestion/parsing in various languages).¶
Most existing formats are either incomplete for some verification needs or don't exist at all for some consoles. A format commonly used for NES console verifications (r08) only encodes 2 standard controllers worth of sequential data and a format commonly used for SNES console verifications (r16m) only encodes up to 8 standard controllers worth of sequential data. There is no built in way to store RESET timing information or indicate additional settings/information. Non-standard controllers are also not supported in commonly used formats.¶
For consoles not as popular as the NES and SNES, controller input formats would frequently be written in a way that is meant only to work and not in a "standard" way. While that process works for a specific device, it's less than ideal for redistribution of console replays so that others (especially with differing TAS replay devices) can also verify the same TAS.¶
TASD files MUST begin with a header. The header MUST be followed by 0 or more packets.¶
0 1 2 3 4 5 6 7... +-+-+-+-+-+-+-+=============+ | Header (A) | Packets (A) | +-+-+-+-+-+-+-+=============+ Header (Binary Data) [7 octets] Packets (Binary Data) [? octets]¶
The TASD file header MUST be in the following format:¶
0 1 2 3 4 5 6 +----+----+----+----+------+------+--------------+ | Magic Number (A) | Version (N) | G_KEYLEN (N) | +----+----+----+----+------+------+--------------+ Magic Number (Binary Data) [4 octets] Version (Unsigned Integer) [2 octets] G_KEYLEN (Unsigned Integer) [1 octet]¶
Each packet MUST be in the following format:¶
+=========+----------+==========+=============+ | Key (A) | PEXP (N) | PLEN (N) | Payload (A) | +=========+----------+==========+=============+ Key (Binary Data) [G_KEYLEN octets] PEXP (Unsigned Integer) [1 octet] PLEN (Unsigned Integer) [PEXP octets] Payload (Binary Data) [PLEN octets]¶
All packets are OPTIONAL.¶
[00 01]
[00 02]
[00 03]
[00 04]
[00 05]
[00 06]
[00 07]
[00 08]
[00 09]
[00 0A]
[00 0B]
[00 0C]
[00 0D]
[00 0E]
[00 0F]
[00 10]
[00 11]
[00 12]
[00 13]
[00 14]
[00 15]
[00 F0]
[00 F1]
[08 04]
[00 01]
- CONSOLE_TYPE[00 02]
- CONSOLE_REGION[00 03]
- GAME_TITLE[00 04]
- ROM_NAME[00 05]
- ATTRIBUTION[00 06]
- CATEGORY[00 07]
- EMULATOR_NAME[00 08]
- EMULATOR_VERSION[00 09]
- EMULATOR_CORE[00 0A]
- TAS_LAST_MODIFIED[00 0B]
- DUMP_CREATED[00 0C]
- DUMP_LAST_MODIFIED[00 0D]
- TOTAL_FRAMES[00 0E]
- RERECORDS[00 0F]
- SOURCE_LINK[00 10]
- BLANK_FRAMES[00 11]
- VERIFIED[00 12]
- MEMORY_INIT[00 13]
- GAME_IDENTIFIER[00 14]
- MOVIE_LICENSE[00 15]
- MOVIE_FILE[00 F0]
- PORT_CONTROLLER[00 F1]
- PORT_OVERREAD[01 01]
- NES_LATCH_FILTER[01 02]
- NES_CLOCK_FILTER[01 04]
- NES_GAME_GENIE_CODE[02 01]
- SNES_LATCH_FILTER[02 02]
- SNES_CLOCK_FILTER[02 04]
- SNES_GAME_GENIE_CODE[02 05]
- SNES_LATCH_TRAIN[08 04]
- GENESIS_GAME_GENIE_CODE[FE 01]
- INPUT_CHUNK[FE 02]
- INPUT_MOMENT[FE 03]
- TRANSITION[FE 04]
- LAG_FRAME_CHUNK[FE 05]
- MOVIE_TRANSITION[FF 01]
- COMMENT[FF FE]
- EXPERIMENTAL[FF FF]
- UNSPECIFIEDCONSOLE_TYPE packets MUST be in the following format:¶
0 1... +-------------+==========+ | Console (A) | Name (S) | +-------------+==========+ Console (Binary Data): [1 octet] [01] - NES <Nintendo Entertainment System> [02] - SNES <Super Nintendo> [03] - N64 <Nintendo 64> [04] - GC <GameCube> [05] - GB <Game Boy> [06] - GBC <Game Boy Color> [07] - GBA <Game Boy Advance> [08] - Genesis <Sega Genesis/Sega Mega Drive> [09] - A2600 <Atari 2600> [FF] - Custom Name (String) [PLEN - 1 octets]¶
[FF]
to specify a console that is not in the pre-specified console types.¶
[FF]
.¶
CONSOLE_REGION packets MUST be in the following format:¶
0 +------------------+ | Video Signal (A) | +------------------+ Video Signal (Binary Data): [1 octet] [01] - NTSC [02] - PAL [FF] - Other/Unknown¶
GAME_TITLE packets MUST be in the following format:¶
0... +===========+ | Title (S) | +===========+ Title (String) [PLEN octets]¶
ROM_NAME packets MUST be in the following format:¶
0... +==========+ | Name (S) | +==========+ Name (String) [PLEN octets]¶
CATEGORY packets MUST be in the following format:¶
0... +==============+ | Category (S) | +==============+ Category (String) [PLEN octets]¶
EMULATOR_NAME packets MUST be in the following format:¶
0... +==========+ | Name (S) | +==========+ Name (String) [PLEN octets]¶
EMULATOR_VERSION packets MUST be in the following format:¶
0... +=============+ | Version (S) | +=============+ Version (String) [PLEN octets]¶
EMULATOR_CORE packets MUST be in the following format:¶
0... +==========+ | Core (S) | +==========+ Core (String) [PLEN octets]¶
TAS_LAST_MODIFIED packets MUST be in the following format:¶
0 1 2 3 4 5 6 7 +--+--+--+--+--+--+--+--+ | Unix Timestamp (I) | +--+--+--+--+--+--+--+--+ Unix Timestamp (Signed Integer) [8 octets]¶
DUMP_CREATED packets MUST be in the following format:¶
0 1 2 3 4 5 6 7 +--+--+--+--+--+--+--+--+ | Unix Timestamp (I) | +--+--+--+--+--+--+--+--+ Unix Timestamp (Signed Integer) [8 octets]¶
DUMP_LAST_MODIFIED packets MUST be in the following format:¶
0 1 2 3 4 5 6 7 +--+--+--+--+--+--+--+--+ | Unix Timestamp (I) | +--+--+--+--+--+--+--+--+ Unix Timestamp (Signed Integer) [8 octets]¶
TOTAL_FRAMES packets MUST be in the following format:¶
0 1 2 3 +---+---+---+---+ | Frames (N) | +---+---+---+---+ Frames (Unsigned Integer) [4 octets]¶
RERECORDS packets MUST be in the following format:¶
0 1 2 3 +---+---+---+---+ | Rerecords (N) | +---+---+---+---+ Rerecords (Unsigned Integer) [4 octets]¶
SOURCE_LINK packets MUST be in the following format:¶
0... +==========+ | Link (S) | +==========+ Link (String) [PLEN octets]¶
BLANK_FRAMES packets MUST be in the following format:¶
0 1 +------+------+ | Frames (I) | +------+------+ Frames (Signed Integer) [2 octets]¶
VERIFIED packets MUST be in the following format:¶
0 +--------------+ | Verified (B) | +--------------+ Verified (Boolean) [1 octet]¶
MEMORY_INIT packets MUST be in the following format:¶
0 1 2 3 +---------------+------+------+--------------+ | Data Type (A) | Device (A) | Required (B) | ... +---------------+------+------+--------------+ 4 5... 5+NLEN... +----------+==========+==========+ | NLEN (N) | Name (S) | Data (A) | +----------+==========+==========+ Data Type (Binary Data): [1 octet] [01] - No Initialization Required [02] - All [00] [03] - All [FF] [04] - [00 00 00 00 FF FF FF FF] Repeating [05] - Random [FF] - Custom Device (Binary Data): [2 octets] [01 01] - NES CPU RAM [01 02] - NES Cartridge Save Data [02 01] - SNES CPU RAM [02 02] - SNES Cartridge Save Data [05 01] - GB CPU RAM [05 02] - GB Cartridge Save Data [06 01] - GBC CPU RAM [06 02] - GBC Cartridge Save Data [07 01] - GBA CPU RAM [07 02] - GBA Cartridge Save Data [08 01] - Genesis CPU RAM [08 02] - Genesis Cartridge Save Data [09 01] - A2600 CPU RAM [09 02] - A2600 Cartridge Save Data [FF FF] - Custom/Other Device Required (Boolean) [1 octet] NLEN (Unsigned Integer) [1 octet] Name (String) [NLEN octets] Data (Binary Data) [PLEN - NLEN - 5 octets]¶
[FF]
, Data SHOULD be empty (0 octet length binary data).¶
[FF FF]
, Name SHOULD NOT be empty (0 octet length string).¶
[FF]
, Data SHOULD be empty (0 octet length binary data).¶
GAME_IDENTIFIER packets MUST be in the following format:¶
0 1 2 3... 3+NLEN... +----------+--------------+----------+==========+================+ | Type (A) | Encoding (A) | NLEN (N) | Name (S) | Identifier (A) | +----------+--------------+----------+==========+================+ Type (Binary Data): [1 octet] [01] - MD5 Hash [02] - SHA1 Hash [03] - SHA224 Hash [04] - SHA256 Hash [05] - SHA384 Hash [06] - SHA512 Hash [07] - SHA512/224 Hash [08] - SHA512/256 Hash [09] - SHA3-224 Hash [0A] - SHA3-256 Hash [0B] - SHA3-384 Hash [0C] - SHA3-512 Hash [0D] - SHAKE-128 Hash [0E] - SHAKE-256 Hash [FF] - Other Encoding (Binary Data): [1 octet] [01] - Raw Binary [02] - Base 16 (Case Insensitive) [03] - Base 32 (Case Insensitive) [04] - Base 64 NLEN (Unsigned Integer) [1 octet] Name (String) [NLEN octets] Identifier (Binary Data) [PLEN - 2 octets]¶
[FF]
, Name SHOULD be empty (0 octet length binary data).¶
MOVIE_LICENSE packets MUST be in the following format:¶
0 +=============+ | License (S) | +=============+ License (String) [PLEN octet]¶
MOVIE_FILE packets MUST be in the following format:¶
0 1... 1+NLEN... +----------+==========+=============+ | NLEN (N) | Name (S) | Data (A) | +----------+==========+=============+ NLEN (Unsigned Integer) [1 octet] Name (String) [NLEN octets] Data (Binary Data) [PLEN - NLEN - 1 octets]¶
PORT_CONTROLLER packets MUST be in the following format:¶
0 1 2 +----------+-----+-----+ | Port (N) | Type (A) | +----------+-----+-----+ Port (Unsigned Integer) [1 octet] Type (Binary Data): [2 octets] [01 01] - NES Standard Controller [01 02] - NES Four Score [01 03] - (RESERVED) NES Zapper [01 04] - (RESERVED) NES Power Pad [01 05] - (RESERVED) Famicom Family BASIC Keyboard [02 01] - SNES Standard Controller [02 02] - SNES Super Multitap [02 03] - SNES Mouse [02 04] - (RESERVED) SNES Superscope [03 01] - N64 Standard Controller [03 02] - N64 Standard Controller with Rumble Pak [03 03] - N64 Standard Controller with Controller Pak [03 04] - N64 Standard Controller with Transfer Pak [03 05] - N64 Mouse [03 06] - (RESERVED) N64 Voice Recognition Unit (VRU) [03 07] - (RESERVED) N64 RandNet Keyboard [03 08] - N64 Densha de Go [04 01] - GC Standard Controller [04 02] - (RESERVED) GC Keyboard [05 01] - GB Gamepad [06 01] - GBC Gamepad [07 01] - GBA Gamepad [08 01] - Genesis (Mega Drive) 3-Button [08 02] - Genesis (Mega Drive) 6-Button [09 01] - A2600 Joystick [09 02] - (RESERVED) A2600 Paddle [09 03] - A2600 Keyboard Controller [FF FF] - Other/Unspecified¶
PORT_OVERREAD packets MUST be in the following format:¶
0 1 +----------+----------+ | Port (N) | High (B) | +----------+----------+ Port (N) [1 octet] High (Boolean) [1 octet]¶
NES_LATCH_FILTER packets MUST be in the following format:¶
0 1 +-----+-----+ | Time (N) | +-----+-----+ Time (Unsigned Integer) [2 octets]¶
NES_CLOCK_FILTER packets MUST be in the following format:¶
0 +----------+ | Time (N) | +----------+ Time (Unsigned Integer) [1 octet]¶
SNES_LATCH_FILTER packets MUST be in the following format:¶
0 1 +-----+-----+ | Time (N) | +-----+-----+ Time (Unsigned Integer) [2 octets]¶
SNES_CLOCK_FILTER packets MUST be in the following format:¶
0 +----------+ | Time (N) | +----------+ Time (Unsigned Integer) [1 octet]¶
SNES_GAME_GENIE_CODE packets MUST be in the following format:¶
0... +==========+ | Code (S) | +==========+ Code (String) [PLEN octets]¶
SNES_LATCH_TRAIN packets MUST be in the following format:¶
0... +====================+ | Latch Trains ([]N) | +====================+ Latch Trains (List of Unsigned Integers) [PLEN octets]¶
A single SNES_LATCH_TRAIN packet MAY contain up to every Latch Train of a SNES TAS movie console replay and MAY contain fewer than every Latch Train of a SNES TAS movie console replay. There MAY be more than 1 SNES_LATCH_TRAIN packet.¶
INPUT_CHUNK packets MUST be in the following format:¶
0 1... +----------+============+ | Port (N) | Inputs (A) | +----------+============+ Port (Unsigned Integer) [1 octet] Inputs (Binary Data) [PLEN - 1 octets]¶
A single INPUT_CHUNK packet MAY contain up to every input of a TAS movie console replay and MAY contain fewer than every input of a TAS movie console replay. If there are more than 1 INPUT_CHUNK packets, the INPUT_CHUNK packets MUST be in order of the TAS movie console replay inputs, where earlier inputs in the TAS movie console replay are earlier in the TASD file and later inputs in the TAS movie console replay are later in the TASD file.¶
The input data contained in Inputs is divided up based on the PORT_CONTROLLER type corresponding to the Port number. Refer to Section 5 for each available type and the number of bytes used for each instance of controller input. Keep in mind that the PORT_CONTROLLER type can be changed using TRANSITION packets.¶
INPUT_MOMENT packets MUST be in the following format:¶
0 1 2 3 4 5 7 8 9 10 +----------+----------------+--+--+--+--+--+--+--+--+ | Port (N) | Index Type (A) | Index (N) | ... +----------+----------------+--+--+--+--+--+--+--+--+ 11... +============+ | Inputs (B) | +============+ Port (Unsigned Integer) [1 octet] Index Type (Binary Data): [1 octet] [01] - Frame [02] - Cycle Count [03] - Milliseconds [04] - Microseconds * 10 Index (Unsigned Integer) [8 octets] Inputs (Binary Data) [PLEN - 10 octets]¶
The input data contained in Inputs is divided up based on the PORT_CONTROLLER type corresponding to the Port number. Refer to Section 5 for each available type and the number of bytes used for each instance of controller input. Keep in mind that the PORT_CONTROLLER type can be changed using TRANSITION packets.¶
TRANSITION packets MUST be in the following format:¶
0 1 2 3 4 5 6 7 8 9 +----------------+----------+--+--+--+--+--+--+--+--+ | Index Type (A) | Port (N) | Index (N) | ... +----------------+----------+--+--+--+--+--+--+--+--+ 10 11... +----------+============+ | Type (A) | Packet (A) | +----------+============+ Index Type (Binary Data): [1 octet] [01] - Frame [02] - Cycle Count [03] - Milliseconds [04] - Microseconds * 10 [05] - INPUT_CHUNK Index Port (Unsigned Integer) [1 octet] Index (Unsigned Integer) [8 octets] Type (Binary Data): [1 octet] [01] - Soft Reset [02] - Power Reset [03] - Restart TASD File [FF] - Packet Derived Inner Packet (Binary Data) [PLEN - 11 octets]¶
[05]
, Port MUST be 1-indexed Port number, otherwise Port MAY be any value.¶
[05]
, Index MUST be the byte offset of INPUT_CHUNK data from INPUT_CHUNK packets for the controller port specified by Port.¶
[FF]
, the transition action will be interpreting a TASD packet.¶
[FF]
, Inner Packet SHOULD be a TASD packet. Inner Packet MUST NOT be a INPUT_CHUNK, INPUT_MOMENT, TRANSITION, LAG_FRAME_CHUNK, or MOVIE_TRANSITION packet.¶
LAG_FRAME_CHUNK packets MUST be in the following format:¶
0 1 2 3 4 5 6 7 +----+----+----+----+--+--+--+--+ | Movie Frame (N) | Count (N) | +----+----+----+----+--+--+--+--+ Movie Frame (Unsigned Integer) [4 octets] Count (Unsigned Integer) [4 octets]¶
Emulators typically consider a "lag frame" to be any frame in which the emulator believes the game does not poll/read controller inputs.¶
MOVIE_TRANSITION packets MUST be in the following format:¶
0 1 2 3 4 5... +----+----+----+----+----------+==================+ | Movie Frame (N) | Type (A) | Inner Packet (A) | +----+----+----+----+----------+==================+ Movie Frame (Unsigned Integer) [4 octets] Type (Binary Data): [1 octet] [01] - Soft Reset [02] - Power Reset [03] - Restart TASD File [FF] - Packet Derived Inner Packet (Binary Data) [PLEN - 5 octets]¶
[FF]
, the transition action will be interpreting a TASD packet.¶
[FF]
, Inner Packet SHOULD be a TASD packet. Inner Packet MUST NOT be a INPUT_CHUNK, INPUT_MOMENT, TRANSITION, LAG_FRAME_CHUNK, or MOVIE_TRANSITION packet.¶
COMMENT packets MUST be in the following format:¶
0 +=============+ | Comment (S) | +=============+ Comment (String) [PLEN octet]¶
EXPERIMENTAL packets MUST be in the following format:¶
0 +------------------+ | Experimental (B) | +------------------+ Experimental (Boolean) [1 octet]¶
UNSPECIFIED packets MUST be in the following format:¶
0... +======================+ | Unspecified Data (A) | +======================+ Unspecified Data (Binary Data) [PLEN octets]¶
A forward slash (/) is used to signify active low. As an example, if a bit is labeled as /A, the bit MUST be 0 if the A button is pressed and MUST be 1 if the A button is not pressed.¶
Multi-octet controller inputs are in little-endian order¶
Bit order for octets in controller inputs are high-order (MSB) (Most significant bit to least significant bit), so bit 7 MUST be the left-most bit of the octet and bit 0 MUST be the right-most bit of the octet.¶
Single Input Length: 1 Octet¶
Octet 0¶
Single Input Length: 3 Octets¶
Octet 0¶
Octet 1¶
Octet 2¶
Controller N is the controller port number. The NES Four Score allows players 1 and 3 to input buttons on controller port 1 and players 2 and 4 to input buttons on controller port 2. Controller N-1 on controller port 1 is Player 1, Controller N-2 on controller port 1 is Player 3, Controller N-1 on controller port 2 is Player 2, and Controller N-2 on controller port 2 is Player 4.¶
Single Input Length: 2 Octets¶
Octet 0¶
Octet 1¶
Single Input Length: 5 Octets¶
Octet 0 :¶
Octet 1¶
Octet 2¶
Octet 3¶
Octet 4¶
Controller N is the controller port number on the console that the Multitap is connected to. Controller N-1...N-4 are the controller ports 1...4 on the Multitap. Two Multitap ports are polled simultaneously by the game - either 1 and 2, or 3 and 4. The I/O Pin state in octet 0 MUST be 1 for multitap ports 1 and 2, or 0 for ports 3 and 4.¶
Single Input Length: 4 Octets¶
Octet 0¶
Octet 1¶
Octet 2¶
Octet 3¶
Single Input Length: 4 Octets¶
Octet 0¶
Octet 1¶
Octet 2¶
Octet 3¶
Single Input Length: 4 Octets¶
Octet 0¶
Octet 1¶
Octet 2¶
Octet 3¶
Single Input Length: 4 Octets¶
Octet 0¶
Octet 1¶
Octet 2¶
Octet 3¶
Single Input Length: 4 Octets¶
Octet 0¶
Octet 1¶
Octet 2¶
Octet 3¶
Single Input Length: 4 Octets¶
Octet 0¶
Octet 1¶
Octet 2¶
Octet 3¶
Single Input Length: 4 Octets¶
Octet 0¶
Octet 1¶
Octet 2¶
Octet 3¶
Single Input Length: 8 Octets¶
Octet 0¶
Octet 1¶
Octet 2¶
Octet 3¶
Octet 4¶
Octet 5¶
Octet 6¶
Octet 7¶
Single Input Length: 1 Octet¶
Octet 0¶
Single Input Length: 1 Octet¶
Octet 0¶
Single Input Length: 2 Octets¶
Octet 0¶
Octet 1¶
Single Input Length: 1 Octet¶
Octet 0¶
Single Input Length: 2 Octets¶
Octet 0¶
Octet 1¶
Single Input Length: 1 Octet¶
Octet 0¶
Single Input Length: 1 Octet¶
Octet 0¶
Copyright (c) 2021-2023, Vi Grey, Bigbass, and rasteri¶
All rights reserved.¶
Redistribution and use of this documentation in source (XML format) and/or "compiled" forms (TXT, PDF, HTML, etc), with or without modification, are permitted provided that the following conditions are met:¶
THIS DOCUMENTATION IS PROVIDED BY THE AUTHOR(S) "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.¶