SBC6502 - 35 - Programátor PROM 74188. PROM 74188 programmer. Part 3-4.

By Administrator at December 23, 2019 09:50
Filed Under: SBC6502

PROM 74188 burner - vlastný program:

 

 

Ak je spustený program v SBC6502 a až potom zapneme dosku programátoru (tak by sa to patrilo), tak nás vítajú na prednej strane dve rozsvietené zelené LED - jedna na základnej doske počítača SBC6502 a druhá na vlastnom programátore. Čip 8255A je už vďaka spustenému programu správne inicializovaný a teda je v stave kedy sa s ním dá komunikovať a zároveň blokuje 10.5V na PROM a vlastná pätička PROM 74188 je tak isto bez napájania.

     

 

Ak sa však príliš ponáhľame a najprv zapneme napájanie programátoru tak sa objaví toto ... nič strašné sa síce nestane - teda ak tam náhodou nemáme už založenú PROM 74188.  Ak je všetko v poriadku po spustení programu (inicializuje sa 8255A-ka) na hornej doske zhasne červená a dve modré LED a na doskách nám potom následne svietia iba zelené LED (viď prvý obrázok).

 

Autor nenesie žiadnu zodpovednosť za škodu ktorá vznikne

zničením PROM pri nesprávnom použití programátoru !

- - -

(Uvedené by sa nestalo ak by som použil v zapojení namiesto čipu 7417 čip 7416 - ale to by znamenalo mimo iného aj zmenu programového vybavenia pretože by výstupy na porte A museli byť negované - a mimo iného - čip 7416 som doma pri stavbe programátoru nemal.

- - -

Program je napísaný tak, že je ho možné ľahko modifikovať pre rôzne hodnoty použitých x-talov, stačí len meniť dĺžku niektorých wait stavov a nastaviť správnu dĺžku programovacieho pulzu. Program bol napísaný pre 32kB RAM verziu, pričom momentálne využíva adresy 31000÷31031 (dec) pre uloženie 32 byte RAM a adresy 32032÷32039 (dec) pre rozloženie jedného bytu na jednotlivé bity (teda tu zaberá ďalších 8 byte). (Je možné preložiť tieto použité adresy aj na iné miesto, tieto adresy sú uložené v premenných a teda zmena je veľmi jednoduchá, zadal som si ich takto na začiatku písania programu.) Tak isto priamo v programe sú uvedené najdôležitejšie adresy pre ovládanie samotného čipu 8255A. Miesta v RAM som mal dosť a teda nemusel som skrbliť s miestom kde to umiestnim -a takto nakoniec už zostalo travle nastavené na tieto adresy.


Dôležité adresy (dec) čipu 8255A použité v SBC6502 Erika0:


adr.32768 - port A

adr.32769 - port B

adr.32770 - port C

adr.32771 - CWR register


Celé programové vybavenie bolo napísané v jazyku OSI 6502 BASIC VERSION 1.0 REV 3.2 (c) 1977 BY MICROSOFT CO. Kontrolný súčet, teda CRC použité v programe je riešený najjednoduchšie ako sa dá - je to iba jednoduchý súčet obsahu všetkých 32 byte (dekadicky). CRC je po spustení programu vždy nanovo počítaný z DATA riadkov a kontroluje sa priamo voči CRC ktoré je priamo súčasťou DATA riadkov. Ak toto vzájomné porovnanie z akýchkoľvek dôvodov nesedí = koniec programu. Pretože použitý BASIC cez HyperTerminál nevie skočiť na začiatok obrazovky ak je už popísaná textom tak ma to nútilo písať program čistejšie, pretože táto koncepcia naozaj neumožňuje robiť nejaké nezmyselné odskoky smerom naspäť v terminálovom okne. Nehodlám tu robiť podrobný popis programovacieho pulzu, to si pozrite v datasheete (bude uverejnený v poslednej, záverečnej 4. časti), tu je to v programe zabezpečené tak ako treba, nakoniec pozrite si to na konci tohoto článku - sú sem priložené dumpscreeny z osciloskopu.

 

Charakteristické pre tento typ pamäte je špeciálne programovanie,

programuje sa bit po bite v rámci bytu, nie naraz celý byte.

 

PROM 74188 musí byť pre programovanie tzv. "čistá" t.j. musí obsahovať samé nuly aby sa dalo pokračovať, ak je v založenej PROM už niečo zapísané tak na to program upozorní (vždy sa to pred vlastným programovaním kontroluje) a nedovolí previesť zápis. Program najprv napaľuje všetky byte postupne pekne jednotlivo bit po bite tak ako predpisuje datasheet (ak je obsahom na potrebnom mieste hodnota =0 tak programovací pulz je obídený, 0 sa do PROM neprogramuje). Potom nasleduje verifikácia PROM - ak z akýchkoľvek dôvodov nie je verifikácia v poriadku, zopakuje sa celý postup napálenia ešte 1x a nanovo sa verifikuje. Ak ani potom nie je v PROM požadovaný obsah - program vyhlási PROM 74188 za zlú a ukončí sa. Oteplenie čipu vďaka wait stavom v programe je úplne zanedbateľné, je to niekde pod 40°C, merané bezdotykovým teplomerom.

Z uvedeného vyplýva jedna vec - čím viac bitov v PROM obsahuje 0 tak tým rýchlejšie sa vlastná PROM naprogramuje a teda platí to v opačnom garde - čím viac bitov obsahuje 1 tým pomalšie zbieha celý zápis. Tak isto je výhodné ak nepoužité výstupy naďalej obsahujú 0 - potom je totiž možné obsah na týchto miestach zmeniť neskôr na nami potrebné hodnoty (ak by sa ukázalo že ešte potrebujeme niečo zmeniť, ak sú voľné výstupy nie je to problém).

 

Najprv na začiatku som uvažoval že si rozložím 32 byte pekne hneď pred napálením najprv do jednej jedinej postupnosti 256byte (rozložím si 32byte pekne na 32x 8bit) kde to bude pekne už zoradené bit po bite a potom už len budem jednotlivé bity po jednom bite hnať cez programátor - lenže raz večer tesne pred spaním ma napadlo že bude stačiť ak budem postupne rozkladať vždy len jeden konkrétny byte (čas čo to spotrebuje aj tak treba na zotavenie PROM) a tento jeden rozložený byte na bity naprogramujem a až potom pôjdem na rozklad ďalšieho byte, takže v tom nebude žiaden problém. A u toho som aj zostal, funguje to dobre a bez najmenších problémov. A na rozklad jedného byte na jednotlivé bity mi postačuje púhych 8byte ... (aj keď tu potrebná RAM naozaj nehrá rolu, tu máme k dispozícii 31kByte RAM, 1kB RAM si zaberajú systémové veci).

Pozostatkom pôvodnej koncepcie je použitie adries (31000d a vyššie, tu som počítal že budem potrebovať 256 byte), ale pretože RAM je dostatok tak som už nastavené adresy v programe nezmenil.

___________________________________________________________


V programe oproti uverejnenému manuálu v predchádzajúcej časti nastala jedna jediná, drobná zmena.


Do programu pribudla nová premenná ID=32, síce sa v programe momentálne nepoužíva, ale ak by som sa ešte niekedy rozhodol v programe (a tak isto aj v hardware) vŕtať tak ju tam mám teraz ako zadné vrátka (potom by som ju už nerád dopĺňal). Pretože túto premennú som do programu pridal až včera, nie je zahrnutá v manuáli a teda nie je ani v zobrazení manuálu. Na uverejnené programové vybavenie nijako nevplýva (len sa zmenilo označenie verzie programu z 1.00  na 1.01), preto nepovažujem za potrebné prerábať manuál. Ďakujem za pochopenie.

 

Táto premenná pribudla do riadku 9000 a teda je aj  priradená

k záznamu v DATA riadkoch.

___________________________________________________________

Celý program som kompletne na nečisto napísal najprv v Notepade, rozhodne sa mi tam píše lepšie ako v okne HyperTerminálu. Jediná nevýhoda - ak tam (teda v Notepade) náhodou neúmyselne zdvojíte číslo riadku - tak to dá poriadne zabrať než nájdete chybu, program v SBC6502 poctivo prepíše riadok z rovnakým číslom obsahom iného riadku s tým istým číslom ... to sa mi stalo niekoľkokrát a problém sa hľadal naozaj dosť blbo. Ako vždy keď píšem program ak je jedna časť odskúšaná - a funguje, tak už tam ak sa dá zbytočne nesiaham (a neprepisujem). Preto môže byť že niektoré veci sa zdajú príliš komplikované, ale tak ako to je teraz tak to funguje. V rámci svojich možností som sa pokúsil priamo vložiť do REM riadkov v programe vysvetlivky ktoré informujú o tom čo sa v programe práve deje (vďaka popisu program celkom slušne "nabobtnal"), niekde nájdete REM riadky kde je možné ich odblokovaním spustiť podrobnejší výpis (hodí sa ak sú trable - toto je ale už vo verzii 1.02 zrušené - pozn. 08.01.2020), tu priamo v texte nejaké ďalšie vysvetľovanie považujem už iba za zabíjanie času. Dlhšie časové rezervy (čakacie slučky FOR-NEXT, programové riadky 2010 ÷ 2100) použité v programe slúžia výlučne na zotavenie PROM čipu po programovacích pulzoch (ak to programujete "ručne" tak čakacie slučky netreba, pretože ruky sú v konečnom výsledku vždy výrazne pomalšie ako počítač ...).

(Program som začal písať 19.11., kompletne bol dokončený za necelý mesiac.)


Nasleduje ukážka napaľovania PROM 74188 na tomto programátore:

PROM 74188 BURNER.mp4 (12,92 mb)  video


(Celkový pohľad na nasadený programátor na SBC6502 Erika0, potom už nasleduje ukážka napaľovania, po napálení nasleduje krátka pauza, potom ešte nakrátko bliknú modré LED - vtedy prebehne čítanie, t.j. prebehne verifikácia obsahu PROM. Na spodnej doske - SBC6502, prebieha intenzívna komunikácia - červená LED = TX - posielajú sa priebežne údaje na HyperTerminál = zobrazenie informácií. )

_____________________________________________________


Teraz sa môžeme pozrieť ako vyzerajú programovacie pulzy pri rozličných rýchlostiach procesoru

na doske SBC6502 pri sledovaní na digitálnom osciloskope:

 

Priebeh programovacieho pulzu pre x-tal=1.8432MHz. Presná dĺžka programovacieho pulzu je daná opakovaním v slučke FOR-NEXT v riadku 3750, čiže nie vždy je to úplne presne 17msec, ale odchýlka nie je nejaká zásadná (programovací pulz môže mať podľa datasheetu použitú dĺžku v rozmedzí 1÷20msec - a tam sa s prehľadom nachádzam). Moje rozhodnutie bolo že programovací pulz bude mať dĺžku 17msec. Snažil som sa označiť všetky dôležité body na snímku tak aby to bol zrozumiteľné, dúfam že sa to podarilo. Na obrázku je pekne vidieť ako najprv CS ide do log.1, následne nabieha napájancie napätie z 5V na 10.5V, CS ide do log.0, vtedy prebieha vlastný programovací pulz, potom zase CS do log.1, zhadzuje sa 10.5V na 5V a CS ide zase do log.0.

Poznámka:

Označenie CS (Chip Select) je negované, môj editor textu v BlogEngine nedokáže negáciu priamo vypísať do textu, v obrázkoch je to uvedené správne.

 

Priebeh programovacieho pulzu pre x-tal=2.4576MHz. Ako sa zvyšuje rýchlosť procesoru tak sa zákonite začína zmenšovať šírka pulzu pre CS, táto šírka zostáva bez nejakého nastavovania dostatočne široká aj pre 5.00MHz. Hodne pomohlo zníženie odporu v báze tranzistoru BC546 na hodnotu = 2k2, vďaka tomu to stíha aj nabíjať aj vybíjať kapacitu 1uF vo vhodnom a nám potrebnom čase.

 

Priebeh programovacieho pulzu pre x-tal=4.00MHz. Dĺžka pulzu má byť v rozmedzí 1÷20msec, zmenou hodnoty premennej F (0 až naša hodnota) v uvedenom riadku je možné ju meniť, ja som si stanovil =17msec, teda meniť to - na to nemám dôvod. Tak ako to je - tak to funguje na jednotku.

 

Priebeh programovacieho pulzu pre x-tal=5.00MHz. Presná dĺžka programovacieho pulzu je daná opakovaním v slučke FOR-NEXT v riadku 3750. Je jasné že ako sa procesor zrýchľuje tak sa zvyšuje číslo v slučke FOR-NEXT aby sa dosiahlo požadovaných 17msec.

____________________________________________________________

Posledné, najnovšie programové vybavenie - verzia 1.09 je uverejnené v tomto článku:


http://blog.3b2.sk/igi/post/SBC6502-56-PROM-74188-last-best-program-v109-lite.aspx

 

V článku /na jeho konci/ sú uverejnené všetky vydané verzie programového vybavenia pre programátor PROM 74188.

_____________________________________________________

V štvrtej časti bude popis vlastnej stavby spolu s "perličkami".

Priama možnosť skočiť do ďalšej časti:

SBC6502 - 33 - Programátor PROM 74188. PROM 74188 programmer. Part 1-4.
SBC6502 - 34 - Programátor PROM 74188. PROM 74188 programmer. Part 2-4.

SBC6502 - 36 - Programátor PROM 74188. PROM 74188 programmer. Part 4-4.

____________________________________________________________

Návrat do všetkých pokračovaní o SBC6502:

http://blog.3b2.sk/igi/post/SBC6502-0-UvodIntroduction.aspx

___________________________________________________

Vaše hodnotenie, Rate post:

Comments

12/23/2019 9:56:44 AM #

trackback

Directory SBC6502

Directory SBC6502

Igi blog |

Comments are closed

Info o autorovi

Volám sa Igor Gramblička, bydlisko: Bratislava, Slovakia. Môj nick: Igi. Blog je o mojich záujmoch, predtým som pracoval ako IT špecialista na počítačové siete a redakčné systémy pre viaceré denníky - až som pred rokmi nakoniec v jednom z nich zakotvil a kde som to potiahol až do konca mojej profesnej kariéry.

Rok, mesiac, počet článkov: