clanky/pamet-cmos

Paměť CMOS k ZX Spectrum

ing. PAVEL STREJČEK

Rozšíření ZX Spectrum o další paměťovou kapacitu již bylo popsáno v řadě časopisů. Snahou je buďto prosté zvětšení paměti využívané speciálními programy, nebo rozšíření paměti RAM na daných 64 kB s univerzálním využitím.

Druhý způsob je v oblibě hlavně pro možnost výhledového připojení disketové jednotky s operačním systémem CPM a v současnosti alespoň pro možnost využívání programů konfigurovaných pro tento systém. Nevýhodou je nutnost úpravy vnitřního zapojení počítače.

Popisované řešení má zcela jiny cíl. Využívá moderní dovážené paměti CMOS RAM 8 kB nebo 32 kB k realizaci trvalé externí paměti o kapacitě až 64 kB. Ta slouží k náhradě magnetofonu pro zavádění programů. Obvody jsou umístěny spolu s třemi tužkovymi články na přídavné desce připojované přes standardní konektor k ZX Spectrum. Vznikne tak sestava vhodná k řízení různých měřících přístrojů nebo jednodušších technologických zařízení. Díky rozsáhlému programovému vybavení počítače lze uživatelské programy poměrně snadno dotvát během oživování výsledného zatízení. Odpadají známé obtíže při provádění změn v systémech s pamětmi EPROM. Při tom lze vysledné programy po zapnutí spouštět jedinym tlačítkem bez psaní na klávesnici, a proto i bez nutnosti mít trvale připojený televizor.

Jinou aplikací je trvalé umístění často používaných programů do externí paměti. Příkladem je textový editor D-WRITER. Program může být do paměti zpětně ukládán před vypnutím počítače včetně rozpracovaného textu. V psaní je pak možno pokračovat kdekoliv, kde je k dispozici televizor. Teprve po dokončení textu je možno donést počítač k tiskárně a výsledek práce vytisknout.

Schéma přídavné desky je na obr. 1. Zapojení bylo postupně rozšiřováno z původní varianty A o kapacitě paměti 16 kB na variantu B o kapacitě 32 kB a posléze na variantu C o kapacitě 64 kB. Poslední varianta je na schématu. Existuje zde rezerva pro další zdvojnásobení kapacity paměti buďto s obvody EPROM nebo CMOS-RAM. Pro připojení periferních zařízení je použit obvod I01 MHB8255. Je adresován obvyklým způsobem - 31, 63, 95, 127. Čtyři výstupy brány C jsou určeny k ovládání paměti CMOS, ovšem pouze v době zavádění programu do pracovní paměti počítače. Potom je možno přepínačem P1 zablokovat zápis do externí paměti a obvod MHB8255 je možno využívat takřka bez omezení. Přepínač P1 je určen pouze pro zvýšení bezpečnosti zápisu. Programové blokování zápisu je kromě toho prováděno vystupem 3 brány C a to i při vypnutí počítače. Odpory v tomto obvodu umožňují snímat i stav přepínače P1.


Obr.1. Schema paměti CMOS-RAM

IO1          MHB 8255
IO2, IO3     MH 3205
IO4          MH 74LS00
IO5          MH 74ALS04
IO6, IO7     MH 62256 (32x8 CMOS-RAM)
D1 až D7     KA 221
D8, D9       LQ 1101
P1           přepínač s trvalou polohou
RESET, NMI   tlačítkové mikrospínače   

Zapojení pro všechny tři varianty se v zásadě liší pouze přepínáním jednotlivých sekcí 16 kB pomocí výstupu PCO a PC1 obvodu I01 a dekodéru I03. Při použití pamětí 8 kB zůstává beze změny zapojení datových i adresových vodičů I06 a I07. Změna nastane pouze v místě výběru jednotlivých obvodů a v připojení adresy A13 provádějící výběr sekcí 8 kB. V dalším výkladu budeme vycházet z funkce varianty C dle obr. 1.

Stisknutím tlačítka NMI se překlopí dvojice hradel I09a a I04b do stavu, kdy je blokován přístup k vnitřní paměti ROM. Od adresy 66H se v externí paměti rozběhne manipulační program provádějící rozmístění zvolených programů do pracovní paměti ZX Spectrum. Po skončení tohoto programu je řízení předáno buďto do systému, nebo do uživatelského programu. Pro start s prázdnou pamětí počítače slouží tlačítko RESET. Obě tlačítka provádějí svoji původní funkci a současné přepnutí paměti ROM, popř. externí paměti. Souběžně k tlačítkům jsou připojeny výstupy 01 a 03 obvodu I02 umožňující přepínat rovněž paměť ROM nebo externí RAM, avšak bez přerušení probíhajícího programu. Je to zajištěno instrukcemi OUT 73H popř. OUT 77H.

Při uspořádání přepínače vnitřní a vnější paměti bylo pamatováno i na možnost zápisu programů z magnetofonu přímo do externí paměti CMOS. Může to byt využíváno při zavádění základního manipulačntho programu, ale zjednodušuje to i obsluhu při dalších aplikacích přídavné paměti. Při volbě externí RAM nastává totiž blokování ROM pouze při čtení. Zápis je prováděn paralelně do ROM i externí RAM, data ovšem zůstanou pouze v externi RAM. Operační systém tento režim připouští. Čteme-li z magnetofonu programy ve strojním kódu, které jsou úpravou hlavičky adresovány do oblasti O až 16 kB, nastává automaticky zápis do externí paměti i v případě, že je zvoleno čteni z ROM. Podmínkou je, aby programem i přepínačem P1 byl povolen zápis. Podobně je možno například programem GENS ukládat přeloženy kód přímo do stínové paměti CMOS. Funkce je obvodově zajištěna odporem 680 Ω a diodou D1 v místě přenosu signálu RD.

Z předchozího je zřejmá základní funkce obvodové části. Dále zbývá upozornit na některé detaily zapojení. Paměť CMOS je napájena ze zdroje 5 V, nebo z baterie 4,5 V, přes oddělovací diody. Vezmeme-li v úvahu úbytek napětí na diodách, je napájecí napětí mimo technické podmínky. Data jsou však při zavedení do pracovní paměti počítače kontrolována a při provozu se nevyskytly chyby ani při napětí baterie 3 V. Je zřejmé, že v obvodech tohoto typu jsou oproti technickým podmínkám značné rezervy. Vzhledem k tomu, že zařízení nebude sériově vyráběno, lze podobný režim připustit.

Přechod z pracovního režimu do režimu zachování informace nedělá u pamětí CMOS 8 kB obtíže. Jsou zde vstupy uvolnění CS a /CS. Před vypnutím je nutno programem zajistit CS=0. U pamětí CMOS 32 kB existuje pouze jeden vstup uvolnění /CS. Přechod do stavu uchování informace je zde choulostivější. Experimentálně, bez znalosti podrobného popisu, bylo ověřeno, že při vypínání zdroje lze data zabezpečit zapojením odporů 6,8 kΩ mezi vstup /CS a napájecí napětí paměti.

Předmětem postupných úprav a zdokonalování bylo přepínání jednotlivých sekcí 16 kB paměti a "resetování" použitého přepínače, tj. obvodu MHB8255. Jak již bylo uvedeno, k přepínání jsou využity výstupy PCO a PC1 tohoto obvodu. Existující čtyři kombinace umožňují vybrat jednu ze čtyř sekcí 16 kB. Výstup PCO připojeny k adrese A14 určuje příslušnou polovinu paměti v daném pouzdře a PC1 vybírá jeden ze dvou použitých paměťových obvodů pomocí vystupů 00 a 01 dekodéru MH3205. Na výstupu dekodéru jsou dva rezervní vodiče určené k připojení dalších až 64 kB paměti. Při rozšíření není vyloučena možnost použít paměť EPROM, neboť většina vyvodů souhlasí s pamětmi CMOS. V tom případě je vhodné zajistit při "resetování" systému možnost přepínání výchozí sekce přídavné paměti mezi CMOS RAM a EPROM.

Sekce 16 kB paměti zvolená dle předchozího odstavce, je připravená jako stínová paměť k paměti ROM. Vlastni přepnutí stínové paměti je prováděno obvodem I02, tj. instrukcí OUT 77H a zpětné přepnutí instrukcí OUT 73H. Poněkud nelogické rozdělení způsobu ovládání na dvě samostatné výstupní cesty, volbu stránky a vlastní přepnuti stínové paměti je dané souvislosti s variantou A, kde odpadne obvod I01 a vše se značně zjednoduší.

Při startu systému pomocí tlačítka NMI je nutno zajistit volbu výchozí stránky externí paměti a kromě toho nastavit blokování zápisu do této paměti. Po "resetováni" obvodu I01 jsou výstupy ve stavu vysoké impedance. Pomocí odporů připojených k PCO až PC2 a dále spojených s logickou O nebo 1 je zvolena sekce 16 kB, v níž se rozbíhá program. Po inicializaci obvodu MHB8255 se nastaví na výstupech brány PC logická O. Program pro inicializaci tohoto obvodu proto nesmí být ve stínové paměti, pokud nezvolíme připojení odporů k logické O. V opačném případě by nastalo nežádoucí přepínání stránek. Tímto mechanismem je zároveň odůvodněno samostatné vyvedení cesty pro přepínání stínové paměti pomocí I02. Program ve výchozí stránce nevyžaduje inicializaci obvodu MHB8255 a je usnadněno přepínání mezi stínovou pamětí a ROM. V připojeném programu je předkládáno připojení odporů k logické 1.

Podobně jako při stránkování je nutno zajistit po stisknutí tlačítka NMI blokování zápisu pomocí brány PC3. Zde je odpor 3,3 kΩ připojen k logické O proto, aby ani po inicializaci obvodu MHB8255 nemohlo dojit k zrušení blokování. Data v paměti CMOS jsou tak lépe chráněna. Zde je nutno upozornit na nepříjemnou vlastnost operačniho systému v ROM. Při některých příkazech přepisuje prvních pět míst v externí paměti. Přístup do externi paměti nelze proto provádět pomocí instrukcí jazyka Basic. V tomto jazyce nelze provést odblokování zápisu pomocí PC3, je však možno spouštět libovolné podprogramy ve strojním kódu končícím zablokováním zápisu do externí paměti.

Na závěr popisu obvodové části uvádím ještě praktickou zkušenost týkající se stability dat uložených v paměti CMOS. Data zůstávají bez chyby při odpojení paměti od konektoru ZX Spectrum a v tomto stavu bylo prováděno i pájení přepínacích spojek pomocí mikropájky. Přesto bezpečnost zachování dat nelze srovnávat s pamětí EPROM. Chyba se vyskytuje v průměru jednou za týden a při této četnosti nelze spolehlivě určit, zda byla způsobena elektrickou poruchou, nebo chybnou manipulaci s programy.

K popsanému obvodovému uspořádání byl vytvořen speciální kompresní program umožňující "posbirat" jednotlivé programy, předtím zavedené do pracovní paměti počítače, a uložit je do externí paměti. Komprese zahrnuje i oblast obrazovky a proměnné základního operačního systému pro Basic. Takto zhuštěná data je možno při opětném zapnutí počítače zavést do jeho pracovní paměti stisknutím tlačítka NMI. Program zabírá 500 bajtů na začátku externí paměti. Má i zjednodušenou možnost volit při čtení jeden z osmi záznamů, které mohly být před tím uskutečněny. To ovšem platí pro krátké záznamy. Není možno překročit paměťovou kapacitu 69 kB. Většinou se do paměti vejdou dva velké programy, například D-WRITER a Pascal ve stavu s rozpracovanými menšími datovými soubory. Popsaný program byl používán úspěšně i na verzi A s 16 kB paměti. Výhodou je jednoduchá obsluha. Jedna předvolená sada programů z osmi možných může byt po zapnutí sítě spuštěna jediným tlačítkem.

Z popsaného programu je v připojené tabulce 1. uveden výpis základních podprogramů určenych pro komunikaci s externí pamětí CMOS. K objasnění adresace externí paměti slouží obr. 2. Bloky 16 kB paměti jsou jako stínová paměť adresovány od 0 do 4000H. Podprogramy však provádějí automatické přepínání bloků podle nejvyšších dvou bitů adresy. Vstupní adresace externí paměti může být v plném rozsahu 0 až FFFFH. Podprogramy Docmos a Zcmos jsou pak analogií známých přesunových instrukcí LDIR.


Obr.2. Přenos bloku dat mezi externí pamětí a pracovní pamětí počítače

Na začátku ukázky programu je jeho vlastní transport do pracovní RAM, zde do oblasti vyhražené pro obsluhu tiskárny. Protože program provádí přepínání bloků externí paměti, musí byt mimo oblast 0 až 4000H. V prakticky využívaném systému se jednotlivé podprogramy před použitím přesunují do oblasti obrazovky s předchozím zákazem přerušení. Takovým způsobem je možno ponechat nedotčeny veškerý používaný paměťový prostor ZX Spectrum.

Tabulka 1.

Výpis základních podprogramů pro komunikaci s externí pamětí CMOS

                10 ;****komeram   24.12.1988 ****
                20 ;*****************************
                30 ;  ZAVEDENI PROGRAMU Z CMOS
                40 ;  DO PRACOVNI PAMETI
0000            50        ORG  0
0000 00000000   60        DEFW 0,0
0004 00         70        NOP
0005 F3         80        DI
0006 211400     90        LD   HL,ZCCM+3 
0009 11005B    100        LD   DE,ZACRA 
000C 018000    110        LD   BC,#80
000F EDB0      120        LDIR
0011 C3005B    130 ZACCM  JP   ZACRA
               140 ;ZDE UMISTIT NASLEDDUJICI
               150 ;PRELOZENY STROJNI KOD!!! 
5B00           160        ORG #5B00
5B00 3EBB      170 ZACRA  LD  A,136;INIC.8255
5B02 D37F      180        OUT (127),A
5B04 3EFF      190        LD  A,255;VOLBA 1 CTVRTINY
5B06 D35F      200        OUT (95),A
5B08 C30800    210        JP  #0008;START BASIC
               220 ;****KOMUNIKACE S CMOSRAM*****
               230 ;****CTENI CMOS**** 
               240 ;DE..ADR V CMOS,A..VRACI DATA 
5B0B 7A        250 CMOSRD LD A,D
5B0C E6C0      260        AND #C0
5B0E 07        270        RLCA
5B0F 07        280        RLCA
5B10 2F        290        CPL
5B11 D608      300        SUB #08
5B13 D35F      310        OUT (95),A ;PREPNI KVADRANT
5B15 D5        320        PUSH DE
5B16 7A        330        LD A,D
5B17 E63F      340        AND #3F
5B19 57        350        LD D,A
5B1A D377      360        OUT (#77),A ;PREPNI CMOS
5B1C EB        370        EX DE,HL
5B1D 7E        380        LD A,(HL)
5B1E EB        390        EX DE,HL
5B1F D373      400        OUT (#73),A ;ZPET DO ROM
5B21 D1        410        POP DE
5B22 C9        420        RET 
               430 ;***ZÁPIS DOCMOS*** 
               440 ;DE..ADR V CMOS,A..DATA
5B23 D5        450 CMOSWR PUSH DE
5B24 F5        460        PUSH AF
5B25 7A        470        LD A,D
5B26 E6C0      480        AND #C0
5B28 07        490        RLCA 
5B29 07        500        RLCA 
5B2A 2F        510        CPL
5B2B D35F      520        OUT  (95),A ;PREPNI KVADRANT
5B2D 7A        530        LD   A,D
5B2E E63F      540        AND  #3F
5B30 57        550        LD   D,A
5B31 D377      560        OUT  (#77),A ;PREPNI CMOS
5B33 F1        570        POP  AF
5B34 EB        580        EX   DE,HL 
5B35 77        590        LD   (HL),A
5B36 EB        600        EX DE,HL
5B37 D373      610        OUT (#73),A ;ZPET DO ROM
5B39 D1        620        POP DE
5B3A C9        630        RET
5B3B 00        640        NOP
5B3C 00        650        NOP
               660 ;PRESUN BLOKU CMOS <>RAM****
               670 ;DE ADR V CMOS 
               680 ;HL ADR V RAM/ROM 
               690 ;BC DELKA BLOKU 
               700 ;************** 
5B3D 7E        710 DOCMOS LD A,(HL)
5B3E CD235B    720        CALL CMOSWR
5B41 13        730        INC  DE
5B42 23        740        INC  HL
5B43 0B        750        DEC  BC
5B44 78        760        LD A,B
5B45 B1        770        OR C
5B46 20F5      780        JR NZ,DOCMOS
5B48 C9        790        RET
               800 ;**************
5B49 CD0B5B    810 ZCMOS  CALL CMOSRD
5B4C 77        820        LD (HL),A
5B4D 13        830        INC  DE
5B4E 23        840        INC  HL
5B4F 0B        850        DEC  BC
5B50 78        860        LD   A,B
5B51 B1        870        OR   C
5B52 20F5      880        JR   NZ,ZCMOS
5B54 C9        890        RET 
               900 ;*************** 
               910 ;PRIKLAD:PRENOS 1Q CMOS DO RAM A ZPET
5B55 F3        920 CTENI  DI
5B56 210080    930        LD   HL,#8000
5B59 110000    940        LD   DE,0
5B5C 010040    950        LD   BC,#4000
5B5F CD495B    960        CALL ZCMOS
5B62 FB        970        EI
5B63 C9        980        RET
5B64 F3        990 ZAZNAM DI
5B65 210080   1000        LD   HL,#8000
5B68 110000   1010        LD   DE,0
5B6B 010040   1020        LD   BC,#4000
5B6E CD3D5B   1030        CALL DOCMOS 

Pass 2 errors: 00

Table used:  113  from 299

Kompresní program, ačkoliv Je relativně jednoduchý, představuje již takový přínos, že plně zhodnotí práci vynaloženou na realizaci obvodové části. Ideálním řešením by však byl program umožňující komunikaci s externí pamětí rozšířením instrukcí určených pro vstup a výstup z magnetofonu. Tak by bylo možno ukládat samostatné datové soubory v součinnosti s běžně používanymi programy. To by však vyžadovalo úpravu původní paměti ROM. Obvodové řešení tuto úpravu umožňuje. V první čtvrtině externí paměti je možno nechat pracovat upravený operační systém Basic a zbývající tři čtvrtiny paměti pak mohou sloužit k ukládání dat.

Závěrem je nutno konstatovat, že příznivé a prakticky využitelné vlastnosti předloženého řešení jsou dány převážně použitím nejnovějších pamětí CMOS. Vlastní obvodové uspořádání je možno provést mnoha jinými způsoby. Lákavé by bylo připojení celých 64 kB paměti paralelně, ovšem za cenu mírné úpravy uvnitř počítače. Zde byla důsledně dodržena podmínka dovolující připojit externí paměť k libovolnému počítači.

Obvodové řešení je maximálně zjednodušeno. Vzorem úspory několika dalších integrovaných obvodů jsou obvody uvnitř ZX Spectrum. Po několikanásobných úpravách jak obvodové části tak i obslužného programu byla zlepšena řada detailů. Příkladem je programové blokování zápisu do externí paměti, vyžadující k zrušení až čtyři instrukce. Je proto odolné proti haváriím programů. Jiným příkladem je pět prázdných instrukcí na počátku externí paměti. Dojde-li omylem k jejich přepsání, nevede to nyní k úplnému zničení obslužného programu a uložená data je většinou možno opět získat. To je výsledek praktických pokusů, nikoliv exaktního myšlení. Je ovšem věcí osobního názoru eventuálních realizátorů předloženého řešení, zda začnou znova a lépe, nebo provedou nadstavbu již odzkoušeného.

LITERATURA

  1. Troller, P., Císař, P.: Oprava adresování a zvětšení rozsahu paměti počítače ZX Spectrum. Sdělovací technika 35, 1987, č. 11, s. 417-420
  2. Doležal, J.: Polovodičové paměti SRAM a EPROM. Amatérské rádio 38, 1989, č. 1, s. 18-20

Stránka byla už zobrazena: 320 ×
  Aktualizováno: 3. 5. 2018, 06:02



     psp-ikona.gif, 2 kB    Text to HTML converter and formatter  builder_ikonka.gif, 3 kB
           
  Best Old Games      kabelmanie.gif, 2 kB  root_ico.gif, 2 kB  český diskmag pro počítače ZX Spectrum a kompatibilní
synapse.gif, 4 kB   TuningPC.cz - Vše pro tuning a casemodding vašeho PC        pspad88x31.gif  delphix.gif, 1 kB
sgatlantis_88x31_3.jpg, 4 kB  atlan.gif, 22 kB  arkon.jpg, 12 kB  ico_abeceda.gif, 888B  blog.idnes.cz   
           
       
 
  torry_logo.gif, 4 kB  

Stránka načtena za 0.00282 sekund.