////////////////////////////////////////////////////////////////////// ; Функция #3F. Изменение блока памяти. ; ; вход: A - идентификатор блока памяти ; B - новый размер блока ; выход: A - код ошибки, если CF=1 ////////////////////////////////////////////////////////////////////// SETMEM: LD E,A LD D,#00 LD HL,MEMTAB ADD HL,DE LD A,(TASK) CP (HL) LD A,DSS_Error.sys.INVALID_MEMORY_HND SCF RET NZ LD D,B PUSH DE LD A,E CALL .SIZEBLK POP DE LD A,DSS_Error.sys.INVALID_MEMORY_HND RET C LD A,B CP D RET Z JR C,.INCMEM ; DECMEM LD B,D LD A,E LD C,BIOS.DivMemBlocks RST ToBIOS LD A,B LD C,BIOS.FreeMem RST ToBIOS XOR A RET ; Добавить страниц памяти к блоку .INCMEM: LD A,D SUB B LD B,A LD C,E PUSH BC LD C,BIOS.GetMem RST ToBIOS POP BC LD B,A LD A,DSS_Error.sys.NOT_ENOUGH_MEMORY RET C LD A,C LD C,BIOS.MergeMemBlocks RST ToBIOS XOR A RET ; .SIZEBLK: LD B,#FF LD C,A .loop: INC B PUSH BC LD A,C LD C,BIOS.GetMemPage RST ToBIOS POP BC JR NC,.loop OR A SCF RET Z XOR A RET ;