.op
.pl72
.po8
.HE                              - # -              ZX-ROM-ROUTINEN



        ͠            N
           *****************************************


                       Inhaltsverzeichnis              

                                                     Seite
 Allgemeine Beschreibung des ROM                       2  
 Di Routinen                                          2
 Restar Routinen                                      3
 Inpu Routinen                                        4
 Keyboar Routinen                                     6
 De Editor                                            6
 Printroutinen                                         8
 Serviceroutine f} Print                           8
 Bildschirmroutinen                                  9
 Druckerroutinen                                    10 
 Grafikroutinen                                       12 
 Soundroutinen                                        13 
 Betriebssystemroutinen                               14 
 Kassettenroutinen                                    18
 Arithmetikroutinen                                   19 
 Auswertun vo Ausdr}cken                            21 
 De Kalkulator                                       22 
 List de Kalkulatorbefehle                        23 
 Mehrzweckroutinen                                  25 
 Zuf{llig Routinen                                   25 
 Systemvariable  Flags                              27 
 Fehle i ROM                                        28 
 Quellen                                              29 



Diese Buc is ein Aufstellun alle RO - Routine des
ZX-SPECTRUM di i eigene Maschinensprachenprogramme benutzt
werde k|nnen Dabe werde di genaue Einsprungsadressen die
Bedingungen di bei Einsprun eingehalte werde m}sse und
di vo de Routin ver{nderte Registe aufgelistet Einfache
Kenntniss i Z80-Maschinensprachenprogrammierun砠 werden
vorausgesetzt S{mtlich Adressenangabe sin hexadezimal Ein
Disassembl de SPECTRU ROM' is nich enthalten Z diesem
Zwec wird au da hervorragend Buc "Th complete SPECTRU
RO Disassembly vo Dr Ia Loga un Dr Frank O'Har 
(Melbourn Hous 1983)verwiesen de auc de gr|~t Tei de
in diese Buc verwendete Namen f} di Routine entnommeist.
Di Namen f} di Systemvariable entstamme de Buc "ZX
SPECTRU BASIC-Programmierung vo Steve Vicker (deutsches
Handbuc f} de Z SPECTRU S 17 ff).

Nac eine allgemeine Beschreibun de SPECTRUM-ROM' folgt
da Verzeichni de Routinen.Di Routine sin dabe nich nach
Adressen sonder nac de Verwendungszwec geordnet Wichtige
Routine finde sic i mehrere Kapiteln I Anhan finde Sie
ei Verzeichni de4  Systemvariablen-Flag󠠠 un䠠 eine
Aufstellun de bi jetz bekanntgewordene Fehle򠠠 im
Original-SPECTRUM-ROM.
.pa
           Allgemein Beschreibun de SPECTRUM-ROM's

Da Betriebssystem de Z SPECTRU erstreck sic vo Adresse
000 bi Adress 386D E glieder sic gro wi folgt:

000 bi 009 Restart-Routinen
009 bi 028 Tokentabell un Tastenbelegungstabellen
028 bi 03B Tastenabfrage un Decodierroutinen
03B bi 04A BEEP-Routinen
04C bi 09F LOAD- SAVE, VERIFY- un MERGE-Routinen
09F bi 0F2 Printroutinen
0F2 bi 11B Editor
11B bi 1A4 Eingab un Verwaltun vo Basic-Tex  Variablen
1A4 bi 24F Syntaxpr}fun bzw Ausf}hrun de BASIC-Programms
24F bi 2D4 Auswertun vo numerische bzw String-Ausdr}cken
2D4 bi 386 Kalkulator Flie~kommarechnung/Stringmanipulation
32C5 bis 335A Kalkulatortabellen
335B bis 386D Kalkulator

Da SPECTRU-Betriebssyste zeichne sic durc folgend Beson-
derheite aus:

a Ein un Ausgabeoperatione laufe jeweil }be einen
Verteiler i de j堠 nac蠠 ge|ffnete "Channel zu
entsprechende Routine weiterverzweig wir (s Ein Ausgabe-
operationen)

b Di Verwaltun s{mtliche zu BASIC-Syste geh|rige Berei-
ch (BASIC-Text Variablen ELINE Workspace Kalkulatorstapel)
erfolg dynamisch d.h ega w auc imme Byte eingef}g oder
gel|sch werden niemal gehe i andere Bereiche dadurc In-
formatione verloren Be Stringmanipulatione wir䠠 keine
"Garbag collection (Beseitigung alter Variablen) ben|tigt.

c ]beral w i SPECTRU BASI ein numerisch ode Stringkon-
stant stehe kann kan auc ei entsprechende Ausdruck
stehen Di Auswertun vo Ausdr}cke is dahe dementsprechend
komfortabel.

d Be jede numerische Konstante i BASIC-Tex folg hinter
de normale ASCI Darstellun ei Byt mi de Wer 0 un da-
nac di Flie~kommadarstellun de Zahl Di Zahle m}sse also
nich ers w{hren de Abarbeitun de Programm umgerechnet
werden Da Rechne mi numerische Konstante is schneller
al da Rechne mi Variablen.

e De Kalkulato de SPECTRUM' arbeite mi zwe unterschied-
liche Zahlenformaten Eine "Kurzformat f}r ganz Zahlen
zwische -6553 un 65535 da betr{chtlich Vorteil i der
Rechengeschwindigkei biete un de allgemei }bliche Flie~-
kommaformat.


                          Di Routinen

Be jede de aufgef}hrte Routine finde sic hinte de Na-
me ei kleine Beispielprogramm da zeigt mi welchen
Registerwerte un Flag di Routin aufgerufe werde mu~.
Danac is erkl{rt welch Operatione di Routine ausf}hrt.
I Klammer folge schlie~lic (sowei angebbar di vo der
Routin ver{nderte CPU-Register.
Gerad f}r de nich s ge}bte Maschinensprachenprogrammierer
biete di RO Routine de Vorteil da~ s{mtlich f}r das
BASIà Syste denkbare Fehlerf{ll abgefrag sin un im
Bedarfsfal Fehlermeldunge ausgegebe werden
 Di RO Routinen biete nahez 100 ig Absturzsicherheit
wenfolgende Bedingunge eingehalte werden:

 1 Da iy-Registe mu~ seine Wer vo 5C3 (=23610d)beibehalten
 2 Da hl'-Registe mu~ f}r ein R}ckkeh in BASI de Wer
    275 haben (Einig RO-Routine ver{nder diese Wert
    Dor wir nochma besonderaudieses Proble hingewiesen.)
 3 F} Eingaberoutine wi WAIT-KEY PAUS ode de Edito mu~
 de maskierbar Interrup freigegeben sein.


                E     Ԡ         N


rs 0

C        rst bz.
C 0 0  j Start
Die is di Routine di nac de Einschalte ausgef}hr wird.
De Speiche wir vollst{ndi gel|sch un gleichzeiti bi zur
Adress FFF au richtig Funktio gepr}ft Danac werde die
Systemvariable initialisiert di Sinclai Copyrigh Meldung
ausgegebe un i di Haupteingabeschleif gesprungen.


rs 8

C   rs 8
0 DEFB Fehlernummer-1
I Ro de SPECTRUM werde }be dies Routine di Fehlermel-
dunge ausgegeben Hinte de rs  befinde sic ein
Datenbyt (DEFB),da di gew}nscht Fehlermeldun spezifiziert.
Dies Byt is gleic de Fehlernumme minu 1 Da obig Bei-
spie ergib als di Fehlermeldung  Brea  CON repeats.
De g}ltig Bereic f}r di DEFB' is F bi 1A Wa passiert
nu genau wen ei Fehle auftritt De Wer de Datenbytes
wir i di Systemvariabl ERRN kopiert De Stapelzeige wird
mi de Wer de Systemvariable ERRS geladen Au dies Weise
wir de Maschinenstape gel|sch un gleichzeiti erreicht,da~
i Fehlerfal imme z eine gan bestimmte Adress verzweigt
wird Dies Adress is i allgemeine 130 i de Haupeingabe-
schleife Ei Beispiel ERRS hab de Wer F000 Dan steht
be Adress F00 da Byt 0 un be Adress F00 da Byt 13.
Wen ma i di entsprechende Adresse ander Byte hinein-
schreibt kan ma erreichen da~ be Fehler z eigenen
Routine verzweig wird.

Be angeschlossene INTERFAC  ergebe DEFB' zwische 1  und
3 de Aufru vo Routine de Schatte  ROM's.


rs 10

D    rs 10
Verzweig sofor zu Printroutin be 15F (sieh dort)
.pa
rs 18

D   rs 18
Di Systemvariabl CHAD is de Zeige au da gerad aktuelle
Zeiche de BASIC-Programmes Da vo diese Variable adressierte
Byt wir i da a Registe gebracht nich druckbar Zeichen
werde dabe }berschlagen (a,hl-CHADD)


rs 20

E   rs 20
Da n{chst Zeiche de BASIC-Programmes wir geholt (a,hl-CHADD)


rs 28

E   rs 28
Verzweig sofor zu Kalkulato be 335 (sieh dort)


rs 30

F   rs 30
Schaff b Byte Plat i Workspac (a,bc,de,hl)


rs 38

F   rs 38
Die is di Interruptroutine di 5 Ma i de Sekund aufge-
rufe wird De 3-Bytes-Zeitz{hle FRAMEӠ wir weitergez{hlt
un di Tastatu abgefragt (Routin 02B KEYBOARD) Wi e sich
f}r ein Interruptroutin geh|rt ver{nder sie kei Register.
De maskierbar Interrup is nac diese Routin堠 immer
freigegeben.


NMI

C 6 0 cal NM bzw Aktivierun de NMI-Eingange de CPU
Wen di SystemvariablNMIVAR 5CB de Wer 000 hat wir
zur Einschaltroutin be 000 verzweigtwennicht passiert
nichts.(/)



                     Ԡ          


Allgemeine }be Ein- Ausgabeoperatione bei SPECTRUM

De Z SPECTRU͠ benutz zu Ein un Ausgab ei ungemein
flexible Konzept da de Channels (Kan{le)
Wa is ei Channe ? E gibt f}r de Rechne mehrer Wege
de Kommunikatio mi de Au~enwelt De Ausdruc eine Listings
kan z.b au de Bildschirm de Drucke ode auc de Network
ode de Microdrive erfolgen F} jed diese M|glichkeite ist
ein ander RO Routin zust{ndig Be de meiste Rechnern
liege di Adresse f}r di entsprechende Ein/Ausgaberoutinen
fes un k|nne nich vo Benutze ge{nder werden
 Beim SPECTRU is da nich so:

Di Systemvariabl CHANӠ zeig au栠 de Begin eines
Speicherbereiches i de sic ein Tabell de Adresse f}r
Input un Outputoperatione f}r all Channel befindet Nach
de Einschalte de SPECTRUM' gib e folgend Channels:

Channe "K (- Keyboard) Ausgab i untere Tei de Bild-
schirme un Eingab }be Tastatur.

Channe "S (- Screen) Ausgab i obere Tei de Bildschirmes
und kein Eingab m|glich.

Channe "R":Ausgab i de Workspac (zeitweilige Arbeitsraum),
kein Eingab m|glich Diese Channe wir vo Betriebssystem
z.B be de STR$-Funktio benutzt.

Channe "P (- Printer) Ausgab }be den Drucker keine
Eingab m|glich.


Da urspr}nglic vo CHAN adressiert Gebie( ab 15AFh) sieh
folgenderma~e au :
 F409 PRINT-OUԠ (Outputadresse)
 A810 KEY-INPUԠ (Inputadresse)
 4B ASCII-Cod vo "K"
 F409 PRINT-OUԠ (Outputadresse)
 C415 Fehle Invali I/ Devic (Inputadresse)
 53 ASCII-Cod vo "S"
 B10F ADD-CHA (Outputadresse)
 C415 Fehle Invali I/ Devic (Inputadresse)
 52 ASCII-Cod vo "R"
 F409 PRINT-OU (Outputadresse)
 C415 Fehle Invali I/ Devic (Inputadresse)
 50 ASCII-Cod vo "P"

De einzelne Channel sinstandardm{~ig folgend Nummer
(Streams) zugeordnetmit dene Si auc z.B i BASI 
angesproche werde k|nnen (Festlegung der Richtung f}r Ein- 
und Ausgaben):

Channe "S"  un 1
Channe "K" 2
Channe "P" 3

Als erlaub z.B de Befeh PRINT#  i untere Tei des
Bildschirm etwa auszugeben dort w normalerweis nu 
Fehlermeldunge ode INPUT-Date erscheinen De Befeh PRINT# 
entspricht eine LPRINT De Befeh INPUT#  erzeug di 
Fehlermeldung
             
             Invali I/ Device

Be angeschlossene Interfac  k|nne noc folgend Channels
er|ffne werden:

Channe "B ode "Tf}rdi R 23 Schnittstelle(Inpuu.Output)
Channe "M f}r di Microdrive (Inpu un Output)
Channe "N f}r da Networ (Inpu un Output).
.pa
Di Systemvariabl CURCH zeig au de gerad ge|ffnet Channel
S{mtlich Outputoperatione (}be rs 10 un Inputoperationen
(}be di Routin INPUT-AD hole sic di durc dies System-
variabl adressiert Output ode Inputadress un f}hre das
entsprechend Program durch Durc [nder de Adresse kan 
ma de SPECTRU daz bringen be Inpu ode Outputoperatione
z eigene Routine z verzweigen u s z.B andere Drucke al
de Sinclair-Drucke z steuern.
Beachte Sie da~ diese flexibl Konzep abe auc bedeutet,da~
(RO-)PRINT un INPUT-Routine grunds{tzlic unterschiedliche
Ergebniss liefer k|nnen je nachdem welche Channe gerad ge-
|ffne ist.

CHAN-OPEN
3 . l a Numme de Channels
C 0 1 cal CHAN-OPEN
Mi diese Routin wir de Channe, dessen Numme im Register A
steht, ge|ffnet.
All Ein un Ausgabeoperatione laufe als a jetz }ber
diese Channel (a bc de hl)

                     Ġ         N

KE  SCAN
LESEΠ C B 0 cal KEY-SCAN
 7  l a,e
 1à in e
 2 F j z LESEN  ; auf Tastendruck warten
Lies di Tasten Benutz un setz keinerle Systemvariablen.
(a,bc,de,hl Da e-Registe ha nac de Routin j nac ge-
dr}ckte Tast folgend Werte (Taste:Wert)

 1:24 2:1C 3:14 4:0C 5:04 6:03 7:0B 8:13 9:1B 0:23
 Q:25 W:1D E:15 R:0D T:05 Y:02 U:0A I:12 O:1A P:22
 A:26 S:1E D:16 F:0E G:06 H:01 J:09 K:11 L:19 ENT:21
CAPS:27 Z:1F X:17 C:0F V:07 B:00 N:08 M:10 SS:18 Spa:20
Be keiner oder meh al eine gedr}ckte Tast ha da 
e-Registe de Wert FFh.

KEYBOARD
Lese C B 0 cal KEYBOARD
 F C 0 6E bi ,(FLAGS)
 2 F j z LESEN
Lies di Taste wi i BASI Syste }blich d.h Taste k|nnen
ers nac eine gewisse Verz|gerun (Systemvariable REPPEҠ /
REPDEL zu zweiteMa ausl|senDer ASCII-Codde gedr}ckten
Tast befinde sic i de Systemvariable LASTK wen Bi  der
Systemvariable FLAGӠ gesetz ist (obige Beispie wartet
wiede eine g}ltige Tastendruc ab (a,bc,de,hl)

                             EDITOR

Wi arbeite de Edito ?

De Edito is ein gro~ Eingabeschleife Zuers wir ei Tas-
tendruc abgewarte (Routin WAIT-KEY) Be Sondertaste wi 
Edit de Cursorsteuertaste ode Ente wir au entsprechend 
Spezialroutine verzweigt Ansonste wir ei Byt Plat i ent
sprechende Bereic (E-LINE/Workspace geschaffe un de Cod 
de gedr}ckte Tast dor abgespeichert Di Systemvariabl K-
CUR,di di Speicherstell adressiert au de eingef}g wird wir u eine erh|ht Waru sieh ma nu etwa au de Bild-
schirm Di Inputroutin f}r Channe  (di vo WAIT-KE aufge-
rufe wird lies nich nu di Tastatur sonder druck auc de 
interessierende Bereich(E-LIN  Workspace i untere Tei de 
Bildschirme aus Be de durc K-CU adressierte Byt wir de 
blinkend Curso i geforderte Modu gedruckt Be jede 
Tastendrucwir als de gesamt Bereic ne ausgegeben. S wir 
verst{ndlich da~ e imme l{nge dauert a langBASI- 
Zeile noc ei Zeiche anzuh{ngen Da Ausdrucke de Inputda
te kan durc Zur}cksetze vo Bi  de Systemvariable TV- 
FLAǠ unterbunde werden De Edito ha ein eigen Fehlerrou
tine di da bekannt "B|||pen erzeugt wen z.B ein 
Inputzeil z lan wird Da Tastaturklicke wir ebenfall vo 
Edito erzeug un kan al eigen Routin nich aufgerufe 
werden Be de Benutzun de Editor i eigene Programme is 
e wichtig da~ bei Aufru de Channe  ge|ffne ist.
De Edito kan z zwe unterschiedliche Zwecke benutz werden.

1 Zu Eingab eine BASI Zeil bzw eine BASI Befehles

Di Eingab eine BASI Zeil is relati einfach:
F C 3 A re ,(FLAGX)
C B 1 cal SET-MIΠ  l|sch di E-LINE
C 6 0Ġ cal CLS-LOWEҠ  l|sch Screen |ffne Channe 2
C 2 0Ơ cal EDITOҠ  (a,bc,de,hl)
I diese Fal is Bi  de Systemvariable FLAG zur}ckgesetzt
Di eingegeben Zeil befinde sic i de E-LIN (di Systemva-
riabl  LIN zeig au de Begin diese Speicherbereiches).

2 Zu Eingab vo INPUT-Daten

 Di Eingab vo Input-Date is schwieriger:
F C 3 E se ,(FLAGX)
C B 1 cal SET-WORˠ  l|sch de Workspace
C 6 0Ġ cal CLS-LOWE  s.O.
0 0 0 l bc 1
F rs 3  schaff ei Byt Plat i Workspace
3 0Ġ l (hl) "enter"
2 6 5à l hl (WORKSP)
2 5 5à l (K-CUR),h  Curso setzen
C 2 0Ơ cal EDITOR
F C 3 A re ,(FLAGX  seh wichti  (a,bc,de,hl)
Bi  vo FLAG is gesetzt di INPUT-Date befinde sic im
Workspac (di Systemvariabl WORKS zeig au de Beginn).

ED-COPY
C 1 1 cal ED-COPY
Die is di Routine di de gesamte Editor-Bereic immewiede
im untere Tei de Bildschirme ausgibt.BivoTV-FLAǠ mu~
gesetz sein (a,bc,de,hl)

WAIT-KEY

C D 1 cal WAIT-KEY
Ruf s lang di augenblicklich Inputroutin auf bi eine
g}ltig Eingab vorliegt Wir i Edito gebraucht abe auch
imme dann wen ei Tastendruc abgewarte werde mu~, z.B bei
de "scrol ? Abfrage.
.pa
KEY-INPUT

C A 1 cal KEY-INPUT
Dies Inputroutin f}r Channe  lies di Tastatu un ruft
ED-COP auf u de Eingabebereic i untere Tei de Bild-
schirmauszugeben Interessanterweis verarbeite diese
Routin abe auc di [nderun de Cursormodus Die f}hr zu
merkw}rdige Resultaten wen be "Star tap the pres any
key ode "scroll? z.B CAPS-SHIF un  ode CAPS-SHIF un 9
gedr}ck wird.

PAUSE

F C 0 AŠ re ,(FLAGS)
0 . . l bc L{ng de Pause
C 3 1Ơ cal Pause
Verh{l sic wi de PAUSE-Befeh i BASI (a',hl)


                                N

Di Printroutin wir a einfachste mi D (rs 1) aufgerufen.
Da a-Registe enth{l da Byte da gedruck werde soll Der
Verteile (PRINT-A- 15F2 hol sic dan di Outputadress des
augenblickliche Channel un verzweig z ihr Zuers einige
allgemein Serviceroutine f}r di "normalen Printroutinen
(Channe 1  un 3):



                                N

E gib bei SPECTRU͠ insgesam 1 verschieden druckbare
Steuerzeichen dimi D (rs 1) genawi i BASIà benutzt
werde k|nnen Wen z diese Steuerzeiche noc weiter Bytes
geh|ren wir di Outputadress de Channel ge{ndert s da~
di n{chste  ode  mi D }bergebene Byte al Datenbytes
(Parameter) betrachte werden.

ŠӠ(CHANNEL)
 0  kein     Druck Space bi Spalt 1 bzw Spalt  
                erreicht is (1,2,3)
 0  kein     Druckpositio wander eine Stelle nach links 
                Kan zu Abstur f}hren wen Druckpositio
                bereiti linker obere Eck de Bildschirm 
                ist (1,2)
 0  kein     Druckpos au Begin de n{chste Zeil (1,2,3)
 1       Setz INK-Farb (1,2   Datenbyt  bi 7
 1       Setz PAPER-Farb (1,2) Datenbyte  0 bis 7
 1       Setz FLAS (1,2   Datenbyte  ode 1
 1       Setz BRIGH (1,2)      Datenbytes 0 oder 1
 1       Setz INVERS (1,2)     Datenbytes 0 oder 1
 1       Setz OVE (1,2)        Datenbytes 0 oder 1
 1       AT-Steuerun, Datenbyte:Zeil un Spalt (1,2,3)
      f}r de Drucke gil nu di Spalte
 1       TAB-Steuerun, interessanterweis  Datenbyte
                i bekannte Low/High- Format.
.pa
PO-FETCH

C 0 0  cal PO-FETCH
Di Paramete f}r di Druckpositio werde au󠠠 den
Systemvariable geholt:
Channel h젠 bc
  DFCC-̠ SPOSN-L
  DFCà SPOSN
  PR-Cà P-POSΠ (nu c-Register (bc,hl)


PO-STORE
CD-D 0 cal PO-STORE
Di Wert i de Register werde nac obige Tabell i den
Systemvariable abgespeichert (/)

TEMPS

C 4 0Ġ cal TEMPS
Di zeitweilige Farbe werde au de dauerhafte geholt F}r
Channe  hei~ das ATTR  BORDC un MAS  0 F} Channe 2:
ATTR  ATTR un MASK  MASKP (a,hl)

CL-SET

0 . . l bc 33-Spalte 24-Zeile
C D 0Ġ cal CL-SET
Au de Wer i bc-Registe wir j nac Channe di Adress im
Bildspeiche ode Druckerpuffe berechne un mi PO-STOR in
de Systemvariable abgespeichert (a,de,hl)

PRINT-AT

0 . . l bc 33-Spalte 24-Zeile
C E 0Ġ cal PRINT-AT
Di Printpositio wir au di spezifiziert Stell verschoben.
Nu Channe  ode 2 (a,de,hl=DFCC)

CL-ADR

0 . l b 24-Zeile
C 9 0Š cal CL-ADR
Berechne di Adress de Beginn eine Zeil i Bildschirm-
speicher (a,hl=gesucht Adresse de)

Nu einig Routine nur f}r de Bildschirm:

CL 1
C 6 0Ġ cal CL 1
De Bildschir wir gel|scht Danac is Channe  ge|ffnet.
Printpositio is 0, i Channe 1 (a,bc,de,hl)

CL 2
C A 0Ġ cal CL 2
De Bildschir wir gel|scht Channe  is danac ge|ffne und
di Printpositio is 0, i Channe 2 (a,bc,de,hl)
L|sche bedeutet da~ s{mtlich Pixe de Bilde au  gesetzt
werde un s{mtlich Attributbyte f}r Channe  au de Wert
vo BORDC un f}r Channe  au de Wer vo ATTRР gesetzt
werden Di Input un Outputadresse f}r Channe  werde in
beide Routine wiede au ihre urspr}ngliche Wer  PRINT-OUTun KEY-INPUT gesetzt Wen ma dies Channeladresse also
{nder m|chte dar ma di CL Routine nich benutzen.
CL  un CL  f}hre zu Absturz wen di Systemvariabl DFSZ
eine Wer vo  ode vo meh al 2 hat (a,bc,de,hl).


CL-LINES
0 . l b Anzah de Zeilen
C 4 0Š cal CL-LINES
L|sch di unterste  Zeile de Bildschirmes Printposition
ode Channeladresse werde nich ge{ndert (a,bc,de,hl)


SCROLL
C F 0Ġ cal SCROLL
Scroll de ganze Bildschir ein Zeil nac oben Di Print-
positio wir nich ge{ndert (a,bc,de,hl)


SCROLL-LINES
0 . l b Anzah de Zeilen
C 0 0Š cal SCROLL-LINES
Scroll i gleiche Weis di unterste  Zeilen (a,bc,de,hl)


                         Druckerroutinen

OUT-CODE
3 . l a Ziffer
C E 1 cal OUT-CODE
De ASCII-Cod de i a-Registe enthaltene Ziffe wird
gedruckt (a,de,???)


OUT-CHAR
3 . l a Zeichen
C 3 1 cal OUT-CHAR
Au~e der Ausgabe wir auc automatisc de Cursormodu ge{ndert
d.h nac einem gedruckte ": ode "THEN wir di n{chste
gedr}ckt Tast al Keywor interpretiert Wir vo Editor
gebraucht (a,???)

OUT-NUM
0 . . l bc Zahl
C 1 1 cal OUT-NUM
Gibt Zahlen di kleine al 1000 sind aus E wir links-
b}ndi ausgegeben (a,bc,???).
Zu Ausgeben vo Zahle bi 6553 kan ma folgende Programm
eingeben da abe wege de Stapelmanipulatio nu al Unter-
program z benutze ist.
1 FƠ l e FƠ  bedeute kein f}hrende Nullen
2 . . l hl Zahl
0 F D l bc -10000
D pus de
E pus hl
C 2 1 cal OUT-SP-ND
C 3 1 j OUT-NUM-CONT
.PA
PRINT-FP
0 E 0 l bc 1000
C 2 2Ġ cal STK-BC
C E 2Ġ cal PRINT-FP
Gibt die au de Kalkulatorstape liegend Flie~kommazah aus.
I obige Beispie wir di Zah 100 al Flie~kommmazah auf
de Kalkulatorstape gelegt eh di Routin aufgerufe wird.
(a,bc,de,hl,a',bc',de')


A-SPACES
3 . l a Anzah de Spaces
C C 0 cal A-SPACES
Gib  Space aus (a,de,???)


PRINT-ST I
2 . . l hl Anfan de Strings
C 7 1  cal PR-ST I
Di Routin druck de vo h adressierte Strin bi zu ersten
Enter-Zeiche (0D) Normalerweis wir dies Routin bei LISTen
eine BASI Zeil gebraucht (a,hl,???)

PRINT-ST II
1 . . l de Anfangsadresse
0 . . l bc L{nge
C 3 2 cal PRINT-ST II
A d werde b Zeiche ausgegeben Die is di Routine di
zur Ausgabe eine String i BASI-Syste gebrauch wird
(a,bc,de,hl ???)


MSG-PRINT
1 . . l de Begin de Tabelle
3 . l a Numme de Strings Erste Strin a=00
C 0 0à cal MSG-PRINT
Dies Routin gibt String au eine Stringtabelle aus Dabe sind
all String ohn Trennungszeiche direk nacheinande abgespei-
chert Bei letzte Byt eine jede String is da Bi  ge-
setzt Darau folgt da~ di entsprechende String kein Gra-
fikzeiche ode Toke enthalte d}rfen Di Tabell mu~ mit
eine Byt beginnen be de Bi  gesetz ist (a,bc,de ???)

COPY
C A 0Š cal COPY
F}hr da BASI Kommand COP aus (a,bc,de,hl)


COPY-LINES
F di
0 . l b Anzah de Pixelzeilen
C A 0Š cal COPY-LINES
Schick nu di oberste  Pixelzeile a de Drucker (a,bc,de,
hl)
.PA
COPY-BUFF
C C 0Š cal COPY-BUFF
De Inhal de Druckerpuffer (25 Byte   Pixelzeilen wird
au de Drucke ausgegeben Danac wir de Druckpuffe ge-
l|scht (a,bc,de,hl)


CLEAR-PRB
C D 0Š cal CLEAR-PRB
L|sch de Druckerpuffer d.h f}ll ih mi Nulle au und
setz di Druckspalt f}r de Drucke (PR-CC wiede au Null.
(a,bc,hl)



                                N

BORDER
3 . l a Farbe
C 9 2 cal BORDER
Setz Borderfarb (/)


PIXELADRESSE
0 . . l bc x-Koordinate y-Koordinate
C A 2 cal PIXELADRESS
Di Routin berechne di Adress de gesuchte Pixel un zwar
is e da a-7 Bi i de durc h adressierte Speicherstelle.
(a,bc,hl)


PLOT
0 . . l bc x-Koordinate y-Koordinate
C DF 2 cal PLOԠ (a,bc,hl)
Das ist der BASIC-PLOT-Befehl.

DRA 2
0 . . l bc [nderun i x-Richtung/[nderun i y-Richtung
1 . . l de Vorzeiche x-[nderung/Vorzeiche y-[nderung
  0 f}r  F f}r -
C B 2 cal DRA 2
D exx
2 5 2 l hl' 2758
D exx
E wir wi bei BASI DRAW-Befeh mi  Parameter ein gerade
Lini gezogen Di Routin benutz auc da hl'-Register das
dahe i Beispie wiede au de richtige Wer gesetz wurde.
(a,bc,hl,a',bc',de',hl')

DRA 3
C 9 2 cal DRA 3
Di dre Paramete diese Routin(x-[nderungy-[nderunund
Winke) m}sse i dieseReihenfolg au de Kalkulatorstapel
gebrach werden Wi bei BASI-DRA mi  Parameter wir ein
Kreisboge gezeichnet Auc hie mu~ de Wer vo hl nac der
Routin wiederhergestell werden wen ein R}ckkeh in BASIC
gew}nsch wird (All Register)
.PA
CIRCLE
C 2 2 cal CIRCLE
D exx
2 5 2 l hl 2758
D exx
Di dre Paramete(x-Koordinate,y-Koordinat de Mittelpunktes
un Radiu) m}sse i diese Reihenfolg au de Kalkulatorstapel
gebrach werden hl mu~ wiederhergestell werden (Alle
Register)


POINT
0 . . l bc x-Koordinate/y-Koordinate
C CE 2 cal POINT
C 1 2 cal Stk-TO-A
Da Ergebni de POIN Funktio (1 wen PIXE gesetzt 0 wenn
Pixe gel|scht is nac de Beispielprogram i a-Register.
(a,bc,de,hl,de')


SCREEN$
0 . . l bc x-Koordinate/y-Koordinate
C 3 2 cal SCREEN$
C 1 2 cal STK-TO-A
De Cod de SCREEN is nac de Beispielprogram i a-Register
(a,bc,de,hl,de')


ATTR
0 . . l bc x-Koordinate/y-Koordinate
C 8 2 cal ATTR
C 1 2 cal STK-TO-A
Da Ergebni de ATT Funktio is nac de Beispielprogramm
wiede i a-Register (a,bc,de,hl,de')


                                N

BEEPER
1 . . l de Frequen  Zeit
2 . . l hl 87500 geteil durc Frequenz
C B 0 cal BEEPER
U z.B eine To de Tonh|h (Frequenz 44 H (Kammerto a)
ein Sekund zu Klinge z bringe mu~ da de-Registe de Wert
44 H   Sekund  44 un da hl-Registe de Wer 87500 /
44  198 haben (a,bc,de,hl,ix)

BEEP
C F 0 cal BEEP
Di Paramete Daue un Tonh|h m}sse i diese Reihenfolg auf
de Kalkukatorstape gebrach werden (a,bc,de,hl,bc',de',ix)
De Aufru de BEE Routin erforder zwa wenige Rechenarbeit
bei Benutzer abe di BEEPE Routin is u viele schneller
un kan dahe auc k}rzer T|n wiedergeben.
.PA
                                N

MERGE
C 2 0 cal MERGE
Dies Routin dien de Einf}ge vo Variable ode BASI Zeilen
un mu~ mi folgende Parameter aufgerufe werden:
Da hl-Registe zeig au de Begin de neue BASI Zeile/Vari-
able Da de-Registe zeig au di Adresse a de eingef}gt
werde soll Da carry-Fla is gesetz be eine Variable und
r}ckgesetz be eine BASI Zeile.
Da zero-Fla is gesetzt wen ein alt Fassun de BASI Zei-
le/Variable ersetz werde sol un r}ckgesetzt wen di BASIC
Zeile/Variabl nur eingef}g werde soll (a,bc,de,hl,a')


MAKE-ROOM
2 . . l hl Adresse a de Plat geschaffe werde soll
0 . . l bc Anzah de Byte Plat di gebrauch wird
C 5 1 cal MAKE-ROOM
Dies Routin schaff a h insgesam b Byte Plat i BASIC
System d.h schieb all dahintergelegene Byte u b Bytes
nac hinte un pa~ all Zeiger-Systemvariable (CHANS,PROG,
VARS,E-LINE,WORKSP,STKBO un STKEND entsprechen an.
(a,bc.de.hl)


ONE-SPACE
2 . . l hl Adresse
C 5 1 cal ONE-SPACE
Wi MAKE-ROOM, e wir abe nu ei Byt Plat geschaffen.
(a,bc,de,hl)

RECLAI 1
1 . . l de Erste Byte da zur}ckgegebe werde soll
2 . . l hl Letzte Byte da zur}ckgegebe werde sol  1
C E5 1 cal RECLAI 1
Di Byte zwische (de un (hl)- werde zur}ckgegeben Zeiger-
anpassun wi be MAKE-ROO (a,bc,de,hl)


RECLAI 2
2 . . l hl Erste Byte da zur}ckgegebe werde soll
0 . . l bc Anzah de zur}ckzugebene Bytes
C E 1 cal RECLAI 2
A (hl werde b Byte zur}ckgegeben (a,bc,de,hl)

LINE-ADR
2 . . l hl Zeilennummer
C 6 1 cal LINE-ADR
F} di durc h spezifiziert BASI Zeil,bzw wen diese
nich existier f}r di n{chst Zeil danac, liefer diese
Routin di Anfangsadess i hl-Register Da de-Registe h{lt
di Anfangsadress de vorige Zeile Da zero-Fla is gesetzt,
wen di Zeil gefunde wurd un r}ckgesetzt wen ersatzweise
di erst Zeil danac genomme wurde (a,bc,de,hl)
.PA
EACH-STMT
2 . . l hl Begin de Zeile
1 0 . l de 0/Numme de gesuchte Befehl +1
C 88 1 cal EACH-STMT
oder
2 . . l hl Begin de Zeile
1 . F l de Gesuchte Token/FF
C 88 1 cal EACH-STMT
Dies Routin kan benutz werden de (d+1)-te Befeh i einer
Zeil z finde ode de erste Befeh i de Zeile de mi dem
i e-Registe angegebene Toke beginnt I beide F{lle ist
da carry-Fla zur}ckgesetzt wen di Such erfolgreic war Im
erste Fal zeig h dan au de Begin de Befehl-1 i zwei-
te Fal au de Begin de Befehls (a,bc,de,hl)


LOOK-PROG
2 5 5 l h (PROG)
1 m l e Gesuchte Token
C B 1Ġ cal LOOK-PROG
Di Routin such da gesamt Programmgebie nac de Auftreten
de durc da e-Registe gegebene Toke ab Da hl-Registe mu~
a Angan au de Begin de abzusuchende Gebiete zeigen.
Registe un Flag wi be EACH-STMT (a,bc,de,hl)


LOOK-VARS
2 5 5à l h (CHADD)
E pus hl
2 . . l hl Zeige au de Begin de Variablennamens
C B 2cal LOOK-VARS
C po bc
E 4 5 5C l (CHADD) bc
De Nam de gesuchte Variabl mu~ al Tex irgendw i Spei-
che stehen abgeschlosse mi eine Trennungszeiche z.B Enter
Lasse Si dan da hl-Registe i obige Beispie au de Be-
gin diese Texte zeigen Nac de Aufru de Routin is das
carry-Fla gesetzt wen di Variabl nich gefunde wurd und
r}ckgesetzt wen si gefunde wurde Wurd di堠 Variable
gefunden zeig h in Variablengebie un zwa au da letzte
Byt de Namen de gefundene Variablen.


SET-MIN   SET-WORK   SET-STK
C B 1 cal SET-MIN
Setz all Bereich oberhal vo E-LINŠ (ELINE Workspac und
Kalkulatorstapel au ihr minimal Gr|~ un l|sch si so.(hl)
C B 1 cal SET-WOR l|sch Workspac un Kalkulatorstapel,
C C 1 cal SET-ST l|sch nu de Kalkulatorstapel.
.pa
REMOVE-FP
2 . . l hl Begin de durchsuchte Gebietes
C A 1 cal REMOVE-FP
Durchsuch da entsprechend Gebie (bi zu erste Enter-Zei-
chen nac Flie~kommadarstellunge un entfern dies gegebenen-
falls (a,bc,de,hl)


AUTO-LIST
C 9 1 cal AUTO-LIST
Produzier ei "automatisches Listin (so al o i BASIà die
Ente Tast gedr}ck wurde) (a,bc,de,hl)

LIST
0 . . l bc Zeilennummer
C 28 18 cal LIST
Entsprich eine LIS b Befeh i BASIC (a,bc,de,hl)


OUT-LINE
2 . . l hl Begin de Zeile
C 5 18 cal OUT-LINE
LIST'e ein einzig Zeile (a,bc,de,hl)


INDEXER
2 . .  l hl Begin de Tabelle
0 .  l c Gesuchte Zeichen
C D 1 cal INDEXER
Wir zu Suche eine gegebene Zeichen i eine Zweiertabelle
ben|tigt De Aufba de Tabell mu~ sein Zeichen Datenbyte
Zeichen Datenbyte .. , al Endezeichen Da carry-Fla ist
gesetzt Wen di Such erfolgreic war Da hl-Registe zeigt
dan au da gefunden Datenbyte (a,hl)


ALPHA
C 8 2à cal ALPHA
Da carry-Fla is gesetzt wen da i a-Registe enthaltene
Zeiche ei Buchstab ist (/)


NUMERIC
C 1 2Ġ cal NUMERIC
Da carry-Fla is r}ckgesetzt wen da i a-Registe enthal-
ten Zeiche ein Dezimalziffe ist.(/)


ALPHANUm
C 88 2à cal ALPHANUM
Da carry-Fla is gesetzt wen i a-Registe ei alpha-
numerische Zeiche ist.

FREE-MEM
C 1 1Ơ cal FREE-MEM
Da hl-Registe gib nac de Routin di Anzah de vo BASIC
Syste belegte Byte an I BASI gib de Befehl PRINԠ 65536
-US 796 di Anzah de freie Byte an (bc=hl,de,hl)
.pa
BREAK-KEY
C 5 1Ơ cal BREAK-KEY
Nac de Routin is da carry-Fla r}ckgesetzt wen CAPS-SHIFT
un BREA gleichzeiti gedr}ck werden (a)


CAPS
C 5 1Ơ cal CAPS
Carry-Fla is r}ckgesetzt wen CAPS-SHIF gedr}ck wurde (a)


INIT
C 1 1 j INIT
Initialisier di Systemvariable un䠠 spring i die
Haupteingabeschleife ohn de Speiche z l|schen.


MAIN-EXEC
E 7 3 5 l s,(ERRSP)
E po hl
C A 1 j MAIN-EXEC
Hie beginn di Haupteingabeschleife Ei seh sichere R}ck-
kehrpunk in Betriebssystem


MAIN-4
E 7 3 5 l s,(ERRSP)
E po hl
C 0 1 j MAIN-4
MAIN- is di Adresse di normalerweis i de durc ERRSP
adressierte Byte z finde ist Wen ma dies Adress aber
z.B ge{nder hat kan mi de Beispielprogram siche ins
Betriebssyste zur}ckgekehr werden.


STMT-RET
2 . . l hl Zeige au n{chste ": i BASIC-Text
2 5 5à l (CHADD) hl
E 7 3 5 l s,(ERRSP)
C 7 1  j STMT-RET
Die is de R}ckkehrpunk nac Ausf}hrun eine jede Befehls
i de Zeile Mi de Beispielprogram kan ma da BASIà Pro-
gram weiterlaufe lasse ohne da~ da Keyword da vo de USR
Aufru stan ausgef}hr wird CHAD mu~ au de n{chste ":"
zeigen.


CLEAR
E 7 3 5C l s,(ERRSP)
0 . . l bc Gew}nschte RAMTOP
C B 1Š cal CLEAR
2 7 1  l hl STMT-RET
E pus hl
D be de Ausf}hrun de CLEA  Kommando nu di untersten
beide Adresse de Stapel verschobe werden is ein R}ckkehr
in BASI nac diese Routin nu }be STMT-RE m|glich.

.pa
MOVE-STK
E 7 3 5 l s (ERRSP)
2 . . l hl Gew}nschte RAMTOP
C D 1Š cal MOVE-STK
2 7 1  l hl STMT-RET
E pus hl
Be diese Routin wir nu de Maschinenstape verschoben d.h.
Variabl un Bildschir werde nich gel|scht ]be di Stapel-
manipulatio gil dasselb wi be CLEAR.


GOTO
2 . . l hl Gew}nscht Zeilennummer
C 6C 1Š cal GOTO
Nac de R}ckkeh verzweig da BASI Program zu Zeil hl Die
Zeilennumme mu~ kleine al F00 (! sein (de).



                                N

SA-BYTES
D 2 . . l ix Adresse a de gesave werde soll
1 . . l de L{ng de gesavede Blockes
3 . l a Typeflag
C C 0 cal SA-BYTES
Be alle Lade un Saveoperationeenth{ldaix-Registe die
Adresse a de gelade ode gesave wir un da de-Register
di gew}nscht L{nge Vo di eigentliche Byte wir abe ein
sogenannte Typefla gesaved Sp{te bei Lade unterscheidet
de Rechne anhan diese Bytes o ei Heade folg (Typeflag
00 ode ei Datenbloc (Typefla FF) E sin auc beliebige
ander Typeflag m|glich Be Typeflag <8 wir ei langer
F}hrungsto vo  Sekunde abgesaved,sons eine vo  Sekunden.
(a,bc,de,hl,ix,a')


LD-BYTES
D 2 . . l ix Adresse
1 . . l de L{nge
3 . l a Typeflag
3 scf
C 5 0 cal LD-BYTES
Da carry-Fla mu~ vo de Aufru gesetz werden wen geladen
werde sol un r}ckgesetz werden wen verifiziert werde soll.
E werde nu Bl|ck geladen di da richtig Typefla haben.
Da Fla wir dabe nich i de Speiche gelade un z{hl auch
be de L{ng nich mit Nac de Routin is da carry-Flag
gesetz be fehlerfreie Lade un r}ckgesetz be eine Lade-
fehler Di Lade un Saveroutin k|nne durc Dr}cke der
Breac Tast gestopp werde (Fehlermeldun  BREA ...)
(a,bc,de,hl,a',ix)

LD-ALL
d 2 . . l ix Adresse
1 . . l de L{nge
BƠ c ᠠ  setz zero-Flag
3 scf
0 e af,af'
C 5 0 cal LD-ALL

Dies Routin l{d unabh{ngi vo Typefla alles Da Typeflag
wir abe hie i de Speiche gelade un z{hl auc be der
L{ng mit (a,bc,de,hl,a',ix)

SA-CONTRL
D 2 . . l ix Begin de Headers
2 . . l hl Begin de Datenblocks
C 7 0 cal SA-CONTRL
Dies Routin save eine Datenbloc zusamme mi seine Header
wi i BASIà Syste }blich Di Meldun "Star tap ..."
erscheint (a,bc,de,hl,a',ix)


VE-BLOCK
D 2 . . l ix Adresse
1 . . l de L{nge
C F 0 cal VE-BLOCK
Verify' eine Datenbloc un gib gegebenenfall di Meldung
"Tap loadin error aus (a,bc,de,hl,ix)


LD-BLOCK
D 2 . . l ix Adresse
1 . . l de L{nge
C B 0 cal LD-BLOCK
Lade eine Blocke mi eventuelle Ausgab vo "Tap loading
error" (a,bc,de,hl,a',ix)

                                N

Hie beginne di Routinen di sic mi de Flie~kommazahlen
besch{ftigen dahe vora einig Bemerkunge dar}ber wa Flie~-
kommazahle sin un wi si i SPECTRU͠ abgespeicher werden.
Zahle wi 1,6553 ode -3276 nenn ma Integerzahlen Alle
dies Zahle lasse sic mi 1 Bi darstellen Di 1 Bi Re-
gisterpaar de Z80-CP k|nne als direk mi diese Zahlen
rechnen Da geh nat}rlic relati schnell
Andererseit gibt e auc Zahle wi 3,14159 ode 4,711E35
Zu Darstellung diese Zahle reiche 1 Bi nich aus Di
meiste Rechner verwendedazueiZahlenformat be de
 Byte zur Darstellun de Zah gebrauch werden U di
gro~e Geschwindigkeitsvorteil be de Integerzahle auszu-
nutzen speichert de SPECTRU Zahle zwische -6553 un 6553
i eine eigenen  Byt Format:
Da erst Byt is 0 Da zweit Byt is  be eine positiven
un F be eine negative Zahl Da dritt un viert Byt h{lt
di Zah (LD-Byt zuerst) bzw.6553  de Zahl wen diese
negati is (Zweierkompliment) Da f}nft Byt is wiede 0.
Zu Additio un Subtraktio brauche dies Zahle nu i das
CPU-Registe gebrach z werde un de entsprechend Z80-Befehl
kan ausgef}hr werden.
Ander Zahle werde i  Byt Flie~kommaforma abgespeichert:
Di Zah wir al Zweier-Exponentialzah geschrieben Wi wi 
z.B stat 123 i Dezimalsyste auc 1,23 E schreibe k|nnen 
k|nne wi auc jed Dualzah schreibe als    hoc e Dabe 
is  ein vorzeichenbehaftet Zahl di Mantisse  ei ganz-
zahlige Exponen mi Vorzeichen Wi wi stat 1,23 E auc 
0,123 E schreibe k|nnen k|nne wi e auc be unsere 
Dual-zah durc Ver{nderun de Exponente erreichen da~ di 
Mantis-s imme kleine al  is un kein f}hrende Nulle 
hat Be Dualzahle lieg di Mantiss dan zwische 0. un 0.9999.. D wi jetz wissen da~ da erst Bi unsere Mantis
s gesetz ist k|nne wi e ersetze durc ei Vorzeichenbi 
( be positive un  be negative Mantissen) Da Flie~komma
formasieh dan folgenderma~e ausDa erst Byt enth{l de 
Exponen-te   12 ( dar zwische -12 un +12 liegen)
 Dazweitbif}nft Byt enth{l di Mantiss i de ebe 
beschriebene "normalisierten Form d.h Bi 7 i 2.Byt ent-
h{l daVorzeichenDi Zah Nulldi nich ida beschrieben 
Forma pa~t ha ein besonder Darstellung be de all f}n 
Byte (auc de Exponent  sind.
Be Flie~kommarechnunge wir de sogenannt Kalkulatorstape 
al Zwischenspeiche verwendet [hnlic wi bei Maschinenstape 
werde di -Byt-Zahle hie nacheinande abgelegt Di zuletz 
abgelegt Zah wir al erst wiede vo Stape geholt Di Sys-
temvariabl STKEN leiste {hnliche wi de Stapelzeige bei 
Maschinenstapel Si zeig ei Byt hinte da letzt Byt de 
Stapels STKBO gib de Begin de Kalkulatorstapel a (Erste 
Byt de unterste Zahl).
String werde i SPECTRU Syste {hnlic behandel wi Flie~-
kommazahlen Zwa k|nne si nich au de Kalkulatorstape 
geleg werden abe f}r jede Strin gib e zwe einfach An-
gaben di ih charakterisieren Ersten di Adresse be de e 
i Speiche steht Zweitens Sein L{nge Dies Stringparamete 
werde ebenfall i eine  Byt Forma au de Kalkulatorstape 
abgelegt Da erst Byt is 0 wen e sic u eine Teilstrin 
(a$( T 4) ode eine Strin au eine Arra handelt ansonste 
1Dazweitun dritt Byt enthalte di Startadress de 
Strings da viert un f}nft Byt sein L{nge.
Di oberst Flie~kommazah au de Kalkulatorstape bezeichne 
wi vo jetz a mi F1 di zweitoberst mi F2.


FIND-INT1
C 9 1Š cal FIND-INT1
F wir vo Kalkulatorstape gehol un in a-Registe gebracht.
Wen F nich zwische  un 25 liegt erfolg Fehlermeldun B.


FIND-INT2
C 9 1Š cal FIND-INT2
Diesma wir F in bc-Registe gebracht Fehlermeldun B wenn
F nich zwische  un 65535.


FP-TO-A
C A 2Ġ cal FP-TO-A
[hnlic FIND-INT1 E werde abe kein堠 Fehlermeldungen
ausgegeben Vielmeh is da carry-Fla gesetz be eine Be-
reichs}berschreitun un da zero-Fla r}ckgesetzt wen F1
negati ist.


FP-TO-BC
C A 2Ġ cal FP-TO-BC
Leiste daselb f}r da bc-Register.
Be FIND-INT1 FIND-INT2 FP-TO- un FP-TO-B wir F jeweils
zu n{chste ganze Zah (als kaufm{nnisch gerundet.
.PA
STK-A
C 2 2Ġ cal STK-A
Da a-Registe wir al Flie~kommazah au de Kalkulatorstapel
gebracht.

STK-BC
C 2 2Ġ cal STK-BC
Da bc-Registe wir al Flie~kommazah au de Kalkulatorstapel
gebracht Die is auc di R}ckkehradress f}r di USҠ Funkti-
on weshal ma al Ergebni vo US imme de Inhal de bc-Re-
gister erh{lt Wen ma dies R}ckkehradress vo Maschinen-
stape herunterholt eh ma in BASI zur}ckkehrt kan ma be-
liebig Flie~kommazahle al Ergebni vo US erhalten Ma mu~
di entsprechende Zahle nu au de Kalkulatorstape ablegen.


DE (BIN)-TO-FP
2 5 5 l h,(CHADD)
E pus hl
2 . . l hl Zeige au de Begin de Textes
2 5 5 l (CHADD) hl
C 9 2à cal DEC-TO-FP
E po hl
2 5 5 l (CHADD) hl
CHAD zeig au de Begin de ASCIɠ Darstellun eine Zahl.
S{mtlich i SPECTRU Syste erlaubte Notatione als z.B 10,
1. E ode BI 101 sin erlaubt Di Routin berechne daraus
di Zah un schieb si au de Kalkulatorstapel.


STK-FETCH
C F 2  cal STK-FETCH
Di Registe a b un d erhalte di  Byte vo F1 F wird
gleichzeiti vo Kalkulatorstape geholt Dies Routin wird
normalerweis daz benutzt Stringparamete vo Kalkulatorstapel
z holen Da de-Registe h{l dan di Adress un da bc-Re-
giste di L{ng de Strings (s PRINT-ST II)


STK-STORE
C B 2 cal STK-STORE
Di Registe a b un d werde i gleiche Weis au de Kal-
kulatorstape geschoben.



                Ǡ   Π      ]     N

SCANNING
2 5 5 l h (CHADD)
E pus hl
2 . . l hl Begin de Ausdrucks
2 5 5 l (CHADD) hl
C F 2 cal SCANNING
E po hl
2 5 5 l (CHADD) hl
CHAD zeig au de Begin eine Ausdrucks All numerischen
String- un logische Funktione un Operatione sin wi im
BASI erlaubt Variablenname d}rfe ebenfall i Ausdruc vor-
kommen Gegebenenfall kan di Routin Fehlermeldunge wie
Nonsen i basic Variabl no foun ode F withou definitionausgeben Bei Erstelle eigene Ausdr}ck sollt ma nicht
vergessen hinte jed numerisch Konstant ei 0 Byt un die
Flie~kommadarstellun z schreiben Da Ergebni de Auswertung
lieg nac de Routin au de Kalkulatorstapel Bi  der
Systemvariable FLAG is gesetzt wen da Ergebni ein Zahl
is un r}ckgesetzt wen e sic u Stringparamete handelt.

INT-EXP
2 5 5 l h (CHADD)
E pus hl
2 . . l hl Begin de Ausdrucks
2 5 5 l (CHADD) hl
2 . . l hl Grenzwert
C C 2 cal INT-EXP
E po hl
2 5 5C l (CHADD) hl
Di Routin werte de vo CHAD adressierte Ausdruc al Inte-
gerausdruc aus Fehlermeldun   erscheit wen die nicht
m|glic ist Da Ergebni de Ausdrucke steh i bc-Register.
Gleichzeiti teste di Routine o da Ergebni gr|~e al der
i hl-Registe }bergeben Grenzwer ist I diese Fal is das
carry-Fla gesetzt.


                     Ҡ          R

S{mtlich Rechenoperatione mi Flie~kommazahle werde im
SPECTRU Syste mi de Kalkulato durchgef}hrt De entspre-
chend Tei de Monitorprogramm is dementsprechen umfang-
reich E erstreck sic mi alle Unterroutine vo 2F9  bis
386 als }be meh al  K De Kalkulato kan z zwe unter-
schiedliche Zwecke benutz werden Di SCANNIN Routin wertet
Ausdr}ck vo link nac recht aus All vorkommende Werte
werde au de Kalkulatorstape geschoben Di Cod f}r di Re-
chenoperatione werde au de Maschinenstape gespeichert Wenn
di neu Operatio ein h|her Priorit{ ha al di vorige
(z.B.Punktrechnun vo Strichrechnung wir di vorig Operation
ausgef}hrt Hie wir als imme nu ein einzig Rechenopera-
tio i Kalkulato ausgef}hrt.
De allgemein We de Kalkulato z benutze is ei anderer:
Hinte de rs 2 Anweisung mi de de Kalkulato aufgerufen
wird folg ein List vo Datenbytes Jede diese Datenbytes
spezifizier eine Kalkulatorbefehl Ma kan hie vo einer
eigene Kalkulatorsprach reden zuma e soga Befehl zu be-
dingte un unbedingte Verzweigun un zu Schleifenaufbau
innerhal diese Befehlsbyte gibt E is als prinzipiell
m|glich kompliziert Flie~kommaprogramm f}r de SPECTRU͠ fast
ohn Zuhilfenam vo Z8 Befehle z schreiben wa auc z.B.
be de CIRCL Routin i RO gr|~tenteil verwirklich wurde.
De Abschlu~ de "Kalkulatorprogramms bilde imme da Byt 38,
da als eine ret-Anweisun entspricht Prinzipiel gib es
dre unterschiedlich Arte vo Operationen:
 1 Bin{r Operationen be dene di beide oberste Wert auf
de Kalkulatorstape (F un F2 verbunde werde un einen
neue oberste Wer ergeben(z.B Additio ode Multiplikation).
Dies Operatione habe di Befehlsbyte 0 bi 17.
 2 Singul{r Operationen be dene au de oberste Zah F ein
neue F berechne wir (z.B SI ode ABS) Di Befehlsbytes
1 bi 3 spezifiziere dies Operationen.
 3 Di Mehrzweckoperatione Reihenentwicklun (Byte B6 B und
BC) Konstantenspeicherun (Byte A bi A4) Abspeicher inME (C bi C5 un Hole au ME (E bi E5) di Bit  bi 4
diese Byte spezifiziere dies Operatione n{her.

Wa passier nu gena i Kalkulator?

Al erste werde di Zeige f}r de Kalkulatorstape gesetzt.
W{hren de ganze Zeit i de de Kalkulato benutz wird 
zeig da hl-Registe au da erst Byt vo F1 Be bin{re 
Operatione zeig da de-Registe au da erst Byt vo F2.
Di R}ckkehradresse di au de Maschinenstape liegt wir i 
da hl'-Registe gebracht Da hl'-Registe zeig als au da 
erst Datenbyte Be de weitere Abarbeitun de Kalkulatorpro-
gramm wir hl jeweil weitergez{hlt }bernimm als quas di 
Roll de Programmcounters Nac Beendigun de Kalkulatorpro-
gramm zeig hl au di neu R}ckkehradresse Da is auc de 
Grun daf}r da~ diese Registe be de Ausf}hrun eine US 
Funktio nich ver{nder werde darf.Dann wird da Befehlsbyt
gelesen Be Mehrzweckoperatione wir de Paramete  (di Bit 
 bi 4 vo eigentliche Befeh getrennt.
Au eine Tabell be 32D wir di Adress de zust{ndige Re-
chenroutin gelesen.
Al allgemein R}ckkehradress wir di Adress RE-ENTR٠ =336 
au de Maschinenstape gebrach un zu Rechenroutin verzweigt

Hie nu ein Aufstellun de Kalkulatorbefehle:

Befehl Name Operation
0   Springe wahWen F <>  ist wir verzweigt.
  Da n{chst Datenbyt gib di Sprungweite
  a (0 ein Byte nac vorn, F ein Byte 
                      zur}ck von diese Byt au gerechnet)
0   Austausc蠠F un F werde ausgetauscht
0   L|scheF wir gel|scht
0   SubtrahiereF  F  F1
0   MultipliziereF  F  F1
0   DividiereF  F  F1
0   Hoc蠠F  F  F1
0   OҠF  F O F1
0   Zah AN Zah젠F  F AN F1
0   Zahle <F2= wen F < F1 sons F2=0
0   Zahle >F2= wen F > F1 -"-
0    Zahle <F2= wen F < F1 -"-
0à   Zahle F2= wen F  F1 -"-
0Ġ   Zahle F2= wen F  F1 -"-
0Š   Zahle  F2= wen F  F1 sons F2=0
0Ơ   AdditioF  F  F1
1  Strin AN Zah F2 unver{nder,wen F1<>0 sons F2$=""
1  String < F2= wen F2 < F1$ sons F2=0
1  String > F2= wen F2 > F1$ -"-
1  String < F2= wen F2 < F1$ -"-
1  String  F2= wen F2  F1$ -"-
1  String  F2= wen F2  F1$ -"-
1  String  F2= wen F2  F1$ -"-
1  Strin Additio F2  F2  F1$
1  VAL F1  VAL F1$
1  US Strin砠 F  US F1$
1  INKEY  F1  INKEY  F1
1   Negiere F  -F1
1à  CODŠ F  COD F1$
1Ġ  VA̠ F  VA F1$
1Š  LEΠ F  LE F1$
1Ơ  SIΠ F  SI F1
2  COӠ F  CO F1
2  TAΠ F  TA F1
2  ASΠ F  AS F1
2  ACӠ F  AC F1
2  ATΠ F  AT F1
2  LΠ F  LΠ F1
2  EXР F  EX F1
2  INԠ F  IN F1
2  SQҠ F  SQ F1
2  SGΠ F  SG F1
2  ABӠ F  AB F1
2   PEEˠ F  PEE F1
2à  IΠ F  I F1
2Ġ  US Zah젠 F  US F1
2Š  STR F1  STR F1
2Ơ  CHR F1  CHR F1
3  NOԠ F  NO F1
3  Dupliziere F wir nochma au de Stape gebracht
3  Modul F  F MO F1 F  IN (F  F1)
3  Spring堠 Da n{chst Byt is di Sprungweite Es
  wir ohn Bedingun verzweigt.
3  Zah ablege Di i de n{chste Datenbyte enthaltene
  Zah wir au de Kalkulatorstape abgelegt
  Maxima  Byte k|nne folgen Bezeichnen
  wi dies Datenbyte mi B bi B so
  ergib sic folgend Verschl}sselun f}r
  di Zahl Da erst Byte IN (B1/4 hex)
  + ergib di Anzah de Mantissenbytes B1
  MO 4 he  5 he ergib da Exponenten-
  byte e se den die ergib 0 Dan ist
  da n{chst Byt B da Exponentenbyte Die
  restliche Byte ergebe di Mantisse feh-
  lend Byte werde mi Nulle aufgef}llt.
  Di Codierun eine numerische Konstanten
  nac diese Method is m}hselig E ist
  normalerweis auc schneller di Konstante
  z.B mi STK-STORŠ au de Stape젠 zu
  bringen.

3  djn Entsprich de djn i Maschinensprache Es
  wir abe nich da b-Registe sonder die
  Systemvariabl BREǠ heruntergez{hlt Das
  n{chst Byt is wiede di Sprungweite.
3  < F   wen F  0 sons F  0
3  > F   wen F  0 -"-
3  Re R}ckkeh in Maschinenprogramm
3  Red Argumen Reduzier Argumen f}r Winkelfunktionen
3  TRUNà Schneide Nachkommastelle vo F ab
3   Einzeloperatio Wir vo SCANNINǠ aufgerufen Das 
  Befehlsbyt mu~ i b-Registe stehen.
3à  E-TO-FР F =F  10^a Wir zu Umwandlun de Ex-
  ponentialformate ("1.23 E5" ben|tigt.
  De Zehnerexponen f}r F mu~ i a-Register
  }bergebe werden.
3Ġ   Byt Forma Wen F i Integerforma vorliegen wir es
  i da  Byt Flie~kommaforma umgewandelt.

.PA
                                N

B,B un B berechne di Tschebyschef Polynom f}r SIN ATN,
L un EXP.

C bi C speicher F i ME  bi ME  un E bi E hol F1
au ME  bi ME 5.

ME is ei Zwischenspeichergebie f}r de Kalkulator Di Sys-
temvariabl ME zeig au da Gebiet Normalerweis is dies
MEMBO (5C9 bi 5CAF) E k|nne abe auc di Steuervariablen
vo FOҠ  NEXԠ Schleife adressier werden Wen ma MEM
ver{ndert kan ma maxima 3 Zahle dor abspeichern In
MEMBO sin nu 3 Zeiche vorgesehe, als Plat f}r  Flie~kom-
mazahle (ME  bi ME 5).



                 [     Š        N

Di folgende Routine sin nich speziel f}r de angegebenen
Zwec geschriebe worden sonder habe sic meh ode weniger
zuf{lli i RO ergeben Trotzdem erf}lle si wichtige
Funktionen.


LDIR
C C 3 j LDIR
F}hr de entsprechende Z8 Befeh aus Kan benutz werden,
wen di Blockverschiebun da eigen Maschinenprogram }ber-
schreibe w}rde (bc,de,hl)


LDDR
C 6 1 j LDDR


CAL (HL)
C 2 1 cal CAL (HL)
Ergib de i Z8 Befehlssat nich vorhandene Befeh de Un-
terprogrammaufruf de durc h adressierte Speicherstelle.


L H (PC)
AƠ xo a
3Ġ de ᠠ  da zero-Fla dar nich gesetz sein
C C 1Ơ cal L H (PC)
Da hl-Registe erh{l de Wer de Programmcounter nac dem
R}cksprun (erste Byt nac de call-Anweisung).


EXCHANGE
2 . . l hl Zeige au Bereic 1
1 . . j de Zeige au Bereic 2
0 . l b Anzah de Bytes
C 3 3 cal EXCHANGE
Di Byte a (hl) un (de werde miteinande ausgetauscht Das
b-Registe gib di Anzah de Byte an h un d Register
werde hochgez{hl un sin nac de Routin vertauscht wenn
di Anzah de Byte gerad war.

HL=32*HL
C 9 0Š cal HL=32*H̠ C 9 0Š cal HL=16*HL
F}hre di angegebene Rechenoperatione aus (hl,bc=hl)

HL=HL+5
C B 1  cal HL=HL+ C B 1  cal HL=HL+4
F}hre di angegebene Rechenoperatione aus (hl,a)


HL=HL*DE
C A 3 cal HL=HL*DE
Wen ei ]berlau auftritt d.h hl*d is gr|~e al 65535 ist
nac de Routin da carry-Fla gesetzt (hl,a)


BC=HL-DE
C D 1 cal BC=HL-DE
Di hl un de-Registe sin nac de Routin ausgetauscht.
(bc,de,hl)

.pa
      G

1 Di Systemvariablen-Flags

E gib i ZX-SPECTRU insgesam vie verschieden Ein-Byt Sys-
temvariablen di al Systemflag dienen n{mlich:
  FLAG (5C3B)
  T FLA (5C3C)
  FLAGS (5C6A un 
  FLAG (5C71)
Jede Bi diese Systevariable tr{g ein ander Information
f}r da System Hie nu ein Aufstellun de einzelne Bits
zusamme mi ihre Bedeutung:

Fla砠 Bi  1

FLAGӠ  F}hrend Spac gedruck Kein f}hrende Spaces
  Drucke nich benutz  Drucke benutzt
  PRINT'e i K-Modu󠠠  PRINT'e i L-Modus
  K-Modu f}r Curso򠠠 L-Modu f}r Cursor
 4
  Kein neu Tast gedr}ck Neu Tast gedr}ckt
  Stringresulta des Ausdr  Numerische Resultat
  Syntaxchec렠  Ausf}hrun de Programms


T FLAǠ  Untere Bildschirmtei젠   Nich untere Bildschirteil
 1
 2
  Input-Bereic nich ausg.  Input-Bereic ausgeben
  Kei automatische Listin Auto-Listin 
  Untere Tei de Bild Untere Bildschir nach
 schirm nich l|schejede Tastendruc l|schen
 6
 7


FLAGS  De Bildschir is lee򠠠 Bildschir is nich leer
  De Druckpuffe is lee Puffe is nich leer
  Nich i Anf}hrungszeiche I Anf}hrungszeichen
  L-Modu f}r Curso򠠠C-Modu f}r Cursor
  Nich Channe "K benutz Channe "K benutzt
 5
 6
 7


FLAGؠ 0
  Di Variabl is ne Variabl existier schon
 2
 3
 4
  Editin Modu f}r EditoInpu Modu f}r Editor
          Stringresulta erwarte    Numerisch Resulta erwartet
  Nich INPUT...LINŠ INPUT...LINE

Nich benutzt Bit k|nne i eigene Programme al Flag ver-
wende werden Einig Bit bed}rfe noc weitere Erl{uterungen:
.pa
Bi  vo FLAG is bei Ausgeben eine BASI Zeil (auc i Edi-
tor gleic Null
    - a Anfan eine Zeile
    - wen ei ": ode ei "THEN nich innerhal vo Anf}hrungs-
      zeiche steht.
Bi  vo FLAGS is dan ebenfall r}ckgesetzt Bei Ausgeben
eine jede Zeichen de Zeil wir de Zustan diese Flag ab-
gefragt Wen K-Modu bei Ausgeben signalisier wird wir Bi 3
vo FLAG r}ckgesetzt E erschein de K-Curso un de n{chste
Tastendruc wir al Keywor interpretiert.


2 FEHLE I ROM

Irre is menschlic un s is e auc nich verwunderlich da~
sic i da Monitorprogram de SPECTRU͠ einig堠 Fehler
eingeschliche haben Beginne wi gleic mi de "dicksten
Hund":
1. -6553 Fehler
Gebe Si einma ein PRIN -6500 -536 Stat de erwarteten
Ergebnisse vo -6553 ergib die de Wer - E-38.
Grund Wi bereit ausgef}hrt benutz de SPECTRU͠ f}r kleine
Integerzahle ei eigene  Byt Format Di Zah -6553 is die
negativ Integerzahl di gerad nich meh i diese Format
pa~t Leide wir si be de Additio s behandelt al passe
si noc i diese Format Wen dahe di Zahl-6553 als
Ergebni eine Additio ode Subtraktio vo  kleine Integer-
zahle auftritt wir si als 0 F 0 0 0 au de Stape ge-
legt Dies Zah wir dan vo andere Funktione al - E-38
behandelt Konsequenterweis ha ma auc i de TRUNà Routine
daf}r gesorgt da~ wen di Zah einma zuf{lli i richtigen
 Byt Flie~kommaforma vorliege sollte si i da falsch In-
tegerforma umgewandel wird INԠ (-65536 ergib dahe den
Wert-1

2. SCREEN Fehler
Gebe Si be leere Bildschir ein PRIN "A  SCREEN (0,0)
Stat de richtige Ergebnisse "A erhalte Si eine String
au  Spaces.
Grund Da Ergebni de SCREEN Funktio wir zweima au den
Kalkulatorstape gelegt Ma kan de Fehle umgehen inde man
da Ergebni vo SCREEN eine Stringvariable zuweis un diese
dan weiterverwendet.

3. CLOSE#  Fehler
Gebe Si ein CLOSE# 4 De Rechne "h{ngt".
Grund Be de CLOSE# Routin gib e ei Unterprogramm das
eigentlic pr}fe sollte o de Channel de ma schlie~en
m|cht eine g}ltige Channe Cod ("K","S oder"p" hat Bei
de entsprechende Tabell (s INDEXER fehl da Endezeichen.
Schlie~e Si dahe kein Channels di Si vorhe nicht
ge|ffne haben.

4. CHR  Fehler
Gebe Si ein CLS:PRIN CHR 8 E erschein ei merkw}rdiges
Streifenmuste au de Bildschir ode da Syste st}rz ab.
Grund Be de CHR  Routin is di Abfrag falsch die
verhinder sollte da~ di Printpositio obe link au dem
Bildschir herauswandert.
.pa
5. STR Fehler
Gebe Si ein PRIN "2  STR 0.2 Stat de erwartete "20.2"
erh{l ma "0.2".
Grund Unterhal de STR 0. Ergebnisse ha ma ein Nul auf
de Kalkulatorstape vergessen Stringvergleich k|nne aus
demselbe Grun falsch Ergebniss liefer z.B "20  STR 0.2
ergib de Wer  (Wahr).

6. DE F Fehler
Gebe Si ein 1 DE F a() FNa()
 2 PRIN F a()
un Run Nac eine l{ngere Zei erhalte Si ein Fehlermel-
dung Da BASI Program is nac Zeil 1 mi merkw}rdige Zei-
che vollgeschrieben.
Grund Da Argumen eine DE F wir i de Programmzeil auf-
bewahr (nich etw i Variablengebiet) Be de obige "zirku-
l{ren Definitio ruf di SCANNIN Routin sic selbs auf um
di DE F f}r di au de rechte Seit stehend F a( z fin-
den Finde i Zeil 1 wiede di Definition ruf sic wieder
selbe au u.s.w.,bi de Maschinenstabe vo obe herunte alle
Bereich de BASI System }berschriebe hat.

7. LOOK-PRO Fehler
Gebe Si ein 1 REM DE F a()-2
 2 PRIN F a()
Si erhalte al Ergebnis 1.797376 E-16
Grund Be de LOOK-PRO Routine di da Programmgebie nach
de Auftrete vo DE F absucht fehl ein Abfrage o di ge-
funden DE F nich nac eine RE steht Da falsch Ergebnis
i diese Beispie komm daher da~ di Flie~kommadarstellung
de Zah i RE Befehle fehlt E is unm|glich DEƠ FΠ oder
DATA Statement de Zugrif de BASI System durc RE z ent-
ziehen!!!

8 WAIT-KE Fehler
Wi bereit obe erw{hnt f}hr da Dr}cke eine Taste di den
Cursormodu {ndert z.B be "scroll? ode "Star tap ... zu
merkw}rdige Resultaten.

9 SAV .. DAT aS( Fehler
E is m|glich mi diese Befeh auc einfach (d.h nich di-
mensionierte String abzuspeichern di abe wege des
unterschiedlic aufgebaute Variablennamen nich fehlerfrei
wiede in Variablengebie gelade werde k|nnen.
Diese Fehleraufstellung gilt nur f}r den Original-ROM. Eine Auf-
listun de offenba auc i ISO-RO͠ un  seine Derivate 
enthaltene "Schnitzer (z.B da zeitweis Auftrete eine 
Befehlsechos) ist bisher noch nicht erstellt worden.

                                N

1 Th complet SPECTRU RO disassembly
 Dr Ia Loga un Dr Fran o'Hare
 Melbourn Hous 1983

2 Z SPECTRU BASIC-Programmierung
 Steve Vickers
 Sinclai Reseac Ltd 1982

3 Maschinencode-Handbuc f}r de Z SPECTRUM
 Joche Merz  , profisoft 1983
