back : next : content =

 

* 6 Tabellen


 

re sms2keys for some english system data sources

HINWEIS:
Die Daten sind in Klartextformat zur direkten Übernahme als Assembler-Quelle in <pre>-Tags eingefaßt. Manche HTML-Programme können sie durch absurde "Korrekturmaßnahmen" dafür u.U. gänzlich unbrauchbar machen, z.B. Natscape, Amaja. Bereits Sichern durch den "Compozer" füllt den Text mit einer Unzahl sinnloser und störender HTML-"tags".
Wer die folgenden Angaben in Assemblies weiterverwenden will, sichert die Seite zunächst, und geht sie dann ggf. mit einem ordentlichen Editor durch.
 
 



* 6.1.1 *	Fixzahlen-Definitionen, Übergabe-Constante, NICHT Adressen
SV.ID	  EQU    $D254	Bitmuster grün, rot, blau, schwarz, blinkend
sysid.ql  equ    sv.id	- alias -
sysid.at  equ    'S2AT'	SMS-Atari-Systemidentifikation	
SV.IDENT  EQU    sv.id	- alias -
RA.BOT	  EQU    $20000	Untergrenze des RAM
RA.MIN	  EQU    $20000	Mindestgröße 128K Bytes
RA.SSIZE  EQU    $8000	(Standard-)Größe des Bildschirmspeichers
sys.rdel  equ    25	Vorgabe SV.ARDEL
sys.rtim  equ    2	Vorgabe SV.ARFRQ
sys.nfsd  equ    16	Höchstzahl an Laufwerken im FSS
SV.TRAPO  EQU    2*($28+2) Abstand der Trap-Vectoren-Tabelle von (SV.TRAPV)

* 6.1.2	* Hardware-Register (je 8 Bit)

	
MC.STAT   EQU    $18063	Steuerregister zur Bildausgabe
* PC *	Peripheral Chip Register (R lesen / W schreiben)
PC.CLOCK  EQU    $18000 .l Uhr in Sekunden	(R - 4 Bytes einzeln)
*	         $18000	Uhr rücksetzen	(W)
*	         $18001	Zählschritt der Uhr	(W)
PC.TCTRL  EQU    $18002	Sende-Steuerung	(W - Bits s. u.)
PC.IPCWR  EQU    $18003	Steuerung der IPC-Verbidung (W)
PC.IPCRD  EQU    $18020	Status MDV & RS232	(R)
PC.MCTRL  EQU    $18020	MDV Steuerregister	(W)
PC.INTR   EQU    $18021	Interrupt-Register	(R/W Bits s.u.)
PC.TDATA  EQU    $18022	Sende-Daten	(W)
PC.TRAK1  EQU    $18022	Mdv Spur 1 (R)
PC.TRAK2  EQU    $18023	Mdv Spur 2 (R) Display-Steuerung (W)
* PC.INTR (R/W)	Bitwertigkeit im Interrupt-Register
PC.INTRG  EQU    $01	mdv-Spielraum (gap interrupt)	<-,   Masken
PC.INTRI  EQU    $02	Interface-Interrupt		<-+-, hierzu
PC.INTRT  EQU    $04	Sende-Interrupt			<-+-+-,
PC.INTRF  EQU    $08	Bildwechsel-Interrupt (20 ms)     | | |
PC.INTRE  EQU    $10	Externer Interrupt		  | | |
PC.MASKG  EQU    $20	Maske für mdv-Spielraum		 -' | |
PC.MASKI  EQU    $40	Interface Maskierung		 ---' |
PC.MASKT  EQU    $80	Sende-Maskierung		 -----'
* MC.STAT	(W)	Bits zur Bildschirmsteuerung
MC..BLNK  EQU    $1		schaltet Bildausgabe ab
MC..M256  EQU    $3		setzt 256-Mode
MC..SCRN  EQU    $7		schaltet zweiten Bildschirm ein
* PC.TCTRL (W)	Bits zur Sende-Steuerung
PC..SERN  EQU    3		ser-Nummer
PC..SERB  EQU    4		0 = IO über ser-Anschluß
PC..DIRO  EQU    7		Direkte Ausgabe
* PC.TCTRL (W)	Bitmasken
PC.BMASK  EQU    %00000111	Maske für Baudrate
PC.NOTMD  EQU    %11100111	alle Bits außer Betriebsartensteuerung
PC.MDVMD  EQU    %00010000	mdv-Betrieb
PC.NETMD  EQU    %00011000	Netzwerk-Betrieb
* PC.MCTRL (W)	Bitnummern
PC..SEL   EQU    0		Auswahlsignal
PC..SCLK  EQU    1		Übernahme Auswahlsignal
PC..WRIT  EQU    2		Schreiben
PC..ERAS  EQU    3		Löschen
* PC.MCTRL (W)	Bitmasken
PC.READ   EQU    %0010	mdv läuft leer oder zum Lesen
PC.SELEC  EQU    %0011	Auswahlsignal zum Schieben gesetzt
PC.DESEL  EQU    %0010	Auswahlsignal abgeschaltet
PC.ERASE  EQU    %1010	löschen und nicht schreiben
PC.WRITE  EQU    %1110	löschen und schreiben
* PC.IPCRD (R)	Bitnummern
PC..TXFL  EQU    1		Sendepuffer voll
PC..RXRD  EQU    2		Freigabe Lesepuffer
PC..GAP   EQU    3		Zwischenraum (gap)
PC..DTR1  EQU    4		DTR ser1
PC..CTS2  EQU    5		CTS ser2

* 6.2	* Software-Adressen

* 6.2.1	* SV * Systemvariable, allgemein ab  SV.BASE  $28000, NICHT festgelegt.
* Variable mit Offset zu SV.BASE und Bedeutung :
SV.BASE   EQU    $00  .w	enthält SV.ID = $D254 für Farben gn, rt, sw, blinken
SV.CHEAP  EQU    $04	Basis des common heap
SV.CHPFR  EQU    $08	Erste freie Stelle darin
SV.FREE   EQU    $0C	Basis des freien Bereiches
SV.BASIC  EQU    $10	Basis des Basic-Bereiches
SV.TRNSP  EQU    $14	Basis des transienten Programm-Bereiches (tpa)
SV.TRNFR  EQU    $18	Erste freie Stelle darin
SV.RESPR  EQU    $1C	Basis des Bereiches residenter Proceduren
SV.RAMT   EQU    $20	Obergrenze des RAM (+1)
sys.mxfr  equ    $24     SM	Maximalwert für Abfrage nach freiem Speicher
sys.rtc	  equ    $28     SM	in Sekunden
sys.rtcf  equ    $2C  .w SM	Rest des Zeitzählers
SV.RAND   EQU    $2E  .w	(Pseudo-)Zufallszahl
SV.POLLM  EQU    $30  .w	Anzahl ausgelassener poll-Interrupts
SV.TVMOD  EQU    $32  .b	Fernsehbild, 0 bei Monitorbild
SV.SCRST  EQU    $33  .b	Bildschirmstatus (0 = aktiv)
SV.MCSTA  EQU    $34  .b	aktueller Inhalt des MC Statusregisters
SV.PCINT  EQU    $35  .b	dto., PC Interruptregister
sys.rshd  equ    $36  .b SM	Flag zur Scheduler-Neuordnung
SV.NETNR  EQU    $37  .b	Eigene Netzwerk-Stationsnummer
SV.I2LST  EQU    $38	Ptr auf Liste der Interrupt-2-Handler
SV.PLIST  EQU    $3C	Ptr auf Liste der "polled tasks"
SV.SHLST  EQU    $40	Ptr auf Liste der "scheduler tasks"
SV.DRLST  EQU    $44	Ptr auf Liste der Device-Handler
SV.DDLST  EQU    $48	Ptr auf Liste der Directory-Device-Handler
SV.KEYQ   EQU    $4C	Ptr auf aktive Tastatur-Queue
SV.TRAPV  EQU    $50	Ptr auf Tabelle zur Trap-Umleitung (redirection)
SV.BTPNT  EQU    $54	Ptr auf jüngste slave-block-Eintragung
SV.BTBAS  EQU    $58	Ptr auf Basis der slave-block-Tabelle
SV.BTTOP  EQU    $5C	Ptr auf Obergrenze der slave-block-Tabelle
SV.JBTAG  EQU    $60  .w	Aktuelle Job-Kontrollzahl (Job tag)
SV.JBMAX  EQU    $62  .w	Aktuelle Jobnummer - mit sv.jbtag die jüngste Job-ID
SV.JBPNT  EQU    $64	Ptr auf aktuelle Eintragung in der Job-Tabelle
SV.JBBAS  EQU    $68	Ptr auf Basis der Job-Tabelle
SV.JBTOP  EQU    $6C	Ptr auf Obergrenze der Job-Tabelle
SV.CHTAG  EQU    $70  .w	Aktuelle Kanal-Kontrollzahl (channel tag)
SV.CHMAX  EQU    $72  .w	Höchste aktuelle Kanalnummer
SV.CHPNT  EQU    $74	Ptr auf jüngste geprüfte Kanaleintragung
SV.CHBAS  EQU    $78	Ptr auf Basis der Kanaltabelle
SV.CHTOP  EQU    $7C	Ptr hinter Obergrenze der Kanaltabelle
* Minerva hält in SV.CHTOP den Ptr in einen weiteren Bereich an Systemvariablen
sys.frbl  equ    $80     SM	Liste von Speicherblöcken zur Rückgabe an den Heap
*                 84
SV.CAPS   EQU    $88  .w	Flag Feststeller der Großschreibung (caps lock)
SV.ARBUF  EQU    $8A  .w	Puffer für automatische Tastenwiederholung
SV.ARDEL  EQU    $8C  .w	Verzögerungszeit (dafür) in Vielfachen von 20 ms
SV.ARFRQ  EQU    $8E  .w	Wiederhol-Intervall in Vielfachen von 20 ms
SV.ARCNT  EQU    $90  .w	Zähler der automatischen Tastenwiederholungen
SV.CQCH   EQU    $92  .w	Zeichencode zur Job-Umschaltung - i/o-queue
SV.WP     EQU    $94  .w	Schreibschutz
SV.SOUND  EQU    $96  .w	Status des Tongenerators
SV.SER1C  EQU    $98	Ptr auf Empfänger-Queue Kanal 1 (ser1)
SV.SER2C  EQU    $9C	Ptr auf Empfänger-Queue Kanal 2 (ser2)
SV.TMODE  EQU    $A0  .b    ZX8302 Sender-Betriebsart (mit Baudrate)
sys.ptyp  equ	 $A1  .b SM	processortyp in bits 7..4 
;		Bits 7..4 = 0:6800x, 1:6801x, 2:68020, 3:68030, 4:68040, etc.			
SV.CSUB   EQU    $A2	Null oder Ptr auf Subroutine bei CAPSLOCK
SV.TIMO   EQU    $A6  .w    lfd. Zeitbegrenzung zum Umschalten des Sendebetriebs
sys.dmiu  equ    $A6  .b	Flag bei DMA
sys.mtyp  equ	 &A7  .b SM (seit e.20, SQ) gerätetyp
;	Bit 0
;		 1: Hermes vorhanden, oder Atari mit "blitter"
;	Bits 4..1
;		 0: QL, GC-QL, Atari ohne Uhr
;		 2: Atari Mega ST mit Uhr
;		 4: Stacy
;		 6: Atari STE
;		 8: Atari Mega STE
;		10: GoldCard mit SQ(?) - GC/MGG liefert 0
;		12: Super-GC
;		14: -/-
;		16: Falcon 030
;	18, 20, 22: -/-
;		24: Atari TT
;		26: -/-
;		28: QXL
;		30: QPC
;	Bits 7..5 
;		 0: Atari "futura"-Emulator
;		 1: Atari mono-Mode
;		 2: E4-Emulator
;		 3: -/-
;		 4: QVME
;		 5: -/-
;		 6: EGA/VGA-Bild (z.B. QXL)
SV.TIMOV  EQU    $A8  .w    Wert der Zeitbegrenzung (zwei Zeichen)
SV.FSTAT  EQU    $AA  .w    Zustand des blinkenden Cursor
SV.PRGD   EQU    $AC     TK	Ptr auf Vorgabe-Device für Programme / Jobs
SV.DATD   EQU    $B0     TK	dto., Daten-Files
SV.DSTD   EQU    $B4     TK	dto., Zieldevice
SV.THGL   EQU    $B8    THG	Ptr in die gefädelte Thing-Liste
*	bis $ed	Reservebereich
 und undokumentiert Possten
sys.attr  equ    $BC -extra-	in "system" zur Devicekontrolle
sqx.tos1  equ
	 $bc 	SQ	stackptr. in trap#1
sqx.c4	  equ	 $c4	SQ	q.kanal 0 Handlerbasis
sqx.c8	  equ	 $c8 .b	SQ	=/= 0 bei cache on
sqx.ca	  equ	 $ca .b	SQ	$ff nach "cache_on"
sqx.cc	  equ	 $cc	SQ	sv.jbpnt aus trap (1/3)
*
SV.MDRUN  EQU    $EE  .b	Nummer des Microdrive in Betrieb oder Null
SV.MDCNT  EQU    $EF  .b	An- und Auslaufzähler für Microdrive
SV.MDDID  EQU    $F0   8.b	Drive-Identifikation * 4 für jeden Microdrive
SV.MDSTA  EQU    $F8   8.b	Status - Null, wenn keine Operationen anstehen
SV.FSDEF  EQU    $100 16.l	Ptr in den Block physischer Drive-Definitionen
SV.FSLST  EQU    $140	Ptr auf gefädelte Liste der pdt zu den File-Handlern
SV.TRAN   EQU    $144 .b	Flag zur Ein-Ausgabe-Umsetzung (=/= 0 TRAnslate)
SV.ICHAR  EQU    $145 .b	Ein Zeichen Eingabepuffer
SV.TRTAB  EQU    $146	Ptr auf Umsetzungstabelle
SV.MGTAB  EQU    $14A	Pttr auf Tabelle der Fehlermeldungen
*	bis $17f Reservebereich
 & undokumentierte Posten
sv.qxlv	  equ	 $170	QXL version
*
SV.STACB  EQU    $180	Untergrenze des Supervisor-Stack
sv.lng	  equ	 $180	"lightning" reference
SV.STACT  EQU    $480	(unbewachte) Obergrenze Supervisor-Stack

* SX *	Erweiterte Systemvariable von MINERVA (1.82) auf SV.CHTOP(sb)
SX.CASE   EQU     00	=/= 0 als Tastatur-Aufruf CTR/ALT/SH/ENTER
SX.ITRAN  EQU     04	Aufruf zur Eingabe-Übersetzung bei ser-Queues
SX.OTRAN  EQU     08	dto., bei der Ausgabe
SX.DRIV   EQU    $0C	CLOSE-Einsprung von MM.RECHP
SX.KBENC  EQU    $10	Aufruf einer Tastatur-Codierung
SX.IPCOM  EQU    $14	MT.IPCOM-Aufruf
*			Reserve
SX.TRN    EQU    $20	Vorgabeadresse der TRA-Tabelle
SX.MSG    EQU    $24	Vorgabeadresse der Fehlermeldungen
SX.F0     EQU    $28	erster Zeichensatz
SX.F1     EQU    $2C	zweiter Zeichensatz
SX.DSPM   EQU    $30  .b	Bildausgabe-Betriebsart
SX.TOE    EQU    $31  .b	"Verbesserungen"/"Erweiterungen" abschalten
SX.EVENT  EQU    $32  .b	Break und CTR/ALT/SH/ESC Tastatur-Flag
SX.FSTAT  EQU    $33  .b	%bbbbgfff  Cursor  (b)linken (g)röße (f)arbe
SX.KBSTE  EQU    $34 12.b	Umlenktabelle für Sondertasten
SX.QDOS   EQU    $40  4.b	Qdos-Version in ASCII
SX.BASIC  EQU    $44 2+4.b	VER$
sx.nix01  equ    $4A  3 .w	reserviert
* zum RAM ausgelagerte Verkettungsadressen. - BASE ist auch im Handbuch unklar.
;	       $50  2.l	Null
;	       $58  6.l	Base+$60
;			00000000  IO.SCAN
;	       $70  4.l	BASE+$80
;			OD.SERIO  OD.SEROP  OD.SERCL
;	       $80  4.l	BASE+$90
;			IO.SERQ   OD.PIPOP  OD.PIPCL
SX.CON    EQU  $90  4.l	BASE+$A0
;			OD.CONIO  OD.CONOP  OD.CONCL
;	       $A0  4.l	00000000
;			OD.NETIO  OD.NETOP  OD.NETCL
;	       $B0  8.l	00000000
;			DD.MDVIO  DD.MDVOP  DD.MDVCL
;			MD.SLAVE  0         0         MD.FORMT
;	       $D0	MD.END
;		  .w	3
;		  .b	'MDV'
sx.nix02	equ    $D9  7.b	reserviert
sx.nixmer	equ    $E0	Ende der Erweiterung

* 6.2.2	* HP * Speicherreservierung (common heap header definition)

HP.LEN    EQU    $00	Länge des Definitionsblockes
HP.DRIVR  EQU    $04	Freigabehandler zum Aufruf bei DELETE des Besitzers
*			(negativ CH.CLOSE)
HP.NEXT   EQU    $04	Ptr auf nächste freie Speicherstelle
HP.OWNER  EQU    $08	Besitzerjob (0 wenn der Platz frei ist)
HP.RFLAG  EQU    $0C	bei Freigabe zu setzende Adresse
HP.CLOSE  EQU    $0C	{2} offset of close entry point WRT hdl add

* 6.2.3	* JB * Job-Header und zugehöriger Daten-Sicherungsbereich
* Job Control Block (jcb) oder Job Definition Table (jdt)
* Job-Steuerblock                Job-Definitionsblock
* Mit Hilfe der Systemvariablen SV.JBBAS und SV.JBTOP ist die jdt zu finden, die
* die niederwertigen 16 Bits der Job-ID zeigen nach Multiplikation mit 4 auf die
* Tabellen-Eintragung (Offset), in der die Basisadresse der jdt steht.
* Weist der Offset zu SV.JBBAS über SV.JBTOP hinaus, ist die ID ungültig.
* Ist die Adresse selbst negativ, existiert der Job nicht mehr.
* {*} nicht ändern  {?} durch Trap oder mit Vorsicht auch direkt änderbar

JB.LEN    EQU    $00     *	Länge des gesamten Speicherbereichs
JB.START  EQU    $04	Startadresse bei Aktivierung, gewöhnlich Null
JB.OWNER  EQU    $08     ?	Besitzer dieses Jobs
JB.HOLD   EQU    $0C     ?	Ptr auf ein bei Aufgabe des Jobs zu löschendes Byte
JB.TAG    EQU    $10  .w *	Prüfzahl für diesen Job
JB.PRIOR  EQU    $12  .b ?	Laufzähler für die Priorität
JB.PRINC  EQU    $13  .b ?	Prioritätszahl, bei Null ist der Job nicht aktiv
JB.STAT   EQU    $14  .w *	Job-Status	= 0 freigegeben
*				> 0 Wartezeit in Vielfachen von 20 ms
*				- 1 Job gesperrt
*				- 2 Freigabe durch anderen Job abwarten
JB.RELA6  EQU    $16  .b ?	Flag msb nächste trap #2 / #3 adressiert relativ(A6)
JB.WFLAG  EQU    $17  .b ?	Flag gesetzt, wenn ein Job auf diesen wartet
JB.WJOB   EQU    $18     ?	Identitätszahl des wartenden Job
JB.TRAPV  EQU    $1C     ?	Ptr auf umgeleitete Trap-Vectoren (trap redirection)
JB.D0     EQU    $20	Sicherungs-Speicher für D0
JB.D7     EQU    $3C		bis	  D7
JB.A1     EQU    $40	Sicherungs-Speicher für A1
JB.A7	  EQU    $5C		bis	  A7
JB.USP    EQU    $5C        - alias für USP -
JB.SR     EQU    $60        dto., SR
JB.PC     EQU    $62        dto., PC
jcb.reln  equ    $66  .b SM	Flag relative Adressierung des nächsten I/O-Aufrufs

JB.END    EQU    $68        Länge des Job-Steuerblocks (jcb)


* 6.2.4.1 * BV * Variable des Basic-Jobs relativ zur Basisadresse in A6.
* Die jdt selbst beginnt $68 (104) Bytes davor, ist dort aber nicht verankert.
* Die Basic-Fehlercodes sind den Trap-Beschreibungen vorangestellt.

BV.START  EQU    0		Beginn der Tabelle mit Anfangs-/End-Ptr

BV.BFBAS  EQU    0		Puffer Basis
BV.BFP    EQU    4		Puffer Laufpointer
BV.TKBAS  EQU    8		Token-Liste
BV.TKP    EQU    $C
BV.PFBAS  EQU    $10	Programm
BV.PFP    EQU    $14
BV.NTBAS  EQU    $18	Namen-Tabelle
BV.NTP    EQU    $1C	dto., Obergrenze
BV.NLBAS  EQU    $20	Namen-Liste
BV.NLP    EQU    $24	dto., Obergrenze
BV.VVBAS  EQU    $28	Variablenwerte
BV.VVP    EQU    $2C	dto., Obergrenze
BV.CHBAS  EQU    $30	Kanal-Tabelle
BV.CHP    EQU    $34	dto., Obergrenze
BV.RTBAS  EQU    $38	Return Tabelle innerhalb von Proceduren
BV.RTP    EQU    $3C
BV.LNBAS  EQU    $40	Tabelle der Zeilennummern
BV.LNP    EQU    $44
BV.BTP    EQU    $48	Stack zur Rückverfolgung des Parser-Weges
BV.CHANGE EQU    $48	Markiert Richtungswechsel
BV.BTBAS  EQU    $4C
BV.TGP    EQU    $50	Parser-Stack, zeitweise Graphikstack
BV.TGBAS  EQU    $54
BV.RIP    EQU    $58	Arithmetik-Stack
BV.RIBAS  EQU    $5C
BV.SSP    EQU    $60	der wirkliche System-Stack (geht nach USP)
BV.SSBAS  EQU    $64
BV.ENDPT  EQU    $64	Ende der Pointerliste 
BV.LINUM  EQU    $68  .w	lfd. Zeilennummer
BV.LENGTH EQU    $6A  .w	Länge der lfd. Zeile
BV.STMNT  EQU    $6C  .b	augenblickliches Kommando darin
BV.CONT   EQU    $6D  .b	Flag CONTINUE($80) oder STOP(0)
BV.INLIN  EQU    $6E  .b	Ausführung einer einzeiligen Struktur
*			Schleife(1), Sonstige($FF), Nichts(0)
BV.SING   EQU    $6F  .b	Einzeilige Struktur ausführen($FF) oder nicht(0)
BV.INDEX  EQU    $70  .w	Zeile des jüngsten Einzeiler-Schleifen-Index
BV.VVFREE EQU    $72	erste freie Stelle in Tabelle der Variablen-Werte
BV.SSSAV  EQU    $76	Gesicherter rp
*		6 Bytes Arbeitsbereich
BV.RAND   EQU    $80	"Zufalls"-Zahl
BV.COMCH  EQU    $84	Befehlskanal (nicht immer) setzbar
BV.NXLIN  EQU    $88  .w	Zeilennummer, nach der es weitergeht
BV.NXSTM  EQU    $8A  .b	dto., Kommando darin
BV.COMLN  EQU    $8B  .b	Befehlszeile gesichert($FF) oder nicht(0)
BV.STOPN  EQU    $8C  .w	welche Stop-Nummer gesetzt ist [?] für Basic ]
BV.EDIT   EQU    $8E  .b	Programm wurde editiert($FF) oder nicht(0)
BV.BRK    EQU    $8F  .b	Unterbrechung mit {BREAK}(0) oder nicht ($80)
BV.UNRVL  EQU    $90  .b	auffriemeln($FF) oder nicht(0)
BV.CNSTM  EQU    $91  .b	Befehl, wo mit CONTINUE weiterzumachen ist
BV.CNLNO  EQU    $92  .w	dto., Zeile
BV.DALNO  EQU    $94  .w	lfd. Zeile des aktuellen DATA-Kommandos
BV.DASTM  EQU    $96  .b	dto., Nummer in der Zeile
BV.DAITM  EQU    $97  .b	dto., darin nächster zu lesender Posten
BV.CNIND  EQU    $98  .w	Einzeiler-Schleifenindex nach CONTINUE
BV.CNINL  EQU    $9A  .b	Flag dazu
BV.LSANY  EQU    $9B  .b	LIST wird geprüft($FF) oder nicht(0)
BV.LSBEF  EQU    $9C  .w	nicht sichtbare obere Zeile
BV.LSBAS  EQU    $9E  .w	untere Zeile im Fenster
BV.LSAFT  EQU    $A0  .w	nicht sichtbare untere Zeile
BV.LENLN  EQU    $A2  .w	Länge einer Zeile im Fenster
BV.MAXLN  EQU    $A4  .w	größtmögliche Anzahl Zeilen im Fenster
* Die 4 folgenden Bytes werden bei Änderungen von lenln und maxln überschrieben.
BV.TOTLN  EQU    $A6  .w    wirkliche Anzahl Zeilen im Fenster
*	        A8
BV.AUTO   EQU    $AA  .b	AUTO/EDIT eingeschaltet($FF) oder nicht(0)
BV.PRINT  EQU    $AB  .b	PRINT aus prtok($FF) oder im Puffer belassen(0)
BV.EDLIN  EQU    $AC  .w	Nummer der nächsten zu editierende Zeile
BV.EDINC  EQU    $AE  .w	Schrittweite bei AUTO/EDIT
BV.TKPOS  EQU    $B0	Pos. von A4 in tklist beim Einsprung in PROC
BV.PTEMP  EQU    $B4	flüchtiger Ptr für GO_PROC
BV.UNDO   EQU    $B8  .b	rp umgehend verwerfen und Procedur wiederholen
BV.ARROW  EQU    $B9  .b	Peil runter($FF) rauf(01) oder ohne(0)
BV.LSFIL  EQU    $BA  .w	Fenster bei wiederholtem LIST bis hierhin füllen
BV.WRLNO  EQU    $BC  .w	Zeilennummer von WHEN ERRor
BV.WRSTM  EQU    $BE  .b	WHEN ERRor Kommando
BV.WRINL  EQU    $BF  .b	WHEN ERRor einzeilig($FF) oder nicht(0)
BV.WHERR  EQU    $C0  .b	WHEN ERRor aktiv($FF) oder nicht(0)
BV.ERROR  EQU    $C2	jüngster Fehlercode
BV.ERLIN  EQU    $C6  .w	Zeilennummer, wo der jüngste Fehler vorkam
BV.WVNUM  EQU    $C8  .w	Anzahl überwachter {WHEN variable}-Klauseln
BV.WVBAS  EQU    $CA	Basis der {WHEN variable}-Tabelle bezügl. BV.VVBAS
*	reserve und undokumentierte posten
bv.qchan
  equ	 $bc -extra- qlib kanaltabelle
bv.qrate  equ 	 $db -extra- .b qlib in "liberate"
bv.qerrl  equ	 $dc -extra- qlib error trapping linkage
bv.cheap  equ    $E0     TK2 Verkettungsadresse für ALCHP & RECHP
bv.qlovl  equ    $E8 -extra- im Job 0 QLIB-Overlay-Tabelle
bv.qlrun  equ    $EC -extra- im Job 0 Basisadresse der QLIB-runtimes
bv.qstak  equ	 $f4 -extra- qlib system stack
bv.qintp  equ	 $f8 -extra- qlib interpreter pointer
BV.END    EQU    $100      Obergrenze der Basic-Variablen

* 6.2.4.2	Token für Basic-Interpreter und -Parser
* SHI.B und LGI.B werden erst von MINERVA-Interpretern benutzt.
* Codierung tokenisierter Programme, aus mi.91 ermittelt.
* Die kleingeschriebenen Namen wurden willkürlich gewählt.

* Basic-Zeile
LEN.L 	equ 0 Zeilenlänge als Differenz zur Länge der vorangehenden Zeile.
TNM.L	equ 2 Token $8D00 kündigt Zeilennummer an
NUM.L	equ 4 Zeilennummer
END.L	equ -2 EOL-Token $840A

* Basic-Interpreter-Token
SPC.B	equ $80nn  Leerzeichen, Anzahl {nn} max 255
*
KEY.B	equ $81{kk} Befehle {kk} von 1 bis $1f:
end.k	equ 1 END
for.k	equ 2 FOR
if.k 	equ 3 IF
rpt.k	equ 4 REPeat
sct.k	equ 5 SELect
whn.k	equ 6 WHEN
def.k	equ 7 DEFine
prc.k	equ 8 PROCedure
fun.k	equ 9 FuNktion
go.k 	equ 10 GO
to.k 	equ 11 TO
sub.k	equ 12 SUB
; jm: 13 WHEN (nur vorbereitet)
err.k	equ 14 ERRor
; jm: 15 EOF index 0067 in mi91
; jm: $10 INPUT index 0003
rst.k	equ $11 RESTORE
nxt.k	equ $12 NEXT
xit.k	equ $13 EXIT
els.k	equ $14 ELSE
on.k 	equ $15 ON
ret.k	equ $16 RETurn
rmd.k	equ $17 REMAINDER
dta.k	equ $18 DATA
dim.k	equ $19 DIM
loc.k	equ $1a LOCal
let.k	equ $1b LET
thn.k	equ $1c THEN
stp.k	equ $1d STEP
rem.k	equ $1e REMark
mst.k	equ $1f MISTake
BIP.B	equ $8200 residente Procedur, folgt Posten-Nr. der Name-Table
BIF.B	equ $8300 residente Funktion, dto.
*
SYM.B	equ $84ss Symbole {ss} 1 bis 10:
alc.s	equ 1 = als Zuweisung oder bei Select-Auswertung
col.s	equ 2 Doppelpunkt
hsh.s	equ 3 '#'
com.s	equ 4 Komma
brl.s	equ 5 Klammer links (
brr.s	equ 6 Klammer rechts )
bkl.s	equ 7 geringelte Klammer links { 
bkr.s	equ 8 dto. rechts } 
fsp.s	equ 9 erzwungenes Leerzeichen 
eol.s 	equ 10 <NL> Ende einer Basiczeile
* 
OPS.B 	equ $85oo Operationen {oo} 1 bis $16:
add.o 	equ 1 + 
sub.o	equ 2 - 
mul.o	equ 3 * 
dvs.o	equ 4 / 
geq.o	equ 5 >= 
gt.o 	equ 6 > 
seq.o	equ 7 ==
equ.o	equ 8 =
neq.o	equ 9 <> 
leq.o	equ 10 <= 
lt.o 	equ 11 < 
or.o	equ 12 $0c || 
and.o	equ 13 $0d && 
eor.o	equ 14 $0e ^^ 
exp.o	equ 15 $0f ^ 
cnc.o	equ $10 & 
or.l 	equ $11 OR 
and.l	equ $12 AND 
eor.l	equ $13 XOR 
mod.o	equ $14 MOD 
div.o	equ $15 DIV 
ins.o	equ $16 INSTR 
* 
MON.B	equ $86 monadische Operation 1 bis 4: 
nve.m	equ 1 - als vorzeichen 
pve.m	equ 2 + als vorzeichen 
not.m	equ 3 ~~ 
not.l	equ 4 NOT 
SYV.B	equ $87 Systemvariable (nicht benutzt) 
* 
NAM.B	equ $8800 Name 
nam.e	equ 0 +4 Bytes Posn. in der Name-Table 
* 
SHI.B	equ $89nn kurze Integer, 8 l.s. Bits im Token-Word
* 
LGI.B	equ $8a lange Integer 
lgi.n	equ 2 folgen 16 Bit 
* 
STR.B	equ $8bxx String mit Begrenzung char. {xx} 
dqe.c	equ $22 xx für {"} 
sqe.c	equ $27 xx für {'} 
str.l	equ 2 folgt Länge.w und die Zeichen, geradzahlig justiert 
TXT.B	equ $8c Text (z.B. nach REMark) 
txt.l	equ 2 folgt Länge, wie Strings 
* 
LNO.B	equ $8d Zeilennummer 
lno.l	equ 2 +nnnn als positive 16-Bit-Zahl 
* 
SEP.B	equ $8e PRINT-Separator: 
com.p	equ 1 Komma 
smc.p	equ 2 Semicolon 
bks.p	equ 3 backslash 
xkm.l	equ 4 Ausrufezeichen 
to.p 	equ 5 TO 
*
FP.B equ $Fxxx f.p.-Zahl mit 12 Bit Exponent und 32 Bit Mantisse 
fp.l equ 6 f.p.-Länge
*

* 6.2.4.3	* LP * Offsets innerhalb einer Schleifenindex-Beschreibung
LP.IEXP   EQU    0    .w	Index Exponent
LP.IMANT  EQU    2		dto., Mantisse
LP.SL	  EQU    6    .w	Anfangszeile
LP.EL	  EQU    8    .w	Endzeile
LP.SS	  EQU    $A   .b	Kommando in der Anfangszeile
LP.ES     EQU    $B   .b	dto., Endzeile
LP.EEXP   EQU    $C   .w	Schlußwert Exponent
LP.EMANT  EQU    $E		dto., Mantisse
LP.SEXP   EQU    $12  .w	Schrittweite Exponent
LP.SMANT  EQU    $14	dto., Mantisse
LP.CHPOS  EQU    $18  .w	Zeichenposition innerhalb der lfd. Zeile

LP.LNVAR  EQU      6     Länge einer gewöhnlichen Variablen
LP.LNFOR  EQU    $1A     Länge einer FOR-Beschreibung
LP.LNREP  EQU    $0C     Länge einer REPeat-Beschreibung
* 6.2.4.4	* RT * rp-Offset in Proceduraufrufen bezüglich BV.RTBAS(A6)
RT.SVBA   EQU    0	Basis der Argumente
RT.SVBL   EQU    4	Basis der Localen
RT.SVTL   EQU    8	Bereichsende dto.
RT.SVDFL  EQU    $C   .w	Nummer der DEFinitons-Zeile
RT.SVFNT  EQU    $E   .b	Funktionstyp
RT.SVSWP  EQU    $F   .b	Argumente getauscht($FF) oder nicht(0)

* Für Gesamt-Offset zur Basis sind ab hier bis rt.svsta $10 zu addieren
RT.SVRTT  EQU    0    .b	Return-Typ aus gosub(0) proc(1) fn(2)
RT.SVSTM  EQU    1    .b	Befehl, auf den bei Return zu springen ist
RT.SVLNO  EQU    2    .w	Zeilennummer dto.
RT.SVSTA  EQU    4	Statusflags  inline, single, index

RT.LENPR  EQU    $10	Länge der PROC/FN-Angaben
RT.LENTL  EQU    $18	Länge der "return table"

* Gewinnung der aktuellen Daten erfordert negative Indizierung zu BV.RTP(A6)
RT.RSBA   EQU    $18	Argumenten-Basis (Übergabe-Parameter)
RT.RSBL   EQU    $14	dto., Ende, zugleich Localen-Basis
RT.RSTL   EQU    $10	dto., Ende
RT.RSDFL  EQU    $C	Definitionszeile
RT.RSFNT  EQU    $A	Funktions-Typ
RT.RSSWP  EQU    9	Swap-Flag
RT.RSRTT  EQU    8	Returntyp
RT.RSSTM  EQU    7	Befehl (statement)
RT.RSLNO  EQU    6	Zeile
RT.RSSTA  EQU    4	Statusflags

* 6.2.4.5	Basic-Kanäle erhalten in der eigenen Tabelle aus BV.CHBAS(A6)
* CH * SD *	neben denen der QDOS-Tabellen eine Anzahl eigener Angaben.
CH.ID	  EQU     0	Kanal-Identifikation
CH.CCPY	  EQU    $4  .fp	Turtle Graphik, aktueller Cursor, Abszisse
CH.CCPX	  EQU    $A  .fp	dto., Ordinate
CH.ANGLE  EQU    $10 .fp	dto., Winkel der Kröte in Grad
CH.PEN	  EQU    $16 .b	PENUP(0) PENDOWN(1)
CH.CHPOS  EQU    $20 .w	aktuelle Ausgabespalte für Schriftzeichen
CH.WIDTH  EQU    $22 .w	Breite der Zeile in Anzahl Spalten
CH.SPARE  EQU    $24	Reserve

CH.LENCH  EQU    $28        Länge des Basic-Kanal-Definitionsblocks

* 6.2.5	Jedem Kanal wird ein Definitionsblock (cdt) zugewiesen, der die
* erforderlichen Angaben enthält. Die Basisadresse wird mit den Systemvariablen
* SV.CHBAS und SV.CHMAX in gleicher Weise, wie bei den Jobs ermittelt.
* Zuerst die Grundlage, wie sie allen cdt gemeinsam ist.
CH.LEN	  EQU    $00	Länge des Definitionsblocks
CH.DRIVR  EQU    $04	Adresse des zugehörigen Device-Handlers
CH.OWNER  EQU    $08	Besitzer-Job
CH.RFLAG  EQU    $0C	Adresse einer Markierung für die Speicherfreigabe
CH.TAG	  EQU    $10 .w	Prüfzahl für diesen Kanal
CH.STAT	  EQU    $12 .b	Status
*				0	in Ordnung
*				Negativ	Kanal wartet
*				-1	A1 gilt absolut
*				$80	A1 gilt relativ zu A6
CH.ACTN	EQU    $13 .b	gespeicherte Aktion für wartenden Job
CH.JOBWT EQU   $14	ID des auf I/O wartenden Jobs
CH.END	EQU    $18	Länge dieser cdt (channel definition Tabelle)

* 6.2.5.1	Erweiterte Definition für einfache serielle Queues
CH.QIN	EQU    $18	Ptr auf Eingabe-Queue (oder Null)
CH.QOUT	EQU    $1C	Ptr auf Ausgabe-Queue (oder Null)
CH.QEND EQU    $20

* 6.2.5.2	Erweiterte Definition für Fensterkanäle, auf Pixel bezogen.
* Diese Offsetangaben gelten immer zusammen mit dem sd.extop-Aufruf.
* Der Anordnung nach zunächst die Erweiterung des Pointer Interface:

SD.XHITS	EQU	$-18 .w	x hit size	- Trefferbereich
SD.YHITS	EQU	$-16 .w	y
SD.XHITO	EQU	$-14 .w	x hit origin (Bildkoordinaten)
SD.YHITO	EQU	$-12 .w	y
SD.XOUTS	EQU	$-10 .w	x-Abmessung (Breite)
SD.YOUTS	EQU	$-0E .w	y	 (Höhe)
SD.XOUTO	EQU	$-0C .w	x-Ursprung	 (Bildkoordinaten)
SD.YOUTO	EQU	$-0A .w	y
SD.PRWLB	EQU	$-08	Primärfenster  : Aufwärts-Ptr Link-Liste
SD.PPRWN	EQU	$-08	Secundärfenster: Ptr auf Primärfenster
SD.PRWLT	EQU	$-04	Primärfenster  : Abwärts-Ptr Link-Liste
SD.SEWLL	EQU	$00	Ptr in Link-Liste der Secundärfenster
SD.WSAVE	EQU	$04	Ptr auf Sicherungsbereich für das Fenster
SD.WSSIZ	EQU	$08	dessen Größe
SD.WWDEF	EQU	$0C	Ptr auf Arbeitsdefiniton für das Fenster
SD.WLSTT	EQU	$10  .b	Status der Fenster-Verriegelung
;	 01	fenster nicht verriegelt
;	$81	freigabe vorbereiten, wird 00
:	$80	verriegeln vorbereiten, wird $ff
;	$ff	verriegelt und gesperrt
SD.PRWIN	EQU	$11  .b	Primärfenster hat hier Bit 7 gesetzt
SD.BEHAV	EQU	$11  .b	Fenster-Arbeitstyp (Bit 0 "gut")
SD.WMODE	EQU	$12  .b	MODE für dieses Fenster
SD.MYSAV	EQU	$13  .b	=/= 0 eigener Sicherungsbereich angegeben
SD.WMOVE	EQU	$14  .b	Fensterbewegung
SD.PICK		EQU	$15  .b	Pick-Status
* Die allgemein ab JS-Rom gültigen Fensterparameter
SD.XMIN		EQU	$18  .w	oben LINKS (Abstand zum linken Rand)
SD.YMIN		EQU	$1A  .w	OBEN links (Abstand zum oberen Bildschirmrand)
SD.XSIZE	EQU	$1C  .w	Höhe
SD.YSIZE	EQU	$1E  .w	Breite
SD.BORWD	EQU	$20  .w	Rand-Breite um das Fenster (BORDER)
SD.XPOS		EQU	$22  .w	Cursor Horizontalposition
SD.YPOS		EQU	$24  .w	dto., vertikal
SD.XINC		EQU	$26  .w	Zeichenbreite
SD.YINC		EQU	$28  .w	Zeichenhöhe
SD.FONT		EQU	$2A	Adressen beider Zeichensätze
SD.SCRB		EQU	$32	Bildschirmspeicher Basisadresse
SD.PMASK	EQU	$36	Maske für Papierfarbe
SD.SMASK	EQU	$3A	dto., Schrifthintergrund
SD.IMASK	EQU	$3E	dto., Tinte
SD.CATTR	EQU	$42  .b	Zeichenattribute (s. unten)
SD.CURF		EQU	$43  .b	Flag Cursor unterdrückt(0) oder sichtbar(>0)
SD.PCOLR	EQU	$44  .b	Papierfarbe      (PAPER)
SD.SCOLR	EQU	$45  .b	Hintergrundfarbe (STRIP)
SD.ICOLR	EQU	$46  .b	Tinte            (INK)
SD.BCOLR	EQU	$47  .b	Randfarbe        (BORDER)
SD.NLSTA	EQU	$48  .b	Newline-Status  automatisch >0  nur bei Angabe <0
SD.FMOD		EQU	$49  .b	Fill ein(1) aus (0)
SD.YORG		EQU	$4A  .fp	Graphik-Fenster, Abszissen-Ursprung im Graphikmaß
SD.XORG		EQU	$50  .fp	dto., Ordinatenursprung
SD.SCAL		EQU	$56  .fp	dto., Maßstab
SD.FBUF		EQU	$5C	Ptr auf Fill-Puffer
SD.FUSE		EQU	$60	Ptr auf frei definierten Fill-Vector, sonst 0
SD.LINEL	EQU	$64  .w	Länge einer ganzen Bildschirmzeile in Bytes
SD.END		EQU	$68	I/O-Puffer bei con-Device (als queue)

* Bitnummern zu SD.CATTR
SD..ULIN	EQU	0	UNDER
SD..FLSH	EQU	1	FLASH
SD..TRNS	EQU	2	OVER 0 und 1 
SD..XOR		EQU	3	OVER -1 (XOR)
SD..DBHT	EQU	4	Doppelte Zeichenhöhe
SD..EXWD	EQU	5	erhöhte Breite
SD..DBWD	EQU	6	doppelte Breite
SD..GCHR	EQU	7	Zeichen werden graphisch positioniert.
* Werte zu SD.WLSTT
SD..WLOCK	EQU	-1	verriegelt
SD..WUNLK	EQU	0	freigegeben
SD..WNOLK	EQU	1	keine Verriegelung
SD..SLOCK	EQU	$FFFFFF80	verriegeln
SD..SUNLK	EQU	$FFFFFF81	freigeben
* Werte zu SD.BEHAV auf bit 0 eigene Marke für "gutes" Fenster
SD..WBSEC	EQU	1	"braves" Secundärfenster
SD..WBPRM	EQU	$81	"braves" Primärfenster
SD..BBSEC	EQU	0	"unartiges" Secundärfenster
SD..BBPRM	EQU	$80	"unartiges" Primärfenster

* 6.2.5.3	* SER * Definitionen für serielle Ein-/Ausgabe

SER.RXQL	EQU    81	Länge Empfänger-Puffer (ungeradzahlig !)
SER.TXQL	EQU    81	dto., Sender

* SQ/QXL
ser.qrxq	equ	$28	ptr auf (empfangsqueue-16)
ser.qtxq	equ	$2c	ptr auf (sendequeue-16)

* Kanal-Definitionsblock
 - NICHT SQ/QXL
SER.CHNO	EQU    24	Kanalnummer (1 oder 2)
SER.PAR		EQU    26	Parityermittlung
SER.TXHS	EQU    28	Sender-Handshake-Flag
SER.PROT	EQU    30	Protokoll  CR/LF positiv, CTRLZ null, RAW negativ
SER.RXQ		EQU    32	Header der Empfänger-Queue
SER.TXQ		EQU    32+SER.RXQL+Q.QUEUE+1	Header der Sender-Queue
SER.END		EQU    SER.TXQ+SER.TXQL+Q.QUEUE+1	erforderlicher Speicher

* 6.2.5.4	* FS * File-System Kanal-Definitionsblock (fs cdt)


FS.NEXT		EQU    $18    *	Link in nächsten fs-Kanal
FS.ACCES	EQU    $1C .b *	Art des Zugriffs
FS.DRIVE	EQU    $1D .b *	Laufwerk ID
FS.FILNR	EQU    $1E .w	File-Nummer
FS.NBLOK	EQU    $20 .w	Blocknummer für nächstes Byte
FS.NBYTE 	EQU    $22 .w	Bytenummer darin
FS.EBLOK	EQU    $24 .w	EOF in Blocknummer
FS.EBYTE	EQU    $26 .w	EOF Bytenummer darin
FS.CBLOK	EQU    $28	Ptr auf Tabelle für aktuellen Hilfsblock
FS.UPDT		EQU    $2C .b	gesetzt bei gültig verändertem File
*
FS.FNAME	EQU    $32  2 + max 36 .b * Filename
FS.SPARE	EQU    $58  72 bytes        Reserve
*		Eintragungen {*} vom IOSS bedient.

* 6.2.6		* CH * Header der Device-Handler
* Im Handler:
* Die Systemvariablen-Basis wird mit A6 übergeben, A7 ist der Supervisor-Stack.
* Die Geräte-Verwaltung (durch die Device-Handler) ist gewöhnlich interrupt-
* gesteuert. D3 bei Scheduler-Aufruf hat die Anzahl fehlender 20-ms-Interrupts.
* die Basisadresse des Handler-Definitionsblocks steht in A3.
* Namen für die Posten ch.lxint bis ch.aclos sind in {1} & {2} nicht angegeben.

* Verkettung und Installation der Interrupt-Bearbeitung im Bereich des
* physischen Geräte-Zugriffs. Adressen .L.. & .A.. paarweise einzutragen.
CH.LXINT  EQU    $00	link auf nächste Bearbeitung f. Externen Interrupt
CH.AXINT  EQU    $04	der hier gültige Aufruf
CH.LPOLL  EQU    $08	link auf nächste Bearbeitung eines Poll-Interrupt
CH.APOLL  EQU    $0C	der hier gültige Aufruf
CH.LSCHD  EQU    $10	link auf nächsten Scheduler-Interrupt
CH.ASCHD  EQU    $14	der hier gültige Aufruf
* In jedem Handler erforderlich ist die Einfügung CH.LIO, darauf
* folgend die drei Adressen für den Geräte-Zugriff (als Access Layer).
CH.LIO    EQU    $18	link zum nächsten I/O-Handler
CH.AIO    EQU    $1C	Adresse der Ein-/Ausgabe-Routine
CH.AOPEN  EQU    $20	Adresse der OPEN-Routine
CH.ACLOS  EQU    $24	Adresse der CLOSE-Routine
* Alias-Benennung zu den Labels ch.lio bis ch.aclos für einfache Devices
ch.next   EQU    $0	Ptr auf nächste Handler-Definition
ch.inout  EQU    $4	Einsprung für I/O (aus Trap #3)
ch.open   EQU    $8	OPEN-Einsprung    (aus Trap #2)
cj.close  EQU    $C	CLOSE-Einsprung   (dto.)

* 6.2.6.1	Nur für Directory-Devices (File System)

CH.SLAVE  EQU    $10	Einsprung zum Einrichten von Hilfsblöcken
CH.RENAM  EQU    $14	Einsprung reserviert für 'rename'
*                 18
CH.FORMT  EQU    $1C	Einsprung zum Formatieren
CH.DFLEN  EQU    $20	Länge des physischen Definitionsblocks
CH.DRNAM  EQU    $24 2+n .b	Filename aus Länge.w und bis zu 36 Zeichen

* 6.2.6.2	* Q * Queue-Standardheader (bei MINERVA Q.NEXTIN auf Anfang)

Q.EOFF	EQU    $0 .b	EOF-Flag (höchstwertiges Bit)
Q.NEXTQ	EQU    $0	(Rest) Null oder link zur nächsten Queue
Q.END	EQU    $4	Ptr hinter das Ende des Queue-Pufferbereiches
Q.NEXTIN EQU   $8	Ptr auf nächste Schreibposition (init. Ende)
Q.NXTOUT EQU   $C	Ptr auf nächste Leseposition    (init. Ende)
Q.QUEUE	EQU    $10	Beginn des Puffers

* 6.2.6.3	* BT * Organisation eines "slave block"

BT.STAT		EQU    $00 .b	drive-ID & status byte (s. u.)
BT.PRIOR	EQU    $01 .b	Prioritätszahl für diesen Block
BT.SECTR	EQU    $02 .w	Sector-Nummer (Microdrive * 2)
BT.FILNR	EQU    $04 .w	File-Nummer  (mdv)  } logische
BT.BLOCK	EQU    $06 .w	Block-Nummer (mdv)  }  Adresse
BT.END		EQU    $08
* Zu BT.STAT:
* Die höchstwertigen vier Bits enthalten den Ptr auf den physischen
* Geräte-Block SV.FSDEF, die anderen Bits haben folgende Bedeutung:
*		Statuscodes:
BT.UNAV		EQU    %0000	Block für File-System nicht verfügbar
BT.EMPTY	EQU    %0001	Block leer
BT.RREQ		EQU    %1001	Anforderung, diesen Block vom mdv zu lesen
BT.TRUE		EQU    %0011	Block ist wahres Abbild des File-Inhalts
BT.AVER		EQU    %1011	Block erwartet Verifikation
BT.UPDT		EQU    %0111	Block ist verändert worden (updated)
*		Statuscode-Masken:
BT.ACTN		EQU    %00001100	Lese- oder Schreibanforderung prüfen
BT.INUSE	EQU    %00001110	prüfen, ob ein File-Block besetzt ist
*		Bedeutung gesetzter Bits des Statuscode:
BT..FILE	EQU	0	bezeichnet einen File-Block
BT..ACCS	EQU	1	Zugriff auf den Inhalt freigegeben
BT..WREQ	EQU	2	Schreibanforderung
BT..RDVR	EQU	3	Anforderung zum Lesen oder Verifizieren

* 6.2.6.4		gemeinsamer Teil im physischen Filesystem-Definitionsblock

FS.DRIVR	EQU    $10    *	Ptr auf Handler
FS.DRIVN	EQU    $14 .b *	Laufwerk Nummer
FS.MNAME	EQU    $16  2 + max 10 .b  * Mediumname
FS.FILES	EQU    $22 .b	Anzahl offener Files

* Positionen * werden bei Einrichtung der Tabelle  vom IOSS belegt.

* 6.2.6.5	* MD * Physische mdv-Definitionen

MD.DRIVR	EQU    $10	Ptr auf Handler
MD.DRIVN	EQU    $14 .b	Laufwerksnummer
MD.MNAME	EQU    $16 2 + 10 .b	Mediumname und Prüfzahl
MD.FILES	EQU    $22 .b	Anzahl offener Files
MD.ESTAT	EQU    $23 .b	Fehlerzustand  okay(0) fehlerhaft(-1)
MD.FAIL		EQU    $24 .b	Zähler für Fehlversuche
MD.MAP		EQU    $28 256*2 bytes	Sector-Plan (mdv map)
MD.FILMP	EQU    $28	darin Files in Sectoren * 2
*				schlecht $FE, frei $FD
*				während des Löschens $FC
MD.BLKMP	EQU    $29	Block in Sectoren * 2
MD.LSECT	EQU    $226 .w	letzter zugewiesener Sector
MD.PENDG	EQU    $228 256.w Je Sector * 2  Verzeichnis anstehender Operationen
*	keine(0), slave block nr(>0), schreiben(-1), verifizieren(-2)
MD.END    EQU    $428

* 6.2.6.6	Definitionen zur Directory-Struktur - Namen frei gewählt

MD.FLEN		EQU    $00	Filelänge
MD.FACS		EQU    $04  .b	File-Zugriffsschlüssel
MD.FTYP		EQU    $05  .b	File-Typ
MD.FINF		EQU    $06  8.b	Fileinformation
MD.FNAM		EQU    $0E  2+36 .b Filename
MD.FUPDT	EQU    $34	Datum des jüngsten Schreibvorganges
MD.FREAD	EQU    $38	dto., Lesevorgang
MD.FCOPY	EQU    $3C	dto., Copieren
MD.DEND		EQU    $40	Länge des Directory-Blocks

* 6.2.6.7 erweiterter Dfinitionsblock des Pointer-Device (CON- und SCR-Kanäle)

PT_WMAN		EQU	$28	Ptr auf WINDOW MANAGER VERSION / VECTOR
PT_WMOVE	EQU	$2C  .b	TOP WINDOW MOVE / RESIZE STATUS (0, $80, $81) 
PT_KEYRW	EQU	$2D  .b	jüngste KEYROW
PT_XICNT	EQU	$2E  .w	Zähler der EXTERNAL INTERRUPTS
PT_ACCEL	EQU	$30  .w	ACCELERATOR (Gaspedal für den Tastatur-Cursor)
PT_KACCL	EQU	$32  .w	ACCELERATOR Cont. (D=1+TICKS/KACCL)
PT.KACCL	EQU	8		Vorgabewert zu pt_kaccl
PT_XACCL	EQU	$34  .w	X-MAUS-ACCELERATOR(X=X+(XINC*(XACCL+XINCT)/(XACCL+1)
PT.XACCL	EQU	4		Vorgabewert
PT_YACCL	EQU	$36		Y-MAUS-ACCELERATOR
PT.YACCL	EQU	8		Vorgabewert
PT_NPOS		EQU	$38		Neue Position (aus polled Int.)
PT_NXPOS	EQU	$38  .w	X
PT_NYPOS	EQU	$3A  .w	Y
PT_POS		EQU	$3C		aktuelle Position
PT_XPOS		EQU	$3C  .w	X
PT_YPOS		EQU	$3E  .w	Y
PT_INC		EQU	$40		Schrittweite für die Position
PT_XINC		EQU	$40  .w	X
PT_YINC		EQU	$42  .w	Y
PT_ADDR		EQU	$44		Bildschirmadresse des Pointers
PT_BSTAT	EQU	$48  .b	BUTTON STATUS
PTB.BNCE	EQU	-2		... BUTTON BOUNCING
PTB.UP		EQU	 0		... BUTTON UP
PTB.PRES	EQU	 1		... BUTTON PRESSED
PT_BSUPP	EQU	$49  .b	BUTTON unterdrückt
PTB.PSUP	EQU	-1		... Taste unterdrückt
PTB.SSUP	EQU	 1		... Berührung (Überfahren) unterdrückt
PT_BPRES	EQU	$4A  .b	BUTTON getastet (SPACE/HIT oder ENTER/DO)
;	0	keine taste
;	1	linke maus
;	2	rechte maus
PT_BCURR	EQU	$4B  .b	BUTTON just getastet (wird als berührt gelten)
PT_WAKE		EQU	$4C  .b	EXTERNAL INTERRUPTS zum Aufwecken des Pointers
PT.WAKE		EQU	8		Vorgabe für die Anzahl
PT_RELAX	EQU	$4D  .b	Abklingzeit für Tastaturübernahme
PT.RELAX	EQU	25		Vorgabe
PT_RELTM	EQU	$4E  .b	Timer (Zähler) für die Abklingzeit
PT_KPRTM	EQU	$4F  .b	Timer für Tastaturbetätigung
PT_PSTAT	EQU	$50  .b	POINTER - 0 sichtbar, <0 wartend, >0 unbeweglich
PT.SUPKY	EQU	 1		ganz unterdrücken bei Tastatureingabe
PT.SHOW		EQU	-1		POINTER beim nächsten Aufruf anzeigen
PT.SUPIO	EQU	 1		IO - dauerhaft unterdrücken (<0 NIE freigeben)
PT.SUPMD	EQU	 1		desgleichen bei MODE
PT.SUPCC	EQU	-2		Unteerdrückung bei CTRL/C
PT.SUPSR	EQU	-2		auch für SAVE oder RESTORE - 2 TICKS
PT.CLRDM	EQU	20		Wartezeit zum Löschen der DUMMY QUEUE
PT_PMODE	EQU	$51		alte MODE
PT_SCHFG	EQU	$52		SCHEDULER FLAG, =/=0 nach erneuertem Pointer-Record
PT_FREEZ	EQU	$53		POINTER einfrieren
PT.FREEZ	EQU	5		Vorgabe 1/10 SEC
PT_CLINK	EQU	$54		Adresse der CON-Device-Handler-Verkettung, PIF hilfskanal-handler
PT_MTEST	EQU	$58		Adresse MODE CHANGE CHANNEL TEST, cdt des hilfskanals
PT_PSPRT	EQU	$60		Ptr zum SPRITE
PT_SPSAV	EQU	$64		Bereich für SPRITE-SAVE
PT.SPSLN	EQU	$360		Vorgabe 64X48 PIXELS 18X48 BYTES
PT_HEAD		EQU	$68		Ptr zum Kopf der Liste der PRIMARY WINDOWS
PT_TAIL		EQU	$6C		dto. zum Ende
PT_LIODM	EQU	$70		DUMMY IO LINKAGE (INITIAL OPEN)
PT_AIODM	EQU	$74		DUMMY IO ENTRY POINT
PT_AOPDM	EQU	$78		DUMMY OPEN (STANDARD CON, abgeändert)
PT_ACLDM	EQU	$7C		DUMMY CLOSE (abgekoppelte CON)
PT_DUMQ1	EQU	$80		Ptr auf 1. DUMMY QUEUE (des hilfskanals, ohne PIF-disp.)
* pt_dumq1 gilt bei maus-daten
PT_KQOFF	EQU	$84		Ofs. der der Tastatur-QUEUE zu (A0)
PT_COPEN	EQU	$88		Ptr auf standard CONSOLE OPEN
PT_LSTUF	EQU	$8C  .b	Letze Button-Taste für den STUFFER
PT_STUF1	EQU	$8D  .b	1. CHARACTER TO STUFF
PT_STUF2	EQU	$8E  .b	2. dto.
PT_REC		EQU	$90		aktueller POINTER RECORD (Bericht)
PT_CCHAD	EQU	$A8		Adresse des Fensterkanals unter dem Pointer
PT_CWSTT	EQU	$AC  .b	aktueller Fensterstatus +1 flasche MODE, -1 Taste
PT_CWBSY	EQU	$AD  .b	Zähler für besetztes Fenster
PT.CWBSY	EQU	10		Anzahl SCHEDULER-Aufrufe vor BUSY-Zustand
PT_SUPCR	EQU	$AE  .b	CURSOR KEY STUFFING unterdrücken
PT_KYPOL	EQU	$AF  .b	Taste polled
PT_SVERS	EQU	$B0  .b	DYNAMIC SPRITE VERSION
PT_MVERS	EQU	$B1  .b	Zählermaximum dazu
PT_RANDI	EQU	$B2  .w	Anfangswert der Zufallszahl für SPRAY
PT.RANDM	EQU	$E72B	Multiplikator dafür
PT.RANDA	EQU	3		Zugabe dafür
PT_SPBUF	EQU	$B4		Ptr auf PIXEL SPRAY Puffer
PT_SPBSZ	EQU	$B8		dessen Größe
PT_HBASE	EQU	$BC		HARDWARE Basisadresse
PT_KYRWR	EQU	$C0		Ptr auf Routine für KEYROW
PT_PTROK	EQU	$C4		Ptr auf OK
PT_AIORM	EQU	$C8		Ptr auf ROM I/O ROUTINE
PT_AOPRM	EQU	$CC		Ptr auf ROM OPEN ROUTINE
PT_ACLRM	EQU	$D0		Ptr auf ROM CLOSE ROUTINE
PT_OCHAD	EQU	$D4		OLD CURRENT CHANNEL ADDRESS
*			6 .b	Reserve
pt.dflg		equ	$dd .b	flag zur datenuebernahme
PT_CKEYW	EQU	$DE  .b	0, wenn Cursor den Pointer fensterbezogen bewegt
PT_CKEY		EQU	$DF  .b	0, wenn Cursor den Pointer bewegt
PT_END		EQU	$E0		Länge des Pointer Linkblockes
* 	weitere undokumentierte posten (ermittelt in PIF 1.48..1.71)
pt.vram		equ	$e8	videoram-adresse
pt.vsiz		equ	$ec	groesze des vram-bereichs
pt.linl		equ	$f0 .w	sd.linel-vogabe fuer ganzes bild
pt.xmax		equ	$f2 .w	maximale breite in pixel
pt.ymax		equ	$f4 .w	max. hoehe
*

* 6.2.7		* NET * Netzwerk-Datenblock

NET.HEDR	EQU    $18  8.b	Vorspann für Datenpaket (header) :
NET.DEST	EQU    $18  .b	Nummer der Zielstation
NET.SELF	EQU    $19  .b	Nummer der eigenen Station
NET.BLKL	EQU    $1A  .b	Datenblock-Nummer lo  (low byte)
NET.BLKH	EQU    $1B  .b	dto., hi              (high byte)
NET.TYPE	EQU    $1C  .b	Blöcke senden, EOF(1), nicht EOF(0)
NET.NBYT	EQU    $1D  .b	Anzahl übertragener Bytes
NET.DCHK	EQU    $1E  .b	Daten-Prüfsumme
NET.HCHK	EQU    $1F  .b	Vorspann-Prüfsumme
NET.DATA	EQU    $20  255.b	Datenblock
NET.RPNT	EQU    $11F .b	Laufpointer auf Datenblock

* 6.2.8		* CMD * IPC-Befehle für MT.IPCOM
* nach dem Befehl folgt vor den Parametern in einem Byte die Angabe, wieviele
* Parameter vorhanden sind, dann in je 2 Bits für die einzelnen Bytes, wie mit
* den möglichen sechzehn Bytes der Parameter-Tabelle zu verfahren ist :
*	%00		die niederwertigen 4 Bits senden
*	%01		nichts zu senden
*	%10		alle 8 Bits senden
*	%11		nichts senden
* Alle 16 Angaben sind einzutragen, auch, wo der Befehl das nicht erfordert.
* Nach den Parametern steht in Bits 0 und 1 eines Byte Gleiches für die Antwort.
RSET.CMD	EQU	0		Systemreset für CoProc
STAT.CMD	EQU	1		Report Input-Status:
* 				Bit	Bedeutung
STAT.KPN	EQU			0	Tastenpuffer enthält Zeichen
STAT.SON	EQU			1	Tongenerator ist in Betrieb
STAT.IP1	EQU			4	ser1-Puffer enthält Daten
STAT.IP2	EQU			5	ser2-Puffer dto.
STAT.WP		EQU			6	mdv-Schreibfreigabe
OPS1.CMD	EQU	2		RS232 Kanal 1 öffnen
OPS2.CMD	EQU	3		dto., 2
CLS1.CMD	EQU	4		RS232 Kanal 1 schließen
CLS2.CMD	EQU	5		dto., 2
RDS1.CMD	EQU	6		RS232 Kanal 1 lesen
RDS2.CMD	EQU	7		dto., 2
* RDSx.CMD Bitmasken: vor den Zeichen wird erst ein Statusbyte empfangen.
RSST.NO		EQU  			%00111111	Anzahl der übertragenen Bytes
RSST.FE1	EQU  			%01000000	ser1-Fehler - Stop-Bit fehlte
RSST.FE2	EQU   			%10000000	ser2 dto.
RDKB.CMD	EQU	8		Tastatur lesen
* RDKB.CMD zuerst vier Statusbits (Bitmasken)
RDKB.NO		EQU			%0111	Anzahl Zeichen im Puffer des CoProc
RDKB.RPT	EQU			%1000	Bit gesetzt bei Tastenwiederholung
* 	dann vor jedem 8-Bit-Zeichen 4 Bits für die Sondertasten (Bitnummern)
RDKB.ALT	EQU			0	ALT-Taste
RDKB.CTL	EQU			1	CTRL-Taste
RDKB.SFT	EQU			2	SHIFT-Taste
RDKB.OVF	EQU			3	vor letzem Zeichen bei Pufferüberlauf
KBDR.CMD	EQU	9		Tastaturmatrix Zeilenweise lesen
* Zeilennummer ist in 4 Bits anzugeben, 8-Bit-Zeichen kommt wie bei KEYROW *
INSO.CMD	EQU	10		Tongenerator starten
* INSO.CMD	8 Parameterbytes
INSO.FRL	EQU			0	niedrigster Ton
INSO.FRH	EQU			1	höchster Ton
INSO.FXL	EQU			2	Dauer.w eines Tones, lo-Byte
INSO.FXH	EQU			3	dto., hi-Byte
INSO.MXL	EQU			4	Dauer.w des gesamten Klanges, lo-Byte
INSO.MXH	EQU			5	dto., hi-Byte
INSO.FRY	EQU			6
*				%00001111	Wiederholungsrate
*				%11110000	Schrittweite zur nächsten Frequenz
INSO.RND	EQU	 		7
*				%00001111 Verzerrrung der Widerholungsrate
*				%11110000 dto., Schrittweite
KISO.CMD	EQU	11		Tongenerator abschalten
MDRS.CMD	EQU	12		%0001  -  verminderte Mdv-Empfindlichkeit
BAUD.CMD	EQU	13		Baudrate einstellen
* BAUD.CMD in 4 Bits ist die Potenz von 2 anzugeben, durch die 19200 für die
* einzustellende Baudrate geteilt werden muß, statt 150 Baud gelten 75 Baud.
BAUD.192	EQU		%0000	19200 = 19200 / 2^0
BAUD.96		EQU		%0001	 9600 = 19200 / 2^1
* und weiter bis
BAUD.3		EQU		%0101	  300 = 19200 / 2^6
BAUD.1		EQU		%0111	   75 = 19200 / 2^7 / 2 -  als Sonderfall
RAND.CMD	EQU	14		Erzeugen einer 16-Bit-"Zufalls"-Zahl
TEST.CMD	EQU	15		Test durch unveränderte Rückgabe eines 8-Bit-Wertes
* 6.3  	* TRAP  *


* 6.3.1	TRAP #0	Supervisor-Mode einstellen
*         Nur MINERVA setzt S-Bit direkt & erhält alten Status.

* 6.3.2	TRAP #1	Manager	-	Systemverwaltung

MT.INF		EQU    $00	Systeminformation
MT.CJOB		EQU    $01	Job einrichten
MT.JINF		EQU    $02	Angaben zu einem Job
MT.RJOB		EQU    $04	Job entfernen
MT.FRJOB	EQU    $05	Job unter allen Umständen entfernen
MT.FREE		EQU    $06	größten zusammenhängenden freien Speicher ermitteln
MT.TRAPV	EQU    $07	Liste neuer Trap-Vectoren einfügen
MT.SUSJB	EQU    $08	Job sperren (suspendieren)
MT.RELJB	EQU    $09	Suspendierung eines Job aufheben
MT.ACTIV	EQU    $0A	Job aktivieren
MT.PRIOR	EQU    $0B	Prioritätszahl eintragen
MT.ALLOC	EQU    $0C	Abschnitt des Heap reservieren
MT.LNKFR	EQU    $0D	dto., freigeben
MT.ALRES	EQU    $0E	Abschnitt im Bereich residenter Proceduren reservieren
MT.RERES	EQU    $0F	dto., freigeben
MT.DMODE	EQU    $10	Bildschirm-Betriebsart festlegen
MT.IPCOM	EQU    $11	IPC-Kommando senden
MT.BAUD		EQU    $12	Baudrate festlegen
MT.RCLCK	EQU    $13	Uhr lesen
MT.SCLCK	EQU    $14	Uhr auf einen Zählerstand setzen
MT.ACLCK	EQU    $15	Uhr stellen
MT.ALBAS	EQU    $16	Basic-Speicher erweitern (rel A6)
MT.REBAS	EQU    $17	Basic-Speicher zurückgeben (rel A6)
MT.ALCHP	EQU    $18	Bereich im Common Heap reservieren
MT.RECHP	EQU    $19	dto., freigeben
MT.LXINT	EQU    $1A	Handler in Extern-Interrupt-Liste einfügen
MT.RXINT	EQU    $1B	dto., entfernen
MT.LPOLL	EQU    $1C	(polled) Task in Liste für Abfrage-Interrupt einfügen
MT.RPOLL	EQU    $1D	dto., entfernen
MT.LSCHD	EQU    $1E	Task in Scheduler-Liste einfügen
MT.RSCHD	EQU    $1F	dto., Handler entfernen
MT.LIOD		EQU    $20	Liste der I/O-Device-Handler erweitern
MT.RIOD		EQU    $21	I/O-Handler entfernen
MT.LDD  	EQU    $22	Liste der Directory-Device-Handler erweitern
MT.RDD  	EQU    $23	dto., Handler entfernen
MT.CNTRY	EQU    $24	TRA-Tabellen einfügen
MT.TRA		EQU	mt.cntry
MT.NIX  	EQU    $25	Sinclair reserviert, ohne bekannte Verwendung
* mit der Thing-Erweiterung in SMS2 und EMU zusätzlich
SMS.LTHG	EQU    $26	Thing einfügen
SMS.RTHG	EQU    $27	nicht benutztes Thing entfernen
SMS.UTHG	EQU    $28	Thing benutzen
SMS.FTHG	EQU    $29	   freigeben
SMS.ZTHG	EQU    $2A	   wegnehmen
SMS.NTHG	EQU	$2B	   nächstes in der Reihenfolge
SMS.STHG	EQU	$2C	   nächsten Benutzer angeben
SMS.NTHU	EQU	sms.sthg

* 6.3.3	Trap #2	-	I/O-Zuweisung

IO.OPEN  	EQU    1	OPEN abhängig von D3 (s.u.)
IO.CLOSE 	EQU    2	CLOSE
IO.FORMT 	EQU    3	FORMAT
IO.DELET 	EQU    4	DELETE

* D3-Codierung IO.OPEN
IO.OLD		EQU    0	OPEN vorhandenes File oder Gerät
IO.SHARE	EQU    1	OPEN_IN  File, mehrere Kanäle zum selben File möglich
IO.NEW		EQU    2	OPEN_NEW File
IO.OVERW	EQU    3 TK	OPEN_OVER File neu eröffnen, altes überschreiben
IO.DIR  	EQU    4 TK	OPEN_DIR  Directory aufmachen

* 6.3.4	Trap #3	-	I/O allgemein, Bildschirm, Fenster, Files

* 6.3.4.1		I/O
IO.PEND 	EQU	0	auf vorhandene Eingabe prüfen
IO.FBYTE	EQU	1	ein Byte holen
IO.FLINE	EQU	2	eine Zeile Bytes holen
IO.FSTRG	EQU	3	eine Kette Bytes holen (string)
IO.EDLIN	EQU	4	eine Zeile editieren
IO.SBYTE	EQU	5	ein Byte senden
IO.SSTRG	EQU	7	eine Kette Bytes senden
* 6.3.4.2		Bildschirm und Fenster
SD.EXTOP	EQU      9	frei Definierte Operation, Adresse(A3)
SD.PXENQ	EQU    $0A	Fenstermaße & Cursor in Pixel-Daten
SD.CHENQ	EQU    $0B	dto., auf Zeichen bezogen
SD.BORDR	EQU    $0C	BORDER
SD.WDEF 	EQU    $0D	WINDOW
SD.CURE 	EQU    $0E	Cursor freigeben
SD.CURS 	EQU    $0F	Cursor unterdrücken
SD.POS  	EQU    $10	Cursor auf Zeile/Spalte in Zeichen
SD.TAB  	EQU    $11	Cursor auf Spalte
SD.NL   	EQU    $12	neue Zeile
SD.PCOL 	EQU    $13	vorige Spalte
SD.NCOL 	EQU    $14	nächste Spalte
SD.PROW 	EQU    $15	vorige Zeile
SD.NROW 	EQU    $16	nächste Zeile - ohne SCROLL am Bildende
SD.PIXP 	EQU    $17	Cursor auf Pixel-Position
SD.SCROL	EQU    $18	SCROLL
SD.SCRTP	EQU    $19	SCROLL oberes Teilfenster
SD.SCRBT	EQU    $1A	SCROLL unteres Teilfenster
SD.PAN  	EQU    $1B	PAN
SD.PANLN	EQU    $1E	PAN Cursorzeile
SD.PANRT	EQU    $1F	PAN rechten Teil der Cursorzeile
SD.CLEAR	EQU    $20	CLS
SD.CLRTP	EQU    $21	CLS oberes Teilfenster
SD.CLRBT	EQU    $22	CLS unteres Teilfenster
SD.CLRLN	EQU    $23	CLS Cursorzeile
SD.CLRRT	EQU    $24	CLS rechten Teil der Cursorzeile
SD.FOUNT	EQU    $25	Adressen für die Zeichensätze eintragen
SD.RECOL	EQU    $26	RECOL
SD.SETPA	EQU    $27	PAPER
SD.SETST	EQU    $28	STRIP
SD.SETIN	EQU    $29	INK
SD.SETFL	EQU    $2A	FLASH
SD.SETUL	EQU    $2B	UNDER
SD.SETMD	EQU    $2C	OVER
SD.SETSZ	EQU    $2D	CSIZE
SD.FILL 	EQU    $2E	BLOCK
SD.BLOK		EQU	sd.fill
SD.DONL 	EQU    $2F	anstehenden Zeilenvorschub ausführen
SD.POINT	EQU    $30	POINT
SD.DOT		EQU	sd.point
SD.LINE 	EQU    $31	LINE
SD.ARC  	EQU    $32	ARC
SD.ELIPS	EQU    $33	ELLIPSE
SD.SCALE	EQU    $34	SCALE
SD.FLOOD	EQU    $35	FILL
SD.GCUR 	EQU    $36	CURSOR mit vier Parametern
* weiter nicht dokumentiert $37 bis $39
sd.rop  	equ    $37	Rasteroperation - Verwendung nicht bekannt
sd.dot  	equ    $38	POINT in Pixel-Koordinaten, dto.
sd.lin  	equ	$39	LINE, dto.
* 6.3.4.3		file system
FS.CHECK	EQU	$40	auf zur Bearbeitung anstehende Operationen prüfen
FS.FLUSH	EQU	$41	FLUSH - alle Puffer abschließend sichern
FS.POSAB	EQU	$42	setzt File-Pointer Position absolut
FS.POSRE	EQU 	$43	dto., relativ zur aktuellen Position
FS.POSV		EQU	$44  SM (unsichere Angabe zu sms2 : auf virtuelle Adresse)
FS.MDINF	EQU	$45	Information über ein Medium holen
FS.HEADS	EQU	$46	File-Header eintragen
FS.HEADR	EQU	$47	dto., lesen
FS.LOAD		EQU	$48	LBYTES - File laden
FS.SAVE		EQU	$49	SBYTES - File sichern
* dazu mit Trumpcard / Toolkit II
FS.RENAME	EQU	$4A	RENAME - File umbenennen
FS.TRUNC	EQU	$4B	TRUNCATE - File an aktueller Position kappen
* mit Level 2 Device-Handler (TrumpCard, GoldCard, SMS2)
FS.DATE		EQU	$4C	Lesen/Eintragen des Update- oder Backup-Datums
FS.MKDR		EQU	$4D	(leeres) File zum Directory machen
*		 4E	"Wasserstand" bei Thor
FS.VERS		EQU	$4E	Lesen/Eintragen der File-Versionsnummer
FS.XINF		EQU	$4F	erweiterte Angaben zu Device- und Mediumnamen holen
* 6.3.4.4		Pointer - Traps
IOP.FLIM	EQU	$6C	Fensterbegrenzung holen
IOP.SVPW	EQU	$6D	Teil eines Fensters sichern
IOP.RSPW	EQU	$6E	Teil eines Fensters zurückholen
IOP.SLNK	EQU	$6F	Bytes in den Link-Block eintragen
IOP.RPTR	EQU	$70	Pointer lesen
IOP.RPXL	EQU	$71	Pixel lesen:
* IOP.RPXL		Bits	Anforderung
IOP..GCL	EQU		16	mit angegebener Farbe
IOP..SDR	EQU		17	nach unten rechts abtasten
IOP..SLR	EQU		18	von links nach rechts abtasten
IOP..SSC	EQU		19	dieselbe Farbe suchen
IOP..SCN	EQU		31	Abtastung freigeben
IOP.WBLB	EQU	$73	ein Entenei legen: 'Blob' ist ein rundliches Muster
IOP.LBLB	EQU	$74	eine Line Blobs zeichnen
IOP.WSPT	EQU	$76	Sprite schreiben
IOP.SPRY	EQU	$77	Pixels versprühen
IOP.FILM	EQU	$78	FILL innerhalb einer Maske
IOP.OUTL	EQU	$7A	Fenstermaße setzen:
* IOP.OUTL		mit den Werten
IOP..SET	EQU		0	gerade erledigt
IOP..MOV	EQU		1	Inhalt umsetzen und Maße einrichten
IOP.SPTR	EQU	$7B	Pointer-Position setzen:
* IOP.SPTR		mit den Werten
IOP..REW	EQU		-1	Pointer relativ zum Fenster
IOP..ABS	EQU		0	mit absoluter Position
IOP..REH	EQU		1	relativ zum "hit"-Bereich
IOP.PICK	EQU	$7C	Fenster hervorholen (pick) oder verbergen:
* IOP.PICK		mit den Werten
IOP..BOT	EQU		-1	Unteren Bereich holen
IOP..NLK	EQU		-2	Verriegelbarkeit aufheben
IOP.SWDF	EQU	$7E	Fenster aufsuchen und sichern
IOP.WRST	EQU	$7F	Fenster wiederherstellen
* 6.4.1 * Qdos-Vectoren alphabetisch  (MINERVA-Teile klein geschrieben)

* S   NUR  im Supervisor-Betrieb und NICHT aus Interrupt-Routine heraus
* U  NICHT im Supervisor-Betrieb aufzurufen.
* + Vectoren ab $124 sind mit $4000(An) aufzurufen.

* BP * BV *
bp.chan   equ    $140     +   Parameter als Kanalnummer holen, Vorgabe #1
bp.chand  equ    $142     +   dto., Vorgabe wählbar
bp.chnew  equ    $146     +   neuen Basic-Kanal aufmachen
bp.chnid  equ    $144     +   Kanal-ID überprüfen
bp.fname  equ    $148     +   Parameter als Filenamen holen
BP.INIT   EQU    $110		 Einfügen neuer Basic-Proceduren (und Funktionen)
BP.LET    EQU    $120		 Variablenzuweisung
BV.CHRIX  EQU    $11A		 Platz im Rechnerstack prüfen & freimachen
* CA * CN *
CA.GTFP   EQU    $114		 f.p.-Zahl holen
CA.GTINT  EQU    $112		 16-Bit-Ganzzahl holen
CA.GTLIN  EQU    $118		 32-Bit-Ganzzahl holen
CA.GTSTR  EQU    $116		 Zeichenkette holen
ca.cnvrt  equ    $14a     +   Datentyp umwandeln
ca.eval   equ    $14e     +   (der Sinn bleibt dunkel)
ca.opexe  equ    $14c     +   (dto.)
CN.BTOIB  EQU    $104	ASCII nach Binär, 8-Bit-Zahl
CN.BTOIL  EQU    $108	dto., 32-Bit
CN.BTOIW  EQU    $106	dto., 16-Bit
CN.DATE   EQU    $EC	Datum in sec als 32-Bit-Zahl
CN.DAY    EQU    $EE	Wochentag
CN.DTOF   EQU    $100	ASCII nach f.p.-Zahl
CN.DTOI   EQU    $102	dto., 16-Bit
CN.FTOD   EQU    $F0	f.p. nach ASCII
CN.HTOIB  EQU    $10A	ASCII nach sedecimal, 8-Bit-Zahl
CN.HTOIL  EQU    $10E	dto., 32-Bit
CN.HTOIW  EQU    $10C	dto., 16-Bit
CN.ITOBB  EQU    $F4	binär nach ASCII, 8-Bit-Zahl
CN.ITOBL  EQU    $F8	dto., 32-Bit
CN.ITOBW  EQU    $F6	dto., 16-Bit
CN.ITOD   EQU    $F2	16-Bit-Ganzzahl nach ASCII
CN.ITOHB  EQU    $FA	sedecimal nach ASCII, 8-Bit-Zahl
CN.ITOHL  EQU    $FE	dto., 32-Bit
CN.ITOHW  EQU    $FC	dto., 16-Bit
* GO *
go.new    equ    $13e     +   NEW ausführen
* IO * IP *
IO.NAME   EQU    $122	Prüfen eines Devicenamen
IO.QEOF   EQU    $E4	Queue EOF markieren
IO.QIN    EQU    $E0	Byte in Queue ablegen
IO.QOUT   EQU    $E2	Byte einer Queue entnehmen
IO.QSET   EQU    $DC	Queue einrichten
IO.QTEST  EQU    $DE	Status einer Queue prüfen
IO.SERIO  EQU    $EA   S	Allgemeine I/O-Bearbeitung
IO.SERQ   EQU    $EB   S	Direkte Queue-Bearbeitung
ip.kbend  equ    $152  S  +   abschließende Tastatur-Auswertung
ip.kbrd   equ    $150  S  +   Tastatur lesen
*
MD.READ   EQU    $124     +   einen Sector lesen
MD.SECTR  EQU    $12A     +   Sectorheader lesen
MD.VERIN  EQU    $128     +   einen Sector mit eigenen Daten vergleichen
MD.WRITE  EQU    $126     +   einen Sector schreiben
mi.muell  equ    $156  NIE !  hier steht -1, Aufruf bewirkt Adressierungsfehler
MM.ALCHP  EQU    $C0   S	Bereich aus dem Common Heap zuweisen
MM.ALLOC  EQU    $D8	Heap-Bereich reservieren
MM.LNKFR  EQU    $DA	freien Speicher an Heap zurückgeben
mm.move   equ    $158     +   Speichertransfer absolut
mm.mrtoa  equ    $15a  U  +   dto., rel nach abs
mm.mator  equ    $15c  U  +   dto., abs nach rel
mm.mrtor  equ    $15e  U  +   dto., rel nach rel
MM.RECHP  EQU    $C2   S	Bereich des Common Heap freigeben
*
RI.EXEC   EQU    $11C	eine Rechneroperation ausführen
RI.EXECB  EQU    $11E	eine Liste Rechneroperationen ausführen
*
sb.start  equ    $154     +   Basic-Job starten
*
UT.CON    EQU    $C6	Consolfenster einrichten
UT.CSTR   EQU    $E6	zwei Strings vergleichen
UT.ERR0   EQU    $CA	Fehlermeldung an Kanal 0 oder 1 (fehlerhaft !)
UT.ERR    EQU    $CC	dto., an beliebigen Kanal
ut.istr   equ    $13c     +   INSTR-Operation ausführen
UT.LINK   EQU    $D2	einen Posten einer gefädelten Liste zufügen
UT.MINT   EQU    $CE	Integer nach ASCII
UT.MTEXT  EQU    $D0	einen Text ausgeben
UT.SCR    EQU    $C8	Bildschirmfenster einrichten
UT.UNLNK  EQU    $D4	Listenelement entfernen
UT.WINDW  EQU    $C4	Fenster beliebiger Art einrichten

* 6.4.2 *	Hotkey-Vectoren, nur innerhalb des Hotkey-Systems.
HK.CRJOB	EQU	$018	Job einrichten
hk.cjob		equ	hk.crjob
HK.DO		EQU	$028	HK ausführen
HK.FITEM	EQU	$014	einen Posten heraussuchen
HK.GTBUF	EQU	$030	D0=0 aktuellen, -1 alten Puffer holen
hk.getbf	equ	hk.gtbuf
HK.GUARD	EQU	$034	ab Version 1.04
HK.KJOB		EQU	$01C	Job löschen
HK.REMOV	EQU	$024	HK entfernen
hk.remv		equ	hk.remov
HK.SET		EQU	$020	HK Zustand bestimmen:
HKS.OFF		EQU	-1		abschalten
HKS.ON		EQU	 0		einschalten
HKS.RSET	EQU	 1		zurückstellen
HKS.SET		EQU	 2		einstellen
HK.STBUF	EQU	$02C	Ablagepuffer
hk.sstbf	equ	hk.stbuf

* 6.5 * Angaben zu RI.EXEC und RI.EXECB
* (Ungerade codierte kleingeschriebene Operationen gelten nur in MINERVA.)
* Name       Op-Code A1-Stack Funktion - f.p.-Zahlen, wo nicht anders bezeichnet
RI.TERM	  EQU     00    0	Rechner verlassen
ri.one    EQU     01   -6	Constante Eins eintragen
RI.NINT   EQU     02   +4	gerundete Ganzzahl (16-Bit Integer)
ri.zero   EQU     03   -6	Constante Null eintragen
RI.INT    EQU     04   +4	gekappte Ganzzahl
ri.n      EQU     05   -6	signed byte in f.p.-Zahl -128 bis 127
RI.NLINT  EQU     06   +2	gerundete 32-Bit-Ganzzahl
ri.k      EQU     07   -6	(sehr dubios beschrieben, s. Handbuch)
RI.FLOAT  EQU     08   -4	16-Bit-Integer nach f.p.
ri.flong  EQU     09   -2	32-Bit-Integer nach f.p.
RI.ADD    EQU    $0A   +6	t.o.s. + n.o.s.
RI.SUB    EQU    $0C   +6	t.o.s. - n.o.s.
ri.halve  EQU    $0D    0	t.o.s. halbieren
RI.MULT   EQU    $0E   +6	t.o.s. * n.o.s.
ri.doubl  EQU    $0F    0	t.o.s. verdoppeln
RI.DIV    EQU    $10   +6	t.o.s. / n.o.s.
ri.recip  EQU    $11    0	1 / t.o.s.
RI.ABS    EQU    $12    0	positiver Wert
ri.roll   EQU    $13    0	fp1 fp2 fp3 => fp2 fp3 fp1
RI.NEG    EQU    $14    0	t.o.s. negieren
ri.over   EQU    $15   -6	n.o.s. holen
RI.DUP    EQU    $16   -6	t.o.s. copieren
ri.swap   EQU    $17    0	t.o.s. mit n.o.s. vertauschen
RI.COS    EQU    $18    0	cosinus
RI.SIN    EQU    $1A    0	sinus
RI.TAN    EQU    $1C    0	tangens
RI.COT    EQU    $1E    0	cotangens
RI.ASIN   EQU    $20    0	arcus sinus
RI.ACOS   EQU    $22    0	arcus cosinus
RI.ATAN   EQU    $24    0	arcus tangens
ri.arg    EQU    $25   +6	t.o.s=k*cos(a) n.o.s.=k*sin(a) aus arg(tos,nos)=a
RI.ACOT   EQU    $26    0	arcus cotangens
ri.mod    EQU    $27   +6	sqrt(tos^2 + nos^2)
RI.SQRT   EQU    $28    0	Quadratwurzel
ri.sqar   EQU    $29    0	Quadrat
RI.LN     EQU    $2A    0	logarithmus naturalis
RI.LOG10  EQU    $2C    0	lg (Logarithmus zur Basis 10)
RI.EXP    EQU    $2E    0	Exponentialfunktion
ri.power  EQU    $2F   +2	n.o.s.(fp) ^ t.o.s.(integer)
RI.POWFP  EQU    $30   +6	n.o.s. ^ t.o.s.

RI.MAXOP  EQU    $30		höchster Op-Code
* Code negativ mit Bit 0 als Marke für Variablenspeicher (A4,A6.l)
RI.LOAD   EQU      0	Wert holen
RI.STORE  EQU      1	Wert ablegen

* 6.6 *	Extension Thing Parameter

* Thing Header, alle Abstände auf die Postion thh.flag bezogen.
thh.flag	equ	 00	Standardeintragung "THG%"
thh.type	equ	 04	Typ $01000003
thh.next	equ	 08	Null oder Abstand zum nächsten Thing der Liste
thh.exid	equ	$0C	zusätzliche Identifizierung
thh.pdef	equ	$10	Null oder Abstand zur Parameterdeefinition
thh.desc	equ	$14	Null oder Abstand zur Beschreibung
thh.code	equ	$18	Einsprungstelle der Erweiterung

* Aufruf-Werte und Schlüsselcodes
* Typenmarkierung für die Parameter als Bitmasken
thp.key	equ	 0001	Schlüssel
thp.char	equ	 0004	Schriftzeichen
thp.ubyt	equ	 0008	Byte
thp.sbyt	equ	$000A	vorzeichenbehaftetes Byte
thp.uwrd	equ	$0010	Word (16-Bit-Zahl)
thp.swrd	equ	$0012	vorzeichenbehaftetes Wort
thp.ulng	equ	$0020	Langwort (32.Bit-Zahl)
thp.slng	equ	$0022	vorzeichenbehaftetes Langwort
thp.fp8		equ	$0042	8-Byte Fließkommazahl
thp.str		equ	$0100	String
thp.sstr	equ	$0200	Teilstring
thp.arr		equ	$0800	Array-Parameter
thp.opt		equ	$1000	optionaler Parameter
thp.ptr		equ	$8000	Aufruf- oder Rückkehr-Parameter
thp.ret		equ	$A000	Return-Parameter
thp.call	equ	$C000	Aufruf-Parameter
thp.updt	equ	$E000	aktualisierter Parameter
* Typenmarkierung für die Parameter als Einzelbits (Bitnummern)
thp..sgn	equ	 1	vorzeichenbehafteter Parameter
thp..chr	equ	 2	Schriftzeichen erlaubt
thp..byt	equ	 3	Byte-Wert erlaubt oder gefordert
thp..wrd	equ	 4	Wort-Wert dto.
thp..lng	equ	 5	Lagwort-Wert dto.
thp..str	equ	 8	Standard-String
thp..sst	equ	 9	Teilstring
thp..nnl	equ	11	negativer (-1) Null-Parameter
thp..arr	equ	11	Array-Parameter
thp..opt	equ	12	Parameter ist optional
thp..ret	equ	13	Rückgabe-Parameter
thp..call	equ	14	Aufruf-Parameter
thp..ptr	equ	15	Pointer-Parameter


* Vectoren nach (und mit) Adressen

* Vector        decimal sedecimal     MF & MG, 	 MINERVA v1.82 :  : JM
mm.alchp  equ       192 $00C0       12330 $302A :  14066 $36F2         : 2EC0
mm.rechp  equ       194 $00C2       12506 $30DA :  13874 $3632         : 2F70
ut.windw  equ       196 $00C4       14966 $3A76 :  16110 $3EEE         : 3A60
ut.con    equ       198 $00C6       14970 $3A7A :  16118 $3EF6         : 3A64
ut.scr    equ       200 $00C8       14976 $3A80 :  16134 $3F06         : 3A6A
ut.err0   equ       202 $00CA       14818 $39E2 :  15948 $3E4C         : 3868
ut.err    equ       204 $00CC       14828 $39EC :  15958 $3E56         : 3872
ut.mint   equ       206 $00CE       14868 $3A14 :  16026 $3E9A         : 3A00
ut.mtext  equ       208 $00D0       14902 $3A36 :  16060 $3EBC         : 3A22
ut.link   equ       210 $00D2       14944 $3A60 :  16006 $3E86         : 3A4A
ut.unlk   equ       212 $00D4       14950 $3A66 :  16014 $3E8E         : 3A50
sx.nix03  equ       214 $00D6           0 $0000 :      0 $0000
mm.alloc  equ       216 $00D8       12672 $3180 :  13776 $35D0         : 3016
mm.lkfr   equ       218 $00DA       12766 $31DE :  13702 $3586         : 3070
io.qset   equ       220 $00DC       14456 $3878 :   2882 $0B42         : 36FE
io.qtest  equ       222 $00DE       14478 $388E :   2900 $0B54         : 3714
io.qin    equ       224 $00E0       14524 $38BC :   2940 $0B7C         : 3742
io.qout   equ       226 $00E2       14562 $38E2 :   2974 $0B9E         : 3768
io.qeof   equ       228 $00E4       14604 $390C :   3002 $0BBA         : 3792
ut.cstr   equ       230 $00E6       15164 $3B3C :  15602 $3CF2         : 3B0A
io.serq   equ       232 $00E8       14416 $3850 :  25824 $64E0         : 36D6
io.serio  equ       234 $00EA       14608 $3910 :   3168 $0C60         : 3796
cn.date   equ       236 $00EC       16460 $404C :  15300 $3BC4         : 40CE
cn.day    equ       238 $00EE       16556 $40AC :  15352 $3BF8         : 4122
cn.ftod   equ       240 $00F0       16100 $3EE4 :  14926 $3A4E         : 3766
cn.itod   equ       242 $00F2       15938 $3E42 :  14784 $39C0         : 3EC4
cn.itobb  equ       244 $00F4       16074 $3ECA :  14900 $3A34         : 3F4C
cn.itibw  equ       246 $00F6       16070 $3EC6 :  14896 $3A30         : 3F48
cn.itobl  equ       248 $00F8       16066 $3EC2 :  14892 $3A2C         : 3F44
cn.itohb  equ       250 $00FA       16030 $3E9E :  14856 $3A08         : 3720
cn.itohw  equ       252 $00FC       16026 $3E9A :  14852 $3A04         : 3F1C
cn.itohl  equ       254 $00FE       16022 $3E96 :  14848 $3A00         : 3F18
cn.dtof   equ       256 $0100       15620 $3D04 :  14380 $382C         : 3D84
cn.dtoi   equ       258 $0102       15792 $3DB0 :  14646 $3936         : 3E30
cn.btoib  equ       260 $0104       15906 $3E22 :  14752 $39A0         : 3EA4
cn.btoiw  equ       262 $0106       15910 $3E26 :  14756 $39A4         : 3EA8
cn.btoil  equ       264 $0108       15914 $3E2A :  14760 $39A8         : 3EAC
cn.htoib  equ       266 $010A       15810 $3DC2 :  14664 $3948         : 3E42
cn.htoiw  equ       268 $010C       15814 $3DC6 :  14668 $394C         : 3E46
cn.htoil  equ       270 $010E       15818 $3DCA :  14672 $3950         : 3E4A
bp.init   equ       272 $0110       28076 $6DAC :   9550 $254E         : 67EC
ca.gtint  equ       274 $0112       25048 $61D8 :  22032 $5610         : 5C44
ca.gtfp   equ       276 $0114       25052 $61DC :  22036 $5614         : 5C48
ca.gtstr  equ       278 $0116       25044 $61D4 :  22028 $560C         : 5C40
ca.gtlin  equ       280 $0118       25056 $61E0 :  22040 $5618         : 5C4C
bv.chrix  equ       282 $011A       20028 $4E3C :  16512 $4080         : 4F48
ri.exec   equ       284 $011C       16794 $419A :  25368 $6318         : 423E
ri.execb  equ       286 $011E       16802 $41A2 :  25382 $6326         : 4246
bp.let    equ       288 $0120       29384 $72C8 :  11426 $2CA2         : 6C12
io.name   equ       290 $0122       14256 $37B0 :   2736 $0AB0         : 3636
* AB HIER GELTEN ALLE ADRESSEN MIT OFFSET $4000  - $4000(An)
md.read   equ       292 $0124        4750 $128E :   1618 $0652         : 69D4
md.write  equ       294 $0126        4578 $11E2 :   2112 $0840         : 692A
md.verin  equ       296 $0128        4756 $1294 :   1624 $0658         : 69DA
md.sectr  equ       298 $012A        4716 $126C :   1584 $0630         : 69B4
* zusätzliche Vectoren in MINERVA 1.82			  wirkliche Adr.
*nn                       12c                             3b42 ?  7b42
*nn                       12e                             3a30    7a30
*nn                       130                             3905 [?]7905
*nn                       132                             3a38    3a38
*nn                       134                             3a96    3a96
*nn                       136                             3fec    3fec
*nn                       138                             4180    8180
*nn                       13a                             3c5a    3c5a
ut.istr   equ       316 $013C                   :        $FCBE ? $3CBE
go.new    equ       318 $013E                   :        $6356   $A356
bp.chan   equ       320 $0140                   :        $E49A   $249A
bp.chand  equ       322 $0142                   :        $E49C   $249C
bp.chnid  equ       324 $0144                   :        $E47C   $247C
bp.chnew  equ       326 $0146                   :        $E44E   $244E
bp.fname  equ       328 $0148                   :        $E1AC   $21AC
ca.cnvrt  equ       330 $014A                   :        $0C3E   $4C3E
ca.opexe  equ       332 $014C                   :        $0D6C   $4D6C
ca.eval   equ       334 $014E                   :        $10D8   $50D8
ip.kbrd   equ       336 $0150                   :        $D07C   $107C
ip.kbend  equ       338 $0152                   :        $D0C0   $10C0
sb.start  equ       340 $0154                   :        $4190   $8190
mi.muell  equ       342 $0156     	man trug -1 ein.
mm.move   equ       344 $0158                   :        $F796 ? $3796
mm.mrtoa  equ       346 $015A                   :        $F72C   $372C
mm.mator  equ       348 $015C                   :        $F726   $3726
mm.mrtor  equ       350 $015E                   :        $F736   $3736
*nn                                                       C772    0772
*nn                                                       C78E    078E
*nn                                                       0420    4420
*nn                                                       0426    4426
*

 


top : back : next : content

= (count)