; deleted more comments  /DA


ToName  LD HL,FILE_NAME
        LD BC,8
        LDIR
        LD A,FormExt
      jr jpgui_


;NEW_XY  DW #FFFF
;OLD_XY  DW #FFFF

TAB_JP
         push af          ; теперь сохраняем A на входе /DA
         call TAB_HL
         pop af
JPHL
JP_HL   jp (HL)

Window_ LD A,Window
        jr jpgui_

EDIT_   LD A,EDIT
       jr jpgui_

Win_PU  call POPUP
Win_    LD A,Win
         jr PushGUI

Winn_   LD A,Winn
         jr PushGUI

NOKEY_  LD A,NOKEY
         jr PushGUI

WAITKEY_ LD A,WAITKEY
          jr PushGUI

ARW_SCN_ LD A,ARW_SCN
           jr PushGUI

DOS_FUNC_ LD A,DOS_FUNC
jpgui_   JP GUI

DIRSCN_ LD A,DIRSCN
         jr PushGUI

BREAK   LD A,BUTTON
         jr PushGUI

GET_MSG_ EX AF,AF'
         LD A,GET_MSG
         jr PushGUI

EdHex_     ex af,af'
           ld a,EdHex
;          jr PushGUI
;GET_HEXa_  ex af,af'
;           ld a,GET_HEXa
PushGUI    push hl,de,bc
           call GUI
           pop bc,de,hl
          ret

NoKEYss_   ld a,NoKEYss
          jr PushGUI

STOP_ARW_ LD A,STOP_ARW
       ; JP GUI
       jr PushGUI

; ARW_DEFAULT_   ; ld a,ARW_DEFAULT  ; уже присутствует в 'ResGUI.asm'
;             ; jr PushGUI

LOAD_CAT_  EQU  RetCURRENTDISK.ldcat


Win_YRMB  push af            ; Вызывает 'Win_' с обработкой fire2 и выключает обработку при выходе из окна           /DA
        ; ld a,ArrCancel_Y   ; Call  'Win_' with processing the right mouse button and turns off the processing when you exit the window
        ; call GUI
          call SV_ADEF.arr  ; вместо => ld a,ArrCancel_Y : call GUI
          pop af
         call Win_
          push af
         ld a,Fire2Cancel_N   ; ArrCancel_N
         call GUI
          pop af
         ret

;RAMKA_  LD A,RAMKA       ; теперь RAMKA_ в файле 'Selectbox.asm'



;Get_NumC0_  ld c,0
;GET_NUM_
;        EX AF,AF'
;        LD A,GET_NUM
;       ; JP GUI
;       jr PushGUI

tag_LCMP5  DB "LCMP5"                    ; /DA v 3.12
IDBLC    ld de,tag_LCMP5  ; вместо того что было в 'ScrAdd1.asm'
         ld b,5
STR_CMP   ; сравнение строк из DE и HL длиной B , результат fz если равно, fnz - неравно
         ld a,(de)
         cp (hl)
        ret nz
         inc de
         inc hl
        djnz STR_CMP
        ret

;; Редактор имени файла   ; Oldest, New version for v3.12 added to 'Disk1.asm' /DA


CLOSE_   PUSH AF
.nps_    CALL CLOSE
         POP AF
         RET

CLOSENK_ call CLOSE_
NOKEYa_  push af
         call NOKEY_
         pop af
        ret

LdLastKey  ld a,(LAST_KEY)
           push af
           xor a
           ld (LAST_KEY),a
           pop af
          ret


; Вызов файлера в соответствии с Настройками (перечитка диска)
;
; HL - адрес таблицы сортировки

FilerE  LD (TAB_SORT),HL
.St     LD A,(ReRead)
        AND A
        JR NZ,Filerr
         call LOAD_CAT_
        RET C
        XOR A
filere  EX AF,AF'
        LD A,Filer
        CALL GUI
.ret   jp CLOSE_      ; теперь меняем на ret для блокировки закрытия в FilerCOM /DA

Filerr  SCF
        JR filere


; FilerCOM removed, it replace in DiskSRV.asm  /DA

; Вызов файлера с обработкой флаги не выставляет /добавил для мини командера /DA
;
; HL - адрес таблицы сортировки, DE - адрес обработчика
; обработчик должен заканчиваться ret

                            ; из файлера, поскольку из страницы не читает кнопки /DA
;BUTTONF DB 1,3,2,1,7*8,%11
;COLB    EQU $-2
;         DW DSK_AS
;        DB 3,3,2,1,7*8,%11
;         DW DSK_BS
;        DB 5,3,2,1,7*8,%11
;         DW DSK_CS
;        DB 7,3,2,1,7*8,%11
;         DW DSK_DS
;        DB 9,3,2,1,7*8,%11
;         DW DSK_ES
;        DB #FF

BUTTONF   DB 96+5,64+1,128+3,128+2,1,7*8,%11    ; new format on v 4.0
           DW DSK_AS
          DB 5*8
COLB      DB 0   ; A
           DW DSK_BS,DSK_CS,DSK_DS,DSK_ES

          DB #FF



; Процедуры работы с памятью 128K. Перенёс в 'ResGUI.asm'   /DA v3.12



; Перенос системной информации в заголовок
; HL <- адрес информации
;
FromName LD DE,FILE_PARAM
         LD BC,11
         LDIR
         RET


RASCH        ld l,d
.e             ld h,e
            jr ADRHL8
RASCH_       ld h,d
             ld l,e
ADRHL8       ld a,h     ; HL -координаты знакоместа /DA
.a           rrca
             rrca
             rrca
             and #E0
             or l
             ld l,a
             ld a,h
             and #18
rasch        or #40
             ld h,a
            ret


RASCHA     ld h,d
           ld l,e
          jr ADRHL8A
RASCHA_    ld h,e
           ld l,d
ADRHL8A    ld a,h   ; HL -координаты знакоместа /DA
           rrca
           rrca
           rrca
           and #E0
           or l
           ld l,a
           ld a,h
           and #18
           rrca
           rrca
           rrca
           or #58
           ld h,a
          ret


INC_YY  LD A,H
        ADD A,7
        LD H,A
DOWN_HL
INC_Y   INC H
.n_     LD A,H
        AND 7
        RET NZ
.nL_    LD A,L
        ADD A,32
        LD L,A
        RET C
        LD A,H
        SUB 8
        LD H,A
        RET


DEC_YY  CALL DEC_Y
        LD A,H
        SUB 7
        LD H,A
        RET

DEC_Y   DEC H
        LD A,H
        CPL
        AND 7
        RET NZ
        LD A,L
        SUB 32
        LD L,A
        RET C
        LD A,H
        ADD A,8
        LD H,A
        RET



ADRpixTOcol  ld a,h   ; получаем из адреса пикселя адрес атрибута
             rrca
             rrca
             rl h     ; для сохранения 7-го бита
             rra
             and #83
             or #58
             ld h,a
            ret       ; OUT: hl = attr. addres  &  a = h

; Вываливающийся "список"
; IX <- адрес материнского окна
; HL <- адрес дочернего окна ("списка")

PupMnu  CALL pupmnu
        jp  Win_
    ;CALL Win_
        ;RET

pupmnu  LD A,(IX+2)
        SRL A
        ADD A,(IX+0)
        PUSH HL
        POP IX
        LD B,(IX+2)
        SRL B
        SUB B
        LD (IX+0),A
        LD A,(ARW_YC)
        INC A
        LD (IX+1),A
   ;     jp  popup

popup   LD E,(IX+0)         ; Вываливающиеся меню
        LD D,(IX+1)
        JR popup_

POPUPdr  ; вываливается только при перерисовке окна
        bit 1,(ix+6)
       ret z
POPUP   LD DE,(ARW_XC)     ; не меняет B и C
         inc d        ; чтоб окно открывалось не на линии стрелки /DA
;popup_  LD A,(IX+2)
popup_  push af
          ld a,e
          dec a
         jr nc,1F
          xor a
1
        LD A,(IX+2)
        ADD A,E
        CP 31+2
        JR C,pox
;        LD A,32
        ld a,e
        SUB (IX+2)
        jr nc,1F
        xor a
1
        LD E,A
pox     LD (IX+0),E
        LD A,(IX+3)
        ADD A,D
        CP 23+2
        JR C,poy
;        LD A,24
         dec d     ; восстановление /DA
        ld a,d
        SUB (IX+3)
        jr nc,1F
        xor a
1
        LD D,A
poy     LD (IX+1),D
        pop af
        RET

;------------
; DE - адрес нового курсора
;
;
SV_ARW  PUSH AF
        LD HL,(ARW_ADR)
        LD (arw_adr),HL
         ld hl,(ARW_XDISP)    ; сохраняем смещения /DA
         ld (LD_ARW.disp),hl
        LD (ARW_ADR),DE
        POP AF
        RET

LD_ARW  PUSH AF
         ld hl,0              ; Восстанавливаем смещения /DA
.disp  EQU $-2
         ld (ARW_XDISP),hl
        LD HL,0
arw_adr  EQU $-2
        LD (ARW_ADR),HL
        POP AF
        RET

SV_ADEF   call EXL_ARW          ; Стандартный курсор с сохранением предыдущего и cancel по ПКМ ; /DA v3.12
          ld de,ARWSPR
          call SV_ARW
          ld hl,(ARW_SDISP)
          ld (ARW_XDISP),hl
.arr    ;  ld a,Fire2Cancel_Y  ; ArrCancel_Y     ; cancel yes  SV_ADEF.arr
        ; jp GUI
          call guiRAM
          ld a,#37  ; [ scf ]
          ld (brk.SetRes_scf),a
         jp Fire2Cancel_Y_

LD_ADEF   call LD_ARW          ; восстановление после стандартного с сохранением ; /DA v3.12
EXL_ARW   push af
          ld hl,(LD_ARW.disp)  ; Обмен 4-х байтов восстановления курсора для SV_ADEF
          ld de,0
.disp    EQU $-2
          ld (.disp),hl
          ld (LD_ARW.disp),de
          ld hl,(arw_adr)
          ld de,0
.arw_adr EQU $-2
          ld (.arw_adr),hl
          ld (arw_adr),de
          pop af
         ret


; Попал ли курсор в окно
;
; HL  - координаты окна
; DE  - координаты курсора Y,X
; BC  - длина, высота окна
;
; SCF - не попал

InBox   LD A,H
        INC E
        CP E
        CCF
        RET C
        ADD A,B
        CP E
        RET C
        LD A,L
        INC D
        CP D
        CCF
        RET C
        ADD A,C
        CP D
        RET


; Пересчет коорднат относительно окна
; DE - координаты в окне  D - x , E - y

RealWin  push af
         LD A,(IX+0)
         ADD A,D
         LD D,A
         LD A,(IX+1)
         ADD A,E
         LD E,A
         pop af
        RET

; Очистка внутренней области окна [IX] - параметры текущего окна         ; /DA v3.12
; DE - координаты в окне:  D - x , E - y ; BC - размер:  B - sx , C - sy

CleanWS   call CLSVV_
          ld a,(ix+4)

; установка цвета области в окне ; [IX] - параметры текущего окна
; in  a= color, e = y , d = x , b = sx , c = sy
SetV
SetAtrW  ; ld l,a
         push de
         call RealWin
         call SetV_
         pop de
        ret
SetAtr_gui
SetV_                       ; установка цв. области in  a= color, e = y , d = x , b = sx , c = sy
         push af
         ld a,e
         ld e,d
         ld d,a
         pop af
SetAtr   ld (setv.tocol+1),a ; установка цв. области in a = color, e = x , d = y , b = sx , c = sy
         push hl
         ld hl,setv.tocol
         push af,de,bc
         call SETV.prc
        jp SETV.pop   ; SETV.prc

; Инверсия пикселей области экрана : D - x , E - y ; B - sx , C - sy  ; /DA v3.12
InvertPix     push af
              ld a,#2F  ; [ cpl ]        ; инверсия окна
             jr md_pix

; Очистка пикселей области экрана : D - x , E - y ; B - sx , C - sy  ; /DA v3.12
CleanPix      push af
              ld a,#AF  ; [ xor a ]      ; очистка окна
md_pix        push de,bc
.c            ld (md_pix_),a
              push hl
              call RASCH
              ld a,b
              ld (.b_),a
              ld a,c
              add a,a
              add a,a
              add a,a
              ld c,a
1             ld b,1
.b_    EQU $-1
              ld d,l
2               ld a,(hl)
md_pix_         xor a        ; [xor a] - for clean or [cpl] - for invert
                ld (hl),a
                inc l
               djnz 2B
               ld l,d
               call INC_Y
              dec c
             jr nz,1B
              pop hl,bc,de
              pop af
             ret

; инверсия окна: [ix] - window
INV         push af
            ld a,#2F  ; [ cpl ]
           jr 1F

; очистка окна: [ix] - window
CLSVV       push af
            ld a,#AF  ; [ xor a ]
1           push de,bc
            ld d,(ix+0)
            ld e,(ix+1)
            ld b,(ix+2)
            ld c,(ix+3)
           jr md_pix.c

; Инверсия пикселей области окна : [ix] - window , D - x , E - y ; B - sx , C - sy   ;
INV_        push af
            ld a,#2F  ; [ cpl ]
           jr 1F

; Очистка пикселей области окна : [ix] - window , D - x , E - y ; B - sx , C - sy   ;
CLSVV_      push af
            ld a,#AF  ; [ xor a ]
1           push de,bc
            call RealWin
           jr md_pix.c


Driver  LD A,(#5D19)
        CALL driver
        RET C
.set    EX AF,AF'
        LD C,1
        CALL DOS_FUNC_
        RET C
      ;  LD A,LOAD_CAT
      ;  CALL GUI
         call LOAD_CAT_
        RET C
        XOR A
        RET

driver ; LD HL,BCOL

      ;  ld b,5
      ;  call SetBPap
        ld (BCOL),a

        LD IX,WDriver
        CALL POPUP
        LD A,%00001000
        LD (IX+6),A
        CALL GETBLK
        CALL Win_
        CALL CLOSE_
        CP #FF
        ;JR Z,scf
        ;SCF
        CCF
        RET
scf     SCF
        RET


WDriver DEFB 0,0,2,5,7*8,7,%00001000
; Bit 0 - окно с заголовком/без
; Bit 1 - "перерисовать" окно да/нет
; Bit 2 - тискать окно по экрану да/нет
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL)
        DEFB 0
     ;   DEFW Nil          ; объект-текст
     ;   DEFW Nil          ; объект-подсветка (выборка)
        DW 2          ; пропуск 2-х адресов
        DEFW HDriver      ; горячие клавиши
        DEFW BDriver      ; объект-кнопки (выборка)
        DEFW #FFFF

HDriver DB 0,"1"
         DW 0
        DB 0,"2"
         DW 1
        DB 0,"3"
         DW 2
        DB 0,"4"
         DW 3
        DB 0,"5"
         DW 4
        DB #FF

;BDriver DEFB 0,0,2,1,7*8,%11
;BCOL    EQU $-2
;         DW DSK_AS               ; DEFW SpDrive
;        DEFB 0,1,2,1,7*8,%11
;         DW DSK_BS               ; DEFW SpDrive+16
;        DEFB 0,2,2,1,7*8,%11
;         DW DSK_CS               ; DEFW SpDrive+32
;        DEFB 0,3,2,1,7*8,%11
;         DW DSK_DS               ; DEFW SpDrive+48
;        DEFB 0,4,2,1,7*8,%11
;         DW DSK_ES               ; DEFW SpDrive+64
;        DB #FF

BDriver  DB 96+5,128+0,128+0,128+2,1,7*8,%11
          DW DSK_AS
         DB 5*8
BCOL     DB 0
          DW DSK_BS,DSK_CS,DSK_DS,DSK_ES

         DB #FF

;---- Выборка рамочкой 8x8
; XOR A - перемещение рамки
; SCF   - выбор размера рамки

R1Sel   CALL ToIx8
        CALL NOKEY_
      ;  LD DE,WinCur
      ;  CALL SV_ARW
         call SetPixCUR
        PUSH IX
      ;  LD HL,Ret
         ld hl,MiniLoupe4000_   ; MiniLoupeScr   ; MiniLoupeHK
        CALL ARW_SCN_
        POP IX
        CALL LD_ARW
        RET C
        PUSH IX
        LD IX,Ix8
        LD HL,(ARW_X)
        LD (IX+0),L
        LD (IX+1),H
        SCF
        CALL Ramka1
        POP IX
        RET C
       jr 1F

R8Sel   PUSH IX
        CALL ToIx8
        LD IX,Ix8
        LD A,1
        LD (IX+2),A
        LD (IX+3),A
        DEC A
        CALL Ramka8
        POP IX
        RET C
        PUSH IX
        LD IX,Ix8
        SCF
        CALL Ramka8
        POP IX
        RET C
1       PUSH IX
        POP DE
        LD HL,Ix8
.ldir4  LD BC,4    ; 2
        LDIR
        RET

ToIx8   PUSH IX
        POP HL
        LD DE,Ix8
       jr R8Sel.ldir4   ; 2B



SetPixCUR   ld de,WinCur    ; /DA v 3.12
            call SV_ARW
            ld hl,WinCurDISP
            ld (ARW_XDISP),hl
           ret

Ix8     DS 4


PixHL   LD A,D            ; in D = pixel y , E = pixel x : out HL = Address ; error -> hl=0, set fc
        cp 192
       jp nc,1F
        RRA
        SCF
        RRA
        RRA
        AND #5F
        LD H,A
        XOR E
        AND #07
        XOR E
        RRCA
        RRCA
        RRCA
        LD L,A
        LD A,D
        XOR H
        AND #07
        XOR H
        LD H,A
        RET
1        ld hl,0   ; ошибка
         scf
        ret

PixHL_e ld a,d    ; для GUI
        ld d,e
        ld e,a
        call PixHL
        ld a,d
        ld d,e
        ld e,a
       ret

PixHLaM   ; in D = pixel y , E = pixel x : out HL = Address , A = mask pixel
                ld a,e
                and 7
                inc a
                ld h,a
                ld a,1
1               rrca
                dec h
               jr nz,1B
                push af
                call PixHL
                pop af
               ret
;----------------------------
; Заполнить окно атрибутом
; (IX) аналогично LoadWA , DE игнорируется и сохраняется
; A  <- color attribute

SetWA
setv     push hl
         ld (.tocol+1),a
         ld hl,.tocol
        jr SETV.ph

.tocol   ld (hl),0
        ret

SETV    push hl
        ld hl,.tomix
.ph     push af,de,bc
        call .win
.pop    pop bc,de,af,hl
       ret
.win    ld e,(ix+0)
        ld d,(ix+1)
        ld b,(ix+2)
        ld c,(ix+3)
.prc    ld (.proc_),hl
.set_   ld l,d
        ld h,0
        add hl,hl
        add hl,hl
        add hl,hl
        add hl,hl
        add hl,hl   ; *32
        ld a,#58
        add a,h
        ld h,a
        ld a,e
        cp 32
       ret nc
        or l
        ld l,a      ; hl - addres
        ld a,32
        sub e
        cp b
       jr nc,1F
        ld b,a
1       ld a,h
        cp #5B
       ret nc
        push bc
        push hl
2       call .tomix
.proc_ EQU $-2
        inc l
       djnz 2B
        pop hl
        ld bc,#20
        add hl,bc
        pop bc
        dec c
       jr nz,1B
        ret

.tomix  ld a,(hl)
        call MIXCOL
        ld (hl),a
       ret




INC_YD
        ex de,hl
        call INC_Y
        ex de,hl
       ret

DEC_YD
        ex de,hl
        call DEC_Y
        ex de,hl
       ret
;------------------------
;...
; Запомнить окно (screen)
;...
; (IX) - X,Y,WIDTH,HIGH
; DE   - АДРЕС В ПАМЯТИ
;...
; SaveWS  PUSH DE
SaveWS   push af
         push hl
         push bc
        push de
        LD D,(IX+0)
        LD E,(IX+1)
        CALL RASCH
        POP DE
        LD A,(IX+3)
        ADD A,A
        ADD A,A
        ADD A,A
        LD B,A
dn22    PUSH BC
        LD B,(IX+2)
        PUSH HL
dn11    LD A,(HL)
        LD (DE),A
        INC HL
        INC DE
        DJNZ dn11
        POP HL
        CALL INC_Y
        POP BC
        DJNZ dn22
       jr eSWA_    ; /DA
    ;    RET

; Запомнить окно (attribute)
;...
; (IX) - X,Y,WIDTH,HIGH
; DE   - АДРЕС В ПАМЯТИ
;...
;SaveWA  PUSH DE
SaveWA   push af
         push hl
         push bc
        push de
        LD D,(IX+1)
        LD E,(IX+0)
        CALL RASCHA
        POP DE
        LD B,(IX+3)
Ck4     PUSH BC
        PUSH HL
        LD B,(IX+2)
Ck3     LD A,(HL)
        LD (DE),A
        INC HL
        INC DE
        DJNZ Ck3
        POP HL
        PUSH DE
        LD DE,32
        ADD HL,DE
        POP DE
        POP BC
        DJNZ Ck4
eSWA_    pop bc
         pop hl
         pop af
        RET

; Восстановить окно (screen)
;...
; (IX) - X,Y,WIDTH,HIGH
; DE   - АДРЕС В ПАМЯТИ
;...
LoadWS   push af   ; сохраняем регистры /DA
         push hl
         push bc
         call 1F
        jr eSWA_
1   ; LoadWS  PUSH DE
        push de
        LD E,(IX+1)
        LD D,(IX+0)
        CALL RASCH
        POP DE
        LD A,(IX+3)
        ADD A,A
        ADD A,A
        ADD A,A
        LD B,A
Ck6     PUSH BC
        PUSH HL
        LD B,(IX+2)
Ck5     LD A,H
        CP #58
        JP NC,Exs
        LD A,(DE)
MethodW NOP
        LD (HL),A
        INC HL
        LD A,#1F
        AND L
        JR Z,Gran1
        INC DE
        DJNZ Ck5
This3   POP HL
        CALL INC_Y
        POP BC
        DJNZ Ck6
        RET

; Восстановить окно (attribute)
;...
; (IX) - X,Y,WIDTH,HIGH
; DE   - АДРЕС В ПАМЯТИ
;...
LoadWA   push af   ; сохраняем регистры /DA
         push hl
         push bc
         call 1F
        jr eSWA_
1
        push de
        LD D,(IX+1)
        LD E,(IX+0)
.adr    CALL RASCHA
        POP DE
        LD B,(IX+3)
Ck2     PUSH BC
        PUSH HL
        LD B,(IX+2)
Ck1     LD A,H
        CP #5B
        JR NC,Exa

SetWA_   ld a,(de) : ld (hl),a ; иногда меняем на : ld (hl),color  /DA - уже не меняем )) /DA v3.12
        INC HL
        LD A,#1F
        AND L
        JR Z,Gran2
        INC DE
        DJNZ Ck1
This4   POP HL
        LD BC,#20
        ADD HL,BC
        POP BC
        DJNZ Ck2
        RET

Exa:    POP AF
        POP AF
        RET

Exs:    POP AF
        INC DE
        DJNZ $-1
        POP BC
        LD A,B
        CP 2
        RET Z
        DEC B
zb      PUSH BC
        LD B,(IX+2)
        INC DE
        DJNZ $-1
        POP BC
        DJNZ zb
        RET

Gran1   INC DE
        DJNZ Gran1
        JR This3

Gran2   INC DE
        DJNZ Gran2
        JR This4

;------------------------------
; A  - номер кнопки
; HL - адрес цвета кнопки
; B  - всего кнопок
; ---S
; включеная кнопка

SetBPap     ld de,7*8*256+5*8  ; на белом фоне
           jr 1F
SetBCol     ld de,7*256+5      ; на черном фоне
1           Amul8
            push hl
            push af
            ld a,d
            ld c,e
            ld de,8
2           ld (hl),a
            add hl,de
           djnz 2B
            pop af
            ld h,b  ;0
            ld l,a
            pop de
            add hl,de
            ld (hl),c
           ret

; HL - адрес цвета кнопки
; Z  - кнопка выключилась

SwBut   LD A,(HL)
        CP 5
        JR Z,sw7
        LD A,5
swbut   LD (HL),A
        RET
sw7     LD A,7
        JR swbut
;---------------------------


CHEX_A    push hl
          ex de,hl
         jr 1F
CHEX      push hl          ; in DE -addr , HL - number
          ex de,hl
          ld a,d
          call GET_HEXa_
          ld a,e
1         call GET_HEXa_
          ex de,hl
          pop hl
         ret


; Вывод серии спрайтов    /DA
; [IX] <- DB x,y,длина спрайта (width), высота спрайта (height), расстояние по X, расстояние по Y, цвет спрайтов
;                                расстояние это число знакомест от начала текущего спрайта до начала следующего.
; DE   <- адрес начала последовательности спрайтов
; HL   <- количество пропускаемых байт от конца данных спрайта до начала данных следующего
; A    <- количество спрайтов в строке ; >=1
; С    <- общее количество спрайтов    ; >=1

WSseries  ld (.b),a
          ld (.bl),hl
          ld a,(ix+0)
          push af
          ld (.a0_),a
          ld a,(ix+1)
          push af
.lp       ld b,1
.b    EQU $-1
.lp1      push bc
          call LoadWS
          ld a,(ix+6)   ; color
          call SetWA
          ld hl,0
.bl   EQU $-2
          add hl,de
          ex de,hl
          pop bc
          dec c
         jr z,.exit
          ld a,(ix+0)
          add a,(ix+4)
          ld (ix+0),a
         djnz .lp1
          ld a,0
.a0_  EQU $-1
          ld (ix+0),a
          ld a,(ix+1)
          add a,(ix+5)
          ld (ix+1),a
         jr .lp

.exit    pop af
         ld (ix+1),a
         pop af
         ld (ix+0),a
         ret

;---------- нужный мусор

;MRmk    DS 4


