

BoxPgn
        DISP PgnAdr

EBOX    call SV_UNDO
EBOX_u  ld (.spp),sp
.Lbox   ld a,%1111
.ebox   ld ix,WBox
        ld (ix+6),a
        ld sp,0
.spp    EQU $-2
        call Win_
        cp #FF
       jp z,CLOSE
        cp 9 ;8              ; количество опций до черты
       jr c,2F
       jr nz,.ebox_
         ld a,%1110
         ld ix,WMBox
          ld (ix+6),a
          call POPUP
         call Win_
         cp 4
        jr nc,1F
         push af              ; установка режима
          ld bc,WMBox.TMBox+1
          call mGetModAdr_    ; из 'Utils1.asm'
          ld (WBox.TmBox),hl
         pop af
         ld b,0
         ld c,a
         ld hl,.cTBox
         add hl,bc
         ld a,(hl)
         ld (.mod_Box),a
1        call CLOSE
.ebox_
        ld a,%1101
       jr .ebox
2       push af
        or a
        ld a,#25  ; dec h  ; для возврата цвета при опции окраске ячеек  ; /DA
       jr z,3F
        xor a
3       ld (.forTecColRet),a
         call LoadScr_CLW
        call P_strt
        call NOKEY_
        pop af
        ld bc,.TBBox
        call TAB_HL
        ld (.ADDR_use),hl
        call .useBox
        call SAVESCR
        call ReWin
       jr .Lbox


.cTBox   nop          ; put
         or (hl)      ; or
         xor (hl)     ; xor
         and (hl)     ; and

.TBBox  DW .Tek_Box   ; 0
        DW .Cls_Box   ; 1
        DW .Inv_Box   ; 2
        DW .InC_Box   ; 3
        DW .Rev_Box   ; 4
        DW .Cop_Box   ; 5
        DW .Co_Box    ; 6
        DW .Pag_Box   ; 7
        DW .Undo_Box  ; 8

.useBox               ; Выбор и использование ячейки
              xor a
              ld (.selBfl),a
              ld (.usespp),sp
.Luseb      ;   ld a,(MBut2toFire2)     ;(WBox.Mbut2)
            ;   or a
            ;   ld a,ArrCancel_Y
            ;  jr z,1F
;               ld a,Fire2Cancel_N  ; ArrCancel_N
;1              call GUI
               call Fire2Cancel_N_
               call .but2ms
              ld a,%1000
              ld ix,.WselBox
              ld (ix+6),a
              ld sp,0
.usespp      EQU $-2
              call Win_
              push af
              call .resBfl       ; стирание коробки
          ;    call SV_ADEF.arr   ; вместо => ld a,ArrCancel_Y : call GUI
               call Fire2Cancel_Y_
              pop af
              cp #FF
             ret z
              call .useb1
             jr .Luseb

.useb1        cp 5
             jp z,SWP_But2toFIRE2
              or a
             jp z,PRGB2
              dec a
             jp z,Col
             push af
              call SAVESCR
             pop af
               dec a
             jr nz,1F
              call SwapSCRS            ; swap screens
             jr 3F
1              dec a
             jr nz,1F
              call LD_UNDO             ; undo
             jr 3F
1             call SV_UNDO             ; save undo
3            jp LOADSCR

.but2ms       ld a,(flF2cancel)  ;(WBox.Mbut2)
              or a
              ld a,#20
             jr z,1F
              xor a
1             ld (.mbt4),a
              ld a,(WBox.ColFL)
              or a
              ld a,#C9         ; a=[ ret ]
             jr z,1F
              ld a,#25         ; a=[ dec h ]
1             ld (.RetDec0),a
              ld (.RetDec1),a
              ld (.RetDec2),a
              ld a,0   ; 0-nop or #25-dec h used
.forTecColRet  EQU $-1
              or a
             ret z
              ld (.RetDec0),a
             ret

.WselBox     DB 0,0,32,24,0,0,%1000
             DB 0
              DW #0002        ; пропуск объект-текст , объект-подсветка (выборка)
              DW .HselBut     ; горячие клавиши
              DW #0005        ; пропуск адресов
.WselBoxInt   DW .selINT      ; вызов на "прерываниях"
             DW #FFFF

.HselBut     DB "C",0           ; C - RGB Colour
              DW 0
             DB "K",0           ; K - miniRGB
              DW 1
.HsbStop     DB "L",0           ; L - swap screens     ; put #FF for Paint for window
              DW 2
             DB "S",0           ; S - swap screens
              DW 2
             DB "U",0           ; U - undo
              DW 3
             DB "Y",0           ; Y - save undo
              DW 4
             DB "B",0           ; B - swap mouse 2but use to fire2
              DW 5

             DB #FF



.selINT       ld a,#FE         ; проверка клавиши 'Z' - аналог 2-й кнопки мыши при использовании
              in a,(#FE)
              rra
              rra
              ld c,#20
             jr nc,1F
.selINT1      ld a,(Fire2)   ; проверка Fire 2
              ld c,a
              or a
             jr z,1F     ; nz
              ld c,#20
.mbt4  EQU $-1
1             ld a,(DIRECT)
              or c
              push af
              call .mvBox
              pop af
              ld c,a
              or a
             jr nz,1F
              ld (.fl_keys),a
1             and #30
             jr nz,1F
              ld (.fl_mv_fr),a
1             ld a,0
.fl_keys     EQU $-1
              or 0
.fl_new      EQU $-1
             ret nz
              ld a,c
              and #30
             ret z
              ex af,af'
              call .resBfl
              ex af,af'
              ld hl,(.selADDR)    ; адрес выбранной ячейки
              ld b,8              ; на всякий
              and #10
             jr nz,1F
              call .uselect     ; выставляет флаг Z на выходе / - уже не выставляет вроде бы
.ADDR_F2     EQU $-2
             jr 2F
1             call Ret
.ADDR_use    EQU $-2      ; Адрес перехода для опции
2             call Ret_guiPG   ; at ResGUI
             jp .setBox

.mvBox           ; рисует и перемещает рамку за стрелкой  ; in a = (DIRECT)
              ld hl,0
.last      EQU $-2
.mvBox__      ld de, (ARW_XC)
           ;   ld c,a          ; c = (DIRECT)
            ;   bit 4,c
              and #30
             jr z, 1F
              ld a,0
.fl_mv_fr  EQU $-1            ; флаг для файра
              or a
             jr nz,1F
              cpl
              ld (.fl_mv_fr),a
              xor a
             jr 2F

1             xor a
              sbc hl,de
             jr nz,2F

              ld a,#FF         ; не меняем флаг z
2             ld (.fl_new),a
              ld (.last),de
              push de
              call nz,.resBfl
              pop de
              ld a,(.selBfl)
              or a
             ret nz
              call RASCH_
              ld (.selADDR),hl
             jr .setBox
.resBfl       ld a,(.selBfl)
              or a
             ret z
.setBox       ld a,0
.selBfl  EQU $-1     ; флаг нарисована ли рамка
              call Ret
.selWpaintBox EQU $-2       ;   ставится адрес проверки для раскраски окна
              cpl
              ld (.selBfl),a
              ld hl,0
.selADDR   EQU $-2
              ld a,#FF
              xor (hl)
              ld (hl),a
              inc h
              ld b,6
1              ld a,#81
               xor (hl)
               ld (hl),a
               inc h
             djnz 1B
              ld a,#FF
              xor (hl)
              ld (hl),a
             ret



.Undo_Box
               ld bc,#9B00+#10   ; ячейку из корзины
               xor a
              jr 1F
.Pag_Box      ; ld c,#17
                ld bc,#8000+#17
               ld a,(.mod_Box)
              jr 1F
.uselect       xor a
            ;   ld bc,SuxPage|#10
               ld bc,#8000+(SuxPage|#10)
1              ld (.mod_uBox),a
                ld a,b
                ld (.set1Bplus_),a
                ld (.set2Bplus_),a
               ld a,c
               call Ram

        ;       ld d,h
               ld e,l

  ;             set 7,d
               ld a,#00   ; #80 for #C000 or #9B for #DB00
.set1Bplus_  EQU $-1
               add a,h
               ld d,a

               ld b,8
1              ld a,(de)
.mod_uBox      nop             ; nop / or (hl) /xor (hl) /and (hl)
               ld (hl),a
               inc h
               inc d
              djnz 1B
.RetDec0       dec h         ; dec h / ret   ; color
               call ADRpixTOcol
               add a,#80  ; #80 or #9B
.set2Bplus_   EQU $-1
               ld d,a
               ld a,(de)
               ld (hl),a
               ret


.Cls_Box       xor a
1              ld (hl),a
               inc h
              djnz 1B
.RetDec1       dec h              ; dec h / ret
.Tek_Box       call ADRpixTOcol
               ld a,(hl)
               call MIXCOL
               ld (hl),a
              ret

.Inv_Box
1              ld a,(hl)
               cpl
               ld (hl),a
               inc h
              djnz 1B
               ret

.Rev_Box       call .Inv_Box
               dec h
.InC_Box       call ADRpixTOcol
               ld a,(hl)
               ld b,a
               and 7
               add a,a
               add a,a
               add a,a
               ld c,a
               ld a,b
               and #C0
               or c
               ld c,a
               ld a,b
               rra
               rra
               rra
               and 7
               or c
               ld (hl),a
              ret

.Cop_Box        ld de,.pt_Box
               jr 1F
.Co_Box         ld de,.put_Box
1               ld (.ADDR_use),de
                ld de,BUFF
1               ld a,(hl)
                ld (de),a
                inc h
                inc de
               djnz 1B
                dec h
                call ADRpixTOcol
                ld a,(hl)
                ld (de),a
1               ld a,#FF
                ld (.fl_keys),a
               ret
.pt_Box         call .put_Box
                ld hl,.Cop_Box
                ld (.ADDR_use),hl
               jr 1B
.put_Box        ld de,BUFF
1               ld a,(de)
.mod_Box        nop             ; nop / or (hl) /xor (hl) /and (hl)
                ld (hl),a
                inc de
                inc h
               djnz 1B
.RetDec2        dec h            ; dec h / ret
                call ADRpixTOcol
                ld a,(de)
                ld (hl),a
               ret



WBox   ; DB 20,2,11,16,5*8,5,%00001111
        DB 9,2,11,16,5*8,5,%00001111
; Bit 0 - окно с заголовком/без
; Bit 1 - "перерисовать" окно да/нет
; Bit 2 - тискать окно по экрану да/нет
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL)
        DEFB 0
        DEFW .TBox         ; объект-текст
        DEFW .SBox         ; объект-подсветка (выборка)
        DW #0002          ; пропуск 2-х адресов
        DW .Flags         ; объект флажки
        DEFW #FFFF

.Flags  DB 8,14,10,0    ; флажек цвета
.ColFL EQU $-1
         DW Nil
;        DB 8,15,11,0    ; флажек 2 кнопки мыши
;.Mbut2 EQU $-1
;         DW .f_mbt2_   ; Nil
        DB #FF

;.f_mbt2_   ld a,(.Mbut2)
;          ld (MBut2toFire2),a
;         ret

.TBox
        MSG_BOX_Head : DB 13
        MSG_BOX_CurrCol : DB 13
        MSG_BOX_Clear : DB 13
        MSG_BOX_Inv : DB 13
        MSG_BOX_InvCol : DB 13
        MSG_BOX_Reverse : DB 13
        MSG_BOX_Copy : DB 13
        MSG_BOX_CopyP : DB 13
        MSG_BOX_Scr2 : DB 13
        MSG_BOX_atUndo : DB 13
        DB 15,13
        MSG_BOX_Mode : DB #17,7


; .TmBox  DB "Put",13
        DB #0A
.TmBox  DW mPut

        MSG_WIN_Attrs : DB 0


.SBox   DB 1,3,9,128+9,%11  ; DB 1,3,9,128+8,%11
        DB 1,13,9,128+2,%11 ; DB 1,12,9,128+3,%11
        DB #FF


WMBox   DEFB 20,2,4,6,7*8,7,%00001110
; Bit 0 - окно с заголовком/без
; Bit 1 - "перерисовать" окно да/нет
; Bit 2 - тискать окно по экрану да/нет
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL)
        DEFB 0
        DEFW .TMBox        ; объект-текст
        DEFW .SMBox        ; объект-подсветка (выборка)
        DEFW #FFFF

.TMBox ; DB "Put",13
       ; DB "Or ",13
       ; DB "Xor",13
       ; DB "And",0
       DB #0A : DW mPut
       DB #0A : DW mOR
       DB #0A : DW mXOR
       DB #0A : DW mAND
       DB 0


; x, y, длина, высота, флаг
; bit 0 - подсвечивать (да/нет)
; bit 1 - клавиша "заморожена"

.SMBox
        DB 1,1,2,128+4,%11
        DEFB #FF




;====================================================================

;PREPARATION:  ; deleted / удалено   /Dart Alver  v3.12

;====================================================================




;*************************************

; For selected windows procedures

;*************************************

WinBoxSet_                             ; установка позиции из (ARW_XC)
               ld hl,#0000             ; результат - (BUFF) != 0 если удачно
               ld (BUFF),hl
               call WinPaint.winCheckBox_          ; BUFF+0 - addres box in screen or 0 if not selected
               ld a,(WinBoxSelect.select)          ; BUFF+2 - addres box in window
               or a                                ; BUFF+4 - addres RGB box in screen
              jr nz,WinPaint.ex_                   ; BUFF+6 - addres RGB box in window
               ld hl,(ARW_XC)                      ; BUFF+8 - cx,cy box in window
               call ADRHL8                         ; BUFF+10 - cx,cy box in screen
               ld (BUFF),hl
               call WinPaint.paint_sux
              jr WinPaint.ex_

WinBoxSelect

.select        ret   ; ret / nop       WinBoxSelect.select
               ld hl,(EBOX_u.selADDR)
1              ld (BUFF),hl
               call WinPaint.paint_sux
               call WinPaint.ex_
.sp    EQU $+1 : ld sp,#0000
              jp guiRAM

.exit          ld hl,#0000
              jr 1B

WinPaint      ;  Раскраска окна для модуля окон    EBOX_u   WinPaint.selWpaintBox
               ld hl,.paint
               ld de,.retWinRGB_
               ld c,"C"
2              ld (EBOX_u.ADDR_use),hl
               ld (EBOX_u.ADDR_F2),de
               ld a,c                             ; for STOP Hot Keys
               ld (EBOX_u.HselBut),a
               ld a,#FF                           ; for STOP Hot Keys
               ld (EBOX_u.HsbStop),a
               ld hl,.checkWinBox
               ld (EBOX_u.selWpaintBox),hl

               call EBOX_u.useBox

.ex_           ld a,"L"
               ld (EBOX_u.HsbStop),a
               ld a,"C"
               ld (EBOX_u.HselBut),a
               ld hl,Ret
               ld (EBOX_u.selWpaintBox),hl
               ld hl,EBOX_u.uselect
               ld (EBOX_u.ADDR_F2),hl
               ld hl,BUFF
              ret

.paint_sux      ; WinPaint.paint_sux
               call suxRAM
.paint_sux1_   call ADRpixTOcol
               ld (BUFF+4),hl
               ld de,#0000
.paintAde_  EQU $-2
               ld (BUFF+6),de
              ret

.retWinRGB_    call .paint_sux
               ex de,hl
               push hl
               ld bc,WinTmpABoof-WinABoof
               add hl,bc
               ld a,(hl)
               pop hl
              jr 1F

.paint         ret   ; ret / nop
               call .paint_sux
               ld a,(de)
               call MIXCOL
1              ld (hl),a
               ld (de),a
               or a
              jp guiRAM


.winCheckBox_   ld a,1   ; !=0
                push af
               jr 1F

.checkWinBox    push af           ;  WinXU        WinPaint.checkWinBox
                ld a,(EBOX_u.HselBut)    ; если клавиши для цвета закрыты, то выбор - убираем отброс маски
                inc a
                ld a,#28   ; [ jr z,**]
               jr nz,2F
1               ld a,#3E   ; [ ld a,**]
2               ld (.lda_jrz_),a
                ld a,#C9 ; [ ret ]
                ld (.paint),a
                ld (WinBoxSelect.select),a
                ld de, (ARW_XC)
                ld (BUFF+10),de
                ld hl,(WinXU.csx)
                ld a,l
                cp 32
                ld a,e
               jr nc,1F
                or a
               jr z,.notWinB
                dec a
1               cp l
               jr nc,.notWinB
                ld c,a         ; позиция X в окне
                ld (BUFF+8),a
                ld b,0
                ld a,h
                cp 24
                ld a,d
               jr nc,1F
                or a
               jr z,.notWinB
                dec a
1               cp h
               jr nc,.notWinB
                ld h,a          ; позиция Y в окне
                ld (BUFF+9),a
                ld a,l
                call MULS    ; hl = a*h
                push hl
                add hl,hl
                add hl,hl
                add hl,hl
                add hl,bc
                push bc
                ld bc,WinBoof
                add hl,bc
                pop bc
                ld (BUFF+2),hl     ; адрес в окне
                pop hl

                add hl,bc    ; hl - смещение адреса в атрибутах окна
                call suxRAM
                push hl
                ld bc,WinAMskBoof
                add hl,bc
                ld a,(hl)
                pop hl
                ld bc,WinABoof
                add hl,bc
                call guiRAM
                inc a
.lda_jrz_      jr z,.notWinB    ; [ jr z,** ] / [ ld a,** ]

                ld (.paintAde_),hl

                xor a           ; [ nop ]
                ld (.paint),a
                ld (WinBoxSelect.select),a
                pop af
               ret

.notWinB        pop af
                or a
               ret nz      ; если рамка есть
                pop af     ; снимаем адрес возврата
               ret

;====================================================================

WinCutLoupe   ; лупа для обрезки

                ld hl,#0101
.linze          ld (ARW_XC),hl
.linze_         call SuxRam
                call WinBoxSet_

.l0_            ld hl,(BUFF)
                ld a,l
                or h
               ret z

                ld (WWinCutLinse.Immadrout),hl

                call MiniLoupe.a_winx
                ld (WWinCutLinse),a


                ld a,128+%1010
.l0             ld ix,WWinCutLinse
                ld (ix+6),a
                call Win_
                push af
                call WWinCutLinse.resImig
                pop af
                inc a
               jr nz,.r2  ; 255

                ld a,(DIRECT)  ; если #FF
                and #10
               ret z
.r0             ld hl,(BUFF+10)
                push hl
                call WinBoxSet_
                ld hl,(BUFF)
                ld a,h
                or l
                pop hl
               jr z,.linze
                ld hl,(BUFF+10)
                call MiniLoupe.a_winx
                ld c,a
                ld a,(WWinCutLinse)
                cp c
               jr z,.linze

.r1

             ;   call WinFunc : DB 0  ; перерисовка         WinCutLoupe.r2   WinClipping.outWinBoof_
                call ReWinOUT_

                ld hl,(BUFF+10)
               jr .linze

1               call EXcnknum_ ; обслуживаем "B" и "N" (160,161)
               jr .r1

.r2
                dec a
               ret z           ; 1 Ok!>
                sub 160
               jr nc,1B

                add a,159

                ld b,#FF
1               inc b
                sub 12
               jr nc,1B
                add a,12
                ld c,a       ; c

                ld hl,(BUFF+10)
               push hl
                ld de,#0208
                ld a,c
                sub d
               jr nc,1F
                dec l
                add a,e
1               cp e
               jr c,1F
                inc l
                sub e
1               ld c,a

                ld a,b
                sub d
               jr nc,1F
                dec h
                add a,e
1               cp e
               jr c,1F
                inc h
                sub e
1               ld b,a

               pop de

                ld a,h
                xor d
               jr nz,1F
                ld a,l
                xor e
               jr z,2F

1               ld a,l
                cp 32
               jr c,1F
                ld l,e
1               ld a,h
                cp 24
               jr c,1F
                ld h,d
1               ld (ARW_XC),hl
               jp .r0


2               ld h,b
                ld a,(WinXU.csx)
                call MULS     ; hl = a*h
                ex de,hl

                ld b,c
                inc b
                ld a,1
1               rrca
               djnz 1B
                ld c,a       ; маска бита

                ld hl,(BUFF+2)
                push hl
                add hl,de
                ld de,6912
                add hl,de
                ld a,c
                xor (hl)
                ld (hl),a
                call wmbooframka
                exx
                pop hl
                ld bc,6912
                ld a,(WinXU.csx)
                ld e,a
                ld d,0
                exx
                 ld hl,(BUFF)
                 ld d,8
1                 call wnCNK_curbyte  ;.CNK_curbyte   ;  WinClipping.CNK_curbyte если впихну в основной код
                  ld b,a     ; байт чанка
                  exx
                  ld a,(hl)
                  ex af,af'    ; bt
                  push hl
                  add hl,bc
                  ld a,(hl)    ; ms
                  pop hl
                  exx
                  ld c,a     ; маска
                  and b
                  ld b,a
                  ex af,af'
                  or c
                  xor c
                  or b
                  ld (hl),a
                  inc h
                  exx
                  add hl,de
                  exx
                  dec d
                 jr nz,1B



                ld a,128+%1000
               jp .l0


WWinCutLinse   DB 0,8,14,15,5*8,5,128+%1010                                           ; для линзы
               DB 5*8+3      ; атрибут неактивного цвета (non active color attribute)

               DW .Te        ; объект-текст (text object)
               DW .Sl        ; объект-подсветка (выборка) (highlighting object)
               DW .Hl        ; горячие клавиши (hotkeys)
               DW 4          ; пропуск: кнопки , флажки , радио кнопки , ползунок
               DW .CrWl      ; вызов при создании (call on create)
               DW .Imm       ; вызов на прерывании
              DW #FFFF


.Te         DB 22,11,13,">>"   ; WWinCutLinse.Te
           DB 0


.Sl        DB 10,13,3,1,%11     ;  0  - exit
           DB 1,1,128+12,12,%10  ; 1+ - таблица 12x12
           DB 1,1,1,1,144
          DB #FF

.Hl            DB "B",0
                DW 160
               DB "N",0
                DW 161
              DB #FF

.CrWl        xor a
             ld (.fImm_mig),a
             inc a
             ld (.fImm_cmg),a
             ld hl,(WWinCutLinse)   ; (xc,yc) - окна

             inc l
             inc h
             call ADRHL8
             ex de,hl
             call SuxRam
             call 1F
           jp guiRAM

1           ld a,2
            ld (.cr_lp_calc_),a
            exx
            ld hl,(BUFF+2)
            ld d,h
            ld e,l
            ld bc,6912
            add hl,bc      ; HL' - MaskAdr , DE' - WinAdr
            ld a,(WinXU.csx)
            ld c,a
            ld b,0         ; bc - ширина окна в байтах
            exx

            ld hl,(BUFF+8)   ; x,y
            ex de,hl
            ld (.outboxAdr_),hl         ; hl - адрес вывода бокса
            ld a,d
            or a
           jr z,1F
            exx            ; смещаем адрес из окна на 2 линии пикселей вверх
            or a
            sbc hl,bc
            or a
            sbc hl,bc
            ex de,hl
            or a
            sbc hl,bc
            or a
            sbc hl,bc
            ex de,hl
            exx
            push hl,bc
            ld hl,(BUFF+4)
            ld bc,#10000-32
            add hl,bc
            ld (.c_atrAscr_),hl
            pop bc,hl
            call .Cr_loop
           jr 2F
1             ; сверху пропуск
             call .cr_z2Hor_
2            push hl
             ld hl,(BUFF+4)
             ld (.c_atrAscr_),hl
             pop hl
             ld a,8
             ld (.cr_lp_calc_),a
             call .Cr_loop
             ld a,(WinXU.csy)
             dec a
             cp d
            jr nz,3F
             call .cr_z2Hor_   ; снизу пропуск
            jr 4F
3            push hl,bc
             ld hl,(BUFF+4)
             ld bc,32
             add hl,bc
             ld (.c_atrAscr_),hl
             pop bc,hl
             ld a,2
             ld (.cr_lp_calc_),a
             call .Cr_loop
4
.outboxAdr_ EQU $+1 : ld hl,#0000      ; выводим точки знакоместа
             push hl
             inc l
             inc l
             ld de,8
             ld b,12*4
1            set 7,(hl)
             add hl,de
             set 7,(hl)
             call INC_Y
             res 7,(hl)
             ld a,l
             sub e
             ld l,a
             res 7,(hl)
             call INC_Y
            djnz 1B
             pop hl
             call INC_YY
             call INC_YY
             call .tochkline_
             ld b,8
1            call INC_YY
            djnz 1B
.tochkline_   ld b,12
              push hl
1             ld (hl),%10101010
              inc l
             djnz 1B
              pop hl
             ret


.Cr_loop
             push hl    ; линия
             ld a,e
             or a
            jr z,1F
             exx        ; смещаем адреса на байт влево
             dec hl
             dec de
             ld a,(de)
             rrca
             rrca
             ex af,af'
             ld a,(hl)
             rrca
             rrca
             inc de
             inc hl
             exx
             push hl
             ld hl,(.c_atrAscr_)
             dec l
             ld c,(hl)
             pop hl
             call .setout2P
            jr 2F
1            ; слева пропуск
             call .cr_zHor2_

2            ld a,(#5800)
.c_atrAscr_ EQU $-2
             ld c,a
             exx
             ld a,(de)
             ex af,af'
             ld a,(hl)
             exx

             call .setoutP

             ld a,(WinXU.csx)
             dec a
             cp e
            jr nz,3F
             ; справа пропуск
             call .cr_zHor2_
            jr 4F

3            exx
             inc de
             ld a,(de)
             dec de
             ex af,af'
             inc hl
             ld a,(hl)
             dec hl
             exx
             push hl
             ld hl,(.c_atrAscr_)
             inc l
             ld c,(hl)
             pop hl
             call .setout2P

4            exx
             ex de,hl
             add hl,bc
             ex de,hl
             add hl,bc
             exx
             pop hl
             call INC_YY

             ld a,10
.cr_lp_calc_  EQU $-1
             dec a
             ld (.cr_lp_calc_),a
            jr nz,.Cr_loop
           ret


.cr_z2Hor_    ld a,2

1             push af
              ld b,12
              push hl
              call .cr_zXHor_
              pop hl
              call INC_YY
              pop af
              dec a
             jr nz,1B
             ret

.cr_zHor2_    ld b,2
.cr_zXHor_    push de
              ld de,MiniLoupe.bSprsOut
              ld c,03     ; цвет для запредельных
1             call .setout
              inc l
             djnz 1B
              pop de
             ret

.setout       push hl,de,bc
              ld b,8
1             ld a,(de)
              inc de
              ld (hl),a
              inc h
             djnz 1B
              dec h
              call ADRpixTOcol
              ld (hl),c
              pop bc,de,hl
             ret

.setout2P      ld b,2
              jr 1F

.setoutP       ld b,8  ; вывод пикселя  in a - mask , a' - pix
1              push de
1              ld de,MiniLoupe.bSprsMzer   ; .bSprs+8   ; mask & zero
               rla
              jr nc,2F
               ex af,af'
               rla
              jr nc,3F
               ld de,MiniLoupe.bSprsMpix     ; mask & pixel
              jr 3F
2              ld de,MiniLoupe.Mspr0         ; zero
               ex af,af'
               rla
              jr nc,3F
               ld de,MiniLoupe.Mspr1        ; pix
3              push af
               ex af,af'
               push af

               call .setout   ; c- color
               inc l

               pop af
               ex af,af'
               pop af
               ex af,af'
              djnz 1B
               pop de
              ret


.Imm          ; обработка прерывания
              ld a,0
.fImm_cmg  EQU $-1   ; счетчик
              dec a
              ld (.fImm_cmg),a
             ret nz

.Imm_mig      ld a,0
.fImm_mig  EQU $-1   ; флаг мигания
              cpl
              ld (.fImm_mig),a
              or a
              ld a,23
             jr z, 1F
              ld a,3
1             ld (.fImm_cmg),a

              ld hl,#0000
.Immadrout  EQU $-2

              call 2F
              inc h
              ld b,6
1              ld a,#81
               xor (hl)
               ld (hl),a
               inc h
             djnz 1B
2             ld a,#FF
              xor (hl)
              ld (hl),a
             ret

.resImig      ld a,(.fImm_mig)     ; WWinCutLinse.resImig
              or a
             ret z
              jr .Imm_mig




        ENT
LBox=$-BoxPgn

        DISPLAY "Box len   :",/a,LBox
