
Сообщение от
Andrey_K
Переполнение L увеличивает H, разве нет? А куда денется переполнение H?
Код:
xor c
xor l
ld c,a
add hl,hl
jr nc,decr_1
inc hl
decr_1
ммм?
уйдет во флаг С
Код:
имеем
C HL
0 10000000 0000000
add hl hl
C HL
1 00000000 0000000
jr nc....
inc hl
C HL
1 00000000 0000001
считаем скорость - заодно отсекаем дебаггеры и прочее
на самом деле
│INC HL │23 │- - - - - -│ 6│
не более 70000/6 = 12000
Код:
;Процедура установки прерываний для расксорки
l1fe6 di ;запрещение прерываний
pop hl ;берем адрес возврата в HL
ld a,#03 ;вкл. 3-ю страницу
rst #18
push af ;сохраняем номер предыдущей
ld bc,(#f9ff) ;берем старый вектор прерываний (I=#F9)
push bc ;сохраняем его
ld bc,l201c
ld (#f9ff),bc ;устанавливаем его на адрес #201C
push hl ;восстанавливаем адрес возврата
ld hl,#0001 ;HL=1
im 2 ;второй режим прерываний
ret ;возврат
l1fff call l1fe6 ;вызов процедуры установки прерываний
ei ;вкл. прерывания
halt ;ждем прихода прерывания
ld b,#14 ;пропускаем несколько тактов
l2006 djnz l2006
or a ;очищаем флаг C
ei ;вкл. прерывания (пропускаем еще 4 такта)
l200a inc hl ;в цикле увеличиваем HL на 1, пока не придет прерывание
jr nc,l200a
ld (#5f74),hl ;сохраняем HL по адресу #5F74
;Процедура восстановления старого режима прерываний
l2010 di ;запрещаем прерывания
im 1 ;устанавливаем 1-й режим
pop de ;берем из стека старый вектор прерывания
ld (#f9ff),de ;восстанавливаем его
pop af ;восстанавливаем страницу памяти
rst #18
ei ;прерывания вкл.
ret ;возврат
l201c scf ;обработчик прерываний для расксорки
ret ;он просто сигнализирует о приходе прерывания
;проверяем состояние портов
Код:
;Хитрая процедура, формирующая в HL неизвестное число
l201e call l1fe6 ;вызов процедуры установки прерываний
ld hl,#0001 ;HL=1
ei ;вкл. прерывания
halt ;ждем прерывания
nop ;пропуск 4 такта
l2027 dec de ;уменьшаем DE до тех пор, пока DE не станет равным 0
ld a,d
or e
jr nz,l2027
l202c in a,(#fe) ;читаем порт #FE
add a,a ;A=A+A
adc hl,hl ;HL=HL+HL+C
jr nc,l202c ;выполняем до тех пор, пока HL не переполнится
jr l2010 ;или не возникнет прерывание и возврат
l2035 pop hl ;в HL адрес возврата
ld e,(hl) ;E=#2E
inc hl
ld d,(hl) ;D=#03
inc hl
push de ;#032E в стек
ld e,(hl) ;E=#01
inc hl
ld d,(hl) ;D=#01
inc hl
ld c,(hl) ;C=#82
inc hl
ld b,(hl) ;B=#00
inc hl
ex (sp),hl ;адрес возврата в стек, HL=#032E
bit 4,(ix+#35) ;проверка бита 4 #5F40+#35=#5F75
jr z,l201e ;а это старший бит неизвестного слова в #5F74
ex de,hl ;если bit4(#5f74)!=0, то HL<>DE
push bc
call l201e ;вызов еще одной хитрой процедуры
pop bc
add hl,bc ;HL=HL+BC
ret ;возврат
короче набор программ критичных к железу
---------- Post added at 16:59 ---------- Previous post was at 16:58 ----------

Сообщение от
Andrey_K
Я читаю, но все схватить сразу не успеваю...
вот тут еще скачай и почитай
растактовка - влияние на флаги и тд
https://www.dropbox.com/s/bu9lbf0ns1...codes.a80?dl=0