Repository navigation
Releases: IgnacioMonge/spectalkzx
Release list
SpecTalkZX 1.4.2: Triton
SpecTalkZX 1.4.2 Triton runs straight from the web on the Spectranext cartridge
again. Classic ZX and native Spectrum Next behave as in 1.4.1; only the version
number changes there.
Highlights:
- Spectranext: choose Load Resource URL and enter
https://ignaciomonge.github.io/spectalkzx/. SpecTalkZX starts without
being installed, after a short loading screen that any key skips.
Configuration and bookmarks stay in the cartridge under/CFG. - To install it for use without the web, enter
https://ignaciomonge.github.io/spectalkzx/install/instead, then start
SPCTX.ZXfrom local storage. - Spectranext now needs cartridge firmware 1.0 or later, including for
installed copies. Firmware 1.0 fixes the HTTPS seek that stopped 1.4.1 with
DAT NOT FOUND!. Older firmware stops at startup with
FIRMWARE OUTDATED: SEE README; update the cartridge firmware first.
Downloads:
spectalk_divmmc_v1.4.2.zip: Classic ZX runtime; keep TAP, OVL and DAT
together.spectalk_next_v1.4.2.zip: self-contained native Spectrum Next NEX.- Spectranext cartridge: the URLs above. Firmware 1.0 or later is required.
Existing configuration and bookmark files need no migration. To update an
installed Spectranext copy, run the installer again.
See CHANGELOG.md
for the complete list of changes.
SpecTalkZX 1.4.1: Triton
SpecTalkZX 1.4.1 Triton learns IRC service logins on any network and keeps up
with heavy traffic on every machine. Classic ZX, native Spectrum Next and Spectranext share the same
interface, commands and configuration format.
Highlights:
- Spectranext: choose Load Resource URL and enter
https://ignaciomonge.github.io/spectalkzx/to install or update
SpecTalkZX. Configuration and bookmarks stay in the cartridge. - Identify as usual on any network (
/msg NickServ IDENTIFY ...,
/msg NiCK IDENTIFY ...,/msg Q@CServe.quakenet.org AUTH ...) and
SpecTalkZX learns the login once the server marks your nick identified, then
sends it on every connection. A rejected password is never saved, and the
password is no longer shown on screen. - Native Spectrum Next no longer loses lines during large MOTD and NAMES
bursts: the chat scrolls with the Next's DMA. - Busy channels and long name lists no longer drop blocks of received text.
- Text draws about 25% faster, and
!configshows each setting under its
configuration-file name. - Native Next plays the mention beep the same at any CPU speed, and the key
click sounds like the NextZXOS click. - Native Next About shows a new animated colour globe.
- Classic recovers by itself when the ESP has CTS flow control disabled.
Downloads:
spectalk_divmmc_v1.4.1.zip: Classic ZX runtime; keep TAP, OVL and DAT
together.spectalk_next_v1.4.1.zip: self-contained native Spectrum Next NEX.- Spectranext cartridge: the installer URL above. Firmware
0.9-6fc153a3or
later is required.
Install the TAP or NEX, OVL and DAT files from this release together:
SPECTALK.DAT uses a new font layout. Existing configuration and bookmark
files need no migration. A 1.4.0 Spectranext installation keeps working;
run the installer again to update it.
Running SpecTalkZX straight from the web without installing it is not
available yet: it works from a local HTTP server, but not yet from the HTTPS
address.
See CHANGELOG.md
for the complete list of changes.
SpecTalkZX 1.4.0: Proteus
SpecTalkZX 1.4.0 Proteus adds a native ZX Spectrum Next build and moves the
Spectranext edition's overlays into cartridge SRAM. Classic ZX/divMMC remains
supported with the same interface, commands and configuration format.
Highlights:
- Native
SPECTALK.NEXfor Spectrum Next with embedded overlays and data. - Spectranext Page B paging keeps the IRC receive ring available during
secondary screens and commands. - More resilient native Next ESP startup and
!init, with BREAK cancellation. - Bookmark fallback to
/SYSwhen/SYS/CONFIGis unavailable. - Updated 1.4.0 What's New screen and Spectranext installer artwork.
Downloads:
spectalk_divmmc_v1.4.0.zip: Classic ZX runtime; keep TAP, OVL and DAT
together.spectalk_next_v1.4.0.zip: self-contained native Spectrum Next NEX.- Spectranext cartridge: choose Load Resource URL and enter
https://ignaciomonge.github.io/SpecTalkZX/. Firmware0.9-6fc153a3or
later is required.
Existing Classic and Spectranext configuration and bookmark files need no
migration.
SpecTalkZX 1.3.9.1: SpectraNext installation fix
Bugfix release for the SpectraNext cartridge. The program is the same 1.3.9 "Juno" — no new features, no changes to how it works. The in-app What's New screen still reads 1.3.9. Juno.
What was wrong
- The installation disappeared when you switched the computer off. It survived a reset, so it looked fine, but a cold boot left the cartridge empty and SpecTalkZX had to be installed again every time.
- Saved settings did not last either. The first save survived; every later one was lost on power-off and the earlier settings came back.
Both had the same cause. The cartridge filesystem keeps a freshly written file in RAM until it is committed to flash, and neither the installer nor the settings writer was committing.
How to get it
Select Load Resource URL on the cartridge and enter:
https://ignaciomonge.github.io/SpecTalkZX/
It installs over an existing copy; nothing needs uninstalling first.
The installer identifies this package as 1.3.9-2. That label uses a dash because the cartridge package format allows only three numeric components; it is this release.
Not affected
The Classic divMMC + ESP-AT build is untouched: same screens, same commands, same files.
SpecTalkZX 1.3.9: Juno
[v1.3.9] - Juno - Release Notes
This release is the main development line after v1.3.8: Hermes. The headline
is native support for the SpectraNext cartridge (the Spectranet/XFS cart,
not the ZX Spectrum Next), delivered as a second compile-time build. The
Classic divMMC + ESP-AT product is unchanged: same screens, same IRC commands,
same three runtime files. Everything below is new or fixed since the published
1.3.8 tag.
The in-app What's New screen (!changelog) is headed 1.3.9. Juno and lists:
- Native SpectraNext support
- Guided SpectraNext installer
- More reliable UART transfers
- Safe recovery from UDP failures
- Reliable configuration loading
- Safer friend and ignore lists
- File access preserves the interface
- More robust About/Earth screen
- Interrupt-safe chat scrolling
- Clearer registration errors
- Polished clock and status UI
- And much, much more!
The rest of this section is that list expanded against the actual 1.3.8 → 1.3.9
work.
Final release-profile verification recorded on 2026-08-28:
- Command:
make release NO_COLOR=1 - Classic TAP: 35,386 bytes.
- Classic BSS guard: 0xEFDD < 0xF500, 1,315 bytes free before
ring_buffer. - Classic overlays: 1700 / 1902 / 1739 / 1745 / 1934 / 1798 / 1816 /
1893 bytes. - Classic packed
SPECTALK.OVL: 14,591 bytes. - SpectraNext TAP: 36,474 bytes.
- SpectraNext BSS guard: 0xF3F5 < 0xF500, 267 bytes free before
ring_buffer. - SpectraNext overlays: 1700 / 1902 / 1787 / 1828 / 1490 / 1920 / 1816 /
1885 bytes. - SpectraNext packed
SPECTALK.OVL: 14,392 bytes. - Shared
SPECTALK.DAT: 16,469 bytes. - Installer:
SPECTALK.INS3,247 bytes,SPECTALK.PKG43,670 bytes,
loading screen 6,912 bytes. - Published 1.3.8 Classic TAP: 36,181 bytes.
- Published 1.3.8
SPECTALK.DAT: 15,704 bytes. - Net Classic TAP delta: -795 bytes, despite the SpectraNext platform
seams, UART/UDP recovery, configuration and About hardening, and the new
What's New artwork stored in DAT.
User-visible features
Native SpectraNext support
- Added a dedicated
PLATFORM=spectranextbuild for ZX Spectrum models that
the SpectraNext cartridge supports. - IRC uses the cartridge ROM sockets and DNS directly. This binary does not
link UART, ESP-AT, or a runtime backend selector. - Configuration lives in local XFS as
/CFG/SPECTALK.CFGand survives
power-off. Classic still uses/SYS/CONFIG/SPECTALK.CFGwith/SYS/as
fallback. - All five bookmark slots persist on the cartridge as
/CFG/SPTBM1.CFG
through/CFG/SPTBM5.CFG. Classic remains/SYS/CONFIG/SPTBM1.CFGthrough
SPTBM5.CFG. - The displayed clock is UDP/SNTP (
pool.ntp.org) with the configured numeric
timezone, taken before the IRC TCP socket opens. - The cartridge exposes no RTC syscall to Z80 software.
!tz rtctherefore
falls back to the last numeric timezone; time still comes from SNTP. - SpecTalkZX owns one cartridge socket at a time, so clock sync only runs
while IRC is closed. A retry also waits if another overlay currently owns
the shared buffer. - Startup detection reports
REQUIRES SPECTRANEXT!instead of
REQUIRES DIVMMC!. - The title banner is target-specific: Classic remains “IRC Client for ZX
Spectrum”; the cartridge build reports “IRC Client for Spectranext”. !initcloses the active cartridge socket and reinitializes the native
backend. It does not send ESP-AT text into the IRC stream.- IRC is plaintext on the configured server port. Cartridge TLS is a fixed
port-443 service, so there is no IRC TLS on 6697.
Guided SpectraNext installer
- Public install is an HTTPS resource. Do not copy the Classic GitHub Release
zip onto an SD card for this target. - Canonical root:
https://ignaciomonge.github.io/SpecTalkZX/. - At the BASIC prompt:
%umount 2
%mount 2, "https://ignaciomonge.github.io/SpecTalkZX/"
%fs 2
%cat
%load "boot.zx"
boot.zxis tokenized BASIC. Do not%tapeinit.- The loading screen keeps the installer panel at the bottom of the display.
- The installer validates the package, writes
SPECTALK.tap,SPECTALK.OVL,
SPECTALK.DATandSPECTALK.ZXto local XFS slot 0, then launches. SPECTALK.ZXis created on the cartridge during install; it is not a hosted
file. Afterwards start that local copy from XFS.- A later
%load "boot.zx"from the same HTTPS root replaces the program
files and leaves/CFG/SPECTALK.CFGand the five bookmark files alone. - A GitHub Release zip is not a mountable SpectraNext resource.
More reliable UART transfers
- Classic UART byte send no longer spins forever if TX-ready never arrives.
After about 16 ms (192 port polls) a stuck UART drops that byte and returns
to the caller. - A missed PONG still disconnects as usual; the timeout only covers a stuck
BUSY line, not a healthy transfer. - ESP-AT command writes use a bounded busy wait as well.
- Hardware check of the UART timeout: no behaviour change in normal operation.
Safe recovery from UDP failures
- The Classic raw-UDP path (NTP/AT over UART) uses a bounded transmission
wait instead of an open-ended spin. - If a datagram is only partly sent, SpecTalkZX stops and recovers. 1.3.8
could keep writing and emit a truncated NTP or AT frame. - On SpectraNext, SNTP rejects a short packet, a reply from the wrong host, a
kiss-of-death / invalid-stratum reply, and a zero transmit timestamp. A zero
timestamp would have locked the clock at midnight.
Reliable configuration loading
- Config keys must match in full against the 23 real names:
nick,
nickpass,nickcolor,nickserv,server,port,pass,theme,
autojoin,autoconnect,autoaway,friends,ignores,channels,
countsync,beep,click,traffic,ts,tz,tzlast,divider,
notif. - 1.3.8 accepted a truncated prefix. The nick-family keys all started with
ni, so a short or mistyped key could apply the wrong setting. A truncated
or unknown key is now ignored.
Safer friend and ignore lists
- The
!configFriends row wraps at two nicks per line instead of running
off the 64-column display. - The Ignores row wraps at three names per line.
- Empty lists still show the established “not set” placeholder.
File access preserves the interface
- After every runtime esxDOS/XFS file call the keyboard input cache is
invalidated, so the next keypress is not a leftover from the file
operation. - On SpectraNext, saving config or bookmarks no longer lets directory scratch
wipe live UI state (theme, PM state, render cache). - Overlay exit still discards reused parser/ring memory so loaded overlay
bytes are not parsed as IRC.
More robust About/Earth screen
- Earth frame and attribute packets from
SPECTALK.DATare bounds-checked
before they can be painted. A short or corrupt packet is rejected instead
of being drawn. - DAT reads during the animation run with interrupts off, matching the
esxDOSRST 8contract. - On SpectraNext, About used to issue up to 128 cartridge ROM calls per
animation frame. The pump is now at most eight calls per frame. Connected
About no longer stutters that way on hardware. - PING/PONG, peer close and keepalive still run while About owns the screen.
Interrupt-safe chat scrolling
- Chat scroll no longer parks the CPU stack in display RAM to blit rows. An
NMI during that fake stack could previously corrupt the copy. - The visible chat area still scrolls the same rows; only the implementation
changed.
Clearer registration errors
- A server
ERRORduring nick registration is recognised as the whole
five-byte token, followed by end-of-line or a space. - 1.3.8 looked at
E,Rand a laterR, so other words could be treated
as a failed register, and a realERRORwithout the extra byte was missed.
Failed register now shows “Server error”.
Polished clock and status UI
- Status-bar clock shifted half a character to column 55, matching
NetChessZX. - Successful status results keep the intended leading space. 1.3.8 could
print[OK]or a clipped[ OKafter a cache miss on that space. - The three established themes are unchanged.
Reliability and protocol fixes
- Bounded Classic UART TX-ready polling; drop the byte on timeout rather than
hang the machine. - Bounded ESP-AT and raw-UDP transmission waits; fail-stop on a partial UDP
frame instead of sending a truncated datagram. - SpectraNext SNTP validation as above; clock retry defers while another
overlay owns the shared buffer. - Exact configuration-key matching for all 23 keys.
- Input-cache invalidate after every runtime file I/O path that touches
esxDOS/XFS. - SpectraNext XFS scratch no longer clobbers live UI across config and
bookmark saves. - About Earth packet bounds, plus
DIaround every About esxDOS call. - Registration
ERRORtoken and boundary. - Status-result leading space preserved across the fast print path.
- Persistent notification / NAMES state moved out of Printer RAM into
compiler BSS, so it no longer sits in a firmware-sensitive window.
Performance, size, and architecture
- Classic TAP 35,386 bytes versus 1.3.8 36,181 bytes (−795).
- What's New streams a new 64×88 packed logo from
SPECTALK.DAT(after the
Earth block, 765 packed bytes) instead of consuming SPCTLK3 overlay code.
Dense dither did not fit the overlay budget. - The twelve-line What's New list always ends with the magenta
“And much, much more!” line. - Network and clock are compile-time platform files. Product IRC and UI stay
shared; there is no runtime backend switch. - Memory-layout check refuses to ship a build whose BSS reaches
ring_buffer, whose overlays exceed 2K, or whose Printer/CHANS / XFS
scratch bindings overlap. - Classic leaves
$5B80..$5BBFfree. SpectraNext binds XFS state at
$5B80..$5B93and persistent theme/PM/render-cache at `$5B9...
SpecTalkZX 1.3.8: Hermes
[v1.3.8] - Hermes - Release Notes
This release is the main development line after v1.3.7: Artemis II. It is a major maturity release: the user-visible feature set is much larger, the IRC session model is safer, the overlay/data architecture is more capable, and the low-level receive/render paths have had multiple audit and hardware-validation rounds.
Final local verification recorded on 2026-06-25:
- TAP: 36,181 bytes.
- BSS guard: 0xF2B4 < 0xF500, 588 bytes free before
ring_buffer. - Overlays: 1702 / 1770 / 1938 / 1748 / 1901 / 1645 / 1816 / 1881 bytes.
- Packed
SPECTALK.OVL: 14,465 bytes. SPECTALK.DAT: 15,704 bytes.- Baseline
v1.3.7TAP: 36,072 bytes. - Net TAP delta: +109 bytes, despite the added bookmark manager, RTC path, expanded overlays, new IRC commands, rewritten help/data pipeline, animated About assets, and many reliability fixes.
User-visible features
IRC bookmarks and session restore
- Added
!bm/!bookmarks, a five-slot SD-backed IRC bookmark manager. - Bookmark controls:
UP/DOWNselects,ENTERconnects,Sstores,Amarks automatic startup,Ddeletes,BREAKsaves/exits. - Bookmark files are stored as
/SYS/CONFIG/SPTBM1.CFGthrough/SYS/CONFIG/SPTBM5.CFG. !savenow saves the active IRC session, not only static settings.- Saved sessions can include server, port, server password state, active joined channels, and startup policy.
!autoconnectnow means "connect to the saved server on startup".- New
!autojoincontrols whether saved channels are joined after IRC registration. - Autojoin waits for the IRC registration end (
376or422) and for any auto-identify grace period before sendingJOIN. - Loading a bookmark while connected uses the shared disconnect confirmation/feedback path instead of silently tearing down the session.
- Fixed bookmark channel contamination: loading one bookmark can no longer connect to that bookmark's server while replaying channels from a different bookmark.
- Deleting an empty bookmark slot no longer truncates or rewrites an empty file.
New IRC commands and PM workflow
- Added
/modewrapper:- no args: query current channel modes;
- args starting with
+or-: apply modes to current channel; - other args: pass explicit IRC target unchanged.
324 RPL_CHANNELMODEISnow produces visible mode output instead of only updating internal status.- Added
/reply message, using the last remembered incoming PM sender. - Added
/notice target textwithout adding a parallel large send path. /msg nick textactivates the target query before local echo, so outgoing PMs appear in the expected window./0through/9switch directly to physical window slots, matching the numbers shown by the tab/switcher UI./quitand reconnect paths now share a guarded disconnect confirmation.
Better /names, /list, search, and channel counts
- Manual
/namesnow owns the main area while active and suppresses unrelated traffic centrally. 353replies render as a fixed-width four-column nick grid instead of raw wrapped IRC payload text.- Long
/namesoutput supports pagination, cancellation, and incomplete-summary reporting when data is lost under buffer pressure. /namesnow accepts366only for the target channel, avoiding stale replies being committed to the wrong window.- Automatic join-time NAMES counting still updates channel user counts without stealing the UI.
- Added a hardware-validated first-letter friend gate for NAMES bursts, reducing expensive friend matching during joins without changing count semantics.
- Added optional long-session user-count resync via
!countsync/!cs. - Silent count refresh uses
LIST #channelonly when the runtime is idle enough, avoiding eager traffic in busy channels. /searchoutput now starts cleanly, avoids prompt collisions, and throttles repeated rapid visual updates.- IRC fallback output remains visible but is timestamped/indented instead of being dropped or printed raw at column 0.
Time and RTC
- Added
!tz rtcas an opt-in local RTC clock source. - The cold RTC overlay can seed time from local RTC paths and preserve the last numeric timezone for fallback.
- ESP/SNTP time remains the default for normal setups.
- SNTP now retries during connect, avoiding the common ESP8266
1970placeholder when the first NTP attempt has not resolved yet. - Status-bar clock updates were kept in the common main-loop tick path so overlays do not stale the clock.
- CTCP
TIMEavoids pretending to have a valid clock when no RTC/time source is available.
UI and display polish
- Added
!dividerto toggle channel context separators. - Channel separators make interleaved channel/query context changes easier to read in long sessions.
- Shift-arrow cursor navigation now keeps the CAPS indicator stable and avoids cursor flicker.
- The status screen shows nick, server, network, state, latency, uptime, and a two-column window/channel list.
!configincludes new startup/session controls such asautojoin, saved channels,divider,countsync, RTC timezone state, friends, and ignores.- The help text is now sourced from
src/SPECTALK_HELP.txtand generated intoSPECTALK.DAT, instead of being an untracked hand-edited data blob. - Help pagination was fixed when the help text exactly filled a page count; it no longer shows an empty extra page.
- The What's New screen is generated from
release/version.txt,release/changes.txt, andrelease/logo.png.
About / Earth overlay
- Replaced the old globe path with a compact animated Earth/About renderer.
- About assets are stored in
release/about_earth/and packed into runtime data. - The About screen processes pending IRC lines before entering animation.
- During About, a bounded overlay keepalive path handles PING/PONG and prevents false disconnects.
- About rendering is theme-adaptive: Earth colours and PAPER handling follow the active theme instead of assuming one palette.
- About exit resets overlay/RX state safely so reused overlay memory is not parsed as IRC traffic.
Notifications and input
- PM notifications still support ENTER-to-open and BREAK-to-dismiss.
- Friend notifications are batched after NAMES completion instead of spamming per nick.
- PART/leave notifications cancel the footer notification before printing the inline leave text.
- Notification slide-in is guarded by live timeout state so stale animation counters cannot revive a cancelled row.
!notif,!beep, and!clickare handled in the cold local-command overlay to save resident space.- Word navigation and word delete remain available through Symbol Shift cursor/delete combinations.
Reliability and protocol fixes
- Fixed auto-identify for non-standard NickServ service names such as
NiCK. - Added bounds checks to malformed config-key parsing so short keys cannot read past the NUL terminator.
- Config save now checks overlay-slot capacity before writes can pass the 512-byte scratch buffer.
- Raw string consumers no longer receive BPE-compressed
SB_*strings after the resident string import shrink. - Direct render paths and string compares keep raw ASCII literals where required.
- Overlay exit now discards parser/ring state when overlay memory reused
ring_buffer. - Overlay exits that reuse
overlay_slotonly force RX discard when a partial line existed before the call; valid first replies after an overlay are not swallowed. - Prompt capture helpers NUL-terminate
rx_lineon timeout and success exits. - IRC format stripping and digit tests were corrected after an ASM audit found flag-contract bugs.
- UTF-8 Latin-1 conversion was fixed after table movement near a page boundary;
Ñ/ñmap to the internal display glyph again and accented vowels normalize stably. /connectretry prompt spacing was fixed so retry prompts do not gain extra blank lines.force_disconnect()now resets transient latency, post-cancel, and count-sync state, preventing ghost state after reconnect.- BSS zero-fill now guards the
size == 1case as well assize == 0, avoiding a Z80LDIRwrap hazard. - esxDOS buffer pointers can load directly into
IXin the current assembler path, reducing fragile pointer shuffling. - Several ABI-sensitive ASM helpers were audited for
IX/IY, stack cleanup, carry/flag contracts, and callee argument removal.
Performance, size, and architecture
- Resident ASM was split from one large
spectalk_asm.asminto domain modules:10_core_helpers.asm20_rx_ring_uart.asm30_rendering.asm40_text_numeric_screen.asm50_main_output.asm60_protocol_storage.asm70_input_lookup.asm80_ui_runtime.asm
- Overlay count grew to eight logical SPCTLK pages while staying below the 2K executable-page limit for each page.
- Overlay loader now validates the fixed
STOA+ version header with a short loop rather than open-coded compares. - The overlay atlas uses variable-length metadata, reducing dead fixed-size layout overhead.
- Generated BPE dictionary sizing is exact rather than conservatively overallocated.
- The 6x8 font is packed and decoded on demand with corrected glyph offset math.
_notif_buf/names_friend_bufmoved from compiler BSS to fixed Printer Buffer space, freeing 64 bytes of compiler BSS without overlapping input cache or scratch areas.- Cold local commands moved to overlays where possible: password, ignore, settings toggles, autoaway, friend list, bookmarks, RTC, and related config/status work.
_main_putsgained a hardware-validated fast path for safe even-column ASCII chunks.print_line64_fast()alignment was corrected so bulk-rendered text matches per-character rendering vertically.- UART/divMMC hot paths were shrunk by removing dead local state,...
v1.3.7 "Artemis II"
SpecTalkZX v1.3.7 "Artemis II"
TAP size: 35,233 bytes (1,933 bytes smaller than v1.3.6)
Highlights
- Overlay system: Help, About, Config, Status, and What's New screens are now C-compiled overlays loaded on demand from SD card, freeing ~1.5 KB of resident code
- Smart notifications: PM alerts, nick mentions, and friend online/join notifications displayed in a custom Ikkle-4 mini font at the bottom of the screen
- Nick coloring: Per-nick hash-based coloring with automatic mono theme detection
- Word navigation: SS+LEFT/RIGHT to jump words, SS+BACKSPACE to delete words
- Key auto-repeat: All keys now repeat when held down
- Rotating globe: The About screen features an animated globe rendered in attribute space
- Enhanced status: Network name, latency indicator, uptime counter, two-column channel list
- 30+ bug fixes: Including SNTP timezone sync, smart double quotes, CTCP handling, security fixes
Breaking Changes
- esxDOS (divMMC) is now required. The AY bit-bang UART build has been removed because the overlay system and font data require SD card access.
- The release ZIP now includes three files that must all be placed in the same directory:
SpecTalkZX.tap,SPECTALK.DAT, andSPECTALK.OVL
Download
spectalk_divmmc.zip— for divMMC / divTIESUS interfaces (115200 baud)
See the full CHANGELOG for details.
v1.3.6 "Byte Packer"
What's New
BPE String Compression (~1,100 bytes saved)
Byte Pair Encoding applied to 170 screen strings with 97 tokens. Stack-based ASM decoder with nested token support. Source directory never contaminated — compression runs entirely in the build pipeline.
Close Channel from Tab Switcher
DELETE key in the channel switcher now closes/parts the selected channel. Server window protected.
477 ERR_NEEDREGGEDNICK Handler
Channels requiring NickServ identification now show a clear error message instead of being silently ignored.
/save UX
Immediate "Saving config..." feedback before write, verified "OK (N bytes)" after, specific error messages on failure.
Bug Fixes (8)
- Word-wrap attribute corruption — rare wrong-color character after word-wrap (attr register not reloaded after newline)
- Timestamp color bleed —
[HH:MM]color leaked into message text - Status bar rendering corruption — IX register clobbered in
print_line64_fastcaused garbage attributes and wrong indicator colors - User count on wrong channel — ENDOFNAMES wrote count to current channel instead of target
- Nick alternate infinite loop — at max length, appending
_overflowed - Keepalive timeout during pagination — server could disconnect while reading long listings
- /server without args — now shows current connection instead of reconnecting
- AY UART build — Makefile always used divMMC driver; now conditionally selects correct ASM source
Performance
- Glyph decompression 25% faster — EXX register access to font LUT
- String length 41% faster — CPIR instruction
- Cache pre-warm — ~600 T-states saved on indented lines
Size
- Release TAP: 34,075 bytes (divMMC) / 34,334 bytes (AY)
- vs v1.3.5: -1,711 bytes (-4.8%)
Downloads
spectalk_divmmc.zip— for divMMC/divTIESUS hardware UART (115200 baud)spectalk_ay.zip— for AY/ZX-Uno bit-bang UART (9600 baud)
Each ZIP contains SpecTalkZX.tap + SPECTALK.DAT + SPECTALK.CFG. Copy all files to your SD card.
Full changelog: https://github.com/IgnacioMonge/SpecTalkZX/blob/main/CHANGELOG.md
v1.3.5 "Terminal Glow"
SpecTalk ZX v1.3.5 "Terminal Glow"
Highlights
- IM2 interrupt mode — custom ISR prevents divMMC automapper conflicts, enables system RAM hijacking
- System RAM hijacking — Printer Buffer, CHANS workspace and UDG area repurposed for variables (+602 bytes BSS freed)
- 15 custom peephole rules — subroutine factoring across 200+ call sites (-1,520 bytes code)
- Banner redesign — double-height NetManZX style with BRIGHT split effect and per-theme badges
- esxDOS detection — safe divMMC detection; works without SD card
- State-based help — non-blocking, IRC keeps running between help pages
- Inline space rendering — ~12x faster per space character in main_puts
Bug Fixes
- Reconnect regression (PONG format during registration)
- Help screen output leak (IRC messages rendering on top of help)
- cmd_save ring buffer corruption
- esxDOS Printer Buffer corruption during file I/O
- Pagination, attribute bleed, channel_flags_ptr link-time bug
Downloads
Each ZIP contains SpecTalkZX.tap + SPECTALK.DAT. Both files must be on the SD card.
| File | Interface | Baud Rate |
|---|---|---|
spectalk_divmmc.zip |
divMMC / divTIESUS | 115200 bps |
spectalk_ay.zip |
AY / ZX-Uno | 9600 bps |
Binary: 35,786 bytes (-1,380 vs v1.3.4, -3.7%)
See CHANGELOG.md for full details.
v1.3.4 "Solid Ground"
SpecTalk ZX v1.3.4 "Solid Ground"
New Features
- Channel Switcher Bar: Press EDIT to open a visual tab overlay showing all active channels. Navigate with LEFT/RIGHT, select with ENTER, or press digit keys for direct access. Auto-hides after 20 seconds.
- Help screen: Exit key changed from SPACE to BREAK (CS+SPACE)
Bug Fixes
- Critical: Fixed
strip_is_digitASM routine treating NUL and control characters as digits — a bare^Ccolor reset at end of an IRC message caused garbage output - Fixed: Lowercase IRC commands from bouncers/gateways (e.g.,
notice,kick) now handled correctly — previously silently dropped or misidentified - Fixed:
/friend nick extrano longer stores the trailing text - Fixed: Switcher bar no longer uses stale channel map after a channel is removed
Downloads
spectalk_divmmc.tap— for divMMC/divTIESUS hardware UART (115200 baud)spectalk_ay.tap— for AY-3-8912 bit-bang interface (9600 baud)
See CHANGELOG.md for full details.