; EXAMPLE ASSEMBLY LANGUAGE PROGRAM FOR INDUSTROLOGIC, INC. SBC-1
; SHOWS USE OF INTERNAL RAM AREA AND CALLABLE ROUTINES PROVIDED
; FOR MORE INFORMATION SEE THE SBC-1 REFERENCE MANUAL


	ORG	8000H		;MUST ALWAYS BE ORG'ED AT 8000H FOR SBC-1

	CLR	C		;(C3 HEX) NEEDED FOR SBC-1

REPEAT:
				;DISPLAY DATE AND TIME TO CONSOLE
	LCALL	66H		;READ REAL TIME CLOCK ROUTINE IN JUMP TABLE

				;DATE
	MOV	DPTR,#0DFE2H	;POINT TO WHERE "MONTH" IS STORED
	MOVX	A,@DPTR		;GET IT
	CALL	TXHEX		;SEND ACC VALUE IN HEX OUT SERIAL PORT
	MOV	A,#'/'		;SLASH
	LCALL	3CH		;SERIAL CHARACTER OUT ROUTINE IN JUMP TABLE
	MOV	DPTR,#0DFE3H	;POINT TO WHERE "DAY" IS STORED
	MOVX	A,@DPTR		;GET IT
	CALL	TXHEX		;SEND ACC VALUE IN HEX OUT SERIAL PORT
	MOV	A,#'/'		;SLASH
	LCALL	3CH		;SERIAL CHARACTER OUT ROUTINE IN JUMP TABLE
	MOV	DPTR,#0DFE0H	;POINT TO WHERE "CENTURY" IS STORED
	MOVX	A,@DPTR		;GET IT
	CALL	TXHEX		;SEND ACC VALUE IN HEX OUT SERIAL PORT
	MOV	DPTR,#0DFE1H	;POINT TO WHERE "YEAR" IS STORED
	MOVX	A,@DPTR		;GET IT
	CALL	TXHEX		;SEND ACC VALUE IN HEX OUT SERIAL PORT

	MOV	A,#' '		;SPACE
	LCALL	3CH		;SERIAL CHARACTER OUT ROUTINE IN JUMP TABLE
	MOV	A,#' '		;SPACE
	LCALL	3CH		;SERIAL CHARACTER OUT ROUTINE IN JUMP TABLE

				;TIME
	MOV	DPTR,#0DFE5H	;POINT TO WHERE "HOURS" ARE STORED
	MOVX	A,@DPTR		;GET IT
	CALL	TXHEX		;SEND ACC VALUE IN HEX OUT SERIAL PORT
	MOV	A,#':'		;COLON
	LCALL	3CH		;SERIAL CHARACTER OUT ROUTINE IN JUMP TABLE
	MOV	DPTR,#0DFE6H	;POINT TO WHERE "MINUTES" ARE STORED
	MOVX	A,@DPTR		;GET IT
	CALL	TXHEX		;SEND ACC VALUE IN HEX OUT SERIAL PORT
	MOV	A,#':'		;COLON
	LCALL	3CH		;SERIAL CHARACTER OUT ROUTINE IN JUMP TABLE
	MOV	DPTR,#0DFE7H	;POINT TO WHERE "SECONDS" ARE STORED
	MOVX	A,@DPTR		;GET IT
	CALL	TXHEX		;SEND ACC VALUE IN HEX OUT SERIAL PORT
	LCALL	42H		;SEND CR/LF OUT SERIAL PORT IN JUMP TABLE


				;DISPLAY A/D VALUE IN HEX TO CONSOLE
	MOV	DPTR,#ADMSG	;POINT TO MESSAGE TO SEND TO CONSOLE
	LCALL	3FH		;SERIAL STRING OUT ROUTINE IN JUMP TABLE
	LCALL	57H		;A/D CONVERSION ROUTINE IN JUMP TABLE
	CALL	TXHEX		;SEND A/D VALUE IN HEX OUT SERIAL PORT
	MOV	DPTR,#ADMSG2	;POINT TO MESSAGE TO SEND TO CONSOLE
	LCALL	3FH		;SERIAL STRING OUT ROUTINE IN JUMP TABLE
	LCALL	42H		;SEND CR/LF OUT SERIAL PORT IN JUMP TABLE


				;DISPLAY MESSAGE ON LED-8
	MOV	DPTR,#LEDMSG	;POINT TO LED-8 MESSAGE
	LCALL	60H		;WRITE TO LED DISPLAY ROUTINE IN JUMP TABLE


				;OUTPUT BITS IN INTERNAL RAM SYSTEM AREA
	MOV	24H,#0FFH	;OUTPUTS 1-8 ON
	MOV	25H,#0FFH	;OUTPUTS 9-16 ON
	MOV	26H,#0FFH	;OUTPUTS 17-24 ON
	LCALL	4BH		;IOSCAN ROUTINE IN JUMP TABLE, ACTIVATES BITS

	MOV	A,#1		;NUMBER OF SECONDS TO DELAY
	LCALL	48H		;DELAY 1 SECOND ROUTINE IN JUMP TABLE

				;OUTPUT BITS IN INTERNAL RAM SYSTEM AREA
	MOV	24H,#0		;OUTPUTS 1-8 OFF
	MOV	25H,#0		;OUTPUTS 9-16 OFF
	MOV	26H,#0		;OUTPUTS 17-24 OFF
	LCALL	4BH		;IOSCAN ROUTINE IN JUMP TABLE, ACTIVATES BITS

	MOV	A,#1		;NUMBER OF SECONDS TO DELAY
	LCALL	48H		;DELAY 1 SECOND ROUTINE IN JUMP TABLE


	LJMP	REPEAT


ADMSG:	DB	'A/D VALUE=',0
ADMSG2:	DB	' HEX',0
LEDMSG:	DB	'LED-8',0


; SEND HEX VALUE IN ACC OUT THE SERIAL PORT AS 2 ASCII DIGITS

TXHEX:	PUSH	ACC		;SAVE VALUE
	SWAP	A		;SWAP NIBBLES
	CALL	HTOA		;CONVERT LOWER NIBBLE TO A HEX CHARACTER
	LCALL	3CH		;SERIAL CHARACTER OUT ROUTINE IN JUMP TABLE
	POP	ACC		;RESTORE VALUE
	PUSH	ACC		;SAVE IT AGAIN
	CALL	HTOA		;CONVERT LOWER NIBBLE TO A HEX CHARACTER
	LCALL	3CH		;SERIAL CHARACTER OUT ROUTINE IN JUMP TABLE
	POP	ACC		;SO THIS ROUTINE PRESERVES IT
	RET

; CONVERT HEX VALUE IN ACC TO ASCII CHARACTER IN ACC
; REMOVES ANY BITS ABOVE THE LOWER NIBBLE

HTOA:	ANL	A,#0FH
	MOV	DPTR,#HTOATBL
	MOVC	A,@A+DPTR
	RET

HTOATBL:	DB	'0123456789ABCDEF',0


	END

