File CONFIG.03

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

/	PS/8 SYSTEM CONFIGURATOR	CONFIG.002

/2 DECEMBER 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 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 W00x!NxLWIz`Sk



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