Home » Archimedes archive » Acorn Computing » 1993 06 Mega Disk.adf » 93_06 » Miscellany/SolidDrag/!SolidDrag/Source/drag_src1
Miscellany/SolidDrag/!SolidDrag/Source/drag_src1
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 » 1993 06 Mega Disk.adf » 93_06 |
Filename: | Miscellany/SolidDrag/!SolidDrag/Source/drag_src1 |
Read OK: | ✔ |
File size: | 121E bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
; > drag_src 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 sp RN 13 lr RN 14 pc RN 15 Wimp_DragBox EQU &400D0 XDragASprite_Start EQU &62400 XDragASprite_Stop EQU &62401 XOS_AddCallBack EQU &20054 V_FLAG EQU 1:SHL:28 module_base DCD 0 DCD initialise - module_base DCD finalise - module_base DCD 0 DCD title_string - module_base DCD help_string - module_base DCD 0 ; --------------------------------------------------------------------------------------------------------- initialise STMFD sp!, {lr} BL claim_swi_vector LDMFD sp!, {pc} ; --------------------------------------------------------------------------------------------------------- finalise STMFD sp!, {lr} BL release_swi_vector LDMFD sp!, {pc}^ ; --------------------------------------------------------------------------------------------------------- title_string DCB "AutoDrag",0 help_string DCB "AutoDrag ",9,"0.10 (09 Sep 1992)",0 ALIGN ; --------------------------------------------------------------------------------------------------------- release_swi_vector MOV r0, #8 LDR r1, [r0] LDR r2, new_branch ; check that our SWI decoder hasn't been replaced CMP r1, r2 LDREQ r1, old_branch ; replace original decoder if it hasn't STREQ r1, [r0] MOVEQ r0, #0 STREQ r1, old_branch MOVEQS pc, lr ADR r0, error_block ; otherwise return an error ORRS pc, lr, #V_FLAG error_block DCD &103 DCB "Can't detach SWI handler", 0 ALIGN ; --------------------------------------------------------------------------------------------------------- claim_swi_vector MOV r0, #8 LDR r0, [r0] ; get branch to SWI handler STR r0, old_branch ADR r1, second_branch-8 ; insert in our own code SUB r0, r0, r1, LSR #2 STR r0, second_branch ADD r0, r0, #(second_branch-first_branch) / 4 SUB r0, r0, #&D0000000 STR r0, first_branch ; convert to a BNE MOV r1, #8 ADR r0, swi_patch-8-8 MOV r0, r0, LSR #2 ADD r0, r0, #&EA000000 STR r0, [r1] STR r0, new_branch ; put in a branch to our code MOV pc, lr ; --------------------------------------------------------------------------------------------------------- swi_patch STMFD sp!,{lr} BIC lr, lr, #&FC000003 LDR lr, [lr,#-4] ; get SWI instruction BIC lr, lr, #&FF000000 BIC lr, lr, #&20000 SUB lr, lr, #&40000 CMP lr, #&D0 ; is it Wimp_DragBox ? LDMFD sp!, {lr} ; otherwise drop through to SWI handler first_branch DCD 0 STR lr, lr_store LDR lr, [r1,#4] ; get drag type CMP lr, #5 BNE continue ; check it's the right sort of drag ADR lr, register_dump STMIA lr,{r0,r1,sp} ADR r0, callback_code ; value in r1 appears in r12 in CallBack routine SWI XOS_AddCallBack ADR lr, register_dump LDMIA lr,{r0,r1,sp} LDR lr, lr_store MOVS pc, lr continue LDR lr, lr_store ; call Wimp_DragBox as usual second_branch DCD 0 register_dump % 256 sprite_name DCB "!edit",0 ALIGN callback_code STMFD sp!,{r0-r4,lr} MOV r0, #128 ADR r2, sprite_name ADD r3, r12, #8 ADD r4, r12, #24 MOV r1, #1 SWI XDragASprite_Start LDMFD sp!,{r0-r4,pc}^ ; --------------------------------------------------------------------------------------------------------- lr_store DCD 0 ; register storage for SWI decoder old_branch DCD 0 ; branch to original SWI decoder new_branch DCD 0 ; branch to our new SWI decoder END
00000000 3b 20 3e 20 64 72 61 67 5f 73 72 63 0a 72 30 20 |; > drag_src.r0 | 00000010 52 4e 20 30 0a 72 31 20 52 4e 20 31 0a 72 32 20 |RN 0.r1 RN 1.r2 | 00000020 52 4e 20 32 0a 72 33 20 52 4e 20 33 0a 72 34 20 |RN 2.r3 RN 3.r4 | 00000030 52 4e 20 34 0a 72 35 20 52 4e 20 35 0a 72 36 20 |RN 4.r5 RN 5.r6 | 00000040 52 4e 20 36 0a 72 37 20 52 4e 20 37 0a 72 38 20 |RN 6.r7 RN 7.r8 | 00000050 52 4e 20 38 0a 72 39 20 52 4e 20 39 0a 72 31 30 |RN 8.r9 RN 9.r10| 00000060 20 52 4e 20 31 30 0a 72 31 31 20 52 4e 20 31 31 | RN 10.r11 RN 11| 00000070 0a 72 31 32 20 52 4e 20 31 32 0a 73 70 20 52 4e |.r12 RN 12.sp RN| 00000080 20 31 33 0a 6c 72 20 52 4e 20 31 34 0a 70 63 20 | 13.lr RN 14.pc | 00000090 52 4e 20 31 35 0a 0a 57 69 6d 70 5f 44 72 61 67 |RN 15..Wimp_Drag| 000000a0 42 6f 78 20 20 20 20 20 20 20 20 20 20 20 20 45 |Box E| 000000b0 51 55 20 26 34 30 30 44 30 0a 58 44 72 61 67 41 |QU &400D0.XDragA| 000000c0 53 70 72 69 74 65 5f 53 74 61 72 74 20 20 20 20 |Sprite_Start | 000000d0 20 20 45 51 55 20 26 36 32 34 30 30 0a 58 44 72 | EQU &62400.XDr| 000000e0 61 67 41 53 70 72 69 74 65 5f 53 74 6f 70 20 20 |agASprite_Stop | 000000f0 20 20 20 20 20 45 51 55 20 26 36 32 34 30 31 0a | EQU &62401.| 00000100 58 4f 53 5f 41 64 64 43 61 6c 6c 42 61 63 6b 20 |XOS_AddCallBack | 00000110 20 20 20 20 20 20 20 20 45 51 55 20 26 32 30 30 | EQU &200| 00000120 35 34 0a 56 5f 46 4c 41 47 20 20 20 20 20 20 20 |54.V_FLAG | 00000130 20 20 20 20 20 20 20 20 20 20 20 45 51 55 20 31 | EQU 1| 00000140 3a 53 48 4c 3a 32 38 0a 0a 6d 6f 64 75 6c 65 5f |:SHL:28..module_| 00000150 62 61 73 65 0a 20 20 20 20 20 20 20 20 44 43 44 |base. DCD| 00000160 20 20 20 20 20 30 0a 20 20 20 20 20 20 20 20 44 | 0. D| 00000170 43 44 20 20 20 20 20 69 6e 69 74 69 61 6c 69 73 |CD initialis| 00000180 65 20 2d 20 6d 6f 64 75 6c 65 5f 62 61 73 65 0a |e - module_base.| 00000190 20 20 20 20 20 20 20 20 44 43 44 20 20 20 20 20 | DCD | 000001a0 66 69 6e 61 6c 69 73 65 20 2d 20 6d 6f 64 75 6c |finalise - modul| 000001b0 65 5f 62 61 73 65 0a 20 20 20 20 20 20 20 20 44 |e_base. D| 000001c0 43 44 20 20 20 20 20 30 0a 20 20 20 20 20 20 20 |CD 0. | 000001d0 20 44 43 44 20 20 20 20 20 74 69 74 6c 65 5f 73 | DCD title_s| 000001e0 74 72 69 6e 67 20 2d 20 6d 6f 64 75 6c 65 5f 62 |tring - module_b| 000001f0 61 73 65 0a 20 20 20 20 20 20 20 20 44 43 44 20 |ase. DCD | 00000200 20 20 20 20 68 65 6c 70 5f 73 74 72 69 6e 67 20 | help_string | 00000210 2d 20 6d 6f 64 75 6c 65 5f 62 61 73 65 0a 20 20 |- module_base. | 00000220 20 20 20 20 20 20 44 43 44 20 20 20 20 20 30 0a | DCD 0.| 00000230 0a 0a 3b 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |..; ------------| 00000240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000290 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 69 |-------------..i| 000002a0 6e 69 74 69 61 6c 69 73 65 0a 20 20 20 20 20 20 |nitialise. | 000002b0 20 20 53 54 4d 46 44 20 20 20 73 70 21 2c 20 7b | STMFD sp!, {| 000002c0 6c 72 7d 0a 20 20 20 20 20 20 20 20 42 4c 20 20 |lr}. BL | 000002d0 20 20 20 20 63 6c 61 69 6d 5f 73 77 69 5f 76 65 | claim_swi_ve| 000002e0 63 74 6f 72 0a 20 20 20 20 20 20 20 20 4c 44 4d |ctor. LDM| 000002f0 46 44 20 20 20 73 70 21 2c 20 7b 70 63 7d 0a 0a |FD sp!, {pc}..| 00000300 3b 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |; --------------| 00000310 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000360 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 66 69 6e |-----------..fin| 00000370 61 6c 69 73 65 0a 20 20 20 20 20 20 20 20 53 54 |alise. ST| 00000380 4d 46 44 20 20 20 73 70 21 2c 20 7b 6c 72 7d 0a |MFD sp!, {lr}.| 00000390 20 20 20 20 20 20 20 20 42 4c 20 20 20 20 20 20 | BL | 000003a0 72 65 6c 65 61 73 65 5f 73 77 69 5f 76 65 63 74 |release_swi_vect| 000003b0 6f 72 0a 20 20 20 20 20 20 20 20 4c 44 4d 46 44 |or. LDMFD| 000003c0 20 20 20 73 70 21 2c 20 7b 70 63 7d 5e 0a 0a 3b | sp!, {pc}^..;| 000003d0 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ---------------| 000003e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000430 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 74 69 74 6c |----------..titl| 00000440 65 5f 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 |e_string. | 00000450 20 44 43 42 20 20 20 20 20 22 41 75 74 6f 44 72 | DCB "AutoDr| 00000460 61 67 22 2c 30 0a 0a 68 65 6c 70 5f 73 74 72 69 |ag",0..help_stri| 00000470 6e 67 0a 20 20 20 20 20 20 20 20 44 43 42 20 20 |ng. DCB | 00000480 20 20 20 22 41 75 74 6f 44 72 61 67 20 22 2c 39 | "AutoDrag ",9| 00000490 2c 22 30 2e 31 30 20 28 30 39 20 53 65 70 20 31 |,"0.10 (09 Sep 1| 000004a0 39 39 32 29 22 2c 30 0a 20 20 20 20 20 20 20 20 |992)",0. | 000004b0 41 4c 49 47 4e 0a 0a 3b 20 2d 2d 2d 2d 2d 2d 2d |ALIGN..; -------| 000004c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000520 2d 2d 0a 0a 72 65 6c 65 61 73 65 5f 73 77 69 5f |--..release_swi_| 00000530 76 65 63 74 6f 72 0a 20 20 20 20 20 20 20 20 4d |vector. M| 00000540 4f 56 20 20 20 20 20 72 30 2c 20 23 38 0a 20 20 |OV r0, #8. | 00000550 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 72 31 | LDR r1| 00000560 2c 20 5b 72 30 5d 0a 20 20 20 20 20 20 20 20 4c |, [r0]. L| 00000570 44 52 20 20 20 20 20 72 32 2c 20 6e 65 77 5f 62 |DR r2, new_b| 00000580 72 61 6e 63 68 20 20 20 20 20 20 20 20 20 20 20 |ranch | 00000590 20 20 20 20 20 20 20 3b 20 63 68 65 63 6b 20 74 | ; check t| 000005a0 68 61 74 20 6f 75 72 20 53 57 49 20 64 65 63 6f |hat our SWI deco| 000005b0 64 65 72 20 68 61 73 6e 27 74 20 62 65 65 6e 20 |der hasn't been | 000005c0 72 65 70 6c 61 63 65 64 0a 20 20 20 20 20 20 20 |replaced. | 000005d0 20 43 4d 50 20 20 20 20 20 72 31 2c 20 72 32 0a | CMP r1, r2.| 000005e0 20 20 20 20 20 20 20 20 4c 44 52 45 51 20 20 20 | LDREQ | 000005f0 72 31 2c 20 6f 6c 64 5f 62 72 61 6e 63 68 20 20 |r1, old_branch | 00000600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000610 3b 20 72 65 70 6c 61 63 65 20 6f 72 69 67 69 6e |; replace origin| 00000620 61 6c 20 64 65 63 6f 64 65 72 20 69 66 20 69 74 |al decoder if it| 00000630 20 68 61 73 6e 27 74 0a 20 20 20 20 20 20 20 20 | hasn't. | 00000640 53 54 52 45 51 20 20 20 72 31 2c 20 5b 72 30 5d |STREQ r1, [r0]| 00000650 0a 20 20 20 20 20 20 20 20 4d 4f 56 45 51 20 20 |. MOVEQ | 00000660 20 72 30 2c 20 23 30 0a 20 20 20 20 20 20 20 20 | r0, #0. | 00000670 53 54 52 45 51 20 20 20 72 31 2c 20 6f 6c 64 5f |STREQ r1, old_| 00000680 62 72 61 6e 63 68 0a 20 20 20 20 20 20 20 20 4d |branch. M| 00000690 4f 56 45 51 53 20 20 70 63 2c 20 6c 72 0a 0a 20 |OVEQS pc, lr.. | 000006a0 20 20 20 20 20 20 20 41 44 52 20 20 20 72 30 2c | ADR r0,| 000006b0 20 65 72 72 6f 72 5f 62 6c 6f 63 6b 20 20 20 20 | error_block | 000006c0 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 6f | ; o| 000006d0 74 68 65 72 77 69 73 65 20 72 65 74 75 72 6e 20 |therwise return | 000006e0 61 6e 20 65 72 72 6f 72 0a 20 20 20 20 20 20 20 |an error. | 000006f0 20 4f 52 52 53 20 20 70 63 2c 20 6c 72 2c 20 23 | ORRS pc, lr, #| 00000700 56 5f 46 4c 41 47 0a 0a 65 72 72 6f 72 5f 62 6c |V_FLAG..error_bl| 00000710 6f 63 6b 20 20 20 20 20 44 43 44 20 20 20 20 20 |ock DCD | 00000720 26 31 30 33 0a 20 20 20 20 20 20 20 20 20 20 20 |&103. | 00000730 20 20 20 20 20 44 43 42 20 20 20 20 20 22 43 61 | DCB "Ca| 00000740 6e 27 74 20 64 65 74 61 63 68 20 53 57 49 20 68 |n't detach SWI h| 00000750 61 6e 64 6c 65 72 22 2c 20 30 0a 20 20 20 20 20 |andler", 0. | 00000760 20 20 20 20 20 20 20 20 20 20 20 41 4c 49 47 4e | ALIGN| 00000770 0a 0a 3b 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |..; ------------| 00000780 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000007d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 63 |-------------..c| 000007e0 6c 61 69 6d 5f 73 77 69 5f 76 65 63 74 6f 72 0a |laim_swi_vector.| 000007f0 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 | MOV | 00000800 72 30 2c 20 23 38 0a 20 20 20 20 20 20 20 20 4c |r0, #8. L| 00000810 44 52 20 20 20 20 20 72 30 2c 20 5b 72 30 5d 20 |DR r0, [r0] | 00000820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000830 20 20 20 20 20 20 20 3b 20 67 65 74 20 62 72 61 | ; get bra| 00000840 6e 63 68 20 74 6f 20 53 57 49 20 68 61 6e 64 6c |nch to SWI handl| 00000850 65 72 0a 20 20 20 20 20 20 20 20 53 54 52 20 20 |er. STR | 00000860 20 20 20 72 30 2c 20 6f 6c 64 5f 62 72 61 6e 63 | r0, old_branc| 00000870 68 0a 0a 20 20 20 20 20 20 20 20 41 44 52 20 20 |h.. ADR | 00000880 20 20 20 72 31 2c 20 73 65 63 6f 6e 64 5f 62 72 | r1, second_br| 00000890 61 6e 63 68 2d 38 20 20 20 20 20 20 20 20 20 20 |anch-8 | 000008a0 20 20 20 3b 20 69 6e 73 65 72 74 20 69 6e 20 6f | ; insert in o| 000008b0 75 72 20 6f 77 6e 20 63 6f 64 65 0a 20 20 20 20 |ur own code. | 000008c0 20 20 20 20 53 55 42 20 20 20 20 20 72 30 2c 20 | SUB r0, | 000008d0 72 30 2c 20 72 31 2c 20 4c 53 52 20 23 32 0a 20 |r0, r1, LSR #2. | 000008e0 20 20 20 20 20 20 20 53 54 52 20 20 20 20 20 72 | STR r| 000008f0 30 2c 20 73 65 63 6f 6e 64 5f 62 72 61 6e 63 68 |0, second_branch| 00000900 0a 0a 20 20 20 20 20 20 20 20 41 44 44 20 20 20 |.. ADD | 00000910 20 20 72 30 2c 20 72 30 2c 20 23 28 73 65 63 6f | r0, r0, #(seco| 00000920 6e 64 5f 62 72 61 6e 63 68 2d 66 69 72 73 74 5f |nd_branch-first_| 00000930 62 72 61 6e 63 68 29 20 2f 20 34 0a 20 20 20 20 |branch) / 4. | 00000940 20 20 20 20 53 55 42 20 20 20 20 20 72 30 2c 20 | SUB r0, | 00000950 72 30 2c 20 23 26 44 30 30 30 30 30 30 30 0a 20 |r0, #&D0000000. | 00000960 20 20 20 20 20 20 20 53 54 52 20 20 20 20 20 72 | STR r| 00000970 30 2c 20 66 69 72 73 74 5f 62 72 61 6e 63 68 20 |0, first_branch | 00000980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00000990 20 63 6f 6e 76 65 72 74 20 74 6f 20 61 20 42 4e | convert to a BN| 000009a0 45 0a 0a 20 20 20 20 20 20 20 20 4d 4f 56 20 20 |E.. MOV | 000009b0 20 20 20 72 31 2c 20 23 38 0a 20 20 20 20 20 20 | r1, #8. | 000009c0 20 20 41 44 52 20 20 20 20 20 72 30 2c 20 73 77 | ADR r0, sw| 000009d0 69 5f 70 61 74 63 68 2d 38 2d 38 0a 20 20 20 20 |i_patch-8-8. | 000009e0 20 20 20 20 4d 4f 56 20 20 20 20 20 72 30 2c 20 | MOV r0, | 000009f0 72 30 2c 20 4c 53 52 20 23 32 0a 20 20 20 20 20 |r0, LSR #2. | 00000a00 20 20 20 41 44 44 20 20 20 20 20 72 30 2c 20 72 | ADD r0, r| 00000a10 30 2c 20 23 26 45 41 30 30 30 30 30 30 0a 20 20 |0, #&EA000000. | 00000a20 20 20 20 20 20 20 53 54 52 20 20 20 20 20 72 30 | STR r0| 00000a30 2c 20 5b 72 31 5d 0a 20 20 20 20 20 20 20 20 53 |, [r1]. S| 00000a40 54 52 20 20 20 20 20 72 30 2c 20 6e 65 77 5f 62 |TR r0, new_b| 00000a50 72 61 6e 63 68 20 20 20 20 20 20 20 20 20 20 20 |ranch | 00000a60 20 20 20 20 20 20 20 3b 20 70 75 74 20 69 6e 20 | ; put in | 00000a70 61 20 62 72 61 6e 63 68 20 74 6f 20 6f 75 72 20 |a branch to our | 00000a80 63 6f 64 65 0a 0a 20 20 20 20 20 20 20 20 4d 4f |code.. MO| 00000a90 56 20 20 20 20 20 70 63 2c 20 6c 72 0a 0a 3b 20 |V pc, lr..; | 00000aa0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000b00 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 73 77 69 5f 70 |---------..swi_p| 00000b10 61 74 63 68 0a 20 20 20 20 20 20 20 20 53 54 4d |atch. STM| 00000b20 46 44 20 20 20 73 70 21 2c 7b 6c 72 7d 0a 20 20 |FD sp!,{lr}. | 00000b30 20 20 20 20 20 20 42 49 43 20 20 20 20 20 6c 72 | BIC lr| 00000b40 2c 20 6c 72 2c 20 23 26 46 43 30 30 30 30 30 33 |, lr, #&FC000003| 00000b50 0a 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 |. LDR | 00000b60 20 6c 72 2c 20 5b 6c 72 2c 23 2d 34 5d 20 20 20 | lr, [lr,#-4] | 00000b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000b80 20 3b 20 67 65 74 20 53 57 49 20 69 6e 73 74 72 | ; get SWI instr| 00000b90 75 63 74 69 6f 6e 0a 0a 20 20 20 20 20 20 20 20 |uction.. | 00000ba0 42 49 43 20 20 20 20 20 6c 72 2c 20 6c 72 2c 20 |BIC lr, lr, | 00000bb0 23 26 46 46 30 30 30 30 30 30 0a 20 20 20 20 20 |#&FF000000. | 00000bc0 20 20 20 42 49 43 20 20 20 20 20 6c 72 2c 20 6c | BIC lr, l| 00000bd0 72 2c 20 23 26 32 30 30 30 30 0a 20 20 20 20 20 |r, #&20000. | 00000be0 20 20 20 53 55 42 20 20 20 20 20 6c 72 2c 20 6c | SUB lr, l| 00000bf0 72 2c 20 23 26 34 30 30 30 30 0a 20 20 20 20 20 |r, #&40000. | 00000c00 20 20 20 43 4d 50 20 20 20 20 20 6c 72 2c 20 23 | CMP lr, #| 00000c10 26 44 30 20 20 20 20 20 20 20 20 20 20 20 20 20 |&D0 | 00000c20 20 20 20 20 20 20 20 20 20 20 20 3b 20 69 73 20 | ; is | 00000c30 69 74 20 57 69 6d 70 5f 44 72 61 67 42 6f 78 20 |it Wimp_DragBox | 00000c40 3f 0a 0a 20 20 20 20 20 20 20 20 4c 44 4d 46 44 |?.. LDMFD| 00000c50 20 73 70 21 2c 20 7b 6c 72 7d 20 20 20 20 20 20 | sp!, {lr} | 00000c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000c70 20 20 20 3b 20 6f 74 68 65 72 77 69 73 65 20 64 | ; otherwise d| 00000c80 72 6f 70 20 74 68 72 6f 75 67 68 20 74 6f 20 53 |rop through to S| 00000c90 57 49 20 68 61 6e 64 6c 65 72 0a 66 69 72 73 74 |WI handler.first| 00000ca0 5f 62 72 61 6e 63 68 0a 20 20 20 20 20 20 20 20 |_branch. | 00000cb0 44 43 44 20 20 20 20 20 30 0a 0a 20 20 20 20 20 |DCD 0.. | 00000cc0 20 20 20 53 54 52 20 20 20 20 20 6c 72 2c 20 6c | STR lr, l| 00000cd0 72 5f 73 74 6f 72 65 0a 20 20 20 20 20 20 20 20 |r_store. | 00000ce0 4c 44 52 20 20 20 20 20 6c 72 2c 20 5b 72 31 2c |LDR lr, [r1,| 00000cf0 23 34 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 |#4] | 00000d00 20 20 20 20 20 20 20 20 3b 20 67 65 74 20 64 72 | ; get dr| 00000d10 61 67 20 74 79 70 65 0a 20 20 20 20 20 20 20 20 |ag type. | 00000d20 43 4d 50 20 20 20 20 20 6c 72 2c 20 23 35 0a 20 |CMP lr, #5. | 00000d30 20 20 20 20 20 20 20 42 4e 45 20 20 20 20 20 63 | BNE c| 00000d40 6f 6e 74 69 6e 75 65 20 20 20 20 20 20 20 20 20 |ontinue | 00000d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00000d60 20 63 68 65 63 6b 20 69 74 27 73 20 74 68 65 20 | check it's the | 00000d70 72 69 67 68 74 20 73 6f 72 74 20 6f 66 20 64 72 |right sort of dr| 00000d80 61 67 0a 0a 20 20 20 20 20 20 20 20 41 44 52 20 |ag.. ADR | 00000d90 20 20 20 20 6c 72 2c 20 72 65 67 69 73 74 65 72 | lr, register| 00000da0 5f 64 75 6d 70 0a 20 20 20 20 20 20 20 20 53 54 |_dump. ST| 00000db0 4d 49 41 20 20 20 6c 72 2c 7b 72 30 2c 72 31 2c |MIA lr,{r0,r1,| 00000dc0 73 70 7d 0a 0a 20 20 20 20 20 20 20 20 41 44 52 |sp}.. ADR| 00000dd0 20 20 20 20 20 72 30 2c 20 63 61 6c 6c 62 61 63 | r0, callbac| 00000de0 6b 5f 63 6f 64 65 20 20 20 20 20 20 20 20 20 20 |k_code | 00000df0 20 20 20 20 20 3b 20 76 61 6c 75 65 20 69 6e 20 | ; value in | 00000e00 72 31 20 61 70 70 65 61 72 73 20 69 6e 20 72 31 |r1 appears in r1| 00000e10 32 20 69 6e 20 43 61 6c 6c 42 61 63 6b 20 72 6f |2 in CallBack ro| 00000e20 75 74 69 6e 65 0a 20 20 20 20 20 20 20 20 53 57 |utine. SW| 00000e30 49 20 20 20 20 20 58 4f 53 5f 41 64 64 43 61 6c |I XOS_AddCal| 00000e40 6c 42 61 63 6b 0a 0a 20 20 20 20 20 20 20 20 41 |lBack.. A| 00000e50 44 52 20 20 20 20 20 6c 72 2c 20 72 65 67 69 73 |DR lr, regis| 00000e60 74 65 72 5f 64 75 6d 70 0a 20 20 20 20 20 20 20 |ter_dump. | 00000e70 20 4c 44 4d 49 41 20 20 20 6c 72 2c 7b 72 30 2c | LDMIA lr,{r0,| 00000e80 72 31 2c 73 70 7d 0a 20 20 20 20 20 20 20 20 0a |r1,sp}. .| 00000e90 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 | LDR | 00000ea0 6c 72 2c 20 6c 72 5f 73 74 6f 72 65 0a 20 20 20 |lr, lr_store. | 00000eb0 20 20 20 20 20 4d 4f 56 53 20 20 20 20 70 63 2c | MOVS pc,| 00000ec0 20 6c 72 0a 0a 63 6f 6e 74 69 6e 75 65 0a 20 20 | lr..continue. | 00000ed0 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 6c 72 | LDR lr| 00000ee0 2c 20 6c 72 5f 73 74 6f 72 65 20 20 20 20 20 20 |, lr_store | 00000ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00000f00 63 61 6c 6c 20 57 69 6d 70 5f 44 72 61 67 42 6f |call Wimp_DragBo| 00000f10 78 20 61 73 20 75 73 75 61 6c 0a 73 65 63 6f 6e |x as usual.secon| 00000f20 64 5f 62 72 61 6e 63 68 0a 20 20 20 20 20 20 20 |d_branch. | 00000f30 20 44 43 44 20 20 20 20 20 30 0a 0a 72 65 67 69 | DCD 0..regi| 00000f40 73 74 65 72 5f 64 75 6d 70 0a 20 20 20 20 20 20 |ster_dump. | 00000f50 20 20 25 20 20 20 20 20 20 20 32 35 36 0a 0a 73 | % 256..s| 00000f60 70 72 69 74 65 5f 6e 61 6d 65 0a 20 20 20 20 20 |prite_name. | 00000f70 20 20 20 44 43 42 20 20 20 20 20 22 21 65 64 69 | DCB "!edi| 00000f80 74 22 2c 30 0a 20 20 20 20 20 20 20 20 41 4c 49 |t",0. ALI| 00000f90 47 4e 0a 0a 63 61 6c 6c 62 61 63 6b 5f 63 6f 64 |GN..callback_cod| 00000fa0 65 0a 20 20 20 20 20 20 20 20 53 54 4d 46 44 20 |e. STMFD | 00000fb0 20 20 73 70 21 2c 7b 72 30 2d 72 34 2c 6c 72 7d | sp!,{r0-r4,lr}| 00000fc0 0a 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 |. MOV | 00000fd0 20 72 30 2c 20 23 31 32 38 0a 20 20 20 20 20 20 | r0, #128. | 00000fe0 20 20 41 44 52 20 20 20 20 20 72 32 2c 20 73 70 | ADR r2, sp| 00000ff0 72 69 74 65 5f 6e 61 6d 65 0a 20 20 20 20 20 20 |rite_name. | 00001000 20 20 41 44 44 20 20 20 20 20 72 33 2c 20 72 31 | ADD r3, r1| 00001010 32 2c 20 23 38 0a 20 20 20 20 20 20 20 20 41 44 |2, #8. AD| 00001020 44 20 20 20 20 20 72 34 2c 20 72 31 32 2c 20 23 |D r4, r12, #| 00001030 32 34 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 |24 . | 00001040 20 20 20 4d 4f 56 20 20 20 20 20 72 31 2c 20 23 | MOV r1, #| 00001050 31 0a 20 20 20 20 20 20 20 20 53 57 49 20 20 20 |1. SWI | 00001060 20 20 58 44 72 61 67 41 53 70 72 69 74 65 5f 53 | XDragASprite_S| 00001070 74 61 72 74 0a 20 20 20 20 20 20 20 20 4c 44 4d |tart. LDM| 00001080 46 44 20 20 20 73 70 21 2c 7b 72 30 2d 72 34 2c |FD sp!,{r0-r4,| 00001090 70 63 7d 5e 0a 0a 3b 20 2d 2d 2d 2d 2d 2d 2d 2d |pc}^..; --------| 000010a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001100 2d 0a 0a 6c 72 5f 73 74 6f 72 65 20 20 20 20 20 |-..lr_store | 00001110 20 20 20 44 43 44 20 20 20 20 20 30 20 20 20 20 | DCD 0 | 00001120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001130 20 20 20 3b 20 72 65 67 69 73 74 65 72 20 73 74 | ; register st| 00001140 6f 72 61 67 65 20 66 6f 72 20 53 57 49 20 64 65 |orage for SWI de| 00001150 63 6f 64 65 72 0a 6f 6c 64 5f 62 72 61 6e 63 68 |coder.old_branch| 00001160 20 20 20 20 20 20 44 43 44 20 20 20 20 20 30 20 | DCD 0 | 00001170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001180 20 20 20 20 20 20 3b 20 62 72 61 6e 63 68 20 74 | ; branch t| 00001190 6f 20 6f 72 69 67 69 6e 61 6c 20 53 57 49 20 64 |o original SWI d| 000011a0 65 63 6f 64 65 72 0a 6e 65 77 5f 62 72 61 6e 63 |ecoder.new_branc| 000011b0 68 20 20 20 20 20 20 44 43 44 20 20 20 20 20 30 |h DCD 0| 000011c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000011d0 20 20 20 20 20 20 20 3b 20 62 72 61 6e 63 68 20 | ; branch | 000011e0 74 6f 20 6f 75 72 20 6e 65 77 20 53 57 49 20 64 |to our new SWI d| 000011f0 65 63 6f 64 65 72 20 20 20 20 20 20 20 20 20 20 |ecoder | 00001200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001210 20 20 20 20 20 0a 0a 20 20 20 45 4e 44 0a | .. END.| 0000121e