Шахматный компьютер «Интеллект-02», или делаем интерактивным ПЗУ

Шахматный компьютер Интеллект-02 был описан в журнале «Радио» в 1983 году № 9. Предположительно это первое в СССР серийное бытовое устройство, выполненное на микропроцессоре широкого назначения (наши первые калькуляторы на процессорном ядре появились лет на 10 раньше (Электроника Б3–09), но у них были свои процессорные ядра и своя узконаправленная архитектура).

9e8d192ebeccb6d588dfbfa77764ef44.JPG

Компьютер выполнен в виде шахматной доски.

550060f9c7ba7221a66c84b1b2c73ebb.JPG

Внизу расположен индикатор из четырёх светодиодных индикаторах. Слева от них два красных светодиода «Вы выиграли» и «Вы проиграли». Справа — клавиатура.

9c80250ed1a3456900d7a04bce17a8ef.JPG

Вверху вставляется картридж. Я видел картриджи с играми «Шахматы» (два варианта) и ГРАН-КАЛАХ.

Шахматы — это обычные шахматы, а для игр Гран и Калах используются специальные фишки.

Изображение из журнала

Изображение из журнала «Радио» 1983 № 9

Шахматное поле сдвигается и убирается с доски, а под полем находится ниша для игровых фишек.

Описание игры в журнале

Описание игры в журнале «Радио» 1983 № 9

Вообще планировали разные картриджи, включая НИМ-1, НИМ-2, СМЭШ, куспак, нарды, уголки, крестики-нолики и шашки рэндзю, но кроме двух картриджей «Шахматы» и «Гран-калах» я других не видел.

6681fd54d8a3811821e239c32fd0cda6.JPG

Несмотря на кажущуюся простоту внутри довольно много микросхем.

1088cf8ff945daf88698fc78fcae0647.JPG

Основа — микропроцессор КР580ИК80А (КР580ВМ80А).

ОЗУ сделано на микросхемах КР565РУ2 суммарно 1 килобайт.

Внутри картриджа стоит микросхема масочного ПЗУ типа КР568РЕ1 или КР568РЕ2 объемом до 8 килобайт.

Более подробно внутреннее устройство описано на сайте https://emuverse.ru/wiki/Интеллект-02

Вы можете там более детально прочитать про его архитектуру. Я лишь дополню, что на самом деле скан-коды кнопок выглядят так:

  СБ   ВИ   ПП   A1   B2   C3   D4   E5
[  ] [bf] [fb] [f1] [f2] [f3] [f4] [f5]
 ВВ   СТ   УИ   F6   G7   H8    9    0
[df] [7f] [fa] [f6] [f7] [f8] [f9] [f0]

И на индикаторах нет возможности зажигать точки. Только семь сегментов.

Принципиальной схемы шахматного компьютера я не видел. Скорее всего она была взята с прототипа — с шахматного компьютера Chess Challenger 3. Или может быть с компьютера Schachcomputer SC2. Вот его схема:

Схема Schachcomputer SC2

У «Интеллекта», в отличие от прототипов, ПЗУ выполнено в виде отдельного сменного картриджа. Если купить просто шахматный компьютер без картриджа, то он работать не будет.

Картридж от игры Гран-калах

Картридж от игры Гран-калах

Внутри картриджа только одна микросхема ПЗУ и несколько резисторов.

Когда я играл с шахматным компьютером, то подумал, а возможно ли сделать свою прошивку с шахматным движком? По идее, это сделать несложно, если делать в кодах микропроцессора КР580ВМ80А. А если хочется чего-то помощнее и побыстрее? Тогда в картридже должен стоять более мощный микроконтроллер. Это можно сделать. Но тогда стоит задача, как сделать взаимодействие между шахматным компьютером и своим микроконтроллером, если у шахматного компьютера наружу выведено только ПЗУ с диапазоном адресов от 0×0000 до 0×1FFF? Шахматный компьютер ничего не может записать в ПЗУ, только считать, выставив адрес на шину.

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

В итоге появилась такая плата с эмулятором ПЗУ.

73e604cdb81e7c0299153811d9fb9e2f.JPGСхема эмулятора ПЗУ

Схема эмулятора ПЗУ

В этой плате много всего дополнительного на случай если её использовать автономно (кнопки, индикатор и т. д.)
Схема довольно простая — микроконтроллер STM32F205VET6 и регистр 74HC373 для приведения уровней и отключения вывода по окончанию сигнала CS.

Работает она так: микропроцессор шахматного компьютера выставляет на шину адрес и дёргает сигнал CS. По приходу сигнала CS микроконтроллер платы эмулятора от нужного адреса просто выставляет из своего ОЗУ на шину данных выходной байт. В листинге C это выглядит как несколько строк:

  IDR = (GPIOB->IDR) & 0b1111111111111; // считываем адрес
  GPIOA->ODR = Chess_RAM[IDR];          // выводим ROM

По прерыванию в порте B сидит наш адрес. Мы его считываем и выставляем наружу байт из массива.

Если не изменять ОЗУ Chess_RAM, то предварительно загрузив в него известные прошивки, получается простой эмулятор текущих картриджей.

А если надо сделать свой картридж с реакцией на кнопки и выводом на индикатор?

Тогда в качестве прошивки была написана небольшая программа в кодах КР580ВМ80А, которая работает так:

  1. Четыре ячейки с адресами 0003, 0004, 0005, 0006 содержат коды, которые надо выводить на дисплей.

  2. Программа, написанная в кодах КР580ВМ80А, поочередно выводит эти ячейки на четыре индикатора (порт 0xF6 выбирает номер индикатора и порт 0xF5 значение байта).

  3. Затем программа считывает порт 0xF4 шахматного компьютера, который содержит код 0xFF, если кнопка нажата, или код нажатой кнопки.

  4. Считанный код программа передаёт в картридж, обращаясь к диапазону адреса ROM в зависимости от нажатой кнопки. Например, если кнопка не нажата, то программа считает из ПЗУ по адресу 0×10FF. Если нажата кнопка «УИ» с кодом 0xFA, то программа считает из ПЗУ по адресу 0×10FA.

Программа STM32 в картридже после того, как выдала код ПЗУ по адресу, анализирует, по какому адресу, собственно было обращение. И если обращение было в диапазоне 0×1000–0×10FF, то значит моя программа в шахматном компьютере передала таким способом код нажатой кнопки.

Ну, а дальше этот код анализируется, программа на STM32 выполняется и результат её работы, будь то свой шахматный движок, или простая программа «Часы» выводит время просто путём записи тех цифр, которые надо вывести, изменяя ОЗУ (для шахматного компьютера это ПЗУ) с адресами 0003, 0004, 0005 и 0006.

c6d87b5884c4d27f794c8b4d55ac1d4a.JPG

В результате получился самодельный картридж. В качестве эксперимента я сделал при загрузке выбор трёх известных картриджей — Шахматы 1, Шахматы 2, Гран-калах, чтобы можно было играть в те игры на случай, если у пользователя нет оригинальных картриджей, и дополнительно адаптировал шахматный движок, сделанный на базе mcu-max. В итоге в картридже с эмулятором появилось четыре игры.

bd70e7e1f4d53c04f439391b46f26266.JPG

Не знаю, насколько отличаются по уровню игры три шахматных движка. Знаю, что первый картридж «Шахматы», скорее всего, адаптирован от игры Chess Challenger 3, поскольку отвечает теми же ходами. А вот переписанный заводской картридж «Шахматы», который поставлялся в поздние Интеллекты, совсем другой. Он занимает почти весь объём ПЗУ и играет совершенно по-другому.

Получился такой забавный интерактивный картридж. А вывод может получиться следующий: если есть, например, какая-нибудь полузакрытая компьютерная система, то можно использовать такие картриджи, эмулирующие ПЗУ и оперативно меняющие его содержимое

Например, если вы, вдруг, решили починить ZX Spectrum или ПЭВМ «АГАТ» с битым ОЗУ, то можно реализовать такую тестовую прошивку (и добавив в картридж свой ЖКИ), которая будет вставляться вместо штатного ПЗУ, и позволит более наглядно понять, что там не работает, не анализируя сигналы анализатором или осциллографом.

Вот и всё. Спасибо за внимание.

© Habrahabr.ru