.TITLE ODMP15 /COPYRIGHT 1969, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. /OCTAL DUMP IS A PROGRAM WHICH ALLOWS THE USER TO /OBTAIN A TYPED OUTPUT OF THE CONTENTS OF ONE OR SEVERAL /REGISTERS IN OCTAL FORM. / /INPUT: THE USER MUST GIVE THE STARTING AND ENDING ADDRESSES / TO BE PRINTED. ALL REGISTERS IN THE RANGE WILL / BE PRINTED. THE 1ST ADDRESS MUST NOT BE GREATER / THAN THE 2ND. /FORMAT:A) TO DUMP 10 TO 25, TYPE 10-25- / B) TO DUMP REG 4000 TYPE, 4000-4000- / C) TO DUMP ALL REGISTERS FROM THE STARTING ADDRESS A / UP TO THE END OF MEMORY (7777), TYPE 100/WHERE / ADDRESS A IS 100. / / /ERRORS: IF AN INCORRECT CHARACTER IS TYPED, THE PROGRAM ANSWERS / WITH A ? CRLF (QUESTION MARK, CARRIAGE RETURN, LINE / FEED) AND CYCLES BACK TO ACCEPT A WHOLE NEW SET OF / ADDRESSES. .ABS NLD KRS=700332 KRB=700312 PSA=700204 PSF=700201 TLS=700406 KSF=700301 TSF=700401 .IFUND LOW .LOC 17300 .ENDC .IFDEF LOW .LOC LOW .ENDC BEGIN TLS+10  /INITIALIZE TELETYPE LAC OUTLUP+3 DAC %TODOP+1 JMS %TODSK JMS %TODSK LAW -17 DAC %TODA LAC (TABLE JMS OUTLUP / /READ INPUT CHARACTER / JMS %TODIN SAD (310 /H? JMS %HIGH LOOPS JMS %TODSK JMS %CRLF LAW -2 /GET TWO ADDRESSES DAC %TODA /AND START DUMPING JMS %TODSK /CR, UPSPACE PRINTER LAW -6 /HIGHEST ADDRESS=5 CHARACTERS DAC %TODB /MAX (7777) DZM %TODC /CLEAR BUILDER WORD /END OF INITIALIZING %TODRD JMS %TODIN /READ CHARACTER DAC %TODD /SAVE WHOLE CHARACTER FOR CHECKING SAD (257) /WAS CHARACTER A SLASH (/). JMP %TODSL SAD (255) /WAS CHARACTER A MINUS SIGH(-). JMP %TODMS ISZ %TODB /IF CHARACTER WAS FIFTH CHARACTER OF SKP  /STRING AND WAS NOT A SLASH OR MINUS JMP %TODER /SIGN AN ERROR EXISTS / /THE CHARACTER MUST BE IN THE RANGE EOF ASCII 260-267; OTHERWISE, IT /IS UNRECOGNIZABLE / TAD (-270) /ERROR IF CHARACTER NOT LESS SMA  /THAN ASCII 270. JMP %TODER / LAW -260 /ERROR IF CHARACTER NOT EQUAL TO TAD %TODD /OR GREATER THAN ASCII 260. SPA JMP %TODER / /INPUT CHARACTER IS VALID OCTAL NUMBER. SHIFT THE BUILDER /WORD LEFT 3-BITS AND CONTINUE BUILDING. / DAC %TODD /ONLY RIGHT MOST 3 BITS ARE LEFT LAC %TODC /BUILDER WORD. RCL RTL TAD %TODD DAC %TODC JMP %TODRD /GET NEXT CHARACTER / /AT %TODSL THE LOW ORDER ADDRESS WILL BE WHATEVER WAS BEING /BUILT BY THE BUILDER WORD. THE HIGH ORDER ADDRESS WILL BE 7777. / %TODSL LAC %TODC /BUILDER WORD DAC %TODL /LOWER LAC 7777 /SAVE TEMPORARILY DAC %HIGH  DZM 7777 DZM 17777 ISZ 17777 LAC 7777 SNA!CLA  TAD (10000 TAD (7777 DAC OUTLUP /RESTORE 7777 LAC %HIGH DAC 7777 LAC OUTLUP JMP %TODAD / /AT %TODMS A MINUS SIGN WAS READ. THE NEXT AVAILABLE ADDRESS /WILL BE WHATEVER WAS BEING BUILT. IF THIS WAS THE 2ND ADDRESS %TODMS LAC %TODC /WAS THIS THE 2ND ADDRESS ISZ %TODA SKP JMP %TODAD /STORE LOW-ADDRESS DAC %TODL JMP %TODRD-3 /GET 2ND ADDRESS /AT %TODAD THE ACCUMULATOR HAS THE HIGH ORDER ADDRESS AND THE /LOW-ORDER ADDRESS IS STORED IN %TODL. / %TODAD CMA!CLL  /COMP OF HIGH ADDRESS TAD %TODL /ADD LOW ADDRESS TO GET REGISTER COUNT-1. SMA JMP %TODER DAC %TODA /#OF REGISTERS TO BE PRINTED JMS %TODSK JMS %TODSK JMS GETSV %TODBL JMS %CRLF JMS SAME LAW -5 DAC %TODC LAW -10 DAC %TODB LAC %TODL /PRINT ADDRESS RCL RTL JMS %TODLL %TODL1 JMS SET LAC* %TODL ISZ %TODL JMS %TODLL ISZ %TODA SKP JMP LOOPS ISZ %TODB JMP %TODL1 JMS GETSV JMP %TODBL %TODLL 0  /ENTR-EXIT RCL RAL  /LITTLE LOOP RTL  /CLEAR LINK AND SHIFT LEFT DAC %TODD /ONCE BEFORE DOING THE AND (7 /FIRST PRINTABLE CHAR. TAD (260 JMS %TODOP LAC %TODD ISZ %TODC JMP %TODLL+2 JMP* %TODLL /EXIT/ %TODIN 0 KRS KSF JMP .-1 KRB JMS LO  /ECHO OR NOT JMP* %TODIN / %TODOP 0 XX JMP* %TODOP LO 0 TSF JMP .-1 TLS JMP* LO HI 0 PSF JMP .-1 PSA JMP* HI %HIGH 0 PSA+10  /INITIALIZE LAC (JMS HI DAC %TODOP+1 JMP* %HIGH / %TODER LAW 277 /TYPE A QUESTION MARK JMS LO JMP LOOPS /TYPE A CARRIAGE RETURN/LINE FEED %TODSK 0 LAW 212 JMS LO LAW 215 JMS LO JMP* %TODSK OUTLUP 0 DAC %TODB LAC* %TODB JMS LO ISZ %TODB ISZ %TODA JMP .-4 JMP* OUTLUP / %CRLF 0 LAW 215 JMS %TODOP LAW 212 JMS %TODOP JMP* %CRLF %TODA 0  /REGISTER COUNTER %TODB 0  /NUMBER OF WORDS PER LINE/ NO. OF INPUT CHARACTERS %TODC 0  /NUMBER OF CHARACTERS TO BE PRINTED PER WORD %TODD 0  /WORK WORD FOR ROTATING 3-BIT SETS %TODL 0  /ADDRESS (LEFT ADJUSTED) OF REGISTERS TO BE PRINTED TABLE 317  /O 325  /U 324  /T 320  /P 325  /U 324  /T 240  / 304  /D 305  /E 326  /V 311  /I 303  /C 305  /E 240  / 275  /= SAME 0 DZM %SAMSW LAC %TODL DAC %SADDR LAW -1 TAD %TODA DAC %TODB  /SAVE TOTAL COUNT SAMEA LAW -10 DAC %TODC SAMEB LAC* %SADDR  /GET A WORD AND ISZ %SADDR SAD SVALUE  /COMPARE THEM. SKP JMP NOSAME ISZ %TODB SKP JMP NOSAME  /LAST REGISTER ENCOUNTERED ISZ %TODC JMP SAMEB LAC %SADDR DAC %TODL LAC %TODB TAD (1 DAC %TODA ISZ %SAMSW JMP SAMEA /AT NOSAME, REGISTERS IN THE SAME LINE ARE UNEQUAL /OR THE REGISTER COUNT IS FULL. IF THE REGISTER COUNT IS /FULL AND THE SAME SWITCH IS OFF EXIT TO THE MAIN LINE. /IF THE COUNT IS FULL AND THE SWITCH IS ON, EXIT TO THE /BEGINNING OF OCTAL DUMP. / NOSAME LAC %SAMSW SZA JMS OMIT JMP* SAME / OMIT 0 JMS SET JMS SET LAC SVALUE JMS %TODLL LAW -10 DAC SET LAC (OMES DAC %TODC OMITA LAC* %TODC ISZ %TODC JMS %TODOP ISZ SET JMP OMITA JMS %CRLF LAC %TODB SNA JMP LOOPS JMP* OMIT / OMES 240   / (SPACE) 317   /O 315   /M 311   /I 324   /T 324   /T 305   /E 304   /D / SET 0 LAW 240 JMS %TODOP LAW 240 JMS %TODOP LAW -6 DAC %TODC JMP* SET %SAMSW=%TODSK %SADDR 0 SVALUE=%TODIN GETSV 0 LAC* %TODL DAC SVALUE JMP* GETSV .END BEGIN