Subversion Repositories pentevo

Rev

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

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