;LAST UPDATE: 25.01.19 savelij
 
 
 
                include ../../macros.a80
 
 
 
                ORG 0X6000
 
 
 
;CMOS SetUp & HELP для Gluk
 
secHDD          EQU 0XA000      ;GLUcat
 
secOLD          EQU secHDD+512
 
symm            EQU 0           ;символьный режим в докторе
 
SYSREG_EFF7     EQU 0XEFF7
 
SET_ADR         EQU 0XDFF7
 
RD_WR_DATA      EQU 0XBFF7
 
CMOS_ON         EQU 0X80
 
CMOS_OFF        EQU 0
 
 
 
        LD BC,0X7FFD
 
        LD A,0X10
 
        OUT (C),A       ;выключаем ROM 128 бейсика
 
        LD HL,0X010F
 
        LD (0X5C09),HL
 
        EI
 
        CALL HELPCLS
 
        JP C,TSTKEY
 
        LD A,0XFE
 
        IN A,(0XFE)
 
        AND 8           ;"C"
 
        JP Z,COLTEST
 
        LD A,0XFD
 
        IN A,(0XFE)
 
        AND 2
 
        JP NZ,PRHELP    ;anykey, не "S"
 
CDE0    LD A,(CDECURadr)
 
        AND 0XFE
 
        CP 0X13*2
 
        LD HL,TZERO
 
        JR NC,CDEnomsg
 
        LD HL,TCMOSMSGS
 
        ADD A,L
 
        LD L,A
 
        JR NC,$+3
 
        INC H
 
        LD A,(HL)
 
        INC HL
 
        LD H,(HL)
 
        LD L,A
 
CDEnomsg
 
        CALL PRHELPP
 
        LD HL,TNORM
 
        CALL PRHELP0
 
        RES 5,(IY+1)
 
CDENKEY HALT
 
        LD HL,0X5903
 
        LD (HL),7
 
        DEC L
 
        LD (HL),7
 
        DEC L
 
        LD (HL),5
 
        DEC L
 
        LD (HL),5
 
        LD DE,0X5904
 
        LD BC,0X80-4
 
        LDIR
 
        LD A,0X38
 
        CALL CDECUR
 
        LD DE,0X4800
 
        LD H,0
 
GOPR0   PUSH HL
 
        CALL READ_CMOS
 
        CALL PRHEX
 
        POP HL
 
        INC H
 
        BIT 6,H
 
        JR Z,GOPR0
 
        LD E,0XA0
 
        LD H,0
 
GOPR1   PUSH HL
 
        CALL READ_CMOS
 
        CALL PR88
 
        POP HL
 
        INC H
 
        BIT 6,H
 
        JR Z,GOPR1
 
        BIT 5,(IY+1)
 
        JR Z,CDENKEY
 
        LD HL,CDE0
 
        PUSH HL
 
        LD L,0
 
CDECURadr       EQU $-1
 
        LD A,(0X5C08)
 
        DEC L
 
        CP 8
 
        JR Z,CDE0OK
 
        INC L
 
        CP 9
 
        JR Z,CDEyR
 
        CP 10
 
        JR NZ,CDEnD
 
        LD A,L
 
        ADD A,0X20
 
        LD L,A
 
        JR CDE0OK
 
CDEnD   CP 0X0B
 
        JR NZ,CDEnU
 
        LD A,L
 
        SUB 0X20
 
        LD L,A
 
        JR CDE0OK
 
 
 
CDEnU   CALL CDEin0F            ;0..9A..F
 
        RET C
 
        LD E,A
 
        LD H,L
 
        SRL H
 
        CALL READ_CMOS
 
        BIT 0,L
 
        JR NZ,CDE0Frgt
 
        AND 0X0F
 
        REPT 4
 
        SLA E
 
        ENDM
 
        JR CDE0FrQ
 
 
 
CDE0Frgt
 
        AND 0XF0
 
CDE0FrQ OR E
 
        PUSH HL
 
        LD H,L
 
        SRL H
 
        LD L,A
 
        CALL WRITE_CMOS
 
        POP HL
 
CDEyR   INC L
 
CDE0OK  RES 7,L
 
        LD A,L
 
        LD (CDECURadr),A
 
        RET
 
 
 
CDEnR
 
CDEin0F OR 0X20
 
        SUB "0"
 
        RET C
 
        CP 0X0A
 
        CCF
 
        RET NC                  ;0..9
 
        CP 0X61-0X30            ;"a"-"0"
 
        RET C
 
        SUB 0X61-0X3A           ;"a"-":"
 
        CP 0X10
 
        CCF
 
        RET
 
 
 
CDECUR  LD HL,(CDECURadr)
 
        LD H,0X59
 
        LD (HL),A
 
        RET
 
 
 
PRHEX   PUSH AF
 
        REPT 4
 
        RRCA
 
        ENDM
 
        CALL $+4
 
        POP AF
 
        AND 0X0F
 
        CP 0X0A
 
        CCF
 
        ADC A,"0"
 
        DAA
 
PR88    PUSH BC
 
        PUSH DE
 
        PUSH HL
 
        ADD A,A
 
        CP 0X40
 
        JR NC,$+4
 
        LD A,0X2E*2     ;"."*2
 
        LD L,A
 
        LD H,0X0F
 
        ADD HL,HL
 
        ADD HL,HL
 
        LD B,8
 
        LD A,(HL)
 
        LD (DE),A
 
        INC L
 
        INC D
 
        DJNZ $-4
 
        POP HL
 
        POP DE
 
        POP BC
 
        INC E
 
        RET
 
 
 
COLTEST LD IXL,0
 
COLTESU LD A,IXL
 
        OUT (0X0FE),A
 
        LD DE,0X4001
 
        LD BC,0X600
 
        LD H,D
 
        LD L,C
 
        LD (HL),0X7E
 
        LDIR
 
        LD B,2
 
        LD (HL),L
 
        LDIR
 
        LD B,8
 
        DEC (HL)
 
        LDIR
 
        LD C,0XAA
 
COLTST0 LD (HL),C
 
        INC L
 
        JR NZ,$-2
 
        LD A,C
 
        CPL
 
        LD C,A
 
        INC H
 
        BIT 3,H
 
        JR Z,COLTST0
 
COLTST1 LD A,B
 
        XOR 0XC0
 
        LD (HL),A
 
        INC HL
 
        LD (HL),A
 
        INC HL
 
        INC B
 
        BIT 1,H
 
        JR Z,COLTST1
 
COLTST2 LD A,L
 
        XOR 0X80
 
        RRA
 
        LD (HL),A
 
        INC HL
 
        LD (HL),A
 
        INC L
 
        JR NZ,COLTST2
 
COLTSYK EI
 
        HALT
 
        XOR A
 
        IN A,(0XFE)
 
        CPL
 
        AND 0X1F
 
        JR NZ,COLTSYK
 
COLTSTK DI
 
PULS    SBC A,A         ;если не будет,то only для компов с FE:765=111
 
PULSI   INC A
 
        OUT (0XFB),A
 
        DJNZ PULSI
 
PULSD   OUT (0XFB),A
 
        INC B
 
        DEC A
 
        JR NZ,PULSD
 
        XOR A
 
        IN A,(0XFE)
 
        RRA
 
        JR C,PULS
 
        INC IXL
 
        JR COLTESU
 
 
 
WRITE_CMOS
 
        CALL onCMOS
 
        LD A,H
 
        LD BC,SET_ADR
 
        OUT (C),A
 
        LD A,L
 
        LD BC,RD_WR_DATA
 
        OUT (C),A
 
offCMOS LD BC,SYSREG_EFF7
 
        LD A,CMOS_OFF
 
        OUT (C),A
 
        EI
 
        RET
 
 
 
onCMOS  DI
 
        LD BC,SYSREG_EFF7
 
        LD A,CMOS_ON
 
        OUT (C),A
 
        RET
 
 
 
READ_CMOS
 
        CALL onCMOS
 
        LD A,H
 
        LD BC,SET_ADR
 
        OUT (C),A
 
        LD BC,RD_WR_DATA
 
        IN A,(C)
 
        LD H,A
 
        CALL offCMOS
 
        LD A,H
 
        AND A
 
        RET
 
 
 
TSTKEY  LD HL,TTSTKEY
 
        CALL PRHELPP
 
TSTKEY0 HALT
 
        LD BC,0XFEFE
 
        LD HL,0X5860
 
        CALL TSTKEYP
 
        LD L,9
 
        CALL TSTKEYP
 
        JR TSTKEY0
 
 
 
TSTKEYP LD E,4
 
TSTKEY1 LD D,5
 
        IN A,(C)
 
TSTKEY2 RRA
 
        LD (HL),7
 
        JR C,$+4
 
        LD (HL),0X30
 
TSTKEYi INC L
 
        DEC D
 
        JR NZ,TSTKEY2
 
        LD A,L
 
TSTKEYs SUB 0X25
 
        LD L,A
 
        RLC B
 
        DEC E
 
        JR NZ,TSTKEY1
 
        LD DE,TSTKEYi
 
        LD A,(DE)
 
        XOR 1                   ;inc/dec
 
        LD (DE),A
 
        LD DE,TSTKEYs
 
        LD A,(DE)
 
        XOR 0X10                        ;add/sub
 
        LD (DE),A
 
        RET
 
 
 
PRHELPP LD DE,0X4000
 
PRHELP0 LD A,(HL)
 
        INC HL
 
        OR A
 
        RET Z
 
        CALL PR88
 
        JR NZ,$+6
 
        LD A,D
 
        ADD A,8
 
        LD D,A
 
        JR PRHELP0
 
 
 
PRHELP  LD HL,THELP
 
        CALL PRHELPP
 
 
 
;инициализировать TR-DOS (15649 не помогает)
 
        LD HL,SYSVAR
 
        LD DE,0X5C00
 
        LD BC,SYS1LN
 
        LDIR
 
        LD E,LOW (0X5C36)
 
        LD C,SYS2L1
 
        LDIR
 
        LD E,LOW (0X5CC8)
 
        LD C,SYS2L2
 
        LDIR
 
        LD E,LOW (0X5CD6)
 
        LD C,SYS2L3
 
        LDIR
 
        LD E,LOW (0X5C0C)
 
        LD C,SYS2L4
 
        LDIR
 
        LD E,LOW (0X5C26)
 
        LD C,SYS2L5
 
        LDIR
 
        LD A,0XC9
 
        LD (0X5CC2),A
 
DDDKN   RES 5,(IY+1)
 
DDDK0   BIT 5,(IY+1)
 
        JR Z,DDDK0
 
        LD A,(0X5C08)
 
        SUB "1"
 
        CP 4
 
        JR NC,DDDKN
 
        LD C,1
 
        CALL 0X3D13
 
        LD C,0X18
 
        CALL 0X3D13
 
DISKDOC LD (IY+48),0            ;A
 
        CALL HELPCLS
 
HDELOAD LD HL,HDEDUMP
 
        PUSH HL
 
        LD DE,0X4000
 
        CALL INH
 
        RET C
 
        REPT 4                  ;HDEDUMP
 
        ADD A,A
 
        ENDM
 
        LD H,A
 
        CALL INH
 
        RET C                   ;HDEDUMP
 
        ADD A,H
 
        LD H,A
 
        CALL INH
 
        RET C                   ;HDEDUMP
 
        LD L,A
 
        LD (HDEts),HL
 
        EX DE,HL
 
        POP HL
 
        LD BC,0X105
 
HDE3D13 LD DE,0XFFFF
 
HDEts   EQU $-2
 
        LD HL,secHDD
 
        CALL 0X3D13
 
HDE2COPY
 
        LD HL,secHDD
 
        LD DE,secOLD
 
        LD B,1                  ;BC,512
 
        LDIR
 
HDEDUMP CALL PRDUMP             ;печатаем дамп
 
HDE0    RES 5,(IY+1)
 
HDENKEY CALL HDECUR
 
        HALT
 
        BIT 5,(IY+1)
 
        JR Z,HDENKEY
 
        CALL HDECUROFF
 
        LD HL,HDE0
 
        PUSH HL
 
        LD HL,(CURadr)
 
        LD A,(0X5C08)
 
        CP 4
 
        JR Z,HDEPGOK
 
        CP 5
 
        JR Z,HDEPGOK
 
        CP 8
 
        JR NZ,HDEnL
 
        DEC L
 
        JR HDE0OK
 
 
 
HDEnL   CP 9
 
        JR NZ,HDEnR
 
HDEyR   INC L
 
        JR HDE0OK
 
 
 
HDEnR   CP 0X0A
 
        JR NZ,HDEnDN
 
        LD A,L
 
        ADD A,8
 
        LD L,A
 
        JR HDE0OK
 
 
 
HDEnDN  CP 0X0B
 
        JR NZ,HDEnUP
 
        LD A,L
 
        SUB 8
 
        LD L,A
 
        JR HDE0OK
 
 
 
HDEPGOK LD A,L
 
        XOR 0X80
 
        LD L,A
 
HDE0OK  LD A,(CURadr)
 
        XOR L
 
        RLA
 
        LD (CURadr),HL
 
        RET NC                  ;HDE0
 
        JR PRDUMP               ;,HDE0
 
 
 
HDEnUP  CP 0X0C
 
        JR NZ,HDEnBS
 
        DEC L
 
        INC H
 
        INC H
 
        LD A,(HL)
 
        DEC H
 
        DEC H
 
        LD (HL),A
 
        PUSH HL
 
        CALL PRHEXLIN
 
        POP HL
 
        JR HDE0OK
 
 
 
HDEnBS  CP 0XC7
 
        JR NZ,HDEnsQ
 
        PUSH HL
 
HDEsQ0  INC HL
 
        LD A,(HL)
 
        DEC HL
 
        LD (HL),A
 
        INC HL
 
        LD A,H
 
        SUB HIGH (secHDD)+1     ;2
 
        JR NZ,HDEsQ0
 
        DEC HL
 
        LD (HL),A
 
        POP HL
 
        JR PRDUMP
 
 
 
HDEnsQ  CP 0XC9
 
        JR NZ,HDEnsW
 
        PUSH HL
 
        LD C,(HL)
 
HDEsW0  INC HL
 
        LD A,(HL)
 
        LD (HL),C
 
        LD C,A
 
        INC HL
 
        LD A,H
 
        DEC HL
 
        SUB HIGH (secHDD)+1     ;2
 
        JR NZ,HDEsW0
 
        POP HL
 
PRDUMP  LD HL,secHDD            ;печаталка дампа
 
CURadr  EQU $-2
 
        LD A,L
 
        AND 0X80
 
        LD L,A
 
PRHXPG0 CALL PRHEXLIN
 
        LD A,L
 
        ADD A,A
 
        JR NZ,PRHXPG0
 
        RET
 
 
 
HDEnsW  CP "l"                  ;load
 
        POP DE                  ;сняли адрес HDE0
 
        JP Z,HDELOAD
 
        CP 0X0D
 
        JR NZ,HDEnSAV
 
        CALL 0X1F5A
 
        LD BC,0X106
 
        JP NC,HDE3D13
 
HDEnSAV PUSH DE                 ;0..9A..F
 
        CALL HDEin0F
 
        RET C
 
HDE09OK LD C,(HL)
 
        REPT 4
 
        RLA
 
        ENDM
 
        XOR (HL)
 
        AND 0XF0
 
        XOR (HL)
 
        LD (HL),A
 
        PUSH BC
 
        PUSH HL
 
        CALL PRHEXLIN
 
HD0F0   XOR A
 
        LD (inv2chr),A
 
        RES 5,(IY+1)
 
HD0FKEY CALL HDECUR
 
        HALT
 
        BIT 5,(IY+1)
 
        JR Z,HD0FKEY
 
        CALL HDECUROFF
 
        LD A,0XFF
 
        LD (inv2chr),A
 
        CALL 0X1F54
 
        JR NC,HD0FBACK
 
        LD A,(0X5C08)
 
        CALL HDEin0F
 
        JR C,HD0F0
 
        POP HL
 
        POP BC
 
        XOR (HL)
 
        AND 0X0F
 
        XOR (HL)
 
HDEprA  LD (HL),A
 
        PUSH HL
 
        CALL PRHEXLIN
 
        POP HL
 
        JP HDEyR
 
 
 
HD0FBACK
 
        POP HL
 
        POP BC
 
        LD (HL),C
 
        PUSH HL
 
        CALL PRHEXLIN
 
        POP HL
 
        RET
 
 
 
HDEin0F OR 0X20
 
        SUB "0"
 
        RET C
 
        CP 0X0A
 
        CCF
 
        RET NC          ;0..9
 
        CP 0X61-0X30    ;"a"-"0"
 
        RET C
 
        SUB 0X61-0X3A   ;"a"-":"
 
        CP 0X10
 
        CCF
 
        RET
 
 
 
;печаталка одной строки дампа
 
PRHEXLIN
 
        LD A,L
 
        AND 0XF8
 
        LD L,A
 
        AND 0X7F
 
        RRCA
 
        RRCA
 
        RRCA
 
        LD B,A
 
        LD C,3          ;4
 
        CALL AT
 
        LD A,L
 
        CALL PRHEX
 
        INC E
 
        PUSH HL
 
        LD B,8
 
PRH0    LD A,(HL)
 
        CALL PRHEX
 
        INC H
 
        INC H
 
        LD A,(HL)
 
        DEC H
 
        DEC H
 
        CP (HL)
 
        JR Z,PRH0OK
 
        DEC E
 
        DEC E
 
        CALL INV2SYM
 
PRH0OK  INC HL
 
        DJNZ PRH0
 
        POP HL
 
        INC E
 
        LD B,8
 
PRH1    LD A,(HL)
 
        CALL PR88               ;PRSYM
 
        INC H
 
        INC H
 
        LD A,(HL)
 
        DEC H
 
        DEC H
 
        CP (HL)
 
        JR Z,PRH1OK
 
        DEC E
 
        CALL INVSYM
 
PRH1OK  INC HL
 
        DJNZ PRH1
 
        RET
 
 
 
AT      EX DE,HL                ;BC->DE
 
        LD A,C
 
        ADD A,A
 
        ADD A,A
 
        ADD A,A
 
        LD C,A
 
        LD A,B
 
        ADD A,A
 
        ADD A,A
 
        ADD A,A
 
        CALL 0X22B0
 
        EX DE,HL
 
        RET 
 
 
 
HDECUROFF
 
        LD A,1
 
        LD (hdecurtim),A
 
        LD A,(hdecuron)
 
        OR A
 
        RET Z
 
        JR HDECURU
 
 
 
HDECUR  PUSH HL
 
        LD HL,(CURadr)
 
        LD A,(HL)
 
        INC H
 
        INC H
 
        CP (HL)
 
        LD A,0X20
 
        JR Z,$+3
 
        ADD A,A
 
        LD (hdetimadd),A
 
        POP HL
 
        LD A,1
 
hdecurtim       EQU $-1
 
        SUB 0X20
 
hdetimadd       EQU $-1
 
        LD (hdecurtim),A
 
        RET NC
 
        LD A,0                  ;0XFF=printed
 
hdecuron        EQU $-1
 
HDECURU CPL
 
        LD (hdecuron),A
 
        LD A,(CURadr)           ;low byte of addr
 
        LD C,A
 
        RRA
 
        RRA
 
        RRA
 
        AND 0X0F                        ;31
 
        LD B,A
 
        LD A,C
 
        AND 7
 
        ADD A,A
 
        ADD A,6                 ;8
 
        LD C,A
 
        CALL AT
 
        LD A,0XFF               ;0XFF=2chr
 
inv2chr EQU $-1
 
        OR A
 
        JR NZ,INV2SYM
 
        INC E
 
        JR INVSYM
 
 
 
INV2SYM CALL INVSYM
 
INVSYM
 
INV86   PUSH BC
 
        PUSH DE
 
        LD B,4                  ;3
 
IN860   LD A,(DE)
 
        CPL
 
        LD (DE),A
 
        INC D
 
        LD A,(DE)
 
        CPL
 
        LD (DE),A
 
        INC D
 
        DJNZ IN860
 
        POP DE
 
        POP BC
 
        INC E
 
        RET
 
 
 
;для доктора
 
INH     PUSH BC
 
        PUSH DE
 
        LD D,0X58
 
        LD A,0XB0
 
        LD (DE),A
 
        RES 5,(IY+1)
 
INH0    BIT 5,(IY+1)
 
        JR Z,INH0
 
        LD A,7
 
        LD (DE),A
 
        POP DE
 
        POP BC
 
        LD A,(0X5C08)
 
        CALL HDEin0F
 
        RET C
 
        PUSH AF
 
        LD A,(0X5C08)
 
        CALL PR88               ;PRSYM
 
        POP AF
 
        RET
 
 
 
HELPCLS LD DE,0X4001
 
        LD BC,0X1800
 
        LD H,D
 
        LD L,C
 
        LD (HL),L
 
        LDIR
 
        LD (HL),7
 
        LD BC,0X02FF
 
        LDIR
 
        RET
 
 
 
TTSTKEY DB      "1234567890"
 
        DUPL 22," "
 
        DB "QWERTYUIOP"
 
        DUPL 22," "
 
        DB "ASDFGHJKLe"
 
        DUPL 22," "
 
        DB "cZXCVBNMs",0
 
 
 
TNORM   DB "                            ",0
 
TZERO   EQU $-1
 
TSEC    DB "sec",0
 
TSECAL  DB "sec alarm",0
 
TMIN    DB "min",0
 
TMINAL  DB "min alarm",0
 
THR     DB "hour",0
 
THRAL   DB "hour alarm",0
 
TDAYOFW DB "[day of week]",0
 
TDAY    DB "day",0
 
TMONTH  DB "month",0
 
TYEAR   DB "year",0
 
T20     DB "#20",0
 
TBIN    DB "b2=noBCD,b1=24hour,b0=season",0
 
TINT    DB "[int bits]",0
 
TBATT   DB "[b7=battery low]",0
 
TMEM    DB "mem mode (b7=slow)",0
 
TDRV    DB "drv (b7=off)",0
 
TAA     DB "#AA",0
 
T_G     DB "#47=msg in following mem",0
 
 
 
TCMOSMSGS
 
        DW TSEC
 
        DW TSECAL
 
        DW TMIN
 
        DW TMINAL
 
        DW THR
 
        DW THRAL
 
        DW TDAYOFW
 
        DW TDAY
 
        DW TMONTH
 
        DW TYEAR
 
        DW T20
 
        DW TBIN
 
        DW TINT
 
        DW TBATT
 
        DW TMEM
 
        DW TZERO
 
        DW TDRV
 
        DW TAA
 
        DW T_G
 
 
 
THELP      ;12345678901234567890123456789012
 
        DB "Key+RESET:     Space=TRDOS      "
 
        DB "         CS=Basic128 SS=Basic48 "
 
;       DB "     CS+SS=Basic128 Space=TRDOS "
 
        DB "D=Grass!512b(PSB^Halloween CC04)"
 
        DB " C=ColorTable+border keys+COVOX "
 
        DB "         S=CMOS SetUp           "
 
        DB "                                "
 
        DB " In Gluk main menu: 1-4=drive,  "
 
        DB " M=memory mode, W=on/off turbo  "
 
        DB "Y=Virtual drive, V=TR-DOS drive "
 
        DB " 8=on/off mouse, 9=on/off time  "
 
        DB "    & uppercased option keys.   "
 
        DB 0
 
 
 
        include "sysvar.a80"