1 REM Ins{nd av Kristoffer Eriksson <5357>    1986-05-10 22.07.50
Kod-tabell f|r BASIC-instruktioner i ABC-800.
Uppgifternas korrekthet garanteras EJ.

                        _ BASIC-KODER _

_Instruktioner _               Koder fr}n 128-164, |vrigt {r uttrycks-funktioner

128 nn        GOTO           nn = avst}nd till utpekad rad relativt andra
                             byten i nn om fixed up, annars radnumret
129 nn        GOTO (osynlig)                 -"-
130 nn        GOSUB                          -"-
131 nn        RESTORE        (med radnummer) -"-
132 nn        RESUME         (med radnummer) -"-
133 nn        ON ERROR GOTO  (med radnummer) -"-
134 n         XSTM           Anger att "utbyggnads-instruktion" med kod n
                             f|ljer. Se XSTM-listan.
135 l nn      radnummer      Inleder varje programrad (om ej krympt).
                             l  = hela radens l{ngd i antal bytes.
                                  (1 betyder att programkoden {r slut.)
                             nn = radnumret.
136           :              Instruktions-}tskiljaren ":" {r ocks} en
                             instruktion, men utf|r inget.
137           slut           Sist i programmet
138 n         ELSE           n = avst}nd till f|rsta instruktion som inte
                             ber|rs av ELSE, relativt n.
139 l         ?              Samma som REM och !, men genererar felmeddelande
                             om den exekveras.
                             l = antal tecken som f|ljer som kommentar inkl l.
140           DEF FN         140 pp mm nn a rr... (182 b qq(ll)...)
                             pp = avst}nd till pp i n{sta DEF FN, relativt
                                  andra byten i pp.
                             mm = funktionens namn.
                             nn = avst}nd till f|rsta instruktion efter FNEND.
                             a  = antal parametrar till funktionen.
                             rr = variabelnamn, upprepas f|r varje parameter.
                             182= LOCAL, ej obligatorisk.
                             b  = antal lokala variabler
                             qq = variabelnamn, upprepas f|r varje lokal var.
                             ll = str{ngdimensionering, anges bara f|r lokala
                                  str{ngvariabler.
141           FNEND          Utf|r inget.
142 nn l      DATA           nn = positon f|r n{sta DATA-sats (som GOTO)
                             l  = antal tecken i data i DATA-satsen inkl l.
143 l         REM            l  = antal tecken i kommentarer inklusive l.
144 l         !              Samma som REM.
145           LET            Har ingen effekt vid exekvering. Tilldelning {r
                             egentligen en funktion.
146           END
147           PRINT
148           ;
149           IF             Utf|r inget. Det {r THEN och ELSE det h{nger p}.
150           INPUT
151           INPUT LINE
152           FOR            152 tilldelningsuttryck 189 uttryck
                             (190 uttryck) 188 nn
                             189= TO
                             190= STEP, ej obligatorisk.
                             188= osynlig
                             nn = pekare till f|rsta instruktionen efter NEXT
                             relativt andra byten i nn. Till skillnad fr}n
                             GOTO saknar nn h{r betydelse innan programmet {r
                             "fixed up".
153 nn        NEXT           Utf|r en GOTO till FOR.
                             nn = pekare till FOR, p} samma s{tt som nn i FOR.
154 nn        WHILE          nn = pekare till f|rsta instruktionen efter WEND,
                             anv{nds om det efterf|ljande villkoret {r falskt.
155 nn        WEND           Samma som NEXT.  Utf|r en GOTO till WHILE.
156           READ
157           RESTORE        (utan radnummer)
158           RESUME         (utan radnummer)
159           ON ERROR GOTO  (utan radnummer)
160           RETURN         Kan f|ljas av uttryck.
161           ON             161 uttryck 191 n v mm...
                             191= osynlig avskiljare f|r uttrycket.
                             n  = antal alternativa hoppadresser.
                             v  = en kod 128-133 f|r GOTO - ON ERROR GOTO.
                             mm = hoppadress p} samma s{tt som i GOTO,
                                  upprepas f|r varje alternativ.
162           MID$
163           SINGLE
164           DOUBLE

_XSTM-instruktioner _          F|reg}s alltid av koden 134 = XSTM

134 0         DIM
134 1         COMMON
134 2         POKE
134 3         OUT
134 4         OPEN
134 5         PREPARE
134 6         CLOSE
134 7         RANDOMIZE
134 8         STOP
134 9         TXPOINT
134 10        GET
134 11        CHAIN
134 12        TRACE
134 13        NO TRACE
134 14        PUT
134 15        INTEGER
134 16        FLOAT
134 17        EXTEND
134 18        NO EXTEND
134 19        DIGITS
134 20        OPTION BASE
134 21        POSIT
134 22        SET DOT
134 23        CLR DOT
134 24                             Reserverad
134 25                             Reserverad
134 26-127                         Oanv{ndbara f|r instruktions-utbyggnad

              _Kristoffer Erikssons <5357> SETDOT-utbyggnad _
134 128       SET DOT
134 129       CLR DOT

              _DOS-instruktioner _
134 160       BYE
134 161       KILL
134 162       NAME
134 163       AS                   (i NAME "..." AS "...")
134 164       CD                   LUX-NET
134 165       FILESTAT             LUX-NET ({ven f|rkortningen FS)

              _Grafik-instruktioner _
134 192       FGPOINT
134 193       FGLINE
134 194       FGFILL
134 195       FGCTL
134 196       FGPAINT
134 197       FGPICTURE            Endast ABC 806.

              _ISAM-utbyggnad          _
134 200       ISAM OPEN
134 201       ISAM READ
134 202       ISAM WRITE
134 203       ISAM UPDATE
134 204       ISAM DELETE
134 205       KEY                  Nyckelord i ISAM READ, om dessa anv{nds som
134 206       INDEX                instruktion genererar den error 200.
134 207       FIRST                -"-
134 208       LAST                 -"-
134 209       NEXT                 -"-
134 210       PREV                 -"-

              _Kristoffers Erikssons <5357> KEY-utbyggnad _
134 247       KEYMODE
134 248       KEY

              _ABC 806-till{gg           _
134 249 0     WIDTH                Endast ABC 806
134 249 1     ATTRIBUTE            Endast ABC 806

_Funktioner   _                Koder 0-53, 126, F|reg}s av en kod 208-212

0   FN         Anv{ndar-definierad funktion, se osynlig funktion 207.
1   FIX
2   INT                  28  NUM$
3   SIN                  29  TAB
4   COS                  30  SUB$
5   TAN                  31  CUR
6   ATN                  32  MUL$
7   SQR                  33  TXPOINT
8   PI                   34  DIV$
9   RND                  35  EXP
10  SGN                  36  LOG
11  ASC                  37  LOG10
12  CHR$                 38  COMP%
13  LEFT$                39  VAL
14  RIGHT$               40                 samma som MID$, men osynlig.
15  MID$                 41  TIME$
16  LEN                  42  POSIT
17  INSTR                43  VARPTR
18  SPACE$               44  VAROOT
19  STRING$              45  PEEK2
20  SWAP%                46  MOD
21  PEEK                 47  CVT%$
22  INP                  48  CVT$%
23  CALL                 49  CVTF$
24  ERRCODE              50  CVT$F
25  SYS                  51  HEX$
26  ABS                  52  OCT$
27  ADD$                 53  DOT

126 n  XFN   Anger liksom 134 att en "utbyggnads-funktion" med koden n f|ljer.
             Se XFN-listan.

_XFN-funktioner _              F|reg}s av en kod 208-212 och 126
                             Funktionerna 128-159 ger str{ngar med ett tecken
                             med samma kod som instruktionen.

126 128       BLK            Endast ABC 806
126 129       RED
126 130       GRN
126 131       YEL
126 132       BLU
126 133       MAG
126 134       CYA
126 135       WHT
126 136       FLSH
126 137       STDY
126 138       ULN            Endast ABC 806
126 139       NULN           Endast ABC 806
126 140       NRML
126 141       DBLE
126 142       EL             Endast ABC 806
126 143                      Anv{nds ej, men skulle motsvara CHR$(143).
126 144       GBLK           Endast ABC 806
126 145       GRED
126 146       GGRN
126 147       GYEL
126 148       GBLU
126 149       GMAG
126 150       GCYA
126 151       GWHT
126 152       HIDE
126 153       GCON
126 154       GSEP
126 155                      Anv{nds ej, men skulle motsvara CHR$(155).
126 156       BLBG
126 157       NWBG
126 158       GHOL
126 159       GREL

126 192       FGPOINT

126 160       Kristoffers Erikssons <5357> DOT


_"Osynliga" funktioner _       Koder 128-255, delvis parallellt med instrukt.
                             Dessa funtkioner anv{nds av BASIC-tolken f|r
                             tilldelning, tal, variabler, indexber{kning, och
                             {ven vanliga matematiska uttryck.
                             M}nga av funktionerna f|rekommer i tre varianter,
                             flyttal (l{gst kod), heltal, och str{ng.
                             Denna lista {r s{rskilt op}litlig.


129           Omvandling, flyttal -> heltal.
130           Omvandling, heltal -> flyttal.
131
132           EQV
133           IMP
134           OR
135           XOR
136           AND
137-139       =              Flyttals-, heltals- och (?)str{ng-variant.
140-142       <>
143-145       <
146-148       >=
149-151       >
152-154       <=
155-157       +
158-159       -
160-161       *
162-163       /
164-165       ^              [ven **
166
167           (              Parentes. Startar ny uttrycksber{kning. Motsvarar
                             ENTER-knappen p} HP-r{knare.
168           -              Negativa flyttal. St{ller teckenbiten i ett
                             flyttal p} stacken till negativ.
169           -              Negativa heltal. Byter tecken p} ett tal p} stack
170-172 n                    Ingen effekt.
173 n         Omvandling     Flyttal -> heltal.
174 n         Omvandling     Heltal -> flyttal.
175           NOT
176                          L{gg aktuellt OPTION BASE-v{rde n{st |verst p}
                             stacken.
177-179       Tilldelning    V{rdet |verst p} stacken l{ggs i den variabel som
                             utpekas av variabelpekaren d{runder (f|r str{ng-
                             ar ligger varoot-pekaren p} stacken. Avslutar
                             uttrycksber{kning.
180-182 mm    Tilldelning    V{rdet p} stacken l{ggs i variabeln mm. Avslutar
                             sedan p} samma s{tt som motsvarande 186-188.
183-185       Slut           Avsluta uttryck med att h{mta resultatet fr}n
                             stacken till CPU:ns HL-register (pekare f|r
                             str{ngar).
186-188       Slut           Avsluta uttryck med att st{lla CPU:ns register B
                             till resultat- typen, och TRCVAR enligt v{rdet
                             |verst p} stacken.
189 n         THEN           n = avst}ndet till f|rsta instruktionen relativt
                             n som inte ber|rs av THEN, dvs n{rmast efter ELSE
                             om det finns, annars n{sta rad.
190 n         osynlig THEN
191           Slut           Slut p} uttryck (=parentes). Ingen }tg{rd.
192-194 mm                   L{gger variabeln mm:s v{rde p} stacken (str{ngar
                             f}r str{ngpekarna p} stacken).
195           Heltalet 0 (osynligt)       L{gger talet noll p} stacken.
196-198 mm    Adress         L{gger adressen till variabeln mm p} stacken,
                             identisk f|r alla variabeltyper (str{ngar f}r
                             allts} adressen till str{ngpekarna).
199 nn        Heltalet 2 byte             Talet kopieras till stacken.
200-202 n mm  Indexber{kning ({ven DIM)   n=antal index,
                                          mm=variabelnamn.
203 n ttt...  Str{ng inom citationstecken ("), n=antal tecken.
204 n ttt...  Str{ng inom apostrofer ('), n=antal tecken.
205-206                      Anv{nds i DIM och COMMON
207 nn        FN             Detsamma som funktionskod 0.
                             nn = pekare till funktionens definition om prog-
                             rammet {r fixed up, annars funktionens namn.
208 k         Synlig funktion 0 parametrar med koden k, se s{rskild lista.
209 k         Synlig funktion 1 parameter     Parametrarna har ber{knats i
210 k         Synlig funktion 2 parametrar    f|rv{g, och ligger p} stacken.
211 k         Synlig funktion 3 parametrar
212 n k       Synlig funktion n-208 parametrar
213 n         Flyttal 1 byte
214 nn        Flyttal 2 byte
215 nnn       Flyttal 3 byte
...
220 nnnnnnnn  Flyttal 8 byte
221-255       heltal         Heltal enligt kod-221.

_\vriga koder _                Anv{nds av vissa instruktioner
182           LOCAL
184           USING
185           COUNT
187           AS FILE
188                          Anv{nds i FOR, osynlig.
189           TO
190           STEP
191                          Anv{nds i ON..., osynlig.
44            ,              ASCII-koden f|r kommatecknet betecknar {ven kom-
                             man i instruktionerna.
35            #              F|reg}r filnummer i PRINT, INPUT, INPUT LINE,
                             GET, PUT och POSIT.
59            ;              Skiljetecken i PRINT.

_Variabelnamn  _               [ven funktionsnamn, p} de flesta st{llen
                             (ej DEF FN) byts detta ut mot en pekare (VAROOT)
                             n{r programmet g|rs i ordning f|r exekvering
                             (blir "fixed up").
F|rsta byten:
b1-b0         Variabeltyp    0=Flyttal, 1=Heltal, 2=Str{ng, 4=Anv{nds ej
b2            Indexering     0=Skal{r variabel, 1=Indexerad variabel.
b6-b3         Suffix     (korta namn) V{rdena 0-9=suffix-siffran, 15=ej suffix
b7-b3         Namnoffset (l}nga namn)
Andra byten:  Bokstav        V{rdena 1-29 anger att det {r ett kort variabel-
                             namn med bokstaven CHR$(kod+64).
                             \vriga v{rden anger att det {r ett l}ngt varia-
                             belnamn, Namnpekaren = (kod-32)*32+Namnoffset.

_\vrigt          _
Str{ngar lagras i allmenhet p} stacken med en pekare till inneh}llet (VARPTR),
aktuell l{ngd, och ett v{rde som anger hur mycket plats str{ngens inneh}ll
(eller annat skr{p fr}n tidigare ber{kningar) tar p} stacken n{r dessa v{rden
har eliminerats. Om str{ngens inneh}ll inte ligger p} stacken (kan vara kons-
tant i programkoden, eller kvar i variabeln) tar det f|rst}s upp 0 bytes.

Ibland lagras str{ngen (str{ng-variabeln) som en enda pekare till de ovan
n{mnda v{rdena (VAROOT).

Flyttal lagras p} stacken med (Y.PREC) bytes (st{lls av SINGLE/DOUBLE) obe-
roende av antalet bytes de lagras med i programkoden.

En kod kan betyda olika saker beroende p} var i program-sekvensen den f|rekom-
mer. Man m}ste allts} l{sa programmet fr}n b|rjan f|r att veta vad en viss
byte har f|r betydelse. Ointressanta rader kan |verhoppas snabbt eftersom
"rad-instruktionen" anger hur l}ng den aktuella raden {r.

Programmet (och varje rad) b|rjar med en instruktionskod (128-164) eller even-
tuellt ett uttryck (kan vara tilldelning utan LET) (|vriga koder = Osynliga
funktioner). Vissa instruktioner inneh}ller speciella data som anges i tabel-
lerna h{r, d{rut|ver kan de inneh}lla ett eller flera uttryck som ska ber{k-
nas. Uttrycken inneh}ller osynliga funktionskoder som bland annat kan ge mate-
matiska funktioner (+,- osv) och synliga funktioner (SYS, NUM$ osv), och
avslutas av speciella avslutningskoder.
