online: 1
Rekord: 57

Last update:
2005/04/20

Home
Übergeordnete Seite
Search:
Suche starten
In English, please!

CFX Hacking

Zeichen - und Befehlscodes des Casio Basic


Dieses Kapitel beschreibt alle Zeichen - und Befehlscodes, die der Casio Basic Interpreter intern verwendet, denn zwar werden im Programmeditor Befehle, Variablen, Operanden, Operatoren usw. (wie z.B. Locate als Zeichenkette mit 6 Zeichen = 6 Byte) in Form von Strings angezeigt, im Speicher aber immer durch 1 - oder 2B lange Werte codiert (so ist z.B. auch der Locate - Befehl in Wirklichkeit nur 2 - statt 6B lang). Das hat zum einen den Vorteil, dass sie vom Interpreter schneller und effizienter verarbeitet werden können, und zum anderen, dass Casio Basic Programme dadurch deutlich weniger Speicher benötigen.

Der Casio Basic Interpreter verwendet für seine Zeichen - und Befehlscodes insgesamt 3 Codetabellen (Zeichen-, Befehls- und Variablentabelle) zu je 256 Einträgen, wobei jeweils ein Eintrag durch genau 1 Byte ausgewählt werden kann und eine Tabelle (die Zeichentabelle) die Standardtabelle ist, während die anderen erst jeweils durch ein Präfixbyte ausgewählt werden müssen (deshalb sind Codes, die Einträge der Befehls- und der Variablentabelle angeben, effektiv 2 statt 1 Byte lang).



Ich habe die Tabellen mit 8 Spalten zu je 32 Zeilen aufgelistet, wobei Zeile und Spalte jeweils den Tabellenindex und somit den Code des Zeichens, Befehls oder der Variablen angeben (z.B. befindet sich xnor in Reihe 88 und Spalte 2, der Code für xnor im RAM lautet also 88+2 = 8A). Achtung: in den Tabellen sind alle Werte in hexadezimaler Form dargestellt!


Zeichencodetabelle des Casio Basic

Alle Einträge der Zeichencodetabelle (mit Ausnahme von ") können bei der Textausgabe in Strings verwendet werden. Darüber hinaus enthält die Zeichencodetabelle nicht nur Zeichen, die ausschließlich zur Textausgabe zu gebrauchen sind, sondern auch 1B Casio Basic Befehle, Operatoren und Variablen sowie Steuerbefehle für den Casio Basic Interpreter selbst (Präfixbytes und EOF - Signal).

Anmerkung: 1B Variable heißt nicht, dass Variablen im RAM nur 1B Speicher belegen; sie belegen immer entweder 0 - oder 10B. Aber in Casio Basic Programmen werden solche Variablen durch einen nur 1B langen Code referenziert, d.h., dieser 1B Code verweist letztendlich auf eine 10B lange Datenstruktur im Speicher.

+ 0 1 2 3 4 5 6 7
00 ' ' 'f' 'ρ' 'η' 'μ' 'm' 'k' 'M'
08 'G' 'T' 'P' 'E' -Disp- ←┘ E
10 f1 f2 f3 f4
18 f5 f6 A B C D E F
20 ' ' ! " '#' '$' '%' '&'
28 ( ) '*' + , - '.' '/'
30 0 1 2 3 4 5 6 7
38 8 9 : ; < = > ?
40 '@' A B C D E F G
48 H I J K L M N O
50 P Q R S T U V W
58 X Y Z [ '¥' ] '^' '_'
60 '‘' 'a' 'b' 'c' 'd' 'e' 'f' 'g'
68 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o'
70 'p' 'q' 'r' 's' 't' 'u' 'v' 'w'
78 'x' 'y' 'z' { '|' } ~ Variable
80 Pol( sin cos tan h ln -
88 P + xnor 2 '' ∫( Mod Σx²
90 ' ' sin-1 cos-1 tan-1 'd' log 3 Abs
98 C - xor -1 '°' Med ' ' Σx
A0 Rec( sinh cosh tanh 'o' e Int Not
A8 '^' × or ! 'r' minY minX 'n'
B0 ' ' sinh-1 cosh-1 tanh-1 'b' 10 Frac Neg
B8 x ÷ and 'g' maxY maxX Σy²
C0 ANS Ran# x quer y quer xδn xδn-1 yδn yδn-1
C8 'a' 'b' 'r' ^x ŷ r θ Σy
D0 π Cls ' ' Rnd Dec Hex Bin Oct
D8 ' ' Norm Deg Rad Gra Eng Intg Σxy
E0 Plot Line Lbl Fix Sci ' ' ' ' ' '
E8 Dsz Isz Factor VieWindow Goto Prog Graph Y= Graph ∫
F0 Graph Y> Graph Y< Graph Y>= Graph Y< Graph r= Graph (X,Y)=( ';' Befehl
F8 '@' ' ' '@' P( Q( t( Graph ∫ EOF

LEGENDE
reguläre Variablen
Bin/Oct/Dec/Hex Ziffern
mathematische Operatoren
mathematische Spezialoperatoren
logische Operatoren (Base)
Programmbefehle
Anzeigeeinstellung
Grafische Befehle
sonstige Zeichen
Interpreter Steuerbefehle


reguläre Variablen

    Reguläre Variablen A..Z, r und θ, die über die Tastatur direkt aufrufbar sind und die (außer r und θ) auch beispielsweise als Zählervariablen in Schleifen verwendet werden können

Binäre, oktalische, dezimale und hexadezimale Ziffern

    Ziffern 0..1 für binäre, 0..7 für oktalische, 0..9 für dezimale und 0..F für hexadezimale Darstellung von Werten (Achtung: A..F hexadezimal werden auf dem Display fett angegeben; NICHT zu verwechseln mit den Variablen A..F, die als hexadezimale Ziffern ungültig sind)

mathematische Operatoren

    Einfache mathematische Operatoren, die zumeist über die Tastatur direkt aufgerufen werden können und Bestandteil ALLER Termausdrücke sein dürfen (im RUN - Menü, beim Eingabeprompt ?, im Grafikmenü, ...)

mathematische Spezialoperatoren

    Mathematische Spezialoperatoren und - variablen für bestimmte Aufgaben, die z.T. auch nicht alle Termbestandteile sein dürfen. Hier gehören auch die Wahrheitsoperatoren And, Or und Not aus dem RUN - Modus dazu, die NICHT mit den logischen Operatoren and, or, xor, xnor und Not aus dem BASE - Modus zu verwechseln sind - die Wahrheitsoperatoren führen keine bitweise Operation durch, sondern betrachten jeweils nur das erste Bit (z.B. 8 Or 3 = 1, aber 8 or 3 = 11)

logische Operatoren (Base)

    Logische Operatoren and, or, xor, xnor und Not aus dem BASE - Modus, die im Gegensatz zu An, Or und Not tatsächliche logische Operatoren sind und jeweils eine bitweise Operation durchführen (z.B. 8 or 3 = 11 statt 1)

Programmbefehle

    1 Byte Programmsteuerbefehle sowie Textausgabe Befehl " und Enumerierungsbefehl ~, die in Programmen verwendet werden können

Anzeigeeinstellung

    Befehle und Variablen zur Einstellung des Anzeigemodus (z.B. ViewWindow, Ausgabeformate Fix oder Sci usw).

Grafische Befehle

    Ausgabebefehle im Grafikmodus und zum Zeichnen von Graphen (z.B. Cls, Line oder Graph Y=)

sonstige Zeichen

    Sonstige Zeichen und Sonderzeichen, die keine Funktion erfüllen und ausschließlich bei der Textausgabe verwendet werden können (z.B. 'a'..'z', '#' oder '$'); Achtung: die Zeichen ' ' (Leerzeichen) und '@' tauchen jeweils mehrfach in der Tabelle auf, vermutlich immer dann, wenn der entsprechende Tabelleneintrag (noch) nicht belegt ist. Es ist gut möglich, dass diese Einträge in zukünftigen Versionen des Betriebssystems mit neuen Zeichen belegt werden, es sollten daher wegen der Aufwärtskompatibilität stets die echten Zeichen ' ' an 20 und '@' an 40 verwendet werden

Interpreter Steuerbefehle

    Diese sind selbst keine Bestandteile von Casio Basic Programmen, sondern Steuerbefehle für den Casio Basic Interpreter:

  • 7F ist das Variablenpräfix, das angibt, dass das folgende Byte keinen Eintrag der Zeichentabelle, sondern einen Eintrag der Variablentabelle referenziert. 2B Variablen (Einträge der Variablentabelle), wie z.B. Sim Result usw., werden daher in Casio Basic Programmen immer durch 2 Bytes codiert: einem Byte 7F gefolgt vom Byte einem Byte n, das den Tabelleneintrag n aus der Variablentabelle auswählt
  • F7 ist das Befehlspräfix, das angibt, dass das folgende Byte einen Eintrag aus der Befehlstabelle selektiert. 2B Befehle (Einträge der Befehlstabelle), wie z.B. Locate, werden in Programmen deshalb immer durch 2 Bytes (einem Byte F7 gefolgt von einem Byte m, dass den Tabelleneintrag m aus der Befehlstabelle auswählt) codiert.
  • FF ist das EOF (= End Of File) - Signal, dass angibt, dass das Casio Basic Programm hier zu Ende ist

Casio Basic Befehlstabelle (2 Byte Codes mit Befehlscharakter)

Diese Tabelle, die über das Präfixbyte F7 angewählt werden muss, enthält 256 Einträge. Befehle aus dieser Tabelle werden daher im RAM durch 2 anstatt 1 Bytes codiert: F7,n mit n = Index 0..FF aus dieser Tabelle.

Zu beachten ist, dass Programme im RAM im Grow - Down - Format, also von oben nach unten gespeichert werden, und das erste Programmbyte sich im RAM daher an einer Adresse oberhalb des letzten befindet (siehe Casio CFX Memory Map). Im RAM - Image wird deshalb das Präfixbyte F7 an den Befehlscode angehängt, nicht vorangestellt (im Hexdump erscheint also z.B. der Locate - Befehl nicht als F7,10, sondern als 10,F7)

Tabelleneinträge, die nicht belegt sind, werden im Programmeditor durch '@' dargestellt und können zu dessen Fehlfunktion beim Scrollen führen - er liest auf einmal ganz andere Stellen des RAM ein, als die, wo eigentlich das Programm gespeichert ist. Insgesamt sind bislang nur 157 von 256 möglichen Befehlen belegt und 99 noch frei, d.h., es könnten in späteren Versionen des Casio CFX Betriebssystems durchaus noch neue Befehle definiert werden.

Einträge aus dieser Tabelle können übrigens auch in Zeichenketten zur Textausgabe verwendet werden (z.B. Locate 1,1,"Send(").

+ 0 1 2 3 4 5 6 7
00 'If ' 'Then ' 'Else ' 'IfEnd' 'For ' ' To ' 'Step ' 'Next'
08 'While ' 'WhileEnd' 'Do' 'LpWhile ' 'Return' 'Break' 'Stop' @
10 'Locate ' 'Send(' 'Receive(' @ @ @ @ @
18 'ClrText' 'ClrGraph' 'ClrList' @ @ @ @ @
20 'DrawGraph' @ 'DrawDyna' 'DrawStat' 'DrawFTG-Con' 'DrawFTG-Plt' 'DrawR-Con' 'DrawR-Plt'
28 'DrawRΣ-Con' 'DrawRΣ-Plt' 'DrawWeb' @ @ @ 'DispF-Tbl' 'DispR-Tbl'
30 @ @ @ @ @ @ @ @
38 @ @ @ @ @ @ @ @
40 '1-Variable ' '2-Variable ' 'LinearReg ' 'Med-MedLine ' 'QuadReg ' 'CubicReg ' 'QuartReg ' 'LogReg '
48 'ExpReg ' 'PowerReg ' 'S-Gph1' 'S-Gph2' 'S-Gph3' 'Square' 'Cross' 'Dot'
50 'Scatter' 'xyLine' 'Hist' 'Medbox' 'Meanbox' 'N-Dist' 'Broken' 'Linear'
58 'Med-Med' 'Quad' 'Cubic' 'Quart' 'Log' 'Exp' 'Power' @
60 'S-WindAuto' 'S-WindMan' 'Graph X=' 'Y=Type' 'r=Type' 'ParamType' @ 'X=cType'
68 @ @ 'Y>Type' 'Y<Type' 'Y>=Type' 'Y<=Type' @ @
70 'G-Connect' 'G-Plot' 'DualGraph' 'DualGtoT' 'DualT+G' 'DualOff' @ @
78 'BG-None' 'BG-Pict' 'GridOff' @ @ 'GridOn' @ @
80 'D Var ' 'NrmSpeed' 'FastSpeed' 'SlowSpeed' 'Stop&Go' 'DynaCon' 'DynaStop' @
88 'VarRange' @ @ @ @ @ @ @
90 'anType' 'an+1Type' 'an+2Type' 'StoPict' 'RclPict' 'StoGMEM' 'RclGMEM' 'StoV-Win'
98 'RclV-Win' @ @ @ @ @ @ @
A0 'Tangent ' 'Normal ' 'Inverse ' 'Vertical ' 'Horizontal ' 'Text ' 'Circle ' 'F-Line '
A8 'PlotOn ' 'PlotOff ' 'PlotChg ' 'PxlIOn ' 'PxlOff ' 'PxlChg ' @ 'PxlTest '
B0 'SortA(' 'SortD(' 'VarList1' 'VarList2' 'VarList3' 'VarList4' 'VarList5' 'VarList6'
B8 'File1' 'File2' 'File3' 'File4' 'File5' 'File6' @ @
C0 'FuncOn' 'SimulOn' 'AxesOn' 'CoordOn' 'LabelOn' 'DerivOn' 'LocusOn' 'ΣdispOn'
C8 'G SelOn ' 'T SelOn ' 'D SelOn ' 'R SelOn ' 'DrawOn' @ @ @
D0 'FuncOff' 'SimulOff' 'AxesOff' 'CoordOff' 'LabelOff' 'DerivOff' 'LocusOff' 'ΣdispOff'
D8 'G SelOff ' 'T SelOff ' 'D SelOff ' 'R SelOff ' 'DrawOff' @ @ @
E0 @ @ @ @ @ @ @ @
E8 @ @ @ @ @ @ @ @
F0 @ @ @ @ @ @ @ @
F8 @ @ @ @ @ @ @ @


Casio Basic Variablentabelle (2 Byte Codes mit Variablencharakter)

Achtung: Die Variablentabelle beinhaltet nicht nur Variablen im eigentlichen Sinne (wie z.B. RightXmin), sondern auch Funktionen, die ihrerseits Werte, Listen und Matrizen, also Variablen, zurückliefern. Vgl.: in der Befehlsliste gibt es nicht einen Befehl, der Werte zurückliefert (man könnte die Variablentabelle passenderweise also auch als Funktionstabelle bezeichnen)

Die Tabelle hat 256 Einträge, diese sind aber nicht direkt verfügbar sondern müssen über das Präfixbyte 7F ausgewählt werden. Variablen aus dieser Tabelle werden daher im RAM durch 2 anstatt 1 Byte codiert: 7F,m mit m = Index 0..FF aus dieser Tabelle.

Zu beachten ist, dass Programme im RAM im Grow - Down - Format, also von oben nach unten gespeichert werden, und das erste Programmbyte sich im RAM daher an einer Adresse oberhalb des letzten befindet (siehe Casio CFX Memory Map). Im RAM - Image wird deshalb das Präfixbyte 7F an den Variablencode angehängt, und nicht vorangestellt (z.B. erscheint die RightXmin - Variable in einem entsprechenden Hexdump nicht als 7F,10, sondern als 10,7F)

Tabelleneinträge, die nicht belegt sind, werden im Programmeditor durch '@' dargestellt und können zu dessen Fehlfunktion beim Scrollen führen - er liest auf einmal ganz andere Stellen des RAM ein, als die, wo eigentlich das Programm gespeichert ist. Insgesamt sind bislang nur 119 von 256 möglichen Variablen belegt und 137 noch frei, d.h., es könnten in späteren Versionen des Casio CFX Betriebssystems durchaus noch weitere Variablen definiert werden.

Variablen aus dieser Tabelle können übrigens auch in Zeichenketten zur Textausgabe verwendet werden (z.B. Locate 1,1,"RightXmax").

+ 0 1 2 3 4 5 6 7
00 'Xmin' 'Xmax' 'Xscl' @ 'Ymin' 'Ymax' 'Yscl' @
08 'Tθmin' 'Tθmax' 'Tθptch' 'Xfct' 'Yfct' 'D Start' 'D End' 'D Pitch'
10 'RightXmin' 'RightXmax' 'RightXscl' @ 'RightYmin' 'RightYmax' 'RightYscl' @
18 'RightTθmin' 'RightTθmax' 'RightTθptch' @ @ 'c' 'd' 'e'
20 'Max(' 'Det ' 'Arg ' 'Conjg ' 'ReP ' 'imP ' 'd/dx(' 'd²/dx²('
28 'Solve(' 'Σ(' 'FMin(' 'FMax(' 'Seq(' 'Min(' 'Mean(' 'Median('
30 '@IfEn' 'P/L-Orange' 'P/L-Blue' 'P/L-Green' 'Orange ' 'Blue ' 'Green ' 'OrangeG '
38 'BlueG ' 'GreenG ' @ @ @ @ @ @
40 'Mat ' 'Trn ' '*Row ' '*Row+ ' 'Row+ ' 'Swap ' 'Dim ' 'Fill('
48 'Identy ' 'Augment ' 'List→Mat(' 'Mat→List(' 'Sum ' 'Prod ' 'Percent ' 'Cuml '
50 'i' imaginär 'List ' @ @ @ @ @ @
58 @ @ @ @ @ @ @ @
60 'Sim Coef' 'Ply Coef' 'Sim Result' 'Ply Result' @ @ @ @
68 @ @ 'List1' 'List2' 'List3' 'List4' 'List5' 'List6'
70 @ @ @ @ @ @ 'Q1' 'Q2'
78 'x1' 'y1' 'x2' 'y2' 'x3' 'y3' @ @
80 @ @ @ @ @ @ @ @
88 @ @ @ @ @ @ @ Getkey
90 'F Result' 'F Start' 'F End' 'F pitch' 'R Result' 'R Start' 'R End' @
98 @ @ @ @ @ @ @ @
A0 'an' 'an+1' 'an+2' 'n' 'a0' 'a2' 'a1' 'bn'
A8 'bn+1' 'bn+2' 'b0' 'b1' 'b2' 'anStart' 'bnStart' @
B0 ' And ' RUN ' Or ' RUN @ 'Not ' RUN @ @ @ @
B8 @ @ @ @ @ @ @ @
C0 @ @ @ @ @ @ @ @
C8 @ @ @ @ @ @ @ @
D0 @ @ @ @ @ @ @ @
D8 @ @ @ @ @ @ @ @
E0 @ @ @ @ @ @ @ @
E8 @ @ @ @ @ @ @ @
F0 'Y' 'r' 'Xt' 'Yt' 'Y' @ @ @
F8 @ @ @ @ @ @ @ @

Copyright (C) 2004 by Marco Kaufmann