Tento blogpost sa sice netyka pocitacov zx spectrum alebo didaktik, ale tyka sa HW v oblasti 8bitov a sice, konkretne je rec o Ceskoslovenskom pocitaci PMD85.
Kedysi davnejsie som zohnal PMD85-2A, ale nejako sa mi nedarilo naladit obraz (mozno preto, ze nemam rucne ladenie na TV, ale digitalne). No a composite som tiez nic nevidel.. len cierna obrazovka a nic viac.
Zvedavost mi nedala a otvoril som ho. a co nevidim z jedneho IO vystiepeny kus tak, ze vytrcal kremik. Tak som zacal zistovat ake IO tam ma byt, kde mi poradil Schotek a napisal mi ze to ma byt 7405 a aj ze to bola standardne odchadzana suciastka, ked niekto zle prepojil kable a tak na vystup prave tejto 7405 priviedol +12V a on od radosti zacal rozhadzovat nozickami ;]
Avsak ani po vymene 7405 sa mi obraz na TV s composite vstupom ziskat nepodarilo. No a kedze som v tej dobe (rok 2007) o panoch bratoch Borikovych nic nevedel a ani sindikat este neexistoval, pmd zostalo v skrini na nejaku dobu.
Potom ale prisiel sindikat a ja som niekedy zaciatkom roka 2011 pmd oprasil a zobral na stretnutie. Ikon uz o tom pisal report, tak len v skratke. Najskor to vypadalo na moc velku hodnotu pullupoveho rezistora, a tak bol signal na composite moc slaby na to aby sme nieco videli. Znizenim odporu rezistora na cca 150ohm (povodny rezistor mal hodnotu tusim 390ohm, alebo nieco podobne) sa konecne objavil vytuzeny napis ‚++ Os ready ++‘. Neskor Ikon dostal do opravy iny kus PMD a ten opravoval doma, ale objavili sa unho uplne rovnake syndromy ohladne obrazu na composite. Ikon mi neskor na jabberi oznamil ze prisiel na riesenie problemu, ze ten rezistor bol ok, ze treba jednoducho do vystupu zapojit seriovo 50-100uF kondenzator. Ze aj monitory merkur to tak mali zapojene. A veru mal zasa pravdu, vratil som s5 povodny rezistor a zapojil som kondenzator.
Nuz, ako to uz byva, zrazu ciernobiely composite vystup nestaci. Hlavne, ked vidite ze je na tom 5 koliku zapojenych prilis vela kablikov, aby to bolo len ciernobiele. A tak som dostal od Romana (Borika) linku na dokument „Identifikacia poruch PMD 85“ a zapojenie PMD<->SCART kabla. Zapojil som kabel a co nevidiet, obraz bol, ale farby boli ine, v PMD emulatore na RGB su farby 00-zelena, 01-cervena, 10-modra a 11-fialova(ruzova). Mne sa obvavili farby cca taketo: 00-zelena, 01-zlta/oranzova, 10-tyrkysova a 11-biela. Avsak, stacilo par „preskrabov“ a prepojek a farby boli take ako mali byt.
No a ako som sa tak hral s tymi farbickami, dostal som napad. Co tak urobit obrazok v ktorom by sa striedali mikroriadky zelenej s mikroriadkami cervenej.. vypadalo by to zlto? a ako dostat tyrkysovu? malo by stacit striedat zelenu a modru.. no ale co biela? nastastie mame ako „zakladnu“ farbu aj ruzovu, co by spojenim so zelenou znamenalo nasu vytuzenu bielu.. A tak som oprasil obrazok monoskop, ktory som dal do compa na jednom forevri, prekreslil/upravil ho (zx ma rozlisenie 256×192, pmd 288×256 a farebne atributy ma zx 8×8 a pmd 6×1), a nahral do pmd (to bola druha story s rozbehavanim nahravania z PC do PMD cez MGFIN, ale nebolo to zas az tak dramaticke.. par pokusov a nakoniec to fungovalo ;]). Po spusteni kratkeho programu v asm, ktory preniesol obrazok do videoram (videoram je prekladana, a v medzerach medzi datami videoriadkov sa nachadzaju „systemove premenne“, ktore nehodno len tak mirnix-dirnix menit, takze som mal 12k videodat, ktore sa mali rozhodit po 16k adresovom priestore) a s vysledkom som bol viac nez spokojny.
A tak som zacal uvazovat o HW zmiesavaci farieb. Problemom sa javilo hlavne to, ze v jednom pristupe do pamate potrebujeme vycitat 2 farebne atributy (z riadkov nad sebou), co by bez narocnych uprav v casovani pristupu k ram spravit neslo a tak som sa vybral inou cestou. dostal som napad pridat dve (tzv. tienove) 4164, ktorym by som v prihodnej dobe zmenil adresu (oproti adresam na povodnych pamatiach v PMD) tak, aby jedna adresa (povodne pamate) ukazovala na bajt v jednom riadku a druha adresa (pre tienove ram) by ukazovala na bajt pod alebo nad tym prvym bajtom (zalezi ktory mikroriadok sa prave zobrazuje, ci parny alebo neparny). Nastastie pani v TESLE navrhli videoram tak ako navrhli a tak sa spominane adresy lisia prave v jednom bite A6. Cize nam staci nasim tienovym ramkam invertovat A6 a dostaneme na jeden pristup do pamate hodnoty 6tich bitov – bodova informacia (z povodnych ram) a dve dvojice bitov – farebna informacia (jedna dvojica z povodnych ram a druha z tienovych). To vsak nie je vsetko. Bolo by nam to dost na nic, keby mali 4164 len jeden datovy vstup/vystup, bolo by totiz treba viac logiky, pretoze pri zapise do videoram, chceme, aby sa zapisovalo na rovnake adresy v tienovej ram ako normalnej ram, len pri citani chceme A6 invertovat, a keby bol len jeden datovy vstup/vystup, rozdielne hodnoty na roznych riadkoch by znamenali koliziu na datovej zbernici. Nastastie maju 4164 oddeleny Din od Dout, a aktivny z nich je vzdy len jeden, takze pri pristupe CPU k videoram (je jedno ci citani alebo zapisovani) adresy tienovych ram nechavame rovnake ako adresy povodnych ram, a pri citani videoobvodu (videoobvod nastastie nic nezapisuje ;]) z videoram budeme tienovym ramkam invertovat bit A6. Uvedene vyriesi jedno dvojvstupove hradlo MUX obvodu 74157, na jeden vstup dame povodnu A6′ (multiplexovana A6/A14/R6/R14), na druhy vstup dame negovanu R6 (adresa videoobvodu) (pozn.: teraz ked nad tym uvazujem, malo by stacit pouzit aj negovanu A6′, pretoze v dobe kedy sa bude vyberat tento druhy vstup, bude A6’=R6) a ako vyberovy vstup pouzijeme „(AMUX & VIDEO)“. Ak je VIDEO=1 tak pristupuje k pamati videoprocesor a ak VIDEO=0 tak, k pamatiam pristupuje CPU. Signal AMUX hovori o tom, ktora cast adresy sa pamati posle (dram maju multiplexovanu adresnu zbernicu, co znamena obrovske setrenie vo velkosti puzdra, ale samozrejme zlozitejsiu obsluhu) ak je AMUX=1 tak sa posiela spodna cast adresy (A7-A0) a ak je AMUX=0 tak sa posiela vrchna cast adresy (A15-A8).
Takze uz vieme na jeden pristup do pamate vybrat potrebne data, uz potrebujeme len colormixer (ako to familiarne nazyvam ;]). Ten vyriesi jeden IO 7400 a jedno dalsie hradlo NAND (v scheme je pouzite volne hradlo z 7410). Podstatou miesania farieb je nasledovne:
1) zlozka R bude =1 prave vtedy, ked aspon jedna z povodnych farieb obsahuje cervenu zlozku (cize aspon jedna z tych dvoch farieb je cervena alebo fialova)
2) obdobne zlozka B bude =1 prave vtedy ked aspon jedna z povodnych farieb obsahuje modru zlozku
3) zlozka G bude =1 prave vtedy ked je aspon jedna z povodnych farieb zelena (a teda neobsahuje ani cervenu a ani modru zlozku)
samotne farebne zlozky su zapamatavane v obvodoch 7474 (v pmd sa pamataju hodnoty z povodnych ram, hodnoty z tienovych ram zapamatavame v pridanom 7474). hodnota z bitu D6 je v schemach na opravy oznacovana ako F1 a hodnota z bitu D7 je oznacovana ako F2, nase „tienove hodnoty“ oznacime F1′ a F2′. potom:
R=(F1 or F1′)=/(/F1 and /F1′) (negaciu F1 a F1′ mame zadarmo, 7474 ma aj priame vystupy a aj negovane)
B=(F2 or F2′)=/(/F2 and /F2′) (rovnako negaciu F2 a F2′ mame zadarmo)
G=(/(F1 or F2)) or (/(F1′ or F2′))=(/F1 and /F2) or (/F1′ and /F2′)=/(/(/F1 and /F2) and /(/F1′ and /F2′))
Co sa logiky „multicoloru“ tyka, uz mame vsetko. Co nam vsak chyba su koncove stupne, ktore na zaklade R, G a B a signalu MOD vyrobia na vystupe vhodny signal pre SCART. Tu som dost experimentoval a Ikon mi do toho vydatne kecal ;]. Vysledkom je, ze treba pouzit kvalitne tranzistory, osvedcili sa KSY71 a samozrejme potom vhodne doladit odporovymi delicmi.
Prikladam schemu, nejake obrazky prilozim neskor, ked uz budem mat multicolor na plosnom spoji aby sa s pmdckom jednoduchsie manipulovalo ;]
-ub
Super. Ešte by to ale asi chcelo na schému pridať aj tie tieňové DRAMky s popisom, na ktoré pôvodné DRAM sa majú pripojiť a ktoré piny budú spoločné a ktoré vyhnuté a vyvedené osobitne. A určite by v schéme potešili aj čísla pinov na integrovaných obvodoch, aby ten návod/popis bol taký ucelenejší 😉
tie cisla pinov som tam schvalne nedal, kedze este nemam navrhnuty plosak je to zbytocne. ak sa niekto rozhodne pre postavenie multikoloru podla schemy, naco ho zatazovat rozlozenim pinov, ked mozno sam pri navrhu plosaku nadabim na zmeny hradiel? ;]no a dram… ok, nakreslim aj dramky, v podstate je ale ich zapojenie jasne, treba vyhnut piny A6 a Q, pricom logicky, A6 budu navzajom prepojene, pretoze adresa je spolocna pre vsetky bity a logicky Q vstupy prepojene nebudu, ak by sme chceli len jeden bit, nedavali by sme tam predsa dve pamate ;].ono to nechcel byt navod pre cloveka, ktory sa do problematiky ani trochu nerozumie… preto som ani nepisal kde som sa napichol v pmd na jednotlive signaly. skor ide o popis principu. naviac, sam nemam preskumane ci vo vsetkych modeloch pmd85-2A su pamate v rovnakom poradi a podobne. preto som ani nepisal o konkretnom umiestneni, lebo potom sa ozve nejaky tutko z debaty na zxm a napise ze mu to nefunguje a nech mu teraz poskladam nove pmd, lebo to svoje uspesne odpalil ;]
Súhlasím, že si to postaví zrejme iba človek, ktorý tomu rozumie, ale schéma "se vším všudy" vždy poteší :-)Dovolil by som si tvrdiť, že všetky verzie PMD 85-2A majú rovnaké zapojenie DRAM aj plošák. Zapojenie PMD 85-3 sa samozrejme líši.A čo s tým zapínaním a detekciou? Navrhujem toto:PC7 8255 bude zapínať a vypínať Multicolor, PB7 bude na detekciu prítomnosti/zapnutia.Zapojené by to bolo veľmi jednoducho:PC7, PB7 prepojiť spolu aj s tretím vstupom NAND hradla 7410 v pôvodnej schéme (namiesto jumpera a pull-up odporu). Na tento spoločný spoj je treba pripojiť pull-down odpor 3k3 na zem.Na PMD 85-3 je celý port PC inicializovaný na výstup, čo je v poriadku.Na PMD 85-2A je horná polovica portu PC inicializovaná na vstup, takže je potrebné urobiť reinicializáciu. MVI A,82h ; inicializácia zároveň zapne AllRAM OUT 0F7h MVI A,9 ; takže si pristránkujeme ROM naspäť OUT 0F7hA samotný test: MVI A,15h ; zapni Multicolor OUT 0F7h IN 0F6h ; a zisti, či je prítomný RLC JC JE_TU … -NIE_JE-A vypnutie multicoloru: MVI A,14h ; vypni Multicolor OUT 0F7h
Upps. Chybička se vloudila. Tie hodnoty pre zapnutie a vypnutie mali byť v desiatkovej sústave, teda:MVI A,15 ; zapni MulticolorMVI A,14 ; vypni Multicolor