Subversion Repositories pentevo

Rev

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

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