Konference: Počítač SHARP MZ-800 a emulátory
Od: | Petr Žydek |
Datum: | 21.4.2004 11:20 |
Předmět: | o ramdiscích obecně I. |
o ramdiscích obecně I.: |
Ramdisk - základní pojmy a definice
Ramdiskem rozumíme paměťové zařízení
na bázi polovodičových součástek (na
rozdíl od hard či floppy disku).
Komunikace s ním probíhá skrze
instrukce vstupu a výstupu (I/O
porty).
Existují dva různé režimy ve kterých
může ramdisk v Sharpu pracovat:
-režim SRAM se sekvenčním přístupem
(označovaný též jako sériová paměť)
-režim "ramdisk pro basic" s libovolným
přístupem (v basiku se zařízení
označuje jako RAM:), já ho budu nazývat
režim RD
Nejjednodušší exempláře (64KB) uměly režim
RD využitelný jen pro basic MZ800, neuměly
ani "auto inkrement" - každému čtení/zápisu
muselo předcházet nastavení 16ti bitové
adresy do ramdisku.
Originální 64KB Sharp ramdisk uměl režim
RD včetně "auto inkrementu" (po každém
čtení/zápisu se adresa v ramdisku zvětšila
o jednotku, nebylo nutné ji zavádět zvlášť),
ovšem neuměl režim SRAM. Nikdy jsem neviděl
64KB verzi ramdisku, která by uměla "auto
inkrement" a oba režimy.
Tato myšlenka se uplatňuje až u verzí
ramdisku s vyššími kapacitami (existovaly
o kapacitách 256KB, 512KB, 1MB).
Jak rozpoznat schopnosti ramdisku?
-úspěšné provedení basikovského příkazu
INIT"RAM:$FFFF" signalizuje funkčnost
režimu RD
-je-li ramdisk schopen plnit funkci SRAMu,
ihned po zapnutí nám ROM monitor hlásí
SRAM:Check sum err (pokusí se ihned nahrát
a spustit program, který tam samozřejmě
nemůže být, není-li to verze se zálohovanou
statickou pamětí)
Porty režimu SRAM
- in F8h ... vynulování adresy SRAMu (platí
i pro režim RD a je-li ošetřeno
hardwarově, nastavuje nultou
stránku u exemplářů s více než
64KB paměti)
- in F9h ... čtení bajtu na aktuální adrese,
adresa se zvětší o jednotku
- out FAh .. zápis bajtu na aktuální adrese,
adresa se zvětší o jednotku
Porty režimu RD
- out EBh .. registr dolní části adresy, horní
část adresy se posílá při istrukci
OUT (C),A horní polovinou adresové
sběrnice, př.:
LD A, "dolní část adresy"
LD B, "horní část adresy"
LD C, EBh
OUT (C),A
- out EAh .. čtení/zápis bajtu na zvolené adrese,
i zde by měl fungovat "auto inkrement"
- out E9h .. nevím, kdo jej zavedl, ale má přímo
strategický význam pro všechny ramdisky
s více než 64KB paměti (reaguje naň
LAMAČ CP/M), jeho 8 bitů dává možnost
rozlišit až 256 stránek po 64KB, to
jest 16MB paměti), v případě mého
ramdisku "Müller" jsou významné jen
dva nejnižší bity:
OUT E9=00h ... 0. stránka ramdisku
OUT E9=01h ... 1. stránka ramdisku
OUT E9=02h ... 2. stránka ramdisku
OUT E9=03h ... 3. stránka ramdisku
Müller má čtyři 64KB bloky, každý je tvořen
dvěma paměťmi 64Kx4, příslušný out E9h povolí
operace čtení a zápisu jen jedinému "dvojčeti"
(bude podrobně vysvětleno v popisu příště).
Jen dodám, na čem jsem úspěšně otestoval dvě
"plovoucí" paměti 1Mx4 (taková ta mini redukce),
proběhlo 48 hodinové zahořování čtyřmi většími
herními programy. Každý z nich byl nahrán
z kazety do jedné ze stránek ramdisku příkazem
monitoru:
-RxL (x je od 1 do 4)
např. R1L, čti: ramdisk 1 load
Pak docházelo k náhodnému spouštění programu
z libovolné stránky ramdisku:
-reset Sharpa s držením klávesy M
-RxS (x je od 1 do 4)
např. R2S, čti: ramdisk 2 spusť
Hra ze zvolené stránky ramdisku se natáhla
do paměti stejným způsobem jako z kazety
a spustila se. Nejhorší je to pravidelné
resetování a spouštění her, ale v noci jsem
to nedělal...
Poznámka: příkaz monitoru R a jeho syntaxi
jsem vymyslel a začlenil do ROM při jediném
záplatování chyb v roce 1990 (dle doporučení
disassemblářů z Brna, mám brožury z roku 87)
příště:
-velmi detailní popis Müllera 256KB
-teoretický nástin ramdisku se čtyřmi moduly
SIMM 30pin s jedním, dvěma, třemi, čtyřmi
moduly 256KB, 1MB, 4MB (základ vychází
z Müllera)
-nástin ramdisku 256KB, 1MB se statickými
RAM 61512 DIP32 (ze starších PC)
-nástin ramdisku se statickými RAM 512KB SMD
až do 16MB
-srovnání koncepcí, výhody/nevýhody,
koexistence s HDD a RTC na jedné desce
Už něvládzem, je 23:50
Petr de Zviqov
Ostatní příspěvky vlákna:
[2004/1 (1)] [2004/2 (1)] [2004/4 (33)] [2004/5 (34)] [2004/6 (12)] [2004/7 (1)] [2004/8 (12)] [2004/9 (31)] [2004/10 (52)] [2004/11 (43)] [2004/12 (4)]