Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 30.08.2017 savelij
  3.  
  4. LOAD4FLASH      LD HL,ROMS
  5.                 LD DE,CMP4ROMS
  6.                 JR FATBOOT4
  7.  
  8. COPYIMAGE       LD HL,IMAGES
  9.                 LD DE,CMP4IMAGE
  10.                 JR FATBOOT4
  11.  
  12. ;ВЫБОР УСТРОЙСТВА ДЛЯ ЗАГРУЗКИ
  13. FATBOOT         LD HL,HOBETA
  14.                 LD DE,CMP4HOBETA
  15. FATBOOT4        DI
  16.                 LD (GDE_EXT_FILES),HL
  17.                 LD (CMP_FOUNDED),DE
  18.                 LD HL,ADRTBLDIRL
  19.                 LD (DIR_LEVEL),HL               ;УСТАНОВИЛИ ДНО СТЕКА СОХРАНЕННИЙ ОКОШЕК
  20.                 LD HL,FLAGS
  21.                 SET B_RUN_FAT_DSK,(HL)          ;РАБОТАТЬ БУДЕМ С FAT
  22.                 CALL COM_DEV
  23.                 DB Devfind                      ;СКАНИРОВАНИЕ УСТРОЙСТВ
  24.                 JP C,_STUPID                    ;ОШИБКА, НИ ОДНОГО РАЗДЕЛА НЕ НАЙДЕНО
  25.                 LD B,E                          ;СЧЕТЧИК КОЛИЧЕСТВА НАЙДЕННЫХ РАЗДЕЛОВ
  26.                 LD IX,SEL_FAT_DEV               ;АДРЕС ОПИСАТЕЛЯ ОКНА ВЫБОРА РАЗДЕЛОВ
  27.                 LD (IX+0X10),E                  ;КОЛИЧЕСТВО ПУНКТОВ В ОКНЕ
  28.                 INC E
  29.                 INC E
  30.                 LD (IX+2),E                     ;УСТАНОВИЛИ ВЫСОТУ ВЫВОДИМОГО ОКНА
  31.                 LD DE,6                         ;ШАГ ПО ТАБЛИЦЕ НАЙДЕННЫХ РАЗДЕЛОВ -2
  32.                 EXX
  33.                 LD HL,TXT_FAT_SEL
  34.                 LD DE,SEL_FAT_DRV               ;АДРЕС ГДЕ БУДЕТ ФОРМИРОВАТЬСЯ ТЕКСТ ОКНА ВЫБОРА РАЗДЕЛОВ
  35.                 LD BC,ETXT_FAT_SEL-TXT_FAT_SEL
  36.                 LDIR
  37.                 EX DE,HL
  38.                 EXX
  39. FATBOOT1        EXX
  40.                 LD (HL),0X0D
  41.                 INC HL
  42.                 LD (HL),3
  43.                 INC HL
  44.                 EXX
  45.                 LD A,(HL)                       ;ВЗЯЛИ НОМЕР РАЗДЕЛА
  46.                 INC HL
  47.                 LD C,(HL)                       ;MASTER ИЛИ SLAVE
  48.                 INC HL
  49.                 ADD A,C
  50.                 ADD A,C
  51.                 SUB 4                           ;-4, ИБО ДИСКОВОДЫ НЕ УЧИТЫВАЮТСЯ
  52.                 ADD A,A
  53.                 ADD A,A
  54.                 ADD A,A
  55.                 ADD A,A                         ;УМНОЖЕНО НА 16
  56.                 EXX
  57.                 EX DE,HL
  58.                 LD HL,TXT4MENU_DEVICE           ;АДРЕС ТАБЛИЦЫ ТЕКСТА О РАЗДЕЛАХ
  59.                 LD C,A
  60.                 LD B,0
  61.                 ADD HL,BC                       ;ПОЛУЧИЛИ АДРЕС ОТКУДА ТЕКСТ ВЗЯТЬ
  62.                 LD BC,0X10                      ;ДЛИНА ПЕРЕНОСА 16 БАЙТ
  63.                 EXX
  64.                 LD A,L
  65.                 EXX
  66.                 RRCA
  67.                 RRCA
  68.                 RRCA
  69.                 AND 0X1F
  70.                 ADD A,"E"                       ;БУКВА НАЙДЕННОГО УСТРОЙСТВА
  71.                 LD (DE),A
  72.                 INC DE
  73.                 LDIR                            ;ПЕРЕНОС ТЕКСТА ИЗ ВЫБРАННОЙ ТАБЛИЦЫ
  74.                 EXX
  75.                 LD A,(HL)                       ;ТИП РАЗДЕЛА
  76.                 EXX
  77.                 LD C,A
  78.                 ADD A,A
  79.                 ADD A,A
  80.                 ADD A,C                         ;УМНОЖЕННО НА 5
  81.                 LD HL,TXT4MENU_TYPE             ;АДРЕС ТАБЛИЦЫ ТЕКСТА ТИПОВ РАЗДЕЛОВ
  82.                 LD C,A
  83.                 ADD HL,BC
  84.                 LD C,5
  85.                 LDIR                            ;ПЕРЕНОС ТЕКСТА ИЗ ВЫБРАННОЙ ТАБЛИЦЫ
  86.                 EX DE,HL
  87.                 EXX
  88.                 ADD HL,DE
  89.                 DJNZ FATBOOT1
  90.                 EXX
  91.                 LD (HL),0
  92.                 INC HL
  93.                 LD B,(IX+2)
  94.                 DEC B
  95.                 DEC B
  96.                 LD C,B
  97.                 LD A,"e"
  98.                 LD (HL),B
  99.                 INC HL
  100. FATBOOT3        LD (HL),A                       ;ФОРМИРОВАНИЕ ТАБЛИЦЫ ГОРЯЧИХ КЛАВИШ
  101.                 INC HL
  102.                 INC A
  103.                 DJNZ FATBOOT3
  104.                 LD (SELFATDEVEXE),HL            ;ПОЛОЖИЛИ АДРЕС ТАБЛИЦЫ АДРЕСОВ ВЫЗОВА ВЫБРАННОГО
  105.                 LD B,C
  106. FATBOOT2        LD (HL),LOW (SEL_FAT)           ;ФОРМИРОВАНИЕ ТАБЛИЦЫ АДРЕСОВ ВЫЗЫВОВ
  107.                 INC HL
  108.                 LD (HL),HIGH (SEL_FAT)
  109.                 INC HL
  110.                 DJNZ FATBOOT2
  111.                 LD A,C
  112.                 EXX
  113.                 DEC A
  114.                 JR Z,SEL_FAT
  115.                 CALL WINW                       ;ВЫВЕЛИ СФОРМИРОВАННОЕ ОКНО
  116.                 JP _RULILKA                     ;ВОЗВРАЩАЕМСЯ К ОБЩЕМУ УПРАВЛЕНИЮ
  117.  
  118. ;ПЕРЕКЛЮЧЕНИЕ НА УСТРОЙСТВА И ВЫВОД НАЙДЕННОГО НА НЕМ
  119. SEL_FAT         DI
  120.                 LD A,(IX+0X12)                  ;ВЗЯЛИ НОМЕР ВЫБРАННОГО УСТРОЙСТВА
  121.                 CALL COM_DEV
  122.                 DB Set_vol                      ;ВЫБРАЛИ УСТРОЙСТВО ПО НОМЕРУ
  123.                 CALL COM_FAT
  124.                 DB Wc_fat                       ;ИНИЦИАЛИЗАЦИЯ ФАТ ДРАЙВЕРА ДЛЯ ВЫБРАННОГО УСТРОЙСТВА
  125.                 CALL SEARCH_FILE
  126.                
  127.                 LD HL,1
  128.                 AND A
  129.                 SBC HL,BC                       ;НАЙДЕННО ЧТО-ТО ОДНО?
  130.                 JR NZ,SEL_FAT1                  ;ЕСЛИ НАЙДЕНО >1, ТО ПРОДОЛЖАЕМ
  131.                 PUSH BC                         ;СОХРАНИЛИ КОЛИЧЕСТВО НАЙДЕННОГО
  132.                 LD BC,(ADR_CAT)                 ;ВЗЯЛИ НОМЕР ЕДИНСТВЕННОГО НАЙДЕННОГО
  133.                 LD A,6
  134.                 CALL COM_FAT
  135.                 DB Positf
  136.                 CALL COM_FAT
  137.                 DB Getfzap                      ;ПОЛУЧИЛИ ОПИСАТЕЛЬ
  138.                 POP BC                          ;ВЕРНУЛИ КОЛИЧЕСТВО НАЙДЕННОГО
  139.                 LD DE,0X0B
  140.                 ADD HL,DE
  141.                 LD A,(HL)                       ;ВЗЯЛИ ФЛАГОВЫЙ БАЙТ ТОГО ЧТО НАШЛИ
  142.                 AND 0X10
  143.                 LD HL,0                         ;ЕСЛИ ЗАПУСКАЕМ, ТО НОМЕР 0 ИЗ НАЙДЕННОГО
  144.                 JR Z,RUN_HOB1                   ;ЕСЛИ ЭТО ФАЙЛ СРАЗУ ЗАПУСКАЕМ
  145. SEL_FAT1        LD IX,FAT_FILES                 ;ЕСЛИ ДИРА, ТО ВЫВОДИМ В ОКНО
  146.                 JP OUT_HOB
  147.  
  148. ;ЗАПУСК ВЫБРАННОГО КОДОВОГО ФАЙЛА ИЗ HOBETA ФАЙЛА
  149. RUN_HOB         DI
  150.                 CALL SHUT2AY                    ;БУМКАЛКА В AY
  151.                 LD L,(IX+0X12)
  152.                 LD H,(IX+0X13)
  153. RUN_HOB1        LD DE,ADR_CAT
  154.                 ADD HL,HL
  155.                 ADD HL,DE                       ;ОТКУДА ИМЯ ФАЙЛА ВЗЯТЬ
  156.                 LD C,(HL)
  157.                 INC HL
  158.                 LD B,(HL)                       ;ПОЛУЧИЛИ ТЕКУЩИЙ ВЫБРАННЫЙ НОМЕР
  159.                 LD A,6
  160.                 CALL COM_FAT
  161.                 DB Positf                       ;УСТАНОВКА ВНУТРЕННЕГО УКАЗАТЕЛЯ FAT ДРАЙВЕРА
  162.                 CALL COM_FAT
  163.                 DB Getfzap                      ;ПОЛУЧИЛИ ОПИСАТЕЛЬ ПО УСТАНОВЛЕННОМУ НОМЕРУ
  164.                 LD DE,0X0B                      ;НУЖЕН БАЙТ ПО СМЕЩЕНИЮ
  165.                 ADD HL,DE
  166.                 LD A,(HL)                       ;ИЗ ЭТОГО БАЙТА НУЖЕН ОДИН БИТ
  167.                 SBC HL,DE
  168.                 AND 0X10                        ;ПРОВЕРИЛИ
  169.                 JR Z,GO_RUN_HOB                 ;ЕСЛИ ЭТО ФАЙЛ, ТО ЗАПУСКАЕМ КОДОВЫЙ БЛОК
  170.                 PUSH BC                         ;СОХРАНИЛИ НОМЕР
  171.                 CALL COM_FAT
  172.                 DB Ent_dir                      ;ВОЙТИ/ВЫЙТИ В/ИЗ ДИРЕКТОРИЙ
  173.                 POP BC                          ;ВОССТАНОВИЛИ ТЕКУЩИЙ НОМЕР
  174.                 LD A,D                          ;БУДЕМ ПРОВЕРЯТЬ ПЕРВЫЙ СИМВОЛ ИМЕНИ ПРЕДЫДУЩЕГО ОПИСАТЕЛЯ
  175.                 LD HL,0                         ;АДРЕС СТЕКА ОКОННЫХ СОХРАНЕНИЙ ДЛЯ ХОЖДЕНИЯ ПО ДИРАМ
  176. DIR_LEVEL       EQU $-2
  177.                 CP "."                          ;ЕСЛИ ПЕРВЫЙ СИМВОЛ ИМЕНИ НЕ ".", ТО СОХРАНЯЕМ ТЕКУЩИЕ ЗНАЧЕНИЯ ОКОШКА И  
  178.                 JR NZ,SNYT0                     ;ВХОДИМ В ДИРУ
  179.                 INC HL                          ;ПРИ ВЫХОДЕ ИЗ ДИРЫ ВОЗВРАЩАЕМ ДАННЫЕ ПРЕДЫДУЩЕГО ОКНА
  180.                 LD A,(HL)
  181.                 INC HL
  182.                 LD E,(HL)
  183.                 INC HL
  184.                 LD D,(HL)
  185.                 LD (DIR_LEVEL),HL               ;СОХРАНИЛИ ИЗМЕНИВШИЙСЯ АДРЕС СТЕКА ДИРЕКТОРИЙ
  186.                 LD (IX+0X12),E
  187.                 LD (IX+0X13),D
  188.                 LD (IX+0X0F),A
  189.                 CALL SEARCH_FILE
  190.                 LD (IX+0X10),C
  191.                 LD (IX+0X11),B                  ;ВОССТАНОВИЛИ ДАННЫЕ ОКНА ПРЕДЫДУЩЕЙ ДИРЫ
  192.                 JP REOUT_HOB                    ;ВЫВЕЛИ НОВОЕ СОДЕРЖИМОЕ ОКНА
  193.  
  194. ;ПРИ ВХОДЕ В ДИРУ СОХРАНЕНИЕ ТЕКУЩИХ ДАННЫХ ОКНА
  195. SNYT0           LD D,(IX+0X13)
  196.                 LD E,(IX+0X12)
  197.                 LD A,(IX+0X0F)
  198.                 LD C,(IX+0X10)
  199.                 LD B,(IX+0X11)
  200.                 LD (HL),D
  201.                 DEC HL
  202.                 LD (HL),E
  203.                 DEC HL
  204.                 LD (HL),A
  205.                 DEC HL
  206.                 LD (DIR_LEVEL),HL               ;СОХРАНИЛИ ИЗМЕНИВШИЙСЯ АДРЕС СТЕКА
  207.                 CALL SEARCH_FILE
  208.                 JP OUT_HOB
  209.  
  210. GO_RUN_HOB      PUSH HL                         ;СОХРАНИЛИ АДРЕС ОПИСАТЕЛЯ
  211.                 LD DE,0X14                      ;ПЕРЕХОДИМ К СМЕЩЕНИЮ В ОПИСАТЕЛЕ ДЛЯ ПОЛУЧЕНИЯ
  212.                 ADD HL,DE                       ;СТАРШИХ 16 БИТ НОМЕРА КЛАСТЕРА НАЧАЛА ФАЙЛА ДЛЯ ЗАПУСКА
  213.                 LD C,(HL)
  214.                 INC HL
  215.                 LD B,(HL)                       ;ЗАБРАЛИ СТРАШИЕ 16 БИТ НОМЕРА КЛАСТЕРА
  216.                 LD E,5                          ;ТЕПЕРЬ ИДЕМ ЗА МЛАДШИМИ 16 БИТАМИ НОМЕРА КЛАСТЕРА
  217.                 ADD HL,DE
  218.                 LD E,(HL)
  219.                 INC HL
  220.                 LD D,(HL)                       ;ТЕПЕРЬ BCDE=ПОЛНЫЙ 32-Х БИТНЫЙ НОМЕР КЛАСТЕРА
  221.                 LD IXL,0
  222.                 CALL COM_FAT                    ;УСТАНОВКА ВНУТРЕННИХ ПАРАМЕТРОВ FAT ДРАЙВЕРА
  223.                 DB Load_file                    ;ДЛЯ ПОСЛЕДОВАТЕЛЬНОЙ ЗАГРУЗКИ
  224.                 POP HL
  225.                 LD DE,8
  226.                 ADD HL,DE
  227.                 LD A,(HL)
  228.                 CP "$"
  229.                 JP NZ,LOAD_IMAGE                ;ПЕРЕХОД НА ЗАГРУЗКУ ОБРАЗА
  230.                 CALL COM_DEV
  231.                 DB Kol_vol                      ;ЗАПРОС У МЕНЕДЖЕРА УСТРОЙСТВ О ТЕКУЩЕМ УСТРОЙСТВЕ
  232.                 LD A,D                          ;ВЗЯЛИ НОМЕР ТЕКУЩЕГО УСТРОЙСТВА
  233.                 ADD A,A
  234.                 ADD A,A
  235.                 ADD A,A
  236.                 LD C,A
  237.                 LD B,0
  238.                 ADD HL,BC
  239.                 LD A,(HL)                       ;ВЗЯЛИ ТИП РАЗДЕЛА
  240.                 SUB 4                           ;ПРОПУСКАЕМ ДИСКОВОДЫ
  241.                 EX AF,AF'                       ;НОМЕР ТЕКУЩЕГО УСТРОЙСТВА В "A"
  242.                 INC HL
  243.                 LD A,(HL)                       ;ВЗЯЛИ МЕСТОПОЛОЖЕНИЕ НОСИТЕЛЯ (MASTER/SLAVE)
  244.                 EX AF,AF'
  245.                 LD HL,0X5800
  246.                 LD DE,0X5801
  247.                 LD BC,0X02FF
  248.                 LD (HL),L
  249.                 LDIR                            ;ЗАЧЕРНИЛИ ЭКРАН ДЛЯ МАСКИРОВКИ ЗАПУСКАЛКИ
  250.                 LD HL,ERORDRV
  251.                 LD DE,0X4200
  252.                 LD B,1
  253.                 LDIR                            ;ПЕРЕНОС ПЕРЕМЕННЫХ ФАТА ДЛЯ MICROBOOT
  254.                 PUSH DE                         ;СЮДА ПЕРЕНОС КОДА И ЗАПУСК
  255.                 LD HL,MICROBOOT
  256.                 LD BC,END_MICROBOOT-MICROBOOT
  257.                 LDIR                            ;ПЕРЕНЕСЛИ ЗАПУСКАЛКУ
  258.                 PUSH AF
  259.                 LD HL,RUN_CODE
  260.                 LD DE,0X5D3B
  261.                 LD BC,ERUN_CODE-RUN_CODE
  262.                 LDIR
  263.                 CALL MEMSET                     ;ВЫСТАВИЛИ РЕЖИМ КОМПА
  264.                 CALL FOR_RUN
  265.                 POP AF
  266.                 RET                             ;ЗАПУСК ЗАПУСКАЛКИ :)
  267.  
  268. ;ЗАГРУЗКА FDI ОБРАЗА
  269. LOAD_FDI        LD A,PAGE_RAMDISK               ;СТРАНИЦА НАЧАЛА РАМДИСКА
  270.                 PUSH AF                         ;СОХРАНИЛИ НА СТЕКЕ
  271.                 CALL SET4MBPAGE                 ;ВКЛЮЧИЛИ ЕЕ
  272.                 LD HL,FDI_TABLE_CYL
  273.                 LD DE,FDI_TABLE_CYL+1
  274.                 LD BC,0X3FFF
  275.                 LD (HL),0
  276.                 LDIR                            ;ОЧИСТКА СТРАНИЦЫ С ОПИСАТЕЛЯМИ ДОРОЖЕК
  277.                 LD IXH,0XFF
  278.                 CALL LOAD1SECFDI                ;ПРИНУДИТЕЛЬНАЯ ЗАГРУЗКА ПЕРВОГО СЕКТОРА
  279.                 LD A,(0XC006)                   ;ВЗЯЛИ КОЛИЧЕСТВО СТОРОН
  280.                 DEC A
  281.                 LD A,(0XC004)                   ;ВЗЯЛИ КОИЧЕСТВО ДОРОЖЕК
  282.                 JR Z,LOADFDI1
  283.                 ADD A,A                         ;ЕСЛИ СТОРОН 2, ТО УМНОЖИЛИ КОЛИЧЕСТВО ДОРОЖЕК НА 2
  284. LOADFDI1        LD C,A                          ;КОЛИЧЕСТВО ДОРОЖЕК
  285.                 LD HL,(0XC00A)
  286. ;               LD A,H
  287. ;               SRL A
  288. ;               ADC A,0
  289. ;               LD H,A
  290. ;               LD DE,(0XC008)
  291. ;               AND A
  292. ;               SBC HL,DE
  293.                 LD (START_DATA),HL
  294.                 LD DE,0X4000                    ;АДРЕС БУФЕРА НАЧАЛА ОПИСАТЕЛЕЙ ДОРОЖЕК
  295.                 LD HL,0XC00F                    ;АДРЕС НАЧАЛА ВЫБОРКИ ОПИСАТЕЛЕЙ ДОРОЖЕК В FDI ЗАГОЛОВКЕ
  296. LOADFDI3        BIT 1,H
  297.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  298.                 LD A,(HL)                       ;БИТЫ 8-15 СМЕЩЕНИЯ ДОРОЖКИ ОТ НАЧАЛА
  299.                 AND 0X3F                        ;ВЗЯЛИ ДЛЯ 8-13 БИТЫ-СМЕЩЕНИЕ В БЛОКАХ В СТРАНИЦЕ
  300.                 LD (DE),A                       ;УЛОЖИЛИ СМЕЩЕНИЕ В БЛОКАХ В СТРАНИЦЕ
  301.                 LD A,(HL)                       ;ВЗЯЛИ БИТЫ 14-15
  302.                 INC HL                          ;СЛЕДУЮЩИЙ БАЙТ FDI ЗАГОЛОВКА
  303.                 INC D                           ;ЗДЕСЬ ПОЛОЖИМ СМЕЩЕНИЕ В СТРАНИЦАХ ДО НУЖНОЙ ДОРОЖКИ
  304.                 BIT 1,H
  305.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  306.                 LD B,A                          ;СОХРАНИЛИ НУЖНЫЕ 14-15 БИТЫ
  307.                 LD A,(HL)                       ;ВЗЯЛИ 16-23 БИТЫ СМЕЩЕНИЯ ДОРОЖКИ ОТ НАЧАЛА
  308.                 RL B
  309.                 RLA
  310.                 RL B
  311.                 RLA
  312.                 LD (DE),A                       ;УКЛАДКА БИТОВ СМЕЩЕНИЯ НОМЕРА СТРАНИЦЫ
  313.                 INC D
  314.                 REPT 4
  315.                 INC HL
  316.                 ENDM
  317.                 BIT 1,H
  318.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  319.                 LD B,(HL)                       ;ВЗЯЛИ КОЛИЧЕСТВО СЕКТОРОВ НА ДОРОЖКЕ
  320.                 LD A,B
  321.                 AND A
  322.                 JP Z,LOADFDI_ERR
  323.                 INC HL
  324.                 INC HL
  325. LOADFDI4        INC HL
  326.                 BIT 1,H
  327.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  328.                 LDI                             ;ПЕРЕНОС НОМЕРА СЕКТОРА
  329.                 DEC DE
  330.                 INC C
  331.                 INC D
  332.                 BIT 1,H
  333.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  334.                 LD A,(HL)                       ;ВЗЯЛИ РАЗМЕР СЕКТОРА
  335.                 EX DE,HL
  336.                 LD (HL),1
  337.                 AND A
  338.                 JR Z,LOADFDI2
  339.                 LD (HL),2
  340.                 DEC A
  341.                 JR Z,LOADFDI2
  342.                 LD (HL),4
  343.                 DEC A
  344.                 JR Z,LOADFDI2
  345.                 LD (HL),8
  346. LOADFDI2        EX DE,HL
  347.                 INC D
  348.                 REPT 5
  349.                 INC HL
  350.                 ENDM
  351.                 DJNZ LOADFDI4                   ;ВОЗВРАЩАЕМСЯ ДЛЯ ПРОДОЛЖЕНИЯ, ПОКА СЕКТОРА ДОРОЖКИ НЕ КОНЧАТСЯ
  352.                 LD D,0X40
  353.                 INC E
  354.                 DEC C
  355.                 JR NZ,LOADFDI3                  ;ВОЗВРАЩАЕМСЯ ДЛЯ ПРОДОЛЖЕНИЯ ПОКА НЕ КОНЧАТСЯ ДОРОЖКИ
  356.                 DEC HL
  357.                 BIT 1,H
  358.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  359.                 PUSH HL
  360.                 LD A,H
  361.                 AND 1
  362.                 LD B,A
  363.                 LD C,L
  364.                 LD A,IXH
  365.                 ADD A,A
  366.                 ADD A,B
  367.                 LD B,A
  368.                 LD HL,0
  369. START_DATA      EQU $-2
  370.                 AND A
  371.                 SBC HL,BC
  372.                 EX DE,HL
  373.                 POP HL
  374.                 LD A,D
  375.                 AND A
  376.                 JR Z,LOADFDI7
  377. LOADFDI8        INC H
  378.                 BIT 1,H
  379.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  380.                 DEC D
  381.                 JR NZ,LOADFDI8
  382. LOADFDI7        ADD HL,DE
  383.                 BIT 1,H
  384.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  385.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС НА НАЧАЛО НАЧАЛА СЕКТОРОВ
  386.                 LD DE,0XC000
  387.                 AND A
  388.                 SBC HL,DE
  389.                 LD (OSTAT_SECT),HL              ;СКОЛЬКО БАЙТ ПЕРЕНЕСТИ ИЗ ХВОСТА СЕКТОРА В БУФЕРЕ В НАЧАЛО СТРАНИЦЫ
  390.                 LD B,H
  391.                 LD C,L
  392.                 LD HL,0X200
  393.                 SBC HL,BC
  394.                 LD (NACH_SECT),HL               ;СКОЛЬКО БАЙТ ПЕРЕНЕСТИ ИЗ НАЧАЛА СЕКТОРА В БУФЕРЕ В КОНЕЦ СТРАНИЦЫ
  395.                 POP HL                          ;ВОССТАНОВИЛИ СДРЕС НАЧАЛА СЕКТОРОВ, ДАЛЕЕ ЗАГРУЗКА ВСЕХ СЕКТОРОВ В ПАМЯТЬ
  396. LOADFDI5        POP AF
  397.                 INC A
  398.                 CALL SET4MBPAGE
  399.                 PUSH AF
  400.                 BIT 1,H
  401.                 CALL NZ,LOAD1SECFDI
  402.                 EX AF,AF'
  403.                 LD DE,0X4000
  404.                 LD BC,0
  405. NACH_SECT       EQU $-2
  406.                 LDIR
  407.                 EX AF,AF'
  408.                 JP C,ELOAD_IMAGE
  409.                 EX DE,HL
  410.                 LD IXL,0X1F
  411.                 CALL COM_FAT
  412.                 DB Load_file
  413.                 JP C,ELOAD_IMAGE
  414.                 PUSH HL
  415.                 LD HL,0XC000
  416.                 PUSH HL
  417.                 LD IXL,1
  418.                 CALL COM_FAT
  419.                 DB Load_file
  420.                 POP HL
  421.                 POP DE
  422.                 LD BC,0
  423. OSTAT_SECT      EQU $-2
  424.                 LDIR
  425.                 JR LOADFDI5
  426.  
  427. LOADFDI_ERR     LD A,PAGE_RAMDISK
  428.                 CALL SET4MBPAGE
  429.                 LD HL,0X7FFF
  430.                 LD (HL),0
  431.                 DEC H
  432.                 LD (HL),0
  433.                 LD A,0XFA
  434.                 CALL SET4MBPAGE
  435.                 LD SP,(LD_FILE_SP)
  436.                 POP IY
  437.                 POP IX
  438.                 JP LDFDI_ERROR
  439.  
  440. CREATE_RAMTABL  PUSH IX
  441.                 PUSH IY
  442.                 LD (LD_FILE_SP),SP
  443.                 LD SP,ADR_CAT
  444. ;СОЗДАНИЕ ТАБЛИЦЫ ОПИСАТЕЛЯ ДЛЯ ЗАГРУЖЕННЫХ TRD И SCL ОБРАЗОВ
  445. END_LOAD_TRD    LD A,PAGE_RAMDISK+1             ;НУЖНА СТРАНИЦА ОТКУДА НАЧИНАЕТСЯ ЗАГРУЖЕННЫЙ ОБРАЗ
  446.                 CALL SET4MBPAGE
  447.                 LD HL,(0X48E1)                  ;ПЕРВЫЙ СВОБОДНЫЙ ТРЕК СЕКТОР
  448.                 LD A,L
  449.                 LD L,H
  450.                 LD H,0
  451.                 ADD HL,HL
  452.                 ADD HL,HL
  453.                 ADD HL,HL
  454.                 ADD HL,HL
  455.                 OR L
  456.                 LD L,A                          ;КОЛИЧЕСТВО ЗАНЯТЫХ СЕКТОРОВ С ДИРЕКТОРИЕЙ
  457.                 LD DE,(0X48E5)                  ;КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
  458.                 ADD HL,DE
  459.                 ADD HL,HL
  460.                 ADD HL,HL
  461.                 ADD HL,HL
  462.                 ADD HL,HL                       ;H=КОЛИЧЕСТВО ДОРОЖЕК
  463.                 LD A,H
  464.                 CP 0XA0
  465.                 JR NC,ELT3
  466.                 LD A,0XA0
  467. ELT3            EX AF,AF'
  468.                 LD A,PAGE_RAMDISK               ;НУЖНА СТРАНИЦА НАЧАЛА РАМДИСКА, ГДЕ БУДЕТ ТАБЛИЦА ОПИСАТЕЛЕЙ
  469.                 CALL SET4MBPAGE
  470.                 LD HL,0X4000
  471.                 PUSH HL
  472.                 LD DE,0X4001
  473.                 LD BC,0X3FFF
  474.                 LD (HL),L
  475.                 LDIR                            ;ОЧИСТИЛИ СТРАНИЦУ
  476.                 POP DE                          ;АДРЕС НАЧАЛА
  477.                 LD HL,0                         ;СМЕЩЕНИЕ В БЛОКАХ И СТРАНИЦАХ
  478.                 EX AF,AF'
  479. ELT2            EX AF,AF'
  480.                 LD BC,0X1000                    ;СЧЕТЧИК НОМЕРОВ СЕКТОРОВ И ИХ НОМЕРА
  481.                 LD A,L
  482.                 RRCA
  483.                 RRCA
  484.                 LD (DE),A                       ;СМЕЩЕНИЕ В БЛОКАХ ДОРОЖКИ В СТРАНИЦЕ
  485.                 INC D
  486.                 LD A,H
  487.                 LD (DE),A                       ;СМЕЩЕНИЕ В СТРАНИЦАХ ДО ДОРОЖКИ
  488.                 INC D
  489. ELT1            INC C
  490.                 LD A,C
  491.                 LD (DE),A                       ;НОМЕР СЕКТОРА
  492.                 INC D
  493.                 LD A,2
  494.                 LD (DE),A                       ;РАЗМЕР СЕКТОРА
  495.                 INC D
  496.                 DJNZ ELT1                       ;ВНОСИМ В ТАБЛИЦУ ВСЕ НОМЕРА СЕКТОРОВ С РАЗМЕРАМИ
  497.                 LD D,0X40                       ;ВЕРНУЛИ УКАЗАТЕЛЬ В НАЧАЛО
  498.                 INC E                           ;ДЛЯ СЛЕДУЮЩЕЙ ДОРОЖКИ
  499.                 LD BC,0X40
  500.                 ADD HL,BC                       ;ПЕРЕХОД К СЛЕДУЮЩЕЙ ДОРОЖКЕ
  501.                 EX AF,AF'
  502.                 DEC A
  503.                 JR NZ,ELT2                      ;ПОВТОРЯЕМ ДЛЯ ВСЕХ ДОРОЖЕК
  504. ;ОБЩИЙ ВЫХОД ИЗ ЗАГРУЗКИ С ВОЗВРАТОМ СТАНДАРТНОЙ СТРАНИЦЫ В ОКНЕ ПРОЕЦИРОВАНИЯ 1
  505. ELOAD_IMAGE     LD A,PAGE_RAMDISK
  506.                 CALL SET4MBPAGE
  507.                 LD HL,0X7FFF
  508.                 LD (HL),"R"
  509.                 DEC H
  510.                 LD (HL),"D"
  511.                 LD A,0XFA
  512.                 CALL SET4MBPAGE
  513.                 LD SP,0
  514. LD_FILE_SP      EQU $-2
  515.                 POP IY
  516.                 POP IX
  517.                 RET
  518.  
  519. ;ЗАГРУЗКА СЛЕДУЮЩЕГО СЕКТОРА ЗАГОЛОВКА FDI
  520. LOAD1SECFDI     PUSH HL
  521.                 PUSH BC
  522.                 PUSH DE
  523.                 PUSH AF
  524.                 LD HL,0XC000
  525.                 LD IXL,1
  526.                 CALL COM_FAT
  527.                 DB Load_file
  528.                 INC IXH
  529.                 POP AF
  530.                 POP DE
  531.                 POP BC
  532.                 POP HL
  533.                 RES 1,H
  534.                 RET
  535.  
  536. ;ВКЛЮЧЕНИЕ В 1 ОКНО ПРОЕЦИРОВАНИЯ ЗАДАННОЙ СТРАНИЦЫ
  537. SET4MBPAGE      PUSH BC
  538.                 LD B,A
  539.                 PEC_ON SHADOW_BF
  540. ;               LD A,1
  541. ;               OUT (PEVO_CONF),A
  542.                 LD A,B
  543.                 LD BC,WIN_P5
  544.                 OUT (C),A
  545.                 LD B,A
  546.                 PEC_OFF SHADOW_BF
  547. ;               XOR A
  548. ;               OUT (PEVO_CONF),A
  549.                 LD A,B
  550.                 POP BC
  551.                 RET
  552.  
  553. LOAD_IMAGE      DI
  554.                 CP "R"
  555.                 LD HL,FLASHER
  556.                 JR Z,LOAD_IMAGE8
  557.                 LD HL,RESTART
  558. LOAD_IMAGE8     PUSH HL
  559.                 PUSH IX
  560.                 PUSH IY
  561.                 LD (LD_FILE_SP),SP
  562.                 LD SP,ADR_CAT
  563.                 CP "S"                          ;ЭТО SCL ФАЙЛ?
  564.                 JR Z,LOAD_IMAGE2
  565.                 CP "F"                          ;ЭТО FDI ФАЙЛ?
  566.                 JP Z,LOAD_FDI
  567.                 CP "T"                          ;ЭТО TRD ФАЙЛ?
  568.                 JR NZ,LOAD_ROM
  569.                 LD A,PAGE_RAMDISK+1
  570. ;ЗАГРУЗКА TRD ОБРАЗА
  571. LOAD_IMAGE1     PUSH AF
  572.                 CALL SET4MBPAGE
  573.                 LD HL,0X4000
  574.                 LD IXL,0X20
  575.                 CALL COM_FAT
  576.                 DB Load_file
  577.                 JP C,END_LOAD_TRD;ELOAD_IMAGE
  578.                 POP AF
  579.                 INC A
  580.                 JR LOAD_IMAGE1
  581.  
  582. LOAD_ROM        CP "R"                          ;ЭТО ROM ФАЙЛ?
  583.                 JP NZ,ELOAD_IMAGE
  584.                 LD A,PAGE4FLASHER
  585.                 JR LOAD_IMAGE1
  586.  
  587. ;ЗАГРУЗКА SCL ОБРАЗА
  588. LOAD_IMAGE2     LD HL,DSKINFO
  589.                 LD DE,ADR_CAT+0XF00
  590.                 LD BC,DSK_END-DSKINFO
  591.                 LDIR                            ;СОХРАНЕНИЕ ИНФЫ ДЛЯ СОЗДАНИЯ ЗАГОЛОВКА ДИСКЕТЫ
  592.                 LD A,PAGE_RAMDISK+1
  593. LOAD_IMAGE4     PUSH AF
  594.                 CALL SET4MBPAGE                 ;ВКЛЮЧИЛИ ПЕРВУЮ СТРАНИЦУ ОТКУДА РАМДИСК НАЧИНАЕТСЯ
  595.                 LD HL,0X5000
  596.                 LD IXL,0X18
  597.                 CALL COM_FAT                    ;ЗАГРУЗИЛИ ПЕРВЫЕ 0X18 СЕКТОРОВ SCL ОБРАЗА
  598.                 DB Load_file           
  599.                 PUSH AF                         ;СОХРАНИЛИ ФЛАГ ОКОНЧАНИЯ ЗАГРУЗКИ НА СЛУЧАЙ ОКОНЧАНИЯ ОБРАЗА
  600.                 LD HL,0X4000
  601.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС НАЧАЛА КАТАЛОГА
  602.                 LD (HL),L
  603.                 LD D,H
  604.                 LD E,L
  605.                 INC DE
  606.                 LD BC,0XFFF
  607.                 LDIR                            ;ЗАЧИСТКА ОБЛАСТИ ПЕРВОЙ ДОРОЖКИ ДЛЯ ФОРМИРОВАНИЯ КАТАЛОГА ДИСКА
  608.                 LD HL,0X5008                    ;АДРЕС КОЛИЧЕСТВА ФАЙЛОВ В SCL ОБРАЗЕ
  609.                 LD A,(HL)                       ;ВЗЯЛИ КОЛИЧЕСТВО ФАЙЛОВ КАК СЧЕТЧИК
  610.                 INC HL                          ;ПЕРЕШЛИ НА ПЕРВЫЙ ОПИСАТЕЛЬ ФАЙЛА
  611.                 EXX
  612.                 LD HL,0                         ;НОМЕР АБСОЛЮТНОГО СЕКТОРА
  613.                 LD D,L                          ;ПРИРАЩЕНИЕ СЕКТОРОВ НЕ МОЖЕТ БЫТЬ БОЛЕЕ 255 СЕКТОРОВ
  614.                 LD B,A                          ;СОХРАНЕНИЕ КОЛИЧЕСТВА ФАЙЛОВ
  615.                 EXX
  616.                 POP DE                          ;ВЕРНУЛИ АДРЕС НАЧАЛА КАТАЛОГА ДИСКА
  617. LOAD_IMAGE3     EX AF,AF'
  618.                 LD BC,0X0D
  619.                 LDIR                            ;ПЕРЕНЕСЛИ 13 БАЙТ ТЕЛА ОПИСАТЕЛЯ
  620.                 LD A,(HL)                       ;ЗАБРАЛИ РАЗМЕР ФАЙЛА В СЕКТОРАХ
  621.                 LDI                             ;ПЕРЕНЕСЛИ ЕЩЕ БАЙТ
  622.                 EXX
  623.                 LD E,A
  624.                 PUSH HL                         ;СОХРАНИЛИ ТЕКЩЕЕ ЗНАЧЕНИЕ НОМЕРА СЕКТОРА
  625.                 ADD HL,DE                       ;УВЕЛИЧИЛИ ТЕКЩЕЕ ЗНАЧЕНИЕ НА РАЗМЕР ФАЙЛА В СЕКТОРАХ
  626.                 EXX
  627.                 EX (SP),HL
  628.                 LD A,L
  629.                 ADD HL,HL
  630.                 ADD HL,HL
  631.                 ADD HL,HL
  632.                 ADD HL,HL
  633.                 INC H
  634.                 AND 0X0F
  635.                 LD L,A
  636.                 EX (SP),HL
  637.                 POP BC                          ;ВОССТАНОВИЛИ ТЕКЩИЙ НОМЕР СЕКТОРА
  638.                 EX DE,HL
  639.                 LD (HL),C
  640.                 INC HL
  641.                 LD (HL),B                       ;УЛОЖИЛИ ПОСЛЕ ТЕКУЩЕГО ОПИСАТЕЛЯ
  642.                 INC HL
  643.                 EX DE,HL
  644.                 EX AF,AF'
  645.                 DEC A
  646.                 JR NZ,LOAD_IMAGE3               ;ЕСЛИ ФАЙЛЫ НЕ КОНЧИЛИСЬ ПРОДОЛЖАЕМ
  647.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС НАЧАЛА ДАННЫХ
  648.                 LD HL,ADR_CAT+0XF00
  649.                 LD DE,0X48E1
  650.                 LD BC,DSK_END-DSKINFO
  651.                 LDIR
  652.                 EXX
  653.                 LD DE,2544                      ;СТАНДАРТНЫЙ РАЗМЕР ДИСКЕТЫ
  654.                 EX DE,HL
  655.                 AND A
  656.                 SBC HL,DE
  657.                 LD (0X48E5),HL                  ;КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
  658.                 EX DE,HL
  659.                 LD A,L
  660.                 ADD HL,HL
  661.                 ADD HL,HL
  662.                 ADD HL,HL
  663.                 ADD HL,HL
  664.                 INC H
  665.                 AND 0X0F
  666.                 LD L,A
  667.                 LD (0X48E1),HL                  ;ПЕРВЫЙ СВОБОДНЫЙ ТРЕК И СЕКТОР
  668.                 LD A,B
  669.                 LD (0X48E4),A                   ;КОЛИЧЕСТВО ФАЙЛОВ НА ДИСКЕ
  670.                 EXX
  671.                 POP DE                          ;ВОССТАНОВЛЕНИЕ АДРЕСА НАЧАЛА ДАННЫХ
  672.                 LD HL,0X8000                    ;КОНЕЦ ОКНА ПРОЕЦИРОВАНИЯ
  673.                 AND A
  674.                 SBC HL,DE                       ;ПОЛУЧИЛИ КОЛИЧЕСТВО БАЙТ ДЛЯ СДВИГА
  675.                 LD B,H
  676.                 LD C,L
  677.                 LD HL,0X5000                    ;НАЧАЛО ДАННЫХ НА РАМДИСКЕ
  678.                 EX DE,HL
  679.                 LDIR                            ;СДВИНУЛИ, ПОСЛЕ ПЕРЕНОСА DE=АДРЕС КУДА ДАЛЕЕ ГРУЗИТЬ
  680.                 LD A,D
  681.                 CP 0X7E
  682.                 JR NC,LOAD_IMAGE7
  683.                 EX DE,HL
  684.                 SRL A
  685.                 LD IXL,A
  686.                 CALL COM_FAT
  687.                 DB Load_file
  688.                 LD DE,0X8000
  689.                 EX DE,HL
  690. LOAD_IMAGE7     AND A
  691.                 SBC HL,DE                       ;ПОЛУЧИЛИ СКОЛЬКО БАЙТ ОСТАЛОСЬ ДО КОНЦА ОКНА
  692.                 LD (OST_HWOST),HL
  693.                 LD (KUDA_HWOST),DE
  694.                 LD DE,0
  695.                 EX DE,HL
  696.                 SBC HL,DE
  697.                 LD A,1
  698.                 AND H
  699.                 LD H,A
  700.                 LD (NEXT4PAGE),HL
  701.                 POP AF                          ;ВОССТАНОВИЛИ ФЛАГ ПОСЛЕДНЕЙ ЗАГРУЗКИ
  702.                 JP C,END_LOAD_TRD;ELOAD_IMAGE           ;ЕСЛИ ФАЙЛ УЖЕ КОНЧИЛСЯ, ТО ВЫХОД
  703.                 JR LOAD_IMAGE5
  704.  
  705. LOAD_IMAGE6     LD DE,0X4000
  706.                 LD BC,0
  707. NEXT4PAGE       EQU $-2
  708.                 LDIR
  709.                 EX AF,AF'
  710.                 JP C,END_LOAD_TRD;ELOAD_IMAGE
  711.                 EX DE,HL
  712.                 LD IXL,0X1F
  713.                 CALL COM_FAT
  714.                 DB Load_file
  715.                 JP C,END_LOAD_TRD;ELOAD_IMAGE
  716. LOAD_IMAGE5     LD HL,ADR_CAT
  717.                 PUSH HL
  718.                 LD IXL,1
  719.                 CALL COM_FAT
  720.                 DB Load_file
  721.                 EX AF,AF'                       ;СПРЯТАЛИ ФЛАГ ЗАГРУЗКИ СЕКТОРА
  722.                 POP HL                          ;ВОССТАНОВИЛИ АДРЕС КУДА СЕКТОР В БУФЕР ЗАГРУЗИЛИ
  723.                 LD DE,0
  724. KUDA_HWOST      EQU $-2                         ;КУДА ЛОЖИТ ОСТАТОК В ОКНЕ
  725.                 LD BC,0
  726. OST_HWOST       EQU $-2                         ;СКОЛЬКО ПЕРЕНОСИТЬ В КОНЕЦ СТРАНИЦЫ
  727.                 LDIR
  728.                 POP AF
  729.                 INC A
  730.                 PUSH AF
  731.                 CALL SET4MBPAGE
  732.                 JR LOAD_IMAGE6
  733.  
  734. ;ПРОВЕРКА ЗАГОЛОВКА HOBETA ФАЙЛА
  735. ;НА ВЫХОДЕ: ФЛАГ С=1-НЕ СООТВЕСТВУЕТ
  736. CMP4HOBETA      SUB 1
  737.                 RET NZ
  738.                 LD A,(BUF_512+8)
  739.                 CP "C"                          ;ПРОВЕРКА ЧТО ЭТО КОДОВЫЙ БЛОК, А НЕ ЧТО-ТО ДРУГОЕ
  740.                 SCF
  741.                 RET NZ
  742.                 PUSH DE                         ;СОХРАНИЛИ АДРЕС СКЛАДИРОВАНИЯ ДЛЯ ДАЛЬНЕЙШЕЙ ПРОВЕРКИ
  743.                 LD B,H
  744.                 LD C,L                          ;ВОЗВРАЩАЕМСЯ В НАЧАЛО СЕКТОРА
  745.                 CALL HOB_CRC                    ;СЧИТАЕМ CRC HOBETA ЗАГОЛОВКА
  746.                 LD A,(BC)
  747.                 INC BC
  748.                 LD E,A
  749.                 LD A,(BC)
  750.                 LD D,A                          ;В "DE" РАССЧИТАННОЕ CRC ХОБЕТА ЗАГОЛОВКА
  751.                 AND A                           ;В "HL" ВЗЯТОЕ ИЗ СМЕЩЕНИЯ +0X0F ОТ НАЧАЛА ФАЙЛА
  752.                 SBC HL,DE                       ;СРАВНИВАЕМ
  753.                 POP DE                          ;ЕСЛИ НЕ СОВПАЛО ТО ВОЗМОЖНО ЭТО НЕ ХОБЕТА
  754.                 SCF
  755.                 RET NZ                          ;ПРОПУСКАЕМ ФАЙЛ
  756.                 EXX
  757.                 LD HL,(BUF_512+9)               ;ВЗЯЛИ АДРЕС ЗАГРУЗКИ
  758.                 DEC HL                          ;ДЛЯ ЗАГРУЗКИ МАСИМУМ 40960 БАЙТ (160 СЕКТОРОВ)
  759.                 LD DE,(BUF_512+0X0B)            ;ВЗЯЛИ ДЛИНУ КОДОВОГО БЛОКА
  760.                 ADD HL,DE                       ;ПРОВЕРЯЕМ ВЫХОД ЗА ПРЕДЕЛЫ ОЗУ
  761.                 EXX                             ;ЕСЛИ ВЫЛЕТ ЗА ПРЕДЕЛ ОЗУ
  762.                 RET C                           ;ПРОПУСКАЕМ ФАЙЛ
  763.                 EXX
  764.                 LD HL,(BUF_512+9)
  765.                 LD DE,0X6000                    ;ПРОВЕРЯЕМ АДРЕС ЗАГРУЗКИ
  766.                 AND A                           ;АДРЕС ЗАГРУЗКИ НЕ ДОЛЖЕН БЫТЬ НИЖЕ 0X6000
  767.                 SBC HL,DE
  768.                 EXX                             ;ЕСЛИ АДРЕС ЗАГРУЗКИ НИЖЕ 0X6000
  769.                 RET
  770.  
  771. ;НА ВХОДЕ: BC-АДРЕС ЗАГОЛОВКА
  772. ;НА ВЫХОДЕ: HL-HOBETA CRC
  773. HOB_CRC         LD A,0X0F
  774.                 LD HL,0
  775.                 EXX
  776.                 LD E,0
  777.                 EXX
  778. HOBCRC1         EX AF,AF'
  779.                 LD A,(BC)
  780.                 LD E,A
  781.                 LD D,A
  782.                 ADD HL,DE
  783.                 EXX
  784.                 LD A,E
  785.                 INC E
  786.                 EXX
  787.                 LD E,A
  788.                 LD D,0
  789.                 ADD HL,DE
  790.                 EX AF,AF'
  791.                 INC BC
  792.                 DEC A
  793.                 JR NZ,HOBCRC1
  794.                 RET
  795.  
  796. CMP4ROMS        EXX
  797.                 LD A,B
  798.                 OR D
  799.                 OR E
  800.                 JR NZ,CMP4IMAGE2
  801.                 LD A,C
  802.                 CP 8
  803.                 JR NZ,CMP4IMAGE2
  804.                 EXX
  805. CMP4ROMS1       AND A
  806.                 RET
  807.  
  808. CMP4IMAGE2      EXX
  809.                 SCF
  810.                 RET
  811.  
  812. CMP4FDI         PUSH HL
  813.                 EXX
  814.                 POP HL
  815.                 LD A,(HL)
  816.                 CP "F"
  817.                 JR NZ,CMP4IMAGE2
  818.                 INC HL
  819.                 LD A,(HL)
  820.                 CP "D"
  821.                 JR NZ,CMP4IMAGE2
  822.                 INC HL
  823.                 LD A,(HL)
  824.                 CP "I"
  825.                 JR NZ,CMP4IMAGE2
  826.                 INC HL
  827.                 INC HL
  828.                 LD A,(HL)                       ;КОЛИЧЕСТВО ЦИЛИНДРОВ
  829.                 CP 0X57
  830.                 JR NC,CMP4IMAGE2
  831.                 INC HL
  832.                 LD A,(HL)                       ;ДОЛЖЕН БЫТЬ 0
  833.                 AND A
  834.                 JR NZ,CMP4IMAGE2
  835.                 INC HL
  836.                 LD A,(HL)                       ;КОЛИЧЕСТВО СТОРОН
  837.                 AND A
  838.                 JR Z,CMP4IMAGE2
  839.                 CP 3
  840.                 JR NC,CMP4IMAGE2
  841.                 INC HL
  842.                 LD A,(HL)                       ;ДОЛЖНО БЫТЬ 0
  843.                 AND A
  844.                 JR NZ,CMP4IMAGE2
  845.                 EXX
  846.                 AND A
  847.                 RET
  848.  
  849. CMP4IMAGE       CP 3
  850.                 JR Z,CMP4FDI
  851.                 SUB 1
  852.                 RET Z                           ;ДЛЯ TRD ПРОВЕРКА НЕ НУЖКА
  853. ;ДЛЯ SCL ПРОВЕРКА НАЛИЧИЯ СЛОВА "SINCLAIR" В ПЕРВЫХ 8 БАЙТАХ
  854.                 PUSH HL
  855.                 EXX
  856.                 POP HL
  857.                 LD DE,SIGN_SCL
  858.                 LD B,8
  859. CMP4IMAGE1      LD A,(DE)
  860.                 CP (HL)
  861.                 JR NZ,CMP4IMAGE2
  862.                 INC DE
  863.                 INC HL
  864.                 DJNZ CMP4IMAGE1
  865.                 EXX
  866.                 AND A
  867.                 RET
  868.  
  869. SEARCH_FILE     LD DE,ADR_CAT                   ;АДРЕС КУДА СКЛАДИРОВАТЬ НОМЕРА НАЙДЕННОГО
  870.                 LD HL,0                         ;ГДЕ СПИСОК РАСШИРЕНИЙ ДЛЯ ПОИСКА
  871. GDE_EXT_FILES   EQU $-2
  872.                 CALL COM_FAT
  873.                 DB Find_file                    ;ПОИСК ФАЙЛОВ ПО ЗАДАННОМУ РАСШИРЕНИЮ
  874.                 RET Z
  875.                 JR SEARCHF2
  876.  
  877. SEARCHF1        CALL COM_FAT
  878.                 DB Next_find
  879.                 RET Z
  880. SEARCHF2        CALL 0
  881. CMP_FOUNDED     EQU $-2
  882.                 RLA
  883.                 AND 1
  884.                 JR SEARCHF1
  885.  
  886. ;ПРОШИВАТЕЛЬ ПЗУ И ИНДИКАЦИЕЙ ПРОЦЕССА
  887. FLASHER         LD IX,ERASE_ROM
  888.                 CALL WINW
  889.                 LD (FLASH_SP),SP
  890.                 LD SP,ADR_CAT
  891.                 PEC_ON SHADOW_BF+FLASH_BF
  892. ;               LD A,3
  893. ;               OUT (PEVO_CONF),A
  894.                 LD A,3
  895.                 CALL SETWIN_INDICAT
  896.                 LD E,0
  897.                 LD HL,0
  898. FLASHER4        CALL ERASE_BLK
  899.                 LD A,0XFA
  900.                 EX AF,AF'
  901.                 CALL INC_INDICAT
  902.                 INC E
  903.                 BIT 3,E
  904.                 JR Z,FLASHER4
  905.                 LD A,0XFF
  906.                 LD BC,WIN_P3;0XF7F7
  907.                 OUT (C),A
  908.                 LD IX,UPDATE_WIN
  909.                 CALL WINW
  910.                 LD A,PAGE4FLASHER
  911.                 LD E,0
  912. FLASHER3        LD HL,0
  913.                 PUSH AF
  914.                 LD A,0XFA
  915.                 LD BC,WIN_P5;0X77F7
  916.                 OUT (C),A
  917.                 LD A,E
  918.                 ADD A,2
  919.                 CALL SETWIN_INDICAT
  920.                 POP AF
  921. FLASHER2        PUSH AF
  922.                 LD BC,WIN_P5;0X77F7
  923.                 OUT (C),A
  924.                 EX AF,AF'
  925.                 PUSH IX
  926.                 LD IX,0X4000
  927. FLASHER1        LD A,(IX)
  928.                 CALL PGM_BYTE
  929.                 INC IX
  930.                 INC HL
  931.                 LD A,H
  932.                 AND 0X0F
  933.                 OR L
  934.                 CALL Z,INC_INDICAT
  935.                 LD A,IXH
  936.                 AND 0X80
  937.                 JR Z,FLASHER1
  938.                 POP IX
  939.                 POP AF
  940.                 INC A
  941.                 LD D,A
  942.                 LD A,H
  943.                 AND A
  944.                 LD A,D
  945.                 JR NZ,FLASHER2
  946.                 INC E
  947.                 BIT 3,E
  948.                 JR Z,FLASHER3
  949. EFLASHER        LD A,0XFA
  950.                 LD BC,WIN_P5;0X77F7
  951.                 OUT (C),A
  952.                 LD BC,WIN_A3;0XFFF7
  953.                 LD A,0XFF
  954.                 OUT (C),A
  955.                 PEC_OFF SHADOW_BF+FLASH_BF
  956. ;               XOR A
  957. ;               OUT (PEVO_CONF),A
  958.                 LD SP,0
  959. FLASH_SP        EQU $-2
  960.                 JP RESTART
  961.