Home » Archimedes archive » Acorn User » AU 1994-Xmas.adf » Programs » StarInfo/December/Whitacre/MOFSPatch

StarInfo/December/Whitacre/MOFSPatch

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1994-Xmas.adf » Programs
Filename: StarInfo/December/Whitacre/MOFSPatch
Read OK:
File size: 06E9 bytes
Load address: 0000
Exec address: 0000
File contents
    1REM >MOFSPatch
    2REM By Harry Whitacre
    3REM For Acorn User 1994
    4ON ERROR ERROR EXT ERR,REPORT$+" at line "+STR$ERL:END
    5
    6in$="!MOFile3"
    7branch_at = &A18
    8
    9out$="new!MOFile3"
   10
   11DIM code 10240
   12SYS "OS_File",&FF,in$,code TO ,,,,len
   13sp=13:lr=14:pc=15
   14FOR pass=4 TO 6 STEP 2
   15[OPT pass
   16
   17        FNorg(branch_at)
   18        BL      patch
   19   
   20        FNorg(len)
   21.patch
   22;  In   r2 -> name of disc (text under icon)
   23;  Out  r2 -> 's' + sprite name
   24; check for existance of sprite 'mo'+<r2> else use 'magopt'
   25        STMFD   sp !,{r0-r1,r9-r10,lr}
   26        
   27        ADR     r10,spr                  ; copy to buffer
   28        MOV     r9,#0
   29.copyname
   30        LDRB    lr,[r2],#1               ; with leading 'mo'
   31        STRB    lr,[r10],#1
   32        ADD     r9,r9,#1
   33        CMP     lr,#0
   34        BNE     copyname
   35        ADD     r10,r10,#1
   36        
   37.try_name
   38        MOV     r0,#&18                 ; 'select sprite'
   39        ADR     r2,mo
   40        SWI     "XWimp_SpriteOp"        ; returns VS if not found
   41        ADRVC   r2,smo
   42        BVC     exit
   43        
   44        SUBS    r9,r9,#1
   45        ADRLT   r2,default
   46        BLT     exit
   47        MOV     lr,#0
   48        STRB    lr,[r10,#-1]!
   49        MOV     lr,#ASC"*"
   50        STRB    lr,[r10,#-1]
   51        B       try_name
   52        
   53.exit
   54        LDMFD   sp !,{r0-r1,r9-r10,pc}
   55        
   56.default
   57        EQUS    "s!magopt"
   58        EQUB    0
   59        ALIGN
   60        
   61.smo    EQUS    "s"
   62.mo     EQUS    "mo"
   63.spr    EQUD    0
   64        EQUD    0
   65        EQUD    0
   66        EQUD    0
   67        ALIGN
   68]
   69NEXT
   70SYS "OS_File",10,out$,&FFA,,code,O%
   71END
   72:
   73DEF FNorg(off)
   74P%=off
   75O%=code+off
   76=""
� >MOFSPatch
� By Harry Whitacre
� For Acorn User 1994
!� � � � �,�$+" at line "+Þ:�

in$="!MOFile3"
branch_at = &A18

	out$="new!MOFile3"


� code 10240
'ș "OS_File",&FF,in$,code � ,,,,len

sp=13:lr=14:pc=15
� pass=4 � 6 � 2

[OPT pass

        �org(branch_at)
        BL      patch
   
        �org(len)

.patch
0;  In   r2 -> name of disc (text under icon)
#;  Out  r2 -> 's' + sprite name
?; check for existance of sprite 'mo'+<r2> else use 'magopt'
*        STMFD   sp !,{r0-r1,r9-r10,lr}
        
=        ADR     r10,spr                  ; copy to buffer
        MOV     r9,#0

.copyname
@        LDRB    lr,[r2],#1               ; with leading 'mo'
        STRB    lr,[r10],#1
         ADD     r9,r9,#1
!        CMP     lr,#0
"        BNE     copyname
#        ADD     r10,r10,#1
$        
%
.try_name
&=        MOV     r0,#&18                 ; 'select sprite'
'        ADR     r2,mo
(E        SWI     "XWimp_SpriteOp"        ; returns VS if not found
)        ADRVC   r2,smo
*        BVC     exit
+        
,        SUBS    r9,r9,#1
-        ADRLT   r2,default
.        BLT     exit
/        MOV     lr,#0
0!        STRB    lr,[r10,#-1]!
1        MOV     lr,#�"*"
2         STRB    lr,[r10,#-1]
3        B       try_name
4        
5	.exit
6*        LDMFD   sp !,{r0-r1,r9-r10,pc}
7        
8.default
9        EQUS    "s!magopt"
:        EQUB    0
;        ALIGN
<        
=.smo    EQUS    "s"
>.mo     EQUS    "mo"
?.spr    EQUD    0
@        EQUD    0
A        EQUD    0
B        EQUD    0
C        ALIGN
D]
E�
F&ș "OS_File",10,out$,&FFA,,code,O%
G�
H:
I� �org(off)
J
P%=off
KO%=code+off
L=""
�
00000000  0d 00 01 10 f4 20 3e 4d  4f 46 53 50 61 74 63 68  |..... >MOFSPatch|
00000010  0d 00 02 17 f4 20 42 79  20 48 61 72 72 79 20 57  |..... By Harry W|
00000020  68 69 74 61 63 72 65 0d  00 03 19 f4 20 46 6f 72  |hitacre..... For|
00000030  20 41 63 6f 72 6e 20 55  73 65 72 20 31 39 39 34  | Acorn User 1994|
00000040  0d 00 04 21 ee 20 85 20  85 20 a2 20 9f 2c f6 24  |...!. . . . .,.$|
00000050  2b 22 20 61 74 20 6c 69  6e 65 20 22 2b c3 9e 3a  |+" at line "+..:|
00000060  e0 0d 00 05 04 0d 00 06  12 69 6e 24 3d 22 21 4d  |.........in$="!M|
00000070  4f 46 69 6c 65 33 22 0d  00 07 14 62 72 61 6e 63  |OFile3"....branc|
00000080  68 5f 61 74 20 3d 20 26  41 31 38 0d 00 08 04 0d  |h_at = &A18.....|
00000090  00 09 16 6f 75 74 24 3d  22 6e 65 77 21 4d 4f 46  |...out$="new!MOF|
000000a0  69 6c 65 33 22 0d 00 0a  04 0d 00 0b 10 de 20 63  |ile3"......... c|
000000b0  6f 64 65 20 31 30 32 34  30 0d 00 0c 27 c8 99 20  |ode 10240...'.. |
000000c0  22 4f 53 5f 46 69 6c 65  22 2c 26 46 46 2c 69 6e  |"OS_File",&FF,in|
000000d0  24 2c 63 6f 64 65 20 b8  20 2c 2c 2c 2c 6c 65 6e  |$,code . ,,,,len|
000000e0  0d 00 0d 15 73 70 3d 31  33 3a 6c 72 3d 31 34 3a  |....sp=13:lr=14:|
000000f0  70 63 3d 31 35 0d 00 0e  14 e3 20 70 61 73 73 3d  |pc=15..... pass=|
00000100  34 20 b8 20 36 20 88 20  32 0d 00 0f 0d 5b 4f 50  |4 . 6 . 2....[OP|
00000110  54 20 70 61 73 73 0d 00  10 04 0d 00 11 1b 20 20  |T pass........  |
00000120  20 20 20 20 20 20 a4 6f  72 67 28 62 72 61 6e 63  |      .org(branc|
00000130  68 5f 61 74 29 0d 00 12  19 20 20 20 20 20 20 20  |h_at)....       |
00000140  20 42 4c 20 20 20 20 20  20 70 61 74 63 68 0d 00  | BL      patch..|
00000150  13 07 20 20 20 0d 00 14  15 20 20 20 20 20 20 20  |..   ....       |
00000160  20 a4 6f 72 67 28 6c 65  6e 29 0d 00 15 0a 2e 70  | .org(len).....p|
00000170  61 74 63 68 0d 00 16 30  3b 20 20 49 6e 20 20 20  |atch...0;  In   |
00000180  72 32 20 2d 3e 20 6e 61  6d 65 20 6f 66 20 64 69  |r2 -> name of di|
00000190  73 63 20 28 74 65 78 74  20 75 6e 64 65 72 20 69  |sc (text under i|
000001a0  63 6f 6e 29 0d 00 17 23  3b 20 20 4f 75 74 20 20  |con)...#;  Out  |
000001b0  72 32 20 2d 3e 20 27 73  27 20 2b 20 73 70 72 69  |r2 -> 's' + spri|
000001c0  74 65 20 6e 61 6d 65 0d  00 18 3f 3b 20 63 68 65  |te name...?; che|
000001d0  63 6b 20 66 6f 72 20 65  78 69 73 74 61 6e 63 65  |ck for existance|
000001e0  20 6f 66 20 73 70 72 69  74 65 20 27 6d 6f 27 2b  | of sprite 'mo'+|
000001f0  3c 72 32 3e 20 65 6c 73  65 20 75 73 65 20 27 6d  |<r2> else use 'm|
00000200  61 67 6f 70 74 27 0d 00  19 2a 20 20 20 20 20 20  |agopt'...*      |
00000210  20 20 53 54 4d 46 44 20  20 20 73 70 20 21 2c 7b  |  STMFD   sp !,{|
00000220  72 30 2d 72 31 2c 72 39  2d 72 31 30 2c 6c 72 7d  |r0-r1,r9-r10,lr}|
00000230  0d 00 1a 0c 20 20 20 20  20 20 20 20 0d 00 1b 3d  |....        ...=|
00000240  20 20 20 20 20 20 20 20  41 44 52 20 20 20 20 20  |        ADR     |
00000250  72 31 30 2c 73 70 72 20  20 20 20 20 20 20 20 20  |r10,spr         |
00000260  20 20 20 20 20 20 20 20  20 3b 20 63 6f 70 79 20  |         ; copy |
00000270  74 6f 20 62 75 66 66 65  72 0d 00 1c 19 20 20 20  |to buffer....   |
00000280  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 39 2c  |     MOV     r9,|
00000290  23 30 0d 00 1d 0d 2e 63  6f 70 79 6e 61 6d 65 0d  |#0.....copyname.|
000002a0  00 1e 40 20 20 20 20 20  20 20 20 4c 44 52 42 20  |..@        LDRB |
000002b0  20 20 20 6c 72 2c 5b 72  32 5d 2c 23 31 20 20 20  |   lr,[r2],#1   |
000002c0  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 77 69  |            ; wi|
000002d0  74 68 20 6c 65 61 64 69  6e 67 20 27 6d 6f 27 0d  |th leading 'mo'.|
000002e0  00 1f 1f 20 20 20 20 20  20 20 20 53 54 52 42 20  |...        STRB |
000002f0  20 20 20 6c 72 2c 5b 72  31 30 5d 2c 23 31 0d 00  |   lr,[r10],#1..|
00000300  20 1c 20 20 20 20 20 20  20 20 41 44 44 20 20 20  | .        ADD   |
00000310  20 20 72 39 2c 72 39 2c  23 31 0d 00 21 19 20 20  |  r9,r9,#1..!.  |
00000320  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 6c 72  |      CMP     lr|
00000330  2c 23 30 0d 00 22 1c 20  20 20 20 20 20 20 20 42  |,#0..".        B|
00000340  4e 45 20 20 20 20 20 63  6f 70 79 6e 61 6d 65 0d  |NE     copyname.|
00000350  00 23 1e 20 20 20 20 20  20 20 20 41 44 44 20 20  |.#.        ADD  |
00000360  20 20 20 72 31 30 2c 72  31 30 2c 23 31 0d 00 24  |   r10,r10,#1..$|
00000370  0c 20 20 20 20 20 20 20  20 0d 00 25 0d 2e 74 72  |.        ..%..tr|
00000380  79 5f 6e 61 6d 65 0d 00  26 3d 20 20 20 20 20 20  |y_name..&=      |
00000390  20 20 4d 4f 56 20 20 20  20 20 72 30 2c 23 26 31  |  MOV     r0,#&1|
000003a0  38 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |8               |
000003b0  20 20 3b 20 27 73 65 6c  65 63 74 20 73 70 72 69  |  ; 'select spri|
000003c0  74 65 27 0d 00 27 19 20  20 20 20 20 20 20 20 41  |te'..'.        A|
000003d0  44 52 20 20 20 20 20 72  32 2c 6d 6f 0d 00 28 45  |DR     r2,mo..(E|
000003e0  20 20 20 20 20 20 20 20  53 57 49 20 20 20 20 20  |        SWI     |
000003f0  22 58 57 69 6d 70 5f 53  70 72 69 74 65 4f 70 22  |"XWimp_SpriteOp"|
00000400  20 20 20 20 20 20 20 20  3b 20 72 65 74 75 72 6e  |        ; return|
00000410  73 20 56 53 20 69 66 20  6e 6f 74 20 66 6f 75 6e  |s VS if not foun|
00000420  64 0d 00 29 1a 20 20 20  20 20 20 20 20 41 44 52  |d..).        ADR|
00000430  56 43 20 20 20 72 32 2c  73 6d 6f 0d 00 2a 18 20  |VC   r2,smo..*. |
00000440  20 20 20 20 20 20 20 42  56 43 20 20 20 20 20 65  |       BVC     e|
00000450  78 69 74 0d 00 2b 0c 20  20 20 20 20 20 20 20 0d  |xit..+.        .|
00000460  00 2c 1c 20 20 20 20 20  20 20 20 53 55 42 53 20  |.,.        SUBS |
00000470  20 20 20 72 39 2c 72 39  2c 23 31 0d 00 2d 1e 20  |   r9,r9,#1..-. |
00000480  20 20 20 20 20 20 20 41  44 52 4c 54 20 20 20 72  |       ADRLT   r|
00000490  32 2c 64 65 66 61 75 6c  74 0d 00 2e 18 20 20 20  |2,default....   |
000004a0  20 20 20 20 20 42 4c 54  20 20 20 20 20 65 78 69  |     BLT     exi|
000004b0  74 0d 00 2f 19 20 20 20  20 20 20 20 20 4d 4f 56  |t../.        MOV|
000004c0  20 20 20 20 20 6c 72 2c  23 30 0d 00 30 21 20 20  |     lr,#0..0!  |
000004d0  20 20 20 20 20 20 53 54  52 42 20 20 20 20 6c 72  |      STRB    lr|
000004e0  2c 5b 72 31 30 2c 23 2d  31 5d 21 0d 00 31 1c 20  |,[r10,#-1]!..1. |
000004f0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 6c  |       MOV     l|
00000500  72 2c 23 97 22 2a 22 0d  00 32 20 20 20 20 20 20  |r,#."*"..2      |
00000510  20 20 20 53 54 52 42 20  20 20 20 6c 72 2c 5b 72  |   STRB    lr,[r|
00000520  31 30 2c 23 2d 31 5d 0d  00 33 1c 20 20 20 20 20  |10,#-1]..3.     |
00000530  20 20 20 42 20 20 20 20  20 20 20 74 72 79 5f 6e  |   B       try_n|
00000540  61 6d 65 0d 00 34 0c 20  20 20 20 20 20 20 20 0d  |ame..4.        .|
00000550  00 35 09 2e 65 78 69 74  0d 00 36 2a 20 20 20 20  |.5..exit..6*    |
00000560  20 20 20 20 4c 44 4d 46  44 20 20 20 73 70 20 21  |    LDMFD   sp !|
00000570  2c 7b 72 30 2d 72 31 2c  72 39 2d 72 31 30 2c 70  |,{r0-r1,r9-r10,p|
00000580  63 7d 0d 00 37 0c 20 20  20 20 20 20 20 20 0d 00  |c}..7.        ..|
00000590  38 0c 2e 64 65 66 61 75  6c 74 0d 00 39 1e 20 20  |8..default..9.  |
000005a0  20 20 20 20 20 20 45 51  55 53 20 20 20 20 22 73  |      EQUS    "s|
000005b0  21 6d 61 67 6f 70 74 22  0d 00 3a 15 20 20 20 20  |!magopt"..:.    |
000005c0  20 20 20 20 45 51 55 42  20 20 20 20 30 0d 00 3b  |    EQUB    0..;|
000005d0  11 20 20 20 20 20 20 20  20 41 4c 49 47 4e 0d 00  |.        ALIGN..|
000005e0  3c 0c 20 20 20 20 20 20  20 20 0d 00 3d 17 2e 73  |<.        ..=..s|
000005f0  6d 6f 20 20 20 20 45 51  55 53 20 20 20 20 22 73  |mo    EQUS    "s|
00000600  22 0d 00 3e 18 2e 6d 6f  20 20 20 20 20 45 51 55  |"..>..mo     EQU|
00000610  53 20 20 20 20 22 6d 6f  22 0d 00 3f 15 2e 73 70  |S    "mo"..?..sp|
00000620  72 20 20 20 20 45 51 55  44 20 20 20 20 30 0d 00  |r    EQUD    0..|
00000630  40 15 20 20 20 20 20 20  20 20 45 51 55 44 20 20  |@.        EQUD  |
00000640  20 20 30 0d 00 41 15 20  20 20 20 20 20 20 20 45  |  0..A.        E|
00000650  51 55 44 20 20 20 20 30  0d 00 42 15 20 20 20 20  |QUD    0..B.    |
00000660  20 20 20 20 45 51 55 44  20 20 20 20 30 0d 00 43  |    EQUD    0..C|
00000670  11 20 20 20 20 20 20 20  20 41 4c 49 47 4e 0d 00  |.        ALIGN..|
00000680  44 05 5d 0d 00 45 05 ed  0d 00 46 26 c8 99 20 22  |D.]..E....F&.. "|
00000690  4f 53 5f 46 69 6c 65 22  2c 31 30 2c 6f 75 74 24  |OS_File",10,out$|
000006a0  2c 26 46 46 41 2c 2c 63  6f 64 65 2c 4f 25 0d 00  |,&FFA,,code,O%..|
000006b0  47 05 e0 0d 00 48 05 3a  0d 00 49 0f dd 20 a4 6f  |G....H.:..I.. .o|
000006c0  72 67 28 6f 66 66 29 0d  00 4a 0a 50 25 3d 6f 66  |rg(off)..J.P%=of|
000006d0  66 0d 00 4b 0f 4f 25 3d  63 6f 64 65 2b 6f 66 66  |f..K.O%=code+off|
000006e0  0d 00 4c 07 3d 22 22 0d  ff                       |..L.=""..|
000006e9