File LINKUP.PA (PAL assembler source file)

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

/AUTOLAB-PDP-IBM DATA LINK PROGRAM
/
	KSF2=6401
	KCC2=6402
	KRS2=6404
	KRB2=6406
	TSF2=6411
	TCF2=6412
	TPC2=6414
	TLS2=6416
	CLSK=6131
	CLLR=6132
	CLAB=6133
	CLEN=6134
	CLSA=6135
	CLBA=6136
	CLCA=6137
	DSKP=6741
	DCLR=6742
	DLAG=6743
	DLCA=6744
	DRST=6745
	DLDC=6746
	LINC=6141
	PDP=0002
	ATR=0014
	LIF=0600
	LDF=0640
	FIXTAB
*0
	0
	JMP I 2
	SERVE
*10
L0010,	0
TP1PT,	3377
CHARO,	6577
*20
/CONSTANTS
M1000,	-1000
M17,	-17
M7,	-7
M4,	-4
XON,	021
MFEED,	-12
MCTRLC,	-203
MCTRLZ,	-232
MRETRN,	-215
MMINUS,	-55
DLIMT1,	ASCII1-1
DLIMT3,	-ASCII3
EOB,	44
WRITCM,	4400
READCM,	0400
QMARK,	77
ASCII0,	60
ASCII1,	261
ASCII2,	262
ASCII3,	063
/  VARIABLES
CHAR,	0
CMDMOD,	0
XCHAR,	0
/  FLAGS
ENDFL1,	0
ENDFL2,	0
ERR6FL,	0
ERR5FL,	0
ERR4FL,	0
ERR3FL,	0
ERR2FL,	0
ERR1FL,	0
STOPFL,	1
XMODE,	0
TP1BUF,	0
TPBUSY,	0
LOCAL,	1
BFLAG,	0
DKBUSY,	0
INMODE,	1
MFLAG,	0
READIN,	1
DISKO,	0
TIMEFL,	-144
CYCLE,	-62
/  POINTERS
BSTART,	0
BLOCKI,	0
BLOCKO,	0
DKADDR,	0
CURRNT,	0
TP1ST,	3377
DISKST,	6577
DLIMIT,	ASCII1-1
EXIT,	RETURN
RLOCS,	0
	1
	2
	3
	4
	17
	17
	17
	17
	17
	5
	6
	7
	10
	11
	12
	13
	14
	17
	15
	16
	7777
SHIFT,	-1000
BASE,	3600

/ PROGRAM START-UP PAGE 1 BEGIN, CLA CLL TAD XON DCA I ENDLOC /SET LINK BUFFER C(114) = XON. CLLR /STOP THE CLOCK. SET MODE=000 TAD C100 CLLR /SET CLOCK MODE=010...CLEAR COUNTER CLSA /CLEAR ALL CLOCK STATUS FLAGS CLA TAD M24 CLAB /LOAD PRESET BUFFER CLA TAD C300 CLEN /SET COUNTER=BUFFER.ENABLE OVERFLOW INT CLA TAD C5100 CLLR /START CLOCK BY ENABLING 100 HZ RATE CLA DCLR /CLEAR AC AND DISK STATUS REGISTER ION /TURN ON INTERRUPT JMP I GO /GO TO BACKROUND JOB /INTERRUPT SKIP CHAIN SERVE, DCA AC RAL DCA LINK /SAVE LINK BIT KSF2 /KEYBOARD #2? SKP JMP I KEY2PT DSKP /RK8E/RK05 DISK? SKP JMP I RK05 CLSK /KW12-A CLOCK? SKP JMP I TICKER TSF2 /PRINTER #2? SKP JMP I TEL2PT KSF /KEYBOARD #1? SKP JMP I KEYPT TSF /PRINTER #1? SKP JMP I TELPT RETURN, CLL CLA TAD LINK /GET LINK BIT RAR TAD AC /GET ACCUMULATOR ION /TURN ON INTERRUPT JMP I 0 /RETURN TO BACKROUND JOB C100, 100 M24, -24 C300, 300 C5100, 5100 AC, 0 LINK, 0 RK05, DISK TICKER, CLOCK KEY2PT, KB2 TEL2PT, TP2 KEYPT, KB1 TELPT, TP1 GO, BROUND ENDLOC, 3514
/BACKROUND PROGRAM FOR SETTING UP DISK TRANSFERS /AND THE DATA LINK BUFFER. PAGE 2 BROUND, CLA CLL TAD DKBUSY SZA CLA /DISK BUSY? JMP BROUND /YES. TAD BFLAG /NO. SZA CLA /DISK INPUT BUFFER READY? JMP MARK5 /YES. TAD XMODE /NO. SZA CLA /TP1 IN SEND MODE? JMP BROUND /NO. TAD DISKO /YES. SZA CLA /DISK OUTPUT BUFFER READY? JMP MARK2 /YES. TAD BLOCKO /NO. CIA TAD BLOCKI SZA SMA CLA /DISK DATA AVAILABLE? JMP MARK6 /YES. TAD ENDFL1 /NO. SNA CLA /ALL AUTOLAB DATA IN? JMP BROUND /NO. TAD BFLAG /YES. SZA CLA /LAST DISK WRITE COMPLETED? JMP BROUND /NO. TAD TCOUNT /YES. CIA TAD M113 SNA CLA /DATA LEFT IN TP1 WRITE BUFFER? JMP MARK1 /NO. TAD M113 /YES. DCA LOOP TAD DISKST DCA XCHAR ISZ XCHAR /LOOP TO FILL DCA I XCHAR /DISK OUTPUT BUFFER ISZ LOOP /WITH "NULL" JMP .-3 /CHARACTERS. IAC DCA DISKO /SET DISK BUFFER READY FLAG. MARK1, TAD DLIMT1 DCA DLIMIT /RESET KB2 DELIMIT CHAR POINTER DCA BLOCKI /RESET INPUT BLOCK COUNTER TAD I ISTART DCA BASE IAC DCA ENDFL2 /SET END FLAG #2. DCA ENDFL1 /CLEAR END FLAG #1. JMP BROUND MARK2, TAD TP1BUF SZA CLA /TP1 WRITE BUFFER READY? JMP BROUND /YES. MARK3, TAD I CHARO /NO. GET DISK OUTPUT BUFFER CHAR DCA XCHAR TAD XCHAR CIA TAD EOB SZA CLA /END OF BUFFER CHAR? JMP MARK4 /NO. DCA DISKO /YES. CLEAR DISK OUTPUT BUFFER FLAG TAD DISKST DCA CHARO /RESET DISK OUTPUT BUFFER POINTER JMP BROUND MARK4, TAD XCHAR DCA I TP1PT /STORE XCHAR TO TP1 WRITE BUFFER JMS I SUB2 /SET V.P.C. COUNTERS ISZ TCOUNT /113 TH BUFFER CHAR? JMP MARK3 /NO. JMS I SUB3 /YES. GENERATE V.P.C. CHAR CLA TAD XCHAR DCA I TP1PT /SET CHAR(114)=V.P.C. CHAR TAD TP1ST DCA TP1PT /RESET TP1 POINTER TAD M113 DCA TCOUNT /RESET TP1 CHAR COUNTER IAC DCA TP1BUF /SET TP1 BUFFER FLAG. JMP BROUND MARK5, TAD WRITCM DCA CMDMOD /SET UP FOR DISK WRITE CMD TAD BSTART DCA CURRNT /SET UP CORE TRANSFER LOCATION TAD BLOCKI JMS I SUB1 /INITIATE DISK TRANSFER JMP BROUND MARK6, TAD READCM DCA CMDMOD /SET UP FOR DISK READ CMD TAD DISKST IAC DCA CURRNT /SET UP CORE TRANSFER LOCATION TAD BLOCKO JMS I SUB1 /INITIATE DISK TRANSFER JMP BROUND SUB1, SETUP SUB2, VPC1 SUB3, VPC2 TCOUNT, -113 M113, -113 LOOP, 0 ISTART, START
PAGE 3 /SUBROUTINE #1: DISK TRANSFER SET-UP SETUP, 0 DCA DKADDR /STORE DISK FILE BLOCK POINTER CLL TAD BSIDE /GET POINTER TO "RKB0" BLOCK 0 TAD FILEST /ADD RELATIVE FILE STARTING BLOCK TAD DKADDR /ADD RELATIVE FILE BLOCK DCA DKADDR /STORE ABSOLUTE DISK ADDR RAL /ROTATE DISK ADDR MSB TO AC(11) TAD CMDMOD /ADD DISK TRANSFER MODE DCA CMDMOD /STORE DISK CMD REG TAD CMDMOD DLDC /LOAD DISK CMD REG TAD CURRNT DLCA /LOAD CURRENT CORE TRANSFER ADDR IAC DCA DKBUSY /SET DISK BUSY FLAG TAD DKADDR DLAG /LOAD DISK ADDR REG AND EXECUTE CLA JMP I SETUP /RETURN /SUBROUTINE #2: VERTICAL PARITY CHECK BIT COUNT VPC1, 0 CLA CLL TAD M7 DCA VCOUNT TAD VPST DCA VPPT TAD XCHAR CLL RAR SZL ISZ I VPPT ISZ VPPT ISZ VCOUNT JMP .-5 CLA JMP I VPC1 /SUBROUTINE #3: VERTICAL PARITY CHECK CHARACTER VPC2, 0 CLA CLL TAD M7 DCA VCOUNT DCA BIT8 TAD VPST DCA VPPT AND K7600 TAD I VPPT RAR SZL ISZ BIT8 ISZ VPPT ISZ VCOUNT JMP .-7 AND K7700 TAD BIT8 AND K7701 RTR;RTR;RTR DCA XCHAR TAD M7 DCA VCOUNT TAD VPST DCA VPPT DCA I VPPT ISZ VPPT ISZ VCOUNT JMP .-3 JMP I VPC2 VCOUNT, 0 K7600, 7600 K7700, 7700 K7701, 7701 VPPT, 0 VPST, VPREG VPREG, 0 0 0 0 0 0 0 K17, 17 K7740, 7740 BSIDE, 6260 FILEST, 5360 BIT8, 0
/TELEPRINTER II (IOT 641X) SERVICE ROUTINE PAGE 4 TP2, TCF2 /CLEAR DTTO FLAG TAD OUT1 SZA /PRINT MESSAGE BUFFER #1? JMP PRINT1 /YES. TAD OUT2 /NO. SZA /PRINT MESSAGE BUFFER #2? JMP PRINT2 /YES. TAD OUT3 /NO. SZA /PRINT MESSAGE BUFFER #3? JMP PRINT3 /YES. JMP I EXIT /NO. PRINT1, ISZ OUT1PT /INCREMENT BUFFER POINTER CLA TAD I OUT1PT /GET BUFFER CHAR TLS2 /PRINT CHAR TAD MFEED SZA /CHAR = LINE FEED? JMP I EXIT /NO. DCA OUT1 /YES. CLEAR "ACKNOWLEDGE" FLAG #1 TAD OUT1ST DCA OUT1PT /RESET BUFFER POINTER TAD M4 DCA INMODE /SET INMODE FOR BUFFER INPUT JMP I EXIT PRINT2, ISZ OUT2PT /INCREMENT BUFFER POINTER CLA TAD I OUT2PT /GET BUFFER CHAR TLS2 /PRINT CHAR TAD MFEED SZA /CHAR = LINE FEED? JMP I EXIT /NO. DCA OUT2 /YES. CLEAR "ACKNOWLEDGE" FLAG #2 TAD OUT2ST DCA OUT2PT /RESET BUFFER POINTER IAC DCA INMODE /SET INMODE FOR START-UP JMP I EXIT PRINT3, ISZ OUT3PT /INCREMENT BUFFER POINTER CLA TAD I OUT3PT /GET BUFFER CHAR TLS2 /PRINT CHAR TAD MFEED SZA CLA /CHAR = LINE FEED? JMP I EXIT /NO. DCA OUT3 /YES. CLEAR MESSAGE FLAG #3 TAD OUT3ST DCA OUT3PT /RESET BUFFER POINTER IAC DCA INMODE /SET INMODE FOR START-UP JMP I EXIT /KEYBOARD II - AUTOLAB (IOT 640X) SERVICE ROUTINE KB2, KRB2 /READ IN CHAR DCA CHAR /STORE CHAR TAD INMODE /GET INPUT MODE FLAG SNA /IGNORE INPUT JMP I EXIT /YES. SPA CLA /NO. AWAITING START CMD? JMP CHECK1 /NO. TAD CHAR /YES. TAD CCEVEN SZA /CHAR = CTRL C (START INPUT)? JMP I EXIT /NO. TAD ENDFL1 /YES. TAD ENDFL2 SPA SNA /DISK SYSTEM CLEARED? JMP .+3 /YES. DCA OUT3 /NO. SET WRITE3 FLAG. JMP STTP2 CLA IAC DCA OUT1 /SET WRITE1 FLAG. JMP STTP2 CHECK1, TAD CHAR TAD MCTRLZ SZA CLA /CHAR = CTRL Z (STOP INPUT)? JMP CHECK2 /NO. IAC /YES. DCA OUT2 /SET WRITE2 FLAG. JMP STTP2 CHECK2, TAD CHAR SZA CLA /CHAR = "NULL" (DATA LINE BREAK)? JMP I KB2IN /NO. JUMP TO FILTER SUBPROGRAM IAC DCA ENDFL1 /YES. SET END FLAG #1 IAC DCA INMODE /RESET TO AWAIT START CMD IAC DCA ERR5FL /SET ERROR FLAG #5 JMP I EXIT STTP2, TLS2 /INITIATE TP2 INTERRUPT DCA INMODE /INHIBIT KB2 INPUT JMP I EXIT OUT1, 0 OUT2, 0 OUT3, 0 OUT1PT, TP2B1-1 OUT2PT, TP2B2-1 OUT3PT, TP2B3-1 OUT1ST, TP2B1-1 OUT2ST, TP2B2-1 OUT3ST, TP2B3-1 KB2IN, FILTER CCEVEN, -0003
/TELEPRINTER-DATA PHONE (IOT 604X) SERVICE ROUTINE PAGE 5 TP1, TCF /CLEAR TP1 FLAG CLA TAD LOCAL SNA CLA /TP1 IN LOCAL MODE? JMP TIME /N0. TAD TPBUSY /YES SNA CLA /TP1 BUSY? JMP I EXIT /NO. ISZ ERRPT /YES. ISZ KCOUNT TAD KCOUNT TAD M17 SZA CLA /16 TH ERROR BUFFER CHAR? JMP WRITE-5 /NO. CLA CMA / . TAD NASCII / . DCA NASCII / . TAD I FLAGPT /LOOP TO FIND SZA CLA /WHICH ERROR JMP ERRSET /FLAG, 1 - 6, ISZ FLAGPT /IS SET. JMP .-7 / . ERRSET, DCA I FLAGPT /CLEAR ERROR FLAG "N" TAD NASCII /SET AC = ASCII "N" JMP WRITE TAD MFEED TAD I ERRPT SNA CLA /CHAR = LINE FEED? JMP RSET /YES. TAD I ERRPT /NO. GET ERROR BUFFER CHAR WRITE, TLS /PRINT C(AC) JMP I EXIT RSET, TAD FLAGST DCA FLAGPT /YES. RESET ERROR FLAG POINTER DCA KCOUNT /RESET CHAR COUNTER TAD ASCII7 DCA NASCII /RESET ASCII CHAR TAD ERRST DCA ERRPT /RESET ERROR BUFFER POINTER TAD TIMEFL TAD MAKEUP DCA TIMEFL /MAKE-UP ERROR PRINT-OUT TIME CLBUSY, DCA TPBUSY /CLEAR TP1 BUSY FLAG JMP I EXIT TIME, TAD TIMEFL SMA CLA /DATA LINK TIME-OUT? JMP RTIME /YES. TAD TP1BUF /NO. SNA CLA /DATA PHONE OUTPUT BUFFER FLAG? JMP I EXIT /NO. TAD TP1PT /YES. TAD TP1END SNA CLA /END OF BUFFER? JMP RTIME-2 /YES. TAD I TP1PT /NO. GET BUFFER CHAR JMP WRITE /SEND CHAR TAD TP1ST DCA TP1PT /RESET TP1 OUTPUT BUFFER POINTER RTIME, TAD TIMECT DCA TIMEFL /RESET TIME-OUT COUNTER TAD NCYCLE DCA CYCLE /RESET RECV ERROR COUNTER IAC DCA XMODE /SET DATA LINE TO RECEIVE. JMP CLBUSY ERRPT, TP1B2-1 ERRST, TP1B2-1 KCOUNT, 0 NASCII, 267 ASCII7, 267 FLAGPT, ERR6FL FLAGST, ERR6FL TP1END, -3514 MAKEUP, 14 TIMECT, -144 /SETS FOR 20 SEC TIME INTERVAL NCYCLE, -220 /SETS FOR 30 SEC TIME INTERVAL
/KEYBOARD-DATA PHONE (IOT 603X) SERVICE ROUTINE PAGE 6 KB1, KRB /READ CHAR1 DCA CHAR1 /STORE IN CHAR1 TAD CHAR1 TAD MCTRLC SNA CLA /CHAR1 = CTRL C? JMP OS8 /YES. RETURN TO MONITOR. TAD CHAR1 TAD MCTRLZ SZA CLA /CHAR1 = CTRL Z? JMP .+7 /NO. DCA STOPFL /YES, CLEAR STOP FLAG. IAC DCA ERR1FL /SET ERROR FLAG #1. TAD M2 DCA TIMEFL /SET TIME-OUT FLAG = -2 JMP I EXIT TAD XMODE SPA CLA /DATA LINK RECEIVE MODE? JMP I EXIT /NO TAD CHAR1 /YES. TAD MEOT SZA CLA /CHAR1 = "EOT"? JMP .+4 /NO. IAC DCA ERR6FL /YES. SET ERROR FLAG #6. JMP MODSET TAD CHAR1 TAD MNAK SZA CLA /CHAR1 = NAK? JMP .+5 /N0. TAD TP1BUF /YES. SZA CLA /TP1 OUTPUT BUFFER FLAG SET? JMP MODSET /YES. JMP .+6 /NO. TAD CHAR1 TAD MACK SZA CLA /CHAR1 = ACK? JMP I EXIT /NO. DCA TP1BUF /YES, CLEAR TP1 OUTPUT BUFFER FLAG TAD ENDFL2 SNA CLA /END FLAG #2 SET? JMP MODSET /NO. DCA DISKO /YES. CLEAR DISK OUTPUT BUFFER FLAG DCA BLOCKO /CLEAR DISK READ BLOCK COUNT TAD DISKST DCA CHARO /RESET DISK OUTPUT BUFFER POINTER DCA ENDFL2 /CLEAR END FLAG #2 MODSET, CLA CMA DCA XMODE JMP I EXIT OS8, LINC /CHANGE TO LINK MODE ATR /CLEAR RELAY REGISTER PDP /CHANGE TO PDP MODE JMP I MONITR /RETURN TO MONITOR MONITR, 7600 CHAR1, 0 MEOT, -004 MNAK, -025 MACK, -006 M2, -2
/KW-12A CLOCK INTERRUPT SERVICE ROUTINE /200 MSEC CLOCK INTERVAL PAGE 7 CLOCK, CLSA /CLEAR CLOCK STATUS FLAGS CLA TAD XMODE SZA /DATA LINK IN REC'V MODE? JMP RECV /YES TAD TPBUSY /NO. SZA CLA /TP1 BUSY? JMP I EXIT /YES. TAD LOCAL /NO. SNA CLA /TP1 IN LOCAL MODE? JMP SEND /NO. TAD STOPFL /YES. SZA CLA /STOP FLAG SET? JMP LERRS /YES. DCA LOCAL /NO. CLEAR LOCAL MODE FLAG. IAC LINC /CHANGE TO CPU LINK/C MODE. ATR /ACTIVATE DATA LINK(RELAY #5) PDP /CHANGE TO PDP CPU MODE JMP SEND LERRS, TAD ERR6FL TAD ERR5FL TAD ERR4FL TAD ERR3FL TAD ERR2FL TAD ERR1FL SNA CLA /ANY ERROR FLAGS SET? JMP I EXIT /NO. TAD BELL JMP TPSEND /YES, GO PRINT ERROR MESSAGE. SEND, CLA IAC TAD TIMEFL DCA TIMEFL TAD TIMEFL SPA CLA /DATA LINK TIME-OUT? JMP ERRS /NO. TAD XON /YES. GET XON CHAR JMP TPSEND ERRS, TAD ERR6FL DCA STOPFL TAD ERR1FL TAD ERR2FL TAD ERR3FL TAD ERR4FL TAD ERR5FL TAD ERR6FL SNA CLA /ANY ERROR FLAGS SET? JMP LINOUT /NO. LINC /YES. CHANGE TO CPU LINC MODE ATR /TURN OFF DATA LINK (LOCAL OPERATE) PDP /CHANG TO CPU PDP MODE LWRITE, IAC DCA LOCAL /SET TP1 LOCAL MODE FLAG. TAD BELL /GET BELL CHAR JMP TPSEND LINOUT, TAD TP1BUF SNA CLA /TP1 OUTPUT BUFFER FLAG SET? JMP I EXIT /NO. TAD XSTART /YES. GET DATA LINK START CHAR TPSEND, TLS /WRITE CHAR CLA IAC DCA TPBUSY /SET TP1 BUSY FLAG. JMP I EXIT RECV, SPA CLA /STALL 200 MSEC FOR IBM TURN-AROUND? JMP .+5 /YES. ISZ CYCLE /NO, IBM ACKNOWLEDGEMENT TIME-OUT? JMP I EXIT /NO. CLA IAC DCA ERR6FL /YES. SET ERROR FLAG #6. DCA XMODE /SET DATA LINK TO SEND. JMP I EXIT XSTART, 002 BELL, 252
/DISK (IOT 674X) INTERRUPT SERVICE ROUTINE PAGE 10 DISK, DRST /READ DISK STATUS REG CLL RAL SZA CLA /DISK TRANSFER ERROR? JMP DISK3 /YES. TAD BLOCK2 /NO. SZA CLA /2 ND 256 WORD BLOCK TRANSFER? JMP DISK1 /YES. ISZ DKADDR /NO. INCREMENT DISK ADDR POINTER TAD C400 NOP TAD CURRNT DCA CURRNT /SET CORE POINTER TO 2 ND BLOCK ISZ BLOCK2 /SET 2 ND TRANSFER FLAG JMP DISK6 DISK1, TAD CMDMOD SPA CLA /CMD MODE SET TO READ DATA? JMP DISK2 /NO. TAD CHECK /YES SNA CLA /IS PROGRAM WRITE CHECKING? JMP .+3 /NO. ISZ BLOCKI /YES. INCREMENT INPUT RECORD COUNTER JMP DISK4 ISZ DISKO /NO. SET DISK OUTPUT BUFFER FLAG JMP DISK5+1 DISK2, ISZ CHECK CMA TAD DKADDR DCA DKADDR /SUBTRACT 1 FROM DISK ADDR POINTER IAC AND CMDMOD /SAVE BIT(11) OF CMD MODE WORD TAD READCM DCA CMDMOD /CHANGE CMD MODE FOR DATA READ TAD BCHECK DCA CURRNT /SET CORE POINTER TO CHECK BUFFER DCA BLOCK2 /CLEAR 2 ND TRANSFER FLAG TAD M4 DCA ERRCT /RESET ERROR COUNTER JMP DISK6 DISK3, ISZ ERRCT /3 RD TRANSFER ERROR? JMP DISK6 /NO. TRY AGAIN. TAD CMDMOD /YES. SPA CLA /CMD MODE SET FOR READ? JMP DISK4-1 /NO. TAD CHECK SPA CLA /IS PROGRAM WRITE CHECKING? JMP DISK5 /NO. ISZ TRY /YES. 3 RD ATTEMPT TO WRITE CHECK? JMP DISK4+1 /NO. TAD M4 DCA TRY /YES. RESET ATTEMP COUNTER. ISZ ERR3FL /SET ERROR FLAG #3. DISK4, DCA BFLAG /CLEAR KB2 BUFFER READY FLAG DCA CHECK /CLEAR WRITE CHECK FLAG TAD M4 DCA ERRCT /RESET ERROR COUNTER DCA BLOCK2 /CLEAR 2 ND TRANSFER FLAG DCLR /CLEAR DISK STATUS REGISTER DCA DKBUSY /CLEAR DISK BUSY FLAG JMP I EXIT DISK5, ISZ ERR4FL /SET ERROR FLAG #4. ISZ BLOCKO /INCREMENT OUTPUT RECORD COUNTER JMP DISK4+2 DISK6, TAD CURRNT DLCA /LOAD DISK CURRENT ADDR REG TAD CMDMOD DLDC /LOAD DISK CMD REG TAD DKADDR DLAG /LOAD DISK ADDR AND EXECUTE CMD JMP I EXIT BLOCK2, 0 CHECK, 0 BCHECK, 5600 ERRCT, -4 TRY, -4 C400, 400
/SUBPROGRAM TO FILTER AND BUFFER AUTOLAB /DATA FOR SUBSEQUENT DISK STORAGE PAGE 11 FILTER, TAD CHAR TAD MFEED /CHAR = LINE FEED? SZA CLA JMP PT2 /NO. TAD ADDR1 /YES. DCA POINT /SET RELATIVE ADDR POINTER TAD M4 DCA ACOUNT /SET ALPHA COUNT = -4 DCA MFLAG /CLEAR "MINUS" CHAR FLAG TAD DLIMIT TAD DLIMT3 SZA CLA /DELIMIT CHAR = 3? JMP PT1 /NO. TAD DLIMT1 DCA DLIMIT /RESET DELIMIT POINTER TAD EOB DCA I BASE /SET LAST BUFFER CHAR = "EOB" CHAR TAD START DCA BSTART /BUFFER TRANSFER START POINT TAD SHIFT CIA DCA SHIFT TAD SHIFT TAD START DCA START /START INPUT TO OTHER HALF BUFFER TAD START DCA BASE IAC DCA BFLAG /SET BUFFER TRANSFER FLAG PT1, DCA READIN /ALLOW BUFFER INPUT JMP I EXIT PT2, TAD READIN SZA /BUFFER INPUT ALLOWED? JMP I EXIT /NO. ISZ POINT /YES. INCREMENT POINTER TAD CHAR TAD MRETRN SZA CLA /CHAR = RETURN? JMP WRITE1 /NO. TAD I POINT /YES SMA CLA /23 RD LINE CHAR? JMP ERR2 /NO. INPUT FORMAT ERROR. TAD MFLAG /YES. SNA CLA /"MINUS" CHAR FOUND IN INPUT? JMP SPAC /NO. ISZ DLIMIT /YES. TAD I DLIMIT DCA I BASE /SET CHAR 1 = CURRENT DELIMITER TAD BASE / . DCA L0010 / . TAD M17 /LOOP FOR SETTING DCA COUNTR /REMAINING LINE TAD ASCII0 /CHAR TO "ZERO" DCA I L0010 / . ISZ COUNTR / . JMP .-3 / . JMP NEXTLN SPAC, TAD BASE TAD C13 DCA POINT TAD I POINT ISZ POINT TAD I POINT TAD SPACES SNA CLA /CHAR 14 AND 15 = SPACE? JMP PT4 /YES. NEXTLN, TAD M17 CIA TAD BASE DCA BASE /SHIFT BUFFER BASE ADDR PT4, IAC DCA READIN /INHIBIT BUFFER INPUT JMP I EXIT WRITE1, TAD I POINT SMA CLA /23 RD LINE CHAR? JMP .+4 /NO. ERR2, IAC /YES. DCA ERR2FL /SET FORMAT ERROR FLAG. JMP PT4 TAD CHAR /NO. AND MASK5 /ZERO ALL BITS EXCEPT BIT 5 SNA CLA /ALPHA CHAR? JMP MINUS /NO. ISZ ACOUNT /YES. 3 RD ALPHA CHAR? JMP PARITY /NO. JMP PT4 /YES. MINUS, TAD CHAR TAD MMINUS SNA CLA /CHAR = "MINUS"? ISZ MFLAG /YES. INCREMENT MINUS FLAG PARITY, CLA CLL TAD M7 DCA COUNTR DCA BITS TAD CHAR RAR /LOOP TO ROTATE ALL THE CHARACTER SZL /BITS THROUGH THE LINK, CHECKING ISZ BITS /FOR AND COUNTING BINARY ONES, THE ISZ COUNTR /SUM BEING STORED IN "BITS". JMP .-4 / CLA TAD CHAR RTL;RTL;RTL /ROTATE BIT 8 OF CHAR INTO AC(11) TAD BITS CLL RAR SNL CLA /PARITY OKAY? JMP .+3 /YES. TAD QMARK DCA CHAR /SET CHAR = "?" (PARITY WRONG) TAD BASE TAD I POINT DCA COUNTR TAD CHAR DCA I COUNTR /STORE CHAR TO KB2 BUFFER JMP I EXIT ADDR1, RLOCS-1 POINT, 0 ACOUNT, 0 START, 3600 C13, 13 SPACES, -500 MASK5, 100 COUNTR, 0 BITS, 0
/TELEPRINTER I MESSAGE BUFFER PAGE 14 TP1B2, 323 /S 331 /Y 323 /S 324 /T 305 /E 315 /M 240 / 323 /S 324 /T 301 /A 324 /T 325 /U 323 /S 240 / 240 / 215 /CR 212 /LF 012 /LF-EOF
/TELEPRINTER II MESSAGE BUFFER. PAGE 15 TP2B1, 215 /CR 212 /LF 304 /D 301 /A 324 /T 301 /A 240 / 314 /L 311 /I 316 /N 313 /K 240 / 301 /A 303 /C 324 /T 311 /I 326 /V 305 /E 256 /. 215 /CR 212 /LF 012 /LF - EOF TP2B2, 215 /CR 212 /LF 304 /D 301 /A 324 /T 301 /A 240 / 314 /L 311 /I 316 /N 313 /K 240 / 324 /T 305 /E 322 /R 315 /M 311 /I 316 /N 301 /A 324 /T 305 /E 304 /D 256 /. 215 /CR 212 /LF 012 /LF - EOF TP2B3, 215 /CR 212 /LF 304 /D 301 /A 324 /T 301 /A 240 / 314 /L 311 /I 316 /N 313 /K 240 / 302 /B 325 /U 323 /S 331 /Y 256 /. 215 /CR 212 /LF 012 /LF-EOF PAGE 16 ZBLOCK 4200 $



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