Rev 1041 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
| ?url?
; LAST UPDATE: 15.02.2023 savelij
; ((out&0ffff)==37f7)&&((val&0ff)==1)
; ((out&0ffff)==77f7)&&((val&0ff)==1)
; ((out&0ffff)==0b7f7)&&((val&0ff)==1)
; ((out&0ffff)==0f7f7)&&((val&0ff)==1)
; ((M(5CF4)==2)&&(M(5CF5)==1B))
; (((M(5CF4)==2)&&(M(5CF5)==1B))&&(SP<4000))
; ((OUT&0FFFF)==1F)|((OUT&0FFFF)==3F)|((OUT&0FFFF)==7F)
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
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
EI
RET
DUPL 0x006F - $,0
JP (HL)
JP_EMU 0x02BE ; OUT (0xFF), A
DUPL 0x0801 - $,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)
; ¢ë§ë¢ â®àë ¯¥à¥å¢ â
EMU_JUMP 0x02BE ; OUT (0xFF),A
JP OUT_FF
EMU_JUMP 0x1E3A ; OUT (0x3F),A
JP OUT_3F
EMU_JUMP 0x1FDD ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x1FF3 ; OUT (0xFF),A
JP OUT_FF
EMU_JUMP 0x2000 ; OUT (0x1F),A
JP OUT_1F
EMU_JUMP 0x2076 ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x2085 ; OUT (0x3F),A
JP OUT_3F
EMU_JUMP 0x208D ; OUT (0x5F),A
JP OUT_5F
EMU_JUMP 0x2093 ; OUT (0x1F),A
JP OUT_1F
EMU_JUMP 0x2099 ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x20B1 ; IN A,(0xFF)
JP IN_FF
EMU_JUMP 0x20B8 ; OUT (C),D
JP OUT_C_D
EMU_JUMP 0x2740 ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x2748 ; OUT (0x7F),A
JP OUT_7F
EMU_JUMP 0x2A53 ; OUT (C),A
JP OUT_C_A
EMU_JUMP 0x2A71 ; OUT (0xFF),A
JP OUT_FF
EMU_JUMP 0x2A77 ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x2AD9 ; OUT (0xFF),A
JP OUT_FF
EMU_JUMP 0x2B25 ; IN A,(0x5F)
JP IN_5F
DUPL 0x09FF - $,0
DW 0xFFFF
EMU_JUMP 0x2C07 ;IN A,(0x5F)
JP IN_5F
EMU_JUMP 0x2CD8 ; IN A,(0x5F)
JP IN_5F
EMU_JUMP 0x2D75 ; OUT (0x5F),A
JP OUT_5F
EMU_JUMP 0x2D80 ; OUT (0x1F),A
JP OUT_1F
EMU_JUMP 0x2D87 ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x2F0C ; OUT (0xFF),A
JP OUT_FF
EMU_JUMP 0x2F1D ; OUT (0x5F),A
JP OUT_5F
EMU_JUMP 0x2F28 ; OUT (0x1F),A
JP OUT_1F
EMU_JUMP 0x2F2F ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x2F3C ; OUT (0xFF),A
JP OUT_FF
EMU_JUMP 0x2F4D ; OUT (0xFF),A
JP OUT_FF
EMU_JUMP 0x2F50 ; OUT (0x7F),A
JP OUT_7F
EMU_JUMP 0x2F57 ; OUT (0x1F),A
JP OUT_1F
EMU_JUMP 0x2F59 ; IN A,(0xFF)
CALL IN_FF
LD HL,EXIT_0x2F59
LD (ADR_EXIT),HL
JP UPDATE_AF
EMU_JUMP 0x2FB1 ; OUT (0xFF),A
JP OUT_FF
EMU_JUMP 0x2FC3 ; OUT (0x1F),A
JP OUT_1F
EMU_JUMP 0x3C30 ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x3D4D ; OUT (0xFF),A
JP OUT_FF
EMU_JUMP 0x3D9A ; OUT (0x1F),A
JP OUT_1F
EMU_JUMP 0x3DA6 ; IN A,(0xFF)
JP IN_FF
EMU_JUMP 0x3DB5 ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x3DBA ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x3DD5 ; OUT (0xFF),A
JP OUT_FF
EMU_JUMP 0x3E30 ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x3E3A ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x3E44 ; OUT (0x7F),A
JP OUT_7F
EMU_JUMP 0x3E4C ; OUT (0x7F),A
JP OUT_7F
EMU_JUMP 0x3E50 ; IN A,(0x3F)
JP IN_3F
EMU_JUMP 0x3E78 ; IN A,(0x3F)
JP IN_3F
EMU_JUMP 0x3E7E ; OUT (0x3F),A
JP OUT_3F
EMU_JUMP 0x3E87 ; IN A,(0x3F)
JP IN_3F
EMU_JUMP 0x3E95 ; OUT (0x3F),A
JP OUT_3F
EMU_JUMP 0x3EB5 ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x3EBC ; IN A,(0x3F)
JP IN_3F
EMU_JUMP 0x3EC9 ; OUT (0x1F),A
JP OUT_1F
EMU_JUMP 0x3ECE ; IN A,(0xFF)
JP IN_FF
EMU_JUMP 0x3EDF ; OUT (0x1F),A
JP OUT_1F
EMU_JUMP 0x3EF3 ; IN H,(C)
JP IN_H_C
EMU_JUMP 0x3EF5 ; IN A,(0xFF)
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
EMU_JUMP 0x3EFE ; IN A,(0x7F)
CALL OUT_1F.INFF_BIT6
JP IN_7F
EMU_JUMP 0x3F1B ; OUT (0x5F),A
JP OUT_5F
EMU_JUMP 0x3F25 ; OUT (0x1F),A
JP OUT_1F
EMU_JUMP 0x3F33 ; IN A,(0x1F)
JP IN_1F
EMU_JUMP 0x3F4D ; OUT (0x1F),A
JP OUT_1F
EMU_JUMP 0x3F55 ; IN A,(0x3F)
JP IN_3F
EMU_JUMP 0x3F5A ; IN A,(0x5F)
JP IN_5F
EMU_JUMP 0x3F69 ; IN A,(0x3F)
JP IN_3F
EMU_JUMP 0x3F72 ; IN A,(0x5F)
JP IN_5F
EMU_JUMP 0x3FBC ; IN A,(0xFF) ; § ¯¨áì ᥪâ®à
JP WRITE_SECTOR
EMU_JUMP 0x3FCA ; IN A,(0xFF) ; § ¯¨áì ᥪâ®à
JP WRITE_SECTOR
EMU_JUMP 0x3FD1 ; OUTI ; § ¯¨áì ᥪâ®à
JP WRITE_SECTOR
EMU_JUMP 0x3FD7 ; IN A,(0xFF) ; ç⥨¥ ᥪâ®à
JP READ_SECTOR
; EMU_JUMP 0x3FD7 ; ®¦¨¤ ¨¥ £®â®¢®á⨠ç⥨ï
; JP WAIT_READ
EMU_JUMP 0x3FE5 ; IN A,(0xFF) ; ç⥨¥ ᥪâ®à
JP READ_SECTOR
EMU_JUMP 0x3FEC ; INI ; ç⥨¥ ᥪâ®à
JP IN_INI
EMU_JUMP 0x3FF0 ; OUT (C),A
LD BC,(OLD_BC)
LD A,(OLD_AF+1)
LD D,A
JP WR_C_D
EMU_JUMP 0x3FF3 ; IN A,(C)
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 DI
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
JR Z,.L1
; ª®¯¨à㥬 ᥪâ®à ª®â®àë© ¡ã¤¥¬ § ¯¨áë¢ âì ᬮâ¨à®¢ ë© ®¡à §
LD HL,(OLD_HL)
LD DE,MNT_SECTOR
CALL COPY_BLOCK
LD (OLD_HL),HL
; ¯¥à¥ª«îç ¥¬ ¯ £¨ ¤«ï à ¡®âë á ¬ ã⮬
.L1 PUSH AF
LD BC,WIN_A1
LD A,0x40
OUT (C),A
LD B,HIGH (WIN_P1)
LD A,RAM_EVODOS
OUT (C),A
POP AF
; ¯¥à¥áâ ¢«ï¥¬ á⥪
LD HL,0x4000
ADD HL,SP
LD SP,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,MNT_SECTOR + 0x4000
RST8 _MOUNTER,_RDWR_MOUNT
JP 0x3D2F
DEPHASE
RET_MNT_RW
LD HL,-0x4000
ADD HL,SP
LD SP,HL
CALL WRITE_CPU12
LD HL,(OLD_IF)
PUSH HL
POP AF
JP PO,.DI_MODE ; ¯à¥àë¢ ¨ï à §à¥è¥ë?
CP 0x3F
JR Z,.DI_MODE
EI
.DI_MODE POP AF
RET NZ
LD HL,MNT_SECTOR
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 LOW (-$),0
MNT_SECTOR
; ¤à¥á ¯¥à¥å¢ â
JP_EMU 0x1E3A ; OUT (0x3F), A
JP_EMU 0x1FDD ; IN A, (0x1F)
JP_EMU 0x1FF3 ; OUT (0xFF), A
JP_EMU 0x2000 ; OUT (0x1F), A
JP_EMU 0x2076 ; IN A, (0x1F)
JP_EMU 0x2085 ; OUT (0x3F), A
JP_EMU 0x208D ; OUT (0x5F), A
JP_EMU 0x2093 ; OUT (0x1F), A
JP_EMU 0x2099 ; IN A, (0x1F)
JP_EMU 0x20B1 ; IN A, (0xFF)
JP_EMU 0x20B8 ; OUT (C), D
JP_EMU 0x2740 ; IN A, (0x1F)
JP_EMU 0x2748 ; OUT (0x7F), A
JP_EMU 0x2A53 ; OUT (C), A
; ¯¥à¢ ï ª®¬ ¤ ¢ ®¡à ¡®â稪¥ MAGIC ¤«ï ¢®§¢à â ¢ ¯ £ã FE
; JP_EMU 0x2A71 ; OUT (0xFF), A
DUPL 0x2A71 - $,0
OUT (EXIT_PORT),A
JP INT_RET ; ¢®§¢à 饨¥ ¨§ ®¡à ¡®â稪 INT
; JP_EMU 0x2A77 ; IN A, (0x1F)
DUPL 0x2A77 - $,0
OUT (EXIT_PORT),A
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
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
JR .INFF_BIT6
; 10-1F ª®¬ ¤ ¯®¨áª
.CMD_10 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
; 20-3F ª®¬ ¤ è £ ¢ ¯à¥¤ë¤ã饬 ¯à ¢«¥¨¨
.CMD_20
.CMD_30 LD A,(PORT_3F)
.NAPRAVL INC A
LD (PORT_3F),A
JR .INFF_BIT6
; 40-5F ª®¬ ¤ è £ ¢¯¥à¥¤
.CMD_40
.CMD_50 LD A,(PORT_3F)
INC A
LD (PORT_3F),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
LD A,0x3D ; DEC A
LD (.NAPRAVL),A
; 80-9F ª®¬ ¤ ç⥨¥ ᥪâ®à
.CMD_80
.CMD_90
; A0-BF ª®¬ ¤ § ¯¨áì ᥪâ®à
.CMD_A0
.CMD_B0
; 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
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 %11110000
CP 0x10
JR C,.L1 ; 00-0F ª®¬ ¤ë ¢®ááâ ®¢«¥¨ï
CP 0x20
JR C,.L3 ; 10-1F ª®¬ ¤ë ¯®¨áª
CP 0x80
JR C,.L5 ; 20-7F ª®¬ ¤ë è £ ¨ï £®«®¢ª¨
CP 0xC0
JR C,.L8 ; 80-BF ª®¬ ¤ë ç⥨ï/§ ¯¨á¨
CP 0xD0
JR Z,.L7 ; D0-DF ª®¬ ¤ë ¯à¨ã¤¨â¥«ì®£® ¯à¥àë¢ ¨ï
XOR A
JR .L2
; ¯à®¢¥àª ¢ë室 § 80 ¤®à®¦ªã
.L8 LD A,(PORT_3F)
CP 80
LD A,0
JR C,.L2
LD A,%00010000 ; ¯à¨ ã室¥ § 80 ¤®à®¦ªã ¢ë¤ ç ®è¨¡ª¨ "¬ áᨢ ¥ ©¤¥"
JR .L2
.L7 LD A,0x80
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,%00100100
.INDEX EQU $-1
.L4 XOR %00000010
.L6 LD (.INDEX),A
.L2 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,.L2
LD A,(RD_1F)
LD (OLD_HL + 1),A
RET
.L2 CP 0x3F
JR NZ,.L3
LD A,(PORT_3F)
LD (OLD_HL + 1),A
RET
.L3 CP 0x5F
JR NZ,.L4
LD A,(PORT_5F)
LD (OLD_HL + 1),A
RET
.L4 CP 0x7F
JR NZ,.L5
LD A,(PORT_7F)
LD (OLD_HL+1),A
RET
.L5 CP 0xFF
JR NZ,.L6
LD A,(RD_FF)
LD (OLD_HL + 1),A
RET
.L6 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
; ¢à¥¬¥®, ¤«ï àë«
; LD A,0xD3
; LD (0x3FD7),A
; ¢à¥¬¥®, ¤«ï àë«
.L1 LD HL,0x2A53
LD (ADR_EXIT),HL
JP OUT_1F.INFF_BIT6
WAIT_READ LD A,(WR_1F)
AND 0xF0
CP 0x80
JP C,OUT_1F.INFF_BIT6
CP 0xC0
JR NC,READ_SECTOR.L1
CALL READ_CPU12 ; á®åà ¥¨¥ ⥪ã饩 ª®ä¨£ãà 樨 ®ª® ¯à®¥æ¨à®¢ ¨ï 1,2
CALL FIND_SECTOR ; ¯à®¢¥à塞 «¨ç¨¥ ᥪâ®à
PUSH AF
CALL WRITE_CPU12 ; ¢®ááâ ®¢«¥¨¥ ª®ä¨£ãà 樨 ®ª® ¯à®¥æ¨à®¢ ¨ï 1,2
POP AF
JR NC,READ_SECTOR_1
; ᥪâ®à ¥â, ¥ ¤®¦¤¥â¥áì
LD A,0x3C
JP OUT_1F.INFF_BIT6_1
; ç⥨¥ ᥪâ®à ¨«¨ ¯®à⮢
READ_SECTOR LD A,(WR_1F)
AND 0xF0
CP 0x80
JP C,OUT_1F.INFF_BIT6
CP 0xC0
JR C,READ_SECTOR_1
.L1 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 A,(PORT_3F) ; ¢§ï«¨ ®¬¥à â४
ADD A,A ; áâ®à® 2
LD C,A
LD A,(WR_FF)
AND 0x10 ; ¯à®¢¥àª ª ª ï áâ®à® ¤¨áª
JR NZ,.L2
INC C ; ¤«ï áâ®à®ë 1
.L2 LD B,HIGH (CPU1) + 2 ; ¤à¥á ç « ¨äë ® ᥪâ®à å ¤®à®¦ª¥
LD A,0 ; ⥪ã騩 ®¬¥à ᥪâ®à
.CURR_SEC EQU $-1
INC A
AND %00001111
LD (.CURR_SEC),A
ADD A,A
ADD A,HIGH (CPU1) + 2
LD B,A
LD A,(PORT_3F) ; ®¬¥à ¤®à®¦ª¨
LD C,A
LD A,(BC) ; ¯à®¨çâ «¨ ®¬¥à ᥪâ®à
PUSH AF
CALL WRITE_CPU12 ; ¢®ááâ ®¢«¥¨¥ ª®äë
LD A,(PORT_3F)
LD HL,(OLD_HL)
LD (HL),A ; ®¬¥à ¤®à®¦ª¨
INC HL
LD (HL),0 ; ®¬¥à áâ®à®ë
INC HL
POP AF
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 OUT_1F.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
; ¯®¨áª ᥪâ®à ¢ â ¡«¨æ¥
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,.L2
INC C ; ¤«ï áâ®à®ë 1
.L2 LD B,HIGH (CPU1) + 2 ; ¤à¥á ç « ¨äë ® ᥪâ®à å ¤®à®¦ª¥
LD HL,(PORT_5F) ; ¢§ï«¨ ®¬¥à ᥪâ®à
LD H,0
.L1 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 .L1
; ç⥨¥ ¨«¨ § ¯¨áì ᥪâ®à à ¬¤¨áª
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 ; à ¡®â á ¯à¨¬®â¨à®¢ ë¬ ®¡à §®¬
CALL FIND_SECTOR
JR NC,.L2
; ᥪâ®à ¥ ©¤¥, ¢ë室
LD A,0x10
JP IN_1F.L2
; ᥪâ®à ©¤¥, ç¨â ¥¬/¯¨è¥¬
.L2 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,.L5
SUB 0x40
LD H,A
INC C
; HL = ᬥ饨¥ ¢ áâà ¨æ¥ ¤® ç « ᥪâ®à
.L5 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 áâà ¨æã
.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,(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,.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,(SECTOR_SIZE)
JP .S8_
.I1 LD A,D
CP HIGH (CPU1)
JR NC,.I3
LD A,(SECTOR_SIZE)
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,(RDWR_MODE) ; ç⥨¥ ¨«¨ § ¯¨áì?
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,(RDWR_PAGE)
OUT (C),A ; ¢ëç¨á«¥ãî áâà ¨æã ¢ª«îç ¥¬ ¢ 1 ®ª¥ ¯à®¥æ¨à®¢ ¨ï
LD A,(RDWR_MODE) ; ç⥨¥ ¨«¨ § ¯¨áì
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,(SECTOR_SIZE)
JR .S8_
.S3 LD A,(RDWR_MODE) ; ç⥨¥ ¨«¨ § ¯¨áì
AND A
JR Z,.S7
EX DE,HL ; ¤«ï § ¯¨á¨ ¬¥ï¥¬ ¯à ¢«¥¨¥
.S7 LD A,(SECTOR_SIZE)
AND A
JR NZ,.S8
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
.S8 CALL COPY_BLOCK ; ¤«ï ᥪâ®à 256 ¡ ©â ª®¯¨à㥬 ¢¥áì ¨ ¢ë室¨¬
.S8_ DEC A
JR Z,.ECOPY_BLOCK
LD (SECTOR_SIZE),A
LD A,(RDWR_MODE)
AND A
JR Z,.S0
EX DE,HL
.S0 LD A,0x3F
AND H
LD H,A
JP .S9
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 + 0x08E1
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,.L1
LD E,A
LD D,HIGH (WIN_P1)
JR .L2
.L1 RLCA
RLCA
SLA L
RRA
SLA H
RRA
LD E,A
LD D,HIGH (WIN_A1)
.L2 LD (BB_CPU1),DE
INC B
IN A,(C)
CP 0xC0
JR NC,.L3
LD E,A
LD D,HIGH (WIN_P2)
JR .L4
.L3 RLCA
RLCA
SLA L
RRA
SLA H
RRA
LD E,A
LD D,HIGH (WIN_A2)
.L4 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
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
JP ADR_0x3E4C ; ¤«ï ¤à¥á 0x3E4C
; JP_EMU 0x3E4C ; OUT (0x7F), A
DUPL 0x3E4C - $,0
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 ; 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) ;ç⥨¥ ᥪâ®à
; JP_EMU 0x3FEC ; INI ;ç⥨¥ ᥪâ®à
DUPL 0x3FEC - $,0
OUT (EXIT_PORT),A
JR JUMP_0x3FEC
; DUPL 0x3FF0 - $,0 ; OUT (C), A
OUT (EXIT_PORT),A
DB 0x18 ; JR 0x3FC7
; DUPL 0x3FF5 - $,0 ; IN A, (C)
OUT (EXIT_PORT),A
JP JUMP_0x3FF3
DUPL 0x3FF8 - $,0
DB "EVOSFE"
DW DATA_VERS