
GRID_SW  call GRID_sw
        jp Main

GRID_sw  call ScrRam
         ld a,0
.fl  EQU $-1
         push af
         or a
        jr nz,1F
         call SV_BRT
         call SET_GRID
        jr 2F
1        call LD_BRT
2        pop af
         cpl
3       ld (.fl),a
       ret
groff_u  call SV_UNDO
groff_f  call groff
        jr 3B

;GRIDOFF CALL SV_UNDO
;        CALL LD_BRT
;        JP Main

GRIDOFF_ ;CALL SV_UNDO
    ;     CALL groff
         call groff_u
        JP Main

;groff   LD HL,SCREEN+6144
;        LD BC,768
;K_9     LD A,(HL)
;        RES 6,A
;        LD (HL),A
;        INC HL
;        DEC BC
;        LD A,C
;        OR B
;        JR NZ,K_9
;        RET

groff    ld hl,SCREEN+6144
         ld bc,768
1        res 6,(hl)
         inc hl
         dec bc
         ld a,b
         or c
        jr nz,1B
        ret



MSCR    CALL mscr
        JP Main

mscr    CALL NOKEY_
        CALL LOADSCR
        EI
;LZ      LD A,#18
;        LD BC,#7FFD
;        OUT (C),A
;        HALT
;        LD A,#10
;        OUT (C),A
;        HALT
;        LD A,BUTTON
;        CALL GUI
;        AND A
;        JR Z,LZ
;        RET
1       call mscr_f
        or a
       jr z,1B
       ret

mscr_b  call NOKEY_        ; смена бордюра при выводе гигаскрина для файлерного загрузчика / v 3.12
        ei
        ld a,(BORDER)
        xor 1       ; смена цвета для индикации гигаскрина
        out (#FE),a
1       call mscr_f
        call LDnF.keysB
       jr nz,2F
       jr 1B
2     ;  push af
        call RetBorder
      ;  pop af
       ret

mscr_f  ld bc,#7FFD
        ld a,#18
        out (c),a
        halt
        ld a,#10
        out (c),a
        halt
        ld a,BUTTON
       jp GUI



UNDO    CALL LD_UNDO
        CALL LOADSCR
        JP Main

LD_BRT  LD DE,SCREEN+6144     ; теперь обменивает яркость на восстановленную /DA
        LD HL,BRT_BF
        LD B,768/8
PO4     PUSH BC
        LD B,8
        LD C,(HL)
PO3   ;  XOR A
        ld a,(de)
        rla
        rla
;        SRL C
        rr c
        LD A,(DE)
        RES 6,A
;        CALL C,SS6
       jr nc,1F
        set 6,a
1       LD (DE),A
        INC DE
        DJNZ PO3
        ld (hl),c
        INC HL
        POP BC
        DJNZ PO4
        RET

;SS6     SET 6,A
;        RET

SV_BRT  LD HL,SCREEN+6144
        LD DE,BRT_BF
        LD B,768/8
PO2     PUSH BC
        XOR A
        LD B,8
PO1     LD C,(HL)
        SLA C
        SLA C
        RRA
        INC HL
        DJNZ PO1
        LD (DE),A
        INC DE
        POP BC
        DJNZ PO2
        RET

BRT_BF  DS 768/8

;SET_GRID
;        CALL groff
;        LD HL,#F7CB
;        LD (MODD1),HL
;        LD (MODD2),HL
;        CALL GRID
;        RET

;GRID    LD HL,SCREEN+6144
;        LD BC,24/2
;Lgrr    PUSH BC
;        LD BC,32/2
;Lgr     LD A,(HL)
;MODD1   SET 6,A
;        LD (HL),A
;        INC HL
;        INC HL
;        DEC BC
;        LD A,B
;        OR C
;        JR NZ,Lgr
;        LD BC,32/2
;Lm      INC HL
;        LD A,(HL)
;MODD2   SET 6,A
;        LD (HL),A
;        INC HL
;        DEC BC
;        LD A,B
;        OR C
;        JR NZ,Lm
;        POP BC
;        DEC BC
;        LD A,B
;        OR C
;        JR NZ,Lgrr
;        RET

SET_GRID
            call groff
            ld hl,SCREEN+6144
            ld c,24  ; /2
1           ld b,32/2
2           set 6,(hl)
            inc hl
            inc hl
           djnz 2B
;            ld b,32/2
;3           inc hl
;            set 6,(hl)
;            inc hl
;           djnz 3B
            ld a,1
            xor l
            ld l,a
            dec c
           jr nz,1B
           ret

;-----------------------------------------------------
; A <- аттрибут
; A -> аттрибут с учетом установленных цветов

;MIXCOL  LD (VICATR),A          ; заменил на общую маску цвета ; /DA
;        LD A,(REALRGB)
;        LD (ATTRIBUTE),A
;        LD A,(FLASH)
;        RRCA
;        CP 1
;        CALL Z,MFL
;        LD A,(BRIGHT)
;        RRCA
;        RRCA
;        CALL C,MBR
;        LD A,(PAPER)
;        CP 8
;        CALL Z,MPA
;        LD A,(INK)
;        CP 8
;        CALL Z,MINK
;        LD A,0
;ATTRIBUTE EQU $-1
;        RET

;VICATR    DB 0

;MFL     LD A,(VICATR)
;        AND #80
;        LD D,A
;        LD A,(ATTRIBUTE)
;        AND #FF-#80
;        OR D
;        LD (ATTRIBUTE),A
;        RET

;MBR     LD A,(VICATR)
;        AND #40
;        LD D,A
;        LD A,(ATTRIBUTE)
;        AND #FF-#40
;        OR D
;        LD (ATTRIBUTE),A
;        RET

;MINK    LD A,(VICATR)
;        AND #07
;        LD D,A
;        LD A,(ATTRIBUTE)
;        AND #FF-#07
;        OR D
;        LD (ATTRIBUTE),A
;        RET

;MPA     LD A,(VICATR)
;        AND #38
;        LD D,A
;        LD A,(ATTRIBUTE)
;        AND #FF-#38
;        OR D
;        LD (ATTRIBUTE),A
;        RET

MIXCOL    push de      ; вариант с маской цвета ; /DA
          ld d,#FF
MASKRGB  EQU $-1       ; маска цвета ; биты: 0 - из установок, 1 - из атрибута
          and d
          ld e,a
REALRGB  EQU $+1 : ld a,7   ; (REALRGB)
          or d
          xor d
          or e
          pop de
         ret

; Попиксельная печать спрайта 1x1
; BC - x,y
; DE - адрес спрайта

OutPix  LD A,C
        AND #07
        LD (shft+1),A

        LD A,B
        RRA
        SCF
        RRA
        RRA
        AND #5F
        LD D,A
        XOR C
        AND #07
        XOR C
        RRCA
        RRCA
        RRCA
        LD E,A
        LD A,B
        XOR D
        AND #07
        XOR D
        LD D,A

        LD A,8
i3      EX AF,AF'
        LD B,0
        LD C,(HL)
shft    LD A,0
        OR A
        JR Z,jmp1
i1      SRL C
        RR B
        DEC A
        JR NZ,i1
jmp1    LD A,(DE)
OPER1   NOP
        OR C
        LD (DE),A
        INC DE
        LD A,#1F
        AND E
        JR Z,outsc1
        LD A,(DE)
OPER2   NOP
        OR B
        LD (DE),A
outsc1  INC HL
        DEC DE
        CALL INC_YD
        LD A,D
        CP #58
        RET NC
        EX AF,AF'
        DEC A
        JR NZ,i3
        RET

OR_PUT  LD HL,#B100
        LD DE,#B000
or_put  LD (OPER1),HL
        LD (OPER2),DE
        RET

XOR_PUT LD HL,#A900
        LD DE,#A800
        JR or_put

AND_PUT LD HL,#A9B1
        LD DE,#A8B0
        JR or_put
;----------------------------
; Второй экран     ; теперь отдельный отдельный файл меню /DA

;ERDisk  LD IX,WRDisk
;        CALL Win_
;        CP #FF
;        JP Z,main_
;        LD BC,TBRDisk
;        JP TAB_JP

;WRDisk  DEFB 15,2,8,7,7*8,7,%00001111
;; Bit 0 - окно с заголовком/без
;; Bit 1 - "перерисовать" окно да/нет
;; Bit 2 - тискать окно по экрану да/нет
;; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL)
;        DEFB 0
;        DEFW TRDisk       ; объект-текст
;        DEFW SRDisk       ; объект-подсветка (выборка)
;        DEFW #FFFF

;SRDisk  DEFB 1,3,6,1,%11
;        DEFB 1,4,6,1,%11
;        DEFB 1,5,6,1,%11
;        DEFB #FF

;TRDisk
;    if rus
;        DB "2-й экран",13
;        DB "Поместить",13
;        DB "Извлечь",13
;        DB "Обменять",0
;    else
;        DB "Screen 2",13
;        DB "Put to",13
;        DB "Take from",13
;        DB "Exchange",0
;    endif


;TBRDisk DW SAVERAM
;        DW LOADRAM
;        DW SCRAM


; SAVERAM CALL LOADSCR
       ; LD A,RamPage
       ;  CALL RAM
       ;  LD HL,#4000
       ;  LD DE,#C000
       ;  LD BC,6912
       ;  LDIR
       ;  JP Main

; LOADRAM  LD A,RamPage
        ; CALL RAM
        ; LD HL,#C000
        ; LD DE,#4000
        ; LD BC,6912
        ; LDIR
        ; LD A,ScrPage
        ; CALL RAM
        ; LD HL,#4000
        ; LD DE,#C000
        ; LD BC,6912
        ; LDIR
        ; JP Main
; SCRAM   CALL LOADSCR
      ;  LD A,RamPage
      ;  CALL RAM
      ;  CALL SwpSRam
      ;  CALL SAVESCR
      ;  JP Main


; saveRAM    call LOADSCR
;           call SwapUnShad   ; теперь при записи в теневой экран, его бывшее содержимое уходит в корзину
;          jp SAVESCR2

; loadRAM    call LOADSCR2
;           call SV_UNDO      ; теперь при извлечении из теневого экрана, содержимое основного уходит в корзину
;          jp SAVESCR

;SCram      call SwapSCRS     ; при обмене экранов корзина не меняется ; теперь в 'Screens.asm' /DA
;          jp LOADSCR
           ; Есть в 'Screens.asm'

SAVERAM    call saveRAM
          jr 1F
LOADRAM    call loadRAM
          jr 1F
SCRAM      call SCram
1         jp Main


; PRN8s - erased/ удалил /DA

ldscrRamS_  call LOADSCR
           jp RamRam
SCROLLLEFT
   ; CALL LOADSCR
       ; LD A,RamPage
       ; CALL RAM
    ;    call RamRam
         call ldscrRamS_
        ld hl,#4000
    ld e,1
    call SCROLLHOR
e_scrl_ CALL SAVESCR
        JP Main
SCROLLRIGHT
   ; CALL LOADSCR
     ;   LD A,RamPage
     ;   CALL RAM
       ;  call RamRam
         call ldscrRamS_
        ld hl,#401f
    ld e,-1
     call SCROLLHOR
       ;  CALL SAVESCR
       ; JP Main
        jr e_scrl_


SCROLLDOWN
   ; CALL LOADSCR
     ;   LD A,RamPage
     ;   CALL RAM
        ;  call RamRam
         call ldscrRamS_
        ld hl,#47e0
    ld de,#f8e0
    ld ix,#8398
    call SCROLLVERT
       ;  CALL SAVESCR
       ;  JP Main
        jr e_scrl_
SCROLLUP
 ;   CALL LOADSCR
     ;   LD A,RamPage
     ;   CALL RAM
       ;  call RamRam
         call ldscrRamS_
        ld hl,#4000
    ld de,#0820
    ld ix,#7d68
     call SCROLLVERT
       ;  CALL SAVESCR
       ;  JP Main
        jr e_scrl_

SCROLLHOR
SCROLLHOR0
    push hl
    ld b,32
SCROLLHOR3
    ld a,(hl)
    ex af,af'
    ld (hl),a
    ld a,l
    add a,e ;1
    ld l,a
    djnz SCROLLHOR3
    pop hl
    ld a,h
    xor #80
    ld h,a
    jp m,SCROLLHOR0
    ex af,af'
    ld (hl),a
    ld a,l
    add a,32
    ld l,a
    adc a,h
    sub l
    ld h,a
    cp #5b
    jr nz,SCROLLHOR0
    ret

SCROLLVERT
    push hl
    ld b,32
SCROLLVERT0
    push bc
    push hl
    ld b,8
SCROLLVERT1
    push bc
    ld c,2*3
SCROLLVERT2
    ld b,8
SCROLLVERT3
    ld a,(hl)
    ex af,af'
    ld (hl),a
    ld a,l
    add a,e ;32
    ld l,a
    djnz SCROLLVERT3
    ld a,h
    add a,d ;8
    ld h,a
    add a,a
    sub #40*2
    cp #18*2
    jr c,$+6
    ld a,h
    add a,lx ;-(#80+#18)
    ld h,a
    dec c
    jr nz,SCROLLVERT2
    ex af,af'
    ld (hl),a
    pop bc
    inc h
    djnz SCROLLVERT1
    pop hl
    pop bc
    inc l
    djnz SCROLLVERT0
    pop hl
    ld a,h
    and #80
    add a,#58
    ld h,a
    ld b,32
SCROLLVERTA0
    push bc
    ld c,2*3
SCROLLVERTA2
    ld b,8
SCROLLVERTA3
    ld a,(hl)
    ex af,af'
    ld (hl),a
    ld a,l
    add a,e ;32
    ld l,a
    djnz SCROLLVERTA3
    ld a,d
    rla
    sbc a,a
    ccf
    ;a+cy=+-1
    adc a,h
    ld h,a
    add a,a
    sub #58*2
    cp 3*2
    jr c,$+6
    ld a,h
    add a,hx ;-(#80+3)
    ld h,a
    dec c
    jr nz,SCROLLVERTA2
    ex af,af'
    ld (hl),a
    pop bc
    inc l
    djnz SCROLLVERTA0
    ret


; SwwS    LD A,ScrPage   ; перенёс в Screens.asm /DA
;        CALL RAM
;SwpSRam LD HL,#5800
;        LD DE,SCREEN+6144
;        LD BC,768
;    CALL SwpSRAMPP
;;G        LD A,(HL)
;;         EX AF,AF'
;;         LD A,(DE)
;;         LD (HL),A
;;         EX AF,AF'
;;         LD (DE),A
;;         INC HL
;;         INC DE
;;         DEC BC
;;         LD A,C
;;         OR B
;;         JR NZ,G

;        LD HL,#4000
;        LD DE,SCREEN
;        LD BC,6144
;SwpSRAMPP
;K       LD A,(HL)
;        EX AF,AF'
;        LD A,(DE)
;        LD (HL),A
;        EX AF,AF'
;        LD (DE),A
;        INC HL
;        INC DE
;        DEC BC
;        LD A,C
;        OR B
;        JR NZ,K
;        RET

NoData  CALL NoData_
        JP Main

;SwapSCRS                   ; обмен экранов /DA  - перенёс в Screens.asm /DA
;           ld a,ScrPage
;           call RAM
;           ld hl,SCREEN
;           ld de,#A500
;           ld bc,6912
;           call .swp
;           ld a, RamPage
;           call RAM
;           call .swp
;           ld a,ScrPage
;           call RAM
;.swp
;           push hl,de,bc
;           call SwpSRAMPP
;           pop bc,de,hl
;          ret

; Сообщение "Нет данных"
NoData_ LD IX,WNoD
MsgWIN_ CALL Window_
        CALL NOKEY_
        CALL WAITKEY_
     ;   CALL NOKEY_
     ;   JP CLOSE
       jp CLOSENK_

WNoD    DEFB 9,7,14,6,2*8+7,7,%00001111
; Bit 0 - окно с заголовком/без
; Bit 1 - "перерисовать" окно да/нет
; Bit 2 - тискать окно по экрану да/нет
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL)
        DEFB 0
        DEFW TNoD         ; объект-текст
        DEFW #FFFF

TNoD
  ;  if rus
  ;      DB "     ",#82,#ad,#a8,#ac,#a0,#ad,#a8,#a5,'!',13; Внимание!",13
  ;      DB #20,#8e,#e2,#e1,#e3,#e2,#e1,#e2,#a2,#a8,#a5,#20,#a4,#a0,#ad,#ad,#eb,#e5,13;" Отсутствие данных",13
  ;      DB #a8,#ab,#a8,#20,#ad,#a5,#a2,#a5,#e0,#ad,#eb,#a9,#20,#e4,#ae,#e0,#ac,#a0,#e2,0;"или неверный формат",0
  ;  else
  ;      DB "     Warning!",13
  ;      DB "No data",13
  ;      DB "or wrong format",0
  ;  endif

      MSG_DATA_ERROR
      DB 0

;--------------------------------------------
;ASK     LD IX,WAsk
;        CALL Win_
;        CALL CLOSE_
;        AND A
;        JP NZ,scf
;        XOR A
;        RET

;WAsk    DEFB 11,9,11,5,2*8+7,7,%00001111,0
;WAskTx  DEFW TxtAsk       ; объект-текст
;        DEFW SelAsk       ; объект-подсветка (выборка)
;        DEFW #FFFF

;TxtAsk
 ;   if rus
 ;       DB "  ",#82,#eb,#20,#e3,#a2,#a5,#e0,#a5,#ad,#eb,'?',13;Вы уверены?",13
 ;       DB "  ",#84,#a0,"     ",#8d,#a5,#e2,13;Нет",13
 ;   else
 ;       DB "Are you sure?",13
 ;       DB "  Yes    No",13
 ;   endif

;SelAsk  DEFB 1,3,4,1,%11
;        DEFB 5,3,5,1,%11
;        DEFB #FF

; ------------------------------------------------------------------------
ASK_SAVEin  ld hl,FILE_NAME       ; запрос на запись в выбранный файл
            ld de,TxtAskDfn
            ld bc,8
            ldir
            inc de
            ld a,FormExt
            call GUI
            ld hl,TxtAskD
          jr AskQ

; Предупреждение с запросом да/нет (yes/no), регистры не сохраняются
; Out:  set flags 'nz' and 'c' for Not,

ASK          ld hl,T_ASK      ; Вы уверены ?
            jr AskQ
AskAddP      ld hl,T_ClAddP   ; Страница данных может быть испорчена !

AskQ         ld (WAskQ.TAadr),hl     ; in  HL <- string addres (адрес строки предупреждения)
             ld ix,WAskQ             ; строка до 38 символов
             ld (ix+6),%1111
             call Win_
           ;  push af
           ;  call CLOSE
           ;  pop af
             call CLOSE_
             or a
            ret z
             scf
            ret

TxtAskD       MSG_SAVEin
TxtAskDfn     DB "12345678.9AB",13
              DB 0


WAskQ DB 3,9,26,8,2+7*8,7+2*8,%1111
; Bit 0 - окно с заголовком/без (window with title)
; Bit 1 - "перерисовать" окно да/нет (redraw window)
; Bit 2 - тискать окно по экрану да/нет (movable window)
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL by clicking outside the window)
       DB 0          ; запасной байт-флаг (reserved for flags)
       DW .TA        ; объект-текст (text object)
       DW .SA        ; объект-подсветка (выборка) (highlighting object)
       DW .HA        ; горячие клавиши (hotkeys)
       DW #FFFF

.TA       MSG_CheckT   : DB 13,13
          MSG_ChContin : DB 13,22,4,6," "
          MSG_No  : DB 13,22,18,6," "
          MSG_Yes : DB 13,22,1,3,#0A
.TAadr    DW T_ASK
          DB 0

.SA       DB 18,6,4,1,%11  ; 0
          DB 4,6,4,1,%11   ; 1
          DB #FF

.HA          DB 13,0
             DW 0
            DB #FF

T_ASK     MSG_DATA_Ask   ; вы уверены ?
         DB 0
T_ClAddP  MSG_ClAddP     ; Страница данных может быть испорчена !
         DB 0


;-------------------------------------------
; заполнение области чанком   v3.12 /DA
; in: B - sx , C - sy , D - x , E - y , A - cnk

FA_cnk        ld l,a
              ld h,0
              add hl,hl
              add hl,hl
              push de
              ld de,CTB
              add hl,de
              ld (.de),hl
              pop de
              call RASCH
              sla c
1             ld de,0
.de         EQU $-2
              push bc
              ld c,4
2             push bc
              push hl
              ld a,(de)
              inc de
3              ld (hl),a
               inc l
              djnz 3B
              pop hl
              call INC_Y
              pop bc
              dec c
             jr nz,2B
              pop bc
              dec c
             jr nz,1B
             ret

; сообщение мало памяти

Errmem     ; мало памяти
            ld ix,.Werrmem
            ld (ix+6),%1110
      ;      call Win_
      ;     jp CLOSE
           jp MsgWIN_

.Werrmem   DB 8,10,15,3,2+7*8,7+2*8,%1110
           DB 0          ; запасной байт-флаг (reserved for flags)
           DW .Terrmem   ; объект-текст (text object)
           DW #FFFF

.Terrmem    MSG_NoMem_
            DB 0

pausa_       ld b,4
.l           halt
            djnz .l
            ret

SWP_But2toFIRE2  ld a,(MBut2toFire2)
                 cpl
                 ld (MBut2toFire2),a
                ret

mPut   DB "PUT",0      ; режимы вывода
mSpr   DB "Spr",0
mOR    DB " OR",0
mAND   DB "AND",0
mXOR   DB "XOR",0
mNOP   DB "NOP",0
mRet   DB "Ret",0
mMSK   DB "MSK",0

mNMS   DB "NoM",0     ; No Mask / без маски
mOMS   DB "OnM",0     ; Only Mask / только маска

mGetModAdr_              ; извлечени по *3  in: bc - начало a- номер ; out: hl-содержимое
             ld l,a
             add a,a
             add a,l
             ld h,0
             ld l,a
            jp TAB_HL.bc

GetNumA     push hl
            ld c,0
            ex af,af'
            ld a,GET_NUM
            call GUI
            pop HL
           ret

GetNumHL   push af         ; in de - text, hl - num
           ld c,1
           ld a,GET_NUM
           call GUI
           pop af
          ret

;--------------------------------------------
; last undo useds with current page=guipage        v3.12
;           used screen at screen page and screen at sux page

LastUndo      ld a,(SaveLUndo+1)  ; текущий номер страницы
              push af
              call Ram
              call SWAP_SCR.T
              pop af
              xor 1
              call Ram
              call InitLUndo.sv
1            jp guiRAM
SaveLUndo     ld a,ScrPage|#10  ; SuxPage=1 or ScrPage=0
2             call Ram
              xor 1           ; смена страницы 0/1
              ld (SaveLUndo+1),a
              call InitLUndo.sv
             jr 1B
SuxLUndo      ld a,(SaveLUndo+1)
              and 1
             ret nz
InitLUndo     call P_strt          ; запись из страницы экрана в sux
              ld a,SuxPage|#10
              ld (SaveLUndo+1),a
             ret
.sv           ld hl,#4000          ; запись экрана
              ld de,#C000
             jp LOADSCR.ldir_

;--------------------------------------------
; Работа с маской окна
wmbooframka     ; ставит рамку маски
               ld hl,BmBUFF   ; очистка буфера крайней маски
               push hl
               ld b,33
1              ld (hl),0
               inc hl
              djnz 1B
               pop hl

               ld ix,WinXU     ; создание крайней маски в BmBUFF
               ld e,(ix+2) ; .csx
               ld d,0
               ld a,(ix+3) ; .csy
               add a,a
               add a,a
               add a,a
               ld (wmbooframka.lsnY),a
               ld b,a
               ld a,(ix+4) ; .dx
               or a
               ld c,a
              jr z,2F

               ld a,#FF   ; начало крайней маски
1              or a
               rra
               dec c
              jr nz,1B
               cpl
               ld (hl),a

2             ; установка крайней маски последнего байта
               add hl,de
               ld (hl),#FF
               dec hl
               ld a,(ix+4)  ; .dx
               add a,(ix+8) ; .dsx
               inc a
               and 7
               ld b,a
               ld a,#FF
              jr z,2F
               xor a
1              scf
               rra
              djnz 1B
2              cpl
               or (hl)
               ld (hl),a         ; маска в BmBUFF создана

                ld hl,WinMskBoof
                ld c,0
.lsnY   EQU $-1
                ld a,(ix+5)  ; смещение до начала по y
                or a
               jr z,3F
1               ld b,(ix+2)  ; верх
2               ld (hl),#FF
                inc hl
               djnz 2B
                dec c
               ret z
                dec a
               jr nz,1B
3               ld a,(ix+9)  ; размер в пикс. по y
                inc a
                ld de,BmBUFF
1               ex af,af'
                ld b,(ix+2)
                push de
2               ld a,(de)
                or (hl)
                ld (hl),a
                inc de
                inc hl
               djnz 2B
                pop de
                ex af,af'
                dec c
               ret z
                dec a
               jr nz,1B
1               ld b,(ix+2)  ; низ
2               ld (hl),#FF
                inc hl
               djnz 2B
                dec c
               jr nz,1B
               ret

wnCNK_curbyte    ld bc,(FA_cnk.de)  ; - адрес данных чанка окружения для окна
                 ld a,h
                 and 3
                 add a,c
                 ld c,a
                jr nc,1F
                 inc b
1                ld a,(bc)
                ret


EXcnknum_       ld hl,dbEXcnknum1_
                or a
               jr z,1F
                ld hl,dbEXcnknum_
1               ld a,4
cnkWnum_   EQU $-1
                ld b,6
1               cp (hl)
                inc hl
               jr z,2F
               djnz 1B
2               ld a,(hl)
                ld (cnkWnum_),a
               ret

dbEXcnknum_   DB 0,2,4,12,14,15
dbEXcnknum1_  DB 0,15,14,12,4,2,0



bytemirror_     exx          ; переворот байта
                ld c,a       ; Alone Coder procedure
                rlca
                rlca
                xor c
                and %10101010
                xor c
                ld c,a
                rlca
                rlca
                rlca
                rrc c
                xor c
                and %01100110
                xor c
                exx
               ret

;               exx
;               ld b,8    ; дольше но меньше места /DA
;1              rra
;               rl c
;              djnz 1B
;               ld a,c
;               exx
;              ret






;--------------------------------------------
; Работа с ASCII таблицой

RUS_LAT         ; таблицы по 256 байтов, значит отличаются только старшие байты адресов. /DA v3.12
;        ld hl,LAT_TAB
;        ld a,(PER_TAB+1)  ; старший байт текущего адреса
;        cp h
;       jr nz,1F
;        inc h             ; переходим на RUS_TAB
;1       ld (PER_TAB),hl
;       ret
         ld a,(PERECOD.hiTAB_)
         xor ((high RUS_TAB)^(high LAT_TAB))
         ld (PERECOD.hiTAB_),a
        ret


CAPS    LD A,(23658)
        AND A
        JR NZ,LOCK1
        LD A,8
        JR LOCK2
LOCK1   XOR A
LOCK2   LD (23658),A
        RET

PERECOD LD L,A
        LD H,0
        LD DE,LAT_TAB
.hiTAB_ EQU $-1 ; старший байт таблицы
;PER_TAB EQU $-2
        ADD HL,DE
        LD A,(HL)
        RET

; Таблицы перекодировки 2 по 256 байт, вначале нормальная латинская LAT_TAB,
; затем альтернативная RUS_TAB

;         0123456789ABCDEF    ; Эта раскладка переписывается шаблоном из 'SetUp.asm'
LAT_TAB
    DEFB "................";0
    DEFB "................";1
    DEFB " !"
    DEFB #22  ;КАВЫЧКИ
    DEFB    "#$%&'()*+,-./";2
    DEFB "0123456789:;<=>?";3
    DEFB "@ABCDEFGHIJKLMNO";4
    DEFB "PQRSTUVWXYZ[",#5C,"]^_";5
    DEFB "`abcdefghijklmno";6
    DEFB "pqrstuvwxyz{|}~",#7F ;7
    DEFB "................";8
    DEFB "................";9
    DEFB "................";A
    DEFB "................";B
    DEFB "...|.][....}{",#5C,"..";C
    DEFB "................";D
    DEFB "..~.............";E
    DEFB "................";F
;         0123456789ABCDEF
RUS_TAB
    DEFB "................";0
    DEFB "................";1
    DEFB " !"
    DEFB #22;КАВЫЧКИ
    DEFB    "#$%&'()*+,-./";2
    DEFB "0123456789:;<=>?";3
    DEFB "ЮАБЦДЕФГХИЙКЛМНО";4
    DEFB "ПЯРСТУЖВЬЫЗ[",#5C,"]Ч_";5
    DEFB "юабцдефгхийклмно";6
    DEFB "пярстужвьыз{|}~",#7F ;7
    DEFB "................";8
    DEFB "................";9
    DEFB "................";A
    DEFB "................";B
    DEFB "...Э.ЩШ....щшэ..";C
    DEFB "................";D
    DEFB "..ч.............";E
    DEFB "................";F

keyboardL   DB 0               ; тип раскладки клавиатуры
keybfileL   DB "keyboardkbd",0


; kempston joystick
joy_buts   DB 0               ; флаг использования дополнительных кнопок джойстика
joy_but1   DB 1               ; клавиши подвешенные на доп. 1-кнопку джойстика (0-я всегда fire)
joy_but2   DB 2               ; клавиши подвешенные на доп. 2-кнопку джойстика
joy_but3   DB 3               ; клавиши подвешенные на доп. 3-кнопку джойстика
joy_bsmsk  DB 0               ; маска дополнительных клавиш

; swapscr CALL LOADSCR   ; есть почти дубликат в 'Screens.asm' /DA
;         LD A,RamPage
;         CALL RAM
;         CALL SwpSRam
;         JP SAVESCR

; спрайты для объектов     ; вернул в 'Objects.asm' (return to 'Objects.asm')

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

CTB     DEFW #0000
        DEFW #0000
        DEFW #0088
        DEFW #0000
        DEFW #0088
        DEFW #0022
        DEFW #0088
        DEFW #00AA
        DEFW #00AA
        DEFW #00AA
        DEFW #44AA
        DEFW #00AA
        DEFW #44AA
        DEFW #11AA
        DEFW #44AA
        DEFW #55AA
        DEFW #55AA
        DEFW #55AA
        DEFW #55AA
        DEFW #55BB
        DEFW #55EE
        DEFW #55BB
        DEFW #55FF
        DEFW #55BB
        DEFW #55FF
        DEFW #55FF
        DEFW #77FF
        DEFW #55FF
        DEFW #77FF
        DEFW #DDFF
        DEFW #FFFF
        DEFW #FFFF


;CT      DEFW #0000     ; перенёс в Chnk1.asm   /DA
;        DEFW #0000
;        DEFW #0010
;        DEFW #0000
;        DEFW #0010
;        DEFW #0000
;        DEFW #0010
;        DEFW #0000
;        DEFW #0011
;        DEFW #0000
;        DEFW #0011
;        DEFW #0000
;        DEFW #0011
;        DEFW #0044
;        DEFW #0011
;        DEFW #0044
;        DEFW #0055
;        DEFW #0044
;        DEFW #0055
;        DEFW #0044
;        DEFW #0055
;        DEFW #0055
;        DEFW #0055
;        DEFW #0055
;        DEFW #2255
;        DEFW #0055
;        DEFW #2255
;        DEFW #0055
;        DEFW #2255
;        DEFW #8855
;        DEFW #2255
;        DEFW #8855
;        DEFW #AA55
;        DEFW #8855
;        DEFW #AA55
;        DEFW #8855
;        DEFW #AA55
;        DEFW #AA55
;        DEFW #AA55
;        DEFW #AA55
;        DEFW #BB55
;        DEFW #AA55
;        DEFW #BB55
;        DEFW #AA55
;        DEFW #BB55
;        DEFW #EE55
;        DEFW #BB55
;        DEFW #EE55
;        DEFW #FF55
;        DEFW #EE55
;        DEFW #FF55
;        DEFW #EE55
;        DEFW #FF55
;        DEFW #FF55
;        DEFW #FF55
;        DEFW #FF55
;        DEFW #FF77
;        DEFW #FF55
;        DEFW #FF77
;        DEFW #FF55
;        DEFW #FF77
;        DEFW #FFDD
;        DEFW #FF77
;        DEFW #FFDD
;        DEFW #FF77
;        DEFW #FFFF
;        DEFW #FF77
;        DEFW #FFFF
;        DEFW #FFFF
;        DEFW #FFFF
;        DEFW #FFFF
;        DEFW #FFFF
