Выставить биты данных на ШД Микроши в диапазоне 8000H-BFFFH

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

xintrea
Junior
Posts: 2
Joined: 23 Sep 2020 06:52

Выставить биты данных на ШД Микроши в диапазоне 8000H-BFFFH

Post by xintrea »

Привет, народ.

Пробую я сделать "эмулятор ПЗУ" для Микроши на базе платы STM32 (STM32F103C8T6, она же BluePill). Но есть одна проблема: я в схемотехнике полный ноль.

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

Для этого я сделал схемку, которая втыкается в разъем "Внутренний интерфейс". От этого разъема к 5V-tolerance ножкам STM-ки напрямую подключены сигналы /32К, /RD и ШД. Подключал тупо напрямую, потому что так для экспериментов советовали вот в этой теме: https://zx-pk.ru/threads/34004-preobraz ... ost1140494

STM-ка слушает два сигнала - /32К и /RD (они инверсные). Пока эти сигналы оба не равны физическому 0, STM-ка держит ноги, которые подключены к ШД Микроши, в режиме Input, чтобы не мешать работе компьютера. STM-ка работает на частоте 72MHz, и в ней сделан быстрый бесконечный цикл без всяких таймеров и прерываний. Как только в нем обнаруживается, что оба сигнала /32 и /RD стали равны физическому 0, STM-ка переключает ноги ШД в режим Output Push-Pull, и выставляет на них байт данных. Как только /32 и /RD оба не равны нулю, ноги возвращаются в Input-состояние.

И это дело даже работает. Как минимум, STM-ка не влияет на работу компьютера (а пока я не отладил цикл и режимы - очень даже влияла), а в диапазоне 8000H-BFFFH появляется байт данных. Но появляется он очень своеобразно:

Если выставить байт 00h - на шине будет 82h
Если выставить байт 01h - на шине будет 83h
Если выставить байт 02h - на шине будет 82h
Если выставить байт 03h - на шине будет 83h
Если выставить байт 04h - на шине будет 86h

Я даже могу объяснить, почему так происходит. Если к разъему "Внутренний интерфейс" ничего не подключать, и просмотреть диапазон 8000H-BFFFH, то в нем будет всегда считываться число 82h. На просторах интернета я нашел такую информацию "Если ничего не подключено, в Микроше по этим адресам считывается значение 82h. Это слово состояние (status word) процессора, выдаваемое им на шину данных в начале каждого машинного цикла". Откуда оно берется (сам процессор изнутри себя ставит на ШД в начале машинного цикла это значение?) - не совсем понятно. Но это значение действительно присутствует на ШД в диапазоне 8000H-BFFFH.

Когда STM-ка выставляет байт на ШД, он "подмешивается" к значению 82h. Там, где были единицы от числа 82h, они остаются. И к ним выставляются единицы, которые присутствуют в байте, генерируемым STM-кой. То есть, получается как бы логическое ИЛИ между числом 82h и байтом STM-ки.

Другими словами, нули в байте STM-ки не скидывают в ноль присутствующий единичный потенциал на линиях ШД Микроши.

Вот, и я не могу сообразить, как решить эту проблему. Я пробовал использовать на ножках ШД не режим Output Push-Pull, а Output OpenDrain, подавая инверсные биты на эти ножки (да и неинверсное значение тоже пробовал), но это не дало результата. Сейчас думаю попробовать соединить все ножки ШД с землей через резисторы в 10КОм, однако тоже не знаю, стоит ли действительно это делать.

Прошу общественность подсказать, как можно решить проблему, чтобы на ШД появилось именно то число, которое задано.