Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; --------------------------------------------
- ; Title: DCOS - Kernel - Memory Management
- ; Author: Kieron
- ; Date: 25/04/2012
- ; Version:
- ; --------------------------------------------
- :DCOS_RAM_RESERVE ;Reserve Kernal Memory
- JSR REG_CLEAR
- SET A, [LDTXT]
- BOR A, 0x7000
- SET I, A
- SET J, 0
- SET Z, 0x8000
- SET C, POP
- SET X, POP
- SET B, POP
- SET A, POP
- :RESLOOP
- IFE [a], 0x0
- SET [a], X
- ADD A, 1
- IFG B, A
- SET PC, RESLOOP
- SET PC, C
- ;#
- :DCOS_MEMBLOCK_ALLOCATE ;Allocate Memory to a Guest
- JSR REG_CLEAR
- SET A, 0x3801
- SET B, 0x1
- :MAT_LOOKUP ;Loop round the Memory Allocation Table
- IFE [A], 0x1B58
- SET PC, MAT_ALLOCATE
- ADD B, 0x1
- ADD A, 0x3
- SET PC, MAT_LOOKUP
- :MAT_ALLOCATE ;Allocate a new slot
- SET [A], B
- IFE B, 1
- SET PC, MAT_ALLOCATE_FIRST
- SET PC, MAT_ALLOCATE_NEW
- :MAT_ALLOCATE_FIRST ;First Guest
- SET C, 0x3B02
- SET PC, CHECK_MEMORY_AVAILABILITY
- :MAT_ALLOCATE_NEW ;New Guest
- SUB A, 0x1
- SET C, [A]
- ADD C, 0x1
- ADD A, 0x1
- :CHECK_MEMORY_AVAILABILITY ;Check for a 256 Chunk
- SET X, 0x1
- SET Y, 0x0
- SET J, C
- :MEMORY_FREE_LOOP ;Loop through memory based on MAT
- IFG J, 0x7000
- IFG 0x9010, J
- SET PC, MEMORY_RESERVE_OVERRUN
- IFG J, SP
- SET PC, MEMORY_STACK_OVERRUN
- IFG [J], 0x0
- SET PC, MEMORY_RELOCATE
- IFE X, 0x100
- SET PC, MEMORY_USABLE
- ADD J, 1
- ADD X, 1
- SET PC, MEMORY_FREE_LOOP
- :MEMORY_RESERVE_OVERRUN
- SET C, 0x9010
- SET PC, CHECK_MEMORY_AVAILABILITY
- :MEMORY_STACK_OVERRUN
- SET [A], 0x1B58
- JSR REG_CLEAR
- SET J, 1
- JSR CPU_HANG
- SET PC, POP
- :MEMORY_RELOCATE ;Start a new search (Last check not free)
- ADD J, 0x1
- SET C, J
- SET PC, CHECK_MEMORY_AVAILABILITY
- :MEMORY_USABLE ;Add Used address range to MAT
- ADD A, 0x1
- SET [A], C
- ADD A, 0x1
- ADD C, 0x100
- SET [A], C
- SUB A, 0x2
- :MEMORY_WRITE ;Write Guest Number & 7000 Reserve to Allocated Memory
- SET PUSH, A
- JSR REG_CLEAR
- SET A, POP
- SET B, [A]
- ADD A, 0x1
- SET C, [A]
- SET [C], B
- ADD A, 0x1
- SET C, [A]
- SET [C], 0x1B58
- SUB C, 0x1
- SET [C], 0x1B58
- JSR REG_CLEAR
- SET PC, POP
- ;#
- :DCOS_MEMBLOCK_EXTEND
- SET PC, POP
- ;#
- :DCOS_MEMBLOCK_FREE
- JSR REG_CLEAR
- SET J, POP
- SET A, POP
- SET I, 0x37FE
- SET Y, 3
- MUL Y, A
- ADD I, Y
- :FREE_MEM
- SET [I], 0x1B58
- ADD I, 0x1
- SET B, [I]
- SET [I], 0x1B58
- ADD I, 0x1
- SET C, [I]
- SET [I], 0x1B58
- ADD C, 0x1
- :FREE_ALLOCATION
- SET [B], 0x0
- ADD B, 1
- IFG C, B
- SET PC, FREE_ALLOCATION
- SET PC, J
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement