Du er her: Forside » Guider » Programmér en 27C512 (og andre EPROM'er/EEPROM'er) med RURP » Guider » Programmér en 27C512 (og andre EPROM'er/EEPROM'er) med RURP
En EPROM rummer de første instruktioner, en retrocomputer kører, programmet i en arkademaskine eller koden i et spilmodul. Denne guide viser, hvordan du lægger dine egne data ind i en med Relatively Universal ROM Programmer (RURP), Anders Nielsens open source-Arduino-shield. Eksemplet er en chip af typen 27C512, fra tom sokkel til verificeret kopi.
ROM betyder read-only memory: en chip, der beholder sit indhold, når strømmen er slukket. En computer læser den som al anden hukommelse. Den lægger en adresse på adressebenene (A0-A15 på en 27C512) og får én byte tilbage på databenene (D0-D7). P'et i EPROM står for programmerbar: du kan selv skrive den, men kun i en programmer og ved en højere spænding end de 5 V, chippen kører på. I den færdige computer bliver chippen kun læst.
En 6502-computer er den klassiske grund til at programmere en. Ved opstart henter CPU'en sin startadresse fra reset-vektoren på $FFFC-$FFFD, helt øverst i adresserummet, så der skal ligge ROM dér med et gyldigt program. Vores 6502-guide forklarer hvorfor, og guiden til 6502 og SRAM viser, hvordan RAM og ROM deler det 64 KB store adressekort. Den samme slags chip rummer firmwaren i hjemmecomputere, arkademaskiner, synthesizere og industriudstyr fra 1980'erne og 1990'erne. Typiske opgaver er at brænde din egen firmware til et byggesæt som 65uino, at gemme en sikkerhedskopi af en gammel ROM eller at erstatte en, der er gået i stykker.
$FFFC-$FFFD
En 27C512 rummer 512 kbit, altså 64 KB: 65.536 adresser med 8 bit hver. Det er præcis ét 6502-adresserum, og derfor dukker typenummeret op i så mange retroprojekter.
Programmering kan kun ændre bit fra 1 til 0. For at få 1-tallerne tilbage skal chippen slettes, og hvordan den slettes, afgør, hvad du skal have på arbejdsbordet.
Relatively Universal ROM Programmer er et Arduino-shield. SMD-komponenterne er forpåloddede: tre 74HC573-latches, der holder adressen, en boost-regulator, der laver programmeringsspændingen, og transistorkontakter, der lægger spændingen på det rigtige sokkelben under softwarestyring. Soklen og pinheaderne lodder du selv. Et lille trimpotentiometer indstiller programmeringsspændingen; README'en angiver 12-27 V. Rev 2 og senere vælger chips med 24, 28 eller 32 ben med transistorer i stedet for jumpere, og Rev 2.1 fik en polyfuse på 200 mA foran regulatoren. Rev 2.2 og Rev 2.3, den nuværende version, har en JP4 med tre positioner, hvor den ekstra position er til chips af typen 2716.
Firestarter er den open source-software, der anbefales til RURP. Den er skrevet af Henrik Olsson og udgivet under MIT-licensen på GitHub. Den består af to dele: firmware, der kører på Arduinoen under RURP-shieldet og styrer chipsoklen, og kommandolinjeværktøjet firestarter på din computer, som sender den kommandoer gennem USB-kablet. Du installerer værktøjet med pip install firestarter, og værktøjet installerer derefter selv firmwaren på Arduinoen (se nedenfor).
firestarter
pip install firestarter
For at bruge RURP med Firestarter skal du også bruge:
RURP's README anbefaler Firestarter, hvis du bare vil programmere ROM'er. Kommandoerne nedenfor er fra den nuværende stabile udgave, 3.1.0.
brew install avrdude
sudo apt install avrdude
pip install firestarter firestarter --version
-b leonardo
-b uno328pb
firestarter fw -i -b uno
firestarter fw firestarter hw
Værktøjet og firmwaren skal have de samme to første versionsnumre (3.1 med 3.1). Når du opgraderer, så opgradér værktøjet først og firmwaren bagefter.
Tjek retningen to gange. Anders påpeger, at sikringen på Rev 2.1 ikke er nogen garanti: en ROM, der sættes omvendt i, kan stadig tage skade.
firestarter info <chip> viser alt om én chip: størrelse, type, om den kan slettes elektrisk, dens VPP, pinout og jumperindstillingen for hver shield-revision. Den bruger ikke programmeren. Kør den for hver ny chiptype.
firestarter info <chip>
Indstil spændingen. Shieldet har én justerbar regulator. Dens fulde udgang hedder VPE. Til EPROM'er med 28 og 32 ben tager firmwaren VPP fra den gennem en faldmodstand. Du indstiller begge med det samme trimpotentiometer, men måler den skinne, chippen får:
firestarter vpp
firestarter vpe
Kør kommandoen med tom sokkel; den viser spændingen igen og igen, men forbinder den ikke til soklen. Drej langsomt på trimpotentiometeret med en lille skruetrækker, til aflæsningen passer med VPP-linjen fra info, og tryk Ctrl+C. Før hver skrivning måler firmwaren igen. Mere end 0,5 V for højt stopper skrivningen; under 95 % af målet giver en advarsel.
info
Til en W27C512 er målet 12 V. Skyd ikke over: databladets absolutte maksimum på OE/VPP og på A9 er 14,5 V. Sletnings-spændingen på 14 V indstiller du ikke separat; ved sletning lægger firmwaren den ikke-reducerede VPE-skinne på A9 og OE/VPP i 100 ms.
JP4 sender programmeringsspændingen til ben 1 på chips, der skal have den dér. 27C512 har A15 på ben 1 og deler VPP med /OE på ben 22, så den skal have ingen jumper. 27C256 og 2764 har VPP på ben 1, så på Rev 2.2 og 2.3 sættes jumperen på 28-bens-polen (mod soklen), og på Rev 2.0 og 2.1 er JP4 lukket. 24-bens-polen (mod boardkanten) er kun til chips af typen 2716 med VPP på ben 21. Den forbinder soklens ben 1 med soklens ben 25, så fjern den til alle chips med 28 og 32 ben. Lad aldrig JP4 sidde på til en 32-bens chip: README'en advarer om, at det højst sandsynligt skader ROM'en, programmeren eller begge.
JP5 er en loddejumper på bagsiden, som er forbundet, når boardet er nyt. Skær den kun over til chips med adresselinjen A19 på ben 1, fx 27C080 og M27C801. Firestarter beder dig bekræfte, at JP5 er skåret over, før den skriver til eller sletter en af dem. Rev 0- og Rev 1-boards bruger i stedet jumperne JP1-JP3; info viser også deres indstillinger.
-a
build/abn6507rom.bin
assemble.sh
firestarter write w27c512 build/abn6507rom.bin
firestarter search 27C512 firestarter info W27C512
W27C512
VPP: 12.0v
Can be erased: yes (electrically erasable)
id
0xDA08
firestarter id W27C512 firestarter read W27C512 backup.bin
firestarter write W27C512 build/abn6507rom.bin --verify
Write to W27C512: verified -- the read-back matches.
verify
blank
firestarter verify W27C512 build/abn6507rom.bin firestarter blank W27C512
Samme opgave med en UV-27C512, fx M27C512: kør firestarter blank M27C512 først. En UV-chip slettes aldrig af programmeren, så write afviser en chip, der ikke er tom, med en linje som Refusing write to M27C512: not blank at 0x000123, v: 0x4F. Slet den med UV-lys, og prøv igen. info M27C512 viser VPP: 13.0v og Can be erased: no (UV erase only), så indstil spændingen til 13,0 V før firestarter write M27C512 rom.bin --verify.
firestarter blank M27C512
write
Refusing write to M27C512: not blank at 0x000123, v: 0x4F.
info M27C512
VPP: 13.0v
Can be erased: no (UV erase only)
firestarter write M27C512 rom.bin --verify
Firestarter fører en liste over chips, der er valideret på rigtig hardware. I 27C512-familien står W27C512, som bestod på to opstillinger (en Leonardo med et Rev 2.0-shield og en Uno med et Rev 2.2-shield), TMS27C512 og SST27SF512. De øvrige 27C512-varianter er i databasen, men endnu ikke validerede.
Ja, RURP programmerer den. firestarter search 27C256 viser 26 databaseposter fra producenter som AMD, Atmel, Intel, Microchip, ST og TI, alle på samme 28-bens EPROM-protokol som 27C512. Tre ting er anderledes:
firestarter search 27C256
firestarter info AM27C256
Kan en 27C512 erstatte en 27C256? Ofte, men det afhænger af boardet. Pinouts er ens bortset fra ben 1. En 27C256 skal have ben 1 (VPP) på forsyningsspændingen, når den læses (Microchips datablad), så boards binder som regel det ben til 5 V, og en 27C512 ser så A15 = 1 og svarer fra sin øverste halvdel. Et almindeligt trick er at skrive det 32 KB store image to gange i én fil på 64 KB, så chippen virker, uanset hvilket niveau ben 1 har:
# macOS, Linux cat rom32k.bin rom32k.bin > rom64k.bin # Windows copy /b rom32k.bin+rom32k.bin rom64k.bin
Tjek dit boards diagram først. Styres ben 1 af noget andet, gælder tricket ikke.
firestarter -p /dev/ttyACM0 fw
fw -i
-b uno
hw
rev_unknown
firestarter config --rev 5
VPP is high: 12.9V > 12.0V
VPP is low: …
Chip ID … does not match expected ID …
-f
Refusing write … not blank at …
firestarter erase W27C512 -b
Byte at … failed to program within 25 pulses
landed, but the read-back did not verify
firestarter verify <chip> <fil> --full
blank/contact
address-line
erase
M2732A
Skal jeg have en UV-sletter? Kun til UV-EPROM'er med vindue, som M27C512, 27C256, 2764 og 2732. W27C512 og W27C020, 28C-EEPROM'er og SST39SF-flash slettes i RURP.
Hvilken Arduino? En Uno, en Leonardo eller et Uno-formet board med ATmega328PB, til Firestarter. Se på chippens påskrift for at vælge det rigtige -b-flag.
-b
Skal mit image have præcis samme størrelse som chippen? Nej. write skriver filen fra adresse 0 (eller fra -a), og verify sammenligner så mange bytes, som filen rummer.
Kan jeg tage en sikkerhedskopi af en gammel ROM? Ja: firestarter read <chip> backup.bin og derefter firestarter verify <chip> backup.bin. Indstil jumpere og spænding til chippen først, som ved en skrivning.
firestarter read <chip> backup.bin
firestarter verify <chip> backup.bin
Programmerer den 28C64- og 28C256-EEPROM'er? Ja, ved 5 V uden programmeringsspænding. Firestarter låser deres software-skrivebeskyttelse op før hver skrivning. Ingen 28C-chip var på valideringslisten for udgave 3.1.0, så betragt din første som en test.
Hvad står RURP for? Relatively Universal ROM Programmer.
Hvor kan jeg se den i brug? I Anders' video Open $9 ROM Burner just got even better and easier to use! (engelsk), som installerer Firestarter og brænder en chip, og i Open Source ROM Burner Just Keeps Getting Better! om Rev 2.1.
Programmeren og det, du lodder på den:
Til computeren, som ROM'en skal sidde i:
Chips fra denne guide, som iMania fører. Det er brugte dele, så se lagerstatus på hver side:
Se derefter, hvordan en ROM får sin plads i adressekortet, i guiden til adressedekodning.
Kilder. RURP-repositoriet og README (jumpere, spænding, sikkerhedsregler) · projektloggen på Hackaday (74HC573-latches, sikringen på Rev 2.1) · Firestarter-wikien: Install, Shield Revisions, Reading Chips, Writing and Verifying, Pin Maps samt Firestarter 3.1.0-værktøjet og dets chipdatabase (output fra search og info) · Datablade: Winbond W27C512 (slette- og programmeringsspændinger, pinout, signatur), ST M27C512 (VPP, UV-sletning), Microchip 27C256 (pinout, VPP), Winbond W27C020, SST39SF010A/020A/040. Begge diagrammer er tegnet til denne guide.
search
Vi bruger cookies for at give dig den bedst mulige oplevelse på iMania.dk. De givers os også mulighed for at analysere hvordan brugere anvender siden, så vi kan forbedre den for dig. Persondatapolitik