/ PDP-12 TANK GAME / THIS IS A TANK GAME FOR THE PDP-12. AT THIS POINT THE ORIGINAL AUTHOR / IS UNKNOWN. / THE SAVE IMAGE INDICATES IT LOADS INTO LESS THAN 4K OF MEMORY. / IF THE MOOD STRIKES, MORE WORK CAN BE DONE TO FIGURE OUT WHAT IS GOING / ON IN A MORE COHERENT MANNER. / EDITS: / 30-NOV-2018 CJL / INITIAL DISASSEMBLY AND CLEANUP: CHARLES LASNER / MAY-2025 VRS / IDENTIFIED CRUFT AND SEVERAL KEY ROUTINES AND TABLES. / CONFIGURATION STUFF: / LIKESV FORCES PDP12 AND EAE, AND TURNS ON CRUFT, SO THAT THE / OUPUT WILL EXACTLY MATCH THE .SV FILE. / PDP12 GENERATES CODE FOR VR12. IF ZERO, VC8E IS USED. / EAE IF NON-ZERO, EAE HARDWARE IS USED INSTEAD OF / SOFTWARE EMULATION. (TODO) / THE OPTIONS ARE FAIRLY INDEPENDENT, SO IF YOU WANT TO YOU / CAN REORDER THINGS TO FORCE "LIKE THE .SV, BUT WITH VC8E AND / EAE EMULATION" OR WHATEVER. LIKESV=1 IFNDEF LIKESV /DEFAULT TO GENERATE ORIGINAL VERSION. IFNZRO LIKESV /THE .SV IS FOR PDP-12. IFNZRO LIKESV /THE .SV IS FOR EAE HARDWARE. IFNDEF PDP12 /DEFAULT TO VR-12, NOT VC8E. /PDP12=0 /FORCE VC8E IFNDEF EAE /DEFAULT TO EAE EMULATION. EAE=0 / FORCE EAE EMULATION /PDP12/VR12 REQUIRES LINC SUPPORT. CHECK FOR IT. IFNZRO PDP12 < IFNZRO HLT-7402 LMODE /TRY FOR LINC MODE. IFNZRO HLT /NO PDP-12 SUPPORT PMODE /START IN PDP-8 MODE. > / NOTES TO FUTURE MAINTAINERS: / 1) THIS IS A DISASSEMBLY OF A PARTICULARLY "DIRTY" CORE IMAGE OF THE / PROGRAM. AS A RESULT LARGE AREAS OF CRUFT WHICH WERE PART OF THE / SAVE IMAGE (BUT NOT PART OF THE PROGRAM) HAVE BEEN IDENTIFIED. / THE "LIKESV" SYMBOL CONTROLS WHETHER THESE WORDS ARE INCLUDED. / SOME WORDS DOUBTLESS REMAIN THAT SHOULD BE IDENTIFIED AS CRUFT. PAGE 0 /START AT THE BEGINNING. Z00, Z03 Z01, JMP . /HANG IF INTERRUPT Z02, D53 Z03, 3033 Z04, R100 I131 Z06, 0000 Z07, 0000 *10 /GET TO AUTO-INDEX AREA. Z10, 0000 Z11, 0000 Z12, 0000 Z13, 0000 Z14, 7773 Z15, 1714 Z16, 7514 Z17, 0000 *20 /GET PAST AUTO-INDEX AREA. Z20, 0000 Z21, 0000 Z22, 0000 Z23, Z24 Z24, 0002 Z25, 0001 Z26, Z01 Z27, A02 /SIGNED MULTIPLY Z30, A34 /SIGNED DIVIDE -- UNUSED? Z31, A60 /THE MAIN DRAWING ROUTINE Z32, A125 /COS() Z33, A106 /SIN() Z34, A131 Z35, D00 0000 Z37, 0000 Z40, Z34 Z41, 7610 Z42, 5046 Z43, Z02 Z44, 0034 Z45, 7777 Z46, 6203 Z47, 5450 Z50, E55 Z51, 6600 Z52, 6544 Z53, 7605 Z54, P00 Z55, O100 Z56, 2020 Z57, 0070 0603 Z61, C00 Z62, 434 0067 6003 0244 0100 0336 0334 7001 6670 A12 0215 403 Z10 Z77, 7700 Z100, A130 Z101, 0306 0564 1745 0527 Z105, 0300 1671 7404 Z110, 7600 Z111, 7403 Z112, 7402 7401 1610 Z115, 7400 Z116, 0526 Z117, START Z120, Z07 Z121, 7757 Z122, 7764 Z123, 7762 Z124, Z33 Z125, 7761 7760 7756 7775 7745 1665 1000 Z134, 7744 Z135, D113 Z136, 370 Z137, Z120 Z140, R134+1 Z141, 7700 Z142, 4157 Z143, 7757 Z144, 7740 Z145, K13 Z146, E00 Z147, 7776 Z150, Z02 Z151, 7770 Z152, C00 Z153, L00 Z154, K36 Z155, 7777 Z156, R134 Z157, 7612 Z160, 4156 Z161, 7622 Z162, N00 Z163, 0230 Z164, 0077 Z165, 2623 Z166, K00 Z167, H00 PAGE /GET TO STARTING PAGE. / STUB TO ALLOW THE USUAL STARTING ADDRESS. START, JMP I .+1 /GO TO THE REAL INTERNAL F00 /STARTING ADDRESS. A02, .-. /SIGNED MULTIPLY USING EAE CLL /CLEAR SIGN SPA /POSITIVE? CIA CML /NO, SET LINK, TAKE ABS() MQL /LOAD INTO MQ TAD I A02 /GET ARGUMENT ISZ A02 /SKIP ARG ON RETURN SPA /ARG POSITIVE? A12, CIA CML /NO, ADJUST LINK, TAKE ABS() DCA A17 /STORE MULTIPLICAND CMA RAL /GET SIGN OF RESULT DCA A33 /SAVE FOR LATER MUY /MULTIPLY MQ A17, 0000 /BY THE MULTIPLICAND SHL /DOUBLE RESULT 0000 DCA A17 /STORE RESULT FOR A MOMENT A23, MQA /GET LOW RESULT SPA CLA /WAS IT POSITIVE? IAC /NO, ADD ONE TAD A17 /TO HIGH RESULT ISZ A33 /NEED TO NEGATE? JMP I A02 /NO, JUST RETURN CIA /NEGATE JMP I A02 /RETURN A33, .-. /SIGN OF MULTIPLY RESULT A34, .-. /SIGNED DIVIDE USING EAE CLL /SET UP RESULT SIGN SPA /POSITIVE CIA CML /NO, REMEMBER SIGN AND NEGATE MQL /SAVE IN MQ CMA RAL /GET RESULT SIGN DCA A33 /SAVE IT TAD I A34 /GET OPERAND ISZ A34 /SKIP OPERAND ON RETURN SNA /OPERAND ZERO? JMP I A34 /YES, ERROR RETURN ISZ A34 /NO, SET FOR NON-ERROR RETURN DCA A52 /SAVE OPERAND DVI /DO THE DIVIDE A52, 0000 CLA MQA /GET RESULT ISZ A33 /NEED TO NEGATE? JMP I A34 /NO, JUST RETURN CIA /YES, DO IT JMP I A34 /RETURN /THIS SUBROUTINE DISPLAYS POINTS STARTING AT AC. /UNTIL THE ARGUMENT SIZED BUFFER IS EXHAUSTED. A60, 0000 DCA Z12 /STORE PIXEL POINTER TAD I A60 /GET ARGUMENT ISZ A60 /SKIP ARG WHEN RETURN SNA /DOING 0? JMP I A60 /YES, JUST RETURN. STL RAR /NO, ARITH. SHIFT RIGHT DCA Z20 /SET UP COUNTER CDF 00 /FETCH POINTS FROM FIELD 0 IOF A72, TAD I Z12 /GET X COORD TAD (400 /OFFSET IT DCA Z07 /PREPARE TO DISPLAY TAD I Z12 /GET Y COORD LINC LMODE DIS 7 /INTENSIFY THE POINT AT ([7], AC). PDP PMODE CLA CLL ISZ Z20 /DONE ALL POINTS? JMP A72 /NO, GO AGAIN CDF 00 /YES, RETURN JMP I A60 /TO CALLER / /THESE TABLE LOOKUPS COMPUTE SIN() AND COS() /THE UNIT CIRCLE IS CARVED INTO 256 PIECES. /THE ARGUMENT IS AN ANGLE BETWEEN 0 AND 255. /THE RESULT IS BETWEEN 0000 AND 3777. / A106, .-. /SIN() DCA Z21 /STORE ARGUMENT TAD Z21 AND (177 /MASK WITH 177 TAD (B00 /ADD TABLE BASE (0400) DCA Z22 /STORE POINTER TAD Z21 /GET ARGUMENT AND (200 /CHECK 0200 CLL /CLEAR NEGATION FLAG SZA CLA /0200 SET? STL /YES, SET FLAG TAD I Z22 /FETCH VIA POINTER SZL /NEED TO NEGATE? CIA /YES, DO IT JMP I A106 /RETURN TO CALLER A125, .-. /COS() TAD (100 /ADD 0100 (PI/2) JMS A106 /LOOK UP RESULT A130, JMP I A125 /RETURN A131, 0000 TAD A155 /ADD PREVIOUS MQL /LOAD INTO MQ MUY /MULTIPLY 4003 DCA A153 /STORE MQA /GET OTHER HALF DCA A155 /STORE FOR ADD TAD A154 /GET ?? MQL /LOAD INTO MQ MUY /MULTIPLY 4003 CLA /TOSS MQA /GET OTHER HALF TAD A153 /ADD FIRST PRODUCT DCA A154 /STORE ?? TAD A154 /RETURN ?? JMP I A131 A153, 0 A154, 0 A155, 1 A156, 0000 CLL /SET UP SIGN AND (7770 /LOSE LOW BITS SPA /NEGATIVE? STL IAC /YES, SET FLAG AND ROUND UP RTR /DIVIDE BY FOUR? SPA /NEGATIVE? STL /YES, SET FLAG RAR /DIVIDE BY TWO JMP I A156 /RETURN TO CALLER IFNZRO LIKESV < / THE FOLLOWING ARE LIKELY CRUFT. 1413; 7450; 5767 > PAGE /NEXT PAGE. / /THIS IS THE TABLE USED BY FIXED-POINT SIN() AND COS(). /THE UNIT CIRCLE IS DIVIDED INTO 256 EQUAL ANGLES. /THE POSITIVE PORTION OF SIN(X) IS REPRESENTED HERE IN /BINARY, BETWEEN 0 AND 3777. / B00, 0000; 0062; 0145; 0227; 0311; 0373; 0455; 0536 0620; 0701; 0762; 1042; 1123; 1203; 1262; 1341 1420; 1476; 1554; 1631; 1706; 1762; 2035; 2110 2162; 2233; 2304; 2354; 2423; 2472; 2537; 2604 2650; 2713; 2756; 3017; 3057; 3117; 3155; 3213 3247; 3302; 3335; 3366; 3416; 3445; 3473; 3520 3544; 3567; 3610; 3631; 3650; 3666; 3703; 3716 3731; 3742; 3752; 3761; 3766; 3773; 3776; 3777 3777; 3777; 3776; 3773; 3766; 3761; 3752; 3742 3731; 3716; 3703; 3666; 3650; 3631; 3610; 3567 3544; 3520; 3473; 3445; 3416; 3366; 3335; 3302 3247; 3213; 3155; 3117; 3057; 3017; 2756; 2713 2650; 2604; 2537; 2472; 2423; 2354; 2304; 2233 2162; 2110; 2035; 1762; 1706; 1631; 1554; 1476 1420; 1341; 1262; 1203; 1123; 1042; 0762; 0701 0620; 0536; 0455; 0373; 0311; 0227; 0145; 0062 PAGE /NEXT PAGE. /THIS SURE DOES A LOT OF SOMETHING. THE SIN() AND /COS() CALLS SUGGEST IT HAS SOMETHING TO DO WITH /TANK MOVEMENT OR ROTATION. C00, 0000 DCA C153 /SAVE ARG TAD C153 /SAVE ARG+1 IAC DCA C157 TAD C157 /ARG+1 TAD (3 /SAVE ARG+4 DCA C160 TAD C160 /ARG+4 TAD (3 /SAVE ARG+7 DCA C156 TAD C156 /ARG+7 TAD (2 /SAVE ARG+9 DCA C151 TAD C151 /ARG+9 TAD (3 /SAVE ARG+12 C20, DCA C152 TAD C152 /ARG+12 IAC /SAVE ARG+13 DCA C154 TAD I C152 /GET FROM ARG+12 DCA C152 /SAVE IT TAD I C00 /GET OTHER ARG ISZ C00 /BUMP FOR RETURN SNA /IS IT ZERO? JMP C105 /YES, GO DEAL C32, CLA /CLEAR AC TAD I C156 /GET FROM ARG+7 SNA /ZERO? JMP I C00 /YES, RETURN IAC /NO, INCREMENT SNA /ZERO NOW? JMP C100 /YES, GO DEAL DCA I C156 /UPDATE ARG+7 TAD I C157 /GET FROM ARG+1 CIA /SUBTRACT FROM TAD I C160 /ARG+4 IAC /INCREMENT DCA C150 /STORE A[4]-A[1]+1 TAD I C154 /GET A[13] TAD I C151 /A[13]+A[9] DCA I C154 /STORE IN A[13] TAD I C154 /GET NEW A[13] JMS I [A156 /??? DCA I C150 /STORE WITH COMPUTED POINTER TAD I C150 /GET IT BACK MQL /SAVE IN MQ ISZ C154 /BUMP A[13] POINTER ISZ C150 /BUMP STORE POINTER ISZ C151 /BUMP A[9] POINTER TAD I C154 /A[14] TAD I C151 /A[14]+A[10] DCA I C154 /STORE NEW A[14] TAD I C154 /GET IT BACK JMS I [A156 /??? DCA I C150 /SAVE WITH STORE POINTER TAD I C150 /GET IT BACK SWP /SWAP WITH MQ ISZ C150 /BUMP STORE POINTER DCA I C150 /STORE NEW VALUE ISZ C150 /BUMP STORE POINTER MQA /GET MQ VALUE DCA I C150 /STORE NEW VALUE JMP I C00 /RETURN TO CALLER C100, ISZ C151 /BUMP A[9] POINTER ISZ C151 /TWICE DCA I C151 /A[10] = 0 DCA I C156 /A[1] = 0 JMP I C00 /RETURN TO CALLER C105, TAD I C156 /GET A[1] SZA /ZERO? JMP C32 /NO, GO RESUME ABOVE TAD I C153 /GET A[0] JMS I Z33 /SIN() CIA /NEGATE DCA C116 /SAVE AS MULTIPLICAND TAD C155 /GET 65 JMS I Z27 /MULTIPLY C116, 0000 /BY -SIN(A[0]) DCA I C151 /STORE IN A[9] ISZ C151 /BUMP A[9] POINTER TAD I C153 /GET A[0] JMS I Z32 /COS() DCA C126 /SAVE AS MULTIPLICAND TAD C155 /GET 65 JMS I Z27 /MULTIPLY C126, 0000 /BY COS(A[0]) DCA I C151 /STORE IN A[10] ISZ C151 /BUMP POINTER TAD (-4 /STORE -4 DCA I C151 /IN A[11] TAD (-70 /STORE -70 DCA I C156 /STORE AS A[1] TAD I C152 /GET A[12] RTL /ROTATE 3 LEFT RAL DCA I C154 /STORE AS A[13] ISZ C152 /BUMP A[12] POINTER ISZ C154 /BUMP A[13] POINTER TAD I C152 /GET NEW A[12] RTL /ROTATE 3 LEFT RAL DCA I C154 /STORE NEW A[13] JMP C32 /GO RESUME ABOVE C150, 0000 C151, 0000 C152, 0000 C153, 0000 C154, 0000 C155, 65 C156, 0000 C157, 0000 C160, 0000 IFNZRO LIKESV < /PROBABLY CRUFT 4566; 5756; 0077; 0037; 7477; 7540; 0777 0330; 7607; 0200; 7746 > PAGE /NEXT PAGE. D00, 0000 DCA D122 TAD I D122 ISZ D122 DCA D116 TAD D116 JMS I Z33 /SIN() DCA D72 TAD D72 DCA D102 TAD D116 JMS I Z32 /COS() DCA D65 TAD D65 DCA D106 TAD I D122 STL RAR DCA D115 ISZ D122 TAD I D122 CLL AND (7774 SPA STL IAC RTR SPA STL RAR DCA D120 ISZ D122 TAD I D122 CLL AND (7774 SPA STL IAC RTR SPA STL RAR DCA D121 ISZ D122 TAD I D122 D53, DCA D124 ISZ D122 TAD I D122 DCA D123 D57, ISZ D123 ISZ D124 TAD I D123 DCA D117 TAD D117 JMS I Z27 /MULTIPLY D65, 0000 DCA D116 ISZ D123 TAD I D123 JMS I Z27 /MULTIPLY D72, 0000 CIA TAD D116 TAD D120 DCA I D124 ISZ D124 TAD D117 JMS I Z27 /MULTIPLY D102, 0000 DCA D116 TAD I D123 JMS I Z27 /MULTIPLY D106, 0000 TAD D116 TAD D121 DCA I D124 ISZ D115 D113, JMP D57 JMP I D00 D115, 0000 D116, 0000 D117, 0000 D120, 0000 D121, 0000 D122, 0000 D123, 0000 D124, 0000 IFNZRO LIKESV < /UNREACHABLE? CRUFT? TAD Z42 DCA Z21 JMP 1112 TAD Z40 AND Z120 CLL RTL RAL TAD D161 DCA I Z166 TAD Z21 JMP I .+1 0616 D141, .-. TAD Z21 /GET LOW WORD CLL RAL /SHIFT LEFT DCA Z21 TAD Z40 /GET HIGH WORD RAL /SHIFT LEFT DCA Z40 JMP I D141 /RETURN TO CALLER /UNREACHABLE? CRUFT? TAD Z154 /SET UP AUTOINDEX DCA Z14 TAD Z125 /SET UP COUNT DCA Z41 CDF 10 DCA I Z14 /ZERO SOME WORDS ISZ Z41 JMP .-2 D161, CIF CDF 00 JMP I 75 /UNREACHABLE? CRUFT? CDF 10 DCA I Z41 JMP D161 /PROBABLY CRUFT 1253; 1074 3034; 4776; 1073; 4423; 5766; 1546; 1262 > PAGE /NEXT PAGE. E00, 0000 DCA E164 TAD (6 TAD E164 DCA E156 TAD (2 TAD E164 DCA E160 TAD (3 TAD E164 DCA E161 TAD (10 TAD E164 DCA E162 TAD I E162 RTR SNL JMP E141 RAR SNL JMP E77 CLA TAD I E162 RTR RTR CLA TAD Z24 SZL CIA TAD I E156 DCA E163 TAD E163 SMA CIA DCA E157 TAD I E162 AND (20 SNA CLA TAD Z23 TAD E157 TAD Z23 SPA JMP E145 CLA TAD E163 E55, DCA I E156 JMP E77 E57, CLA TAD I E156 SMA CIA TAD Z25 SMA JMP E127 CLA TAD I E156 RAL CLA TAD Z26 SNL CIA TAD I E156 DCA I E156 E77, CLA TAD I E164 JMS I Z32 /COS() DCA E105 TAD I E156 JMS I Z27 /MULTIPLY E105, 0000 CLL TAD I E161 DCA I E161 TAD I E164 JMS I Z33 /SIN() CIA DCA E117 TAD I E156 JMS I Z27 /MULTIPLY E117, 0000 CLL TAD I E160 DCA I E160 E123, CLA TAD E164 JMS I (D00 /NOT Z35? JMP I E00 E127, CLA DCA I E156 TAD I E162 RTR SZL JMP E123 RAR SZL JMP E123 JMP E123 E141, RAR SNL E143, JMP E57 JMP E77 E145, TAD I E156 RAL CLA TAD Z24 SNL CIA TAD I E156 DCA I E156 JMP E77 E156, 0000 E157, 0000 E160, 0000 E161, 0000 E162, 0000 E163, 0000 E164, 0000 IFNZRO LIKESV < /LIKELY CRUFT TO END OF PAGE DCA (3 JMP (D00 TAD Z31 SNA CLA JMP I Z62 > PAGE /NEXT PAGE. / /THE CODE AT 0200 JUMPS HERE! F00, TAD (7400 /COMPUTE 07600 AWKWARDLY STL RAR DCA F56 /SET UP COUNT FOR COPY TAD (S134 /SET UP SOURCE POINTER DCA F57 TAD (U134 /SET UP DEST POINTER DCA F60 F07, TAD I F57 /GET A WORD F10, DCA I F60 /MAKE A COPY ISZ F60 /BUMP TO POINTER ISZ F57 /BUMP FROM POINTER TAD I F57 /GET NEXT WORD TAD (7400 /NEGATE HIGH BITS CIA DCA I F60 /STORE A WORD ISZ F60 /BUMP TO ISZ F57 /BUMP FROM ISZ F56 /BUMP COUNT JMP F07 /LOOP UNTIL DONE TAD (S134 /RESET SOURCE POINTER DCA F57 TAD (7400 /RESET COUNTER CLL RAL /TO 7200 DCA F56 F30, TAD I F57 /GET A WORD CIA /NEGATE IT DCA I F60 /STORE ISZ F57 /BUMP "FROM" ISZ F60 /BUMP "TO" ISZ F56 /BUMP COUNT JMP F30 /LOOP UNTIL DONE TAD [6745 /RESET POINTER DCA F57 TAD (7501 /INIT COUNT DCA F55 TAD (6571 /??? F44, JMS I Z34 /CALL A131 (RAND()?) AND (4007 /MASK RESULT SPA /NEGATIVE? TAD (3770 /YES, ADD ??? F50, DCA I F57 /STORE USING POINTER ISZ F57 /BUMP POINTER ISZ F55 /BUMP COUNT JMP F44 /LOOP UNTIL DONE JMP I (G00 /PROCEED TO G00 F55, 0000 F56, 0000 F57, 0000 F60, 0000 F61, 0000 TAD I [K25 CIA TAD I [K02 SPA CLA JMP F73 TAD [Z04 TAD I [K02 DCA I [K02 JMP F76 F73, TAD [Z04 TAD I [K25 DCA I [K25 F76, TAD I [K26 CIA TAD I [K03 SMA CLA JMP F107 TAD [Z04 TAD I [K26 DCA I [K26 JMP I F61 F107, TAD [Z04 TAD I [K03 DCA I [K03 JMP I F61 /UNREACHABLE? STL RAR DCA F156 JMS F154 /ONLY REFERENCE TO F154 BELOW CLA CLL CML RTR /2000 DCA F157 TAD F156 AND Z55 CIA TAD Z41 SMA TAD Z54 DCA F156 JMS F154 ISZ I Z61 JMP F56 JMS I Z162 AND I F10 0000 AND Z13 JMP Z01 CLA CMA CDF 10 DCA I Z77 JMP I Z53 /UNREACHABLE? F143, 0000 ISZ F150 JMP I F143 JMS I Z162 TAD Z10 F150, 7777 AND Z33 JMP Z01 JMP I F143 /REACHABLE ONLY FROM UNREACHABLE ABOVE F154, 0000 JMS I Z26 F156, JMS Z101 F157, AND I F00 F160, 0000 JMP F167 TAD F156 JMS I (S134 /UNLIKELY TAD F160 DCA F160 JMP I F154 F167, JMS I Z100 PAGE /NEXT PAGE. / /REACH HERE AFTER TABLE COPY AT F00. G00, CLA DCA I (K06 DCA I (K13 TAD [5600 DCA I (K02 TAD Z167 DCA I (K03 TAD Z166 JMS I Z35 /D00 CLA DCA I (K31 DCA I (K36 TAD (I00 DCA I (K25 TAD (5600 DCA I (K26 TAD Z165 JMS I Z35 /D00 G22, CLA ISZ I (H21 SKP JMS I (I00 CLA ISZ I (H22 SKP JMS I (I76 CLA ISZ I (H23 SKP JMS I (J00 CLA ISZ I (H24 SKP JMS I (J76 KSF /KEYBOARD READY? JMP G52 /NEVER MIND KRB /YES, READ IT TAD (7575 /^C? SZA JMP G00 /NO, NEVER MIND JMP I .+1 /YES, TRY TO EXIT 7600 G52, LAS /READ THE SWITCHES CMA AND Z164 /MASK WITH 0077 DCA I (K33 /SAVE RESULT LAS /READ SWITCHES AGAIN RTR /SHIFT RIGHT SIX RTR RTR CMA AND Z164 /MASK WITH 0077 DCA I (K10 /SAVE LEFT SWITCHES CLA TAD I (K44 SNA JMP G75 TAD I (K21 SZA JMP G124 CLA G75, TAD I [K25 CIA TAD I [K02 SMA CIA TAD Z163 SPA JMP G124 TAD I [K26 CIA TAD I [K03 SMA CIA TAD Z163 SPA JMP G124 G115, CLA JMS I (F61 CLA CMA DCA I (K44 CMA DCA I (K21 G124, JMS I Z162 JMP I (H00 DCA G134 ISZ (F61 TAD I (F61 DCA G133 JMS I (K33 G133, 0000 G134, 0000 G135, 0000 JMP G145 TAD G133 JMS (H21 TAD G135 DCA G135 ISZ (F61 JMP G115 G145, CIF 10 JMS I (K10 AND Z07 PAGE /NEXT PAGE. H00, CLA /CLEAN UP. H01, TAD Z161 TAD I (K36 H03, DCA H06 /SET UP # OF POINTS TAD Z160 /DISPLAY SOME POINTS (4156) JMS I Z31 H06, -67-67 /067 OF THEM TAD Z157 H10, TAD I (K13 DCA H14 /SET UP # OF POINTS TAD Z156 /DISPLAY SOME POINTS (4534) JMS I Z31 H14, -73-73 /073 OF THEM TAD (4733 /DISPLAY SOME POINTS (4733) JMS I Z31 -1000-1000 /01000 OF THEM H20, JMP I (G22 /ONWARD H21, 7777 H22, 7777 H23, 7777 H24, SPA SNA SZL LAS HLT AND I Z01 AND I H03 TAD Z11 TAD [A156 AND H63 AND H106 AND H53 AND H124 AND H141 AND I Z00 H37, E143 H40, C20 H41, CIF CDF 10 DCA I H00 CIF CDF 10 JMP I H40 ISZ Z57 H46, ISZ Z57 ISZ Z57 ISZ Z57 ISZ Z57 ISZ Z57 H53, CLA CIF 00 JMS I [K25 AND H10 F00 AND Z56 HLT JMP I .-3 H63, CLA CLL CML RAR /4000 JMS H151 JMS H20 DCA Z41 CIF 00 JMS I [K25 AND I H01 0000 AND Z51 JMP H46 TAD H41 CIF CDF 00 JMS I [K02 DCA H41 TAD H41 DCA H145 JMS H151 STL JMP I H37 H106, JMS H20 DCA Z41 CIF 00 JMS I [K25 AND Z101 H113, 7400 AND Z57 JMP H46 TAD Z41 CDF CIF 00 JMP I H113 CLA ISZ H00 TAD Z40 H124, CLL RAR H125, TAD H00 DCA I [Z04 TAD H41 DCA I [K26 CLA CML IAC CDF 00 AND I [K03 CDF 10 RAR SPA SZL CLA JMP I [K26 JMP I [5600 H141, STL JMP H125 H143, A23 DCA H40 H145, CIF CDF 10 TAD I H40 CIF CDF 10 JMP I H143 H151, 0000 TAD (G22 DCA H164 CDF 00 TAD I [K03 CDF 10 RTR SZL CLA JMP I H151 CIF 00 JMS I [K25 H164, 0000 0000 AND Z33 JMP H46 JMP I H151 CIF 00 JMS I [K25 AND Z111 PAGE /NEXT PAGE. I00, 0000 TAD Z155 DCA I (H21 TAD Z154 I04, JMS I Z153 AND Z20 JMP .+3 CLA DCA I (K36 TAD I (K33 /GET RIGHT USER SWITCHES CMA AND (1 /RIGHTMOST SET? DCA I17 /REMEMBER IT TAD Z165 JMS I Z152 I17, 0000 /RIGHT USER "FIRE" CLA TAD I (K44 SZA JMP I43 CLA TAD Z165 JMS I Z153 AND Z110 JMP I43 I31, CLA TAD I (K31 SPA TAD Z151 TAD [Z04 CIA DCA I (K31 CMA DCA I (K44 JMP I I00 I43, TAD Z165 JMS I Z153 AND Z140 JMP .+2 JMP I I00 CLA TAD I (K33 /GET RIGHT USER'S SWITCHES RTR /GET SECOND SWITCH SZL /IS IT SET? JMP I66 /YES, GO DEAL RAR /NO, GET NEXT SWITCH SNL /IS IT SET? JMP I I00 /NEITHER WAS SET, RETURN CLA /THIRD SWITCH SET TAD Z150 /GET 0002? CIA /SUBTRACT FROM TAD I (K23 /ANGLE DCA I (K23 JMP I I00 /RETURN TO CALLER I66, RAR /NEXT SWITCH SZL /ALSO SET? JMP I75 /YES, NEVER MIND CLA /NO TAD Z150 /GET 0002? TAD I (K23 /ADD TO ANGLE DCA I (K23 I75, JMP I I00 /RETURN TO CALLER I76, 0000 TAD Z147 DCA I (H22 I101, TAD Z165 I102, JMS I Z146 I103, CLA TAD I (K44 SNA CLA JMP I I76 I107, DCA I (K31 DCA I (K44 JMP I I76 TAD I102 STL RAR TAD I101 SMA CLA DCA I Z41 JMS I134 CIA TAD I103 SZA CLA I123, JMP I130 TAD I Z42 AND Z153 TAD I102 DCA I Z41 I130, ISZ Z44 I131, JMP I107 TAD I Z47 JMP I Z152 I134, 0520 TAD I Z42 CLL RTL RTL RTL AND Z151 TAD Z150 JMP I I134 I144, 0511 AND Z151 SNA JMP I Z147 DCA Z52 TAD Z52 TAD Z146 DCA Z42 TAD Z52 TAD Z145 DCA Z41 TAD Z52 TAD Z144 DCA Z50 TAD I Z41 JMP I I144 JMS I I31 JMP I I123 AND I Z06 JMP I I04 PAGE /NEXT PAGE. J00, 0000 TAD Z155 DCA I (H23 TAD Z145 JMS I Z153 AND Z20 JMP .+3 CLA J10, DCA I (K13 TAD I (K10 /GET LEFT SWITCHES CMA AND (1 /SAVE BOTTOM SWITCH DCA J17 TAD Z166 JMS I Z152 /"LEFT" TANK FIRE? J17, 0000 /CURRENT "LEFT" FIRE CLA TAD I (K21 SZA JMP J43 CLA TAD Z166 JMS I Z153 AND Z110 JMP J43 CLA TAD I (K06 SPA TAD Z151 TAD [Z04 CIA DCA I (K06 CMA DCA I (K21 JMP I J00 J43, TAD Z166 JMS I Z153 AND Z140 JMP .+2 JMP I J00 CLA J51, TAD I (K10 /GET LEFT SWITCHES RTR /CHECK SECOND BIT SZL JMP J66 /SET, GO DO IT RAR /CHECK THIRD SWITCH SNL /SET? JMP I J00 /NO, RETURN TO CALLER CLA TAD Z150 /SUBTRACT 0002 CIA TAD I (K00 /FROM ANGLE DCA I (K00 JMP I J00 J66, RAR /THIRD SWITCH ALSO SET? SZL JMP J75 /YES, IGNORE IT CLA TAD Z150 /NO, ADD 0002 TO TAD I (K00 /ANGLE DCA I (K00 J75, JMP I J00 /RETURN TO CALLER J76, 0000 TAD Z147 DCA I (H24 J101, TAD Z166 J102, JMS I Z146 CLA TAD I (K21 SNA CLA JMP I J76 DCA I (K21 DCA I (K06 JMP I J76 TAD Z44 DCA Z47 J114, TAD Z47 JMS I Z136 CIA TAD I Z17 SZA CLA JMP J135 ISZ Z47 ISZ Z46 JMP J114 JMS J152 TAD I Z17 SNA JMP J141 CIA DCA Z46 ISZ J101 JMP I J101 J135, TAD Z46 IAC JMS J152 TAD I Z17 J141, TAD Z45 DCA Z45 ISZ Z53 JMP J102 DCA Z45 TAD I Z135 SZA JMP J51 JMP I J101 J152, 0000 TAD I Z140 CIA TAD Z17 DCA Z17 JMP I J152 0000 TAD Z134 DCA J165 CIF 00 JMS I Z51 J165, JMS J10 TAD I Z00 AND Z01 PAGE /NEXT PAGE. K00, AND Z20 /LEFT TANK ANGLE? SKP HLT CLA K02, SMA SZA SNL CLA K03, SMA SZA CLA JMS I Z134 JMS K145 K06, 0000 K07, 0000 K10, 0000 0000 0000 K13, 0000 JMS I [K25 K15, 0000 K16, 0000 K17, 0000 0000 K21, 0000 K22, 0000 K23, 0000 /RIGHT TANK ANGLE? SNL HLT CLA K25, TAD Z00 K26, AND I Z112 JMS Z156 3777 K31, 0000 K32, 0000 K33, 0000 /RIGHT USER SWITCHES 0000 0000 K36, 0000 JMS K17 K40, 0000 K41, 0000 0000 0000 K44, 0000 K45, 0000 JMP K63 TAD I Z135 SZA JMP I Z124 TAD Z44 JMS I Z136 SZA CLA TAD Z46 SNA CLA JMP I Z166 TAD Z54 ISZ Z56 JMP I Z124 K63, TAD Z17 DCA Z41 TAD Z137 JMS I Z125 TAD I Z140 CIA TAD Z17 TAD Z123 SMA CLA JMP I Z122 K75, TAD I Z41 DCA I Z17 CLA CMA TAD Z41 DCA Z41 CLA CLL CMA RAL /7776 TAD Z17 DCA Z17 TAD Z41 STL CIA TAD Z52 SZA CLA JMP K75 TAD Z137 DCA Z41 TAD Z52 DCA Z17 K116, TAD Z44 JMS I Z136 DCA I Z17 ISZ Z44 ISZ Z41 JMP K116 TAD I Z121 DCA I Z17 IAC JMS I Z125 DCA I Z17 TAD Z17 DCA I Z120 CLA CMA TAD I Z141 DCA I Z141 TAD I Z50 TAD Z54 DCA I Z50 JMS I Z117 JMP I Z116 TAD I Z17 CLL CIA K145, DCA Z41 TAD Z43 TAD Z46 CLA TAD Z43 SNA CML TAD Z41 CLA CML TAD Z41 CIA TAD Z46 SNA SZL CLA JMP K174 TAD Z41 DCA Z46 CLA CLL CMA RAL /7776 TAD Z17 DCA Z52 TAD I Z115 DCA Z54 TAD Z42 DCA Z45 K174, TAD Z41 CIA JMP K40 IFNZRO LIKESV < 4532 /LIKELY JUNK. > PAGE /NEXT PAGE. L00, 0000 TAD (2 DCA L73 TAD I L73 SPA CIA DCA I (M116 ISZ L73 TAD I L73 L11, SPA CIA DCA I (M117 TAD I L00 ISZ L00 DCA I (M120 TAD (7777 TAD L73 DCA L73 TAD I L73 RAL CLA ISZ L73 L26, TAD I L73 SPA CML SZL CLA JMP I L00 TAD I (M117 TAD I (M120 CIA TAD (B00 SMA CLA JMP I L00 TAD I (M117 CIA TAD I (M120 TAD (3400 SPA CLA JMP I L00 TAD I (M116 CIA TAD I (M120 TAD (3400 SPA CLA JMP I L00 TAD I (M116 TAD I (M120 CIA TAD (600 SMA CLA JMP I (M115 TAD I (M116 CIA TAD I (M120 TAD (H00 SPA CLA JMP I (M46 JMP I (M00 L72, JMP I L00 L73, 0000 JMP I (B00 TAD Z31 DCA Z30 TAD Z33 JMS I Z153 DCA Z14 JMP I Z150 JMS I Z145 DCA Z62 TAD Z22 SPA CLA JMP I Z35 TAD Z40 TAD (3400 SNA JMP L121 TAD (600 SNA CLA JMP I (M115 CLA CLL CML RAR /4000 JMP L26 L121, JMS I [K02 ISZ Z62 JMP L140 TAD Z27 DCA Z35 JMS I Z143 L127, TAD Z20 DCA Z14 TAD Z21 DCA Z15 TAD Z22 DCA Z16 TAD Z35 DCA Z17 JMP L11 L140, TAD Z27 CIA TAD Z35 SNA CLA JMP L127 JMS I Z142 JMP Z144 JMP L11 CIA JMP I (H00 TAD Z33 JMS I Z166 AND Z157 TAD Z33 CMA AND Z34 JMP I (H00 JMS I [K02 JMP I (M132 PAGE /NEXT PAGE. M00, TAD M117 CIA TAD M120 TAD (1400 SPA CLA JMP M31 TAD M117 CIA TAD M120 TAD (600 SMA CLA JMP M113 M14, TAD M116 TAD M120 CIA TAD (1200 SMA CLA JMP I (L72 TAD M116 CIA TAD M120 TAD (1400 SPA CLA JMP I (L72 JMP M113 M31, TAD M117 TAD M120 CIA TAD (2400 SMA CLA JMP I (L72 TAD M117 TAD M120 CIA TAD (3200 SMA CLA JMP M14 JMP M113 M46, TAD M116 TAD M120 CIA TAD (K00 SMA CLA JMP I (L72 TAD M117 CIA TAD M120 TAD (600 SMA CLA JMP M113 TAD M117 TAD M120 CIA TAD (3200 SPA CLA JMP M113 TAD M116 TAD M120 CIA TAD (3200 M74, SMA CLA JMP I (L72 TAD M117 CIA M100, TAD M120 M101, TAD (1400 SMA CLA JMP M113 TAD M117 TAD M120 CIA TAD (2400 SPA CLA JMP M113 JMP I (L72 M113, ISZ I (L00 JMP I (L72 M115, JMP I (L72 M116, 0000 M117, 0000 M120, 0000 DCA Z43 JMS I [K02 M123, JMS I Z105 JMP M101 TAD Z43 M126, DCA Z35 M127, TAD Z33 TAD M161 DCA Z43 M132, TAD I Z43 DCA Z43 JMP I Z43 JMS I Z146 JMP M123 JMS I [K02 TAD Z27 JMP M126 ISZ Z37 TAD I Z37 TAD Z137 SNA CLA JMP M153 TAD I Z37 DCA Z35 JMS I [K02 JMP M127 M153, JMS I Z142 JMP Z143 CLA CMA DCA Z40 JMP I (K00 DCA I M153 M161, DCA I Z156 SMA SNL SPA AND M74 AND Z02 7753 AND 64 PAGE /NEXT PAGE. N00, 0000 N01, CLA TAD I (K45 SNA CLA JMP N47 ISZ I (K45 JMP N14 TAD Z144 DCA I (K32 TAD Z144 DCA I (K07 JMP I (O00 N14, DCA I (K13 DCA I (K07 DCA I (K31 TAD I (K33 /GET RIGHT USER SWITCHES? AND Z147 /MASK 7776 CMA AND Z143 /MASK 7757 CMA DCA I (K33 /PUT THEM BACK TAD I (K10 AND Z147 DCA I (K10 TAD Z161 DCA N103 TAD N101 ISZ N101 DCA N100 TAD Z142 DCA N102 N37, TAD I N100 TAD I N102 DCA I N102 ISZ N100 ISZ N102 ISZ N103 JMP N37 JMP I (O00 N47, CLA TAD I (K13 SNA CLA JMP I (O00 TAD I (K15 CIA TAD I (K25 SMA CIA TAD (120 SPA CLA JMP I (O00 TAD I (K16 CIA TAD I (K26 SMA CIA TAD (120 SPA CLA JMP I (O00 TAD [6745 DCA N101 TAD Z141 DCA I (K45 JMP N01 N100, 0000 N101, 0000 N102, 0000 N103, 0000 N104, JMP I N00 IFNZRO LIKESV < /POSSIBLE CRUFT TAD Z34 JMS I (K32 DCA Z34 TAD N113 DCA 70 ISZ 75 N113, AND I N100 SKP JMP I Z47 JMS N143 N117, TAD [6745 TAD Z35 DCA Z35 TAD Z56 AND [K25 SNA CLA JMP .+3 JMS I Z142 JMP [K26 TAD Z56 AND Z157 SZA CLA JMS N143 TAD Z34 AND Z155 TAD Z35 DCA Z34 TAD I Z10 DCA Z43 JMP I Z43 N143, N117 TAD Z35 CMA AND 127 SZA JMP .+3 JMS I Z142 JMP Z151 TAD Z35 DCA Z35 JMP I N143 DCA I N00 DCA I 3456 JMP I Z35 DCA I 3444 DCA I 3464 > PAGE /NEXT PAGE. O00, CLA TAD I (K22 SNA CLA JMP O46 ISZ I (K22 JMP O13 TAD Z144 DCA I (K32 TAD Z144 DCA I (K07 JMP I (N104 O13, DCA I (K36 O14, DCA I (K32 O15, DCA I (K06 TAD I (K10 AND Z147 CMA AND Z143 CMA DCA I (K10 TAD I (K33 AND Z147 DCA I (K33 TAD Z157 DCA O102 TAD O101 DCA O77 ISZ O101 TAD Z140 DCA O100 O36, TAD I O77 TAD I O100 DCA I O100 ISZ O77 ISZ O100 ISZ O102 JMP O36 JMP I (N104 O46, CLA TAD I (K36 SNA CLA JMP I (N104 TAD I (K40 CIA TAD I (K02 SMA O56, CIA TAD Z137 SPA CLA JMP I (N104 TAD I (K41 CIA TAD I (K03 SMA CIA TAD Z137 SPA CLA JMP I (N104 TAD [6745 DCA O101 TAD Z141 DCA I (K22 JMP O00 O77, 0000 O100, 0000 O101, 0000 O102, 0000 TAD (K03 SNA JMP O136 IAC SNA JMP O152 ISZ I (5200 /UNLIKELY TAD (214 DCA O133 TAD Z51 SPA SNA CLA JMP O123 ISZ O134 JMP O127 O121, CLA CMA DCA O134 O123, TAD I (5200 DCA Z43 TAD O133 JMP I Z43 O127, ISZ O135 TAD O133 DCA I O135 JMP O123 O133, AND O15 O134, 7777 O135, F50 O136, TAD O154 SNA CLA JMP O147 DCA O154 ISZ Z42 DCA Z41 TAD Z51 SMA SZA CLA JMS I Z135 O147, TAD Z134 DCA O133 JMP O121 O152, ISZ O154 JMP I (K02 O154, AND Z01 DCA Z155 JMP I Z34 DCA I O56 DCA Z145 AND O14 PAGE /NEXT PAGE. /THIS LOOKS LIKE [X, Y] data. P00, -11; 1 -11; 3 -11; 5 -11; 7 -7; 7 -105; 7 -105; 5 -105; 3 -4; 4 -2; 5 -1; 5 -1; 6 -1; 7 -1; 11 -1; 13 -2; 14 0; 14 2; 14 1; 13 1; 11 1; 7 1; 5 2; 5 4; 4 5; 3 5; 5 5; 7 7; 7 11; 7 11; 5 11; 3 11; 1 11; -1 11; -103 11; -105 11; -7 11; -10 7; -10 5; -10 5; -6 5; -4 4; -105 2; -6 0; -6 -2; -6 -4; -105 -105; -4 -105; -6 -105; -10 -7; -10 -11; -10 -11; -7 -11; -105 -11; -103 -11; 7777 IFNZRO LIKESV < / /WHAT FOLLOWS IS PROBABLY CRUFT 4156 0000;2320 0327;2202 5423;2003 2722;0454 2320;0327 2201;5422 1324;2402 1400;7566 7567 /CRUFT? > PAGE /NEXT PAGE. IFNZRO LIKESV < ZBLOCK 4346-. > *4346 / /WHAT FOLLOWS ARE [X, Y] CORDINATE PAIRS. -11; 1 -11; 3 -11; 5 -11; 7 -7; 7 -105; 7 -105; 5 -105; 3 -4; 4 -2; 5 -1; 5 -1; 6 -1; 7 -1; 11 -1; 13 -2; 14 0; 14 2; 14 1; 13 1; 11 1; 7 1; 5 2; 5 4; 4 5; 3 5; 5 5; 7 7; 7 11; 7 11; 5 11; 3 11; 1 11; -1 11; -103 11; -105 11; -7 11; -10 7; -10 5; -10 5; -6 5; -4 4; -105 2; -6 0; -6 -2; -6 R100, -4; -105 -105; -4 -105; -6 -105; -10 -7; -10 -11; -10 -11; -7 -11; -105 -11; -103 -11; -1 -1; 1 1; 1 1; -1 -1; -1 R134=. IFNZRO LIKESV < / / I (VRS) THINK THESE MAY ALSO BE DATA, / OR PERHAPS JUST CRUFT. Z140 AND Z156 / SEEM TO POINT HERE R134, 4534; 0000 1236; 3607 6203; 5674 6141; 0436 0017; 0261 0003; 0002 7420; 5317 7101; 7207 0315; 7650 5304; 1374 0206; 1335 7450; 5371 3374; 1207 3375; 2316 5304; 6213 5601; 2233 0100; 1600 6201; 5763 > PAGE /NEXT PAGE. JMS S04 JMS S04 5777 5776 S04, .-1 /VRS - LOOKS LIKE A SUBROUTINE ISZ S04 /SKIP ON RETURN (DIDN'T USE ARG) CLA CLL CDF 00 TAD I S175 /GET A140 AND S174 /MASK WITH 160 TAD S54 /BUILD A CIF DCA S100 /SAVE FOR LATER EXECUTION TAD I S175 /GET A140 CDF 10 /SET FIELD 1 RTL /DOUBLE IT SNL CLA /CARRY? JMP S30 /NO, ONWARD S21, TAD S76 /GET SKP DCA I S75 /STORE IT AT M100 ISZ S21 /ADJUST TAD ABOVE ISZ S75 /BUMP STORE POINTER ISZ S74 /BUMP COUNT JMP S21 /LOOP UNTIL DONE CLA CMA /SET S73 FLAG S30, DCA S73 S31, TAD I S70 /FETCH A WORD CDF 00 DCA I S71 /STORE IN FIELD 0 CDF 10 TAD I S67 /GET FIELD 1 WORD CDF 00 DCA I S67 /STORE IN FIELD 0 CDF 10 ISZ S67 /BUMP COPY POINTER ISZ S70 /BUMP FETCH POINTER ISZ S71 /BUMP STORE POINTER ISZ S72 /BUMP COUNT JMP S31 /LOOP UNTIL DONE TAD S177 /GET A140 (FIELD 1) CDF 00 DCA I S173 /STORE IT TAD S172 /GET 0154? DCA I S171 /STORE IT CDF 10 /SET DF FIELD 1 S54, CIF 00 /BUT CALL FIELD 0 JMS I S170 TAD S73 /GET FLAG TAD S175 /ADD A140 SZA CLA /GOT ZERO? JMP I S04 /NO, RETURN TO CALLER TAD S167 /YES, GET A140 DCA I S166 /STORE TAD S165 /GET A140 DCA I S164 /STORE JMP I S04 /RETURN TO CALLER S67, . /COPY POINTER S70, 5070 /FETCH POINTER S71, 7271 /STORE POINTER S72, -306 /COUNT S73, 0000 /FLAG S74, -4 /COUNT S75, M100 /PLACE TO STORE SKP S76, SKP /CONSTANT 7400 S100, CIF 00 /HOW IS THIS USED? IFNZRO LIKESV < /SEEMS TO BE CRUFT? DATA? 4701; 4656; 1355; 6214; 3350; 6201; 1775 0374; 7450; 5316; 7112; 7010; 5350; 6201; 1354; 7106; 7004; 0333; 1316; 3325; 7777; 1752; 7000; 3325; 1327; 3752; 0070 > *4734 / /THIS IS THE TABLE UNPACKED DURING INITIALIZATION. S134, 0060; 0340; 0064; 0340; 0070; 0340; 0074; 0340 0100; 0340; 0104; 0340; 0110; 0340; 0114; 0340 0120; 0340; 0124; 0340; 0130; 0340; 0134; 0340 S164, 0140; 0340; 0144; 0340; 0150; 0340; 0154; 0340 S174, 0160; 0340; 0164; 0340; 0170; 0340; 0174; 0340 S165=S174-7 S166=S174-6 S167=S174-5 S170=S174-4 S171=S174-3 S172=S174-2 S173=S174-1 S175=S174+1 S177=S174+3 0200; 0340; 0200; 0334; 0200; 0330; 0200; 0324 0200; 0320; 0140; 0320; 0144; 0320; 0150; 0320 0154; 0320; 0160; 0320; 0164; 0320; 0170; 0320 0174; 0320; 0140; 0240; 0140; 0244; 0140; 0250 0140; 0254; 0140; 0260; 0140; 0264; 0140; 0270 0140; 0274; 0140; 0300; 0140; 0304; 0140; 0310 0140; 0314; 0120; 0240; 0124; 0240; 0130; 0240 0134; 0240; 0120; 0320; 0120; 0244; 0120; 0250 0120; 0254; 0120; 0260; 0120; 0264; 0120; 0270 0120; 0274; 0120; 0300; 0120; 0304; 0120; 0310 0120; 0314; 0060; 0320; 0064; 0320; 0070; 0320 0074; 0320; 0100; 0320; 0104; 0320; 0110; 0320 0114; 0320; 0060; 0324; 0060; 0330; 0060; 0334 0260; 0320; 0260; 0324; 0260; 0330; 0260; 0334 0260; 0340; 0264; 0320; 0270; 0320; 0274; 0320 0300; 0320; 0304; 0320; 0310; 0320; 0314; 0320 0320; 0320; 0320; 0240; 0320; 0244; 0320; 0250 0320; 0254; 0320; 0260; 0320; 0264; 0320; 0270 0320; 0274; 0320; 0300; 0320; 0304; 0320; 0310 0320; 0314; 0324; 0240; 0330; 0240; 0334; 0240 0340; 0240; 0340; 0244; 0340; 0250; 0340; 0254 0340; 0260; 0340; 0264; 0340; 0270; 0340; 0274 0340; 0300; 0340; 0304; 0340; 0310; 0340; 0314 0340; 0320; 0340; 0324; 0340; 0330; 0340; 0334 0340; 0340; 0264; 0340; 0270; 0340; 0274; 0340 0300; 0340; 0304; 0340; 0310; 0340; 0314; 0340 0320; 0340; 0324; 0340; 0330; 0340; 0334; 0340 /U134 IS WHERE THINGS ARE UNPACKED INTO. U134=. IFNZRO LIKESV < /MORE CRUFT 5334; 1000; 1335; 7025 7640; 3032; 1325; 4426; 2354; 3062; 7240; 7024 6213; 2476; 4735; 7000; 0002; 2175; 4056; 0404 5160; 4443; 0251; 0651; 3076; 1400; 3002; 7352 4702; 0432; 6403; 0433; 0070; 0401; 2003; 6400 > /RESERVE THE BUFFER FOR THE UNPACK, THEN START NEXT PAGE *U134+1000 IFNZRO LIKESV < / / THIS IS ALMOST CERTAINLY CRUFT, BECAUSE THIS MEMORY GETS / OVER-WRITTEN DURING STARTUP (BUT I DON'T KNOW WHY). / (AS A RESULT, EAE EMULATION WAS MOVED TO 07400.) PAGE XB00, CIF 10 XB01, JMS I (XC110 6621 /DFSE RF08 SKIP ON NO ERROR (BUFFER ADDR?) JMS XB05 JMP I (6247 XB05, 0000 CDF 10 TAD I (7644 CDF 00 AND (1000 SNA CLA JMP I (7605 CIF 10 JMS I (XC110 6664 /LINE PRINTER TPC (OR POINTER?) JMP I XB05 0000 0000 0000 0000 0000 1520 6000 4000 2000 0001 7601 7401 7201 7001 6437 6437 0000 6437 0000 0000 0000 0000 0000 XB47, CLA CLL CIF 10 JMS I (XC110 6600 JMP I (7605 XB54, CIF 10 JMS I (XC110 6632 JMP I (7605 CIF 10 JMS I (XC110 6672 JMP I (7605 XB64, 0000 TAD I (J10 DCA XB117 TAD I (2403 TAD XB117 DCA XB124 DCA I (2002 TAD I (CIF 10) DCA XB115 JMS I XB115 JMS XB00 6516 AND Z01 JMP XB47 JMS I XB115 XB103, 5001 0000 AND Z02 JMP XB47 JMS I XB115 JMS XB01 ISZ I Z00 AND Z06 JMP XB47 XB114, JMP I XB64 XB115, 0000 7777 XB117, 0000 0000 0000 7777 0000 XB124, 0000 7777 TAD I (2031 SNA TAD (241 AND (77 DCA XB151 TAD I (H00 SPA CLA TAD (60 CLL RTL RTL RTL TAD XB151 CDF 00 DCA I (7374 CIF 10 JMS I (XC110 / ASSUMING THIS IS ACTUALLY PART OF THE INTENDED SOURCE CODE: / 1) OS/8 SUPPORTS THE STANDARD EXIT TO 07600. BY USING THE NON-STANDARD / EXIT TO 07605, THE PROGRAM HAS TO BE NEEDLESSLY MODIFIED TO USE ANY / OTHER OPERATING SYSTEM. / NOTE: AT THIS POINT IT IS NOT CLEAR IF ANY CONSTRUCTIVE DEPENDENCE ON / OS/8 ACTUALLY EXISTS IN THIS PROGRAM. / 2) ALL EXITS TO ALL RATIONAL OPERATING SYSTEMS DO NOT CARE ABOUT THE / STATE OF THE AC OR LINK WHEN EXITING. THERE IS NO NEED FOR ANY / INSTRUCTION TO EFFECT A CHANGE. / 3) THE OPERATION USED IS A POINTLESS EXERCISE IN THE LONG WAY AROUND TO DO / WHAT IT ACCOMPLISHES, AND INCLUDES POINTLESS OPR STATES; ADDITIONALLLY, / THE COMBINATION IS NOT LEGITIMATE ON CERTAIN PDP-8 MODELS. CLA CLL CMA CML IAC RAL /NEEDLESSLY CLEAR AC, LINK A HARD WAY. JMP I (7605 XB151, 0000 6331 TAD I XB103 JMS XB114 JMS I XB54 6306 6311 6305 PAGE XC00, TAD Z01 XC01, 1604 TAD I 5 XC03, 2240 0522 XC05, ISZ XC17 ISZ XC00 XC07, 1617 JMS Z20 XC11, Z122 AND Z115 AND I Z124 AND I Z122 JMS Z02 TAD I Z17 XC17, 0313 0000 TAD I XC17 XC22, JMS Z42 DCA XC05 ISZ XC17 JMS XC40 AND 114 TAD I Z17 ISZ I XC105 AND I Z00 AND I Z11 ISZ XC05 AND XC124 TAD I XC122 DCA Z140 TAD Z01 XC40, 2340 AND XC110 AND Z116 AND I XC105 AND I Z40 ISZ XC111 TAD I XC03 XC47, 0540 TAD I Z01 ISZ XC124 JMS Z32 /COS() AND I Z122 TAD I XC140 TAD I XC17 JMS Z57 ISZ XC40 AND 114 TAD I Z17 ISZ I XC105 AND I Z00 TAD I XC126 AND I Z122 ISZ XC11 AND I Z11 TAD I XC07 0000 AND XC101 TAD I XC47 ISZ I Z40 TAD I XC126 AND I Z122 XC77, ISZ XC11 XC100, AND I 5 XC101, 4016 TAD I XC116 XC103, JMP I Z123 ISZ I Z01 XC105, 1604 AND Z122 AND I Z40 XC110, AND I 5 XC111, ISZ I XC11 AND XC105 ISZ XC100 JMS XC105 ISZ XC22 XC116, 1722 XC117, JMS Z11 TAD I XC40 AND XC117 XC122, TAD I Z115 AND Z116 XC124, AND I Z00 JMS XC103 XC126, 0314 JMS 63 TAD Z140 TAD I XC126 AND I Z122 TAD I Z01 DCA Z140 AND Z116 AND I Z40 TAD I Z117 XC140, 1611 ISZ I Z17 ISZ XC40 TAD Z116 AND XC117 0000 AND Z124 TAD 102 TAD I 5 0000 TAD I XC17 ISZ I Z40 ISZ I XC101 ISZ XC77 0000 AND I XC11 TAD I 5 ISZ XC140 AND I 5 TAD I 5 ISZ I 5 AND I 72 0000 AND I XC11 TAD I 5 ISZ XC140 ISZ XC05 TAD I XC01 TAD I Z105 AND I 72 0000 AND I XC11 > // That's it for the dis-assembly. Next up, a // patch for the VC8E. IFZERO PDP12 < *273 NOP *276 JMS VC8EPT *64 VC8EPT, .-. CLL RAL / Scale by 2X 6054 / DILY CLA TAD 0007 / Get X CLL RAL / Scale by 2X 6053 / DILX 6052 / Wait for ready JMP .-1 6055 / DIXY JMP I VC8EPT / Return > // Now, a patch to emulate the EAE, if needed. IFZERO EAE < OCTAL FIELD 0 / DIGITAL-8-17 EAE EMULATION FOLLOWS. / (PAGE ZERO LAYOUT IS CHANGED AND CODE RELOCATED.) *126 MQL=JMS I . PSDMQL DVI=JMS I . PSDDVI MUY=JMS I . PSDMUY SHL=JMS I . PSDSHL MQA=JMS I . PSDMQA SUDOMQ, 0 SUDOSC, 0 *7400 PSDMQA, 0 /MQA DCA PSDMQL /INCLUSIVE OR TAD PSDMQL /MQ CMA /AND AC AND SUDOMQ TAD PSDMQL JMP I PSDMQA PSDMQL, 0 /MQL DCA Z SUDOMQ JMP I PSDMQL PSDCAM, 0 /CAM (CLA!MQL) CLA DCA Z SUDOMQ JMP I PSDCAM MQLMUY, 0 /MQL!MUY DCA Z SUDOMQ TAD MQLMUY /SET UP DCA PSDMUY /FOR MUY SUBROUTINE JMP PSDMUY+1 MQLDVI, 0 /MQL!DVI DCA Z SUDOMQ TAD MQLDVI /SET UP DCA PSDDVI /FOR DVI SUBROUTINE JMP PSDDVI+1 37 PSDSHL, 0 /SHL DCA PSDCAM /SAVE AC TAD I PSDSHL /SHIFT COUNT ISZ PSDSHL /EXIT POINT AND PSDSHL-1 /5 BIT COUNTER CMA DCA SUDOSC TAD SUDOMQ /SHIFT COMBINED CLL RAL /AC AND MQ DCA SUDOMQ /1 BIT TO THE TAD PSDCAM /LEFT RAL DCA PSDCAM ISZ SUDOSC JMP .-7 /MORE SHIFTING TAD PSDCAM JMP I PSDSHL /EXIT PSDLSR, 0 /LSR DCA PSDCAM /SAVE AC TAD PSDLSR /USE ASR DCA PSDASR /ROUTINE CLL JMP PSDASR+5 PSDASR, 0 /ASR CLL /SET LINK=SIGN SPA CML DCA PSDCAM /SAVE AC TAD I PSDASR /SHIFT COUNT ISZ PSDASR /EXIT POINT AND PSDSHL-1 /5 BIT COUNTER CMA DCA SUDOSC TAD PSDCAM /RESTORE AC JMP .+4 TAD PSDCAM SPA CML RAR DCA PSDCAM TAD SUDOMQ RAR DCA SUDOMQ CLL ISZ SUDOSC JMP .-12 /MORE SHIFTING TAD PSDCAM SPA CML /LINK=AC0 JMP I PSDASR 7763 PSDDVI, 0 /DVI DCA PSDCAM /SAVE HIGH ORDER DIVIDEND TAD I PSDDVI /DIVISOR ISZ PSDDVI /EXIT POINT CLL CMA IAC DCA MQLMUY /2'S COMPLEMENT OF DIVISOR TAD PSDCAM /HIGH ORDER DIVIDEND TAD MQLMUY SZL CLA JMP I PSDDVI /DIVIDE OVERFLOW TAD PSDDVI-1 /7763 DCA PSDLSR /COUNTER JMP .+11 TAD PSDCAM RAL DCA PSDCAM TAD PSDCAM TAD MQLMUY SZL DCA PSDCAM CLA TAD SUDOMQ RAL DCA SUDOMQ ISZ PSDLSR JMP .-14 TAD PSDCAM /COUNT EXHAUSTED JMP I PSDDVI /EXIT PSDMUY, 0 /MUY CLA CLL DCA MQLDVI /CLEAR PRODUCT (MOST SIG.) REGISTER TAD PSDDVI-1 DCA PSDLSR /LOOP COUNTER TAD I PSDMUY DCA PSDMQL /OPERAND ISZ PSDMUY /EXIT POINT JMP .+10 TAD MQLDVI SNL JMP .+3 CLL TAD PSDMQL RAR DCA MQLDVI TAD SUDOMQ RAR DCA SUDOMQ /LOW ORDER PRODUCT ISZ PSDLSR JMP .-13 TAD MQLDVI /HIGH ORDER PRODUCT JMP I PSDMUY /EXIT > IFNZRO EAE < MUY= 7405 /EAE MULTIPLY DVI= 7407 /EAE DIVIDE SHL= 7413 /EAE SHIFT LEFT MQL= 7421 /LOAD MQ;CLEAR AC MQA= 7501 /READ MQ > $