Turinys:

6502 Minimalus kompiuteris (su „Arduino MEGA“) 3 dalis: 7 žingsniai
6502 Minimalus kompiuteris (su „Arduino MEGA“) 3 dalis: 7 žingsniai

Video: 6502 Minimalus kompiuteris (su „Arduino MEGA“) 3 dalis: 7 žingsniai

Video: 6502 Minimalus kompiuteris (su „Arduino MEGA“) 3 dalis: 7 žingsniai
Video: История CPU: MOS 6502 2024, Liepa
Anonim
6502 Minimalus kompiuteris (su „Arduino MEGA“) 3 dalis
6502 Minimalus kompiuteris (su „Arduino MEGA“) 3 dalis

Eidamas toliau, dabar prie pagrindinės plokštės pridėjau aštuonių fiksatorių, 8 stačiakampius šviesos diodus ir 220 omų rezistorių matricą. Taip pat yra jungiklis tarp masyvo bendro kaiščio ir žemės, kad būtų galima išjungti šviesos diodus. 74HC00 NAND vartai buvo pakeisti 78LS08 IR vartais, taip pat buvo pakeista vartų instaliacija. AND vartai reiškia, kad 6522 dabar yra 6000 USD, o ne E000 USD.

Taip pat yra kaištis, skirtas prijungti išorinį laikrodį, kad būtų galima valdyti 6502. Naudojant šį ryšį, MEGA nereikia pateikti laikrodžio signalo. MEGA kaip ir anksčiau stebi, kas vyksta su procesoriumi.

Užraktui naudojau 20 kontaktų 74HC373, nes jų turėjau. Tai buvo gerai, kai buvo duonos plokštė, tačiau 74HC573 yra suderinamas su magistralėmis ir būtų sutaupęs daugybę laidų. UCN5801A, kuris yra 22 kontaktų IC, taip pat gali būti įtrauktas į grandinę, tačiau laidai šiek tiek skirsis.

Viršutinis, vienas oranžinis šviesos diodas yra maitinimo indikatorius, o apatinis kairysis raudonas rodo, kada rašoma. Pastarasis bus nereikšmingas, jei lenta bus važiuojama didesniu greičiu.

Modifikuota grandinė yra aukščiau (su 74HC573).

1 žingsnis: demonstracinės programos

Demonstracinės programos
Demonstracinės programos

6502 monitoriuje yra dvi paprastos demonstracinės programos, o jų išardytas kodas yra čia.

Ši programa įkelia 1 į 6502 A registrą ir išsaugo jį skląstyje. Tada jis prideda 1 prie A registro ir išsaugo jį skląstyje. Tada jis šokteli iki 1005 USD ir procesas kartojasi amžinai.

* = 1000

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

Ši programa pirmiausia nustato išvesties 6522 prievado DDR DDR. Tada uoste saugo 55 USD (B01010101) ir skląstį. A registras pasuka 1 žingsnį į dešinę ir dabar turi $ AA (B10101010). Tai vėl saugoma B prievade ir skląstyje. Programa šoktelėjo iki 1005 USD ir tęsiasi amžinai.

* = 1000

1000 A9 FF LDA #$ FF 1002 8D 02 60 STA $ 6002 1005 A9 55 LDA #$ 55 1007 38 SEK 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

Aštrios akys tarp jūsų gali pastebėti, kad spalvoti šviesos diodai rodo kitokį modelį nei žalieji. Taip yra todėl, kad bendras laidas yra prijungtas prie 5 V ant spalvotų, o bendras - ant žalių - prie žemės.

Pakeiskite šią kodo eilutę į program2 arba program3.

setDataPins (programa3 [poslinkis]);

„6502 Assembler“ir „Disassembler“yra naudingi įrankiai, padedantys užkoduoti jūsų programas.

2 veiksmas: pridėkite EEPROM

Pridedamas EEPROM
Pridedamas EEPROM
Pridedamas EEPROM
Pridedamas EEPROM
Pridedamas EEPROM
Pridedamas EEPROM

EEPROM plokštėje naudojau 950 x 650 mm juostinę plokštę ir 19 mm išorinius kaiščius, kad plokštė galėtų išvalyti apačią. Ši plokštė prijungiama prie žemiau esančios 6502 plokštės. „EEPROM“yra „ATMEL 28C256“, turintis 28 kontaktus ir 32 x 8 bitų atminties. Tai daugiau nei pakanka mažoms programoms, kurios šiuo metu naudojamos.

Aš nepadariau šios plokštės grandinės schemos, tačiau ji yra gana paprasta, kaip ji jungiasi prie žemiau esančios 6502 plokštės. Šie EEPROM lustai netinka autobusams, todėl turi būti prijungti prie atskirų kaiščių, taigi visi „žalieji ir balti spagečiai“. Aš išsprendžiau ankstesnės plokštės sujungimo problemą sujungdamas duomenų linijas plokštės apačioje.

14 EEPROM adreso kaiščių jungiasi prie atitinkamų kaiščių kairėje pusėje (žali laidai), o įvesties/išvesties kaiščiai - prie duomenų kaiščių dešinėje (balti laidai). 27 kaištis (WE) yra prijungtas prie kaiščio 28 (5v), kaištis 22 (OE) yra prijungtas prie žemės, o kaištis 20 (CE) yra prijungtas prie NAND vartų. 2 NAND vartų įėjimai yra prijungti prie A15 Pagrindinė lenta. Tai reiškia, kad kai šis kaištis pakyla aukštai, NAND vartai duoda žemą signalą EEPROM CE kaiščiui, todėl jis tampa aktyvus. Su šia sąranka reiškia, kad EEPROM gali nuskaityti tik 6502.

Kadangi EEPROM yra 32 000 atminties žemėlapyje, tai reiškia, kad $ FFFC ir $ FFFD gali turėti 6502 pradžios adresą po to, kai jis buvo iš naujo nustatytas. Kadangi 6522 adresai yra nuo 6000 iki 600 USD, o fiksatorius yra 4100 USD, jis sustabdo bet kokius atminties konfliktus.

Taip pat būtų galima parašyti NMI vektorių ($ FFFA ir $ FFFB) ir BRK / IRQ vektorių ($ FFFE anf $ FFFF).

3 žingsnis: EEPROM programavimas

EEPROM programavimas
EEPROM programavimas
EEPROM programavimas
EEPROM programavimas

Kad programa būtų saugoma EEPROM, jai reikia programuotojo. Aš padariau vieną iš juostinės plokštės, „Arduino Pro Mini“, poros 74HC595 ir ZIF lizdo. Iš pradžių programuotojas buvo sukurtas AT28C16, kuris turi mažiau adresų eilučių nei AT28C256, todėl jį reikėjo modifikuoti.

Grandinės schema parodo, kaip prijungti abu šiuos EEPROM. Iš nuotraukos nėra aišku, kad du 595 lustai yra apversti, o ne taip, kaip parodyta diagramoje. 1–7 kaiščiai iš 595/1 sutampa su EEPROM A1 – A7, neatsižvelgiant į tai, kuris yra naudojamas. Taip sutaupoma 7 jungiamųjų laidų. Dabar plokštė atrodo šiek tiek įtempta, nes iš pradžių naudojau 24 kontaktų DIL lizdą, kurį dabar pakeitė daug didesnis 28 kontaktų ZIF lizdas.

Įtraukta programa, kuri veikia su mano lenta. Programa veiks su bet kokiais „Arduino“ir „595“grandinėmis, kaip parodyta. Aš pasirinkau „5v Pro Mini“, nes jis yra kompaktiškas ir pakankamai pigus, kad jį būtų galima palikti komplekte.

4 žingsnis: EEPROM programos

EEPROM programos
EEPROM programos

EEPROM programuotojas turi tris paprastas programas. Norėdami juos naudoti, tiesiog panaikinkite norimos naudoti eilutės komentarą.

// Skaityti iš 6522 prievado A

// const baitų duomenys = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

Programa parodys atminties iškrovą, kai ji bus baigta. Žemiau esančioje programos dalyje galite visiškai kontroliuoti, ką norite rašyti ar ištrinti, nustatomi $ FFFC ir $ FFFD, tada rodomas tam tikro diapazono turinys. Tiesiog nekomentuokite arba pakeiskite parametrus, kaip jums reikia. Adresus taip pat galima įvesti dešimtainiu formatu.

// eraseEEPROM (422, 930, 0x41); // Naudokite ištrinti visą ar dalį EEPROM - pradžia, pabaiga, baitas

Serial.println („EEPROM programavimas“); suma = programos_skaitiniai_datai (0x1000); writeEEPROM (0x7ffc, 0x00); // Nustatykite $ FFFC 6502 writeEEPROM (0x7ffd, 0x90); // Nustatykite $ FFFD 6502 // writeEEPROM (0x1000, 0xA9); // Įrašykite 1 baitą duomenų Serial.println ("done"); Stygų kontūras = "Rašytinė" + (eilutės) suma + "baitai"; Serial.println (kontūras); Serial.println („Skaitymas EEPROM“); printContents (0x0000, 0x112f); // Nustatyti diapazoną, kad būtų rodomas printContents (0x7ff0, 0x7fff); // Skaito paskutinius 16 baitų EEPROM

Aukščiau pateikiama sutrumpinta programos išvestis.

5 veiksmas: paleiskite 6502 iš EEPROM

Paleidžia 6502 iš EEPROM
Paleidžia 6502 iš EEPROM
Paleidžia 6502 iš EEPROM
Paleidžia 6502 iš EEPROM
Paleidžia 6502 iš EEPROM
Paleidžia 6502 iš EEPROM

Užprogramuotą EEPROM dabar galima įterpti į jo plokštę, o šis paršelis prigludęs prie pagrindinės 6502 plokštės, kuri paruoštas prie MEGA. Aukščiau esančios nuotraukos iš šono ir viršaus rodo, kaip visa tai dera.

6502 dabar gali nuskaityti pradžios vektorių iš $ FFFC ir $ FFFD (tai yra 9000 USD) ir tada pereiti prie ten saugomos programos. MEGA vis dar teikia laikrodžio signalą, o jo programą reikia pakeisti, kad būtų rodomas tik laikrodžio signalas ir būtų stebimas 6502. Tam yra pateikta modifikuota programa.

Bėgimo nuotrauka rodo, kad ši programa veikia.

9000 LDA #00 USD 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

Jungikliai yra prijungti prie A prievado, o programa rodo vertę, kurią ji skaito B prievade ir 74HC373 (kuris šiuo metu yra užtemdytas). jungikliai prijungti prie įžeminimo, o šviesos diodai - prie 5 v. EOR #$ FF ištaiso skląsčio ir B prievado, rodančio skirtingus modelius, problemą, apverčiant bitus prieš rašant į skląstį.

6 žingsnis: išorinis laiko signalas

Išorinis laiko signalas
Išorinis laiko signalas

Jei plokštės viršuje esančiam kaiščiui taikomas laikrodžio signalas, 6502 dabar gali veikti nepriklausomai nuo MEGA. Žinoma, tam reikia ir maitinimo šaltinio. Aš eksperimentavau su skirtingais laikrodžiais ir net paleidau 6502 1MHz dažniu su kristalų osciliatoriumi. MEGA negali išlaikyti didesnio greičio, todėl jį reikia pašalinti.

Aš taip pat išbandžiau 555 laikmačio išvestį, bet tai neveikia. Manau, tai gali būti todėl, kad tai nėra kvadratinė banga? Kai prijungtas prie vieno iš CD4017 išėjimų, jis važiavo 6502. Aš pataisiau į vieną iš aukščiau pateiktų rinkinių, kad pabandyčiau gauti laikrodžio signalą.

Aš vis dar žiūriu į įvairius laikrodžio signalo gavimo būdus.

7 žingsnis: Išvada

Aš parodžiau, kaip sukurti sudėtingas grandines ir priversti labai paprastą „kompiuterį“dirbti su minimaliu dalių kiekiu. Tiesa, kompiuteris šiuo metu negali padaryti daug arba gali tai padaryti ateityje.

Dar 80 -ųjų pradžioje, naudodamas savo VIC20, aš stebėjausi nuostabia mašina ir neturėjau pirmosios idėjos, kaip pradėti ją sudėti. Laikai ir technologijos pasikeitė, tačiau vis tiek malonu grįžti prie pagrindų ir didžiuotis tuo, ką sukūrėte nuo nulio.

Norėdami toliau plėtoti šį kompiuterį, ketinu įdėti 2k SRAM nuo 0000 iki 2047 USD ir pridėti 1 MHz osciliatorių. Tikriausiai pridėsiu kažką panašaus į CD4040 (12 pakopų dvejetainis Ripple skaitiklis / daliklis), kad galėčiau naudoti skirtingus laikrodžio greičius.

Netgi galite pridėti LCD ekraną, kad būtų rodomas tekstas, o ne tik mirksi lemputės. EEPROM programuotoją taip pat reikės modifikuoti, kad jis atitiktų didesnes programas, reikalingas LCD ekranui paleisti.

Nors MEGA tampa nereikalingas 6502 veikimui, jis vis tiek yra naudingas derinant mašinos kodą. Kaip visi žino, mašinos kode visada yra klaidų!

Rekomenduojamas: