Мне этот вопрос также не давал покоя. psndcj мне часть разъяснил
GM
Стабилизация эффектов на бордюре.
Если сделать
ORG 25000
EI
LD C,254
LD H,0
LD L,7
L1 HALT
LD DE,2000 : маленько задержим
L2 DEC DE
LD A,D
OR E
JR C,L2
OUT (C),L
OUT (C),H
LD A,127
IN A ,(254)
RRA
JR C,L1
RET
Почему эта полосочка на бодюре не стоит на месте а дергается, может IM 2 или как? Еще жмешь на клаву что-то меняется.
psndcj
потому что используется стандартный обработчик прерываний из ПЗУ - а там и кнопки опрашиваются и еще чтото делается... надо задавать табличку для своего обработчика и включать IM 2 типа так
di
ld hl,imtab:ld a,h,i,a
ld a,low int_jump
ld (hl),a:inc l:jr nz,$-2
inc h:ld (hl),a
ld l,h:ld (hl),#c3 //код команды JP #xxxx
ld de,ТВОЙ_ОБРАБОТЧИК
ld (hl),e:inc hl:ld (hl),d
im 2:ei
imtab - табличка 257 байт с ровного адреса (#xx00), inter - джампер на обработчик (младший и старший байты равны) - к примеру в наших демах используется #be00 и #bfbf соответственно.
а и важно - чтобы работало везде - надо ставить в памяти в пределах #8000-#bfff
GM
А IM 2 шагает сразу по INT или с задержкой?
psndcj
когда приходит прерывания процессор читает из адреса I*256+#ff (но на самом деле младший байт может плавать на многих клонах, для этого и делается табличка 257 байт) - и переходит на этот адрес. при этом выполняется предыдущая команда до конца - поэтому даже если если процесор выполнял HALT - наш обработчик будет работать сначала фрейма +0.3 такта... это как-то можно устранить программно - но тут уж я не помощник - помню в ZX-Ревю каком-то было полное описание работы бордюрных и мультиколорных эффектов.
GM
При включеном IM 2 (в обработчике RET) после halt на следующей команде эмулятор выдает от 19 до 22 тактов, сейчас пытаюсь устранить, тоже в ступоре.




Ответить с цитированием