Subversion Repositories pentevo

Rev

Rev 875 | Rev 961 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;LAST UPDATE: 25.09.2020 savelij
  3.  
  4. COM_FAT         EX AF,AF'
  5.                 CALL P5_READ_BYTE
  6.                 LD A,(NEXTBYTERST8)
  7.                 PUSH IX
  8.                 PUSH IY
  9.                 LD IYL,EXTERNAL
  10.                 JR ICOM_FAT1
  11.  
  12. ;ОБЩАЯ ТОЧКА ВХОДА ДЛЯ РАБОТЫ С FAT
  13. ICOM_FAT        EX AF,AF'
  14.                 EX (SP),HL
  15.                 LD A,(HL)
  16.                 INC HL
  17.                 EX (SP),HL
  18.                 PUSH IX
  19.                 PUSH IY
  20.                 LD IYL,INTERNAL
  21. ICOM_FAT1       LD (ERORDRV),SP
  22.                 PUSH HL
  23.                 LD HL,EXITDRV
  24.                 EX (SP),HL
  25.                 PUSH HL
  26.                 LD HL,TABLFAT
  27.                 ADD A,A
  28.                 ADD A,L
  29.                 LD L,A
  30.                 LD A,H
  31.                 ADC A,0
  32.                 LD H,A
  33.                 LD A,(HL)
  34.                 INC HL
  35.                 LD H,(HL)
  36.                 LD L,A
  37.                 EX AF,AF'
  38.                 EX (SP),HL
  39.                 RET
  40.  
  41. ERR_DRV         LD SP,(ERORDRV)
  42. EXITDRV         POP IY
  43.                 POP IX
  44.                 RET
  45.  
  46. TABLFAT         DW INIT_FATVARS                 ;00 ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ FAT
  47.                 DW READ_DIR                     ;01 ПОЛУЧЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  48.                 DW ENTER_DIR                    ;02 ВХОД/ВЫХОД В ДИР
  49.                 DW GET_PATH                     ;03 ПОЛУЧЕНИЕ ТЕКУЩЕГО ПУТИ
  50.                 DW GET_LONGNAME                 ;04 ПОЛУЧЕНИЕ ДЛИННОГО ИМЕНИ ФАЙЛА
  51.                 DW FIND_NAME                    ;05 ПОИСК ПО ИМЕНИ
  52.                 DW FIND_FILEITEM                ;06 ПОИСК ВСЕХ ОПИСАТЕЛЕЙ С ВЫДАЧЕЙ НОМЕРОВ НАЙДЕННОГО
  53.                 DW SET_MASK_EXT                 ;07 УСТАНОВКА МАСКИ РАСШИРЕНИЙ ДЛЯ ПОИСКА
  54.                 DW OPEN_FILE                    ;08 ОТКРЫТИЕ ФАЙЛА
  55.                 DW READ_FILE                    ;09 ПОСЛЕДОВАТЕЛЬНОЕ ЧТЕНИЕ ФАЙЛА
  56.                 DW INIT_TEKDIR                  ;0A СОЗДАНИЕ ТАБЛИЦЫ КЛАСТЕРОВ ТЕКУЩЕЙ ДИРЕКТОРИИ
  57.                 DW POS_FILES                    ;0B РАБОТА С ТЕКУЩЕЙ ПОЗИЦИЕЙ
  58.                 DW ROOTDIR                      ;0C ВЫХОД В КОРНЕВУЮ ДИРЕКТОРИЮ
  59.  
  60. ROOTDIR         PUSH IY
  61.                 LD IYL,INTERNAL
  62.                 LD A,(SETDVOL)
  63.                 LD D,A
  64.                 LD L,A
  65.                 LD H,0
  66.                 ADD HL,HL
  67.                 ADD HL,HL
  68.                 ADD HL,HL
  69.                 LD BC,BUF_TABLVOL+2
  70.                 ADD HL,BC
  71.                 LD A,(HL)
  72.                 LD HL,BUF_TABLVOL
  73.                 CALL INIT_FATVARS
  74.                 LD DE,(TEK_DIR)
  75.                 LD BC,(TEK_DIR+2)
  76.                 CALL INIT_TEKDIR
  77.                 POP IY
  78.                 RET
  79.  
  80. ;ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ FAT
  81. ;НА ВХОДЕ:
  82. ;HL=АДРЕС ТАБЛИЦЫ НАЙДЕНЫХ РАЗДЕЛОВ
  83. ;DE=D-НОМЕР ВЫБРАННОГО РАЗДЕЛА, E-КОЛИЧЕСТВО НАЙДЕННЫХ РАЗДЕЛОВ
  84. ;A=ТИП РАЗДЕЛА ЕСЛИ НАЙДЕН MBR
  85. ;НА ВЫХОДЕ:
  86. ;BCDE=НОМЕР КЛАСТЕРА КОРНЕВОЙ ДИРЕКТОРИИ
  87. ;A=ТИП РАЗДЕЛА ЕСЛИ MBR НЕ НАЙДЕН
  88. INIT_FATVARS    PUSH HL
  89.                 LD HL,0XFFFF
  90.                 LD (LSTLOAD+2),HL
  91.                 LD (CAL_FAT),A
  92.                 LD E,D
  93.                 LD D,0
  94.                 EX DE,HL
  95.                 POP DE
  96.                 ADD HL,HL
  97.                 ADD HL,HL
  98.                 ADD HL,HL
  99.                 ADD HL,DE
  100.                 INC HL
  101.                 INC HL
  102.                 INC HL
  103.                 CALL LOADZP
  104.                 LD (STARTRZ),DE
  105.                 LD (STARTRZ+2),BC               ;НОМЕР ПЕРВОГО СЕКТОРА РАЗДЕЛА
  106.                 CALL LOADLST
  107.                 PUSH HL
  108.                 POP IX
  109.                 CALL VALID_BOOTSEC
  110.                 AND A
  111.                 JR Z,RDFAT07
  112.                 SCF
  113.                 RET
  114.  
  115. RDFAT07         LD HL,0
  116.                 LD E,(IX+_BPB_FATSz16)
  117.                 LD D,(IX+_BPB_FATSz16+1)
  118.                 LD A,D
  119.                 OR E
  120.                 JR NZ,RDFAT01                   ;ЕСЛИ НЕ FAT12/16 (BPB_FATSZ16=0)
  121.                 LD E,(IX+_BPB_FATSz32)
  122.                 LD D,(IX+_BPB_FATSz32+1)
  123.                 LD L,(IX+_BPB_FATSz32+2)
  124.                 LD H,(IX+_BPB_FATSz32+3)
  125.                                                 ;ТО БЕРЕМ ИЗ СМЕЩЕНИЯ +36
  126. RDFAT01         LD (SEC_FAT+2),HL
  127.                 LD (SEC_FAT),DE                 ;ЧИСЛО СЕКТОРОВ НА FAT-ТАБЛИЦУ
  128.                 LD HL,0
  129.                 LD E,(IX+_BPB_TotSec16)
  130.                 LD D,(IX+_BPB_TotSec16+1)
  131.                 LD A,D
  132.                 OR E
  133.                 JR NZ,RDFAT02                   ;ЕСЛИ НЕ FAT12/16 (BPB_TOTSEC16=0)
  134.                 LD E,(IX+_BPB_TotSec32)
  135.                 LD D,(IX+_BPB_TotSec32+1)
  136.                 LD L,(IX+_BPB_TotSec32+2)
  137.                 LD H,(IX+_BPB_TotSec32+3)
  138.                                                 ;ТО БЕРЕМ ИЗ СМЕЩЕНИЯ +32
  139. RDFAT02         LD (SEC_DSC+2),HL
  140.                 LD (SEC_DSC),DE                 ;К-ВО СЕКТОРОВ НА ДИСКЕ/РАЗДЕЛЕ
  141.  
  142. ;ВЫЧИСЛЯЕМ ROOTDIRSECTORS
  143.                 LD E,(IX+_BPB_RootEntCnt)
  144.                 LD D,(IX+_BPB_RootEntCnt+1)
  145.                 LD (ROOTZAP),DE
  146.                 LD BC,0
  147.                 LD H,B
  148.                 LD L,C
  149.                 LD A,D
  150.                 OR E
  151.                 JR Z,RDFAT03
  152.                 LD A,0X10
  153.                 CALL BCDE_A
  154.                 EX DE,HL
  155.  
  156. ;ЭТО РЕАЛИЗОВАНА ФОРМУЛА
  157. ;ROOTDIRSECTORS=((BPB_ROOTENTCNT*32)++(BPB_BYTSPERSEC-1))/BPB_BYTSPERSEC
  158. ;В HL ROOTDIRSECTORS. ЕСЛИ FAT32, ТО HL=0 ВСЕГДА
  159.  
  160. RDFAT03         PUSH HL                         ;ROOTDIRSECTORS
  161.                 LD A,(IX+_BPB_NumFATs)
  162.                 LD (MANYFAT),A
  163.                 LD DE,(SEC_FAT)
  164.                 LD HL,(SEC_FAT+2)
  165.                 DEC A
  166.                 JR Z,RDFAT06                    ;ЕСЛИ FAT ТАБЛИЦА 1,ТО НЕ УМНОЖАЕМ
  167. RDFAT05         EX DE,HL
  168.                 ADD HL,HL
  169.                 EX DE,HL
  170.                 ADC HL,HL
  171.                 DEC A
  172.                 JR NZ,RDFAT05
  173. RDFAT06         POP BC                          ;ПОЛНЫЙ РАЗМЕР FAT-ОБЛАСТИ В СЕКТОРАХ
  174.                 CALL HLDEPBC                    ;ПРИБАВИЛИ ROOTDIRSECTORS
  175.                 LD C,(IX+_BPB_RsvdSecCnt)
  176.                 LD B,(IX+_BPB_RsvdSecCnt+1)
  177.                 LD (RSVDSEC),BC
  178.                 CALL HLDEPBC                    ;ПРИБАВИЛИ BPB_RESVDSECCNT
  179.                 LD (FRSTDAT),DE
  180.                 LD (FRSTDAT+2),HL               ;ПОЛОЖИЛИ НОМЕР ПЕРВОГО СЕКТОРА ДАННЫХ
  181.                 LD B,H
  182.                 LD C,L
  183.                 LD HL,SEC_DSC
  184.                 CALL BCDEHLM                    ;ВЫЧЛИ ИЗ ПОЛНОГО К-ВА СЕКТОРОВ РАЗДЕЛА
  185.                 LD A,(IX+0X0D)
  186.                 LD (BYTSSEC),A                  ;КОЛИЧЕСТВО СЕКТОРОВ НА КЛАСТЕР
  187.                 CALL BCDE_A                     ;РАЗДЕЛИЛИ НА К-ВО СЕКТОРОВ В КЛАСТЕРЕ
  188.                 LD (CLS_DSC),DE
  189.                 LD (CLS_DSC+2),BC               ;ПОЛОЖИЛИ КОЛ-ВО КЛАСТЕРОВ НА РАЗДЕЛЕ
  190.  
  191.                 LD A,(CAL_FAT)
  192.                 CP 0XFF
  193.                 JR NZ,RDFAT04
  194. ;ОПРЕДЕЛЕНИЕ ТИПА FAT ПРИ ОТСУСТВИИ MBR
  195.                 LD DE,(SEC_FAT-1)
  196.                 LD BC,(SEC_FAT+1)
  197.                 LD E,0                          ;BCDE=КОЛИЧЕСТВО СЕКТОРОВ *0X100
  198.                 PUSH BC
  199.                 PUSH DE                         ;СОХРАНИЛИ
  200.                 SRL B
  201.                 RR C
  202.                 RR D
  203.                 RR E                            ;BCDE=КОЛИЧЕСТВО СЕКТОРОВ *0X80
  204.                 LD HL,CLS_DSC                   ;КОЛИЧЕСТВО КЛАСТЕРОВ НА FAT
  205.                 PUSH HL                         ;СОХРАНИЛИ
  206.                 CALL HLBCDEM                    ;КОЛИЧЕСТВО КЛАСТЕРОВ-(КОЛИЧЕСТВО СЕКТОРОВ*0X80)
  207.                 LD A,E
  208.                 AND 0X7F                        ;КОЛИЧЕСТВО МЕНЕЕ 128 КЛАСТЕРОВ В СЕКТОРЕ ДЛЯ FAT32
  209.                 OR D
  210.                 OR C
  211.                 OR B
  212.                 LD A,2
  213.                 POP HL
  214.                 POP DE
  215.                 POP BC
  216.                 JR Z,RDFAT04                    ;FAT32 ЕСЛИ ФЛАГ Z=0
  217.                 CALL HLBCDEM                    ;КОЛИЧЕСТВО КЛАСТЕРОВ-(КОЛИЧЕСТВО СЕКТОРОВ*0X100)
  218.                 LD A,D
  219.                 OR C
  220.                 OR B
  221.                 LD A,1
  222.                 JR Z,RDFAT04                    ;FAT16 ЕСЛИ ФЛАГ Z=0
  223.                 XOR A                           ;ИНАЧЕ FAT12
  224.  
  225. ;ДЛЯ FAT12/16 ROOT КЛАСТЕР=0
  226. ;ДЛЯ FAT32 БЕРЕМ ПО СМЕЩЕМИЮ +44
  227. ;НА ВЫХОДЕ BCDE-СЕКТОР ROOTDIR КЛАСТЕР
  228. RDFAT04         LD (CAL_FAT),A
  229.                 AND A
  230.                 PUSH AF
  231.                 LD DE,0
  232.                 LD B,D
  233.                 LD C,E
  234.                 JR Z,FSRROO2                    ;FAT12
  235.                 DEC A
  236.                 JR Z,FSRROO2                    ;FAT16
  237.                 LD E,(IX+_BPB_RootClus)
  238.                 LD D,(IX+_BPB_RootClus+1)
  239.                 LD C,(IX+_BPB_RootClus+2)
  240.                 LD B,(IX+_BPB_RootClus+3)       ;FAT32
  241. FSRROO2         LD (ROOTCLS),DE
  242.                 LD (ROOTCLS+2),BC               ;СЕКТОР ROOT ДИРЕКТОРИИ
  243.                 LD (TEK_DIR),DE
  244.                 LD (TEK_DIR+2),BC
  245. FSRR121         PUSH DE
  246.                 PUSH BC
  247.                 LD DE,(RSVDSEC)
  248.                 LD BC,0
  249.                 LD HL,STARTRZ
  250.                 CALL BCDEHLP
  251.                 LD (FATSTR),DE
  252.                 LD (FATSTR+2),BC
  253.                 XOR A
  254.                 LD (TEK_LEV),A
  255.                 LD (BUF_PATH),A
  256.                 CALL INIT_PATH
  257.                 POP BC
  258.                 POP DE
  259.                 POP AF
  260.                 RET
  261.  
  262. ;[проверка 0 сектора раздела]
  263. VALID_BOOTSEC   LD A,(IX+_BPB_BytsPerSec+1)
  264.                 SUB 2
  265.                 OR (IX+_BPB_BytsPerSec)
  266.                 JR NZ,VALID_BOOTSEC1
  267.                 LD D,(IX+_BPB_SecPerClus)
  268.                 OR D
  269.                 JR Z,VALID_BOOTSEC1
  270.                 NEG
  271.                 AND D
  272.                 CP D
  273.                 JR NZ,VALID_BOOTSEC1
  274.                 LD A,(IX+_BPB_NumFATs)
  275.                 DEC A
  276.                 CP 7
  277.                 JR NC,VALID_BOOTSEC1
  278.                 XOR A
  279.                 RET
  280.  
  281. ;2A72200-2A54200=1E000  120945-120611
  282. ;2A90200
  283.  
  284. VALID_BOOTSEC1  OR IXH
  285.                 RET
  286.  
  287. ;ФОРМИРОВАНИЕ ТАБЛИЦЫ КЛАСТЕРОВ DIR
  288. ;И ПОИСК ПЕРВОЙ "ЛЕГАЛЬНОЙ" ЗАПИСИ В DIR
  289. INIRTSC         PUSH AF
  290.                 LD HL,0XFFFF
  291.                 LD (LSTLOAD+2),HL
  292.                 LD HL,BUF_TDIRCLS
  293.                 LD DE,(TEK_DIR)
  294.                 LD BC,(TEK_DIR+2)
  295.                 CALL SAVEZP
  296.                 LD A,D
  297.                 OR E
  298.                 OR B
  299.                 OR C
  300.                 JR Z,LASTCLS
  301. NEXTCLS         PUSH HL
  302.                 CALL RDFATZP
  303.                 CALL LST_CLS
  304.                 POP HL
  305.                 JR C,LASTCLS
  306.                 CALL SAVEZP
  307.                 JR NEXTCLS
  308.  
  309. LASTCLS         LD BC,0XFFFF
  310.                 CALL SAVEZP
  311.                 CALL POSTF02
  312.                 POP AF
  313.                 RET
  314.  
  315. ;ЧТЕНИЕ СЛЕДУЮЩЕГО НОМЕРА КЛАСТЕРА
  316. RDFATZP         LD A,(CAL_FAT)
  317.                 AND A
  318.                 JR Z,RDFATS0
  319.                 DEC A
  320.                 JR Z,RDFATS1
  321.                 EX DE,HL
  322.                 ADD HL,HL
  323.                 EX DE,HL
  324.                 LD HL,0
  325.                 ADC HL,BC
  326.                 ADC HL,BC
  327.                 LD A,E
  328.                 LD E,D
  329.                 LD D,L
  330.                 LD C,H
  331.                 LD B,0
  332.                 CALL RDFATS2
  333.                 INC HL
  334.                 LD C,(HL)
  335.                 INC HL
  336.                 LD B,(HL)
  337.                 RET
  338.  
  339. RDFATS1         LD BC,0
  340.                 LD A,E
  341.                 LD E,D
  342.                 LD D,C
  343. RDFATS2         PUSH AF
  344.                 PUSH BC
  345.                 LD HL,FATSTR
  346.                 CALL BCDEHLP
  347.                 CALL LOADLST
  348.                 POP BC
  349.                 POP AF
  350.                 LD E,A
  351.                 LD D,0
  352.                 ADD HL,DE
  353.                 ADD HL,DE
  354.                 LD E,(HL)
  355.                 INC HL
  356.                 LD D,(HL)
  357.                 RET
  358.  
  359. RDFATS0         LD H,D
  360.                 LD L,E
  361.                 ADD HL,HL
  362.                 ADD HL,DE
  363.                 SRL H
  364.                 RR L
  365.                 LD A,E
  366.                 LD E,H
  367.                 LD D,0
  368.                 LD B,D
  369.                 LD C,D
  370.                 SRL E
  371.                 PUSH AF
  372.                 PUSH HL
  373.                 LD HL,FATSTR
  374.                 CALL BCDEHLP
  375.                 CALL LOADLST
  376.                 POP BC
  377.                 LD A,B
  378.                 AND 1
  379.                 LD B,A
  380.                 ADD HL,BC
  381.                 LD B,(HL)
  382.                 INC HL
  383.                 LD A,H
  384.                 CP HIGH (BUF_512)+2
  385.                 JR NZ,RDFATS4
  386.                 PUSH BC
  387.                 LD BC,0
  388.                 INC DE
  389.                 CALL LOADLST
  390.                 POP BC
  391. RDFATS4         POP AF
  392.                 LD D,(HL)
  393.                 LD E,B
  394.                 LD BC,0
  395.                 RRA
  396.                 JR NC,RDFATS3
  397.                 REPT 4
  398.                 SRL D
  399.                 RR E
  400.                 ENDM
  401. RDFATS3         LD A,D
  402.                 AND 0X0F
  403.                 LD D,A
  404.                 RET
  405.  
  406. ;ВЫЧИСЛЕНИЕ РЕАЛЬНОГО СЕКТОРА
  407. ;НА ВХОДЕ: BCDE=НОМЕР КЛАСТЕРА FAT
  408. ;НА ВЫХОДЕ: BCDE=АДРЕС СЕКТОРА
  409. REALSEC         LD A,B
  410.                 OR C
  411.                 OR D
  412.                 OR E
  413.                 JR NZ,REALSE1
  414.                 LD DE,(FATSTR)
  415.                 LD BC,(FATSTR+2)
  416.                 LD HL,SEC_FAT
  417.                 LD A,(MANYFAT)
  418. .L0             DEC A
  419.                 JP Z,BCDEHLP
  420.                 PUSH HL
  421.                 PUSH AF
  422.                 CALL BCDEHLP
  423.                 POP AF
  424.                 POP HL
  425.                 JR .L0
  426.  
  427. REALSE1         LD HL,0XFFFE
  428.                 EX DE,HL
  429.                 ADD HL,DE
  430.                 EX DE,HL
  431.                 INC HL
  432.                 ADC HL,BC                       ;НОМЕР КЛАСТЕРА-2
  433.                 LD A,(BYTSSEC)
  434.                 JR REALSE2
  435.  
  436. REALSE3         SLA E
  437.                 RL D
  438.                 RL L
  439.                 RL H
  440. REALSE2         RRCA
  441.                 JR NC,REALSE3                   ;УМНОЖИЛИ НА РАЗМЕР КЛАСТЕРА
  442.                 LD B,H
  443.                 LD C,L
  444.                 LD HL,STARTRZ
  445.                 CALL BCDEHLP                    ;ПРИБАВИЛИ СМЕЩЕНИЕ ОТ НАЧАЛА ДИСКА
  446.                 LD HL,FRSTDAT
  447.                 JP BCDEHLP                      ;ПРИБАВИЛИ СМЕЩЕНИЕ ОТ НАЧАЛА РАЗДЕЛА
  448.  
  449. ;СОХРАНЯЕМ СЕКТОР ЗАГРУЖЕННЫЙ В БУФЕР
  450. LSTSAVE         LD BC,(LSTLOAD+2)
  451.                 LD DE,(LSTLOAD)
  452.                 LD HL,BUF_512
  453.                 LD A,1
  454.                 CALL TO_DRV
  455.                 DB _DEV_WRITE
  456.                 AND A
  457.                 JP NZ,ERR_DRV
  458.                 RET
  459.  
  460. ;ЗАГРУЖАЕМ СЕКТОР В БУФЕР
  461. LOADLST         CALL CPNUMSC
  462.                 JR NZ,LOADLS1
  463.                 LD HL,BUF_512
  464.                 RET
  465.  
  466. LOADLS1         LD (LSTLOAD+2),BC
  467.                 LD (LSTLOAD),DE
  468.                 LD HL,BUF_512
  469.                 PUSH HL
  470.                 LD A,1
  471.                 CALL TO_DRV
  472.                 DB _DEV_READ
  473.                 AND A
  474.                 JP NZ,ERR_DRV
  475.                 POP HL
  476.                 RET
  477.  
  478. ;ПРОВЕРКА НА УЖЕ ЗАГРУЖЕННЫЙ СЕКТОР
  479. CPNUMSC         LD HL,LSTLOAD
  480.                 LD A,(HL)
  481.                 INC HL
  482.                 CP E
  483.                 RET NZ
  484.                 LD A,(HL)
  485.                 INC HL
  486.                 CP D
  487.                 RET NZ
  488.                 LD A,(HL)
  489.                 INC HL
  490.                 CP C
  491.                 RET NZ
  492.                 LD A,(HL)
  493.                 CP B
  494.                 RET
  495.  
  496. ;ПРОВЕРКА НА ПОСЛЕДНИЙ КЛАСТЕР
  497. LST_CLS         LD A,(CAL_FAT)                  ;ВЗЯЛИ ТИП FAT
  498.                 AND A
  499.                 JR NZ,LST_CL1
  500.                 LD HL,0X0FF7                    ;ДЛЯ FAT12
  501.                 SBC HL,DE
  502.                 RET
  503.  
  504. LST_CL1         DEC A
  505.                 JR NZ,LST_CL2
  506.                 LD HL,0XFFF7                    ;ДЛЯ FAT16
  507.                 SBC HL,DE
  508.                 RET
  509.  
  510. LST_CL2         LD HL,0X0FFF
  511.                 SBC HL,BC
  512.                 RET NZ
  513.                 LD HL,0XFFF7
  514.                 SBC HL,DE
  515.                 RET
  516.  
  517. ;ПОЛУЧИТЬ ОПИСАТЕЛЬ ТЕКУЩЕГО ФАЙЛА
  518. READ_DIR        LD A,IYL
  519.                 AND A
  520.                 JR NZ,GETFZA3
  521.                 PUSH IY
  522.                 LD IYL,INTERNAL
  523.                 PUSH HL
  524.                 LD HL,(RREG_C)
  525.                 LD (TEK_ZAP),HL
  526.                 LD HL,GETFZA4
  527.                 EX (SP),HL
  528. GETFZA3         LD BC,(TEK_ZAP)                 ;ТЕКУЩИЙ НОМЕР ОПИСАТЕЛЯ
  529.                 LD A,B
  530.                 OR C
  531.                 JR Z,GETRZAP                    ;ЕСЛИ НОМЕР =0, ТО ПРЕДЫДУЩИЙ НОМЕР НЕ ПРОВЕРЯЕМ
  532.                 PUSH BC                         ;СОХРАНИЛИ ТЕКУЩИЙ НОМЕР
  533.                 DEC BC                          ;НУЖНО ПРОВЕРИТЬ ПРЕДЫДУЩИЙ НОМЕР
  534.                 CALL GETRZAP                    ;ПРОВЕРЯЕМ
  535.                 POP BC                          ;ВЕРНУЛИ ТЕКУЩИЙ НОМЕР
  536.                 LD E,A                          ;ИЗ ПРЕДЫДУЩЕГО ОПИСАТЕЛЯ НУЖЕН ТОЛЬКО ФЛАГОВЫЙ БАЙТ
  537. GETRZAP         PUSH DE
  538.                 CALL RDDIRSC                    ;ЧИТАЕМ СЕКТОР С ТЕКУЩИМ НОМЕРОМ
  539.                 POP DE                          ;ВЕРНУЛИ РЕГИСТР E
  540.                 INC A
  541.                 LD A,E                          ;ВЕРНУЛИ НАЛИЧИЕ/ОТСУСТВИЕ ДЛИННОГО ИМЕНИ
  542.                 RET Z                           ;ВЫХОДИМ ЕСЛИ ВЫЛЕТЕЛИ ЗА ПРЕДЕЛЫ СУЩЕСТВУЮЩЕЙ ДИРЫ
  543.                 EX AF,AF'                      
  544. GETFZA1         LD A,C
  545.                 AND 0X0F                        ;ПОЛУЧИЛИ НОМЕР ОПИСАТЕЛЯ В ЗАГРУЖЕННОМ СЕКТОРЕ ДИРЫ
  546.                 LD E,A
  547.                 LD D,0
  548.                 EX DE,HL
  549.                 ADD HL,HL
  550.                 ADD HL,HL
  551.                 ADD HL,HL
  552.                 ADD HL,HL
  553.                 ADD HL,HL
  554.                 ADD HL,DE                       ;ВЫЧИСЛИЛИ АДРЕС ВЫБРАННОГО ОПИСАТЕЛЯ
  555.                 LD DE,0X0B
  556.                 LD A,(HL)                       ;ВЗЯЛИ ФЛАГОВЫЙ БАЙТ ТЕКУЩЕГО ОПИСАТЕЛЯ
  557.                 EX DE,HL
  558.                 ADD HL,DE
  559.                 LD L,(HL)                       ;ВЗЯЛИ ПЕРВЫЙ БАЙТ ИМЕНИ
  560.                 LD H,A                          ;ПОЛОЖИЛИ ФЛАГОВЫЙ БАЙТ ЭТОГО ОПИСАТЕЛЯ
  561.                 EX DE,HL
  562.                 CALL CP_TWOT                    ;ПРОВЕРКА НА НАЛИЧИЕ В ИМЕНИ ".."
  563.                 LD D,0                          ;БУДЕМ ВХОДИТЬ В ДИРЕКТОРИЮ
  564.                 JR NZ,GETFZA2
  565.                 LD D,0X80                       ;БУДЕМ ВЫХОДИТЬ В ПРЕДЫДУЩУЮ ДИРЕКТОРИЮ
  566. GETFZA2         EX AF,AF'
  567.                 CP 0X0F                         ;ПРОВЕРЯЕМ ФЛАГОВЫЙ БАЙТ ПРЕДЫДУЩЕГО ОПИСАТЕЛЯ
  568.                 LD A,E                          ;ВЗЯЛИ ФЛАГОВЫЙ БАЙТ ТЕКУЩЕГО ОПИСАТЕЛЯ
  569.                 LD E,D                          ;ВЫСТАВИЛИ НАПРАВЛЕНИЕ ДВИЖЕНИЯ В ДИРАХ
  570.                 RET NZ
  571.                 INC E                           ;УСТАНОВКА НАЛИЧИЯ ДЛИННОГО ИМЕНИ
  572.                 RET
  573.  
  574. GETFZA4         PUSH AF
  575.                 PUSH HL
  576.                 PUSH DE
  577.                 LD DE,CPU6
  578.                 ADD HL,DE
  579.                 LD DE,(RREG_L)
  580.                 LD BC,0X20
  581.                 CALL LDIR_BYTES
  582.                 POP DE
  583.                 POP HL
  584.                 POP AF
  585.                 POP IY
  586.                 RET
  587.  
  588. ;ЧТЕНИЕ СЕКТОРА DIR ПО НОМЕРУ BC
  589. ;НА ВЫХОДЕ: A=0XFF-ВЫХОД ЗА ПРЕДЕЛЫ DIR
  590. RDDIRSC         PUSH BC
  591.                 LD D,B
  592.                 LD E,C
  593.                 LD BC,0
  594.                 LD A,0X10
  595.                 CALL BCDE_A
  596.                 LD A,E
  597.                 PUSH AF
  598.                 LD A,(BYTSSEC)
  599.                 PUSH AF
  600.                 CALL BCDE_A
  601.                 LD HL,BUF_TDIRCLS;TDIRCLS
  602.                 EX DE,HL
  603.                 ADD HL,HL
  604.                 ADD HL,HL
  605.                 ADD HL,DE
  606.                 CALL LOADZP
  607.                 BIT 7,B
  608.                 JR Z,RDDIRS3
  609.                 POP BC
  610.                 POP BC
  611.                 POP BC
  612.                 XOR A
  613.                 DEC A
  614.                 RET
  615.  
  616. RDDIRS3         CALL REALSEC
  617.                 POP AF
  618.                 DEC A
  619.                 LD L,A
  620.                 POP AF
  621.                 AND L
  622.                 LD L,A
  623.                 LD H,0
  624.                 ADD HL,DE
  625.                 EX DE,HL
  626.                 LD HL,0
  627.                 ADC HL,BC
  628.                 LD B,H
  629.                 LD C,L
  630.                 CALL LOADLST
  631.                 POP BC
  632.                 XOR A
  633.                 RET
  634.  
  635. ;ПРОВЕРКА НА 1 ТОЧКУ
  636. CP_ONET         LD A,(HL)
  637.                 CP "."
  638.                 RET NZ
  639.                 INC HL
  640.                 LD A,(HL)
  641.                 DEC HL
  642.                 CP " "
  643.                 RET NZ
  644.                 XOR A
  645.                 RET
  646.  
  647. ;ПРОВЕРКА НА 2 ТОЧКИ
  648. CP_TWOT         LD A,(HL)
  649.                 CP "."
  650.                 RET NZ
  651.                 INC HL
  652.                 LD A,(HL)
  653.                 DEC HL
  654.                 CP "."
  655.                 RET NZ
  656.                 XOR A
  657.                 RET
  658.  
  659. EPOS_FILES      LD HL,(TEK_ZAP)
  660.                 LD (RREG_C),HL
  661.                 RET
  662.  
  663. POS_FILES       LD D,A
  664.                 LD A,IYL
  665.                 LD IYL,INTERNAL
  666.                 AND A
  667.                 LD A,D
  668.                 JR NZ,POSITFILE1
  669.                 LD HL,EPOS_FILES
  670.                 PUSH HL
  671.                 LD A,(RREG_A)
  672.                 LD BC,(RREG_C)
  673. POSITFILE1      CP LOW ((ENDTPOS-TPOSITF)/2)
  674.                 RET NC
  675.                 ADD A,A
  676.                 LD DE,TPOSITF
  677.                 LD L,A
  678.                 LD H,0
  679.                 ADD HL,DE
  680.                 LD E,(HL)
  681.                 INC HL
  682.                 LD D,(HL)
  683.                 EX DE,HL
  684.                 JP (HL)
  685.  
  686. TPOSITF         DW POSTF00                      ;СОХРАНЕНИЕ ТЕКУЩЕЙ ПОЗИЦИИ ФАЙЛА
  687.                 DW POSTF01                      ;ВОССТАНОВЛЕНИЕ ТЕКУЩЕЙ ПОЗИЦИИ ФАЙЛА
  688.                 DW POSTF02                      ;СБРОС ТЕКУЩЕЙ ПОЗИЦИИ В 0 И ПОИСК ПЕРВОЙ "ЛЕГАЛЬНОЙ" ЗАПИСИ
  689.                 DW POSTF03                      ;ПЕРЕМОТАТЬ НА "B" ФАЙЛОВ НАЗАД
  690.                 DW POSTF04                      ;ПЕРЕМОТАТЬ НА "B" ФАЙЛОВ ВПЕРЕД
  691.                 DW POSTF05                      ;ПОДСЧЕТ КОЛИЧЕСТВА "ЛЕГАЛЬНЫХ" ЗАПИСЕЙ
  692.                 DW POSTF06                      ;УСТАНОВИТЬ НОМЕР "ЛЕГАЛЬНОЙ" ЗАПИСИ ИЗ "BC"
  693.                 DW POSTF07                      ;ВЕРНУТЬ В "BC" ТЕКУЩИЙ НОМЕР "ЛЕГАЛЬНОЙ" ЗАПИСИ
  694. ENDTPOS
  695.  
  696. ;СОХРАНЕНИЕ ТЕКУЩЕЙ ПОЗИЦИИ ФАЙЛА
  697. POSTF00         LD HL,(TEK_ZAP)
  698.                 LD (SAVEZAP),HL
  699.                 RET
  700.  
  701. ;ВОССТАНОВЛЕНИЕ ТЕКУЩЕЙ ПОЗИЦИИ ФАЙЛА
  702. POSTF01         LD HL,(SAVEZAP)
  703.                 LD (TEK_ZAP),HL
  704.                 RET
  705.  
  706. ;ПЕРЕМОТАТЬ НА "B" ФАЙЛОВ НАЗАД
  707. POSTF03         LD A,B
  708.                 AND A
  709.                 RET Z
  710.                 PUSH BC
  711.                 CALL PRVLEGZ
  712.                 POP BC
  713.                 DJNZ $-5
  714.                 RET
  715.  
  716. ;ПЕРЕМОТАТЬ НА "B" ФАЙЛОВ ВПЕРЕД
  717. POSTF04         LD A,B
  718.                 AND A
  719.                 RET Z
  720.                 PUSH BC
  721.                 CALL NXTLEGZ
  722.                 POP BC
  723.                 DJNZ $-5
  724.                 RET
  725.  
  726. ;ПОДСЧЕТ КОЛИЧЕСТВА "ЛЕГАЛЬНЫХ" ЗАПИСЕЙ
  727. POSTF05         LD BC,0
  728.                 PUSH BC
  729.                 EXX
  730.                 POP BC
  731.                 EXX
  732.                 CALL RDDIRSC
  733.                 LD DE,0X20
  734. KOL_ZA4         LD A,(HL)
  735.                 CP "."
  736.                 JR NZ,KOL_ZA1+2
  737.                 INC HL
  738.                 LD A,(HL)
  739.                 DEC HL
  740.                 CP "."
  741.                 JR Z,KOL_ZA1+2
  742.                 INC BC
  743.                 ADD HL,DE
  744.                 JR KOL_ZA4
  745.  
  746. KOL_ZA1         INC BC
  747.                 ADD HL,DE
  748.                 LD A,H
  749.                 CP HIGH (BUF_512)+2
  750.                 JR NZ,KOL_ZA2
  751.                 CALL RDDIRSC
  752.                 LD D,0
  753.                 AND A
  754.                 JR Z,KOL_ZA2
  755.                 CALL KOL_ZA3
  756.                 DEC A
  757.                 RET
  758.  
  759. KOL_ZA2         LD E,0X0B
  760.                 ADD HL,DE
  761.                 LD A,(HL)
  762.                 AND A
  763.                 SBC HL,DE
  764.                 LD E,0X20
  765.                 CP 0X0F
  766.                 JR Z,KOL_ZA1
  767.                 CP 8
  768.                 JR Z,KOL_ZA1
  769.                 LD A,(HL)
  770.                 CP 0XE5
  771.                 JR Z,KOL_ZA1
  772.                 AND A
  773.                 JR Z,KOL_ZA3
  774.                 EXX
  775.                 INC BC
  776.                 EXX
  777.                 JR KOL_ZA1
  778.  
  779. KOL_ZA3         LD D,B
  780.                 LD E,C
  781.                 EXX
  782.                 PUSH BC
  783.                 EXX
  784.                 POP BC
  785.                 XOR A
  786.                 RET
  787.  
  788. ;УСТАНОВИТЬ НОМЕР "ЛЕГАЛЬНОЙ" ЗАПИСИ ИЗ "BC"
  789. POSTF06         LD (TEK_ZAP),BC
  790.                 RET
  791.  
  792. ;ВЕРНУТЬ В "BC" ТЕКУЩИЙ НОМЕР "ЛЕГАЛЬНОЙ" ЗАПИСИ
  793. POSTF07         LD BC,(TEK_ZAP)
  794.                 RET
  795.  
  796. CPTEKZP         CALL RDDIRSC
  797.                 RET M
  798.                 LD A,C
  799.                 AND 0X0F
  800.                 LD L,A
  801.                 LD H,0
  802.                 LD DE,BUF_512
  803.                 ADD HL,HL
  804.                 ADD HL,HL
  805.                 ADD HL,HL
  806.                 ADD HL,HL
  807.                 ADD HL,HL
  808.                 ADD HL,DE
  809.                 LD DE,0X0B
  810.                 ADD HL,DE
  811.                 LD A,(HL)
  812.                 SBC HL,DE
  813.                 LD E,(HL)
  814.                 AND A
  815.                 RET
  816.  
  817. ;СБРОС ТЕКУЩЕЙ ПОЗИЦИИ В 0 И ПОИСК ПЕРВОЙ "ЛЕГАЛЬНОЙ" ЗАПИСИ
  818. POSTF02         LD BC,0
  819.                 LD (TEK_ZAP),BC
  820.                 CALL RDDIRSC
  821.                 CALL CP_ONET
  822.                 JR Z,NXTLEG1
  823.                 LD A,(HL)
  824.                 AND A
  825.                 RET Z
  826.                 JR NXTLEG1+1
  827.  
  828. NXTLEGZ         LD BC,(TEK_ZAP)
  829. NXTLEG1         INC BC
  830.                 CALL CPTEKZP
  831.                 CP 0XFF
  832.                 RET Z
  833.                 CP 0X0F
  834.                 JR Z,NXTLEG1
  835.                 CP 8
  836.                 JR Z,NXTLEG1
  837.                 LD A,E
  838.                 AND A
  839.                 RET Z
  840.                 CP 0XE5
  841.                 JR Z,NXTLEG1
  842.                 LD (TEK_ZAP),BC
  843.                 RET
  844.  
  845. PRVLEGZ         LD BC,(TEK_ZAP)
  846.                 CALL CPTEKZP
  847.                 CALL CP_TWOT
  848.                 RET Z
  849. PRVLEG1         DEC BC
  850.                 CALL CPTEKZP
  851.                 CP 0X0F
  852.                 JR Z,PRVLEG1
  853.                 CP 8
  854.                 JR Z,PRVLEG1
  855.                 LD A,E
  856.                 CP 0XE5
  857.                 JR Z,PRVLEG1
  858.                 LD (TEK_ZAP),BC
  859.                 RET
  860.  
  861. SAVEZP          LD (HL),E
  862.                 INC HL
  863.                 LD (HL),D
  864.                 INC HL
  865.                 LD (HL),C
  866.                 INC HL
  867.                 LD (HL),B
  868.                 INC HL
  869.                 RET
  870.  
  871. LOADZP          LD E,(HL)
  872.                 INC HL
  873.                 LD D,(HL)
  874.                 INC HL
  875.                 LD C,(HL)
  876.                 INC HL
  877.                 LD B,(HL)
  878.                 INC HL
  879.                 RET
  880.  
  881. BCDE200         LD E,D
  882.                 LD D,C
  883.                 LD C,B
  884.                 LD B,0
  885.                 LD A,2
  886.                 JR BCDE_A
  887.  
  888. ;BCDE>>A=BCDE
  889. BCDE_A1         SRL B
  890.                 RR C
  891.                 RR D
  892.                 RR E
  893. BCDE_A          RRCA
  894.                 JR NC,BCDE_A1
  895.                 RET
  896.  
  897. ;BCDE-(ADR)=BCDE
  898. HLBCDEM         LD A,E
  899.                 SUB (HL)
  900.                 INC HL
  901.                 LD E,A
  902.                 LD A,D
  903.                 SBC A,(HL)
  904.                 INC HL
  905.                 LD D,A
  906.                 LD A,C
  907.                 SBC A,(HL)
  908.                 INC HL
  909.                 LD C,A
  910.                 LD A,B
  911.                 SBC A,(HL)
  912.                 LD B,A
  913.                 RET
  914.  
  915. ;(ADR)-BCDE=BCDE
  916. BCDEHLM         LD A,(HL)
  917.                 INC HL
  918.                 SUB E
  919.                 LD E,A
  920.                 LD A,(HL)
  921.                 INC HL
  922.                 SBC A,D
  923.                 LD D,A
  924.                 LD A,(HL)
  925.                 INC HL
  926.                 SBC A,C
  927.                 LD C,A
  928.                 LD A,(HL)
  929.                 SBC A,B
  930.                 LD B,A
  931.                 RET
  932.  
  933. ;(ADR)+BCDE=BCDE
  934. BCDEHLP         LD A,(HL)
  935.                 INC HL
  936.                 ADD A,E
  937.                 LD E,A
  938.                 LD A,(HL)
  939.                 INC HL
  940.                 ADC A,D
  941.                 LD D,A
  942.                 LD A,(HL)
  943.                 INC HL
  944.                 ADC A,C
  945.                 LD C,A
  946.                 LD A,(HL)
  947.                 ADC A,B
  948.                 LD B,A
  949.                 RET
  950.  
  951. ;HLDE+BC=HLDE
  952. HLDEPBC         EX DE,HL
  953.                 ADD HL,BC
  954.                 EX DE,HL
  955.                 LD BC,0
  956.                 ADC HL,BC
  957.                 RET
  958.  
  959. INIT_PATH       EVOPORT WIN_P5,RAM_MOUNTER
  960.                 LD A,(SETDVOL)
  961.                 LD D,A
  962.                 ADD A,HIGH (TEK_BUFPATH+CPU5)+4
  963.                 LD H,A
  964.                 LD L,0
  965.                 LD A,"E"
  966.                 ADD A,D
  967.                 LD (HL),A
  968.                 INC L
  969.                 LD (HL),":"
  970.                 INC L
  971.                 LD (HL),"/"
  972.                 INC L
  973.                 LD (HL),0
  974.                 INC L
  975.                 LD A,L
  976.                 LD L,0XFF
  977.                 LD (HL),A
  978.                 RET
  979.  
  980. RENEW_PATH      EVOPORT WIN_P5,RAM_MOUNTER
  981.                 BIT 7,E
  982.                 JR NZ,MINUS_PATH
  983. ;ДОБАВЛЕНИЕ ДИРЕКТОРИИ К ТЕКУЩЕМУ ПУТИ (ВХОД В ДИРЕКТОРИЮ)
  984.                 EX DE,HL
  985.                 LD A,(SETDVOL)
  986.                 ADD A,HIGH (TEK_BUFPATH+CPU5)+4
  987.                 LD H,A
  988.                 LD L,0XFF
  989.                 LD L,(HL)
  990.                 EX DE,HL
  991.                 DEC DE
  992.                 LD BC,8
  993.                 LDIR
  994.                 LD B,8
  995. RENEWPATH3      DEC DE
  996.                 LD A,(DE)
  997.                 INC DE
  998.                 CP " "
  999.                 JR NZ,RENEWPATH2
  1000.                 DEC DE
  1001.                 DJNZ RENEWPATH3
  1002. RENEWPATH2      LD A,(HL)
  1003.                 CP " "
  1004.                 JR Z,RENEWPATH4
  1005.                 LD A,"."
  1006.                 LD (DE),A
  1007.                 INC DE
  1008.                 LD BC,3
  1009.                 LDIR
  1010.                 LD B,3
  1011. RENEWPATH5      DEC DE
  1012.                 LD A,(DE)
  1013.                 INC DE
  1014.                 CP " "
  1015.                 JR NZ,RENEWPATH4
  1016.                 DEC DE
  1017.                 DJNZ RENEWPATH5
  1018. RENEWPATH4      EX DE,HL
  1019.                 LD (HL),"/"
  1020.                 INC L
  1021.                 LD (HL),0
  1022.                 INC L
  1023.                 LD A,L
  1024.                 LD L,0XFF
  1025.                 LD (HL),A
  1026.                 RET
  1027.  
  1028. ;УКОРОЧЕНИЕ ТЕКУЩЕГО ПУТИ (ВЫХОД В ПРЕДЫДУЩУЮ ДИРЕКТОРИЮ)
  1029. MINUS_PATH      LD A,(SETDVOL)
  1030.                 ADD A,HIGH (TEK_BUFPATH+CPU5)+4
  1031.                 LD H,A
  1032.                 LD L,0XFF
  1033.                 LD L,(HL)
  1034.                 DEC L
  1035.                 DEC L
  1036. MINUS_PATH1     DEC L
  1037.                 LD A,(HL)
  1038.                 CP "/"
  1039.                 JR NZ,MINUS_PATH1
  1040.                 INC L
  1041.                 LD (HL),0
  1042.                 INC L
  1043.                 LD A,L
  1044.                 LD L,0XFF
  1045.                 LD (HL),A
  1046.                 RET
  1047.  
  1048. ;ПОЛУЧЕНИЕ ТЕКУЩЕГО ПУТИ
  1049. GET_PATH        EVOPORT WIN_P5,RAM_MOUNTER
  1050.                 LD A,IYL
  1051.                 AND A
  1052.                 JR NZ,GETPATH1
  1053.                 LD A,(SETDVOL)
  1054.                 LD D,A
  1055.                 ADD A,HIGH (TEK_BUFPATH+CPU5)+4
  1056.                 LD H,A
  1057.                 LD L,0XFF
  1058.                 LD A,(HL)
  1059.                 LD DE,BUF_256
  1060.                 LD BC,0X100
  1061.                 LD L,C
  1062.                 LDIR
  1063.                 LD C,A                          ;BC=СКОЛЬКО БАЙТ ПЕРЕНОСИТЬ В АДРЕС ПО ЗАПРОСУ
  1064.                 LD A,HIGH (CPU6)-1
  1065.                 ADD A,D
  1066.                 LD H,A
  1067.                 LD DE,(RREG_L)                  ;КУДА ПЕРЕНОСИТЬ ПУТЬ
  1068.                 JP LDIR_BYTES
  1069.  
  1070. GETPATH1        PUSH HL
  1071.                 PUSH HL
  1072.                 LD A,(SETDVOL)
  1073.                 LD D,A
  1074.                 ADD A,HIGH (TEK_BUFPATH+CPU5)+4
  1075.                 LD H,A
  1076.                 LD L,0XFF
  1077.                 LD A,(HL)
  1078.                 POP DE
  1079.                 LD BC,0X100
  1080.                 LD L,C
  1081.                 LDIR
  1082.                 POP HL
  1083.                 RET
  1084.  
  1085. ;ВХОЖДЕНИЕ В DIR
  1086. ENTER_DIR       LD IYL,INTERNAL
  1087.                 CALL READ_DIR
  1088.                 PUSH AF
  1089.                 PUSH DE
  1090.                 PUSH HL
  1091.                 CALL RENEW_PATH
  1092.                 POP HL
  1093.                 POP DE
  1094.                 POP AF
  1095.                 BIT 4,A
  1096.                 EX AF,AF'
  1097.                 LD A,E
  1098.                 EX AF,AF'
  1099.                 LD E,A
  1100.                 LD D,(HL)
  1101.                 RET Z
  1102.                 EXX
  1103.                 EX AF,AF'
  1104.                 BIT 7,A
  1105.                 JR Z,ENT_DI2
  1106.                 LD HL,TEK_LEV
  1107.                 LD A,(HL)
  1108.                 AND A
  1109.                 EXX
  1110.                 RET Z
  1111.                 EXX
  1112.                 DEC A
  1113.                 LD (HL),A
  1114.                 ADD A,A
  1115.                 LD H,HIGH (BUF_DIRCEP+CPU6)
  1116.                 LD L,A
  1117.                 LD A,(HL)
  1118.                 INC L
  1119.                 LD H,(HL)
  1120.                 LD L,A
  1121.                 JR ENT_DI1
  1122.  
  1123. ENT_DI2         LD HL,TEK_LEV
  1124.                 LD A,(HL)
  1125.                 INC A
  1126.                 CP 0X10
  1127.                 EXX
  1128.                 RET Z
  1129.                 EXX
  1130.                 LD (HL),A
  1131.                 DEC A
  1132.                 ADD A,A
  1133.                 LD H,HIGH (BUF_DIRCEP+CPU6)
  1134.                 LD L,A
  1135.                 LD BC,(TEK_ZAP)
  1136.                 LD (HL),C
  1137.                 INC L
  1138.                 LD (HL),B
  1139. ENT_DI1         EXX
  1140.                 PUSH DE
  1141.                 LD DE,0X14
  1142.                 ADD HL,DE
  1143.                 LD C,(HL)
  1144.                 INC HL
  1145.                 LD B,(HL)
  1146.                 LD E,5
  1147.                 ADD HL,DE
  1148.                 LD E,(HL)
  1149.                 INC HL
  1150.                 LD D,(HL)
  1151.                 LD A,B
  1152.                 OR C
  1153.                 OR D
  1154.                 OR E
  1155.                 JR NZ,ENT_DI0
  1156.                 LD DE,(ROOTCLS)
  1157.                 LD BC,(ROOTCLS+2)
  1158. ENT_DI0         LD (TEK_DIR),DE
  1159.                 LD (TEK_DIR+2),BC
  1160.                 POP DE
  1161. INIT_TEKDIR     PUSH DE
  1162.                 PUSH IY
  1163.                 LD IYL,INTERNAL
  1164.                 CALL INIRTSC
  1165.                 POP IY
  1166.                 POP DE
  1167.                 RET
  1168.  
  1169. ;ОТДАЧА КОРОТКОГО ИМЕНИ ФАЙЛА, ЕСЛИ ДЛИННОЕ ОТСУСТВУЕТ
  1170. NO_LNG          POP DE
  1171.                 LD BC,8
  1172.                 LDIR
  1173.                 EX DE,HL
  1174. NO_LNG2         DEC HL
  1175.                 LD A,(HL)
  1176.                 CP " "
  1177.                 JR Z,NO_LNG2
  1178.                 INC HL
  1179.                 LD A,(DE)
  1180.                 EX DE,HL
  1181.                 CP " "
  1182.                 JR Z,NO_LNG1
  1183.                 EX DE,HL
  1184.                 LD (HL),"."
  1185.                 INC HL
  1186.                 EX DE,HL
  1187.                 LDI
  1188.                 LDI
  1189.                 LDI
  1190. NO_LNG1         EX DE,HL
  1191.                 LD (HL),0
  1192.                 LD A,L
  1193.                 LD (RREG_A),A
  1194.                 POP HL
  1195.                 RET
  1196.  
  1197. GETLNG8         POP IY
  1198.                 LD DE,CPU6
  1199.                 ADD HL,DE
  1200.                 LD DE,(RREG_L)
  1201.                 LD BC,0X100
  1202.                 JP LDIR_BYTES
  1203.  
  1204. ;ОТДАЧА ДЛИННОГО ИМЕНИ ФАЙЛА
  1205. GET_LONGNAME    LD A,IYL
  1206.                 AND A
  1207.                 JR NZ,GETLNG9
  1208.                 PUSH IY
  1209.                 LD IYL,INTERNAL
  1210.                 LD HL,GETLNG8
  1211.                 PUSH HL
  1212.                 LD HL,BUF_256
  1213. GETLNG9         PUSH HL
  1214.                 PUSH HL
  1215.                 CALL READ_DIR
  1216.                 BIT 0,E
  1217.                 JR Z,NO_LNG
  1218.                 EXX
  1219.                 LD C,0
  1220.                 EXX
  1221. GETLNG2         DEC BC
  1222.                 CALL GETRZAP
  1223.                 LD A,(HL)
  1224.                 INC HL
  1225.                 EXX
  1226.                 BIT 6,C
  1227.                 POP HL
  1228.                 JR NZ,GETLNGE+1
  1229.                 LD C,A
  1230.                 EXX
  1231.                 LD A,5
  1232.                 CALL GETLNG1
  1233.                 AND A
  1234.                 JR Z,GETLNGE
  1235.                 INC HL
  1236.                 INC HL
  1237.                 INC HL
  1238.                 LD A,6
  1239.                 CALL GETLNG1
  1240.                 AND A
  1241.                 JR Z,GETLNGE
  1242.                 INC HL
  1243.                 INC HL
  1244.                 LD A,2
  1245.                 CALL GETLNG1
  1246.                 AND A
  1247.                 JR Z,GETLNGE
  1248.                 EXX
  1249.                 PUSH HL
  1250.                 EXX
  1251.                 JR GETLNG2
  1252.  
  1253. GETLNGE         EXX
  1254.                 LD (HL),0
  1255.                 LD A,L
  1256.                 LD (RREG_A),A
  1257.                 EXX
  1258.                 POP HL
  1259.                 RET
  1260.  
  1261. GETLNG1         EXX
  1262.                 LD B,A
  1263.                 EXX
  1264.                 LD D,(HL)
  1265.                 INC HL
  1266.                 LD E,(HL)
  1267.                 INC HL
  1268.                 LD A,D
  1269.                 OR E
  1270.                 RET Z
  1271.                 LD A,E
  1272.                 AND A
  1273.                 JR NZ,GETLNG3
  1274.                 LD A,D
  1275.                 CP 0X80
  1276.                 JR C,GETLNG5
  1277.                 LD D,0X5F
  1278.                 JR GETLNG5
  1279.  
  1280. GETLNG3         CP 4
  1281.                 LD A,0X5F
  1282.                 JR NZ,GETLNG5
  1283.                 LD A,D
  1284.                 LD E,0XEF
  1285.                 LD D,0X5F
  1286.                 CP 1
  1287.                 JR Z,GETLNG4
  1288.                 LD E,0XA0
  1289.                 CP 0X51
  1290.                 JR Z,GETLNG4
  1291.                 SUB 0X10
  1292.                 LD E,0X80
  1293.                 JR NC,GETLNG6
  1294.                 LD A,D
  1295.                 JR GETLNG5
  1296.  
  1297. GETLNG6         CP 0X30
  1298.                 JR C,GETLNG4
  1299.                 LD E,0XB0
  1300.                 CP 0X40
  1301.                 JR C,GETLNG4
  1302.                 LD A,D
  1303.                 JR GETLNG5
  1304.  
  1305. GETLNG4         ADD A,E
  1306. GETLNG5         EXX
  1307.                 LD (HL),A
  1308.                 INC HL
  1309.                 DEC B
  1310.                 EXX
  1311.                 RET Z
  1312.                 JR GETLNG1+3
  1313. ;401,410-44F,451
  1314.  
  1315. ;НА ВХОДЕ:   DE=СПИСОК РАСШИРЕНИЙ
  1316. ;            HL=АДРЕС ОПИСАТЕЛЯ ФАЙЛА
  1317. ;НА ВЫХОДЕ:  A=НОМЕР РАСШИРЕНИЯ
  1318. CP_EXT          LD C,0
  1319. CPETR2          LD A,(DE)
  1320.                 AND A
  1321.                 JR Z,CPETR1
  1322.                 INC C
  1323.                 PUSH DE
  1324.                 PUSH HL
  1325.                 CALL COMPARF
  1326.                 POP HL
  1327.                 POP DE
  1328.                 LD A,C
  1329.                 RET Z
  1330.                 INC DE
  1331.                 INC DE
  1332.                 INC DE
  1333.                 JR CPETR2
  1334.  
  1335. CPETR1          DEC A
  1336.                 RET
  1337.  
  1338. COMPARF         PUSH DE
  1339.                 LD DE,8
  1340.                 ADD HL,DE
  1341.                 POP DE
  1342. COMPARF1        LD A,(DE)
  1343.                 CP (HL)
  1344.                 RET NZ
  1345.                 INC HL
  1346.                 INC DE
  1347.                 LD A,(DE)
  1348.                 CP (HL)
  1349.                 RET NZ
  1350.                 INC HL
  1351.                 INC DE
  1352.                 LD A,(DE)
  1353.                 CP (HL)
  1354.                 RET
  1355.  
  1356. FIND_FILEITEM   PUSH IY
  1357.                 LD IYL,INTERNAL
  1358.                 CALL INIRTSC
  1359.                 EVOPORT WIN_P3,RAM_TEMP2
  1360.                 LD HL,CPU3
  1361.                 LD DE,CPU3+1
  1362.                 LD BC,0X3FFF
  1363.                 LD (HL),L
  1364.                 LDIR
  1365.                 LD HL,0
  1366.                 LD (KOLFIND),HL                 ;НАЙДЕННЫХ ФАЙЛОВ
  1367.                 LD HL,CPU3
  1368.                 LD (ADR_SKLAD),HL               ;АДРЕС СКЛАДИРОВАНИЯ
  1369.                 LD HL,CPU3+0X1000
  1370.                 LD (ADR_SKLAD_NAME),HL          ;АДРЕС СКЛАДИРОВАНИЯ ПЕРВОГО СИМВОЛА ИМЕНИ НАЙДЕННОГО И ЕГО ФЛАГА
  1371.                 LD BC,0XFFFF
  1372.                 EXX
  1373.                 LD BC,0
  1374.                 LD A,(TEK_LVL)
  1375.                 AND A
  1376.                 EXX
  1377.                 JR NZ,FINDF2
  1378.                 LD A,(CAL_FAT)
  1379.                 CP 2
  1380.                 JR NC,FINDF2
  1381.                 EXX
  1382.                 LD BC,(ROOTZAP)
  1383.                 EXX
  1384. FINDF2          INC BC
  1385.                 CALL RDDIRSC
  1386.                 LD A,C
  1387.                 AND 0X0F
  1388.                 REPT 4
  1389.                 ADD A,A
  1390.                 ENDM
  1391.                 LD E,A
  1392.                 LD D,0
  1393.                 EX DE,HL
  1394.                 ADD HL,HL
  1395.                 ADD HL,DE
  1396.                 EXX
  1397.                 DEC BC
  1398.                 LD A,B
  1399.                 OR C
  1400.                 EXX
  1401.                 JR Z,FINDF3
  1402.                 LD A,(HL)
  1403.                 AND A
  1404.                 JR Z,FINDF3
  1405.                 CP "."
  1406.                 JR NZ,FINDF21
  1407.                 INC HL
  1408.                 LD A,(HL)
  1409.                 DEC HL
  1410.                 CP " "
  1411.                 JR Z,FINDF2
  1412. FINDF21         CP 0XE5                         ;ЕСЛИ УДАЛЕНО
  1413.                 JR Z,FINDF2                     ;ТО ПЕРЕХОДИМ НА СЛЕДУЮЩИЙ ОПИСАТЕЛЬ
  1414.                 LD DE,0X0B                      ;НУЖЕН ФЛАГОВЫЙ БАЙТ ОПИСАТЕЛЯ
  1415.                 ADD HL,DE                       ;ПОЛУЧИЛИ АДРЕС ФЛАГОВОГО БАЙТА
  1416.                 LD A,(HL)                       ;ВЗЯЛИ ФЛАГОВЫЙ БАЙТ
  1417.                 SBC HL,DE
  1418.                 CP 0X0F
  1419.                 JR Z,FINDF2
  1420.                 AND 0X10                        ;ПРОВЕРКА ЭТО ФАЙЛ ИЛИ ДИРА
  1421.                 JR NZ,FINDF1
  1422.                 LD A,(EXT4FOUND)
  1423.                 AND A
  1424.                 PUSH DE
  1425.                 LD DE,EXT4FOUND
  1426.                 PUSH BC
  1427.                 CALL NZ,CP_EXT
  1428.                 POP BC
  1429.                 POP DE
  1430.                 JR NZ,FINDF4
  1431. FINDF1          EX DE,HL
  1432.                 ADD HL,DE
  1433.                 LD A,(HL)
  1434.                 EX AF,AF'
  1435.                 LD HL,(ADR_SKLAD)               ;ДЛЯ ДИРЫ ПРОВЕРЯТЬ БОЛЬШЕ НЕ НАДО
  1436.                 LD (HL),C
  1437.                 INC HL
  1438.                 LD (HL),B                       ;ПОЛОЖИЛИ НОМЕР ДИРЫ В ТАБЛИЧКУ
  1439.                 INC HL
  1440.                 LD (ADR_SKLAD),HL
  1441.                 LD HL,(KOLFIND)
  1442.                 INC HL                          ;+1 НАЙДЕННЫХ ФАЙЛОВ
  1443.                 LD (KOLFIND),HL
  1444.                 LD HL,(ADR_SKLAD_NAME)
  1445.                 EX AF,AF'
  1446.                 LD (HL),A
  1447.                 INC HL
  1448.                 LD A,(DE)
  1449.                 LD (HL),A
  1450.                 INC HL
  1451.                 LD (ADR_SKLAD_NAME),HL
  1452. FINDF4          LD A,(ADR_SKLAD+1)
  1453.                 CP HIGH (CPU3)+0X10
  1454.                 JR C,FINDF2                     ;НЕ БОЛЕЕ 2048 ДИРОВ/ФАЙЛОВ В ТЕКУЩЕЙ ДИРЕКТОРИИ
  1455. FINDF3          LD HL,(KOLFIND)
  1456.                 POP IY
  1457.                 LD A,IYL
  1458.                 AND A
  1459.                 JR NZ,FINDF5
  1460.                 LD A,RAM_TEMP2
  1461.                 LD (RREG_A),A
  1462.                 LD (RREG_C),HL
  1463. FINDF5          LD (KOL_FOUNDED),HL
  1464.                 LD B,H
  1465.                 LD C,L
  1466.                 XOR A
  1467.                 RET
  1468.  
  1469. SET_MASK_EXT    LD A,(RREG_A)
  1470.                 AND A
  1471.                 JR NZ,SET_MASK_EXT1
  1472.                 LD (EXT4FOUND),A
  1473.                 RET
  1474.  
  1475. SET_MASK_EXT1   LD HL,(RREG_L)
  1476.                 LD DE,BUF_256-CPU6
  1477.                 LD BC,0X10*3+1
  1478.                 CALL LDIR_BYTES
  1479.                 LD HL,BUF_256
  1480.                 LD DE,EXT4FOUND
  1481.                 LD BC,0X10FF
  1482. SET_MASK_EXT2   LD A,(HL)
  1483.                 AND A
  1484.                 JR Z,SET_MASK_EXT3
  1485.                 LDI
  1486.                 LDI
  1487.                 LDI
  1488.                 DJNZ SET_MASK_EXT2
  1489. SET_MASK_EXT3   XOR A
  1490.                 LD (DE),A
  1491.                 RET
  1492.  
  1493. LD_FILE6        PUSH AF
  1494.                 POP HL
  1495.                 LD (RREG_F),HL
  1496. LD_FILE8        EXX
  1497.                 LD (SAVE_IY),DE         ;IY
  1498.                 EXX
  1499.                 RET
  1500.  
  1501. ;IXL-L-КОЛИЧЕСТВО СЕКТОРОВ ДЛЯ ЗАГРУЗКИ
  1502. ;IXH-H-РАЗМЕР КЛАСТЕРА
  1503. ;IYL-E-
  1504. ;IYH-D-СМЕЩЕНИЕ В КЛАСТЕРЕ
  1505. READ_FILE       EX AF,AF'
  1506.                 LD A,IYL
  1507.                 DEC A
  1508.                 JR Z,LD_FILE00
  1509.                 LD IYL,INT4EXT
  1510.                 LD HL,LD_FILE6
  1511.                 PUSH HL
  1512.                 LD HL,(RREG_L)                  ;АДРЕС ЗАГРУЗКИ
  1513.                 EXX
  1514.                 LD DE,(SAVE_IY)                 ;СМЕЩЕНИЕ В КЛАСТЕРЕ
  1515.                 LD A,(BYTSSEC)
  1516.                 LD H,A                          ;КОЛИЧЕСТВО СЕКТОРОВ В КЛАСТЕРЕ
  1517.                 LD A,(RREG_A)
  1518.                 LD L,A                          ;КОЛИЧЕСТВО СЕКТОРОВ ДЛЯ ЗАГРУЗКИ
  1519.                 EXX
  1520.                 JR LD_FILE0
  1521.  
  1522. LD_FILE00       EXX
  1523.                 LD DE,(SAVE_IY)                 ;СМЕЩЕНИЕ В КЛАСТЕРЕ
  1524.                 LD HL,LD_FILE8
  1525.                 PUSH HL
  1526.                 LD A,(BYTSSEC)                  ;КОЛИЧЕСТВО СЕКТОРОВ В КЛАСТЕРЕ
  1527.                 LD H,A                          ;КОЛИЧЕСТВО СЕКТОРОВ В КЛАСТЕРЕ
  1528.                 EX AF,AF'
  1529.                 LD L,A                          ;КОЛИЧЕСТВО СЕКТОРОВ ДЛЯ ЗАГРУЗКИ
  1530.                 EXX
  1531. ;IXL-L-КОЛИЧЕСТВО СЕКТОРОВ ДЛЯ ЗАГРУЗКИ
  1532. ;IXH-H-РАЗМЕР КЛАСТЕРА
  1533. ;IYL-E-
  1534. ;IYH-D-СМЕЩЕНИЕ В КЛАСТЕРЕ
  1535. LD_FILE0        LD DE,(AFILCLS)
  1536.                 LD BC,(AFILCLS+2)               ;ТЕКУЩИЙ НОМЕР КЛАСТЕРА
  1537.                 PUSH BC
  1538.                 PUSH DE
  1539.                 PUSH HL
  1540.                 CALL REALSEC                    ;ПЕРЕВЕЛИ НОМЕР КЛАСТЕРА В НОМЕР СЕКТОРА
  1541.                 EXX
  1542.                 LD A,D                  ;IYH
  1543.                 EXX
  1544.                 LD L,A
  1545.                 LD H,0
  1546.                 ADD HL,DE
  1547.                 EX DE,HL
  1548.                 JR NC,LD_FILE1
  1549.                 INC BC                          ;BCDE=НОМЕР СЕКТОРА ОТКУДА ГРУЗИТЬ
  1550. LD_FILE1        EXX
  1551.                 LD A,L                  ;IXL
  1552.                 CP H                    ;IXH
  1553.                 JP C,LD_FILE2
  1554.                 LD A,H                  ;IXH
  1555. LD_FILE2        ADD A,D                 ;IYH
  1556.                 CP H                    ;IXH
  1557.                 LD A,L                  ;IXL
  1558.                 JP C,LD_FILE5
  1559.                 LD A,H                  ;IXH
  1560.                 SUB D                   ;IYH
  1561. LD_FILE5        LD E,A                  ;IYL,A  ;СКОЛЬКО СЕКТОРОВ СЕЙЧАС ГРУЗИМ
  1562.                 EXX
  1563.                 POP HL                          ;ВОССТАНОВИЛИ АДРЕС ЗАГРУЗКИ
  1564. ;               LD IYL,INT4EXT
  1565.                 CALL TO_DRV
  1566.                 DB _DEV_READ
  1567.                 LD A,IYL
  1568.                 DEC A
  1569.                 JR Z,LD_FILE7
  1570.                 LD (RREG_L),HL
  1571. LD_FILE7        POP DE
  1572.                 POP BC                          ;ВОССТАНОВИЛИ НОМЕР КЛАСТЕРА
  1573.                 EXX
  1574.                 LD A,D                  ;IYH
  1575.                 ADD A,E                 ;IYL
  1576.                 CP H                    ;IXH
  1577.                 JP C,LD_FILE3
  1578.                 SUB H                   ;IXH
  1579. LD_FILE3        LD D,A                  ;IYH,A
  1580.                 EXX
  1581.                 JP C,LD_FILE4
  1582.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС ЗАГРУЗКИ
  1583.                 PUSH IY
  1584.                 LD IYL,INTERNAL
  1585.                 CALL RDFATZP                    ;ПРОЧИТАЛИ НОМЕР СЛЕДУЮЩЕГО КЛАСТЕРА
  1586.                 POP IY
  1587.                 LD (AFILCLS),DE
  1588.                 LD (AFILCLS+2),BC
  1589.                 CALL LST_CLS                    ;ПРОВЕРИЛИ, А МОЖЕТ ЭТО ПОСЛЕДНИЙ КЛАСТЕР?
  1590.                 POP HL                          ;ВОССТАНОВИЛИ АДРЕС ЗАГРУЗКИ
  1591.                 RET C                           ;ЕСЛИ ПОСЛЕДНИЙ, ВЫХОДИМ
  1592. LD_FILE4        EXX
  1593.                 LD A,L                  ;IXL
  1594.                 SUB E                   ;IYL
  1595.                 EXX
  1596.                 RET Z
  1597.                 EXX
  1598.                 LD L,A                  ;IXL,A
  1599.                 EXX
  1600.                 JP NZ,LD_FILE0
  1601.                 RET
  1602.  
  1603. OPEN_FILE       LD A,IYL
  1604.                 AND A
  1605.                 JR NZ,OPENFILE1
  1606.                 LD HL,EOPEN_FILE
  1607.                 PUSH HL
  1608. OPENFILE1       PUSH IY
  1609.                 LD IYL,INTERNAL
  1610.                 CALL READ_DIR
  1611.                 LD DE,FILE_SRC
  1612.                 LD BC,0X20
  1613.                 PUSH DE
  1614.                 LDIR
  1615.                 LD HL,0
  1616.                 LD A,(CAL_FAT)
  1617.                 CP 2
  1618.                 JR C,OPENFILE2                  ;ЕСЛИ ЭТО НЕ FAT32 ТО СТАРШИЕ 16 БИТ ОБНУЛЯЕМ
  1619.                 LD HL,(FILE_SRC+0X14)
  1620. OPENFILE2       LD (AFILCLS+2),HL
  1621.                 LD HL,(FILE_SRC+0X1A)
  1622.                 LD (AFILCLS),HL
  1623.                 LD HL,(TEK_ZAP)
  1624.                 LD (NUM_FILE_SRC),HL
  1625.                 XOR A
  1626.                 LD H,A
  1627.                 LD L,A
  1628.                 LD (SAVE_IY),HL
  1629.                 POP HL
  1630.                 POP IY
  1631.                 RET
  1632.  
  1633. EOPEN_FILE      PUSH AF
  1634.                 POP HL
  1635.                 LD (RREG_F),HL
  1636.                 RET
  1637.  
  1638. EFINDNAME       LD HL,(TEK_ZAP)
  1639.                 LD (RREG_C),HL
  1640.                 PUSH AF
  1641.                 POP HL
  1642.                 LD (RREG_F),HL
  1643.                 RET
  1644.  
  1645. FIND_NAME       LD A,IYL
  1646.                 AND A
  1647.                 JR NZ,FINDNAME01
  1648.                 PUSH HL
  1649.                 LD HL,(RREG_L)
  1650.                 LD DE,BUF_256-CPU6
  1651.                 LD BC,0X10
  1652.                 CALL LDIR_BYTES
  1653.                 LD HL,EFINDNAME
  1654.                 EX (SP),HL
  1655. FINDNAME01      PUSH IY
  1656.                 LD IYL,INTERNAL
  1657.                 LD HL,BUF_256
  1658.                 LD DE,FB_EXT
  1659.                 LD BC,0X8FF
  1660.                 LD A,(HL)
  1661.                 CP "."
  1662.                 JR NZ,FINDNAME02
  1663.                 LDI
  1664.                 LDI
  1665.                 LD B,6
  1666. FINDNAME02      LD A,(HL)
  1667.                 CP "!"
  1668.                 JR C,FINDNAME03
  1669.                 CP "."
  1670.                 JR Z,FINDNAME12
  1671.                 LDI
  1672.                 DJNZ FINDNAME02
  1673.                 LD A,(HL)
  1674.                 CP "!"
  1675.                 JR C,FINDNAME06
  1676.                 INC HL
  1677.                 JR FINDNAME06
  1678.  
  1679. FINDNAME12      INC HL
  1680. FINDNAME03      LD A," "
  1681. FINDNAME05      LD (DE),A
  1682.                 INC DE
  1683.                 DJNZ FINDNAME05
  1684. FINDNAME06      LD B,3
  1685. FINDNAME08      LD A,(HL)
  1686.                 CP "!"
  1687.                 JR C,FINDNAME07
  1688.                 LDI
  1689.                 DJNZ FINDNAME08
  1690.                 CALL POSTF02
  1691.                 JR FINDNAME11
  1692.  
  1693. FINDNAME07      LD A," "
  1694. FINDNAME09      LD (DE),A
  1695.                 INC DE
  1696.                 DJNZ FINDNAME09
  1697.                 CALL POSTF02
  1698.                 JR FINDNAME11
  1699.  
  1700. FINDNAME10      CALL NXTLEGZ
  1701. FINDNAME11      PUSH HL
  1702.                 CALL CMP_NAME
  1703.                 POP HL
  1704.                 JR Z,FINDNAME13
  1705.                 LD A,(HL)
  1706.                 AND A
  1707.                 JR NZ,FINDNAME10
  1708.                 SCF
  1709. FINDNAME13      POP IY
  1710.                 RET
  1711.  
  1712. CMP_NAME        LD DE,FB_EXT
  1713. ICMP_NAME       LD B,0X0B
  1714. CMP_NAME_B      LD A,(DE)
  1715.                 CP "a"
  1716.                 JR C,CMPNAME01
  1717.                 CP "{"
  1718.                 JR NC,CMPNAME01
  1719.                 AND 0XDF
  1720. CMPNAME01       CP (HL)
  1721.                 RET NZ
  1722.                 INC DE
  1723.                 INC HL
  1724.                 DJNZ CMP_NAME_B
  1725.                 XOR A
  1726.                 RET
  1727.