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