<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://f256wiki.wildbitscomputing.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RichL</id>
	<title>Foenix F256 / Wildbits/K2 Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://f256wiki.wildbitscomputing.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RichL"/>
	<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=Special:Contributions/RichL"/>
	<updated>2026-05-30T21:04:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=FNX6809_DisplayCodes&amp;diff=38543</id>
		<title>FNX6809 DisplayCodes</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=FNX6809_DisplayCodes&amp;diff=38543"/>
		<updated>2026-04-28T18:55:46Z</updated>

		<summary type="html">&lt;p&gt;RichL: /* remove Escape Codes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wildbits VTIO Driver Control Sequences =&lt;br /&gt;
&lt;br /&gt;
This document describes the control character sequences supported by the &amp;lt;code&amp;gt;vtio.asm&amp;lt;/code&amp;gt; video terminal I/O driver for the Wildbits platform.&lt;br /&gt;
&lt;br /&gt;
== Basic Control Characters (0x00 - 0x0D) ==&lt;br /&gt;
&lt;br /&gt;
These single-byte commands perform basic cursor and screen operations.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Hex Code !! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Home Cursor&#039;&#039;&#039; || Moves the cursor to the top-left corner (0,0).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x02&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Move Cursor (XY)&#039;&#039;&#039; || Positions the cursor at (X, Y). Followed by two bytes: &amp;lt;code&amp;gt;X + 32&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Y + 32&amp;lt;/code&amp;gt;. (See &amp;quot;Coordinate Offset&amp;quot; below).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x03&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Erase Line&#039;&#039;&#039; || Clears the entire current line.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x04&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Erase to EOL&#039;&#039;&#039; || Clears the line from the current cursor position to the end.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x05&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Control&#039;&#039;&#039; || Sub-command for cursor state. Followed by a mode byte (see below).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x06&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Right&#039;&#039;&#039; || Moves the cursor one position to the right.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x07&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Bell&#039;&#039;&#039; || Sounds the system bell.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x08&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Left&#039;&#039;&#039; || Moves the cursor left and erases the character previously at that position (Backspace).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x09&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Up&#039;&#039;&#039; || Moves the cursor one line up.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x0A&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Down&#039;&#039;&#039; || Moves the cursor one line down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x0B&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Erase to EOS&#039;&#039;&#039; || Clears the screen from the cursor position to the end.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x0C&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Clear Screen&#039;&#039;&#039; || Clears the entire screen and homes the cursor.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x0D&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Carriage Return&#039;&#039;&#039; || Moves the cursor to the beginning of the current line (column 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Coordinate Offset (+32) ===&lt;br /&gt;
The &#039;&#039;&#039;Move Cursor (XY)&#039;&#039;&#039; command (&amp;lt;code&amp;gt;0x02&amp;lt;/code&amp;gt;) requires coordinates to be offset by &#039;&#039;&#039;32&#039;&#039;&#039; (0x20). This is a standard OS-9 convention used to shift coordinate values out of the range of ASCII control characters (0x00–0x1F), ensuring they are treated as data rather than unintended commands.&lt;br /&gt;
* &#039;&#039;&#039;To move to Column 0:&#039;&#039;&#039; Send &amp;lt;code&amp;gt;0 + 32 = 32&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;0x20&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &#039;&#039;&#039;To move to Column 10:&#039;&#039;&#039; Send &amp;lt;code&amp;gt;10 + 32 = 42&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;0x2A&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &#039;&#039;&#039;Internal Math:&#039;&#039;&#039; The driver performs &amp;lt;code&amp;gt;InternalCoord = Argument - 0x20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Cursor Control (0x05) Sub-commands ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sequence !! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x05 0x20&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Off&#039;&#039;&#039; || Hides the video cursor.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x05 0x21&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor On&#039;&#039;&#039; || Shows the video cursor.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x05 0x22 &amp;amp;lt;CHR&amp;amp;gt;&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Char&#039;&#039;&#039; || Changes the cursor character to the provided byte &amp;lt;code&amp;gt;&amp;amp;lt;CHR&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x05 0x23 &amp;amp;lt;RATE&amp;amp;gt;&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Rate&#039;&#039;&#039; || Changes flash rate: &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;=1s, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;=0.5s, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;=0.25s, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;=0.2s, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;=Disabled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Escape Sequences (0x1B) ==&lt;br /&gt;
&lt;br /&gt;
Extended commands typically used for windowing and palette management.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sequence !! Command !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x20&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Set Window&#039;&#039;&#039; || Configures screen mode and dimensions. || &amp;lt;code&amp;gt;STY&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CPX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CPY&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SZX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SZY&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FG&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BG&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BD&amp;lt;/code&amp;gt; (See below)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x32&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Fore Color&#039;&#039;&#039; || Sets the current foreground color. || &amp;lt;code&amp;gt;&amp;amp;lt;COLOR&amp;amp;gt;&amp;lt;/code&amp;gt; (1 byte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x33&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Back Color&#039;&#039;&#039; || Sets the current background color. || &amp;lt;code&amp;gt;&amp;amp;lt;COLOR&amp;amp;gt;&amp;lt;/code&amp;gt; (1 byte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x34&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Border Color&#039;&#039;&#039; || Sets the current border color. || &amp;lt;code&amp;gt;&amp;amp;lt;COLOR&amp;amp;gt;&amp;lt;/code&amp;gt; (1 byte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x60&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Fore Palette&#039;&#039;&#039; || Modifies a foreground palette entry. || &amp;lt;code&amp;gt;PRN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; (See below)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x61&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Back Palette&#039;&#039;&#039; || Modifies a background palette entry. || &amp;lt;code&amp;gt;PRN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; (See below)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x62&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Font Set 0&#039;&#039;&#039; || Switches to font set 0. || None&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x63&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Font Set 1&#039;&#039;&#039; || Switches to font set 1. || None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Set Window (1B 20) Parameters ===&lt;br /&gt;
The command requires 8 parameter bytes following the header:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;STY (Screen Type):&#039;&#039;&#039;&lt;br /&gt;
** &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: 40x30 Text&lt;br /&gt;
** &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: 80x30 Text&lt;br /&gt;
** &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;: 40x60 Text&lt;br /&gt;
** &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;: 80x60 Text&lt;br /&gt;
* &#039;&#039;&#039;CPX (Starting X):&#039;&#039;&#039; The starting column (0–79). &#039;&#039;Note: Currently ignored for anchor point; windows always start at (0,0).&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;CPY (Starting Y):&#039;&#039;&#039; The starting row (0–59). &#039;&#039;Note: Currently ignored for anchor point.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SZX (Width):&#039;&#039;&#039; The width of the window in columns.&lt;br /&gt;
* &#039;&#039;&#039;SZY (Height):&#039;&#039;&#039; The height of the window in rows.&lt;br /&gt;
* &#039;&#039;&#039;FG (Foreground):&#039;&#039;&#039; Default foreground color index (0–15).&lt;br /&gt;
* &#039;&#039;&#039;BG (Background):&#039;&#039;&#039; Default background color index (0–15).&lt;br /&gt;
* &#039;&#039;&#039;BD (Border):&#039;&#039;&#039; Border color index (0–15).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: Executing this command clears the screen to the specified background color.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Palette Modification Parameters (1B 60 / 1B 61) ===&lt;br /&gt;
These commands require 5 parameter bytes following the header:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRN (Palette Register Number):&#039;&#039;&#039; The index of the palette register to modify (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &#039;&#039;&#039;R, G, B:&#039;&#039;&#039; Red, Green, and Blue intensity values (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;255&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &#039;&#039;&#039;A (Alpha):&#039;&#039;&#039; Opacity/Alpha value (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;255&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous Sequences ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sequence !! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1C &amp;amp;lt;CHR&amp;amp;gt;&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Raw Write&#039;&#039;&#039; || Writes the next byte &amp;lt;code&amp;gt;&amp;amp;lt;CHR&amp;amp;gt;&amp;lt;/code&amp;gt; directly to the screen (bypasses control checks).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1F 0x20&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Reverse On&#039;&#039;&#039; || Enables reverse video (swaps FG and BG colors).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1F 0x21&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Reverse Off&#039;&#039;&#039; || Disables reverse video.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: Characters 0x0E-0x1A, 0x1D, and 0x1E are currently processed as No-Ops by the driver.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Example Interpretation ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sequence:&#039;&#039;&#039; &amp;lt;code&amp;gt;1b 61 01 ff 00 00 ff 05 22 f0 1b 20 02 00 00 50 18 00 01 00 1b 32 07&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This string performs the following operations in order:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;1b 61 01 ff 00 00 ff&amp;lt;/code&amp;gt;&#039;&#039;&#039;: Modifies Background Palette register &#039;&#039;&#039;1&#039;&#039;&#039; to be solid &#039;&#039;&#039;Red&#039;&#039;&#039; (&amp;lt;code&amp;gt;RGBA: 255, 0, 0, 255&amp;lt;/code&amp;gt;).&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;05 22 f0&amp;lt;/code&amp;gt;&#039;&#039;&#039;: Changes the hardware cursor character to &amp;lt;code&amp;gt;0xF0&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;1b 20 02 00 00 50 18 00 01 00&amp;lt;/code&amp;gt;&#039;&#039;&#039;: Sets an &#039;&#039;&#039;80x24&#039;&#039;&#039; window in &#039;&#039;&#039;80x30&#039;&#039;&#039; text mode starting at &amp;lt;code&amp;gt;(0,0)&amp;lt;/code&amp;gt;. It sets the default foreground to color &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, the background to color &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (Red), and the border to color &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. This operation also clears the screen to Red.&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;1b 32 07&amp;lt;/code&amp;gt;&#039;&#039;&#039;: Sets the current foreground drawing color to index &#039;&#039;&#039;7&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Result:&#039;&#039;&#039; The display switches to an 80-column mode with a red background, a custom block cursor, and text subsequently written will appear in color index 7.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Technical Note: Scrolling and Windowing Limitations ==&lt;br /&gt;
&lt;br /&gt;
The current version of the &amp;lt;code&amp;gt;vtio.asm&amp;lt;/code&amp;gt; driver has the following limitations regarding windowing:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Anchor Point:&#039;&#039;&#039; While &amp;lt;code&amp;gt;Set Window&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;1B 20&amp;lt;/code&amp;gt;) accepts &amp;lt;code&amp;gt;CPX&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;CPY&amp;lt;/code&amp;gt; (starting coordinates), the driver&#039;s internal coordinate math and the &amp;lt;code&amp;gt;SCROLL&amp;lt;/code&amp;gt; routine currently ignore these offsets. All windows are physically anchored at the top-left (0,0) of the screen.&lt;br /&gt;
# &#039;&#039;&#039;Global Scrolling:&#039;&#039;&#039; The scroll routine (&amp;lt;code&amp;gt;SCROLL&amp;lt;/code&amp;gt;) always moves data starting from the very top of the physical screen buffer. Consequently, it is not possible to define a &amp;quot;static&amp;quot; area (like a Z-machine status line) that remains unaffected by scrolling text below it using the native driver logic alone.&lt;br /&gt;
# &#039;&#039;&#039;Unimplemented Codes:&#039;&#039;&#039; Documentation/comments in the source suggest codes &amp;lt;code&amp;gt;1F 30&amp;lt;/code&amp;gt; (Insert Line) and &amp;lt;code&amp;gt;1F 31&amp;lt;/code&amp;gt; (Delete Line) may have been planned, but they are not currently implemented in the dispatch table.&lt;/div&gt;</summary>
		<author><name>RichL</name></author>
	</entry>
	<entry>
		<id>https://f256wiki.wildbitscomputing.com/index.php?title=FNX6809_DisplayCodes&amp;diff=38542</id>
		<title>FNX6809 DisplayCodes</title>
		<link rel="alternate" type="text/html" href="https://f256wiki.wildbitscomputing.com/index.php?title=FNX6809_DisplayCodes&amp;diff=38542"/>
		<updated>2026-04-28T18:53:33Z</updated>

		<summary type="html">&lt;p&gt;RichL: This is a substantial edit based on the latest vtio.asm file. AI was used to expand on the prior content.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wildbits VTIO Driver Control Sequences =&lt;br /&gt;
&lt;br /&gt;
This document describes the control character sequences supported by the &amp;lt;code&amp;gt;vtio.asm&amp;lt;/code&amp;gt; video terminal I/O driver for the Wildbits platform.&lt;br /&gt;
&lt;br /&gt;
== Basic Control Characters (0x00 - 0x0D) ==&lt;br /&gt;
&lt;br /&gt;
These single-byte commands perform basic cursor and screen operations.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Hex Code !! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Home Cursor&#039;&#039;&#039; || Moves the cursor to the top-left corner (0,0).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x02&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Move Cursor (XY)&#039;&#039;&#039; || Positions the cursor at (X, Y). Followed by two bytes: &amp;lt;code&amp;gt;X + 32&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Y + 32&amp;lt;/code&amp;gt;. (See &amp;quot;Coordinate Offset&amp;quot; below).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x03&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Erase Line&#039;&#039;&#039; || Clears the entire current line.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x04&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Erase to EOL&#039;&#039;&#039; || Clears the line from the current cursor position to the end.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x05&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Control&#039;&#039;&#039; || Sub-command for cursor state. Followed by a mode byte (see below).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x06&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Right&#039;&#039;&#039; || Moves the cursor one position to the right.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x07&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Bell&#039;&#039;&#039; || Sounds the system bell.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x08&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Left&#039;&#039;&#039; || Moves the cursor left and erases the character previously at that position (Backspace).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x09&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Up&#039;&#039;&#039; || Moves the cursor one line up.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x0A&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Down&#039;&#039;&#039; || Moves the cursor one line down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x0B&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Erase to EOS&#039;&#039;&#039; || Clears the screen from the cursor position to the end.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x0C&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Clear Screen&#039;&#039;&#039; || Clears the entire screen and homes the cursor.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x0D&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Carriage Return&#039;&#039;&#039; || Moves the cursor to the beginning of the current line (column 0).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Coordinate Offset (+32) ===&lt;br /&gt;
The &#039;&#039;&#039;Move Cursor (XY)&#039;&#039;&#039; command (&amp;lt;code&amp;gt;0x02&amp;lt;/code&amp;gt;) requires coordinates to be offset by &#039;&#039;&#039;32&#039;&#039;&#039; (0x20). This is a standard OS-9 convention used to shift coordinate values out of the range of ASCII control characters (0x00–0x1F), ensuring they are treated as data rather than unintended commands.&lt;br /&gt;
* &#039;&#039;&#039;To move to Column 0:&#039;&#039;&#039; Send &amp;lt;code&amp;gt;0 + 32 = 32&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;0x20&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &#039;&#039;&#039;To move to Column 10:&#039;&#039;&#039; Send &amp;lt;code&amp;gt;10 + 32 = 42&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;0x2A&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &#039;&#039;&#039;Internal Math:&#039;&#039;&#039; The driver performs &amp;lt;code&amp;gt;InternalCoord = Argument - 0x20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Cursor Control (0x05) Sub-commands ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sequence !! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x05 0x20&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Off&#039;&#039;&#039; || Hides the video cursor.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x05 0x21&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor On&#039;&#039;&#039; || Shows the video cursor.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x05 0x22 &amp;amp;lt;CHR&amp;amp;gt;&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Char&#039;&#039;&#039; || Changes the cursor character to the provided byte &amp;lt;code&amp;gt;&amp;amp;lt;CHR&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x05 0x23 &amp;amp;lt;RATE&amp;amp;gt;&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Cursor Rate&#039;&#039;&#039; || Changes flash rate: &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;=1s, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;=0.5s, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;=0.25s, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;=0.2s, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;=Disabled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Escape Sequences (0x1B) ==&lt;br /&gt;
&lt;br /&gt;
Extended commands typically used for windowing and palette management.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sequence !! Command !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x20&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Set Window&#039;&#039;&#039; || Configures screen mode and dimensions. || &amp;lt;code&amp;gt;STY&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CPX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CPY&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SZX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SZY&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FG&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BG&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BD&amp;lt;/code&amp;gt; (See below)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x32&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Fore Color&#039;&#039;&#039; || Sets the current foreground color. || &amp;lt;code&amp;gt;&amp;amp;lt;COLOR&amp;amp;gt;&amp;lt;/code&amp;gt; (1 byte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x33&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Back Color&#039;&#039;&#039; || Sets the current background color. || &amp;lt;code&amp;gt;&amp;amp;lt;COLOR&amp;amp;gt;&amp;lt;/code&amp;gt; (1 byte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x34&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Border Color&#039;&#039;&#039; || Sets the current border color. || &amp;lt;code&amp;gt;&amp;amp;lt;COLOR&amp;amp;gt;&amp;lt;/code&amp;gt; (1 byte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x60&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Fore Palette&#039;&#039;&#039; || Modifies a foreground palette entry. || &amp;lt;code&amp;gt;PRN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; (See below)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x61&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Back Palette&#039;&#039;&#039; || Modifies a background palette entry. || &amp;lt;code&amp;gt;PRN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; (See below)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x62&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Font Set 0&#039;&#039;&#039; || Switches to font set 0. || None&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1B 0x63&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Font Set 1&#039;&#039;&#039; || Switches to font set 1. || None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Set Window (1B 20) Parameters ===&lt;br /&gt;
The command requires 8 parameter bytes following the header:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;STY (Screen Type):&#039;&#039;&#039;&lt;br /&gt;
** &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: 40x30 Text&lt;br /&gt;
** &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: 80x30 Text&lt;br /&gt;
** &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;: 40x60 Text&lt;br /&gt;
** &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;: 80x60 Text&lt;br /&gt;
* &#039;&#039;&#039;CPX (Starting X):&#039;&#039;&#039; The starting column (0–79). &#039;&#039;Note: Currently ignored for anchor point; windows always start at (0,0).&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;CPY (Starting Y):&#039;&#039;&#039; The starting row (0–59). &#039;&#039;Note: Currently ignored for anchor point.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;SZX (Width):&#039;&#039;&#039; The width of the window in columns.&lt;br /&gt;
* &#039;&#039;&#039;SZY (Height):&#039;&#039;&#039; The height of the window in rows.&lt;br /&gt;
* &#039;&#039;&#039;FG (Foreground):&#039;&#039;&#039; Default foreground color index (0–15).&lt;br /&gt;
* &#039;&#039;&#039;BG (Background):&#039;&#039;&#039; Default background color index (0–15).&lt;br /&gt;
* &#039;&#039;&#039;BD (Border):&#039;&#039;&#039; Border color index (0–15).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: Executing this command clears the screen to the specified background color.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Palette Modification Parameters (1B 60 / 1B 61) ===&lt;br /&gt;
These commands require 5 parameter bytes following the header:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PRN (Palette Register Number):&#039;&#039;&#039; The index of the palette register to modify (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &#039;&#039;&#039;R, G, B:&#039;&#039;&#039; Red, Green, and Blue intensity values (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;255&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &#039;&#039;&#039;A (Alpha):&#039;&#039;&#039; Opacity/Alpha value (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;255&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous Sequences ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sequence !! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1C &amp;amp;lt;CHR&amp;amp;gt;&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Raw Write&#039;&#039;&#039; || Writes the next byte &amp;lt;code&amp;gt;&amp;amp;lt;CHR&amp;amp;gt;&amp;lt;/code&amp;gt; directly to the screen (bypasses control checks).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1F 0x20&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Reverse On&#039;&#039;&#039; || Enables reverse video (swaps FG and BG colors).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x1F 0x21&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Reverse Off&#039;&#039;&#039; || Disables reverse video.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: Characters 0x0E-0x1A, 0x1D, and 0x1E are currently processed as No-Ops by the driver.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Example Interpretation ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sequence:&#039;&#039;&#039; &amp;lt;code&amp;gt;1b 61 01 ff 00 00 ff 05 22 f0 1b 20 02 00 00 50 18 00 01 00 1b 32 07&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This string performs the following operations in order:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;1b 61 01 ff 00 00 ff&amp;lt;/code&amp;gt;&#039;&#039;&#039;: Modifies Background Palette register &#039;&#039;&#039;1&#039;&#039;&#039; to be solid &#039;&#039;&#039;Red&#039;&#039;&#039; (&amp;lt;code&amp;gt;RGBA: 255, 0, 0, 255&amp;lt;/code&amp;gt;).&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;05 22 f0&amp;lt;/code&amp;gt;&#039;&#039;&#039;: Changes the hardware cursor character to &amp;lt;code&amp;gt;0xF0&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;1b 20 02 00 00 50 18 00 01 00&amp;lt;/code&amp;gt;&#039;&#039;&#039;: Sets an &#039;&#039;&#039;80x24&#039;&#039;&#039; window in &#039;&#039;&#039;80x30&#039;&#039;&#039; text mode starting at &amp;lt;code&amp;gt;(0,0)&amp;lt;/code&amp;gt;. It sets the default foreground to color &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, the background to color &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (Red), and the border to color &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. This operation also clears the screen to Red.&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;code&amp;gt;1b 32 07&amp;lt;/code&amp;gt;&#039;&#039;&#039;: Sets the current foreground drawing color to index &#039;&#039;&#039;7&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Result:&#039;&#039;&#039; The display switches to an 80-column mode with a red background, a custom block cursor, and text subsequently written will appear in color index 7.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Technical Note: Scrolling and Windowing Limitations ==&lt;br /&gt;
&lt;br /&gt;
The current version of the &amp;lt;code&amp;gt;vtio.asm&amp;lt;/code&amp;gt; driver has the following limitations regarding windowing:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Anchor Point:&#039;&#039;&#039; While &amp;lt;code&amp;gt;Set Window&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;1B 20&amp;lt;/code&amp;gt;) accepts &amp;lt;code&amp;gt;CPX&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;CPY&amp;lt;/code&amp;gt; (starting coordinates), the driver&#039;s internal coordinate math and the &amp;lt;code&amp;gt;SCROLL&amp;lt;/code&amp;gt; routine currently ignore these offsets. All windows are physically anchored at the top-left (0,0) of the screen.&lt;br /&gt;
# &#039;&#039;&#039;Global Scrolling:&#039;&#039;&#039; The scroll routine (&amp;lt;code&amp;gt;SCROLL&amp;lt;/code&amp;gt;) always moves data starting from the very top of the physical screen buffer. Consequently, it is not possible to define a &amp;quot;static&amp;quot; area (like a Z-machine status line) that remains unaffected by scrolling text below it using the native driver logic alone.&lt;br /&gt;
# &#039;&#039;&#039;Unimplemented Codes:&#039;&#039;&#039; Documentation/comments in the source suggest codes &amp;lt;code&amp;gt;1F 30&amp;lt;/code&amp;gt; (Insert Line) and &amp;lt;code&amp;gt;1F 31&amp;lt;/code&amp;gt; (Delete Line) may have been planned, but they are not currently implemented in the dispatch table.&lt;br /&gt;
&lt;br /&gt;
== Escape Codes ==&lt;br /&gt;
&lt;br /&gt;
* 1B 20 DW Set&lt;br /&gt;
* 1B 21 DW Select&lt;br /&gt;
* 1B 24 DW End&lt;br /&gt;
* 1B 30 DefColr&lt;br /&gt;
* 1B 32 Foreground Color&lt;br /&gt;
* 1B 33 Background Color&lt;br /&gt;
* 1B 34 Border Color&lt;br /&gt;
* 1B 60 Change Foreground Palette&lt;br /&gt;
* 1B 61 Change Background Palette&lt;br /&gt;
* 1B 62 Change to Font0&lt;br /&gt;
* 1B 63 Change to Font1&lt;/div&gt;</summary>
		<author><name>RichL</name></author>
	</entry>
</feed>