Ein/Ausgabe ueber den IEEE-488-Bus
Suche
Index
FAQ
Kontakt
Zurück

8. Ein/Ausgabe ueber den IEEE-488 BUS
        Die sehr komplexe Steuerung des IEEE-Busses ist mit Hilfe der ROM-Routinen sehr
        einfach abzuwicklen. Es ist damit moeglich, auf einfache Art Programme und Daten
        von und zur Floppy-Disk und zum Drucker zu uebertragen.

        Die verwendeten ROM-Routinen und Speicherplaetze sind :

        Name     2001      3001      8001        Beschreibung
        ------------------------------------------------------------------
        ACPTR    $F187     $F18C     $F1C0       Input A-Reg. vom IEEE-Bus
        CHKIN    $FFC6     $FFC6     $FFC6       CMD fuer Input-Files
        CIOUT    $F167     $F167     $F19E       Output A-Reg. zum IEEE-Bus
        CKOUT    $FFC9     $FFC9     $FFC9       CMD fuer Output-Files
        CLOSE    $F2CB     $F2AC     $F2E0       File schliessen
        CLRCH    $FFCC     $FFCC     $FFCC       Standard-I/O setzen
        LISTN    $F0BA     $F0BA     $F0D5       sendet Listen zum Bus
        LOAD     $F34E     $F3C9     $F408       Programmfile laden
        LOADOP    ----     $F322     $F356       LOAD ohne Pointeraenderung
        OPEN     $F52D     $F524     $F563       File oeffnen
        SCNT     $F2AB     $F28D     $F2C1       sucht Eintrag in Filetabelle
        SECND    $F12C     $F128     $F2C1       sendet Sekundaeradresse
        SETT     $F2B8     $F299     $F2CD       setzt LF, DN, SA, aus Tabelle
        TALK     $F0B6     $F0B6     $F0D2       sendet Talk zum Bus
        TWAIT    $F913     $F8E6     $F92B       I/O-Abschluss abwarten
        UNLSN    $F17E     $F183     $F1B9       sendet UNLISTEN zum Bus
        UNTLK    $F17A     $F17F     $F1B6       sendet UNTALK zum Bus

        DN       $F1       $D4       $D4         Device-Nummer
        FNADR    $F9-FA    $DA-DB    $DA-DB      Pointer auf Filenamen
        FNLEN    $EE       $D1       $D1         Laenge des Filenamens
        LF       $EF       $D2       $D2         Logische Filenummer
        LVFLAG   $020B     $9D       $9D         LOAD/VERIFY-Flag
        SA       $F0       $D3       $D3         Sekundaeradresse
        STATUS   $020C     $96       $96         I/O-Status Byte (ST)

8.1 File oeffnen
        Jede Datei muss vor dem ersten Ansprechen geoeffnet werden. In BASIC geschieht
        das mit dem Befehl "OPEN LF,DN,SA,FNAM". Aus Assembler wird die folgende Routine
        zur Fileoeffnung verwendet :

                  JSR OPEN

        Die Routine benoetigt die Angaben LF, DN , SA, FNADR und FNLEN.

8.2 File schliessen
        Die die Ein/Ausgabe beendet, muss die Datei wieder geschlossen werden. In BASIC
        geschieht das mit dem Befehl "Close LF", aus Assembler Programmen mit :

                  JSR CLOSE

        Die Routine benoetigt die Angabe LF.

8.3 Ausgabe zum IEEE-488-Bus
        Soll die gesamte Dateiverwaltung aus Assenbler erfolgen, so ist nach dem Oeffnen
        der Datei die Ausgabe folgendermassen vorzunehmen :

                  LDA #0         ; Status-Flag
                  STA STATUS     ; loeschen
                  JSR LISTN      ; aktiviert Device als Listener
                  LDA SA         ; Sekundaeradresse
                  JSR SECND      ; zum Bus senden
                  LDA CHAR       ; auszugebendes Zeichen
                  JSR CIOUT      ; zum Bus senden
                  JSR UNLSN      ; Device inaktiv machen
                  LDA STATUS     ; Status-Flag
                  BNE ERROR      ; Pruefen

        Es werden die Angaben LF, DN und SA benoetigt.

        Soll eine ganze Zeichenfolge uebertragen werden, so kann der Bus im aktiven
        Zustand bleiben. Die Befehle "LDA CHAR" und "JSR CIOUT" werden dann entsprechend
        oft wiederholt. LISTN und UNLSN erfolgen dann nur einmal fuer den gesamten Block.

8.4 Eingabe vom IEEE-488 Bus
        Soll die gesamte Dateiverwaltung aus dem Assemblerprogramm, so ist nach dem Oeffnen
        der Datei die Eingabe folgendermassen vorzunehmen :

                  LDA #0         ; Status-Flag
                  STA STATUS     ; loeschen
                  JSR LISTN      ; aktiviert Device als Listener
                  LDA SA         ; Sekundaeradresse
                  JSR SECND      ; zum Bus senden
                  JSR ACPTR      ; Zeichen vom Bus holen
                  STA CHAR       ; und abspeichern
                  JSR UNTLK      ; Device inaktiv machen
                  LDA STATUS     ; Status-Flag
                  BNE ERROR      ; pruefen

        Es werden die Angaben LF, DN und SA benoetigt.

        Soll eine ganze Zeichenfolge bertragen werden, so kann der Bus im aktiven Zustand bleiben.
        Die Befehle "JSR ACPTR" und "STA CHAR" werden dann entsprechend oft wiederholt. TALK und UNTLK
        erfolgen dann nur einmal fuer den gesamten Block.

8.5 File-Tabellen verwalten
        Will man aus einem Assembler-Programm mit mehreren Dateien arbeiten (z.B. Eingabe, Ausgabe,
        Kommando und Fehlerkanal der Floppy-Disk), so ist es etwas umstaendlich, immer fuer jeden File
        die Angaben LF, DN und SA fuer die E/A-Routinen zur Verfuegung zu stellen. Diese Angaben
        sind im Rechner in Tabellen enthalten und koennen von dort mit entsprechenden Unterprogrammen
        abgerufen werden.

        Die logische Eilenummer (Primaeradresse) des gewuenschten Files wird im A-Register bereitgestellt.
        Die folgende Routine setzt dann die Angaben LF, DN und SA. Dieses Verfahren kann nicht bei
        OPEN angewandt werden, hier muessen die Variablen durch das Programm gesetzt werden.

                  LDA #FILE     ;FILE-NUMMER
                  JSR SCNT      ;TABELLENSUCHE
                  BNE ERROR     ;NlCHT GEEUNDEN
                  JSR SETT      ;LF,DN,SA SETZEN

8.6 LOAD
        Diese Routine laedt einen Programm-File in den Speicher. Die LOAD-Routine
	setzt die Zeiger: Programmanfang $7A-7B/$28-29/$28-29 und Programmende $7C-
        7D/$2A-2B/$2A-2B. Nach dem LQAD kann das Programm mit RUN oder durch Aufruf
	entsprechender Routinen gestartet werden. Die LOAD-Routine benoetigt die
	Angaben DN, FNADR und FNLEN.

                  LDA #8        ;STATUS-VARIABLE
                  STA STATUS    ;LOESCHEN
	          JSR LOAD

8.7 LOAD ohne Pointer-Veraenderung

        Diese LOAD-Routine arbeitet aehnlich wie die in Abschnitt 8.6 beschriebene.
        Unterschied: Die Pointer fuer Programmanfang und Programmende werden nicht
        gesetzt. Man kann hiermit z.B. Hilfsprogramme in Maschinensprache in einen
        fuer BASIC gesperrten Bereich des Speichers laden. Nach dem Ladevorgang sind
        noch alle Pointer des BASIC-Programmes unveraendert, d.h. alle Variablen sind
        erhalten und das Programm kann unveraendert weiterlaufen!
        Die Routine benoetigt die Angaben DN, FNADR und FNLEN.

                  LDA #8       ; LOAD-FLAG SETZEN
                  STA LVFLAS   ; UND STATUSVARIABLE
	          5TA STATUS   ; LOESCHEN
                  JSR LOADOP
                   JSR TWAIT

        Hinweis: Der "L"-Befehl des Monitors arbeitet analog (ohne Veraenderung der Pointer).
        Im Monitor der 3001-Serie ist allerdings ein Fehler zu beachten: Will man den "L"-Befehl
        mehr als einmal auf einen File vom IEEE-Bus (Floppy-Disk) anwenden, so ist vorher unbedingt
        die Status-Variable zu loeschen.
        Erfolgt dies nicht, wird der Ladevorgang schon nach Uebertragung der Startadresse abgebrochen.
        Im 8001-Monitor ist dieser Fehler behoben.

8.8 Standardausgabe zum IEEE-Bus
        Alle Ausgaben, die normalerweise auf dem Bildschirm erscheinen wuerden (z.B.
        mit PRINT ausgegeben), werden nach Aufruf der folgenden Routine zum IEEE-Bus
        gesendet. Entsprechendes leistet auf BASIC-Ebene das CMD-Kommando.

        Die Datei muss geoeffnet sein (JSR OPEN, s.Kap. 8.1). Das X-Register wird mit
        der entsprechenden logischen Eilenummer geladen. Die Umschaltung zum IEEE-Bus
        erfolgt mit:

	          LDX LF     ;LOGISCHE EILENUMMER
                  JSR CKOUT  ;CMD LF

8.9 Standardeingabe vom IEEE-Bus
        Alle Eingaben, die normalerweise von der Tastatur erfolgen wuerden, werden
        nach Aufruf der folgenden Routine vom IEEE-Bus erwartet.
        Die Datei muss geoeffnet sein (JSR OPEN, s.Kap. 8.1). Das X-Register wird mit
        der entsprechenden logischen Filenummer geladen. Die Umschaltung zum IEEE-Bus
        erfolgt mit:

	          LDX LF     ;LOGISCHE EILENUNMER
                  JSR CHKIN  ;CMD LF

8.10 Standard-I/O setzen
        Die folgende Routine setzt wieder die Standardwerte fuer I/0-Files
        ein (Eingabe: 0=Tastatur, Ausgabe: 3=Bildschirm) . Die in Kap. 8.8
        und Kap. 8.9 beschriebenen Umschaltungen zum IEEE-Bus werden damit rueckgaengig
        gemacht.

                  JSR CLRCH   ;STANDARD-I/O SETZEN


        Die entsprechende Datei ist damit nicht geschlossen. Ein Schliessen der Datei
        erfolgt erst mit "JSR CLOSE" (s. Kap. 8.2).


 

Letzte Änderung: 2019-01-04 10:06:30
  Rubrik:  CBM PET
Rubriken-Übersicht
 6 Besucher online 

Valid XHTML 1.0 Transitional Valid CSS!