diff options
Diffstat (limited to 'docs/tasd-spec-0001/draft-tasd-spec-0001.txt')
| -rw-r--r-- | docs/tasd-spec-0001/draft-tasd-spec-0001.txt | 488 |
1 files changed, 254 insertions, 234 deletions
diff --git a/docs/tasd-spec-0001/draft-tasd-spec-0001.txt b/docs/tasd-spec-0001/draft-tasd-spec-0001.txt index 0a9abf8..8288fc9 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 - 14 September 2023 + 17 September 2023 TASD File Format Specification Version 1 @@ -33,99 +33,100 @@ Table of Contents 1.1.1. Notation and Vocabulary 1.2. Motivations 1.2.1. Problems With Existing Formats - 2. Header - 3. Packets - 3.1. Assigned Packet Keys Without Descriptions - 3.1.1. General Keys - 3.1.2. NES Specific Keys - 3.1.3. SNES Specific Keys - 3.1.4. Genesis Specific Keys - 3.1.5. Input Frame/Timing Keys - 3.1.6. Extraneous Keys - 3.2. Assigned Packet Keys With Descriptions - 3.2.1. General Key Descriptions - 3.2.2. NES Specific Key Descriptions - 3.2.3. SNES Specific Key Descriptions - 3.2.4. Genesis Specific Key Descriptions - 3.2.5. Input Frame/Timing Key Descriptions - 3.2.6. Extraneous Key Descriptions - 3.3. Packet Payload Formats - 3.3.1. General Key Payload Formats - 3.3.1.1. CONSOLE_TYPE Packet - 3.3.1.2. CONSOLE_REGION Packet - 3.3.1.3. GAME_TITLE Packet - 3.3.1.4. ROM_NAME Packet - 3.3.1.5. ATTRIBUTION Packet - 3.3.1.6. CATEGORY Packet - 3.3.1.7. EMULATOR_NAME Packet - 3.3.1.8. EMULATOR_VERSION Packet - 3.3.1.9. EMULATOR_CORE Packet - 3.3.1.10. TAS_LAST_MODIFIED Packet - 3.3.1.11. DUMP_CREATED Packet - 3.3.1.12. DUMP_LAST_MODIFIED Packet - 3.3.1.13. TOTAL_FRAMES Packet - 3.3.1.14. RERECORDS Packet - 3.3.1.15. SOURCE_LINK Packet - 3.3.1.16. BLANK_FRAMES Packet - 3.3.1.17. VERIFIED Packet - 3.3.1.18. MEMORY_INIT Packet - 3.3.1.19. GAME_IDENTIFIER Packet - 3.3.1.20. MOVIE_LICENSE Packet - 3.3.1.21. MOVIE_FILE Packet - 3.3.1.22. PORT_CONTROLLER Packet - 3.3.2. NES Specific Key Payload Formats - 3.3.2.1. NES_LATCH_FILTER Packet - 3.3.2.2. NES_CLOCK_FILTER Packet - 3.3.2.3. NES_OVERREAD Packet - 3.3.2.4. NES_GAME_GENIE_CODE Packet - 3.3.3. SNES Specific Key Payload Formats - 3.3.3.1. SNES_CLOCK_FILTER Packet - 3.3.3.2. SNES_OVERREAD Packet - 3.3.3.3. SNES_GAME_GENIE_CODE Packet - 3.3.3.4. SNES_LATCH_TRAIN Packet - 3.3.4. Genesis Specific Key Payload Formats - 3.3.4.1. GENESIS_GAME_GENIE_CODE Packet - 3.3.5. Input Frame/Timing Key Payload Formats - 3.3.5.1. INPUT_CHUNK Packet - 3.3.5.2. INPUT_MOMENT Packet - 3.3.5.3. TRANSITION Packet - 3.3.5.4. LAG_FRAME_CHUNK Packet - 3.3.5.5. MOVIE_TRANSITION - 3.3.6. Extraneous Key Payload Formats - 3.3.6.1. COMMENT Packet - 3.3.6.2. EXPERIMENTAL Packet - 3.3.6.3. UNSPECIFIED Packet - 4. Controller Input Formats - 4.1. NES/Famicom Controller Types - 4.1.1. NES Standard Controller - 4.1.2. NES Four Score - 4.2. SNES Controller Types - 4.2.1. SNES Standard Controller - 4.2.2. SNES Mouse - 4.2.3. SNES Super Multitap - 4.3. N64 Controller Types - 4.3.1. N64 Standard Controller - 4.3.2. N64 Standard Controller with Rumble - 4.3.3. N64 Standard Controller with Controller Pak - 4.3.4. N64 Standard Controller with Transfer Pak - 4.3.5. N64 Mouse - 4.3.6. N64 Densha de Go - 4.4. GameCube Controller Types - 4.4.1. GameCube Standard Controller - 4.5. Game Boy Controller Types - 4.5.1. GB Standard Controller - 4.6. Game Boy Color Controller Types - 4.6.1. GBC Standard Controller - 4.7. Game Boy Advance Controller Types - 4.7.1. GBA Standard Controller - 4.8. Genesis Controller Types - 4.8.1. Genesis (Mega Drive) 3-Button - 4.8.2. Genesis (Mega Drive) 6-Button - 4.9. Atari 2600 Controller Types - 4.9.1. A2600 Joystick - 4.9.2. A2600 Keyboard Controller - 5. References - 5.1. Normative References + 2. Structure + 3. Header + 4. Packets + 4.1. Assigned Packet Keys Without Descriptions + 4.1.1. General Keys + 4.1.2. NES Specific Keys + 4.1.3. SNES Specific Keys + 4.1.4. Genesis Specific Keys + 4.1.5. Input Frame/Timing Keys + 4.1.6. Extraneous Keys + 4.2. Assigned Packet Keys With Descriptions + 4.2.1. General Key Descriptions + 4.2.2. NES Specific Key Descriptions + 4.2.3. SNES Specific Key Descriptions + 4.2.4. Genesis Specific Key Descriptions + 4.2.5. Input Frame/Timing Key Descriptions + 4.2.6. Extraneous Key Descriptions + 4.3. Packet Payload Formats + 4.3.1. General Key Payload Formats + 4.3.1.1. CONSOLE_TYPE Packet + 4.3.1.2. CONSOLE_REGION Packet + 4.3.1.3. GAME_TITLE Packet + 4.3.1.4. ROM_NAME Packet + 4.3.1.5. ATTRIBUTION Packet + 4.3.1.6. CATEGORY Packet + 4.3.1.7. EMULATOR_NAME Packet + 4.3.1.8. EMULATOR_VERSION Packet + 4.3.1.9. EMULATOR_CORE Packet + 4.3.1.10. TAS_LAST_MODIFIED Packet + 4.3.1.11. DUMP_CREATED Packet + 4.3.1.12. DUMP_LAST_MODIFIED Packet + 4.3.1.13. TOTAL_FRAMES Packet + 4.3.1.14. RERECORDS Packet + 4.3.1.15. SOURCE_LINK Packet + 4.3.1.16. BLANK_FRAMES Packet + 4.3.1.17. VERIFIED Packet + 4.3.1.18. MEMORY_INIT Packet + 4.3.1.19. GAME_IDENTIFIER Packet + 4.3.1.20. MOVIE_LICENSE Packet + 4.3.1.21. MOVIE_FILE Packet + 4.3.1.22. PORT_CONTROLLER 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.3. SNES Specific Key Payload Formats + 4.3.3.1. SNES_CLOCK_FILTER Packet + 4.3.3.2. SNES_OVERREAD 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 + 4.3.4.1. GENESIS_GAME_GENIE_CODE Packet + 4.3.5. Input Frame/Timing Key Payload Formats + 4.3.5.1. INPUT_CHUNK Packet + 4.3.5.2. INPUT_MOMENT Packet + 4.3.5.3. TRANSITION Packet + 4.3.5.4. LAG_FRAME_CHUNK Packet + 4.3.5.5. MOVIE_TRANSITION + 4.3.6. Extraneous Key Payload Formats + 4.3.6.1. COMMENT Packet + 4.3.6.2. EXPERIMENTAL Packet + 4.3.6.3. UNSPECIFIED Packet + 5. Controller Input Formats + 5.1. NES/Famicom Controller Types + 5.1.1. NES Standard Controller + 5.1.2. NES Four Score + 5.2. SNES Controller Types + 5.2.1. SNES Standard Controller + 5.2.2. SNES Mouse + 5.2.3. SNES Super Multitap + 5.3. N64 Controller Types + 5.3.1. N64 Standard Controller + 5.3.2. N64 Standard Controller with Rumble + 5.3.3. N64 Standard Controller with Controller Pak + 5.3.4. N64 Standard Controller with Transfer Pak + 5.3.5. N64 Mouse + 5.3.6. N64 Densha de Go + 5.4. GameCube Controller Types + 5.4.1. GameCube Standard Controller + 5.5. Game Boy Controller Types + 5.5.1. GB Standard Controller + 5.6. Game Boy Color Controller Types + 5.6.1. GBC Standard Controller + 5.7. Game Boy Advance Controller Types + 5.7.1. GBA Standard Controller + 5.8. Genesis Controller Types + 5.8.1. Genesis (Mega Drive) 3-Button + 5.8.2. Genesis (Mega Drive) 6-Button + 5.9. Atari 2600 Controller Types + 5.9.1. A2600 Joystick + 5.9.2. A2600 Keyboard Controller + 6. References + 6.1. Normative References Copyright Notice Authors' Addresses @@ -177,7 +178,7 @@ Table of Contents We use the terms *Tool Assisted Speedrun*, *Tool Assisted Superplay* and *TAS* interchangeably in this document. - In subsections of (Section 3.2), the term "in direct form" is used. + 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). @@ -304,10 +305,29 @@ Table of Contents (especially with differing TAS replay devices) can also verify the same TAS. -2. Header +2. Structure - *TASD* files MUST include a header, which MUST be in the following - format: + *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] + + *Header* + 7 octet header as defined in Section 3. + + *Packets* + List of 0 or more packets. Refer to Section 4 for packet + definitions. + +3. Header + + The *TASD* file header MUST be in the following format: 0 1 2 3 4 5 6 +----+----+----+----+------+------+--------------+ @@ -329,9 +349,9 @@ Table of Contents Global length of *Key* values of packets. G_KEYLEN currently MUST be a value of 2. -3. Packets +4. Packets - Packets MUST be in the following format: + Each packet MUST be in the following format: +=========+----------+==========+=============+ | Key (A) | PEXP (N) | PLEN (N) | Payload (A) | @@ -355,14 +375,14 @@ Table of Contents Payload/Content of the packet. *G_KEYLEN* - Length of *Key* in packets and is specified in the *TASD* file + Length of *Key* in each packet and is specified in the *TASD* file header. All packets are OPTIONAL. -3.1. Assigned Packet Keys Without Descriptions +4.1. Assigned Packet Keys Without Descriptions -3.1.1. General Keys +4.1.1. General Keys [00 01] CONSOLE_TYPE [00 02] CONSOLE_REGION @@ -387,25 +407,25 @@ Table of Contents [00 15] MOVIE_FILE [00 F0] PORT_CONTROLLER -3.1.2. NES Specific Keys +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 -3.1.3. SNES Specific Keys +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 -3.1.4. Genesis Specific Keys +4.1.4. Genesis Specific Keys [08 04] GENESIS_GAME_GENIE_CODE -3.1.5. Input Frame/Timing Keys +4.1.5. Input Frame/Timing Keys [FE 01] INPUT_CHUNK [FE 02] INPUT_MOMENT @@ -413,151 +433,151 @@ Table of Contents [FE 04] LAG_FRAME_CHUNK [FE 05] MOVIE_TRANSITION -3.1.6. Extraneous Keys +4.1.6. Extraneous Keys [FF 01] COMMENT [FF FE] EXPERIMENTAL [FF FF] UNSPECIFIED -3.2. Assigned Packet Keys With Descriptions +4.2. Assigned Packet Keys With Descriptions -3.2.1. General Key Descriptions +4.2.1. General Key Descriptions [00 01] - CONSOLE_TYPE Specifies console used on emulator when dumping the TAS controller inputs. This packet type is OPTIONAL but SHOULD be included in a *TASD* file and a *TASD* file SHOULD NOT contain more than 1 of - this packet type in direct form. Discussed in (Section 3.3.1.1). + this packet type in direct form. Discussed in (Section 4.3.1.1). [00 02] - CONSOLE_REGION Specifies video region of console used for the TAS. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 of this - packet type. Discussed in (Section 3.3.1.2). + packet type. Discussed in (Section 4.3.1.2). [00 03] - GAME_TITLE Specifies the name of the game the TAS is written for. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 - of this packet type. Discussed in (Section 3.3.1.3). + of this packet type. Discussed in (Section 4.3.1.3). [00 04] - ROM_NAME Specifies the name of the specific ROM file used for the TAS. This packet type is OPTIONAL and a *TASD* file MAY contain more - than 1 of this packet type. Discussed in (Section 3.3.1.4). + than 1 of this packet type. Discussed in (Section 4.3.1.4). [00 05] - ATTRIBUTION Specifies the name of someone involved in the TAS or the creation or management of the *TASD* file in order to provide proper attribution for work done. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 of this packet type. - Discussed in (Section 3.3.1.5). + Discussed in (Section 4.3.1.5). [00 06] - CATEGORY Specifies the run category of the TAS. 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 3.3.1.6). + packet type in direct form. Discussed in (Section 4.3.1.6). [00 07] - EMULATOR_NAME Specifies the emulator used while dumping TAS controller inputs. 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 3.3.1.7). + (Section 4.3.1.7). [00 08] - EMULATOR_VERSION Specifies the version of the emulator used while dump the TAS controller inputs. 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 3.3.1.8). + Discussed in (Section 4.3.1.8). [00 09] - EMULATOR_CORE Specifies the core of the emulator used while dumping the TAS controller inputs. 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 3.3.1.9). + Discussed in (Section 4.3.1.9). [00 0A] - TAS_LAST_MODIFIED Specifies when the TAS was last modified. Frequently used to specify the date and time when the TAS was published. 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 3.3.1.10). + (Section 4.3.1.10). [00 0B] - DUMP_CREATED Specifies when the *TASD* file was first created. This packet is OPTIONAL but SHOULD be included in a *TASD* file and a *TASD* file SHOULD NOT contain more than 1 of this packet type. Discussed in - (Section 3.3.1.11). + (Section 4.3.1.11). [00 0C] - DUMP_LAST_MODIFIED Specifies when the *TASD* file was last modified. This packet is OPTIONAL but SHOULD be included in a *TASD* file and a *TASD* file SHOULD NOT contain more than 1 of this packet type. Discussed in - (Section 3.3.1.12). + (Section 4.3.1.12). [00 0D] - TOTAL_FRAMES Specifies the total number of frames in the TAS. 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 3.3.1.13). + this packet type in direct form. Discussed in (Section 4.3.1.13). [00 0E] - RERECORDS Specifies the total number of rerecords of the TAS. 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 3.3.1.14). + (Section 4.3.1.14). [00 0F] - SOURCE_LINK Specifies the source link for the TAS. This packet type is OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of this - packet type. Discussed in (Section 3.3.1.15). + packet type. Discussed in (Section 4.3.1.15). [00 10] - BLANK_FRAMES Specifies the number of blank controller inputs or frames to prepend to the inputs of 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 3.3.1.16). + (Section 4.3.1.16). [00 11] - VERIFIED Specifies whether the TAS is verified to run on hardware, also known as "console verified", using the *TASD* file. 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 3.3.1.17). + (Section 4.3.1.17). [00 12] - MEMORY_INIT Specifies initial memory values used for the TAS. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 of this - packet type. Discussed in (Section 3.3.1.18). + packet type. Discussed in (Section 4.3.1.18). [00 13] - GAME_IDENTIFIER Specifies an identifier for the game the TAS is written for. This can be checksums, hashes, or other identifying data. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 of this - packet type. Discussed in (Section 3.3.1.19). + packet type. Discussed in (Section 4.3.1.19). [00 14] - MOVIE_LICENSE Specifies a copyright license for the TAS. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 of this packet - type. Discussed in (Section 3.3.1.20). + type. Discussed in (Section 4.3.1.20). [00 15] - MOVIE_FILE 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 (Section 3.3.1.21). + Discussed in (Section 4.3.1.21). [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 3.3.1.22). + type in direct form. Discussed in (Section 4.3.1.22). -3.2.2. NES Specific Key Descriptions +4.2.2. NES Specific Key Descriptions [01 01] - NES_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 3.3.2.1). + type in direct form. Discussed in (Section 4.3.2.1). [01 02] - NES_CLOCK_FILTER Specifies a clock filter time in tenths of a microsecond (0.1 @@ -565,21 +585,21 @@ Table of Contents 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 3.3.2.2). + 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 3.3.2.3). + 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 3.3.2.4). + type. Discussed in (Section 4.3.2.4). -3.2.3. SNES Specific Key Descriptions +4.2.3. SNES Specific Key Descriptions [02 02] - SNES_CLOCK_FILTER Specifies a clock filter time in tenths of a microsecond (0.1 @@ -587,33 +607,33 @@ Table of Contents 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 3.3.3.1). + 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 3.3.3.2). + packet type in direct form. 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 OPTIONAL and a *TASD* file MAY contain more than 1 of this packet - type. Discussed in (Section 3.3.3.3). + type. Discussed in (Section 4.3.3.3). [02 05] - SNES_LATCH_TRAIN Specifies Latch Trains for TAS. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 of this packet type. - Discussed in (Section 3.3.3.4). + Discussed in (Section 4.3.3.4). -3.2.4. Genesis Specific Key Descriptions +4.2.4. Genesis Specific Key Descriptions [08 04] - GENESIS_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 3.3.4.1). + type. Discussed in (Section 4.3.4.1). -3.2.5. Input Frame/Timing Key Descriptions +4.2.5. Input Frame/Timing Key Descriptions [FE 01] - INPUT_CHUNK Specifies a chunk of input data for the TAS when played on @@ -623,7 +643,7 @@ Table of Contents MUST be used. If the INPUT_CHUNK packet type is used, the INPUT_MOMENT packet type SHOULD NOT be used. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 of this packet - type. Discussed in (Section 3.3.5.1). + type. Discussed in (Section 4.3.5.1). [FE 02] - INPUT_MOMENT Specifies input data that is sent from the replay device to the @@ -632,47 +652,47 @@ Table of Contents INPUT_MOMENT packet type is used, the INPUT_CHUNK packet type SHOULD NOT be used. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 of this packet type. Discussed in - (Section 3.3.5.2). + (Section 4.3.5.2). [FE 03] - TRANSITION Specifies when a transition or change occurs during a TAS replay (example: console reset or changing of controller types). This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 - of this packet type. Discussed in (Section 3.3.5.3). + of this packet type. Discussed in (Section 4.3.5.3). [FE 04] - LAG_FRAME_CHUNK Specifies a chunk of lag frames in a TAS based on the original TAS movie. This packet type is OPTIONAL and a *TASD* file MAY contain - more than 1 of this packet type. Discussed in (Section 3.3.5.4). + more than 1 of this packet type. Discussed in (Section 4.3.5.4). [FE 05] - MOVIE_TRANSITION Specifies when a transition or change occurs in the original TAS movie (example: console reset or changing of controller types). This packet type is OPTIONAL and a *TASD* file MAY contain more - than 1 of this packet type. Discussed in (Section 3.3.5.5). + than 1 of this packet type. Discussed in (Section 4.3.5.5). -3.2.6. Extraneous Key Descriptions +4.2.6. Extraneous Key Descriptions [FF 01] - COMMENT Comment data. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 of this packet type. Discussed in - (Section 3.3.6.1). + (Section 4.3.6.1). [FF FE] - EXPERIMENTAL TASD file is using draft/experimental packets. This packet type is OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of - this packet type. Discussed in (Section 3.3.6.2). + this packet type. Discussed in (Section 4.3.6.2). [FF FF] - UNSPECIFIED Unspecified packet data. Can contain any arbitrary data. This packet type is OPTIONAL and a *TASD* file MAY contain more than 1 - of this packet type. Discussed in (Section 3.3.6.3). + of this packet type. Discussed in (Section 4.3.6.3). -3.3. Packet Payload Formats +4.3. Packet Payload Formats -3.3.1. General Key Payload Formats +4.3.1. General Key Payload Formats -3.3.1.1. CONSOLE_TYPE Packet +4.3.1.1. CONSOLE_TYPE Packet CONSOLE_TYPE packets MUST be in the following format: @@ -706,7 +726,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.1.2. CONSOLE_REGION Packet +4.3.1.2. CONSOLE_REGION Packet CONSOLE_REGION packets MUST be in the following format: @@ -724,7 +744,7 @@ Table of Contents Specifies the video signal of the game console being emulated while dumping the TAS movie controller inputs. -3.3.1.3. GAME_TITLE Packet +4.3.1.3. GAME_TITLE Packet GAME_TITLE packets MUST be in the following format: @@ -741,7 +761,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.1.4. ROM_NAME Packet +4.3.1.4. ROM_NAME Packet ROM_NAME packets MUST be in the following format: @@ -759,7 +779,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.1.5. ATTRIBUTION Packet +4.3.1.5. ATTRIBUTION Packet ATTRIBUTION packets MUST be in the following format: @@ -792,7 +812,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.1.6. CATEGORY Packet +4.3.1.6. CATEGORY Packet CATEGORY packets MUST be in the following format: @@ -810,7 +830,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.1.7. EMULATOR_NAME Packet +4.3.1.7. EMULATOR_NAME Packet EMULATOR_NAME packets MUST be in the following format: @@ -828,7 +848,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.1.8. EMULATOR_VERSION Packet +4.3.1.8. EMULATOR_VERSION Packet EMULATOR_VERSION packets MUST be in the following format: @@ -846,7 +866,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.1.9. EMULATOR_CORE Packet +4.3.1.9. EMULATOR_CORE Packet EMULATOR_CORE packets MUST be in the following format: @@ -864,7 +884,7 @@ Table of Contents *PLEN* Length of the packet payload -3.3.1.10. TAS_LAST_MODIFIED Packet +4.3.1.10. TAS_LAST_MODIFIED Packet TAS_LAST_MODIFIED packets MUST be in the following format: @@ -878,7 +898,7 @@ Table of Contents *Unix Timestamp* 64-bit Unix timestamp of when the TAS movie was last modified. -3.3.1.11. DUMP_CREATED Packet +4.3.1.11. DUMP_CREATED Packet DUMP_CREATED packets MUST be in the following format: @@ -892,7 +912,7 @@ Table of Contents *Unix Timestamp* 64-bit Unix timestamp of when the *TASD* file was created. -3.3.1.12. DUMP_LAST_MODIFIED Packet +4.3.1.12. DUMP_LAST_MODIFIED Packet DUMP_LAST_MODIFIED packets MUST be in the following format: @@ -906,7 +926,7 @@ Table of Contents *Unix Timestamp* 64-bit Unix timestamp of when the *TASD* file was last modified. -3.3.1.13. TOTAL_FRAMES Packet +4.3.1.13. TOTAL_FRAMES Packet TOTAL_FRAMES packets MUST be in the following format: @@ -920,7 +940,7 @@ Table of Contents *Frames* Total number of frames of the TAS movie. -3.3.1.14. RERECORDS Packet +4.3.1.14. RERECORDS Packet RERECORDS packets MUST be in the following format: @@ -934,7 +954,7 @@ Table of Contents *Rerecords* Total number of rerecords of the TAS movie. -3.3.1.15. SOURCE_LINK Packet +4.3.1.15. SOURCE_LINK Packet SOURCE_LINK packets MUST be in the following format: @@ -952,7 +972,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.1.16. BLANK_FRAMES Packet +4.3.1.16. BLANK_FRAMES Packet BLANK_FRAMES packets MUST be in the following format: @@ -970,7 +990,7 @@ Table of Contents inputs of the TAS console replay of the TAS movie should be removed. -3.3.1.17. VERIFIED Packet +4.3.1.17. VERIFIED Packet VERIFIED packets MUST be in the following format: @@ -986,7 +1006,7 @@ Table of Contents successfully console verified and *FALSE* if it has not been verified. -3.3.1.18. MEMORY_INIT Packet +4.3.1.18. MEMORY_INIT Packet MEMORY_INIT packets MUST be in the following format: @@ -1055,7 +1075,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.1.19. GAME_IDENTIFIER Packet +4.3.1.19. GAME_IDENTIFIER Packet GAME_IDENTIFIER packets MUST be in the following format: @@ -1103,7 +1123,7 @@ Table of Contents *PLEN* Length of the packet payload -3.3.1.20. MOVIE_LICENSE Packet +4.3.1.20. MOVIE_LICENSE Packet MOVIE_LICENSE packets MUST be in the following format: @@ -1121,7 +1141,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.1.21. MOVIE_FILE Packet +4.3.1.21. MOVIE_FILE Packet MOVIE_FILE packets MUST be in the following format: @@ -1148,7 +1168,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.1.22. PORT_CONTROLLER Packet +4.3.1.22. PORT_CONTROLLER Packet PORT_CONTROLLER packets MUST be in the following format: @@ -1196,11 +1216,11 @@ Table of Contents *(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 (Section 4). + specific controller types are described in (Section 5). -3.3.2. NES Specific Key Payload Formats +4.3.2. NES Specific Key Payload Formats -3.3.2.1. NES_LATCH_FILTER Packet +4.3.2.1. NES_LATCH_FILTER Packet NES_LATCH_FILTER packets MUST be in the following format: @@ -1214,7 +1234,7 @@ Table of Contents *Time* Latch filter length of time in microseconds. -3.3.2.2. NES_CLOCK_FILTER Packet +4.3.2.2. NES_CLOCK_FILTER Packet NES_CLOCK_FILTER packets MUST be in the following format: @@ -1229,7 +1249,7 @@ Table of Contents Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds). -3.3.2.3. NES_OVERREAD Packet +4.3.2.3. NES_OVERREAD Packet NES_OVERREAD packets MUST be in the following format: @@ -1244,7 +1264,7 @@ Table of Contents Boolean value that is *TRUE* if overread bits are set to high and *FALSE* if overread bits are set to low. -3.3.2.4. NES_GAME_GENIE_CODE Packet +4.3.2.4. NES_GAME_GENIE_CODE Packet NES_GAME_GENIE_CODE packets MUST be in the following format: @@ -1261,9 +1281,9 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.3. SNES Specific Key Payload Formats +4.3.3. SNES Specific Key Payload Formats -3.3.3.1. SNES_CLOCK_FILTER Packet +4.3.3.1. SNES_CLOCK_FILTER Packet SNES_CLOCK_FILTER packets MUST be in the following format: @@ -1278,7 +1298,7 @@ Table of Contents Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds). -3.3.3.2. SNES_OVERREAD Packet +4.3.3.2. SNES_OVERREAD Packet SNES_OVERREAD packets MUST be in the following format: @@ -1293,7 +1313,7 @@ Table of Contents Boolean value that is *TRUE* if overread bits are set to high and *FALSE* if overread bits are set to low. -3.3.3.3. SNES_GAME_GENIE_CODE Packet +4.3.3.3. SNES_GAME_GENIE_CODE Packet SNES_GAME_GENIE_CODE packets MUST be in the following format: @@ -1310,7 +1330,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.3.4. SNES_LATCH_TRAIN Packet +4.3.3.4. SNES_LATCH_TRAIN Packet SNES_LATCH_TRAIN packets MUST be in the following format: @@ -1333,9 +1353,9 @@ Table of Contents Latch Train of a SNES TAS movie console replay. There MAY be more than 1 SNES_LATCH_TRAIN packet. -3.3.4. Genesis Specific Key Payload Formats +4.3.4. Genesis Specific Key Payload Formats -3.3.4.1. GENESIS_GAME_GENIE_CODE Packet +4.3.4.1. GENESIS_GAME_GENIE_CODE Packet GENESIS_GAME_GENIE_CODE packets MUST be in the following format: @@ -1352,9 +1372,9 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.5. Input Frame/Timing Key Payload Formats +4.3.5. Input Frame/Timing Key Payload Formats -3.3.5.1. INPUT_CHUNK Packet +4.3.5.1. INPUT_CHUNK Packet INPUT_CHUNK packets MUST be in the following format: @@ -1372,7 +1392,7 @@ Table of Contents *Inputs* Controller input data for controller on *Port*. Input values are usually in native format (usually active-low). Input formats for - specific controller types are described in (Section 4). + specific controller types are described in (Section 5). *PLEN* Length of the packet payload. @@ -1385,7 +1405,7 @@ Table of Contents are earlier in the *TASD* file and later inputs in the TAS movie console replay are later in the *TASD* file. -3.3.5.2. INPUT_MOMENT Packet +4.3.5.2. INPUT_MOMENT Packet INPUT_MOMENT packets MUST be in the following format: @@ -1420,12 +1440,12 @@ Table of Contents *Inputs* Controller input data for controller on *Port*. Input values are usually in native format (usually active-low). Input formats for - specific controller types are described in (Section 4). + specific controller types are described in (Section 5). *PLEN* Length of the packet payload. -3.3.5.3. TRANSITION Packet +4.3.5.3. TRANSITION Packet TRANSITION packets MUST be in the following format: @@ -1470,7 +1490,7 @@ Table of Contents *PLEN* Length of the packet payload (Not *Inner Packet* length). -3.3.5.4. LAG_FRAME_CHUNK Packet +4.3.5.4. LAG_FRAME_CHUNK Packet LAG_FRAME_CHUNK packets MUST be in the following format: @@ -1489,7 +1509,7 @@ Table of Contents *Count* Number of Lag Frames in a row starting from *Movie Frame*. -3.3.5.5. MOVIE_TRANSITION +4.3.5.5. MOVIE_TRANSITION MOVIE_TRANSITION packets MUST be in the following format: @@ -1521,9 +1541,9 @@ Table of Contents *PLEN* Length of the packet payload (Not *Inner Packet* length). -3.3.6. Extraneous Key Payload Formats +4.3.6. Extraneous Key Payload Formats -3.3.6.1. COMMENT Packet +4.3.6.1. COMMENT Packet COMMENT packets MUST be in the following format: @@ -1540,7 +1560,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.6.2. EXPERIMENTAL Packet +4.3.6.2. EXPERIMENTAL Packet EXPERIMENTAL packets MUST be in the following format: @@ -1559,7 +1579,7 @@ Table of Contents *PLEN* Length of the packet payload. -3.3.6.3. UNSPECIFIED Packet +4.3.6.3. UNSPECIFIED Packet UNSPECIFIED packets MUST be in the following format: @@ -1578,7 +1598,7 @@ Table of Contents *PLEN* Length of the packet payload. -4. Controller Input Formats +5. Controller Input Formats 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 @@ -1591,9 +1611,9 @@ Table of Contents most bit of the octet and bit 0 MUST be the right-most bit of the octet. -4.1. NES/Famicom Controller Types +5.1. NES/Famicom Controller Types -4.1.1. NES Standard Controller +5.1.1. NES Standard Controller Single Input Length: 1 Octet @@ -1608,7 +1628,7 @@ Table of Contents Bit 1: /Left Bit 0: /Right -4.1.2. NES Four Score +5.1.2. NES Four Score Single Input Length: 3 Octets @@ -1653,9 +1673,9 @@ Table of Contents 2 is *Player 2*, and *Controller N-2* on controller port 2 is *Player 4*. -4.2. SNES Controller Types +5.2. SNES Controller Types -4.2.1. SNES Standard Controller +5.2.1. SNES Standard Controller Single Input Length: 2 Octets @@ -1681,7 +1701,7 @@ Table of Contents Bit 1: 1 Bit 0: 1 -4.2.2. SNES Mouse +5.2.2. SNES Mouse Single Input Length: 4 Octets @@ -1719,7 +1739,7 @@ Table of Contents Bits 7-1: /Horizontal displacement since last read Bit 0: Direction (0: up; 1: down) -4.2.3. SNES Super Multitap +5.2.3. SNES Super Multitap Single Input Length: 5 Octets @@ -1786,9 +1806,9 @@ Table of Contents Pin state in octet 0 MUST be *1* for multitap ports *1 and 2*, or *0* for ports *3 and 4*. -4.3. N64 Controller Types +5.3. N64 Controller Types -4.3.1. N64 Standard Controller +5.3.1. N64 Standard Controller Single Input Length: 4 Octets @@ -1822,7 +1842,7 @@ Table of Contents Bits 7-0: Analog Stick Y-Axis (signed 8-bit number) -4.3.2. N64 Standard Controller with Rumble +5.3.2. N64 Standard Controller with Rumble Single Input Length: 4 Octets @@ -1856,7 +1876,7 @@ Table of Contents Bits 7-0: Analog Stick Y-Axis (signed 8-bit number) -4.3.3. N64 Standard Controller with Controller Pak +5.3.3. N64 Standard Controller with Controller Pak Single Input Length: 4 Octets @@ -1890,7 +1910,7 @@ Table of Contents Bits 7-0: Analog Stick Y-Axis (signed 8-bit number) -4.3.4. N64 Standard Controller with Transfer Pak +5.3.4. N64 Standard Controller with Transfer Pak Single Input Length: 4 Octets @@ -1924,7 +1944,7 @@ Table of Contents Bits 7-0: Analog Stick Y-Axis (signed 8-bit number) -4.3.5. N64 Mouse +5.3.5. N64 Mouse Single Input Length: 4 Octets @@ -1958,7 +1978,7 @@ Table of Contents Bits 7-0: Relative Y-Axis position (signed 8-bit number) -4.3.6. N64 Densha de Go +5.3.6. N64 Densha de Go Single Input Length: 4 Octets @@ -2003,9 +2023,9 @@ Table of Contents Bit 1: 0 Bit 0: 0 -4.4. GameCube Controller Types +5.4. GameCube Controller Types -4.4.1. GameCube Standard Controller +5.4.1. GameCube Standard Controller Single Input Length: 8 Octets @@ -2055,9 +2075,9 @@ Table of Contents Bits 7-0: R Analog Value (unsigned 8-bit number) -4.5. Game Boy Controller Types +5.5. Game Boy Controller Types -4.5.1. GB Standard Controller +5.5.1. GB Standard Controller Single Input Length: 1 Octet @@ -2072,9 +2092,9 @@ Table of Contents Bit 1: /B Bit 0: /A -4.6. Game Boy Color Controller Types +5.6. Game Boy Color Controller Types -4.6.1. GBC Standard Controller +5.6.1. GBC Standard Controller Single Input Length: 1 Octet @@ -2089,9 +2109,9 @@ Table of Contents Bit 1: /B Bit 0: /A -4.7. Game Boy Advance Controller Types +5.7. Game Boy Advance Controller Types -4.7.1. GBA Standard Controller +5.7.1. GBA Standard Controller Single Input Length: 2 Octets @@ -2117,9 +2137,9 @@ Table of Contents Bit 1: /B Bit 0: /A -4.8. Genesis Controller Types +5.8. Genesis Controller Types -4.8.1. Genesis (Mega Drive) 3-Button +5.8.1. Genesis (Mega Drive) 3-Button Single Input Length: 1 Octet @@ -2134,7 +2154,7 @@ Table of Contents Bit 1: /A Bit 0: /Start -4.8.2. Genesis (Mega Drive) 6-Button +5.8.2. Genesis (Mega Drive) 6-Button Single Input Length: 2 Octets @@ -2160,9 +2180,9 @@ Table of Contents Bit 1: 1 Bit 0: 1 -4.9. Atari 2600 Controller Types +5.9. Atari 2600 Controller Types -4.9.1. A2600 Joystick +5.9.1. A2600 Joystick Single Input Length: 1 Octet @@ -2177,7 +2197,7 @@ Table of Contents Bit 1: 1 Bit 0: 1 -4.9.2. A2600 Keyboard Controller +5.9.2. A2600 Keyboard Controller Single Input Length: 1 Octet @@ -2192,9 +2212,9 @@ Table of Contents Bit 1: /Column2 (key 2, 5, 8, or 0 pressed) Bit 0: 1 -5. References +6. References -5.1. Normative References +6.1. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, |
