Projekt Hardware Bedienung Kompatibilität Erweiterungen |
AX82: Ein ZX Spectrum Emulator auf AVR Basis
V0.35 (c) 2012-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. 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) oder VGA-Monitore verwendet werden.
3 KonzeptKernstück des Ganzen ist ein ATmega 644(P) dazu kommen noch ein CPLD als Adresslatch und Video-Shifter sowie 2 mal 32Kx8 SRAM, die restliche Hardware besteht aus passiven Bauelementen und Steckverbindern. Das Videosignal wird im Timing-Zusammenspiel zwischen MCU, CPLD und RAM erzeugt. Da während der Bildschirmausgabe keine Z80-Emulation stattfindet, ist eine Soundausgabe von starken Nebengeräuschen geprägt. Aus diesem Grunde habe ich nach einigen Versuchen letztendlich darauf verzichtet.Das Videotiming erzeugen Timer 1 und Timer 2, Timer 0 generiert den Pixeltakt. Die PS2-Tastatur wird über den USART0 des ATMega angeschlossen, an die SPI-Schnittstelle kann eine SD-Karte als Datenspeicher angeschlossen werden. 3.1 Systemvoraussetzung Host für das Assemblieren des AVR QuellcodesDas Programm wurde unter Linux mit dem AVRA Assembler übersetzt. Eventuell muß der Pfad zu den Include-Dateien (bei mir /usr/local/include/avr) angepasst werden. Die Hex-Files sollte sich aber auch unter anderen Betriebssystemen brennen lassen.3.2 Systemvoraussetzung Host für das Übersetzen des CPLD QuellcodesDer VHDL-Quellcode wurde unter Linux mit dem XILINX WebPack und meinem Tool vhdl2cpld übersetzt. Das dazugehörige Kommando wärevhdl2cpld -speed -noburn Wenn das Ergebnis gleich ind CPLD programmiert werden soll, muss das -noburn weggelassen werden. Das JEDEC-File sollte sich aber auch unter anderen Betriebssystemen brennen lassen. 3.3 Systemvoraussetzung Host für das Übersetzen der Tool-SourcenNormalerweise reicht ein installierter GCC auf einem Linux-system aus.3.4 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 das Image notwendig. Sinnvollerweise sollten sie nach /usr/local/bin kopiert werden.3.5 Das AX82 Dateisystem auf SD-KarteFür die aktuelle Version habe ich das Dateisystem an das des AX81b angepasst. Da das FAT Dateisystem aber teilweise patentbehaftet ist, plane ich für zukünftige Versionen und Projekte ein eigenes Dateisystem mit entsprechendem Partitionstyp, welches sich auch leichter auf Flash-bausteine übertragen lassen soll.3.5.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 einer Image-Datei im Hauptverzeichnis, die Größe kann bei der Installation festgelegt werden. 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 48 KBytes. Es werden grundsätzlich Snapshosts gespeichert. Im Headerblock stehen der Programmname und danach 2 Bytes Dateilänge. Ab Byte 256 liegen die für den Snapshot relevanten Daten (Registerinhalte etc.). Der Übersichtlichkeit halber sind je 32 Dateien zu (rein logisch) einem Tape zusammengefasst, von denen es maximal 256 Stück geben kann. Rein rechnerisch können so maximal 8192 Programme auf einer SD-Karte abgelegt werden und belegen dort ca.400 MBytes. Es werden SD, SDHC und MMC-Karten (nicht getestet) unterstützt. Zusätzlich gibt es einen Unterordner in dem sich weitere Unterordner entsprechend der Anzahl der Tapes befinden. Über diese Ordner erfolgt der "Datenaustausch" mit PC-Systemen. 3.5.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 ax82-fsinstall.pl 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, werden 16 Tapes erzeugt. ax82-fsinstall.pl 10 erzeugt z.B.10 Tapes. Für den Parameter sind Werte zwischen 1 und 255 zulässig, 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.5.3 Dateien auf SD-Karte schreibenDazu dient das Programm ax82-write.pl aus dem "tool' Verzeichnis. 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). Es werden ur Snapshots (Endung .z80 / .Z80) akzeptiert.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 ax82-write.pl einzugeben. 3.5.4 Dateien von SD-Karte lesenEin Zurücklesen von Programmen aus dem Image ist zur Zeit nicht implementiert.3.5.5 Nutzer die damit nicht zurechtkommenkönnen sich das vorbereitete Image herunterladen und in das Wurzelverzeichnis der ersten FAT16-Partition auf der SD-Karte kopieren.4 Was noch fehltDas Projekt ist nur bedingt vollständig. Neben sicher fälligen Bugfixes werden auch Teile der Funktionalität und der Dokumentation erst im Laufe der Zeit fertig werden. Die folgende Liste stellt keine verbindliche Aufstellung dar, vieles hängt auch vom notwendigen Zeitaufwand und verfügbaren Zeitrahmen ab.
5 Changelog10.8.2014 Version 0.35
created with latex2web.pl v0.63 © 2006-2013 Joerg Wolfram |