Просмотр полной версии : Система прерываний - есть вопросы.
DI
LD A,63
LD I,A
XOR A
LD (23613),A
LD HL,51697
LD (23746),HL
IM 1
EI
Безусловно, переменные ВАСИКА должны быть установленны ... =) После вше-указанных АСМ-строчек ни брейк ни игноры не будут действовать, единственное, при ошибке чтения он будет пытаться читать вечно =)
Почитал код. Общий принцип понятен - в результате ошибки чтения вызывается прерывание, а что будет потом - вот это уже на совести TR-DOS и/или программиста... Но, вот обнаружил вдруг, что я совсем не понимаю, чем отличается IM 0 от IM 1 (для Спекки, а не для Z80)? IM 2 - я знаю, про него можно не объяснять...
Также давно интересует вопрос, как вляют на флаги такие команды, как
LD A, R
LD I, R
Может, просто ссылку кинет кто на книгу, где это хорошо объясняется?
LD A, R
LD I, Rфлаги 3,5,7 копируются из A. CF не меняется, ZF=1 если A=0. PV ставится в зависимости от того, разрешено ли прерывание
Но, вот обнаружил вдруг, что я совсем не понимаю, чем отличается IM 0 от IM 1 (для Спекки, а не для Z80)? для этого надо понять, чем отличается именно для Z80 ;) если шина стабильна, то для спекки ничем не отличается
Но, вот обнаружил вдруг, что я совсем не понимаю, чем отличается IM 0 от IM 1 (для Спекки, а не для Z80)?
Откроем документ "User Manual Z80 Family CPU User Manual".
Страница 44.
Вольный перевод.
1. IM0. Этот режим совпадает с режимом прерываний 8080 (КР580). В этом режиме, прерывающее устройство может выставить на шину ЛЮБУЮ инструкцию, которая будет выполнена процессором. Обычно это инструкции RST nn или CALL nnnn. После рестарта процессора, включен режим IM0.
Замечание 1 (мое, SfS): При ПУСТОЙ шине спектрума, подтянутой к +5В, будет считываться код инструкции #FF. Это инструкция RST #38.
Замечание 2 (мое, SfS): Если разрабатывается собственная перефирия, то не грех использовать режим IM0 для перехода на обработку прерывания от оной. Особо удобно, что можно давать команду CALL #nnnn. Скажем, при инициализации переферии в некоторые регистры ее прописывается адрес обработчика прерывания, (причем произвольный, а не как в IM2), который потом подставляется на шину в команде CALL #nnnn.
Страница 45.
Вольный перевод.
2. IM1. Когда этот режим задан программистом, то при возникновении прерывания, происходит безусловный переход по адресу #38.
Замечание 1 (мое, SfS): Поскольку этот адрес совпадает с адресом перехода в режиме IM0 при ПУСТОЙ шине спектрума, подтянутой к +5В, то в стандартной конфигурации спектрума (без дополнительной переферии) режимы IM0 и IM1 - НЕ ИМЕЮТ ОТЛИЧИЙ !
Про IM2 писать не буду - сам все знаешь :)
Документаця - оень полезная вещь :)
Да, про документацию знал, увы :( , а за всё остальное (и за общение) -- спасибо. Теперь я разобрался :)
Ivan Roshin (500:95/462.53)
14.10.2005, 12:35
Hello, SMT!
11 Oct 2005 you wrote:
Tom>> LD A, R
Tom>> LD I, R
Команды LD I,R нет - очевидно, имелась в виду LD A,I.
S> флаги 3,5,7 копируются из A. CF не меняется, ZF=1 если A=0.
S> PV ставится в зависимости от того, разрешено ли прерывание
Hо если прерывания разрешены и импульс прерывания пришёл
во время выполнения команды LD A,R (LD A,I), то флаг P/V будет
сброшен, как если бы прерывания были запрещены.
Подробнее об этом здесь:
http://ivr.webzone.ru/articles/ldar_new/
С уважением, Иван Рощин.
Kirill Frolov (2:5030/827.2)
14.10.2005, 16:35
Hемедленно нажми на RESET, Guest from forum zx.pk.ru!
On Tue, 11 Oct 05 20:45:58 +0400, Guest from forum zx.pk.ru wrote:
Gffzpr> Почитал код. Общий принцип понятен - в результате ошибки чтения вызывается
Gffzpr> прерывание, а что будет потом - вот это уже на совести TR-DOS и/или
Hихрена ты не понял. Вызывается опрос клавиатуры, а перед этим вывод
сообщения -- вот он то и ловится через адрес #5CC2. В нормальной
ситуации TR-DOS не пытается ничего писать на экран (если, конечно, не
вызвана команда LIST...) См. сообщение из CODE.ZX. Вызывается, не
прерывание, а обработчик ошибок RST #8 (его можно не только через RST
звать, но и обычным JP) при действительно неисправимой ошибке. Hу это у
"Ларченко и Родионова" ещё описано, "Tape Loading Error" будет. Как
перехватывать и обрабатывать там же описано.
Gffzpr> программиста... Hо, вот обнаружил вдруг, что я совсем не понимаю, чем
Gffzpr> отличается IM 0 от IM 1 (для Спекки, а не для Z80)?
Для спектрума? Практически ничем. Могу опять отослать к Ларченко
и Родионову. Вкратце: в IM 0 с шины считывается код команды, который
всегда (на самом деле, возможно, не всегда) оказывается #FF -- код
команды RST #38. При IM 1 вызов RST #38 генерируется процессором.
Gffzpr> Также давно интересует вопрос, как вляют на флаги такие команды, как
Gffzpr> LD A, R
Gffzpr> LD I, R
"Ларченко и Родионов" изд-во Питер;
Z80 users manual, (C) Zilog;
"Микропроцессорный комплект Z80" (C) Минск...
Второй пункт свободно доступен на сайте www.zilog.com. И вообще всё
остальное элементарно гуглится на том-же zx.pk.ru.
Gffzpr> Может, просто ссылку кинет кто на книгу, где это хорошо объясняется?
А вы, гражданин гость, потрудитесь сделать так, чтобы ваше имя наверху
в "From" стояло. Hаверное, в форуме реальное имя таки ввести надо. Иначе
я на ваши письма отвечать более не буду, заколебали, кругом гости,
ничего не понятно. А хотите конструктивно писать в фидо -- делайте
это хоть через news://news4.fido7.ru, хоть через
http://www.fido-online.ru.
Kirill Frolov (2:5030/827.2)
14.10.2005, 16:35
Hемедленно нажми на RESET, Guest from forum zx.pk.ru!
On Tue, 11 Oct 05 20:45:58 +0400, Guest from forum zx.pk.ru wrote:
Gffzpr> флаги 3,5,7 копируются из A. CF не меняется, ZF=1 если A=0. PV ставится в
Gffzpr> зависимости от того, разрешено ли прерывание
^^^^^^^^^^^^^^^^^^^^^^^
при чём разрешено ли в момент выполнения команды. С глобальным
разрешением оно на пару тактов бывает не в синхронизме... См. известную
статью И. Рошина (хоть у него на сайте, хоть в гугле).
в форум?
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot