Top secrets sources NedoPC pentevo

Rev

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


; LAST UPDATE: 15.12.2021 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
; â ¡«¨æ   ¤à¥á®¢ ¯¥à¥å¢ â  ¨ ¢ë§ë¢ â®à  ®¡à ¡®â稪®¢
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)
                LD D,A
                JP WR_C_D

; 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
                DW INT_BREAK

                DUPL STACK+0X41-$,0
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                    ;  ¤à¥á ¢®§¢à â  ¨§ ®¡à ¡®â稪  ¯à¥à뢠­¨ï ¢­¥è­¥© ¯à®£¨ ç¥à¥§ OUT (0xFF),A
                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)
                LD A,(WR_FF)                    ; ¡ ©â¨ª ¤«ï ¢®§¢à â  ç¥à¥§ ª®¬ ­¤ã OUT (0xFF),A
                EI
                JP 0X2A53

INT_RET         LD SP,0
INT_SP          EQU $-2
                IN A,(PEVO_CONF)
                LD (OLD_PORT_BF),A
                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
; ¢å®¤ ¢ ®¡à ¡®â稪
WORKER          LD (NUM_ADR),A
                LD (OLD_SP),SP
                LD SP,STACK-WORD
                PUSH AF
                EX (SP),HL
                LD A,L
                LD (OLD_AF),A
                POP HL
                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
        RST8 _MOUNTER,_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
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
                DUPL 0X2A73-$,0                 ; OUT      (0XFF), A
                JP INT_RET                      ; ¢®§¢à é¥­¨¥ ¨§ ®¡à ¡®â稪  INT

                DUPL 0X2A79-$,0                 ; IN    A, (0X1F)
                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                 ; ¤«ï  ¤à¥á  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                 ; OUT      (0XFF), A
                OUT (EXIT_PORT),A
                DB 0X18                         ; JR 0X2F24

        JP_EMU 0X2F50                           ; OUT      (0X7F), A

                DUPL 0X2F57-$,0                 ; 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
; ®¡à ¡®â稪¨ ç⥭¨ï/§ ¯¨á¨ ¯®à⮢
; § ¯¨áì "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
                LD D,A
                LD BC,0X00FF
                JR WR_C_D

; § ¯¨áì "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
WR_C_D          PUSH BC
                LD BC,FDD_EMU_PORT
                IN E,(C)
                XOR A
                OUT (C),A
                POP BC
                OUT (C),D
                LD BC,FDD_EMU_PORT
                OUT (C),E
                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,WR_C_D
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 HL,(OLD_HL)
                LD A,H
                CP 0x40
                JR C,.L1
                DEC HL
                LD A,(RD_1F)
                LD (HL),A
.L1
; ¢à¥¬¥­­®, ¤«ï  ­àë« 
                LD A,0xD3
                LD (0x3FD7),A
; ¢à¥¬¥­­®, ¤«ï  ­àë« 
                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,%10000000
.L1             RLCA
                DJNZ .L1
                LD B,A
                LD A,(COPY_VIRT_BITS)
                AND B
                JP NZ,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

                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

                DUPL 0X3E4C-$,0;XFF             ; OUT      (0X7F), A
                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                 ; ¤«ï  ¤à¥á  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
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)       ;ç⥭¨¥ ᥪâ®à 

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

                OUT (EXIT_PORT),A               ; OUT      (C), A
                DB 0X18                         ; JR 0X3FC7

                OUT (EXIT_PORT),A               ; IN    A, (C)
                JP JUMP_0X3FF3

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