Subversion Repositories pentevo

Rev

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

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