SBC6502 - 70 - PROM 74188 - program ver.1.11.(All In One).

By Administrator at December 31, 2023 09:00
Filed Under: SBC6502

SBC6502 s nasadenou doskou programátoru PROM 74188.

 

Ako som spomenul pred pár dňami na Vianoce - záverečnú verziu programu som si nechal aj na Silvestra (mal som teda na prerábku týždeň) - je to program pre programátor PROM 74188 ktorý v sebe integruje verziu 1.10s a priamu voľbu na všetky typy doteraz použitých x-talov. Na začiatku sa zvolí hodnota clocku ktorý používa Váš konkrétny SBC6502 - ďalej sa už pokračuje známym obsahom, toto je základný rozdiel oproti verzii 1.10 (taktiež v.1.10N a v.1.10S) Jednoducho mi nedalo aby som neskúsil dostať všetko priamo do jedného programu. Snažil som sa o čo najmenej potrebných zmien, tak aby zostalo všetko tak ako doteraz. Boli prevedené len kozmetické úpravy vzhľadu samotného menu.

Výhoda tejto verzie ? - stačí mať teraz iba jeden program pre 10 rozličných možných nasadených x-talov v SBC6502.

 

Úvodná obrazovka voľby hodnoty clocku SBC6502.


Rozšírené menu po spustení o položku (A).

(Zvolený x-tal 4.9152MHz.)


Pracovné menu, hodnota nastaveného clocku sa zobrazuje v záhlaví.

 

Zmeny:

 

Výpis dĺžky PGM pulzu v základnom menu sa zjednodušil, je použitá skrátená verzia (r1= round no.1, r2= round no.2).

 

Nový príkaz v menu:

V základnom menu pribudol príkaz (A)djust kde môžeme aj počas chodu programu meniť hodnotu použitého x-talu. Pozor, ak zmenu použijeme počas chodu programu tak sa vždy nastavia základné parametre pre PGM pulz na prednastavené hodnoty - a to pre 1.kolo=10msec pulz a pre 2.kolo=20msec pulz, pomocou príkazu (P) zase môžeme zmeniť a nastaviť nám vyhovujúce hodnoty dĺžky PGM pulzu ktoré potom následne budú platiť počas chodu programu až do jeho nového štartu (alebo následnej zmeny základného clocku).

 

Nevýhodou uvedeného riešenia je to že treba pri štarte tejto verzie programu vždy zvoliť správnu hodnotu použitého x-talu v SBC6502.

 

Verzia programu 1.11 (All in One):

74188 programmer_v111AiO.txt (14,12 kb)

____________________


Výpis programu ver.1.11 AiO:

 1000 CLEAR:POKE 15,80:PD=32500:PE=PD+32:DV=5:NS=1
 1004 B$="0123456789ABCDEF":R$="31.12.2023,x-tal = "
 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.11 (All in One)":S$=" + generate DATA rows"
 1009 X$="-->  ":W$="|               |":Z$=" --------"
 1010 PA=32768:PB=PA+1:PC=PA+2:CWR=PA+3:POKE CWR,137
 1015 ?CHR$(12):?SPC(24)"Special edition v.1.11 - AiO"
 1020 ?:?SPC(27)"No PROM in ZIF socket!":?
 1022 GOSUB 2600:?"(0) - 1.8432MHz":GOSUB 2600:?"(1) - 2.0000MHz"
 1026 GOSUB 2600:?"(2) - 2.4576MHz":GOSUB 2600:?"(3) - 2.5000MHz"
 1028 GOSUB 2600:?"(4) - 3.6864MHz":GOSUB 2600:?"(5) - 4.0000MHz"
 1030 GOSUB 2600:?"(6) - 4.5000MHz":GOSUB 2600:?"(7) - 4.9152MHz"
 1032 GOSUB 2600:?"(8) - 5.0000MHz":GOSUB 2600:?"(9) - 6.0000MHz"
 1034 GOSUB 2600:?"(Q)uit program"
 1036 ?:GOSUB 2600:?"Your SBC clock:";:INPUT V$
 1040 IF V$="0" THEN U=1:DV=2.25:U$="1.8432MHz"
 1041 IF V$="1" THEN U=1.09:DV=2.44:U$="2.0000MHz"
 1042 IF V$="2" THEN U=1.47:DV=3.15:U$="2.4576MHz"
 1043 IF V$="3" THEN U=1.5:DV=3.2:U$="2.5000MHz"
 1044 IF V$="4" THEN U=2.33:DV=4.5:U$="3.6864MHz"
 1045 IF V$="5" THEN U=2.53:DV=5:U$="4.0000MHz"
 1046 IF V$="6" THEN U=2.82:DV=5.6:U$="4.5000MHz"
 1047 IF V$="7" THEN U=3.13:DV=6:U$="4.9152MHz"
 1048 IF V$="8" THEN U=3.18:DV=6.2:U$="5.0000MHz"
 1049 IF V$="9" THEN U=3.8:DV=7.44:U$="6.0000MHz"
 1050 IF V$="0" OR V$="1" OR V$="2" OR V$="3" OR V$="4" THEN 1058
 1052 IF V$="5" OR V$="6" OR V$="7" OR V$="8" OR V$="9" THEN 1058
 1054 IF V$="Q" THEN END
 1056 ?:? SPC(30);:GOSUB 1999:GOSUB 2000:RUN
 1058 LG=2:PP=10*U:BN=0:D=0:B=0:JJ=PP:JW=LG:D$="Default setting for "
 1060 ?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$;U$;:GOSUB 2990
 1100 GOSUB 8781:?" -"SPC(20)"(P)GM pulse r1 ="PP/U;M$;
 1102 ?",r2 ="PP/U*LG;M$;:GOSUB 2990
 1104 GOSUB 2995:?"(A)djust new SBC6502 clock  parameter";:GOSUB 2990
 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$="A" THEN 1015
 1136 IF A$="P" THEN D=1:GOSUB 5500:GOTO 1600
 1138 IF A$="C" THEN GOSUB 5500:GOTO 3500
 1140 IF A$="D" THEN GOSUB 5500:GOTO 4300
 1142 IF A$="H" THEN GOSUB 5500:GOTO 4200
 1144 IF A$="R" THEN IG=2:GOSUB 5500:GOTO 5000
 1146 IF A$="T" THEN GOSUB 5500:GOTO 6000
 1148 IF A$="V" THEN E=1:GOTO 8000
 1150 IF A$="W" THEN E=9:GOSUB 5500:GOTO 7000
 1152 IF A$="S" THEN E=9:RP=1:GOSUB 5500:GOTO 1800
 1154 IF A$="Q" THEN GOSUB 5500:END
 1156 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
 2600 ?SPC(31);: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 !

____________________________________________________________

 

Záver:

Od uverejnenia prvých programových verzií 1.01 a 1.02 pre PROM7188 programátor práve ubehli 4 roky ± nejaký ten deň (týždeň) navyše, za tú dobu som vydal postupne viacero verzií programového vybavenia. Všetky postupné verzie programového vybavenia boli napísané a aj editované v Notepade, ani raz som pri vytváraní nových verzií nepoužil výpis listingu na tlačiareň, bolo to síce pri tvorbe programu vďaka tomu o niečo náročnejšie, ale je to malý dôvod na hrdosť že som to takto zvládol.

Programovanie programátoru PROM 74188 na SBC6502 bolo pre mňa skutočne zábavou a za tú dobu som sa poriadne precvičil v programovaní - hlavne preto že štandartná príručka (september 1978) pre jazyk OSI 6502 BASIC VERSION 1.0 REV 3.2 COPYRIGHT 1977 BY MICROSOFT CO. má rozsah = celých 18 strán ... (uvedené číslo počtu strán je správne - pričom z toho je prvá strana len nadpis a strana č.2 je úplne čistá, takže reálne sme na čísle 16) a to je všetko čo sa týka programovania. To naozaj nie je veľa a práve preto som vtedy (rok 2019) považoval za výzvu niečo "väčšieho" na tomto SBC naprogramovať.

____________

Je to myslím si že už tak akurát aby som s tvorbou programového vybavenia pre pre programátor PROM 74188  definitívne skončil (pritom všetky vydané verzie dokázali bez problémov naprogramovať PROM 74188, akurát som sa snažil vždy niečo ďalšie v programe vylepšiť) - avizoval som to už viackrát, ale ako vidieť doteraz som úplné ukončenie prác na programovom vybavení akosi stále nedodržal, už to teraz skutočne hodlám napraviť.Smile

Aby bolo jasné - rozhodne netvrdím že by sa stávajúci program nedal ešte vylepšiť, ale smerujem svoje úsilie už do niečoho iného.

____________

Na druhú stranu - naozaj sa nedá povedať že by som počas uvedenej doby nepodporoval programátor PROM 74188 novým programovým vybavením (vydal som celkove 15 verzií, sakrble - na tie 4 roky čo prešli mi to spätne pripadá naozaj dosť ...). Rok 2021 bol rokom najviac vydaných verzií - hľadal som vtedy optimálne riešenie, ale v uvedenom roku som ho nenašiel, bola to tzv. "slepá vývojová cesta" - rozumej = príliš komplikované pri používaní ak sa chceli využiť všetky funkcie (hlavne reburning). Dobré riešenie som objavil až o rok neskôr - následne som potom v ďalších verziách už len doťahoval detaily. Aj tu všeobecne platí že najlepšie je začať používať najnovšie dostupnú verziu programu pretože tá vie toho najviac.

Takže - držím palce pri pálení 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.

_____________________________________________________________

Vaše hodnotenie, Rate post:

SBC6502 - 69 - PROM 74188 - program ver.10.s(pecial).

By Administrator at December 24, 2023 09:00
Filed Under: SBC6502

"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ť ...)Smile

 

Ú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 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.

___________________________________________________________

Vaše hodnotenie, Rate post:

12_2023 Blog, Notes.

By Administrator at December 24, 2023 09:00
Filed Under: Blog

24.12.2023

Vianočná programová verzia pre programátor PROM 74188:

SBC6502 - 69 - PROM 74188 - program ver.10.s(pecial).

____________________________________________________

 

Všetkým čitateľom želám pekné Vianoce a všetko dobré do Nového roku:

 

PF ŠNR 2024 ...

Laughing

_____________________________________________________________

31.12.2023

Záverečná verzia programu pre programátor PROM 74188 (AllInOne) t.j. všetky typy x-talov sú v jednom programe:

SBC6502 - 70 - PROM 74188 - program ver.1.11.(All In One).

_________

"Koncoročná" poznámka:

Ako vidieť vyzerá to tak že som úplne na blog nezanevrel a sem-tam niečo ešte pridávam, rozhodne som zmenšil tempo pridávania článkov, prospieva mi to. Takže je dosť pravdepodobné že ešte nejaké veci pribudnú aj nasledujúci rok ... uvidím. Teraz si určite dám dlhšiu pauzu.

_____________________________________________________________

Vaše hodnotenie, Rate post:

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: