;генератор восстановителя:
;[объединить с генератором prsprscript, чтобы два раза не считать scr? но надо писать дальше по стеку!]
;надо как-то оптимизировать случаи, когда меньше 8 спрайтов?
;тайлы 8x16(y), всегда восстанавливаем 18 пикс (т.к. высота спрайта лежит неудобно)
;если чередовать столбцы: gfx,attr,gfx,attr,gfx, то можно сэкономить в генераторе на двукратном чтении тайлов, а в атрибутах на одном add hl,hl
;заодно кладём в стек оба тайла столбца за одну запись (+8t в восстановителе, -22t в генераторе)
;надо:
;push tile1_tile2 : push scr ;стиратель без атрибутов, на выходе считывает новый адрес стирателя
;push tile1_tile2 : push scr ;стиратель с атрибутами
;push tile1_tile2 : push scr ;стиратель с атрибутами
;push restorer (только один раз и именно тут)

	macro GENRESTK dx
;bc=scr
        ld a,c ;выиграли 8t в сумме ;ld (),de(в genprsprscript).......ld a,h...bit 2,l (вместо ld a,():rra:rra)... ld bc,0:ld a,c(вместо 29t)
        add a,a
        rla
        rla ;0bxxxxx0yy ;y5,y4 (y3 влияет только на restorer)
        rrca
        rrca ;0byyxxxxx0
        bit 3,b ;Y6
        jr z,$+3
        inc a
        rrca
        ld l,a ;0bYyyxxxxx
;51.5
        ld e,(hl)
        add a,32
        ld l,a
        ld d,(hl)
        push de ;tile1_tile2
        push bc ;scr
	if dx==-1
        dec c ;scr
        dec l ;tilemap
	else
        inc c ;scr
        inc l ;tilemap
	endif
;55
        ld d,(hl)
        add a,-32+dx ;т.к. был inc/dec l
        ld l,a
        ld e,(hl)
        push de ;tile1_tile2
        push bc ;scr
	if dx==-1
        dec c ;scr
        dec l ;tilemap
	else
        inc c ;scr
        inc l ;tilemap
	endif
;70-15
        ld e,(hl)
        add a,32+dx ;т.к. был inc/dec l
        ld l,a
        ld d,(hl)
        push de ;tile1_tile2
        push bc ;scr
        push ix ;restorer
;47+15
	endm

        macro GENRESCRIPT obj
         ld bc,(__)
;hx=restorer/256
;h=tilemap/256
        ld de,(obj+OBJ_X) ;d=y/2 ;e=x/2
;restorer = f(yphase) = f1(scryphase) (8 веток, в сумме порядка 400 байт) - читать из какой-то таблицы? или ветвление тут (больше 70t)? или красивая адресация + [jp] (<3*10t в восстановителе)? можно совместить с остатком сегментов prspr? но там всего 4 сегмента (нам надо 8), и не хватит места на все prhgt
;совместить входы (5-7 байт) с attr? а сам код в невыровненной памяти? но в attr подряд только 4 байта
;совместить входы (5-7 байт) с tilegfx? теряется один тайл из 64
;или оставить только одну yphase? лишний вывод 24 байта, много времени!!!
;все входы в одном сегменте? надо умножать на 8, зато можно не прибавлять
;слишком много кода на respr! оставить только 4 сегмента (0,4,8,12) и стирать по 20 строк? +32*3(gfx)+16*2(attr)-5(add a,restorer/256)-8(jp (ix))-3(ld lx) = +112t/спрайт
;или воткнуть в свободные места сегментов prspr? будет только +10t/спрайт (jp)
        ld a,d ;ld a,() = -11t
        and 7 ;yphase
	  ld d,a
         add a,a
          add a,d;a
         add a,a
        ;add a,restorer/256
        ld lx,a;hx,a ;restorer
;46+4
        bit 1,e ;x&4 ;ld a,():and = +12t
        jr z,1f;genrestore_x0 ;20
;genrestore_x4
	GENRESTK +1 ;слева направо (первый столбец без атрибутов, отрисуется он последним)
        jp 2f;genrestore_q ;эта ветка -5(nojr)+10(jp) = +5
1f;genrestore_x0
        inc c
        inc c ;эта ветка +8
	GENRESTK -1 ;справа налево
;(среднее по веткам = +6.5)
;=306+4t/спрайт
2;genrestore_q
_=_+OBJSIZE
__=__-6
	endm

;genrescript
;sp=script end
;        ld (genrescript_sp),sp
;        ld sp,hl
        
_=objects
__=sprscript_end-2
        ld hx,trespr/256
	ld h,tilemap/256
        ;jr $
;rescrpatch0=$+1
;        ld bc,0 ;scr (patch) ;10
        GENRESCRIPT _
;rescrpatch1=$+1
;        ld bc,0 ;scr (patch) ;10
        GENRESCRIPT _
;rescrpatch2=$+1
;        ld bc,0 ;scr (patch) ;10
        GENRESCRIPT _
;rescrpatch3=$+1
;        ld bc,0 ;scr (patch) ;10
        GENRESCRIPT _
;rescrpatch4=$+1
;        ld bc,0 ;scr (patch) ;10
        GENRESCRIPT _
;rescrpatch5=$+1
;        ld bc,0 ;scr (patch) ;10
        GENRESCRIPT _
;rescrpatch6=$+1
;        ld bc,0 ;scr (patch) ;10
        GENRESCRIPT _
;rescrpatch7=$+1
;        ld bc,0 ;scr (patch) ;10
        GENRESCRIPT _
;genrescript_sp=$+1
;        ld sp,0
;        ret
