Я уже запилил как было в первом посте, как понял где баг. Мне с DE выгоднее работать.
Я уже запилил как было в первом посте, как понял где баг. Мне с DE выгоднее работать.
drbars, ecли на четном адресе живет то можно один inc hl заменить на inc l
С уважением,
Jerri / Red Triangle.
Нет, я вот что не понимаю:
Произошло прерывание, надо снять адрес возврата со стека, и сохранить его на будущее. Так как там будет JP по адресу, со стека адрес надо снять, но не испортив регистров.
Адрес сохранен, регистры на своих местах, SP как был до прерывания.Код:EX DE,HL EX (SP),HL LD (SaveRET+1),HL EX DE,HL POP DE
А если вот так:
Меньше на 2 команды и быстрее на 8 тактов. Разве не то же самое делает?..Код:EX (SP),HL LD (SaveRET+1),HL POP HL
Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
Власть людей сильнее, чем люди у власти.
Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)
Скрытый текст
Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
Мы все немного режем по дереву, а потом собираем корабли в бутылках.
Is it the same old story you are going to tell me
or is it the old story telling me and you we are the same?
http://www.sky.od.ua/~ptsk[свернуть]
Во втором случае ты восстанавливаешь HL ведь. Этот регистр не очень удобен в работе. Процедура обработки прерывания позволяет восстанавливать только один из регистров во время снятия данных стеком.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Хм, я, наверное, не то курю, но на мой взгляд после обоих вариантов все регистры остаются на своих местах (кроме SP, который в обоих вариантах на 2 больше чем на входе, т.е. опять же такой, как был до сигнала прерывания). Поэтому, как кажется, неважно, что восстанавливать - главное, чтобы в итоге было восстановлен все. При то, что во втором варианте код короче и быстрее.
Почему один? EX (SP),HL сохраняет HL на стеке, POP HL его восстанавливает. DE и все остальное, кроме SP, не изменяются на всем протяжении, потому что потом идет PUSH всех, а в конце POP всех и прямой JP на адрес возврата. Там ничего не должно теряться в обоих вариантах.
Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
Власть людей сильнее, чем люди у власти.
Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)
Скрытый текст
Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
Мы все немного режем по дереву, а потом собираем корабли в бутылках.
Is it the same old story you are going to tell me
or is it the old story telling me and you we are the same?
http://www.sky.od.ua/~ptsk[свернуть]
TomCaT, ты абсолютно прав
но тема здесь немного другая
необходимо после восстановления адреса возврата и стека
восстановить испорченную память что мы и делаем обновляя ее DE у медноногова
и push reg у AlCo
Код:EX DE,HL EX (SP),HL LD (SaveRET+1),HL EX DE,HL POP DE LD (SaveSP+1),sp LD SP,STACK_IM2 CALL MAIN_ISR SaveSP LD SP,#0000 EI SaveRET JP #0000Код:ex (sp),hl ;забираем со стека адрес возврата ld (imret),hl ;сохраняем адрес возврата pop hl ;забираем hl ld (imstek),sp ;сохраняем стек push bc ;либо push de в зависимости от того каким регистром берем спрайты ld sp,int_sp call proc_int ld sp,$ imstek equ $-2 ei jp $ imret equ $-2
Последний раз редактировалось jerri; 11.12.2012 в 10:26.
С уважением,
Jerri / Red Triangle.
Вот же, обработчик по сути рассчитан на то, что в DE то же, что было в (SP-2) до прихода прерывания...
Все, понял, спасибо. Хитро-о, однако.
Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
Власть людей сильнее, чем люди у власти.
Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)
Скрытый текст
Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
Мы все немного режем по дереву, а потом собираем корабли в бутылках.
Is it the same old story you are going to tell me
or is it the old story telling me and you we are the same?
http://www.sky.od.ua/~ptsk[свернуть]
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)