TITLE CORE - CORE ALLOCATION ROUTINE SUBTTL G. BELL 6-29-65 ; PUSHJ PDP, CORE1 ;ITEM = JOB #. TAC = 1K CORE BLOCKS ;REQUESTED ; RET1 ;OLD CORE RETURNED. ; RET2 ;OLD CORE RETURNED. JBTADR, JOBREL ARE ;SET UP ; JBADR (ITEM) = POINTER TO JOB AREA. JOBREL (JBTADR) = HIGHEST LOCAT ; C(RH) JBTADR IS SET OT 0 OR REQUESTED CORE. JOBREL IS SET IF CORE G ; NOT A PURE PROCEDURE ... ;CORTAL: 0 ;COUNT OF FREE CORE ;CORTAB: BLOCK ^D3 ;TABLE OF 72 BITS. 1 BIT FOR ;1K OF CORE. 1 = USED. 0 = FREE ;CORLST: POINT 1, CORTAB, 32 ;POINTER FIRST OUT OF BOUNDS ; ;TEMPORARY USAGE CORUSZ: 0 ;SIZE OF USERS CODE, OLD.-NEW CORLOC: 0 ;POSITION OF 1ST FREE BLOCK ; ;AC ASSIGNMENTS COR1=BUFPNT COR2=BUFWRD COR3=UUO INTERNAL CORE1 EXTERNAL JBTADR,JOBREL,CORLST,CORTAL,CORTAB CORE1: LDB COR1, CORE1P MOVEM COR1, CORLOC JUMPE COR1, CORGET ;IF 0 NO CORE NOEW. HLRZ COR1, JBTADR(ITEM) ;CLEAR OLD CORE AOS COR1 ;HIGHEST ADDRESS AVAIL. FORM ASH COR1, -^D10 MOVEM COR1, CORUSZ CORRET: CLEARM COR3 ;RETURN OLD CORE PUSHJ PDP, CORSTG CORGET: SETZM JBTADR(ITEM) ;CLEAR JOB ADDRESS TO 0 JUMPE TAC, COROK ;IF NO CORE TO GET, RETURN MOVE COR3, CORE2P ;SET UP FOR SETOM CORLOC ;HOLE SEARCH CORG1: PUSHJ PDP, CORHOL JRST CORNG ;UNSUCCESSFUL SEARCH CAMGE COR1, TAC ;HOLE FOUND JRST CORG1 CORGVE: MOVNS COR1 ;BACKUP CORLOC ADDM COR1, CORLOC MOVEM TAC, CORUSZ ;RESERVE HOLD FOR JOB MOVEI COR3, 1 ;SET CORTAB PUSHJ PDP, CORSTG MOVE COR1, CORLOC ;C(RH)=RELOC, C(LH)=PROTECT ASH COR1, ^D10 HRRM COR1, JBTADR(ITEM) ASH TAC, ^D10 SUBI TAC, 1 HRRM TAC, JOBREL (COR1) HRLM TAC,JBTADR(ITEM) COROK: AOS (PDP) CORNG: MOVE TAC, CORTAL POPJ PDP, CORE1P: POINT 8, JBTADRR(ITEM),25 CORE2P: POINT 1, CORTAB ; PUSHJ PDP, CORHOL ;COR1-HOLES FREE, COR2=TEMP ; RETURN1 ;COR3=POINTER. RETURN1=END OF STRING RE ; RETURN2 ;HOLE FOUND. ; CORLOC CONTAINS 0,1.. N, THE CORE BLK PTR. CORLST IS PTR TO ; STOP STRING TEST CORHOL: CLEARM COR1 CORH01: CAMN COR3, CORLST ;TEST DONE POPJ PDP, ILDB COR2, COR3 ;TEST NEXT BLOCK AOS CORLOC SKIPN COR2 AOJA COR1, CORH01 ;COUNT FREE JUMPE COR1, CORH01 AOS (PDP) POPJ PDP, ;; PUSHJ PDP, CORSTG ;CORUSZ=SIZE RESERVED. CORLOC=LOCATION ; IF COR3=0, THEN FREE CORE ; IF COR3=1, THEN RESERVE CORE. ; USES COR1, COR2, COR3 ; CORTAL=COUNT OF FREE CORE. AND IS UPDATED CORSTG: PUSH PDP, TAC ;SAVE NO. OF BLOCKS BEING REQ MOVE COR2,CORUSZ ;FIX CORTALLY SKIPE COR3 MOVNS COR2 ADDM COR2, CORTAL MOVE TAC, CORLOC ;GET POINTER-1 IDIVI TAC, ^D36 ;TAC=WORD,TAC1=BIT ADD TAC, CORLP1 ;FORM BYTE POINTER MOVNS TAC1 ADDI TAC1, ^D36 DPB TAC1, [POINT 6, TAC, 5] MOVE COR2, CORUSZ CORLOP: DPBI COR3, TAC ;SET OR CLEAR EACH BIT IN USE SOJG COR2, CORLOP POP PDP, TAC POPJ PDP, CORLP1: XWD 100, CORTAB END,