; Module Magnify for BGE

; Many commits removed (Удалены многие коммиты)   /DA

MgnPixTB  EQU #FC00 ; таблица вывода пикселей в #C000 используется страница 0  ; /DA

MgnPgn
        DISP PgnAdr

BMgn    CALL SV_UNDO
        call ERASE_ALLW

        call mgn_pixTB     ; установка таблицы пикселей /DA

               ld hl,Ret
               ld (IntP1),hl
               ld (IntG1),hl


rmgn
         xor a
         ld (.fl_shundo_),a  ; стираем флаг
.ns_     call SV_ADEF.arr  ; вместо => ld a,ArrCancel_Y : call GUI
        CALL LOADSCR

        call bmgn.selSize    ; /DA   Выбор размера рамки для лупы x8 или x4

        LD IX,RMgn4
        XOR A
        CALL Ramka8

          ld a,0
.fl_shundo_ EQU $-1
          rla      ; добавляем флаг ошибки рамки
          bit 1,a
         jr nz,Bmgn   ; выбор позиции внутри модуля
          or a
         jp nz, bmgn.tExit

;.sh_undo
        call SwapUnShad    ; call nn / ld bc,nn - меняем UNDO с теневым экраном или нет /DA

Bmgn                     ; теперь так  /DA
        CALL NOKEY_
        call bmgn.zview_2pxSet
.cls
        CALL bmgn.CLS
        ld a,0
.modresF EQU $-1          ; флаг сброса режимов
        or a
        call z,MGN_set      ; места мало вытащил в основной /DA
.notres   xor a
        ld (.modresF),a
        ld a,#CD          ; call
        ld (bmgn.next),a

rmgnnq
        ld hl,(RMgn4)     ; позиция рамки
        ld de,(RMgn4+2)   ; размер рамки
        ld a,24
        sub d
        ld b,a
        ld (IntMagnify.mgnYSZ),a
        ld a,32
        sub e
        ld c,a
        ld (IntMagnify.mgnXSZ),a
inirmgn LD A,H
         cp b
        JR C,okl1
         ld h,b
okl1    LD A,L
         cp c
        JR C,okl2
         ld l,c
okl2
       ld (RMgn4),hl
       ld b,3
1        SLA H
         SLA L
       djnz 1B

         ld (IntMagnify.bxy),hl    ; позиция рамки в пикселях
         ex de,hl
         add hl,hl
         add hl,hl
         add hl,hl            ; размер рамки в пикселях
         ld (IntMagnify.loupePXsz),hl
         ld a,l
         add a,e
         ld l,a          ; 1-й пиксель за рамкой по X (0 - если 256)
         ld a,h
         add a,d
         ld h,a          ; 1-й пиксель за рамкой по Y  (макс 192)
         ld (IntMagnify.exy),hl


bmgn
 ;-------------------------------------------------------
 ; Cтарый код из 'Magnify2.asm' удалён    ; / Dart Alver
 ; Old code at 'Magnify2.asm' deleted     ; / Dart Alver
 ;-------------------------------------------------------
         ld hl,COOR_M           ; обработка указателя позиции
         ld (COOR_P+1),hl

        call  .border_prev


.mgaddr                ; рассчитываем адреса данных окошка preview в сегменте
        ld hl,#0119

        ld hl,(RMgn4)
        call .addrHLDE
        ld (.MGpixadr),hl
        ld (.MGattradr),de

        ld a,(RMgn4+2)      ; size x
        ld (.MGsizeX),a
        ld (.MGsizeX4),a
        ld a,(RMgn4+3)      ; size y
        ld (.MGsizeY),a
        ld (.MGsizeY4),a

        ld b, 6
        ld a,(Magnify_x8)
        or a
        call nz,.x8PVcalc

.mgaddrE
        ld (.MGPpixadr),hl
        ld (.MGPattradr),de
        ld a,b
        ld (.PrevSize),a

.grids     xor a
.grids1    ld c,1
.grid     EQU $-1      ;флаг сетки 1 - set
           xor c
           ld (.grid),a
1          ld c,7
           jr z, 2F
           ld c,5
2          ld a,c
           ld (ButMgn.gridcol),a
.attrborder
           ld c,7
           ld a,(IntMagnify.drawingAA)
           cp #C9
          jr z,1F
           ld c,5
1          ld a,c
           ld (ButMgn.frAttrcol),a


.main
       ;   ld a,Fire2Cancel_N  ; ArrCancel_N
       ;   call GUI
           call guiRAM
           call Fire2Cancel_N_
           ld a,#B7   ; [ or a ]
           ld (brk.SetRes_scf),a
          ld a,(Sieve)
          or a
          ld a,#18    ; jr nn - блокирует режим сита
          ld c,6
         jr z,1F
          ld a,#20    ; jr nz,nn - позволяет режим сита
          dec c
1         ld (IntMagnify.mod_Sieve),a
          ld a,c
          ld (ButMgn.PmskCol),a

          call Mgn_ARW.set
          ld a,(REALRGB)
          ld (ButMgn.dt_col),a
2         ld sp,(SPP)
          call .ramSCR0
          call .preview
          call .zview
          ld ix,WMgn
          ld (ix+6),%1000 ;A
          call Winn_
          ld b,a
          or a
         jp z,.viewSCR   ; единственная выборка - просмотр
1         cp #FF
         jr nz, 1F
          ld a,(BRK)
          bit 2,a
         jr nz, 1F
          bit 1,a
         jr nz,.rExit
1         push bc
          call IntMagnify.drawAres    ; стираем границы знакоместа
          pop bc

          ld a,(But)
          cp #FF
         jr nz, 2F
          ld a,b
2         cp TBMgn.size
.exprSZ  EQU $-1
         jr nc, .next
3         ld bc,TBMgn
         jp TAB_JP
.gridEx
           call NOKEY_
           ld a,1
          jp .grids1

.next_u call SwapUnShad
.next   call NOKEY_
       jp .main

.rExit
          call SwapUnShad
.tExit    ld hl, PLOT_SNP
          ld (LINE.plotADR),hl
         jp exitMGN

.sel_rgb    call PRGB_mgn      ; PRGB2
            jr .next

.undo
           call SwapSCRS
          jr .next

.to_undo
           call SaveSCRS
          jr .next
.at_undo
           call SwapUnShad
           call LOADUNDO
1          call SwapUnShad
          jr .next

.at_undo_na
           call SwapUnShad
           ld hl,UNDOSCR
           ld de,SCREEN
         ;  ld a,ScrPage
         ;  CALL RAM
           call ScrRam
           LD BC,6144
           LDIR
          jr 1B  ; .next
.ramSCR2
             ld a,RamPage|#10
            jr 1F
.ramSCR0
             ld a,ScrPage|#10
1           jp Ram

.SCREENex                 ; смена экранов
            call LD_UNDO  ; call SwapSCRS
          jr .next

.MiniCol    call Col
           jr 5F
.takeRGB    ld de,(ARW_XC)
            call RASCHA
            ld a,(hl)
            ld (REALRGB),a
             call ReMixRgb
           jr 5F

.cellUndoRC xor a               ; 'nop'
           jr 1F
.cellUndoSC  ; ld a,#12             ; 'ld (de),a'
            ld a,#77              ; 'ld (hl),a'
1           ld c,#18            ; 'jr **'
           jr 2F
.cellUndoR  xor a               ; 'nop'
           jr 1F
.cellUndoS   ; ld a,#12             ; 'ld (de),a'
            ld a,#77              ; 'ld (hl),a'
1           ld c,#C9       ; 'ret'
2           ld (IntMagnify.cellUndo_),a
            ld a,c
            ld (IntMagnify.cellUndoC),a
            ld a,2
           jr .SetHopti

.Invert8x8  ld hl,#2F00            ; 'nop : cpl'
           jr 1F
.Clean8x8   ld hl,#AF12            ; 'ld (de),a : xor a'
1           ld (IntMagnify.cInvClean),hl
            ld a,l
            ld (IntMagnify.cInvClean2),a
            ld a,1
.SetHopti   ld (IntMagnify.Koption),a
.callInt    call IntMagnify
            xor a
            ld (IntMagnify.Koption),a

5          jp .next


.Paste8x8    ld hl,#1A00        ; 'nop : ld a,(de)'
            jr 1B
.Paste8x8C   ld hl,#001A        ; 'ld a,(de) : nop'
            jr 1B
.Copy8x8     ld hl,#0012        ; 'ld (de),a : nop'
            jr 1B


.viewMONO
             call LOADSCR
             ld a,(.zvcolor_)
             call CLS_ATR.a
             jr 1F
.multiSCR      call SwapUnShad
              call mscr
               call SwapUnShad
             jr 2F
.viewSCR
            call LOADSCR
1
            call NOKEY_
            call WAITKEY_
            call NOKEY_
2
            call .CLS
          jp bmgn
.viewENscr
            call LOADSCR
3
            call NOKEY_
           jr 2B
.viewSCR2
             ld a, ScrPage
             ld hl,UNDOSCR
             ld de, #4000
             call LOADSCR.ldir
           jr 1B


.monocolorA  call MgnOTHERS.Scol
             call .monocolor_s
.monocolor
             call .monocolor_
            jr 3B
.monocolor_
            ld a,(.zvOUTcolor)
            or a
            ld a,#C9
           jr z,5F
.monocolor_s
            xor a
5           ld (.zvOUTcolor),a
           ret

.brightoff
          call groff
         jr 3B
.GridOn ;  call SV_BRT
        ;  call SET_GRID
           call GRID_sw
         jr 3B
;.GridOf   call LD_BRT
.BrightOf  call groff_f
         jr 3B


.CLS       call CLS
           ld a,(.zvOUTcolor)
           or a
           ret z
           ld a,(.fullscr)
           or a
           ld a,(.zvcolor_)
          jp nz,CLS_ATR.a
           ld d,7
           ld hl,#5800
           ld c,24
1          ld b,24
2          ld (hl),a
           inc l
          djnz 2B
           ld b,8
3          ld (hl),d
           inc hl
          djnz 3B
           dec c
          jr nz,1B
           ret

.load     ld hl,MLoad
         jr 1F
.save     ld hl,MSave
1         push hl
         jp SV_ADEF.arr  ; вместо => ld a,ArrCancel_Y : jp GUI

.PMask     call PMask
          jp .next



.x8PVcalc           ; для x8 превью шире области редактора расчитываем
        ld hl,(RMgn4)
        ld b,h
        ld c,l

        ld a,h
        cp 1
       jr c,1F
        dec b
        cp 2
       jr c,1F
        dec b
        cp 20
       jr c,1F
        dec b
        cp 21
       jr c,1F
        dec b
1       ld a,l
        cp 1
       jr c,1F
        dec c
        cp 2
       jr c,1F
        dec c
        cp 28
       jr c,1F
        dec c
        cp 29
       jr c,1F
        dec c
1              ; BC - координаты данных превью, HL - координаты данных линзовой области
       ld a,h
       sub b
       ld d,a
       ld a,l
       sub c
       ld e,a  ; DE - смещение координат
       push bc
       ; Определение процедур окантовки рамки линзы x8
         ld c, #C9     ; ret
         ld b, #21     ; ld hl, NN
         ld l,c
         ld h,c
         ld a,e
         or a
        jr z,1F
         ld l,b
1        cp 4
        jr nc, 1F
         ld h,b
1        ld a,l
         ld (.frm_Vl),a
         ld a,h
         ld (.frm_Vr),a
         ld l,c
         ld h,c
         ld a,d
         or a
        jr z,1F
         ld l,b
1        cp 4
        jr nc,1F
         ld h,b
1        ld a,l
         ld (.frm_Hu),a
         ld a,h
         ld (.frm_Hd),a

         ; адреса

         ld a,e
         add a,#18
         ld e,a        ; координата рамки лупы в аттр
         ld a,d
         rrca
         rrca
         rrca
         and #E0
         or e
         ld l,a
         ld h,#40
         ld (.frm_vl),hl
         inc l
         ld a,l
         inc l
         inc l
         inc l
         ld (.frm_vr),hl
         ld c,a
         add a,32*3
         ld l,a
         ld (.frm_hd),hl
         ld a,c
         sub 32
         ld l,a
         ld a,h
         or 7
         ld h,a
         ld (.frm_hu),hl

       pop hl
         call .addrHLDE
         ld b, 7
         ret

.border_prev
             call  .border_prev_   ; call \ ret => меняется при фулскрине
          ; вывод указателя положения окна линзы
             ld hl,#4058
             ld a,(RMgn4+2)  ; size
             ld c,a          ; c - size
             cp 3
            jr z,1F
             ld h,#44
1           push hl
             ld b,24
1            ld (hl),#19
             call INC_Y
            djnz 1B

             ld hl,#42FA
             xor a
             call .locat_01_
             cpl
             call .locat_01_
             call .locat_01_
             xor a
             call .locat_01_
            pop hl
             call DEC_Y

             ld a,(RMgn4+1)   ; y
             ld b,a
             or a
            jr z,2F
1            call INC_Y
            djnz 1B
2            ld (hl),#01
             call INC_Y
             ld b,c
1            ld (hl),#3D
             call INC_Y
            djnz 1B
             ld (hl),#01

             ld a,(RMgn4+0)  ; x
             ld b,a
             ld hl,#42F9
             ld e,1
             ld d,e
             or a
            jr z,2F
1            call .locat_03_
            djnz 1B
2            call .locat_02_
             ld d,b   ; d=0
             ld b,c   ; size
1            call .locat_02_
            djnz 1B
             ld d,e
             call .locat_02_
          ret

.locat_01_  ld b,4      ; вывод гор. линии заготовки
            push hl
1           ld (hl),a
            inc l
           djnz 1B
            pop hl
            inc h
           ret

.locat_02_   push bc    ; вывод вертикальной линии гор. ползунка
             ld b,4
             push hl
1            ld a,(hl)
             or e
             xor d
             ld (hl),a
             inc h
            djnz 1B
             pop hl
             pop bc
.locat_03_   rrc d
             rrc e
            ret nc
             inc l
            ret



.border_prev_
         ld a,(Magnify_x8)
         or a
       jr z, .x4bord

        ld hl,#40F9    ; делаем бордюрчик для x8 preview
        ld b,7
        call .brd_xx
        ld hl,#4018
        ld bc,#3901
        call .brd_yy
        ld a,#3E          ; ld a,N
        ld (.frame),a
       ret

.x4bord                 ; делаем бордюрчик вокруг превайва x4
        ld hl,#4719
        call .brd_6
        ld hl,#40F9
        call .brd_6
        ld hl,#4718
        ld c,#01
        call .brd_50
        ld hl,#471F
        ld c,#80
.brd_50  ld b,50
.brd_yy  ld (hl),c
         inc h
         ld a,h
         and 7
         call z,dnhlpixL
        djnz .brd_yy
         ret

.brd_6   ld b,6
.brd_xx  ld a,#FF
1        ld (hl),a
         inc l
        djnz 1B
         ret




.Lswitch  call .NotResMod
          ld a,(Magnify_x8)
          or a
         jr z, 1F
          ld a,#FF
1         cpl
          ld (Magnify_x8),a
          call .selSize
         jp Bmgn

.selSize
          ld hl,ZOOM8
          ld de,#0304
          ld c,8
          ld a,(Magnify_x8)
          or a
          ld a,#3C      ; #3C > #CB,#3C = srl h
         jr nz, 1F
          ld a,#3A      ; #3A > #CB,#3A = srl d
          ld hl,ZOOM4
          ld de,#0608
          ld c,4
1
                  ld (IntMagnify.dv8h+1),a  ; настройка выбора пикселя для x8 или x4
                  inc a
                  ld (IntMagnify.dv8l+1),a
          ld a,c
          ld (.zvLSy),a
          ld (.zvLSx),a
          cp 4
          ld b,32           ; для смещения окна при файре
         jr z,1F
          ld b,64
1
          ld a,0
.fullscr EQU $-1
          or a
          ld c,191
         jr  nz,.fuscr
          ld e,d
          push hl,de,bc       ; инициализация с превью

                  ld a,#C9           ; ret
                  ld (.frame),a
                 ; ld a,#3A              ; ld a,(nn)
                  ld a,#CD              ; call nn
                  ld (.border_prev),a

                  ld a,#2A              ; ld hl,(nn)
                  ld (.x8PVcalc),a
                  ld a,#3E              ; ld a,n
                  ld (.preview),a
                  ld a,%10
                  ld (WMgn.SelMgn+4),a

                  ld hl,ButMgn
                  ld (WMgn.mbuts),hl

          jr .sSzsv
.fuscr     ld c,255
          push hl,de,bc      ; инициализация без превью

                  ld a,#C9           ; ret
                  ld (.frame),a
                  ld (.border_prev),a
                  ld (.x8PVcalc),a
                  ld (.preview),a
                  xor a
                  ld (WMgn.SelMgn+4),a
                  ld hl,Nil
                  ld (WMgn.mbuts),hl


.sSzsv    pop bc,de,hl

          ld (ButMgn.s4x8),hl
          ld (RMgn4+2),de
          ld a,b
          dec a
          ld (IntMagnify.mgnXML),a
          ld (IntMagnify.mgnYMU),a
          ld a,c
          ld (IntMagnify.MOV_LIM),a
          ld (IntMagnify.mgnXMRm),a
          sub b
          inc a
          ld (IntMagnify.mgnXMR),a
          ld (IntMagnify.mgnYMD),a
         ret
.fullEX        call .NotResMod
               ld a,(.fullscr)
               cpl
               and 1
               ld (.fullscr),a
               call bmgn.selSize
              jp Bmgn
.loupe        call .NotResMod
              ld a,#01
              ld (rmgn.fl_shundo_),a  ; ставим флаг запрета обмена undo и теневого экрана
             jp rmgn.ns_


.attrbord                    ; отображение границ атрибутов
             call IntMagnify.drawAres
             ld a,(IntMagnify.drawingAA)
             ld c,#3E  ; ld a,n
             cp #C9
            jr z,1F
             ld c,#C9  ; ret
1            ld a,c
             ld (IntMagnify.drawingAA),a
             call NOKEY_
            jp .attrborder



.preview                ; Просмотр редактируемого участка изображения
           ld a, #5F   ; #ED,#5F = ld a,r  - тупо заглушка вместо ldi
           ld c,6        ; Ширина области превью
.PrevSize EQU $-1

           ld hl,0
.MGPpixadr  EQU $-2
           ld de,#4039
           bit 0,c      ; проверяем размер превью 6 или 7  ?
          jr z, 1F
           ld de,#4019
           ld a, #A0    ; #ED,#A0 = ldi   - для размера 7
1
           ld (.prev_ldi),a
           ld (.prevC_ldi),a
           xor a
           ld (.frame_fl),a
           ld b,c
           push de
1          push bc
           ld bc,#08FF
2
           push hl
           push de
           ldi:ldi:ldi:ldi:ldi:ldi:ldi
.prev_ldi  EQU $-1
           pop de
           pop hl
           inc d
           inc h
          djnz 2B
           ld a,d
           sub 8
           ld d,a
           ld a,e
           add a,32
           ld e,a
           ld a,l
           sub #E0
           ld l,a
           sbc a,a
           and #F8
           add a,h
           ld h,a
           pop bc
          djnz 1B
           pop de
             ld hl,0
.MGPattradr  EQU $-2
            ld d, #58
            ld b,c
            ld c,d
1
             push de
             push hl
             ldi:ldi:ldi:ldi:ldi:ldi:ldi
.prevC_ldi   EQU $-1
             pop hl
             ld de,#0020
             add hl,de
             ld a,e
             pop de
             add a,e
             ld e,a
            djnz 1B

           ret



.frame                ; вывод рамки вокруг области редактирования для x8
           ld a,0
.frame_fl EQU $-1     ; bit 7 - frame flag (0-not, 1-drawed) + bits 0-6 calculator
           ld c,a
           ld b,16     ; счётчик для стёртой рамки
           and #7F
           ld a,c
          jr z,1F
           dec a
           ld (.frame_fl),a
           ret
1          cpl
           and #80
          jr z, 1F
           ld b,2   ; счётчик для прорисованной рамки
1          or b
           ld (.frame_fl),a

           ; собственно сама прорисовка
           call .frm_Hu
           call .frm_Hd
           call .frm_Vl
           call .frm_Vr
           ret

.frm_Hu    ld hl,0
.frm_hu   EQU $-2     ; верхняя горизонтальная линия
           jr 1F
.frm_Hd    ld hl,0
.frm_hd   EQU $-2     ; нижняя горизонтальная линия
1         DUP 3
           ld a,(hl)
           cpl
           ld (hl),a
           inc l
          EDUP
           ret

.frm_Vl    ld hl,0
.frm_vl   EQU $-2    ; левая вертикаль
           ld e,#01
          jr 1F
.frm_Vr    ld hl,0
.frm_vr   EQU $-2    ; правая вертикаль
           ld e,#80
1          ld c,3
1
           ld b, 8
2
           ld a,(hl)
           xor e
           ld (hl),a
           inc h
          djnz 2B
           ld a,h
           sub 8
           ld h,a
           ld a,l
           add a,32
           ld l,a
           dec c
          jr nz,1B
           ret




.zview                       ; вывод увеличенного изображения
           xor a
           ld (IntMagnify.fdrawA),a           ; обнуляем флаги вывода границ знакоместа
           ld (IntMagnify.drwPfl),a           ; и вывода линий и т.п.


           ld hl,#4000
           ld (.zviewADDR),hl
           ld (.z4viewADDR),hl
           ld hl,0
.MGpixadr  EQU $-2
           ld a,(Magnify_x8)
           or a
          jp z,.z4view
                          ; вывод 8x8
           ld de,Mgn8.Gd
           ld a,(.grid)
           or a
          jr nz, 1F
           ld de, Mgn8.Nd
1
           ld (.zview8DE),de
               ld a,0
.MGsizeY      EQU $-1
               rlca
               rlca
               rlca
               ld c,a          ; c -количество строк
.zview_lp0
               ld b,0
.MGsizeX      EQU $-1
               push hl

.zview_lp1
               push bc
               push hl        ; hl - адрес текущих данных

                    ; прорисовка корзинных пикселей v 3.12
                    ld a,#1B
                    add a,h
               ld c,(hl)
                    ld h,a
.zview_2pxUN        ld a,(hl)   ; [ ld a,(hl) / xor a] в зависимости от режима
               ld b,8
1
               ld hl,#0000
               rlc c
              jr nc,2F
               ld l,8
2              ld de,0
.zview8DE     EQU $-2
               add hl,de
              push bc
                    ld bc,#1028   ; xor-ка для 2-го пикселя
                    rlca
                   jr c,3F
                    ld bc,#0000
3

              ld de,0        ; адрес в экране
.zviewADDR    EQU $-2
              ex af,af'
              ld a,(hl)
              ld (de),a
              inc d
              inc hl

              ld a,(hl)
              ld (de),a
              inc d
              inc hl

              ld a,(hl)
                       xor c
              ld (de),a
              inc d
              inc hl

              ld a,(hl)
                       xor b
              ld (de),a
              inc d
              inc hl

              ld a,(hl)
                      xor c
              ld (de),a
              inc d
              inc hl

              ld a,(hl)
              ld (de),a
              inc d
              inc hl

              ld a,(hl)
              ld (de),a
              inc d
              inc hl

              ld a,(hl)
              ld (de),a
              inc d
              inc hl

              ld a,e
              inc a
              ld (.zviewADDR),a
              ex af,af'
             pop bc
             djnz 1B
                             ; вывели линию байта
              pop hl         ; адрес данных
              inc l
              pop bc
             djnz  .zview_lp1
                             ; вывели всю линию байтов

              pop hl
              inc h
              ld a,h
              and 7
             jr nz, 1F
              ld a,l
              sub #E0
              ld l,a
              sbc a,a
              and #F8
              add a,h
              ld h,a
1
              ld a,e
              and #E0
              add a,32
              ld (.zviewADDR),a
             jr nc, 1F
              ld a,(.zviewADDR+1)
              add a,8
              ld (.zviewADDR+1),a
1
              dec c
             jr nz,.zview_lp0

             ; out colours

.zvOUTcolor  nop          ; nop / ret

             ld hl, (RMgn4+2)
             ld a,l          ; DX
             ld (.zvLDSx),a
             ld b,h          ; DY

             ld de, 0
.MGattradr  EQU $-2
             ld hl,#5800

1
             push bc
             ld a,8
.zvLSy      EQU $-1
2
             ex af,af'

             push de
             ld c,#00
.zvLDSx     EQU $-1

3
             ld b,8
.zvLSx      EQU $-1
             ld a,(de)
4
             ld (hl),a
             inc l
            djnz 4B
             inc e
             dec c
            jr nz,3B

             dec l
             ld a,l
             and #E0
             add a,32
             ld l,a
            jr nc, 5F
             inc h
5
             pop de
             ex af,af'
             dec a
            jr nz,2B

             ld a,e
             add a,32
             ld e,a
            jr nc,6F
             inc d
6
             pop bc
            djnz 1B

           ret

.zview_2pxSwt   ld a,(Wmgn_OTHERS.Pixel2)
                cpl
                ld (Wmgn_OTHERS.Pixel2),a
                call .zview_2pxSet
               jp Bmgn
.zview_2pxSet   ld a,(Wmgn_OTHERS.Pixel2)
                or a
                ld a,#7E ; [ ld a,(hl) ]
               jr nz,1F
                ld a,#AF ; [ xor a ]
1               ld (.zview_2pxUN),a
               ret

.zvcolor_   db 7      ;   цвет монохрома

.z4view               ; hl -pix addr
           ld de,Mgn4.Gd
           ld a,(.grid)
           or a
          jr nz, 1F
           ld de, Mgn4.Nd
1
           ld (.z4view4DE),de
               ld a,0
.MGsizeY4     EQU $-1
               rlca
               rlca
               rlca
               ld c,a          ; c -количество строк

.z4view_lp0
               ld b,0
.MGsizeX4     EQU $-1
               push hl

.z4view_lp1
               push bc
               push hl        ; hl - адрес текущих данных

               ld c,(hl)
               ld b,4
1
               ld hl,#0000
               rlc c
               rlc c
               ld a,c
               and #03
               rlca
               rlca
               ld l,a

2              ld de,0
.z4view4DE     EQU $-2
               add hl,de

              ld de,0        ; адрес в экране
.z4viewADDR    EQU $-2
              ld a,b
              ex af,af'
              ld b,4
3
              ld a,(hl)
              ld (de),a
              inc d
              inc hl
             djnz 3B
              ld a,e
              inc a
              ld (.z4viewADDR),a
              ex af,af'
              ld b,a
             djnz 1B
                             ; вывели линию байта
              pop hl         ; адрес данных
              inc l
              pop bc
             djnz  .z4view_lp1
                             ; вывели всю линию байтов

              pop hl
              inc h
              ld a,h
              and 7
             jr nz, 1F
              ld a,l
              sub #E0
              ld l,a
              sbc a,a
              and #F8
              add a,h
              ld h,a
1


              ld a,d
              and 7
              ld a,e
             jr z, 3F
              and #E0
1
              ld e,a
2
              ld (.z4viewADDR),de
               dec c
             jr nz,.z4view_lp0
             jp .zvOUTcolor
3
              and #E0
              add a,32
             jr c, 1B
              ld e,a
              ld a,d
              sub 8
              ld d,a
             jr 2B


.set_PDOT  ld hl,IntMagnify.outPxDOT
           ld (IntMagnify.PxPLOTadr),hl
           ld hl,IntMagnify.outPIXEL
           ld a,3
           jr .sbcol_a
.set_PLOT  ld hl,IntMagnify.outPxPLOT
           ld (IntMagnify.PxPLOTadr),hl
           ld hl,IntMagnify.outPIXEL
           xor a
           jr .sbcol_a

.set_LINE  ld hl,IntMagnify.drawlineF
           ld a,1
          jr .sbcol_a

.set_LINEs ld hl,IntMagnify.drawlineF
           ld de,IntMagnify.drawlines
           ld b,1                       ; ld bc,nn
           ld a,2
          jr .sbcol_

.set_BOX   ld hl,IntMagnify.drawlineF
           ld de,IntMagnify.drawbox
           ld a,4
          jr .sbcol_b

.set_BOXf  ld hl,IntMagnify.drawlineF
           ld de,IntMagnify.drawboxf
           ld a,5
          jr .sbcol_b

.set_FILL
.setfilltx     call Mgn_ARW.set
               ld hl,IntMagnify.tfill
               ld a,(Texture.fselect)
               or a
              jp nz,.next_u
               ld a,6

.sbcol_a
           ld de,LINE.lineB
.sbcol_b   ld b,#11               ; ld de,nn
.sbcol_
           ld (.sbcol_op),a
           ld (IntMagnify.mgPRIMex),hl
           ld hl,IntMagnify.outPixel_
           or a
          jr z,1F
           cp 3
          jr z,1F
           ld hl,IntMagnify.plotLoupe
1          ld (LINE.plotADR),hl
           ld a,b
           ld (IntMagnify.drwfpres),a
           ld (.sbcol_fc),de             ; сделано для гор. клавы 'N'
.sbcol_Nkey
           ld hl,0
.sbcol_fc EQU $-2
           ld (IntMagnify.drawinPf),hl
           ld hl,#FFFF
           ld (IntMagnify.firstPixel),hl

           ld a,0
.sbcol_op EQU $-1
           ld l,a
           sub 4
          jr c,1F
           ld l,h
           ld h,a
1          ld a,l
           ld (ButMgn.BtPmod1),a
           ld a,h
           ld (ButMgn.BtPmod2),a
          jr .outPmnCol_


.outPxor     ld hl,#00AB  ; xor e : nop
             xor a
            jr 1F
.outPor      ld hl,#00B3   ; or e : nop
             ld a,1
            jr 1F
.outPand     ld hl,#ABB3   ; or e : xor e
             ld a,2
            jr 1F
.outPnop     ld hl,#0000   ; nop : nop
             ld a,3
1
             ld (IntMagnify.outPixMOD),hl
           ;  ld hl,ButMgn.setcol
           ;  ld b,4
.outPmnCol
            ; call SetBCol
              ld (ButMgn.BtMODop),a
.outPmnCol_  jp .next

.NotResMod   ld a,1
             ld (Bmgn.modresF),a
             ret
.DRIVE       call Driver
            jr .outPmnCol_

.addrHLDE           ; in HL - l=X, h=Y attributes / out addr in #C000+ : HL - pixels addr., DE - attrs adr.
        ld a,h
        rrca
        rrca
        rrca
        ld c,a
        and #E0
        or l
        ld l,a
        ld a,h
        and #18
        or #C0
        ld h,a
        ld e,l
        ld a,c
        and 3
        or #D8
        ld d,a
        ret

PRGB_mgn     call PRGB2
             call ScrRam
mgn_pixTB    ld hl,MgnPixTB
             ld de,#C000
            jp install_plot

MgnOTHERS
           ld ix,Wmgn_OTHERS
           call POPUP
           ld a,128+%1110
.n0        ld (ix+6),a
           ld a,(bmgn.zvOUTcolor)
           or a
          jr z,1F
           ld a,#FF
1          ld (Wmgn_OTHERS.Mono),a
           call Win_YRMB
           cp #FF
          jr z,2F
            sub 2
           jr c,.e
            cp 3  ; color
           jr z,.col
2           call CLOSE_
            or a
           jp z,bmgn.to_undo
            dec a
           jp z,bmgn.at_undo
            dec a
           jp z,bmgn.at_undo_na

           jp Bmgn

.col        call .Scol
.e          ld a,128+%1100
           jr .n0

.Scol      ld a,(REALRGB)
          push af
           ld a,(MASKRGB)
          push af
           ld a,(bmgn.zvcolor_)
           ld (REALRGB),a
           call ReMixRgb
          ; call ReDrawC
           push ix
           call PRGB_mgn  ; PRGB2

           pop ix
           ld a,(REALRGB)
           ld (bmgn.zvcolor_),a
          pop af
           ld (MASKRGB),a
          pop af
           ld (REALRGB),a
         ; call ReMixM
         ; jp ReDrawC
          ret

;----------------- обработка прерывания и редактор ------------------------




IntMagnify
              call bmgn.frame    ; мерцающая рамка
.intForM EQU $-2
              ld hl,(ARW_X)      ; l - X, h -Y in pixels
              ld a,l
              ld (.MOV_LX),a
              ld c,0           ; nop - в области редактирования
              ld a,(bmgn.preview)
              cp #C9
             jr z, 1F            ; if full screen loupe
              ld a,191
              cp l
             jr nc,1F
              ld c,#C9         ; ret - вне области редактирования

1             ld a,c
              ld (.drawingP),a
              ld (.iDfire),a
              srl h
              srl l              ; /2
              srl h
              srl l              ; /4
.dv8h         srl h
.dv8l         srl l
              ld (.hldpixel),hl           ;  смещение пикселя под стрелкой относительно лупы
              srl h
              srl l              ; /2
              srl h
              srl l              ; /4
              srl h
              srl l              ; /8
                                 ; hl смещение знакоместа под стрелкой относительно лупы
              call .drawingA      ; прорисовка границ знакоместа     a=0 or #C9

.iD

              ld bc,#00
.bxy     EQU $-2
              ld hl,#00
.hldpixel    EQU $-2             ; смещение текущего пикселя от линзы

              ld d,h
              ld e,l
              add hl,bc          ; определение координаты пикселя в экране
              ex de,hl           ; DE - current pixel

             push hl             ; Обработка клавиши Z,CS+Z,SS+Z ;/DA v3.09.f01 - 10.07.2017
              ld hl,.outPixCan0
              ld bc,#FEFE        ; CS , Z
              in a,(c)
              rra                ; CS ?
             jr c,1F
              ld hl,.outPixCan1
1             rra                ; Z ?
              ld b,0
             jr c,4F
              ld b,#7F
              in a,(c)
              rra
              rra                ; SS ?
              ld b,#10
             jr c,2F
              ld hl,.outPixCan2
2             ld (.outKeyCan),hl
4             ld a,b
              ld (.outPXkey),a
             pop hl

              ld a,(DIRECT)
              or b               ; Обработка клавиши Z,CS+Z,SS+Z ;/DA v3.09.f01 - 10.07.2017
              ld c,a
              ld a,(Fire2)
              or a
            jr nz,1F
              ld a,(BRK)
              cp 6              ; %110
             jr nz, 2F
1             set 4,c
2
              ld a,0
.Koption  EQU $-1               ; опции от горячих клавиш работающих с пикселями
              or a
              ld b,a            ; b - option at hot keys woked with pixels
             jr nz,.mvScroll
              bit 4,c
             jr z, .move
           ;   ld a,2


.mvScroll      xor a
               ld (.fScroll),a
               ld a,191
.MOV_LIM   EQU $-1
              cp 0
.MOV_LX    EQU $-1
              ret c

              push bc,de
              ld (ARWXMX),a    ; ограничиваем стрелку при нажатом файре
              cp a             ; получаем z
.MOV_CALL     call .mv_check   ; меняем на ld bc,nn для блокировки
              pop de,bc
.MOV_COM     jr nz,.mvmgn_     ; меняем на ld a,n для блокировки смещения области



              ld hl,#00
.lastpixel  EQU $-2               ; HL - последний пиксель в пересчете линзы
              ld (.lastoutPx),hl  ; для непрерывного рисования точками

              ld a,0
.iDnofire  EQU $-1
              ld (.outPXnfire),a
              or a
              ld a,5
              ld (.iDnofire),a
             jr z, 1F
              sbc hl,de
             ret z
1
              ex de,hl
               ld (.lastpixel),hl

              xor a
              ld (.count+1),a


.iDfire       nop           ; / ret
              ld a,b
              ex af,af'

              ld a,ScrPage|#10
              ld bc,#7ffd
              out (c),a
              ex de,hl

              ex af,af'  ; .Koption

              ld bc,.mgPRIMex
             jp TAB_JP


.move       ld a,0
.fScroll  EQU $-1
            or a
           jr nz,.mvScroll
            ld a,(.iDnofire)
             or a
            jr z, 1F
             dec a
             ld (.iDnofire),a


1
            push bc
            call .drawingP      ; прорисовка границ линий, боксов или окна
.mv_Wret    ld bc,.drWret
            pop bc
.count      ld a,0
            or a
           jr z,1F
            dec a
            ld (.count+1),a
            ret

1             push bc
              ld a,255
              ld (ARWXMX),a
              call .mv_check
              pop bc
              ret z
              ld a, 2             ; замедлитель скролла
              ld (.count+1),a
.mvmgn_st     ld a,STOP_ARW
              call GUI_
.mvmgn
              call bmgn.ramSCR0
             jp rmgnnq


.mvmgn_       ld a,1
              ld (.fScroll),a
              ld (ARW_X),hl
          ;    call ARRtoATR
         ;     srl h : srl l
         ;     srl h : srl l
         ;     srl h : srl l
         ;     ld (ARW_XC),hl
              call ARRPtoARWXC
             jr .mvmgn_st



.Right         ld a,1
.rlud
             ;  halt : halt

               ld de,(RMgn4)
               call .mgnmv
              jr .mvmgn
.Left          ld a,2
              jr .rlud
.Up            ld a,8
              jr .rlud
.Down          ld a,4
              jr .rlud


.mv_check     ld b,a                ; проверка на смещение in a=255 or 191 for fire
              ld hl,(ARW_X)
              ld de,(RMgn4)

              ld a,l
              cp b
              ld b,0
             jr c, 1F
             jr z,.mv_ch0
             jr nc,.mv_ch1
.mv_ch0         bit 0,c       ; x=255 or x=191 for fire
              jr z,2F
.mv_ch1         set 0,b       ; x>191 for fire or move right
              jr 2F
1             or a
             jr nz, 2F
               bit 1,c
              jr z, 2F
                set 1,b
2             ld a,h
              or a
             jr nz, 3F
               bit 3,c
              jr z, 4F
                set 3,b
               jr 4F
3             cp 191
             jr nz, 4F
               bit 2,c
              jr z,4F
                set 2,b
4
              ld a,b
              or a
              ret z

.mgnmv       ld b,h
             ld c,l
              rra
             jr nc,1F
              inc e
              ld l,192-8*4
.mgnXMR  EQU $-1
              ld c,191
.mgnXMRm EQU $-1
1             rra
             jr nc,1F
              dec e
              ld l,8*4-1
.mgnXML  EQU $-1
1             rra
             jr nc,1F
              inc d
              ld h,192-8*4
.mgnYMD  EQU $-1
1             rra
             jr nc,1F
              dec d
              ld h,8*4-1
.mgnYMU  EQU $-1
1             ld a,24
.mgnYSZ  EQU $-1
              cp d
             jr nc,2F
              inc d
              ld d,a
             jr nz,1F
              ld d,0
1             ld h,b
2             ld a,32
.mgnXSZ  EQU $-1
              cp e
             jr nc,2F
              inc e
              ld e,a
             jr nz,1F
              ld e,0
1             ld l,c
2            push hl
              ld hl,(RMgn4)
              ld (RMgn4),de
              or a
              sbc hl,de
             pop hl         ; hl возможная смена позиции курсора
             ret z
              push af
               ld b,6
1              halt
              djnz 1B
              pop af
             ret

               ; таблица процедур при нажатии файра или ряда клавиш - вход: DE - y,x - текущего пикселя.
.mgPRIMex     DW .outPIXEL     ; если нажат файр / меняется в зависимости от выбранного режима
              DW .cInvert8x8   ; 1 - I инвертирование текущего знакоместа, CS+I очистка знакоместа
              DW .cellUndo     ; 2 - CS+T/SS+T , CS+R/SS+R восстановить/обменять ячейку с корзиной



.drawingA                    ; прорисовка границ знакоместа ; in : a= 0 or #C9 , hl= ps coord attr
               or a
              jr z,.drawingAA
.drawAres      ld a,(.fdrawA ) ; стирание границ
               or a
              ret z
               ld hl,(.drCA)
              jr .drwA_1

.drawingAA    ld a,0        ; меняется на ret
.fdrawA     EQU $-1         ; флаг прорисовки

               ld de,#00
.drCA       EQU $-2          ; прежние псевдо-координаты знакоместа
               or a
              jr z,1F
              ld b,h
              ld c,l
               sbc hl,de
              ret z
              push bc
               ex de,hl
               call .drwA
              pop hl

1
               ld (.drCA),hl

.drwA          ld a,(.fdrawA)
.drwA_1        cpl
               ld (.fdrawA),a

               push hl
               ld a,(Magnify_x8)
               or a
              jr nz, 1F
               ld bc,.drwATAB4
               ld de, Mgn4.Alu
               ld hl,256*(32*3-3)+3
              jr 2F
1
               ld bc,.drwATAB8
               ld de, Mgn8.Alu
               ld hl,256*(32*7-7)+7
               ld a,#87    ; add a,a
2              ld (.drX8addA),a
               ld (.drAout_bc),hl
               pop hl
.drATBLadr EQU $-2
               add hl,hl
               ld a,l
               add a,a
.drX8addA      add a,a   ; меняем на nop для x4

               ld l,h
               ld h,0
               add hl,bc
               ld c,a
               ld a,(hl)
               inc hl
               ld h,(hl)
               add a,c
               ld l,a        ; hl - адрес вывода верхнего левого угла знакоместа
               call .drAout  ; up-left
               ld a,c
               add a,l
               ld l,a
               call .drAout ; up-right
               ld a,b
               add a,l
               ld l,a
               inc h
               inc h
               inc h
               call .drAout ; dn-left
               ld a,c
               add a,l
               ld l,a
                            ; dn-right
.drAout
               ld b,5
               ld c,h
1             ld a,(de)
              inc de
              xor (hl)
              ld (hl),a
              inc h
             djnz 1B
              ld h,c
              ld bc,0
.drAout_bc  EQU $-2
              ret

.drwATAB8    dw #4000
             dw #4800
             dw #5000

.drwATAB4    dw #4000
             dw #4080
             dw #4800
             dw #4880
             dw #5000
             dw #5080


.drawingP   nop                 ; прорисовка границ линий, боксов или окна ; in de - current pixel
             ld a,0
.drwPfl  EQU $-1                ; флаг установлено/нет
             ld b,a
             or a
           jr z,1F
            ld hl,0
.drlastpx  EQU $-2
            or a
            sbc hl,de
            ret z
1
            ld (.drlastpx),de

            ld hl,(.firstPixel)
            ld a,h
            inc a
           ret z

            push de
            push hl
             ld a,b
             or a
             ld a,1
             ld (.drwPfl),a
             call nz,.drawingPl
            pop hl
             ld (.beginPixel),hl
            pop hl
             ld (.endpixel),hl

.drawingPl
             ld c,0              ; флаг файра
             ld hl,0
.endpixel    EQU $-2    ; последний пиксель линии/бокса/окна

.drwPlepOut
             ld de,0
.beginPixel  EQU $-2

            jp LINE.lineB

.drawinPf  EQU $-2      ; адрес функции вывода

.outFire     xor a
             ret

.outPIXEL    ; in d -y , e-x
             call .outPIXel
             call bmgn.zvOUTcolor
             call bmgn.preview
.retGUI
              ld a,GUIPage|#10
              ld bc,#7FFD
              out (c),a
           ret


.outPIXel      ld a,0
.outPXnfire EQU $-1
.pix_smooth    or a             ; or a - непрерывность, xor a отключение непрерывности (плавности)
              jr z,.outPixel_
               ex de,hl         ; hl -тек пикс
               ld de,0
.lastoutPx  EQU $-2             ; de - предыдущий пиксель
              jp LINE.lineN




.outPixel_   jp .outPxPLOT
.PxPLOTadr   EQU $-2

.outPxDOT                               ; вывод пикселей в режиме жирная точка (3x3)

             ld a,(.outPXnfire)              ; флаг отпускания файра
             or a
            jr nz,1F
             ld (.PxDOTnm),a

1           push ix
             ld c,0                  ; счётчик точек
             ld ix,BUFF+18
             ld l,e
             ld h,c                  ; hl - x , d - y

              dec d
              dec hl                  ; -1,-1
             call .outPxDOT2
             inc d                   ; -1,0
             call .outPxDOT2
             inc d                   ; -1,1
             call .outPxDOT2

             ld a,c
             ld (.PxDOTnm),a
             ld de,BUFF
             ld hl,BUFF+18
             ld bc,18
             ldir
            pop ix
             ret

.outPxDOT2
            ld (.otdotbHL),hl
             call .PxDOTchk         ; -1
             inc hl
             call .PxDOTchk         ; 0
             inc hl
             call .PxDOTchk         ; 1
             ld hl,0
.otdotbHL   EQU $-2
             ret


.PxDOTchk     ld a,h
              or a
             ret nz     ; выход если X мимо экрана
              ld e,l
              ld a,d
              cp 192
             ret nc    ; выход если Y мимо экрана
             push hl
              ld b,0
.PxDOTnm    EQU $-1
              inc b
              dec b
             jr z,3F     ; если нет предыдущих точек
              ld hl,BUFF
1              ld a,(hl)
               inc hl
               cp e
              jr nz,2F
               ld a,(hl)
               cp d
              jr z,4F
2              inc hl
              djnz 1B
3              inc c
               ld (ix),e
               inc ix
               ld (ix),d
               inc ix
               push de,bc
               call .outPxPLOT
               pop bc,de
7             pop hl
              ret
4              inc c       ; если уже было
               ld (ix),e
               inc ix
               ld (ix),d
               inc ix
              pop hl
              ret



.outPxPLOT                            ; вывод пикселей в режиме точка
             call .outPixel
             ld hl,(IntMagnify.bxy)   ;проверка на попадание в лупу
             ld a,e
             sub l
             ld l,a
             ret c
             ld a,d
             sub h
             ld h,a
             ret c
             ld bc,0
.loupePXsz  EQU $-2
             ld a,l
             cp c
             ret nc
             ld a,h
             cp b
             ret nc
             ld a,(Magnify_x8)
             or a
             ld bc,0
.outPdt0   EQU $-2     ; c
.outPdt1   EQU $-1     ; b
            jr z,.outP4    ; на x4
             call ADRHL8

             ld a,(bmgn.grid)
             ld de,Mgn8.Gd
             or a
            jr nz,1F
             ld de,Mgn8.Nd
1

             call .outPI_
.outPI_
             push de
             push hl
             ld hl,8
             ld a,c
             or a
            jr z, 1F
             add hl,de
             ex de,hl
1            pop hl
             ld c,b

             ld b,8
             ld a,h
             ex af,af'
1
             ld a,(de)
             inc de
             xor (hl)
             ld (hl),a
             inc h
            djnz 1B
             ex af,af'
             ld h,a
             pop de
             ret

.outP4                          ; для x4
              ld a,#0F
              srl l
             jr c,1F
              cpl
1             ld (.outPI_4m),a
              call adrhl4    ; ADRHL4

             ld a,(bmgn.grid)
             ld de,Mgn4.Gd
             or a
            jr nz,1F
             ld de,Mgn4.Nd
1
             call .outPI_4
.outPI_4
            push de
            push hl
             ld hl,12
             ld a,c
             or a
            jr z, 1F
             add hl,de
             ex de,hl
1            pop hl
             ld c,b

             ld b,4
             ld a,h
             ex af,af'
1
             ld a,(de)
             and #F0
.outPI_4m   EQU $-1
             inc de
             xor (hl)
             ld (hl),a
             inc h
            djnz 1B
             ex af,af'
             ld h,a
             pop de
             ret




.outPixCan0   ld a,(bc)           ; Стирание точки
              or (hl)
              xor (hl)
              ld (bc),a
             ret

.outPixCan1   ld a,(bc)           ; возврат точки из UNDO
              or (hl)
              xor (hl)
              ex af,af'
              ld a,(de)
              and (hl)
              ld d,a
              ex af,af'
              or d
              ld (bc),a
             ret

.outPixCan2              ; обмен точки с UNDO
              and (hl)
              ld (.outPixCan2a),a
              ld a,(de)
              and (hl)
              ld (.outPixCan2b),a
              ld a,(de)
              or (hl)
              xor (hl)
              or 0
.outPixCan2a EQU $-1
              ld (de),a
              ld a,(bc)
              or (hl)
              xor (hl)
              or 0
.outPixCan2b  EQU $-1
              ld (bc),a
             ret

.outPixNorm                 ; Вывод точки в режиме + маска bc -adr
              ld a,b
              and 7
                add a,a  ; переделка на 16x16
                ld e,a
                ld a,c
                and #21
                rra
                adc a,e
              ld de,DMSKbuff
              add a,e
              ld e,a
              ld a,(de)
              and (hl)         ; флаг Z учитывае далее
              ld e,a
              ld a,(bc)
.mod_Sieve   jr nz,.outPixMOD  ; смотрим флаг Z от and (hl) ; меняется на jr nn - при запрете сита
              or (hl)            ; в режиме сита все 0-е биты маски обнуляют соответствующие пиксели экрана
              xor (hl)
              ld (bc),a
             ret
.outPixMOD    xor e
              nop
              ld (bc),a
             ret



.outPixel   push de
             ld hl,.outPixNorm
             ld bc,.outPixCOL

             ld a,0
.outPXkey EQU $-1
             or a
            jr z,1F

             ld hl,.outPixCan0
.outKeyCan EQU $-2
            jr 2F

1            ld a,(Fire2)
             or a
            jr nz,1F
             ld a,(BRK)
             cp 6
            jr nz,3F
1            ld hl,.outPixCan0
.outPxCanA EQU $-2
2             ld bc,Ret
3             ld (.outPxPROC),hl
             ld (.outPxCPROC),bc
             call Mgn_pixadr
              ld a,#1B
              add a,b
              ld d,a
              ld e,c     ; de - addr in UNDOscreen
             ld a,(bc)
             and (hl)
             ld (.outPdt0),a
             call .outPixNorm
.outPxPROC EQU $-2
             and (hl)
             ld (.outPdt1),a
             call .outPixCOL
.outPxCPROC EQU $-2
            pop de
             ret

.outPixCOL   ld a,b
             rrca
             rrca
             rrca
             and 3
             or #D8
             ld b,a
             ld a,(bc)
             call MIXCOL
             ld (bc),a
             ret


.exSmooth    ld a,(FlagsMgn_CUR.PixSmooth)
             ld c,#AF           ; xor a
             or a
            jr z, 1F
             ld c,#B7           ; or a
1            ld a,c
             ld (.pix_smooth),a
             ret
.selRMBmod
             ld hl,.outPixCan0
             ld a,(RadiMgn_CUR.CURrmb)
             or a
            jr z,1F
             ld hl,.outPixCan1
             dec a
            jr z,1F
             ld hl,.outPixCan2
1            ld (.outPxCanA),hl
            ret


.pixINloupe                           ; in:  de - y,x
             ld hl,(IntMagnify.bxy)   ; out: flags c - not in loupe , nc - in loupe ; de not change , hl = loupe start pixel
             ld a,e
             cp l
             ret c
             ld a,d
             cp h
             ret c
             ld bc,#00
.exy       EQU $-2               ; 1-й пиксель за пределами линзы (x=0 при 256)
             ld a,b
             dec a
             cp d
             ret c
             ld a,c
             dec a
             cp e
             ret





.norgb       ld a,(.outPixCOL)
             ld bc,#0778  ;b=color 7 , c = code ld a,b
             cp #C9
            jr z,1F
             ld bc,#05C9  ;b=color 5 , c = code ret
1
             ld a,b
             ld (ButMgn.nrgbcol),a
             ld a,c
             ld (.outPixCOL),a
            jp bmgn.next

.tfill ;  ld b,e
       ;  ld c,d
       ; jp MTFill_
             push de
             call LOADSCR
             pop hl
             ld de,BFill.fillHL     ; Вызов подпрограммы из модуля с параметром в hl ;DE - адрес подпрограммы
             ld bc,FILL_PG*256+2    ; B - страница, C - номер модуля
             call CALLSWPhl
             call SAVESCR
            jp Bmgn


.plotLoupe      ; вывод точки в линзе e=x , d=y
            call .pixINloupe
            ret c
            ex de,hl
            or a
            sbc hl,de     ; hl - координата точки в линзе
            ld a,(Magnify_x8)
             or a
            jr z,.pltLP4    ; на x4
             call ADRHL8

             ld de,Mgn8.Sp
             ld b,8
1
             ld a,(de)
             inc de
             xor (hl)
             ld (hl),a
             inc h
            djnz 1B
             ret

.pltLP4                       ; x4
              ld a,#0F
              srl l
             jr c,1F
              cpl
1             ld (.pltLP4m),a
              call adrhl4         ; ADRHL4
              ld de,Mgn4.Sp
              ld b,4
1
              ld a,(de)
              and #F0
.pltLP4m    EQU $-1
              inc de
              xor (hl)
              ld (hl),a
              inc h
             djnz 1B
              ret

.drawlines     ; вывод и настройка линий
               push bc
               call LINE.lineB
               pop bc
               ld hl,LINE.lineN
               ld a,c
               or a
               ret z
               ld (.drawinPf),hl
               ret


.drwBoxPix
                ld hl,.drwBoxPix_
                ld (.drawinPf),hl
.drwBoxPix_     ld hl,0
.dBoxPxHL  EQU $-2
                ld de,0
.dBoxPxDE  EQU $-2
               jr .drawbox

.drawboxf       ld a,c
                or a
               jr nz,.drwboxf
.drawbox        ; вывод прямоугольника
                push hl,de
                ld h,d
                call LINE.lineB  ; верх
                pop de,hl
                ld a,h
                sub d
                ld a,#24         ; inc h
                ret z
                jr c,1F
                inc a           ; dec h
1
                ld (.drwbox_),a

                push hl,de
                ld d,h
                call LINE.lineB  ; низ
                pop de,hl

.drwbox_        dec h
                push hl,de
                ld l,e
                call LINE.lineN  ; лево
                pop de,hl
                ld a,e
                cp l
                ret z
                ld e,l
                jp LINE.lineN  ; право
.drwboxf                                  ; вывод заполненного прямоугольника
                ld a,h
                sub d
                ld a,#14         ; inc d
               jr nc,1F
                inc a            ; dec d
1               ld (.drwboxf_),a
1
                push hl,de
                ld h,d
                call LINE.lineB  ; верх
                pop de,hl
                ld a,h
                cp d
                ret z
.drwboxf_       dec d
                jr 1B




.drawlineF      ; вывод линии при файре


               ld hl,#FFFF
.firstPixel   EQU $-2   ; если не #FFFF, то 1-й пиксель для функции установлен
               ld a,h
               inc a
              jr nz,.drawline_set
               ex de,hl
.sfpix_        ld (.firstPixel),hl
               ld (.beginPixel),hl
              jp .retGUI
.drawline_set  ld hl,.outPixel
               push de
               ld (LINE.plotADR),hl
               ex de,hl
               ld c,1              ; флаг файра
               call .drwPlepOut
.drwPlep_  EQU $-2
               ld hl,.plotLoupe
               ld (LINE.plotADR),hl
               call bmgn.preview
               call bmgn.zview
               pop de
               ld (.beginPixel),de
.drwfpres      ld de,#FFFF
               ld (.firstPixel),de
              jp .retGUI

.drWret        ld sp,(SPP)
               xor a
               ret

.cInvert8x8                          ; инверсия/очистка/... знакоместа
              call Mgn_pixadr
              ld a,b
              and #F8
              ld h,a
              ld l,c
           ;   call .mgn_pxadr_
              ld b,8
              ld de,.mgn_sell_bf
1             ld a,(hl)
.cInvClean    cpl : nop         ; 'nop : cpl'  / 'ld (de),a : xor a' / 'ld (de),a : nop' / 'nop : ld a,(de)' / ' ld a,(de) / nop'
              ld (hl),a
              inc h
              inc de
             djnz 1B
               dec h
               call ADRpixTOcol
               ld a,(hl)
.cInvClean2    nop          ; 'nop' / 'ld (de),a' / 'ld a,(de)'
               ld (hl),a
2              call bmgn.preview
               call bmgn.zview
             jp .retGUI

.cellUndo     call Mgn_pixadr                  ; восстановить/обменять знакоместо с корзиной
              call 3F
             jr 2B
3             ld a,b
              and #F8
              ld h,a
          ;;    call .mgn_pxadr_
          ;    add a,#1B
          ;    ld d,a
          ;    ld e,c
              ld l,c
              ld de,.mgn_sell_bf

              ld b,8
;.cellUndoC    jp 4F                 ;   jp 4F (without attrs) / call 4F (with attrs)
               call 4F
               dec h
               call ADRpixTOcol
               inc b
;4             ld a,#1B
;              add a,h

;5             ld a,(hl)
;              ex af,af'
;              ld a,(de)
;              ld (hl),a
;              ex af,af'
;.cellUndo_     ld (de),a              ; меняем на nop для восстановить
;              inc h
;              inc d
;             djnz 5B
;             ret
              ld a,(hl)
              ld (de),a
.cellUndoC   jr 5F               ; 'jr 5F / ret **'

4             ld a,(hl)
              ld (de),a         ; сохраняем в буфере копирования
              inc de
5             ex af,af'
              call RamRam
              ex af,af'
              ld c,(hl)
.cellUndo_    ld (hl),a              ; меняем на nop для восстановить 'ld (hl),a / nop'
              call ScrRam
              ld (hl),c
              inc h
             djnz 4B
             ret

.mgn_sell_bf   DB 0,0,0,0,0,0,0,0,#07


.mgn_pxadr_   call Mgn_pixadr
              ld a,b
              and #F8
              ld h,a
              ld l,c
             ret

dnhlpixL     ld a,l
             sub #E0
             ld l,a
             sbc a,a
             and #F8
             add a,h
             ld h,a
             ret
Mgn_pixadr
             ld h,high MgnPixTB
             ld l,d
             ld a,(hl)   ; поз в трети
             inc h
             ld b,(hl)   ;треть и поз в знакоместе
             inc h
             ld l,e
             or (hl)     ; + x  знакоместа
             ld c,a      ; адрес собран
             inc h       ; (hl) - маска
             ret

mgn_FILL   call sOBJnorm
           call Texture
          jp bmgn.set_FILL

Mgn_win1 ld bc,#0F0D           ; вызов с заголовком
        jr Mgn_win
Mgn_win_                       ; вызов без обаботки опций
        ld hl, 0
Mgn_win0                       ; вызов без заголовка
        ld bc,#0E0C
Mgn_win
        call POPUP
        ld a,c
        ld (.wnmsk),a
        ld a,b
1       push hl
        ld (ix+6),a
        call Win_YRMB
        pop hl
        cp #FF
      jr z,1F
        ld b,a
        ld a,h
        or l
        ld a,b
       call nz,JPHL
        ld a,%1100
.wnmsk EQU $-1
      jr  1B
1
       call CLOSE
       jp bmgn.next

Mgn_ARW         ; Смена вида курсора
            ld a,(RadiMgn_CUR.CURview)
1            or a
           jr nz, .xor
.default              ; Обычный курсор
          ;  ld a,ARW_DEFAULT
          ;  jp GUI_
            jp ARW_DEFAULT_
.set
            ld a,(RadiMgn_CUR.CURview)
            or a
           jr nz,.xor
          ;  ld a,ARW_DEFAULT
          ; jp GUI
           jp ARW_DEFAULT_

.xor        dec a
           jr nz,.crosshair
            ld de,ARWSPR+1
            ld hl,(ARW_SDISP)
            ld a,#13          ; inc de
2           ld (.incde),a
            ld (ARW_XDISP),hl
            ld hl,MgnArwspr+1
            ld b,10
3           ld a,(de)
            ld (hl),a
.incde      inc de
            inc de
            inc hl
            inc hl
           djnz 3B
            ld hl,MgnArwspr
            ld (ARW_ADR),hl
            ret
.crosshair  ld de,MgnCrosspr
            ld hl,#0303
            xor a
           jr 2B



WMgn    DB 0,0,32,24,0,0,%1000      ; Взял аналогично как в 'Magnify2.asm'   ; / DA
        DB 0
        DW Nil          ; объект-текст
        DW .SelMgn      ; объект-подсветка (выборка)
        DW HMgn         ; горячие клавиши
.mbuts  DW ButMgn       ; объект-кнопки (выборка)
        DW 4  ; Nil      ; объект-флажки
     ;   DW Nil          ; объект-радио кнопки
     ;   DW Nil          ; ползунок
     ;   DW Nil          ; вызов при создании
        DW IntMagnify   ; вызов на "прерываниях"
       DW #FFFF

.SelMgn  DB 24,0,8,8,%10
         DB #FF

;ButMgn
;+        DB 30,20,2,2,7,%11 ; 0 23 exit
;+        DW EXITS
;+        DB 24,18,2,2,6,%11 ; 1 - 4x8 switch loupe
;+ .s4x8   DW ZOOM8
;+        DB 24,10,2,2,6,%11 ; 2 - linze
;+        DW MGFS
;+        DB 24,20,2,2,7,%11 ; 3 - grid
;+ .gridcol EQU $-2
;+        DW SETKAS
;+        DB 26,20,2,2,7,%11 ; 4 - attr border
;+ .frAttrcol EQU $-2
;+        DW RAMKAS
;+        DB 28,20,2,2,7,%11 ; 5 - select cursor
;+ .selcurcol EQU $-2
;+        DW AMASKS
;+        DB 26,18,2,2,7,%11 ; 6 - others    ; View
;+        DW OTHERS
;**            ; optional
;+ .opt    DB 28,10,2,2,6,%11 ; 7 - rgb
;+        DW RGBS
;+        DB 30,10,2,2,7,%00 ; 8 - DTRS
;+ .dt_col  EQU $-2
;+        DW DTRS
;**             ; not
;+        DB 24,8,2,2,5,%11 ; 9 - xor ; группа из 4-х кнопок режимов вывода точек
;+ .setcol  EQU $-2
;+        DW XORS
;+        DB 26,8,2,2,7,%11 ; 10 - or
;+        DW ORS
;+        DB 28,8,2,2,7,%11 ; 11 - and
;+        DW ANDS
;+        DB 30,8,2,2,7,%11 ; 12 - nop
;+        DW NOPS
;+        DB 26,10,2,2,7,%11 ; 13 - no rgb ; единичный переключатель
;+ .nrgbcol EQU $-2
;+        DW NORGBS
;+        DB 24,13,2,2,5,%11 ; 14  - plot ; группа из 6-ти кнопок примитивов линзы
;+ .plotcol EQU $-2
;+        DW PLOTS
;+        DB 26,13,2,2,7,%11 ; 15  - line
;+        DW LINES
;+        DB 28,13,2,2,7,%11 ; 16  - lines
;+        DW LINES2
;+        DB 24,15,2,2,7,%11 ; 17  - box normal
;+        DW SQS
;+        DB 26,15,2,2,7,%11 ; 18  - box fill
;+        DW FILLSQS
;+        DB 28,15,2,2,7,%11 ; 19  - fill
;+ .Ifill  DW FILLS
;+        DB 30,13,2,2,7,%11 ; 20  - select pixels mask and sieve
;+        DW BOLDDOTS
;+        DB 30,15,2,2,6,%11 ; 21  - pixels mask and sieve
;+ .PmskCol EQU $-2
;+        DW PMSKBUFF
;+        DB 28,18,2,2,7,%11 ; 22 screen 2
;+        DW EK2S
;+        DB 30,18,2,2,7,%11 ; 23  undo
;+        DW UNDOS

;        DB #FF


ButMgn
           DB 96+4,64+24,128+8,128+2,2,7,%11  ; 0-3 [ xor, or , and , nop ]
            DW XORS
             DB 5  ; цвет выборки
.BtMODop     DB 0  ; номер выборки
            DW ORS,ANDS,NOPS

           DB 96+3,64+24,10,2,2,6,%11         ; 4-6 [ loupe , no rgb , rgb ]
            DW MGFS
.nrgbcol   DB 7
            DW NORGBS
           DB 6
            DW RGBS

           DB 30,10,2,2,7,%00                 ; 7 - DTRS
.dt_col  EQU $-2
            DW DTRS

           DB 96+4,64+24,128+13,128+2,2,7,%11  ; 8 - 11 [ plot, line , m_line , boldplot ]
            DW PLOTS
             DB 5  ; цвет выборки
.BtPmod1     DB 0  ; номер выборки
            DW LINES,LINES2,BOLDDOTS

           DB 96+3,64+24,128+15,128+2,2,7,%11  ; 12 - 14 [ box , fill box , fil ]
            DW SQS
             DB 5   ; цвет выборки
.BtPmod2     DB #FF ; номер выборки
            DW FILLSQS
.Ifill      DW FILLS

           DB 30,15,2,2,6,%11                   ; 15  - pixels mask and sieve
.PmskCol EQU $-2
            DW PMSKBUFF

           DB 96+4,64+24,18,2,2,6,%11           ; 16 - 19 [ x4/x8 , eMenu , swp screens , undo ]
.s4x8       DW ZOOM8
           DB 7
            DW OTHERS
           DB 7
            DW EK2S
           DB 7
            DW UNDOS

           DB 96+4,64+24,20,2,2,7,%11           ; 20 - 23 [ grid , sell border , cursors , exit ]
.gridcol EQU $-2
            DW SETKAS
.frAttrcol DB 7
            DW RAMKAS
           DB 7
            DW AMASKS
           DB 7
            DW EXITS

          DB #FF


TBMgn     ; option 0 is a linze (not used table), however button 0 is xor ))
        DW bmgn.outPxor      ; 0    -  xor
        DW bmgn.outPor       ; 1    -  or
        DW bmgn.outPand      ; 2    -  and
        DW bmgn.outPnop      ; 3    -  nop
        DW bmgn.loupe        ; 4    -  new view
        DW IntMagnify.norgb  ; 5    -  no rgb
        DW bmgn.sel_rgb      ; 6    -  rgb
        DW bmgn.sel_rgb      ; 7    -  DTRS
        DW bmgn.set_PLOT     ; 8    -  plot
        DW bmgn.set_LINE     ; 9    -  line
        DW bmgn.set_LINEs    ; 10   -  lines
        DW bmgn.set_PDOT     ; 11   -  bold dot - plot 3x3
        DW bmgn.set_BOX      ; 12   -  box normal
        DW bmgn.set_BOXf     ; 13   -  box fill
        DW mgn_FILL          ; 14   -  fill
        DW bmgn.PMask        ; 15   -  pixels mask
        DW bmgn.Lswitch      ; 16   -  4x8 switch loupe
        DW MgnOTHERS         ; 17   -  other
        DW bmgn.SCREENex     ; 18   -  screen 2
        DW bmgn.undo         ; 19   -  undo
        DW bmgn.gridEx       ; 20   -  grid
        DW bmgn.attrbord     ; 21   -  attr border
        DW mgn_cur           ; 22   -  select cursor
        DW bmgn.rExit        ; 23   -  EXIT

                                             ; Hot keys options
        DW bmgn.zview_2pxSwt ; 24   -  shadow screen pixels
        DW bmgn.fullEX       ; 25   -  Full screen loupe +/-
        DW bmgn.viewENscr    ; 26   -  ENTER view
        DW bmgn.MiniCol      ; 27   -  MiniRGB
        DW bmgn.viewMONO     ; 28   -  View screen in current colour
        DW bmgn.monocolor    ; 29   -  work in monocolour mode
        DW bmgn.monocolorA   ; 30   -  work in monocolour mode (current colour)
        DW bmgn.viewSCR2     ; 31   -  Screen  2 view
        DW bmgn.multiSCR     ; 32   -  multiscreen
        DW bmgn.takeRGB      ; 33   -  Take RGB
        DW bmgn.sbcol_Nkey   ; 34   -  New start
        DW bmgn.to_undo      ; 35   -  screen -> undoscreen
        DW bmgn.at_undo      ; 36   -  undoscreen -> screen
        DW bmgn.at_undo_na   ; 37   -  undoscreen -> screen without attributes
        DW bmgn.save         ; 38   -  save screen
        DW bmgn.load         ; 39   -  load screen
        DW bmgn.brightoff    ; 40   -  bright off
        DW bmgn.GridOn       ; 41   -  Attibutes grid +
        DW bmgn.BrightOf     ; 42   -  Attibutes grid - (swap saved bright)
        DW bmgn.DRIVE        ; 43   -  Select Drive
        DW bmgn.outPxor      ; 44   -  xor (дублируем в связи с затиранием опции)

.size   EQU  45              ; количество опций

HMgn                       ; горячие клавиши
        DB CS,"5"
         DW IntMagnify.Left
        DB CS,"O"
         DW IntMagnify.Left
        DB CS,"6"
         DW IntMagnify.Down
        DB CS,"A"
         DW IntMagnify.Down
        DB CS,"7"
         DW IntMagnify.Up
        DB CS,"Q"
         DW IntMagnify.Up
        DB CS,"8"
         DW IntMagnify.Right
        DB CS,"P"
         DW IntMagnify.Right

        DB CS,"M"
         DW 16                ; 4x8 switch loupe
        DB "M",0
         DW 4 ; 2             ; перевыбор позиции
        DB "F",0
         DW 20                ; grid
        DB "T",0
         DW  21               ; attr border
        DB "D",0
         DW  22               ; select cursor
        DB CS,"E"                                         ; CS,"X"
         DW 17                 ; others
        DB "V",0
         DW 0                  ; view
        DB "E",0
         DW 25                ; full screen +/-
        DB #0D,0
         DW 26                ; ENTER view
        DB SS,"V"
         DW 28                ; view screen in monocolour
        DB CS,"W"
         DW 29                ; work in monocolour
        DB SS,"W"
         DW 30                ; work in monocolour (select colour)

        DB "C",0
         DW  6                ; rgb
        DB CS,"C"
         DW 33                ; take RGB
        DB "K",0
         DW 27                ; MiniRGB
        DB CS,"V"
         DW 31                ; view screen 2
        DB CS,"D"
         DW 32                ; multiscreen

        DB "1",0
         DW 44               ; xor
        DB "2",0
         DW 1                ; or
        DB "3",0
         DW 2                ; and
        DB "4",0
         DW 3                ; nop
        DB "W",0
         DW 5                ; no rgb
        DB "J",0
         DW 8                ; plot
        DB "S",0
         DW 9                ; line
        DB CS,"S"
         DW 10                ; lines
        DB "B",0
         DW 12                ; box
        DB CS,"B"
         DW 13                ; fill box
        DB CS,"J"
         DW 14                ; fill
        DB SS,"J"
         DW 11                ; bold dot
        DB CS,"N"
         DW 15                ; pixels mask and  sieve
        DB  "L",0
         DW 18                ; screen2 <-> screen0
        DB "U",0
         DW 19                ; undo
        DB "R",0
         DW 24                ; shadow screen pixels
        DB "N",0
         DW 34                ; New start for lines and box
        DB "Y",0
         DW 35                ; screen -> undoscreen
        DB CS,"U"
         DW 36                ; undoscreen -> screen
        DB SS,"U"
         DW 37                ; undoscreen -> screen  without attrs / без атрибутов
        DB SS,"S"
         DW 38                ; save scr
        DB SS,"K"
         DW 38                ; save scr
        DB SS,"L"
         DW 39                ; load scr
        DB SS,"H"
         DW 40                ; bright off
        DB "G",0
         DW 41                ; attrs grid on
        DB SS,"H"
         DW 42                ; attrs bright off
        DB SS,"D"
         DW 43                ; drive

        DB "I",0                 ; invert 8x8
         DW  bmgn.Invert8x8
        DB CS,"I"                ; clean 8x8
         DW  bmgn.Clean8x8
        DB CS,"R"                ; return cell from UNDO with attrs
         DW  bmgn.cellUndoRC
        DB SS,"R"                ; return cell from UNDO without attrs
         DW  bmgn.cellUndoR
        DB CS,"T"                ; swap cell at UNDO with attrs
         DW  bmgn.cellUndoSC
        DB SS,"T"                ; swap cell at UNDO without attrs
         DW  bmgn.cellUndoS
        DB "X",0                 ; copy 8x8
         DW bmgn.Copy8x8
        DB SS,"X"                ; paste 8x8
         DW bmgn.Paste8x8
        DB CS,"X"
         DW bmgn.Paste8x8C       ; paste 8x8 with color

      ; Z ,CS/Z , SS/Z - обслуживаются на прерывании
        DB #FF


Wmgn_CURSORS
        DB 0,0,12,16,5*8,5,%1110
        DB 0
        DW TxtMgn_CURSORS          ; объект-текст
        DW SMgn_CURSORS            ; обьект-подсветка (выборка)
        DW Nil                     ; горячие клавиши
        DW Nil                     ; объект-кнопки (выборка)
        DW FlagsMgn_CUR            ; объект-флажки
        DW RadiMgn_CUR             ; объект-радио кнопки
        DW #FFFF

TxtMgn_CURSORS
        DB " "
        MSG_LOUPE_curs : DB 13,13    ; Cursor
        MSG_LOUPE_default : DB 13    ; Default
        MSG_OPER_xor : DB 13         ; XOR
        MSG_LOUPE_cros               ; Crosshair / прицел
        DB 13,15,13," "
        MSG_LOUPE_mbut2 : DB 13,13   ; Right mouse button function
        MSG_LOUPE_DelPix : DB 13     ; Delete pixel
        MSG_LOUPE_UtoPix : DB 13     ; Undo -> pixel
        MSG_LOUPE_UswPix             ; Undo <-> pixel
        DB 13,15,13
        MSG_LOUPE_Smooth : DB 13     ; smooth drawing
        MSG_LOUPE_FMove              ; прокрутка при файре
        DB 13    ;,15,13
        DB 0


SMgn_CURSORS

          DB 1,3,10,128+3,%11
          DB 1,9,10,128+3,%11
          DB 1,13,10,128+2,%11
          DB #FF


Wmgn_OTHERS  DB 0,0,19,18,5*8,5,128+%1110
             DB 0
           DW .Txt             ; объект-текст
           DW .Sel             ; обьект-подсветка (выборка)
           DW  2               ; пропуск: [ горячие клавиши ; объект-кнопки (выборка)]
           DW .Flg             ; объект-флажки
           DW  2               ; пропуск [ объект-радио кнопки ; ползунок ]
           DW .Cr              ; вызов при создании
           DW  3               ; пропуск
           DW .ColBox          ; область цвета
           DW #FFFF

.Txt      MSG_LOUPE_F2pSc   : DB #17,13,"R",13      ; теневой экран
          MSG_LOUPE_MonoCOl : DB #17,12,"CS+W",13   ; Монохром
          MSG_LOUPE_ScToUn  : DB #17,13,"Y",13      ; В корзину
          MSG_LOUPE_UnToSc  : DB #17,12,"CS+U",13   ; Из корзины
          MSG_LOUPE_UnToScM : DB #17,12,"SS+U",13   ; Из корзины без атрибутов
          DB 15,13
          MSG_LOUPE_AMonoCl : DB #17,11,"SS+W",#17,15,"COL",13   ; Цвет экрана
          DB 15,13,#17,6
          MSG_LOUPE_Boxes   : DB 13      ; Ячейки
          MSG_LOUPE_BoxOps               ; подсказки по ячейкам Wmgn_OTHERS.ColBox
         DB 0

.Sel      DB 1,1,17,128+5,%11
          DB 1,7,14,1,%11

          DB #FF

.Flg      DB 17,1,0,#00
.Pixel2 EQU $-1
            DW bmgn.zview_2pxSet
          DB 17,2,1,#00
.Mono   EQU $-1
            DW bmgn.monocolor_
         DB #FF

.Cr         ld de,#1007
            ld bc,#0201
            ld a,(bmgn.zvcolor_)
           jp SetAtrW

.ColBox   DB 1,9,17,8,5*8+1,%1
          DB 1,13,17,1,5*8+3,%1
         DB #FF


TxtCSorSSplus   DB #17,13,"ff + ",#FF


RMgn4     DB 0,0,6,6   ; рамка выбора линзы
RMgnPR    DB 0,0,7,7   ; позиция вывода и размер для preview

Mgn4
.Gd      DB #88,#00,#00,#00  ; блоки линзы 4 с сеткой
         DB #8F,#0F,#0F,#0F
         DB #F8,#F0,#F0,#F0
         DB #FF,#FF,#FF,#FF

.Nd      DB #00,#00,#00,#00  ; блоки линзы 4 без сетки
         DB #0F,#0F,#0F,#0F
         DB #F0,#F0,#F0,#F0
         DB #FF,#FF,#FF,#FF

.Sp      DB #00,#66,#66,#00          ; XOR-ка для обозначения рисуемого пикселя в линиях и боксах

.Alu     DB #70,#80,#80,#00,#00      ; XOR для левого верхнего угла знакоместа
.Aru     DB #06,#01,#01,#00,#00      ; для прав.верх.
.Ald     DB #00,#00,#80,#80,#70      ; для лев. нижн.
.Ard     DB #00,#00,#01,#01,#06      ; для прав.нижн.

.tbN
         DB #88,#00
         DB #8F,#0F
         DB #F8,#F0
.tbO
         DB #00,#44
         DB #0F,#4F
         DB #F0,#F4

Mgn8
.Gd      DB #80,#00,#00,#00,#00,#00,#00,#00 ; блоки линзы 8 с сеткой
         DB #FE,#FE,#FE,#FE,#FE,#FE,#FE,#01

.Nd      DB #00,#00,#00,#00,#00,#00,#00,#00 ; блоки линзы 8 без сетки
         DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.Sp      DB #00,#7E,#7E,#7E,#7E,#7E,#7E,#00 ; XOR-ка для обозначения рисуемого пикселя в линиях и боксах

.Alu     DB #78,#F0,#C0,#C0,#C0      ; XOR для левого верхнего угла знакоместа
.Aru     DB #1E,#1F,#03,#03,#03      ; для прав.верх.
.Ald     DB #C0,#C0,#C0,#F0,#78      ; для лев. нижн.
.Ard     DB #03,#03,#03,#1F,#1E      ; для прав.нижн.

;----------------------------------------------------------------------------------------

adrhl4        xor a   ; HL -координаты чанка 4x4
        ;      srl l
              srl h
              rla
              rlca
              rlca
              push af
              call ADRHL8
              pop af
              or h
              ld h,a
             ret


LMgn    EQU $-BMgn
     DISPLAY "MGN len      :",/a, LMgn
     ASSERT  $ < #BC00
        ENT
