;LAST UPDATE: 30.08.2017 savelij
 
 
 
LOAD4FLASH      LD HL,ROMS
 
                LD DE,CMP4ROMS
 
                JR FATBOOT4
 
 
 
COPYIMAGE       LD HL,IMAGES
 
                LD DE,CMP4IMAGE
 
                JR FATBOOT4
 
 
 
;ВЫБОР УСТРОЙСТВА ДЛЯ ЗАГРУЗКИ
 
FATBOOT         LD HL,HOBETA
 
                LD DE,CMP4HOBETA
 
FATBOOT4        DI
 
                LD (GDE_EXT_FILES),HL
 
                LD (CMP_FOUNDED),DE
 
                LD HL,ADRTBLDIRL
 
                LD (DIR_LEVEL),HL               ;УСТАНОВИЛИ ДНО СТЕКА СОХРАНЕННИЙ ОКОШЕК
 
                LD HL,FLAGS
 
                SET B_RUN_FAT_DSK,(HL)          ;РАБОТАТЬ БУДЕМ С FAT
 
                CALL COM_DEV
 
                DB Devfind                      ;СКАНИРОВАНИЕ УСТРОЙСТВ
 
                JP C,_STUPID                    ;ОШИБКА, НИ ОДНОГО РАЗДЕЛА НЕ НАЙДЕНО
 
                LD B,E                          ;СЧЕТЧИК КОЛИЧЕСТВА НАЙДЕННЫХ РАЗДЕЛОВ
 
                LD IX,SEL_FAT_DEV               ;АДРЕС ОПИСАТЕЛЯ ОКНА ВЫБОРА РАЗДЕЛОВ
 
                LD (IX+0X10),E                  ;КОЛИЧЕСТВО ПУНКТОВ В ОКНЕ
 
                INC E
 
                INC E
 
                LD (IX+2),E                     ;УСТАНОВИЛИ ВЫСОТУ ВЫВОДИМОГО ОКНА
 
                LD DE,6                         ;ШАГ ПО ТАБЛИЦЕ НАЙДЕННЫХ РАЗДЕЛОВ -2
 
                EXX
 
                LD HL,TXT_FAT_SEL
 
                LD DE,SEL_FAT_DRV               ;АДРЕС ГДЕ БУДЕТ ФОРМИРОВАТЬСЯ ТЕКСТ ОКНА ВЫБОРА РАЗДЕЛОВ
 
                LD BC,ETXT_FAT_SEL-TXT_FAT_SEL
 
                LDIR
 
                EX DE,HL
 
                EXX
 
FATBOOT1        EXX
 
                LD (HL),0X0D
 
                INC HL
 
                LD (HL),3
 
                INC HL
 
                EXX
 
                LD A,(HL)                       ;ВЗЯЛИ НОМЕР РАЗДЕЛА
 
                INC HL
 
                LD C,(HL)                       ;MASTER ИЛИ SLAVE
 
                INC HL
 
                ADD A,C
 
                ADD A,C
 
                SUB 4                           ;-4, ИБО ДИСКОВОДЫ НЕ УЧИТЫВАЮТСЯ
 
                ADD A,A
 
                ADD A,A
 
                ADD A,A
 
                ADD A,A                         ;УМНОЖЕНО НА 16
 
                EXX
 
                EX DE,HL
 
                LD HL,TXT4MENU_DEVICE           ;АДРЕС ТАБЛИЦЫ ТЕКСТА О РАЗДЕЛАХ
 
                LD C,A
 
                LD B,0
 
                ADD HL,BC                       ;ПОЛУЧИЛИ АДРЕС ОТКУДА ТЕКСТ ВЗЯТЬ
 
                LD BC,0X10                      ;ДЛИНА ПЕРЕНОСА 16 БАЙТ
 
                EXX
 
                LD A,L
 
                EXX
 
                RRCA
 
                RRCA
 
                RRCA
 
                AND 0X1F
 
                ADD A,"E"                       ;БУКВА НАЙДЕННОГО УСТРОЙСТВА
 
                LD (DE),A
 
                INC DE
 
                LDIR                            ;ПЕРЕНОС ТЕКСТА ИЗ ВЫБРАННОЙ ТАБЛИЦЫ
 
                EXX
 
                LD A,(HL)                       ;ТИП РАЗДЕЛА
 
                EXX
 
                LD C,A
 
                ADD A,A
 
                ADD A,A
 
                ADD A,C                         ;УМНОЖЕННО НА 5
 
                LD HL,TXT4MENU_TYPE             ;АДРЕС ТАБЛИЦЫ ТЕКСТА ТИПОВ РАЗДЕЛОВ
 
                LD C,A
 
                ADD HL,BC
 
                LD C,5
 
                LDIR                            ;ПЕРЕНОС ТЕКСТА ИЗ ВЫБРАННОЙ ТАБЛИЦЫ
 
                EX DE,HL
 
                EXX
 
                ADD HL,DE
 
                DJNZ FATBOOT1
 
                EXX
 
                LD (HL),0
 
                INC HL
 
                LD B,(IX+2)
 
                DEC B
 
                DEC B
 
                LD C,B
 
                LD A,"e"
 
                LD (HL),B
 
                INC HL
 
FATBOOT3        LD (HL),A                       ;ФОРМИРОВАНИЕ ТАБЛИЦЫ ГОРЯЧИХ КЛАВИШ
 
                INC HL
 
                INC A
 
                DJNZ FATBOOT3
 
                LD (SELFATDEVEXE),HL            ;ПОЛОЖИЛИ АДРЕС ТАБЛИЦЫ АДРЕСОВ ВЫЗОВА ВЫБРАННОГО
 
                LD B,C
 
FATBOOT2        LD (HL),LOW (SEL_FAT)           ;ФОРМИРОВАНИЕ ТАБЛИЦЫ АДРЕСОВ ВЫЗЫВОВ
 
                INC HL
 
                LD (HL),HIGH (SEL_FAT)
 
                INC HL
 
                DJNZ FATBOOT2
 
                LD A,C
 
                EXX
 
                DEC A
 
                JR Z,SEL_FAT
 
                CALL WINW                       ;ВЫВЕЛИ СФОРМИРОВАННОЕ ОКНО
 
                JP _RULILKA                     ;ВОЗВРАЩАЕМСЯ К ОБЩЕМУ УПРАВЛЕНИЮ
 
 
 
;ПЕРЕКЛЮЧЕНИЕ НА УСТРОЙСТВА И ВЫВОД НАЙДЕННОГО НА НЕМ
 
SEL_FAT         DI
 
                LD A,(IX+0X12)                  ;ВЗЯЛИ НОМЕР ВЫБРАННОГО УСТРОЙСТВА
 
                CALL COM_DEV
 
                DB Set_vol                      ;ВЫБРАЛИ УСТРОЙСТВО ПО НОМЕРУ
 
                CALL COM_FAT
 
                DB Wc_fat                       ;ИНИЦИАЛИЗАЦИЯ ФАТ ДРАЙВЕРА ДЛЯ ВЫБРАННОГО УСТРОЙСТВА
 
                CALL SEARCH_FILE
 
                
 
                LD HL,1
 
                AND A
 
                SBC HL,BC                       ;НАЙДЕННО ЧТО-ТО ОДНО?
 
                JR NZ,SEL_FAT1                  ;ЕСЛИ НАЙДЕНО >1, ТО ПРОДОЛЖАЕМ
 
                PUSH BC                         ;СОХРАНИЛИ КОЛИЧЕСТВО НАЙДЕННОГО
 
                LD BC,(ADR_CAT)                 ;ВЗЯЛИ НОМЕР ЕДИНСТВЕННОГО НАЙДЕННОГО
 
                LD A,6
 
                CALL COM_FAT
 
                DB Positf
 
                CALL COM_FAT
 
                DB Getfzap                      ;ПОЛУЧИЛИ ОПИСАТЕЛЬ
 
                POP BC                          ;ВЕРНУЛИ КОЛИЧЕСТВО НАЙДЕННОГО
 
                LD DE,0X0B
 
                ADD HL,DE
 
                LD A,(HL)                       ;ВЗЯЛИ ФЛАГОВЫЙ БАЙТ ТОГО ЧТО НАШЛИ
 
                AND 0X10
 
                LD HL,0                         ;ЕСЛИ ЗАПУСКАЕМ, ТО НОМЕР 0 ИЗ НАЙДЕННОГО
 
                JR Z,RUN_HOB1                   ;ЕСЛИ ЭТО ФАЙЛ СРАЗУ ЗАПУСКАЕМ
 
SEL_FAT1        LD IX,FAT_FILES                 ;ЕСЛИ ДИРА, ТО ВЫВОДИМ В ОКНО
 
                JP OUT_HOB
 
 
 
;ЗАПУСК ВЫБРАННОГО КОДОВОГО ФАЙЛА ИЗ HOBETA ФАЙЛА
 
RUN_HOB         DI
 
                CALL SHUT2AY                    ;БУМКАЛКА В AY
 
                LD L,(IX+0X12)
 
                LD H,(IX+0X13)
 
RUN_HOB1        LD DE,ADR_CAT
 
                ADD HL,HL
 
                ADD HL,DE                       ;ОТКУДА ИМЯ ФАЙЛА ВЗЯТЬ
 
                LD C,(HL)
 
                INC HL
 
                LD B,(HL)                       ;ПОЛУЧИЛИ ТЕКУЩИЙ ВЫБРАННЫЙ НОМЕР
 
                LD A,6
 
                CALL COM_FAT
 
                DB Positf                       ;УСТАНОВКА ВНУТРЕННЕГО УКАЗАТЕЛЯ FAT ДРАЙВЕРА
 
                CALL COM_FAT
 
                DB Getfzap                      ;ПОЛУЧИЛИ ОПИСАТЕЛЬ ПО УСТАНОВЛЕННОМУ НОМЕРУ
 
                LD DE,0X0B                      ;НУЖЕН БАЙТ ПО СМЕЩЕНИЮ
 
                ADD HL,DE
 
                LD A,(HL)                       ;ИЗ ЭТОГО БАЙТА НУЖЕН ОДИН БИТ
 
                SBC HL,DE
 
                AND 0X10                        ;ПРОВЕРИЛИ
 
                JR Z,GO_RUN_HOB                 ;ЕСЛИ ЭТО ФАЙЛ, ТО ЗАПУСКАЕМ КОДОВЫЙ БЛОК
 
                PUSH BC                         ;СОХРАНИЛИ НОМЕР
 
                CALL COM_FAT
 
                DB Ent_dir                      ;ВОЙТИ/ВЫЙТИ В/ИЗ ДИРЕКТОРИЙ
 
                POP BC                          ;ВОССТАНОВИЛИ ТЕКУЩИЙ НОМЕР
 
                LD A,D                          ;БУДЕМ ПРОВЕРЯТЬ ПЕРВЫЙ СИМВОЛ ИМЕНИ ПРЕДЫДУЩЕГО ОПИСАТЕЛЯ
 
                LD HL,0                         ;АДРЕС СТЕКА ОКОННЫХ СОХРАНЕНИЙ ДЛЯ ХОЖДЕНИЯ ПО ДИРАМ
 
DIR_LEVEL       EQU $-2
 
                CP "."                          ;ЕСЛИ ПЕРВЫЙ СИМВОЛ ИМЕНИ НЕ ".", ТО СОХРАНЯЕМ ТЕКУЩИЕ ЗНАЧЕНИЯ ОКОШКА И  
 
                JR NZ,SNYT0                     ;ВХОДИМ В ДИРУ
 
                INC HL                          ;ПРИ ВЫХОДЕ ИЗ ДИРЫ ВОЗВРАЩАЕМ ДАННЫЕ ПРЕДЫДУЩЕГО ОКНА
 
                LD A,(HL)
 
                INC HL
 
                LD E,(HL)
 
                INC HL
 
                LD D,(HL)
 
                LD (DIR_LEVEL),HL               ;СОХРАНИЛИ ИЗМЕНИВШИЙСЯ АДРЕС СТЕКА ДИРЕКТОРИЙ
 
                LD (IX+0X12),E
 
                LD (IX+0X13),D
 
                LD (IX+0X0F),A
 
                CALL SEARCH_FILE
 
                LD (IX+0X10),C
 
                LD (IX+0X11),B                  ;ВОССТАНОВИЛИ ДАННЫЕ ОКНА ПРЕДЫДУЩЕЙ ДИРЫ
 
                JP REOUT_HOB                    ;ВЫВЕЛИ НОВОЕ СОДЕРЖИМОЕ ОКНА
 
 
 
;ПРИ ВХОДЕ В ДИРУ СОХРАНЕНИЕ ТЕКУЩИХ ДАННЫХ ОКНА
 
SNYT0           LD D,(IX+0X13)
 
                LD E,(IX+0X12)
 
                LD A,(IX+0X0F)
 
                LD C,(IX+0X10)
 
                LD B,(IX+0X11)
 
                LD (HL),D
 
                DEC HL
 
                LD (HL),E
 
                DEC HL
 
                LD (HL),A
 
                DEC HL
 
                LD (DIR_LEVEL),HL               ;СОХРАНИЛИ ИЗМЕНИВШИЙСЯ АДРЕС СТЕКА
 
                CALL SEARCH_FILE
 
                JP OUT_HOB
 
 
 
GO_RUN_HOB      PUSH HL                         ;СОХРАНИЛИ АДРЕС ОПИСАТЕЛЯ
 
                LD DE,0X14                      ;ПЕРЕХОДИМ К СМЕЩЕНИЮ В ОПИСАТЕЛЕ ДЛЯ ПОЛУЧЕНИЯ
 
                ADD HL,DE                       ;СТАРШИХ 16 БИТ НОМЕРА КЛАСТЕРА НАЧАЛА ФАЙЛА ДЛЯ ЗАПУСКА
 
                LD C,(HL)
 
                INC HL
 
                LD B,(HL)                       ;ЗАБРАЛИ СТРАШИЕ 16 БИТ НОМЕРА КЛАСТЕРА
 
                LD E,5                          ;ТЕПЕРЬ ИДЕМ ЗА МЛАДШИМИ 16 БИТАМИ НОМЕРА КЛАСТЕРА
 
                ADD HL,DE
 
                LD E,(HL)
 
                INC HL
 
                LD D,(HL)                       ;ТЕПЕРЬ BCDE=ПОЛНЫЙ 32-Х БИТНЫЙ НОМЕР КЛАСТЕРА
 
                LD IXL,0
 
                CALL COM_FAT                    ;УСТАНОВКА ВНУТРЕННИХ ПАРАМЕТРОВ FAT ДРАЙВЕРА
 
                DB Load_file                    ;ДЛЯ ПОСЛЕДОВАТЕЛЬНОЙ ЗАГРУЗКИ
 
                POP HL
 
                LD DE,8
 
                ADD HL,DE
 
                LD A,(HL)
 
                CP "$"
 
                JP NZ,LOAD_IMAGE                ;ПЕРЕХОД НА ЗАГРУЗКУ ОБРАЗА
 
                CALL COM_DEV
 
                DB Kol_vol                      ;ЗАПРОС У МЕНЕДЖЕРА УСТРОЙСТВ О ТЕКУЩЕМ УСТРОЙСТВЕ
 
                LD A,D                          ;ВЗЯЛИ НОМЕР ТЕКУЩЕГО УСТРОЙСТВА
 
                ADD A,A
 
                ADD A,A
 
                ADD A,A
 
                LD C,A
 
                LD B,0
 
                ADD HL,BC
 
                LD A,(HL)                       ;ВЗЯЛИ ТИП РАЗДЕЛА
 
                SUB 4                           ;ПРОПУСКАЕМ ДИСКОВОДЫ
 
                EX AF,AF'                       ;НОМЕР ТЕКУЩЕГО УСТРОЙСТВА В "A"
 
                INC HL
 
                LD A,(HL)                       ;ВЗЯЛИ МЕСТОПОЛОЖЕНИЕ НОСИТЕЛЯ (MASTER/SLAVE)
 
                EX AF,AF'
 
                LD HL,0X5800
 
                LD DE,0X5801
 
                LD BC,0X02FF
 
                LD (HL),L
 
                LDIR                            ;ЗАЧЕРНИЛИ ЭКРАН ДЛЯ МАСКИРОВКИ ЗАПУСКАЛКИ
 
                LD HL,ERORDRV
 
                LD DE,0X4200
 
                LD B,1
 
                LDIR                            ;ПЕРЕНОС ПЕРЕМЕННЫХ ФАТА ДЛЯ MICROBOOT
 
                PUSH DE                         ;СЮДА ПЕРЕНОС КОДА И ЗАПУСК
 
                LD HL,MICROBOOT
 
                LD BC,END_MICROBOOT-MICROBOOT
 
                LDIR                            ;ПЕРЕНЕСЛИ ЗАПУСКАЛКУ
 
                PUSH AF
 
                LD HL,RUN_CODE
 
                LD DE,0X5D3B
 
                LD BC,ERUN_CODE-RUN_CODE
 
                LDIR
 
                CALL MEMSET                     ;ВЫСТАВИЛИ РЕЖИМ КОМПА
 
                CALL FOR_RUN
 
                POP AF
 
                RET                             ;ЗАПУСК ЗАПУСКАЛКИ :)
 
 
 
;ЗАГРУЗКА FDI ОБРАЗА
 
LOAD_FDI        LD A,PAGE_RAMDISK               ;СТРАНИЦА НАЧАЛА РАМДИСКА
 
                PUSH AF                         ;СОХРАНИЛИ НА СТЕКЕ
 
                CALL SET4MBPAGE                 ;ВКЛЮЧИЛИ ЕЕ
 
                LD HL,FDI_TABLE_CYL
 
                LD DE,FDI_TABLE_CYL+1
 
                LD BC,0X3FFF
 
                LD (HL),0
 
                LDIR                            ;ОЧИСТКА СТРАНИЦЫ С ОПИСАТЕЛЯМИ ДОРОЖЕК
 
                LD IXH,0XFF
 
                CALL LOAD1SECFDI                ;ПРИНУДИТЕЛЬНАЯ ЗАГРУЗКА ПЕРВОГО СЕКТОРА
 
                LD A,(0XC006)                   ;ВЗЯЛИ КОЛИЧЕСТВО СТОРОН
 
                DEC A
 
                LD A,(0XC004)                   ;ВЗЯЛИ КОИЧЕСТВО ДОРОЖЕК
 
                JR Z,LOADFDI1
 
                ADD A,A                         ;ЕСЛИ СТОРОН 2, ТО УМНОЖИЛИ КОЛИЧЕСТВО ДОРОЖЕК НА 2
 
LOADFDI1        LD C,A                          ;КОЛИЧЕСТВО ДОРОЖЕК
 
                LD HL,(0XC00A)
 
;               LD A,H
 
;               SRL A
 
;               ADC A,0
 
;               LD H,A
 
;               LD DE,(0XC008)
 
;               AND A
 
;               SBC HL,DE
 
                LD (START_DATA),HL
 
                LD DE,0X4000                    ;АДРЕС БУФЕРА НАЧАЛА ОПИСАТЕЛЕЙ ДОРОЖЕК
 
                LD HL,0XC00F                    ;АДРЕС НАЧАЛА ВЫБОРКИ ОПИСАТЕЛЕЙ ДОРОЖЕК В FDI ЗАГОЛОВКЕ
 
LOADFDI3        BIT 1,H
 
                CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
 
                LD A,(HL)                       ;БИТЫ 8-15 СМЕЩЕНИЯ ДОРОЖКИ ОТ НАЧАЛА
 
                AND 0X3F                        ;ВЗЯЛИ ДЛЯ 8-13 БИТЫ-СМЕЩЕНИЕ В БЛОКАХ В СТРАНИЦЕ
 
                LD (DE),A                       ;УЛОЖИЛИ СМЕЩЕНИЕ В БЛОКАХ В СТРАНИЦЕ
 
                LD A,(HL)                       ;ВЗЯЛИ БИТЫ 14-15
 
                INC HL                          ;СЛЕДУЮЩИЙ БАЙТ FDI ЗАГОЛОВКА
 
                INC D                           ;ЗДЕСЬ ПОЛОЖИМ СМЕЩЕНИЕ В СТРАНИЦАХ ДО НУЖНОЙ ДОРОЖКИ
 
                BIT 1,H
 
                CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
 
                LD B,A                          ;СОХРАНИЛИ НУЖНЫЕ 14-15 БИТЫ 
 
                LD A,(HL)                       ;ВЗЯЛИ 16-23 БИТЫ СМЕЩЕНИЯ ДОРОЖКИ ОТ НАЧАЛА
 
                RL B
 
                RLA
 
                RL B
 
                RLA
 
                LD (DE),A                       ;УКЛАДКА БИТОВ СМЕЩЕНИЯ НОМЕРА СТРАНИЦЫ 
 
                INC D
 
                REPT 4
 
                INC HL
 
                ENDM
 
                BIT 1,H
 
                CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
 
                LD B,(HL)                       ;ВЗЯЛИ КОЛИЧЕСТВО СЕКТОРОВ НА ДОРОЖКЕ
 
                LD A,B
 
                AND A
 
                JP Z,LOADFDI_ERR
 
                INC HL
 
                INC HL
 
LOADFDI4        INC HL
 
                BIT 1,H
 
                CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
 
                LDI                             ;ПЕРЕНОС НОМЕРА СЕКТОРА
 
                DEC DE
 
                INC C
 
                INC D
 
                BIT 1,H
 
                CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
 
                LD A,(HL)                       ;ВЗЯЛИ РАЗМЕР СЕКТОРА
 
                EX DE,HL
 
                LD (HL),1
 
                AND A
 
                JR Z,LOADFDI2
 
                LD (HL),2
 
                DEC A
 
                JR Z,LOADFDI2
 
                LD (HL),4
 
                DEC A
 
                JR Z,LOADFDI2
 
                LD (HL),8
 
LOADFDI2        EX DE,HL
 
                INC D
 
                REPT 5
 
                INC HL
 
                ENDM
 
                DJNZ LOADFDI4                   ;ВОЗВРАЩАЕМСЯ ДЛЯ ПРОДОЛЖЕНИЯ, ПОКА СЕКТОРА ДОРОЖКИ НЕ КОНЧАТСЯ
 
                LD D,0X40
 
                INC E
 
                DEC C
 
                JR NZ,LOADFDI3                  ;ВОЗВРАЩАЕМСЯ ДЛЯ ПРОДОЛЖЕНИЯ ПОКА НЕ КОНЧАТСЯ ДОРОЖКИ
 
                DEC HL
 
                BIT 1,H
 
                CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
 
                PUSH HL
 
                LD A,H
 
                AND 1
 
                LD B,A
 
                LD C,L
 
                LD A,IXH
 
                ADD A,A
 
                ADD A,B
 
                LD B,A
 
                LD HL,0
 
START_DATA      EQU $-2
 
                AND A
 
                SBC HL,BC
 
                EX DE,HL
 
                POP HL
 
                LD A,D
 
                AND A
 
                JR Z,LOADFDI7
 
LOADFDI8        INC H
 
                BIT 1,H
 
                CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
 
                DEC D
 
                JR NZ,LOADFDI8
 
LOADFDI7        ADD HL,DE
 
                BIT 1,H
 
                CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
 
                PUSH HL                         ;СОХРАНИЛИ АДРЕС НА НАЧАЛО НАЧАЛА СЕКТОРОВ
 
                LD DE,0XC000
 
                AND A
 
                SBC HL,DE
 
                LD (OSTAT_SECT),HL              ;СКОЛЬКО БАЙТ ПЕРЕНЕСТИ ИЗ ХВОСТА СЕКТОРА В БУФЕРЕ В НАЧАЛО СТРАНИЦЫ
 
                LD B,H
 
                LD C,L
 
                LD HL,0X200
 
                SBC HL,BC
 
                LD (NACH_SECT),HL               ;СКОЛЬКО БАЙТ ПЕРЕНЕСТИ ИЗ НАЧАЛА СЕКТОРА В БУФЕРЕ В КОНЕЦ СТРАНИЦЫ
 
                POP HL                          ;ВОССТАНОВИЛИ СДРЕС НАЧАЛА СЕКТОРОВ, ДАЛЕЕ ЗАГРУЗКА ВСЕХ СЕКТОРОВ В ПАМЯТЬ
 
LOADFDI5        POP AF
 
                INC A
 
                CALL SET4MBPAGE
 
                PUSH AF
 
                BIT 1,H
 
                CALL NZ,LOAD1SECFDI
 
                EX AF,AF'
 
                LD DE,0X4000
 
                LD BC,0
 
NACH_SECT       EQU $-2
 
                LDIR
 
                EX AF,AF'
 
                JP C,ELOAD_IMAGE
 
                EX DE,HL
 
                LD IXL,0X1F
 
                CALL COM_FAT
 
                DB Load_file
 
                JP C,ELOAD_IMAGE
 
                PUSH HL
 
                LD HL,0XC000
 
                PUSH HL
 
                LD IXL,1
 
                CALL COM_FAT
 
                DB Load_file
 
                POP HL
 
                POP DE
 
                LD BC,0
 
OSTAT_SECT      EQU $-2
 
                LDIR
 
                JR LOADFDI5
 
 
 
LOADFDI_ERR     LD A,PAGE_RAMDISK
 
                CALL SET4MBPAGE
 
                LD HL,0X7FFF
 
                LD (HL),0
 
                DEC H
 
                LD (HL),0
 
                LD A,0XFA
 
                CALL SET4MBPAGE
 
                LD SP,(LD_FILE_SP)
 
                POP IY
 
                POP IX
 
                JP LDFDI_ERROR
 
 
 
CREATE_RAMTABL  PUSH IX
 
                PUSH IY
 
                LD (LD_FILE_SP),SP
 
                LD SP,ADR_CAT
 
;СОЗДАНИЕ ТАБЛИЦЫ ОПИСАТЕЛЯ ДЛЯ ЗАГРУЖЕННЫХ TRD И SCL ОБРАЗОВ
 
END_LOAD_TRD    LD A,PAGE_RAMDISK+1             ;НУЖНА СТРАНИЦА ОТКУДА НАЧИНАЕТСЯ ЗАГРУЖЕННЫЙ ОБРАЗ
 
                CALL SET4MBPAGE
 
                LD HL,(0X48E1)                  ;ПЕРВЫЙ СВОБОДНЫЙ ТРЕК СЕКТОР
 
                LD A,L
 
                LD L,H
 
                LD H,0
 
                ADD HL,HL
 
                ADD HL,HL
 
                ADD HL,HL
 
                ADD HL,HL
 
                OR L
 
                LD L,A                          ;КОЛИЧЕСТВО ЗАНЯТЫХ СЕКТОРОВ С ДИРЕКТОРИЕЙ
 
                LD DE,(0X48E5)                  ;КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
 
                ADD HL,DE
 
                ADD HL,HL
 
                ADD HL,HL
 
                ADD HL,HL
 
                ADD HL,HL                       ;H=КОЛИЧЕСТВО ДОРОЖЕК
 
                LD A,H
 
                CP 0XA0
 
                JR NC,ELT3
 
                LD A,0XA0
 
ELT3            EX AF,AF'
 
                LD A,PAGE_RAMDISK               ;НУЖНА СТРАНИЦА НАЧАЛА РАМДИСКА, ГДЕ БУДЕТ ТАБЛИЦА ОПИСАТЕЛЕЙ
 
                CALL SET4MBPAGE
 
                LD HL,0X4000
 
                PUSH HL
 
                LD DE,0X4001
 
                LD BC,0X3FFF
 
                LD (HL),L
 
                LDIR                            ;ОЧИСТИЛИ СТРАНИЦУ
 
                POP DE                          ;АДРЕС НАЧАЛА 
 
                LD HL,0                         ;СМЕЩЕНИЕ В БЛОКАХ И СТРАНИЦАХ
 
                EX AF,AF'
 
ELT2            EX AF,AF'
 
                LD BC,0X1000                    ;СЧЕТЧИК НОМЕРОВ СЕКТОРОВ И ИХ НОМЕРА
 
                LD A,L
 
                RRCA
 
                RRCA
 
                LD (DE),A                       ;СМЕЩЕНИЕ В БЛОКАХ ДОРОЖКИ В СТРАНИЦЕ
 
                INC D
 
                LD A,H
 
                LD (DE),A                       ;СМЕЩЕНИЕ В СТРАНИЦАХ ДО ДОРОЖКИ
 
                INC D
 
ELT1            INC C
 
                LD A,C
 
                LD (DE),A                       ;НОМЕР СЕКТОРА
 
                INC D
 
                LD A,2
 
                LD (DE),A                       ;РАЗМЕР СЕКТОРА
 
                INC D
 
                DJNZ ELT1                       ;ВНОСИМ В ТАБЛИЦУ ВСЕ НОМЕРА СЕКТОРОВ С РАЗМЕРАМИ
 
                LD D,0X40                       ;ВЕРНУЛИ УКАЗАТЕЛЬ В НАЧАЛО
 
                INC E                           ;ДЛЯ СЛЕДУЮЩЕЙ ДОРОЖКИ
 
                LD BC,0X40
 
                ADD HL,BC                       ;ПЕРЕХОД К СЛЕДУЮЩЕЙ ДОРОЖКЕ
 
                EX AF,AF'
 
                DEC A
 
                JR NZ,ELT2                      ;ПОВТОРЯЕМ ДЛЯ ВСЕХ ДОРОЖЕК
 
;ОБЩИЙ ВЫХОД ИЗ ЗАГРУЗКИ С ВОЗВРАТОМ СТАНДАРТНОЙ СТРАНИЦЫ В ОКНЕ ПРОЕЦИРОВАНИЯ 1
 
ELOAD_IMAGE     LD A,PAGE_RAMDISK
 
                CALL SET4MBPAGE
 
                LD HL,0X7FFF
 
                LD (HL),"R"
 
                DEC H
 
                LD (HL),"D"
 
                LD A,0XFA
 
                CALL SET4MBPAGE
 
                LD SP,0
 
LD_FILE_SP      EQU $-2
 
                POP IY
 
                POP IX
 
                RET
 
 
 
;ЗАГРУЗКА СЛЕДУЮЩЕГО СЕКТОРА ЗАГОЛОВКА FDI
 
LOAD1SECFDI     PUSH HL
 
                PUSH BC
 
                PUSH DE
 
                PUSH AF
 
                LD HL,0XC000
 
                LD IXL,1
 
                CALL COM_FAT
 
                DB Load_file
 
                INC IXH
 
                POP AF
 
                POP DE
 
                POP BC
 
                POP HL
 
                RES 1,H
 
                RET
 
 
 
;ВКЛЮЧЕНИЕ В 1 ОКНО ПРОЕЦИРОВАНИЯ ЗАДАННОЙ СТРАНИЦЫ
 
SET4MBPAGE      PUSH BC
 
                LD B,A
 
                PEC_ON SHADOW_BF
 
;               LD A,1
 
;               OUT (PEVO_CONF),A
 
                LD A,B
 
                LD BC,WIN_P5
 
                OUT (C),A
 
                LD B,A
 
                PEC_OFF SHADOW_BF
 
;               XOR A
 
;               OUT (PEVO_CONF),A
 
                LD A,B
 
                POP BC
 
                RET
 
 
 
LOAD_IMAGE      DI
 
                CP "R"
 
                LD HL,FLASHER
 
                JR Z,LOAD_IMAGE8
 
                LD HL,RESTART
 
LOAD_IMAGE8     PUSH HL
 
                PUSH IX
 
                PUSH IY
 
                LD (LD_FILE_SP),SP
 
                LD SP,ADR_CAT
 
                CP "S"                          ;ЭТО SCL ФАЙЛ?
 
                JR Z,LOAD_IMAGE2
 
                CP "F"                          ;ЭТО FDI ФАЙЛ?
 
                JP Z,LOAD_FDI
 
                CP "T"                          ;ЭТО TRD ФАЙЛ?
 
                JR NZ,LOAD_ROM
 
                LD A,PAGE_RAMDISK+1
 
;ЗАГРУЗКА TRD ОБРАЗА
 
LOAD_IMAGE1     PUSH AF
 
                CALL SET4MBPAGE
 
                LD HL,0X4000
 
                LD IXL,0X20
 
                CALL COM_FAT
 
                DB Load_file
 
                JP C,END_LOAD_TRD;ELOAD_IMAGE
 
                POP AF
 
                INC A
 
                JR LOAD_IMAGE1
 
 
 
LOAD_ROM        CP "R"                          ;ЭТО ROM ФАЙЛ?
 
                JP NZ,ELOAD_IMAGE
 
                LD A,PAGE4FLASHER
 
                JR LOAD_IMAGE1
 
 
 
;ЗАГРУЗКА SCL ОБРАЗА
 
LOAD_IMAGE2     LD HL,DSKINFO
 
                LD DE,ADR_CAT+0XF00
 
                LD BC,DSK_END-DSKINFO
 
                LDIR                            ;СОХРАНЕНИЕ ИНФЫ ДЛЯ СОЗДАНИЯ ЗАГОЛОВКА ДИСКЕТЫ
 
                LD A,PAGE_RAMDISK+1
 
LOAD_IMAGE4     PUSH AF
 
                CALL SET4MBPAGE                 ;ВКЛЮЧИЛИ ПЕРВУЮ СТРАНИЦУ ОТКУДА РАМДИСК НАЧИНАЕТСЯ
 
                LD HL,0X5000
 
                LD IXL,0X18
 
                CALL COM_FAT                    ;ЗАГРУЗИЛИ ПЕРВЫЕ 0X18 СЕКТОРОВ SCL ОБРАЗА
 
                DB Load_file            
 
                PUSH AF                         ;СОХРАНИЛИ ФЛАГ ОКОНЧАНИЯ ЗАГРУЗКИ НА СЛУЧАЙ ОКОНЧАНИЯ ОБРАЗА
 
                LD HL,0X4000
 
                PUSH HL                         ;СОХРАНИЛИ АДРЕС НАЧАЛА КАТАЛОГА
 
                LD (HL),L
 
                LD D,H
 
                LD E,L
 
                INC DE
 
                LD BC,0XFFF
 
                LDIR                            ;ЗАЧИСТКА ОБЛАСТИ ПЕРВОЙ ДОРОЖКИ ДЛЯ ФОРМИРОВАНИЯ КАТАЛОГА ДИСКА
 
                LD HL,0X5008                    ;АДРЕС КОЛИЧЕСТВА ФАЙЛОВ В SCL ОБРАЗЕ
 
                LD A,(HL)                       ;ВЗЯЛИ КОЛИЧЕСТВО ФАЙЛОВ КАК СЧЕТЧИК
 
                INC HL                          ;ПЕРЕШЛИ НА ПЕРВЫЙ ОПИСАТЕЛЬ ФАЙЛА
 
                EXX
 
                LD HL,0                         ;НОМЕР АБСОЛЮТНОГО СЕКТОРА
 
                LD D,L                          ;ПРИРАЩЕНИЕ СЕКТОРОВ НЕ МОЖЕТ БЫТЬ БОЛЕЕ 255 СЕКТОРОВ
 
                LD B,A                          ;СОХРАНЕНИЕ КОЛИЧЕСТВА ФАЙЛОВ
 
                EXX
 
                POP DE                          ;ВЕРНУЛИ АДРЕС НАЧАЛА КАТАЛОГА ДИСКА
 
LOAD_IMAGE3     EX AF,AF'
 
                LD BC,0X0D
 
                LDIR                            ;ПЕРЕНЕСЛИ 13 БАЙТ ТЕЛА ОПИСАТЕЛЯ
 
                LD A,(HL)                       ;ЗАБРАЛИ РАЗМЕР ФАЙЛА В СЕКТОРАХ
 
                LDI                             ;ПЕРЕНЕСЛИ ЕЩЕ БАЙТ
 
                EXX
 
                LD E,A
 
                PUSH HL                         ;СОХРАНИЛИ ТЕКЩЕЕ ЗНАЧЕНИЕ НОМЕРА СЕКТОРА
 
                ADD HL,DE                       ;УВЕЛИЧИЛИ ТЕКЩЕЕ ЗНАЧЕНИЕ НА РАЗМЕР ФАЙЛА В СЕКТОРАХ
 
                EXX
 
                EX (SP),HL
 
                LD A,L
 
                ADD HL,HL
 
                ADD HL,HL
 
                ADD HL,HL
 
                ADD HL,HL
 
                INC H
 
                AND 0X0F
 
                LD L,A
 
                EX (SP),HL
 
                POP BC                          ;ВОССТАНОВИЛИ ТЕКЩИЙ НОМЕР СЕКТОРА
 
                EX DE,HL
 
                LD (HL),C
 
                INC HL
 
                LD (HL),B                       ;УЛОЖИЛИ ПОСЛЕ ТЕКУЩЕГО ОПИСАТЕЛЯ
 
                INC HL
 
                EX DE,HL
 
                EX AF,AF'
 
                DEC A
 
                JR NZ,LOAD_IMAGE3               ;ЕСЛИ ФАЙЛЫ НЕ КОНЧИЛИСЬ ПРОДОЛЖАЕМ
 
                PUSH HL                         ;СОХРАНИЛИ АДРЕС НАЧАЛА ДАННЫХ
 
                LD HL,ADR_CAT+0XF00
 
                LD DE,0X48E1
 
                LD BC,DSK_END-DSKINFO
 
                LDIR
 
                EXX
 
                LD DE,2544                      ;СТАНДАРТНЫЙ РАЗМЕР ДИСКЕТЫ
 
                EX DE,HL
 
                AND A
 
                SBC HL,DE
 
                LD (0X48E5),HL                  ;КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
 
                EX DE,HL
 
                LD A,L
 
                ADD HL,HL
 
                ADD HL,HL
 
                ADD HL,HL
 
                ADD HL,HL
 
                INC H
 
                AND 0X0F
 
                LD L,A
 
                LD (0X48E1),HL                  ;ПЕРВЫЙ СВОБОДНЫЙ ТРЕК И СЕКТОР
 
                LD A,B
 
                LD (0X48E4),A                   ;КОЛИЧЕСТВО ФАЙЛОВ НА ДИСКЕ
 
                EXX
 
                POP DE                          ;ВОССТАНОВЛЕНИЕ АДРЕСА НАЧАЛА ДАННЫХ
 
                LD HL,0X8000                    ;КОНЕЦ ОКНА ПРОЕЦИРОВАНИЯ
 
                AND A
 
                SBC HL,DE                       ;ПОЛУЧИЛИ КОЛИЧЕСТВО БАЙТ ДЛЯ СДВИГА
 
                LD B,H
 
                LD C,L
 
                LD HL,0X5000                    ;НАЧАЛО ДАННЫХ НА РАМДИСКЕ
 
                EX DE,HL
 
                LDIR                            ;СДВИНУЛИ, ПОСЛЕ ПЕРЕНОСА DE=АДРЕС КУДА ДАЛЕЕ ГРУЗИТЬ
 
                LD A,D
 
                CP 0X7E
 
                JR NC,LOAD_IMAGE7
 
                EX DE,HL
 
                SRL A
 
                LD IXL,A
 
                CALL COM_FAT
 
                DB Load_file
 
                LD DE,0X8000
 
                EX DE,HL
 
LOAD_IMAGE7     AND A
 
                SBC HL,DE                       ;ПОЛУЧИЛИ СКОЛЬКО БАЙТ ОСТАЛОСЬ ДО КОНЦА ОКНА
 
                LD (OST_HWOST),HL
 
                LD (KUDA_HWOST),DE
 
                LD DE,0
 
                EX DE,HL
 
                SBC HL,DE
 
                LD A,1
 
                AND H
 
                LD H,A
 
                LD (NEXT4PAGE),HL
 
                POP AF                          ;ВОССТАНОВИЛИ ФЛАГ ПОСЛЕДНЕЙ ЗАГРУЗКИ
 
                JP C,END_LOAD_TRD;ELOAD_IMAGE           ;ЕСЛИ ФАЙЛ УЖЕ КОНЧИЛСЯ, ТО ВЫХОД
 
                JR LOAD_IMAGE5
 
 
 
LOAD_IMAGE6     LD DE,0X4000
 
                LD BC,0
 
NEXT4PAGE       EQU $-2
 
                LDIR
 
                EX AF,AF'
 
                JP C,END_LOAD_TRD;ELOAD_IMAGE
 
                EX DE,HL
 
                LD IXL,0X1F
 
                CALL COM_FAT
 
                DB Load_file
 
                JP C,END_LOAD_TRD;ELOAD_IMAGE
 
LOAD_IMAGE5     LD HL,ADR_CAT
 
                PUSH HL
 
                LD IXL,1
 
                CALL COM_FAT
 
                DB Load_file
 
                EX AF,AF'                       ;СПРЯТАЛИ ФЛАГ ЗАГРУЗКИ СЕКТОРА
 
                POP HL                          ;ВОССТАНОВИЛИ АДРЕС КУДА СЕКТОР В БУФЕР ЗАГРУЗИЛИ
 
                LD DE,0
 
KUDA_HWOST      EQU $-2                         ;КУДА ЛОЖИТ ОСТАТОК В ОКНЕ
 
                LD BC,0
 
OST_HWOST       EQU $-2                         ;СКОЛЬКО ПЕРЕНОСИТЬ В КОНЕЦ СТРАНИЦЫ
 
                LDIR
 
                POP AF
 
                INC A
 
                PUSH AF
 
                CALL SET4MBPAGE
 
                JR LOAD_IMAGE6
 
 
 
;ПРОВЕРКА ЗАГОЛОВКА HOBETA ФАЙЛА
 
;НА ВЫХОДЕ: ФЛАГ С=1-НЕ СООТВЕСТВУЕТ
 
CMP4HOBETA      SUB 1
 
                RET NZ
 
                LD A,(BUF_512+8)
 
                CP "C"                          ;ПРОВЕРКА ЧТО ЭТО КОДОВЫЙ БЛОК, А НЕ ЧТО-ТО ДРУГОЕ
 
                SCF
 
                RET NZ
 
                PUSH DE                         ;СОХРАНИЛИ АДРЕС СКЛАДИРОВАНИЯ ДЛЯ ДАЛЬНЕЙШЕЙ ПРОВЕРКИ
 
                LD B,H
 
                LD C,L                          ;ВОЗВРАЩАЕМСЯ В НАЧАЛО СЕКТОРА
 
                CALL HOB_CRC                    ;СЧИТАЕМ CRC HOBETA ЗАГОЛОВКА
 
                LD A,(BC)
 
                INC BC
 
                LD E,A
 
                LD A,(BC)
 
                LD D,A                          ;В "DE" РАССЧИТАННОЕ CRC ХОБЕТА ЗАГОЛОВКА
 
                AND A                           ;В "HL" ВЗЯТОЕ ИЗ СМЕЩЕНИЯ +0X0F ОТ НАЧАЛА ФАЙЛА
 
                SBC HL,DE                       ;СРАВНИВАЕМ 
 
                POP DE                          ;ЕСЛИ НЕ СОВПАЛО ТО ВОЗМОЖНО ЭТО НЕ ХОБЕТА
 
                SCF
 
                RET NZ                          ;ПРОПУСКАЕМ ФАЙЛ
 
                EXX
 
                LD HL,(BUF_512+9)               ;ВЗЯЛИ АДРЕС ЗАГРУЗКИ
 
                DEC HL                          ;ДЛЯ ЗАГРУЗКИ МАСИМУМ 40960 БАЙТ (160 СЕКТОРОВ)
 
                LD DE,(BUF_512+0X0B)            ;ВЗЯЛИ ДЛИНУ КОДОВОГО БЛОКА
 
                ADD HL,DE                       ;ПРОВЕРЯЕМ ВЫХОД ЗА ПРЕДЕЛЫ ОЗУ
 
                EXX                             ;ЕСЛИ ВЫЛЕТ ЗА ПРЕДЕЛ ОЗУ
 
                RET C                           ;ПРОПУСКАЕМ ФАЙЛ
 
                EXX
 
                LD HL,(BUF_512+9)
 
                LD DE,0X6000                    ;ПРОВЕРЯЕМ АДРЕС ЗАГРУЗКИ
 
                AND A                           ;АДРЕС ЗАГРУЗКИ НЕ ДОЛЖЕН БЫТЬ НИЖЕ 0X6000
 
                SBC HL,DE
 
                EXX                             ;ЕСЛИ АДРЕС ЗАГРУЗКИ НИЖЕ 0X6000
 
                RET
 
 
 
;НА ВХОДЕ: BC-АДРЕС ЗАГОЛОВКА
 
;НА ВЫХОДЕ: HL-HOBETA CRC
 
HOB_CRC         LD A,0X0F
 
                LD HL,0
 
                EXX
 
                LD E,0
 
                EXX
 
HOBCRC1         EX AF,AF'
 
                LD A,(BC)
 
                LD E,A
 
                LD D,A
 
                ADD HL,DE
 
                EXX
 
                LD A,E
 
                INC E
 
                EXX
 
                LD E,A
 
                LD D,0
 
                ADD HL,DE
 
                EX AF,AF'
 
                INC BC
 
                DEC A
 
                JR NZ,HOBCRC1
 
                RET
 
 
 
CMP4ROMS        EXX
 
                LD A,B
 
                OR D
 
                OR E
 
                JR NZ,CMP4IMAGE2
 
                LD A,C
 
                CP 8
 
                JR NZ,CMP4IMAGE2
 
                EXX
 
CMP4ROMS1       AND A
 
                RET
 
 
 
CMP4IMAGE2      EXX
 
                SCF
 
                RET
 
 
 
CMP4FDI         PUSH HL
 
                EXX
 
                POP HL
 
                LD A,(HL)
 
                CP "F"
 
                JR NZ,CMP4IMAGE2
 
                INC HL
 
                LD A,(HL)
 
                CP "D"
 
                JR NZ,CMP4IMAGE2
 
                INC HL
 
                LD A,(HL)
 
                CP "I"
 
                JR NZ,CMP4IMAGE2
 
                INC HL
 
                INC HL
 
                LD A,(HL)                       ;КОЛИЧЕСТВО ЦИЛИНДРОВ
 
                CP 0X57
 
                JR NC,CMP4IMAGE2
 
                INC HL
 
                LD A,(HL)                       ;ДОЛЖЕН БЫТЬ 0
 
                AND A
 
                JR NZ,CMP4IMAGE2
 
                INC HL
 
                LD A,(HL)                       ;КОЛИЧЕСТВО СТОРОН
 
                AND A
 
                JR Z,CMP4IMAGE2
 
                CP 3
 
                JR NC,CMP4IMAGE2
 
                INC HL
 
                LD A,(HL)                       ;ДОЛЖНО БЫТЬ 0
 
                AND A
 
                JR NZ,CMP4IMAGE2
 
                EXX
 
                AND A
 
                RET
 
 
 
CMP4IMAGE       CP 3
 
                JR Z,CMP4FDI
 
                SUB 1
 
                RET Z                           ;ДЛЯ TRD ПРОВЕРКА НЕ НУЖКА
 
;ДЛЯ SCL ПРОВЕРКА НАЛИЧИЯ СЛОВА "SINCLAIR" В ПЕРВЫХ 8 БАЙТАХ
 
                PUSH HL
 
                EXX
 
                POP HL
 
                LD DE,SIGN_SCL
 
                LD B,8
 
CMP4IMAGE1      LD A,(DE)
 
                CP (HL)
 
                JR NZ,CMP4IMAGE2
 
                INC DE
 
                INC HL
 
                DJNZ CMP4IMAGE1
 
                EXX
 
                AND A
 
                RET
 
 
 
SEARCH_FILE     LD DE,ADR_CAT                   ;АДРЕС КУДА СКЛАДИРОВАТЬ НОМЕРА НАЙДЕННОГО
 
                LD HL,0                         ;ГДЕ СПИСОК РАСШИРЕНИЙ ДЛЯ ПОИСКА
 
GDE_EXT_FILES   EQU $-2
 
                CALL COM_FAT
 
                DB Find_file                    ;ПОИСК ФАЙЛОВ ПО ЗАДАННОМУ РАСШИРЕНИЮ
 
                RET Z
 
                JR SEARCHF2
 
 
 
SEARCHF1        CALL COM_FAT
 
                DB Next_find
 
                RET Z
 
SEARCHF2        CALL 0
 
CMP_FOUNDED     EQU $-2
 
                RLA
 
                AND 1
 
                JR SEARCHF1
 
 
 
;ПРОШИВАТЕЛЬ ПЗУ И ИНДИКАЦИЕЙ ПРОЦЕССА
 
FLASHER         LD IX,ERASE_ROM
 
                CALL WINW
 
                LD (FLASH_SP),SP
 
                LD SP,ADR_CAT
 
                PEC_ON SHADOW_BF+FLASH_BF
 
;               LD A,3
 
;               OUT (PEVO_CONF),A
 
                LD A,3
 
                CALL SETWIN_INDICAT
 
                LD E,0
 
                LD HL,0
 
FLASHER4        CALL ERASE_BLK
 
                LD A,0XFA
 
                EX AF,AF'
 
                CALL INC_INDICAT
 
                INC E
 
                BIT 3,E
 
                JR Z,FLASHER4
 
                LD A,0XFF
 
                LD BC,WIN_P3;0XF7F7
 
                OUT (C),A
 
                LD IX,UPDATE_WIN
 
                CALL WINW
 
                LD A,PAGE4FLASHER
 
                LD E,0
 
FLASHER3        LD HL,0
 
                PUSH AF
 
                LD A,0XFA
 
                LD BC,WIN_P5;0X77F7
 
                OUT (C),A
 
                LD A,E
 
                ADD A,2
 
                CALL SETWIN_INDICAT
 
                POP AF
 
FLASHER2        PUSH AF
 
                LD BC,WIN_P5;0X77F7
 
                OUT (C),A
 
                EX AF,AF'
 
                PUSH IX
 
                LD IX,0X4000
 
FLASHER1        LD A,(IX)
 
                CALL PGM_BYTE
 
                INC IX
 
                INC HL
 
                LD A,H
 
                AND 0X0F
 
                OR L
 
                CALL Z,INC_INDICAT
 
                LD A,IXH
 
                AND 0X80
 
                JR Z,FLASHER1
 
                POP IX
 
                POP AF
 
                INC A
 
                LD D,A
 
                LD A,H
 
                AND A
 
                LD A,D
 
                JR NZ,FLASHER2
 
                INC E
 
                BIT 3,E
 
                JR Z,FLASHER3
 
EFLASHER        LD A,0XFA
 
                LD BC,WIN_P5;0X77F7
 
                OUT (C),A
 
                LD BC,WIN_A3;0XFFF7
 
                LD A,0XFF
 
                OUT (C),A
 
                PEC_OFF SHADOW_BF+FLASH_BF
 
;               XOR A
 
;               OUT (PEVO_CONF),A
 
                LD SP,0
 
FLASH_SP        EQU $-2
 
                JP RESTART