Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


Vorhergehende Überarbeitung
lc80:programme:lc802 [2022/10/28 12:59] (aktuell) – [U2716/2732 ADR #0B00] volkerp
Zeile 1: Zeile 1:
 +====== Monitor LC 80.2 ======
 +
 +Monitor LC80.2 von Eckart Buschendorf/Bama, last update: 28-11-91 09:48
 +Umfang 4K, 2x 2K-Eproms (D4 und D5)
 +
 +
 +{{:lc80:lc80roms.jpg|}}
 +
 +===== Beschreibung =====
 +
 +Das Betriebs-System LC 80.2 ist in Bezug auf die in  der  Bedienungsanleitung 
 +erwähnten Unterprogramme voll kompatibel.
 +
 +**Das geänderte Betriebssystem benötigt 4k  RAM**. (Umbauhinweise s. [[lc80:erweiterungen]]). Es  läßt  sich jedoch auch mit 
 +1k starten. Wegen des negativen  RAM-Check  geht der Rechner in HALT und kann 
 +jetzt mit NMI in die Registeranzeige und von dort mit der ADR-Taste ins 
 +Betriebsystem gelangen.
 +
 +Der RAM- und ROM-Check wird aus Zeitgründen nur noch beim  Einschalten 
 +durchgeführt. RESET setzt dann nur noch den  Stack  neu und geht in die 
 +Grundanzeige. Aus Gründen der  Speicherplatzeinsparung wurde die Anfangsmelodie 
 +verkürzt  und  die  Laufschrift weggelassen.
 +
 +Die RST-Adr. wurden im ROM festgelegt, um häufig benutzte  UP's einfacher zu 
 +nutzen. Gleichzeitig werden  die  meisten  Register gerettet.
 +
 +      RST 08  #CF     DAK 1  (zerstört AF und Hintergrundreg.)
 +      RST 10  #D7     ADR    (zerstört keine Register)
 +      RST 18  #DF     DADP   (zerstört keine Register)
 +      RST 30  #F7     DAK 2  (zerstört AF und Hintergrundreg.)
 +
 +Die folgenden beiden RST dürfen nur symmetrisch (wie  PUSH  und POP) benutzt 
 +werden!
 +
 +      RST 20  #E7     PUSH  alle Register
 +      RST 28  #EF     POP   alle Register
 +
 +==== Starttabelle    ADR #0FD8 ====
 +
 +Die ziemlich überflüssige Anzeige RST 38 wurde in eine Art  Inhaltsverzeichnis 
 +abgeändert, welches den Ansprung von  USER-Programmen vereinfacht (s.u.). 
 +(Anzeige: "StArt")
 +
 +      RST 38  #FF     Sprung zum Sprungverteiler
 +
 +      Taste   Startadresse       Programmname
 +        0        #2400           USER-Programm ab #2400
 +        1        #0B00           U 2716/2732
 +        2        #0C00           Tape
 +        3        #0D00           Breakpoint
 +        4        #0C90           Taktermittlung
 +        5        #1700
 +        6        #1300
 +        7        #0FD0           1 kHz-Dauerton
 +        8        #0B80           Shift
 +        9        #0D50           Code-Suchen
 +        A        #1500
 +        B        #5700
 +        C        #2000           USER-Programm ab #2000
 +        D        #2100                - " -       #2100
 +        E        #2200                - " -       #2200
 +        F        #2300                - " -       #2300
 +        +        #0BC0           Checksummenbildung
 +        -
 +        DAT
 +        ADR      #0000           Rücksprung ins Betriebssystem.
 +
 +Ein Druck auf die angegebene Taste in dieser Tabelle während der
 +Anzeige "StArt" bewirkt einen Sprung zur  nachfolgenden  Adresse
 +in RAM oder ROM. Die Startadresstabelle kann in jedem Nutzer-ROM
 +ab #800 neu vereinbart werden. Als Beispiel  wird  sie  für  das
 +z.Z. gängige ROM mit den  im  folgenden  erläuterten  Programmen
 +angegeben.
 +
 +
 +==== Eingabe-Routine ====
 +
 +Das EPROM auf #800 enthält eine Routine zur Eingabe, die universell genutzt werden kann.
 +
 +Beispiel: 
 +
 +          LD   HL,PUFFER   ;Eingabepuffer
 +          LD   C,#0A       ;es werden die Tasten 0-9 akzeptiert
 +          LD   B,#03       ;3 Ziffern werden angezeigt
 +          LD   E,        ;und in 2 Byte des Puffers geschrieb.
 +          CALL #0ABA       ;Eingaberoutine, mit "EX" RETURN
 +
 +CALL #0AB5 erlaubt die Eingabe einer 4-stelligen HEX-Zahl in einen mit HL adressierten Puffer.
 +
 +
 +==== NMI - Routine ====
 +
 +Ebenso wurde die NMI-Taste sinnvoller belegt. Beim Einschalten
 +oder RAM löschen wird auf der Adresse #2340 ein Sprung zur neuen
 +NMI-Routine ab #031B eingetragen. Damit bleibt eine  vom  Nutzer
 +erwünschte Änderung möglich.
 +
 +Nach Drücken der NMI-Taste befindet man sich in einer  Auswahlschleife, die mit jeder  beliebigen  Taste  außer  "ST"  weiterschaltet. Wenn die gewünschte Anzeige erscheint,  kann  mit  der Taste "ST" das Programm gestartet werden.
 +
 +   Anzeige       Bemerkung
 +   " rEG "       Registeranzeige gemäß Anleitung ab Adr.#690
 +   " StEP "      Stepbetrieb gemäß Anleitung ab Adr. #790
 +   " InS "       Ab der aktuellen Adresse wird alles im RAM um
 +                 1 Byte zu höheren Adressen verschoben, um Platz
 +                 zu schaffen und 00 eingetragen.
 +   " dEL "       Das Byte auf der aktuellen Adresse wird gelö-
 +                 scht und der Rest des RAM um 1 Byte zu niede-
 +                 ren Adressen verschoben.
 +  !ACHTUNG!      " DEL " und " INS" dürfen nur oberhalb des  STACK
 +                 (#2400) angewendet werden, da es sonst zum Absturz kommt!!
 +   " rEL "       Berechnung des relativen Sprunges zu dem ein-
 +                 zugebenden Ziel (E-XXXX) von dem Byte (sinn-
 +                 vollerweise OP-Code des Sprungbefehles), bei
 +                 dem NMI gedrückt wurde und Eintrag des Ergeb-
 +                 nisses im nächsten Byte.
 +
 +==== U2716/2732   ADR #0B00 ====
 +
 +Eprommer-Software für [[lc80:erweiterungen:eprommer|]]
 +
 +Der Einsprung erfolgt aus der  "StArt"-Anzeige  mit  Taste  "**1**".
 +Danach wird der Typ angezeigt.
 +
 +  Taste Anzeige   Bemerkung
 +  A    rA 2400    Eingabe des Speicheranfangs (RAM od. ROM)
 +  E    EP 0000    Eingabe der ersten EPROM-Adresse
 +                  (#0000 - #07FF bei U 2716)
 +                  (#0000 - #0FFF bei U 2732)
 +  B    bY 0800    Eingabe der Anzahl der Bytes
 +  F    Funct.     Funktion
 +  !-0     LEEr?     Leerkontrolle
 +  !-1     LESEn     Einlesen ab Speicheranfang RAM
 +  !-2     ProG      Programmieren (10ms je Zelle)
 +  !-3     IdEnt     Vergleichen
 +  !-4     tESt      Test,  ob  ]berprogammieren  möglich ist
 +  !-C     COPY      kopieren mit Leerkontrolle und Vergleich (5*)
 +  !-EX            Start der Funktion/Quittung der Eingabe sowie
 +                  Rücksprung in die Grundanzeige (U 2716/2732)
 +  ST              Abbruch von "Copy" während der Anzeige "PASS"
 +                  oder "FAIL" nach jeweils 10ms pro Zelle
 +  ADR  Start      Rücksprung in das Betriebssystem
 +
 +
 +==== Tape     ADR #0C00 ====
 +
 +Mit "**2**" aus der Anzeige "StArt" wird das Programm TAPE  aufgerufen. Es entspricht dem Aufzeichnungsverfahren des POLY-Computers
 +und wurde um einen Programmnamen erweitert, der, wenn nicht eingelesen wird, wie beim LC-80 angezeigt wird und so  eine  Orientierung auf der Kassette ermöglicht. (Anzeige "tAPE")
 +
 +  Taste     Anzeige       Bemerkung
 +  A         A - XXXX      Eingabe Anf.-Adr.
 +  E         E - XXXX      Eingabe End.-Adr.
 +  F         F - XXXX      Eingabe File-Name
 +  ST        out           Ausgabe auf Band
 +  LD        in            Einlesen von Band
 +  EX        Start         nach "in" oder "out" - Quittunng  der
 +                          Eingabe/Rücksprung in die Grundanzeige
 +
 +==== Breakpoint     ADR #0D00 ====
 +
 +
 +Mit "**3**" wird das Programm gestartet. (Anzeige "br.Pnt")
 +Dieses Programm arbeitet ein USER-Programm von der Anfangsadresse (A-XXXX) bis zum Breakpoint  (E-XXXX)  interruptgesteuert  ab
 +und springt dann zur Registeranzeige. Dabei ist folgendes zu beachten: 
 +
 +  * Die Endadresse (Breakpoint)  muß  bei  Mehrbytebefehlen
 +         unbedingt auf das erste Byte zeigen.
 +  * Die Abarbeitung verläuft 100* langsamer, daraus  resultieren Probleme, wenn z.B. bei DAK1 oder DAK2.
 +  * Es wird der Hilfsstack (#22D5-#2307) für STEP belegt. 
 +  * In #23EA wird der Status gespeichert. #00 bedeutet, daß kein Stepbetrieb von Hand möglich ist. Falls Breakpoint mit RESET abgebrochen wird,  muß  in  diese  Zelle  #FF  eingetragen werden.
 +
 +  Taste       Anzeige       Bemerkung
 +  EX          A - XXXX      Anf.-Adr. des zu testenden Programms
 +  EX          E - XXXX      letzte Adr., die selbständig
 +                            abgearbeitet wird (Haltepunkt)
 +                            eingeben
 +
 +
 +
 +==== Taktzahlermittlung     ADR #0C90 ====
 +
 +Ab Adresse #2000 werden Befehle oder Befehlsfolgen eingetragen,
 +deren Taktzahl ermittelt werden sollen, und mit RET (#C9)  abgeschlossen.  Danach  wird  ab  Adresse  #0C90  oder    aus    der
 +"StArt"-Anzeige mit Taste "**4**" gestartet. Die  Anzahl  der  Takte
 +muß kleiner als 65535 sein. Hardwareseitig  müssen die CTC-Kanäle 0,1 und 2 verbunden werden.
 +                                           USER-Steckverbinder
 +                    ZC/TO 0 - C/TRG 1         A08 - B12
 +                    ZC/TO 1 - C/TRG 2         A09 - A11
 +                    ZC/TO 2 - C/TRG 3         A10 - A12
 +
 +
 +
 +==== Speicherbereich verschieben     ADR #0B80 ====
 +
 +
 +Das Programm SHIFT (Anzeige "SHIFt" verschiebt  Speicherbereiche, die sich auch überlappen können. Start mit Taste **8**.
 +
 +  Taste   Anzeige   Bemerkung
 +  bel.    A-XXXX    Eingabe der Anfangsadresse des Quellbereiches
 +  EX      E-XXXX    Eingabe der Anfangsadresse des Zielbereiches
 +  Ex      bYXXXX    Eingabe der Bytezahl
 +  EX      StArt     Ausführung beendet
 +
 +
 +==== Code-Suchen (1,2 oder 3 Byte)     ADR #0D50 ====
 +
 +Dieses Programm sucht ab einer Anfangsadresse  nach  einem  Byte
 +oder einer Bytefolge bis zu 3 Byte und kehrt beim  letzten  Byte
 +der ersten gefundenen Code (-folge) in die Adressanzeige zurück.
 +
 +  Taste   Anzeige   Bemerkung
 +  bel.    A-XXXX    Anfangsadresse des zu durchsuchenden
 +                           Bereichs eingeben
 +  EX      bY1 XX    erstes Byte eingeben
 +  "+"     bY2 XX    zweites Byte eingeben
 +  "+"     bY3 XX    drittes Byte eingeben
 +
 +
 +Nach Eingabe des 1., 2. oder 3. Byte wird die Suche mit "ST" gestartet. Die Anzeige "not Fnd" (not found) erscheint,  wenn  die
 +Bytefolge nicht vorhanden ist.
 +
 +==== Checksummenbildung     ADR #0BC0 ====
 +
 +Mit der Taste "**+**" wird die Bildung einer Prüfsumme gestartet. Es
 +erfolgt eine einfache Addition. Mit diesem  Programm  läßt  sich
 +bei [nderungen des Betriebssystems das  LOW-Byte  der  Prüfsumme
 +ermitteln, die in der Speicherzelle #7FF abgelegt sein  muß,  um
 +den ROM-Check positiv zu bestehen. (Anf.-adr. #0000, #7FF Bytes)
 +
 +  Taste   Anzeige    Bemerkung
 +  EX      A-XXXX     Eingabe der Anf.-adr. des zu ber. Bereiches
 +  EX      bYXXXX     Eingabe der Länge des Bereichs
 +  EX      XXXX       Prüfsumme (einfache Addition aller Bytes)
 +
 +
 +
 +==== System - RAM ====
 +
 +^Adresse     ^Verwendung|
 +|#23E9       |Stack - Top nach RESET|
 +|#23EA       |darzustellendes Zeichen bei "LOAD"\\ Hilfszelle bei Breakpoint (0=Step selbständig)|
 +|#23EB/EC    |Programmname (Tape), Bytezahl (U2716,Shift)|
 +|#23ED/EE    |Anf.-Adresse (Tape, Shift, Code), RAM-Adr. (U2716)|
 +|#23EF/F0    |End-Adr. (Tape, Brk.p), EPROM-Adr., Zieladr. (Shift)|
 +|#23F1       |Checksumme (Tape) , Hilfszelle Code #FE = 1 Byte, #FF = 2 Bytes|
 +|#23F2       |L S D      Datenanzeige-Speicher (IX zeigt hierher)|
 +|#23F3       |M S D              - " -|
 +|#23F4       |L S D      Adressenanzeige-Speicher|
 +|#23F5                         - " -  |
 +|#23F6                         - " -  |
 +|#23F7       |M S D              - " -  |
 +|#23F8/F9    |User-PC (akt. Adr.-anzeige,  Breakp. auch Anf.-adr.)|
 +|#23FA       |AT - Flag|
 +|#23FB       |aktueller Tastencode|
 +|#23FC       |Init.-Flag    80 = keine Neuinitialisierung|
 +|#23FD       |Funkt.- und Fehler-Flag|
 +|#23FE       |L - Teil          gelesenes File, Byte 1 (Code)|
 +|#23FF       |H - Teil          (Tape, LOAD)  , Byte 2 (code)|
 +
 +===== Unterschiede zum Original-Monitor =====
 +
 +(2K-Eprom-Variante)
 +
 +^Bereich ^Inhalt Original-Monitor|
 +|0000-011A |Start, RST, NMI, ...|
 +|0224 |ERROR, SPR. ZUR ANZEIGE|
 +|029C-02A7 |INI|
 +|031B-035D |INIDIP|
 +|03E7-03FF |im Original-Monitor freier Bereich|
 +|0574-0588 |DISP1|
 +|059F-05A4 |DISP6|
 +|0617-068F |SONG|
 +|06D6-06D7 |DAK, CALL DAK1|
 +|0788-07A4 |im Original-Monitor freier Bereich, STEPUP|
 +|07E8-07FF |im Original-Monitor freier Bereich|
 +
 +2. Eprom 0800-0FFF komplett neu.
 +
 +Unterschied Assembler-Quelle lc80-2 zum Binary lc80.com: im Original-Binary 0649h: 0bh statt 0ah
 +
 +