Subversion Repositories pentevo

Rev

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

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