Subversion Repositories pentevo

Rev

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

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