Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 06.01.2013 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. TXTMODE_DEBUG   EQU 0
  12.  
  13. H_FILES         EQU 0X3C
  14. V_FILES         EQU 0X19
  15.  
  16. MAGIC_COLOR     EQU BLUE<<3+WHITE+BR_INK;0X0F
  17.  
  18.                 PHASE 0
  19.                 JP $                            ;0000
  20.  
  21.                 DUPL 0X0008-$,0XFF
  22.                 JP $                            ;0008
  23.  
  24.                 DUPL 0X0010-$,0XFF
  25.                 JP $                            ;0010
  26.  
  27.                 DUPL ADR_SEL_ROM-$,0XFF
  28.                 OUT (C),A                       ;0014
  29.                 NOP
  30.                 RET
  31.  
  32.                 DUPL 0X0018-$,0XFF
  33.                 JP $                            ;0018
  34.  
  35.                 DUPL 0X001C-$,0XFF
  36.                 JP RST8_DOS
  37.  
  38.                 DUPL 0X0020-$,0XFF
  39.                 JP $                            ;0020
  40.  
  41.                 DUPL 0X0024-$,0XFF
  42.                 JP RST8PAGE0                    ;0024
  43.  
  44.                 DUPL 0X0028-$,0XFF
  45.                 JP $                            ;0028
  46.  
  47.                 DUPL CONT_RST8-$,0XFF           ;002C
  48.                 JP NEXT_RST8
  49.  
  50. ;ПЕРЕХОД В СТРАНИЦУ 4 С ВОЗВРАТОМ
  51.                 DUPL 0X0030-$,0XFF
  52.                 JP CALL2PAGE                    ;0030
  53.  
  54. ;ПРОДОЛЖЕНИЕ ОБРАБОТКИ НАЖАТИЯ MAGIC
  55.                 DUPL CONTINUE_MAGIC-$,0XFF      ;0034
  56.                 JP CONT_MAGIC
  57.  
  58.                 DUPL 0X0038-$,0XFF              ;0038
  59. ;               PUSH HL                 ;11
  60. ;               LD HL,(ADR_INT)         ;16
  61. ;               EX (SP),HL              ;19
  62. ;               RET                     ;10=56
  63.  
  64.                 EI                      ;4
  65.                 RET                     ;10=14
  66.  
  67. ;ВЫХОД ИЗ RST8
  68. EXIT_RST8       LD BC,P4_EXIT_RST8              ;АДРЕС ВОЗВРАТА В ПОСЛЕДНЕЙ СТРАНИЦЕ RAM
  69.                 PUSH BC
  70.                 LD BC,WIN_P0
  71.                 XOR A
  72.                 JP ADR_SEL_ROM
  73.  
  74. ;ВХОД RST 8 ДЛЯ DOS
  75. RST8_DOS        LD HL,ERST8_DOS
  76.                 JP NEXT_RST
  77.  
  78. ;ВЫХОД RST 8 ДЛЯ DOS
  79. ERST8_DOS       LD BC,WIN_A0
  80.                 LD A,6
  81.                 JP ADR_SEL_ROM
  82.  
  83. ;ОБРАБОТЧИК MAGIC
  84.                 DUPL 0X0066-$,0XFF
  85. CONT_MAGIC      NOP
  86.                 DI
  87.                 LD HL,N_77
  88.                 CALL CONVERT_BPORT
  89.                 PCALL STORE_AY,P_ADDON1         ;СОХРАНЕНИЕ СОСТОЯНИЯ РЕГИСТРОВ И ЗАГЛУШЕНИЕ AY
  90.                 LD A,(CPU2+DEBUG_ONOFF)
  91.                 AND TRACE_DBG
  92.                 JP NZ,DEBUGGER
  93.                 LD BC,CONF_128
  94.                 LD A,(N_7FFD)
  95.                 AND ZX_SCREEN!0XFF
  96.                 OUT (C),A                       ;ВКЛЮЧЕНИЕ ОТОБРАЖЕНИЯ ЭКРАНА 0
  97.                 LD A,(N_77)
  98.                 CALL CMP_SCRMODE                ;ПРОВЕРКА ВИДЕОРЕЖИМА ОСНОВНОГО РЕЖИМА
  99.                 LD HL,EI_RET
  100.                 LD (ADR_INT),HL                 ;ЗАГЛУШКА НА ПРЕРЫВАНИЯ
  101.                 PCALL STORE_TXTMODE,P_ADDONS    ;СОХРАНЕНИЕ ТЕКСТМОДНОГО ЭКРАНА
  102.                 PCALL SCAN_FONT,P_ADDON1        ;ЧТЕНИЕ ТЕКУЩЕГО ЗАГРУЖЕННОГО ШРИФТА
  103.                 PCALL RD_SET_PAL,P_ADDON2       ;СОХРАНЕНИЕ И УСТАНОВКА ПАЛИТРЫ ДЛЯ MAGIC
  104. ;==========ВРЕМЯНКА
  105. ;               CALL CMP_FONT                   ;ВРЕМЯНКА, ПРОВЕРКА СЧИТАННОГО ШРИФТА
  106. ;               PUSH AF
  107. ;==========ВРЕМЯНКА
  108.                 PCALL MAGIC_FONT,P_ADDONS       ;УСТАНОВКА ВРЕМЕННОГО ШРИФТА ДЛЯ MAGIC РЕЖИМА
  109. CONT_MAGIC1     LD A,(CPU2+DEBUG_ONOFF)
  110.                 AND JMP_DBG
  111.                 JP NZ,DEBUGGER
  112.                 JP RESTART_NMI
  113.  
  114.                 DUPL 0X00FF-$,0XFF
  115.                 DW 0X0038
  116.  
  117. CODE_TABL       DW AY_PRN_INIT_                 ;40
  118.                 DW AY_PRN_A__                   ;41
  119.                 DW AY_PRN_TOKEN_                ;42
  120.                 DW AY_PRN_SCR_                  ;43
  121.                 DW TAPE_INIT_                   ;44
  122.                 DW TAPE_EMUL_                   ;45
  123.                 DW WINW_                        ;46
  124.                 DW PRINT_MESSAGE_               ;47
  125.                 DW PRINT_A_                     ;48
  126.                 DW SCRUP_                       ;49
  127.                 DW SCRDN_                       ;4A
  128.                 DW SET_MODE_                    ;4B
  129.                 DW COM_DEV                      ;4C
  130.                 DW COM_FAT                      ;4D
  131.                 DW SORT_FINDFILES_              ;4E
  132.                 DW MOUNTER                      ;4F
  133.                 DW INST_FATBOOT_                ;50
  134.                 DW CMOS_RW_                     ;51
  135.                 DW SETUP_PAL_                   ;52
  136. ECODE_TABL
  137.  
  138. ;===============
  139.  
  140. SETUP_PAL_      PCALL SETUP_PAL,P_ADDON2
  141.                 RET
  142.  
  143. AY_PRN_INIT_    PCALL AY_PRN_INIT,P_ADDON1
  144.                 RET
  145.  
  146. AY_PRN_A__      PCALL AY_PRN_A_,P_ADDON1
  147.                 RET
  148.  
  149. AY_PRN_TOKEN_   PCALL AY_PRN_TOKEN,P_ADDON1
  150.                 RET
  151.  
  152. AY_PRN_SCR_     PCALL AY_PRN_SCR,P_ADDON1
  153.                 RET
  154.  
  155. TAPE_INIT_      PCALL TAPE_INIT,P_ADDON1
  156.                 RET
  157.  
  158. TAPE_EMUL_      PCALL TAPE_EMUL,P_ADDON1
  159.                 RET
  160.  
  161. WINW_           PCALL WINW,P_ADDONS
  162.                 RET
  163.  
  164. PRINT_MESSAGE_  PCALL PRINT_MESSAGE,P_ADDONS
  165.                 RET
  166.  
  167. PRINT_A_        PCALL PRINT_A,P_ADDONS
  168.                 RET
  169.  
  170. SCRUP_          PCALL SCRUP,P_ADDONS
  171.                 RET
  172.  
  173. SCRDN_          PCALL SCRDN,P_ADDONS
  174.                 RET
  175.  
  176. SET_MODE_       PCALL SET_MODE,P_ADDON1
  177.                 RET
  178.  
  179. INST_FATBOOT_   PCALL UNP_MICROBOOT,P_ADDON1
  180.                 RET
  181.  
  182. SORT_FINDFILES_ PCALL SORT_FINDFILES,P_ADDON1
  183.                 RET
  184.  
  185. CMOS_RW_        PCALL CMOS_RW,P_ADDON1
  186.                 RET
  187.  
  188. RST8PAGE0       LD HL,ERST8PAGE0
  189.                 JP NEXT_RST
  190.  
  191. ERST8PAGE0      LD BC,WIN_A0
  192.                 XOR A
  193.                 JP ADR_SEL_ROM
  194.  
  195. SELECT_MAPPER   LD A,(R_7FFD)
  196.                 AND 0X10
  197.                 RET Z
  198.                 LD A,8
  199.                 ADD A,L
  200.                 LD L,A
  201.                 RET
  202.  
  203. RESTART_NMI     PCALL CLS_TXTMODE8,P_ADDONS     ;ОЧИСТКА ТЕКСТМОДНОГО ЭКРАНА
  204.                 LD BC,WIN_A1
  205.                 LD A,P_RST8
  206.                 OUT (C),A                       ;ВКЛЮЧЕНИЕ ЭТОЙ СТРАНИЦЫ ROM ВО 2 ОКНО ПРОЕЦИРОВАНИЯ
  207.                 LD HL,CPU1+TEXT_PORTREGS
  208.                 PCALL PRTT_MSG,P_ADDONS         ;ПЕЧАТЬ ТЕКСТА
  209.                 PCALL PRT_PORTREGS,P_ADDON1     ;ПЕЧАТЬ СОДЕРЖИМОГО ПОРТОВ СЧИТАННОЙ КОНФИГУРАЦИИ
  210. ;==========ВРЕМЯНКА
  211. ;               LD HL,CPU1+TXT_VERIFY_FONT
  212. ;               PCALL PRTT_MSG,P_ADDONS         ;ПЕЧАТЬ ТЕКСТА О ПРОВЕРКЕ ШРИФТА
  213. ;               POP AF
  214. ;               LD HL,CPU1+TXT_VERIFY_OK        ;ТЕКСТ ЕСЛИ ВСЕ СОВПАЛО
  215. ;               JR NC,CONTMAGIC3
  216. ;               LD HL,CPU1+TXT_VERIFY_ERR       ;ТЕКСТ ЕСЛИ НЕ СОВПАЛО
  217. ;CONTMAGIC3     PCALL PRTT_MSG,P_ADDONS         ;ПЕЧАТЬ ОБ ОШИБКЕ
  218. ;==========ВРЕМЯНКА
  219.                 LD BC,WIN_A1
  220.                 LD A,P_ADDON1
  221.                 OUT (C),A                       ;ВКЛЮЧЕНИЕ ДОПОЛНЕНИЙ ВО 2 ОКНО ПРОЕЦИРОВАНИЯ
  222.                 LD IX,MAIN_MENU
  223.                 PCALL SETUP4SEL,P_ADDONS
  224.                 PCALL ITWINW,P_ADDONS           ;ВЫВОД ОКНА НА ТЕКСТМОДНЫЙ ЭКРАН
  225.                 PCALL ITSELECTOR,P_ADDONS
  226.                 AND A
  227.                 JR Z,CONTMAGIC2
  228.                 DEC A
  229.                 JR Z,RESTART_NMI
  230.                 DEC A
  231.                 JR Z,CONTMAGIC3
  232. CONTMAGIC2      XOR A
  233.                 IN A,(0XFE)
  234.                 CPL
  235.                 AND 0X1F
  236.                 JR NZ,CONTMAGIC2                ;ЖДЕМ ОТПУСКАНИЯ КНОПОК КЛАВИАТУРЫ
  237.                 PCALL RESTORE_TXTMODE,P_ADDONS  ;ВОССТАНОВЛЕНИЕ ТЕКСТМОДНОГО ЭКРАНА
  238.                 PCALL RESTORE_FONT,P_ADDONS     ;ВОССТАНОВЛЕНИЕ ШРИФТА
  239.                 PCALL RESTORE_PAL,P_ADDON2      ;ВОССТАНОВЛЕНИЕ ПАЛИТРЫ
  240. CONTMAGIC3      PCALL RESTORE_AY,P_ADDON1       ;ВОССТАНОВЛЕНИЕ РАГИСТРОВ AY
  241.                 LD BC,EXITNMISERVICE
  242.                 PUSH BC
  243.                 LD BC,WIN_P0
  244.                 XOR A
  245.                 JP ADR_SEL_ROM
  246.  
  247. ;ПРОДОЛЖЕНИЕ ОБРАБОТКИ RST8
  248. NEXT_RST8       LD HL,EXIT_RST8
  249. NEXT_RST        PUSH HL
  250.                 LD (INTERNAL_SP),SP
  251.                 LD HL,R_77
  252.                 CALL CONVERT_BPORT
  253.                 CALL P5_READ_BYTE
  254.                 LD A,(R_77)
  255.                 CALL CMP_SCRMODE
  256.                 LD HL,B0_CPU2
  257.                 CALL SELECT_MAPPER
  258. NEXT_RST1       LD B,(HL)
  259.                 INC HL
  260.                 LD A,(HL)
  261.                 AND 8
  262.                 LD A,B
  263.                 JR Z,NEXT_RST2
  264.                 OR 0XC0
  265. NEXT_RST2       LD (PAGE4READ),A
  266.                 LD A,(NEXTBYTERST8)
  267.                 AND 0X3F
  268.                 LD L,A
  269.                 LD H,0
  270.                 ADD HL,HL
  271.                 LD DE,CODE_TABL
  272.                 ADD HL,DE
  273.                 LD E,(HL)
  274.                 INC HL
  275.                 LD D,(HL)
  276.                 EX DE,HL
  277.                 JP (HL)
  278.  
  279. ;ПЕРЕКОНФИГУРАЦИЯ ОКОН ПРОЕЦИРОВАНИЯ
  280. ;СТРАНИЦА ПЕРЕМЕННЫХ В ОКНО 1, ОСНОВНАЯ ПАМЯТЬ В ЗАВИСИМОСТИ ОТ АДРЕСА В ОКНА 2 И 3
  281. RESETUP_WINS    EXX
  282.                 LD BC,WIN_P1
  283.                 XOR A
  284.                 OUT (C),A                       ;СТРАНИЦА ПЕРЕМЕННЫХ В ОКНО 1
  285.                 LD HL,CPU3
  286.                 ADD HL,SP
  287.                 LD SP,HL                        ;СТЕК ТОЖЕ В ОКНО 1
  288.                 LD HL,B0_CPU0-CPU1              ;ДЛЯ 0 МАППЕРА
  289.                 CALL SELECT_MAPPER
  290. RESETUPWINS1    EXX
  291.                 LD BC,CPU2                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X8000 ВЫШЕ
  292.                 LD A,H                          ;ПРОВЕРКА СТАРШЕГО БАЙТА АДРЕСА
  293.                 EXX
  294.                 CP 0X40
  295.                 JR C,RESETUPWINS2               ;УСТАНОВКА ДЛЯ ОКОН 0,1
  296.                 INC HL
  297.                 INC HL
  298.                 EXX
  299.                 LD BC,CPU1                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X4000 ВЫШЕ
  300.                 EXX
  301.                 CP 0X80
  302.                 JR C,RESETUPWINS2               ;УСТАНОВКА ДЛЯ ОКОН 1,2
  303.                 INC HL
  304.                 INC HL
  305.                 EXX
  306.                 LD BC,CPU0                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ БЕЗ ИЗМЕНЕНИЙ
  307.                 EXX
  308.                 CP 0XC0
  309.                 JR C,RESETUPWINS2               ;УСТАНОВКА ДЛЯ ОКОН 2,3
  310.                 INC HL
  311.                 INC HL
  312.                 EXX
  313.                 LD BC,CPU3                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X4000 НИЖЕ
  314.                 EXX
  315.                 LD B,HIGH (WIN_A2)              ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 2
  316.                 CALL RESETUPWINS4
  317.                 LD DE,0XFFF8
  318.                 ADD HL,DE                       ;АДРЕС ГДЕ КОНФИГ СТРАНИЦ ОСНОВНОЙ ПАМЯТИ ЛЕЖИТ
  319.                 JR RESETUPWINS5
  320.  
  321. RESETUPWINS2    LD B,HIGH (WIN_A2)              ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 2
  322.                 CALL RESETUPWINS4
  323. RESETUPWINS5    LD B,HIGH (WIN_A3)              ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 3
  324.                 CALL RESETUPWINS4
  325.                 EXX
  326.                 RET
  327.  
  328. RESETUPWINS4    LD E,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  329.                 INC HL                          ;УКАЗАНИЕ НА БАЙТ АДРЕСА ПОРТА
  330.                 BIT 3,(HL)
  331.                 JR NZ,RESETUPWINS3
  332.                 SET 3,B
  333.                 LD A,(HL)
  334.                 AND 3
  335.                 RRCA
  336.                 RRCA
  337.                 OUT (C),A                       ;СНАЧАЛА ПИШЕМ В ПОРТ XFF7
  338.                 RES 3,B
  339. RESETUPWINS3    INC HL
  340.                 OUT (C),E                       ;ТЕПЕРЬ ПИШЕМ В ПОРТ X7F7
  341.                 RET
  342.  
  343. ;ЧТЕНИЕ БАЙТА ИЗ ОБЛАСТИ ПАМЯТИ ВЫЗВАШЕЙ ПРОГИ
  344. P5_READ_BYTE    PUSH HL
  345.                 PUSH DE
  346.                 PUSH BC
  347.                 PUSH AF
  348.                 LD A,(RADRRET_H)                ;СТАРШИЙ БАЙТ АДРЕСА ОТКУДА ЧИТАТЬ
  349.                 CP 0X40
  350.                 JR NC,READBYTE_03
  351. ;ЕСЛИ АДРЕС ЧТЕНИЯ НИЖЕ 0X4000
  352.                 LD HL,B0_CPU0                   ;БАЙТЫ И АДРЕСА ПОРТОВ 0 МАППЕРА
  353.                 CALL SELECT_MAPPER
  354. READ_CPU0_01    LD D,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  355.                 INC HL
  356.                 LD A,(HL)                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА НУЖНОЙ СТРАНИЦЫ
  357.                 AND HIGH (WIN_A1)
  358.                 OR HIGH (WIN_P1)                ;ПРЕОБРАЗОВАЛИ СТАРШИЙ БАЙТ АДРЕСА ДЛЯ ВКЛЮЧЕНИЯ В 1 ОКНЕ      
  359.                 LD B,A
  360.                 LD C,LOW (WIN_A0)               ;BC=АДРЕС ПОРТА
  361.                 LD A,(R_77)
  362.                 LD E,0X3F
  363.                 AND 0X10                        ;ОПРЕДЕЛЯЕМ DOS ИЛИ НЕ DOS
  364.                 JR Z,READ_CPU0_02
  365.                 DEC E
  366. READ_CPU0_02    LD A,D
  367.                 AND E
  368.                 OUT (C),A                       ;ВКЛЮЧАЕМ ПАГУ BASIC ИЛИ DOS
  369.                 LD DE,CPU1                      ;СМЕЩЕНИЕ ДО 1 ОКНА ПРОЕЦИРОВАНИЯ
  370.                 LD HL,(RADRRET_L)               ;АДРЕС ОТКУДА ЧИТАТЬ
  371.                 ADD HL,DE                       ;ЧИТАТЬ ЧЕРЕЗ 1 ОКНО ПРОЕЦИРОВАНИЯ
  372.                 LD A,(HL)                       ;ПРОЧИТАЛИ БАЙТ
  373.                 SBC HL,DE                       ;ВЕРНУЛИ АДРЕС БАЙТА
  374.                 INC HL                          ;УВЕЛИЧИЛИ АДРЕС ВОЗВРАТА
  375.                 LD (RADRRET_L),HL               ;ВЕРНУЛИ АДРЕС ВОЗВРАТА
  376.                 JR READBYTE_02
  377.  
  378. ;ЕСЛИ АДРЕС ЧТЕНИЯ ВЫШЕ 0X4000
  379. READBYTE_03     LD HL,B0_CPU0                   ;БАЙТЫ И АДРЕСА ПОРТОВ 0 МАППЕРА
  380.                 CALL SELECT_MAPPER
  381. READBYTE_01     LD A,(RADRRET_H)                ;СТАРШИЙ БАЙТ АДРЕСА ОТКУДА ЧИТАТЬ
  382.                 AND 0XC0
  383.                 LD C,A
  384.                 RLCA
  385.                 RLCA
  386.                 RLCA
  387.                 LD E,A
  388.                 LD D,0                          ;DE=СМЕЩЕНИЕ В ТАБЛИЦЕ БАЙТА И СТАРШЕГО БАЙТА СТРАНИЦЫ ЧТЕНИЯ
  389.                 ADD HL,DE
  390.                 LD D,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  391.                 INC HL
  392.                 LD A,(HL)
  393.                 AND HIGH (WIN_A1)
  394.                 OR HIGH (WIN_P1)
  395.                 LD B,A
  396.                 LD C,LOW (WIN_A1)               ;BC=АДРЕС ПОРТА ДЛЯ 1 ОКНА ПРОЕЦИРОВАНИЯ
  397.                 LD HL,(RADRRET_L)               ;АДРЕС ОТКУДА ЧИТАТЬ
  398.                 OUT (C),D                       ;ВКЛЮЧИЛИ СТРАНИЦУ ДЛЯ ЧТЕНИЯ БАЙТА
  399.                 LD E,L                          ;МЛАДШИЙ БАЙТ АДРЕСА ЧТЕНИЯ
  400.                 LD A,H
  401.                 AND HIGH (WIN_A1)
  402.                 OR HIGH (CPU1)
  403.                 LD D,A                          ;СТАРШИЙ БАЙТ АДРЕСА ЧТЕНИЯ
  404.                 LD A,(DE)                       ;ПРОЧИТАЛИ БАЙТ
  405.                 INC HL                          ;УВЕЛИЧИЛИ АДРЕС ВОЗВРАТА
  406.                 LD (RADRRET_L),HL               ;ВЕРНУЛИ АДРЕС ВОЗВРАТА
  407. READBYTE_02     LD (NEXTBYTERST8),A             ;ПОЛОЖИЛИ ПРОЧИТАННЫЙ БАЙТ
  408.                 CALL MAIN_MEM13                 ;ВЕРНУЛИ СТРАНИЦЫ В 1 И 3 ОКНО ПРОЕЦИРОВАНИЯ
  409.                 POP AF
  410.                 POP BC
  411.                 POP DE
  412.                 POP HL
  413.                 RET
  414.  
  415. LDIR_BYTES      EXX
  416.                 LD BC,INT_ONLY_RET
  417.                 PUSH BC
  418.                 LD BC,LDIR__BYTES
  419.                 PUSH BC
  420.                 LD BC,WIN_P0
  421.                 XOR A
  422.                 JP ADR_SEL_ROM
  423.  
  424. ;ВОССТАНОВЛЕНИE СТРАНИЦ В ОКНАХ ПРОЕЦИРОВАНИЯ 1 И 3
  425. MAIN_MEM13      LD HL,B0_CPU1                   ;ДЛЯ 0 МАППЕРА
  426.                 CALL SELECT_MAPPER
  427. MAINMEM1        LD C,LOW (WIN_A0)
  428.                 CALL MAINMEM3                   ;ВЕРНУЛИ ДЛЯ 1 ОКНА ПРОЕЦИРОВАНИЯ
  429.                 INC HL                          ;ДАЛЕЕ ВОЗВРАЩАЕМ ДЛЯ 3 ОКНА ПРОЕЦИРОВАНИЯ
  430.                 INC HL
  431.                 CALL MAINMEM3
  432. SET_7FFD        DEC HL
  433.                 BIT 3,(HL)
  434.                 RET Z
  435.                 DEC HL
  436.                 BIT 7,(HL)
  437.                 RET Z
  438.                 LD A,(R_EFF7)
  439.                 AND 4
  440.                 LD A,(R_7FFD)
  441.                 LD D,A
  442.                 LD E,0
  443.                 LD HL,PAGES_7FFD_ALL
  444.                 JR NZ,SET7FFD1
  445.                 AND 0XE0
  446.                 RRCA
  447.                 RRCA
  448.                 LD E,A
  449. SET7FFD1        LD A,D
  450.                 AND 7
  451.                 OR E
  452.                 LD E,A
  453.                 LD D,0
  454.                 ADD HL,DE
  455.                 LD A,(HL)
  456.                 OUT (C),A
  457.                 RET
  458.  
  459. XXF7_7FFD       MACRO B
  460. PLUSIK := B
  461.                 REPT 8
  462.                 DB PLUSIK
  463. PLUSIK := PLUSIK-1
  464.                 ENDM
  465.                 ENDM
  466.  
  467. PAGES_7FFD_ALL  XXF7_7FFD 0XFF
  468.                 XXF7_7FFD 0XEF
  469.                 XXF7_7FFD 0XDF
  470.                 XXF7_7FFD 0XCF
  471.  
  472.                 XXF7_7FFD 0XF7
  473.                 XXF7_7FFD 0XE7
  474.                 XXF7_7FFD 0XD7
  475.                 XXF7_7FFD 0XC7
  476.  
  477. MAINMEM3        LD E,(HL)
  478.                 INC HL
  479.                 LD A,8
  480.                 AND (HL)
  481.                 LD A,E
  482.                 JR Z,MAINMEM4
  483.                 OR 0XC0
  484. MAINMEM4        LD E,A
  485.                 LD A,(HL)
  486.                 AND 0XF7
  487.                 OR 0X37
  488.                 LD B,A
  489.                 INC HL
  490.                 OUT (C),E
  491. INT_ONLY_RET    RET
  492.  
  493. ;КОНВЕРСИЯ СЧИТАННЫХ ЗНАЧЕНИЙ ИЗ ПОРТОВ КОНФИГУРАЦИИ
  494. ;HL=АДРЕС ОТКУДА БРАТЬ СЧИТАННЫЕ ЗНАЧЕНИЯ ДЛЯ КОНВЕРСИИ
  495. ;DE=БИТЫ 7,6 ДЛЯ ДЕКОДИРОВАНИЯ
  496. ;BC=КУДА СКЛАДЫВАТЬ ДЕКОДИРОВАННОЕ
  497. ;A=СЧИТАННОЕ ЗНАЧЕНИЕ ДЛЯ КОНВЕРСИИ ДЛЯ ПОРТА XX77
  498. CONVERT_BPORT   LD A,(HL)
  499.                 PUSH AF
  500.                 INC HL
  501.                 INC HL
  502.                 INC HL
  503.                 LD E,(HL)
  504.                 INC HL
  505.                 LD D,(HL)
  506.                 LD BC,8
  507.                 LD A,C                          ;КОНВЕРТИТЬ 8 БАЙТ
  508.                 ADD HL,BC
  509.                 LD BC,B0_CPU0
  510.                 LD IYL,HIGH (WIN_A3)&0XF8
  511. CBPORT03        EX AF,AF'
  512.                 LD A,(HL)
  513.                 CP 0XC0
  514.                 JR NC,CBPORT01
  515. ;ЕСЛИ ЧИСЛО МЕНЕЕ, ТО ВОССТАНАВЛИВАТЬ В ПОРТЫ X7F7
  516.                 LD (BC),A                       ;НОМЕР СТРАНИЦЫ ДЛЯ ЗАПИСИ В ПОРТ ПРИ ВОССТАНОВЛЕНИИ
  517.                 INC BC
  518.                 LD A,IYL
  519.                 ADD A,0X40
  520.                 LD IYL,A
  521.                 AND 0XF0
  522.                 RRCA
  523.                 RRCA
  524.                 SRL E
  525.                 RLA
  526.                 SRL D
  527.                 RLA
  528.                 LD (BC),A                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  529.                 INC BC
  530.                 JR CBPORT02
  531.  
  532. ;ЕСЛИ ЧИСЛО БОЛЬШЕ, ТО ВОССТАНАВЛИВАТЬ В ПОРТЫ XFF7
  533. CBPORT01        LD A,(HL)
  534.                 RLCA
  535.                 RLCA
  536.                 SRL D
  537.                 RRA
  538.                 SRL E
  539.                 RRA
  540.                 LD (BC),A                       ;НОМЕР СТРАНИЦЫ ДЛЯ ЗАПИСИ В ПОРТ ПРИ ВОССТАНОВЛЕНИИ
  541.                 INC BC
  542.                 LD A,IYL
  543.                 ADD A,0X40
  544.                 LD IYL,A
  545.                 LD (BC),A                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  546.                 INC BC
  547. CBPORT02        DEC HL
  548.                 EX AF,AF'
  549.                 DEC A
  550.                 JR NZ,CBPORT03
  551.                 POP HL
  552.                 LD L,0XBC
  553.                 LD A,H
  554.                 AND 0X0F
  555.                 OR 0XA0
  556.                 LD (BC),A                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ ПРИ ВОССТАНОВЛЕНИИ
  557.                 INC BC
  558.                 LD A,H
  559.                 AND 0X80
  560.                 RRCA
  561.                 OR L
  562.                 LD L,A
  563.                 LD A,H
  564.                 AND 0X60
  565.                 RLCA
  566.                 RLCA
  567.                 RLCA
  568.                 OR L
  569.                 LD (BC),A                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  570.                 RET
  571.  
  572. READ_KEYS
  573.                 RET
  574.  
  575.                 include fat/mounter.a80
  576.                 include fat/dev_drv.a80
  577.                 include fat/ngs_sd_drv.a80
  578.                 include fat/z_sd_drv.a80
  579.                 include fat/nemo_drv.a80
  580.                 include fat/read_fat.a80
  581.  
  582. X_OFFSET        EQU 63
  583. Y_OFFSET        EQU 2
  584. TEXT_PORTREGS   DB 0X17,MAGIC_COLOR
  585.                 DB 0X16,Y_OFFSET+0X01,X_OFFSET+0,"SP=      PC="
  586.                 DB 0X16,Y_OFFSET+0X02,X_OFFSET+0,"IR="
  587.                 DB 0X16,Y_OFFSET+0X03,X_OFFSET+0,"AF=     AF'="
  588.                 DB 0X16,Y_OFFSET+0X04,X_OFFSET+0,"BC=     BC'="
  589.                 DB 0X16,Y_OFFSET+0X05,X_OFFSET+0,"DE=     DE'="
  590.                 DB 0X16,Y_OFFSET+0X06,X_OFFSET+0,"HL=     HL'="
  591.                 DB 0X16,Y_OFFSET+0X07,X_OFFSET+0,"IX=      IY="
  592.                 DB 0X16,Y_OFFSET+0X09,X_OFFSET+0,"  MAP  0 1"
  593.                 DB 0X16,Y_OFFSET+0X0A,X_OFFSET+0,"CPU3="
  594.                 DB 0X16,Y_OFFSET+0X0B,X_OFFSET+0,"CPU2="
  595.                 DB 0X16,Y_OFFSET+0X0C,X_OFFSET+0,"CPU1="
  596.                 DB 0X16,Y_OFFSET+0X0D,X_OFFSET+0,"CPU0="
  597.                 DB 0X16,Y_OFFSET+0X0F,X_OFFSET+0,"7FFD="
  598.                 DB 0X16,Y_OFFSET+0X10,X_OFFSET+0,"EFF7="
  599.                 DB 0X16,Y_OFFSET+0X11,X_OFFSET+2,"77="
  600.                 DB 0X16,Y_OFFSET+0X12,X_OFFSET+2,"BF="
  601.                 DB 0X16,Y_OFFSET+0X14,X_OFFSET+0,"DOS ENABLE= "
  602.                 DB 0X16,1,0X10,0X17,0X32," EVO Magic Service beta ",0
  603.  
  604. TXT_VERIFY_FONT DB 0X16,0X18,0,0X17,0X22,"  VERIFY READING FONT ",0
  605. TXT_VERIFY_OK   DB " OK    ",0
  606. TXT_VERIFY_ERR  DB "ERROR  ",0
  607.  
  608. CMP_FONT        LD H,CMOS_BYTE_00
  609.                 PCALL READCMOS,P_ADDON1
  610.                 AND TYPE_FONT
  611.                 LD HL,CP866_FONT
  612.                 JR Z,CMPFONT1
  613.                 LD HL,ATM_FONT
  614. CMPFONT1        LD DE,OFFSET_BUFSYM
  615.                 PUSH DE
  616.                 PCALL UNPACK,P_ADDON1
  617.                 POP DE
  618.                 INC D
  619.                 LD BC,0X700
  620.                 LD HL,OFFSET_FNTSAVE+0X100
  621. CMPFONT2        LD A,(DE)
  622.                 INC DE
  623.                 CP (HL)
  624.                 SCF
  625.                 RET NZ
  626.                 CPI
  627.                 JP PE,CMPFONT2
  628.                 XOR A
  629.                 RET
  630.  
  631. CMP_SCRMODE     LD HL,FLAGS
  632.                 RES 7,(HL)
  633.                 AND 7
  634.                 CP 3
  635.                 RET Z
  636.                 SET 7,(HL)
  637.                 RET
  638.  
  639. SD_CARD_LOST    PEC_ON SHADOW_BF
  640.                 CALL MAIN_MEM13
  641.                 LD IX,SDCARD_LOST
  642.                 PCALL IWINW,P_ADDONS
  643.                 JR $
  644.  
  645.                 DUPL 0X3BFF-$,0XFF
  646.                 DW 0X0038
  647.  
  648.                 DUPL 0X3FF8-$,0XFF
  649.                 DB "RST_08"
  650.                 DW DATA_VERS
  651.                 DEPHASE
  652.  
  653.                 include addons.a80
  654.                 include addon1.a80
  655.                 include addon2.a80
  656.