Мазмұны:

6502 Минималды компьютер (Arduino MEGA көмегімен) 3 -бөлім: 7 қадам
6502 Минималды компьютер (Arduino MEGA көмегімен) 3 -бөлім: 7 қадам

Бейне: 6502 Минималды компьютер (Arduino MEGA көмегімен) 3 -бөлім: 7 қадам

Бейне: 6502 Минималды компьютер (Arduino MEGA көмегімен) 3 -бөлім: 7 қадам
Бейне: История CPU: MOS 6502 2024, Қараша
Anonim
6502 Минималды компьютер (Arduino MEGA көмегімен) 3 -бөлім
6502 Минималды компьютер (Arduino MEGA көмегімен) 3 -бөлім

Әрі қарай жалғастыра отырып, мен негізгі тақтаға сегіздік ілгекті, 8 тікбұрышты жарық диодты және 220 Ом резисторлық массивін қостым. Сонымен қатар, светодиодты өшіру үшін массивтің жалпы түйреуіші мен жерге қосқыш арасында секіргіш бар. 74HC00 NAND қақпасы 78LS08 AND қақпасына ауыстырылды, қақпаның сымдары да өзгертілді. AND қақпасы 6522 енді $ E000 орнына $ 6000 -да орналасқанын білдіреді.

Сондай -ақ, 6502 жетегіне арналған сыртқы сағатты қосуға арналған түйреуіш бар. Бұл байланыспен MEGA -ға сағат сигналын берудің қажеті жоқ. MEGA бұрынғыдай процессормен не болып жатқанын бақылайды.

Мен ілмек үшін 20 істікшелі 74HC373 қолдандым, себебі менде біраз болды. Бұл тақтада болған кезде жақсы болды, бірақ 74HC573 автобуспен үйлесімді және көптеген сымдарды үнемдейді. UCN5801A - бұл 22 істікшелі IC.

Жоғарғы, бір қызғылт сары жарық диоды - қуат индикаторы, ал төменгі сол жақ қызыл түс жазу кезінде орын алады. Егер тақта жоғары жылдамдықта жұмыс жасаса, соңғысы шамалы болады.

Өзгертілген схема жоғарыда (74HC573 бар).

1 -қадам: демонстрациялық бағдарламалар

Демонстрациялық бағдарламалар
Демонстрациялық бағдарламалар

6502 мониторына екі қарапайым демонстрациялық бағдарлама енгізілген және олардың бөлшектелген коды осында.

Бұл бағдарлама 6502 A регистріне 1 жүктейді және оны ысырмада сақтайды. Содан кейін ол 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 В портының 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

Араларыңыздағы өткір көздер түсті жарықдиодты шамдар жасылдан өзгеше үлгі көрсететінін байқауы мүмкін. Бұл жалпы сым түсті 5В -ке, ал жасылдағы жалпы жерге қосылған.

Бұл код жолын program2 немесе program3 етіп өзгертіңіз.

setDataPins (program3 [offset]);

6502 Assembler және Disassembler бағдарламаларды кодтауға көмектесетін пайдалы құралдар.

2 -қадам: EEPROM қосу

EEPROM қосу
EEPROM қосу
EEPROM қосу
EEPROM қосу
EEPROM қосу
EEPROM қосу

EEPROM тақтасы үшін мен тақтаның астындағы тақтаны тазартуға мүмкіндік беру үшін 950 x 650 мм жолақ тақтасы мен 19 мм ерлерге арналған түйреуіштерді қолдандым. Бұл тақта төмендегі 6502 тақтасына қосылады. EEPROM - бұл 28 істікшесі бар және 32кх 8 бит жады бар ATMEL 28C256. Бұл қазіргі уақытта қолданылатын шағын бағдарламалар үшін жеткілікті.

Мен бұл тақта үшін схеманы жасаған жоқпын, бірақ ол төмендегі 6502 тақтасына қалай қосылатыны өте қарапайым. Бұл EEPROM чиптері автобусқа жарамайды, сондықтан оларды жеке түйреуіштерге қосу керек, сондықтан барлық «жасыл және ақ спагетти». Мен алдыңғы тақтадағы көпір мәселесін тақтаның астына деректер желілерін жалғау арқылы шештім.

EEPROM -дің 14 адрестік түйреуі сол жақтағы тиісті түйреуіштерге (жасыл сымдар) және енгізу -шығару түйреуіштері оң жақтағы деректер түйреуіштеріне (ақ сымдар) қосылады. 27 (WE) түйреуіші 28 (5v) түйреуішіне, 22 (OE) түйіні жерге және 20 (CE) штыры NAND қақпасына қосылған. негізгі тақта. Бұл түйін жоғары көтерілгенде NAND қақпасы EEPROM CE істігіне төмен сигнал береді, бұл оны белсенді етеді. Бұл қондырғы EEPROM -ды тек 6502 арқылы оқи алатынын білдіреді.

EEPROM жады картасындағы ең жоғары 32k -те тұратындықтан, бұл $ FFFC мен $ FFFD 6502 үшін бастапқы адресті қалпына келтіргеннен кейін ұстай алатынын білдіреді. 6522 мекенжайлары 6000 доллардан 600 долларға дейін, ал ысырмасы 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 орнатады, содан кейін берілген ауқымның мазмұнын көрсетеді. Параметрлерді түсініктеме беріңіз немесе өзгертіңіз. Мекенжайларды ондық форматта да енгізуге болады.

// өшіруEEPROM (422, 930, 0x41); // EEPROM -дің толық немесе бір бөлігін өшіру үшін пайдаланыңыз - бастау, аяқтау, байт

Serial.println («EEPROM бағдарламалау»); сома = program_numeric_data (0x1000); writeEEPROM (0x7ffc, 0x00); // 6502 writeEEPROM (0x7ffd, 0x90) үшін $ FFFC орнатыңыз; // 6502 үшін $ FFFD орнатыңыз // writeEEPROM (0x1000, 0xA9); // 1 байт деректерді жазыңыз Serial.println («орындалды»); Жолдың контуры = «Жазылған» + (Жолдық) сома + «байт»; Serial.println (құрылым); Serial.println («EEPROM оқу»); printContents (0x0000, 0x112f); // printContents (0x7ff0, 0x7fff) көрсетуге арналған диапазонды орнату; // EEPROM -де соңғы 16 байтты оқиды

Бағдарламадан қысқартылған нәтиже жоғарыда.

5 -қадам: 6502 -ді EEPROM -дан іске қосу

6502 -ді EEPROM -дан іске қосу
6502 -ді EEPROM -дан іске қосу
6502 -ді EEPROM -дан іске қосу
6502 -ді EEPROM -дан іске қосу
6502 -ді EEPROM -дан іске қосу
6502 -ді EEPROM -дан іске қосу

Бағдарламаланған 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 (қазір жасырылған) мәнін көрсетеді. қосқыштар жерге қосылады, ал жарық диодтары 5 вольтке қосылады. EOR #$ FF ысырмаға жазар алдында биттерді аудару арқылы әр түрлі өрнектерді көрсететін ысырма мен В портының мәселесін шешеді.

6 -қадам: Сыртқы уақыт белгісі

Сыртқы уақыт белгісі
Сыртқы уақыт белгісі

Егер тақтаның жоғарғы жағындағы түйреуішке сағат белгісі берілсе, 6502 енді MEGA -дан тәуелсіз жұмыс істей алады. Әрине, оған қуат көзі де қажет. Мен әр түрлі сағаттармен тәжірибе жасадым, тіпті 6502 -ді 1МГц -де кристалды осциллятормен іске қостым. MEGA жоғары жылдамдықпен жүре алмайды, сондықтан оны жою қажет.

Мен сонымен қатар 555 таймерден шығуды көрдім, бірақ бұл жұмыс істемейді. Менің ойымша, бұл шаршы толқын емес пе? CD4017 шығысының біреуіне қосылған кезде ол 6502 -ді басқарды. Мен сағат сигналын алу үшін жоғарыдағы жинақтардың біріне кірістім.

Мен әлі күнге дейін сағат сигналын алудың түрлі әдістерін қарастырамын.

7 -қадам: Қорытынды

Мен кейбір күрделі схемаларды қалай құруға болатынын және бөлшектердің ең аз мөлшерімен жұмыс істеу үшін өте қарапайым «компьютерді» алуды көрсеттім. Рас, компьютер қазіргі уақытта көп нәрсені жасай алмайды немесе болашақта жасай алады.

80 -ші жылдардың басында, менің VIC20 -мен, мен керемет машинаға таң қалатынмын және оны қалай біріктіруді бастау туралы бірінші идеяға ие болмадым. Уақыт көшті, технология да өзгерді, бірақ негізге қайта оралу және нөлден құрған нәрсеңмен мақтану әлі де жақсы.

Бұл компьютерді одан әрі дамыту үшін мен 2k SRAM -ды 0000 доллардан 2047 долларға қойып, 1 МГц осциллятор қосқым келеді. Мүмкін, мен CD4040 (12-кезеңді екілік толқынды есептегіш / бөлгіш) сияқты нәрсе қосатын шығармын, осылайша мен әр түрлі сағат жылдамдығына қол жеткізе аламын.

Жыпылықтайтын шамдарды емес, мәтінді шығару үшін СКД дисплейін қосуға болады. EEPROM бағдарламашысын СКД дисплейін іске қосуға қажет үлкен бағдарламалармен жұмыс істеу үшін өзгерту қажет.

MEGA 6502 -ді іске қосу үшін қажетсіз болып қалса да, ол әлі де машина кодын жөндеуге көмектеседі. Кез келген адам білетіндей, машина кодында әрқашан қателер болады!

Ұсынылған: