Top secrets sources NedoPC pentevo

Rev

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


; LAST UPDATE: 09.10.2022 savelij

                TITLE "virtual.a80"

                DB 0xFF                         ; DCU

; ª®¯¨à®¢ ­¨¥ 256 ¡ ©â
COPY_BLOCK
        REPT 128                                ; ª®¯¨à®¢ ­¨¥ ¡«®ª  256 ¡ ©â
                LDI
        ENDM
COPYHBLOCK
        REPT 126
                LDI
        ENDM
                JR COPY_BLOCK1
               
                DW 0xFFFF                       ; ¤«ï ¢¥ªâ®à  ¯à¥à뢠­¨© IM 2 I=9

COPY_BLOCK1     LDI
                LDI
                RET

; ­®¬¥à  ¢­ãâ७­¨å ä㭪権
 INIT_VAR
 SETVAR _OUT_1F
 SETVAR _OUT_3F
 SETVAR _OUT_5F
 SETVAR _OUT_7F
 SETVAR _OUT_FF
 SETVAR _OUTI
 SETVAR _IN_1F
 SETVAR _IN_3F
 SETVAR _IN_5F
 SETVAR _IN_7F
 SETVAR _IN_FF
 SETVAR _INI
 SETVAR _OUT_C_D
 SETVAR _IN_H_C
 SETVAR _WR_RD_SECT
 SETVAR _CMP_RAMDISK
; SETVAR _SET_VIRT_BITS

 SETVAR WOUTCA
 SETVAR WWRITE_SEC_
 SETVAR WREAD_SEC_
 SETVAR WINI_RET

;  ¤à¥á  ¢­ãâ७­¨å ä㭪権
; á ¢®§¢à â®¬ ¢ ¬¥áâ® ¢ë§®¢ 
W_DATA          DW W_OUT1F                      ; § ¯¨áì ¯®àâ  1F
                DW W_OUT3F                      ; § ¯¨áì ¯®àâ  3F
                DW W_OUT5F                      ; § ¯¨áì ¯®àâ  5F
                DW W_OUT7F                      ; § ¯¨áì ¯®àâ  7F
                DW W_OUTFF                      ; § ¯¨áì ¯®àâ  FF
                DW W_OUTI                       ; OUTI
                DW W_IN1F                       ; ç⥭¨¥ ¯®àâ  1F
                DW W_IN3F                       ; ç⥭¨¥ ¯®àâ  3F
                DW W_IN5F                       ; ç⥭¨¥ ¯®àâ  5F
                DW W_IN7F                       ; ç⥭¨¥ ¯®àâ  7F
                DW W_INFF                       ; ç⥭¨¥ ¯®àâ  FF
                DW W_INI                        ; INI
                DW W_OUTCD                      ; § ¯¨áì ॣ¨áâà  'D' ¢ ¯®àâ 'BC'
                DW W_INHC                       ; ç⥭¨¥ ¢ ॣ¨áâà 'H' ¨§ ¯®àâ  'BC'
                DW READ_WRITE_SEC               ; ç⥭¨¥/§ ¯¨áì ᥪâ®à 
                DW CMP_RAM_DISK                 ; ¯à®¢¥àª  RAM ¤¨áª 
;               DW SET_VIRT_BITS                ; ãáâ ­®¢ª  ¯¥à¥¬¥­­®© áç¨â ­­®© ¨§ RST 8
EW_DATA
; ¡¥§ ¢®§¢à â  ¢ ¬¥áâ® ¢ë§®¢ 
                DW W_OUTCA                      ; § ¯¨áì ॣ¨áâà  'A' ¢ ¯®àâ 'BC'
                DW WRITE_SEC_                   ; § ¯¨áì ᥪâ®à  ¡¥§ ¢®§¢à â  ¢  ¤à¥á ¢ë§®¢ 
                DW READ_SEC_                    ; ç⥭¨¥ ᥪâ®à  ¡¥§ ¢®§¢à â  ¢  ¤à¥á ¢ë§®¢ 
                DW W_INI                        ; INI ¡¥§ ¢®§¢à â  ¢  ¤à¥á ¢ë§®¢ 

TEXT4VIRTDRV    DB 0x16,ZASTV_Y+2,1
TXT4VIRTDRV     DC "Virtual Drive: "
ETXT4VIRTDRV

DOS_NOEMUL      DB ROM_BAS48 | 0x80             ; áâà ­¨æ  DOS á í¬ã«ï樥© ⮫쪮 ¤«ï 3D13
DOS_EMUL        DB ROM_ADD_BAS48 | 0x80         ; áâà ­¨æ  DOS á ¯®«­ë¬ ¯¥à¥å¢ â®¬ ¯®à⮢

NUM_ALT_PAGE
        IF EMU3D2F=1
                DB ROM_ADD_BAS48 | 0x80
        ELSE
                DB ROM_BAS48 | 0x80
        ENDIF

; ®¡à ¡®â稪 RST 30
RST30_WORK      EX (SP),HL
                PUSH AF
                PUSH BC
                LD A,I
                JP PE,RST30_WORK1
                LD A,I
RST30_WORK1     DI
                PUSH AF
                LD A,(NUM_ALT_PAGE)             ; ­®¬¥à ⥪ã饩 áâà ­¨æë ‡“
                PUSH AF
                AND 0x3E                        ; ­®¬¥à ॠ«ì­®© áâà ­¨æë ¡¥§ § ¢¨á¨¬®áâ¨
                LD BC,WIN_A0
                OUT (C),A
                LD B,HIGH (WIN_P0)
                LD A,RAM_EVODOS
                OUT (C),A
                IN A,(PEVO_CONF)
                LD (WR_BF),A
                OR 1
                OUT (PEVO_CONF),A
                POP AF
                LD (TEK_ROMPAGE),A
                LD A,(HL)
                LD (DOS_STEK),SP
                LD SP,DOS_STEK
                PUSH HL                         ; ¯®«®¦¨«¨ HL =  ¤à¥á ¢®§¢à â 
                PUSH DE
                LD HL,(DOS_STEK)
                LD DE,REG_IF
        REPT 8
                LDI
        ENDM
                LD HL,EXIT_RST30
                PUSH HL                         ; ¯®«®¦¨«¨  ¤à¥á § ¢¥à襭¨ï
                LD HL,W_DATA
                ADD A,A
                ADD A,L        
                LD L,A
                LD A,(HL)
                INC L
                LD H,(HL)
                LD L,A
                JP (HL)

EXIT_RST30      LD HL,REG_IF
                LD DE,(DOS_STEK)
        REPT 8
                LDI
        ENDM
                POP DE
                POP HL
                LD SP,(DOS_STEK)
                LD A,(HL)
                INC HL
                CP LOW ((EW_DATA-W_DATA) / 2)
                JR C,EXIT_RST302
                LD HL,FOR_RET                   ;  ¤à¥á ¢ë室  ¡¥§ ¢®§¢à â  ¢ ¬¥áâ® ¢ë§®¢ 
EXIT_RST302     PUSH HL
                LD HL,(COPY_VIRT_BITS)
                LD A,(MASK_MNT_DRV)
                AND L
                LD A,ROM_ADD_BAS48 | 0x80       ; áâà ­¨æ  ¤«ï 3D2F
                JR NZ,EXIT_RST305               ; ¢ë¡®à ROM 3D2F ¥á«¨ ¥áâì ¯à¨¬®­â¨à®¢ ­­ë©
                LD HL,(VIRT_DRIVE)              ; ¨«¨ ¯à®¢¥àª  ¤«ï à ¬¤¨áª 
                LD A,(MASK_WRK_DRV)
                CP L
                LD A,ROM_ADD_BAS48 | 0x80       ; áâà ­¨æ  ¤«ï 3D2F
                JR Z,EXIT_RST305
                LD A,ROM_BAS48 | 0x80           ; áâà ­¨æë ¤«ï 3D13
EXIT_RST305     LD HL,(WR_BF)
                LD BC,WIN_A0
EXIT_RST303     CALL WR_BYTE_RET
                LD A,L
                POP HL
                OUT (PEVO_CONF),A
                POP AF
                JP PO,EXIT_RST304
                EI
EXIT_RST304     POP BC
                POP AF
                EX (SP),HL
                RET

; § ¯¨áì "A" ¢ ¯®àâ 0x1F
W_OUT1F         LD A,(REG_A)
                LD (WR_1F),A
                AND %11110000
                RRCA
                RRCA
                RRCA
                ADD A,LOW (.TABL_CMD)
                LD L,A
                ADC A,HIGH (.TABL_CMD)
                SUB L
                LD H,A
                LD A,(HL)
                INC HL
                LD H,(HL)
                LD L,A
                JP (HL)

.TABL_CMD       DW .CMD_00
                DW .CMD_10
                DW .CMD_20
                DW .CMD_30
                DW .CMD_40
                DW .CMD_50
                DW .CMD_60
                DW .CMD_70
                DW .CMD_80
                DW .CMD_90
                DW .CMD_A0
                DW .CMD_B0
                DW .CMD_C0
                DW .CMD_D0
                DW .CMD_E0
                DW .CMD_F0

; 00-0F ª®¬ ­¤  ¢®ááâ ­®¢«¥­¨ï
.CMD_00         XOR A
                LD (PORT_3F),A
                LD (PORT_5F),A
                OUT (0x3F),A
                OUT (0x5F),A
                JR .INFF_BIT6

; 10-1F ª®¬ ­¤  ¯®¨áª 
.CMD_10         LD A,(PORT_7F)
                LD (PORT_3F),A 
                OUT (0x3F),A
                CALL DISK_NONE
                LD A,0x80
                JR C,.INFF_BIT61
.INFF_BIT6      XOR A
.INFF_BIT61     LD (RD_1F),A
                LD A,0xBF
                LD (RD_FF),A
                RET

; 20-3F ª®¬ ­¤  è £ ¢ ¯à¥¤ë¤ã饬 ­ ¯à ¢«¥­¨¨
.CMD_20
.CMD_30         LD A,(PORT_3F)
.NAPRAVL        NOP
                LD (PORT_3F),A
                OUT (0x3F),A
                JR .INFF_BIT6

; 40-5F ª®¬ ­¤  è £ ¢¯¥à¥¤
.CMD_40
.CMD_50         LD A,(PORT_3F)
                INC A
                LD (PORT_3F),A 
                OUT (0x3F),A
                LD A,0x3C                       ; INC A
                LD (.NAPRAVL),A
                JR .INFF_BIT6

; 60-7F ª®¬ ­¤  è £ ­ § ¤
.CMD_60
.CMD_70         LD A,(PORT_3F)
                DEC A
                LD (PORT_3F),A 
                OUT (0x3F),A
                LD A,0x3D                       ; DEC A
                LD (.NAPRAVL),A
;               JR .INFF_BIT6

; 80-9F ª®¬ ­¤  ç⥭¨¥ ᥪâ®à 
.CMD_80
.CMD_90
;               JR .INFF_BIT6

; A0-BF ª®¬ ­¤  § ¯¨áì ᥪâ®à 
.CMD_A0
.CMD_B0         JR .INFF_BIT6

.INFF_BIT7      XOR A
                LD (RD_1F),A
                LD A,0x7F
                LD (RD_FF),A
                RET

; C0-CF ç⥭¨¥  ¤à¥á 
.CMD_C0         JR .INFF_BIT6

; D0-DF ¯à¨­ã¤¨â¥«ì­®¥ ¯à¥à뢠­¨¥
.CMD_D0         LD A,0xBF
                LD (RD_FF),A
                RET

; E0-EF ç⥭¨¥ ¤®à®¦ª¨
.CMD_E0
.CMD_F0         JR .INFF_BIT6

; § ¯¨áì "A" ¢ ¯®àâ 0x3F
W_OUT3F         LD A,(REG_A)
                LD (PORT_3F),A
                OUT (0x3F),A
                RET

; § ¯¨áì "A" ¢ ¯®àâ 0x5F
W_OUT5F         LD A,(REG_A)
                LD (PORT_5F),A
                OUT (0x5F),A
                RET

; § ¯¨áì "A" ¢ ¯®àâ 0x7F
W_OUT7F         LD A,(REG_A)
                LD (PORT_7F),A
                OUT (0x7F),A
                RET

; § ¯¨áì "A" ¢ ¯®àâ 0xFF
W_OUTFF         LD A,(REG_A)
                LD (WR_FF),A
                OUT (0xFF),A
                AND 3
                LD (MASK_WRK_DRV),A             ; ­®¬¥à ¤¨áª®¢®¤ 
                INC A
                LD B,A
                LD A,%10000000
.L1             RLCA
                DJNZ .L1
                LD (MASK_MNT_DRV),A             ; ¬ áª  ᬮ­â¨à®¢ ­­®£® ¤¨áª®¢®¤ 
                RET

; § ¯¨áì "A" ¢ ¯®àâ (C)
W_OUTCA         LD A,(REG_A)
W_OUTCA1        LD D,A
                LD BC,(REG_C)                   ; ¥á«¨ ¯®àâ ­¥ TR-DOS
                LD A,C
; ®¯à¥¤¥«¥­¨¥ ¢ ª ª®© ¯®àâ § ¯¨áì
                CP 0x1F
                JP Z,W_OUT1F
                CP 0x3F
                JR Z,W_OUT3F
                CP 0x5F
                JR Z,W_OUT5F
                CP 0x7F
                JR Z,W_OUT7F
                CP 0xFF
                JR Z,W_OUTFF
                CP LOW (WIN_A0)
                JR Z,W_OUTCA3
W_OUTCA4        OUT (C),D
                RET

; § ¯¨áì ¢ ¯®àâë ATM/PENTEVO
W_OUTCA3        LD A,B
                LD HL,BB_CPU1
                CP HIGH (WIN_A1)
                JR Z,W_OUTCA2
                CP HIGH (WIN_P2)
                JR Z,W_OUTCA2
                LD HL,BB_CPU2
                CP HIGH (WIN_A2)
                JR Z,W_OUTCA2
                CP HIGH (WIN_P2)
                JR NZ,W_OUTCA4
W_OUTCA2        LD E,B
                PUSH DE
                PUSH HL
                CALL READ_WCPU12
                POP HL
                POP DE
                LD (HL),D
                INC HL
                LD (HL),E
                JP WRITE_WCPU12

; § ¯¨áì "D" ¢ ¯®àâ (C)
W_OUTCD         LD A,(IREG_D)
                JR W_OUTCA1

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

; ç⥭¨¥ ¯®àâ  0x1F
W_IN1F          LD A,(WR_1F)
                AND %11110000
                CP 0x10
                JR C,.L1
                CP 0x20
                JR C,.L3
                CP 0x80
                JR C,.L5
                CP 0xD0
                JR Z,.L1
                XOR A
                JR .L2

.L5             LD A,(PORT_3F)
                AND A
                JR NZ,.L1
                LD A,%00100100
                JR .L6

.L3             LD A,(.INDEX)
                XOR %00000100
                JR .L4

.L1             LD A,0x24
.INDEX          EQU $-1
.L4             XOR %00000010
.L6             LD (.INDEX),A
.L2             LD (RD_1F),A
                LD (REG_A),A
                RET

; ç⥭¨¥ ¯®àâ  0x3F
W_IN3F          LD A,(PORT_3F)
                LD (REG_A),A
                RET

; ç⥭¨¥ ¯®àâ  0x5F
W_IN5F          LD A,(PORT_5F)
                LD (REG_A),A
                RET

; ç⥭¨¥ ¯®àâ  0x7F
W_IN7F          LD A,(PORT_7F)
                LD (REG_A),A
                RET

; ç⥭¨¥ ¯®àâ  0xFF
W_INFF          LD A,(RD_FF)
                LD (REG_A),A
                RET

; ç⥭¨¥ ¢ "H" ¨§ (‘)
W_INHC          LD A,(REG_C)
; ®¯à¥¤¥«¥­¨¥ ¨§ ª ª®£® ¯®àâ  ç⥭¨¥
W_INHC1         CP 0x1F
                JR NZ,W_INHC2
                LD A,(RD_1F)
                LD (REG_H),A
                RET

W_INHC2         CP 0x3F
                JR NZ,W_INHC3
                LD A,(PORT_3F)
                LD (REG_H),A
                RET
       
W_INHC3         CP 0x5F
                JR NZ,W_INHC4
                LD A,(PORT_5F)
                LD (REG_H),A
                RET
       
W_INHC4         CP 0x7F
                JR NZ,W_INHC5
                LD A,(PORT_7F)
                LD (REG_H),A
                RET
       
W_INHC5         CP 0xFF
                JR NZ,W_INHC6
                LD A,(WR_FF)
                LD (REG_H),A
                RET

W_INHC6         LD BC,(REG_C)
                IN A,(C)
                LD (REG_H),A
                RET

; ç⥭¨¥ INI
W_INI           LD A,(RD_1F)
                LD HL,(REG_L)
                LD (HL),A
                INC HL
                DEC B
                LD (REG_L),HL
                RET

;[—’…ˆ… ‘…Š’Ž€ ˆ‹ˆ Ž’Ž‚]
READ_SEC_       LD A,(WR_1F)
                AND 0x0F0
                CP 0x80
                JP C,W_OUT1F.INFF_BIT6
                CP 0xC0
                JR NZ,READ_SEC_1
                LD A,(PORT_3F)
                LD HL,(REG_L)
                LD (HL),A
                INC HL
                DEC B
                LD A,(PORT_5F)
                LD (HL),A
                INC HL
                DEC B
                LD (REG_L),HL
                RET

; ç⥭¨¥/§ ¯¨áì ᥪâ®à 
; IXL = 0 - ç⥭¨¥, = FF - § ¯¨áì
READ_WRITE_SEC  PUSH IX
                JR WRITE_SEC_1

; ç⥭¨¥ ᥪâ®à 
READ_SEC_1      PUSH IX
                LD IXL,0
                JR WRITE_SEC_1

; § ¯¨áì ᥪâ®à 
WRITE_SEC_      PUSH IX
                LD IXL,0xFF
WRITE_SEC_1     CALL READ_WCPU12
                CALL W_WR_RD_SECT
                LD IX,0x8090
                LD (REG_F),IX                   ; í¬ã«ïæ¨ï ä« £  ãᯥ譮£® ç⥭¨ï/§ ¯¨á¨ ᥪâ®à 
                CALL WRITE_WCPU12
                POP IX
                RET

FIND_SECTOR     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,.L1
                INC C                           ; ¤«ï áâ®à®­ë 1
.L1             LD B,HIGH (CPU1) + 2            ;  ¤à¥á ­ ç «  ¨­äë ® ᥪâ®à å ­  ¤®à®¦ª¥
                LD A,(PORT_5F)                  ; ¢§ï«¨ ­®¬¥à ᥪâ®à 
                LD L,A
                LD H,0
.L3             LD A,(BC)
                LD D,A                          ; ¢§ï«¨ ­®¬¥à ᥪâ®à 
                INC B
                LD A,(BC)
                LD E,A                          ; ¢§ï«¨ à §¬¥à ᥪâ®à 
                INC B
                LD A,D
                AND A
                SCF
                RET Z
                LD A,L
                CP D
                RET Z
                LD A,E
                ADD A,H
                LD H,A
                JR .L3

; ç⥭¨¥ ¨«¨ § ¯¨áì ᥪâ®à  à ¬¤¨áª 
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,WR_RD_SEC_M               ; à ¡®â  á ¯à¨¬®­â¨à®¢ ­­ë¬ ®¡à §®¬
                CALL FIND_SECTOR
                JR NC,.L2
; ᥪâ®à ­¥ ­ ©¤¥­, ­  ¢ë室
                LD A,0x10                       ; ãáâ ­ ¢«¨¢ ¥¬ ®è¨¡ªã ‚ƒ ᥪâ®à ­¥ ­ ©¤¥­
                JP W_IN1F.L2                   

.L2             LD A,E
                RRCA
                LD (PORT_7F),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,.L5
                SUB 0x40
                LD H,A
                INC C
; HL = ᬥ饭¨¥ ¢ áâà ­¨æ¥ ¤® ­ ç «  ᥪâ®à 
.L5             LD A,C                          ; ᬥ饭¨¥ ¤® ­®¬¥à  áâà ­¨æë, £¤¥ 㪠§ ­­ë© ᥪâ®à ­ ç¨­ ¥âáï
                ADD A,RAM_DATARAMD              ; ¯à¨¡ ¢¨«¨ ­®¬¥à ­ ç «  à ¬¤¨áª ¨ +1. ¢ 0 áâà ­¨æ¥ à ¬¤¨áª  ®¯¨á â¥«¨ ᥪâ®à®¢
                LD IXH,A                        ; á®åà ­¨«¨ ­®¬¥à ¢ëç¨á«¥­­®© áâà ­¨æë
                LD DE,(REG_L)
                LD BC,(BB_CPU1)
                LD A,C
                LD C,LOW (WIN_A0)
                OUT (C),A                       ; ¢¥à­ã«¨ áâ ­¤ àâ­ãî 5 áâà ­¨æã
.S9             LD A,D                          ; ¯à®¢¥àª  £à ­¨æë ®âªã¤ /ªã¤  ª®¯¨à®¢ âì
                CP HIGH (CPU2)
                PUSH DE
                LD DE,CPU1+HIGH (WIN_P1)
                LD BC,WIN_A1                    ; ¥á«¨ ¢¥àå­¨¥ 32ª¡ ®§ã, â® ­ã¦­® ¢ª«îç¨âì ¢ 1 ®ª­¥ ¯à®¥æ¨à®¢ ­¨ï
                JR NC,.S1
                LD DE,CPU2+HIGH (WIN_P2)
                LD B,HIGH (WIN_A2)              ; ¥á«¨ ­¨¦­¨¥ 32ª¡ ®§ã, â® ­ã¦­® ¢ª«îç¨âì ¢® 2 ®ª­¥ ¯à®¥æ¨à®¢ ­¨ï
.S1             LD A,0x40
                OUT (C),A
                LD B,E
                LD A,IXH                        ; ­®¬¥à ¢ëç¨á«¥­­®© áâà ­¨æë ®§ã
                OUT (C),A                       ; ¢ª«î稫¨ ¢ëç¨á«¥­­ãî áâà ­¨æã
                LD B,D                          ; áâ à訩 ¡ ©â  ¤à¥á  ­ ç «  ¢ª«î祭­®© áâà ­¨æë
                POP DE
                LD A,B
                ADD A,H
                LD H,A
                LD A,IXL
                AND A
                JR NZ,.I1
                LD A,D
                INC A
                JR NZ,.I1
                LD A,E
                AND A
                JR Z,.I1
                NEG
                LD C,A
                LD B,0
                LDIR
                NEG
                LD C,A
.I2             EX DE,HL
                ADD HL,BC
                EX DE,HL
                ADD HL,BC
                LD A,(PORT_7F)
                JP .S8_

.I1             LD A,D
                CP HIGH (CPU1)
                JR NC,.I3
                LD A,(PORT_7F)
                AND A
                LD BC,0x80
                JR Z,.I2
                LD BC,0x100
                JR .I2

.I3             CP HIGH (CPU2)                  ; ¯à®¢¥àª  ¯¥à¥å®¤  £à ­¨æë áâà ­¨æ
                JP NC,.S3                       ; ¥á«¨ ¢ëè¥ â® áࠧ㠪®¯¨à㥬
                CP HIGH (CPU2)-1
                JP C,.S3                        ; ¥á«¨ ­¨¦¥ â ª ¦¥ áࠧ㠪®¯¨à㥬
                LD A,E
                AND A                           ; ¥á«¨ ᥪâ®à ¯®«­®áâìî 㪫 ¤ë¢¥âáï ¤® £à ­¨æë, â® áࠧ㠪®¯¨à㥬
                JR Z,.S3                        ; ¨­ ç¥ ¯à¨­ã¤¨â¥«ì­® ª®¯¨à㥬 ¢ ¤¢  ¯à¨¥¬ 
                LD A,IXL                        ; ç⥭¨¥ ¨«¨ § ¯¨áì?
                AND A
                LD A,E                          ; ¬« ¤è¨© ¡ ©â  ¤à¥á ¢ ¡«®ª¥
                JR Z,.S4
                EX DE,HL                        ; ¤«ï § ¯¨á¨ ¬¥­ï¥¬ ­ ¯à ¢«¥­¨¥
.S4             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,IXH
                OUT (C),A                       ; ¢ëç¨á«¥­­ãî áâà ­¨æã ¢ª«îç ¥¬ ¢ 1 ®ª­¥ ¯à®¥æ¨à®¢ ­¨ï
                LD A,IXL                        ; ç⥭¨¥ ¨«¨ § ¯¨áì
                AND A
                JR Z,.S5
                LD A,D                          ; ¤«ï § ¯¨á¨
                SUB 0x40                        ; ¨§¬¥­¨«¨  ¤à¥á ªã¤  ª®¯¨à®¢ âì ­  ¤à㣮¥ ®ª­® ¯à®¥æ¨à®¢ ­¨ï
                LD D,A
                JR .S6

.S5             LD A,H                          ; ¤«ï ç⥭¨ï  
                SUB 0x40                        ; ¨§¬¥­¨«¨  ¤à¥á ªã¤  ª®¯¨à®¢ âì ­  ¤à㣮¥ ®ª­® ¯à®¥æ¨à®¢ ­¨ï
                LD H,A
.S6             POP AF
                LD C,A                          ; ᪮«ìª® ®áâ «®áì ᪮¯¨à®¢ âì ¡ ©â
                LD B,0
                LDIR
                LD A,(PORT_7F)
                JR .S8_

.S3             LD A,IXL                        ; ç⥭¨¥ ¨«¨ § ¯¨áì
                AND A
                JR Z,.S7
                EX DE,HL                        ; ¤«ï § ¯¨á¨ ¬¥­ï¥¬ ­ ¯à ¢«¥­¨¥
.S7             LD A,(PORT_7F)
                AND A
                JR NZ,.S8
                CALL COPYHBLOCK                 ; ¤«ï ᥪâ®à  à §¬¥à®¬ 128 ¡ ©â ª®¯¨à㥬 ¯®«®¢¨­ã ¨ ¢ë室¨¬
.ECOPY_BLOCK    LD A,IXL
                AND A
                JR Z,.ECOPY_BLOCK1
                EX DE,HL
.ECOPY_BLOCK1   LD (REG_L),DE
                RET

.S8             CALL COPY_BLOCK                 ; ¤«ï ᥪâ®à  256 ¡ ©â ª®¯¨à㥬 ¢¥áì ¨ ¢ë室¨¬
.S8_            DEC A
                JR Z,.ECOPY_BLOCK
                LD (PORT_7F),A
                LD A,IXL
                AND A
                JR Z,.S0
                EX DE,HL
.S0             LD A,0x3F
                AND H
                LD H,A
                JP .S9

CP_TYPEDRIVE    PUSH BC
                PUSH HL
                LD H,VIRT_REAL_DRIVE
                CALL READCMOS
                POP HL
                AND 3
                LD B,A
                LD A,(TRD_5CF6)
                CP B
                POP BC
                RET

; ãáâ ­®¢ª  ¯¥à¥¬¥­­ëå ⥪ã饣® ¯à¨¢®¤ 
SET_DRIVENAME   LD H,VIRT_REAL_DRIVE
                CALL READCMOS
                RRCA
                RRCA
                AND 3
                LD (TRD_5D19),A
                LD (TRD_5CF6),A
                OR 0x3C
                LD (TRD_5D16),A
                RET

; ä®à¬ â¨à®¢ ­¨¥ ram ¤¨áª 
FORMAT_RAM      LD A,(TRD_5CF6)
                LD B,A
                INC B
                LD A,%00001000
                RLCA
                DJNZ $-1
                LD B,A
;               LD A,(COPY_VIRT_BITS)
                RST8D _MOUNTER,_GET_VIRT_BITS
                LD (COPY_VIRT_BITS),A
                AND B
                JR NZ,FORMAT_RAM3               ; ¥á«¨ ¡¨â=1 ä®à¬ â ¯à¨¬®­â¨à®¢ ­­®£® ®¡à § 
                CALL CP_TYPEDRIVE
                RET NZ                          ; ¢ë室 ¤«ï ä®à¬ â  ५쭮£® ¤¨áª 
                CALL CREATE_TRDTABL             ; ä®à¬ â à ¬¤¨áª 
                XOR A
                RET

FORMAT_RAM3     LD HL,TRD_5D25
                LD DE,TRD_5D26
                LD BC,0xFF
                LD (HL),B
                LDIR
                LD D,B
                LD E,B
                LD B,0x10
FORMAT_RAM1     PUSH BC
                PUSH DE
                LD B,1
                LD HL,TRD_5D25
                CALL COM_06
                POP DE
                POP BC
                INC E
                DJNZ FORMAT_RAM1
                XOR A
                RET

; ¯à®¢¥àª  ­ «¨ç¨ï ¬ àª¥à  à ¬¤¨áª 
CMP_RAM_DISK    CALL READ_WCPU12
                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_WCPU12
                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
                LD BC,WIN_A1
                LD A,0x7A
                OUT (C),A
                RET

; ¢®ááâ ­®¢«¥­¨¥ ª®­ä¨£ãà æ¨¨ ®ª®­ ¯à®¥æ¨à®¢ ­¨ï 1,2
WRITE_WCPU12    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_WCPU12     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,RST30_01
                LD E,A
                LD D,HIGH (WIN_P1)
                JR RST30_02

RST30_01        RLCA
                RLCA
                SLA L
                RRA
                SLA H
                RRA
                LD E,A
                LD D,HIGH (WIN_A1)
RST30_02        LD (BB_CPU1),DE
                INC B
                IN A,(C)
                CP 0xC0
                JR NC,RST30_03
                LD E,A
                LD D,HIGH (WIN_P2)
                JR RST30_04

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

DISK_NONE       PUSH HL
                PUSH BC
                CALL READ_WCPU12
                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_WCPU12
                POP AF
                POP BC
                POP HL
                RET