Top secrets sources NedoPC pentevo

Rev

Rev 1047 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?


; LAST UPDATE: 24.02.2023 savelij

PAGE
                TITLE "main.a80"

                include ../../macros.a80
                include ../../define.a80
                include ../../global_vars.a80
                include ../../ports_ide.a80
                include ../../basic_tokens.a80
                include ../../bas_trd_vars.a80
                include ../../tmpkeys.a80
                include ../../version.a80
                include ../../nums_devices.a80
                include ../../ports_ngs.a80

TO_DOS          EQU 0x3D2F

 INIT_VAR 0xC000
 SETVAR ADR_CAT,        0xC00           ;  ¤à¥á ¡ãä¥à  ¤«ï ¤¨áª¥âë ¨«¨ ®¡à § 
 SETVAR ADR_CAT_FAT,    0x800           ;  ¤à¥á ¡ãä¥à  ­ ©¤¥­­ëå ä ©«®¢ ­  FAT
 SETVAR ADR_CAT_SCRH,   0x1000          ;  ¤à¥á ¡ãä¥à  ¤«ï ¯®¨áª  ä ©«®¢
 SETVAR BUFTSC,         0x180           ; 180 â ¡«¨æ   ¤à¥á®¢ áâப íªà ­               F700
 SETVAR MOUSE_BUFF,     0x10            ; 10 ¡ãä¥à á®åà ­¥­¨ï ¯®¤ ¬ëèìî
 SETVAR COLBUF,         0x20            ; 20 ¡ãä¥à á®åà ­¥­¨ï 梥â 
 SETVAR BUF_FILEITEM,   0x20            ; 20 ¡ãä¥à ®¯¨á â¥«ï ä ©« 
 SETVAR BUF_RDSEC,      0x200           ; 200 ¡ãä¥à ᥪâ®à  ¯à¨ ¯à®¢¥àª¥ ä ©«®¢         F900
 SETVAR BUF_RDPATH,     0x100           ; 100 ¡ãä¥à ⥪ã饣® ¯ã⨠                      FB00
 SETVAR BUF_LEVDIR,     0x400           ; 400 ¡ãä¥à ã஢­¥© ¤¨à ¤«ï ä ©«®¢®£® ®ª­       FC00
 SETVAR BUF_LINESWIN,   0x200           ; 200 ¡ãä¥à ¤«ï ®¯¨á â¥«¥© ªãàá®à  ¯®¤ ¬ëèìî

H_FILE          EQU 16                  ; è¨à¨­  ®ª­  ¤«ï ¢ë¢®¤  ä ©«®¢ c TR-DOS
V_FILE          EQU 24                  ; ¢ëá®â  ®ª­  ¤«ï ¢ë¢®¤  ä ©«®¢ c TR-DOS
FV_FILE         EQU 26                  ; è¨à¨­  ®ª­  ¤«ï ¢ë¢®¤  ä ©«®¢ c FAT
FV_FILE6        EQU ((FV_FILE-3)*8)/6   ; è¨à¨­  ®ª­  ¤«ï ¢ë¢®¤  ä ©«®¢ á FAT ¢ §­ ª®¬¥áâ å 6å8
FH_FILE         EQU 24                  ; ¢ëá®â  ®ª­  ¤«ï ¢ë¢®¤  ä ©«®¢ á FAT
WIDE            EQU 1                   ; ¤¢  ¯à®¡¥«  á ¡®ª®¢

CMOS_ON         EQU 0x80
CMOS_OFF        EQU 0

                ORG 0x6000
                DI
                CALL CLEAR_128K
                LD A,0x10
                CALL SET_7FFD                   ; ¢ª«î祭¨¥ ¡ á¨ª 48 ¨ áâà ­¨æë 0
                CALL ADRTSC                     ; ᮧ¤ ­¨¥ â ¡«¨æë  ¤à¥á®¢ áâப íªà ­ 
        RST8 _MOUNTER,_GET_VIRT_BITS
        RST8 _COM_DEV,_DEVFIND
                JR C,START3
        RST8 _MOUNTER,_FIND_MOUNTED
START3
        RST8 _COM_DEV,_CONTROL_SD
                EI
                HALT
                DI
                LD H,0
                CALL READCMOS                   ; ç⥭¨¥ ᥪ㭤 ¤«ï ®¯à¥¤¥«¥­¨ï ­ «¨ç¨ï ª¬®á
                INC L
                LD HL,ERS_FLAGS
                JR NZ,START2                    ; ¥á«¨ ¯à®ç¨â «®áì 0xFF, â®
                RES B_CLOCK_ON,(HL)             ; ª¬®á ­¥ ­ ©¤¥­
                JR START1

START2          SET 2,(HL)                      ; ª¬®á ­ ©¤¥­
START4          CALL SET_MODES
START1          CALL DETECTMOUSE                ; ®¯à¥¤¥«¥­¨¥ ­ «¨ç¨ï ¬ëè¨
                CALL GLUDIN                     ; ¡ã¬ª­ã«¨ ¢ AY
                CALL MOUSE                      ; ®¯à®á ¬ëè¨
                LD HL,0x807C
                LD (ARXY),HL                    ; ãáâ ­®¢ª  ¤¥ä®«â­®© ¯®§¨æ¨¨ ¬ëè¨ ¯à¨ áâ àâ¥
                CALL DISK_NONE
                CALL SYSTEM
                CALL RESET_VG                   ; á¡à®á ¢£èª¨ ¨ ãáâ ­®¢ª  ¯¥à¥å¢ â稪  ®è¨¡®ª dos
RESTART         DI
                LD A,0x10
                CALL SET_7FFD                   ; ¢ª«î稫¨ ¡ á¨ª48 ¨ áâà ­¨çªã 0
                CALL TURBO_7MHZ
                CALL SYSTEM
                RES 3,(IY+55)
                LD SP,0x6000
                LD HL,0x3E00
                PUSH HL
                LD HL,0x1303
                PUSH HL                         ; áä®à¬¨à®¢ «¨ ¤­® á⥪ 
                LD (ERR_SP),SP                  ; § ­¥á«¨ ⥪ã騩  ¤à¥á ¢ ¯¥à¥¬¥­ë¥ ¡ á¨ª 
                LD (TEK_SP),SP
                CALL S_FACE                     ; ¢ë¢®¤ ­  íªà ­ ®á­®¢­®£® ¢¨¤ 
                LD IX,MAINMENU
        RST8 _WINW
                RES 5,(IY+1)                    ; ­  ª« ¢¨ âãॠ­¨ç¥£® ­¥ ­ ¦ â®
                LD H,HDD_TIMEOUT
                CALL READCMOS
                RRCA
                RRCA
                RRCA
                RRCA
                AND 0x0F
                LD (SCRSAV.TIMEOUT),A
                CALL RESET_SCREENSAVER

        IFDEF TESTEMUFDD
; test
        PEC_ON M_SHADOW_BF
        EVOPORT WIN_P2,RAM_DATARAMD
        EVOPORT WIN_P2,ZXSTD_CPU2
        PEC_OFF M_SHADOW_BF!0xFF

                LD HL,VIRT_REAL_DRIVE << 8
                CALL WRITECMOS
                LD HL,ADR_TXT_BOOT
                JP RUNFILE1

ADR_TXT_BOOT    DB "boot    "
; test
        ENDIF

; ¢å®¤ ¢ £« ¢­ë© 横« ®¯à®á  ã¯à ¢«¥­¨ï
_RULILKA        EI     
                LD A,(ERS_FLAGS)
                AND M_MOUSE_ON                  ; ¯à®¢¥àª  ­ «¨ç¨ï ¬ëè¨
                JR Z,_RULNMO
; FIX ª®«¥á® ¬ëè¨
MKEYPR          EI
                HALT
                LD A,HIGH (MOUSE_KEYS)
                IN A,(LOW (MOUSE_KEYS))
                CPL
                AND 7
                JR NZ,MKEYPR
                CALL SAVE2X2                    ; ¥á«¨ ¬¥­î ­ ¯¥ç â «¨ ¯®¢¥àå áâ५ª¨
_RULNMO         CALL SET_ADR_ATR                ; ãáâ ­®¢ª  ­®¢®£®  ¤à¥á  ¤«ï 梥⭮© ¯®«®áª¨
                JR MAINLOP

; ­ ¦ â  áâ५ª  ¢¢¥àå
UP              CALL CURSOR_UP                  ; ᬥ­¨«¨ ⥪ã騩 ¯ã­ªâ ­  -1
                JR SET_POS1                    

; ­ ¦ â  áâ५ª  ¢¯à ¢®
RIGHT           BIT 1,(IX+_FLAGS)               ; ¯à®¢¥àª  ¯à®áâ® ¬¥­î ¨«¨ ä ©«®¢®¥
                PUSH AF                         ; á®åà ­¨«¨ १ã«ìâ â ¯à®¢¥àª¨
                CALL NZ,PAGEDN                  ; ¥á«¨ ä ©«®¢®¥, â® «¨áâ ­¨¥ áâà ­¨ç­®¥
                POP AF                          ; ¢®ááâ ­®¢¨«¨ १ã«ìâ â ¯à®¢¥àª¨
                JR NZ,SET_POS1                  ; ¥á«¨ ä ©«®¢®¥ ¯à®¤®«¦ ¥¬
                LD A,(IX+_NUM_KOL_L)
                AND A
                JR Z,SET_POS
                DEC A                           ; ¨­ ç¥ ¯¥à¥å®¤ ªãàá®à  ­  ¯®á«¥¤­¨© ¯ã­ªâ
                JR SET_POS                      ; ¨§¬¥­ï¥¬ ¯®«®¦¥­¨¥ ªãàá®à  ¨ ¯à®¤®«¦ ¥¬

; ­ ¦ â  áâ५ª  ¢­¨§
DOWN            CALL CURSOR_DOWN                ; ᬥ­¨«¨ ⥪ã騩 ¯ã­ªâ ­  +1
                JR SET_POS1

; ­ ¦ â  áâ५ª  ¢«¥¢®
LEFT            BIT 1,(IX+_FLAGS)               ; ¯à®¢¥àª  ¯à®áâ® ¬¥­î ¨«¨ ä ©«®¢®¥
                PUSH AF                         ; á®åà ­¨«¨ १ã«ìâ â ¯à®¢¥àª¨
                CALL NZ,PAGEUP                  ; ¥á«¨ ä ©«®¢®¥, â® «¨áâ ­¨¥ áâà ­¨ç­®¥
                POP AF                          ; ¢®ááâ ­®¢¨«¨ १ã«ìâ â ¯à®¢¥àª¨
                JR NZ,SET_POS1                  ; ¥á«¨ ä ©«®¢®¥ ¯à®¤®«¦ ¥¬
                XOR A                           ; ¨­ ç¥ ¯¥à¥å®¤ ªãàá®à  ­  ¯¥à¢ë© ¯ã­ªâ
SET_POS         LD (IX+_NUM_PKT),A              ; ¨§¬¥­¨«¨ ¯®§¨æ¨î ªãàá®à 
                LD (IX+_TEK_PKT_L),A
                LD (IX+_TEK_PKT_H),0            ; ¨§¬¥­¨«¨ ­®¬¥à ¢ë¡à ­­®£® ¯ã­ªâ 
SET_POS1        CALL COLOR_CURSOR               ; ¯¥à¥à¨á®¢ª  梥⭮© ¯®«®áª¨ ¬¥­î
SET_POS2        CALL GLUDIN                     ; ¡ã¬ª­ã«¨ ¢ AY
MAINLOP
                CALL CHECK_SCREENSAVER
        RST8 _COM_DEV,_CONTROL_SD               ; ¯à®¢¥àª  ­ «¨ç¨ï SD ª àâ ¨ ®¡­®¢«¥­¨¥ ¨­¤¨ª â®à®¢
                LD A,(ERS_FLAGS)
                AND M_MOUSE_ON                  ; ¯à®¢¥àª  ­ «¨ç¨ï ¬ëè¨
                JP Z,MAINNMO
                LD HL,(ARXY)                    ; áâ à ï ª®®à¤¨­ â  ¬ëè¨
                PUSH HL
                CALL MOUSE                      ; ®¯à®á ¯®à⮢ ¬ëè¨
                POP BC
                AND A
                SBC HL,BC
                JR Z,NO_SELECT                  ; ­¥ ¡ë«® ¤¢¨¦¥­¨ï ¬ëè¨
                CALL RESTORE_KOSHAK             ; ¡ë«® ¤¢¨¦¥­¨¥ ¬ëè¨, á¡à®á áç¥â稪®¢ ª®è ª 
                CALL MOUOPT                     ; ¯à®¢¥àª  ­ ¢¥¤¥­¨ï ¬ëè¨ ­  § ¤ ­­®¥ ®ª­®
NO_SELECT       LD BC,MOUSE_KEYS
                IN A,(C)                        ; ®¯à®á ­ ¦ â¨ï ª­®¯®ª ¬ëè¨
                AND 7
                CP 6
                JR Z,PRESS_MOUSE                ; ¥á«¨ ­ ¦ â  «¥¢ ï ª­®¯ª  ¬ëè¨
                CP 5
                JP Z,RESTART                    ; ¥á«¨ ­ ¦ â  ¯à ¢ ï ª­®¯ª  ¬ëè¨
                CALL PRINTTIME                  ; ®¡­®¢¨«¨ ¢à¥¬ï ¥á«¨ ¨§¬¥­¨«®áì
                EI
                HALT
                CALL REST2X2                    ; ¢®ááâ ­®¢¨«¨ ªã᮪ íªà ­   ¯®¤ ¬ëèìî
                CALL DRAW_MOUSE                 ; ­ à¨á®¢ «¨ ªãàá®à ¬ëè¨
                JR MAINQMO                      ; ¯à®¤®«¦¥­¨¥ ®¯à®á 

PRESS_MOUSE     CALL OPMSPL
                AND A
                JR Z,CP_MOUSE4
                LD (LAST_K),A
                CALL TIMELP
                JR SELECT_KEY

CP_MOUSE4       CALL MOUOPT                     ; ¯à®¢¥àª  ¯®¯ ¤ ­¨ï ¬ëè¨ ¢ ¯à¥¤¥«ë ⥪ã饣® ®ª­ 
                JR C,MAINNMO                    ; ­¥ ¯®¯ «¨ ¨ ¥¤¥¬ ¤ «¥¥
                LD L,(IX+_ADR_HOTKEY_L)
                LD H,(IX+_ADR_HOTKEY_H)
                LD A,H
                OR L
                JR Z,ENTER                      ; ᯨ᪠ å®âª¥¥¢ ­¥â, ¯¥à¥å®¤¨¬ ¯® ­®¬¥à㠯㭪â 
                LD E,(IX+_NUM_PKT)              ; ¢§ï«¨ ­®¬¥à ¯ã­ªâ  ªã¤  ¯®¯ «¨ ¬ëèìî
                LD D,0
                ADD HL,DE                       ;  ¤à¥á å®âª¥ï ¢ë¡à ­­®£® ¯ã­ªâ 
                LD DE,LAST_K
                LDI                             ; í¬¨â æ¨ï ­ ¦ â¨ï § ¤ ­­®© ª­®¯ª¨
                JR ENTER
               
MAINNMO         CALL PRINTTIME                  ; ®¡­®¢«¥­¨¥ ¢à¥¬¥­¨, ¥á«¨ ¢ ®­® ®¡­®¢¨«®áì
                EI
                HALT
MAINQMO         BIT 5,(IY+1)                    ; ¯à®¢¥àª  ­ ¦ â¨ï ª­®¯®ª ª« ¢¨ âãàë
                CALL Z,CP_TIME_KOSHAK           ; ¥á«¨ ­¥ ­ ¦ â® ­¨ç¥£®, ¯à®¢¥à塞 áç¥â稪 ª®è ª 
                JP Z,MAINLOP                    ; ¯à®¤®«¦ ¥¬ ®¯à®á ã¯à ¢«¥­¨ï
                CALL 0x1F54                     ; ¯à®¢¥àª  ­  BREAK
                JP NC,RESTART                   ; ¥á«¨ BREAK ­ ¦ â ¯¥à¥§ ¯ã᪠¥¬áï
SELECT_KEY      CALL GLUDIN
                CALL RESTORE_KOSHAK             ; ­ ¦ â® ­¥çâ® ­  ª« ¢¥, á¡à®á áç¥â稪  ª®è ª 
                CALL RESET_SCREENSAVER
                RES 5,(IY+1)                    ; ­  ª« ¢¨ âãॠ­¨ç¥£® ­¥ ­ ¦ â®
                LD HL,LAST_K
                LD A,(HL)                       ; ¢§ï«¨ ­ ¦ âãî ª« ¢¨èã
                LD B,0
                LD HL,MAIN_KEYS
                LD C,(HL)                       ; ª®«¨ç¥á⢮ ¤®áâ㯭ëå ª­®¯®ª
                LD D,C
                INC HL
                CPIR
                JR NZ,NOMAINKEYS                ; ­¨ç¥£® ­¥ ­ è«¨, ¤ «¥¥ ᬮâਬ ª­®¯ª¨ ⥪ã饣® ®ª­ 
                                                ; ­ ¦ â® çâ®-â® ¨§ £« ¢­ëå ª­®¯®ª, ¤®áâ㯭ëå ¢á¥£¤ 
                LD HL,ADREXEKEYS
                LD A,D                          ; ª®«¨ç¥á⢮ ª­®¯®ª ¢ â ¡«¨æ¥ -1
                SUB C                           ; ¯®«ã稫¨ ¢ë¡à ­­ë© ­®¬¥à
                DEC A
                JR JUMP2HL

; ¯à®¢¥àª  å®âª¥¥¢ ¢ ⥪ã饬 ®ª­¥
NOMAINKEYS      LD L,(IX+_ADR_HOTKEY_L)
                LD H,(IX+_ADR_HOTKEY_H)
                LD C,A
                LD A,H
                OR L
                JP Z,MAINLOP                    ; ¥á«¨ ᯨ᪠ ­¥â, ¯à®¤®«¦ ¥¬ ®¯à®á
                LD A,C
                LD C,(IX+_V_SIZE)
                LD E,(HL)
                INC HL
                DEC C                           ; ª®«¨ç¥á⢮ ª­®¯®ª
                DEC C                           ; ¢ëá®â  ®ª­  -2
                LD D,C
                LD B,0
                CPIR                            ; ᪠­¨à®¢ ­¨¥ ᯨ᪠ § ¤ ­­ëå ª« ¢¨è
                JR NZ,OSTAT_KEYS
                LD A,D                          ; ¢ëá®â  ®ª­ 
                SUB C
                DEC A                           ; ¯®«ã稫¨ ­®¬¥à ­ ¦ â®© ª­®¯ª¨ ¨ -1
                LD (IX+_NUM_PKT),A              ; ­®¬¥à ¯ã­ªâ  ¢ ®ª­¥
                LD (IX+_TEK_PKT_L),A            ; ­®¬¥à ­ ¦ â®© ª« ¢¨è¨ ¯® 㪠§ ­­®¬ã ᯨáªã
ENTER           LD A,(ERS_FLAGS)
                AND M_MOUSE_ON
                CALL NZ,TIMELP                  ; ®¡­®¢«¥­¨¥ ¢à¥¬¥­¨ ¥á«¨ ®­® ¨§¬¥­¨«®áì       
                CALL REST2X2                    ; áâ¥à«¨ ªãàá®à ¬ëè¨
                CALL GLUDIN                     ; ¡ã¬ª­ã«¨ ¢ AY
                LD A,(IX+_NUM_PKT)              ; ­®¬¥à ¨§ ᯨ᪠ ª®â®àë© ¢ë§¢ âì
JUMP2HL1        LD L,(IX+_ADR_PRG_L)
                LD H,(IX+_ADR_PRG_H)            ; ¢§ï«¨ ᯨ᮪  ¤à¥á®¢ 1 ¨§ ª®â®àëå ¡ã¤¥¬ ¢ë§ë¢ âì
JUMP2HL         ADD A,A
                ADD A,L
                LD L,A
                ADC A,H
                SUB L
                LD H,A
                LD A,(HL)
                INC HL
                LD H,(HL)
                LD L,A
                JP (HL)

OSTAT_KEYS      EX AF,AF'
                LD A,E
                SUB D
                JP Z,MAINLOP
                LD C,A
                EX AF,AF'

                CPIR
                JP NZ,MAINLOP
                LD A,E
                SUB C
                DEC A
                JR JUMP2HL1

; ¨§¬¥­¥­¨¥ ०¨¬  ¯ ¬ïâ¨
CHNGMODE        LD HL,MEMMODE
                DEC (HL)                        ; ᬥ­¨«¨ ०¨¬ ¯ ¬ïâ¨
                JP P,CHNGMODEY
                LD (HL),2                       ; ¥á«¨ ¯¥à¥è«¨ ç¥à¥§ 0, â® ¢ëáâ ¢¨«¨ ०¨¬ 48
CHNGMODEY       LD A,(ERS_FLAGS)
                AND M_CLOCK_ON                  ; ¯à®¢¥àª  ­ «¨ç¨ï ª¬®á 
                RET Z
                LD A,(ERS_FLAGS)
                AND M_EMU_TAPE
                RLCA
                RLCA
                LD L,A
                LD A,(MEMMODE)
                OR L
                LD L,A
CHNGMODEY1      LD A,(SYSREG1)
                AND 0x10
                RLCA
                RLCA
                RLCA
                OR L
                LD C,A
                LD H,CMOS_BYTE_01
                CALL READCMOS
                AND %01111100
                OR C
CHANGE_MODES    LD L,A
                CALL WRITECMOS                  ; á®åà ­¨«¨ ¢ ª¬®á ¨§¬¥­¥­ë© ०¨¬
                CALL REST2X2
                CALL SET_MODES
                CALL PRT_MODES
                LD A,(ERS_FLAGS)
                AND M_MOUSE_ON
                JP Z,MAINLOP
                CALL DRAW_MOUSE
                CALL TIMELP
                JP MAINLOP

; ¨§¬¥­¥­¨¥ ०¨¬  âãà¡® 0=3,5MHZ, 1=7MHZ, 2-14MHZ
CHNGTURBO       LD HL,TURBO_NUM
                INC (HL)                        ; ᬥ­¨«¨ turbo ०¨¬
                LD A,(HL)
                CP 3
                JR C,CHNGTURBO1
                LD (HL),0                       ; ¥á«¨ ¯¥à¥è«¨ ç¥à¥§ 0, â® ¢ëáâ ¢¨«¨ ०¨¬ 14MHZ
CHNGTURBO1      LD A,(HL)
                AND A
                LD DE,0x1000
                JR Z,CHNGTURBO2
                DEC A
                LD DE,0
                JR Z,CHNGTURBO2
                LD DE,0X10*0X100+M_TURBO14
CHNGTURBO2      LD A,D
                LD HL,SYSREG1
                LD A,(HL)
                AND %11101111                   ; ¨­¢¥àá¨ï ¡¨â  âã࡮०¨¬ 
                OR D
                LD (HL),A
                LD H,CMOS_BYTE_00
                CALL READCMOS
                AND M_TURBO14!0XFF
                OR E
                LD L,A
                LD H,CMOS_BYTE_00
                CALL WRITECMOS
                JP CHNGMODEY

CHNGTAPMODE     LD H,CMOS_BYTE_00
                CALL READCMOS
                XOR M_EMUL_TAPE
                JR CHANGE_MODES

CHNGGLUKMOD     LD H,CMOS_BYTE_00
                CALL READCMOS
                AND MKOL_MODES!0xFF
                LD C,A
                LD A,L
                AND MKOL_MODES
                INC A
                CP KOL_MODES
                JR C,CHNGGLUKMOD1
                XOR A
CHNGGLUKMOD1    OR C
                LD L,A
                JR CHANGE_MODES

EN_AUTOMNT      LD H,CMOS_BYTE_01
                CALL READCMOS
                XOR M_AUTOMOUNT
                JP CHANGE_MODES

EN_LOADFONT     LD H,CMOS_BYTE_00
                CALL READCMOS
                XOR M_RELOAD_FONT
                JP CHANGE_MODES

SET_TYPEFONT    LD H,CMOS_BYTE_00
                CALL READCMOS
                XOR M_TYPE_FONT
                PUSH AF
                PUSH HL
                AND M_TYPE_FONT
                JR Z,SETTYPEFONT
                LD A,1
SETTYPEFONT
        RST8 _SETUP_FONT
                POP HL
                POP AF
                JP CHANGE_MODES

; ¢ª«î祭¨¥/¢ëª«î祭¨e ®â®¡à ¦¥­¨ï ç á®¢
CMOS_ONOFF      LD A,(ERS_FLAGS)
                AND M_CLOCK_ON                  ; ¯à®¢¥àª  ­ «¨ç¨ï ª¬®á 
                JP Z,MAINLOP
                LD H,CMOS_BYTE_01
                CALL READCMOS
                XOR M_CLOCK_VIEW
                LD L,A
                PUSH AF
                LD H,CMOS_BYTE_01
                CALL WRITECMOS
                POP AF
                AND M_CLOCK_VIEW
                JP Z,MAINLOP
                LD HL,TIME_OFF
        RST8 _PRINT_MESSAGE
                JP MAINLOP

;¢ª«î祭¨¥/¢ëª«î祭¨¥ ªãàá®à  ¬ëè¨
MOUSE_ONOFF     LD HL,ERS_FLAGS
                LD A,(HL)
                XOR M_MOUSE_ON                  ; ¨­¢¥àá¨ï ®â®¡à ¦¥­¨ï ¬ëè¨
                LD (HL),A
                AND M_MOUSE_ON
                CALL NZ,DETECTMOUSE             ; ¥á«¨ ¢ª«î稫¨, ¯à®¢¥à塞 ­ «¨ç¨¥
                CALL NC,REST2X2                 ; ¥á«¨ ¬ëèì ­¥ ­ ©¤¥­ , â® ¢ëª«îç ¥¬ ®â®¡à ¦¥­¨¥
                JP MAINLOP

;®¦¨¤ ­¨¥ ­ ¦ â¨ï 祣®-­¨¡ã¤ì ¯®á«¥ ®è¨¡ª¨
EXIT4ERROR      RES 5,(IY+1)                    ; ­  ª« ¢¨ âãॠ­¨ç¥£® ­¥ ­ ¦ â®
                LD BC,MOUSE_KEYS
                IN D,(C)
E4E1            CALL PRINTTIME
                EI
                HALT
                BIT 5,(IY+1)
                JR NZ,E4E3
                LD A,(ERS_FLAGS)
                AND M_MOUSE_ON
                JR NZ,E4E1
                LD A,HIGH (MOUSE_KEYS)
                IN A,(LOW (MOUSE_KEYS))
                CP D
                JR Z,E4E1
E4E2            EX AF,AF'
                CALL TIMELP
                EX AF,AF'

                RRA
                RET

E4E3            XOR A
                IN A,(0XFE)
                CPL
                AND 0x1F
                JR NZ,E4E3
                LD (LAST_K),A
                RES 5,(IY+1)                    ; ­  ª« ¢¨ âãॠ­¨ç¥£® ­¥ ­ ¦ â®
                RET

; ¯¥ç âì ⥪ã饣® ¢ë¡à ­­®£® ¤¨áª®¢®¤ 
PRT_DRV_SYM     LD A,(TRD_5CF8)
                ADD A,"A"
                LD (TXT_DRIVE),A
                LD HL,TRDDRV_MODE
        RST8 _PRINT_MESSAGE
                RET

; à á¯¥ç âª  ⥪ã饣® ०¨¬ 
PRT_MODES       LD HL,SPEED_MODE
        RST8 _PRINT_MESSAGE
                LD HL,MEM_MODE
        RST8 _PRINT_MESSAGE
                LD HL,EMUTAPLOAD
        RST8 _PRINT_MESSAGE
                LD HL,SET_RESET
        RST8 _PRINT_MESSAGE
                LD HL,ROMLOADFONT
        RST8 _PRINT_MESSAGE
                LD HL,TYPESFONT
        RST8 _PRINT_MESSAGE
                LD HL,TXT_AUTOMOUNT
        RST8 _PRINT_MESSAGE
                RET

; à á¯¥ç âª  ⥪ã饣® ¢¨àâã «ì­®£® ¤¨áª®¢®¤ 
PRT_VIRTDRV
        RST8 _MOUNTER,_GET_VIRT_BITS
                LD D,A
                LD H,VIRT_REAL_DRIVE
                CALL READCMOS
                AND 3
                LD B,A
                INC B
                ADD A,'A'
                LD C,A
                LD A,%10000000
.L1             RLCA
                DJNZ .L1
                AND D
                LD HL,VIRT_DRIVE
                JR NZ,PRTVIRTDRV2
                LD (HL)," "
                INC HL
                LD (HL),C
                INC HL
                LD (HL)," "
                JR PRTVIRTDRV1

PRTVIRTDRV2     LD (HL),"o"
                INC HL
                LD (HL),"f"
                INC HL
                LD (HL),"f"
PRTVIRTDRV1     LD HL,VIRTUAL_DRV
        RST8 _PRINT_MESSAGE
                LD HL,ADR_CAT
        RST8  _MOUNTER,_GET_MOUNTED
                LD HL,ADR_CAT
                LD DE,MNT_DRV_A
                CALL COPY_MNTNAME
                LD L,0x40
                LD DE,MNT_DRV_B
                CALL COPY_MNTNAME
                LD L,0x80
                LD DE,MNT_DRV_C
                CALL COPY_MNTNAME
                LD L,0xC0
                LD DE,MNT_DRV_D
                CALL COPY_MNTNAME
                CALL GET_RAMD_NAME
                LD HL,MOUNTED_DRV
        RST8 _PRINT_MESSAGE
                RET

COPY_MNTNAME    PUSH HL
                LD A,(HL)
                AND A
                JR NZ,COPY_MNTNAME1
                LD HL,TXT_NONE
                LD BC,0x0C
                JR COPY_MNTNAME3

COPY_MNTNAME1   LD BC,8
                LDIR
                LD A,"."
                LD (DE),A
                INC DE
                LD C,3
COPY_MNTNAME3   LDIR
                POP HL
                RET

; ¯®«ã祭¨¥ ¨¬¥­¨ ä ©«  § £à㦥­­®£® ¢ à ¬¤¨áª
GET_RAMD_NAME
        PEC_ON M_SHADOW_BF
                LD BC,WIN_P2
                LD A,RAM_RAMDISK
                OUT (C),A
                LD DE,CPU2+0x3DFF
                LD A,(DE)
                AND A
                JR Z,GRN1
                LD HL,GRN1
                PUSH HL
                LD HL,IN_RAMDISK
                LD B,8
                CALL GRN2
                LD B,3
                LD (HL),"."
                INC HL
GRN2            LD A,(DE)
                LD (HL),A
                DEC D
                INC HL
                DJNZ GRN2
                RET

GRN1            LD BC,WIN_P2
                LD A,ZXSTD_CPU2
                OUT (C),A
        PEC_OFF M_SHADOW_BF
                RET

; ¢ë¢®¤ ®á­®¢­®£® ¬¥­î ¨ ­ ¤¯¨á¥©
S_FACE          LD A,7
                CALL CLS
                LD HL,TXTFULLSCR
        RST8 _PRINT_MESSAGE
        RST8 _VERSION
                BIT B_INCORRECTFPGA,A
                JR Z,.L1
                RES B_INCORRECTFPGA,A
                AND A
                JR Z,.L1
                LD HL,INCORRECTFPGA
        RST8 _PRINT_MESSAGE
.L1             CALL PRT_DRV_SYM                ; ¯¥ç âì ⥪ã饣® ¤¨áª®¢®¤ 
                CALL PRT_MODES                  ; ¯¥ç âì ⥪ã饣® ०¨¬ 
                CALL PRT_VIRTDRV                ; ¯¥ç âì ⥪ã饣® ¢¨àâã «ì­®£® ¤¨áª®¢®¤ 
                XOR A
                JP DRAW_KOSHAK                  ; ¢ë¢®¤ 0 ä §ë ª®è ª 

SET_EFF7_A_     LD A,(SYSREG1)
SET_EFF7        LD BC,PENT_CONF
                OUT (C),A
                RET

SET_7FFD_0      LD A,0x10
SET_7FFD        PUSH BC
                LD BC,CONF_128
                OUT (C),A
                POP BC
                RET

MEMSET          CALL CLEAR_128K
                LD A,(TURBO_NUM)                ; ãáâ ­®¢ª  TURBO ०¨¬ 
                AND A
                LD DE,0x10A3                    ; 3,5MHZ ports EFF7 BIT4=1 xx77 BIT3=0
                JR Z,MEMSET01
                DEC A
                LD DE,0xA3                      ; 7MHZ ports EFF7 BIT4=0 xx77 BIT3=0
                JR Z,MEMSET01
                LD DE,0x10AB                    ; 14MHZ ports EFF7 BIT4=1 xx77 BIT3=1
MEMSET01        LD BC,0xFF77
        PEC_ON M_SHADOW_BF
                OUT (C),E
        PEC_OFF M_SHADOW_BF
                LD A,D
                CALL SET_EFF7
                LD A,(MEMMODE)
                AND A
                RET Z                           ; ०¨¬ ¯®«­®© ¯ ¬ïâ¨
MEMSET1         DEC A
                JR Z,MEMORY48
; ¢ª«î祭¨¥ ०¨¬  BASIC128
ON_BIT128       LD A,(SYSREG1)
                AND 0x10
                ADD A,4
                CALL SET_EFF7
                JR SET_7FFD_0

; ¢ª«î祭¨¥ ०¨¬  BASI48
MEMORY48        CALL ON_BIT128
                LD A,0x30
                JR SET_7FFD

; ç⥭¨¥ CMOS ¨ ¨§¬¥­¥­¨¥ á®®¡é¥­¨© ¤«ï ¢ë¢®¤  ­  íªà ­ ®¡ ãáâ ­®¢«¥­­ëå ०¨¬ å
SET_MODES       LD H,0x0B                       ; ç¨â âì ०¨¬ áç¥â  ç á®¢
                CALL READCMOS
                RES 2,L                         ; ¯à¨­ã¤¨â¥«ì­® ¢ª«îç ¥¬ ¡¨­ à­ë© áç¥â
                CALL WRITECMOS                  ; á®å࠭塞 ¨§¬¥­¥­¨ï
                LD H,CMOS_BYTE_01               ; ç¨â ¥¬ ãáâ ­®¢ª¨ âãà¡® ¨ ¯ ¬ïâ¨
                CALL READCMOS
                AND M_TURBO357
                RRCA
                RRCA
                RRCA
                LD (SYSREG1),A                  ; ᮤ¥à¦¨¬®¥ ¤«ï § ¯¨á¨ ¢ ¯®àâ EFF7
                LD B,A
                LD A,L
                AND _128K | _48K | _1MB
                LD (MEMMODE),A                  ; ¢ë¡à ­­ë© ०¨¬ ¯ ¬ïâ¨
                LD H,CMOS_BYTE_00
                CALL READCMOS                   ; ç¨â ¥¬ ®á­®¢­ë¥ ãáâ ­®¢ª¨
                LD C,A
                AND M_TURBO14
                LD HL,TURBO_NUM                 ; ­®¬¥à âãà¡® ०¨¬ 
                LD (HL),2                       ; ०¨¬ 14Œƒ–
                JR NZ,SETMODES04
                LD A,B
                DEC (HL)                        ; ०¨¬ 7Œƒ–
                AND 0x10
                JR Z,SETMODES04
                DEC (HL)                        ; ०¨¬ 3,5Œƒ–
SETMODES04      LD A,(HL)                       ; ¢§ï«¨ ⥪ã騩 âãà¡® ०¨¬
                ADD A,A
                ADD A,A
                LD E,A
                LD D,0
                LD HL,TXTTURBOMODE              ; ⥪áâ âãà¡® ०¨¬®¢
                ADD HL,DE                       ; ¯¥à¥è«¨ ­  ­ã¦­ë© ⥪áâ
                LD DE,TXT_SPEED
                LD A,C
                LDI
                LDI
                LDI
                LDI                             ; ¯¥à¥­¥á«¨ ¤«ï ¢ë¢®¤  íªà ­
                LD C,A
                AND M_EMUL_TAPE
                LD HL,EMTAPLOAD
                CALL SET_ONOFF                  ; ¯¥à¥­®á ᨬ¢®«®¢ ¤«ï ¢ë¢®¤  ­  íªà ­, ON ¨«¨ OFF
                LD A,C
                AND M_RELOAD_FONT
                XOR M_RELOAD_FONT
                LD HL,EROMLOADFONT
                CALL SET_ONOFF                  ; ¯¥à¥­®á ᨬ¢®«®¢ ¤«ï ¢ë¢®¤  ­  íªà ­, ON ¨«¨ OFF
                LD A,C
                AND M_TYPE_FONT
                PUSH BC
                LD HL,TXTMODTYPE
                LD BC,5
                JR Z,SET_FONT2
                ADD HL,BC
SET_FONT2       LD DE,ETYPESFONT
                LDIR
                POP BC
                LD A,C
                AND MKOL_MODES
                CP KOL_MODES
                JR C,SETMODES03
                XOR A
SETMODES03      LD L,A
                ADD A,A
                ADD A,L
                ADD A,A
                ADD A,A
                LD H,0
                LD L,A
                LD DE,TXT_RESETTO
                ADD HL,DE
                LD DE,TXT_RESET
                LD A,C
                LD BC,0x0C
                LDIR
                LD C,A
                AND M_PRINTER_AY
                LD HL,ETXT_AYPRINTER
                CALL SET_ONOFF                  ; ¯¥à¥­®á ᨬ¢®«®¢ ¤«ï ¢ë¢®¤  ­  íªà ­, ON ¨«¨ OFF
SETMODES02      LD A,(MEMMODE)
                AND A
                LD HL,T_ALL
                JR Z,SETMODES01                 ; all memory
                LD HL,T_48
                DEC A
                JR Z,SETMODES01                 ; 48K
                LD HL,T_128                     ; 128K
SETMODES01      LD DE,TXT_MEM                   ; ०¨¬ ¯ ¬ïâ¨
                LD A,C
                LD BC,3
                LDIR
                LD H,CMOS_BYTE_01
                CALL READCMOS
                PUSH AF
                AND M_AUTOMOUNT
                LD HL,ETXT_AUTOMOUNT
                CALL SET_ONOFF
                POP AF
; ¤«ï १¨¤¥­â  HONEY COMANDER
                AND M_REZIDENT
                LD HL,TXT_REZIDENT
                CALL SET_ONOFF
                LD H,CMOS_BYTE_03
                CALL READCMOS
                AND M_KILL_REZIDENT
                LD HL,TXT_KILLREZID
                CALL SET_ONOFF
                LD A,(ERS_FLAGS)
                AND M_CLOCK_ON
                RET Z
                LD DE,VERS_CONF
                LD L,0
                CALL GET_VERS_EVO               ; ¢¥àá¨ï ¡ §®¢®© ª®­ä¨£ãà æ¨¨
                LD DE,VERS_BOOT
                LD L,1
                JP GET_VERS_EVO                 ; ¢¥àá¨ï AVRBOOT

; ¯¥à¥­®á ᨬ¢®«®¢ ¤«ï ¢ë¢®¤  ­  íªà ­, ON ¨«¨ OFF
SET_ONOFF       LD DE,"n "
                JR NZ,SET_ONOFF1
                LD DE,"ff"
SET_ONOFF1      LD (HL),D
                INC HL
                LD (HL),E
                RET

TURBO_7MHZ      LD E,0xA3
                LD BC,0xFF77
        PEC_ON M_SHADOW_BF
                OUT (C),E
        PEC_OFF M_SHADOW_BF
                XOR A
                JP SET_EFF7

        IF 1
; BC=BC/DE
DIVIDE16        LD HL,0
                LD A,0x11
.L1             RL C
                RL B
                DEC A
                RET Z
                ADC HL,HL
                JR NC,.L2
                OR A
                SBC HL,DE
                JR .L1

.L2             SBC HL,DE
                JR NC,.L3
                ADD HL,DE
.L3             CCF
                JR .L1
               
MULT            PUSH BC
                LD A,B
                LD HL,0
                LD B,0x10
.L1             ADD HL,HL
                RL C
                RLA    
                JR NC,.L2
                ADD HL,DE
                JR NC,.L2
                INC C
                JR NZ,.L2
                INC A
.L2             DJNZ .L1
                EX DE,HL
                LD L,C
                LD H,A
                POP BC
                RET    
        ENDIF

        IF 0
;=============================
;       16-bit multiply
;       Tim Paterson
;=============================
MULTIPLY16      ld hl,0
MUL_HLBC_DE     ld a,b
                ld b,0x11
                jr .l1

.l2             jr nc,.l3
                add hl,de
.l3             rr h
                rr l
.l1             rra
                rr c
                djnz .l2
                ld b,a
                ret

;=============================
;       16-bit divide
;       Tim Paterson
;=============================
;„¥«¨â HLBC ­  DE
;­  ¢ë室¥ HL - ®áâ â®ª, BC - ç áâ­®¥
DIVIDE16        ld hl,0
DIV_HLBC_DE     ld a,b
                ld b,0x10
                rl c
                rla
.l1             rl l
                rl h
                jr c,.l2
                sbc hl,de
                jr nc,.l3
                add hl,de
.l3             ccf
.l4             rl c
                rla
                djnz .l1
                ld b,a
                ret

.l2             or a
                sbc hl,de
                jr .l4
        ENDIF

                include conf_down.a80
                include menu_execute.a80
                include call_cmos.a80
                include menu_data.a80
                include fat_boot.a80
                include mouse.a80
                include window.a80
                include call_trdos.a80
                include koshak.a80
                include pc_keys_test.a80
                include bmp_view.a80
                include conf_up.a80
                include flasher.a80

KOSHAK          binclude kot_anim.bin,9
ICON            binclude icon.bin,9
                       
BAS_VAR         binclude bas_var.bin
EBAS_VAR

CLEAR_128K      DI
                LD HL,0
                LD A,0x17
                CALL CLEAR128K0
                LD A,0x16
                CALL CLEAR128K0
                LD A,0x14
                CALL CLEAR128K0
                LD A,0x13
                CALL CLEAR128K0
                LD A,0x11
                CALL CLEAR128K0
                LD A,0x10
CLEAR128K0      LD (TEMP_SAVE_SP),SP
                LD BC,CONF_128
                OUT (C),A
                LD SP,0
                LD B,0x80
CLEAR128K1      REPT 64
                PUSH HL
                ENDM
                DJNZ CLEAR128K1
                LD SP,0
TEMP_SAVE_SP    EQU $-2
                RET

; ãáâ ­®¢ª  ¯¥à¥¬¥­­ëå ¡ á¨ª  ¨ âëमá , ãáâ ­®¢ª  ¢ë¡à ­­®£® ¤¨áª®¢®¤ 
SYSTEM          LD HL,BAS_VAR
                LD DE,KSTATE0
                LD BC,EBAS_VAR-BAS_VAR
                LDIR                            ; ãáâ ­®¢ª  áâ ­¤ àâ­ëå ¯¥à¥¬¥­­ëå BASIC ¨ TR-DOS
GET_DRV_SYM     LD A,(ERS_FLAGS)                ; ¯à®¢¥à塞 ­ «¨ç¨¥ ª¬®á 
                AND M_CLOCK_ON
                JR Z,SET_DRIVE
                LD H,VIRT_REAL_DRIVE
                CALL READCMOS
                RRCA
                RRCA
                AND 3
SETUP_DRIVE     LD (DRV_SYM),A                  ; ãáâ ­®¢ª  ¢ë¡à ­­®£® ॠ«ì­®£® ¤¨áª®¢®¤ 
SET_DRIVE       LD A,(DRV_SYM)                  ; ¨§¬¥­¥­¨¥ á¨á⥬­ëå ¯¥à¥¬¥­­ëå ¤«ï ¤¨áª 
                LD (TRD_5D19),A
                LD (TRD_5CF6),A
                LD L,A
                LD H,A
                LD (TRD_5CF8),HL
                OR 0x3C
                LD (TRD_5D16),A
                RET

GLUDIN          LD H,CMOS_BYTE_01
                CALL READCMOS
                AND M_SOUNDKEYS
                RET Z
                LD HL,DIN+0x0D
                LD A,0x0D
GLUDIN1         LD BC,0xFFFD
                OUT (C),A
                LD B,0xBF
                OUTD
                SUB 1
                JR NC,GLUDIN1
                RET

SHUT2AY         LD H,CMOS_BYTE_01
                CALL READCMOS
                AND M_SOUNDKEYS
                RET Z
                LD DE,0x0E00
SHUT2AY1        DEC D
                LD H,D
                LD L,E
                CALL SHUT2AY2
                JR NZ,SHUT2AY1                  ; ¤«ï ¯¥à¢ëå ­¨ªà®­®¢
                LD HL,0x073F
SHUT2AY2        LD BC,0xFFFD
                OUT (C),H
                LD B,0xBF
                OUT (C),L
                RET

TIMELP          CALL PRINTTIME
                LD A,HIGH (MOUSE_KEYS)
                IN A,(LOW (MOUSE_KEYS))         ; ª­®¯ª¨ ¬ëè¨
                CPL
                AND 7
                JR NZ,TIMELP                    ; ¯®ª  ­¥ ®â¯ãáâïâ
                RET

; § ¯ã᪠PERFECT COMMANDER
PERFECT         DI
                LD SP,0xC000
        PEC_ON M_SHADOW_BF
                LD BC,WIN_A0
                LD A,ROM_RST81
                OUT (C),A
                LD HL,(ADR_PERFECT)
                LD DE,0x5B00
                CALL UNPACK
                LD BC,WIN_A0
                LD A,0x83
                OUT (C),A
        PEC_OFF M_SHADOW_BF
                LD A,0xC9
                LD (0x66D2),A
                LD SP,0x5FE4
                JP 0x8A1D

ISDOS_BOOT      LD HL,ISDOS_BOOT1
                LD DE,0x5E00
                LD BC,ISDOS_BOOT2-ISDOS_BOOT1
                LDIR
                JP 0x5E00

                include hdd_detect.a80

ISDOS_BOOT1     include isdos_boot.a80
ISDOS_BOOT2

SEL_FAT_DRV     ;  ¤à¥á ᮧ¤ ­¨ï ⥪áâ ,  ¤à¥á®¢ ¢ë§ë¢®¢ ¨ ᯨ᪠ £®àïç¨å ª« ¢¨è ¬¥­î ¢ë¡®à  à §¤¥«®¢ FAT