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 8255 je už vďaka programu správne inicializovaný a teda je v stave kedy sa s ním dá komunikovať a zároveň blokuje 10.5V na napájaní PROM a pätička PROM 74188 je bez napájania (Full verzia).

     

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 8255-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).

 

Program je napísaný tak, že je možné ľahko modifikovať pre rôzne hodnoty použitých x-talov pre procesor, 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 (dec) 31000÷31031 pre uloženie 32byte RAM a adresy 32032÷32029 pre rozloženie jedného bytu na jednotlivé bity (teda zaberá ďalších 8byte). (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 8255.


Dôležité adresy (dec) čipu 8255 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 to najjednoduchšie aké existuje - 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 súčasťou DATA riadkov. Ak to 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 v terminálovom okne. Nehodlám tu robiť podrobný popis programovacieho pulzu, to si pozrite v datasheete (bude uverejnený v 4. časti), tu je to v programe zabezpečené tak ako treba, nakoniec pozrite si to na konci tohoto článku - sú priložené dumpscreeny z osciloskopu.

 

PROM 74188 musí byť pre programovanie tzv. "čistá" t.j. musí obsahovať samé nuly aby sa dalo pokračovať, ak je v nej už niečo zapísané tak na to program upozorní (vždy sa to kontroluje) a nedovolí zápis. Program najprv napaľuje všetky byte jednotlivo bit po bite (ak je obsahom na potrebnom mieste 0 tak je programovací pulz obídený, 0 sa 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 74188 požadovaný obsah - program vyhlási PROM 74188 za zlú a ukončí sa. Oteplenie čipu vďaka wait stavom je úplne zanedbateľné, je to niekde okolo 40°C, merané bezdotykovým teplomerom.


Charakteristické pre tento typ pamäte je špeciálne programovanie, programuje sa bit po bite v rámci bytu, nie naraz jeden byte. Najprv som uvažoval že si rozložím 32byte pekne hneď pre napálením najprv do postupnosti 256byte (32x8) kde to bude pekne zoradené bit po bite a potom to už len budem bit po bite hnať cez programátor - lenže raz večer tesne pred spaním ma napadlo že bude stačiť ak budem vždy postupne rozkladať len jeden jediný byte (čas čo to spotrebuje aj tak treba na zotavenie PROM) a ten 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 stačí púhych 8byte ... (aj keď tu potrebná RAM naozaj nehrá rolu).

___________________________________________________________


V programe oproti uverejnenému mauálu 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 niekedy rozhodol sa 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 napísal v Notepade, rozhodne sa mi tam píše lepšie ako v okne HyperTerminálu. Jediná nevýhoda - ak tam (v Notepade) náhodou zdvojíte číslo riadku - tak to dá poriadne zabrať než nájdete chybu, program v SBC6502 poctivo prepíše prvý riadok z rovnakým číslom priamo obsahom druhého riadku z tiež rovnakým číslom ... Ako vždy keď píšem program ak je jedna časť odskúšaná -a funguje, tak do nej už 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 tomu program 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 vo verzii 1.02 už 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, riadky 2010 až 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ýrazne pomalšie ako počítač ...).

 

Pretože program spoľahlivo funguje, tak momentálne to nevyzerá na to že by po verzii programu 1.01 nasledovala nejaká verzia 1.02 ... ak áno, asi to len budú kozmetické úpravy, ktoré nemajú vplyv na funkciu programu.

(Poznámka 08.01.2020 - došlo na tie kozmetické úpravy ...  je tu ver.1.02, manuál sa nemení, je stále platný pre všetky verzie.)

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

 ____________________________________________________________

 

Program bol vyskúšaný a otestovaný pre 4 rozličné rýchlosti procesoru - a to 1.8432MHz, 2.4576MHz, 4.00MHz a 5.00MHz. Aby sa nemuselo špekulovať čo a ako a kde treba  previesť zmeny - uverejňujem 4x kompletný program a to vždy pre konkrétnu rýchlosť procesoru.

 

Pritom rozdielne riadky v programoch - sú to tieto riadky, je ich iba 5:


2010 - čakacia slučka, prispôsobené rýchlosti procesoru
2050
- čakacia slučka, prispôsobené rýchlosti procesoru
2100
- čakacia slučka, prispôsobené rýchlosti procesoru
3750
- programovací pulz (jeho dĺžka), prispôsobené rýchlosti procesoru
8763
- dátum vzniku, verzia programu, použitá rýchlosť procesoru

 

No a teraz vlastné programové vybavenie - napísané v jazyku Microsoft BASIC, momentálne je dostupná verzia 1.02 zo dňa 08.01.2020:

 

Program pre rýchlosť procesoru 6502 = 1.8432MHz:

74188 programmer 1_8432MHz_v102.txt (11,34 kb)


Program pre rýchlosť procesoru 6502 = 2.4576MHz:

74188 programmer 2_4576MHz_v102.txt (11,34 kb)


Program pre rýchlosť procesoru 65C02 = 4.00MHz:

74188 programmer 4_0000MHz_v102.txt (11,34 kb)

 

Program pre rýchlosť procesoru 65C02 = 5.00MHz:

74188 programmer 5_0000MHz_v102.txt (11,34 kb)


Jedná sa o čisto textové súbory.

_____________________________________________________


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  a následná 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:

(Do obrázkov som vložil pomocné texty = netreba ďalšie vysvetlivky.)

 

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 dĺžku v rozmedzí 1÷20msec, kde sa s prehľadom nachádzam). 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: CS je negované, môj editor to nedokáže priamo vypísať do textu. 

 

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.

_________________________________________________________


Ukážka - listing programu pre verziu rýchlosti procesoru = 4.00MHz:


 1000 REM ******************* Start *************************
 1001 REM **    SBC6502 Erika0 - 32kB RAM + chip 8255A     **
 1002 CLEAR:PD=31000:PE=31032:POKE 15,80:REM 80column.
 1003 REM   PD adr31000-31031 = 32byte PROM data content   **
 1004 REM ***************************************************
 1005 REM PE adr31032-31039=8byte(one byte to bit conversion)
 1006 REM ***************************************************
 1007 CWR=32771:PA=32768:PB=32769:PC=32770
 1008 REM CWR register,PA=adress portA,PB=port B,PC=port C
 1009 REM ****** Initialize port A, B, C (chip 8255) ********
 1010 POKE CWR,137: REM CWR register port A,B=OUT,Port C=IN
 1011 POKE PA,0:POKE PB,0:REM PA=null, PB=null
 1012 REM ******************* Options ***********************
 1013 ? CHR$(12):REM CLS-for HyperTerminal
 1014 ? TAB(19);"Turn on the power to the programmer !":GOSUB 2000
 1020 Z=0:X=0:Y=0:POKE PB,0:GOSUB 8760
 1100 INPUT A$
 1120 IF A$="H" THEN 4200
 1130 IF A$="D" THEN 4300
 1140 IF A$="R" THEN 5000
 1150 IF A$="T" THEN 6000
 1160 IF A$="V" THEN 8000
 1180 IF A$="W" THEN 7000
 1190 IF A$="E" THEN 8804
 1195 IF A$="Q" THEN 8804
 1200 ? " Bad input !":? A$:GOSUB 2000:GOTO 1020
 2000 REM ************** Waiting subroutines  ***************
 2010 FOR F=0 TO 10000:NEXT F:RETURN
 2050 FOR F=0 TO 150:NEXT F:RETURN
 2100 FOR F=0 TO 500:NEXT F:RETURN
 3500 REM ****** Subroutine - conversion byte to bit ********
 3510 ?:? "Byte (dec) to bit:";A
 3520 S=PEEK (PE+0):? "b0:";S:GOSUB 3700
 3540 S=PEEK (PE+1):? "b1:";S:GOSUB 3700
 3560 S=PEEK (PE+2):? "b2:";S:GOSUB 3700
 3570 S=PEEK (PE+3):? "b3:";S:GOSUB 3700
 3580 S=PEEK (PE+4):? "b4:";S:GOSUB 3700
 3590 S=PEEK (PE+5):? "b5:";S:GOSUB 3700
 3600 S=PEEK (PE+6):? "b6:";S:GOSUB 3700
 3610 S=PEEK (PE+7):? "b7:";S:GOSUB 3700
 3620 RETURN
 3700 REM ************ Subroutine for burning ***************
 3701 IF S=0 THEN RETURN:REM 0=no programmming bit
 3702 REM description line number:
 3703 REM line 3720 - chip under voltage, relay on, waiting
 3704 REM line 3720 - port A, bit7=1 
 3705 REM line 3730 - adress to PA + bit data to port B
 3706 REM line 3730 - port A, bit7=1, relay on
 3707 REM line 3740 - Ucc=5V/10.5V, CS=1
 3708 REM line 3740 - port A, bit7=1, bit6=1, bit5=1,relay on
 3709 REM line 3750 - programming pulse =17msec.
 3710 REM line 3750 - Ucc=10.5V, CS=0, relay=on
 3711 REM line 3760 - end prog.pulse
 3712 REM line 3760 - Ucc=10.5V/5V, CS=1
 3713 REM line 3770 - Ucc=5V, CS=0, PB=0, relay=on
 3714 REM line 3770 - Ucc=0V, relay=off, waiting
 3720 POKE PA,128:GOSUB 2050
 3730 POKE PA,(A+128):POKE PB,S
 3740 POKE PA,(A+224):REM 128+64+32
 3750 POKE PA,(A+192):FOR F=0 TO 43:NEXT F
 3760 POKE PA,(A+160)
 3770 POKE PA,128:POKE PB,0:POKE PA,0:GOSUB 2050
 3990 RETURN
 4000 REM ******* Subroutine for computing CRC data ***Y*****
 4010 L=0
 4019 FOR G=PD TO PD+31:Q=PEEK(G):L=L+Q:NEXT G
 4040 RETURN
 4100 REM ******** Subroutine for CRC data in line **********  
 4110 RESTORE:L=0
 4120 FOR G=PD TO PD+31
 4130 READ M:POKE G,M
 4140 Q=PEEK(G):L=L+Q
 4150 NEXT G
 4160 RETURN
 4200 REM *************** Hexa input data *******************
 4202 GOSUB 4900:F=PD:B$="0123456789ABCDEF":N=0:S=0
 4203 ? "Adress:  data:":? "(hex)    (hex)"
 4206 L=N AND 15:H=(N-L)/16
 4207 ?" :";:? MID$(B$,H+1,1)MID$(B$,L+1,1);"     ";:INPUT A$
 4208 IF LEN (A$)=1 OR LEN (A$)>2 THEN GOSUB 4290:GOTO 4207
 4227 IF LEFT$ (A$,1)="F" THEN S=240
 4228 IF LEFT$ (A$,1)="E" THEN S=224
 4229 IF LEFT$ (A$,1)="D" THEN S=208
 4230 IF LEFT$ (A$,1)="C" THEN S=192
 4231 IF LEFT$ (A$,1)="B" THEN S=176
 4232 IF LEFT$ (A$,1)="A" THEN S=160
 4233 IF LEFT$ (A$,1)="9" THEN S=144
 4234 IF LEFT$ (A$,1)="8" THEN S=128
 4235 IF LEFT$ (A$,1)="7" THEN S=112
 4236 IF LEFT$ (A$,1)="6" THEN S=96
 4237 IF LEFT$ (A$,1)="5" THEN S=80
 4238 IF LEFT$ (A$,1)="4" THEN S=64
 4239 IF LEFT$ (A$,1)="3" THEN S=48
 4240 IF LEFT$ (A$,1)="2" THEN S=32
 4241 IF LEFT$ (A$,1)="1" THEN S=16
 4242 IF LEFT$ (A$,1)="0" THEN S=0
 4244 IF RIGHT$ (A$,1)="F" THEN S=S+15
 4245 IF RIGHT$ (A$,1)="E" THEN S=S+14
 4246 IF RIGHT$ (A$,1)="D" THEN S=S+13
 4247 IF RIGHT$ (A$,1)="C" THEN S=S+12
 4248 IF RIGHT$ (A$,1)="B" THEN S=S+11
 4249 IF RIGHT$ (A$,1)="A" THEN S=S+10
 4250 IF RIGHT$ (A$,1)="9" THEN S=S+9
 4251 IF RIGHT$ (A$,1)="8" THEN S=S+8
 4252 IF RIGHT$ (A$,1)="7" THEN S=S+7
 4253 IF RIGHT$ (A$,1)="6" THEN S=S+6
 4254 IF RIGHT$ (A$,1)="5" THEN S=S+5
 4255 IF RIGHT$ (A$,1)="4" THEN S=S+4
 4256 IF RIGHT$ (A$,1)="3" THEN S=S+3
 4257 IF RIGHT$ (A$,1)="2" THEN S=S+2
 4258 IF RIGHT$ (A$,1)="1" THEN S=S+1
 4259 IF RIGHT$ (A$,1)="0" THEN S=S+0
 4260 POKE F,S:F=F+1:N=N+1
 4279 IF F=PD+32 THEN GOSUB 8700:?:GOTO 8800
 4280 GOTO 4206
 4290 REM *** Subroutine for information about input data ***
 4291 ? TAB(31);" Out of range !!!":GOSUB 2010:RETURN
 4300 REM *************** Dec input data ********************
 4301 F=PD:S=0:GOSUB 4900
 4302 ? "Adress:      data:":? "(dec)        (dec)"
 4303 ? S,:INPUT Q: IF Q>255 THEN GOSUB 4290:GOTO 4302
 4304 POKE F,Q: F=F+1:S=S+1
 4305 IF F=PD+32 THEN GOSUB 8700:?:GOTO 8800
 4308 GOTO 4303
 4900 REM ******* Subroutine for input PROM DATA Name *******
 4910 ? TAB(19);"(     Name lenght = max.40 characters    )"
 4920 ? TAB(3);"PROM DATA NAME:";:INPUT C$
 4930 IF LEN (C$)>40 THEN GOSUB 4290: GOTO 4910
 4940 ?:RETURN
 4950 REM ***************************************************
 5000 ?:? "   - Read PROM and Write to Data line -":CRC=0
 5010 POKE PB,0:QW=0:A=0:POKE PA,128:REM PROM is energized
 5030 GOSUB 2050
 5035 QW=128+A
 5040 POKE PA,QW:OC=PEEK(PC)
 5060 POKE (PD+A),OC
 5080 CRC=CRC+OC
 5090 A=A+1
 5100 IF A=32 THEN GOTO 5120
 5110 GOTO 5040
 5120 REM IF CRC=0 THEN ?:?"     BLANK  PROM !":GOTO 5160
 5130 REM IF CRC>0 THEN ?:? "     ACTIVE PROM !":?
 5140 POKE PA,0: POKE PB,0:REM PROM is without power
 5150 IF CRC>0 THEN GOSUB 4900:GOSUB 8700:?:GOSUB 8800:END
 5160 POKE PA,0: POKE PB,0:GOSUB 2000:GOTO 1020
 5170 REM ***************************************************
 6000 ?:? "        Test - read blank PROM ";
 6005 POKE PB,0: REM Port B=0
 6010 QW=0:A=0:POKE PA,128:REM PROM is energized
 6030 GOSUB 2050:REM Delay to Relay ON
 6035 QW=128+A
 6040 POKE PA,QW:OC=PEEK(PC)
 6050 IF OC=0 THEN 6070
 6060 ? " Not a blank PROM ! - Insert new PROM !"
 6065 POKE PA,0:POKE PB,0:GOSUB 2000:GOTO 1020
 6070 A=A+1:IF A=32 THEN GOTO 6100
 6090 GOTO 6040
 6100 ? " Good - a blank PROM !":POKE PA,0:POKE PB,0
 6105 IF Z=1 THEN 7020
 6110 GOSUB 2000:GOTO 1020
 7000 REM ****************** PROM WRITING *******************
 7010 ? CHR$(12):REM CLS-for HyperTerminal
 7012 ?"                  WRITING PROM 74188 ...":?
 7015 Z=1: GOTO 6000
 7020 GOSUB 9000:? " Name Data file:";C$
 7030 GOSUB 9005:? " CRC=";CRC:IF CRC=0 THEN ?" No valid data !"
 7035 IF CRC=0 THEN GOSUB 2000:GOTO 1020
 7040 ?:?" Programming PROM - continue Y/N";:INPUT A$
 7045 IF A$="N" THEN 1020
 7050 IF A$="Y" THEN 7070
 7060 ?:? " Bad input !":GOSUB 2000:GOTO 7000
 7070 QW=0:A=0
 7100 RESTORE
 7110 REM ********** Reading Data line to program ***********
 7120 FOR G=PD TO PD+31:READ M:POKE G,M:NEXT G
 7200 REM ********** One byte to bit conversion *************
 7210 POKE PA,128:POKE PB,0:GOSUB 2050
 7310 A=0:QW=0
 7320 FOR G=PD TO PD+31
 7330 Q=PEEK(G):K=Q
 7340 FOR F=PE TO PE+7:POKE F,0:NEXT F
 7400 IF K>=128 THEN POKE (PE+7),128:K=K-128
 7410 IF K>=64 THEN POKE (PE+6),64:K=K-64
 7420 IF K>=32 THEN POKE (PE+5),32:K=K-32
 7430 IF K>=16 THEN POKE (PE+4),16:K=K-16
 7440 IF K>=8 THEN POKE (PE+3),8:K=K-8
 7450 IF K>=4 THEN POKE (PE+2),4:K=K-4
 7460 IF K>=2 THEN POKE (PE+1),2:K=K-2
 7470 IF K>=1 THEN POKE (PE+0),1:K=K-1
 7480 GOSUB 3500
 7490 A=A+1:GOSUB 2050
 7720 NEXT G
 7725 ?:? "End programming ...":GOSUB 2000:?:? "Verifying ..."
 7730 POKE PA,0:POKE PB,0:A=0:QW=0:GOSUB 2000
 7990 GOTO 8080
 8000 REM *********** VERIFYING PROM - DATA line ************
 8010 RESTORE
 8015 POKE PA,128:POKE PB,0:GOSUB 2050:A=0:L=0:QW=0
 8020 FOR G=PD TO PD+31
 8030 READ M:POKE G,M
 8040 Q=PEEK(G):L=L+Q
 8050 NEXT G
 8080 A=0:FOR G=PD TO PD+31:QW=128+A
 8090 POKE PA,QW:Q=PEEK(PC):R=PEEK(G)
 8091 ?"Adress(dec):  (PC):       (PROM):"
 8095 ?A,Q,R
 8100 IF Q=R THEN 8120
 8110 ? " Problem: PROM  <>  Data line !!!":X=1
 8120 A=A+1:NEXT G
 8121 IF Y=1 AND X=1 THEN ?:?" Sorry, bad PROM ...":POKE PA,0:END
 8122 IF Y=1 AND X=2 THEN 8130
 8125 IF L=0 THEN ?" Blank PROM !!!":POKE PA,0:GOSUB 2000:GOTO 1020
 8126 IF X=1 THEN ?:?" New attempt to burn, please wait ...":POKE PA,0
 8127 IF X=1 THEN :POKE PA,0:GOSUB 2000:X=X+1
 8128 IF X=2 THEN Y=1:POKE PA,0:GOSUB 2000:GOTO 7200
 8130 ?:? " Verifying O.K !":POKE PA,0:GOSUB 2000:GOTO 1020
 8700 ?:?"**** Subroutine PROM 74188 line data generator ****":?
 8711 ? "9000 C$=";CHR$(34);C$;CHR$(34);":ID=32:RETURN"
 8712 ? "9001 DATA";:FOR G=PD TO (PD+6):? PEEK(G);",";:NEXT G
 8713 ? PEEK(PD+7)
 8714 ? "9002 DATA";:FOR G=(PD+8) TO (PD+14):? PEEK(G);",";:NEXT G
 8715 ? PEEK(PD+15)
 8716 ? "9003 DATA";:FOR G=(PD+16) TO (PD+22):? PEEK(G);",";:NEXT G
 8717 ? PEEK(PD+23)
 8718 ? "9004 DATA";:FOR G=(PD+24) TO (PD+30):? PEEK(G);",";:NEXT G
 8719 ? PEEK(PD+31)
 8720 GOSUB 4000
 8730 ? "9005 CRC=";L;":RETURN";":REM CRC in (dec) form !":?
 8735 ?"***************************************************"
 8740 RETURN
 8760 REM **************** Subroutine MENU ******************
 8761 ? CHR$(12):REM CLS-for HyperTerminal
 8762 ? TAB(16);"*-- 74188 PROM programmer ---- Igi(c)2019 -----*"
 8763 ? TAB(16);"*-- 08.01.2020, ver.1.02, SBC6502 - 4.00MHz ---*"
 8764 ? TAB(16);"*";TAB(63);"*"
 8765 ? TAB(16);"*     (D) - dec input data to Data line        *"
 8766 ? TAB(16);"*     (H) - hex input data to Data line        *"
 8767 ? TAB(16);"*     (R) - reading PROM to Data line          *"
 8768 ? TAB(16);"*     (T) - test blank PROM                    *"
 8769 ? TAB(16);"*     (V) - verify data PROM - Data line       *"
 8770 ? TAB(16);"*     (W) - write data PROM from Data line     *"
 8771 ? TAB(16);"*     (Q) - or (E)nd program                   *"
 8772 ? TAB(16);"*";TAB(63);"*"
 8773 ? TAB(16);"*------------ Data line file name: ------------*"
 8774 GOSUB 9000:? TAB(16);"*   ";C$;TAB(63);"*"
 8775 ? TAB(16);"*----------------------------------------------*"
 8776 GOSUB 4100:IF L=0 THEN GOTO 8780
 8777 GOSUB 9005:IF L<>CRC THEN GOTO 8900
 8778 ? TAB(16);"*      Valid data in memory !    CRC=";CRC;TAB(63)"*"
 8779 GOTO 8781
 8780 ? TAB(16);"*    No valid data in memory !  CRC=";CRC;TAB(63)"*"
 8781 ? TAB(16);"*----------------------------------------------*"
 8782 RETURN
 8800 REM ************** Info for (D),(H),(R) ***************
 8801 ? "    Save this data (lines 9000-9005) in the"
 8802 ? "          specified line positions,"
 8803 ? "       and then run the program again !":?:?
 8804 ?:? " End program ...":END
 8900 REM ***************** Verify problem ******************
 8901 ?
 8902 ? " Problem ..."
 8903 ? " Bad verification result, difference in:"
 8904 ? " Computer        Data line"
 8905 ? " data CRC:  < >    CRC:"
 8910 ? " L=";L;:?"   CRC=";CRC:END
 8990 REM *********** PROM 74188 data lines *****************
 9000 C$=" Test file, 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 !
 9006 REM ********************* End *************************

 

___________________________________________________

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 - je to môj pohľad na veci, dúfam že na mojich stránkach nájdete aj to čo hľadáte ...