File 5FCNF.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.

/ 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. DF32=1 /THIS SYSTEM WILL BE ON DF32+PDP-5F 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+4000 /TWO PAGE HANDLER 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 WRITE; 4210; 5200;DVHORG+3; JMP BERR /PDP-5/F LPT HANDLER 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
*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 /MODIFICATIONS FOR PDP-5/F TC01 DECTAPE /OCTOBER 01, 1973 /SOFTWARE ENGINEERING /R.L.C. /DEFINE WORD COUNT AND CORE ADDRESS REG IOTS LDWC=6743 LDCA=6753 RDCA=6754 RDWC=6744 D177, 177 DM3, -3 DBLOCK, 0 DBLKCT, 0 DLOC, 0 DTA, 0 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 LDCA 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 LDCA /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 LDWC /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 DTLB /CLEAR EXTENDED ADDRESS REGISTER RAR /GET ERROR CODE FROM LINK INTO AC0 JMP I DTA /AND EXIT >
*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 >
/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 DTLB /MUST MAKE SURE EXTADR IS CLEAR 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 LDWC /SET UP WORD COUNT CLA CMA ISZ SHNDLR TAD I SHNDLR LDCA /LOAD CORE ADDRESS REGISTER W/ 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 6611 /MUST LEAVE EXTENDED ADDRESS (CORE) CLEAR 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 IFNZRO RF08 <IFNZRO .-7700 <NZERR>; SKP; HLT> DCA SHNDLR /RESET PARAMETERS AND TRY AGAIN JMP SHNDLR+3 IFNZRO DF32 <IFNZRO .-7700 <NZERR>; SKP; HLT> SCIF, CIF 0 SYSCNT, 0 S6603, 6603 S70, 70 S7400, 7400 IFNZRO DF32 <S3700, 3700> IFNZRO RF08 <S377, 377> >
/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 >
$



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