File CONFIG.PA (PAL assembler source file)

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

/	PS/8 SYSTEM CONFIGURATOR	CONFIG.002

/28 OCTOBER 1970		R.L./E.F.
/COPYRIGHT 1970			DIGITAL EQUIPMENT CORP.
/				MAYNARD,MASS.

/ABSTRACT---
/CONFIG IS THE SYSTEM CONFIGURATOR FOR PS/8.CONFIG
/CONTAINS CONDITIONAL ASSEMBLY PARAMETERS WHICH DEFINE
/MONITOR TABLES AND DEVICE HANDLERS.ANY CHANGES TO DEVICE
/HANDLERS MUST BE MADE IN CONFIG.

/PLEASE NOTE: THIS IS A COMPOSITE LISTING, FOR DOCUMENTATION
/PURPOSES ONLY. IT WAS NOT AND COULD NOT BE ASSEMBLED AS IT
/APPEARS HERE.

/ PS/8 SYSTEM CONFIGURATOR /I) DETAILS OF CONDITIONAL ASSEMBLY / CONFIG USES PARAMETERS WHICH MAY BE SPECIFIED AT /ASSEMBLY TIME.THESE PARAMETERS ARE USED IN CONSTRUCTING /CORE RESIDENT TABLES,AND ALSO IN DETERMINING WHICH DEVICES /ARE IN THE SYSTEM.SPECIFICALLY,WHICH DEVICE WILL BE THE /SYSTEM DEVICE. /PARAMETERS: /A) DIRECT / IFNDEF DIRECT <DIRECT=0> /THIS SWITCH CONTROLS THE WRITING OF THE DIRECTORY AND ABSLDR /FILES ON THE SPECIFIED SYSTEM DEVICE. IF DIRECT IS DEFINED /NON-ZERO, THOSE RECORDS CONTAINING THE DIRECTORY /AND THE ABSOLUTE LOADER ARE NOT REWRITTEN WHEN A NEW SYSTEM /IS GENERATED. A NEW SYSTEM CAN BE BUILT WITHOUT DESTROYING /PREVIOUSLY LOADED FILES. /B) SYSTEM DEVICE PARAMETERS /DEFINING ONE OF THESE AT ASSEMBLY TIME SPECIFIES WHICH DEVICE /IS TO BE USED AS THE SYSTEM DEVICE. INTERNAL TABLES ARE ASSEMBLED /TO REFLECT THIS DEVICE. / DECTAPE / IFNDEF DECTAPE <DECTAPE=0> / DEFINING DECTAPE WILL DESIGNATE DTA0 AS SYS: / NOTE:IF DECTAPE=1, DEVICE DSK: WILL BE DTA0: / IF DECTAPE =2, DEVICE DSK: WILL BE DTA1: / RF08 / IFNDEF RF08 <RF08=0> / DEFINING RF08=N, WHERE N IS AN INTEGER FROM 1 TO 4 / WILL CAUSE AN N DISK RF08 TO BE THE SYSTEM DEVICE. / LINCSYS / IFNDEF LINCSYS <LINCSYS=0> / FOR PDP-12 USERS. IF LINCSYS IS SPECIFIED, LINCTAPE UNIT / 0 WILL BE THE SYSTEM DEVICE. / NOTE:IF LINCSYS=1, DEVICE DSK: IS TAPE UNIT 0(DTA0:) / IF LINCSYS=2, DEVICE DSK: IS TAPE UNIT 1 (DTA1:) / RK08 / IFNDEF RK08 <RK08=0> / DEFINING RK08 WILL SPECIFY A SINGLE RK8 UNIT AS / THE SYSTEM DEVICE. / DF32 / IFNDEF DF32 <DF32=0> / DEFINING DF32=N, WHERE N IS AN INTEGER FROM 1 TO 4 / WILL CAUSE AN ASSEMBLY FOR AN N DF32 DISK SYSTEM. /IF NO SYSTEM DEVICE PARAMETERS ARE SPECIFIED, THE ASSEMBLY /RESULTING WILL BE A ONE DECTAPE SYSTEM;I.E. THE SAME AS /AN ASSEMBLY IN WHICH DECTAPE WAS SET=1.
/C) DEVICE HANDLER PARAMETERS /CERTAIN I/O HANDLERS ARE ALSO SPECIFIED BY ASSEMBLY TIME /SWITCHES. / LINE PRINTER /PS/8 SUPPLIES TWO LINE PRINTER HANDLERS: ONE FOR THE /OLDER TYPE---- AND ONE FOR THE LP08. / IFNDEF LP08 <LP08=1> /THE DEFAULT LINE PRINTER HANDLER WILL BE THE LP08. / LINCTAPE /FOR PDP-12 USERS, PS/8 CAN RUN WITH LINCTAPE INSTEAD OF /DECTAPE, BOTH AS I/O HANDLER AND AS SYSTEM DEVICE. /NOTE:CONFIG'S TABLES ARE SET UP SUCH THAT LINCTAPES /ARE STILL REFERRED TO AS DTAN: WHEN REFERENCED. TO CHANGE /THIS THE DEVICE NAME TABLE WILL HAVE TO BE ALTERED. SEE /THAT TABLE FOR THE PROPER FORMAT. /PLEASE NOTE: SPECIFYING MORE THAN ONE SYSTEM DEVICE /PARAMETER OR SPECIFYING BOTH DECTAPE AND LINCTAPE WILL /CAUSE ASSEMBLY ERRORS. / HIGH SPEED PAPER TAPE /IF THE USER DOES NOT HAVE HIGH SPEED I/O, A PARAMETER /IS PROVIDED WHICH USES THE TTY AS A SIMULATED HIGH SPEED /I/O UNIT. REFERENCES TO PTP AND PTR WILL USE THE /TTY IN THE SAME WAY THAT PTP AND PTR WOULD BE USED. / IFNDEF NOHSPT <NOHSPT=0> /THE DEFAULT ASSEMBLY ASSUMES THE USER HAS HIGH SPEED I/O. /II) REFERENCES TO THE MAIN PS/8 ASSEMBLY /CERTAIN LOCATIONS FROM THE MAIN ASSEMBLY OF PS/8 MUST BE /USED IN CONFIG. IF THESE LOCATIONS CHANGE FROM THEIR CURRENT /VALUE, THESE CHANGES MUST BE MADE IN CONFIG, OR UNPREDICTABLE /RESULTS WILL OCCUR. / MFREE=FIRST RECORD OF FILE STORAGE ON SYS: / IT IS CURRENTLY SET TO 70 (OCTAL) / SDNAME=SYSTEM DEVICE NAME TABLE / CURRENTLY AT 564 / SET AASDNAME=SDNAME IN CONFIG / SDVHND=SYSTEM DEVICE HANDLER TABLE / CURRENTLY SET TO 767 / SET AASDVHND=SDVHND /LOCATION 20 IN FIELD 0 IS THE DIRECT PARAMETER. CONFIG /EXPECTS LOCATION 20 TO HAVE THE TAG RBFLAG. RBFLAG SHOULD /BE AT LOCATION 20. /CONFIG EXPECTS THE INITIAL PS/8 DIRECTORY (ABSLDR.SV) /TO TERMINATE AT LOCATION 1413 IN FIELD 1. THIS LOCATION IS /OVERLAID WITH THE NUMBER OF BLOCKS REMAINING ON THE /SPECIFIED SYSTEM DEVICE. IF THE INITIAL DIRECTORY IS /ALTERED, CONFIG SHOULD BE ALTERED TO CORRESPOND WITH THE /NEW DIRECTORY.
/III) TABLES IN PS/8 SET UP BY CONFIG /CERTAIN MONITOR TABLES ARE ASSEMBLED WITH CONFIG. /CONDITIONAL PARAMETERS ARE USED TO CORRECTLY ASSEMBLE THESE /TABLES. / SDNAME /SDNAME SPECIFIES THE STANDARD NAMES FOR THE PS/8 DEVICES. / SDVHND /SDVHND CONTAINS INFORMATION ABOUT THE HANDLERS, SUCH AS /WHERE THEY WILL BE FOUND ON THE SYSTEM DEVICE /AND THE RELATIVE LOCATION OF THEIR ENTRY POINTS. SEE THE /TABLE FOR DETAILED FORMAT. /NOTE: THE ENTRIES IN THESE TABLES MUST BE KEPT IN THE /SAME RELATIVE POSITIONS. /SDVHND USES THE ADDRESSES IN CONFIG WHICH ARE THE ACTUAL /ASSEMBLY POINTS OF THE HANDLERS. IF THE ASSEMBLY POINTS /SHOULD CHANGE, THIS CHANGE MUST BE REFLECTED IN SDVHND. /IV) THE SUPPLIED DEVICE HANDLERS. /CONFIG CONTAINS THE DEVICE HANDLERS WHICH ARE CURRENTLY /SUPPORTED. SEE THE INDIVIDUAL HANDLERS FOR RESTRICTIONS AND /DETAILS. /V) SYSTEM DEVICE HANDLER MAP /CONFIG WRITES DEVICE HANDLER RECORDS ONTO THE SYSTEM /DEVICE. THE FOLLOWING IS THE HANDLER "MAP": / RECORD NO. HANDLER RESIDENT / / 20,21 CDR,LPT (CARD READER,LINE PRINTER) / 16 PTR,PTP (HI SPEED READER/PUNCH) / 17 TTY (TELETYPE) / 22 DTAN: (8 DECTAPE HANDLERS) /ANY DEVICE HANDLERS SUPPLIED BY DEC IN THE FUTURE WILL /BE PLACED IN FIELD 0 OF CONFIG. FOR THIS REASON WE SUGGEST /THAT ANY USER WRITTEN HANDLER BE EDITED INTO FIELD 1. /THE AVAILABLE LOCATIONS IN FIELD 1 ARE: / / 4000 THRU 7500
/DEVICE DEPENDENT CODE FOR PS/8 MONITOR /THESE ARE CONDITIONAL PARAMETERS. SEE INTRODUCTORY COMMENTS. IFNDEF DIRECT <DIRECT=0> /"DON'T REWRITE DIRECTORY" FLAG IFNDEF NOHSPT <NOHSPT=0> /"NO HIGH-SPEED PAPER TAPE" FLAG IFNDEF RF08 <RF08=0> IFNDEF LP08 <LP08=1> IFNDEF LINCTAPE <LINCTAPE=0> IFNDEF LINCSYS <LINCSYS=0> IFNDEF RK8 <RK8=0> IFNDEF DF32 <DF32=0> IFNDEF DECTAPE < IFZERO DF32+RF08+RK8+LINCSYS <DECTAPE=1> IFNZRO DF32+RF08+RK8+LINCSYS <DECTAPE=0> > SBLOCK=7776 /RANDOM DEFINITIONS FROM MAIN ASSEMBLY MFREE=70 /FIRST FREE BLOCK ON THE SYSTEMS DEVICE /(FIELD 1) SOFSET=7747 /NOT REALLY NECESSARY! FIELD 1 /LAST INITIAL DIRECTORY LOCATION. CHANGE IF NECESSARY. /THESE CONDITIONALS PUT IN DIRECTORY LENGTHS. *1413 IFNZRO DECTAPE+LINCSYS <MFREE+5-1341 /IF DECTAPE> IFNZRO RF08 <6000^RF08+MFREE+6 /IF RF08> IFNZRO RK8 <MFREE+5-6260 /IF RK8> IFNZRO DF32 <7600^DF32+MFREE+6 /IF DF32> AASDNAME=564 /DEPENDS ON PS8 ASSEMBLY *AASDNAME /SYSTEM DEVICE NAME TABLE /THE ENTRIES ARE THE TWO WORD SUM OF THE SIXBIT FOR THE SYSTEM /DEVICES, WITH THE HIGH ORDER BIT FORCED ON /CHANGES IN SDNAME MUST BE ACCOMPANIED BY CHANGES IN /SDVHND. KEEP CORRESPONDENCE ONE TO ONE. SDNAME, 4631 /SYS 5723 /DSK 5524 /TTY 4020 /LPT 4604 /DTA0 4605 /DTA1 4606 /DTA2 4607 /DTA3 4610 /DTA4 4611 /DTA5 4612 /DTA6 4613 /DTA7 4024 /PTP 4224 /PTR 6504 /CDR AASDVHND=766 /DEPENDS ON PS8 ASSEMBLY *AASDVHND /SYSTEM HANDLER TABLE /CONTENTS: /BIT 0 - ON IF THE HANDLER IS A TWO-PAGE HANDLER /BITS 1-4 - OFFSET FROM "DVHORG-1" OF RECORD CONTAINING HANDLER /BITS 5-11 - ENTRY POINT OF HANDLER RELATIVE TO LOADING ADDRESS /EACH DEVICE HANDLER HAS AN ENTRY IN SDVHND. THE EQUATION /USED IN EACH ENTRY IS: OFFSET *200+ENTRY POINT-ASSEMBLY POINT /THE OFFSET IS BITS 1-4. /FOR A TWO PAGE HANDLER, ADD 4000. SDVHND, 0 /SYSTEM HANDLER HAD BETTER BE RESIDENT /OR PAGE 17600 IS PROBABLY BLOWN IFZERO LINCSYS+DECTAPE-2 <5^200+DTA1-7200 /FOR MULTIPLE DECTAPE SYSTEMS,DTA1=DSK> IFNZRO LINCSYS+DECTAPE-2 <0 /OTHERS,DSK=SYS> 2^200+TTY-7000 4^200+LPT-6200 5^200+DTA0-7200 5^200+DTA1-7200 5^200+DTA2-7200 5^200+DTA3-7200 5^200+DTA4-7200 5^200+DTA5-7200 5^200+DTA6-7200 5^200+DTA7-7200 1^200+PTP-6400 1^200+PTR-6400 3^200+CDR-5600+4000 /TWO PAGE HANDLER IFNZRO DECTAPE <SYSD=4160> IFNZRO LINCSYS <SYSD=4170> IFNZRO RF08 <SYSD=RF08^10+4050> IFNZRO RK8 <SYSD=4050> IFNZRO DF32 <SYSD=DF32^10+4110> DTADCB=LINCTAPE^10+4160 /4160 OR 4170 FIELD 0
/NOTE:RBFLAG MUST BE AT LOC. 20 OF MAIN ASSEMBLY!!!! IFNZRO DIRECT <*20; 1 /DON'T REWRITE DIRECTORY OR ABSLDR> /DEVICE CONTROL BLOCK TABLE - ONE WORD PER DEVICE /BIT 0 - 1 IF FILE STRUCTURED DEVICE /BIT 1 - 1 IF READ ONLY DEVICE /BIT 2 - 1 IF WRITE ONLY DEVICE /BITS 3-8 - THE DEVICE TYPE /0 TELETYPE /1 HIGH SPEED READER /2 HIGH SPEED PUNCH /3 CARD READER (CR8/I) /4 LINE PRINTER /5 RK8 DISK /6 RF08 DISK(ONE PLATTER) /7 RF08 DISK(TWO PLATTERS) /10 RF08 DISK(THREE PLATTERS) /11 RF08 DISK(FOUR PLATTERS) /12 DF32 DISK(ONE PLATTER) /13 DF32 DISK(TWO PLATTERS) /14 DF32 DISK(THREE PLATTERS) /15 DF32 DISK(FOUR PLATTERS) /16 DECTAPE /17 LINCTAPE(PDP12 ONLY - FORMATTED 128 WDS/BLOCK) /20 IBM-COMPATIBLE MAGNETIC TAPE(TYPE 57A) /21-77 TO BE ASSIGNED /BITS 9-11 - FLAG FOR WHETHER AN OUTPUT FILE IS CURRENTLY OPEN *7560 DCB, SYSD;SYSD;0;1040;DTADCB;DTADCB;DTADCB;DTADCB DTADCB;DTADCB;DTADCB;DTADCB;1020;2010;2030 IFZERO DECTAPE+LINCSYS-2 <*7450;0 /USE TAPE 1 AS DSK> IFNZRO DECTAPE+LINCSYS <*7453;7607 /DTA0 IS RESIDENT> /THE MAJOR FUNCTION OF CONFIG FOLLOWS: WRITE THE DEVICE /HANDLER RECORDS.NOTE THAT LOC. 0 CONTAINS 7607, OR THE SYSTEM /DEVICE HANDLER ENTRY POINT. /SYSTEM GENERATION STARTS AT LOC. 4000 AND CONTINUES THROUGH /THIS CODE. *4200 WRDEVH, 0 /SUBR TO WRITE OUT DEVICE HANDLER RECORDS WRITE=JMS I 0 DVHORG=16 WRITE; 4301; 5600;DVHORG+2; JMP BERR /CDR AND LPT HANDLERS WRITE; 4100; 7000;DVHORG+1; JMP BERR /TTY HANDLER WRITE; 4100; 7200;DVHORG+4; JMP BERR /DTA HANDLERS WRITE; 4100; 6400;DVHORG+0; JMP BERR /PTR & PTP HANDLERS ISZ WRDEVH BERR, JMP I WRDEVH
*5600 /CARD READER HANDLER FOR PS8 /MARK BRAMHALL /OCT 8, 1970 /DEFINITIONS OF CARD READER IOTS RCSF=6631 RCRA=6632 RCSP=6671 RCSE=6672 CDR, 0 /ENTRY POINT RELATIVE ZERO CDR770, 7700 /"SMA CLA" CLEARS THE AC CDRTMP, 0 /LESS THAN 400 - PROTECTS THE "SMA CLA" JMP CDRSET /INITIALIZATION - BECOMES "RDF" TAD CDRCIF /FORM "CIF CDF N" TO CALLING FIELDS DCA CDRXIT /SAVE CALLING FIELDS TAD CDRCCF-1 DCA CDRXIT-1 /RESTORE THE "ISZ CDR" TAD I CDR /GET FUNCTION WORD AND CDR070 /GET BUFFER FIELD BITS TAD CDRCCF /MAKE A "CDF N" DCA CDRTM2 /SAVE IT TEMPORARILY TAD I CDR /GET FUNCTION WORD AGAIN ISZ CDR SPA /IS IT A WRITE FUNCTION? JMP CDRERR /YES - HARD ERROR AND CDR770 /GET COUNT BITS CIA DCA CDRWC /SAVE WORD COUNT (DIVIDED BY 2) TAD I CDR /GET BUFFER ADDRESS DCA CDRCA /AND SAVE IT ISZ CDR /THE BLOCK NUMBER IS IGNORED CDRCCF, CDF /WE ARE IN FIELD 0 DCA I CDRIN2 /RESET ^Z FLAG TO ZERO TAD CDRTM2 DCA I CDRIN3 /SET THE BUFFER FIELD "CDF N" CDRLP, JMS I CDRIN4 /GET A CHARACTER DCA I CDRCA /BUFFER FIELD IS RETURNED CORRECTLY JMS I CDRIN4 /GET NEXT CHARACTER DCA CDRTMP /AND SAVE IT JMS I CDRIN4 /GET NEXT CHARACTER RTL RTL /GET THE FIRST FOUR BITS OF IT DCA CDRTM2 /SAVE THE REST FOR LATER TAD CDRTM2 AND CDR740 /ONLY 4 BITS TAD I CDRCA DCA I CDRCA /ADD THOSE BITS TO 1ST CHARACTER ISZ CDRCA /BUMP POINTER TO BUFFER CDR740, 7400 /PROTECT THE ISZ AGAINST SKIPS TAD CDRTM2 RTL RTL /NOW GET LOW ORDER 4 BITS AND CDR7400 /AND ONLY 4 BITS TAD CDRTMP /ADD IN THE 2ND CHARACTER DCA I CDRCA /AND STORE THE WORD ISZ CDRCA /BUMP POINTER AGAIN CDR070, 70 /PROTECT THE ISZ ISZ CDRWC /DONE? JMP CDRLP /NO - LOOP ISZ CDR ISZ CDR /IF ^Z THIS IS "CLL CLA IAC" CDRXIT, HLT /RESTORE CALLING FIELDS JMP I CDR /EXIT CDRERR, CLL CLA CML RAR /HARD ERROR JMP CDRXIT-2 CDRCA, 0 /BUFFER POINTER CDRWC, 0 /WORD COUNT DIVIDED BY 2 CDRTM2, 0 /SPLIT WORD TEMPORARY CDRCIF, CIF CDF 0 /TO FORM EXIT WORD CDRIN2, CDRJMP-CDRLOC /CORRECTED AT INITIALIZATION TIME CDRIN3, CDRCDF-CDRLOC CDRIN4, CDRGCH-CDRLOC CDRTBL, 0021;2223;2425;2627;3031;3203;4007;3502 2017;6364;6566;6770;7172;7514;0577;3637 1552;5354;5556;5760;6162;0104;1211;3374 0641;4243;4445;4647;5051;7316;3410;1376 /DO NOT INSERT ANYTHING BETWEEN "CDRTBL" AND "CDRBUF"!! CDRBUF=. /CARD BUFFER CDRSET, RDF /INITIALIZATION CODE TAD CDRCCF DCA CDRSE1 /SAVE CALLING FIELDS CDF /WE ARE IN FIELD 0 JMS . /FIND OUT OUR LOCATION CDRLOC, TAD CDRSE2 /ADDRESS TO MODIFY TAD CDRLOC-1 /CORRECT IT DCA CDRSE3 /SAVE IT TAD I CDRSE3 /GET DATA TO MODIFY TAD CDRLOC-1 /CORRECT IT DCA I CDRSE3 /AND RESTORE IT ISZ CDRLOC /NEXT ADDRESS ISZ CDRSE4 /MORE? JMP CDRLOC /YES - LOOP TAD CDRSET DCA CDR+3 /SET THE "RDF" CDRSE1, HLT /RESTORE CALLING FIELDS JMP CDR+3 /AND BACK TO NORMAL CDRSE3, 0 /MODIFY POINTER CDRSE4, -6 /SIX LOCATIONS TO MODIFY CDRSE2, CDRIN2-CDRLOC /LOCATIONS TO MODIFY CDRIN3-CDRLOC CDRIN4-CDRLOC CDRIN5-CDRLOC CDRABF-CDRLOC CDRTAD-CDRLOC
*CDRBUF+50 /END OF THE BUFFER CDRGCH, 0 /GET A CHARACTER ROUTINE CDF /WE ARE IN FIELD 0 CDRJMP, 0 /THIS IS "JMP CDRCDF" AFTER A ^Z ISZ CDRCNT /MORE CHARACTERS IN THE INTERNAL BUFFER? JMP CDRGET /YES - GET ONE CDRGE4, ISZ CDRCT2 /GIVE A 215, 212 FOR EVERY CARD JMP CDRCLF /215, 212 ROUTINE CLL CLA CMA RTL DCA CDRCT2 /RESET COUNT TO -3 TAD CDRABF DCA CDRPT /SET POINTER TO INTERNAL BUFFER CDRGE0, KSF /KEYBORAD FLAG UP? JMP CDRGE7 /NO - TRY TO READ A CARD KRS /READ STATIC FROM KEYBOARD AND CDR177 /IGNORE PARITY TAD CDRM03 /IS IT ^C? SNA JMP I CDR760 /YES - TO MONITOR VIA 07600 TAD CDRM27 /IS IT ^Z? SZA CLA JMP CDRGE7 /NO - GET A CARD KCC /KILL FLAG CDRGEZ, CLA CMA DCA CDRCNT /RESET COUNTS TO SKIP CLA CMA DCA CDRCT2 TAD CDRMOD DCA CDRJMP /SET TO GIVE 0'S TAD CDROPR DCA I CDRIN5 /AND A SOFT ERROR TAD CDR232 /^Z CDRCDF, HLT /TO BUFFER FIELD JMP I CDRGCH /EXIT CDRGE7, RCSE /SELECT A CARD JMP CDRGE0 /NO GO - TRY AGAIN DCA CDRSW /SET PACKING SWITCH CDRGE1, RCSP /CARD DONE? JMP CDRGE2 /NO - TRY FOR DATA READY CDRGE3, TAD I CDRPT /GET LAST TWO CHARACTERS SZA /BOTH SPACES? JMP CDRGE5 /NO CLA CMA TAD CDRPT DCA CDRPT /BACK UP POINTER ONE ISZ CDRCNT ISZ CDRCNT /AND TAKE COUNT DOWN BY 2 JMP CDRGE3 /TEST AGAIN OR... JMP CDRGE4 /IF COUNT IS ZERO THE A BLANK CARD CDRGE5, AND CDR077 /IS RIGHT HAND CHARACTER A SPACE? SNA CLA ISZ CDRCNT /YES A SPACE - REDUCE COUNT TAD I CDRPT /GET LAST NON-SPACE TAD CDRM77 /IS IT "_ "? SNA CLA CDROPR, CLL CLA IAC /YES - 1 INTO AC TAD CDRCNT /IS COUNT ALSO 1? SNA CLA JMP CDRGEZ /YES - MUST BE END OF FILE CDRGE6, TAD CDR077 DCA CDRSW /SET OFFSET FROM "CDRTBL" CDRGET, ISZ CDRSW /BUMP OFFSET TAD CDRSW /OFFSET INTO AC JMS CDRGE8 /GET A CHARACTER TAD CDR240 /MAKE IT ASCII CDRMOD, JMP CDRCDF CDRGE8, 0 /GET FROM BUFFER ROUTINE CLL RAR /DIVIDE BY 2 - AND INTO LINK IS INDICATOR TAD CDRTAD /ADDRESS OF "CDRTBL" DCA CDRTM3 /SET POINTER TAD I CDRTM3 /GET WORD SZL /SHIFT? JMP .+4 /NO RTR /YES RTR RTR AND CDR077 /GET 6 BITS JMP I CDRGE8 CDRGE2, RCSF /DATA READY? JMP CDRGE1 /NO - TRY FOR END OF CARD CLA CMA TAD CDRCNT DCA CDRCNT /COUNT THE CHARACTERS RCRA /READ ALPHA JMS CDRGE8 /GET TABLE ENTRY ISZ CDRSW /WHICH SIDE? JMP CDRGE9 /LEFT SIDE TAD I CDRPT DCA I CDRPT /FORM RIGHT SIDE JMP CDRGE1 /CONTINUE CDRGE9, CLL RTL /SHIFT LEFT RTL RTL ISZ CDRPT /BUMP POINTER DCA I CDRPT /STORE LEFT SIDE CLA CMA JMP CDRGE1-1 /CONTINUE - SET SWITCH CDRCLF, CLA CMA DCA CDRCNT /SET MAIN COUNT TO SKIP TAD CDRCT2 CLL CMA RTL /ALL THIS DOES IS... TAD CDRCT2 /MAKE A 2 OR -1 TAD CDR213 /SO THIS MAKES A 215 OR 212 JMP CDRCDF CDR760, 7600 /MONITOR ADDRESS CDRM03, -3 /^C TEST CDRM27, -27 /-27-3=-32 ^Z TEST CDRCNT, -1 /MAIN COUNT CDRCT2, -1 /215, 212 COUNT CDRPT, 0 /BUFFER POINTER CDRSW, 0 /SWITCH CDRTM3, 0 /TEMPORARY CDR240, 240 /ASCII SPACE CDR213, 213 /215, 212 CORRECTION FACTOR CDR232, 232 /ASCII ^Z CDR177, 177 /PARITY MASK CDR077, 77 /SIX BIT MASK CDRM77, -7700 /-"_ " CDRABF, CDRBUF-1-CDRLOC /MODIFIED LOCATIONS CDRTAD, CDRTBL-CDRLOC CDRIN5, CDRXIT-1-CDRLOC
IFZERO LP08 < *6200 /LINE PRINTER HANDLER FOR "OLD STYLE" LINE PRINTER /RECOGNIZES TAB,LINE FEED,VERTICAL TAB AND FORM FEED /IGNORES CARRIAGE RETURNS, TREATS ^N AS "CARRIAGE RETURN / WITHOUT LINE FEED" CONTROL CHARACTER. LSE=6651 LCF=6652 LLB=6654 LSD=6661 LCB=6662 LPR=6664 LPT, 0 LP7700, 7700 LPT11, 11 /FALLS THROUGH HARMLESSLY, CLEARING THE AC RDF TAD LPTCIF DCA LPTXIT TAD I LPT AND LPT70 TAD LP6201 DCA LPTCDF CLA CLL CML RAR TAD I LPT /LINK IS NOW 1 IF COMMAND WAS A "WRITE" AND LP7700 CIA DCA LPTWC /LPTWC=WORD COUNT/2 ISZ LPT TAD I LPT DCA LPTCA ISZ LPT TAD I LPT ISZ LPT SNL JMP LPTERR SZA CLA JMP LPTCDF LCB JMS LPWAIT TAD LPT214 JMS LPTPCH /FORM FEED, INITIALIZES COUNT LPTCDF, HLT LPTLP, TAD I LPTCA JMS LPTPCH TAD I LPTCA AND LP7400 DCA LPTTMP ISZ LPTCA LP7400, 7400 TAD I LPTCA JMS LPTPCH TAD I LPTCA AND LP7400 CLL RTR RTR TAD LPTTMP RTR RTR JMS LPTPCH ISZ LPTCA LPT7, 7 ISZ LPTWC JMP LPTLP LPTRTN, ISZ LPT LPTXIT, HLT JMP I LPT LPTWC, 0 LPTCA, 0 LPTPCH, 0 AND LPT177 SZA TAD LPM140 SMA JMP LPFLSH TAD LPT106 SNA JMP LPTCTZ TAD LPT13 CLL TAD LPT6 SZL SNA JMP LPTCTL TAD LPT11 LLB JMP LPTKSF LPWAIT, -1 LSD JMP .-1 LCF ISZ LPLPTR JMP I LPWAIT CLA IAC LPTCTL, SNA JMP LPTTAB TAD LPTTAD DCA LPTXXX TAD LP7607 DCA LPLPTR LPTXXX, HLT SNA JMP .+3 LPR LPTKSF, JMS LPWAIT KRS LPFLSH, TAD LPM203 SNA CLA KSF JMP I LPTPCH LPTCIF, CDF CIF 0 JMP I .+1 7600 LPTCTZ, TAD LPT214 JMS LPTPCH JMP LPTRTN LPT6, 6 LPTTAB, TAD LPT40 LLB JMS LPWAIT TAD LPLPTR AND LPT7 LPM140, SZA CLA JMP LPTTAB JMP LPTKSF+1 LPTERR, CLA CLL CML RAR JMP LPTXIT LPTTAD, TAD . LPT70, 70 /LF LPT13, 13 /VT LPT177, 177 /FF 0 /CR LPT40, 40 /CR, NO LF LPM203, -203 LPT106, 106 LPT214, 214 LP7607, 7607 LP6201, CDF 0 LPTTMP, 0 LPLPTR, 0 >
IFNZRO LP08 < *6200 /LINE PRINTER HANDLER FOR LP08 LINE PRINTER - HANDLES TABS, /VERTICAL TABS. LP08 HARDWARE HANDLES FORM FEEDS, CARRIAGE RETURNS AND /LINE FEEDS. /ACCEPTS ^N AS EQUAL TO CARRIAGE RETURN FOR PSEUDO-COMPATIBILITY /WITH 645 HANDLER LSF=6661 LSR=6663 LLS=6666 LPT, 0 CLL CML CLA RAR TAD I LPT /LINK GOES ON HERE. IF NOT READ WAS REQUESTED LPT215, AND LP7700 CIA DCA LPTWC LPT214, RDF TAD LPTCIF DCA LPTXIT /SAVE CALLING FIELD IN RETURN SEQUENCE TAD I LPT AND LPT70 TAD LP6201 DCA LPTCDF /GET BUFFER FIELD /NOTE!!!!!!!! LP7700, 7700 /MUST BE AT LOC. 15 OF PAGE! ISZ LPT TAD I LPT DCA LPTCA /LPTCA GETS BUFFER ADDRESS ISZ LPT TAD I LPT ISZ LPT SNL /IF LINK NOT SET,GIVE ERROR JMP LPTERR LPM140, SZA CLA /GIVE FORM IF REC. 0 JMP LPTCDF TAD LPT214 JMS LPTPCH /OUTPUT A FORM FEED IF WRITING "RECORD ZERO" LPTCDF, HLT /NOW PICK UP THE CHARACTERS, UNPACK THEM AND PRINT. /TEST FOR:TABS, LINE FEEDS,VERTICAL TABS LPTLP, TAD I LPTCA JMS LPTPCH TAD I LPTCA AND LP7400 DCA LPTCDF ISZ LPTCA LP7400, 7400 TAD I LPTCA JMS LPTPCH TAD I LPTCA AND LP7400 CLL RTR LPTLF, RTR TAD LPTCDF RTR RTR JMS LPTPCH ISZ LPTCA LPT177, 177 ISZ LPTWC JMP LPTLP LPRTRN, ISZ LPT LPTXIT, HLT JMP I LPT LPTWC, 0 LPTCA, 0 LPTPCH, 0 AND LPT177 SZA TAD LPM140 SMA JMP LPFLSH TAD LPT106 SNA JMP LPTCTZ TAD LPT13 CLL CML TAD LPT7 SNL SZA JMP LPTCTL TAD LPT10 JMS LPWAIT LPTJMP, JMP LPJTAB-1 /LPJTAB-1 = "JMP LPTKRS" LPTCTZ, TAD LPT214 JMS LPTPCH JMP LPRTRN LPWAIT, 0 LLS LSF JMP .-1 LP7600, 7600 LSR JMP LPWISZ LPTERR, CLA CLL CML RAR /FATAL ERROR EXIT JMP LPTXIT LPWISZ, ISZ LPLPTR JMP I LPWAIT LPLF, TAD LPTLF JMP LPTKRS-3 LPTCTL, TAD LPTJMP DCA .+1 LPTXXX, HLT LPTTAB, TAD LPM140 JMS LPWAIT TAD LPLPTR AND LPT7 SNA CLA /NOTE!!!!!!! JMP LPTKRS /MUST BE AT LPJTAB-1 LPJTAB, JMP LPTTAB JMP LPLF JMP LPTVTB CMA CML LPT10, RAR TAD LPT215 DCA LPLPTR TAD LPLPTR /PREVENTS DOUBLE SPACING ON 80TH CHAR JMS LPWAIT TAD LPM120 DCA LPLPTR LPTKRS, KRS LPFLSH, TAD LPM203 SNA CLA KSF JMP I LPTPCH LPTCIF, CDF CIF 0 JMP I LP7600 LPT7, 7 LPT13, 13 LPM203, -203 LPT106, 106 LP6201, 6201 LPTM10, -10 LPT70, 70 LPM120, -120 LPLPTR, 0 LPTVTB, TAD LPTM10 DCA LPLPTR TAD LPTLF JMS LPWAIT JMP .-2 >
*7000 /TELETYPE HANDLER - NOT VERY INTELLEGENT. /ONLY RECOGNIZES ^Z AND ^C ON INPUT /AND ^C AND ^O ON OUTPUT /OH WELL, WHAT CAN YOU EXPECT IN ONE PAGE. / THE LOGIC IS VERY SIMILIAR TO THE PTR AND PTP HANDLERS. TTY360, 360 /MUST BE FIRST LOC ON PAGE! TTY, 0 TT7600, 7600 RDF TAD TTYCIF DCA TTYXIT /SAVE RETURN FIELD TAD I TTY AND TT70 TAD TTCDF DCA TTYCDF /DATA FIELD OF BUFFER TAD I TTY AND TT7700 CLL RAL /READ/WRITE IN LINK, PAGE COUNT IN AC 0-4 SZA /PROTECT LINK CIA /WHILE COMPLEMENTING AC DCA TTYWC ISZ TTY TAD I TTY DCA TTYCA /SAVE BUFFER ADDRESS ISZ TTY ISZ TTY TTYLP, SNL CLA JMP TTYGLP /ZER LINK MEANS READ JMS TTYTST /TEST FOR ^C TAD TTYM14 /-203-14=-217 =-"^O" SNA CLA JMP TTYCTO TAD I TTYCA /CHARACTER 1 IS LOW ORDER 8 BITS OF WORD 1 JMS TTYPCH AND TT7400 DCA TTYGCH ISZ TTYCA TT7400, 7400 TAD I TTYCA /CHARACTER 2 IS LOW ORDER 8 BITS OF WORD 2 JMS TTYPCH AND TT7400 CLL RTR RTR TAD TTYGCH RTR RTR /CHARACTER 3 IS HIGH ORDER 4 BITS OF WORDS 1 AND 2 JMS TTYPCH /WILL SET LINK ON! /AC IS NON-ZERO HERE BUT WE DON'T CARE TTLOOP, ISZ TTYCA TT70, 70 ISZ TTYWC ISZ TTYWC JMP TTYLP TTYRTN, TAD TTYCDF CLL CIA SNL CLA ISZ TTY /SKIP PAST ERROR RETURN TTYXIT, HLT /RESTORE CALLING FIELDS RAL JMP I TTY TTYPCH, 0 TAD TTM232 SNA JMP TTYRTN TAD TTY232 JMS TTPRNT JMP I TTYPCH TTYTST, 0 TTYCDF, 0 TAD TTY200 KRS /TEST FOR ^C WITH FLAG UP TAD TTM203 KSF CLA IAC SZA /YES..BACK TO MONITOR JMP I TTYTST TTYCIF, CDF CIF 0 JMP I TT7600 TTPRNT, 0 TLS TSF JMP .-1 JMP I TTPRNT TTYCA, 0 TTYWC, 0 TTCDF, CDF 0 /FOLLOWING CODE READS TTY AND PACKS IN BUFFER. TTYGLP, JMS TTYGCH DCA I TTYCA JMS TTYGCH DCA TTYPCH JMS TTYGCH RTL RTL DCA TTYGCH TAD TTYGCH AND TT7400 TAD I TTYCA DCA I TTYCA TAD TTYGCH TTY200, AND TTY360 CLL RTL RTL TAD TTYPCH ISZ TTYCA DCA I TTYCA JMP TTLOOP TTYGCH, 0 TAD TTYCDF TT7700, SMA CLA JMP I TTYGCH ISZ TTYTST JMP TTYKSF TAD TTY212 JMP TTECHO TTYKSF, KSF JMP .-1 JMS TTYTST TAD TTM27 SNA /IS IT A ^Z? DCA TTYCDF /YES - SET END-OF-FILE FLAG TAD TTY14 DCA TTYTST /TTYTST=-1 IF CARRIAGE RETURN KRB TTECHO, JMS TTPRNT /ECHO THE INPUT CHARACTER JMP I TTYGCH TTY232, 232 /THIS CAN BE OPTOMIZED OUT! TTY212, 212 TTY14, 14 TTM203, -203 TTM27, -27 TTYM14, -14 TTM232, -232 TTYCTO, 6032 JMP TTYRTN
IFZERO LINCTAPE < *7200 /DECTAPE HANDLERS(PAGE RELOCATABLE) FOR PS/8 MONITOR D177, 177 DM3, -3 DBLOCK, 0 DBLKCT, 0 DLOC, 0 WC, 7754 CA, 7755 DERRCT, 0 DTA0, ISZ DTANO DTA1, ISZ DTANO DTA2, ISZ DTANO DTA3, ISZ DTANO DTA4, ISZ DTANO DTA5, ISZ DTANO DTA6, ISZ DTANO DTA7, ISZ DTANO D400, 400 CLA CLL CMA RTL DCA DERRCT /SET TO REPEAT THREE TIMES IN CASE OF ERROR TAD DTANO CMA TAD DTATAD /GENERATE "TAD DTAN" WHERE DTAN IS THE ONE THAT DCA DTANO /WAS CALLED. CLA CLL CML RTR TAD DTANO /ALSO GENERATE "DCA DTAN" SO WE CAN RESTORE IT DCA DTADCA RDF TAD DCDIF0 DCA DSTOP /STORE CALLING FIELD FOR RETURNING DTANO, 0 /GET CALLING ADDRESS DCA DTA /SAVE IT TAD DTAISZ DTADCA, 0 /RESTORE ENTRY POINT DFUN=DTADCA DTAISZ, ISZ DTANO /BUMP DTANO FOR VARIOUS GROOVY REASONS /WHICH WILL BE APPARENT LATER TAD I DTA DCA DFUN /STORE AWAY FUNCTION WORD FOR FUTURE USE ISZ DTA DT7140, CLL CMA /THE "CLL" IS ONLY NECESSARY TO FORM THE 7140 TAD I DTA DCA DLOC /BUFFER ADDRESS -1 ISZ DTA TAD I DTA CLL RAL /MULTIPLY BY 2 FOR 256-WORD SIMULATED RECORDS DCA DBLOCK /DECTAPE BLOCK # ISZ DTA DTATRY, TAD WC DCDIF0, CDF CIF 0 DCA I CA TAD DFUN RAR CLA CML /COMPLEMENT OF BIT 11 OF DFUN NOW IN THE LINK TAD DTANO /DTANO = "TAD DTAN+1" RTR RTR /THESE TWO ROTATES FORM THE FLLOWING NUMBER /IN THE AC: YYYF00101000, WHERE YYY =DTAN+1 /AND F IS THE COMPLEMENT OF DFUN(11) TAD DT7140 /THE MAGIC STEP - THIS SIMULTANEOUSLY BUMPS DOWN /THE RECORD NUMBER IN AC(0-2) AND TRANSFORMS /THE REST OF THE AC TO F10001000 WHICH IS A /SEARCH IN DIRECTION F(F=1 MEANS BACKWARDS) WITH /THE MOTION BIT ON. DTCA DTXA DTLB /SET DECTAPE FIELD TO 0 FOR SEARCHING JMP DC+3 /JUMP INTO THE BLOCK SEARCH ROUTINE DERR, RTL /DECTAPE STATUS REGISTER B IS USUALLY IN THE AC HERE RAL D7600, 7600 /GET THE "END OF TAPE" FLAG INTO THE LINK AND CLEAR THE AC TAD D200 /GET MOTION BIT DC, SZL /AND, IF LINK IS ON DTATAD, TAD D400 /REVERSE DIRECTION OF MOTION DTXA KRS D200, AND D177 TAD DM3 SNA CLA KSF /CHECK FOR ^C TYPED JMP DTAWT TAD D7600 DCA DTA /FAKE DTA SO WE GO TO LOC 7600 IN FIELD 0 JMP DSTOP+1 /AFTER STOPPING THE TAPE DTAWT, DTSF DTRB JMP .-1 /WAIT FOR SEARCH TO COMPLETE SPA /HAS AN ERROR OCCURED? JMP DERR /DO SOMETHING APPROPRIATE DTRA RTL CMA RTL SNL CLA /WAS MOTIOZ OF TAPE FORWARDS? CML RTL /NO, SO ONLY SUCCEED IF WE ARE 2 BLOCKS IN FRONT /OF TARGET BLOCK TAD I WC CMA TAD DBLOCK CMA /AFTER THIS OPERATION WE HAVE THE FOLLOWING 4 POSSIBILITIES /1)AC=0, L=1 /SEARCH COMPLETE /2)AC=0, L=0 /RIGHT PLACE ON TAPE,WRONG DIRECTION /3)AC .GT. 0, L=0 /WEVE PASSED THE CORRECT BLOCK /4)AC .GT. 0, L=1 /WE HAVENT REACHED THE CORRECT BLOCK YET SZA CLA JMP DC SNL JMP DC+1 TAD DLOC DCA I CA /SET THE CURRENT ADDRESS REGISTER TO THE BUFFER -1 TAD DFUN DTLB /SET FIELD TO BUFFER FIELD TAD DFUN CLL RAL AND D7600 DCA DBLKCT /GET UNCOMPLEMENTED WORD COUNT INTO DBLKCT RAL IAC CLL CML RTL RTL /FORM A 50 IF L=1, A 30 IF L=0 DL, DTXA /XOR IN 50(WRITE) OR 30(READ) OR 0(CONTINUE PREVIOUS OP) TAD D7600 DCA I WC /READ/WRITE 128 WORDS FROM/INTO EACH BLOCK DTSF DTRB JMP .-1 CLL CML /SET ERROR FLAG ON INITIALLY SPA CLA JMP DERR2 /TRANSMISSION ERROR - TRY AGAIN TAD DBLKCT TAD D7600 SNA /BUMP WORD COUNT BY -128 AND SEE IF 0 /ALSO REVERSE LINK. JMP DOVER /YES - DONE DCA DBLKCT /RESTORE BUMPED WORD COUNT JMP DL /AND LOOP DERR2, ISZ DERRCT /ERROR CODE(LINK) IS 1 JMP DTATRY /TRY AGAIN JMP DSTOP /3 ERRORS - ITS CURTAINS FOR YOU,CHARLEY DOVER, ISZ DTA /SKIP ERROR RETURN DSTOP, HLT /RESTORE CALLING FIELD TAD D200 /STOP THE TAPE DTXA DCA DTANO /INITIALIZE DTANO FOR THE NEXT CALL RAR /GET ERROR CODE FROM LINK INTO AC0 JMP I DTA /AND EXIT DTA, 0 >
IFNZRO LINCTAPE < *7200 /LINCTAPE HANDLER FOR PS/8 - CRUDE VERSION (WRITE OPERATION CHECKS /AFTER EACH BLOCK) /ALL 8 HANDLERS ARE IN THIS PAGE - SEE DECTAPE HANDLER FOR /DUMB COMMENT /PDP-12 OPCODES NEEDED LINC= 6141 PDP= 0002 CLR= 0011 AXO= 0001 TMA= 0023 TAC= 0003 LTA4, 4 LTA7, 7 LTA20, 20 LTA70, 70 LTA702, 702 LT3700, 3700 LT4000, 4000 LT7700, 7700 DTA0, ISZ LTANO DTA1, ISZ LTANO DTA2, ISZ LTANO DTA3, ISZ LTANO DTA4, ISZ LTANO DTA5, ISZ LTANO DTA6, ISZ LTANO DTA7, ISZ LTANO LTA200, 200 TAD LTANO CMA TAD LTATAD DCA LTANO CLA CLL CML RTR TAD LTANO DCA LTADCA RDF TAD LCDIF0 DCA LTAXIT LTANO, 0 DCA LTA TAD LTAISZ LTADCA, 0 TAD I LTA DCA LTARG1 ISZ LTA TAD I LTA DCA LTARG2 ISZ LTA TAD I LTA CLL RAL /MOVE ARGUMENTS TO WORK AREA DCA LTARG3 ISZ LTA ISZ LTA TAD LTARG1 /GET CORE FIELD AND LTA70 CLL RTL RTL /MOVE TO BITS 0-2. CONTROLLER RTL /WANTS THEM THERE SLTARG3, DCA LTATMP TAC TAD LTANO /GET UNIT NO. AND LTA7 CLL RAR TAD LTATMP TAD LTA20 /SET BIT 7 ON. EXTENDED ADD. MODE LINC AXO /SEND DATA TO CONTROLLER PDP LT7600, 7600 DCA LTANO /RESET UNIT NO. TAD LTARG1 AND LT4000 /WATCH THE LINK! RTL RTL TAD LTA702 /ADD TAPE INST; STORE IT DCA LTINST LTALP, KRS AND LTA177 TAD LTAM3 SNA CLA KSF /TEST FOR ^C JMP LTAGO LCDIF0, CDF CIF 0 JMP I LT7600 LTAGO, TAD LTARG2 /CORE ADDRESS TO CONTROLLER LINC TMA CLR LTINST, 0 /TAPE INSTRUCTION HERE LTARG3, 0 /BLOCK NO. HERE PDP CMA /OPERATION DONE. AC HAS CHECKSUM SNA CLA /7777=GOOD CHECKSUM JMP LTNERR TAD LTINST AND LTA4 SNA CLA /WAS IT A WRITE OPERATION? JMP LTALP /NO..RETRY IT LTNERR, TAD LTARG1 AND LT3700 TAD LT7700 SNA /ALL DONE? JMP LTAXIT DCA LTARG1 /NO.. SAVE COUNT TAD LTARG2 LTATAD, TAD LTA200 DCA LTARG2 ISZ LTARG3 JMP LTALP LTAXIT, HLT JMP I LTA LTAISZ, ISZ LTANO LTARG1, 0 LTARG2, 0 LTATMP, 0 LTA177, 177 LTAM3, -3 LTA, 0 >
*6400 /THIS IS THE REAL HIGH SPEED HANDLER. /HIGH SPEED PAPER TAPE HANDLER FOR BLEEP MONITOR /PACKS 3 CHARACTERS IN 2 WORDS ON INPUT, UNPACKS ON OUTPUT /PAGE RELOCATABLE IFZERO NOHSPT < PTP, 0 CLA CLL CML /SET LINK ON TO INDICATE PUNCH JMS PSETUP /DO COMMON CRAP PTPLP, TAD I PTPCA JMS PTPPCH /FIRST CHAR IN LOW ORDER 8 BITS OF WORD 1 DCA PTR ISZ PTPCA PT7700, 7700 TAD I PTPCA JMS PTPPCH /SECOND CHAR IN LOW ORDER 8 BITS OF WORD 2 CLL RTR RTR TAD PTR RTR RTR /THIRD CHARACTER NOW IN AC JMS PTPPCH PTPEND, ISZ PTPCA PT70, 70 /JUST IN CASE WERE PUNCHING PG 7600 KEEP THIS LITERAL HERE KSF JMP PTPISZ /KEYBOARD FLAG OFF - DON'T WORRY ABOUT ^C PTPKRS, KRS AND PTP177 TAD PTPM3 SZA CLA /IS THERE A ^C IN THE TTY BUFFER? JMP PTPISZ /NO PTPCIF, CDF CIF 0 JMP I .+1 7600 PSETUP, 0 RDF /GET FIELD OF CALLING PROGRAM TAD PTPCIF DCA PTPXIT /SET UP RETURN SEQUENCE TAD I PTP AND PT70 TAD PCDF DCA PTPCDF RAR /GET LINK(1=PTP,0=PTR) TAD I PTP /GET FUNCTION WORD ISZ PTP SPA /CHECK CORRECT MODE JMP PTPERR /SIGNAL "UNRECOVERABLE DEVICE ERROR" AND PT7700 CMA /SET UP -(WORD COUNT)/2-1 DCA PTPWC TAD I PTP /SET UP STARTING ADDRESS ISZ PTP DCA PTPCA TAD I PTP PTPCDF, 0 /SET DATA FIELD TO ACCESS BUFFER PTPEOF=PTPCDF SNA CLA SZL JMP PTPISZ TAD PTP336 /INPUT INITIALIZATION - TYPE "^" AND WAIT TLS KSF JMP .-1 JMS PTRGCH /INITIALIZE THE PTR BUFFER CHAR 6032 /CLEAR AC AND KEYBOARD FLAG JMP PTPKRS /CHECK FOR ^C PTPISZ, ISZ PTPWC JMP I PSETUP /LOOP FOR BUFFER SIZE (128 WORDS) PTPRTN, TAD PTPEOF SZA CLA /DID WE RUN OUT OF TAPE? ISZ PTP ISZ PTP PTPXIT, HLT /EXIT CDF GOES HERE JMP I PTP PTPPCH, 0 PLS /NOTICE THE GLORIOUS LACK OF OVERLAP PSF JMP .-1 AND PT7400 JMP I PTPPCH PTPCA, 0 PTR, 0 /CORRECT ENTRY IN MAIN ASSEMBLY IF THIS IS MOVED! CLA CLL TAD PTR DCA PTP JMS PSETUP /SET UP ADDRESS, COUNT, FIELDS PTRLP, JMS PTRGCH /READ FIRST CHARACTER OF 3 DCA I PTPCA JMS PTRGCH DCA PTPPCH JMS PTRGCH RTL RTL AND PT7400 TAD I PTPCA DCA I PTPCA /HIGH ORDER 4 BITS INTO WORD 1 TAD PTR /GET THE CHAR FROM THE PTR BUFFER RTR RTR RAR /PUT THE LOW ORDER BITS INTO AC 0-3 AND PT7400 TAD PTPPCH ISZ PTPCA PT7400, 7400 DCA I PTPCA /LOW ORDER 4 BITS INTO WORD 2 JMP PTPEND PTRGCH, 0 TAD PTPEOF SNA CLA JMP I PTRGCH RFC DCA PTPEOF PTTIME, ISZ PTPEOF /THIS LOOP OVERFLOWS IN APPROX. 100 MS ON A PDP-8, JMP PGCHLP /72 MS ON A PDP-8/E DCA PTPTMP /IF IT DOES, IT MEANS WE HAVE RUN OUT OF TAPE TAD PTP232 /ZERO THE GARBAGE CHARACTER AT THE END OF THE TAPE AND SEND JMP I PTRGCH /AN END-OF-FILE CHARACTER (^Z) PGCHLP, TAD PTPTMP DCA PTR PTP232, 232 PTP336, 336 /FALL THROUGH CONSTANTS TO STALL FOR TIME PTP177, 177 RSF JMP PTTIME /READER NOT READY - CHECK TIMING RRB /READER READY - READ CHAR DCA PTPTMP /BUFFER READER BY ONE CHARACTER TO ELIMINATE TAD PTR /GARBAGE CHARACTER AT END OF TAPE JMP I PTRGCH /AND RETURN PTPERR, CLA CLL CML RAR /SIGNAL A "PERMANENT I/O ERROR" ON THE DEVICE JMP PTPXIT-2 PCDF, CDF 0 PTPTMP, 0 PTPWC, 0 PTPM3, -3 >
/THIS IS THE PTP,PTR HANDLER FOR PEOPLE WITH /NO HIGH SPEED I/O. IFNZRO NOHSPT < PTP, 0 CLA CLL CML /SET LINK ON TO INDICATE PUNCH JMS PSETUP /DO COMMON CRAP PTPLP, KSF JMP PTPCNT /KEYBOARD FLAG OFF - DON'T WORRY ABOUT ^C KRS AND PTP177 TAD PTPM3 SZA CLA /IS THERE A ^C IN THE TTY BUFFER? JMP PTPCNT /NO PTPCIF, CDF CIF 0 JMP I PT7600 PTPCNT, TAD I PTPCA JMS PTPPCH /FIRST CHAR IN LOW ORDER 8 BITS OF WORD 1 DCA PTR ISZ PTPCA PT7700, 7700 TAD I PTPCA JMS PTPPCH /SECOND CHAR IN LOW ORDER 8 BITS OF WORD 2 CLL RTR RTR TAD PTR RTR RTR /THIRD CHARACTER NOW IN AC JMS PTPPCH PTPEND, ISZ PTPCA PT70, 70 /JUST IN CASE WERE PUNCHING PG 7600 KEEP THIS LITERAL HERE JMP PTPISZ PSETUP, 0 RDF /GET FIELD OF CALLING PROGRAM TAD PTPCIF DCA PTPXIT /SET UP RETURN SEQUENCE TAD I PTP AND PT70 TAD PCDF DCA PTPCDF RAR /GET LINK(1=PTP,0=PTR) TAD I PTP /GET FUNCTION WORD ISZ PTP SPA /CHECK CORRECT MODE JMP PTPERR /SIGNAL "UNRECOVERABLE DEVICE ERROR" AND PT7700 CMA /SET UP -(WORD COUNT)/2-1 DCA PTPWC TAD I PTP /SET UP STARTING ADDRESS ISZ PTP DCA PTPCA TAD I PTP PTPCDF, 0 /SET DATA FIELD TO ACCESS BUFFER PTPEOF=PTPCDF SNA CLA SZL JMP PTPISZ TAD PTP336 /INPUT INITIALIZATION - TYPE "^" AND WAIT TLS KSF JMP .-1 PT7600, 7600 PTPISZ, ISZ PTPWC JMP I PSETUP /LOOP FOR BUFFER SIZE (128 WORDS) PTPRTN, TAD PTPEOF SZA CLA /DID WE RUN OUT OF TAPE? ISZ PTP ISZ PTP PTPXIT, HLT /EXIT CDF GOES HERE JMP I PTP PTPPCH, 0 TLS TSF /NOTICE THE GLORIOUS LACK OF OVERLAP JMP .-1 AND PT7400 JMP I PTPPCH PTPCA, 0 PTR, 0 /CORRECT ENTRY IN MAIN ASSEMBLY IF THIS IS MOVED! CLA CLL TAD PTR DCA PTP JMS PSETUP /SET UP ADDRESS, COUNT, FIELDS PTRLP, JMS PTRGCH /READ FIRST CHARACTER OF 3 DCA I PTPCA JMS PTRGCH DCA PTPPCH JMS PTRGCH RTL RTL DCA PTR TAD PTR AND PT7400 TAD I PTPCA DCA I PTPCA /HIGH ORDER 4 BITS INTO WORD 1 TAD PTR /GET THE CHAR FROM THE PTR BUFFER RTL RTL AND PT7400 TAD PTPPCH ISZ PTPCA PT7400, 7400 DCA I PTPCA /LOW ORDER 4 BITS INTO WORD 2 JMP PTPEND PTRGCH, 0 TAD PTPEOF SNA CLA JMP I PTRGCH CLA CLL CMA RTL /-3 DCA PTPEOF DCA PTR PTTIME, ISZ PTR /TIMEOUT LOOP FOR LOW SPEED READER JMP PTP232 ISZ PTPEOF /TIMES OUT IN 132 MS(PDP 8/E) OR 205 MS(PDP 8) JMP PTP232 TAD PTP232 JMP I PTRGCH /OVERFLOWED - PTPEOF IS NOW 0, RETURN ^Z PTP232, 232 /WASTE SOME TIME PTP177, 177 KSF JMP PTTIME /READER NOT READY - CONTINUE TIMEOUT KRB JMP I PTRGCH /RETURN WITH CHARACTER PTPERR, CLA CLL CML RAR /SIGNAL A "PERMANENT I/O ERROR" ON THE DEVICE JMP PTPXIT-2 PCDF, CDF 0 PTP336, 336 PTPWC, 0 PTPM3, -3 >
/THE NOPUNC AND ENPUNC PSEUDO OPS ARE USED TO /'FAKE OUT' THE ASSEMBLER. THE CODE ASSEMBLES AS IF THE /ORIGIN WERE AT 7607, BUT WHEN IT IS LOADED, THAT CODE GETS /LOADED INTO 6607! THIS MEANS THAT ONE CAN BULID A DISK /VERSION OF PS/8 WHILE RUNN ING UNDER A DECTAPE VERSION, AS /THE SYSTEM HANDLERS ARE NOT OVERLAPPED. /IN EACH SYSTEM HANDLER THE CODE / IFNZRO .-7700 <NZERR> /APPEARS. THIS WILL CAUSE AN ASSEMBLY ERROR IF THINGS ARE /SHUFFLED AROUND. THE SKP;HLT FOLLOWING ARE TO PREVENT /MISTAKENLY DOING A JMS I (7700 WITH IF=0. /THIS MISTAKE COULD DESTROY A SYSTEM. *6607 /SYSTEM HANDLER IN FIELD 0 NOPUNCH *7607 ENPUNCH IFNZRO RF08+DF32 < SHNDLR, 0 CLA CLL CMA RTL /-3 DCA SYSCNT /# TRYS ON ERROR TAD I SHNDLR RAL CLA RTL TAD S6603 DCA SFUN /EITHER A READ OR WRITE TAD I SHNDLR AND S70 DCA SFIELD /GET FIELD OF BUFFER TAD I SHNDLR RAL AND S7600 CIA DCA SWC /SET UP WORD COUNT CLA CMA ISZ SHNDLR TAD I SHNDLR DCA SCA /BUFFER ADDRESS-1 ISZ SHNDLR IFNZRO DF32 <TAD I SHNDLR /NOTE----SOFSET IS ZERO CURRENTLY TAD SOFSET RTL AND S3700> TAD SFIELD 6615 /LOAD DISK EXTENDED MEMORY S7600, 7600 IFNZRO RF08 <TAD I SHNDLR TAD SOFSET RTR RTR AND S377 6643 /LOAD HIGH ORDER> TAD I SHNDLR TAD SOFSET RTR RTR RAR AND S7400 SFUN, HLT /BECOMES DISK IOT.(READ OR WRITE) RDF TAD SCIF DCA SFIELD IFNZRO DF32 <6622> IFNZRO RF08 <6623> JMP .-1 ISZ SHNDLR 6621 /SKIP ON ERROR IFNZRO RF08 <SKP /SENSE OF SKIP IS REVERSED> JMP SYSER ISZ SHNDLR SFIELD, HLT /RETURN TO PROPER FIELD 6601 /CLEAR TROUBLESOME FLAG JMP I SHNDLR SYSER, CLA CLL CML RAR /4000 ISZ SYSCNT /TRY AGAIN? SKP CLA JMP SFIELD /WHY BOTHER CLA CLL CMA RTL TAD SHNDLR DCA SHNDLR /RESET PARAMETERS AND TRY AGAIN IFNZRO RF08 <IFNZRO .-7700 <NZERR>; SKP; HLT> JMP SHNDLR+3 SCIF, CIF 0 SYSCNT, 0 IFNZRO DF32 <IFNZRO .-7700 <NZERR>; SKP; HLT> S6603, 6603 S70, 70 S7400, 7400 IFNZRO DF32 <S3700, 3700> IFNZRO RF08 <S377, 377> SCA=7751 SWC=7750 >
IFNZRO DECTAPE < SHNDLR, 0 CLA CLL CMA RTL DCA SYSCNT /3 TRIES ON ERROR RDF TAD SCIF DCA SFIELD /RETURN FIELD SETUP TAD I SHNDLR DCA SFUN ISZ SHNDLR CLA CMA TAD I SHNDLR DCA SLOC /BUFFER ADDRESS-1 ISZ SHNDLR STRY, TAD S410 /SETUP DTA0 TO DO SEARCH REVERSE DTCA DTXA /BUT MOTION BIT IS NOT ON DTLB CLA CMA CLL RAL DCA SCA /7776=SBLOCK FROM PS/8 ASSEMBLY TAD SFUN RTR RTR SERR, RTL RAL /LAST 4 INST. PUT MOTION BIT IN LINK /IF THIS BIT WAS SET IN THE CALLING /SEQUENCE, SEARCH STARTS FORWARD. S7600, 7600 TAD S200 SC, SZL TAD S400 DTXA /ZAP MOTION BIT ON DTSF DTRB JMP .-1 SPA /CHECK FOR ANY ERRORS JMP SERR DTRA /NO ERRORS RTL CMA RTL /COMPLEMENT OF DIRECTION TO LINK /IF LINK ON, SEARCHING FORWARD. SNL CLA CML RTL TAD SBLOCK /SEARCH FOR ONE RECORD BEFORE THE /REQUIRED ONE. THEN REVERSE DIRECTION CMA TAD I SHNDLR TAD I SHNDLR /X+X=2*X; RECORDS TO BLOCKS TAD SOFSET TAD SOFSET /ALSO DOUBLE OFFSET CMA SZA CLA /IS IT PROPER RECORD? JMP SC SNL /YES..IF LINK IS ON,WAS FWD SRCH JMP SC+1 /REVERSE..REVERSE TAPE MOTION /AND SEARCH FORWARD TAD SLOC DCA SCA TAD SFUN DTLB /SET UP FIELD TAD SFUN CLL RAL AND S7600 DCA SBLKCT /BLOCK COUNT RAL /FUNCTION TO BIT 11 IFNZRO .-7700 <NZERR> SKP HLT /TO PROTECT AGAINST BAD PROGRAMMERS IAC CLL CML RTL RTL /FORMS EITHER READ OR WRITE SL, DTXA TAD S7600 DCA SWC /TRANSFER 200 (8) DTSF DTRB JMP .-1 CLL CML /IN CASE OF FATAL ERROR SPA CLA JMP SERR2 TAD SBLKCT TAD S7600 SNA /ALL DONE? JMP SOVER /YES DCA SBLKCT JMP SL SERR2, ISZ SYSCNT /TRY AGAIN? JMP STRY SKP /DON'T BOTHER SOVER, ISZ SHNDLR ISZ SHNDLR TAD S200 /STOP THE TAPE DTXA RAR /GIVE FATAL RETURN SFIELD, HLT JMP I SHNDLR SCIF, CIF 0 S400, 400 S200, 200 S410, 410 SBLKCT=7777 SYSCNT=7750 SFUN=7751 SLOC=7752 SWC=7754 SCA=7755 >
IFNZRO RK8 < DCLA=6751 DLDR=6733 DLDC=6732 DRDS=6741 DRWC=6752 DCLS=6742 DSKC=6745 DSKE=6747 DLWC=6753 DLCA=6755 /I WILL ADMIT THAT THE FOLLOWING HANDLER /IS WRITTEN TERRIBLY, BUT IT WAS WRITTEN WHILE THE /RK8 HARDWARE WAS BEING DEBUGGED AND SO I COULD NOT /USE SOME OF THE COOL FEATURES OF THE CONTROLLER. /THE RK8 NOW WORKS BUT I AM TOO LAZY TO REWRITE THIS HANDLER SHNDLR, 0 CLA CLL CMA RTL DCA SYSCNT /NO. ERROR TRIES RDF TAD SCIF DCA SFIELD /CALLING FIELD..FOR RETURN TAD I SHNDLR DCA SFUN /FUNCTION WORD ISZ SHNDLR CLA CMA TAD I SHNDLR DCA SLOC /BUFFER ADDRESS-1 ISZ SHNDLR STRY, TAD I SHNDLR TAD SOFSET /SOFSET=0 DCA SREC TAD SFUN RAL AND S7600 DCA SBLKCT /WORD COUNT RTL TAD SDLDR DCA SINST /SINST=6733 (READ) OR 6735 WRITE SLOOP, TAD SLOC DLCA /LOAD CURRENT ADDRESS TAD SBLKCT TAD S7600 /FULL OR HALF RECORD READ? SZA CLA TAD S7600 /FULL..2 PAGES TAD S7600 /HALF..1 PAGE DLWC /WORD COUNT CLA CMA DCLS /CLEAR ALL FLAGS S7600, 7600 S7400, 7400 TAD SFUN AND S70 DLDC /LOAD DATA FILED OF BUFFER TAD SREC SINST, 0 /READ OR WRITE IOT DSKC SKP JMP SNEXT DSKE /SKIP ON ERROR JMP SINST+1 SERROR, ISZ SYSCNT JMP .+3 /TRY AGAIN! CLA CLL CML RAR /DON'T BOTHER..YOU LOSE JMP SRTRN+1 DRDS AND S40 /INSPECT 'SECTOR NOT FOUND BIT' ISZ SZERO JMP .-1 /DELAY TO LET UNIT QUIET DOWN (KLUDGE!) SNA CLA JMP SLOOP /ERROR, BUT SECTOR FOUND CLA CMA DCLS IFNZRO .-7700 <NZERR> SKP CLA HLT DCLA /SEEK TRACK 0 DSKC JMP .-1 JMP SLOOP /AND RETRY SNEXT, DSKE /DONE..IS ERROR FLAG UP? SKP JMP SERROR /YEAH?! ISZ SREC /NO..BUMP RECORD NO. S70, 70 TAD SLOC TAD S400 DCA SLOC TAD SBLKCT CLL CML TAD S7400 SZL SNA /WORD COUNT EXHAUSTED? JMP .+3 /YES DCA SBLKCT JMP SLOOP CLA SRTRN, ISZ SHNDLR ISZ SHNDLR SFIELD, HLT JMP I SHNDLR SLOC, 0 SREC, 0 SBLKCT, 0 SYSCNT, 0 SFUN, 0 SZERO, 0 S400, 400 SCIF, CIF 0 SDLDR, DLDR S40, 40 >
IFNZRO LINCSYS < SHNDLR, 0 S7600, 7600 RDF TAD SCIF DCA SXIT TAD I SHNDLR DCA SFUN /FUNCTION ISZ SHNDLR TAD I SHNDLR DCA SADR /BUFFER ADDRESS ISZ SHNDLR TAD I SHNDLR TAD SOFSET /SOFSET=0 CLL RAL DCA SBLOK /BLOCK NO. ISZ SHNDLR CLL CML RAR AND SFUN RTL RTL TAD S702 /GET FUNCTION;CREATE READ OR WRITE DCA SINST /READ OR WRITE INSTRUCTION. TAD SFUN AND S70 /FIELD BITS TO AC 0-2 RTL IAC RTL /SET EXTENDED ADDRESS RTL LINC=6141 PDP=2 AXO=1 /SEND TO CONTROLLER TMA=23 LINC AXO PDP CLA TAD SFUN RAL AND S7600 DCA SFUN SLOOP, CLA CLL CMA RTL DCA SERRCT /NO. ERROR TRIES STRY, TAD SADR LINC TMA /CORE ADDRESS TO CONTROL SINST, 0 /READ OR WRITE SBLOK, 0 /BLOCK NO. HERE PDP CMA /CHECKSUM HERE. 7777=GOOD SZA CLA JMP SERR SOK, ISZ SBLOK TAD SADR /BUMP UP BLOCK AND CORE ADDRESS TAD S200 /PARAMETERS DCA SADR TAD SFUN TAD S7600 SNA /ALL DONE? JMP SDONE /YES DCA SFUN JMP SLOOP SERR, TAD SINST IFNZRO .-7700 <NZERR> SKP HLT RTR;RTR SPA CLA /WAS IT READ? JMP SOK /NO..WRITE. CONTINUE ISZ SERRCT /READ..RETRY IT? JMP STRY CLA CLL CML RAR /DON'T BOTHER SKP SDONE, ISZ SHNDLR SXIT, 0 JMP I SHNDLR SFUN, 0 SADR, 0 SERRCT, 0 S702, 702 S200, 200 S70, 70 SCIF, CDF CIF 0 >
/MONITOR BOOTSTRAP AND GENERATOR IFNZRO RF08+DF32 < *7400 NOPUNC *6604 ENPUNC NOP /FOR "SWAP" B6653, 6653 B7647, 7647 B7577, 7577 B200, 200 B7605, 7605 B7751, 7751 ZBLOCK 6622-. TAD I B6653 CDF 10 DCA I B7647 CDF 0 ISZ B6653 ISZ B7647 JMP .-6 /MOVE FIELD 1 RESIDENT UP IFNZRO RF08 <6643> 6615 7600 TAD B7577 DCA I B7751 TAD B200 6603 /NOW READ IN FIELD 0 RESIDENT FROM RECORD 1/2 IFNZRO RF08 <6623> IFNZRO DF32 <6622> JMP .-1 6621 IFNZRO RF08 <SKP> HLT /ERROR READING SYSTEM IN JMP I B7605 /BOOTSTRAP FOR DISK MONITOR IS AS FOLLOWS: / LOCATION CONTENTS / 7750 7600 / 7751 6603 / 7752 6622 / 7753 5352 / 7754 5752 >
IFNZRO DECTAPE < *7400 /DECTAPE BOOTSTRAP - LOADS INTO 7600 NOPUNCH *7600 ENPUNCH TAD B600 /THIS CODE ONLY EXECUTED ON DMS-TYPE BOOTSTRAP DTCA DTXA /ALL IT DOES IS SIMULATE THE OTHER TYPE OF BOOTSTRAP DTSF /MORAL: DISK MONITOR SYSTEM SUCKS JMP .-1 DCA BOOTX DCA BOOTX+1 /FUDGE TO MAKE USE OF SOME COMMON CODE TAD B620 JMP BOOT3 /START READING OVER OURSELVES WITH RECORD 0 AGAIN ZBLOCK 7611-. BM7642, -7642 /MUST BE BEFORE 7617 BOOT1, TAD 7755 TAD BM7642 SNA CLA /WATCH THE PROGRESS OF THE READ JMP BOOT2 /WHEN IT GETS PAST 7643, SWITCH TO FIELD 1 NOP /LOADS OVER DTSF IN 7616 JMP BOOT1 /LOADS OVER JMP .-1 IN 7617 - STARTS BOOTSTRAP BOOT2, TAD B10 DTLB /ZAP A 10 INTO STATUS REG B TO LOAD INTO FIELD 1 DTSF /FROM HERE ON - LOAD THE FIELD 1 RESIDENT INTO FIELD 1 JMP .-1 BOOT3, DTXA /CONTINUE READING NEXT RECORD(ALSO SEE CODE AT 7600) DTLB /INTO FIELD 0 TAD B7577 DCA 7755 /PAGE 7600 DCA 7754 BOOTX, CDF CIF 10 JMP 7643 /JUMP INTO WAIT LOOP IN FIELD 1 JMP BOOT1 /DISK MONITOR FUDGE - JUMP INTO WAITING LOOP B7577, 7577 B10, 10 B600, 600 B620, 620 ZBLOCK 7643-. DTSF /THIS IS LOADED INTO FIELD 1 WITH MONITOR RESIDENT JMP .-1 /IT IS IN THE CD OUTPUT AREA AND SO WILL BE ZAPPED CDF CIF 0 /BY THE KEYBOARD MONITOR JMP 7605 /OK, FIELD 0 RESIDENT READ IN, START UP MONITOR /BOOTSTRAP FOR DECTAPE MONITOR IS THE SAME AS FOR THE /DEC LIBRARY SYSTEM, RL MONITOR AND POLY BASIC - OR JUST /READ RECORD 0 INTO 7600 AND TRANSFER TO 7600 A LA DISK /MONITOR SYSTEM ON DECTAPE >
IFNZRO RK8 < *7400 NOPUNC *1 ENPUNC BOOT, TAD I BOOTX1 DCA I BOOTX2 TAD I BOOTX3 CDF 10 DCA I BOOTX4 CDF 0 TAD BOOTX2 SZA CLA JMP BOOT JMP I B7605 BOOTX1, 200 BOOTX2, 7577 BOOTX3, 47 BOOTX4, 7646 ZBLOCK 27-. B7605, 7605 DSKC /MUST LOAD OVER LOC. 30 JMP .-1 /MUST LOAD OVER 31 JMP BOOT /THE BOOTSTRAP FOR THE RK8 IS AS FOLLOWS: / LOCATION CONTENTS / 30 6733 / 31 5031 /LOAD ADDRESS 30 AND START >
IFNZRO LINCSYS < *7416 /ACTUALLY LOADS INTO 4016 B4047, 4047 B7647, 7647 1020;20;4 /IO PRESET 1020;20;AXO /LOAD SOME LINCTAPE FLAGS 1020;7600;TMA /LOAD MEMORY ADDRESS 720;1 /READ RECORD 1 PDP /BACK TO PDP-8 MODE CLA TAD I B4047 CDF 10 DCA I B7647 CDF 00 ISZ B4047 ISZ B7647 JMP .-6 JMP I .+1 7605 /THE BOOTSTRAP FOR A LINCTAPE SYSTEM IS AS FOLLOWS: /LEFT SWITCHES=700,RIGHT SWITCHES=0 /I-O PRESET IN LINC MODE AND PRESS "D0". TAPE WILL MOVE /WHEN TAPE STOPS PRESS "START 20". > $



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