/BUFFERED LINC-8 IPB SUPPORT PROGRAM /SUPPORT PROGRAM FOR THE INTER-PROCESSOR BUFFER ON THE LINC-8 / LAST EDIT: 15-SEP-1980 06:00:00 CJL / MAY BE ASSEMBLED WITH '/J' SWITCH SET. / DEFINITIONS: DEVCOD= 6620 /DEVICE CODE BASE OF IPB IAAC= 6171 /READ LINC "A" REGISTER IACA= 6167 /LOAD LINC "A" REGISTER IACB= 6161 /LOAD LINC "B" REGISTER IACS= 6163 /LOAD LINC "S" REGISTER ICON= 6141 /INTERFACE CONTROL NL4000= CLA STL RAR /LOAD AC WITH 4000 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 RRBC= DEVCOD+6 /READ RECEIVE BUFFER, CLEAR RECEIVE FLAG, /SET OPPOSITE SIDE TRANSMIT FLAG RRBS= DEVCOD+4 /READ RECEIVE BUFFER, CLEAR RECEIVE FLAG RSKF= DEVCOD+1 /SKIP ON RECEIVE FLAG RTIE= DEVCOD+2 /SET/CLEAR INTERRUPT ENABLE PER AC[11] SBOOT= 7600 /SYSTEM BOOTSTRAPS HERE SYSIO= 7640 /SYSTEM I/O ENTRY POINT TBLS= DEVCOD+16 /LOAD TRANSMIT BUFFER, CLEAR TRANSMIT FLAG TCLF= DEVCOD+12 /CLEAR TRANSMIT BUFFER, CLEAR TRANSMIT FLAG TLBC= DEVCOD+14 /OR AC, TRANSMIT BUFFER TSKF= DEVCOD+11 /SKIP ON TRANSMIT FLAG PAGE 0 /WHERE TO PUT SOME STUFF ATEMP, 0 /LINC "A" REGISTER IMAGE BTEMP, 1 /LINC "B" REGISTER IMAGE FOO1, .-. /TIME-WASTING FOO2, .-. /TEMPORARIES *20 /GET PAST AUTO-INDEX REGISTERS BLKCNT, .-. /BLOCK COUNT TEMPORARY CHECKSU,.-. /LINE CHECKSUM COUNT, .-. /IPB COUNT INBUF, .-. /INPUT TEMPORARY PTR, .-. /IPB POINTER ZEROSW, .-. /ZERO (REQUEST) SWITCH LINPUT, .-. /LINE INPUT ROUTINE RSKF /FLAG UP? JMP .-1 /NO, WAIT FOR IT RRBC /READ IT IN SNA /ZERO? JMP CHKZER /YES DCA INBUF /NO, SAVE IT TAD ZEROSW /ZERO READ IN BEFORE? SZA CLA /SKIP IF NOT JMP RQUEST /JUMP IF SO TAD INBUF /GET LATEST JMP I LINPUT /RETURN CHKZER, TAD ZEROSW /GET SWITCH SNA CLA /ZERO BEFORE? JMP SETZER /NO, SET SWITCH DCA ZEROSW /YES, CLEAR IT JMP I LINPUT /RETURN WITH ONE ZERO SETZER, STA /SET THE DCA ZEROSW /SWITCH JMP LINPUT+1 /KEEP GOING RQUEST, TAD INBUF /GET LATEST SNA /SKIP IF NOT MULTI-ZERO JMP SETZER /TRY TO FIND SLURRED REQUEST IAC /IS IT 7777? SZA /SKIP IF SO JMP OTHER /TRY OTHER COMBINATIONS DCA ZEROSW /CLEAR SWITCH JMP I (NEWREQ) /PROCESS NEW REQUEST TRANS, .-. /LOW LEVEL XMIT ROUTINE TBLS /SEND CHARACTER TSTOUT, TSKF /FLAG UP? JMP TSTIN /NO, WAIT FOR IT JMP I TRANS /RETURN TSTIN, RSKF /INPUT FLAG UP? JMP TSTOUT /NO, TRY OUTPUT CLA /CLEAN UP JMS LINPUT /GET A REQUEST (WE HOPE) SNA /SKIP IF BAD JMP SETZER /COULD BE REQUEST OTHER, /TEMPORARILY BARF, HLT /BARF JMP BARF /MAKE SURE RECV, .-. /RECEIVE ROUTINE JMS SETUP /SETUP COUNT, ETC. RECLUP, JMS LINPUT /GET A WORD DCA I PTR /STORE IT TAD I PTR /GET IT BACK TAD CHECKSUM /ADD ON CHECKSUM DCA CHECKSUM /UPDATE IT ISZ PTR /BUMP TO NEXT ISZ COUNT /DONE ALL YET? JMP RECLUP /NO, GO BACK JMP I RECV /RETURN XMIT, .-. /TRANSMIT ROUTINE JMS SETUP /SETUP COUNT, ETC. XMTLUP, TAD I PTR /GET A WORD JMS TRANS /SEND IT TAD CHECKSUM /ADD ON CHECKSUM DCA CHECKSUM /UPDATE IT ISZ PTR /BUMP TO NEXT ISZ COUNT /DONE ALL YET? JMP XMTLUP /NO, GO BACK JMP I XMIT /RETURN SETUP, .-. /SETUP ROUTINE AND (3700) /JUST PAGE BITS CLL RAL /TURN INTO COUNT CIA /NEGATE FOR WORD COUNT DCA COUNT /SAVE IT TAD (BUFF) /SETUP DCA PTR /POINTER JMP I SETUP /RETURN SHIFT, .-. /SHIFT THE LIGHTS ROUTINE TAD BTEMP /GET LINC "B" REGISTER IMAGE RAR /MOVE OVER CLA /THROW IT AWAY TAD ATEMP /GET LINC "A" REGISTER IMAGE RAL /SHIFT IT IACA /LOAD IT DCA ATEMP /SAVE IT FOR NEXT TIME TAD BTEMP /GET LINC "B" REGISTER AGAIN RAR /SHIFT IT IACB /LOAD IT DCA BTEMP /SAVE IT FOR NEXT TIME CLL /CLEAR LINK NOW ISZ FOO1 /WASTE JMP .-1 /SOME TIME ISZ FOO2 /WASTED ENOUGH? JMP .-3 /NO, CONTINUE WASTING AWAY NL7775 /YES, RESET DCA FOO2 /FOR NEXT TIME JMP I SHIFT /RETURN PAGE START, TCLF /CLEAR OUTPUT FLAG RRBS /AND INPUT FLAG CLEAR, NL7775 /SETUP DCA FOO2 /COUNTER DCA ZEROSW /CLEAR ZERO SWITCH ICON /STOP THE TAPES IDLE, JMS SHIFT /GO SHIFT THE LIGHTS RSKF /FLAG UP? JMP IDLE /NO, FORGET IT JMS LINPUT /GET REQUEST SZA CLA /SKIP IF A SLURRED REQUEST JMP IDLE /NOT A REQUEST JMP SETZER /TRY TO MAKE A REQUEST NEWREQ, JMS LINPUT /GET FUNCTION WORD AND (7707) /NO FIELD BITS DCA FUNCT /SAVE IT JMS LINPUT /GET BLOCK NUMBER IACS /LET'S SEE IT DCA BLOCK /SAVE IT DCA CHECKSUM /CLEAR CHECKSUM TAD FUNCT /GET FUNCTION AND (3700) /JUST PAGE BITS SNA /40 PAGES? NL4000 /YES, FIX IT TAD (-BFS^100) /SUBTRACT WHAT FITS DCA BLKCNT /SAVE AS BLOCK COUNT REMAINDER TAD FUNCT /GET FUNCTION AGAIN SPA CLA /READING? JMP WRITE /NO, GO DO WRITE FUNCTION TAD FUNCT /GET FUNCTION AND (4007) /JUST UNIT AND READ/WRITE BITS TAD (BFS^100) /MAKE INTO SHORTER CALL DCA FUN1 /JUST IN CASE TAD BLOCK /LIKEWISE DCA BLK1 /FOR BLOCK NUMBER TAD BLKCNT /GET BLOCK COUNT SMA SZA CLA /SKIP IF IT FITS JMP RDTWO /JUMP IF NOT RD2BAK, JMS I (SYSIO) /CALL I/O ROUTINES BUFF /CORE FUNCT, .-. /FUNCTION WORD BLOCK, .-. /BLOCK NUMBER TAD FUNCT /GET FUNCTION FOR AMOUNT JMS XMIT /TRANSMIT TO OTHER SIDE TAD CHECKSUM /GET CHECKSUM CIA /INVERT IT JMS TRANS /SEND IT JMP CLEAR /WE'RE DONE RDTWO, JMS I (SYSIO) /CALL I/O ROUTINES BUFF /CORE FUN1, .-. /FUNCTION BLK1, .-. /BLOCK NUMBER TAD FUN1 /GET PAGE COUNT JMS XMIT /SEND TO OTHER SIDE TAD FUNCT /GET FUNCTION AND (4007) /JUST UNIT AND READ/WRITE BITS TAD BLKCNT /ADD ON REMAINDER DCA FUNCT /SAVE IT TAD BLOCK /GET BLOCK NUMBER TAD (BFS) /UPDATE DCA BLOCK /SAVE IT JMP RD2BAK /FINISH IT WRITE, TAD BLKCNT /GET BLOCK COUNT SMA SZA CLA /SKIP IF SO JMP WRTWO /JUMP IF NOT TAD FUNCT /GET FUNCTION DCA FUN2 /SAVE IT WR2BAK, TAD BLOCK /GET BLOCK NUMBER DCA BLK2 /SAVE IT TAD FUN2 /GET PAGE COUNT JMS RECV /GET WORDS IN JMS I (SYSIO) /CALL I/O BUFF /CORE FUN2, .-. /FUNCTION BLK2, .-. /BLOCK NUMBER JMS LINPUT /GET CHECKSUM TAD CHECKSUM /COMPARE TO OURS SZA /SKIP IF OK JMP BARF /BARF JMP CLEAR /WE'RE DONE WRTWO, TAD FUNCT /GET FUNCTION AND (4007) /JUST UNIT AND READ/WRITE BITS TAD (BFS^100) /ADD ON MAXIMUM FIT DCA FUN3 /SAVE IT TAD BLOCK /GET BLOCK NUMBER DCA BLK3 /SAVE IT TAD FUN3 /GET PAGE COUNT JMS RECV /GET THE WORDS JMS I (SYSIO) /CALL I/O ROUTINES BUFF /CORE FUN3, .-. /FUNCTION BLK3, .-. /BLOCK NUMBER TAD FUNCT /GET FUNCTION AGAIN AND (4007) /JUST UNIT AND READ/WRITE BITS TAD BLKCNT /ADD ON REMAINDER DCA FUN2 /SAVE IT TAD (BFS) /GET UPDATE VALUE JMP WR2BAK /FINISH IT PAGE BFS= SBOOT-.%200 /AVAILABLE BUFFER SPACE IN 4K BUFF= . /BUFFER STARTS HERE $ /THAT'S ALL FOLK!