10. Rozšířená paměť

Většina typů rozšíření paměti se ovládá v principu stejně jako u Atari 130 XE, tedy zastíněním 16 KiB operační paměti v rozsahu 16384 ($4000) - 32767 ($7FFF). Která část rozšířené paměti a jakým způsobem zde bude přístupná se určuje nastavením jednotlivých bitů adresy PORTB (tj. 54017, resp. $D301).

10.1. Význam PORTB u počítačů XL a XE

Na tuto problematiku jsme již narazili v kapitolách 1.2 a 5.7.2. Nyní si ji probereme více do hloubky. Začneme přehledem bitů PORTB u počítačů XL a XE, který jsem si vypůjčil z knihy [2], strana 1:

Bit  Funkce
0     0 = v $C000 - $FFFF je RAM
      1 = v $C000 - $FFFF je ROM OS
1     0 = v $A000 - $BFFF je ROM BASIC
      1 = v $A000 - $BFFF je RAM
2, 3  výběr banky rozšířené paměti, která se objeví v $4000 - $7FFF    
4     0 = CPU přistupuje k rozšířené p.
      1 = CPU přistupuje k operační p.
5     0 = ANTIC přistupuje k rozšíř. p.
      1 = ANTIC přistupuje k operační p.
6     nevyužit
7     0 = v $5000 - $57FF je SELF TEST
      1 = v $5000 - $57FF je RAM

Toto uspořádání umožňuje, pomocí bitů 2 a 3, adresovat pouze 4 banky (tj. bloky o velikosti 16 KiB) rozšířené paměti, tedy maximálně 64 KiB, kterými disponuje Atari 130 XE.

Větší rozšíření RAM potřebují, v závislosti na jejich velikosti, další ovládací bity. Např. rozšíření o 256 KiB musí mít navíc 2 bity. Volný je však už jen jeden, a to 6. bit. Naneštěstí různí výrobci přišli s různými nápady, kde další bit(y) vzít. Existuje tak několik typů rozšíření paměti.

10.2. Bity PORTB u různých rozšíření

Bity 0 a 1, které ovládají přístup k ROM OS a BASICu, jsou QMEGem nastaveny na 1 vždy v době, kdy přistupuje k rozšířené paměti. Rozšíření paměti typu Newell (o velikosti 1 MiB) ovšem bit 1 používá také k výběru bloků.

Některá rozšíření paměti (včetně standardního 130 XE a Compy Shop), která zachovávají používání bitu 5 k volbě, zda má do přídavné paměti přístup ANTIC (bez ohledu na nastavení přístupu pro CPU v bitu 4). Rozšíření Rambo (a jemu podobná) však počítají s tím, že ANTIC má do rozšířené paměti přístup jen tehdy, kdy CPU, tj. oba se řídí bitem 4. Tato rozšíření pak používají pro výběr paměťových bloků také bit 5.

Rozšíření Compy Shop naproti tomu využívá k adresování bit 7. Vychází z toho, že zapnutí nebo vypnutí SELF TESTu je irelevantní v době, kdy je aktivní rozšířená paměť, protože ta jej překrývá. SELF TEST, který je umístěn v rozsahu 20480 ($5000) - 22527 ($57FF), je tak zapnutý pouze v případě, kdy mají bity 4 a 5 stav 1 a současně bit 7 je ve stavu 0.

10.3. Dělení rozšířené paměti na bloky

Zkráceně řečeno, pomocí kombinace bitů 5, 6 a 7 (příp. i 1) se provádí výběr bloku o velikosti 64 KiB. Pomocí bitů 2 a 3 potom banka (16 KiB) z těchto 64 KiB. A bit 4 (příp. 5) slouží jako hlavní vypínač, který určuje, zda se rozšířená paměť používá (hodnota 0) nebo zda je v rozsahu 16384 ($4000) - 32767 ($7FFF) normální RAM (hodnota 1).

V knize [6] na str. 17 nabízí autor přehled různých rozšíření. Pro jejich popis chápe posloupnost bitů 7, 6, 5, 4 jako blok binárních číslic tvořící hexadecimální čísla od $0 do $F, kdy bit 4 má váhu 1 a bit 7 váhu 8. Tj. např. "A" znamená aktivní bity 7 a 5, "C" jsou bity 7 a 6, "E" pak bity 7, 6 i 5.

Stejný přístup používá program eXtended RAM Test od -XI-/Satantronic. Ten takto popisuje celý PORTB, tedy včetně bitů 0 až 3. Tím vzniknou 2 hexadecimální číslice, z nichž ta první (vyšší) je znázorněna v řádcích, a druhá (bity 0 až 3) v podobě sloupců. Tento program doporučuji vedle samotného testování také k detekci typu rozšíření, pokud si nejste jisti, jaký typ v počítači máte.

V následujícím seznamu jsou uvedena čísla bloků rozšířené paměti a za lomítkem potom čísla bloků (v uvedeném pořadí), která používá QMEG pro ramdisky (zdroj: [6], str. 17):

a) Buchholz/ABBUC  - 192 KiB - ACE/ACE
b) KLAN ATARI      - 192 KiB - 8AE/A8E
c) ATARI-Magazin   - 256 KiB - 8ACE/ACE
d) Compy Shop      - 256 KiB - 26AE/A6E
e) Newell          - 1 MiB   - 02468ACE/A6E

Proč se v seznamu objevují jen sudé číslice (02468ACE)? Je to proto, že bit 4 má vždy hodnotu 0. A to je proto, že pouze tehdy má CPU přístup k rozšířené paměti.

Pro příklad dešifrujeme, jaké kombinace bitů (v pořadí 7 až 4) používá Compy Shop:

- 0010 (2)
- 0110 (6)
- 1010 (A)
- 1110 (E)

Bit 5 je sice uveden vždy v hodnotě 1, ale prakticky je jedno, jakou hodnotu má (ovládá totiž přístup ANTICu k rozšířené paměti). QMEG používá pouze kombinace 1010 (A), 0110 (6) a 1110 (E), tzn. 3x 64 KiB, tedy 192 KiB (viz 1.2.1).

Ještě můžeme uvést kombinace pro Rambo (v tabulce pod názvem ATARI-Magazin):

- 1000 (8)
- 1010 (A)
- 1100 (C)
- 1110 (E)

Zde je zřejmé, že se nepoužívá bit 7, který slouží pro přístup k SELF TESTu, ale naopak je vytěžován bit 5. QMEG z toho používá pouze kombinace 1010 (A), 1100 (C) a 1110 (E).

Ony 3 bloky (po 64 KiB) využívá QMEG následujícím způsobem:

10.4. Kompatibilita rozšíření s QMEGem

QMEG 4 podporuje všechny výše popsané typy rozšíření paměti. Provádí detekci typu rozšíření automaticky, a to při každém přístupu k ramdisku.

Rozšíření Megaram III, Megaram II (a pravděpodobně i Megaram I) od K. Peterse jsou kompatibilní s rozšířením Compy Shop, a tudíž jsou také podporována QMEGem.

Některá rozšíření paměti o velikosti 1 MiB umožňují (příp. je tak lze upravit), aby fungovaly jako 4 nezávislá rozšíření po 256 KiB, mezi kterými lze ručně přepínat (pomocí mechanických přepínačů). To je nejvhodnější způsob, jak takové rozšíření paměti v QMEGu využít.

Při práci s ramdiskem u rozšíření typu Rambo (resp. jakéhokoli rozšíření využívajícího 5. bit PORTB), nesmí být adresní rozsah od $4000 do $7FFF používán pro obrazová data ani display list. Jinak řečeno do této části paměti nesmí přistupovat ANTIC, jinak by došlo k poruchám zobrazování nebo zhroucení systému.

Tento problém umí QMEG potlačit tím, že odloží display list až po dokončení (či přerušení) práce s ramdiskem. Toho lze docílit v QMEGu 3 nastavením 7. bitu (tj. zvýšit hodnotu o 128) v DLIEN (adresa 787, resp. $0313). QMEG 4 na to má funkci EDI (viz 2.13.3).

Na závěr jedno důležité upozornění: QMEG (z prostorových důvodů) neobsahuje detekci toho, zda počítač vůbec nějaké rozšíření paměti má. Proto u nerozšířených počítačů nepoužívejte ramdisk ani freezer. Může dojít ke zhroucení systému!

V případě 130 XE (resp. rozšíření o 64 KiB) se omezení týká pouze ramdisků. Freezer bude fungovat bez omezení. Jen v průběhu zápisu a načítání obsahu paměti na/z diskety bude zobrazován nesprávný obsah. Oba ramdisky jsou identické a mají velikost 64 KiB.

11. Organizace paměti

Samotný operační systém je sice uložen v ROM, ale pro svůj běh si potřebuje některé proměnlivé informace zapamatovat i s využitím části RAM. Využití následujících adres QMEGem se liší od způsobu jejich využití klasickým ATARI OS (jak je známe např. z [4]).

Následující seznam vychází z přehledu pro QMEG verze 3 (viz [1], strana 9). Rozdíly vůči QMEG 4 byly konzultovány se Stefanem Dorndorfem a některé prakticky ověřeny. Nejprve jsou uvedeny adresy (dekadicky a hexadecimálně), následuje popis, příp. určení verze QMEGu, ke které se tato adresa (ne)vztahuje.

0,1 ($0000,$0001)
QMEG 3 - oba byty jsou volné a nemažou se ani při studeném startu.
QMEG 4 - volný je pouze byte 0.

4-7 ($0004-$0007)
Využívá MLM.

18-20 ($0012-$0016) RTCLOK
Čas - v QMEGu 3 se na rozdíl od Atari OS nevymaže Resetem.

21,22 ($0017,$0018)
MLM;
QEMON - File loader;
DSKINV - nultá stránka.

28-31 ($001C-$001F)
QMEG 3 - Obsluha zařízení P2:.

54,55 ($0036,$0037)
QMEG 3 - Ukazatel na grafický buffer pro zařízení P2:.

74,75 ($004A,$004B)
QMEG nevyužívá - k dispozici uživateli.

96,97 ($0060,$0061)
IX, IY - QMEG 3 používá pro rutiny Drawto.

112-120 ($0070-$0078)
Využívá MLM a proměnné Drawto.

563 ($0233)
QMEG 3 nevyužívá - k dispozici uživateli.

568,569 ($0238,$0239) VCTRLB
V QMEGu 3 je zde vektor pro Ctrl-8.

581 ($0245) FMTFL
V QMEGu 3 udává formát ramdisku pro Percom instrukce:
- 128 ($80) = Single
- 0 ($00) = Medium
- 1 ($01) = Double

583-619 ($0247-$026B)
OSMON – display list
MLM - řádkový buffer
P2: - buffer pro změny bitu znaku
(P2: neplatí pro QMEG 4)

648 ($0288) FNKEYS
Stav funkčních kláves v QMEGu 3:
- 4 ($04) = vypnuté
- 251 ($FB) = zapnuté
(V QMEGu 4 přesunuto do 1005/$03ED)

654,655 ($028E,$028F) STTEMP
Nastavení rychlosti pro DSKINV.

700 ($02BC)
Rezervováno pro budoucí použití.

713-724 ($02C9-$02D4)
Proměnné pro MLM a Percom buffer pro DSKINV.

727 ($02D7) FLASL
QMEG 3 - Blikající kurzor:
- 77 ($4D) = vypnuto
- 178 ($B2) = zapnuto

728 ($02D8) FLASH
QMEG 3 - Blikající kurzor:
- 38 ($26) = vypnuto
- 89 ($59) = zapnuto

735 ($02DF) PLINE
QMEG 3 - Řádkový čítač pro automatické stránkování P2:.

745 ($02E9)
QMEG 3 - rezervováno pro budoucí užití.
QMEG 4 - využívá paralelní rozhraní (Parallel Bus / ECI).

757 ($02F5) PFONT
QMEG 3 - Vyšší byte adresy znakové sady pro tisk na P2:.

758 ($02F6) P2CMD
QMEG 3 - Hustota tisku na P2:
- 75 ($4B) = jednoduchá
- 76 ($4C) = dvojitá

759 ($02F7) PMODE
QMEG 3 - Režim tisku:
- 0 ($00) = tisk na P:
- 1 ($01) = tisk na P2:

760,761 ($02F8,$02F9) PCOL, PTEMP
QMEG 3 - Proměnné pro tisk na P2:

787 ($0313) DLIEN
- 128 ($80) = přerušení display listu povoleno v závislosti na práci s ramdiskem.
(V QMEGu 4 přesunuto do 1005/$03ED)

832-959 ($0340-$03BF)
IOCB je používané také pro obrazovku monitoru OS.

1003 ($03EB) RSTAPH
Při Resetu se nastaví na 0, což zajistí, že Editor (E:) může být stále otevřen.

1004,1005 ($03EC,$03ED) DBAUD
QMEG 3 - Přenosové rutiny pro Ultra Speed.
QMEG 4 - Formát ramdisku a speciální volby - viz 9.4.

1006 ($03EE) PBLOCK
V QMEGu 3 určuje blokaci ramdisku:
- 128 ($80) = po Resetu je ramdisk blokovaný

1007 ($03EF) TYPEA
QMEG 3 - Formát ramdisku - viz 9.4.
(V QMEGu 4 přesunuto do 1005/$03ED)

1008-1015 ($03F0-$03F7) ASSIGN
Tabulka disků (tj. režimy nastavené v QMEG menu) - viz 9.4.

1017 ($03F9) ROMCSM
Kontrolní hodnota (checksum) pro celý QMEG OS.

1018-1020 ($03FA-$03FC)
QMEG nevyužívá - k dispozici uživateli.

12. Kompatibilita se softwarem

QMEG funguje s většinou programů určených pro ATARI XL a XE. QMEG 4 má přitom kompatibilitu ještě vyšší, díky odstranění některých rozdílů ve využití prvního kilobytu paměti (viz 9).

Přesto se může stát, že některé programy s QMEGem fungovat nebudou nebo budou fungovat nesprávně. To může být způsobeno některou z následujících příčin:

13. Závěr

Tak. Naše společná cesta do nitra populárního alternativního operačního systému QMEG dospěla k závěru. Věřím, že i vám, čtenářům, přinesla nejedno nové poznání. Já se přiznám, že jsem se toho dověděl v průběhu sbírání materiálu a psaní opravdu hodně, a to nejen o samotném QMEGu.

Přesto, že jsem se maximálně snažil informace ověřovat, ne vždy se to podařilo. Také informační zdroje nehovořily vždy jednotně, a to ani v případě samotného autora, se kterým jsem některé pasáže osobně diskutoval. Proto se za případné nepřesnosti, které se do textu mohly vloudit, omlouvám. Budu rád za zpětnou vazbu.

Pevně doufám, že se podařilo dosáhnout prapůvodního cíle, totiž zodpovědět otázku, jaký je vlastně rozdíl mezi QMEGem 3 a verzí 4, a tím pádem se kvalifikovaně rozhodnout, zda má smysl přejít na "čtyřku" nebo zůstat u "trojky".

Bohdan Milar

14. Zdroje

[1] Atari XL/XE QMEG Operating System. 1990. Flop, Rožnov pod Radhoštěm
[2] Ramdisk (práce s rozšířenou pamětí); R. Kudla, Z. Burian, L. Burian. 1992. Flop, Rožnov pod Radhoštěm
[3] Zpravodaj Atari klubu - příloha XI; P. Jandík. 1989. Atari klub Praha
[4] Adresy paměti počítačů ATARI 600 XL/800 XL 1; P. Dočekal. 1987. ČSVTS OKP Liberec
[5] Adresy paměti počítačů ATARI 600 XL/800 XL 2; P. Dočekal. 1987. ČSVTS OKP Liberec
[6] Quarter-Mega Plus Operating System; S. Dorndorf. 1997
[13] Atari zpravodaj 2/1991. 1992. Atari klub Olomouc
[14] Flop Bulletin 2/91. 1991. Flop, Rožnov pod Radhoštěm
[15] Flop Bulletin 2/93. 1993. Flop, Rožnov pod Radhoštěm
[16] AK-SEZAM, sv. 3/92. 1992. EXMINSY Praha
[17] http://atariki.krap.pl/index.php/QMEG_OS