IndexHomepage^

provisorisch!

Z80mini3 - Handbuch

  1. Einführung
    1. Auslieferungszustand
    2. Inbetriebnahme
    3. Der Z80mini Version 3.10
    4. Unterschiede zwischen der Version 3.10 und 3.00
    5. Logische Pegel
    6. Numerische Angaben
  2. Adressbelegung
    1. Normal Mode
    2. CPM Mode
  3. Baugruppen
    1. Interrupts
    2. Power Down Betriebsarten
    3. Stromversorgung
    4. RESET
    5. V.24 RESET
    6. Watchdog Timer
    7. RAM
    8. ROM
    9. EEPROM
    10. Interner PIO
    11. Interne SIO
    12. Interner CTC
    13. RTC
    14. 10MHz Version
  4. Steckverbinder
    1. Stromversorgungs Stecker J1
    2. Serielle Port A/B Stecker ST4 und ST5
    3. Port A/B Stecker ST3 und St1
    4. Bus Interface Stecker ST2
    5. Timer Port Stecker ST6
  5. Jumper
  6. Bei Problemen

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:

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:

Zusatzbaugruppen erlauben den schnellen Einsatz in unterschiedlichsten Anwendungen:

Last but not least - die Software:

^

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.

^

1.2 Inbetriebnahme

Foto

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.

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:

^

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:

^

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:

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:

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.

Die Bereiche der einzelnen Zeiteinheiten:
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:

^

4 Steckverbinder

Foto

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

Foto

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

^

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

  1. Allgemeines
  2. Anschluss an einen PC
  3. Syntax der Monitorkommandos
  4. PLUS Version
  5. Monitor-Funktionen
  6. Speicherbelegung
  7. Restart-Vektoren
  8. Benutzerdefinierte Befehle
  9. Download und Upload
  10. Autostart
  11. Die Source zum Monitor
  12. 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)
Startadresse
1 Byte
2 Byte

Die 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

  1. Notation
  2. Kommandozeile
  3. Quelltextdatei
  4. Syntaktische Elemente
  5. Ausdrücke
  6. Instruktionen
^

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] input

Die 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)
        end

Eingabezeilen 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är

Stringkonstanten

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:

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    filename

Als 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]
  . . .
  ENDI

Wenn 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 expression

Das 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 expression

Der 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+1

Setzen des Positionszählers

Die Adresse des erzeugten Codes kann mit `ORG' geändert werden.

  [Label] ORG expression

Der 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 expression

Die 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 string

Mit dieser Instruktion wird der Prozessorbefehlsatz ausgewählt. Standard ist der Z80. Liste der unterstützten Prozessoren:

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:

^
www.mct.de: Produkte: Einplatinencomputer: Z80mini3
IndexHomepage^