"Vianočná nádielka 2023" - programová verzia 1.10s(pecial)
pre programátor PROM 74188:
SBC6502 s nasadenou doskou programátoru PROM 74188.
Igiho motto:
"Žiaden vytvorený program nie je tak dokonalý aby sa nenašlo niečo vďaka čomu sa program dá ešte vylepšiť alebo upraviť."
(Alebo aj úplne zhovadiť ...)
Úvodná obrazovka.
Pozrime sa na programovú verziu 1.10s (special):
- z menu som odstránil zobrazenie nastavenia hodnôt v premenných ktoré určujú základné nastavenie, nie je to teraz až tak potrebné aby sa trvale zobrazovali
- nastavenie novej dĺžky (P)GM pulzu sa presunulo naspäť na začiatok menu, je to takto prehľadnejšie ako v strede menu, proste po čase sa ukazuje že takto to bude najlepšie
- verzia 1.10s je vďaka niektorým úpravám vhodné pre tých ktorí radi experimentujú (a pritom sa vôbec nemusia vôbec vŕtať v programovom vybavení)
- zásadná zmena nastala pri voľbe (P)GM:
Voľba (P)GM pulzu pre prvé kolo je stále v rozpätí 1÷20msec v kroku po 1msec a pribudla možnosť po nastavení novej dĺžky PGM pulzu meniť násobiteľom dĺžku pulzu pre kolo druhé a to v rozsahu 1÷4x násobku hodnoty ktorá platí pre prvé kolo programovania. S touto zmenou pozor, štandartné nastavenie je teraz 10ms (oproti verzii 1.10n kde to bolo 17msec) pre kolo číslo jedna, teda potom tu platí pre kolo druhé PGM pulz = 20ms. Ak sa nám nepodarí napáliť správne PROM po absolovaní obidvoch kôl programovania tak treba postupovať cez novú voľbu (S)pecial reburning mode, keď si ešte predtým zmeníme cez voľbu (P)GM dĺžku pulzov.
Pracovná obrazovka.
V menu pribudla nová položka (S)pecial r.e.b.u.r.n.i.n.g. mode.
(Uvedený mód veľmi zjednodušuje možnosť reprogramovania.)
Hodne, hodne dlho som rozmýšľal či túto možnosť vôbec mám zaradiť do menu, ale nakoniec som sa rozhodol reburning nanovo zaradiť do menu, pre určité situácie je skutočne potrebný (a nenahraditeľný).
Špeciálny "reprogramovací" mód slúži na 2 veci:
- v prvom prípade je určený na to aby bolo možné správne naprogramovať PROM, ktorej nestačí 10ms pulz v prvom kole a ani 20ms PGM pulz v kole druhom. Cez voľbu (P)GM nastavíme väčšie hodnoty a môžeme to skúsiť nanovo. Cez voľbu (W)rite nie je možné programovať PROM ktorá má v sebe už napálené nejaké údaje ! (tam sa kontroluje či je na začiatku založená "čistá" PROM, t.j. taká ktorá obsahuje iba samé nuly) - je to možné iba cez tento špeciálny mód.
Ešte pár slov k reprogramovaniu PROM (trebárs ak sa nepodarí správne naprogramovať trebárs jediný bit) - z menu zadajte pre prvé kolo cez (P)GM pulz na 20ms a násobiteľ nastavte na 3, t.j. v druhom kole bude mať PGM pulz dĺžku 60ms - následne stlačte (S)pecial reburning mode, PROM je založená, program skontroluje či sú platné Data v riadkoch 9001 až 9004 a či je založená PROM s už nejakými napálenými údajmi, ak ani potom nezbehne správne naprogramovanie dajte násobiteľ na 4, teda v druhom kole bude PGM pulz trvať 80msec - toto by už malo poraziť aj slona ... Ak ani potom nepôjde PROM správne naprogramovať - tak ju bezpečne môžete vyhodiť do koša, je jasné že je to totálny nepodarok určený do smetí - ale ešte som ale taký kus čo by nešiel prepáliť a vytrvale by odmietal do seba zapísať správnu hodnotu nenašiel - moja jedna "blbá" PROM potrebovala na zápis jeden jediný zlý bitík použiť 50ms programovací pulz, potom už bolo všetko O.K. (Bola to TESLA produkcia.) Pri cca 55 napálených kusoch to bola u mňa jedna jediná PROM ktorá vyžadovala tento zásah, všetkým ostatným PROM pritom na napálenie stačili 10ms PGM pulzy - a to hneď v kole prvom, teda vôbec neprichádzalo k spusteniu druhého kola PGM pulzu o predĺženej hodnote.
Pri nastavení prekročenia dĺžky >20msec napaľovacieho PGM pulzu pre druhé kolo sa zobrazí upozorenie že je to nastavenie už iba na Vašu zodpovednosť, pretože je prekročená hodnota uverejnená v datasheete (ak nie je správne napálený obsah v PROM - aj tak inú možnosť ako následne predĺžiť PGM pulz už nemáme ...).
Tu platí - násobiteľ zmeňte z čísla 2 na vyššiu hodnotu len vtedy ak ste si vedomý možných následkov ! (možné zničenie PROM). Ak zadáte číslo 1 tak v druhom kole programovania je dĺžka PGM pulzu identická s kolom prvým (vhodné ak potrebujeme zistiť kedy príde k naprogramovaniu konkrétneho bitu alebo byte). Ako som sám testoval - vo veľkej väčšine prípadov (vyzerá že je to viac ako v 99%) stačí iba 1msec PGM pulz na napálenie bitu do log.1, takže 10msec pulz je celkom dobrá voľba a istí to napálenie správneho obsahu už v kole prvom, v druhom kole máme automaticky 20msec PGM pulz, toto platí pre PROM 74188 pamätí TESLA (iný typ k dispozícii na otestovanie nemám).
- tak isto som urobil aj takú úpravu kedy je možné násobiteľ pre 2.kolo krokovať v rozsahu 1÷4 po krokoch x 0.1, t.j. trebárs 2.7 a pod., na konci článku je uvedené ktoré riadky teba prepísať aby to bolo funkčné s takýmto násobiteľom, ale táto úprava programu nie je vyžadovaná, toto je zase pre tých ktorí radi experimentujú
- v druhom prípade ak potrebujeme doprogramovať voľné byte v PROM, alebo potrebujeme upraviť obsah PROM, pozor toto je iba pre niekoho kto tomu rozumie !, zapísané jednotky už nie je možné spätne prepísať do nuly ! Pozor, tieto data musia byť uložené priamo v DATA riadkoch !
Tu v tomto druhom prípade sa kontrolujú 2 veci - či sú aktívne data v Data riadkoch a či je už niečo v PROM napálené, ak sú splnené tieto 2 podmienky tak len vtedy je povolený zápis.
Táto voľba nie je určená pre napaľovanie do čistej PROM, na to slúži iná voľba - a to (W)rite.
Prvý prípad je jasný, tam len len napravujeme chybný obsah, v druhom prípade sa počíta s tým že viete čo robíte a teda sú k dispozícii správne údaje a správna PROM ktorá sa dá svojím obsahom reprogramovať - toto je naozaj určené len pre tých naozaj "skúsených" userov.
Aktívne Data - ale iba čistá prázdna PROM = nevhodné na reprogramovanie.
Aktívne Data - PROM už má obsah = vhodné na reprogramovanie.
Poznámka:
Toto riešenie sa javí o poznanie lepšie ako keď som skúšal nasadiť reprogramovanie vo verziách 1.3, 1.4 a 1.5 (v spomínaných verziách to bolo značne nedokonalé a hlavne komplikované pre následné použitie), teraz po čase som našiel riešenie ktoré vyhovuje
- do predchádzajúcich verzií 1.09, 1.09p, 1.10 a 1.10n boli spätne aplikované dve úpravy ktoré som otestoval práve pri príprave verzie 1.10s a to nový spôsob testovania povolenej dĺžky PGM pulzu a tiež spôsob testu stlačenia klávesy "C" pri spúšťaní Capture v Hypertermináli (hodil som testovanie do podprogramu, doteraz za istých okolností neprišlo k správnemu vyhodnoteniu stlačenia klávesy, teraz je to v poriadku). Tieto úpravy som taktiež premietol do uvedených verzií dňa 22.09.2023 (jednoducho to bolo tak dobré že som to nasadil aj tam).
- pri (D)ec a aj (H)ex zápise údajov je teraz vždy pekne po 16 byte (dec-10, hexa-0F) nanovo vypísaná hlavička, pretože pri zápise 32 byte už úvodná hlavička nie je v terminálovom okne vidieť, prispieva to k prehľadnost pri zápise údajov
- niektoré premenné v programe ktoré doteraz používali 2 znaky v názve vo verzii 1.10s boli nahradené premennými ktoré majú dĺžku 1 znak (kratší zápis)
- napriek všetkým možným úpravám programu zostáva stále voľných cca 21kB RAM z celkových 32kB RAM / príkaz ? FRE(0)-268/
(268 je počet byte RAM na konci pamäte ktorá je využívaná programom a aj vyhradené miesto pre stack)
- pribudol program pre SBC6502 s x-talom 2.500MHz
___________________________________________________________
Nový videomanuál k verzii 1.10s:
video
Videomanual v.1.10s.zip
(Vo videu nie sú prevedené všetky zmeny vzhľadu vo výpise menu, preto sa to v jeho zobrazení môže mierne líšiť - už som nerobil nové video pretože sa jedná naozaj a skutočne iba o drobné kozmetické úpravy.)
___________________________________________________________
Program - verzia 1.10s je pre x-tal:
1.8432MHz
2.0000MHz
2.4576MHz
2.5000MHz
3.6864MHz
4.0000MHz
4.5000MHz
4.9152MHz
5.0000MHz
6.0000MHz
Vlastné programové vybavenie:
74188 programmer 1_8432MHz_v110s.txt (12,83 kb)
74188 programmer 2_0000MHz_v110s.txt (12,83 kb)
74188 programmer 2_4576MHz_v110s.txt (12,83 kb)
74188 programmer 2_5000MHz_v110s.txt (12,83 kb)
74188 programmer 3_6864MHz_v110s.txt (12,83 kb)
74188 programmer 4_0000MHz_v110s.txt (12,83 kb)
74188 programmer 4_5000MHz_v110s.txt (12,83 kb)
74188 programmer 4_9152MHz_v110s.txt (12,83 kb)
74188 programmer 5_0000MHz_v110s.txt (12,83 kb)
74188 programmer 6_0000MHz_v110s.txt (12,83 kb)
___________________________________________________________
Poznámka:
Ak niekto túži mať k dispozícii násobiteľ do druhého kola programovania jemnejšie odstupňovaný (v rozsahu 1.0÷4.0 to bude v kroku po 0.1, napríklad 1, 1.7, 2.2, 3.3 a pod.) tak stačí v programe vymazať riadky 1600÷1730 a dosadiť tam tieto riadky (toto je naozaj určené iba pre fajnšmekrov), platí to pre všetky typy x-talov vo verzii 1.10s:
Jemnejšia možnosť odstupňovania násobiteľa pre 2 kolo programovania:
1600 PP=JJ:?D$"PGM pulse (round 1)="PP/U;M$
1602 ?SPC(12)"(range 1-20, stepping 1 "M$")"
1604 ?SPC(17)"New length pulse,"M$":";:INPUT B:V=1
1606 IF V>20 OR V<1 THEN GOSUB 1999:GOSUB 2000:GOTO 1604
1608 IF B=V THEN 1630
1625 V=V+1:GOTO 1606
1630 LG=JW:?:?SPC(7)D$"multiplier = x"LG
1631 ? SPC(11)"(range 1.0-4.0, stepping 0.1)"
1632 ?SPC(14)" New multiplier (round 2):";:INPUT QG:QG=QG*10:W=10
1635 IF QG>40 OR QG<1 THEN GOSUB 1999:GOSUB 2000:GOTO 1632
1636 IF QG=W THEN LG=QG/10:GOTO 1640
1638 W=W+1:GOTO 1635
1640 ?SPC(20)"PGM pulse (round 2):";B*LG;M$
1645 IF B*LG>20 THEN ?:?" At your own risk ..."
1650 B=B*U:GOSUB 1700:NS=2:GOSUB 2000:GOTO 1090
1700 IF B=0 THEN 1730
1720 PP=B
1730 RETURN
(Aby som pravdu povedal, toto jemnejšie odstupňovanie nie je potrebné, ale ak si to chce niekto vyskúšať - prosím, dá sa.)
_______________________________________________________________________________
Vlastný výpis programu pre x-tal=4.9152MHz:
1000 CLEAR:POKE 15,80:PD=32500:PE=PD+32:U=3.13:DV=6:PP=10*U:LG=2
1004 B$="0123456789ABCDEF":R$="24.12.2023, x-tal = 4.9152MHz"
1005 E$="- Best 74188 PROM programmer,Igi(c)":N$=" BLANK PROM !"
1006 F$="76543210 fy: 76543210":G$="te: bit: ri bit:"
1007 M$="msec":K$=" DATA":J$="by DATA Ve PROM"
1008 Q$="2023_ver.1.10special":S$=" + generate DATA rows"
1009 X$="--> ":W$="| |":Z$=" -----------"
1010 PA=32768:PB=PA+1:PC=PA+2:CWR=PA+3:POKE CWR,137
1014 BN=0:D=0:B=0:JJ=PP:JW=LG:D$="Default setting for "
1016 ?CHR$(12);SPC(29)"SBC6502/32kB RAM+8255A"
1065 ?SPC(22)"Turn ON the power to the programmer !"
1090 GOSUB 2400:GOSUB 9000:Z=0:X=0:Y=0:E=0:J=0:NS=1:FG=0:JK=0
1092 OC=0:RP=0:TG=PD+40:IF ID<>32 THEN 8900
1095 IF BN=1 THEN ?CHR$(12)
1098 GOSUB 1700:?Z$;E$;Q$;Z$:GOSUB 2995:?SPC(4)R$;:GOSUB 2990
1100 GOSUB 8781:?" -"SPC(13)"(P)GM pulse length,round 1="PP/U;M$;
1102 ?",round 2="PP/U*LG;M$;:GOSUB 2990:GOSUB 8781
1106 GOSUB 2995:?"(C)ontent info "Z$;K$" rows";:GOSUB 2990
1108 GOSUB 2995:?"(D)ec input"K$;S$;:GOSUB 2990
1110 GOSUB 2995:?"(H)ex input"K$;S$;:GOSUB 2990
1112 GOSUB 2995:?"(I)nfo datasheet 74188,74S288,82S123,";:GOSUB 2990
1114 GOSUB 2995:?"SN74188N,DM8223,DM74188A,DM8577,75188";:GOSUB 2990
1118 GOSUB 2995:?"(R)ead P R O M ";S$;:GOSUB 2990
1120 GOSUB 2995:?"(T)est P R O M "Z$"/is empty ?/";:GOSUB 2990
1122 GOSUB 2995:?"(V)erification PROM against"K$" rows";:GOSUB 2990
1124 GOSUB 2995:?"(W)riting "K$" - direct into P R O M";:GOSUB 2990
1126 GOSUB 2995:?"(S)pecial r.e.b.u.r.n.i.n.g. mode";:GOSUB 2990
1127 GOSUB 2995:?"(Q)uit program";:GOSUB 2990:GOSUB 8781
1128 GOSUB 2995:?" "K$" /rows/ file name:";:GOSUB 2990:GOSUB 2995
1130 ?" "C$;TAB(78)"-":GOSUB 8776:IF BN=1 THEN ?
1132 ?SPC(34)"Your choice:";:INPUT A$:BN=1:IF A$="I" THEN 8600
1134 IF A$="P" THEN D=1:GOSUB 5500:GOTO 1600
1136 IF A$="C" THEN GOSUB 5500:GOTO 3500
1138 IF A$="D" THEN GOSUB 5500:GOTO 4300
1140 IF A$="H" THEN GOSUB 5500:GOTO 4200
1142 IF A$="R" THEN IG=2:GOSUB 5500:GOTO 5000
1144 IF A$="T" THEN GOSUB 5500:GOTO 6000
1146 IF A$="V" THEN E=1:GOTO 8000
1148 IF A$="W" THEN E=9:GOSUB 5500:GOTO 7000
1150 IF A$="S" THEN E=9:RP=1:GOSUB 5500:GOTO 1800
1152 IF A$="Q" THEN GOSUB 5500:END
1154 GOTO 1090
1600 PP=JJ:?D$"PGM pulse (round 1)="PP/U;M$
1602 ?SPC(12)"(range 1-20, stepping 1 "M$")"
1604 ?SPC(17)"New length pulse,"M$":";:INPUT B:V=1
1606 IF V>20 OR V<1 THEN GOSUB 1999:GOSUB 2000:GOTO 1604
1608 IF B=V THEN 1630
1625 V=V+1:GOTO 1606
1630 LG=JW:?:?SPC(7)D$"multiplier = x"LG
1631 ? SPC(17)"(range 1-4, stepping 1)"
1632 ?SPC(14)" New multiplier (round 2):";:INPUT W
1635 IF W=1 OR W=2 OR W=3 OR W=4 THEN 1640
1637 GOSUB 1999:GOSUB 2000:GOTO 1630
1640 LG=W:?SPC(20)"PGM pulse (round 2):";B*LG;M$
1645 IF B*LG>20 THEN ?:?"Long PGM pulse - at your own risk ..."
1650 B=B*U:GOSUB 1700:NS=2:GOSUB 2000:GOTO 1090
1700 IF B=0 THEN 1730
1720 PP=B
1730 RETURN
1800 ?SPC(22)"Intended for experienced users !":?
1802 ?SPC(20)"Special mode - here are two options:":?
1804 ?SPC(11)"New PROM burning after an unsuccessful via the (W)rite"
1806 ?SPC(14)"command attempt or we want to try reprogramming."
1807 ?:IF CRC>0 THEN ?SPC(32)"Active Data !":RP=RP+1:GOTO 1810
1808 ?SPC(32)"No active Data line !"
1810 O=0:A=0:POKE PB,0:POKE PA,128:GOSUB 2050
1815 O=128+A:POKE PA,O:OC=OC+PEEK(PC)
1820 A=A+1:IF A=32 THEN GOTO 1850
1825 GOTO 1815
1850 IF OC>0 THEN ?SPC(32)"Active PROM !":RP=RP+1
1855 IF OC=0 THEN ?SPC(32)"No active PROM !"
1860 IF RP<3 THEN GOSUB 2400:GOSUB 1900:GOSUB 8990:GOTO 1090
1866 IF RP=3 THEN Z=1:?SPC(31)"I will burn ...":GOSUB 2400:GOTO 7046
1900 ?:?SPC(26)"PROM burning is cancelled ...":?:RETURN
1999 ?SPC(3)"Wrong input !":RETURN
2000 FOR F=0 TO DV*2000*NS:NEXT:RETURN
2050 FOR F=0 TO DV*20:NEXT:RETURN
2100 FOR F=0 TO DV*100:NEXT:RETURN
2300 GOSUB 2500
2301 ?SPC(18)X$;"No valid"K$" !"SPC(8)"CRC="CRC;:GOSUB 2990
2400 POKE PA,0:POKE PB,0:RETURN
2500 ?" -";:RETURN
2990 ?TAB(78)"-":RETURN
2995 ?" -"SPC(20);:RETURN
3010 ?CHR$(12);:T=0:Q=0:X=0:Y=0:A=0:Y=0:OK=0:ER=0:JK=7
3015 ?SPC(25)"Igi"CHR$(39)"s byte to bit analyzer:"
3020 ?SPC(15)J$" "J$:?SPC(15)G$" "G$
3025 ?SPC(18)F$" "F$:GOSUB 8781
3055 GOSUB 3200:Q=Q+1:T=T+1:GOSUB 3200:Q=Q+1:IF Q=2 THEN ?:Q=0
3082 T=T+1:IF T=32 THEN POKE PA,0:GOTO 3100
3090 GOTO 3055
3100 IF IG=3 THEN 8210
3200 POKE PA,128:GOSUB 2050:IF T<10 THEN ?TAB(14)" "T;
3220 IF T>=10 THEN ?TAB(14)T;
3230 X=PEEK(PD+T):GOSUB 3400:IF IG=3 THEN 3237
3237 POKE PA,128+T:U1=PEEK(PC):U2=PEEK(PD+T):X=PEEK(PC)
3239 ?" ";:IF U1=U2 THEN ?"=";:OK=OK+1
3240 IF U1<U2 THEN ?">";
3242 IF U1>U2 THEN ?"<";
3250 ?" ";:GOSUB 3400:RETURN
3400 Y=128
3412 A=INT(X/Y):IF A=0 THEN 3416
3414 ?"1";:X=X-Y:GOTO 3418
3416 ?"0";
3418 Y=Y/2:IF INT(Y)=0 THEN 3424
3422 GOTO 3412
3424 RETURN
3500 ?SPC(12)"Name: "C$:I=PD
3503 ?SPC(12)"CRC :"L"(dec)";:IF L=0 THEN ?"=no active PROM"
3505 ?:IF L>0 THEN ?
3506 ?SPC(11)K$;" hex:":?SPC(12)"0000:";:FOR F=PD TO PD+15
3510 N=PEEK(F):GOSUB 3720:NEXT:?:?SPC(12)"0010:";
3512 FOR F=PD+16 TO PD+31:N=PEEK(F):GOSUB 3720:NEXT:?:?
3514 ?SPC(11)K$;" dec:":?SPC(12)"9001"K$;:GOSUB 8970
3516 ?SPC(12)"9002"K$;:GOSUB 8970:?SPC(12)"9003"K$;:GOSUB 8970
3520 ?SPC(12)"9004"K$;:GOSUB 8970:GOTO 7046
3720 L=N AND 15:H=(N-L)/16
3730 ?MID$(B$,H+1,1)MID$(B$,L+1,1);" ";:RETURN
4100 RESTORE:L=0:FOR G=PD TO PD+31:READ M:POKE G,M
4140 L=L+PEEK(G):NEXT:RETURN
4200 GOSUB 4900:DF=PD:N=0:GOSUB 4290
4206 L=N AND 15:H=(N-L)/16
4207 ?" :";MID$(B$,H+1,1)MID$(B$,L+1,1);" ";:INPUT A$
4209 IF LEN (A$)<>2 THEN GOSUB 1999:GOTO 4207
4210 H$=LEFT$(A$,1):L$=RIGHT$(A$,1):QQ=1
4212 IF QQ=17 THEN GOSUB 1999:GOTO 4207
4213 IF MID$(B$,QQ,1)=H$ THEN QQ=1:GOTO 4217
4214 QQ=QQ+1:GOTO 4212
4216 IF QQ=17 THEN GOSUB 1999:GOTO 4207
4217 IF MID$(B$,QQ,1)=L$ THEN 4225
4218 QQ=QQ+1:GOTO 4216
4225 IF H$="F" THEN HI=15:GOTO 4244
4226 IF H$="E" THEN HI=14:GOTO 4244
4227 IF H$="D" THEN HI=13:GOTO 4244
4228 IF H$="C" THEN HI=12:GOTO 4244
4229 IF H$="B" THEN HI=11:GOTO 4244
4230 IF H$="A" THEN HI=10:GOTO 4244
4231 HI=VAL(H$)
4244 IF L$="F" THEN LO=15:GOTO 4270
4245 IF L$="E" THEN LO=14:GOTO 4270
4246 IF L$="D" THEN LO=13:GOTO 4270
4247 IF L$="C" THEN LO=12:GOTO 4270
4248 IF L$="B" THEN LO=11:GOTO 4270
4249 IF L$="A" THEN LO=10:GOTO 4270
4250 LO=VAL(L$)
4270 POKE DF,HI*16+LO:N=N+1:DF=DF+1
4275 IF N=16 THEN GOSUB 4290
4279 IF DF=PD+32 THEN GOSUB 8700:?:GOTO 8800
4280 GOTO 4206
4290 ?"Adress: "K$":":?"(hex) (hex)":RETURN
4300 J=PD:S=0:GOSUB 4900:GOSUB 4950
4303 IF S<10 THEN ?" "S,
4304 IF S>=10 THEN ?S,
4306 INPUT Q:IF Q>255 THEN GOSUB 1999:GOTO 4303
4308 POKE J,Q:J=J+1:S=S+1:IF S=16 THEN GOSUB 4950
4309 IF J=PD+32 THEN GOSUB 8700:?:GOTO 8800
4310 GOTO 4303
4900 ?SPC(20)"<-- name = length max. 40 characters ";X$
4910 ?SPC(3)"PROM"K$" NAME:";:INPUT C$
4930 IF LEN (C$)>40 THEN GOSUB 1999:GOTO 4900
4940 ?:RETURN
4950 ?"Adress:"SPC(5)K$":":?"(dec)"SPC(8)"(dec)":RETURN
5000 ?SPC(16)"Read PROM and Write to"K$" rows ";
5001 CRC=0:R=50:IF IG=2 THEN R=0
5010 POKE PB,0:O=0:A=0:POKE PA,128:GOSUB 2050
5035 O=128+A:POKE PA,O:OC=PEEK(PC):POKE PD+A+R,OC:CRC=CRC+OC:A=A+1
5095 IF A=32 AND IG=1 THEN 3010
5100 IF A=32 THEN 5120
5110 GOTO 5035
5120 IF CRC=0 THEN ?N$:GOTO 5160
5130 ?" ACTIVE PROM !":GOSUB 2400
5150 GOSUB 4900:GOSUB 8700:?:GOTO 8800
5160 GOSUB 2400:NS=1:GOSUB 2000:GOTO 1090
5500 ?CHR$(12):?" Your choice - "A$:?:RETURN
6000 ?SPC(18)"Test - read PROM ";
6010 O=0:A=0:POKE PB,0:POKE PA,128:GOSUB 2050
6035 O=128+A:POKE PA,O:OC=PEEK(PC):IF OC=0 THEN 6070
6060 ?" - Not a"N$:?SPC(26)"Insert"N$
6065 GOSUB 2400:GOSUB 2000:GOTO 1090
6070 A=A+1:IF A=32 THEN 6100
6090 GOTO 6035
6100 ?" Good,"N$:GOSUB 2400:IF Z=1 THEN 7020
6110 NS=1.5:GOSUB 2000:GOTO 1090
7000 ?SPC(30)"Writing to PROM >":?:Z=1
7010 FOR F=TG TO TG+31:POKE F,122:NEXT:GOTO 6000
7020 GOSUB 9000:?:?SPC(17)" Name"K$" file: "C$
7030 GOSUB 9005:?SPC(34)"CRC="CRC:NS=2
7035 IF CRC=0 THEN ?SPC(29)" No valid"K$" !":GOSUB 2000:GOTO 1090
7042 IF 32-OK<>0 AND E=1 THEN GOSUB 2000:GOTO 1090
7046 ?:?SPC(32)"CONTINUE Y/N";:INPUT A$
7047 IF A$="N" AND RP=3 THEN 1090
7048 IF A$="N" THEN END
7051 IF A$<>"Y" THEN GOSUB 1999:GOTO 7042
7052 IF JK=7 THEN 7056
7054 IF A$="Y" AND E=9 THEN 7070
7056 IF A$="Y" AND Z=>0 OR Z<=3 THEN 1090
7070 O=0:A=0:RESTORE:FOR G=PD TO PD+31:READ M:POKE G,M:NEXT
7200 POKE PA,128:POKE PB,0:GOSUB 2050:?SPC(29)"Programming bytes ..."
7204 ?SPC(30)"PGM pulse =";:IF Z=2 AND D=1 THEN ?B/U*LG;:GOTO 7217
7208 IF Z=1 AND D=0 THEN ?PP/U;:GOTO 7217
7210 IF Z=1 THEN ?TAB(30)PP/U;:GOTO 7217
7212 IF Z=2 AND D=0 THEN ?PP/U*LG;
7217 ?M$:?:?TAB(8);:FOR G=PD TO PD+31:IF A<10 THEN ?" "A;
7227 IF A>=10 AND A=<15 THEN ?A;
7229 IF A=15 THEN ?:?:?TAB(8);
7230 IF A>15 THEN ?A;
7231 IF Z=2 AND PEEK(TG+G)=0 THEN 7480
7240 K=PEEK(G):FOR F=PE TO PE+7:POKE F,0:NEXT
7260 IF K>=128 THEN POKE PE+7,128:K=K-128
7270 IF K>=64 THEN POKE PE+6,64:K=K-64
7280 IF K>=32 THEN POKE PE+5,32:K=K-32
7290 IF K>=16 THEN POKE PE+4,16:K=K-16
7300 IF K>=8 THEN POKE PE+3,8:K=K-8
7310 IF K>=4 THEN POKE PE+2,4:K=K-4
7320 IF K>=2 THEN POKE PE+1,2:K=K-2
7330 IF K>=1 THEN POKE PE+0,1:K=K-1
7365 FOR O=0 TO 7:S=PEEK(PE+O):IF S=0 THEN 7480:GOSUB 1700
7420 PP=JJ:POKE PA,128:GOSUB 2050:IF Z=2 AND D=1 THEN PP=B*LG
7424 IF Z=2 THEN PP=PP*LG
7430 POKE PA,A+128:POKE PB,S:POKE PA,A+224
7450 POKE PA,A+192:FOR F=0 TO PP:NEXT:POKE PA,A+160
7470 POKE PA,128:GOSUB 2400:GOSUB 2050
7480 NEXT:A=A+1:GOSUB 2050:NEXT:?:?:A=0:G=0
7980 ?SPC(23)"End of the round no."Z"of programming";:Z=Z+1
7990 GOSUB 2400:A=0:O=0:GOSUB 2000
8000 RESTORE:POKE PA,128:POKE PB,0:GOSUB 2050:A=0:L=0:O=0
8013 ?CHR$(12):OK=0:ER=0:IF A$="V" THEN X=1
8014 FOR G=PD TO PD+31:READ M:POKE G,M:Q=PEEK(G):L=L+Q:NEXT:A=0
8085 FOR G=PD TO PD+31:O=128+A:POKE PA,O:Q=PEEK(PC):R=PEEK(G)
8100 IF Q=R THEN OK=OK+1:POKE G+40,0:GOTO 8104
8102 X=1:ER=ER+1
8104 A=A+1:NEXT:POKE PA,0:OK=0:ER=0:?
8120 IF Y=1 AND X=1 OR X=1 AND E=1 AND Y=0 THEN 8200
8122 IF Y=1 AND X=2 THEN 8130
8125 IF L=0 THEN ?N$:POKE PA,0:GOSUB 2000:GOTO 1090
8126 IF X=1 THEN 8150
8127 IF X=1 THEN Y=0:POKE PA,0:GOSUB 2100:X=X+1
8128 IF X=2 THEN Y=1:POKE PA,0:GOTO 7070
8130 GOTO 8200
8150 ?SPC(24)"New attempt to burn round no."Z:POKE PA,0:GOTO 8127
8200 POKE PA,0:GOSUB 2050:IG=3:GOTO 3010
8210 ?SPC(27)"Pass="OK"byte, Error="32-OK"byte"
8211 IF OK=32 AND E=9 THEN 7046
8212 IF OK=32 AND E=1 THEN 8500
8214 ?SPC(34)"- bad PROM ...";:GOSUB 2400:GOSUB 2000:GOTO 7042
8500 ?SPC(32)"- good verifying !";:NS=2.5:GOSUB 2000:GOTO 1090
8600 GOSUB 5500:?SPC(4)"+------\ /------+"SPC(25)"32x 8bit PROM:"
8602 ?SPC(4)W$:?" 01-+ Y1"SPC(8)"Vcc +-16";
8604 ?SPC(17)"74188 74S288 82S123":?SPC(4)"|"SPC(9)"__ __ |"
8606 ?" 02-+ Y2"SPC(6)"CS/EN +-15"SPC(4)"Vcc:";
8608 ?SPC(19)"+5V":?SPC(4)W$
8610 ?" 03-+ Y3"SPC(9)"E +-14"SPC(4)"Icc:";
8612 ?SPC(10)"60mA"SPC(5)"70mA"SPC(6)"95mA":?SPC(4)W$
8614 ?" 04-+ Y4"SPC(9)"D +-13"SPC(4)"Acces time:";
8616 ?" <50ns <25ns <20ns":?SPC(4)W$
8618 ?" 05-+ Y5"SPC(9)"C +-12"SPC(4)"max.Yout:";
8620 ?SPC(14)"12.5mA":?SPC(4)W$
8622 ?" 06-+ Y6"SPC(9)"B +-11"SPC(4)"PGM pulse:";
8624 ?SPC(13)"1-20ms":?SPC(4)W$
8626 ?" 07-+ Y7"SPC(9)"A +-10";:?SPC(19)"Open Collector Output"
8627 ?SPC(4)W$
8628 ?" 08-+ Gnd"SPC(8)"Y8 +-09";" Russian version: K155RE3"
8630 ?SPC(4)W$:?SPC(4)"+---------------+":GOTO 7046
8700 ?:?" Now it's time to start capturing text";:GOSUB 8850
8702 GOSUB 8990
8706 ?:?" Rows"K$" generator:":?:I=PD:L=0
8708 ?"9000 C$=";CHR$(34);C$;CHR$(34);":ID=32:RETURN"
8710 ?"9001"K$;:GOSUB 8970:?"9002"K$;:GOSUB 8970
8712 ?"9003"K$;:GOSUB 8970:?"9004"K$;:GOSUB 8970
8714 FOR G=PD TO PD+31:Q=PEEK(G):L=L+Q:NEXT
8716 ?"9005 CRC="L":RETURN:REM CRC(dec!)":?:GOTO 8800
8776 GOSUB 4100:GOSUB 9005:IF L<>CRC THEN 8900
8777 IF L=0 THEN 8780
8778 GOSUB 2500:?SPC(18)X$;"Valid"K$" in memory ! CRC="CRC;
8779 GOSUB 2990:GOTO 8781
8780 GOSUB 2300
8781 ?" ";:FOR F=2 TO 78:?"-";:NEXT:GOSUB 2990:RETURN
8800 ?" Save this"K$" rows in the specified positions"
8802 ?SPC(8)"and then run the program again !"
8804 ?:?SPC(8)"You can now stop capture text to"
8805 ?SPC(11)"the file";:GOSUB 8850:FG=1:GOTO 7046
8850 ?" in HyperTerminal.":RETURN
8900 REM ?CHR$(12);
8901 ?"Problem ...":?"Bad verification result or ID"
8904 ?SPC(5)"difference in:":?" computer"SPC(7)K$
8905 ?SPC(3)K$;SPC(10)"rows":?SPC(4)"CRC: < > CRC:"
8906 ?SPC(4)L;TAB(18)CRC:?SPC(9)"ID ="ID:END
8970 FOR G=I TO I+6:?PEEK(G)",";:NEXT:?PEEK(I+7):I=I+8:RETURN
8990 ?" Press C to continue ...";:INPUT A$:IF A$<>"C" THEN 8990
8992 RETURN
9000 C$="All DATA bytes =0":ID=32:RETURN
9001 DATA 0,0,0,0,0,0,0,0
9002 DATA 0,0,0,0,0,0,0,0
9003 DATA 0,0,0,0,0,0,0,0
9004 DATA 0,0,0,0,0,0,0,0
9005 CRC=0:RETURN:REM CRC in dec form !
- - - - - - - - - - - - - - - - - - - - - - - - - -
Keď som túto programovú verziu dokončil tak ma napadlo že by bolo dobré dostať všetky verzie x-talov pod jednu strechu (teda všetko v jednom) - ak sa zadarí tak výsledok uvidíte na Silvestra - mám na takúto úpravu programu ešte celý týždeň ...
___________________________________________________________
Info:
Tento článok bol počas jeho tvorby nedopatrením na istý čas uvoľnený na web už dňa 01.10.2023, teda ešte počas jeho zásadnej tvorby - program pritom nebol dotiahnutý do finálnej fázy, takže tomu kto sa v tom čase k nemu na stránke dostal sa zhlboka ospravedlňujem ... proste museli ste si počkať do Vianoc, otestovanie programu a aplikácia niektorých úprav je vec ktorá nejaký čas zaberie. Takže - hotovo a dnes to ide do sveta. Funkčnosť programu bola overená napálením správneho obsahu do niekoľkých kusov PROM 74188.
_______________________________________________________________________________
V uvedenom odkaze sú uverejnené všetky vydané verzie programového vybavenia pre programátor PROM 74188:
SBC6502 - 66 - PROM 74188 - všetky verzie programu, all program version.
___________________________________________________________
Návrat do všetkých pokračovaní o SBC6502:
http://blog.3b2.sk/igi/post/Directory-SBC6502.aspx
___________________________________________________________
Vaše hodnotenie, Rate post: