5 *** Systemaufrufe
Gelegentlich wurde moniert, daß nicht in jeder Tabelle alle Register abgehandelt werden, und daß manche Traps zu Gruppen zusammengefaßt sind. Das soll lästiges Blättern erparen. Aus demselben Grunde, da Vieles für nahezu alle Aufrufe gleichermaßen gilt, werden die allen QDOS-Traps rsp -Vectoren, oder einer großen Gruppe daraus, gemeinsamen Details im Anschluß zunächst ausführlich beschrieben und später dann nicht mehr wiederholt - ebensowenig wie erneute Hinweise auf diese Tatsache.
5.1 ** Vorbemerkungen
5.1.1 * Allgemein
Kurz geklärt:RI.. Bezug auf den virtuellen Arithmetik-ProcessorRegister A1:
Hash das Zeichen '#'
MI Hinweis auf MINERVA {3}
TG Thing-System
SMS2 bedeutet dasselbe wie SMSQ/E oder teils auch SMSQ
SQ steht für alle Varianten SMS2, SMSQ und SMSQ/E
Allzu pauschale Adressenbearbeitung und Trap-Decodierung in den Sytem-Roms (MGG, MINERVA, andere nicht geprüft) erfordert in den Speicheroperationen und sonst überall, wo das Register verändert zurückkommen kann, Angabe von A1 mit gerader Adresse, auch, wenn das Register keine Eingangsdaten liefert.In der Kopfzeile finden sich die Angaben zum Namen und dem Operationscode, der die betreffende Ausführung aktiviert, ggf. auch einer Stelle im Text, an der Ausführlicheres zum Stichwort zu finden ist.
Muster für die Trap-Aufrufe:
{smsq-Name} {QDOS-Name} {Trap}/{Code dez. sedez.}
Kurzbeschreibung ggf. wichtige AnmerkungenMuster für die Vectoren:
{smsq-Name} {QDOS-Name} {Kathegorie} {dez.} {sedez.}
Kurzbeschreibung ggf. wichtige AnmerkungenEs folgen Registerbelegung für Übergabe und zurückgegebene Werte.
Dann der bei einem Fehler in D0 ankommende Code. und nötigenfalls noch ein paar erklärende Worte. Besondere Hinweise sind zu den Fehlercodes nur gegeben, wenn deren Bedeutung von der Standarddefinition abweicht.
Fehlercodierung:
SMSQ CODE QDOS-Name Bedeutung err.nc -1 ERR.NC Unterbrechung err.ijob -2 ERR.NJ ungültiger Job err.imem -3 ERR.OM Speicher reicht nicht rr.ornge -4 ERR.OR Bereichsüberschreitung err.bffl -5 ERR.BO Puffer voll err.ichn -6 ERR.NO Kanal nicht offen err.fdnf -7 ERR.NF File nicht gefunden err.itnf -7 ERR.NF Posten nicht gefunden err.fex -8 ERR.EX existiert bereits err.fdiu -9 ERR.IU in Betrieb err.eof -10 ERR.EF Fileende err.drfl -11 ERR.DF Datenträger voll err.inam -12 ERR.BN unbrauchbarer Name err.trns -13 ERR.TE Übertragungsfehler err.prty -13 ERR.TE Parity-Fehler err.fmtf -14 ERR.FF Formatierungsfehler err.ipar -15 ERR.BP ungeeigenter Parameter err.mchk -16 ERR.FE Datenträger unbrauchbar err.iexp -17 ERR.XP Fehler im Ausdruck err.ovfl -18 ERR.OV arithmetischer Überlauf err.nimp -19 ERR.NI unbekannte Operation err.rdo -20 ERR.RO nur Lesen err.isyn -21 ERR.BL Syntaktischer Fehler err.rwf -22 {15} Lese-/Schreibfehler Systemmeldungen {MGG} -22 "in Zeile" -23 "Sektoren" -24 "F1... F2... -25 "Sinclair ... -26 "Verarbeitung läuft" -27 "Proc/Fn gelöscht"
Anmerkung NOERR, wenn es keine Fehlermeldung gibt.
5.1.2.1 * Zu den QDOS-Traps
Dies sind die Aufrufe der Processor-Traps #1 bis #3. Eingeteilt in die Gruppe der Managertraps zur Systembetreuung, der Zuweisung von Hilfsmitteln der Ein- und Ausgabe und schließlich der Ein- und Ausgabe-Operationen sowie der Bildschirmsteuerung. Auch Minerva-, Thing- und SMSQ-Aufrufe sind angeführt.Allgemein gilt für den Aufruf
D0 Op-CodeDer Inhalt nicht notierter Register ist gleichgültig.
D1 Job-ID, für den eigenen (aktiven) Job kann -1 angegeben werden
D2 div. Daten
D3 div. Daten, Wartezeit bei Aufrufen der Trap #3
A0 Ptr oder Kanal-ID, stets Kanal-ID bei I/O der Trap #3
A1 Ptr
A2 zumeist unbenutzt, ggf. Ptr
Wo nicht anders spezifiziert werden alle Register lang (.L) besetzt.Den I/O-Operationen sind in Trap #3 stets in
D3.W die Wartezeit und in
A0 die Kanal-ID zu übergeben.
Dies wird nicht mehr gesondert verzeichnet.Bei Rückkehr enthalten die Register
D0 Fehlercode oder NullDer Inhalt nicht notierter Register ist unverändert (oder nicht dokumentiert).
D1 div. Daten, Job-ID
D2 zumeist unbenutzt
D3 in I/O-Traps Flag zur Anzahl I/O-Operationen
A0 div. Daten, Kanal-ID
A1 Ptr, nach Möglichkeit aktualisiert
A2 zumeist unbenutzt, ggf. Ptr
A3 dto.
Wo nicht anders spezifiziert gelten alle Register als Langworte (.L).
Dies wird nicht mehr gesondert verzeichnet.Jeder Aufruf kann den Fehlercode
ERR.BP -15zurückgeben.Allen Aufrufen der Trap #3 ist anzugeben
D3.w Wartezeit,beide Register bleiben unverändert. Dort kann auch stets der Fehler
A0 Kanal-ID,ERR.NO -6 Kanal nicht offenzurückkommen. Dies wird nicht mehr gesondert verzeichnet.ERR.NC ist das Vehikel zur Verwaltung der i/o-Wartezeit (D3.W) im QDOS.
Ggf. muß zwischen erstmaligem oder wiederholtem Einsprung unterschieden werden. Hierzu dient der Eingangswert von D3 (anfangs 0, sonst -1).
Unbenutzt sind die Codes:
03 nicht dokumentiertTrap #2:
15 $0F fehlt in SMSx {15}
37 $25 benannt, aber nie definiert
38 $26 Schluß in einfachen Systemen
45 $2D Schluß bei SMS2, Thing, EMU0 nicht besetztTrap #3:
5 Schluß6, 8, 28, 29 nicht definiert
55, 56, 57 nicht dokumentiert
80 Schluß für Standardsysteme
80 - 107 nicht besetzt
127 $7F höchster möglicher Code5.1.2.2 * Zu den Pointer-Traps
Die Aufrufe ergänzen die i/o-Traps für CON- und SCR-Kanäle. Sie gelten mit der üblichen Notierung. Sie sind nur aktivierbar, wenn das Pointer Environment vorhanden ist. Zum Verständnis werden die Erläuterungen und Tabellen dazu als bekannt vorausgesetzt.Alle Bild-Koordinaten werden im Pixelraster angegeben, dies ist nicht auf die Größe des Bildschirms im QL begrenzt. Eine Beziehung zum System der scalierten Graphik des QL gibt es nicht.
Abkürzungen und Notierung nur für diesen Teil der Trap-Zusammenstellung:
OL Outline - Außenmaße eines Fensters PE Pointer Environment PIF Pointer Interface PRW Primary Window - Primärfenster, Erstes eines Jobs SCW Secondary Window - Secundärfenster, weitere Fenster SW Sub-Window - Teilfenster innerhalb der OL eines Fensters {wert} | {wert} Aufteilung eines (Lang)wortes in gleichgroße Hälften Bildschirm... als Hinweis auf absolut zum Gesamtbild geltende Daten Breite als Maß notiert Maß 16-Bit-Zahl, positiv und nicht Null Größe dto., einschließlich Null Höhe als Maß notiert Pointer hier nun nur noch für das über die Fenster flitzende Bildchen Ptr einzige Schreibweise für den Pointer als Adresse einer Adresse Punkt Koordinatenpaar in beliebigen 16-Bit-Zahlen Ursprung als Punkt mit horizontaler Position im höchstwertigen Wort Zahl stets im binären Zweier-Complement 5.1.3 * Zu den QDOS-Vectoren
In Form einer Tabelle im Bereich $00C0 bis $012B, bei MINERVA bis $015E, sind die 16-Bit-Adressen verschiedener System-Aufrufe gespeichert. Dies sind die QDOS-Vectoren.Sie lassen sich in folgenden Kathegorien zusammenfassen:
sm Supervisor-Routinen$0124 und alle folgenden Vectoren, auch bei MINERVA, sind mit Offset $4000 aufzurufen.Sie dürfen nur im Supervisor-Mode und nicht aus einem Interruptaufruf heraus aufgerufen werden. A6 ist auf die Basis der Systemvariablen zu stellen.st vereinfachte Trap-AufrufeNur im User-Mode aufzurufen.gu allgemeine HilfsprogrammeHier bestehen keine Einschränkungen.bu Basic-UnterstützungAus beliebigem Aufruf, Adressen gelten stets rel A6.bp Basic-Parameter
SQ: Aufrufe werden dort nur ausgeführt, wenn an der Stelle -4(A6) das Langwort "SBAS" eingetragen ist.- wie Basic -ar Arithmetik (innerhalb Basic)- wie Basic; SQ: ohne die zusätzliche "SBAS"-Bedingung -md MicrodrivebedienungVectoren mit Offset $4000. Interrupts abgeschaltet.
SQ: MDV-Vectoren und System-Routinen dazu fehlen.
$00D6 (0000) in allen Roms und $0156 (FFFF) in MINERVA sind nicht besetzt.Die Routinen setzen zumeist auch einen Fehlercode in D0. Dann sind auch die Flags im Statusregister des Processors entsprechend gesetzt {1}. Bei den Vectoren, wo das nicht geschieht, oder zweifelhaft ist, findet sich ein entsprechender Hinweis.
5.2 ** QDOS-Traps
Die Qdos-Namen und ihre OP-Codes:
FS.CHECK 064 $40 IOP..REH 001 $01 MT.JINF 002 $02 sd.dot 056 $38 FS.DATE 076 $4C IOP..REW -01 $FF MT.LDD 034 $22 SD.ELIPS 051 $33 FS.FLUSH 065 $41 IOP..SCN 031 $1F MT.LIOD 032 $20 SD.EXTOP 009 $09 FS.HEADR 071 $47 IOP..SDR 017 $11 MT.LNKFR 013 $0D SD.FILL 046 $2E FS.HEADS 070 $46 IOP..SET 000 $00 MT.LPOLL 028 $1C SD.FLOOD 053 $35 FS.LOAD 072 $48 IOP..SLR 018 $12 MT.LSCHD 030 $1E SD.FOUNT 037 $25 FS.MDINF 069 $45 IOP..SSC 019 $13 MT.LXINT 026 $1A SD.GCUR 054 $36 FS.MKDR 077 $4D IOP.FILM 120 $78 MT.NIX 037 $25 sd.lin 057 $39 FS.POSAB 066 $42 IOP.FLIM 108 $6C MT.PRIOR 011 $0B SD.LINE 049 $31 FS.POSRE 067 $43 IOP.LBLB 116 $74 MT.RCLCK 019 $13 SD.NCOL 020 $14 FS.POSV 068 $44 IOP.OUTL 122 $7A MT.RDD 035 $23 SD.NL 018 $12 FS.RENAME 074 $4A IOP.PICK 124 $7C MT.REBAS 023 $17 SD.NROW 022 $16 FS.SAVE 073 $49 IOP.RPTR 112 $70 MT.RECHP 025 $19 SD.PAN 027 $1B FS.TRUNC 075 $4B IOP.RPXL 113 $71 MT.RELJB 009 $09 SD.PANLN 030 $1E FS.VERS 078 $4E IOP.RSPW 110 $6E MT.RERES 015 $0F SD.PANRT 031 $1F FS.XINF 079 $4F IOP.SLNK 111 $6F MT.RIOD 033 $21 SD.PCOL 019 $13 IO.CLOSE 002 $02 IOP.SPRY 119 $77 MT.RJOB 004 $04 SD.PIXP 023 $17 IO.DELET 004 $04 IOP.SPTR 123 $7B MT.RPOLL 029 $1D SD.POINT 048 $30 IO.DIR 004 $04 IOP.SVPW 109 $6D MT.RSCHD 031 $1F SD.POS 016 $10 IO.EDLIN 004 $04 IOP.SWDF 126 $7E MT.RXINT 027 $1B SD.PROW 021 $15 IO.FBYTE 001 $01 IOP.WBLB 115 $73 MT.SCLCK 020 $14 SD.PXENQ 010 $0A IO.FLINE 002 $02 IOP.WRST 127 $7F MT.SUSJB 008 $08 SD.RECOL 038 $26 IO.FORMT 003 $03 IOP.WSPT 118 $76 MT.TRA 036 $24 sd.rop 055 $37 IO.FSTRG 003 $03 MT.ACLCK 021 $15 MT.TRAPV 007 $07 SD.SCALE 052 $34 IO.NEW 002 $02 MT.ACTIV 010 $0A SD.ARC 050 $32 SD.SCRBT 026 $1A IO.OLD 000 $00 MT.ALBAS 022 $16 SD.BLOK 046 $2E SD.SCROL 024 $18 IO.OPEN 001 $01 MT.ALCHP 024 $18 SD.BORDR 012 $0C SD.SCRTP 025 $19 IO.OVERW 003 $03 MT.ALLOC 012 $0C SD.CHENQ 011 $0B SD.SETFL 042 $2A IO.PEND 000 $00 MT.ALRES 014 $0E SD.CLEAR 032 $20 SD.SETIN 041 $29 IO.SBYTE 005 $05 MT.BAUD 018 $12 SD.CLRBT 034 $22 SD.SETMD 044 $2C IO.SHARE 001 $01 MT.CJOB 001 $01 SD.CLRLN 035 $23 SD.SETPA 039 $27 IO.SSTRG 007 $07 MT.CNTRY 036 $24 SD.CLRRT 036 $24 SD.SETST 040 $28 IOP..ABS 000 $00 MT.DMODE 016 $10 SD.CLRTP 033 $21 SD.SETSZ 045 $2D IOP..BOT -01 $FF MT.FREE 006 $06 SD.CURE 014 $0E SD.SETUL 043 $2B IOP..GCL 016 $10 MT.FRJOB 005 $05 SD.CURS 015 $0F SD.TAB 017 $11 IOP..MOV 001 $01 MT.INF 000 $00 SD.DONL 047 $2F SD.WDEF 013 $0D IOP..NLK -02 $FE MT.IPCOM 017 $11 SD.DOT 048 $30 SMS.NTHU 044 $2C
Namen, die mit "MT." beginnen, gehören zur Trap #1,
die Namen IO.OPEN. IO.CLOSE, IO.FORMT, IO.DELET zur Trap #2,
alle anderen Trap-Namen sind Aufrufe der Trap #3.
Die SMSQ-Namen und ihre OP-Codes:
ioa.clos 002 $02 iog.fill 053 $35 iopp.nlk -02 $FE iow.xtop 009 $09 ioa.delf 004 $04 iog.line 049 $31 iops.abs 000 $00 sms.achp 024 $18 ioa.frmt 003 $03 iog.scal 052 $34 iops.reh 001 $01 sms.acjb 010 $0A ioa.kdir 004 $04 iog.sgcr 054 $36 iops.rew -01 $FF sms.alhp 012 $0C ioa.kexc 000 $00 ioi.blkl 100 $64 iow.blok 046 $2E sms.ampa 022 $16 ioa.knew 002 $02 ioi_allc 030 $1E iow.chrq 011 $0B sms.arpa 014 $0E ioa.kovr 003 $03 ioi_dnam 022 $16 iow.clra 032 $20 sms.artc 021 $15 ioa.krnm 005 $05 ioi_dnum 028 $1C iow.clrb 034 $22 sms.comm 018 $12 ioa.kshr 001 $01 ioi_free 036 $24 iow.clrl 035 $23 sms.crjb 001 $01 ioa.open 001 $01 ioi_hdrl 040 $28 iow.clrr 036 $24 sms.dmod 016 $10 iob.elin 004 $04 ioi_name 000 $00 iow.clrt 033 $21 sms.exv 007 $07 iob.fbyt 001 $01 ioi_rdon 029 $1D iow.dcur 015 $0F sms.frjb 005 $05 iob.flin 002 $02 ioi_totl 032 $20 iow.defb 012 $0C sms.frtp 006 $06 iob.fmul 003 $03 ioi_xxxx 044 $2C iow.defw 013 $0D sms.fthg 041 $29 iob.sbyt 005 $05 iop..gcl 016 $10 iow.donl 047 $2F sms.hdop 017 $11 iob.smul 007 $07 iop..scn 031 $1F iow.ecur 014 $0E sms.info 000 $00 iob.test 000 $00 iop..sdr 017 $11 iow.font 037 $25 sms.injb 002 $02 iof.chek 064 $40 iop..slr 018 $12 iow.ncol 020 $14 sms.lexi 026 $1A iof.date 076 $4C iop..ssc 019 $13 iow.newl 018 $12 sms.lfsd 034 $22 iof.flsh 065 $41 iop.film 120 $78 iow.nrow 022 $16 sms.liod 032 $20 iof.load 072 $48 iop.flim 108 $6C iow.pana 027 $1B sms.lpol 028 $1C iof.minf 069 $45 iop.lblb 116 $74 iow.panl 030 $1E sms.lshd 030 $1E iof.mkdr 077 $4D iop.outl 122 $7A iow.panr 031 $1F sms.lthg 038 $26 iof.posa 066 $42 iop.pick 124 $7C iow.pcol 019 $13 sms.rchp 025 $19 iof.posr 067 $43 iop.pinf 112 $70 iow.pixq 010 $0A sms.rehp 013 $0D iof.posv 068 $44 iop.rptr 113 $71 iow.prow 021 $15 sms.rexi 027 $1B iof.rhdr 071 $47 iop.rpxl 114 $72 iow.rclr 038 $26 sms.rfsd 035 $23 iof.rnam 074 $4A iop.rspw 110 $6E iow.scol 017 $11 sms.riod 033 $21 iof.save 073 $49 iop.slnk 111 $6F iow.scra 024 $18 sms.rmjb 004 $04 iof.shdr 070 $46 iop.spry 119 $77 iow.scrb 026 $1A sms.rmpa 023 $17 iof.trnc 075 $4B iop.sptr 123 $7B iow.scrt 025 $19 sms.rpol 029 $1D iof.vers 078 $4E iop.svpw 109 $6D iow.scur 016 $10 sms.rrtc 019 $13 iof.xinf 079 $4F iop.swdf 125 $7D iow.sfla 042 $2A sms.rshd 031 $1F iofd.bak 002 $02 iop.wblb 115 $73 iow.sink 041 $29 sms.rthg 039 $27 iofd.cur 000 $00 iop.wrst 127 $7F iow.sova 044 $2C sms.spjb 011 $0B iofd.get -01 $FF iop.wsav 126 $7E iow.spap 039 $27 sms.srtc 020 $14 iofd.upd 000 $00 iop.wspt 118 $76 iow.spix 023 $17 sms.ssjb 008 $08 iog.arc 050 $32 iopo.mov 001 $01 iow.ssiz 045 $2D sms.usjb 009 $09 iog.dot 048 $30 iopo.set 000 $00 iow.sstr 040 $28 sms.uthg 040 $28 iog.elip 051 $33 iopp.bot -01 $FF iow.sula 043 $2B sms.zthg 042 $2A
Namen, die mit "sms." beginnen, gehören zur Trap #1,
die Namen "ioa." zur Trap #2,
alle anderen Trap-Namen sind Aufrufe der Trap #3.