        ORG #8000
MAINJP  JP GETADDR
        JP RELOAD
        JP RELOAD1
        JP MAINSTR
        JP MARKF
        JP DSOUR
        JP DDEST
        JP SETSUM
        JP GETSUM
        JP PBUFF
        JP GBUFF
        JP SETSCR
        JP KEYPRES
        JP WAITKEY
        JP MOVEMRK
        JP SETD1
        JP SETD2
        JP SETDD
        JP SETST
        JP RDFILE
        JP WRFILE
        JP INIBANK
        JP ASKDRV
        JP ASKDRV1
        JP SETDRV0
        JP SETDRV
        JP RESDRV
        JP JPDOS
        JP IM1ON
        JP IM2ON
        JP SETTRK
        JP MULT64
        JP MULT32
        JP MULT16
        JP PRFILE
        JP ADRF1
        JP ADRF2
        JP EXHD
        JP INIMARK
        JP INTERR
        JP CLOCK
        JP RDCMOS
        JP RDCMOS2
        JP INKEY_A
        JP INKEY_B
        JP KEYMAIN
        JP JPKEY
        JP LOADCAT
        JP SAVECAT
        JP SORTCAT
        JP CDISK
        JP CLEAR20
        JP CLEAR21
        JP CLEAR
        JP CL1
        JP CLS
        JP LDIRHL
        JP LOAD
        JP SAVE
        JP SETRAM
        JP POSIT1
        JP TURBO5
        JP TURBO8
        JP RESERR
        JP RESET
        JP ERRDRV2
        JP ERRDRV3
        JP DESCR
        JP ATTRIB
        JP ATRDE
        JP NUMBER1
        JP NUMBER2
        JP PRFEXT
        JP PRLEN8A
        JP PRLEN8
        JP PRLEN
        JP PRCL20
        JP PRCL21
        JP PRINT
        JP MULT6X
        JP PRD1B
        JP PRH1B
        JP PRD2B
        JP PRH2B
        JP SRFCAT
        JP SRFC4
        JP PAGE
        JP FILE3
        JP FILE6
        JP INPNUM1
        JP INPNUM2
        JP INPUT
        JP CURS_I
        JP GETNUM
        JP ANALYSE
        JP PRFILE
        JP CURS1
        JP SRFRAM

        ORG #81B0
MAINADR DW RELOAD
        DW RELOAD1
        DW RDF1
        DW RDF3
        DW RDF4+1
        DW WRF1
        DW WRF3
        DW WRF4+1
        DW INIBNK1
        DW CLOCK1+1
        DW INKEY6+3
        DW ERRDOS4+1
        DW ERRDRV+3
        DW FILE7+1
        DW FILE7+4
        DW HOTOVR
        DW BUFFCAT
        DW BUFFSYS
        DW BUFFEXE
        DW BUFF_S
        DW BUFF_I
        DW BUFF_X
        DW BUFF_N

        ORG #8200
GETADDR PUSH DE
        LD DE,MAINADR
        LD H,0
        LD L,A
        ADD HL,HL,HL,DE
        LD E,(HL)
        INC HL
        LD D,(HL)
        EX DE,HL
        POP DE
        RET

START   CALL CLS,IM2ON
        LD HL,RELOAD
        PUSH HL
        LD A,(IX-90)
        CP 8
        JR C,START1
        LD A,(IX-92)
        CP 8
        RET NC
START1  LD A,(IX-120)
        AND A
        CALL NZ,CHRAMD0
        RET

MODE    LD A,(IX-89)
        AND A
        JR Z,FILE
        DEC A
        JR NZ,MODE1
        LD A,(IX-83)
        AND A
        JP NZ,EXE
MODE1   DEC A
        JP Z,CAT
        DEC A
        JP Z,SYS1
        DEC A
        JP Z,BCOPY
FILE    CALL CLS
FILE1   CALL INIFILE
FILE2   CALL HEADERS
FILE3   CALL PRFILE
FILE4   CALL D_INFO
FILE5   CALL CURS1,DESCR
FILE6   CALL INKEY_A,KEYMAIN
FILE7   LD HL,KFILE1
        LD DE,KFILE2
        CALL JPKEY
        JR FILE6

CPTOP   POP HL
        LD A,(IX-88)
        AND A
        JR CPBOT1
CPBOT   POP HL
        LD A,(IX-88)
        INC A
CPBE1   CP (IX-84)
        JR NC,FILE6
CPBOT1  JR Z,FILE6
        PUSH HL
CURS1   EXA
        LD B,7
        CALL SETXY1,ATRDE
CURS12  LD A,(HL)
        XOR #50
        LD (HL),A
        INC HL
        DJNZ CURS12
        EXA
        RET

F_LF    CALL CPTOP
        SUB 16
        JR NC,F_LF2
F_LF1   XOR A
F_LF2   LD (IX-88),A
        LD B,(IX-85)
        AND 64
        LD (IX-85),A
        CP B
        JR Z,FILE5,FILE3
F_RT    CALL CPBOT
        ADD A,15
F_RT1   CP (IX-84)
        JR C,F_LF2
F_RT2   LD A,(IX-84)
        DEC A
        JR F_LF2
F_DN    CALL CPBOT
        JR F_LF2
F_UP    CALL CPTOP
        DEC A
        JR F_LF2
F_PGUP  CALL CPTOP
        SUB 64
        JR C,F_LF1,F_LF2
F_PGDN  CALL CPBOT
        ADD A,63
        JR F_RT1

EXE     BIT 2,(IX-96)
        JP NZ,FILE6
        LD A,(IX-83)
        AND A
        JP Z,FILE6
        CALL SETCURS,INIEXE,CLEAR21
        LD HL,FILE1
        LD DE,BUFFEXF
        LD BC,EXE-FILE3
        LDIR
        LD HL,INIEXE
        LD (BUFFEXF+1),HL
        JP BUFFEXF

MARK    LD A,(IX-89)
        DEC A
        JP Z,BUFFEXF+18
        LD A,(IX-84)
        AND A
        JP Z,FILE6
        CALL ADRF1
        PUSH HL
        POP IY
        LD A,(HL)
        CP 1
        JP Z,F_DN
        RLA
        LD HL,(VARS-81)
        LD B,0
        LD C,(IY+13)
        JR NC,MARK1
        RES 7,(IY)
        AND A
        SBC HL,BC
        DEC (IX-82)
        JR MARK2
MARK1   SET 7,(IY)
        ADD HL,BC
        INC (IX-82)
MARK2   LD (VARS-81),HL
        CALL MARK_I,PRF2,CURS1
        JP F_DN

MARKALL LD A,(IX-84)
        AND A
        JP Z,FILE6
        PUSH AF
        LD HL,BUFF_I
        LD BC,11
        LD (HL),B
        CALL LDIRHL
        LD HL,BUFF_I+8
        LD (HL),46
        PUSH HL
        LD HL,MASKTXT
        CALL PRCL20
        LD D,12
        CALL INPUT,CLEAR20
        POP DE
        LD HL,BUFF_I+9
        LD BC,3
        LDIR
        LD IY,BUFFCAT
        XOR A
        LD D,A,H,A,L,A
        EXX
        LD (IX-82),A
        POP BC
MRKALL1 LD A,(IY)
        DEC A
        JR Z,MRKALL4
        PUSH IY
        POP HL
        RES 7,(HL)
        LD DE,BUFF_I
        LD C,#F5
MRKALL2 LD A,(DE)
        AND A
        JR Z,MRKALL3
        CP (HL)
        JR NZ,MRKALL4
MRKALL3 INC HL,DE,C
        JR NZ,MRKALL2
        INC (IX-82)
        SET 7,(IY)
        EXX
        LD E,(IY+13)
        ADD HL,DE
        EXX
MRKALL4 LD DE,16
        ADD IY,DE
        DJNZ MRKALL1
        EXX
        LD (VARS-81),HL
MRKALL5 CALL PRF2
        JP FILE4

UNMKALL LD A,(IX-84)
        AND A
        JP Z,FILE6
        CALL INIMARK,MARK_I
        JR MRKALL5

CAT     LD (IX-89),2
        CALL D_INFO
CAT1    CALL PRCAT
CAT2    CALL CURS2,DESCR
CAT3    CALL INKEY_A,KEYMAIN
        LD HL,KCAT1
        LD DE,KCAT2
        CALL JPKEY
        JR CAT3
CP00    POP HL
        LD A,(IX-88)
        AND A
        JR Z,CAT3,CP7F1
CP7F    POP HL
        LD A,(IX-88)
        INC A
        JP M,CAT3
CP7F1   PUSH HL
        JR CURS2
C_LF    LD A,(IX-86)
        AND A
        JR Z,CAT3
        CALL CURS2
        DEC (IX-86)
        JR CAT2
C_RT    LD A,(IX-86)
        CP 7
        JR Z,CAT3
        CALL CURS2
        INC (IX-86)
        JR CAT2
C_UP    CALL CP00
        DEC A
        JR C_PGDN1
C_DN    CALL CP7F
        JR C_PGDN1
C_PGUP  CALL CP00
        LD A,(IX-88)
        SUB 16
        JR NC,C_PGDN1
        XOR A
        JR C_PGDN1
C_PGDN  CALL CP7F
        ADD A,15
        JP P,C_PGDN1
        LD A,127
C_PGDN1 LD (IX-88),A
        AND 112
        LD B,(IX-85)
        LD (IX-85),A
        CP B
        JR Z,CAT2,CAT1
C_EXIT  CALL SORTCAT
        LD (VARS-84),BC
        LD (IX-89),0
        LD A,(IX-88)
        CP C
        JR C,C_EXIT2
        LD A,C
        AND A
        JR Z,C_EXIT1
        DEC C
C_EXIT1 LD (IX-88),C
C_EXIT2 JP FILE3

CURS2   EXA
        CALL SETXY1
        LD E,0
        PUSH DE
        CALL ATRDE
        LD B,32
CURS21  LD A,(HL)
        XOR #50
        LD (HL),A
        INC HL
        DJNZ CURS21
        CALL CURS23
        POP DE
        CALL MULT6X
        LD A,B,B,D
CURS22  PUSH AF,BC
        CALL INVERT
        POP BC
        LD A,6
        ADD A,C
        LD C,A
        POP AF
        DEC A
        JR NZ,CURS22
        EXA
        RET
CURS23  LD HL,COL_XL
CURS24  LD A,(IX-86)
CURS25  ADD A,A
        JP #172D

C_EDIT  CALL INIMARK,MARK_I
        LD HL,C_EDADR
        CALL CURS24
        PUSH BC
        RET
C_EDXY  CALL SETXY1,CURS23
        LD B,D
        JP MULT6X

ECAT00  LD HL,VARS-88
        LD DE,NUMBER1
        LD A,(HL)
        PUSH HL
        CALL GETNUM
        PUSH AF
        CALL C_EDXY
        POP DE,HL
ECAT00A CALL INPNUM2
        AND A
        JP M,ECAT00A,CAT1
ECAT01  LD C,0
        LD D,8
        JR ECAT02A
ECAT02  LD C,8
        LD D,3
ECAT02A CALL ADRF1
        PUSH HL
        LD B,0
        ADD HL,BC
        LD C,D,A,C
        LD DE,BUFF_I
        PUSH HL,DE,BC,AF
        LDIR
        CALL C_EDXY
        POP DE
        CALL INPUT
        POP BC,DE,HL
        EX DE,HL
        LDIR
ECAT02B CALL SETXY1
        POP HL
        LD A,D
        LD C,(IX-88)
        CALL DESCR1,DESCR
        LD BC,(VARS-74)
        LD A,(IX-75)
        CALL CURS22,SETTRK,SAVECAT
        CALL CLEAR21,DESCR
        JP CAT3
ECAT03  CALL ADRF1
        PUSH HL
        LD A,(IX-86)
        ADD A,A,A,3
        CALL #172D
        PUSH HL
        LD HL,BC
        LD DE,NUMBER2
        CALL GETNUM
        PUSH AF
        CALL C_EDXY
        POP DE
ECAT03A CALL INPNUM1
        EX DE,HL
        POP HL
        LD (HL),E
        INC HL
        LD (HL),D
        JR ECAT02B
ECAT04  CALL ADRF1
        PUSH HL
        LD DE,NUMBER1
        LD A,(IX-86)
        ADD A,8
        CALL #172D
        PUSH HL
        LD A,C
        CALL GETNUM
        PUSH AF
        CALL C_EDXY
        POP DE,HL
        CALL INPNUM2
        JR ECAT02B

SYS     BIT 1,(IX-89)
        LD DE,CURS1
        JR Z,SYS0
        LD DE,CURS2
SYS0    CALL GETNUM1
        LD A,(IX-89)
        LD (IX-79),A
        LD (IX-89),3
        JR SYS3
SYS1    CALL CURS3
        BIT 1,(IX-79)
        LD DE,PRFILE
        JR Z,SYS2
        LD DE,PRCAT
SYS2    CALL GETNUM1,DESCR
SYS3    CALL D_INFO
SYS4    CALL CURS3
SYS5    CALL INKEY_A,KEYMAIN
        LD HL,KSYS1
        LD DE,KSYS2
        CALL JPKEY
        JR SYS5

S_LF    LD A,(IX-87)
        RRA
        JR NC,SYS5
S_LF1   CCF
        RLA
S_LF2   CALL CURS3
        LD (IX-87),A
        JR SYS4
S_RT    LD A,(IX-87)
        RRA
        JR C,SYS5,S_LF1
S_UP    LD A,(IX-87)
        SUB 2
        JR C,SYS5,S_LF2
S_DN    LD A,(IX-87)
        ADD A,2
        CP 6
        JR NC,SYS5,S_LF2

S_EDIT  LD A,(IX-82)
        AND A
        JR Z,S_EDIT1
        CALL INIMARK,MARK_I,PRF2
S_EDIT1 LD HL,S_EDADR
        LD A,(IX-87)
S_EDIT2 CALL CURS25
        PUSH BC
        RET

ESYS00  LD HL,VARS-70
        LD DE,BUFF_I
        LD BC,11
        LD A,C
        PUSH HL,DE,BC,AF,HL,BC
        LDIR
        POP DE,HL
        LD C,72
        PUSH BC
        CALL PRLEN
        POP BC,DE
        CALL INPUT
        POP BC,HL,DE
        LDIR
        JR ESYS02A
ESYS01  LD HL,S_EDBYT-1
        LD A,(IX-87)
        PUSH AF
        CALL #172D
        LD HL,VARS
        LD DE,NUMBER1
        LD B,255
        ADD HL,BC
        PUSH HL
        LD A,(HL)
        CALL GETNUM
        LD D,A
        POP HL,AF
        SRL A
        LD B,A
        SBC A,A
        AND #90
        ADD A,#48
        LD C,A
        CALL INPNUM2
        JR ESYS02A
ESYS02  LD HL,(VARS-55)
        LD DE,NUMBER2
        CALL GETNUM
        LD D,A
        LD BC,#02D8
        CALL INPNUM1
        LD (VARS-55),HL
ESYS02A CALL DISK_I,RESET,SAVECAT
        CALL CLEAR21,DESCR
        JP SYS5
S_EXIT  CALL CURS3
        LD A,(IX-79)
        LD (IX-89),A
        AND 2
        JP Z,FILE5,CAT2

CURS3   EXA
        LD A,(IX-87)
        SRL A
        LD D,A
        SBC A,A
        AND 18
        LD E,A
CURS31  CALL ATRDE
        LD B,9
        JP CURS12

ERRAMD  LD A,(IX-120)
        AND A
        JP Z,FILE6
        JR CHRAMD0

CHRAMD  LD HL,VARS-44
        LD DE,NUMBER1
        LD A,(IX-120)
        LD (HL),A
        PUSH HL
        CALL GETNUM
        POP HL
        LD BC,#16A8
        LD D,A
        CALL INPNUM2
        LD B,A
        CP (IX-92)
        JR NC,CHRAMD
        LD C,(IX-120)
        ADD A,4
        CP (IX-92)
        JR NC,CHRAMD
        LD (IX-120),B
        LD (IX-119),C
        LD A,C
        AND A
        JR Z,CHRAMD0
        LD A,B
        AND A
        JR Z,CHRAMD1
        LD A,B
        CP C
        JR Z,CHRAMD1
        JR NC,CHRAMD2
        LD A,(IX-92)
        CALL PAGE
        LD A,(#C8E2)
        LD L,A
        LD H,0
        CALL MULT16
        LD A,(#C8E1)
        CALL #172D
        EX DE,HL
        LD L,(IX-120)
        LD H,0
        CALL MULT64
        SBC HL,DE
        JP NC,CHRAMD3
CHRAMD0 LD A,(IX-92)
        CALL PAGE
        LD HL,#C000
        LD BC,#0FFF
        LD (HL),L
        CALL LDIRHL
        LD HL,RAMDTXT
        LD DE,#C8F5
        LD C,11
        LDIR
        LD L,(IX-120)
        LD H,B
        CALL MULT64
        LD BC,#FFF0
        ADD HL,BC
        LD (#C8E5),HL
        LD HL,#0100
        LD (#C8E1),HL
        LD HL,#C8E7
        LD (HL),#10
CHRAMD1 CALL SYS_I
        BIT 2,(IX-96)
        JP Z,FILE6
        LD A,(IX-120)
        AND A
        JP Z,RELOAD1,RELOAD
CHRAMD2 LD A,(IX-120)
        SUB (IX-119)
        LD L,A
        LD H,0
        CALL MULT64
        JR CHRAMD4
CHRAMD3 LD A,(IX-119)
        SUB (IX-120)
        LD L,A
        LD H,0
        CALL MULT64
        EX DE,HL
        LD HL,0
        SBC HL,DE
CHRAMD4 LD A,(IX-92)
        CALL PAGE
        LD DE,(#C8E5)
        ADD HL,DE
        LD (#C8E5),HL
        JR CHRAMD1

PUTCAT  LD HL,PUTCAT0
        JR PG_CAT
GETCAT  LD HL,GETCAT0
PG_CAT  LD DE,FILE6
        PUSH DE
        BIT 2,(IX-96)
        RET NZ
        RES 0,(IX-95)
        PUSH HL
        CALL RESERR
        EXA
        CALL SETDRV0
        POP HL
        EXA
        AND 64
        RET NZ
        JP (HL)

PUTCAT0 LD HL,#F000
        LD DE,0
        LD B,16
        PUSH HL,BC
        CALL LOAD
        LD A,160
        PUSH AF
        CALL FORMTRK
        POP DE
PUTCAT1 POP BC,HL
        LD E,0
        JP SAVE

GETCAT0 LD HL,RELOAD
        EX (SP),HL
        LD HL,#F000
        LD DE,#A000
        LD B,16
        PUSH HL,BC
        CALL LOAD
        XOR A
        CALL FORMTRK
        LD D,0
        JP PUTCAT1

INPNUM1 PUSH DE,BC
        CALL INPUT,ANALYSE
        POP BC,DE
        JR NC,INPNUM1
        RET

INPNUM2 LD A,(HL)
        PUSH HL
INPN21  CALL INPNUM1
        INC H
        DEC H
        JR NZ,INPN21
        POP HL
        LD (HL),A
        RET

GETNUM  EXX
        LD HL,PRNMEM
        LD (#5C4F),HL
        LD HL,BUFF_I
        LD (PRNMEM+1),HL
        EXX
        LD B,0
        CALL GETNUM1
        LD HL,PRSYM42
        LD (#5C4F),HL
        LD HL,(PRNMEM+1)
        LD DE,BUFF_I
        AND A
        SBC HL,DE
        LD A,L
        RET
GETNUM1 PUSH DE
        RET

ANALYSE LD HL,BUFF_I
        LD DE,BUFF_N
        LD B,(IX-75)
        LD A,(HL)
        SUB 35
        EXX
        LD C,A
        LD B,0
        EXX
AN1     LD A,(HL)
        CP 32
        JR Z,AN5
        CP 48
        JR C,AN4
        CP 58
        JR C,AN3
        EXX
        INC C
        DEC C
        EXX
        JR NZ,AN4
        CP 65
        JR C,AN4
        CP 71
        JR C,AN2
        CP 97
        JR C,AN4
        CP 103
        JR NC,AN4
AN2     AND #5F
AN3     LD (DE),A
        INC DE
        EXX
        INC B
        EXX
AN4     INC HL
        DJNZ AN1
AN5     EXX
        PUSH BC
        EXX
        POP BC
        LD A,B
        AND A
        RET Z
        LD A,C
        AND A
        JR NZ,AN8
        CALL AN6
        LD H,0
        LD L,C
        JR Z,AN11
        CALL AN6
        LD H,C
        JR AN11
AN6     CALL AN7
        LD C,A
        DEC B
        RET Z
        CALL AN7
.4      ADD A,A
        ADD A,C
        LD C,A
        DEC B
        RET
AN7     DEC DE
        LD A,(DE)
        SUB 48
        CP 10
        RET C
        SUB 7
        RET
AN8     EXX
        LD HL,TPOWER
        EXX
        LD HL,0
AN9     PUSH BC
        CALL AN7
        EXX
        LD E,(HL)
        INC HL
        LD D,(HL)
        INC HL
        PUSH HL
        LD L,A
        LD H,0
        CALL #30A9
        EX (SP),HL
        EXX
        POP BC
        JR C,AN10
        ADD HL,BC
AN10    POP BC
        CCF
        RET NC
        DJNZ AN9
AN11    LD A,L
        SCF
        RET

PRNMEM  LD HL,0
        LD (HL),A
        INC HL
        LD (PRNMEM+1),HL
        RET

INVERT  CALL ADRXY
        LD DE,#FC00
        LD B,A
        LD C,248
        JR Z,INV2
INV1    SRL D
        RR E
        DJNZ INV1
        LD B,A
INV2    PUSH BC
        LD A,(HL)
        XOR D
        LD (HL),A
        INC HL
        LD A,(HL)
        XOR E
        LD (HL),A
        DEC HL
        POP BC
        INC H,C
        JR NZ,INV2
        RET

PRFILE  LD A,(IX-88)
        AND 64
        LD (IX-85),A
        CALL CLEAR,PRF4
        RET Z
PRF1    PUSH HL,DE,BC
        LD A,C
        CALL SETXY1+3
        LD B,D,A,E
.3      ADD A,A
        LD C,A
        CALL PRLEN8A
        INC C,C
        LD DE,1
        LD A,(IX-89)
        DEC A
        CALL NZ,PRLEN
        POP BC,DE,HL
        INC C
        LD A,C
PRFE1   CP (IX-84)
        JR NC,PRF2
        ADD HL,DE
        DJNZ PRF1
PRF2    CALL PRF4
        RET Z
PRF3    PUSH HL,DE,BC
        LD A,(HL)
        RLA
        SBC A,A
        AND #FD
        EXA
        LD A,C
        CALL SETXY1+3,ATRDE
        EXA
        LD C,7
        ADD A,C
        CALL #0B4C
        POP BC,DE,HL
        INC C
        LD A,C
        CP (IX-84)
        RET NC
        ADD HL,DE
        DJNZ PRF3
        RET
PRF4    LD DE,16
        LD B,64
        LD A,(IX-89)
        DEC A
        JR NZ,PRFE2
        LD E,8
PRFE2   LD A,(IX-84)
        AND A
        RET Z
        LD A,(IX-85)
        LD C,A
        JP ADRF2

PRCAT   LD A,(IX-88)
        AND 112
        LD (IX-85),A
        PUSH AF
        CALL CLEAR
        POP AF
        LD DE,16
        LD C,A,B,E
        CALL ADRF2
        LD A,4
PRC1    PUSH HL,DE,BC,AF
        CALL DESCR1
        POP AF,BC,DE,HL
        ADD HL,DE
        INC A,C
        DJNZ PRC1
        RET

PRBCOPY LD BC,#0990
        LD A,(IX-28)
        CALL NUMBER1
        LD BC,#0A90
        LD A,(IX-27)
        CALL NUMBER1
        LD BC,#0B90
        LD A,(IX-26)
        CALL NUMBER1
        LD BC,#0C90
        LD A,(IX-25)
        CALL NUMBER1
        LD HL,(VARS-24)
        LD BC,#0D90
        JP NUMBER2

RUN     CALL SETTRK,SETCURS,ADRF1
        PUSH HL
        POP IY
        LD A,(HL)
        CP 32
        JP C,FILE6
        LD DE,BFILE
        LD BC,8
        PUSH DE
        LDIR
        POP HL
        RES 7,(HL)
        LD C,(IX-89)
        DEC C
        JR NZ,RUN1
        RLA
        JR C,RUN3,RUN5
RUN1    CALL RUNSPF
        LD A,(IY+8)
        CP 66
        JR Z,RUN5
        EXA
        LD A,(IY+13)
        CP 27
        JR Z,RUN4
        EXA
        CP 67
        JR NZ,RUN2
        EXA
        CP 192
RUN2    JP NZ,FILE6
RUN3    LD A,#EC
        LD C,#AF
        JR RUN6
RUN4    CALL SETTRK
        LD HL,#C000
        LD BC,#1B00
        LD D,(IY+15)
        LD E,(IY+14)
        PUSH HL,BC
        CALL LOAD
        POP BC,HL
        LD DE,#4000
        LDIR
        CALL WAITSCR
        JP FILE2
RUN5    LD A,#F7
        LD C,#20
RUN6    LD (BCOM1),A
        LD A,C
        LD (BCOM2),A
        BIT 2,(IX-96)
        JP NZ,FILE6
        CALL CLS
        LD HL,RUNCODE
        LD DE,#4000
        LD BC,BTEXT1-RUNCODE
        PUSH DE
        JP #33C3

RUNSPF  PUSH IY
        POP HL
        LD DE,8
        ADD HL,DE
        EX DE,HL
        LD HL,RUNEXT
RUNSPF1 LD A,(HL)
        AND A
        RET Z
        PUSH HL,DE
        LD B,3
        CALL SRFC4
        POP DE
        JP Z,JPKEY2
        POP HL
        LD BC,5
        ADD HL,BC
        JR RUNSPF1

RUNRAM  CALL IM1ON
        IN (#FB)
        LD HL,#3500
        LD DE,#9A00
        LD BC,M_EDADR-MSERV+20
        LDIR
        IN (#7B)
        CALL IM2ON
        JP LDIMAGE

RUNTCP  LD C,(IX-96)
RUNTCP1 LD B,(IY+12)
        LD D,(IY+15)
        LD E,(IY+14)
        LD H,(IY+11)
        LD L,0
        PUSH HL
        LD A,(IX-96)
        LD (IX-94),A
        LD (IX-96),C
        CALL LOAD
        LD A,(IX-94)
        LD (IX-96),A
        RET

P7START LD SP,#BFFF
        DI
        LD IX,VARS
        LD HL,#C016
        LD DE,#5C00
        LD BC,#3000
        LDIR
        JP START

CHSTART DI
        LD SP,#C000
        LD IX,VARS
        LD HL,#0400
        LD DE,#5C00
        LD BC,#3000
        LDIR
        LD HL,START
        PUSH HL
        JP INSC1

INSCACH LD A,0
        INC A
        RET NZ
        IN (#FB)
        LD HL,#5C00
        LD DE,#0400
        LD BC,#3000
        LDIR
        LD HL,CHSTART
        LD DE,#34AA
        LD C,INSCACH-CHSTART
        LDIR
INSC1   IN (#7B)
        RET

PACKSCR CALL SETTRK,ADRF1
        PUSH IX,HL
        POP IY
        LD HL,#C000
        LD B,(IY+13)
        LD E,(IY+14)
        LD D,(IY+15)
        CALL LOAD,CLS,#C000
        POP IX
        CALL WAITSCR
        JP FILE2

WAITSCR LD A,(IX-78)
        LD (IX-78),0
        PUSH AF
        CALL INKEY_A,CLS
        POP AF
        LD (IX-78),A
        RET

RESCMOS LD A,(IX-77)
        INC A
        RET Z
        LD (IX-78),255
        RET

RUNCODE LD SP,#5800
        CALL IM1ON
        LD A,7
        CALL PAGE
        LD HL,P7START
        LD DE,#C000
        LD BC,CHSTART-P7START
        LDIR
        LD HL,#5C00
        LD B,#30
        PUSH HL,BC
        LDIR
        XOR A
        CALL PAGE,INSCACH
        LD IY,#5C3A
        LD HL,#8BFF
        LD (#5C3A),HL
        LD HL,#15C6
        LD DE,#5C10
        LD BC,14
        LDIR
        EX DE,HL
        LD C,24
        LD (HL),B
        CALL LDIRHL
        LD (HL),B
        INC HL
        LD (HL),60
        LD HL,#5B00
        LD (HL),L
        DEC C
        CALL LDIRHL
        LD HL,#5D26
        LD DE,#15AF
        LD C,21
        LD (#5C4F),HL
        EX DE,HL
        LDIR
        LD (#5C53),DE
        LD HL,BTEXT1
        LD C,BTEXT2-BTEXT1
        LDIR
        EX DE,HL
        LD (#5C4B),HL
        LD (HL),128
        INC HL
        LD (#5C59),HL
        CALL #16B0
        LD DE,HL
        INC DE
        LD BC,#A2FF
        LD (HL),0
        LDIR
        LD HL,#FFFF
        LD DE,#3E00
        LD BC,#1303
        LD (#5CB2),HL
        LD (#5CB4),HL
        LD SP,HL
        INC SP
        PUSH DE,BC
        LD (#5C3D),SP
        LD A,#C9
        LD (#5CC2),A
        LD C,#18
        CALL #3D13
        JP #1B76

BTEXT1  DB "@00011900F9C0300E0000033D00"
        DB "@3AEA3A"
BCOM1   DB "@0022"
BFILE   DS 9,34
BCOM2   DB "@000D"
BTEXT2

        ORG #8F00
        DI
        LD SP,#5E00
        LD IY,#5C3A
        CALL CLS,SCR1
        LD IX,VARS
        LD HL,#5D1A
        LD DE,#5D1B
        LD BC,#01DD
        LD (HL),0
        LDIR
        LD HL,SYM1F
        LD C,8
        LDIR
        LD HL,FONT42
        LD B,3
        LDIR
        LD HL,#010A
        LD (#5C09),HL
        LD HL,0
        LD (#5C0B),HL
        LD (#5C38),HL
        LD (#5C90),HL
        INC HL
        LD (#5C42),HL
        LD (#5C45),HL
        LD HL,#0701
        LD (#5C47),HL
        LD (#5C8C),HL
        LD HL,PRSYM42
        LD (#5C4F),HL
        LD HL,#5C4F
        LD (#5C51),HL
        LD HL,#5D3B
        LD (#5C53),HL
        LD (HL),13
        INC HL
        LD (#5C4B),HL
        LD (HL),128
        INC HL
        LD (#5C59),HL
        CALL #16B0
        LD HL,#0802
        LD (#5C6A),HL
        LD HL,#0700
        LD (#5C8E),HL
        LD A,#0C
        LD (#5C3B),A
        XOR A
        LD (#5C41),A
        INC A
        LD (#5C44),A

        LD HL,#1111
        LD (#5C2E),HL
        LD HL,#5C2E
        LD (#5C3D),HL
        LD HL,ERRDOS
        LD (#5CC3),HL
        LD HL,INTERR
        LD (#5D23),HL
        LD A,#C3
        LD (#5CC2),A
        LD (#5CD1),A
        LD (#5CD8),A
        LD (#5D22),A
        XOR A
        LD (#5CD6),A
        LD A,(#5D19)
        AND 3
        LD (IX-96),A

        CALL IM1ON,TSTCACH,TSTCMOS
TST1    CALL TSTRAM
        LD A,(IX-69)
        ADD A,A
        DEC A
        LD (IX-92),A
        LD (IX-70),C
        CALL PRTEST
        LD HL,#4000
TST2    DEC HL
        LD A,H
        OR L
        JR Z,TST3
        PUSH HL
        CALL TSTRAM
        POP HL
        LD A,C
        SUB (IX-70)
        JR NZ,TST1
        XOR A
        IN (#FE)
        CPL
        AND #1F
        JR Z,TST2
TST3    LD A,#FD
        IN (#FE)
        AND 2
        PUSH AF
        CALL CLS
        POP AF
        CALL Z,EDSETUP,IM2ON
        LD HL,SETUP+#C6
        LD DE,VARS-128
        LD BC,4
        LDIR
        LD B,(HL)
        INC HL
        LD A,(IX-92)
        CP B
        JR C,TST4
        LD (IX-92),B
TST4    LD B,(HL)
        INC HL
        LD A,B
        CP 59
        JR NC,TST5
        ADD A,5
        CP (IX-92)
        JR C,TST5
        LD A,(IX-92)
        SUB 5
        LD B,A
TST5    LD (IX-120),B
        LD A,(IX-92)
        SUB B
        LD (IX-90),A
        LD DE,INSCACH+1
        LD A,(HL)
        INC HL
        LDI
        LD HL,50
        LD E,A
        LD D,0
        CALL #30A9
        LD (VARS-124),HL
        LD HL,INICOMM
        PUSH HL
        LD A,(IX-120)
        AND A
        RET Z
        CALL MAINSTR
        LD HL,#B800
        LD DE,0
        LD B,8
        CALL LOAD
        LD A,(IX-92)
        CALL PAGE
        LD HL,CHRAMD1
        LD A,(HL)
        PUSH HL,AF
        LD (HL),#C9
        LD A,(#C8E7)
        CP #10
        CALL NZ,CHRAMD0
        POP AF,HL
        LD (HL),A
        LD DE,(#C8E1)
        LD A,(#C8E4)
        LD L,A
        LD H,#0C
        CALL MULT16
        PUSH HL,DE,AF
        LD (RF2+1),HL
        CALL SETRAM
        EXX
        LD (VARS-40),HL
        LD (IX-35),E
        LD HL,SETUP
        LD B,18
RF1     PUSH HL,BC
        LD A,(HL)
        AND A
        JP Z,RF3
        PUSH HL,HL
        LD DE,8
        ADD HL,DE
        EX DE,HL
        POP HL
        CALL SRFRAM
        POP HL
        JR Z,RF3
        PUSH HL
        CALL SRSETUP
        POP HL
        JR NZ,RF3
        PUSH HL
        LD HL,RDTXT
        CALL PRCL20
        POP HL
        EXX
        LD A,(IX-92)
        CALL PAGE
        LD HL,(#C8E5)
        LD D,0
        LD E,(IY+13)
        SBC HL,DE
        JR C,RF3
        PUSH HL
        EXX
        PUSH IY
        CALL PRFEXT
        LD HL,RDF3
        LD DE,BUFF_I
        LD BC,6
        PUSH HL,DE,BC,HL
        LDIR
        POP HL
        LD C,5
        LD (HL),B
        CALL LDIRHL
        LD HL,RDF4+1
        LD A,(HL)
        PUSH HL,AF
        LD (HL),#35
        LD B,(IY+13)
        LD D,(IY+15)
        LD E,(IY+14)
        LD (IX-37),C
        LD (IX-50),B
        CALL RDFILE
        POP AF,HL
        LD (HL),A
        POP BC,HL,DE
        LDIR
        LD A,(IX-92)
        CALL PAGE
        POP HL
RF2     LD DE,0
        LD BC,16
        LDIR
        LD (RF2+1),DE
        POP HL
        LD (#C8E5),HL
        LD HL,#C8E4
        INC (HL)
RF3     POP BC,HL
        LD DE,11
        ADD HL,DE
        DEC B
        JP NZ,RF1
        LD HL,SETUP+#9A
        LD DE,HOTOVR
        LD B,4
RF4     PUSH BC,HL,HL,DE
        LD DE,OVREXT
        LD BC,8
        ADD HL,BC
        LD B,3
        CALL SRFC4
        POP DE,HL
        JR NZ,RF5
        LD C,8
        LDIR
        JR RF6
RF5     EX DE,HL
        LD BC,7
        LD (HL),32
        CALL LDIRHL
RF6     POP HL
        LD BC,11
        ADD HL,BC
        POP BC
        DJNZ RF4
        LD A,(IX-92)
        CALL PAGE
        POP BC,DE,HL
        LD A,(#C8E4)
        CP B
        RET Z
        CALL SETST
        LD (#C8E1),DE
        RET

INICOMM LD HL,RELOAD
        PUSH HL
        LD A,(INSCACH+1)
        INC A
        RET NZ
        CALL IM1ON
        IN (#FB)
        LD HL,0
        LD DE,1
        LD BC,#39FF
        LD (HL),L
        LDIR
        LD HL,#9800
        LD DE,#0066
        LD BC,CPROG7-CHMAGIC
        LDIR
        LD HL,#9A00
        LD DE,#3500
        LD BC,M_EDADR-MSERV+20
        LDIR
        CALL INSCACH
        JP IM2ON

SRSETUP EX DE,HL
        LD HL,#B800
        LD A,11
        CALL SRFCAT
        PUSH HL
        POP IY
        RET

EDSETUP PUSH IX
        CALL SCR2
        POP IX
        LD HL,SC2TXT
        CALL PRINT
        LD BC,#0800
EDS1    PUSH BC
        LD A,C
        AND 3
        ADD A,65
        LD C,#18
        RST 16
        LD A,58
        RST 16
        POP BC
        INC B,C
        LD A,B
        CP 20
        JR C,EDS1
        CALL PRS_N,PRS_D,PRS_F
        LD HL,SC2ATR
        CALL ATTRIB
        LD A,(IX-78)
        LD (IX-70),A
        XOR A
        LD (IX-69),A
        LD (IX-78),A
        CALL IM2ON
        LD HL,#0052
EDS2    CALL #162C
EDS3    CALL CURS0
EDS4    CALL INKEY_B,KEYMAIN
        LD HL,KSETUP1
        LD DE,KSETUP2
        CALL JPKEY
        JR EDS4
ES_LF   LD A,(IX-69)
        SUB 18
        JR C,EDS4
ES_LF1  CALL CURS0
        LD (IX-69),A
        JR EDS3
ES_RT   LD A,(IX-69)
        ADD A,18
        CP 36
        JR NC,EDS4,ES_LF1
ES_UP   LD A,(IX-69)
        AND A
        JR Z,EDS4
        CP 18
        JR Z,EDS4
        DEC A
        JR ES_LF1
ES_DN   LD A,(IX-69)
        CP 17
        JR Z,EDS4
        CP 35
        JR Z,EDS4
        INC A
        JR ES_LF1
ES_EDIT LD HL,ESETADR
        LD A,(IX-69)
        CP 18
        JP NC,ES18
        CALL CURS25
        PUSH BC
        RET
ES00    LD HL,SETUP+#CA
        LD A,(IX-69)
        CALL #172D
        LD DE,NUMBER1
        PUSH HL,AF
        LD A,(HL)
        CALL GETNUM
        LD D,A
        POP AF,HL
        ADD A,4
        LD B,A
        LD C,#60
        CALL INPNUM2
        JR EDS4
ES03    CALL CURS0
        LD HL,PRS_N
        LD A,(SETUP+#CD)
        CPL
        LD (SETUP+#CD),A
        JP EDS2
ES04    LD HL,SETUP+#C6
        LD A,(IX-69)
        SUB 4
        LD D,A
        AND 3
        CALL #172D
        PUSH HL
        LD HL,ESBCOM
        LD A,D
        SRL A,A
        CALL #172D
        POP HL
        LD A,(HL)
        XOR C
        LD (HL),A
        CALL CURS0
        LD HL,PRS_D
        JP EDS2

ES16    CALL IM1ON,CLS
        LD A,(IX-70)
        LD (IX-78),A
        RET

ES17    CALL CLS,MAINSTR
        LD HL,SETUP
        LD DE,(#5CEB)
        INC E
        BIT 4,E
        RES 4,E
        JR Z,ES17_1
        INC D
ES17_1  LD B,1
        SET 0,(IX-95)
        CALL SAVE
        JR ES16

ES18    LD HL,11
        LD A,(IX-69)
        SUB 18
        LD E,A
        LD D,0
        CALL #30A9
        LD DE,SETUP
        ADD HL,DE
        LD DE,BUFF_I
        LD BC,8
        PUSH HL,DE,BC
        LDIR
        LD A,46
        LD (DE),A
        INC DE
        LD C,3
        LDIR
        LD A,(IX-69)
        SUB 14
        LD B,A
        LD C,#90
        LD D,12
        CALL INPUT
        POP BC,HL,DE
        LDIR
        INC HL
        LD C,3
        LDIR
        CALL CURS0
        LD HL,PRS_F
        JP EDS2

CURS0   EXA
        LD A,(IX-69)
        SUB 18
        LD B,A
        CCF
        SBC A,A
        AND #0F
        ADD A,3
        LD E,A,A,B
        AND A
        JP P,CURS01
        ADD A,18
CURS01  ADD A,4
        LD D,A
        CALL ATRDE
        LD B,9
CURS02  LD A,(HL)
        XOR #48
        LD (HL),A
        INC HL
        DJNZ CURS02
        EXA
        RET

PRS_N   LD BC,#0460
        LD A,(SETUP+#CA)
        CALL NUMBER1
        LD BC,#0560
        LD A,(SETUP+#CB)
        CALL NUMBER1
        LD BC,#0660
        LD A,(SETUP+#CC)
        CALL NUMBER1
        LD BC,#0760
        LD A,(SETUP+#CD)
        JP PRCON

PRS_D   LD HL,TURBTXT
        LD DE,DOSTXT
        LD BC,#0801
        CALL PRS_D1
        LD HL,FASTTXT
        LD DE,SLOWTXT
        LD BC,#0C04
        CALL PRS_D1
        LD HL,NOTXT
        LD DE,YESTXT
        LD BC,#1002
PRS_D1  EXX
        LD HL,SETUP+#C6
        LD B,4
PRS_D2  PUSH HL,BC
        LD A,(HL)
        EXX
        AND C
        PUSH HL,DE,BC,DE,AF
        LD C,#30
        CALL Z,PRINT
        POP AF,HL
        CALL NZ,PRINT
        POP BC,DE,HL
        INC B
        EXX
        POP BC,HL
        INC HL
        DJNZ PRS_D2
        RET

PRS_F   LD HL,SETUP
        LD BC,#1204
PRS_F1  PUSH HL,BC
        LD B,C
        LD C,#90
        CALL PRLEN8
        LD A,46
        RST 16
        LD E,3
        CALL PRLEN
        POP BC,HL
        LD DE,11
        ADD HL,DE
        INC C
        DJNZ PRS_F1
        LD BC,#0412
PRS_F2  PUSH BC
        LD A,53
        SUB B
        PUSH AF
        LD B,C
        LD C,#E4
        LD A,60
        RST 16
        POP AF
        RST 16
        POP BC
        INC C
        DJNZ PRS_F2
        RET

TSTCACH IN (#7B)
        LD HL,0
        IN (#FB)
        LD C,(HL)
        LD (HL),L
        LD A,(HL)
        CALL WRF7
        CPL
        LD (PRTEST5+1),A
        LD (HL),C
        IN (#7B)
        RET

TSTCMOS XOR A
        LD (IX-78),A
        CALL RDCMOS
        CP 60
        RET NC
        LD A,2
        CALL RDCMOS
        CP 60
        RET NC
        LD A,4
        CALL RDCMOS
        CP 24
        RET NC
        DEC (IX-78)
        RET

TSTRAM  LD HL,TSTDRV
        LD DE,TSTPAGE
        LD BC,#0A00
TSTR1   PUSH BC
        LD A,(DE)
        LD (IX-69),A
        INC DE
        PUSH DE
        EXA
        LD E,(HL)
        INC HL
        LD D,(HL)
        INC HL
        PUSH HL
        EX DE,HL
        LD DE,PAGE
        LD BC,24
        LDIR
        LD HL,#C000
        XOR A
        CALL PAGE
        LD D,(HL)
        LD (HL),0
        EXA
        PUSH AF,AF
        CALL PAGE
        POP AF
        LD E,(HL)
        LD (HL),A
        XOR A
        CALL PAGE
        LD A,(HL)
        LD (HL),D
        AND A
        EXA
        POP AF
        CALL PAGE
        LD (HL),E
        XOR A
        CALL PAGE
        EXA
        POP HL,DE,BC
        RET Z
        INC C
        DJNZ TSTR1
        RST 0

ZXSP    LD (IX-91),A
        LD B,A
.3      RLA
        AND #C0
        LD C,A,A,B
        AND 7
        OR #10,C
        LD BC,#7FFD
        OUT A
        RET
        DW 0
SCORP   LD (IX-91),A
        LD BC,#1FFD
        PUSH AF
        RLA
        AND #10
        OUT A
        POP AF
        AND 7
        OR #10
        LD BC,#7FFD
        OUT A
        RET
        NOP
PROFI   LD (IX-91),A
        LD BC,#DFFD
        PUSH AF
.3      RRA
        AND 7
        OUT A
        POP AF
        AND 7
        OR #10
        LD B,#7F
        OUT A
        RET
ATM     LD (IX-91),A
        LD BC,#FDFD
        PUSH AF
.3      RRA
        AND 7
        OUT A
        POP AF
        AND 7
        OR #10
        LD B,#7F
        OUT A
        RET

PRTEST  LD HL,SC1TXT
        CALL PRINT
        LD HL,SC1ATR
        CALL ATTRIB
        LD L,(IX-92)
        LD H,0
        INC L
        CALL MULT16,PRD2B
        LD HL,BUFF_N+1
        LD BC,#0960
        LD D,4
        LD A,#20
        LD (PRTEST2),A
PRTEST1 LD A,(HL)
        CP 48
PRTEST2 JR NZ,PRTEST3
        JR PRTEST4
PRTEST3 RST 16
        LD A,#18
        LD (PRTEST2),A
PRTEST4 INC HL
        DEC D
        JR NZ,PRTEST1
        LD A,32
        RST 16
        LD BC,#0A60
        LD A,(IX-78)
        CALL PRCON
        LD BC,#0B60
PRTEST5 LD A,0

PRCON   LD HL,PRINT
        PUSH HL
        LD HL,YESTXT
        INC A
        RET Z
        LD HL,NOTXT
        RET

SC1TXT  DB 30,7,4,"Hardware test:"
        DB 30,9,4,"Memory    :"
        DB 30,10,4,"CMOS Clock:"
        DB 30,11,4,"Shadow RAM:"
        DB 30,14,4,"(c) 09.10.2000 "
        DB "Sergey Selev aka"
        DB 30,15,4,"Cyber from Cobra "
        DB "Software"
        DB 30,18,4,"ZXNet  : 500:322/62"
        DB 30,19,4,"FidoNet: 2:462/"
        DB "167.62"
        DB 30,21,4,"Press 'S' to edit "
        DB "setup",29
SC1ATR  DB "@46011C070144030B0901"
        DB "@070310090C45021C0E01"
        DB "@44020812010702151209"
        DB "@05021E150100"
SC2TXT  DB 30,2,5,"General setup"
        DB 30,4,4,"Pages using:"
        DB 30,5,4,"Ramdisk    :"
        DB 30,6,4,"Screensaver:"
        DB 30,7,4,"Autoinstall:"
        DB 30,8,16,"<driver"
        DB 30,12,16,"<save"
        DB 30,16,16,"<check"
        DB 30,20,4,"Exit"
        DB 30,21,4,"Save & exit"
        DB 30,2,26,"Autoload",29
SC2ATR  DB "@44011E02010504090403"
        DB "@070403040C050C030803"
        DB "@070C060806460C06080C"
        DB "@06020914030712090412"
        DB "@461203041B00"

SYM1F   DB "@0000304848300000"

TSTDRV  DW PROFI,PROFI,PROFI,ATM,ATM,ATM
        DW SCORP,ZXSP,ZXSP,ZXSP
TSTPAGE DB "@20100820100808100804"

KSETUP1 DB 0
KSETUP2 DW ES_LF,ES_RT,ES_UP,ES_DN
        DW EDS4,EDS4,ES_EDIT,EDS4
ESETADR DW ES00,ES00,ES00,ES03,ES04,ES04
        DW ES04,ES04,ES04,ES04,ES04,ES04
        DW ES04,ES04,ES04,ES04,ES16,ES17
ESBCOM  DB 1,4,2

YESTXT  DB "Yes",29
NOTXT   DB "No ",29
TURBTXT DB "Turbo",29
DOSTXT  DB "Dos  ",29
FASTTXT DB "Fast",29
SLOWTXT DB "Slow",29

        ORG #A000
SETUP   DB "textviewtcp"
        DS 11
        DS 11
        DS 11

        DS 11
        DS 11
        DS 11
        DS 11

        DS 11
        DS 11
        DS 11
        DS 11

        DS 11
        DS 11
        DS 11
        DS 11

        DB "scrsavertcp"
        DB "help    tcp"

        DB %00000010
        DB %00000110
        DB %00000000
        DB %00000001
        DB 255
        DB 23
        DB 60
        DB 255