Advertisement
Guest User

Untitled

a guest
Sep 30th, 2014
454
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; --------------------------------------------
  2. ; Title:   DCOS - Kernel - Memory Management
  3. ; Author:  Kieron
  4. ; Date:    25/04/2012
  5. ; Version:
  6. ; --------------------------------------------
  7.  
  8. :DCOS_RAM_RESERVE ;Reserve Kernal Memory
  9.                  JSR REG_CLEAR
  10.  
  11.                  SET A, [LDTXT]
  12.                  BOR A, 0x7000
  13.                  SET I, A
  14.                  SET J, 0
  15.                  SET Z, 0x8000
  16.  
  17.                  SET C, POP
  18.                  SET X, POP
  19.                  SET B, POP
  20.                  SET A, POP
  21.  
  22. :RESLOOP
  23.                 IFE [a], 0x0
  24.                 SET [a], X
  25.                 ADD A, 1
  26.                 IFG B, A
  27.                 SET PC, RESLOOP
  28. SET PC, C
  29.  
  30. ;#
  31.  
  32. :DCOS_MEMBLOCK_ALLOCATE ;Allocate Memory to a Guest
  33.                        JSR REG_CLEAR
  34.                        SET A, 0x3801
  35.                        SET B, 0x1
  36.                        :MAT_LOOKUP ;Loop round the Memory Allocation Table
  37.                                   IFE [A], 0x1B58
  38.                         SET PC, MAT_ALLOCATE
  39.                                   ADD B, 0x1
  40.                                   ADD A, 0x3
  41.                        SET PC, MAT_LOOKUP
  42.  
  43.                        :MAT_ALLOCATE ;Allocate a new slot
  44.                                     SET [A], B
  45.  
  46.                                     IFE B, 1
  47.                         SET PC, MAT_ALLOCATE_FIRST
  48.                                     SET PC, MAT_ALLOCATE_NEW
  49.  
  50.                                     :MAT_ALLOCATE_FIRST ;First Guest
  51.                                     SET C, 0x3B02
  52.                                     SET PC, CHECK_MEMORY_AVAILABILITY
  53.  
  54.                                     :MAT_ALLOCATE_NEW ;New Guest
  55.                                     SUB A, 0x1
  56.                                     SET C, [A]
  57.                                     ADD C, 0x1
  58.                                     ADD A, 0x1
  59.  
  60.                                     :CHECK_MEMORY_AVAILABILITY ;Check for a 256 Chunk
  61.                                     SET X, 0x1
  62.                                     SET Y, 0x0
  63.                                     SET J, C
  64.  
  65.                                     :MEMORY_FREE_LOOP ;Loop through memory based on MAT
  66.                                                       IFG J, 0x7000
  67.                                                           IFG 0x9010, J
  68.                                                               SET PC, MEMORY_RESERVE_OVERRUN
  69.                                                       IFG J, SP
  70.                                                           SET PC, MEMORY_STACK_OVERRUN
  71.                                                       IFG [J], 0x0
  72.                                 SET PC, MEMORY_RELOCATE
  73.                                                       IFE X, 0x100
  74.                                 SET PC, MEMORY_USABLE
  75.                                                       ADD J, 1
  76.                                                       ADD X, 1
  77.                                     SET PC, MEMORY_FREE_LOOP
  78.  
  79.  
  80.                                     :MEMORY_RESERVE_OVERRUN
  81.                                                            SET C, 0x9010
  82.                                     SET PC, CHECK_MEMORY_AVAILABILITY
  83.  
  84.  
  85.                                     :MEMORY_STACK_OVERRUN
  86.                                                          SET [A], 0x1B58
  87.                                                          JSR REG_CLEAR
  88.                                                          SET J, 1
  89.                                                          JSR CPU_HANG
  90.                                     SET PC, POP
  91.  
  92.  
  93.                                     :MEMORY_RELOCATE ;Start a new search (Last check not free)
  94.                                                     ADD J, 0x1
  95.                                                     SET C, J
  96.                                     SET PC, CHECK_MEMORY_AVAILABILITY
  97.  
  98.  
  99.                                     :MEMORY_USABLE ;Add Used address range to MAT
  100.                                                   ADD A, 0x1
  101.                                                   SET [A], C
  102.                                                   ADD A, 0x1
  103.                                                   ADD C, 0x100
  104.                                                   SET [A], C
  105.                                                   SUB A, 0x2
  106.                        :MEMORY_WRITE ;Write Guest Number & 7000 Reserve to Allocated Memory
  107.                        SET PUSH, A
  108.                        JSR REG_CLEAR
  109.                        SET A, POP
  110.                        SET B, [A]
  111.                        ADD A, 0x1
  112.                        SET C, [A]
  113.                        SET [C], B
  114.                        ADD A, 0x1
  115.                        SET C, [A]
  116.                        SET [C], 0x1B58
  117.                        SUB C, 0x1
  118.                        SET [C], 0x1B58
  119.                        JSR REG_CLEAR
  120. SET PC, POP
  121.  
  122. ;#
  123.  
  124. :DCOS_MEMBLOCK_EXTEND
  125.  
  126. SET PC, POP
  127.  
  128. ;#
  129.  
  130. :DCOS_MEMBLOCK_FREE
  131.                    JSR REG_CLEAR
  132.                    SET J, POP
  133.                    SET A, POP
  134.                    SET I, 0x37FE
  135.                    SET Y, 3
  136.                    MUL Y, A
  137.                    ADD I, Y
  138.                    :FREE_MEM
  139.                             SET [I], 0x1B58
  140.                             ADD I, 0x1
  141.                             SET B, [I]
  142.                             SET [I], 0x1B58
  143.                             ADD I, 0x1
  144.                             SET C, [I]
  145.                             SET [I], 0x1B58
  146.                             ADD C, 0x1
  147.                             :FREE_ALLOCATION
  148.                             SET [B], 0x0
  149.                             ADD B, 1
  150.                             IFG C, B
  151.                     SET PC, FREE_ALLOCATION
  152. SET PC, J
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement