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

в 12:27, , рубрики: stm32, шахматный компьютер, шахматы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Основа - микропроцессор КР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А. А если хочется чего-то помощнее и побыстрее? Тогда в картридже должен стоять более мощный микроконтроллер. Это можно сделать. Но тогда стоит задача, как сделать взаимодействие между шахматным компьютером и своим микроконтроллером, если у шахматного компьютера наружу выведено только ПЗУ с диапазоном адресов от 0x0000 до 0x1FFF? Шахматный компьютер ничего не может записать в ПЗУ, только считать, выставив адрес на шину.

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

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

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

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

В этой плате много всего дополнительного на случай если её использовать автономно (кнопки, индикатор и т. д.)
Схема довольно простая - микроконтроллер 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 в зависимости от нажатой кнопки. Например, если кнопка не нажата, то программа считает из ПЗУ по адресу 0x10FF. Если нажата кнопка "УИ" с кодом 0xFA, то программа считает из ПЗУ по адресу 0x10FA.

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

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

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

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

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

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

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

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

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

Автор: sfrolov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js