пока вы будете узнавать какая строка - она скорее всего закончится )
Вид для печати
пока вы будете узнавать какая строка - она скорее всего закончится )
Т.е. тебе нужно ждать нужное кол-во тактов?Так бы стразу и сказал :)
ld bc,нужное число тактов
call DELAY;ждёт нужно число тактов из bc>141такта
Код:
; Z80 delay routine
; by Jan Bobrowski, license GPL, LGPL
DELAY: ; wait bc T (including call; bc>=141)
; destroys: af, bc, hl
ld hl, -141
add hl, bc
ld bc, -23
_loop add hl, bc
jr c, _loop
ld a, l
add a, 15
jr nc, _g0
cp 8
jr c, _g1
or 0
_g0 inc hl
_g1 rra
jr c, _b0
nop
_b0 rra
jr nc, _b1
or 0
_b1 rra
ret nc
ret
в EmuZwin
при запрещенных прерываниях
можно поймать начало фрейма при помощи ;)
но срабатывает не всегдаКод:ld a,r
jp pe,vsync_hit
ld a,r
jp pe,vsync_hit
ld a,r
jp pe,vsync_hit
...
тк сам интервал детекции начала фрейма
видимо может проскочить между командами
но усердное курение доков
и отсутствие этого в других эмуляторах
говорит нам, что это просто бага эмузвина
проще определить факт прерывания исполнения кода обработчиком прерываний.
или то что прога запущенна в эмузвине :v2_dizzy_roll:
Что-то тут не так. Есть известный баг Z80, но он работает с точностью до наоборот - при _разрешенных_ прерываниях в момент прихода импульса прерывания команда LD A,R выставляет флаг P/O в 0 (PO) (как будто они запрещены). Вот тут про это подробно: http://ivr.webzone.ru/articles/ldar_new/ .
Баг есть баг, по вышеприведенной ссылке у автора программа время от времени из-за него висла. Возможно, кстати, что и не исправили. Тут вот люди не уверены, что исправлено.
А out (c),0 не документирована, исправлять там нечего. Поменялось поведение, и всё.
этот "баг" уровня недокументированной фичи
и элементарно обходится
и нужно достаточно постараться чтобы из за него все повисло...
(и вообще делать такую операцию без двойной проверки...
...ну я бы не стал...
мало ли где один бит сам по себе появится\исчезнет...
тем более когда время выполнения не критично...)
а вот от потери out C,0
легко перестают работать правильно кучи софтов...
а просто так его обойти без потери производительности уже нельзя...
- - - Добавлено - - -
но чавота про всякие iff-ы
я узнал из всяких статей с названиями недокументированный возможности...
...хотя в статье выше упоминается что в оригинальной ранней документации данная возможность описывалась
- - - Добавлено - - -
ВНЕЗАПНО нашел для себя новую недокументированную команду IM ?
Да фича-то достаточно бесполезная, как бы. Со включенными прерываниями словить начало кадра и так ума много не надо. А вот баг неприятный, ибо не все о нём знают.
Это да. А вот нефиг недокументированные команды юзать, дабы ибо.Цитата:
а вот от потери out C,0
легко перестают работать правильно кучи софтов...
а просто так его обойти без потери производительности уже нельзя...
Да опять же - где ж там возможность, когда баг. Что мешает в обработчике свой флаг выставить, а вне обработчика его проверять, вместо того, чтобы ерундой страдать.Цитата:
но чавота про всякие iff-ы
я узнал из всяких статей с названиями недокументированный возможности...
...хотя в статье выше упоминается что в оригинальной ранней документации данная возможность описывалась
Там сворее всего дублирование IM 0 или IM 1, но проверять всем лень.Цитата:
ВНЕЗАПНО нашел для себя новую недокументированную команду IM ?
прерывания, нюансы. я для PMD-85 делал так:
Код:w:
ld a,(flg)
or a
jp nz,w
xor a
ld (flg),a
;vector
intvec:
push af
ld a,0
ld (flg),a
pop af
ret
flg: db 0