Subversion Repositories pentevo

Rev

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

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