1 TITLE UUO HANDLER FOR MUDDLE
5 ;GLOBALS FOR THIS PROGRAM
7 .GLOBAL BACKTR,PRINT,PDLBUF,TPGROW,SPECSTO,TIMOUT,AGC
8 .GLOBAL BCKTRK,SPCSTE,CNTIN2
10 ;SETUP UUO DISPATCH TABLE HERE
14 IRP UUOS,,[[DP,DODP],[.MCALL,DMCALL],[.ACALL,DACALL]]
24 REPEAT 100-.IRPCNT,ILLUUO
32 JRST UUOPUR ;GO TO PURE CODE FOR THIS
34 ;SEPARATION OF PURE FROM IMPURE CODE HERE
38 JRST @UUOTBL(C) ;DISPATCH BASED ON THE UUO
40 ;HANDLER FOR DEBUGGING CALL TO PRINT
66 DMCALL: MOVEM SP,SPSAV(TB) ;STORE VITALS INTO CURRENT FRAME
67 MOVE C,UUOH ;PICK UP PCWORD
68 MOVEM C,PCSAV(TB) ;SAVE IN CURRENT FRAME
69 LDB C,[270400,,40] ;GET AC FIELD OF UUO
70 COMCAL: LSH C,1 ;TIMES 2
72 HRLI C,(C) ;TO BOTH SIDES
73 SUBM TP,C ;NOW HAVE TP TO SAVE
74 MOVEM C,TPSAV(TB) ;SAVE IT
75 MOVEI AB,1(C) ;BUILD THE AB POINTER
76 MOVN C,(P) ;NEGATE NUMBER OF ARGS
77 HRLI AB,(C) ;HAVE A REAL AB POINTER
78 MOVSI C,TENTRY ;SET UP ENTRY WORD
79 HRR C,40 ;POINT TO CALLED SR
80 PUSH TP,C ;START HACKING FRAME
88 CALDON: SUB P,[1,,1] ;POP STACK
90 MOVEM PP,PPSAV(TB) ;SAVE PLANNER PDL
91 HRRI TB,(TP) ;SETUP NEW TB
92 AOBJP TB,CALLIT ;GO TO CALLED SR
93 TLNE TB,-1 ;TIME OVERFLOW?
94 JRST CALLIT ;NO, GOT TO CALLED GOODIE
96 ;TIME OVERFLOW, CALL THE GARBAGE COLLECTOR
98 MOVEM TP,TIMOUT ;POINT TO UNHAPPY PDL
99 PUSHJ P,AGC ;AND COLLECT GARBAGE
100 HRLI TB,TIMOUT ;CONTAINS CURRENT TIME
102 CALLIT: INTGO ;CHECK FOR INTERRUPTS
106 ;HANDLER FOR CALL WHERE SPECIFIES NUMBER OF ARGS
108 DACALL: MOVEM SP,SPSAV(TB) ;SETUP THE OLD FRAME
109 MOVE C,UUOH ;GET PC WORD
110 MOVEM C,PCSAV(TB) ;AND SAVE
111 LDB C,[270400,,40] ;GOBBLE THE AC LOCN INTO C
112 IOR C,[MOVE C,0] ;SETUP INS
113 EXCH C,(P) ;PUT INS ON STACK AND RESTORE C
114 XCT (P) ;C NOW HAS NO. OF ARGS
115 JRST COMCAL ;JOIN MCALL
117 ;HANDLE OVERFLOW IN THE TP
119 TPLOSE: ADD TP,[-PDLBUF,,0] ;USE BUFFER
120 HLRE C,TP ;GET -LENGTH
121 MOVEI D,1(TP) ;COPY TP
122 SUB D,C ;D POINTS TO DOPE WORD
123 MOVEM D,TPGROW ;SAVE FOR NEXT GARBAGE COLLECTION
124 SETOM INTFLG ;CAUSE AN INTERRUPT NEXT TIME
127 ;SUBROUTINE TERMINATION CODE (NOT A UUO BUT HERE FOR COMPLETENENSS)
129 FINIS: MOVE C,OTBSAV(TB)
130 MOVE E,SPSAV(C) ;RESTORE BINDINGS
132 PUSHJ P,SPCSTE ;IF NECESSARY
133 HRR C,OTBSAV(TB) ;CHECK PP GROWTH
135 JRST BCKTR1 ;SAVE TP FRAME
136 CNTIN1: HRR TB,OTBSAV(TB) ;RESTORE BASE
137 CNTIN2: MOVE TP,TPSAV(TB) ;START HERE FOR FUNNY RESTART
139 MOVE AB,ABSAV(TB) ;AND GET OLD ARG POINTER
140 JRST 2,@PCSAV(TB) ;AND RETURN
141 BCKTR1: PUSH TP,A ;SAVE VALUE TO BE RETURNED
142 PUSH TP,B ;SAVE FRAME ON PP
147 CONTIN: CAME SP,SPSAV(TB)