viktorcech at gmail com
Prečo BBS na ATARI v roku 2026?
V osemdesiatych rokoch boli BBS-ky centrom digitálneho života. Ľudia vytáčali modemom číslo, pripájali sa na lokálne nástenky, čítali správy, stiahli si hru, podpísali sa do guestbooku. Potom prišiel internet a BBS-ky zmizli.
Ale čo ak si jednu postavíte znova — nie ako nostalgickú hračku, ale ako reálny server, na ktorý sa dá pripojiť z pôvodného hardvéru? Presne to som spravil. Moj BBS beží na Raspberry Pi Zero 2 W (za cca 17 EUR), počúva na porte 6502 a každý s Atari XE/XL sa na ňu môže pripojiť cez telnet.
Krok 1: Základná inštalácia Pi Zero 2
Naflashujte OS
Použite Raspberry Pi Imager, zvoľte Raspberry Pi OS Lite (64-bit). V nastaveniach:
- Zapnite SSH
- Nastavte WiFi (SSID + heslo)
- Nastavte username (napr.
user) a heslo
Vložiť SD kartu do Pi, zapnúť, počkať pár minút a pripojiť sa:
ssh user@<IP_adresa_Pi>
IP adresu nájdete v admin rozhraní vášho routera, alebo použite:
# z iného počítača v sieti:
ping raspberrypi.local
Základné nastavenie
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 lighttpd msmtp msmtp-mta ufw fail2ban
Krok 2: BBS server v Pythone
BBS je jednoduchý telnet server napísaný v Pythone. Počúva na porte 6502.
Vytvorte súbor /home/user/bbs.py:
#!/usr/bin/env python3
"""
USER BBS - Lightweight Bulletin Board System
For FujiNet Atari XE/XL via telnet
"""
import socket
import threading
import time
import os
import json
from datetime import datetime
BBS_PORT = 6502
BBS_DIR = "/home/user/bbs"
MESSAGES_FILE = f"{BBS_DIR}/messages.json"
GUESTBOOK_FILE = f"{BBS_DIR}/guestbook.json"
STATS_FILE = f"{BBS_DIR}/stats.json"
MAX_CONNECTIONS = 4
# ANSI codes (FujiNet compatible)
CLEAR = "\033[2J\033[H"
BOLD = "\033[1m"
RED = "\033[31m"
GREEN = "\033[32m"
YELLOW = "\033[33m"
CYAN = "\033[36m"
WHITE = "\033[37m"
RESET = "\033[0m"
CRLF = "\r\n"
active_users = []
lock = threading.Lock()
Server má tieto funkcie:
- Message Board — čítanie a písanie správ (ukladá do
messages.json) - Guestbook — podpis návštevníkov s lokalizáciou
- System Info — teplota Pi, uptime, pamäť, počet loginov
- Who Is Online — kto je práve pripojený (max 4 súčasne)
- About — info o serveri
Kľúčové je správne spracovanie telnet protokolu — BBS musí:
- Čítať vstup po znakoch (nie po riadkoch) a správne spracovať backspace
- Ignorovať telnet IAC sekvencie (byty
0xFFnasledované 2 bytmi) - Používať CRLF (
\r\n) namiesto samotného\n - Nastaviť timeout (5 minút) aby zombie spojenia neblokovali sloty
- Používať ASCII encoding pre kompatibilitu s Atari terminálmi
def recv_line(conn, echo=True, max_len=60):
"""Read a line from telnet client."""
buf = ""
while True:
data = conn.recv(1)
if not data:
return None
ch = data.decode("ascii", errors="replace")
# Handle telnet IAC sequences
if data == b"\xff":
conn.recv(2)
continue
if ch in ("\r", "\n"):
if ch == "\r":
# consume trailing \n or \0
conn.settimeout(0.1)
try:
conn.recv(1)
except:
pass
conn.settimeout(300)
send(conn, CRLF)
return buf
if ch == "\x08" or ch == "\x7f": # backspace
if buf:
buf = buf[:-1]
send(conn, "\x08 \x08")
continue
if len(buf) < max_len and ch.isprintable():
buf += ch
if echo:
send(conn, ch)
Toto je srdce BBS — funkcia ktorá číta vstup od užívateľa. Na reálnom Atari cez FujiNet posielate znaky jeden po jednom a server ich echo-uje naspäť. Backspace funguje správne, timeout odpojí neaktívnych.
Krok 3: Systemd služba
Aby BBS bežala stále (aj po reštarte Pi), vytvorte systemd unit:
sudo nano /etc/systemd/system/user-bbs.service
[Unit]<br>Description=USER BBS<br>After=network.target<br><br>[Service]<br>Type=simple<br>User=user<br>ExecStart=/usr/bin/python3 /home/user/bbs.py<br>Restart=always<br>RestartSec=5<br><br>[Install]<br>WantedBy=multi-user.target
sudo systemctl daemon-reload<br>sudo systemctl enable user-bbs<br>sudo systemctl start user-bbs
Krok 4: Firewall a bezpečnosť
# Základný firewall
sudo ufw allow 22/tcp # SSH
sudo ufw allow 6502/tcp # BBS
sudo ufw allow 80/tcp # Web dashboard (voliteľne)
sudo ufw enable
# Fail2ban proti brute-force SSH útokom
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Fail2ban v default konfigurácii zablokuje IP po 3 neúspešných SSH pokusoch na 24 hodín. Na malom Pi Zero 2 je to dôležité — nechcete, aby vám boti zahltili procesor.
Krok 5: Port forwarding na routeri
Aby bola vaša BBS dostupná z internetu, nastavte na routeri port forwarding:
| Názov | Protokol | Externý port | Lokálna IP | Lokálny port |
|---|---|---|---|---|
| bbs | TCP | 6502 | 192.168.x.x (IP vášho Pi) | 6502 |
| ssh | TCP | 22 | 192.168.x.x | 22 |
Ak máte dynamickú IP, použite DDNS službu alebo si napíšte skript na detekciu zmeny WAN IP:
#!/bin/bash<br># wan_ip_monitor.sh - detekcia zmeny WAN IP<br>CURRENT=$(curl -s --max-time 10 ifconfig.me)<br>SAVED=$(cat /home/user/wan_ip_last 2>/dev/null)<br><br>if [ "$CURRENT" != "$SAVED" ] && [ -n "$CURRENT" ]; then<br> echo "$CURRENT" > /home/user/wan_ip_last<br> echo -e "Subject: WAN IP sa zmenila!\n\nNová IP: ${CURRENT}\nStará IP: ${SAVED}" | msmtp vas@email.com<br>fi
Pridajte do cronu (crontab -e):
*/30 * * * * /home/user/wan_ip_monitor.sh
Krok 5: Pripojenie z Atari XE/XL
Varianta A: FujiNet (najjednoduchšia)
- Vypnite Atari, zapojte FujiNet do SIO portu
- Zapnite Atari — FujiNet sa pripojí na vašu WiFi
- Nahrajte terminálový program (napr. BOB-Term alebo ICE-T XE) — buď z TNFS servera alebo z SD karty cez FujiNet
- V termináli nastavte:
- Host:
tnfs.vasweb.sk(alebo vaša doména/IP) - Port:
6502 - Protokol: Telnet
- Spojte sa — uvíta vás USER BBS header a výzva na zadanie mena
Varianta B: SIO2PC + APE
- Pripojte SIO2PC USB kábel medzi Atari SIO port a PC
- Na PC spustite APE (Atari Peripheral Emulator)
- V APE aktivujte R: handler (emulácia 850 interface)
- Na Atari nahrajte terminál (napr. BOB-Term)
- Použite AT príkazy:
ATDT tnfs.vasweb.sk:6502
Varianta C: AspeQt / RespeQt
- Pripojte SIO2PC kábel
- Na PC spustite RespeQt (open source, multiplatformný)
- Aktivujte R: handler device
- Na Atari použite terminál s AT príkazmi rovnako ako vo Variante B
Varianta D: R-Verter + Lantronix MSS100 (bez PC!)
Toto je „hardcore“ varianta pre puristov — žiadny PC v reťazci:
- R-Verter sa zapojí do SIO portu Atari — poskytuje RS-232 port a R: handler
- Sériovým káblom prepojte R-Verter s Lantronix MSS100 (serial-to-Ethernet bridge)
- Lantronix pripojte ethernetom do siete
- Nakonfigurujte Lantronix (cez web interface) na transparentný serial-TCP bridge
- Na Atari v termináli vytočte:
ATDT tnfs.vasweb.sk:6502
- Lantronix preloží AT príkaz na TCP spojenie a ste pripojení!
Záver
Celý setup stojí menej než 20 EUR (Pi Zero 2 W) + cena FujiNetu alebo SIO2PC kábla. Výsledkom je plne funkčná BBS-ka, na ktorú sa dá pripojiť z pôvodného Atari 800XL z roku 1983.
