Top secrets sources NedoPC pentevo

Rev

Rev 1035 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?


; LAST UPDATE: 14.10.2023 savelij

; ¯®á«¥¤®¢ â¥«ì­®áâì ¤«ï RST 8
; áâ àë© á⥪   HL AF BC RF ADR_RET DE  ->
; -> ­®¢ë© á⥪ HL(­®¬¥à ¯ £¨ ¨ ¯®àâ BF) DE(RAMNROM ˆ DOS7FFD) BC' DE' HL' IX IY AF' ->
; -> ç⥭¨¥ ª®­ä¨£ 

REG_R_CORRECT   EQU 0x0D

CODE_NMIRST
       
                PHASE 0

                JP CALL2PAGE                    ; ¢ë§®¢ ª®¤  ¢ ¤à㣮© áâà ­¨æ¥ ROM

                JP CALL2RAMPAGE                 ; ¢ë§®¢ ª®¤  ¢ ¤à㣮© áâà ­¨æ¥ RAM

                DUPL ADR_SEL_ROM-$,0
                OUT (C),A                       ; ¯¥à¥ª«î祭¨¥ áâà ­¨æ ¤«ï ¯¥à¥å®¤®¢
                NOP
FOR_RET         NOP
                JP RAMSEL1

OUT_NMI         OUT (0xBE),A
                RETN

                DUPL 0x0038-$,0xFF
IM_EI_RET       EI
                RET

VIRT_BITS       DB 0                            ; ¡¨âë 7-4 ¯à¨¬®­â¨à®¢ ­­ë¥ ¤¨áª¨,
                                                ; ¡¨âë 3-2 ­®¬¥à ॠ«ì­®£® ¤¨áª 
                                                ; ¡¨âë 1-0 ­®¬¥à ¢¨àâã «ì­®£® ¤¨áª 

                DUPL 0x0066-$,0xFF
                NOP
                NOP
ADR_MAGIC       JP NMI_SERVICE
ADR_NMI_JUMP    EQU $-2

                PHASE $+CPU6
; áç¨â ­­ ï ª®­ä¨£ãà æ¨ï ¯®à⮢ ¤«ï RST 8
R_BF            DB 0xFF
R_77            DB 0xFF
R_EFF7          DB 0xFF
R_7FFD          DB 0xFF
R_DOS7FFD       DB 0xFF
R_RAMNROM       DB 0xFF
R_1WINA3        DB 0xFF
R_1WINA2        DB 0xFF
R_1WINA1        DB 0xFF
R_1WINA0        DB 0xFF
R_0WINA3        DB 0xFF
R_0WINA2        DB 0xFF
R_0WINA1        DB 0xFF
R_0WINA0        DB 0xFF

; áç¨â ­­ ï ª®­ä¨£ãà æ¨ï ¯®à⮢ ¤«ï NMI
N_BF            DB 0xFF
N_77            DB 0xFF
N_EFF7          DB 0xFF
N_7FFD          DB 0xFF
N_DOS7FFD       DB 0xFF
N_RAMNROM       DB 0xFF
N_1WINA3        DB 0xFF
N_1WINA2        DB 0xFF
N_1WINA1        DB 0xFF
N_1WINA0        DB 0xFF
N_0WINA3        DB 0xFF
N_0WINA2        DB 0xFF
N_0WINA1        DB 0xFF
N_0WINA0        DB 0xFF
N_TEK_PALS      DUPL 0x10,0xFF

; á®åà ­¥­­ë¥ ॣ¨áâàë ¯à¨ ¢ë§®¢¥ RST 8
RREG_FI         DB 0xFF
RREG_I          DB 0xFF                         ; IF
RREG_FF         DB 0xFF
RREG_AA         DB 0xFF                         ; AF'
RREG_IYL        DB 0xFF
RREG_IYH        DB 0xFF                         ; IY
RREG_IXL        DB 0xFF
RREG_IXH        DB 0xFF                         ; IX
RREG_LL         DB 0xFF
RREG_HH         DB 0xFF                         ; HL'
RREG_EE         DB 0xFF
RREG_DD         DB 0xFF                         ; DE'
RREG_CC         DB 0xFF
RREG_BB         DB 0xFF                         ; BC'
RDOS7FFD        DB 0xFF                         ; ¡¨âë DOS7FFD ¯¥à¥¤ ¢ë§®¢®¬
RRAMNROM        DB 0xFF                         ; ¡¨âë RAMNROM ¯¥à¥¤ ¢ë§®¢®¬
RPBF_CALL       DB 0xFF                         ; ᮤ¥à¦¨¬®¥ ¯®àâ  BF ¯¥à¥¤ ¢ë§®¢®¬
RPAGE_CALL      DB 0xFF                         ; ­®¬¥à áâà ­¨æë ®âªã¤  ¯à¨è«¨
RREG_E          DB 0xFF
RREG_D          DB 0xFF                         ; DE
RADRRET_L       DB 0xFF
RADRRET_H       DB 0xFF                         ; ADR_RET
REI_DI          DB 0xFF
R_R             DB 0xFF                         ; RF
RREG_C          DB 0xFF
RREG_B          DB 0xFF                         ; BC
RREG_F          DB 0xFF
RREG_A          DB 0xFF                         ; AF
RREG_L          DB 0xFF
RREG_H          DB 0xFF                         ; HL
RST8_SAVE_SP    DW 0xFF

; á®åà ­¥­­ë¥ ॣ¨áâàë ¯à¨ ¢ë§®¢¥ NMI
; ADR_RET AF' IY IX BC' DE' HL' BC DE RF IF AF HL
NADRRET_L       DB 0xFF                         ; ADR RET
NADRRET_H       DB 0xFF
NREG_FF         DB 0xFF                         ; AF'
NREG_AA         DB 0xFF
NREG_IYL        DB 0xFF                         ; IY
NREG_IYH        DB 0xFF
NREG_IXL        DB 0xFF                         ; IX
NREG_IXH        DB 0xFF
NREG_CC         DB 0xFF                         ; BC'
NREG_BB         DB 0xFF                
NREG_EE         DB 0xFF                         ; DE'
NREG_DD         DB 0xFF
NREG_LL         DB 0xFF                         ; HL'
NREG_HH         DB 0xFF
NREG_C          DB 0xFF                         ; BC
NREG_B          DB 0xFF
NREG_E          DB 0xFF                         ; DE
NREG_D          DB 0xFF
NREG_EI_DI_2    DB 0xFF                         ; RF
NREG_R          DB 0xFF
NREG_EI_DI_1    DB 0xFF                         ; IF
NREG_I          DB 0xFF
NREG_F          DB 0xFF                         ; AF
NREG_A          DB 0xFF
NREG_L          DB 0xFF                         ; HL
NREG_H          DB 0xFF
NMI_SAVE_SP     DW 0xFF                         ;  ¤à¥á á®åà ­¥­¨ï á⥪  ¯à®£à ¬¬ë ¯à¥à¢ ­­®© ¯® NMI
NUM_IM          DB 0xFF                         ; ०¨¬ ¯à¥à뢠­¨©: 0-IM 1, 1-IM 2
INT_MODE        DB 0xFF                         ; ¯à¥à뢠­¨ï 0-§ ¯à¥è¥­ë, 1-à §à¥è¥­ë
INTERNAL_SP     DW 0xFF                         ;  ¤à¥á åà ­¥­¨ï á⥪  ¯à¨ à ¡®â¥ á¥à¢¨á®¢

B0_CPU0         DB 0xFF                         ; ¡ ©â ¤«ï ¯®àâ  0 ®ª­  0 ¬ ¯¥à 
P0_CPU0         DB 0xFF                         ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ  ¯®àâ  ¤«ï 0 ®ª­  0 ¬ ¯¥à 
B0_CPU1         DB 0xFF                         ; ¡ ©â ¤«ï ¯®àâ  1 ®ª­  0 ¬ ¯¥à 
P0_CPU1         DB 0xFF                         ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ  ¯®àâ  ¤«ï 1 ®ª­  0 ¬ ¯¥à 
B0_CPU2         DB 0xFF                         ; ¡ ©â ¤«ï ¯®àâ  2 ®ª­  0 ¬ ¯¥à 
P0_CPU2         DB 0xFF                         ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ  ¯®àâ  ¤«ï 2 ®ª­  0 ¬ ¯¥à 
B0_CPU3         DB 0xFF                         ; ¡ ©â ¤«ï ¯®àâ  3 ®ª­  0 ¬ ¯¥à 
P0_CPU3         DB 0xFF                         ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ  ¯®àâ  ¤«ï 3 ®ª­  0 ¬ ¯¥à 
B1_CPU0         DB 0xFF                         ; ¡ ©â ¤«ï ¯®àâ  0 ®ª­  0 ¬ ¯¥à 
P1_CPU0         DB 0xFF                         ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ  ¯®àâ  ¤«ï 0 ®ª­  0 ¬ ¯¥à 
B1_CPU1         DB 0xFF                         ; ¡ ©â ¤«ï ¯®àâ  1 ®ª­  0 ¬ ¯¥à 
P1_CPU1         DB 0xFF                         ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ  ¯®àâ  ¤«ï 1 ®ª­  0 ¬ ¯¥à 
B1_CPU2         DB 0xFF                         ; ¡ ©â ¤«ï ¯®àâ  2 ®ª­  0 ¬ ¯¥à 
P1_CPU2         DB 0xFF                         ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ  ¯®àâ  ¤«ï 2 ®ª­  0 ¬ ¯¥à 
B1_CPU3         DB 0xFF                         ; ¡ ©â ¤«ï ¯®àâ  3 ®ª­  0 ¬ ¯¥à 
P1_CPU3         DB 0xFF                         ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ  ¯®àâ  ¤«ï 3 ®ª­  0 ¬ ¯¥à 
B_PORT77        DB 0xFF                         ; ¡ ©â ¤«ï ¢ë¢®¤  ¢ ¯®à⠕•77
P_PORT77        DB 0xFF                         ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ  ••77
B_PORT_VIRT     DB 0xFF                         ; ⥪ã饥 á®áâ®ï­¨¥ ¯®àâ  ¢¨àâã«ì­ëå ¤¨áª®¢®¤®¢

F_INTEXT_DRV    DB 0xFF                         ; ä« £¨ ¯à¨ ¢­¥è­¨å/¢­ãâ७­¨å ¢ë§®¢ å ¤à ©¢¥à®¢
TMP_NUMHDD      DB 0xFF
TMP_ADR_0068    DD 0xFFFFFFFF                   ; á®åà ­¥­¨¥ ¯®¤ ¯¥à¥å¢ â稪®¬ NMI
NUMSEC_LBA48    DQ 0xFFFFFFFFFFFFFFFF           ; ­®¬¥à ᥪâ®à  ¤«ï ç⥭¨ï/§ ¯¨á¨
VARS_TXT_DEC    DB "281474976710655\0"          ; ç¨á«® ¤® 48 ¡¨â

                PHASE $ & 0x3FFF
                DUPL HIGH ($) * 0x100 + 0xFF - $,0xFF
                DW IM_EI_RET

                DUPL HIGH ($) * 0x100 + 0x80 - $,0xFF
STACK_RST

                DUPL (HIGH ($) + 1) * 0x100 - $,0xFF
STACK_NMI

                JP NMI_EXIT_DBG

; ¢å®¤ ¯® RST 8
RAMSEL1        
                LD (RST8_SAVE_SP-CPU6),SP       ; á®åà ­¨«¨ áâ àë© á⥪
                LD SP,RREG_E-CPU6
                PUSH HL                         ; ­®¬¥à áâà ­¨æë ®âªã¤  ¯à¨è«¨ ¨ ᮤ¥à¦¨¬®¥ ¯®àâ  BF
                PUSH DE                         ; ¡¨âë RAMNROM+DOS7FFD
                EXX
                PUSH BC                         ; BC'
                PUSH DE                         ; DE'
                PUSH HL                         ; HL'
                EXX
                PUSH IX                         ; IX
                PUSH IY                         ; IY
                EX AF,AF'
                PUSH AF                         ; AF'

                LD A,I
                PUSH AF                         ; IF
; ¢®ááâ ­ ¢«¨¢ ¥¬ ¯ ¬ïâì ¯®¤ ¯¥à¥å®¤®¬ ­  ®¡à ¡®â稪 NMI
                LD HL,ADR_MAGIC
                LD DE,TMP_ADR_0068 - CPU2
                LDI
                LDI
                LDI

                LD A,0xC9
                LD (FOR_RET),A
                XOR A
                LD I,A
                LD HL,(RST8_SAVE_SP-CPU6)
                LD DE,RREG_E-CPU6
                LD BC,RREG_H-RPAGE_CALL
                LDIR
                LD HL,R_77-CPU6
                LD BC,RD_77
                INIR
                INI
                LD BC,FDD_EMU_PORT
                IN A,(C)
                LD (B_PORT_VIRT & 0x3FFF),A
                XOR A
                OUT (C),A
                LD HL,(RDOS7FFD-CPU6)
                LD (R_DOS7FFD-CPU6),HL
                LD SP,STACK_RST
                LD A,(R_77-CPU6)
                AND 7
                OR 0xA0                         ; ¢ëª«î祭¨¥ âãà¡® 14 ¬£æ
                LD BC,0xFF77
                OUT (C),A
        PEC_OFF M_SHADOW_BF
                LD BC,PENT_CONF
                LD A,(R_EFF7-CPU6)
                AND %11101111
                OUT (C),A                       ; ¢ª«î祭¨¥ âãà¡® 7 ¬£æ
        PEC_ON M_SHADOW_BF
                LD A,(R_7FFD-CPU6)
                AND 0x10
                LD HL,R_0WINA0-CPU6
                JR Z,RAMSEL3
                LD HL,R_1WINA0-CPU6
RAMSEL3         LD A,(RPAGE_CALL-CPU6)
                LD (HL),A
        ATMPORT WIN_A3,0x40
                LD BC,WIN_P6
                XOR A
                OUT (C),A
                LD BC,WIN_A0
                LD A,ROM_RST83
                LD HL,CPU6
                ADD HL,SP
                LD SP,HL
                LD HL,CONT_RST8                 ;  ¤à¥á ¯à®¤®«¦¥­¨ï ®¡à ¡®âª¨ RST 8
                PUSH HL
                JP ADR_SEL_ROM

; ¢ë室 ¨§ ®¡à ¡®â稪  RST 8
P4_EXIT_RST8
; á®å࠭塞 ¯ ¬ïâì ¯®¤ ¯¥à¥å®¤®¬ ­  ®¡à ¡®â稪 NMI
                LD HL,TMP_ADR_0068 - CPU2
                LD DE,ADR_MAGIC
                LDI
                LDI
                LDI

                XOR A
                LD (FOR_RET),A
        PEC_OFF M_SHADOW_BF
                LD BC,PENT_CONF
                LD A,(R_EFF7-CPU6)
                OUT (C),A
        PEC_ON M_SHADOW_BF
                LD C,LOW (WIN_A5)
                LD A,(R_7FFD-CPU6)
                AND 0x10
                LD HL,B0_CPU1-CPU2
                JR Z,.L11
                LD HL,B1_CPU1-CPU2
.L11            LD A,3
.L12            EX AF,AF'
                LD E,(HL)                       ; ¡ ©â ¤«ï § ¯¨á¨ ¢ ¯®àâ
                INC HL
                LD D,(HL)                       ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ 
                INC HL
                LD A,D
                OR 7
                LD B,A
                OUT (C),E
                EX AF,AF'

                DEC A
                JR NZ,.L12
        IFDEF DOS_FE
                LD BC,FDD_EMU_PORT
                LD A,(B_PORT_VIRT & 0x3FFF)
                OUT (C),A
        ENDIF
                LD HL,RST8_SAVE_SP-(RREG_H-RPAGE_CALL)-CPU6
                LD DE,(RST8_SAVE_SP-CPU6)
                LD BC,RREG_H-RPAGE_CALL
                LDIR
                LD BC,(B_PORT77-CPU6)
                LD A,C
                LD C,0x77
                OUT (C),A
                LD SP,RREG_FI-CPU6
                POP AF
                LD I,A
                POP AF
                EX AF,AF'
                POP IY
                POP IX
                POP HL
                POP DE
                POP BC
                EXX
                POP DE
                POP HL
                LD SP,(RST8_SAVE_SP-CPU6)       ; ¢®ááâ ­®¢¨«¨ á⥪ ¢ë§¢ è¥© ¯à®£à ¬¬ë
                LD BC,ADR_RST8END               ;  ¤à¥á ¢®§¢à â 
                PUSH BC
                LD C,LOW (WIN_A0)
                LD A,(R_7FFD-CPU6)
                AND 0x10
                LD DE,(B0_CPU0-CPU6)
                JR Z,.L13
                LD DE,(B1_CPU0-CPU6)
.L13            LD A,D
                OR 7
                LD B,A
                LD A,E                          ; áâà ­¨æ  ROM ªã¤  ¢®§¢à é âìáï
                JP ADR_SEL_ROM

; ¢å®¤ ¯® NMI
NMI_SERVICE     LD (NMI_SAVE_SP-CPU6),SP        ; á®åà ­¥­¨¥ á⥪ 
                LD SP,NMI_SAVE_SP-CPU6          ; ­®¢ë© á⥪
                PUSH HL                         ; á®åà ­¨«¨ HL
                PUSH AF                         ; á®åà ­¨«¨ AF
                LD A,I
                PUSH AF                         ; á®åà ­¨«¨ I, ä« £¨ ¨ ०¨¬ ¯à¥à뢠­¨©
                LD A,R
                PUSH AF                         ; á®åà ­¨«¨ R
                PUSH DE                         ; á®åà ­¨«¨ DE
                PUSH BC                         ; á®åà ­¨«¨ BC
                EXX
                PUSH HL                         ; á®åà ­¨«¨ €‹œ’ HL
                PUSH DE                         ; á®åà ­¨«¨ €‹œ’ DE
                PUSH BC                         ; á®åà ­¨«¨ €‹œ’ BC
                PUSH IX                         ; á®åà ­¨«¨ IX
                PUSH IY                         ; á®åà ­¨«¨ IY
                EX AF,AF'

                PUSH AF                         ; á®åà ­¨«¨  «ìâ AF
                LD A,0x80-REG_R_CORRECT
                LD HL,NREG_R-CPU6
                SLA (HL)
                RLA
                ADD A,(HL)
                RRCA
                LD (HL),A                       ; ª®à४æ¨ï ॣ¨áâà  R
; á®å࠭塞 ¯®¬ïâì ¯®¤ ¯¥à¥å®¤®¬ ­  ®¡à ¡®â稪 NMI
                LD HL,ADR_MAGIC
                LD DE,TMP_ADR_0068 - CPU2
                LDI
                LDI
                LDI

                LD HL,(NMI_SAVE_SP-CPU6)
                LD E,(HL)
                INC HL
                LD D,(HL)
                LD HL,(NREG_F-CPU6)
                AND A
                SBC HL,DE
                JR NZ,.L005
                LD HL,(NMI_SAVE_SP-CPU6)
                INC HL
                INC HL
                LD (NMI_SAVE_SP-CPU6),HL
                LD E,(HL)
                INC HL
                LD D,(HL)
.L005           PUSH DE
                LD SP,STACK_NMI
                LD HL,OUT_NMI
                LD (ADR_NMI_JUMP),HL
                LD A,0xC9
                LD (FOR_RET),A                  ; RET ¤«ï ¯¥à¥ª«î祭¨ï áâà ­¨æ ROM/RAM
                LD HL,N_BF-CPU6                 ;  ¤à¥á á®åà ­¥­¨ï ¯à®ç¨â ­­ëå ॣ¨áâ஢ ª®­ä¨£ãà æ¨¨
                IN A,(PEVO_CONF)
                LD (HL),A
                INC HL
                LD BC,RD_77
                INIR
                INI
                LD BC,FDD_EMU_PORT
                IN A,(C)
                LD (B_PORT_VIRT & 0x3FFF),A
                XOR A
                OUT (C),A                       ; ®¡­ã«ï¥¬ ¡¨âë í¬ã«ï樨 ‚ƒ
                LD B,1                          ; ¯à¥à뢠­¨ï à §à¥è¥­ë
                LD A,R
                JP PE,.L001
                LD A,R
                JP PE,.L001
                DEC B                           ; ¯à¥à뢠­¨ï § ¯à¥é¥­ë
.L001           XOR A
                LD I,A                          ; ®¡à ¡®â稪 ¯à¥à뢠­¨ï ¯¥à¥áâ ¢¨«¨¨ ¤«ï  ¤à¥á  00FF
                CALL GET_NUM_IM
        PEC_OFF M_SHADOW_BF
                LD A,(N_EFF7-CPU2)
                AND %11101111
                LD BC,PENT_CONF
                OUT (C),A
        PEC_ON M_SHADOW_BF
                LD A,(N_77-CPU2)
                AND %11110111
                LD BC,0xFF77
                OUT (C),A                       ; ãáâ ­®¢ª  7.0Mhz ¤«ï NMI á¥à¢¨á 
                PUSH DE
                LD BC,WIN_P6
                XOR A
                OUT (C),A                       ; ¢ª«î稫¨ ¯®á«¥¤­îî áâà ­¨æã ®§ã
                LD B,HIGH (WIN_A3)
                LD A,0x40
                OUT (C),A                       ; á­ï«¨ § ¢¨á¨¬®áâì 3 ®ª­  ®â ¯®àâ  7FFD
                LD DE,CPU6
                ADD HL,DE
                LD (ADR_PALITRA),HL
                LD HL,CPU6
                ADD HL,SP
                LD SP,HL
                LD B,HIGH (WIN_A0)
                LD A,ROM_RST83
                OUT (C),A
                POP HL
                LD (NUM_IM),HL
PEREHVAT        DUPL 3,0
                LD A,(DEBUG_ONOFF)
                AND A
                JR NZ,IN_DEBUG
                LD HL,CONTINUE_MAGIC
                PUSH HL
                JP OUT_NMI

IN_DEBUG        XOR A
                IN A,(0xFE)
                CPL
                AND 0x1F
                JR NZ,IN_DEBUG
                LD HL,DEBUGGER
                PUSH HL
                JP OUT_NMI

; ¢ë室 ¨§ NMI
EXITNMISERVICE  LD HL,ADR_MAGIC
                LD (HL),0xC9                    ; § £«ã誠 ­  MAGIC
                IN A,(PEVO_CONF)
                OR M_NMI_BF
                OUT (PEVO_CONF),A
                AND M_NMI_BF!0xFF
                OUT (PEVO_CONF),A
                HALT                            ; ¦¤¥¬ áà ¡ â뢠­¨ï MAGIC
; ¢®ááâ ­ ¢«¨¢ ¥¬ ¯ ¬ïâì ¯®¤ ¯¥à¥å®¤®¬ ­  ®¡à ¡®â稪 NMI
                LD HL,TMP_ADR_0068 - CPU2
                LD DE,ADR_MAGIC
                LDI
                LDI
                LDI

                LD C,LOW (WIN_A0)
                LD A,(N_7FFD-CPU6)
                AND 0x10
                LD HL,B0_CPU0-CPU6
                JR Z,.L11
                LD HL,B1_CPU0-CPU6
.L11            LD A,4
.L12            EX AF,AF'
                LD E,(HL)                       ; ¡ ©â ¤«ï § ¯¨á¨ ¢ ¯®àâ
                INC HL
                LD D,(HL)                       ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ 
                INC HL
                LD A,D
                OR 0x3F
                LD B,A
                BIT 3,D
                JR NZ,.L15
                LD A,D
                AND 3
                RRCA
                RRCA
                OUT (C),A
                RES 3,B
.L15            OUT (C),E
                EX AF,AF'

                DEC A
                JR NZ,.L12
        IFDEF DOS_FE
                LD BC,FDD_EMU_PORT
                LD A,(B_PORT_VIRT & 0x3FFF)
                OUT (C),A
        ENDIF
        PEC_OFF M_SHADOW_BF
                LD BC,PENT_CONF
                LD A,(N_EFF7-CPU6)
                OUT (C),A
        PEC_ON M_SHADOW_BF
                LD BC,(B_PORT77-CPU6)
                LD A,C
                LD C,0x77
                OUT (C),A
                LD A,(N_BF-CPU6)
                OUT (PEVO_CONF),A
                LD BC,CONF_128
                LD A,(N_7FFD-CPU6)
                OUT (C),A
                LD HL,NMI_SERVICE
                LD (ADR_NMI_JUMP),HL
                XOR A
                LD (FOR_RET),A
                LD SP,NADRRET_L-CPU6
               
                LD HL,(NMI_SAVE_SP-CPU6)
                POP DE
                LD (HL),E
                INC HL
                LD (HL),D                       ; ¢®ááâ ­®¢«¥­¨¥  ¤à¥á  ¢®§¢à â 

                POP AF
                EX AF,AF'
                POP IY
                POP IX
                POP BC
                POP DE
                POP HL
                EXX
                POP BC
                POP DE
                POP AF
                JP PO,.L1
                EI
.L1             LD A,0x80+3-REG_R_CORRECT
                LD HL,NREG_R-CPU6
                SLA (HL)
                RLA
                ADD A,(HL)
                RRCA
                LD R,A
                POP AF
                LD I,A
                POP AF
                POP HL
                LD SP,(NMI_SAVE_SP-CPU6)
                OUT (0xBE),A
                RETN

LDIR__BYTES     LD HL,CPU6
                ADD HL,SP
                LD SP,HL
                LD A,(R_7FFD-CPU6)
                AND 0x10
                LD HL,B0_CPU1-CPU2
                JR Z,.L5
                LD HL,B1_CPU1-CPU2
.L5             LD C,LOW (WIN_A0)
                LD A,3
.L3             EX AF,AF'

                LD E,(HL)                       ; ¡ ©â ¤«ï § ¯¨á¨ ¢ ¯®àâ
                INC HL
                LD D,(HL)                       ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ 
                INC HL
                LD A,D
                OR 0x3F
                LD B,A
                BIT 3,D
                JR NZ,.L4
                LD A,D
                AND 3
                RRCA
                RRCA
                OUT (C),A
                RES 3,B
.L4             OUT (C),E
                EX AF,AF'
                DEC A
                JR NZ,.L3
                EXX
                LDIR
                LD BC,WIN_P6
                XOR A
                OUT (C),A
                LD HL,CPU6
                ADD HL,SP
                LD SP,HL
                LD BC,WIN_A0
                LD A,ROM_RST83
                JP ADR_SEL_ROM

NUM_IM2         LD A,1
                RET

GET_NUM_IM      PUSH HL
                LD D,B                          ; INT ON/OFF
                LD HL,0x0038
                LD (HL),0xAF
                LD L,0xFF
                LD (HL),LOW (NUM_IM2)
                INC HL
                LD (HL),HIGH (NUM_IM2)
                EI
                HALT
                DI
                LD E,A                          ; 0-IM 1, 1-IM 2
                LD HL,0x0038
                LD (HL),0xFB
                LD L,0xFF
                LD (HL),LOW (IM_EI_RET)
                INC HL
                LD (HL),HIGH (IM_EI_RET)
                POP HL
                RET

                PHASE $ + CPU6
; ¢ë§®¢ ¯®¤¯à®£à ¬¬ ¨§ ¤à㣨å áâà ­¨æ ROM
CALL2PAGE       EX (SP),HL
                PUSH BC
                PUSH AF
                LD BC,WIN_A0
.L1             LD (PORTCALL),BC
                LD C,(HL)
                INC HL
                LD B,(HL)
                INC HL
                LD (ADRCALL),BC
                LD BC,RD_7FFD
                IN A,(C)
                AND 0x10
                LD BC,RD_0WINA0
                JR Z,.L2
                LD BC,RD_1WINA0
.L2             IN A,(C)
                AND 0x3F
                LD BC,STEK_PAGES
TEKPAGE         EQU $-2
                LD (BC),A
                INC BC
                LD (TEKPAGE),BC
                LD A,(HL)
                INC HL
                LD BC,WIN_A0
PORTCALL        EQU $-2
                OUT (C),A
                POP AF
                POP BC
                EX (SP),HL
                CALL 0
ADRCALL         EQU $-2
                PUSH BC
                PUSH AF
                LD BC,(TEKPAGE)
                DEC BC
                LD A,(BC)
                LD (TEKPAGE),BC
                LD BC,WIN_A0
                OUT (C),A
                POP AF
                POP BC
                RET

CALL2RAMPAGE    EX (SP),HL
                PUSH BC
                PUSH AF
                LD BC,WIN_P0
                JR CALL2PAGE.L1

; ¢å®¤ ¢ ®â« ¤ç¨ª
DEBUGGER        DI
                LD HL,CPU6 + DEBUG_ONOFF
                BIT B_DBG_ACTIV,(HL)
                JR Z,DEBUGGER1
; ¯à¨­ã¤¨â¥«ì­ë© ¢å®¤ ¢ ®â« ¤ç¨ª á ¢®§¢à â®¬ ¢ ®á­®¢­®¥ ¬¥­î NMI
                LD HL,DBG2MAINMENU
                PUSH HL
                JR DEBUGGER2

; ¢å®¤ ¢ ®â« ¤ç¨ª ¨§ ®á­®¢­®£® ¬¥­î NMI
DEBUGGER1       LD HL,RESTART_MAIN
                PUSH HL
                LD HL,EXIT_DEBUG
                PUSH HL
                LD HL,CPU6+DEBUG_ONOFF
                SET B_DBG_ACTIV,(HL)
DEBUGGER2       LD HL,CONTINUE_PROG
                LD DE,NADRRET_L
        EVOPORT WIN_P3,RAM_STS                  ; ¢ª«î稫¨ áâà ­¨æã á ãáâ ­®¢«¥­­ë¬ STS
                LD BC,N_BF
                LD A,(N_77)
                EX AF,AF'

                LD A,NO_EXIT_DEBUG-EXIT_DEBUG
                JP START_STS

; ­®à¬ «ì­ë© ¢ë室 ¨§ ®â« ¤ç¨ª 
EXIT_DEBUG      LD HL,CPU6+DEBUG_ONOFF
                RES B_DBG_ACTIV,(HL)
; ¢ë室 ¨§ ®â« ¤ç¨ª  ¬¨­ãï ®á­®¢­®¥ ¬¥­î NMI
NO_EXIT_DEBUG
        EVOPORT WIN_A0,ROM_RST82
                LD HL,CPU6+DEBUG_ONOFF
                LD A,M_TRACE_DBG
                AND (HL)
                RET Z
                LD HL,TRACER_DBG
                EX (SP),HL
                RET

; ¢å®¤ ¢ ®â« ¤ç¨ª ¬¨­ãï ®á­®¢­®¥ ¬¥­î NMI
DBG2MAINMENU    LD HL,CPU6+DEBUG_ONOFF
                RES B_DBG_ACTIV,(HL)
        EVOPORT WIN_A0,ROM_RST83
                LD A,M_TRACE_DBG
                AND (HL)
                JP NZ,CONTMAGIC3
                JP RESTART_NMI

; ¢®§¢à â ¨§ NMI ¤«ï ®â« ¤ç¨ª . ­¥ ¢®ááâ ­ ¢«¨¢ ¥âáï:
; ¯ «¨âà , ä®­â, ¢¨¤¥®à¥¦¨¬
NMI_EXIT_DBG
        EVOPORT WIN_A0,ROM_RST82
;       ROMCALL RESTORE_AY,ROM_RST83            ; ¢®ááâ ­®¢«¥­¨¥ ॣ¨áâ஢ AY
                LD HL,ADR_MAGIC
                LD (HL),0xC9                    ; § £«ã誠 ­  MAGIC
                IN A,(PEVO_CONF)
                OR M_NMI_BF
                OUT (PEVO_CONF),A
                AND M_NMI_BF!0xFF
                OUT (PEVO_CONF),A
                HALT                            ; ¦¤¥¬ áà ¡ â뢠­¨ï MAGIC
                LD HL,ADR_MAGIC
                LD (HL),0xC3                    ; à §à¥è¥­¨¥ ®¡à ¡®â稪  MAGIC ¯¥à¥¤ ¢ë室®¬
                LD C,LOW (WIN_A0)
                LD A,(N_7FFD-CPU6)
                AND 0x10
                LD HL,B0_CPU0-CPU6
                JR Z,.L11
                LD HL,B1_CPU0-CPU6
.L11            LD A,4
.L12            EX AF,AF'
                LD E,(HL)                       ; ¡ ©â ¤«ï § ¯¨á¨ ¢ ¯®àâ
                INC HL
                LD D,(HL)                       ; áâ à訩 ¡ ©â  ¤à¥á  ¯®àâ 
                INC HL
                LD A,D
                OR 0x3F
                LD B,A
                BIT 3,D
                JR NZ,.L15
                LD A,D
                AND 3
                RRCA
                RRCA
                OUT (C),A
                RES 3,B
.L15            OUT (C),E
                EX AF,AF'

                DEC A
                JR NZ,.L12
        PEC_OFF M_SHADOW_BF
                LD BC,PENT_CONF
                LD A,(N_EFF7-CPU6)
                OUT (C),A
        PEC_ON M_SHADOW_BF
;               LD BC,(B_PORT77-CPU6)
;               LD A,C
;               LD C,0x77
;               OUT (C),A
                LD A,(N_BF-CPU6)
                OUT (PEVO_CONF),A
                LD BC,CONF_128
                LD A,(N_7FFD-CPU6)
                OUT (C),A
                LD HL,NMI_SERVICE
                LD (ADR_NMI_JUMP),HL
                XOR A
                LD (FOR_RET),A
                LD SP,NADRRET_L-CPU6
                POP AF                          ; á¡à®á  ¤à¥á  ¢®§¢à â 
                POP AF
                EX AF,AF'
                POP IY
                POP IX
                POP BC
                POP DE
                POP HL
                EXX
                POP BC
                POP DE
                POP AF
                JP PO,ENMIDBGSERV1
                EI
ENMIDBGSERV1    LD A,0x80+3-REG_R_CORRECT
                LD HL,NREG_R-CPU6
                SLA (HL)
                RLA
                ADD A,(HL)
                RRCA
                LD R,A
                POP AF
                LD I,A
                POP AF
                POP HL
                LD SP,(NMI_SAVE_SP-CPU6)
                OUT (0xBE),A
                RETN

        IF 0
TO_USBDRV       EX AF,AF'

                LD (.L3),A
                LD A,IYL
                AND A
                LD A,(NEXTBYTERST8)
                JR Z,.L1
                EX (SP),HL
                LD A,(HL)
                INC HL
                EX (SP),HL
.L1             PUSH BC
                PUSH AF
                LD BC,WIN_P0
                LD A,RAM_SCR_FONT
                OUT (C),A
                POP AF
                POP BC
                LD (.OLD_SP_USB),SP
                LD SP,CPU1
                ADD A,A
                PUSH HL
                LD HL,COMUSBF.RET4USBF
                EX (SP),HL
                PUSH HL
                LD HL,COMUSBF.TBLUSBF
                ADD A,L
                LD L,A
                ADC A,H
                SUB L
                LD H,A
                LD A,(HL)
                INC HL
                LD H,(HL)
                LD L,A
                LD A,0
.L3             EQU $-1
                EX AF,AF'
                EX (SP),HL
                JP COMUSBF.IN_USBF

.RET_USBF       LD SP,0
.OLD_SP_USB     EQU $-2
                RET
        ENDIF

; ¯¥à¥¬¥­­ë¥ ¤«ï USB ¤à ©¢¥à 
vars
.bFlags         DW 0xFF
.xferLen        DB 0xFF
.data0          DB 0xFF
.data1          DB 0xFF
.cmd            DB 0xFF
.intr           DB 0xFF
.result         DB 0xFF
.remainder      DB 0xFF
.dataX          DB 0xFF
.bufLen         DB 0xFF
.addr           DB 0xFF
.timeout        DB 0xFF

.SL_OUT         DB 0xFF dup (8)
.DBUF           DB 0xFF dup (64)
.T_OUT          DB 0xFF dup (32)

uDev            pUSBDEV
usbstack        PKG

STEK_PAGES      DUPL 0x10,0xFF                  ; 10 á⥪ áâà ­¨æ ¢ë§ë¢®¢ ¢ ROM
RST_FLAGS       DB 0xFF                         ; 1
TXT_COLOR       DB 0xFF                         ; 1
COORD_XY        DW 0xFF                         ; 2
COLBUF          DUPL 0x50,0xFF                  ; 50 ¡ãä¥à á®åà ­¥­¨ï áâப¨ æ¢¥â  á íªà ­ 
MOUSE_BUFF      DUPL 0x10,0xFF                  ; 10 ¡ãä¥à á®åà ­¥­¨ï ç á⨠íªà ­  ¯®¤ ªãàá®à®¬ ¬ëè¨
PRESSEDKEY      DW 0xFFFF                       ; 2  ¤à¥á ᯨ᪠ £®àïç¨å ª« ¢¨è ¯®á«¥ ¢ë¢®¤  ®ª­ 
FLAGS           DB 0xFF                         ; 1 á¨á⥬­ë¥ ä« £¨
 BITMASK VIDEO_MODE,    7                       ; BIT 7-=1-TXT, =0-ZX SCREEN MODE
                                                ; BIT 6
                                                ; BIT 5
 BITMASK WIN_INT_EXT,   4                       ; BIT 4-=1-¢­¥è­¥¥ ®ª­®, =0-¢­ãâ७­¥¥ ®ª­®
 BITMASK RUN_FAT_DSK,   3                       ; BIT 3-=1-§ ¯ã᪠á FAT, =0-§ ¯ãáª á ¤¨áª¥âë
 BITMASK CLOCK_PRESENT, 2                       ; BIT 2-=1-ç áë ­ ©¤¥­ë, =0-­¥â
 BITMASK MOUSE_PRESENT, 1                       ; BIT 1-=1-¬ëèì ¥áâì, =0-­¥â
 BITMASK CURSOR_NUM,    0                       ; BIT 0-ª ª®© ªãàá®à à¨á®¢ âì, ¤«ï ¬¨£ ­¨ï
NEXTBYTERST8    DB 0xFF                         ; 1 á«¥¤ãî騩 ¡ ©â ¯®á«¥ ¢ë§®¢  RST 8, ª®¤ ¤«ï ¢ë§®¢  ¤à ©¢¥à 
OLD_STACK       DW 0xFFFF                       ; 2
ADR_INT         DW 0xFFFF                       ; 2
ADR_PALITRA     DW 0xFFFF                       ; 2
XNEW            DB 0xFF                         ; 1
ADRSTR_Y        DB 0xFF                         ; 1
ADRSTR_X        DB 0xFF                         ; 1
TXNEW           DB 0xFF                         ; 1
TADRSTR_Y       DB 0xFF                         ; 1
TADRSTR_X       DB 0xFF                         ; 1
NO_INW          DB 0xFF                         ; 1
COLOR4SYM       DB 0xFF                         ; 1
PAGE4READ       DB 0xFF                         ; 1
PAGE4SCR        DB 0xFF                         ; 1
DAT_MAIN_MENU   DUPL 3,0                        ; 3
DAT_SETUP_MENU  DUPL 3,0                        ; 3
DAT_FILEBROWS   DUPL 5,0                        ; 5
DAT_MOUNT       DUPL 3,0                        ; 3
WIN_DEV         DUPL 0x30,0                     ; 30
COL_CURSOR      DW 0xFFFF                       ; 2
_MORG           DB 0xFF                         ; 1
ARXY            DW 0xFFFF                       ; 2
ADR_REST        DW 0xFFFF                       ; 2
MOUPOS          DW 0xFFFF                       ; 2
TEK_MODES       DB 0xFF                         ; 1
CMP_FONT_FLAG   DB 0xFF                         ; 1
BUFF4TXT        DUPL 0x2B,0xFF                  ; 2B
EXT4FOUND       DUPL 0x10*3+1,0xFF              ; 10*3+1
CMOS4CRC16      DUPL ECMOS_DEFAULT-CMOS_DEFAULT,0xFF
KSTATE0         DB 0xFF                         ; 1 |
KSTATE1         DB 0                            ; 1 |
KSTATE2         DB 0                            ; 1 |
KSTATE3         DB 0                            ; 1 |
KSTATE4         DB 0xFF                         ; 1 |     ­ «®£
KSTATE5         DB 0                            ; 1 |    BASIC
KSTATE6         DB 0                            ; 1 |    ¯¥à¥¬¥­­ëå
KSTATE7         DB 0                            ; 1 |    ®¯à®á 
LAST_K          DB 0                            ; 1 |    ª« ¢¨ âãàë
REPDEL          DB 0x10                         ; 1 |
REPPER          DB 1                            ; 1 |
FLAGS_KEY       DB 0                            ; 1 |
FLAGS_KEY1      DB 0x10                         ; 1 |
MOUNT_SYM       DB 0xFF                         ; 1 ­®¬¥à ¬®­â¨à㬮£® ¤¨áª 
EXT_TYPE        DB 0xFF                         ; 1
OST_HWOST       DW 0xFFFF                       ; 2
KUDA_HWOST      DW 0xFFFF                       ; 2
SCROLL_MODE     DB 0xFF                         ; 1
NEXT4PAGE       DW 0xFFFF                       ; 2
OSTAT_SECT      DW 0xFFFF                       ; 2
NACH_SECT       DW 0xFFFF                       ; 2
START_DATA      DW 0xFFFF                       ; 2
;AY_REGS1       DUPL 0x0E,0xFF                  ; D
;AY_REGS2       DUPL 0x0E,0xFF                  ; D
TEKBUFTSC       DW 0xFFFF                       ; 2
TEK_TEXT        DW 0xFFFF                       ; 2
TURBO_MODE      DUPL 5,0xFF                     ; 5
MEMORY_MODE     DUPL 4,0xFF                     ; 3
; ¤«ï १¨¤¥­â  HONEY COMANDER
REZIDENT_MODE   DUPL 4,0xFF                     ; 4
TXT_KILLREZID   DUPL 4,0xFF                     ; 4
BUFF_TIME       DB 0x16,0x00,0x48,0x17,CYAN<<3+BLUE+0xC0
TXT_TIME        DB "00:00:00",0x16,0x01,0x48
TXT_DATA        DB "00.00.00",0x17,0xFF,0
EBUFF_TIME
TXT_FREQ        DZ "14.0"
                DZ "7.0 "
                DZ "3.5 "
NAME_RAMDISK    DUPL 0x20,0
FILE_DEST       DUPL 0x20,0xFF                  ; 20 ®¯¨á â¥«ì ®âªàë⮣® ä ©«  (ªã¤ )
FB_EXT          DUPL 0x0B,0xFF                  ; B ¡ãä¥à 8.3 ¤«ï ¯®¨áª  ¨¬¥­¨
SAVE_IY         DW 0xFFFF                       ; 2 ¢­ãâ७¥¥ á®åà ­¥­¨¥ ॣ¨áâ஢ ¤«ï ¤ «ì­¥©è¥£® ¨á¯®«ì§®¢ ­¨ï
ADR_MASK_EXT    DW 0xFFFF                       ; 2  ¤à¥á à áè¨à¥­¨© ä ©«®¢ ¤«ï ¯®¨áª 
ADR_SKLAD       DW 0xFFFF                       ; 2  ¤à¥á ᪫ ¤¨à®¢ ­¨ï ­ ©¤¥­­®£®
ADR_SKLAD_NAME  DW 0xFFFF                       ; 2
MAKS_ADR        DB 0xFF                         ; 1 áâ à訩 ¡ ©â ¬ ªá¨¬ «ì­®£®  ¤à¥á  ¡ãä¥à  ᪫ ¤¨à®¢ ­¨ï
KOL_FOUNDED     DW 0xFFFF                       ; 2 ª®«¨ç¥á⢮ ­ ©¤¥­­ëå ®¯¨á â¥«¥©
OUT_NAME_FILE   DB 0x17,0xFF,0x16,0,0,0
OUT_NAME_FILET  EQU $-3
BUF_FILEITEM    DUPL 0x20,0xFF                  ; 20
EXTERN_PAL      DUPL 0x10,0xFF                  ; 10
ENMI_SERVICE
HDDTIMEOUT      EQU EXTERN_PAL+0x10             ; 1

                DEPHASE