ADDRES ;		* * * * * * * * * * * * *
 ;		*  PROGRAM BY KIM WATT  *
 ;		* BREEZE COMPUTING INC. *
 ;		*     P.O. BOX  1013    *
 ;		* BERKLEY, MICH.  48072 *
 ;		*    (313)  288-9422    *
 ;		* * * * * * * * * * * * *											
 	ORG	7000H
 READAD	LD	A,1		;SELECT DRIVE 0
 	LD	(37E1H),A	;PERFORM
 	LD	HL,37ECH	;CONTROLLER ADDRESS
 	LD	A,(HL)		;RESET THE LATCH
 	LD	A,1BH		;SEEK BYTE
 	LD	(HL),A		;PASS TO CONTROLLER
 	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 WAIT	BIT	0,(HL)		;COMMAND IN PROGRESS ?
 	JR	NZ,WAIT		;DONE WITH MACRO
 	LD	BC,BUFFER	;6 BYTE BUFFER FOR ID
 	LD	A,0C4H		;READ ADDRESS MARK BYTE
 	LD	(HL),A		;PASS TO CONTROLLER
 	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 	JR	DATCHK		;SEE IF BYTE AVAILABLE
 BZCHK	RRCA			;SHIFT OUT BIT 0
 	RET	NC		;DONE WITH MACRO
 DATCHK	LD	A,(HL)		;GET STATUS BYTE
 	BIT	1,A		;CHECK FOR AVAILABLE BYTE
 	JP	Z,BZCHK		;NOT READY YET
 	LD	A,(37EFH)	;GET BYTE FROM CONTROLLER
 	LD	(BC),A		;PUT BYTE INTO BUFFER
 	INC	BC		;INCREMENT BUFFER POINTER
 	JR	DATCHK		;SEE IF ANOTHER BYTE
 ENTRY	DI			;TOO BUSY
 	LD	SP,READAD	;BOTTOM OF PROGRAM
 	CALL	DISPLY		;DISPLAY MESSAGE
 	DEFB	1CH		;HOME CURSOR
 	DEFB	1FH		;CLEAR SCREEN
 	DEFM	'>>  ADDRESS MARK READER  <<'
 	DEFW	0D0DH
 	DEFM	'PROGRAM BY KIM WATT'
 	DEFB	0DH
 	DEFM	'BREEZE COMPUTING'
 	DEFW	0D0DH
 	DEFM	'ALL NUMBERS ON DISPLAY ARE IN HEXADECIMAL.'
 	DEFB	0DH
 	DEFM	'ENTER DESIRED TRACK & SECTOR TO DISPLAY THE FOLLOWING VALUES:'
 	DEFB	0DH
 	DEFM	'TRACK #, HEAD #, SECTOR #, SECTOR LENGTH, CRC #1, CRC #2'
 	DEFB	0DH
 	DEFW	0D0DH
 	DEFB	0
 	CALL	DISPLY		;INPUT PROMPT
 	DEFM	'ENTER TRACK #  ==>> --'
 	DEFW	0808H
 	DEFB	0
 	CALL	GETKEY		;GET A NUMBER
 	LD	A,(BUFFER)	;PUT IN ACCUM.
 	LD	(TEMP),A	;SAVE IT
 	CALL	DISPLY		;INPUT PROMPT
 	DEFB	0DH
 	DEFM	'ENTER SECTOR # ==>> --'
 	DEFW	0808H
 	DEFB	0
 	CALL	GETKEY		;GET ANOTHER KEY
 	LD	A,(BUFFER)	;GET SECTOR REQUEST
 	LD	E,A		;SAVE IN E REG.
 	LD	A,(TEMP)	;PREVIOUS NIBBLE
 	LD	D,A		;SAVE IN TRACK REG.
 	CALL	READAD		;READ ADDRESS MARKERS
 	CALL	SHOWEM		;SHOW THE CONTENTS
 	CALL	DISPLY		;MESSAGE
 	DEFW	0D0DH
 	DEFM	'AGAIN (Y/N) ?'
 	DEFB	0DH
 	DEFB	0
 LOOP7	CALL	2BH
 	CP	59H		;	YES ?
 	JP	Z,ENTRY		;DO IT
 	CP	4EH		;	NO ?
 	JP	Z,0		;RE-BOOT
 	JR	LOOP7		;NO GOOD
 DISPLY	POP	HL		;GET DATA POINTER
 LOOP8	LD	A,(HL)		;GET BYTE
 	INC	HL		;POINT TO NEXT
 	OR	A		;SET FLAGS
 	JR	Z,LOOP8X	;DONE WITH MESSAGE
 	CALL	33H		;DISPLAY IT
 	JR	LOOP8		;DO IT AGAIN
 LOOP8X	PUSH	HL		;SAVE RET ADDRESS
 	RET			;BACK TO CALLER
 GETKEY	LD	B,2		;2 CHARACTERS
 	LD	HL,BUFFER	;POINTER FOR STORAGE
 LOOP9	PUSH	BC		;SAVE FOR LATER TEST
 LOOP10	CALL	2BH		;SCAN KEYBOARD
 	OR	A		;SET FLAGS
 	JR	Z,LOOP10	;NO KEY PRESSED
 	CP	30H		;LESS THAN 0 ?
 	JP	C,LOOP10	;NO GOOD
 	CP	47H		;MORE THAN F ?
 	JP	NC,LOOP10	;NO GOOD
 	PUSH	AF		;SAVE BYTE
 	CALL	33H		;DISPLAY IT
 	POP	AF		;RESTORE
 	CP	3AH		;NUMERIC ?
 	JP	C,NUMBER	;YES IT IS
 	CP	41H		;LETTER
 	JP	C,LOOP10	;NO GOOD
 	SUB	7		;ADJUST FOR LETTER
 NUMBER	SUB	30H		;ADJUST FOR REAL VALUE
 	LD	(BUFFER),A	;SAVE VALUE
 	POP	BC		;RESTORE COUNT
 	DJNZ	LOOP9		;GET NEXT CHARACTER
 	RET			;HAVE EM BOTH
 SHOWEM	LD	A,0DH		;CARRIAGE RETURN
 	CALL	33H		;MOVE IT
 	LD	DE,BUFFER	;ADDRESS DATA
 	LD	B,6		;# OF BYTES TO SHOW
 LOOP11	PUSH	BC		;SAVE COUNT
 	LD	A,(DE)		;GET A BYTE
 	CALL	HEXCV		;CHANGE TO ASCII
 	PUSH	DE		;SAVE IT ON STACK
 	PUSH	HL		;SAVE ASCII
 	LD	A,H		;HIGH ORDER NIBBLE
 	CALL	33H		;DISPLAY IT
 	POP	HL		;RESTORE ASCII
 	LD	A,L		;LOW ORDER NIBBLE
 	CALL	33H		;DISPLAY IT
 	LD	A,20H		;SPACE
 	CALL	33H
 	LD	A,2DH		;DASH
 	CALL	33H
 	LD	A,20H		;SPACE
 	CALL	33H
 	POP	DE		;BUFFER POINTER
 	INC	DE		;NEXT BYTE
 	POP	BC		;RESTORE COUNT
 	DJNZ	LOOP11		;GET NEXT BYTE
 	RET			;DONE WITH DISPLAY
 HEXCV	LD	C,A		;SAVE FOR TWO DIGITS
 	SRL	A		;ALIGN FOR HIGH DIGIT
 	SRL	A
 	SRL	A
 	SRL	A
 	CALL	TEST		;CONVERT TO ASCII
 	LD	H,A		;SAVE FOR RETURN
 	LD	A,C		;RESTORE ORIGINAL BYTE
 	AND	0FH		;GET LOW NIBBLE
 	CALL	TEST		;CONVERT TO ASCII
 	LD	L,A		;SAVE FOR RETURN
 	RET			;DONE WITH CONVERSION
 TEST	ADD	A,30H		;CONVERSION FACTOR
 	CP	3AH		;TEST FOR 0-9
 	JP	M,TEST1		;GO IF 0-9
 	ADD	A,7		;ADJUST FOR A-F
 TEST1	RET			;DONE
 TEMP	DEFB	0		;TEMPORARY STORAGE
 BUFFER	DEFS	6		;6 BYTE BUFFER AREA
 	END	ENTRY
