STECCY
Von Frank M. (ukw)
STECCY - ZX-Spectrum-Emulator mit STM32
Einleitung
STECCY emuliert einen ZX-Spectrum 128K oder Spectrum 48K auf einem STM32F407VET-Black-Board, welches für ca. 10 Euro bei eBay oder Aliexpress erstanden werden kann. Außerdem ist STECCY unter QT übersetzbar, so dass STECCY auch unter Windows und Linux genutzt werden kann. Ebenso existiert eine Framebuffer- und X11-Portierung auf Linux, so dass STECCY auch auf einem Raspberry PI in der Console oder auf dem Desktop läuft. STECCY bildet als Emulator nicht nur den Befehlssatz einer Z80-CPU ab, sondern auch Teile der ZX-Spectrum-Hardware. Das 256x192 große Spectrum-Display wird dabei auf einem TFT-Display mit einer Vergrößerung von 2:1 dargestellt - also mit einer Auflösung von 512x384 Bildpunkten. Das Laden und Speichern von Programmen geschieht über eine SD-Karte, welche FAT-formatiert ist. Hier werden die Cassettenrecorder-Routinen im virtuellen ROM umgebogen auf Lade- und Speicher-Routinen für SD-Karten. STECCY unterstützt dafür TAP-, TZX- und Snapshot-Dateien. Mittels Snapshots kann jederzeit der aktuelle Zustand des emulierten ZX-Spectrums eingefroren und abgespeichert werden. Dadurch ist es dann zum Beispiel möglich, am nächsten Tag ein Spiel genau zu dem Zeitpunkt weiterzuspielen, wie es als Snapshot gespeichert wurde. Es wird der ZX-Spectrum 128K oder ZX-Spectrum 48K emuliert. Der virtuelle Spectrum 128K hat ein ROM mit einer Größe von 32KB und RAM mit einer Größe von 128KB, der Spectrum 48K ein ROM mit einer Größe von 16KB und RAM mit einer Größe von 48KB. Z80-EmulatorEs werden nicht nur die dokumentierten, sondern auch alle undokumentierten Befehle einer Z80-CPU nachgebildet. Dieses ist insbesondere bei Spielen wichtig, da manche ZX-Spectrum-Spiele undokumentierte Instruktionen verwenden. Über http://clrhome.org/table/ findet man sämtliche möglichen Z80-Instruktionen. Die dokumentierten sind grau hinterlegt, die undokumentierten haben einen roten Hintergrund und bilden den weitaus größeren Teil aller Z80-Instruktionen. Hardware-EmulatorFolgende ZX-Spectrum-Hardware wird durch STECCY nachgebildet:
Für die Wiedergabe des Spectrum-Screens ist beim Original die Spectrum-ULA zuständig. Diese liest dafür mit einer Rate von 50Hz die erforderlichen 6912 Bytes aus dem RAM des Spectrums. Analog geschieht das durch STECCY: Hier wird ebenso 50 mal pro Sekunde das TFT-Display aktualisiert. Allerdings findet hier eine Optimierung statt: Es werden nur die geänderten Daten neu an das TFT übertragen, um Zeit zu sparen. Ebenso sorgt der ULA-Chip für den Z80-Interrupt, welcher dafür sorgt, dass die Tastatur-Routinen im RAM angesprungen werden, um die Matrix-Tastatur des Spectrums auszulesen. Auch werden diverse Systemvariablen aktualisiert wie zum Beispiel ein 16-Bit-Uptime-Counter. STECCY verwendet je nach aktuellem Interrupt-Mode (IM0/IM1/IM2) die sich daraus ergebenen Adressen als Interrupt-Sprungadressen und ruft dann die entsprechende Interrupt-Routine auf. Diese Sprungadresse befindet sich standardmäßig im ROM, wird aber von vielen Spielen umgebogen auf eigene Adressen im RAM, um beispielsweise den Spectrum-Screen flickerfrei zu aktualisieren. FeaturesDie Features von STECCY kann man mit folgenden Punkte zusammenfassen:
|
ROM
Das Sinclair-Betriebssystem, nämlich das ZX-Spectrum 128K oder 48K ROM, besteht aus 16KB bzw. 32KB Daten, welche zum großen Teil Z80-Instruktionen sind. Da der Rechteinhaber Amstrad die Inhalte mittlerweile freigegeben hat, solange die Copyright-Meldung erhalten bleibt, ist es kein Problem, das Original-ROM des ZX-Spectrum 128K oder auch 48K für eine solche Emulation zu nutzen. Ja, man darf die Inhalte sogar weiterverteilen.
Siehe dazu auch Amstrad ROM permissions
Das Original-ROM von Sinclair steht unter Download zur Verfügung. Enthalten sind im ZIP-Archiv "steccy-roms.zip" folgende ROMs:
- 128.rom - Original Sinclair-ROM 128K
- 48.rom - Original Sinclair-ROM 48K
- 48u.rom - Wie 48.rom, jedoch mit zusätzlichem Stream #4 zur Ein-/Ausgabe über STM32-UART2.
Zu 48u.rom siehe auch STM32-Hardware-Erweiterungen.
Modifikationen und Neu-Implementationen der ZX-Spectrum-ROMs sind ebenso lauffähig. Das Original-ROM als auch jede Menge Modifikationen bzw. Erweiterungen findet man unter Philip Kendall - The Spectrum ROMs collection.
Wenn man sich einfach nicht an die exotische Kommando-Eingabe von Basic-Tokens durch einzelne Tasten gewöhnen will, dem sei das "GOSH WONDERFUL ZX Spectrum ROM" für den ZX-Spectrum 48K empfohlen. Hier werden die BASIC-Befehle über Einzeltasten eingegeben. Der Spectrum 128K stellt im 128K-Basic sowieso bereits die Eingabe der Basic-Token über Einzeltasten zur Verfügung.
Das GOSH-ROM kann man hier als Datei gw03.rom herunterladen: The GOSH WONDERFUL ROM
Unter dieser URL sind auch sämtliche Verbesserungen, Bugfixes und Erweiterungen gegenüber dem Original-Sinclair-ROM aufgezählt.
Das Handbuch zum ZX-Spectrum ist ebenso frei verfügbar: World of Spectrum Documentation ZX Spectrum manual
SD-Karte
Zum Start von STECCY sollten zumindest die ROM-Dateien, nämlich 128.rom und 48.rom auf der SD-Karte vorhanden sein. Die SD-Karte formatiert man zuvor auf dem PC als FAT32, kopiert 128.rom und 48.rom darauf und steckt sie anschließend in den SD-Karteneinschub des STM32F407VET-Black-Boards. Zusätzlich kann man auch das oben erwähnte gw03.rom auf der SD-Karte ablegen, um dann über das STECCY-Menü das GOSH-ROM zu laden.
Desweiteren können auf der SD-Karte weitere ZX-Spectrum-Programme abgelegt werden, nämlich als TAP-, TZX- oder Z80-Dateien. Letztere sind Snapshots vom emulierten ZX-Spectrum 128K oder ZX-Spectrum 48K.
Der Aufbau dieser Dateien ist unter anderem hier erklärt:
- TAP: ZX Spectrum tape file: format specification
- TZX: TZX FORMAT
- Snapshots: Z80 File Format
Das TZX-Dateiformat ist wesentlich flexibler als das TAP-Format. TZX erlaubt auch Komprimierungen und Schnell-Laderoutinen, die es früher für den ZX-Spectrum gab. STECCY unterstützt jedoch nur das Laden über die Standard-ROM-Routinen (komprimiert und unkomprimiert), so dass Schnell-Lader nicht unterstützt werden. Über 95 Prozent der ZX-Spectrum-Programme nutzen die ROM-Routinen, so dass es da keine Probleme gibt.
Findet man im Netz ein Programm/Spiel in beiden Formaten (TAP und TZX), sollte man im Zweifel besser die TAP-Datei verwenden. Wenn das Programm im TZX-Format vorliegt, kann es in seltenen Fällen dazu kommen, dass STECCY diese Datei nicht vollständig laden kann. Die Wahrscheinlichkeit liegt aber unter 5 Prozent. In diesem Fall kann man auch den ZX-Spectrum-Emulator "Fuse", der für Windows und Linux frei erhältlich ist, verwenden, um dort die Schnell-Lader-Datei einzuspielen und dann als Snapshot wieder zu speichern. Die Snapshots können dann problemlos auch für STECCY verwendet werden.
Die Software zur Verwendung der SD-Karte ist FatFs - Generic FAT Filesystem Module. Vielen Dank an ChaN dafür!
Bitte beachten: Der STM32 stellt die Dateinamen im Format 8.3 dar, das heißt, man sollte nicht mehr als 8 Zeichen vor dem Punkt verwenden.
STM32F407VET BlackBoard
Auf dem BlackBoard sind unter anderem folgende Komponenten verbaut:
Kompletter Schaltplan des STM32F407VET6-BlackBoards: STM32_F4VE_SCHEMATIC.PDF Komplettübersicht Steckerbelegungen: STM32F407VET6 black board Einzelübersicht Steckerbelegungen: JTAG und TFT: Black STM32f4VET6-2 Pinouts JTAG-TFT.pdf |
Für STECCY benötigt werden der FSMC-Anschluss für das Display und der SD-Karten-Einschub. Desweiteren werden noch ein paar Pins für Tastatur und andere Zwecke verwendet.
Display
3,2-Zoll-TFT-Display Als kleinstes Display kann das 3,2-Zoll-Display mit ILI9341-Controller und RGB-Interface verwendet werden. Dieses wird ohne weitere Lötarbeiten einfach auf den TFT-Stecker des STM32F407VET6-BlackBoards gesteckt. Das Display bekommt man ab 11 EUR. Bezugsquellen:
Allerdings ist das Display mit 3,2 Zoll recht klein. 5"- oder 7"-Displays bereiten da schon mehr Spaß, sie unten. 5-Zoll oder 7-Zoll-TFT-Display Als Display kann ein 7-Zoll-TFT-Display mit 800x480 Pixeln und SSD1963-Controller verwendet werden. Ein Touchscreen ist nicht erforderlich. Das TFT-Display ist für ca. 50 EUR unter anderem hier in Deutschland mit kurzer Lieferzeit erhältlich: https://eckstein-shop.de/70-800x480-TFT-LCD-Display-ohne-Touchscreen-SSD1963-MCU-Arduino-Kompatibel Das ist das Modell ohne Touchscreen. Das gleiche findet man auch für einen günstigeren Preis (ca. 30-35 EUR) beim Chinesen um die Ecke, also eBay oder Aliexpress unter dem Stichwort "SSD1963 7" inch TFT LCD Module Display 800x480" - meist sogar mit Touchscreen. Das Touch-Feld wird von STECCY nicht unterstützt, stört aber sonst nicht weiter. Sollte man das gleiche Display auch ohne Touchscreen zu einem günstigeren Preis finden, sollte man einfach dieses verwenden. Dieses Display gibt es in derselben Auflösung auch als 5-Zoll-Display für unter 30 EUR. Wem das 7-Zoll-Display zu groß ist, kann auch dieses verwenden. Wichtig ist der SSD1963-Controller und die Auflösung von 800x480. Das Display wird über die parallele FSMC-Schnittstelle des STM32 wie folgt an den TFT-Stiftsockel des STM32F407VET-BlackBoards angeschlossen:
Da die Hintergrundbeleuchtung des Displays ca. 400mA als Strom zieht, sollte die 5V-Versorgung des Displays nicht über das STM32-Board, sondern direkt über ein 5V-Netzteil mit mindestens 1, besser 2 Ampere, erfolgen. Darüber kann dann auch das STM32-Board versorgt werden. Pins für 5V sind auf dem STM32-Board genügend vorhanden. Es muss also nicht der USB-Stecker zur Stromversorgung verwendet werden. Auf keinen Fall sollte man das BlackBoard gleichzeitig über den 5V-Stiftsockel und über den USB-Stecker betreiben! Für die Stromversorgung der Hintergrundbeleuchtung ist folgendes zu tun:
|
Die Steckerbelegungen des STM32407VET6-BlackBoards kann man hier einsehen: STM32F407VET6 black board
Kompletter Schaltplan des STM32F407VET6-BlackBoards: STM32_F4VE_SCHEMATIC.PDF
Die Steckerbelegung des Displays findet man hier: Schematic.pdf
Die Bezeichnungen sind aber auch direkt neben dem Stiftsockel auf der Display-Platine selbst abgedruckt.
Mit der F1-Taste kann man im Betrieb zwischen 4 Orientierungen wählen:
Mode | Orientierung |
---|---|
0 | Flip None (Standard) |
1 | Flip Vertical |
2 | Flip Horizontal |
3 | Flip Vertical + Horizontal |
Man kann in der INI-Datei "steccy.ini" die Orientierung speichern. Dazu zählt man nach dem Start, wie oft man die F1-Taste drücken musste, um das Bild richtig herum zu sehen.
Diesen Wert trägt man in der INI-Datei als
ORIENTATION=0 # oder 1, 2, 3
ein.
Ebenso gibt es TFT-Displays, deren RGB-Farbfolge abweichend voneinander verdrahtet sind. Wenn auf dem Display Falschfarben angezeigt werden, kann man mit der Taste F2 die RGB-Farbfolge umstellen.
Auch dieses kann man in der INI-Datei "steccy.ini" speichern.
Hier trägt man ein:
RGB=0 # Standard-Reihenfolge RGB RGB=1 # Nicht-Standard ist GRB
Tastatur
STECCY unterstützt neben einer Original-ZX-Spectrum-Tastatur (Matrix) auch eine PS/2- oder USB-Tastatur zur Zeicheneingabe. Es können sogar alle drei Varianten der Tastaturen gleichzeitig verwendet werden, was für Spiele für 2 Player sinnvoll sein kann. Dabei werden in der PC-Tastatur-Umsetzung diejenigen Tasten, die es auch auf dem ZX-Spectrum gibt, 1:1 abgebildet. Weitere auf der PC-Tastatur vorhandene Tasten werden auf Kombinationen von Spectrum-Tasten abgebildet.
STECCY wandelt dafür Z80-IN-Befehle, welche die Spectrum-Matrix-Tastatur adressieren, auf die entprechenden gemappten Tasten um, welche in regelmäßigen Abständen von der Tastatur ausgelesen werden.
Für die PC-Tastaturen gilt:
- Die TAB-Taste wechselt ins STECCY-Menü
- F1 stellt die Orientierung des TFT-Displays ein
- F2 stellt wechselt das Display zwischen der Farbreihenfolge RGB und GRB um
- F3 schaltet den Turbo-Modus (ungebremste Emulation) ein und wieder aus
- F12 beendet STECCY (gilt nur für die Linux-Version)
- Die linke Shift-Taste entspricht der CapsShift-Taste auf dem ZX-Spectrum
- Die rechte Shift-Taste entspricht der Shift-Taste auf der verwendeten PC-Tastatur
- Sowohl die linke als auch die rechte STRG-Taste ensprechen der Symbol-Shift-Taste auf dem ZX-Spectrum
- Die ESC-Taste entspricht der Tastenkombination CapsShift-Space, erzeugt also "BREAK"
- Die vier Pfeiltasten erzeugen die Kombinationen CapsShift-5 bis CapsShift-8, entsprechen also den ZX-Spectrum Cursor-Tasten
- Die Tasten des rechten Nummernfeldes werden für die Joystick-Emulation verwendet, siehe "Joystick-Emulation"
- Y und Z sind vertauscht, denn es wird möglichst das englische Layout beibehalten
Beispiele:
- Das Drücken von "j" erzeugt im Basic-Kommando-Modus den Befehl "LOAD"
- Die Plus-Taste "+" auf der PC-Tastatur erzeugt die Tastenkombination "SymbolShift-K", also "+"
- Die Plus-Taste "+" zusammen mit der rechten Shift-Taste auf der PC-Tastatur erzeugt die Tastenkombination "SymbolShift-B", also "*"
- Linke Shift-Taste zusammen mit "5" erzeugt "Cursor-Left"
- Rechte Shift-Taste zusammen mit "5" erzeugt "%"
- Pfeil-Links-Taste erzeugt "CapsShift-5", also "Cursor-Left"
Wie oben schon erwähnt, wird versucht, das englische Tastatur-Layout möglichst beizubehalten. Auf der deutschen PC-Tastatur erscheinen daher Y und Z vertauscht. Das ist Absicht, denn manche Spiele verwenden genau diese Tasten. Würde die Emulation diese beiden Tasten wiederum vertauschen, damit sie dem deutschen Layout näherkommen, müsste man unmöglich erscheinende "Affengriffe" durchführen, um das Spiel noch bedienen zu können.
Zur Orientierung: Abbilder von ZX-Spectrum-Keyboards findet man leicht über Google durch die Eingabe von "zx spectrum keyboard layout".
Gutes Beispiel: Sinclair ZX Spectrum keyboard layout
PS/2-Tastatur
Die PS/2-Tastatur wird über ein 4-adriges Kabel folgendermaßen angeschlossen:
Zwischen 5V und CLOCK bzw. 5V und DATA muss dann noch jeweils ein 4,7K Pullup-Widerstand eingebaut werden, um die Pegel auf stabilem Niveau zu halten. Die PS/2-Steckerbelegung findet man im Netz mit den Suchbegriffen "ps/2 stecker belegung". Dabei sind die spiegelbildlichen Abbildungen von Steckern und Buchsen zu beachten. |
USB-Tastatur
Die USB-Tastatur wird über einen Mini-USB-nach-USB-A-Adapter am Mini-USB-Anschluss des STM32F407-Blackboards angeschlossen. Wichtig: Da in diesem Fall der STM32 als USB-Host (im HID-Modus) agiert, muss der Pullup-Widerstand R21 (1,5K) auf dem STM32F407VET6-Blackboard mit der Kennzeichnung "V2.0" ausgelötet werden. Sonst wird die USB-Tastatur nicht erkannt. Mittlerweile gibt es auch Black Boards mit der Kennung "V33" auf der Rückseite. Dort gibt es den im Foto umkreisten Widerstand nicht mehr. Es existiert zwar immer noch ein Widerstand R21 an anderer Stelle, dieser hat jedoch eine andere Funktion. In diesem Fall ist deshalbg kein Eingreifen notwendig. Das Auslöten ist überhaupt nicht tragisch, da der externe Widerstand bei der STM32F4XX-Familie auch im Betrieb als USB-Device (und nicht USB-Host) sowieso überflüssig ist. Im Falles des Betriebs als USB-Device (und nicht als Host) wird automatisch der dafür vorgesehene interne Pullup des STM32F4XX verwendet. Wird die USB-Tastatur beim Start von STECCY erkannt, leuchtet die LED D2 (meist rot, manchmal auch grün) auf dem Blackboard auf. Manchmal wird die USB-Tastatur nicht sofort erkannt. Dann hilft meist ein Druck auf den Reset-Knopf des Boards. Nach dem Grund wird noch gesucht... |
ZX-Tastatur
STECCY unterstützt auch externe ZX-Spectrum Matrix-Tastatur. Hier wird die Matrix folgendermaßen angeschlossen:
Zeile | STM | ADDR | D0 | D1 | D2 | D3 | D4 | D4 | D3 | D2 | D1 | D0 | ADDR | STM | Zeile | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3 | PC3 | A11 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | A12 | PC4 | 4 | |
2 | PC2 | A10 | Q | W | E | R | T | Y | U | I | O | P | A13 | PC5 | 5 | |
1 | PC1 | A9 | A | S | D | F | G | H | J | K | L | CR | A14 | PC6 | 6 | |
0 | PC0 | A8 | CS | Z | X | C | V | B | N | M | SS | SP | A15 | PC7 | 7 | |
STM | PE0 | PE1 | PE2 | PE3 | PE4 | PE4 | PE3 | PE2 | PE1 | PE0 |
Zusammengefasst:
- PC0 - PC7: Zeile 0 - 7
- PE0 - PE4: Spalte 0 - 4
Wenn jemand noch eine Original-ZX-Tastatur hat, dem hilft folgende Belegung der Anschlussfolie weiter:
Spalten Zeilen --- --- --- --- --- --- --- --- --- --- --- --- --- Z80 D0 D1 D2 D3 D4 A11 A10 A9 A12 A13 A8 A14 A15 STM32F407 PE0 PE1 PE2 PE3 PE4 PC3 PC2 PC1 PC4 PC5 PC0 PC6 PC7
Dabei ist zu beachten, dass die leitende Flächen auf den Folien unterschiedlich aufgebracht sind - einmal oben (Spalten) und einmal unten (Zeilen).
Desweiteren ist eine weitere Spalte 5 (an PE5) vorgesehen, an die man bis zu 8 weitere Tasten für Spezialfunktionen anschließen kann. Bisher wird nur eine zusätzliche Taste unterstützt, nämlich diejenige, welche PC0 mit PE5 verbindet. Diese dient dazu, in das STECCY-Menü zu gelangen. Die Verwendung der verbleibenden Spezialfunktionen-Tasten ist geplant.
Folgende Tasten funktionieren im STECCY-Menü:
CS 6 - Pfeil runter: Nächster Menüpunkt CS 7 - Pfeil hoch: Vorheriger Menüpunkt CS 0 - Backspace: Löschen rückwärts A - Z - A - Z: Buchstaben 0 - 9 - 0 - 9: Zahlen SS J - SymShift J: Minus ENTER - ENTER: Menüpunkt bestätigen CS SPACE - BREAK: Menüpunkt verlassen
ZX-Tastatur als PS/2
Die Variante, die ZX-Spectrum-Tastatur als Matrix über 13 Kabel anzuschließen, hat einen gravierenden Nachteil: Das Display nebst Blackboard kann nicht weit abgesetzt von der ZX-Tastatur angebracht werden. Aus diesem Grund gibt es eine Alternative dazu: Die ZX-Spectrum-Tastatur wird zur PS/2-Tastatur umgebaut. Dann kann sie über ein längeres dünnes 4-poliges PS/2-Kabel mit dem BlackBoard verbunden werden. |
Schema:
Hier werden die Zeilen/Spalten wie folgt an den STM32F103 auf einem BluePill-Board angeschlossen:
Spalten Zeilen --- --- --- --- --- --- --- --- --- --- --- --- --- Z80 D0 D1 D2 D3 D4 A11 A10 A9 A12 A13 A8 A14 A15 STM32F103 PB3 PB4 PB5 PB6 PB7 PA3 PA2 PA1 PA4 PA5 PA0 PA6 PA7
Der Pin PB8 dient als zusätzliche Spalte für Erweiterungen. Auch hier kann eine zusätzliche Taste zwischen PB8 und PA3 angebracht werden, um das STECCY-Menü zu starten.
|
Der Umbau der ZX-Tastatur ist auf GitHub zu finden: STECCY-Keyboard
Joystick-Emulation
PC-Tastatur
STECCY kann mittels des rechten Nummernblocks auf der PC-Tastatur digitale Joysticks simulieren.
Folgende Joysticks werden dabei unterstützt:
- Sinclair Joystick 1
- Sinclair Joystick 2
- Kempston Joystick
- Cursor Joystick
Dabei bedeuten die Tasten:
Taste | Funktion |
---|---|
0 | Feuertaste |
1 | unten links |
2 | unten |
3 | unten rechts |
4 | links |
5 | unten, also wie 2! |
6 | rechts |
7 | oben links |
8 | oben |
9 | oben rechts |
Neben der Taste "2" wirkt auch die Taste "5" wie "Joystick-Unten". Grund: Die vier Hauptrichtungen liegen damit näher beeinander und ermöglichen somit bei Jump-And-Run-Games ein schnelleres Spiel.
Wii Nunchuk
Ab der Version V1.5 kann auch ein Wii-Gamepad oder Wii-Nunchuk-Controller als Joystick verwendet werden. Diese sind als Clones für wenige Euro auf eBay erhältlich. Die beiden Wii-Geräte verwenden das I2C-Protokoll. Für die Verbindung mit dem STM32 sind 4 Verbindungen nötig, nämlich:
Am besten schneidet man den Stecker ab und verbindet die Kabelenden direkt mit den Pins auf dem STM32-Board. Welche Farben die Kabel haben, ist hier aufgelistet:
|
Da man in der Regel einen Clone erworben hat, kann man sich auf die Farben nicht verlassen. Besser ist es, den Stecker aufzuschrauben und sich selbst von den Kabelfarben zu überzeugen. Mein Clone hatte die oben angegebene Farbreihenfolge. Alternativ zu der Abschneide-Methode gibt es bei eBay auch Adapter für die Nunchuk-Stecker. Diese können auch für das Wii-Classic-Gamepad verwendet werden.
Der Nunchuk-Controller hat 2 Tasten, nämlich die obere Taste "C" und die untere Taste "Z". Letztere dient als Feuertaste, die Taste "C" als Menütaste, mit der man sowhl das STECCY-Menü betreten als auch wieder verlassen kann. Der Analog-Stick wird als Digital-Joystick abgebildet - nämlich in der jeweils eingestellten Emulation.
Taste | ZX-Spectrum | STECCY-Menü |
---|---|---|
"Z" unten | Feuer | Menüpunkt bestätigen oder Auswahl ändern |
"C" oben | Start Menü | Zurück |
Stick oben | Joystick oben | Menüpunkt nach oben |
Stick unten | Joystick unten | Menüpunkt nach unten |
Stick links | Joystick links | Seite nach oben |
Stick rechts | Joystick rechts | Seite nach unten |
Wii Gamepad Pro
Der Gamepad-Controller hat die gleichen Anschlüsse wie der Nunchuk-Controller, siehe oben. Lediglich die Tastenzuordnungen sind anders, weil der Gamepad-Controller wesentlich mehr Buttons zur Bedienung hat.
|
Speaker
An PC13 des STM32 kann ein aktiver Lautsprecher oder ein kleiner Audio-Verstärker angeschlossen werden. Aktive PC-Lautsprecher funktionieren zum Beispiel sofort. Möchte man etwas kleineres in ein STECCY-Gehäuse integrieren, kann auch nebenstehender Verstärker aufgebaut und ein kleiner Lautsprecher angeschlossen werden, z.B. einer mit 0,25W und 27mm Durchmesser. R9 und R10 sind in tatsächlich ein Poti mit 5k zur Lautstärke-Einstellung. Sauberer wäre noch die Verwendung von 2 zusatzlichen Dioden, damit die BE-Threshold Spannung kompensiert wird und es weniger Verzerrungen gibt. Auf diese Dioden kann jedoch angesichts der minderen Klangqualität, welche auch schon der Original-Spectrum hatte, verzichtet werden. Diskussion dazu siehe: STECCY - ZX-Spectrum-Emulator mit STM32 ff. - nebst verbessertem Schaltbild. |
Spiele
Viele der ZX-Spectrum Spiele sind mittlerweile Public-Domain. Informationen über Copyrights findet man hier: ARCHIVE - COPYRIGHTS AND DISTRIBUTION PERMISSIONS. Im Zweifel gilt: Ist man Eigentümer des Original-Spiels in Form der Compact-Cassette, ist man auf der sicheren Seite.
Überhaupt sind World of Spectrum Classic, World of Spectrum und Spectrum Computing die Anlaufstellen, um sich allgemein über den ZX-Spectrum zu informieren oder auch Programme/Spiele herunterzuladen. Über das Archiv kann auf Text-Adventures, Utilities und über 10.000 Spiele für den ZX-Spectrum zugegriffen werden. Auf Urheber-Rechte sollte unbedingt geachtet werden!
Folgende beliebte Spiele wurden neben vielen anderen erfolgreich unter STECCY getestet und laufen einwandfrei:
- Manic Miner
- Jet Set Willy II
- Bubble Bobble (TAP verwenden!)
- Chuckie Egg
- Pac-Man
- Jetpac
- Space Rider
- Hocace goes Skiing
- Lode Runner
- Booty
- The Hobbit
Die Links verweisen auf die Spiele-Beschreibung im Archiv. Dort unter "Files" befinden sich die TZX- bzw. TAP-Dateien.
Sucht man ein bestimmtes Spiel auf World of Spectrum, verwendet man am besten die Suche im Untermenü "Infoseek". Die Treffer verweisen wiederum auf das Archiv. Im Archiv selbst zu suchen ist wesentlich mühseliger angesichts der Menge der Daten.
Bedienung
Viele Spiele bieten gar keine Hilfe zur Bedienung an - gerade was die zu verwendenden Tasten betrifft.
Bei vielen Jump-and-Run-Spielen sind die Tasten oft:
- o nach links
- p nach rechts
- q nach oben
- a nach unten
- Leertaste: Feuer oder andere Aktion
Bei Manic-Miner und Jet Set Willy sind es
- o nach links
- p nach rechts
- Leertaste Sprung
Bei anderen Spielen (wie z.B. Bubble Bobble) kann man die Tastenbelegung auch auswählen oder selber einstellen. Oder es gibt am Anfang eine Hilfe. Wenn alles nichts hilft, dann muss man ausprobieren.
Wenn die Spiele Joystick-Bedienung anbieten, sollte man einen Joystick-Typ auswählen, der auch in STECCY einstellbar ist.
Dann kann man das Spiel mit den Nummernblocktasten als Joystick-Simulator spielen. 0 ist Feuer, die Tasten 1-9 sind klar. Viele Spiele funktionieren auch klammheimlich mit Kempston- oder Cursor-Joystick. Hier sollte man das einfach mal im Menü umstellen und ausprobieren, ob die Tasten reagieren.
Hier eine Liste der Tasten der oben genannten Spiele in alphabetischer Reihenfolge:
Spiel | Links | Rechts | Oben | Unten | Sprung | Feuer | Joystick Simulation | Bemerkung |
---|---|---|---|---|---|---|---|---|
Bubble Bobble | * | * | * | * | * | * | Sinclair 1, Kempston, Cursor | Kann zu zweit gespielt werden |
Chuckie Egg | 9 * | 0 * | 2 * | w * | z(y) m * | * | Cursor + '4' = Sprung | Läuft nicht mit 48u.rom |
Jet Set Willy | o | p | -- | -- | SPACE | -- | Kempston, Feuer = Sprung | |
Jetpac | z-m | z-m | q-p | -- | -- | a-l | Kempston | Reihe z-m abwechselnd links/rechts |
Manic Miner | o | p | -- | -- | SPACE | -- | Kempston, Feuer = Sprung | |
Pac-Man | o | p | q | a | -- | -- | Sinclair2, Kempston, Cursor | H = Hold, Kempston über Menü |
Space Rider | * | * | * | * | * | * | Sinclair 1 |
* = einstellbar über das Spiel.
Speziell auf dem STM32 kann es beim Spiel "Bubble Bobble" vorkommen, dass in der 48K Emulation die Seifenblasen auf dem Screen nicht korrekt dargestellt werden. In diesem Fall sollte "Bubble Bobble" in der 128K Emulation gestartet werden. Hier tritt das Problem nicht auf.
STECCY Menü
Das STECCY-Menü kann man mit der TAB-Taste auf der PC-Tastatur aktivieren. Mit der ESC-Taste kann das Menü wieder verlassen werden. Folgende Tasten werden verwendet:
Es stehen folgende Menüpunkte zur Verfügung: Joystick Hier kann man einen Joystick auswählen, der über die Nummernfeld-Tastatur simuliert werden soll. Möglich sind:
Zwischen diesen Alternativen kann man mit der Leerzeichen-Taste ("SPACE") wechseln, um den richtigen Joystick-Typen auszuwählen. |
In der QT-Version existiert der Menü-Eintrag "Joystick" nicht. Hier kann man einfach mit der TAB-Taste zwischen den Joystick-Simulationen wechseln. Die aktuelle Simulation wird unterhalb des Spectrum-Displays angezeigt.
PAUSE
Dieser Menüeintrag existiert nur in der QT-Version. Ein Mausklick lässt den Emulator pausieren. Ein weiterer Klick führt dann die Emulation fort.
In der STM32-Version kann man die Emulation mit der PAUSE-Taste einfrieren. Ein weiterer Druck auf PAUSE führt die Emulation fort.
RESET
RESET emuliert einen Hardware-Reset des ZX-Spectrums. Nach einer kurzen Zeit sollte die Copyright-Meldung des Sinclair-ROMs erscheinen.
ROM
Hier kann das ROM ausgewählt werden, welches beim Start benutzt werden soll. Dafür werden sämtliche Dateien auf der SD-Karte angezeigt, die mit der Dateiendung ".ROM" versehen sind.
Der Name der Standard-ROM-Datei lautet "128.rom". Möchte man den Original-Spectrum 48K emulieren, kann man hier "48.rom" laden. Eine Alternative zum 48K-ROM wäre "gw03.rom", siehe oben.
Empfehlung:
ROM=128.rom
Autostart
Hier kann eingestellt werden, ob ein BASIC-Programm nach einem LOAD-Befehl direkt gestartet werden soll, damit es weitere Daten nachladen kann. Das ist der Standard-Fall beim ZX-Spectrum, wenn das Basic-Programm entsprechend gespeichert wurde. Daher ist hier auch die Standard-Einstellung "YES".
In der ST-Version wird diese Einstellung mit der Leertaste umgestellt, in der QT-Version mit Mausklick auf das Häkchen.
LOAD
Dieser Menüpunkt entfällt ab Version 1.5.2. Stattdessen wird das Datei-Auswahl-Menü für TAPE-Dateien nun automatisch geladen, wenn man den ZX-Spectrum anweist, eine Datei vom Band zu laden - entweder durch den ZX Spectrum TAPE LOADER oder über die Anweisung LOAD "".
Es wird dann Inhaltsverzeichnis der Dateien auf der SD-Karte angezeigt. Hier kann man nun durch Auswahl der TAPE-Datei diese in den virtuellen Cassetten-Recorder laden.
Auswählbar sind TAP-, TZX- oder Z80-Dateien. Bei Snapshots (Endung .Z80) wird die Datei sofort geladen und der ZX-Spectrum in den im Snapshot gespeicherten Zustand gebracht.
Die Tasten-Kombination zum Laden eines Programms für den ZX Spectrum 48K ist
LOAD "" (Tasten: j STRG-P STRG-P RETURN)
Wenn die Einstellung AUTOSTART auf "YES" steht, wird anschließend das Programm automatisch gestartet.
POKE
Liegt für die geladene TZX- oder TAP-Datei auch eine gleichnamige POK-Datei vor, wird dieser Menüpunkt automatisch aktiviert. In diesem Fall kann man Einträge aus dieser POK-Datei auswählen, um für bestimmte Spiele unsterblich zu werden, in neue Levels zu springen usw.
Eine Unmenge von POK-Dateien für alle erdenklichen Spiele findet man auf https://github.com/ladyeklipse/all-tipshop-pokes
SAVE
Hier kann entweder eine bereits vorhandene TAPE-Datei überschrieben oder eine neue Datei auf der SD-Karte angelegt werden. Nach Eingabe des Dateinamens verlässt man das Menü und gibt in den BASIC-Interpreter ein:
SAVE "Beispiel" (Tasten: s STRG-P Beispiel STRG-P RETURN).
Der Spectrum gibt dann die bekannte Meldung "Start tape, then press any key." aus. Nach Bestätigen der Meldung mittels RETURN wird dann das Programm in der TAPE-Datei unter dem Namen "Beispiel" im TZX-Format gespeichert.
Soll das Programm automatisch nach dem Laden ab einer bestimmten Zeile (z.B. Zeile 10) gestartet werden, verwendet man den Befehl:
SAVE "Beispiel" LINE 10 (Tasten: überlasse ich dem geneigten Leser ;-) ).
Man kann nun in der zuivor ausgewählten Tape-Datei auch weitere Daten speichern, die dann angehängt werden, z.B. einen Code-Bereich aus dem RAM. Das Kommando dafür lautet zum Beispiel:
SAVE name CODE 32768,8192 (Tasten s name CapsShift-SymbolShift i)
Möchte man die Tape-Datei schließen, wählt man im STECCY-Menü den Punkt "Stop Record" aus. Die "Aufnahme" wird dann gestoppt.
SNAPSHOT
Hier wird der aktuelle Zustand des ZX-Spectrums gespeichert. Nach Eingabe des Dateinamens werden RAM-Inhalt und alle Z80-Register in der gewählten Snapshot-Datei abgelegt. Diese kann man später wieder laden, um zum Beispiel ein begonnenes Spiel weiterzuspielen.
INI-Datei
In der INI-Datei steccy.ini können Voreinstellungen gemacht werden. Für die QT-Version muss die INI-Datei dort liegen, wo sich auch steccy.exe befindet. Für die STM32-Version muss die Datei einfach auf die SD-Karte kopiert werden.
PATH
- Linux- und QT-Version: Hiermit wird der Suchpfad festgelegt, wo die ROM-Datei und die TAPE-Dateien zu finden sind. Standard ist das aktuelle Verzeichnis, wenn weder PATH angegeben wird oder der Eintrag hinter dem Gleichheitszeichen leer ist.
- STM32: Der Eintrag wird ignoriert
Beispiel für QT unter Windows:
PATH=c:\steccy
Beispiel für Raspberry-PI-Console oder X11-Desktop:
PATH=/home/pi/steccy
ROM
Der Name der ROM-Datei, welche beim Start automatisch geladen werden soll. Der Standard ist "48.rom".
Beispiel: ROM=48u.rom
AUTOSTART
gibt an, ob Basic-Programme, die mit Autostart gespeichert wurden, tatsächlich automatisch gestartet werden sollen. Standard ist "yes". Alternative ist "no". Empfohlen wird die Einstellung "yes"
Beispiel: AUTOSTART=yes
AUTOLOAD
Name des TAPE-Datei, die automatisch in den virtuellen Cassettenrecorder geladen wird. Standard ist keine.
Beispiel: AUTOLOAD=manic.tzx
KEYBOARD
Angabe der verwendeten Tastatur.
Mögliche Werte:
KEYBOARD=PS2 KEYBOARD=USB KEYBOARD=ZX
Dabei sind:
- PS2: PS/2-PC-Tastatur
- USB: USB-PC-Tastatur
- ZX: ZX-Spectrum-Matrix-Tastatur
Es können mehrere Tastaturen angegeben werden, indem man die KEYBOARD-Zeile wiederholt, z.B.
KEYBOARD=PS2 KEYBOARD=ZX
In diesem Fall kann man eine PS/2- und eine ZX-Matrix-Tastatur gleichzeitig verwenden. Das kann bei Multi-User-Spielen sinnvoll sein.
Ist kein Wert für KEYBOARD angegeben, ist dies identisch mit der Einstellung:
KEYBOARD=PS2 KEYBOARD=USB
Das heißt: Ohne Angabe sind PS/2- und USB-Tastatur aktiv und können auch gleichzeitig verwendet werden.
ORIENTATION
Orientierung auf dem TFT-Display. Standard ist 0. Nur für STM32. In der QT-Version wird dieser Eintrag ignoriert.
Die möglichen Werte sind:
Mode | Orientierung |
---|---|
0 | Flip None (Standard) |
1 | Flip Vertical |
2 | Flip Horizontal |
3 | Flip Vertical + Horizontal |
Beispiel: ORIENTATION=1
Mit der F1-Taste kann man auch im Betrieb die Orientierung umstellen. Am Ende des Kapitels Display ist erklärt, wie man den richtigen Wert für sein Display herausfindet.
RGB
RGB-Farbreihenfolge auf dem TFT-Display. Die meisten TFTs arbeiten mit der Farbfolge RGB, manche mit der Reihenfolge GRB. Die Standard-Einstellung ist daher RGB=0.
Es gilt:
RGB=0 # Standard-Reihenfolge RGB RGB=1 # Nicht-Standard ist GRB
Diesen Wert sollte man nur umstellen, wenn Falschfarben auf dem TFT erscheinen.
Der Basic-Befehl "BORDER 2" sollten einen roten Bildschirmrand erzeugen. Erscheint der Rand in einer anderen Farbe, sollte man den Wert wechseln. Dies kann man leicht mit der F2-Taste testen. Diese wechselt zwischen den beiden Werten.
Kommentare
Kommentare kann man in der INI-Datei mit "#" oder ";" einleiten.
Beispiel für eine komplette INI-Datei:
# PATH: Default is current directory (only QT and Linux), e.g. PATH=/home/pi/steccy PATH=c:\steccy # ROM: Default is 48.rom ROM=128.rom # Autostart: Default is yes AUTOSTART=yes # Autoload: Default is none AUTOLOAD= # Keyboard: Default is PS2 and USB. Use ZX for ZX-Spectrum matrix keyboard KEYBOARD=PS2 # Orientation: Default is 0 (only STM32) ORIENTATION=1 # RGB Order: Default is 0 (only STM32) RGB=0
STM32-Hardware-Erweiterungen
Board-LEDs
Die beiden LEDs auf dem BlackBoard können vom emulierten ZX-Spectrum aus angesteuert werden. Sie sind über den I/O-Port 65407 anspechbar. Dabei wird LED2 über das Bit0, LED3 über das Bit1 gesteuert. Da beide LEDs active low angeschlossen sind, gilt folgendes Schema:
Bit 1 | Bit 0 | D3 | D2 |
---|---|---|---|
0 | 0 | an | an |
0 | 1 | an | aus |
1 | 0 | aus | an |
1 | 1 | aus | aus |
Dabei ergeben sich folgende BASIC-Kommandos, um die LEDs anzusprechen:
OUT 65407,0 # 00: beide LEDs an OUT 65407,1 # 01: D3 an, D2 aus OUT 65407,2 # 10: D3 aus, D2 an OUT 65407,3 # 11: beide LEDs aus
Oder auch in binärer Schreibweise:
OUT 65407,BIN 00 # beide LEDs an OUT 65407,BIN 01 # D3 an, D2 aus OUT 65407,BIN 10 # D3 aus, D2 an OUT 65407,BIN 11 # beide LEDs aus
Man kann den Status der LEDs auch wieder einlesen mit
IN 4223
also zum Beispiel:
PRINT IN 4223
STM32-UART
Die ROM-Datei 48u.rom ist eine Erweiterung des originalen Sinclair-ROMs. Hierbei ist neben den Standard-Streams #0 bis #3 für Tastatur, Screen und ZX-Printer noch ein weiterer Stream #4 aktiviert, nämlich ein UART-Channel "U".
Damit kann vom ZX-Spectrum-Basic direkt der STM32-UART2 angesprochen werden.
Der Basic-Befehl
PRINT #4;"Hello, here is STECCY"
führt zur Ausgabe des Strings auf dem UART2 mit 115200 Bd. Dabei wird noch ein CR NL angefügt. Möchte man die Zeilenschaltung vermeiden, muss noch ein Semikolon angefügt werden:
PRINT #4;"Hello, here is STECCY";
Kommas zwischen den Strings führen zu einer Ausgabe eines TABs auf dem UART:
PRINT #4;"Hello","here is STECCY";
Ebenso können über den UART auch Zeichenketten empfangen werden. Diese müssen mit CR (Carriabe Return 0x0D) abgeschlossen werden. Dies geht mit dem Basic-Befehl
INPUT #4;a$
Die empfangene Zeichenkette wird dann in a$ gespeichert.
Schließt man zum Beispiel einen USB-UART-Wandler an UART2 an und startet anschließend auf dem PC PuTTY, dann können sich PC-User und STECCY-User unterhalten.
Der BASIC-Befehl
PRINT #4;"Hallo"
führt dann zu der Ausgabe von "Hallo" im PuTTY.
Umgekehrt liest
INPUT #4;a$
eine Eingabe des PC-Users ein. Achtung: Im PuTTY ist standardmäßig kein lokales Echo eingeschaltet. Hier muss man dann "blind" tippen.
Man kann Aus- und Eingabe auch kombinieren.
Der BASIC-Befehl
INPUT #4;"Huhu!";a$
sendet "Huhu!" und erwartet dann eine Antwort von der Gegenseite.
I2C
An die I2C-Schnittstelle I2C1 des STM32 können I2C-Bausteine wie PCF8574-Portexpander, LM75-Temperatursensoren, PCF8591-AD/DA-Converter und andere angeschlossen werden. Anschlüsse:
|
Falls man hier nicht bereits fertige Module wie zum Beispiel das nebenstehende verwendet, welches die notwendigen Pull-Up-Widerstände bereits vorgesehen haben, sollten SCL und SDA jeweils über einen Pullup-Widerstand an 5V bzw. 3V angeschlossen werden - je nach gewünschter Betriebsspannung und Pegel für die I2C-Module. Dabei können für einige der I2C-Bausteine über Adress-Jumper die I2C-Adresse angepasst werden, um Konflikte zu vermeiden.
Die I2C-Bausteine sind dann über Z80-IN- bzw OUT-Befehle angesprochen werden. Dabei gilt folgendes Schema:
Z80 Port | 7-Bit I2C Adresse |
---|---|
0bbb bbbb 01111 1111 | 0bbb bbbb |
Konkrete Beispiele:
Port Hex | Port Dez | Port Bin | Typ | A2 A1 A0 | 7-Bit I2C Adresse |
Bemerkungen |
---|---|---|---|---|---|---|
20 7F | 8139 | 0010 0000 0111 1111 | PCF8574 | 0 0 0 | 0x20 | Alle Jumper auf 0 |
21 7F | 8575 | 0010 0001 0111 1111 | PCF8574 | 0 0 1 | 0x21 | A0-Jumper auf 1 |
38 7F | 14463 | 0010 0000 0111 1111 | PCF8574A | 0 0 0 | 0x38 | Alle Jumper auf 0 |
48 7F | 18559 | 0010 0000 0111 1111 | LM75 | 0 0 0 | 0x48 | Alle Jumper auf 0 |
I2C-Port-Expander
Die Pins der PCF8574-Port-Expander können sowohl für Input als auch für Output verwendet werden, da sie Open-Drain-Ausgänge besitzen. Siehe dazu auch Port-Expander_PCF8574 für weitere Erklärungen.
Beispiel für PCF8574A mit Jumper A2=1 A1=1 A0=1:
I2C Adresse ist dann: 0x3F (Basis-Adresse 0x38 + 0x07 = 0x3F).
Z80-Port ist dann: 0x3F7F, also 16255.
Aktivieren der oberen 4 Bits für Ausgabe:
BASIC-Befehl:
OUT 16255,BIN 00001111
oder
OUT 16255,15
Assembler:
LD BC,16255 ; Port-Adresse LD A,15 ; Wert OUT (C),A ; Ausgabe
Einlesen des PCF8574A-Ports:
BASIC-Befehl
LET a = IN 16255
Assembler:
LD BC,16255 ; Port-Adresse IN A,(C) ; Lesen
Turbo-Modus
Der Turbo-Modus kann sowohl mit der Taste F3 oder auch per ZX Spectrum Software eingeschaltet werden.
Dabei läuft die ZX Spectrum ungebremst, also unter voller CPU-Auslastung. Desweiteren gibt es die Möglichkeit, spezielle "ROM-HOOKS" einzuschalten. In diesem Falle werden spezielle ROM-Routinen durch native CPU-Befehle des STM32 oder PCs umgesetzt. Zur Zeit werden bei Einschalten der ROM-Hooks die BASIC Befehle "PLOT" und "DRAW" beschleunigt.
Die OUT-Adresse zum Aktivieren der ROM-Hooks ist 65151.
Durch folgende OUT-Befehle können die einzelnen TURBO-Modi geschaltet werden:
Wert | Funktion |
---|---|
254 | Turbo-Modus ein |
253 | ROM-Hooks ein |
252 | Turbo-Modus + ROM-Hooks ein |
0 | Alle Optmierungen ein |
255 | Alle Optmierungen aus |
Assembler
Wer ein wenig mit Z80-Assembler herumspielen möchte, dem sei der Online-Assembler https://www.asm80.com/onepage/asmz80.html empfohlen.
Hier kann man Z80-Assembler-Quelltexte direkt übersetzen lassen und das Compilat als TAP-Datei herunterladen. Anschließend kann man das Compilat direkt in STECCY laden und ausprobieren.
Beispiel Assembler-Datei:
CHAN_OPEN equ 5633 ; open channel routine in ROM PRINT equ 8252 ; print routine in ROM
org 32768 ; program start at 32768 ld a, 2 ; stream number call CHAN_OPEN ; open channel ld de, text ; pointer to text ld bc, textend-text ; length of text jp PRINT ; jump to PRINT in ROM text defb 'Hello, this is STECCY!' ; output string defb 13 ; carriage return textend equ $
Dieses Programm gibt "Hello, this is STECCY!" auf dem ZX-Spectrum-Screen aus.
Vorgehen:
- https://www.asm80.com/onepage/asmz80.html aufrufen
- Assember-Quelltext in Textbereich kopieren
- Button "ASSEMBLE and make .TAP" anklicken
- Compilat herunterladen und speichern, z.B. unter hello.tap
- In STECCY eingeben:
CLEAR 32000 LOAD "" CODE RANDOMIZE USR 32768
Bei der Abfrage der TAPE-Datei hello.tap auswählen.
Anschließend sollte die gewünschte Meldung auf dem Display erscheinen. Wenn man die Meldung jedoch über den UART2 des STM32 ausgeben möchte, ändert man die Zeile
ld a, 2
in
ld a, 4
um den Stream #4 zu verwenden. Hierfür ist jedoch das ROM 48u.rom notwendig, siehe ROM.
Das Programm entspricht dem BASIC-Befehl
PRINT "Hello, this is STECCY!"
bzw.
PRINT #4;"Hello, this is STECCY!"
STECCY unter Linux
STECCY läuft auch im Linux-Desktop (X11) oder Framebuffer einer Linux-Console, zum Beispiel auf einem Raspberry PI. Installationsanleitung: Anmeldung als normaler User, z.B. als User "pi". Folgende Befehle in der Console eingeben: cd sudo apt-get install git-core mkdir src cd src git clone https://github.com/ukw100/STECCY.git cd STECCY/steccy-lx cp steccy.ini $HOME/.steccy.ini |
Programm 'steccy' für Linux-Console erstellen:
Sicherstellen, dass Entwicklungs-Umgebung installiert ist:
sudo apt-get install build-essential
Anschließend Programm 'steccy' erstellen und installieren:
make steccy sudo make steccy-install
Programm 'xsteccy' für Linux-Desktop (X11): Sicherstellen, dass libx11-dev installiert ist: sudo apt-get install libx11-dev Anschließend Programm 'xsteccy' erstellen und installieren: make xsteccy sudo make xsteccy-install STECCY-Desktop Icon installieren (LXDE-Desktop auf Raspberry PI): cp steccy.desktop $HOME/Desktop cp steccy.desktop $HOME/.local/share/applications/ |
Anschließend sollte das STECCY-ICON sowohl auf dem Desktop als auch im Start-Menü unter "Games" erscheinen.
Damit ist die Installation abgeschlossen. Eventuell sollte man noch die Datei $HOME/.steccy.ini mit dem Editor anpassen. Dort eingetragen ist der Suchpfad, wo sich die ROM- und TAPE-Dateien befinden.
PATH=/home/pi/steccy
Dieses Verzeichnis legen wir jetzt noch im Home-Verzeichnis an:
cd mkdir steccy
und laden dann die ROM-Dateien herunter und legen sie in dieses Verzeichnis. Auch Tape-Dateien für Spiele etc. sollten ausschließlich in diesem Verzeichnis abgelegt werden.
Möchte man ein abweichendes Verzeichnis für die ROM- und TAPE-Dateien verwenden, muss man die Datei $HOME/.steccy.ini mit dem Editor anpassen.
Start von STECCY als Consolen-Programm
STECCY für Linux läuft nicht nur auf dem Desktop, sondern auch in einer Framebuffer-Console. Wer einen Desktop installiert hat und trotzdem STECCY als Consolen-Programm starten möchte, muss zunächst auf die Text-Console wechseln mit STRG-F1 (Console #1) oder STRG-F2 (Console #2).
Zum Start gibt man dann ein:
steccy
Mit der Taste F12 kann STECCY wieder beendet werden. Mit F7 gelangt man dann wieder zurück zum Desktop. Das geht aber nur, wenn vorher STECCY beendet wurde!
Normalerweise wird die momentane Console-Auflösung beibehalten. Wenn man STECCY im Vollbild laufen lassen möchte, gibt man ein:
steccy -g 800x480
für einen 16:9 Monitor. Auf einem 4:3 Monitor benutzt man:
steccy -g 800x600
Man kann auch noch mit anderen Auflösungen herumspielen. Man sollte jedoch die Breite von 800 nicht unterschreiten.
Start von STECCY auf dem Desktop
Am einfachsten erfolgt der Start über das STECCY-Desktop-Icon oder über Start-Menü -> Games -> STECCY.
Es geht aber auch über die Kommandozeile. Hier gibt man ein:
xsteccy &
In diesem Fall startet öffnet xsteccy ein Fenster mit der Größe 800x480. Auch hier kann man mit der Option '-g' andere Fenstergrößen wählen. Hier vergrößert sich aber lediglich das Fenster, nicht der emulierte ZX-Spectrum-Screen.
Auch hier wird STECCY mit der Taste F12 beendet.
Weitere Entwicklungen
Zur Zeit sind keine weiteren Erweiterungen geplant.
Download
STECCY ist auf GitHub umgezogen. Hier die Links:
Version | 1.5.2 vom 25.04.2021 |
GitHub Repository | STECCY auf GitHub |
GitHub Release | STECCY V1.5.2 |
Hex-Datei für STM32F407VET6 und SSD1963 | steccy.hex |
Hex-Datei für STM32F407VET6 und ILI9341 | steccy-ili9341.hex |
ROM 128K | 128.rom |
ROM 48K | 48.rom |
ROM 48K | 48u.rom |
Der QT-Source befindet sich im Unterverzeichnis steccy-qt, der Linux-Source im Unterverzeichnis steccy-lx. Anleitung siehe STECCY unter Linux
Zur Inbetriebnahme reicht das Flashen der HEX-Datei auf dem STM32F407VET6.
Wer das Programm selbst übersetzen möchte, kann dafür die IDE EmBitz verwenden, siehe auch https://www.embitz.org/ .
Im EmBitz sind 4 Target-Varianten konfiguriert:
- ILI9341-Debug
- ILI9341-Release
- SSD1963-Debug
- SSD1963-Release
Hier sollte für das SSD1963-Display dann SSD1963-Release ausgewählt werden. Verwendet man das ILI9341-Display, wählt man ILI9341-Release aus.
Alternativ zu EmBitz muss man ein entsprechendes Projekt bzw. Makefile selbst erstellen. Hierfür sollten neben der Optmierung (-O2 oder -Os) und diversen Warning-Levels folgende Optionen für den Compiler gesetzt werden:
-DARM_MATH_CM4 -D__FPU_USED -DSTM32F407VE -DSTM32F4XX -DUSE_STDPERIPH_DRIVER -DHSE_VALUE=8000000 -fno-strict-aliasing -DSSD1963
Möchte man die Programmfassung für ILI9341-Displays erstellen, ersetzt man die Option -DSSD1963 durch -DILI9341.
Thread im Forum
Der zu diesem Projekt gehörende Forums-Thread ist STECCY - ZX-Spectrum-Emulator mit STM32
Historie
Version 1.5.1 - 11.04.2021
- Unterstützung von zu PS/2-Tastaturen umgebauten ZX-Matrix-Tastaturen
- Anzeige 48K oder 128K Modus
Version 1.5.0 - 21.03.2021
- Weitere Optimierungen der ZX-Matrix-Tastatur-Routinen
- Unterstützung Wii Nunchuk als Joystick
- Unterstützung Wii Gamepad als Joystick
- Emulation eines ZX Spectrum 128K
Version 1.4.5 - 17.01.2021
- ZX-Matrix-Tastatur-Routinen komplett überarbeitet
- Modularisierung und Aufteilung von z80.c in Emulator und I/O-Module
Version 1.4.4 - 02.10.2020
- Neu: Speaker Support für STM32F4-Variante
Version 1.4.3 - 29.09.2020
- Bugfix: ZX-Tastatur inaktiv
Version 1.4.2 - 15.04.2020
- STECCY für Linux-Desktop
Version 1.4.1 - 12.04.2020
- STECCY für Linux-Frambuffer
Version 1.4.0 - 07.04.2020
- Unterstützung von ILI9341-Displays mit RGB-Ansteuerung
Version 1.3.4 - 06.04.2020
- Bug in ZX-Spectrum-Display-Anzeige beseitigt
Version 1.3.3 - 18.03.2020
- Unterstützung der Original ZX-Spectrum-Tastatur-Matrix
- Weitere 8 Taster in Verbindung mit ZX-Spectrum-Tastatur für Menü etc.
- Erweiterung der TZX-Tape-Unterstützung um den Archiv-Block
Version 1.3.2 - 03.03.2020
- Optimierungen im 50Hz Display-Update
- Optimierungen im USB-Tastatur-Handling
Version 1.3.1 - 03.03.2020
- Kleinere Überarbeitungen des USB-Treibers
- Vereinheitlichung der QT-Version
Version 1.3.0 - 02.03.2020
- Unterstützung einer USB-Tastatur
Version 1.2.1 - 27.02.2020
- Verallgemeinerung der I2C-Adressierung
Version 1.2 - 26.02.2020
- Einstellung der TFT-Orientierung und RGB-Farbfolge
- Ansteuerung von Port-Expandern PCF8574
Version 1.1 - 22.02.2020
- Ansteuerung der Board-LEDs
- Ein-/Ausgabe über UART2
Version 1.0 - 19.20.2020
- Veröffentlichung
Danksagung
Vielen Dank an ChaN für FATFS. Vielen Dank auch an die Forumsmitglieder für ihre Anregungen!
Viel Spaß mit STECCY! :-)