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)
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.
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.
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.
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.
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
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.
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
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
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