Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Для начинающих (http://zx-pk.ru/forumdisplay.php?f=43)
-   -   Конвертнуть jpeg в формат zx screen. (http://zx-pk.ru/showthread.php?t=9908)

psndcj 6th April 2009 00:17

если в BC задавать количество повторов, то в конце цикла надо не DJNZ ставить, а DEC BC:LD A,B:OR C:JR NZ,....кудатамнадо.... в B просто максимум 256 повторов задать можно - то есть 5 секунд с небольшим (с HALT'ом в цикле)...

anarchyman 6th April 2009 00:28

Quote:

Originally Posted by Kurles (Post 193324)
не знаю, попробуй в строках, где нет меток, перед мнемониками пробелов наставить, ибо оригинальная версия sjasm'а не поддерживала компиляцию ассемблерных команд в начале строки, может твоя ситуация - это отголоски того времени. Ещё ошибка - где у тебя задается количество циклов в регистровой паре bc - надо, что бы кол-во циклов задавалось в регистре B. ld b,#10. Ещё: не нашёл у тебе метки newloop, которая в комманде djnz newloop используется, определи куда нибудь.

Отлично!
Исправил ошибку в ld b,#10
и добавил пробелы. Все компилируется и даже работает (почти :-))
После исполнения цикла, программа почему то сбрасывается, а не передает управление на следующую процедуру (newloop)

Как можно выяснить в чем причина?

Kurles 6th April 2009 00:30

Quote:

Originally Posted by anarchyman (Post 193327)
Отлично!
Исправил ошибку в ld b,#10
и добавил пробелы. Все компилируется и даже работает (почти :-))
После исполнения цикла, программа почему то сбрасывается, а не передает управление на следующую процедуру (newloop)

Как можно выяснить в чем причина?

Исходник в студию =)

anarchyman 6th April 2009 00:37

Quote:

Originally Posted by Kurles (Post 193328)
Исходник в студию =)

Ну где то так :-)

Code:

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


Kurles 6th April 2009 01:37

Quote:

Originally Posted by anarchyman (Post 193330)
Ну где то так :-)

у тебя главный цикл какой-то не правильный - call loop вызывает гурбо говоря саму себя, в следствии чего происходит переполнение стека и сброс. И djnz хрен знает куда прыгает. В теории вот так должно быть:

Code:

      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

если надо, что бы
Code:

      ld      ix,a1
      call    play
      ld      ix,a2
      call  play

тоже в этом же цикле выполнялись - переносишь вот этот
Code:

      ld        B,#10
mloop1
      push        bc

участок кода в начало перед первым halt.
дальше твой код пока не смотрел, виснет явно на этом участке.

и вот это:

Code:

hframeaddr
        defw    s1
        defw    s2

тоже в начале кода хранить не следует, перенеси в конец программы, что бы не путаться.


All times are GMT +4. The time now is 00:25.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.