Advertisement
vito-Z80

Fill algorithm

Feb 11th, 2020
903
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     ЗАЛИВКА АТРИБУТОВ
  3.     из начальной точки берем цвтет который будем заменять
  4.     начальная точка (адрес на экране атрибутов) сохраняется в стэк
  5.     АА - адрес атрибута
  6. loop
  7.     берем АА из стэка
  8.         если стек переполнен - выход (больше нет искомых)
  9.         если цвет АА является цветом заливки - берем следующий АА из стека (текущий АА не обрабатываем)
  10.         поиск заменяемого цвета по 4м сторонам с сохранением АА в стек если искомый цвет найден
  11.         loop
  12.  
  13.     залить "fill768.atr" близко к 100 000 тактам, глубина стэка близка к 256 байтам но не превышет.
  14.  
  15.     ???как то отлавливать не обрабатываемые адреса в стэке что бы не проверять их наличие в процессе заливки???
  16. */
  17.  
  18.     module sides
  19.     //  borders not checked
  20. stack       equ 49151
  21. run
  22.     ld (return+1),sp
  23.     ld sp,stack
  24.     ld hl,#5910     //  start point
  25.     ld de,32    //  line size
  26.     jp code
  27. return
  28.     ld sp,0
  29.     ret
  30. //---------------------------------
  31. code
  32.     ld c,#ff    //  C = fill color
  33.     ld b,(hl)   //  B = find color
  34.     push hl
  35. again
  36.     pause
  37. aga2
  38.     pop hl
  39.     ld a,h
  40.     cp high stack + 1
  41.     jp nc,return    //  stack is over
  42.     ld a,(hl)
  43.     cp c
  44.     jp z,aga2   //  does not need processing
  45.     ld a,b      //  find color
  46.     ld (hl),c   //  fill color
  47. left
  48.     dec hl
  49.     cp (hl)
  50.     jp nz,down
  51.     push hl
  52. down
  53.     inc hl
  54.     add hl,de
  55.     cp (hl)
  56.     jp nz,right
  57.     push hl
  58. right
  59.     inc hl
  60.     or a
  61.     sbc hl,de
  62.     cp (hl)
  63.     jp nz,up
  64.     push hl
  65. up
  66.     dec hl
  67.     or a
  68.     sbc hl,de
  69.     cp (hl)
  70.     jp nz,again
  71.     push hl
  72.     jp again
  73. //---------------------------------
  74.     endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement