{home}Li-Pro.Net{/home}
Das Familiennetzwerk
Home | Stephan Linz | Projekte | Hobby | Kontakt | Nutzerzugang


Inhalt

> Grundsystem
> Hardware
>
> Hinweise und Ergänzungen

Software

2. Teil der FA Beitragsserie

Abschriften aus FUNKAMATEUR:
  • FA-6/1988 S.284,289-290
  • FA-7/1988 S.335-336,341-342
  • FA-8/1988 S.387-388,393-394
  • FA-9/1988 S.439-440,445-446
  • FA-10/1988 S.491-492,497-498
  • FA-11/1988 S.535
ISSN: 0016-2833; ThULB Jena: 4 Z 479D (Magazin)

Komfortabler Personalcomputer für den erfahrenen Amateur

Dipl.-Ing. A. MUGLER - Y27NN, Dipl.-Ing. H. MATHES


5 Betriebssystem
5.1 Die Struktur
5.2 Der Softwarekern
5.3 Das Kassettenmodul V-Tape
5.3.1 Die Magnetbandarbeit
5.3.2 Der Kommandoprozessor
5.4 Der Debugger
5.5 Das RAM-Floppy-System
5.6 Laden und Speichern von Programmen
6 Zusammenfassung
Anhang C: Tabellen zur Software

Literatur

[1] H. Kieser, M. Meder: "Mikroprozessortechnik - Aufbau und Anwendung des Mikroprozessorsystems U880"
4. Auflage; VEB Verlag Technik, Berlin 1986
ISBN : 3-341-00153-0; ThULB Jena2002 A 11035 (Magazin) oder 86/341 (ZwB Physik)
[2] E. Kühn: "Handbuch TTL und CMOS Schaltkreise"
2. Auflage; VEB Verlag Technik, Berlin 1986
ISBN: unbekannt; ThULB Jena: HB TTL (ZwB Physik)
3. bearb. Auflage; VEB Verlag Technik, Berlin 1988
ISBN: 3-341-00570-6; ThULB Jena88 A 2794/1 oder 88 A 2794/1 (Magazin)
[3] L. Claßen, U. Oefler: "Wissensspeicher Mikrorechnerprogrammierung"
2. durchges. Auflage; VEB Verlag Technik, Berlin 1986
ISBN: 3-341-00017-8; ThULB Jena: 86/551 (ZwB Physik)
4. stark bearb. Auflage; VEB Verlag Technik, Berlin 1989
ISBN: 3-341-00712-1; ThULB Jena88 A 1736/1 (Magazin) oder 3911 (ZwB Chemie)
[4] H. Barthold, H. Bäurich: "Mikroprozessoren - mikroelektronische Schaltkreise und ihre Anwendung"
Reihe "electronica", Band 222/223 und 224/225
3. Auflage; Militärverlag der DDR, Berlin 1985
ThULB Jena: 85/320 oder 85/205 (ZwB Physik)
[5] "Systemhandbuch SCP, Anleitung für den Programmierer"
 VEB Robotron-Büromaschinenwerk, Sömmerda 1984
(dig. Aufbereitung: Hr. U. Zander; Vielen Dank)
 SCP Handbuch Teil 1 (A 5105 Ausgabe)
 SCP Handbuch Teil 2 (A 5105 Ausgabe)
 SCP Handbuch Anhang (A 5105 Ausgabe)
[6] W. Quendt, D. Rupp: "Datensichtgerät für Mikrorechner"
radio fernsehen elektronik 34 (1985), H.4, S.226-229
ISSN: 0033-7900 - 1436-1574; ThULB Jena: 4 Z 401 :34.1985 (Magazin)
[7] H. Sterl, K. Franke: "Mikrorechnergesteuertes fernsehkompatibles Datensichtgerät"
radio fernsehen elektronik 28 (1979), H.4, S.235-240
[8] F. Heyder: "Funkamateure entwickeln Amateurcomputer AC 1", Teil 5
FUNKAMATEUR 32 (1983), Fortsetzungsreihe ab Heft 12/1983
ISSN: 0016-2833; ThULB Jena: 4 Z 479D (Magazin)
[9] "Ergänzung zur Service Anleitung anett"
IS 2 Nr. 2304.02, Ausgabe 1977
[10] "Heimcomputer Z 9001, Anhang zum Programmierhandbuch"
(dig. Aufbereitung: Hr. U. Zander; Vielen Dank)
[11] "Bildschirmgerät K9811"; Robotron Betriebsdokumentation
[12] K.K. Streng: "Daten digitaler integrierter Schaltkreise - TTL Schaltkreise"
Militärverlag der DDR, Berlin 1985
ISBN: unbekannt; ThULB Jena: 85/187 oder 82/289 (ZwB Physik)
[13] "Aktive elektronische Bauelemente 1985"
VEB Kombinat Mikroelektronik
[14] B. Hübler, K.P. Evert: "Ausbaufähiger Mikrocomputer mit dem U 880 D"
Reihe "electronica", Band 227/228
Militärverlag der DDR, Berlin 1985
ThULB Jena: 86 A 165 (Magazin)
[15] H. Jungnickel: "Stromversorgungseinrichtungen"
VEB Verlag Technik, Berlin 1982
ISBN: unbekannt
[16] B. Bürger: "Halbleiterspeicher, Teil 2, Mikroelektronik - Information/Applikation"
VEB Kombinat Mikroelektronik - Bezirksvorstand KDT, Frankfurt (Oder) 1985
[17] Schmelovsky, Weisse, Engelmann: "Entzerrungsfreies Demodulationsverfahren für Magnetbandspeicher"
radio fernsehen elektronik 28 (1979), H.10, S.633
ISSN: 0033-7900 - 1436-1574; ThULB Jena: 4 Z 401 :28.1979 (Magazin)
[18] Troll, Hübner: "Daten- und Programmspeicherung auf Heimmagnetbandgeräten"
radio fernsehen elektronik 31 (1982), H.2, S.796 ff.
ISSN: 0033-7900 - 1436-1574; ThULB Jena: 4 Z 401 :31.1982 (Magazin)
[19] A. Stiller: "SuperTape mit dem Z80"
c't, H.4/1984, S.23 ff.
ISSN: 0724-8679
DtMB München: 1000/ZB 9235 (2000/Tech.)
TUHHUb Hamburg: TIZ-227 (Lesesall 1)
ZBFH Kiel: Z 433 (Ki 95)
GWLB Hannover: ZA 3054 (Magazin ZEN)
TIB/UB Hannover: ZO 2264 (L inf Z 240 / Haus 2)
[20] Krauß, Woschni, Kutschbach: "Handbuch der Datenerfassung"
VEB Verlag Technik, Berlin 1984
ISBN: unbekannt; ThULB Jena: 3135 (ZwB Chemie)
3. bearb. Auflage; VEB Verlag Technik, Berlin 1988
ISBN: 3-341-00516-1; ThULB Jena: 89 A 671/1 (Magazin) oder HB Datenerfassung (ZwB Physik)

5 Betriebssystem

5.1 Die Struktur

Das Betriebssystem des PC/M-Computers habe ich in Form einzelner Blöcke erstellt. Diese Blöcke (Module) arbeiten weitgehend unabhängig voneinander. Sie lassen sich damit sowohl leicht austauschen als auch an andere Hardware anpassen. Die nachfolgenden Abschnitte enthalten die erforderlichen Informationen. Die Ein- und Austrittspunkte der Module sind in Listen (Sprungvektoren) auf den ersten Adressen des jeweiligen Moduls zusammengefasst. eine Erweiterung ist möglich, wenn man weitere Sprungvektoren anfügt. Die Reihenfolge der Sprünge und deren Bedeutung sollte aber unter allen Umständen erhalten bleiben, um die Kompatibilität zu anderen Computern des gleichen Typs zu erhalten. Die Bestandteile des PC/M Grundbetriebssystems sind:
  • das BIOS (BASIC Input Output System)

  • der Debugger (Eingeben, Ändern und Testen von Programmen und Dateien)

  • das Kassettenmodul V-Tape (logischer Kern des Grundbetriebssystems und Kassettenteil)

Werden die Programmteile CCP (Control Command Processor) und BDOS (Basic Disc Operating System) nachgeladen, erhält man ein CP/M kompatibles Betriebssystem, für das es bereits eine Vielzahl von Programmen gibt.

5.2 Der Softwarekern

Kern des gesamten Betriebssystems ist eine Sammlung von Programmen, die die Hardware des Rechners unmittelbar steuern (physische Treiber). Diese Routinen tragen den Charakter von Standardschnittstellen, die dem CP/M bzw. SCP BIOS entsprechen [5]. Viele Programme von Heimcomputern oder anderen Systemen verwenden diese oder sehr ähnliche Schnittstellen, wodurch sich der Aufwand bei der Programmanpassung sehr stark reduzieren lässt. Voraussetzung ist natürlich eine ähnliche Hardware und der gleiche Mikroprozessortyp.

bild-5.jpg
Bild 5: Aufteilung des 192 KByte Speicherraumes
Das BIOS beginnt auf der Adresse 0xde00 des Computers. In lückenloser Folge stehen ab dieser Adresse Sprünge, die zu den einzelnen Programmteilen des BIOS verzweigen. Das BIOS ist in zwei Versionen vorgestellt; je nach Ausbaustufe des RAM Bereiches. Wird nur eine RAM Bank verwendet (64 KByte), so sind verschiedene Routinen im BIOS nicht verwendbar und das System ist nicht mehr als CP/M kompatibler Rechner einsetzbar. Trotzdem ist eine Fülle von Programmen nutzbar. Ist der Rechner mit insgesamt 128 KByte RAM ausgerüstet, kann bereits mit einem RAM Floppy von 62 KByte gearbeitet werden. Dazu existiert ein BIOS, das zwei RAM Floppy zu je 62 KByte verwalten kann (Bild 5). Bei 192 KByte RAM ist dann ein BIOS mit einem RAM Floppy zu 124 KByte RAM einzusetzen, da viele Programme einen hohen Speicherbedarf haben und nicht auf mehrere Floppy (RAM Bereiche) verteilt werden dürfen (z.B. Wordstar). Das BIOS Listing ist in Bild 36a und Bild 36b dargestellt. Die BIOS Routinen sind im einzelnen:

BOOT (Kaltstart; 0xde00)
Der Start des Betriebssystems erfolgt nach RESET oder nach dem Einschalten. Nach Vorbereitung der Hardware für den Betrieb und verschiedenen Grundeinstellungen wird das Betriebssystem vom ROM in den RAM geladen und der ROM Bereich danach abgeschaltet. Dadurch ist der gesamte Arbeitsspeicher des Mikroprozessors als RAM verfügbar und beliebig beschreibbar, was wiederum die Anpassung fremder Software erleichtert. Nach Löschen des Bildschirms erfolgt eine Kaltstartausschrift mit Anzeige der Systemversion. Die Systemports (Kassettengerät und SIO Schnittstelle) werden initialisiert. Die Steuerwörter für die Initialisierung habe ich in einer Tabelle zusammengefasst. Sie sind erweiterbar bzw. ergänzbar (Adresse 0xe3b2 bis 0xe3f1 bei 124 KByte RAM Floppy). In dieser Tabelle ist zuerst der Port eingetragen, auf den das nachfolgende Steuerwort auszugeben ist. Schließlich erfolgt ein Sprung in das Kassettenmodul V-Tape, welches zusätzlich die Steuerung des Systems übernimmt.

WBOOT (Warmstart; 0xde03)
Die Routine versucht, in das RAM Floppy Betriebssystem (Bestandteil des CP/V Systems) einzusteigen bzw. wieder dorthin zurückzukehren. Gleichzeitig lädt das Programm den Debugger und das V-Tape Modul vom ROM nach. Nun wird geprüft, ob CCP und BDOS bereits geladen sind. Ist das der Fall, erscheint die Angabe des aktuellen Laufwerks, und die Arbeit im CP/M kompatiblen CP/V System kann beginnen. Verschiedene CP/M Programme zerstören während ihrer Arbeit den CCP. Um ein häufiges Nachladen zu vermeiden, ist der CCP im ROM abgelegt. Das BDOS ist grundsätzlich von Kassette nachzuladen, es wird aber im Normalfall während der Programmarbeit nicht zerstört. Stellt das Programm einen Fehler im BDOS bzw. CCP fest, erscheint die Ausschrift "CCP/BDOS Laden!" (CCP-ROM ok). Dann muss man das entsprechende Modul von Kassette nachladen. Die ROM Belegung ist:
  • IS D14: BIOS
  • IS D15: Debugger
  • IS D16: V-Tape
  • IS D17: CCP
Der Rechner ist bereits mit einer Bestückung von D14 und D15 arbeitsfähig.

CSTS (Control STatuS, Tastaturstatus; 0xde06)
Die Routine kehrt mit einer Information über den Tastaturstatus in das aufrufende Programm zurück. Wurde eine Taste gedrückt, enthält das Register A der ZVE den Wert 0xff, ist keine Taste gedrückt, enthält es 0x00.

CI (Consol Input, Tastaturabfrage; 0xde09)
Diese Routine kehrt mit dem Code der gedrückten Taste ins Register A der ZVE zurück. Durch den Tastencode 0x1e wird der Tastenklick (kurz Signalton) ein- bzw. ausgeschaltet. Ist der Signalton ausgeschaltet, zeigt LED2 dies an. Der Code 0x13 wird für die Run/Stopp Funktion verwendet und durch LED1 angezeigt. Der Tastencode 0x1f ist zur Rückkehr aus dem RAM Floppy System in das CP/V Grundbetriebssystem nutzbar.

CO (Consol Output, Zeichenausgabe; 0xde0c)
Ein im Register C der ZVE abgelegtes ASCII Zeichen wird auf der Konsole ausgegeben. Das Beschreiben des Bildschirms erfolgt Zeilenweise, links oben beginnend. Ist die Cursordarstellung zugelassen, erscheint die nächste zu beschreibende Bildschirmposition mit der inversen Zeichendarstellung (Bildpunkte hell statt dunkel und umgekehrt).

Einige Zeichen haben zur Ausführung bestimmter Funktionen auf der Konsole besondere Bedeutung:

0x01 HC (Home Cursor)
Positionierung des Kursors auf die linke obere Ecke des Bildschirms.

0x07 Bell (Bell)
Ausgabe eines Signaltons.

0x08 BS (Backspace)
Kursor ein Zeichen zurück.

0x09 TAB (Tabulator)
Kursor auf nächte 8er-Tabulatorposition.

0x0a LF (Line Feed)
Kursor eine Zeile nach unten.

0x0c CLS (Clear Screen)
Bildschirm löschen und Kursor in die linke obere Bildschirmecke positionieren.

0x0d CR (Carriage Return)
Kursor auf Zeilenanfang stellen.

0x14 CTEOS (Clear To End Of Screen)
Bildschirm ab Kursorposition bis zum Ende des Bildschirmes löschen.

0x15 SKIP (Skip)
Kursor ein Zeichen weiter.

0x16 CTEOL (Clear To End Of Line)
Wie CTEOS, aber nur bis zum Ende der Zeile.

0x18 CLI (Clear Line)
Zeile löschen und Kursor am Zeilenanfang positionieren.

0x1a LB (Line Break)
Kursor eine Zeile nach oben.

0x1b ESC (Escape)
Einleiten der direkten Kursorposition; nachfolgendes Zeichen gibt eine Zeilenposition an; das dritte Zeichen die Spaltenposition auf dem Bildschirm. Bit 7 bei Spalten- und Zeilenangabe sind jeweils gesetzt. Die Zählung beginnt mit 0x80 für die erste Spalte bzw. die erste Zeile. Beispiel: 0x1b 0x82 0x8a wird den Kursor auf die 11. Spalte (0x8a) der dritten Zeile (0x82) setzen.

0x82 CON (Cursor On)
Der Kursor wird eingeschaltet (sichtbar).

0x83 COFF (Cursor Off)
Der Kursor wird ausgeschaltet (unsichtbar).

LIST (Druckerausgabe; 0xde0f)
Ein im Register C der ZVE abgelegtes Zeichen wird auf den Drucker ausgegeben. Die Datenausgabe erfolgt auf SIO Kanal A (TxDA) mit 9600 Baud bei 7 Bit Daten und gerader Parität (8. Bit). RxDA der SIO empfängt die Informationen vom Drucker mit gleichen Bedingungen. Über einen entsprechenden IFSS Verbinder (siehe Hardware) sind Drucker vom Typ SD1152 oder SD1157 mit IFSS Schnittstelle direkt anschließbar. Ein Umprogrammieren auf V.24 oder RS232C ist ebenfalls möglich. Drucker mit paralleler Schnittstelle können über die Anwender-PIO betrieben werden.

PUNCH (Stanzerausgabe; 0xde12)
Zeichenausgabe an den Stanzer über Register C der ZVE (ist im CP/V System nicht vorgesehen, aber nachrüstbar).

READER (Lochbandleser; 0xde15)
Ein Zeichen wird vom Lochbandleser geholt und im Register A der ZVE an das aufrufende Programm übergeben (ist im CP/V System nicht vorgesehen, aber nachrüstbar).

HOME (Spur 0 justieren; 0xde18)
Die Spur 0 des ausgewählten Laufwerkes wird eingestellt.

SELDSK (Laufwerk auswählen; 0xde1b)
Im Register C wird die Nummer des gewünschten Laufwerkes übergeben (0=A, 1=B, 2=C bis 15=P) und im Register HL die Adresse des zugehörigen Diskettenparameterkopfes zurückgegeben. Ist das Laufwerk nicht vorhanden, ist das 0x0000. Die Laufwerksauswahl erfolgt physisch erst bei READ oder WRITE.

SETTRK (Spur auswählen; 0xde1e)
In BC wird die ausgewählte Spurnummer übergeben. Die Spurauswahl erfolgt physisch erst bei READ oder WRITE.

SETSEC (Sektor auswählen; 0xde21)
In BC wird die gewünschte Sektornummer übergeben. Die Sektorauswahl erfolgt physisch erst bei READ oder WRITE.

SETDMA (DMA Puffer festlegen; 0xde24)
In BC wird die Adresse eines 128 Byte langen Puffers übergeben, aus dem sich die Daten nach READ holen lassen bzw. in den sie vor WRITE einzutragen sind.

READ (Lesen eines Sektors; 0xde27)
Der vorher eingestellte Sektor (SETSEC) wird von der vereinbarten Spur (SETTRK) des gewünschten Laufwerks (SELDSK) in den gewählten DMA Puffer (SETDMA) gelesen und im Register A der ZVE eine 0x00 für fehlerfreies Lesen übergeben (sonst 0x01 bei fehlerhafter Ausführung).

WRITE (Schreiben eines Sektors; 0xde2a)
Ein wie bei READ ausgewählter Sektor wird durch den DMA Pufferinhalt beschrieben. Ist das nicht möglich, erfolgt im Register A der ZVE die Übergabe des Fehlercodes 0x01. Bei fehlerfreiem Schreiben übergibt das Programm 0x00. Zusätzlich erscheint die Ausschrift "BIOS RAM ERROR", die auf nicht vorhandenen bzw. defekten RAM hinweist.

LISTST (Druckerstatus; 0xde2d)
Ist der Drucker bereit, ein Zeichen zu übernehmen, wird im Register A der ZVE der Wert 0x00 übergeben, anderenfalls 0xff.

SECTRAN
(Umwandeln der Sektornummer; 0xde30)
Im Registerpaar BC wird eine logische Sektornummer übergeben, die in eine physische Sektornummer umgewandelt und in HL zurückgeht. Die Umrechnungstabelle zeigt die Adresse im Register DE an. Das RAM Floppy System unterscheidet nicht zwischen logischer und physischer Sektornummer.

bild-36a.jpg
Bild 36a: BIOS-Listing für RAM-Floppy 2 x 62 KByte. Auf Adresse 41E5 ist statt 0x28 ein 0x0b einzutragen!
bild-36b.jpg
Bild 36b: BIOS-Listing für RAM-Floppy 1 x 124 KByte.

5.3 Das Kassettenmodul V-Tape

Magnetbandspeicher besitzen eine nahezu unbegrenzte Speicherkapazität. Durch geringe Kosten und freie Verfügbarkeit der erforderlichen Geräte haben sich Kassettenmagnetbandgeräte (KMBG) in verschiedenen Einsatzgebieten von Mikrorechnern verbreitet. Für unterschiedliche Anwendungsfälle entstand so eine Vielzahl verschiedener Aufzeichnungsverfahren, die zum Teil stark differnzierte Merkmale aufweisen.

Das Kassettenmodul V-Tape übernimmt im PC/M-Computer zwei Funktionen. Zum ersten kontrolliert und steuert es die Arbeit im Grundbetriebssystem des Rechners, und zum zweiten hat es die Aufgabe, Daten und Programme sicher und schnell auf Magnetband zu speichern und wieder lesen zu können. Hard- und Software für diese Aufgaben sind auf der zentralen Platine installiert.

5.3.1 Die Magnetbandarbeit

Das Aufzeichnungsverfahren

Die Aufzeichnung von Daten auf einem Kassettengerät erfolgt durch Erzeugen eines seriellen Datenstroms bei möglichst geringem Hardwareaufwand. Dazu eignet sich besonders eine PIO, die ein Bit eines Kanals zur Ausgabe von Daten und ein weiteres Bit zur Eingabe von Daten verwendet. Durch serielles, kodiertes Ausgeben der Daten können diese aufgezeichnet werden. Der Lesevorgang erfolgt durch Abfrage der PIO und Dekodierung der gelesenen Informationen.
bild-20-21.jpg
Bild 20/21: 20: Aufbau der Rahmenstruktur; a - Kennzeichnungsblock, b - Datenblock
Der "Poly-Computer 880" arbeitet bei der Aufzeichnung nach der Kodierungsvorschrift Split-Phase-Space (Bild 21a). Die erforderliche Leistungsbandbreite zur Speicherung auf einem Kassettengerät ist bei einer Geschwindigkeit von 1200 Bit/s problemlos erreichbar. Die Struktur der Datei [18] weist alle für ein komfortables Verfahren erforderlichen Parameter auf. Die im "Poly-Computer 880" implementierte Software nutzt die Möglichkeiten dieser Struktur nicht aus (Umfang etwa 400 Byte). Nachteilig ist, dass sie die Dateinamen nicht automatisch erkennt und zum Starten des Lesevorganges verwendet.

Das für den Datenaustausch zwischen Heimcomputer häufig verwendete Verfahren "Super Tape" [19] arbeitet gleichfalls nach der Kodierungsvorschrift für Split-Phase-Space. Bemerkenswert ist, dass es ein zeitlich optimiertes Programm verwendet. Die erforderliche Zeit zwischen den Abfragen bzw. Ausgaben beim Lesen und Schreiben wird durch die Anzahl der verbrauchten Takte der auszuführenden Befehle in Abhängigkeit von der Taktfrequenz der ZVE des Rechners bestimmt. Das Verfahren erreicht damit Bitraten von 3600 Bit/s oder teilweise 7200 Bit/s. Allerdings war nicht mit jedem Bandgerät eine ausreichend niedrige Fehlerrate erreichbar. Ungenügend ist die implementierte Fehlererkennung. Es wird lediglich die Anzahl aller übertragenen logischen Einsen verglichen. Die Angabe des Dateinamens und -typs entspricht üblichen Standards. Automatische Synchronisation und Fehlererkennung sind gewährleistet. Das in [8] beschriebene Verfahren für den "AC1" arbeitet nach der Kodierungsvorschrift für Phase-Encoding (Richtungstaktschrift, Bild 21b). Das zeitlich nicht optimierte Programm verwendet eine Bitrate von 1500 Bit/s. Die Erkennung der Phasenlage erfolgt durch bitweises Abfragen der Synchronbytes der zu lesenden Datei (bei Verwendung verschiedener Geräte erforderlich). Blockstruktur, automatische Synchronisation und Namenserkennung sind nicht vorgesehen. Kritisch ist außerdem die Übertragung von Dateiparametern (Anfangsadresse, Startadresse, etc.) ohne Prüfung.

Anforderungen an ein Aufzeichnungsverfahren für Kassettenbandgeräte:
  • automatische Synchronisation,

  • automatische Erkennung der gewünschten Daten,

  • Übertragung wichtiger Dateiparameter,

  • hohe Übertragungsgeschwindigkeit,

  • hohe Datensicherheit,

  • minimaler Hardwareaufwandt,

  • leicht anpassbare Software.

Das nachfolgend beschriebene Programm stellt einen Kompromiss des Forderungskatalogs dar.

Programmbeschreibung

Das Programm V-Tape arbeitet nach der Kodierungsvorschrift für Phase-Encoding [20] bei einer typischen Bitrate von 3600 Bit/s (Bitraten von 1200 Bit/s, 2400 Bit/s und 4800 Bit/s sind ebenfalls möglich). Diese Bitrate setzt ein zeitlich optimiertes Programm voraus. Die Verwendung von CTC Interrupts für das Timing des Programms ist nur eingeschränkt möglich, da es selbst bei ständiger Interruptfreigabe zu unterschiedlichen Zeiten zur Annahme der Interruptanforderung kommen kann. Für einen gerade auszuführenden OR A Befehl sind das, bei 2,6 MHz Taktfrequenz der ZVE, 1,6 µs, für den Befehl INC (IX+d) 9,2 µs. Bezogen auf eine Halbperiode der Bittaktfrequenz ergibt sich ein Zeitfehler (bei 3600 Bit/s) bis zu 5 %. Existiert eine NMI Quelle, so vergrößert sich dieser Fehler programmabhängig. Weiterhin muss der CTC Interrupt die höchste Priorität im System besitzen oder die einzige zugelassene Interruptquelle sein. Für V-Tape wurde der Weg der zeitlichen Optimierung des Programms gewählt. Dabei beträgt der Zeitfehler beim Schreiben und beim Lesen der Informationen weniger als 1 % der halben Periode der Bittaktfrequenz und wirkt sich praktisch nicht mehr auf die Datensicherheit bei der Übertragung aus. Die Anpassung des Programms an verschiedene Taktfrequenzen und die Geschwindigkeitsänderung erfolgt durch Einfügen von Warteschleifen in die Unterprogramme zur Ausgabe eines Bit bzw. Byte (Bild 19). Durch den Zeitverbrauch für Operationen zum Einlesen der Daten in den Speicher, zum Vergleichen, zur Prüfsummenbildung usw. ergibt sich eine erforderliche Mindesttaktfrequenz der ZVE von 1,3 MHz. Die erforderliche Leistungsbandbreite beträgt nach [17] für eine Bitrate von 3600 Bit/s 720 Hz bis 5040 Hz und ist damit von jedem Heimmagnetbandgerät übertragbar, richtige Kopfposition vorausgesetzt. Die Erkennung der Phasenlage der zu lesenden Daten erfolgt programmseitig bei selbsttätiger Inversion der gelesenen Datenbits.
bild-19.jpg
Bild 19: Prinzipieller Ablaufplan einer Byte-Ausgabe

Die Dateistruktur

Die Daten werden bei der Aufzeichnung in geblockter Form gesendet. Ein Rahmen besteht aus Kennzeichnungs- und Datenblock. Vor einem Datenblock steht ein vollständiger Kennzeichnungsblock, vor jedem Block stehen wiederum Synchronzeichen. Danach folgen unterschiedliche Kennbytes, die Kennzeichnungsblock und Datenblock eindeutig voneinander unterscheiden. So erreicht man, dass das Empfangsprogramm innerhalb einer Aufzeichnung synchronisiert und wichtige Parameter, wie der aktuelle Name, zu lesen sind. Das Auffinden einer Datei auf einer Kassette vereinfacht sich dadurch wesentlich. Weiterhin wird von einer dynamischen Rahmenlänge ausgegangen. Innerhalb eines Rahmens bleibt die Struktur dabei vollständig erhalten. Der Kennzeichnungsblock führt dazu eine Information über die Länge des nachfolgenden Datenblocks mit. Folglich sind beliebige Dateilängen auf ein Byte genau speicherbar und wieder lesbar.

Die Rahmenstruktur

Der Kennzeichnungsblock (Bild 20a) besteht aus Dateinamen und Dateityp. Wir haben die für das Betriebssystem CP/M übliche Struktur verwendet. Dabei besteht der Dateiname aus 8 ASCII Zeichen, gefolgt von einem Punkt (0x2e), und dem Dateityp, bestehend aus 3 ASCII Zeichen. Die weiteren Bytes besitzen nachfolgende Bedeutung:

Byte 12, 13 (Kennzeichnungsnummer)
Fortlaufende Nummerierung des Rahmens (0 bis 655535).

Byte 14 (Dateiendkennung)
Zeigt das physische Ende der Aufzeichnung (Datei) mit 0xaa an, sonst immer 0x00.

Byte 15 (Datenbytes)
Anzahl der Bytes im nachfolgenden Datenblock (1 bis 256).

Byte 16, 17 (Ladeadresse)
Adresse, auf die der nachfolgende Datenblock geladen werden soll (0x0000 bis 0xffff).

Byte 18, 19 (Startadresse)
Startadresse für unmittelbar lauffähige Programme.

Byte 20 (Prüfsumme)
Byteprüfsumme des Kennzeichnungsblocks (Byte 1 bis 19).

Der Datenblock (Bild 20b) setzt sich aus der Anzahl der in Byte 15 des Kennzeichnungsblocks festgelegten Anzahl von Datenbytes und der nachfolgenden Byteprüfsumme zusammen.

Zusammenfassung

Durch Verwendung einer Byteprüfsumme ist eine für das Anwendungsgebiet ausreichende Datensicherheit erreichbar. Die testweise Prüfung von mehreren hundert Kilobyte mittels CRC Berechnung erbrachte keine zusätzlichen Fehlermeldungen. Eine Überprüfung der gespeicherten Datei ist durch den VERIFY Befehl möglich. Hauptfehlerursachen waren Fehlstellen in der Magnetschicht der verwendeten (ungeprüften) Kassetten. Zum Einpegeln, insbesondere für Kassettengeräte mit automatischer Pegelreglung, wird vor der Ausgabe einer Datei ein Kennton gesendet. Das beschriebene Programm stellt eine deutliche Komfortverbesserung zu den bisher verwendeten Verfahren dar. Datensicherheit und Übertragungsgeschwindigkeit sind für viele Anwendungen ausreichend. Auf einer C60 Kassette können mindestens 1 MByte Daten (bei 3600 Bit/s) aufgezeichnet werden. Mittels der nachladbaren Programme AC-TAPE und SUPERT sind auch Dateien und Programme im "AC1" Format und im "Super Tape" Format lad- und speicherbar.

5.3.2 Der Kommandoprozessor

Der logische Teil des Grundbetriebssystems gestattet das Lesen, Speichern und Vergleichen von Dateien und Programmen mit KMBG mit unterschiedlichen Geschwindigkeiten. Zusätzliche Möglichkeiten sind durch den Aufruf von Programmen, Umschalten der Speicherbereiche und spezielle RAM-Floppy-Operationen gegeben. Vom Kommandoprozessor aus kann das RAM-Floppy-System gestartet werden, aber auch mit anderen Programmen, Dateien und Betriebssystemen gearbeitet werden.
Das V-Tape-Modul befindet sich ab Adresse 0xf000 bis 0xf7ff im RAM des PC/M-Computers (Bild 39).

0xf000 (Eintritt in das V-Tape-Modul)
0xf003 (Sprung zur CI Routine im BIOS)
0xf005 (Sprung zur CO Routine im BIOS)

Das Grundbetriebssystem meldet sich immer mit der Ausschrift "V". Danach werden Eingaben erwartet, die immer mit ENTER (0x0d) abgeschlossen werden müssen. Der eingebaute Zeileninterpreter wandelt die Eingabezeile und übergibt eventuelle Parameter der Eingabe an die jeweiligen Unterprogramme. Buchstaben dürfen sowohl in Groß- als auch Kleinschreibung erscheinen. Zur Eingabe des Dateinamens und des Dateityps können die Symbole "*" (0x2a) und "?" (0x3f) dienen. Bei "*" werden alle Zeichen des Dateinamens oder -typs ab der Position des "*" überlesen, d.h., nicht zum Namensvergleich verwendet. Die Eingabe des "?" führt zum Überlesen des Zeichens mit der Position des "?".
Der Kommandoprozessor kann die nachfolgenden Befehle ausführen (zuerst ist immer der Befehlscode mit kurzer Erläuterung angegeben, danach folgt die Form der Eingabezeile und schließlich die Erläuterung):

verwendete Abkürzungen und Symbole:
filename - Name einer Datei, bestehend aus 0 bis 8 ASCII-Zeichen
type - Typ einer Datei, bestehend aus 0 bis 3 ASCII-Zeichen
aaaa, bbbb ... - Parameter 0x0000 ... 0xffff in hexadezimaler Schreibweise
o - Option
X - Angabe des gewünschten Laufwerks (A, B, ...)

Befehle:
1 (Speicherbank 1)
V> 1
Die Speicherbank 1 wird als Arbeitsspeicher verwendet.

2 (Speicherbank 2)
V> 2
Die Speicherbank 2 wird als Arbeitsspeicher verwendet.

B (Betriebssystem)
V> B
Der System-ROM-Bereich wird eingeblendet (RAM 0x0000-0x1fff ist abgeschaltet).

C (RAM-Floppy-System-Start)
V> C
Es wird versucht, das RAM-Floppy-System (mit CCP und BDOS) zu starten, der Fehlerfall bewirkt die Ausschrift "CCP/BDOS Laden!" oder "BDOS Laden!". Bei erfolgreichem Start erscheint die Ausschrift des Aktuellen Laufwerkes z.B. "A". Danach erfolgt die weitere Arbeit entsprechend den Bedingungen der CP/M-Version 2.2.

D (Debugger)
V> D
Der Debugger wird auf Adresse 0xe800 angesprungen und gestartet.

F (Formatieren)
V> F X
Der Bereich des Inhaltsverzeichnisses im Laufwerk X wird formatiert (löschen und neuinitialisieren).

G (Go)
V> G aaaa
Durch diesen Befehl springt die CPU direkt auf die Adresse aaaa, um z.B. ein dort befindliches Programm zu starten.

I (Inhaltsverzeichnis)
V> I
Die auf dem KMBG aufgezeichneten Dateien erscheinen entsprechend der Reihenfolge auf dem Magnetband auf dem Bildschirm. Abbruch mit Ctrl-C, auch bei Magnetbandende.

L (Lesen)
V> L filename.typ aaaa / bbbb cccc
Es wird versucht, die Datei filename.typ von Kassette zu lesen. Bei Angabe von aaaa erfolgt das Einlesen auf die angegebene Adresse (0x0001..0xffff), sonst gelangt die Datei auf den Bereich, von dem sie gespeichert wurde. Bei Angabe von bbbb erfolgt das Lesen von Blocknummer bbbb und bei Angabe von cccc wird bei Blocknummer cccc abgebrochen (sonst alle Blöcke).

Das Erkennen eines Fehlers im Kennzeichnungs- oder Datenblock (Prüfsumme) unterbricht den Lesevorgang. Durch Rückspulen des Magnetbandes und erneutes Einlesen lässt sich der Lesevorgang fortsetzen. Betätigen von Ctrl-C (0x03) bricht den Lesevorgang ab.

R (Read)
V> R filename.typ X
Die RAM-Diskette X wird mit dem Inhalt der Datei filename.typ gefüllt (Abbruch mit Ctrl-C).

S (Speichern)
V> S filename.typ aaaa bbbb cccc /o dddd
Eine Datei filename.typ wird ab Adresse aaaa bis Adresse bbbb des Arbeitsspeichers auf Magnetband abgelegt. Bei Angabe von cccc dient dieser Wert als Startadresse für lauffähige Programme (Datei von Typ ".COM"). Nach dem Optionsstrich folgt bei Bedarf die Option F. Das verhindert das Eintragen der Dateiendekennung und die Datei kann unter Angabe der nächsten freien Rahmennummer (Parameter dddd) fortgesetzt werden. Damit kann man beim Laden eines Programms die komplette Datei bis zur Endekennung ohne erneuten L-Befehl lesen. Ohne Eingabe der Option F erfolgt die Speicherung unter Verwendung (ab) der als dddd angegebenen Rahmennummer. Die Option D führt zur Vergrößerung der Abstände zwischen zwei Blöcken beim Speichern.

Der Speichervorgang lässt sich durch Betätigen der Tasten Ctrl-C (0x03) abbrechen.

V (Vergleichen)
V> V filename.typ aaaa / bbbb cccc
Die Datei auf Magnetband wird mit dem Arbeitsspeicherinhalt verglichen, sonst wie L.

W (Write)
V> W filename.typ X
Der gesamte Inhalt des RAM-Floppy-Laufwerkes X wird unter filename.typ auf Magnetband abgelegt (Abbruch mit Ctrl-C).

X (Execute)
V> X filename.typ aaaa / bbbb cccc
Ein Programm mit filename.typ wird eingelesen und auf der beim Speichern (S) vereinbarten Adresse gestartet (Abbruch mit Ctrl-C). Weiter wie bei L.

Z (Zeitkonstanten)
V> Z aaaa
Die Bitrate aaaa kann betragen: 1200, 2400, 3600 und 4800 in Bit/s. Standard nach RESET: aaaa = 3600 Bit/s.
 
filename (Laden und Starten einer ".COM"-Datei)
V> filename
Die Datei (Programm) filename mit dem Type .COM wird auf der Kassette gesucht, geladen und auf der beim Speichern (S) angegebenen Adresse gestartet.

5.4 Der Debugger

Der Debugger (Version 2.2) dient dem Eingeben, Ändern, Testen und zum Suchen von Fehlern in Maschinenprogrammen und Dateien, sowie der Unterstützung beim Bedienen peripherer Geräte (z.B. Drucker; Bild 40).
bild-40.jpg
Bild 40: Debugger Listing
Die Struktur des Programms gestattet die Erweiterung des Befehlssatzes um spezielle Anwenderbefehle. Die Anpassung an beliebige U880-Systeme erfolgt durch Änderung der Sprungvektoren in einer Tabelle. Die anzuspringenden systemspezifischen Programmteile sind den üblichen Standards angepasst. Besonderheiten stellen Routinen zur Realisierung des Schrittbetriebes und zum Setzen eines Software-Breakpoints zur gezielten Programmunterbrechung dar.

Die Gesamtlänge des Programms beträgt 2 KByte, beginnend auf Adresse 0xe800 des PC/M-Computers. Die Sprungvektoren sind in Tabelle 6 zusammengefasst.

Befehlseingabe

Nach dem Aufruf (Befehl D im Kommandoprozessor) meldet sich das Programm mit einem Symbol "R". Die jeweiligen Befehle werden in Form einer Eingabezeile editiert und nach Betätigen der ENTER-Taste (0x0d) an den Zeileninterpreter übergeben. Das Übersetzen erfolgt in zwei Stufen. Zuerst wird der eingegebene Befehl im Arbeitsbereich des Programms gesucht, danach geprüft, ob die Eingabezeile mit ":" abgeschlossen wurde. In diesem Fall werden die Parameter aaaa, bbbb und cccc nicht gelesen, sondern die Argumente der letzten Eingabe verwendet:

ohne ":"
R> A aaaa bbbb cccc
Die Parameter (aaaa, bbbb, ...) werden gelesen.

mit ":"
R> A aaaa bbbb cccc :
Es gelten die Parameter der letzten Eingabe; das Zeichen ":" muss durch ein Leerzeichen vom letzten Parameter getrennt sein.
Anschließend werden der entsprechende Befehl aufgerufen und weitere angegebene Optionen bzw. Parameter interpretiert. Alle Zahlenangaben erfolgen hexadezimal. Es sind Groß- und Kleinschreibung zugelassen. Der Bildwiederholspeicher arbeitet als Eingabepuffer!

B (Breakpoint)
R> B aaaa
Der Breakpoint dient der Unterbrechung eines Programms auf einer frei wählbaren Adresse aaaa innerhalb eines RAM-Bereiches. Ein mit den Befehlen E oder F gestartetes Programm wird an der Position des Breakpoints unterbrochen. Es erfolgt die Ausschrift der aktuellen PC-Adresse ("Program Counter"). Die Adresse des Breakpoints und der Inhalt der Speicherzellen ab der Breakpointadresse erscheinen als Ausschrift "BP:4400 C3 24 18 00". Die Programmunterbrechung entsteht durch einen RESTART Befehl (0xff) auf die Adresse 0x0038 des Computers, der an der Stelle der Breakpointadresse im RAM eingetragen wird. Nach Ausführung des RESTART Befehls erscheint dort wieder der ursprüngliche Wert.

C (Compare; Vergleich)
R> C aaaa bbbb cccc
Durch diesen Befehl vergleicht das Programm zwei Speicherbereiche miteinander. Es ist aaaa die Anfangsadresse des ersten Speicherbereiches und bbbb die Anfangsadresse des zweiten Speicherbereiches, die über die Länge cccc miteinander verglichen werden. Nichtübereinstimmung führt zur Anzeige der Adresse des ersten Bereiches und des Inhalts dieser Speicherzelle sowie der Adresse des zweiten Speicherbereiches und des Inhaltes der Speicherzelle. Betätigen von ENTER setzt den Vergleich fort. Die Eingabe eines Punktes (0x2e) führt zum Abbruch des Befehls.
R> C 1000 2000 10
1002 45 2002 46
R> _

D (Device; Gerät)
Es lässt sich ein Drucker parallel zur Bildschirmausgabe aufrufen (s. Sprungvektoren für den Debugger).
R> D W
R> _
Drucker zugewiesen.
R> D
R> _
Nur Bildschirmausgabe zugelassen.

E (Execute; Ausführung)
R> E aaaa
Ein Programm wird ab Adresse aaaa unter Breakpointkontrolle gestartet.

F (Programm fortsetzen)
R> F
Die Ausführung des Programms erfolgt unter Breakpointkontrolle ab der durch PC festgelegten Adresse.

G (Go; direktes Anspringen einer Adresse)
R> G aaaa
Ein Programm wird auf der Adresse aaaa angesprungen. Es erfolgt keine Breakpointkontrolle. Ist das Programm mit RET (0xc9) abgeschlossen, erfolgt die Rückkehr in den Debugger.

I (Init; Debugger in Grundstellung bringen)
R> I
Alle Register werden auf 0x00 gesetzt, der Stackpointer SP auf 0x4300. Als Ausgabegerät ist nur die Konsole (Bildschirm) zugelassen. Das Schrittregister (SR) steht auf 1.
R> I
CLEAR
R> _

K (Register und Speicher anzeigen)
R> K
Nach Eingabe von K werden alle Register der ZVE angezeigt. Mit "MAIN" ist der Arbeitsregistersatz gekennzeichnet. "EXXR" zeigt auf die Schattenregister. Die Flags werden durch Ausgabe der jeweiligen Buchstaben bei gesetzten Flags angezeigt (Flags des Schattenregisters in Klammern). Flagzeile bei allen gesetzten Flags: "SZHPNC (SZHPNC)"

Der Angabe des SP folgt die aktuelle Adresse des Stackpointers und die nächsten vier Byte. Das geschieht gleichermaßen für BP, das Breakpointregister. Außerdem kommt das Schrittregister zur Anzeige (SR). Zusätzlich erfolgt die Anzeige der 0x80 Byte, in denen sich der PC befindet. Die aktuelle PC Position ist durch ein "->>" Symbol markiert.
R> I
CLEAR
R> K
führt zu
MAIN  AF: 00 00  BC: 00 00  DE: 00 00  HL: 00 00  (HL):C3
EXXR  AF: 00 00  BC: 00 00  DE: 00 00  HL: 00 00  (HL):C3
FLAG    ()
IX:0000    IV:2200          I :00      SR:0001
SP:4300    FF FF FF FF      BP:0000    C3 03 D6 00
PC:0000
0000->> C3 03 D6 00  02 C3 06 C8  00 00 00 00  00 00 00 00
0010    00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00
0020    00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00
0030    00 00 00 00  00 00 00 00  00 00 00 00  00 00 03 D6
0040    00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00
0050    00 00 00 00  00 00 00 00  00 00 00 00  00 20 20 20
0060    20 20 20 20  20 20 20 20  00 00 00 18  00 20 20 20
0070    20 20 20 20  20 20 20 20  00 00 00 00  00 D9 B3 C0
R> _

J (Jump; Sprung)
R> J aaaa
Ein Anwenderprogramm wird auf der Adresse aaaa angesprungen. Es erfolgt keine Breakpointaktivierung und es kann nicht mit einem RET (0xc9) zurückgekehrt werden.

M (Modify Memory; Speicherinhalt ändern)
R> M aaaa
Ab Adresse aaaa kann der Speicher beschrieben werden. Dazu erfolgt, nach Betätigen von ENTER, die Anzeige der aktuellen Eingabeposition und des dort befindlichen Datenbytes. Nachfolgend sind die Daten einzugeben. Die zulässige Länge einer Eingabezeile (eine Bildschirmseite) darf man dabei nicht überschreiten. Die Eingabe eines Punktes (0x2e) führt zum Verlassen der Routine.
R> M 8000
8000  7E R> 3E 01 D3 11 DB 10 E6 08
8008  21 R> 21 33 DE
800B  74 R> .
R> _

O (Lower Block; PC um 0x80 verringern)
R> O
Es werden das Bild analog K ausgegeben und der PC um 0x80 erniedrigt.

P (Pattern; Muster)
R> P aaaa bbbb cc
Der Bereich von aaaa bis bbbb wird mit dem Muster cc (Byte) aufgefüllt (ohne Angabe von cc mit 0x00).

Q (Quit; Rücksprung zum CP/V-Grundsystem)
R> Q
Es erfolgt der Rücksprung in das Betriebssystem.

R (Register)
R> R NN aaaa
Das angegebene Registerpaar (Register) NN wird auf den Wert aaaa (aa) eingestellt. Die Eingabe von R : hat die Anzeige des kompletten Registersatzes zur Folge. Danach erfolgt immer die Ausgabe des Bildes nach K. Ein ' (0x27) nach Angabe des Registers bewirkt die Auswahl der "EXXR" Register (Schattenregister). Für NN kann stehen: AF, BC, DE, HL, AF', BC', DE', HL', M, M', I, SP, PC, IX, IY, SR.
R> R AF' 01E6
Das Registerpaar AF' wird auf 0x01 für A' und 0xe6 für F' eingestellt.
R> R M C3
Der Inhalt der Speicherzelle, auf die HL zeigt, wird auf 0xc3 gesetzt.
R> R :
Der komplette Registersatz gelangt zur Anzeige.

S (Speicher schreiben)
R> S nn
Schreiben der Daten nn (1 Byte) auf die durch den PC angezeigten Speicherzelle.

T (Transfer)
R> T aaaa bbb cccc
Verschiebung eines Speicherbereiches von Adresse aaaa auf die Adresse bbbb mit einer Länge von cccc.

U (Upper Block; PC um 0x80 erhöhen)
R> U
Das Bild analog K gelangt zur Ausgabe, wobei der PC um 0x80 erhöht wird.

X (Speicherbereich anzeigen)
R> X aaaa bbbb N
Ausgabe des Bereiches von aaaa bis bbbb an die über D zugewiesenen Geräte. Für N ist zugelassen:

H (Hex-Dump)
Ausgabe des hexadezimalen Speicherinhaltes unter Angabe der Adresse (nach 0x10 Byte).

S (ASCII)
Der Speicherbereich kommt als ASCII Zeichen zur Ausgabe; Steuerzeichen (0x00..0x1f, 0x7f) werden unterdrückt und als Punkt (0x2e) ausgegeben, Rücksetzen des Bit 7.

T (ASCIITXT)
Wie S, aber mit Ausgabe der ASCII Steuerzeichen.

M (Manual)
Konsole und zugewiesenes Gerät sind parallel geschaltet, direkte Ausgabe, Bit 7 wie S.

aaaa bbbb cccc (Vorbereitung für FA und FH)
R> aaaa bbbb cccc
Die Argumente aaaa, bbbb und cccc werden in Zwischenspeicherzellen eingetragen, um sie später für FA und FH benutzen zu können.

FA (Find ASCII String; ASCII Zeichenkette suchen)
R> FA abc...xyz...
Es lässt sich ein beliebiger ASCII-String (Zeichenkette mit alphanumerischen Zeichen) eingeben und im zuvor festgelegten Speicherbereich suchen. Die als Argument angegebene Zeichenkette darf kein SPACE (0x20) enthalten. Sollte die Zeichenkette nicht zu finden sein, erfolgt die Ausschrift "NOT FOUND", ist sie vorhanden, wird die Position angezeigt und in den "Modify (M)"-Mode übergegangen. Ist die Zeichenkette durch einen Doppelpunkt (":") abgeschlossen, beginnt die Suche ab der zuvor eingetragenen Adresse.
R> FA Test
NOT FOUND
R> 1000
R> FA HELP :
872E  48 R> .
R> _
Die Zeichenkette "Test" soll gesucht werden, ist aber nicht vorhanden. Ab Adresse 0x1000 soll nach der Zeichenkette "HELP" gesucht werden. Diese wird auf Adresse 0x872e gefunden; erstes Zeichen "H" = 0x48.

FH (Find Hexadezimal String; Hexwert suchen)
R> FH aa bb cc dd ee ...
Der Befehl arbeitet analog zu FA, jedoch lassen sich hexadezimale Zahlen eingeben und suchen.
R> FH 00 09 53 0D
E045 00 R>.
R> _

& (Checksum; Prüfsumme bilden)
R> & aaaa bbbb
Berechnung und Ausgabe der Prüfsumme (Kontrollsumme) des Speicherbereiches von aaaa bis bbbb.
R> & 0000 03FF
SUM: E20B
R> _

Direktfunktionen

Nachfolgende Funktionen werden direkt ausgeführt, nachdem man die entsprechende Taste betätigt hat. Ausnahme ist der X und M Mode. Dabei werden die Direktfunktionen, außer BREAK (0x03), gesperrt.

BREAK (0x03, Ctrl-C)
Die Ausgaben bei "X..." werden unterbrochen, der Schrittbetrieb bricht ab.

STEP (0x19, Ctrl-Y)
Dieser Befehl realisiert den Schrittbetrieb des Computers. Dadurch ist ein einfaches Testen der Wirkung einzelner Befehle und Befehlsgruppen möglich. Dazu wird über das NMI Port der zentralen Platine nach Ausführung des nächsten Befehls im Anwenderprogramm ein NMI ausgelöst. Die Rückkehr in den Debugger erfolgt über einen Sprungvektor. Danach gelangen alle Register und der Speicher (analog zu K) zur Anzeige, um Änderungen feststellen zu können. Das Schrittregister legt die Anzahl der auszuführenden Anwenderbefehle fest.

IPC (0x1a, Ctrl-Z)
Der Befehlszähler erhöht sich um 1 (Inkrement) und das Bild analog zu K erscheint.

DPC (0x0a, Ctrl-J)
Der Befehlszähler erniedrigt sich um 1 (Dekrement) und das Bild analog zu K erscheint.

Fehlermeldungen

"INIT SP!"
Der Stackpointer befindet sich nicht im RAM. Prüfung bei J, E und F.

"INP-ERROR"
Der eingegebene Befehl existiert nicht oder hat eine falsche Syntax.

"FC-ERROR"
Die angegebene Funktion hat unzulässige Parameter.

"NOT FOUND"
Der Ausdruck existiert nicht bzw. wurde nicht gefunden.

"RAM-ERROR"
Die Speicherzelle läßt sich nicht beschreiben bzw. ordnungsgemäß lesen.

5.5 Das RAM-Floppy-System

Ein wesentlicher Bestandteil des Betriebssystems CP/V im PC/M-Computer ist das RAM-Floppy-Betriebssystem. Dieses Betriebssystem ermöglicht die Nutzung aller Programme, die die üblichen CP/M-Schnittstellen einhalten (Stand CP/M Version 2.2 [5]). Einschränkungen sind lediglich durch den Bildschirm (manche Programme arbeiten nur sinnvoll mit einem 2 KByte Bildschirm; 80 Zeichen/Zeile und 24 Zeilen) und die verfügbare Diskettenkapazität gegeben, denn große Programmpakete können ohne weiteres einen Umfang von bis zu 500 KByte annehmen, sind aber speziell für den kommerziellen Bereich gedacht. 124 KByte RAM als "Floppy-Speicher" sind eine gute Basis für zahlreiche Programme und Dateien.
bild-38a.jpg
Bild 38a: CCP Listing
bild-38b.jpg
Bild 38b: BDOS Listing Teil 1
bild-38c.jpg
Bild 38c: BDOS Listing Teil 2
Die Beschreibung des kompletten Systems ist sehr umfangreich. Wer das System voll ausnutzen will, sei auf die Fachliteratur bzw. auf die Programmbeschreibungen eines kompatiblen Betriebssystemes verwiesen (z.B. SCP). Bild 5 zeigt den Speicheraufbau des PC/M-Computers. Je nach Bestückung ist der CCP auf ROM abgelegt, oder er ist für den Start des Systems zusammen mit dem BDOS nachzuladen (Bild 38a, Bild 38b und Bild 38c). Im TPA (Terminal Program Area) werden Programme und Dateien abgelegt. Der CCP lädt die Programme grundsätzlich auf die Adresse 0x0100 des Computers und startet sie auch dort. Die Größe des TPA ergibt sich aus der Anfangsadresse des BDOS, die auf Adresse 0x0006 und 0x0007 im RAM abgelegt ist. Der CCP wird also unter Umständen während der Arbeit in einem Programm überschrieben und ist dann erneut nachzuladen. Ist der EPROM mit dem CCP gesteckt, übernimmt diese Aufgabe das BIOS; anderenfalls ist ein Nachladen von Kassette erforderlich. Der CCP hat die Aufgabe, die Kontrolle über das Betriebssystem zu übernehmen, verschiedene Kommandos zuzulassen und Programme von Diskette (RAM-Floppy) zu laden und zu starten, die dann die Kontrolle über den PC/M-Computer übernehmen.

Der CCP und viele Programme erwarten eine typische Datei- bzw. Programmbezeichnung. Diese sieht wie folgt aus: [d:]filename[.typ], wobei filename aus 0..8 und typ aus 0..3 ASCII-Zeichen bestehen. Die Angaben in eckigen Klammern sind nicht immer erforderlich: d: weist auf das Floppy-Laufwerk hin, auf dem mit der Datei filename gearbeitet werden soll. Der typ ist nicht erforderlich, sollte aber zur Kennzeichnung der Dateien verwendet werden. Typische Bezeichnungen sind:

COM
Programme, die sofort lauffähig sind und auf Adresse 0x0100 gestartet werden können.

BAS
Basic-Datei

DBF
Datenbank-Datei

FOR
FORTRAN-Quellprogramm

PAS
PASCAL-Quellprogramm

C
C-Quellprogramm

MAC
Makroassembler-Datei

DOC
Programmbeschreibung, Dokumentation

REL
Verschiebbare Datei (Programm)
Weiter können die Zeichen "*" und "?" analog zum Kassettenmodul verwendet werden. Die Zeichen "<>.,:;[]" sind nicht zulässig. Die Funktionen (residente Kommandos) des CCP sind:

d: (Laufwerk umschalten)
Es wird das Laufwerk "d" (A, B, C, ...) aktiviert, d.h. alle weiteren Kommandos beziehen sich vorrangig auf dieses neu eingestellte Laufwerk.

DIR (Inhaltsverzeichnis)
Das Inhaltsverzeichnis (die vorhandenen Dateien) auf dem aktuellen Laufwerk wird angezeigt. Der Vorsatz d: ermöglicht die Anwendung des Kommandos auf ein anderes Laufwerk, bei gleichzeitiger Laufwerksumschaltung. Bei Angaben von d: nach dem Kommando wird das Kommando lediglich auf dem bezeichneten Laufwerk ausgeführt, ohne dass eine Umschaltung erfolgt.

ERA filename.typ (Datei löschen)
Die Datei filename.typ wird im Inhaltsverzeichnis der Diskette gelöscht. Die Zeichen "?" und "*" sind zulässig.

REN FILENAME.TYP=filename.typ (Datei umbenennen)
Die Datei filename.typ bekommt die neue Bezeichnung FILENAME.TYP. Es sind keine "?" und "*" zulässig.

TYPE filename.typ (Anzeigen einer Datei)
Der Inhalt der Datei filename.typ erscheint auf dem Display (nur sinnvoll bei Dateien aus ASCII Zeichen).

SAVE n d:filename.typ (Speichern einer Datei)
Der TPA Inhalt wird ab Adresse 0x0100 unter der Bezeichnung filename.typ auf dem Laufwerk d: gespeichert. Dabei ist n die Anzahl der 256 Byte Blöcke. Ist n = 4, so werden 1024 Byte Daten, also 1 KByte) abgespeichert.

USER n (Nutzerbereich zuweisen)
Es lässt sich ein Nutzerbereich (von n = 0..15) einstellen, um die Diskette für verschiedene Nutzer aufzuteilen (für RAM-Floppy nicht sinnvoll).
Der CCP gibt noch einige Fehlermeldungen bei Fehlbedienung aus, die leicht verständlich sind und nicht weiter erklärt werden.

Das BDOS organisiert wesentliche Teile des Betriebssystems (insbesondere die Arbeit mit dem Floppy-Laufwerk). Über das BDOS benutzen die meisten Programme das Betriebssystem eines CP/M-kompatiblen Computers. Die Schnittstelle dafür ist die Adresse 0x0005 des Computers, auf der ein Sprung zum BDOS eingetragen ist. Wird diese Adresse aufgerufen und im Register C eine Kommandonummer übergeben, führt das BDOS die entsprechenden Funktionen aus und kehrt in das aufrufende Programm zurück. Das BDOS selbst greift aber niemals selbst auf die Hardware des Computers zu, sondern organisiert die erforderliche Arbeit immer über das BIOS. Damit wird es möglich, in Rechnersystemen mit unterschiedlicher Hardware (lediglich unterschiedliches BIOS), die gleichen Programme zu verwenden (gleicher Prozessorkern vorausgesetzt). Dies ist wohl der wesentliche Grund für die Verbreitung des Systems und für die überraschend große Anzahl verfügbarer Programme (einige Tausend). Die einzelnen BDOS-Funktionen haben unterschiedliche Aufruf- und Rückkehrparameter, die im Detail entsprechender Literatur zu entnehmen sind. Die BDOS-Funktionen lt. Tabelle 7 sind möglich. BDOS ist in der Lage, verschiedene Fehlermeldungen zu erzeugen, die aber vorrangig bei der Arbeit mit Floppy-Laufwerken von Bedeutung sind.

Beabsichtigt man eigene CP/M-kompatible Programme zu erstellen, sind detaillierte Handbücher erforderlich, die den Rahmen dieses Beitrages übersteigen würden.

Besondere Bedeutung für den Nutzer haben die verschiedenen Ebenen der Arbeit mit dem PC/M-Computer. Bild 35 stellt verschiedene Ebenen, deren Aufruf und die mögliche Rückkehr dar.
bild-35.jpg
Bild 35: Darstellung der Ebenen und Aufrufe der Software

5.6 Laden und Speichern von Programmen

Nach dem Einschalten sind der Arbeitsspeicher sowie der Inhalt der RAM-Floppy unbestimmt, d.h. durch ein zufälliges Muster belegt. Lediglich die EPROM-Bestandteile (BIOS, CP/V-Grundsystem, Debugger und CCP) sind sofort verfügbar. Nachdem sich das CP/V-System gemeldet hat, können die verschiedenen Kommandos genutzt werden. Damit ist das Laden der Systemprogramme möglich (Bild 35). Will man den Debugger verwenden, so ist er durch das Kommando D vom CP/V-System aus erreichbar. Die Arbeit mit der RAM-Floppy erfordert entweder das Laden eines Disketteninhaltes vom Kassettenmagnetbandgerät (R) oder man formatiert die RAM-Diskette neu (F), um sie dann mittels des -Kommandos des CCP zu beschreiben.

Ist eine RAM-Diskette geladen oder formatiert worden, muss das BDOS geladen werden, um das komplette RAM-Floppy-System zur Verfügung zu haben. Der Aufruf des RAM-Floppy-Systems erfolgt mit dem Kommando des CP/V-Systems, die Rückkehr in das CP/V-System mit dem Tastencode 0x1f. Die Rückkehr ist immer dann erforderlich, wenn der veränderte RAM-Floppy-Inhalt abgespeichert werden soll (Kommando W). Das Speichern der RAM-Floppy-Inhalte sollte auf geprüften Kassetten und eventuell mehrmals hintereinander erfolgen, um Fehlstellen im Bandmaterial kompensieren zu können. Auf einer Kassette C60 lassen sich etwa zehn RAM-Disketten abspeichern. Mit V-Tape bei 3600 Bit/s benötigt man für eine RAM-Diskette mit 124 KByte etwa 5 min. Soll nicht immer der komplette RAM-Floppy-Inhalt gespeichert werden, ist das V-Tape-Kopierprogramm VTCOP einsetzbar, mit dem man einzelne Dateien und Programme der Diskette abspeichern und auch wieder einlesen kann. Dadurch lässt sich Zeit für das Kopieren bestehender Programme wesentlich verringern. Befindet sich ein Programm bereits im Arbeitsspeicher, kann es durch das SAVE-Kommando des CCP im RAM-Floppy-Bereich abgelegt werden. Für spezielle Operationen innerhalb des RAM-Floppy-Systems steht der Debugger VDB zur Verfügung, der einen dem Systemdebugger ähnlichen Befehlssatz besitzt.

Die Vielzahl der möglichen Programme, einschließlich deren Beschreibung, ist nicht im Rahmen dieses Beitrages darstellbar. Häufig genutzte Programme (BASIC, PASCAL, Textverarbeitung, div. Assembler und Linker und die üblichen Dienst- und Hilfsprogramme) stehen auf Kassette zur Verfügung.

6 Zusammenfassung

Der vorgestellte PC/M-Computer gestattet die Arbeit mit einem heute bei 8 Bit Mikrorechnern weit verbreiteten Betriebssystem. Die nutzbare Software übersteigt die Möglichkeiten des Anwenders zum Test der einzelnen Programme bei weitem. Eigene Programme, die die beschriebenen BDOS-Schnittstellen einhalten, sind auch auf Rechnern mit völlig anderer Hardware lauffähig (z.B. BC A5120, A5130, PC1715, C128 u.a.). Durch Verwendung eines Kassettenmagnetbandgerätes als Datenspeicher ist die Nutzung im Heimbereich problemlos möglich. Die Dokumentation von Hard- und Software soll einen breiten Kreis von Interessenten die Möglichkeit eines solchen Systems erschließen. Nicht zuletzt sind periphere Baugruppen anschließbar, die den PC/M-Computer erweitern können. Übliche Baugruppen sind Farbgrafik, Floppy-Disk-Steuerung, EPROM-Programmiereinheit, AD/DA-Wandler usw. Dafür wurde der Systembus einschließlich spezieller Nutzerschnittstellen nach außen geführt.

Schließlich steht eine Vielzahl von Software für die Ausbaustufe mit nur 64 KByte RAM zur Verfügung. Dazu gehören bei 64 KByte RAM ein Tiny-BASIC (2 KByte), ein erweitertes BASIC (15 KByte) einschließlich verschiedener BASIC-Programme, ein PASCAL-Compiler (20 KByte), verschiedene Texteditoren, Assembler und Reassembler für Z80 / U880 sowie Z8 / U8080, Schach, Morseübungsprogramme, Sprachein- und ausgabe, Speichertest, Debugger und verschiedene Module für AC1-, Super Tape- und Kleinkomputeraufzeichnungen (KC 85/1, KC 85/2, KC 85/3).

Die Nutzung des PC/M-Computers, einschließlich der Systemsoftware, unterliegt im Falle der privaten Anwendung keinerlei Einschränkungen. Kommerzielle Interessenten wenden sich bitte direkt an die Autoren.

Der PC/M-Computer (PC/M - Personal Computer Mugler) ist aufgrund seiner modularen Struktur ein erweiterbares System. Je nach Wunsch des Anwenders sind dazu unterschiedliche Hardwaremodule nachrüstbar. Um die Anzahl systemspezifischer Module zu begrenzen, wurde ein K1520 Buskoppler entwickelt, der den Anschluss von K1520 Baugruppen über den dort definierten Systembus ermöglicht. Darüber hinaus werden durch uns und durch Anwender des PC/M-Computers unterschiedliche Leiterplatten zur AD/DA-Wandlung, zur Tonausgabe, zur RAM-Erweiterung bis zu 512 KByte (Zusatz-RAM-Floppy), zur EPROM-Erweiterung (als EPROM-Floppy), als EPROM-Emulator und Programmierzusatz sowie eine Floppy-Disk-Steuerung entwickelt. Zusätzlich existieren Varianten der Tastatursteuerung, die zu gegebenem Zeitpunkt veröffentlicht werden.

Als Grafikzusatz empfehlen wir den Einsatz einer der bereits zahlreich veröffentlichten Versionen (radio fernsehen elektronik, Mikroprozessortechnik u.a.) für K1520 Systeme. Das Betriebssystem wurde weiterentwickelt und steht momentan (08/88) in der Version 2.02 bei voller Kompatibilität zum veröffentlichten System zur Verfügung.

Anhang C: Tabellen zur Software


Tabelle 6: Systemzellen und Sprungvektoren (Bild 37)
dresse Bezeichner Beschreibung

1. Verständigungsbereich bei RAM-Floppy System:
0x0000 JP WBOOT Sprung zu BIOS Warmstart
0x0003   I/O Byte
0x0004 LOGDSK aktuelles logisches Laufwerk
LOGDSK   Laufwerk
0x00 = A
0x01 = B
...   ...
0xff = P
0x0005 JP BDOS Sprung zum BDOS Eintritt (gleichzeitig Endadresse des TPA)
0x005c .. 0x007c FCB Dateisteuerblock (FCB - File Control Block) für Standardadresse
0x0080 .. 0x00ff DMABUF READ/WRITE Puffer (DMA Puffer) für Standardadresse

2. BIOS:
0xde00 BOOT Kaltstart
0xde03 WBOOT Warmstart
0xde06 CSTS Tastaturstatus (Console Status)
0xde09 CI Tastaturabfrage (Console Input)
0xde0c CO Zeichenausgabe auf Bildschirm (Console Output)
0xde0f LIST Druckerausgabe
0xde12 PUNCH Stanzerausgabe (Lochband)
0xde15 READER Lesereingabe (Lochband)
0xde18 HOME Spur 0 justieren
0xde1b SELDSK Laufwerk auswählen
0xde1e SELTRK Spur auswählen
0xde21 SELSEC Sektor auswählen
0xde24 SETDMA DMA Puffer festlegen
0xde27 READ Sektor lesen
0xde2a WRITE Sektor schreiben
0xde2d LISTST Druckerstatus
0xde30 SECTRAN Sektornummer umwandeln (phys. <-> log.)

3. Debugger:
0xe800   Eintritt in den Debugger
0xe803   Sprung zur CSTS-Routine (BIOS)
0xe806   Sprung zur CI-Routine (BIOS)
0xe809   Sprung zur CO-Routine (BIOS)
0xe80c   Sprung zur LIST-Routine (BIOS)
0xe80f   Sprung zur NMI-Bearbeitung (Debugger)
0xe812   Sprung zur BREAK-Bearbeitung (Debugger)

3. V-Tape:
   
0xf000   Eintritt in das V-Tape-Modul
0xf003   Sprung zur CI-Routine (BIOS)
0xf006   Sprung zur CO-Routine (BIOS)


Tabelle 7: Übersicht der BDOS-Funktionen zur Arbeit mit Floppy-Laufwerken
Code Wirkung
00 Systemstart (Warmstart)
01 Tastaturabfrage und Echo auf Display
02 Zeichenausgabe
03 Lesereingabe
04 Stanzerausgabe
05 Druckerausgabe
06 direkte Konsolenein- und ausgabe
07 I/O Byte abfragen
08 I/O Byte setzen
09 Ausgabe einer Zeichenkette
10 Eingabe einer Zeichenkette in den Eingabepuffer
11 Tastaturstatus
12 Ermitteln der Versionsnummer des Betriebssystems
13 Rücksetzen des Diskettensystems (Schreibschutz)
14 Aktuelles Laufwerk auswählen
15 Eröffnen einer Datei
16 Schließen einer Datei
17 Erste Eintragung im Inhaltsverzeichnis suchen
18 Nächste Eintragung im Inhaltsverzeichnis suchen
19 Löschen einer Datei
20 Lesen des nächsten Sektors (128 Byte)
21 Schreiben des nächsten Sektors (128 Byte)
22 Anlegen einer Datei (neue Datei)
23 Umbenennen einer Datei
24 Frage nach angeschlossenen Laufwerken
25 Frage nach dem aktuellen Laufwerk
26 DMA Pufferadresse festlegen
27 Diskbelegung ermitteln (Allocation Vector)
28 Schutz des aktuellen Laufwerks
29 Frage nach geschützten Laufwerken
30 Dateikennzeichnungen setzen (R/W, R/O, ...)
31 Adresse des Diskettenparameterblocks (DPB) ermitteln
32 Setzen bzw. Abfragen der Benutzernummer
33 Lesen eines direkt adressierten Sektors
34 Schreiben eines direkt adressierten Sektors
35 Bereitstellen der nächsten freien Sektorposition
36 Bereitstellen der aktuellen Sektorposition
37 Rücksetzen einzelner Laufwerke
40 Schreiben mit direktem Zugriff und Blockinitialisierung

hochauflösende Abbildungen

PCM_ABB_BA_SW.zip

alle Bilder
zip, 2.4M, 11/12/05, 520 downloads

hochaufl

Scans vom Original in niedriger Qualität

PCM_BA_FA061988_LQ.pdf

Teil 6: FA-6/1988 S.283-284,289-290
pdf, 416.4K, 11/13/05, 1229 downloads

PC/M Bauanleitung Teil 6: FA-6/1988 S.283-284,289-290

PCM_BA_FA071988_LQ.pdf

Teil 7: FA-7/1988 S.335-336,341-342
pdf, 347.5K, 11/13/05, 921 downloads

PC/M Bauanleitung Teil 7: FA-7/1988 S.335-336,341-342

PCM_BA_FA081988_LQ.pdf

Teil 8: FA-8/1988 S.387-388,393-394
pdf, 523.3K, 11/13/05, 893 downloads

PC/M Bauanleitung Teil 8: FA-8/1988 S.387-388,393-394

PCM_BA_FA091988_LQ.pdf

Teil 9: FA-9/1988 S.439-440,445-446
pdf, 592.2K, 11/13/05, 840 downloads

PC/M Bauanleitung Teil 9: FA-9/1988 S.439-440,445-446

PCM_BA_FA101988_LQ.pdf

Teil 10: FA-10/1988 S.439-440,445-446
pdf, 530K, 11/13/05, 865 downloads

PC/M Bauanleitung Teil 10: FA-10/1988 S.491-492,497-498

PCM_BA_FA111988_LQ.pdf

Teil 11: FA-11/1988 S.535-538
pdf, 443.3K, 11/13/05, 1079 downloads

PC/M Bauanleitung Teil 11: FA-11/1988 S.535-538

Scans vom Original in hoher Qualität

PCM_BA_FA061988_1_HQ.pdf

Teil 6.1: FA-6/1988 S.283-284
pdf, 2.7M, 11/13/05, 1191 downloads

PC/M Bauanleitung Teil 6: FA-6/1988 S.283-284

PCM_BA_FA061988_2_HQ.pdf

Teil 6.2: FA-6/1988 S.289-290
pdf, 2.7M, 11/13/05, 791 downloads

PC/M Bauanleitung Teil 6: FA-6/1988 S.289-290

PCM_BA_FA071988_1_HQ.pdf

Teil 7.1: FA-7/1988 S.335-336
pdf, 2.7M, 11/13/05, 800 downloads

PC/M Bauanleitung Teil 7: FA-7/1988 S.335-336

PCM_BA_FA071988_2_HQ.pdf

Teil 7.2: FA-7/1988 S.341-342
pdf, 2.7M, 11/13/05, 775 downloads

PC/M Bauanleitung Teil 7: FA-7/1988 S.341-342

PCM_BA_FA081988_1_HQ.pdf

Teil 8.1: FA-8/1988 S.387-388
pdf, 2.7M, 11/13/05, 804 downloads

PC/M Bauanleitung Teil 8: FA-8/1988 S.387-388

PCM_BA_FA081988_2_HQ.pdf

Teil 8.2: FA-8/1988 S.393-394
pdf, 2.7M, 11/13/05, 852 downloads

PC/M Bauanleitung Teil 8: FA-8/1988 S.393-394

PCM_BA_FA091988_1_HQ.pdf

Teil 9.1: FA-9/1988 S.439-440
pdf, 2.7M, 11/13/05, 1687 downloads

PC/M Bauanleitung Teil 9: FA-9/1988 S.439-440

PCM_BA_FA091988_2_HQ.pdf

Teil 9.2: FA-9/1988 S.445-446
pdf, 2.7M, 11/13/05, 775 downloads

PC/M Bauanleitung Teil 9: FA-9/1988 S.445-446

PCM_BA_FA101988_1_HQ.pdf

Teil 10.1: FA-10/1988 S.439-440
pdf, 2.7M, 11/13/05, 719 downloads

PC/M Bauanleitung Teil 10: FA-10/1988 S.491-492

PCM_BA_FA101988_2_HQ.pdf

Teil 10.2: FA-10/1988 S.445-446
pdf, 2.7M, 11/13/05, 838 downloads

PC/M Bauanleitung Teil 10: FA-10/1988 S.497-498

PCM_BA_FA111988_1_HQ.pdf

Teil 11.1: FA-11/1988 S.535
pdf, 2.7M, 11/13/05, 1005 downloads

PC/M Bauanleitung Teil 11: FA-11/1988 S.535-536


Autor:Stephan Linz
Revision:2021/01/14 - 00:10 - © Li-Pro.Net