Version 0.1.0 – experimenteller, quelloffener Prototyp
Dieses Projekt untersucht, wie sich eine LLM auf einem alten PC ausschließlich über den klassischen internen PC-Speaker mitteilen kann. Eine Soundkarte, Covox-Hardware oder ein externer DAC werden für die DOS-Ausgabe nicht benötigt.
Der Prototyp enthält zwei unabhängige Ausgabemöglichkeiten:
PCSPLAY.COMspielt kurze, extern erzeugte Sprachdaten als 8-kHz-PWM über PIT-Kanal 2 und den PC-Speaker ab.PCSMORSE.COMgibt Text direkt unter DOS als Morsecode aus. Das ist der robuste Fallback und zugleich ein einfacher Hardwaretest.
Außerdem erzeugt tools/retro_tts.py aus deutschem oder englischem Text eine
absichtlich einfache Formant-/Roboterstimme. Damit kann man den vollständigen
Weg LLM-Text → Sprachdaten → interner Lautsprecher ausprobieren.
Den gesamten Ordner auf den DOS-PC kopieren und im Projektverzeichnis starten:
DEMO.BAT
Oder einzeln:
BIN\PCSMORSE SOS
BIN\PCSMORSE READY
BIN\PCSPLAY SAMPLES\HALLO.PCM
BIN\PCSPLAY SAMPLES\HELLO.PCM
HALLO.PCM sagt synthetisch „Hallo, ich bin ein Computer“. Zuerst sollte
PCSMORSE SOS getestet werden. Wenn dabei nichts zu hören ist, liegt das
Problem nicht am Sprachsample, sondern wahrscheinlich am fehlenden
Systemlautsprecher, Speaker-Header oder an der Emulator-Konfiguration.
Auf einem modernen Rechner mit Python 3:
python tools/retro_tts.py --lang de --text "Hallo. Das System ist bereit." --out ANTWORT.PCM --wav ANTWORT.WAV
ANTWORT.WAV ist eine optionale Hörvorschau. ANTWORT.PCM wird zum DOS-PC
übertragen und dort abgespielt:
BIN\PCSPLAY ANTWORT.PCM
Die eingebaute Formantstimme ist bewusst klein und stark robotisch. Sie besitzt einige deutsche und englische Ausspracheregeln sowie ein kleines Wörterbuch. Unbekannte Wörter werden über vereinfachte Buchstaben- und Lautregeln erzeugt. Für eine wesentlich verständlichere Ausgabe kann eine beliebige moderne TTS auf dem LLM-Rechner eine WAV-Datei erstellen:
python tools/wav_to_pcs.py LLM_ANSWER.WAV ANTWORT.PCM
Der Konverter akzeptiert unkomprimierte PCM-WAV-Dateien mit 8, 16, 24 oder 32 Bit sowie Mono oder Stereo und erzeugt das benötigte Format:
- 8.000 Hz
- Mono
- 8 Bit unsigned PCM
- ohne WAV-Header
Damit sieht der praktische Datenweg so aus:
LLM → Text → TTS/Formantsynthese → 8-kHz-PCM → Datei/seriell → DOS-PC → PC-Speaker
In Version 0.1 geschieht die TTS-Berechnung noch auf dem modernen Rechner. Der alte PC übernimmt nur die Morse- oder PWM-Ausgabe. Eine spätere Version kann Text über COM1 empfangen und eine kleine Allophonstimme vollständig unter DOS erzeugen.
Empfohlen wird mindestens ein 80286. Der Player erzeugt ungefähr 8.008 Interrupts pro Sekunde; ein schneller 286, 386 oder 486 ist daher realistischer als ein 4,77-MHz-8088. Der klassische Systemlautsprecher muss tatsächlich am Mainboard-Speakeranschluss hängen.
Bei manchen neueren Mainboards existiert zwar noch ein Speaker-Header, es ist aber kein Lautsprecher angeschlossen. Ein kleiner passiver PC-Buzzer genügt häufig für den Versuch, klingt jedoch meist schlechter als ein klassischer magnetischer Gehäuselautsprecher.
- 86Box und PCem eignen sich gut für einen vollständigen Retro-Test.
- DOSBox, DOSBox-X und DOSBox Staging können den PC-Speaker emulieren.
- Im Emulator landet der Klang normalerweise auf der modernen Soundausgabe. Das prüft Programm und Daten, aber natürlich nicht den realen Lautsprecher.
Die .COM-Programme sind keine Windows-10/11-Treiber und sollten in einer
echten DOS-/FreeDOS-Umgebung oder einem passenden Emulator ausgeführt werden.
PCSPLAY.COM lädt maximal 48.000 Bytes in den Speicher. Anschließend:
- wird der ursprüngliche IRQ-0-/INT-8-Vektor gesichert,
- PIT-Kanal 0 auf einen Divisor von 149 gestellt,
- PIT-Kanal 2 als PWM-Einerzeuger konfiguriert,
- jedes 8-Bit-Sample in eine Pulsbreite von 1 bis 149 PIT-Takten umgesetzt,
- der BIOS-Timer näherungsweise weiterverkettet,
- am Ende Interruptvektor, PIT und Port
61hwiederhergestellt.
Der DOS-PC muss während der Wiedergabe weder Dateien nachladen noch DOS aus einem Interrupt heraus aufrufen. Das verringert Absturz- und Timingprobleme.
- maximal 48.000 Bytes beziehungsweise ungefähr sechs Sekunden pro Datei
- sehr geringe Lautstärke und Bandbreite je nach PC-Speaker
- während der Wiedergabe praktisch keine normale Programmarbeit
- kein Abbruch innerhalb eines Samples; spätestens nach sechs Sekunden endet es
- ein Reset während der Wiedergabe ist unproblematisch, ein Programmabsturz kann jedoch einen Neustart erfordern, weil IRQ 0 vorübergehend verändert ist
- die tatsächliche Wiedergaberate beträgt wegen des ganzzahligen PIT-Divisors rund 8.008 Hz
retro_tts.py teilt längere Texte automatisch in nummerierte PCM-Dateien von
höchstens 5,8 Sekunden. Diese werden nacheinander mit PCSPLAY aufgerufen.
FASM nach tools\fasm\FASM.EXE kopieren oder in PATH bereitstellen:
BUILD_FASM.cmd
Die FASM-Quellen befinden sich unter src\fasm.
./BUILD_GNU.sh
Die entsprechenden GNU-AS-Quellen liegen unter src/gas. Die mitgelieferten
.COM-Dateien wurden aus diesen Quellen gebaut und statisch überprüft.
| Pfad | Inhalt |
|---|---|
bin/PCSPLAY.COM |
PCM-PWM-Player für DOS |
bin/PCSMORSE.COM |
direkter Text-zu-Morse-Player |
samples/HALLO.PCM |
deutscher Test für den PC-Speaker |
samples/HELLO.PCM |
englischer Test für den PC-Speaker |
samples/*.WAV |
hörbare Vorschau der gleichen Rohdaten |
tools/retro_tts.py |
kleine DE/EN-Formantsynthese |
tools/wav_to_pcs.py |
allgemeiner WAV-Konverter |
tools/selftest.py |
statische Binary- und Audiodatenprüfung |
src/fasm |
FASM-Quellen |
src/gas |
GNU-AS-Quellen und Linkerskript |
PCSpeaker LLM is an experimental DOS bridge that lets an LLM communicate
without a sound card. PCSPLAY.COM renders 8-kHz unsigned PCM through the
classic PC speaker using PIT-driven PWM; PCSMORSE.COM provides a direct and
robust Morse fallback. German/English robotic test speech and dependency-free
conversion tools are included. Physical-speaker playback still needs to be
tested on real DOS/FreeDOS hardware.
MIT – siehe LICENSE.txt.