Advertisement
Guest User

microsoft_xbox.bms

a guest
Sep 14th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.24 KB | None | 0 0
  1. math temp = 1
  2. math temp * 16
  3. if temp = 0
  4. print " this script was designed for clean Xbox DVD dumps that weight at about 7.28GB max. \n just use quickbms_4gb_files.exe "
  5. cleanexit
  6. endif
  7.  
  8. get dvd_size asize
  9. if dvd_size != 0x1d26a8000
  10. print " this script was designed for Redump releases of Xbox discs. \n sorry about that. "
  11. cleanexit
  12. endif
  13.  
  14. math xbox_file_system_base_number = 0x30600
  15. xmath goto_01 "(xbox_file_system_base_number + 0x20) << 11"
  16. goto goto_01
  17. for i = 0 < 2
  18. getdstring mxm_01 0x14
  19. if mxm_01 != "MICROSOFT*XBOX*MEDIA"
  20. cleanexit
  21. endif
  22. if i = 0
  23. get first_directory_sector long
  24. get first_directory_size long
  25. get timecode time64
  26. getdstring dummy_data 0x7c8
  27. elif i = 1
  28. getdstring command 0x20
  29. get info_related_to_command_01 long
  30. get info_related_to_command_02 long
  31. get info_related_to_command_03 long
  32. get info_related_to_command_04 long
  33. endif
  34. next i
  35. xmath goto_02 "(first_directory_sector + xbox_file_system_base_number) << 11"
  36. math current_directory_info_offset = goto_02
  37. math current_directory_size = first_directory_size
  38. math overall_directory_entry = 0
  39. math directory_number = 0
  40. math current_directory_to_process = 0
  41. math future_directory_to_process = 0
  42. math directory_entry_to_fetch_from = 0
  43. math previous_directory_entry_number = 0
  44. math next_directory_entry_to_parse = 0
  45. math parsing_directory_entry = 0
  46. math next_parsing_directory_entry = 0
  47. math final_directory_entries = 0
  48. set directory_name string ""
  49. for j = 0 <= 256
  50. putarray 101 j 0
  51. putarray 102 j 0
  52. putarray 103 j 0
  53. putarray 104 j 0
  54. putarray 105 j 0
  55. putarray 106 j 0
  56. putarray 107 j 0
  57. putarray 108 j 0
  58. putarray 109 j ""
  59. next j
  60. callfunction parse_mxm 1
  61.  
  62. startfunction parse_mxm
  63. goto current_directory_info_offset
  64. math current_directory_entry = 0
  65. for i2 = 0
  66. putarray 0 0 current_directory_entry
  67. if i2 >= current_directory_size
  68. break
  69. endif
  70. if i2 = 0
  71. math directory_entry_to_fetch_from = overall_directory_entry
  72. /*
  73. for directory_number = current_directory_to_process < 256
  74. putarray 101 directory_number current_directory_info_offset
  75. putarray 102 directory_number current_directory_size
  76. putarray 103 directory_number final_directory_entries
  77. putarray 104 directory_number directory_entry_to_fetch_from
  78. putarray 105 directory_number previous_directory_entry_number
  79. putarray 106 directory_number future_directory_to_process
  80. putarray 107 directory_number next_directory_entry_to_parse
  81. putarray 108 directory_number next_parsing_directory_entry
  82. putarray 109 directory_number directory_name
  83. math directory_number + 1
  84. getarray next_something 101 directory_number
  85. math directory_number - 1
  86. if next_something == 0
  87. break
  88. endif
  89. next directory_number
  90. */
  91. endif
  92. get d1 short
  93. if d1 == 0xffff
  94. break
  95. endif
  96. putarray 1 overall_directory_entry d1
  97. get d2 short
  98. putarray 2 overall_directory_entry d2
  99. get d3 long
  100. putarray 3 overall_directory_entry d3
  101. get d4 long
  102. putarray 4 overall_directory_entry d4
  103. get d5 byte
  104. xmath flag_01 "d5 & 1"
  105. putarray 5 overall_directory_entry flag_01
  106. xmath flag_02 "(d5 >> 1) & 1"
  107. putarray 6 overall_directory_entry flag_02
  108. xmath flag_03 "(d5 >> 2) & 1"
  109. putarray 7 overall_directory_entry flag_03
  110. xmath flag_04 "(d5 >> 3) & 1"
  111. putarray 8 overall_directory_entry flag_04
  112. xmath flag_05 "(d5 >> 4) & 1"
  113. putarray 9 overall_directory_entry flag_05
  114. xmath flag_06 "(d5 >> 5) & 1"
  115. putarray 10 overall_directory_entry flag_06
  116. xmath flag_07 "(d5 >> 6) & 1"
  117. putarray 11 overall_directory_entry flag_07
  118. xmath flag_08 "(d5 >> 7) & 1"
  119. putarray 12 overall_directory_entry flag_08
  120. get d6 byte
  121. getdstring dn d6
  122. putarray 13 overall_directory_entry dn
  123. math i2 + 14
  124. math i2 + d6
  125. for jk = 0
  126. get padding byte
  127. if padding != 0xff
  128. goto -1 0 SEEK_CUR
  129. break
  130. else
  131. math i2 + 1
  132. endif
  133. next jk
  134. math current_directory_entry + 1
  135. math overall_directory_entry + 1
  136. next
  137. math final_directory_entries = current_directory_entry
  138. putarray 103 directory_number final_directory_entries
  139. for i3 = parsing_directory_entry < final_directory_entries
  140. xmath last_entry "final_directory_entries - 1"
  141. /*
  142. if i3 = 0
  143. for directory_number = current_directory_to_process < 256
  144. getarray current_directory_info_offset 101 directory_number
  145. getarray current_directory_size 102 directory_number
  146. getarray final_directory_entries 103 directory_number
  147. getarray directory_entry_to_fetch_from 104 directory_number
  148. getarray previous_directory_entry_number 105 directory_number
  149. getarray future_directory_to_process 106 directory_number
  150. getarray next_directory_entry_to_parse 107 directory_number
  151. getarray next_parsing_directory_entry 108 directory_number
  152. getarray directory_name 109 directory_number
  153. math directory_number + 1
  154. getarray next_something 101 directory_number
  155. math directory_number - 1
  156. if next_something == 0
  157. break
  158. endif
  159. next directory_number
  160. endif
  161. */
  162. getarray previous_entry_offset 1 directory_entry_to_fetch_from
  163. getarray next_entry_offset 2 directory_entry_to_fetch_from
  164. getarray entry_offset 3 directory_entry_to_fetch_from
  165. getarray entry_size 4 directory_entry_to_fetch_from
  166. getarray is_read_only 5 directory_entry_to_fetch_from
  167. getarray is_hidden 6 directory_entry_to_fetch_from
  168. getarray is_system_file 7 directory_entry_to_fetch_from
  169. getarray unknown_flag_05 8 directory_entry_to_fetch_from
  170. getarray is_directory 9 directory_entry_to_fetch_from
  171. getarray is_archive 10 directory_entry_to_fetch_from
  172. getarray unknown_flag_07 11 directory_entry_to_fetch_from
  173. getarray is_its_own_thing 12 directory_entry_to_fetch_from
  174. getarray entry_name 13 directory_entry_to_fetch_from
  175. math directory_entry_to_fetch_from + 1
  176. if is_directory = 1
  177. math directory_number + 1
  178. math previous_directory_entry_number = directory_entry_to_fetch_from
  179. math current_directory_size = entry_size
  180. xmath current_directory_info_offset "(entry_offset + xbox_file_system_base_number) << 11"
  181. putarray 101 directory_number current_directory_info_offset
  182. putarray 102 directory_number current_directory_size
  183. putarray 105 directory_number previous_directory_entry_number
  184. xmath future_directory_to_process "current_directory_to_process + 1"
  185. putarray 106 directory_number future_directory_to_process
  186. math next_directory_entry_to_parse = directory_entry_to_fetch_from
  187. putarray 107 directory_number next_directory_entry_to_parse
  188. math next_parsing_directory_entry = i3
  189. putarray 108 directory_number next_parsing_directory_entry
  190. math parsing_directory_entry = 0
  191. putarray 109 directory_number entry_name
  192. math current_directory_to_process + 1
  193. callfunction parse_mxm 1
  194. else
  195. xmath file_offset "(entry_offset + xbox_file_system_base_number) << 11"
  196. math file_size = entry_size
  197. set file_name string ""
  198. math name_number = 0
  199. for
  200. getarray previous_entry_name 109 name_number
  201. string file_name + previous_entry_name
  202. if previous_entry_name == ""
  203. if name_number != 0
  204. string file_name + entry_name
  205. break
  206. endif
  207. else
  208. if name_number != 0
  209. string file_name + "\"
  210. endif
  211. endif
  212. math name_number + 1
  213. next
  214. log file_name file_offset file_size
  215. endif
  216. if i3 == last_entry || final_directory_entries = 0 || i3 == final_directory_entries
  217. if directory_number != 0
  218. getarray parsing_directory_entry 108 directory_number
  219. getarray directory_entry_to_fetch_from 107 directory_number
  220. getarray final_directory_entries 103 directory_number
  221. math directory_number - 1
  222. getarray final_directory_entries 103 directory_number
  223. math current_directory_to_process - 1
  224. if final_directory_entries != 0
  225. math i3 = parsing_directory_entry
  226. endif
  227. math directory_number + 1
  228. putarray 101 directory_number 0
  229. putarray 102 directory_number 0
  230. putarray 103 directory_number 0
  231. putarray 104 directory_number 0
  232. putarray 105 directory_number 0
  233. putarray 106 directory_number 0
  234. putarray 107 directory_number 0
  235. putarray 108 directory_number 0
  236. putarray 109 directory_number ""
  237. math directory_number - 1
  238. endif
  239. endif
  240. next i3
  241. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement