Subversion Repositories pentevo

Rev

Rev 585 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. ;LAST UPDATE: 30.12.2010 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 3,(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.                 LD A,1
  540.                 OUT (PEVO_CONF),A
  541.                 LD A,B
  542.                 LD BC,WIN_P1
  543.                 OUT (C),A
  544.                 LD B,A
  545.                 XOR A
  546.                 OUT (PEVO_CONF),A
  547.                 LD A,B
  548.                 POP BC
  549.                 RET
  550.  
  551. LOAD_IMAGE      DI
  552.                 CP "R"
  553.                 LD HL,FLASHER
  554.                 JR Z,LOAD_IMAGE8
  555.                 LD HL,RESTART
  556. LOAD_IMAGE8     PUSH HL
  557.                 PUSH IX
  558.                 PUSH IY
  559.                 LD (LD_FILE_SP),SP
  560.                 LD SP,ADR_CAT
  561.                 CP "S"                          ;ЭТО SCL ФАЙЛ?
  562.                 JR Z,LOAD_IMAGE2
  563.                 CP "F"                          ;ЭТО FDI ФАЙЛ?
  564.                 JP Z,LOAD_FDI
  565.                 CP "T"                          ;ЭТО TRD ФАЙЛ?
  566.                 JR NZ,LOAD_ROM
  567.                 LD A,PAGE_RAMDISK+1
  568. ;ЗАГРУЗКА TRD ОБРАЗА
  569. LOAD_IMAGE1     PUSH AF
  570.                 CALL SET4MBPAGE
  571.                 LD HL,0X4000
  572.                 LD IXL,0X20
  573.                 CALL COM_FAT
  574.                 DB Load_file
  575.                 JP C,END_LOAD_TRD;ELOAD_IMAGE
  576.                 POP AF
  577.                 INC A
  578.                 JR LOAD_IMAGE1
  579.  
  580. LOAD_ROM        CP "R"                          ;ЭТО ROM ФАЙЛ?
  581.                 JP NZ,ELOAD_IMAGE
  582.                 LD A,PAGE4FLASHER
  583.                 JR LOAD_IMAGE1
  584.  
  585. ;ЗАГРУЗКА SCL ОБРАЗА
  586. LOAD_IMAGE2     LD HL,DSKINFO
  587.                 LD DE,ADR_CAT+0XF00
  588.                 LD BC,DSK_END-DSKINFO
  589.                 LDIR                            ;СОХРАНЕНИЕ ИНФЫ ДЛЯ СОЗДАНИЯ ЗАГОЛОВКА ДИСКЕТЫ
  590.                 LD A,PAGE_RAMDISK+1
  591. LOAD_IMAGE4     PUSH AF
  592.                 CALL SET4MBPAGE                 ;ВКЛЮЧИЛИ ПЕРВУЮ СТРАНИЦУ ОТКУДА РАМДИСК НАЧИНАЕТСЯ
  593.                 LD HL,0X5000
  594.                 LD IXL,0X18
  595.                 CALL COM_FAT                    ;ЗАГРУЗИЛИ ПЕРВЫЕ 0X18 СЕКТОРОВ SCL ОБРАЗА
  596.                 DB Load_file           
  597.                 PUSH AF                         ;СОХРАНИЛИ ФЛАГ ОКОНЧАНИЯ ЗАГРУЗКИ НА СЛУЧАЙ ОКОНЧАНИЯ ОБРАЗА
  598.                 LD HL,0X4000
  599.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС НАЧАЛА КАТАЛОГА
  600.                 LD (HL),L
  601.                 LD D,H
  602.                 LD E,L
  603.                 INC DE
  604.                 LD BC,0XFFF
  605.                 LDIR                            ;ЗАЧИСТКА ОБЛАСТИ ПЕРВОЙ ДОРОЖКИ ДЛЯ ФОРМИРОВАНИЯ КАТАЛОГА ДИСКА
  606.                 LD HL,0X5008                    ;АДРЕС КОЛИЧЕСТВА ФАЙЛОВ В SCL ОБРАЗЕ
  607.                 LD A,(HL)                       ;ВЗЯЛИ КОЛИЧЕСТВО ФАЙЛОВ КАК СЧЕТЧИК
  608.                 INC HL                          ;ПЕРЕШЛИ НА ПЕРВЫЙ ОПИСАТЕЛЬ ФАЙЛА
  609.                 EXX
  610.                 LD HL,0                         ;НОМЕР АБСОЛЮТНОГО СЕКТОРА
  611.                 LD D,L                          ;ПРИРАЩЕНИЕ СЕКТОРОВ НЕ МОЖЕТ БЫТЬ БОЛЕЕ 255 СЕКТОРОВ
  612.                 LD B,A                          ;СОХРАНЕНИЕ КОЛИЧЕСТВА ФАЙЛОВ
  613.                 EXX
  614.                 POP DE                          ;ВЕРНУЛИ АДРЕС НАЧАЛА КАТАЛОГА ДИСКА
  615. LOAD_IMAGE3     EX AF,AF'
  616.                 LD BC,0X0D
  617.                 LDIR                            ;ПЕРЕНЕСЛИ 13 БАЙТ ТЕЛА ОПИСАТЕЛЯ
  618.                 LD A,(HL)                       ;ЗАБРАЛИ РАЗМЕР ФАЙЛА В СЕКТОРАХ
  619.                 LDI                             ;ПЕРЕНЕСЛИ ЕЩЕ БАЙТ
  620.                 EXX
  621.                 LD E,A
  622.                 PUSH HL                         ;СОХРАНИЛИ ТЕКЩЕЕ ЗНАЧЕНИЕ НОМЕРА СЕКТОРА
  623.                 ADD HL,DE                       ;УВЕЛИЧИЛИ ТЕКЩЕЕ ЗНАЧЕНИЕ НА РАЗМЕР ФАЙЛА В СЕКТОРАХ
  624.                 EXX
  625.                 EX (SP),HL
  626.                 LD A,L
  627.                 ADD HL,HL
  628.                 ADD HL,HL
  629.                 ADD HL,HL
  630.                 ADD HL,HL
  631.                 INC H
  632.                 AND 0X0F
  633.                 LD L,A
  634.                 EX (SP),HL
  635.                 POP BC                          ;ВОССТАНОВИЛИ ТЕКЩИЙ НОМЕР СЕКТОРА
  636.                 EX DE,HL
  637.                 LD (HL),C
  638.                 INC HL
  639.                 LD (HL),B                       ;УЛОЖИЛИ ПОСЛЕ ТЕКУЩЕГО ОПИСАТЕЛЯ
  640.                 INC HL
  641.                 EX DE,HL
  642.                 EX AF,AF'
  643.                 DEC A
  644.                 JR NZ,LOAD_IMAGE3               ;ЕСЛИ ФАЙЛЫ НЕ КОНЧИЛИСЬ ПРОДОЛЖАЕМ
  645.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС НАЧАЛА ДАННЫХ
  646.                 LD HL,ADR_CAT+0XF00
  647.                 LD DE,0X48E1
  648.                 LD BC,DSK_END-DSKINFO
  649.                 LDIR
  650.                 EXX
  651.                 LD DE,2544                      ;СТАНДАРТНЫЙ РАЗМЕР ДИСКЕТЫ
  652.                 EX DE,HL
  653.                 AND A
  654.                 SBC HL,DE
  655.                 LD (0X48E5),HL                  ;КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
  656.                 EX DE,HL
  657.                 LD A,L
  658.                 ADD HL,HL
  659.                 ADD HL,HL
  660.                 ADD HL,HL
  661.                 ADD HL,HL
  662.                 INC H
  663.                 AND 0X0F
  664.                 LD L,A
  665.                 LD (0X48E1),HL                  ;ПЕРВЫЙ СВОБОДНЫЙ ТРЕК И СЕКТОР
  666.                 LD A,B
  667.                 LD (0X48E4),A                   ;КОЛИЧЕСТВО ФАЙЛОВ НА ДИСКЕ
  668.                 EXX
  669.                 POP DE                          ;ВОССТАНОВЛЕНИЕ АДРЕСА НАЧАЛА ДАННЫХ
  670.                 LD HL,0X8000                    ;КОНЕЦ ОКНА ПРОЕЦИРОВАНИЯ
  671.                 AND A
  672.                 SBC HL,DE                       ;ПОЛУЧИЛИ КОЛИЧЕСТВО БАЙТ ДЛЯ СДВИГА
  673.                 LD B,H
  674.                 LD C,L
  675.                 LD HL,0X5000                    ;НАЧАЛО ДАННЫХ НА РАМДИСКЕ
  676.                 EX DE,HL
  677.                 LDIR                            ;СДВИНУЛИ, ПОСЛЕ ПЕРЕНОСА DE=АДРЕС КУДА ДАЛЕЕ ГРУЗИТЬ
  678.                 LD A,D
  679.                 CP 0X7E
  680.                 JR NC,LOAD_IMAGE7
  681.                 EX DE,HL
  682.                 SRL A
  683.                 LD IXL,A
  684.                 CALL COM_FAT
  685.                 DB Load_file
  686.                 LD DE,0X8000
  687.                 EX DE,HL
  688. LOAD_IMAGE7     AND A
  689.                 SBC HL,DE                       ;ПОЛУЧИЛИ СКОЛЬКО БАЙТ ОСТАЛОСЬ ДО КОНЦА ОКНА
  690.                 LD (OST_HWOST),HL
  691.                 LD (KUDA_HWOST),DE
  692.                 LD DE,0
  693.                 EX DE,HL
  694.                 SBC HL,DE
  695.                 LD A,1
  696.                 AND H
  697.                 LD H,A
  698.                 LD (NEXT4PAGE),HL
  699.                 POP AF                          ;ВОССТАНОВИЛИ ФЛАГ ПОСЛЕДНЕЙ ЗАГРУЗКИ
  700.                 JP C,END_LOAD_TRD;ELOAD_IMAGE           ;ЕСЛИ ФАЙЛ УЖЕ КОНЧИЛСЯ, ТО ВЫХОД
  701.                 JR LOAD_IMAGE5
  702.  
  703. LOAD_IMAGE6     LD DE,0X4000
  704.                 LD BC,0
  705. NEXT4PAGE       EQU $-2
  706.                 LDIR
  707.                 EX AF,AF'
  708.                 JP C,END_LOAD_TRD;ELOAD_IMAGE
  709.                 EX DE,HL
  710.                 LD IXL,0X1F
  711.                 CALL COM_FAT
  712.                 DB Load_file
  713.                 JP C,END_LOAD_TRD;ELOAD_IMAGE
  714. LOAD_IMAGE5     LD HL,ADR_CAT
  715.                 PUSH HL
  716.                 LD IXL,1
  717.                 CALL COM_FAT
  718.                 DB Load_file
  719.                 EX AF,AF'                       ;СПРЯТАЛИ ФЛАГ ЗАГРУЗКИ СЕКТОРА
  720.                 POP HL                          ;ВОССТАНОВИЛИ АДРЕС КУДА СЕКТОР В БУФЕР ЗАГРУЗИЛИ
  721.                 LD DE,0
  722. KUDA_HWOST      EQU $-2                         ;КУДА ЛОЖИТ ОСТАТОК В ОКНЕ
  723.                 LD BC,0
  724. OST_HWOST       EQU $-2                         ;СКОЛЬКО ПЕРЕНОСИТЬ В КОНЕЦ СТРАНИЦЫ
  725.                 LDIR
  726.                 POP AF
  727.                 INC A
  728.                 PUSH AF
  729.                 CALL SET4MBPAGE
  730.                 JR LOAD_IMAGE6
  731.  
  732. ;ПРОВЕРКА ЗАГОЛОВКА HOBETA ФАЙЛА
  733. ;НА ВЫХОДЕ: ФЛАГ С=1-НЕ СООТВЕСТВУЕТ
  734. CMP4HOBETA      SUB 1
  735.                 RET NZ
  736.                 LD A,(BUF_512+8)
  737.                 CP "C"                          ;ПРОВЕРКА ЧТО ЭТО КОДОВЫЙ БЛОК, А НЕ ЧТО-ТО ДРУГОЕ
  738.                 SCF
  739.                 RET NZ
  740.                 PUSH DE                         ;СОХРАНИЛИ АДРЕС СКЛАДИРОВАНИЯ ДЛЯ ДАЛЬНЕЙШЕЙ ПРОВЕРКИ
  741.                 LD B,H
  742.                 LD C,L                          ;ВОЗВРАЩАЕМСЯ В НАЧАЛО СЕКТОРА
  743.                 CALL HOB_CRC                    ;СЧИТАЕМ CRC HOBETA ЗАГОЛОВКА
  744.                 LD A,(BC)
  745.                 INC BC
  746.                 LD E,A
  747.                 LD A,(BC)
  748.                 LD D,A                          ;В "DE" РАССЧИТАННОЕ CRC ХОБЕТА ЗАГОЛОВКА
  749.                 AND A                           ;В "HL" ВЗЯТОЕ ИЗ СМЕЩЕНИЯ +0X0F ОТ НАЧАЛА ФАЙЛА
  750.                 SBC HL,DE                       ;СРАВНИВАЕМ
  751.                 POP DE                          ;ЕСЛИ НЕ СОВПАЛО ТО ВОЗМОЖНО ЭТО НЕ ХОБЕТА
  752.                 SCF
  753.                 RET NZ                          ;ПРОПУСКАЕМ ФАЙЛ
  754.                 EXX
  755.                 LD HL,(BUF_512+9)               ;ВЗЯЛИ АДРЕС ЗАГРУЗКИ
  756.                 DEC HL                          ;ДЛЯ ЗАГРУЗКИ МАСИМУМ 40960 БАЙТ (160 СЕКТОРОВ)
  757.                 LD DE,(BUF_512+0X0B)            ;ВЗЯЛИ ДЛИНУ КОДОВОГО БЛОКА
  758.                 ADD HL,DE                       ;ПРОВЕРЯЕМ ВЫХОД ЗА ПРЕДЕЛЫ ОЗУ
  759.                 EXX                             ;ЕСЛИ ВЫЛЕТ ЗА ПРЕДЕЛ ОЗУ
  760.                 RET C                           ;ПРОПУСКАЕМ ФАЙЛ
  761.                 EXX
  762.                 LD HL,(BUF_512+9)
  763.                 LD DE,0X6000                    ;ПРОВЕРЯЕМ АДРЕС ЗАГРУЗКИ
  764.                 AND A                           ;АДРЕС ЗАГРУЗКИ НЕ ДОЛЖЕН БЫТЬ НИЖЕ 0X6000
  765.                 SBC HL,DE
  766.                 EXX                             ;ЕСЛИ АДРЕС ЗАГРУЗКИ НИЖЕ 0X6000
  767.                 RET
  768.  
  769. ;НА ВХОДЕ: BC-АДРЕС ЗАГОЛОВКА
  770. ;НА ВЫХОДЕ: HL-HOBETA CRC
  771. HOB_CRC         LD A,0X0F
  772.                 LD HL,0
  773.                 EXX
  774.                 LD E,0
  775.                 EXX
  776. HOBCRC1         EX AF,AF'
  777.                 LD A,(BC)
  778.                 LD E,A
  779.                 LD D,A
  780.                 ADD HL,DE
  781.                 EXX
  782.                 LD A,E
  783.                 INC E
  784.                 EXX
  785.                 LD E,A
  786.                 LD D,0
  787.                 ADD HL,DE
  788.                 EX AF,AF'
  789.                 INC BC
  790.                 DEC A
  791.                 JR NZ,HOBCRC1
  792.                 RET
  793.  
  794. CMP4ROMS        EXX
  795.                 LD A,B
  796.                 OR D
  797.                 OR E
  798.                 JR NZ,CMP4IMAGE2
  799.                 LD A,C
  800.                 CP 8
  801.                 JR NZ,CMP4IMAGE2
  802.                 EXX
  803. CMP4ROMS1       AND A
  804.                 RET
  805.  
  806. CMP4IMAGE2      EXX
  807.                 SCF
  808.                 RET
  809.  
  810. CMP4FDI         PUSH HL
  811.                 EXX
  812.                 POP HL
  813.                 LD A,(HL)
  814.                 CP "F"
  815.                 JR NZ,CMP4IMAGE2
  816.                 INC HL
  817.                 LD A,(HL)
  818.                 CP "D"
  819.                 JR NZ,CMP4IMAGE2
  820.                 INC HL
  821.                 LD A,(HL)
  822.                 CP "I"
  823.                 JR NZ,CMP4IMAGE2
  824.                 INC HL
  825.                 INC HL
  826.                 LD A,(HL)                       ;КОЛИЧЕСТВО ЦИЛИНДРОВ
  827.                 CP 0X57
  828.                 JR NC,CMP4IMAGE2
  829.                 INC HL
  830.                 LD A,(HL)                       ;ДОЛЖЕН БЫТЬ 0
  831.                 AND A
  832.                 JR NZ,CMP4IMAGE2
  833.                 INC HL
  834.                 LD A,(HL)                       ;КОЛИЧЕСТВО СТОРОН
  835.                 AND A
  836.                 JR Z,CMP4IMAGE2
  837.                 CP 3
  838.                 JR NC,CMP4IMAGE2
  839.                 INC HL
  840.                 LD A,(HL)                       ;ДОЛЖНО БЫТЬ 0
  841.                 AND A
  842.                 JR NZ,CMP4IMAGE2
  843.                 EXX
  844.                 AND A
  845.                 RET
  846.  
  847. CMP4IMAGE       CP 3
  848.                 JR Z,CMP4FDI
  849.                 SUB 1
  850.                 RET Z                           ;ДЛЯ TRD ПРОВЕРКА НЕ НУЖКА
  851. ;ДЛЯ SCL ПРОВЕРКА НАЛИЧИЯ СЛОВА "SINCLAIR" В ПЕРВЫХ 8 БАЙТАХ
  852.                 PUSH HL
  853.                 EXX
  854.                 POP HL
  855.                 LD DE,SIGN_SCL
  856.                 LD B,8
  857. CMP4IMAGE1      LD A,(DE)
  858.                 CP (HL)
  859.                 JR NZ,CMP4IMAGE2
  860.                 INC DE
  861.                 INC HL
  862.                 DJNZ CMP4IMAGE1
  863.                 EXX
  864.                 AND A
  865.                 RET
  866.  
  867. SEARCH_FILE     LD DE,ADR_CAT                   ;АДРЕС КУДА СКЛАДИРОВАТЬ НОМЕРА НАЙДЕННОГО
  868.                 LD HL,0                         ;ГДЕ СПИСОК РАСШИРЕНИЙ ДЛЯ ПОИСКА
  869. GDE_EXT_FILES   EQU $-2
  870.                 CALL COM_FAT
  871.                 DB Find_file                    ;ПОИСК ФАЙЛОВ ПО ЗАДАННОМУ РАСШИРЕНИЮ
  872.                 RET Z
  873.                 JR SEARCHF2
  874.  
  875. SEARCHF1        CALL COM_FAT
  876.                 DB Next_find
  877.                 RET Z
  878. SEARCHF2        CALL 0
  879. CMP_FOUNDED     EQU $-2
  880.                 RLA
  881.                 AND 1
  882.                 JR SEARCHF1
  883.  
  884. ;ПРОШИВАТЕЛЬ ПЗУ И ИНДИКАЦИЕЙ ПРОЦЕССА
  885. FLASHER         LD IX,ERASE_ROM
  886.                 CALL WINW
  887.                 LD (FLASH_SP),SP
  888.                 LD SP,ADR_CAT
  889.                 LD A,3
  890.                 OUT (PEVO_CONF),A
  891.                 LD A,3
  892.                 CALL SETWIN_INDICAT
  893.                 LD E,0
  894.                 LD HL,0
  895. FLASHER4        CALL ERASE_BLK
  896.                 LD A,0XFA
  897.                 EX AF,AF'
  898.                 CALL INC_INDICAT
  899.                 INC E
  900.                 BIT 3,E
  901.                 JR Z,FLASHER4
  902.                 LD A,0XFF
  903.                 LD BC,WIN_P3;0XF7F7
  904.                 OUT (C),A
  905.                 LD IX,UPDATE_WIN
  906.                 CALL WINW
  907.                 LD A,PAGE4FLASHER
  908.                 LD E,0
  909. FLASHER3        LD HL,0
  910.                 PUSH AF
  911.                 LD A,0XFA
  912.                 LD BC,WIN_P1;0X77F7
  913.                 OUT (C),A
  914.                 LD A,E
  915.                 ADD A,2
  916.                 CALL SETWIN_INDICAT
  917.                 POP AF
  918. FLASHER2        PUSH AF
  919.                 LD BC,WIN_P1;0X77F7
  920.                 OUT (C),A
  921.                 EX AF,AF'
  922.                 PUSH IX
  923.                 LD IX,0X4000
  924. FLASHER1        LD A,(IX)
  925.                 CALL PGM_BYTE
  926.                 INC IX
  927.                 INC HL
  928.                 LD A,H
  929.                 AND 0X0F
  930.                 OR L
  931.                 CALL Z,INC_INDICAT
  932.                 LD A,IXH
  933.                 AND 0X80
  934.                 JR Z,FLASHER1
  935.                 POP IX
  936.                 POP AF
  937.                 INC A
  938.                 LD D,A
  939.                 LD A,H
  940.                 AND A
  941.                 LD A,D
  942.                 JR NZ,FLASHER2
  943.                 INC E
  944.                 BIT 3,E
  945.                 JR Z,FLASHER3
  946.  
  947. EFLASHER        LD A,0XFA
  948.                 LD BC,WIN_P1;0X77F7
  949.                 OUT (C),A
  950.                 LD BC,WIN_A3;0XFFF7
  951.                 LD A,0XFF
  952.                 OUT (C),A
  953.                 XOR A
  954.                 OUT (PEVO_CONF),A
  955.                 LD SP,0
  956. FLASH_SP        EQU $-2
  957.                 JP RESTART
  958.