Subversion Repositories pentevo

Rev

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

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