Subversion Repositories pentevo

Rev

Rev 834 | Rev 961 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

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