Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 16.04.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.                 LD BC,WIN_A5
  231.                 LD A,P_RST8
  232.                 OUT (C),A                       ;ВКЛЮЧЕНИЕ ЭТОЙ СТРАНИЦЫ ROM ВО 2 ОКНО ПРОЕЦИРОВАНИЯ
  233.                 LD HL,CPU5+TEXT_PORTREGS
  234.                 PCALL PRTT_MSG,P_ADDONS         ;ПЕЧАТЬ ТЕКСТА
  235.                 PCALL PRT_PORTREGS,P_ADDONS     ;ПЕЧАТЬ СОДЕРЖИМОГО ПОРТОВ СЧИТАННОЙ КОНФИГУРАЦИИ
  236. ;==========ВРЕМЯНКА
  237.                 IF _CMP_FONT=1
  238.                 LD HL,CPU5+TXT_VERIFY_FONT
  239.                 PCALL PRTT_MSG,P_ADDONS         ;ПЕЧАТЬ ТЕКСТА О ПРОВЕРКЕ ШРИФТА
  240.                 LD A,(CMP_FONT_FLAG)
  241.                 RRA
  242.                 LD HL,CPU5+TXT_VERIFY_OK        ;ТЕКСТ ЕСЛИ ВСЕ СОВПАЛО
  243.                 JR NC,CONTMAGIC3_
  244.                 LD HL,CPU5+TXT_VERIFY_ERR       ;ТЕКСТ ЕСЛИ НЕ СОВПАЛО
  245. CONTMAGIC3_     PCALL PRTT_MSG,P_ADDONS         ;ПЕЧАТЬ ОБ ОШИБКЕ
  246.                 ENDIF
  247. ;==========ВРЕМЯНКА
  248.                 LD BC,WIN_A5
  249.                 LD A,P_ADDON1
  250.                 OUT (C),A                       ;ВКЛЮЧЕНИЕ ДОПОЛНЕНИЙ В 1 ОКНО ПРОЕЦИРОВАНИЯ
  251.                 LD IX,MAIN_MENU
  252.                 PCALL SETUP4SEL,P_ADDONS
  253.                 PCALL ITWINW,P_ADDONS           ;ВЫВОД ОКНА НА ТЕКСТМОДНЫЙ ЭКРАН
  254.                 PCALL ITSELECTOR,P_ADDONS
  255.                 AND A
  256.                 JR Z,CONTMAGIC2
  257.                 DEC A
  258.                 JR Z,RESTART_NMI
  259.                 DEC A
  260.                 JR Z,CONTMAGIC3
  261. CONTMAGIC2      XOR A
  262.                 IN A,(0XFE)
  263.                 CPL
  264.                 AND 0X1F
  265.                 JR NZ,CONTMAGIC2                ;ЖДЕМ ОТПУСКАНИЯ КНОПОК КЛАВИАТУРЫ
  266.                 PCALL RESTORE_TXTMODE,P_ADDONS  ;ВОССТАНОВЛЕНИЕ ТЕКСТМОДНОГО ЭКРАНА
  267.                 PCALL RESTORE_FONT,P_ADDONS     ;ВОССТАНОВЛЕНИЕ ШРИФТА
  268.                 PCALL RESTORE_PAL,P_ADDONS      ;ВОССТАНОВЛЕНИЕ ПАЛИТРЫ
  269. CONTMAGIC3      CALL RESTORE_AY                 ;ВОССТАНОВЛЕНИЕ РАГИСТРОВ AY
  270.                 LD BC,EXITNMISERVICE
  271.                 PUSH BC
  272.                 LD BC,WIN_P0
  273.                 XOR A
  274.                 JP ADR_SEL_ROM
  275.  
  276. ;ПРОДОЛЖЕНИЕ ОБРАБОТКИ RST8
  277. NEXT_RST8       LD HL,EXIT_RST8
  278. NEXT_RST        PUSH HL
  279.                 LD (INTERNAL_SP),SP
  280.                 LD HL,R_77
  281.                 CALL CONVERT_BPORT
  282.                 CALL P5_READ_BYTE
  283.                 LD A,(R_77)
  284.                 CALL CMP_SCRMODE
  285.                 LD HL,B1_CPU2
  286.                 CALL SELECT_MAPPER
  287. NEXT_RST1       LD B,(HL)
  288.                 INC HL
  289.                 LD A,(HL)
  290.                 AND 8
  291.                 LD A,B
  292.                 JR Z,NEXT_RST2
  293.                 OR 0XC0
  294. NEXT_RST2       LD (PAGE4READ),A
  295.                 LD A,(NEXTBYTERST8)
  296.                 AND 0X3F
  297.                 LD L,A
  298.                 LD H,0
  299.                 ADD HL,HL
  300.                 LD DE,CODE_TABL
  301.                 ADD HL,DE
  302.                 LD E,(HL)
  303.                 INC HL
  304.                 LD D,(HL)
  305.                 EX DE,HL
  306.                 JP (HL)
  307.  
  308. ;ПЕРЕКОНФИГУРАЦИЯ ОКОН ПРОЕЦИРОВАНИЯ
  309. ;СТРАНИЦА ПЕРЕМЕННЫХ В ОКНО 1, ОСНОВНАЯ ПАМЯТЬ В ЗАВИСИМОСТИ ОТ АДРЕСА В ОКНА 2 И 3
  310. RESETUP_WINS    EXX
  311.                 LD BC,WIN_P5
  312.                 XOR A
  313.                 OUT (C),A                       ;СТРАНИЦА ПЕРЕМЕННЫХ В ОКНО 1
  314.                 LD HL,CPU3
  315.                 ADD HL,SP
  316.                 LD SP,HL                        ;СТЕК ТОЖЕ В ОКНО 1
  317.                 LD HL,B1_CPU0-CPU5              ;ДЛЯ 0 МАППЕРА
  318.                 CALL SELECT_MAPPER
  319. RESETUPWINS1    EXX
  320.                 LD BC,CPU6                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X8000 ВЫШЕ
  321.                 LD A,H                          ;ПРОВЕРКА СТАРШЕГО БАЙТА АДРЕСА
  322.                 EXX
  323.                 CP 0X40
  324.                 JR C,RESETUPWINS2               ;УСТАНОВКА ДЛЯ ОКОН 0,1
  325.                 INC HL
  326.                 INC HL
  327.                 EXX
  328.                 LD BC,CPU5                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X4000 ВЫШЕ
  329.                 EXX
  330.                 CP 0X80
  331.                 JR C,RESETUPWINS2               ;УСТАНОВКА ДЛЯ ОКОН 1,2
  332.                 INC HL
  333.                 INC HL
  334.                 EXX
  335.                 LD BC,CPU0                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ БЕЗ ИЗМЕНЕНИЙ
  336.                 EXX
  337.                 CP 0XC0
  338.                 JR C,RESETUPWINS2               ;УСТАНОВКА ДЛЯ ОКОН 2,3
  339.                 INC HL
  340.                 INC HL
  341.                 EXX
  342.                 LD BC,CPU3                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X4000 НИЖЕ
  343.                 EXX
  344.                 LD B,HIGH (WIN_A6)              ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 2
  345.                 CALL RESETUPWINS4
  346.                 LD DE,0XFFF8
  347.                 ADD HL,DE                       ;АДРЕС ГДЕ КОНФИГ СТРАНИЦ ОСНОВНОЙ ПАМЯТИ ЛЕЖИТ
  348.                 JR RESETUPWINS5
  349.  
  350. RESETUPWINS2    LD B,HIGH (WIN_A6)              ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 2
  351.                 CALL RESETUPWINS4
  352. RESETUPWINS5    LD B,HIGH (WIN_A3)              ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 3
  353.                 CALL RESETUPWINS4
  354.                 EXX
  355.                 RET
  356.  
  357. RESETUPWINS4    LD E,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  358.                 INC HL                          ;УКАЗАНИЕ НА БАЙТ АДРЕСА ПОРТА
  359.                 BIT 3,(HL)
  360.                 JR NZ,RESETUPWINS3
  361.                 SET 3,B
  362.                 LD A,(HL)
  363.                 AND 3
  364.                 RRCA
  365.                 RRCA
  366.                 OUT (C),A                       ;СНАЧАЛА ПИШЕМ В ПОРТ XFF7
  367.                 RES 3,B
  368. RESETUPWINS3    INC HL
  369.                 OUT (C),E                       ;ТЕПЕРЬ ПИШЕМ В ПОРТ X7F7
  370.                 RET
  371.  
  372. ;ЧТЕНИЕ БАЙТА ИЗ ОБЛАСТИ ПАМЯТИ ВЫЗВАШЕЙ ПРОГИ
  373. P5_READ_BYTE    PUSH HL
  374.                 PUSH DE
  375.                 PUSH BC
  376.                 PUSH AF
  377.                 LD A,(RADRRET_H)                ;СТАРШИЙ БАЙТ АДРЕСА ОТКУДА ЧИТАТЬ
  378.                 CP 0X40
  379.                 JR NC,READBYTE_03
  380. ;ЕСЛИ АДРЕС ЧТЕНИЯ НИЖЕ 0X4000
  381.                 LD HL,B1_CPU0                   ;БАЙТЫ И АДРЕСА ПОРТОВ 0 МАППЕРА
  382.                 CALL SELECT_MAPPER
  383. READ_CPU0_01    LD D,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  384.                 INC HL
  385.                 LD A,(HL)                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА НУЖНОЙ СТРАНИЦЫ
  386.                 AND HIGH (WIN_A5)
  387.                 OR HIGH (WIN_P5)                ;ПРЕОБРАЗОВАЛИ СТАРШИЙ БАЙТ АДРЕСА ДЛЯ ВКЛЮЧЕНИЯ В 1 ОКНЕ      
  388.                 LD B,A
  389.                 LD C,LOW (WIN_A0)               ;BC=АДРЕС ПОРТА
  390.                 LD A,(R_77)
  391.                 LD E,0X3F
  392.                 AND 0X10                        ;ОПРЕДЕЛЯЕМ DOS ИЛИ НЕ DOS
  393.                 JR Z,READ_CPU0_02
  394.                 DEC E
  395. READ_CPU0_02    LD A,D
  396.                 AND E
  397.                 OUT (C),A                       ;ВКЛЮЧАЕМ ПАГУ BASIC ИЛИ DOS
  398.                 LD DE,CPU5                      ;СМЕЩЕНИЕ ДО 1 ОКНА ПРОЕЦИРОВАНИЯ
  399.                 LD HL,(RADRRET_L)               ;АДРЕС ОТКУДА ЧИТАТЬ
  400.                 ADD HL,DE                       ;ЧИТАТЬ ЧЕРЕЗ 1 ОКНО ПРОЕЦИРОВАНИЯ
  401.                 LD A,(HL)                       ;ПРОЧИТАЛИ БАЙТ
  402.                 SBC HL,DE                       ;ВЕРНУЛИ АДРЕС БАЙТА
  403.                 INC HL                          ;УВЕЛИЧИЛИ АДРЕС ВОЗВРАТА
  404.                 LD (RADRRET_L),HL               ;ВЕРНУЛИ АДРЕС ВОЗВРАТА
  405.                 JR READBYTE_02
  406.  
  407. ;ЕСЛИ АДРЕС ЧТЕНИЯ ВЫШЕ 0X4000
  408. READBYTE_03     LD HL,B1_CPU0                   ;БАЙТЫ И АДРЕСА ПОРТОВ 0 МАППЕРА
  409.                 CALL SELECT_MAPPER
  410. READBYTE_01     LD A,(RADRRET_H)                ;СТАРШИЙ БАЙТ АДРЕСА ОТКУДА ЧИТАТЬ
  411.                 AND 0XC0
  412.                 LD C,A
  413.                 RLCA
  414.                 RLCA
  415.                 RLCA
  416.                 LD E,A
  417.                 LD D,0                          ;DE=СМЕЩЕНИЕ В ТАБЛИЦЕ БАЙТА И СТАРШЕГО БАЙТА СТРАНИЦЫ ЧТЕНИЯ
  418.                 ADD HL,DE
  419.                 LD D,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  420.                 INC HL
  421.                 LD A,(HL)
  422.                 AND HIGH (WIN_A5)
  423.                 OR HIGH (WIN_P5)
  424.                 LD B,A
  425.                 LD C,LOW (WIN_A5)               ;BC=АДРЕС ПОРТА ДЛЯ 1 ОКНА ПРОЕЦИРОВАНИЯ
  426.                 LD HL,(RADRRET_L)               ;АДРЕС ОТКУДА ЧИТАТЬ
  427.                 OUT (C),D                       ;ВКЛЮЧИЛИ СТРАНИЦУ ДЛЯ ЧТЕНИЯ БАЙТА
  428.                 LD E,L                          ;МЛАДШИЙ БАЙТ АДРЕСА ЧТЕНИЯ
  429.                 LD A,H
  430.                 AND HIGH (WIN_A5)
  431.                 OR HIGH (CPU5)
  432.                 LD D,A                          ;СТАРШИЙ БАЙТ АДРЕСА ЧТЕНИЯ
  433.                 LD A,(DE)                       ;ПРОЧИТАЛИ БАЙТ
  434.                 INC HL                          ;УВЕЛИЧИЛИ АДРЕС ВОЗВРАТА
  435.                 LD (RADRRET_L),HL               ;ВЕРНУЛИ АДРЕС ВОЗВРАТА
  436. READBYTE_02     LD (NEXTBYTERST8),A             ;ПОЛОЖИЛИ ПРОЧИТАННЫЙ БАЙТ
  437.                 CALL MAIN_MEM13                 ;ВЕРНУЛИ СТРАНИЦЫ В 1 И 3 ОКНО ПРОЕЦИРОВАНИЯ
  438.                 POP AF
  439.                 POP BC
  440.                 POP DE
  441.                 POP HL
  442.                 RET
  443.  
  444. LDIR_BYTES      EXX
  445.                 LD BC,INT_ONLY_RET
  446.                 PUSH BC
  447.                 LD BC,LDIR__BYTES
  448.                 PUSH BC
  449.                 LD BC,WIN_P0
  450.                 XOR A
  451.                 JP ADR_SEL_ROM
  452.  
  453. ;ВОССТАНОВЛЕНИE СТРАНИЦ В ОКНАХ ПРОЕЦИРОВАНИЯ 1 И 3
  454. MAIN_MEM13      LD HL,B1_CPU1                   ;ДЛЯ 0 МАППЕРА
  455.                 CALL SELECT_MAPPER
  456. MAINMEM1        CALL MAINMEM3                   ;ВЕРНУЛИ ДЛЯ 1 ОКНА ПРОЕЦИРОВАНИЯ
  457.                 INC HL                          ;ДАЛЕЕ ВОЗВРАЩАЕМ ДЛЯ 3 ОКНА ПРОЕЦИРОВАНИЯ
  458.                 INC HL
  459.                 CALL MAINMEM3
  460. SET_7FFD        DEC HL
  461.                 BIT 3,(HL)
  462.                 RET Z
  463.                 DEC HL
  464.                 BIT 7,(HL)
  465.                 RET Z
  466.                 LD A,(R_EFF7)
  467.                 AND 4
  468.                 LD A,(R_7FFD)
  469.                 LD D,A
  470.                 LD E,0
  471.                 LD HL,PAGES_7FFD_ALL
  472.                 JR NZ,SET7FFD1
  473.                 AND 0XE0
  474.                 RRCA
  475.                 RRCA
  476.                 LD E,A
  477. SET7FFD1        LD A,D
  478.                 AND 7
  479.                 OR E
  480.                 LD E,A
  481.                 LD D,0
  482.                 ADD HL,DE
  483.                 LD A,(HL)
  484.                 OUT (C),A
  485.                 RET
  486.  
  487. XXF7_7FFD       MACRO B
  488. PLUSIK := B
  489.                 REPT 8
  490.                 DB PLUSIK
  491. PLUSIK := PLUSIK-1
  492.                 ENDM
  493.                 ENDM
  494.  
  495. PAGES_7FFD_ALL  XXF7_7FFD 0XFF
  496.                 XXF7_7FFD 0XEF
  497.                 XXF7_7FFD 0XDF
  498.                 XXF7_7FFD 0XCF
  499.  
  500.                 XXF7_7FFD 0XF7
  501.                 XXF7_7FFD 0XE7
  502.                 XXF7_7FFD 0XD7
  503.                 XXF7_7FFD 0XC7
  504.  
  505. MAINMEM3        LD C,LOW (WIN_A0)
  506.                 LD E,(HL)
  507.                 INC HL
  508.                 LD A,8
  509.                 AND (HL)
  510.                 LD A,E
  511.                 JR Z,MAINMEM4
  512.                 OR 0XC0
  513. MAINMEM4        LD E,A
  514.                 LD A,(HL)
  515.                 OR 0X3F
  516.                 LD B,A
  517.                 LD A,0X40
  518.                 OUT (C),A
  519.                 RES 3,B
  520.                 INC HL
  521.                 OUT (C),E
  522. INT_ONLY_RET    RET
  523.  
  524. ;КОНВЕРСИЯ СЧИТАННЫХ ЗНАЧЕНИЙ ИЗ ПОРТОВ КОНФИГУРАЦИИ
  525. ;HL=АДРЕС ОТКУДА БРАТЬ СЧИТАННЫЕ ЗНАЧЕНИЯ ДЛЯ КОНВЕРСИИ
  526. ;DE=БИТЫ 7,6 ДЛЯ ДЕКОДИРОВАНИЯ
  527. ;BC=КУДА СКЛАДЫВАТЬ ДЕКОДИРОВАННОЕ
  528. ;A=СЧИТАННОЕ ЗНАЧЕНИЕ ДЛЯ КОНВЕРСИИ ДЛЯ ПОРТА XX77
  529. CONVERT_BPORT   LD A,(HL)
  530.                 PUSH AF
  531.                 INC HL
  532.                 INC HL
  533.                 INC HL
  534.                 LD E,(HL)
  535.                 INC HL
  536.                 LD D,(HL)
  537.                 LD BC,8
  538.                 LD A,C                          ;КОНВЕРТИТЬ 8 БАЙТ
  539.                 ADD HL,BC
  540.                 LD BC,B0_CPU0
  541.                 LD IYL,HIGH (WIN_A3)&0XF8
  542. CBPORT03        EX AF,AF'
  543.                 LD A,(HL)
  544.                 CP 0XC0
  545.                 JR NC,CBPORT01
  546. ;ЕСЛИ ЧИСЛО МЕНЕЕ, ТО ВОССТАНАВЛИВАТЬ В ПОРТЫ X7F7
  547.                 LD (BC),A                       ;НОМЕР СТРАНИЦЫ ДЛЯ ЗАПИСИ В ПОРТ ПРИ ВОССТАНОВЛЕНИИ
  548.                 INC BC
  549.                 LD A,IYL
  550.                 ADD A,0X40
  551.                 LD IYL,A
  552.                 AND 0XF0
  553.                 RRCA
  554.                 RRCA
  555.                 SRL E
  556.                 RLA
  557.                 SRL D
  558.                 RLA
  559.                 LD (BC),A                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  560.                 INC BC
  561.                 JR CBPORT02
  562.  
  563. ;ЕСЛИ ЧИСЛО БОЛЬШЕ, ТО ВОССТАНАВЛИВАТЬ В ПОРТЫ XFF7
  564. CBPORT01        LD A,(HL)
  565.                 RLCA
  566.                 RLCA
  567.                 SRL D
  568.                 RRA
  569.                 SRL E
  570.                 RRA
  571.                 LD (BC),A                       ;НОМЕР СТРАНИЦЫ ДЛЯ ЗАПИСИ В ПОРТ ПРИ ВОССТАНОВЛЕНИИ
  572.                 INC BC
  573.                 LD A,IYL
  574.                 ADD A,0X40
  575.                 LD IYL,A
  576.                 LD (BC),A                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  577.                 INC BC
  578. CBPORT02        DEC HL
  579.                 EX AF,AF'
  580.                 DEC A
  581.                 JR NZ,CBPORT03
  582.                 POP HL
  583.                 LD L,0XBC
  584.                 LD A,H
  585.                 AND 0X0F
  586.                 OR 0XA0
  587.                 LD (BC),A                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ ПРИ ВОССТАНОВЛЕНИИ
  588.                 INC BC
  589.                 LD A,H
  590.                 AND 0X80
  591.                 RRCA
  592.                 OR L
  593.                 LD L,A
  594.                 LD A,H
  595.                 AND 0X60
  596.                 RLCA
  597.                 RLCA
  598.                 RLCA
  599.                 OR L
  600.                 LD (BC),A                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  601.                 RET
  602.  
  603. READ_KEYS
  604.                 RET
  605.  
  606.                 include fat/mounter.a80
  607.                 include fat/dev_drv.a80
  608.                 include fat/ngs_sd_drv.a80
  609.                 include fat/z_sd_drv.a80
  610.                 include fat/nemo_drv.a80
  611.                 include fat/read_fat.a80
  612.  
  613. SUPPORT_EXT     DB "TRDSCLFDITAPSPG$C FNTBMPROM",0
  614.  
  615. ;СОРТИРОВКА СПИСКА НАЙДЕННЫХ ДИРЕКТОРИЙ/ФАЙЛОВ
  616. SORT_FINDFILES  LD HL,(KOL_FOUNDED)
  617.                 LD A,H
  618.                 OR L
  619.                 RET Z                           ;ВЫХОД ЕСЛИ НИЧЕГО НЕ НАЙДЕНО
  620.                 DEC HL
  621.                 LD A,H
  622.                 OR L
  623.                 RET Z                           ;ВЫХОД ЕСЛИ ДИРЕКТОРИЯ/ФАЙЛ ТОЛЬКО 1
  624.                 LD BC,WIN_P3
  625.                 LD A,PAGE_TEMP2
  626.                 OUT (C),A
  627.                 LD HL,CPU3+0X1000               ;АДРЕС ПЕРВЫХ СИМВОЛОВ
  628.                 LD DE,0X1000
  629.                 LD BC,SYMS4SORT
  630.                 EXX
  631.                 LD HL,CPU3+0X2000               ;АДРЕС КУДА СКЛАДИРОВАТЬ СОРТИРОВАННОЕ
  632.                 LD BC,(KOLFIND)
  633.                 EXX
  634. ;ПЕРВЫЙ ПРОХОД ДЛЯ ДИРЕКТОРИЙ
  635. SORTIR03        LD A,(HL)
  636.                 AND 0X10
  637.                 JR Z,SORTIR01
  638.                 INC HL
  639.                 LD A,(BC)
  640.                 CP (HL)
  641.                 DEC HL
  642.                 JR NZ,SORTIR01
  643.                 SBC HL,DE                       ;ПЕРЕХОД К НОМЕРАМ
  644.                 LD A,(HL)
  645.                 INC HL
  646.                 EXX
  647.                 LD (HL),A
  648.                 INC HL
  649.                 EXX
  650.                 LD A,(HL)
  651.                 INC HL
  652.                 EXX
  653.                 LD (HL),A
  654.                 INC HL
  655.                 DEC BC
  656.                 LD A,B
  657.                 OR C
  658.                 EXX
  659.                 JR Z,SORTIR05                   ;ЕСЛИ КОНЧИЛОСЬ ТО ТОЖЕ САМОЕ ДЛЯ ФАЙЛОВ
  660.                 ADD HL,DE                       ;ВОЗВРАТ К ФЛАГАМ И ИМЕНАМ
  661.                 JR SORTIR03
  662.  
  663. ;НЕ ДИРЕКТОРИЯ, СЛЕДУЮЩАЯ ПАРА
  664. SORTIR01        INC HL
  665.                 INC HL
  666.                 EXX
  667.                 DEC BC
  668.                 LD A,B
  669.                 OR C
  670.                 EXX
  671.                 JR NZ,SORTIR03
  672. SORTIR05        EXX
  673.                 LD BC,(KOLFIND)
  674.                 EXX
  675.                 LD HL,CPU3+0X1000
  676.                 INC BC
  677.                 LD A,(BC)
  678.                 AND A
  679.                 JR NZ,SORTIR03
  680.                 LD BC,SYMS4SORT
  681.                 LD HL,CPU3+0X1000
  682. ;ВТОРОЙ ПРОХОД ДЛЯ ФАЙЛОВ
  683. SORTIR02        LD A,(HL)
  684.                 AND 0X10
  685.                 JR NZ,SORTIR04
  686.                 INC HL
  687.                 LD A,(BC)
  688.                 CP (HL)
  689.                 DEC HL
  690.                 JR NZ,SORTIR04
  691.                 SBC HL,DE
  692.                 LD A,(HL)
  693.                 INC HL
  694.                 EXX
  695.                 LD (HL),A
  696.                 INC HL
  697.                 EXX
  698.                 LD A,(HL)
  699.                 INC HL
  700.                 EXX
  701.                 LD (HL),A
  702.                 INC HL
  703.                 DEC BC
  704.                 LD A,B
  705.                 OR C
  706.                 EXX
  707.                 JR Z,SORTIR07
  708.                 ADD HL,DE
  709.                 JR SORTIR02
  710.  
  711. SORTIR04        INC HL
  712.                 INC HL
  713.                 EXX
  714.                 DEC BC
  715.                 LD A,B
  716.                 OR C
  717.                 EXX
  718.                 JR NZ,SORTIR02
  719. SORTIR07        EXX
  720.                 LD BC,(KOLFIND)
  721.                 EXX
  722.                 LD HL,CPU3+0X1000
  723.                 INC BC
  724.                 LD A,(BC)
  725.                 AND A
  726.                 JR NZ,SORTIR02
  727.                 LD HL,CPU3+0X2000
  728.                 LD DE,CPU3
  729.                 LD BC,0X1000
  730.                 LDIR
  731.                 RET
  732.  
  733. STORE_AY        LD HL,AY_REGS
  734.                 LD DE,0XFFC0
  735.                 LD C,0XFD
  736.                 LD A,0X0D
  737. STORE_AY1       LD B,D
  738.                 OUT (C),A
  739.                 LD B,E
  740.                 INI
  741.                 DEC A
  742.                 JP P,STORE_AY1
  743.                 DEC E
  744.                 LD H,0
  745.                 LD A,0X0D
  746. STORE_AY2       LD B,D
  747.                 OUT (C),A
  748.                 LD B,E
  749.                 OUT (C),H
  750.                 DEC A
  751.                 JP P,STORE_AY2
  752.                 RET
  753.  
  754. RESTORE_AY      LD HL,AY_REGS
  755.                 LD DE,0XFFC0
  756.                 LD C,0XFD
  757.                 LD A,0X0D
  758. RESTORE_AY1     LD B,D
  759.                 OUT (C),A
  760.                 LD B,E
  761.                 OUTI
  762.                 DEC A
  763.                 JP P,RESTORE_AY1
  764.                 RET
  765.  
  766. SYMS4SORT       DB ".!#$%&'()-0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`{}~",0X7F
  767.                 DB "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯЁ",0
  768.  
  769. X_OFFSET        EQU 63
  770. Y_OFFSET        EQU 2
  771. TEXT_PORTREGS   DB 0X17,MAGIC_COLOR
  772.                 DB 0X16,Y_OFFSET+0X01,X_OFFSET+0,"SP=      PC="
  773.                 DB 0X16,Y_OFFSET+0X02,X_OFFSET+0,"IR="
  774.                 DB 0X16,Y_OFFSET+0X03,X_OFFSET+0,"AF=     AF'="
  775.                 DB 0X16,Y_OFFSET+0X04,X_OFFSET+0,"BC=     BC'="
  776.                 DB 0X16,Y_OFFSET+0X05,X_OFFSET+0,"DE=     DE'="
  777.                 DB 0X16,Y_OFFSET+0X06,X_OFFSET+0,"HL=     HL'="
  778.                 DB 0X16,Y_OFFSET+0X07,X_OFFSET+0,"IX=      IY="
  779.                 DB 0X16,Y_OFFSET+0X09,X_OFFSET+0,"  MAP  0 1"
  780.                 DB 0X16,Y_OFFSET+0X0A,X_OFFSET+0,"CPU3="
  781.                 DB 0X16,Y_OFFSET+0X0B,X_OFFSET+0,"CPU2="
  782.                 DB 0X16,Y_OFFSET+0X0C,X_OFFSET+0,"CPU1="
  783.                 DB 0X16,Y_OFFSET+0X0D,X_OFFSET+0,"CPU0="
  784.                 DB 0X16,Y_OFFSET+0X0F,X_OFFSET+0,"7FFD="
  785.                 DB 0X16,Y_OFFSET+0X10,X_OFFSET+0,"EFF7="
  786.                 DB 0X16,Y_OFFSET+0X11,X_OFFSET+2,"77="
  787.                 DB 0X16,Y_OFFSET+0X12,X_OFFSET+2,"BF="
  788.                 DB 0X16,Y_OFFSET+0X14,X_OFFSET+0,"DOS ENABLE= "
  789.                 DB 0X16,1,0X10,0X17,0X32," EVO Magic Service beta ",0
  790.  
  791. TXT_VERIFY_FONT DB 0X16,0X18,0,0X17,0X22,"  VERIFY READING FONT ",0
  792. TXT_VERIFY_OK   DB " OK    ",0
  793. TXT_VERIFY_ERR  DB "ERROR  ",0
  794.  
  795.                 IF _CMP_FONT=1
  796. CMP_FONT        LD H,CMOS_BYTE_00
  797.                 PCALL READCMOS,P_ADDONS
  798.                 AND TYPE_FONT
  799.                 LD HL,CP866_FONT
  800.                 JR Z,CMPFONT1
  801.                 LD HL,ATM_FONT
  802. CMPFONT1        LD DE,CPU1+OFFSET_BUFSYM
  803.                 PUSH DE
  804.                 PCALL UNPACK,P_ADDON1
  805.                 POP DE
  806.                 INC D
  807.                 LD BC,0X700
  808.                 LD HL,CPU1+OFFSET_FNTSAVE+0X100
  809. CMPFONT2        LD A,(DE)
  810.                 INC DE
  811.                 CP (HL)
  812.                 SCF
  813.                 RET NZ
  814.                 CPI
  815.                 JP PE,CMPFONT2
  816.                 XOR A
  817.                 RET
  818.                 ENDIF
  819.  
  820. CMP_SCRMODE     LD HL,FLAGS
  821.                 RES 7,(HL)
  822.                 AND 7
  823.                 CP 3
  824.                 RET Z
  825.                 SET 7,(HL)
  826.                 RET
  827.  
  828. SD_CARD_LOST    LD HL,FLAGS_DRV
  829.                 LD A,B_NEW_SD
  830.                 OR (HL)
  831.                 LD (HL),A
  832.                 PEC_ON SHADOW_BF
  833.                 CALL MAIN_MEM13
  834.                 LD IX,SDCARD_LOST
  835.                 PCALL IWINW,P_ADDONS
  836.                 JR $
  837.  
  838.                 DUPL 0X3FF8-$,0XFF
  839.                 DB "RST_08"
  840.                 DW DATA_VERS
  841.                 DEPHASE
  842.  
  843.                 include addons.a80
  844.                 include addon1.a80
  845.                 include addon2.a80
  846.