Indeks English versionEnglish version

Mapa pamięci modułu RAM od mikrokomputera Elektronika MK-90 (BASIC V1.0)

UZUPEŁNIENIE: Struktury danych okazują się być zgodne organizacją plików systemu operacyjnego RT-11.

Zakres adresów Zawartość
0x0000-0x03FF Obszar loadera
0x0400-0x07FF Obszar katalogu
0x0800-0x27FF Obszar danych

Loader

Menu startowe mikrokomputera MK-90 udostępnia trzy opcje: BASIC, SMP0, SMP1. Wybór SMP0 (lub SMP1) powoduje załadowanie i wykonanie kodu loadera z modułu pamięci 0 (lub 1). Moduły sformatowane komendą INIT zawierają kod wyświetlający komunikat w języku rosyjskim oznaczający "moduł bez loadera":

000000: nop
000002: jsr     r7, @#153700
000006: jsr     r7, @#120536
000012: mov     @#034022, @#164000
000020: mov     #104306, @#164002
000026: jsr     r0, 000062
000032: .asciz  "\016\r\n smp BEZ ZAGRUZ^IKA"
000061: .even
000062: movb    (r0)+, r2
000064: beq     000064
000066: jsr     r7, @#116542
000072: br      000062

Organizacja katalogu

Wydruk szesnastkowy przykładowego katalogu (z pliku MK90.BIN znajdującego się w archiwum mk90prog.zip):

0400: 01 00 00 00 01 00 00 00 04 00
040A: 00 02 EA 27 00 00 BB 0C 01 00 00 00 36 89  ;pierwszy wpis katalogu
0418: 00 04 3A 14 A5 14 BB 0C 01 00 00 00 36 89  ;drugi wpis katalogu
0426: 00 04 9B 54 B8 38 BB 0C 01 00 00 00 36 89  ;trzeci wpis katalogu
0434: 00 02 20 20 20 20 20 20 0D 00 20 20 20 20  ;czwarty wpis katalogu
0442: 00 08

Każdy wpis katalogu zajmuje 7 słów (czyli 14 bajtów). Kolejność bajtów w słowie - najpierw bajt mniej znaczący, potem bardziej znaczący.

Struktura wpisu katalogu

Ofset Rozmiar Zawartość
01 Atrybut
12 Nazwa pliku (2 grupy po 3 znaki), uzupełniona na końcu spacjami
31 Rozszerzenie nazwy pliku (grupa 3 znaków), domyślnie BAS
41 Ilość bloków (sektorów) przypisanych do wpisu katalogu. Suma tych wartości dla wszystkich wpisów katalogu musi być równa 16.
0x0001 + 0x0001 + 0x0001 + 0x000D = 16
51 Nieznana
61 Nieznana

Atrybut wpisu katalogu

Kod Znaczenie
0x0200 Wpis wolny lub skasowany
0x0400 Wpis zajęty przez plik
0x0800 Koniec katalogu

Kodowanie nazw plików

Nazwy plików i rozszerzenia są przechowywane w postaci skompresowanej - 3 znaki w 2 bajtach.

Tablica kodów znaków (dziesiętnie)
Kod Znak
0
1
2
3
4
5
6
7
8
9
spacja
A
B
C
D
E
F
G
H
I
Kod Znak
10
11
12
13
14
15
16
17
18
19
J
K
L
M
N
O
P
Q
R
S
Kod Znak
20
21
22
23
24
25
26
27
28
29
T
U
V
W
X
Y
Z
$
.
/
Kod Znak
30
31
32
33
34
35
36
37
38
39
0
1
2
3
4
5
6
7
8
9

Przykładowo, drugi wpis katalogu pod adresem 0x0418 zawiera nazwę pliku CIRCLE.BAS. Każda grupa trzech znaków jest kodowana w następujący sposób:

  1. CIR - kody znaków: 3, 9, 18
    40*40*3 + 40*9 + 18 = 5178 = 0x143A
  2. CLE - kody znaków: 3, 12, 5
    40*40*3 + 40*12 + 5 = 5285 = 0x14A5
  3. BAS - kody znaków: 2, 1, 19
    40*40*2 + 40*1 + 19 = 3259 = 0x0CBB

Te trzy słowa są widoczne pod adresem 0x041A do 0x041F.
Można traktować ten sposób kodowania jako liczby przy podstawie 40. Znany jest również pod nazwą Radix-50 (co zauważył Alec Voropay, dziękuję!).


Obszar danych

Obszar danych składa się z 16 bloków (sektorów), każdy po 512 bajtów. Programy są zapisywane jako pliki tekstowe ASCII (brak tokenizacji słów kluczowych). Zaczynają się pustym wierszem (sekwencja CR,LF) i kończą się znacznikiem 0x00.

System nie obsługuje sfragmentowanych plików, tzn. do zapisania pliku musi dysponować dostatecznie dużą ciągłą grupą wolnych bloków pamięci.