; READADD.ASM
; READ THE ANALOG INPUT AND DISPLAY THE VALUE IN DECIMAL
	ORG	8000H		;MUST ALWAYS BE ORG'ED AT 8000H FOR SBC-1
READADD:
	CLR	C		;(C3 HEX) NEEDED ONLY IF USING AUTOBOOT
REPEAT:	CALL	57H		;ANALOG TO DIGITAL ROUTINE IN JUMP TABLE
	CALL	TXDEC		;SEND VALUE IN ACC TO THE TERMINAL
	CALL	42H		;SEND CR/LF ROUTINE IN JUMP TABLE
	JMP	REPEAT		;KEEP READING AND DISPLAYING


; SEND DECIMAL VALUE IN ACC TO THE TERMINAL AS 3 ASCII DIGITS
TXDEC:
	MOV	B,A		;SAVE VALUE IN B
	ADD	A,#56D		;256-200=56
	JNC	TXDL2		;VALUE <200 IF NO CARRY
	MOV	A,B		;GET VALUE AGAIN
	CLR	C		;NEEDED FOR SUBTRACTION
	SUBB	A,#200		;SUBTRACT 200 FROM REAL VALUE
	MOV	B,A		;SAVE VALUE IN B
	MOV	A,#'2'		;SEND A TWO FOR HUNDREDS
	JMP	TXDL0

TXDL2:	MOV	A,B		;GET VALUE AGAIN
	ADD	A,#156D		;256-100=56
	JNC	TXDL1		;VALUE <100 IF NO CARRY
	MOV	A,B		;GET VALUE AGAIN
	CLR	C		;NEEDED FOR SUBTRACTION
	SUBB	A,#100		;SUBTRACT 100 FROM REAL VALUE
	MOV	B,A		;SAVE VALUE IN B
	MOV	A,#'1'		;SEND A ONE FOR HUNDREDS
	JMP	TXDL0

TXDL1:	MOV	A,#'0'		;SEND A ZERO FOR HUNDREDS

TXDL0:	CALL	3CH		;DISPLAY CHARACTER ROUTINE IN JUMP TABLE
	MOV	A,B		;GET VALUE AGAIN
	MOV	B,#10		;DIVIDE BY VALUE BY 10
	DIV	AB		;ONES IN B, TENS IN A
	PUSH	B		;SAVE ONES DIGIT
	ADD	A,#30H		;ADD THE ASCII CHARACTER OFFSET
	CALL	3CH		;DISPLAY CHARACTER ROUTINE IN JUMP TABLE
	POP	ACC		;RESTORE ONES DIGIT
	ADD	A,#30H		;ADD THE ASCII CHARACTER OFFSET
	CALL	3CH		;DISPLAY CHARACTER ROUTINE IN JUMP TABLE
	RET

	END			;NEEDED BY MANY ASSEMBLER PROGRAMS
