; ; MEMORY MANAGEMENT SUBROUTINES FOR DATA BASE MANAGEMENT ; ; ; CREREG ; ROUTINE TO DYNAMICALLY CREATE A UNIQUE REGION ; ON ENTRY: ; R3 HAS REGION DEFINITION BLOCK ADDRESS ; RDB SIZE ALREADY FILLED IN ; ; ON EXIT: ; 'C' CLEAR = SUCCESS, RDB FILLED IN ; 'C' SET = FAILURE, R4 HAS DIRECTIVE ERROR CODE ; CREREG: 1$: BIS #,R.GSTS(R3) ;SET FLAGS BIC #RS.CRR,R.GSTS(R3) ;MAKE SURE WE SAY NO REGION CREATED YET CRRG$S R3 ;ATTEMPT TO CREATE AND ATTACH TO REGION BCS 5$ ;ON ERROR, BRANCH BIT #RS.CRR,R.GSTS(R3) ;DID WE ACTTUALLY CREATE REGION? BNE 2$ ;IF SO, SUCCESS: BRANCH DTRG$S R3 ;IF NOT, WE GOT SOMEBODY ELSE'S REGION ;SO DETACH IT INC R.GNAM(R3) ;INCREMENT RAD50 NAME BR 1$ ;AND TRY AGAIN 2$: CLC ;INDICATE SUCCESS RTS PC ;AND RETURN 5$: MOV @#$DSW,R4 ;FAILED DIRECTIVE CODE -> R4 RTS PC ;AND RETURN ; ; INIREG ; ROUTINE TO GET MAPPING CONTEXT AND CREATE REGION ; ON ENTRY: ; R2 HAS PC REFERENCE POINT (SO WE KNOW WHERE CODE IS LOADED) ; ; ON EXIT: ; RDBFLG SET TO 1 ; MCX FILLED WITH MAPPING CONTEXT FOR BASIC ; RDB ADDRESS IN R3 ; 'C' CLEAR ON SUCCESS ; 'C' SET ON FAILURE, R4 HAS DSW ERROR CODE ; R2 UNCHANGED ; INIREG: MOV R2,R3 ;CALCULATE ADDRESS SUB #PCREF1-MCX,R3 ;ADDRESS OF MCX AREA -> R3 GMCX$S R3 ;GET CURRENT CONTEXT MOV R2,R3 ;COPY REFERENCE POINT SUB #PCREF1-RDB,R3 ;GET ADDRESS OF RDB -> R3 JSR PC,CREREG ;CREATE UNIQUE REGION BCS 1$ ;ON ERROR, BRANCH MOV #1,RDBFLG ;INDICATE WE NOW HAVE A REGION 1$: RTS PC ;AND RETURN ; ; MAPREG ; ROUTINE TO MAP TO A REGION CREATED PREVIOUSLY ; ON ENTRY: ; RDB HAS CREATED REGION ; R2 HAS PC REFERENCE PT. ; WDB HAS APR, WINDOW SIZE, FLAGS SET ; ; ON EXIT: ; R3 HAS ADDRESS OF WDB ; R5 HAS ADDRESS OF REGION (160000) ; 'C' CLEAR IF SUCCESS ; 'C' SET IF FAILURE: R4 HAS DSW ; MAPREG: MOV R2,R3 ;REFERENCE PT. -> R3 SUB #PCREF1-RDB,R3 ;RDB ADDRESS -> R3 MOV R.GID(R3),R4 ;REGION ID -> R4 SUB #RDB-WDB,R3 ;NOW POINT TO WINDOW DEFINITION BLOCK MOV R4,W.NRID(R3) ;STORE REGION ID MOV #160000,R5 ;VIRTUAL ADDRESS OF REGION -> R5 CRAW$S R3 ;CREATE THE ADDRESS WINDOW BCC 1$ ;IF OK, BRANCH MOV @#$DSW,R4 ;DIRECTIVE STATUS -> R4 1$: RTS PC