Twenex Muddle.
[pdp10-muddle.git] / <mdl.int> / core.mid.13
1 TITLE CORE
2
3 RELOCATABLE
4
5 .INSRT MUDDLE >
6
7 SYSQ
8
9 IF1,[
10 IFE ITS,.INSRT STENEX >
11 ]
12
13 .GLOBAL P.CORE,P.TOP,PHIBOT,PURBOT,FRETOP,SQKIL,GCFLG,KILBUF
14 .GLOBAL MULTSG
15
16 ; .CORE AND .SUSET [.RMEMT,,---] FOR PAGED ENVIRONMENT
17
18 IFN ITS,[
19
20 P.CORE: PUSH    P,0
21         PUSH    P,A
22         PUSH    P,B
23         PUSH    P,C
24         PUSH    P,D
25         PUSH    P,E
26         SKIPN   GCFLG
27          PUSHJ  P,SQKIL
28         MOVE    A,-4(P)
29         ASH     A,10.           ; CHECK IT
30         CAMLE   A,PURBOT        ; A CAML HERE IS OBSERVED TO LOSE
31          FATAL  BAD ARG TO GET CORE
32         MOVE    A,-4(P)         ; RESTORE A
33         HRRZ    B,P.TOP         ; GET FIRST ADDRESS ABOVE TOP
34         ASH     B,-10.          ; TO BLOCKS
35         CAIG    A,(B)           ; SKIP IF GROWING
36          JRST   P.COR1
37         SUBM    B,A             ; A/ -NUMBER OF BLOCKS TO GET
38         HRLI    B,(A)           ; AOBJN TO BLOCKS
39
40         .CALL   P.CORU          ; TRY
41          JRST   POPBJ           ; LOSE
42         MOVE    A,B
43 P.COR2: ASH     B,10.           ; TO WORDS
44         MOVEM   B,P.TOP         ; NEW TOP
45 POPBJ1: AOS     -6(P)           ; SKIP RETURN ON SUCCESS
46 POPBJ:  POP     P,E
47         POP     P,D
48         POP     P,C
49         POP     P,B
50         POP     P,A
51         POP     P,0
52         POPJ    P,
53
54 ; HERE TO CORE DOWN
55
56 P.COR1: SUBM    A,B
57         JUMPE   B,POPBJ1        ; SUCCESS, YOU ALREADY HAVE WHAT YOU WANT
58         HRLI    A,(B)
59         MOVEI   B,(A)
60         .CALL   P.CORD
61          JRST   POPBJ
62         JRST    P.COR2
63
64 P.CORU: SETZ
65         SIXBIT /CORBLK/
66         1000,,100000
67         1000,,-1
68         B
69         401000,,400001
70
71 P.CORD: SETZ
72         SIXBIT /CORBLK/
73         1000,,0
74         1000,,-1
75         SETZ A
76 ]
77
78 IFE ITS,[
79
80 MFORK==400000
81
82 P.CORE: JRST    @[.+1]
83         ASH     A,10.           ; CHECK IT
84         CAMLE   A,PURBOT
85          FATAL  BAD ARG TO GET CORE
86         ASH     A,-9.           ; TO PAGES
87         PUSH    P,D
88         PUSH    P,A
89         SKIPN   GCFLG
90          PUSHJ  P,SQK
91         SETOM   A               ; FLUSH PAGES
92         HRRZ    B,P.TOP         ; GET P.TOP
93         ASH     B,-9.           ; TO PAGES
94         CAMLE   B,(P)
95          SOJA   B,P.CORD        ; CORING DOWN
96         HRLI    B,MFORK         ; SET UP FORK POINTER
97 P.COR2: HRRZ    D,B
98         CAML    D,(P)           ; SEE IF DONE
99          JRST   P.COR1
100         PMAP                    ; MAP OUT PAGE
101         ADDI    B,1             ; NEXT PAGE
102         JRST    P.COR2          ; LOOP BACK
103 P.COR1: POP     P,A             ; RESTORE NEW P.TOP
104         POP     P,D
105         ASH     A,9.            ; TO WORDS
106         MOVEM   A,P.TOP
107         AOS     (P)
108 POPJA:  ASH     A,-10.
109         SKIPN   MULTSG
110          POPJ   P,
111         POP     P,21
112         SETZM   20
113         JRST    5,20
114
115 P.CORD: HRLI    B,400000
116         PMAP
117         MOVEI   D,-1(B)
118         CAMLE   D,(P)
119          SOJA   B,.-3
120         JRST    P.COR1
121
122 SQK:    PUSH    P,0
123         PUSH    P,A
124         PUSH    P,B
125         PUSH    P,C
126         PUSH    P,D
127         PUSH    P,E
128         PUSHJ   P,SQKIL
129         POP     P,E
130         POP     P,D
131         POP     P,C
132         POP     P,B
133         POP     P,A
134         POP     P,0
135         POPJ    P,
136
137 ]
138
139 IMPURE
140
141 P.TOP==FRETOP
142
143 PURE
144
145 END