Subversion Repositories pentevo

Rev

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

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