
Сообщение от
drbars
Суть проблемы: Тырканье регистра I во время прерывания. Биты 7 и 6 зарезервированы для флагов.
Код:
регистр"I" в фирменном"СПЕКТРУМЕ" дополни-
тельно участвует в формировании телевизионного сигнала. "ULA"
задействует биты6 и7 регистра"I".
При каждом цикле машинных командZ-80 обращается к ячейке
памяти, адресуемой регистром"I", выводя его в старшие восемь
битов адресной шины, а линия запроса памяти"MREQ" активизиру-
ется. "ULA" генерирует прерывания каждый раз, когда необходимо
изменить содержимое экрана. Это заставляетZ-80 запустить про-
грамму обработки прерываний, при условии, что прерывания под-
ключены.
Когда программа обработки прерываний выполнена, процессор
возвращается в точку, в которой он был при прерывании. Если это
команды считывания/записи в память между16384 (4000H) и32767
(7FFFH), что"ULA" проверяет, просматривая две старшие линии
адресной шины и линию"MREQ", то"ULA" приостанавливает микро-
процессор до окончания изменения экрана.
Если старший бит регистра"I" сброшен, а бит6 активизиро-
ван, то"ULA" может запутаться из-за регенерации динамической
памяти. Активизируется линия"MREQ", и регистр"I" помещается в
старшие восемь битов адресной шины. Далее"ULA" думает, что
процессор производит запись или считывание в эту область ОЗУ,
и при попытке это предотвратить, "ULA" пропускает свое собст-
венное обращение для изменения дисплея, что приводит к развалу
картинки. Поэтому в регистре"I" не должно содержаться любое
число от64 до127 (040H до07FH) включительно, т.e. c двумя
старшими битами, установленными вышеописанным образом.