Мазмуну:

6502 Минималдуу Компьютер (Arduino MEGA менен) 3 -бөлүк: 7 кадам
6502 Минималдуу Компьютер (Arduino MEGA менен) 3 -бөлүк: 7 кадам

Video: 6502 Минималдуу Компьютер (Arduino MEGA менен) 3 -бөлүк: 7 кадам

Video: 6502 Минималдуу Компьютер (Arduino MEGA менен) 3 -бөлүк: 7 кадам
Video: История CPU: MOS 6502 2024, Июль
Anonim
6502 Минималдуу Компьютер (Arduino MEGA менен) 3 -бөлүк
6502 Минималдуу Компьютер (Arduino MEGA менен) 3 -бөлүк

Мындан ары дагы жылып, мен башкы тактага сегиз бурчтуу, 8 тик бурчтуу LED жана 220 Ом резистор массивин коштум. LEDдын өчүрүлүшү үчүн массивдин жалпы пини менен жеринин ортосунда секирүүчү бар. 74HC00 NAND дарбазасы 78LS08 AND дарбазасы менен алмаштырылды, дарбазанын зымдары да өзгөртүлдү. AND дарбазасы 6522 азыр $ E000 ордуна $ 6000де жайгашканын билдирет.

6502ди айдап чыгуу үчүн тышкы саатты туташтыруу үчүн пин да бар. Бул байланыш менен MEGAга саат сигналын берүүнүн кажети жок. MEGA мурдагыдай эле процессордо эмне болуп жатканын көзөмөлдөп турат.

Мен бекиткичке 20 пин 74HC373 колдондум, анткени менде кээ бирлери бар болчу. Бул тактада болгондо жакшы болчу, бирок 74HC573 автобуска шайкеш келет жана зымдардын жүктөлүшүн сактап калмак. UCN5801A 22 пиндүү IC да схемада каралышы мүмкүн, бирок зымдары бир аз башкачараак болот.

Жогорку, жалгыз кызгылт сары жарыктын көрсөткүчү, ал эми астынкы кызыл түстө жазуу жүрүп жатканын көрсөтөт. Эгерде такта жогорку ылдамдыкта иштетилсе, экинчиси анча мааниге ээ болбойт.

Өзгөртүлгөн схема жогору (74HC573 менен).

1 -кадам: Демонстрациялык программалар

Демонстрациялык программалар
Демонстрациялык программалар

6502 мониторуна эки жөнөкөй демонстрациялык программа киргизилген жана алардын ажыратылган коду бул жерде.

Бул программа 1ди 6502 A реестрине жүктөп, бекиткичте сактайт. Андан кийин ал А реестрине 1ди кошот жана аны илгичте сактайт. Анан кайра $ 1005 секирип, процесс түбөлүккө кайталанат.

* = 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

Бул программа адегенде 6522 порту B DDRсын чыгарууга коёт. Андан кийин ал портто 55 доллар (B01010101), ошондой эле бекиткичти сактайт. A реестри анда 1 кадам оңго бурулат жана азыр $ AA (B10101010) кармап турат. Бул дагы В портунда жана бекиткичте сакталат. Программа 1005 долларга кайра секирип, түбөлүккө уланат.

* = 1000

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

Араңардагы курч көздөр түстүү светодиоддор жашыл түстөргө караганда башкача үлгү көрсөтүп жатканын байкашы мүмкүн. Бул жалпы коргошун түстүү болгондорго 5v менен, ал эми жашылдарга жалпы жерге туташтырылганына байланыштуу.

Коддун бул сабын program2 же program3кө өзгөртүңүз.

setDataPins (program3 [offset]);

6502 Ассемблер жана Дисассемблер программаларыңызды коддоого жардам берүүчү пайдалуу куралдар.

2 -кадам: EEPROM кошуу

EEPROM кошуу
EEPROM кошуу
EEPROM кошуу
EEPROM кошуу
EEPROM кошуу
EEPROM кошуу

EEPROM тактасы үчүн, мен 950 x 650 мм тилке тактасын жана 19мм эркек баштык төөнөгүчтөрдү колдонуп, тактанын астын тазалап коём. Бул такта төмөндөгү 6502 тактасына туташтырылат. EEPROM - бул 28 казыгы бар жана 32k x 8 бит эс тутуму бар ATMEL 28C256. Бул азыркы учурда колдонулуп жаткан чакан программалар үчүн жетиштүү.

Мен бул такта үчүн схеманы жасаган жокмун, бирок ал төмөндөгү 6502 тактасына кандайча туташып тургандыгы абдан ачык. Бул EEPROM чиптери автобус үчүн ыңгайлуу эмес, ошондуктан аларды жеке казыктарга туташтыруу керек, демек, бардык "жашыл жана ак спагетти". Мен мурунку тактадагы көпүрө маселесин тактанын астына маалымат линияларын бириктирип чечтим.

EEPROMдун 14 дареги төөнөгүчтөрү сол тараптагы тиешелүү казыктарга (жашыл зымдарга) жана I/O казыктарына оң жагындагы маалымат төөнөгүчтөрүнө (ак зымдар) туташат. Pin 27 (WE) pin 28 (5v), pin 22 (OE) жерге жана pin 20 (CE) NAND дарбазасына туташкан. NAND дарбазасынын 2 кириши A15 менен туташкан башкы такта. Бул бул пин жогору болгондо, NAND дарбазасы EEPROMдун CE пинине төмөн сигнал берет, бул аны активдүү кылат. Бул орнотуу менен бул EEPROMды 6502 тарабынан гана окууга болот дегенди билдирет.

EEPROM эс тутум картасында эң жогорку 32k ичинде жашагандыктан, бул $ FFFC жана $ FFFD 6502 үчүн баштапкы даректи баштапкы абалга келтирилгенден кийин кармай алат дегенди билдирет. 6522 менен даректери 6000 доллардан 600Ф долларга чейин, ал эми mandat 4100 доллардан тургандыктан, ал эс тутумдагы чыр -чатактарды токтотот.

NMI вектору ($ FFFA жана $ FFFB) жана BRK / IRQ вектору ($ FFFE anf $ FFFF) дагы ушундай жол менен жазылышы мүмкүн.

3 -кадам: EEPROMду программалоо

EEPROMду программалоо
EEPROMду программалоо
EEPROMду программалоо
EEPROMду программалоо

Программаны EEPROMдо сактоо үчүн ага программист керек. Мен аны лентадан, Arduino Pro Miniден, 74HC595 жуптарынан жана ZIF розеткасынан жасадым. Башында, программист AT28C256га караганда азыраак дарек линиялары бар AT28C16 үчүн жасалган, ошондуктан өзгөртүүгө туура келген.

Райондук диаграмма бул EEPROM экөөнү тең зым менен жабууну көрсөтөт. Сүрөттөн көрүнүп тургандай, эки 595 чиптер тескери жана диаграммада көрсөтүлгөндөй эмес. 595/1дин 1ден 7ге чейинки пиндери EEPROMдун A1ден A7ге чейин, кайсынысына карабастан. Бул 7 туташтыруучу зымды үнөмдөйт. Такта азыр бир аз тыгыз көрүнөт, анткени мен башында 24 пин DIL розеткасын колдонгом, анткени азыр анын ордуна 28 пин көбүрөөк ZIF розети бар.

Менин тактам менен иштеген программа камтылган. Программа ар кандай Arduino жана 595s менен көрсөтүлгөндөй схемада иштейт. Мен 5v Pro Mini тандадым, анткени ал компакт жана арзан болгондуктан, орнотууга кетет.

4 -кадам: EEPROM программалары

EEPROM программалары
EEPROM программалары

EEPROM программистинде үч жөнөкөй программа бар. Аларды колдонуу үчүн, жөн гана колдонгуңуз келген сызыкты комментарийден чыгарыңыз.

// 6522 А портунан окуу

// const байт маалыматтары = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

Программа эс тутумунун төгүлүшүн көрсөтөт. Программанын төмөндөгү бөлүгү сизге жазууну же өчүрүүнү каалаган нерсени толугу менен көзөмөлдөп, $ FFFC & $ FFFD орнотот, андан кийин берилген диапазондун мазмунун көрсөтөт. Жөн эле комментарий бербеңиз же талап кылынгандай параметрлерди өзгөртүңүз. Даректер ондук форматта да киргизилиши мүмкүн.

// eraseEEPROM (422, 930, 0x41); // EEPROMдун бүтүн же бир бөлүгүн өчүрүү үчүн колдонуңуз - баштоо, аяктоо, байт

Serial.println ("EEPROM программалоо"); сумма = program_numeric_data (0x1000); writeEEPROM (0x7ffc, 0x00); // 6502 writeEEPROM үчүн $ FFFC орнотуңуз (0x7ffd, 0x90); // 6502 үчүн $ FFFD коюу // writeEEPROM (0x1000, 0xA9); // 1 байт маалымат жазуу Serial.println ("аткарылды"); Стринг схемасы = "Жазылган" + (Стринг) суммасы + "байт"; Serial.println (контур); Serial.println ("EEPROM окуу"); printContents (0x0000, 0x112f); // PrintContentsти көрсөтүү үчүн диапазонду коюу (0x7ff0, 0x7fff); // EEPROM боюнча акыркы 16 байтты окуйт

Программадан кыскартылган чыгаруу жогоруда.

5 -кадам: EEPROMдон 6502ди иштетүү

EEPROMдон 6502 иштетүү
EEPROMдон 6502 иштетүү
EEPROMдон 6502 иштетүү
EEPROMдон 6502 иштетүү
EEPROMдон 6502 иштетүү
EEPROMдон 6502 иштетүү

Программаланган EEPROMду эми анын тактайына киргизсе болот жана бул чочко негизги 6502 тактасына, пигги MEGAга кайрылат. Жогорудагы каптал жана үстүңкү сүрөттөр анын кантип бири -бирине дал келерин көрсөтөт.

6502 азыр $ FFFC жана $ FFFD ($ 9000) баштапкы векторун окуп, анан ошол жерде сакталган программага секире алат. MEGA дагы эле саат сигналын берип жатат жана анын программасын саат сигналын берүү жана 6502ди көзөмөлдөө үчүн өзгөртүү керек. Бул үчүн өзгөртүлгөн программа каралган.

Иштеп жаткан сүрөт бул программанын иштеп жатканын көрсөтүп турат.

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

Коммутаторлор А портуна туташтырылган жана программа В портунда жана 74HC373 (азыр көмүскөдө) окуп жаткан маанини көрсөтөт. өчүргүчтөр жерге туташып, светодиоддор 5v менен туташтырылган. EOR #$ FF бекиткичке жана В портуна ар кандай үлгүлөрдү көрсөтүү көйгөйүн чечет.

6 -кадам: Тышкы убакыт сигналы

Тышкы убакыт сигналы
Тышкы убакыт сигналы

Эгерде тактанын жогору жагындагы төөнөгүчкө сааттык сигнал колдонулса, 6502 эми MEGAдан көз карандысыз иштей алат. Албетте, бул дагы электр менен камсыздоого муктаж. Мен ар кандай сааттарды сынап көрдүм, ал тургай 6502ди 1МГцте кристалл осциллятору менен иштеттим. MEGA ылдамыраак ылдамдыкты сактай албайт, ошондуктан аны алып салуу керек.

Мен дагы 555 таймерден чыгууну сынап көрдүм, бирок бул иштебейт. Менимче, бул квадрат толкун болбогондуктан болушу мүмкүнбү? CD4017 чыгууларынын бирине туташканда, ал 6502ди айдайт. Мен саат сигналын алуу үчүн жогорудагы комплекттердин бирине киргиздим.

Мен дагы эле саат сигналын алуу үчүн ар кандай ыкмаларды карап жатам.

7 -кадам: Жыйынтык

Мен кээ бир татаал схемаларды кантип курууну жана бөлүктөрдүн минималдуу өлчөмү менен иштөө үчүн абдан жөнөкөй "компьютерди" алууну көрсөттүм. Ырас, компьютер учурда көп нерсени жасай албайт же келечекте жасашы мүмкүн.

80 -жылдардын башында, менин VIC20 менен, мен укмуш машинага таң калчумун жана аны кантип баштоо керектиги жөнүндө биринчи түшүнүккө ээ эмесмин. Убакыт алдыга жылып, технология дагы өзгөрдү, бирок негиздерге кайрылып, башынан баштап курган нерсеңиз менен сыймыктануу дагы деле жагымдуу.

Бул компьютерди андан ары өнүктүрүү үчүн мен 2K SRAMди 0000 доллардан 2047 долларга коюп, 1 МГц осцилляторду кошууну көздөп жатам. Мен, балким, CD4040 (12 этаптуу экилик Ripple Counter / Divider) сыяктуу бир нерсени кошуп коём, ошондо мен ар кандай саат ылдамдыктарына кире алам.

Жөн эле жарк эткен жарыктарды эмес, текстти чыгаруу үчүн ЖК дисплейди кошушу мүмкүн. EEPROM программисти ошондой эле ЖК дисплейди иштетүү үчүн керектүү чоң программалар менен иштөө үчүн өзгөртүлүшү керек.

MEGA 6502дин иштеши үчүн керексиз болуп баратса да, ал дагы эле машинанын кодун оңдоого жардам берет. Ким билет, машина коду дайыма каталарды камтыйт!

Сунушталууда: