Привет, народ.
Пробую я сделать "эмулятор ПЗУ" для Микроши на базе платы STM32 (STM32F103C8T6, она же BluePill). Но есть одна проблема: я в схемотехнике полный ноль.
Пока что у меня задача - научиться выставлять один повторяющийся байт во всех ячейках адресного диапазона 8000H-BFFFH.
Для этого я сделал схемку, которая втыкается в
разъем "Внутренний интерфейс". От этого разъема к 5V-tolerance ножкам STM-ки напрямую подключены сигналы /32К, /RD и ШД. Подключал тупо напрямую, потому что так для экспериментов советовали вот в этой теме:
https://zx-pk.ru/threads/34004-preobrazovatel-urovnej-5v-3v-na-shinu-dannykh.html?p=1140494#post1140494STM-ка слушает два сигнала - /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КОм, однако тоже не знаю, стоит ли действительно это делать.
Прошу общественность подсказать, как можно решить проблему, чтобы на ШД появилось именно то число, которое задано.