Die Basic-VektorenDie Abteilungen des Betriebssystems: Die Basic-Vektoren Außerdem wurden Garbage Collection: ... beim CPC 664 und 6128beim CPC 664 und 6128 die Integervektoren weggelassen, weil die entsprechenden Routinen in's Basic-ROM verlegt wurden. Hier ist dann jeweils die Routinenadresse angegeben. Bevor man diese Routinen aber aufrufen kann, muss man aber auch das Basic-ROM einblenden! Allgemein kann man sich hier eines ROM-Konfiguration: RestartsRestarts bedienen. Einige Fließkomma-Vektoren wurden ebenfalls nicht mehr in den Basic-Jumpblock aufgenommen. EditorBD3A / BD5B / BD5E: EDITEingabe und Ändern eines Datentypen: StringsStrings (Zeichenkette). Eingaben: HL zeigt auf den Puffer Ausgaben: CY=1 -> o.k. (Anwender schloss mit [ENTER] ab) CY=0 -> BREAK (Anwender schloss mit [ESC] ab) Unverändert: BC,DE,HL,IX,IY Mit Hilfe Die Basic-Vektoren: Der Editordes Editors kann ein beliebiger Text verändert oder neu eingegeben werden. Der Text wird Die Basic-Vektoren: Der Editordem Editor in einem Puffer bereitgestellt und kann bis zu 255 Zeichen lang sein. Abgeschlossen werden muss er mit einem Nullbyte. Der Puffer muss immer 256 Datentypen: Bytes Sobald Die Basic-Vektoren: Der Editorder Editor aufgerufen wurde, gibt dieser selbst den Text ab der aktuellen Cursorposition im aktuellen Textfenster aus. Dabei benutzt er &TEXT VDU: BB5D: TXT WR CHARBB5D TXT WR CHAR. Sonderzeichen werden deshalb nie befolgt, sondern immer als Grafikzeichen ausgedruckt. Ausgenommen davon sind die Codes 0, 13 und 16, die Die Basic-Vektoren: Der Editorder Editor selbst als Die Tastatur: Steuerzeichen des Key Managers und des ZeileneditorsSteuerzeichen interpretiert. Abgesehen von CHR$(0) können aber alle Zeichen mit Hilfe des Copycursors eingegeben werden. Die Basic-Vektoren: Der EditorDer Editor beschränkt sich auf das aktuelle Textfenster. Ist dies zu klein, den ganzen Text zu fassen, scrollt er auch selbstätig darin. Leider kann der Cpoycursor auch nur innerhalb dieses Textfensters bewegt werden. Die Basic-Vektoren: Der EditorDer Editor des Schneider CPC 664 und 6128 wurde um eine nützliche Die Fließkomma-Routinen: FunktionenFunktion erweitert: Garbage Collection: ... beim CPC 464Beim CPC 464 fällt es meist unangenehm auf, dass bei einem 'Editor: BD3A / BD5B / BD5E: EDITEDIT zeile' Die Text-VDU: Der Cursorder Cursor nicht auf dem ersten Zeichen der Basiczeile, wie von 'AUTO' her gewohnt, sondern auf dem ersten Zeichen der Zeilennummer steht. Bei CPC 664 bzw. 6128 testet Die Basic-Vektoren: Der Editorder Editor jetzt erst, ob der zu bearbeitende Text mit einer Zahl anfängt. Diese interpretiert er dann als Zeilennummer und stellt dann Die Text-VDU: Der Cursorden Cursor bereits hinter die Zahl. Außerdem enthält Die Basic-Vektoren: Der Editorder Editor Garbage Collection: ... beim CPC 664 und 6128beim CPC 464 und 664 einen kleinen Der Linien-Algorithmus: Fehler 3Fehler. Normalerweise kann der Anwender Die Basic-Vektoren: Der Editorden Editor mit [CTRL] plus [TAB] zwischen Einfüge- und Überschreib-Modus hin- und herschalten. Ist das bearbeitete Datentypen: StringsString aber gerade leer, so funktioniert es Garbage Collection: ... beim CPC 664 und 6128beim CPC 464 und 664 nicht korrekt: Irgendwie ist Die Basic-Vektoren: Der Editorder Editor der Meinung, man habe [ENTER] (zu Insert zurückschalten) bzw. [ESC] (Insert abschalten) gedrückt und terminiert entsprechend. Dieser Der Linien-Algorithmus: Fehler 3Fehler wurde von Amstrad erst Garbage Collection: ... beim CPC 464beim CPC 6128 korrigiert. Die Fließkomma-RoutinenDas Fließkomma-Pack im unteren Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM stellt alle gebräuchlichen Rechenfunktionen und -Die Fließkomma-Routinen: OperationenOperationen zur Verfügung. Dabei hielten sich seine Autoren (bis auf wenige Ausnahmen) sklavisch an folgende Ein- und Ausgabe-Schnittstelle: Bevorzugter Eingabeparameter ist FLO(HL), bei den Die Fließkomma-Routinen: OperationenOperationen kommt noch FLO(DE) als zweiter Basic und Maschinencode: ParameterParameter dazu. Die Ausgabe erfolgt immer in FLO(HL), wenn das ausreicht aber auch manchmal direkt im A-Register. Der Wert des HL-Registers ändert sich nicht, d.h. die Ausgabe des Ergebnisses erfolgt in dem Fließkomma-Speicher, der das bzw. eins der beiden Argumente enthielt. Rechenroutinen die versagen können, liefern im Carry-Flag den Fehlerstatus: Wie fast überall im Betriebssystem bedeutet CY=1, dass kein Der Linien-Algorithmus: Fehler 3Fehler vorliegt und CY=0, dass ein Der Linien-Algorithmus: Fehler 3Fehler auftrat. In letzterem Fall können die folgenden Die Z80: Wirkung der Z80-Befehle auf die FlagsFlags noch zusätzliche Informationen enthalten: Z=1 -> Rechnen im Binärsystem: DivisionDivision durch Real: NullNull S=1 -> ungültiger Basic und Maschinencode: ParameterParameter P=1 -> Überlauf Die Fließkommaspeicher dürfen nicht durch ein Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM verdeckt sein. Normalerweise dürfen also unterhalb von &4000 keine Speicher liegen. Ausnahme davon sind Konstanten, die im unteren Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM (!) liegen, und auf die die FLO-Routinen zugreifen können. ZufallsgeneratorDiese vier Routinen stellen einen komfortablen Zufallszahlengenerator dar. Als GrundlagenGrundlage dient eine 'seed' genannte, 4-Datentypen: Bytes Da es einem digitalen Automaten vom Prinzip her sehr schwer fällt, wirklich zufällige Zahlen bzw. Zahlenfolgen zu erzeugen, benutzt man auch im Schneider CPC dafür eine recht gebräuchliche Rechenvorschrift. Das hat zur Folge, dass man nach einem RANDOMIZE mit einem konstanten Initialisierungswert mit RND immer die selben Zahlenfolgen erhält. Dieser Effekt ist letztendlich aber auch sehr nützlich, wenn man in einem 'Zufallgesteuerten' Programm einem Der Linien-Algorithmus: Fehler 3Fehler auf die Spur kommen will. BD97 / BDB8 / BDBB: FLO RANDOMIZE 0&89656C07 -> LW(seed) Eingaben: keine Ausgaben: keine Unverändert: AF,BC,DE,IX,IY BD9A / BDBB / BDBE: FLO RANDOMIZEFLO(HL) XOR &89656C07 -> LW(seed) Eingaben: FLO(HL) = Fließkommazahl Ausgaben: keine Unverändert: C,IY,FLO(HL) BD9D / BD7C / BD7F: FLO RNDRND -> FLO(HL) Eingaben: FLO(HL) = Fließkommaspeicher für die Zufallszahl Ausgaben: FLO(HL) = nächste Zufallszahl Unverändert: HL,IY BDA0 / BD88 / BD8B: FLO LAST RNDletzten RND-Wert -> FLO(HL) Eingaben: FLO(HL) = Fließkommaspeicher für die Zufallszahl Ausgaben: FLO(HL) = alte Zufallszahl Unverändert: HL,IY OperationenIm folgenden die Die Fließkomma-Routinen: OperationenOperationen, die vom Fließkomma-Pack bereitgestellt werden. Garbage Collection: ... beim CPC 664 und 6128Beim CPC 664 und 6128 wurde der Vektor für Operationen: BD5E / BD7F / BD82: FLO SUB* Operationen: BD7C / BD9D / BDA0: FLO POTFLO POT enthält zwei kleine Der Linien-Algorithmus: Fehler 3Fehler: 0 hoch 0 wird komentarlos zu 1 evaluiert. Das ist falsch, denn 0^0 ist nicht definiert: {Die verwendeten Abkürzungen bedeuten: x:x^0=1 | Die verwendeten Abkürzungen bedeuten: x:x<>0} - Die verwendeten Abkürzungen bedeuten: x:x hoch 0 ist 1 für alle Die verwendeten Abkürzungen bedeuten: x:X ungleich 0 und: {0^y=0 | y<>0} - 0 hoch y ist 0 für alle Y außer 0. Bei einem Überlauf wird normalerweise als 'Ergebnis' immer die größte, darstellbare Zahl vorzeichenrichtig ausgegeben. Bei einer negativen Basis und einem ganzzahligen, geraden Exponenten müsste deshalb +1.70141LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION PRINT -10 ^ +40 -> Overflow -1.70141LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
Das resultiert wahrscheinlich aus einem anderen Service, den diese Routine bereitstellt: Wird zu einer negativen Basis ein nicht ganzzahliger Exponent angegeben, quittiert Operationen: BD7C / BD9D / BDA0: FLO POTFLO POT mit M (Signum: S=1), also ungültiger Basic und Maschinencode: ParameterParameter. Die Routine bricht die Berechnung aber nicht kommentarlos ab, sondern berechnet einfach den Funktionswert zur entsprechenden, positiven Basis und gibt dem Funktionswert ein negatives Vorzeichen. Einleitung: BASIC PRINT -10 ^ 3.3 -> -1995.26231 BD58 / BD79 / BD7C: FLO ADDFLO(HL) + FLO(DE) -> FLO(HL) Eingaben: FLO(HL) und FLO(DE) Ausgaben: FLO(HL) CY=0 -> Überlauf Unverändert: HL,FLO(DE) BD5E / BD7F / BD82: FLO SUB*FLO(DE) - FLO(HL) -> FLO(HL) Eingaben: FLO(HL) und FLO(DE) Ausgaben: FLO(HL) CY=0 -> Überlauf Unverändert: HL,FLO(DE) BD5B / 349A / 349A: FLO SUBFLO(HL) - FLO(DE) -> FLO(HL) Eingaben: FLO(HL) und FLO(DE) Ausgaben: FLO(HL) CY=0 -> Überlauf Unverändert: HL,FLO(DE) BD61 / BD82 / BD85: FLO MULTFLO(HL) * FLO(DE) -> FLO(HL) Eingaben: FLO(HL) und FLO(DE) Ausgaben: FLO(HL) CY=0 -> Überlauf Unverändert: HL,FLO(DE) BD64 / BD85 / BD88: FLO DIVFLO(HL) / FLO(DE) -> FLO(HL) Eingaben: FLO(HL) und FLO(DE) Ausgaben: FLO(HL) CY=0 -> Überlauf. Wenn auch Z=1 dann Rechnen im Binärsystem: DivisionDivision durch Real: NullNull Unverändert: HL,FLO(DE) BD7C / BD9D / BDA0: FLO POTFLO(HL) ^ FLO(DE) -> FLO(HL) Eingaben: FLO(HL) und FLO(DE) Ausgaben: FLO(HL) CY=1 -> Berechnung o.k. sonst: S=1 -> ungültiger Basic und Maschinencode: ParameterParameter: -Die verwendeten Abkürzungen bedeuten: x:X^(z/n) P=1 -> Überlauf Unverändert: HL,FLO(DE) BD6A / BD8B / BD8E: FLO VGLSGN (FLO(HL)-FLO(DE)) -> Operationen: BD5B / 349A / 349A: FLO SUBA Eingaben: FLO(DE) und FLO(HL) Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA=-1/0/1 für FLO(HL)-FLO(DE) = negativ/Real: Nullnull/positiv Z=1 -> Real: NullNull CY=1 -> Negativ Unverändert: BC,DE,HL,FLO(HL),FLO(DE) FunktionenAlle Die Fließkomma-Routinen: FunktionenFunktionen (außer Funktionen: BD6D / BD8E / BD91: FLO VZWFLO VZW) werden über Polynomentwicklungen berechnet. Das ist leider nicht besonders schnell, lässt sich meist aber nicht sinnvoll umgehen. Es ist jedoch denkbar, für die ein oder andere Routine eine eigene zu installieren. Für die Wurzel-Berechnung gibt es beispielsweise viel schnellere Näherungsverfahren. Aber auch durch geschickte Abschätzung, wieviele Summanden (Polynome) für einen speziellen Eingabeparameter wirklich notwendig sind, lassen sich die meisten Routinen noch beschleunigen. Für Grafik-Anwendungen, bei denen in aller Regel die achte Stelle hinter dem Komma nicht mehr interessiert, lässt sich die Anzahl der benötigten Polynome oft erheblich schrumpfen. Es ist also auch möglich, die Routinen auf Kosten der Rechengenauigkeit zu beschleunigen. Die Routinen Funktionen: BD7F / BDA0 / BDA3: FLO LOG NATFLO LOG NAT und Funktionen: BD82 / BDA3 / BDA6: FLO LOG DECFLO LOG DEC melden für das Argument 0 korrekt 'Overflow' und liefern den Funktionswert 0. Möglicherweise wäre hier aber ein anderer Wert wünschenswert gewesen: -88.73 oder kleiner (bei Funktionen: BD7F / BDA0 / BDA3: FLO LOG NATFLO LOG NAT). Bedingt durch die Tatsache, dass der Schneider CPC mit seinem Fließkomma-Format keine Adressierungsarten der Z80: Absolutabsolut beliebig kleinen Zahlen darstellen kann, sondern bereits etwa bei 0.3E-38 auf 0 runden muss, ergeben sich keine Funktionswerte, die kleiner als -88.73 sind. Das Argument 0 könnte also auch eine zwangsweise nach 0 gerundete, kleine Zahl sein, deren Logarithmus normalerweise noch leicht darstellbar wäre. Der Wunsch nach der 'kleinsten, sinnvollen Zahl' entspringt also der selben Logik, die nach einer Rechnen im Binärsystem: DivisionDivision durch Real: NullNull oder einem Überlauf die Möglichkeit bietet, mit der größtmöglichen Zahl weiterzurechnen. BD6D / BD8E / BD91: FLO VZW-1 * FLO(HL) -> FLO(HL) Eingaben: FLO(HL) Ausgaben: FLO(HL) Unverändert: BC,DE,HL,IY BD79 / BD9A / BD9D: FLO SQRSQR(FLO(HL)) -> FLO(HL) Eingaben: FLO(HL) Ausgaben: FLO(HL) CY=0 -> negative Zahl Unverändert: HL BD7F / BDA0 / BDA3: FLO LOG NATLOG(FLO(HL)) -> FLO(HL) Eingaben: FLO(HL) Ausgaben: FLO(HL) CY=0 -> Argument <= 0 Unverändert: HL BD82 / BDA3 / BDA6: FLO LOG DECLOG10(FLO(HL)) -> FLO(HL) Eingaben: FLO(HL) Ausgaben: FLO(HL) CY=0 -> Argument <= 0 Unverändert: HL BD85 / BDA6 / BDA9: FLO POT ELOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION Eingaben: FLO(HL) Ausgaben: FLO(HL) CY=0 -> Überlauf Unverändert: HL BD88 / BDA9 / BDAC: FLO SINSIN(FLO(HL)) -> FLO(HL) Eingaben: FLO(HL) Ausgaben: FLO(HL) CY=0 -> Argument zu groß Unverändert: HL BD8B / BDAC / BDAF: FLO COSCOS(FLO(HL)) -> FLO(HL) Eingaben: FLO(HL) Ausgaben: FLO(HL) CY=0 -> Argument zu groß Unverändert: HL BD8E / BDAF / BDB2: FLO TANTAN(FLO(HL)) -> FLO(HL) Eingaben: FLO(HL) Ausgaben: FLO(HL) CY=1 -> o.k. sonst: Z=1 -> Rechnen im Binärsystem: DivisionDivision durch Real: NullNull S=1 -> Argument zu groß Unverändert: HL BD91 / BDB2 / BDB5: FLO ARC TANARCTAN(FLO(HL))-> FLO(HL) Eingaben: FLO(HL) Ausgaben: FLO(HL) Unverändert: HL BD55 / BD76 / BD79: FLO 10^AFLO(HL) * 10^Operationen: BD5B / 349A / 349A: FLO SUBA -> FLO(HL) Eingaben: FLO(HL) und Operationen: BD5B / 349A / 349A: FLO SUBA
Ausgaben: FLO(HL)
CY=0 -> Überlauf
Unverändert: HL
BD67 / ---- / ----: FLO 2^ANur CPC 464. FLO(HL) * 2^Operationen: BD5B / 349A / 349A: FLO SUBA -> FLO(HL) Eingaben: FLO(HL) und Operationen: BD5B / 349A / 349A: FLO SUBA
Ausgaben: FLO(HL)
CY=0 -> Überlauf
Unverändert: HL
BD70 / BD91 / BD94: FLO SGNSGN(FLO(HL)) -> Operationen: BD5B / 349A / 349A: FLO SUBA Eingaben: FLO(HL) Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA = -1/0/1 für FLO(HL) neg/Real: Nullnull/pos Z=1 -> Real: NullNull C=1 -> Negativ Unverändert: BC,DE,HL,IY,FLO(HL) SonstigesDie Kopier-Routine für Fließkommazahlen ist mit Vorsicht zu genießen: Wie alle anderen FLO-Routinen auch, arbeitet sie nicht zwangsweise im RAM. Für den Vektor wurde von Einleitung: BASIC BD3D / BD5E / BD61: FLO MOVEFLO(DE) -> FLO(HL) und Operationen: BD5B / 349A / 349A: FLO SUBA:=exp.Datentypen: Bytes Eingaben: FLO(DE) und (HL) = Fließkommaspeicher
Ausgaben: FLO(HL)
Operationen: BD5B / 349A / 349A: FLO SUBA=Exponentenbyte von FLO(DE) (Charakteristik)
CY=1
Unverändert: BC,DE,HL,IX,IY,FLO(DE)
BD76 / BD97 / BD9A: FLO PIPI -> FLO(HL) Eingaben: (HL) = Fließkommaspeicher Ausgaben: FLO(HL) CY=1 Unverändert: BC,HL,IX,IY BD73 / BD94 / BD97: FLO DEG/RADOperationen: BD5B / 349A / 349A: FLO SUBA=0 -> RAD A>0 -> DEG Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA=0 -> Radiant
A>0 -> Degree
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX,IY
Die Integer-RoutinenKleine ganze Zahlen im Bereich -2^15 bis +2^15-1 (-32768 bis +32767) werden als 'Integer' bezeichnet. Zur Darstellung negativer Zahlen wird die Komplementär-Darstellung benutzt, da dieses Amsdos: FormateFormat auch von der Die ICs im Überblick: Die CPU Z80 Die Parameter: Parameter-ÜbergabeParameter-Übergabe ist ähnlich streng strukturiert wie bei den Die Basic-Vektoren: Fließkomma-RoutinenFließkomma-Routinen, nur dass HL und DE hier nicht als Zeiger auf Fließkomma-Variablen dienen, sondern diese Zahlen direkt enthalten. Operationen mit VorzeichenBDAC / DD4F / DD4A: INT ADD VZHL + DE -> HL Eingaben: HL und DE Ausgaben: HL = HL+DE CY=0 -> Überlauf Unverändert: BC,DE,IX,IY BDAF / DD58 / DD53: INT SUB VZHL - DE -> HL Eingaben: HL und DE Ausgaben: HL = HL-DE CY=0 -> Überlauf Unverändert: BC,DE,IX,IY BDB2 / DD57 / DD52: INT SUB* VZDE - HL -> HL Eingaben: HL und DE Ausgaben: HL = DE-HL DE = alter Wert von HL CY=0 -> Überlauf Unverändert: BC,IX,IY BDB5 / DD60 / DD5B: INT MULT VZHL * DE -> HL Eingaben: HL und DE Ausgaben: HL = HL*DE CY=0 -> Überlauf Unverändert: DE,IX,IY BDB8 / DDA1 / DD9C: INT DIV VZHL / DE -> HL rest DE Eingaben: HL und DE
Ausgaben: HL = HL\DE
DE = ABS(HL Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
BDBB / DDA8 / DDA3: INT MOD VZHL / DE -> DE rest HL Eingaben: HL und DE
Ausgaben: HL = HL Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
BDC4 / DE07 / DE02: INT VGLSGN (HL-DE) -> Operationen: BD5B / 349A / 349A: FLO SUBA Eingaben: HL und DE Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA = -1/0/1 wenn (HL-DE) neg/Real: Nullnull/pos Z = 1 -> HL=DE CY= 1 -> HL<DE Unverändert: BC,DE,HL,IX,IY Funktionen mit VorzeichenBDC7 / DDF2 / DDED: INT VZW-1 * HL -> HL Eingaben: HL Ausgaben: HL = -HL CY=0 -> Überlauf (-> HL=-2^15) Unverändert: BC,DE,IX,IY BDCA / DDFE / DDF9: INT SGNSGN (HL) -> Operationen: BD5B / 349A / 349A: FLO SUBA Eingaben: HL Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA = -1/0/1 wenn HL neg/Real: Nullnull/pos Z = 1 -> HL=0 CY= 1 -> HL<0 Unverändert: BC,DE,IX,IY Operationen ohne VorzeichenDer Darstellungsbereich dieser Routinen geht von 0 bis 2^16-1 (65535). Vorsicht bei der Rechnen im Binärsystem: MultiplikationMultiplikation: Hier funktioniert das Carry-Flag mit umgekehrter Logik! BDBE / DD77 / DD72: INT MULTHL * DE -> HL Eingaben: HL und DE Ausgaben: HL = HL*DE CY=1 -> Überlauf Unverändert: BC,DE,IX,IY BDC1 / DDB0 / DDAB: INT DIVHL / DE -> HL rest DE Eingaben: HL und DE Ausgaben: HL = HL\DE DE = HL Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2: KonvertierungInsgesamt acht verschiedene Möglichkeiten werden bereitgehalten, um zwischen Integer und Fließkomma umzurechnen. Dabei wird für Integerzahlen nicht die übliche Komplementär-Darstellung unterstuetzt, sondern nur eine getrennte Darstellung von Betrag und Vorzeichen. Für letzteres wird dabei immer Hardware-Basteleien: Das 8. Bitdas 7. Bit eines Registers (Operationen: BD5B / 349A / 349A: FLO SUBA oder LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL BD46 / BD67 / BD6A: ROUND FLO TO HLAROUND(FLO(HL)) -> HL, Operationen: BD5B / 349A / 349A: FLO SUBA=VZ Eingaben: FLO(HL) Ausgaben: HL = Absolutwert Datenbreite: Bits BD40 / BD61 / BD64: KONV HLA TO FLOHL, Operationen: BD5B / 349A / 349A: FLO SUBA=VZ -> FLO(DE) Eingaben: HL = Absolutwert Datenbreite: Bits BD43 / BD64 / BD67: KONV LW TO FLOLW(HL), Operationen: BD5B / 349A / 349A: FLO SUBA=VZ -> FLO(HL) Eingaben: LW(HL) und Datenbreite: Bits BD49 / BD6A / BD6D: ROUND FLO TO LWROUND(FLO(HL)) -> LW(HL), LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Eingaben: FLO(HL) Ausgaben: LW(HL) = Absolutwert Datenbreite: Bits BD4C / BD6D / BD70: FIX FLO TO LWFIX(FLO(HL)) -> LW(HL), LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Eingaben: FLO(HL) Ausgaben: LW(HL) = Absolutwert Datenbreite: Bits BD4F / BD70 / BD73: INT FLO TO LWAlle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - Interrupt Eingaben: FLO(HL) Ausgaben: LW(HL) = Absolutwert Datenbreite: Bits BD94 / BDB5 / BDB8: KONV LW+C TO FLOLW(HL)*256+C -> FLO(HL) Eingaben: LW(HL) und C Ausgaben: FLO(HL) = LW(HL)*256 + C Unverändert: DE,HL,IY BDA9 / DD3C / DD37: KONV HLB TO INTHL, LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Eingaben: HL = Absolutwert Datenbreite: Bits DezimalwandlungDie folgenden Routinen werden benötigt, wenn eine Fließkomma- oder Integerzahl ausgedruckt werden soll. BD52 / BD73 / BD76: FLO PREPAREFLO(HL) -> Basic und Maschinencode: ParameterParameter Eingaben: FLO(HL) Ausgaben: LW(HL) = normierte Mantisse LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL BDA3 / DD2F / DD2A: INT PREPARE VZHL (Integer mit VZ) -> Basic und Maschinencode: ParameterParameter Eingaben: HL = Zahl in Komplementär-Darstellung Ausgaben: HL = Absolutwert Datenbreite: Bits BDA6 / DD35 / DD30: INT PREPAREHL (Integer ohne VZ) -> Basic und Maschinencode: ParameterParameter Eingaben: HL = positive Zahl (0 ... 2^16-1) Ausgaben: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL |