1103 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1103 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | ||
| ; LAST UPDATE: 13.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	'a'	;0x61
 | ||
| 	JP	C,COMP001
 | ||
| 	CP	'z'+1	;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		DZ "CLOSE"
 | ||
| 		DW CCLOSE
 | ||
| 		DZ "COPY"
 | ||
| 		DW CCOPY
 | ||
| 		DZ "DUMP"
 | ||
| 		DW CDUMP
 | ||
| 		DZ "EJECT"
 | ||
| 		DW COPEN
 | ||
| 		DZ "HELP"
 | ||
| 		DW CHELP
 | ||
| 		DZ "LIST"
 | ||
| 		DW CDIR
 | ||
| 		DZ "OPEN"
 | ||
| 		DW COPEN
 | ||
| 		DZ "SECTORDUMP"
 | ||
| 		DW CDUMP
 | ||
| 		DZ "SEND"
 | ||
| 		DW SENDPACKET
 | ||
| 		DZ "READTOC"
 | ||
| 		DW READTOC
 | ||
| 		DZ "CLOSETOC"
 | ||
| 		DW CLOSETOC
 | ||
| 		DB 0
 | ||
| 
 | ||
| RESULT		EQU DUMPBUF + 3000
 | ||
| 
 | ||
| CLOSETOC	LD A,MSG0.MSG_CLOSETRAY_READTOC
 | ||
| 		CALL MESSAGE
 | ||
| 		LD HL,APCMD.CLOSETRAY
 | ||
| 		CALL SENDPAKET
 | ||
| 		JR READTOC.L2
 | ||
| 
 | ||
| READTOC		LD A,MSG0.MSG_READTOC
 | ||
| 		CALL MESSAGE
 | ||
| .L2		LD A,0xAA
 | ||
| 		LD (RESULT + 6),A
 | ||
| 		LD HL,APCMD.READTOC
 | ||
| 		CALL SENDPAKET
 | ||
| 		LD HL,RESULT-2
 | ||
| 		LD B,0xFF
 | ||
| 		LD DE,8
 | ||
| .L1		INC B
 | ||
| 		ADD HL,DE
 | ||
| 		LD A,(HL)
 | ||
| 		CP 0xAA
 | ||
| 		JR NZ,.L1
 | ||
| 		LD A,B
 | ||
| 		CALL A2HEX
 | ||
| 		LD HL,MSG0.MRR2
 | ||
| 		LD (HL),B
 | ||
| 		INC HL
 | ||
| 		LD (HL),A
 | ||
| 		LD A,(RESULT)
 | ||
| 		CALL A2HEX
 | ||
| 		LD HL,MSG0.MRR1
 | ||
| 		LD (HL),B
 | ||
| 		INC HL
 | ||
| 		LD (HL),A
 | ||
| 		LD A,MSG0.MSG_RESULT_READTOC
 | ||
| 		JP MESSAGE
 | ||
| 
 | ||
| SENDPAKET	LD DE,RESULT
 | ||
| 		LD A,(CDDRIVE)
 | ||
| 	SPBIOS BIOSF.DRV_EXTENDED,DRV_EXTENDED.ATAPI_Custom_PCMD
 | ||
| 		RET
 | ||
| 
 | ||
| A2HEX		PUSH AF
 | ||
| 		AND %11110000
 | ||
| 		RRCA
 | ||
| 		RRCA
 | ||
| 		RRCA
 | ||
| 		RRCA
 | ||
| 		CALL .L2
 | ||
| 		LD B,A
 | ||
| 		POP AF
 | ||
| 		AND %00001111
 | ||
| .L2		ADD A,'0'
 | ||
| 		CP '9'+1
 | ||
| 		RET C
 | ||
| 		ADD A,7
 | ||
| 		RET
 | ||
| 
 | ||
| APCMD
 | ||
| .READTOC	DB 0x43,0x02,0x00,0x00,0x00,0x00,0x01,0x03,0x24,0x00,0x00,0x00
 | ||
| .CLOSETRAY	DB 0x1B,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 | ||
| 
 | ||
| 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
 | ||
| 
 | ||
| ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HEX <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ଠ<EFBFBD>
 | ||
| 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				; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>୮<EFBFBD> <20><><EFBFBD><EFBFBD>
 | ||
| .L2		CALL .GET_HALFBYTE
 | ||
| 		RET C
 | ||
| 		RRCA
 | ||
| 		RRCA
 | ||
| 		RRCA
 | ||
| 		RRCA
 | ||
| 		LD C,A				; <20><><EFBFBD><EFBFBD>訩 <20><><EFBFBD>㡠<EFBFBD><E3A1A0> <20><> <20><>ப<EFBFBD>
 | ||
| 		CALL .GET_HALFBYTE
 | ||
| 		RET C
 | ||
| 		OR C				; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>訩 <20><><EFBFBD>㡠<EFBFBD><E3A1A0>
 | ||
| 		LD (DE),A			; <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | ||
| 		INC DE
 | ||
| 		DJNZ .L2
 | ||
| 		AND A
 | ||
| 		RET
 | ||
| 
 | ||
| ; <20><><EFBFBD><EFBFBD>祭<EFBFBD><E7A5AD> <20><><EFBFBD>㡠<EFBFBD><E3A1A0><EFBFBD> <20><> <20><>ப<EFBFBD>
 | ||
| .GET_HALFBYTE	LD A,(HL)
 | ||
| 		INC HL
 | ||
| 		CP '.'				; ࠧ<><E0A0A7><EFBFBD><EFBFBD>⥫<EFBFBD> <20> HEX <20><>ப<EFBFBD> <20>ய<EFBFBD>᪠<EFBFBD><E1AAA0>
 | ||
| 		JR Z,.GET_HALFBYTE
 | ||
| 		AND A
 | ||
| 		SCF
 | ||
| 		RET Z
 | ||
| 		CP '0'
 | ||
| 		RET C				; <20><>室 <20><> <20>訡<EFBFBD><E8A8A1>
 | ||
| 		CP '9'+1
 | ||
| 		JR C,.L3			; <20><><EFBFBD><EFBFBD><EFBFBD>㦥<EFBFBD><E3A6A5> <20><><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		AND %11011111
 | ||
| 		CP 'F'+1
 | ||
| 		CCF
 | ||
| 		RET C				; <20><>室 <20><> <20>訡<EFBFBD><E8A8A1>
 | ||
| 		CP 'A'
 | ||
| 		RET C				; <20><>室 <20><> <20>訡<EFBFBD><E8A8A1>
 | ||
| 		SUB 7				; <20> <20><><EFBFBD> ᨬ<><E1A8AC><EFBFBD> A-F
 | ||
| .L3		SUB '0'				; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		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
 | 
