Programmieren für den Sinclair ZX Spectrum bzw. den "The Spectrum"
Ich habe mir einen "The Spectrum" Nachbau vom Sinclair ZX Spectrum gekauft.
Vorab: Das ist kein 1:1-Nachbau, auch wenn er auf den ersten Blick so aussieht, insbesondere wegen der Gummitastatur.
Das Ding hat einen HDMI-Anschluss und gibt auch den Ton darüber aus (kein eingebauter Lautsprecher). Es hat 3 USB-Anschlüsse, um Joysticks (z.B. einen Competition Pro von Speedlink) oder Gamepads oder Tastaturen (zum Glück!) anzuschließen.
Die "Mic" und "Ear" Ein-und-Ausgänge des Originals fehlen und auch der Bus ist nicht herausgeführt. Original-Hardware lässt sich also nicht anschließen, aber wer hätte die noch (funktionierend) zur Hand?
Mich stört das nicht.
Das Gerät bildet den 16k, 48k oder diverse Spectrum 128k Modelle ab.
Programmieren möchte man nicht unbedingt direkt auf dem Gerät, selbst wenn das problemlos möglich ist - da bin ich über 40 Jahre Fortschritt schon froh.
Ich habe eine PC-Tastatur angeschlossen und möchte auch "von außen" programmieren.
Meine Z80A-Assembler-Kenntnisse sind etwas eingerostet (obwohl ich mich an einzelne coole Befehle wie LDIR oder DJNZ noch erinnere).
Früher habe ich in Assembler pfeilschneller Füll-Routinen und Grafikroutinen (Bresenham-Algorithmus für Linien und Kreise) geschrieben. Das war aber eine ziemliche Quälerei.
Ansonsten habe ich das eingebaute Basic oder das damals großartige Beta Basic verwendet.
Um jetzt zu programmieren, nutze ich den PC wie folgt:
Visual Studio Code
als Entwicklungsumgebung. Das nutze ich auch beruflich, für verschiedene Programmiersprachen.
VSC Extension "ZX Basic"
ZX Basic alias Boriel's Basic
als Programmiersprache. Achtung! Das ist nicht das normale Sinclair Basic, sondern eine verwandte Programmiersprache, die aber (auf dem PC) in Maschinensprache für den Z80-Prozessor übersetzt wird.
FUSE
als Spectrum-Emulator für erste Tests, da das Übertragen per USB-Stick auf den The Spectrum doch etwas mühselig ist.
Einrichtung
Ich habe FUSE unter C:\prog\fuse installiert und den ZX Basic Compiler unter C:\prog\zxbasic.
Mein erstes Testprogramm steht in einem Ordner C:\Users\Henning\ZX-Programming\hello_world und hat den Dateinamen hello_world.bas
Testprogramminhalt
1 cls
5 for i = 1 to 10
10 ink i
20 print "Hello World!"
30 pause 50
40 next i
Datei .vscode\tasks.json
Um den Compiler aufzurufen inklusive Markierung der Fehler im Quelltext und das Programm im Emulator zu testen, verwende ich folgende Datei tasks.json:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Compile ZXBasic",
"type": "shell",
"command": "c:\\prog\\zxbasic\\zxbc.exe",
"args": [
"${file}",
"--output-format=tap",
"--BASIC",
"--autorun"
],
"presentation": {
"echo": true,
"reveal": "always",
"revealProblems": "onProblem",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": false
},
"problemMatcher": [
{
"owner": "zxb",
"fileLocation": "autoDetect",
"source": "ZX Basic",
"pattern": {
"regexp": "^(.*):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"severity": 3,
"message": 4
}
}
],
"group": "build"
},
{
"label": "Run on Emulator",
"type": "shell",
"command": "c:\\prog\\fuse\\fuse.exe",
"args": [
"-m", "128",
"-v", "640",
"${fileBasenameNoExtension}.tap"
]
},
{
"label": "Compile and Run",
"dependsOn": [
"Compile ZXBasic",
"Run on Emulator"
],
"dependsOrder": "sequence",
"group": {
"kind": "build",
"isDefault": true
}
}
],
}
Und damit kann ich das Programm mit der Tastenkombination Strg-Shift-B direkt kompilieren und im FUSE-Emulator ausführen:
# posted by Sam Vimes @ 19:13