perm filename INTFAC.LSI[1,VDS] blob sn#285168 filedate 1977-05-21 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00007 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	INTFAC.LSI IS THE INTERFACE TEST PROGRAM FOR USE WITH AN LSI-11 AND
C00004 00003	DACMDE	=0	
C00005 00004	START:	RESET
C00007 00005	ISADC:	MOV	#COM6,SG
C00009 00006	GETNUM:	JSR	PC,TYPSTR
C00011 00007	BRK:	.BYTE	1,2,4,10,20,40,100,0
C00013 ENDMK
CāŠ—;
;INTFAC.LSI IS THE INTERFACE TEST PROGRAM FOR USE WITH AN LSI-11 AND
;THE VICARM INTERFACE.  IT USES THE ARM CLOCK WHICH RUNS AT 5ms.  IT IS
;SIMILAR TO INTFAC.PAL EXECPT WRITTEN FOR THE VICARM LSI-11 COMPUTER.  
.TITLE INTFAC
.GLOBL START,NOCOMA,BADNUM
.GLOBL TICKLE,TYPSTR,CRLF,LINOUT,PRTINT,GETINT,INSTR
R0	=%0
R1	=%1
R2	=%2
R3	=%3
R4	=%4
R5	=%5
SG	=%5
SP	=%6
PC	=%7
NOCOMA	=0
BADNUM	=0

CLKTRP	=100 	
DRATRP	=310  	
DRBTRP	=314  	
DR11S	=167760 
DR11O	=167762	
DR11I	=167764 
LOCK    =200	
UNLOCK 	=000	
.ASECT
   .=4
	.WORD .+2,HALT
	.WORD .+2,HALT
	.WORD .+2,HALT
	.WORD .+2,HALT
	.WORD .+2,HALT
	.WORD .+2,HALT
	.WORD .+2,HALT

   .=CLKTRP+2
	RTI	
   .=CLKTRP
	CLKTRP+2

.CSECT
DACMDE	=0	
BRKMDE	=1	
ADCMDE	=2	
STTMDE	=3	
ADCENB	=100	
ADCDNE	=200	
STTENB	=40	
STTREQ	=100000	
PANIC 	=200	
ISON	=100
TOUCH0	=1	
TOUCH1	=2
ARMDNE	=37400 	
HNDDNE	=40000  
ARMBRK	=77	
HNDBRK	=100	
NOINTG	=200	
ENABLE	=400	
ONINTG	=1000	
LOWTOL	=10000	
HITHND	=20000	
CURRNT 	=10000	
START:	RESET
	MTPS	#LOCK	
	MOV 	#START,SP
	MOV	#CLKSER,@#CLKTRP
	MOV	#LOCK,@#CLKTRP+2
	MOV	#COM1,SG
	JSR	PC,GETNUM
	BNE	ISADC
DACSEC:	CLR	@#DR11S	
	MOV	#COM2,SG
	JSR	PC,GETNUM
	MOVB	BRK(R0),R1
	BIS	#ENABLE,R1
	MOV	R1,@#BRKMSK
	MOVB	DNE(R0),R1
	SWAB	R1
	MOV	R1,@#DNEMSK
	ASH	#13.,R0
	MOV	R0,R3
	MOV	#COM3,SG
	JSR	PC,GETNUM
	BEQ	ISCUR	
	MOV	#1,@#STPDNE
	MOV	#COM11,SG
	JSR	PC,GETNUM
	BNE	WILCHK	
	BR	.+6
ISCUR:	BIS	#10000,R3
	CLR	@#STPDNE     
WILCHK:	MOV	R3,@#DACCHN
	MOV	#COM4,SG
	JSR	PC,GETNUM
	MOV	R0,@#DACDC
	MOV	#COM5,SG
	JSR	PC,GETNUM
	MOV	R0,@#DACCHG
	CLR	@#COUNT
	CLR	@#PDAC	
	CLR	@#PTIME	
	MTPS	#UNLOCK	
CLKWT:	TST	@#DNEMSK
	BEQ	DACDNE
	JSR	PC,TICKLE
	BCC	CLKWT	
DACDNE:	MTPS	#LOCK	
	HALT
ISADC:	MOV	#COM6,SG
	JSR	PC,GETNUM
	MOV	R0,@#TYPADC
	MOV	#COM8,SG
	JSR	PC,GETNUM
	BIC	#177740,R0
	MOV	R0,@#ADCCHN
	MOV	#COM7,SG
	JSR	PC,GETNUM
	CMP	#32.,R0	
	BGE	.+6
	MOV 	#32.,R0	
	TST	R0
	BGT	.+6
	MOV	#1,R0
	ADD	@#ADCCHN,R0
	DEC	R0
	MOV	R0,@#MAXCHN
	MOV	#ADCMDE,@#DR11S
	TST	@#TYPADC
	BEQ	ADCSTR	
	MOV	#TOPCLR,SG
	JSR	PC,TYPSTR
ADCSTR:	MOV	@#ADCCHN,R3
	MOV	#SPACER,R4
	TST	@#TYPADC
	BEQ	ADCLP	
	JSR	PC,CRLF	
	CMP	@#MAXCHN,@#ADCCHN
	BEQ	ADCLP	
	MOV	#TOP,SG	
	JSR	PC,TYPSTR
ADCLP:	MOV	R3,@#DR11O
	MOV	#100.,R1
WAITLP:	BIT	#ADCDNE,@#DR11S
	BNE	ADCFIN	
	DEC	R1
	BGE	WAITLP	
	MOV	#COM9,SG
	JSR	PC,LINOUT
	BR	ADCLDN
ADCFIN:	MOV	DR11I,R0
	TST	TYPADC	
	BEQ	TSTDNE 	
	MOV	#IOBUF,SG
	JSR	PC,PRTINT
	MOV	#IOBUF,SG
	JSR	PC,TYPSTR
	MOV	R4,SG	
	MOV	(SG)+,R4
	JSR	PC,TYPSTR
TSTDNE:	JSR	PC,TICKLE
	BCS	ADCLDN	
	INC	R3	
	CMP	@#MAXCHN,R3
	BLT	ADCSTR	
	BR	ADCLP	

ADCLDN:	HALT
GETNUM:	JSR	PC,TYPSTR
	MOV	#IOBUF,SG
	JSR	PC,INSTR
	JSR	PC,GETINT
	MOV	#COM13,SG
	BCS	GETNUM
	TST	R0
	RTS	PC
 
CLKSER:	TST	@#DNEMSK
	BNE	.+4
	RTI		

	MOV	@#DACDC,R0
	ADD	@#PDAC,R0
	MOV	R0,R1
	BGE	.+4	
	NEG	R1
	CMP	#4000,R1
	BGE	VALOK	
	MOV	@#DACDC,R0
	MOV	@#DACCHG,@#PDAC
	NEG	@#PDAC

 
VALOK:	BIC	#170000,R0
	BIS	@#DACCHN,R0
	CLR	@#DR11S
	MOV	R0,@#DR11O
	ADD	@#DACCHG,@#PDAC
	TST	@#PTIME	
	BNE	CHKDNE	
	MOV	#1,@#DR11S
	MOV	@#BRKMSK,@#DR11O
	INC	@#PTIME	
	RTI

CHKDNE:	MOV	#STTMDE,@#DR11S
	MOV	@#DR11I,R0	
 	BIT	#PANIC,R0
 	BEQ	STPIT	
	TST	@#STPDNE
	BNE	.+4		
	RTI		

	BIT	@#DNEMSK,R0
	BNE	INRNGE
	CLR	@#COUNT 
	RTI		

INRNGE:	INC	@#COUNT 
	CMP	#3,@#COUNT 
	BLE	.+4
	RTI

STPIT:	CLR	@#DNEMSK
	MOV	#BRKMDE,@#DR11S
	CLR	@#DR11O
	RTI
BRK:	.BYTE	1,2,4,10,20,40,100,0
DNE:	.BYTE	1,2,4,10,20,40,100,0
BRKMSK:	0
DNEMSK:	0
STPDNE:	0
DACCHN:	0
DACDC:	0
DACCHG:	0
PDAC:	0
COUNT:	0
PTIME:	0
TYPADC:	0
INDX:	0
ADCCHN:	0
MAXCHN:	0

 
COM1:	.ASCII	/DAC OR ADC(0:1) = /
	.BYTE	0
COM2:	.ASCII	/DAC NUMBER (0:7) = /
	.BYTE	0
COM3:	.ASCII	/CURRENT OR POSITION MODE (0:1) = /
	.BYTE	0
COM11:	.ASCII	/CHECK DONE BIT (0=NO,1=YES) = /
	.BYTE	0
COM4:	.ASCII	/DAC DC VALUE (-2048 : 2047) = /
	.BYTE	0
COM5:	.ASCII	/DAC CHANGE EVERY  5 MSEC = /
	.BYTE	0
COM6:	.ASCII	/TYPE ADC READINGS (0:1)? = /
	.BYTE	0
COM7:	.ASCII	/NUMBER OF CHANNELS TO PRINT (1:32) = /
	.BYTE	0
COM8:	.ASCII	/ADC CHANNEL (0:31) = /
	.BYTE	0
COM9:	.ASCII	/**ERROR** NO ADC DONE SIGNALED/
	.BYTE	0
COM13:	.ASCII	/**ILLEGAL NUMBER**, TRY AGAIN = /
	.BYTE	0

TOP:	.BYTE	10,10,10,10,10,0
TOPCLR:	.BYTE	14,14,14,14,14,14,14,14,0

	.EVEN

SPACER:	SPACE2
	.ASCII	/*  /
	.BYTE	0
SPACE1:	SPACE2
	.ASCII	/   /
	.BYTE	0
SPACE2:	SPACE3
	.ASCII	/   /
	.BYTE	0
SPACE3:	SPACE4
	.ASCII	/