J069 SVC

Sample Driver Using AB80

The following program is a both a driver and demonstration for the SVC. It assumes the SVC is being used as a target device. If the SVC is to be used as the main console device it is necessary to select the 9128 mode of operation; this allows only one attribute to be displayed on the screen at any one time (usually intensity).

Note this program runs with the standard jumpering.

1	ON OUT svc_out 
2	svc_init 
3	EXCLUDE SCAN 
10	REM #### DEMO STARTS HERE **** 
20	svc_cur(0,0) 
30	PRINT##, CHR$(&82); "SVC - ARCOM CONTROL SYSTEMS 80 by 25 Video Board"; CHR$(&80); 
35	svc_cur(3,1) : PRINT$#, "Attributes and Boxes:"; 
40	box(5,1,12,2) 
50	svc_cur(6,2) : PRINT#, CHR$(&88);"*FLASHING";CHR$(&80); 
60	box (9,1,12,2) 
70	svc_cur(10,2) : PRINT##, CHR$(&84);"INTENSITY ";CHR$(&80); 
80	box(13,1,12,2) 
90	svc_cur(14,2) : PRINT##, CHR$(&81);" REVERSE ";CHR$(&80); 
100	box(17,1,12,2) 
110	svc_cur(18,2) : PRINT##, CHR$(&82);" UNDERLINE ";CHR$(&80); 
120	box(5,20,58,14) 
130	box (11,42,12,2) 
140	svc_cur (12,43) : PRINT##, CHR$(&8D);" SVC ";CHR$(&80); : svc_cur(22,0) 
145	PRINT##, "Hardware Scroll:” 
150	status$ = "STATUS LINE"
160	stat_ln 
170	FOR n% = O TO 10000 : NEXT n% : PRINT##, 
180	FOR n% = 1 TO 100 : PRINT##, n% : NEXT n% 
190	GOTO 2

8000	REM **** REM DRAW THIN BOX **** 
8010	DEF box(row_s%,col_s%,x%,y%) 
8020	svc_cur(row_s%,col_s%) : PRINT##, CHR$(&A3); : xt% = x% : yt% = y% 
8050	WHILE xt% : PRINT##, CHR$(&AA); : xt% = xt%-1 : WEND 
8040	PRINT##, CHR$(&A9);
8050	WHILE yt% 
8060	svc_cur(row_s% + yt%,col_s%) : PRINT##, CHR$(&A5); 
8070	svc_cur(row_s% + yt%,col_s% + x% + 1) : PRINT##, CHR$(&A5); 
8080	yt% = yt% - 1 : WEND 
8090	svc_cur(row_s% + y%, col_s%) : PRINT##, CHR$(&A6); 
8100	WHILE x% : PRINT##, CHR$(&AA) ; : x% = x% - 1 : WEND 
8110	PRINT##, CHR$(&AC);
8120	ENDPROC


9000	REM **** CHARACTER OUTPUT TO SVC ****
9010	DEF svc_out (chr%)
9012	IF chr% = &0D THEN svc_cr
9015	IF chr% = &0A THEN svc_lf
9018	IF chr% < &20 THEN GOTO 9025
9020	svput (13, chr%) : svc_lcur% = svc_lcur% + 1 : svc_pcl
9025	REM
9030	ENDPROC

9040	REM **** POSITION CURSOR ****
9050	DEF svc_cur(row%, col%)
9060	svc_lcur% = (row% * 80) + col% : svc_pcl
9070	ENDPROC

9080	REM **** INITIALISE THE SVC ****
9090	DEF svc_init
9100	svput (6,0)
9105	REM reset bit 7 for SVC to operate correctly
9110	svput(8,0)
9120	svput(9,0)
9130	svput(10,&80)
9140	svput(11,0)
9150	svput(13,&20)
9160	svput(13,&20)
9170	svput(12,0)
9180	svput(14,0)
9190	svput(15,1)
9200	svc_lcur% = 0
9210	svc_tosa% = 0
9220	svc_last% = &FF
9230	ENDPROC

9240	REM **** WRITE TO SVC REGISTER ****
9250	DEF svput (reg%, val%)
9260	sv% = INP (&3A1) AND &80 : IF sv% = 0 THEN GOTO 9260
9270	OUT &3A1, reg%
9280	OUT &3A0, val%
9290	ENDPROC

9300	REM **** UPDATE PHYSICAL CURSOR LOCATION ****
9310	DEF svc_pcl
9320	IF svc_lcur% < 1920 THEN GOTO 9350
9330	svc_lcur% = svc_lcur% - 80
9340	svc_itos : GOTO 9320
9350	tcur% = svc_lcur% + svc_tosa%
9360	IF tcur% > 1919 THEN tcur% = tcur% - 1920
9370	tcur1% = tcur% : tcur1% = tcur1% AND &FF
9380	svput(9, tcur1%)
9390	tcur1% - tcur% : tcur1% = (tcur1% / 256) OR &80
9400	IF tcur1% = svc_last% THEN GOTO 9420
9410	svput (10, tcur1%)
9420	svc_last% = tcur1%
9430	ENDPROC


9440	REM #### ERASE NEXT LINE AND SCROLL ****
9450	DEF svc_itos
9460	itos% = svc_tosa% : itos% = itos% AND &FF
9470	svput (9, itos%)
9480	itos% = svc_tosa% : itos% = (itos% / 256) OR &80
9490	svput(10, itos%)
9500	itos% =  (svc_tosa% + 80)/16
9510	svput (11, itos%)
9515	svput(13,&20)
9520	IF svc_tosa% >=  23*80 THEN svc_tosa% = -80
9530	svc_tosa% = svc_tosa% + 80
9540	itos% = svc_tosa% / 16
9550	svput(8, itos%)
9560	ENDPROC

9570	REM #### CARRIAGE RETURN ####
9580	DEF svc_cr
9590	svc_lcur% = (svc_lcur% / 80) * 80 : svc_pcl
9600	ENDPROC

9610	REM **** LINE FEED ****
9620	DEF svc_lf
9630	svc_lcur% = svc_lcur% + 80 : svc_pcl

9640	REM **** STATUS LINE ****
9650	DEF stat_ln
9660	sta% = 1920 AND &FF : svput(9, sta%)
9670	sta% = (1920/256) OR &80 : svput (10, sta%)
9680	svput(14,&80) : svput(13,&81 )
9690	n% = 0 : WHILE sta% : sta% = ASC (MID$(status$, n%, 1))
9695	IF sta% > 0 THEN svput (13, sta%)
9698	n% = n% + 1 : WEND
9700	svput(14,0) : svc_pcl
9710	ENDPROC