 194e7a1fca
			
		
	
	
		194e7a1fca
		
	
	
	
	
		
			
			- поправлен cdx.txt - добалена возможность послать ATAPI пакет. - если нет диска в приводе, то не пишет ошибку, что нет привода
		
			
				
	
	
		
			1225 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1225 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| ; LAST UPDATE: 29.06.2025 savelij
 | |
| 
 | |
| PAGE0	EQU	0x82	;WIN 0x0000-0x3FFF
 | |
| PAGE1	EQU	0xA2	;WIN 0x4000-0x7FFF
 | |
| PAGE2	EQU	0xC2	;WIN 0x8000-0xBFFF
 | |
| PAGE3	EQU	0xE2	;WIN 0xC000-0xFFFF
 | |
| 
 | |
| ADRDIR	EQU	0xC000
 | |
| 
 | |
| DIRPAGE	EQU	0
 | |
| 
 | |
| DAY	EQU	19
 | |
| MONTH	EQU	05
 | |
| YEAR	EQU	2002
 | |
| 
 | |
| NAM	EQU	0
 | |
| EXT	EQU	8
 | |
| ATR	EQU	11
 | |
| 
 | |
| CLU3	EQU	20
 | |
| CLU4	EQU	21
 | |
| 
 | |
| TIM1	EQU	22
 | |
| TIM2	EQU	23
 | |
| DAT1	EQU	24
 | |
| DAT2	EQU	25
 | |
| CLU1	EQU	26
 | |
| CLU2	EQU	27
 | |
| LEN1	EQU	28
 | |
| LEN2	EQU	29
 | |
| LEN3	EQU	30
 | |
| LEN4	EQU	31
 | |
| POS1	EQU	32
 | |
| POS2	EQU	33
 | |
| POS3	EQU	34
 | |
| POS4	EQU	35
 | |
| DIRCLU1	EQU	36
 | |
| DIRCLU2	EQU	37
 | |
| HND1	EQU	38
 | |
| HND2	EQU	39
 | |
| FDRV	EQU	40
 | |
| AMODE	EQU	41
 | |
| FTASK	EQU	42
 | |
| 
 | |
| ;ACCESS	MODE:
 | |
| ;	00 - READ/WRITE
 | |
| ;	01 - READ
 | |
| ;	02 - WRITE
 | |
| 
 | |
| ;File Manipulator (FM)
 | |
| FM_BUF	DB	".       "	;+00 NAME
 | |
| 	DB	"   "		;+08 EXT
 | |
| 	DB	0x10		;+11 ATTRIBUT
 | |
| 	DB	0,0,0,0,0,0,0,0,0,0 ;+12 RESERVED
 | |
| 	DW	0x0000		;+22 TIME
 | |
| 	DW	0x0000		;+24 DATE
 | |
| 	DW	0x0000		;+26 START CLUSTER
 | |
| 	DW	0x0000,0x0000	;+28 SIZE FILE
 | |
| 	DW	0x0000,0x0000	;+32 FILE POSITION (FP)
 | |
| 	DW	0x0000		;+36 DIRECTORY CLUSTER
 | |
| 	DW	0x0000		;+38 HANDLE NUMBER
 | |
| 	DB	0x00		;+40 DRIVE OR CURRENT
 | |
| 	DB	0x00		;+41 ACCESS MODE
 | |
| 	DB	0x00		;+42 TASK
 | |
| 	DB	0x00		;+43 EMPTY
 | |
| END_FM
 | |
| ;End of	FM
 | |
| ;	DS	44*2
 | |
| 
 | |
| FM_SIZE	EQU	END_FM-FM_BUF
 | |
| 
 | |
| SET_FM	PUSH	DE
 | |
| 	INC	A
 | |
| 	LD	IY,FM_BUF-FM_SIZE
 | |
| 	LD	DE,FM_SIZE
 | |
| SET_FM1	ADD	IY,DE
 | |
| 	DEC	A
 | |
| 	JR	NZ,SET_FM1
 | |
| 	POP	DE
 | |
| 	LD	A,(IY+0)
 | |
| 	OR	A
 | |
| 	LD	A,0
 | |
| 	RET	NZ
 | |
| 	LD	A,5
 | |
| 	SCF 
 | |
| 	RET 
 | |
| 
 | |
| ; HL:IX	- OFFSET POINTER
 | |
| ;     A	- FILE MANIPULATOR
 | |
| 
 | |
| MOVE_FP	CALL	SET_FM
 | |
| 	RET	C
 | |
| 	INC	B
 | |
| 	DEC	B
 | |
| 	JP	Z,MOVE_FA
 | |
| 	DEC	B
 | |
| 	JP	Z,MOVE_FB
 | |
| 	DEC	B
 | |
| 	JP	Z,MOVE_FC
 | |
| 	LD	A,1
 | |
| 	SCF 
 | |
| 	RET 
 | |
| 
 | |
| ;from Start File
 | |
| MOVE_FA	LD	BC,0
 | |
| 	LD	DE,0
 | |
| 	JR	MOVE_F1
 | |
| 
 | |
| ;from End File
 | |
| MOVE_FC	LD	C,(IY+28)
 | |
| 	LD	B,(IY+29)
 | |
| 	LD	E,(IY+30)
 | |
| 	LD	D,(IY+31)
 | |
| 	JR	MOVE_F1
 | |
| 
 | |
| ;from Current Position
 | |
| MOVE_FB	LD	C,(IY+32)
 | |
| 	LD	B,(IY+33)
 | |
| 	LD	E,(IY+34)
 | |
| 	LD	D,(IY+35)
 | |
| MOVE_F1	ADD	IX,BC
 | |
| 	ADC	HL,DE
 | |
| 	LD	D,IXH
 | |
| 	LD	E,IXL
 | |
| 	LD	(IY+32),E
 | |
| 	LD	(IY+33),D
 | |
| 	LD	(IY+34),L
 | |
| 	LD	(IY+35),H
 | |
| 	XOR	A
 | |
| 	RET 
 | |
| 
 | |
| ;FP COMPARE
 | |
| ; CY - FILE POINTER > SIZE
 | |
| ; NC - FILE POINTER < SIZE
 | |
| 
 | |
| MOVE_CP	LD	L,(IY+28)
 | |
| 	LD	H,(IY+29)
 | |
| 	LD	E,(IY+32)
 | |
| 	LD	D,(IY+33)
 | |
| 	AND	A
 | |
| 	SBC	HL,DE
 | |
| 	LD	L,(IY+30)
 | |
| 	LD	H,(IY+31)
 | |
| 	LD	E,(IY+34)
 | |
| 	LD	D,(IY+35)
 | |
| 	SBC	HL,DE
 | |
| 	RET 
 | |
| 
 | |
| CHANGEDISK:	LD	A,(CDDRIVE)
 | |
| ;		LD	C,BIOS.DRV_RESET
 | |
| ;		RST	ToBIOS
 | |
| 	SPBIOS BIOSF.DRV_RESET
 | |
| 		JR	NC,.cont
 | |
| 		;
 | |
| 		CP	ERR_DRV.ATAPI_UnitAttention;BIOS.Error.ATAPI.UnitAttention
 | |
| 		JR	Z,.drv_change
 | |
| 		;
 | |
| 		CP	ERR_DRV.ATAPI_NotReady;BIOS.Error.ATAPI.NotReady
 | |
| 		SCF 
 | |
| 		RET	NZ
 | |
| 		LD	A,ERR_DSS.NOT_READY;DSS_Error.sys.NOT_READY
 | |
| 		RET 		
 | |
| 		;
 | |
| .drv_change:	LD	A,(CDDRIVE)
 | |
| 		CALL	SAVE_MEDIA_CHANGED
 | |
| 		;
 | |
| .cont:		CALL	INITDISK
 | |
| 		RET	C
 | |
| 		AND	A
 | |
| 		RET 
 | |
| 
 | |
| ; NDISK11	CP	BIOS.Error.ATAPI.NotReady
 | |
| ; 	SCF 
 | |
| ; 	RET	NZ
 | |
| ; 	;
 | |
| ; 	LD	A,DSS_Error.sys.NOT_READY
 | |
| ; 	RET 
 | |
| 
 | |
| INITDISK:
 | |
| 	LD	A,DIRPAGE
 | |
| 	CALL	BANK
 | |
| 	PUSH	AF
 | |
| 	LD	B,4
 | |
| CD_I_LP	PUSH	BC
 | |
| 	LD	DE,ADRDIR
 | |
| 	LD	A,(CDDRIVE)
 | |
| 	LD	HL,0x0000
 | |
| 	LD	IX,0x0010
 | |
| ;	LD	BC,1*256 + BIOS.DRV_READ
 | |
| ;	RST	ToBIOS
 | |
| 	SPBIOS BIOSF.DRV_READ,1
 | |
| 	POP	BC
 | |
| 	JR	NC,CD_I_OK
 | |
| 	DJNZ	CD_I_LP
 | |
| UNKCD	POP	AF
 | |
| 	OUT	(PAGE3),A
 | |
| 	LD	A,ERR_DSS.UNKNOWN_FORMAT;DSS_Error.sys.UNKNOWN_FORMAT
 | |
| 	SCF
 | |
| 	RET
 | |
| 
 | |
| CD_I_OK	LD	HL,ADRDIR
 | |
| 	LD	A,(HL)
 | |
| 	INC	HL
 | |
| 	CP	0x01
 | |
| 	JR	NZ,UNKCD
 | |
| 	LD	A,(HL)
 | |
| 	INC	HL
 | |
| 	CP	"C"
 | |
| 	JR	NZ,UNKCD
 | |
| 	LD	A,(HL)
 | |
| 	INC	HL
 | |
| 	CP	"D"
 | |
| 	JR	NZ,UNKCD
 | |
| 	LD	HL,ADRDIR+0x009E
 | |
| 	LD	DE,ROOTDIR
 | |
| 	LDI 
 | |
| 	LDI 
 | |
| 	LDI 
 | |
| 	LDI 
 | |
| 	LD	HL,ADRDIR+0x00A6
 | |
| 	LD	DE,ROOTLEN
 | |
| 	LDI 
 | |
| 	LDI 
 | |
| 	LDI 
 | |
| 	LDI 
 | |
| 	POP	AF
 | |
| 	OUT	(PAGE3),A
 | |
| ;	LD	HL,0
 | |
| ;	LD	(FATCASH),HL
 | |
| 	XOR	A
 | |
| 	RET 
 | |
| 
 | |
| 
 | |
| ;----------------------------------------------
 | |
| 
 | |
| OPEN	LD	(ACCESS),A
 | |
| 	CALL	GETWORD
 | |
| 	RET	C
 | |
| 	LD	HL,TMPNAME
 | |
| 	LD	DE,MASKARE
 | |
| 	CALL	MASK
 | |
| 	RET	C
 | |
| OPENEXE	CALL	SEARCH
 | |
| 	RET	C
 | |
| 	LD	A,1	;;
 | |
| 	CALL	SET_FM	;;	CALL	GET_FM
 | |
| 	RET	C
 | |
| 	LD	A,C
 | |
| 	EX	AF,AF'
 | |
| 	EXX 
 | |
| 	LD	(IY+HND1),E
 | |
| 	LD	(IY+HND2),D
 | |
| 	EXX 
 | |
| 	LD	D,IYH
 | |
| 	LD	E,IYL
 | |
| 	LD	HL,HANDBUF
 | |
| 	LD	BC,0x0020
 | |
| 	LDIR 
 | |
| 	LD	A,(ACCESS)
 | |
| 	LD	(IY+AMODE),A
 | |
| ;;	LD	A,(TASK)
 | |
| 	XOR	A	;;
 | |
| 	LD	(IY+FTASK),A
 | |
| 	XOR	A
 | |
| 	LD	(IY+POS1),A
 | |
| 	LD	(IY+POS2),A
 | |
| 	LD	(IY+POS3),A
 | |
| 	LD	(IY+POS4),A
 | |
| ;;	LD	A,(DRIVE)
 | |
| ;	XOR	A	;;
 | |
| ;	LD	(IY+FDRV),A
 | |
| 	LD	HL,FM_BUF+CLU1
 | |
| 	LD	E,(HL)
 | |
| 	INC	HL
 | |
| 	LD	D,(HL)
 | |
| 	LD	(IY+DIRCLU1),E
 | |
| 	LD	(IY+DIRCLU2),D
 | |
| 
 | |
| 	LD	C,(IY+CLU1)
 | |
| 	LD	B,(IY+CLU2)
 | |
| 	LD	E,(IY+CLU3)
 | |
| 	LD	D,(IY+CLU4)
 | |
| 	EX	DE,HL
 | |
| 	PUSH	BC
 | |
| 	POP	IX
 | |
| 	LD	C,(IY+LEN1)
 | |
| 	LD	B,(IY+LEN2)
 | |
| 	LD	E,(IY+LEN3)
 | |
| 	LD	D,(IY+LEN4)
 | |
| 	EX	AF,AF'
 | |
| 	AND	A
 | |
| 	RET 
 | |
| 
 | |
| ;RET
 | |
| ; HL:IX - SECTOR
 | |
| ; DE:BC - SIZE IN BYTES
 | |
| 
 | |
| ;PATH0	DEFW	0x0000
 | |
| 
 | |
| ACCESS	DEFB	0x00
 | |
| 
 | |
| HANDBUF	DEFB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 | |
| 	DEFB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 | |
| 
 | |
| 
 | |
| WRT_HND	LD	A,DIRPAGE
 | |
| 	CALL	BANK
 | |
| 	PUSH	AF
 | |
| 	LD	IX,ADRDIR
 | |
| 	EXX 
 | |
| 	LD	DE,0
 | |
| 	EXX 
 | |
| WRT_HN1	LD	A,(IX+00)
 | |
| 	OR	A
 | |
| 	JR	Z,WRT_HN2
 | |
| 	CP	0xE5
 | |
| 	JR	Z,WRT_HN2
 | |
| 	LD	BC,0x0020
 | |
| 	ADD	IX,BC
 | |
| 	JR	NC,WRT_HN1
 | |
| 	POP	AF
 | |
| 	OUT	(PAGE3),A
 | |
| 	LD	A,9
 | |
| 	SCF 
 | |
| 	RET 
 | |
| 
 | |
| WRT_HN2	LD	D,IXH
 | |
| 	LD	E,IXL
 | |
| 	LD	HL,HANDBUF
 | |
| 	LD	BC,0x0020
 | |
| 	LDIR 
 | |
| 	POP	AF
 | |
| 	OUT	(PAGE3),A
 | |
| 	LD	HL,ADRDIR
 | |
| 	LD	BC,(DIRSIZE)
 | |
| 	DEC	BC
 | |
| 	ADD	HL,BC
 | |
| 	AND	A
 | |
| 	SBC	HL,DE
 | |
| 	RET	NC
 | |
| 	LD	HL,(DIRSIZE)
 | |
| 	LD	BC,0x0020
 | |
| 	ADD	HL,BC
 | |
| 	LD	(DIRSIZE),HL
 | |
| 	AND	A
 | |
| 	RET 
 | |
| 
 | |
| GETNAME	LD	BC,0x08FF
 | |
| GETN1	LD	A,(HL)
 | |
| 	CP	" "
 | |
| 	JR	NZ,GETN3
 | |
| GETN2	INC	HL
 | |
| 	DJNZ	GETN2
 | |
| 	JR	GETN4
 | |
| GETN3	LDI 
 | |
| 	DJNZ	GETN1
 | |
| GETN4	LD	A,(HL)
 | |
| 	CP	" "
 | |
| 	LD	A,"."
 | |
| 	JR	NZ,GETN5
 | |
| 	LD	A,0x00
 | |
| GETN5	LD	(DE),A
 | |
| 	INC	DE
 | |
| 	RET	Z
 | |
| 	LD	B,0x03
 | |
| GETN6	LD	A,(HL)
 | |
| 	CP	" "
 | |
| 	RET	Z
 | |
| 	LDI 
 | |
| 	XOR	A
 | |
| 	LD	(DE),A
 | |
| 	DJNZ	GETN6
 | |
| 	RET 
 | |
| 
 | |
| DTABUF	DEFW	0x0000
 | |
| CURHND	DEFW	0x0000
 | |
| NO_NEXT	DEFB	0x00
 | |
| FNDMODE	DEFB	0x00
 | |
| 
 | |
| F_FIRST	LD	(ACCESS),A
 | |
| 	LD	(DTABUF),DE
 | |
| 	LD	A,B
 | |
| 	LD	(FNDMODE),A
 | |
| 	PUSH	HL
 | |
| 	CALL	LOADDIR
 | |
| 	POP	HL
 | |
| 	CALL	GETWORD
 | |
| 	RET	C
 | |
| 	LD	HL,TMPNAME
 | |
| 	LD	DE,MASKARE
 | |
| 	CALL	MASK
 | |
| 	RET	C
 | |
| 	LD	A,(ACCESS)
 | |
| 	CALL	ASEARCH
 | |
| 	RET	C
 | |
| 	LD	HL,MASKARE
 | |
| 	LD	DE,(DTABUF)
 | |
| 	LD	BC,11
 | |
| 	LDIR 
 | |
| 	LD	A,(ACCESS)
 | |
| 	LD	(DE),A
 | |
| 	INC	DE
 | |
| FIND_S	LD	BC,0x0020
 | |
| 	ADD	IX,BC
 | |
| 	LD	(CURHND),IX
 | |
| 	LD	HL,HANDBUF+12
 | |
| 	LD	BC,20
 | |
| 	LDIR 
 | |
| 	LD	A,(HANDBUF+11)
 | |
| 	LD	(DE),A
 | |
| 	INC	DE
 | |
| 	LD	HL,HANDBUF
 | |
| 	LD	A,(FNDMODE)
 | |
| 	OR	A
 | |
| 	JR	NZ,FIND_M2
 | |
| 	LD	BC,11
 | |
| 	LDIR 
 | |
| 	LD	A,0xFF
 | |
| 	LD	(NO_NEXT),A
 | |
| 	XOR	A
 | |
| 	RET 
 | |
| FIND_M2	CALL	GETNAME
 | |
| 	LD	A,0xFF
 | |
| 	LD	(NO_NEXT),A
 | |
| 	XOR	A
 | |
| 	RET 
 | |
| 
 | |
| F_NEXT	LD	A,(NO_NEXT)
 | |
| 	OR	A
 | |
| 	LD	A,14
 | |
| 	SCF 
 | |
| 	RET	Z
 | |
| 	LD	(DTABUF),DE
 | |
| 	LD	DE,MASKARE
 | |
| 	LD	HL,(DTABUF)
 | |
| 	LD	BC,11
 | |
| 	LDIR 
 | |
| 	LD	A,(HL)
 | |
| 	PUSH	HL
 | |
| 	CALL	NSEARCH
 | |
| 	POP	DE
 | |
| 	EX	AF,AF'
 | |
| 	XOR	A
 | |
| 	LD	(NO_NEXT),A
 | |
| 	EX	AF,AF'
 | |
| 	RET	C
 | |
| 	INC	DE
 | |
| 	JP	FIND_S
 | |
| 
 | |
| NSEARCH	EX	AF,AF'
 | |
| 	LD	A,DIRPAGE
 | |
| 	CALL	BANK
 | |
| 	PUSH	AF
 | |
| 	EX	AF,AF'
 | |
| 	CPL 
 | |
| 	LD	C,A
 | |
| 	LD	IX,(CURHND)
 | |
| 	EXX 
 | |
| 	LD	DE,0
 | |
| 	EXX 
 | |
| 	JP	SEARCH1
 | |
| 
 | |
| DSEARCH	LD	A,0x10
 | |
| 	CALL	ASEARCH
 | |
| 	RET	NC
 | |
| 	LD	A,4
 | |
| 	RET 
 | |
| 
 | |
| SEARCH	LD	A,0x23
 | |
| ASEARCH	EX	AF,AF'
 | |
| 	LD	A,DIRPAGE
 | |
| 	CALL	BANK
 | |
| 	PUSH	AF
 | |
| 	EX	AF,AF'
 | |
| 	CPL 
 | |
| 	LD	C,A
 | |
| 	LD	IX,ADRDIR
 | |
| 	EXX 
 | |
| 	LD	DE,0
 | |
| 	EXX 
 | |
| SEARCH1	LD	A,(IX+00)
 | |
| 	OR	A
 | |
| 	JR	Z,SEARCH4
 | |
| 	CP	0xE5
 | |
| 	JR	Z,SEARCH3
 | |
| 	LD	A,(IX+11)
 | |
| 	AND	C
 | |
| 	JR	NZ,SEARCH3
 | |
| 	LD	HL,MASKARE
 | |
| 	LD	D,IXH
 | |
| 	LD	E,IXL
 | |
| 	LD	B,11
 | |
| 	EX	DE,HL
 | |
| SEARCH2	LD	A,(DE)
 | |
| 	CP	"?"
 | |
| 	JR	Z,SEARCH5
 | |
| 	CP	(HL)
 | |
| 	JR	NZ,SEARCH3
 | |
| SEARCH5	INC	HL
 | |
| 	INC	DE
 | |
| 	DJNZ	SEARCH2
 | |
| 	LD	D,IXH
 | |
| 	LD	E,IXL
 | |
| 	LD	HL,HANDBUF
 | |
| 	EX	DE,HL
 | |
| 	LD	BC,0x0020
 | |
| 	LDIR 
 | |
| 	POP	AF
 | |
| 	OUT	(PAGE3),A
 | |
| 	AND	A
 | |
| 	RET 
 | |
| 
 | |
| SEARCH3	EXX 
 | |
| 	INC	DE
 | |
| 	EXX 
 | |
| 	LD	DE,0x0020
 | |
| 	ADD	IX,DE
 | |
| 	JR	NC,SEARCH1
 | |
| SEARCH4	POP	AF
 | |
| 	OUT	(PAGE3),A
 | |
| 	LD	A,3
 | |
| 	SCF 
 | |
| 	RET 
 | |
| 
 | |
| GETWORD	LD	DE,TMPNAME
 | |
| 	LD	BC,0x0DFF
 | |
| GETWRD1	LD	A,(HL)
 | |
| 	INC	HL
 | |
| 	CP	'\\'
 | |
| 	JR	Z,DIRNAME
 | |
| 	CP	":"
 | |
| 	JR	Z,DRVNAME
 | |
| 	LD	(DE),A
 | |
| 	INC	DE
 | |
| 	CP	0x21
 | |
| 	CCF 
 | |
| 	RET	NC
 | |
| 	DJNZ	GETWRD1
 | |
| 	LD	A,16
 | |
| 	SCF 
 | |
| 	RET 
 | |
| 
 | |
| DIRNAME	LD	A,0x00
 | |
| 	LD	(DE),A
 | |
| 	PUSH	HL
 | |
| 	LD	HL,TMPNAME
 | |
| 	CALL	OPENDIR
 | |
| 	POP	HL
 | |
| 	JP	NC,GETWORD
 | |
| 	RET 
 | |
| 
 | |
| DRVNAME	LD	A,(TMPNAME)
 | |
| 	CP	"a"
 | |
| 	JR	C,DRVN2
 | |
| 	CP	"{"
 | |
| 	JR	NC,DRVN2
 | |
| 	SUB	0x20
 | |
| DRVN2	SUB	"A"
 | |
| 	PUSH	HL
 | |
| ;	CALL	OPENDSK
 | |
| 	POP	HL
 | |
| 	JP	NC,GETWORD
 | |
| 	RET 
 | |
| 
 | |
| TMPNAME	DB	"            ",0x00
 | |
| 
 | |
| OPENDIR	XOR	A
 | |
| 	CALL	SET_FM
 | |
| 	LD	A,(HL)
 | |
| 	OR	A
 | |
| 	JP	NZ,SUBDIR
 | |
| 
 | |
| 	LD	DE,(ROOTDIR+0)
 | |
| 	LD	(IY+CLU1),E
 | |
| 	LD	(IY+CLU2),D
 | |
| 	LD	DE,(ROOTDIR+2)
 | |
| 	LD	(IY+CLU3),E
 | |
| 	LD	(IY+CLU4),D
 | |
| 
 | |
| 	LD	DE,(ROOTLEN+0)
 | |
| 	LD	(IY+LEN1),E
 | |
| 	LD	(IY+LEN2),D
 | |
| 	LD	DE,(ROOTLEN+2)
 | |
| 	LD	(IY+LEN3),E
 | |
| 	LD	(IY+LEN4),D
 | |
| 
 | |
| 	CALL	LOADDIR
 | |
| 	LD	HL,DIRSPEC
 | |
| 	LD	(HL),'\\'
 | |
| 	INC	HL
 | |
| 	LD	(HL),0x00
 | |
| 	AND	A
 | |
| 	RET 
 | |
| 
 | |
| SUBDIR	CP	"."
 | |
| 	JR	NZ,SUBDIR2
 | |
| 	EXX 
 | |
| 	LD	HL,MASKARE
 | |
| 	LD	DE,MASKARE+1
 | |
| 	LD	BC,10
 | |
| 	LD	(HL),0x20
 | |
| 	LDIR 
 | |
| 	EXX 
 | |
| 	LD	DE,MASKARE
 | |
| SUBDIR0	LDI 
 | |
| 	LD	A,(HL)
 | |
| 	OR	A
 | |
| 	JR	NZ,SUBDIR0
 | |
| 	JR	SUBDIR3
 | |
| 
 | |
| SUBDIR2	LD	DE,MASKARE
 | |
| 	CALL	MASK
 | |
| 	RET	C
 | |
| SUBDIR3	CALL	FINDDIR
 | |
| 	RET	C
 | |
| 	LD	(IY+CLU1),E
 | |
| 	LD	(IY+CLU2),D
 | |
| 	LD	(IY+CLU3),C
 | |
| 	LD	(IY+CLU4),B
 | |
| 	EXX 
 | |
| 	LD	(IY+LEN1),E
 | |
| 	LD	(IY+LEN2),D
 | |
| 	LD	(IY+LEN3),C
 | |
| 	LD	(IY+LEN4),B
 | |
| 	EXX 
 | |
| 	CALL	LOADDIR
 | |
| 	AND	A
 | |
| 	RET 
 | |
| 
 | |
| 
 | |
| 
 | |
| FINDD03	LD	BC,0x0020
 | |
| 	ADD	IX,BC
 | |
| 	JR	NC,FINDD01
 | |
| FINDD04	POP	AF
 | |
| 	OUT	(PAGE3),A
 | |
| 	LD	A,4
 | |
| 	SCF 
 | |
| 	RET 
 | |
| 
 | |
| ; FIND "MASKAREA" IN DIRECTORY
 | |
| 
 | |
| FINDDIR	LD	A,DIRPAGE
 | |
| 	CALL	BANK
 | |
| 	PUSH	AF
 | |
| 	LD	IX,ADRDIR
 | |
| FINDD01	LD	A,(IX+00)
 | |
| 	OR	A
 | |
| 	JR	Z,FINDD04
 | |
| 	CP	0xE5
 | |
| 	JR	Z,FINDD03
 | |
| 	LD	A,(IX+11)
 | |
| 	AND	0x10
 | |
| 	JR	Z,FINDD03
 | |
| 	LD	HL,MASKARE
 | |
| 	LD	D,IXH
 | |
| 	LD	E,IXL
 | |
| 	EX	DE,HL
 | |
| 	LD	B,11
 | |
| FINDD02	LD	A,(DE)
 | |
| 	CP	"?"
 | |
| 	JR	Z,FINDD05
 | |
| 	CP	(HL)
 | |
| 	JR	NZ,FINDD03
 | |
| FINDD05	INC	HL
 | |
| 	INC	DE
 | |
| 	DJNZ	FINDD02
 | |
| 	LD	A,(IX+0)
 | |
| 	CP	"."
 | |
| 	JP	NZ,ADDSPEC
 | |
| 	LD	A,(IX+1)
 | |
| 	CP	"."
 | |
| 	JP	NZ,IT_DIR
 | |
| 	LD	HL,DIRSPEC
 | |
| 	LD	D,H
 | |
| 	LD	E,L
 | |
| 	LD	BC,0x100
 | |
| 	XOR	A
 | |
| 	CPIR 
 | |
| 	LD	BC,0x100
 | |
| 	LD	A,'\\'
 | |
| 	CPDR 
 | |
| 	INC	HL
 | |
| 	AND	A
 | |
| 	EX	DE,HL
 | |
| 	SBC	HL,DE
 | |
| 	EX	DE,HL
 | |
| 	JR	NZ,ROTZ
 | |
| 	INC	HL
 | |
| ROTZ	LD	(HL),0
 | |
| IT_DIR	LD	E,(IX+CLU1)
 | |
| 	LD	D,(IX+CLU2)
 | |
| 	LD	C,(IX+CLU3)
 | |
| 	LD	B,(IX+CLU4)
 | |
| 	EXX 
 | |
| 	LD	E,(IX+LEN1)
 | |
| 	LD	D,(IX+LEN2)
 | |
| 	LD	C,(IX+LEN3)
 | |
| 	LD	B,(IX+LEN4)
 | |
| 	EXX 
 | |
| 	POP	AF
 | |
| 	OUT	(PAGE3),A
 | |
| 	AND	A
 | |
| 	RET 
 | |
| 
 | |
| ADDSPEC	LD	E,IXL
 | |
| 	LD	D,IXH
 | |
| 	LD	HL,DIRSPEC
 | |
| 	LD	BC,0xFF
 | |
| 	XOR	A
 | |
| 	CPIR 
 | |
| 	DEC	HL
 | |
| 	DEC	HL
 | |
| 	LD	A,'\\'
 | |
| 	CP	(HL)
 | |
| 	INC	HL
 | |
| 	JR	Z,ADDSPE0
 | |
| 	LD	(HL),A
 | |
| 	INC	HL
 | |
| ADDSPE0	LD	BC,0x0820
 | |
| MM1	LD	A,(DE)
 | |
| 	INC	DE
 | |
| 	CP	C
 | |
| 	JR	Z,MM2
 | |
| 	LD	(HL),A
 | |
| 	INC	HL
 | |
| MM2	DJNZ	MM1
 | |
| 	LD	A,(DE)
 | |
| 	INC	DE
 | |
| 	CP	C
 | |
| 	JR	Z,MM3
 | |
| 	LD	(HL),"."
 | |
| 	INC	HL
 | |
| 	LD	(HL),A
 | |
| 	INC	HL
 | |
| 	LD	A,(DE)
 | |
| 	INC	DE
 | |
| 	CP	C
 | |
| 	JR	Z,MM3
 | |
| 	LD	(HL),A
 | |
| 	INC	HL
 | |
| 	LD	A,(DE)
 | |
| 	CP	C
 | |
| 	JR	Z,MM3
 | |
| 	LD	(HL),A
 | |
| 	INC	HL
 | |
| MM3	LD	(HL),0
 | |
| 	JP	IT_DIR
 | |
| 
 | |
| CURRDIR	EX	DE,HL
 | |
| 	LD	HL,DIRSPEC
 | |
| CURDIR1	LD	A,(HL)
 | |
| 	OR	A
 | |
| 	LDI 
 | |
| 	JP	NZ,CURDIR1
 | |
| 	RET 
 | |
| 
 | |
| LOADDIR	XOR	A
 | |
| 	LD	HL,0
 | |
| 	LD	IX,0
 | |
| 	LD	B,0
 | |
| 	CALL	MOVE_FP
 | |
| 	LD	A,DIRPAGE
 | |
| 	CALL	BANK
 | |
| 	PUSH	AF
 | |
| 	LD	B,3
 | |
| LOADFFF	PUSH	BC
 | |
| 	LD	HL,0xC000
 | |
| 	LD	DE,0xC001
 | |
| 	LD	BC,0x3FFF
 | |
| 	LD	(HL),L
 | |
| 	LDIR 
 | |
| ;	LD	A,(DRIVE)
 | |
| ;	LD	(IY+FDRV),A
 | |
| ;	LD	C,(IY+LEN1)
 | |
| 	LD	C,(IY+LEN2)
 | |
| 	LD	B,(IY+LEN3)
 | |
| 	LD	E,(IY+LEN4)
 | |
| 	LD	D,0
 | |
| 	SRL	D
 | |
| 	RR	E
 | |
| 	RR	B
 | |
| 	RR	C
 | |
| 	SRL	D
 | |
| 	RR	E
 | |
| 	RR	B
 | |
| 	RR	C
 | |
| 	SRL	D
 | |
| 	RR	E
 | |
| 	RR	B
 | |
| 	RR	C
 | |
| 	LD	E,(IY+CLU1)
 | |
| 	LD	D,(IY+CLU2)
 | |
| 	LD	L,(IY+CLU3)
 | |
| 	LD	H,(IY+CLU4)
 | |
| 	LD	IXH,D
 | |
| 	LD	IXL,E
 | |
| 	LD	B,C
 | |
| 	LD	A,B
 | |
| 	OR	A
 | |
| 	JR	Z,ERRLEND
 | |
| 	CP	0x08
 | |
| 	JR	C,NORLEND
 | |
| 	LD	B,8
 | |
| NORLEND	
 | |
| 	LD	A,(CDDRIVE)
 | |
| ;	LD	C,BIOS.DRV_READ
 | |
| 	LD	DE,ADRDIR
 | |
| ;	RST	ToBIOS
 | |
| 	SPBIOS BIOSF.DRV_READ
 | |
| 	POP	BC
 | |
| 	JR	NC,LOADMMM
 | |
| 	DEC	B
 | |
| 	JP	NZ,LOADFFF
 | |
| 	POP	AF
 | |
| 	OUT	(PAGE3),A
 | |
| 	SCF 
 | |
| 	LD	A,20
 | |
| 	RET 
 | |
| 
 | |
| ERRLEND	POP	BC
 | |
| 	POP	AF
 | |
| 	OUT	(PAGE3),A
 | |
| 	SCF 
 | |
| 	LD	A,20
 | |
| 	RET 
 | |
| 
 | |
| LOADMMM	POP	AF
 | |
| 	OUT	(PAGE3),A
 | |
| 	CALL	CORRDIR
 | |
| 	AND	A
 | |
| 	RET 
 | |
| 
 | |
| CORRDIR	LD	A,DIRPAGE
 | |
| 	CALL	BANK
 | |
| 	PUSH	AF
 | |
| 	LD	HL,ADRDIR
 | |
| 	LD	DE,ADRDIR
 | |
| CORRL1	PUSH	DE
 | |
| 	LD	C,(HL)
 | |
| 	LD	B,0
 | |
| 	LD	DE,ENTRYBF
 | |
| 	LDIR 
 | |
| 	POP	DE
 | |
| 	PUSH	HL
 | |
| 	LD	HL,FCDFLEN
 | |
| 	LD	C,(HL)
 | |
| 	LD	B,0
 | |
| 	ADD	HL,BC
 | |
| 	INC	HL
 | |
| 	LD	(HL),0
 | |
| 	SBC	HL,BC
 | |
| 	PUSH	DE
 | |
| 	CALL	MASK
 | |
| 	POP	HL
 | |
| 	LD	BC,11
 | |
| 	ADD	HL,BC
 | |
| 	LD	A,(FCDFLAG)
 | |
| 	BIT	1,A	;IS IT DIR?
 | |
| ;	AND	2
 | |
| 	LD	C,0x01	;ATTRIBUT FILE
 | |
| 	JR	Z,CORRL0
 | |
| 	LD	C,0x10	;ATTRIBUT DIRECTORY
 | |
| CORRL0	BIT	0,A	;IS IT HIDDEN
 | |
| 	JR	Z,CORRL00
 | |
| 	SET	1,C
 | |
| CORRL00
 | |
| 	LD	(HL),C
 | |
| 	INC	HL
 | |
| 	XOR	A
 | |
| 	LD	B,8
 | |
| FILLCDN	LD	(HL),A
 | |
| 	INC	HL
 | |
| 	DJNZ	FILLCDN
 | |
| 	LD	A,(FCDSEC+2)
 | |
| 	LD	(HL),A
 | |
| 	INC	HL
 | |
| 	LD	A,(FCDSEC+3)
 | |
| 	LD	(HL),A
 | |
| 	INC	HL
 | |
| ;MKDATE
 | |
| 	PUSH	HL
 | |
| 	LD	A,(FCDYEAR)
 | |
| 	LD	IXL,A
 | |
| 	LD	IXH,0
 | |
| 	LD	DE,1900
 | |
| 	ADD	IX,DE
 | |
| 	LD	A,(FCDMOUN)
 | |
| 	LD	E,A
 | |
| 	LD	A,(FCDDAY)
 | |
| 	LD	D,A
 | |
| 	LD	A,(FCDHOUR)
 | |
| 	LD	H,A
 | |
| 	LD	A,(FCDMIN)
 | |
| 	LD	L,A
 | |
| 	LD	A,(FCDSECN)
 | |
| 	LD	B,A
 | |
| 	CALL	MK_TIME
 | |
| 	POP	HL
 | |
| ;	LD	DE,0x0000	;TIME
 | |
| 	LD	(HL),E
 | |
| 	INC	HL
 | |
| 	LD	(HL),D
 | |
| 	INC	HL
 | |
| ;	LD	DE,0x0000	;DATE
 | |
| 	LD	(HL),C
 | |
| 	INC	HL
 | |
| 	LD	(HL),B
 | |
| 	INC	HL
 | |
| 
 | |
| 	LD	DE,(FCDSEC)
 | |
| 	LD	(HL),E
 | |
| 	INC	HL
 | |
| 	LD	(HL),D
 | |
| 	INC	HL
 | |
| 	EX	DE,HL
 | |
| 	LD	HL,FCDLEN
 | |
| 	LDI 
 | |
| 	LDI 
 | |
| 	LDI 
 | |
| 	LDI 
 | |
| 	POP	HL
 | |
| 	BIT	7,H
 | |
| 	JR	Z,CORRL2
 | |
| 	LD	A,(HL)
 | |
| 	OR	A
 | |
| 	JP	NZ,CORRL1
 | |
| 	LD	L,0
 | |
| 	INC	H
 | |
| 	JR	Z,CORRL2
 | |
| 	LD	A,(HL)
 | |
| 	OR	A
 | |
| 	JP	NZ,CORRL1
 | |
| CORRL2	XOR	A
 | |
| 	LD	(DE),A
 | |
| 	LD	DE,(ROOTDIR+0)
 | |
| 	LD	L,(IY+CLU1)
 | |
| 	LD	H,(IY+CLU2)
 | |
| 	AND	A
 | |
| 	SBC	HL,DE
 | |
| 	JR	NZ,CORRL6
 | |
| 	LD	DE,(ROOTDIR+2)
 | |
| 	LD	L,(IY+CLU3)
 | |
| 	LD	H,(IY+CLU4)
 | |
| 	AND	A
 | |
| 	SBC	HL,DE
 | |
| 	JR	NZ,CORRL6
 | |
| 	LD	HL,ADRDIR
 | |
| 	LD	A,(HL)
 | |
| 	CP	" "
 | |
| 	JR	NZ,CORRL4
 | |
| 	LD	(HL),0xE5
 | |
| 	LD	BC,0x0020
 | |
| 	ADD	HL,BC
 | |
| 	LD	A,(HL)
 | |
| 	CP	" "
 | |
| 	JR	NZ,CORRL4
 | |
| 	LD	(HL),0xE5
 | |
| 	JR	CORRL4
 | |
| CORRL6	LD	HL,ADRDIR
 | |
| 	LD	A,(HL)
 | |
| 	CP	" "
 | |
| 	JR	NZ,CORRL4
 | |
| 	LD	(HL),"."
 | |
| 	LD	BC,0x0020
 | |
| 	ADD	HL,BC
 | |
| 	LD	A,(HL)
 | |
| 	CP	" "
 | |
| 	JR	NZ,CORRL4
 | |
| 	LD	(HL),"."
 | |
| 	INC	HL
 | |
| 	LD	(HL),"."
 | |
| CORRL4	POP	AF
 | |
| 	OUT	(PAGE3),A
 | |
| 	AND	A
 | |
| 	RET 
 | |
| 
 | |
| ;SYSTEM ATTRIBUTES
 | |
| READONLY_ATR	EQU	%00000001
 | |
| HIDDEN_ATR	EQU	%00000010
 | |
| SYSTEM_ATR	EQU	%00000100
 | |
| ARCHIVE_ATR	EQU	%00100000
 | |
| 
 | |
| ENTRYBF
 | |
| 	DEFB	0x00	;Entry lenght
 | |
| 	DEFB	0x00	;XAR in	LBN
 | |
| FCDSEC	DEFW	0x00,0x00	;Start sector (Intel)
 | |
| 	DEFW	0x00,0x00	;Start sector (Motorola)
 | |
| FCDLEN	DEFW	0x00,0x00	;Lenght	file (Intel)
 | |
| 	DEFW	0x00,0x00	;Lenght	file (Motorola)
 | |
| FCDYEAR	DEFB	0x00	;Year
 | |
| FCDMOUN	DEFB	0x00	;Mount
 | |
| FCDDAY	DEFB	0x00	;Day
 | |
| FCDHOUR	DEFB	0x00	;Hour
 | |
| FCDMIN	DEFB	0x00	;Minute
 | |
| FCDSECN	DEFB	0x00	;Second
 | |
| 	DEFB	0x00	;Reserve
 | |
| FCDFLAG	DEFB	0x00	;Flag
 | |
| 	DEFB	0x00	;Interlive size
 | |
| 	DEFB	0x00	;Interlive skip	factor
 | |
| 	DEFW	0x0000	;Volume	Set Sequence (Intel)
 | |
| 	DEFW	0x0000	;Volume	Set Sequence (Motorola)
 | |
| FCDFLEN	DEFB	0x00
 | |
| DEFSA	EQU	$-ENTRYBF
 | |
| FCDNAME	DB	0x100-DEFSA DUP 0
 | |
| 
 | |
| ROOTDIR	DEFW	0,0
 | |
| ROOTLEN	DEFW	0,0
 | |
| 
 | |
| DIRSIZE	DEFW	0
 | |
| 
 | |
| BANK	LD	C,A
 | |
| 	LD	B,0
 | |
| 	LD	HL,BANKTBL
 | |
| 	ADD	HL,BC
 | |
| 	IN	A,(PAGE3)
 | |
| 	LD	C,PAGE3
 | |
| 	OUTI 
 | |
| 	RET 
 | |
| 
 | |
| BANKTBL	DEFB	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 | |
| 	DEFB	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 | |
| 
 | |
| ;HANDTA	DEFB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 | |
| ;	DEFB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 | |
| 
 | |
| MASKARE
 | |
| 	DEFB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 | |
| 	DEFB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 | |
| 
 | |
| ; HL - MASK "file*.t??"
 | |
| ; DE - 11 bytes	filename
 | |
| ; RET: C=2 FILE	WITHOUT	EXTENTION
 | |
| ;      C=1 FILE	WITH EXTENTION
 | |
| 
 | |
| MASK	PUSH	HL
 | |
| 	PUSH	DE
 | |
| 	LD	H,D
 | |
| 	LD	L,E
 | |
| 	INC	DE
 | |
| 	LD	(HL),0x20
 | |
| 	LD	BC,10
 | |
| 	LDIR 
 | |
| 	POP	DE
 | |
| 	POP	HL
 | |
| 	LD	A,(HL)
 | |
| 	CP	0x21
 | |
| 	RET	C
 | |
| 	LD	BC,0x0902
 | |
| MASK1	LD	A,(HL)
 | |
| 	CP	0x21
 | |
| 	CCF 
 | |
| 	RET	NC
 | |
| 	CP	0x22
 | |
| 	JR	Z,MASK7
 | |
| 	CP	"*"
 | |
| 	JR	Z,MASK3
 | |
| 	CP	"+"
 | |
| 	JR	Z,MASK7
 | |
| 	CP	","
 | |
| 	JR	Z,MASK7
 | |
| 	CP	"."
 | |
| 	JR	Z,MASK5
 | |
| 	CP	"/"
 | |
| 	JR	Z,MASK7
 | |
| 	CP	":"
 | |
| 	JR	Z,MASK7
 | |
| 	CP	";"
 | |
| 	JR	Z,MASK7
 | |
| 	CP	"<"
 | |
| 	JR	Z,MASK7
 | |
| 	CP	"="
 | |
| 	JR	Z,MASK7
 | |
| 	CP	">"
 | |
| 	JR	Z,MASK7
 | |
| 	CP	"["
 | |
| 	JR	Z,MASK7
 | |
| 	CP	'\\'	;
 | |
| 	JR	Z,MASK7
 | |
| 	CP	"]"
 | |
| 	JR	Z,MASK7
 | |
| 	CP	"|"
 | |
| 	JR	Z,MASK7
 | |
| 	CP	"a"
 | |
| 	JR	C,MASK2
 | |
| 	CP	"{"
 | |
| 	JR	NC,MASK2
 | |
| 	SUB	0x20
 | |
| MASK2	LD	(DE),A
 | |
| 	INC	HL
 | |
| 	INC	DE
 | |
| 	DJNZ	MASK1
 | |
| MASK7	LD	A,16
 | |
| 	SCF 
 | |
| 	RET 
 | |
| 
 | |
| MASK3	LD	A,"?"
 | |
| 	INC	HL
 | |
| 	DJNZ	MASK6
 | |
| 	LD	A,16
 | |
| 	SCF 
 | |
| 	RET 
 | |
| 
 | |
| MASK6	LD	(DE),A
 | |
| 	INC	DE
 | |
| 	DJNZ	MASK6
 | |
| 	LD	B,1
 | |
| 	JR	MASK1
 | |
| 
 | |
| MASK5	LD	A," "
 | |
| 	INC	HL
 | |
| 	DJNZ	MASK4
 | |
| 	LD	B,4
 | |
| 	DEC	C
 | |
| 	JP	NZ,MASK1
 | |
| 	LD	A,16
 | |
| 	SCF 
 | |
| 	RET 
 | |
| 
 | |
| MASK4	LD	(DE),A
 | |
| 	INC	DE
 | |
| 	DJNZ	MASK4
 | |
| 	LD	B,4
 | |
| 	DEC	C
 | |
| 	JP	NZ,MASK1
 | |
| 	LD	A,16
 | |
| 	SCF 
 | |
| 	RET 
 | |
| 
 | |
| SYSTIME	LD	DE,DAY*256+MONTH ;DAY/MONTH
 | |
| 	LD	HL,0x0000	;HOUR/MINUTE
 | |
| 	LD	BC,0x0001	;SECOND/WEEKDAY
 | |
| 	LD	IX,YEAR		;YEAR
 | |
| 	AND	A
 | |
| 	RET 
 | |
| 
 | |
| ;INPUT:	D - DAY;  E - MONTH
 | |
| ;	H - HOUR; L - MINUTE
 | |
| ;	B - SECOND (0...59)
 | |
| ;	IX- YEAR (0...65535)
 | |
| ;OUTPUT: DE - hhhhhmmmmmmsssss	h - hour, m - min, s - sec/2
 | |
| ;	 BC - yyyyyyymmmmddddd	y - year, m - month, d - day
 | |
| ;			       (1980-2108)
 | |
| 
 | |
| MK_TIME	LD	A,L
 | |
| 	RLCA 
 | |
| 	RLCA 
 | |
| 	SLA	A
 | |
| 	RL	H
 | |
| 	SLA	A
 | |
| 	RL	H
 | |
| 	SLA	A
 | |
| 	RL	H
 | |
| 	SRL	B
 | |
| 	OR	B
 | |
| 	LD	L,A
 | |
| 
 | |
| 	LD	BC,0xF844	;(-1980)
 | |
| 	ADD	IX,BC
 | |
| 	LD	A,E
 | |
| 	RLCA 
 | |
| 	RLCA 
 | |
| 	RLCA 
 | |
| 	RLCA 
 | |
| 	AND	0xF0
 | |
| 	LD	B,IXL
 | |
| 	SLA	A
 | |
| 	RL	B
 | |
| 	OR	D
 | |
| 	LD	C,A
 | |
| 	EX	DE,HL
 | |
| 	AND	A
 | |
| 	RET 
 | |
| 
 | |
| ;INPUT:	DE - hhhhhmmmmmmsssss  h - hour, m - min, s - sec/2
 | |
| ;	BC - yyyyyyymmmmddddd  y - year, m - month, d -	day
 | |
| ;			       (1980-2108)
 | |
| ;OUTPUT: D - DAY;  E - MONTH
 | |
| ;	 H - HOUR; L - MINUTE
 | |
| ;	 B - SECOND (0...59)
 | |
| ;	 IX- YEAR (0...65535)
 | |
| 
 | |
| RMKTIME	EX	DE,HL
 | |
| 	LD	A,C
 | |
| 	AND	0x1F
 | |
| 	LD	D,A
 | |
| 	SRL	B
 | |
| 	RR	C
 | |
| 	LD	A,C
 | |
| 	RRCA 
 | |
| 	RRCA 
 | |
| 	RRCA 
 | |
| 	RRCA 
 | |
| 	AND	0x0F
 | |
| 	LD	E,A
 | |
| 	LD	C,B
 | |
| 	LD	B,0
 | |
| 	LD	IX,1980
 | |
| 	ADD	IX,BC
 | |
| 	LD	A,L
 | |
| 	AND	0x1F
 | |
| 	ADD	A,A
 | |
| 	LD	B,A
 | |
| 	SRL	H
 | |
| 	RR	L
 | |
| 	SRL	H
 | |
| 	RR	L
 | |
| 	SRL	H
 | |
| 	RR	L
 | |
| 	SRL	L
 | |
| 	SRL	L
 | |
| 	AND	A
 | |
| 	RET 
 | |
| 
 | |
| ;  INPUT: HL - "C:\\DIR\\DIR\\DIR_NAME[\\]",0
 | |
| 
 | |
| CHDIR	CALL	GETWORD
 | |
| 	RET	C
 | |
| 	LD	HL,TMPNAME
 | |
| 	LD	A,(HL)
 | |
| 	OR	A
 | |
| 	CALL	NZ,OPENDIR
 | |
| 	RET 
 | |
| ; |