mirror of
https://github.com/PDP-10/its.git
synced 2026-01-16 00:14:18 +00:00
MIDAS and Muddle source get version numbers (as in the 1973 Muddle source); the build files don't.
799 lines
14 KiB
Plaintext
799 lines
14 KiB
Plaintext
TITLE SAVE AND RESTORE STATE OF A MUDDLE
|
||
|
||
RELOCATABLE
|
||
|
||
.INSRT DSK:MUDDLE >
|
||
|
||
SYSQ
|
||
|
||
|
||
UNTAST==0
|
||
IFE ITS,[
|
||
IF1,[
|
||
.INSRT STENEX >
|
||
EXPUNGE SAVE
|
||
]
|
||
]
|
||
.GLOBAL MOPEN,MIOT,MCLOSE,MUDSTR,SWAP,STRTO6,GCPDL,RGPRS,ADDNUL,GCSTOP,PHIBOT
|
||
.GLOBAL CHNL0,CHNL1,REOPN,AGC,SWAPIN,MASK1,MASK2,IPCBLS,DEMFLG,FSTART,CKVRS
|
||
.GLOBAL P.CORE,P.TOP,SGSNAM,%RUNAM,%RSNAM,%RJNAM,INTINT,CLOSAL,TTYOPE,PURBOT,CHKPGI
|
||
.GLOBAL NOTTY,PURCLN,6TOCHS,DISXTR,IDVAL1,N.CHNS,PMAPB,PURTOP,HITOP,FRETOP,FREMIN
|
||
.GLOBAL SQKIL,SFRK,GETJS,IJFNS,IJFNS1,MULTSG,MULTI,NOMULT,THIBOT
|
||
.GLOBAL MAPJFN,DIRCHN
|
||
|
||
FME==1000,,-1
|
||
FLS==1000,,
|
||
MFORK==400000
|
||
|
||
MFUNCTION FSAVE,SUBR
|
||
|
||
ENTRY
|
||
|
||
JRST SAVE1
|
||
|
||
MFUNCTION SAVE,SUBR
|
||
|
||
ENTRY
|
||
SAVE1: PUSHJ P,SQKIL
|
||
IFE ITS,[
|
||
SKIPE MULTSG
|
||
PUSHJ P,NOMULT
|
||
]
|
||
PUSH P,.
|
||
PUSH P,[0] ; GC OR NOT?
|
||
IFE ITS,[
|
||
MOVE B,[400600,,]
|
||
MOVE C,[440000,,100000]
|
||
]
|
||
PUSHJ P,GTFNM ; GET THE FILE NAME ONTO P
|
||
JRST .+2
|
||
JRST SAVEON
|
||
JUMPGE AB,TMA ; TOO MUCH STRING
|
||
GETYP 0,(AB) ; WHAT IS ARG
|
||
CAMGE AB,[-3,,0] ; NOT TOO MANY
|
||
JRST TMA
|
||
CAIN 0,TFALSE
|
||
IFN ITS, SETOM -6(P) ; GC FLAG
|
||
IFE ITS, SETOM (P)
|
||
SAVEON:
|
||
IFN ITS,[
|
||
MOVSI A,7 ; IMAGE BLOCK OUT
|
||
MOVEM A,-4(P) ; DIRECTION
|
||
PUSH P,A
|
||
PUSH P,-4(P) ; DEVICE
|
||
PUSH P,[SIXBIT /_MUDS_/]
|
||
PUSH P,[SIXBIT />/]
|
||
PUSH P,-4(P) ; SNAME
|
||
MOVEI A,-4(P) ; POINT TO BLOCK
|
||
PUSHJ P,MOPEN ; ATTEMPT TO OPEN
|
||
JRST CANTOP
|
||
SUB P,[5,,5] ; FLUSH OPEN BLOCK
|
||
PUSH P,-6(P) ; GC FLAG TO TOP OF STACK (-4 --> -6 TAA)
|
||
]
|
||
EXCH A,(P) ; CHAN TO STACK GC TO A
|
||
JUMPL A,NOGC
|
||
PUSH TP,$TFIX ; CAUSE HAIRY GC TO OCCUR
|
||
PUSH TP,[0]
|
||
PUSH TP,$TATOM
|
||
PUSH TP,IMQUOTE T
|
||
MCALL 2,GC
|
||
NOGC: PUSHJ P,PURCLN
|
||
|
||
; NOW GET VERSION OF MUDDLE FOR COMPARISON
|
||
|
||
MOVE A,MUDSTR+2 ; GET #
|
||
MOVEI B,177 ; CHANGE ALL RUBOUT CHARACTERS
|
||
MOVEI C,40 ; ----- TO SPACES
|
||
PUSHJ P,HACKV
|
||
|
||
PUSHJ P,WRDOUT
|
||
MOVE A,P.TOP ; GET TOP OF CORD
|
||
PUSHJ P,WRDOUT
|
||
MOVEI A,0 ; WRITE ZERO IF FAST
|
||
IFN ITS, SKIPE -8(P) ; -6 --> -8 TAA
|
||
IFE ITS, SKIPE -1(P)
|
||
PUSHJ P,WRDOUT
|
||
MOVE A,VECTOP ; CORE REQUIREMENTS FOR THIS SAVED MUDDLE
|
||
PUSHJ P,WRDOUT
|
||
|
||
IFN ITS,[
|
||
SETZB A,B ; FIRST, ALL INTS OFF
|
||
.SETM2 A,
|
||
|
||
; IF FAST SAVE JUMP OFF HERE
|
||
|
||
SKIPE -6(P)
|
||
JRST FSAVE1
|
||
|
||
]
|
||
|
||
IFE ITS,[
|
||
MOVEI A,400000 ; FOR THIS PROCESS
|
||
DIR ; TURN OFF INT SYSTEM
|
||
|
||
; IF FAST, LEAVE HERE
|
||
|
||
SKIPE -1(P)
|
||
JRST FSAVE1
|
||
|
||
; NOW DUMP OUT GC SPACE
|
||
|
||
]
|
||
IFN ITS,[
|
||
|
||
DMPDN2: SETZB A,B ; SET UP RENAME WHILE OPEN ETC.
|
||
MOVE E,-1(P)
|
||
MOVE D,-2(P)
|
||
LDB C,[270400,,0] ; GET CHANNEL
|
||
.FDELE A ; RENAME IT
|
||
FATAL SAVE RENAME FAILED
|
||
XOR 0,[<.IOT A>#<.CLOSE>] ; CHANGE TO A CLOSE
|
||
XCT 0
|
||
|
||
MOVE A,MASK1 ; TURN INTS BACK ON
|
||
MOVE B,MASK2
|
||
.SETM2 A,
|
||
]
|
||
|
||
IFE ITS,[
|
||
|
||
DMPDN2: MOVE A,0
|
||
CLOSF
|
||
FATAL CANT CLOSE SAVE FILE
|
||
CIS ; CLEAR IT SYSTEM
|
||
MOVEI A,400000
|
||
EIR ; AND RE-ENABLE
|
||
]
|
||
|
||
SDONE: MOVE A,$TCHSTR
|
||
MOVE B,CHQUOTE SAVED
|
||
JRST FINIS
|
||
|
||
; SCAN FOR MANY OCCURENCES OF THE SAME THING
|
||
|
||
|
||
; HERE TO WRITE OUT FAST SAVE FILE
|
||
|
||
FSAVE1:
|
||
IFN UNTAST,[
|
||
PUSHJ P,PUCHK
|
||
]
|
||
MOVE A,PARTOP ; DONT WRITE OUT "HOLE"
|
||
ADDI A,1777
|
||
ANDCMI A,1777
|
||
MOVEI E,(A)
|
||
PUSHJ P,WRDOUT
|
||
MOVE 0,(P) ; CHANNEL TO 0
|
||
IFN ITS,[
|
||
ASH 0,23. ; TO AC FIELS
|
||
IOR 0,[.IOT A]
|
||
MOVEI A,5 ; START AT WORD 5
|
||
]
|
||
IFE ITS,[
|
||
MOVE A,[-<P-E>,,E]
|
||
PUSH P,(A)
|
||
AOBJN A,.-1
|
||
MOVE A,0
|
||
MOVE B,P ; WRITE OUT P FOR WIINAGE
|
||
BOUT
|
||
MOVE B,[444400,,20]
|
||
MOVNI C,20-6
|
||
SOUT ; MAKE PAGE BOUNDARIES WIN
|
||
MOVEI A,20 ; START AT 20
|
||
]
|
||
MOVEI B,(E) ; PARTOP TO B
|
||
PUSHJ P,FOUT ; WRITE OUT UP TO PAIR TOP
|
||
PUSHJ P,PUROUT
|
||
SUB P,[1,,1] ; CLEAN OFF STACK
|
||
JRST DMPDN2
|
||
|
||
IFN ITS,[
|
||
FOUT: MOVEI D,(A) ; SAVE START
|
||
SUB A,B ; COMPUTE LH OF IOT PNTR
|
||
MOVSI A,(A)
|
||
SKIPL A ; IF + MEANS GROSS CORE SIZE
|
||
MOVSI A,400000 ; USE BIGGEST
|
||
HRRI A,(D)
|
||
XCT 0 ; ZAP, OUT IT GOES
|
||
CAMGE A,B ; SKIP IF ALL WENT
|
||
JRST FOUT ; DO THE REST
|
||
POPJ P, ; GO CLOSE FILE
|
||
]
|
||
IFE ITS,[
|
||
FOUT: MOVEI C,(A)
|
||
SUBI C,(B) ; # OF BYTES TP C
|
||
MOVEI B,(A) ; START TO B
|
||
HRLI B,444400
|
||
MOVE A,0
|
||
SOUT ; WRITE IT OUT
|
||
POPJ P,
|
||
]
|
||
|
||
|
||
; HERE TO ATTEMPT TO RESTORE A SAVED STATE
|
||
|
||
MFUNCTION RESTORE,SUBR
|
||
|
||
ENTRY
|
||
PUSHJ P,SQKIL
|
||
IFE ITS,[
|
||
MOVE B,[100600,,]
|
||
MOVE C,[440000,,240000]
|
||
]
|
||
PUSHJ P,GTFNM
|
||
JRST TMA
|
||
IFN ITS,[
|
||
MOVSI A,6 ; READ/IMAGE/BLOCK
|
||
MOVEM A,-4(P)
|
||
MOVEI A,-4(P)
|
||
PUSHJ P,MOPEN ; OPEN THE LOSER
|
||
JRST FNF
|
||
SUB P,[6,,6] ; REMOVE OPEN BLOCK
|
||
|
||
PUSH P,A ; SAVE CHANNEL
|
||
PUSHJ P,SGSNAM ; SAVE SNAME IN SYSTEM
|
||
]
|
||
IFE ITS, PUSH P,A ; SAVE JFN
|
||
PUSHJ P,CKVRS ; CHECK THE VERSION NUMBER
|
||
|
||
IFN ITS, MCALL 0,IPCOFF ; CLOSE ALL IPC CHANS
|
||
PUSHJ P,CLOSAL ; CLOSE CHANNELS
|
||
IFN ITS,[
|
||
SETZB A,B ; KILL ALL POSSIBLE INTERRUPTION
|
||
.SETM2 A,
|
||
DOTCAL UNLOCK,[[1000,,-1]]
|
||
.VALUE ; UNLOCK LOCKS
|
||
]
|
||
IFE ITS,[
|
||
MOVEI A,400000 ; DISABLE INTS
|
||
DIR ; INTS OFF
|
||
|
||
; LOOP TO CLOSE ALL RANDOM JFNS
|
||
|
||
MOVE E,[-JFNLNT,,JFNTBL]
|
||
|
||
JFNLP: HRRZ A,@(E)
|
||
SKIPE A
|
||
CLOSF
|
||
JFCL
|
||
HLRZ A,@(E)
|
||
SKIPE A
|
||
CLOSF
|
||
JFCL
|
||
SETZM @(E)
|
||
AOBJN E,JFNLP
|
||
|
||
]
|
||
PUSHJ P,PURCLN ; DONT KEEP PURE SHAREDNESS
|
||
|
||
POP P,E
|
||
IFE ITS,[
|
||
MOVEI C,0
|
||
MOVNI A,1
|
||
MOVE B,[MFORK,,1]
|
||
MOVEI D,THIBOT-1
|
||
PMAP
|
||
ADDI B,1
|
||
SOJG D,.-2
|
||
SKIPLE A,SFRK ; IF WE HAVE AN INFERIOR, KILL IT
|
||
KFORK
|
||
]
|
||
MOVE A,E
|
||
FSTART: MOVE P,GCPDL
|
||
PUSH P,A
|
||
IFN ITS,[
|
||
MOVE 0,[1-PHIBOT,,1]
|
||
DOTCAL CORBLK,[[FLS],[FME],0]
|
||
FATAL CANT FLUSH PURE PAGES
|
||
]
|
||
PUSHJ P,WRDIN ; GET P.TOP
|
||
ASH A,-10.
|
||
MOVE E,A
|
||
PUSHJ P,WRDIN ; READ A WORD (VECTOP) OR 0==>FAST I.E. MAP RESTORE
|
||
JUMPE A,FASTR
|
||
|
||
IFE ITS,[
|
||
FASTR1: MOVEI A,P-1
|
||
MOVEI B,P-1-E
|
||
POP P,(A)
|
||
SUBI A,1
|
||
SOJG B,.-2
|
||
]
|
||
|
||
IFN ITS,[
|
||
FASTR1:
|
||
]
|
||
IFN ITS, MOVEM E,NOTTY ; SAVE TTY FLAG
|
||
IFE ITS,[
|
||
MOVEM E,DEMFLG
|
||
PUSHJ P,GETJS
|
||
HRRZS IJFNS
|
||
SETZM IJFNS1
|
||
]
|
||
PUSHJ P,PURCLN ; IN CASE RESTORED THING HAD PURE STUFF
|
||
PUSHJ P,INTINT ; USE NEW INTRRRUPTS
|
||
|
||
IFN ITS,[
|
||
.SUSET [.RSNAM,,A]
|
||
PUSH P,A
|
||
]
|
||
|
||
; NOW CYCLE THROUGH CHANNELS
|
||
MOVE C,[-N.CHNS*2,,CHNL1] ; POINT TO REAL CHANNELS SLOTS
|
||
PUSH TP,$TVEC
|
||
PUSH TP,C
|
||
PUSH P,[N.CHNS]
|
||
|
||
CHNLP: HRRE A,(C) ; SEE IF NEW VALUE
|
||
JUMPL A,NXTCHN
|
||
SKIPN B,1(C) ; GET CHANNEL
|
||
JRST NXTCHN
|
||
PUSHJ P,REOPN
|
||
PUSHJ P,CHNLOS
|
||
MOVE C,(TP) ; GET POINTER
|
||
NXTCHN: ADD C,[2,,2] ; AND BUMP
|
||
MOVEM C,(TP)
|
||
SOSE (P)
|
||
JRST CHNLP
|
||
|
||
SKIPN C,CHNL0+1 ; ANY PSUEDO CHANNELS
|
||
JRST RDONE ; NO, JUST GO AWAY
|
||
MOVSI A,TLIST ; YES, REOPEN THEM
|
||
MOVEM A,(TP)-1
|
||
CHNLP1: MOVEM C,(TP) ; SAVE POINTER
|
||
SKIPE B,(C)+1 ; GET CHANNEL
|
||
PUSHJ P,REOPN
|
||
PUSHJ P,CHNLO1
|
||
MOVE C,(TP) ; GOBBLE POINTER
|
||
HRRZ C,(C) ; REST LIST OF PSUEDO CHANNELS
|
||
JUMPN C,CHNLP1
|
||
|
||
RDONE: MOVE A,VECTOP
|
||
CAMN A,P.TOP
|
||
JRST NOCOR
|
||
SETZM (A)
|
||
HRLS A
|
||
ADDI A,1 ; SET UP BLT POINTER
|
||
MOVE B,P.TOP
|
||
BLT A,-1(B) ; TO THE TOP OF THE WORLD
|
||
NOCOR: SUB TP,[2,,2]
|
||
SUB P,[1,,1]
|
||
PUSHJ P,TTYOPE
|
||
IFN ITS,[
|
||
PUSHJ P,IPCBLS ;BLESS ALL THE IPC CHANNELS
|
||
PUSHJ P,SGSNAM ; GET SNAME
|
||
SKIPN A
|
||
MOVE A,(P) ; GET OLD SNAME
|
||
SUB P,[1,,1]
|
||
PUSHJ P,6TOCHS ; TO STRING
|
||
]
|
||
IFE ITS,[
|
||
PUSHJ P,SGSNMQ ; SKIPS IF SNAME IS NON-NIL
|
||
PUSHJ P,%RSNAM ; ELSE GETS "REAL" SNAME
|
||
PUSH TP,A
|
||
PUSH TP,B
|
||
MCALL 1,SNAME
|
||
SETOM SFRK
|
||
]
|
||
PUSHJ P,%RUNAM
|
||
PUSHJ P,%RJNAM
|
||
|
||
IFE ITS,[
|
||
MOVEI A,400000
|
||
MOVE B,[1,,ILLUUO]
|
||
MOVE C,[40,,UUOH]
|
||
SCVEC
|
||
]
|
||
MOVE A,$TCHSTR
|
||
MOVE B,CHQUOTE RESTORED
|
||
JRST FINIS
|
||
|
||
IFE ITS,[
|
||
;SKIPS IF THERE IS AN SNAME, RETURNING IT
|
||
SGSNMQ: MOVE B,IMQUOTE SNM
|
||
PUSHJ P,IDVAL1
|
||
GETYP 0,A
|
||
CAIE 0,TCHSTR
|
||
JRST CPOPJ
|
||
HRRZ 0,A
|
||
JUMPE CPOPJ
|
||
JRST CPOPJ1
|
||
]
|
||
|
||
FASTR:
|
||
IFN ITS,[
|
||
PUSHJ P,WRDIN
|
||
ADDI A,1777
|
||
ANDCMI A,1777 ; ROUND AND TO PAGE BOUNDRY
|
||
ASH A,-10. ; TO PAGES
|
||
MOVNS A
|
||
MOVSI A,(A) ; TO PAGE AOBJN
|
||
MOVE C,A ; COPY OF POINTER
|
||
MOVE 0,NOTTY ; SAVE NOTTY FLAG AROUND
|
||
MOVE D,(P) ; CHANNEL
|
||
DOTCAL CORBLK,[[1000,,104000],[1000,,-1],A,D,C]
|
||
FATAL CORBLK ON RESTORE LOSSAGE
|
||
PUSHJ P,PURIN ; GET PURIFIED STRUCTURE
|
||
MOVSI A,(D) ; GET CHANNLEL BACK
|
||
ASH A,5
|
||
MOVEI B,E ; WHERE TO STRAT IN FILE
|
||
IOR A,[.ACCESS B]
|
||
XCT A ; ACCESS TO RIGHT ACS
|
||
XOR A,[<.IOT B>#<.ACCESS B>]
|
||
MOVE B,[D-P-1,,E]
|
||
XCT A ; GET ACS
|
||
MOVE E,0 ; NO TTY FLAG BACK
|
||
XOR A,[<.IOT B>#<.CLOSE>]
|
||
XCT A
|
||
MOVE A,GCSTOP ; GET CORE AND FOOL P.CORE
|
||
ADDI A,1777
|
||
ANDCMI A,1777
|
||
EXCH A,P.TOP ; GET P.TOP
|
||
ASH A,-10. ; TO PAGES
|
||
PUSHJ P,P.CORE
|
||
PUSHJ P,NOCORE
|
||
JRST FASTR1
|
||
]
|
||
|
||
IFE ITS,[
|
||
FASTR: POP P,A ; JFN TO A
|
||
BIN ; CORE TOP TO B
|
||
MOVE E,B ; SAVE
|
||
BIN ; PARTOP
|
||
MOVE D,B
|
||
BIN ; SAVED P
|
||
MOVE P,B
|
||
MOVE 0,DEMFLG ; SAVE DEMFLG FLAG AROUND
|
||
HRL E,C ; SAVE VECTOP
|
||
MOVSI A,(A) ; JFN TO LH
|
||
MOVSI B,400000 ; FOR ME
|
||
MOVSI C,120400 ; FLAGS
|
||
ASH D,-9. ; PAGES TO D
|
||
PMAP
|
||
ADDI A,1
|
||
ADDI B,1
|
||
SOJG D,.-3
|
||
|
||
PUSHJ P,PURIN
|
||
|
||
HLRZS A
|
||
CLOSF
|
||
JFCL
|
||
MOVE E,0 ; DEMFLG TO E
|
||
JRST FASTR1
|
||
]
|
||
|
||
; HERE TO GROCK FILE NAME FROM ARGS
|
||
|
||
GTFNM:
|
||
IFN ITS,[
|
||
PUSH P,[0] ; DIRECTION
|
||
PUSH TP,$TPDL
|
||
PUSH TP,P
|
||
IRP A,,[DSK,MUDDLE,SAVE]
|
||
PUSH P,[SIXBIT /A/]
|
||
TERMIN
|
||
PUSHJ P,SGSNAM ; GET SNAME
|
||
PUSH P,A ; SAVE SNAME
|
||
JUMPGE AB,GTFNM1
|
||
PUSHJ P,RGPRS ; PARSE THESE ARGS
|
||
JRST .+2
|
||
GTFNM1: AOS -5(P) ; SKIP RETURN
|
||
MOVE A,(P) ; GET SNAME
|
||
.SUSET [.SSNAM,,A]
|
||
MOVE A,-5(P) ; GET RET ADDR
|
||
SUB TP,[2,,2]
|
||
JRST (A)
|
||
|
||
; HERE TO OUTPUT 1 WORD
|
||
|
||
WRDOUT: PUSH P,B
|
||
PUSH P,A
|
||
HRROI B,(P) ; POINT AT C(A)
|
||
MOVE A,-3(P) ; CHANNEL
|
||
PUSHJ P,MIOT ;WRITE IT
|
||
POPJB: POP P,A
|
||
POP P,B
|
||
POPJ P,
|
||
|
||
; HERE TO READ 1 WORD
|
||
WRDIN==WRDOUT
|
||
]
|
||
IFE ITS,[
|
||
PUSH P,C
|
||
PUSH P,B
|
||
MOVE B,IMQUOTE SNM
|
||
PUSHJ P,IDVAL1
|
||
GETYP 0,A
|
||
CAIN 0,TUNBOU
|
||
JRST GTFNM0
|
||
TRNN A,-1 ;ANY LENGTH?
|
||
PUSHJ P,%RSNAM ;IF <SNAME> IS "", GET REAL ONE
|
||
PUSHJ P,ADDNUL
|
||
SKIPA
|
||
GTFNM0: MOVEI B,0
|
||
PUSH P,[377777,,377777]
|
||
PUSH P,[-1,,[ASCIZ /DSK/]]
|
||
PUSH P,B
|
||
PUSH P,[-1,,[ASCIZ /MUDDLE/]]
|
||
PUSH P,[-1,,[ASCIZ /SAVE/]]
|
||
PUSH P,[0]
|
||
PUSH P,[0]
|
||
PUSH P,[77] ; USE AN OBSCURE JFN IF POSSIBLE
|
||
MOVE A,(AB)
|
||
MOVE B,1(AB)
|
||
PUSHJ P,ADDNUL
|
||
MOVEI A,-10(P)
|
||
GTJFN
|
||
JRST FNF
|
||
SUB P,[9.,,9.]
|
||
POP P,B
|
||
OPENF
|
||
JRST FNF
|
||
ADD AB,[2,,2]
|
||
SKIPL AB
|
||
CPOPJ1: AOS (P)
|
||
CPOPJ: POPJ P,
|
||
|
||
WRDIN: PUSH P,B
|
||
MOVE A,-2(P) ; JFN TO A
|
||
BIN
|
||
MOVE A,B
|
||
POP P,B
|
||
POPJ P,
|
||
|
||
WRDOUT: PUSH P,B
|
||
MOVE B,-2(P)
|
||
EXCH A,B
|
||
BOUT
|
||
EXCH A,B
|
||
POP P,B
|
||
POPJ P,
|
||
]
|
||
|
||
|
||
;REPLACE ALL OCCURANCES OF CHARACTER (B) TO CHARACTER (C) IN A
|
||
HACKV: PUSH P,D
|
||
PUSH P,E
|
||
MOVE D,[440700,,A]
|
||
MOVEI E,5
|
||
HACKV1: ILDB 0,D
|
||
CAIN 0,(B) ; MATCH ?
|
||
DPB C,D ; YES, CLOBBER
|
||
SOJG E,HACKV1
|
||
POP P,E
|
||
POP P,D
|
||
POPJ P,
|
||
|
||
|
||
CANTOP: ERRUUO EQUOTE CANT-OPEN-OUTPUT-FILE
|
||
|
||
FNF: ERRUUO EQUOTE FILE-NOT-FOUND
|
||
|
||
BADVRS: ERRUUO EQUOTE MUDDLE-VERSIONS-DIFFER
|
||
|
||
|
||
CHNLO1: MOVE C,(TP)
|
||
SETZM 1(C)
|
||
JRST CHNLO2
|
||
|
||
CHNLOS: MOVE C,(TP)
|
||
MOVE B,1(C)
|
||
SETZM 1(B) ; CLOBBER CHANNEL #
|
||
SETZM 1(C)
|
||
CHNLO2: MOVEI B,[ASCIZ /
|
||
CHANNEL-NOT-RESTORED
|
||
/]
|
||
JRST MSGTYP"
|
||
|
||
IFN ITS,[
|
||
NOCORE: PUSH P,A
|
||
PUSH P,B
|
||
MOVEI B,[ASCIZ /
|
||
WAIT, CORE NOT YET HERE
|
||
/]
|
||
PUSHJ P,MSGTYP"
|
||
MOVE A,-1(P) ; RESTORE BLOCKS NEEDED
|
||
MOVEI B,1
|
||
.SLEEP B,
|
||
PUSHJ P,P.CORE
|
||
JRST .-4
|
||
MOVEI B,[ASCIZ /
|
||
CORE ARRIVED
|
||
/]
|
||
PUSHJ P,MSGTYP
|
||
POP P,B
|
||
POP P,A
|
||
POPJ P,
|
||
]
|
||
IFN UNTAST,[
|
||
PUCHK: MOVEI E,HIBOT ; COMPUTE REAL START OF INTERPRETER
|
||
ASH E,-10. ; TO PAGES
|
||
MOVE A,PURTOP ; GET START TO POSSIBLE AREA CONTAINING P.S.
|
||
ASH A,-10. ; TO PAGES
|
||
PURCH1: PUSHJ P,CHKPGI ; SEE IF PAGE IS PURIFIED
|
||
JFCL
|
||
ADDI A,1 ; INCREMENT PAGE COUNTER
|
||
CAMG A,E ; SKIP IF DONE
|
||
JRST PURCH1
|
||
POPJ P,
|
||
]
|
||
|
||
; THESE ROUTINES ARE USED BY SAVE AND RESTORE TO GET PAGES OF PURE STRUCTURE
|
||
; INTO A SAVE FILE.
|
||
|
||
PUROUT: MOVEI E,HIBOT ; COMPUTE REAL START OF INTERPRETER
|
||
ASH E,-10. ; TO PAGES
|
||
MOVE A,PURTOP ; GET START TO POSSIBLE AREA CONTAINING P.S.
|
||
ASH A,-10. ; TO PAGES
|
||
PUROU2: PUSHJ P,CHKPGI ; SEE IF PAGE IS PURIFIED
|
||
JRST INCPUT
|
||
PUSH P,A ; SAVE A
|
||
ASH A,10. ; TO WORDS
|
||
HRLI A,-2000 ; MAKE UP AOBJN PTR FOR IOT
|
||
MOVE B,-2(P) ; RESTORE CHN #
|
||
IFN ITS,[
|
||
DOTCAL IOT,[B,A]
|
||
FATAL SAVE--IOT FAILED
|
||
]
|
||
IFE ITS,[
|
||
PUSH P,C ; SAVE C
|
||
MOVE B,A ; SET UP BYTE POINTER
|
||
MOVE A,0 ; CHANNEL TO A
|
||
HRLI B,444400 ; SET UP BYTE POINTER
|
||
MOVNI C,2000
|
||
SOUT ; OUT IT GOES
|
||
POP P,C
|
||
]
|
||
|
||
POP P,A ; RESTORE PAGE #
|
||
INCPUT: ADDI A,1 ; INCREMENT PAGE COUNTER
|
||
CAMG A,E ; SKIP IF DONE
|
||
JRST PUROU2
|
||
POPJ P,
|
||
|
||
|
||
IFN UNTAST,[
|
||
|
||
CHKPGJ: TDZA 0,0
|
||
]
|
||
CHKPGI:
|
||
IFN UNTAST,[
|
||
MOVEI 0,1
|
||
]
|
||
PUSH P,A ; SAVE IT
|
||
IDIVI A,16. ; FIND ENTRY IN PMAP TABLE
|
||
MOVE C,PMAPB(A) ; GET WORD CONTAINING ENTRY
|
||
HRLZI D,400000 ; SET UP TEST WORD
|
||
IMULI B,2
|
||
MOVNS B
|
||
LSH D,(B) ; GET TO CHECK PAIR
|
||
LSH D,-1 ; TO BIT INDICATING SAVE
|
||
TDON C,D ; SKIP IF PAGE CONTAINS P.S
|
||
JRST PUROU1
|
||
POP P,A
|
||
AOS (P) ; SKIP ITS A WINNER
|
||
IFN UNTAST,[
|
||
JUMPN 0,.+4
|
||
LSH D,1
|
||
TDNN C,D
|
||
AOS (P)
|
||
] POPJ P, ; EXIT
|
||
PUROU1:
|
||
IFN UNTAST,[
|
||
JUMPE 0,CHKPG2
|
||
IFN ITS,[
|
||
PUSH P,A
|
||
DOTCAL CORTYP,[A,[2000,,A],[2000,,0]]
|
||
FATAL DOTCAL FAILURE
|
||
SKIPN A
|
||
MOVEI 0,0
|
||
POP P,A
|
||
JUMPGE 0,CHKPG2
|
||
]
|
||
IFE ITS,[
|
||
PUSH P,A
|
||
PUSH P,B
|
||
LSH A,1
|
||
HRLI A,400000
|
||
RPACS
|
||
MOVE 0,B
|
||
POP P,B
|
||
POP P,A
|
||
TLC 0,150400
|
||
TRNE 0,150400
|
||
JRST CHKPG2
|
||
]
|
||
LSH D,1
|
||
TDO C,D
|
||
MOVEM C,PMAPB(A)
|
||
AOS -1(P)
|
||
CHKPG2:]
|
||
POP P,A
|
||
POPJ P,
|
||
|
||
|
||
; ROUTINE TO READ IN PURE STRUCTURE PAGES
|
||
|
||
IFN ITS,[
|
||
PURIN: PUSH P,D ; SAVE CHANNEL #
|
||
MOVEI E,HIBOT ; COMPUTE REAL START OF INTERPRETER
|
||
ASH E,-10. ; TO PAGES
|
||
MOVE A,PURTOP ; GET START TO POSSIBLE AREA CONTAINING P.S.
|
||
ASH A,-10. ; TO WORDS
|
||
PURIN1:
|
||
IFN UNTAST, PUSHJ P,CHKPGJ ; SEE IF PURE PAGE EXISTS
|
||
IFE UNTAST, PUSHJ P,CHKPGI ; SEE IF PURE PAGE EXISTS
|
||
JRST NXPGPN
|
||
IFN UNTAST,[
|
||
SKIPA D,[200000]
|
||
MOVEI D,[104000]
|
||
MOVSI 0,(D)
|
||
]
|
||
PUSH P,A ; SAVE A
|
||
MOVE D,-1(P) ; RESTORE CHANNEL #
|
||
HRLI A,-1 ; SET UP AOBJN POINTER FOR DOTCAL
|
||
IFN UNTAST,[
|
||
DOTCAL CORBLK,[0,[1000,,-1],A,D]
|
||
]
|
||
IFE UNTAST,[
|
||
DOTCAL CORBLK,[[1000,,200000],[1000,,-1],A,D]
|
||
]
|
||
FATAL SAVE--CORBLK FAILED
|
||
POP P,A ; RESTORE A
|
||
NXPGPN: ADDI A,1
|
||
CAMG A,E ; SKIP IF DONE
|
||
JRST PURIN1
|
||
POP P,D ; RESTORE CHANNEL
|
||
POPJ P,
|
||
]
|
||
IFE ITS,[
|
||
PURIN: PUSH P,A ; SAVE CHANNEL
|
||
MOVEI E,HIBOT ; TOP OF SCAN
|
||
ASH E,-10.
|
||
MOVE A,PURBOT ; BOTTOM OF SCAN
|
||
ASH A,-10. ; TO PAGES
|
||
PURIN1: PUSHJ P,CHKPGI ; SEE IF PAGE IS NEEDED
|
||
JRST NXTPGN
|
||
SKIPA C,[120000]
|
||
MOVEI C,120400
|
||
PUSH P,A
|
||
MOVE B,A ; COPY TO B
|
||
ASH B,1 ; FOR TEXEX PAGES
|
||
HRLI B,MFORK ; SET UP ARGS TO PMAP
|
||
MOVSI C,(C)
|
||
MOVE A,-1(P) ; GET FILE POINTER
|
||
PMAP ; IN IT COMES
|
||
ADDI B,1 ; INCREMENT B
|
||
ADDI A,1 ; AND A
|
||
PMAP ; SECOND HALF OF ITS PAGE
|
||
ADDI A,1
|
||
MOVEM A,-1(P) ; SAVE FILE PAGE
|
||
POP P,A
|
||
NXTPGN: ADDI A,1
|
||
CAMG A,E ; SKIP IF DONE
|
||
JRST PURIN1
|
||
POP P,A ; RESTOR CHANNEL
|
||
POPJ P, ;EXIT
|
||
]
|
||
CKVRS: PUSH P,-1(P)
|
||
PUSHJ P,WRDIN ; READ MUDDLE VERSION
|
||
MOVEI B,40 ; CHANGE ALL SPACES
|
||
MOVEI C,177 ; ----- TO RUBOUT CHARACTERS
|
||
PUSHJ P,HACKV
|
||
CAME A,MUDSTR+2 ; AGREE ?
|
||
JRST BADVRS
|
||
SUB P,[1,,1] ; POP OFF CHANNEL #
|
||
POPJ P,
|
||
|
||
IFE ITS,[
|
||
JFNTBL: SETZ IJFNS
|
||
SETZ IJFNS1
|
||
SETZ MAPJFN
|
||
SETZ DIRCHN
|
||
|
||
JFNLNT==.-JFNTBL
|
||
]
|
||
END
|
||
|
||
|