Оглавление:

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

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

Видео: 6502 Minimal Computer (с Arduino MEGA), часть 3: 7 шагов
Видео: Обзор Arduino Nano V3.0 - начало работы, установка драйвера и среды разработки. 2024, Ноябрь
Anonim
6502 Минимальный компьютер (с Arduino MEGA) Часть 3
6502 Минимальный компьютер (с Arduino MEGA) Часть 3

Двигаясь дальше, я добавил к основной плате восьмеричную защелку, 8 прямоугольных светодиодов и матрицу резисторов 220 Ом. Также имеется перемычка между общим выводом массива и землей, чтобы светодиоды можно было выключить. Затвор 74HC00 NAND был заменен затвором 78LS08 AND, также была изменена проводка к затвору. Логический элемент И означает, что 6522 теперь стоит 6000 долларов, а не E000.

Также имеется контакт для подключения внешних часов для управления 6502. При таком подключении MEGA не нуждается в подаче синхросигнала. MEGA по-прежнему следит за тем, что происходит с процессором, как и раньше.

Я использовал 20-контактный 74HC373 для защелки, потому что он у меня был. На макетной плате это было нормально, но 74HC573 совместим с шиной и сэкономил бы массу проводов. UCN5801A, который представляет собой 22-контактную ИС, также может быть рассмотрен в схеме, но схема подключения будет немного другой.

Верхний одиночный оранжевый светодиод - это индикатор питания, а нижний левый красный индикатор указывает на то, что происходит запись. Последнее будет незначительным, если доска будет работать на более высоких скоростях.

Модифицированная схема выше (с 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 порта B 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

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

Измените эту строку кода на 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 подключаются к соответствующим контактам на левой стороне (зеленые провода), а контакты ввода / вывода - к контактам данных справа (белые провода). Контакт 27 (WE) подключен к контакту 28 (5 В), контакт 22 (OE) подключен к земле, а контакт 20 (CE) подключен к логическому элементу И-НЕ. 2 входа элемента И-НЕ подключены к A15 на основная плата. Это означает, что когда этот вывод становится высоким, логический элемент И-НЕ подает сигнал низкого уровня на вывод CE EEPROM, который делает его активным. При такой настройке это означает, что 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. Первоначально программатор был разработан для AT28C16, у которого меньше адресных строк, чем у AT28C256, поэтому его пришлось модифицировать.

На принципиальной схеме показано, как подключить оба этих EEPROM. Из фото не ясно, что две микросхемы 595 перевернуты, а не так, как показано на схеме. Контакты с 1 по 7 595/1 совпадают с контактами с A1 по A7 EEPROM, независимо от того, какой из них используется. Это экономит 7 соединительных проводов. Плата теперь выглядит немного тесноватой, и это связано с тем, что изначально я использовал 24-контактный разъем DIL, который теперь был заменен гораздо большим 28-контактным разъемом ZIF.

Включена программа, которая работает с моей платой. Программа будет работать с любыми Arduino и 595 в схеме, как показано. Я выбрал 5v Pro Mini, потому что он компактен и достаточно дешев, чтобы оставить его в комплекте.

Шаг 4: Программы EEPROM

Программы EEPROM
Программы EEPROM

В программаторе EEPROM есть три простые программы. Чтобы использовать их, просто раскомментируйте строку, которую хотите использовать.

// Чтение из порта A 6522

// константные байтовые данные = {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); // Устанавливаем $ FFFC для 6502 writeEEPROM (0x7ffd, 0x90); // Установить $ FFFD для 6502 // writeEEPROM (0x1000, 0xA9); // Записываем 1 байт данных Serial.println ("done"); Структура строки = «Написано» + (Строка) количество + «байтов»; 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 (который в настоящее время скрыт). переключатели подключены к земле, а светодиоды подключены к 5В. EOR # $ FF устраняет проблему отображения различных шаблонов защелкой и портом B путем переворачивания битов перед записью в защелку.

Шаг 6: Внешний сигнал времени

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

Если на вывод в верхней части платы подан тактовый сигнал, 6502 теперь может работать независимо от MEGA. Конечно, ему также нужен блок питания. Я экспериментировал с разными тактовыми частотами и даже запускал 6502 на частоте 1 МГц с кварцевым генератором. MEGA не успевает за более высокими скоростями, поэтому ее необходимо удалить.

Я также попробовал вывод таймера 555, но это не сработало. Я думаю, это может быть потому, что это не прямоугольная волна? При подключении к одному из выходов CD4017 он действительно управлял 6502. Я подключил один из вышеперечисленных комплектов, чтобы попытаться получить тактовый сигнал.

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

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

Я показал, как построить несколько сложных схем и заставить очень простой «компьютер» работать с минимальным количеством деталей. Конечно, в настоящее время компьютер не может делать многого или, скорее всего, сделает это в будущем.

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

Для дальнейшего развития этого компьютера я намерен поставить 2k SRAM по цене от 0000 до 2047 долларов и добавить генератор на 1 МГц. Вероятно, добавлю что-то вроде CD4040 (12-ступенчатый двоичный счетчик / делитель пульсаций), чтобы я мог использовать разные тактовые частоты.

Можно даже добавить ЖК-дисплей, чтобы выводить текст, а не просто мигать. Программатор EEPROM также необходимо будет модифицировать для работы с более крупными программами, необходимыми для работы ЖК-дисплея.

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

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