![]() |
Ну в Радио имелось ввиду скорее всего другое - интерпретатор бэйсика( родной РОМ короче говоря) использует только ИМ1 а в игрушках очень часто юзают ИМ2 потому как на него вешают например обработку клавиатуры или проигрывание музыки на сопроцессоре. Тоесть любые переодические операции для которых не нужно максимальное быстродействие и не занимающие много тактов.
у ИМ2 адрес таблицы векторов грузится в регистр I . если на пальцах - при прерывании читается вектор прерывания с шины данных ( у большинства наших клонов там будет FF) младший бит вектора обнуляется автоматически( тоесть всегда равен нулю). и адрес куда прыгнуть обработчику чтобы взять вектор вычисляется Addr= (Register I * 256) + Vector from DATA bus. Вектор всегда только четное число. Начиная с (Register I * 256) идет таблица из 128и двухбайных адресов обработчика. чаще всего вся область забита или одним и тем же адресом или вообще используется только последний вектор. эти 2 байта кущего вектора - грузятся в регистр PC. или как он там на спеке назывался. и управление переходит по этому адресу. Выход из обработчика прерывания стандартный - RETI. Цитата из книжки :"Для перехода в режим ISR в режиме 2 требуется 19 тактовых периодов: 7 периодов для ввода 8ми разрядного вектора от прерывающего устройства,следующие 6 - для сохранения на стеке текущего состояния PC (адреса возврата) и еще 6 - для считывания стартового адреса ISR." |
IM2
IM2 (IMM2 неправильно, СЭР)
Картинка по Z-80 Может пригодиться ВАМ Lisitsin ---------- Post added at 20:39 ---------- Previous post was at 20:20 ---------- 2.Картинка по Z-80 IM2 3.Картинка по Z-80 IM2 И ещё по IM2 картинки |
Персональная благодарность
balu_dark, !!! Есть только один вопросец: какие биты регистра I идут в ход при обработке imm1? Насколько я понимаю, только 7? То есть старший равен 0? Спасибо !!! |
И ещё... Младший байт читается с ШД (шина данных) , а старший из регистра I
Младший байт всегда (8 резисторов подтягивающих ШД к +5 вольт) должен читаться 255 #FF %11111111 Это всё вцелом составляет вектор прерывания ---------- Post added at 20:49 ---------- Previous post was at 20:47 ---------- При IM 1 адрес физически фиксирован в самом Z-80 и независимо от I состовляет 56 #38 (IM0 тоже, как и IM1 режим) |
Quote:
---------- Post added at 21:21 ---------- Previous post was at 19:58 ---------- Сделал, но что-то не работает. ELITE при старте, не нарисовав крутящийся корабль, уходит в безвозвратный сбой, R-TYPE виснет в заставке. ROBOCOP зависает при загрузке с чёрным экраном. |
1 Attachment(s)
вот как собствнно дклаю обработку прерывания: (вложение)
|
Quote:
|
Quote:
|
Quote:
Quote:
---------- Post added at 01:13 ---------- Previous post was at 01:12 ---------- Quote:
|
Quote:
|
Ну вот эт другое дело .... Щас сделаю )))
---------- Post added at 22:31 ---------- Previous post was at 22:23 ---------- Пробовал с FF - то же самое. |
Quote:
у меня трассировка медленная - я втыкаюсь в клавиатурный порт и пишусь в текстовом редакторе. Могу запуститься по известному критерию и вывести содержимое нужных регистров, но не всю трассировку вывести. А как можно делать трассировкуиз эмуляторов? Есть ещё один момент: я не инициализирую I при включении питания и сбросе. Это плохо? |
Quote:
|
Quote:
а вот для нашего случая адрес берут из FF и (FF+1) Сорри что немного ввел в заблуждение. Короче не вдаваясь в лишние подробности для примера : LD A,#C0 LD I,A IM2 будет исполнятся примерно так : PUSH PC LD PC,(#C0FF) ( 256*RAM[#C100]+RAM[#C0FF]) |
Code:
IM_2: LDI ZL,0XFF ;Здесь обрабатывается IM2. В регистр косвенной адресации заношу:И посмотреть бы код LOAD_PC_Z[12]. |
1 Attachment(s)
Test-48 дает такой трейсинг :
|
Quote:
|
IM2
5 Attachment(s)
http://zx.pk.ru/attachment.php?attac...1&d=1322861299
http://zx.pk.ru/attachment.php?attac...1&d=1322861454 http://zx.pk.ru/attachment.php?attac...1&d=1322861467 http://zx.pk.ru/attachment.php?attac...1&d=1322862186 А вот ниже самое интересное:v2_dizzy_roll: http://zx.pk.ru/attachment.php?attac...1&d=1322862240 |
IM2
1 Attachment(s)
|
Ничего не понял. В одном месте читаю:
Команда RET I. Код - ED 4D. Эта команда аналогична команде RET (возврат после вызова подпрограммы), но выполняет двойную функцию: · возврат из подпрограммы, обслуживающей маскируемое прерывание; · разрешение маскированного прерывания (ведь во время работы обслуживающей программы оно запрещалось, иначе новое прерывание могло бы прервать обработку прерывания и т.д.). В другом: пользователь должен сам разрешать прерывания через EI, так как RETI этого не делает. Так как же на самом деле? |
EI - всегда делает программист
RETI - Специальная комманда для серии из Z-80 логики (для контроллера прерываний, которого НЕТ в ZX-Specrume и совместимых компьютеров) Можно писать в конце обработчика прерываний (для ZX) EI RET и/или EI RETI Одно и тоже! ---------- Post added at 02:15 ---------- Previous post was at 02:14 ---------- Просто по (это IMHO) команде RETI легко программисту определить конец обработчика прерываний (типа "этикет хорошего тона") |
EI - всегда САМИ ручками пишем в любом случае
---------- Post added at 02:18 ---------- Previous post was at 02:18 ---------- перед RET или RETI |
Quote:
символы N O находятся по адресу #5c00 и #5c08 соответственно при обработке im1 там портятся данные к тому же у тебя портятся данные во многих программах там где используется IY а правильно прерывания обрабатываются так по адресу регистрI*256+#ff берется адрес обработчика если I=#ff то данные берутся из #ffff и #0000 статус прерываний сохраняется гдето и по команде RETI восстанавливается так было в мануале, но у меня оно не работало |
Короче, пока не работает, разбираюсь ...
|
если в робокопе портятся буквы то у тебя получается продолжает (не запрещается) работать подпрограмма по im1 - она-то и портит данные (в случае с робокопом - шрифт)
|
goodboy, да просто вместо им2 работает им1
Lisitsin, попробуй запустить игру Zynaps она у тебя не должна заработать сейчас |
|
это что вы реализовали? корректное im1?
|
Короче сделал корректно im2. Сначала вектор читал сразу два байта, без проверок озу/пзу, и оно глючно было. Сделал перед чтением каждого байта проверку - и ему понравилось )))
|
1 Attachment(s)
Сборщикам:
|
не могу не спросить планы на цвет, звук(ay на avr уже реализовали недавно буквально), массовое производство
|
Quote:
http://dl.dropbox.com/u/12408899/CVB...PE%20COLOR.zip |
Quote:
|
Quote:
|
и дисковод прикрутится постепенно. для начала надо базовый блок сделать, потом 128, потом tr-dos...
|
Запустился тест floatspy:
http://dl.dropbox.com/u/12408899/CVB...20floatspy.zip Кто-нибудь может объяснить что это значит? |
Это тест так называемого порта FF, точнее порта атрибутов.
Скорее даже местоположение инта тестируется, но с помощью порта FF. В первой строке цветные квадратики рисуются с атрибутами от 40h до 5Fh, а потом считывается состояние порта FF и считается количество тактов после инта и до вывода этих атрибутов в первой строке. И если в компе реализован порт FF, то зная количество тактов от инта, до вывода первого атрибута 64 (40h), можно проверить на месте ли находится сигнал инт. Если нет, то можео листать кнопками Q и A и найти через сколько тактов выводятся эти атрибуты. В общем вот в этой ветке все расписано по тестам. |
Люди добрые, подскажите, а то я не очень в игрушках ориентируюсь: какие погонять в качестве теста? И какие есть ещё тестовые программы для эмуляторов кроме z80tests, zexall, floatspy?
Спасибо !!! |
Quote:
http://zx.pk.ru/showpost.php?p=421104&postcount=167 http://zx.pk.ru/showthread.php?p=283577#post283577 http://www.worldofspectrum.org/faq/r...kreference.htm |
Со звуком
http://dl.dropbox.com/u/12408899/CVB...OLOR_SOUND.zip Тесты сейчас погоняю ... ---------- Post added at 12:16 ---------- Previous post was at 11:21 ---------- Погонял: http://dl.dropbox.com/u/12408899/tests.zip |
| All times are GMT +4. The time now is 16:59. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.