home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 1 / ARM_CLUB_CD.iso / contents / apps / program / k / memutil / MemSource (.txt) < prev    next >
Encoding:
RISC OS BBC BASIC V Source  |  1994-10-17  |  7.2 KB  |  362 lines

  1.  >MemSource
  2.  Andrew Bower 1994
  3. save$="MemUtil"
  4. *FX1,3
  5. &*RMEnsure UtilityModule 3.00 FX1,2
  6.  "OS_Byte",1 
  7.  ,osver%
  8.  code 20480
  9. L%=code+20460
  10.  pass=%1100 
  11.  %1110 
  12. O%=code
  13.  pass
  14.  "OS_File",10,save$,&FFC,,code,O%
  15. name(s$)          :
  16.  used for the table entries
  17. n=(32-
  18. (s$))
  19. m=(32-
  20. (s$))
  21.  n+=1
  22. [OPT pass
  23. (s$)+n+2
  24. )EQUS s$+
  25. 0   :
  26.  to tabulate it
  27. [OPT pass
  28. .start
  29. STR R14,retaddr
  30. !BLDRB R0,[R1]:CMP R0,#0:ADREQ R1,default-2048:ADDEQ R1,R1,#2048
  31. BL readargs
  32. #-LDR R0,[R11,#1<<2]:TEQ R0,#0: BLNE syntax
  33. $:LDR R0,[R11,#3<<2]:TEQ R0,#0: MOVNE R9,#0: BLNE change
  34. %:LDR R0,[R11,#4<<2]:TEQ R0,#0: MOVNE R9,#1: BLNE change
  35. &:LDR R0,[R11,#5<<2]:TEQ R0,#0: MOVNE R9,#2: BLNE change
  36. ':LDR R0,[R11,#6<<2]:TEQ R0,#0: MOVNE R9,#3: BLNE change
  37. (:LDR R0,[R11,#7<<2]:TEQ R0,#0: MOVNE R9,#4: BLNE change
  38. ):LDR R0,[R11,#8<<2]:TEQ R0,#0: MOVNE R9,#5: BLNE change
  39. */LDR R0,[R11,#0<<2]:TEQ R0,#0: BLNE showinfo
  40. +2LDR R0,[R11,#2<<2]:TEQ R0,#0: BLNE interactive
  41. LDR PC,retaddr
  42. EQUS "
  43. A.Bower"
  44. /    ALIGN
  45. .readargs
  46. ADR R0,keyword
  47. ADD R11,R12,#512
  48. MOV R2,R11
  49. MOV R3,#256
  50. SWI "XOS_ReadArgs"
  51. BVS error
  52. MOV PC,R14
  53. .keyword
  54. :)EQUS"display/s,help/s,interactive/s,"
  55. ;-EQUS"system,rma,screen,sprite,font,ramfs"
  56. EQUB 0
  57. .syntax
  58. ADR R0,syntax_string
  59. MOV R1,#0
  60. ADR R2,progname
  61. SWI "XOS_PrettyPrint"
  62. BVS error
  63. MOV PC,R14
  64. .progname
  65. EQUS "MemUtil"+
  66. .syntax_string
  67. G*EQUS "==> Help on utility "+
  68. .command_help
  69. ILEQUS "Reads"+
  70. 16+"alters"+
  71. 2+"machine's memory allocations."+
  72. .syntax_mess
  73. EQUS 
  74. 30+"-help] [-display] [-interactive] [[-system] [+|-|=]<n>] [[-RMA] [+|-|=]<n>] [[-screen] [+|-|=]<n>] [[-"+
  75. 31+"] [+|-|=]<n>] [[-font] [+|-|=]<n>] [[-RAMFS] [+|-|=]<n>]"+
  76. .interactive
  77. SWI "OS_WriteS"
  78. NREQUS "Type number of area to change or press ESCAPE to quit."+
  79. 10+">> "+
  80. R R0,R12,#1<<31
  81. MOV R1,#128
  82. MOV R2,#
  83. MOV R3,#
  84. SWI "XOS_ReadLine"
  85. BVS error
  86. MOVCS PC,R14
  87. CMP R1,#0
  88. Q PC,R14
  89. MOV R0,#0
  90. STRB R0,[R12,R1]
  91. Z+; base 10 implied because R0 is invalid
  92. MOV R1,R12
  93. SWI "XOS_ReadUnsigned"
  94. BVS error
  95. MOV R9,R2
  96. SWI "XOS_WriteS"
  97. `cEQUS "
  98. : to alter the size,   
  99.  to ensure free space (in KB)"+
  100. 10+">> "+
  101. R R0,R12,#1<<31
  102. MOV R1,#128
  103. MOV R2,#
  104. MOV R3,#
  105. SWI "XOS_ReadLine"
  106. BVS error
  107. MOVCS PC,R14
  108. CMP R1,#0
  109. Q PC,R14
  110. MOV R0,#0
  111. STRB R0,[R12,R1]
  112. MOV R0,R12
  113. .change
  114. MOV R10,R0
  115. .change_nextchar
  116. LDRB R8,[R10],#1
  117. TEQ R8,#32
  118. BEQ change_nextchar
  119. SUB R10,R10,#1
  120. MOV R7,#0
  121. MOV R1,R10
  122. MOV R0,#10 
  123.  (1<<31)
  124. SWI "XOS_ReadUnsigned"
  125. BVC change_ok
  126. TEQ R8,#
  127. TEQNE R8,#
  128. TEQNE R8,#
  129. Q R7,R8
  130. ADD R1,R10,#1
  131. MOV R0,#10 
  132.  (1<<31)
  133. SWI "XOS_ReadUnsigned"
  134. BVS error
  135. .change_ok
  136. MOV R6,R2,LSL #10
  137. TEQ R7,#0
  138. Q R1,#&80000000
  139. Q R0,R9
  140. !SWIEQ "XOS_ChangeDynamicArea"
  141. TEQP PC,#0
  142. Q R7,#
  143. TEQ R7,#
  144. Q R0,R9
  145. SWIEQ "XOS_ReadDynamicArea"
  146. BVS error
  147. SUBEQ R6,R6,R1
  148. Q R7,#
  149. TEQ R7,#
  150. RSBEQ R6,R6,#0
  151. MOV R0,R9
  152. MOV R1,R6
  153. SWI "XOS_ChangeDynamicArea"
  154. MOV PC,R14
  155. .showinfo
  156. STMFD R13!,{R14}
  157. ADR R0,progname
  158. SWI "XOS_Write0"
  159. SWI "XOS_NewLine"
  160. SWI "XOS_NewLine"
  161. ADR R0,info_headings
  162. MOV R1,#0
  163. MOV R2,#0
  164. SWI "XOS_PrettyPrint"
  165. BVS error
  166. *MOV R6,#0             ; number of area
  167. .infoloop
  168. BL info_display
  169. ADD R6,R6,#1
  170. CMP R6,#5
  171. BLS infoloop
  172. SWI "XOS_NewLine"
  173. SWI "XOS_GetEnv"
  174. BVS error
  175. SUB R0,R1,#&8000
  176. MOV R1,R12
  177. MOV R2,#512
  178. "SWI "XOS_ConvertFixedFileSize"
  179. BVS error
  180. SWI "XOS_Write0"
  181. SWI "XOS_WriteS"
  182. 6EQUS " available for next application."+
  183.     ALIGN
  184. SWI "XOS_ReadMemMapInfo"
  185. STR R0,[R12,#0]
  186. STR R1,[R12,#4]
  187. BVS error
  188. MUL R2,R1,R0
  189. MOV R0,R2
  190. ADD R1,R12,#8
  191. MOV R2,#512-8
  192. "SWI "XOS_ConvertFixedFileSize"
  193. BVS error
  194. SWI "XOS_Write0"
  195. SWI "XOS_WriteS"
  196. 0EQUS " total memory in this machine, in "+
  197.     ALIGN
  198. LDR R0,[R12,#4]
  199. SWI "XOS_ConvertCardinal4"
  200. BVS error
  201. SWI "XOS_Write0"
  202. SWI "XOS_WriteS"
  203. EQUS " pages of "+
  204. LDR R0,[R12,#0]
  205. SWI "XOS_ConvertFileSize"
  206. BVS error
  207. SWI "XOS_Write0"
  208. SWI "XOS_WriteS"
  209. EQUS "."+
  210.     ALIGN
  211. LDMFD R13!,{PC}
  212. .info_display
  213. 3MOV R0,R6             ; takes area number in R6
  214. R R0,R0,#1<<7
  215. SWI "XOS_ReadDynamicArea"
  216. BVS error
  217. ADR R5,table-256
  218. ADD R5,R5,#256
  219. ADD R5,R5,R6,LSL #4
  220. STR R1,[R5,#0]
  221. STR R2,[R5,#4]
  222. MOV R0,R6
  223. MOV R1,R12
  224. MOV R2,#512
  225. SWI "XOS_ConvertCardinal1"
  226. BVS error
  227. MOV R3,#9
  228. STRB R3,[R1],#1
  229. MOV R3,#27
  230. STRB R3,[R1],#1
  231. ADD R0,R6,#1
  232. STRB R0,[R1],#1
  233. MOV R0,#0
  234. STRB R0,[R1],#1
  235. MOV R0,R12
  236. ADR R1,info_names-256
  237. ADD R1,R1,#256
  238. LDR R2,[R5,#8]
  239. SWI "XOS_PrettyPrint"
  240. MOV R1,R12
  241. MOV R2,#512-4
  242. LDR R0,[R5,#0]
  243. "SWI "XOS_ConvertFixedFileSize"
  244. BVS error
  245. SUB R1,R1,#6
  246. LDRB R3,[R1]
  247. STRB R3,[R1,#-1]
  248. MOV R3,#32
  249. STRB R3,[R1],#1
  250. STRB R3,[R1],#1
  251. STRB R3,[R1],#1
  252. STRB R3,[R1],#1
  253. LDR R0,[R5,#4]
  254. "SWI "XOS_ConvertFixedFileSize"
  255. BVS error
  256. SUB R1,R1,#6
  257. LDRB R3,[R1]
  258. STRB R3,[R1,#-1]
  259. MOV R3,#0
  260. STRB R3,[R1],#1
  261. LDR R0,[R5,#12]
  262. CMP R0,#0
  263. BEQ info_continue
  264. STMFD R13!,{R14}
  265. ADR R14,info_freecont
  266. ADR R8,start+512
  267. SUB R8,R8,#512
  268. ADD PC,R8,R0
  269. .info_freecont
  270. SUB R1,R1,#1
  271. MOV R3,#32
  272. STRB R3,[R1],#1
  273. STRB R3,[R1],#1
  274. "SWI "XOS_ConvertFixedFileSize"
  275. BVS error
  276. LDMFD R13!,{R14}
  277. .info_continue
  278. MOV R0,R12
  279. SWI "XOS_Write0"
  280. SWI "XOS_NewLine"
  281. BVS error
  282. MOV PC,R14
  283. .table
  284. DCD 0 :DCD 0 :DCD 0 :DCD 0
  285. %DCD 0 :DCD 0 :DCD 0 :DCD rma_free
  286. (DCD 0 :DCD 0 :DCD 0 :DCD screen_free
  287. (DCD 0 :DCD 0 :DCD 0 :DCD sprite_free
  288. &DCD 0 :DCD 0 :DCD 0 :DCD font_free
  289. 3DCD 0 :DCD 0 :DCD 0 :DCD -ramfs_free*(osver%>2)
  290. .info_names
  291. name("System heap")
  292. name("Relocatable Module Area")
  293. name("Screen area")
  294. name("Sprite area")
  295. name("Font cache")
  296. name("RAM filing system")
  297. #    DCD 0
  298. .error
  299. %    ALIGN
  300. OPT pass
  301. LDR PC,retaddr
  302. .retaddr
  303. EQUD 0
  304. .info_headings
  305. +hEQUS "Dynamic area"+
  306. 9+"size"+
  307. 31+"max"+
  308. 31+"free"+
  309. .debug
  310. EQUS "Debug"+
  311. .    ALIGN
  312. .value
  313. EQUD 0
  314. .font_free
  315. STMFD R13!,{R2-R3}
  316. SWI "XFont_CacheAddr"
  317. BVS error
  318. SUB R0,R2,R3
  319. LDMFD R13!,{R2-R3}
  320. MOV PC,R14
  321. .rma_free
  322. STMFD R13!,{R2-R3}
  323. MOV R0,#5
  324. SWI "XOS_Module"
  325. BVS error
  326. MOV R0,R2
  327. LDMFD R13!,{R2-R3}
  328. MOV PC,R14
  329. .sprite_free
  330. STMFD R13!,{R2-R5}
  331. MOV R0,#8
  332. SWI "XOS_SpriteOp"
  333. MOVVS R2,R5
  334. SUB R0,R2,R5
  335. LDMFD R13!,{R2-R5}
  336. MOV PC,R14
  337. .screen_free
  338. STMFD R13!,{R1-R2}
  339. MOV R0,#1
  340. MVN R1,#0
  341. BIC R1,R1,#1<<31
  342. SWI "XOS_ClaimScreenMemory"
  343. BVS error
  344. MOVCC R0,#0
  345. P!SWICC "XOS_ClaimScreenMemory"
  346. BVS error
  347. MOV R0,R1
  348. LDMFD R13!,{R1-R2}
  349. MOV PC,R14
  350. .ramfs_free
  351. STMFD R13!,{R1-R2}
  352. MOV R0,#49
  353. ADR R1,ramfs_object
  354. SWI "XOS_FSControl"
  355. MOVVS R0,#0
  356. LDMFD R13!,{R1-R2}
  357. MOV PC,R14
  358. .ramfs_object
  359. EQUS "RAM:$"+
  360. .default
  361. EQUS "-h-d-i"+
  362.