User Tag List

Показано с 1 по 10 из 178

Тема: Справочник по Z80?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    16.08.2005
    Адрес
    Estonia,Tallinn
    Сообщений
    1,131
    Спасибо Благодарностей отдано 
    55
    Спасибо Благодарностей получено 
    257
    Поблагодарили
    195 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    столкнулся тут с непоняткой на тему команды RETI у Z80, непонятно как она действует на флаги IFF, в одних справочниках пишут что "копируется IFF2 в IFF1", в других пишут что "не меняются", при этом в доке от Zilog написано
    However, this instruction does not enable interrupts that were disabled when the interrupt routine was entered. Before doing the RETI instruction, the enable interrupt instruction (EI) should be executed to allow recognition of interrupts after completion of the current service routine
    но у Ларченко и Родионова в книге написано что эти флаги копируются, в эмуле тогож Unreal исходниках в RETI тоже копия делается
    как в реальности то?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    07.10.2006
    Сообщений
    1,730
    Спасибо Благодарностей отдано 
    257
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    167 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Raydac Посмотреть сообщение
    столкнулся тут с непоняткой на тему команды RETI у Z80, непонятно как она действует на флаги IFF, в одних справочниках пишут что "копируется IFF2 в IFF1", в других пишут что "не меняются", при этом в доке от Zilog написано

    но у Ларченко и Родионова в книге написано что эти флаги копируются, в эмуле тогож Unreal исходниках в RETI тоже копия делается
    как в реальности то?
    В любом случае это важно только в обработчике немаскируемых прерываний с командой в конце RETI вместо RETN, т.к. при обработке маскируемых прерываний в оба флага IFF2 и IFF1 заносится 0. Дока от Zilog просто говорит, что RETI не включает прерывания, о копировании флагов ничего не сказано.

    "All the ED xx RET? instructions copy IFF2 to IFF1, even RETI (ED 4D), which the official documentation does not note. The only difference between RETI and RETN is that peripheral devices which allow daisy-chaining of interrupts (eg the Z80 PIO) recognise the ED 4D sequence as 'end of interrupt' and then know that they can allow a further interrupt to be passed to the processor." Отсюда: https://wwwold.fizyka.umk.pl/~jacek/...0reference.htm

    Этот пользователь поблагодарил Spectramine за это полезное сообщение:

    Raydac(30.08.2020)

  4. #3

    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    769
    Спасибо Благодарностей отдано 
    252
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    42 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Добавлю вроде бы лучшую книжку, где про Z80 изложено наверное всё. Спасибо китайскому товарищу. Может кому будет не лень с гуглом всё это обрусить. Книжице уже более 15 лет...


    Цитата Сообщение от Raydac Посмотреть сообщение
    столкнулся тут с непоняткой на тему команды RETI у Z80, непонятно как она действует на флаги IFF, в одних справочниках пишут что "копируется IFF2 в IFF1", в других пишут что "не меняются", при этом в доке от Zilog написано

    но у Ларченко и Родионова в книге написано что эти флаги копируются, в эмуле тогож Unreal исходниках в RETI тоже копия делается
    как в реальности то?
    Цитата Сообщение от weiv Посмотреть сообщение
    В любом случае это важно только в обработчике немаскируемых прерываний с командой в конце RETI вместо RETN, т.к. при обработке маскируемых прерываний в оба флага IFF2 и IFF1 заносится 0. Дока от Zilog просто говорит, что RETI не включает прерывания, о копировании флагов ничего не сказано.
    Несложно догадаться, что RETI при выходе из маскируемого прерывания, если обработчик флаги не менял, просто опять запишет запрет на прерывания. Поэтому Z80 и требует EI перед RET/RETI. Если RETI используется для выхода из немаскируемого прерывания, то флаг прерывания восстановится таким, каким он был на старте обработчика. Ничего в IFF2 не копируется - в официальных доках ошибка. Об этом и другая информация про Z80 изложена на русском года 3 назад - буду рад добавочной информации и критическим замечаниям.
    Последний раз редактировалось litwr; 26.01.2022 в 09:06. Причина: опечатка

  5. #4

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,080
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    479
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Несложно догадаться, что RETI при выходе из маскируемого прерывания, если обработчик флаги не менял, просто опять запишет запрет на прерывания. Поэтому Z80 и требует EI перед RET/RETI. Если RETI используется для выхода из немаскируемого прерывания, то флаг прерывания восстановится таким, каким он был на старте обработчика. Ничего в IFF2 не копируется - в официальных доках ошибка.
    Вроде как эти команды в связке с Z80-DMA актуальны...

  6. #5

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,289
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    202
    Спасибо Благодарностей получено 
    1,456
    Поблагодарили
    946 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Добавлю вроде бы лучшую книжку, где про Z80 изложено наверное всё.
    переведи пожалуйста вот этот момент
    "The INI/INIR/IND/INDR instructions use BC after decrementing B, and the OUTI/OTIR/OUTD/OTDR instructions before"

  7. #6

    Регистрация
    07.10.2006
    Сообщений
    1,730
    Спасибо Благодарностей отдано 
    257
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    167 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Несложно догадаться, что RETI при выходе из маскируемого прерывания, если обработчик флаги не менял, просто опять запишет запрет на прерывания. Поэтому Z80 и требует EI перед RET/RETI. Если RETI используется для выхода из немаскируемого прерывания, то флаг прерывания восстановится таким, каким он был на старте обработчика. Ничего в IFF2 не копируется - в официальных доках ошибка. Об этом и другая информация про Z80 изложена на русском года 3 назад - буду рад добавочной информации и критическим замечаниям.
    В IFF2 ничего не копируется - копируется сам флаг IFF2 во флаг IFF1 при выполнении команд RETI/RETN. Но при заходе в маскируемое прерывание в оба флага заносится 0. Поэтому при выполнении RETI/RETN на выходе из маскируемого прерывания прерывания будут запрещены. А при выполнении RETI/RETN при выходе из НЕмаскируемого прерывания восстановится состояние маскируемых прерываний до входа в немаскируемое (IFF1:=IFF2).

    - - - Добавлено - - -

    Цитата Сообщение от haywire Посмотреть сообщение
    Инструкции INI/INIR/IND/INDR сначала декрементируют B, после чего используют BC, а инструкции OUTI/OTIR/OUTD/OTDR - наоборот.
    Наоборот. INI/INIR/IND/INDR сначала читают из порта, потом декрементируют B,
    OUTI/OTIR/OUTD/OTDR сначала декрементируют B, потом выводят в порт.

    Этот пользователь поблагодарил Spectramine за это полезное сообщение:

    Ped7g(01.02.2022)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •