File PBH

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

*20
/
/
/
 /  PBH - POST BURST HISTOGRAM
/ 
/D.J. WOODWARD, DEPT. PHYSIOL.
/U. ROCHESTER, ROCH. N.Y.,14620
/A PROGRAM TO PLOT EVENTS
/AFTER AN INITIAL TRIGGER 
/
/
/SINGLE EVENTS AND BURSTS
/ARE PLOTTED IN SEPARATE 512 POINT 
/HISTOGRAMS
/
/1 MSEC PER BIN IS THE UNIT OF TIME
/FOR THE SHORT TIME HISTOGRAMS
/
/2 RAISED TO THE POWER INDICATED 
/BY (SCALE) IS THE TIME INTERVAL OF THE
/LONG HISTOGRAM
/
	SEGMNT 0
	*20
	JMP START
/STARTING ADDR 20 LEAVES PROGRAMMED
/CONSTANTS IN OPERATION
/TAPE DATA NUMBER MUST BE KEYED IN
	JMP DATSEL  	/LOC 21
/STARTS DISPLAY WITHOUT ALTERING
/CONSTANTS
	LIF 4
	JMP PRINT	/LOC
/22 STARTS DATA PRINTOUT
	RSW
	STC DATANO	/LOC 24
/PUTS LSW INTO DATANO
	HLT
	HLT
	LIF 4
        JMP WRITET
/WRITE DATA ONTO TAPE
	LIF 4
	JMP READT	/READ DATA 
/FROM TAPE
	HLT
/   
SEGMNT 0
*40
	0
	NOP
STC ACSAV
ADD 40
BSE I/  MAKE JUMP ADDRESS
6000
STC RETRN1
	ADD 0
	STC ZSAVE
	IOB
	PMODE
	RIB
	LMODE
	ROL 2
	BCL I
	7740
	BSE I
	LDF 0
	STC DFIELD
	IOB
	PMODE
	RIB
	LMODE
	ROR 3
	BCL I
	7740
	BSE I
	LIF 0
	STC IFIELD
JMP SRVRT
RETURN,LDA I
ZSAVE,	0
	STC 0
	LDA I
ACSAV,0
IFIELD,	0
DFIELD,	0
	DJR
IOB
PMODE
ION
LMODE
RETRN1,0
    /START
     /HERE
    /CONSTRUCT SCALE FOR LONG 
     /DURATION HISTOGRAMS
START,	CLR
	LDA I
	40
	ESF
	CLR
ADD SCALE
ADA I
340
/MAKE SCALE INSTRUCTION
STA
SCL1
STC SCL2
     /CLEAR COUNTERS
SET I 4
	TEMP1-1
SET I 5
	TEMP1-DATANO
STA I 4
XSK I 5
JMP .-2
/
     /CLEAR BINS
IMEMRY,LDA I
3777
STC INIT2
PDP
	PMODE
	KCC
	TCF
DCA I INIT2
ISZ INIT2
JMP .-2
SKP
INIT2,0
LINC
LMODE
    /INITIALIZE THE CLOCK
CLKIN,CLR
IOB
PMODE
CLLR
LMODE
	IOB
	PMODE
	CLAB
	LMODE
	IOB
	PMODE
	CLEN
	LMODE
LDA I
100
IOB
PMODE
CLLR
LMODE
   /STOP CLOCK, CLEAR COUNTER
	CLR
	IOB
	PMODE
	CLAB
	LMODE
CLR
/ENABLE ONLY THE TRIG INTERRUPT
/OTHER INTERRUPTS ARE ON AFTER 
/FIRST TRIGGER
LDA I
	403
IOB
PMODE
CLEN
LMODE
	IOB
	6135
	CLR
	DJR
JMP DATSEL-2 /ENABLE INTERRUPTS.
    /
    /ENTER SERVICE ROUTINE HERE
     /
SRVRT,CLR
IOB
6135
STA I
CLOCK,0
ROL I 1
LZE   /IF BIT FOR OVERFLOW SET 
JMP OVERFL  /THEN GO TO OVERFLOW
S1,LDA
CLOCK
SCR I 2
LZE  /IS IT TRIG
JMP TRIG
S2,LDA
CLOCK
SCR I 4
LZE /IS IT STIM
JMP STIM
S3,LDA
CLOCK
SCR I 6/IS IT EVENT
LZE
JMP EVENT
JMP RETURN
    /
     /TO HERE IF TRIGGERED
     /
TRIG,CLR
	ADD SWEEPS
	AZE
	JMP TRIG4
/START CLOCK AT 1KHZ,MODE 3
	LDA I
	1
	STC SWEEPS
LDA I
4300
    /START CLOCK AT ZERO MSEC
IOB
PMODE
CLLR
LMODE
/   ENABLE ALL INTERRUPTS
	LDA I
	177
	IOB
	PMODE
	CLEN
	LMODE
	JMP S2
     / SUM TOTAL TIME
TRIG4,	IOB
	6136
	STA 
	TEMP1
LAM
TTIME1
STC ZERO
ADD OFLIND
LAM
TTIME2
	CLR
	ADD CFIND
	AZE I
	JMP TRIG1+3
/ROUTINE TO FINISH ANALYSIS WHEN AT END /OF SWEEP
LDA I
JMP TRIG1
/GO TO COMPLETE CF ANALYSIS AND RETURN
STC CFEND
JMP E20
TRIG1,LDA I
	NOP
STC CFEND
	CLR
STC ARTFCT
STC OFLIND
	STC TEMP1
	STC RESET
STC OFLIN2
STC TEMP2
/HERE TO INCREMENT SWEEP COUNTER
/AND CHECK IF MAX
TRIG2,LDA I
1
ADM
SWEEPS
SAE
COUNT
/RETURN TO SERVICE ROUTINE 
/IF SWEEPS NOT MAXIMUM
JMP S2
/HERE IF SWEEPS DONE
/TURN OFF CLOCK
CLR
IOB
PMODE
CLLR
LMODE
/DISABLE INTERRUPTS
IOB
PMODE
CLEN
LMODE
JMP S2
     /
     /STIMULUS SUBROUTINE
STIM, IOB
PMODE
6136
LMODE
/SUPPRESS EVENTS FOR TWO MSEC
	ADA I
ART6,	1
	COM
	STC ARTFCT
	LDA I
	1
	STC ARTIND
JMP S3
     /
     /OVERFLOW ROUTINE
OVERFL,	LDA
	CLOCK
	BCL I
	7776
	AZE
	JMP S2
LDA I
1
ADM
OFLIND
CLR
JMP S1
       /HERE FOR EVENT ROUTINE
CFSAMP,	-3777
EVENT,IOB
6136
STC TEMP1
/CHECK IF TIME MORE THAN CFSAMP
	LDA
	OFLIND
	AZE
	JMP RESET-3
	LDA
	CFSAMP
	STC .+7
	CLR
	LDA
	TEMP1
	APO
	JMP RESET-3
	LAM I
	0
	APO
	JMP .+5
/RESET =1 IF TIME MORE THAN CFSAMP
	LDA I
	1
	STA I
RESET,	0
    /GET TIME
    /CHECK FOR ARTIFACT
	LDA I
ARTIND,	0
	AZE I
	JMP EV
	LDA
	TEMP1
	ADA I
ARTFCT,	0
	APO
	JMP RETURN
	CLR
	STC ARTIND
EV,LDF 2/DATA FIELD 2 FOR MF SPIKES
	CLR
	STC ARTIND
	ADD OFLIND
AZE
JMP E1 /SKIP IF OFLIND IS ZERO
ADD TEMP1
BCL I
777
AZE
JMP E1 /GO TO E1 IF GREATER 
LDA  /THAN 512 MSEC
TEMP1
ADA I
2000
STC MF1 /MAKE ADDRESS OF MF1
LDA I
1
ADM
MF1,0
    /INCR MF1 BIN
	CLR
LDA I
1
LAM
SPCNT1
   /INC MF1 COUNTER
STC ZERO
LAM
SPCNT2
E1,CLR
ADD TEMP1
ROR 14
LDA 
OFLIND
SCL1,ROR 2
	AZE
	JMP E0
QAC
ROL 1
QLZ I
JMP .+3
BSE I
0001
STA I
TEMP3,0
BCL I
777
AZE
JMP E0
LDA
TEMP3
ADA I
3000
/MAKE ADDRESS FOR MF2
STC MF2
LDA I
1
ADM
MF2,0
  /INC MF2 BIN
	CLR
LDA I
1
LAM
SPCNT3
/INC MF2 COUNTER
STC ZERO
LAM
SPCNT4
     /INC TOTAL SPIKE COUNTER
E0,	CLR
	LDA I
1
LAM
SPCNT5 /INC TOTAL SPIKE COUNTER
STC ZERO
LAM
SPCNT6
    /
/CHECK IF FIRST SPIKE
/IS CLOSE TO ZERO MSEC
	LDA
	OFLIND
	AZE
	JMP E13
	LDA 
	TEMP1
	APO 
	JMP E13
	ADA
	SHTINT
	APO
	JMP E7
    /START DIFFERENCE ANALYSIS
     /
     /FORM 24 BIT DIFFERENCE DELTA
/  (OFLIND + TEMP1)
/-(OFLIN2 + TEMP2)
/-------------------
/ (DELTA2 + DELTA)
E13,	CLR
	LDA
TEMP1
STC DELTA
ADD TEMP2
COM
LAM
DELTA
STC ZERO
ADD OFLIND
STA I
DELTA2,0
LDA
OFLIN2
COM
LAM
DELTA2
	STC ZERO
	LAM
	DELTA
	STC ZERO
	LAM 
	DELTA2
AZE
JMP E3
LDA
DELTA
APO
JMP E3
ADA
SHTINT
APO I
JMP E3  /TO E3 FDELTA GREATER THAN
     /SHORT INTERVAL IN MSEC
LDA
CFIND
    /CHECK CF IND
AZE
JMP E10
/
/HERE IF CF FIRST DETECTED
     /
	LDA I
	1
	ADM
	BSTNO
     /HERE IF START OF CF BURST
E15,	LDF 3
LDA
OFLIN2
AZE
JMP E5
LDA
TEMP2 /START INC OF CF1 BIN
BCL I
777
AZE
JMP E5 /SKIP IF TEMP2 GREATER THAN 512
     /
     /BEGIN INCR OF CF1 BIN
LDA 
TEMP2
ADA I
2000
STC CF1
LDA I
1
ADM / ADD TO MEMORY OF CF1 BIN
CF1,0
	CLR
LDA I
1
LAM
CFCNT1
STC ZERO
LAM
CFCNT2
     /BEGIN INCR OF CF2 BIN
E5,	CLR
	ADD TEMP2
ROR 14
LDA
OFLIN2
SCL2,ROR 2
	AZE
	JMP E6
QAC
ROL 1
QLZ I
JMP .+3
BSE I
0001
STA I
TEMP4,0
BCL I
777
AZE
JMP E6
LDA
TEMP4
ADA I
3000
STC CF2
	CLR
LDA I
1
ADM
CF2,0
   /INC CF2 BINS
	CLR
	LDA I
	1
LAM
CFCNT3
STC ZERO
LAM
CFCNT4
     /INCR TOTAL CF COUNT
E6,	CLR
	LDA I
1
LAM
CFCNT5
STC ZERO
LAM
CFCNT6
CLR
	NOP
	NOP
	NOP
LDA I
1
	STC CFIND
     /TURN ON CF INDICATOR
JMP E7
     /INTERVAL WAS SHORT SO
     /GO TO E7
E3,CLR /HERE IF DELTA MORE THAN SHTINT
ADD CFIND
AZE I
JMP E7 /OUT IF CFIND NOT ON
	LDA
	DELTA2
	AZE I
	JMP .+11
LDA  /BURST STILL ON
DELTA
	APO 
	JMP .+5
     /SUBTRACT LONG INTER VAL
ADA
LNGINT
APO
     /TO E10 IF DELTA SHORTER THAN LONG
     /INTERVAL
JMP E10
/
/TO HERE AT END OF SWEEP TO TERMINATE CF
E20,  CLR /BURST IS COMPLETE
/HALT IF BURST IS EXCESSIVELY LONG
	LDA I
	1
	ADM
	BSTNO
	CLR
	ADD BSTNO
	ADA I
MAXB,	-22
	APO
	JMP .+5
	IOB
	PMODE
	IOF
	LMODE
	LIF 1
	JMP MAXOUT
	CLR
	ADA I
	-22
	APO I
	JMP E21
LDA
BSTNO  /MAKE ADDRESS OF BURST NUMBER
ADA I
CNTRG-1
STC ADR
     /STORE IN ADR
	LDA I
	1
	ADM
ADR,	0
E21,	LDA
	BSTNO
	LAM
	BSTSP1
	STC ZERO
	LAM
	BSTSP2
	CLR
STC CFIND
	STC BSTNO
JMP E7
     /HERE IF DELTA IS SHORT AND BURST
     /ALREADY IN PROGRESS^
E10,LDA I
1
ADM
BSTNO
/
/
/
/
     /HERE TO FINISH INTERVAL ANALYSIS
E7,CLR
ADD TEMP1
STC TEMP2
ADD OFLIND
STC OFLIN2
	LDA I 
	NOP
	STC 41
CFEND,	NOP
	LDA
	CFIND
	AZE I
	JMP E14-1
	LDA
	RESET
	AZE I
	JMP E14-1
	LDA I
	4301
	IOB
	PMODE
	CLLR
	LMODE
/ABOVE NOP IS EXIT OF SWEEP TERM ROUTINE
/SNS 0 CONTROLS INTEGRATION SAMPLING
	SNS 0
E14,JMP RETURN
     /
	 		/
/     ROUTINE FOR INTEGRATION OF 
/     CLIMBING FIBER SLOW WAVE
/
/
/    INITIAL WAITING LOOP
/     KNOB 6 DETERMINES WAIT
/ BEFORE SAMPLING BEGINS
/
	LDA I
	JMP SRVRT
	STC 41
	IOB 
	PMODE
	ION
	LMODE
/ENABLE SLOW SAMPLE TO DETERMINE 
/WAIT LOOP TIME
	SET I 4
	0
	SAM 6
	SCR 1
	APO I
	COM
	STC 5
/DISPLAY SIGNAL DURING WAIT AT
/ABOUT THIRTY  POINTS PER MSEC
	SAM 14
	DIS I 4
	CLR
	STC INTGR1
	STC INTGR2
	NOP
	NOP
	XSK I 5
	JMP .-10
/
/INITIALIZE
/KNOB 5 CONTROLS LEVEL
/FOR THE INTEGRATION AND
/DETERMINATION OF CLIMBING FIBER 
/ACTIVITY
/  THE ANALOGUE SIGNAL IS SAMPLED 
/THROUGH CHANNEL 14
/KNOB 4 CONTROLS SAMPLE TIME
/
/
	SAM 5
	BCL I
	7001
	SCR 1
	STA 
	LEVEL
	COM
	STC MLEVEL
	SAM 4
	SCR 2
	APO I
	COM
	STC 5
    /    /
L,	SAM 14
	DIS I 4
	APO
	COM
/KEEP DOUBLE PRECISION SUM
	LAM I
INTGR1,	0
	STC ZERO
	LAM I
INTGR2,	0
/    DISPLAY THRESHOLD
/LEVEL
	SET I 3
	-1
	NOP
	XSK I 3
	JMP .-2
	LDA I
LEVEL,	0
	DIS I 4
/ROTATE SUM INTO MQ
	LDA
	INTGR1
	ROR 14
	LDA
	INTGR2
	ROR 4
	QAC
	DIS I 4
	ADA I
MLEVEL,	0
/GO TO CF BIN INCR ROUTINE
/IF SUM GREATER THAN THRESHOLD
	APO 
	JMP .+13
	IOB
	PMODE
	IOF
	LMODE
	LDA I
	NOP
	STC 41
	LDA
	CFIND
	AZE
	JMP .+4
	JMP E15
	XSK I 5
	JMP L
	IOB 
	PMODE
	IOF
	LMODE
	LDA I
	NOP
	STC 41
	JMP RETURN
/
   /DISPLAY PROGRAM
/SENSE SWITCH 5 SELECTS FIELD THREE
/SENSE SWITCH 4 SELECTS UPPER
/512 POINTS
/RSW BITS 8-11
/THE VERTICAL POSITION
/
	IOB
	PMODE 
	ION
	LMODE
DATSEL,	CLR
	ADD .+2
	STC DFIELD
	LDF 2
SNS 5
JMP .+5
	CLR
	ADD .+2
	STC DFIELD
	LDF 3
LDA
SEG1
STC BLOCK/SELECT FIELD 5 IF SSW 5(1)
SNS 4
JMP DISPLY
LDA
SEG2
STC BLOCK
JMP DISPLY
SEG1,3777/LOWER 512 POINTS
SEG2,2777/UPPER 512 POINTS
/
/
TTYASK,IOB
/DISPLAY  ROUTINE CHECKS HERE FOR
/ TTY CONTROL COMMAND
	PMODE
	KSF
	LMODE
	JMP .+3
/GOES TO TTY INTEROGATION
/ROUTINE IF KEY IS STRUCK
	LIF 4
	JMP INTERG
RETN,	 JMP DATSEL
/
	IOB
	PMODE
	IOF
	LMODE
DISPLY,	CLR
SAM 0/TAKE VERTICAL POSITION
SCR 1
STA 
VERT
COM 
STC MVERT
SET I 13/VERT/  SELEST FIRST 512
BLOCK,1777/POINTS OF UPPER MEMORY
SET I 14/SET COUNT FOR HOR SCALE
	-777
	LDA I
	1
	ADA I
BD10,	0
	AZE I
	JMP .+3
BD5,	COM
	STC RPT
/START OF DISPLAY LOOP
DIS2,	LDA I 13
/NOW ROTATE RIGHT OR LEFT DEPENDING ON THE 
/TELETYPE INTERUPT ROUTINES
	ROL 0
SCR 0
ADA I
VERT,0
STA
VRTPOS
	SET I 12
RPT,	-1
	DIS I 14
	XSK 14
	JMP .+2
	JMP LINDIS
	XSK I 12
	JMP RPT+1
SNS 3
JMP .+14
     /MAKE BAR IF SNS 3 (1)
BD3,LDA I
VRTPOS,0
DIS 14
ADA I
-3
STA
VRTPOS
ADA I
MVERT,0
APO I
JMP BD3
/END OF BAR ROUTINE
	JMP DIS2
/
/
/
/
    /SCALED LINE DISPLAY
/HORIZONTAL LINE 2 POINTS BELOW ZERO
/AND POINTS AT TEN DIVISIONS SPACING
LINDIS,	SNS I 1
	JMP CURSER
	SET I 13
0
LDA
VERT
	ADA I
	-4
DIS 13
LDA I
12
ADA
13
STA
13
ADA I
-777
APO
JMP .-16
LDA I
1
BD7,	ROL 0
MUL I
5
STA
VRTCNT
SET I 13
0
LDA
VERT
STA
VERTCT
VT,LDA I
VERTCT,0
DIS 13
ADA I
VRTCNT,0
STA
VERTCT
ADA I
-377
APO I
JMP LETDIS
JMP VT
/
/
/
/
/
/LETTER DISPLAY ABOVE DATA NUMBERS
LETDIS,	LDA I
	LDF 1
	STC DFIELD
	LDF 1
	SFA
	BCL I
	200
	ESF
	SAM 1
	BCL I
	7003
	STA I
HPOS,	0
	STC 1
	SAM 2
	BCL I
	7000
	STC VCHAR
	LDA I
	TXT2-TXT3+TXT2-TXT3
	STC 13 		/IR 13 HOLDS LENGTH OF TXT
	LDA I
	TXT2-4000
	STC 12		/IR 12 HOLDS ADDRESS OF HALF WORDS FOR DISPLAY
	LDH I 12
	JMP DCHAR
	XSK I 13
	JMP .-3
/DISPLAY CELL CODE ON LINE BELOW
	SET I 12
	ANS1+5-4000
	SET I 13
	-4
	LDA
	HPOS
	STC 1
	LDA I
	-20
	ADM
	VCHAR
	LDH I 12
	JMP DCHAR
	XSK I 13
	JMP .-3
/
/DISPLAY OF DATA NUMBERS
/
	LDA I
	24
	ADM 
	1
	LDA 
	SWEEPS
	STC DN2
	JMP DN
	LDA I
	24
	ADM 
	1
/ /USE SNS 4,5 TO DETERMINE EVENTS
/
	SNS 5
	JMP DC2
	SNS 4
	JMP DC1
	LDA 
	CFCNT4
	STC DN2
	JMP DN
	LDA 
	CFCNT3
	STC DN2
	JMP DN
	JMP ENDCH
DC1,	 LDA 
	CFCNT2
	STC DN2
	JMP DN
	LDA
	CFCNT1
	STC DN2
	JMP DN
	JMP ENDCH
DC2,	SNS 4
	JMP DC3
	LDA 
	SPCNT4
	STC DN2
	JMP DN
	LDA 
	SPCNT3
	STC DN2
	JMP DN
	JMP ENDCH
DC3,	LDA 
	SPCNT2
	STC DN2
	JMP DN
	LDA 
	SPCNT1
	STC DN2
	JMP DN
ENDCH,	JMP TTYASK
/
/4 DIGIT NUMBER DISPLAY  
/ENTER WITH NUMBER IN THE ACC
/
DN,	ADD 0
	STC DN1
	SET I 15
	-4
	LDA
	DN2
	ROL 3
	STA
	DN2
	BCL I
	7770
	JMP DISN
	XSK I 15
	JMP .-11
DN1,	0
DN2,	0
DISN,	BSE I
	0060
	ROL 1
	ADA I
	QAV+2000
	STC 14
	LDA
	VCHAR
	DSC 14
	DSC I 14
	LDA I
	2
	ADM
	1
	CLR
	JMP 0
/
/DISPLAY CHARACTER
/ENTER WITH HALF WORD IN ACCUMULATOR
/X AND Y COORDINATES MUST BE PLACED IN 
/LOCATION 1 AND VCHAR
DCHAR,  ROL 1
	ADA I
	QAV+2000
	STC 14
	LDA I
VCHAR,	0
	DSC 14
	DSC I 14
	LDA I
	2
	ADM
	1
	CLR
	JMP 0
/
/
/
CURSER,	LDA
	0
	STC C1
	CLR
	SAM 3
	BCL I
	7000
	STA
	1
/TO BE DISPLAYED
	STC BIN
	SNS I 4
	JMP .+4
	LDA I
	2000
	JMP .+3
	LDA I
	3000
	ADM
	BIN
	LDA 
BIN,	0
	STA I
	BINCNT,0
	LDA
        VERT
	ADA I
	-12
	STA  
	VCHAR
        DSC I
	0077
	CLR
	ADD .+2
	STC DFIELD
	LDF 1
	LDA I
	10
	ADM
	1
	LDA
	BIN
	BCL I
	7000
	STC DN2
	JMP DN		/DISPLAY BIN NUM
	LDA I
	12
	ADM
	1
	LDA
	BINCNT
	STC DN2
	JMP DN
C1,	0
/
/
/
     /CONSTANTS FOR ROUTINE
   
	*1660
/ 
/PARAMETER CONSTANTS
/
COUNT,7776
SCALE,2
SHTINT,-6
LNGINT,-30
   /NEGATIVES OF SHORT AND LONG INTS
/
/TEMPORARY VALUES
/
TEMP1,0
OFLIND,	0		/CURRENT INTERVAL TIME
TEMP2,0
OFLIN2,	0		/LAST INTERVAL TIME
DELTA,	0/  TIME BETWEEN EVENTS
CFIND,	0/ CF INDICATER  1 OR  0
ARTFC,	0/  TIME OF STIME ARTIFACT
BSTNO,	0/   TEMP SPIKES IN BURST
ZERO,0/   TRASH LOCATION
/
/
/CONSTANTS - FINAL DATA
/
TTIME1,	0		/TOTAL TIME  LOW DIGITS
TTIME2,	0		/HIGH DIGITS
SPCNT1,0
     /COUNTS IN MF1 BINS  LOW DIGITS
SPCNT2,0
     /HIGH DIGITS
SPCNT3,0
     /COUNTS IN MF2 BINS    LOW
SPCNT4,0
     /HIGH DGITS
SPCNT5,0
     /TOTAL MF COUNTS     LOW
SPCNT6,0
     /HIGH
CFCNT1,0
CFCNT2,0
CFCNT3,0
CFCNT4,0
CFCNT5,0
CFCNT6,0
BSTSP1,0
BSTSP2,0
CNTRG,0
2
3
4
5
6
7
10
11
12
13
14
15
16
17
20
21
	22
     /
SWEEPS,	0		/SWP COUNTER
/
DATANO,	100		/TAPE DATA NO
ANS1,	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
TXT2,	TEXT ZCODE  SWPS  EVENTSZ
TXT3,	0
/
/
/
/
/
/INITIAL INTEROGATION ROUTINE
/USES QANDA TO OBTAIN INITIAL 
/PARAMETERS IN ANS1 BUFFER LOCATED
/ IN QUARTER 3 WITH CONSTANTS
/
	UM=2000
	SEGMNT 1
	*2020
	LDF 0
	LDA I
	0020
	ATR
	JMP QAINIT
	TXT1
	ANS1+UM
	JMP QARFSH
	JMP LOAD
/
TXT1,	TEXT ZPBH - DATE <8
	CODE <6
	BIN EXP <2
	MSEC - MIN INT <2
	MSEC - MAX INT <2
	HISTO NUMBER <2\Z
/
/LOAD CONSTANTS FROM BUFFER
/
LOAD,	 LDA		/LOAD BIN EXP
	ANS1+UM+10
	BCL I
	7760
	ROL 4		/MAKW MIDDLE BCD
	STA I
DECI,	0
	LDA		/GET LOW DIGIT
	ANS1+UM+11
	BCL I
	6077
	ROR 6
	BSE 
	DECI
	JMP BCDBN
	STA
	SCALE+UM
/
/LOAD MSEC MIN INT
/
	CLR
	LDA
	ANS1+UM+12
	BCL I
	6077
	ROR 2
	STC DECI
	LDA
	ANS1+UM+12
	BCL I
	7760
	BSE
	DECI
	JMP BCDBN
	COM
	STA
	SHTINT+UM
	CLR
/
	/LOAD MSEC MAX INT
/
	LDA
	ANS1+UM+13
	BCL I
	7760
	ROL 4
	STC DECI
	LDA
	ANS1+UM+14
	BCL I
	6077
	ROR 6
	BSE 
	DECI
	JMP BCDBN
	COM
	STA
	LNGINT+UM
/
/LOAD HISTO NUMBER
/
	CLR
	LDA
	ANS1+UM+15
	BCL I
	6077
	ROR 2
	STC DECI
/STORE BITS IN DECI  GET LOW DIGIT
	LDA
	ANS1+UM+15
	BCL I
	7760
	BSE
	DECI
	JMP BCDBN
	STA
	DATANO+UM
/JUMP TO START PROGRAM
	LIF 0
	JMP START
/
NEWDNO,	JMP QAINIT
	NEW1
	NEW2
	JMP QARFSH
	JMP NEW3
/
NEW1,	TEXT ZSET HISTO NUMBER <2\Z
NEW2,	0
	0
/HERE TO CONVERT NEW DATA NUMBER
/FROM DECIMAL TO BIN AND LOAD
/
NEW3,	CLR
	LDA 
	NEW2
	BCL I
	7760
	ROL 4
	STA I
N4,	0
	LDA		/GETSECOND DIGIT
	NEW2+1
	BCL I
	6077
	ROR 6
	BSE
	N4
	JMP BCDBN
	STA
	N4
	ADA I
	-67
	APO I
	JMP NEW4
	LDA 
	N4		/JMP TO NEW4
/IF HISTO NUMBER IS TOO LARGE
	LDF 0
	STA
	DATANO+UM
	CLR
	LIF 0
	JMP 21		/JMP TO DISPLAY
/
NEW4,	 JMP QAINIT
	NEW5
	NEW6
	JMP QARFSH
	JMP NEWDNO
NEW5,	TEXT ZNUMBER FOR HISTGRAM IS TOO LARGE
	HIT LF TO RESET  \Z
NEW6,	0
/
BCDBN,	STA I
	0
	CLR
	ADD 0
	STC .+5
	ADD .-4
	PDP
	PMODE
	JMS BCDBIN
	LINC
	LMODE
	0
/BINARY-CODED-DECIMAL TO BINARY CONVERSION SUBROUTINE
/
	PMODE
/
BCDBIN,	0
	DCA TEMPH		/STORE INPUT
	TAD TEMPH
	AND LDIGIT
	CLL RTR
	DCA CONT
	TAD CONT
	RAR
	TAD CONT
	CMA IAC
	TAD TEMPH		/160 H + 16 M + L
	DCA TEMPH
	TAD TEMPH
	AND MDIGIT
	CLL RTR
	DCA CONT
	TAD CONT
	RAR
	TAD CONT		/60 H + 6 M
	CMA IAC
	TAD TEMPH
	JMP I BCDBIN	/EXIT
LDIGIT,	7400
MDIGIT,	7760
CONT,	0
TEMPH,	0
/
	LMODE
/QANDA SUBROUTINE FOR THE
/PDP-12
/
/TO HERE TO INITIALIZE THE ROUTINE
/
QAINIT,	LDA I		/SAVE JMP RETURN
	2
	ADD 0
	STA I
QAB,	0		/JMP 	+3
	ADD QAL+3
	STC 1		/PTR TO FIRST PARAM
	LDA 1		/GET FIRST PARAM
	ADD QAQ+1	/PTR TO HALFWORD-1
	STC QAG-3
	LDA I 1
	STC QARFSH-1
	STC 6		/XR6 USED AS A SWITCH. =0 IF NO ANSWER FIELD, =1777 IF YES
QACA,	SET 3	/XR3 TO PTR TO ANSWERS
	QARFSH-1
	SET 4		/XR4 TO PTR TO QUESTIONS
	QAG-3
			/TO HERE IF FIRST TIME THROUGH OR FOLLOWING A CR
	SET 1
	4
	JMP QAT
	NOP		/F
	LDH I 4		/H. BUMP PTR IF H OR F
QAD,	JMP QAO
	JMP .+6		/74
	JMP QAE		/34
	SAE I		/CR?
	43
	JMP QAD		/NO
	JMP QACA+4 /EXAMINE NEXT CHAR
			/INITIALIZE ANSWER BUFR
	STH 3		/74 TO ANSWERS
	LDH I 4		/NEXT HALFWORD
	ADA I
	-60
	COM
	STC 6
	STH I 3		/0 IN AC
	XSK I 6
	JMP .-2
	LDH I 3		/BUMP PTR TO ANSWERS
	JMP QAD
			/ANSWER BUFR IS INITIATED
QAE,	STH 3
	SET I 4		/XR4 TO PTR TO LAST TYPED CHAR IN ANSWER BUFR
	0
			/----RE-ENTER HERE TO REFRESH----
QARFSH,	LDA I		/INITIAL Y POSITION
277
	STC QAH-1
	SET I 3		/XR3 TO PTR TO HALFWORD QUESTIONS-1
	0
	SET 5		/XR5 TO PTR TO LAST DISPLAYED CHAR IN ANSWER BUFR
	QARFSH-1
QAG,	SET 1
	3
	JMP QAT
	JMP .+7		/F
	LDH I 3		/H. BUMP PTR
	LDA I		/NEITHER. ASSUME HALF SIZE
	BCL I
	STC QAM+2	/SET INSTR TO CLEAR FF FOR HALF SIZE
	ADD QAW		/NOP IN AC
	JMP QAM
	LDH I 3		/BUMP PTR
	LDA I
	BSE I
	STC QAM+2	/SET INSTR TO SET FF FOR FULL SIZE
	ADD QAW+1	/ADD 9U IN AC
QAM,	STC QAP+3
	MSC I 4		/EAD CONTROL REGISTER
	BSE I		/THIS INSTR CHANGES. EITHER BSE & OR BCL &
	200
	MSC 4		/AC TO CONTROL REGISTER
	SET I 1		/XR1 TO INITIAL X POSITION
	100
	LDA I		/Y COORDINATE MULTIPLE
	-40
	ADM I		/Y COORDINATE
	0
QAH,	LDH I 3
	JMP QAO+1
	JMP QAZ		/74 BUMP PTR TO NEXT CHAR, PUT 40 IN AC
	JMP QAJ		/34
	SHD I		/NEITHER
	4300
	JMP QAG		/CR. MOVE X AND Y COORDINATE
	JMP QAP		/ISPLAY CHAR
	JMP QAH		/PICK UP NEXT CHAR
	JMP QAP		/TO HERE IF DISPLAYING ANSWER BUFR
	SRO I	/SWITCH TO DISPLAY CURSOR. EITHER 0000 OR 7777
	0		/IFXR4=XR5, THEN SWITCH=7777
	JMP QAF
			/QUESTION MODE
QAI,	LDH I 5
	JMP QAO+1
	JMP QAH		/74
	JMP QAH		/34
	JMP QAI-4	/NEITHER. DISPLAY IT
QAJ,	JMP GETKBD	/TO HERE IF DISPLAYED BUFFER
	AZE I
	JMP QAB	/NOTHING TYPED . EXIT
	SET I 2
	QAY
	SHD 2		/LF?
	JMP QAK+4	/YES. EXIT
	SHD I 2		/CR?
	JMP QAN
	XSK 6		/IS THERE AN ANSWER FIELD?
	JMP QARFSH
	SHD I 2		/<?
	JMP QAL
	SHD I 2		/>?
	JMP QAK
	SHD I 2		/ALT?
	JMP QACA /REINITIALIZE
	SHD I 2		/BACK SLASH?
	JMP QARFSH	/IGNORE
	SHD I 2		/RUBOUT?
	JMP QAL		/IGNORE
	SHD I 2		/TAB?
	JMP QARFSH	/IGNORE
	STC .+5		/ACCEPTABLE CHAR
	JMP QAO		/TEST NEXT CHAR
	JMP QAQ		/74 BACK PTR UP BY 1
	JMP QAQ		/34 ^
	LDA I		/OK. STORE IT
	0
	STH 4
	JMP QARFSH	/REDISPLAY
QAL,	LDH 4		/TO HERE IF RUBBOUT OR <
	JMP QAO+1
	JMP QARFSH	/74 IGNORE
	-6002
	LDH 2		/TEST THE CHAR
	SAE I		/RUBOUT?
	37
	JMP QAQ		/NO. BACK PTR UP BY 1
	SET 5
	4
	SET 3
	4
	JMP .+2
	LDH I 5		/BUMP PTR
	LDH I 3		/GET NEXT CHAR
	JMP QAO+1
	NOP		/IF 74 OR 34, REPLACE CURRENT CHAR WITH 0
	CLR
	STH 5
	AZE		/WAS IT 74 OR 34?
	JMP .-7		/NO. CONTINUE
	JMP QAQ		/BACK PTR UP BY 1
			/TO HERE IF CR
QAN,	XSK 6	
	JMP QAK+4	/EXIT ROUTINE IF NO ANSWER FIELD
	JMP QAO
	JMP QARFSH	/74 MOVE PTR TO NEXT QUESTION FIELD
	JMP QAE+1	/34 END OF BUFR. MOVE PTR TO FIRST QUESTION FIELD
	JMP QAN+2
	
QAO,	LDH I 4		/S\R
	SHD I		/	+1 74 BEGIN FIELD
	7400		/	+2 34 END BUFR
	JMP 0		/	+3 NEITHER 74 NOR 34
	SAE I
	34
	XSK I 0
	XSK I 0
	JMP 0
			/S\R TO DISP LINC CHAR IN AC
QAP,	ROL 1		/MULT BY 2 FOR INDEX TO ADDRESS OF TABLE
	ADD QAX+4
	STC 2		/ADDRESS OF CHAR TO DISP IN XR2
	ADD QAU		/THIS INSTR CHANGES. EITHER OP OR ADD 9U
	ADD QAU
	ADD 1		/ADD 4 TO XR1 TO SPACE CHAR
	STC 1
	ADD 5		/GET ADDRESS OF ANSWER BUFR
	COM
	ADD 4
	AZE
	CLR
	STC QAI-2	/SWITCH=0 OR 7777
	ADD QAH-1	/Y COORDINATE IN AC
	DSC 2
	DSC I 2		/DISPLAY CHAR
	JMP 0
QAQ,	LDA I		/BACK UP PTR BY 1
	-4000
	ADM
	4
	JMP QARFSH	/REDISPLAY
			/
QAT,	LDH I 1		/S\R
	SHD I		/	+1 F
	0600		/	+2 H
	JMP 0		/	+3 NEITHER
	SAE I
	10
	XSK I 0
	XSK I 0
	JMP 0
			/
QAZ,	LDH I 3
	LDA I
	40
	JMP QAI-4
			/TO HERE IF >
QAK,	LDH I 4
	AZE I		/IS CURRENT CHAR BLANK?
	JMP QAQ		/YES. IGNORE
	JMP QAX		/MOVE DOT FORWARD
			/TO HERE TO EXIT WITH SKIP
	LDA I
	1
	ADM
	QAB
	JMP QAB
			/CHARACTER PATTERNS
QAV,	0101		/KBD 0, ILLEGAL. USED AS MARKER
	0101
	4477		/1:A
	7744
	5177		/2:B
	2651
	4136		/3:C
	2241
	4177		/4:D
	3641
	4577		/5:E
	4145
	4477		/6:F
	4044
	4136		/7:G
	2645
	1077		/10:H
	7710
	7741		/11:I
	0041
	4142		/12:J
	4076
	1077		/13:K
	4324
	0177		/14:L
	0301
	3077		/15:M
	7730	
	3077		/16:N
	7706	
	4177		/17:O
	7741
	4477		/20:P
	3044
	4276		/21:Q
	0376
	4477		/22:R
	3146
	5121		/23:S
	4651
	4040		/24:T
	4077
	0177		/25:U
	7701	
	0176		/26:V
	7402
	0677		/27:W
	7701
	1463		/30:X
	6314
	0770		/31:Y
	7007
	4543		/32:Z
	6151
	4177		/33:/
	0000
			/34:BACKSLASH IGNORED ON INPUT
	0		/NOT USED
	0		/NOT USED
	0000		/35:]
	7741
			/CODES 36:ALT, 37:RUBOUT NOT DISPLAYED
QAY,	4543		/LF,CR
	7476		/<,>
	3634		/ALT, BACKSLASH
	3747		/RUBOUT, TAB
	0000		/40:SPACE
	0000
	7500		/41:X!
	0000
	7000		/42:"
	0070
			/CODES 43:, 44:, 45:LF NOT DISPLAYED
QAX,	JMP QAO+1
	JMP QAQ
	JMP QAQ
	JMP QARFSH
	QAV
	0		/NOT USED
	5166		/46: &
	0526
			/CODE 47:TAB NOT DISPLAYED
	0		/NOT USED
	0		/NOT USED
	3600		/50:(
	0041
	4100		/51:)
	0036
	2050		/52:*
	0050
	0404		/53:+
	0437
	0500		/54:,
	0006
	0404		/55:-
	0404
	0001		/56:.
	0000
	0601		/57:\
	4030
	4536	/60:0
	3651
	2101		/61:1
	0177
	4523		/62:2
	2151
	4122		/63:3
	2651
	2414		/64:4
	0477
	5172		/65:5
	0651
	1506		/66:6
	4225
	4443		/67:7
	6050
	5126	/70:8
	2651
	5122		/71:9
	3651
	2200		/72::
	0000
	4601		/73:;
	0000
			/CODE 74:<NOT DISPLAYED
QAU,	2		/CONSTANT
	0	/NOT USED
	1212		/75:=
	1212
			/CODE 76:> NOT DISPLAYED
QAW,	NOP
	ADD QAU
	4020		/77:?
	2055
/
QAF,	DSC I
	6000
	JMP QAI
/
			/END Q+A
/
/
/
/
/KEYBOARD INPUT ROUTINE
/
QAKRB=6036	/PDP-8 IOT KBD
QATSF=6041	/TSF
QATLS=6046	/TLS
/
GETKBD,	LDA
	0
	STC QAEXIT+6	/SAVE RETURN
	ADD 1		/SAVE XRS 1 AND 2
	STC QAEXIT+3
	ADD 2
	STC QAEXIT+5
	STC QAEXIT+1
	KST	/WAS SOMETHING TYPED?
	JMP 0		/NO: EXIT
	IOB
	QAKRB	/GET TTY CHAR, CLEAR FLAG
	STA I		/SAVE IT
QATY,	0
	ADA I
	-237
	APO		/BETWEEN 200 AND 237?
	JMP QACNTR	/CONTROL CHAR. CHECK FOR CR,LF,TAB
/
	SET I 1		/NO
	QACHAR-1
	SET I 2
	-7
	LDA
	QATY
	SAE I 1
	JMP .+2
	JMP QAEXIT	/ILLEGAL CHAR. DONT ECHO
	XSK I 2	/CHECKED THEM ALL?
	JMP .-4
/
	ADA I
	-337
	APO		/BETWEEN 240 AND 337?
	JMP QALEGL	/YES. LEGAL CHAR
/
	SAE I 1		/NO. CHECK FURTHER.
	JMP .+7
	LDA I		/RUBOUT
	334
	JMP QATPE	/ECHO BACKSLASH
	LDA I
	37
	JMP QAEXIT+2	/LEGAL EXIT
/
	SAE I 1
	JMP QAEXIT	/ILLEGAL
			/ALT
	JMP QAEXIT+2	/EXIT, DONT ECHO
/
QALEGL,	LDA
	QATY
	JMP QATPE	/ECHO CHAR
	ADD QATY
	BCL I		/STRIP IT TO 6-BIT
	7700
	JMP QAEXIT+2
/TO HERE IF CONTROL CHAR
QACNTR,	SAE I
	7755
	JMP QACKLF
	LDA I		/CR
	43
	STC QAEXIT+1
	LDA I
	215
	JMP QATPE
	LDA I
	212
	JMP QATPE
	JMP QAEXIT
/
QACKLF,	SAE I
	7752
	JMP .+4
	LDA I		/LF
	45
	JMP QACNTR+5
	SAE I
	7751
	JMP QAEXIT	/ILLEGAL
	LDA I
	47
	JMP QAEXIT+2	/EXIT, DONT ECHO
/
QAEXIT,	LDA I	/GET 6-BIT ASCII
	0
	SET I 1		/RESTORE XRS
	0
	SET I 2
	0
	JMP		/EXIR S\R GETKBD
/S\R TO PRINT C(AC)
QATPE,	IOB
	QATLS	/PDP-8 IOT TLS
	LDA
	0
	STC .+4	/SAVE RETURN
	IOB
	QATSF	/WAIT FOR FLAG
	JMP .-2
	JMP 	/EXIT
/
QACHAR,	243	/HASH
	244	/DOLLAR SIGN
	245	/PER CENT
	247	/APOSTROPHE
	300	/AT SIGN
	336	/UP ARROW
	337	/BACK ARROW
	40	/RUBOUT
	36	/ALT
/END OF S\R GETKBD
/
/
/
/
/
	
ALTART,	JMP QAINIT
	ART1
	ART2
	JMP QARFSH
	JMP ART3
ART1,	TEXT ZSET ARTIFACT DURATION
	EQUAL TO  <3\Z
ART2,	0
	0
	0
ART3,	LDA
	ART2		/GET 3 DIGIT BCD
	BCL I
	7760
	ROR 4
	STA I
ART5,	0
	LDA
	ART2+1
	BCL I
	6077
	ROR 2
	BSE 
	ART5
	STA 
        ART5
	LDA
	ART2+1
	BCL I
	7760
	BSE
	ART5
	JMP BCDBN	/CONVERT
	LDF 0
	STA
	ART6+UM
	LIF 0
	JMP 21
/
/MAXOUT USED WHEN MAX EVC?C?C
C%C?CGC%C?B[BUC?COCUC?CMB5C?BECYC?B)C6C?C1B6C?C!BFC?CACZC?CAC*C?CAC*C?CAB*C?CAB*C?BACJC?BACJC?CACJC?BABJC?CACJC?CACJC?CACJC?B!CJC?CACJC?BABJC?BABJC?C>BJC?B>BJC?C?B



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