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
5 ; RET1 ;OLD CORE RETURNED.
\r
6 ; RET2 ;OLD CORE RETURNED. JBTADR, JOBREL ARE
\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
17 CORUSZ: 0 ;SIZE OF USERS CODE, OLD.-NEW
\r
18 CORLOC: 0 ;POSITION OF 1ST FREE BLOCK
\r
25 EXTERNAL JBTADR,JOBREL,CORLST,CORTAL,CORTAB
\r
27 CORE1: LDB COR1, CORE1P
\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
34 CORRET: CLEARM COR3 ;RETURN OLD CORE
\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
44 CORGVE: MOVNS COR1 ;BACKUP CORLOC
\r
46 MOVEM TAC, CORUSZ ;RESERVE HOLD FOR JOB
\r
47 MOVEI COR3, 1 ;SET CORTAB
\r
49 MOVE COR1, CORLOC ;C(RH)=RELOC, C(LH)=PROTECT
\r
51 HRRM COR1, JBTADR(ITEM)
\r
54 HRRM TAC, JOBREL (COR1)
\r
55 HRLM TAC,JBTADR(ITEM)
\r
57 CORNG: MOVE TAC, CORTAL
\r
60 CORE1P: POINT 8, JBTADRR(ITEM),25
\r
61 CORE2P: POINT 1, CORTAB
\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
69 CORH01: CAMN COR3, CORLST ;TEST DONE
\r
71 ILDB COR2, COR3 ;TEST NEXT BLOCK
\r
74 AOJA COR1, CORH01 ;COUNT FREE
\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
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
93 DPB TAC1, [POINT 6, TAC, 5]
\r
95 CORLOP: DPBI COR3, TAC ;SET OR CLEAR EACH BIT IN USE
\r
100 CORLP1: XWD 100, CORTAB
\r