DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦1ff960111⟧

    Length: 13864 (0x3628)
    Notes: pts_type(SC)
    Names: »DRCR01.SC«

Derivation

└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
    └─⟦this⟧ »TOSSWORK/DRCR01.SC« 

PTS(SC)

	IDENT DRCR01 	REL 8.2 78-09-15  870105040820 

		
		
************************************************************
* 
*  PHILIPS TERMINAL SYSTEM PTS
* 
*  DRCR01 = DRIVER CARD READER
* 
* 
* 
* 
* 
************************************************************
* 
* 
*    THIS DRIVER HANDLES ONE CARD READER PTS 6885 CONNECTED 
*    TO CPU VIA CHCD ON PROGRAMMED OR MULTIPLEX CHANNEL 
* 
* 
************************************************************
	EJECT
***************** 
*    ENTRIES    * 
***************** 
	ENTRY	CRADR	ADDRESS TABLE
	ENTRY	ACCR	ACTIVATION PART 
	ENTRY	CRON	RECOVERY ROUTINE
	ENTRY	IHCR	INTERRUPT HANDLER 
	ENTRY	DWCR01	DWT FOR CARD READER 
		
**************************************
*    EXTERNAL TOSS MODULE ENTRIES    *
**************************************
	EXTRN	TDISP	DISPATCHER 
	EXTRN	SAVE8	SAVE 8 REGISTERS ON A15-STACK
	EXTRN	RETUR8	LOAD 8 REGISTErS FROM A15-STACK 
	EXTRN	TENDIO	END I/O 
	EXTRN	DISIOE	REQUEST ERROR 
	EXTRN	INTSAV	SAVE AREA, LAST INTERRUPT 
		
******************************
*    DISPLACEMENTS IN DWT    *
******************************
DWTST	EQU	2 
ECB	EQU	4 
DWTA2	EQU	18
DWTA4	EQU	20
DWTA5	EQU	22
STATUS	EQU	32 
		
******************* 
*    CONSTANTS    * 
******************* 
DEVICE	EQU	/0D
MUX	EQU	DEVICE+DEVICE 
REQLEN	EQU	4
BUFFER	EQU	2
EFFLEN	EQU	6
	EJECT
* 
**************************
*  CONDITIONAL ASSEMBLY  *
**************************
*  PROGRAMMED CHANNEL MAY BE USED INSTEAD 
*  OF MULTIPLEX CHANNEL BY SETTING X:A=1
* 
X:A	EQU	0 
CHAN	EQU	X:A
* 
	  STATUS 
	  ******************** 
	  -HARDWARE: 
	     BIT 10: INPUT HOPPER EMPTY OR OUTPUT
		    STACKER FULL
		14: THROUGHPUT ERROR
		15: NOT OPERABLE
		
	  -SOFTWARE: 
	     BIT  0: REQUEST ERROR 
	          3: :EOF DETECTED 
	         12: INCORRECT LENGTH
	         13: DATA FAULT
		
		
		
	  ORDER
	  ******************** 
		
	         /02 STANDARD READ 
		    -THE CARDS ARE READ IN HOLLERITH CODE, ON 12 BITS,
		     CONVERTED INTO ASCII CODE ON 8 BITS, AND STORED
		     UNTIL REQUESTED LENGTH IS REACHED
	EJECT
	  ***********************
	  *NORMAL REGISTER USAGE*
	  ***********************
		A1=RETURN CODE
		A2=WORK REGISTER
		A3=WORK REGISTER
		A4=BUFFER ADDRESS 
		A5=STACK BASE 
		A6=DWT-ADDRESS
		A7=ORDER
		A8=ECB-ADDRESS
		
***************************************************** 
* NOTE! IN COMMENTS, THE FOLLOWING NOTATION IS USED * 
*           CARD COLUMNES: 1,2,3,4.......80         * 
*           CARD ROWS :   12,11,0,1,2,3.....9       * 
***************************************************** 
		
		
		
*             ADDRESS TABLE 
*             ************* 
		
CRADR	DATA	ACCR 
	IFT	CHAN=0 
* 
**********
* BUFFER *
**********
MUXBUF	EQU	*
	RES	80 
	XIF
	EJECT
************************* 
*                       * 
*    ACTIVATION PART    * 
*                       * 
************************* 
		
ACCR	EQU	*
	SUK	A7,2	ORDER 2?
	RF(Z)	ORDER2	YES!
	ABL	DISIOE	NO! REQEST ERROR
ORDER2	LD	A3,REQLEN,A8
	CWK	A3,80
	RF(NG)	AC.1
	LDK	A1,8	REQ. LENGTH IS TOO LONG!
	RF	ENDIO	SET "INCORRECT LENGTH" BIT 12 
AC.1	EQU	*
	CM	STATUS,A6 
	CM	FLAG	RESET RECOVERY INDICATOR 
	CF	A5,READ	READ ONE CARD 
	ANKL	A1,/FFF7	RESET "INCORRECT LENGTH" BIT 12
	OR	A1,STATUS,A6
ENDIO	CF	A15,TENDIO	END REQUEST 
EXIT	ABL	TDISP
	EJECT
******************************
* SUBROUTIN TO READ ONE CARD *
******************************
READ	EQU	*
	ST	A5,DWTA5,A6	SAVE A5 
	LD	A4,BUFFER,A8
	SUK	A4,1 
	ST	A4,DWTA4,A6	SAVE BUFFER ADDRESS - 1 
	LDK	A2,1 
	ST	A2,DWTA2,A6	SAVE "COLUMN TO BE EXAMINED"
	IFT	CHAN=0 
	LDKL	A4,/8050	DEFINE CONDITIONS
	WER	A4,MUX 
	LDKL	A4,MUXBUF	DEFINE BUFFER ADDRESS 
	WER	A4,MUX+1 
	XIF
	CIO	A3,1,DEVICE	CIO START
	RB	EXIT
		
********************
* RECOVERY ROUTINE *
********************
CRON	EQU	*
	CF	A15,SAVE8 
	LDKL	A6,DWCR01	DWT ADDRESS 
	LD	A3,DWTST,A6	REQUEST ON? 
	RB(N)	EXIT	NO! 
	LDK	A1,2	SET "THROUGHPUT ERROR" BIT 14 
	IFT	CHAN=0 
	IM	FLAG	INDICATE RECOVERY
	XIF
	RB	ENDIO 
	EJECT
		
		
		
********************* 
* INTERRUPT HANDLER * 
********************* 
IHCR	EQU	*
	ST	P,INTSAVE	SAVE LAST INTERRUPT 
	CF	A15,SAVE8	SAVE A1 - A8
	LDKL	A6,DWCR01	DWT ADDRESS 
	LD	A2,DWTA2,A6	CARD-COLUMN 
	LD	A8,ECB,A6	ECB ADDRESS 
	IFT	CHAN=1 
	INR	A3,0,DEVICE	LD A3 WITH CHARACTER FROM CARD READER
	RF(A)	CONV 
	XIF
	IFT	CHAN=0 
	LDKL	A5,MUXBUF	GET BUFFERADDRESS AND START CONVERSION
	ENB
IHCR10	EQU	*
	LDR*	A3,A5	GET WORD FROM BUFFER
	ADK	A5,2 
	RF	CONV	CONVERT
IHCR20	EQU	*
*   READY   * 
	XIF
	SST	A1,DEVICE	NOT ACCEPTED 
	LD	A5,DWTA5,A6 
	RTN	A5 
	EJECT
		
******************* 
* CODE CONVERSION * 
******************* 
		
	  A3=RECIEVED CHARACTER IN HOLERITH-CODE 
	  A2=COLUMN TO BE EXAMINED 
	  A4=BUFFER ADDRESS - 1
		
		
		
CONV	LDK	A1,0 
	SLL	A3,4	SKIP INSIGNIFICANT BITS 
	RF(N)	FIRST
	RF(P)	SCAN1
	LDK	A3,/20	CHARACTER IS A SPACE
	CW	A2,REQLEN,A8	BUFFER FILLED? 
	ABL(NG)	PUTCHA	NO! 
	ABL	TEST 
* 
HOLE1	DATA	0
HOLE2	DATA	0
	EJECT
*=======================================================================
	                                                      0NE HOLE 
SCAN1	ADK	A1,1	SCAN FOR THE FIRST HOLE
	SLL	A3,1 
	RB(P)	SCAN1
FIRST	CW	A2,REQLEN,A8	BUFFER FILLED?
	RF(NG)	IH.1	NO!
	LDK	A3,8	YES! SET "INCORRECT LENGTH" BIT 12
	ORS	A3,STATUS,A6 
	ABL	READY
IH.1	ST	A2,EFFLEN,A8	STORE EFFECTIV LENGTH
	ANKL	A3,/7FFF
	RF(NZ)	SCAN2	THE ONLY HOLE IN THIS COLUMN? 
	SUK	A1,1	YES!
	  CONVERSION IS MADE DIRECTLY
	  ***************************
	RF(P)	*+12 
	RF(Z)	*+6
	LDK	A3,/26	& (ROW 12)
	RF	PUTCHA
	LDK	A3,/2D	- (ROW 11)
	RF	PUTCHA
	LDR	A3,A1
	ADK	A3,/2F	DIGIT 0 - 9 (ROW 0 - 9) 
	RF	PUTCHA
			                       ONE HOLE
*=======================================================================
	                                                      TWO HOLES
	EJECT
SCAN2	ST	A1,HOLE1	SAVE FIRST HOLE POSITION
	ADK	A1,1	SCAN FOR SECOND HOLE
	SLL	A3,1 
	RB(P)	*-4
	ST	A1,HOLE2	2:ND HOLE FOUND! SAVE POSITION 
	ANKL	A3,/7FFF	LAST HOLE IN THIS COLUMN?
	RF(P)	SCAN3	NO!
	LD	A1,HOLE1	YES! 
	CWK	A1,3 
	RF(NL)	SPEC	SPECIAL CHARACTER? 
	ADR	A1,A1	NO! LETTER OR /
	LD	A1,TABLE1,A1	CHOOSE TABLE 
	LD	A3,HOLE2
	SUK	A3,3 
	RF(N)	FAULT	DATA FAULT?
	ADR	A1,A3	NO!
	LCR	A3,A1	CHOOSE LETTER IN TABLE 
	RF	PUTCHA
	EJECT
		
		
*           CONVERSION TABLE 1 ASCII /41 - 5A, 2F 
            ************************************* 
TABLE1	DATA	TAB.1 
	DATA	TAB.2 
	DATA	TAB.3 
			ROWS ON CARD 
			------------ 
TAB.1	DATA	'ABCDEFGHI '	12,1 - 12,9 
TAB.2	DATA	'JKLMNOPQR '	11,1 - 11,9 
TAB.3	DATA	'/STUVWXYZ '	0,1 - 0,9 
            ************************************* 
	EJECT
		
		
SPEC	RF(E)	FAULT	DATA FAULT?
	  -THE FIRST HOLE MUST NOT BE IN ROW 1!
	SUK	A1,4	NO! 
	CWK	A1,5	A1=FIRST HOLE 
	RF(G)	FAULT	DATA FAULT?
	  -THE FIRST HOLE MUST NOT BE IN ROW 8!
	LD	A3,HOLE2
	SUK	A3,10
	RF(NZ)	FAULT	DATA FAULT? 
	  -THE SECOND HOLE MUST BE IN ROW 8! 
	LC	A3,TABLE2,A1	CHOOSE CHARACTER IN TABLE2 
	RF	PUTCHA
		
		
	           CONVERSION TABLE 2
	  *************************************
			ROWS ON CARD 
			------------ 
TABLE2	DATA	':#'	2,8  3,8 
	DATA	/4027	4,8  5,8
	DATA	'="'	6,8  7,8 
	  *************************************
	                                                      TWO HOLES
*=======================================================================
	                                                      THREE HOLES
	EJECT
* 
SCAN3	LD	A1,HOLE1 
	SUK	A1,2 
	RF(P)	FAULT	DATA FAULT?
	  -THE FIRST HOLE MUST BE WITHIN THE FIRST 
	   THREE ROWS (12, 11, 0)
	LD	A1,HOLE2
	SUK	A1,4 
	RF(N)	FAULT	DATA FAULT?
	SUK	A1,5 
	RF(P)	FAULT
	  -THE 2:ND HOLE MUST BE WITHIN ROW 2 TO 7!
	ADK	A1,9 
	ADK	A1,1	SCAN FOR THE 3:RD HOLE
	SLL	A3,1 
	RB(P)	*-4
	SUK	A1,10	3:RD HOLE FOUND! 
	RF(NZ)	FAULT	DATA FAULT? 
	  -THE 3:RD HOLE MUST BE IN ROW 8
	SLL	A3,1 
	RF(NZ)	FAULT	DATA FAULT? 
	  -NO MORE THEN 3 HOLES! 
	LD	A3,HOLE1
	ADR	A3,A3
	LD	A3,TABLE3,A3	CHOOSE TABLE 
	AD	A3,HOLE2
	SUK	A3,4 
	LCR	A1,A3
	LDR	A3,A1
	RF	PUTCHA
	EJECT
* 
* 
	           CONVERSION TABLE 3
	  *************************************
TABLE3	DATA	TAB.4 
	DATA	TAB.5 
	DATA	TAB.6 
	                                ROWS ON CARD 
	                               ------------------- 
TAB.4	DATA	'[.'	12,2,8  12,3,8
	DATA	'<('	12,4,8  12,5,8 
	DATA	/2B5E	12,6,8  12,7,8
TAB.5	DATA	'!$'	11,2,8  11,3,8
	DATA	'*)'	11,4,8  11,5,8 
	DATA	';]'	11,6,8  11,7,8 
TAB.6	DATA	/5C2C	0,2,8   0,3,8
	DATA	/255F	0,4,8   0,5,8 
	DATA	'>?'	0,6,8   0,7,8
	  *************************************
	                                                     THREE HOLES 
*=======================================================================
	EJECT
		
	     SET DATA FAULT
	     **************
FAULT	EQU	* 
	LDK	A1,4	SET DATA FAULT,BIT 13, IN STATUS
	ST	A1,STATUS,A6
	LDK	A3,/3F	REPLACE CHARACTER BY "?"
		
		
	     PUT CHARACTER (ASCII) IN USER BUFFER
	     ************************************
PUTCHA	EQU	*
	IFT	CHAN=0 
	LD	A4,FLAG 
	RF(NZ)	NEXT10	RECOVERY HAS BEEN PERFORMED! 
	XIF
	LD	A4,DWTA4,A6	A2=COLUMN TO BE EXAMINED
	ADR	A4,A2	A3=ASCII CHARACTER 
	SCR	A3,A4	A4=BUFFER ADDRESS - 1
TEST	CWK	A2,80	THE WHOLE CARD SCANNED?
	RF(L)	NEXT	NO! 
	IFT	CHAN=1 
READY	CIO	A3,0,DEVICE	CIO HALT
	XIF
	IFT	CHAN=0 
READY	EQU	* 
	XIF
	LDK	A2,4	CHECK IF :EOF 
	CW	A2,EFFLEN,A8
	RF(NE)	NEXT00	EFF.LENGTH #4
	LD	A4,DWTA4,A6	GET BUFFER-ADDRESS
	ADK	A4,1 
	LDR*	A2,A4	GET FIRST WORD IN BUFFER
	CWK	A2,':E'	A2 = :E ?
	RF(NE)	NEXT00	NO!
	LD	A2,2,A4	YES, GET NEXT WORD
	CWK	A2,'OF'	A2 = OF ?
	RF(NE)	NEXT00	NO!
	LDKL	A2,/1000	YES! :EOF DETECTED 
	ORS	A2,STATUS,A6	SET BIT 3 IN R.C. 
	EJECT
NEXT00	EQU	*
	IFT	CHAN=1 
NEXT	ADK	A2,1 
	ST	A2,DWTA2,A6	SAVE A2 
	XIF
	IFT	CHAN=0 
	ABL	IHCR20	READY 
NEXT	EQU	*
	ADK	A2,1 
	ST	A2,DWTA2,A6 
	ABL	IHCR10	TAKE NEXT CHARACTER 
NEXT10	EQU	*
	XIF
	ABL	RETUR8	LOAD A1 - A8 AND RETURN A15 
	EJECT
		
************************************* 
* DEVICE WORK TABLE FOR CARD READER * 
************************************* 
		
DWCR01	EQU	*
	DATA	0	CHANNEL PARAMETER 
	DATA	/8000	STATUS
	DATA	0	ECB ADDRESS 
	DATA	0	LAST OUTPUT, ORDER
	DATA	CRADR	POINTER TO DEVICE DRIVER
	DATA	0	POINTER TO TTAB 
	DATA	0	WAIT/ACTIVATE INDICATOR 
	DATA	0	TERMINAL QUEUE
	DATA	0	OUTPUT QUEUE LINK 
	DATA	0	SAVEAREA FOR A2 
	DATA	0	SAVEAREA FOR A4 
	DATA	0	SAVEAREA FOR A5 
	RES	4	DWT STACK
	DATA	0	SOFTWARE STATUS SAVEAREA
FLAG	DATA	0	RECOVERY INDICATOR
	END

Full view