Top secrets sources NedoPC pentevo

Rev

Rev 952 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?


;LAST UPDATE: 21.12.2017 savelij

                include ../../macros.a80
                include ../../global_vars.a80
                include ../../define.a80
                include ../../evodos_vars.a80

STACK           EQU 0X0DFF

OLD_IF          EQU STACK-WORD*2
OLD_AF          EQU STACK-WORD

;ª®¬ ­¤  ¢ë室  ¨ ¯¥à¥å®¤ ­  ®¡à ¡®â稪
JP_EMU          MACRO ADDRESS
                DUPL ADDRESS-$,0;XFF
                OUT (EXIT_PORT),A
                JP ADR_ADDRESS
                ENDM

;£¥­¥à æ¨ï  ¤à¥á®¢ ¤«ï â ¡«¨æë
LABEL_GEN       MACRO ADDRESS
_ADDRESS        EQU ($-TABLE_VIRT)/4
                DW ADDRESS,ADR_ADDRESS.WORK
                ENDM

;¯¥à¥å®¤ ­  ®¡à ¡®â稪 á ª®¤®¬  ¤à¥á 
EMU_JUMP        MACRO ADDRESS
ADR_ADDRESS     EQU $
                LD (OLD_AF+1),A
                LD A,_ADDRESS
                JP WORKER

.WORK           EQU $
                ENDM

                ORG 0
                DUPL 0X0038-$,0;XFF
                EI
                RET

                DUPL 0X006F-$,0;XFF
                JP (HL)

                JP_EMU 0X02BE                   ; OUT      (0XFF), A

                DUPL 0X801-$,0;XFF
;[â ¡«¨æ   ¤à¥á®¢ ¯¥à¥å¢ â  ¨ ¢ë§ë¢ â®à  ®¡à ¡®â稪®¢]
TABLE_VIRT      LABEL_GEN 0X02BE                ; OUT      (0XFF), A
                LABEL_GEN 0X1E3A                ; OUT      (0X3F), A
                LABEL_GEN 0X1FDD                ; IN    A, (0X1F)
                LABEL_GEN 0X1FF3                ; OUT      (0XFF), A
                LABEL_GEN 0X2000                ; OUT      (0X1F), A
                LABEL_GEN 0X2076                ; IN    A, (0X1F)
                LABEL_GEN 0X2085                ; OUT      (0X3F), A
                LABEL_GEN 0X208D                ; OUT      (0X5F), A
                LABEL_GEN 0X2093                ; OUT      (0X1F), A
                LABEL_GEN 0X2099                ; IN    A, (0X1F)
                LABEL_GEN 0X20B1                ; IN    A, (0XFF)
                LABEL_GEN 0X20B8                ; OUT      (C),    D
                LABEL_GEN 0X2740                ; IN    A, (0X1F)
                LABEL_GEN 0X2748                ; OUT      (0X7F), A
                LABEL_GEN 0X2A53                ; OUT      (C),    A
                LABEL_GEN 0X2A71                ; OUT      (0XFF), A MAGIC
                LABEL_GEN 0X2A77                ; IN    A, (0X1F)    MAGIC
                LABEL_GEN 0X2AD9                ; OUT      (OXFF), A MAGIC
                LABEL_GEN 0X2B25                ; IN    A, (0X5F)    MAGIC
                LABEL_GEN 0X2C07                ; IN    A, (0X5F)    MAGIC
                LABEL_GEN 0X2CD8                ; IN    A, (0X5F)    MAGIC
                LABEL_GEN 0X2D75                ; OUT      (0X5F), A MAGIC
                LABEL_GEN 0X2D80                ; OUT      (0X1F), A MAGIC
                LABEL_GEN 0X2D87                ; IN    A, (0X1F)    MAGIC
                LABEL_GEN 0X2F0C                ; OUT      (0XFF), A MAGIC
                LABEL_GEN 0X2F1D                ; OUT      (0X5F), A MAGIC
                LABEL_GEN 0X2F28                ; OUT      (0X1F), A MAGIC
                LABEL_GEN 0X2F2F                ; IN    A, (0X1F)    MAGIC
                LABEL_GEN 0X2F3C                ; OUT      (0XFF), A MAGIC
                LABEL_GEN 0X2F4D                ; OUT      (0XFF), A MAGIC
                LABEL_GEN 0X2F50                ; OUT      (0X7F), A MAGIC
                LABEL_GEN 0X2F57                ; OUT      (0X1F), A MAGIC
                LABEL_GEN 0X2F59                ; IN    A, (0XFF)
                LABEL_GEN 0X2FB1                ; OUT      (0XFF), A
                LABEL_GEN 0X2FC3                ; OUT      (0X1F), A
                LABEL_GEN 0X3C30                ; IN    A, (0X1F)
                LABEL_GEN 0X3D4D                ; OUT      (0XFF), A
                LABEL_GEN 0X3D9A                ; OUT      (0X1F), A
                LABEL_GEN 0X3DA6                ; IN    A, (0XFF)
                LABEL_GEN 0X3DB5                ; IN    A, (0X1F)
                LABEL_GEN 0X3DBA                ; IN    A, (0X1F)
                LABEL_GEN 0X3DD5                ; OUT      (0XFF), A
                LABEL_GEN 0X3E30                ; IN    A, (0X1F)
                LABEL_GEN 0X3E3A                ; IN    A, (0X1F)
                LABEL_GEN 0X3E44                ; OUT      (0X7F), A
                LABEL_GEN 0X3E4C                ; OUT      (0X7F), A
                LABEL_GEN 0X3E50                ; IN    A, (0X3F)
                LABEL_GEN 0X3E78                ; IN    A, (0X3F)
                LABEL_GEN 0X3E7E                ; OUT      (0X3F), A
                LABEL_GEN 0X3E87                ; IN    A, (0X3F)
                LABEL_GEN 0X3E95                ; OUT      (0X3F), A
                LABEL_GEN 0X3EB5                ; IN    A, (0X1F)
                LABEL_GEN 0X3EBC                ; IN    A, (0X3F)
                LABEL_GEN 0X3EC9                ; OUT      (0X1F), A
                LABEL_GEN 0X3ECE                ; IN    A, (0XFF)
                LABEL_GEN 0X3EDF                ; OUT      (0X1F), A
                LABEL_GEN 0X3EF3                ; IN    H, (C)
                LABEL_GEN 0X3EF5                ; IN    A, (0XFF)
                LABEL_GEN 0X3EFE                ; IN    A, (0X7F)
                LABEL_GEN 0X3F1B                ; OUT      (0X5F), A
                LABEL_GEN 0X3F25                ; OUT      (0X1F), A
                LABEL_GEN 0X3F33                ; IN    A, (0X1F)
                LABEL_GEN 0X3F4D                ; OUT      (0X1F), A
                LABEL_GEN 0X3F55                ; IN    A, (0X3F)
                LABEL_GEN 0X3F5A                ; IX    A, (0X5F)
                LABEL_GEN 0X3F69                ; IN    A, (0X3F)
                LABEL_GEN 0X3F72                ; IN    A, (0X5F)
                LABEL_GEN 0X3FBC                ; IN    A, (0XFF)
                LABEL_GEN 0X3FCA                ; IN    A, (0XFF)
                LABEL_GEN 0X3FD1                ; OUTI
                LABEL_GEN 0X3FD7                ; IN    A, (0XFF)
                LABEL_GEN 0X3FE5                ; IN    A, (0XFF)
                LABEL_GEN 0X3FEC                ; INI
                LABEL_GEN 0X3FF0                ; OUT      (C),    A
                LABEL_GEN 0X3FF3                ; IN    A, (C)

;[¢ë§ë¢ â®àë ¯¥à¥å¢ â ]
;OUT (0XFF),A
                EMU_JUMP 0X02BE
                JP OUT_FF

;OUT (0X3F),A
                EMU_JUMP 0X1E3A
                JP OUT_3F

;IN A,(0X1F)
                EMU_JUMP 0X1FDD
                JP IN_1F

;OUT (0XFF),A
                EMU_JUMP 0X1FF3
                JP OUT_FF

;OUT (0X1F),A
                EMU_JUMP 0X2000
                JP OUT_1F

;IN A,(0X1F)
                EMU_JUMP 0X2076
                JP IN_1F

;OUT (0X3F),A
                EMU_JUMP 0X2085
                JP OUT_3F

;OUT (0X5F),A
                EMU_JUMP 0X208D
                JP OUT_5F

;OUT (0X1F),A
                EMU_JUMP 0X2093
                JP OUT_1F

;IN A,(0X1F)
                EMU_JUMP 0X2099
                JP IN_1F

;IN A,(0XFF)
                EMU_JUMP 0X20B1
                JP IN_FF

;OUT (C),D
                EMU_JUMP 0X20B8
                JP OUT_C_D

;IN A,(0X1F)
                EMU_JUMP 0X2740
                JP IN_1F

;OUT (0X7F),A
                EMU_JUMP 0X2748
                JP OUT_7F

;OUT (C),A
                EMU_JUMP 0X2A53
                JP OUT_C_A

;OUT (0XFF),A
                EMU_JUMP 0X2A71
                JP OUT_FF

;IN A,(0X1F)
                EMU_JUMP 0X2A77
                JP IN_1F

;OUT (0XFF),A
                EMU_JUMP 0X2AD9
                JP OUT_FF

;IN A,(0X5F)
                EMU_JUMP 0X2B25
                JP IN_5F

;IN A,(0X5F)
                EMU_JUMP 0X2C07
                JP IN_5F

;IN A,(0X5F)
                EMU_JUMP 0X2CD8
                JP IN_5F

;OUT (0X5F),A
                EMU_JUMP 0X2D75
                JP OUT_5F

;OUT (0X1F),A
                EMU_JUMP 0X2D80
                JP OUT_1F

;IN A,(0X1F)
                EMU_JUMP 0X2D87
                JP IN_1F

;OUT (0XFF),A
                EMU_JUMP 0X2F0C
                JP OUT_FF

;OUT (0X5F),A
                EMU_JUMP 0X2F1D
                JP OUT_5F

;OUT (0X1F),A
                EMU_JUMP 0X2F28
                JP OUT_1F

;IN A,(0X1F)
                EMU_JUMP 0X2F2F
                JP IN_1F

;OUT (0XFF),A
                EMU_JUMP 0X2F3C
                JP OUT_FF

;OUT (0XFF),A
                EMU_JUMP 0X2F4D
                JP OUT_FF

;OUT (0X7F),A
                EMU_JUMP 0X2F50
                JP OUT_7F

;OUT (0X1F),A
                EMU_JUMP 0X2F57
                JP OUT_1F

;IN A,(0XFF)
                EMU_JUMP 0X2F59
                CALL IN_FF
                LD HL,EXIT_0X2F59
                LD (ADR_EXIT),HL
                JP UPDATE_AF

;OUT (0XFF),A
                EMU_JUMP 0X2FB1
                JP OUT_FF

;OUT (0X1F),A
                EMU_JUMP 0X2FC3
                JP OUT_1F

;IN A,(0X1F)
                EMU_JUMP 0X3C30
                JP IN_1F

;OUT (0XFF),A
                EMU_JUMP 0X3D4D
                JP OUT_FF

;OUT (0X1F),A
                EMU_JUMP 0X3D9A
                JP OUT_1F

;IN A,(0XFF)
                EMU_JUMP 0X3DA6
                JP IN_FF

;IN A,(0X1F)
                EMU_JUMP 0X3DB5
                JP IN_1F

;IN A,(0X1F)
                EMU_JUMP 0X3DBA
                JP IN_1F

;OUT (0XFF),A
                EMU_JUMP 0X3DD5
                JP OUT_FF

;IN A,(0X1F)
                EMU_JUMP 0X3E30
                JP IN_1F

;IN A,(0X1F)
                EMU_JUMP 0X3E3A
                JP IN_1F

;OUT (0X7F),A
                EMU_JUMP 0X3E44
                JP OUT_7F

;OUT (0X7F),A
                EMU_JUMP 0X3E4C
                JP OUT_7F

;IN A,(0X3F)
                EMU_JUMP 0X3E50
                JP IN_3F

;IN A,(0X3F)
                EMU_JUMP 0X3E78
                JP IN_3F

;OUT (0X3F),A
                EMU_JUMP 0X3E7E
                JP OUT_3F

;IN A,(0X3F)
                EMU_JUMP 0X3E87
                JP IN_3F

;OUT (0X3F),A
                EMU_JUMP 0X3E95
                JP OUT_3F

;IN A,(0X1F)
                EMU_JUMP 0X3EB5
                JP IN_1F

;IN A,(0X3F)
                EMU_JUMP 0X3EBC
                JP IN_3F

;OUT (0X1F),A
                EMU_JUMP 0X3EC9
                JP OUT_1F

;IN A,(0XFF)
                EMU_JUMP 0X3ECE
                JP IN_FF

;OUT (0X1F),A
                EMU_JUMP 0X3EDF
                JP OUT_1F

;IN H,(C)
                EMU_JUMP 0X3EF3
                JP IN_H_C

;IN A,(0XFF)
                EMU_JUMP 0X3EF5
                CALL IN_FF
                LD HL,EXIT_0X3EF5
                LD (ADR_EXIT),HL
UPDATE_AF       LD A,(OLD_AF+1)
                AND 0XC0
                PUSH AF
                POP HL
                LD (OLD_AF),HL
                RET

;IN A,(0X7F)
                EMU_JUMP 0X3EFE
                CALL INFF_BIT6
                JP IN_7F

;OUT (0X5F),A
                EMU_JUMP 0X3F1B
                JP OUT_5F

;OUT (0X1F),A
                EMU_JUMP 0X3F25
                JP OUT_1F

;IN A,(0X1F)
                EMU_JUMP 0X3F33
                JP IN_1F

;OUT (0X1F),A
                EMU_JUMP 0X3F4D
                JP OUT_1F

;IN A,(0X3F)
                EMU_JUMP 0X3F55
                JP IN_3F

;IN A,(0X5F)
                EMU_JUMP 0X3F5A
                JP IN_5F

;IN A,(0X3F)
                EMU_JUMP 0X3F69
                JP IN_3F

;IN A,(0X5F)
                EMU_JUMP 0X3F72
                JP IN_5F

;IN A,(0XFF)    ;§ ¯¨áì ᥪâ®à 
                EMU_JUMP 0X3FBC
                JP WRITE_SECTOR

;IN A,(0XFF)    ;§ ¯¨áì ᥪâ®à 
                EMU_JUMP 0X3FCA
                JP WRITE_SECTOR

;OUTI           ;§ ¯¨áì ᥪâ®à 
                EMU_JUMP 0X3FD1
                JP WRITE_SECTOR

;IN A,(0XFF)    ;ç⥭¨¥ ᥪâ®à 
                EMU_JUMP 0X3FD7
                JP READ_SECTOR

;IN A,(0XFF)    ;ç⥭¨¥ ᥪâ®à 
                EMU_JUMP 0X3FE5
                JP READ_SECTOR

;INI            ;ç⥭¨¥ ᥪâ®à 
                EMU_JUMP 0X3FEC
                JP IN_INI

;OUT (C),A
                EMU_JUMP 0X3FF0
                LD BC,(OLD_BC)
                LD A,(OLD_AF+1)
                OUT (C),A
                RET

;IN A,(C)
                EMU_JUMP 0X3FF3
                LD BC,(OLD_BC)
                IN A,(C)
                PUSH AF
                POP HL
                LD (OLD_AF),HL
                RET

;[á⥪ ¨ ®¡à ¡®â稪¨]
                DUPL STACK-$,0;XFF
                DW INT_BREAK

                DUPL STACK+0X41-$,0;XFF
INT_BREAK       PUSH AF
                PUSH HL
                PUSH DE
                LD A,(FLAG_RW_BREAK)
                AND A
                JR NZ,IB1
                LD HL,(OLD_IF)
                LD L,0XFF
                LD E,(HL)
                INC HL
                LD D,(HL)
                LD HL,(OLD_SP)
                DEC HL
                LD (HL),D
                DEC HL
                LD (HL),E
                LD (OLD_SP),HL
                POP DE
                POP HL
                POP AF
                EI
                RET

IB1             PUSH BC
                LD (INT_SP),SP
                CALL READ_TMP_CPU12
                CALL WRITE_CPU12
                LD A,(OLD_PORT_BF)
                OUT (PEVO_CONF),A
                LD A,(OLD_IF+1)
                LD I,A
                LD HL,(OLD_AF)
                PUSH HL
                POP AF
                LD HL,(OLD_SP)
                LD DE,0X2A71
                DEC HL
                LD (HL),D
                DEC HL
                LD (HL),E
                DEC HL
                EX DE,HL
                LD HL,OLD_IF+1
                LD H,(HL)
                LD L,0XFF
                LD C,(HL)
                INC HL
                LD B,(HL)
                EX DE,HL
                LD (HL),B
                DEC HL
                LD (HL),C
                LD SP,HL
                LD HL,(OLD_HL)
                LD DE,(OLD_DE)
                LD BC,(OLD_BC)
                EI
                JP 0X2A53

INT_RET         LD SP,0
INT_SP          EQU $-2
                IN A,(PEVO_CONF)
                OR 1
                OUT (PEVO_CONF),A
                LD A,HIGH (STACK)
                LD I,A
                CALL WRITE_TMP_CPU12
                POP BC
                POP DE
                POP HL
                POP AF
                RET

;¢ë室 ¨§ ®¡à ¡®â稪 
EXIT_PAGE_FE    LD A,(OLD_PORT_BF)
                OUT (PEVO_CONF),A               ;¢®ááâ ­®¢«¥­¨¥ ¯®àâ  0xBF
                LD A,(OLD_IF+1)
                LD I,A
                LD HL,(OLD_AF)
                PUSH HL
                POP AF
                LD HL,0                         ;¢®ááâ ­®¢«¥­¨¥ HL
OLD_HL          EQU $-2
                LD DE,0                         ;¢®ááâ ­®¢«¥­¨¥ DE
OLD_DE          EQU $-2
                LD BC,0                         ;¢®ááâ ­®¢«¥­¨¥ BC
OLD_BC          EQU $-2
                LD SP,0                         ;¢®ááâ ­®¢«¥­¨¥ SP
OLD_SP          EQU $-2
                JP 0
ADR_EXIT        EQU $-2        

                DUPL STACK+0X101-$,0;XFF
;¢å®¤ ¢ ®¡à ¡®â稪
WORKER          LD (NUM_ADR),A
                LD (OLD_SP),SP
                LD SP,STACK-WORD
                LD A,I
                JP PE,WORKER1
                LD A,I
WORKER1         PUSH AF                         ;IF
                IN A,(PEVO_CONF)
                LD (OLD_PORT_BF),A              ;¯®àâ BF
                OR 1
                OUT (PEVO_CONF),A
                LD A,HIGH (STACK)
                LD I,A
                LD (OLD_HL),HL
                LD (OLD_DE),DE
                LD (OLD_BC),BC
                LD HL,0
NUM_ADR         EQU $-2
                ADD HL,HL
                ADD HL,HL
                LD DE,TABLE_VIRT
                ADD HL,DE
                LD E,(HL)
                INC HL
                LD D,(HL)                       ;DE- ¤à¥á ¢®§¢à â  ¨§ ®¡à ¡®â稪 
                INC HL
                LD (ADR_EXIT),DE
                LD E,(HL)
                INC HL
                LD D,(HL)                       ;DE- ¤à¥á ®¡à ¡®â稪 
                PUSH DE
                LD HL,EXIT_PAGE_FE              ;ª®¤ ¢ë室  ¨§ ®¡à ¡®â稪 
                EX (SP),HL
                JP (HL)

;[ç⥭¨¥/§ ¯¨áì ¯à¨¬®­â¨à®¢ ­­®£® ¤¨áª ]
MOUNT_RW        LD HL,0X4000
                ADD HL,SP
                LD SP,HL
                LD BC,WIN_A1
                LD A,0X40
                OUT (C),A
                LD B,HIGH (WIN_P1)
                LD A,RAM_EVODOS
                OUT (C),A
                LD A,(RDWR_MODE)
                AND 0X80
                LD L,A
                LD A,(WR_FF)
                AND 3
                OR L
                BIT 7,A
                PUSH AF
                LD HL,0X2A77
                PUSH HL
                LD HL,MNT_RW
                PUSH HL
                JP Z,0X2A53
                LD HL,(OLD_HL)
                LD DE,0X100
                CALL COPY_BLOCK
                LD (OLD_HL),HL
                JP 0X2A53

                PHASE $+0X4000
MNT_RW          LD L,A
                LD A,(PORT_3F+0X4000)           ;¢§ï«¨ ­®¬¥à â४ 
                ADD A,A                         ;áâ®à®­ 2
                LD D,A
                LD A,(WR_FF+0X4000)
                AND 0X10                        ;¯à®¢¥àª  ª ª ï áâ®à®­  ¤¨áª 
                JR NZ,WRRDSECM1
                INC D                           ;¤«ï áâ®à®­ë 1
WRRDSECM1       LD A,(PORT_5F+0X4000)           ;¢§ï«¨ ­®¬¥à ᥪâ®à 
                LD E,A                          ;D-â४, E-ᥪâ®à
                LD A,L
                LD HL,0X4100
                RST 8
                DB _MOUNTER
                DB _RDWR_MOUNT
                JP 0X3D2F

                PHASE $-0X4000
RET_MNT_RW      LD HL,-0X4000
                ADD HL,SP
                LD SP,HL
                CALL WRITE_CPU12
                POP AF
                RET NZ
                LD HL,0X100
                LD DE,(OLD_HL)
                CALL COPY_BLOCK
                LD (OLD_HL),DE
                RET

;[¨­ä  ¤«ï ᮧ¤ ­¨ï 9 ᥪâ®à  ­®¢®£® ¤¨áª ]
DSKINFO         DB 0                            ;+0XE1-­®¬¥à ¯¥à¢®£® ᢮¡®¤­®£® ᥪâ®à 
                DB 1                            ;+0XE2-­®¬¥à ¯¥à¢®£® ᢮¡®¤­®£® â४ 
                DB 0X16                         ;+0XE3-⨯ ¤¨áª¥âë
                DB 0                            ;+0XE4-ª®«¨ç¥á⢮ ä ©«®¢ ­  ¤¨áª¥â¥
SECFREE         DW 2544                         ;+0XE5-ª®«¨ç¥á⢮ ᢮¡®¤­ëå ᥪâ®à®¢
                DB 0X10                         ;+0XE7-¨¤¥­â¨ä¨ª æ¨®­­ë© ª®¤ TRDOS
                DW 0                            ;+0XE8-2 ¡ ©â  0
                DUPL 9," "                      ;+0XEA-9 ¡ ©â 0X20
                DB 0                            ;+0XF3-1 ¡ ©â 0
                DB 0                            ;+0XF4-ª®«¨ç¥á⢮ 㤠«¥­­ëå ä ©«®¢
                DB "RAMDISKO"                   ;+0XF5-¨¬ï ¤¨áª¥âë
DSK_END

                DUPL 0X1000-$,0;XFF
VARS1

;[ ¤à¥á  ¯¥à¥å¢ â ]
                JP_EMU 0X1E3A                   ; OUT      (0X3F), A
                JP_EMU 0X1FDD                   ; IN    A, (0X1F)
                JP_EMU 0X1FF3                   ; OUT      (0XFF), A
                JP_EMU 0X2000                   ; OUT      (0X1F), A
                JP_EMU 0X2076                   ; IN    A, (0X1F)
                JP_EMU 0X2085                   ; OUT      (0X3F), A
                JP_EMU 0X208D                   ; OUT      (0X5F), A
                JP_EMU 0X2093                   ; OUT      (0X1F), A
                JP_EMU 0X2099                   ; IN    A, (0X1F)
                JP_EMU 0X20B1                   ; IN    A, (0XFF)
                JP_EMU 0X20B8                   ; OUT      (C),    D
                JP_EMU 0X2740                   ; IN    A, (0X1F)
                JP_EMU 0X2748                   ; OUT      (0X7F), A
                JP_EMU 0X2A53                   ; OUT      (C),    A

;¯¥à¢ ï ª®¬ ­¤  ¢ ®¡à ¡®â稪¥ MAGIC ¤«ï ¢®§¢à â  ¢ ¯ £ã FE
;               JP_EMU 0X2A71                   ; OUT      (0XFF), A
                DUPL 0X2A73-$,0;XFF
                JP INT_RET                      ;¢®§¢à é¥­¨¥ ¨§ ®¡à ¡®â稪  INT

;               JP_EMU 0X2A77                   ; IN    A, (0X1F)
                DUPL 0X2A79-$,0;XFF
                JP RET_MNT_RW                   ;¢®§¢à é¥­¨¥ ¯®á«¥ ¢ë§®¢  RST 8

                JP_EMU 0X2AD9                   ; OUT      (0XFF), A
                JP_EMU 0X2B25                   ; IN    A, (0X5F)
                JP_EMU 0X2C07                   ; IN    A, (0X5F)
                JP_EMU 0X2CD8                   ; IN    A, (0X5F)
                JP_EMU 0X2D75                   ; OUT      (0X5F), A
                JP_EMU 0X2D80                   ; OUT      (0X1F), A
                JP_EMU 0X2D87                   ; IN    A, (0X1F)
                JP_EMU 0X2F0C                   ; OUT      (0XFF), A
                JP_EMU 0X2F1D                   ; OUT      (0X5F), A

                DUPL 0X2F24-$,0;XFF             ; ¤«ï  ¤à¥á  0X2F4D
                JP ADR_0X2F4D

                JP_EMU 0X2F28                   ; OUT      (0X1F), A
                JP_EMU 0X2F2F                   ; IN    A, (0X1F)
                JP_EMU 0X2F3C                   ; OUT      (0XFF), A

                DUPL 0X2F4D-$,0;XFF             ; OUT      (0XFF), A
                OUT (EXIT_PORT),A
                DB 0X18                         ; JR 0X2F24

                JP_EMU 0X2F50                   ; OUT      (0X7F), A

                DUPL 0X2F57-$,0;XFF             ; OUT      (0X1F), A
                OUT (EXIT_PORT),A
                JR JUMP_0X2F57
                JR JUMP_0X2F59                  ; IN    A, (0XFF)
EXIT_0X2F59     OUT (EXIT_PORT),A
JUMP_0X2F59     JP ADR_0X2F59
JUMP_0X2F57     JP ADR_0X2F57

                JP_EMU 0X2FB1                   ; OUT      (0XFF), A
                JP_EMU 0X2FC3                   ; OUT      (0X1F), A

                DUPL 0X32A2-$,0;XFF
;[®¡à ¡®â稪¨ ç⥭¨ï/§ ¯¨á¨ ¯®à⮢]
;[§ ¯¨áì "A" ¢ ¯®àâ 0X1F]
OUT_1F          LD A,(OLD_AF+1)
                LD (WR_1F),A
                CP 0X10
                JR NC,OUT_1F_10
;00-0F ª®¬ ­¤  ¢®ááâ ­®¢«¥­¨ï
                XOR A
                LD (PORT_3F),A
                JR INFF_BIT6

OUT_1F_10       CP 0X20
                JR NC,OUT_1F_20
;10-1F ª®¬ ­¤  ¯®¨áª 
                LD A,(PORT_7F)
                LD (PORT_3F),A
                CALL DISK_NONE
                LD A,0X80
                JR C,INFF_BIT6_1
INFF_BIT6       XOR A
INFF_BIT6_1     LD (RD_1F),A
                LD A,0XBF
                LD (RD_FF),A
                RET

OUT_1F_20       CP 0X40
                JR NC,OUT_1F_40
;20-3F ª®¬ ­¤  è £ ¢ ¯à¥¤ë¤ã饬 ­ ¯à ¢«¥­¨¨
                LD A,(PORT_3F)
NAPRAVL         NOP
                LD (PORT_3F),A
                JR INFF_BIT6

OUT_1F_40       CP 0X60
                JR NC,OUT_1F_60
;40-5F ª®¬ ­¤  è £ ¢¯¥à¥¤
                LD A,(PORT_3F)
                INC A
                LD (PORT_3F),A
                LD A,0X3C                       ;INC A
                LD (NAPRAVL),A
                JR INFF_BIT6

OUT_1F_60       CP 0X80
                JR NC,OUT_1F_80
;60-7F ª®¬ ­¤  è £ ­ § ¤
                LD A,(PORT_3F)
                DEC A
                LD (PORT_3F),A
                LD A,0X3D                       ;DEC A
                LD (NAPRAVL),A
                JR INFF_BIT6

OUT_1F_80       CP 0XA0
                JR NC,OUT_1F_A0
;80-9F ª®¬ ­¤  ç⥭¨¥ ᥪâ®à 
                JR INFF_BIT6;7

OUT_1F_A0       CP 0XC0
                JR NC,OUT_1F_D0
;A0-BF ª®¬ ­¤  § ¯¨áì ᥪâ®à 
                JR INFF_BIT6

INFF_BIT7       XOR A
                LD (RD_1F),A
                LD A,0X7F
                LD (RD_FF),A
                RET

OUT_1F_D0       CP 0XD0
                JR NC,OUT_1F_E0
;C0-CF ç⥭¨¥  ¤à¥á 
                JR INFF_BIT6;7

OUT_1F_E0       CP 0XE0
                JR NC,OUT_1F_F0
;D0-DF ¯à¨­ã¤¨â¥«ì­®¥ ¯à¥à뢠­¨¥
                LD A,0XBF
                LD (RD_FF),A
                RET

OUT_1F_F0       CP 0XF0
                JR C,INFF_BIT6
;E0-EF ç⥭¨¥ ¤®à®¦ª¨
                JR INFF_BIT6

;[§ ¯¨áì "A" ¢ ¯®àâ 0X3F]
OUT_3F          LD A,(OLD_AF+1)
                LD (PORT_3F),A
                RET

;[§ ¯¨áì "A" ¢ ¯®àâ 0X5F]
OUT_5F          LD A,(OLD_AF+1)
                LD (PORT_5F),A
                RET

;[§ ¯¨áì "A" ¢ ¯®àâ 0X7F]
OUT_7F          LD A,(OLD_AF+1)
                LD (PORT_7F),A
                RET

;[§ ¯¨áì "A" ¢ ¯®àâ 0XFF]
OUT_FF          LD A,(OLD_AF+1)
                LD (WR_FF),A
                OUT (0XFF),A
                RET

;[§ ¯¨áì "A" ¢ ¯®àâ (C)]
OUT_C_A         LD A,(OLD_AF+1)
WRCA1           LD D,A
                LD BC,(OLD_BC)                  ;¥á«¨ ¯®àâ ­¥ TR-DOS
                LD A,C
;®¯à¥¤¥«¥­¨¥ ¢ ª ª®© ¯®àâ § ¯¨áì       
                CP 0X1F
                JP Z,OUT_1F
                CP 0X3F
                JR Z,OUT_3F
                CP 0X5F
                JR Z,OUT_5F
                CP 0X7F
                JR Z,OUT_7F
                CP 0XFF
                JR Z,OUT_FF
                CP LOW (WIN_A0)
                JR Z,WRCA3
WRCA4           OUT (C),D
                RET

;[§ ¯¨áì ¢ ¯®àâë ATM/PENTEVO]
WRCA3           LD A,B
                LD HL,BB_CPU1
                CP HIGH (WIN_A1)
                JR Z,WRCA2
                CP HIGH (WIN_P2)
                JR Z,WRCA2
                LD HL,BB_CPU2
                CP HIGH (WIN_A2)
                JR Z,WRCA2
                CP HIGH (WIN_P2)
                JR NZ,WRCA4
WRCA2           LD E,B
                PUSH DE
                PUSH HL
                CALL READ_CPU12
                POP HL
                POP DE
                LD (HL),D
                INC HL
                LD (HL),E
                JP WRITE_CPU12

;[§ ¯¨áì "D" ¢ ¯®àâ (C)]
OUT_C_D         LD A,(OLD_DE+1)
                JR WRCA1

;[¯¥à¥¤ ç  ¡ ©â , ª®¬ ­¤  OUTI]
OUT_OUTI        LD HL,(BUFF_SECT)
                EXX
                LD A,(HL)
                INC HL
                EXX
                LD (HL),A
                INC HL
                LD (BUFF_SECT),HL
                RET

;[ç⥭¨¥ ¯®àâ  0X1F]
IN_1F           LD A,(WR_1F)
                AND 0XF0
                CP 0X10
                JR C,RD1F1
                CP 0X20
                JR C,RD1F3
                CP 0XD0
                JR Z,RD1F1
                XOR A
                JR RD1F2

RD1F3           LD A,(INDEX)
                XOR %00000100
                JR RD1F4

RD1F1           LD A,0X24
INDEX           EQU $-1
RD1F4           XOR %00000010
                LD (INDEX),A
RD1F2           LD (RD_1F),A
                LD (OLD_AF+1),A
                RET

;[ç⥭¨¥ ¯®àâ  0X3F]
IN_3F           LD A,(PORT_3F)
                LD (OLD_AF+1),A
                RET

;[ç⥭¨¥ ¯®àâ  0X5F]
IN_5F           LD A,(PORT_5F)
                LD (OLD_AF+1),A
                RET

;[ç⥭¨¥ ¯®àâ  0X7F]
IN_7F           LD A,(PORT_7F)
                LD (OLD_AF+1),A
                RET

;[ç⥭¨¥ ¯®àâ  0XFF]
IN_FF           LD A,(RD_FF)
                LD (OLD_AF+1),A
                RET

;[ç⥭¨¥ ¢ "H" ¨§ (‘)]
IN_H_C          LD A,(OLD_BC)
;[®¯à¥¤¥«¥­¨¥ ¨§ ª ª®£® ¯®àâ  ç⥭¨¥]
                CP 0X1F
                JR NZ,RDHC2
                LD A,(RD_1F)
                LD (OLD_HL+1),A
                RET

RDHC2           CP 0X3F
                JR NZ,RDHC3
                LD A,(PORT_3F)
                LD (OLD_HL+1),A
                RET
       
RDHC3           CP 0X5F
                JR NZ,RDHC4
                LD A,(PORT_5F)
                LD (OLD_HL+1),A
                RET
       
RDHC4           CP 0X7F
                JR NZ,RDHC5
                LD A,(PORT_7F)
                LD (OLD_HL+1),A
                RET
       
RDHC5           CP 0XFF
                JR NZ,RDHC6
                LD A,(RD_FF)
                LD (OLD_HL+1),A
                RET

RDHC6           LD BC,(OLD_BC)
                IN A,(C)
                LD (OLD_HL+1),A
                RET

;[ç⥭¨¥ INI]
IN_INI          LD A,(RD_1F)
                LD HL,(OLD_HL)
                DEC HL
                LD (HL),A
                INC HL
                LD (OLD_HL),HL
                LD HL,0X2A53
                LD (ADR_EXIT),HL
                JP INFF_BIT6

;[ç⥭¨¥ ᥪâ®à  ¨«¨ ¯®à⮢]
READ_SECTOR     LD A,(WR_1F)
                AND 0X0F0
                CP 0X80
                JP C,INFF_BIT6
                CP 0XC0
                JR NZ,READ_SECTOR_1
                LD A,(PORT_3F)
                LD HL,(OLD_HL)
                LD (HL),A                       ;­®¬¥à ¤®à®¦ª¨
                INC HL
                LD (HL),0                       ;­®¬¥à áâ®à®­ë
                INC HL
                LD A,(PORT_5F)
                LD (HL),A                       ;­®¬¥à ᥪâ®à 
                INC HL
                LD (HL),0                       ;à §¬¥à ᥪâ®à 
                INC HL
                LD (HL),0                       ;¡ ©â CRC
                INC HL
                LD (HL),0                       ;¡ ©â CRC
                INC HL
                LD (OLD_HL),HL
                LD HL,OLD_BC+1
                LD A,(HL)
                SUB 6                           ;REG B - 6
                LD (HL),A
                LD HL,0X2A53
                LD (ADR_EXIT),HL
                JP INFF_BIT6

;[ç⥭¨¥ ᥪâ®à ]
READ_SECTOR_1   XOR A
                JR WRITE_SECTOR_1

;[§ ¯¨áì ᥪâ®à ]
WRITE_SECTOR    LD A,0XFF
WRITE_SECTOR_1  LD (RDWR_MODE),A
                LD A,1
                LD (FLAG_RW_BREAK),A
                LD HL,(OLD_IF)
                PUSH HL
                POP AF
                JP PO,DI_MODE                   ;¯à¥à뢠­¨ï à §à¥è¥­ë?
                CP 0X3F
                JR Z,DI_MODE
                HALT                            ;à §à¥è¥­ë, ¦¤¥¬ ®¡à ¡®â稪 ¯à¥à뢠­¨ï
DI_MODE         CALL READ_CPU12                 ;á®åà ­¥­¨¥ ⥪ã饩 ª®­ä¨£ãà æ¨¨ ®ª®­ ¯à®¥æ¨à®¢ ­¨ï 1,2
                CALL W_WR_RD_SECT
                XOR A
                LD (FLAG_RW_BREAK),A
                LD HL,0X8090
                LD (OLD_AF),HL                  ;í¬ã«ïæ¨ï ä« £  ãᯥ譮£® ç⥭¨ï/§ ¯¨á¨ ᥪâ®à 
                LD HL,0X2A53
                LD (ADR_EXIT),HL
                JP WRITE_CPU12                  ;¢®ááâ ­®¢«¥­¨¥ ª®­ä¨£ãà æ¨¨ ®ª®­ ¯à®¥æ¨à®¢ ­¨ï 1,2

;[ç⥭¨¥ ¨«¨ § ¯¨áì ᥪâ®à  à ¬¤¨áª ]
W_WR_RD_SECT    LD A,(WR_FF)
                AND 3
                INC A
                LD B,A
                LD A,(COPY_VIRT_BITS)
                REPT 5
                RRCA
                ENDM
                DJNZ $-1
                JP C,MOUNT_RW                   ;à ¡®â  á ¯à¨¬®­â¨à®¢ ­­ë¬ ®¡à §®¬
                LD BC,WIN_A1
                LD A,0X40
                OUT (C),A
                LD B,HIGH (WIN_P1)
                LD A,RAM_RAMDISK
                OUT (C),A                       ;áâà ­¨æ  § £®«®¢ª®¢ à ¬¤¨áª 
                LD A,(PORT_3F)                  ;¢§ï«¨ ­®¬¥à â४ 
                ADD A,A                         ;áâ®à®­ 2
                LD C,A
                LD A,(WR_FF)
                AND 0X10                        ;¯à®¢¥àª  ª ª ï áâ®à®­  ¤¨áª 
                JR NZ,WWRRD1
                INC C                           ;¤«ï áâ®à®­ë 1
WWRRD1          LD B,HIGH (CPU1)+2              ; ¤à¥á ­ ç «  ¨­äë ® ᥪâ®à å ­  ¤®à®¦ª¥
                LD A,(PORT_5F)                  ;¢§ï«¨ ­®¬¥à ᥪâ®à 
                LD L,A
                LD H,0
WWRRD3          LD A,(BC)
                LD D,A                          ;¢§ï«¨ ­®¬¥à ᥪâ®à 
                INC B
                LD A,(BC)
                LD E,A                          ;¢§ï«¨ à §¬¥à ᥪâ®à 
                INC B
;               LD A,D
;               AND A
;               JR Z,WWRRD_ERR
                LD A,L
                CP D
                JR Z,WWRRD2
                LD A,E
                ADD A,H
                LD H,A
                JR WWRRD3

WWRRD2          LD A,E
                RRCA
                LD (SECTOR_SIZE),A              ;à §¬¥à ­ ©¤¥­­®£® ᥪâ®à 
                LD L,0
                LD E,L
                SRL H
                RR L                            ;HL=ᬥ饭¨¥ ¢ ¡«®ª å ¤® ­ ©¤¥­­®£® ᥪâ®à 
                LD B,HIGH (CPU1)
                LD A,(BC)
                LD D,A
                ADD HL,DE                       ;HL=ᬥ饭¨¥ ®â ­ ç «  áâà ­¨æë ¢ ¡«®ª å
                INC B
                LD A,(BC)
                LD C,A                          ;ᬥ饭¨¥ ¢ áâà ­¨æ å ®â ­ ç «  à ¬¤¨áª 
                LD A,H
                CP HIGH (CPU1)
                JR C,WWRRD5
                SUB 0X40
                LD H,A
                INC C
;HL=ᬥ饭¨¥ ¢ áâà ­¨æ¥ ¤® ­ ç «  ᥪâ®à 
WWRRD5          LD A,C                          ;ᬥ饭¨¥ ¤® ­®¬¥à  áâà ­¨æë, £¤¥ 㪠§ ­­ë© ᥪâ®à ­ ç¨­ ¥âáï
                ADD A,RAM_DATARAMD              ;¯à¨¡ ¢¨«¨ ­®¬¥à ­ ç «  à ¬¤¨áª ¨ +1. ¢ 0 áâà ­¨æ¥ à ¬¤¨áª  ®¯¨á â¥«¨ ᥪâ®à®¢
                LD (RDWR_PAGE),A                ;á®åà ­¨«¨ ­®¬¥à ¢ëç¨á«¥­­®© áâà ­¨æë
                LD DE,(OLD_HL)
                LD BC,(BB_CPU1)
                LD A,C
                LD C,LOW (WIN_A0)
                OUT (C),A                       ;¢¥à­ã«¨ áâ ­¤ àâ­ãî 5 áâà ­¨æã
SP_RAMD9        LD A,D                          ;¯à®¢¥àª  £à ­¨æë ®âªã¤ /ªã¤  ª®¯¨à®¢ âì
                CP HIGH (CPU2)
                PUSH DE
                LD DE,CPU1+HIGH (WIN_P1)
                LD BC,WIN_A1                    ;¥á«¨ ¢¥àå­¨¥ 32ª¡ ®§ã, â® ­ã¦­® ¢ª«îç¨âì ¢ 1 ®ª­¥ ¯à®¥æ¨à®¢ ­¨ï
                JR NC,SP_RAMD1
                LD DE,CPU2+HIGH (WIN_P2)
                LD B,HIGH (WIN_A2)              ;¥á«¨ ­¨¦­¨¥ 32ª¡ ®§ã, â® ­ã¦­® ¢ª«îç¨âì ¢® 2 ®ª­¥ ¯à®¥æ¨à®¢ ­¨ï
SP_RAMD1        LD A,0X40
                OUT (C),A
                LD B,E
                LD A,(RDWR_PAGE)                ;­®¬¥à ¢ëç¨á«¥­­®© áâà ­¨æë ®§ã
                OUT (C),A                       ;¢ª«î稫¨ ¢ëç¨á«¥­­ãî áâà ­¨æã
                LD B,D                          ;áâ à訩 ¡ ©â  ¤à¥á  ­ ç «  ¢ª«î祭­®© áâà ­¨æë
                POP DE
                LD A,B
                ADD A,H
                LD H,A
                LD A,(RDWR_MODE)
                AND A
                JR NZ,IN_ROM1
                LD A,D
                INC A
                JR NZ,IN_ROM1
                LD A,E
                AND A
                JR Z,IN_ROM1
IN_ROM4         NEG
                LD C,A
                LD B,0
                LDIR
                NEG
                LD C,A
IN_ROM2         EX DE,HL
                ADD HL,BC
                EX DE,HL
                ADD HL,BC
                LD A,(SECTOR_SIZE)
                JP SP_RAMD8_

IN_ROM1         LD A,D
                CP HIGH (CPU1)
                JR NC,IN_ROM3
                LD A,(SECTOR_SIZE)
                AND A
                LD BC,0X80
                JR Z,IN_ROM2
                LD BC,0X100
                JR IN_ROM2

IN_ROM3         CP HIGH (CPU2)                  ;¯à®¢¥àª  ¯¥à¥å®¤  £à ­¨æë áâà ­¨æ
                JP NC,SP_RAMD3                  ;¥á«¨ ¢ëè¥ â® áࠧ㠪®¯¨à㥬
                CP HIGH (CPU2)-1
                JP C,SP_RAMD3                   ;¥á«¨ ­¨¦¥ â ª ¦¥ áࠧ㠪®¯¨à㥬
                LD A,E
                AND A                           ;¥á«¨ ᥪâ®à ¯®«­®áâìî 㪫 ¤ë¢¥âáï ¤® £à ­¨æë, â® áࠧ㠪®¯¨à㥬
                JR Z,SP_RAMD3                   ;¨­ ç¥ ¯à¨­ã¤¨â¥«ì­® ª®¯¨à㥬 ¢ ¤¢  ¯à¨¥¬ 
                LD A,(RDWR_MODE)                ;ç⥭¨¥ ¨«¨ § ¯¨áì?
                AND A
                LD A,E                          ;¬« ¤è¨© ¡ ©â  ¤à¥á ¢ ¡«®ª¥
                JR Z,SP_RAMD4
                EX DE,HL                        ;¤«ï § ¯¨á¨ ¬¥­ï¥¬ ­ ¯à ¢«¥­¨¥
SP_RAMD4        NEG
                LD C,A                          ;ª®¯¨à㥬 ®áâ â®ª ¤® ª®­æ  ¡«®ª 
                LD B,0
                LDIR
                NEG
                PUSH AF                         ;á¯àïâ «¨ ᪮«ìª® ®áâ «®áì ª®¯¨à®¢ âì ¨§ ­ ç «  á«¥¤ãî饣® ¡«®ª 
                LD BC,(BB_CPU2)
                LD A,C
                LD C,LOW (WIN_A0)
                OUT (C),A
                LD B,HIGH (WIN_A1)
                LD A,0X40
                OUT (C),A
                LD B,HIGH (WIN_P1)
                LD A,(RDWR_PAGE)
                OUT (C),A                       ;¢ëç¨á«¥­­ãî áâà ­¨æã ¢ª«îç ¥¬ ¢ 1 ®ª­¥ ¯à®¥æ¨à®¢ ­¨ï
                LD A,(RDWR_MODE)                ;ç⥭¨¥ ¨«¨ § ¯¨áì
                AND A
                JR Z,SP_RAMD5
                LD A,D                          ;¤«ï § ¯¨á¨
                SUB 0X40                        ;¨§¬¥­¨«¨  ¤à¥á ªã¤  ª®¯¨à®¢ âì ­  ¤à㣮¥ ®ª­® ¯à®¥æ¨à®¢ ­¨ï
                LD D,A
                JR SP_RAMD6

SP_RAMD5        LD A,H                          ;¤«ï ç⥭¨ï
                SUB 0X40                        ;¨§¬¥­¨«¨  ¤à¥á ªã¤  ª®¯¨à®¢ âì ­  ¤à㣮¥ ®ª­® ¯à®¥æ¨à®¢ ­¨ï
                LD H,A
SP_RAMD6        POP AF
                LD C,A                          ;᪮«ìª® ®áâ «®áì ᪮¯¨à®¢ âì ¡ ©â
                LD B,0
                LDIR
                LD A,(SECTOR_SIZE)
                JR SP_RAMD8_

SP_RAMD3        LD A,(RDWR_MODE)                ;ç⥭¨¥ ¨«¨ § ¯¨áì
                AND A
                JR Z,SP_RAMD7
                EX DE,HL                        ;¤«ï § ¯¨á¨ ¬¥­ï¥¬ ­ ¯à ¢«¥­¨¥
SP_RAMD7        LD A,(SECTOR_SIZE)
                AND A
                JR NZ,SP_RAMD8
                CALL COPYHBLOCK                 ;¤«ï ᥪâ®à  à §¬¥à®¬ 128 ¡ ©â ª®¯¨à㥬 ¯®«®¢¨­ã ¨ ¢ë室¨¬
ECOPY_BLOCK     LD A,(RDWR_MODE)
                AND A
                JR Z,ECOPY_BLOCK1
                EX DE,HL
ECOPY_BLOCK1    LD (OLD_HL),DE
                RET

SP_RAMD8        CALL COPY_BLOCK                 ;¤«ï ᥪâ®à  256 ¡ ©â ª®¯¨à㥬 ¢¥áì ¨ ¢ë室¨¬
SP_RAMD8_       DEC A
                JR Z,ECOPY_BLOCK
                LD (SECTOR_SIZE),A
                LD A,(RDWR_MODE)
                AND A
                JR Z,SP_RAMD0
                EX DE,HL
SP_RAMD0        LD A,0X3F
                AND H
                LD H,A
                JP SP_RAMD9

COPY_BLOCK      REPT 128
                LDI
                ENDM
COPYHBLOCK      REPT 128
                LDI
                ENDM
                RET

;[¯à®¢¥àª  ­ «¨ç¨ï ¬ àª¥à  à ¬¤¨áª ]
CMP_RAM_DISK    CALL READ_CPU12
                LD BC,WIN_P1
                LD A,RAM_RAMDISK
                OUT (C),A
                LD HL,CPU1+0X3FFF
                LD D,(HL)
                DEC H
                LD E,(HL)                       ;¢§ï«¨ ¡ ©âë ¤«ï ¯à®¢¥àª¨ ¬ àª¥à 
                CALL WRITE_CPU12
                LD HL,"RD"
                AND A
                SBC HL,DE
                RET Z                           ;¥á«¨ ¬ àª¥à ­  ¬¥áâ¥, â® à ¬¤¨áª  ­¥ ᮧ¤ ¥¬
;[ᮧ¤ ­¨¥ ç¨á⮣® à ¬¤¨áª ]
CREATE_TRDTABL  LD BC,WIN_P1
                LD A,RAM_RAMDISK                ;­ã¦­  áâà ­¨æ  ­ ç «  à ¬¤¨áª , £¤¥ ¡ã¤¥â â ¡«¨æ  ®¯¨á â¥«¥©
                OUT (C),A
                LD HL,CPU1
                PUSH HL
                LD DE,CPU1+1
                LD BC,0X3FFF
                LD (HL),L
                LDIR                            ;®ç¨á⨫¨ áâà ­¨æã
                POP DE                          ; ¤à¥á ­ ç «  áâà ­¨æë
                LD HL,0                         ;ᬥ饭¨¥ ¢ ¡«®ª å ¨ áâà ­¨æ å
                LD A,0XA0
ELT2            PUSH AF
                LD BC,0X1000                    ;áç¥â稪 ­®¬¥à®¢ ᥪâ®à®¢ ¨ ¨å ­®¬¥à 
                LD A,L
                RRCA
                RRCA
                LD (DE),A                       ;ᬥ饭¨¥ ¢ ¡«®ª å ¤®à®¦ª¨ ¢ áâà ­¨æ¥
                INC D
                LD A,H
                LD (DE),A                       ;ᬥ饭¨¥ ¢ áâà ­¨æ å ¤® ¤®à®¦ª¨
                INC D
ELT1            INC C
                LD A,C
                LD (DE),A                       ;­®¬¥à ᥪâ®à 
                INC D
                LD A,2
                LD (DE),A                       ;à §¬¥à ᥪâ®à 
                INC D
                DJNZ ELT1                       ;¢­®á¨¬ ¢ â ¡«¨æ㠢ᥠ­®¬¥à  ᥪâ®à®¢ á à §¬¥à ¬¨
                LD D,HIGH (CPU1)                ;¢¥à­ã«¨ 㪠§ â¥«ì ¢ ­ ç «®
                INC E                           ;¤«ï á«¥¤ãî饩 ¤®à®¦ª¨
                LD BC,0X40
                ADD HL,BC                       ;¯¥à¥å®¤ ª á«¥¤ãî饩 ¤®à®¦ª¥
                POP AF
                DEC A
                JR NZ,ELT2                      ;¯®¢â®à塞 ¤«ï ¢á¥å ¤®à®¦¥ª
                LD HL,CPU1+0X3FFF
                LD (HL),"R"                     ;¢­®á¨¬ ¬ àª¥à à ¬¤¨áª 
                DEC H
                LD (HL),"D"
                LD BC,WIN_P1
                LD A,RAM_DATARAMD
                OUT (C),A
                LD HL,CPU1
                LD DE,CPU1+1
                LD BC,0X0FFF
                LD (HL),L
                LDIR
                LD HL,DSKINFO
                LD DE,CPU1+0X8E1
                LD BC,DSK_END-DSKINFO
                LDIR
;[¢®ááâ ­®¢«¥­¨¥ ª®­ä¨£ãà æ¨¨ ®ª®­ ¯à®¥æ¨à®¢ ­¨ï 1,2]
WRITE_CPU12     LD BC,(BB_CPU1)
                LD A,C
                LD C,LOW (WIN_A0)
                OUT (C),A
                LD BC,(BB_CPU2)
                LD A,C
                LD C,LOW (WIN_A0)
                OUT (C),A
                RET

;[ç⥭¨¥ ⥪ã饣® ª®­ä¨£  áâà ­¨æ ¯à®¥æ¨à®¢ ­¨ï 1,2]
READ_TMP_CPU12  LD HL,(BB_CPU1)
                PUSH HL
                LD HL,(BB_CPU2)
                PUSH HL
                CALL READ_CPU12
                LD HL,(BB_CPU1)
                LD (TMP_BB_CPU1),HL
                LD HL,(BB_CPU2)
                LD (TMP_BB_CPU2),HL
                POP HL
                LD (BB_CPU2),HL
                POP HL
                LD (BB_CPU1),HL
                JR WRITE_CPU12

;[¢®ááâ ­®¢«¥­¨¥ ⥪ã饩 ª®­ä¨£ãà æ¨¨ áâà ­¨æ ¯à®¥æ¨à®¢ ­¨ï 1,2]
WRITE_TMP_CPU12 LD BC,0
TMP_BB_CPU1     EQU $-2
                LD A,C
                LD C,LOW (WIN_A0)
                OUT (C),A
                LD BC,0
TMP_BB_CPU2     EQU $-2
                LD A,C
                LD C,LOW (WIN_A0)
                OUT (C),A
                RET

;[ç⥭¨¥ ª®­ä¨£ãà æ¨¨ ®ª®­ ¯à®¥æ¨à®¢ ­¨ï 1,2]
READ_CPU12      LD BC,RD_RAMNROM
                IN L,(C)                        ;¡¨âë RAM & ROM
                INC B
                IN H,(C)                        ;¡¨âë DOS & 7FFD
                ADD HL,HL
                LD B,HIGH (RD_1WINA1)
                IN A,(C)
                CP 0XC0
                JR NC,RWCPU1
                LD E,A
                LD D,HIGH (WIN_P1)
                JR RWCPU2

RWCPU1          RLCA
                RLCA
                SLA L
                RRA
                SLA H
                RRA
                LD E,A
                LD D,HIGH (WIN_A1)
RWCPU2          LD (BB_CPU1),DE
                INC B
                IN A,(C)
                CP 0XC0
                JR NC,RWCPU3
                LD E,A
                LD D,HIGH (WIN_P2)
                JR RWCPU4

RWCPU3          RLCA
                RLCA
                SLA L
                RRA
                SLA H
                RRA
                LD E,A
                LD D,HIGH (WIN_A2)
RWCPU4          LD (BB_CPU2),DE
                RET

;[¯à®¢¥àª  ­ «¨ç¨ï ¢¨àâã «ì­®£® ¤¨áª ]
DISK_NONE       PUSH HL
                PUSH BC
                CALL READ_CPU12
                LD BC,WIN_A1
                LD A,0X40
                OUT (C),A
                LD B,HIGH (WIN_P1)
                LD A,RAM_RAMDISK
                OUT (C),A
                LD HL,CPU1+0X3FFF
                LD A,(HL)
                DEC H
                CP "R"
                SCF
                JR NZ,DISK_NONE1
                LD A,(HL)
                CP "D"
                SCF
                JR NZ,DISK_NONE1
                XOR A
DISK_NONE1      PUSH AF
                CALL WRITE_CPU12
                POP AF
                POP BC
                POP HL
                RET

;­  ¢å®¤¥: H- ¤à¥á ï祩ª¨
;          L-¯à®ç¨â ­­®¥ §­ ç¥­¨¥
READCMOS        PUSH BC
                LD BC,CMOSD_SET_ADR
                OUT (C),H
                LD B,HIGH (CMOSD_RD_WR)
                IN L,(C)
                POP BC
                LD A,L
                AND A
                RET

;­  ¢å®¤¥: H- ¤à¥á ï祩ª¨
;          L-çâ® â㤠 § ¯¨á âì
WRITECMOS       PUSH BC
                LD BC,CMOSD_SET_ADR
                OUT (C),H
                LD B,HIGH (CMOSD_RD_WR)
                OUT (C),L
                POP BC
                RET

                JP_EMU 0X3C30                   ; IN    A, (0X1F)

                DUPL 0X3D2F-$,0;XFF
                NOP
                RET

                JP_EMU 0X3D4D                   ; OUT      (0XFF), A
                JP_EMU 0X3D9A                   ; OUT      (0X1F), A
                JP_EMU 0X3DA6                   ; IN    A, (0XFF)
                JP_EMU 0X3DB5                   ; IN    A, (0X1F)
                JP_EMU 0X3DBA                   ; IN    A, (0X1F)
                JP_EMU 0X3DD5                   ; OUT      (0XFF), A
                JP_EMU 0X3E30                   ; IN    A, (0X1F)
                JP_EMU 0X3E3A                   ; IN    A, (0X1F)
                JP_EMU 0X3E44                   ; OUT      (0X7F), A

                DUPL 0X3E49-$,0;XFF
                JP ADR_0X3E4C                   ; ¤«ï  ¤à¥á  0X3E4C

;               JP_EMU 0X3E4C                   ; OUT      (0X7F), A
                DUPL 0X3E4C-$,0;XFF
                OUT (EXIT_PORT),A
                JR 0X3E49

                JP_EMU 0X3E50                   ; IN    A, (0X3F)
                JP_EMU 0X3E78                   ; IN    A, (0X3F)
                JP_EMU 0X3E7E                   ; OUT      (0X3F), A
                JP_EMU 0X3E87                   ; IN    A, (0X3F)
                JP_EMU 0X3E95                   ; OUT      (0X3F), A
                JP_EMU 0X3EB5                   ; IN    A, (0X1F)
                JP_EMU 0X3EBC                   ; IN    A, (0X3F)
                JP_EMU 0X3EC9                   ; OUT      (0X1F), A
                JP_EMU 0X3ECE                   ; IN    A, (0XFF)
                JP_EMU 0X3EDF                   ; OUT      (0X1F), A

                DUPL 0X3EF3-$,0;XFF             ; IN    H, (C)
                OUT (EXIT_PORT),A
                JR JUMP_0X3EF3
                JR JUMP_0X3EF5                  ; IN    A, (0XFF)
EXIT_0X3EF5     OUT (EXIT_PORT),A
JUMP_0X3EF5     JP ADR_0X3EF5

;               JP_EMU 0X3EF5                   ; IN    A, (0XFF)
                JP_EMU 0X3EFE                   ; IN    A, (0X7F)
JUMP_0X3EF3     JP ADR_0X3EF3

                JP_EMU 0X3F1B                   ; OUT      (0X5F), A
                JP_EMU 0X3F25                   ; OUT      (0X1F), A
                JP_EMU 0X3F33                   ; IN    A, (0X1F)

                DUPL 0X3F40-$,0;XFF             ; ¤«ï  ¤à¥á  0x3EF3
                JP ADR_0X3EF3

                JP_EMU 0X3F4D                   ; OUT      (0X1F), A
                JP_EMU 0X3F55                   ; IN    A, (0X3F)
                JP_EMU 0X3F5A                   ; IN    A, (0X5F)
                JP_EMU 0X3F69                   ; IN    A, (0X3F)
                JP_EMU 0X3F72                   ; IN    A, (0X5F)

                JP_EMU 0X3FBC                   ; IN    A, (0XFF)       ;§ ¯¨áì ᥪâ®à 

                DUPL 0X3FC7-$,0;XFF
JUMP_0X3FF0     JP ADR_0X3FF0

                JP_EMU 0X3FCA                   ; IN    A, (0XFF)       ;§ ¯¨áì ᥪâ®à 
                JP_EMU 0X3FD1                   ; OUTI                  ;§ ¯¨áì ᥪâ®à 

                JP_EMU 0X3FD7                   ; IN    A, (0XFF)       ;ç⥭¨¥ ᥪâ®à 

JUMP_0X3FEC     JP ADR_0X3FEC
JUMP_0X3FF3     JP ADR_0X3FF3

                JP_EMU 0X3FE5                   ; IN    A, (0XFF)       ;ç⥭¨¥ ᥪâ®à 

;               JP_EMU 0X3FEC                   ; INI                   ;ç⥭¨¥ ᥪâ®à 
                DUPL 0X3FEC-$,0;XFF
                OUT (EXIT_PORT),A
                JR JUMP_0X3FEC

;               DUPL 0X3FF0-$,0                 ; OUT      (C), A
                OUT (EXIT_PORT),A
                DB 0X18                         ; JR 0X3FC7

;               DUPL 0X3FF5-$,0                 ; IN    A, (C)
                OUT (EXIT_PORT),A
                JP JUMP_0X3FF3

                DUPL 0X3FF8-$,0
                DB "EVOSFE"
                DW DATA_VERS