Indeks English version English version

Casio FX-700P - formaty danych

Kody i wzory znaków alfanumerycznych

zestaw znaków alfanumerycznych

Spacja ma kod $00.


Kody słów kluczowych języka BASIC

    $80 SIN     $90 LEN(    $A0 FOR     $B0 VAC     $C0 DEFM
    $81 COS     $91 VAL(    $A1 NEXT    $B1 SET     $C1 SAVE
    $82 TAN     $92 MID(    $A2 GOTO    $B2 PUT     $C2 LOAD
    $83 ASN     $93 KEY     $A3 GOSUB   $B3 GET     $C3 VER
    $84 ACS     $94 CSR     $A4 RETURN  $B4         $C4 LIST
    $85 ATN     $95 TO      $A5 IF      $B5         $C5 RUN
    $86 LOG     $96 STEP    $A6 PRINT   $B6         $C6 CLEAR
    $87 LN      $97 THEN    $A7 INPUT   $B7         $C7
    $88 EXP     $98         $A8 MODE    $B8         $C8
    $89 SQR     $99         $A9 STOP    $B9         $C9
    $8A INT     $9A         $AA END     $BA         $CA
    $8B FRAC    $9B         $AB         $BB         $CB
    $8C ABS     $9C         $AC         $BC         $CC
    $8D SGN     $9D         $AD         $BD         $CD
    $8E RND(    $9E         $AE         $BE         $CE
    $8F RAN#    $9F         $AF         $BF         $CF

Wewnętrzny format danych

Każda zmienna (z wyjątkiem specjalnej zmiennej łańcuchowej $) zajmuje 8 bajtów (czyli 16 4-bitowych słów) w pamięci RAM. Słowo najmniej znaczące umieszczane jest pod niższym adresem.

Przypadek szczególny

Wartość 00 00 00 00 00 00 00 00 reprezentuje zarówno zmnienną numeryczną 0 jak i pusty łańcuch. Instrukcja VAC inicjuje wszystkie zmienne tą wartością. Obie poniższe instrukcje wpisują tą wartość do zmiennej A lub A$.

    A$ = 0
    A$ = ""

Zmienne łańcuchowe

Zmienna łańcuchowa może przechowywać do 7 znaków.
Początkowe 7 bajtów (czyli 14 4-bitowych słów) przechowuje kody znaków. Wolne miejsce wypełnione jest wartością 00.
Piętnaste 4-bitowe słowo jest nie używane i zawiera 0.
Ostatnie, szesnaste słowo zawiera długość łańcucha (wartość różna od zera). W ten sposób można odróżnić zmienną łańcuchową od numerycznej, gdzie ta wartość wynosi 0.
Przykłady:

    A$ = "ABMN"         02 12 C2 D2 00 00 00 04
    A$ = "1234567"      11 21 31 41 51 61 71 07

Zmienne numeryczne

Zmienne numeryczne są przechowywane jako zmiennoprzecinkowe, spakowane liczby dziesiętne.
Pierwsze dwa 4-bitowe słowa zawierają dwie ostatnie cyfry wykładnika, najpierw cyfra mniej znacząca. Wykładnik zapisany jest w kodzie z przesunięciem, tzn. do wartości wykładnika dodane jest przesunięcie 100, dzięki czemu wynik jest zawsze liczbą dodatnią.
Trzecie 4-bitowe słowo zawiera pierwszą cyfrę wykładnika oraz znak mantysy:

    wartość = pierwsza_cyfra_wykładnika + 5 * znak_mantysy

Lista możliwych kombinacji wartości:

    0 - mantysa dodatnia, wykładnik ujemny
    1 - mantysa dodatnia, wykładnik dodatni
    5 - mantysa ujemna, wykładnik ujemny
    6 - mantysa ujemna, wykładnik dodatni

Następnych dwanaście 4-bitowych słów zawiera mantysę w zakresie 1.00000000000 do 9.99999999999, najpierw cyfra najmniej znacząca.
Ostatnie, szesnaste 4-bitowe słowo zawiera 0 jako znacznik zmiennej numerycznej (w odróżnieniu od zmiennej łańcuchowej, gdzie ta wartość jest różna od zera).
Przykłady:

    A = 1             00 10 00 00 00 00 00 10   (1.00000000000E00)
    A = -1            00 60 00 00 00 00 00 10   (-1.00000000000E00)
    A = 100           20 10 00 00 00 00 00 10   (1.00000000000E02)
    A = -100          20 60 00 00 00 00 00 10   (-1.00000000000E02)
    A = PI            00 10 63 56 29 51 41 30   (3.14159265360E00)
    A = -PI           00 60 63 56 29 51 41 30   (-3.14159265360E00)
    A = 0.01          89 00 00 00 00 00 00 10   (1.00000000000E-02)
    A = -0.01         89 50 00 00 00 00 00 10   (-1.00000000000E-02)
    A = 1/3           99 03 33 33 33 33 33 30   (3.33333333333E-01)
    A = -1/3          99 53 33 33 33 33 33 30   (-3.33333333333E-01)

Specjalna zmienna łańcuchowa $

Zmienna łańcuchowa $ może przechować do 30 znaków. Łańcuch umieszczony w pamięci jest poprzedzony długością łańcucha i zakończony znacznikiem $FF.
Przykład:

    $ = "ABCDEFG"
    70 02 12 22 32 42 52 62 FF

Struktura programu w języku BASIC

Wiersz programu BASIC rozpoczyna się numerem wiersza przechowywanym w 2 bajtach (czterech 4-bitowych słowach), kończy się znacznikiem $FF. Słowa kluczowe języka BASIC są przechowywane za pomocą jednobajtowych kodów, wartości numeryczne jako ciąg znaków, dwukropki rozdzielające kilka poleceń języka BASIC w jednym wierszu jako $FE.
Przykład:

    1234 FOR I=1 TO 49 STEP 1: NEXT I
    43 21 0A 82 C0 11 59 41 91 69 11 EF 1A 82 FF

Stos instrukcji FOR

Za każdym razem gdy wykonywana jest instrukcja FOR, na stosie FOR tworzona jest poniżej opisana struktura danych. Pozycja stosu jest zwalniana przez zaznaczanie jej za pomocą $F, gdy pętla iteracyjna zostanie zakończona. Dzięki poświęceniu jednego 4-bitowego słowa struktury na znacznik "lokacja wolna/zajęta" zbędny staje się wskaźnik stosu. Zamiast tego stos jest przeszukiwany w poszukiwaniu pierwszej wolnej/zajętej lokacji.

     2 słowa        dwie ostatnie cyfry wykładnika zmiennej TO
     1 słowo        pierwsza cyfra wykładnika i znak zmiennej TO
    10 słów         mantysa zmiennej TO
     2 słowa        indeks zmiennej sterującej pętli FOR
                    (00 = zmienna A, 10 = zmienna B i tak dalej)
     1 słowo        F - lokacja wolna, 2 - lokacja zajęta
     2 słowa        dwie ostatnie cyfry wykładnika zmiennej STEP
     1 słowo        pierwsza cyfra wykładnika i znak zmiennej STEP
    10 słów         mantysa zmiennej STEP
     3 słowa        adres pierwszego znaku po instrukcji FOR, jest
                    to miejsce gdzie skacze pętla iteracyjna NEXT

Przykład:

    1234 FOR I=1 TO 49 STEP 1: NEXT I

    10              wartość zmiennej TO = 4.90000000E01
    1               mantysa i wykładnik dodatnie
    0000000094
    80              indeks zmiennej sterującej I
    2               zaznaczona zajęta lokacja
    00              wartość zmiennej STEP = 1.0000000E00
    1               mantysa i wykładnik dodatnie
    0000000001
    662             wskazuje dwukropek po instrukcji STEP 1

Stos instrukcji GOSUB

Wykonanie instrukcji GOSUB powoduje umieszczenie na stosie opisanej poniżej struktury danych. Instrukcja RETURN zwalnia lokację na szczycie stosu przez zaznaczenie jej słowem $F. Podobnie jak dla FOR nie jest używany wskaźnik stosu.

     3 słowa        adres pierwszego znaku po instrukcji GOSUB
                    (miejsce powrotu dla RETURN)
     1 słowo        F - lokacja wolna, 3 - lokacja zajęta

Mapa pamięci

    $0000-$007F     128 słów    bufor ogólnego przeznaczenia
    $0080-$00FF     128 słów    bufor ogólnego przeznaczenia
    $0100-$010F     16 słów     zmienna ANS
    $0110-$011F     16 słów     RAN# seed, początkowo 0.43429448190
    $0120-$012F     16 słów     pozycja znaku dla funkcji MID(
    $0132-$0133     2 słowa     dana wysyłana do drukarki
    $0140-$01BF     128 słów    stos dla FOR, mieści 4 wpisy, rośnie w górę
    $01C0-$01DF     32 słowa    stos dla GOSUB, mieści 8 wpisów, rośnie w górę
    $01E0-$021D     64 słowa    specjalna zmienna łańcuchowa $
    $0220-$0E5F     3136 słów   programy BASIC
    $0E60-$0E6F     16 słów     zmienna Z
    $0E70-$0E7F     16 słów     zmienna Y
       .               .            .
       .               .            .
       .               .            .
    $0FD0-$0FDF     16 słów     zmienna C
    $0FE0-$0FEF     16 słów     zmienna B
    $0FF0-$0FFF     16 słów     zmienna A

Format plików

Plik składa się z segmentu nazwy oraz jednego lub kilku segmentów danych.

Segment nazwy

Segment nazwy rozpoczyna się bajtem: $Dx (plik utworzony za pomocą SAVE) lub $Ex (plik utworzony za pomocą PUT) lub $Fx (plik utworzony za pomocą SAVE A), gdzie x jest długością nazwy pliku (do 8 znaków), lub $F gdy plik bez nazwy.
Kolejnych 8 bajtów zawiera znaki nazwy pliku.
Ostatnie 2 bajty zawierają numer pierwszego wiersza programu w języku BASIC zapisanego poleceniem SAVE.

Segment danych

Segment danych rozpoczyna się bajtem $02, kończy bajtem $F0 (gdy jest to ostatni segment) lub $F1 (gdy nastąpią jeszcze dalsze segmenty). Ilość bajtów danych pomiądzy nimi nie może przekroczyć 63, ponieważ zawartość jest wczytywana do 64-bajtowego bufora pod adresem $0000. To ograniczenie nie dotyczy plików zapisanych przez SAVE A, który zawiera tylko pojedynczy segment danych.

Plik zawierający program w języku BASIC składa się po prostu z ciągu następujących po sobie wierszy. Gdy plik został utworzony za pomocą polecenia SAVE A, każdy program jest zakończony bajtem $E0. Pusty program zawiera tylko bajt $E0.

Plik zapisany poleceniem PUT składa się z ciągu wartości zmiennych rozdzielonych znacznikiem $FF. Nazwy zmiennych nie są zapisywane.

Przykłady:

1.  Program zapisany poleceniem SAVE "PROG"

    Segment nazwy:
    $D4 $2F $31 $2E $26 $07 $FF $10 $FF $10 $00

    Segment danych:
    $02
    $10 $00 $A0 $28 $0C $11 $95 $11 $10 $FF   10 FOR I=1 TO 10
    $20 $00 $A6 $28 $FF                       20 PRINT I
    $30 $00 $A1 $28 $FF                       30 NEXT I
    $F0

2.  Zmienna $ i zmienna numeryczna zapisana poleceniem PUT "*-+" $,A

    Segment nazwy:
    $E3 $03 $02 $01 $07 $09 $5D $20 $FF $00 $F8

    Segment danych:
    $02
    $0D $11 $12 $13 $14 $15 $16 $17       $="1234567890ABC"
    $18 $19 $10 $20 $21 $22 $FF $00
    $01 $00 $00 $00 $00 $00 $00 $00
    $01 $00 $00 $00 $00 $00 $00 $FF
    $00 $01 $36 $65 $92 $15 $14 $03       A=3.14159265360
    $F0

3.  Programy zapisane poleceniem SAVE A "*"

    Segment nazwy:
    $F1 $03 $07 $FF $00 $00 $00 $00 $07 $00 $68

    Segment danych:
    $02
    $01 $00 $A6 $FF $E0                   P0: 1 PRINT
    $10 $00 $A2 $11 $10 $FF $E0           P1: 10 GOTO 10
    $E0 $E0 $E0 $E0 $E0 $E0 $E0 $E0
    $F0