Indeks English version English version

Elektronika MK-85 - formaty danych

Liczby na tej stronie są w kodzie szesnastkowym, chyba że zanaczono inaczej.

Kody i wzory znaków alfanumerycznych

zestaw znaków alfanumerycznych

Rysunek został wygenerowany programowo na podstawie danych wyciągniętych z pamięci ROM.


Kody słów kluczowych języka BASIC

    C0 SIN       D0 CHR       E0 THEN      F0 TEST
    C1 COS       D1 ASCI      E1 TO        F1 WHO
    C2 TAN       D2 RND       E2 STEP
    C3 ASN       D3 MID       E3 STOP
    C4 ACS       D4 GETC      E4 END
    C5 ATN       D5 RAN#      E5 LETC
    C6 LOG       D6 KEY       E6 DEFM
    C7 LN        D7 CSR       E7 VAC
    C8 EXP       D8 NEXT      E8 MODE
    C9 SQR       D9 GOTO      E9 SET
    CA ABS       DA GOSUB     EA DRAWC
    CB INT       DB RETURN    EB DRAW
    CC SGN       DC IF        EC RUN
    CD FRAC      DD FOR       ED LIST
    CE VAL       DE PRINT     EE AUTO
    CF LEN       DF INPUT     EF CLEAR

Kody zwracane przez procedurę skanującą klawiaturę (adres 0820 w pamięci ROM)

                 10 5         20 D         30 T
    01 Mode      11 6         21 E         31 U
    02 [S]       12 7         22 F         32 V
    03 [F]       13 8         23 G         33 W
    04 EXE       14 9         24 H         34 X
    05 <-        15 spacja    25 I         35 Y
    06 ->        16 .         26 J         36 Z
    07 AC        17 -         27 K
    08 DEL       18 +         28 L
    09 ANS       19 *         29 M
    0A Init      1A /         2A N
    0B 0         1B EE        2B O
    0C 1         1C =         2C P
    0D 2         1D A         2D Q
    0E 3         1E B         2E R
    0F 4         1F C         2F S

Format zmiennych

Każda zmienna (z wyjątkiem specjalnej zmiennej łańcuchowej $) zajmuje 8 bajtów (czyli 4 słowa) w pamięci RAM.

Zmienne łańcuchowe

Zmienna łańcuchowa może przechowywać do 7 znaków.
Bardziej znaczący bajt pierwszego słowa zawiera wartość 60 identyfikującą zmienną łańcuchową. Pozostałe bajty przechowują kody znaków. Wolne miejsce wypełnione jest zerami.
Przykłady:

    A$ = ""             6000 0000 0000 0000
    A$ = "ABCD"         6041 4342 0044 0000
    A$ = "1234567"      6031 3332 3534 3736

Zmienne numeryczne

Zmienne numeryczne są przechowywane jako zmiennoprzecinkowe, spakowane liczby dziesiętne.
Struktura pierwszego słowa:

Kolejne trzy słowa zawierają mantysę o wartości w przedziale .100000000000 do .999999999999 w spakowanym formacie BCD.
Przykłady:

    A = 0             0000 0000 0000 0000
    A = 1             1001 1000 0000 0000   ( .100000000000E01)
    A = -1            9001 1000 0000 0000   (-.100000000000E01)
    A = 100           1003 1000 0000 0000   ( .100000000000E03)
    A = -100          9003 1000 0000 0000   (-.100000000000E03)
    A = PI            1001 3141 5926 5360   ( .314159265360E01)
    A = -PI           9001 3141 5926 5360   (-.314159265360E01)
    A = 0.01          0FFF 1000 0000 0000   ( .100000000000E-01)
    A = -0.01         8FFF 1000 0000 0000   (-.100000000000E-01)
    A = 1/3           1000 3333 3333 3333   ( .333333333333E-00)
    A = -1/3          9000 3333 3333 3333   (-.333333333333E-00)
    A = 1.2E1234      14D3 1200 0000 0000   ( .120000000000E1235)
    A = -9.8E-1234    8B2F 9800 0000 0000   (-.980000000000E-1233)

Specjalna zmienna łańcuchowa $

Zmienna łańcuchowa $ może przechować do 30 (dziesiętnie) znaków. Łańcuch umieszczony w pamięci jest zakończony zerem.
Przykład:

    $ = "ABCDEFG"
    41 42 43 44  45 46 47 00  00 00 00 00  00 00 00 00
    00 00 00 00  00 00 00 00  00 00 00 00  00 00 00

Format danych na stosie

Zmienne numeryczne

     1 słowo        identyfikator 2000
     1 słowo        adres końca pamięci przechowującej zmienną
     2 słowa        nie używane

Na przykład zmienna A jest zapisywana jako 2000 8800 0000 0000.

Zmienne łańcuchowe

     1 słowo        identyfikator 4000
     1 słowo        adres końca pamięci przechowującej zmienną
     1 słowo        długość łańcucha
     1 słowo        nie używane

Na przykład zmienna A$ zawierająca łańcuch "ABCD" jest zapisywana jako 4000 8800 0004 0000.

Specjalna zmienna łańcuchowa $

     1 słowo        identyfikator 4001
     1 słowo        adres zmiennej 814E
     1 słowo        długość łańcucha
     1 słowo        nie używane

Na przykład zmienna $ zawierająca łańcuch "ABCDEF" jest zapisywana jako 4001 814E 0006 0000.

Liczby

Obowiązuje ten sam format jak dla liczb zapisywanych w zmiennych numerycznych.

Łańcuchy

     1 słowo        identyfikator 4080
     1 słowo        adres łańcucha
     1 słowo        długość łańcucha
     1 słowo        nie używane

Struktura programu w języku BASIC

Wiersz programu BASIC rozpoczyna się numerem wiersza w formacie binarnym, przechowywanym w 2 bajtach, kończy się znacznikiem 00. Słowa kluczowe języka BASIC są przechowywane za pomocą jednobajtowych kodów, wartości numeryczne jako ciąg znaków.
Przykład:

    1234 FOR I=1 TO 49 STEP 1: NEXT I
    D2 04 DD 4A 3D 31 E1 34 39 E2 31 3A D8 4A 00

Stos instrukcji FOR

Za każdym razem gdy wykonywana jest instrukcja FOR, na stosie FOR tworzona jest poniżej opisana struktura danych. Nie ma wskaźnika stosu, zamiast tego FOR szuka pierwszej wolnej lokacji (skasowanej zerami). NEXT sprawdza kolejno wszystkie lokacje stosu w poszukiwaniu pasującej zmiennej sterującej.

     4 słowa        wartość STEP
     4 słowa        wartość TO
     1 słowo        adres pierwszego znaku po instrukcji FOR, jest
                    to miejsce gdzie skacze pętla iteracyjna NEXT
     1 słowo        adres zmiennej sterującej lub 0000 gdy wpis wolny

Stos instrukcji GOSUB

Wykonanie instrukcji GOSUB powoduje umieszczenie adresu powrotu (adresu pierwszego znaku po instrukcji GOSUB) na pierwszym stosie GOSUB, oraz adresu początku linii na drugim stosie GOSUB.
Instrukcja RETURN zwalnia lokację na szczycie stosu przez zaznaczenie jej wartością 0000. Podobnie jak dla FOR nie jest używany wskaźnik stosu.


Mapa pamięci (jeszcze niekompletna)

  8000-805F  60 bajtów  pamięć wyświetlacza
  8060-812B  66 słów    stos systemowy
                        używany również jako bufor obsługi błędów
                        (zaczyna się od adresu 8060, 40 bajtów)
  812C-814D  22 słowa   stos przetwarzanych wyrażeń, przechowuje kody
                        operatorów, rośnie w dół
                        używany również jako bufor łączonych łańcuchów
                        (zaczyna się od adresu 812F, 1F bajtów)
  814E-816C  1F bajtów  zmienna łąńcuchowa $
  816D-81AC  40 bajtów  bufor edycji
  81AD-81B3   7 bajtów  znak definiowany przez użytkownika
  81B4-81C3   8 słów    pierwszy stos GOSUB dla adresów powrotów,
                        miejsce na 8 wpisów, rośnie w górę
  81C4-81D3   8 słów    drugi stos GOSUB dla adresów początków linii,
                        miejsce na 8 wpisów, rośnie w górę
  81D4-8223  28 słów    stos FOR, miejsce na 4 wpisy, rośnie w górę
  8224-822B   4 słowa   zmienna ANS
  822C-823F   A słów    końcowe adresy programów BASIC numer 0-9

  8248-8249   1 słowo   wskaźnik stosu przetwarzanych wyrażeń

  824E-824F   1 słowo   RAN# seed
  8250-8251   1 słowo   ilość zmiennych, inicjowane na 1A
  8252-8253   1 słowo   adres końca pamięci RAM
  8254-8255   1 słowo   pozycja błędu
  8256-8257   1 słowo   mode

  825C-825D   1 słowo   adres początku bieżącej linii programu BASIC
  825E-825F   1 słowo   poprzedni stan klawiatury
  8260-8261   1 słowo   wskaźnik do bufora edycji 816D
  8262-8263   1 słowo   mode, dotyczy stanu klawiatury

  8266        1 bajt    timer dla klawiatury
  8267        1 bajt    precyzja wydruku liczb
  8268        1 bajt    wybrany program
  8269        1 bajt    pozycja kursora

Od adresu 826B zaczynają się programy w języku BASIC.
Zmienne zajmują koniec pamięci RAM, zmienna A zajmuje najwyższy adres.