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