Subversion Repositories pentevo

Rev

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

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