summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVi Grey <vi@vigrey.com>2023-09-24 18:52:21 +0000
committerVi Grey <vi@vigrey.com>2023-09-24 18:52:21 +0000
commitb65c44c4a8e86a4af2f2d96c26a1fe16753637ba (patch)
treef427f535439dceb453a9ca1f0837fb8e8171d4c4
parent78d50d4227d1414bcb27317f328fbdc029bfa092 (diff)
downloadtasd-b65c44c4a8e86a4af2f2d96c26a1fe16753637ba.tar.gz
tasd-b65c44c4a8e86a4af2f2d96c26a1fe16753637ba.zip
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
-rw-r--r--CHANGELOG.md22
-rw-r--r--docs/latest/draft-tasd-spec.html216
-rw-r--r--docs/latest/draft-tasd-spec.txt150
-rw-r--r--docs/tasd-spec-0001/draft-tasd-spec-0001.html216
-rw-r--r--docs/tasd-spec-0001/draft-tasd-spec-0001.txt150
-rw-r--r--src/docs/draft-tasd-spec-0001.xml114
-rw-r--r--tools/lua/tasd-fceux-dumpscript.lua22
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 {
<dd class="workgroup">Independent TAS Console Replay Research Group</dd>
<dt class="label-published">Published:</dt>
<dd class="published">
-<time datetime="2023-09-18" class="published">18 September 2023</time>
+<time datetime="2023-09-24" class="published">24 September 2023</time>
</dd>
<dt class="label-authors">Authors:</dt>
<dd class="authors">
@@ -1383,6 +1383,9 @@ li > p:last-of-type:only-child {
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.1.2.22">
<p id="section-toc.1-1.4.2.3.2.1.2.22.1"><a href="#section-4.3.1.22" class="auto internal xref">4.3.1.22</a>. <a href="#name-port_controller-packet" class="internal xref">PORT_CONTROLLER Packet</a></p>
</li>
+ <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.1.2.23">
+ <p id="section-toc.1-1.4.2.3.2.1.2.23.1"><a href="#section-4.3.1.23" class="auto internal xref">4.3.1.23</a>. <a href="#name-port_overread-packet" class="internal xref">PORT_OVERREAD Packet</a></p>
+</li>
</ul>
</li>
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.2">
@@ -1395,10 +1398,7 @@ li > p:last-of-type:only-child {
<p id="section-toc.1-1.4.2.3.2.2.2.2.1"><a href="#section-4.3.2.2" class="auto internal xref">4.3.2.2</a>.  <a href="#name-nes_clock_filter-packet" class="internal xref">NES_CLOCK_FILTER Packet</a></p>
</li>
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.2.2.3">
- <p id="section-toc.1-1.4.2.3.2.2.2.3.1"><a href="#section-4.3.2.3" class="auto internal xref">4.3.2.3</a>.  <a href="#name-nes_overread-packet" class="internal xref">NES_OVERREAD Packet</a></p>
-</li>
- <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.2.2.4">
- <p id="section-toc.1-1.4.2.3.2.2.2.4.1"><a href="#section-4.3.2.4" class="auto internal xref">4.3.2.4</a>.  <a href="#name-nes_game_genie_code-packet" class="internal xref">NES_GAME_GENIE_CODE Packet</a></p>
+ <p id="section-toc.1-1.4.2.3.2.2.2.3.1"><a href="#section-4.3.2.3" class="auto internal xref">4.3.2.3</a>.  <a href="#name-nes_game_genie_code-packet" class="internal xref">NES_GAME_GENIE_CODE Packet</a></p>
</li>
</ul>
</li>
@@ -1406,10 +1406,10 @@ li > p:last-of-type:only-child {
<p id="section-toc.1-1.4.2.3.2.3.1"><a href="#section-4.3.3" class="auto internal xref">4.3.3</a>.  <a href="#name-snes-specific-key-payload-f" class="internal xref">SNES Specific Key Payload Formats</a></p>
<ul class="compact toc ulBare ulEmpty">
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.3.2.1">
- <p id="section-toc.1-1.4.2.3.2.3.2.1.1"><a href="#section-4.3.3.1" class="auto internal xref">4.3.3.1</a>.  <a href="#name-snes_clock_filter-packet" class="internal xref">SNES_CLOCK_FILTER Packet</a></p>
+ <p id="section-toc.1-1.4.2.3.2.3.2.1.1"><a href="#section-4.3.3.1" class="auto internal xref">4.3.3.1</a>.  <a href="#name-snes_latch_filter-packet" class="internal xref">SNES_LATCH_FILTER Packet</a></p>
</li>
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.3.2.2">
- <p id="section-toc.1-1.4.2.3.2.3.2.2.1"><a href="#section-4.3.3.2" class="auto internal xref">4.3.3.2</a>.  <a href="#name-snes_overread-packet" class="internal xref">SNES_OVERREAD Packet</a></p>
+ <p id="section-toc.1-1.4.2.3.2.3.2.2.1"><a href="#section-4.3.3.2" class="auto internal xref">4.3.3.2</a>.  <a href="#name-snes_clock_filter-packet" class="internal xref">SNES_CLOCK_FILTER Packet</a></p>
</li>
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.3.2.3">
<p id="section-toc.1-1.4.2.3.2.3.2.3.1"><a href="#section-4.3.3.3" class="auto internal xref">4.3.3.3</a>.  <a href="#name-snes_game_genie_code-packet" class="internal xref">SNES_GAME_GENIE_CODE Packet</a></p>
@@ -1952,6 +1952,10 @@ li > p:last-of-type:only-child {
<dt id="section-4.1.1-1.43"><code>[00 F0]</code></dt>
<dd style="margin-left: 1.5em" id="section-4.1.1-1.44">PORT_CONTROLLER<a href="#section-4.1.1-1.44" class="pilcrow">¶</a>
</dd>
+ <dd class="break"></dd>
+<dt id="section-4.1.1-1.45"><code>[00 F1]</code></dt>
+ <dd style="margin-left: 1.5em" id="section-4.1.1-1.46">PORT_OVERREAD<a href="#section-4.1.1-1.46" class="pilcrow">¶</a>
+</dd>
<dd class="break"></dd>
</dl>
</section>
@@ -1968,12 +1972,8 @@ li > p:last-of-type:only-child {
<dd style="margin-left: 1.5em" id="section-4.1.2-1.4">NES_CLOCK_FILTER<a href="#section-4.1.2-1.4" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.1.2-1.5"><code>[01 03]</code></dt>
- <dd style="margin-left: 1.5em" id="section-4.1.2-1.6">NES_OVERREAD<a href="#section-4.1.2-1.6" class="pilcrow">¶</a>
-</dd>
- <dd class="break"></dd>
-<dt id="section-4.1.2-1.7"><code>[01 04]</code></dt>
- <dd style="margin-left: 1.5em" id="section-4.1.2-1.8">NES_GAME_GENIE_CODE<a href="#section-4.1.2-1.8" class="pilcrow">¶</a>
+<dt id="section-4.1.2-1.5"><code>[01 04]</code></dt>
+ <dd style="margin-left: 1.5em" id="section-4.1.2-1.6">NES_GAME_GENIE_CODE<a href="#section-4.1.2-1.6" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
@@ -1987,16 +1987,12 @@ li > p:last-of-type:only-child {
<dd style="margin-left: 1.5em" id="section-4.1.3-1.2">SNES_CLOCK_FILTER<a href="#section-4.1.3-1.2" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.1.3-1.3"><code>[02 03]</code></dt>
- <dd style="margin-left: 1.5em" id="section-4.1.3-1.4">SNES_OVERREAD<a href="#section-4.1.3-1.4" class="pilcrow">¶</a>
-</dd>
- <dd class="break"></dd>
-<dt id="section-4.1.3-1.5"><code>[02 04]</code></dt>
- <dd style="margin-left: 1.5em" id="section-4.1.3-1.6">SNES_GAME_GENIE_CODE<a href="#section-4.1.3-1.6" class="pilcrow">¶</a>
+<dt id="section-4.1.3-1.3"><code>[02 04]</code></dt>
+ <dd style="margin-left: 1.5em" id="section-4.1.3-1.4">SNES_GAME_GENIE_CODE<a href="#section-4.1.3-1.4" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.1.3-1.7"><code>[02 05]</code></dt>
- <dd style="margin-left: 1.5em" id="section-4.1.3-1.8">SNES_LATCH_TRAIN<a href="#section-4.1.3-1.8" class="pilcrow">¶</a>
+<dt id="section-4.1.3-1.5"><code>[02 05]</code></dt>
+ <dd style="margin-left: 1.5em" id="section-4.1.3-1.6">SNES_LATCH_TRAIN<a href="#section-4.1.3-1.6" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
@@ -2178,6 +2174,11 @@ li > p:last-of-type:only-child {
<code>[00 F0]</code> - PORT_CONTROLLER</dt>
<dd style="margin-left: 1.5em" id="section-4.2.1-1.44">Specifies the controller type in specific console controller ports for the TAS when played on hardware. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#port_controller" class="auto internal xref">Section 4.3.1.22</a>).<a href="#section-4.2.1-1.44" class="pilcrow">¶</a>
</dd>
+ <dd class="break"></dd>
+<dt id="section-4.2.1-1.45">
+<code>[00 F1]</code> - PORT_OVERREAD</dt>
+ <dd style="margin-left: 1.5em" id="section-4.2.1-1.46">Specifies whether a high or low signal <span class="bcp14">SHOULD</span> 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 <span class="bcp14">OPTIONAL</span>. Discussed in (<a href="#port_overread" class="auto internal xref">Section 4.3.1.23</a>).<a href="#section-4.2.1-1.46" class="pilcrow">¶</a>
+</dd>
<dd class="break"></dd>
</dl>
</section>
@@ -2197,13 +2198,8 @@ li > p:last-of-type:only-child {
</dd>
<dd class="break"></dd>
<dt id="section-4.2.2-1.5">
-<code>[01 03]</code> - NES_OVERREAD</dt>
- <dd style="margin-left: 1.5em" id="section-4.2.2-1.6">Specifies whether a high or low signal <span class="bcp14">SHOULD</span> 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 <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#nes_overread" class="auto internal xref">Section 4.3.2.3</a>).<a href="#section-4.2.2-1.6" class="pilcrow">¶</a>
-</dd>
- <dd class="break"></dd>
-<dt id="section-4.2.2-1.7">
<code>[01 04]</code> - NES_GAME_GENIE_CODE</dt>
- <dd style="margin-left: 1.5em" id="section-4.2.2-1.8">Specifies a Game Genie code for the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#nes_game_genie_code" class="auto internal xref">Section 4.3.2.4</a>).<a href="#section-4.2.2-1.8" class="pilcrow">¶</a>
+ <dd style="margin-left: 1.5em" id="section-4.2.2-1.6">Specifies a Game Genie code for the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#nes_game_genie_code" class="auto internal xref">Section 4.3.2.3</a>).<a href="#section-4.2.2-1.6" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
@@ -2214,13 +2210,13 @@ li > p:last-of-type:only-child {
</h4>
<span class="break"></span><dl class="dlNewline" id="section-4.2.3-1">
<dt id="section-4.2.3-1.1">
-<code>[02 02]</code> - SNES_CLOCK_FILTER</dt>
- <dd style="margin-left: 1.5em" id="section-4.2.3-1.2">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 <span class="bcp14">SHOULD</span> be accepted by the replay device. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#snes_clock_filter" class="auto internal xref">Section 4.3.3.1</a>).<a href="#section-4.2.3-1.2" class="pilcrow">¶</a>
+<code>[01 01]</code> - SNES_LATCH_FILTER</dt>
+ <dd style="margin-left: 1.5em" id="section-4.2.3-1.2">Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals <span class="bcp14">SHOULD</span> be accepted by the replay device. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#snes_latch_filter" class="auto internal xref">Section 4.3.3.1</a>).<a href="#section-4.2.3-1.2" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
<dt id="section-4.2.3-1.3">
-<code>[02 03]</code> - SNES_OVERREAD</dt>
- <dd style="margin-left: 1.5em" id="section-4.2.3-1.4">Specifies whether a high or low signal <span class="bcp14">SHOULD</span> 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 <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#snes_overread" class="auto internal xref">Section 4.3.3.2</a>).<a href="#section-4.2.3-1.4" class="pilcrow">¶</a>
+<code>[02 02]</code> - SNES_CLOCK_FILTER</dt>
+ <dd style="margin-left: 1.5em" id="section-4.2.3-1.4">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 <span class="bcp14">SHOULD</span> be accepted by the replay device. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#snes_clock_filter" class="auto internal xref">Section 4.3.3.2</a>).<a href="#section-4.2.3-1.4" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
<dt id="section-4.2.3-1.5">
@@ -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 {
</dl>
</section>
</div>
+<div id="port_overread">
+<section id="section-4.3.1.23">
+ <h5 id="name-port_overread-packet">
+<a href="#section-4.3.1.23" class="section-number selfRef">4.3.1.23. </a><a href="#name-port_overread-packet" class="section-name selfRef">PORT_OVERREAD Packet</a>
+ </h5>
+<p id="section-4.3.1.23-1">PORT_OVERREAD packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.1.23-1" class="pilcrow">¶</a></p>
+<div class="alignLeft art-text artwork" id="section-4.3.1.23-2">
+<pre>
+ 0 1
+ +----------+----------+
+ | Port (N) | High (B) |
+ +----------+----------+
+
+ Port (N) [1 octet]
+ High (Boolean) [1 octet]
+</pre><a href="#section-4.3.1.23-2" class="pilcrow">¶</a>
+</div>
+<span class="break"></span><dl class="dlNewline" id="section-4.3.1.23-3">
+ <dt id="section-4.3.1.23-3.1"><strong>Port</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.1.23-3.2">Controller port number (<strong>Port</strong> number <span class="bcp14">MUST</span> be <strong>1-indexed</strong>).<a href="#section-4.3.1.23-3.2" class="pilcrow">¶</a>
+</dd>
+ <dd class="break"></dd>
+<dt id="section-4.3.1.23-3.3"><strong>High</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.1.23-3.4">Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.<a href="#section-4.3.1.23-3.4" class="pilcrow">¶</a>
+</dd>
+ <dd class="break"></dd>
+</dl>
+</section>
+</div>
</section>
<section id="section-4.3.2">
<h4 id="name-nes-specific-key-payload-fo">
@@ -3100,37 +3125,13 @@ li > p:last-of-type:only-child {
</dl>
</section>
</div>
-<div id="nes_overread">
-<section id="section-4.3.2.3">
- <h5 id="name-nes_overread-packet">
-<a href="#section-4.3.2.3" class="section-number selfRef">4.3.2.3. </a><a href="#name-nes_overread-packet" class="section-name selfRef">NES_OVERREAD Packet</a>
- </h5>
-<p id="section-4.3.2.3-1">NES_OVERREAD packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.2.3-1" class="pilcrow">¶</a></p>
-<div class="alignLeft art-text artwork" id="section-4.3.2.3-2">
-<pre>
- 0
- +----------+
- | High (B) |
- +----------+
-
- High (Boolean) [1 octet]
-</pre><a href="#section-4.3.2.3-2" class="pilcrow">¶</a>
-</div>
-<span class="break"></span><dl class="dlNewline" id="section-4.3.2.3-3">
- <dt id="section-4.3.2.3-3.1"><strong>High</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.2.3-3.2">Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.<a href="#section-4.3.2.3-3.2" class="pilcrow">¶</a>
-</dd>
- <dd class="break"></dd>
-</dl>
-</section>
-</div>
<div id="nes_game_genie_code">
-<section id="section-4.3.2.4">
+<section id="section-4.3.2.3">
<h5 id="name-nes_game_genie_code-packet">
-<a href="#section-4.3.2.4" class="section-number selfRef">4.3.2.4. </a><a href="#name-nes_game_genie_code-packet" class="section-name selfRef">NES_GAME_GENIE_CODE Packet</a>
+<a href="#section-4.3.2.3" class="section-number selfRef">4.3.2.3. </a><a href="#name-nes_game_genie_code-packet" class="section-name selfRef">NES_GAME_GENIE_CODE Packet</a>
</h5>
-<p id="section-4.3.2.4-1">NES_GAME_GENIE_CODE packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.2.4-1" class="pilcrow">¶</a></p>
-<div class="alignLeft art-text artwork" id="section-4.3.2.4-2">
+<p id="section-4.3.2.3-1">NES_GAME_GENIE_CODE packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.2.3-1" class="pilcrow">¶</a></p>
+<div class="alignLeft art-text artwork" id="section-4.3.2.3-2">
<pre>
0...
+==========+
@@ -3138,15 +3139,15 @@ li > p:last-of-type:only-child {
+==========+
Code (String) [PLEN octets]
-</pre><a href="#section-4.3.2.4-2" class="pilcrow">¶</a>
+</pre><a href="#section-4.3.2.3-2" class="pilcrow">¶</a>
</div>
-<span class="break"></span><dl class="dlNewline" id="section-4.3.2.4-3">
- <dt id="section-4.3.2.4-3.1"><strong>Code</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.2.4-3.2">Game Genie code (example: "AATOZA").<a href="#section-4.3.2.4-3.2" class="pilcrow">¶</a>
+<span class="break"></span><dl class="dlNewline" id="section-4.3.2.3-3">
+ <dt id="section-4.3.2.3-3.1"><strong>Code</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.2.3-3.2">Game Genie code (example: "AATOZA").<a href="#section-4.3.2.3-3.2" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.3.2.4-3.3"><strong>PLEN</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.2.4-3.4">Length of the packet payload.<a href="#section-4.3.2.4-3.4" class="pilcrow">¶</a>
+<dt id="section-4.3.2.3-3.3"><strong>PLEN</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.2.3-3.4">Length of the packet payload.<a href="#section-4.3.2.3-3.4" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
@@ -3157,49 +3158,49 @@ li > p:last-of-type:only-child {
<h4 id="name-snes-specific-key-payload-f">
<a href="#section-4.3.3" class="section-number selfRef">4.3.3. </a><a href="#name-snes-specific-key-payload-f" class="section-name selfRef">SNES Specific Key Payload Formats</a>
</h4>
-<div id="snes_clock_filter">
+<div id="snes_latch_filter">
<section id="section-4.3.3.1">
- <h5 id="name-snes_clock_filter-packet">
-<a href="#section-4.3.3.1" class="section-number selfRef">4.3.3.1. </a><a href="#name-snes_clock_filter-packet" class="section-name selfRef">SNES_CLOCK_FILTER Packet</a>
+ <h5 id="name-snes_latch_filter-packet">
+<a href="#section-4.3.3.1" class="section-number selfRef">4.3.3.1. </a><a href="#name-snes_latch_filter-packet" class="section-name selfRef">SNES_LATCH_FILTER Packet</a>
</h5>
-<p id="section-4.3.3.1-1">SNES_CLOCK_FILTER packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.3.1-1" class="pilcrow">¶</a></p>
+<p id="section-4.3.3.1-1">SNES_LATCH_FILTER packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.3.1-1" class="pilcrow">¶</a></p>
<div class="alignLeft art-text artwork" id="section-4.3.3.1-2">
<pre>
- 0
- +----------+
- | Time (N) |
- +----------+
+ 0 1
+ +-----+-----+
+ | Time (N) |
+ +-----+-----+
- Time (Unsigned Integer) [1 octet]
+ Time (Unsigned Integer) [2 octets]
</pre><a href="#section-4.3.3.1-2" class="pilcrow">¶</a>
</div>
<span class="break"></span><dl class="dlNewline" id="section-4.3.3.1-3">
<dt id="section-4.3.3.1-3.1"><strong>Time</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.3.1-3.2">Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).<a href="#section-4.3.3.1-3.2" class="pilcrow">¶</a>
+ <dd style="margin-left: 1.5em" id="section-4.3.3.1-3.2">Latch filter length of time in microseconds.<a href="#section-4.3.3.1-3.2" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
</section>
</div>
-<div id="snes_overread">
+<div id="snes_clock_filter">
<section id="section-4.3.3.2">
- <h5 id="name-snes_overread-packet">
-<a href="#section-4.3.3.2" class="section-number selfRef">4.3.3.2. </a><a href="#name-snes_overread-packet" class="section-name selfRef">SNES_OVERREAD Packet</a>
+ <h5 id="name-snes_clock_filter-packet">
+<a href="#section-4.3.3.2" class="section-number selfRef">4.3.3.2. </a><a href="#name-snes_clock_filter-packet" class="section-name selfRef">SNES_CLOCK_FILTER Packet</a>
</h5>
-<p id="section-4.3.3.2-1">SNES_OVERREAD packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.3.2-1" class="pilcrow">¶</a></p>
+<p id="section-4.3.3.2-1">SNES_CLOCK_FILTER packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.3.2-1" class="pilcrow">¶</a></p>
<div class="alignLeft art-text artwork" id="section-4.3.3.2-2">
<pre>
0
+----------+
- | High (B) |
+ | Time (N) |
+----------+
- High (Boolean) [1 octet]
+ Time (Unsigned Integer) [1 octet]
</pre><a href="#section-4.3.3.2-2" class="pilcrow">¶</a>
</div>
<span class="break"></span><dl class="dlNewline" id="section-4.3.3.2-3">
- <dt id="section-4.3.3.2-3.1"><strong>High</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.3.2-3.2">Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.<a href="#section-4.3.3.2-3.2" class="pilcrow">¶</a>
+ <dt id="section-4.3.3.2-3.1"><strong>Time</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.3.2-3.2">Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).<a href="#section-4.3.3.2-3.2" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
@@ -3394,14 +3395,14 @@ li > p:last-of-type:only-child {
<p id="section-4.3.5.3-1">TRANSITION packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.5.3-1" class="pilcrow">¶</a></p>
<div class="alignLeft art-text artwork" id="section-4.3.5.3-2">
<pre>
- 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]
</pre><a href="#section-4.3.5.3-2" class="pilcrow">¶</a>
</div>
<span class="break"></span><dl class="dlNewline" id="section-4.3.5.3-3">
@@ -3423,20 +3425,24 @@ li > p:last-of-type:only-child {
<dd style="margin-left: 1.5em" id="section-4.3.5.3-3.2">Determines specific timing type for start of transition.<a href="#section-4.3.5.3-3.2" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.3.5.3-3.3"><strong>Index</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.4">Time or offset value to start transition.<a href="#section-4.3.5.3-3.4" class="pilcrow">¶</a>
+<dt id="section-4.3.5.3-3.3"><strong>Port</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.4">Controller port number of input index. If <strong>Index Type</strong> is <code>[05]</code>, <strong>Port</strong> <span class="bcp14">MUST</span> be <strong>1-indexed</strong> Port number, otherwise <strong>Port</strong> <span class="bcp14">MAY</span> be any value.<a href="#section-4.3.5.3-3.4" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.3.5.3-3.5"><strong>Type</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.6">Type of transition. If <strong>Type</strong> is <code>[FF]</code>, the transition action will be interpreting a <strong>TASD</strong> packet.<a href="#section-4.3.5.3-3.6" class="pilcrow">¶</a>
+<dt id="section-4.3.5.3-3.5"><strong>Index</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.6">Time or offset value to start transition. If <strong>Index Type</strong> is <code>[05]</code>, <strong>Index</strong> <span class="bcp14">MUST</span> be the byte offset of <strong>INPUT_CHUNK</strong> data from <strong>INPUT_CHUNK</strong> packets for the controller port specified by <strong>Port</strong>.<a href="#section-4.3.5.3-3.6" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.3.5.3-3.7"><strong>Inner Packet</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.8">If <strong>Type</strong> is <code>[FF]</code>, <strong>Inner Packet</strong> <span class="bcp14">SHOULD</span> be a <strong>TASD</strong> packet. <strong>Inner Packet</strong> <span class="bcp14">MUST NOT</span> be a <strong>INPUT_CHUNK</strong>, <strong>INPUT_MOMENT</strong>, <strong>TRANSITION</strong>, <strong>LAG_FRAME_CHUNK</strong>, or <strong>MOVIE_TRANSITION</strong> packet.<a href="#section-4.3.5.3-3.8" class="pilcrow">¶</a>
+<dt id="section-4.3.5.3-3.7"><strong>Type</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.8">Type of transition. If <strong>Type</strong> is <code>[FF]</code>, the transition action will be interpreting a <strong>TASD</strong> packet.<a href="#section-4.3.5.3-3.8" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.3.5.3-3.9"><strong>PLEN</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.10">Length of the packet payload (Not <strong>Inner Packet</strong> length).<a href="#section-4.3.5.3-3.10" class="pilcrow">¶</a>
+<dt id="section-4.3.5.3-3.9"><strong>Inner Packet</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.10">If <strong>Type</strong> is <code>[FF]</code>, <strong>Inner Packet</strong> <span class="bcp14">SHOULD</span> be a <strong>TASD</strong> packet. <strong>Inner Packet</strong> <span class="bcp14">MUST NOT</span> be a <strong>INPUT_CHUNK</strong>, <strong>INPUT_MOMENT</strong>, <strong>TRANSITION</strong>, <strong>LAG_FRAME_CHUNK</strong>, or <strong>MOVIE_TRANSITION</strong> packet.<a href="#section-4.3.5.3-3.10" class="pilcrow">¶</a>
+</dd>
+ <dd class="break"></dd>
+<dt id="section-4.3.5.3-3.11"><strong>PLEN</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.12">Length of the packet payload (Not <strong>Inner Packet</strong> length).<a href="#section-4.3.5.3-3.12" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
@@ -3554,12 +3560,12 @@ li > p:last-of-type:only-child {
<p id="section-4.3.6.2-1">EXPERIMENTAL packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.6.2-1" class="pilcrow">¶</a></p>
<div class="alignLeft art-text artwork" id="section-4.3.6.2-2">
<pre>
- 0...
- +==================+
+ 0
+ +------------------+
| Experimental (B) |
- +==================+
+ +------------------+
- Experimental (Boolean) [PLEN octet]
+ Experimental (Boolean) [1 octet]
</pre><a href="#section-4.3.6.2-2" class="pilcrow">¶</a>
</div>
<span class="break"></span><dl class="dlNewline" id="section-4.3.6.2-3">
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 {
<dd class="workgroup">Independent TAS Console Replay Research Group</dd>
<dt class="label-published">Published:</dt>
<dd class="published">
-<time datetime="2023-09-18" class="published">18 September 2023</time>
+<time datetime="2023-09-24" class="published">24 September 2023</time>
</dd>
<dt class="label-authors">Authors:</dt>
<dd class="authors">
@@ -1383,6 +1383,9 @@ li > p:last-of-type:only-child {
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.1.2.22">
<p id="section-toc.1-1.4.2.3.2.1.2.22.1"><a href="#section-4.3.1.22" class="auto internal xref">4.3.1.22</a>. <a href="#name-port_controller-packet" class="internal xref">PORT_CONTROLLER Packet</a></p>
</li>
+ <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.1.2.23">
+ <p id="section-toc.1-1.4.2.3.2.1.2.23.1"><a href="#section-4.3.1.23" class="auto internal xref">4.3.1.23</a>. <a href="#name-port_overread-packet" class="internal xref">PORT_OVERREAD Packet</a></p>
+</li>
</ul>
</li>
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.2">
@@ -1395,10 +1398,7 @@ li > p:last-of-type:only-child {
<p id="section-toc.1-1.4.2.3.2.2.2.2.1"><a href="#section-4.3.2.2" class="auto internal xref">4.3.2.2</a>.  <a href="#name-nes_clock_filter-packet" class="internal xref">NES_CLOCK_FILTER Packet</a></p>
</li>
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.2.2.3">
- <p id="section-toc.1-1.4.2.3.2.2.2.3.1"><a href="#section-4.3.2.3" class="auto internal xref">4.3.2.3</a>.  <a href="#name-nes_overread-packet" class="internal xref">NES_OVERREAD Packet</a></p>
-</li>
- <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.2.2.4">
- <p id="section-toc.1-1.4.2.3.2.2.2.4.1"><a href="#section-4.3.2.4" class="auto internal xref">4.3.2.4</a>.  <a href="#name-nes_game_genie_code-packet" class="internal xref">NES_GAME_GENIE_CODE Packet</a></p>
+ <p id="section-toc.1-1.4.2.3.2.2.2.3.1"><a href="#section-4.3.2.3" class="auto internal xref">4.3.2.3</a>.  <a href="#name-nes_game_genie_code-packet" class="internal xref">NES_GAME_GENIE_CODE Packet</a></p>
</li>
</ul>
</li>
@@ -1406,10 +1406,10 @@ li > p:last-of-type:only-child {
<p id="section-toc.1-1.4.2.3.2.3.1"><a href="#section-4.3.3" class="auto internal xref">4.3.3</a>.  <a href="#name-snes-specific-key-payload-f" class="internal xref">SNES Specific Key Payload Formats</a></p>
<ul class="compact toc ulBare ulEmpty">
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.3.2.1">
- <p id="section-toc.1-1.4.2.3.2.3.2.1.1"><a href="#section-4.3.3.1" class="auto internal xref">4.3.3.1</a>.  <a href="#name-snes_clock_filter-packet" class="internal xref">SNES_CLOCK_FILTER Packet</a></p>
+ <p id="section-toc.1-1.4.2.3.2.3.2.1.1"><a href="#section-4.3.3.1" class="auto internal xref">4.3.3.1</a>.  <a href="#name-snes_latch_filter-packet" class="internal xref">SNES_LATCH_FILTER Packet</a></p>
</li>
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.3.2.2">
- <p id="section-toc.1-1.4.2.3.2.3.2.2.1"><a href="#section-4.3.3.2" class="auto internal xref">4.3.3.2</a>.  <a href="#name-snes_overread-packet" class="internal xref">SNES_OVERREAD Packet</a></p>
+ <p id="section-toc.1-1.4.2.3.2.3.2.2.1"><a href="#section-4.3.3.2" class="auto internal xref">4.3.3.2</a>.  <a href="#name-snes_clock_filter-packet" class="internal xref">SNES_CLOCK_FILTER Packet</a></p>
</li>
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.3.2.3">
<p id="section-toc.1-1.4.2.3.2.3.2.3.1"><a href="#section-4.3.3.3" class="auto internal xref">4.3.3.3</a>.  <a href="#name-snes_game_genie_code-packet" class="internal xref">SNES_GAME_GENIE_CODE Packet</a></p>
@@ -1952,6 +1952,10 @@ li > p:last-of-type:only-child {
<dt id="section-4.1.1-1.43"><code>[00 F0]</code></dt>
<dd style="margin-left: 1.5em" id="section-4.1.1-1.44">PORT_CONTROLLER<a href="#section-4.1.1-1.44" class="pilcrow">¶</a>
</dd>
+ <dd class="break"></dd>
+<dt id="section-4.1.1-1.45"><code>[00 F1]</code></dt>
+ <dd style="margin-left: 1.5em" id="section-4.1.1-1.46">PORT_OVERREAD<a href="#section-4.1.1-1.46" class="pilcrow">¶</a>
+</dd>
<dd class="break"></dd>
</dl>
</section>
@@ -1968,12 +1972,8 @@ li > p:last-of-type:only-child {
<dd style="margin-left: 1.5em" id="section-4.1.2-1.4">NES_CLOCK_FILTER<a href="#section-4.1.2-1.4" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.1.2-1.5"><code>[01 03]</code></dt>
- <dd style="margin-left: 1.5em" id="section-4.1.2-1.6">NES_OVERREAD<a href="#section-4.1.2-1.6" class="pilcrow">¶</a>
-</dd>
- <dd class="break"></dd>
-<dt id="section-4.1.2-1.7"><code>[01 04]</code></dt>
- <dd style="margin-left: 1.5em" id="section-4.1.2-1.8">NES_GAME_GENIE_CODE<a href="#section-4.1.2-1.8" class="pilcrow">¶</a>
+<dt id="section-4.1.2-1.5"><code>[01 04]</code></dt>
+ <dd style="margin-left: 1.5em" id="section-4.1.2-1.6">NES_GAME_GENIE_CODE<a href="#section-4.1.2-1.6" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
@@ -1987,16 +1987,12 @@ li > p:last-of-type:only-child {
<dd style="margin-left: 1.5em" id="section-4.1.3-1.2">SNES_CLOCK_FILTER<a href="#section-4.1.3-1.2" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.1.3-1.3"><code>[02 03]</code></dt>
- <dd style="margin-left: 1.5em" id="section-4.1.3-1.4">SNES_OVERREAD<a href="#section-4.1.3-1.4" class="pilcrow">¶</a>
-</dd>
- <dd class="break"></dd>
-<dt id="section-4.1.3-1.5"><code>[02 04]</code></dt>
- <dd style="margin-left: 1.5em" id="section-4.1.3-1.6">SNES_GAME_GENIE_CODE<a href="#section-4.1.3-1.6" class="pilcrow">¶</a>
+<dt id="section-4.1.3-1.3"><code>[02 04]</code></dt>
+ <dd style="margin-left: 1.5em" id="section-4.1.3-1.4">SNES_GAME_GENIE_CODE<a href="#section-4.1.3-1.4" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.1.3-1.7"><code>[02 05]</code></dt>
- <dd style="margin-left: 1.5em" id="section-4.1.3-1.8">SNES_LATCH_TRAIN<a href="#section-4.1.3-1.8" class="pilcrow">¶</a>
+<dt id="section-4.1.3-1.5"><code>[02 05]</code></dt>
+ <dd style="margin-left: 1.5em" id="section-4.1.3-1.6">SNES_LATCH_TRAIN<a href="#section-4.1.3-1.6" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
@@ -2178,6 +2174,11 @@ li > p:last-of-type:only-child {
<code>[00 F0]</code> - PORT_CONTROLLER</dt>
<dd style="margin-left: 1.5em" id="section-4.2.1-1.44">Specifies the controller type in specific console controller ports for the TAS when played on hardware. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#port_controller" class="auto internal xref">Section 4.3.1.22</a>).<a href="#section-4.2.1-1.44" class="pilcrow">¶</a>
</dd>
+ <dd class="break"></dd>
+<dt id="section-4.2.1-1.45">
+<code>[00 F1]</code> - PORT_OVERREAD</dt>
+ <dd style="margin-left: 1.5em" id="section-4.2.1-1.46">Specifies whether a high or low signal <span class="bcp14">SHOULD</span> 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 <span class="bcp14">OPTIONAL</span>. Discussed in (<a href="#port_overread" class="auto internal xref">Section 4.3.1.23</a>).<a href="#section-4.2.1-1.46" class="pilcrow">¶</a>
+</dd>
<dd class="break"></dd>
</dl>
</section>
@@ -2197,13 +2198,8 @@ li > p:last-of-type:only-child {
</dd>
<dd class="break"></dd>
<dt id="section-4.2.2-1.5">
-<code>[01 03]</code> - NES_OVERREAD</dt>
- <dd style="margin-left: 1.5em" id="section-4.2.2-1.6">Specifies whether a high or low signal <span class="bcp14">SHOULD</span> 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 <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#nes_overread" class="auto internal xref">Section 4.3.2.3</a>).<a href="#section-4.2.2-1.6" class="pilcrow">¶</a>
-</dd>
- <dd class="break"></dd>
-<dt id="section-4.2.2-1.7">
<code>[01 04]</code> - NES_GAME_GENIE_CODE</dt>
- <dd style="margin-left: 1.5em" id="section-4.2.2-1.8">Specifies a Game Genie code for the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#nes_game_genie_code" class="auto internal xref">Section 4.3.2.4</a>).<a href="#section-4.2.2-1.8" class="pilcrow">¶</a>
+ <dd style="margin-left: 1.5em" id="section-4.2.2-1.6">Specifies a Game Genie code for the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#nes_game_genie_code" class="auto internal xref">Section 4.3.2.3</a>).<a href="#section-4.2.2-1.6" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
@@ -2214,13 +2210,13 @@ li > p:last-of-type:only-child {
</h4>
<span class="break"></span><dl class="dlNewline" id="section-4.2.3-1">
<dt id="section-4.2.3-1.1">
-<code>[02 02]</code> - SNES_CLOCK_FILTER</dt>
- <dd style="margin-left: 1.5em" id="section-4.2.3-1.2">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 <span class="bcp14">SHOULD</span> be accepted by the replay device. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#snes_clock_filter" class="auto internal xref">Section 4.3.3.1</a>).<a href="#section-4.2.3-1.2" class="pilcrow">¶</a>
+<code>[01 01]</code> - SNES_LATCH_FILTER</dt>
+ <dd style="margin-left: 1.5em" id="section-4.2.3-1.2">Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals <span class="bcp14">SHOULD</span> be accepted by the replay device. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#snes_latch_filter" class="auto internal xref">Section 4.3.3.1</a>).<a href="#section-4.2.3-1.2" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
<dt id="section-4.2.3-1.3">
-<code>[02 03]</code> - SNES_OVERREAD</dt>
- <dd style="margin-left: 1.5em" id="section-4.2.3-1.4">Specifies whether a high or low signal <span class="bcp14">SHOULD</span> 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 <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#snes_overread" class="auto internal xref">Section 4.3.3.2</a>).<a href="#section-4.2.3-1.4" class="pilcrow">¶</a>
+<code>[02 02]</code> - SNES_CLOCK_FILTER</dt>
+ <dd style="margin-left: 1.5em" id="section-4.2.3-1.4">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 <span class="bcp14">SHOULD</span> be accepted by the replay device. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#snes_clock_filter" class="auto internal xref">Section 4.3.3.2</a>).<a href="#section-4.2.3-1.4" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
<dt id="section-4.2.3-1.5">
@@ -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 {
</dl>
</section>
</div>
+<div id="port_overread">
+<section id="section-4.3.1.23">
+ <h5 id="name-port_overread-packet">
+<a href="#section-4.3.1.23" class="section-number selfRef">4.3.1.23. </a><a href="#name-port_overread-packet" class="section-name selfRef">PORT_OVERREAD Packet</a>
+ </h5>
+<p id="section-4.3.1.23-1">PORT_OVERREAD packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.1.23-1" class="pilcrow">¶</a></p>
+<div class="alignLeft art-text artwork" id="section-4.3.1.23-2">
+<pre>
+ 0 1
+ +----------+----------+
+ | Port (N) | High (B) |
+ +----------+----------+
+
+ Port (N) [1 octet]
+ High (Boolean) [1 octet]
+</pre><a href="#section-4.3.1.23-2" class="pilcrow">¶</a>
+</div>
+<span class="break"></span><dl class="dlNewline" id="section-4.3.1.23-3">
+ <dt id="section-4.3.1.23-3.1"><strong>Port</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.1.23-3.2">Controller port number (<strong>Port</strong> number <span class="bcp14">MUST</span> be <strong>1-indexed</strong>).<a href="#section-4.3.1.23-3.2" class="pilcrow">¶</a>
+</dd>
+ <dd class="break"></dd>
+<dt id="section-4.3.1.23-3.3"><strong>High</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.1.23-3.4">Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.<a href="#section-4.3.1.23-3.4" class="pilcrow">¶</a>
+</dd>
+ <dd class="break"></dd>
+</dl>
+</section>
+</div>
</section>
<section id="section-4.3.2">
<h4 id="name-nes-specific-key-payload-fo">
@@ -3100,37 +3125,13 @@ li > p:last-of-type:only-child {
</dl>
</section>
</div>
-<div id="nes_overread">
-<section id="section-4.3.2.3">
- <h5 id="name-nes_overread-packet">
-<a href="#section-4.3.2.3" class="section-number selfRef">4.3.2.3. </a><a href="#name-nes_overread-packet" class="section-name selfRef">NES_OVERREAD Packet</a>
- </h5>
-<p id="section-4.3.2.3-1">NES_OVERREAD packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.2.3-1" class="pilcrow">¶</a></p>
-<div class="alignLeft art-text artwork" id="section-4.3.2.3-2">
-<pre>
- 0
- +----------+
- | High (B) |
- +----------+
-
- High (Boolean) [1 octet]
-</pre><a href="#section-4.3.2.3-2" class="pilcrow">¶</a>
-</div>
-<span class="break"></span><dl class="dlNewline" id="section-4.3.2.3-3">
- <dt id="section-4.3.2.3-3.1"><strong>High</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.2.3-3.2">Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.<a href="#section-4.3.2.3-3.2" class="pilcrow">¶</a>
-</dd>
- <dd class="break"></dd>
-</dl>
-</section>
-</div>
<div id="nes_game_genie_code">
-<section id="section-4.3.2.4">
+<section id="section-4.3.2.3">
<h5 id="name-nes_game_genie_code-packet">
-<a href="#section-4.3.2.4" class="section-number selfRef">4.3.2.4. </a><a href="#name-nes_game_genie_code-packet" class="section-name selfRef">NES_GAME_GENIE_CODE Packet</a>
+<a href="#section-4.3.2.3" class="section-number selfRef">4.3.2.3. </a><a href="#name-nes_game_genie_code-packet" class="section-name selfRef">NES_GAME_GENIE_CODE Packet</a>
</h5>
-<p id="section-4.3.2.4-1">NES_GAME_GENIE_CODE packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.2.4-1" class="pilcrow">¶</a></p>
-<div class="alignLeft art-text artwork" id="section-4.3.2.4-2">
+<p id="section-4.3.2.3-1">NES_GAME_GENIE_CODE packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.2.3-1" class="pilcrow">¶</a></p>
+<div class="alignLeft art-text artwork" id="section-4.3.2.3-2">
<pre>
0...
+==========+
@@ -3138,15 +3139,15 @@ li > p:last-of-type:only-child {
+==========+
Code (String) [PLEN octets]
-</pre><a href="#section-4.3.2.4-2" class="pilcrow">¶</a>
+</pre><a href="#section-4.3.2.3-2" class="pilcrow">¶</a>
</div>
-<span class="break"></span><dl class="dlNewline" id="section-4.3.2.4-3">
- <dt id="section-4.3.2.4-3.1"><strong>Code</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.2.4-3.2">Game Genie code (example: "AATOZA").<a href="#section-4.3.2.4-3.2" class="pilcrow">¶</a>
+<span class="break"></span><dl class="dlNewline" id="section-4.3.2.3-3">
+ <dt id="section-4.3.2.3-3.1"><strong>Code</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.2.3-3.2">Game Genie code (example: "AATOZA").<a href="#section-4.3.2.3-3.2" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.3.2.4-3.3"><strong>PLEN</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.2.4-3.4">Length of the packet payload.<a href="#section-4.3.2.4-3.4" class="pilcrow">¶</a>
+<dt id="section-4.3.2.3-3.3"><strong>PLEN</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.2.3-3.4">Length of the packet payload.<a href="#section-4.3.2.3-3.4" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
@@ -3157,49 +3158,49 @@ li > p:last-of-type:only-child {
<h4 id="name-snes-specific-key-payload-f">
<a href="#section-4.3.3" class="section-number selfRef">4.3.3. </a><a href="#name-snes-specific-key-payload-f" class="section-name selfRef">SNES Specific Key Payload Formats</a>
</h4>
-<div id="snes_clock_filter">
+<div id="snes_latch_filter">
<section id="section-4.3.3.1">
- <h5 id="name-snes_clock_filter-packet">
-<a href="#section-4.3.3.1" class="section-number selfRef">4.3.3.1. </a><a href="#name-snes_clock_filter-packet" class="section-name selfRef">SNES_CLOCK_FILTER Packet</a>
+ <h5 id="name-snes_latch_filter-packet">
+<a href="#section-4.3.3.1" class="section-number selfRef">4.3.3.1. </a><a href="#name-snes_latch_filter-packet" class="section-name selfRef">SNES_LATCH_FILTER Packet</a>
</h5>
-<p id="section-4.3.3.1-1">SNES_CLOCK_FILTER packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.3.1-1" class="pilcrow">¶</a></p>
+<p id="section-4.3.3.1-1">SNES_LATCH_FILTER packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.3.1-1" class="pilcrow">¶</a></p>
<div class="alignLeft art-text artwork" id="section-4.3.3.1-2">
<pre>
- 0
- +----------+
- | Time (N) |
- +----------+
+ 0 1
+ +-----+-----+
+ | Time (N) |
+ +-----+-----+
- Time (Unsigned Integer) [1 octet]
+ Time (Unsigned Integer) [2 octets]
</pre><a href="#section-4.3.3.1-2" class="pilcrow">¶</a>
</div>
<span class="break"></span><dl class="dlNewline" id="section-4.3.3.1-3">
<dt id="section-4.3.3.1-3.1"><strong>Time</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.3.1-3.2">Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).<a href="#section-4.3.3.1-3.2" class="pilcrow">¶</a>
+ <dd style="margin-left: 1.5em" id="section-4.3.3.1-3.2">Latch filter length of time in microseconds.<a href="#section-4.3.3.1-3.2" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
</section>
</div>
-<div id="snes_overread">
+<div id="snes_clock_filter">
<section id="section-4.3.3.2">
- <h5 id="name-snes_overread-packet">
-<a href="#section-4.3.3.2" class="section-number selfRef">4.3.3.2. </a><a href="#name-snes_overread-packet" class="section-name selfRef">SNES_OVERREAD Packet</a>
+ <h5 id="name-snes_clock_filter-packet">
+<a href="#section-4.3.3.2" class="section-number selfRef">4.3.3.2. </a><a href="#name-snes_clock_filter-packet" class="section-name selfRef">SNES_CLOCK_FILTER Packet</a>
</h5>
-<p id="section-4.3.3.2-1">SNES_OVERREAD packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.3.2-1" class="pilcrow">¶</a></p>
+<p id="section-4.3.3.2-1">SNES_CLOCK_FILTER packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.3.2-1" class="pilcrow">¶</a></p>
<div class="alignLeft art-text artwork" id="section-4.3.3.2-2">
<pre>
0
+----------+
- | High (B) |
+ | Time (N) |
+----------+
- High (Boolean) [1 octet]
+ Time (Unsigned Integer) [1 octet]
</pre><a href="#section-4.3.3.2-2" class="pilcrow">¶</a>
</div>
<span class="break"></span><dl class="dlNewline" id="section-4.3.3.2-3">
- <dt id="section-4.3.3.2-3.1"><strong>High</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.3.2-3.2">Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.<a href="#section-4.3.3.2-3.2" class="pilcrow">¶</a>
+ <dt id="section-4.3.3.2-3.1"><strong>Time</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.3.2-3.2">Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).<a href="#section-4.3.3.2-3.2" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
@@ -3394,14 +3395,14 @@ li > p:last-of-type:only-child {
<p id="section-4.3.5.3-1">TRANSITION packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.5.3-1" class="pilcrow">¶</a></p>
<div class="alignLeft art-text artwork" id="section-4.3.5.3-2">
<pre>
- 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]
</pre><a href="#section-4.3.5.3-2" class="pilcrow">¶</a>
</div>
<span class="break"></span><dl class="dlNewline" id="section-4.3.5.3-3">
@@ -3423,20 +3425,24 @@ li > p:last-of-type:only-child {
<dd style="margin-left: 1.5em" id="section-4.3.5.3-3.2">Determines specific timing type for start of transition.<a href="#section-4.3.5.3-3.2" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.3.5.3-3.3"><strong>Index</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.4">Time or offset value to start transition.<a href="#section-4.3.5.3-3.4" class="pilcrow">¶</a>
+<dt id="section-4.3.5.3-3.3"><strong>Port</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.4">Controller port number of input index. If <strong>Index Type</strong> is <code>[05]</code>, <strong>Port</strong> <span class="bcp14">MUST</span> be <strong>1-indexed</strong> Port number, otherwise <strong>Port</strong> <span class="bcp14">MAY</span> be any value.<a href="#section-4.3.5.3-3.4" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.3.5.3-3.5"><strong>Type</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.6">Type of transition. If <strong>Type</strong> is <code>[FF]</code>, the transition action will be interpreting a <strong>TASD</strong> packet.<a href="#section-4.3.5.3-3.6" class="pilcrow">¶</a>
+<dt id="section-4.3.5.3-3.5"><strong>Index</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.6">Time or offset value to start transition. If <strong>Index Type</strong> is <code>[05]</code>, <strong>Index</strong> <span class="bcp14">MUST</span> be the byte offset of <strong>INPUT_CHUNK</strong> data from <strong>INPUT_CHUNK</strong> packets for the controller port specified by <strong>Port</strong>.<a href="#section-4.3.5.3-3.6" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.3.5.3-3.7"><strong>Inner Packet</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.8">If <strong>Type</strong> is <code>[FF]</code>, <strong>Inner Packet</strong> <span class="bcp14">SHOULD</span> be a <strong>TASD</strong> packet. <strong>Inner Packet</strong> <span class="bcp14">MUST NOT</span> be a <strong>INPUT_CHUNK</strong>, <strong>INPUT_MOMENT</strong>, <strong>TRANSITION</strong>, <strong>LAG_FRAME_CHUNK</strong>, or <strong>MOVIE_TRANSITION</strong> packet.<a href="#section-4.3.5.3-3.8" class="pilcrow">¶</a>
+<dt id="section-4.3.5.3-3.7"><strong>Type</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.8">Type of transition. If <strong>Type</strong> is <code>[FF]</code>, the transition action will be interpreting a <strong>TASD</strong> packet.<a href="#section-4.3.5.3-3.8" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
-<dt id="section-4.3.5.3-3.9"><strong>PLEN</strong></dt>
- <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.10">Length of the packet payload (Not <strong>Inner Packet</strong> length).<a href="#section-4.3.5.3-3.10" class="pilcrow">¶</a>
+<dt id="section-4.3.5.3-3.9"><strong>Inner Packet</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.10">If <strong>Type</strong> is <code>[FF]</code>, <strong>Inner Packet</strong> <span class="bcp14">SHOULD</span> be a <strong>TASD</strong> packet. <strong>Inner Packet</strong> <span class="bcp14">MUST NOT</span> be a <strong>INPUT_CHUNK</strong>, <strong>INPUT_MOMENT</strong>, <strong>TRANSITION</strong>, <strong>LAG_FRAME_CHUNK</strong>, or <strong>MOVIE_TRANSITION</strong> packet.<a href="#section-4.3.5.3-3.10" class="pilcrow">¶</a>
+</dd>
+ <dd class="break"></dd>
+<dt id="section-4.3.5.3-3.11"><strong>PLEN</strong></dt>
+ <dd style="margin-left: 1.5em" id="section-4.3.5.3-3.12">Length of the packet payload (Not <strong>Inner Packet</strong> length).<a href="#section-4.3.5.3-3.12" class="pilcrow">¶</a>
</dd>
<dd class="break"></dd>
</dl>
@@ -3554,12 +3560,12 @@ li > p:last-of-type:only-child {
<p id="section-4.3.6.2-1">EXPERIMENTAL packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-4.3.6.2-1" class="pilcrow">¶</a></p>
<div class="alignLeft art-text artwork" id="section-4.3.6.2-2">
<pre>
- 0...
- +==================+
+ 0
+ +------------------+
| Experimental (B) |
- +==================+
+ +------------------+
- Experimental (Boolean) [PLEN octet]
+ Experimental (Boolean) [1 octet]
</pre><a href="#section-4.3.6.2-2" class="pilcrow">¶</a>
</div>
<span class="break"></span><dl class="dlNewline" id="section-4.3.6.2-3">
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 @@
<dt><tt>[00 14]</tt></dt> <dd>MOVIE_LICENSE</dd>
<dt><tt>[00 15]</tt></dt> <dd>MOVIE_FILE</dd>
<dt><tt>[00 F0]</tt></dt> <dd>PORT_CONTROLLER</dd>
+ <dt><tt>[00 F1]</tt></dt> <dd>PORT_OVERREAD</dd>
</dl>
</section>
<section numbered="true" toc="default">
@@ -255,7 +256,6 @@
<dl spacing="compact">
<dt><tt>[01 01]</tt></dt> <dd>NES_LATCH_FILTER</dd>
<dt><tt>[01 02]</tt></dt> <dd>NES_CLOCK_FILTER</dd>
- <dt><tt>[01 03]</tt></dt> <dd>NES_OVERREAD</dd>
<dt><tt>[01 04]</tt></dt> <dd>NES_GAME_GENIE_CODE</dd>
</dl>
</section>
@@ -263,7 +263,6 @@
<name>SNES Specific Keys</name>
<dl spacing="compact">
<dt><tt>[02 02]</tt></dt> <dd>SNES_CLOCK_FILTER</dd>
- <dt><tt>[02 03]</tt></dt> <dd>SNES_OVERREAD</dd>
<dt><tt>[02 04]</tt></dt> <dd>SNES_GAME_GENIE_CODE</dd>
<dt><tt>[02 05]</tt></dt> <dd>SNES_LATCH_TRAIN</dd>
</dl>
@@ -342,6 +341,8 @@
<dd>Specifies the TAS movie data. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="movie_file"/>).</dd>
<dt><tt>[00 F0]</tt> - PORT_CONTROLLER</dt>
<dd>Specifies the controller type in specific console controller ports for the TAS when played on hardware. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="port_controller"/>).</dd>
+ <dt><tt>[00 F1]</tt> - PORT_OVERREAD</dt>
+ <dd>Specifies whether a high or low signal <bcp14>SHOULD</bcp14> 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 <bcp14>OPTIONAL</bcp14>. Discussed in (<xref target="port_overread"/>).</dd>
</dl>
</section>
<section numbered="true" toc="default">
@@ -351,8 +352,6 @@
<dd>Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals <bcp14>SHOULD</bcp14> be accepted by the replay device. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="nes_latch_filter"/>).</dd>
<dt><tt>[01 02]</tt> - NES_CLOCK_FILTER</dt>
<dd>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 <bcp14>SHOULD</bcp14> be accepted by the replay device. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="nes_clock_filter"/>).</dd>
- <dt><tt>[01 03]</tt> - NES_OVERREAD</dt>
- <dd>Specifies whether a high or low signal <bcp14>SHOULD</bcp14> 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 <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="nes_overread"/>).</dd>
<dt><tt>[01 04]</tt> - NES_GAME_GENIE_CODE</dt>
<dd>Specifies a Game Genie code for the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="nes_game_genie_code"/>).</dd>
</dl>
@@ -360,10 +359,10 @@
<section numbered="true" toc="default">
<name>SNES Specific Key Descriptions</name>
<dl newline="true">
+ <dt><tt>[01 01]</tt> - SNES_LATCH_FILTER</dt>
+ <dd>Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals <bcp14>SHOULD</bcp14> be accepted by the replay device. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="snes_latch_filter"/>).</dd>
<dt><tt>[02 02]</tt> - SNES_CLOCK_FILTER</dt>
<dd>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 <bcp14>SHOULD</bcp14> be accepted by the replay device. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="snes_clock_filter"/>).</dd>
- <dt><tt>[02 03]</tt> - SNES_OVERREAD</dt>
- <dd>Specifies whether a high or low signal <bcp14>SHOULD</bcp14> 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 <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="snes_overread"/>).</dd>
<dt><tt>[02 04]</tt> - SNES_GAME_GENIE_CODE</dt>
<dd>Specifies a Game Genie code for the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="snes_game_genie_code"/>).</dd>
<dt><tt>[02 05]</tt> - SNES_LATCH_TRAIN</dt>
@@ -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 @@
<dd>Specifies the controller type connected to the <strong>Port</strong>. <strong>(RESERVED)</strong> specifies that the controller type is not described in this document, but the byte values are reserved for a later version of the <strong>TASD</strong> file format protocol. Input formats for specific controller types are described in (<xref target="controller_inputs"/>).</dd>
</dl>
</section>
+ <section numbered="true" toc="default" anchor="port_overread">
+ <name>PORT_OVERREAD Packet</name>
+ <t>PORT_OVERREAD packets <bcp14>MUST</bcp14> be in the following format:</t>
+ <artwork><![CDATA[
+ 0 1
+ +----------+----------+
+ | Port (N) | High (B) |
+ +----------+----------+
+
+ Port (N) [1 octet]
+ High (Boolean) [1 octet]]]>
+ </artwork>
+ <dl newline="true">
+ <dt><strong>Port</strong></dt>
+ <dd>Controller port number (<strong>Port</strong> number <bcp14>MUST</bcp14> be <strong>1-indexed</strong>).</dd>
+ <dt><strong>High</strong></dt>
+ <dd>Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.</dd>
+ </dl>
+ </section>
</section>
<section numbered="true" toc="default">
<name>NES Specific Key Payload Formats</name>
@@ -953,22 +971,6 @@
<dd>Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).</dd>
</dl>
</section>
- <section numbered="true" toc="default" anchor="nes_overread">
- <name>NES_OVERREAD Packet</name>
- <t>NES_OVERREAD packets <bcp14>MUST</bcp14> be in the following format:</t>
- <artwork><![CDATA[
- 0
- +----------+
- | High (B) |
- +----------+
-
- High (Boolean) [1 octet]]]>
- </artwork>
- <dl newline="true">
- <dt><strong>High</strong></dt>
- <dd>Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.</dd>
- </dl>
- </section>
<section numbered="true" toc="default" anchor="nes_game_genie_code">
<name>NES_GAME_GENIE_CODE Packet</name>
<t>NES_GAME_GENIE_CODE packets <bcp14>MUST</bcp14> be in the following format:</t>
@@ -990,36 +992,36 @@
</section>
<section numbered="true" toc="default">
<name>SNES Specific Key Payload Formats</name>
- <section numbered="true" toc="default" anchor="snes_clock_filter">
- <name>SNES_CLOCK_FILTER Packet</name>
- <t>SNES_CLOCK_FILTER packets <bcp14>MUST</bcp14> be in the following format:</t>
+ <section numbered="true" toc="default" anchor="snes_latch_filter">
+ <name>SNES_LATCH_FILTER Packet</name>
+ <t>SNES_LATCH_FILTER packets <bcp14>MUST</bcp14> be in the following format:</t>
<artwork><![CDATA[
- 0
- +----------+
- | Time (N) |
- +----------+
+ 0 1
+ +-----+-----+
+ | Time (N) |
+ +-----+-----+
- Time (Unsigned Integer) [1 octet]]]>
+ Time (Unsigned Integer) [2 octets]]]>
</artwork>
<dl newline="true">
<dt><strong>Time</strong></dt>
- <dd>Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).</dd>
+ <dd>Latch filter length of time in microseconds.</dd>
</dl>
</section>
- <section numbered="true" toc="default" anchor="snes_overread">
- <name>SNES_OVERREAD Packet</name>
- <t>SNES_OVERREAD packets <bcp14>MUST</bcp14> be in the following format:</t>
+ <section numbered="true" toc="default" anchor="snes_clock_filter">
+ <name>SNES_CLOCK_FILTER Packet</name>
+ <t>SNES_CLOCK_FILTER packets <bcp14>MUST</bcp14> be in the following format:</t>
<artwork><![CDATA[
0
+----------+
- | High (B) |
+ | Time (N) |
+----------+
- High (Boolean) [1 octet]]]>
+ Time (Unsigned Integer) [1 octet]]]>
</artwork>
<dl newline="true">
- <dt><strong>High</strong></dt>
- <dd>Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.</dd>
+ <dt><strong>Time</strong></dt>
+ <dd>Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).</dd>
</dl>
</section>
<section numbered="true" toc="default" anchor="snes_game_genie_code">
@@ -1145,14 +1147,14 @@
<name>TRANSITION Packet</name>
<t>TRANSITION packets <bcp14>MUST</bcp14> be in the following format:</t>
<artwork><![CDATA[
- 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
@@ -1160,20 +1162,22 @@
[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]]]>
</artwork>
<dl newline="true">
<dt><strong>Input Type</strong></dt>
<dd>Determines specific timing type for start of transition.</dd>
-
+ <dt><strong>Port</strong></dt>
+ <dd>Controller port number of input index. If <strong>Index Type</strong> is <tt>[05]</tt>, <strong>Port</strong> <bcp14>MUST</bcp14> be <strong>1-indexed</strong> Port number, otherwise <strong>Port</strong> <bcp14>MAY</bcp14> be any value.</dd>
<dt><strong>Index</strong></dt>
- <dd>Time or offset value to start transition.</dd>
+ <dd>Time or offset value to start transition. If <strong>Index Type</strong> is <tt>[05]</tt>, <strong>Index</strong> <bcp14>MUST</bcp14> be the byte offset of <strong>INPUT_CHUNK</strong> data from <strong>INPUT_CHUNK</strong> packets for the controller port specified by <strong>Port</strong>.</dd>
<dt><strong>Type</strong></dt>
<dd>Type of transition. If <strong>Type</strong> is <tt>[FF]</tt>, the transition action will be interpreting a <strong>TASD</strong> packet.</dd>
<dt><strong>Inner Packet</strong></dt>
@@ -1255,12 +1259,12 @@
<name>EXPERIMENTAL Packet</name>
<t>EXPERIMENTAL packets <bcp14>MUST</bcp14> be in the following format:</t>
<artwork><![CDATA[
- 0...
- +==================+
+ 0
+ +------------------+
| Experimental (B) |
- +==================+
+ +------------------+
- Experimental (Boolean) [PLEN octet]]]>
+ Experimental (Boolean) [1 octet]]]>
</artwork>
<dl newline="true">
<dt><strong>Experimental</strong></dt>
@@ -1914,6 +1918,8 @@
</section>
<!-- Change Log
+draft 11 - 2023-09-24 VG Made OVERREAD packets generic and added Port to it, now is PORT_OVERREAD. Fixed packet drawing error in EXPERIMENTAL. Added SNES_LATCH_FILTER. Added Port to TRANSITION packet. Specify meaning of INPUT_CHUNK offset for Index value of TRANSITION packet.
+
draft 10 - 2023-09-18 VG Specify that PEXP MUST be greater than 0
draft 09 - 2023-09-17 Bigbass Added "Structure" section to better define the overall structure of a TASD file
diff --git a/tools/lua/tasd-fceux-dumpscript.lua b/tools/lua/tasd-fceux-dumpscript.lua
index 27f9c71..e5d968d 100644
--- a/tools/lua/tasd-fceux-dumpscript.lua
+++ b/tools/lua/tasd-fceux-dumpscript.lua
@@ -38,10 +38,10 @@ local RERECORDS = 0x000e -- Done
local MEMORY_INIT = 0x0012 -- Done
local GAME_IDENTIFIER = 0x0013 -- Done
local PORT_CONTROLLER = 0x00f0 -- Done (More to handle later)
+local PORT_OVERREAD = 0x00f1 -- Done
local NES_LATCH_FILTER = 0x0101 -- Done
local NES_CLOCK_FILTER = 0x0102 -- Done
-local NES_OVERREAD = 0x0103 -- Done
local INPUT_CHUNK = 0xfe01 -- Done (More to handle later)
local TRANSITION = 0xfe03 -- Done
@@ -60,6 +60,7 @@ local cpuCyclesLastFrame = 0
local region = ""
local tasdFile
+local lastController
local nesControls = {"right", "left", "down", "up", "start", "select", "B", "A"}
@@ -172,6 +173,17 @@ function getPortControllerPacket(playerCount, controllerType)
return finishedPackets
end
+function getPortOverreadPacket(playerCount, controllerType)
+ local finishedPackets = ""
+ for x = 1, playerCount, 1 do
+ local packetPayload = intToBytes(x, 1)
+ packetPayload = packetPayload .. intToBytes(0x00, 1)
+ finishedPackets = finishedPackets .. makePacket(PORT_OVERREAD, packetPayload)
+ end
+ return finishedPackets
+end
+
+
function getNESLatchFilterPacket()
local packetPayload = intToBytes(8000, 2)
return makePacket(NES_LATCH_FILTER, packetPayload)
@@ -182,11 +194,6 @@ function getNESClockFilterPacket()
return makePacket(NES_CLOCK_FILTER, packetPayload)
end
-function getNESOverreadPacket()
- local packetPayload = intToBytes(0, 1)
- return makePacket(NES_OVERREAD, packetPayload)
-end
-
function getInputChunkPacket(player, inputs, controllerType)
local payloadLen = 1
if (controllerType == NES_STANDARD_CONTROLLER) then
@@ -205,6 +212,7 @@ end
function getTransitionPacket()
local packetPayload = intToBytes(0x01, 1)
+ packetPayload = packetPayload .. intToBytes(0x00, 1)
packetPayload = packetPayload .. intToBytes(movie.framecount(), 8)
packetPayload = packetPayload .. intToBytes(0x01, 1)
return makePacket(TRANSITION, packetPayload)
@@ -237,9 +245,9 @@ function startDump()
tasdFile:write(getTotalFramesPacket())
tasdFile:write(getRerecordsPacket())
tasdFile:write(getPortControllerPacket(2, NES_STANDARD_CONTROLLER))
+ tasdFile:write(getPortOverreadPacket(2))
tasdFile:write(getNESLatchFilterPacket())
tasdFile:write(getNESClockFilterPacket())
- tasdFile:write(getNESOverreadPacket())
-- Rest CPU cycle count to 0
debugger.resetcyclescount()
movie.playbeginning()