File EXEC3

Directory of image this file is from
This file as a plain text file

*20
	/// EXEC3
/PDP-12 EXEC
/DF32 & RK08 DISK VERSION (NOT FOR RK8E)
/BANK 0 AT BLOCKS 110-113
/BANK 3 AT BLOCKS 14-17
/NO API
/NO COMMAND EXEC
/
/DISK (DF32 & RK08)
/LPT (LP12)
/SWITCH READER
/SWITCH PASSER
/COPYRIGHT 1972
/N. DAVID CULVER
	EJECT
/DEFINITIONS
	IOB=500
	RMF=6244
	DJR=6
	ESF=4
	SFA=24
	STD=416
	TWC=417
	PDP8=2
	LINC=6141
	AXO=1
	XOA=21
	TAC=3
	TMA=23
	CIF=6202
	CDF=6201
	ION=6001
	IOF=6002
	RIB=6234
	RDF=6214
	RIF=6224
	SPL=6602
	RFC=6014
	EJECT
/ASSIGNMENTS
	USRSIZ=10
	IOSIZ=5
/
	PLO=1
	CLK=2
	DSK=3
	TP0=4
	HSP=12
	KB0=13
	HSR=21
	LPT=24
	PLT=25
	DS1=26
	BPLT=30
	EJECT
/INTERRUPT PROCESSOR
/
	SEGMNT 0
	*1
/
	LINC
	STC SAVAC
C2000,	ADD 0
	STC SAVPC
	ADD C1000
	JMP PROINT-1
ONE,	1
/
	*15
	2\USR4
/
	*20
	MONITO
IFIND,	LDA I 10
	STC .+2
	IOB
TEM4,	0 	/CLEAR FLAGS ETC.
	STC TEM5
	LDA I 10
	SCR 13 	/DEVICE  
	LDA I 10
	STC .+4
	LDA I
TEM5,	0 	/AC
	LIF 3
	JMP 	/SERVICE ROUTINE
/
USER,	4
PSTATE,	0
	EJECT
/LINC MODE INTERRUPT
/
	*41
LNCINT,	STC SAVAC
	LDA
C40,	40
	BSE I
	JMP
	STC SAVPC
	JMP INTSAV
/
PROINT,	SET I 10
	2\DEVTAB-1
/
NXTDEV,	LDA I 10
	AZE I
	RETURN
	STC .+2
	IOB
TEM3,	0
CSKP,	SKP
	JMP IFIND
	XSK I 10
	XSK I 10
	XSK I 10
	JMP NXTDEV
	EJECT
/COMMON INTERRUPT STRIPPER
/
INTSAV,	LDF 3
	SET 10
	0
	SET 14
	15
	ROL I 14
	FLO I
	ADD C2000
	ADD USER
	STA I 14
	QAC
	ROL 1
	QLZ
	ADD ONE
	STA I 14
	CLR 	/RIB DOES NOT JAM
	IOB
	RIB
	SETFLD
	BSE I
SUMB,	LDF
	STC GOB
	LDA 14
	ADD SUMB
	STC GOBU
	LDA I
SAVPC,	0
	STA I 14
/
GOB,	LDF
	LDA
	2000
	LDF 3
	STA I 14 	/0 LOC
/
	LDA I
SAVAC,	0
	STA I 14
	LIF 0
	JMP 10
	EJECT
	SLEEP=JMP .
/
	COM
	STA 15
	JMP 0
/
M1,	7777
	EJECT
/TRAP PROCESSOR
/
	*141
	IOB
	IOF
	STC SAVAC
C1000,	LDA
	140
	PDP
	PMODE
	TAD M1 	/PRESERVE FLO
	LINC
	LMODE
	BSE I
	JMP
	STC SAVPC
	JMP INTSAV
	JMP SNSTST	/CHK SNS & RLSW
	FETCH
	STA I
TRPINS,	0
	ROR I 6
	SHD I
	0500
	DOOPR
	SHD I
	0700
	DOFP
	DOEXC
	EJECT
/740 CALL FLOATING POINT
	DOFP=JMP .
/
	LDA
	15
	ADA I
C4,	4
	STC 14
	LDA I
FPUSE,	0
	AZE I
	JMP OKFP
	LDA I
MONE,	-1
	ADM I 14
	TRYCLK
/
OKFP,	LDA I 14
	ADD MONE
	STC FLOPC
	ADD GOB
	STA
	FLOUMB
	BCL I
	40
	STC FRMB
/
	LDF 1
	LDA I
FLOUMB,	0
	STA
	2020
	LDA I
GOBU,	0
	STA
	2022
	STC FPUSE
	LDA I 14
	LDA I 14
	STA
	2024
	LDA I
FLOPC,	0
	LIF 1
	IOB
	ION
	JMP 25
	EJECT
/RETURN FROM F.P.
/
	IOB
	IOF
	STC WAKPC
	STC FPUSE
	QAC
	ROL 1
	QLZ
	ADD ONE
FRMB,	LIF
	DJR
	IOB
	ION
WAKPC,	JMP
	EJECT
/THE ROUTINE TO FIND
/A STARTABLE USER
/AND START HIM
/
	NEXT=JMP .
/
	LDF 3
SLMB,	LIF 0
	JMP .+1 	/SET SAVFLD
N0,	LDA I
	USRSIZ
	ADM
	NXPT
	SAE I
	2\USEBOT
	JMP N1
	LDA I
	2\USETAB
	STC NXPT
	ADD TWO
	AWAKE
/
N1,	LDA
NXPT,	2\USETAB-USRSIZ
	APO
	JMP N0
	AZE I
	JMP N0
	SET 15
	NXPT
	LDA I 15
	BCL I
	7700
	STC USER
	SET 15
	NXPT
	EJECT
	RETURN=JMP .
/
	LDF 3
	SET 14
	15
	CLR
FLOSET,	STC 16
	LDA I 14
	ROL I 1
	ADD FLOSET
	ROL 2
	SCR 14
	STC 16 	/MODE
	LDA I 14
	SCR 14 	/MQ
	LDA I 14
	BSE I
	LIF
	STA
	GO2
	STA
	GO8
	BSE I
	LDF
	STC GOA
	LDA I 14
	BSE I
	LDF
	STC GO1
	LDA I 14
	STC GPC
	LDA I 14
GOA,	LDF
	STA
	2000 	/0 LOC
	LDF 3
/
	LDA I 14 	/AC
GO1,	LDF
	XSK 16
	SKP
	JMP GO8
GO2,	LIF
C6,	DJR
	IOB
	ION
GPC,	0
GO8,	LIF
	2
	PMODE
	ION
	JMP I GPC
	LMODE
	EJECT
	SETFLD=JMP .
/
	ROL 2
	SCR 5
	BCL I
	7740
	STA
	SET0
	STA I 14
	QAC
	SCR 6
	STA I 14
	LDA I
SET0,	0
	JMP 0
	EJECT
	DOOPR=JMP .
/
	LZE
	DOREXC		/540
	SCR 7
	BCL I
	7760
	ADD JLOC
	STC .+1
TEM,	0
/
/
/OPR TRAP TABLE
/
TRPTAB,	OPR1
	OPR2
	OPR3
	OPR4
	OPR5
JLOC,	JMP TRPTAB-1
	OPR7
	OPR10
	OPR11
	OPR12
	OPR13
	JMP OPR14	/LSW
	JMP OPR15	/RSW
	EJECT
/FETCH, A ROUTINE TO
/GET AN ARGUEMENT FROM A TRAPPED INSTRUCTION
/
	FETCH=JMP .
	LDF 3
	SET 10
	15
	XSK I 10
	XSK I 10
	LDA I 10
	ADD SUMB
	STC FUMB
	XSK I 10
	LDA I 10
	STC .+5
	ADD ONE
	ADM 10
FUMB,	LDF
	LDA
	0
	LDF 3
	JMP 0
	EJECT
	SETUSE=JMP .
/
	LDF 3
	SET I 17
	2\USETAB-USRSIZ+1
	JMP 0
/
	SRCH=JMP .
/
	SET 13
	0
	LDA I
	USRSIZ-1
	ADM
	17
	SAE I
	2\USEBOT
	SKP
	JMP 13
	XSK I 13
	SET 16
	17
	LDA I 17
	JMP 13
	EJECT
/TIME SLICER
/
	TRYCLK=JMP .
/
	LIF 0
TC,	LDA I
TWO,	2
	AWAKE
/
TSNX,	LDA
	TWO
	SLEEP
	NEXT
/
/SWITCH READER
SNSTST,	CLR
	SNS I 0
	ADD ONE
	STC SNS0
	SNS I 1
	ADD ONE
	STC SNS1
	SNS I 2
	ADD ONE
	STC SNS2
	SNS I 3
	ADD ONE
	STC SNS3
	SNS I 4
	ADD ONE
	STC SNS4
	SNS I 5
	ADD ONE
	STC SNS5
	LSW
	STC LSW0
	RSW
	STC RSW0
	JMP 0
	EJECT
/SWITCH PASSER
	DOEXC=JMP .
	JMP SET10
	AZE
	FETCH
	RETURN
	DOREXC=JMP .
	JMP SET10
	AZE I
	FETCH
	RETURN
/
SET10,	SCR 7
	BCL I
	7770
	ADA I
	SNS0
	STC 10
	LDA 10
	JMP 0
/
OPR15,	ADD ONE		/RSW
OPR14,	ADD C6		/LSW
	JMP SET10+1
	STA 14
	RETURN
/
SNS0,	0
SNS1,	0
SNS2,	0
SNS3,	0
SNS4,	0
SNS5,	0
LSW0,	0
RSW0,	0
	EJECT
/AWAKEN A SLEEPING USER
/ENTER WITH CONDITION IN AC
/WILL AWAKEN FIRST FOUND
/
	AWAKE=JMP .
/
	STC NDEV
	ADD 0
	STC AX
	SETUSE
/
NAWK,	SRCH
	 JMP RAX
	LDA 16
CAPOI,	APO I
	JMP NAWK
/
	COM
	SHD
	4\NDEV
	SKP
	JMP NAWK
	STA 16
RAX,	CLR
	DJR
	IOB
	RMF
AX,	JMP .
NDEV,	0
	EJECT
/USER SLEEP REQUEST
/
	OPR1=JMP .
/
	FETCH
	STH
	4\PSTATE 	/CONDITION
	FETCH
	STC TEM 	/NEW PC
/CHECK FOR LPT
	LPTCHK
/NOW FIND SPACE
/FOR NEW INCARNATION
	SETUSE
FSP,	SRCH
	 RETURN 	/NO ROOM
	LDA 16
	AZE
	JMP FSP
FOUND,	SET 17
	15
	LDH
	4\PSTATE
	COM 	/SLEEP
	STA 16
	LDA I 17
	STA I 16 	/MODE
	LDA I 17
	STA I 16 	/MQ
	LDA I 17
	STA I 16 	/LMB
	LDA I 17
	STA I 16 	/UMP
	LDA
	TEM
	BSE I
	JMP
	STA I 16
	FETCH
	RETURN
	EJECT
/LPT-TTY SWITCH CHECK
	LPTCHK=JMP .
/
	LDH
	4\PSTATE
	SAE I
	LPT
	JMP 0
	LDA
	2\DOTTY
	STH
	4\PSTATE
	JMP 0
	EJECT
/NICE GUY OPR
/
	OPR7=JMP .
/
	TRYCLK
/
/DISABLE CURRENT USER
/
	OPR5=JMP .
/
	STA 15
	NEXT
/
/WAKE UP SOMEBODY
/
	OPR10=JMP .
/
	FETCH
	AWAKE
	RETURN
	EJECT
/I\0 CALL HANDLER
/
	OPR11=JMP .
/
	FETCH
	STC PSTATE
	FETCH
	STC COUNTX
	FETCH
	STC FIELDX
	FETCH
	STC POINTX
/CHECK FOR LPT
	LPTCHK
/
/CHECK DEVICE STATUS
CDS,	SET I 14
	2\QBUFP-1
PQT,	LDA I 14
	AZE I
	RETURN 	/NO SUCH DEVICE
	SHD
	4\PSTATE
	JMP GSET
	XSK I 14
	JMP PQT
/CHECK ACTIVITY
GSET,	LDA I 14
	STC 14
	LDA 14
	STC IOACT
	LDA I 14
	AZE
	RETURN 	/BUSY
/SET UP CHANNEL
	ADD PSTATE
	STA 14
	LDA I
COUNTX,	0
	STA I 14
	LDA I
FIELDX,	0
	STA I 14
	LDA I
POINTX,	0
	BSE I
	2000
	STA I 14
	STA I 14
/
	FETCH
/ACTIVATE DEVICE
	LIF 3
IOACT,	JMP
	EJECT
/PLOTTER IOT HANDLER
/
	PLOTX=1632
	POX=3770
	POY=3771
	PNX=3772
	PNY=3773
/
	OPR4=JMP .
/
	TESTI
	JMP .+11
	FETCH 
	LDF 2
	STA
	PNX
	FETCH
	LDF 2
	STA
	PNY
	FETCH
	APO
	JMP PRESET
	SAE I
PENFLG,	0
	SKP
	JMP PLINE
	STA
	PENFLG
	JMP PLTXM
/
PLINE,	CLR
	LIF 2
	JMP PLOTX
/
PRET,	LDA I
	25
	LIF 0
	AWAKE
	RETURN
/
PLTXM,	STC PTEM
	ADD 0
	STC PLTXEX
	ADD PTEM
	ADA I
	2\PLTTAB
	STC 17
	LDA 17
	STC STP
	LDA I 17
	STC NDP
	LDA I
PTEM,	0
	SAE I
	11
	JMP STP-1
	LDA I
	NOP
	STC TPLT
/
	IOB
STP,	0
	RETURN
	IOB
NDP,	0
	RETURN
	EJECT
/PLOTTER INTERRUPT DISPATCH
/FROM BANK 3
/
	PLTGO=JMP .
/
TPLT,	JMP PLTXEX
	LDA I
	JMP PLTXEX
	STC TPLT
	JMP NDP-1
PLTXEX,	JMP
/
PRESET,	LDF 2
	LDA
	PNX
	STA
	POX
	LDA
	PNY
	STA
	POY
	RETURN
	EJECT
/SET THE CLOCK
/
	CLLR=6132
	CLAB=6133
	CLEN=6134
	CLSA=6135
/
K1,	0
K2,	4100
K3,	300
K4,	0
K5,	100
/
	OPR3=JMP .
/
	FETCH
	STC K4 	/RATE
	FETCH
	STC K1 	/PRESET
	JMP CSET
	RETURN
/
CSET,	LDA
	0
	STC CLRET
	PDP
	PMODE
	CLLR 	/ CLEAR CLOCK
	TAD K1
	CIA
	CLAB 	/SET PRESET
	CLA
	TAD K2
	CLLR 	/SET MODE TO OVF
	CLA
	TAD K3
	CLEN 	/FORCE OVF
	CLSA
	CLA
	TAD K4
	CLLR 	/SET FOR REAL
	CLA
	TAD K5
	CLEN
	CLA CLL
	LINC
	LMODE
CLRET,	JMP
/
	EJECT
/RELEASE DEVICE REQUESTS AND
/SLEEP CONDITIONS FOR
/THE USER
/
/CALL
/OPR 2
/DEVICE  0=ALL
/
	OPR2=JMP .
/
	FETCH
	STC TEM5
/
/CHECK FOR FP TURN OFF
	ADD TEM5
	AZE I
	JMP .+4
	SAE I
	2
	JMP .+3
	CLR
	STC FPUSE
/
	SETUSE
UR,	SRCH
	 JMP DR
	SHD
	4\USER
	SKP
	JMP UR
/CURRENT USER
/CHECK FOR DEVICE
	LDA
	TEM5
	AZE I
	JMP URWIP
	LDH I 16
	SAE
	TEM5
	JMP UR
/
URWIP,	CLR
	STA 16
	JMP UR
/
DR,	LDA I
	2
	STA 15
	SET I 17
	2\QBUFP-1
/
AR,	LDA I 17
	AZE I
	RETURN
	XSK I 17
	SHD
	4\TEM5
	JMP IWIP
	LDH
	4\TEM5
	AZE I
	JMP IWIP
	JMP AR
/
IWIP,	LDA 17
	STC 16
	STA I 16
	JMP 0
	EJECT
/IDLE JOB
/
	IDLE=JMP .
/
	QAC
	ADD ONE
	SCR 13
	IOB 7
	JMP .-4
/
/TEST I BIT
	TESTI=JMP .
	SET 17
	0
	STC TTEM
	ADD TRPINS
	ROR I 5
	LZE
	XSK I 17
	LDA I
TTEM,	0
	JMP 17
	EJECT
/VERY SIMPLE
/CONTROL C HANDLER
/
/
/LOAD THE USER
/
MON0,	LDA I
	20
	ESF
	CLR
	AXO
	LDA I
	LDF 3
	STC GOBU
	LDA I
	4014
	JMP RDISK
	LDA I
	5015
	JMP RDISK
	LDA I
	7017
	JMP RDISK
REBOOT,	LDA I
	LDF 4
	STC GOBU
	LDA I
	4020
	JMP RDISK
	LDA I
	5021
	JMP RDISK
	LDA I
	6022
	JMP RDISK
	LDA I
	7023
	JMP RDISK
/
	LDF 3
	LDA I
TEN,	10
	AXO
/TURN ON CLOCK
/AND TRAP
	LDA I
	1000
	ESF
	LDA I
	5100
	STC K4
	LDA I
	144
	STC K1
	JMP CSET
/
	NEXT
	EJECT
/START DIAL
/
DIAL0,	CLR
	AXO
	LDA I
C20,	20
	ESF
	LDF 2
	LDA I
	701
	STA
	2016
	LDA I
	7300
	STA
	2017
	LDF 3
	LIF 2
	JMP 16
	EJECT
/DISK ROUTINES
/OPR12 OPR I 12
	OPR12=JMP .
	FETCH
	TESTI
	JMP .+3
	JMP WDISK
	RETURN
	JMP RDISK
	RETURN
/
/WRITE DISK
WDISK,	SET 17
	0
	STC MEMLOC
	LDA I
	5
	JMP DISKD
	JMP 17
/READ DISK
RDISK,	SET 17
	0
	STC MEMLOC
	LDA I
	3
	JMP DISKD
	JMP 17
/
	*1400
DISKD,	SET 16
	0
	BSE I
	6600
	STA
	DF32
	BSE I
	6730
	STC RK08
/
DAGN,	JMP MEMSET
	PDP
	PMODE
	CLA
	TAD D32ADR
DF32,	0
	CLA
	TAD RK8ADR
RK08,	0
/
DWAIT,	6622
	SKP
	JMP ERTST
	6745
	JMP DWAIT
/
ERTST,	6747
	JMP DFIN
	LINC
	LMODE
	JMP DAGN
/
	PMODE
DFIN,	6742
	6611
	6601
	LINC
	LMODE
	JMP 16
	PMODE
D32ADR,	0
RK8ADR,	0
	LMODE
	EJECT
MEMSET,	LDA I
MEMLOC,	0
/DISK BLOCKS
	BCL I
	7000
	ADA I
CRDSK,	0
	STC RK8ADR
/EXTENDED ADDRESS
	ADD MEMLOC
	SCR 13
	APO
	JMP .+3
	ADD GOB 	/LMB
	SKP
	ADD GOBU 	/UMB
	SCR 2
	BCL I
	7770
	ROL 3
	STA I
DEXT,	0
	IOB
	6732 	/DLDC
/
	QAC
	ROL 1
	BCL I
	377
	AZE
	JMP .+3
	COM
	SKP
	ADD MONE
	LDF 3
	STA
	3751
	IOB
	6755 	/CA
/
	LDA
	MEMLOC
	ROR 4
	BCL I
	377
	STC D32ADR
	ADD MEMLOC
	ROL 2
	BCL I
	7077
	ADD DEXT
	IOB
	6615
/WORD COUNT
	LDA I
	-400+1
	STA
	3750
	IOB
	6753 	/WC
/
	JMP DAGN+1
	EJECT
/PRESET DISK NUMBER
/
	OPR13=JMP .
/
	FETCH
	AZE I
	JMP CDR
	ADA I
	-1
	APO
	CLR
	MUL
	4\FG660
	QAC
	ROL 1
	ADA I
	200
CDR,	STC CRDSK
	RETURN
FG660,	330
	EJECT
/BANK 3 RETURNS
	*1760
	DIAL=JMP .
	JMP DIAL0
	MONITO=JMP .
	JMP MON0
/
	*1767
TYPFLG,	0
/PLOTTER RETURNS
	*1770
	STC PTEM
	ADD 0
	STC .+4
	JMP PLTXM+1
	LIF 2
	DJR
	JMP
	*1777
	JMP PRET
	EJECT
	/// BANK3 ROUTINES
	SEGMNT 3
	*20
/KEYBOARD ACTIVATER
	KBDACT=JMP .
	JMP RET3
/KEYBOARD HANDLER
	INTTY=JMP .
	BCL I
	7600
	LIF 0
	SAE I
	3
	SKP
	MONITO
	SAE I
	4
	SKP
	DIAL
	LIF 3
	SAE I
	14
	SKP
	JMP SETLPT
	SAE I
	13
	JMP .+2
	JMP CLRLPT
	STC POINTY
/
/CHECK FOR ACTIVITY
	LDA
	KBD0+1
	AZE I
	JMP RET3
/GET CHANNEL
	SET I 4
	KBD0+1
	IOGET
/HANDLE CHARACTER
	LDA I
POINTY,	0
	SAE I
	177
	JMP NORMIN
/RUBOUT
/
	LDA
C10,	10
	SAE
	KBD0+4
	SKP
	JMP RET3
	LDA I
	-1
	ADD 10
	STC 10 	/BACK UP POINTER
	LDA I
	134
	TYPE
	JMP KBNXT
/
NORMIN,	STC POINTY
	ADD TLP0+1
	AZE
	JMP Q1
	ADD POINTY
	TYPE
	INCON
/
Q2,	STH 10
	SAE I
	45
	JMP INFIN
	ADD M2
	QUECHR
	JMP INFIN
/
Q1,	INCON
	QUECHR
	JMP Q2
/
INFIN,	FINTST
	 JMP KBNXT
/INPUT FINISHED
	CLR
	STC KBD0+1
	LDA I
	13
	JMP DEVDON
/SET UP FOR NEXT CHAR
KBNXT,	LDH I 10
	LDA I
IOCNT,	0
	STA I 4
	XSK I 4
	XSK I 4
	LDA
	10
	STA I 4
	JMP RET3
/
	INCON=JMP .
	LDA
	POINTY
	SAE I
	15
	JMP 0
	ADD C30
	JMP 0
	EJECT
/TELETYPE OUTPUT
	OUTTTY=JMP .
	STC CHP
/
PRTCHR,	LDA
	CHP
	AZE
	JMP RET3
	ADD CURBUF
	SAE
	ENDBUF
	JMP NXTOUT
/
	LDA I
	4\TLPBUF-1
	STA
	CURBUF
	STC ENDBUF
	STC TLP0+1
	LDA I
	4
	JMP DEVDON
/
NXTOUT,	SET 1
	CURBUF
	LDH I 1
	OUTCON
	TYPE
	LDA
	1
	STC CURBUF
	JMP RET3
/
	TYPE=JMP .
	IOB
	6046
	STA I
CHP,	0
	JMP 0
	EJECT
/QUE OUTPUT CHARACTER
/
	QUECHR=JMP .
/
	SET 1
	ENDBUF
	STH I 1
	LDA
	1
	STC ENDBUF
	LDH 1
	JMP 0
	EJECT
/ACTIVATE TELETYPE BUFFER
	TLPACT=JMP .
	SET I 4
	TLP0+1
	IOGET
/
	LDH
	TLP0+1
	SAE I
	77
	JMP BMOD
/IMMEDIATE MODE
IMOD,	LDA
	10
	BCL I
	7600
	STA
	POINTY
	SAE I
	14
	SKP
	ADD M2
	SAE I
	15
	SKP
	ADD C30
	SAE I
	12
	SKP
	ADD C31
	QUECHR
	FINTST
	 JMP IMOD
	JMP PRTCHR
/BUFFER MODE
BMOD,	LDH 10
	SKP
	LDH I 10
	QUECHR
	OUTCON
	FINTST
	 JMP BMOD+2
	JMP PRTCHR
	EJECT
/ACTIVATE LINEPRINTER BUFFER
	LPTACT=JMP .
	SET I 4
	LPT0+1
	IOGET
/
	LDH
	LPT0+1
	SAE I
	77
	JMP BLMOD
/IMMEDIATE MODE
ILMOD,	LDA
	10
	LPTCHR
	FINTST
	 NOP
	JMP FINLPT
/BUFFER MODE
BLMOD,	LDH 10
	SKP
	LDH I 10
	OUTCON
	LPTCHR
	FINTST
	 JMP BLMOD+2
/
FINLPT,	CLR
	STC LPT0+1
	STC LCHR
	LDA I
	LPT
	JMP DEVDON
	EJECT
/SEND TO LINEPRINTER
/
	LPTCHR=JMP .
/
	SET 7
	0
	BCL I
	7600
	STA I
LCHR,	0
	SAE I
	14
	SKP
	JMP FORM
	SAE I
	15
	SKP
	JMP 7 	/IGNORE CR
	SAE I
	12
	SKP
	JMP LINE
	IOB
	6654
	JMP 7
/
FORM,	LDA I
	17
	JMP DOLPT
LINE,	LDA I
	10
/
DOLPT,	IOB
	6652
	IOB
	6664
	JMP RET3
/
/LPT INTERRUPT HERE
	LPTDON=JMP .
	SRO I
	5252
	JMP .+4
	IOB
	6662
	JMP RET3
	ADD LCHR
	AZE
	JMP 7
	JMP RET3
/
/LPT-TTY SWITCH
SETLPT,	LDA I		/CTRL L
	LPT		/24
	JMP .+3
CLRLPT,	LDA I		/CTRL K
	TP0		/4
	STC DOTTY
	JMP RET3
	EJECT
/HALF WORD CHARACTER CONVERSION
/
	OUTCON=JMP .
	SET 5
	0
	SAE I
	45
	JMP .+3
	ADD M30
	JMP RN
	SAE I
	43
	JMP SPNOT
	ADD M31
	JMP RN
/
SPNOT,	ADA I
	-37
	APO
	ADD C100
	ADD C37
RN,	STA
	POINTY
	JMP 5
	EJECT
/SET UP I\O
	IOGET=JMP .
	LDA I 4
	STC IOCNT
	LDA I 4
	BCL I
	7700
	BSE I
	LDF
	STC IOFLD
	LDA I 4
	LDA I 4
	STC 10
	ADD M4
	ADD 4
	STC 4
IOFLD,	LDF
	JMP 0
/
/TEST FOR I\0 FINISHED
	FINTST=JMP .
	SET 3
	0
	LDA
	IOCNT
	APO
	JMP CTX
	BCL I
	7600
	SAE
	POINTY
	JMP 3
	XSK I 3
	JMP 3
/
CTX,	ADD C1
	AZE I
	XSK I 3
	STC IOCNT
	JMP 3
	EJECT
/DISPLAY GOES TO SLEEP HERE
/
DSWAIT,	IOB 1
	0026
	DISPLY
	JMP .-3
	IOB 5
/
DSLEP,	IOB 7
/
/DISPLAY AWAKENS HERE
/
	DISPLY=JMP .
/
	LDA
	DIS0+1
	AZE I
	JMP DSWAIT
	LDH
	4\DIS0+3
	BSE I
	LDF
	SCR 12
	ADD DIS0+5
	LIF 2
	JMP 21
/BUFFERED DISPLAY INTERRUPT
/
	DISACT=JMP .
/
	LDA I
	DS1
DEVDON,	LIF 0
	AWAKE
RET3,	LIF 0
	RETURN
	EJECT
/PLOTTER QUITS HERE
/
/
PSLEP,	IOB 10
	BPLT 	/WAKE UP USER
/PUT SELF TO SLEEP
	IOB 1
	BPLT
	.+3
	JMP .-3
	IOB 5
/
/BUFFERED PLOTTER AWAKENS HERE
/
	PLOT=JMP .
/
	LDH
	4\PLT0+3
	BSE I
	LDF
	SCR 13
	ADD PLT0+5
	LIF 2
	JMP 20
/
/REAL PLOTTER INTERRUPT
/
	PLTDON=JMP .
/
	LIF 0
	PLTGO
/
/BUFFERED PLOTTER INTERRUPT
/
	PLTACT=JMP .
/
	LDA I
	BPLT
	JMP DEVDON
/
/CLOCK INTERRUPT
/
	DOCLK=JMP .
/
	JMP RET3
/
	EJECT
/FILE TAPE DIRECTORY
	*1000
	0
	EJECT
	*1400
/VARIOUS BUFFERS
/
DEVTAB,	6131
	6135
	2
	DOCLK
	6041
	6042
	4
	OUTTTY
	6031
	6036
	13
	INTTY
	6661
	6652
	24
	LPTDON
	6501
	6502
	25
	PLTDON
/
	0
/
/
PLTTAB,	6504
	6524
	6513
	6515
	6523
	6511
	6521
	6512
	6514
	6521
	6514
/
DOTTY,	4
/
CURBUF,	4\TLPBUF-1
ENDBUF,	4\TLPBUF-1
TLPBUF,	*.+50
	EJECT
/USER SAVE TABLE
/
/PRIORITY,DEVICE  NEGATIVE IF SLEEPING
/LINK,FLO,MODE\USER
/SAVMQ
/SAVLMB
/SAVUMB
/SAVPC
/0 LOC
/SAVAC
/
/
/USER1 IDLE
/
USETAB,	0302
	0001
	0
	0
	0
	IDLE
	0
	0
/
/USER 2, PLOTTER HANDLER
/
	7647
	0002
	0
	3
	3
	PLOT
	0
	0
/
/USER 3, DISPLAY
/
	7551
	0003
	0
	3
	3
	DISPLY
	0
	0
/
/USER 4, APPLICATIONS PROGRAM
/
USR4,	
	0202
	0004
	0
	4
	4
	JMP 20
	0
	0
/
/OPEN SLOTS
/
	*.+USRSIZ
	*.+USRSIZ
	*.+USRSIZ
USEBOT,	
	EJECT
/I\O CHANNEL DEFINITION BUFFER
/5 SLOTS
/
/ACTIVATOR
/MODE\DEVICE
/COUNT OR COMPARE WORD
/UNUSED\FIELD
/POINTER,START
/POINTER,CURRENT
/
DIS0,	DISACT
	*.+5
KBD0,	KBDACT
	*.+5
TLP0,	TLPACT
	*.+5
LPT0,	LPTACT
	*.+5
PLT0,	PLTACT
	*.+5
	EJECT
/COMMAND EXEC BUFFERS
CURNUM,	0 	/CURRENT FILE  
/
CURFIL,	0 	/CALLING FILE
	0 	/STARTING BLOCK
	0 	/CURRENT BLOCK
	0 	/CURRENT POINTER
	0 	/CURRENT LINE
	0 	/REPEAT LEVEL
	0 	/R0 LINE
	0 	/R0 COUNT
	0 	/R1 LINE
	0 	/R1 COUNT
/
FILE0,	*.+12
FILE1,	*.+12
FILE2,	*.+12
FILE3,	*.+12
/
C30,	30
C31,	31
M30,	-30
M31,	-31
	EJECT
/DISK BOOTSTRAP
	*1740
	6622
	5343
	5345
	6741
	5340
	6141
	LIF 0
	JMP REBOOT
/DISK DATA BREAK
	*1750
	7750
	7751
/
	0 	/UNUSED
	5340 	/BOOT CALL
/
C100,	100
C37,	37
C1,	1
C2,	2
M2,	-2
M3,	-3
M4,	-4
/
/I\O CHANNELS
QBUFP,	30
	2\PLT0
	26
	2\DIS0
	13
	2\KBD0
	4
	2\TLP0
	24
	2\LPT0
	0
	*1776
	JMP PSLEP 	/RETURN FROM PLOTTING
	JMP DSLEP 	/RETURN FROM DISPLAYING
/
/
/
/
/EXEC3
/APRIL 75



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search