diff --git a/build/misc.tcl b/build/misc.tcl index 01e30d55..9c38256b 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -523,6 +523,10 @@ respond "*" ":midas;324 /t dsk0:.;@ mlife_rwg;mlife\r" respond "with ^C" "TS==0\r\003" expect ":KILL" +# MLIFE +respond "*" ":midas;324 dsk0:.;@ pornis_rwg; pornis\r" +expect ":KILL" + # 340D respond "*" ":midas stan.k;mod11 bin_340d\r" expect ":KILL" diff --git a/doc/programs.md b/doc/programs.md index e0cb52f7..07d87d92 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -240,6 +240,7 @@ - PICK, examine Muddle locks. - PLAN, creates a PLAN file in your home directory from console input. - PONG, Imlac game. +- PORNIS, display Steiner chains on 340 display. - PORTS, display free network ports. - PR, print out various system documentation. - PRINT, print long-named files. diff --git a/src/rwg/pornis.24 b/src/rwg/pornis.24 new file mode 100644 index 00000000..4c588d7c --- /dev/null +++ b/src/rwg/pornis.24 @@ -0,0 +1,554 @@ +TITLE PORNISM +;152170,,-1 152525,,000566 552020,,003127 444000,,000021 +;RIM +;NOSYMS +;IF2 [WORD -8,,17 +;WORD CONO PTR,60 +;WORD CONSO PTR,8 +;WORD JRST 21 +;WORD DATAI PTR,26 +;WORD CONSO PTR,8 +;WORD JRST 24 +;WORD ASCII SIXBITS +;WORD JRST 21 +;.SLDR] +A=1 B=2 C=3 D=4 E=5 M=6 R=7 T=8 X=9 Y=12 SP=16 P=17 +FLGCHN==1 DISCHN==2 FLGDIS==FLGCHN_3+DISCHN +DEFINE 4PUT L + IRPS Q,,A B C D,R,,L + MOVEI 0,R + JSP Q,(Q) + TERMIN +TERMIN +BUFL==77 + ;TTY COMMANDS +;C SWITCH COORDINATE SYSTEM FROM OUTER CIRCLE FIXED TO ALMOST FIXED INNER CIRCLE (COMPLEMENTS) +;D NORMAL CIRCLE DISPLAY SEQUENCE OR BOUNDING CIRCLES EVERY OTHER TIME (FOR STROBE EFFECTS; COMPLEMENTS) +;E CENTERING +;F FLUSH BOUNDING CIRCLES (COMPLEMENTS) +;G (GUNCH) AOS RADIUS +;H (HALF) TAKE ONE HALF OF RADIUS +;I INTERCHANGE X AND RADIUS +;J INTERCHANGE Y AND RADIUS +;K INTERCHANGE X AND Y +;L MAP RADIUS IN PECULIAR FASHION WHICH CAUSES BUBBLES +;M TAKE MAGNITUDE OF RADIUS (USEFUL ONLY AS SECOND OPERAND) +;N NEGATE RADIUS +;O ORIGINAL (NO OPERATION) +;A AND B ARE TWO SEQUENTIAL INSTRUCTION LOCATIONS DONE JUST BEFORE EACH CIRCLE DISPLAY +;E.G., TYPING GAHB MAKES DISPLAYED RADIUS = (R+1)/2 +;OAB RESETS BOTH A AND B +;P (PHOTOGRAPHY) STEP MOVIE CAMERA +;TEST WORD LEFT HALF IS BOUNDING CIRCLE WOBBLE RATE +;TEST WORD RIGHT HALF IS NUMBER OF CIRCLES WITH BINARY POINT AFTER FIRST SIX BITS +;777700,,100042 AND KA +;252525,,012526 +;772525,,012503 +;ABOUT 1000,,000022 +;147033+OR-SPEED,,130000 ALSO R.H. 000566, 130100, 260066, 540100, 040000, 410000+OR-EPSILON +;552020,,003127 AND KA +;552020,,040000 AND R.H. 060000 +;444400,,420000+OR-EPSILON(E.G. 110) +;002000,,010001 AND GAHB +;777400,,010001 ALSO WITH C +;777400,,040041 ALSO WITH C +;EPSILON(E.G. 40),,002041 +;777600,,002041 +;SUBMARINES: OAB TW = 0,,240000+EPSILON WHERE 24 = MULTIPLE OF 4 FOR TANGENCY +;THEN EPSILON LIKE 40 IN L.H. +;THEN PUT DOWN L.H. AT TANGENCY; CLEAN UP ERROR WITH E +;MB, THEN TRY EPSILON LIKE 40 IN L.H. AGAIN +;CATS OR TEAPOTS: EXCH =MOVEI SP AND =MOVEI P AT LOAD TIME +;THEN, LEAVING BOUNDING CIRCLES IN, TRY: +;-1+EPSILON,,377777+OR-DELTA +;E.G., 777740,,377716 AND 777767,,400000 + GO: CONO 635550 + CONO PI,12200+1_<7-FLGCHN>+1_<7-DISCHN> + MOVEI P,PDL + MOVEI M,FS + MOVE A,[FS-1,,FS] +MEMT: BLT A,32200 + MOVSI R,-777 + PUSHJ P,DISUP +CLUP: MOVEM M,ORGS(R) + PUSHJ P,CIRCR + HRLS A,ORGS(R) + SUBI A,(M) + MOVSM A,ORGS(R) + CONO DIS,FLGDIS + MOVEI A,@MEMT + SUBI A,(M) + CAIGE A,(R) + JRST URP + AOBJN R,CLUP + SUBI R,1 +URP: MOVE A,[ORGBUF-1,,ORGBUF] + BLT A,ORGBUF+BUFL-1 + HRRM R,MAXR + HRLI R,232000 + MOVEM R,UNIT' + FADM R,UNIT + MOVEI A,STPROG + MOVEM A,SPDL+1 + DATAI C + MOVSI M,-BUFL + SETZM CC' + TWCH: MOVEM C,OLTW' + MOVNI B,-4000(C) + ASH B,-14 + HRRM B,NCRCS + HRLI C,216000 + FAD C,C + MOVE A,PIE + FDVR A,C + PUSHJ P,SIN + MOVEM A,SDTH' + MOVSI C,(1.0) + MOVNM C,CDTH' + FADR A,C + FDVRM C,A + MOVEM A,ABSA' ;1/(1+SIN PI/N) + MOVEM A,AX' + SETZM AY' + FSBR C,A + MOVEM C,RAD' ;S/(1+S) + FSBR C,A + MOVNM C,PRAD' ;(1-S)/(1+S) + PUSHJ P,COSQ ;SQRT FOR STAB? + FSC A,1 + FMPRM A,SDTH + FMPR A,B + FADRM A,CDTH +DCCH: MOVS A,OLTW + HRLI A,210000 + FAD A,A + FMPR A,A + FSBR A,[1.0] + FSC A,1 + MOVNM A,2CD' + PUSHJ P,CNORM + NCRCS: MOVSI E,. +STLUP: MOVN C,CC + EXCH C,CCMD + MOVE B,2CD + FMPRM B,CC + FADRB C,CC + MOVE D,C + FMPR D,C + MOVE A,AX + MOVE B,CDTH + FMPRM B,AX + FMPR A,SDTH + FMPR B,AY + FADR B,A + MOVN A,AY + MOVEM B,AY + FMPR A,SDTH ;BUM? + FADRB A,AX + PUSHJ P,PUTCIR +AOBTRN: AOBJN E,STLUP ;OR TRN + SETZB X,Y + MOVSI A,(1.0) +CPUTC1: PUSHJ P,PUTCR1 + MOVE Y,PRAD + FMPR Y,Y + MOVSI X,(-1.0) + FADR X,Y + FMPR Y,D + FSBR Y,[1.0] + FSBR D,[1.0] + FMPR X,C + FDVR X,Y ;CEN C(1-P2)/(1-P2C2) + MOVE A,PRAD + FMPR A,D + FDVR A,Y ;RAD P(1-C2)/(1-C2P2) + MOVEI Y,0 +CPUTC2: PUSHJ P,PUTCR1 + SKIPE MOVIE + PUSHJ P,DOMOVI + DATAI C + CAMN C,OLTW + JRST NCRCS + HLLM C,OLTW + CAMN C,OLTW + JRST DCCH + JRST TWCH + OINST: TRN +HAKTAB: MOVEM B,HAKLOC ;A + MOVEM B,HAKLOC+1 ;B + JRST FRAMER ;C + JRST STROBE ;D + JRST CENTER ;E + JRST MRTPES ;F + MOVE B,[FADR A,[1.0]] ;GUNCH + HRLOI B,(FSC A,) ;HALF + MOVE B,[EXCH A,X] ;I + MOVE B,[EXCH A,Y] ;J + MOVE B,[EXCH X,Y] ;K + MOVE B,[TLC A,377] ;L + MOVE B,[MOVMS A] ;MAG + MOVE B,[MOVNS A] ;NEG + MOVSI B,(TRN) ;ORIGINAL + JRST FILM ;PHOTOGRAPHY +REPEAT HAKTAB+40-.,MOVSI B,(TRN) + +FILM: SETCMM MOVIE + POPJ P, +STROBE: MOVSI A,(TRN#AOBJN) + XORM A,AOBTRN + POPJ P, +FRAMER: MOVSI A,(SKIPA#MOVE) + XORM A,SKMV + POPJ P, +CENTER: SETZM CC + JRST CNORM1 +MRTPES: MOVSI A,(TRN#PUSHJ) + XORM A,CPUTC1 + XORM A,CPUTC2 + POPJ P, + NORM: FMPR A,A + FMPR B,B + FADR A,B +SQRT: JUMPLE A,CPOPJ + MOVEM B,BSAV' ;FLOATING POINT SQUARE ROOT FUNCTION + ASHC A,-33 + SUBI A,201 + ROT A,-1 + HRRM A,SQ1 + LSH A,-43 + ASH B,-10 + FSC B,177(A) + MOVEM B,ST' + FMP B,S1(A) + FAD B,S2(A) + MOVE A,ST + FDV A,B + FAD B,A + FSC B,-1 + MOVE A,ST + FDV A,B + FADR A,B +SQ1: FSC A,0 + MOVE B,BSAV +CPOPJ: POPJ P, + +S1: 0.8125 + 0.578125 +S2: 0.302734 + 0.421875 + PUTCIR: MOVE X,PRAD + FMPR X,C + FADR X,A + FADR X,A + FMPR X,C + MOVSI T,(1.0) + FADR X,T + FSBR T,D + FMPR B,T + FSBR T,[2.0] + FMPR A,T + MOVE T,ABSA + FMPR T,C + FSC T,1 + FSBRM T,A + FDVR B,X + FDVRB A,X + MOVE Y,B + PUSHJ P,NORM + MOVSI B,(1.0) + FSBRM B,A +PUTCR1: +HAKLOC: TRNA + TRN + JUMPLE A,TTYCHK + FADR X,A + FMPR A,UNIT + MULI A,400 + ASH B,-243(A) +MAXR: CAILE B,. + MOVEI B,@.-1 + MOVE T,ORGS(B) +SKMV: MOVE A,Y ;OR SKIPA + FSBR X,C + FMPR A,UNIT + FMPR X,UNIT + MULI A,400 + TSC A,A + ASH B,-243(A) + MULI X,400 + TSC X,X + ASH Y,-243(X) + HRL Y,B + AND Y,[1777,,1777] + XOR Y,[221000,,141000] + MOVEI 0,0 + SKIPE ORGBUF(M) + AOJA 0,.-1 + MOVEM T,RADBUF(M) + MOVEM Y,ORGBUF(M) + CONSZ DIS,7 + JRST PUTOUT + SKIPE ORGBUF(R) + CONO DIS,FLGDIS + PUTOUT: AOBJN M,CPOPJ + MOVSI M,-BUFL + MOVE A,AX + MOVE B,AY + PUSHJ P,NORM + MOVE B,ABSA + FDVR B,A + FMPRM B,AX + FMPRM B,AY +CNORM1: MOVN A,2CD +CNORM: FSC A,-1 + MOVE T,A + FMPR A,A + FSBR A,[1.0] + MOVE B,CC + FMPR B,B + FSBR B,[1.0] + FMPR A,B + PUSHJ P,SQRT + FMPR T,CC + CAML T,CCMD + MOVNS A + FADR T,A + MOVEM T,CCMD' +TTYCHK: CONSO TTY,40 + POPJ P, + DATAI TTY,A + ANDI A,37 + ADDI A,"@ + DATAO TTY,A + MOVE B,OINST + XCT HAKTAB-"A(A) + MOVEM B,OINST + POPJ P, + CIRCR: MOVSI A,265012 ;.7071068 + MULI A,(R) + DPB A,[014200,,B] ;EVEN PROD > 0 + MOVEI C,(R) + IMUL C,C + SUBI C,(A) ;R*R-Y + IMUL A,B + SUB C,A ;R*R-Y-2*Y*Y + JUMPLE C,BGOOD + SUBI C,(B) + CAIGE C,3 + AOSA B + ADDI B,2 +BGOOD: MOVNI E,1(B) + ASH E,21 + IDIVI B,8 + HRRM B,BIGIN + HRRM C,PHASIN + MOVSI X,-4 + MOVEI Y,0 +CRLUP: HRRM M,BPA(X) + MOVE T,PHASES(Y) + HLLM T,BPA(X) + ADD T,IDBS(X) + MOVEM T,A(X) +BIGIN: ADDI M,. +PHASIN: ADDI Y,. + TRZE Y,8 + AOS M + AOBJN X,CRLUP + MOVE T,[600000,,020000] + MOVEM T,(M) + ADDI M,1 ;16 2 12 + MOVNI Y,1 ;14 10 + MOVEI T,0 ;17 3 13 + MOVEI X,(R) +CIRLP: AOBJP E,CDUN + ADDI Y,2 + ADDI T,(Y) + CAIL T,(X) + SOJA X,CDIAG + 4PUT 2 14 3 10 + PUSHJ P,CIRLP + 4PUT 14 3 10 2 + POPJ P, +CDIAG: SUBI T,(X) ;.+2,DOUT+2=CAT; .+6,+8 MONK + SUBI T,1(X) + 4PUT 16 17 13 12 + PUSHJ P,CIRLP +CDOUT: 4PUT 16 17 13 12 + POPJ P, +CDUN: TRNN E,400000 + JRST CDOUT + POPJ P, + ;FLOATING POINT SINE AND COSINE. +;ANS IN A,B; COSQ GIVES COS OF LAST SIN ARG, -SIN OF LAST COS +SIND: FMPR A,[.01745329251994] ;PI/180 + JRST SIN + +COSD: FMPR A,[.01745329251994] +COS: FADR A,[1.5707963267] ;PI/2 +SIN: CAMG A,[164475536723] ;.00015148419(SAVES A CONSTANT. COULD USE .000211431983) + CAMGE A,[-.000211431983] ;SMALLNESS OF ABS X PERMITS SIN X _ X + JRST .+2 + POPJ P, ;AND THREATENS UNDERFLOW + FDVR A,[1.5707963267] ;PI/2 + MOVEM A,SINTM' + MULI A,400 + TSC A,A ;CAML A,...SETZB B,SINTM WOULD PREVENT HUGE ANSWER FOR ARG > 2**27 + ASH B,-243(A) + MOVNS A,B + HRRM B,SINOB + ANDCMI A,1 + TLC A,232000 + FAD A,A + FADRB A,SINTM +SINQ: TRNN B,2 +SINR: SKIPA B,SINTM + MOVNS B,SINTM + FMPR B,[164475536723] ;.00015148419 + FMP A,A + FADR A,[574377353254] ;-4.0084431 + FMPR B,A + FADR A,[574142162777] ;-6.4652405 + FMPR B,A + FADR A,[202444705313] ;2.2881683 + FMPR A,A + FADR A,[210547761702] ;179.98621 + FMPRB A,B + POPJ P, + +COSN: HLLOS SINOB +COSQ: MOVSI A,(1.0) + SKIPL SINTM + MOVNS A + FADRB A,SINTM +SINOB: SETCMI B,. + JRST SINQ + IRPC Q,,ABCD +IDB!Q: REPEAT 4,[ + JSP Q,(Q) + IDPB 0,BP!Q] + MOVSI 0,-20000 + ADDM 0,BP!Q +JDB!Q: REPEAT 4,[ + JSP Q,(Q) + IDPB 0,BP!Q] + MOVE 0,[420000,,1] + ADDM 0,BP!Q + JRST IDB!Q +TERMIN +IRPC Q,,ABCD +BP!Q: 0 +TERMIN +IDBS: IRPC Q,,ABCD + IDB!Q +TERMIN +PHASES: 420400,,1 + 360400,,3 + 320400,,5 + 260400,,7 + 200400,,13 + 140400,,15 + 100400,,17 + 040400,,21 + +DISUP1: DATAO TTY,CDING ;CLOUDS CAUSES RAIN + JRST 4,DISUP +DISUP: MOVE A,[BLKO DIS,DISOUT] + MOVEM A,40+2*DISCHN + MOVEI A,DISPR0 + MOVEM A,SPDL+1 + CONO DIS,FLGCHN_3 + CONO PI,4000+1_<7-FLGCHN> + CONI DIS,A + JUMPGE A,DISUP1 +CDING: POPJ P,^G + +STPROG: MOVSI R,-BUFL +STPRG1: SKIPN ORGBUF(R) + PUSHJ SP,DISOFF + DATAO DIS,ORGBUF(R) + MOVE A,RADBUF(R) + SETZM ORGBUF(R) + PUSHJ SP,DISRES + AOBJN R,STPRG1 + JRST STPROG + DOMOVI: CONSZ DIS,7 + JRST .-1 + SKIPE STOP + JRST .-1 + AOS A,NDISCN + CAMGE A,NDIS + POPJ P, + CLEARM NDISCN + MOVEI B,144 +LOOP: MOVEI A,100 + XORB A,MOTOR + DATAO 760,A + MOVEI A,550 + SOJG A,. + MOVEI A,200 + XORB A,MOTOR + DATAO 760,A + MOVEI A,550 + SOJG A,. + SOJG B,LOOP + POPJ P, + +MOTOR: 0 +MOVIE: 0 +NDIS: 0 ;NUMBER OF DOMOVI CALLS PER ACTUAL FILM ADVANCE, 0 = 1 +NDISCN: 0 +STOP: 0 ;NONZERO = PAUSE + DISPR0: PUSHJ SP,DISOFF +DISPRG: DATAO DIS,[221000,,141777] ;NEEDN'T WAIT + SKIPGE A,ORGS(R) + PUSHJ SP,DISRES + JRST DISPR0 + +FLGBRK: LOC 40+2*DISCHN + BLKO DIS,DISOUT' + CONO PI,4000+1_<7-FLGCHN> +LOC 40+2*FLGCHN + JSR FLGBRK + JSR DISBRK + +LOC FLGBRK + 0 + CONSO DIS,7000 ;VEJ LPN HEJ + JRST DISMYS + CONO DIS,10200+FLGDIS + JRST 12,@FLGBRK +DISMYS: CONSO DIS,77 + JRST 12,@FLGBRK + CONO DIS,100+FLGDIS + MOVEI SP,1-[34115] + MOVNM SP,DISOUT + ADDI SP,SPDL+1-1+[34115] ;1,,SPDL+1 + JRST 12,@FLGBRK + +DISBRK: 0 +DISBR1: MOVEM A,DISOUT + MOVE A,[POP SP,40+2*DISCHN] + MOVEM A,40+2*DISCHN + POPJ SP, + +DISOFF: CONO DIS,0 + PUSH SP,[BLKO PTR,DISOUT] + SKIPA A,[-1] +DISRES: PUSH SP,[BLKO DIS,DISOUT] +DISRS1: EXCH A,DISOUT + JRST 10,.+1 + JRST 12,@DISBRK + +ORGS: BLOCK 777 +PDL: BLOCK 600 +RADBUF: BLOCK BUFL + 0 +ORGBUF: BLOCK BUFL +PAT: BLOCK 77 +SPDL: BLOCK 9 +PIE: 3.14159265 +CONSTA +VARIAB + 200000,,200000 +FS: END GO +  \ No newline at end of file