Introduction
Welcome to the Packet Radio Station — a complete AX.25 packet-radio system that runs entirely in your browser, without transmitting any RF signal and without requiring a radio licence.
Amateur packet radio emerged in the early 1980s as a way to move computer data across the VHF amateur bands. A Terminal Node Controller (TNC) sat between a radio transceiver and a home computer, encoding data as Bell 202 audio tones for transmission and decoding incoming tones back to bytes. The AX.25 protocol — an adaptation of the X.25 packet-switching standard — provided reliable, connection-oriented data links over the noisy, shared radio medium. By the late 1980s, every large Canadian city had a local packet node that forwarded mail, connected to BBS systems, and linked into continental NET/ROM networks.
emulator.ca recreates this world in software. A complete AX.25 stack — AFSK modem, HDLC codec, AX.25 data-link layer, and NET/ROM network layer — runs as a Rust WebAssembly module in your browser. A simulated shared radio channel connects a local TNC (your station) to several remote station TNCs, each hosting a different service. The channel shows you every frame that crosses it, just as a radio monitor would.
This is a browser-local simulation. No RF is ever transmitted. The callsigns shown (QS6GA-0, QS6USR-15, etc.) are fictional emulator.ca stations created for this simulation. They are not real amateur-radio callsigns. Real on-air operation, real callsigns, and real RF transmission are out of scope unless a separate legal, licensing, and provenance path is established.
What you get
- A dedicated packet station at
/packet/with a monitor pane and command pane - The same PK-232 TNC modem accessible from the main terminal's peripheral panel
- Packet-addressed services: node, BBS, mailbox, chat, weather
- Simulated AX.25 frames visible in real time in the monitor pane
- Bell 202 audio over the Web Audio API (optional)
Quick Start
The fastest path to a packet connection:
- Open
/packet/in your browser. - At the
cmd:prompt, typeC QS6GA-0and press Enter. - The Edmonton packet node responds:
*** CONNECTED to QS6GA-0 - At the node prompt, type
?for help orNto list known nodes. - Type
C QS6GA-1to connect to the BBS,C QS6SLP-1for mailbox, orC QS6GA-10for weather. - To disconnect, type
Dat any connected service, orBYEat the node.
cmd: C QS6GA-0
*** CONNECTED to QS6GA-0
Edmonton Packet Node (NET/ROM)
? for help, N for nodes, B to disconnect
QS6GA-0:> N
Known nodes:
QS6GA-0 Edmonton Node
QS6GA-1 Edmonton BBS
QS6GA-10 Edmonton Weather
QS6NAS-1 Naseby BBS
QS6SLP-0 Chat
QS6SLP-1 Mailbox
QS6GA-0:> C QS6GA-1
*** CONNECTED to QS6GA-1
Welcome to the Edmonton Packet BBS
Accessing the Packet Station
Standalone Packet Page
The dedicated page at /packet/ gives you the full packet station experience:
- A dual TNC panel at the top showing the local and remote TNC status indicators
- A monitor pane displaying every AX.25 frame on the simulated channel
- A command/converse pane where you type TNC commands and read responses
- A
cmd:prompt when in command mode; the prompt changes when in converse mode
You are already at the TNC command prompt when the page loads. Type TNC commands directly — no modem dial sequence required.
From the Main Terminal
The main terminal at / includes a PK-232 modem peripheral. Select the PK-232
from the peripheral panel and the terminal connects via the modem command set:
| Path | First command |
|---|---|
/packet/ standalone |
C QS6GA-0 |
| Main terminal, PK-232 modem | ATDQS6GA-0 |
| Main terminal, raw TNC mode | AT+TNC then C QS6GA-1 |
| Return to modem from TNC mode | AT+MODEM |
From the main terminal, ATDQS6GA-0 dials the node directly. Once connected,
you are in converse mode. To send a TNC command from converse mode, type the
escape sequence +++ (three plus signs without pressing Enter) and wait one
second for the cmd: prompt to reappear.
TNC Command Reference
The AEA PK-232 command set is used on both the standalone page and the PK-232 modem peripheral. Commands are not case-sensitive.
Connection Commands
These commands run at the cmd: prompt. Once you connect to a node or
service, use the service's own command set until you disconnect or escape
back to cmd:.
| Command | Description |
|---|---|
C <call> |
Connect to a remote station (e.g., C QS6GA-0) |
D |
Disconnect the current link |
CONV |
Enter converse mode after a link is connected |
Information Commands
| Command | Description |
|---|---|
? or H |
Display the TNC command help |
MY |
Show or set the local TNC callsign (default QS6USR-15) |
MON ON / MON OFF |
Enable or disable monitor output |
MCON ON / MCON OFF |
Enable or disable monitor-while-connected output |
MH |
Show stations heard by the simulated TNC |
DISP |
Display current TNC settings |
ST |
Show current TNC status |
Mode Commands
| Command (modem) | Description |
|---|---|
AT+TNC |
Enter raw TNC mode from the main terminal |
AT+MODEM |
Return to modem AT command mode |
+++ |
Escape from converse mode to command mode |
Node Commands (at QS6GA-0)
Once connected to the packet node, the node has its own command set:
| Command | Description |
|---|---|
? |
Display node help |
N |
List all reachable nodes |
C <call> |
Connect onward to another station |
B or BYE |
Disconnect from node |
Available Packet Services
The following simulated stations are reachable on the packet network.
Connect to each with C <callsign> from the TNC command prompt or node.
QS6GA-0 — Packet Node
The central NET/ROM node for the Edmonton packet network. Use it as a starting point and routing hub.
C QS6GA-0
From the node you can list all reachable stations with N and then
connect onward with C <callsign>.
QS6GA-1 — Packet BBS
A classic amateur packet bulletin board system. Leave messages, read bulletins, and browse files.
C QS6GA-1
Common BBS commands: L list messages, R <n> read message n, S <call>
send a message, B disconnect.
QS6NAS-1 — Naseby BBS
An alternate BBS with a JNOS-style prompt and a separate message fixture. Use it to see how packet systems with different sysop styles can share the same channel.
C QS6NAS-1
QS6GA-10 — Weather Service
Current conditions and forecast for Edmonton, retrieved from the weather backend.
C QS6GA-10
QS6SLP-1 — Mailbox (personal mail)
Personal mailbox service. Send and read private messages addressed to your callsign.
C QS6SLP-1
QS6SLP-0 — Chat
Multi-user packet chat channel. All connected stations see each other's messages.
C QS6SLP-0
Monitor Pane
The monitor pane shows every AX.25 frame crossing the simulated 145.010 MHz channel. Frames are colour-coded:
| Colour | Meaning |
|---|---|
| Bright green | Frames received at your local TNC (RX) |
| Red | Frames transmitted by your local TNC (TX) |
| Grey | Frames between other stations (passively monitored) |
Each frame shows the source callsign, destination callsign, frame type, and any data payload. Understanding frame types helps you follow what the network is doing:
| Frame type | Meaning |
|---|---|
SABM |
Set Asynchronous Balanced Mode — connection request |
UA |
Unnumbered Acknowledgement — connection accepted |
DM |
Disconnected Mode — connection refused or station busy |
DISC |
Disconnect request |
I |
Information frame (numbered, carries data) |
RR |
Receiver Ready — acknowledgement, no data |
UI |
Unnumbered Information — unconnected broadcast |
The simulated radio channel uses CSMA (Carrier Sense Multiple Access) with p-persistence, exactly as a real shared VHF channel would. If two stations transmit at the same time, a collision occurs and both must back off and retry. You can watch this in the monitor pane during busy periods.
Understanding the Layout
The /packet/ page is laid out like a 1990s BPQ32 packet station:
+---------------------------------------------+
| Local TNC (QS6USR-15) Remote TNC (QS6GA) | <- TNC panel
+---------------------------------------------+
| [Quick Start guide] | <- Inline guide
+---------------------------------------------+
| Channel Monitor 145.010 MHz | <- Monitor pane
| (all AX.25 frames scroll here) |
|-------------------------------------------- |
| Connected service output scrolls here | <- Command/converse pane
| cmd: _ |
+---------------------------------------------+
The resize handle between the monitor and command panes can be dragged to adjust the split.
Callsign and RF Boundary
QS6 callsigns are fictional emulator.ca stations. They follow the AX.25 callsign format but are not allocated by any amateur-radio authority and do not correspond to any real station.
Real callsigns, real RF transmission, and real on-air amateur-radio operation are explicitly out of scope for this simulation. If you hold an amateur-radio licence and want to use real on-air packet with real callsigns, you need physical hardware (a TNC and transceiver) and must comply with your national telecommunications authority's rules. emulator.ca does not provide a path for real on-air operation.
The browser-local simulation is intentional. It lets anyone explore packet radio concepts safely, without a licence, without hardware, and without the risk of interfering with real radio operations.
Technical Background
Protocol Stack
The AX.25 implementation covers the full stack from audio to network layer:
| Layer | Description |
|---|---|
| AFSK modem | Bell 202 audio: 1200 Hz (mark) and 2200 Hz (space) at 1200 baud |
| HDLC codec | Frame boundaries, CRC-CCITT error detection, bit stuffing |
| AX.25 v2.0 | Connected-mode data link (SABM/UA/I/RR state machine) |
| NET/ROM | Network-layer routing table and NODES broadcasts |
All layers run as a Rust WebAssembly module compiled from
peripherals/ax25/. The TypeScript TNC emulation layer (web/src/serial/tnc/)
handles PK-232 command parsing, the simulated radio channel, and backend hosting.
Audio
The simulated channel generates Bell 202 audio through the Web Audio API. You will hear the characteristic 1200-baud packet bursts if your system audio is on. Audio uses stereo panning to distinguish your local TNC from the remote TNCs on the channel.
Simulation Limits
| Aspect | Behaviour |
|---|---|
| Channel speed | 1200 baud (VHF packet standard) |
| Channel model | Shared medium with CSMA/p-persist, collision detection |
| Propagation | No path loss, fading, or Doppler modelled |
| Network | Single-hop NET/ROM node; multi-hop routing not implemented |
| Real RF | Never transmitted |
Appendix A: Quick Reference
+-------------------------------------------------------------+
| PACKET RADIO STATION QUICK REFERENCE |
+-------------------------------------------------------------+
| ACCESS: /packet/ or main terminal with PK-232 modem |
| |
| FIRST COMMAND (standalone): C QS6GA-0 |
| FIRST COMMAND (modem): ATDQS6GA-0 |
| ENTER TNC MODE (modem): AT+TNC |
| RETURN TO MODEM: AT+MODEM |
| ESCAPE TO CMD (converse): +++ (no Enter, wait 1 s) |
| |
| STATIONS: |
| QS6GA-0 Node (start here) |
| QS6GA-1 BBS |
| QS6GA-10 Weather |
| QS6NAS-1 Naseby BBS |
| QS6SLP-0 Chat |
| QS6SLP-1 Mailbox |
| |
| NODE COMMANDS: ?=help N=nodes C <call>=connect B=bye |
| DISCONNECT: D (from any connected service) |
+-------------------------------------------------------------+
See Also
- Packet Radio Quick Guide —
/packet/guide/— Short reference for first use - Packet Radio Station —
/packet/— Open the live station - DATAPAC X.25 (555-0325) — The Canadian public packet-switching network
- Modem Handshake Test (555-0725) — Learn the RS-232 handshake signals
- Architecture Notes —
docs/architecture/ax25-packet-radio.mdin the repository
Packet Radio Station is a product of Emulator.ca Systems. This simulation does not transmit RF and uses only fictional QS6 callsigns.