home *** CD-ROM | disk | FTP | other *** search
RISC OS BBC BASIC V Source | 1994-10-17 | 7.2 KB | 362 lines |
- >MemSource
- Andrew Bower 1994
- save$="MemUtil"
- *FX1,3
- &*RMEnsure UtilityModule 3.00 FX1,2
- "OS_Byte",1
- ,osver%
- code 20480
- L%=code+20460
- pass=%1100
- %1110
- O%=code
- pass
- "OS_File",10,save$,&FFC,,code,O%
- name(s$) :
- used for the table entries
- n=(32-
- (s$))
- m=(32-
- (s$))
- n+=1
- [OPT pass
- (s$)+n+2
- )EQUS s$+
- 0 :
- to tabulate it
- [OPT pass
- .start
- STR R14,retaddr
- !BLDRB R0,[R1]:CMP R0,#0:ADREQ R1,default-2048:ADDEQ R1,R1,#2048
- BL readargs
- #-LDR R0,[R11,#1<<2]:TEQ R0,#0: BLNE syntax
- $:LDR R0,[R11,#3<<2]:TEQ R0,#0: MOVNE R9,#0: BLNE change
- %:LDR R0,[R11,#4<<2]:TEQ R0,#0: MOVNE R9,#1: BLNE change
- &:LDR R0,[R11,#5<<2]:TEQ R0,#0: MOVNE R9,#2: BLNE change
- ':LDR R0,[R11,#6<<2]:TEQ R0,#0: MOVNE R9,#3: BLNE change
- (:LDR R0,[R11,#7<<2]:TEQ R0,#0: MOVNE R9,#4: BLNE change
- ):LDR R0,[R11,#8<<2]:TEQ R0,#0: MOVNE R9,#5: BLNE change
- */LDR R0,[R11,#0<<2]:TEQ R0,#0: BLNE showinfo
- +2LDR R0,[R11,#2<<2]:TEQ R0,#0: BLNE interactive
- LDR PC,retaddr
- EQUS "
- A.Bower"
- / ALIGN
- .readargs
- ADR R0,keyword
- ADD R11,R12,#512
- MOV R2,R11
- MOV R3,#256
- SWI "XOS_ReadArgs"
- BVS error
- MOV PC,R14
- .keyword
- :)EQUS"display/s,help/s,interactive/s,"
- ;-EQUS"system,rma,screen,sprite,font,ramfs"
- EQUB 0
- .syntax
- ADR R0,syntax_string
- MOV R1,#0
- ADR R2,progname
- SWI "XOS_PrettyPrint"
- BVS error
- MOV PC,R14
- .progname
- EQUS "MemUtil"+
- .syntax_string
- G*EQUS "==> Help on utility "+
- .command_help
- ILEQUS "Reads"+
- 16+"alters"+
- 2+"machine's memory allocations."+
- .syntax_mess
- EQUS
- 30+"-help] [-display] [-interactive] [[-system] [+|-|=]<n>] [[-RMA] [+|-|=]<n>] [[-screen] [+|-|=]<n>] [[-"+
- 31+"] [+|-|=]<n>] [[-font] [+|-|=]<n>] [[-RAMFS] [+|-|=]<n>]"+
- .interactive
- SWI "OS_WriteS"
- NREQUS "Type number of area to change or press ESCAPE to quit."+
- 10+">> "+
- R R0,R12,#1<<31
- MOV R1,#128
- MOV R2,#
- MOV R3,#
- SWI "XOS_ReadLine"
- BVS error
- MOVCS PC,R14
- CMP R1,#0
- Q PC,R14
- MOV R0,#0
- STRB R0,[R12,R1]
- Z+; base 10 implied because R0 is invalid
- MOV R1,R12
- SWI "XOS_ReadUnsigned"
- BVS error
- MOV R9,R2
- SWI "XOS_WriteS"
- `cEQUS "
- : to alter the size,
- to ensure free space (in KB)"+
- 10+">> "+
- R R0,R12,#1<<31
- MOV R1,#128
- MOV R2,#
- MOV R3,#
- SWI "XOS_ReadLine"
- BVS error
- MOVCS PC,R14
- CMP R1,#0
- Q PC,R14
- MOV R0,#0
- STRB R0,[R12,R1]
- MOV R0,R12
- .change
- MOV R10,R0
- .change_nextchar
- LDRB R8,[R10],#1
- TEQ R8,#32
- BEQ change_nextchar
- SUB R10,R10,#1
- MOV R7,#0
- MOV R1,R10
- MOV R0,#10
- (1<<31)
- SWI "XOS_ReadUnsigned"
- BVC change_ok
- TEQ R8,#
- TEQNE R8,#
- TEQNE R8,#
- Q R7,R8
- ADD R1,R10,#1
- MOV R0,#10
- (1<<31)
- SWI "XOS_ReadUnsigned"
- BVS error
- .change_ok
- MOV R6,R2,LSL #10
- TEQ R7,#0
- Q R1,#&80000000
- Q R0,R9
- !SWIEQ "XOS_ChangeDynamicArea"
- TEQP PC,#0
- Q R7,#
- TEQ R7,#
- Q R0,R9
- SWIEQ "XOS_ReadDynamicArea"
- BVS error
- SUBEQ R6,R6,R1
- Q R7,#
- TEQ R7,#
- RSBEQ R6,R6,#0
- MOV R0,R9
- MOV R1,R6
- SWI "XOS_ChangeDynamicArea"
- MOV PC,R14
- .showinfo
- STMFD R13!,{R14}
- ADR R0,progname
- SWI "XOS_Write0"
- SWI "XOS_NewLine"
- SWI "XOS_NewLine"
- ADR R0,info_headings
- MOV R1,#0
- MOV R2,#0
- SWI "XOS_PrettyPrint"
- BVS error
- *MOV R6,#0 ; number of area
- .infoloop
- BL info_display
- ADD R6,R6,#1
- CMP R6,#5
- BLS infoloop
- SWI "XOS_NewLine"
- SWI "XOS_GetEnv"
- BVS error
- SUB R0,R1,#&8000
- MOV R1,R12
- MOV R2,#512
- "SWI "XOS_ConvertFixedFileSize"
- BVS error
- SWI "XOS_Write0"
- SWI "XOS_WriteS"
- 6EQUS " available for next application."+
- ALIGN
- SWI "XOS_ReadMemMapInfo"
- STR R0,[R12,#0]
- STR R1,[R12,#4]
- BVS error
- MUL R2,R1,R0
- MOV R0,R2
- ADD R1,R12,#8
- MOV R2,#512-8
- "SWI "XOS_ConvertFixedFileSize"
- BVS error
- SWI "XOS_Write0"
- SWI "XOS_WriteS"
- 0EQUS " total memory in this machine, in "+
- ALIGN
- LDR R0,[R12,#4]
- SWI "XOS_ConvertCardinal4"
- BVS error
- SWI "XOS_Write0"
- SWI "XOS_WriteS"
- EQUS " pages of "+
- LDR R0,[R12,#0]
- SWI "XOS_ConvertFileSize"
- BVS error
- SWI "XOS_Write0"
- SWI "XOS_WriteS"
- EQUS "."+
- ALIGN
- LDMFD R13!,{PC}
- .info_display
- 3MOV R0,R6 ; takes area number in R6
- R R0,R0,#1<<7
- SWI "XOS_ReadDynamicArea"
- BVS error
- ADR R5,table-256
- ADD R5,R5,#256
- ADD R5,R5,R6,LSL #4
- STR R1,[R5,#0]
- STR R2,[R5,#4]
- MOV R0,R6
- MOV R1,R12
- MOV R2,#512
- SWI "XOS_ConvertCardinal1"
- BVS error
- MOV R3,#9
- STRB R3,[R1],#1
- MOV R3,#27
- STRB R3,[R1],#1
- ADD R0,R6,#1
- STRB R0,[R1],#1
- MOV R0,#0
- STRB R0,[R1],#1
- MOV R0,R12
- ADR R1,info_names-256
- ADD R1,R1,#256
- LDR R2,[R5,#8]
- SWI "XOS_PrettyPrint"
- MOV R1,R12
- MOV R2,#512-4
- LDR R0,[R5,#0]
- "SWI "XOS_ConvertFixedFileSize"
- BVS error
- SUB R1,R1,#6
- LDRB R3,[R1]
- STRB R3,[R1,#-1]
- MOV R3,#32
- STRB R3,[R1],#1
- STRB R3,[R1],#1
- STRB R3,[R1],#1
- STRB R3,[R1],#1
- LDR R0,[R5,#4]
- "SWI "XOS_ConvertFixedFileSize"
- BVS error
- SUB R1,R1,#6
- LDRB R3,[R1]
- STRB R3,[R1,#-1]
- MOV R3,#0
- STRB R3,[R1],#1
- LDR R0,[R5,#12]
- CMP R0,#0
- BEQ info_continue
- STMFD R13!,{R14}
- ADR R14,info_freecont
- ADR R8,start+512
- SUB R8,R8,#512
- ADD PC,R8,R0
- .info_freecont
- SUB R1,R1,#1
- MOV R3,#32
- STRB R3,[R1],#1
- STRB R3,[R1],#1
- "SWI "XOS_ConvertFixedFileSize"
- BVS error
- LDMFD R13!,{R14}
- .info_continue
- MOV R0,R12
- SWI "XOS_Write0"
- SWI "XOS_NewLine"
- BVS error
- MOV PC,R14
- .table
- DCD 0 :DCD 0 :DCD 0 :DCD 0
- %DCD 0 :DCD 0 :DCD 0 :DCD rma_free
- (DCD 0 :DCD 0 :DCD 0 :DCD screen_free
- (DCD 0 :DCD 0 :DCD 0 :DCD sprite_free
- &DCD 0 :DCD 0 :DCD 0 :DCD font_free
- 3DCD 0 :DCD 0 :DCD 0 :DCD -ramfs_free*(osver%>2)
- .info_names
- name("System heap")
- name("Relocatable Module Area")
- name("Screen area")
- name("Sprite area")
- name("Font cache")
- name("RAM filing system")
- # DCD 0
- .error
- % ALIGN
- OPT pass
- LDR PC,retaddr
- .retaddr
- EQUD 0
- .info_headings
- +hEQUS "Dynamic area"+
- 9+"size"+
- 31+"max"+
- 31+"free"+
- .debug
- EQUS "Debug"+
- . ALIGN
- .value
- EQUD 0
- .font_free
- STMFD R13!,{R2-R3}
- SWI "XFont_CacheAddr"
- BVS error
- SUB R0,R2,R3
- LDMFD R13!,{R2-R3}
- MOV PC,R14
- .rma_free
- STMFD R13!,{R2-R3}
- MOV R0,#5
- SWI "XOS_Module"
- BVS error
- MOV R0,R2
- LDMFD R13!,{R2-R3}
- MOV PC,R14
- .sprite_free
- STMFD R13!,{R2-R5}
- MOV R0,#8
- SWI "XOS_SpriteOp"
- MOVVS R2,R5
- SUB R0,R2,R5
- LDMFD R13!,{R2-R5}
- MOV PC,R14
- .screen_free
- STMFD R13!,{R1-R2}
- MOV R0,#1
- MVN R1,#0
- BIC R1,R1,#1<<31
- SWI "XOS_ClaimScreenMemory"
- BVS error
- MOVCC R0,#0
- P!SWICC "XOS_ClaimScreenMemory"
- BVS error
- MOV R0,R1
- LDMFD R13!,{R1-R2}
- MOV PC,R14
- .ramfs_free
- STMFD R13!,{R1-R2}
- MOV R0,#49
- ADR R1,ramfs_object
- SWI "XOS_FSControl"
- MOVVS R0,#0
- LDMFD R13!,{R1-R2}
- MOV PC,R14
- .ramfs_object
- EQUS "RAM:$"+
- .default
- EQUS "-h-d-i"+
-