/ QUBIC.PA / QUBIC.PA ORIGINALLY WRITTEN IN 1975 EDITED 1976 / FOR USE ON THE B.H.S. PDP-8/E / / / / / / / / / THIS PROGRAM WAS WRITTEN BY CHRIS WASHBURN / AND COMPIELED ON DECEMBER 5, 1975 / THIS PROGRAM WAS WRITTEN WITH HELP FROM THE SOURCE FILE / QUBIC.BA THANK YOU / / / / / / /**************************Q U B I C ********************************** FIELD 1 *200 XSUBV, 0;ZBLOCK 100 LSUBV, 0;ZBLOCK 114 YSUBV, 0;1;61;64;4;15;75 /THESE ARE THE VALUES FOR Y(X) 100;20;26;47;27 46;32;52;33;53 /VALUES FOR M(I,J) "ALOT EH? MDSVL, 1;2;3;4;5;6;7;10;11;12;13;14;15;16;17;20;21;22;23;24 25;26;27;30;31;32;33;34;35;36;37;40;41;42;43;44;45;46;47 50;51;52;53;54;55;56;57;60;61;62;63;64;65;66;67;70;71;72;73 74;75;76;77;100;1;21;41;61;2;22;42;62;3;23;43;63;4;24;44;64 5;25;45;65;6;26;46;66;7;27;47;67;10;30;50;70;11;31;51;71;12;32;52;72 13;33;53;73;14;34;54;74;15;35;55;75;16;36;56;76;17;37;57;77 20;40;60;100;1;5;11;15;21;25;31;35;41;45;51;55;61;65;71;75 2;6;12;16;22;26;32;36;42;46;52;56;62;66;72;76;3;7;13;17;23 27;33;37;43;47;53;57;63;67;73;77;4;10;14;20;24;30;34;40;44 50;54;60;64;70;74;100;1;6;13;20;21;26;33;40;41;46;53;60 61;66;73;100;15;12;7;4;35;32;27;24;55;52;47;44;75;72;67;64 1;25;51;75;2;26;52;76;3;27;53;77;4;30;54;100;61;45;31;15 62;46;32;16;63;47;33;17;64;50;34;20;1;22;43;64;5;26;47;70;11 32;53;74;15;36;57;100;61;42;23;4;65;46;27;10;71;52;33;14; 75;56;37;20;1;26;53;100;20;33;46;61;4;27;52;75;15;32;47;64 XLOC, XSUBV /LOCATION OF X(I) VALUES LLOC, LSUBV /LOCATION OF L(I) VALUES YLOC, YSUBV /LOCATION OF Y(I) VALUES MLOC, MDSVL /LOCATION OF THE BIG DOUBLE SWBSCRIPT FIELD 0 *25 TSPOT, 0 /THE NUMBERS AS THEY COME IN 0 0 TEE, 0 ZEE, 0 TIME, -4 -4 N4, -4 -4 FRAC, 1000 / = .125 JAY, 0 KAY, 0 EM, 0 EL, 0 ES, 0 LSBIV, 0 /L(I) TEMPORARY LOCATION TEM, 0 /UNIVERSAL TEMPORARY LOCATION TEMP1, 0 /TEMPORARY LOCATION FOR SUBROUTINES EYE, 0 / 'I' FOR I=1 TO 76 0 FRI=JMS I . ;XFRY /FOR I=1 TO 76 GETVAL=JMS I . ;XNDIR /GET VALUE, LOCATION IN AC NEXI=JMS I . ;XNXI /NEXT I ADLN=JMS I . ;ADDXMS /ADD X(M(I,J)) FOR J=1 TO 4 ADLR=JMS I . ;XADL /L=X(M(I,J)) J=1 TO 4 FNVLXM=JMS I . ;VALU /FIND VALUE OF X(M(I,J)) NTX=JMS I . ;XNTX /X(I)=INT(X(I)) I=1 TO 64 MEMDS=JMS I . ;XSTMD /M=M(I,J) FNDMDS=JMS I . ;XFINDM /VALUE OF M(I,J) RESET=JMS I . ;XRST /RESET LOCATION TO ORIGINAL STATE LETSE=JMS I . ;TABL /PRINT OUT TABLE ADL=JMS I . ;ADDL /L(I)=X(M(I,J))J=1 TO 4,I=1 TO 76 TYPM=JMS I . ;XTYPM /TYPE ONE THREE DIGIT NUMBER STXM=JMS I . ;XM5 /X(M)=5 FORJ=JMS I . ;XFORJ / FOR J=1 TO 4 NEXTJ=JMS I . ;XNXJ / NEXT J CRLF=JMS I . ;XCRLF / AUTOMATIC CR/LF READ=JMS I . ;XREAD / READ ONE CHARACTER FROM KB TYPE=JMS I . ;XTYPE / TYPE ONE CHARACTER ON TTY: KEYCHK=JMS I . ;XCRC / CHECK SEE IF HE TYPED A CHARACTER PRINT=JMS I . ;XPRINT / PRINT 1 LINE MULT=JMS I . ;XMULT / MULTIPLE NEXT TWO LOCATIONS / (EXPLAINED LATER) *200 KCC /INITIALIZATION TFL TLS PRINT QUBVER / QUBIC.SV VERSION 1.1 CRLF JMP I (ENTR /START / UNDER ETOS, SETSTAT AND KSTAT AND SYSCAL GO HERE PAGE /FROM NOW ON , IT'S SUBROUTINES AND THEN THE PROGRAM / AT LAST!!!!!!!!!!!!!!!!!!!! /SUBROUTINES XTYPE, 0 / TYPE ONE CHAR ACTER AND (377 TSF / IN JMP .-1 TLS CLA CLL JMP I XTYPE XREAD, 0 / READ 1 CHAR. FROM KB KSF / READ KB JMP .-1 KRB /ETOS* TLS /SAY IT JMP I XREAD XMULT, 0 / - - MULT - - / - - FIRST NUMBER LOCATION - - / - - SECOND NUMBER LOCATION - - / MULTIPLY TWO NUBERS TOGETHER KEYCHK / AND END UP WITH THE PRODUCT TAD I XMULT / IN THE AC DCA FRSTM / ISZ XMULT TAD I XMULT DCA SCNM TAD I FRSTM DCA FRSTM TAD I SCNM CIA DCA SCNM TAD FRSTM SZA CLA TAD SCNM SNA CLA JMP .+4 TAD FRSTM / THIS ADD'S THE FIRST NUMBER ISZ SCNM JMP .-2 / ADD IT AGAIN ISZ XMULT JMP I XMULT XFINDM, 0 / FIND THE VALUE OF CLA CLL CMA / M(I,J) TAD EYE DCA TEM MULT / EQUATION: (I-1)*4+J=LOCATION OF M(I,J) TEM (4 / LEAVE WITH VALUE IN AC TAD JAY CDF 10 TAD I [MLOC GETVAL JMP I XFINDM XCRC, 0 / CHECK IF HE TYPED A CTRL/C KSF / THIS ONLY WORKS FOR A ^C FOR NOW, BUT LATER JMP I XCRC / IT WILL WORK FOR JUST ABOUT ANYTHING KRB / YEP. HE SHURE-NUF TYPE SOMETIN' TAD (-203 / BUT WAS IT A ^C?????????? SNA JMP I (ENDGM / HEY! IT WAS! HE WANT'S TO GO HOME TAD (203 / NO IT WASN'T BUT JUST ASSSUME IT WAS KCC JMP I XCRC / ONE OF HIS NUMBERS. / IF IT WASN'T, HE'S IN FOR HELL LATER! / TYPE AN AUTOMATIC CARRAIGE RETURN/LINE FEED / THIS IS GETTING FANCY! XCRLF, 0 KEYCHK /TYPE A CR/LF TAD (212 TYPE / NO PROBLEM TAD (215 TYPE JMP I XCRLF XPRINT, 0 /SUBROUTINE TO PRINT OUT A WHOLE BUNCH OF STUFF KEYCHK CLA CLL TAD I XPRINT ISZ XPRINT DCA PNTR / LOCATION OF SENTENCE PRNT, CDF 10 TAD I PNTR / GET FIRST 2 LETTERS CDF SNA JMP I XPRINT RTR / PRINT FIRST LETTER RTR RTR JMS PRN CDF 10 TAD I PNTR CDF JMS PRN / AND SECOND ISZ PNTR JMP PRNT /DO IT AGAIN PRN, 0 AND (77 SNA JMP I XPRINT TAD (-37 SPA TAD (100 / ADJUST ASCII. BUT LATER ON WE WON'T LISTEN TO ASCII TAD (237 TYPE JMP I PRN FRSTM, 0 / THE VALUE FOR MULTIPLYING SCNM, 0 PNTR, 0 XNDIR, 0 / WITH THE LOCATION IN THE AC, FIND THE VALUE. DCA 21 / SMALL AND SIMPLE SUBROUTINE TAD I 21 JMP I XNDIR XRST, 0 KEYCHK / RESET THE LOCATION TO THE ORIGINAL BY: TAD I XRST / TAKING THE LOCATION YOU WANT TO RESET, DCA PNTR ISZ PNTR / ADD 1 TO IT AND YOU HAVE THE LOCATION AFTER IT / THE LOCATION AFTER IT IS THE ORIGINAL VALUE / FOR SOME VARIABLES, BUT NOT ALL TAD I PNTR / NOW GET THE ORIGINAL VALUE DCA AC / STORE IT TAD I XRST / GET THE ORIGINAL LOCATION DCA PNTR / STORE IT TAD AC / AND STORE THE ORIGINAL VALUE INTO THE DCA I PNTR / ORIGINAL LOCATION ISZ XRST / RETURN +1 AND CONTINUE JMP I XRST AC, 0 PAGE XSTMD, 0 KEYCHK FNDMDS CDF DCA EM JMP I XSTMD TABL, 0 KEYCHK NTX LOP, TAD (211 TYPE TAD N3 SMA SZA JMP FINPRN TAD (3 DCA I1 MULT I1 (4 IAC DCA I1 JLOP, TAD TIME TAD (4 DCA TCHAR MULT (20 TCHAR TAD I1 DCA J1 TAD J1 DCA K1 KLOP, TAD K1 CDF 10 TAD I [XLOC GETVAL CDF TAD (-2 SPA CIA CIA TAD (TCHAR GETVAL TYPE CLA CLL NK1, ISZ K1 ISZ N4 JMP KLOP NEXT, RESET;N4 ISZ TIME SKP JMP NEXJ PRINT;SPC3 JMP JLOP NEXJ, ISZ N3 NOP RESET;TIME CRLF JMP LOP FINPRN, RESET TIME RESET;N3 RESET;N4 KEYCHK JMP I TABL XFORJ, 0 / "FOR J=1 TO 4" TAD (4 CIA DCA JY FORCE, TAD JY TAD (4 DCA JAY JMP I XFORJ XNXJ, 0 / "NEXT J" CLA CLL ISZ JY JMP FORCE JMP I XNXJ JY, 0 XADL, 0 ADLN DCA EL JMP I XADL N3, -3;-3 "X;".;"O TCHAR, 0 I1, 0 J1, 0 K1, 0 PAGE XNXI, 0 CLA CLL ISZ NBNM JMP XFRY+1 RESET;NBNM JMP I XNXI XFRY, 0 TAD NBNM TAD (115 DCA EYE JMP I XFRY VALU, 0 FNDMDS TAD I [XLOC GETVAL CDF JMP I VALU ADDL, 0 CLA CLL FRI ADLN DCA TEMP1 TAD EYE CDF 10 TAD I [LLOC DCA TEMP3 TAD TEMP1 DCA I TEMP3 CDF NEXI JMP I ADDL ADDXMS, 0 CLA CLL DCA TEMPO FORJ FNVLXM TAD TEMPO DCA TEMPO NEXTJ TAD TEMPO JMP I ADDXMS XM5, 0 CLA CLL TAD EM CDF 10 TAD I [XLOC DCA 21 TAD (5 DCA I 21 CDF JMP I XM5 XNTX, 0 TAD (-100 DCA EX MEM, TAD EX TAD (101 CDF 10 TAD I [XLOC GETVAL AND (177 DCA TEMPO CDF TAD EX TAD (101 CDF 10 TAD I [XLOC DCA TEMP3 TAD TEMPO DCA I TEMP3 CDF ISZ EX JMP MEM KEYCHK JMP I XNTX TEMPO, 0 NBNM, -114;-114 EX, 0 TEMP3, 0 TEMPP, 0 PAGE XTYPM, 0 / SUBROUTINE TO TYPE OUT MY MOVE CLA CMA CLL TAD EM / SO YOU CAN'T STOP ME RAR;RTR AND (7 / GET THE FIRST NUMBER RAR IAC DCA FRST / STORE IT CLL CMA TAD EM AND (10 SZA CLA JMS AD2 CLL CMA TAD EM AND (4 SZA CLA ISZ SECOND ISZ SECOND CLL CMA TAD EM AND (7 TAD (-4 SPA TAD (4 / BY NOW, YOU SHOULD HAVE THE THIRD NUMBER IAC DCA THIRD / SO YOU CAN STORE IT TAD FRST / NOW PRINT THEM JMS JUST / ALL OUT TAD SECOND / ONE AT A TIME JMS JUST TAD THIRD JMS JUST CLA / MUST CLEAR SECOND 'CAUSE THERE'S NO DCA DCA SECOND / FOR SECOND (JUST KEEP ISZ SECOND JMP I XTYPM AD2, 0 / THE SECOND # MUST BE AT LEAST 2 ISZ SECOND ISZ SECOND JMP I AD2 JUST, 0 / PRINT OUT THE NUMBERS ONLY AND (7 / IT WILL COME OUT AS A NUMBER ANY-WAY TAD (260 TYPE JMP I JUST FRST, 0 /STORAGE FOR THE FIRST NUMBER SECOND, 0 /AND THE SECOND THIRD, 0 /AND THE LAST (THIRD PAGE / OKAY!!! FOLKS TIME FOR THE MAIN PROGRAM / AND HERE IT IS, ENTER PLEASE!!!!!!!!!!!!! ENTR, PRINT;ENTER / "ENTER MOVE AS A 3 DIGIT NUMBER KEYCHK CRLF;CRLF JMP WHO1 PRNTOT, LETSE YMOVE, PRINT;MOVE1 NPUT, ISZ TIME SKP JMP ON READ RED, TAD (-377 / "ALL READY RED THE CHARACTER SNA JMP RUB TAD (377 AND (77 TAD (-60 DCA I WHR ISZ WHR JMP NPUT ON, CRLF RESET;TIME RESET;WHR SKP ISZ WHR /MUST CHECK ALL THE NUMBERS INPUT OK, ISZ TIME SKP JMP ALLOK FORJ IAC TAD JAY CIA TAD I WHR SNA CLA JMP OK-1 / GO GET ANOTHER NUMBER NEXTJ BADMV, PRINT;ILLEG PRINT AGAIN RUB, CRLF RESET;WHR CLA CLL DCA I WHR ISZ WHR DCA I WHR ISZ WHR DCA I WHR RESET;WHR RESET TIME JMP YMOVE ALLOK, RESET TIME RESET WHR / WE WILL USE IT AGAIN MULT (20 TSPOT DCA T1 MULT (4 TSPOT+1 TAD T1 TAD TSPOT+2 TAD (-24 DCA EM TAD EM /THIS IS THE NUMBER ON THE BOARD CDF 10 TAD I [XLOC DCA MAJLOC TAD I MAJLOC CDF SNA CLA JMP DEPOS PRINT;USED PRINT;AGAIN CRLF;CRLF JMP YMOVE DEPOS, CDF 10 ISZ I MAJLOC CDF WHO1, ADL CLA CLL DCA ES DCA TEE FRI TAD EYE CDF 10 TAD I [LLOC GETVAL CDF DCA LSBIV TAD LSBIV TAD (-4 SZA CLA JMP I (GOTTA PRINT CONGAD CRLF PRINT YOUWIN JMP I (L63 WHR, TSPOT;TSPOT T1, 0 MAJLOC, 0 PAGE L63, FORJ PRINT SPC3 MEMDS TYPM NEXTJ CRLF PRINT;POSIT CRLF LETSE JMP I (ENDGM / BYE BYE GOTTA, TAD LSBIV TAD (-17 SZA CLA JMP .+3 TAD EYE DCA ES TAD LSBIV TAD (-3 SZA CLA JMP .+3 TAD EYE DCA TEE NEXI TAD ES SNA JMP I (NJAY+1 DCA EYE FORJ MEMDS TAD EM CDF 10 TAD I [XLOC GETVAL CDF SMA SZA CLA JMP I (NJAY STXM PRINT;MOVE TYPM PRINT;WEWON JMP L63 PAGE NJAY, NEXTJ TAD TEE SNA JMP I (LMIC DCA EYE FORJ MEMDS TAD EM CDF 10 TAD I [XLOC GETVAL CDF SMA SZA JMP NIX STXM PRINT;NICE MMT, PRINT MOVE GOTO, TYPM;CRLF JMP I (PRNTOT NIX, NEXTJ FRI ADLR TAD EL AND (377 TAD (-2 SZA CLA JMP NI TAD EL TAD (-2 SMA SZA JMP I (L1850 FORJ FNVLXM SMA SZA CLA JMP NJ FNDMDS TAD I [XLOC DCA LKB TAD FRAC DCA I LKB CDF NJ, NEXTJ NI, NEXI ADL FRI CLA CLL CML RAR DCA SETFLG STF, TAD EYE CDF 10 TAD I [LLOC GETVAL CDF CIA TAD SETFLG SNA CLA JMP I (L1950 FIX, TAD (3001 DCA SETFLG TAD EYE CDF 10 TAD I [LLOC GETVAL CDF CIA TAD SETFLG SNA CLA JMP I (L1950 NEXI JMP I (ADPES SETFLG, 0 LKB, 0 LKB1, 0 PAGE L1060, CLA CLL TAD (-20 DCA ZEE DOZY, TAD ZEE TAD (21 CDF 10 TAD I (YLOC GETVAL TAD I [XLOC GETVAL CDF SNA CLA JMP FNDM ISZ ZEE JMP DOZY JMP I (DOME FNDM, TAD ZEE TAD (21 CDF 10 TAD I (YLOC GETVAL CDF DCA EM STXM JMP I (MMT LMIC, FRI ADLR TAD EL AND (177 TAD (-12 SZA CLA JMP NEWI TAD (-12 TAD EL SMA SZA CLA JMP I (L1850 FORJ FNVLXM SZA SMA CLA JMP NEWJ FNDMDS TAD I [XLOC DCA ODD1 TAD FRAC DCA I ODD1 CDF NEWJ, NEXTJ NEWI, NEXI ADL FRI CLA CLL CML RAR DCA TEM WEND, TAD EYE CDF 10 TAD I [LLOC GETVAL CDF CIA TAD TEM SNA CLA JMP I (L1950 TAD (3005 DCA TEM TAD EYE CDF 10 TAD I [LLOC GETVAL CDF CIA TAD TEM SNA CLA JMP I (L1950 NEXI NTX JMP I (NIX+1 ODD1, 0 PAGE DOME, CLA CLL DCA EM DOM1, TAD EM CDF 10 TAD I [XLOC GETVAL CDF SZA SMA JMP NEXM STXM PRINT;MACH PRINT;LIKE JMP I (GOTO NEXM, CLA CLL ISZ EM JMP DOM1 PRINT;DRAW JMP I (ENDGM ADPES, CLA CLL DCA PEE IAC DCA KAY DP, FORJ TAD KAY TAD JAY CDF 10 TAD I [LLOC GETVAL CDF AND (177 TAD PEE DCA PEE NEXTJ TAD PEE TAD (-4 SNA JMP I (STAT TAD (-5 SNA CLA JMP .-3 JMP I (NEXTK PEE, 0 PAGE NEXTK, FORJ ISZ KAY NEXTJ TAD KAY TAD (-112 SPA CLA JMP I (DP NTX JMP I (L1060 STAT, TAD FRAC DCA ES LAST, FRI TAD EYE DCA EYE+1 TAD EYE TAD (-4 SMA JMP XRXC TAD KAY TAD EYE CIA CMA DCA EYE JMP SL195 XRXC, NEXI CLA CLL DCA ES JMP I (LAST L1850, FORJ FNVLXM CIA TAD FRAC SZA CLA JMP NCKJ FNDMDS TAD I [XLOC DCA TEM TAD (5 DCA I TEM CDF TAD EL TAD (-5 SMA CLA JMP GOUT PRINT;FOX PRINT;NICK JMP MEQ GOUT, PRINT;GETOUT MEQ, PRINT MOVE XMEQ, MEMDS JMP I (GOTO NCKJ, NEXTJ L1950, TAD FRAC DCA ES ISZ WARF SL195, DCA AA TAD (TAD JAY DCA COMND TAD EYE RTR AND (177 RTL CIA TAD EYE CIA CMA SMA SZA CLA ISZ AA ISZ AA TAD AA DCA JAY DCA AA HER, FNVLXM CIA TAD ES SNA CLA JMP SET5 COMND, TAD JAY CIA TAD (5 DCA JAY TAD (JMP .+3 DCA COMND JMP HER TAD WARF SZA CLA JMP .+3 RESET;EYE CLA CLL DCA WARF JMP XRXC SET5, FNDMDS TAD I [XLOC DCA TEM TAD (5 DCA I TEM CDF PRINT;MACH PRINT;TAKE JMP XMEQ WARF, 0 AA, 0 PAGE ENDGM, CLA CLL CDF 0 TAD I (7746 /SORRY!!!! AND (6777 /YOU CAN'T COME BACK TAD FRAC DCA I (7746 PRINT BYEBYE TSF /TIME TO DIE JMP .-1 / GO HOME JMP I (7600 PAGE FIELD 1 *1400 BYEBYE, TEXT /BYE-BYE/ ENTER, TEXT /ENTER MOVE AS A 3 DIGIT NUMBER (LEV. ROW COL)/ AGAIN, TEXT /TRY AGAIN!?/ USED, TEXT /THAT SQUARE IS USED, / ILLEG, TEXT /ILLEGAL MOVE - - / MOVE1, TEXT /YOUR MOVE / CONGAD, TEXT /CONGRADULATIONS!!!!!!!/ YOUWIN, TEXT /YOU WIN AS FOLLOWS / POSIT, TEXT /FINAL POSITION/ NICE, TEXT /NICE TRY/ MACH, TEXT /MACHINE / MOVE, TEXT / MACHINE MOVES TO / WEWON, TEXT / AND WINS AS FOLLOWS/ LIKE, TEXT / LIKES / GETOUT, TEXT /LET'S SEE YOU GET OUT OF THIS ONE / FOX, TEXT / YOU FOX / DRAW, TEXT /THE GAME IS A DRAW / NICK, TEXT /JUST IN THE NICK OF TIME / TAKE, TEXT /TAKES / SPC3, TEXT / / QUBVER, TEXT / QUBIC VERSION 1.1 / $