PDA

Просмотр полной версии : Система прерываний - есть вопросы.



TomCaT
11.10.2005, 16:37
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

Может, просто ссылку кинет кто на книгу, где это хорошо объясняется?

SMT
11.10.2005, 16:54
LD A, R
LD I, Rфлаги 3,5,7 копируются из A. CF не меняется, ZF=1 если A=0. PV ставится в зависимости от того, разрешено ли прерывание
Но, вот обнаружил вдруг, что я совсем не понимаю, чем отличается IM 0 от IM 1 (для Спекки, а не для Z80)? для этого надо понять, чем отличается именно для Z80 ;) если шина стабильна, то для спекки ничем не отличается

SfS
12.10.2005, 04:57
Но, вот обнаружил вдруг, что я совсем не понимаю, чем отличается 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 писать не буду - сам все знаешь :)
Документаця - оень полезная вещь :)

TomCaT
13.10.2005, 17:14
Да, про документацию знал, увы :( , а за всё остальное (и за общение) -- спасибо. Теперь я разобрался :)

Ivan Roshin (500:95/462.53)
14.10.2005, 11: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, 15: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, 15: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> зависимости от того, разрешено ли прерывание

^^^^^^^^^^^^^^^^^^^^^^^
при чём разрешено ли в момент выполнения команды. С глобальным
разрешением оно на пару тактов бывает не в синхронизме... См. известную
статью И. Рошина (хоть у него на сайте, хоть в гугле).

в форум?