From b65c44c4a8e86a4af2f2d96c26a1fe16753637ba Mon Sep 17 00:00:00 2001 From: Vi Grey Date: Sun, 24 Sep 2023 18:52:21 +0000 Subject: Add 2 new packets. Remove 2 packets. Changed - Specify INPUT_CHUNK offset for Index Value of TRANSITION packet Fixed - EXPERIMENTAL packet drawing error and packet value length Added - PORT_LATCH_FILTER - Port value to TRANSITION packet Removed - SNES_LATCH_FILTER and NES_LATCH_FILTER --- CHANGELOG.md | 22 ++- docs/latest/draft-tasd-spec.html | 216 +++++++++++++------------- docs/latest/draft-tasd-spec.txt | 150 +++++++++--------- docs/tasd-spec-0001/draft-tasd-spec-0001.html | 216 +++++++++++++------------- docs/tasd-spec-0001/draft-tasd-spec-0001.txt | 150 +++++++++--------- src/docs/draft-tasd-spec-0001.xml | 114 +++++++------- tools/lua/tasd-fceux-dumpscript.lua | 22 ++- 7 files changed, 476 insertions(+), 414 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fdcaea..d654b09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,22 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), although currently without version numbers added. +## 2023-09-24 + +### Changed +- Specify INPUT_CHUNK offset for Index Value of TRANSITION packet + +### Fixed +- EXPERIMENTAL packet drawing error and packet value length + +### Added +- SNES_LATCH_FILTER +- Port value to TRANSITION packet + +### Removed +- SNES_OVERREAD and NES_OVERREAD + + ## 2023-09-18 ### Changed - Specify that PEXP MUST be greater than 0 @@ -50,15 +66,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## 2023-07-03 ### Added -- SNES\_LATCH\_TRAIN to spec +- SNES_LATCH_TRAIN to spec ### Removed - PDF files from `docs/` - PDF file generation via Makefile ### Fixed -- Correct length for Data of MEMORY\_INIT in spec -- Correct length of Name of MOVIE\_FILE packet in spec +- Correct length for Data of MEMORY_INIT in spec +- Correct length of Name of MOVIE_FILE packet in spec ## 2022-09-26 diff --git a/docs/latest/draft-tasd-spec.html b/docs/latest/draft-tasd-spec.html index 5a35421..7fec116 100644 --- a/docs/latest/draft-tasd-spec.html +++ b/docs/latest/draft-tasd-spec.html @@ -1207,7 +1207,7 @@ li > p:last-of-type:only-child {
Independent TAS Console Replay Research Group
Published:
- +
Authors:
@@ -1382,6 +1382,9 @@ li > p:last-of-type:only-child {
  • 4.3.1.22. PORT_CONTROLLER Packet

    +
  • +
  • +

    4.3.1.23. PORT_OVERREAD Packet

  • @@ -1395,10 +1398,7 @@ li > p:last-of-type:only-child {

    4.3.2.2.  NES_CLOCK_FILTER Packet

  • -

    4.3.2.3.  NES_OVERREAD Packet

    -
  • -
  • -

    4.3.2.4.  NES_GAME_GENIE_CODE Packet

    +

    4.3.2.3.  NES_GAME_GENIE_CODE Packet

  • @@ -1406,10 +1406,10 @@ li > p:last-of-type:only-child {

    4.3.3.  SNES Specific Key Payload Formats

    -[01 03] - NES_OVERREAD
    -
    Specifies whether a high or low signal SHOULD be sent to the NES console if the console clocks the replay device for more input buttons than are expected for the latch. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.2.3). -
    -
    -
    [01 04] - NES_GAME_GENIE_CODE
    -
    Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.2.4). +
    Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.2.3).
    @@ -2214,13 +2210,13 @@ li > p:last-of-type:only-child {
    -[02 02] - SNES_CLOCK_FILTER
    -
    Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.3.1). +[01 01] - SNES_LATCH_FILTER +
    Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.3.1).
    -[02 03] - SNES_OVERREAD
    -
    Specifies whether a high or low signal SHOULD be sent to the SNES console if the console clocks the replay device for more input buttons than are expected for the latch. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.3.2). +[02 02] - SNES_CLOCK_FILTER +
    Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.3.2).
    @@ -2875,7 +2871,7 @@ li > p:last-of-type:only-child { | Type (A) | Base (A) | Identifier (A) | +----------+----------+================+ - Type (Binary Data): [1 octet] + Type (Binary Data): [1 octet] [01] - CRC-8 Checksum [02] - CRC-16 Checksum [03] - CRC-32 Checksum @@ -3047,6 +3043,35 @@ li > p:last-of-type:only-child {
    +
    +
    +
    +4.3.1.23. PORT_OVERREAD Packet +
    +

    PORT_OVERREAD packets MUST be in the following format:

    +
    +
    +          0          1
    +      +----------+----------+
    +      | Port (N) | High (B) |
    +      +----------+----------+
    +
    +      Port (N)                                [1 octet]
    +      High (Boolean)                          [1 octet]
    +
    +
    +
    +
    Port
    +
    Controller port number (Port number MUST be 1-indexed). +
    +
    +
    High
    +
    Boolean value that is TRUE if overread bits are set to high and FALSE if overread bits are set to low. +
    +
    +
    +
    +

    @@ -3100,37 +3125,13 @@ li > p:last-of-type:only-child {

    -
    -
    -
    -4.3.2.3. NES_OVERREAD Packet -
    -

    NES_OVERREAD packets MUST be in the following format:

    -
    -
    -           0
    -      +----------+
    -      | High (B) |
    -      +----------+
    -
    -      High (Boolean)                          [1 octet]
    -
    -
    -
    -
    High
    -
    Boolean value that is TRUE if overread bits are set to high and FALSE if overread bits are set to low. -
    -
    -
    -
    -
    -
    +
    -4.3.2.4. NES_GAME_GENIE_CODE Packet +4.3.2.3. NES_GAME_GENIE_CODE Packet
    -

    NES_GAME_GENIE_CODE packets MUST be in the following format:

    -
    +

    NES_GAME_GENIE_CODE packets MUST be in the following format:

    +
               0...
           +==========+
    @@ -3138,15 +3139,15 @@ li > p:last-of-type:only-child {
           +==========+
     
           Code (String)                           [PLEN octets]
    -
    +
    -
    -
    Code
    -
    Game Genie code (example: "AATOZA"). +
    +
    Code
    +
    Game Genie code (example: "AATOZA").
    -
    PLEN
    -
    Length of the packet payload. +
    PLEN
    +
    Length of the packet payload.
    @@ -3157,49 +3158,49 @@ li > p:last-of-type:only-child {

    4.3.3. SNES Specific Key Payload Formats

    -
    +
    -
    -4.3.3.1. SNES_CLOCK_FILTER Packet +
    +4.3.3.1. SNES_LATCH_FILTER Packet
    -

    SNES_CLOCK_FILTER packets MUST be in the following format:

    +

    SNES_LATCH_FILTER packets MUST be in the following format:

    -           0
    -      +----------+
    -      | Time (N) |
    -      +----------+
    +         0     1
    +      +-----+-----+
    +      | Time (N)  |
    +      +-----+-----+
     
    -      Time (Unsigned Integer)                 [1 octet]
    +      Time (Unsigned Integer)                 [2 octets]
     
    Time
    -
    Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds). +
    Latch filter length of time in microseconds.
    -
    +
    -
    -4.3.3.2. SNES_OVERREAD Packet +
    +4.3.3.2. SNES_CLOCK_FILTER Packet
    -

    SNES_OVERREAD packets MUST be in the following format:

    +

    SNES_CLOCK_FILTER packets MUST be in the following format:

                0
           +----------+
    -      | High (B) |
    +      | Time (N) |
           +----------+
     
    -      High (Boolean)                          [1 octet]
    +      Time (Unsigned Integer)                 [1 octet]
     
    -
    High
    -
    Boolean value that is TRUE if overread bits are set to high and FALSE if overread bits are set to low. +
    Time
    +
    Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).
    @@ -3394,14 +3395,14 @@ li > p:last-of-type:only-child {

    TRANSITION packets MUST be in the following format:

    -               0        1  2  3  4  5  6  7  8       9
    -      +----------------+--+--+--+--+--+--+--+--+----------+
    -      | Index Type (A) |       Index (N)       | Type (A) | ...
    -      +----------------+--+--+--+--+--+--+--+--+----------+
    -          10...
    -      +============+
    -      | Packet (A) |
    -      +============+
    +               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
    @@ -3409,13 +3410,14 @@ li > p:last-of-type:only-child {
              [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 - 10 octets]
    +      Inner Packet (Binary Data)              [PLEN - 11 octets]
     
    @@ -3423,20 +3425,24 @@ li > p:last-of-type:only-child {
    Determines specific timing type for start of transition.
    -
    Index
    -
    Time or offset value to start transition. +
    Port
    +
    Controller port number of input index. If Index Type is [05], Port MUST be 1-indexed Port number, otherwise Port MAY be any value.
    -
    Type
    -
    Type of transition. If Type is [FF], the transition action will be interpreting a TASD packet. +
    Index
    +
    Time or offset value to start transition. If Index Type is [05], Index MUST be the byte offset of INPUT_CHUNK data from INPUT_CHUNK packets for the controller port specified by Port.
    -
    Inner Packet
    -
    If Type is [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. +
    Type
    +
    Type of transition. If Type is [FF], the transition action will be interpreting a TASD packet.
    -
    PLEN
    -
    Length of the packet payload (Not Inner Packet length). +
    Inner Packet
    +
    If Type is [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. +
    +
    +
    PLEN
    +
    Length of the packet payload (Not Inner Packet length).
    @@ -3554,12 +3560,12 @@ li > p:last-of-type:only-child {

    EXPERIMENTAL packets MUST be in the following format:

    -              0...
    -      +==================+
    +               0
    +      +------------------+
           | Experimental (B) |
    -      +==================+
    +      +------------------+
     
    -      Experimental (Boolean)                  [PLEN octet]
    +      Experimental (Boolean)                  [1 octet]
     
    diff --git a/docs/latest/draft-tasd-spec.txt b/docs/latest/draft-tasd-spec.txt index f751bd2..f309c4b 100644 --- a/docs/latest/draft-tasd-spec.txt +++ b/docs/latest/draft-tasd-spec.txt @@ -7,7 +7,7 @@ Independent TAS Console Replay Research Group V. Grey Bigbass rasteri - 18 September 2023 + 24 September 2023 TASD File Format Specification Version 1 @@ -74,14 +74,14 @@ Table of Contents 4.3.1.20. MOVIE_LICENSE Packet 4.3.1.21. MOVIE_FILE Packet 4.3.1.22. PORT_CONTROLLER Packet + 4.3.1.23. PORT_OVERREAD Packet 4.3.2. NES Specific Key Payload Formats 4.3.2.1. NES_LATCH_FILTER Packet 4.3.2.2. NES_CLOCK_FILTER Packet - 4.3.2.3. NES_OVERREAD Packet - 4.3.2.4. NES_GAME_GENIE_CODE Packet + 4.3.2.3. NES_GAME_GENIE_CODE Packet 4.3.3. SNES Specific Key Payload Formats - 4.3.3.1. SNES_CLOCK_FILTER Packet - 4.3.3.2. SNES_OVERREAD Packet + 4.3.3.1. SNES_LATCH_FILTER Packet + 4.3.3.2. SNES_CLOCK_FILTER Packet 4.3.3.3. SNES_GAME_GENIE_CODE Packet 4.3.3.4. SNES_LATCH_TRAIN Packet 4.3.4. Genesis Specific Key Payload Formats @@ -406,18 +406,17 @@ Table of Contents [00 14] MOVIE_LICENSE [00 15] MOVIE_FILE [00 F0] PORT_CONTROLLER + [00 F1] PORT_OVERREAD 4.1.2. NES Specific Keys [01 01] NES_LATCH_FILTER [01 02] NES_CLOCK_FILTER - [01 03] NES_OVERREAD [01 04] NES_GAME_GENIE_CODE 4.1.3. SNES Specific Keys [02 02] SNES_CLOCK_FILTER - [02 03] SNES_OVERREAD [02 04] SNES_GAME_GENIE_CODE [02 05] SNES_LATCH_TRAIN @@ -570,6 +569,13 @@ Table of Contents and a *TASD* file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.22). + [00 F1] - PORT_OVERREAD + Specifies whether a high or low signal SHOULD be sent through a + specified controller port of the console if the console requests + more input data from the replay device through that controller + port than expected. This packet type is OPTIONAL. Discussed in + (Section 4.3.1.23). + 4.2.2. NES Specific Key Descriptions [01 01] - NES_LATCH_FILTER @@ -587,34 +593,27 @@ Table of Contents SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.2.2). - [01 03] - NES_OVERREAD - Specifies whether a high or low signal SHOULD be sent to the NES - console if the console clocks the replay device for more input - buttons than are expected for the latch. This packet type is - OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of this - packet type in direct form. Discussed in (Section 4.3.2.3). - [01 04] - NES_GAME_GENIE_CODE Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 of this packet - type. Discussed in (Section 4.3.2.4). + type. Discussed in (Section 4.3.2.3). 4.2.3. SNES Specific Key Descriptions + [01 01] - SNES_LATCH_FILTER + Specifies a latch filter time in microseconds for how long how + long to wait after a latch signal until new latch signals SHOULD + be accepted by the replay device. This packet type is OPTIONAL + and a *TASD* file SHOULD NOT contain more than 1 of this packet + type in direct form. Discussed in (Section 4.3.3.1). + [02 02] - SNES_CLOCK_FILTER Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses SHOULD be accepted by the replay device. This packet type is OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of this packet type in direct form. - Discussed in (Section 4.3.3.1). - - [02 03] - SNES_OVERREAD - Specifies whether a high or low signal SHOULD be sent to the SNES - console if the console clocks the replay device for more input - buttons than are expected for the latch. This packet type is - OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of this - packet type in direct form. Discussed in (Section 4.3.3.2). + Discussed in (Section 4.3.3.2). [02 04] - SNES_GAME_GENIE_CODE Specifies a Game Genie code for the TAS. This packet type is @@ -1084,7 +1083,7 @@ Table of Contents | Type (A) | Base (A) | Identifier (A) | +----------+----------+================+ - Type (Binary Data): [1 octet] + Type (Binary Data): [1 octet] [01] - CRC-8 Checksum [02] - CRC-16 Checksum [03] - CRC-32 Checksum @@ -1218,6 +1217,25 @@ Table of Contents version of the *TASD* file format protocol. Input formats for specific controller types are described in (Section 5). +4.3.1.23. PORT_OVERREAD Packet + + PORT_OVERREAD packets MUST be in the following format: + + 0 1 + +----------+----------+ + | Port (N) | High (B) | + +----------+----------+ + + Port (N) [1 octet] + High (Boolean) [1 octet] + + *Port* + Controller port number (*Port* number MUST be *1-indexed*). + + *High* + Boolean value that is *TRUE* if overread bits are set to high and + *FALSE* if overread bits are set to low. + 4.3.2. NES Specific Key Payload Formats 4.3.2.1. NES_LATCH_FILTER Packet @@ -1249,22 +1267,7 @@ Table of Contents Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds). -4.3.2.3. NES_OVERREAD Packet - - NES_OVERREAD packets MUST be in the following format: - - 0 - +----------+ - | High (B) | - +----------+ - - High (Boolean) [1 octet] - - *High* - Boolean value that is *TRUE* if overread bits are set to high and - *FALSE* if overread bits are set to low. - -4.3.2.4. NES_GAME_GENIE_CODE Packet +4.3.2.3. NES_GAME_GENIE_CODE Packet NES_GAME_GENIE_CODE packets MUST be in the following format: @@ -1283,35 +1286,34 @@ Table of Contents 4.3.3. SNES Specific Key Payload Formats -4.3.3.1. SNES_CLOCK_FILTER Packet +4.3.3.1. SNES_LATCH_FILTER Packet - SNES_CLOCK_FILTER packets MUST be in the following format: + SNES_LATCH_FILTER packets MUST be in the following format: - 0 - +----------+ - | Time (N) | - +----------+ + 0 1 + +-----+-----+ + | Time (N) | + +-----+-----+ - Time (Unsigned Integer) [1 octet] + Time (Unsigned Integer) [2 octets] *Time* - Clock filter length of time in tenths of a microsecond (units of - 0.1 microseconds or 100 nanoseconds). + Latch filter length of time in microseconds. -4.3.3.2. SNES_OVERREAD Packet +4.3.3.2. SNES_CLOCK_FILTER Packet - SNES_OVERREAD packets MUST be in the following format: + SNES_CLOCK_FILTER packets MUST be in the following format: 0 +----------+ - | High (B) | + | Time (N) | +----------+ - High (Boolean) [1 octet] + Time (Unsigned Integer) [1 octet] - *High* - Boolean value that is *TRUE* if overread bits are set to high and - *FALSE* if overread bits are set to low. + *Time* + Clock filter length of time in tenths of a microsecond (units of + 0.1 microseconds or 100 nanoseconds). 4.3.3.3. SNES_GAME_GENIE_CODE Packet @@ -1449,14 +1451,14 @@ Table of Contents TRANSITION packets MUST be in the following format: - 0 1 2 3 4 5 6 7 8 9 - +----------------+--+--+--+--+--+--+--+--+----------+ - | Index Type (A) | Index (N) | Type (A) | ... - +----------------+--+--+--+--+--+--+--+--+----------+ - 10... - +============+ - | Packet (A) | - +============+ + 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 @@ -1464,19 +1466,27 @@ Table of Contents [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 - 10 octets] + Inner Packet (Binary Data) [PLEN - 11 octets] *Input Type* Determines specific timing type for start of transition. + *Port* + Controller port number of input index. If *Index Type* is [05], + *Port* MUST be *1-indexed* Port number, otherwise *Port* MAY be + any value. + *Index* - Time or offset value to start transition. + Time or offset value to start transition. If *Index Type* is + [05], *Index* MUST be the byte offset of *INPUT_CHUNK* data from + *INPUT_CHUNK* packets for the controller port specified by *Port*. *Type* Type of transition. If *Type* is [FF], the transition action will @@ -1564,12 +1574,12 @@ Table of Contents EXPERIMENTAL packets MUST be in the following format: - 0... - +==================+ + 0 + +------------------+ | Experimental (B) | - +==================+ + +------------------+ - Experimental (Boolean) [PLEN octet] + Experimental (Boolean) [1 octet] *Experimental* Boolean data that is *TRUE* if the TASD file is using draft/ diff --git a/docs/tasd-spec-0001/draft-tasd-spec-0001.html b/docs/tasd-spec-0001/draft-tasd-spec-0001.html index 5a35421..7fec116 100644 --- a/docs/tasd-spec-0001/draft-tasd-spec-0001.html +++ b/docs/tasd-spec-0001/draft-tasd-spec-0001.html @@ -1207,7 +1207,7 @@ li > p:last-of-type:only-child {
    Independent TAS Console Replay Research Group
    Published:
    - +
    Authors:
    @@ -1382,6 +1382,9 @@ li > p:last-of-type:only-child {
  • 4.3.1.22. PORT_CONTROLLER Packet

    +
  • +
  • +

    4.3.1.23. PORT_OVERREAD Packet

  • @@ -1395,10 +1398,7 @@ li > p:last-of-type:only-child {

    4.3.2.2.  NES_CLOCK_FILTER Packet

  • -

    4.3.2.3.  NES_OVERREAD Packet

    -
  • -
  • -

    4.3.2.4.  NES_GAME_GENIE_CODE Packet

    +

    4.3.2.3.  NES_GAME_GENIE_CODE Packet

  • @@ -1406,10 +1406,10 @@ li > p:last-of-type:only-child {

    4.3.3.  SNES Specific Key Payload Formats

    @@ -1968,12 +1972,8 @@ li > p:last-of-type:only-child {
    NES_CLOCK_FILTER
    -
    [01 03]
    -
    NES_OVERREAD -
    -
    -
    [01 04]
    -
    NES_GAME_GENIE_CODE +
    [01 04]
    +
    NES_GAME_GENIE_CODE
    @@ -1987,16 +1987,12 @@ li > p:last-of-type:only-child {
    SNES_CLOCK_FILTER
    -
    [02 03]
    -
    SNES_OVERREAD -
    -
    -
    [02 04]
    -
    SNES_GAME_GENIE_CODE +
    [02 04]
    +
    SNES_GAME_GENIE_CODE
    -
    [02 05]
    -
    SNES_LATCH_TRAIN +
    [02 05]
    +
    SNES_LATCH_TRAIN
    @@ -2177,6 +2173,11 @@ li > p:last-of-type:only-child {
    [00 F0] - PORT_CONTROLLER
    Specifies the controller type in specific console controller ports for the TAS when played on hardware. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.22). +
    +
    +
    +[00 F1] - PORT_OVERREAD
    +
    Specifies whether a high or low signal SHOULD be sent through a specified controller port of the console if the console requests more input data from the replay device through that controller port than expected. This packet type is OPTIONAL. Discussed in (Section 4.3.1.23).
    @@ -2197,13 +2198,8 @@ li > p:last-of-type:only-child {
    -[01 03] - NES_OVERREAD
    -
    Specifies whether a high or low signal SHOULD be sent to the NES console if the console clocks the replay device for more input buttons than are expected for the latch. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.2.3). -
    -
    -
    [01 04] - NES_GAME_GENIE_CODE
    -
    Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.2.4). +
    Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.2.3).
    @@ -2214,13 +2210,13 @@ li > p:last-of-type:only-child {
    -[02 02] - SNES_CLOCK_FILTER
    -
    Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.3.1). +[01 01] - SNES_LATCH_FILTER +
    Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.3.1).
    -[02 03] - SNES_OVERREAD
    -
    Specifies whether a high or low signal SHOULD be sent to the SNES console if the console clocks the replay device for more input buttons than are expected for the latch. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.3.2). +[02 02] - SNES_CLOCK_FILTER +
    Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.3.2).
    @@ -2875,7 +2871,7 @@ li > p:last-of-type:only-child { | Type (A) | Base (A) | Identifier (A) | +----------+----------+================+ - Type (Binary Data): [1 octet] + Type (Binary Data): [1 octet] [01] - CRC-8 Checksum [02] - CRC-16 Checksum [03] - CRC-32 Checksum @@ -3047,6 +3043,35 @@ li > p:last-of-type:only-child {
    +
    +
    +
    +4.3.1.23. PORT_OVERREAD Packet +
    +

    PORT_OVERREAD packets MUST be in the following format:

    +
    +
    +          0          1
    +      +----------+----------+
    +      | Port (N) | High (B) |
    +      +----------+----------+
    +
    +      Port (N)                                [1 octet]
    +      High (Boolean)                          [1 octet]
    +
    +
    +
    +
    Port
    +
    Controller port number (Port number MUST be 1-indexed). +
    +
    +
    High
    +
    Boolean value that is TRUE if overread bits are set to high and FALSE if overread bits are set to low. +
    +
    +
    +
    +

    @@ -3100,37 +3125,13 @@ li > p:last-of-type:only-child {

    -
    -
    -
    -4.3.2.3. NES_OVERREAD Packet -
    -

    NES_OVERREAD packets MUST be in the following format:

    -
    -
    -           0
    -      +----------+
    -      | High (B) |
    -      +----------+
    -
    -      High (Boolean)                          [1 octet]
    -
    -
    -
    -
    High
    -
    Boolean value that is TRUE if overread bits are set to high and FALSE if overread bits are set to low. -
    -
    -
    -
    -
    -
    +
    -4.3.2.4. NES_GAME_GENIE_CODE Packet +4.3.2.3. NES_GAME_GENIE_CODE Packet
    -

    NES_GAME_GENIE_CODE packets MUST be in the following format:

    -
    +

    NES_GAME_GENIE_CODE packets MUST be in the following format:

    +
               0...
           +==========+
    @@ -3138,15 +3139,15 @@ li > p:last-of-type:only-child {
           +==========+
     
           Code (String)                           [PLEN octets]
    -
    +
    -
    -
    Code
    -
    Game Genie code (example: "AATOZA"). +
    +
    Code
    +
    Game Genie code (example: "AATOZA").
    -
    PLEN
    -
    Length of the packet payload. +
    PLEN
    +
    Length of the packet payload.
    @@ -3157,49 +3158,49 @@ li > p:last-of-type:only-child {

    4.3.3. SNES Specific Key Payload Formats

    -
    +
    -
    -4.3.3.1. SNES_CLOCK_FILTER Packet +
    +4.3.3.1. SNES_LATCH_FILTER Packet
    -

    SNES_CLOCK_FILTER packets MUST be in the following format:

    +

    SNES_LATCH_FILTER packets MUST be in the following format:

    -           0
    -      +----------+
    -      | Time (N) |
    -      +----------+
    +         0     1
    +      +-----+-----+
    +      | Time (N)  |
    +      +-----+-----+
     
    -      Time (Unsigned Integer)                 [1 octet]
    +      Time (Unsigned Integer)                 [2 octets]
     
    Time
    -
    Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds). +
    Latch filter length of time in microseconds.
    -
    +
    -
    -4.3.3.2. SNES_OVERREAD Packet +
    +4.3.3.2. SNES_CLOCK_FILTER Packet
    -

    SNES_OVERREAD packets MUST be in the following format:

    +

    SNES_CLOCK_FILTER packets MUST be in the following format:

                0
           +----------+
    -      | High (B) |
    +      | Time (N) |
           +----------+
     
    -      High (Boolean)                          [1 octet]
    +      Time (Unsigned Integer)                 [1 octet]
     
    -
    High
    -
    Boolean value that is TRUE if overread bits are set to high and FALSE if overread bits are set to low. +
    Time
    +
    Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).
    @@ -3394,14 +3395,14 @@ li > p:last-of-type:only-child {

    TRANSITION packets MUST be in the following format:

    -               0        1  2  3  4  5  6  7  8       9
    -      +----------------+--+--+--+--+--+--+--+--+----------+
    -      | Index Type (A) |       Index (N)       | Type (A) | ...
    -      +----------------+--+--+--+--+--+--+--+--+----------+
    -          10...
    -      +============+
    -      | Packet (A) |
    -      +============+
    +               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
    @@ -3409,13 +3410,14 @@ li > p:last-of-type:only-child {
              [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 - 10 octets]
    +      Inner Packet (Binary Data)              [PLEN - 11 octets]
     
    @@ -3423,20 +3425,24 @@ li > p:last-of-type:only-child {
    Determines specific timing type for start of transition.
    -
    Index
    -
    Time or offset value to start transition. +
    Port
    +
    Controller port number of input index. If Index Type is [05], Port MUST be 1-indexed Port number, otherwise Port MAY be any value.
    -
    Type
    -
    Type of transition. If Type is [FF], the transition action will be interpreting a TASD packet. +
    Index
    +
    Time or offset value to start transition. If Index Type is [05], Index MUST be the byte offset of INPUT_CHUNK data from INPUT_CHUNK packets for the controller port specified by Port.
    -
    Inner Packet
    -
    If Type is [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. +
    Type
    +
    Type of transition. If Type is [FF], the transition action will be interpreting a TASD packet.
    -
    PLEN
    -
    Length of the packet payload (Not Inner Packet length). +
    Inner Packet
    +
    If Type is [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. +
    +
    +
    PLEN
    +
    Length of the packet payload (Not Inner Packet length).
    @@ -3554,12 +3560,12 @@ li > p:last-of-type:only-child {

    EXPERIMENTAL packets MUST be in the following format:

    -              0...
    -      +==================+
    +               0
    +      +------------------+
           | Experimental (B) |
    -      +==================+
    +      +------------------+
     
    -      Experimental (Boolean)                  [PLEN octet]
    +      Experimental (Boolean)                  [1 octet]
     
    diff --git a/docs/tasd-spec-0001/draft-tasd-spec-0001.txt b/docs/tasd-spec-0001/draft-tasd-spec-0001.txt index f751bd2..f309c4b 100644 --- a/docs/tasd-spec-0001/draft-tasd-spec-0001.txt +++ b/docs/tasd-spec-0001/draft-tasd-spec-0001.txt @@ -7,7 +7,7 @@ Independent TAS Console Replay Research Group V. Grey Bigbass rasteri - 18 September 2023 + 24 September 2023 TASD File Format Specification Version 1 @@ -74,14 +74,14 @@ Table of Contents 4.3.1.20. MOVIE_LICENSE Packet 4.3.1.21. MOVIE_FILE Packet 4.3.1.22. PORT_CONTROLLER Packet + 4.3.1.23. PORT_OVERREAD Packet 4.3.2. NES Specific Key Payload Formats 4.3.2.1. NES_LATCH_FILTER Packet 4.3.2.2. NES_CLOCK_FILTER Packet - 4.3.2.3. NES_OVERREAD Packet - 4.3.2.4. NES_GAME_GENIE_CODE Packet + 4.3.2.3. NES_GAME_GENIE_CODE Packet 4.3.3. SNES Specific Key Payload Formats - 4.3.3.1. SNES_CLOCK_FILTER Packet - 4.3.3.2. SNES_OVERREAD Packet + 4.3.3.1. SNES_LATCH_FILTER Packet + 4.3.3.2. SNES_CLOCK_FILTER Packet 4.3.3.3. SNES_GAME_GENIE_CODE Packet 4.3.3.4. SNES_LATCH_TRAIN Packet 4.3.4. Genesis Specific Key Payload Formats @@ -406,18 +406,17 @@ Table of Contents [00 14] MOVIE_LICENSE [00 15] MOVIE_FILE [00 F0] PORT_CONTROLLER + [00 F1] PORT_OVERREAD 4.1.2. NES Specific Keys [01 01] NES_LATCH_FILTER [01 02] NES_CLOCK_FILTER - [01 03] NES_OVERREAD [01 04] NES_GAME_GENIE_CODE 4.1.3. SNES Specific Keys [02 02] SNES_CLOCK_FILTER - [02 03] SNES_OVERREAD [02 04] SNES_GAME_GENIE_CODE [02 05] SNES_LATCH_TRAIN @@ -570,6 +569,13 @@ Table of Contents and a *TASD* file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.22). + [00 F1] - PORT_OVERREAD + Specifies whether a high or low signal SHOULD be sent through a + specified controller port of the console if the console requests + more input data from the replay device through that controller + port than expected. This packet type is OPTIONAL. Discussed in + (Section 4.3.1.23). + 4.2.2. NES Specific Key Descriptions [01 01] - NES_LATCH_FILTER @@ -587,34 +593,27 @@ Table of Contents SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.2.2). - [01 03] - NES_OVERREAD - Specifies whether a high or low signal SHOULD be sent to the NES - console if the console clocks the replay device for more input - buttons than are expected for the latch. This packet type is - OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of this - packet type in direct form. Discussed in (Section 4.3.2.3). - [01 04] - NES_GAME_GENIE_CODE Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 of this packet - type. Discussed in (Section 4.3.2.4). + type. Discussed in (Section 4.3.2.3). 4.2.3. SNES Specific Key Descriptions + [01 01] - SNES_LATCH_FILTER + Specifies a latch filter time in microseconds for how long how + long to wait after a latch signal until new latch signals SHOULD + be accepted by the replay device. This packet type is OPTIONAL + and a *TASD* file SHOULD NOT contain more than 1 of this packet + type in direct form. Discussed in (Section 4.3.3.1). + [02 02] - SNES_CLOCK_FILTER Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses SHOULD be accepted by the replay device. This packet type is OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of this packet type in direct form. - Discussed in (Section 4.3.3.1). - - [02 03] - SNES_OVERREAD - Specifies whether a high or low signal SHOULD be sent to the SNES - console if the console clocks the replay device for more input - buttons than are expected for the latch. This packet type is - OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of this - packet type in direct form. Discussed in (Section 4.3.3.2). + Discussed in (Section 4.3.3.2). [02 04] - SNES_GAME_GENIE_CODE Specifies a Game Genie code for the TAS. This packet type is @@ -1084,7 +1083,7 @@ Table of Contents | Type (A) | Base (A) | Identifier (A) | +----------+----------+================+ - Type (Binary Data): [1 octet] + Type (Binary Data): [1 octet] [01] - CRC-8 Checksum [02] - CRC-16 Checksum [03] - CRC-32 Checksum @@ -1218,6 +1217,25 @@ Table of Contents version of the *TASD* file format protocol. Input formats for specific controller types are described in (Section 5). +4.3.1.23. PORT_OVERREAD Packet + + PORT_OVERREAD packets MUST be in the following format: + + 0 1 + +----------+----------+ + | Port (N) | High (B) | + +----------+----------+ + + Port (N) [1 octet] + High (Boolean) [1 octet] + + *Port* + Controller port number (*Port* number MUST be *1-indexed*). + + *High* + Boolean value that is *TRUE* if overread bits are set to high and + *FALSE* if overread bits are set to low. + 4.3.2. NES Specific Key Payload Formats 4.3.2.1. NES_LATCH_FILTER Packet @@ -1249,22 +1267,7 @@ Table of Contents Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds). -4.3.2.3. NES_OVERREAD Packet - - NES_OVERREAD packets MUST be in the following format: - - 0 - +----------+ - | High (B) | - +----------+ - - High (Boolean) [1 octet] - - *High* - Boolean value that is *TRUE* if overread bits are set to high and - *FALSE* if overread bits are set to low. - -4.3.2.4. NES_GAME_GENIE_CODE Packet +4.3.2.3. NES_GAME_GENIE_CODE Packet NES_GAME_GENIE_CODE packets MUST be in the following format: @@ -1283,35 +1286,34 @@ Table of Contents 4.3.3. SNES Specific Key Payload Formats -4.3.3.1. SNES_CLOCK_FILTER Packet +4.3.3.1. SNES_LATCH_FILTER Packet - SNES_CLOCK_FILTER packets MUST be in the following format: + SNES_LATCH_FILTER packets MUST be in the following format: - 0 - +----------+ - | Time (N) | - +----------+ + 0 1 + +-----+-----+ + | Time (N) | + +-----+-----+ - Time (Unsigned Integer) [1 octet] + Time (Unsigned Integer) [2 octets] *Time* - Clock filter length of time in tenths of a microsecond (units of - 0.1 microseconds or 100 nanoseconds). + Latch filter length of time in microseconds. -4.3.3.2. SNES_OVERREAD Packet +4.3.3.2. SNES_CLOCK_FILTER Packet - SNES_OVERREAD packets MUST be in the following format: + SNES_CLOCK_FILTER packets MUST be in the following format: 0 +----------+ - | High (B) | + | Time (N) | +----------+ - High (Boolean) [1 octet] + Time (Unsigned Integer) [1 octet] - *High* - Boolean value that is *TRUE* if overread bits are set to high and - *FALSE* if overread bits are set to low. + *Time* + Clock filter length of time in tenths of a microsecond (units of + 0.1 microseconds or 100 nanoseconds). 4.3.3.3. SNES_GAME_GENIE_CODE Packet @@ -1449,14 +1451,14 @@ Table of Contents TRANSITION packets MUST be in the following format: - 0 1 2 3 4 5 6 7 8 9 - +----------------+--+--+--+--+--+--+--+--+----------+ - | Index Type (A) | Index (N) | Type (A) | ... - +----------------+--+--+--+--+--+--+--+--+----------+ - 10... - +============+ - | Packet (A) | - +============+ + 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 @@ -1464,19 +1466,27 @@ Table of Contents [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 - 10 octets] + Inner Packet (Binary Data) [PLEN - 11 octets] *Input Type* Determines specific timing type for start of transition. + *Port* + Controller port number of input index. If *Index Type* is [05], + *Port* MUST be *1-indexed* Port number, otherwise *Port* MAY be + any value. + *Index* - Time or offset value to start transition. + Time or offset value to start transition. If *Index Type* is + [05], *Index* MUST be the byte offset of *INPUT_CHUNK* data from + *INPUT_CHUNK* packets for the controller port specified by *Port*. *Type* Type of transition. If *Type* is [FF], the transition action will @@ -1564,12 +1574,12 @@ Table of Contents EXPERIMENTAL packets MUST be in the following format: - 0... - +==================+ + 0 + +------------------+ | Experimental (B) | - +==================+ + +------------------+ - Experimental (Boolean) [PLEN octet] + Experimental (Boolean) [1 octet] *Experimental* Boolean data that is *TRUE* if the TASD file is using draft/ diff --git a/src/docs/draft-tasd-spec-0001.xml b/src/docs/draft-tasd-spec-0001.xml index d541237..e63af21 100644 --- a/src/docs/draft-tasd-spec-0001.xml +++ b/src/docs/draft-tasd-spec-0001.xml @@ -248,6 +248,7 @@
    [00 14]
    MOVIE_LICENSE
    [00 15]
    MOVIE_FILE
    [00 F0]
    PORT_CONTROLLER
    +
    [00 F1]
    PORT_OVERREAD
    @@ -255,7 +256,6 @@
    [01 01]
    NES_LATCH_FILTER
    [01 02]
    NES_CLOCK_FILTER
    -
    [01 03]
    NES_OVERREAD
    [01 04]
    NES_GAME_GENIE_CODE
    @@ -263,7 +263,6 @@ SNES Specific Keys
    [02 02]
    SNES_CLOCK_FILTER
    -
    [02 03]
    SNES_OVERREAD
    [02 04]
    SNES_GAME_GENIE_CODE
    [02 05]
    SNES_LATCH_TRAIN
    @@ -342,6 +341,8 @@
    Specifies the TAS movie data. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type. Discussed in ().
    [00 F0] - PORT_CONTROLLER
    Specifies the controller type in specific console controller ports for the TAS when played on hardware. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in ().
    +
    [00 F1] - PORT_OVERREAD
    +
    Specifies whether a high or low signal SHOULD be sent through a specified controller port of the console if the console requests more input data from the replay device through that controller port than expected. This packet type is OPTIONAL. Discussed in ().
    @@ -351,8 +352,6 @@
    Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in ().
    [01 02] - NES_CLOCK_FILTER
    Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in ().
    -
    [01 03] - NES_OVERREAD
    -
    Specifies whether a high or low signal SHOULD be sent to the NES console if the console clocks the replay device for more input buttons than are expected for the latch. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in ().
    [01 04] - NES_GAME_GENIE_CODE
    Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in ().
    @@ -360,10 +359,10 @@
    SNES Specific Key Descriptions
    +
    [01 01] - SNES_LATCH_FILTER
    +
    Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in ().
    [02 02] - SNES_CLOCK_FILTER
    Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in ().
    -
    [02 03] - SNES_OVERREAD
    -
    Specifies whether a high or low signal SHOULD be sent to the SNES console if the console clocks the replay device for more input buttons than are expected for the latch. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in ().
    [02 04] - SNES_GAME_GENIE_CODE
    Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in ().
    [02 05] - SNES_LATCH_TRAIN
    @@ -790,7 +789,7 @@ | Type (A) | Base (A) | Identifier (A) | +----------+----------+================+ - Type (Binary Data): [1 octet] + Type (Binary Data): [1 octet] [01] - CRC-8 Checksum [02] - CRC-16 Checksum [03] - CRC-32 Checksum @@ -918,6 +917,25 @@
    Specifies the controller type connected to the Port. (RESERVED) specifies that the controller type is not described in this document, but the byte values are reserved for a later version of the TASD file format protocol. Input formats for specific controller types are described in ().
    +
    + PORT_OVERREAD Packet + PORT_OVERREAD packets MUST be in the following format: + + +
    +
    Port
    +
    Controller port number (Port number MUST be 1-indexed).
    +
    High
    +
    Boolean value that is TRUE if overread bits are set to high and FALSE if overread bits are set to low.
    +
    +
    NES Specific Key Payload Formats @@ -953,22 +971,6 @@
    Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).
    -
    - NES_OVERREAD Packet - NES_OVERREAD packets MUST be in the following format: - - -
    -
    High
    -
    Boolean value that is TRUE if overread bits are set to high and FALSE if overread bits are set to low.
    -
    -
    NES_GAME_GENIE_CODE Packet NES_GAME_GENIE_CODE packets MUST be in the following format: @@ -990,36 +992,36 @@
    SNES Specific Key Payload Formats -
    - SNES_CLOCK_FILTER Packet - SNES_CLOCK_FILTER packets MUST be in the following format: +
    + SNES_LATCH_FILTER Packet + SNES_LATCH_FILTER packets MUST be in the following format: + Time (Unsigned Integer) [2 octets]]]>
    Time
    -
    Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).
    +
    Latch filter length of time in microseconds.
    -
    - SNES_OVERREAD Packet - SNES_OVERREAD packets MUST be in the following format: +
    + SNES_CLOCK_FILTER Packet + SNES_CLOCK_FILTER packets MUST be in the following format: + Time (Unsigned Integer) [1 octet]]]>
    -
    High
    -
    Boolean value that is TRUE if overread bits are set to high and FALSE if overread bits are set to low.
    +
    Time
    +
    Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).
    @@ -1145,14 +1147,14 @@ TRANSITION Packet TRANSITION packets MUST be in the following format: + Inner Packet (Binary Data) [PLEN - 11 octets]]]>
    Input Type
    Determines specific timing type for start of transition.
    - +
    Port
    +
    Controller port number of input index. If Index Type is [05], Port MUST be 1-indexed Port number, otherwise Port MAY be any value.
    Index
    -
    Time or offset value to start transition.
    +
    Time or offset value to start transition. If Index Type is [05], Index MUST be the byte offset of INPUT_CHUNK data from INPUT_CHUNK packets for the controller port specified by Port.
    Type
    Type of transition. If Type is [FF], the transition action will be interpreting a TASD packet.
    Inner Packet
    @@ -1255,12 +1259,12 @@ EXPERIMENTAL Packet EXPERIMENTAL packets MUST be in the following format: + Experimental (Boolean) [1 octet]]]>
    Experimental
    @@ -1914,6 +1918,8 @@