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