Subversion Repositories pentevo

Rev

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

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