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.
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.
Stránka byla už zobrazena: 320 ×
Aktualizováno: 3. 5. 2018, 06:02
Stránka načtena za 0.00282 sekund.