File CONFIG.TD

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

/	PS/8 SYSTEM CONFIGURATOR	CONFIG.002

/25 AUGUST 1971		RL/EF
/COPYRIGHT 1970,1971			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.


/THIS ASSEMBLY INCLUDES CODE FOR THE TD8E DECTAPE
/SYSTEM. ONLY DRIVES 0&1 ARE SUPPORTED, IN A SYSTEM
/CONFIGURATION.

/ 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: / TD8E / THIS VERSION OF CONFIG SUPPORTS TD8E IN A NONSYSTEM / CAPACITY. THIS IS WITH RESTRICTIONS. NO MONITOR / OPERATIONS (GET, RUN, SAVE) CAN BE DONE TO THE / NONSYSTEM TD8E. SETTING TD8E=1 WILL DISABLE DECTAPE / AND ASSEMBLE TD8E HANDLER. TD8E AND DECTAPE ARE / INCOMPATIBLE, AND ASSEMBLY ERRORS OCCUR IF THEY ARE / BOTH PRESENT. / TD8ESYS / DEFINING TD8ESYS CAUSES AN ASSEMBLY FOR THE TD8E / DECTAPE. IF TD8ESYS=1, A SINGLE TAPE SYSTEM WILL / RESULT; I.E. SYS=DSK=UNIT 0. IF TD8ESYS=2, A TWO / TAPE SYSTEM WILL BE DEFINED, WITH SYS=UNIT 0, AND / DSK=UNIT 1. NO TWO PAGE HANDLERS ARE SUPPORTED BY / CONFIG AT THIS TIME. / 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:) / RK8 / IFNDEF RK8 <RK8=0> / DEFINING RK8 WILL SPECIFY A SINGLE RK8 UNIT AS / THE SYSTEM DEVICE. / RK01 / IFNDEF RK01 <RK01=0> / DEFINING RK01=N WILL CAUSE AN ASSEMBLY IN WHICH / THERE ARE ENTRIES FOR N NON-SYSTEM RK8 HANDLERS / NAMED RKA0-RKA3 (IF N=4). THE ASSEMBLY WILL DELETE / DECTAPE HANDLERS TO MAKE ROOM FOR THE RK8 HANDLERS. / THUS RK01=2 INSERTS HANDLERS FOR RKA0,RKA1 AND / DELETES HANDLERS FOR DTA6 AND DTA7. / 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. / LIST / LIST IS A LISTING SUPPRESIION PARAMETER. IF LIST / IS NOT EQUAL TO 0, ALL HANDLERS WILL BE LISTED, / WHETEHER THEY WERE ASSEMBLED OR NOT. IF LIST=0, / ONLY THE HANDLERS THAT WERE ASSEMBLRD ARE PRODUCED / IN THE ASSEMBLY LISTING. DEFAULT IS LIST=0.
/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) / 23 RKAN. N NON-SYSTEM RK8 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 LIST <LIST=0> 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 RK01 <RK01=0> IFNDEF TD8E <TD8E=0> IFNDEF TD8ESYS <TD8ESYS=0> IFNDEF DECTAPE < IFZERO DF32+RF08+RK8+LINCSYS+TD8ESYS <DECTAPE=1> IFNZRO DF32+RF08+RK8+LINCSYS+TD8ESYS <DECTAPE=0> > IFNZRO DECTAPE < /CAN'T ALLOW TD8E AND DECTAPE!! IFNZRO TD8ESYS+TD8E < REASMB, BAD PARAMETERS >> 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+TD8ESYS <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 IFNZRO TD8ESYS+TD8E < *572 /ZERO OUT DECTAPE NAMES ZBLOCK 6> 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 IFNZRO TD8ESYS <0> /BOTH SYS,DSK RESIDENT IFZERO TD8ESYS < 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-5000 5^200+DTA1-5000 5^200+DTA2-5000 5^200+DTA3-5000 5^200+DTA4-5000 5^200+DTA5-5000 5^200+DTA6-5000 5^200+DTA7-5000 1^200+PTP-6400 1^200+PTR-6400 3^200+CDR-5600+4000 /TWO PAGE HANDLER IFNZRO TD8ESYS <*772 ZBLOCK 10> /WIPE OUT TRACES OF DECTAPE IFNZRO TD8E <*772 5^200+DTA0-5000+4000 /2 PAGE HANDLER 5^200+DTA1-5000+4000 > IFNZRO DECTAPE+TD8ESYS <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 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 /THIS HORRENDOUS CODE INSERTS THE RK8 HANDLERS. IFNZRO RK01 < IFZERO RK01-1 < *7573 4050 FIELD 1 *1001 6^200+RKA0-4600 *577 6373 /RKA0 > IFZERO RK01-2 < *7572 4050 4050 /RK8 DEVICE TYPE FIELD 1 *1000 6^200+RKA1-4600 6^200+RKA0-4600 *576 6374 6373 /RKA0 AND RKA1 > IFZERO RK01-3 < *7571 4050 4050 4050 FIELD 1 *777 6^200+RKA2-4600 6^200+RKA1-4600 6^200+RKA0-4600 *575 6375 6374 6373 /RKA0,RKA1, AND RKA2 > IFZERO RK01-4 < *7570 4050 4050 4050 4050 FIELD 1 *776 6^200+RKA3-4600 6^200+RKA2-4600 6^200+RKA1-4600 6^200+RKA0-4600 *574 6376 6375 6374 6373 /RKA0,RKA1,RKA2,RKA3 >> FIELD 0 IFNZRO TD8ESYS < *7447 7607 /SYS ENTRY AT 7607 IFZERO TD8ESYS-2 <*7450;SDTA1> IFZERO TD8E <*7453 7607 /MAKE DTA0 AND DTA1 RESIDENT SDTA1> > *6777 /THIS IS SETUP FOR CD AT BUILD TIME 0 IFNZRO TD8ESYS <*6777;6> IFNZRO RK8 <IFNZRO RK01 <*7462;7607>> 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; 4200; 5000;DVHORG+4; JMP BERR /DTA HANDLERS WRITE; 4100; 6400;DVHORG+0; JMP BERR /PTR & PTP HANDLERS IFNZRO TD8ESYS < WRITE /WRITE OUT TD8E BOOTSTRAP 4120 7400 /WE PUT IT IN 27400 0 JMP BERR WRITE;4221;7400;6;JMP BERR /FIELD 1&2 RES. WRITE;4100;7400;6;JMP BERR > IFNZRO RK01 < WRITE /WRITE OUT RK8 HANDLERS 4100 4600 DVHORG+5 JMP BERR > ISZ WRDEVH BERR, JMP I WRDEVH
/THIS IS THE MULTIPLE RK8 HANDLER. IT IS A MODIFICATION OF /THE SINGLE ENTRY SYSTEM HANDLER. SELECT ERRORS ARE NOT /TREATED IN A SPECIAL WAY IN THIS HANDLER. IFZERO RK01+LIST <XLIST> IFNZRO RK01 < DLDC=6732 DCLS=6742 DRDS=6741 DSKD=6745 DSKE=6747 DCLA=6751 DLWC=6753 DLCA=6755 DLDR=6733 *4600 /THE ENTRY POINTS FOR RK8 ARE SET AT 20-23. VITAL!! RLOC, 0 /FOR BUFFER ADDRESS RREC, 0 /HOLDS RECORD NO. R76, 76 RDLDR, DLDR RKANO, 0 RKAISZ, ISZ RKANO RBLKCT, 0 /HOLDS TOTAL WORD COUNT RERRCT, 0 /# ERROR TRIES R177, 177 R40, 40 RM3, -3 R400, 400 R7400, 7400 RKA, 0 /HOLDS ARGUMENT ADDRESS RZERO, 0 R34, 34 ZBLOCK 4620-. RKA0, ISZ RKANO RKA1, ISZ RKANO RKA2, ISZ RKANO RKA3, ISZ RKANO R7600, 7600 TAD RM3 DCA RERRCT /3 TRIES ON ERROR TAD RKANO /THIS CODE RESTORES THE ISZ RKANO CMA /WHICH WAS DESTROYED IN THE CALL TAD RKATAD DCA RFUNCT CLA CLL CML RTR TAD RFUNCT /FORM DCA RKAN,WHERE RKAN WAS CALLED DCA RKADCA RDF TAD RCDIF /RESTORE TO PROPER FIELD DCA REXIT RFUNCT, HLT /CONTAINS TAD RKAN WHEN EXECUTED DCA RKA /SO WE SAVE ADDRESS OF ARGUMENTS TAD RKAISZ /AND NOW RESTORE THE ISZ RKANO RKADCA, HLT TAD I RKA /FUNCTION WORD DCA RFUNCT ISZ RKA CLA CMA /BUFFER ADDRESS -1 TAD I RKA DCA RLOC ISZ RKA TAD I RKA /RECORD NUMBER DCA RREC TAD RFUNCT /NOW FORM RK8 IOT FROM FUNCTION. CLL RAL /READ/WRITE TO LINK AND R7600 /ISOLATE WORD COUNT DCA RBLKCT RTL /READ=6733,WRITE=6735 TAD RDLDR DCA RINST
RLOOP, TAD RLOC /LOAD CURRENT ADDRESS DLCA TAD RBLKCT /TEST WORD COUNT FOR SIZE. RKATAD, TAD R7600 /FULL=256, HALF=128 SZA CLA TAD R7600 TAD R7600 DLWC /LOAD WORD COUNT TAD RFUNCT /LOADING COMMAND WORD WITH FIELD CMA RAR /AND DISK SELECTION AND R34 TAD RKANO CMA RAL AND R76 DLDC DCLS /CLEARS SELECT ERROR IF STILL UP TAD RREC RINST, HLT /GETS DISK IOT DSKD /TEST COMPLETION FLAG SKP CLA /NOT DONE YET JMP RCTLC /DONE. CHECK FOR ^C DSKE /IS ERROR UP? JMP .-4 RERROR, ISZ RERRCT /ERROR BUMP COUNT JMP .+4 DCA RKANO /IT'S ALL OVER. CLEAR FOR RECALL CLA CLL CML RAR JMP RETRN+1 /FATAL ERROR DRDS /LOOK AT STSTUS AND R40 /TRACK NOT FOUND BIT ISZ RZERO /CARRY OVER FROM SYSTEM HANDLER JMP .-1 SNA CLA JMP RLOOP /TRY AGAIN DCLA /RECALIBRATE DSKD JMP .-1 JMP RLOOP /AND TRY AGAIN RNEXT, DSKE /TRANSFER DONE. IS ERROR UP? SKP JMP RERROR /YEP.TOUGH LUCK ISZ RREC /BUMP RECORD NUMBER TAD RLOC TAD R400 /BUMP CURRENT ADDRESS DCA RLOC TAD RBLKCT /DONE WITH ALL TRANSFERS? CLL CML TAD R7400 SZL SNA JMP .+3 DCA RBLKCT /NO..UPDATE TOTAL WORD COUNT JMP RLOOP /AND DO THE TRANSFER CLA DCA RKANO /CLEAR FOR RECALL RETRN, ISZ RKA ISZ RKA REXIT, HLT JMP I RKA RCTLC, KRS /TEST FOR ^C IN KEYBOARD BUFFER AND R177 /WITH THE FLAG UP TAD RM3 SNA CLA KSF JMP RNEXT /NO ^C, KEEP GOING RCDIF, CIF CDF 0 JMP I R7600 > IFZERO RK01+LIST <XLIST>
*5600 /CARD READER HANDLER FOR PS8 /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
IFNZRO LP08 <IFZERO LIST <XLIST>> 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 <IFZERO LIST <XLIST>>
IFZERO LP08+LIST <XLIST> 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 > IFZERO LP08+LIST <XLIST>
*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
IFNZRO LINCTAPE+TD8E+TD8ESYS <IFZERO LIST <XLIST>> IFZERO LINCTAPE+TD8E < *5000 /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+TD8E+TD8ESYS <IFZERO LIST <XLIST>>
/TD8E HANDLER..2 PAGE 8/17/71 /TWO PAGE, PAGE RELOCATABLE HADLER FOR THE TD8E DECTAPE. /THIS HANDLER DRIVES UNITS 0&1, AND HAS ENTRY POINTS /AT LOCATIONS 10 AND 14 RELATIVE TO THE LOAD POINT. IFZERO TD8E+LIST <XLIST> IFNZRO TD8E < /THE IOT'S ARE: SDSS=6771 /SKIP ON SINGLE LINE FLAG SDST=6772 /SKIP ON TIME ERROR SDSQ=6773 /SKIP ON QUAD LINE FLAG SDLC=6774 /LOAD TAPE COMMAND REGISTER SDLD=6775 /LOAD DATA REGISTER SDRC=6776 /READ COMMAND REGISTER SDRD=6777 /READ DATA REGISTER *5000 NXINIT, 7600 /CLEAR AC HERE!!! JMS I CINIT2 /PART OF INITIALIZATION..DO THE PART BASE2, DCA JINIT /ON SECOND PAGE AND THEN TO JINIT JMP JINIT BUFF, 0 PGCT, 0 FUNCT, 0 C1000, 1000 DTA0, 0 /ENTRY FOR UNIT 0 CLA CLL JMP DTA1X UNIT, 0 /FILLER WORD DTA1, 0 /ENTRY FOR UNIT 1 CLA CLL CML TAD DTA1 DCA DTA0 /PICK UP ARGS AT DTA0 DTA1X, RAR DCA UNIT /UNIT # FROM LINK RDF TAD C6203 DCA LEAVE /SET UP EXIT FROM HANDLER TAD I DTA0 DCA FUNCT /SAVE FUNCTION WORD TAD FUNCT CLL RAL C200, AND CM200 /GET A PAGE COUNT DCA PGCT TAD FUNCT C374, AND C70 /ISOLATE FIELD OF TRANSFER TAD C6203 DCA XFIELD ISZ DTA0 /POINT TO BUFFER TAD I DTA0 DCA BUFF ISZ DTA0 /POINT TO RECORD TAD I DTA0 CLL RAL /CONVERT TO DECTAPE BLOCKS DCA TBLOCK ISZ DTA0 /POINT TO ERROR RET. C6203, CIF CDF 0
JINIT, JMP INIT /FIRST TIME THRU IT GETS EXECUTED /THE RETURN FROM INIT ZEROES IT CLA CLL CMA RTL DCA ERCNT /3 ERROR TRIES TAD UNIT DCA I CXUNIT JMS I CSELCT /CHECK FOR SELEC ERROR JMP .-1 /LOOPS IF NO ^C AND SELECT ERROR TAD FUNCT CLL RAR JMP GO /OK.. START THE SEARCH TRWCOM, SDST /TIME OR CHECK SUM ERROR? SZA CLA JMP TRY3 /YES TRY UP TO 3 TIMES TAD PGCT /NO.. IS PAGE COUNT EXHAUSTED? TAD CM200 SNA JMP EXIT /YES.. DONE THIS TRANSFER DCA PGCT /NEW PAGE COUNT ISZ TBLOCK TAD BUFF TAD C200 /GET NEW BUFFER ADDRESS DCA BUFF CLL CML /FORCE FORWARD MOTION GO, CLA CML RTR /PUT IN DIRECTION BIT TAD C1000 TAD UNIT SDLC /INITIATE THE MOTION JMS I CRDQAD /WAIT FOR 8 LINES TO PASS JMS I CRDQAD M20, 7760 /DON'T CARE IF IT DOES SKIP!!! TSRCH, SDSS /WAIT FOR BLOCK MARK OR END ZONE JMP .-1 SDRC CLL RTL /DIRECTION TO LINK, DATA TO AC 4-9 AND C374 /ISOLATE M.T BITS TAD M110 /IS IT END ZONE? SNA JMP ENDZ /YES..DO SOMETHING REASONABLE TAD M20 /HOW ABOUT BLOCK MARK? SZA CLA JMP TSRCH /NEITHER..KEEP LOOKING SDRD /WHAT IS THIS BLOCK'S #? SZL /IF IN REVERSE, LOOK FOR 3 BEFORE TAD TC3 /THE ACTUAL TARGET BLOCK CMA TAD TBLOCK CMA SNA /IS THIS THE BLOCK? JMP TFOUND /YES..HAVE CORRECT ONE M110, SZL SNA CLA /ARE WE HEADED PROPERLY? JMP TSRCH /YES.. KEEP LOOKING ENDZ, SDRC /IF WE ARE IN END ZONE FORWARD, WE LOSE CLL RTL SZL CLA JMP GO /EXECUTE TURN AROUND AND SEARCH
TRY3, ISZ ERCNT /TRIED 3 TIMES? JMP GO CLA CLL /YES.. TAKE FATAL RETURN JMP FATAL EXIT, ISZ DTA0 /NORMAL RETURN CLL CML FATAL, TAD UNIT /STOP TAPE FIRST SDLC CLA CML RAR /EITHER 0 OR 4000 IN AC LEAVE, HLT /GETS CIF CDF N JMP I DTA0 INIT, JMS . /FIND OUT WHERE WE GOT LOADED BASE, TAD CRDQAD SPA /NEGATIVE ENDS LIST JMP NXINIT TAD INIT DCA CRDQAD ISZ .-1 ISZ BASE JMP BASE CRDQAD, R4LINE-BASE CINIT2, INIT2-BASE CSELCT, SELECT-BASE CXUNIT, XUNIT-BASE *5167 TFOUND, SZL CLA /ARE E IN RIGHT DIRECTION JMP GO /NOT YET TAD FUNCT CLL RAL /R/W TO LINK CLA C70, 70 TC3, 3 TAD BUFF XFIELD, HLT /CONTROL 'TRICKLES THROUGH TBLOCK=DTA1 ERCNT=INIT+1 CM200=NXINIT DTA2=DTA0 DTA3=DTA1 DTA4=DTA0 DTA5=DTA1 DTA6=DTA0 DTA7=DTA1
*5200 CIF 0 /WE ARE IN FIELD 0 DCA XBUFF RAR DCA XFUNCT /READ/WRITE TO FUNCTION TAD C7600 DCA WORDS /128 WORDS/BLOCK RGRD, SDSS JMP .-1 /LOOK FOR REVERSE GUARD PATTERN SDRC AND K77 TAD CM32 SZA CLA /IF NOT REV. GUARD, KEEP LOOKING JMP RGRD TAD XFUNCT K7700, SMA CLA /IS IT READ OR WRITE? JMP TREAD SDRC /CHECK FOR WRITE LOCKOUT AND TC300 CLL /SETUP TO RETRY IF WRITE LOCK SZA CLA JMP I CTRY3 /IF LOCKED OUT, ERROR JMS R4LINE /SKIP A WORD C7600, 7600 /CLA TAD C1400 TAD XUNIT SDLC /TURN ON WRITE HEAD CLA CMA JMS W4LINE /7777 IN REV. CHECKSUM CLA CMA DCA CSUM /AND ALSO TAPE CHECKSUM WRTLP, TAD I XBUFF JMS W4LINE ISZ XBUFF /INCREMENT BUFF. ADD. K77, 77 ISZ WORDS /DONE A BLOCK? JMP WRTLP JMS W4LINE /A 129 TH WORD OF 0 JMS GCHK /GET 6 BIT CHECKSUM JMS W4LINE /WRITE IT TO TAPE JMS W4LINE /LET CHECK SUM FINISH JMP I CRWCOM /SEE IF WE ARE FINISHED
TREAD, JMS R4LINE JMS R4LINE /SKIP CONTROL WORDS JMS R4LINE AND K77 /CHECKSUM TAD K7700 DCA CSUM RDLP, JMS R4LINE JMS EFUN /ADD WORD TO CHECKSUM DCA I XBUFF ISZ XBUFF TC300, 300 ISZ WORDS /DONE BLOCK? JMP RDLP JMS R4LINE JMS EFUN /CHECK SUM 129 TH WORD JMS R4LINE AND K7700 /READ CHECKSUM JMS EFUN JMS GCHK /COMPARE TAPE AND OUR CHECKSUM JMP I CRWCOM W4LINE, 0 /ADD TO CHECKSUM AND WRITE A 12 BIT JMS EFUN /WORD SDSQ JMP .-1 /SKIP ON QUAD LINE FLAG SDLD CLA /AC IS NOT CLEARED AFTER SDLD JMP I W4LINE R4LINE, 0 /WAIT FOR QUAD FLAG AND READ SDSQ JMP .-1 SDRD JMP I R4LINE EFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM CMA DCA ETMP /ACTUALLY CHECKSUMS ON DECTAPE ARE TAD ETMP /EQUIVALENCE OF ALL WORDS IN A RCORD AND CSUM /6 BITS AT A TIME. SINCE EQUIVALENCE CIA /IS ASSOCIATIVE WE DO IT 12 AT A TIME CLL RAL /AND CONDENSE LATER. TAD ETMP /IDENTITIES USED ARE: TAD CSUM /A+B=(A.XOR.B)+2*(A.AND.B) DCA CSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) TAD ETMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) CMA JMP I EFUN
GCHK, 0 /FORM 6 BIT CHECKSUM CLA TAD CSUM CLL CMA RTL RTL RTL JMS EFUN CLA CLL CML TAD CSUM AND K7700 JMP I GCHK INIT2, 0 /TIS INITIALIZES LOCS IN PAGE 2 INIT3, TAD CTRY3 SNA JMP I INIT2 /0 ENDS LIST TAD INIT2 DCA CTRY3 /UPDATE THE LIST ISZ .-1 ISZ INIT3 JMP INIT3 CTRY3, TRY3-BASE2 CRWCOM, TRWCOM-BASE2 XBUFF, 0 /0 MUST TERMINATE IT!! CM32, -32 C1400, 1400 SELECT, 0 /THIS ROUTINE CHECKS FOR SELECT TAD XUNIT /AND ^C TYPED SDLC SDRC /GET STATUS AND SEE IF SELECT ERROR ON AND C100 SNA CLA ISZ SELECT /NOPE .TAKE NORMAL OUT KSF /SEE IF FLAG IS UP JMP I SELECT /NO..EXIT KRB TAD M203 /IS IT A ^C? SZA CLA JMP I SELECT /NO..EXIT JMP I C7600 C100, 100 M203, -203 XFUNCT=INIT2 CSUM=XFUNCT+1 WORDS=CSUM+1 ETMP=WORDS+1 XUNIT=ETMP+1 > IFZERO TD8E+LIST <XLIST>
IFZERO LINCTAPE+LIST <XLIST> IFNZRO LINCTAPE < *5000 /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 STDI= 0436 COM= 0017 ROLI1= 0261 ESF= 0004 LTM203, -203 LTA, 0 LTA7, 7 LTA30, 30 LTA70, 70 LTA702, 702 LT3700, 3700 LTATMP, 0 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 TAD LTCDF DCA LTSET TAD LTSET AND LTA70 CLL RTL RTL /MOVE TO BITS 0-2. CONTROLLER RTL /WANTS THEM THERE SLTARG3,DCA LTATMP TAD LTANO /GET UNIT NO. AND LTA7 CLL RAR TAD LTATMP TAD LTA30 /SET BIT 7 ON. EXTENDED ADD. MODE LINC AXO /SEND DATA TO CONTROLLER PDP LT7600, 7600 DCA LTANO /RESET UNIT NO. TAD LTARG1 RTL AND LTA3 CLL RTL TAD LTA702 /ADD TAPE INST; STORE IT DCA LTINST LTALP, TAD LTARG2 /CORE ADDRESS TO CONTROLLER LTATAD, TAD LTA200 /SAVE 129 TH WORD DCA LTATMP LTSET, 0 TAD I LTATMP DCA LTASVC /SAVE LOC. TAD LTARG2 LINC TMA LTINST, 0 /TAPE INSTRUCTION HERE LTARG3, 0 /BLOCK NO. HERE LTAWLP, PDP CLA TAD LTASVC /RESTORE 129TH WORD DCA I LTATMP TAD LTA200 /ADD 200 FOR PARITY TTY KRS TAD LTM203 /TEST FOR ^C SNA CLA KSF /IS FLAG UP? JMP NOTFUG /EITHER NOT ^C OR NO FLAG TAD LTA30 LINC ESF PDP LT7700, 7700 TAD LTASVC DCA I LTATMP LCDIF0, CDF CIF 0 JMP I LT7600 NOTFUG, LINC STDI COM ROLI1 LTA3, TAC PDP SNL JMP LTAWLP LTADUN, CLL IAC CLA IAC RTL AND LTINST SNA CLA JMP LTALP LTNERR, TAD LTARG1 AND LT3700 TAD LT7700 SNA /ALL DONE? JMP LTAXIT DCA LTARG1 /NO.. SAVE COUNT TAD LTATMP DCA LTARG2 ISZ LTARG3 JMP LTALP LTAXIT, HLT JMP I LTA LTAISZ, ISZ LTANO LTARG1, 0 LTARG2, 0 LTCDF, CDF 0 LTASVC=LTADCA > IFZERO LINCTAPE+LIST <XLIST>
*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 IFNZRO NOHSPT <IFZERO LIST <XLIST>> 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 > IFNZRO NOHSPT <IFZERO LIST <XLIST>>
/THIS IS THE PTP,PTR HANDLER FOR PEOPLE WITH /NO HIGH SPEED I/O. IFZERO NOHSPT+LIST <XLIST> 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 > IFZERO NOHSPT+LIST <XLIST>
/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 IFZERO RF08+DF32+LIST <XLIST> 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 > IFZERO RF08+DF32+LIST <XLIST>
IFZERO DECTAPE+LIST <XLIST> 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 > IFZERO DECTAPE+LIST <XLIST>
IFZERO RK8+LIST <XLIST> IFNZRO RK8 < DCLA=6751 DLDR=6733 DLDC=6732 DRDS=6741 DRWC=6752 DCLS=6742 DSKD=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 DSKD 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 DSKD 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 > IFZERO RK8+LIST <XLIST>
IFZERO LINCSYS+LIST <XLIST> 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 TAD SADCDF DCA SADSET TAD SADSET AND S70 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 SADSET, 0 SLOOP, CLA CLL CMA RTL DCA SERRCT /NO. ERROR TRIES STRY, TAD SADR TAD S200 DCA SADNXT TAD I SADNXT DCA SADSVC TAD SADR LINC TMA /CORE ADDRESS TO CONTROL SINST, 0 /READ OR WRITE SBLOK, 0 /BLOCK NO. HERE PDP CMA /CHECKSUM HERE. 7777=GOOD DCA SADSET TAD SADSVC DCA I SADNXT IFNZRO .-7700 <NZERR> SKP HLT TAD SADSET SZA CLA JMP SERR SOK, ISZ SBLOK TAD SADNXT DCA SADR TAD SFUN TAD S7600 SNA /ALL DONE? JMP SDONE /YES DCA SFUN JMP SLOOP SERR, TAD SINST 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 SADCDF, CDF 0 SADNXT, 0 SADSVC, 0 > IFZERO LINCSYS+LIST <XLIST>
/MONITOR BOOTSTRAP AND GENERATOR IFZERO RF08+DF32+LIST <XLIST> 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 > IFZERO RF08+DF32+LIST <XLIST>
IFZERO DECTAPE+LIST <XLIST> 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 > IFZERO DECTAPE+LIST <XLIST>
IFZERO RK8+LIST <XLIST> 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 DSKD /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 > IFZERO RK8+LIST <XLIST>
IFZERO LINCSYS+LIST <XLIST> 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". > IFZERO LINCSYS+LIST <XLIST>
/TD8E DECTAPE BOOTSTRAP RECORD IFZERO TD8ESYS+LIST <XLIST> IFNZRO TD8ESYS < FIELD 2 *7420 NOPUNCH *7400 ENPUNCH /THE BINARY GETS LOADED INTO 7417 INITIALYY, AND /WRITTEN OUT AS PART OF RECORD 0. WHEN THE 30 WORD /BOOTSTRAP IS USED, THIS CODE GETS READ INTO 7400. SDSS=6771 SDST=6772 SDSQ=6773 SDLC=6774 SDLD=6775 SDRC=6776 SDRD=6777 TDBOOT, TAD K7600 /128 WORDS PER PAGE DCA TDWCT SDSS /WAIT FOR A BLOCK MARK (TAPE IS JMP .-1 /STILL MOVING) SDRC AND TD77 TAD KM26 /IS IT A BLOCK MARK? SZA CLA JMP TDBOOT+2 /NO..WAIT A WHILE LONGER SDRD /GET THE BLOCK NO. TDBKNO, TAD TDM14 /NEED BLOCKS 14&15 (REC. 6) SZA CLA JMP TDBOOT+2 /NOT YET, BUSTER TDRGRD, SDSS JMP .-1 /NOW LET'S LOOK FOR A REVERSE GUARD WORD SDRC AND TD77 TAD KM32 SZA CLA JMP TDRGRD /KEEP LOOKING FOR IT JMS TDRQD JMS TDRQD JMS TDRQD /SKIP CONTROL WORDS CDF 10 /LOAD UP FIELD 1 TDREAD, JMS TDRQD /GET A DATA WORD DCA I TDPTR ISZ TDPTR /ARE WE DONE? JMP TDREAD /NOT YET ISZ TDBKNO /YES..LOOK AT BLOCK 15 TAD KCDF20 DCA TDREAD-1 /LOAD UP FIELD 2 ISZ M2 /DONE THIS JUNK? JMP TDBOOT /GO DO FIELD 2 SDLC /STOP THE TAPE CIF CDF 0 JMP I K7605 TDM14, -14 -15 TDWCT, 7600 TDRQD, 0 SDSQ JMP .-1 SDRD JMP I TDRQD TDPTR=TDWCT K7600, 7600 KM26, -26 KM32, -32 KCDF20, CDF 20 M2, -2 K7605, 7605 TD77, 77 >
/TD8E DECTAPE SYSTEM HANDLER /THIS HANDLER CAN DRIVE UNITS 0&1, AND IS PERMANENTLY /RESIDENT IN FIELDS 0&2. IFNZRO TD8ESYS < FIELD 0 *6607 NOPUNCH *7607 ENPUNCH SHNDLR, 0 /UNIT 0 ENTRY POINT CLA CLL JMP SHND2 C3, 3 S70, 70 SDTA1, 0 /UNIT 1 ENTRY CLA CLL CML SC1000, TAD SDTA1 /DOUBLES AS CONSTANT 1000 DCA SHNDLR /GET ARGS AT SHNDLR SHND2, RAR /UNIT # DCA SUNIT RDF /SETUP FOR EXIT TAD S6203 DCA EFLD TAD I SHNDLR /FUNCTION WORD SDLD /PUT IT IN DATA EGISTER AND S70 /SDLD DOES NOT 0 AC..GET FIELD TAD S6203 /CIF CDF N FOR TRANSFER FIELD DCA TFLD ISZ SHNDLR TAD I SHNDLR /BUFFER ADDRESS DCA BPTR ISZ SHNDLR TAD I SHNDLR /BLOCK #. TIMES 2 FOR REAL # CLL RAL DCA BLOCK ISZ SHNDLR /POINT TO ERROR EXIT TAD SUNIT SDLC /CLEAR RESIDUAL TIME ERROR (IF ANY) CIF 20 JMP F2SET /INITIALIZE FIELD 2 F1GO, SDRD /INITIAL DIRECTION TO LINK RAR JMP RGO RENTER, TAD BPTR /DONE THIS BLOCK..NEXT ADDRESS TAD SC200 DCA BPTR ISZ BLOCK /NEXT TAPE BLOCK..CAN'T SKIP CLL CML /FORCE FORWARD MOTION RGO, CLA CML RTR /LINK TO MOTION BIT TAD SC1000 TAD SUNIT SDLC /MOVE THE TAPE SDSQ JMP .-1 SDSQ JMP .-1 SDRD /THIS IS NEEDED, ELSE TIME ERROR!!!
SRCH, SDSS /WAIT FOR A BLOCK MARK JMP .-1 SDRC /GET MARK TRACK BITS CLL RTL /DIRECTION TO LINK AND SC374 TAD SM110 /IS IT A N END ZONE? SNA JMP SENDZ /YES TAD SM20 /MAYBE A BLOCK MARK? SZA CLA JMP SRCH /NEITHER..KEEP GOING SDRD /READ THE BLOCK # SZL /IF REVERSE, LOOK 3 AHEAD OF TARGET TAD C3 CMA TAD BLOCK CMA SNA /IS IT THE RIGHT ONE? JMP FOUND /YES SM110, CLA SNA SZL /SNA SUPERFLUOUS..ONLY SZL VALID JMP SRCH /HEADED FOR IT..KEEP GOING SENDZ, SDRC CLL RTL SZL CLA /IF IN END ZONE FORWARD, GIVE ERROR JMP RGO CIF 20 /IF IT IS REALL END ZONE, AN ERROR JMP ERROR FOUND, SZL CLA /RIGHT BLOCK..HOW ABOUT DIRECTION? JMP RGO /WRONG..EXECUTE TURNAROUND TAD BPTR TFLD, HLT /GETS CIF CDF N CIF 20 JMP RDWT /LET'S TRANSFER DATA SEXIT, ISZ SHNDLR /NORMAL RETURN SEREX, TAD SUNIT /STOP THE TAPE SDLC CML CLA RAR /EITHER 0 OR 4000 IN AC ON RETURN EFLD, HLT JMP I SHNDLR BPTR=7755 BLOCK=7754 SUNIT=SDTA1 S6203, 6203 SC200, 200 SC374, 374 SM20, -20
FIELD 2 *7600 XPTR, 0 /BUFFER POINTER F2SET, CLA CLL CMA RTL /3 ERROR TRIES DCA TRYCNT SDRC /INSERT UNIT # DCA SXUNIT F26203, CIF CDF 0 SDRD /FUNCTION WORD CLL RAL AND CX7600 /PAGE COUNT DCA XPGCT SDRD DCA SXFUN /SAVE THE FUNCTION WORD JMP F1GO RDWT, DCA XPTR /SAVE NEW BUFFER ADDRESS TAD CX7600 DCA XWCNT /128 WORDS PER BLOCK REVGRD, SDSS /WAIT FOR REVERSE GUARD WORD JMP .-1 SDRC AND X77 TAD XM32 /IS IT REVERSE GUARD? SZA CLA JMP REVGRD /NO TAD SXFUN SK7700, SMA CLA /READ OR WRITE? JMP READ /READ SDRC AND C300 /ERRORS ON WRITE LOCKOUT AND TIME SZA CLA JMP ERROR JMS RDQUAD /SKIP A WORD CX7600, 7600 TAD WRLP TAD SXUNIT SDLC /TURN ON THE WRITE CLA CMA JMS WRQUAD /WRITE 7777 IN REV. CHECKSUM CLA CMA DCA SCKSUM /AND ALSO IN COMPUTE CHECKSUM WRLP, TAD I XPTR JMS WRQUAD /WRITE THE DATA ISZ XPTR X77, 77 /JUST IN CASE ISZ XWCNT /DONE 128? JMP WRLP JMS WRQUAD /WRITE AND CHECKSUM A WORD OF 0 JMS GETCHK /GET CHECKSUM JMS WRQUAD JMS WRQUAD /LET CHECKSUM GET WRITTEN
RWCOM, SDST /CHECK FOR TIME AND CHECKSUM ERRORS SZA CLA JMP ERROR /NOTE THAT LINK IS OFF AT RWCOM CIF CDF 0 TAD XPGCT /FINISHED TRANSFER? TAD CX7600 /LINK GOES ON HERE SNA JMP SEXIT /YES..GETOUT DCA XPGCT JMP RENTER READ, JMS RDQUAD /SKIP CONTROL WORDS JMS RDQUAD JMS RDQUAD /GET CHECKSUM AND X77 TAD SK7700 DCA SCKSUM SRDLP, JMS RDQUAD JMS EQUFUN DCA I XPTR /GET DATA AND STORE IT ISZ XPTR C300, 300 ISZ XWCNT /DONE ALL? JMP SRDLP /NO JMS RDQUAD /READ AND CHECKSUM LAST WORD JMS EQUFUN JMS RDQUAD /GET CHECKSUM AND SK7700 JMS EQUFUN JMS GETCHK JMP RWCOM ERROR, CLA CLL /THIS CAUSES SEARCH REVERSE AT RGO CIF CDF 0 ISZ TRYCNT /EXHAUSTED ERROR TRIES? JMP RGO JMP SEREX /YES..FATAL EXIT WRQUAD, 0 /WRITE A 12 BIT WORD JMS EQUFUN /CHECKSUM IT SDSQ JMP .-1 SDLD CLA CLL /SDLD DOES NOT CLEAR AC JMP I WRQUAD RDQUAD, 0 /READ A 12 BIT WORD SDSQ JMP .-1 SDRD JMP I RDQUAD EQUFUN, 0 /EQUIVALENCE CHECKSUM CMA DCA EQUTMP TAD EQUTMP AND SCKSUM CIA CLL RAL TAD EQUTMP TAD SCKSUM DCA SCKSUM TAD EQUTMP CLL CMA JMP I EQUFUN GETCHK, 0 CLA TAD SCKSUM CLL CMA RTL RTL RTL JMS EQUFUN CLA CLL TAD SCKSUM AND SK7700 JMP I GETCHK SXUNIT, 0 XPGCT, 0 SXFUN, 0 TRYCNT, 0 XWCNT, 0 XM32, -32 SCKSUM, 0 EQUTMP, 0 > IFZERO TD8ESYS+LIST <XLIST> $$$$$$$$$$$$$$



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