Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Vorhergehende ÜberarbeitungLetzte Überarbeitung | |||
— | z9001:software:edas [2019/03/01 10:12] – [Beispiel] volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== EDAS ====== | ||
+ | |||
+ | **ein Editor/ | ||
+ | |||
+ | Mit dem EDAS können Programme in Assemblersprache geschrieben und in Maschinencode übersetzt werden. Der Editor ist recht einfach aufgebaut und arbeitet zeilenorientiert. Der Assembler benutzt ebenso wie der IDAS die SYPS-K-1520-Syntax. Der Assembler ist ein Absolutassembler, | ||
+ | |||
+ | ===== Speicherbelegung ===== | ||
+ | |||
+ | RAM-Version 1000H-37FFh | ||
+ | |||
+ | ROM-Version C000h-E7FFh | ||
+ | |||
+ | Der Speicher von 0300h-0FFFh wird als Arbeitspeicher genutzt. | ||
+ | |||
+ | Der Speicher von 3800H bis RAM-Ende (RAM-Version) bzw. 1000H-RAM-Ende (ROM-Version) wird als Textspeicher genutzt. Mit dem Kommando #A des Editors kann dieser Bereich geändert werden, um Speicherplatz für den übersetzten Maschinencode freizuhalten. | ||
+ | |||
+ | ===== Editor ===== | ||
+ | |||
+ | Der Editor wird vom OS durch Eingabe von **EDIT** gestartet. | ||
+ | |||
+ | Nach dem Start meldet sich der Editor mit " | ||
+ | |||
+ | Durch die Ausgabe von " | ||
+ | |||
+ | Der Editor arbeitet zeilenorientiert, | ||
+ | verarbeitet. Die Spezifizierung der Zeilen kann sowohl durch die | ||
+ | Zeilennummer als auch durch eine zu Beginn der Zeile stehende | ||
+ | Zeichenkette erfolgen. | ||
+ | |||
+ | Korrekturen während der Eingabe einer Zeile sind durch Betätigen der Kursortaste <- und anschließende Eingabe der richtigen Zeichen möglich. Beginnt die Bedienereingabe mit dem Zeichen # (Kommandokennzeichen), | ||
+ | |||
+ | EDIT realisiert folgende Funktionen: | ||
+ | * Streichen von Zeilen, | ||
+ | * Einfügen von Zeilen, | ||
+ | * Substituieren von Zeichenketten, | ||
+ | * Anfügen von Kommentar, | ||
+ | * Streichen von Kommentar, | ||
+ | * Anzeigen des Textpufferinhaltes auf dem Bildschirm, | ||
+ | * Ausgeben des Textpufferinhaltes auf Magnetbandkassette, | ||
+ | * Eingeben von Quelltexten von der Magnetbandkassette in den Textpuffer. | ||
+ | |||
+ | ^ Kommando ^ Syntax ^ Erläuterung ^ | ||
+ | | assign | #A | Anzeigen und Modifizieren des Textpufferbereiches\\ Eingabe hexadezimal als "neue Textpufferanfangsadresse, | ||
+ | | begin | #B | Neustart des Aufbereitungsvorganges, | ||
+ | | end| #E | Beenden der Arbeit mit dem Editor | | ||
+ | | read| # | ||
+ | | write | # | ||
+ | | text | #Tn,m | Ausschreiben des Textpufferinhaltes | | ||
+ | | insert | #In | Einfügen von Zeilen NACH Zeile n | | ||
+ | | kill | #Kn,m | Streichen von Zeilen n bis einschließlich m | | ||
+ | | comment | #Cn,m | Anfügen von Kommentar | | ||
+ | | no comment | #Nn,m | Streichen von Kommentar | | ||
+ | | substitute | #Sn,m\\ / | ||
+ | | uppercase | #UN oder #U[Y] | Umwandlung von Kleinbuchstaben in Großbuchstaben | | ||
+ | | ??? | #D | Kommando ist nicht dokumentiert | | ||
+ | | (list) | #Ln,m | (Kommando ist nicht dokumentiert) Ausgabe auf Drucker | | ||
+ | |||
+ | |||
+ | **Fehlermeldungen** | ||
+ | |||
+ | | +++CE (command error) | Das eingegebene Kommando ist syntaktisch fehlerhaft oder nicht sinnfällig. | | ||
+ | | +++LE (length error) | Die maximale Zeilenlänge (72) wurde überschritten. | | ||
+ | | +++NF (not found) | Eine spezifizierte Zeile wurde im Textpuffer nicht gefunden. | | ||
+ | | +++TB (textbuffer) | Das Ende des Textpuffers ist erreicht. | | ||
+ | | +++SE (substitution error) | Bei einem S-Kommando konnte keine der angegebenen Substitutionen ausgeführt werden | | ||
+ | |||
+ | |||
+ | ===== Assembler ===== | ||
+ | |||
+ | Der Assembler wird vom OS durch Eingabe von **ASM** gestartet. | ||
+ | Er meldet sich nach dem Start mit der Ausschrift " | ||
+ | |||
+ | ASM realisiert folgende Funktionen: | ||
+ | * Quellprogrammeingabe aus dem Textpuffer des Editors EDIT, | ||
+ | * Maschinencodeausgabe in den Speicher, | ||
+ | * Maschinencodeausgabe auf das Magnetband, | ||
+ | * Ausgabe der Assemblerprotokolle auf dem Listgerät (Bildschirm oder Drucker). Es kann zwischen Übersetzungsliste, | ||
+ | |||
+ | ASM übersetzt den Inhalt des Textpuffers des Editors EDIT in den Maschinencode. Die Ausgabe erfolgt auf das Magnetband oder in den Arbeitsspeicher (RAM) des Heimcomputers. | ||
+ | Das Assemblerprotokoll kann über den Bildschirm oder einen Drucker, falls ein Drucker und das entsprechende Druckerbedienungsprogramm vorhanden sind, ausgegeben werden. | ||
+ | |||
+ | ASM benötigt 2 Durchläufe (Pässe) zur Übersetzung. Im 1. Durchlauf | ||
+ | erzeugt er die Symboltabelle. Im 2. Durchlauf kann gewählt werden | ||
+ | zwischen: | ||
+ | * Ausgabe der Übersetzungsliste, | ||
+ | * Ausgabe des Maschinencodes in den Arbeitsspeicher oder auf Kassette, | ||
+ | * Ausgabe der Fehlerliste der Assemblerquelle, | ||
+ | * Ausgabe der Crossreferenztabelle, | ||
+ | * Ausgabe der Symbolreferenztabelle. | ||
+ | |||
+ | Mit der Ausschrift " | ||
+ | |||
+ | | 1 | Ausführung des 1. Durchlaufs. Von dem Quelltext, der im Textpuffer des EDIT steht, wird eine Symboltabelle im RAM erzeugt. Dieser Paß ist für die Übersetzung eines Programmes unbedingt notwendig. | | ||
+ | | P (print) | P[Zeilennummer1, | ||
+ | | M (MC-Output) | Ausgabe des Maschinencodes auf Magnetbandkassette oder in den Arbeitsspeicher entsprechend der Angabe " | ||
+ | | F (fault) | Syntaktische Prüfung des Quellcodes und Ausgabe der Fehlermeldungen bei syntaktisch falschem Programm. | | ||
+ | | X (cross-reference) | Ausgabe der Crossreferenztabelle | | ||
+ | | A (adress-dictionary) | Ausgabe der Symbolreferenztabelle | | ||
+ | | V (variation) | Änderung des Datenflusses für die Ausgabe des Maschinencodes und der Assemblerprotokolle.\\ Nach der Ausschrift " | ||
+ | | E (end) | Rücksprung in das Steuerprogramm (Monitor). | | ||
+ | |||
+ | Der 1. Paß ist Voraussetzung für die Übersetzungsläufe P, F, M, X und A. | ||
+ | Diese können in beliebiger Reihenfolge durchgeführt werden. | ||
+ | |||
+ | ==== Syntax ==== | ||
+ | |||
+ | :!: ASM versteht nur Befehle (Mnemoniks) mit Großbuchstaben. Mnemoniks mit Kleinbuchstaben weist ASM als syntaktisch falsch aus. | ||
+ | |||
+ | Gegenüberstellung der Schreibweise einiger Beispielbefehle: | ||
+ | |||
+ | < | ||
+ | | ||
+ | |||
+ | M1: LD M,A | ||
+ | JR M1-# JR M1 | ||
+ | JMP M1 JP M1 CMP 0 CP 0 | ||
+ | JRC M1-# JR C,M1 ADD B ADD A,B | ||
+ | JPZ M1 JP Z,M1 JMP M JP (HL) | ||
+ | CANZ M1 CALL NZ,M1 RNC RET NC | ||
+ | DJNZ M1-# DJNZ M1 | ||
+ | </ | ||
+ | |||
+ | === Steueranweisungen für den Assembler === | ||
+ | |||
+ | | ORG adresse | ||
+ | | konstante: | ||
+ | | BER anzahl | ||
+ | | DB byte | Byte definieren | | ||
+ | | DB ' | ||
+ | | DA adr | Adresse (Doppelbyte) definieren | | ||
+ | | END | Ende des Quelltextes ; danach dürfen keine Befehle mehr stehen, sonst Absturz möglich | | ||
+ | |||
+ | Zahlenwerte können dezimal (ohne Kennzeichnung) oder hexadezimal (mit nachgestelltem ' | ||
+ | Zahlen | ||
+ | Die Verwendung von ASCII-Zeichen ist möglich, wenn diese in Hochkommas eingeschlossen werden. | ||
+ | |||
+ | Bsp.: LD A,75 LD A,4BH LD A,' | ||
+ | |||
+ | ==== Fehlermeldungen ==== | ||
+ | |||
+ | Folgende Fehlerausschriften können auftreten: | ||
+ | |||
+ | | OVERFLOW | Überlauf der Symbol- oder Crossreferenztabelle, | ||
+ | | NO PN: | Programm beginnt nicht mit der PN-Anweisung. Durch Eingabe eines " | ||
+ | | +A+ | Adressierungsfehler | | ||
+ | | +C+ | Falsche Mnemonik | | ||
+ | | +F+ | Formatfehler | | ||
+ | | +M+ | mehrfach definiertes Symbol | | ||
+ | | +N+ | nicht definiertes Symbol | | ||
+ | | +O+ | Operandenfehler | | ||
+ | |||
+ | |||
+ | ===== Hinweise ===== | ||
+ | |||
+ | Versionitis: | ||
+ | |||
+ | **RAM-Version von Kassette R0121**\\ | ||
+ | 1. Block CRC = FF06, SUM = F6D4\\ | ||
+ | 2. Block CRC = D060, SUM = A690\\ | ||
+ | 3. Block CRC = 58BB, SUM = E640\\ | ||
+ | 4. Block CRC = 2BD6, SUM = FB4F\\ | ||
+ | 5. Block CRC = 2868, SUM = F82A | ||
+ | |||
+ | **ROM-Version V. Pohlers ASM.COM**\\ | ||
+ | 1. Block CRC = A06F, SUM = 750A\\ | ||
+ | 2. Block CRC = 62E2, SUM = E05D\\ | ||
+ | 3. Block CRC = CCE5, SUM = 542C\\ | ||
+ | 4. Block CRC = 9249, SUM = 6ABC <-- fehlerhaft, Version UZ ist korrekt\\ | ||
+ | 5. Block CRC = 1397, SUM = 6FF4 | ||
+ | |||
+ | **ROM-Version U. Zander edas__c0.851**\\ | ||
+ | 1. Block CRC = A06F, SUM = 750A\\ | ||
+ | 2. Block CRC = 62E2, SUM = E05D\\ | ||
+ | 3. Block CRC = CCE5, SUM = 542C\\ | ||
+ | 4. Block CRC = B883, SUM = 718E\\ | ||
+ | 5. Block CRC = 1397, SUM = 6FF4 | ||
+ | |||
+ | **ROM-Version Torsten Paul asm_tpaul.rom**\\ | ||
+ | 1. Block CRC = 1253, SUM = 6CD3\\ | ||
+ | 2. Block CRC = D3D1, SUM = EBE3\\ | ||
+ | 3. Block CRC = 9467, SUM = 51DC\\ | ||
+ | 4. Block CRC = 3F16, SUM = 8D99\\ | ||
+ | 5. Block CRC = 64BF, SUM = 8434 | ||
+ | |||
+ | **ASM-Modul von AS**\\ | ||
+ | 1. Block CRC = 1253\\ | ||
+ | 2. Block CRC = 0E96\\ | ||
+ | 3. Block CRC = 9467\\ | ||
+ | 4. Block CRC = 9D54\\ | ||
+ | 5. Block CRC = C6FD | ||
+ | |||
+ | ===== Tipps ===== | ||
+ | |||
+ | |||
+ | * Beim Assembler ASM auf Adresse 18C2H: CD 4E 17 ändern in 3 x NOP (00). Dann wird beim Speichern aus dem Editor nicht mehr mit gelistet, das Speichern geht wesentlich flotter. | ||
+ | * Quelltexte bekommen die Endung TXT | ||
+ | |||
+ | ===== Beispiel ===== | ||
+ | |||
+ | < | ||
+ | robotron | ||
+ | |||
+ | OS | ||
+ | > | ||
+ | Kommandos " | ||
+ | |||
+ | > | ||
+ | EDIT: | ||
+ | +# | ||
+ | +# | ||
+ | +# | ||
+ | |||
+ | OS | ||
+ | > | ||
+ | ASM--HC: | ||
+ | HL: | ||
+ | MO: T Ausgabe auf Tape (bzw. USB) | ||
+ | LO: C Listing auf Bildschirm (Console) | ||
+ | PASS: 1 1. Pass muss sein | ||
+ | PASS: M Ausgabe des Maschinencodes | ||
+ | Datei V24A3.COM wird erzeugt | ||
+ | NAME :" | ||
+ | ADDRESS: | ||
+ | VERIFY ((Y)/N)? N | ||
+ | ASM--HC: | ||
+ | PASS: E Assembler beenden | ||
+ | |||
+ | OS | ||
+ | > | ||
+ | </ | ||
+ | |||
+ | |||