File EXEC38DF

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

*20
///EXEC38DF
/PDP-12 EXEC
/RK8E & DF32 DISK VERSION (NOT FOR RK08)
/BANK 0 AT BLOCKS 110-113
/BANK 3 AT BLOCKS 14-17
/NO API
/NO COMMAND EXEC
/
/DISK (DF32 & RK8E)
/DUAL RK8E
/LPT (LP12)
/DATAPHONE (IOT 40-41)
/SWITCH READER
/SWITCH PASSER
/COPYRIGHT 1972
/MODIFIED 1973,1974,1975
/1976 TO INCLUDE DATAPHONE
/AND DUAL RK8E
/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
	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
/
/SCAN THE DEVICE FLAG TABLE
	OPR6=JMP .
/CAUSED BY INTERRUPT
/OR ISSUANCE OF OPR6 BY
/IDLE JOB
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
	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
JLOC,	JMP TRPTAB-1
/
/
/OPR TRAP TABLE
/
TRPTAB,	OPR1
	OPR2
	OPR3
	OPR4
	OPR5
	OPR6
	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 IT
	ADD ONE
	ADM 10
FUMB,	LDF
	LDA
IT,	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\IOCHN
PQT,	LDA 14
	AZE I
	RETURN 	/NO SUCH DEVICE
	SHD
	4\PSTATE
	JMP GSET
	LDA I
	7
	ADM
	14
	JMP PQT
/CHECK ACTIVITY
GSET,	LDA I 14
	STC IOACT
	LDA I 14
	AZE
	TRYCLK		/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\IOCHN
	JMP AR1
/
AR,	LDA I
	5
	ADD 17
	STC 17
AR1,	LDA 17
	AZE I
	RETURN
	XSK I 17
	XSK I 17
	SHD
	4\TEM5
	JMP IWIP
	LDH
	4\TEM5
	AZE I
	JMP IWIP
	JMP AR
/
IWIP,	CLR
	STA 17
KP6000,	JMP 0
	EJECT
/IDLE JOB
/
	IDLE=JMP .
/
	IOB 6		/SCAN DEVICES
	QAC
	ADD ONE
	SCR 13
	IOB 7
	JMP .-5
/
/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
	1
	STC HIDSK
	LDA I
	4000
	STC LODSK
	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
/ENABLE MUX INTERRUPT
	LDA I
	1
	IOB
	6450
/START A JOB
	NEXT
	EJECT
/START DIAL
/
DIAL0,	CLR
KP1,	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		/CHECK I BIT
	JMP .+3		/I NOT SET, READ
	JMP WDISK	/I SET, WRITE
	RETURN
	JMP RDISK
	RETURN
	 
/WRITE DISK
WDISK,	SET 17
	0
	STC MEMLOC
	LDA I
	4000
	JMP RDISK+3
	 
/READ DISK
RDISK,	SET 17
	0
	STC MEMLOC
	JMP DISKD
	JMP 17
/
/RK8E CODE
	DSKP=6741
	DCLR=6742
	DLAG=6743
	DLCA=6744
	DRST=6745
	DLDC=6746
	DMAN=6747
	 
/DF32 CODE
	DCMA=6601
	DMAR=6603
	DMAW=6605
	DCEA=6611
	DEAL=6615
	DFSE=6621
	DFSC=6622
	 
	EJECT
	*1400
	 
DISKD,	SET 16
	0
	ADA I		/DEFAULT SYSTEM
HIDSK,	1		/START BN, 14000.
	STA I
DSKCOM,	0
	ROL I 1
	LDA I
	DMAR		/6603
	LZE
	ADD KZ2		/MAKE DMAW (6605)
	STC D32COM
	 
SETUP,	LDA I
MEMLOC,	0		/QN\BN CALL
	SCR 13		/IF OR DF?
	APO
	JMP .+3
	ADD GOB		/IF CALL
	SKP
	ADD GOBU	/DF CALL
	SCR 2		/DF IN AC
	BCL I
	7770
	ROL 3
	STC CEXT	/EX MEM BITS (DLDC)
	QAC		/GET CORE ADDR
	ROL 1
	BCL I
	377
	STC CORLOC	/CORE ADDR (8E OR DF32)
	CLR		/0 TO MQ
	ADD MEMLOC
	BCL I
	7000
	STA I
BLKNM,	0		/FOR DLAG, 8E
	SCR 4		/PROPAGATES SIGN BITS
	ROL 6
	ADD CEXT
	STC DDEAL	/DEAL DF32
	QAC
	ROL 1
	STC D32ADR
	 
/SET UP 3X ERROR RETRY
KZ2,	PDP
	PMODE
	 
	CLA CLL CMA RTL	/AC=-3
	DCA DUNTRY
	 
/CHECK TO SEE WHICH DISK IS UP
/DF 32 IS DEFAULT
/FIRST CHECK EXISTENCE OF 8E
	CLA CMA		/AC=-1
	DRST		/8E STATUS
	RTL		/BIT2 TO BIT0
	SPA
	 JMP DF32	/NO 8E,ASSUME DF32
	 
/8E EXISTS, BUT IS IT ON?
	RTL		/BIT4 TO BIT0
	SMA
	 JMP RK8E	/8E IS ON
	 
/ROUTINE TO RUN DF32
DF32,	CLA CMA		/AC=-1
	TAD CORLOC	/CORE ADDR
	DCA I P7751	/CA
	TAD CM400
	DCA I P7750	/WC(-400)
	TAD DDEAL
	DEAL
	CLA
	TAD D32ADR	/DISK ADDR
D32COM,	0		/DMAR OR DMAW
	DFSC		/DISK DONE?
	JMP .-1
	DFSE		/ERRORS?
	 JMP BAD32	/YES, RETRY
	 
/OK, LEAVE
CRET,	DCEA
	DCMA
	LINC
	6016		/LJMP 16
	 
P7750,	7750
P7751,	7751
CM400,	-400
DDEAL,	0
DUNTRY,	0
D32ADR,	0
CEXT,	0
CORLOC,	0
K1002,	1002
LODSK,	4000		/DEFAULT LO ORDER
/                        RK8E SYSTEM START BN.
	 
/ROUTINE TO RETRY DF32 3X
BAD32,	ISZ DUNTRY	/-3 CNTR
	JMP DF32
	HLT		/ERROR HALT
	 
/ROUTINE TO RUN RK8E
/FIRST MAKE SURE DISK IS READY
RK8E,	DCLR		/CLR STATUS
	DRST		/WAIT TIL CLR
	SZA CLA
	JMP .-2
	 
	TAD CEXT
	TAD DSKCOM
	DLDC		/LOAD COMMAND REG
	TAD CORLOC
	DLCA		/CORE ADDR
	TAD BLKNM
	TAD LODSK	/4000 FOR PARTITION 0
	DLAG		/LOAD DISK ADDR & GO
	DSKP		/DISK DONE?
	 JMP .-1
	DRST		/STAUS TO AC
	CLL RAL		/CLR SUCCESS BIT
	SNA		/OTHER ERRORS
	JMP CRET	/OK, LEAVE
	 
/8E ERROR ROUTINE
/FIRST CHECK FOR SEEK FAILED OR CYLINDER
/ADDRESS ERROR. MUST RECAL FOR THESE
BAD8E,	AND K1002	/NOTE AC RAL
	SNA CLA
	JMP TRY3	/OTHER ERROR
/RECAL AND RETRY 3X
	DCLR		/CLR STATUS
	STL RTL		/AC=2
	DCLR		/RECAL
	DSKP		/WAIT FOR DONE
	 JMP .-1
	 
TRY3,	ISZ DUNTRY
	JMP RK8E
	LMODE
	7402		/PHLT
	
/END DISK READ WRITE HANDLER.
	 
/PRESET DISK NUMBER
/12(10) DATA PARTITIONS & 1 SYSTEM PARTITION ON DISK 0
/12(10) DATA PARTITIONS AND AN
/INACESSABLE SYSTEM PARTITION
/ON DISK 1
/DATA PARTITIONS ARE 512(10) BN LONG.
/0  = SYSTEM = 14000 - 14177 (MAX 14537)
/1  = DATA   = 00000 - 00777
/2  = DATA   = 01000 - 01777
/3  = DATA   = 02000 - 02777
/4  = DATA   = 03000 - 03777
/5  = DATA   = 04000 - 04777
/6  = DATA   = 05000 - 05777
/7  = DATA   = 06000 - 06777
/10 = DATA   = 07000 - 07777
/11 = DATA   = 10000 - 10777
/12 = DATA   = 11000 - 11777
/13 = DATA   = 12000 - 12777
/14 = DATA   = 13000 - 13777
/	SECOND DISK
/15 = DATA   = 00000 - 00777
/16 = DATA   = 01000 - 01777
/17 = DATA   = 02000 - 02777
/20 = DATA   = 03000 - 03777
/21 = DATA   = 04000 - 04777
/22 = DATA   = 05000 - 05777
/23 = DATA   = 06000 - 06777
/24 = DATA   = 07000 - 07777
/25 = DATA   = 10000 - 10777
/26 = DATA   = 11000 - 11777
/27 = DATA   = 12000 - 12777
/30 = DATA   = 13000 - 13777
	 
/PARTITION HANDLER.
	OPR13=JMP .
	 
	FETCH
	CLR
	STC HIDSK
	JMP FUMB	/REGET WITH 0 LINK
	AZE I
	JMP SYSTEM
	STA I
PARTM,	0
	ADA I
	-14		/SECOND DISK?
	APO 
	JMP WPAR
	STC PARTM
	LDA I
	2
	STC HIDSK
/
WPAR,	LDA
	PARTM
	ADD MONE
	APO		/HANDLE -0
	COM
	ROL I 11
LDSK,	STC LODSK	/LO 12 BITS
	ROL I 1		/LINK TO BIT0
	ADD HIDSK
	STC HIDSK	/HI 1 BIT
	RETURN
	 
/PARTITION 0 (SYSTEM) HANDLER.
SYSTEM,	ADD KP6000
	ROL I 1		/4000 + 1 IN LINK
AADSK,	JMP LDSK
/END OF DISK ROUTINES.
	 
	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
/TTY,DATAPHONE
/INPUT ACTIVATOR
/EFFECTIVE NOP
	KBDACT=JMP .
	DFIACT=JMP .
	MX0ACT=JMP .
	MX1ACT=JMP .
	MX2ACT=JMP .
	MX3ACT=JMP .
	JMP RET3
	MUXDON=JMP .
	IOB
	6457
	JMP RET3
/
/
/TELETYPE INTERRUPT HERE
	INTTY=JMP .
	BCL I
	7600
	STC TCHR
	COM
	STC MUXDEV	/TTYFLG
/CHECK IF CONSOLE
	JMP CONTST
/NOT COMMAND CHAR
/CHECK IF CONSOLE ALREADY
	LDA I
CONNUM,	0
	AZE I
	CONIN		/IS CONSOLE
	JMP RET3
/
	EJECT
/CONSOLE COMMAND TEST
CONTST,	SET 13
	0
	LDA
	TCHR
	SAE I
	24		/CTRL T
	JMP QTCON
/BECOME CONSOLE
	LDA I
MUXDEV,	0
	APO I
	JMP .+3
	CLR
	SKP
	ADD C1
NOCON,	STC CONNUM
	JMP RET3
/
/ABANDON CONSOLE
QTCON,	SAE I
	30
	JMP 13
	CLR
	JMP NOCON
/
	EJECT
/CONSOLE INPUT
/HANDLER
	CONIN=JMP .
	LDA I
TCHR,	0
	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
/
/CHECK FOR ACTIVITY
/GET CHANNEL
	IOGET
	13
	LDA 17		/POINTS TO DEVBUF
	AZE I
	JMP RET3	/NO ACTIVITY
/HANDLE CHARACTER
	LDA
	TCHR
	SAE I
	177
	JMP NORMIN
/RUBOUT
/
	LDA
C10,	10
	SAE 16		/POINTS TO BUFPTR
	SKP
	JMP RET3
	LDA I
	-1
	ADD 10
	STC 10 	/BACK UP POINTER
	LDA I
	134
	STC TCHR
	TYPE
	JMP KBNXT
/
NORMIN,	LDA
	TLP0+2
	AZE
	JMP Q1		/TTY BUSY, QUEUE ECHO
	TYPE		/ECHO IF TTY NOT BUSY
	INCON
/
Q2,	STH 10
	SAE I
	45
	JMP INFIN
	ADD M2
	STH I 10	/LF
	QUECHR		/AUTO ECHO LF
	JMP INFIN
/
Q1,	INCON
	QUECHR
	JMP Q2
/
INFIN,	FINTST
	 JMP KBNXT
/INPUT FINISHED
	CLR
	STA 17
	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
	EJECT
/
	INCON=JMP .
	LDA
	TCHR
	SAE I
	15
	SKP
	ADD C30		/CR = 45
	SAE I
	12
	SKP
	ADD C31		/LF = 43
	JMP 0
	EJECT
/TELETYPE OUTPUT
	OUTTTY=JMP .
	STC CONBSY	/CLEAR FLAG
/
PRTCHR,	LDA I
CONBSY,	0
	AZE
	JMP RET3
	ADD CURBUF
	SAE
	ENDBUF
	JMP NXTOUT
/
	LDA I
	4\TLPBUF-1
	STA
	CURBUF
	STC ENDBUF
	STC TLP0+2
	LDA I
	4
	JMP DEVDON
/
NXTOUT,	SET 1
	CURBUF
	LDH I 1
	OUTCON
	TYPE
	LDA
	1
	STC CURBUF
	JMP RET3
/
	EJECT
	TYPE=JMP .
	SET 13
	0
	LDA I
	1
	STC CONBSY
/
	LDA
	TCHR
	IOB
	6046
	JMP 13
	EJECT
/DATAPHONE INPUT
/DOUBLE BUFFERED UNTIL IOCLR
/
/EACH BUFFER IS 100 (OCTAL)
/WORDS, 200 (OCTAL) CHARS
	INDATF=JMP .
	STC TCHR
/CHECK FOR ACTIVE
/GET CHANNEL
	IOGET
	14
	LDA 17
	AZE I
	JMP RET3
/STORE CHARACTER
	INCON
	STH 10
	SHD I
	4500		/CR TERMINATOR
	JMP DIFIN
	SHD I
	0000		/ANOTHER TERMINATOR
	JMP DIFIN
	FINTST
	 JMP KBNXT
/DATAPHONE INPUT FINISHED
DIFIN,	LDF 3
	LDA 16		/BUFFER START
	BCO I
	100
	STA 16
	STA I 16	/SWITCH TO NEXT BUFFER
	LDA I
	-200
	STA I 4		/RESET COUNT
	LDA I
	14
	JMP DEVDON
	EJECT
/DATAPHONE OUTPUT HANDLERS
/
/INTERRUPT HERE
	OUDATF=JMP .
/ACTIVATE THE OUTPUT SEQUENCE
/BUFFER MODE ONLY
	DFOACT=JMP .
/CHECK FOR ACTIVITY
	IOGET
	5
	LDA 17
	AZE I
	JMP RET3
	FINTST
	SKP
	JMP DATADN
/BUFFER IS ACTIVE
/
BFMOD,	LDH 10
	OUTCON
	IOB
	6416
	JMP KBNXT
/TRANSMISSION DONE
DATADN,	CLR
	STA 17
	LDA I
	5
	JMP DEVDON
/
	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 .
	IOGET
	4
/
	LDH
	TLP0+2
	SAE I
	77
	JMP BMOD
/IMMEDIATE MODE
IMOD,	LDA
	10
	BCL I
	7600
	STA
	TCHR
	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 .
	IOGET
	24
/
	LDH
	LPT0+2
	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
	STA 17
	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
/IF NON ZERO THEN SEND TO TTY
	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,	ADD CC40
	BCL I
	7700
	ADD CC40
RN,	STA
	TCHR
	JMP 5
	EJECT
/SET UP I\O
	IOGET=JMP .
	SET 15
	0
	LDF 3
	LDA 15		/GET ARGUMENT
	XSK I 15
/LOOK FOR BUFFER
	STC BNU
	SET I 4
	IOCHN
/
NXIO,	LDA 4		/DEVICE NUMBER
	AZE I		/TABLE TERMINATOR
	JMP RET3
	SAE I
BNU,	0
	SKP
	JMP OKIO
	LDA I
	7
	ADM
	4
	JMP NXIO
/
OKIO,	XSK I 4		/ACTIVATOR
	XSK I 4		/BUSY FLAG
	SET 17		/17 POINTS TO FLAG
	4
	LDA
	4
	ADA I
	3
	STC 16		/16 POINTS TO BUF START
/
	LDA I 4		/COUNT,COMPARE WORD
	STC IOCNT
	LDA I 4		/FIELD
	BCL I
	7700
	BSE I
	LDF
	STC IOFLD
	LDA I 4		/BUF START
	LDA I 4		/CURRENT CHAR
	STC 10		/POINTER
	SET 4
	17		/RESET 4
IOFLD,	LDF
	JMP 15
/
/TEST FOR I\0 FINISHED
	FINTST=JMP .
	SET 3
	0
	LDA
	IOCNT
	APO
	JMP CTX
	BCL I
	7600
	SAE
	TCHR
	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+2
	AZE I
	JMP DSWAIT
	LDH
	4\DIS0+4
	BSE I
	LDF
	SCR 12
	ADD DIS0+6
	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+4
	BSE I
	LDF
	SCR 13
	ADD PLT0+6
	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
A,	0
/
	EJECT
/FILE TAPE DIRECTORY
	*1000
	0
	EJECT
	*1400
/VARIOUS BUFFERS
/
DEVTAB,	6131
	6135
	DOCLK
	6041
	6042
	OUTTTY
	6031
	6036
	INTTY
	6661
	6652
	LPTDON
	6501
	6502
	PLTDON
	6401
	6406
	INDATF
	6411
	6412
	OUDATF
/
	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
/
	0
	*.+USRSIZ-1
	0
	*.+USRSIZ-1
	0
	*.+USRSIZ-1
	0
	*.+USRSIZ-1
	0
	*.+USRSIZ-1
	0
	*.+USRSIZ-1
	0
	*.+USRSIZ-1
	0
	*.+USRSIZ-1
USEBOT,	
	EJECT
/I\O CHANNEL DEFINITION BUFFER
/7 LOCATIONS PER SLOT
/
/DEVICE NUMBER
/ACTIVATOR PGM
/BUSY FLAG
/COUNT OR COMPARE WORD
/UNUSED\FIELD
/POINTER,START
/POINTER,CURRENT
/
IOCHN,	
DIS0,	26
	DISACT
	*.+5
KBD0,	13
	KBDACT
	*.+5
TLP0,	4
	TLPACT
	*.+5
LPT0,	24
	LPTACT
	*.+5
PLT0,	30
	PLTACT
	*.+5
DATI0,	14
	DFIACT
	*.+5
DATO0,	5
	DFOACT
	*.+5
	0		/TERMINATOR
	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
/
/CONSTANTS
C30,	30
C31,	31
M30,	-30
M31,	-31
CC40,	40
C1,	1
C2,	2
M2,	-2
M3,	-3
M4,	-4
/
	*1776
	JMP PSLEP 	/RETURN FROM PLOTTING
	JMP DSLEP 	/RETURN FROM DISPLAYING
/
/
/
/
///EXEC38DF
/NOV 76 (NDC)



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