Advertisement
Madmouse

Draft for a simple markup format to document / design logic

Dec 22nd, 2015
359
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.80 KB | None | 0 0
  1. //////////////////////////////////
  2. // KEY //
  3. //////////////////////////////////
  4. // TEXT: tree label //
  5. // // comment //
  6. // | branch //
  7. // + normal node //
  8. // * virtual node //
  9. // ? logical node //
  10. // $ blackbox node //
  11. // *--| virtual branch //
  12. //////////////////////////////////
  13.  
  14.  
  15. /////////////////
  16. // fat12 tree //
  17. /////////////////
  18. partition:
  19. |
  20. |--+ BPB
  21. | | byte jmp_code[3]
  22. | | byte oem[8]
  23. | | word bytes_per_sector
  24. | | byte sectors per cluster
  25. | | word reserved_sectors
  26. | | byte number_of_fats
  27. | | word directory_entries
  28. | | word logical_sectors
  29. | | byte media_type
  30. | | word sectors_per_fat
  31. | | word sectors_per_track
  32. | | word heads
  33. | | dword hidden_sectors
  34. | | dword large_sectors
  35. |
  36. |--+ EBR
  37. | | byte drive
  38. | | byte reserved_flags
  39. | | byte signiture
  40. | | dword serial
  41. | | byte label[11]
  42. | | byte identifier[8]
  43. | | byte boot_code[448]
  44. | | word bootable_partition_sign
  45. |
  46. |--? DATA
  47. |--? FATS
  48. | |--+ FAT
  49. | |
  50. | | FAT_ENTRY
  51. | ?
  52. |
  53. |
  54. |--? DIRECTORY
  55. | |
  56. | |--+ DIRECTORY_ENTRY
  57. | | | byte name[11]
  58. | | | byte attributes
  59. | | | word reserved
  60. | | | word creation_time
  61. | | | word creation_date
  62. | | | word access_date
  63. | | | word write_time
  64. | | | word write_date
  65. | | | word cluster_address_lower
  66. | | | dword size
  67. | |
  68. | ?
  69. |
  70. | FILE_DATA
  71. |
  72. ?
  73.  
  74.  
  75. ////////////////
  76. // Boot tree //
  77. ////////////////
  78.  
  79. _start(magic, mbi):
  80. |--$ // set up stack + multiboot stuff
  81. |
  82. |--+ __init(magic, mbi)
  83. | |
  84. | |--$ mem_initialize(magic, mbi) // setup physical memory management
  85. | |
  86. | | i = __init_array_end - __init_array_start;
  87. | |--? (i--)
  88. | |--$ (*__init_array_start[i])(magic, mbi); // setup pre main() kernel plugins
  89. | |
  90. | ?
  91. |
  92. |--+ main(magic, mbi)
  93. | |--$ // verify multiboot structure
  94. | |
  95. | |--? (i = 0, mod = mbi->mods_addr;i < mbi->mods_count;i++, mod++)
  96. | |
  97. | |--? (fs_table[i]->is_type(mod->mod_start))
  98. | | |
  99. | | |--$ fs_table[i]->load_module(mod->cmdline, mod->mod_start) // load ramdisk filesystems loaded as multiboot modules
  100. | |
  101. | |--? (exec_table[i]->is_type(mod->mod_start))
  102. | | |
  103. | | |--$ exec_table[i]->load_module(mod->cmdline, mod->mod_start) // load executable multiboot modules
  104. | |
  105. | ?
  106. |
  107. |--+ __fini
  108. | |
  109. | | i = __fini_array_end - __fini_array_start
  110. | |--? (i--)
  111. | |--$ (*__fini_array_start[i])(magic, mbi); // setup post main() kernel plugins
  112. | |
  113. | ?
  114. |
  115. |--+ hang
  116. |--$ hang()
  117.  
  118.  
  119. /////////////////////////
  120. // memory manager map //
  121. /////////////////////////
  122.  
  123. mem_initialize(magic, mbi):
  124. |--? (magic != MULTIBOOT_BOOTLOADER_MAGIC)
  125. | |--*
  126. |
  127. |--? (CHECK_FLAG (mbi->flags, 6))
  128. | |
  129. | |--? (mmap = mbi->mmap_addr;mmap < mbi->mmap_addr + mbi->mmap_length;mmap = mmap + mmap->size + sizeof(mmap->size))
  130. | |
  131. | |--? (mmap->type == MULTIBOOT_MEMORY_AVAILABLE && mmap->addr >= &KERNEL_END)
  132. | | | MEM_POOL_SIZE = mmap->len - (mmap->addr - &KERNEL_END);
  133. | | |
  134. | | |--*
  135. | |
  136. | ?
  137. |
  138. *--|
  139. |--$ // setup memory map as a doubly linked list
  140.  
  141.  
  142. combine_free_blocks:
  143. |---? (p = MEM_POOL;p->next != MEM_POOL_END;p = p->next)
  144. |
  145. |---? (p->free)
  146. | |
  147. | |---? (c = p;;c = c->next)
  148. | |
  149. | |---? (! c->free)
  150. | | |
  151. | | |--? (c->prev != p)
  152. | | | |
  153. | | | | p->next = c
  154. | | | | c->prev = p
  155. | | |
  156. | | |--*
  157. | |
  158. | |--? (c->next == MEM_POOL_END)
  159. | | |
  160. | | |--*
  161. | |
  162. | ?
  163. *--|
  164. ?
  165.  
  166.  
  167. mget_free_block(p, size):
  168. |--$ combine_free_blocks
  169. |
  170. |--? (p->ptr != MEM_POOL_END)
  171. | |--? (p->free && p->next - p->ptr) >= size)
  172. | | |--*
  173. | |
  174. | | p = p->next;
  175. | |
  176. | ?
  177. |
  178. *--| p
  179.  
  180. split_block(selected, size):
  181. | end_marker = selected->next
  182. | split->free = true
  183. | split->prev = selected
  184. | split->ptr = split + sizeof(mem_entry_t)
  185. | split->next = end_marker
  186. | selected->next = split
  187. | end_marker->prev = split
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement