	.TITLE	GRAPHICS DEMONSTRATION


;	DISPLAYS SIMPLE EXAMPLES OF THE FIVE PLOTTING MODES
;	OF AN ID-2212/C IMAGE DISPLAY SYSTEM.

;	ALL NEW CODE: 8 MAR 77
;	MODIFICATIONS TO: 28 JULY 77

;	PROGRAMMER: KEN DINWIDDIE

 	.MCALL	.REGDEF,.EXIT

	.REGDEF

	.SBTTL	EQUATES


	XREG	=166000	; X REGISTER ADDRESS
	YREG	=166002	; Y REGISTER ADDRESS
	BPMREG	=166004	; BIT PLANE MASK REGISTER ADDRESS
	CSR	=166006	; CONTROL/STATUS REGISTER ADDRESS
	DATREG	=166010	; DATA REGISTER ADDRESS

	ASCMEM	=5400	; ANNOTATION MEMORY ADDRESS

	FILL	=2041	; PLOT AND FILL ABSOLUTE ( NO OVERLAP )
	ABS	=43	; PLOT ABSOLUTE
	FFY	=45	; PLOT & FILL FROM Y
	OUTL	=47	; PLOT OUTLINE
	MAP	=51	; BIT MAP WRITE
	FULL	=55	; WRITE FULL SCREEN

;	MACRO TO BUILD BAR CHART DATA

	.MACRO	BARCHT	LINE,BARD
	.BYTE	LINE,LINE,BARD,BARD,BARD,BARD,BARD,BARD
	.ENDM
	.PAGE
	.SBTTL	DIVIDE SCREEN IN QUARTERS
;
;
GD:	MOV	#7777,@#BPMREG	; ENABLE ALL BITS
	CLR	@#XREG	; START OF BUFFER MEMORY
GD1:	CLR	@#DATREG	; ZERO BUFFER
	CMP	@#XREG,#1000
	BNE	GD1
	MOV	#400,@#XREG	; SET CENTRAL COLUMN
	MOV	#7777,@#DATREG
	MOV	#FULL,@#CSR	; DISPLAY THE VERTICAL BAR
	JSR	PC,READY	; WAIT FOR COMPLETION
	CLR	@#XREG
	MOV	#200,R0
	MOV	#1000,R1
	JSR	PC,HORIZ	; DISPLAY THE HORIZONTAL BAR
	.PAGE
	.SBTTL	CONSTRUCT WINDOWS, GRIDS, ETC.
;
;
	MOV	#300,@#YREG
	MOV	#440,@#XREG
	MOV	#300,R0
	MOV	#740,R1
	JSR	PC,HORIZ	; TREND PLOT X-AXIS
	MOV	#40,@#XREG
	MOV	#230,@#YREG
	MOV	#350,@#DATREG
	MOV	#440,@#XREG
	MOV	#350,@#DATREG
	MOV	#FFY,@#CSR	; SHOW UPPER PLOT VERTICALS
	JSR	PC,READY	; WAIT FOR COMPLETION
	MOV	#30,@#YREG
	MOV	#40,@#XREG
	MOV	#150,R0
	MOV	#340,R1
	JSR	PC,BOXWRT	; DISPLAY LEFT WINDOW
	MOV	#440,@#XREG
	MOV	#740,R1
	JSR	PC,BOXWRT	; DISPLAY RIGHT WINDOW
	MOV	#77,@#BPMREG	; SET 1/4 INTENSITY
	MOV	#100,@#XREG
GD2:	MOV	#147,@#DATREG	; BUILD VERTICAL GRID
	ADD	#36,@#XREG
	CMP	@#XREG,#340
	BNE	GD2
	MOV	#FFY,@#CSR	; DISPLAY VERTICAL GRID
	JSR 	PC,READY	; WAIT FOR COMPLETION
	MOV	#40,@#XREG
	MOV	#50,R0
	MOV	#340,R1
	JSR	PC,HORIZ	; DISPLAY HORIZONTAL GRID LINES
	MOV	#40,@#XREG
	MOV	#70,R0
	JSR	PC,HORIZ
	MOV	#40,@#XREG
	MOV	#110,R0
	JSR	PC,HORIZ
	MOV	#40,@#XREG
	MOV	#130,R0
	JSR	PC,HORIZ
	.PAGE
	.SBTTL	MAKE BAR CHART & TREND PLOT
;
;
	MOV	#360,@#BPMREG	; SET FULL INTENSITY GREEN
	MOV	#300,@#YREG
	MOV	#40,@#XREG
	MOV	#BARDAT,R0
	JSR	PC,FILBUF	; FILL BUFFER WITH BAR CHART
	MOV	#FFY,@#CSR	; AND DISPLAY IT
	JSR	PC,READY	; WAIT FOR COMPLETION
;
	CLR	R5	; NOW THE TREND PLOT
	MOV	#7417,@#BPMREG	; MAKE IT MAGENTA
GD3:	MOV	TRDATA(R5),R4
	BEQ	GD4	; DONE: CONTINUE
	MOV	R4,@#XREG
	INC	R5
	INC	R5
	MOVB	TRDATA(R5),@#YREG
	INC	R5
	MOVB	TRDATA(R5),R0
	MOV	R4,R1
	ADD	#14,R1
	JSR	PC,BOXWRT	; DISPLAY BOX
	INC	R5
	MOV	R4,@#XREG
	MOV	R4,R1
	ADD	#14,R1
	MOVB	TRDATA(R5),R3
	MOV	R3,R0
	JSR	PC,HORIZ	; DISPLAY LOWER LINE
	INC 	R5
	MOV	R4,@#XREG
	MOV	R4,R1
	ADD	#14,R1
	MOVB	TRDATA(R5),R2
	MOV	R2,R0
	JSR	PC,HORIZ	; DISPLAY UPPER LINE
	ADD	#4,R4
	MOV	R4,@#XREG
	MOV	R3,@#YREG
	MOV	R2,@#DATREG
	MOV	#FFY,@#CSR	; DISPLAY VERTICAL LINE
	JSR	PC,READY	; WAIT FOR COMPLETION
	INC	R5
	BR	GD3	; DO NEXT TREND PLOT ELEMENT
	.PAGE
	.SBTTL	SOLID & DOTTED GRAPHS
;
;
GD4:	MOV	#40,@#XREG
	MOV	#377,@#BPMREG	; MAKE THEM YELLOW
	MOV	#GRAPH1,R0
	JSR	PC,FILBUF	; GET DATA FOR FIRST GRAPH
	MOV	#FILL,@#CSR	; DISPLAY GRAPH 1
	JSR	PC,READY	; WIAT FOR COMPLETION
	MOV	#40,@#XREG
	MOV	#GRAPH2,R0
	JSR	PC,FILBUF	; GET DATA FOR SECOND GRAPH
	MOV	#FILL,@#CSR	; DISPLAY GRAPH 2
	JSR	PC,READY	; WAIT FOR COMPLETION
	MOV	#40,@#XREG
	MOV	#GRAPH3,R0	; GET DATA FOR THIRD GRAPH
	JSR	PC,FILBUF
	MOV	#277,@#BPMREG	; REDUCE INTENSITY TO 3/4
	MOV	#FILL,@#CSR	; DISPLAY GRAPH 3
	JSR	PC,READY	; WAIT FOR COMPLETION
	.PAGE
	.SBTTL	CONTOUR MAP
;
;
	MOV	#7760,@#BPMREG	; SET FULL INTENSITY CYAN
	CLR	R5
GD5:	MOV	CONTRS(R5),@#XREG	; GET START FOR THIS CONTOUR
	INC	R5
	INC	R5
	MOV	CONTRS(R5),R0	; PICK UP DATA POINTER
	JSR	PC,FILBUF	; FILL BUFFER WITH DATA
	MOV	#FILL,@#CSR	; DISPLAY CONTOUR
	JSR	PC,READY	; WAIT FOR COMPLETION
	INC	R5
	INC	R5
	CMP	R5,#104
	BNE	GD5	; DO 17 CONTOURS
	.PAGE
	.SBTTL	DISPLAY GRAPHICS LABELS
;
;
	MOV	#7777,@#BPMREG	; SET FULL INTENSITY WHITE
	MOV	#210,@#YREG
	MOV	#104,@#XREG
	MOV	#BARLBL,R0
	JSR	PC,CSYNTH	; SHOW "BAR CHARTS"
	MOV	#476,@#XREG
	MOV	#TRPLBL,R0
	JSR	PC,CSYNTH	; SHOW "TREND PLOTS"
	MOV	#10,@#YREG
	MOV	#134,@#XREG
	MOV	#GRALBL,R0
	JSR	PC,CSYNTH	; SHOW "GRAPHS"
	MOV	#470,@#XREG
	MOV	#CNTLBL,R0
	JSR	PC,CSYNTH	; SHOW "CONTOUR MAPS"
;
	.EXIT	; ALL DONE
	.PAGE
	.SBTTL	SUBROUTINES
;
;
HORIZ:	MOV	R0,@#DATREG	; FILL THE BUFFER
	CMP	R1,@#XREG
	BNE	HORIZ
	MOV	#ABS,@#CSR	; DISPLAY THE LINE
	JSR	PC,READY	; WAIT FOR COMPLETION
	RTS	PC
;
;
FILBUF:	MOVB	(R0)+,R1
	CMPB	#-2,R1
	BEQ	FILB1
	CMPB	#-1,R1
	BEQ	FILB2
	MOV	R1,@#DATREG
	BR	FILBUF
FILB1:	ADD	#2,@#XREG	; SKIP A WORD IN BUFFER
	BR	FILBUF
FILB2:	RTS	PC
;
;
READY:	TSTB	@#CSR
	BPL	READY
	RTS	PC
;
;
BOXWRT:	MOV	R0,@#DATREG	; BUILD BUFFER
	CMP	@#XREG,R1
	BNE	BOXWRT
	MOV	#OUTL,@#CSR	; DISPLAY BOX
	JSR	PC,READY	; WAIT FOR COMPLETION
	RTS	PC
;
;
CSYNTH:	TST	(R0)
	BEQ	CSYN2
	CLR	R2
	MOV	(R0)+,R1
CSYN1:	MOVB	(R1)+,@#DATREG	; BUILD CHARACTER DATA
	INC	R2
	CMP	R2,#6
	BNE	CSYN1
	BR	CSYNTH	; GET NEXT CHARACTER

CSYN2:	MOV	#MAP,@#CSR	; DISPLAY CHARACTERS
	JSR	PC,READY	; WAIT FOR COMPLETION
	RTS	PC
	.PAGE
	.SBTTL	BAR CHART DATA
;
;
BARDAT:	BARCHT	300,320
	BARCHT	300,270
	BARCHT	300,305
	BARCHT	300,334
	BARCHT	300,250
	BARCHT	300,265
	BARCHT	300,313
	BARCHT	300,310
	BARCHT	300,323
	BARCHT	300,274
	BARCHT	300,330
	BARCHT	300,307
	.BYTE	300,300,-1
	.PAGE
	.SBTTL	TREND PLOT DATA


	.NLIST	BIN		; DON'T BOTHER WITH BYTE EXPANSIONS
	.EVEN
TRDATA:	.WORD	444
	.BYTE	250,260,243,265
	.WORD	464
	.BYTE	257,266,253,273
	.WORD	504
	.BYTE	256,264,254,267
	.WORD	524
	.BYTE	265,274,262,303
	.WORD	544
	.BYTE	275,305,272,314
	.WORD	564
	.BYTE	304,311,276,315
	.WORD	604
	.BYTE	303,310,301,312
	.WORD	624
	.BYTE	310,315,305,323
	.WORD	644
	.BYTE	305,314,302,316
	.WORD	664
	.BYTE	314,323,311,332
	.WORD	704
	.BYTE	324,333,321,337
	.WORD	724
	.BYTE	330,335,324,340
	.WORD	0
	.PAGE
	.SBTTL	GRAPH DATA
;
;
GRAPH1:	.BYTE	41,42,42,43,43,44,44,45,45,46,46,47,47
	.BYTE	50,50,51,50,50,50,47,47,47,46,46,46
	.BYTE	45,45,45,44,44,44,43,43,44,45,45
	.BYTE	46,47,47,50,51,51,52,53,53,54,55
	.BYTE	56,57,60,61,62,63,64,65,66,67,70
	.BYTE	71,72,73,74,75,75,76,76,77,77,100
	.BYTE	100,101,101,102,102,103,103,104,104,105
	.BYTE	107,111,114,116,121,123,126,130,133,135
	.BYTE	140,142,145,147,-1
	.PAGE
GRAPH2:	.BYTE	107,106,106,106,106,105,105,105,105,104,104
	.BYTE	104,104,103,103,103,102,102,101,101,101
	.BYTE	100,100,77,77,77,76,76,75,75,75,74
	.BYTE	74,74,74,75,75,75,75,76,76,76,77
	.BYTE	77,77,77,100,100,100,77,77,76,75
	.BYTE	75,74,73,73,72,71,71,70,67,67,66
	.BYTE	65,65,65,65,65,65,65,65,65,65
	.BYTE	65,65,65,65,65,65,64,63,63,62
	.BYTE	61,61,60,57,57,56,55,55,54,53,53,-1
	.PAGE
GRAPH3:	.BYTE	-2,140,137,-2,134,133,-2,130,127,-2,124,123
	.BYTE	-2,120,117,-2,114,114,-2,115,115,-2,116
	.BYTE	116,-2,117,117,-2,120,120,-2,121,121,-2
	.BYTE	121,121,-2,121,121,-2,121,121,-2,121,121,-2
	.BYTE	121,121,-2,120,120,-2,117,117,-2,116
	.BYTE	116,-2,115,115,-2,114,114,-2,113,111
	.BYTE	-2,104,102,-2,75,73,-2,66,64,-2,57
	.BYTE	55,-2,50,51,-2,53,54,-2,56,57,-2,61
	.BYTE	62,-2,64,65,-2,67,-1
	.PAGE
	.SBTTL	CONTOUR MAP DATA
;
;
;	TABLE OF X-REGISTER STARTING VALUES AND 
;	POINTERS TO DATA STRINGS
;
	.EVEN
CONTRS:	.WORD	504,CONT1,504,CONT2
	.WORD	462,CONT3,462,CONT4
	.WORD	440,CONT5
	.WORD	466,CONT6
	.WORD	604,CONT7,604,CONT8
	.WORD	662,CONT9,662,CONT10
	.WORD	572,CONT11,572,CONT12
	.WORD	554,CONT13,554,CONT14
	.WORD	606,CONT15
	.WORD	640,CONT16
	.WORD	714,CONT17
	.PAGE
;
;
;	TABLE OF CONTOUR DATA STRINGS
;
CONT1:	.BYTE	131,133,134,134,135,135,136,136,137,137
	.BYTE	140,140,137,135,-1
CONT2:	.BYTE	132,130,130,130,131,131,132,132,133,133
	.BYTE	134,134,135,136,-1
CONT3:	.BYTE	127,132,134,135,136,136,137,137,140,140
	.BYTE	141,141,141,142,142,142,142,143,143,143
	.BYTE	143,144,144,145,145,146,146,146,145,145
	.BYTE	145,144,144,143,140,-1
CONT4:	.BYTE	130,124,122,121,120,120,121,121,122,122
	.BYTE	123,123,124,124,125,126,127,127,130
	.BYTE	130,131,131,131,132,132,133,133,133
	.BYTE	134,134,134,135,135,136,141,-1
CONT5:	.BYTE	100,101,102,103,104,104,105,106,106
	.BYTE	107,107,110,110,110,111,111,111,112,112
	.BYTE	112,113,113,113,114,114,114,115,115,115
	.BYTE	116,116,117,117,117,120,120,121,121,121
	.BYTE	122,122,123,123,124,124,125,126,126,127
	.BYTE	130,131,132,133,134,135,136,137,141
	.BYTE	143,145,147,-1
CONT6:	.BYTE	30,40,45,50,53,56,60,63,65,67,71
	.BYTE	72,73,74,75,75,76,77,100,100,101
	.BYTE	102,103,103,104,105,105,106,106
	.BYTE	107,107,110,110,111,111,112,112,113
	.BYTE	113,113,114,114,114,115,115,116,116,117
	.BYTE	117,117,120,120,121,121,121,122,123,124
	.BYTE	126,127,130,131,133,135,137,140,141
	.BYTE	142,143,144,145,146,146,147,-1
CONT7:	.BYTE	71,66,66,67,67,70,70,70,71,71,72,-1
CONT8:	.BYTE	70,72,72,73,73,73,74,74,74,73,71,-1
CONT9:	.BYTE	101,76,76,77,102,105,107,111,-1
CONT10:	.BYTE	100,103,105,106,107,111,112,110,-1
CONT11:	.BYTE	66,62,61,60,60,60,61,61,62,62,63,64
	.BYTE	64,64,65,65,65,66,66,66,66,67,67,67
	.BYTE	67,67,70,70,70,70,71,71,71,72,72
	.BYTE	73,74,100,105,112,-1
CONT12:	.BYTE	65,72,75,76,76,77,77,77,100,100,101
	.BYTE	101,102,102,103,103,104,104,105,105
	.BYTE	105,106,106,107,107,107,110,110,111
	.BYTE	111,112,113,114,114,115,116,116,115,114
	.BYTE	111,-1
CONT13:	.BYTE	63,54,51,50,47,47,47,46,46,46,46
	.BYTE	47,47,50,51,52,53,54,54,55,55
	.BYTE	56,56,57,57,60,60,61,61,62,62,62
	.BYTE	63,63,63,64,64,64,64,65,65,65,65
	.BYTE	66,66,66,67,67,70,72,75,100,106
	.BYTE	114,120,126,-1
CONT14:	.BYTE	62,71,74,76,77,100,100,101,101,101
	.BYTE	102,102,102,103,103,103,104,104,105
	.BYTE	105,106,106,107,107,110,110,111,111,112
	.BYTE	112,113,113,114,115,115,116,116,117,120
	.BYTE	121,123,125,127,131,132,133,134,134,135
	.BYTE	135,136,136,135,133,125,-1
CONT15:	.BYTE	30,36,41,43,44,45,46,47,47,50,51,51,52
	.BYTE	52,53,53,53,54,54,54,55,55,55,56,56
	.BYTE	56,57,57,57,60,60,60,61,61,62,62
	.BYTE	63,64,65,67,71,74,100,107,-1
CONT16:	.BYTE	30,34,35,36,36,37,37,40,40,41,41,42
	.BYTE	42,43,43,44,44,44,45,45,45,46,46,46
	.BYTE	47,47,50,50,51,52,53,-1
CONT17:	.BYTE	30,32,33,34,35,35,36,36,37,-1
	.PAGE
	.SBTTL	LABEL DATA POINTERS
;
;
	.EVEN
BARLBL:	.WORD	CHARB,CHARA,CHARR,CHARSP,CHARC
	.WORD	CHARH,CHARA,CHARR,CHART,CHARS,0
TRPLBL:	.WORD	CHART,CHARR,CHARE,CHARN,CHARD,CHARSP
	.WORD	CHARP,CHARL,CHARO,CHART,CHARS,0
GRALBL:	.WORD	CHARG,CHARR,CHARA,CHARP,CHARH,CHARS,0
CNTLBL:	.WORD	CHARC,CHARO,CHARN,CHART,CHARO,CHARU,CHARR
	.WORD	CHARSP,CHARM,CHARA,CHARP,CHARS,0
	.PAGE
	.SBTTL	CHARACTER GENERATION DATA
;
;
CHARA:	.BYTE	17,64,104,64,17,0	; "A"
CHARB:	.BYTE	177,111,111,111,66,0	; "B"
CHARC:	.BYTE	76,101,101,101,42,0	; "C"
CHARD:	.BYTE	177,101,101,101,76,0	; "D"
CHARE:	.BYTE	177,111,111,111,101,0	; "E"
CHARF:	.BYTE	177,110,110,110,100,0	; "F"
CHARG:	.BYTE	76,101,101,105,46,0	; "G"
CHARH:	.BYTE	177,10,10,10,177,0	; "H"
CHARI:	.BYTE	0,101,177,101,0,0	; "I"
CHARJ:	.BYTE	2,1,1,1,176,0		; "J"
CHARK:	.BYTE	177,10,24,42,101,0	; "K"
CHARL:	.BYTE	177,1,1,1,1,0		; "L"
CHARM:	.BYTE	177,40,30,40,177,0	; "M"
CHARN:	.BYTE	177,60,10,6,177,0	; "N"
CHARO:	.BYTE	76,101,101,101,76,0	; "O"
CHARP:	.BYTE	177,110,110,110,60,0	; "P"
CHARQ:	.BYTE	76,101,105,103,76,0	; "Q"
CHARR:	.BYTE	177,110,114,112,61,0	; "R"
CHARS:	.BYTE	62,111,111,111,46,0	; "S"
CHART:	.BYTE	100,100,177,100,100,0	; "T"
CHARU:	.BYTE	176,1,1,1,176,0		; "U"
CHARV:	.BYTE	160,16,1,16,160,0	; "V"
CHARW:	.BYTE	174,3,14,3,174,0	; "W"
CHARX:	.BYTE	143,24,20,24,143,0	; "X"
CHARY:	.BYTE	140,30,7,30,140,0	; "Y"
CHARZ:	.BYTE	103,105,111,121,141,0	; "Z"
CHAR0:	.BYTE	76,105,111,121,76,0	; "0"
CHAR1:	.BYTE	0,0,177,0,0,0		; "1"
CHAR2:	.BYTE	41,103,105,111,61,0	; "2"
CHAR3:	.BYTE	42,101,111,111,66,0	; "3"
CHAR4:	.BYTE	14,24,44,177,4,0	; "4"
CHAR5:	.BYTE	171,111,111,111,106,0	; "5"
CHAR6:	.BYTE	76,111,111,111,46,0	; "6"
CHAR7:	.BYTE	100,107,110,120,140,0	; "7"
CHAR8:	.BYTE	66,111,111,111,66,0	; "8"
CHAR9:	.BYTE	62,111,111,111,76,0	; "9"
CHARSP:	.BYTE	0,0,0,0,0,0		; " "
	.LIST	BIN
	.END	GD

                                                                                                                                                                                                                                                                                                                                                                                 