J069 SVC
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