ITS Muddle.
[pdp10-muddle.git] / MUDDLE / nuuoh.12
1 TITLE UUO HANDLER FOR MUDDLE
2 RELOCATABLE
3 .INSRT MUDDLE >
4
5 ;GLOBALS FOR THIS PROGRAM
6
7 .GLOBAL BACKTR,PRINT,PDLBUF,TPGROW,SPECSTO,TIMOUT,AGC
8 .GLOBAL BCKTRK,SPCSTE,CNTIN2
9
10 ;SETUP UUO DISPATCH TABLE HERE
11
12 UUOTBL: ILLUUO
13
14 IRP UUOS,,[[DP,DODP],[.MCALL,DMCALL],[.ACALL,DACALL]]
15 UUFOO==.IRPCNT+1
16 IRP UUO,DISP,[UUOS]
17 .GLOBAL UUO
18 UUO=UUFOO_33
19 DISP
20 .ISTOP
21 TERMIN
22 TERMIN
23
24 REPEAT 100-.IRPCNT,ILLUUO
25
26
27 UUOH:
28 LOC 41
29         JSR     UUOH
30 LOC UUOH
31         0
32         JRST    UUOPUR          ;GO TO PURE CODE FOR THIS
33
34 ;SEPARATION OF PURE FROM IMPURE CODE HERE
35
36 UUOPUR: PUSH    P,C
37         LDB     C,[330900,,40]
38         JRST    @UUOTBL(C)      ;DISPATCH BASED ON THE UUO
39
40 ;HANDLER FOR DEBUGGING CALL TO PRINT
41
42 DODP:
43         POP     P,C
44         PUSH    TP, @40
45         AOS     40
46         PUSH    TP,@40
47         PUSH P,0
48         PUSH P,1
49         PUSH P,2
50         PUSH P,3
51         PUSH P,4
52         PUSH P,5
53         PUSH P,40
54         MCALL   1,PRINT
55         POP P,40
56         POP P,5
57         POP P,4
58         POP P,3
59         POP P,2
60         POP P,1
61         POP P,0
62         JRST    2,@UUOH
63
64 ;CALL HANDLER
65
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
71         MOVEM   C,(P)           ;SAVE
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
81         PUSH    TP,TB
82         PUSH    TP,AB
83         PUSH    TP,SP
84         PUSH    TP,P
85         PUSH    TP,TP
86         PUSH    TP,PP
87         PUSH    TP,[0]
88 CALDON: SUB     P,[1,,1]        ;POP STACK
89         MOVEM   P,PSAV(TB)
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
95
96 ;TIME OVERFLOW, CALL THE GARBAGE COLLECTOR
97
98         MOVEM   TP,TIMOUT       ;POINT TO UNHAPPY PDL
99         PUSHJ   P,AGC   ;AND COLLECT GARBAGE
100         HRLI    TB,TIMOUT       ;CONTAINS CURRENT TIME
101         SETZM   TIMOUT
102 CALLIT: INTGO                   ;CHECK FOR INTERRUPTS
103         JRST    (C)
104
105
106 ;HANDLER FOR CALL WHERE SPECIFIES NUMBER OF ARGS
107
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
116
117 ;HANDLE OVERFLOW IN THE TP
118
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
125         JRST    CALDON
126
127 ;SUBROUTINE TERMINATION CODE (NOT A UUO BUT HERE FOR COMPLETENENSS)
128
129 FINIS:  MOVE    C,OTBSAV(TB)
130         MOVE    E,SPSAV(C)      ;RESTORE BINDINGS
131         CAIE    E,(SP)
132         PUSHJ   P,SPCSTE        ;IF NECESSARY
133         HRR     C,OTBSAV(TB)    ;CHECK PP GROWTH
134         CAME    PP,PPSAV(C)
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
138         MOVE    P,PSAV(TB)
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
143         PUSHJ   P,BCKTRK
144         POP     TP,B
145         POP     TP,A
146         JRST    CNTIN1
147 CONTIN: CAME    SP,SPSAV(TB)
148         PUSHJ   P,SPECST
149         JRST    CNTIN2
150
151
152 ILLUUO: .VALUE
153
154 OPC:    0
155 JPC:    0
156
157 END
158 \f\ 3\f