 194e7a1fca
			
		
	
	
		194e7a1fca
		
	
	
	
	
		
			
			- поправлен cdx.txt - добалена возможность послать ATAPI пакет. - если нет диска в приводе, то не пишет ошибку, что нет привода
		
			
				
	
	
		
			1037 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1037 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| ; LAST UPDATE: 05.07.2025 savelij
 | |
| 
 | |
| COMMAND	LD	HL,BUF1
 | |
| 	LD	A,(HL)
 | |
| 	OR	A
 | |
| 	RET	Z
 | |
| 	DEC	HL
 | |
| SKIPSP	INC	HL
 | |
| 	LD	A,(HL)
 | |
| 	CP	9
 | |
| 	JR	Z,SKIPSP
 | |
| 	CP	" "
 | |
| 	JR	Z,SKIPSP
 | |
| COMP01	LD	D,H
 | |
| 	LD	E,L
 | |
| 	XOR	A
 | |
| 	LD	BC,255
 | |
| 	CPIR
 | |
| 	LD	A,254
 | |
| 	SUB	C
 | |
| 	LD	C,A
 | |
| 	LD	HL,CMDLIST
 | |
| COMP004	PUSH	BC
 | |
| 	PUSH	DE
 | |
| COMP000	LD	A,(DE)
 | |
| 	CP	0x61
 | |
| 	JP	C,COMP001
 | |
| 	CP	0x7B
 | |
| 	JP	NC,COMP001
 | |
| 	SUB	0x20
 | |
| COMP001	CP	(HL)
 | |
| 	JP	NZ,COMP002
 | |
| 	INC	HL
 | |
| 	INC	DE
 | |
| 	DEC	C
 | |
| 	JP	NZ,COMP000
 | |
| 	XOR	A
 | |
| 	CP	(HL)
 | |
| 	JP	NZ,COMP002
 | |
| 	POP	BC
 | |
| 	POP	BC
 | |
| 	LD	A,(DE)
 | |
| 	CP	" "
 | |
| 	JR	NZ,NOSPC
 | |
| 	INC	DE
 | |
| NOSPC	INC	HL
 | |
| 	LD	A,(HL)
 | |
| 	INC	HL
 | |
| 	LD	H,(HL)
 | |
| 	LD	L,A
 | |
| 	JP	(HL)
 | |
| 
 | |
| COMP002	XOR	A
 | |
| 	LD	C,0xFF
 | |
| 	CPI
 | |
| 	JP	NZ,$-2
 | |
| 	INC	HL
 | |
| 	INC	HL
 | |
| 	POP	DE
 | |
| 	POP	BC
 | |
| 	LD	A,(HL)
 | |
| 	OR	A
 | |
| 	JP	NZ,COMP004
 | |
| 	LD	HL,BUF1
 | |
| 	CALL	PUTVAR
 | |
| 	LD	A,MSG0.MSG_UNK_COMMAND
 | |
| 	CALL	MESSAGE
 | |
| 	SCF
 | |
| 	RET
 | |
| 
 | |
| CMDLIST	DB	"CLOSE",0
 | |
| 	DW	CCLOSE
 | |
| 	DB	"COPY",0
 | |
| 	DW	CCOPY
 | |
| 	DB	"DUMP",0
 | |
| 	DW	CDUMP
 | |
| 	DB	"EJECT",0
 | |
| 	DW	COPEN
 | |
| 	DB	"HELP",0
 | |
| 	DW	CHELP
 | |
| 	DB	"LIST",0
 | |
| 	DW	CDIR
 | |
| 	DB	"OPEN",0
 | |
| 	DW	COPEN
 | |
| 	DB	"SECTORDUMP",0
 | |
| 	DW	CDUMP
 | |
| 		DZ "SEND"
 | |
| 		DW SENDPACKET
 | |
| 	DB	0
 | |
| 
 | |
| SENDPACKET	LD	A,MSG0.MSG_SEND_ATAPI
 | |
| 		CALL	MESSAGE
 | |
| 		CALL CONV_HEX
 | |
| 		JR NC,.L1
 | |
| 		LD A,MSG0.MSG_ERR_PACKET
 | |
| 		JP MESSAGE
 | |
| 
 | |
| .L1		LD	A,(CDDRIVE)
 | |
| 		LD HL,APCMD_BUF
 | |
| 	SPBIOS BIOSF.DRV_EXTENDED,DRV_EXTENDED.ATAPI_Custom_PCMD
 | |
| 		LD	A,MSG0.MSG_DONE
 | |
| 		JP	MESSAGE
 | |
| 
 | |
| ; ª®¢¥àâ®à HEX ¤ ¬¯  ¢ ¡¨ àë© ä®à¬ â
 | |
| CONV_HEX	LD HL,APCMD_BUF
 | |
| 		PUSH HL
 | |
| 		LD B,12
 | |
| .L1		LD (HL),0
 | |
| 		INC HL
 | |
| 		DJNZ .L1
 | |
| 		LD HL,BUF2
 | |
| 		POP DE
 | |
| 		LD B,12				; ª®«¨ç¥á⢮ ¡ ©â ¢ ¡¨ à®¬ ¢¨¤¥
 | |
| .L2		CALL .GET_HALFBYTE
 | |
| 		RET C
 | |
| 		RRCA
 | |
| 		RRCA
 | |
| 		RRCA
 | |
| 		RRCA
 | |
| 		LD C,A				; áâ à訩 ¯®«ã¡ ©â ¨§ áâப¨
 | |
| 		CALL .GET_HALFBYTE
 | |
| 		RET C
 | |
| 		OR C				; ¤®¡¡ ¢¨«¨ ¬« ¤è¨© ¯®«ã¡ ©â
 | |
| 		LD (DE),A			; § ¥á«¨ ¡ ©â
 | |
| 		INC DE
 | |
| 		DJNZ .L2
 | |
| 		AND A
 | |
| 		RET
 | |
| 
 | |
| ; ¯®«ã票¥ ¯®«ã¡ ©â  ¨§ áâப¨
 | |
| .GET_HALFBYTE	LD A,(HL)
 | |
| 		INC HL
 | |
| 		CP '.'				; à §¤¥«¨â¥«ì ¢ HEX áâப¥ ¯à®¯ã᪠¥¬
 | |
| 		JR Z,.GET_HALFBYTE
 | |
| 		AND A
 | |
| 		SCF
 | |
| 		RET Z
 | |
| 		CP '0'
 | |
| 		RET C				; ¢ë室 ¯® ®è¨¡ª¥
 | |
| 		CP '9'+1
 | |
| 		JR C,.L3			; ®¡ à㦥  æ¨äà 
 | |
| 		AND %11011111
 | |
| 		CP 'F'+1
 | |
| 		CCF
 | |
| 		RET C				; ¢ë室 ¯® ®è¨¡ª¥
 | |
| 		CP 'A'
 | |
| 		RET C				; ¢ë室 ¯® ®è¨¡ª¥
 | |
| 		SUB 7				; ¥á«¨ í⮠ᨬ¢®« A-F
 | |
| .L3		SUB '0'				; ª®¢¥àá¨ï ¢ ¡¨ àì
 | |
| 		AND A
 | |
| 		RET
 | |
| 
 | |
| CHELP:	LD	A,MSG0.MSG_USAGE
 | |
| 	JP	MESSAGE
 | |
| 
 | |
| CCLOSE:	LD	A,MSG0.MSG_TRAY_CLOSE
 | |
| 	CALL	MESSAGE
 | |
| 	LD	A,(CDDRIVE)
 | |
| ;	LD	BC,BIOS.DRV_EXTENDED.ATAPI_Close
 | |
| ;	RST	ToBIOS
 | |
| 	SPBIOS BIOSF.DRV_EXTENDED,DRV_EXTENDED.ATAPI_Close
 | |
| 	LD	A,MSG0.MSG_DONE
 | |
| 	JP	MESSAGE
 | |
| 
 | |
| COPEN:	LD	A,MSG0.MSG_TRAY_OPEN
 | |
| 	CALL	MESSAGE
 | |
| 	LD	A,(CDDRIVE)
 | |
| ;	LD	BC,BIOS.DRV_EXTENDED.ATAPI_Eject
 | |
| ;	RST	ToBIOS
 | |
| 	SPBIOS BIOSF.DRV_EXTENDED,DRV_EXTENDED.ATAPI_Eject
 | |
| 	LD	A,MSG0.MSG_DONE
 | |
| 	JP	MESSAGE
 | |
| 
 | |
| 
 | |
| CCOPY:	CALL	CHANGEDISK
 | |
| 	JR	NC,.CH2OK
 | |
| 	JP	ERROR
 | |
| .CH2OK:	CALL	EX_COPY_PARAM
 | |
| 	LD	HL,BUF2
 | |
| 	LD	DE,FF_STRUCT
 | |
| ;	LD	A,FAT_ATTR.NoDIRnoVolID
 | |
| 		LD A,	DIR.M_Archive + \
 | |
| 			DIR.M_System + \
 | |
| 			DIR.M_Hidden + \
 | |
| 			DIR.M_ReadOnly
 | |
| 	LD	B,1
 | |
| 	CALL	F_FIRST
 | |
| 	JP	C,ERROR
 | |
| .COPIER:
 | |
| 	CALL	MAKECOPY
 | |
| 	RET	C
 | |
| 	LD	A,(COPYMODE)
 | |
| 	BIT	DSTFILE,A
 | |
| 	RET	NZ
 | |
| ;
 | |
| ;	LD	C,Dss.ScanKey
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.SCANKEY
 | |
| 	JR	Z,.NONSTOP
 | |
| 	LD	HL,0x011B	;ESC
 | |
| 	AND	A
 | |
| 	SBC	HL,DE
 | |
| 	JR	NZ,.NONSTOP
 | |
| 	LD	A,MSG0.MSG_COPYABORTED
 | |
| 	CALL	MESSAGE
 | |
| 	SCF
 | |
| 	RET
 | |
| .NONSTOP:
 | |
| 	LD	DE,FF_STRUCT
 | |
| 	CALL	F_NEXT
 | |
| 	JR	NC,.COPIER
 | |
| 	XOR	A
 | |
| 	RET
 | |
| 
 | |
| ; IFNOTFOUND
 | |
| ; 	CALL	ERROR
 | |
| ; 	RET
 | |
| 
 | |
| ;IFOK
 | |
| MAKECOPY:
 | |
| 	LD	A,(COPYMODE)
 | |
| 	BIT	SRCPATT,A
 | |
| 	JR	NZ,.WITH_SRC_PATT
 | |
| 	BIT	DSTFILE,A
 | |
| 	JR	NZ,.WITH_DST_FILE
 | |
| .WITH_SRC_PATT:
 | |
| 	LD	HL,CDFNAME
 | |
| .YCR1:	LD	A,(HL)
 | |
| 	CP	"A"
 | |
| 	JR	C,.NCR1
 | |
| 	CP	"Z"+1
 | |
| 	JR	NC,.NCR1
 | |
| 	ADD	A,0x20
 | |
| 	LD	(HL),A
 | |
| .NCR1:	OR	A
 | |
| 	INC	HL
 | |
| 	JR	NZ,.YCR1
 | |
| ;
 | |
| 	LD	HL,CDFNAME
 | |
| 	LD	DE,(SRC_PUT_ADR)
 | |
| .CZSL2:	LD	A,(HL)
 | |
| 	LDI
 | |
| 	OR	A
 | |
| 	JR	NZ,.CZSL2
 | |
| ;
 | |
| 	LD	A,(COPYMODE)
 | |
| 	BIT	DSTFILE,A
 | |
| 	JR	NZ,.WITH_DST_FILE
 | |
| ;
 | |
| 	LD	HL,CDFNAME
 | |
| 	LD	DE,(DST_PUT_ADR)
 | |
| .CZSL1:	LD	A,(HL)
 | |
| 	LDI
 | |
| 	OR	A
 | |
| 	JR	NZ,.CZSL1
 | |
| ;
 | |
| .WITH_DST_FILE:
 | |
| 	LD	HL,BUF3
 | |
| 	LD	A,(CDFATTR)
 | |
| ;	LD	C,Dss.Create
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.CREATE
 | |
| 	JR	NC,.OFOK
 | |
| 	LD	A,MSG0.MSG_ERR_DEST
 | |
| 	CALL	MESSAGE
 | |
| 	SCF
 | |
| 	RET
 | |
| 	;
 | |
| .OFOK:	LD	(FHND),A
 | |
| 	LD	A,MSG0.MSG_COPYFILE
 | |
| 	CALL	MESSAGE
 | |
| 	LD	HL,BUF2
 | |
| ;	LD	C,Dss.PChars
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.PCHARS
 | |
| 	LD	A,MSG0.MSG_COPYTO
 | |
| 	CALL	MESSAGE
 | |
| 	LD	HL,BUF3
 | |
| ;	LD	C,Dss.PChars
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.PCHARS
 | |
| ;	LD	A," "
 | |
| ;	LD	C,Dss.PutChar
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.PUTCHAR,,' '
 | |
| 	LD	IX,FF_STRUCT
 | |
| 
 | |
| 	LD	E,(IX+LEN1)
 | |
| 	LD	D,(IX+LEN2)
 | |
| 	LD	(CL_SIZE),DE
 | |
| 	LD	E,(IX+LEN3)
 | |
| 	LD	D,(IX+LEN4)
 | |
| 	LD	(CH_SIZE),DE
 | |
| 
 | |
| 	LD	E,(IX+CLU1)
 | |
| 	LD	D,(IX+CLU2)
 | |
| 	LD	(CL_OFFSET),DE
 | |
| 	LD	E,(IX+CLU3)
 | |
| 	LD	D,(IX+CLU4)
 | |
| 	LD	(CH_OFFSET),DE
 | |
| .CDCOPY_LOOP:
 | |
| 	CALL	RCDFSB		;!!!!!
 | |
| 	JR	C,.COPY_FAULT
 | |
| 	CALL	WDATAB
 | |
| 	JR	C,.COPY_FAULT
 | |
| 	JR	NZ,.CDCOPY_LOOP
 | |
| ;
 | |
| 	LD	DE,(CDFTIME)
 | |
| 	LD	BC,(CDFDATE)
 | |
| 	CALL	RMKTIME
 | |
| 	LD	A,(FHND)
 | |
| ;	LD	C,Dss.Put_D_T	;COPY DATE AND TIME
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.PUT_D_T
 | |
| ;
 | |
| 	LD	A,(FHND)
 | |
| ;	LD	C,Dss.Close
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.CLOSE
 | |
| 	LD	A,MSG0.MSG_DONE
 | |
| 	CALL	MESSAGE
 | |
| 	AND	A
 | |
| 	RET
 | |
| .COPY_FAULT:
 | |
| 	LD	A,(FHND)
 | |
| ;	LD	C,Dss.Close
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.CLOSE
 | |
| 	SCF
 | |
| 	RET
 | |
| 
 | |
| EX_COPY_PARAM
 | |
| 	LD	HL,BUF2	;SOURCE
 | |
| 	LD	BC,255
 | |
| 	XOR	A
 | |
| 	CPIR
 | |
| 	DEC	HL
 | |
| 	EX	DE,HL
 | |
| 	LD	HL,256
 | |
| 	AND	A
 | |
| 	SBC	HL,BC
 | |
| 	LD	B,H
 | |
| 	LD	C,L
 | |
| 	EX	DE,HL
 | |
| 	LD	A,'\\'
 | |
| 	CPDR
 | |
| 	INC	HL
 | |
| 	INC	HL
 | |
| 	LD	(SRC_PUT_ADR),HL
 | |
| ;
 | |
| 	LD	HL,BUF2
 | |
| ;	LD	BC,Dss.EX_Path.GET_ALL
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.EX_PATH,EX_PATH.GET_ALL
 | |
| 	AND	0x80
 | |
| 	LD	A,(COPYMODE)
 | |
| 	SET	SRCPATT,A
 | |
| 	JR	NZ,.NOPATSR
 | |
| 	RES	SRCPATT,A
 | |
| .NOPATSR:
 | |
| 	LD	(COPYMODE),A
 | |
| 	LD	HL,BUF3	;DESTINATION
 | |
| ;	LD	BC,Dss.EX_Path.GET_ALL
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.EX_PATH,EX_PATH.GET_ALL
 | |
| 	AND	0x81	;PATTERN & FILENAME
 | |
| 	CP	0x01	;IF FILENAME=1 AND PATTERN=0
 | |
| 	LD	A,(COPYMODE)
 | |
| 	SET	DSTFILE,A
 | |
| 	JR	Z,.SINGC1
 | |
| 	RES	DSTFILE,A
 | |
| .SINGC1:
 | |
| 	LD	(COPYMODE),A
 | |
| 	RET	Z
 | |
| 	LD	HL,BUF3
 | |
| 	LD	BC,255
 | |
| 	XOR	A
 | |
| 	CPIR		;MOVE TO END OF STRING
 | |
| 	DEC	HL	;MOVE TO ZERO-CHAR
 | |
| 	DEC	HL	;MOVE TO LAST CHAR
 | |
| 	LD	A,(HL)	;GET LAST CHAR
 | |
| 	INC	HL	;MOVE TO ZERO-CHAR
 | |
| 	CP	'\\'	;IS IT BACKSLASH?
 | |
| 	LD	(DST_PUT_ADR),HL ;SAVE END ADDRESS
 | |
| 	RET	Z
 | |
| 	LD	A,'\\'
 | |
| 	LD	(HL),A	;PUT BACKSLASH TO THE END OF STRING
 | |
| 	INC	HL	;MOVE TO THE NEW END OF STRING
 | |
| 	LD	(DST_PUT_ADR),HL ;SAVE END ADDRESS
 | |
| 	LD	(HL),0	;PUT ZERO CHAR
 | |
| 	RET
 | |
| 
 | |
| DSTFILE		EQU	0	;SPECIFIED DESTINATION FILENAME
 | |
| SRCPATT		EQU	3	;SPECIFIED SOURCE PATTERN A??.*
 | |
| 
 | |
| COPYMODE	DB	0
 | |
| 
 | |
| SRC_PUT_ADR	DW	BUF2
 | |
| DST_PUT_ADR	DW	BUF3
 | |
| 
 | |
| CL_OFFSET	DW	0
 | |
| CH_OFFSET	DW	0
 | |
| CL_SIZE		DW	0
 | |
| CH_SIZE		DW	0
 | |
| BYTECOUNTER	DW	0
 | |
| 
 | |
| WDATAB:	LD	DE,(BYTECOUNTER)
 | |
| 	LD	A,D
 | |
| 	OR	E
 | |
| 	RET	Z
 | |
| 	LD	HL,0xC000
 | |
| 	LD	A,(FHND)
 | |
| ;	LD	C,Dss.Write
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.WRITE
 | |
| 	JR	C,.WRDERR
 | |
| 	XOR	A
 | |
| 	INC	A
 | |
| 	RET
 | |
| .WRDERR:
 | |
| 	LD	A,MSG0.MSG_FAILURE
 | |
| 	CALL	MESSAGE
 | |
| 	CALL	CRLF
 | |
| 	LD	A,MSG0.MSG_F_WRITE_ERR
 | |
| 	CALL	MESSAGE
 | |
| 	XOR	A
 | |
| 	SCF
 | |
| 	RET
 | |
| 
 | |
| RCDFSB:	LD	HL,(CL_SIZE)
 | |
| 	LD	DE,(CH_SIZE)
 | |
| 	LD	A,H
 | |
| 	OR	L
 | |
| 	OR	D
 | |
| 	OR	E
 | |
| 	LD	BC,0
 | |
| 	LD	(BYTECOUNTER),BC
 | |
| 	RET	Z		;SIZE = 0
 | |
| 	AND	A
 | |
| 	LD	BC,0x4000	;BLOCKSIZE
 | |
| 	SBC	HL,BC
 | |
| 	LD	B,C
 | |
| 	EX	DE,HL
 | |
| 	SBC	HL,BC
 | |
| 	EX	DE,HL
 | |
| 	LD	BC,0x4000
 | |
| 	JR	NC,.RC_NOCAR
 | |
| ;CORRECT RESULT
 | |
| 	ADD	HL,BC
 | |
| 	LD	B,C
 | |
| 	EX	DE,HL
 | |
| 	ADC	HL,BC
 | |
| 	EX	DE,HL
 | |
| 	LD	B,H
 | |
| 	LD	C,L
 | |
| 	LD	HL,0
 | |
| 	LD	DE,0
 | |
| .RC_NOCAR:
 | |
| 	LD	(CL_SIZE),HL
 | |
| 	LD	(CH_SIZE),DE
 | |
| 	LD	(BYTECOUNTER),BC
 | |
| 	;
 | |
| 	LD	A,B
 | |
| 	SRL	B
 | |
| 	SRL	B
 | |
| 	SRL	B
 | |
| 	AND	0x07
 | |
| 	OR	C
 | |
| 	JR	Z,.RC_EVEN_NUM
 | |
| 	INC	B
 | |
| .RC_EVEN_NUM:
 | |
| 	LD	A,B
 | |
| 	LD	C,B
 | |
| 	LD	B,0
 | |
| 	;
 | |
| 	LD	IX,(CL_OFFSET)
 | |
| 	LD	HL,(CH_OFFSET)
 | |
| 	PUSH	IX
 | |
| 	PUSH	HL
 | |
| 	ADD	IX,BC
 | |
| 	LD	C,B
 | |
| 	ADC	HL,BC
 | |
| 	LD	(CL_OFFSET),IX
 | |
| 	LD	(CH_OFFSET),HL
 | |
| 	POP	HL
 | |
| 	POP	IX
 | |
| 	LD	B,A
 | |
| 	LD	A,(CDDRIVE)
 | |
| 	LD	DE,0xC000
 | |
| ;	LD	C,BIOS.DRV_READ
 | |
| ;	RST	ToBIOS
 | |
| 	SPBIOS BIOSF.DRV_READ
 | |
| 	LD	BC,(BYTECOUNTER)
 | |
| 	RET	NC
 | |
| 	LD	A,MSG0.MSG_FAILURE
 | |
| 	CALL	MESSAGE
 | |
| 	CALL	CRLF
 | |
| 	LD	A,MSG0.MSG_CD_READ_ERR
 | |
| 	CALL	MESSAGE
 | |
| 	SCF
 | |
| 	RET
 | |
| 
 | |
| 
 | |
| FHND	DB	0xFF
 | |
| 
 | |
| ;----------------------
 | |
| CDIR:	CALL	CHANGEDISK
 | |
| 	JP	C,ERROR
 | |
| 	LD	HL,BUF2
 | |
| 	LD	A,(HL)
 | |
| 	OR	A
 | |
| 	JR	NZ,.NODEFD
 | |
| 	LD	HL,DEFDIR
 | |
| 	JR	.PATPRESNT
 | |
| .NODEFD:
 | |
| ;	LD	BC,Dss.EX_Path.GET_ALL
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.EX_PATH,EX_PATH.GET_ALL
 | |
| 	BIT	7,A	;PATTERN
 | |
| 	LD	HL,BUF2
 | |
| 	JR	NZ,.PATPRESNT
 | |
| 	;
 | |
| 	LD	BC,255
 | |
| 	XOR	A
 | |
| 	CPIR		;MOVE TO END OF STRING
 | |
| 	DEC	HL	;MOVE TO ZERO-CHAR
 | |
| 	DEC	HL	;MOVE TO LAST CHAR
 | |
| 	LD	A,(HL)	;GET LAST CHAR
 | |
| 	INC	HL	;MOVE TO ZERO-CHAR
 | |
| 	CP	'\\'	;IS IT BACKSLASH?
 | |
| 	JR	Z,.WITHSL9
 | |
| 	LD	A,'\\'
 | |
| 	LD	(HL),A	;PUT BACKSLASH TO THE END OF STRING
 | |
| 	INC	HL	;MOVE TO THE NEW END OF STRING
 | |
| .WITHSL9:
 | |
| 	LD	A,"*"
 | |
| 	LD	(HL),A
 | |
| 	INC	HL
 | |
| 	LD	(HL),"."
 | |
| 	INC	HL
 | |
| 	LD	(HL),A
 | |
| 	INC	HL
 | |
| 	LD	(HL),0
 | |
| 	LD	HL,BUF2
 | |
| .PATPRESNT
 | |
| 	LD	DE,FF_STRUCT
 | |
| ;	LD	A,FAT_ATTR.NoVolID
 | |
| 		LD A,	DIR.M_Archive + \
 | |
| 			DIR.M_Dir + \
 | |
| 			DIR.M_System + \
 | |
| 			DIR.M_Hidden + \
 | |
| 			DIR.M_ReadOnly
 | |
| 	LD	B,0
 | |
| 	CALL	F_FIRST
 | |
| 	JP	C,ERROR
 | |
| .CDIR_HEAD:
 | |
| 	LD	A,MSG0.MSG_DIRHEAD
 | |
| 	CALL	MESSAGE
 | |
| 	LD	HL,DIRSPEC
 | |
| ;	LD	C,Dss.PChars
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.PCHARS
 | |
| 	CALL	CRLF
 | |
| 	CALL	CRLF
 | |
| .CDIR_LOOP:
 | |
| 	LD	HL,CDFNAME
 | |
| 	CALL	PNAME
 | |
| 	LD	DE,FF_STRUCT
 | |
| 	CALL	F_NEXT
 | |
| 	JR	NC,.CDIR_LOOP
 | |
| 	RET
 | |
| 
 | |
| ; FF_STRUCT
 | |
| ; 	DB	"12345678"
 | |
| ; 	DB	"123"
 | |
| ; 	DB	0x00
 | |
| ; 	DW	0,0,0,0
 | |
| ; CDFPOSH	DW	0	;CLUSTER HIGH
 | |
| ; CDFTIME	DW	0	;TIME
 | |
| ; CDFDATE	DW	0	;DATE
 | |
| ; CDFPOSL	DW	0	;CLUSTER
 | |
| ; CDFSIZE	DW	0,0	;SIZE
 | |
| ; CDFATTR	DB	0x00	;ATTR
 | |
| ; CDFNAME	DB	"12345678123",0
 | |
| ; ;	DS	44
 | |
| ; 	DS	256-($-FF_STRUCT)
 | |
| 
 | |
| PNAME	LD	BC,8
 | |
| 	LD	DE,PRM1
 | |
| 	LDIR
 | |
| 	XOR	A
 | |
| 	LD	(DE),A
 | |
| 	LD	DE,PRM2
 | |
| 	LDI
 | |
| 	LDI
 | |
| 	LDI
 | |
| 	LD	(DE),A
 | |
| 	LD	IX,FF_STRUCT
 | |
| 	CALL	PRNSIZE
 | |
| 	CALL	PRNDATE
 | |
| 	CALL	PRNTIME
 | |
| 	LD	A,MSG0.MSG_DIRENTRY
 | |
| 	JP	MESSAGE
 | |
| 
 | |
| PRNDATE	LD	B,(IX+25)
 | |
| 	LD	C,(IX+24)
 | |
| 	LD	HL,SIZEBFF
 | |
| 	CALL	DATE_
 | |
| 	LD	(HL),0
 | |
| 	LD	HL,SIZEBFF
 | |
| 	LD	DE,PRM4
 | |
| 	LD	A,(HL)
 | |
| 	CP	"0"
 | |
| 	JP	NZ,PUTPRM
 | |
| 	LD	(HL),0x20
 | |
| 	JP	PUTPRM
 | |
| 
 | |
| PRNTIME	LD	B,(IX+22)
 | |
| 	LD	C,(IX+23)
 | |
| 	LD	HL,SIZEBFF
 | |
| 	CALL	TIME_
 | |
| 	LD	(HL),0
 | |
| 	LD	HL,SIZEBFF
 | |
| 	LD	DE,PRM5
 | |
| 	LD	A,(HL)
 | |
| 	CP	"0"
 | |
| 	JP	NZ,PUTPRM
 | |
| 	LD	(HL),0x20
 | |
| 	JP	PUTPRM
 | |
| 
 | |
| TIME_:	SRL	C
 | |
| 	RR	B
 | |
| 	SRL	C
 | |
| 	RR	B
 | |
| 	SRL	C
 | |
| 	RR	B
 | |
| 	SRL	B
 | |
| 	SRL	B
 | |
| 	LD	A,C
 | |
| 	CALL	NUMB
 | |
| 	LD	(HL),":"
 | |
| 	INC	HL
 | |
| 	LD	A,B
 | |
| 	JP	NUMB
 | |
| 
 | |
| DATE_:	LD	A,C
 | |
| 	AND	0x1F
 | |
| 	PUSH	BC
 | |
| 	CALL	NUMB
 | |
| 	LD	(HL),"."
 | |
| 	INC	HL
 | |
| 	POP	BC
 | |
| 	LD	A,C
 | |
| 	SRL	B
 | |
| 	RLA
 | |
| 	RLA
 | |
| 	RLA
 | |
| 	RLA
 | |
| 	AND	0x0F
 | |
| 	CALL	NUMB
 | |
| 	LD	(HL),"."
 | |
| 	INC	HL
 | |
| 	LD	A,B
 | |
| 	ADD	A,0x50
 | |
| 	CP	100
 | |
| 	JP	C,NUMB
 | |
| .SUB100:
 | |
| 	SUB	100
 | |
| 	CP	100
 | |
| 	JP	C,NUMB
 | |
| 	JR	.SUB100
 | |
| 
 | |
| NUMB:	LD	C,0x2F
 | |
| .NUMB1:	INC	C
 | |
| 	SUB	10
 | |
| 	JP	NC,.NUMB1
 | |
| 	ADD	A,10
 | |
| 	ADD	A,0x30
 | |
| 	LD	(HL),C
 | |
| 	INC	HL
 | |
| 	LD	(HL),A
 | |
| 	INC	HL
 | |
| 	RET
 | |
| 
 | |
| PRNSIZE	LD	A,(IX+32)
 | |
| 	LD	HL,DIRIDD
 | |
| 	AND	0x10
 | |
| 	JP	NZ,.PRZ
 | |
| 	LD	L,(IX+28)
 | |
| 	LD	H,(IX+29)
 | |
| 	EXX
 | |
| 	LD	L,(IX+30)
 | |
| 	LD	H,(IX+31)
 | |
| 	EXX
 | |
| 	PUSH	IX
 | |
| 	CALL	MAKE_LN
 | |
| 	LD	HL,L32BIT_+9
 | |
| 	LD	A,(HL)
 | |
| 	CP	0x20
 | |
| 	JR	NZ,.ALR
 | |
| 	LD	A,0x30
 | |
| 	LD	(HL),A
 | |
| .ALR:	LD	DE,SIZEBFF
 | |
| 	LD	HL,L32BIT_;; +1
 | |
| 	LDI
 | |
| 	LD	A," "
 | |
| 	LD	(DE),A
 | |
| 	INC	DE
 | |
| 	LDI
 | |
| 	LDI
 | |
| 	LDI
 | |
| 	LD	(DE),A
 | |
| 	INC	DE
 | |
| 	LDI
 | |
| 	LDI
 | |
| 	LDI
 | |
| 	LD	(DE),A
 | |
| 	INC	DE
 | |
| 	LDI
 | |
| 	LDI
 | |
| 	LDI
 | |
| 	LD	HL,SIZEBFF
 | |
| 	POP	IX
 | |
| .PRZ:	LD	DE,PRM3
 | |
| 	JP	PUTPRM
 | |
| 
 | |
| MAKE_LN:
 | |
| 	LD	IX,L32BIT_
 | |
| 	EXX
 | |
| 	LD	DE,0x3B9A ; 1000000000
 | |
| 	EXX
 | |
| 	LD	DE,0xCA00
 | |
| 	CALL	GET_DIG
 | |
| 	EXX
 | |
| 	LD	DE,0x05F5 ; 100000000
 | |
| 	EXX
 | |
| 	LD	DE,0xE100
 | |
| 	CALL	GET_DIG
 | |
| 	EXX
 | |
| 	LD	DE,0x0098 ; 10000000
 | |
| 	EXX
 | |
| 	LD	DE,0x9680
 | |
| 	CALL	GET_DIG
 | |
| 	EXX
 | |
| 	LD	DE,0x000F ; 1000000
 | |
| 	EXX
 | |
| 	LD	DE,0x4240
 | |
| 	CALL	GET_DIG
 | |
| 	EXX
 | |
| 	LD	DE,0x0001 ; 100000
 | |
| 	EXX
 | |
| 	LD	DE,0x86A0
 | |
| 	CALL	GET_DIG
 | |
| 	EXX
 | |
| 	LD	DE,0x0000 ; 10000
 | |
| 	EXX
 | |
| 	LD	DE,0x2710
 | |
| 	CALL	GET_DIG
 | |
| 	EXX
 | |
| 	LD	DE,0x0000 ; 1000
 | |
| 	EXX
 | |
| 	LD	DE,0x03E8
 | |
| 	CALL	GET_DIG
 | |
| 	EXX
 | |
| 	LD	DE,0x0000 ; 100
 | |
| 	EXX
 | |
| 	LD	DE,0x0064
 | |
| 	CALL	GET_DIG
 | |
| 	EXX
 | |
| 	LD	DE,0x0000 ; 10
 | |
| 	EXX
 | |
| 	LD	DE,0x000A
 | |
| 	CALL	GET_DIG
 | |
| 	LD	A,L	 ; 1
 | |
| 	ADD	A,0x30
 | |
| 	LD	(IX+0),A
 | |
| 	INC	IX
 | |
| 	LD	HL,L32BIT_
 | |
| 	LD	DE,0x2030
 | |
| 	;
 | |
| .KILLZ:	LD	A,(HL)
 | |
| 	CP	E
 | |
| 	JR	NZ,.KILLZ2
 | |
| 	LD	(HL),D
 | |
| 	INC	HL
 | |
| 	JP	.KILLZ
 | |
| .KILLZ2:
 | |
| 	LD	HL,L32BIT_+9
 | |
| 	LD	A,(HL)
 | |
| 	CP	D
 | |
| 	RET	NZ
 | |
| 	LD	(HL),E
 | |
| 	RET
 | |
| 
 | |
| ; HL:HL	- DE:DE
 | |
| 
 | |
| GET_DIG:
 | |
| 	XOR	A
 | |
| .INC_DG:
 | |
| 	INC	A
 | |
| 	SBC	HL,DE
 | |
| 	EXX
 | |
| 	SBC	HL,DE
 | |
| 	EXX
 | |
| 	JP	NC,.INC_DG
 | |
| 	ADD	HL,DE
 | |
| 	EXX
 | |
| 	ADC	HL,DE
 | |
| 	EXX
 | |
| 	DEC	A
 | |
| 	ADD	A,0x30
 | |
| 	LD	(IX+0),A
 | |
| 	INC	IX
 | |
| 	RET
 | |
| 
 | |
| L32BIT_	DB	"0000000000"
 | |
| 
 | |
| DIRIDD	DB	"<DIR>        ",0
 | |
| 
 | |
| SIZEBFF	DB	"0 000 000 000",0,0
 | |
| 
 | |
| DEFDIR	DB	0x5C,"*.*",0
 | |
| 
 | |
| ;------------------------
 | |
| 
 | |
| CDUMP:	LD	HL,BUF2
 | |
| 	LD	BC,0x0000
 | |
| 	CALL	GETNUM
 | |
| ;	LD	XL,C
 | |
| ;	LD	XH,0
 | |
| ;	LD	HL,0
 | |
| 	LD	A,(CDDRIVE)
 | |
| 	LD	DE,DUMPBUF
 | |
| ;	LD	BC,1*256 + BIOS.DRV_READ
 | |
| ;	RST	ToBIOS
 | |
| 	SPBIOS BIOSF.DRV_READ,1
 | |
| 	JR	C,.DMPERR
 | |
| 	;
 | |
| 	LD	HL,BUF3
 | |
| 	CALL	GETNUM
 | |
| 	PUSH	IX
 | |
| 	POP	BC
 | |
| 	LD	A,B
 | |
| 	AND	0x07
 | |
| 	LD	B,A
 | |
| 	LD	HL,2048-0x01C0
 | |
| 	AND	A
 | |
| 	SBC	HL,BC
 | |
| 	JR	NC,.GOODOFFS
 | |
| 	LD	BC,2048-0x01C0
 | |
| .GOODOFFS:
 | |
| 	LD	HL,DUMPBUF
 | |
| 	ADD	HL,BC
 | |
| 	;
 | |
| 	CALL	DUMP
 | |
| 	JP	CRLF
 | |
| .DMPERR:
 | |
| 	LD	A,MSG0.MSG_IO_ERROR
 | |
| 	JP	MESSAGE
 | |
| 	;
 | |
| 
 | |
| GETNUM:	EXX
 | |
| 	LD	IX,0
 | |
| 	LD	HL,0
 | |
| 	EXX
 | |
| .GETNUM0:
 | |
| 	LD	A,(HL)
 | |
| 	OR	A
 | |
| 	JR	Z,.EGETN
 | |
| 	INC	HL
 | |
| 	CP	"0"
 | |
| 	JR	C,.GETNUM0
 | |
| 	CP	"9"+1
 | |
| 	JR	NC,.GETNUM0
 | |
| 	SUB	"0"
 | |
| 	;
 | |
| 	EXX
 | |
| 	PUSH	IX	;
 | |
| 	PUSH	HL
 | |
| 	POP	DE
 | |
| 	POP	BC	;LD DE:BC,HL:IX
 | |
| 	;
 | |
| 	ADD	IX,IX
 | |
| 	ADC	HL,HL	;x2
 | |
| 	ADD	IX,IX
 | |
| 	ADC	HL,HL	;x4
 | |
| 	ADD	IX,BC
 | |
| 	ADC	HL,DE	;x5
 | |
| 	ADD	IX,IX
 | |
| 	ADC	HL,HL	;x10
 | |
| 	;
 | |
| 	LD	C,A
 | |
| 	LD	B,0
 | |
| 	ADD	IX,BC
 | |
| 	LD	C,B
 | |
| 	ADC	HL,BC
 | |
| 	EXX
 | |
| 	JR	.GETNUM0
 | |
| .EGETN:	EXX
 | |
| 	;PUSH	IX
 | |
| 	PUSH	HL
 | |
| 	EXX
 | |
| 	POP	HL
 | |
| 	;POP	IX
 | |
| 	RET
 | |
| ;;;;;;;;;;;;;;;
 | |
| ;	LD	A,(HL)
 | |
| ;	OR	A
 | |
| ;	RET	Z
 | |
| ;	INC	HL
 | |
| ;	CP	"0"
 | |
| ;	JR	C,GETNUM
 | |
| ;	CP	"9"+1
 | |
| ;	JR	NC,GETNUM
 | |
| ;	SUB	"0"
 | |
| ;	LD	B,A
 | |
| ;
 | |
| ;	LD	A,C
 | |
| ;	ADD	A,A
 | |
| ;	ADD	A,A
 | |
| ;	ADD	A,C
 | |
| ;	ADD	A,A
 | |
| ;
 | |
| ;	ADD	A,B
 | |
| ;	LD	C,A
 | |
| ;	JR	GETNUM
 | |
| ;;;;;;;;;;;;;;;;
 | |
| 
 | |
| UPDUMP:	DB	"      +00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F   0123456789ABCDEF \r\n"
 | |
| 	DZ	"      -------------------------------------------------- +----------------+"
 | |
| 
 | |
| 
 | |
| DUMP:	PUSH	HL
 | |
| 	LD	HL,UPDUMP
 | |
| ;	LD	C,Dss.PChars
 | |
| ;	RST	ToDSS
 | |
| 	SPDSS DSSF.PCHARS
 | |
| 	POP	HL
 | |
| 	LD	BC,0x1C00
 | |
| .L1:	PUSH	BC
 | |
| 	PUSH	BC
 | |
| 	CALL	CRLF
 | |
| 	;
 | |
| 	LD	DE,DUMPBUF
 | |
| 	AND	A
 | |
| 	SBC	HL,DE
 | |
| 	LD	A,L
 | |
| 	PUSH	AF
 | |
| 	LD	A,H
 | |
| 	ADD	HL,DE
 | |
| 	;
 | |
| 	CALL	PHEX
 | |
| 	POP	AF
 | |
| 	CALL	PHEX
 | |
| 	LD	A,":"
 | |
| 	CALL	PRNCHAR
 | |
| 	LD	A," "
 | |
| 	CALL	PRNCHAR
 | |
| 	LD	A," "
 | |
| 	CALL	PRNCHAR
 | |
| 	POP	BC
 | |
| 	PUSH	HL
 | |
| 	;
 | |
| 	LD	B,0x08
 | |
| .L2:	PUSH	BC
 | |
| 	LD	A,(HL)
 | |
| 	INC	HL
 | |
| 	CALL	PHEX
 | |
| 	LD	A," "
 | |
| 	CALL	PRNCHAR
 | |
| 	POP	BC
 | |
| 	INC	C
 | |
| 	DJNZ	.L2
 | |
| 	;
 | |
| 	LD	A," "
 | |
| 	CALL	PRNCHAR
 | |
| 	;
 | |
| 	LD	B,0x08
 | |
| .L2_00:	PUSH	BC
 | |
| 	LD	A,(HL)
 | |
| 	INC	HL
 | |
| 	CALL	PHEX
 | |
| 	LD	A," "
 | |
| 	CALL	PRNCHAR
 | |
| 	POP	BC
 | |
| 	INC	C
 | |
| 	DJNZ	.L2_00
 | |
| 	;
 | |
| 	LD	A," "
 | |
| 	CALL	PRNCHAR
 | |
| 	;
 | |
| 	LD	A,"|"
 | |
| 	CALL	PRNCHAR
 | |
| 	POP	HL
 | |
| 	LD	B,0x10
 | |
| .LLL:	LD	A,(HL)
 | |
| 	INC	HL
 | |
| 	PUSH	BC
 | |
| 	CALL	PRINT_
 | |
| 	POP	BC
 | |
| 	DJNZ	.LLL
 | |
| 	LD	A,"|"
 | |
| 	CALL	PRNCHAR
 | |
| 	;
 | |
| 	LD	A,C
 | |
| 	POP	BC
 | |
| 	LD	C,A
 | |
| 	DJNZ	.L1
 | |
| 	RET
 | |
| 
 | |
| PHEX:	LD	E,A
 | |
| 	RRCA
 | |
| 	RRCA
 | |
| 	RRCA
 | |
| 	RRCA
 | |
| 	AND	0x0F
 | |
| 	ADD	A,0x30
 | |
| 	CP	0x3A
 | |
| 	JR	C,.PHEX2
 | |
| 	ADD	A,7
 | |
| .PHEX2:	CALL	PRINT_
 | |
| 	LD	A,E
 | |
| 	AND	0x0F
 | |
| 	ADD	A,0x30
 | |
| 	CP	0x3A
 | |
| 	JR	C,.PHEX3
 | |
| 	ADD	A,7
 | |
| .PHEX3:	CALL	PRINT_
 | |
| 	RET
 | |
| 
 | |
| PRNCHAR:
 | |
| ;	LD	C,Dss.PutChar
 | |
| ;	JP	ToDSS
 | |
| 	SPDSS DSSF.PUTCHAR
 | |
| 		RET
 |