1 Отредактировано avivanov76 (08-01-2019 22:28)

Тема: Контроллер НГМД 840 - загадка с ПЗУ

Есть контроллер 840К в 5 слоте. К нему подключен Panasonic JU 475-4.
При включении дисковод не выбирается (светодиод на морде не светится), загрузка падает в обработчик BRK по разным адресам в районе 22xx.

По команде C500G то же самое.

Если написать простую программку, которая пишет в C0D3 92, а потом по очереди 0F и 0E с небольшим интервалом, то светодиод на морде дисковода моргает.

Если переписать содержимое ПЗУ в память командой 2000<C500.C5FFM, а потом подправить 2011:A9 50 (иначе номер слота неправильно определится, поскольку адрес не тот), то при запуске 2000G дисковод выбирается, мотор включается и читается первый сектор. Дальше загрузка падает в обработчик BRK, потому что загрузочный сектор передает управление обратно в ПЗУ.

Черная магия, блин. У кого есть идеи, почему чтение из ПЗУ нормальное, а выполнение - нет?

2

Re: Контроллер НГМД 840 - загадка с ПЗУ

Скорее всего бздуха уже на пол пути к нирване... При выполнении из нее идет постоянное обращение к ней и её клинит, а при копировании обращение к ней через много-много тиков...

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

3

Re: Контроллер НГМД 840 - загадка с ПЗУ

ПЗУ, похоже, все-таки живая. Сначала у меня была мысль, что это какие-то проблемы с питанием (типа, кондеры разряжаются при частых обращениях, и лезут глюки), но посмотрел шины питания с осциллографом и ничего страшного не нашел.

Была еще мысль, что, может, одновременно на шину данных лезут ВВ55 и ПЗУ, но тоже мимо - выборка на ВВ55 одновременно с ПЗУ не приходит.

В конце концов, повесил 1-й канал на сигнал выбора ПЗУ,  2-й на вывод данных, настроил ждущий режим с запуском по спаду сигнала и проверил все 8 выходов ПЗУ.

На разрядах D0-D6 нормальные импульсы, с правильными уровнями, а вот на D7 обнаружилась такая фигня (см. картинку).

Во-первых, уровень кривой (около 1,8 В), во-вторых, после просадки на 0 этот уровень медленно восстанавливается. У ПЗУ открытый коллектор, так что она может только посадить уровень на землю. И получается это у нее хорошо :)
Резистор к питанию - в порядке. Так что остаются ВА86 и ВВ55. Мне кажется, что это ВАвка барахлит, но поскольку у меня ее нет, проверить пока не могу.

А что в результате получается: в начале ПЗУ идут байты A2 20 A0 00 A2. Первые два такта - это чтение инструкции LDX #$20, старший бит еще распознается как высокий уровень. К третьему такту уровень просел. Старший бит читается как 0 и LDY #$0 превращается… в JSR! Дальше читается младший байт адреса, потом идет пауза в 3 такта, пока в стек пишется адрес возврата, а потом читается байт A2. Но поскольку уровень на D7 все еще мал, он превращается в 22. Получается, что по факту процессор выполняет инструкцию JSR $2200. После чего все и валится в обработчик BRK, поскольку в памяти после включения мусор.

Post's attachments

Attachment icon NewFile1.bmp 146.3 kb, 271 downloads since 2019-01-25 

4

Re: Контроллер НГМД 840 - загадка с ПЗУ

Омметром прозвонить все 8 линий относительно шин питания на обесточенной схеме. Причем в оба направления, диодным тестом и обычным.
Наверняка где-то разница вылезет.

5

Re: Контроллер НГМД 840 - загадка с ПЗУ

В точку!

Собственно, прозвонил-то я их сразу и разницу в 300 лишних Ом увидел, но вот кто кого шунтирует было непонятно. Надо было, конечно, резистор отпаять, но вчера времени не нашлось. Зато был применен ненаучный метод "пошевелить резистор пальцем" и оказалось, что он треснул и целым выглядел только из-за прочности лака :)

После замены сразу все заработало. Ну почти. Час бился, пытаясь понять, почему вообще ничего не читается с флопа, пока не догадался длительность сигнала Index померять. Оказалось, диск бодро крутился на 360 об/мин, хотя конфигурация перемычек не менялась. Пришлось сигнал выбора скорости посадить на землю через резистор 1 КОм (и держать этот резистор пальцем, пока ИКП грузился).

Потом вспомнил, что в прошлый раз замкнул перемычку выбора скорости "крокодилом" от щупа осциллографа. А поскольку осциллограф заземлен, перемычка заодно села на землю. А тут я нормальный джампер поставил, и оказалось, что на второй ноге перемычки вовсе не земля, а высокий уровень. В общем, еще надо понять, можно ли штатными средствами на этой перемычке низкий уровень получить.

Post's attachments

IMG_145025.jpg, 101.9 kb, 768 x 384
IMG_145025.jpg 101.9 kb, 241 downloads since 2019-01-27