VBXETERM v0.23 — ATASCII terminal mode
VBXETERM now speaks ATASCII, so it can be pointed at Atari BBSes as well as ANSI boards and SSH hosts. Switch between them at any time from the OPTION menu.
ATASCII is a mode, not a font
ATASCII brings its own control set, character encoding and keyboard encoding, and the ANSI parser is bypassed entirely while it's active. That isn't a shortcut — it's required: $1B in ATASCII quotes the following byte instead of introducing an escape sequence, and $9B is EOL rather than CSI, so no part of the ANSI parser can be reused.
Supported controls: $1B quote-next, $1C–$1F cursor (wrapping at the screen edges, where ANSI clamps), $7D clear, $7E backspace, $7F tab, $9B EOL, $9C/$9D line delete/insert, $9E/$9F tab stops, $FD buzzer, $FE/$FF character delete/insert. Everything else prints, including the whole $80–$FF inverse range.
The character set comes from your Atari
The ATASCII font is built at runtime from the OS charset ROM at $E000 — nothing extra ships on the disk. Glyphs $00–$7F are the ROM charset and $80–$FF are the same bitmaps inverted, which is exactly what ANTIC does for inverse video, so bit 7 gives you inverse characters for free. Because it does no disk I/O, switching to ATASCII is instant and safe mid-session on an R: connection.
40-column aware
ATASCII art is drawn for a 40-column screen, so selecting ATASCII sets the auto-wrap column to 40; a new Width row switches it back to 80. The display stays physically 80 columns wide — only the wrap point moves.
The keyboard speaks ATASCII too
Return sends $9B, Backspace $7E, Tab $7F, and the arrow keys send single $1C–$1F codes instead of three-byte escape sequences. The Atari inverse-video key, previously unused, becomes a sticky bit-7 latch as on real hardware.
OPTION is now a settings menu
Mode: and Width: rows sit above a divider, with the font list below and a * marking the loaded font. Selecting any CP437 font also selects ANSI, so mode and font can never disagree.
Also in this release
- Fixed a latent line-wrap bug.
put_byteupdated the cursor's row and column on wrap but not its address — correct only by accident, because 80 cells × 2 bytes is exactly one screen row. Invisible at 80 columns; at 40 the cursor desynced from the text. - The 13 near-identical font-loading routines collapse into one table-driven action — adding a font is now a label, a path and a menu line.
- 42 new host-side unit tests (
make test) covering the character encoding, the keyboard encoding and the new row-editing primitives. - Fixed the internal
versionfield, still reading v0.21 since the 0.22 release.
Note
ATASCII mode is for Atari boards. If a BBS offers you ASCII / VT52 / ANSI options, it isn't an ATASCII board — use ANSI mode. A telltale of the mismatch is a stray [6n appearing on screen and line breaks rendering as graphics characters.