Subversion Repositories pentevo

Rev

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

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