Я сегодня тоже сделал одну вещь из серии "
Миссия невыполнима" - красивую,
но бестолковую и громоздкую, как памятники Зураба нашего Церетелли...
Суть задачи мне не далась еще в начале лета, когда я доделывал
Простейшую ЭВМ на КР580ВМ80А: обслужить прерывание
RST7, заданное
аппаратно резисторами на шине данных.
Для этого всего-то надо запретить прохождение сигнала чтения
/RD,
который создается из
DBIN через инвертирующий вентиль, этим вентилем
удобно и запрещать
/RD в момент обслуживания прерывания.
С этой целью используют биты слова состояния процесора (
STATUS) -
либо
D0 = 1, что означает
обслуживаем прерывание, либо
D7 = 0, что
означает
НЕ читаем!
В конструкции
Простейшей ЭВМ у меня было спортивное условие - сделать
всё на 155-й серии, а мы помним, что на ШД цеплять 2 входа 155-й ТТЛ
очень рискованная затея, поэтому я хотел на ШД не цепляться, но никак
не вышло - поэтому поставил 555-ю серию, что вышло неспортивно...
Но сейчас ситуация сложилась ещё хуже - я начал моделировать "
Кроху",
но поскольку коллега
PVV перпиливает в
КР580ВМ80А нашу модель
Z80,
то с перыванием и выдачей
STATUS - не всё ещё гладко.
В общем, поскольку я "
Кроху" почти нарисовал, бросать был жалко этот
проект, то пришлось порешать нерешаемое и впихнуть невпиxyемое...
Вкратце в итоге решение вот какое: процесор, приняв сигнал прерывания,
сбросит сигнал
INTE, вот тут то и пора запрещать
/RD - это не проблема,
а вот чем его обратно разрешить раз
INTА нам недоступен?...
Ну и я решил - разрешать
/RD поможет признак, что программа пришла на
адрес
0038Н. Картинка иллюстрирует это.
Не скажу, что элегантно, да - громоздко... но кто умеет проще - сделайте
проще? Я, честно говоря, ооочень доволен.. и в отличие от кучер Ионы -
похвастаюсь, ибо нетривиально!
P.S. Кстати, кто делает или моделирует "Кроху" - обратите внимание, они тоже фиксируют
бит статуса в регистре типа ТМ2. Надпись слабо разборчива, но это либо D0 либо D7,
надо уточнить по логике схемы... Причем фиксируют они бит STATUS укорченным SYNC -
{SYNC & F1}: