если в BC задавать количество повторов, то в конце цикла надо не DJNZ ставить, а DEC BC:LD A,B:OR C:JR NZ,....кудатамнадо.... в B просто максимум 256 повторов задать можно - то есть 5 секунд с небольшим (с HALT'ом в цикле)...
Вид для печати
если в BC задавать количество повторов, то в конце цикла надо не DJNZ ставить, а DEC BC:LD A,B:OR C:JR NZ,....кудатамнадо.... в B просто максимум 256 повторов задать можно - то есть 5 секунд с небольшим (с HALT'ом в цикле)...
Ну где то так :-)
Код:hframeaddr
defw s1
defw s2
loop
halt
ld ix,a1
call play
ld ix,a2
call play
ld B,#10
push bc
call loop
pop bc
djnz aaa
ret
play
ld a,(ix+0)
dec a
jr nz,rret
ld l,(ix+2)
ld h,(ix+3)
ld e,(ix+4)
ld d,(ix+5)
ld c,8
play2
push bc
push de
rept 9
ldi
endm
pop de
pop bc
push hl
ld hl,32
add hl,de
ex de,hl
pop hl
dec c
jp nz,play2
ld a,(ix+1)
inc a
and 1
ld (ix+1),a
ld hl,hframeaddr
add a,a ; x2
ld d,0
ld e,a
add hl,de
ld e,(hl)
inc hl
ld d,(hl)
ld (ix+2),e
ld (ix+3),d
ld a,10
rret
ld (ix+0),a
ret
a1
defb 2
defb 0
defw s1
defw 22528+7+32*0
a2
defb 7
defb 1
defw s2
defw 22528+16+32*4
aaa ld hl,tablend
inc hl
xor a
or (hl)
jr nz,nenovaya
ld hl,tablichko
...
Продолжение процедуры aaa
у тебя главный цикл какой-то не правильный - call loop вызывает гурбо говоря саму себя, в следствии чего происходит переполнение стека и сброс. И djnz хрен знает куда прыгает. В теории вот так должно быть:
если надо, что быКод:halt
ld ix,a1
call play
ld ix,a2
call play
ld B,#10
mloop1
push bc
halt ; для синхронизации
call aaa ;или что ты тут собрался в цикле вызывать
pop bc
djnz mloop1
ret
тоже в этом же цикле выполнялись - переносишь вот этотКод:ld ix,a1
call play
ld ix,a2
call play
участок кода в начало перед первым halt.Код:ld B,#10
mloop1
push bc
дальше твой код пока не смотрел, виснет явно на этом участке.
и вот это:
тоже в начале кода хранить не следует, перенеси в конец программы, что бы не путаться.Код:hframeaddr
defw s1
defw s2