Регистрация | Последние сообщения | Персональный список | Поиск | Настройка конференции | Личные данные | Правила конференции | Список участников | Top 64 | Статистика раздела | faq | Что нового v.2.3 | Чат
Skunk Forum - Техника, Наука, Общество » Форум разработчиков РЭА »
Z80_INT

Версия для печати (настроить)

Новая тема | Написать ответ

Подписаться

Автор Тема:   Z80_INT
Com
unregistered
написано 09 Июня 2002 22:30  ПравкаОтветитьIP

Может быть кто-нибудь помнит навскидку,
какие подводные камни z80 в прерываниях
режим IM1.
Спасибо.

forrest
Member

Сообщений: 104
Откуда: Россия, Москва
Регистрация: Январь 2002

написано 10 Июня 2002 05:36ИнфоПравкаОтветитьIP

А что конкретно тебя интересует и почему именно IM1, а не IM0 или IM2 ?

Com
unregistered
написано 10 Июня 2002 20:24  ПравкаОтветитьIP

IM1 по причине минимальной аппаратной и программной
конфигурации,а проблемы с сохранением регистров.forrest

forrest
Member

Сообщений: 108
Откуда: Россия, Москва
Регистрация: Январь 2002

написано 11 Июня 2002 11:20ИнфоПравкаОтветитьIP

В режиме IM1 вектор прерывания указывать не надо, так как он игнорируется, а запуск процедуры прерывания происходит по фиксированному адресу 0056h (в ПК ZX-Spectrum по этому адресу в ПЗУ находился обработчик прерывания для считывания данных с клавиатуры). По завершению процедуры обработчика прерываний нужно установить команду RETI (код EDh,4Dh) она не влияет на флаги и её действие аналогично команде RET, то есть происходит возврат из стека адреса входа (счётчика адреса программы - регистр PC) и соответственно увеличение регистра указателя стека SP на 2. Внутри самой процедуры обработчика прерывания нужно при входе сохранить (например командами PUSH) те регистры, которые планируется изменять, а перед выходом восстановить их значения (например командами POP). Есть так же вариант перейти в обработчике прерывания к альтернативному набору регистров командой EXX (код D9h), при выходе перед RETI нужно вернуться к прежнему набору регистров, то есть опять поставить EXX. Вообще всё зависит от поставленной задачи (критично или нет состояние флагов и т.п.), но в любом случае если это возможно, то использование EXX более предпочтительно, так как нужна всего одна команда, вместо нескольких команд PUSH и время её выполнения всего 4 такта. Нужно так же при этом помнить, что переход к альтернативному набору командой EXX возможен только для регистров HL, BC и DE. Для работы с регистром AF нужно использовать команду EX AF,AF' (код 08h). У индексных регистров IX IY и у указателя стека SP альтернативного набора нет.

Com
unregistered
написано 11 Июня 2002 22:07  ПравкаОтветитьIP

forrest
Спасибо.

forrest
Member

Сообщений: 109
Откуда: Россия, Москва
Регистрация: Январь 2002

написано 12 Июня 2002 07:35ИнфоПравкаОтветитьIP

Com
Вообще на ассемблере для Z80 я уже не работал без малого лет 10 как. После того как появилась возможность работать на 80286 первое, что стал делать - эмулятор Z80, собственно с того времени больше с самим Z80 не сталкивался, но кое что помню, поэтому если ещё что будет надо, то постараюсь ответить.

Ваш ответ:

Коды форума
Смайлики


Ник:    Пароль       
Отключить смайлики

Все время MSK

Склеить | Разбить | Закрыть | Переместить | Удалить

Новая тема | Написать ответ
Последние сообщения         
Перейти к:

Свяжитесь с нами | skunksworks.net

Copyright © skunksworks.net, 2000-2018

Разработка и техническая поддержка: skunksworks.net


Рейтинг@Mail.ru Яндекс.Метрика