mini|MFA Der Mikrocomputer für Ausbildung (MFA) ist ein deutscher Mikrocomputer für die Ausbildung. Er wurde z. B. bei der Ausbildung zum Kommunikationselektroniker eingesetzt.

Ausstattung Der MFA ist modular in einem 19"-Gehäuse eingebaut und kann mit den unterschiedlichsten Erweiterungskarten bestückt werden. Alle Komponenten, auch die Grundkomponenten, wie CPU, RAM oder ROM sind als Steckkarten ausgelegt. Unter anderem gibt es auch Karten, mit denen man direkten Zugriff auf den Daten-, Adress- und Systembus des Systems hat. Der MFA ist dadurch gut geeignet die Vorgänge in einem Computer nachzuvollziehen. Die Programmierung erfolgt meistens in Assembler. Über die RS232-Schnittstelle kann er an einen PC angeschlossen werden, auf dem eine Terminalemulation läuft, welches dann die Tastatureingaben und die Bildschirmausgabe übernimmt. Es kann aber auch eine eigene Tastatur und ein eigener Monitor angeschlossen werden. Später kam die Unterstützung für das Betriebssystem CP/M hinzu. Hierzu war ein Bootstrap-Loader In einem EPROM vorgesehen, der sich selbst in den Speicher kopiert hat und dann das EPROM abgeschaltet hat um dann den ersten Sektor der Diskette zu laden, aus dem weitere Routinen zum Laden des Betriebssystems CP/M hervorgingen. Nach dem Abschalten des EPROM standen bis zu 64 kB RAM zur Verfügung, die CP/M benutzen konnte. Die Kommunikation mit dem Bediener lief dann über eine 8251-UART-Karte in Verbindung mit einem Terminal.

Technische Daten Erscheinungsjahr: 1979 Hersteller: BFZ (Berufsförderungszentrum), Essen. Vertrieb von Hardware und Begleitbüchern übernahm der vgs-Verlag, Köln Prozessor: Intel 8085, 4 MHz ROM: 32 kB (Vollausbau) RAM: 32 kB (Vollausbau) bzw. 64 kB (CP/M-Ausbaustufe) Betriebssystem: MAT85, CP/M Schnittstellen: Tastatur, Video, RS232, Drucker, 8-Bit-Parallel-Eingabe, 8-Bit-Parallel-Ausgabe, AD-Wandler, DA-Wandler, Diskettenlaufwerk (″ und ″), EPROM-Brenner, Bus-Direkteingabe

Betriebssystem MAT 85 MAT85 wird vom BFZ als Betriebsprogramm bezeichnet. In der Grundversion von 8 kB übersteigt der Funktionsumfang nur knapp den eines Monitorprogramms mit typischen Entwicklerfunktionen für Maschinensprache. Dennoch kann es um zusätzliche Programmpakete wie einen BASIC-Interpreter, einen Editor, ein minimales Disk Operating System (Mini-DOS) oder eine Speicherprogrammierbare Steuerung (SPS) ergänzt werden. Der Vollausbau belegt 32 kB im ROM und wird daher auch MAT32k genannt. Die Pakete ergänzen sich gegenseitig, z. B. kann das BASIC bei Anwesenheit von Mini-DOS auf Disketten speichern, oder Mini-DOS beliebige Dateien im Editor öffnen.

Mit dem MAT85-System lief die Kommunikation ursprünglich über die SID- und SOD-Pins des Prozessors 8085. Das serielle Protokoll wurde nur durch Software realisiert, die Baudrate des Terminals wird nach dem Start automatisch erfasst, sobald dem MFA ein Leerzeichen gesendet wird. Bei Verwendung des 8251-UARTs gegenüber der Softwarelösung wird eine Menge Rechenleistung frei, in der andere Aufgaben vom Prozessor übernommen werden können.

Monitor-Kommandos stellen Programmabläufe auf den Bildschirm dar oder ermöglichen den Dialog mit dem Rechner.

Monitor-Kommandos Kommando Kürzel FunktionBREAKPOINT:BDieses Kommando erlaubt es, mit dem GO-Kommando Unterbrechungspunkte einzugeben. Unterbrechungspunkte sind Adressen aus dem Speicherbereich des Anwenderprogramms, an denen die Programmbearbeitung unterbrochen werden soll. Nach der Unterbrechung werden die Inhalte der CPU-Register angezeigt.GO:GMit diesem Kommando können eingegebene Programme gestartet werden.HELP:HDient dazu, alle verfügbaren Kommandos des Betriebssystems anzuzeigen.IN:IDieses Kommando dient dazu, Daten von Eingabe-Ports zu lesen und anzuzeigen.MEMORY:MMit diesem Kommando lassen sich die Inhalte von Speicherzeilen in verschiedenen Formaten (B = Bit, H = Hex, A = ASCII) ausdrucken und ändern.OUT:ODient dazu, Daten an Ausgabe-Ports zu senden.PRINT:PMit diesem Kommando können die Inhalte von Speicherzeilen in verschiedenen Formaten (Binär, Hexadezimal, Dezimal, ASCII) formatiert (pro Zeile max. 8 Inhalte) ausgedruckt werden.REGISTER:RMit diesem Kommando können die Anfangswerte der CPU-Register, z. B. vor einem Testlauf des Anwenderprogramms, vorgegeben werden. Assembler / Disassembler-KommandosASSEMBLER:AMit diesem Kommando wird ein Programm aufgerufen, das es ermöglicht, Anwendungsprogramme in Mnemo-Code einzugeben. Der eingegebene Code wird Zeile für Zeile in den zugehörigen Maschinen-Code übersetzt und im RAM-Speicher abgelegt.DISASSEMBLER:DMit diesem Kommando können Programme, die im Maschinen-Code gespeichert sind, in den Assembler-Code übersetzt werden.NEXT INSTRUCTION:NMit diesem Kommando wird ein Tracer (Verfolger) aktiviert, der es ermöglicht, die Ausführung und Wirkungsweise einer vorgegebenen Anzahl von Programmbefehlen zu verfolgen. dazu wird nach jedem Befehl die Programmbearbeitung kurz unterbrochen und die Inhalte aller CPU-Register werden protokolliert.TRACE INTERVAL:TDieses Kommando bewirkt eine Protokollierung der Registerinhalte immer dann, wenn diejenigen Programmbefehle abgearbeitet werden, die in einem vorher zu bestimmenden Speicherbereich liegen.

Unterprogramme des Betriebssystems Die in der folgenden Tabelle aufgeführten Unterprogramme aus dem Betriebssystem können in eigenen Programmen verwendet werden. Um die in der Tabelle angegebenen Namen der Unterprogramme in einem Programm mitbenutzen zu können, müssen diese Namen mit Hilfe der EQU-Anweisung vorher den zugehörigen adressen zugewiesen werden.

Unterpr. Name Eingangs Adresse Veränd. Register FunktionKMD0040Rücksprung in die Kommandoroutine des Assemblers und Ausdruck von KMD>RCHAR0043ALiest ein Zeichen von der Tastatur ein. Der ASCII-Code des Zeichens steht im Akku. Bei [ESC] Rückkehr in die Kommandoroutine und Klingeln.WCHAR0055Gibt 1 Zeichen, das nach dem CALL-Befehl im Speicher steht, auf dem Bildschirm und Drucker (wenn Ein) aus. Das auszugebende Zeichen muss mit der DB-Anweisung in den Speicher geschrieben werden. Beispiel: CALL 0055 DB 'A' ; A wird ausgegebenWAHEX0058Gibt den Akku-Inhalt (8 Bit) als zwei Hexadezimalziffern auf dem Bildschirm und Drucker aus.WHLHEX005BH,LGibt den HL-Registerinhalt (16 Bit) als vier Hexadezimalziffern auf dem Bildschirm und Drucker aus.WABIN005EAGibt den Akku-Inhalt (8 Bit) als Binärzahl am Bildschirm und Drucker aus. Beispiel: MVI A,23 ; 23 Hexadezimal CALL 005E ; wird als 00100011 ausgegebenWADEZ0061AGibt den Akku-Inhalt (8 Bit) als Dezimalzahl auf dem Bildschirm/Drucker aus. Beispiel: MVI A,23 ; 23 Hexadezimal CALL 0061 ; wird als 35 ausgegebenWAFOR0064A,CGibt den Akku-Inhalt (8 Bit) in einem der zu wählenden Formate ASCII-Binär-Dezimal-Hex auf dem Bildschirm/Drucker aus. Das Format wird durch den Inhalt des Registers C wie folgt gewählt: C Format 0 ASCII-Zeichen 1 Binärzahl 2 Dezimalzahl 3 Hexadezimalzahl

Beispiel: MVI A,23 ; 23 Hexadezimal MVI C,1 ; binär auswählen CALL 0064 ; wird als 00100011 ausgegebenWBLANK0067Gibt ein Leerzeichen (space) auf dem Bildschirm/Drucker aus.WBUFI006DGibt den hinter dem CALL-Befehl stehenden Text auf dem Bildschirm aus. Der Text muss mit der DB-Anweisung in den Speicher geladen werden. Am Ende des Textes muss als Enderkennung eine 0 stehen. Beispiel: CALL 006D DB 'Dies ist eine Uebung',00 Gibt den Text Dies ist eine Uebung aus.WCRLFI0073Gibt einen Wagenrücklauf (CR, carriage return), eine Neue Zeile (LF, line feed) und text in diese neue Zeile aus. Der Text muss wie bei WBUFI vorher eingegeben werden. Beispiel: CALL 0073 DB 'Text in neuer Zeile',00HADR08DFLiest eine 16-Bit-Adresse (4 Hex-Stellen) von der Tastatur ein und speichert sie im Doppelregister HL ab. Dabei gelangt der höherwertige Teil der Adresse ins H-Register und der niederwertige Teil ins L-Register. Die Eingabe der Adresse muss mit [ carriage return ] oder [ space ] abgeschlossen werden.BSTIME0895A,D,EZeitverzögerung von 0,24 Sekunden. Damit die Inhalte der Register A,D und E vor Aufruf des Unterprogramms gerettet und nachher wiederhergestellt werden, muss die folgende Befehlsreihenfolge eingehalten werden: PUSH PSW ;Programmstatuswort (A, Flags) retten PUSH D ;D retten CALL 0895 ;Zeitverzögerung POP D ;D wiederherstellen POP PSW ;Programmstatuswort (A, Flags) wiederherstellenCMP20ED8AVergleicht die Inhalte der Register DE mit denen der Register HL. Wenn (HL)>(DE) ist, wird das Carry-Flag auf 1 gesetzt, sonst auf 0. Die zu vergleichenden Inhalte müssen vor Aufruf des Unterprogramms in die Doppelregister DE und HL geladen werden. Beispiel: LXI D,Zahl1 LXI H,Zahl2 CALL CMP2SUB21039A,HL,DESubtrahiert die 16-Bit-Zahlen im Doppelregister DE von der 16-Bit-Zahl im Doppelregister HL. Das Ergebnis steht dann im Doppelregister HL. [ (HL) = (HL) - (DE) ]WBUF0BA1Gibt Text aus einem Textpuffer aus, dessen Anfangsadresse durch den Inhalt des HL-Registers adressiert ist. Der Text wird mit der DB-Anweisung ab dieser Adresse geladen, Das Textende muss mit 0 gekennzeichnet sein. Nach der Ausgabe des Textes zeigt das HL-Register auf die Adresse nach dem Endzeichen.TSTNUM326FA, B, C, D, E, H, LWandelt eine Dezimalzahl, die in ASCII vorliegt, in eine Binärzahl um. Die ASCII-Zahl muss im Speicher stehen, wobei die höherwertigen Stellen die niedrigeren Speicherzellen belegen. Beispiel für die Zahl 123: Adresse Hex ASCII-Zeichen E000 31 1 E001 32 2 E002 33 3 E004 00 nicht-numerisches Schlusszeichen

der erlaubte Wertebereich reicht von 0 bis +65535. Führende Leerzeichen sind erlaubt. Die Adresse der ersten Ziffer muss beim Unterprogramm-Aufruf im DE-Register stehen. Die ASCII-Zahl muss mit einem nicht numerischen Zeichen abgeschlossen sein. Die Binärzahl, die der ASCII-Zahl entspricht, befindet sich nach der Rückkehr im HL-Registerpaar. Die Anzahl der Ziffern steht im B-Register. Fehler: Wird keine Ziffer gefunden, so enthält das B-Register den Wert 00. Wird der zulässige Zahlenbereich überschritten, so enthält das B-Register den Wert FF. Nach dem Rücksprung wird daher folgender Fehler-Test empfohlen: INR B JZ ueberlauf DCR B JZ keine-ZifferTN03272A, B, C, D, E, H, LWie TSTNUM, aber keine führenden Leerzeichen erlaubt.DIVIDE3AFEA, B, C, D, E, H, LDividiert den Inhalt des HL-Registerpaares durch den Inhalt des DE-Registerpaares. Das Ergebnis steht im BC-Register, der Rest im HL-Register. Keine Fehlermeldung bei Division durch Null.PRTNUM3C43A, B, C, D, E, H, LDruckt eine Zahl in der dezimalen Schreibweise. Die Zahl muss beim Unterprogramm-Aufruf als Zweierkomplement im HL-Registerpaar stehen (FFFF = −1). Vor positiven Zahlen wird ein Leerzeichen ausgegeben. Nach jeder Zahl wird ein Leerzeichen ausgegeben. Zahlenbereich: −32768 bis +32767.PRTLNN3C46A, B, C, D, E, H, LWie PRTNUM. Die Zahl im HL-Registerpaar muss jedoch in normaler Binärcodierung vorliegen (FFFF = 65535). Ist beim Aufruf vom PRTLNN das Sign-Flag im Flag-Register gleich Null, so wird eine positive Zahl ausgegeben. Ist das Sign-Flag gleich Eins, so wird eine negative

Zahl (mit vorangestellten „-“) ausgegeben. Beim Aufruf PRTLNN+1 wird das Sign-Flag automatisch auf Null (positiv) gesetzt.DRUSWP3ECEDrucker umschalten (Ein/Aus).

Literatur MFA-Mediensystem Fachpraktische Übungen Band 1 ISBN 3-8025-1231-6 MFA-Mediensystem Fachpraktische Übungen Band 2 ISBN 3-8025-1232-4 MFA-Mediensystem Fachpraktische Übungen Band 3 ISBN 3-8025-1241-3 MFA-Mediensystem Fachtheoretische Übungen ISBN 3-8025-1233-2

Weblinks

Handbuch Fachtheoretische Übungen; Uni Stuttgart PDF 26 MB https://www.mfa-8085.de/

Kategorie:Mikrocomputer Kategorie:Lerncomputer Kategorie:Historischer Computer