Subversion Repositories pentevo

Rev

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

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