Initial commit
[retro-software/dec/tops10/v1.19.git] / src / core.mac
1 TITLE CORE - CORE ALLOCATION ROUTINE\r
2         SUBTTL G. BELL 6-29-65\r
3 ;         PUSHJ PDP, CORE1      ;ITEM = JOB #. TAC = 1K CORE BLOCKS\r
4                                 ;REQUESTED\r
5 ;         RET1                  ;OLD CORE RETURNED.\r
6 ;         RET2                  ;OLD CORE RETURNED.   JBTADR, JOBREL ARE\r
7                                 ;SET UP\r
8 ; JBADR (ITEM) = POINTER TO JOB AREA. JOBREL (JBTADR) = HIGHEST LOCAT\r
9 ; C(RH) JBTADR IS SET OT 0 OR REQUESTED CORE. JOBREL IS SET IF CORE G\r
10 ; NOT A PURE PROCEDURE ...\r
11 ;CORTAL:  0                             ;COUNT OF FREE CORE\r
12 ;CORTAB:  BLOCK ^D3                     ;TABLE OF 72 BITS. 1 BIT FOR\r
13 ;1K OF CORE. 1 = USED. 0 = FREE\r
14 ;CORLST:  POINT 1, CORTAB, 32           ;POINTER FIRST OUT OF BOUNDS\r
15 ;\r
16 ;TEMPORARY USAGE\r
17 CORUSZ:   0                             ;SIZE OF USERS CODE, OLD.-NEW\r
18 CORLOC:   0                             ;POSITION OF 1ST FREE BLOCK\r
19 ;\r
20 ;AC ASSIGNMENTS\r
21 COR1=BUFPNT\r
22 COR2=BUFWRD\r
23 COR3=UUO\r
24 INTERNAL CORE1\r
25 EXTERNAL JBTADR,JOBREL,CORLST,CORTAL,CORTAB\r
26 \f\r
27 CORE1:    LDB COR1, CORE1P      \r
28           MOVEM COR1, CORLOC\r
29           JUMPE COR1, CORGET            ;IF 0 NO CORE NOEW.\r
30           HLRZ COR1, JBTADR(ITEM)       ;CLEAR OLD CORE\r
31           AOS COR1                      ;HIGHEST ADDRESS AVAIL. FORM\r
32           ASH COR1, -^D10\r
33           MOVEM COR1, CORUSZ\r
34 CORRET:   CLEARM COR3                   ;RETURN OLD CORE\r
35           PUSHJ PDP, CORSTG\r
36 CORGET:   SETZM JBTADR(ITEM)    ;CLEAR JOB ADDRESS TO 0\r
37           JUMPE TAC, COROK              ;IF NO CORE TO GET, RETURN\r
38           MOVE COR3, CORE2P     ;SET UP FOR\r
39           SETOM CORLOC                  ;HOLE SEARCH\r
40 CORG1:    PUSHJ PDP, CORHOL\r
41           JRST CORNG                    ;UNSUCCESSFUL SEARCH\r
42           CAMGE COR1, TAC               ;HOLE FOUND\r
43           JRST CORG1\r
44 CORGVE:   MOVNS COR1                    ;BACKUP CORLOC\r
45           ADDM COR1, CORLOC\r
46           MOVEM TAC, CORUSZ             ;RESERVE HOLD FOR JOB\r
47           MOVEI COR3, 1                 ;SET CORTAB\r
48           PUSHJ PDP, CORSTG\r
49           MOVE COR1, CORLOC             ;C(RH)=RELOC, C(LH)=PROTECT\r
50           ASH COR1, ^D10\r
51           HRRM COR1, JBTADR(ITEM)\r
52           ASH TAC, ^D10\r
53           SUBI TAC, 1\r
54           HRRM TAC, JOBREL (COR1)\r
55           HRLM TAC,JBTADR(ITEM)\r
56 COROK:    AOS (PDP)\r
57 CORNG:    MOVE TAC, CORTAL\r
58           POPJ PDP,\r
59 \r
60 CORE1P:   POINT 8, JBTADRR(ITEM),25\r
61 CORE2P:   POINT 1, CORTAB\r
62 \f\r
63 ;         PUSHJ PDP, CORHOL     ;COR1-HOLES FREE, COR2=TEMP\r
64 ;         RETURN1               ;COR3=POINTER. RETURN1=END OF STRING RE\r
65 ;         RETURN2               ;HOLE FOUND.\r
66 ; CORLOC CONTAINS 0,1.. N, THE CORE BLK PTR. CORLST IS PTR TO\r
67 ; STOP STRING TEST\r
68 CORHOL:   CLEARM COR1\r
69 CORH01:   CAMN COR3, CORLST             ;TEST DONE\r
70           POPJ PDP,\r
71           ILDB COR2, COR3               ;TEST NEXT BLOCK\r
72           AOS CORLOC\r
73           SKIPN COR2\r
74           AOJA COR1, CORH01             ;COUNT FREE\r
75           JUMPE COR1, CORH01\r
76           AOS (PDP)\r
77           POPJ PDP,\r
78 ;;        PUSHJ PDP, CORSTG     ;CORUSZ=SIZE RESERVED. CORLOC=LOCATION\r
79 ; IF COR3=0, THEN FREE CORE\r
80 ; IF COR3=1, THEN RESERVE CORE.\r
81 ; USES COR1, COR2, COR3\r
82 ; CORTAL=COUNT OF FREE CORE. AND IS UPDATED\r
83 CORSTG:   PUSH PDP, TAC                 ;SAVE NO. OF BLOCKS BEING REQ\r
84           MOVE COR2,CORUSZ              ;FIX CORTALLY\r
85           SKIPE COR3\r
86           MOVNS COR2\r
87           ADDM COR2, CORTAL\r
88           MOVE TAC, CORLOC              ;GET POINTER-1\r
89           IDIVI TAC, ^D36               ;TAC=WORD,TAC1=BIT\r
90           ADD TAC, CORLP1       ;FORM BYTE POINTER\r
91           MOVNS TAC1\r
92           ADDI TAC1, ^D36\r
93           DPB TAC1, [POINT 6, TAC, 5]\r
94           MOVE COR2, CORUSZ\r
95 CORLOP:   DPBI COR3, TAC                ;SET OR CLEAR EACH BIT IN USE\r
96           SOJG COR2, CORLOP\r
97           POP PDP, TAC\r
98           POPJ PDP,\r
99 \r
100 CORLP1:   XWD 100, CORTAB\r
101 \r
102           END,\r