Subversion Repositories pentevo

Rev

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

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