Subversion Repositories pentevo

Rev

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

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