Оглавление:

6502 Minimal Computer (с Arduino MEGA), часть 1: 7 шагов
6502 Minimal Computer (с Arduino MEGA), часть 1: 7 шагов

Видео: 6502 Minimal Computer (с Arduino MEGA), часть 1: 7 шагов

Видео: 6502 Minimal Computer (с Arduino MEGA), часть 1: 7 шагов
Видео: Home made 6502 breadboard computer playing chess 2024, Июль
Anonim
6502 Минимальный компьютер (с Arduino MEGA) Часть 1
6502 Минимальный компьютер (с Arduino MEGA) Часть 1

Микропроцессор 6502 впервые появился в 1975 году и был разработан небольшой командой под руководством Чака Педдла для MOS Technology. Тогда он использовался в видеоприставках и домашних компьютерах, включая Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 и 64. В то время он был одним из самых дешевых на рынке. Он никогда не исчезал, и теперь он используется любителями и профессионалами для многих приложений.

Я использую версию W65C02S6TPG-14, произведенную Western Design Center и потребляющую в десять раз меньше энергии, чем оригинал. Его особенность заключается в том, что он не должен работать на частоте 1 МГц, как оригинальный чип. Он может работать намного медленнее или использоваться для пошагового выполнения программы и даже увеличиваться до 14 МГц. Технические характеристики чипа объясняют его возможности. Другие чипы 6502 не имеют такой возможности и не будут работать таким образом. Чипы в настоящее время доступны на Ebay, а также в других источниках.

Запасы

Все используемые детали в настоящее время доступны на Ebay, AliExpress и других.

Шаг 1: концепция

Я черпал вдохновение у Бена Етера, который выпустил на YouTube серию видеороликов о 6502 и многих других аспектах создания компьютеров и схем. Первоначально программа была написана им, и я изменил ее и некоторые из его проектов, чтобы создать эту инструкцию. Еще одним человеком, который вдохновил меня, был Эндрю Джейкобс, у которого есть раздел на GitHub, где он использует микроконтроллер PIC для управления своим 6502.

Как и Бен, я использую Arduino MEGA для мониторинга 6502. Я также использую MEGA для обеспечения тактового сигнала, в отличие от Бена. В настоящее время я не использую ни EEPROM, ни RAM.

Шаг 2: требования

Требования
Требования

Для сборки этого «компьютера» список элементов выглядит следующим образом:

1 х Arduino MEGA

1 х Западный проектный центр W65C02S6TPG-14

1 x 74HC00N IC (четырехканальный логический элемент NAND с 2 входами) или аналогичный

1 x 74HC373N IC (восьмеричная прозрачная защелка D-типа) или аналогичный

Макетные доски 2 x 830 отверстий (1 в крайнем случае)

Различные штекеры Dupont - штекерные выводы и соединительные провода

2 светодиода (я использовал синий 5 мм, так как вы можете обойтись без резисторов)

1 x 12 мм мгновенный тактильный кнопочный переключатель, установленный на печатной плате SPST или аналогичный

1 резистор 1 кОм

2 керамических конденсатора по 0,1 мкФ

1 x 8-полосный водяной световой шатер 5 мм, красный светодиод (как указано выше) или 8 светодиодов и резисторы

ПРИМЕЧАНИЕ. Если у вас есть непаянный комплект, вы можете вставить светодиоды неправильно, чтобы они были общим катодом. Я прикрепляю поводок (вместо булавки), чтобы его можно было легко подключить в другом месте. VCC теперь становится Ground. Вы, конечно, можете перевернуть светодиоды (на собранном элементе) и перепаять их, но это много баффа! В настоящее время наборы доступны на AliExpress.

Шаг 3: Собираем все вместе

Собираем вместе
Собираем вместе
Собираем вместе
Собираем вместе

Мне было проще использовать новые провода DuPont, которые не были отделены от ленты, для шины адреса и данных.

Подключите контакт 9 (A0) 6502 к контакту 52 MEGA, контакт 10 (A1) модуля 6502 к контакту 50 и т. д.

до

Подключите контакт 25 (A15) 6502 к контакту 22 MEGA.

На данный момент 16 подключений.

так же

Подключите контакт 26 (D7) 6502 к контакту 39 MEGA, контакт 27 (D6) модуля 6502 к контакту 41 и т. д.

до

Подключите контакт 33 (D0) 6502 к контакту 53 MEGA.

Еще 8 подключений.

Подключите контакт 8 (VDD) к 5 В на MEGA.

Конденсатор 0,1 мкФ, подключенный от контакта 8 к Gnd макетной платы, может быть здесь полезен, но не обязателен.

Подключите контакт 21 (VSS) к Gnd на MEGA.

Контакты 2, 4, 6, 36 и 38 можно подключить к 5 В

Подключите контакт 37 (Clock) к контактам 2 и 7 MEGA.

Подключите контакт 34 (RWB) к контакту 3 MEGA.

Подключите контакт 40 (сброс), как показано на схеме выше.

Шаг 4: Тестирование схемы

Тестирование схемы
Тестирование схемы

На этом этапе 6502 будет работать, и можно будет использовать программу program1. Если вы используете 8-стороннюю рамку (как указано выше), ее можно вставить прямо в макетную плату, а вывод заземлить, или вы можете использовать 8 светодиодов и резисторы. Светодиоды покажут, что находится на шине данных.

На этом этапе было бы также установить задержки в Loop () на 500 или более, чтобы следить за тем, что происходит.

Вы должны получить аналогичный вывод на последовательном мониторе, как показано выше. При нажатии кнопки Reset процессор выполняет 7 циклов, а затем ищет запуск программы в ячейках $ FFFC и $ FFFD. Поскольку у 6502 нет физических адресов для чтения, мы должны предоставить их от MEGA.

В приведенных выше выходных данных 6502 считывает $ FFFC и $ FFFD и получает $ 00 и $ 10 (младший байт, старший байт), что является началом программы на уровне $ 1000. Затем процессор начинает выполнение программы в ячейке $ 1000 (как указано выше). В этом случае он читает $ A9 и $ 55, то есть LDA # $ 55 (загрузить 85 в аккумулятор). Опять же, поскольку нет места в физической памяти, MEGA имитирует то, что считывается с шины данных.

$ 55 (85) дает двоичный шаблон 01010101, а при повороте на 1 бит влево дает $ AA (170) 10101010.

Программа показывает, что процессор работает правильно, но вскоре приедается, так что переходим к следующей части.

Шаг 5: следующий шаг

Следующий шаг
Следующий шаг
Следующий шаг
Следующий шаг

Вышеупомянутая «стопка спагетти», вероятно, будет чем-то вроде того, что у вас будет после этого этапа.

Затем вам нужно добавить микросхемы 74HC373N и 74HC00N на макетную плату.

К сожалению, контакты 373 не совпадают с шиной данных, поэтому их необходимо подсоединить проводами.

Подключите 5 В к контакту 20.

Подключите заземление к контакту 10.

Подключите контакт 33 (D0) 6502 к контакту 3 (D0) 74HC373N.

и то же самое со штырями от D1 до D7.

От Q0 до Q7 - это выходы, которые необходимо подключить к светодиодной панели или отдельным светодиодам и резисторам.

С 74HC00 требуется только 2 его ворот.

Подключите 5 В к контакту 14.

Подключите заземление к контакту 7.

Подключите контакт 17 (A8) 6502 к контакту 1 (1A) 74HC00.

Подключите контакт 25 (A15) 6502 к контакту 2 (1B) 74HC00.

Подключите контакт 34 (R / W) 6502 к контакту 5 (2B) 74HC00.

Подключите контакт 3 (1Y) 74HC00 к контакту 4 (2A) 74HC00.

Подключите контакт 6 (2Y) 74HC00 к контакту 11 (LE) 74HC373N.

Подключите контакт 11 (LE) 74HC373N к контакту 1 (OE) 74HC373N.

Вы можете подключить синий светодиод к 1Y и заземлению, а также 2Y к земле, это будет указывать, когда ворота активны.

Наконец, измените строку в процедуре onClock с program1 на program2

setDataPins (программа2 [смещение]);

Шаг 6: Программа

Программа
Программа
Программа
Программа

Программа 6502-Monitor содержит две процедуры 6502, описанные выше.

Программа все еще находится в стадии разработки и немного неопрятна.

При запуске program2 задержки в loop () могут быть 50 или меньше и даже полностью удалены. Комментирование строк Serial.print () также ускоряет работу 6502. Отсоединение контакта 1 (OE) 373 от контакта 11 (LE) дает разные результаты. Отсоединение контактов 1 и 11 микросхемы 373 от логических элементов NAND позволяет вам видеть, что находится на шине данных в каждом тактовом цикле.

Возможно, вам придется связать OE с землей, а не оставлять его плавающим, поскольку 8 выходных линий отключаются, если этот вывод становится высоким. Когда на выводе LE высокий уровень, выходные контакты такие же, как и входы. Низкий уровень на контакте LE фиксирует выходы, т.е. если входные контакты меняются, выходы остаются прежними.

Я постарался сделать программу максимально простой, чтобы ее было легче понять.

Экспериментируя с задержками, вы сможете точно следить за тем, что делает 6502.

Ниже приведены две программы (обе работают по адресу $ 1000) на ассемблере 6502:

program1

LDA № 55

NOP

ROL

1010 канадских долларов

JMP $ 1000

ROL поворачивает содержимое аккумулятора на один бит влево, что означает, что теперь $ 55 становится $ AA.

В машинном коде (шестнадцатеричный): A9 55 EA 2A 8D 10 10 4C 00 10

program2

LDA # $ 01

STA $ 8100

АЦП # $ 03

STA $ 8100

1005 японских долларов

В машинном коде (шестнадцатеричный): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

В программе program2 теперь есть физический адрес $ 8100, по которому 74HC373 находится на адресной шине.

то есть A15 из 6502 составляет 32768 (8000 долларов США), а A8 - 256 (0100 долларов США) = 33024 (8100 долларов США).

Таким образом, когда 6502 записывает в 8100 долларов (STA 8100 долларов), R / W 6502 имеет низкий уровень, и данные на шине данных 6502 фиксируются, когда 373 LE переходит на низкий уровень. Из-за 74HC00 NAND Gate сигналы меняются местами.

На приведенном выше снимке экрана вторая запись увеличилась на 3 (ADC # $ 03) - с 7F до 82 долларов.

В действительности, для конкретного местоположения 373. Это единственный физический адрес из возможных 65536, он демонстрирует, как работает адресная шина. Вы можете поэкспериментировать с разными адресными контактами и поместить их в другое место. Конечно, вам нужно будет изменить операнды STA на новое место. например Если бы вы использовали адресные строки A15 и A9, адрес был бы 8200 долларов (32768 + 512).

Шаг 7: Заключение

Заключение
Заключение

Я попытался продемонстрировать, насколько легко запустить 6502.

Я не являюсь экспертом в этой области, поэтому буду приветствовать любые конструктивные комментарии или информацию.

Вы можете продолжить это развитие, и мне было бы интересно, что вы сделали.

Я намерен добавить в проект EEPROM, SRAM и 6522, а в будущем поставить его на стрип-плате.

Рекомендуемые: