Estex-DSS/DSS/API/SetMem.asm

72 lines
1.0 KiB
NASM

//////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #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
;