home *** CD-ROM | disk | FTP | other *** search
-
- r0 RN 0
- r1 RN 1
- r2 RN 2
- r3 RN 3
- r4 RN 4
- r5 RN 5
- r6 RN 6
- r7 RN 7
- r8 RN 8
- r9 RN 9
- r10 RN 10
- r11 RN 11
- r12 RN 12
- r13 RN 13
- r14 RN 14
- r15 RN 15
- sp RN r13
- lr RN r14
- pc RN r15
-
- XOS_Module * &2001e
- XOS_ValidateAddress * &2003a
- XOS_CRC * &2005b
- XWimp_ReportError * &600df
-
-
-
- STMFD sp!, {lr}
- LDRB r0, [r1] ;first char of command tail
- CMP r0, #'V'
- CMPNE r0, #'v'
- MOVEQ r0, #1
- MOVNE r0, #0
- STR r0, verbose
- MOV r0, #18
- ADR r1, name
- SWI XOS_Module
- BVS err1 ;else r3 pts to module
- LDR r4, [r3, #-4] ;block length in r4
- LDR r0, length
- CMP r4, r0
- BLT err4 ;if block length not as expected, return
- LDR r1, [r3, #&408]
- LDR r0, newins
- CMP r0, r1
- BEQ err2
- LDR r0, oldins
- CMP r0, r1
- BNE err4 ;if instruction not as expected, return
- MOV r0, #0
- MOV r1, r3 ;r1 pts to module
- LDR r2, crco
- ADD r2, r3, r2
- MOV r3, #1
- SWI XOS_CRC ;crc in r0, r1 still pts to module
- BVS err3
- LDR r2, crc
- CMP r0, r2
- BNE err4 ;if crc not as expected, return
- MOV r0, r1 ;r0 pts to module
- SUB r4, r4, #4 ;module length in r4
- ADD r1, r0, r4
- SWI XOS_ValidateAddress ;if C set then not in logical RAM
- BVS err3 ;r0 still pts to module
- MOV r1, r0 ;r1 pts to module
- MOV r0, #11
- MOV r2, r4
- SWICS XOS_Module ;try to copy to RMA if not in logical RAM
- BVS err5
- MOV r0, #18
- ADR r1, name
- SWI XOS_Module
- BVS err1 ;else r3 pts to module
- LDR r0, newins
- STR r0, [r3, #&408]
- ADR r0, ret0 ;patch performed
- B retmess
- err1 ADR r0, ret1 ;can't find DAS
- B retmess
- err2 ADR r0, ret2 ;already patched
- B retmess
- err3 ADR r0, ret3 ;unexpected swi error
- B retmess
- err4 ADR r0, ret4 ;don't recognise DAS as v 0.03
- B retmess
- err5 ADR r0, ret5 ;can't move to RMA
- B retmess
- retmess LDMFD sp!, {lr}
- LDR r1, verbose
- CMP r1, #1
- MOVNES pc, lr
- MOV r1, #&11
- ADRL r2, daspatchname
- SWI XWimp_ReportError
- MOVS pc, lr
-
- name DCB "DragASprite", 0
- ret0 DCD 0
- DCB "DragASprite is now patched.", 0
- ret1 DCD 0
- DCB "Unable to patch DragASprite as can't find it.", 0
- ret2 DCD 0
- DCB "DragASprite is already patched.", 0
- ret3 DCD 0
- DCB "Unable to patch DragASprite due to an unexpected SWI error.", 0
- ret4 DCD 0
- DCB "Unable to patch DragASprite as don't recognise it as v 0.03.", 0
- ret5 DCD 0
- DCB "Unable to patch DragASprite as can't move it into the RMA.", 0
- daspatchname
- DCB "DASpatch", 0
- ALIGN
- verbose DCD 0
- length DCD &e8c
- crco DCD &e80
- crc DCD &6732
- oldins LDR r2, [r12, #24]
- newins LDR r2, [r12, #28]
-
-
-
- END
-