X-Git-Url: https://jxself.org/git/?p=pdp10-muddle.git;a=blobdiff_plain;f=sumex%2Fmudex.mcr030;fp=sumex%2Fmudex.mcr030;h=5d0f7b94d2ed5c9f8d1b2e7be7cca90a94ae4864;hp=0000000000000000000000000000000000000000;hb=1c973408824dee4a587c040bc8075cd1bf047ba3;hpb=a3df309bdd1ea54242d39e62403548d1e4845f8e diff --git a/sumex/mudex.mcr030 b/sumex/mudex.mcr030 new file mode 100644 index 0000000..5d0f7b9 --- /dev/null +++ b/sumex/mudex.mcr030 @@ -0,0 +1,311 @@ +TITLE MUDEX -- TENEX DEPENDANT MUDDLE CODE + +RELOCATABLE + +.INSRT MUDDLE > +.INSRT STENEX > + +MFORK==400000 + +MONITS==1 + +.GLOBAL %SSNAM,%RSNAM,%KILLM,%LOGOU,%SLEEP,%VALRE,NOTTY,MSGTYP,TTYOP2 +.GLOBAL %UNAM,%JNAM,%RUNAM,%RJNAM,%GCJOB,%SHWND,%SHFNT,%GETIP,%INFMP +.GLOBAL GCHN,WNDP,FRNP,MESSAG,INITFL,6TOCHS,SGSNAM,MTYO,PGINT,WHOAMI +.GLOBAL %TOPLQ,IBLOCK,TMTNXS,TNXSTR,%HANG,ILLUUO,UUOH,IPCINI,CTIME,BFLOAT +.GLOBAL GCRSET + +GCHN==0 +WRTP==1000,,100000 +GCHI==1000,,GCHN +CRJB==1000,,400001 +FME==1000,,-1 +FLS==1000,, + +CTIME: JOBTM ; get run time in milli secs + MOVE B,A + JSP A,BFLOAT ; Convert to floating + FDVRI B,(1000.0) ; Change to units of seconds + MOVSI A,TFLOAT + POPJ P, + +; SET THE SNAME GLOBALLY + +%SSNAM: POPJ P, + +; READ THE GLOBAL SNAME + +%RSNAM: POPJ P, + +; KILL THE CURRENT JOB + +%KILLM: HALTF + POPJ P, + +; PASS STRING TO SUPERIOR (MONITOR?) + +%VALRE: HALTF + POPJ P, + +; LOGOUT OF SYSTEM (MUST BE "TOP LEVEL") + +%LOGOU: LGOUT + POPJ P, + +; GO TO SLEEP A WHILE + +%SLEEP: IMULI A,33. ; TO MILLI SECS + DISMS + POPJ P, + +; HANG FOR EVER + +%HANG: WAIT + +; READ JNAME + +%RJNAM: POPJ P, + +; READ UNAME + +%RUNAM: POPJ P, + +; HERE TO SEE IF WE ARE A TOP LEVEL JOB + +%TOPLQ: GJINF + SKIPGE D + AOS (P) + POPJ P, + +; GET AN INFERIOR FOR THE GARBAGE COLLECTOR + +%GCJOB: PUSH P,A + MOVEI A,200000 ; GET BITS FOR FORK + CFORK ; MAKE AN IFERIOR FORK + FATAL CANT GET GC FORK + MOVEM A,GCFRK ; SAVE HANDLE + POP P,A ; RESTORE PAGE + PUSHJ P,%GETIP ; GET IT THERE + PUSHJ P,%SHWND + JRST %SHFNT ; AND FRONTIER + +; HERE TO GET A PAGE FOR THE INFERIOR + +%GETIP: POPJ P, + +; HERE TO SHARE WINDOW + +%SHWND: TDZA 0,0 ; FLAG SAYING WINDOW + +; HERE TO SHARE FRONTIER + +%SHFNT: MOVEI 0,1 + PUSH P,A + PUSH P,B + PUSH P,C + MOVEI B,2*FRNP ; FRONTIER (REMEMBER TENEX PAGE SIZE) + SKIPN 0 + MOVEI B,2*WNDP ; NO,WINDOW + HRLI B,MFORK + ASH A,1 ; TIMES 2 + HRL A,GCFRK + MOVSI C,140000 ; READ AND WRITE ACCESS + + PMAP + ADDI A,1 + ADDI B,1 + PMAP + ASH B,9. ; POINT TO PAGE + MOVES (B) ; CLOBBER TOP + MOVES -1(B) ; AND UNDER + POP P,C + POP P,B + POP P,A + POPJ P, + +; HERE TO MAP INFERIOR BACK AND KILL SAME + +%INFMP: PUSH P,C + PUSH P,D + PUSH P,E + ASH A,1 + ASH B,1 + MOVE D,A ; POINT TO PAGES + MOVE E,B ; FOR COPYING + PUSH P,A ; SAVE FOR TOUCHING + MOVS A,GCFRK + MOVSI B,MFORK + MOVSI C,120400 ; READ AND WRITE COPY + +LP1: HRRI A,(E) + HRRI B,(D) + PMAP + ADDI E,1 + AOBJN D,LP1 + +; HERE TO TOUCH PAGES TO INSURE KEEPING THEM (KLUDGE) + + POP P,E ; RESTORE MY FIRST PAGE # + MOVEI A,(E) ; COPY FOR LOOP + ASH A,9. ; TO WORD ADDR + MOVES (A) ; WRITE IT + AOBJN E,.-3 ; FOR ALL PAGES + + MOVE A,GCFRK + KFORK + POP P,E + POP P,D + POP P,C + POPJ P, + +; HACK TO PRINT MESSAGE OF INTEREST TO USER + +MESOUT: MOVSI A,(JFCL) + MOVEM A,MESSAG ; DO ONLY ONCE + MOVEI A,400000 + MOVE B,[1,,ILLUUO] + MOVE C,[40,,UUOH] + SCVEC + SETZ SP, ; HACK TO AVOID LOSSAGE WITH GARBAGE IN SP FIRST TIME + PUSHJ P,GCRSET + PUSHJ P,PGINT ; INITIALIZE PAGE MAP + RESET + PUSHJ P,TTYOP2 + SKIPE NOTTY ; HAVE A TTY? + JRST RESNM ; NO, SKIP THIS STUFF + + MOVEI A,MESBLK + MOVEI B,0 + GTJFN + JRST RESNM + MOVE B,[70000,,200000] + OPENF + JRST RESNM + +MSLP: BIN + MOVE D,B ; SAVE BYTE + GTSTS + TLNE B,1000 + JRST RESNM + EXCH D,A + CAIN A,14 + PBOUT + MOVE A,D + JRST MSLP + +RESNM2: CLOSF + JFCL + +RESNM: +RESNM1: POPJ P, + +MESBLK: 100000,, + 377777,,377777 + -1,,[ASCIZ /DSK/] + -1,,[ASCIZ /VEZZA/] + -1,,[ASCIZ /MUDDLE/] + -1,,[ASCIZ /MESSAG/] + 0 + 0 + 0 + +MUDINT: MOVSI 0,(JFCL) ; CLOBBER MUDDLE INIT SWITCH + MOVEM 0,INITFL + + GJINF ; GET INFO NEEDED + PUSHJ P,TMTNXS ; MAKE A TEMP STRING FOR TENEX INFO (POINTER LEFT IN E) + HRROI A,1(E) ; TNX STRING POINTER + DIRST + FATAL ATTACHED DIR DOES NOT EXIST + MOVEI B,1(E) ; NOW HAVE BOUNDS OF STRING + SUBM P,E ; RELATIVIZE E + PUSHJ P,TNXSTR ; MAKE THE STRING + SUB P,E + PUSH TP,$TATOM + PUSH TP,IMQUOTE SNM + PUSH TP,A + PUSH TP,B + MCALL 2,SETG + PUSH TP,$TCHSTR + PUSH TP,CHQUOTE READ + PUSH TP,$TCHSTR + PUSH TP,CHQUOTE MUDDLE.INIT + MCALL 2,FOPEN + GETYP A,A + CAIE A,TCHAN + POPJ P, + PUSH TP,$TCHAN + PUSH TP,B + MOVEI B,INITSTR ; TELL USER WHAT'S HAPPENING + SKIPE WHOAMI + JRST .+3 + SKIPN NOTTY + PUSHJ P,MSGTYP + MCALL 1,MLOAD + POPJ P, + +TMTNXS: POP P,D ; SAVE RET ADDR + MOVE E,P ; BUILD A STRING SPACE ON PSTACK + MOVEI 0,20. ; USE 20 WORDS (=100 CHARS) + PUSH P,[0] + SOJG 0,.-1 + + JRST (D) + + +TNXSTR: SUBI B,(P) + PUSH P,B + ADDI B,-1(P) + SUBI B,(A) ; WORDS TO B + IMULI B,5 ; TO CHARS + LDB 0,[360600,,A] ; GET BYTE POSITION + IDIVI 0,7 ; TO A REAL BYTE POSITION + MOVNS 0 + ADDI 0,5 + SUBM 0,B ; FINAL LENGTH IN BYTES TO B + PUSH P,B ; SAVE IT + MOVEI A,4(B) ; TO WORDS + IDIVI A,5 + PUSHJ P,IBLOCK ; GET STRING + POP P,A + POP P,C + ADDI C,(P) + MOVE D,B ; COPY POINTER + MOVE 0,(C) ; GET A WORD + MOVEM 0,(D) + ADDI C,1 + AOBJN D,.-3 + + HRLI A,TCHSTR + HRLI B,440700 ; MAKE INTO BYTER + POPJ P, + +IPCINI: JFCL +IFN MONITS,[ + +DEMS: SETZ + SIXBIT /DEMSIG/ + SETZ [SIXBIT /MUDSTA/] +] +INITSTR: ASCIZ /MUDDLE INIT/ + +IMPURE + +GCFRK: 0 + +IFN MONITS,[ +MESSDM: 30,,(SIXBIT /IPC/) + .+1 + SIXBIT /MUDDLESTATIS/ + 1 + 1 +] + +MESSAG: PUSHJ P,MESOUT ; MESSAGE SWITCH + +INITFL: PUSHJ P,MUDINT ; MUDDLE INIT SWITCH + +PURE + +END +