Sisällysluettelo:

6502 Minimitietokone (Arduino MEGA: lla) Osa 3: 7 vaihetta
6502 Minimitietokone (Arduino MEGA: lla) Osa 3: 7 vaihetta

Video: 6502 Minimitietokone (Arduino MEGA: lla) Osa 3: 7 vaihetta

Video: 6502 Minimitietokone (Arduino MEGA: lla) Osa 3: 7 vaihetta
Video: История CPU: MOS 6502 2024, Marraskuu
Anonim
6502 Minimitietokone (Arduino MEGA: n kanssa) Osa 3
6502 Minimitietokone (Arduino MEGA: n kanssa) Osa 3

Jatkaessani edelleen, olen nyt lisännyt emolevyyn Octal -salvan, 8 suorakulmaista LEDiä ja 220 ohmin vastuksen. Ryhmän yhteisen nastan ja maan välissä on myös hyppyjohdin, jotta LEDit voidaan sammuttaa. 74HC00 NAND -portti on korvattu 78LS08 AND -portilla, portin johdotusta on myös muutettu. AND -portti tarkoittaa, että 6522 sijaitsee nyt 6000 dollarissa E000 dollarin sijasta.

6502: n ajamiseen on myös tappi ulkoisen kellon liittämistä varten. Tällä liitännällä MEGA: n ei tarvitse antaa kellosignaalia. MEGA valvoo edelleen prosessorin toimintaa kuten ennenkin.

Käytin 20 -nastaista 74HC373 salpaa varten, koska minulla oli niitä. Tämä oli OK leipälaudalla, mutta 74HC573 on väyläyhteensopiva ja olisi säästänyt paljon johdotuksia. UCN5801A, joka on 22 -nastainen IC, voidaan myös ottaa huomioon piirissä, mutta johdotus on hieman erilainen.

Ylempi, yksi oranssi LED -merkkivalo on virran merkkivalo ja vasen alakulma punainen osoittaa, kun kirjoitus on käynnissä. Jälkimmäinen on merkityksetön, jos levyä ajetaan suuremmilla nopeuksilla.

Muokattu piiri on yllä (74HC573: n kanssa).

Vaihe 1: Esittelyohjelmat

Esittelyohjelmat
Esittelyohjelmat

Kaksi yksinkertaista esittelyohjelmaa sisältyy 6502 -näyttöön, ja niiden purettu koodi on täällä.

Tämä ohjelma lataa 1 6502 A -rekisteriin ja tallentaa sen salpaan. Sitten se lisää yhden A -rekisteriin ja tallentaa sen salpaan. Sitten se hyppää takaisin 1005 dollariin ja prosessi toistuu ikuisesti.

* = 1000

1000 A9 01 LDA #$ 011002 8D 00 41 STA $ 41001005 69 01 ADC #$ 011007 8D 00 41 STA $ 4100 100A 4C 05 10 JMP $ 1005 100D. END.

Tämä ohjelma asettaa ensin lähtöön 6522 -portin B DDR: n. Sitten se tallentaa 55 dollaria (B01010101) porttiin ja salpaan. A -rekisteri pyörii sitten yhden askeleen oikealle ja sisältää nyt $ AA (B10101010). Tämä tallennetaan jälleen porttiin B ja salpaan. Ohjelma hyppää takaisin 1005 dollariin ja jatkuu ikuisesti.

* = 1000

1000 A9 FF LDA #$ FF 1002 8D 02 60 STA 6002 1005 A9 55 LDA #$ 551007 38 SEC 1008 8D 00 60 STA $ 6000 100B 8D 00 41 STA $ 4100 100E 6A ROR A 100F 8D 00 60 STA $ 6000 1012 8D 00 41 STA $ 4100 1015 4C 05 10 JMP 1005 1018. END

Keskellä olevat terävät silmät saattavat huomata, että värilliset LEDit osoittavat erilaisen kuvion kuin vihreät. Tämä johtuu siitä, että yhteinen johto on kytketty 5 V: n värillisiin johtimiin ja yhteinen vihreisiin on kytketty maahan.

Muuta tämä koodirivi ohjelmalle 2 tai ohjelmalle 3.

setDataPins (ohjelma3 [offset]);

6502 Assembler ja Disassembler ovat hyödyllisiä työkaluja ohjelmien koodaamiseen.

Vaihe 2: EEPROMin lisääminen

EEPROM -laitteen lisääminen
EEPROM -laitteen lisääminen
EEPROM -laitteen lisääminen
EEPROM -laitteen lisääminen
EEPROM -laitteen lisääminen
EEPROM -laitteen lisääminen

EEPROM -levylle käytin 950 x 650 mm: n nauhalevyä ja 19 mm: n urospuolisia tappeja, jotta levy voi tyhjentää alla olevan. Tämä levy liitetään alla olevaan 6502 -korttiin. EEPROM on ATMEL 28C256, jossa on 28 nastaa ja joka sisältää 32 x 8 bittiä muistia. Tämä on enemmän kuin riittävä tällä hetkellä käytössä oleville pienille ohjelmille.

En ole tehnyt piirikaaviota tälle levylle, mutta se on melko suoraviivainen, miten se liitetään alla olevaan 6502 -korttiin. Nämä EEPROM -sirut eivät ole linja -autoystävällisiä, joten ne on kytkettävä yksittäisiin nastoihin, joten kaikki "vihreät ja valkoiset spagetit". Olen ratkaissut silloitusongelman aikaisemmalla kortilla kytkemällä datalinjat yhteen levyn alapuolelle.

EEPROMin 14 osoitetappia yhdistetään vasemmanpuoleisiin nastoihin (vihreät johdot) ja I/O -nastat oikeanpuoleisiin datatappeihin (valkoiset johdot). Nasta 27 (WE) on kytketty nastaan 28 (5v), nasta 22 (OE) on kytketty maahan ja nasta 20 (CE) on kytketty NAND -porttiin. 2 NAND -portin tuloa on kytketty liittimen A15 emolevy. Tämä tarkoittaa, että kun tämä nasta nousee korkealle, NAND -portti antaa matalan signaalin EEPROMin CE -tapille, mikä tekee siitä aktiivisen. Tämä asetus tarkoittaa, että EEPROM voidaan lukea vain 6502: lla.

Koska EEPROM asuu muistikortin 32 000 parhaan joukossa, se tarkoittaa, että $ FFFC ja $ FFFD voivat pitää 6502: n aloitusosoitteen sen nollaamisen jälkeen. Kun 6522: n osoitteet ovat välillä 6000–600 dollaria ja salpa on 4100 dollaria, se estää kaikki muistiristiriidat.

NMI -vektori ($ FFFA ja $ FFFB) ja BRK / IRQ -vektori ($ FFFE anf $ FFFF) voidaan myös kirjoittaa samalla tavalla.

Vaihe 3: EEPROM -ohjelmointi

EEPROM -ohjelman ohjelmointi
EEPROM -ohjelman ohjelmointi
EEPROM -ohjelman ohjelmointi
EEPROM -ohjelman ohjelmointi

Ohjelman tallentamiseksi EEPROMiin se tarvitsee ohjelmoijan. Tein yhden nauhalevystä, Arduino Pro Ministä, parista 74HC595: stä ja ZIF -pistorasiasta. Alunperin ohjelmoija tehtiin AT28C16: lle, jolla on vähemmän osoiterivejä kuin AT28C256, joten sitä oli muutettava.

Kytkentäkaavio osoittaa, kuinka molemmat EEPROM -laitteet kytketään. Valokuvasta ei käy selväksi, että kaksi 595 pelimerkkiä ovat ylösalaisin eivätkä kuten kaaviossa. Nastat 1-7/595/1 ovat EEPROMin A1 -A7 linjassa riippumatta siitä, mitä käytetään. Tämä säästää 7 liitäntäjohtoa. Levy näyttää nyt hieman tiukalta, ja tämä johtuu siitä, että alun perin käytin 24 -nastaista DIL -liitäntää, joka on nyt korvattu paljon suuremmalla 28 -nastaisella ZIF -pistorasialla.

Mukana on ohjelma, joka toimii levyni kanssa. Ohjelma toimii minkä tahansa Arduinon ja 595: n kanssa piirissä kuvan mukaisesti. Valitsin 5v Pro Minin, koska se on kompakti ja tarpeeksi halpa jätettäväksi kokoonpanoon.

Vaihe 4: EEPROM -ohjelmat

EEPROM -ohjelmat
EEPROM -ohjelmat

EEPROM -ohjelmoijalla on kolme yksinkertaista ohjelmaa. Jos haluat käyttää niitä, poista vain haluamasi rivin kommentti.

// Lue portista A 6522

// vakitavutiedot = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

Ohjelma näyttää muistin tyhjennyksen, kun se on valmis. Ohjelman alla oleva osa antaa sinulle täyden hallinnan siitä, mitä haluat kirjoittaa tai poistaa, asettaa $ FFFC & $ FFFD ja näyttää sitten tietyn alueen sisällön. Kommentoi tai muuta parametreja tarpeen mukaan. Osoitteet voidaan syöttää myös desimaalimuodossa.

// eraseEEPROM (422, 930, 0x41); // Käytä EEPROMin poistamista kokonaan tai osittain - alku, loppu, tavu

Serial.println ("Ohjelmointi EEPROM"); määrä = ohjelman_numerotiedot (0x1000); writeEEPROM (0x7ffc, 0x00); // Aseta $ FFFC 6502 -kirjoitukselleEEPROM (0x7ffd, 0x90); // Aseta $ FFFD 6502: lle // writeEEPROM (0x1000, 0xA9); // Kirjoita 1 tavu dataa Serial.println ("done"); String outline = "Kirjoitettu" + (merkkijono) määrä + "tavua"; Sarja.println (ääriviivat); Serial.println ("EEPROMin lukeminen"); printContents (0x0000, 0x112f); // Aseta alue näytettäväksi printContents (0x7ff0, 0x7fff); // Lukee EEPROMin viimeiset 16 tavua

Ohjelman lyhennetty lähtö on yllä.

Vaihe 5: 6502: n suorittaminen EEPROMista

6502: n käyttö EEPROM -järjestelmästä
6502: n käyttö EEPROM -järjestelmästä
6502: n käyttö EEPROM -järjestelmästä
6502: n käyttö EEPROM -järjestelmästä
6502: n käyttö EEPROM -järjestelmästä
6502: n käyttö EEPROM -järjestelmästä

Ohjelmoitu EEPROM voidaan nyt asettaa sen kortille ja tämä säästöpossu tukee 6502 -päälevyä, joka säästöpossu tukee MEGA: ta. Yllä olevat sivukuvat ja ylhäältä kuvat osoittavat, miten kaikki sopii yhteen.

6502 voi nyt lukea aloitusvektorin $ FFFC: stä ja $ FFFD: stä (joka on 9000 dollaria) ja siirtyä sitten siihen tallennettuun ohjelmaan. MEGA tarjoaa edelleen kellosignaalin, ja sen ohjelmaa on muutettava niin, että se antaa vain kellosignaalin ja valvoo 6502. Tätä varten tarjotaan muokattu ohjelma.

Juoksukuva näyttää tämän ohjelman käynnissä.

9000 LDA #00 A9 00

9002 STA $ 6003 8D 03 60 9005 LDA #$ FF A9 FF 9007 STA $ 6002 8D 02 60 900A LDA $ 6001 AD 01 60 900D STA $ 6000 8D 00 60 9010 EOR #$ FF 49 FF 9012 STA $ 4100 8D 00 41 9015 JMP $ 900A 4C 0A 90

Kytkimet on kytketty porttiin A ja ohjelma näyttää lukemansa arvon portissa B ja 74HC373: ssa (joka on tällä hetkellä peitetty). kytkimet on kytketty maahan ja LEDit on kytketty 5 volttiin. EOR #$ FF korjaa salvan ja portin B ongelman näyttämällä erilaisia kuvioita kääntämällä bittiä ennen salpaan kirjoittamista.

Vaihe 6: Ulkoinen aikasignaali

Ulkoinen aikasignaali
Ulkoinen aikasignaali

Jos kellosignaali kohdistetaan levyn yläosassa olevaan nastaan, 6502 voi nyt toimia MEGA: sta riippumatta. Tietysti se tarvitsee myös virtalähteen. Olen kokeillut eri kelloja ja jopa suorittanut 6502 1 MHz: n kideoskillaattorilla. MEGA ei voi pysyä nopeammalla nopeudella, joten se on poistettava.

Kokeilin myös 555 -ajastimen lähtöä, mutta se ei toimi. Luulen, että se voi johtua siitä, että se ei ole neliöaalto? Kun se oli liitetty johonkin CD4017 -ulostulosta, se ajaa 6502. Asensin johonkin yllä olevista sarjoista yrittääkseni saada kellosignaalin.

Etsin edelleen erilaisia tapoja saada kellosignaali.

Vaihe 7: Johtopäätös

Olen näyttänyt kuinka rakentaa monimutkaisia piirejä ja saada hyvin yksinkertainen "tietokone" toimimaan minimaalisen määrän osien kanssa. Tietokone ei tietenkään voi tehdä paljon tällä hetkellä tai todennäköisesti tekee sen tulevaisuudessa.

Vielä 80 -luvun alussa VIC20: n kanssa ihmettelin mahtavaa konetta, eikä minulla ollut ensimmäistä ajatusta siitä, miten aloittaa kokoaminen. Ajat ovat edenneet ja tekniikkakin, mutta on silti mukavaa palata perusasioihin ja olla ylpeä jostakin rakentamastaan alusta.

Tämän tietokoneen edelleen kehittämiseksi aion laittaa 2k SRAM: ia 0000 dollarista 2047 dollariin ja lisätä 1 MHz: n oskillaattorin. Luultavasti lisää jotain CD4040: n kaltaista (12-vaiheinen binaarinen aaltolaskuri / jakaja), jotta voin käyttää eri kellonopeuksia.

Voisi jopa lisätä nestekidenäytön, joka antaa tekstin, ei vain vilkkuvia valoja. EEPROM -ohjelmoijaa on myös muutettava vastaamaan suurempia ohjelmia, joita tarvitaan LCD -näytön käyttämiseen.

Vaikka MEGA on tulossa tarpeettomaksi 6502: n käytössä, siitä on silti hyötyä konekoodin virheenkorjauksessa. Kuten kaikki tietävät, konekoodi sisältää aina virheitä!

Suositeltava: