Subversion Repositories pentevo

Rev

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

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