Přejít na obsah
ARCHIVEKArchiv e-mailových konferencí o 8bitových počítačích Archiv Pandory 1999 až 2013

Původní podoba příspěvku

Petr Žydek Zpět na příspěvek

Surová data tak, jak byla v roce 2013 stažena z Pandory (HTML zdroj bez úprav, osobní e-mailové adresy jsou maskované).

<!-------------------------------------------------------------->
<table width="100%"><tr><td align="left" valign="middle"><B>Detailní popis RD Müller 256KB:</B></td><td align=right valign="middle"></td></tr></table><BR><p>Ramdisk Müller 256KB</p> <p>Tato varianta ramdisku umí prakticky<br/>vše: režim SRAM (porty F8h..FAh), režim<br/>RD pro basic (porty EAh..EBh), v obou<br/>případech se aktuální adresa inkrementuje<br/>po každém čtení/zapsání bajtu. Vždy jen<br/>jedna 64KB stránka je aktivní, je určena<br/>zápisem hodnoty na port E9h (úspěšně<br/>tak funguje v systému LAMAČ CP/M).<br/>Standardní podprogramy pro obsluhu SRAMu<br/>s více jak 64KB paměti nepočítají (taktéž<br/>v basiku), proto není žádoucí, aby při<br/>přetečení adresního ukazatele z FFFFh na<br/>0000h došlo k přenosu do registru stránek.<br/>Obslužný program v basiku či v ROM (pro<br/>práci se SRAM), by pak byl zmaten, protože by<br/>postrádal data naposledy v ramdisku uložená.<br/>Navíc se význam jednotlivých bitů ve stránkovém<br/>registru (port E9h) liší podle jednotlivých<br/>mutací ramdisku, zda se jedná o verzi 256KB,<br/>512KB, 1MB a výše se statickými paměťmi nebo<br/>zda se jedná o můj univerzální koncept se<br/>čtyřmi paticemi pro SIMM 30 pinů (bude<br/>vysvětleno později). Naopak je žádoucí, aby<br/>při resetu adresy ramdisku došlo i k resetu<br/>stránkového registru, funkčnost 64KB podmnožiny<br/>z kapacity ramdisku je tím zajištěna, toto<br/>je u Müllera ošetřeno (týká se Basicu a ROM SRAM<br/>přístupu - nadále nebudu zmiňovat).</p> <p><br/>Ramdisk má celkem 22 obvodů s čísly U1..U22<br/>(schéma dodám). Obvod U1 74LS245 je obousměrný<br/>třístavový zesilovač, výstupy má trvale otevřené<br/>(pin 19=LOW), směr dat ovládá pin 1 (DIR),<br/>kromě operací čtení z ramdisku je orientován<br/>směrem z MZ800 do periferie (tj. pro operace<br/>zápisu a doby, kdy je ramdisk pasivní).<br/>Hodnoceno dnes bychom řekli, že není nezbytně<br/>nutný, napájí dva čítače pro dolní část adresy<br/>ramdisku a stránkový registr, paměti mají datové<br/>piny třístavové, zátěž není tak hrozná. Navíc<br/>tento obvod v Sharpu existuje, je určen právě<br/>pro posílení datové sběrnice, jejíž vodiče<br/>vystupují na MZ sloty.</p> <p>Obvody U2..U5 74LS193 jsou binární čítače,<br/>které udržují 16ti bitovou adresu do paměti<br/>ramdisku, po každé operaci čtení/zápisu nejníže<br/>postavený U2 inkrementuje. Při přetečení hodnoty<br/>z 1111 binárně se přičítá jednotka na čítači,<br/>který tvoří vyšší půlbajt v rámci 16ti bitové<br/>adresy ramdisku (pin CO\' z U2 je připojen na<br/>UP z U3, pin CO\' z U3 je připojen na UP z U4 atd.,<br/>toto neplatí pro nejvýše postavený U5). V režimu<br/>SRAM se provádí nulování adresy ramdisku hodnotou<br/>HIGH na všech vstupech 14 (CLR). Předvolba adresy<br/>ramdisku proběhne při "šestnáctibitovém" zápisu<br/>na port EBh, aktivují (hodnota LOW) se při tom<br/>piny 11 (LOAD\'). Piny 4 (DN) se pull up rezistorem<br/>povýší na hodnotu HIGH, aby nedošlo k náhodnému<br/>podnětu k čítání o jedničku dolů (rušivé vlivy).<br/>Na výstupy čítačů lze pohlížet jako na čtyři<br/>čtyřbitové registry, data na nich trvají, dokud<br/>nejsou přepsána. Výstupy z U2 a U3 vedou na osm<br/>vstupů obvodu U8 74LS257, výstupy z U4 a U5<br/>vedou na osm vstupů obvodu U9. Tyto dva<br/>multiplexory zajišťují, aby se 16 bitů adresy<br/>ramdisku objevilo na všech adresních vstupech<br/>pamětí jako dvě osmice po sobě, přepínání se děje<br/>signály A non/B (piny 1 obou 74LS257).<br/>Čítače 74LS193 jsou nezbytné a nenahraditelné<br/>ve všech mutacích ramdisku. Existují sice<br/>osmibitové verze čítačů, mají ovšem společné<br/>vstupy a výstupy a jejich oddělení by znamenalo<br/>další IC na desce ramdisku (=žádná úspora).<br/>Můj favorizovaný 74F269 má sice oddělené vstupy<br/>a výstupy, postrádá ale asynchonní reset, což<br/>ho bohužel diskvalifikuje. Obvody 74LS257 mohou<br/>absentovat v mutacích s paměťmi SRAM, tyto mají<br/>samostatně vyvedené všechny adresní vodiče.</p> <p>Obvod U6 74LS138 provádí selekci jednotlivých<br/>funkcí ramdisku. Na výstupu Y7 non dává úroveň<br/>LOW, pokud se na adresové sběrnici vyskytne<br/>hodnota v intevalech xxE8h..xxEBh a xxF8..xxFBh.<br/>Je proto doplněn druhým 74LS138 (U7) v kaskádě.<br/>Jeho výstupy se provádějí jednotlivé operace<br/>s ramdiskem (aktivní v nule):<br/>-Y1\' ... zápis bajtu v režimu RD i SRAM,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inkrement adresy (vykonává U16)<br/>-Y2\' ... zápis na port E9h<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (výběr stránky ramdisku)<br/>-Y3\' ... zápis na port EB<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (předvolba adresy ramdisku)<br/>-Y4\' ... po instrukci in F8h proveden reset<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adresy ramdisku (čítače se resetují<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hodnotou HIGH, proto výstup Y4\' vede<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nejprve na invertor tvořený tranzistorem<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Q1 a dvěma rezistory, původní typ<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KSY71 dnes zastoupí např. BC238)<br/>-Y5\' ... čtení bajtu v režimu RD, inkrement<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adresy (vykonává U16)<br/>-Y6\' ... čtení bajtu v režimu SRAM, inkrement<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adresy (vykonává U16)<br/>Poznámka: diody D1,2 fungují jako logický člen<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AND, provádění instrukce in EAh totiž<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aktivuje výstup Y5\', zatímco provádění<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; instrukce in F9h aktivuje výstup Y6\';<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; důsledkem obojího má být čtení bajtu<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z ramdisku a provedení inkrementu<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adresy (pokud by byly vývody Y5\' a Y6\'<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spojeny přímo, hrozil by zkrat mezi<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nimi při přechodu jednoho z nich <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do hodnoty LOW)<br/>Tyto obvody by bylo možné nahradit jedinou vhodně<br/>naprogramovanou pamětí PROM/EPROM (odpadají<br/>teoreticky všechny pomocné diskrétní prvky).</p> <p>Paměť ramdisku má 256KB přístupných jako čtyři<br/>jednotlivé stránky po 64KB (osm obvodů 4464:<br/>U10..U15, U18, U19).<br/>Na každé "dvojče" lze pohlížet jako na<br/>"onboard" modul 64KB: do obou pamětí vedou<br/>multiplexní adresové vodiče A0..A7, dvě<br/>čtveřice datových vodičů tvoří dohromady osm<br/>bitů dat, spojeny jsou i vývody OE\' (hodnota<br/>LOW otvírá výstupy pamětí pro čtení) a WE\'<br/>(hodnota LOW se uplatňuje při zápisu).<br/>Nová koncepce se SIMMy 30 pinů počítá se čtyřmi<br/>paticemi osaditelnými vždy shodnými moduly<br/>256KB, 1MB, 4MB; počet osazených patic se může<br/>lišit, lze tak snadno docílit nejrůznějších<br/>kapacit ramdisku: 256, 512, 768KB, 1MB, 2MB,<br/>3MB, 4MB, 8MB, 12MB, 16MB (bude předmětem<br/>vývoje).</p> <p>Obvod U17 74LS193 slouží jako registr stránky<br/>ramdisku, nevyužívá se jeho schopnost čítání.<br/>Při zápisu na port E9h jsou významné jen<br/>nejnižší dva bity: out E9h=00h, out E9h=04h,<br/>out E9h=FCh, ve všech těchto příkladech je<br/>vybrána nultá stránka ramdisku.<br/>Dva výstupy QA,B obvodu U17 jsou přivedeny<br/>na dva vstupní vývody jedné poloviny<br/>obvodu U20 74LS139. Dvoubitová vstupní<br/>informace (jedna ze čtyř možností: 00b, 01b,<br/>10b, 11b) se objeví jako hodnota LOW na jediném<br/>ze čtyř výstupů Y0\'..Y3\'. Je to jakýsi<br/>"chip select" příslušné stránky ramdisku.<br/>Dynamické paměti ovšem žádný vstup CS\' nemají,<br/>čtení/zápis se ovládá signály OE\' a WE\'. Proto<br/>na obvod U20A navazuje struktura se dvěma<br/>obvody U21 a U22 (osm logických členů OR<br/>ve dvou IC 74LS32). Je-li např. vybrána nultá<br/>stránka ramdisku, pak se hodnota LOW objeví<br/>na jednom ze vstupů dvou hradel OR (piny 1,5<br/>obvodu U21). Následný požadavek na čtení nebo<br/>zápis vystoupí jako hodnota LOW jen piny 3 resp.<br/>6 obvodu U21A. Ostatní paměti (stránky ramdisku)<br/>mají v té době vstupy OE\' i WE\' na hodnotě HIGH.<br/>Tato část ramdisku se liší podle povahy pamětí<br/>(statické/dynamické) a podle celkové kapacity,<br/>na odlišnosti bude poukázáno při popisu<br/>jednotlivých variant.</p> <p><br/>Obvod U16 74188 je bipolární paměť PROM<br/>s organizací 32x8. Na základě informace<br/>na adresních vodičích A0..A4 vykonává celou<br/>řadu operací s ramdiskem uvedením příslušných<br/>výstupních vývodů (D0..D7) na hodnotu LOW.<br/>Význam vstupů paměti (vše aktivní v nule):<br/>-A0: požadavek na zápis do ramdisku<br/>-A1: požadavek na čtení z ramdisku<br/>-A2: signál procesoru M1\'<br/>-A3: signál procesoru MREQ\'<br/>-A4: zavádí zpětnou vazbu z výstupu paměti D2\'<br/>&nbsp;&nbsp;&nbsp;&nbsp; (vedeno přes druhou polovinu obvodu U20<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 74LS139, uplatní se při čtení/zápisu)<br/>Význam výstupů paměti:<br/>-D0: signál UP\' pro autoinkrement adresy<br/>-D1: neobsazeno<br/>-D2: signál MUX\' pro multiplexory 74LS257, také<br/>&nbsp;&nbsp;&nbsp;&nbsp; mění hodnotu na vstupu A4<br/>-D3: signál OE\' pro čtení z paměti ramdisku,<br/>&nbsp;&nbsp;&nbsp;&nbsp; filtrován obvody 74LS32<br/>-D4: neobsazeno<br/>-D5: signál RAS\' pro refresh a zavádění adresy<br/>&nbsp;&nbsp;&nbsp;&nbsp; ramdisku<br/>-D6: signál CAS\' pro refresh a zavádění adresy<br/>&nbsp;&nbsp;&nbsp;&nbsp; ramdisku<br/>-D7: signál WE\' pro zápis do paměti ramdisku,<br/>&nbsp;&nbsp;&nbsp;&nbsp; filtrován obvody 74LS32<br/>Obvod 74188 + polovina 74LS139 není zapotřebí<br/>v ramdisku s paměťmi SRAM (nevyžadují<br/>občerstvování - refresh, ani multiplexovanou<br/>adresu). Ve variantě se SIMMy 30 pinů se uplatní<br/>v podstatě shodně jako v popisu výše.</p> <p>Za výchozí lze považovat stav, kdy je na všech<br/>vstupech PROMky hodnota HIGH (11111 binárně).<br/>Tehdy je na všech výstupech hodnota 11111111b.<br/>Celá paměť obsahuje hodnoty 11111111b kromě<br/>následujících (adresa: data):<br/>&nbsp;01101: 10010010<br/>&nbsp;01110: 00011010<br/>&nbsp;10011: 10011111<br/>&nbsp;10111: 10111111<br/>&nbsp;11011: 10111111<br/>&nbsp;11101: 11010010<br/>&nbsp;11110: 01011010</p> <p>Funkce PROMky podrobně<br/>Nejprve pár slov o občerstvování dynamických<br/>pamětí (dále jen refresh). Klasický princip<br/>refreshe vypadá takto:<br/>1) CPU nebo jiný pověřený obvod vyšle hodnotu<br/>&nbsp;&nbsp; na A0..A7<br/>2) Krátce je aktivován signál RAS\'<br/>3) Na A0..A7 se objeví hodnota o jedničku větší<br/>&nbsp;&nbsp; než v předchozím případě<br/>4) Krátce je aktivován signál RAS\'<br/>5) Znovu k bodu 2, atd., pořád dokola<br/>Tento (RAS only refresh) princip není možné<br/>uplatnit, protože hodnota na výstupech<br/>z multiplexorů 74LS257 (A0..A7) je statická<br/>(není-li prováděna I/O operace s ramdiskem).<br/>Lze ale výhodně použít princip "CAS before<br/>RAS refresh":<br/>1) CAS\' přejde do LOW<br/>2) CAS\' zůstává LOW, RAS\' přejde do LOW<br/>3) RAS\' i CAS\' přejdou do HIGH<br/>4) Znovu k bodu 1, další refresh cyklus<br/>Celé refreshování spočívá ve správné<br/>manipulaci s oběma signály, "CAS before<br/>RAS refresh" využívá autoinkrement vnitřního<br/>čítače, v tomto případě není nutné<br/>správnou hodnotu na A0..A7 udržovat.<br/>Zvolený způsob funguje bezchybně v originálním<br/>zapojení ramdisku, teoreticky by měl být<br/>bezchybný i v ramdisku se SIMMy.<br/>Příklad:<br/>-mějme modul SIMM 4MB se dvěma paměťmi HYB5117400<br/>&nbsp;(paměti mají organizaci 4Mx4)<br/>-v katalogových údajích součástky stojí:<br/>&nbsp;refresh 2K, 32ms<br/>-jde o to, aby proběhlo 2048 refresh cyklů<br/>&nbsp;do 32 milisekund<br/>-předpokládejme procesor, který vykonává stále<br/>&nbsp;dokola jedinou "dlouhou" instrukci<br/>-instrukce call xxxx by měla trvat 17 taktů,<br/>&nbsp;což při frekvenci CPU 3.5469MHz činí 4.79us<br/>-signál M1\' (který iniciuje refresh cyklus)<br/>&nbsp;tak přejde do LOW každých 4.79us, 2048<br/>&nbsp;cyklů by tedy mělo proběhnout za 9.82ms<br/>-na refreshování by měly reagovat všechny<br/>&nbsp;paměti ve všech modulech SIMM současně,<br/>&nbsp;RAS\' i CAS\' vede z PROM do všech čipů<br/>-je-li tato domněnka správná, je vyhráno,<br/>&nbsp;pokud se jedná o dosažení teoreticky<br/>&nbsp;maximální kapacity ramdisku</p> <p>Praktická realizace refreshe PROMkou:<br/>-je-li signál M1\' na vstupu A2 LOW,<br/>&nbsp;je adresa PROM 11011b ---&gt; CAS\' přejde<br/>&nbsp;do LOW (data na výstupu PROM jsou 10111111b)<br/>-je-li signál MREQ\' na vstupu A3 LOW,<br/>&nbsp;je adresa PROM 10111b ---&gt; CAS\' přejde<br/>&nbsp;do LOW (data na výstupu PROM jsou 10111111b)<br/>-jsou-li oba signály M1\' a MREQ\' LOW,<br/>&nbsp;je adresa PROM 10011b ---&gt; CAS\' i RAS\' je<br/>&nbsp;LOW (data na výstupu PROM jsou 10011111b)<br/>-signály M1\' a MREQ\' samozřejmě generuje<br/>&nbsp;procesor, PROM je jen vhodně transformuje</p> <p>Čtení z paměti ramdisku<br/>-vývod A1 PROMky přejde do LOW, adresa<br/>&nbsp;PROM je 11101b<br/>-na výstupech PROMky je 11010010<br/>-sestupnou hranou RAS\' paměť převezme první<br/>&nbsp;část adresy (osm bitů adresy připravených<br/>&nbsp;na výstupech multiplexorů 74LS257), RAS\'<br/>&nbsp;zůstává LOW<br/>-signály UP\', MUX\', OE\' přejdou do LOW<br/>-hodnota LOW se objeví na A4 PROMky<br/>&nbsp;s určitým zpožděním způsobeným průchodem<br/>&nbsp;obvodem U20B 74LS139 (je-li pin 15 G\'<br/>&nbsp;LOW, pak je Y0\' LOW, jelikož oba vstupy<br/>&nbsp;A, B jsou trvale LOW; obvod má jen<br/>&nbsp;funkci "zpožďovače" signálu MUX\')<br/>-přechod signálu MUX\' do LOW způsobí přepnutí<br/>&nbsp;multiplexorů 74LS257, adresa PROMky se změní<br/>&nbsp;na 01101b<br/>-na výstupech PROMky je 10010010<br/>-sestupnou hranou CAS\' paměť převezme druhou<br/>&nbsp;část adresy (druhých osm bitů adresy<br/>&nbsp;připravených na výstupech multiplexorů<br/>&nbsp;74LS257 je-li MUX\' LOW), RAS\' i CAS\'<br/>&nbsp;zůstávají LOW<br/>-na datových vodičích pamětí (aktivní stránky<br/>&nbsp;ramdisku) se objeví platná data<br/>-v poslední fázi vykonávání instrukce procesoru<br/>&nbsp;in F9h (EAh) přejde A1 PROMky do HIGH<br/>-všechny výstupy PROMky přejdou do HIGH,<br/>&nbsp;vzestupnou hranou OE\' (odpovídá RD\' z CPU) <br/>&nbsp;procesor převezme bajt z pamětí ramdisku,<br/>&nbsp;vzestupná hrana UP\' zajistí inkrement adresy<br/>&nbsp;ramdisku, multiplexory 74LS257 přepnou na<br/>&nbsp;prvních osm bitů adresy (A non/B je v HIGH)<br/>-čtení bajtu je ukončeno, ramdisk je pasivní,<br/>&nbsp;na popud M1\' a MREQ\' probíhá jen refresh</p> <p>Zápis do paměti ramdisku<br/>-postup odpovídá popisu čtení z ramdisku<br/>&nbsp;z předchozího odstavce, je zřejmé, že hodnoty<br/>&nbsp;na vstupech a výstupech PROMky se liší a<br/>&nbsp;aktivní je signál WE\' a nikoliv OE\'</p> <p>&nbsp;</p> <p>další příspěvky:<br/>-realizace ramdisku s paměťmi SRAM 61512<br/>&nbsp;64KB (64, 256, 512KB, 1MB)<br/>-realizace ramdisku s paměťmi SRAM 512KB<br/>-realizace ramdisku s moduly SIMM až<br/>&nbsp;do celkové kapacity 16MB<br/>Všechny následné návrhy předpokládají<br/>znalost referenčního Müllera 256KB,<br/>ze kterého vychází.</p> <p>Petr de Zviqov<br/></p>