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

⟦c2f858e9c⟧

    Length: 11186 (0x2bb2)
    Notes: pts_type(SC)
    Names: »DRDI01.SC«

Derivation

└─⟦7b35573c9⟧ Bits:30009690 Philips computer tape "600402"
    └─⟦this⟧ »M:AF/DRDI01.SC« 

PTS(SC)

	IDENT DRDI01 	REL 11.0 81-01-26 870105041100 

* 
* 
******************************************************* 
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   DRDI01 = DRIVER INDICATOR DISPLAY 
* 
* 
* 
* 
* 
* 
******************************************************* 
* 
* 
*   THIS DRIVER HANDLES OUTPUT TO SIGNAL DISPLAYS PTS 6241
*   AND 6242. IT ALSO CONTROLS LAMPS ON KEYBOARDS PTS 6232
*   6233, 6236 AND 633, 62361.
*   IT IS ALSO POSSIBLE TO OPEN CASH- 
*   BOXES ON FT80.
* 
*   THE DRIVER CONSISTS OF THE FOLLOWING PARTS: 
* 
*   A C D I :	ACTIVATION PART 
* 
*   R C D I :	RECOVERY ROUTINE
* 
*   THE FOLLOWING ORDERS ARE TREATED: 
* 
*   ORDER 37:	WRITE LIGHTS ON 
*         38:	WRITE LIGHTS OFF
*         06:	WRITE PROGRAM DISPLAY 
*         39:     WRITE  FLASHING LIGHTS
	EJECT
* 
* 
*   NORMAL REGISTER USAGE:
* 
*   REGISTER A1:	RETURN CODE
*            A2:  OUTPUT
*            A3:	WORK REGISTER
*            A4:	WORK REGISTER
*            A5:	WORK REGISTER
*            A6:	DWT-ADDRESS
*            A7:	ORDER
*            A8:	ECB-ADDRESS
* 
* 
*   SYSTEM ADAPTATION 
* 
*   DISPLAY TYPE MUST BE DEFINED IN DWTDEV
* 
*   BIT  0 = 1   FOR PTS 6232,6331,6236,6272
*   BIT  0 = 0   FOR PTS 6241,6242,6233 
* 
*   ORDER 06, WRITE PROGRAM DISPLAY MAY BE EXCLUDED BY
*   CONDITIONAL ASSEMBLY
* 
	EJECT
* 
* 
*************** 
*    ENTRIES  * 
*************** 
* 
	ENTRY	DIAD	ADDRESS TO ADDRESS-BLOCK
* 
******************* 
*    EXTERNALS    * 
******************* 
* 
	EXTRN	LENDIS	PERFORM END I/O AND DISPATCH
	EXTRN	LDISP	DISPATCHER ORDINARY INT. 
	EXTRN	OUTPUT	SEND ONE CHAR.
	EXTRN	GETCHR	GET CHARACTER 
	EXTRN	LENDER	I/O REQUEST ERROR 
	EXTRN	DWTST	STATUS WORD
	EXTRN	DWTDEV	STATUS
	EXTRN	DWTECB	ECB ADDRESS 
	EXTRN	DWTSB2	STACK BASE
	EXTRN	SETIME	SET TIMER 
	EXTRN	STABLK	START BLOCK 
	EXTRN	ENDBLK	END BLOCK 
	EXTRN	ECBCW	CONTROL WORD OF ECB
* 
* 
	EJECT
* 
* 
*************** 
*    TABLES  *
*************** 
* 
* 
	DATA	DVBLEN	BUFFER SIZE (MMU)
	DATA	2	DEVICE INDEX
* 
DIAD	EQU	*	ADDRESS BLOCK
	DATA	ACDI	ACTIVATION DRIVER
	DATA	0	ABORT ROUTINE ADDRESS 
	DATA	0	NO INTERRUPT HANDLER
	DATA	RCDI	RECOVERY ROUTINE 
* 
CCERR	EQU	/4	CODE CHECK ERROR 
* 
	EJECT
* 
* 
************************* 
*  CONDITIONAL ASSEMBLY * 
************************* 
* 
* 
*   ORDER 06, WRITE PROGRAM DISPLAY MAY BE EXCLUDED BY
*   SETTING X:A=0 
* 
X:A	EQU	0 
ORD6	EQU	0
* 
* 
*   ORDER 39, WRITE FLASHING LIGHTS MAY BE INCLUDED 
*   IN THIS DRIVER BY SETTING X:B=1 
* 
X:B	EQU	0 
FLASH	EQU	0 
* 
* 
	EJECT
* 
* 
*   MMU BUFFER SIZE 
* 
X:C	EQU	4 
DVBLEN	EQU	X:C
* 
* 
********************* 
* DWT-DISPLACEMENTS * 
********************* 
* 
DWTDIB	EQU	/02	SAVE AREA
DWTFLA	EQU	/08	SAVE AREA FOR FLASH IMAGE
DWTTP	EQU	/0A	TIMER POINTER 
TIME	EQU	5	FLASH TIME 
* 
	EJECT
* 
*    A C D I
* 
*   ACTIVATION PART: CHECKS VALIDITY OF ORDERS AND STARTS 
*   THE PROCESSING
* 
* 
ACDI	EQU	*
	IFT	ORD6=1 
	CCK	A7,/0606 
	RF(E)	ADI050	ORDER /06 
	XIF
	LD	A4,ECBCW,A8	CONTROL WORD TO A4
	LD	A3,DWTDEV,A6	TEST IF ONE OR TWO CHARACTER DEVICE
	RF(N)	ADI005	ONE CHARACTER DEVICE
	LDR	A3,A4	CONTROL WORD tO A3 
	ANK	A4,/F
	ANK	A3,/F0 
	SLL	A3,4 
	ORR	A4,A3	LAMPCODES IN A4
ADI005	EQU	*
	IFT	FLASH=1
	CCK	A7,/3939 
	RF(E)	FLA05
	XIF
	SUK	A7,/37 
	RF(E)	ADI010	ORDER 37
	SUK	A7,1	
	RF(E)	ADI007	ORDER 38
	ABL(NE)	LENDER	REQUEST ERROR 
	EJECT
	IFT	FLASH=1
* 
*     FLASH    ORDER /39
* 
* 
FLA05	ORS	A4,DWTFLA+DWTDEV,A6	SAVE FLASH IMAGE
* 
	LD	A1,DWTTP+DWTDEV,A6	GET TIMER POINTER
	RF(NZ)	FLA10	TIMER ALREADY STARTED 
	LDR	A1,A6
	CF	A15,SETIME
	DATA	FLTUT,TIME
	ST	A4,DWTTP+DWTDEV,A6
	LD	A4,DWTFLA+DWTDEV,A6	RELOAD FLASH IMAGE
* 
FLA10	EQU	* 
	LDKL	A3,/200 
	XRS	A3,DWTDEV,A6	SWITCH 0N-OFF FLAG
* 
	AN	A3,DWTDEV,A6	ON OR OFF ?
	RF(Z)	FLA20	WRITE FLASHING LIGHTS OFF
* 
	ORS	A4,DWTDIB+DWTDEV,A6	ON + FLASH 
	RF	ADI020	TURN ON LAMPS
* 
FLA20	C1R	A4,A4 
	ANS	A4,DWTDIB+DWTDEV,A6	ON-FLASH 
	RF	ADI020	TURN OFF LAMPS 
	EJECT
* 
* 
*   FLASH TIME OUT ROUTINE
* 
* 
FLTUT	EQU	* 
	LDR	A6,A1	GET DWT-ADDRESS IN A6
	LD	A4,DWTST,A6	DEVICE BUSY ? 
	RF(NN)	FLA40	YES ! 
* 
	LDKL	A4,/7FFF	SET DEVICE BUSY
	ANS	A4,DWTST,A6
* 
	LD	A4,DWTFLA+DWTDEV,A6 
	RF(Z)	FLA30	NO MORE LAMPS TO FLASHER 
* 
	LDR	A5,A6	INITIATE DWT-STACK POINTER 
	ADKL	A5,DWTSB2 
	LDKL	A1,-TIME	RESTART TIMER
	ST*	A1,DWTTP+DWTDEV,A6 
	RB	FLA10 
* 
FLA30	CM	DWTTP+DWTDEV,A6	TURN OFF TIMER 
	RF	ENDIO 

* 
FLA40	EQU	* 
	LDKL	A1,-TIME	RESTART TIMER
	ST*	A1,DWTTP+DWTDEV,A6 
	ABL	LDISP
	XIF
	EJECT
	IFT	ORD6=1 
* 
* 
*   ORDER 06: WRITE PROGRAM DISPLAY 
* 
ADI050	LDK	A3,0 
ADI060	CF	A15,GETCHR	GET CHARACTER
	LDR	A1,A1	LAST CHARACTER ? 
	RF(Z)	ADI070	YES 
	LDR	A4,A2
	SRL	A4,4 
	SUK	A4,3	UNDEFINED CHARACTER ? 
	RF(L)	ADI100	YES 
	CWK	A4,3	UNDEFINED ? 
	RF(G)	ADI100	YES 
	ADKL	A4,DWTDIB+2 
	ADR	A4,A6	 
	SCR	A2,A4	STORE CHARACTER IN DWT-BUFFER
	RB	ADI060	GET NEXT CHARACTER 
ADI070	SC	A1,DWTDEV+1,A6	SET START VALUE IN BYTE COUNTER
	LDK	A2,/4	BLOCK LENGTH 
	CF	A5,STABLK	START OF BLOCK
	RF(NZ)	DIER10	NOT OK ! 
	RF	SSEQ00	SEND CHARACTERS
* 
* 
*    CODE CHECK ERROR 
* 
ADI100	LDK	A1,CCERR	SET RETURN CODE 
	ORS	A1,8,A8	IN ECB 
	RB	ADI060	GET NEXT CHARACTER 
	XIF
* 
	EJECT
* 
* 
*    ORDER 38: SWITCH OFF LAMPS 
* 
ADI007	EQU	*
	C1R	A4,A4
	ANS	A4,DWTDIB+DWTDEV,A6	RESET BITS IN DWT-BUFFER 
	IFT	FLASH=1
	ANS	A4,DWTFLA+DWTDEV,A6	RESET BITS IN FLASH IMAGE
	XIF
	RF	ADI020
* 
* 
* 
* 
*    ORDER 37: TURN ON LAMPS
* 
* 
* 
ADI010	ORS	A4,DWTDIB+DWTDEV,A6	SET BITS IN DWT-BUFFER 
	IFT	FLASH=1
	C1R	A4,A4
	ANS	A4,DWTFLA+DWTDEV,A6	RESET BITS IN FLASH IMAGE
	XIF
	EJECT
* 
*   SENDING SEQUENCE
* 
ADI020	LDK	A2,/2	BLOCK LENGTH 
	CF	A5,STABLK	START OF BLOCK
	RF(NZ)	DIER10	NOT OK ! 
	LC	A2,DWTDIB+DWTDEV,A6	GET FIRST CHARACTER 
ADI035	LDK	A1,1 
	SC	A1,DWTDEV+1,A6	SET START VALUE IN BYTE COUNTER
	LD	A3,DWTDEV,A6	TWO OUTPUTS ?
	RF(NN)	SSEQ20	YES
* 
SSEQ00	LDKL	A2,DWTDIB+DWTDEV	NO ! 
	ADR	A2,A6	 
	LD	A4,DWTDEV,A6
	ANK	A4,/FF 
	ADR	A2,A4
	LCR	A2,A2	GET CHARACTER
	LD	A8,DWTECB,A6
	RF(Z)	SSEQ10	IF POWER FAIL NO BELL OR CASH-BOX OPENING 
	LD	A3,ECBCW,A8	BELL? 
	RF(NN)	SSEQ05	NO 
	ORK	A2,/40	YES ! INDICATE BELL 
SSEQ05	SLC	A3,1	OPEN BOX 2 ?
	RF(NN)	SSEQ07	NO ! 
	ORK	A2,/20	YES ! INDICATE OPENING OF BOX 2 
SSEQ07	SLC	A3,1	OPEN BOX 1 ?
	RF(NN)	SSEQ10	NO ! 
	ORK	A2,/10	YES ! INDICATE OPENING OF BOX 1 
	EJECT
* 
SSEQ10	IM	DWTDEV,A6	INCREMENT BYTE COUNTER
* 
SSEQ20	CF	A5,OUTPUT	SEND CHAR.
	RF(NZ)	DIER10	NOT OK ! 
	LD	A4,DWTDEV,A6	GET DEVICE STATUS
	RF(N)	SSEQ30	ONE CHARACTER DEVICE !
* 
	ANK	A4,/FF	GET BYTE COUNTER
	SUK	A4,2	TWO CHARACTERS SENT ? 
	EJECT
	IFT	ORD6=1 
	RF(NZ)	SSEQ25	NO ! 
	LDR	A7,A7	GET ORDER
	IFT	ORD6=1 
	CWK	A7,06	ORDER 06, WRITE PROGRAM DISPLAY ?
	RF(NE)	SSEQ30	NO ! 
SSEQ25	SUK	A4,4	LAST CHARACTER ?
	RF(Z)	SSEQ30	YES ! 
	RB	SSEQ00
	XIF
	IFT	ORD6=0 
	RF(Z)	SSEQ30	YES 
	RB	SSEQ00	NO ! GET NEXT CHARACTER
	XIF
* 
SSEQ30	CF	A5,ENDBLK	END OF BLOCK
	RF(NZ)	DIER10
* 
ENDIO	EQU	* 
	ABL	LENDIS	PERFORM END I/O AND DISPATCH
	EJECT
* 
* 
*   ERROR ROUTINE 
* 
* 
DIER10	EQU	*
	SRC	A1,1	NOT OPERABLE ?
	RF(N)	DIER20	YES 
* 
	SRC	A1,2	LINK ERROR ?
	ABL(N)	LDISP	YES, GO TO DISPATCHER 
* 
	RF	RCDI	PERFORM RECOVERY 
* 
DIER20	EQU	*
	SLC	A1,1	SET "NOT OPERABLE" BIT
	RB	ENDIO	END I/O 
	EJECT
* 
*    R C D I
* 
*   RECOVERY ROUTINE: AT POWER UP ALL LIGHTS ARE FED WITH 
*   THE VALUES EXISTENT AT POWER FAILURE TIME.THE INFORMATION 
*   OM PROGRAM DISPLAY IS ALSO RESTORED 
* 
* 
RCDI	EQU	*
	LDKL	A2,/7FFF	SET DEVICE BUSY
	ANS	A2,DWTST,A6
* 
	LDK	A2,/4	BLOCK LENGTH 
	CF	A5,STABLK	START OF BLOCK
	RB(NZ)	DIER10
* 
	LC	A2,DWTDIB+DWTDEV,A6	GET FIRST CHARACTER 
	RB	ADI035
* 
* 
* 
	END





Full view