* 6 Tabellen
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. ältere (vor 1.4a) Amaja und insbes. "Netscape": Bereits Sichern durch den Netscape'schen "Composer" füllt den Text mit einer Unzahl sinnloser und störender HTML-"tags".
Wer den Text in Assemblies weiterverwenden will, sichert die Seite zunächst, und geht sie dann ggf. mit einem ordentlichen Editor durch. Auch mit Amaya (1.4a+) oder Lynx können gut brauchbare Texte erzeugt werden.
* 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 Steuerregistre (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 0->1, 1->2; Auswahl MDV(0) oder NET(1) PC..SERB EQU 4 0 -> SER-Betrieb; 1-> MDV mit PC..SERN=0, sonst NET PC..DIRO EQU 7 Datenrichtung * 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 (Anlauf-/Abklingzeit, "gap") PC..DTR1 EQU 4 DTR ser1 PC..CTS2 EQU 5 CTS ser2 PC..IPCA EQU 6 IPC Übernahme (Taktung) PC..IPCD EQU 7 IPC Datenbit * 6.1.3 QIMI-Interface-Register, je 8 Bit: qi.butn equ $1bf9c Tasten-Status ; Bit 4: linke Taste ; 5: rechte Taste qi.stat equ $1bfbc Statuseregister ; Bit 0: senkrechte Bewegung ; 2: dto., Abbruch ; 4: waagerechte Bewegung ; 5: dto., Abbruch qi.eint equ $1bfbe Interruptfreigabe * 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) * sv.ramt wird bei SQ falsch (und unsinnig!) besetzt: * ist dort ein "user ramtop" und zeigt sich identisch mit SV.RESPR. sys.mxfr equ $24 SM Maximalwert für Abfrage nach freiem Speicher sys.rtc equ $28 SM Zeit 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 sys.tsdd equ $84 Thor Systemflag sv.pifql equ $85 .b PIF: -1=flg für wirklichen QL (z.b. im PIF 1.71) 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 3..0 ; x0: MMU : x2: 68851-MMU ; x4: FPU ; x8: 6881/2-FPU ; Bits 7..4 ; 00: 6800x ; 1x: 6801x ; 2x: 68020 ; 3x: 68030 ; 4x: 68040, ; etc. SV.CSUB EQU $A2 Null oder Ptr auf Subroutine bei CAPSLOCK ; ! Fehlerhaft; ohne codeaenderung in den QDOS-ROMS (samt Minerva!) nicht nutzbar. SV.TIMO EQU $A6 .w lfd. Zeitbegrenzung zum Umschalten des Sendebetriebs ; ! SQ nicht QDOS-compatibel: SV.TIMO dort im BYTE auf $A6 ; ! $A6/$A7 koennen im QL nicht dauerhaft veraendert werden sys.dmiu equ $A6 .b SM Flag bei DMA sys.mtyp equ $A7 .b SQ (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 sys.psf equ $bc SQ "primary stack frame ptr" ; z.B. stackptr. in trap#1 sys.200i equ $c0 .b SQ 200cs-Taktung sys.50i equ $c1 .b SQ 50cs-Taktung sys.10i equ $c2 .b SQ 10cs-Taktung sys.plrq equ $c3 .b SQ -ve bei poll-Anforderung sys.clnk equ $c4 .b SQ q.kanal 0 Handler sqx.castat equ $c8 .b SQ -1 bei cache on, 1 bei befristeter Abschaltung sys.casup equ $c9 .b SQ Timer fr Cache-Unterdrckung, Vogabewert 2 sqx.iopr equ $ca .b SQ i/o-Prioritaet, $ff nach "cache_on" sqx.cbas equ $cc SQ aktueller Basic-Job, sv.jbpnt aus trap (1/3) sys.fpu equ $d0 .l*4 SQ (nicht erklaert) sys.prtc equ $e0 .b SQ =/= 0 bei geschuetzer Uhr sys.pmem equ $e1 .b Speicher-Schutzstufe sys.slug equ $e2 .w "slug"-Stufe (GC?) * MDV in SQ nicht verfuegbar 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 Ptr auf Tabelle der Fehlermeldungen sys.mstab equ $14e SQ Ptr auf Meldungstextabellen * undokumentiert: sv.taskm equ $154 .l*4(!) -taskmaster- sv.turbo equ $160 -tubo-compiler- sv.qsound equ $164 -qsound- * sys.ldmst equ $168 SQ Ptr auf sprachenabhaengige Module sys.lang equ $16c SQ aktuelles Modul * bis $17f Reservebereich & undokumentierte Posten sv.qxlv equ $170 QXL/SQ version * SV.STACB EQU $180 Untergrenze des Supervisor-Stack sys.top equ $180 SQ dasselbe sv.lng equ $180 "lightning"-Referenz 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 ; Bit: 0-3 -/- ; 4 SBasic <break> ; 5 SBasic-Job <break> ; 6 CTR oder SHIFT oder SPACE ; 7 dto. mit ALT 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 (benutzt!) * zum RAM ausgelagerte Verkettungsadressen. * BASE ist unklar, koennte die basisadresse des heap-blocks sein. ; $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 ; SQ: leer(!) bei Standardzuweisungen ; zeigt bei Kanälen auf den SV.CHBAS-Tabelleneintrag der cdt 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 ; SQ: negative tag-Nummern sind ungltig. 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 ? bit 7 Flag nächste trap #2/#3 adressiert relativ(A6) * bit 6 MINERVA-S.Basic-Job 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 jcb.evts equ $66 .b SQ "event vector", eigene gesetzte Marken jcb.evtw equ $67 .b SQ dto., zur Bearbeitung erwartete 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. * SQ belegt viele der Variablen nicht, oder nur in undokumentierter Form 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 * Die 8 Bytes einer Eintragung bedeuten: ;0 Verwendung ; 0 Variable nicht besetzt (use) ; 1 Ausdruck ; 2 Einfache Variable ; 3 Dimensionierte Variable ; 4 Procedur in Basic ; 5 Funktion in Basic ; 6 Schleifenindex in REPeat ; 7 Schleifenindex in FOR ; 8 residente Procedur ; 9 residente Funktion ;1 Typ ; 0 abhängig von der Verwendung: ; 3 Teilstring ; 4 Procedur in Basic ; 8 residente Procedur ; 9 residente Funktion ; - sonst Fehler ; 1 String ; 2 f.p.-Zahl ; 3 Integer ; zusätzlich bei der Parameterübergabe: ; Bit 7 gesetzt bei führendem Nummernzeichen '#' ("hash"). ; Bits 4 bis 6 für ein ggf. folgendes Trennzeichen: ; %.000.... 0 ohne Trennzeichen ; %.001.... 1 Komma ; %.010.... 2 Semicolon ; %.011.... 3 Schrägstrich '\' ("backslash") ; %.100.... 4 Ausrufezeichen ; %.101.... 5 'TO' ; Bits 0 bis 3 ; Typ wie oben beschrieben. ;2-3 Ptr ; auf den Namen innerhalb der Name List. ; sonst: ; -1 bei Ausdrücken, geschnittenen Strings, ; Bytes 4-7 rel (BV.VVBAS(bp)) zeigen auf den Ausdruck. ; Unsicher, und in keinem dem Verfasser bekannten QL-System auswertbar: ; Andere negative Angabe bedeutet einen Ptr auf den ; Originaleintrag, von dem der Vorgefundene copiert ist. ;4-7 ; Basic-Definitionszeile im höherwertigen Wort (Bytes 6 und 7). ; sonst: ; Bei Ausdrücken der Ptr in den RI-Stack. ; Bei residenten Befehlen deren absolute Aufrufadresse.; ; In allen anderen Fällen der Ptr auf den Variablenwert. ; -1 steht hier, wenn der Wert noch undefiniert ist. * 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 * mt.albas addiert D1 zu (BV.PFP) und justiert die Pointer ab BV.BTP * SQ (2.76) _ohne_ Pointer-Anpassung 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 Syntax-Graph 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 * SQ besetzt nur wenige der folgenden Posten, * dokumentiert wird dazu (fast) nichts, rsp. Falsches {15}. 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 Einzeiler 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.uproc equ $7c MINERVA: trace-vector, bit#31 set 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 (?für INSTR_CASE in m89m?) - nee! 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 * Vari. fuer WHEN-Behandlung nicht SQ: 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.erstm equ $C1 .b MI ausloesendes statement in zeile ERLIN BV.ERROR EQU $C2 .l (!) 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. * SQ definiert auch sedezimale und binaere zahlen, * dokumentiert ist dazu nichts (wieso denn auch...)! * 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 $0a GO to.k equ 11 $0b TO sub.k equ 12 $0c SUB ; jm: 13 $0d WHEN (vorbereitet) err.k equ 14 $0e ERRor ; jm: 15 $0f EOF index 0067 in mi91 ; jm: 16 $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 ; die "tag"-Nummer kann bei Kanaelen auch negativ werden! (z.B. MGG) 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.event equ $66 .w bitfeld für 2*8 job-"events" (PIF 1.71+) * sd.event.b wird mit iop.rptr an posn 12.b im "event-vector" übergeben 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 * abweichend bei SQ in 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 * _minimale_ Lnge der FS-cdt ist 160 ($a0) * 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 ( = zähler für zappel-sprites) 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.filf equ $dd .b flag zur datenuebernahme aus iop.film, trap#3 PT_CKEYW EQU $DE .b 0, wenn Cursor den Pointer fensterbezogen bewegt, -1 ohne tastenauswertung PT_CKEY EQU $DF .b Einstellung durch "CKEYON"/"CKEYOFF": * P.E.: 0, wenn Cursor den Pointer bewegen kann, sonst $ff * .hpr: %1101.0111 (keyrow#1:dn,spc,rgt,up,lft,enter), sonst %0100.0001 PT_END EQU $E0 Länge des Pointer Linkblockes * weitere posten, nicht dokumentiert, ermittelt aus PIF 1.48..1.71 pt.minxy equ $e0 \in iop.film pt.maxxy equ $e4 /besetzt (und pt.filf:=-1, s.o.) pt.vram equ $e8 videoram-adresse pt.vsiz equ $ec groesze des vram-bereichs pt.linl equ $f0 .w sd.linel-vorgabe 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 gilt für die Antwort. * Kommandos, die mehr als 8 Bits zurueckgeben, sind nur direkt ueber die Hardware-Register * oder die ROM-spezifischen internen Sytemaufrufe ausfuehrbar, da dem IPC immer erst * alle Bits abgenommen werden muessen, bevor er neue Kommandos empfangen kann. 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 * KEYROW-WERTE * JM-/JS MGG * 1 2 4 8 16 32 64 128 1 2 4 8 16 32 64 128 * 0: F4 F1 5 F2 F3 F5 4 7 0: F4 F1 5 F2 F3 F5 4 7 * 1: RTN lft up ESC rgt \ SPC dwn 1: RTN li hoch ESC re < SPC runter * 2: [ Z . C B £ M ; 2: + Y . C B \ M Ä * 3: ] LOK K S F = G ~ 3: Ü LOK K S F # G Ö * 4: L 3 H 1 A P D J 4: L 3 H 1 A P D J * 5: 9 W I TAB R - Y O 5: 9 W I TAB R ß Z O * 6: 8 2 6 Q E 0 T U 6: 8 2 6 Q E 0 T U * 7: SH CTRL ALT X V / N , 7: SH CTRL ALT X V - N , * 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 * Processor-Status geht verloren. * Nur MINERVA setzt S-Bit direkt & erhält den 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.PINF EQU $70 PIF vorhanden, oder nicht IOP.RPTR EQU $71 Pointer lesen IOP.RPXL EQU $72 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 Ei 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 $79 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..frz equ -3 Bildzustand einfrieren (wie CTR/F5) IOP.SWDF EQU $7D "sub-window"-Liste uebergeben IOP.WSAV EQU $7E ganzes Fenster sichern IOP.WRST EQU $7F ganzes Fenster wiederherstellen * 6.4.1 * Qdos-Vectoren alphabetisch (MINERVA-Teile klein geschrieben) * B spez. zum Basic-Interpreter * 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 ; BV.CH.. undokumentiert; ..0 mit D1:=len, sonst vorgabe s.u.: BV.CHRRX equ BV.CHRIX-2 RI Stack - 60.b (NUR MINERVA(?) ptr: bv.rip BV.CHBTX equ BV.CHRIX+4 Backtrack Stack - 12.b : bv.btp BV.CHBTX0 equ BV.CHRIX+6 BV.CHTGX equ BV.CHRIX+10 Temp. (syntax) Graph Stack - 4.b : bv.tgp BV.CHTGX0 equ BV.CHRIX+12 BV.CHNTX equ BV.CHRIX+16 Name Table - 8.b : bv.ntp BV.CHNTX0 equ BV.CHRIX+18 BV.CHRTX equ BV.CHRIX+22 Return Table - 24.b (MI) : bv.rtp ; 22.b (MGG) BV.CHRTX0 equ BV.CHRIX+24 BV.CHBFX0 equ BV.CHRIX+28 Basic-Puffer : bv.bfp BV.CHTKX0 equ BV.CHRIX+32 Token-Liste : bv.tkp BV.CHNLX0 equ BV.CHRIX+36 Namen-Liste : bv.nlp BV.CHVVX0 equ BV.CHRIX+40 Variablenwerte (nicht SQ) : bv.vvp BV.CHCHX0 equ BV.CHRIX+44 Kanaltabelle : bv.chp BV.CHLNX0 equ BV.CHRIX+48 Zeilennummern (nicht SQ) : bv.lnp BV.CHPFX0 equ BV.CHRIX+52 Programm : bv.pfp * 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 Zeichenstrang holen ca.cnvrt equ $14a + Datentyp umwandeln ca.eval equ $14e + (nicht erklärt, re ROM-code) 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 RI.EXEC EQU $11C eine Rechneroperation ausführen RI.EXECB EQU $11E eine Liste Rechneroperationen ausführen * SB sb.expgr equ $130 B + "expression"-Graph sb.expnd equ $138 B + Klartext-Zeile ausgeben sb.graph equ $12e B + Syntax-Graph, s. {22} sb.ledit equ $136 B + Basic-Zeileneditor (Beispiele z.B. in ED des TK2) sb.pearr equ $134 B + Parser-Fehler sb.paini equ $13a B + Parser initiieren sb.parse equ $12c B + Basic-Parser sb.start equ $154 + Basic-Job starten sb.strip equ $132 B + Leezeichen einer tokenisierten Zeile entfernen * UT 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.2.6.8 MT.TRAPV-Tabelle * 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 VORSICHT: 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 *