Top secrets sources NedoPC pentevo

Rev

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


; LAST UPDATE: 13.10.2022 savelij

COM_FAT         EX AF,AF'
                CALL P5_READ_BYTE
                LD A,(NEXTBYTERST8)
                PUSH IX
                PUSH IY
                LD IYL,EXTERNAL
                JR ICOM_FAT1

;Ž™€Ÿ ’Ž—Š€ ‚•Ž„€ „‹Ÿ €Ž’› ‘ FAT
ICOM_FAT        EX AF,AF'

                EX (SP),HL
                LD A,(HL)
                INC HL
                EX (SP),HL
                PUSH IX
                PUSH IY
                LD IYL,INTERNAL
ICOM_FAT1       LD (ERORDRV),SP
                PUSH HL
                LD HL,EXITDRV
                EX (SP),HL
                PUSH HL
                LD HL,TABLFAT
                ADD A,A
                ADD A,L
                LD L,A
                LD A,H
                ADC A,0
                LD H,A
                LD A,(HL)
                INC HL
                LD H,(HL)
                LD L,A
                EX AF,AF'
                EX (SP),HL
                RET

ERR_DRV         LD SP,(ERORDRV)
EXITDRV         POP IY
                POP IX
                RET

TABLFAT         DW INIT_FATVARS                 ; ¨­¨æ¨ «¨§ æ¨ï ¯¥à¥¬¥­­ëå FAT
                DW READ_DIR                     ; ¯®«ã祭¨¥ ®¯¨á â¥«ï ä ©« 
                DW ENTER_DIR                    ; ¢å®¤/¢ë室 ¢ ¤¨à
                DW GET_PATH                     ; ¯®«ã祭¨¥ ⥪ã饣® ¯ãâ¨
                DW GET_LONGNAME                 ; ¯®«ã祭¨¥ ¤«¨­­®£® ¨¬¥­¨ ä ©« 
                DW FIND_NAME                    ; ¯®¨áª ¯® ¨¬¥­¨
                DW FIND_FILEITEM                ; ¯®¨áª ¢á¥å ®¯¨á â¥«¥© á ¢ë¤ ç¥© ­®¬¥à®¢ ­ ©¤¥­­®£®
                DW SET_MASK_EXT                 ; ãáâ ­®¢ª  ¬ áª¨ à áè¨à¥­¨© ¤«ï ¯®¨áª 
                DW OPEN_FILE                    ; ®âªàë⨥ ä ©« 
                DW READ_FILE                    ; ¯®á«¥¤®¢ â¥«ì­®¥ ç⥭¨¥ ä ©« 
                DW INIT_TEKDIR                  ; ᮧ¤ ­¨¥ â ¡«¨æë ª« áâ¥à®¢ ⥪ã饩 ¤¨à¥ªâ®à¨¨
                DW POS_FILES                    ; à ¡®â  á ⥪ã饩 ¯®§¨æ¨¥©
                DW ROOTDIR                      ; ¢ë室 ¢ ª®à­¥¢ãî ¤¨à¥ªâ®à¨î

ROOTDIR         PUSH IY
                LD IYL,INTERNAL
                LD A,(SETDVOL)
                LD D,A
                LD L,A
                LD H,0
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                LD BC,BUF_TABLVOL + 2
                ADD HL,BC
                LD A,(HL)
                LD HL,BUF_TABLVOL
                CALL INIT_FATVARS
                LD DE,(CurrentDIRCluster)
                LD BC,(CurrentDIRCluster + 2)
                CALL INIT_TEKDIR
                POP IY
                RET

; ¨­¨æ¨ «¨§ æ¨ï ¯¥à¥¬¥­­ëå FAT
;   ¢å®¤¥:
; HL =  ¤à¥á â ¡«¨æë ­ ©¤¥­ëå à §¤¥«®¢
; DE = D - ­®¬¥à ¢ë¡à ­­®£® à §¤¥« , E - ª®«¨ç¥á⢮ ­ ©¤¥­­ëå à §¤¥«®¢
; A = ⨯ à §¤¥«  ¥á«¨ ­ ©¤¥­ MBR
;   ¢ë室¥:
; BCDE = ­®¬¥à ª« áâ¥à  ª®à­¥¢®© ¤¨à¥ªâ®à¨¨
; A = ⨯ à §¤¥«  ¥á«¨ MBR ­¥ ­ ©¤¥­
INIT_FATVARS    PUSH HL
                LD HL,0xFFFF
                LD (NumSec2Buf + 2),HL
                LD (FATType),A
                LD E,D
                LD D,0
                EX DE,HL
                POP DE
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,DE
                INC HL
                INC HL
                INC HL
                CALL LOADZP
                LD (StartSecVol),DE
                LD (StartSecVol + 2),BC         ; ­®¬¥à ¯¥à¢®£® ᥪâ®à  à §¤¥« 
                CALL LOADLST
                CALL VALID_BOOTSEC
                AND A
                JR Z,RDFAT07
                SCF
                RET

RDFAT07         LD A,(BUF_512 + _BPB_SecPerClus)
                LD (SecPerClus),A
                LD HL,(BUF_512 + _BPB_RsvdSecCnt)
                ADD HL,DE
                LD (NumSecFAT1),HL
                LD HL,0
                ADC HL,BC
                LD (NumSecFAT1 + 2),HL
                LD HL,0
                LD DE,(BUF_512 + _BPB_FATSz16)
                LD A,D
                OR E
                JR NZ,RDFAT01                   ; ¥á«¨ ­¥ FAT12/16 (_BPB_FATSz16 == 0)
                LD DE,(BUF_512 + _BPB_FATSz32)
                LD HL,(BUF_512 + _BPB_FATSz32 + 2)      ; â® ¡¥à¥¬ ¨§ ᬥ饭¨ï +36
RDFAT01         LD (FATSize),DE
                LD (FATSize + 2),HL             ; ç¨á«® ᥪâ®à®¢ ­  FAT â ¡«¨æã

                LD HL,0
                LD DE,(BUF_512 + _BPB_TotSec16)
                LD A,D
                OR E
                JR NZ,.L1                       ; ¥á«¨ ­¥ FAT12/16 (BPB_TOTSEC16=0)
                LD DE,(BUF_512 + _BPB_TotSec32)
                LD HL,(BUF_512 + _BPB_TotSec32+2)
                                                ; â® ¡¥à¥¬ ¨§ ᬥ饭¨ï +32
.L1             LD (NumsSectorsVol + 2),HL
                LD (NumsSectorsVol),DE          ; ª-¢® ᥪâ®à®¢ ­  ¤¨áª¥/à §¤¥«¥

; ¢ëç¨á«ï¥¬ ROOTDIRSECTORS
                LD DE,(BUF_512 + _BPB_RootEntCnt)
                LD BC,0
                LD A,D
                OR E
                JR Z,RDFAT03
                LD A,0x10
                CALL BCDE_A

; í⮠ॠ«¨§®¢ ­  ä®à¬ã« 
; ROOTDIRSECTORS = ((BPB_ROOTENTCNT * 32) + (BPB_BYTSPERSEC - 1)) / BPB_BYTSPERSEC
; ¢ HL ROOTDIRSECTORS. ¥á«¨ FAT32, â® HL = 0 ¢á¥£¤ 

RDFAT03         PUSH DE                         ; ROOTDIRSECTORS
                LD HL,NumSecFAT1
                CALL LOADZP
                LD A,(BUF_512 + _BPB_NumFATs)
                LD (NumFATs),A
                DEC A
                JR Z,.L1
                LD HL,FATSize
                CALL BCDEHLP
                LD (NumSecFAT2),DE
                LD (NumSecFAT2 + 2),BC
.L1             LD HL,FATSize
                CALL BCDEHLP
                LD (NumSecRootDir),DE
                LD (NumSecRootDir + 2),BC
                POP HL
; ¤®¡ ¢«ï¥¬ à §¬¥à ROOTDIR
                ADD HL,DE
                EX DE,HL
                LD HL,0
                ADC HL,BC
                LD B,H
                LD C,L
                LD (FirstSecData),DE
                LD (FirstSecData + 2),BC
                LD HL,NumsSectorsVol
                CALL BCDEHLM
                LD A,(SecPerClus)
                CALL BCDE_A
                LD (NumsClustersVol),DE
                LD (NumsClustersVol + 2),BC

                LD A,(FATType)
                CP 0xFF
                JR NZ,.L4
; ®¯à¥¤¥«¥­¨¥ ⨯  FAT ¯à¨ ®âáãá⢨¨ MBR
                LD HL,(BUF_512 + _BPB_FATSz16)
                LD A,H
                OR L
                LD A,2
                JR Z,.L2
                LD DE,(FATSize - 1)
                LD BC,(FATSize + 1)
                LD E,0                          ; BCDE = ª®«¨ç¥á⢮ ᥪâ®à®¢ * 0x100
                LD HL,NumsClustersVol           ; ª®«¨ç¥á⢮ ª« áâ¥à®¢ ­  FAT
                CALL HLBCDEM                    ; ª®«¨ç¥á⢮ ª« áâ¥à®¢ - (ª®«¨ç¥á⢮ ᥪâ®à®¢ * 0x100)
                LD A,D
                OR C
                OR B
                LD A,1                          ; FAT16
                JR Z,.L2                        ; FAT16 ¥á«¨ ä« £ Z=0
                XOR A                           ; ¨­ ç¥ FAT12
.L2             LD (FATType),A

; ¤«ï FAT12/16 ROOT ª« áâ¥à = 0
; ¤«ï FAT32 ¡¥à¥¬ ¯® ᬥ饭¨î +44
;   ¢ë室¥: BCDE - ‘…Š’Ž ROOTDIR Š‹€‘’…
.L4             XOR A
                LD (TEK_LEV),A
                LD (BUF_PATH),A
                CALL INIT_PATH
                LD A,(FATType)
                PUSH AF
                AND A
                LD DE,0
                LD B,D
                LD C,E
                JR Z,.L3                        ; FAT12-NONE
                DEC A
                JR Z,.L3                        ; FAT16
                LD DE,(BUF_512 + _BPB_RootClus)
                LD BC,(BUF_512 + _BPB_RootClus + 2)     ; FAT32
.L3             LD (CurrentDIRCluster),DE
                LD (CurrentDIRCluster + 2),BC   ; ­®¬¥à ⥪ã饣® ª« áâ¥à 
                LD (RootDIRCluster),DE
                LD (RootDIRCluster + 2),BC      ; ­®¬¥à ª®à­¥¢®£® ª« áâ¥à 
                POP AF
                RET

; ¯à®¢¥àª  0 ᥪâ®à  à §¤¥« 
VALID_BOOTSEC   LD HL,(BUF_512 + _BPB_BytsPerSec)
                LD A,H
                SUB 2
                OR L
                JR NZ,VALID_BOOTSEC1
                LD HL,(BUF_512 + _BPB_SecPerClus)
                OR L
                JR Z,VALID_BOOTSEC1
                NEG
                AND L
                CP L
                JR NZ,VALID_BOOTSEC1
                LD A,(BUF_512 + _BPB_NumFATs)
                DEC A
                CP 7
                JR NC,VALID_BOOTSEC1
                XOR A
                RET

VALID_BOOTSEC1  OR IXH
                RET

; ä®à¬¨à®¢ ­¨¥ â ¡«¨æë ª« áâ¥à®¢ DIR
; ¨ ¯®¨áª ¯¥à¢®© "«¥£ «ì­®©" § ¯¨á¨ ¢ DIR
INIRTSC         PUSH AF
                LD HL,0xFFFF
                LD (NumSec2Buf + 2),HL
                LD HL,BUF_TDIRCLS
                LD DE,(CurrentDIRCluster)
                LD BC,(CurrentDIRCluster + 2)
                CALL SAVEZP
                LD A,D
                OR E
                OR B
                OR C
                JR Z,LASTCLS
NEXTCLS         PUSH HL
                CALL RDFATZP
                CALL LST_CLS
                POP HL
                JR C,LASTCLS
                CALL SAVEZP
                JR NEXTCLS

LASTCLS         LD BC,0xFFFF
                CALL SAVEZP
                CALL POSTF02
                POP AF
                RET

; ç⥭¨¥ á«¥¤ãî饣® ­®¬¥à  ª« áâ¥à 
RDFATZP         LD A,(FATType)
                AND A
                JR Z,RDFATS0
                DEC A
                JR Z,RDFATS1
                EX DE,HL
                ADD HL,HL
                EX DE,HL
                LD HL,0
                ADC HL,BC
                ADD HL,BC                       ; HLDE = BCDE * 2
                LD A,E
                LD E,D
                LD D,L
                LD C,H
                LD B,0
                CALL RDFATS2
                INC HL
                LD C,(HL)
                INC HL
                LD B,(HL)
                RET

RDFATS1         LD BC,0
                LD A,E
                LD E,D
                LD D,C
RDFATS2         PUSH AF
                PUSH BC
                LD HL,NumSecFAT1
                CALL BCDEHLP
                CALL LOADLST
                POP BC
                POP AF
                LD E,A
                LD D,0
                ADD HL,DE
                ADD HL,DE
                LD E,(HL)
                INC HL
                LD D,(HL)
                RET

RDFATS0         LD H,D
                LD L,E
                ADD HL,HL
                ADD HL,DE
                SRL H
                RR L
                LD A,E
                LD E,H
                LD D,0
                LD B,D
                LD C,D
                SRL E
                PUSH AF
                PUSH HL
                LD DE,(NumSecFAT1)
                LD BC,(NumSecFAT1 + 2)
                CALL LOADLST
                POP BC
                LD A,B
                AND 1
                LD B,A
                ADD HL,BC
                LD B,(HL)
                INC HL
                LD A,H
                CP HIGH (BUF_512)+2
                JR NZ,RDFATS4
                PUSH BC
                LD BC,0
                INC DE
                CALL LOADLST
                POP BC
RDFATS4         POP AF
                LD D,(HL)
                LD E,B
                LD BC,0
                RRA
                JR NC,RDFATS3
        REPT 4
                SRL D
                RR E
        ENDM
RDFATS3         LD A,D
                AND 0x0F
                LD D,A
                RET

; ¢ëç¨á«¥­¨¥ ­®¬¥à  ॠ«ì­®£® ᥪâ®à 
;   ¢å®¤¥: BCDE = ­®¬¥à ª« áâ¥à  FAT
;   ¢ë室¥: BCDE = ­®¬¥à ᥪâ®à 
REALSEC         LD A,B
                OR C
                OR D
                OR E
                JR NZ,REALSE1
                LD DE,(NumSecRootDir)
                LD BC,(NumSecRootDir + 2)
                RET

REALSE1         LD HL,0xFFFE
                EX DE,HL
                ADD HL,DE
                EX DE,HL
                INC HL
                ADC HL,BC                       ; ­®¬¥à ª« áâ¥à -2
                LD A,(SecPerClus)
                JR REALSE2

REALSE3         SLA E
                RL D
                RL L
                RL H
REALSE2         RRCA
                JR NC,REALSE3                   ; 㬭®¦¨«¨ ­  à §¬¥à ª« áâ¥à 
                LD B,H
                LD C,L
                LD HL,FirstSecData
                JP BCDEHLP                      ; ¯à¨¡ ¢¨«¨ ᬥ饭¨¥ ®â ­ ç «  à §¤¥« 

; á®å࠭塞 ᥪâ®à § £à㦥­­ë© ¢ ¡ãä¥à
LSTSAVE         LD DE,(NumSec2Buf)
                LD BC,(NumSec2Buf + 2)
                LD HL,BUF_512
                LD A,1
                CALL TO_DRV
                DB _DEV_WRITE
                AND A
                JP NZ,ERR_DRV
                RET

; § £à㦠¥¬ ᥪâ®à ¢ ¡ãä¥à
LOADLST         CALL CPNUMSC
                JR NZ,LOADLS1
                LD HL,BUF_512
                RET

LOADLS1         LD (NumSec2Buf),DE
                LD (NumSec2Buf + 2),BC
                LD HL,BUF_512
                PUSH HL
                LD A,1
                CALL TO_DRV
                DB _DEV_READ
                AND A
                JP NZ,ERR_DRV
                POP HL
                RET

; ¯à®¢¥àª  ­  ­®¬¥à 㦥 § £à㦥­­ë© ᥪâ®à
CPNUMSC         LD HL,NumSec2Buf
                LD A,(HL)
                INC HL
                CP E
                RET NZ
                LD A,(HL)
                INC HL
                CP D
                RET NZ
                LD A,(HL)
                INC HL
                CP C
                RET NZ
                LD A,(HL)
                CP B
                RET

; ¯à®¢¥àª  ­  ¯®á«¥¤­¨© ª« áâ¥à
LST_CLS         LD A,(FATType)                  ; ¢§ï«¨ ⨯ FAT
                AND A
                JR NZ,LST_CL1
                LD HL,0x0FF7                    ; ¤«ï FAT12
                SBC HL,DE
                RET

LST_CL1         DEC A
                JR NZ,LST_CL2
                LD HL,0xFFF7                    ; ¤«ï FAT16
                SBC HL,DE
                RET

LST_CL2         LD HL,0x0FFF
                SBC HL,BC
                RET NZ
                LD HL,0xFFF7
                SBC HL,DE
                RET

; ¯®«ãç¨âì ®¯¨á â¥«ì ⥪ã饣® ä ©« 
READ_DIR        LD A,IYL
                AND A
                JR NZ,GETFZA3
                PUSH IY
                LD IYL,INTERNAL
                PUSH HL
                LD HL,(RREG_C)
                LD (TEK_ZAP),HL
                LD HL,GETFZA4
                EX (SP),HL
GETFZA3         LD BC,(TEK_ZAP)                 ; ⥪ã騩 ­®¬¥à ®¯¨á â¥«ï
                LD A,B
                OR C
                JR Z,GETRZAP                    ; ¥á«¨ ­®¬¥à =0, â® ¯à¥¤ë¤ã騩 ­®¬¥à ­¥ ¯à®¢¥à塞
                PUSH BC                         ; á®åà ­¨«¨ ⥪ã騩 ­®¬¥à
                DEC BC                          ; ­ã¦­® ¯à®¢¥à¨âì ¯à¥¤ë¤ã騩 ­®¬¥à
                CALL GETRZAP                    ; ¯à®¢¥à塞
                POP BC                          ; ¢¥à­ã«¨ ⥪ã騩 ­®¬¥à
                LD E,A                          ; ¨§ ¯à¥¤ë¤ã饣® ®¯¨á â¥«ï ­ã¦¥­ ⮫쪮 ä« £®¢ë© ¡ ©â
GETRZAP         PUSH DE
                CALL RDDIRSC                    ; ç¨â ¥¬ ᥪâ®à á ⥪ã騬 ­®¬¥à®¬
                POP DE                          ; ¢¥à­ã«¨ ॣ¨áâà E
                INC A
                LD A,E                          ; ¢¥à­ã«¨ ­ «¨ç¨¥/®âáãá⢨¥ ¤«¨­­®£® ¨¬¥­¨
                RET Z                           ; ¢ë室¨¬ ¥á«¨ ¢ë«¥â¥«¨ §  ¯à¥¤¥«ë áãé¥áâ¢ãî饩 ¤¨àë
                EX AF,AF'
                     
GETFZA1         LD A,C
                AND 0x0F                        ; ¯®«ã稫¨ ­®¬¥à ®¯¨á â¥«ï ¢ § £à㦥­­®¬ ᥪâ®à¥ ¤¨àë
                LD E,A
                LD D,0
                EX DE,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,DE                       ; ¢ëç¨á«¨«¨  ¤à¥á ¢ë¡à ­­®£® ®¯¨á â¥«ï
                LD DE,0x0B
                LD A,(HL)                       ; ¢§ï«¨ ä« £®¢ë© ¡ ©â ⥪ã饣® ®¯¨á â¥«ï
                EX DE,HL
                ADD HL,DE
                LD L,(HL)                       ; ¢§ï«¨ ¯¥à¢ë© ¡ ©â ¨¬¥­¨
                LD H,A                          ; ¯®«®¦¨«¨ ä« £®¢ë© ¡ ©â í⮣® ®¯¨á â¥«ï
                EX DE,HL
                CALL CP_TWOT                    ; ¯à®¢¥àª  ­  ­ «¨ç¨¥ ¢ ¨¬¥­¨ ".."
                LD D,0                          ; ¡ã¤¥¬ ¢å®¤¨âì ¢ ¤¨à¥ªâ®à¨î
                JR NZ,GETFZA2
                LD D,0x80                       ; ¡ã¤¥¬ ¢ë室¨âì ¢ ¯à¥¤ë¤ãéãî ¤¨à¥ªâ®à¨î
GETFZA2         EX AF,AF'
                CP 0x0F                         ; ¯à®¢¥à塞 ä« £®¢ë© ¡ ©â ¯à¥¤ë¤ã饣® ®¯¨á â¥«ï
                LD A,E                          ; ¢§ï«¨ ä« £®¢ë© ¡ ©â ⥪ã饣® ®¯¨á â¥«ï
                LD E,D                          ; ¢ëáâ ¢¨«¨ ­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï ¢ ¤¨à å
                RET NZ
                INC E                           ; ãáâ ­®¢ª  ­ «¨ç¨ï ¤«¨­­®£® ¨¬¥­¨
                RET

GETFZA4         PUSH AF
                PUSH HL
                PUSH DE
                LD DE,CPU6
                ADD HL,DE
                LD DE,(RREG_L)
                LD BC,0x20
                CALL LDIR_BYTES
                POP DE
                POP HL
                POP AF
                POP IY
                RET

; ç⥭¨¥ ᥪâ®à  DIR ¯® ­®¬¥àã BC
;   ¢ë室¥: A = 0xFF - ¢ë室 §  ¯à¥¤¥«ë DIR
RDDIRSC         PUSH BC
                LD D,B
                LD E,C
                LD BC,0
                LD A,0x10
                CALL BCDE_A
                LD A,E
                PUSH AF
                LD A,(SecPerClus)
                PUSH AF
                CALL BCDE_A
                LD HL,BUF_TDIRCLS
                EX DE,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,DE
                CALL LOADZP
                BIT 7,B
                JR Z,RDDIRS3
                POP BC
                POP BC
                POP BC
                XOR A
                DEC A
                RET

RDDIRS3         CALL REALSEC
                POP AF
                DEC A
                LD L,A
                POP AF
                AND L
                LD L,A
                LD H,0
                ADD HL,DE
                EX DE,HL
                LD HL,0
                ADC HL,BC
                LD B,H
                LD C,L
                CALL LOADLST
                POP BC
                XOR A
                RET

; ¯à®¢¥àª  ­  1 â®çªã
CP_ONET         LD A,(HL)
                CP "."
                RET NZ
                INC HL
                LD A,(HL)
                DEC HL
                CP " "
                RET NZ
                XOR A
                RET

; ¯à®¢¥àª  ­  2 â®çª¨
CP_TWOT         LD A,(HL)
                CP "."
                RET NZ
                INC HL
                LD A,(HL)
                DEC HL
                CP "."
                RET NZ
                XOR A
                RET

EPOS_FILES      LD HL,(TEK_ZAP)
                LD (RREG_C),HL
                RET

POS_FILES       LD D,A
                LD A,IYL
                LD IYL,INTERNAL
                AND A
                LD A,D
                JR NZ,POSITFILE1
                LD HL,EPOS_FILES
                PUSH HL
                LD A,(RREG_A)
                LD BC,(RREG_C)
POSITFILE1      CP LOW ((ENDTPOS - TPOSITF) / 2)
                RET NC
                ADD A,A
                LD DE,TPOSITF
                LD L,A
                LD H,0
                ADD HL,DE
                LD E,(HL)
                INC HL
                LD D,(HL)
                EX DE,HL
                JP (HL)

TPOSITF         DW POSTF00                      ; á®åà ­¥­¨¥ ⥪ã饩 ¯®§¨æ¨¨ ä ©« 
                DW POSTF01                      ; ¢®ááâ ­®¢«¥­¨¥ ⥪ã饩 ¯®§¨æ¨¨ ä ©« 
                DW POSTF02                      ; á¡à®á ⥪ã饩 ¯®§¨æ¨¨ ¢ 0 ¨ ¯®¨áª ¯¥à¢®© "«¥£ «ì­®©" § ¯¨á¨
                DW POSTF03                      ; ¯¥à¥¬®â âì ­  "B" ä ©«®¢ ­ § ¤
                DW POSTF04                      ; ¯¥à¥¬®â âì ­  "B" ä ©«®¢ ¢¯¥à¥¤
                DW POSTF05                      ; ¯®¤áç¥â ª®«¨ç¥á⢠ "«¥£ «ì­ëå" § ¯¨á¥©
                DW POSTF06                      ; ãáâ ­®¢¨âì ­®¬¥à "«¥£ «ì­®©" § ¯¨á¨ ¨§ "BC"
                DW POSTF07                      ; ¢¥à­ãâì ¢ "BC" ⥪ã騩 ­®¬¥à "«¥£ «ì­®©" § ¯¨á¨
ENDTPOS

; á®åà ­¥­¨¥ ⥪ã饩 ¯®§¨æ¨¨ ä ©« 
POSTF00         LD HL,(TEK_ZAP)
                LD (SAVEZAP),HL
                RET

; ¢®ááâ ­®¢«¥­¨¥ ⥪ã饩 ¯®§¨æ¨¨ ä ©« 
POSTF01         LD HL,(SAVEZAP)
                LD (TEK_ZAP),HL
                RET

; ¯¥à¥¬®â âì ­  "B" ä ©«®¢ ­ § ¤
POSTF03         LD A,B
                AND A
                RET Z
.L1             PUSH BC
                CALL PRVLEGZ
                POP BC
                DJNZ .L1
                RET

; ¯¥à¥¬®â âì ­  "B" ä ©«®¢ ¢¯¥à¥¤
POSTF04         LD A,B
                AND A
                RET Z
.L1             PUSH BC
                CALL NXTLEGZ
                POP BC
                DJNZ .L1
                RET

; ¯®¤áç¥â ª®«¨ç¥á⢠ "«¥£ «ì­ëå" § ¯¨á¥©
POSTF05         LD BC,0
                PUSH BC
                EXX
                POP BC
                EXX
                CALL RDDIRSC
                LD DE,_DIR_StructSize
.L4             LD A,(HL)
                CP "."
                JR NZ,.L5
                INC HL
                LD A,(HL)
                DEC HL
                CP "."
                JR Z,.L5
                INC BC
                ADD HL,DE
                JR .L4

.L1             INC BC
                ADD HL,DE
.L5             LD A,H
                CP HIGH (BUF_512) + 2
                JR NZ,.L2
                CALL RDDIRSC
                LD D,0
                AND A
                JR Z,.L2
                CALL .L3
                DEC A
                RET

.L2             LD E,_DIR_Attr
                ADD HL,DE
                LD A,(HL)
                AND A
                SBC HL,DE
                LD E,_DIR_StructSize
                CP 0x0F                         ; ¤«¨­­®¥ ¨¬ï?
                JR Z,.L1
                CP 8                            ; ¨¬ï à §¤¥« ?
                JR Z,.L1
                LD A,(HL)
                CP 0xE5                         ; 㤠«¥­­ë© ä ©«?
                JR Z,.L1
                AND A
                JR Z,.L3
                EXX
                INC BC
                EXX
                JR .L1

.L3             LD D,B
                LD E,C
                EXX
                PUSH BC
                EXX
                POP BC
                XOR A
                RET

; ãáâ ­®¢¨âì ­®¬¥à "«¥£ «ì­®©" § ¯¨á¨ ¨§ "BC"
POSTF06         LD (TEK_ZAP),BC
                RET

; ¢¥à­ãâì ¢ "BC" ⥪ã騩 ­®¬¥à "«¥£ «ì­®©" § ¯¨á¨
POSTF07         LD BC,(TEK_ZAP)
                RET

CPTEKZP         CALL RDDIRSC
                RET M
                LD A,C
                AND 0x0F
                LD L,A
                LD H,0
                LD DE,BUF_512
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,DE
                LD DE,0x0B
                ADD HL,DE
                LD A,(HL)
                SBC HL,DE
                LD E,(HL)
                AND A
                RET

; á¡à®á ⥪ã饩 ¯®§¨æ¨¨ ¢ 0 ¨ ¯®¨áª ¯¥à¢®© "«¥£ «ì­®©" § ¯¨á¨
POSTF02         LD BC,0
                LD (TEK_ZAP),BC
                CALL RDDIRSC
                CALL CP_ONET
                JR Z,NXTLEG1
                LD A,(HL)
                AND A
                RET Z
                JR NXTLEG1+1

NXTLEGZ         LD BC,(TEK_ZAP)
NXTLEG1         INC BC
                CALL CPTEKZP
                CP 0xFF
                RET Z
                CP 0x0F
                JR Z,NXTLEG1
                CP 8
                JR Z,NXTLEG1
                LD A,E
                AND A
                RET Z
                CP 0xE5
                JR Z,NXTLEG1
                LD (TEK_ZAP),BC
                RET

PRVLEGZ         LD BC,(TEK_ZAP)
                CALL CPTEKZP
                CALL CP_TWOT
                RET Z
PRVLEG1         DEC BC
                CALL CPTEKZP
                CP 0x0F
                JR Z,PRVLEG1
                CP 8
                JR Z,PRVLEG1
                LD A,E
                CP 0xE5
                JR Z,PRVLEG1
                LD (TEK_ZAP),BC
                RET

SAVEZP          LD (HL),E
                INC HL
                LD (HL),D
                INC HL
                LD (HL),C
                INC HL
                LD (HL),B
                INC HL
                RET

LOADZP          LD E,(HL)
                INC HL
                LD D,(HL)
                INC HL
                LD C,(HL)
                INC HL
                LD B,(HL)
                INC HL
                RET

BCDE200         LD E,D
                LD D,C
                LD C,B
                LD B,0
                LD A,2
                JR BCDE_A

; BCDE >> A = BCDE
BCDE_A1         SRL B
                RR C
                RR D
                RR E
BCDE_A          RRCA
                JR NC,BCDE_A1
                RET

; BCDE - (ADR) = BCDE
HLBCDEM         LD A,E
                SUB (HL)
                INC HL
                LD E,A
                LD A,D
                SBC A,(HL)
                INC HL
                LD D,A
                LD A,C
                SBC A,(HL)
                INC HL
                LD C,A
                LD A,B
                SBC A,(HL)
                LD B,A
                RET

; (ADR) - BCDE = BCDE
BCDEHLM         LD A,(HL)
                INC HL
                SUB E
                LD E,A
                LD A,(HL)
                INC HL
                SBC A,D
                LD D,A
                LD A,(HL)
                INC HL
                SBC A,C
                LD C,A
                LD A,(HL)
                SBC A,B
                LD B,A
                RET

; (ADR) + BCDE = BCDE
BCDEHLP         LD A,(HL)
                INC HL
                ADD A,E
                LD E,A
                LD A,(HL)
                INC HL
                ADC A,D
                LD D,A
                LD A,(HL)
                INC HL
                ADC A,C
                LD C,A
                LD A,(HL)
                ADC A,B
                LD B,A
                RET

; HLDE + BC = HLDE
HLDEPBC         EX DE,HL
                ADD HL,BC
                EX DE,HL
                LD BC,0
                ADC HL,BC
                RET

INIT_PATH
        EVOPORT WIN_P5,RAM_MOUNTER
                LD A,(SETDVOL)
                LD D,A
                ADD A,HIGH (TEK_BUFPATH + CPU5) + 4
                LD H,A
                LD L,0
                LD A,"E"
                ADD A,D
                LD (HL),A
                INC L
                LD (HL),":"
                INC L
                LD (HL),"/"
                INC L
                LD (HL),0
                INC L
                LD A,L
                LD L,0xFF
                LD (HL),A
                RET

RENEW_PATH
        EVOPORT WIN_P5,RAM_MOUNTER
                BIT 7,E
                JR NZ,MINUS_PATH
; ¤®¡ ¢«¥­¨¥ ¤¨à¥ªâ®à¨¨ ª ⥪ã饬㠯ã⨠(¢å®¤ ¢ ¤¨à¥ªâ®à¨î)
                EX DE,HL
                LD A,(SETDVOL)
                ADD A,HIGH (TEK_BUFPATH + CPU5) + 4
                LD H,A
                LD L,0xFF
                LD L,(HL)
                EX DE,HL
                DEC DE
                LD BC,8
                LDIR
                LD B,8
RENEWPATH3      DEC DE
                LD A,(DE)
                INC DE
                CP " "
                JR NZ,RENEWPATH2
                DEC DE
                DJNZ RENEWPATH3
RENEWPATH2      LD A,(HL)
                CP " "
                JR Z,RENEWPATH4
                LD A,"."
                LD (DE),A
                INC DE
                LD BC,3
                LDIR
                LD B,3
RENEWPATH5      DEC DE
                LD A,(DE)
                INC DE
                CP " "
                JR NZ,RENEWPATH4
                DEC DE
                DJNZ RENEWPATH5
RENEWPATH4      EX DE,HL
                LD (HL),"/"
                INC L
                LD (HL),0
                INC L
                LD A,L
                LD L,0xFF
                LD (HL),A
                RET

; 㪮à®ç¥­¨¥ ⥪ã饣® ¯ã⨠(¢ë室 ¢ ¯à¥¤ë¤ãéãî ¤¨à¥ªâ®à¨î)
MINUS_PATH      LD A,(SETDVOL)
                ADD A,HIGH (TEK_BUFPATH + CPU5) + 4
                LD H,A
                LD L,0xFF
                LD L,(HL)
                DEC L
                DEC L
MINUS_PATH1     DEC L
                LD A,(HL)
                CP "/"
                JR NZ,MINUS_PATH1
                INC L
                LD (HL),0
                INC L
                LD A,L
                LD L,0xFF
                LD (HL),A
                RET

; ¯®«ã祭¨¥ ⥪ã饣® ¯ãâ¨
GET_PATH
        EVOPORT WIN_P5,RAM_MOUNTER
                LD A,IYL
                AND A
                JR NZ,GETPATH1
                LD A,(SETDVOL)
                LD D,A
                ADD A,HIGH (TEK_BUFPATH+CPU5)+4
                LD H,A
                LD L,0xFF
                LD A,(HL)
                LD DE,BUF_256
                LD BC,0x100
                LD L,C
                LDIR
                LD C,A                          ; BC=᪮«ìª® ¡ ©â ¯¥à¥­®á¨âì ¢  ¤à¥á ¯® § ¯à®áã
                LD A,HIGH (CPU6) - 1
                ADD A,D
                LD H,A
                LD DE,(RREG_L)                  ; ªã¤  ¯¥à¥­®á¨âì ¯ãâì
                JP LDIR_BYTES

GETPATH1        PUSH HL
                PUSH HL
                LD A,(SETDVOL)
                LD D,A
                ADD A,HIGH (TEK_BUFPATH + CPU5) + 4
                LD H,A
                LD L,0xFF
                LD A,(HL)
                POP DE
                LD BC,0x100
                LD L,C
                LDIR
                POP HL
                RET

; ®â¤ ç  ª®à®âª®£® ¨¬¥­¨ ä ©« , ¥á«¨ ¤«¨­­®¥ ®âáãáâ¢ã¥â
NO_LNG          POP DE
                LD BC,8
                LDIR
                EX DE,HL
NO_LNG2         DEC HL
                LD A,(HL)
                CP " "
                JR Z,NO_LNG2
                INC HL
                LD A,(DE)
                EX DE,HL
                CP " "
                JR Z,NO_LNG1
                EX DE,HL
                LD (HL),"."
                INC HL
                EX DE,HL
                LDI
                LDI
                LDI
NO_LNG1         EX DE,HL
                LD (HL),0
                LD A,L
                LD (RREG_A),A
                POP HL
                RET

GETLNG8         POP IY
                LD DE,CPU6
                ADD HL,DE
                LD DE,(RREG_L)
                LD BC,0x100
                JP LDIR_BYTES

; ®â¤ ç  ¤«¨­­®£® ¨¬¥­¨ ä ©« 
GET_LONGNAME    LD A,IYL
                AND A
                JR NZ,GETLNG9
                PUSH IY
                LD IYL,INTERNAL
                LD HL,GETLNG8
                PUSH HL
                LD HL,BUF_256
GETLNG9         PUSH HL
                PUSH HL
                CALL READ_DIR
                BIT 0,E
                JR Z,NO_LNG
                EXX
                LD C,0
                EXX
GETLNG2         DEC BC
                CALL GETRZAP
                LD A,(HL)
                INC HL
                EXX
                BIT 6,C
                POP HL
                JR NZ,GETLNGE + 1
                LD C,A
                EXX
                LD A,5
                CALL GETLNG1
                AND A
                JR Z,GETLNGE
                INC HL
                INC HL
                INC HL
                LD A,6
                CALL GETLNG1
                AND A
                JR Z,GETLNGE
                INC HL
                INC HL
                LD A,2
                CALL GETLNG1
                AND A
                JR Z,GETLNGE
                EXX
                PUSH HL
                EXX
                JR GETLNG2

GETLNGE         EXX
                LD (HL),0
                LD A,L
                LD (RREG_A),A
                EXX
                POP HL
                RET

GETLNG1         EXX
                LD B,A
                EXX
                LD D,(HL)
                INC HL
                LD E,(HL)
                INC HL
                LD A,D
                OR E
                RET Z
                LD A,E
                AND A
                JR NZ,GETLNG3
                LD A,D
                CP 0x80
                JR C,GETLNG5
                LD D,0x5F
                JR GETLNG5

GETLNG3         CP 4
                LD A,0x5F
                JR NZ,GETLNG5
                LD A,D
                LD E,0xEF
                LD D,0x5F
                CP 1
                JR Z,GETLNG4
                LD E,0xA0
                CP 0x51
                JR Z,GETLNG4
                SUB 0x10
                LD E,0x80
                JR NC,GETLNG6
                LD A,D
                JR GETLNG5

GETLNG6         CP 0x30
                JR C,GETLNG4
                LD E,0xB0
                CP 0x40
                JR C,GETLNG4
                LD A,D
                JR GETLNG5

GETLNG4         ADD A,E
GETLNG5         EXX
                LD (HL),A
                INC HL
                DEC B
                EXX
                RET Z
                JR GETLNG1 + 3
;401,410-44F,451

; ­  ¢å®¤¥:  DE = ᯨ᮪ à áè¨à¥­¨©
;            HL =  ¤à¥á ®¯¨á â¥«ï ä ©« 
; ­  ¢ë室¥:  A = ­®¬¥à à áè¨à¥­¨ï
CP_EXT          LD C,0
CPETR2          LD A,(DE)
                AND A
                JR Z,CPETR1
                INC C
                PUSH DE
                PUSH HL
                CALL COMPARF
                POP HL
                POP DE
                LD A,C
                RET Z
                INC DE
                INC DE
                INC DE
                JR CPETR2

CPETR1          DEC A
                RET

COMPARF         PUSH DE
                LD DE,8
                ADD HL,DE
                POP DE
COMPARF1        LD A,(DE)
                CP (HL)
                RET NZ
                INC HL
                INC DE
                LD A,(DE)
                CP (HL)
                RET NZ
                INC HL
                INC DE
                LD A,(DE)
                CP (HL)
                RET

FIND_FILEITEM   PUSH IY
                LD IYL,INTERNAL
                CALL INIRTSC
        EVOPORT WIN_P3,RAM_TEMP2
                LD HL,CPU3
                LD DE,CPU3+1
                LD BC,0x3FFF
                LD (HL),L
                LDIR
                LD HL,0
                LD (KOLFIND),HL                 ; ­ ©¤¥­­ëå ä ©«®¢
                LD HL,CPU3
                LD (ADR_SKLAD),HL               ;  ¤à¥á ᪫ ¤¨à®¢ ­¨ï
                LD HL,CPU3+0x1000
                LD (ADR_SKLAD_NAME),HL          ;  ¤à¥á ᪫ ¤¨à®¢ ­¨ï ¯¥à¢®£® ᨬ¢®«  ¨¬¥­¨ ­ ©¤¥­­®£® ¨ ¥£® ä« £ 
                LD BC,0xFFFF
                EXX
                LD BC,0
                LD A,(TEK_LVL)
                AND A
                EXX
                JR NZ,FINDF2
                LD A,(FATType)
                CP 2
                JR NC,FINDF2
                EXX
                LD BC,(ROOTZAP)
                EXX
FINDF2          INC BC
                CALL RDDIRSC
                LD A,C
                AND 0x0F
        REPT 4
                ADD A,A
        ENDM
                LD E,A
                LD D,0
                EX DE,HL
                ADD HL,HL
                ADD HL,DE
                EXX
                DEC BC
                LD A,B
                OR C
                EXX
                JR Z,FINDF3
                LD A,(HL)
                AND A
                JR Z,FINDF3
                CP "."
                JR NZ,FINDF21
                INC HL
                LD A,(HL)
                DEC HL
                CP " "
                JR Z,FINDF2
FINDF21         CP 0xE5                         ; ¥á«¨ 㤠«¥­®
                JR Z,FINDF2                     ; â® ¯¥à¥å®¤¨¬ ­  á«¥¤ãî騩 ®¯¨á â¥«ì
                LD DE,0x0B                      ; ­ã¦¥­ ä« £®¢ë© ¡ ©â ®¯¨á â¥«ï
                ADD HL,DE                       ; ¯®«ã稫¨  ¤à¥á ä« £®¢®£® ¡ ©â 
                LD A,(HL)                       ; ¢§ï«¨ ä« £®¢ë© ¡ ©â
                SBC HL,DE
                CP 0x0F
                JR Z,FINDF2
                AND 0x10                        ; ¯à®¢¥àª  íâ® ä ©« ¨«¨ ¤¨à 
                JR NZ,FINDF1
                LD A,(EXT4FOUND)
                AND A
                PUSH DE
                LD DE,EXT4FOUND
                PUSH BC
                CALL NZ,CP_EXT
                POP BC
                POP DE
                JR NZ,FINDF4
FINDF1          EX DE,HL
                ADD HL,DE
                LD A,(HL)
                EX AF,AF'

                LD HL,(ADR_SKLAD)               ; ¤«ï ¤¨àë ¯à®¢¥àïâì ¡®«ìè¥ ­¥ ­ ¤®
                LD (HL),C
                INC HL
                LD (HL),B                       ; ¯®«®¦¨«¨ ­®¬¥à ¤¨àë ¢ â ¡«¨çªã
                INC HL
                LD (ADR_SKLAD),HL
                LD HL,(KOLFIND)
                INC HL                          ; +1 ­ ©¤¥­­ëå ä ©«®¢
                LD (KOLFIND),HL
                LD HL,(ADR_SKLAD_NAME)
                EX AF,AF'
                LD (HL),A
                INC HL
                LD A,(DE)
                LD (HL),A
                INC HL
                LD (ADR_SKLAD_NAME),HL
FINDF4          LD A,(ADR_SKLAD + 1)
                CP HIGH (CPU3) + 0x10
                JR C,FINDF2                     ; ­¥ ¡®«¥¥ 2048 ¤¨à®¢/ä ©«®¢ ¢ ⥪ã饩 ¤¨à¥ªâ®à¨¨
FINDF3          LD HL,(KOLFIND)
                POP IY
                LD A,IYL
                AND A
                JR NZ,FINDF5
                LD A,RAM_TEMP2
                LD (RREG_A),A
                LD (RREG_C),HL
FINDF5          LD (KOL_FOUNDED),HL
                LD B,H
                LD C,L
                XOR A
                RET

SET_MASK_EXT    LD A,(RREG_A)
                AND A
                JR NZ,SET_MASK_EXT1
                LD (EXT4FOUND),A
                RET

SET_MASK_EXT1   LD HL,(RREG_L)
                LD DE,BUF_256 - CPU6
                LD BC,0x10 * 3 + 1
                CALL LDIR_BYTES
                LD HL,BUF_256
                LD DE,EXT4FOUND
                LD BC,0x10FF
SET_MASK_EXT2   LD A,(HL)
                AND A
                JR Z,SET_MASK_EXT3
                LDI
                LDI
                LDI
                DJNZ SET_MASK_EXT2
SET_MASK_EXT3   XOR A
                LD (DE),A
                RET

LD_FILE6        PUSH AF
                POP HL
                LD (RREG_F),HL
LD_FILE8        EXX
                LD (SAVE_IY),DE                 ; IY
                EXX
                RET

; IXL - L - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § £à㧪¨
; IXH - H - à §¬¥à ª« áâ¥à 
; IYL - E -
; IYH - D - ᬥ饭¨¥ ¢ ª« áâ¥à¥
READ_FILE       EX AF,AF'

                LD A,IYL
                DEC A
                JR Z,LD_FILE00
                LD IYL,INT4EXT
                LD HL,LD_FILE6
                PUSH HL
                LD HL,(RREG_L)                  ;  ¤à¥á § £à㧪¨
                EXX
                LD DE,(SAVE_IY)                 ; ᬥ饭¨¥ ¢ ª« áâ¥à¥
                LD A,(SecPerClus)
                LD H,A                          ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¢ ª« áâ¥à¥
                LD A,(RREG_A)
                LD L,A                          ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § £à㧪¨
                EXX
                JR LD_FILE0

LD_FILE00       EXX
                LD DE,(SAVE_IY)                 ; ᬥ饭¨¥ ¢ ª« áâ¥à¥
                LD HL,LD_FILE8
                PUSH HL
                LD A,(SecPerClus)               ; ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚ ‚ Š‹€‘’……
                LD H,A
                EX AF,AF'
                LD L,A                          ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § £à㧪¨
                EXX
; IXL - L - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § £à㧪¨
; IXH - H - à §¬¥à ª« áâ¥à 
; IYL - E -
; IYH - D - ᬥ饭¨¥ ¢ ª« áâ¥à¥
LD_FILE0        LD DE,(AFILCLS)
                LD BC,(AFILCLS+2)               ; ⥪ã騩 ­®¬¥à ª« áâ¥à 
                PUSH BC
                PUSH DE
                PUSH HL
                CALL REALSEC                    ; ¯¥à¥¢¥«¨ ­®¬¥à ª« áâ¥à  ¢ ­®¬¥à ᥪâ®à 
                EXX
                LD A,D                  ; IYH
                EXX
                LD L,A
                LD H,0
                ADD HL,DE
                EX DE,HL
                JR NC,LD_FILE1
                INC BC                          ; BCDE=­®¬¥à ᥪâ®à  ®âªã¤  £à㧨âì
LD_FILE1        EXX
                LD A,L                  ; IXL
                CP H                    ; IXH
                JP C,LD_FILE2
                LD A,H                  ; IXH
LD_FILE2        ADD A,D                 ; IYH
                CP H                    ; IXH
                LD A,L                  ; IXL
                JP C,LD_FILE5
                LD A,H                  ; IXH
                SUB D                   ; IYH
LD_FILE5        LD E,A                  ; IYL,A ; ᪮«ìª® ᥪâ®à®¢ ᥩç á £à㧨¬
                EXX
                POP HL                          ; ¢®ááâ ­®¢¨«¨  ¤à¥á § £à㧪¨
;               LD IYL,INT4EXT
                CALL TO_DRV
                DB _DEV_READ
                LD A,IYL
                DEC A
                JR Z,LD_FILE7
                LD (RREG_L),HL
LD_FILE7        POP DE
                POP BC                          ; ¢®ááâ ­®¢¨«¨ ­®¬¥à ª« áâ¥à 
                EXX
                LD A,D                  ; IYH
                ADD A,E                 ; IYL
                CP H                    ; IXH
                JP C,LD_FILE3
                SUB H                   ; IXH
LD_FILE3        LD D,A                  ; IYH,A
                EXX
                JP C,LD_FILE4
                PUSH HL                         ; á®åà ­¨«¨  ¤à¥á § £à㧪¨
                PUSH IY
                LD IYL,INTERNAL
                CALL RDFATZP                    ; ¯à®ç¨â «¨ ­®¬¥à á«¥¤ãî饣® ª« áâ¥à 
                POP IY
                LD (AFILCLS),DE
                LD (AFILCLS + 2),BC
                CALL LST_CLS                    ; ¯à®¢¥à¨«¨,   ¬®¦¥â íâ® ¯®á«¥¤­¨© ª« áâ¥à?
                POP HL                          ; ¢®ááâ ­®¢¨«¨  ¤à¥á § £à㧪¨
                RET C                           ; ¥á«¨ ¯®á«¥¤­¨©, ¢ë室¨¬
LD_FILE4        EXX
                LD A,L                  ; IXL
                SUB E                   ; IYL
                EXX
                RET Z
                EXX
                LD L,A                  ; IXL,A
                EXX
                JP NZ,LD_FILE0
                RET

OPEN_FILE       LD A,IYL
                AND A
                JR NZ,OPENFILE1
                LD HL,EOPEN_FILE
                PUSH HL
OPENFILE1       PUSH IY
                LD IYL,INTERNAL
                CALL READ_DIR
                LD DE,FILE_SRC
                LD BC,_DIR_StructSize
                PUSH DE
                LDIR
                LD HL,0
                LD A,(FATType)
                CP 2
                JR C,OPENFILE2                  ; ¥á«¨ íâ® ­¥ FAT32 â® áâ à訥 16 ¡¨â ®¡­ã«ï¥¬
                LD HL,(FILE_SRC + _DIR_FstClusHI)
OPENFILE2       LD (AFILCLS + 2),HL
                LD HL,(FILE_SRC + _DIR_FstClusLO)
                LD (AFILCLS),HL
                LD HL,(TEK_ZAP)
                LD (NUM_FILE_SRC),HL
                XOR A
                LD H,A
                LD L,A
                LD (SAVE_IY),HL
                POP HL
                POP IY
                RET

EOPEN_FILE      PUSH AF
                POP HL
                LD (RREG_F),HL
                RET

EFINDNAME       LD HL,(TEK_ZAP)
                LD (RREG_C),HL
                PUSH AF
                POP HL
                LD (RREG_F),HL
                RET

FIND_NAME       LD A,IYL
                AND A
                JR NZ,FINDNAME01
                PUSH HL
                LD HL,(RREG_L)
                LD DE,BUF_256 - CPU6
                LD BC,0x10
                CALL LDIR_BYTES
                LD HL,EFINDNAME
                EX (SP),HL
FINDNAME01      PUSH IY
                LD IYL,INTERNAL
                LD HL,BUF_256
                LD DE,FB_EXT
                LD BC,0x8FF
                LD A,(HL)
                CP "."
                JR NZ,FINDNAME02
                LDI
                LDI
                LD B,6
FINDNAME02      LD A,(HL)
                CP "!"
                JR C,FINDNAME03
                CP "."
                JR Z,FINDNAME12
                LDI
                DJNZ FINDNAME02
                LD A,(HL)
                CP "!"
                JR C,FINDNAME06
                INC HL
                JR FINDNAME06

FINDNAME12      INC HL
FINDNAME03      LD A," "
FINDNAME05      LD (DE),A
                INC DE
                DJNZ FINDNAME05
FINDNAME06      LD B,3
FINDNAME08      LD A,(HL)
                CP "!"
                JR C,FINDNAME07
                LDI
                DJNZ FINDNAME08
                CALL POSTF02
                JR FINDNAME11

FINDNAME07      LD A," "
FINDNAME09      LD (DE),A
                INC DE
                DJNZ FINDNAME09
                CALL POSTF02
                JR FINDNAME11

FINDNAME10      CALL NXTLEGZ
FINDNAME11      PUSH HL
                CALL CMP_NAME
                POP HL
                JR Z,FINDNAME13
                LD A,(HL)
                AND A
                JR NZ,FINDNAME10
                SCF
FINDNAME13      POP IY
                RET

CMP_NAME        LD DE,FB_EXT
ICMP_NAME       LD B,0x0B
CMP_NAME_B      LD A,(DE)
                CP "a"
                JR C,CMPNAME01
                CP "{"
                JR NC,CMPNAME01
                AND %11011111
CMPNAME01       CP (HL)
                RET NZ
                INC DE
                INC HL
                DJNZ CMP_NAME_B
                XOR A
                RET

; ¢å®¦¤¥­¨¥ ¢ dir
ENTER_DIR       LD IYL,INTERNAL
                CALL READ_DIR
                PUSH AF
                PUSH DE
                PUSH HL
                CALL RENEW_PATH
                POP HL
                POP DE
                POP AF
                BIT 4,A
                EX AF,AF'

                LD A,E
                EX AF,AF'
                LD E,A
                LD D,(HL)
                RET Z
                EXX
                EX AF,AF'

                BIT 7,A
                JR Z,ENT_DI2
                LD HL,TEK_LEV
                LD A,(HL)
                AND A
                EXX
                RET Z
                EXX
                DEC A
                LD (HL),A
                ADD A,A
                LD H,HIGH (BUF_DIRCEP + CPU6)
                LD L,A
                LD A,(HL)
                INC L
                LD H,(HL)
                LD L,A
                JR ENT_DI1

ENT_DI2         LD HL,TEK_LEV
                LD A,(HL)
                INC A
                CP 0x10
                EXX
                RET Z
                EXX
                LD (HL),A
                DEC A
                ADD A,A
                LD H,HIGH (BUF_DIRCEP + CPU6)
                LD L,A
                LD BC,(TEK_ZAP)
                LD (HL),C
                INC L
                LD (HL),B
ENT_DI1         EXX
                PUSH DE
                LD DE,_DIR_FstClusHI
                ADD HL,DE
                LD C,(HL)
                INC HL
                LD B,(HL)
                LD E,5
                ADD HL,DE
                LD E,(HL)
                INC HL
                LD D,(HL)
                LD A,B
                OR C
                OR D
                OR E
                JR NZ,ENT_DI0
                LD DE,(RootDIRCluster)
                LD BC,(RootDIRCluster + 2)
ENT_DI0         LD (CurrentDIRCluster),DE
                LD (CurrentDIRCluster + 2),BC
                POP DE
INIT_TEKDIR     PUSH DE
                PUSH IY
                LD IYL,INTERNAL
                CALL INIRTSC
                POP IY
                POP DE
                RET