mirror of
https://github.com/PDP-10/its.git
synced 2026-02-24 00:02:14 +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
376
src/mudsys/create.40
Normal file
376
src/mudsys/create.40
Normal file
@@ -0,0 +1,376 @@
|
||||
|
||||
TITLE PROCESS-HACKER FOR MUDDLE
|
||||
|
||||
RELOCATABLE
|
||||
|
||||
.INSRT MUDDLE >
|
||||
|
||||
.GLOBAL ICR,NAPT,IGVAL,CHKARG,RESFUN,RETPROC,SWAP,MAINPR,PROCHK,NOTRES
|
||||
.GLOBAL PSTAT,LSTRES,TOPLEV,MAINPR,1STEPR,INCONS
|
||||
.GLOBAL TBINIT,APLQ,PVSTOR,SPSTOR
|
||||
|
||||
MFUNCTION PROCESS,SUBR
|
||||
|
||||
ENTRY 1
|
||||
GETYP A,(AB) ;GET TYPE OF ARG
|
||||
;MUST BE SOME APPLIABLE TYPE
|
||||
PUSHJ P,APLQ
|
||||
JRST NAPT ;NO, ERROR - NON-APPLIABLE TYPE
|
||||
OKFUN:
|
||||
|
||||
MOVEI A,TPLNT/2 ;SMALL STACK PARAMETERS
|
||||
MOVEI B,PLNT/2
|
||||
PUSHJ P,ICR ;CREATE A NEW PROCESS
|
||||
MOVE C,TPSTO+1(B) ;GET ITS SRTACK
|
||||
PUSH C,[TENTRY,,TOPLEV]
|
||||
PUSH C,[1,,0] ;TIME
|
||||
PUSH C,[0]
|
||||
PUSH C,SPSTO(B)
|
||||
PUSH C,PSTO+1(B)
|
||||
MOVE D,C
|
||||
ADD D,[3,,3]
|
||||
PUSH C,D ;SAVED STACK POINTER
|
||||
PUSH C,[SUICID]
|
||||
MOVEM C,TPSTO+1(B) ;STORE NEW TP
|
||||
HRRI D,1(C) ;MAKE A TB
|
||||
HRLI D,400002 ;WITH A TIME
|
||||
MOVEM D,TBINIT+1(B)
|
||||
MOVEM D,TBSTO+1(B) ;SAVE ALSO FOR SIMULATED START
|
||||
MOVE C,(AB) ;STORE ARG
|
||||
MOVEM C,RESFUN(B) ;INTO PV
|
||||
MOVE C,1(AB)
|
||||
MOVEM C,RESFUN+1(B)
|
||||
MOVEI 0,RUNABL
|
||||
MOVEM 0,PSTAT+1(B)
|
||||
JRST FINIS
|
||||
|
||||
REPEAT 0,[
|
||||
MFUNCTION RETPROC,SUBR
|
||||
; WHO KNOWS WHAT THIS SHOULD REALLY DO
|
||||
;PROBABLY, JUST AN EXIT
|
||||
;FOR NOW, PRINT OUT AN ERROR MESSAGE
|
||||
ERRUUO EQUOTE ATTEMPT-TO-RETURN-OUT-OF-PROCESS
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
MFUNCTION RESUME,FSUBR
|
||||
;RESUME IS CALLED WITH TWO ARGS
|
||||
;THE FIRST IS A PROCESS FORM OF THE PROCESS TO BE RESUMED
|
||||
;THE SECOND IS A FUNCTION TO BE CALLED WHEN THIS PROCESS
|
||||
; (THE PARENT) IS ITSELF RESUMED
|
||||
;IF THE FUNCTION IS NOT GIVEN SOME STANDARD FUNCTION IS
|
||||
;PLUGGED IN
|
||||
;
|
||||
; NOTE - TYPE AND NUMBER OF ARGS CHECKS MUST BE ADDED TO BOTH RESUME AND CREATE
|
||||
|
||||
ENTRY 1
|
||||
HRRZ C,@1(AB) ;GET CDR ADDRESS
|
||||
JUMPE C,NOFUN ;IF NO SECOND ARG, SUPPLY STANDARD
|
||||
HLLZ A,(C) ;GET CDR TYPE
|
||||
CAME A,$TATOM ;ATOMIC?
|
||||
JRST RES2 ;NO, MUST EVAL TO GET FUNCTION
|
||||
MOVE B,1(C) ;YES
|
||||
PUSHJ P,IGVAL ;TRY TO GET GLOBAL VALUE
|
||||
CAMN A,$TUNBOUND ;GLOBALLY UNBOUND?
|
||||
JRST LFUN ;YES, TRY FOR LOCAL VALUE
|
||||
RES1: MOVE PVP,PVSTOR+1
|
||||
MOVEM A,RESFUN(PVP) ;STORE IN THIS PROCESS
|
||||
MOVEM B,RESFUN+1(PVP)
|
||||
|
||||
HRRZ C,1(AB) ;GET CAR ADDRESS
|
||||
PUSH TP,(C) ;PUSH PROCESS FORM
|
||||
PUSH TP,1(C)
|
||||
JSP E,CHKARG ;CHECK FOR DEFERED TYPE
|
||||
;INSERT CHECKS FOR PROCESS FORM
|
||||
MCALL 1,EVAL ;EVAL PROCESS FORM WHICH WILL SWITCH
|
||||
; PROCESSES
|
||||
JRST FINIS
|
||||
|
||||
RES2: PUSH TP,(C) ;PUSH FUNCTION ARG
|
||||
PUSH TP,1(C)
|
||||
JSP E,CHKARG ;CHECK FOR DEFERED
|
||||
MCALL 1,EVAL ;EVAL TO GET FUNCTION
|
||||
JRST RES1
|
||||
|
||||
LFUN: HRRZ C,1(AB) ;GET CDR ADDRESS
|
||||
PUSH TP,(C)
|
||||
PUSH TP,1(C)
|
||||
MCALL 1,VALUE ;GET LOCAL VALUE OF ATOM FOR FUNCTION
|
||||
JRST RES1
|
||||
|
||||
NOFUN: MOVSI A,TUNBOUND ;MAKE RESUME FUNCTION UNBOUND
|
||||
JRST RES1
|
||||
]
|
||||
|
||||
; PROCHK - SETUP LAST RESUMER SLOT
|
||||
|
||||
PROCHK: MOVE PVP,PVSTOR+1
|
||||
CAME B,MAINPR ; MAIN PROCESS?
|
||||
MOVEM PVP,LSTRES+1(B)
|
||||
POPJ P,
|
||||
|
||||
; THIS FUNCTION RESUMES A PROCESS, CALLED WITH ONE OR TWO ARGS
|
||||
; THE FIRST IS A VALUE TO RETURN TO THE OTHER PROCESS OR PASS TO ITS
|
||||
; RESFUN
|
||||
; THE SECOND IS THE PROCESS TO RESUME (IF NOT SUPPLIED, USE THE LSTRES)
|
||||
|
||||
|
||||
MFUNCTION RESUME,SUBR
|
||||
|
||||
ENTRY
|
||||
JUMPGE AB,TFA
|
||||
CAMGE AB,[-4,,0]
|
||||
JRST TMA
|
||||
CAMGE AB,[-2,,0]
|
||||
JRST CHPROC ; VALIDITY CHECK ON PROC
|
||||
MOVE PVP,PVSTOR+1
|
||||
SKIPN B,LSTRES+1(PVP) ; ANY RESUMERS?
|
||||
JRST NORES ; NO, COMPLAIN
|
||||
GOTPRO: MOVE C,AB
|
||||
CAMN B,PVSTOR+1 ; DO THEY DIFFER?
|
||||
JRST RETARG
|
||||
MOVE A,PSTAT+1(B) ; CHECK STATE
|
||||
CAIE A,RUNABL ; MUST BE RUNABL
|
||||
CAIN A,RESMBL ; OR RESUMABLE
|
||||
JRST RESUM1
|
||||
NOTRES:
|
||||
NOTRUN: ERRUUO EQUOTE PROCESS-NOT-RUNABLE-OR-RESUMABLE
|
||||
|
||||
RESUM1: PUSHJ P,PROCHK ; FIX LISTS UP
|
||||
MOVEI A,RESMBL ; GET NEW STATE
|
||||
MOVE D,B ; FOR SWAP
|
||||
STRTN: JSP C,SWAP ; SWAP THEM
|
||||
MOVEM A,PSTAT+1(E) ; CLOBBER OTHER STATE
|
||||
MOVE PVP,PVSTOR+1
|
||||
MOVE A,PSTAT+1(PVP) ; DECIDE HOW TO PROCEED
|
||||
MOVEI 0,RUNING
|
||||
MOVEM 0,PSTAT+1(PVP) ; NEW STATE
|
||||
MOVE C,ABSTO+1(E) ; OLD ARGS
|
||||
CAIE A,RESMBL
|
||||
JRST DORUN ; THEY DO RUN RUN, THEY DO RUN RUN
|
||||
RETARG: MOVE A,(C)
|
||||
MOVE B,1(C) ; RETURN
|
||||
JRST FINIS
|
||||
|
||||
DORUN: PUSH TP,RESFUN(PVP)
|
||||
PUSH TP,RESFUN+1(PVP)
|
||||
PUSH TP,(C)
|
||||
PUSH TP,1(C)
|
||||
MCALL 2,APPLY
|
||||
PUSH TP,A ; CALL SUICIDE WITH THESE ARGS
|
||||
PUSH TP,B
|
||||
MCALL 1,SUICID ; IF IT RETURNS, KILL IT
|
||||
JRST FINIS
|
||||
|
||||
CHPROC: GETYP A,2(AB)
|
||||
CAIE A,TPVP
|
||||
JRST WTYP2
|
||||
MOVE B,3(AB)
|
||||
JRST GOTPRO
|
||||
|
||||
NORES: ERRUUO EQUOTE NO-PROCESS-TO-RESUME
|
||||
|
||||
; FUNCTION TO CAUSE PROCESSES TO SELF DESTRUCT
|
||||
|
||||
MFUNCTION SUICIDE,SUBR
|
||||
|
||||
ENTRY
|
||||
|
||||
JUMPGE AB,TFA
|
||||
HLRE A,AB
|
||||
ASH A,-1 ; DIV BY 2
|
||||
AOJE A,NOPROC ; NO PROCESS GIVEN
|
||||
AOJL A,TMA
|
||||
GETYP A,2(AB) ; MAKE SURE OF PROCESS
|
||||
CAIE A,TPVP
|
||||
JRST WTYP2
|
||||
MOVE C,3(AB)
|
||||
JRST SUIC2
|
||||
|
||||
NOPROC: MOVE PVP,PVSTOR+1
|
||||
SKIPN C,LSTRES+1(PVP)
|
||||
MOVE C,MAINPR ; IF NOT DEFAULT TO MAIN
|
||||
SUIC2: CAMN C,PVP ; DONT SUICIDE TO SELF
|
||||
JRST SUSELF
|
||||
MOVE B,PSTAT+1(C)
|
||||
CAIE B,RUNABL
|
||||
CAIN B,RESMBL
|
||||
JRST .+2
|
||||
JRST NOTRUN
|
||||
MOVE B,C
|
||||
PUSHJ P,PROCHK
|
||||
MOVE D,B ; RESTORE NEWPROCESS
|
||||
MOVEI A,DEAD
|
||||
JRST STRTN
|
||||
|
||||
SUSELF: ERRUUO EQUOTE ATTEMPT-TO-SUICIDE-TO-SELF
|
||||
|
||||
|
||||
MFUNCTION RESER,SUBR,RESUMER
|
||||
|
||||
ENTRY
|
||||
MOVE B,PVSTOR+1
|
||||
JUMPGE AB,GTLAST
|
||||
CAMGE AB,[-2,,0]
|
||||
JRST TMA
|
||||
|
||||
GETYP A,(AB) ; CHECK FOR PROCESS
|
||||
CAIE A,TPVP
|
||||
JRST WTYP1
|
||||
MOVE B,1(AB) ; GET PROCESS
|
||||
GTLAST: MOVSI A,TFALSE ; ASSUME NONE
|
||||
SKIPN B,LSTRES+1(B) ; GET IT IF IT EXISTS
|
||||
JRST FINIS
|
||||
MOVSI A,TPVP ; GET TYPE
|
||||
JRST FINIS
|
||||
|
||||
; FUNCTION TO PUT AN EVAL CALL ON ANOTHER PROCESSES STACK
|
||||
|
||||
MFUNCTION BREAKSEQ,SUBR,BREAK-SEQ
|
||||
|
||||
ENTRY 2
|
||||
|
||||
GETYP A,2(AB) ; 2D ARG MUST BE PROCESS
|
||||
CAIE A,TPVP
|
||||
JRST WTYP2
|
||||
|
||||
MOVE B,3(AB) ; GET PROCESS
|
||||
CAMN B,PVSTOR+1 ; SKIP IF NOT ME
|
||||
JRST BREAKM
|
||||
MOVE A,PSTAT+1(B) ; CHECK STATE
|
||||
CAIE A,RESMBL ; BEST BE RESUMEABLE
|
||||
JRST NOTRUN
|
||||
MOVE C,TBSTO+1(B) ; GET SAVE ACS TO BUILD UP A DUMMY FRAME
|
||||
MOVE D,TPSTO+1(B) ; STACK POINTER
|
||||
MOVE E,SPSTO+1(B) ; FIX UP OLD FRAME
|
||||
MOVEM E,SPSAV(C)
|
||||
MOVEI E,CALLEV ; FUNNY PC
|
||||
MOVEM E,PCSAV(C)
|
||||
MOVE E,PSTO+1(B) ; SET UP P,PP AND TP SAVES
|
||||
MOVEM E,PSAV(C)
|
||||
PUSH D,[0] ; ALLOCATES SOME SLOTS
|
||||
PUSH D,[0]
|
||||
PUSH D,(AB) ; NOW THAT WHIC IS TO BE EVALLED
|
||||
PUSH D,1(AB)
|
||||
MOVEM D,TPSAV(C)
|
||||
HRRI E,-1(D) ; BUILD UP ARG POINTER
|
||||
HRLI E,-2
|
||||
PUSH D,[TENTRY,,BREAKE]
|
||||
PUSH D,C ; OLD TB
|
||||
PUSH D,E ; NEW ARG POINTER
|
||||
REPEAT 4,PUSH D,[0] ; OTHER SLOTS
|
||||
MOVEM D,TPSTO+1(B)
|
||||
MOVEI C,(D) ; BUILD NEW AB
|
||||
AOBJN C,.+1
|
||||
MOVEM C,TBSTO+1(B) ; STORE IT
|
||||
MOVE A,2(AB) ; RETURN PROCESS
|
||||
MOVE B,3(AB)
|
||||
JRST FINIS
|
||||
|
||||
MQUOTE BREAKER
|
||||
|
||||
BREAKE:
|
||||
CALLEV: MOVEM A,-3(TP) ; HERE TO EVAL THE GOODIE (SAVE REAL RESULT)
|
||||
MOVEM B,-2(TP)
|
||||
MCALL 1,EVAL
|
||||
POP TP,B
|
||||
POP TP,A
|
||||
JRST FINIS
|
||||
|
||||
BREAKM: ERRUUO EQUOTE ATTEMPT-TO-BREAK-OWN-SEQUENCE
|
||||
|
||||
; FUNCTION TOP PUT PROCESS IN 1 STEP MODE
|
||||
|
||||
MFUNCTION 1STEP,SUBR
|
||||
PUSHJ P,1PROC
|
||||
MOVE PVP,PVSTOR+1
|
||||
MOVEM PVP,1STEPR+1(B) ; CLOBBER TARGET PROCESS
|
||||
JRST FINIS
|
||||
|
||||
; FUNCTION TO UNDO ABOVE
|
||||
|
||||
MFUNCTION %%FREE,SUBR,FREE-RUN
|
||||
PUSHJ P,1PROC
|
||||
MOVE PVP,PVSTOR+1
|
||||
CAME PVP,1STEPR+1(B)
|
||||
JRST FNDBND
|
||||
SETZM 1STEPR+1(B)
|
||||
JRST FINIS
|
||||
|
||||
FNDBND: SKIPE 1STEPR+1(B) ; DOES IT HAVE ANY 1STEPPER?
|
||||
JRST NOTMIN ; YES, COMPLAIN
|
||||
MOVE D,B ; COPY PROCESS
|
||||
ADD D,[1STEPR,,1STEPR] ; POINTER FOR SEARCH
|
||||
HRRZ C,SPSTO+1(B) ; GET THIS BINDING STACK
|
||||
|
||||
FNDLP: GETYP 0,(C) ; IS THIS A TBVL?
|
||||
CAIN 0,TBVL
|
||||
CAME D,1(C) ; SKIP IF THIS IS SAVED 1STEP SLOT
|
||||
JRST FNDNXT
|
||||
SKIPN 3(C) ; IS IT SAVING A REAL 1STEPPER?
|
||||
JRST FNDNXT
|
||||
MOVE PVP,PVSTOR+1
|
||||
CAME PVP,3(C) ; IS IT ME?
|
||||
JRST NOTMIN
|
||||
SETZM 3(C) ; CLEAR OUT SAVED 1STEPPER
|
||||
JRST FINIS
|
||||
FNDNXT: HRRZ C,(C) ; NEXT BINDING
|
||||
JUMPN C,FNDLP
|
||||
|
||||
NOTMIN: MOVE C,$TCHSTR
|
||||
MOVE D,CHQUOTE NOT-YOUR-1STEPEE
|
||||
PUSHJ P,INCONS
|
||||
MOVSI A,TFALSE
|
||||
JRST FINIS
|
||||
|
||||
1PROC: ENTRY 1
|
||||
GETYP A,(AB)
|
||||
CAIE A,TPVP
|
||||
JRST WTYP1
|
||||
MOVE B,1(AB)
|
||||
MOVE A,(AB)
|
||||
POPJ P,
|
||||
|
||||
; FUNCTION TO RETRUN THE MAIN PROCESS
|
||||
|
||||
MFUNCTION MAIN%%,SUBR,MAIN
|
||||
ENTRY 0
|
||||
|
||||
MOVE B,MAINPR
|
||||
MAIN1: MOVSI A,TPVP
|
||||
JRST FINIS
|
||||
|
||||
; FUNCTION TO RETURN THE CURRENT PROCESS
|
||||
|
||||
MFUNCTION ME,SUBR
|
||||
ENTRY 0
|
||||
|
||||
MOVE B,PVSTOR+1
|
||||
JRST MAIN1
|
||||
|
||||
; FUNCTION TO RETURN THE STATE OF A PROCESS
|
||||
|
||||
MFUNCTION STATE,SUBR
|
||||
ENTRY 1
|
||||
GETYP A,(AB)
|
||||
CAIE A,TPVP
|
||||
JRST WTYP1
|
||||
MOVE A,1(AB) ; GET PROCESS
|
||||
MOVE A,PSTAT+1(A)
|
||||
MOVE B,@STATES(A) ; GET STATE
|
||||
MOVSI A,TATOM
|
||||
JRST FINIS
|
||||
|
||||
STATES:
|
||||
IRP A,,[ILLEGAL,RUNABLE,RESUMABLE,RUNNING,DEAD,BLOCKED]
|
||||
MQUOTE A
|
||||
TERMIN
|
||||
|
||||
|
||||
|
||||
END
|
||||
|
||||
Reference in New Issue
Block a user