.TITLE LSDMDK (PREVIOUSLY LSD349) / / 8 JAN 73 - SET UP IOT'S VIA .SETUP, NOT VIA FREE CORE USE / 26 SEP 72 - CONDITIONALIZE TO PRODUCE A DEFAULT JOB / 7 JUL 72 - FURTHER MODIFIED BY P. HENDERSON / JMS=JMS //MIND-BLOWER -- SAN -- 8/11/68 /FOR USE WITH MODIFIED KALEIDOSCOPE AND MINSKYTRON /MODIFIED FOR USE WITH PDP-9 ADVANCED SOFTWARE SYSTEM BY MMT / / TO ASSEMBLE A DEFAULT JOB WHICH WILL PROBABLY RUN ONLY AT THE / UNIVERSITY OF WATERLOO, NO PARAMETERS ARE REQUIRED. / / TO ASSEMBLE TO RUN UNDER ADSS, THE FOLLOWING SYMBOL IS REQUIRED: / /ADSS=1 / / THE FOLLOWING SYMBOL MUST BE DEFINED FOR .SETUP: / API=0 / .IFDEF ADSS IN=0 KB=-2 OUT=1 TTY=-3 IOPS=2 .IODEV KB,TTY .ENDC RPL=705512 IDCF=700704 IDLA=700606 IDRC=700712 IDHE=701001 IDSI=700601 IDSP=700701 IDVE=700501 STRD=706172 CLON=700044 CLOF=700004 DJP=400000 / .IFUND ADSS / DSLD=707104 DSSF=707121 DSLW=707124 DSRS=707132 DSCS=707141 DSLM=707142 DSLS=707144 TTO=-3 TTI=-2 / .IODEV TTO,TTI / LSDMDK .INIT TTO,1,LSDMDK .WRITE TTO,2,WARN,0 '*** WARNING ***' .WRITE TTO,2,WRNMSG,0 'THIS PROGRAM IS A NEW DEFAULT JOB! .INIT TTI,0,LSDMDK TYPE 'GO' TO CONTINUE' .READ TTI,2,INBUF,4 .WAIT TTI .INIT TTO,1,LSDMDK 777760 AND INBUF+2 / 'GO'? SAD GO JMP BUILD .WRITE TTO,2,NOGO,0 'NOT 'GO'. EXIT' JMP EXIT / BUILD .WRITE TTO,2,GOGO,0 'NEW DEFAULT JOB BUILT' LAC* (.SCOM AND (60000 TAD (17636-20000 CMA DAC SIZE LAC* (.SCOM+3 TAD (-20020 SPA JMP NOFILE /PROGRAM MUST NOT LOAD BELOW 20020 LAW -20 JMS DKOUT /OUTPUT I.D. B101 ISZ ONE95 ISZ ONE95 /POINT TO T 195, S 02 LAC SIZE JMS DKOUT 220000 EXIT .CLOSE TTO .EXIT / NOFILE .WRITE TTO,2,TOOBIG,0 JMP EXIT / WARN WN-.*400+2 0 .ASCII '*** WARNING ***'<12><15> WN=. / WRNMSG WM-.*400+2 0 .ASCII "THIS PROGRAM BUILDS A NEW DEFAULT JOB. TYPE 'GO' " .ASCII "TO CONTINUE."<15> WM=. / NOGO NG-.*400+2 0 .ASCII "NOT 'GO'. INSTANT EXIT"<15> NG=. / GO .ASCII 'GO' INBUF .BLOCK 4 / GOGO GG-.*400+2 0 .ASCII 'NEW DEFAULT JOB BUILT'<15> GG=. / TOOBIG TB-.*400+2 ONE95 312400 TIMAC .ASCII 'PROGRAM BELOW 20020'<15> TB=. / B101 .ASCII 'BACKGROUND IDLE' SIZE /B101+6 BEGIN BEGIN / (IORDY) BEGIN / (IORDY2) BEGIN / (INTRIO) B101+12 / DKOUT XX DSLW LAC* DKOUT /GET CORE ADDRESS ISZ DKOUT DSLM LAC ONE95 DSLD LAC (3000 /BUSY & WRITE DSCS!DSLS DSSF!DSRS JMP .-1 DSCS JMP* DKOUT / BEGIN EXIT LAC (JMP* 1330 DAC* (1327 /INTERCEPT VALID CONTROL CHARACTERS LAC (CONTROL DAC* (1330 .TIMER 2,TIMOUT JMP MNDBLO / TIMOUT XX DAC TIMAC LAC* (672 /IS TT I/O STILL GOING ON? SNA JMP END LAW -1 DAC* (7 /RESET TIMER FOR 200 MSEC LAC MBWAIT /HAS MINDBLOWER TIMER ALREADY EXPIRED? SMA JMP TIMXIT TAD (1 /ADD PROPER INCREMENT TO UPDATE TIMER DAC MBWAIT SMA!CLC DAC CFLAG /SET FLAG WHEN INTERVAL EXPIRES TIMXIT LAC TIMOUT RAL LAC TIMAC CLON JMP* TIMOUT / CONTROL CLOF LAC (1327 DAC BEGIN /POINT RETURN POINTER TO INTERCEPTED TT HANDLER END LAC STOP IDLA /STOP DISPLAY LAC (DZM 672 DAC* (1327 LAC (ION /RESTORE TT HANDLER TO VIRGIN CONDITION DAC* (1330 LAC (562 /RESET .TIMER ROUTINE TO IGNORE DAC* (561 /UNSOLICITED CLOCK INTERRUPTS JMP* BEGIN / STOP (2000 / .ENDC / .IFDEF ADSS .DEFIN TTCHECK,?A .WAITR TTY,A A=.+1 .ENDM .ENDC / .DEFIN SETCLOCK DAC .+4 /SAVE CLOCK COUNT IN .TIMER LOCATION .TIMER 0,CLOCK .OCT LAC .-1 /SAVE PREVIOUS AC, JUST IN CASE. .ENDM .ENDC / .IFUND ADSS / .DEFIN SETCLOCK DAC MBWAIT# .ENDM .ENDC / .DEFIN CLSF JMS CFLCH .ENDM .DEFIN DSI JMS DFLCH .ENDM .DEFIN DSH JMS DFLCH .ENDM .DEFIN DSV JMS DFLCH .ENDM .DEFIN DSP JMS LPFCH .ENDM .IFUND NOTRACK TRACKER 0 DAC TRSAV /TRACKER JUST SAVES PARTIAL MACHINE STATE LAC TRACKER /FROM TIME TO TIME THROUGH THE PROGRAMME SAD OLTRACK /AND NOTES HOW MANY CONSECUTIVE JMP AGAIN /TIMES IT WAS CALLED FROM THE SAME DAC OLTRACK /LOCATION. DZM TRCNT AGAIN ISZ TRCNT /INCREMENT CALL COUNT SKP HLT /IF WE GET 2^18 CALLS,SOMETHING'S WRONG LAC TRSAV /RESTORE AC JMP* TRACKER OLTRACK 0 TRCNT 0 TRSAV 0 .DEFIN TRACK JMS TRACKER .ENDM .ENDC .IFDEF NOTRACK /IF NOTRACK IS DEFINED, IGNORE TRACKER .DEFIN TRACK .ENDM .ENDC PATCH .BLOCK 40 /AREA SAVED FOR PATCHING / / /***************INTERRUPT INTERCEPTION MODULE *********** .SCOM=100 INTINIT 0 CAL API 16 IDSI SERVICE CAL API 16 IDVE SERVICE CAL API 16 IDHE SERVICE CAL API 16 IDSP SERVICE DBK JMP* INTINIT / /************ THE SERVICE MODULE ************ / PISERV DAC INTSAVE# /PI ENTRY. SAVE AC LAC* (0 DAC INTRETURN# /AND RETURN L,EM,MP,PC LAC (ION /ENSURE 'ION' AT DISMISSAL JMP IOTSKP SERVICE JMP PISERV DAC INTSAVE /API ENTRY. SAVE AC LAC SERVICE DAC INTRETURN /AND RETURN L, EM, MP, PC LAC (JMP PISERV DAC SERVICE /IN CASE API GETS TURNED OFF IORS /IS PI ON OR OFF? SMA!CLA /SKIP IF PI IS ON LAW -40 TAD (ION IOTSKP DAC IONF .IFDEF ADSS IDSP /LIGHT PEN HIT? SKP JMP LTPEN /IGNORE LIGHT PEN IF DEFAULT JOB .ENDC JMP DSINT / /MINOR FLAG SERVICE ROUTINES / .IFDEF ADSS CLOCK 0 /CLOCK IS SUBROUTINE ACCESSED BY .TIMER DAC INTSAVE CLA!CMA /-1 TO CLFLAG DAC CFLAG# LAC CLOCK RAL /RESTORE INTERRUPTED LINK LAC INTSAVE /AND AC JMP* CLOCK .ENDC / .DEFIN FLAGS,FLAGNAME,?R R 0 RPL AND (400000 /IS API ON? XOR (200 /BUILD ARGUMENT FOR ISA INSTRUCTION ISA /RAISE TO API O IF API ENABLED IOF ISZ FLAGNAME# /CHECK WHETHER THE FLAG IS -1 SKP ISZ R /IT IS, SO SKIP INSTRUCTION AFTER CALL DZM FLAGNAME /PREVENT 2**18 OVERFLOW DBK /RELEASE API 0 ION JMP* R /AND EXIT .ENDM / FLAGS CFLAG,CFLCH / FLAGS DFLAG,DFLCH FLAGS LPFLAG,LPFCH / /NOW THE DISPLAY INTERRUPTS, UNDIFFERENTIATED / DSINT CLA!CMA /SET IT TO -1 DAC DFLAG# DSEXIT IDCF /CLEAR ALL DISPLAY FLAGS LAC INTSAVE /RESTORE AC IONF ION DBR XCT .+1 JMP* INTRETURN / .IFDEF ADSS LTPEN CLA!CMA /SET LT PEN SOFTWARE FLAG DAC LPFLAG# JMP DSINT .ENDC / / /****************************************************** / MNDBLO IOF JMS INTINIT /INITIALIZE THE PI LOCAL SERVICE ENTRY ION /START THE MESSAGE OUTPUT .IFDEF ADSS .INIT TTY,OUT,CNTL .ENDC LAC (HLT DAC 21 /HALT IF PROGRAM CALS WHEN NOT IN EXTEND MODE STRD /READ ACCOUNTING CLOCK AND (176 ADD BUFFT DAC BUFPTR STRD TAD* BUFPTR DAC ZARRAY /PUT A REALLY RANDOM NUMBER IN ZARRAY .IFDEF ADSS .INIT KB,IN,CNTL /INITIALIZE KB FOR ^C, ^P .ENDC LAW -300 /SET TIME FOR INTRO TEXT SETCLOCK LOOP LAC (BEGTXT /DISPLAY INTRO TEXT IDLA JMS CHKSFL CLSF JMP LOOP JMS RAND DAC SAVERN JMP KALEID /TO KALEIDOSCOPE FIRST CNTL XCT SSMNSK /SKP IF MINDBLOWER, NOP IF STRAIGHT MINSKY .IFDEF ADSS JMP MNSKN .WAITR KB,RUNTIMER .READ KB,IOPS,INPUT,34 .ENDC NOP /IN CASE OF SKP ABOVE RUNTIMER LAW -40 SETCLOCK CLSF JMP .-1 TRACK .IFDEF ADSS LAW -100 .ENDC .IFUND ADSS LAW -200 .ENDC SETCLOCK OFFMSG LAC (OFFTXT /START LT-PEN SWITCH OFF MESSAGE IDLA XLOOP DSP /CHECK FOR LIGHT PEN FLAG SKP JMP GETOP /DISPLAY EXIT MESSAGE IF LT PEN HIT JMS CHKSFL /CHECK SCOPE FLAG CLSF JMP OFFMSG LAC (NOP DAC SSREVA DAC SSREVB DAC SSREVC LAC (SKP DAC SSXWRD DAC SSRANN DAC SSFAHL .IFDEF ADSS TTCHECK ..O1 /LOOK FOR FLOW CONTROL CHAR ON KB JMS READIN XCT SSMNSK /TO NORMAL MINSKYTRON IF NOP, MINDBLOWER JMP MNSKN /IF SKIP .ENDC CNTL1 JMS RAND TRACK DAC SAVERN AND (1700 SNA JMP SETWRD /ADD A MESSAGE TO DIPLAY EVERY LAC SAVERN AND (74 / SIXTEEN PATTERNS OR SO SNA JMP RANNUM /TAKE A RANDOM MINSKY NUMBER LAC SAVERN AND (63 SNA JMS RANIF /MESSAGE OR RANDOM MINSKY NO OR KALEID LAC SAVERN AND (17 SNA JMP KALEID /TO KALEIDOSCOPE LAC SAVERN AND (52 SAD (50 JMS SETFHL /ADD FAHLES FOLLY TO DISPLAY LAW -1-21 DAC CTR LAC (SSCHAA DAC BUFPTR LAC (SKP CNTL2 DAC* BUFPTR /SET SENSE SWITCHES TRACK ISZ BUFPTR ISZ CTR JMP CNTL2 /MIND-BLOWER, PAGE 2 DISA LAC SAVERN TRACK AND (3 /LOOK AT BITS 16-17 SAD (2 JMP VECA /DISPLAY AS VECTOR DAC SAVDIS SZA JMP .+6 LAC SAVERN AND (4 SZA JMP VECA /DISPLAY AS VECTOR JMP DISB /NOT DISPLAYED ONE-EIGHTH OF TIME LAC (NOP DAC SSVECA LAC SAVDIS SAD (1 JMP DISB /DISPLAY AS POINT LAC (NOP DAC SSCHAA JMP GCHA /DISPLAY AS CHARACTER VECA JMS SETSSW /SET SENSE SWITCHES FOR VECTOR OPTIONS DAC SSRANA DAC SSVXPA DAC SSREVA DAC SSVCTA JMP DISB LAC SAVERN AND (1000 SNA /ADD CHARACTER TO VECTOR JMP DISB GCHA LAC (NOP DAC SSCHVA LAC SAVERN RTR AND (3 SZA JMP GETAA SAD (1 JMP GETAA JMS GETRCH /GET RANDOM CHAR HALF THE TIME GETAA LAC (13737 /SET CHAR TO "A" OTHER TIMES DAC CHARA /MIND-BLOWER, PAGE 3 DISB LAC SAVERN TRACK RTR AND (3 /LOOK AT BITS 14-15 SAD (2 JMP VECB DAC SAVDIS SZA JMP .+6 LAC SAVERN AND (20 SZA JMP VECB JMP DISC LAC (NOP DAC SSVECB LAC SAVDIS SAD (1 JMP DISC LAC (NOP DAC SSCHAB JMP GCHB VECB JMS SETSSW DAC SSRANB DAC SSVXPB DAC SSREVB DAC SSVCTB JMP DISC LAC SAVERN AND (2000 SNA JMP DISC GCHB LAC (NOP DAC SSCHVB LAC SAVERN RTR; RTR AND (3 SZA JMP GETAB SAD (1 JMP GETAB JMS GETRCH GETAB LAC (23737 DAC CHARB /MIND-BLOWER, PAGE 4 DISC LAC SAVERN TRACK RTR; RTR AND (3 /LOOK AT BITS 12-13 SAD (2 JMP VECC DAC SAVDIS SZA JMP .+6 LAC SAVERN AND (1 SZA JMP VECC JMP CNTLGO LAC (NOP DAC SSVECC LAC SAVDIS SAD (1 JMP CNTLGO LAC (NOP DAC SSCHAC JMP GCHC VECC JMS SETSSW DAC SSRANC DAC SSVXPC DAC SSREVC DAC SSVCTC JMP CNTLGO LAC SAVERN AND (4000 SNA JMP CNTLGO GCHC LAC (NOP DAC SSCHVC LAC SAVERN AND (3 SZA JMP GETAC SAD (1 JMP GETAC JMS GETRCH GETAC LAC (33737 DAC CHARC /MIND-BLOWER, PAGE 5 CNTLGO LAC SAVERN RTL; RTL RTL; RTL AND (176 /BITS 0-5 GIVE INDEX FOR MINSKY NUMBER TABLE ADD BUFFT DAC BUFPTR LAC* BUFPTR /GET NUMBER FROM TABLE XCT SSRANN JMS RAND /RANDOM NO IF SS IS CLEARED DAC SETREG ISZ BUFPTR LAC* BUFPTR /GET DURATION FROM TABLE RTL; RTL JMS NEWTIM /VARY TIME DEPENDING ON DISPLAY TYPE CMA SETCLOCK JMP MNSKYT /TO MINSKYTRON GETRCH 0 /GET A RANDOM CHAR AND RA2 ISZ GETRCH AND (2 SNA /GET ONE OR TWO CHARS JMP GT2RCH JMS RAND AND (770000 /GET ONE RANDOM CHAR ADD (3737 /ADD ESCAPE CODE JMP* GETRCH GT2RCH JMS RAND AND (777700 /GET TWO RANDOM CHARS ADD (37 JMP* GETRCH RANNUM LAC (NOP DAC SSRANN JMP CNTL1 RANIF 0 /TO KALEIDOSCOPE OR ADD MESSAGE OR GET TRACK LAC SAVERN AND (14 SAD (4 JMP KALEID TRACK SAD (10 JMP SETWRD TRACK SAD (14 JMP RANNUM TRACK JMP* RANIF SETSSW JMS RAND TRACK DAC CHECK AND (1 SNA JMP .+3 LAC (NOP XCT* SETSSW /SET RANDOM ORIGIN FOR VECTOR EVERY TWO ISZ SETSSW LAC CHECK AND (70 SZA JMP .+3 LAC (NOP XCT* SETSSW /EXPAND VECTOR TO TWICE NORMAL SIZE ISZ SETSSW / EVERY EIGHT LAC CHECK AND (400 SZA JMP .+3 LAC (SKP XCT* SETSSW /REVERSE VECTOR, DISPLAY AGAIN EVERY ISZ SETSSW / FOUR LAC CHECK AND (7000 SZA JMP .+4 LAC (NOP XCT* SETSSW /DISPLAY IN VEC CONT MODE EVERY EIGHT SKP /RA5 TO NOT GET CH ISZ SETSSW ISZ SETSSW JMP* SETSSW /MIND-BLOWER, PAGE 6 SSMNSK SKP /NOP FOR STRAIGHT MINSKYTRON SSCHAA SKP /NOP FOR CHARACTER ONLY SSCHAB SKP SSCHAC SKP SSVECA SKP /SKP FOR VECTORS, NOP FOR POINTS SSVECB SKP SSVECC SKP SSVXPA SKP /SKP FOR NORMAL, NOP FOR DOUBLED SIZE SSVXPB SKP SSVXPC SKP SSRANA SKP /SKP FOR USUAL, NOP FOR RANDOM SSRANB SKP SSRANC SKP SSCHVA SKP /SKP FOR NO CHAR, NOP FOR CHAR SSCHVB SKP SSCHVC SKP SSVCTA SKP /NOP FOR VECTOR CONTINUE MODE SSVCTB SKP SSVCTC SKP SSREVA NOP /SKP TO REVERSE VECTOR AND DISPLAY AGAIN SSREVB NOP SSREVC NOP SSXWRD SKP /NOP TO DISPLAY ADDED WORD SSRANN SKP /NOP TO GET RANDOM MINSKY NUMBER SSFAHL SKP /NOP TO DISPLAY FAHLES FOLLY REVERA NOP REVERB NOP REVERC NOP CHARA 373737 CHARB 373737 CHARC 373737 SAVDIS 0 SAVERN 0 SETFHL 0 /SET PARAMETERS FOR FAHLES FOLLY TRACK LAC (NOP DAC SSFAHL JMS RAND AND (1777 DAC XC JMS RAND AND (1777 DAC Y JMS RAND AND (1777 DAC X0 JMS RAND AND (1777 DAC Y0 JMP* SETFHL /MIND-BLOWER, PAGE 7 /TABLE OF GOOD MINSKYTRON NUMBERS AND TIMINGS IN SECONDS /SIXTY-FOUR NUMBERS IN ALL... BUFPTR 0 BUFFT .+1 761665; 130 /00 125436; 120 16663; 100 14353; 15 44177; 50 771777; 340 767415; 10 17073; 20 22726; 24 /10 403575; 40 207722; 40 11347; 30 677; 30 734176; 140 456; 40 215436; 50 217435; 100 /20 555177; 140 11447; 60 555177; 100 666177; 240 770774; 60 564720; 40 550473; 40 542071; 110 /30 100077; 20 551072; 40 542210; 32 514076; 35 770757; 140 26354; 100 543467; 40 555175; 60 /40 372277; 130 222177; 45 777176; 200 333177; 45 666174; 40 444277; 60 534220; 40 771775; 100 /50 473615; 10 665561; 20 216651; 35 753120; 40 362511; 32 36712; 50 31767; 30 11447; 60 /60 300077; 40 365760; 5 342511; 10 665516; 4 66520; 3 364650; 12 363557; 3 243575; 4 /70 717276; 4 773765; 15 100075; 4 4443; 20 403377; 50 443777; 10 400073; 20 /77 /MIND-BLOWER, PAGE 8 /SCOPE CODED TEXTS BEGTXT 020134 /SCOPE CONDING FOR INTRO TEXT 221400 060512 BEGTX1 270514 /WEL E GOO 031715 /COM NJO D-B 054024 /E T YIN YE 174024 /O T G T FRO 100537 /HE HE M BEGTX2 020157 060612 334040 331533 /LF,M,LF 113316 /I,LF,N 330433 /LF,D,LF 553302 /-,LF,B 331433 /LF,L,LF 173327 /O,LF,W 330533 /LF,E,LF BEGTX3 223737 /R R,LF,? R,LF,^ 020132 021600 260000 230116 /SAN 373737 003000 LOVTXT 020132 XX XX 141726 /LOVE IS RANDOM 054011 234022 011604 171537 003000 WRKTXT 020132 XX XX 271031 /WHY ARENT YOU WORKING? 400122 051647 244031 172540 271722 131116 077737 003000 PCETXT 020173 XX XX 200501 /PEACE 030537 003000 OFFTXT 034155 /PAR TO PT MODE, SET LPEN, SCALE 4, INT 5 221400 /Y COORDINATE 060020 /X COORDINATE, AND SET CHARACTER MODE .IFDEF ADSS .SIXBT "YOU CAN STOP THIS CRAZY"<34> .SIXBT <33>"THING BY HITTING THIS"<34><33> .SIXBT "MESSAGE WITH THE LIGHT PEN."<37> .ENDC .IFUND ADSS .SIXBT ' UNIVERSITY OF WATERLOO'<34><33><33> .SIXBT 'ENGINEERING COMPUTER CENTER'<37> .ENDC 003000 /DISPLAY STOP. /MIND-BLOWER, PAGE 9 SETQRY /CHANGE INTRO BUFFER TO CONTAIN TEXT FOR / "ENJOYING THE MINDBLOWER?" LAC (20134 DAC BEGTXT LAC (404005 DAC BEGTX1 LAC (161217 DAC BEGTX1+1 LAC (311116 DAC BEGTX1+2 LAC (074024 DAC BEGTX1+3 LAC (20153 DAC BEGTX2 LAC (223377 DAC BEGTX3 LAC (373737 DAC BEGTX3+1 LAC (3000 DAC BEGTX3+2 LAC (JMP* SETQRY /CHANGE ONLY ONCE DAC SETQRY+1 JMP* SETQRY SETWRD LAC (NOP /SET MESSAGE TO ADD TO DISPLAY DAC SSXWRD /CLEAR SENSE SWITCH LAC SAVERN TRACK RTL; RTL AND (7 /LOOK AT BITS 0-2 SAD (0 JMP SETWRK AND (3 SAD (1 JMP SETLOV SAD (2 JMP SETPCE JMS SETQRY /MESSAGE IS "ENJOYING..." LAC (BEGTXT SETWEX DAC DISPA1 JMP CNTL1 DISPA1 0 /ADDRESS AT WHICH MESSAGE STARTS SETWRK JMS RAND /MESSAGE IS "WHY ARENT YOU WORKING AND (1277 ADD (20000 DAC WRKTXT+1 JMS RAND AND (1760 ADD (260000 DAC WRKTXT+2 /GET RANDOM X,Y COORDINATES LAC (WRKTXT JMP SETWEX SETPCE JMS RAND /MESSAGE IS "PEACE" AND (1400 ADD (20000 DAC PCETXT+1 JMS RAND AND (1700 ADD (260000 DAC PCETXT+2 /SET RANDOM COORDINATES LAC (PCETXT JMP SETWEX SETLOV JMS RAND /MESSAGE IS "LOVE IS RANDOM" AND (1277 ADD (20000 DAC LOVTXT+1 JMS RAND AND (1760 ADD (260000 DAC LOVTXT+2 /SET RANDOM COORDINATES LAC (LOVTXT JMP SETWEX /MIND-BLOWER, PAGE 10 NEWTIM /EXPAND TIME FOR PATTERN TO RUN / DEPENDING ON OPTIONS CHOSEN DAC CHECK RCR DAC HALF RCR DAC ADDTIM RCR DAC EIGHTH LAC ADDTIM XCT SSVECA; SKP; ADD HALF XCT SSVECB; SKP; ADD HALF XCT SSVECC; SKP; ADD HALF XCT SSREVA; SKP; ADD HALF XCT SSREVB; SKP; ADD HALF XCT SSREVC; SKP; ADD HALF XCT SSCHVA; ADD EIGHTH XCT SSCHVB; ADD EIGHTH XCT SSCHVC; ADD EIGHTH ADD CHECK JMP* NEWTIM HALF 0 ADDTIM 0 EIGHTH 0 GETOP NOP /GIVE FINAL MESSAGE AND CALL OP LAC (071717 /CHANGE INTRO BUFFER TO CONTAIN TEXT FOR DAC BEGTX1 / "GGOD-BYE FROM MIND-BLOWER^" LAC (045502 DAC BEGTX1+1 LAC (310540 DAC BEGTX1+2 LAC (062217 DAC BEGTX1+3 LAC (153737 DAC BEGTX1+4 LAC (223341 DAC BEGTX3 LAC (373737 DAC BEGTX3+1 LAC (3000 DAC BEGTX3+2 LAW -1000 SETCLOCK LAC (BEGTXT IDLA JMS CHKSFL CLSF JMP .-4 JMP CALOP /CALL OPERATOR /MIND-BLOWER, PAGE 11 CALOP .EXIT /RETURN TO NON-EXISTENT MONITOR /ANGLES, DN, 3-16-66 /ASSEMBLE WITH RAND /WITH MODIFICATIONS FOR MIND-BLOWER BY SAN KALEID LAC SAVERN RTR; RTR AND (3 ADD (LAW -1-5 DAC CTR2 ANGDPY JMS RAND DAC MGKNUM AND MSK ADD K CMA DAC CTR JMS SETANG ANGDP1 JMS ANGLES TRACK ISZ CTR JMP ANGDP1 ISZ CTR2 JMP ANGDPY JMP CNTL CTR 0 CTR2 0 MSK 1777 K 100 SETANG LAC MGKNUM /MAGIC NUMBER AND (177777 ADD (600000 DAC SLOPE LAC (LINE0 JMS PLOT JMP* SETANG ANGLES LAC (LINE JMS PLOT JMP* ANGLES MGKNUM 030014 /ALSO TRY 401201,400405,401222,030014,040020 PLOT IOF IDLA DSH SKP; JMP REVERSE DSV SKP; JMP REVERSE DSP SKP; JMP REVERSE JMP PLOT+3 REVERSE LAC SLOPE /OR TAD SLOPE IF VELOCITY IS WANTED TRACK AND (177777 ADD (600000 DAC SLOPE IDRC TRACK AND (777 SAD (0 JMP VERTTOP SAD (777 JMP VERTBOT IDRC AND (777000 SAD (0 JMP HORRT SAD (777000 JMP HORLFT JMP RESETP+3 /ANGLES PAGE2 VERTTOP LAC (201774 SKP VERTBOT LAC (200007 DAC RESET JMP VERT HORRT LAC (001770 SKP HORLFT LAC (000007 DAC RESET JMP HOR VERT LAC SLOPE /CHANGE THE SLOPE OF DELTA Y XOR (100000 DAC SLOPE LAC (RESET0 JMP RESETP HOR LAC SLOPE /CHANGE THE SLOPE OF DELTA X XOR (200 JMP VERT+2 RESETP IDLA DSI JMP .-1 TRACK IDCF JMP* PLOT LINE0 030115 /TO POINT MODE 221002 /Y = 1002 000000 /X = 0 LINE 120015 /TO VECT CONT OR 020000 FOR VECTOR SLOPE 730014 003000 RESET0 020000 /TO POINT MODE RESET 0 /RESET THE PROPER AXIS 3000 /STOP 3000 /AN EXTRA STOP, JUST IN CASE /RAND - A RANDOM NUMBER GENERATOR, EBN(JM), 12-15-65 RAND LAC* ZEKE ISZ ZEKE ADD* ZEKE DAC* ZEKE ISZ ZEKECT JMP* RAND LAC ZEKSET DAC ZEKECT LAC ZESTAR DAC ZEKE LAC ZARRAY+20 DAC ZARRAY JMP* RAND ZARRAY 213616; 520634; 174030; 172416 606510 533407; 405264; 205727; 327304 317401; 477454; 625742; 416766 761172; 006531; 365100; 321553 ZEKECT -1-17 /VARIABLE COUNT ZEKSET -1-17 /USE TO RESET COUNT ZEKE ZARRAY /VARRIABLE WORD LOCATION ZESTAR ZARRAY /USE TO RESET LOCATION /NEW TRON OF MINSKY, MODIFIED BY SAN, 7/28/68 MNSKYT LAC SETREG TRACK JMS SETUP DAC SHFTCX /JMP R10-I5 TO SHFTCX LAC SETREG RCR; RCR; RCR JMS SETUP DAC SHFTCY / I4 SHFTCY LAC SETREG RCR; RCR; RCR JMS SETUP DAC SHFTBX / I3 SHFTBX LAC SETREG RCR; RCR; RCR JMS SETUP DAC SHFTBY / I2 SHFTBY LAC SETREG RCR; RCR; RCR JMS SETUP DAC SHFTAX / I1 SHFTAX LAC SETREG RCR; RCR; RCR JMS SETUP DAC SHFTAY / I0 SHFTAY TRACK LAC (1000 /SET ORIGINAL A,B,C LOCATIONS DAC XTEMA LAC (1010 DAC XTEMB LAC (770 DAC XTEMC ADD (-1-1 DAC YTEMA DAC YTEMB LAC (1006 DAC YTEMC LAC (NOP /CLEAR FIRST PASS SS DAC SETSS LAC (JMP APNT1 DAC JMPAPT JMP APOINT APNT1 LAC (SKP /SET FIRST PASS SS TRACK DAC SETSS LAC (JMP APOINT DAC JMPAPT /NEW TRON, PAGE 2 APOINT LAC SSREVA /DISPLAY A DAC REVERA LAC SSREVB DAC REVERB LAC SSREVC DAC REVERC LAC (NOP DAC DSPCHC .IFDEF ADSS TTCHECK JMS READIN XCT SSMNSK /SKIP OR NOP SWITCH SKP /SKIP CLOCK CHECK IF STRAIGHT MINSKY .ENDC MCLCK CLSF SKP JMP CNTL /GET NEW PATTERN WHEN CLOCK ELAPSES XCT SSXWRD JMS DISWRD /DISPLAY EXTRA MESSAGE IF DESIRED XCT SSFAHL JMS DSPFHL /DISPLAY FAHLES FOLLY IF DESIRED LAC XTEMA CMA ADD XTEMB CMA /AX - BX JMS MOVEIT SHFTAY XX /DIVIDE BY 2^I0 TRACK ADD YTEMA DAC YTEMA /ADD TO Y COORDINATE CMA ADD YTEMB CMA /AY - BY JMS MOVEIT SHFTAX XX /DIVIDE BY 2^I1 TRACK CMA ADD XTEMA DAC XTEMA /SUBTRACT FROM X COORDINATE AND (1777 XCT SSCHAA JMP SHFTA1 /TO GET CHAR, DO NOT INTENSIFY POINT XCT SSVECA JMS DISPPT /SET FOR POINT, INTENSIFIED ADD (100000 /SET FOR VECTOR SHFTA1 DAC XWORD LAC YTEMA AND (1777 ADD (220000 DAC YWORD JMS SETPAR /SET DISPLAY PARAMETER AND STOP WORDS XCT SSVECA JMP DISPLA /DISPLAY NOW UNLESS VECTOR XCT SETSS JMP SETA /SET ORIGINS IF FIRST PASS LAC SAVEAX DAC OLDX LAC SAVEAY DAC OLDY JMS SETDIS /SET UP VECTOR DISPLAY XCT SSVXPA JMS EXPAND /DOUBLE VECTOR SIZE IF DESIRED XCT SSVCTA JMS VECCON /DISPLAY IN VEC CONT MODE IF DESIRED DISPLA LAC (DSPADR IDLA JMS CHKSFL XCT REVERA JMP DSPCHA LAC (NOP DAC REVERA LAC (JMP BPOINT DAC DSPCHA /SUPPRESS CHAR DISPLAY IF VECTOR REVERSED JMS REVRSE /REVERSE VECTOR AND DISPLAY AGAIN JMP DISPLA DSPCHA NOP LAC CHARA XCT SSCHVA JMS DISPCH /DISPLAY CHARACTER /NEW TRON, PAGE 3 BPOINT LAC (NOP /DISPLAY B TRACK DAC DSPCHB LAC XTEMB CMA ADD XTEMC CMA JMS MOVEIT SHFTBY XX ADD YTEMB DAC YTEMB CMA ADD YTEMC CMA JMS MOVEIT SHFTBX XX CMA ADD XTEMB DAC XTEMB AND (1777 XCT SSCHAB JMP SHFTB1 XCT SSVECB JMS DISPPT ADD (100000 SHFTB1 DAC XWORD LAC YTEMB AND (1777 ADD (220000 DAC YWORD JMS SETPAR XCT SSVECB JMP DISPLB XCT SETSS JMP SETB LAC SAVEBX DAC OLDX LAC SAVEBY DAC OLDY JMS SETDIS XCT SSVXPB JMS EXPAND XCT SSVCTB JMS VECCON DISPLB LAC (DSPADR IDLA JMS CHKSFL XCT REVERB JMP DSPCHB LAC (NOP DAC REVERB LAC (JMP CPOINT DAC DSPCHB JMS REVRSE JMP DISPLB DSPCHB NOP LAC CHARB XCT SSCHVB JMS DISPCH /NEW TRON, PAGE 4 CPOINT LAC (NOP /DISPLAY C TRACK DAC DSPCHB LAC XTEMC CMA ADD XTEMA CMA JMS MOVEIT SHFTCY XX ADD YTEMC DAC YTEMC CMA ADD YTEMA CMA JMS MOVEIT SHFTCX XX CMA ADD XTEMC DAC XTEMC AND (1777 XCT SSCHAC JMP SHFTC1 XCT SSVECC JMS DISPPT ADD (100000 SHFTC1 DAC XWORD LAC YTEMC AND (1777 ADD (220000 DAC YWORD JMS SETPAR XCT SSVECC JMP DISPLC XCT SETSS JMP SETC LAC SAVECX DAC OLDX LAC SAVECY DAC OLDY JMS SETDIS XCT SSVXPC JMS EXPAND XCT SSVCTC JMS VECCON DISPLC LAC (DSPADR IDLA JMS CHKSFL XCT REVERC JMP DSPCHC LAC (NOP DAC REVERC LAC (JMP APOINT XCT SETSS LAC (JMP APNT1 DAC DSPCHC JMS REVRSE JMP DISPLC DSPCHC NOP LAC CHARC XCT SSCHVC JMS DISPCH JMPAPT JMP APOINT /JMP APNT1 ON PASS 1, ELSE JMP APOINT /NEW TRON, PAGE 5 SETUP DAC SETREG AND (7 ADD (LAC JMPTAB DAC .+1 XX /LAC JMPTAB+I JMP* SETUP JMPTAB JMP R10 /DIVIDE BY 2 JMP R7 / 4 JMP R6 / 8 JMP R5 / 16 JMP R4 / 32 JMP R3 / 64 JMP R2 / 128 JMP R1 / 256 MOVEIT XCT* MOVEIT /JMP R10-I R1 JMS SHIFTR /SHIFT RIGHT 10 R2 JMS SHIFTR R3 JMS SHIFTR R4 JMS SHIFTR R5 JMS SHIFTR R6 JMS SHIFTR R7 JMS SHIFTR R10 JMS SHIFTR /SHIFT RIGHT 1 TRACK ISZ MOVEIT JMP* MOVEIT SHIFTR /ROTATE AC ONE RIGHT, PRESERVING SIGN SPA+CLL-OPR CML RAR JMP* SHIFTR DSPADR 20115 /DISPLAY BUFFER YWORD XX XWORD XX VECTOR XX 3000; 3000; 3000 3000; 3000; 3000 3000; 3000; 3000 3000; 3000; 3000 3000; 3000; 3000 3000 XTEMA 0 XTEMB 0 XTEMC 0 YTEMA 0 YTEMB 0 YTEMC 0 SETREG 0 /NEW TRON, MODIFIED BY SAN -- PAGE 6 SETA XCT SSRANA /SAVE ORIGIN POINT OF A JMS SETRAN /GET RANDOM ORG IF SS CLEARED LAC XWORD DAC SAVEAX LAC YWORD DAC SAVEAY JMP BPOINT SETB XCT SSRANB /SAVE ORIGIN OF POINT B JMS SETRAN LAC XWORD DAC SAVEBX LAC YWORD DAC SAVEBY JMP CPOINT SETC XCT SSRANC /SAVE ORIGIN OF C XCT SSRANC JMS SETRAN LAC XWORD DAC SAVECX LAC YWORD DAC SAVECY JMP APNT1 SETRAN /SET X,Y DISPLAY COORDS TO RANDOM VALUES JMS RAND AND (1777 ADD (100000 DAC XWORD JMS RAND AND (1777 ADD (220000 DAC YWORD JMP* SETRAN SAVEAX 0 SAVEAY 0 SAVEBX 0 SAVEBY 0 SAVECX 0 SAVECY 0 OLDX 0 OLDY 0 TEMPX 0 TEMPY 0 SETSS NOP /NEW TRON, MODIFIED BY SAN -- PAGE 7 DISPCH /DISPLAY A CHARACTER DAC YWORD /ENTER WITH CHAR WORD IN AC LAC (3000 DAC XWORD LAC (060134 DAC DSPADR /SET TO CHAR MODE LAC (DSPADR IDLA JMS CHKSFL JMP* DISPCH DISWRD /DISPLAY ADDED WORD LAC DISPA1 IDLA JMS CHKSFL JMP* DISWRD DISPPT ADD (2000 /SET INTENSIFY BIT TO DISPLAY POINT ISZ DISPPT JMP* DISPPT DSPFHL /DISPLAY FAHLES FOLLY LAW -1-30 DAC CTR JMS CIRCLE JMS CHKSFL ISZ CTR JMP .-3 /DISPLAY A FEW POINTS BEFORE EXITING JMP* DSPFHL EXPAND /CHANGE DISPLAY TO SCALE 01 TO DOUBLE LAC (20135 DAC DSPADR JMP* EXPAND CHKSFL /WAIT FOR SCOPE FLAG DSI SKP; JMP* CHKSFL DSH SKP; JMP* CHKSFL DSV JMP CHKSFL+1; JMP* CHKSFL SETPAR /SET PARAMETER MODE WORD AND STOP WORD TRACK LAC (20117 DAC DSPADR LAC (3000 DAC VECTOR JMP* SETPAR /NEW TRON, MODIFIED BY SAN -- PAGE 8 SETDIS /SET UP DISPLAY BUFFER TO GIVE VECTOR LAC (20115 DAC DSPADR LAC (VECTOR-1 DAC BUFPTR LAC XWORD DAC TEMPX LAC OLDX DAC XWORD LAC YWORD DAC TEMPY LAC OLDY DAC YWORD JMP SETD2 SETD1 CLL /CHANGE OLDX, OLDY BY LENGTH OF ALREADY TRACK LAC TEMPX2 AND (200 SZA STL JMS SETOX CLL LAC CTR2 SZA STL JMS SETOY SETD2 DZM TEMPX2 TRACK DZM TEMPY2 DZM CTR DZM CTR2 LAC OLDX CMA ADD TEMPX /FIND DELTAX SAD (-1-0 JMP SETD3 CLL!SPA CMA!STL DAC CHECK AND (177 SAD CHECK SKP JMS ROTAT /DIVIDE BY 2 IF DELTAX G.T. 177 SZL ADD (200 /PRESERVE SIGN BIT DAC TEMPX2 SETD3 LAC OLDY TRACK CMA ADD TEMPY /FIND DELTAY SAD (-1-0 JMP SETD4 CLL!SPA CMA!STL JMS ROTIF /DIVIDE IF DELTAX WAS DIVIDED DAC CHECK AND (177 SAD CHECK SKP JMS ROTYT /DIVIDE IF DELTAY G.T. 177 SZL ADD (200 /PRESERVE SIGN BIT SZL ISZ CTR2 DAC TEMPY2 CLL RTL; RTL RTL; RTL /SHIFT DELTAY TO APPROPRIATE POSITION SETD4 ADD TEMPX2 /SET UP DISPLAY WORD WITH DELTAY, DELTAX TRACK ADD (200000 /SET INTENSIFY BIT ISZ BUFPTR DAC* BUFPTR /DEPOSIT WORD LAC CTR SZA JMP SETD1 /FIND NEXT WORD IF VECTOR TOO SHORT LAC* BUFPTR ADD (400000 DAC* BUFPTR /SET ESCAPE BIT ON LAST VECTOR MODE WORD ISZ BUFPTR LAC (3000 DAC* BUFPTR /SET STOP CODE JMP* SETDIS /NEW TRON, MODIFIED BY SAN -- PAGE 9 ROTAT /ROTATE DELTAX RIGHT AND INDEX CTR UNTIL TRACK / DELTAX L.T. 177 LAC CHECK RCR ISZ CTR DAC CHECK AND (177 SAD CHECK SKP JMP ROTAT+1 LAC ROTAT RAL LAC CHECK JMP* ROTAT ROTYT /ROTATE DELTAX AND DELTAY RIGHT AND TRACK / INDEX CTR UNTIL DELTAY L.T. 177 CLL LAC TEMPX2 AND (200 SZA STL LAC TEMPX2 AND (177 SZL ADD (400 RCR DAC TEMPX2 LAC CHECK RCR ISZ CTR DAC CHECK AND (177 SAD CHECK SKP JMP ROTYT+1 LAC ROTYT RAL LAC CHECK JMP* ROTYT ROTIF /ROTATE AC RIGHT AS MANY PLACES AS TRACK / DELTAX WAS ROTATED DAC CHECK LAC CTR SZA JMP ROTIF1 LAC CHECK JMP* ROTIF ROTIF1 CMA DAC ROTTMP ISZ ROTTMP LAC CHECK RCR ISZ ROTTMP JMP .-2 DAC CHECK LAC ROTIF RAL LAC CHECK JMP* ROTIF ROTTMP /NEW TRON, MODIFIED BY SAN -- PAGE 10 SETOX /SET OLDX LAC TEMPX2 SZL ADD (-1-200 SZL CMA ADD OLDX DAC OLDX JMP* SETOX SETOY /SET OLDY LAC TEMPY2 SZL ADD (-1-200 SZL CMA ADD OLDY DAC OLDY JMP* SETOY REVRSE /REVERSE VECTOR DISPLAY LAC (VECTOR DAC BUFPTR REVER1 LAC* BUFPTR TRACK SAD (3000 JMP* REVRSE XOR (100200 /CHANGE SIGN BITS OF INCREMENTS DAC* BUFPTR ISZ BUFPTR JMP REVER1 VECCON /CHANGE DISPLAY TO VECTOR CONTINUE MODE TRACK LAC VECTOR AND (177777 SNA JMP* VECCON /DO NOT DISPLAY ZERO VECTOR IN VEC CONT ADD (600000 DAC VECTOR LAC XWORD ADD (20000 DAC XWORD /CHANGE MODE OF PREVIOUS INSTRUCTION LAC (3000 DAC VECTOR+1 JMP* VECCON TEMPX2 0 TEMPY2 0 CHECK 0 /FAHLE'S FOLLY, DN - KL - WF (JM), 5-23-65 (1) /NEEDS SIGNED MULTIPLY /CIRCLE CENTER IS AT X0, Y0 /CIRCLE PASSES THROUGH X, Y /SPIRAL SPEED IS SET BY ACS /SPIRAL SIZE IS LIMITED BY MASK /CIRCLE IS A SUBROUTINE WITHOUT ANY EXIT, AH WELL /NOT ANY LONGER, AH YES^ CIRCLE TRACK LAC (JMP PLOTPT DAC CIRC1 CIRCA LAC Y CLL /FAKE MULTIPLICATION SPA STL RAR ADD XC DAC XC /X = X + AY CLL SPA STL RAR CMA ADD Y /Y = Y - AY DAC Y CIRC1 JMP PLOTPT PLOTPT ADD Y0 AND (1777 ADD (220000 DAC PLOTY LAC XC PLOTSP ADD X0 AND (1777 ADD (002000 DAC PLOTX LAC (PLOT0 IDLA JMP* CIRCLE /FAHLES FOLLY, PAGE 2 XC 0 Y 60 X0 1000 Y0 1000 XNEW 0 YNEW 0 Z 400 MASK 3777 FLAG 0 SAVE 0 PLOT0 030177 PLOTY 403700 PLOTX 403700 003000 / / /GET7 UNPACKS AN ASCII 5/7 WORD PAIR INTO A 5-WORD CHARACTER /BUFFER POINTED AT BY THE CALL+1. THE ASCII WORD PAIR IS /POINTED AT BY CALL+2. /CONSECUTIVE CALLS TO GET7 FROM THE SAME CALLING POINT (OR CALLS /WITH THE SAME ARGUMENTS PROPERLY INCREMENTED) GET CONSECUTIVE /CHARACTERS FROM THE ASCII BUFFER. THE CHARACTERS ARE RETURNED IN /THE AC ON EXIT FROM GET7. /THE ACTUAL POINTER TO THE NEXT CHARACTER TO BE RETURNED VIA THE /AC IS AT THE TAIL OF THE 5-WORD BUFFER,MAKING THE BUFFER 6 WORDS /LONG INCLUDING THIS POINTER. /THE WORD AT CALL+2 IS INCREMENTED BY THE GET7 ROUTINE, SO THAT IT /PROPERLY POINTS TO THE NEXT ASCII WORD PAIR READY FOR ANOTHER /CALL. IT MUST BE INITIALIZED WHEN GET7 IS FIRST CALLED WITH A NEW /BUFFERLOAD. / .IFDEF ADSS GET7 0 LAC* GET7 /PICK UP POINTER TO CHARACTER BUFFER ISZ GET7 DAC BUF5PT ISZ* BUF5PT /CHARACTER NUMBER GOES FROM -5 TO -1 JMP NEXCHR /INCREMENTS OK, GET NEXT FROM 5 LIST ASCI5 LAC* GET7 /GET ASCII BUFFER POINTER DAC ASCIPTR LAC* ASCIPTR /GET FIRST WORD OF PAIR DAC ONEASCI ISZ ASCIPTR LAC* ASCIPTR /GET SECOND WORD OF PAIR DAC TWOASCI ISZ ASCIPTR LAC ASCIPTR DAC* GET7 /POINT TO NEXT ASCII PAIR LAW -5 /NOW INITIALIZE THE CHARACTER BUFFER DAC* BUF5PT /SAVE EMPTY COUNT IN POINTER WORD DAC FILCT TAD BUF5PT /GET PROPER ADDRESS FOR CHARACTER DAC FIL5PT LAC TWOASCI /START SPLITTING ASCII 5 LMQ LAC ONEASCII CLL ASCILOOP DAC ASCAC /SAVE AC FOR LOOP JMP CH5FIL LAC ASCAC /RESTORE AC AFTER DESTRUCTION LLS+7 /SHIFT UP 7 BITS JMP ASCILOOP /DO THE NEXT ONE CH5FIL AND (774000 /SPLIT OFF 7 BITS RTL; RTL RTL; RTL /SHIFT 8 LEFT TO GET BY LINK DAC* FIL5PT /STORE THE CHARACTER ISZ FIL5PT /INCREMENT BUFFER POINTER ISZ FILCT JMP ASCILOOP+2 /DO THE NEXT NEXCHR LAC* BUF5PT /BUFFER INTO THE AC TAD BUF5PT /FIRST FORM THE ADDRESS DAC BUF5PT LAC* BUF5PT /THEN GET THE CHARACTER ISZ GET7 JMP* GET7 /AND EXIT BUF5PT ASCIPTR ONEASCI TWOASCI FILCT FIL5PT ASCAC GET7INIT 0 DAC ASCAC /SAVE AC. WHY NOT? LAC* GET7INIT /POINTER TO CHARACTER BUFFER COUNT DAC BUF5PT CLA!CMA DAC* BUF5PT /NOW GET7 WILL INITIALIZE CH BUF. LAC ASCAC ISZ GET7INIT JMP* GET7INIT .EJECT /**************MODS TO PERMIT STRAIGHT MINSKYTRON OPERATION********* / / MNSKN .WRITE TTY,IOPS,MOUT,34 /"VALUE" TRACK .WAIT TTY .WAITR KB,KBWAIT /KEYBOARD OPERATION MAY ALREADY BE PRIMED .READ KB,IOPS,MNUM,34 /THE MINSKY NUMBER TRACK KBWAIT .WAIT KB .OCT JMS GETOCT /GETS THE OCTAL NUMBER PRESUMED IN MNUM MNUM+2 DAC SETREG .WAITR KB,MNSKYT .READ KB,IOPS,MNUM,34 /PRIME TTCHECK FOR EXIT WITH CR TRACK .OCT JMP MNSKYT /THE MINDBLOWER VERSION IN POINT MODE / MNSKXIT LAC (SKP /HERE ON L CODE, TO RETURN TO NORMAL DAC SSMNSK /MINDBLOWER OPERATION JMP CNTL / GETOCT 0 /DECODE AN OCTAL NUMBER WITH NO LEADING ANYTHINGS. CLA!CMA DAC OCTBUF /SETUP GET7 BUFFER LAC* GETOCT /GET POINTER TO ASCII BUFFER ISZ GETOCT /SETUP EXIT DAC OCTPTR /SETUP GET7 ASCII POINTER GETLOOP JMS GET7 /GET THE CHARACTERS ONE BY ONE OCTBUF OCTPTR 0 SAD (130 /X CHARACTER SAYS GOODBYE JMP GETOP DAC NTEM /SAVE PUTATIVE NUMBER SAD (114 /L CHARACTER GOES TO MINDBLOWER JMP MNSKXIT AND (160 /NOW CHECK FOR OCTALITY SAD (60 JMP OCT /IT IS OK, REALLY OCTAL OCTXIT LAC OCTNUM /NOT OCTAL, END THE NUMBER JMP* GETOCT /AND EXIT OCT LAC OCTNUM /AUGMENT THE NUMBER AND (77777 /CLEAR OFF THE TOP BITS DAC OCTNUM LAC NTEM /NOW STRIP THE NEW DIGIT AND (7 RTR; RAR /3 BITS RIGHT ADD OCTNUM RTL; RAL /AND BACK AGAIN, BUT WITH THE OLD PART DAC OCTNUM /SHIFTED UP JMP GETLOOP /NOW GET ANOTHER DIGIT .BLOCK 5 /BUFFER FOR GET7 OCTBUF 0 OCTNUM NTEM / / / READIN 0 /CHECKS FOR CONTROL CHARACTERS STARTING LINES CLA!CMA DAC RDBUF /SETUP READ BUFFER COUNTER LAC (INPUT+2 DAC RLOOP+2 /INITIALIZE BUFFER POINTER RLOOP JMS GET7 /GET A CHARACTER RDBUF INPUT+2 SAD (115 /M CHARACTER GETS STRAIGHT MINSKY JMP MCODE SAD (130 /X CHARACTER SAYS GOODBYE JMP GETOP SAD (114 /L CHARACTER SAYS MINDBLOWER JMP MNSKXIT SAD (15 /CR MEANS END OF BUFFER WITH NO JMP CNTL /OTHER COMMAND, SO GET A NEW PATTERN JMP RLOOP /HAVEN'T HAD ANY OF THEM YET CLA!CMA JMP* READIN /EXIT WITH -1 IN AC (UNUSED FACILITY) .BLOCK 5 RDBUF / / / MCODE LAC (NOP /HERE WHEN STRAIGHT MINSKY WANTED DAC SSMNSK /SET UP THE SENSE SWITCHES DAC SSVECA DAC SSVECB DAC SSVECC LAC (SKP DAC SSVXPA DAC SSVXPB DAC SSVXPC DAC SSRANA DAC SSRANB DAC SSRANC DAC SSCHVA DAC SSCHVB DAC SSCHVC DAC SSVCTA DAC SSVCTB DAC SSVCTC DAC SSCHAA DAC SSCHAB DAC SSCHAC ENDSWSET JMP MNSKN /GO TO THE MINSKY READ LOCATION / / / / / /HEADER MACRO .DEFIN HEADER,MBEG,MEND MBEG MEND-MBEG/2*1000 0 .ENDM / HEADER MOUT,MOUTEND .ASCII "VALUE "<175> MOUTEND=. INPUT=. HEADER MNUM,MNUMEND .BLOCK 34 MNUMEND=. .END MNDBLO .ENDC /CONDITIONAL BEGAN AT 'GET7' .IFUND ADSS .END LSDMDK .ENDC