Organizátor pamäte
PP 01 má oproti vtedajším "domácim" 8 bitovým počítačom veľmi neobvyklú architektúru a zatiaľčo napríklad mali počítače bežne vyvedenú priamo samotnú zbernicu CPU, tak PP 01, ako počítač rodiny SMEP, má vyvedenú (redukovanú a prispôsobenú) systémovú zbernicu I41, čo je RVHP klon zbernice Intel Multibus. Ďalšou zaujímavosťou PP 01 je organizácia pamäťového priestoru, ktorý je riadený tzv. Organizátorom pamäte (OP).
OP transformuje 16 bitovú logickú adresu CPU na 20 bitovú fyzickú adresu. To znamená, že PP 01 môže adresovať celkom 1 MB pamäte. Z tohto 1 MB je však určitá časť vyhradená pre internú pamäť ROM a RAM a zbytok môže byť obsadený prostredníctvom systémovej zbernice I41.
64 kB adresný priestor CPU je rozdelený na 16 segmentov po 4 kB. Do každého z týchto segmentov možno priradiť ľubovoľný z 256 blokov fyzickej pamäte. Jeden blok má samozrejme veľkosť 4 kB (256 x 4 kB = 1 MB). Priradenie bloku do segmentu sa robí zápisom na príslušný port OP - 0E0h-0EFh
(adresy sa zrkadlia aj na 0F0h-0FFh
, používajú sa však iba základné adresy). Zapísanú hodnotu registra možno prečítať, prečítaná hodnota je však inverzná.
Port | Adresný rozsah CPU |
---|---|
0E0h (0F0h) |
00000h až 00FFFh |
0E1h (0F1h) |
01000h až 01FFFh |
0E2h (0F2h) |
02000h až 02FFFh |
0E3h (0F3h) |
03000h až 03FFFh |
0E4h (0F4h) |
04000h až 04FFFh |
0E5h (0F5h) |
05000h až 05FFFh |
0E6h (0F6h) |
06000h až 06FFFh |
0E7h (0F7h) |
07000h až 07FFFh |
Port | Adresný rozsah CPU |
---|---|
0E8h (0F8h) |
08000h až 08FFFh |
0E9h (0F9h) |
09000h až 09FFFh |
0EAh (0FAh) |
0A000h až 0AFFFh |
0EBh (0FBh) |
0B000h až 0BFFFh |
0ECh (0FCh) |
0C000h až 0CFFFh |
0EDh (0FDh) |
0D000h až 0DFFFh |
0EEh (0FEh) |
0E000h až 0EFFFh |
0EFh (0FFh) |
0F000h až 0FFFFh |
Keď CPU vystaví adresu na adresovú zbernicu A15-A0
, tak bity A15-A12
určujú číslo registra OP, z ktorého sa vezme číslo bloku a to bude predstavovať horné bity A19-A12
fyzickej adresy. Adresné bity A11-A0
CPU určujú adresu v danom 4 kB bloku a sú teda zhodné aj vo fyzickej adrese.
Symbolicky: RXXX → BBXXX
- kde R
je 4-bitové číslo registra OP, BB
je 8-bitové číslo bloku zapísané v danom registri a XXX
je 12-bitová adresa v rámci 4 kB bloku.
Čísla blokov sú pevne priradené konkrétnej oblasti a typu pamäte a sú uvedené v nasledujúcej tabuľke. 24 kB z vnútornej RAM (6 blokov) okupuje VideoRAM. Stále 2 bloky tvoria jeden Bitplan VideoRAM.
Číslo bloku | Fyzická adresa | Priradenie |
---|---|---|
00h |
00XXXh |
Priestor prístupný cez zbernicu I41 - 896 kB |
0E0h |
0E0XXXh |
Vnútorná RAM 64 kB (zahŕňa aj VideoRAM) |
0F0h |
0F0XXXh |
Priestor prístupný cez zbernicu I41 - 32 kB |
0F8h |
0F8XXXh |
Externý ROM Modul 16 kB |
0FCh |
0FCXXXh |
Vnútorná ROM 16 kB (GBASIC) |
Bloky VideoRAM | |
---|---|
Číslo bloku | Bitplan VideoRAM |
0E6h |
bitplan "R" |
0EAh |
bitplan "G" |
0EEh |
bitplan "B" |
Po pripojení napájania (resete) je obsah registrov OP nedefinovaný a preto je OP odpojený. Vďaka zdvíhacím (pull-up) odporom je na výstupe OP hodnota 0FFh, teda posledný blok vnútornej ROM. Prakticky je tak po resete tento blok zrkadlený v celom adresnom priestore, a čo je dôležité, začína od adresy 0000h, ktorej hodnota je aj v registri PC
CPU po resete. To znamená, že v tejto časti ROM musí byť inicializačný kód, ktorý jednak predpripraví vhodné bloky do registrov OP a zároveň OP aktivuje.
Aktivácia OP sa robí inštrukciou IN
alebo OUT
na niektorú z IO adries 0D8h-0DBh
(systém používa OUT 0D8h
). K aktiváci dôjde ihneď po vykonaní inštrukcie, takže v tomto okamihu už musia byť zadefinované aspoň tie registre, kde bude bežať nasledujúci kód. Zmena v registroch OP sa môže samozrejme vykonávať aj po aktivácii OP, len je treba dávať pozor napr. na to, aby zmena nenastala v mieste, kde práve beží samotný kód alebo tam, kde je práve zásobník.
Po resete si GBASIC inicializuje OP a rozloženie pamäte takto:
Adresa | Port OP | Číslo bloku | Význam |
---|---|---|---|
0000h |
0E0h |
0E0h |
Vnútorná RAM |
1000h |
0E1h |
0E1h |
Vnútorná RAM |
2000h |
0E2h |
0E2h |
Vnútorná RAM |
3000h |
0E3h |
0E3h |
Vnútorná RAM |
4000h |
0E4h |
0E4h |
Vnútorná RAM |
5000h |
0E5h |
0E5h |
Vnútorná RAM |
6000h |
0E6h |
0ECh |
Vnútorná RAM |
7000h |
0E7h |
0EDh |
Vnútorná RAM |
8000h |
0E8h |
0E8h |
Vnútorná RAM |
9000h |
0E9h |
0E9h |
Vnútorná RAM |
0A000h |
0EAh |
0EAh |
VideoRAM Bitplan "G" |
0B000h |
0EBh |
0EBh |
VideoRAM Bitplan "G" |
0C000h |
0ECh |
0FCh |
Vnútorná ROM |
0D000h |
0EDh |
0FDh |
Vnútorná ROM |
0E000h |
0EEh |
0FEh |
Vnútorná ROM |
0F000h |
0EFh |
0FFh |
Vnútorná ROM |
Pre zaujímavosť, inicializácia v GBASICu vyzerá takto: