Startseite News   NDR-NKC Geräte Z80 Geräte 68000 Geräte 8088 NKC Emulator Z80 Section Baugruppen ROM's Software 68000 Section Baugruppen ROM's PASCAL/S Software 8088 Section Baugruppen Downloads Bussysteme Stromversorgung Input / Output Grafikkarten Speicherkarten Massenspeicher Weitere Baugruppen Projekte Dokumentation Datenblätter Glossar Portraits Links Impressum |
Grundprogramm 3.0EntwicklungsgrundDas Grundprogramm für den Z80 Prozessor ist für den Anfang recht angenehm und für Einsteiger gut geeignet. Recht schnell stören aber einige Dinge, wie zum Beispiel die umständliche Navigation im Menü. Man kann sich leicht vorstellen, dass mit dem NKC mehr erreicht werden kann.Der Hauptgrund für den Beginn der Entwicklung war also der Wunsch nach einem einseitigen Menü, das einfacher zu bedienen sein sollte. Inzwischen ist das Grundprogramm gut 30 Jahre alt, da wurde es Zeit, mal wieder etwas zu machen. Features
HinweisDas neue Grundprogramm funktioniert zusammen mit dem BASIC ROM und dem GOSI ROM aber leider nicht mit EZASS, weil in diesem ROM verschiedene Adressen des originalen Grundprogramms 2.0 direkt angesprungen werden. Dies betrifft insbesondere die Symbolverwaltung und einige andere Routinen, für die keine Vektoren im Startbereich des GP vorgesehen sind.UpdateInzwischen existiert eine neue erweiterte Version des Grundprogramms, welches auch mit dem EZASS ROM eingesetzt werden kann. Die neue Version kann unter folgendem Link abgerufen werden.
DownloadEinsatz des GrundprogrammsDas GP kann in verschiedenen Szenarien mit dem NDR Z80 Computer eingesetzt werden.Entsprechend des geplanten Einsatzzweckes muss das GP neu übersetzt werden.
Analyse des QuelltextesSchon bei der Beschäftigung mit der Hauptroutine ab dem Label START fiel auf, dass das GP durchgehend nicht optimal codiert ist. Haptsächlich liegt das daran, dass zur Erstellung ein Makroassembler genutzt wurde, der immer nach dem gleichen Schema arbeitet.Bei einigen Konstrukten werden recht eigensinnige und sehr umständliche Codierungen mit Manipulation des Stackpointers verwendet. Die umfangreichen Möglichkeiten des Z80 wurden bei Weitem nicht ausgenutzt. AnfangsproblemeDas GP füllt das EPROM vollständig bis zur Adresse 1FFE aus. An eine Erweiterung ohne gleichzeitige Einsparungen an anderen Stellen war also nicht zu denken. Es sollten aber auch keine essentiellen Funktionen entfernt werden, da die Kompatibilität weitestgehend erhalten bleiben sollte. Es musste also Speicherplatz eingespart werden, ohne die Funktion zu beeinflussen.Um überhaupt erst mal ein wenig Platz für weitere Entwicklungen zu bekommen, bagann ich mit leichten Optimierungen des Quellcodes bevor die Algorithmen näher betrachtet wurden. Duch diese Maßnahmen konnte ich zunächst über 400 Bytes im EPROM freiräumen um mit der Umsetzung der geplanten Maßnahmen zu beginnen. Weitere Optimierungen bin ich erst mal nicht angegangen, da der gewonnene Platz für die Umsetzung des Hauptmenüs locker ausreichen und nach der Umsetzung weiterer Platz frei werden würde. UmsetzungCompilerschalterAm Anfang des Quelltextes sind verschiedene Compilerschalter untergebracht, mit denen man das Verhalten des neuen Grundprogramms beeinflussen kann.optLANG - Wahl der SpracheMenüpunkte und Meldungen können wahlweise in deutsch oder englisch übersetzt werden. Es ist zu beachten, dass die deutschen Texte etwas länger sind.optSAVE - Wahl der SpeicherbaugruppeGestattet das wahlweise Einbinden der Routinen für die Baugruppe CAS oder für IOE mit VDIP1. Es ist möglich, keine der Routinen einzubinden.optJUMP - Zusätzlicher MenüpunktGestattet das Einbinden eines zusätzlichen Menüpunktes für den Rücksprung nach EFLOMON oder für den direkten Start von Floppy.optFLIP - Programmausführung ohne AutoflipGestattet das optionale Abschalten der AutoFlip-Funktion. Dabei entfällt auch die Meldung „F=Flip M=Menue“ nach der Ausführung von Programmen. Der Rücksprung ins Hauptmenü erfolgt mit beliebigem Tastendruck.optIncludeTest - Einbinden von TestroutinenErstellt einen neuen Menüpunkt und bindet vorbereitete Testroutinen ein, welche in einer Include-Datei vorliegt. Eigene Erweiterungen lassen sich so leicht testen.optIncludeOpts - klarschriftliches Einbinden der OptionenFührt die Stellungen der Compilerschalter klarschriftlich am Ende des ROMs auf.Speichern auf USBVor längerer Zeit hatte ich mal ein VDIP1 Modul erstanden, mit dem sich durch einen Mikroprozessor gesteuert recht einfach auf USB Devices zugreifen lässt. Neben Memory-Sticks lassen sich darüber auch Drucker ansteuern und eine Kommunikation mit einem Hostcomputer aufbauen. Das VDIP1 verfügt über zwei USB Schnittstellen und kann mit dem Mikroprozessor wahlweise über eine serielle Schnittstelle, SPI oder über den Datenbus angesteuert werden.Da die CAS Baugruppe bei mir und wohl auch den meisten anderen nicht mehr eingesetzt wird, habe ich mich dazu entschieden auf die CAS Routinen des GP zu verzichten und statt dessen die Unterstützung für VDIP1 einzubauen. Mit einem Compilerschalter kann gesteuert werden, ob die ungeänderten CAS Routinen oder die neuen USB Routinen übersetzt werden sollen. Das VDIP1 ModulIch habe mich nach kurzem Studium der Referenz des VDIP1 Moduls für den Anschluss per SPI (serial Programming Interface) Schnittstelle entschieden, da so nur wenige Signale benötigt werden und die Baugruppe IOE noch für andere Zwecke genutzt werden kann.So die Theorie, in der Praxis war die Verbindung mit dem Modul schwieriger als erwartet. Mein relativ altes Modul hatte noch den Firmwarestand 2.08, der mit Fehlern behaftet war und zunächst keinen meiner Memory Sticks lesen wollte. Mit einer 16 Mbyte großen Partition im FAT Format gelang dann das Aufspielen der aktuellen Firmware VDAP 3.68 ohne den sonst notwendigen Programmer. Hinweise zum FormatEin einfaches Formatieren eines bereits partitionierten Sticks führt nicht immer zum Erfolg. Um einen Stick sicher mit dem VDIP1 Modul nutzen zu können, sollte man die Partition entfernen und neu einrichten. Bei der Formatierung mit FAT32 muss unbedingt auf die Sektorgröße von 512 Byte geachtet werden. Folgende Formate habe ich getestet:Um Laufwerke mit Partitionen über 32 GByte mit FAT32 zu formatieren kann unter Windows zum Beispiel das Zusatzprogramm Fat32Formatter zum Einsatz kommen. Integration ins GrundprogrammBeim Starten des GP wird das USB Modul zunächst nicht initialisiert, da dies den Start besonders bei nicht eingesteckten Speicherstick extrem verlängern würde. Die Initialisierung findet statt, wenn erstmals auf einen Datenträger zugegriffen wird. Beim Aufruf von „speichern USB“, „laden USB“ oder „USB Inhalt“ wird dann „Init USB …“ angezeigt und das Modul zurückgesetzt. Falls kein Speichermedium erkannt wird, werden die Funktionen abgebrochen und zum Hauptmenü zurückgesprungen. Die beiden Routinen RI zum Lesen von CAS und PO zum Scheiben auf CAS haben im USB-Betrieb keine Funktion.BedienungHier gehe ich nur auf die Routinen ein, die gegenüber dem alten Grundprogramm in wichtigen Teilen verändert wurden. Die anderen Routinen erklären sich entweder von selbst oder sind ausreichend an anderer Stelle beschrieben.FLOMON Start / FLOPPY StartFLOMON StartWenn das Grundprogramm mit FLOMON auf der Baugruppe BANKBOOT eingesetzt wird, dann gelangt man hierüber in das FLOMON Menü zurück. Falls das Grundprogramm selbst auf Adresse 0000 übersetzt ist, dann erfolgt ein Neustart des Grundprogramms.FLOPPY StartSpringt zurück nach FLOMON und startet sofort den Bootvorgang von Floppy Disk.Laden von USBDient zum Laden von Daten von einem Datenträger. Es wird immer der komplette Inhalt der Datei geladen und ab der angegebenen Zieladresse abgelegt. Es findet keine Kontrolle gegen das Überschreiben von geschützten Speicherbereichen statt.Eingabe des DateinamensDer eingegebene Dateiname wird automatisch auf das 8.3 Format gebracht. Gültige Eingaben sindTEST.BIN --> TEST.BIN TEST --> TEST HALLO WELT.TXT --> HALLO SEHRLANGERNAME.TXT --> SEHRLANG.ERN Eingabe der ZieladresseAdresse, an welche die Datei geladen werden soll. Die Eingabe kann wie jede andere Adressangabe dezimal, hexadezimal oder als Symbol erfolgen.Speichern auf USBDient zum Speichern eines Bereiches in eine Datei auf dem Datenträger. Bereits vorhandene Dateien werden ohne Rückfrage überschrieben.Eingabe des DateinamensDer eingegebene Dateiname wird automatisch auf das 8.3 Format gebracht.Eingabe der StartadresseAnfang des zu speichernden Bereiches. Die Eingabe kann wie jede andere Adressangabe dezimal, hexadezimal oder als Symbol erfolgen.Eingabe der DateilängeIm Gegensatz zu anderen Routinen wird hier nicht die Endadresse angegeben sondern die Größe des zu speichernden Bereiches. Die Eingabe kann ebenfalls dezimal, hexadezimal oder als Symbol erfolgen.USB InhaltsverzeichnisListet alle Dateien und Ordner im Wurzelverzeichnis des eingesteckten Datenträgers auf. Unterverzeichnisse werden zwar angezeigt aber vom GP nicht unterstützt. Die Anzeige erfolgt in 3 Spalten zu 16 Zeilen ohne Sortierung. Die Anzahl der Dateien ist abhängig vom Format des Datenträgers nicht begrenzt. Nach jeder Bildschirmseite kann mit CR eine weitere Seite angezeigt werden, mit M gelangt man zurück zum Hauptmenü.USB FehlermeldungenFehler beim Zugriff auf einen USB-Datenträger werden mit Abkürzungen gemeldet. Folgende Fehlercodes können möglicherweise auftreten.ND No Disk Kein Datenträger erkannt DF Disk Full Datenträger ist voll FN Filename Invalid Ungültiger Dateiname CF Command Failed anderer Fehler HEXDUMPIch fand den HEXDUMP (Speicherauszug) schon immer nicht besonders gut lesbar. Eine getrennte Darstellung des Speicherinhaltes und der ASCII-Zeichen ist deutlich besser lesbar. Durch die andere Aufteilung werden jetzt doppelt so viele Speicherstellen angezeigt.
CodeoptimierungenIn allen Routinen wurden die unnötigen und komplizierten Konstrukte, die aus der Verwendung des Makro Assemlers entstanden, überarbeitet und gegen kürzere und gleichzeitig schnellere Routinen ersetzt. Gleichzeitig sind diese Routinen übersichtlicher und kommen ohne Manipulation des Stackpointers aus. |