Subversion Repositories pentevo

Rev

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

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