Home » Archimedes archive » Acorn Computing » 1994 05.adf » 9405 » TechForum/!OS3_Fix/Modify

TechForum/!OS3_Fix/Modify

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 Computing » 1994 05.adf » 9405
Filename: TechForum/!OS3_Fix/Modify
Read OK:
File size: 0308 bytes
Load address: 0000
Exec address: 0000
File contents
   10
   20SYS "OS_File",5,"<tabletos3fix$dir>.OldMod" TO type%,,,,len%
   30IF type%<>1 ERROR 0, "File !OS3_Fix.OldMod not found"
   40DIM data% len%+256, search% 12
   50SYS "OS_File",255,"<tabletos3fix$dir>.OldMod",data%,0
   60P%=search%
   70[OPT 2
   80MOV R0, #&9C
   90MOV R1, #&DE
  100SWI "XOS_Byte"
  110]
  120P%=0
  130Q%=data%
  140REPEAT
  150 IF (Q%!0 = search%!0) AND (Q%!4 = search%!4) AND (Q%!8 = search%!8) P%=Q%+8
  160 Q%+=4
  170UNTIL (P%<>0) OR (Q%>data%+len%-12)
  180IF P%=0 ERROR 0, "Can't find instructions to patch"
  190[OPT 2
  200BL data%+len%
  210]
  220P%=data%+len%
  230[OPT 2
  240.ms%
  250STMFD R13!,{R14}
  260MOV R0,#1
  270MOV R1,#%1000
  280SWI "XOS_SerialOp"
  290MOV R0,#2
  300MOV R1,#2
  310SWI "XOS_Byte"
  320LDMFD R13!,{PC}
  330.me%
  340]
  350SYS "OS_File",10,"<tabletos3fix$dir>.NewMod",&FFA,,data%,data%+len%+(me%-ms%)


>ș "OS_File",5,"<tabletos3fix$dir>.OldMod" � type%,,,,len%
4� type%<>1 � 0, "File !OS3_Fix.OldMod not found"
( � data% len%+256, search% 12
28ș "OS_File",255,"<tabletos3fix$dir>.OldMod",data%,0
<P%=search%
F
[OPT 2
PMOV R0, #&9C
ZMOV R1, #&DE
dSWI "XOS_Byte"
n]
xP%=0
�Q%=data%
��
�K � (Q%!0 = search%!0) � (Q%!4 = search%!4) � (Q%!8 = search%!8) P%=Q%+8
�
 Q%+=4
�"� (P%<>0) � (Q%>data%+len%-12)
�2� P%=0 � 0, "Can't find instructions to patch"
�
[OPT 2
�BL data%+len%
�]
�P%=data%+len%
�
[OPT 2
�.ms%
�STMFD R13!,{R14}

MOV R0,#1
MOV R1,#%1000
SWI "XOS_SerialOp"
"
MOV R0,#2
,
MOV R1,#2
6SWI "XOS_Byte"
@LDMFD R13!,{PC}
J.me%
T]
^Pș "OS_File",10,"<tabletos3fix$dir>.NewMod",&FFA,,data%,data%+len%+(me%-ms%)
�
00000000  0d 00 0a 04 0d 00 14 3e  c8 99 20 22 4f 53 5f 46  |.......>.. "OS_F|
00000010  69 6c 65 22 2c 35 2c 22  3c 74 61 62 6c 65 74 6f  |ile",5,"<tableto|
00000020  73 33 66 69 78 24 64 69  72 3e 2e 4f 6c 64 4d 6f  |s3fix$dir>.OldMo|
00000030  64 22 20 b8 20 74 79 70  65 25 2c 2c 2c 2c 6c 65  |d" . type%,,,,le|
00000040  6e 25 0d 00 1e 34 e7 20  74 79 70 65 25 3c 3e 31  |n%...4. type%<>1|
00000050  20 85 20 30 2c 20 22 46  69 6c 65 20 21 4f 53 33  | . 0, "File !OS3|
00000060  5f 46 69 78 2e 4f 6c 64  4d 6f 64 20 6e 6f 74 20  |_Fix.OldMod not |
00000070  66 6f 75 6e 64 22 0d 00  28 20 de 20 64 61 74 61  |found"..( . data|
00000080  25 20 6c 65 6e 25 2b 32  35 36 2c 20 73 65 61 72  |% len%+256, sear|
00000090  63 68 25 20 31 32 0d 00  32 38 c8 99 20 22 4f 53  |ch% 12..28.. "OS|
000000a0  5f 46 69 6c 65 22 2c 32  35 35 2c 22 3c 74 61 62  |_File",255,"<tab|
000000b0  6c 65 74 6f 73 33 66 69  78 24 64 69 72 3e 2e 4f  |letos3fix$dir>.O|
000000c0  6c 64 4d 6f 64 22 2c 64  61 74 61 25 2c 30 0d 00  |ldMod",data%,0..|
000000d0  3c 0e 50 25 3d 73 65 61  72 63 68 25 0d 00 46 0a  |<.P%=search%..F.|
000000e0  5b 4f 50 54 20 32 0d 00  50 10 4d 4f 56 20 52 30  |[OPT 2..P.MOV R0|
000000f0  2c 20 23 26 39 43 0d 00  5a 10 4d 4f 56 20 52 31  |, #&9C..Z.MOV R1|
00000100  2c 20 23 26 44 45 0d 00  64 12 53 57 49 20 22 58  |, #&DE..d.SWI "X|
00000110  4f 53 5f 42 79 74 65 22  0d 00 6e 05 5d 0d 00 78  |OS_Byte"..n.]..x|
00000120  08 50 25 3d 30 0d 00 82  0c 51 25 3d 64 61 74 61  |.P%=0....Q%=data|
00000130  25 0d 00 8c 05 f5 0d 00  96 4b 20 e7 20 28 51 25  |%........K . (Q%|
00000140  21 30 20 3d 20 73 65 61  72 63 68 25 21 30 29 20  |!0 = search%!0) |
00000150  80 20 28 51 25 21 34 20  3d 20 73 65 61 72 63 68  |. (Q%!4 = search|
00000160  25 21 34 29 20 80 20 28  51 25 21 38 20 3d 20 73  |%!4) . (Q%!8 = s|
00000170  65 61 72 63 68 25 21 38  29 20 50 25 3d 51 25 2b  |earch%!8) P%=Q%+|
00000180  38 0d 00 a0 0a 20 51 25  2b 3d 34 0d 00 aa 22 fd  |8.... Q%+=4...".|
00000190  20 28 50 25 3c 3e 30 29  20 84 20 28 51 25 3e 64  | (P%<>0) . (Q%>d|
000001a0  61 74 61 25 2b 6c 65 6e  25 2d 31 32 29 0d 00 b4  |ata%+len%-12)...|
000001b0  32 e7 20 50 25 3d 30 20  85 20 30 2c 20 22 43 61  |2. P%=0 . 0, "Ca|
000001c0  6e 27 74 20 66 69 6e 64  20 69 6e 73 74 72 75 63  |n't find instruc|
000001d0  74 69 6f 6e 73 20 74 6f  20 70 61 74 63 68 22 0d  |tions to patch".|
000001e0  00 be 0a 5b 4f 50 54 20  32 0d 00 c8 11 42 4c 20  |...[OPT 2....BL |
000001f0  64 61 74 61 25 2b 6c 65  6e 25 0d 00 d2 05 5d 0d  |data%+len%....].|
00000200  00 dc 11 50 25 3d 64 61  74 61 25 2b 6c 65 6e 25  |...P%=data%+len%|
00000210  0d 00 e6 0a 5b 4f 50 54  20 32 0d 00 f0 08 2e 6d  |....[OPT 2.....m|
00000220  73 25 0d 00 fa 14 53 54  4d 46 44 20 52 31 33 21  |s%....STMFD R13!|
00000230  2c 7b 52 31 34 7d 0d 01  04 0d 4d 4f 56 20 52 30  |,{R14}....MOV R0|
00000240  2c 23 31 0d 01 0e 11 4d  4f 56 20 52 31 2c 23 25  |,#1....MOV R1,#%|
00000250  31 30 30 30 0d 01 18 16  53 57 49 20 22 58 4f 53  |1000....SWI "XOS|
00000260  5f 53 65 72 69 61 6c 4f  70 22 0d 01 22 0d 4d 4f  |_SerialOp"..".MO|
00000270  56 20 52 30 2c 23 32 0d  01 2c 0d 4d 4f 56 20 52  |V R0,#2..,.MOV R|
00000280  31 2c 23 32 0d 01 36 12  53 57 49 20 22 58 4f 53  |1,#2..6.SWI "XOS|
00000290  5f 42 79 74 65 22 0d 01  40 13 4c 44 4d 46 44 20  |_Byte"..@.LDMFD |
000002a0  52 31 33 21 2c 7b 50 43  7d 0d 01 4a 08 2e 6d 65  |R13!,{PC}..J..me|
000002b0  25 0d 01 54 05 5d 0d 01  5e 50 c8 99 20 22 4f 53  |%..T.]..^P.. "OS|
000002c0  5f 46 69 6c 65 22 2c 31  30 2c 22 3c 74 61 62 6c  |_File",10,"<tabl|
000002d0  65 74 6f 73 33 66 69 78  24 64 69 72 3e 2e 4e 65  |etos3fix$dir>.Ne|
000002e0  77 4d 6f 64 22 2c 26 46  46 41 2c 2c 64 61 74 61  |wMod",&FFA,,data|
000002f0  25 2c 64 61 74 61 25 2b  6c 65 6e 25 2b 28 6d 65  |%,data%+len%+(me|
00000300  25 2d 6d 73 25 29 0d ff                           |%-ms%)..|
00000308