Projekt Hardware Bedienung Kompatibilität Erweiterungen Programme |
AX81b: Ein ZX81++ Emulator im ATMega1284P
V1.38 (c) 2011-2014 Jörg Wolfram 1 RechtlichesDie Programme unterliegen der GPL (GNU General Public Licence) Version 3 oder höher, jede Nutzung der Software/Informationen nonkonform zur GPL oder ausserhalb des Geltungsbereiches der GPL ist untersagt!Die Veröffentlichung dieses Projekts erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, auch ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Das Projekt wurde unter Linux entwickelt, eine Kompatibilität zu anderen Betriebsystemen ist nicht garantiert. Ebenso beziehen sich die Anleitungen in dieser Dokumentation auf Linux. Alle im Text genannten Marken sind Eigentum des entsprechenden Inhabers. 2 FeaturesAls Eingabegerät dient eine normale PS2-Computertastatur, als Ausgabegeräte können Fernsehgeräte mit Scart- oder BAS-Eingang (S/W), VGA-Monitore oder auch grafische LCDs (320x240, ohne Controller) verwendet werden.
3 KonzeptKernstück des Ganzen ist ein ATmega 1284P, die restliche Hardware besteht im Wesentlichen aus passiven Bauelementen und Steckverbindern. Das Videosignal wird intern über USART1 erzeugt, der (optionale) LCD Anschluss erfolgt über PORT A. Alternativ stehen bis zu 16 IO-Leitungen zur Verfügung. Die PS2-Tastatur wird über den USART0 des ATMega angeschlossen, an die SPI-Schnittstelle kann eine SD-Karte als Datenspeicher angeschlossen werden. Über Config-Dateien lässt sich das System (in Grenzen) an andere Hardwarekonfigurationen anpassen.3.1 Systemvoraussetzung Host für das AssemblierenDas Programm wurde unter Linux mit dem AVRA Assembler übersetzt. Eventuell muß der Pfad zu den Include-Dateien (bei mir /usr/local/include/avr) angepasst und eine der Zielhardware entsprechenede config.inc im Hauptverzeichnis erstellt werden. Die Hex-Files sollte sich aber auch unter anderen Betriebssystemen brennen lassen.3.2 Systemvoraussetzung Host für das Übersetzen der Tool-SourcenNormalerweise reicht ein installierter GCC und das Starten des compile.sh Scripts im Source-Ordner aus.3.3 Tools zur Verwaltung der ImagesDie im tool-Verzeichnis des Binärpaketes befindlichen Programme sind zum Erstellen des Dateisystems sowie zum Lesen und Schreiben von und auf die Images notwendig. Sinnvollerweise sollten sie nach /usr/local/bin kopiert werden. Alternativ befinden sich im package Verzeichnis ein rpm- und ein deb-Paket, über die sich die Programme ebenfalls installieren lassen.3.4 Das AX81 Dateisystem auf SD-KarteZumächt ein Hinweis. Die Image-Dateien und Transfer-Programme der alten Versionen (<V1.0) sind NICHT kompatibel mit der neuen Version (V1.24 und aufwärts). Grund ist vor allem die variable Länge der Images und eine geänderte Methode zu Lokalisierung derselben auf dem Medium.3.4.1 Datenformat auf der SD-KarteFür das Dateisystem ist zwingend mindestens eine FAT16 Partition auf dem Mediuum notwendig, Medien ohne Partitionstabelle oder fehlender FAT16 Partition werden nicht unterstützt.Die Programme liegen in in jeweils einer Image-Datei im Hauptverzeichnis, die Größe kann bei der Installation festgelegt werden. Für jeden Rechnertyp, der emuliert werden kann (ZX81, ZX80, Jupiter ACE und ZX Spectrum) existiert ein eigenes Image. Jedes Image hat einen 512 Bytes großen Header-Sektor, in dem z.B. die Anzahl der Tapes vermerkt ist. Danach folgen die Programme der einzelnen Tapes lückenlos hintereinander. Ein Programm besteht aus einem Header-Block (512 Bytes) und dem Datenblock von 16 KBytes. Im Headerblock stehen der Programmname (10 Zeichen im ZX81 Zeichensatz) und danach 2 Bytes Dateilänge (bei ZX80 / ZX81). Beim Jupiter ACE und ZX Spectrum stehen ab Byte 256 die für den Snapshot relevanten Daten (Registerinhalte etc.). Der Übersichtlichkeit halber sind je 32 Dateien zu (rein logisch) einem Tape zusammengefasst. Rein rechnerisch können so maximal 8192 Programme auf einer SD-Karte abgelegt werden und belegen dort ca.132 MBytes. Es werden SD, SDHC und MMC-Karten (nicht getestet) unterstützt. Zusätzlich gibt es je Emulationstyp einen Unterordner in dem sich weitere Unterordner entsprechend der Anzahl der Tapes befinden. Über diese Ordner erfolgt der "Datenaustausch" mit PC-Systemen. 3.4.2 das Dateisystem initialisierenDazu sollte die SD-Karte frisch formatiert sein. Für meine Methode der Vorbereitung einer SD-Karte wird eine Root-Shell benötigt. Ich habe versucht, die folgenden Anweisungen möglichst allgemein zu halten, benutze aber selbst nur OpenSuSE. Erfahrungsberichte oder Anleitungen unter anderen Distributionen werde ich aber gerne mit einarbeiten.Über den Desktop wird ein Terminal geöffnet und anschließend zum User "Root" mit dem Kommando su und nachfolgender Passworteingabe gewechselt. Zunächst hängt man das SD-Karten Laufwerk ein, indem man es über den Desktop öffnet wie wenn man z.B. Daten von dort kopieren will. Danach sucht man nach dem zuletzt eingebundenen Laufwerk, indem man den Befehl cat /etc/mtab in der Root-Shell eingibt. Dort müsste dann als letzter Eintrag etwas so ähnlich wie:
stehen. Wichtig ist in dem Fall das "/dev/mmcblk0", das p1 zeigt nur an, dass es sich um die erste Partition auf dem Medium handelt. Nun sollte das Laufwerk vom Desktop aus wieder ausgeworfen werden, zur Kontrolle kann /etc/mtab nochmals angesehen werden, die entsprechenden Einträge sollten nicht mehr existieren. Der nächste Schritt ist die Erstellung einer passenden Partitionstabelle. Dazu geben wir den Befehl fdisk /dev/mmcblk0 ein, fdisk sollte sich mit
melden. Als Befehl geben wir einfach ein "p" (print partition table) ein. In der nachfolgenden Ausgabe interessiert nur die Partitionstabelle am Ende, die z.B. so aussehen kann
Ist unter den Partitionen mindestens eine mit der ID 6 (FAT16), so können wir die Root-Shell schließen und die vorhandene Partition einfach nutzen. Im dargestellten Fall ist dies nicht so, aber auch nicht weiter kompliziert. Wenn bereits mindestens eine Partition angelegt ist, kann der nächste Schritt übersprungen und einfach der Partitionstyp geändert werden. Wenn sich keine Partition auf dem Medium befindet, muss mindestens eine angelegt werden. Das geschieht dann mit dem Befehl "n", danach wählt man "p" für primäre Partition. Danach werden noch die Partitionsnummer ("1"), Startsektor (nur mi ENTER bestätigen) und Partitionsgröße (z.B. +256M) abgefragt. Mit dem Befehl "t" muss noch der Typ der Partition geändert werden, als Hexcode wird für FAT16 eine "6" eingegeben werden. Freier Speicher auf der Karte lässt sich mit weiteren, nicht für den AX81 genutzten Partitionen füllen. Nun kann mittels des Kommandos "w" die neue Partitionstabelle auf die Karte geschrieben werden, danach beendet sich fdisk automatisch. Als letzter Schritt muß nun die Partition noch formatiert werden. Dazu gibt man mkdosfs -F 16 gefolgt von der zu formatierenden Partition (hier: /dev/mmcblk0p1) ein, im Beispiel wäre das mkdosfs -F 16 /dev/mmcblk0p1 Das "-F 16" sorgt für eine FAT16-Struktur, wenn der Vorgang abgeschlossen ist, sollte die Karte in den AX81 gesteckt und das System gestartet werden. Es sollte nun der Kartentyp und "NO IMAGE FOUND" angezeigt werden. Danach die Karte wieder zurück in den PC, denn es fehlen ja noch die Image-Dateien und Verzeichnisse. Dazu dient das Programm ax81-fsinstall welches einfach im Hauptverzeichnis der Karte gestartet wird. Als Parameter müssen die Anzahl der Tapes für die verschiedenen Emulationen angegeben werden. Wenn das Programm ohne Parameter gestartet wird, wird eine Kurzbeschreibung ausgegeben. ax81-fsinstall 10 10 5 5 erzeugt z.B. je 10 Tapes für ZX81, ZX80 und je 5 Tapes für Jupiter ACE und ZX Spectrum. Für jeden der 4 Parameter sind Werte zwischen 0 und 255 zulässig, wobei beim Wert 0 das betreffende Image nicht angelegt wird. Weiterhin sollte die Summe aller Tapes nicht größer als die Hälfte der Partitionsgröße (im Megabytes) sein, da dann etwa die Hälfte der Partition durch die Image-Dateien belegt wird und der Rest für die zu kopierenden Programme frei bleibt. 3.4.3 Alternative bei ProblemenDa es scheinbar teilweise Probleme mit dem "ax81-fsinstall" Programm gibt, kann auch die Struktur zuerst in einem Verzeichnis auf der festplatte erzeugt und danach auf die frisch formatierte SD-Karte kopiert werden. Außerdem kann es bei manchen SD-Karten hilfreich sein, die Größe der genutzten Partition auf 256MBytes zu begrenzen.3.4.4 Dateien auf SD-Karte schreibenDazu dient das Programm ax81-write aus dem "tool' Verzeichnis. Für die einzelnen Emulationen gibt es nur noch ein Programm, der Betriebsmodus wird über den Verzeichnisname beim Aufruf vorgegeben. Es schreibt alle (maximal 32) im aktuellen Verzeichnis befindlichen Files auf die freien Plätze des dem Unterverzeichnisname entsprechenden Tapes. Vor dem Schreiben wird das Tape formatiert (alle Programme darin gelöscht). Je nach Emulationstyp wird nach entsprechende Dateiendungen gesucht:
Als Vorgehensweise empfehle ich, die zu schreibenden Dateien in das zu wählende TAPExxx Verzeichnis zu kopieren, dann in diesem Verzeichnis ein Terminal zu starten und dort den Befehl ax81-write einzugeben. 3.4.5 Dateien von SD-Karte lesenDazu dient das Programm ax81-read aus dem "tool' Verzeichnis. Es liest alle im (dem Unterverzeichnis entsprechenden) Tape vorhandenen Programme aus. Bestehende Programme werden ohne Nachfrage überschrieben. Auch hier ist es am einfachsten, in das TAPExxx Verzeichnis zu wechseln, hier ein Terminal zu starten und dort den Befehl ax81-read einzugeben. Jupiter ACE und ZX Spectrum Snapshots können derzeit nicht zurückgelesen werden.3.4.6 ROM-Erweiterung von SD-Karte lesenIn der ZX81-Emulation lässt sich der Adressbereich ab 0x2000 (8192-16383) mit einem eigenen ROM-Image belegen. Zunächst ist dort eine Kopie des Original-ROMs abgelegt, diese kann aber mit einer entsprechenden Datei von der SD-Karte geladen werden. Dies muss den Dateinamen AX81-ROM.BIN tragen und sich im gleichen Verzeichnis (Hauptverzeichnis der Partition) wie die Image-Dateien befinden. Ausserdem darf die Datei nicht fragmentiert sein, da die FAT auf der SD-Karte nicht ausgewertet wird. Die Integrität der Datei wird nicht überprüft, es werden einfach 16 Sektoren ab Dateianfang gelesen.Wenn die Datei vorhanden ist UND mit dem ROM-Image im Flash nicht identisch ist, wird nach einer kurzen Pause und der Meldung WRITE ROM IMAGE der Dateiinhalt in das Flash kopiert und danach das System neu gestartet. Wenn der Dateiinhalt identisch mit dem Flash-Bereich oder die Datei nicht vorhanden ist, wird kein Update durchgeführt und das System normal gestartet. 3.4.7 Nutzer anderer Betriebssystemekönnen sich 4 vorbereitete Images herunterladen und in das Wurzelverzeichnis der ersten FAT16-Partition auf der SD-Karte kopieren. Ausserdem sollte sich der Quellcode der Tools nach kleineren Modifikationen auch mit dem MinGW Compiler übersetzen lassen.4 Was noch fehltDas Projekt ist mittlerweile abgeschlossen, d.h. neue Features wird es nicht mehr geben.5 Changelog2.4.2014 Version 1.38
created with latex2web.pl v0.63 © 2006-2013 Joerg Wolfram |