; Copyright 1996 Acorn Computers Ltd ; ; Licensed under the Apache License, Version 2.0 (the "License"); ; you may not use this file except in compliance with the License. ; You may obtain a copy of the License at ; ; http://www.apache.org/licenses/LICENSE-2.0 ; ; Unless required by applicable law or agreed to in writing, software ; distributed under the License is distributed on an "AS IS" BASIS, ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ; See the License for the specific language governing permissions and ; limitations under the License. ; ; > s.Memory ; Small veneer between AMBControl's memory block requirements and OS_Heap, ; using system heap. This is changed since Ursula - old code called OS_Module ; and claimed blocks from RMA, which is an anachronism since code is in ; the kernel. ; quantise sizes to reduce heap stress ; AMBblockQ * 64 ;in: r3=size ;out: r2 -> block, r0 corrupted ; AMB_BlockClaim ROUT Push "r1,r3,lr" ADD r3,r3,#AMBblockQ - 1 BIC r3,r3,#AMBblockQ - 1 BL ClaimSysHeapNode Pull "r1,r3,pc" ;in: r2 -> block ;out: r0 corrupted ; AMB_BlockFree ROUT Push "r1,lr" BL FreeSysHeapNode Pull "r1,pc" ;in: r2 -> block, r3 = new size ;out: r2 -> new block, r0 corrupted ; AMB_BlockResize ROUT Push "r1,r3,lr" ADD r3,r3,#AMBblockQ - 1 BIC r3,r3,#AMBblockQ - 1 LDR r1,[r2,#-4] ;pick up OS_Heap's size word (naughty!) SUB r1,r1,#8 ;heap size will be 8 more than quantised size SUBS r3,r3,r1 ;required size change MOVNE r0, #HeapReason_ExtendBlock BLNE DoSysHeapOpWithExtension Pull "r1,r3,pc" END