


![]() |
Z80mini3 - Handbuch |
Autor: Walter Scherer
Copyright © MCT Paul & Scherer Mikrocomputertechnik GmbH. Alle Rechte vorbehalten.
Monitor und Beschreibung des Monitors: Copyright © MCT Lange & Thamm Mikrocomputertechnik GbR.
Der Crossassembler ASZ80 basiert auf dem Public-Domain Crossassembler "Frankenstein" von Mark Zenier.Dieses Handbuch, wie auch das beschriebene Produkt, wurde sorgfältig erstellt und geprüft. Trotzdem können Fehler und Irrtümer nicht ausgeschlossen werden. MCT übernimmt keinerlei Verantwortung für die uneingeschränkte Richtigkeit und Anwendbarkeit des Handbuchs oder des beschriebenen Produkts und für die aus eventuell vorhandenen Fehlern resultierenden Schäden.
Änderungen ohne vorherige Ankündigung vorbehalten.
![]()
1 Einführung
Der Z80mini3 Einplatinenrechner vereinigt auf der Fläche eines Handtellers alle Funktionen, die einen modernen Einplatinenrechner ausmachen. Die hohe Integrationsdichte dieses Rechners wurde durch den Mikroprozessor TMPZ80C015 möglich. Dieser Baustein vereinigt auf der Fläche eines Daumennagels alle Funktionen, die für ein vollständiges Z80 System nötig sind. Besonders interessant an dieser CPU ist die Integration von Standard Komponenten der Z80 Familie. Damit wird es für Z80 Anwender besonders einfach, den Z80mini3 Einplatinenrechner einzusetzen. Bewährte Software kann ohne grosse Änderungen angepasst werden, kostspielige und zeitraubende Schulungen sind nicht erforderlich.
Die integrierten Funktionen des TMPZ80C015:
- Z80B CPU mit bis zu 6MHz Takt
- Z80B CTC - Counter Timer Circuit mit 4 Counter/Timer Blocks
- Z80B PIO - Parallel I/O mit zwei 8Bit Kanälen
- Z80B SIO - Serial I/O mit zwei universellen seriellen Kanälen
- Quarz Taktgenerator
Neben einer leistungsfähigen und schnellen CPU sind die anderen onboard Baugruppen von entscheidender Bedeutung für die Einsetzbarkeit in einem weiten Bereich von Applikationen. Hier bietet der Z80mini3 ein breites Spektrum von Funktionen:
- 32 oder 128KB batteriegepuffertes SRAM
- 32KB EPROM
- 32KB EEPROM
- RAM Paging Logik
- Batteriegepufferte Uhr
- Spannungsüberwachung
- Power Management
Zusatzbaugruppen erlauben den schnellen Einsatz in unterschiedlichsten Anwendungen:
- Serielle Treibermodule (IF-Module: RS232, RS422, RS485, Stromschleife, ... )
- Netzteile mit Power Management Funktionen
Last but not least - die Software:
- Monitor
- Assembler
- Assembler Entwicklungsumgebung
- MSR BASIC
![]()
1.1 Auslieferungszustand
Der Z80mini3 Einplatinenrechner wird in der unten beschriebenen Standard Konfiguration ausgeliefert - andere Konfigurationen (z.B. mit doppelter Taktfrequenz) können in einzelnen Punkten abweichen.
- Der Quarz liefert 9.830 MHz. Der Vorteiler für die seriellen Kanäle teilt durch 8.
- Der RESET Taster ist nicht bestückt.
- Der V.24 RESET Jumper ist nicht gesteckt. Damit wird von der V.24 niemals ein RESET ausgelöst.
- Bereits installierte Software im ROM (Monitor) verwendet 19200Baud, 8 Datenbits, 1 Stopbit und no Parity. Der Monitor benutzt den SIO Kanal B.
![]()
1.2 Inbetriebnahme
![]()
Zum ersten Kennenlernen und zum Feststellen eventueller Transportschäden sollten Sie die folgenden Schritte durchgehen. Denken Sie daran, isolierende Unterlagen zu verwenden und Stecker nur im spannungslosen Zustand zu stecken oder zu ziehen. Im folgenden wird immer davon ausgegangen, dass Sie einen PC als Hostrechner verwenden.
Legen Sie den Z80mini3 so hin, dass die Beschriftung der CPU horizontal liegt und lesbar ist . Die CPU ist der Chip im 100pol. Flatpack mit den vielen kleinen Beinchen auf allen 4 Seiten. Sehen Sie sich alle Bauteile mal in Ruhe an - checken Sie auf Transportschäden, insbesondere verbogene Pins an den Steckverbindern.
Schliessen Sie die Stromversorgung an wie im Bild zu sehen. Sie benötigen ein Festspannungsnetzteil mit +5V ±5%. Regelbare Netzteile sollten nur im Notfall verwendet werden. Ungeregelte Netzteile oder Batteriepakete dürfen nicht verwendet werden.
Schliessen Sie die V.24 an. Dazu brauchen Sie einen IF232LP Treibermodul oder eine andere, zum IF232LP Modul kompatible Treiberschaltung. Der IF232LP Treibermodul wird mit einem 10pol. Flachbandkabel an den Z80mini3 und mit einem Standard-Nullmodemkabel an den PC angeschlossen. Im Bild ist der SIO Kanal B verwendet. MSR Basic wird über den Kanal A angesprochen. Beachten Sie dabei, dass der Stecker für den Kanal A um 180 Grad gegenüber dem Stecker für den Kanal B verdreht ist.
Installieren Sie z.B. die beim Z80mini3 Entwicklungspaket mitgelieferte Terminal Emulator Software (TM) auf Ihrem PC. Es ist ohne weiteres möglich, andere Terminal Emulatoren zu verwenden.
Konfigurieren Sie den verwendeten Terminal Emulator auf 19200Baud, 8 Datenbits, no Parity und 1 Stopbit. Bei ist das die Defaulteinstellung.
Starten Sie den Terminal Emulator.
Schalten Sie den Z80mini3 ein. Es muss bei Verwendung des Monitors oder MSR BASIC eine Copyright Notiz und anschliessend ein Prompt kommen. Return/Enter liefert ein neues Prompt.
Wenn Sie soweit gekommen sind, sollte normalerweise alles in Ordnung sein. Sie können also mit der Entwicklung Ihrer Applikation loslegen.
![]()
1.3 Der Z80mini Version 3.10
Der Z80mini3 basiert auf den vielfältigen Erfahrungen, die sich in den Jahren seit der Vorstellung des ersten Z80mini 1.00 in der mc 4/1989 angesammelt haben. Um den Umstieg der bisherigen Anwender des Z80mini 1.00 auf die neue Version zu erleichtern, wurden keine Modifikationen durchgeführt, die keine wesentliche Verbesserung der Eigenschaften erbringen. Die Version 3.10 kann ohne oder mit nur sehr geringen Änderungen der Applikationssoftware und praktisch immer ohne Änderungen der Applikationshardware anstelle des Vorläufers eingesetzt werden.
Die Version 3.10 enthält folgende Änderungen gegenüber der Version 1.00:
Die Taktfrequenz ist 2 mal so hoch. Dies hat jedoch nur minimalen Einfluss auf die Programmierung der SIO oder der Baudrate Timer. Die Standardbaudrate von 9600Baud beim Z80mini 1.00 wird auf 19200Baud erhöht. Durch Umprogrammierung eines Timerregisters kann das wieder rückgängig gemacht werden. Dokumentation zu Soft- und Hardware Produkten von anderen Anbietern geht häufig von der Taktrate des Z80mini 1.00 aus. Solche Zeitangaben, wie z.B. Baudraten oder Timeouts, sind entsprechend zu korrigieren.
Die Timer 3 und 2 sind für die seriellen Ports A und B verwendet. Beim Z80mini 1.00 ist der Timer 2 nicht angeschlossen und damit der SIO Kanal A nicht ohne weiteres verwendbar. Da z.B. MSR BASIC diesen Kanal nutzt, ist eine Korrektur sinnvoll Durch die Zusammmenlegung der Timer 2 und 3 fällt der getrennte Timereingang 3 auf ST6 weg. Die Belegung des Timersteckers wurde auch sonst geändert. Die neue Belegung ist geradliniger und einfacher.
Das Businterface entspricht einem 5MHz Z80. Alte, langsame Z80 und 8080 Peripheriebausteine sind möglicherweise ungeeignet. Es sollten nur Bauteile verwendet werden, die auf einen Bustakt von minimal 6MHz ausgelegt sind.
Das RAM wurde auf maximal 128KB erweitert. Eine Pageswitch Logik dient zum Einblenden von 16KB Pages aus diesem RAM.
M1* ist mit RESET* verknüpft um Z80 Peripherie Bausteine korrekt zurücksetzen zu können.
Der Spannungsmonitor geht von einem langsamen (min. 10ms) Anstieg und Abfall der Versorgungsspannung aus. Siehe <Stromversorgung und Reset>. Es handelt sich hierbei um keine wirkliche Änderung - es wird nur eine klare Spezifikation gegeben.
Ein onboard Reset Taster ist vorgesehen. Dieser Taster kann von Entwicklern zur Erleichterung der Arbeit verwendet werden. Dieser Taster ist nur bei Entwicklungspaketen bestückt.
Die Platine ist ein Multilayer. Dadurch werden EMV Eigenschaften wesentlich verbessert.
Die Stromversorgung erfolgt wahlweise über einen Floppy Stromversorgungs Stecker. Auf diesem Stecker befindet sich ausserdem ein PowerGood Signal und Support für eine Powerdown Sleep Hardware.
Die Anordnung der Bauteile wurde verbessert. Die Steckverbinder sind mechanisch und elektrisch gleich.
Der Schreibschutz Jumper an der RTC entfällt.
Die Wahl zwischen Batteriepufferung des EEPROMs und normaler Versorgung entfällt. Das EEPROM ist nicht pufferbar.
Der Power Fail Input entfällt. Dieser Input war nur nach einem aufwendigen Abgleich und unter Einschränkungen benutzbar. Ein Power- Good Eingang auf dem Power Stecker erfüllt eine ähnliche Funktion.
Das bisher undefinierte Schreiben auf das EPROM verändert nun das Page Selekt Register. Diese Zusatzfunktion wird von korrekten Programmen für den Z80mini 1.00 nicht angesprochen. Bisher unentdeckte Fehler in alten Programmen könnten das Page Selekt Register versehentlich ändern - mit fatalen Folgen für das Programm. Da dieser Fehlertyp mit einem Logic Analyzer leicht zu finden ist sollten sich keine wesentlichen Schwierigkeiten ergeben.
![]()
1.4 Unterschiede zwischen der Version 3.10 und 3.00
Die Version 3.10 hat gegenüber der Version 3.00 nur minimale Unterschiede:
Die Timerausgänge können mit Lötbrücken auf der Unterseite der Platine kompatibel zur Version 1.00 gemacht werden.
Die Timereingang des Timer 3 kann vom Timereingang des Timer 2 getrennt werden, um auch hier zur Version 1.00 kompatibel zu werden. Dabei wird jedoch der SIO Kanal A lahmgelegt.
Das EEPROM ist jetzt genauso wie das RAM über die Page Selekt Logik als 2 16KB Blocks umschaltbar.
Die RAM Blocks 2 und 3 können anstelle des EPROMs eingeblendet werden. Diese Betriebsart wird CPM Mode genannt.
Ein Fehler der Version 3.00 - IEO war nicht an den Busstecker geführt - ist korrigiert.
![]()
1.5 Logische Pegel
Wenn in diesem Handbuch auf logische Pegel eines Signals eingegangen wird, werden zwei Konventionen verwendet.
- 1. High und Low Pegel:
- Diese Pegel entsprechen den direkt messbaren Spannungen an der physikalisch vorhandenen Leitung.
- 2. Aktiv und inaktiv:
- Signale werden, wenn das eine klarere Beschreibung ergibt, als aktiv und inaktiv bezeichnet. Dabei sind highaktive Signale (z.B. IEO) im aktiven Zustand bei High Pegel und inaktiv bei Low Pegel. Low aktive Signale (z.B. RESET*) sind im Low Pegel aktiv und bei High Pegel inaktiv. Signale, die mit einem angehängten '*' markiert werden, sind Low aktiv. Für Signale in GAL Gleichungen gilt eine andere Konvention, hier wird Lowaktiv durch ein vorangestelltes '/' markiert. RESET* und /RESET sind das gleiche Signal.
![]()
1.6 Numerische Angaben
Alle Zahlenwerte werden dezimal angegeben. Hexadezimale Werte werden mit einem vorangestellten 0x markiert 1. Der Wert 65535 entspricht also dem Wert 0x0000FFFF.
![]()
2 Adressbelegung
2.1 Normal Mode
Die Z80 CPU kennt zwei Adressräume. Einen 64KB grossen Speicher Adressraum und einen 256 Byte grossen I/O Adressraum. Diese Adressräume sind folgendermassen belegt:
Adresse Speicher/Funktion 0x0000... 0x7FFF EPROM/ROM (nur lesen) 0x0000 RAM Page Selekt (nur schreiben) 0x8000... 0xBFFF RAM 0xC000... 0xFFFF RAM oder EEPROM
(nur bei selektiertem EEPROM)
Adresse I/O Baugruppe 0x00... 0x0F RTC (16 Register auf den Datenbits 0... 3) 0x10 Interner CTC Kanal 0 0x11 Interner CTC Kanal 1 0x12 Interner CTC Kanal 2 0x13 Interner CTC Kanal 3 0x18 Interner SIO Kanal A Daten 0x19 Interner SIO Kanal A Command 0x1A Interner SIO Kanal B Daten 0x1B Interner SIO Kanal B Command 0x1C Interner PIO Kanal A Daten 0x1D Interner PIO Kanal A Command 0x1E Interner PIO Kanal B Daten 0x1F Interner PIO Kanal B Command 0x20... 0x7F C0 Selekt 0x80... 0xBF C1 Selekt 0xC0... 0xCF Reserviert für Erweiterungen 0xD0... 0xDF Reserviert für Erweiterungen 0xE0... 0xEF CPM Modus Trigger Nicht aufgeführte Adressbereiche können beim Zugriff zu undefiniertem Verhalten führen.
![]()
2.2 CPM Mode
Der CPM Mode wird durch Schreiben oder Lesen der I/O Adresse eingeschaltet. Ein Zurückschalten in den Normal Modus ist nur durch Reset möglich 2. Die Adressbelegung des I/O Adressraums bleibt gleich.
Die Belegung des Speicher Adressraums ändert sich folgendermassen:
Adresse Speicher/Funktion 0x0000... 0x3FFF RAM Page 2 0x4000... 0x7FFF RAM Page 3 0x8000... 0xBFFF RAM Page 0 0xC000... 0xFFFF RAM Page 1... 7 (default: 1) oder
EEPROM Page 0... 1 (default: 1)Im CPM Modus ist das Page Selekt Register nicht mehr zugänglich. Der oberste 16KB Block kann weiterhin zwischen EEPROM und RAM umgeschaltet werden. Die für diesen Block selektierte Pagenummer bleibt so eingestellt, wie sie vor der Umschaltung in den CPM Modus war.
![]()
3 Baugruppen
3.1 Interrupts
Interrupts werden wie im TMPZ80C015 Handbuch beschrieben verwendet. Externe Interrupts von Z80 Peripherie Bausteinen werden niedriger priorisiert als die Interrupts von der integrierten Peripherie. Der Interruptlogik auf dem Erweiterungsbus stehen folgende Signale zur Verfügung:
- IEO:
- Interrupt Enable Out Ausgang der CPU
- INT*:
- Interrupt Eingang der CPU. INT* ist mit einem Pullup Widerstand von 10kOhm an VCC gelegt. Es ist sinnvoll, zum Treiben von INT* Open Collector oder Open Drain Ausgänge zu verwenden. Damit können alle Interruptleitungen direkt verbunden werden. Die meisten Peripheriebausteine am Markt folgen dieser Konvention.
- M1*:
- Machine Cycle 1. M1* wird aktiv wenn der Opcode geholt wird. Die Z80 Peripherie benötigt dieses Signal, um eine korrekte Behandlung von Interrupt Chaining und Return zu erlauben.
- IORQ*:
- I/O Request wird zusammen mit IEO und M1* für den Interrupt Acknowledge benötigt.
NMI
Der NMI kann vom Watchdog Timer über J2 oder vom Netzteil über den Power-Stecker J1 ausgelöst werden. Es ist nicht möglich, beide Quellen gleichzeitig zu verwenden. NMIs vom Netzteil werden beim Ausfall der Versorgungsspannung ausgelöst, wobei je nach Netzteil noch einige Millisekunden bis Minuten zum Retten des aktuellen Zustands und Herunterfahren des gesteuerten Prozesses bleiben.
![]()
3.2 Power Down Betriebsarten
Der TMPZ80C015 hat einen integrierten Taktgenerator, der in 4 verschiedenen Modi konfiguriert werden kann, um den Stromverbrauch zu senken.
HALTMR[4... 3] Mode Beschreibung 0 0 Idle1 Der Clock läuft im Standby.
Alle Operationen sind gestoppt.0 1 Idle2 Der Clock ist abgeschaltet.
Der Wiederanlauf dauert einige Millisekunden.1 0 STOP Alles ist gestoppt. 1 1 RUN Normalbetrieb. Neben den Betriebsmodi der CPU ist auf dem Z80mini3 ein voller Powerdown mit Zeit- oder interruptgesteuertem Betrieb möglich. Das Netzteil POWER1 ist bereits auf einen solchen extern gesteuerten Betrieb vorbereitet. Diese Netzteile haben einen low aktiven Power-On Eingang, über den die 5V Versorgung vom Netzteil eingeschaltet werden kann. Weitere Details finden sich in <RTC> und der Beschreibung des entsprechenden Netzteils.
![]()
3.3 Stromversorgung
Der Z80mini3 wird über einen 4pol. Floppysteckverbinder versorgt. Die Belegung dieses Steckers entspricht im wesentlichen einem normalen 3 1/2" Floppylaufwerk. Nach Entfernen der Kabel an Pin 3 und 4 kann z.B. die Floppy Versorgung eines normalen PC Netzteils verwendet werden.
Pin Signal Beschreibung 1 VCC +5V ±5% 2 GND Referenz 3 Power Good NMI* Eingang am Z80mini3 4 Power Off Interrupt*/Alarm* Ausgang der RTC Die Stromaufnahme an VCC beträgt typ. 65mA und maximal 100mA in der Standardversion.
Die Notstromversorgung der RTC und des RAMs ist mit einer Lithiumzelle mit 3V realisiert. Die Lebensdauer der Zelle beträgt 4 Jahre bei maximaler Betriebstemperatur (70 Grad Celsius) und 10 Jahre bei einer Temperatur von 20 Grad Celsius. Zu diesen Zeiten kann die Betriebsdauer des Rechners mit einer externen Stromversorgung addiert werden. Die Lithiumzelle ist eingelötet. Das Auswechseln sollte nur von qualifiziertem Personal durchgeführt werden.
![]()
3.4 RESET
Der RESET wird onboard mit einem Spannungskomparator generiert. Die minimale Versorgungsspannung für die Auslösung des Resets beträgt 4.5... 4.7V. Um eine korrekte Start- und Stopsequenz für den Datenerhalt in RTC und RAM zu garantieren, muss eine minimale Anstiegs- und Abfallzeit an VCC von 0.01s eingehalten werden. Diese Zeit wird von praktisch allen üblichen Netzteilen ohne Zusatzmassnahmen garantiert. Bei Verwendung von Schaltern im VCC Stromversorgungszweig (z.B. Zeitschaltrelais) sollte in Problemfällen ein 500uF Kondensator direkt am Z80mini3 zwischen GND und VCC geschaltet werden. Ausserdem ist es in diesen Fällen besser, eine knapp dimensionierte Stromversorgung zu verwenden (ca. 250mA Maximalstrom) um den Ladestrom des Kondensators zu begrenzen. Ein optionaler Reset Taster auf der Platine selbst erlaubt den manuellen Reset ohne Zusatzaufwand. Dieser Taster ist auf den zu einem Entwicklungspaket gehörenden Z80minis bereits enthalten.
![]()
3.5 V.24 RESET
Das DSR* Signal auf dem seriellen Kanal B kann genutzt werden, um vom Hostrechner aus per Software einen RESET auszulösen. Dazu muss DSR* auf Low gepulst werden. Die Pulsbreite sollte minimal ca. 0.1 Sekunden betragen. Der V.24 Reset kann durch Stecken des Jumpers aktiviert werden. Der Terminal Emulator bietet die Möglichkeit über Kommandozeilenparameter oder interaktiv mit einen Reset auszulösen.
![]()
3.6 Watchdog Timer
Der integrierte Watchdogtimer kann in der Version 3.10 nicht verwendet werden, um einen Reset auszulösen. Durch einen Schaltungsfehler würde ein Totempole Ausgang () auf einen Open Collector Ausgang () gelegt. Beim Reset wird dann ein Kurzschlussstrom fliessen und erreicht nicht mehr den korrekten Low Pegel. In der Folge kann batteriegepuffertes RAM Daten verlieren. Wenn diese Funktion trotzdem zwingend nötig ist kann folgender Patch verwendet werden: Vom Watchdog Ausgang wird eine Schottky Diode (z.B. BAT42) an geführt. Die Kathode (der Minuspol) muss dabei an den Watchdogausgang gelegt werden. Durch diese Schaltung wird der Kurzschluss vermieden und der Low Pegel erreicht einen korrekten Wert.
![]()
3.7 RAM
Vorgesehen ist der Einsatz von 32KB und 128KB RAM Typen. Die im RAM gespeicherten Daten werden bei installierter Lithiumzelle auch bei Ausfall der externen Stromversorgung gehalten. Im Interesse einer möglichst langen Lebensdauer der Lithiumzelle muss ein Low-Power RAM verwendet werden. Die typische Lebensdauer der Lithiumzelle beträgt ca. 10 Jahre. Da der Z80 Prozessor nur 64KB linear adressieren kann, muss bei einem Ausbau des RAMs auf 128KB auf Page Switching zurückgegriffen werden. Dabei wird das RAM in zwei Hälften geteilt, wobei die untere Hälfte von bis fest auf die Page zeigt und die obere Hälfte von bis auf einen der 8 16KB Blocks des 128KB RAMs geschaltet werden kann. Direkt nach dem RESET ist die Page auf der Adresse bis geschaltet. Die Umschaltung erfolgt durch Schreiben der Pagenummer (1... 7) 3 auf die Adresse 0x0000.
![]()
3.8 ROM
Der EPROM/ROM Sockel kann nur mit einem 32KB Typ (z.B. 27256) bestückt werden. Eine Verwendung von anderen Speichergrössen ist nicht vorgesehen.
![]()
3.9 EEPROM
Ein 16KB grosser EEPROM Block kann den oberen 16KB des RAMs überlagert werden. Dazu kann per J3 und J4 eine der folgenden Konfigurationen fest gewählt werden:
# J3 Position J4 Position Konfiguration 1 - - Kein EEPROM sichtbar 2 - 1-2 PA0 = 0 selektiert das EEPROM 3 - 2-3 PB0 = 0 selektiert das EEPROM 4 1-2 - EEPROM immer selektiert Konfiguration 1 sperrt jeden Zugriff auf das EEPROM. Die Portleitungen PA0 und PB0 sind frei verwendbar. Die Fälle 2 und 3 machen das EEPROM per Software an- und ausschaltbar. Ein 0 Pegel an PA0 (Fall 2) oder PB0 (Fall 3) aktiviert das EEPROM. Ein 1 Pegel macht die obere 16KB RAM Page sichtbar. Fall 4 selektiert das EEPROM auf Dauer. Die obere RAM Hälfte und damit der Page Selekt Mechanismus ist nicht mehr zugreifbar. Da die PIO nicht symmetrisch ist bezüglich der Konfigurierbarkeit der Ports A und B ist es sinnvoll, für Neuentwicklungen den PB0 für die Selektion des EEPROMs zu verwenden. PA0 kann aus Kompatibilitätsgründen verwendet werden. Es werden 32KB EEPROMs verwendet. Da die Hardware des Z80mini3 nur ein 16KB grosses Fenster zu Verfügung stellt, ist nur die jeweils selektierte 16KB Hälfte des EEPROMs zugreifbar. Der Page Selekt Mechanismus des SRAMs wird auch für die EEPROM Adressierung verwendet. Dabei wird das niederwertigste Bit des Page Selekt Registers als A14 des EEPROMs verwendet. Wir empfehlen generell, bei der Umschaltung von SRAM auf EEPROM und umgekehrt das Page Selekt Register neu zu setzen. Der Wert nach dem Reset im Page Register garantiert volle Kompatibilität zu älteren Versionen des Z80mini3, solange das Page Selekt Register nicht verändert wird. Es ist möglich, statt des EEPROMs ein 32KB SRAM zu verwenden. Dieses RAM kann als 16KB Block nach der Umschaltung auf EEPROM Betrieb ab bis verwendet werden. Der EEPROM Sockel bietet keine Unterstützung für Batterie Pufferung. Die verwendbaren EEPROM Typen werden von verschiedenen Herstellern und mit unterschiedlichen Eigenschaften angeboten. Beispiele für einsetzbare Typen sind:
Hersteller Bezeichnung Protection Chip Erase Samsung KM28C256 ja ja Atmel AT28C256 ja ja Seeq SEEQ 28C256 nein ja Vergleichbare Typen von anderen Herstellern sind ebenfalls verwendbar. Es ist allerdings empfehlenswert, nur Typen mit Software Write Protection zu verwenden, um gerade bei sicherheitskritischen Anwendungen Datenverlustrisiken beim Aus- und Einschalten des Z80mini3 zu verhindern. Das EEPROM ist gegen Schreiben bei zu niedriger Versorgungsspannung und direkt nach dem Einschalten geschützt. Bei Einhaltung der minimalen Anstiegs- und Abfallzeit an VCC von 10ms ist ein sicherer Datenerhalt garantiert. Wird der Software Write Schutz immer nach jedem Schreiben aktiviert, dann können auch kurzzeitige Spannungseinbrüche und ähnliche Ausnahmebedingungen keinen Schaden mehr anrichten.
Write Enable
Das EEPROM sollte vor dem Schreiben eines Datenblocks mit folgender Sequenz freigeschaltet werden:
0xAA -> 0x5555
0x55 -> 0x2AAA
0x80 -> 0x5555
0xAA -> 0x5555
0x55 -> 0x2AAA
0x20 -> 0x5555
Write
Die verwendbaren EEPROM Typen sind nach einem eventuellen Freischalten durch einfaches Schreiben des gewünschten Byte auf die entsprechende Adresse programmierbar. Es lassen sich bis zu 64 Byte auf einmal in einem Burst Mode programmieren, vorausgesetzt folgende Bedingungen werden dabei eingehalten:
Alle Adressen müssen innerhalb eines 64 Byte Blocks liegen, der auf einer ganzzahlig durch 64 teilbaren Adresse anfängt.
Zwischen Schreibtransfers zu einem Burst gehöriger Bytes dürfen nicht mehr als 100us vergehen.
Das Ende des Schreibzyklus kann durch Abwarten von minimal 10ms oder durch Rücklesen und Vergleich des zuletzt geschriebenen Byte bis zur Übereinstimmung ermittelt werden.
Write Disable
Nach dem Schreiben jedes Datenblocks sollte das EEPROM wieder geschützt werden. Zum Schützen des EEPROMs muss lediglich folgende Sequenz durchlaufen werden:
0xAA -> 0x5555
0x55 -> 0x2AAA
0xa0 -> 0x5555
![]()
3.10 Interner PIO
Der in der CPU integrierte PIO ist bereits fest auf Steckverbinder verdrahtet. Die einzelnen Portleitungen sind frei verwendbar mit folgenden Ausnahmen.
- Port A:
- Port A ist auf den Stecker ST3 gelegt. Die Leitung PA0 ist je nach Konfiguration des EEPROMs möglicherweise für die EEPROM Selektion verwendet.
- Port B:
- Port B ist auf den Stecker ST1 gelegt. Die Leitung PB0 ist je nach Konfiguration des EEPROMs möglicherweise für die EEPROM Selektion verwendet.
![]()
3.11 Interne SIO
Die integrierte SIO hat 2 vollständig unabhängige serielle Kanäle. Die Baudraten der beiden Kanäle werden über 2 der 4 Timer aus dem CTC Block erzeugt. Dabei ist die Zuordnung von Timer und SIO Kanal folgendermassen:
SIO Kanal CTC Timer Stecker A 3 ST4 B 2 ST5 Die Frequenz an den Timereingängen beträgt [1/8] der CPU Taktfrequenz. Bei einer Frequenz von 9.830 MHz sind das 1.228750 MHz. Die Standardbaudrate bei Verwendung von Monitor ist 19200Baud.
![]()
3.12 Interner CTC
Die integrierte Counter/Timer Baugruppe hat 4 separate und funktionsgleiche Timer/Counter Einheiten. Die Hardware des Z80mini3 gibt folgende Konfiguration vor:
CTC Kanal Eingang Ausgang Funktion 0 TIN0 TOUT0 Frei 1 TIN1 TOUT1 Frei 2 SERCLK SERCKB Baudrate SIO B 3 SERCLK SERCKA Baudrate SIO A Die Signale TIN[0... 1], TOUT[0... 1], SERCLK, SERCKA und SERCKB sind auf den Timer I/O Stecker ST6 geführt.
![]()
3.13 RTC
Die RTC72421 ist über 16 Register mit einer Breite von 4Bit ansprechbar. Diese Register liegen in einem Port von jeweils 8Bit Breite, wobei die obersten 4 Bits beim Lesen undefinierte Werte liefern und beim Schreiben irrelevant sind. Die I/O Adresse ist bis . Zusammen mit dem Netzteil POWER1 kann der Alarmausgang der RTC zum periodischen Einschalten des Z80mini3 verwendet werden. Dazu muss lediglich die RTC auf periodische Interrupts programmiert werden, und der dafür vorgesehene Jumper auf den Netzteilen entfernt werden. Durch Schreiben von 0 auf das IRQ Bit in der RTC schaltet der Rechner sich selbst aus. Nach Ablauf der (mit T1/T0) programmierten Periode wird der Strom wieder eingeschaltet.
Adr. Name D3 D2 D1 D0 Funktion 0x00 S1 S08 S04 S02 S01 Sekunde Einer 0x01 S10 S40 S20 S10 Sekunde Zehner 0x02 Mi1 m08 m04 m02 m01 Minute Einer 0x03 Mi10 m40 m20 m10 Minute Zehner 0x04 H1 H08 H04 H02 H01 Stunde Einer 0x05 H10 PAM H20 H10 Stunde Zehner 0x06 D1 D08 D04 D02 D01 Tag Einer 0x07 D10 D20 D10 Tag Zehner 0x08 Mo1 M08 M04 M02 M01 Monat Einer 0x09 Mo10 M10 Monat Zehner 0x0A Y1 Y08 Y04 Y02 Y01 Jahr Einer 0x0B Y10 Y80 Y40 Y20 Y10 Jahr Zehner 0x0C W W4 W2 W1 Wochentag 0x0D CtlD ADJ IRQ BSY HLD Control Reg. D 0x0E CtlE T1 T0 I/S MSK Control Reg. E 0x0F CtlF TST E/U STP RST Control Reg. F Die Bits in den Controlregistern haben im einzelnen folgende Bedeutung:
Die Bereiche der einzelnen Zeiteinheiten:
- PAM:
- PM (0) oder AM (1).
- ADJ:
- 30 Sekunden Adjust. Die Minuten werden inkrementiert, wenn die Sekunden > 30 sind. Die Sekunden werden auf 00 gesetzt. Nach Setzen von ADJ muss minimal 100us gewartet werden. Das Bit wird automatisch wieder gelöscht.
- IRQ:
- Dieses Read-Only Bit reflektiert den Zustand des Interrupt Ausgangs der RTC (1 = Interrupt, 0 = kein Interrupt). Beim Schreiben einer 0 wird ein anstehender Interrupt wieder zurückgenommen.
- BSY:
- Zeigt nach dem Setzen von HLD an, ob ein Übertrag zu erwarten ist (1 = Übertrag, 0 = kein Übertrag).
- HLD:
- Siehe vorhergehendes Bit.
- T1/T0:
- Diese Bits dienen der Programmierung der Periodendauer des Interruptausgangs der RTC. Die Periodendauer beträgt:
T1 T0 Zeitintervall 0 0 [1/64] Sekunde 0 1 1 Sekunde 1 0 1 Minute 1 1 1 Stunde - I/S:
- Dieses Bit muss auf 1 programmiert werden.
- MSK:
- Dieses Bit sperrt den Interrupt Ausgang der RTC. Es muss auf 0 programmiert werden.
- TST:
- Dieses Bit muss auf 0 programmiert werden.
- E/U:
- Europäische 24 Stunden- (1) oder US AM/PM-Zeit (0).
- STP:
- STP = 1 stoppt die Uhr.
- RST:
- RST = 1 löscht die internen Zähler unterhalb des 1Hz Teilers.
Solange RST = 1 wird die Uhr angehalten.
Einheit von bis Kommentar Sekunden 00 59 Minuten 00 59 Stunden 00 23 bis 11 im AM/PM Mode Monate 01 12 Jahre 00 99 Wochentag 0 6 Sonntag ist 0 Programmierung der RTC
Mit folgender Programmsequenz lässt sich die Uhr stellen:
Mit folgender Programmsequenz lässt sich die Uhr stellen:
RTC->ctlf = 7; /* stop, reset, 24 hour mode */
RTC->sec = sec;
RTC->secd = sec10;
RTC->min = min;
RTC->mind = min10;
RTC->hour = hour;
RTC->hourd = hour10;
RTC->day = day;
RTC->dayd = day10;
RTC->mon = mon;
RTC->mond = mon10;
RTC->year = year;
RTC->yeard = year10;
RTC->week = week;
RTC->ctle = 0; /* 64Hz, enable std.p output */
RTC->ctld = 0;
RTC->ctlf = 4; /* 24 hour mode, start clock */
Zum Lesen ist nichts weiter nötig, als die Zeitregister in einen Buffer zu kopieren. Wenn während des Lesens die Register sich ändern wird eine falsche Zeit ausgegeben. Um dies zu erkennen wird die RTC zweimal gelesen und die Ergebnisse verglichen. Falls sie ungleich sind wird der Lesevorgang wiederholt.
RTC63421
Die RTC63421 ist eine gegenüber der RTC72421 verbesserte Ausführung. Die beiden RTCs sind pinkompatibel und mit Ausnahme der Controlregister und der zusätzlichen Alarmtimer Funktion softwarekompatibel. Die RTC63421 hat als wesentliche Verbesserung einen frei programmierbaren Alarmtimer, der verwendet werden kann, um nach beliebigen Zeitintervallen die Power On Funktion des POWER1 Netzteils zu triggern.
Die RTC63421 ist optional verfügbar. Details der Programmierung werden im bei der Option mitgelieferten Datenblatt beschrieben.
![]()
3.14 10MHz Version
Der Z80mini3 ist auch in einer 10MHz Version verfügbar. Gegenüber der Standard Version hat der Z80mini3-10 folgende Unterschiede:
Die CPU ist ein TMPZ80C015BF10.
Die Quarzfrequenz ist auf 19.660800 MHz erhöht. Damit laufen alle internen Baugruppen mit der doppelten Frequenz. Dadurch werden insbesondere die CTC Timer beeinflusst. Um auf dieselben Zeitkonstanten zu kommen muss die Programmierung der Timerregister geändert werden.
Die Standard Baudrate ist 38400Baud. Alle PCs und modernere Terminals unterstützen diese Baudrate.
Das EPROM und das RAM müssen eine Zugriffszeit von 120ns oder weniger haben.
Die beiden GALs auf dem Z80mini3-10 können durch 15ns Typen ersetzt werden, um die Sicherheitsmarge zu maximieren.
An der Buserweiterung angeschlossene Peripherie muss für eine Taktfrequenz von minimal 10MHz qualifiziert sein. Die Zugriffszeit externer Baugruppen muss kleiner oder gleich 120ns sein.
Die Stromaufnahme des Boards ohne externe Baugruppen und Treibermodule beträgt typisch 85mA.
![]()
4 Steckverbinder
![]()
4.1 Stromversorgungs Stecker J1
4pol. Floppy Stecker
Pin Signal 1 VCC 2 GND 3 Power_Good / NMI* 4 Power_Off / RTCALARM*
- VCC:
- +5V ±5% Stromversorgung
- GND:
- Spannungsreferenz der Stromversorgung
- Power_Good:
- Dieses Signal kann verwendet werden, um vom Netzteil eine Stromausfallsmeldung zu erhalten. Eine negative Flanke löst einen NMI aus.
- Power_Off:
- Dieses Signal kann verwendet werden, um das Netzteil auszuschalten. Über die Alarmfunktion der RTC kann nach Ablauf einer programmierbaren Zeit das Netzteil wieder eingeschaltet werden.
![]()
4.2 Serielle Port A/B Stecker ST4 und ST5
10pol. 2 reihige Pfostenstecker
Pin Signal Pin Signal 1 VCC 2 RDYx* 3 SYNCx* 4 RxDx 5 TxDx 6 DTRx* 7 RTSx* 8 CTSx* 9 DCDx* 10 GND
- VCC:
- +5V ±10% Stromversorgung für die Peripherieschaltung
- GND:
- Referenz
- RDYx*:
- Data Set Ready. Dieser Pin darf vom SIO bei Verwendung von Standard IF-Modulen niemals getrieben werden. Um dies zu gewährleisten, muss das WR1 beider SIOs eine 0 in den Bits 7..5 enthalten. Auf dem Seriellen Kanal A ist DSR* über einen Jumper auf RESET* legbar. Dieses Signal kann genutzt werden, um vom Hostrechner aus zu ein Resetsignal zu schicken. Dazu muss der Jumper gesteckt sein.
- SYNCx*:
- Ring Indikator Eingang vom Modem im Asynchronbetrieb oder Sync Ausgang im Synchronbetrieb.
- RxDx:
- Receive Data Eingang.
- TxDx:
- Transmit Data Ausgang.
- DTRx*:
- Data Terminal Ready Ausgang.
- RTSx*:
- Request To Send Ausgang.
- CTSx*:
- Clear To Send Eingang.
- DCDx*:
- Data Carrier Detect Eingang. Dieser Eingang ist interruptfähig.
![]()
4.3 Port A/B Stecker ST3 und St1
14pol. 2 reihige Pfostenstecker
Pin Signal Pin Signal 1 VCC 2 VCC 3 Px0 4 Px1 5 Px2 6 Px3 7 Px4 8 Px5 9 Px6 10 Px7 11 xSTB* 12 xRDY 13 GND 14 GND
- VCC:
- +5V ±10% Stromversorgung für die Peripherieschaltung
- GND:
- Referenz
- Px[0... 7]:
- Port A/B Datenleitungen. Bidirektional je nach Programmierung der PIO
- xSTB*:
- Port A/B Strobe Ausgang
- xRDY:
- Port A/B Ready Eingang
![]()
4.4 Bus Interface Stecker ST2
32pol. 2 reihiger Pfostenstecker
Pin Signal Pin # Signal 1 VCC 2 VCC 3 M1* 4 WR* 5 A7 6 WAIT* 7 A6 8 CLK 9 A5 10 C0* 11 A4 12 RD* 13 A3 14 C1* 15 A2 16 IORQ* 17 A1 18 D7 19 A0 20 D6 21 D0 22 D5 23 D1 24 D4 25 D2 26 D3 27 NMI* 28 INT* 29 RESET* 30 IEO 31 GND 32 GND
- VCC:
- +5V ±10% Stromversorgung für die Peripherieschaltung
- GND:
- Referenz
- D[0... 7]:
- Bidirektionaler Datenbus
- A[0... 7]:
- Adressbus Ausgang
- C[0... 1]:
- Chip-Select 0 und 1 Ausgänge. Diese Chip-Selects sind frei verfügbar um Erweiterungsperipherie anzuschliessen 4 . Siehe <Adressbelegung> für Details.
- M1*:
- Opcode Fetch Ausgang - wird für manche Zilog Peripherie Chips benötigt um Vektor Interrupts verwenden zu können
- IORQ*:
- I/O Space Transfer Ausgang
- WR*:
- Write Strobe Ausgang
- RD*:
- Read Strobe Ausgang
- WAIT*:
- Synchroner Wait Eingang um Buszyklen verlängern zu können
- CLK:
- CPU Clock max. 4.915 MHz
- INT*:
- Interrupt Eingang. Darf nur mit Open Collector Treibern getrieben werden.
- IEO:
- Interrupt Enable Out von der CPU. Wird als Anfang der Interrupt Daisy Chain bei Zilog Peripherie Chips verwendet.
- NMI*:
- NMI Eingang. Ist mit dem Power_Good Signal des Stromversorgungs Steckers verbunden
- RESET*:
- Reset Eingang
![]()
4.5 Timer Port Stecker ST6
10pol. 2 reihiger Pfostenstecker
Pin Signal Pin Signal 1 VCC 2 TIN0 3 TIN1 4 SERCLK 5 SERCLK 6 TOUT0 7 TOUT1 8 SERCKB 9 SERCKA 10 GND
- VCC:
- +5V ±10% Stromversorgung für die Peripherieschaltung
- GND:
- Referenz
- TIN[0... 1]:
- Timer 0/1 Input
- SERCLK:
- Timer 2/3 Input mit dem seriellen Basisclock Generator verbunden
- TOUT[0... 1]:
- Timer 0/1 Output
- SERCKA:
- Timer 3 Output. Basis Baudrate für SIO Kanal A
- SERCKB:
- Timer 2 Output. Basis Baudrate für SIO Kanal B
![]()
5 Jumper
![]()
Direkt oberhalb des Quarzes ist eine Jumperleiste. Alle per Jumper konfigurierbaren Funktionen werden hier selektiert.
Jumper # Pin Signal Funktion bei Verbindung 1 RESET* - J2 2 WDTOUT Watchdog löst NMI aus 3 NMI* 1 PA0 PA0 selektiert EEPROM J4 2 MODE PB0 selektiert EEPROM 3 PB0 1 MODE J3 EEPROM abgeschaltet 2 GND 1 RESET* J10 V.24 RESET erlaubt 2 DSR* J4 und J3 erlauben die Selektion der EEPROM Mode Funktion (EEPROM-Aus,
EEPROM-An, PA0-Selektiert, PB0-Selektiert). Details siehe <EEPROM>.
J10 gibt den V.24 Reset frei.
Sonderfunktionen
Auf der Lötseite des Z80mini3 finden sich einige Lötjumperfelder.
Diese Funktionen sind für den Normalbetrieb nicht nötig und dienen lediglich der Beseitigung von Inkompatibilitäten zur Version 1.00.
Jumper # Pad # Signal Funktion bei Verbindung 1 TOUT0 Standard Version J5 2 TOUT0x Version 1.00 kompatibel 3 SERCKA 1 TOUT1 Standard Version J6 2 TOUT1x Version 1.00 kompatibel 3 SERCKB 1 SERCKB Standard Version J7 2 SERCKBx Version 1.00 kompatibel 3 TOUT1 1 SERCKA Standard Version J8 2 SERCKAx Version 1.00 kompatibel 3 TOUT0 1 SERCLKB J9 Standard Version 2 SERCLKA In der Standard Version sind die Jumper J5... 9 auf den Pads 1-2 kurzgeschlossen.
Um Version 1.00 kompatibel zu werden müssen die Jumper J5... 8 auf den Pads 2-3 kurzgeschlossen und der Jumper J9 offen sein.
![]()
6 Bei Problemen
- Der Einplatinenrechner ist am Netzteil und PC angeschlossen, meldet sich aber nicht oder nicht korrekt.
Checken Sie: Stromversorgung auf dem Rechner (direkt z.B. am EPROM messen). Bei weniger als 4,75V könnte bereits der Reset Generator ansprechen. Die korrekte Spannung beträgt 5.0V +/- 5%, wobei die Spannung nicht unbedingt an der Untergrenze sein sollte.
V.24 Kabel inklusive Handshakeleitungen.
Ist der Terminalemulator korrekt konfiguriert?
Kann die Software auf dem Einplatinenrechner überhaupt mit einem Terminalemulator kommunizieren?
Vielleicht ist der V.24 Reset Jumper >J10 gesteckt. Bei Verwendung von 'TM.EXE' genügt es ALT-R einzugeben um den Reset zu invertieren.
- Die RTC liefert seltsame Werte
Die RTC muss wenigstens einmal korrekt gesetzt werden. Der Monitor bietet ein Kommando an.
- MSR BASIC gibt nach dem Reset seltsame Zeichen aus
Einige RAMs tendieren nach dem Einschalten zu Inhalten, die einem BASIC Programm ähneln. MSR BASIC nimmt dann an, dass ein BASIC Programm bereits geladen ist und geht entsprechend vor.
Auf die Schnelle hilft 'NOFREEZE' gefolgt von 'NEW' um den Fehler zu beheben. Ein Tausch des SRAMs gegen einen anderen Typ beseitigt das Problem auf Dauer. Alternativ kann auch der Einsatz der optionalen Notstromversorgung den Fehler beheben, da dann immer ein korrektes Programm im RAM steht.
Neue Versionen von MSR BASIC haben dieses Problem beseitigt. Diese Versionen sind bezüglich der Baudrate ebenfalls zu der Version 1.00 des Z80mini kompatibel: Sie arbeiten mit 9600Baud.
- MSR BASIC gibt nichts aus
MSR BASIC benutzt die Schnittstelle A. Der Lötjumper J9 muss geschlossen sein (Auslieferungszustand), da sonst kein Clock anliegt.
MSR BASIC reagiert empfindlich auf falsche Handshake Signale. Alle V.24 Handshake Eingänge am Z80mini3 müssen aktiv sein.
Insbesondere ein falscher Pegel an DSR* blockiert die Ausgabe. Das Terminalprogramm 'TM.EXE' kann die DSR* Leitung steuern. Durch Eingabe von ALT-R kann DSR* invertiert werden.
- MSR BASIC kann das EEPROM nicht programmieren
Das MSR BASIC Handbuch bezieht sich auf einen "J5", der gebrückt werden soll. Diese Bauteilnummer stammt aus dem alten Z80mini 1.00 Handbuch. Der korrekte Jumper beim Z80mini3 ist J3.
- Eine der beiden seriellen Schnittstellen funktioniert nicht
Denken Sie daran, dass die Stecker für Port A und B gegeneinander um 180 Grad verdreht sind. Warum der Layouter das bei der Version 1.00 so gemacht hat, ist uns unklar - Layouttechnisch wäre es sogar einfacher, die beiden Stecker in die selbe Richtung zu orientieren - aus Gründen der Kompatibilität war das jedoch nicht mehr möglich. Beachten Sie auch, dass MSR BASIC und der Monitor unterschiedliche Ports verwenden.
- Trotz korrekter Programmierung liefert die serielle Schnittstelle nur seltsame Zeichen
Die Taktfrequenz des Z80mini3 wurde gegenüber dem Vorläufer verdoppelt. Dadurch sind auch die Baudraten doppelt so hoch. Entweder der Kommunikationspartner wird auch auf die doppelte Baudrate eingestellt, was häufig möglich und sogar vorteilhaft ist oder die Baudrate auf dem Z80mini3 wird halbiert indem der Initialwert im entsprechenden CTC Timerregister verdoppelt wird.
- Das Zeitverhalten der Applikation hat sich drastisch verändert
Denken Sie an die Verdopplung der Taktfrequenz auf 4.915 MHz. Abhilfe schafft normalerweise die Korrektur von Initialwerten für Timerregister um den Faktor 2. Wenn das nicht akzeptabel ist, kann immer noch die CPU Taktrate auf 2.45 MHz reduziert werden.
- Software, die auf einem Z80mini 1.00 lief, geht nun nicht mehr
Checken Sie die Liste der Modifikationen in der Einführung.
- Nach Aktivieren des Watchdogs treten Datenverluste auf
Es handelt sich möglicherweise um ein Hardware Problem. Siehe Watchdog Timer.
![]()
1 Diese Konvention stammt aus der Sprache C.
2 Wenn Bedarf bestehen sollte ist eine Rückschaltung in den Normal Modus per Softwarekontrolle realisierbar. Dazu muss lediglich ein modifiziertes Decoder GAL eingesetzt werden. Die Gleichungen zu diesem GAL sind auf Anfrage erhältlich. Der Adressbereich ... ist für diese Funktion reserviert und sollte von externen Adressdekodern nicht verwendet werden.
3 Die Pagenummer selektiert z.Zt. die Page 0. Diese Pagenummer ist für Erweiterungen reserviert. Applikationen sollten niemals die Page 0 selektieren.
4 Bei Verwendung der C[0... 1] Signale ist auf ein korrektes Design der Adressdekoder Logik zu achten. C[0... 1] kann zu nahezu beliebigen Zeitpunkten aktiv werden, da die Z80 Businterface Spezifikation das IORQ* Signal nicht nur bei IN und OUT Transfers aktiviert, sondern auch bei Interrupt Acknowledge Transfers. Die beste Methode um falsche Read- und Writestrobes zu unterdrücken ist die Verknüpfung von RD* oder WR* mit C[0... 1]. Intel 808x und Z80 Buskompatible Bausteine berücksichtigen das bereits, so dass hier keinerlei zusätzliche Logik erforderlich ist. Bei Verwendung von anderen, nicht voll kompatiblen Bausteinen, wie z.B. AD- und DA-Wandlern oder TTL Latches muss diese Tatsache jedoch mit in Betracht gezogen werden.
![]()
Anhang A Monitor V4.12
- Allgemeines
- Anschluss an einen PC
- Syntax der Monitorkommandos
- PLUS Version
- Monitor-Funktionen
- Speicherbelegung
- Restart-Vektoren
- Benutzerdefinierte Befehle
- Download und Upload
- Autostart
- Die Source zum Monitor
- Laptops und Notebooks
![]()
A1 Allgemeines
Möchte man eine Software auf dem SBC implementieren, gibt es (mindestens) zwei Möglichkeiten: Variante 1 besteht darin, ein EPROM zu brennen, dieses auf den SBC zu stecken, und (wenn das Hoffen vergeblich war) zu grübeln, warum "er" nicht macht, was er machen soll. Variante zwei ist der schnellere Weg: Sie koppeln den SBC über seine serielle Schnittstelle an einen PC und laden von dort das zu testende Programm in das RAM. Dazu ist auf beiden Seiten (PC und SBC) ein gewisses Mass Intelligenz vonnöten. Der PC muss nur Tastatureingaben über die serielle Schnittstelle senden und empfangene Zeichen auf dem Bildschirm darstellen. Die dazu notwendige Software (und einiges mehr) steckt in dem Terminalprogramm 'TM.EXE'. Der SBC dagegen erledigt die eigentliche Arbeit mittels eines Monitorprogramms im EPROM.
Nach dem Einschalten meldet sich der Monitor mit einer einzeiligen Ausschrift. Unmittelbar danach erfolgt ein Speichertest der RAM-Bereiche 0x8000-0xBFFF und 0xC000-0xFFFF. Dieser Speichertest erfolgt zerstörungsfrei, das RAM wird nicht gelöscht.
Schliesslich erfolgt noch ein Test, ob die RealTimeClock angesprochen werden kann. Das (nicht-) Vorhandensein der RTC wird auch angezeigt.
Kann durch den Selbsttest kein Speicher detektiert werden, so wird zur leichteren Fehlerdiagnose auf den Leitungen RTS und DTR des SIO-Kanals B ein alternierendes Signal erzeugt, welches leicht mit einem Logikprüfer o.ä. festgestellt werden kann.
Nach diesen Selbsttests erscheint das Prompt-Symbol; Sie können nun an's Werk gehen.
Der Monitor arbeitet zeilenorientiert. Nach einem Kommandowort, bestehend aus einem Buchstaben, können je nach Kommando 0 bis N numerische Parameter angegeben werden. Das Kommando wird mit RETURN/ENTER abgeschlossen. Korrekturen an der aktuellen Eingabezeile können mit BACKSPACE gemacht werden.
Einige Kommandos (Change Register, Change Memory) gehen in einen interaktiven Modus, in dem mit SPACE auf das nächste Element geschaltet, mit den Hexziffern eine Eingabe gemacht und mit RETURN/ENTER der interaktive Modus beendet wird.
Ein online Manual ist mit den Kommandos H oder ? verfügbar.
![]()
A2 Anschluss an einen PC
Der Monitor benutzt den Kanal B der internen SIO. Wie der IF232LP Modul angeschlossen werden muss, ist aus dem Kapitel Inbetriebnahme zu ersehen.
Der Terminalemulator auf dem PC muss auf 19200Baud, 8 Datenbits, no Parity und 1 Stoppbit eingestellt werden. Bei Verwendung von 'TM.EXE' muss nichts weiter eingestellt werden - diese Parameter sind Default.
Das Kabel zwischen IF232LP Modul und dem PC ist ein normales Nullmodemkabel, wie es im PC Fachhandel für ATs und XTs zu haben ist. Der Monitor setzt alle Handshakeausgänge auf aktiv. Er ignoriert alle Handshakeeingänge, so dass der Anschluss an PCs und andere Hosts von daher problemlos ist.
![]()
A3 Syntax der Monitorkommandos
Adressangaben sind stets hexadezimal ohne 0x oder nachgestelltes h. Alle angegebenen Endadressen beziehen sich auf das folgende, nicht mehr enthaltene Byte. Ein Memory-Dump von 0x1000 bis 0x1FFF wird also in der Form angegeben. Die Notation D F000 0 bedeutet Dump von 0xF000 bis inclusive 0xFFFF.
![]()
A4 PLUS Version
Einige spezielle Funktionen sind nur in der erweiterten PLUS-Version des Monitors verfügbar; wo dies der Fall ist, wird ausdrücklich darauf hingewiesen. Updates von der STD auf die PLUS-Version sind erhältlich, dazu sollte Ihrem Produkt eine Update-Abrufkarte beiliegen. Wenn dies nicht der Fall ist, wenden Sie sich bitte an Ihren Händler.
Für Hinweise auf sinnvolle Ergänzungen oder bislang nicht erkannte Fehler sind die Autoren selbstverständlich jederzeit dankbar. Änderungen an der Monitorsoftware sowie der Dokumentation bleiben, auch ohne vorherige Ankündigung, vorbehalten.
![]()
A5 Monitor-Funktionen
B nnnn Dieses Kommando steht nur in der PLUS Version des Monitors zur Verfügung. Setzt einen Breakpoint auf Adresse nnnn. Es sind bis zu vier Breakpoints möglich. Der Monitor erzeugt Breakpoints durch Eintragen eines 0xFF-Bytes in den Speicher (RAM oder EEPROM) auf der angegebenen Adresse. Dies führt zur Ausführung eines RST38. Dabei werden Register, Stack und Code angezeigt und das Programm angehalten. Das Eintragen der Breakpoints in den Speicher erfolgt automatisch vor jedem G-Befehl. Ebenso wird der Original-Speicherinhalt bei Ende der Programmabarbeitung wieder hergestellt.
Ein Breakpoint wird nicht gesetzt, wenn der nächste abzuarbeitende Befehl auf derselben Adresse lokalisiert ist wie der einzutragende Breakpoint. Setzen Sie beispielsweise einen Breakpoint auf den Beginn eines Unterprogramms und starten Sie mittels G nnnn Ihr Hauptprogramm, so wird der Monitor beim ersten Aufruf des Unterprogramms eine Unterbrechung auslösen. Setzen Sie die Programmausführung fort (G-Kommando), so kann der Breakpoint nicht gesetzt werden, da die aktuelle Adresse (Beginn des Unterprogramms) gleich der Location des Breakpoints (Ebenfalls am Beginn des Unterprogramms) ist. Sie Lösen das Problem, indem Sie mit X einen weiteren Befehl abarbeiten und erst dann mit G die Programmausführung fortsetzen.
B Dieses Kommando steht nur in der PLUS Version des Monitors zur Verfügung. B zeigt alle Breakpoints an.
C nnnn Dieses Kommando steht nur in der PLUS Version des Monitors zur Verfügung. Löscht den Breakpoint auf Adresse nnnn.
C Dieses Kommando steht nur in der PLUS Version des Monitors zur Verfügung. Löscht alle Breakpoints.
D nnnn Zeigt den Speicherinhalt ab Adresse nnnn an. D nnnn mmmm Zeigt den Speicherinhalt von nnnn bis mmmm an. Nach 0x100 Byte pausiert die Bildschirmausgabe, weiter mit ENTER, Abbruch mit ESC. E nnnn Speicherinhalt ändern ab Adresse nnnn. Funktioniert auch im EEPROM. Das nächstes Byte erreichen Sie mit der LEERTASTE, zurück mit BACKSPACE. Es existiert die Möglichkeit einer automatischen Sprungweitenberechnung innerhalb des E-Kommandos. Bei Eingabe eines Punkts erfolgt die Ausgabe der aktuellen Edit-Adresse (Position des Eingabe-Cursors) und die Abfrage der Adresse des Sprungziels. Aus beiden Adressangaben wird die Differenz gebildet und um 1 dekrementiert als Sprungweite auf der aktuellen Edit-Adresse notiert.
F nnnn mmmm dd Füllt den Speicherbereich von nnnn bis mmmm mit dem Byte dd. Funktioniert auch im EEPROM-Bereich (Vorsicht! 16KB dauern bis zu 160 Sekunden!) G nnnn Startet ein Anwenderprogramm auf Adresse nnnn. Vorher werden die Register incl. Stackpointer mit den aktuellen Werten (siehe Z- und R-Kommando) geladen sowie alle Breakpoints in den Speicher eingetragen (siehe auch B-Kommando!). G Startet ein Anwenderprogramm. Als Startadresse gilt der Wert im PC-Register. Sonst wie oben. H Zeigt eine Seite mit der Kurzbeschreibung aller Monitorkommandos an. I nn Zeigt den aktuellen Wert des I/O-Ports nn an. I nn mm Zeigt den aktuellen Wert des I/O-Ports nn an. Der Befehl wird mm-mal wiederholt. I Zeigt den aktuellen Wert des zuletzt angegebenen Ports an. L Lädt ein Intel-Hex-File in den Speicher (funktioniert auch mit EEPROM, 10ms Verzögerung pro Byte berücksichtigen!). Die Zieladresse und Länge sind Bestandteil der Intel-Hex-Datei. Die interaktive Benutzung dieses Kommandos ist ungünstig, Download erfolgt über die Batchdatei 'DL.BAT' unter Verwendung des Terminalprogramms 'TM.EXE'. M nnnn mmmm dddd Speicherbereich von nnnn bis mmmm nach dddd kopieren. Bereiche dürfen sich auch überlappen. Das Kommando funktioniert auch im EEPROM. 0 nn m1... Ausgabe des Bytes m1 (und aller nachfolgenden Bytes) zum I/O-Port nn. 0 m1 Ausgabe des Bytes m1 zum zuletzt benutzten I/O-Port. P nnnn mmmm Ausgabe des Speicherbereichs nnnn bis mmmm im Intel-Hex-Format. Ziel ist Standard-Output, also normalerweise der Bildschirm. Die Interaktive Benutzung dieses Kommandos ist ungünstig, Upload erfolgt über die Batchdatei 'UL.BAT' unter Verwendung des Terminalprogramms 'TM.EXE'. R Zeigt alle Register an und ermöglicht das Ändern derselben. Zum nächsten Register mit der Leertaste, zurück mit Bachspace. S DD MM YY hh mm ss Stellen der Echtzeituhr RTC72421 (wenn vorhanden). DD=Tag, MM=Monat, YY=Jahr, hh=Stunde, mm=Minute, ss=Sekunde. T Zeigt Datum und Zeit der Echtzeituhr an. Fehlt der Uhren-IC oder läuft die Uhr nicht, so erfolgt nach ca. 1,5s ein Abbruch der Funktion, ansonsten ist jederzeit ein Abbruch mit ESC möglich. U nnnn Dieses Kommando steht nur in der PLUS Version des Monitors zur Verfügung. Disassembliert den Code beginnend mit Adresse nnnn. Ausgegeben wird die aktuelle Adresse, die zugeordnete Assembleranweisung und die Werte der vorgefundenen Code-Bytes. Die Ausgabe erfolgt immer seitenweise. Die Ausgabe kann mit ESC abgebrochen oder mit einer beliebigen anderen Taste fortgesetzt werden.
U nnnn mmmm Dieses Kommando steht nur in der PLUS Version des Monitors zur Verfügung. Disassembliert nur den Bereich nnnn bis mmmm.
U Dieses Kommando steht nur in der PLUS Version des Monitors zur Verfügung. Disassembliert beginnend mit dem aktuellen Stand des Programcounter Registers.
V Zeigt die Copyright-Notiz und die Versionsnummer an. W Führt kontinuierlich A/D-Wandlungen auf allen 4 Kanälen des ADC7802 aus. Eine gescheiterte Wandlung wird über Timeout erkannt und abgebrochen (Fehlerursache: kein ADC vorhanden oder ADC defekt). Die Messungen können jederzeit mittels ESC abgebrochen werden. X nnnn Dieses Kommando steht nur in der PLUS Version des Monitors zur Verfügung. Führt einen einzigen Befehl auf Programmadresse nnnn aus (Singlestep). Diese Funktion ist rein softwaremässig realisiert, es ist keinerlei spezielle externe Hardware notwendig!
Der Monitor erzeugt automatisch einen Breakpoint nach dem aktuellen Befehl. Auch bei Sprungbefehlen bzw. Unterprogrammverzweigungen wird die Folgeadresse korrekt ermittelt! Die Register werden mit den Anwenderwerten initialisiert, das PC-Register mit der Adresse nnnn geladen und der Singlestep-Breakpoint wird in den Speicher eingetragen. Nach Abarbeitung des Befehls erfolgt ein RST38. Dieser führt zur Sicherung und Anzeige der Registerinhalte zzgl Stack und Code. Der Singlestep-Breakpoint im Speicher wird wieder durch das Originalbyte ersetzt und in der Kommandozeile wird der Befehl X (als Vorschlag) ausgegeben. Dadurch kann mit ENTER gleich der folgende Befehl abgearbeitet werden usw.
Zwei Einschränkungen sind zu beachten: Der Einzelschrittbetrieb funktioniert nur im RAM oder EEPROM, da im ROM kein Breakpoint eingetragen werden kann. Der Breakpoint kann auch nicht eingetragen werden, wenn die Adresse des abzuarbeitenden Befehls identisch ist mit der Breakpoint Adresse (siehe auch B-Kommando). In beiden Fällen würde das Anwenderprogramm bedingt durch den fehlenden Breakpoint "durchlaufen".
X Dieses Kommando steht nur in der PLUS Version des Monitors zur Verfügung. Singlestep: Befehl auf der aktuellen Programmadresse (Inhalt des PC-Registers) wird abgearbeitet. Sonst wie oben.
Z Dieses Kommando steht nur in der PLUS Version des Monitors zur Verfügung. Zeigt Register sowie Stackinhalt und die nachfolgenden Codebytes an. Editieren ist hier nicht möglich, siehe dazu R- bzw. E-Kommando.
! Initialisiert die Anwender-Register etc. Dies sollte stets vor jeglichem Debugging erfolgen! Folgende Aktionen werden eingeleitet: Die Anwenderregister werden alle mit 0xFF initialisiert. Der User-Stack wird auf 0xBF00 und das PC-Register wird auf 0xC000 gesetzt. Der User-Stack wird im Bereich 0xBE00 bis 0xBEFF mit 0x00 beschrieben (zwecks Übersichtlichkeit). Und die Breakpoint-Tabelle wird gelöscht (wichtig!). ^ENTER Zeigt das zuletzt eingegebene Kommando erneut an. Die Zeile kann weiter editiert und dann mit ENTER bestätigt werden. ^BACKSPACE Löscht die Eingabezeile. ^D Führt einen Software-RESET aus (JP 0000h). ![]()
A6 Speicherbelegung
Der Monitor belegt derzeit die ersten 10KB im EPROM ab Adresse 0x0000. Die Arbeitszellen incl. Monitor-Stack liegen im RAM im Bereich 0xBF00 bis 0xBFFF. Der User-Stack liegt standardmässig ab BF00 abwärts.
![]()
A7 Restart-Vektoren
Die Vektoren für RST 08 bis RST 30 sind umgeleitet zum RAM-Bereich ab 0x8000. Die Vektoren im Einzelnen:
RST 08 ; 0x8000 RST 10 ; 0x8003 RST 18 ; 0x8006 RST 20 ; 0x8009 RST 28 ; 0x800C RST 38 ; 0x800F NMI ; 0x8012
![]()
A8 Benutzerdefinierte Befehle
Ab Adresse 0x7F00 ist ein Sprungverteiler angelegt. Für jedes Kommando ist ein Eintrag wie folgt vorgesehen:
Funktion Grösse Kennbuchstabe (ASCII)
Startadresse1 Byte
2 ByteDie Länge eines Eintrags im Sprungverteiler beträgt somit 3 Byte. Die ersten Einträge sind bereits belegt, weitere stehen dem Benutzer zur freien Verfügung. Im Monitoreprom haben die freien Bytes den Wert 0xFF, dadurch ist eine Ergänzung leicht möglich. Das letzte Byte des Sprungverteilers muss den Wert 0xFF aufweisen.
![]()
A9 Download und Upload
Anwenderdateien können nach Verlassen des Terminalprogramms mit der Batch-Datei 'DL.BAT' zum SBC übertragen werden. Starten Sie den Download mit DL datei wobei datei für den Namen (ohne Erweiterung) Ihres zu transferierenden Anwenderprogramms steht. Es muss im Intel-Hex-Format vorliegen. Anfangs- und Endadresse sind Bestandteil der Intel-Hex-Datei und müssen deshalb nicht explizit angegeben werden. Die Datei hat die Endung '.HEX'.
Während des Downloads werden einige Meldungen ausgegeben und anschliessend wird in das Monitorprogramm verzweigt. Es kann sofort interaktiv weitergearbeitet werden.
Auf ähnlich Art und Weise ist es möglich, Speicherbereiche des SBC als Datei zu abzulegen. Einen solchen Upload starten Sie wiederum nach Verlassen des Terminalprogramms mit dem Batch-Befehl 'UL.BAT. Die Syntax lautet: UL aadr eadr datei
aadr ist die Startadresse und eadr ist die Endadresse (excl.) des zu speichernden Bereiches. datei ist der zu vergebende Dateiname. Die Dateierweiterung '.HEX' wird automatisch angehängt. Es empfiehlt sich, die angelegte Datei mit einem einfachen Editor zu überprüfen bzw. ggf. nachzubearbeiten.
![]()
A10 Autostart
Ist an der SIO-B des SBC kein PC bzw. kein IF-Modul angeschlossen, so ist die CTS*-Leitung inaktiv. In diesem Fall wird nach einem Reset sofort zur Adresse 0xC000 verzweigt. Dieser Autostart ist für Anwenderprogramme im RAM vorgesehen.
Zur Erhöhung der Zuverlässigkeit sollte die CTS*-Leitung mit einem Pull-Up Widerstand beschaltet werden.
![]()
A11 Die Source zum Monitor
Bei Bedarf können Sie den Quelltext des Monitorprogramms beim Autor (Oliver Thamm, MCT Lange & Thamm, Leipzig) erwerben, um auch umfangreichere Ergänzungen vornehmen zu können. Die Source wurde mit dem ASZ80 des Entwicklungspakets übersetzt. Da die Syntax des ASZ80 relativ eng an die von Zilog vorgegebenen Konventionen angelehnt ist, sollte kein grosser Aufwand bei der Übersetzung mit anderen Assemblern nötig sein.
![]()
A12 Laptops und Notebooks
Bei einigen PCs - insbesondere Laptops und Notebook PCs - ist die Zeichenausgabe über das BIOS so langsam, dass gelegentlich bei Verwendung von 'TM.EXE' Zeichen verloren gehen können. In solchen Fällen kann der Einsatz von anderen Kommunikationsprogrammen Abhilfe schaffen.
![]()
Anhang B Crossassembler ASZ80
![]()
B1 Notation
Text in `[' `]' eingeschlossen ist optional. Die `[' `]' werden nicht im Quelltext oder in der Kommandozeile angegeben, sondern dienen nur der Notation in diesem Handbuch.
![]()
B2 Kommandozeile
asz80 [-o output] [-l listing] [-s symbols] [-d] inputDie optionalen Parameter in der Kommandozeile können in beliebiger Reihenfolge angegeben werden.
Die Quelltextdatei `input' muss nach den optionalen Parametern angegeben werden. Es kann jeweils nur eine Datei übersetzt werden. Der Dateiname '-' bezeichnet die Standardeingabe.
Mit `-l listing' wird ein Assemblerlisting `listing' erzeugt, andernfalls erfolgt die Ausgabe von Fehlern auf der Konsole. Der Dateiname hat keine Standardendung. Am Ende des Assemblerlaufs wird die Anzahl der gefundenen Fehler und Warnings ausgegeben. Diese Ausgabe entfällt wenn beide 0 sind.
Nur wenn `-h output' oder `-o output' angegeben ist, wird eine Ausgabedatei `output' im Intel-Hex-Format erzeugt. Tritt beim Übersetzen ein Fehler auf, wird keine Ausgabedatei erzeugt. Der Dateiname hat keine Standardendung.
Mit `-s symbols' wird eine Symboltabelle `symbols' erzeugt. Diese kann mit sort sortiert werden. Der Dateiname hat keine Standardendung.
Mit `-d' werden temporäre Dateien des Assemblers nicht gelöscht.
Umgebungsvariable
Wenn die Umgebungsvariable `TEMP' definiert ist werden temporäre Dateien in diesem Verzeichnis statt dem aktuellen abgelegt. Die Variable `TEMP' kann z.B. mit dem Kommando `set TEMP=c:\tmp' in `AUTOEXEC.BAT' gesetzt werden. Der Name des Verzeichnisses darf kein abschliessendes `\' enthalten.
![]()
B3 Quelltextdatei
Die Quelltextdatei ist eine Textdatei mit einer Instruktion je Zeile. Symbole müssen durch Leerzeichen, Tabulatorzeichen oder spezielle Zeichen wie Operatoren oder Klammern getrennt werden.
Die Quelltextzeile besteht aus 4 Teilen
[Label] [Opcode [Operands] ] [; comments]
- Labels:
- Ein Symbol das in der ersten Spalte beginnt ist ein Label. Ein Label wird benutzt um ein Symbol zu definieren. Der Ort des Labels ergibt den Wert, normalerweise die Speicheradresse der durch die Zeile generierten Daten. Labels zu Beginn von Maschineninstruktionen sind optional. Einige Pseudooperatoren benötigen Labels, bei anderen sind sie verboten. Gross- und Kleinschreibung werden unterschieden.
- Opcodes:
- Das erste Symbol einer Zeile, das nicht in der ersten Spalte beginnt ist der Opcode. Alle Symbole nach dem Opcode sind Symbolreferenzen. Opcodes werden als getrennte Menge von Symbolen behandelt. Damit ist es möglich, dass ein Label und ein Opcode den gleichen Namen besitzen. Gross- und Kleinschreibung werden nicht unterschieden.
- Operanden:
- Der Rest einer Zeile besteht aus den zugehörigen Operanden. Diese sind arithmetische Ausdrücke, Symbolreferenzen oder andere, durch die Operation bestimmten Operanden.
- Kommentare:
- Kommentare beginnen mit `;', alles was in einer Zeile dem Strichpunkt folgt wird ignoriert. Zeilen, die nur aus einem Kommentar bestehen, werden wie Leerzeilen behandelt.
Ein Beispiel
; nur ein kleines Beispiel org $700 label equ * ; setzt label an die aktuelle Position add a, (hl) endEingabezeilen müssen kleiner als 256 Zeichen sein. Bei längeren Zeilen erfolgt eine Fehlermeldung. Leerzeilen werden als Eingabe ignoriert aber in das Listing kopiert.
![]()
B4 Syntaktische Elemente
Symbole
Symbole sind Zeichenketten, die mit einem der folgenden Zeichen beginnen:
A-Z a-z ! & ^ _ ~Der Rest der Zeichenkette besteht aus keinem oder mehr der folgenden Zeichen:
0-9 A-Z a-z ! & ^ _ ~Symbole sind in ihrer Länge nicht beschränkt, alle Zeichen sind signi- fikant. Gross- und Kleinschreibung werden unterschieden.
Reservierte Variablennamen
Maschinenspezifische Namen und Operatornamen, die in Symbolausdrücken auftreten können, teilen die Symboltabelle mit Labels, so dass sie nicht als Labels benutzt werden können.
Numerische Konstanten
Numerische Konstanten können dezimal, hexadezimal, oktal oder binär angegeben werden. Konstanten werden als 32-Bit Zahlen verarbeitet. Falls sie nicht in das Zielfeld passen, erfolgt eine Fehlermeldung.
- Dezimale Konstanten:
- Eine oder mehrere dezimale Ziffern `0-9', gefolgt von einem optionalen `d' oder `D'.
- Hexadezimale Konstanten:
- Eine oder mehrere hexadezimale Ziffern `0-9 a-f A-F', die von einem `$' angeführt werden.
Eine dezimale Ziffer gefolgt von optionalen hexadezimalen Ziffern und einem `h' oder `H'.- Oktale Konstanten:
- Eine oder mehrere oktale Ziffern `0-7', die von einem `@' angeführt werden.
Eine oder mehrere oktale Ziffern `0-7', gefolgt von einem `o', `O', `q' oder `Q'.- Binäre Konstanten:
- Eine oder mehrere binäre Zahlen `0' oder `1', die von einem `%' angeführt werden.
Eine oder mehrere binäre Zahlen `0' oder `1', gefolgt von einem `b' oder `B'.Beispiele
123 dezimal 123d dezimal $faf hexadezimal 0fafh hexadezimal, die führende Null ist nötig um die Zahl von dem Symbol 'fafh' zu unterscheiden. @1234 oktal 1234Q oktal %010101 binär 010101b binärStringkonstanten
Stringkonstanten werden in Anführungszeichen `"', oder Hochkommas `'' eingeschlossen. Eine Zeichenkette, die mit Hochkommas gebildet wird, kann Anführungszeichen enthalten und umgekehrt. Die Escapesequenzen entsprechen den von C her bekannten im ASCII-Code:
\a : Das Klingelzeichen, es hat den Wert 7. \b : Das Backspacezeichen, es hat den Wert 8. \t : Das Tabulatorzeichen, es hat den Wert 9. \n : Das Zeilenvorschubzechen, es hat den Wert 10. \v : Das vertikale Tabulatorzeichen, es hat den Wert 11. \f : Das Blattvorschubzeichen, es hat den Wert 12. \r : Das Wagenrücklaufzeichen, es hat den Wert 13. \' : Das Hochkomma. \" : Die Anführungsstriche. \\ : Der umgekehrte Schrägstrich (Backslash) selbst. \Oktalzahl: Der Zeichenwert wird in oktaler Darstellung angegeben. Es werden maximal 3 Ziffern ausgewertet. \xHexzahl : Der Zeichenwert wird in hexadezimaler Darstellung angegeben. Es werden maximal 2 Ziffern ausgewertet.![]()
B5 Ausdrücke
Ausdrücke bestehen aus:
- Symbol Referenzen
- Positionszähler Referenzen
- numerische Konstanten
- Stringkonstanten
- Operatoren
Symbole
Eine Symbolreferenz ist der Name eines Eintrags in der Symboltabelle, der mit einem numerischen Wert verbunden ist. Dieser Wert ist entweder die Speicheradresse einer Instruktion dessen Label das Symbol ist, oder der Wert eines Ausdrucks der mit `SET' oder `EQU' definiert wird.
Positionszähler
Der reservierte Name `*' steht in einem Ausdruck für die Position des ersten Bytes der aktuellen Instruktion.
Stringkonstanten
Ein leerer String hat den Wert null. In den meisten Fällen werden nur die ersten beiden Bytes ausgewertet. Besteht der String aus einem Zeichen wird dieses in den zugehörigen Wert gewandelt. Besteht der String aus zwei oder mehr Zeichen, ergibt sich der Wert wie folgt: 256 * (erstes Zeichen) + zweites Zeichen.
Operatoren
- + Ausdruck
- Unäres Plus. Das unäre Plus hat keinen Einfluss auf das Ergebnis des Ausdrucks.
- - Ausdruck
- Unäres Minus. Das Ergebnis ist der negative Ausdruck.
- NOT Ausdruck
- Boolesches Komplement. Das Ergebnis ist 0 wenn der komplementierte Ausdruck nicht 0 war und 1 wenn der komplementierte Ausdruck 0 war.
- HIGH Ausdruck
- Das Ergebnis ist das höherwertige Byte des Ausdrucks. `HIGH Ausdruck' ist äquivalent zu `((Ausdruck SHR 8) AND 0ffh)'.
- LOW Ausdruck
- Das Ergebnis ist das niederwertige Byte des Ausdrucks. `LOW Ausdruck' ist äquivalent zu `(Ausdruck AND 0ffh)'.
- Ausdruck1 * Ausdruck2
- Ausdruck1 / Ausdruck2
- Ausdruck1 + Ausdruck2
- Ausdruck1 - Ausdruck2
- Die Grundrechenarten.
- Ausdruck1 MOD Ausdruck2
- Das Ergebnis ist der Rest nach der Division von Ausdruck1 durch Ausdruck2.
- Ausdruck1 SHL Ausdruck2
- Ausdruck1 SHR Ausdruck2
- Das Ergebnis ist der Ausdruck1 um Ausdruck2 Bit nach links (`SHL') oder rechts (`SHR') geschoben.
- Ausdruck1 GT Ausdruck2
- Ausdruck1 GE Ausdruck2
- Ausdruck1 LT Ausdruck2
- Ausdruck1 LE Ausdruck2
- Ausdruck1 NE Ausdruck2
- Ausdruck1 EQ Ausdruck2
- Ausdruck1 > Ausdruck2
- Ausdruck1 >= Ausdruck2
- Ausdruck1 < Ausdruck2
- Ausdruck1 <= Ausdruck2
- Ausdruck1 = Ausdruck2
- Ausdruck1 <> Ausdruck2
- Das sind die relationalen Ausdrücke. Wenn das Ergebnis der Relation wahr ist wird der Ausdruck zu 1, sonst zu 0. Die Operatoren sind nicht assoziativ. Der Ausdruck `1 < 3 < 5' ist nicht zulässig.
- Ausdruck1 AND Ausdruck2
- Ausdruck1 OR Ausdruck2
- Ausdruck1 XOR Ausdruck2
- Bitweise boolesche Ausdrücke.
- DEFINED Symbol
- Wenn das Symbol zu diesem Zeitpunkt der Übersetzung bereits definiert ist liefert dieser Ausdruck 1 sonst 0.
- ( Ausdruck )
- Klammerung ist möglich und folgt den allgemein üblichen Konventionen.
Rangfolge
Die Rangfolge der Operatoren vom niedrigsten zum höchsten.
HIGH LOW OR XOR AND NOT GT GE LE LT NE EQ > >= < <= = <> + - * / MOD SHL SHR unäre + - DEFINED ( Ausdruck )![]()
B6 Instruktionen
Dateien einlesen
INCLUDE filename oder INCL filenameAls Eingabe wird zunächst die angegebene Datei vollständig gelesen, bevor mit der Eingabe der aktuellen Datei fortgefahren wird. Die `INCLUDE' Direktive kann bis zu einer Tiefe von 10 geschachtelt werden.
Bedingte Assemblierung
IF expression . . . [ELSE] . . . ENDIWenn der Ausdruck `expression' nicht null ist, werden alle Instruktionen zwischen diesem `IF' und dem dazugehörigen `ELSE' oder `ENDI' assembliert. Wenn der Ausdruck null ist, oder aufgrund von Vorwärtsreferenzen nicht zu berechnen, werden alle Instruktionen zwischen diesem `IF' und dem dazugehörigen `ELSE' oder `ENDI' ignoriert. Bedingte Ausdrücke können bis zu einer Tiefe von 32 geschachtelt werden. Zu beginn einer `IF' Instruktion sind Labels nicht erlaubt. Die Instruktionen zwischen dem optionalen `ELSE' und `ENDI' werden assembliert wenn der Ausdruck gleich null ist. Die `ENDI' Instruktion beendet die Behandlung einer `IF' Instruktion.
Symbolische Konstanten
Label EQU expressionDas Label wird erzeugt und auf das Ergebnis des Ausdrucks gesetzt. Symbole die mit `EQU' definiert werden, dürfen zuvor nicht existieren und dürfen nicht umdefiniert werden.
Label SET expressionDer Wert des Labels wird auf das Ergebnis des Ausdrucks gesetzt. Symbole die mit `SET' definiert wurden, können mit einer erneuten `SET' Instruktion verändert werden. Beispiel:
counter set 1 counter set counter+1 counter set counter+1Setzen des Positionszählers
Die Adresse des erzeugten Codes kann mit `ORG' geändert werden.
[Label] ORG expressionDer Positionszähler wird auf den Wert des Ausdrucks `expression' ge- setzt. Das optionale Label erhält den neuen Wert des Positionszählers.
Speicher reservieren
[Label] RMB expression oder [Label] RESERVE expressionDie Instruktion `RMB' bewegt den Positionszähler um die Anzahl der in dem Ausdruck angebenen Bytes weiter. Das Label wird auf die erste Position dieses Bereichs gesetzt.
Datendefinition
[Label] BYTE expression [, expression] . . . oder [Label] FCB expression [, expression] . . . oder [Label] DB expression [, expression] . . .Hiermit wird für jeden angegebenen Ausdruck der Liste ein Byte generiert.
[Label] WORD expression [, expression] . . . oder [Label] FDB expression [, expression] . . . oder [Label] DW expression [, expression] . . .Hiermit wird für jeden angegebenen Ausdruck der Liste ein Integer mit zwei Bytes Länge generiert. Das optionale Label wird auf die erste Position der Daten gesetzt.
Stringdefinition
[Label] STRING string [, string] . . . oder [Label] FCC string [, string] . . .Der angegebene String wird als Bytesequenz definiert.
Auswahl des Befehlsatzes
CPU stringMit dieser Instruktion wird der Prozessorbefehlsatz ausgewählt. Standard ist der Z80. Liste der unterstützten Prozessoren:
- `180' für 64180
- `z80' oder `Z80'
- `85' für 8085
- `80' für 8080
Maschineninstruktionen des Z80
Die Schreibweise der Maschineninstruktionen hält sich an den von Zilog vorgegebenen Standard. Gross- und Kleinschreibung werden nicht unterschieden. Es gibt folgende Ausnahmen:
- EX AF,AF statt EX AF,AF'
www.mct.de: Produkte: Einplatinencomputer: Z80mini3