Subversion Repositories pentevo

Rev

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

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