        MAIN "",134

RES_TSK  LD SP,(SPP)
         CALL SAVEOBJ
         JP Main

RES_TSK2 LD SP,(SPP)
         CALL SAVEOBJ
         JP main_

RES_TSK3 LD SP,(SPP)
         CALL SAVEOBJ
         JP main

RES_TSK4 LD SP,(SPP)
         CALL SAVESCR
         CALL SAVEOBJ
         JP Main
;---------------------------------------------------------------
; Загрузка модуля из памяти
;---------------------------------------------------------------
; A  - страница расположения
; HL - адрес расположения
; DE - адрес выполнения
; BC - длина
;---------------------------------------------------------------
HL_        DW 0
DE_        DW 0
LenPgn     DW 0

; флаг наличия открытого рабочего модуля
FLAGOBJ    DB 1; 0 - WAS LOADED

LOADOBJ LD (PageObj),A
        XOR A
        LD (FLAGOBJ),A
        LD (HL_),HL
        LD (DE_),DE
        LD (LenPgn),BC
        PUSH BC
        LD A,0
PageObj EQU $-1
        CALL RAM
        LD HL,(HL_)
        LD DE,(DE_)
        POP BC
        LDIR 
        RET 

SAVEOBJ LD A,(PageObj)
        CALL RAM
        LD HL,(DE_)
        LD DE,(HL_)
        LD BC,(LenPgn)
        LDIR 
        RET 
;............................
GRIDON  CALL SV_UNDO
        CALL SV_BRT
        CALL SET_GRID
        JP Main

GRIDOFF CALL SV_UNDO
        CALL LD_BRT
        JP Main

GRIDOFF_ CALL SV_UNDO
        CALL groff
        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 

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 

UNDO:   CALL LD_UNDO
        CALL LOADSCR
        JP Main

LD_BRT  LD DE,SCREEN+6144
        LD HL,BRT_BF
        LD B,768/8
PO4     PUSH BC
        LD B,8
        LD C,(HL)
PO3     XOR A
        SRL C
        LD A,(DE)
        RES 6,A
        CALL C,SS6
        LD (DE),A
        INC DE
        DJNZ PO3
        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 
;-----------------------------------------------------
; A <- аттрибут
; A -> аттрибут с учетом установленных цветов

MIXCOL  LD (VICATR),A
        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 

; Попиксельная печать спрайта 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
;----------------------------
; Второй экран

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  DB "2-й экран",13
        DB "Поместить",13
        DB "Извлечь",13
        DB "Обменять",0

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

SwwS    LD A,ScrPage
        CALL RAM
SwpSRam LD HL,#5800
        LD DE,SCREEN+6144
        LD BC,768
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
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

NoData_ LD IX,WNoD
        CALL Window_
        CALL NOKEY_
        CALL WAITKEY_
        CALL NOKEY_
        JP CLOSE

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    DB "     Внимание!",13
        DB " Отсутствие данных",13
        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
        DEFW TxtAsk       ; объект-текст
        DEFW SelAsk       ; объект-подсветка (выборка)
        DEFW #FFFF

TxtAsk  DB "  Вы уверены?",13
        DB "  Да     Нет",13
        DB 0

SelAsk  DEFB 1,3,4,1,%11
        DEFB 5,3,5,1,%11
        DEFB #FF
;--------------------------------------------
; Работа с ASCII таблицой

RUS_LAT LD HL,(PER_TAB)
        LD DE,LAT_TAB
        AND A
        SBC HL,DE
        JR NZ,SWC1
        LD HL,RUS_TAB
        JR SWC2
SWC1    LD HL,LAT_TAB
SWC2    LD (PER_TAB),HL
        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
PER_TAB EQU $-2
        ADD HL,DE
        LD A,(HL)
        RET 

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

;             0123456789ABCDEF
LAT_TAB
        DEFB "................";0
        DEFB "................";1
        DEFB " !"
        DEFB #22;КАВЫЧКИ
        DEFB    "#$%&'()*+,-./";2
        DEFB "0123456789:;<=>?";3
        DEFB "@ABCDEFGHIJKLMNO";4
        DEFB "PQRSTUVWXYZ[\]^_";5
        DEFB "`abcdefghijklmno";6
        DEFB "pqrstuvwxyz{|}~.";7
        DEFB "................";8
        DEFB "................";9
        DEFB "................";A
        DEFB "................";B
        DEFB "...|.][....}{\..";C
        DEFB "................";D
        DEFB "..~.............";E
        DEFB "................";F

swapscr CALL LOADSCR
        LD A,RamPage
        CALL RAM
        CALL SwpSRam
        JP SAVESCR

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
        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

