Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 04.07.2014 savelij
  3.  
  4.                 include ../../macros.a80
  5.                 include ../../define.a80
  6.                 include ../../global_vars.a80
  7.                 include ../../ports_ngs.a80
  8.                 include ../../sdcomand.a80
  9.                 include ../../fat_vars.a80
  10.  
  11. CPU5            EQU CPU1
  12. CPU6            EQU CPU2
  13. WIN_A5          EQU WIN_A1
  14. WIN_A6          EQU WIN_A2
  15. WIN_P5          EQU WIN_P1
  16. WIN_P6          EQU WIN_P2
  17.  
  18. _CMP_FONT       EQU 0
  19. TXTMODE_DEBUG   EQU 0
  20.  
  21. H_FILES         EQU 0X3C
  22. V_FILES         EQU 0X18
  23.  
  24. MAGIC_COLOR     EQU BLUE<<3+WHITE+BR_INK
  25.  
  26.                 PHASE 0
  27.                 JP $                            ;0000
  28.  
  29.                 DUPL 0X0008-$,0XFF
  30.                 JP $                            ;0008
  31.  
  32.                 DUPL 0X0010-$,0XFF
  33.                 JP $                            ;0010
  34.  
  35.                 DUPL ADR_SEL_ROM-$,0XFF
  36.                 OUT (C),A                       ;0014
  37.                 NOP
  38.                 RET
  39.  
  40.                 DUPL 0X0018-$,0XFF
  41.                 JP $                            ;0018
  42.  
  43.                 DUPL 0X001C-$,0XFF
  44.                 JP RST8_DOS
  45.  
  46.                 DUPL 0X0020-$,0XFF
  47.                 JP $                            ;0020
  48.  
  49.                 DUPL 0X0024-$,0XFF
  50.                 JP RST8PAGE0                    ;0024
  51.  
  52.                 DUPL 0X0028-$,0XFF
  53.                 JP $                            ;0028
  54.  
  55.                 DUPL CONT_RST8-$,0XFF           ;002C
  56.                 JP NEXT_RST8
  57.  
  58. ;ПЕРЕХОД В СТРАНИЦУ 4 С ВОЗВРАТОМ
  59.                 DUPL 0X0030-$,0XFF
  60.                 JP CALL2PAGE                    ;0030
  61.  
  62. ;ПРОДОЛЖЕНИЕ ОБРАБОТКИ НАЖАТИЯ MAGIC
  63.                 DUPL CONTINUE_MAGIC-$,0XFF      ;0034
  64.                 JP CONT_MAGIC
  65.  
  66.                 DUPL 0X0038-$,0XFF              ;0038
  67. ;               PUSH HL                 ;11
  68. ;               LD HL,(ADR_INT)         ;16
  69. ;               EX (SP),HL              ;19
  70. ;               RET                     ;10=56
  71.  
  72.                 EI                      ;4
  73.                 RET                     ;10=14
  74.  
  75.                 DUPL 0X003E-$,0XFF
  76.                 EI
  77.                 RET
  78.  
  79. ;ВЫХОД ИЗ RST8
  80. EXIT_RST8       LD BC,P4_EXIT_RST8              ;АДРЕС ВОЗВРАТА В ПОСЛЕДНЕЙ СТРАНИЦЕ RAM
  81.                 PUSH BC
  82.                 LD BC,WIN_P0
  83.                 XOR A
  84.                 JP ADR_SEL_ROM
  85.  
  86. ;ВХОД RST 8 ДЛЯ DOS
  87. RST8_DOS        LD HL,ERST8_DOS
  88.                 JP NEXT_RST
  89.  
  90. ;ВЫХОД RST 8 ДЛЯ DOS
  91. ERST8_DOS       LD BC,WIN_A0
  92.                 LD A,6
  93.                 JP ADR_SEL_ROM
  94.  
  95. ;ОБРАБОТЧИК MAGIC
  96.                 DUPL 0X0066-$,0XFF
  97. CONT_MAGIC      NOP
  98.                 DI
  99.                 LD HL,N_77
  100.                 CALL CONVERT_BPORT
  101.                 CALL STORE_AY                   ;СОХРАНЕНИЕ СОСТОЯНИЯ РЕГИСТРОВ И ЗАГЛУШЕНИЕ AY
  102.                 LD A,(CPU6+DEBUG_ONOFF)
  103.                 AND TRACE_DBG
  104.                 JP NZ,DEBUGGER
  105. ;ВХОД В ОСНОВНОЕ МЕНЮ MAGIC ЕСЛИ НЕ ПЕРЕХВАЧЕНО ОТЛАДЧИКОМ
  106.                 LD BC,CONF_128
  107.                 LD A,(N_7FFD)
  108.                 AND ZX_SCREEN!0XFF
  109.                 OUT (C),A                       ;ВКЛЮЧЕНИЕ ОТОБРАЖЕНИЯ ЭКРАНА 0
  110.                 LD A,(N_77)
  111.                 CALL CMP_SCRMODE                ;ПРОВЕРКА ВИДЕОРЕЖИМА ПРЕРВАННОЙ ПРОГРАММЫ
  112.                 LD HL,EI_RET
  113.                 LD (ADR_INT),HL                 ;ЗАГЛУШКА НА ПРЕРЫВАНИЯ
  114.                 PCALL STORE_TXTMODE,P_ADDONS    ;СОХРАНЕНИЕ ТЕКСТМОДНОГО ЭКРАНА
  115.                 PCALL SCAN_FONT,P_ADDON2        ;ЧТЕНИЕ ТЕКУЩЕГО ЗАГРУЖЕННОГО ШРИФТА
  116.                 PCALL RD_SET_PAL,P_ADDONS       ;СОХРАНЕНИЕ И УСТАНОВКА ПАЛИТРЫ ДЛЯ MAGIC
  117. ;==========ВРЕМЯНКА
  118.                 IF _CMP_FONT=1
  119.                 CALL CMP_FONT                   ;ВРЕМЯНКА, ПРОВЕРКА СЧИТАННОГО ШРИФТА
  120.                 RLA
  121.                 LD (CMP_FONT_FLAG),A
  122.                 ENDIF
  123. ;==========ВРЕМЯНКА
  124.                 PCALL MAGIC_FONT,P_ADDONS       ;УСТАНОВКА ВРЕМЕННОГО ШРИФТА ДЛЯ MAGIC РЕЖИМА
  125. CONT_MAGIC1     LD A,(CPU6+DEBUG_ONOFF)
  126.                 AND JMP_DBG
  127.                 JP NZ,DEBUGGER
  128.                 JP RESTART_NMI
  129.  
  130.                 DUPL 0X00FF-$,0XFF
  131.                 DW 0X0038
  132.  
  133. ;ТАБЛИЦА ПЕРЕХОДОВ НА ДРАЙВЕРЫ УСТРОЙСТВ
  134.  
  135. CODE_TABL       DW AY_PRN_INIT_                 ;40
  136.                 DW AY_PRN_A__                   ;41
  137.                 DW AY_PRN_TOKEN_                ;42
  138.                 DW AY_PRN_SCR_                  ;43
  139.                 DW TAPE_INIT_                   ;44
  140.                 DW TAPE_EMUL_                   ;45
  141.                 DW WINW_                        ;46
  142.                 DW PRINT_MESSAGE_               ;47
  143.                 DW PRINT_A_                     ;48
  144.                 DW SCRUP_                       ;49
  145.                 DW SCRDN_                       ;4A
  146.                 DW SET_MODE_                    ;4B
  147.                 DW RESERVED                     ;4C
  148.                 DW RESERVED                     ;4D
  149.                 DW RESERVED                     ;4E
  150.                 DW RESERVED                     ;4F
  151.                 DW COM_DEV                      ;50
  152.                 DW COM_FAT                      ;51
  153.                 DW SORT_FINDFILES               ;52
  154.                 DW MOUNTER                      ;53
  155.                 DW INST_FATBOOT_                ;54
  156.                 DW CMOS_RW_                     ;55
  157.                 DW SETUP_PAL_                   ;56
  158. ECODE_TABL
  159.  
  160. ;===============
  161.  
  162. SET_MAP_        PCALL SET_MAP,P_ERS
  163.                 RET
  164.  
  165. SETUP_PAL_      PCALL SETUP_PAL,P_ADDONS
  166. RESERVED        RET
  167.  
  168. AY_PRN_INIT_    PCALL AY_PRN_INIT,P_ADDONS
  169.                 RET
  170.  
  171. AY_PRN_A__      PCALL AY_PRN_A_,P_ADDONS
  172.                 RET
  173.  
  174. AY_PRN_TOKEN_   PCALL AY_PRN_TOKEN,P_ADDONS
  175.                 RET
  176.  
  177. AY_PRN_SCR_     PCALL AY_PRN_SCR,P_ADDONS
  178.                 RET
  179.  
  180. TAPE_INIT_      PCALL TAPE_INIT,P_ADDONS
  181.                 RET
  182.  
  183. TAPE_EMUL_      PCALL TAPE_EMUL,P_ADDONS
  184.                 RET
  185.  
  186. WINW_           PCALL WINW,P_ADDONS
  187.                 RET
  188.  
  189. PRINT_MESSAGE_  PCALL PRINT_MESSAGE,P_ADDONS
  190.                 RET
  191.  
  192. PRINT_A_        PCALL PRINT_A,P_ADDONS
  193.                 RET
  194.  
  195. SCRUP_          LD A,(RREG_A)
  196.                 LD (SCROLL_MODE),A
  197.                 PCALL SCRUP,P_ADDONS
  198.                 RET
  199.  
  200. SCRDN_          LD A,(RREG_A)
  201.                 LD (SCROLL_MODE),A
  202.                 PCALL SCRDN,P_ADDONS
  203.                 RET
  204.  
  205. SET_MODE_       PCALL SET_MODE,P_ADDONS
  206.                 RET
  207.  
  208. INST_FATBOOT_   PCALL UNP_MICRO_BOOT,P_ADDON2
  209.                 RET
  210.  
  211. CMOS_RW_        PCALL CMOS_RW,P_ADDONS
  212.                 RET
  213.  
  214. RST8PAGE0       LD HL,ERST8PAGE0
  215.                 JP NEXT_RST
  216.  
  217. ERST8PAGE0      LD BC,WIN_A0
  218.                 XOR A
  219.                 JP ADR_SEL_ROM
  220.  
  221. SELECT_MAPPER   LD A,(R_7FFD)
  222.                 AND 0X10
  223.                 RET NZ
  224.                 LD A,-8
  225.                 ADD A,L
  226.                 LD L,A
  227.                 RET
  228.  
  229. RESTART_NMI     PCALL CLS_TXTMODE8,P_ADDONS     ;ОЧИСТКА ТЕКСТМОДНОГО ЭКРАНА
  230.                 EVOPORT WIN_A5,P_RST8           ;ВКЛЮЧЕНИЕ ЭТОЙ СТРАНИЦЫ ROM ВО 2 ОКНО ПРОЕЦИРОВАНИЯ
  231.                 LD HL,CPU5+TEXT_PORTREGS
  232.                 PCALL PRTT_MSG,P_ADDONS         ;ПЕЧАТЬ ТЕКСТА
  233.                 PCALL PRT_PORTREGS,P_ADDONS     ;ПЕЧАТЬ СОДЕРЖИМОГО ПОРТОВ СЧИТАННОЙ КОНФИГУРАЦИИ
  234. ;==========ВРЕМЯНКА
  235.                 IF _CMP_FONT=1
  236.                 LD HL,CPU5+TXT_VERIFY_FONT
  237.                 PCALL PRTT_MSG,P_ADDONS         ;ПЕЧАТЬ ТЕКСТА О ПРОВЕРКЕ ШРИФТА
  238.                 LD A,(CMP_FONT_FLAG)
  239.                 RRA
  240.                 LD HL,CPU5+TXT_VERIFY_OK        ;ТЕКСТ ЕСЛИ ВСЕ СОВПАЛО
  241.                 JR NC,CONTMAGIC3_
  242.                 LD HL,CPU5+TXT_VERIFY_ERR       ;ТЕКСТ ЕСЛИ НЕ СОВПАЛО
  243. CONTMAGIC3_     PCALL PRTT_MSG,P_ADDONS         ;ПЕЧАТЬ ОБ ОШИБКЕ
  244.                 ENDIF
  245. ;==========ВРЕМЯНКА
  246.                 EVOPORT WIN_A5,P_ADDON1         ;ВКЛЮЧЕНИЕ ДОПОЛНЕНИЙ В 1 ОКНО ПРОЕЦИРОВАНИЯ
  247.                 LD IX,MAIN_MENU
  248.                 PCALL SETUP4SEL,P_ADDONS
  249.                 PCALL ITWINW,P_ADDONS           ;ВЫВОД ОКНА НА ТЕКСТМОДНЫЙ ЭКРАН
  250.                 PCALL ITSELECTOR,P_ADDONS
  251.                 AND A
  252.                 JR Z,CONTMAGIC2
  253.                 DEC A
  254.                 JR Z,RESTART_NMI
  255.                 DEC A
  256.                 JR Z,CONTMAGIC3
  257. CONTMAGIC2      XOR A
  258.                 IN A,(0XFE)
  259.                 CPL
  260.                 AND 0X1F
  261.                 JR NZ,CONTMAGIC2                ;ЖДЕМ ОТПУСКАНИЯ КНОПОК КЛАВИАТУРЫ
  262.                 PCALL RESTORE_TXTMODE,P_ADDONS  ;ВОССТАНОВЛЕНИЕ ТЕКСТМОДНОГО ЭКРАНА
  263.                 PCALL RESTORE_FONT,P_ADDONS     ;ВОССТАНОВЛЕНИЕ ШРИФТА
  264.                 PCALL RESTORE_PAL,P_ADDONS      ;ВОССТАНОВЛЕНИЕ ПАЛИТРЫ
  265. CONTMAGIC3      CALL RESTORE_AY                 ;ВОССТАНОВЛЕНИЕ РАГИСТРОВ AY
  266.                 LD BC,EXITNMISERVICE
  267.                 PUSH BC
  268.                 LD BC,WIN_P0
  269.                 XOR A
  270.                 JP ADR_SEL_ROM
  271.  
  272. ;ПРОДОЛЖЕНИЕ ОБРАБОТКИ RST8
  273. NEXT_RST8       LD HL,EXIT_RST8
  274. NEXT_RST        PUSH HL
  275.                 LD (INTERNAL_SP),SP
  276.                 LD HL,R_77
  277.                 CALL CONVERT_BPORT
  278.                 CALL P5_READ_BYTE
  279.                 LD A,(R_77)
  280.                 CALL CMP_SCRMODE
  281.                 LD HL,B1_CPU2
  282.                 CALL SELECT_MAPPER
  283. NEXT_RST1       LD B,(HL)
  284.                 INC HL
  285.                 LD A,(HL)
  286.                 AND 8
  287.                 LD A,B
  288.                 JR Z,NEXT_RST2
  289.                 OR 0XC0
  290. NEXT_RST2       LD (PAGE4READ),A
  291.                 LD A,(NEXTBYTERST8)
  292.                 AND 0X3F
  293.                 LD L,A
  294.                 LD H,0
  295.                 ADD HL,HL
  296.                 LD DE,CODE_TABL
  297.                 ADD HL,DE
  298.                 LD E,(HL)
  299.                 INC HL
  300.                 LD D,(HL)
  301.                 EX DE,HL
  302.                 JP (HL)
  303.  
  304. ;ПЕРЕКОНФИГУРАЦИЯ ОКОН ПРОЕЦИРОВАНИЯ
  305. ;СТРАНИЦА ПЕРЕМЕННЫХ В ОКНО 1, ОСНОВНАЯ ПАМЯТЬ В ЗАВИСИМОСТИ ОТ АДРЕСА В ОКНА 2 И 3
  306. RESETUP_WINS    EXX
  307.                 LD BC,WIN_P5
  308.                 XOR A
  309.                 OUT (C),A                       ;СТРАНИЦА ПЕРЕМЕННЫХ В ОКНО 1
  310.                 LD HL,CPU3
  311.                 ADD HL,SP
  312.                 LD SP,HL                        ;СТЕК ТОЖЕ В ОКНО 1
  313.                 LD HL,B1_CPU0-CPU5              ;ДЛЯ 0 МАППЕРА
  314.                 CALL SELECT_MAPPER
  315. RESETUPWINS1    EXX
  316.                 LD BC,CPU6                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X8000 ВЫШЕ
  317.                 LD A,H                          ;ПРОВЕРКА СТАРШЕГО БАЙТА АДРЕСА
  318.                 EXX
  319.                 CP 0X40
  320.                 JR C,RESETUPWINS2               ;УСТАНОВКА ДЛЯ ОКОН 0,1
  321.                 INC HL
  322.                 INC HL
  323.                 EXX
  324.                 LD BC,CPU5                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X4000 ВЫШЕ
  325.                 EXX
  326.                 CP 0X80
  327.                 JR C,RESETUPWINS2               ;УСТАНОВКА ДЛЯ ОКОН 1,2
  328.                 INC HL
  329.                 INC HL
  330.                 EXX
  331.                 LD BC,CPU0                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ БЕЗ ИЗМЕНЕНИЙ
  332.                 EXX
  333.                 CP 0XC0
  334.                 JR C,RESETUPWINS2               ;УСТАНОВКА ДЛЯ ОКОН 2,3
  335.                 INC HL
  336.                 INC HL
  337.                 EXX
  338.                 LD BC,CPU3                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X4000 НИЖЕ
  339.                 EXX
  340.                 LD B,HIGH (WIN_A6)              ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 2
  341.                 CALL RESETUPWINS4
  342.                 LD DE,0XFFF8
  343.                 ADD HL,DE                       ;АДРЕС ГДЕ КОНФИГ СТРАНИЦ ОСНОВНОЙ ПАМЯТИ ЛЕЖИТ
  344.                 JR RESETUPWINS5
  345.  
  346. RESETUPWINS2    LD B,HIGH (WIN_A6)              ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 2
  347.                 CALL RESETUPWINS4
  348. RESETUPWINS5    LD B,HIGH (WIN_A3)              ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 3
  349.                 CALL RESETUPWINS4
  350.                 EXX
  351.                 RET
  352.  
  353. RESETUPWINS4    LD E,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  354.                 INC HL                          ;УКАЗАНИЕ НА БАЙТ АДРЕСА ПОРТА
  355.                 BIT 3,(HL)
  356.                 JR NZ,RESETUPWINS3
  357.                 SET 3,B
  358.                 LD A,(HL)
  359.                 AND 3
  360.                 RRCA
  361.                 RRCA
  362.                 OUT (C),A                       ;СНАЧАЛА ПИШЕМ В ПОРТ XFF7
  363.                 RES 3,B
  364. RESETUPWINS3    INC HL
  365.                 OUT (C),E                       ;ТЕПЕРЬ ПИШЕМ В ПОРТ X7F7
  366.                 RET
  367.  
  368. ;ЧТЕНИЕ БАЙТА ИЗ ОБЛАСТИ ПАМЯТИ ВЫЗВАШЕЙ ПРОГИ
  369. P5_READ_BYTE    PUSH HL
  370.                 PUSH DE
  371.                 PUSH BC
  372.                 PUSH AF
  373.                 LD A,(RADRRET_H)                ;СТАРШИЙ БАЙТ АДРЕСА ОТКУДА ЧИТАТЬ
  374.                 CP 0X40
  375.                 JR NC,READBYTE_03
  376. ;ЕСЛИ АДРЕС ЧТЕНИЯ НИЖЕ 0X4000
  377.                 LD HL,B1_CPU0                   ;БАЙТЫ И АДРЕСА ПОРТОВ 0 МАППЕРА
  378.                 CALL SELECT_MAPPER
  379. READ_CPU0_01    LD D,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  380.                 INC HL
  381.                 LD A,(HL)                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА НУЖНОЙ СТРАНИЦЫ
  382.                 AND HIGH (WIN_A5)
  383.                 OR HIGH (WIN_P5)                ;ПРЕОБРАЗОВАЛИ СТАРШИЙ БАЙТ АДРЕСА ДЛЯ ВКЛЮЧЕНИЯ В 1 ОКНЕ      
  384.                 LD B,A
  385.                 LD C,LOW (WIN_A0)               ;BC=АДРЕС ПОРТА
  386.                 LD A,(R_77)
  387.                 LD E,0X3F
  388.                 AND 0X10                        ;ОПРЕДЕЛЯЕМ DOS ИЛИ НЕ DOS
  389.                 JR Z,READ_CPU0_02
  390.                 DEC E
  391. READ_CPU0_02    LD A,D
  392.                 AND E
  393.                 OUT (C),A                       ;ВКЛЮЧАЕМ ПАГУ BASIC ИЛИ DOS
  394.                 LD DE,CPU5                      ;СМЕЩЕНИЕ ДО 1 ОКНА ПРОЕЦИРОВАНИЯ
  395.                 LD HL,(RADRRET_L)               ;АДРЕС ОТКУДА ЧИТАТЬ
  396.                 ADD HL,DE                       ;ЧИТАТЬ ЧЕРЕЗ 1 ОКНО ПРОЕЦИРОВАНИЯ
  397.                 LD A,(HL)                       ;ПРОЧИТАЛИ БАЙТ
  398.                 SBC HL,DE                       ;ВЕРНУЛИ АДРЕС БАЙТА
  399.                 INC HL                          ;УВЕЛИЧИЛИ АДРЕС ВОЗВРАТА
  400.                 LD (RADRRET_L),HL               ;ВЕРНУЛИ АДРЕС ВОЗВРАТА
  401.                 JR READBYTE_02
  402.  
  403. ;ЕСЛИ АДРЕС ЧТЕНИЯ ВЫШЕ 0X4000
  404. READBYTE_03     LD HL,B1_CPU0                   ;БАЙТЫ И АДРЕСА ПОРТОВ 0 МАППЕРА
  405.                 CALL SELECT_MAPPER
  406. READBYTE_01     LD A,(RADRRET_H)                ;СТАРШИЙ БАЙТ АДРЕСА ОТКУДА ЧИТАТЬ
  407.                 AND 0XC0
  408.                 LD C,A
  409.                 RLCA
  410.                 RLCA
  411.                 RLCA
  412.                 LD E,A
  413.                 LD D,0                          ;DE=СМЕЩЕНИЕ В ТАБЛИЦЕ БАЙТА И СТАРШЕГО БАЙТА СТРАНИЦЫ ЧТЕНИЯ
  414.                 ADD HL,DE
  415.                 LD D,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  416.                 INC HL
  417.                 LD A,(HL)
  418.                 AND HIGH (WIN_A5)
  419.                 OR HIGH (WIN_P5)
  420.                 LD B,A
  421.                 LD C,LOW (WIN_A5)               ;BC=АДРЕС ПОРТА ДЛЯ 1 ОКНА ПРОЕЦИРОВАНИЯ
  422.                 LD HL,(RADRRET_L)               ;АДРЕС ОТКУДА ЧИТАТЬ
  423.                 OUT (C),D                       ;ВКЛЮЧИЛИ СТРАНИЦУ ДЛЯ ЧТЕНИЯ БАЙТА
  424.                 LD E,L                          ;МЛАДШИЙ БАЙТ АДРЕСА ЧТЕНИЯ
  425.                 LD A,H
  426.                 AND HIGH (WIN_A5)
  427.                 OR HIGH (CPU5)
  428.                 LD D,A                          ;СТАРШИЙ БАЙТ АДРЕСА ЧТЕНИЯ
  429.                 LD A,(DE)                       ;ПРОЧИТАЛИ БАЙТ
  430.                 INC HL                          ;УВЕЛИЧИЛИ АДРЕС ВОЗВРАТА
  431.                 LD (RADRRET_L),HL               ;ВЕРНУЛИ АДРЕС ВОЗВРАТА
  432. READBYTE_02     LD (NEXTBYTERST8),A             ;ПОЛОЖИЛИ ПРОЧИТАННЫЙ БАЙТ
  433.                 CALL MAIN_MEM13                 ;ВЕРНУЛИ СТРАНИЦЫ В 1 И 3 ОКНО ПРОЕЦИРОВАНИЯ
  434.                 POP AF
  435.                 POP BC
  436.                 POP DE
  437.                 POP HL
  438.                 RET
  439.  
  440. LDIR_BYTES      EXX
  441.                 LD BC,INT_ONLY_RET
  442.                 PUSH BC
  443.                 LD BC,LDIR__BYTES
  444.                 PUSH BC
  445.                 LD BC,WIN_P0
  446.                 XOR A
  447.                 JP ADR_SEL_ROM
  448.  
  449. ;ВОССТАНОВЛЕНИE СТРАНИЦ В ОКНАХ ПРОЕЦИРОВАНИЯ 1 И 3
  450. MAIN_MEM13      LD HL,B1_CPU1                   ;ДЛЯ 0 МАППЕРА
  451.                 CALL SELECT_MAPPER
  452. MAINMEM1        CALL MAINMEM3                   ;ВЕРНУЛИ ДЛЯ 1 ОКНА ПРОЕЦИРОВАНИЯ
  453.                 INC HL                          ;ДАЛЕЕ ВОЗВРАЩАЕМ ДЛЯ 3 ОКНА ПРОЕЦИРОВАНИЯ
  454.                 INC HL
  455.                 CALL MAINMEM3
  456. SET_7FFD        DEC HL
  457.                 BIT 3,(HL)
  458.                 RET Z
  459.                 DEC HL
  460.                 BIT 7,(HL)
  461.                 RET Z
  462.                 LD A,(R_EFF7)
  463.                 AND 4
  464.                 LD A,(R_7FFD)
  465.                 LD D,A
  466.                 LD E,0
  467.                 LD HL,PAGES_7FFD_ALL
  468.                 JR NZ,SET7FFD1
  469.                 AND 0XE0
  470.                 RRCA
  471.                 RRCA
  472.                 LD E,A
  473. SET7FFD1        LD A,D
  474.                 AND 7
  475.                 OR E
  476.                 LD E,A
  477.                 LD D,0
  478.                 ADD HL,DE
  479.                 LD A,(HL)
  480.                 OUT (C),A
  481.                 RET
  482.  
  483. XXF7_7FFD       MACRO B
  484. PLUSIK := B
  485.                 REPT 8
  486.                 DB PLUSIK
  487. PLUSIK := PLUSIK-1
  488.                 ENDM
  489.                 ENDM
  490.  
  491. PAGES_7FFD_ALL  XXF7_7FFD 0XFF
  492.                 XXF7_7FFD 0XEF
  493.                 XXF7_7FFD 0XDF
  494.                 XXF7_7FFD 0XCF
  495.  
  496.                 XXF7_7FFD 0XF7
  497.                 XXF7_7FFD 0XE7
  498.                 XXF7_7FFD 0XD7
  499.                 XXF7_7FFD 0XC7
  500.  
  501. MAINMEM3        LD C,LOW (WIN_A0)
  502.                 LD E,(HL)
  503.                 INC HL
  504.                 LD A,8
  505.                 AND (HL)
  506.                 LD A,E
  507.                 JR Z,MAINMEM4
  508.                 OR 0XC0
  509. MAINMEM4        LD E,A
  510.                 LD A,(HL)
  511.                 OR 0X3F
  512.                 LD B,A
  513.                 LD A,0X40
  514.                 OUT (C),A
  515.                 RES 3,B
  516.                 INC HL
  517.                 OUT (C),E
  518. INT_ONLY_RET    RET
  519.  
  520. ;КОНВЕРСИЯ СЧИТАННЫХ ЗНАЧЕНИЙ ИЗ ПОРТОВ КОНФИГУРАЦИИ
  521. ;HL=АДРЕС ОТКУДА БРАТЬ СЧИТАННЫЕ ЗНАЧЕНИЯ ДЛЯ КОНВЕРСИИ
  522. ;DE=БИТЫ 7,6 ДЛЯ ДЕКОДИРОВАНИЯ
  523. ;BC=КУДА СКЛАДЫВАТЬ ДЕКОДИРОВАННОЕ
  524. ;A=СЧИТАННОЕ ЗНАЧЕНИЕ ДЛЯ КОНВЕРСИИ ДЛЯ ПОРТА XX77
  525. CONVERT_BPORT   LD A,(HL)
  526.                 PUSH AF
  527.                 INC HL
  528.                 INC HL
  529.                 INC HL
  530.                 LD E,(HL)
  531.                 INC HL
  532.                 LD D,(HL)
  533.                 LD BC,8
  534.                 LD A,C                          ;КОНВЕРТИТЬ 8 БАЙТ
  535.                 ADD HL,BC
  536.                 LD BC,B0_CPU0
  537.                 LD IYL,HIGH (WIN_A3)&0XF8
  538. CBPORT03        EX AF,AF'
  539.                 LD A,(HL)
  540.                 CP 0XC0
  541.                 JR NC,CBPORT01
  542. ;ЕСЛИ ЧИСЛО МЕНЕЕ, ТО ВОССТАНАВЛИВАТЬ В ПОРТЫ X7F7
  543.                 LD (BC),A                       ;НОМЕР СТРАНИЦЫ ДЛЯ ЗАПИСИ В ПОРТ ПРИ ВОССТАНОВЛЕНИИ
  544.                 INC BC
  545.                 LD A,IYL
  546.                 ADD A,0X40
  547.                 LD IYL,A
  548.                 AND 0XF0
  549.                 SRL E
  550.                 SRL D
  551.                 LD (BC),A                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  552.                 INC BC
  553.                 JR CBPORT02
  554.  
  555. ;ЕСЛИ ЧИСЛО БОЛЬШЕ, ТО ВОССТАНАВЛИВАТЬ В ПОРТЫ XFF7
  556. CBPORT01        LD A,(HL)
  557.                 RLCA
  558.                 RLCA
  559.                 SRL D
  560.                 RRA
  561.                 SRL E
  562.                 RRA
  563.                 LD (BC),A                       ;НОМЕР СТРАНИЦЫ ДЛЯ ЗАПИСИ В ПОРТ ПРИ ВОССТАНОВЛЕНИИ
  564.                 INC BC
  565.                 LD A,IYL
  566.                 ADD A,0X40
  567.                 LD IYL,A
  568.                 LD (BC),A                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  569.                 INC BC
  570. CBPORT02        DEC HL
  571.                 EX AF,AF'
  572.                 DEC A
  573.                 JR NZ,CBPORT03
  574.                 POP HL
  575.                 LD L,0XBC
  576.                 LD A,H
  577.                 AND 0X0F
  578.                 OR 0XA0
  579.                 LD (BC),A                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ ПРИ ВОССТАНОВЛЕНИИ
  580.                 INC BC
  581.                 LD A,H
  582.                 AND 0X80
  583.                 RRCA
  584.                 OR L
  585.                 LD L,A
  586.                 LD A,H
  587.                 AND 0X60
  588.                 RLCA
  589.                 RLCA
  590.                 RLCA
  591.                 OR L
  592.                 LD (BC),A                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  593.                 RET
  594.  
  595. READ_KEYS
  596.                 RET
  597.  
  598.                 include fat/mounter.a80
  599.                 include fat/dev_drv.a80
  600.                 include fat/ngs_sd_drv.a80
  601.                 include fat/z_sd_drv.a80
  602.                 include fat/nemo_drv.a80
  603.                 include fat/read_fat.a80
  604.  
  605. SUPPORT_EXT     DB "TRDSCLFDITAPSPG$C FNTBMPROM",0
  606.  
  607. ;СОРТИРОВКА СПИСКА НАЙДЕННЫХ ДИРЕКТОРИЙ/ФАЙЛОВ
  608. SORT_FINDFILES  LD HL,(KOL_FOUNDED)
  609.                 LD A,H
  610.                 OR L
  611.                 RET Z                           ;ВЫХОД ЕСЛИ НИЧЕГО НЕ НАЙДЕНО
  612.                 DEC HL
  613.                 LD A,H
  614.                 OR L
  615.                 RET Z                           ;ВЫХОД ЕСЛИ ДИРЕКТОРИЯ/ФАЙЛ ТОЛЬКО 1
  616.                 EVOPORT WIN_P3,PAGE_TEMP2
  617.                 LD HL,CPU3+0X1000               ;АДРЕС ПЕРВЫХ СИМВОЛОВ
  618.                 LD DE,0X1000
  619.                 LD BC,SYMS4SORT
  620.                 EXX
  621.                 LD HL,CPU3+0X2000               ;АДРЕС КУДА СКЛАДИРОВАТЬ СОРТИРОВАННОЕ
  622.                 LD BC,(KOLFIND)
  623.                 EXX
  624. ;ПЕРВЫЙ ПРОХОД ДЛЯ ДИРЕКТОРИЙ
  625. SORTIR03        LD A,(HL)
  626.                 AND 0X10
  627.                 JR Z,SORTIR01
  628.                 INC HL
  629.                 LD A,(BC)
  630.                 CP (HL)
  631.                 DEC HL
  632.                 JR NZ,SORTIR01
  633.                 SBC HL,DE                       ;ПЕРЕХОД К НОМЕРАМ
  634.                 LD A,(HL)
  635.                 INC HL
  636.                 EXX
  637.                 LD (HL),A
  638.                 INC HL
  639.                 EXX
  640.                 LD A,(HL)
  641.                 INC HL
  642.                 EXX
  643.                 LD (HL),A
  644.                 INC HL
  645.                 DEC BC
  646.                 LD A,B
  647.                 OR C
  648.                 EXX
  649.                 JR Z,SORTIR05                   ;ЕСЛИ КОНЧИЛОСЬ ТО ТОЖЕ САМОЕ ДЛЯ ФАЙЛОВ
  650.                 ADD HL,DE                       ;ВОЗВРАТ К ФЛАГАМ И ИМЕНАМ
  651.                 JR SORTIR03
  652.  
  653. ;НЕ ДИРЕКТОРИЯ, СЛЕДУЮЩАЯ ПАРА
  654. SORTIR01        INC HL
  655.                 INC HL
  656.                 EXX
  657.                 DEC BC
  658.                 LD A,B
  659.                 OR C
  660.                 EXX
  661.                 JR NZ,SORTIR03
  662. SORTIR05        EXX
  663.                 LD BC,(KOLFIND)
  664.                 EXX
  665.                 LD HL,CPU3+0X1000
  666.                 INC BC
  667.                 LD A,(BC)
  668.                 AND A
  669.                 JR NZ,SORTIR03
  670.                 LD BC,SYMS4SORT
  671.                 LD HL,CPU3+0X1000
  672. ;ВТОРОЙ ПРОХОД ДЛЯ ФАЙЛОВ
  673. SORTIR02        LD A,(HL)
  674.                 AND 0X10
  675.                 JR NZ,SORTIR04
  676.                 INC HL
  677.                 LD A,(BC)
  678.                 CP (HL)
  679.                 DEC HL
  680.                 JR NZ,SORTIR04
  681.                 SBC HL,DE
  682.                 LD A,(HL)
  683.                 INC HL
  684.                 EXX
  685.                 LD (HL),A
  686.                 INC HL
  687.                 EXX
  688.                 LD A,(HL)
  689.                 INC HL
  690.                 EXX
  691.                 LD (HL),A
  692.                 INC HL
  693.                 DEC BC
  694.                 LD A,B
  695.                 OR C
  696.                 EXX
  697.                 JR Z,SORTIR07
  698.                 ADD HL,DE
  699.                 JR SORTIR02
  700.  
  701. SORTIR04        INC HL
  702.                 INC HL
  703.                 EXX
  704.                 DEC BC
  705.                 LD A,B
  706.                 OR C
  707.                 EXX
  708.                 JR NZ,SORTIR02
  709. SORTIR07        EXX
  710.                 LD BC,(KOLFIND)
  711.                 EXX
  712.                 LD HL,CPU3+0X1000
  713.                 INC BC
  714.                 LD A,(BC)
  715.                 AND A
  716.                 JR NZ,SORTIR02
  717.                 LD HL,CPU3+0X2000
  718.                 LD DE,CPU3
  719.                 LD BC,0X1000
  720.                 LDIR
  721.                 RET
  722.  
  723. STORE_AY        LD HL,AY_REGS
  724.                 LD DE,0XFFC0
  725.                 LD C,0XFD
  726.                 LD A,0X0D
  727. STORE_AY1       LD B,D
  728.                 OUT (C),A
  729.                 LD B,E
  730.                 INI
  731.                 DEC A
  732.                 JP P,STORE_AY1
  733.                 DEC E
  734.                 LD H,0
  735.                 LD A,0X0D
  736. STORE_AY2       LD B,D
  737.                 OUT (C),A
  738.                 LD B,E
  739.                 OUT (C),H
  740.                 DEC A
  741.                 JP P,STORE_AY2
  742.                 RET
  743.  
  744. RESTORE_AY      LD HL,AY_REGS
  745.                 LD DE,0XFFC0
  746.                 LD C,0XFD
  747.                 LD A,0X0D
  748. RESTORE_AY1     LD B,D
  749.                 OUT (C),A
  750.                 LD B,E
  751.                 OUTI
  752.                 DEC A
  753.                 JP P,RESTORE_AY1
  754.                 RET
  755.  
  756. SYMS4SORT       DB ".!#$%&'()-0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`{}~",0X7F
  757.                 DB "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯЁ",0
  758.  
  759. X_OFFSET        EQU 63
  760. Y_OFFSET        EQU 2
  761. TEXT_PORTREGS   DB 0X17,MAGIC_COLOR
  762.                 DB 0X16,Y_OFFSET+0X01,X_OFFSET+0,"SP=      PC="
  763.                 DB 0X16,Y_OFFSET+0X02,X_OFFSET+0,"IR="
  764.                 DB 0X16,Y_OFFSET+0X03,X_OFFSET+0,"AF=     AF'="
  765.                 DB 0X16,Y_OFFSET+0X04,X_OFFSET+0,"BC=     BC'="
  766.                 DB 0X16,Y_OFFSET+0X05,X_OFFSET+0,"DE=     DE'="
  767.                 DB 0X16,Y_OFFSET+0X06,X_OFFSET+0,"HL=     HL'="
  768.                 DB 0X16,Y_OFFSET+0X07,X_OFFSET+0,"IX=      IY="
  769.                 DB 0X16,Y_OFFSET+0X09,X_OFFSET+0,"  MAP  0 1"
  770.                 DB 0X16,Y_OFFSET+0X0A,X_OFFSET+0,"CPU3="
  771.                 DB 0X16,Y_OFFSET+0X0B,X_OFFSET+0,"CPU2="
  772.                 DB 0X16,Y_OFFSET+0X0C,X_OFFSET+0,"CPU1="
  773.                 DB 0X16,Y_OFFSET+0X0D,X_OFFSET+0,"CPU0="
  774.                 DB 0X16,Y_OFFSET+0X0F,X_OFFSET+0,"7FFD="
  775.                 DB 0X16,Y_OFFSET+0X10,X_OFFSET+0,"EFF7="
  776.                 DB 0X16,Y_OFFSET+0X11,X_OFFSET+2,"77="
  777.                 DB 0X16,Y_OFFSET+0X12,X_OFFSET+2,"BF="
  778.                 DB 0X16,Y_OFFSET+0X14,X_OFFSET+0,"DOS ENABLE= "
  779.                 DB 0X16,1,0X10,0X17,0X32," EVO Magic Service beta ",0
  780.  
  781. TXT_VERIFY_FONT DB 0X16,0X18,0,0X17,0X22,"  VERIFY READING FONT ",0
  782. TXT_VERIFY_OK   DB " OK    ",0
  783. TXT_VERIFY_ERR  DB "ERROR  ",0
  784.  
  785.                 IF _CMP_FONT=1
  786. CMP_FONT        LD H,CMOS_BYTE_00
  787.                 PCALL READCMOS,P_ADDONS
  788.                 AND TYPE_FONT
  789.                 LD HL,CP866_FONT
  790.                 JR Z,CMPFONT1
  791.                 LD HL,ATM_FONT
  792. CMPFONT1        LD DE,CPU1+OFFSET_BUFSYM
  793.                 PUSH DE
  794.                 PCALL UNPACK,P_ADDON1
  795.                 POP DE
  796.                 INC D
  797.                 LD BC,0X700
  798.                 LD HL,CPU1+OFFSET_FNTSAVE+0X100
  799. CMPFONT2        LD A,(DE)
  800.                 INC DE
  801.                 CP (HL)
  802.                 SCF
  803.                 RET NZ
  804.                 CPI
  805.                 JP PE,CMPFONT2
  806.                 XOR A
  807.                 RET
  808.                 ENDIF
  809.  
  810. CMP_SCRMODE     LD HL,FLAGS
  811.                 RES 7,(HL)
  812.                 AND 7
  813.                 CP 3
  814.                 RET Z
  815.                 SET 7,(HL)
  816.                 RET
  817.  
  818. SD_CARD_LOST    LD HL,FLAGS_DRV
  819.                 LD A,B_NEW_SD
  820.                 OR (HL)
  821.                 LD (HL),A
  822.                 PEC_ON SHADOW_BF
  823.                 CALL MAIN_MEM13
  824.                 LD IX,SDCARD_LOST
  825.                 PCALL IWINW,P_ADDONS
  826.                 JR $
  827.  
  828.                 DUPL 0X3FF8-$,0XFF
  829.                 DB "RST_08"
  830.                 DW DATA_VERS
  831.                 DEPHASE
  832.  
  833.                 include addons.a80
  834.                 include addon1.a80
  835.                 include addon2.a80
  836.