home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 1 / ARM_CLUB_CD.iso / contents / apps / desktop / d / daspatch / s / DASpatch < prev   
Encoding:
Text File  |  1994-08-28  |  2.5 KB  |  124 lines

  1.  
  2. r0      RN      0
  3. r1      RN      1
  4. r2      RN      2
  5. r3      RN      3
  6. r4      RN      4
  7. r5      RN      5
  8. r6      RN      6
  9. r7      RN      7
  10. r8      RN      8
  11. r9      RN      9
  12. r10     RN      10
  13. r11     RN      11
  14. r12     RN      12
  15. r13     RN      13
  16. r14     RN      14
  17. r15     RN      15
  18. sp      RN      r13
  19. lr      RN      r14
  20. pc      RN      r15
  21.  
  22. XOS_Module        *    &2001e
  23. XOS_ValidateAddress    *    &2003a
  24. XOS_CRC            *    &2005b
  25. XWimp_ReportError    *    &600df
  26.  
  27.  
  28.  
  29.     STMFD    sp!, {lr}
  30.     LDRB    r0, [r1]        ;first char of command tail
  31.     CMP    r0, #'V'
  32.     CMPNE    r0, #'v'
  33.     MOVEQ    r0, #1
  34.     MOVNE    r0, #0
  35.     STR    r0, verbose
  36.     MOV    r0, #18
  37.     ADR    r1, name
  38.     SWI    XOS_Module
  39.     BVS    err1            ;else r3 pts to module
  40.     LDR    r4, [r3, #-4]        ;block length in r4
  41.     LDR    r0, length
  42.     CMP    r4, r0
  43.     BLT    err4            ;if block length not as expected, return
  44.     LDR    r1, [r3, #&408]
  45.     LDR    r0, newins
  46.     CMP    r0, r1
  47.     BEQ    err2
  48.     LDR    r0, oldins
  49.     CMP    r0, r1
  50.     BNE    err4            ;if instruction not as expected, return
  51.     MOV    r0, #0
  52.     MOV    r1, r3            ;r1 pts to module
  53.     LDR    r2, crco
  54.     ADD    r2, r3, r2
  55.     MOV    r3, #1
  56.     SWI    XOS_CRC            ;crc in r0, r1 still pts to module
  57.     BVS    err3
  58.     LDR    r2, crc
  59.     CMP    r0, r2
  60.     BNE    err4            ;if crc not as expected, return
  61.     MOV    r0, r1            ;r0 pts to module
  62.     SUB    r4, r4, #4        ;module length in r4
  63.     ADD    r1, r0, r4
  64.     SWI    XOS_ValidateAddress    ;if C set then not in logical RAM
  65.     BVS    err3            ;r0 still pts to module
  66.     MOV    r1, r0            ;r1 pts to module
  67.     MOV    r0, #11
  68.     MOV    r2, r4
  69.     SWICS    XOS_Module        ;try to copy to RMA if not in logical RAM
  70.     BVS    err5
  71.     MOV    r0, #18
  72.     ADR    r1, name
  73.     SWI    XOS_Module
  74.     BVS    err1            ;else r3 pts to module
  75.     LDR    r0, newins
  76.     STR    r0, [r3, #&408]
  77.     ADR    r0, ret0        ;patch performed
  78.     B    retmess
  79. err1    ADR    r0, ret1        ;can't find DAS
  80.     B    retmess
  81. err2    ADR    r0, ret2        ;already patched
  82.     B    retmess
  83. err3    ADR    r0, ret3        ;unexpected swi error
  84.     B    retmess
  85. err4    ADR    r0, ret4        ;don't recognise DAS as v 0.03
  86.     B    retmess
  87. err5    ADR    r0, ret5        ;can't move to RMA
  88.     B    retmess
  89. retmess    LDMFD    sp!, {lr}
  90.     LDR    r1, verbose
  91.     CMP    r1, #1
  92.     MOVNES    pc, lr
  93.     MOV    r1, #&11
  94.     ADRL    r2, daspatchname
  95.     SWI    XWimp_ReportError
  96.     MOVS    pc, lr
  97.  
  98. name    DCB    "DragASprite", 0
  99. ret0    DCD    0
  100.     DCB    "DragASprite is now  patched.", 0
  101. ret1    DCD    0
  102.     DCB    "Unable to patch DragASprite as can't find it.", 0
  103. ret2    DCD    0
  104.     DCB    "DragASprite is already patched.", 0
  105. ret3    DCD    0
  106.     DCB    "Unable to patch DragASprite due to an unexpected SWI error.", 0
  107. ret4    DCD    0
  108.     DCB    "Unable to patch DragASprite as don't recognise it as v 0.03.", 0
  109. ret5    DCD    0
  110.     DCB    "Unable to patch DragASprite as can't move it into the RMA.", 0
  111. daspatchname
  112.     DCB    "DASpatch", 0
  113.     ALIGN
  114. verbose    DCD    0
  115. length    DCD    &e8c
  116. crco    DCD    &e80
  117. crc    DCD    &6732
  118. oldins    LDR    r2, [r12, #24]
  119. newins    LDR    r2, [r12, #28]
  120.  
  121.  
  122.  
  123.     END
  124.