Subversion Repositories pentevo

Rev

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

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