Съдържание:

6502 Минимален компютър (с Arduino MEGA) Част 3: 7 стъпки
6502 Минимален компютър (с Arduino MEGA) Част 3: 7 стъпки

Видео: 6502 Минимален компютър (с Arduino MEGA) Част 3: 7 стъпки

Видео: 6502 Минимален компютър (с Arduino MEGA) Част 3: 7 стъпки
Видео: Смартфон, о котором вы НЕ ЗНАЛИ! БЮДЖЕТНЫЙ itel A48 от мирового лидера | Обзор 2024, Юли
Anonim
6502 Минимален компютър (с Arduino MEGA) Част 3
6502 Минимален компютър (с Arduino MEGA) Част 3

Продължавайки по -нататък, сега добавих осмична брава, 8 правоъгълни светодиода и 220 ома резисторен масив към основната платка. Между общия щифт и масата на масива има и джъмпер, така че светодиодите да могат да се изключват. Портата 74HC00 NAND е заменена с порта 78LS08 AND, окабеляването към портата също е променено. Портът AND означава, че 6522 сега се намира на $ 6000 вместо $ E000.

Има и щифт за свързване на външен часовник за задвижване на 6502. При тази връзка няма нужда MEGA да предоставя часовник сигнал. MEGA все още следи какво се случва с процесора както преди.

Използвах 20 пинов 74HC373 за ключалката, защото имах такива. Това беше ОК, когато беше на макета, но 74HC573 е съвместим с шината и би спестил много кабели. UCN5801A, който е 22 -пинов IC, също може да бъде разгледан във веригата, но окабеляването ще бъде малко по -различно.

Горният единичен оранжев светодиод е индикатор за захранване, а долният ляв червен индикатор показва кога се извършва запис. Последното ще бъде незначително, ако платката работи с по -високи скорости.

Модифицираната верига е по -горе (със 74HC573).

Стъпка 1: Демонстрационни програми

Демонстрационни програми
Демонстрационни програми

Две прости демонстрационни програми са включени в монитора 6502 и техният разглобен код е тук.

Тази програма зарежда 1 в регистъра 6502 A и го съхранява в ключалката. След това той добавя 1 към регистъра A и го съхранява в ключалката. След това се връща към $ 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

Тази програма първо задава DDR на порт 6522 за извеждане. След това той съхранява $ 55 (B01010101) в порта, както и в ключалката. След това регистърът A се завърта на 1 стъпка надясно и сега съдържа $ AA (B10101010). Това отново се съхранява в порт B и ключалката. Програмата се връща към $ 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 [отместване]);

Асемблер и разглобявач 6502 са полезни инструменти за кодиране на вашите програми.

Стъпка 2: Добавяне на EEPROM

Добавяне на EEPROM
Добавяне на EEPROM
Добавяне на EEPROM
Добавяне на EEPROM
Добавяне на EEPROM
Добавяне на EEPROM

За платката EEPROM използвах лента с плоскост 950 x 650 мм и 19 мм мъжки щифтове, за да позволя на дъската да изчисти тази отдолу. Тази платка се включва в дъската 6502 по -долу. EEPROM е ATMEL 28C256, който има 28 пина и съдържа 32k x 8 бита памет. Това е повече от адекватно за малките програми, които се използват в момента.

Не съм направил електрическа схема за тази платка, но тя е доста права как се свързва с платката 6502 по -долу. Тези чипове EEPROM не са удобни за автобус, така че трябва да бъдат свързани към отделните щифтове, следователно всички "зелени и бели спагети". Реших проблема с свързването на по -ранната платка, като свързвам линиите за данни от долната страна на платката.

14 -те адресни щифта на EEPROM се свързват със съответните щифтове от лявата страна (зелени проводници), а входно -изходните щифтове с пиновете за данни отдясно (бели проводници). Pin 27 (WE) е свързан към pin 28 (5v), pin 22 (OE) е свързан към земята и pin 20 (CE) е свързан към NAND порта. 2 входа на NAND порта са свързани към A15 на главно табло. Това означава, че когато този щифт се издигне високо, NAND портата дава нисък сигнал към CE пина на EEPROM, което го прави активен. С тази настройка това означава, че EEPROM може да се чете само от 6502.

Тъй като EEPROM живее в първите 32k на картата с памет, това означава, че $ FFFC и $ FFFD могат да държат началния адрес за 6502, след като е бил нулиран. Тъй като 6522 има адреси между $ 6000 и $ 600F, а ключалката е на стойност $ 4100, той спира всякакви конфликти в паметта.

Векторът NMI ($ FFFA и $ FFFB) и векторът BRK / IRQ ($ FFFE anf $ FFFF) също могат да бъдат записани по същия начин.

Стъпка 3: Програмиране на EEPROM

Програмиране на EEPROM
Програмиране на EEPROM
Програмиране на EEPROM
Програмиране на EEPROM

За да съхраните програма в EEPROM, тя се нуждае от програмист. Направих един от лента, Arduino Pro Mini, няколко 74HC595 и и гнездо ZIF. Първоначално програмистът е създаден за AT28C16, който има по -малко адресни линии от AT28C256, така че трябваше да бъде променен.

Схемата показва как да свържете и двата EEPROM. От снимката не става ясно, че двата чипа 595 са обърнати с главата надолу, а не както е показано на диаграмата. Пинове 1 до 7 от 595/1 се подравняват с A1 до A7 на EEPROM, независимо кой се използва. Това спестява 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"); сума = програмни_числови_данни (0x1000); writeEEPROM (0x7ffc, 0x00); // Задайте $ FFFC за 6502 writeEEPROM (0x7ffd, 0x90); // Задайте $ FFFD за 6502 // writeEEPROM (0x1000, 0xA9); // Запишете 1 байт данни Serial.println ("готово"); String outline = "Писано" + (Низово) количество + "байтове"; Serial.println (контур); Serial.println ("Четене на EEPROM"); printContents (0x0000, 0x112f); // Задайте диапазон за показване на printContents (0x7ff0, 0x7fff); // Чете последните 16 байта в EEPROM

По -горе е съкратен изход от програмата.

Стъпка 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

Превключвателите са включени в порт A и програмата показва стойността, която чете на порт B и 74HC373 (който в момента е скрит). превключвателите са свързани към земята, а светодиодите са свързани към 5v. EOR #$ FF коригира проблема с ключалката и порта B, показващи различни модели, като обръща битовете, преди да запише в ключалката.

Стъпка 6: Външен сигнал за време

Външен сигнал за време
Външен сигнал за време

Ако часовникът се приложи към щифта в горната част на платката, 6502 вече може да работи независимо от MEGA. Разбира се, той също се нуждае от захранване. Експериментирах с различни часовници и дори пуснах 6502 на 1MHz с кристален осцилатор. MEGA не може да се справи с по -бързи скорости, затова трябва да бъде премахната.

Опитах и изхода от таймер 555, но това не работи. Мисля, че може да е така, защото не е квадратна вълна? Когато беше свързан към един от изходите на CD4017, той задвижваше 6502. Закърпих в един от горните комплекти, за да се опитам да получа часовник.

Все още гледам различни методи за получаване на часовник.

Стъпка 7: Заключение

Показах как се изграждат някои сложни схеми и се кара много прост „компютър“да работи с минимално количество части. Разбира се, компютърът не може да направи много в момента или е вероятно да го направи в бъдеще.

В началото на 80 -те с моя VIC20 се чудех на страхотната машина и нямах първата идея как да започна да я сглобявам. Времената напредват и технологиите също, но все пак е хубаво да се върнете към основите и да се гордеете с нещо, което сте изградили от нулата.

За по -нататъшно развитие на този компютър възнамерявам да сложа 2k от SRAM на $ 0000 до $ 2047 и да добавя 1 MHz осцилатор. Вероятно ще добавя нещо като CD4040 (12-етапен двоичен пулсационен брояч / делител), така че да мога да използвам различни тактови честоти.

Може дори да се добави LCD дисплей, който да дава текстови изходи, а не просто мигащи светлини. Програмистът на EEPROM също ще трябва да бъде променен, за да се справи с по -големите програми, необходими за стартиране на LCD дисплей.

Въпреки че MEGA става ненужна за работата на 6502, тя все още е полезна за отстраняване на грешки в машинния код. Както всеки знае, машинният код винаги съдържа грешки!

Препоръчано: