Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 04.07.2014 savelij
  3.  
  4. ;ПОСЛЕДОВАТЕЛЬНОСТЬ ДЛЯ RST 8
  5. ;СТАРЫЙ СТЕК    HL AF BC RF ADR_RET DE  ->
  6. ;-> НОВЫЙ СТЕК  HL(НОМЕР ПАГИ И ПОРТ BF) DE(RAMNROM И DOS7FFD) BC' DE' HL' IX IY AF' ->
  7. ;-> ЧТЕНИЕ КОНФИГА
  8.  
  9. CODE_NMIRST
  10.                 PHASE 0;ADR_SEL_ROM
  11.                 DUPL 8-$,0
  12.                 NOP
  13.                 JP NEW_RST8
  14.  
  15.                 DUPL ADR_SEL_ROM-$,0
  16.                 OUT (C),A                       ;ПЕРЕКЛЮЧЕНИЕ СТРАНИЦ ДЛЯ ПЕРЕХОДОВ
  17.                 NOP
  18. FOR_RET         NOP
  19.                 JP RAMSEL1
  20.  
  21. OUT_NMI         OUT (0XBE),A
  22.                 RETN
  23.  
  24.                 DUPL 0X0038-$,0XFF
  25. IM_EI_RET       EI
  26.                 RET
  27.  
  28.                 DUPL 0X0066-$,0XFF
  29.                 NOP
  30. ADR_MAGIC       JP NMI_SERVICE
  31. ADR_NMI_JUMP    EQU $-2
  32.  
  33.                 PHASE $+CPU6
  34. ;СЧИТАННАЯ КОНФИГУРАЦИЯ ПОРТОВ ДЛЯ RST 8
  35. R_BF            DB 0XFF
  36. R_77            DB 0XFF
  37. R_EFF7          DB 0XFF
  38. R_7FFD          DB 0XFF
  39. R_DOS7FFD       DB 0XFF
  40. R_RAMNROM       DB 0XFF
  41. R_1WINA3        DB 0XFF
  42. R_1WINA2        DB 0XFF
  43. R_1WINA1        DB 0XFF
  44. R_1WINA0        DB 0XFF
  45. R_0WINA3        DB 0XFF
  46. R_0WINA2        DB 0XFF
  47. R_0WINA1        DB 0XFF
  48. R_0WINA0        DB 0XFF
  49.  
  50. ;СЧИТАННАЯ КОНФИГУРАЦИЯ ПОРТОВ ДЛЯ NMI
  51. N_BF            DB 0XFF
  52. N_77            DB 0XFF
  53. N_EFF7          DB 0XFF
  54. N_7FFD          DB 0XFF
  55. N_DOS7FFD       DB 0XFF
  56. N_RAMNROM       DB 0XFF
  57. N_1WINA3        DB 0XFF
  58. N_1WINA2        DB 0XFF
  59. N_1WINA1        DB 0XFF
  60. N_1WINA0        DB 0XFF
  61. N_0WINA3        DB 0XFF
  62. N_0WINA2        DB 0XFF
  63. N_0WINA1        DB 0XFF
  64. N_0WINA0        DB 0XFF
  65. N_TEK_PALS      DUPL 0X10,0XFF
  66.  
  67. ;СОХРАНЕННЫЕ РЕГИСТРЫ ПРИ ВЫЗОВЕ RST 8
  68. RREG_FI         DB 0XFF
  69. RREG_I          DB 0XFF                         ;IF
  70. RREG_FF         DB 0XFF
  71. RREG_AA         DB 0XFF                         ;AF'
  72. RREG_IYL        DB 0XFF
  73. RREG_IYH        DB 0XFF                         ;IY
  74. RREG_IXL        DB 0XFF
  75. RREG_IXH        DB 0XFF                         ;IX
  76. RREG_LL         DB 0XFF
  77. RREG_HH         DB 0XFF                         ;HL'
  78. RREG_EE         DB 0XFF
  79. RREG_DD         DB 0XFF                         ;DE'
  80. RREG_CC         DB 0XFF
  81. RREG_BB         DB 0XFF                         ;BC'
  82. RDOS7FFD        DB 0XFF                         ;БИТЫ DOS7FFD ПЕРЕД ВЫЗОВОМ
  83. RRAMNROM        DB 0XFF                         ;БИТЫ RAMNROM ПЕРЕД ВЫЗОВОМ
  84. RPBF_CALL       DB 0XFF                         ;СОДЕРЖИМОЕ ПОРТА BF ПЕРЕД ВЫЗОВОМ
  85. RPAGE_CALL      DB 0XFF                         ;НОМЕР СТРАНИЦЫ ОТКУДА ПРИШЛИ
  86. RREG_E          DB 0XFF
  87. RREG_D          DB 0XFF                         ;DE
  88. RADRRET_L       DB 0XFF
  89. RADRRET_H       DB 0XFF                         ;ADR_RET
  90. REI_DI          DB 0XFF
  91. R_R             DB 0XFF                         ;RF
  92. RREG_C          DB 0XFF
  93. RREG_B          DB 0XFF                         ;BC
  94. RREG_F          DB 0XFF
  95. RREG_A          DB 0XFF                         ;AF
  96. RREG_L          DB 0XFF
  97. RREG_H          DB 0XFF                         ;HL
  98. RST8_SAVE_SP    DW 0XFF
  99.  
  100. ;СОХРАНЕННЫЕ РЕГИСТРЫ ПРИ ВЫЗОВЕ NMI
  101. ;ADR_RET AF' IY IX BC' DE' HL' BC DE RF IF AF HL
  102. NADRRET_L       DB 0XFF                         ;ADR RET
  103. NADRRET_H       DB 0XFF                        
  104. NREG_FF         DB 0XFF                         ;AF'
  105. NREG_AA         DB 0XFF
  106. NREG_IYL        DB 0XFF                         ;IY
  107. NREG_IYH        DB 0XFF
  108. NREG_IXL        DB 0XFF                         ;IX
  109. NREG_IXH        DB 0XFF
  110. NREG_CC         DB 0XFF                         ;BC'
  111. NREG_BB         DB 0XFF                
  112. NREG_EE         DB 0XFF                         ;DE'
  113. NREG_DD         DB 0XFF
  114. NREG_LL         DB 0XFF                         ;HL'
  115. NREG_HH         DB 0XFF
  116. NREG_C          DB 0XFF                         ;BC
  117. NREG_B          DB 0XFF
  118. NREG_E          DB 0XFF                         ;DE
  119. NREG_D          DB 0XFF
  120. NREG_EI_DI_2    DB 0XFF                         ;RF
  121. NREG_R          DB 0XFF
  122. NREG_EI_DI_1    DB 0XFF                         ;IF
  123. NREG_I          DB 0XFF
  124. NREG_F          DB 0XFF                         ;AF
  125. NREG_A          DB 0XFF
  126. NREG_L          DB 0XFF                         ;HL
  127. NREG_H          DB 0XFF
  128. NMI_SAVE_SP     DW 0XFF                         ;АДРЕС СОХРАНЕНИЯ СТЕКА ПРОГРАММЫ ПРЕРВАННОЙ ПО NMI
  129. INTERNAL_SP     DW 0XFF                         ;АДРЕС ХРАНЕНИЯ СТЕКА ПРИ РАБОТЕ СЕРВИСОВ
  130.  
  131. B0_CPU0         DB 0XFF                         ;БАЙТ ДЛЯ ПОРТА 0 ОКНА 0 МАПЕРА
  132. P0_CPU0         DB 0XFF                         ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 0 ОКНА 0 МАПЕРА
  133. B0_CPU1         DB 0XFF                         ;БАЙТ ДЛЯ ПОРТА 1 ОКНА 0 МАПЕРА
  134. P0_CPU1         DB 0XFF                         ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 1 ОКНА 0 МАПЕРА
  135. B0_CPU2         DB 0XFF                         ;БАЙТ ДЛЯ ПОРТА 2 ОКНА 0 МАПЕРА                    
  136. P0_CPU2         DB 0XFF                         ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 2 ОКНА 0 МАПЕРА
  137. B0_CPU3         DB 0XFF                         ;БАЙТ ДЛЯ ПОРТА 3 ОКНА 0 МАПЕРА                    
  138. P0_CPU3         DB 0XFF                         ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 3 ОКНА 0 МАПЕРА
  139. B1_CPU0         DB 0XFF                         ;БАЙТ ДЛЯ ПОРТА 0 ОКНА 0 МАПЕРА                    
  140. P1_CPU0         DB 0XFF                         ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 0 ОКНА 0 МАПЕРА
  141. B1_CPU1         DB 0XFF                         ;БАЙТ ДЛЯ ПОРТА 1 ОКНА 0 МАПЕРА                    
  142. P1_CPU1         DB 0XFF                         ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 1 ОКНА 0 МАПЕРА
  143. B1_CPU2         DB 0XFF                         ;БАЙТ ДЛЯ ПОРТА 2 ОКНА 0 МАПЕРА                    
  144. P1_CPU2         DB 0XFF                         ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 2 ОКНА 0 МАПЕРА
  145. B1_CPU3         DB 0XFF                         ;БАЙТ ДЛЯ ПОРТА 3 ОКНА 0 МАПЕРА                    
  146. P1_CPU3         DB 0XFF                         ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 3 ОКНА 0 МАПЕРА
  147. B_PORT77        DB 0XFF                         ;БАЙТ ДЛЯ ВЫВОДА В ПОРТ ХХ77
  148. P_PORT77        DB 0XFF                         ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ХХ77
  149.  
  150. F_INTEXT_DRV    DB 0XFF                         ;ФЛАГИ ПРИ ВНЕШНИХ/ВНУТРЕННИХ ВЫЗОВАХ ДРАЙВЕРОВ
  151.  
  152.                 PHASE $-CPU6
  153.                 DUPL HIGH ($)*0X100+0XFF-$,0XFF
  154.                 DW IM_EI_RET
  155.  
  156.                 DUPL HIGH ($)*0X100+0X80-$,0XFF
  157. STACK_RST
  158.  
  159.                 DUPL (HIGH ($)+1)*0X100-$,0XFF
  160. STACK_NMI
  161.  
  162.                 JP NMI_EXIT_DBG
  163.  
  164. RAMSEL1        
  165.                 LD (RST8_SAVE_SP-CPU6),SP       ;СОХРАНИЛИ СТАРЫЙ СТЕК
  166.                 LD SP,RREG_E-CPU6
  167.                 PUSH HL                         ;НОМЕР СТРАНИЦЫ ОТКУДА ПРИШЛИ И СОДЕРЖИМОЕ ПОРТА BF
  168.                 PUSH DE                         ;БИТЫ RAMNROM+DOS7FFD
  169.                 EXX
  170.                 PUSH BC                         ;BC'
  171.                 PUSH DE                         ;DE'
  172.                 PUSH HL                         ;HL'
  173.                 EXX
  174.                 PUSH IX                         ;IX
  175.                 PUSH IY                         ;IY
  176.                 EX AF,AF'
  177.                 PUSH AF                         ;AF'
  178.                 LD A,I
  179.                 PUSH AF                         ;IF
  180.                 LD HL,OUT_NMI
  181.                 LD (ADR_NMI_JUMP),HL
  182.                 LD A,0XC9
  183.                 LD (FOR_RET),A
  184.                 XOR A
  185.                 LD I,A
  186.                 LD HL,(RST8_SAVE_SP-CPU6)
  187.                 LD DE,RREG_E-CPU6
  188.                 LD BC,RREG_H-RPAGE_CALL
  189.                 LDIR
  190.                 LD HL,R_77-CPU6
  191.                 LD BC,RD_77
  192.                 INIR
  193.                 INI
  194.                 LD HL,(RDOS7FFD-CPU6)
  195.                 LD (R_DOS7FFD-CPU6),HL
  196.                 LD SP,STACK_RST
  197.                 LD A,(R_77-CPU6)
  198.                 AND 7
  199.                 OR 0XA0;8                       ;ВЫКЛЮЧЕНИЕ ТУРБО 14 МГЦ
  200.                 LD BC,0XFF77
  201.                 OUT (C),A
  202.                 PEC_OFF SHADOW_BF
  203.                 LD BC,PENT_CONF
  204.                 LD A,(R_EFF7-CPU6)
  205.                 AND %11101111
  206.                 OUT (C),A                       ;ВКЛЮЧЕНИЕ ТУРБО 7 МГЦ
  207.                 PEC_ON SHADOW_BF
  208.                 LD A,(R_7FFD-CPU6)
  209.                 AND 0X10
  210.                 LD HL,R_0WINA0-CPU6
  211.                 JR Z,RAMSEL3
  212.                 LD HL,R_1WINA0-CPU6
  213. RAMSEL3         LD A,(RPAGE_CALL-CPU6)
  214.                 LD (HL),A
  215.                 ATMPORT WIN_A3,0X40
  216.                 LD BC,WIN_P6
  217.                 XOR A
  218.                 OUT (C),A
  219.                 LD BC,WIN_A0
  220.                 LD A,P_RST8
  221.                 LD HL,CPU6
  222.                 ADD HL,SP
  223.                 LD SP,HL
  224.                 LD HL,CONT_RST8                 ;АДРЕС ПРОДОЛЖЕНИЯ ОБРАБОТКИ RST 8
  225.                 PUSH HL
  226.                 JP ADR_SEL_ROM
  227.  
  228. P4_EXIT_RST8    LD HL,NMI_SERVICE
  229.                 LD (ADR_NMI_JUMP),HL
  230.                 XOR A
  231.                 LD (FOR_RET),A
  232.                 PEC_OFF SHADOW_BF
  233.                 LD BC,PENT_CONF
  234.                 LD A,(R_EFF7-CPU6)
  235.                 OUT (C),A
  236.                 PEC_ON SHADOW_BF
  237.                 LD C,LOW (WIN_A5)
  238.                 LD A,(R_7FFD-CPU6)
  239.                 AND 0X10
  240.                 LD HL,B0_CPU1-CPU2
  241.                 JR Z,RENS11
  242.                 LD HL,B1_CPU1-CPU2
  243. RENS11          LD A,3
  244. RENS12          EX AF,AF'
  245.                 LD E,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  246.                 INC HL
  247.                 LD D,(HL)                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  248.                 INC HL
  249.                 LD A,D
  250.                 OR 7
  251.                 LD B,A
  252.                 OUT (C),E
  253.                 EX AF,AF'
  254.                 DEC A
  255.                 JR NZ,RENS12
  256.                 LD HL,RST8_SAVE_SP-(RREG_H-RPAGE_CALL)-CPU6
  257.                 LD DE,(RST8_SAVE_SP-CPU6)
  258.                 LD BC,RREG_H-RPAGE_CALL
  259.                 LDIR
  260.                 LD BC,(B_PORT77-CPU6)
  261.                 LD A,C
  262.                 LD C,0X77
  263.                 OUT (C),A
  264.                 LD SP,RREG_FI-CPU6
  265.                 POP AF
  266.                 LD I,A
  267.                 POP AF
  268.                 EX AF,AF'
  269.                 POP IY
  270.                 POP IX
  271.                 POP HL
  272.                 POP DE
  273.                 POP BC
  274.                 EXX
  275.                 POP DE
  276.                 POP HL
  277.                 LD SP,(RST8_SAVE_SP-CPU6)       ;ВОССТАНОВИЛИ СТЕК ВЫЗВАШЕЙ ПРОГРАММЫ
  278.                 LD BC,ADR_RST8END               ;АДРЕС ВОЗВРАТА
  279.                 PUSH BC
  280.                 LD C,LOW (WIN_A0)
  281.                 LD A,(R_7FFD-CPU6)
  282.                 AND 0X10
  283.                 LD DE,(B0_CPU0-CPU6)
  284.                 JR Z,RENS13
  285.                 LD DE,(B1_CPU0-CPU6)
  286. RENS13          LD A,D
  287.                 OR 7
  288.                 LD B,A
  289.                 LD A,E                          ;СТРАНИЦА ROM КУДА ВОЗВРАЩАТЬСЯ
  290.                 JP ADR_SEL_ROM
  291.  
  292. NMI_SERVICE     LD (NMI_SAVE_SP-CPU6),SP        ;СОХРАНЕНИЕ СТЕКА
  293.                 LD SP,NMI_SAVE_SP-CPU6          ;НОВЫЙ СТЕК
  294.                 PUSH HL                         ;СОХРАНИЛИ HL
  295.                 PUSH AF                         ;СОХРАНИЛИ AF
  296.                 LD A,I
  297.                 PUSH AF                         ;СОХРАНИЛИ I, ФЛАГИ И РЕЖИМ ПРЕРЫВАНИЙ
  298.                 LD A,R
  299.                 PUSH AF                         ;СОХРАНИЛИ R
  300.                 PUSH DE                         ;СОХРАНИЛИ DE
  301.                 PUSH BC                         ;СОХРАНИЛИ BC
  302.                 EXX
  303.                 PUSH HL                         ;СОХРАНИЛИ АЛЬТ HL
  304.                 PUSH DE                         ;СОХРАНИЛИ АЛЬТ DE
  305.                 PUSH BC                         ;СОХРАНИЛИ АЛЬТ BC
  306.                 PUSH IX                         ;СОХРАНИЛИ IX
  307.                 PUSH IY                         ;СОХРАНИЛИ IY
  308.                 EX AF,AF'
  309.                 PUSH AF                         ;СОХРАНИЛИ АЛЬТ AF
  310.                 LD HL,(NMI_SAVE_SP-CPU6)
  311.                 LD E,(HL)
  312.                 INC HL
  313.                 LD D,(HL)
  314.                 PUSH DE
  315.                 LD SP,STACK_NMI
  316.                 LD HL,OUT_NMI
  317.                 LD (ADR_NMI_JUMP),HL
  318.                 LD A,0XC9
  319.                 LD (FOR_RET),A                  ;RET ДЛЯ ПЕРЕКЛЮЧЕНИЯ СТРАНИЦ ROM/RAM
  320.                 LD A,0X80-0X0C
  321.                 LD HL,NREG_R-CPU6
  322.                 SLA (HL)
  323.                 RLA
  324.                 ADD A,(HL)
  325.                 RRCA
  326.                 LD (HL),A
  327.                 LD HL,N_BF-CPU6                 ;АДРЕС СОХРАНЕНИЯ ПРОЧИТАННЫХ РЕГИСТРОВ КОНФИГУРАЦИИ
  328.                 IN A,(PEVO_CONF)
  329.                 LD (HL),A
  330.                 INC HL
  331.                 LD BC,RD_77
  332. NMISERV002      INIR
  333.                 INI
  334.                 XOR A
  335.                 LD I,A                          ;ОБРАБОТЧИК ПРЕРЫВАНИЯ ПЕРЕСТАВИЛИИ ДЛЯ АДРЕСА 00FF
  336.                 PEC_ON SHADOW_BF
  337.  
  338. ;               LD DE,0XA70F                    ;ДАЛЬШЕ СОХРАНЯЕМ ТЕКУЩУЮ ПАЛИТРУ
  339. ;               LD BC,0XBD77
  340. ;               OUT (C),D                       ;ВКЛЮЧЕНИЕ ТЕКСТМОДА
  341. ;               LD (ADR_PALITRA),HL
  342. ;               LD BC,RD_PALITRA
  343. ;               EI
  344. ;               HALT
  345. ;               DI
  346. ;NMISERV003     LD A,E
  347. ;               BIT 3,E
  348. ;               OUT (0XFE),A
  349. ;               JR Z,NMISERV004
  350. ;               OUT (0XF6),A
  351. ;NMISERV004     IN A,(C)
  352. ;               LD (HL),A
  353. ;               INC HL
  354. ;               DEC E
  355. ;               JP P,NMISERV003                 ;ПАЛИТРУ СОХРАНИЛИ
  356. ;               LD HL,MAGIC_PAL
  357. ;               LD E,0X0F
  358. ;SETPAL1                LD A,E
  359. ;               BIT 3,E
  360. ;               OUT (0XFE),A
  361. ;               JR Z,$+4
  362. ;               OUT (0XF6),A
  363. ;               LD A,(HL)
  364. ;               INC HL
  365. ;               OR %00001100
  366. ;               OUT (0XFF),A
  367. ;               DEC E
  368. ;               JP P,SETPAL1
  369. ;               LD BC,0XFF77
  370. ;               OUT (C),D
  371.  
  372.                 LD BC,WIN_P6
  373.                 XOR A
  374.                 OUT (C),A                       ;ВКЛЮЧИЛИ ПОСЛЕДНЮЮ СТРАНИЦУ ОЗУ
  375.                 LD B,HIGH (WIN_A3)
  376.                 LD A,0X40
  377.                 OUT (C),A                       ;СНЯЛИ ЗАВИСИМОСТЬ 3 ОКНА ОТ ПОРТА 7FFD
  378.                 LD DE,CPU6
  379.                 ADD HL,DE
  380.                 LD (ADR_PALITRA),HL
  381.                 LD HL,CPU6
  382.                 ADD HL,SP
  383.                 LD SP,HL
  384.                 LD B,HIGH (WIN_A0)
  385.                 LD A,P_RST8
  386.                 OUT (C),A
  387. ;PEREHVAT       DUPL 3,0
  388. ;               LD A,(DEBUG_ONOFF)
  389. ;               AND A
  390. ;               JR NZ,IN_DEBUG
  391.                 LD HL,CONTINUE_MAGIC
  392.                 PUSH HL
  393.                 JP OUT_NMI
  394.  
  395. ;IN_DEBUG       XOR A
  396. ;               IN A,(0XFE)
  397. ;               CPL
  398. ;               AND 0X1F
  399. ;               JR NZ,IN_DEBUG
  400. ;               LD B,HIGH (WIN_P0)
  401. ;               LD A,PAGE_STS
  402. ;               OUT (C),A
  403. ;               LD HL,DEBUGGER
  404. ;               PUSH HL
  405. ;               JP OUT_NMI
  406.  
  407. ;ВЫХОД ИЗ МАГИКА
  408. EXITNMISERVICE  LD HL,ADR_MAGIC
  409.                 LD (HL),0XC9                    ;ЗАГЛУШКА НА MAGIC
  410.                 IN A,(PEVO_CONF)
  411.                 OR NMI_BF       ;SET 3,A
  412.                 OUT (PEVO_CONF),A
  413.                 AND NMI_BF!0XFF ;RES 3,A
  414.                 OUT (PEVO_CONF),A
  415.                 HALT                            ;ЖДЕМ СРАБАТЫВАНИЯ MAGIC
  416. FALSE_NMI       LD HL,ADR_MAGIC
  417.                 LD (HL),0XC3                    ;РАЗРЕШЕНИЕ ОБРАБОТЧИКА MAGIC ПЕРЕД ВЫХОДОМ
  418.  
  419. ;               LD HL,0
  420. ;ADR_PALITRA    EQU $-2
  421. ;               LD A,(N_77-CPU6)
  422. ;               LD E,0X0F
  423. ;               AND E
  424. ;               OR 0XA0
  425. ;               LD D,A
  426. ;               LD BC,0XBD77                    ;ДОСТУП К ПАЛИТРЕ
  427. ;               OUT (C),D                       ;ВКЛ.PAL
  428. ;SETPAL0                LD A,E
  429. ;               BIT 3,E
  430. ;               OUT (0XFE),A
  431. ;               JR Z,$+4
  432. ;               OUT (0XF6),A
  433. ;               LD A,(HL)
  434. ;               INC HL
  435. ;               OR %00001100
  436. ;               OUT (0XFF),A
  437. ;               DEC E
  438. ;               JP P,SETPAL0
  439. ;               LD BC,0XFF77
  440. ;               OUT (C),D
  441.  
  442.                 LD C,LOW (WIN_A0)
  443.                 LD A,(N_7FFD-CPU6)
  444.                 AND 0X10
  445.                 LD HL,B0_CPU0-CPU6
  446.                 JR Z,ENS11
  447.                 LD HL,B1_CPU0-CPU6
  448. ENS11           LD A,4
  449. ENS12           EX AF,AF'
  450.                 LD E,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  451.                 INC HL
  452.                 LD D,(HL)                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  453.                 INC HL
  454.                 LD A,D
  455.                 OR 0X3F
  456.                 LD B,A
  457.                 BIT 3,D
  458.                 JR NZ,ENS15
  459.                 LD A,D
  460.                 AND 3
  461.                 RRCA
  462.                 RRCA
  463.                 OUT (C),A
  464.                 RES 3,B
  465. ENS15           OUT (C),E
  466.                 EX AF,AF'
  467.                 DEC A
  468.                 JR NZ,ENS12
  469.                 PEC_OFF SHADOW_BF
  470.                 LD BC,PENT_CONF
  471.                 LD A,(N_EFF7-CPU6)
  472.                 OUT (C),A
  473.                 PEC_ON SHADOW_BF
  474.                 LD BC,(B_PORT77-CPU6)
  475.                 LD A,C
  476.                 LD C,0X77
  477.                 OUT (C),A
  478.                 LD A,(N_BF-CPU6)
  479.                 OUT (PEVO_CONF),A
  480.                 LD BC,CONF_128
  481.                 LD A,(N_7FFD-CPU6)
  482.                 OUT (C),A
  483.                 LD HL,NMI_SERVICE
  484.                 LD (ADR_NMI_JUMP),HL
  485.                 XOR A
  486.                 LD (FOR_RET),A
  487.                 LD SP,NADRRET_L-CPU6
  488.                 POP AF                          ;СБРОС АДРЕСА ВОЗВРАТА
  489.                 POP AF
  490.                 EX AF,AF'
  491.                 POP IY
  492.                 POP IX
  493.                 POP BC
  494.                 POP DE
  495.                 POP HL
  496.                 EXX
  497.                 POP BC
  498.                 POP DE
  499. ;               EI
  500. ;               HALT
  501. ;               DI
  502.                 POP AF
  503.                 JP PO,ENMISERV1
  504.                 EI
  505. ENMISERV1       LD A,0X80-0X0A
  506.                 LD HL,NREG_R-CPU6
  507.                 SLA (HL)
  508.                 RLA
  509.                 ADD A,(HL)
  510.                 RRCA
  511.                 LD R,A
  512.                 POP AF
  513.                 LD I,A
  514.                 POP AF
  515.                 POP HL
  516.                 LD SP,(NMI_SAVE_SP-CPU6)
  517.                 OUT (0XBE),A
  518.                 RETN
  519.  
  520. ;MAGIC_PAL      DB 0X0C,0X2D,0X4E,0X6F,0X9C,0XBD,0XDE,0XFF
  521. ;               DB 0XEC,0XED,0XEE,0XEF,0XFC,0XFD,0XFE,0XFF
  522.  
  523. LDIR__BYTES     LD HL,CPU6
  524.                 ADD HL,SP
  525.                 LD SP,HL
  526.                 LD A,(R_7FFD-CPU6)
  527.                 AND 0X10
  528.                 LD HL,B0_CPU1-CPU2
  529.                 JR Z,LDIR_BYTES5
  530.                 LD HL,B1_CPU1-CPU2
  531. LDIR_BYTES5     LD C,LOW (WIN_A0)
  532.                 LD A,3
  533. LDIR_BYTES3     EX AF,AF'
  534.                 LD E,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  535.                 INC HL
  536.                 LD D,(HL)                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  537.                 INC HL
  538.                 LD A,D
  539.                 OR 0X3F
  540.                 LD B,A
  541.                 BIT 3,D
  542.                 JR NZ,LDIR_BYTES4
  543.                 LD A,D
  544.                 AND 3
  545.                 RRCA
  546.                 RRCA
  547.                 OUT (C),A
  548.                 RES 3,B
  549. LDIR_BYTES4     OUT (C),E
  550.                 EX AF,AF'
  551.                 DEC A
  552.                 JR NZ,LDIR_BYTES3
  553.                 EXX
  554.                 LDIR
  555.                 LD BC,WIN_P6
  556.                 XOR A
  557.                 OUT (C),A
  558.                 LD HL,CPU6
  559.                 ADD HL,SP
  560.                 LD SP,HL
  561.                 LD BC,WIN_A0
  562.                 LD A,P_RST8
  563.                 JP ADR_SEL_ROM
  564.  
  565. NEW_RST8        JP $
  566.  
  567.                 PHASE $+CPU6
  568. ;ВЫЗОВ ПОДПРОГРАММ ИЗ ДРУГИХ СТРАНИЦ
  569. CALL2PAGE       EX (SP),HL
  570.                 PUSH BC
  571.                 PUSH AF
  572.                 LD C,(HL)
  573.                 INC HL
  574.                 LD B,(HL)
  575.                 INC HL
  576.                 LD (ADRCALL),BC
  577.                 LD BC,RD_7FFD
  578.                 IN A,(C)
  579.                 AND 0X10
  580.                 LD BC,RD_0WINA0
  581.                 JR Z,CALL2PAGE1
  582.                 LD BC,RD_1WINA0
  583. CALL2PAGE1      IN A,(C)
  584.                 AND 0X3F
  585.                 LD BC,STEK_PAGES
  586. TEKPAGE         EQU $-2
  587.                 LD (BC),A
  588.                 INC BC
  589.                 LD (TEKPAGE),BC
  590.                 LD A,(HL)
  591.                 INC HL
  592.                 LD BC,WIN_A0
  593.                 OUT (C),A
  594.                 POP AF
  595.                 POP BC
  596.                 EX (SP),HL
  597.                 CALL 0
  598. ADRCALL         EQU $-2
  599.                 PUSH BC
  600.                 PUSH AF
  601.                 LD BC,(TEKPAGE)
  602.                 DEC BC
  603.                 LD A,(BC)
  604.                 LD (TEKPAGE),BC
  605.                 LD BC,WIN_A0
  606.                 OUT (C),A
  607.                 POP AF
  608.                 POP BC
  609.                 RET
  610.  
  611. ;ВХОД В ОТЛАДЧИК
  612. DEBUGGER        DI
  613.                 LD HL,CPU6+DEBUG_ONOFF
  614.                 BIT 7,(HL)
  615.                 JR Z,DEBUGGER1
  616. ;ПРИНУДИТЕЛЬНЫЙ ВХОД В ОТЛАДЧИК С ВОЗВРАТОМ В ОСНОВНОЕ МЕНЮ NMI
  617.                 LD HL,JMP2MAINMENU
  618.                 PUSH HL
  619.                 JR DEBUGGER2
  620.  
  621. ;ВХОД В ОТЛАДЧИК ИЗ ОСНОВНОГО МЕНЮ NMI
  622. DEBUGGER1       LD HL,RESTART_MAIN
  623.                 PUSH HL
  624.                 LD HL,EXIT_DEBUG
  625.                 PUSH HL
  626.                 LD HL,CPU6+DEBUG_ONOFF
  627.                 SET 7,(HL)
  628. DEBUGGER2       LD HL,CONTINUE_PROG
  629.                 LD DE,NADRRET_L
  630.                 EVOPORT WIN_P3,PAGE_STS         ;ВКЛЮЧИЛИ СТРАНИЦУ С УСТАНОВЛЕННЫМ STS
  631.                 LD BC,N_BF
  632.                 LD A,(N_77)
  633.                 EX AF,AF'
  634.                 LD A,NO_EXIT_DEBUG-EXIT_DEBUG
  635.                 JP START_STS
  636.  
  637. ;НОРМАЛЬНЫЙ ВЫХОД ИЗ ОТЛАДЧИКА
  638. EXIT_DEBUG      LD HL,CPU6+DEBUG_ONOFF
  639.                 RES 7,(HL)
  640. ;ВЫХОД ИЗ ОТЛАДЧИКА МИНУЯ ОСНОВНОЕ МЕНЮ NMI
  641. NO_EXIT_DEBUG   EVOPORT WIN_A0,P_ADDONS
  642.                 LD HL,CPU6+DEBUG_ONOFF
  643.                 LD A,TRACE_DBG
  644.                 AND (HL)
  645.                 RET Z
  646.                 LD HL,TRACER_DBG
  647.                 EX (SP),HL
  648.                 RET
  649.  
  650. ;ВХОД В ОТЛАДЧИК МИНУЯ ОСНОВНОЕ МЕНЮ NMI
  651. JMP2MAINMENU    LD HL,CPU6+DEBUG_ONOFF
  652.                 RES 7,(HL)
  653.                 EVOPORT WIN_A0,P_RST8
  654.                 LD HL,CPU6+DEBUG_ONOFF
  655.                 LD A,TRACE_DBG
  656.                 AND (HL)
  657.                 JP NZ,CONTMAGIC3
  658.                 JP RESTART_NMI
  659.  
  660. ;ВОЗВРАТ ИЗ NMI ДЛЯ ОТЛАДЧИКА. НЕ ВОССТАНАВЛИВАЕТСЯ:
  661. ;ПАЛИТРА, ФОНТ, ВИДЕОРЕЖИМ
  662. NMI_EXIT_DBG    EVOPORT WIN_A0,P_ADDONS
  663.                 PCALL RESTORE_AY,P_RST8         ;ВОССТАНОВЛЕНИЕ РАГИСТРОВ AY
  664.                 LD HL,ADR_MAGIC
  665.                 LD (HL),0XC9                    ;ЗАГЛУШКА НА MAGIC
  666.                 IN A,(PEVO_CONF)
  667.                 OR NMI_BF
  668.                 OUT (PEVO_CONF),A
  669.                 AND NMI_BF!0XFF
  670.                 OUT (PEVO_CONF),A
  671.                 HALT                            ;ЖДЕМ СРАБАТЫВАНИЯ MAGIC
  672.                 LD HL,ADR_MAGIC
  673.                 LD (HL),0XC3                    ;РАЗРЕШЕНИЕ ОБРАБОТЧИКА MAGIC ПЕРЕД ВЫХОДОМ
  674.                 LD C,LOW (WIN_A0)
  675.                 LD A,(N_7FFD-CPU6)
  676.                 AND 0X10
  677.                 LD HL,B0_CPU0-CPU6
  678.                 JR Z,ENSDBG11
  679.                 LD HL,B1_CPU0-CPU6
  680. ENSDBG11        LD A,4
  681. ENSDBG12        EX AF,AF'
  682.                 LD E,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  683.                 INC HL
  684.                 LD D,(HL)                       ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
  685.                 INC HL
  686.                 LD A,D
  687.                 OR 0X3F
  688.                 LD B,A
  689.                 BIT 3,D
  690.                 JR NZ,ENSDBG15
  691.                 LD A,D
  692.                 AND 3
  693.                 RRCA
  694.                 RRCA
  695.                 OUT (C),A
  696.                 RES 3,B
  697. ENSDBG15        OUT (C),E
  698.                 EX AF,AF'
  699.                 DEC A
  700.                 JR NZ,ENSDBG12
  701.                 PEC_OFF SHADOW_BF
  702.                 LD BC,PENT_CONF
  703.                 LD A,(N_EFF7-CPU6)
  704.                 OUT (C),A
  705.                 PEC_ON SHADOW_BF
  706. ;               LD BC,(B_PORT77-CPU6)
  707. ;               LD A,C
  708. ;               LD C,0X77
  709. ;               OUT (C),A
  710.                 LD A,(N_BF-CPU6)
  711.                 OUT (PEVO_CONF),A
  712.                 LD BC,CONF_128
  713.                 LD A,(N_7FFD-CPU6)
  714.                 OUT (C),A
  715.                 LD HL,NMI_SERVICE
  716.                 LD (ADR_NMI_JUMP),HL
  717.                 XOR A
  718.                 LD (FOR_RET),A
  719.                 LD SP,NADRRET_L-CPU6
  720.                 POP AF                          ;СБРОС АДРЕСА ВОЗВРАТА
  721.                 POP AF
  722.                 EX AF,AF'
  723.                 POP IY
  724.                 POP IX
  725.                 POP BC
  726.                 POP DE
  727.                 POP HL
  728.                 EXX
  729.                 POP BC
  730.                 POP DE
  731. ;               EI
  732. ;               HALT
  733. ;               DI
  734.                 POP AF
  735.                 JP PO,ENMIDBGSERV1
  736.                 EI
  737. ENMIDBGSERV1    LD A,0X80-0X0A
  738.                 LD HL,NREG_R-CPU6
  739.                 SLA (HL)
  740.                 RLA
  741.                 ADD A,(HL)
  742.                 RRCA
  743.                 LD R,A
  744.                 POP AF
  745.                 LD I,A
  746.                 POP AF
  747.                 POP HL
  748.                 LD SP,(NMI_SAVE_SP-CPU6)
  749.                 OUT (0XBE),A
  750.                 RETN
  751.  
  752. SET_CPU3        PUSH BC
  753.                 LD BC,WIN_A3
  754.                 EX AF,AF'
  755.                 LD A,0X40
  756.                 OUT (C),A
  757.                 EX AF,AF'
  758.                 LD B,HIGH (WIN_P3)
  759.                 OUT (C),A
  760.                 POP BC
  761.                 RET
  762.  
  763. STEK_PAGES      DUPL 0X10,0XFF                  ;10
  764. RST_FLAGS       DB 0XFF                         ;1
  765. TXT_COLOR       DB 0XFF                         ;1
  766. COORD_XY        DW 0XFF                         ;2
  767. COLBUF          DUPL 0X50,0XFF                  ;50 БУФЕР СОХРАНЕНИЯ СТРОКИ ЦВЕТА С ЭКРАНА
  768. MOUSE_BUFF      DUPL 0X10,0XFF                  ;10 БУФЕР СОХРАНЕНИЯ ЧАСТИ ЭКРАНА ПОД КУРСОРОМ МЫШИ
  769. PRESSEDKEY      DW 0XFFFF                       ;2 АДРЕС СПИСКА ГОРЯЧИХ КЛАВИШ ПОСЛЕ ВЫВОДА ОКНА
  770. FLAGS           DB 0XFF                         ;1 СИСТЕМНЫЕ ФЛАГИ
  771.                                                 ;BIT 7-=1-TXT, =0-ZX SCREEN MODE
  772.                                                 ;BIT 6
  773.                                                 ;BIT 5
  774.                                                 ;BIT 4-=1-ВНЕШНЕЕ ОКНО, =0-ВНУТРЕННЕ ОКНО
  775.                                                 ;BIT 3-=1-ЗАПУСК С ФАТА, =0-ЗАПУСК С ДИСКЕТЫ
  776.                                                 ;BIT 2-=1-ЧАСЫ НАЙДЕНЫ, =0-НЕТ
  777.                                                 ;BIT 1-=1-МЫШЬ ЕСТЬ, =0-НЕТ
  778.                                                 ;BIT 0-КАКОЙ КУРСОР РИСОВАТЬ, ДЛЯ МИГАНИЯ
  779. NEXTBYTERST8    DB 0XFF                         ;1 СЛЕДУЮЩИЙ БАЙТ ПОСЛЕ ВЫЗОВА RST 8, КОД ДЛЯ ВЫЗОВА ДРАЙВЕРА
  780. OLD_STACK       DW 0XFFFF                       ;2
  781. ADR_INT         DW 0XFFFF                       ;2
  782. ADR_PALITRA     DW 0XFFFF                       ;2
  783. XNEW            DB 0XFF                         ;1
  784. ADRSTR_Y        DB 0XFF                         ;1
  785. ADRSTR_X        DB 0XFF                         ;1
  786. TXNEW           DB 0XFF                         ;1
  787. TADRSTR_Y       DB 0XFF                         ;1
  788. TADRSTR_X       DB 0XFF                         ;1
  789. NO_INW          DB 0XFF                         ;1
  790. COLOR4SYM       DB 0XFF                         ;1
  791. PAGE4READ       DB 0XFF                         ;1
  792. PAGE4SCR        DB 0XFF                         ;1
  793. DAT_MAIN_MENU   DUPL 3,0                        ;3
  794. DAT_SETUP_MENU  DUPL 3,0                        ;3
  795. DAT_FILEBROWS   DUPL 5,0                        ;5
  796. DAT_MOUNT       DUPL 3,0                        ;3
  797. WIN_DEV         DUPL 0X30,0                     ;30
  798. COL_CURSOR      DW 0XFFFF                       ;2
  799. _MORG           DB 0XFF                         ;1
  800. ARXY            DW 0XFFFF                       ;2
  801. ADR_REST        DW 0XFFFF                       ;2
  802. MOUPOS          DW 0XFFFF                       ;2
  803. TEK_MODES       DB 0XFF                         ;1
  804. CMP_FONT_FLAG   DB 0XFF                         ;1
  805. BUFF4TXT        DUPL 0X2B,0XFF                  ;2B
  806. EXT4FOUND       DUPL 0X10*3+1,0XFF              ;10*3+1
  807. CMOS4CRC16      DUPL ECMOS_DEFAULT-CMOS_DEFAULT,0XFF
  808. KSTATE0         DB 0XFF                         ;1 |
  809. KSTATE1         DB 0                            ;1 |
  810. KSTATE2         DB 0                            ;1 |
  811. KSTATE3         DB 0                            ;1 |
  812. KSTATE4         DB 0XFF                         ;1 |    АНАЛОГ
  813. KSTATE5         DB 0                            ;1 |    BASIC
  814. KSTATE6         DB 0                            ;1 |    ПЕРЕМЕННЫХ
  815. KSTATE7         DB 0                            ;1 |    ОПРОСА
  816. LAST_K          DB 0                            ;1 |    КЛАВИАТУРЫ
  817. REPDEL          DB 0X10                         ;1 |
  818. REPPER          DB 1                            ;1 |
  819. FLAGS_KEY       DB 0                            ;1 |
  820. FLAGS_KEY1      DB 0X10                         ;1 |
  821. MOUNT_SYM       DB 0XFF                         ;1
  822. EXT_TYPE        DB 0XFF                         ;1
  823. OST_HWOST       DW 0XFFFF                       ;2
  824. KUDA_HWOST      DW 0XFFFF                       ;2
  825. SCROLL_MODE     DB 0XFF                         ;1
  826. NEXT4PAGE       DW 0XFFFF                       ;2
  827. OSTAT_SECT      DW 0XFFFF                       ;2
  828. NACH_SECT       DW 0XFFFF                       ;2
  829. START_DATA      DW 0XFFFF                       ;2
  830. AY_REGS         DUPL 0X0E,0XFF                  ;D
  831. TEKBUFTSC       DW 0XFFFF                       ;2
  832. TEK_TEXT        DW 0XFFFF                       ;2
  833. TURBO_MODE      DUPL 5,0XFF                     ;5
  834. MEMORY_MODE     DUPL 4,0XFF                     ;3
  835. BUFF_TIME       DB 0X16,0X00,0X48,0X17,CYAN<<3+BLUE+0XC0
  836. TXT_TIME        DB "00:00:00",0X16,0X01,0X48
  837. TXT_DATA        DB "00.00.00",0X17,0XFF,0
  838. EBUFF_TIME
  839. NAME_RAMDISK    DUPL 0X20,0
  840. FILE_DEST       DUPL 0X20,0XFF                  ;20 ОПИСАТЕЛЬ ОТКРЫТОГО ФАЙЛА (КУДА)
  841. FB_EXT          DUPL 0X0B,0XFF                  ;B БУФЕР 8.3 ДЛЯ ПОИСКА ИМЕНИ
  842. SAVE_IY         DW 0XFFFF                       ;2 ВНУТРЕНЕЕ СОХРАНЕНИЕ РЕГИСТРОВ ДЛЯ ДАЛЬНЕЙШЕГО ИСПОЛЬЗОВАНИЯ
  843. ADR_MASK_EXT    DW 0XFFFF                       ;2 АДРЕС РАСШИРЕНИЙ ФАЙЛОВ ДЛЯ ПОИСКА
  844. ADR_SKLAD       DW 0XFFFF                       ;2 АДРЕС СКЛАДИРОВАНИЯ НАЙДЕННОГО
  845. ADR_SKLAD_NAME  DW 0XFFFF                       ;2
  846. MAKS_ADR        DB 0XFF                         ;1 СТАРШИЙ БАЙТ МАКСИМАЛЬНОГО АДРЕСА БУФЕРА СКЛАДИРОВАНИЯ
  847. KOL_FOUNDED     DW 0XFFFF                       ;2 КОЛИЧЕСТВО НАЙДЕННЫХ ОПИСАТЕЛЕЙ
  848. OUT_NAME_FILE   DB 0X17,0XFF,0X16,0,0,0
  849. OUT_NAME_FILET  EQU $-3
  850. BUF_FILEITEM    DUPL 0X20,0XFF
  851. EXTERN_PAL      DUPL 0X10,0XFF
  852. ENMI_SERVICE
  853.  
  854.                 DEPHASE
  855.                 PHASE $-CPU6
  856.