Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 28.07.2019 savelij
  3.  
  4. ;ЗАГРУЗКА ВЫБРАННОГО ШРИФТА
  5. LOAD_FONT       LD HL,FONTS
  6.                 LD DE,CMP4FONTS
  7.                 JR FATBOOT4
  8.  
  9. ;ЗАГРУЗКА TAP ФАЙЛА
  10. EMULTAPLOAD     LD HL,TAPES
  11.                 LD DE,CMP4TAPES
  12.                 JR FATBOOT4
  13.  
  14. ;ЗАГРУЗКА ПОЛНОГО ROM ФАЙЛА ДЛЯ ОБНОВЛЕНИЯ 512KB
  15. LOAD4FLASH_FULL LD HL,ROMS
  16.                 LD DE,CMP4ROMS
  17.                 LD A,8
  18.                 LD (CMP_ROMSIZE),A
  19.                 JR FATBOOT4
  20.  
  21. ;ЗАГРУЗКА USER ROM ФАЙЛА ДЛЯ ОБНОВЛЕНИЯ 64KB
  22. LOAD4FLASH_CUST LD HL,ROMS
  23.                 LD DE,CMP4ROMS
  24.                 LD A,1
  25.                 LD (CMP_ROMSIZE),A
  26.                 JR FATBOOT4
  27.  
  28. ;ЗАГРУЗКА ОБРАЗА НА РАМДИСК
  29. COPYIMAGE       LD HL,IMAGES
  30.                 LD DE,CMP4IMAGE
  31.                 JR FATBOOT4
  32.  
  33. ;ЗАГРУЗКА HOBETA ФАЙЛА ДЛЯ ЗАПУСКА
  34. FATBOOT         LD HL,HOBETA
  35.                 LD DE,CMP4HOBETA
  36. FATBOOT4        LD (GDE_EXT_FILES),HL
  37.                 LD (CMP_FOUNDED),DE
  38. SELECT_DEVICE   DI
  39.                 LD HL,ERS_FLAGS
  40.                 SET B_RUN_FAT,(HL)              ;РАБОТАТЬ БУДЕМ С FAT
  41. ;               RST 8
  42. ;               DB _COM_DEV                     ;ВЫЗОВ МЕНЕДЖЕРА УСТРОЙСТВ
  43. ;               DB _DEVFIND                     ;СКАНИРОВАНИЕ УСТРОЙСТВ
  44. ;               JP C,_STUPID                    ;ОШИБКА, НИ ОДНОГО РАЗДЕЛА НЕ НАЙДЕНО
  45.                 RST8 _COM_DEV,_KOL_VOL
  46.                 LD A,E
  47.                 AND A
  48.                 JP Z,_STUPID
  49.                 LD HL,ADR_CAT-0X100             ;АДРЕС КУДА ПОЛОЖИТЬ ТАБЛИЦУ НАЙДЕННЫХ РАЗДЕЛОВ
  50.                 RST8 _COM_DEV,_GET_FNDVOLUME    ;ПОЛУЧЕНИЕ ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ
  51.                 LD B,E                          ;СЧЕТЧИК КОЛИЧЕСТВА НАЙДЕННЫХ РАЗДЕЛОВ
  52.                 LD IX,SEL_FAT_DEV               ;АДРЕС ОПИСАТЕЛЯ ОКНА ВЫБОРА РАЗДЕЛОВ
  53.                 LD (IX+_NUM_PKT),D              ;НОМЕР ПУНКТА В ОКНЕ
  54.                 LD (IX+_TEK_PKT_L),D            ;НОМЕР ТЕКУЩЕГО ПУНКТА
  55.                 LD (IX+_NUM_KOL_L),E            ;КОЛИЧЕСТВО ПУНКТОВ В ОКНЕ
  56.                 INC E
  57.                 INC E
  58.                 LD (IX+_V_SIZE),E               ;УСТАНОВИЛИ ВЫСОТУ ВЫВОДИМОГО ОКНА
  59.                 LD DE,6                         ;ШАГ ПО ТАБЛИЦЕ НАЙДЕННЫХ РАЗДЕЛОВ -2
  60.                 EXX
  61.                 LD HL,TXT_FAT_SEL
  62.                 LD DE,SEL_FAT_DRV               ;АДРЕС ГДЕ БУДЕТ ФОРМИРОВАТЬСЯ ТЕКСТ ОКНА ВЫБОРА РАЗДЕЛОВ
  63.                 LD BC,ETXT_FAT_SEL-TXT_FAT_SEL
  64.                 LDIR
  65.                 EX DE,HL
  66.                 EXX
  67. FATBOOT1        EXX
  68.                 LD (HL),0X0D
  69.                 INC HL
  70.                 LD (HL),3
  71.                 INC HL
  72.                 EXX
  73.                 LD A,(HL)                       ;ВЗЯЛИ НОМЕР РАЗДЕЛА
  74.                 INC HL
  75.                 LD C,(HL)                       ;MASTER ИЛИ SLAVE
  76.                 INC HL
  77.                 ADD A,C
  78.                 ADD A,C
  79.                 SUB 4                           ;-4, ИБО ДИСКОВОДЫ НЕ УЧИТЫВАЮТСЯ
  80.                 EXX
  81.                 EX DE,HL
  82.                 LD HL,TXT4MENU_DEVICE           ;АДРЕС ТАБЛИЦЫ ТЕКСТА О РАЗДЕЛАХ
  83.                 LD C,A
  84.                 ADD A,A
  85.                 ADD A,A
  86.                 ADD A,C
  87.                 ADD A,A
  88.                 ADD A,A                         ;УМНОЖЕНО НА 20
  89.                 LD C,A
  90.                 LD B,0
  91.                 ADD HL,BC                       ;ПОЛУЧИЛИ АДРЕС ОТКУДА ТЕКСТ ВЗЯТЬ
  92.                 LD BC,20                        ;ДЛИНА ПЕРЕНОСА 20 БАЙТ
  93.                 EXX
  94.                 LD A,L
  95.                 EXX
  96.                 RRCA
  97.                 RRCA
  98.                 RRCA
  99.                 AND 0X1F
  100.                 ADD A,"E"                       ;БУКВА НАЙДЕННОГО УСТРОЙСТВА
  101.                 LD (DE),A
  102.                 INC DE
  103.                 LDIR                            ;ПЕРЕНОС ТЕКСТА ИЗ ВЫБРАННОЙ ТАБЛИЦЫ
  104.                 EXX
  105.                 LD A,(HL)                       ;ТИП РАЗДЕЛА
  106.                 EXX
  107.                 LD C,A
  108.                 ADD A,A
  109.                 ADD A,A
  110.                 ADD A,C                         ;УМНОЖЕННО НА 5
  111.                 LD HL,TXT4MENU_TYPE             ;АДРЕС ТАБЛИЦЫ ТЕКСТА ТИПОВ РАЗДЕЛОВ
  112.                 LD C,A
  113.                 ADD HL,BC
  114.                 LD C,5
  115.                 LDIR                            ;ПЕРЕНОС ТЕКСТА ИЗ ВЫБРАННОЙ ТАБЛИЦЫ
  116.                 EX DE,HL
  117.                 EXX
  118.                 ADD HL,DE
  119.                 DJNZ FATBOOT1
  120.                 EXX
  121.                 LD (HL),0
  122.                 INC HL
  123.                 LD B,(IX+_V_SIZE)
  124.                 DEC B
  125.                 DEC B
  126.                 LD C,B
  127.                 LD A,"E"
  128.                 LD (IX+_ADR_HOTKEY_L),L
  129.                 LD (IX+_ADR_HOTKEY_H),H         ;АДРЕС ТАБЛИЦЫ ГОРЯЧИХ КЛАВИШ ВЫБОРА FAT УСТРОЙСТВА
  130.                 LD (HL),B
  131.                 INC HL
  132. FATBOOT3        LD (HL),A                       ;ФОРМИРОВАНИЕ ТАБЛИЦЫ ГОРЯЧИХ КЛАВИШ
  133.                 INC HL
  134.                 INC A
  135.                 DJNZ FATBOOT3
  136.                 LD (SELFATDEVEXE),HL            ;ПОЛОЖИЛИ АДРЕС ТАБЛИЦЫ АДРЕСОВ ВЫЗОВА ВЫБРАННОГО
  137.                 LD B,C
  138. FATBOOT2        LD (HL),LOW (SEL_FAT)           ;ФОРМИРОВАНИЕ ТАБЛИЦЫ АДРЕСОВ ВЫЗЫВОВ
  139.                 INC HL
  140.                 LD (HL),HIGH (SEL_FAT)
  141.                 INC HL
  142.                 DJNZ FATBOOT2
  143.                 LD A,C
  144.                 EXX
  145.                 DEC A
  146.                 JR Z,SEL_FAT
  147.                 RST8 _WINW
  148.                 JP _RULILKA                     ;ВОЗВРАЩАЕМСЯ К ОБЩЕМУ УПРАВЛЕНИЮ
  149.  
  150. FILES_BROWSE    LD HL,SUPPORT_EXT
  151.                 LD DE,CMP4TAPES
  152.                 DI
  153.                 LD (GDE_EXT_FILES),HL
  154.                 LD (CMP_FOUNDED),DE
  155.                 LD HL,ERS_FLAGS
  156.                 SET B_RUN_FAT,(HL)
  157.                 JR SEL_FILES
  158.  
  159. ;ПЕРЕКЛЮЧЕНИЕ НА УСТРОЙСТВА И ВЫВОД НАЙДЕННОГО НА НЕМ
  160. SEL_FAT         DI
  161.                 LD A,(IX+_TEK_PKT_L)            ;ВЗЯЛИ НОМЕР ВЫБРАННОГО УСТРОЙСТВА
  162.                 RST8 _COM_DEV,_SET_VOL          ;ВЫБРАЛИ УСТРОЙСТВО ПО НОМЕРУ
  163. SEL_FILES       RST8 _COM_DEV,_KOL_VOL
  164.                 LD A,E
  165.                 AND A
  166.                 JP Z,_STUPID
  167.                 CALL SEARCH_FILE
  168.                 LD HL,1
  169.                 AND A
  170.                 SBC HL,BC                       ;НАЙДЕННО ЧТО-ТО ОДНО?
  171.                 JR NZ,SEL_FAT1                  ;ЕСЛИ НАЙДЕНО >1, ТО ПРОДОЛЖАЕМ
  172.                 PUSH BC                         ;СОХРАНИЛИ КОЛИЧЕСТВО НАЙДЕННОГО
  173.                 LD BC,(ADR_CAT_FAT)             ;ВЗЯЛИ НОМЕР ЕДИНСТВЕННОГО НАЙДЕННОГО
  174.                 LD A,6
  175.                 RST8 _COM_FAT,_POS_FILES
  176.                 LD HL,BUF_FILEITEM
  177.                 RST8 _COM_FAT,_READ_DIR         ;ПОЛУЧИЛИ ОПИСАТЕЛЬ
  178.                 POP BC                          ;ВЕРНУЛИ КОЛИЧЕСТВО НАЙДЕННОГО
  179.                 LD DE,0X0B
  180.                 ADD HL,DE
  181.                 LD A,(HL)                       ;ВЗЯЛИ ФЛАГОВЫЙ БАЙТ ТОГО ЧТО НАШЛИ
  182.                 AND 0X10
  183.                 LD HL,0                         ;ЕСЛИ ЗАПУСКАЕМ, ТО НОМЕР 0 ИЗ НАЙДЕННОГО
  184.                 JR Z,RUN_HOB1                   ;ЕСЛИ ЭТО ФАЙЛ СРАЗУ ЗАПУСКАЕМ
  185. SEL_FAT1        LD IX,FAT_FILES                 ;ЕСЛИ ДИРА, ТО ВЫВОДИМ В ОКНО
  186.                 JP OUT_HOB
  187.  
  188. ;ЗАПУСК ВЫБРАННОГО КОДОВОГО ФАЙЛА ИЗ HOBETA ФАЙЛА ИЛИ ВХОД/ВЫХОД В ДИРЫ
  189. RUN_HOB         DI
  190.                 CALL SHUT2AY                    ;БУМКАЛКА В AY
  191.                 LD L,(IX+_TEK_PKT_L)
  192.                 LD H,(IX+_TEK_PKT_H)            ;HL=НОМЕР ВЫБРАННОГО ФАЙЛА
  193. RUN_HOB1        LD DE,ADR_CAT_FAT
  194.                 ADD HL,HL
  195.                 ADD HL,DE                       ;ОТКУДА НОМЕР ФАЙЛА ВЗЯТЬ
  196.                 LD C,(HL)
  197.                 INC HL
  198.                 LD B,(HL)                       ;ПОЛУЧИЛИ ТЕКУЩИЙ ВЫБРАННЫЙ НОМЕР
  199.                 LD A,6
  200.                 RST8 _COM_FAT,_POS_FILES        ;УСТАНОВКА ВНУТРЕННЕГО УКАЗАТЕЛЯ FAT ДРАЙВЕРА
  201.                 LD HL,BUF_FILEITEM
  202.                 RST8 _COM_FAT,_READ_DIR         ;ПОЛУЧИЛИ ОПИСАТЕЛЬ ПО УСТАНОВЛЕННОМУ НОМЕРУ
  203.                 LD DE,0X0B                      ;НУЖЕН БАЙТ ПО СМЕЩЕНИЮ
  204.                 ADD HL,DE                       ;ДЛЯ ОПРЕДЕЛЕНИЯ ФАЙЛ ИЛИ ДИРЕКТОРИЯ
  205.                 LD A,(HL)                       ;ИЗ ЭТОГО БАЙТА НУЖЕН ОДИН БИТ
  206.                 SBC HL,DE
  207.                 AND 0X10                        ;ПРОВЕРИЛИ
  208.                 JP Z,GO_RUN_HOB                 ;ЕСЛИ ЭТО ФАЙЛ, ТО ЗАПУСКАЕМ КОДОВЫЙ БЛОК
  209.                 RST8 _COM_FAT,_ENTER_DIR        ;ВХОДИМ В ВЫБРАННУЮ ДИРЕКТОРИЮ
  210.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС ГДЕ ОПИСАТЕЛЬ ВЫБРАННОГО ФАЙЛА ЛЕЖИТ
  211.                 LD HL,BUF_RDPATH
  212.                 RST8 _COM_FAT,_GET_PATH         ;ПОЛУЧИТЬ ПУТЬ К ФАЙЛУ ПОСЛЕ ВХОДА В ДИРЕКТОРИЮ
  213.                 LD A,(HL)                       ;ВЗЯЛИ БУКВУ УСТРОЙСТВА ТЕКУЩЕГО ПУТИ
  214.                 SUB "E"                         ;ПРЕОБРАЗОВАЛИ В НОМЕР УСТРОЙСТВА
  215.                 LD D,A
  216.                 LD E,0
  217.                 LD HL,BUF_LEVDIR
  218.                 SRL D
  219.                 RR E
  220.                 SRL D
  221.                 RR E
  222.                 ADD HL,DE
  223.                 EX (SP),HL                      ;СОХРАНИЛИ АДРЕС ОПИСАТЕЛЯ FAT УСТРОЙСТВА, ВОССТАНОВИЛИ АДРЕС ОПИСАТЕЛЯ ФАЙЛА
  224.                 LD A,(HL)                       ;БУДЕМ ПРОВЕРЯТЬ ПЕРВЫЙ СИМВОЛ ИМЕНИ ПРЕДЫДУЩЕГО ОПИСАТЕЛЯ
  225.                 POP HL                          ;ВОССТАНОВИЛИ АДРЕС ОПИСАТЕЛЯ FAT УСТРОЙСТВА
  226.                 CP "."                          ;ЕСЛИ ПЕРВЫЙ СИМВОЛ ИМЕНИ НЕ ".", ТО СОХРАНЯЕМ ТЕКУЩИЕ ЗНАЧЕНИЯ ОКОШКА И  
  227.                 JR NZ,SNYT0                     ;ВХОДИМ В ДИРУ
  228.                 LD C,(HL)                       ;ПРИ ВЫХОДЕ ИЗ ДИРЕКТОРИИ ВОССТАНАВЛИВАЕМ ПОЗИЦИИ В ОКНЕ
  229.                 INC HL
  230.                 LD B,(HL)
  231.                 INC HL
  232.                 PUSH HL
  233.                 ADD HL,BC
  234.                 DEC HL
  235.                 LD A,(HL)
  236.                 DEC HL
  237.                 LD C,(HL)
  238.                 DEC HL
  239.                 LD B,(HL)
  240.                 POP DE
  241.                 AND A
  242.                 SBC HL,DE
  243.                 EX DE,HL
  244.                 DEC HL
  245.                 LD (HL),D
  246.                 DEC HL
  247.                 LD (HL),E
  248.                 LD (IX+_TEK_PKT_L),C
  249.                 LD (IX+_TEK_PKT_H),B
  250.                 LD (IX+_NUM_PKT),A
  251.                 CALL SEARCH_FILE                ;ПОИСК ПО МАСКЕ В ДИРЕКТОРИИ В КОТОРУЮ ВОШЛИ
  252.                 LD (IX+_NUM_KOL_L),C
  253.                 LD (IX+_NUM_KOL_H),B            ;УСТАНОВИЛИ КОЛИЧЕСТВО НАЙДЕННЫХ ПО МАСАКЕ ФАЙЛОВ В ЭТОЙ ДИРЕКТОРИИ
  254.                 JP REOUT_HOB                    ;ВЫВЕЛИ НОВОЕ СОДЕРЖИМОЕ ОКНА
  255.  
  256. ;ПРИ ВХОДЕ В ДИРУ СОХРАНЕНИЕ ТЕКУЩИХ ДАННЫХ ОКНА
  257. SNYT0           LD C,(HL)
  258.                 INC HL
  259.                 LD B,(HL)                       ;BC=СМЕЩЕНИЕ ДО ПЕРВОЙ СВОБОДНОЙ ЯЧЕЙКИ
  260.                 INC HL
  261.                 PUSH HL                         ;HL=АДРЕС НАЧАЛА САМИХ ЯЧЕЕК
  262.                 ADD HL,BC                       ;HL=АДРЕС ПЕРВОЙ СВОБОДНОЙ ЯЧЕЙКИ
  263.                 LD D,(IX+_TEK_PKT_H)
  264.                 LD E,(IX+_TEK_PKT_L)
  265.                 LD A,(IX+_NUM_PKT)
  266.                 LD (HL),D
  267.                 INC HL
  268.                 LD (HL),E
  269.                 INC HL
  270.                 LD (HL),A
  271.                 INC HL
  272.                 POP DE                          ;DE=АДРЕС НАЧАЛА САМИХ ЯЧЕЕК
  273.                 AND A
  274.                 SBC HL,DE
  275.                 EX DE,HL
  276.                 DEC HL
  277.                 LD (HL),D
  278.                 DEC HL
  279.                 LD (HL),E
  280.                 LD C,(IX+_NUM_KOL_L)
  281.                 LD B,(IX+_NUM_KOL_H)
  282.                 CALL SEARCH_FILE
  283.                 JP OUT_HOB
  284.  
  285. ;(ADR)-BCDE=BCDE
  286. BCDEHLM         LD A,(HL)
  287.                 INC HL
  288.                 SUB E
  289.                 LD E,A
  290.                 LD A,(HL)
  291.                 INC HL
  292.                 SBC A,D
  293.                 LD D,A
  294.                 LD A,(HL)
  295.                 INC HL
  296.                 SBC A,C
  297.                 LD C,A
  298.                 LD A,(HL)
  299.                 SBC A,B
  300.                 LD B,A
  301.                 RET
  302.  
  303. SELMOUNT        LD HL,BUF_FILEITEM+0X1C
  304.                 LD BC,0X0A
  305.                 LD DE,0
  306.                 CALL BCDEHLM
  307.                 JP M,LOADIMAGE                  ;ОБРАЗ МЕНЬШЕ СТАНДАРТНОГО, ЗАГРУЗКА В РАМДИСК
  308. ;РАЗМЕР TRD ОБРАЗА СТАНДАРТНОГО РАЗМЕРА ИЛИ БОЛЬШЕ
  309.                 LD IX,SEL_MOUNT
  310.                 RST8 _WINW
  311.                 JP _RULILKA
  312.  
  313. MOUNT_A         XOR A
  314. MOUNT_ALL       PUSH AF
  315.                 RST8 _MOUNTER,_OPEN_MOUNT       ; !!!
  316.                 POP AF
  317.                 LD HL,ERS_FLAGS
  318.                 BIT B_VIEW_IMG,(HL)
  319.                 JP Z,RESTART
  320.                 RES B_VIEW_IMG,(HL)
  321.                 LD C,A                          ;НОМЕР СМОНТИРОВАННОГО ДИСКОВОДА
  322.                 LD H,VIRT_REAL_DRIVE
  323.                 CALL READCMOS
  324.                 AND %11111100
  325.                 OR C
  326.                 LD L,A                          ;ПЕРЕЗАПИСЬ В КМОС НОМЕРА СМОНТИРОВАННОГО ДИСКОВОДА
  327.                 CALL WRITECMOS
  328.                 LD A,C
  329.                 JP RUNMOUNT
  330.  
  331. MOUNT_B         LD A,1
  332.                 JR MOUNT_ALL
  333.  
  334. MOUNT_C         LD A,2
  335.                 JR MOUNT_ALL
  336.  
  337. MOUNT_D         LD A,3
  338.                 JR MOUNT_ALL
  339.  
  340. ;ЗАПУСК, ЗАГРУЗКА ИЛИ МОНТИРОВАНИЕ ФАЙЛОВ
  341. GO_RUN_HOB      RST8 _COM_FAT,_OPEN_FILE
  342.                 LD DE,8
  343.                 ADD HL,DE
  344.                 PUSH HL
  345.                 LD HL,(BUF_FILEITEM+8)
  346.                 LD DE,"RT"
  347.                 AND A
  348.                 SBC HL,DE
  349.                 POP HL
  350.                 JR Z,SELMOUNT                   ;ПЕРЕХОДА НА ЗАГРУЗКУ TRD ОБРАЗА
  351.                 LD A,(HL)
  352.                 CP "$"
  353.                 JR Z,GORUNHOB1                  ;ПЕРЕХОД НА ЗАГРУЗКУ HOBETA
  354.                 CP "S"
  355.                 JP NZ,LOAD_IMAGE                ;ПЕРЕХОД НА ЗАГРУЗКУ SCL ОБРАЗА
  356.                 INC HL
  357.                 LD A,(HL)
  358.                 DEC HL
  359.                 CP "P"
  360.                 JR Z,GORUNHOB1                  ;ПЕРЕХОД НА ЗАГРУЗКУ SPG
  361.                 CP "N"
  362.                 LD A,(HL)
  363.                 JP NZ,LOAD_IMAGE                ;ПЕРЕХОД НА ЗАГРУЗКУ ОБРАЗА
  364. GORUNHOB1       RST8 _COM_DEV,_KOL_VOL          ;ЗАПРОС У МЕНЕДЖЕРА УСТРОЙСТВ О ТЕКУЩЕМ УСТРОЙСТВЕ
  365.                 LD A,D                          ;ВЗЯЛИ НОМЕР ТЕКУЩЕГО УСТРОЙСТВА
  366.                 LD HL,ADR_CAT_FAT
  367.                 RST8 _COM_DEV,_GET_FNDVOLUME
  368.                 ADD A,A
  369.                 ADD A,A
  370.                 ADD A,A
  371.                 LD C,A
  372.                 LD B,0
  373.                 ADD HL,BC
  374.                 LD A,(HL)                       ;ВЗЯЛИ ТИП РАЗДЕЛА
  375. ;               SUB 4                           ;ПРОПУСКАЕМ ДИСКОВОДЫ
  376.                 LD D,A                          ;НОМЕР ТЕКУЩЕГО УСТРОЙСТВА
  377.                 INC HL
  378.                 LD E,(HL)                       ;ВЗЯЛИ МЕСТОПОЛОЖЕНИЕ НОСИТЕЛЯ (MASTER/SLAVE)
  379.                 PUSH DE
  380.                 LD HL,0X5800
  381.                 LD DE,0X5801
  382.                 LD BC,0X02FF
  383.                 LD (HL),L
  384.                 LDIR                            ;ЗАЧЕРНИЛИ ЭКРАН ДЛЯ МАСКИРОВКИ ЗАПУСКАЛКИ
  385.                 LD HL,RUN_CODE
  386.                 LD DE,0X5D3B
  387.                 LD BC,ERUN_CODE-RUN_CODE
  388.                 LDIR
  389.                 CALL MEMSET                     ;ВЫСТАВИЛИ РЕЖИМ КОМПА
  390.                 CALL FOR_RUN
  391.                 LD HL,0X4200                    ;КУДА СКОПИРОВАТЬ ПЕРЕМЕННЫЕ FAT ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
  392.                 RST8 _INST_FATBOOT
  393.                 POP DE
  394.                 LD (0X42FE),DE
  395.                 JP 0X4300
  396.  
  397. ;ЗАГРУЗКА ШРИФТА ДЛЯ ТЕКСТМОДА
  398. LOAD_FNT        LD HL,ADR_CAT
  399. LOAD_FNT1       LD A,4
  400.                 RST8 _COM_FAT,_READ_FILE
  401.                 PEC_ON M_FONT_BF
  402.                 LD HL,ADR_CAT
  403.                 LD DE,0
  404.                 LD BC,0X800
  405.                 LDIR
  406.                 PEC_OFF M_FONT_BF
  407.                 JP RESTART
  408.  
  409. ;ЗАГРУЗКА FDI ОБРАЗА
  410. LOAD_FDI        LD A,E
  411.                 CP "N"
  412.                 JR Z,LOAD_FNT                   ;ПЕРЕХОД НА ЗАГРУЗКУ ФОНТА
  413.                 LD HL,ERS_FLAGS
  414.                 SET B_LOAD_IMG,(HL)
  415.                 LD A,RAM_RAMDISK                ;СТРАНИЦА НАЧАЛА РАМДИСКА
  416.                 PUSH AF                         ;СОХРАНИЛИ НА СТЕКЕ
  417.                 CALL SET4MBPAGE                 ;ВКЛЮЧИЛИ ЕЕ
  418.                 LD HL,FDI_TABLE_CYL
  419.                 LD DE,FDI_TABLE_CYL+1
  420.                 LD BC,0X3FFF
  421.                 LD (HL),0
  422.                 LDIR                            ;ОЧИСТКА СТРАНИЦЫ С ОПИСАТЕЛЯМИ ДОРОЖЕК
  423.                 LD IXH,0XFF
  424.                 CALL LOAD1SECFDI                ;ПРИНУДИТЕЛЬНАЯ ЗАГРУЗКА ПЕРВОГО СЕКТОРА
  425.                 LD A,(0XC006)                   ;ВЗЯЛИ КОЛИЧЕСТВО СТОРОН
  426.                 DEC A
  427.                 LD A,(0XC004)                   ;ВЗЯЛИ КОЛИЧЕСТВО ДОРОЖЕК
  428.                 JR Z,LOADFDI1
  429.                 ADD A,A                         ;ЕСЛИ СТОРОН 2, ТО УМНОЖИЛИ КОЛИЧЕСТВО ДОРОЖЕК НА 2
  430. LOADFDI1        LD C,A                          ;КОЛИЧЕСТВО ДОРОЖЕК
  431.                 LD HL,(0XC00A)
  432.                 LD (START_DATA),HL
  433.                 LD DE,0X4000                    ;АДРЕС БУФЕРА НАЧАЛА ОПИСАТЕЛЕЙ ДОРОЖЕК
  434.                 LD HL,0XC00F                    ;АДРЕС НАЧАЛА ВЫБОРКИ ОПИСАТЕЛЕЙ ДОРОЖЕК В FDI ЗАГОЛОВКЕ
  435. LOADFDI3        BIT 1,H
  436.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  437.                 LD A,(HL)                       ;БИТЫ 8-15 СМЕЩЕНИЯ ДОРОЖКИ ОТ НАЧАЛА
  438.                 AND 0X3F                        ;ВЗЯЛИ ДЛЯ 8-13 БИТЫ-СМЕЩЕНИЕ В БЛОКАХ В СТРАНИЦЕ
  439.                 LD (DE),A                       ;УЛОЖИЛИ СМЕЩЕНИЕ В БЛОКАХ В СТРАНИЦЕ
  440.                 LD A,(HL)                       ;ВЗЯЛИ БИТЫ 14-15
  441.                 INC HL                          ;СЛЕДУЮЩИЙ БАЙТ FDI ЗАГОЛОВКА
  442.                 INC D                           ;ЗДЕСЬ ПОЛОЖИМ СМЕЩЕНИЕ В СТРАНИЦАХ ДО НУЖНОЙ ДОРОЖКИ
  443.                 BIT 1,H
  444.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  445.                 LD B,A                          ;СОХРАНИЛИ НУЖНЫЕ 14-15 БИТЫ
  446.                 LD A,(HL)                       ;ВЗЯЛИ 16-23 БИТЫ СМЕЩЕНИЯ ДОРОЖКИ ОТ НАЧАЛА
  447.                 RL B
  448.                 RLA
  449.                 RL B
  450.                 RLA
  451.                 LD (DE),A                       ;УКЛАДКА БИТОВ СМЕЩЕНИЯ НОМЕРА СТРАНИЦЫ
  452.                 INC D
  453.                 REPT 4
  454.                 INC HL
  455.                 ENDM
  456.                 BIT 1,H
  457.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  458.                 LD B,(HL)                       ;ВЗЯЛИ КОЛИЧЕСТВО СЕКТОРОВ НА ДОРОЖКЕ
  459.                 LD A,B
  460.                 AND A
  461.                 JP Z,LOADFDI_ERR
  462.                 INC HL
  463.                 INC HL
  464. LOADFDI4        INC HL
  465.                 BIT 1,H
  466.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  467.                 LDI                             ;ПЕРЕНОС НОМЕРА СЕКТОРА
  468.                 DEC DE
  469.                 INC C
  470.                 INC D
  471.                 BIT 1,H
  472.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  473.                 LD A,(HL)                       ;ВЗЯЛИ РАЗМЕР СЕКТОРА
  474.                 EX DE,HL
  475.                 LD (HL),1
  476.                 AND A
  477.                 JR Z,LOADFDI2
  478.                 LD (HL),2
  479.                 DEC A
  480.                 JR Z,LOADFDI2
  481.                 LD (HL),4
  482.                 DEC A
  483.                 JR Z,LOADFDI2
  484.                 LD (HL),8
  485. LOADFDI2        EX DE,HL
  486.                 INC D
  487.                 REPT 5
  488.                 INC HL
  489.                 ENDM
  490.                 DJNZ LOADFDI4                   ;ВОЗВРАЩАЕМСЯ ДЛЯ ПРОДОЛЖЕНИЯ, ПОКА СЕКТОРА ДОРОЖКИ НЕ КОНЧАТСЯ
  491.                 LD D,0X40
  492.                 INC E
  493.                 DEC C
  494.                 JR NZ,LOADFDI3                  ;ВОЗВРАЩАЕМСЯ ДЛЯ ПРОДОЛЖЕНИЯ ПОКА НЕ КОНЧАТСЯ ДОРОЖКИ
  495.                 DEC HL
  496.                 BIT 1,H
  497.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  498.                 PUSH HL
  499.                 LD A,H
  500.                 AND 1
  501.                 LD B,A
  502.                 LD C,L
  503.                 LD A,IXH
  504.                 ADD A,A
  505.                 ADD A,B
  506.                 LD B,A
  507.                 LD HL,0
  508. START_DATA      EQU $-2
  509.                 AND A
  510.                 SBC HL,BC
  511.                 EX DE,HL
  512.                 POP HL
  513.                 LD A,D
  514.                 AND A
  515.                 JR Z,LOADFDI7
  516. LOADFDI8        INC H
  517.                 BIT 1,H
  518.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  519.                 DEC D
  520.                 JR NZ,LOADFDI8
  521. LOADFDI7        ADD HL,DE
  522.                 BIT 1,H
  523.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  524.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС НА НАЧАЛО НАЧАЛА СЕКТОРОВ
  525.                 LD DE,0XC000
  526.                 AND A
  527.                 SBC HL,DE
  528.                 LD (OSTAT_SECT),HL              ;СКОЛЬКО БАЙТ ПЕРЕНЕСТИ ИЗ ХВОСТА СЕКТОРА В БУФЕРЕ В НАЧАЛО СТРАНИЦЫ
  529.                 LD B,H
  530.                 LD C,L
  531.                 LD HL,0X200
  532.                 SBC HL,BC
  533.                 LD (NACH_SECT),HL               ;СКОЛЬКО БАЙТ ПЕРЕНЕСТИ ИЗ НАЧАЛА СЕКТОРА В БУФЕРЕ В КОНЕЦ СТРАНИЦЫ
  534.                 POP HL                          ;ВОССТАНОВИЛИ СДРЕС НАЧАЛА СЕКТОРОВ, ДАЛЕЕ ЗАГРУЗКА ВСЕХ СЕКТОРОВ В ПАМЯТЬ
  535. LOADFDI5        POP AF
  536.                 INC A
  537.                 CALL SET4MBPAGE
  538.                 PUSH AF
  539.                 BIT 1,H
  540.                 CALL NZ,LOAD1SECFDI
  541.                 EX AF,AF'
  542.                 LD DE,0X4000
  543.                 LD BC,0
  544. NACH_SECT       EQU $-2
  545.                 LDIR
  546.                 EX AF,AF'
  547.                 JP C,ELOAD_IMAGE
  548.                 EX DE,HL
  549.                 LD A,0X1F
  550.                 RST8 _COM_FAT,_READ_FILE
  551.                 JP C,ELOAD_IMAGE
  552.                 PUSH HL
  553.                 LD HL,0XC000
  554.                 PUSH HL
  555.                 LD A,1
  556.                 RST8 _COM_FAT,_READ_FILE
  557.                 POP HL
  558.                 POP DE
  559.                 LD BC,0
  560. OSTAT_SECT      EQU $-2
  561.                 LDIR
  562.                 JR LOADFDI5
  563.  
  564. LOADFDI_ERR     LD A,RAM_RAMDISK
  565.                 CALL SET4MBPAGE
  566.                 LD HL,0X7FFF
  567.                 LD (HL),0
  568.                 DEC H
  569.                 LD (HL),0
  570.                 LD A,ZXSTD_CPU1;0XFA
  571.                 CALL SET4MBPAGE
  572.                 LD SP,(LD_FILE_SP)
  573.                 POP IY
  574.                 POP IX
  575.                 JP LDFDI_ERROR
  576.  
  577. ;СОЗДАНИЕ ТАБЛИЦЫ ОПИСАТЕЛЕЙ ДЛЯ ПУСТОГО РАМДИСКА
  578. CREATE_TRD640   PUSH IX
  579.                 PUSH IY
  580.                 LD (LD_FILE_SP),SP
  581.                 LD SP,ADR_CAT
  582.                 JR ELT4
  583.  
  584. CREATE_RAMTABL  PUSH IX
  585.                 PUSH IY
  586.                 LD (LD_FILE_SP),SP
  587.                 LD SP,ADR_CAT
  588. ;СОЗДАНИЕ ТАБЛИЦЫ ОПИСАТЕЛЯ ДЛЯ ЗАГРУЖЕННЫХ TRD И SCL ОБРАЗОВ
  589. END_LOAD_TRD    LD A,RAM_DATARAMD               ;НУЖНА СТРАНИЦА ОТКУДА НАЧИНАЕТСЯ ЗАГРУЖЕННЫЙ ОБРАЗ
  590.                 CALL SET4MBPAGE
  591.                 LD HL,(0X48E1)                  ;ПЕРВЫЙ СВОБОДНЫЙ ТРЕК СЕКТОР
  592.                 LD A,L
  593.                 LD L,H
  594.                 LD H,0
  595.                 ADD HL,HL
  596.                 ADD HL,HL
  597.                 ADD HL,HL
  598.                 ADD HL,HL
  599.                 OR L
  600.                 LD L,A                          ;КОЛИЧЕСТВО ЗАНЯТЫХ СЕКТОРОВ С ДИРЕКТОРИЕЙ
  601.                 LD DE,(0X48E5)                  ;КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
  602.                 ADD HL,DE
  603.                 ADD HL,HL
  604.                 ADD HL,HL
  605.                 ADD HL,HL
  606.                 ADD HL,HL                       ;H=КОЛИЧЕСТВО ДОРОЖЕК
  607.                 LD A,H
  608.                 CP 0XA0
  609.                 JR NC,ELT3
  610. ELT4            LD A,0XA0
  611. ELT3            EX AF,AF'
  612.                 LD A,RAM_RAMDISK                ;НУЖНА СТРАНИЦА НАЧАЛА РАМДИСКА, ГДЕ БУДЕТ ТАБЛИЦА ОПИСАТЕЛЕЙ
  613.                 CALL SET4MBPAGE
  614.                 LD HL,0X4000
  615.                 PUSH HL
  616.                 LD DE,0X4001
  617.                 LD BC,0X3FFF
  618.                 LD (HL),L
  619.                 LDIR                            ;ОЧИСТИЛИ СТРАНИЦУ
  620.                 POP DE                          ;АДРЕС НАЧАЛА
  621.                 LD HL,0                         ;СМЕЩЕНИЕ В БЛОКАХ И СТРАНИЦАХ
  622.                 EX AF,AF'
  623. ELT2            EX AF,AF'
  624.                 LD BC,0X1000                    ;СЧЕТЧИК НОМЕРОВ СЕКТОРОВ И ИХ НОМЕРА
  625.                 LD A,L
  626.                 RRCA
  627.                 RRCA
  628.                 LD (DE),A                       ;СМЕЩЕНИЕ В БЛОКАХ ДОРОЖКИ В СТРАНИЦЕ
  629.                 INC D
  630.                 LD A,H
  631.                 LD (DE),A                       ;СМЕЩЕНИЕ В СТРАНИЦАХ ДО ДОРОЖКИ
  632.                 INC D
  633. ELT1            INC C
  634.                 LD A,C
  635.                 LD (DE),A                       ;НОМЕР СЕКТОРА
  636.                 INC D
  637.                 LD A,2
  638.                 LD (DE),A                       ;РАЗМЕР СЕКТОРА
  639.                 INC D
  640.                 DJNZ ELT1                       ;ВНОСИМ В ТАБЛИЦУ ВСЕ НОМЕРА СЕКТОРОВ С РАЗМЕРАМИ
  641.                 LD D,0X40                       ;ВЕРНУЛИ УКАЗАТЕЛЬ В НАЧАЛО
  642.                 INC E                           ;ДЛЯ СЛЕДУЮЩЕЙ ДОРОЖКИ
  643.                 LD BC,0X40
  644.                 ADD HL,BC                       ;ПЕРЕХОД К СЛЕДУЮЩЕЙ ДОРОЖКЕ
  645.                 EX AF,AF'
  646.                 DEC A
  647.                 JR NZ,ELT2                      ;ПОВТОРЯЕМ ДЛЯ ВСЕХ ДОРОЖЕК
  648. ;ОБЩИЙ ВЫХОД ИЗ ЗАГРУЗКИ С ВОЗВРАТОМ СТАНДАРТНОЙ СТРАНИЦЫ В ОКНЕ ПРОЕЦИРОВАНИЯ 1
  649. ELOAD_IMAGE     LD A,RAM_RAMDISK
  650.                 CALL SET4MBPAGE
  651.                 LD HL,0X7FFF
  652.                 LD (HL),"R"
  653.                 DEC H
  654.                 LD (HL),"D"
  655.                 CALL SET_RAMD_NAME
  656.                 LD A,ZXSTD_CPU1;0XFA
  657.                 CALL SET4MBPAGE
  658.                 LD SP,0
  659. LD_FILE_SP      EQU $-2
  660.                 POP IY
  661.                 POP IX
  662.                 LD HL,ERS_FLAGS
  663.                 BIT B_VIEW_IMG,(HL)
  664.                 RET Z
  665.                 RES B_VIEW_IMG,(HL)
  666. ;ЗАГРУЗКА КАТАЛОГА TR-DOS И ПОИСК ВЫБРАННОГО И ЗАПУСК ВЫБРАННОГО BASIC ФАЙЛА
  667.                 LD H,VIRT_REAL_DRIVE
  668.                 CALL READCMOS
  669.                 AND 3
  670.                 LD C,A
  671.                 PUSH AF
  672.                 RST8 _MOUNTER,_CLOSEMOUNT       ; !!!
  673.                 POP AF
  674. RUNMOUNT        LD (0X5D19),A
  675.                 ADD A,A
  676.                 ADD A,A
  677.                 LD B,A
  678.                 LD A,L
  679.                 AND %11110011
  680.                 OR B
  681.                 LD L,A
  682.                 CALL WRITECMOS
  683.                 LD A,C
  684.                 LD C,1
  685.                 CALL TO_DOS4BAS
  686.                 LD HL,ADR_CAT
  687.                 LD DE,0
  688.                 LD BC,0X0905
  689.                 CALL TO_DOS4BAS                 ;ЗАГРУЗКА TR-DOS ДИРЫ
  690.                 DI
  691.                 LD IX,WIN_FILES
  692.                 LD B,(IX+8)
  693.                 INC B
  694.                 LD IX,ADR_CAT
  695.                 LD DE,0X10
  696. NEXT_BAS        LD A,(IX+8)
  697.                 ADD IX,DE
  698.                 CP "B"
  699.                 JR NZ,NEXT_BAS
  700.                 DJNZ NEXT_BAS
  701.                 PUSH IX
  702.                 POP HL
  703.                 SBC HL,DE
  704.                 LD IX,WIN_FILES
  705.                 JP RUNFILE1
  706.  
  707. SET_RAMD_NAME   DEC H
  708.                 XOR A
  709.                 LD (HL),A
  710.                 LD BC,CONF_128
  711.                 OUT (C),A
  712.                 PUSH HL
  713.                 LD HL,TXT_NONE
  714.                 LD DE,IN_RAMDISK
  715.                 LD BC,ETXT_NONE-TXT_NONE
  716.                 LDIR
  717.                 LD HL,ERS_FLAGS
  718.                 BIT B_LOAD_IMG,(HL)
  719.                 LD BC,CONF_128
  720.                 LD A,0X10
  721.                 OUT (C),A
  722.                 POP HL
  723.                 RET Z
  724.                 LD DE,BUF_FILEITEM
  725.                 LD B,8
  726.                 CALL SRN1
  727.                 LD B,3
  728. SRN1            LD A,(DE)
  729.                 LD (HL),A
  730.                 DEC H
  731.                 INC DE
  732.                 DJNZ SRN1
  733.                 RET
  734.  
  735. ;ЗАГРУЗКА СЛЕДУЮЩЕГО СЕКТОРА ЗАГОЛОВКА FDI
  736. LOAD1SECFDI     PUSH HL
  737.                 PUSH BC
  738.                 PUSH DE
  739.                 PUSH AF
  740.                 LD HL,0XC000
  741.                 LD A,1
  742.                 RST8 _COM_FAT,_READ_FILE
  743.                 INC IXH
  744.                 POP AF
  745.                 POP DE
  746.                 POP BC
  747.                 POP HL
  748.                 RES 1,H
  749.                 RET
  750.  
  751. ;ВКЛЮЧЕНИЕ В 1 ОКНО ПРОЕЦИРОВАНИЯ ЗАДАННОЙ СТРАНИЦЫ
  752. SET4MBPAGE      PUSH BC
  753.                 LD B,A
  754.                 PEC_ON M_SHADOW_BF
  755.                 LD A,B
  756.                 LD BC,WIN_P1
  757.                 OUT (C),A
  758.                 LD B,A
  759.                 PEC_OFF M_SHADOW_BF
  760.                 LD A,B
  761.                 POP BC
  762.                 RET
  763.  
  764. LOADIMAGE4      PUSH IX
  765.                 PUSH IY
  766.                 LD (LD_FILE_SP),SP
  767.                 LD SP,ADR_CAT
  768.                 LD A,RAM_TAPE
  769. ;ЗАГРУЗКА TRD ИЛИ TAP ОБРАЗА
  770. LOADIMAGE3      PUSH AF
  771.                 CALL SET4MBPAGE
  772.                 LD HL,0X4000
  773.                 LD A,0X20
  774.                 RST8 _COM_FAT,_READ_FILE
  775.                 JR C,END_LOAD_TAP
  776.                 POP AF
  777.                 INC A
  778.                 JR LOADIMAGE3
  779.  
  780. END_LOAD_TAP    XOR A
  781.                 CALL SET4MBPAGE
  782.                 LD H,A
  783.                 LD L,A
  784.                 LD (0X4000),HL
  785.                 LD (0X4002),A
  786.                 LD A,ZXSTD_CPU1;0XFA
  787.                 CALL SET4MBPAGE
  788.                 LD SP,(LD_FILE_SP)
  789.                 POP IY
  790.                 POP IX
  791.                 LD H,CMOS_BYTE_00
  792.                 CALL READCMOS
  793.                 OR M_EMUL_TAPE
  794.                 LD L,A
  795.                 CALL WRITECMOS
  796.                 AND M_AUTO_TAPE
  797.                 JP Z,RESTART
  798.                 JP TAPELOAD1
  799.  
  800. LOADIMAGE       RST8 _MOUNTER,_LOADIMAGE
  801.                 JP RESTART
  802.  
  803. ;               LD DE,"TR"
  804. ;               JR LOADIMAGE2
  805.  
  806. LOAD_IMAGE      DI
  807.                 LD D,A                          ;ПЕРВЫЙ СИМВОЛ РАСШИРЕНИЯ
  808.                 INC HL
  809.                 LD E,(HL)                       ;ВТОРОЙ СИМВОЛ РАСШИРЕНИЯ
  810.                 CP "B"
  811.                 JR NZ,LOADIMAGE1_
  812.                 LD A,E
  813.                 CP "M"
  814.                 JR Z,LOADIMAGE2                 ;BMP
  815. LOADIMAGE1_     CP "T"                          ;TAP ИЛИ TRD ?
  816.                 JR NZ,LOADIMAGE1
  817.                 LD A,E
  818.                 CP "A"
  819.                 JP Z,LOADIMAGE4                 ;TAP
  820. LOADIMAGE1      LD A,D
  821.                 CP "R"
  822.                 LD HL,FLASHER
  823.                 JR Z,LOAD_IMAGE8                ;TRD
  824. LOADIMAGE2      LD HL,RESTART
  825. LOAD_IMAGE8     PUSH HL
  826.                 PUSH IX
  827.                 PUSH IY
  828.                 LD (LD_FILE_SP),SP
  829.                 LD SP,ADR_CAT
  830.                 LD A,D
  831.                 CP "S"                          ;ЭТО SCL ФАЙЛ?
  832.                 JR Z,LOAD_IMAGE2
  833.                 CP "F"                          ;ЭТО FDI ФАЙЛ?
  834.                 JP Z,LOAD_FDI
  835.                 CP "B"                          ;ЭТО BMP ФАЙЛ?
  836.                 JP Z,BMPVIEW
  837.                 CP "T"                          ;ЭТО TRD ФАЙЛ?
  838.                 JR NZ,LOAD_ROM
  839.                 LD HL,ERS_FLAGS
  840.                 SET B_LOAD_IMG,(HL)
  841.                 LD A,RAM_DATARAMD
  842. ;ЗАГРУЗКА TRD ИЛИ TAP ОБРАЗА
  843. LOAD_IMAGE1     PUSH AF
  844.                 CALL SET4MBPAGE
  845.                 LD HL,CPU1
  846.                 LD A,0X20
  847.                 RST8 _COM_FAT,_READ_FILE
  848.                 JP C,END_LOAD_TRD
  849.                 POP AF
  850.                 INC A
  851.                 JR LOAD_IMAGE1
  852.  
  853. LOAD_ROM        CP "R"                          ;ЭТО ROM ФАЙЛ?
  854.                 JP NZ,ELOAD_IMAGE
  855.                 LD A,RAM_FLASHER
  856.                 CALL LOAD_IN_PAGE
  857.                 LD SP,(LD_FILE_SP)
  858.                 POP IY
  859.                 POP IX
  860.                 RET
  861.  
  862. LOAD_IN_PAGE    PUSH AF
  863.                 CALL SET4MBPAGE
  864.                 LD HL,CPU1
  865.                 LD A,0X20
  866.                 RST8 _COM_FAT,_READ_FILE
  867.                 JR C,LOADINPAGE1
  868.                 POP AF
  869.                 INC A
  870.                 JR LOAD_IN_PAGE
  871.  
  872. LOADINPAGE1     POP AF
  873.                 LD A,ZXSTD_CPU1;0XFA
  874.                 JP SET4MBPAGE
  875.  
  876. ;ЗАГРУЗКА SCL ОБРАЗА
  877. LOAD_IMAGE2     LD HL,DSKINFO
  878.                 LD DE,ADR_CAT+0XF00
  879.                 LD BC,DSK_END-DSKINFO
  880.                 LDIR                            ;СОХРАНЕНИЕ ИНФЫ ДЛЯ СОЗДАНИЯ ЗАГОЛОВКА ДИСКЕТЫ
  881.                 LD HL,ERS_FLAGS
  882.                 SET B_LOAD_IMG,(HL)
  883.                 LD A,RAM_DATARAMD
  884. LOAD_IMAGE4     PUSH AF
  885.                 CALL SET4MBPAGE                 ;ВКЛЮЧИЛИ ПЕРВУЮ СТРАНИЦУ ОТКУДА РАМДИСК НАЧИНАЕТСЯ
  886.                 LD HL,0X5000
  887.                 LD A,0X18
  888.                 RST8 _COM_FAT,_READ_FILE
  889.                 PUSH AF                         ;СОХРАНИЛИ ФЛАГ ОКОНЧАНИЯ ЗАГРУЗКИ НА СЛУЧАЙ ОКОНЧАНИЯ ОБРАЗА
  890.                 LD HL,0X4000
  891.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС НАЧАЛА КАТАЛОГА
  892.                 LD (HL),L
  893.                 LD D,H
  894.                 LD E,L
  895.                 INC DE
  896.                 LD BC,0XFFF
  897.                 LDIR                            ;ЗАЧИСТКА ОБЛАСТИ ПЕРВОЙ ДОРОЖКИ ДЛЯ ФОРМИРОВАНИЯ КАТАЛОГА ДИСКА
  898.                 LD HL,0X5008                    ;АДРЕС КОЛИЧЕСТВА ФАЙЛОВ В SCL ОБРАЗЕ
  899.                 LD A,(HL)                       ;ВЗЯЛИ КОЛИЧЕСТВО ФАЙЛОВ КАК СЧЕТЧИК
  900.                 INC HL                          ;ПЕРЕШЛИ НА ПЕРВЫЙ ОПИСАТЕЛЬ ФАЙЛА
  901.                 EXX
  902.                 LD HL,0                         ;НОМЕР АБСОЛЮТНОГО СЕКТОРА
  903.                 LD D,L                          ;ПРИРАЩЕНИЕ СЕКТОРОВ НЕ МОЖЕТ БЫТЬ БОЛЕЕ 255 СЕКТОРОВ
  904.                 LD B,A                          ;СОХРАНЕНИЕ КОЛИЧЕСТВА ФАЙЛОВ
  905.                 EXX
  906.                 POP DE                          ;ВЕРНУЛИ АДРЕС НАЧАЛА КАТАЛОГА ДИСКА
  907. LOAD_IMAGE3     EX AF,AF'
  908.                 LD BC,0X0D
  909.                 LDIR                            ;ПЕРЕНЕСЛИ 13 БАЙТ ТЕЛА ОПИСАТЕЛЯ
  910.                 LD A,(HL)                       ;ЗАБРАЛИ РАЗМЕР ФАЙЛА В СЕКТОРАХ
  911.                 LDI                             ;ПЕРЕНЕСЛИ ЕЩЕ БАЙТ
  912.                 EXX
  913.                 LD E,A
  914.                 PUSH HL                         ;СОХРАНИЛИ ТЕКЩЕЕ ЗНАЧЕНИЕ НОМЕРА СЕКТОРА
  915.                 ADD HL,DE                       ;УВЕЛИЧИЛИ ТЕКЩЕЕ ЗНАЧЕНИЕ НА РАЗМЕР ФАЙЛА В СЕКТОРАХ
  916.                 EXX
  917.                 EX (SP),HL
  918.                 LD A,L
  919.                 ADD HL,HL
  920.                 ADD HL,HL
  921.                 ADD HL,HL
  922.                 ADD HL,HL
  923.                 INC H
  924.                 AND 0X0F
  925.                 LD L,A
  926.                 EX (SP),HL
  927.                 POP BC                          ;ВОССТАНОВИЛИ ТЕКЩИЙ НОМЕР СЕКТОРА
  928.                 EX DE,HL
  929.                 LD (HL),C
  930.                 INC HL
  931.                 LD (HL),B                       ;УЛОЖИЛИ ПОСЛЕ ТЕКУЩЕГО ОПИСАТЕЛЯ
  932.                 INC HL
  933.                 EX DE,HL
  934.                 EX AF,AF'
  935.                 DEC A
  936.                 JR NZ,LOAD_IMAGE3               ;ЕСЛИ ФАЙЛЫ НЕ КОНЧИЛИСЬ ПРОДОЛЖАЕМ
  937.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС НАЧАЛА ДАННЫХ
  938.                 LD HL,ADR_CAT+0XF00
  939.                 LD DE,0X48E1
  940.                 LD BC,DSK_END-DSKINFO
  941.                 LDIR
  942.                 EXX
  943.                 LD DE,2544                      ;СТАНДАРТНЫЙ РАЗМЕР ДИСКЕТЫ
  944.                 EX DE,HL
  945.                 AND A
  946.                 SBC HL,DE
  947.                 LD (0X48E5),HL                  ;КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
  948.                 EX DE,HL
  949.                 LD A,L
  950.                 ADD HL,HL
  951.                 ADD HL,HL
  952.                 ADD HL,HL
  953.                 ADD HL,HL
  954.                 INC H
  955.                 AND 0X0F
  956.                 LD L,A
  957.                 LD (0X48E1),HL                  ;ПЕРВЫЙ СВОБОДНЫЙ ТРЕК И СЕКТОР
  958.                 LD A,B
  959.                 LD (0X48E4),A                   ;КОЛИЧЕСТВО ФАЙЛОВ НА ДИСКЕ
  960.                 EXX
  961.                 POP DE                          ;ВОССТАНОВЛЕНИЕ АДРЕСА НАЧАЛА ДАННЫХ
  962.                 LD HL,0X8000                    ;КОНЕЦ ОКНА ПРОЕЦИРОВАНИЯ
  963.                 AND A
  964.                 SBC HL,DE                       ;ПОЛУЧИЛИ КОЛИЧЕСТВО БАЙТ ДЛЯ СДВИГА
  965.                 LD B,H
  966.                 LD C,L
  967.                 LD HL,0X5000                    ;НАЧАЛО ДАННЫХ НА РАМДИСКЕ
  968.                 EX DE,HL
  969.                 LDIR                            ;СДВИНУЛИ, ПОСЛЕ ПЕРЕНОСА DE=АДРЕС КУДА ДАЛЕЕ ГРУЗИТЬ
  970.                 LD A,D
  971.                 CP 0X7E
  972.                 JR NC,LOAD_IMAGE7
  973.                 EX DE,HL
  974.                 LD A,0X7F
  975.                 SUB H
  976.                 SRL A
  977.                 LD IXL,A
  978.                 RST8 _COM_FAT,_READ_FILE
  979.                 LD DE,0X8000
  980.                 EX DE,HL
  981. LOAD_IMAGE7     AND A
  982.                 SBC HL,DE                       ;ПОЛУЧИЛИ СКОЛЬКО БАЙТ ОСТАЛОСЬ ДО КОНЦА ОКНА
  983.                 LD (OST_HWOST),HL
  984.                 LD (KUDA_HWOST),DE
  985.                 LD DE,0
  986.                 EX DE,HL
  987.                 SBC HL,DE
  988.                 LD A,1
  989.                 AND H
  990.                 LD H,A
  991.                 LD (NEXT4PAGE),HL
  992.                 POP AF                          ;ВОССТАНОВИЛИ ФЛАГ ПОСЛЕДНЕЙ ЗАГРУЗКИ
  993.                 JP C,END_LOAD_TRD               ;ЕСЛИ ФАЙЛ УЖЕ КОНЧИЛСЯ, ТО ВЫХОД
  994.                 JR LOAD_IMAGE5
  995.  
  996. LOAD_IMAGE6     LD DE,0X4000
  997.                 LD BC,0
  998. NEXT4PAGE       EQU $-2
  999.                 LDIR
  1000.                 EX AF,AF'
  1001.                 JP C,END_LOAD_TRD
  1002.                 EX DE,HL
  1003.                 LD A,0X1F
  1004.                 RST8 _COM_FAT,_READ_FILE
  1005.                 JP C,END_LOAD_TRD
  1006. LOAD_IMAGE5     LD HL,ADR_CAT
  1007.                 PUSH HL
  1008.                 LD A,1
  1009.                 RST8 _COM_FAT,_READ_FILE
  1010.                 EX AF,AF'                       ;СПРЯТАЛИ ФЛАГ ЗАГРУЗКИ СЕКТОРА
  1011.                 POP HL                          ;ВОССТАНОВИЛИ АДРЕС КУДА СЕКТОР В БУФЕР ЗАГРУЗИЛИ
  1012.                 LD DE,0
  1013. KUDA_HWOST      EQU $-2                         ;КУДА ЛОЖИТЬ ОСТАТОК В ОКНЕ
  1014.                 LD BC,0
  1015. OST_HWOST       EQU $-2                         ;СКОЛЬКО ПЕРЕНОСИТЬ В КОНЕЦ СТРАНИЦЫ
  1016.                 LDIR
  1017.                 POP AF
  1018.                 INC A
  1019.                 PUSH AF
  1020.                 CALL SET4MBPAGE
  1021.                 JR LOAD_IMAGE6
  1022.  
  1023. ;ПРОВЕРКА ЗАГОЛОВКА HOBETA ФАЙЛА
  1024. ;НА ВЫХОДЕ: ФЛАГ С=1-НЕ СООТВЕСТВУЕТ
  1025. CMP4HOBETA      SUB 1
  1026.                 RET NZ
  1027.                 LD A,(BUF_RDSEC+8)
  1028.                 CP "C"                          ;ПРОВЕРКА ЧТО ЭТО КОДОВЫЙ БЛОК, А НЕ ЧТО-ТО ДРУГОЕ
  1029.                 SCF
  1030.                 RET NZ
  1031.                 PUSH DE                         ;СОХРАНИЛИ АДРЕС СКЛАДИРОВАНИЯ ДЛЯ ДАЛЬНЕЙШЕЙ ПРОВЕРКИ
  1032.                 LD BC,BUF_RDSEC                 ;ВОЗВРАЩАЕМСЯ В НАЧАЛО СЕКТОРА
  1033.                 CALL HOB_CRC                    ;СЧИТАЕМ CRC HOBETA ЗАГОЛОВКА
  1034.                 LD A,(BC)
  1035.                 INC BC
  1036.                 LD E,A
  1037.                 LD A,(BC)
  1038.                 LD D,A                          ;В "DE" РАССЧИТАННОЕ CRC ХОБЕТА ЗАГОЛОВКА
  1039.                 AND A                           ;В "HL" ВЗЯТОЕ ИЗ СМЕЩЕНИЯ +0X0F ОТ НАЧАЛА ФАЙЛА
  1040.                 SBC HL,DE                       ;СРАВНИВАЕМ
  1041.                 POP DE                          ;ЕСЛИ НЕ СОВПАЛО ТО ВОЗМОЖНО ЭТО НЕ ХОБЕТА
  1042.                 SCF
  1043.                 RET NZ                          ;ПРОПУСКАЕМ ФАЙЛ
  1044.                 EXX
  1045.                 LD HL,(BUF_RDSEC+9)
  1046.                 DEC HL                          ;ДЛЯ ЗАГРУЗКИ МАСИМУМ 40960 БАЙТ (160 СЕКТОРОВ)
  1047.                 LD DE,(BUF_RDSEC+0X0B)
  1048.                 ADD HL,DE                       ;ПРОВЕРЯЕМ ВЫХОД ЗА ПРЕДЕЛЫ ОЗУ
  1049.                 EXX                             ;ЕСЛИ ВЫЛЕТ ЗА ПРЕДЕЛ ОЗУ
  1050.                 RET C                           ;ПРОПУСКАЕМ ФАЙЛ
  1051.                 EXX
  1052.                 LD HL,(BUF_RDSEC+9)
  1053.                 LD DE,0X6000                    ;ПРОВЕРЯЕМ АДРЕС ЗАГРУЗКИ
  1054.                 AND A                           ;АДРЕС ЗАГРУЗКИ НЕ ДОЛЖЕН БЫТЬ НИЖЕ 0X6000
  1055.                 SBC HL,DE
  1056.                 EXX                             ;ЕСЛИ АДРЕС ЗАГРУЗКИ НИЖЕ 0X6000
  1057.                 RET
  1058.  
  1059. ;НА ВХОДЕ: BC-АДРЕС ЗАГОЛОВКА
  1060. ;НА ВЫХОДЕ: HL-HOBETA CRC
  1061. HOB_CRC         LD A,0X0F
  1062.                 LD HL,0
  1063.                 EXX
  1064.                 LD E,0
  1065.                 EXX
  1066. HOBCRC1         EX AF,AF'
  1067.                 LD A,(BC)
  1068.                 LD E,A
  1069.                 LD D,A
  1070.                 ADD HL,DE
  1071.                 EXX
  1072.                 LD A,E
  1073.                 INC E
  1074.                 EXX
  1075.                 LD E,A
  1076.                 LD D,0
  1077.                 ADD HL,DE
  1078.                 EX AF,AF'
  1079.                 INC BC
  1080.                 DEC A
  1081.                 JR NZ,HOBCRC1
  1082.                 RET
  1083.  
  1084. CMP4FONTS       LD DE,(BUF_FILEITEM+0X1C)
  1085.                 LD HL,(BUF_FILEITEM+0X1E)
  1086.                 LD A,H
  1087.                 OR L
  1088.                 OR E
  1089.                 SCF
  1090.                 RET NZ
  1091.                 LD A,D
  1092.                 CP 8
  1093.                 SCF
  1094.                 RET NZ
  1095.                 AND A
  1096.                 RET
  1097.  
  1098. CMP4ROMS        LD DE,(BUF_FILEITEM+0X1C)
  1099.                 LD HL,(BUF_FILEITEM+0X1E)
  1100.                 LD A,H
  1101.                 OR D
  1102.                 OR E
  1103.                 SCF
  1104.                 RET NZ
  1105.                 LD A,L
  1106.                 CP 8
  1107. CMP_ROMSIZE     EQU $-1
  1108.                 SCF
  1109.                 RET NZ
  1110. CMP4ROMS1       AND A
  1111.                 RET
  1112.  
  1113. CMP4FDI         EXX
  1114.                 LD HL,BUF_RDSEC
  1115.                 LD A,(HL)
  1116.                 CP "F"
  1117.                 SCF
  1118.                 RET NZ
  1119.                 INC HL
  1120.                 LD A,(HL)
  1121.                 CP "D"
  1122.                 SCF
  1123.                 RET NZ
  1124.                 INC HL
  1125.                 LD A,(HL)
  1126.                 CP "I"
  1127.                 SCF
  1128.                 RET NZ
  1129.                 INC HL
  1130.                 INC HL
  1131.                 LD A,(HL)                       ;КОЛИЧЕСТВО ЦИЛИНДРОВ
  1132.                 CP 0X57
  1133.                 CCF
  1134.                 RET C
  1135.                 INC HL
  1136.                 LD A,(HL)                       ;ДОЛЖЕН БЫТЬ 0
  1137.                 AND A
  1138.                 SCF
  1139.                 RET NZ
  1140.                 INC HL
  1141.                 LD A,(HL)                       ;КОЛИЧЕСТВО СТОРОН
  1142.                 AND A
  1143.                 SCF
  1144.                 RET Z
  1145.                 CP 3
  1146.                 CCF
  1147.                 RET C
  1148.                 INC HL
  1149.                 LD A,(HL)                       ;ДОЛЖНО БЫТЬ 0
  1150.                 AND A
  1151.                 SCF
  1152.                 RET NZ
  1153.                 EXX
  1154.                 AND A
  1155.                 RET
  1156.  
  1157. CMP4IMAGE       CP 3
  1158.                 JR Z,CMP4FDI
  1159.                 CP 4
  1160.                 JR Z,CMP4BMP
  1161.                 SUB 1
  1162.                 RET Z                           ;ДЛЯ TRD ПРОВЕРКА НЕ НУЖКА
  1163. ;ДЛЯ SCL ПРОВЕРКА НАЛИЧИЯ СЛОВА "SINCLAIR" В ПЕРВЫХ 8 БАЙТАХ
  1164.                 EXX
  1165.                 LD HL,BUF_RDSEC
  1166.                 LD DE,SIGN_SCL
  1167.                 LD B,8
  1168. CMP4IMAGE1      LD A,(DE)
  1169.                 CP (HL)
  1170.                 SCF
  1171.                 RET NZ
  1172.                 INC DE
  1173.                 INC HL
  1174.                 DJNZ CMP4IMAGE1
  1175.                 EXX
  1176.                 AND A
  1177. CMP4TAPES       RET
  1178.  
  1179. CMP4BMP         EXX
  1180.                 LD HL,BUF_RDSEC
  1181.                 LD A,"B"
  1182.                 SUB (HL)
  1183.                 SCF
  1184.                 RET NZ
  1185.                 INC HL
  1186.                 LD A,"M"
  1187.                 SUB (HL)
  1188.                 SCF
  1189.                 RET NZ
  1190.                 LD HL,(BUF_RDSEC+0X12)
  1191.                 LD DE,320
  1192.                 AND A
  1193.                 SBC HL,DE
  1194.                 SCF
  1195.                 RET NZ
  1196.                 LD HL,(BUF_RDSEC+0X16)
  1197.                 LD DE,200
  1198.                 AND A
  1199.                 SBC HL,DE
  1200.                 SCF
  1201.                 RET NZ
  1202.                 LD A,(BUF_RDSEC+0X1C)
  1203.                 CP 4
  1204.                 SCF
  1205.                 RET NZ
  1206.                 EXX
  1207.                 AND A
  1208.                 RET
  1209.  
  1210. SEARCH_FILE     LD A,1
  1211.                 LD HL,(GDE_EXT_FILES)
  1212.                 RST8 _COM_FAT,_SET_MASK_EXT
  1213.                 LD DE,ADR_CAT_FAT               ;АДРЕС БУФЕРА КУДА СКЛАДИРОВАТЬ НАЙДЕННОЕ
  1214.                 RST8 _COM_FAT,_FIND_FILEITEM
  1215.                 LD H,A                          ;НОМЕР СТРАНИЦЫ ГДЕ НАЙДЕННОЕ БРАТЬ
  1216.                 LD A,B
  1217.                 OR C
  1218.                 JR NZ,SEARCHF1
  1219.                 PUSH IX
  1220.                 LD IX,NOBASIC
  1221.                 RST8 _WINW
  1222.                 POP IX
  1223.                 RST8 _COM_DEV,_KOL_VOL
  1224.                 DEC E
  1225.                 JP Z,NO_BAS
  1226.                 JP SELECT_DEVICE
  1227.  
  1228. SEARCHF1        PUSH BC
  1229.                 PUSH HL
  1230.                 RST8 _SORT_FINDFILES
  1231.                 PEC_ON M_SHADOW_BF
  1232.                 POP AF
  1233.                 LD BC,WIN_P1
  1234.                 OUT (C),A
  1235.                 LD HL,CPU1
  1236.                 LD DE,ADR_CAT_SCRH              ;АДРЕС БУФЕРА СКЛАДИРОВАНИЯ ПО МАСКЕ
  1237.                 LD BC,0X1000
  1238.                 LDIR
  1239.                 LD BC,WIN_A1
  1240.                 LD A,0X7A
  1241.                 OUT (C),A
  1242.                 PEC_OFF M_SHADOW_BF
  1243.                 POP BC
  1244.                 LD DE,ADR_CAT_FAT
  1245.                 LD HL,ADR_CAT_SCRH              ;АДРЕС БУФЕРА СКЛАДИРОВАНИЯ ПО МАСКЕ
  1246. SEARCHF3        PUSH BC
  1247.                 LD C,(HL)
  1248.                 INC HL
  1249.                 LD B,(HL)
  1250.                 DEC HL
  1251.                 LD A,6
  1252.                 RST8 _COM_FAT,_POS_FILES
  1253.                 PUSH HL
  1254.                 LD HL,BUF_FILEITEM
  1255.                 RST8 _COM_FAT,_READ_DIR
  1256.                 PUSH DE
  1257.                 LD DE,0X0B
  1258.                 ADD HL,DE
  1259.                 LD A,(HL)
  1260.                 AND 0X10
  1261.                 JR NZ,SEARCHF4
  1262.                 RST8 _COM_FAT,_OPEN_FILE
  1263.                 LD HL,BUF_RDSEC
  1264.                 LD A,1
  1265.                 RST8 _COM_FAT,_READ_FILE
  1266.                 LD HL,BUF_FILEITEM
  1267.                 CALL CP_EXT
  1268.                 CALL 0
  1269. CMP_FOUNDED     EQU $-2
  1270. SEARCHF4        POP DE
  1271.                 POP HL
  1272.                 JR NC,SEARCHF5
  1273.                 INC HL
  1274.                 INC HL
  1275.                 JR SEARCH6
  1276.  
  1277. SEARCHF5        LDI
  1278.                 LDI
  1279. SEARCH6         POP BC
  1280.                 DEC BC
  1281.                 LD A,B
  1282.                 OR C
  1283.                 JR NZ,SEARCHF3
  1284.                 LD HL,ADR_CAT_FAT
  1285.                 EX DE,HL
  1286.                 SBC HL,DE
  1287.                 SRL H
  1288.                 RR L
  1289.                 LD B,H
  1290.                 LD C,L
  1291.                 RET
  1292.  
  1293. CPETR3          PUSH BC
  1294.                 PUSH DE
  1295.                 PUSH HL
  1296.                 LD C,0
  1297.                 LD DE,VIEW_IMAGES
  1298.                 JR CPETR2
  1299.  
  1300. CP_EXT          PUSH BC
  1301.                 PUSH DE
  1302.                 PUSH HL
  1303.                 LD C,0
  1304.                 LD DE,0
  1305. GDE_EXT_FILES   EQU $-2
  1306. CPETR2          LD A,(DE)
  1307.                 AND A
  1308.                 JR Z,CPETR1+1
  1309.                 INC C
  1310.                 PUSH DE
  1311.                 PUSH HL
  1312.                 CALL COMPARF
  1313.                 POP HL
  1314.                 POP DE
  1315.                 JR Z,CPETR1
  1316.                 INC DE
  1317.                 INC DE
  1318.                 INC DE
  1319.                 JR CPETR2
  1320.  
  1321. CPETR1          LD A,C
  1322.                 AND A
  1323.                 POP HL
  1324.                 POP DE
  1325.                 POP BC
  1326.                 RET
  1327.  
  1328. COMPARF         PUSH DE
  1329.                 LD DE,8
  1330.                 ADD HL,DE
  1331.                 POP DE
  1332.                 LD B,3
  1333. COMPARF1        LD A,(DE)
  1334.                 CP "A"
  1335.                 JR C,COMPARF2
  1336.                 AND %11011111
  1337. COMPARF2        CP (HL)
  1338.                 RET NZ
  1339.                 INC HL
  1340.                 INC DE
  1341.                 DJNZ COMPARF1
  1342.                 RET
  1343.  
  1344. ;ПРОШИВАТЕЛЬ ПЗУ С ИНДИКАЦИЕЙ ПРОЦЕССА
  1345. FLASHER         LD BC,PENT_CONF
  1346.                 XOR A
  1347.                 OUT (C),A
  1348.                 PEC_ON M_SHADOW_BF
  1349.                 LD BC,0XFF77
  1350.                 LD A,0XA3
  1351.                 OUT (C),A                       ;ПРИНУДИТЕЛЬНОЕ ВКЛЮЧЕНИЕ ТУРБО РЕЖИМА 7МГЦ
  1352.                 LD A,(CMP_ROMSIZE)
  1353.                 DEC A
  1354.                 JR NZ,FLASHER6
  1355.                 LD IX,UPDATE_CUSTOM
  1356.                 RST8 _WINW
  1357.                 LD SP,ADR_CAT
  1358.                 PEC_ON M_SHADOW_BF+M_FLASH_BF
  1359.                 LD BC,WIN_A0
  1360.                 LD A,0X7F
  1361.                 OUT (C),A                       ;ОТКЛЮЧЕНИЕ ПЗУ В ОКНЕ 0
  1362.                 LD E,0
  1363.                 LD HL,0
  1364.                 CALL ERASE_BLK                  ;СТИРАНИЕ COSTOM ROM СТРАНИЦЫ
  1365.                 LD A,RAM_FLASHER
  1366.                 LD E,0
  1367.                 CALL FLASH_64KB                 ;ПРОГРАММИРОВАНИЕ CUSTOM ROM СТРАНИЦЫ
  1368.                 JP EFLASHER
  1369.  
  1370. FLASHER6        LD IX,ERASE_ROM                 ;ВЫВОД ОКНА О СТИРАНИИ FLASH
  1371.                 RST8 _WINW
  1372.                 LD IX,UPDATE_WIN                ;ВЫВОД ОКНА ОБ ОБНОВЛЕНИИ FLASH
  1373.                 RST8 _WINW
  1374.                 LD IX,ERASE_ROM
  1375.                 LD SP,ADR_CAT
  1376.                 PEC_ON M_SHADOW_BF+M_FLASH_BF   ;РАЗРЕШЕНИЕ ПРОГРАММИРОВАНИЯ FLASH
  1377.                 LD BC,WIN_A0
  1378.                 LD A,0X7F
  1379.                 OUT (C),A                       ;ОТКЛЮЧЕНИЕ ROM В ОКНЕ 0
  1380.                 LD A,3
  1381.                 CALL SETWIN_INDICAT             ;УСТАНОВКА ИНДИКАТОРА ПРОЦЕССА
  1382.                 LD E,0
  1383.                 LD HL,0
  1384. FLASHER4        CALL ERASE_BLK                  ;СТИРАНИЕ БЛОКА 64КБ
  1385.                 CALL INC_INDICAT                ;ОБНОВЛЕНИЕ ИНДИКАТОРА ПРОЦЕССА
  1386.                 INC E                           ;СЛЕДУЮЩИЙ БЛОК
  1387.                 BIT 3,E
  1388.                 JR Z,FLASHER4
  1389.                 LD IX,UPDATE_WIN
  1390.                 LD A,RAM_FLASHER                ;СТРАНИЦА НАЧАЛА ЗАГРУЖЕННОГО ROM ФАЙЛА
  1391.                 LD E,0
  1392. FLASHER3        CALL FLASH_64KB                 ;ПРОШИВАНИЕ ОДНОЙ 64КБ СТРАНИЦЫ
  1393.                 INC E                           ;СЛЕДУЮЩАЯ 64КБ СТРАНИЦА
  1394.                 BIT 3,E
  1395.                 JR Z,FLASHER3
  1396. EFLASHER        LD BC,WIN_P3
  1397.                 XOR A
  1398.                 OUT (C),A                       ;ВКЛЮЧЕНИЕ RAM В ОКНЕ 3
  1399.                 LD A,(CPU3+0X20)
  1400.                 XOR B
  1401.                 LD (CPU3+0X20),A                ;МЕНЯЕМ БАЙТ ДЛЯ НАРУШЕНИЯ CRC КОНТРОЛЯ И ПОЛНОГО РЕИНИТА
  1402.                 LD A,(CPU1+BUF_TABLVOL+0XFE)
  1403.                 XOR B
  1404.                 LD (CPU1+BUF_TABLVOL+0XFE),A    ;АНАЛОГИЧНО ДЛЯ DEVICE MANAGER
  1405.                 PEC_OFF M_FLASH_BF
  1406.                 LD HL,0X79ED                    ;OUT (C),A
  1407.                 LD (0XFFFE),HL                  ;УКЛАДКА КОМАНДЫ OUT (C),A
  1408.                 LD BC,0XBC77
  1409.                 LD A,2
  1410.                 JP 0XFFFE
  1411.  
  1412. ;ПРОШИВАНИЕ ОДНОЙ 64КБ СТРАНИЦЫ
  1413. ;ВХОД: A=НОМЕР 16КБ СТРАНИЦЫ ОТКУДА БРАТЬ БАЙТЫ ДЛЯ ПРОШИВАНИЯ
  1414. ;      E=НОМЕР ПРОШИВАЕМОЙ 64КБ СТРАНИЦЫ
  1415. FLASH_64KB      LD HL,0
  1416.                 PUSH AF
  1417.                 LD A,E
  1418.                 ADD A,2
  1419.                 CALL SETWIN_INDICAT             ;ОБНОВЛЕНИЕ ИНДИКАТОРА ПРОЦЕССА
  1420.                 POP AF
  1421. FLASHER2        PUSH AF
  1422.                 LD BC,WIN_P0
  1423.                 OUT (C),A                       ;ВКЛЮЧЕНИЕ СТРАНИЦЫ RAM ОТКУДА БРАТЬ БАЙТЫ ДЛЯ ПРОШИВАНИЯ
  1424.                 PUSH IX
  1425.                 LD IX,0
  1426. FLASHER1        LD A,(IX)                       ;ВЗЯЛИ БАЙТ ДЛЯ ПРОШИВАНИЯ
  1427.                 INC A
  1428.                 JR Z,FLASHER5                   ;ЕСЛИ БАЙТ = FF, ТО НЕ ПРОШИВАЕМ
  1429.                 DEC A
  1430.                 CALL PGM_BYTE                   ;ПРОШИЛИ БАЙТ
  1431. FLASHER5        INC IX
  1432.                 INC HL
  1433.                 LD A,H
  1434.                 AND 0X0F
  1435.                 OR L
  1436.                 CALL Z,INC_INDICAT              ;ОБНОВИЛИ ИНДИКАТОР ЕСЛИ ПРОШИЛИ 4КБ
  1437.                 LD A,IXH
  1438.                 AND 0X40
  1439.                 JR Z,FLASHER1                   ;ПРОДОЛЖАЕМ ПОКА НЕ КОНЧИТСЯ СТРАНИЦА ВЫБОРКИ БАЙТ
  1440.                 POP IX
  1441.                 POP AF
  1442.                 INC A                           ;СЛЕДУЮЩАЯ СТРАНИЦА ОТКУДА БАЙТЫ БРАТЬ ДЛЯ ПРОШИВАНИЯ
  1443.                 LD D,A                          ;ВРЕМЕННО СОХРАНИЛИ
  1444.                 LD A,H                          ;ПРОВЕРКА НА ОКОНЧАНИЕ 64КБ СТРАНИЦЫ
  1445.                 AND A
  1446.                 LD A,D                          ;ВОССТАНОВИЛИ
  1447.                 JR NZ,FLASHER2
  1448.                 RET
  1449.