Subversion Repositories pentevo

Rev

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

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