mirror of
https://github.com/PDP-10/its.git
synced 2026-04-28 12:57:56 +00:00
Rename to ITS conventions.
MIDAS and Muddle source get version numbers (as in the 1973 Muddle source); the build files don't.
This commit is contained in:
committed by
Adam Sampson
parent
8eb73e1b95
commit
a81db26a7a
799
src/mudsys/save.176
Normal file
799
src/mudsys/save.176
Normal file
@@ -0,0 +1,799 @@
|
||||
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user