Top secrets sources NedoPC pentevo

Rev

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


;LAST UPDATE: 04.08.2019 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                       ;„‹Ÿ ‚…Š’Ž€ …›‚€ˆ‰ IM2 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                      ;00 ‡€ˆ‘œ Ž’€ 1F
                DW W_OUT3F                      ;01 ‡€ˆ‘œ Ž’€ 3F
                DW W_OUT5F                      ;02 ‡€ˆ‘œ Ž’€ 5F
                DW W_OUT7F                      ;03 ‡€ˆ‘œ Ž’€ 7F
                DW W_OUTFF                      ;04 ‡€ˆ‘œ Ž’€ FF
                DW W_OUTI                       ;05 OUTI
                DW W_IN1F                       ;06 —’…ˆ… Ž’€ 1F
                DW W_IN3F                       ;07 —’…ˆ… Ž’€ 3F
                DW W_IN5F                       ;08 —’…ˆ… Ž’€ 5F
                DW W_IN7F                       ;09 —’…ˆ… Ž’€ 7F
                DW W_INFF                       ;0A —’…ˆ… Ž’€ FF
                DW W_INI                        ;0B INI
                DW W_OUTCD                      ;0C ‡€ˆ‘œ …ƒˆ‘’€ 'D' ‚ Ž’ 'BC'
                DW W_INHC                       ;0D —’…ˆ… ‚ …ƒˆ‘’ 'H' ˆ‡ Ž’€ 'BC'
                DW READ_WRITE_SEC               ;0E —’…ˆ…/‡€ˆ‘œ ‘…Š’Ž€
                DW CMP_RAM_DISK                 ;12 Ž‚…Š€ RAM „ˆ‘Š€
;               DW SET_VIRT_BITS                ;13 “‘’€Ž‚Š€ ……Œ…Ž‰ ‘—ˆ’€Ž‰ ˆ‡ RST 8
EW_DATA
;[…‡ ‚Ž‡‚€’€ ‚ Œ…‘’Ž ‚›‡Ž‚€]
                DW W_OUTCA                      ;13 ‡€ˆ‘œ …ƒˆ‘’€ 'A' ‚ Ž’ 'BC'
                DW WRITE_SEC_                   ;14 ‡€ˆ‘œ ‘…Š’Ž€ …‡ ‚Ž‡‚€’€ ‚ €„…‘ ‚›‡Ž‚€
                DW READ_SEC_                    ;15 —’…ˆ… ‘…Š’Ž€ …‡ ‚Ž‡‚€’€ ‚ €„…‘ ‚›‡Ž‚€
                DW W_INI                        ;16 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
                CP 0X10
                JR NC,W_OUT1F10
;00-0F ŠŽŒ€„€ ‚Ž‘‘’€Ž‚‹…ˆŸ
                XOR A
                LD (PORT_3F),A
                LD (PORT_5F),A
                OUT (0X3F),A
                OUT (0X5F),A
                JR INFF_BIT6

W_OUT1F10       CP 0X20
                JR NC,W_OUT1F20
;10-1F ŠŽŒ€„€ Žˆ‘Š€
                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

W_OUT1F20       CP 0X40
                JR NC,W_OUT1F40
;20-3F ŠŽŒ€„€ ˜€ƒ ‚ …„›„“™…Œ €€‚‹…ˆˆ
                LD A,(PORT_3F)
NAPRAVL         NOP
                LD (PORT_3F),A
                OUT (0X3F),A
                JR INFF_BIT6

W_OUT1F40       CP 0X60
                JR NC,W_OUT1F60
;40-5F ŠŽŒ€„€ ˜€ƒ ‚……„
                LD A,(PORT_3F)
                INC A
                LD (PORT_3F),A 
                OUT (0X3F),A
                LD A,0X3C
                LD (NAPRAVL),A
                JR INFF_BIT6

W_OUT1F60       CP 0X80
                JR NC,W_OUT1F80
;60-7F ŠŽŒ€„€ ˜€ƒ €‡€„
                LD A,(PORT_3F)
                DEC A
                LD (PORT_3F),A 
                OUT (0X3F),A
                LD A,0X3D
                LD (NAPRAVL),A
                JR INFF_BIT6

W_OUT1F80       CP 0XA0
                JR NC,W_OUT1FA0
;80-9F ŠŽŒ€„€ —’…ˆ… ‘…Š’Ž€
                JR INFF_BIT6

W_OUT1FA0       CP 0XC0
                JR NC,W_OUT1FD0
;A0-BF ŠŽŒ€„€ ‡€ˆ‘œ ‘…Š’Ž€
                JR INFF_BIT6

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

W_OUT1FD0       CP 0XD0
                JR NC,W_OUT1FE0
;C0-CF —’…ˆ… €„…‘€
                JR INFF_BIT6

W_OUT1FE0       CP 0XE0
                JR NC,W_OUT1FF0
;D0-DF ˆ“„ˆ’…‹œŽ… …›‚€ˆ…
                LD A,0XBF
                LD (RD_FF),A
                RET

W_OUT1FF0       CP 0XF0
                JR C,INFF_BIT6
;E0-EF —’…ˆ… „ŽŽ†Šˆ
                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,%00001000
                LD A,%10001000
.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 0XF0
                CP 0X10
                JR C,W_IN1F1
                CP 0X20
                JR C,W_IN1F3
                CP 0XD0
                JR Z,W_IN1F1
                XOR A
                JR W_IN1F2

W_IN1F3         LD A,(INDEX)
                XOR %00000100
                JR W_IN1F4

W_IN1F1         LD A,0X24
INDEX           EQU $-1
W_IN1F4         XOR %00000010
                LD (INDEX),A
W_IN1F2         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,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

;[—’…ˆ… ˆ‹ˆ ‡€ˆ‘œ ‘…Š’Ž€ €Œ„ˆ‘Š€]
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)
;               REPT 5
;               RRCA
;               ENDM
;               DJNZ $-1
                AND B
                JP NZ,WR_RD_SEC_M               ;€Ž’€ ‘ ˆŒŽ’ˆŽ‚€›Œ Ž€‡ŽŒ
                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 (PORT_7F),A 
                OUT (0X7F),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 IXH,A                        ;‘Ž•€ˆ‹ˆ ŽŒ… ‚›—ˆ‘‹…Ž‰ ‘’€ˆ–›
                LD DE,(REG_L)
                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,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,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,(PORT_7F)
                JP SP_RAMD8_

IN_ROM1         LD A,D
                CP HIGH (CPU1)
                JR NC,IN_ROM3
                LD A,(PORT_7F)
                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,IXL                        ;—’…ˆ… ˆ‹ˆ ‡€ˆ‘œ?
                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,IXH
                OUT (C),A                       ;‚›—ˆ‘‹…“ž ‘’€ˆ–“ ‚Š‹ž—€…Œ ‚ 1 ŽŠ… Ž…–ˆŽ‚€ˆŸ
                LD A,IXL                        ;—’…ˆ… ˆ‹ˆ ‡€ˆ‘œ
                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,(PORT_7F)
                JR SP_RAMD8_

SP_RAMD3        LD A,IXL                        ;—’…ˆ… ˆ‹ˆ ‡€ˆ‘œ
                AND A
                JR Z,SP_RAMD7
                EX DE,HL                        ;„‹Ÿ ‡€ˆ‘ˆ Œ…Ÿ…Œ €€‚‹…ˆ…
SP_RAMD7        LD A,(PORT_7F)
                AND A
                JR NZ,SP_RAMD8
                CALL COPYHBLOCK                 ;„‹Ÿ ‘…Š’Ž€ €‡Œ…ŽŒ 128 €‰’ ŠŽˆ“…Œ Ž‹Ž‚ˆ“ ˆ ‚›•Ž„ˆŒ
ECOPY_BLOCK     LD A,IXL
                AND A
                JR Z,ECOPY_BLOCK1
                EX DE,HL
ECOPY_BLOCK1    LD (REG_L),DE
                RET

SP_RAMD8        CALL COPY_BLOCK                 ;„‹Ÿ ‘…Š’Ž€ 256 €‰’ ŠŽˆ“…Œ ‚…‘œ ˆ ‚›•Ž„ˆŒ
SP_RAMD8_       DEC A
                JR Z,ECOPY_BLOCK
                LD (PORT_7F),A
                OUT (0X7F),A
                LD A,IXL
                AND A
                JR Z,SP_RAMD0
                EX DE,HL
SP_RAMD0        LD A,0X3F
                AND H
                LD H,A
                JP SP_RAMD9

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

;SET_RWPORT0    RST8D _MOUNTER,_MOUNT_RAMDISK
;               RST30 _SET_VIRT_BITS
;               RET

;SET_VIRT_BITS  LD A,(REG_A)
;       REPT 4
;               RRCA
;       ENDM
;               LD (COPY_VIRT_BITS),A
;               LD C,A
;               AND 3
;               LD (VIRT_DRIVE),A
;               LD A,C
;               RRCA
;               RRCA
;               AND 3
;               LD (REAL_DRIVE),A
;               RET