merlin123
Lt. Commander
- Registriert
- Jan. 2018
- Beiträge
- 1.854
Hi zusammen 👋,
der 3DO war seiner Zeit technisch voraus, besaß jedoch nie echte Online-Funktionalität im heutigen Sinn. Dennoch lässt sich mit moderner Hardware – insbesondere einem PC als privatem Server und einem Raspberry Pi als Brücke – ein spannendes, experimentelles Setup realisieren.
ich wollte schon länger wissen, ob man einen alten 3DO mit heutigen Mitteln irgendwie „online“ bringen kann – nicht im Sinne von Echtzeit-Multiplayer, sondern eher so, wie es zur Hardware passt. Nach ein paar Abenden Basteln, Lesen alter Dokus sowie Forenbeiträge und Fluchen über serielle Schnittstellen ist daraus dieses kleine Projekt entstanden.
Vielleicht ist es für den einen oder anderen hier interessant oder zumindest eine nette Inspiration.
(Dieser Artikel beschreibt kein offizielles oder historisch korrektes Verfahren, sondern einen theoretisch-praktischen Bastelansatz, wie man einem 3DO eine Art „Pseudo-Onlinefähigkeit“ verleihen könnte)
---
Die Idee
Einfach gesagt:
Mein 3DO soll Highscores an einen privaten Server schicken und beim nächsten Start wieder abrufen können.
Kein Internet direkt, kein WLAN-Modul, kein Zauber – sondern ein Raspberry Pi als Dolmetscher zwischen 90er-Jahre-Hardware und einem stinknormalen PC.
---
Setup (wie es bei mir aussieht)
3DO → serielle Verbindung → Raspberry Pi → LAN/WLAN → PC (Server)
Der Pi hängt bei mir unscheinbar hinter dem Fernseher und macht genau eine Sache: Daten weiterreichen.
---
Hardware, die ich benutzt habe:
Panasonic 3DO FZ-10
Raspberry Pi 3 (lag noch rum)
USB-zu-TTL-Seriell-Adapter (FTDI FT232RL (3,3V))
Pegelwandler (wichtig!) (Logic level converter bss138 3.3V)
ein selbstgelötetes Kabel (flexible Einzellitzen 0,25mm"2,rot=TX,gelb=RX,schwarz=masse)
viel Geduld 😅
Hinweis: Ohne Pegelwandler würde ich das keinem empfehlen. Alte Hardware ist da sehr unforgiving.
---
Kabel bauen:
Erstmal 2-3mm abisolieren an beiden Enden und diesen dann vorverzinnen (zur Besseren Übersicht TX/RX und GND markieren)
Anschlussplan:
Kurze Zwischen Notiz, der 3do hat keinen Standard uart-Port. ich habe durch messen/testen an den Testpunkten Signale gemessen die Rückschlusse auf "senden" oder "Empfangen" geben. Ich glaube sogar (weil ich nur den 3DO habe) das die anderen Mainboards sogar anders aufgebaut sind.
---
Warum seriell?
Ich habe kurz überlegt den Controller-Port zu missbrauchen, mich dann aber für serielle Kommunikation entschieden:
Einstellungen:
9600 Baud
8N1
Langsam? Ja. Aber absolut ausreichend.
---
Mini-Protokoll (extra simpel)
Ich wollte kein Binärformat bauen, sondern etwas, das ich mitlesen kann:
Antwort:
Bestenliste abrufen:
Antwort:
Das Ganze ist absichtlich primitiv – Debugging per Terminal ist Gold wert.
---
3DO-Seite (stark vereinfacht)
Das "Spiel" blockiert einfach, bis eine Antwort kommt. Multitasking wäre Overkill.
---
Raspberry Pi: die Brücke
Der Pi ist bei mir bewusst dumm gehalten. Keine Logik, kein Cache – nur Weiterleiten.
Das Ganze ist natürlich komplett unnötig – aber genau das macht für mich den Reiz aus.
Einen 30 Jahre alten 3DO Daten an einen Server schicken zu sehen, fühlt sich einfach falsch und richtig zugleich an.
Natürlich gibt es keine Spiele die sowas tatsächlich nutzen, aber irgendiwe hat es seinen Reiz Homebrew bzw. tests und solche Späße auszuprobieren
Fazit
Einen 3DO heute „onlinefähig“ zu machen ist:
- technisch anspruchsvoll
-langsam
-absolut unnötig
…aber genau deshalb fantastisch.
Mit einem Raspberry Pi als intelligenter Brücke lässt sich ein privates Retro-Netzwerk erschaffen, das zeigt, wie flexibel alte Systeme sein können, wenn moderne Technik ihnen zur Seite steht.
Software auf dem 3DO
Eigene Homebrew-Software
Weiterleitung an Server
Beispiel-Software (Python, vereinfacht)
---
der 3DO war seiner Zeit technisch voraus, besaß jedoch nie echte Online-Funktionalität im heutigen Sinn. Dennoch lässt sich mit moderner Hardware – insbesondere einem PC als privatem Server und einem Raspberry Pi als Brücke – ein spannendes, experimentelles Setup realisieren.
ich wollte schon länger wissen, ob man einen alten 3DO mit heutigen Mitteln irgendwie „online“ bringen kann – nicht im Sinne von Echtzeit-Multiplayer, sondern eher so, wie es zur Hardware passt. Nach ein paar Abenden Basteln, Lesen alter Dokus sowie Forenbeiträge und Fluchen über serielle Schnittstellen ist daraus dieses kleine Projekt entstanden.
Vielleicht ist es für den einen oder anderen hier interessant oder zumindest eine nette Inspiration.
(Dieser Artikel beschreibt kein offizielles oder historisch korrektes Verfahren, sondern einen theoretisch-praktischen Bastelansatz, wie man einem 3DO eine Art „Pseudo-Onlinefähigkeit“ verleihen könnte)
---
Die Idee
Einfach gesagt:
Mein 3DO soll Highscores an einen privaten Server schicken und beim nächsten Start wieder abrufen können.
Kein Internet direkt, kein WLAN-Modul, kein Zauber – sondern ein Raspberry Pi als Dolmetscher zwischen 90er-Jahre-Hardware und einem stinknormalen PC.
---
Setup (wie es bei mir aussieht)
3DO → serielle Verbindung → Raspberry Pi → LAN/WLAN → PC (Server)
Der Pi hängt bei mir unscheinbar hinter dem Fernseher und macht genau eine Sache: Daten weiterreichen.
---
Hardware, die ich benutzt habe:
Panasonic 3DO FZ-10
Raspberry Pi 3 (lag noch rum)
USB-zu-TTL-Seriell-Adapter (FTDI FT232RL (3,3V))
Pegelwandler (wichtig!) (Logic level converter bss138 3.3V)
ein selbstgelötetes Kabel (flexible Einzellitzen 0,25mm"2,rot=TX,gelb=RX,schwarz=masse)
viel Geduld 😅
Hinweis: Ohne Pegelwandler würde ich das keinem empfehlen. Alte Hardware ist da sehr unforgiving.
---
Kabel bauen:
Erstmal 2-3mm abisolieren an beiden Enden und diesen dann vorverzinnen (zur Besseren Übersicht TX/RX und GND markieren)
Anschlussplan:
Code:
3DO Mainboard
-----------------
| |
TX ────|─────────────────┐ (rote Litze)
RX ────|─────────────────┘ (gelbe Litze)
GND ────|─────────────────■ (schwarze Litze)
| |
-----------------
│
│ selbstgelötetes Kabel
▼
---------------------
| Pegelwandler BSS138|
| LV HV |
|-------------------|
TX LV1 ◀── LV 3,3V vom Pi │
RX LV2 ◀── LV 3,3V vom Pi │
GND ◀─ LV GND ─────────────────┤
| |
TX HV1 ──▶ HV TX 3DO (rot) │
RX HV2 ──▶ HV RX 3DO (gelb) │
GND ──▶ HV GND 3DO (schwarz) │
---------------------
│
│ kurze Jumper- oder Dupont-Kabel
▼
USB-TTL Adapter
-----------------
| |
RX ◀── LV1 TX │ (rot)
TX ─▶ LV2 RX │ (gelb)
GND ──┘ │ (schwarz)
-----------------
│
▼
Raspberry Pi
-----------------
| |
USB-Port (ttyUSB0) │
-----------------
│
▼
Python-Script
(Serial-Bridge 3DO ↔ Server)
Kurze Zwischen Notiz, der 3do hat keinen Standard uart-Port. ich habe durch messen/testen an den Testpunkten Signale gemessen die Rückschlusse auf "senden" oder "Empfangen" geben. Ich glaube sogar (weil ich nur den 3DO habe) das die anderen Mainboards sogar anders aufgebaut sind.
---
Warum seriell?
Ich habe kurz überlegt den Controller-Port zu missbrauchen, mich dann aber für serielle Kommunikation entschieden:
- leichter zu debuggen
- stabil
- fühlt sich irgendwie „richtig“ an
Einstellungen:
9600 Baud
8N1
Langsam? Ja. Aber absolut ausreichend.
---
Mini-Protokoll (extra simpel)
Ich wollte kein Binärformat bauen, sondern etwas, das ich mitlesen kann:
Python:
SEND|PLAYER=MIKA|SCORE=123456|TIME=2025-12-13
Antwort:
Python:
OK|RANK=3
Bestenliste abrufen:
Python:
GET|HIGHSCORES
Antwort:
Python:
LIST|1,AAA,999999;2,BBB,500000;3,MIKA,123456
Das Ganze ist absichtlich primitiv – Debugging per Terminal ist Gold wert.
---
3DO-Seite (stark vereinfacht)
Das "Spiel" blockiert einfach, bis eine Antwort kommt. Multitasking wäre Overkill.
Python:
send("SEND|PLAYER=MIKA|SCORE=123456");
response = receive();
showMessage("Score gespeichert!");
---
Raspberry Pi: die Brücke
Der Pi ist bei mir bewusst dumm gehalten. Keine Logik, kein Cache – nur Weiterleiten.
Python:
import serial, socket
ser = serial.Serial('/dev/ttyS0', 9600)
sock = socket.socket()
sock.connect(('192.168.0.10', 9000))
while True:
msg = ser.readline()
sock.send(msg)
reply = sock.recv(1024)
ser.write(reply)
/CODE]
---
Server auf dem PC
Läuft auf meinem normalen Rechner im LAN. Erstmal nur rudimentär:
[CODE=python]
import socket
scores = []
srv = socket.socket()
srv.bind(('0.0.0.0', 9000))
srv.listen(1)
conn, _ = srv.accept()
while True:
data = conn.recv(1024).decode()
if data.startswith('SEND'):
scores.append(data)
conn.send(b'OK|RANK=3')
Das Ganze ist natürlich komplett unnötig – aber genau das macht für mich den Reiz aus.
Einen 30 Jahre alten 3DO Daten an einen Server schicken zu sehen, fühlt sich einfach falsch und richtig zugleich an.
Natürlich gibt es keine Spiele die sowas tatsächlich nutzen, aber irgendiwe hat es seinen Reiz Homebrew bzw. tests und solche Späße auszuprobieren
Fazit
Einen 3DO heute „onlinefähig“ zu machen ist:
- technisch anspruchsvoll
-langsam
-absolut unnötig
…aber genau deshalb fantastisch.
Mit einem Raspberry Pi als intelligenter Brücke lässt sich ein privates Retro-Netzwerk erschaffen, das zeigt, wie flexibel alte Systeme sein können, wenn moderne Technik ihnen zur Seite steht.
Software auf dem 3DO
Eigene Homebrew-Software
Python:
import serial
import socket
import time
import queue
import threading
# -----------------------
# Konfiguration
# -----------------------
SERIAL_PORT = "/dev/ttyS0"
SERIAL_BAUD = 9600
SERVER_IP = "192.168.0.10"
SERVER_PORT = 9000
SERIAL_TIMEOUT = 0.1
NETWORK_TIMEOUT = 5
# -----------------------
# Queues für Puffern
# -----------------------
to_server = queue.Queue() # Daten vom 3DO → Server
to_3do = queue.Queue() # Daten vom Server → 3DO
# -----------------------
# Serielle Verbindung
# -----------------------
ser = serial.Serial(
SERIAL_PORT,
SERIAL_BAUD,
timeout=SERIAL_TIMEOUT
)
# -----------------------
# Netzwerkverbindung
# -----------------------
def connect_server():
while True:
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(NETWORK_TIMEOUT)
s.connect((SERVER_IP, SERVER_PORT))
print("[NET] Verbunden mit Server")
return s
except Exception as e:
print("[NET] Verbindung fehlgeschlagen, retry in 3s")
time.sleep(3)
sock = connect_server()
# -----------------------
# Thread: Lesen vom 3DO
# -----------------------
def read_from_3do():
buffer = b""
while True:
try:
data = ser.read(64)
if data:
buffer += data
if b"\n" in buffer:
line, buffer = buffer.split(b"\n", 1)
msg = line.decode(errors="ignore").strip()
print(f"[3DO → PI] {msg}")
to_server.put(msg)
except Exception as e:
print("[3DO] Fehler:", e)
time.sleep(1)
# -----------------------
# Thread: Senden zum 3DO
# -----------------------
def write_to_3do():
while True:
msg = to_3do.get()
try:
ser.write((msg + "\n").encode())
print(f"[PI → 3DO] {msg}")
except Exception as e:
print("[3DO] Schreibfehler:", e)
# -----------------------
# Thread: Kommunikation mit Server
# -----------------------
def server_loop():
global sock
while True:
try:
msg = to_server.get()
sock.sendall((msg + "\n").encode())
print(f"[PI → SERVER] {msg}")
reply = sock.recv(1024)
if not reply:
raise ConnectionError("Server disconnected")
reply_msg = reply.decode().strip()
print(f"[SERVER → PI] {reply_msg}")
to_3do.put(reply_msg)
except Exception as e:
print("[NET] Fehler:", e)
sock.close()
sock = connect_server()
time.sleep(1)
# -----------------------
# Threads starten
# -----------------------
threads = [
threading.Thread(target=read_from_3do, daemon=True),
threading.Thread(target=write_to_3do, daemon=True),
threading.Thread(target=server_loop, daemon=True),
]
for t in threads:
t.start()
print("3DO Bridge läuft...")
while True:
time.sleep(1)
--
Weiterleitung an Server
Beispiel-Software (Python, vereinfacht)
Python:
import serial
import socket
ser = serial.Serial('/dev/ttyS0', 9600)
sock = socket.socket()
sock.connect(('192.168.0.10', 9000))
while True:
data = ser.readline()
sock.send(data)
---