Home » Archimedes archive » Micro User » MU 1992-01.adf » PDstuffing » Twilight/+TwPRD/c/bounce
Twilight/+TwPRD/c/bounce
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 » Micro User » MU 1992-01.adf » PDstuffing |
Filename: | Twilight/+TwPRD/c/bounce |
Read OK: | ✔ |
File size: | 1A7D bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
; Project name Twilight ; Part Bounce ; Purpose Effect bouncy balls ; Filename !Twilight.Effects.Bounce ; Author Ben ; Last modified 28/9/91 GET h.swis GET h.effectdefs number_of_balls EQU 4 speed_div_by EQU 3 p_speed EQU 0 ball_dia EQU 32 required_colour_average EQU 512 x_gravity_div EQU 4 redraw_times EQU 4 sign_xv EQU 2_1 sign_yv EQU 2_10 DCB "TwEffect" DCD message DCD 0 ; control description DCD 0 ; default control data DCD init DCD poll DCD finalise DCD 2_110 ; flags message DCB "Bouncy balls. You just can't avoid them.",0 ALIGN init STMFD R13!,{R1,R14} MOV R0,#6 ; claim MOV R3,#work_end - work_start SWI XOS_Module BVS init_error STR R2,[R11] MOV R11,R2 LDMFD R13!,{R8} LDR R0,[R8] MOV R1,#speed_div_by MOV R14,PC LDR PC,[R10,#e_div] STR R3,max_speed ADR R2,balls MOV R4,#number_of_balls init_ball_loop LDR R0,[R10,#e_maxx] SUB R0,R0,#ball_dia MOV R14,PC LDR PC,[R10,#e_random] STR R0,[R2,#ball_x] LDR R0,[R10,#e_maxy] SUB R0,R0,#ball_dia MOV R14,PC LDR PC,[R10,#e_random] STR R0,[R2,#ball_y] MOV R0,R3,LSL#1 MOV R14,PC LDR PC,[R10,#e_random] SUB R0,R0,R3 CMP R0,#0 MOVEQ R0,#-2 STR R0,[R2,#ball_xv] MOV R0,R3,LSR#1 MOV R14,PC LDR PC,[R10,#e_random] MOV R0,R0,LSL#1 SUB R0,R0,R3 CMP R0,#0 MOVEQ R0,#-2 STR R0,[R2,#ball_yv] ADD R2,R2,#ball_size SUBS R4,R4,#1 BNE init_ball_loop LDR R4,[R10,#e_colours] CMP R4,#number_of_balls MOVGT R4,#number_of_balls init_palette_loop LDR R0,init_max_palette_number MOV R14,PC LDR PC,[R10,#e_random] AND R3,R0,#255 MOV R2,R0,LSR#8 AND R2,R2,#255 MOV R1,R0,LSR#16 AND R1,R1,#255 ADD R0,R1,R2 ADD R0,R0,R3 RSBS R0,R0,#required_colour_average ADDGT R1,R1,R0,LSR#1 ADDGT R3,R3,R0,LSR#1 SWI XOS_WriteI+19 MOV R0,R4 SWI XOS_WriteC SWI XOS_WriteI+16 MOV R0,R1 SWI XOS_WriteC MOV R0,R2 SWI XOS_WriteC MOV R0,R3 SWI XOS_WriteC SUBS R4,R4,#1 BNE init_palette_loop ADR R0,balls MOV R5,#number_of_balls MOV R4,#1 LDR R6,[R10,#e_colours] init_draw_balls_loop MOV R7,R0 CMP R4,R6 MOVGT R4,R6 MOV R1,R4 MOV R0,R7 BL draw_ball ADD R0,R0,#ball_size ADD R4,R4,#1 SUBS R5,R5,#1 BNE init_draw_balls_loop LDMFD R13!,{PC} init_error LDMFD R13!,{R14} ORRS PC,R14,#v_flag init_max_palette_number DCD &FFFFFF ALIGN ; R0 = pointer to ball to draw ; R1 = colour draw_ball STMFD R13!,{R0-R2,R5-R7,R14} MOV R6,R0 MOV R7,R1 SWI XOS_WriteI+18 SWI XOS_WriteI+0 SWI XOS_WriteI+0 MOV R0,#4 LDR R1,[R6,#ball_x] LDR R2,[R6,#ball_y] SWI XOS_Plot MOV R0,#101 LDR R1,[R6,#ball_x] ADD R1,R1,#ball_dia LDR R2,[R6,#ball_y] ADD R2,R2,#ball_dia SWI XOS_Plot SWI XOS_WriteI+18 SWI XOS_WriteI+0 MOV R0,R7 SWI XOS_WriteC MOV R0,#4 LDR R7,[R6,#ball_x] LDR R5,[R6,#ball_y] ADD R1,R7,#ball_dia/2 ADD R2,R5,#ball_dia/2 SWI XOS_Plot MOV R0,#157 ; circle fill ADD R1,R7,#ball_dia ADD R2,R5,#ball_dia/2 SWI XOS_Plot LDMFD R13!,{R0-R2,R5-R7,PC}^ poll STMFD R13!,{R14} LDR R11,[R11] ADR R8,balls MOV R7,#number_of_balls MOV R6,#1 process_ball_loop MOV R0,#0 STR R0,rd ; move to current position LDR R3,[R8,#ball_x] LDR R4,[R8,#ball_y] MOV R0,#4 ; move MOV R1,R3 MOV R2,R4 SWI XOS_Plot MOV R0,#4 ADD R1,R3,#ball_dia ADD R2,R4,#ball_dia SWI XOS_Plot ; recalculate ball LDR R0,[R8,#ball_x] LDR R1,[R8,#ball_xv] ADD R0,R0,R1 STR R0,[R8,#ball_x] LDR R1,[R10,#e_maxx] SUB R1,R1,#ball_dia CMP R0,#0 BLE reverse_xv CMP R0,R1 BGE reverse_xv reverse_xv_return LDR R0,[R8,#ball_y] LDR R1,[R8,#ball_yv] ADD R0,R0,R1 STR R0,[R8,#ball_y] LDR R1,[R10,#e_maxy] SUB R1,R1,#ball_dia CMP R0,#0 BLE reverse_yv CMP R0,R1 BGE reverse_yv reverse_yv_return ; move old ball to new position MOV R0,#189 ; block move LDR R1,[R8,#ball_x] LDR R2,[R8,#ball_y] SWI XOS_Plot LDR R0,rd CMP R0,#0 MOVNE R0,#redraw_times STRNE R0,[R8,#ball_rd] LDR R0,[R8,#ball_rd] SUBS R0,R0,#1 BLT after_redraw_ball STR R0,[R8,#ball_rd] ; SWI XOS_WriteI+18 ; SWI XOS_WriteI+0 MOV R1,R6 ; SWI XOS_WriteC MOV R0,R8 BL draw_ball after_redraw_ball ; LDR R0,rd ; STR R0,[R8,#ball_rd] LDR R0,[R10,#e_colours] ADD R6,R6,#1 CMP R6,R0 MOVGT R6,R0 ADD R8,R8,#ball_size SUBS R7,R7,#1 BNE process_ball_loop ADR R8,balls MOV R7,#number_of_balls MOV R6,#1 check_collisions_loop ADR R5,balls MOV R4,#number_of_balls check_collisions_loop2 CMP R4,R7 BEQ check_collisions_loop2_after_check LDR R3,[R8,#ball_x] ADD R2,R3,#ball_dia LDR R0,[R5,#ball_x] ADD R1,R0,#ball_dia check1a CMP R1,R3 BLT check2a check1b CMP R1,R2 BLT check_y check2a CMP R0,R3 BLT check_collisions_loop2_after_check check2b CMP R0,R2 BGT check_collisions_loop2_after_check check_y LDR R3,[R8,#ball_y] ADD R2,R3,#ball_dia LDR R0,[R5,#ball_y] ADD R1,R0,#ball_dia check3a CMP R1,R3 BLT check4a check3b CMP R1,R2 BLT collision check4a CMP R0,R3 BLT check_collisions_loop2_after_check check4b CMP R0,R2 BGT check_collisions_loop2_after_check collision MOV R0,#redraw_times STR R0,[R8,#ball_rd] STR R0,[R5,#ball_rd] LDR R0,[R8,#ball_xv] LDR R1,[R8,#ball_yv] STR R1,[R8,#ball_xv] RSB R0,R0,#0 STR R0,[R8,#ball_yv] LDR R0,[R5,#ball_xv] LDR R1,[R5,#ball_yv] STR R1,[R5,#ball_xv] RSB R0,R0,#0 STR R0,[R5,#ball_yv] check_collisions_loop2_after_check ADD R5,R5,#ball_size SUBS R4,R4,#1 BNE check_collisions_loop2 LDR R0,[R10,#e_colours] ADD R6,R6,#1 CMP R6,R0 MOVGT R6,R0 ADD R8,R8,#ball_size SUBS R7,R7,#1 BNE check_collisions_loop LDMFD R13!,{PC} reverse_xv LDR R0,[R8,#ball_xv] RSB R0,R0,#0 STR R0,[R8,#ball_xv] MOV R0,#1 STR R0,rd B reverse_xv_return reverse_yv LDR R0,[R8,#ball_yv] RSB R0,R0,#0 STR R0,[R8,#ball_yv] MOV R0,#1 STR R0,rd B reverse_yv_return finalise STMFD R13!,{R14} LDR R11,[R11] MOV R0,#7 ; free block in RMA MOV R2,R11 SWI XOS_Module ; free block LDMFD R13!,{PC} ; *************** workspace definitions ball_x EQU 0 ball_y EQU 4 ball_xv EQU 8 ball_yv EQU 12 ball_rd EQU 16 ball_size EQU 20 LTORG ^ 0,R11 work_start # 0 rd # 4 max_speed # 4 balls # ball_size * number_of_balls work_end # 0 END
00000000 20 20 20 3b 20 50 72 6f 6a 65 63 74 20 6e 61 6d | ; Project nam| 00000010 65 20 20 20 20 54 77 69 6c 69 67 68 74 0a 20 20 |e Twilight. | 00000020 20 3b 20 50 61 72 74 20 20 20 20 20 20 20 20 20 | ; Part | 00000030 20 20 20 42 6f 75 6e 63 65 0a 20 20 20 3b 20 50 | Bounce. ; P| 00000040 75 72 70 6f 73 65 20 20 20 20 20 20 20 20 20 45 |urpose E| 00000050 66 66 65 63 74 20 62 6f 75 6e 63 79 20 62 61 6c |ffect bouncy bal| 00000060 6c 73 0a 20 20 20 3b 20 46 69 6c 65 6e 61 6d 65 |ls. ; Filename| 00000070 20 20 20 20 20 20 20 20 21 54 77 69 6c 69 67 68 | !Twiligh| 00000080 74 2e 45 66 66 65 63 74 73 2e 42 6f 75 6e 63 65 |t.Effects.Bounce| 00000090 0a 20 20 20 3b 20 41 75 74 68 6f 72 20 20 20 20 |. ; Author | 000000a0 20 20 20 20 20 20 42 65 6e 0a 20 20 20 3b 20 4c | Ben. ; L| 000000b0 61 73 74 20 6d 6f 64 69 66 69 65 64 20 20 20 32 |ast modified 2| 000000c0 38 2f 39 2f 39 31 0a 0a 20 47 45 54 20 68 2e 73 |8/9/91.. GET h.s| 000000d0 77 69 73 0a 20 47 45 54 20 68 2e 65 66 66 65 63 |wis. GET h.effec| 000000e0 74 64 65 66 73 0a 0a 6e 75 6d 62 65 72 5f 6f 66 |tdefs..number_of| 000000f0 5f 62 61 6c 6c 73 20 45 51 55 20 34 0a 0a 73 70 |_balls EQU 4..sp| 00000100 65 65 64 5f 64 69 76 5f 62 79 20 45 51 55 20 33 |eed_div_by EQU 3| 00000110 0a 0a 70 5f 73 70 65 65 64 20 45 51 55 20 30 0a |..p_speed EQU 0.| 00000120 0a 62 61 6c 6c 5f 64 69 61 20 45 51 55 20 33 32 |.ball_dia EQU 32| 00000130 0a 0a 72 65 71 75 69 72 65 64 5f 63 6f 6c 6f 75 |..required_colou| 00000140 72 5f 61 76 65 72 61 67 65 20 45 51 55 20 35 31 |r_average EQU 51| 00000150 32 0a 0a 78 5f 67 72 61 76 69 74 79 5f 64 69 76 |2..x_gravity_div| 00000160 20 45 51 55 20 34 0a 0a 72 65 64 72 61 77 5f 74 | EQU 4..redraw_t| 00000170 69 6d 65 73 20 45 51 55 20 34 0a 0a 73 69 67 6e |imes EQU 4..sign| 00000180 5f 78 76 20 45 51 55 20 32 5f 31 0a 73 69 67 6e |_xv EQU 2_1.sign| 00000190 5f 79 76 20 45 51 55 20 32 5f 31 30 0a 0a 20 44 |_yv EQU 2_10.. D| 000001a0 43 42 20 22 54 77 45 66 66 65 63 74 22 0a 20 44 |CB "TwEffect". D| 000001b0 43 44 20 6d 65 73 73 61 67 65 0a 20 44 43 44 20 |CD message. DCD | 000001c0 30 20 20 20 20 20 3b 20 63 6f 6e 74 72 6f 6c 20 |0 ; control | 000001d0 64 65 73 63 72 69 70 74 69 6f 6e 0a 20 44 43 44 |description. DCD| 000001e0 20 30 20 20 20 20 20 3b 20 64 65 66 61 75 6c 74 | 0 ; default| 000001f0 20 63 6f 6e 74 72 6f 6c 20 64 61 74 61 0a 20 44 | control data. D| 00000200 43 44 20 69 6e 69 74 0a 20 44 43 44 20 70 6f 6c |CD init. DCD pol| 00000210 6c 0a 20 44 43 44 20 66 69 6e 61 6c 69 73 65 0a |l. DCD finalise.| 00000220 20 44 43 44 20 32 5f 31 31 30 20 20 3b 20 66 6c | DCD 2_110 ; fl| 00000230 61 67 73 0a 0a 6d 65 73 73 61 67 65 0a 20 44 43 |ags..message. DC| 00000240 42 20 22 42 6f 75 6e 63 79 20 62 61 6c 6c 73 2e |B "Bouncy balls.| 00000250 20 59 6f 75 20 6a 75 73 74 20 63 61 6e 27 74 20 | You just can't | 00000260 61 76 6f 69 64 20 74 68 65 6d 2e 22 2c 30 0a 20 |avoid them.",0. | 00000270 41 4c 49 47 4e 0a 0a 69 6e 69 74 0a 20 53 54 4d |ALIGN..init. STM| 00000280 46 44 20 52 31 33 21 2c 7b 52 31 2c 52 31 34 7d |FD R13!,{R1,R14}| 00000290 0a 20 4d 4f 56 20 20 20 52 30 2c 23 36 20 20 3b |. MOV R0,#6 ;| 000002a0 20 63 6c 61 69 6d 0a 20 4d 4f 56 20 20 20 52 33 | claim. MOV R3| 000002b0 2c 23 77 6f 72 6b 5f 65 6e 64 20 2d 20 77 6f 72 |,#work_end - wor| 000002c0 6b 5f 73 74 61 72 74 0a 20 53 57 49 20 20 20 58 |k_start. SWI X| 000002d0 4f 53 5f 4d 6f 64 75 6c 65 0a 20 42 56 53 20 20 |OS_Module. BVS | 000002e0 20 69 6e 69 74 5f 65 72 72 6f 72 0a 20 53 54 52 | init_error. STR| 000002f0 20 20 20 52 32 2c 5b 52 31 31 5d 0a 20 4d 4f 56 | R2,[R11]. MOV| 00000300 20 20 20 52 31 31 2c 52 32 0a 20 4c 44 4d 46 44 | R11,R2. LDMFD| 00000310 20 52 31 33 21 2c 7b 52 38 7d 0a 20 4c 44 52 20 | R13!,{R8}. LDR | 00000320 20 20 52 30 2c 5b 52 38 5d 0a 20 4d 4f 56 20 20 | R0,[R8]. MOV | 00000330 20 52 31 2c 23 73 70 65 65 64 5f 64 69 76 5f 62 | R1,#speed_div_b| 00000340 79 0a 20 4d 4f 56 20 20 20 52 31 34 2c 50 43 0a |y. MOV R14,PC.| 00000350 20 4c 44 52 20 20 20 50 43 2c 5b 52 31 30 2c 23 | LDR PC,[R10,#| 00000360 65 5f 64 69 76 5d 0a 20 53 54 52 20 20 20 52 33 |e_div]. STR R3| 00000370 2c 6d 61 78 5f 73 70 65 65 64 0a 20 41 44 52 20 |,max_speed. ADR | 00000380 20 20 52 32 2c 62 61 6c 6c 73 0a 20 4d 4f 56 20 | R2,balls. MOV | 00000390 20 20 52 34 2c 23 6e 75 6d 62 65 72 5f 6f 66 5f | R4,#number_of_| 000003a0 62 61 6c 6c 73 0a 69 6e 69 74 5f 62 61 6c 6c 5f |balls.init_ball_| 000003b0 6c 6f 6f 70 0a 20 20 4c 44 52 20 20 20 52 30 2c |loop. LDR R0,| 000003c0 5b 52 31 30 2c 23 65 5f 6d 61 78 78 5d 0a 20 20 |[R10,#e_maxx]. | 000003d0 53 55 42 20 20 20 52 30 2c 52 30 2c 23 62 61 6c |SUB R0,R0,#bal| 000003e0 6c 5f 64 69 61 0a 20 20 4d 4f 56 20 20 20 52 31 |l_dia. MOV R1| 000003f0 34 2c 50 43 0a 20 20 4c 44 52 20 20 20 50 43 2c |4,PC. LDR PC,| 00000400 5b 52 31 30 2c 23 65 5f 72 61 6e 64 6f 6d 5d 0a |[R10,#e_random].| 00000410 20 20 53 54 52 20 20 20 52 30 2c 5b 52 32 2c 23 | STR R0,[R2,#| 00000420 62 61 6c 6c 5f 78 5d 0a 20 20 4c 44 52 20 20 20 |ball_x]. LDR | 00000430 52 30 2c 5b 52 31 30 2c 23 65 5f 6d 61 78 79 5d |R0,[R10,#e_maxy]| 00000440 0a 20 20 53 55 42 20 20 20 52 30 2c 52 30 2c 23 |. SUB R0,R0,#| 00000450 62 61 6c 6c 5f 64 69 61 0a 20 20 4d 4f 56 20 20 |ball_dia. MOV | 00000460 20 52 31 34 2c 50 43 0a 20 20 4c 44 52 20 20 20 | R14,PC. LDR | 00000470 50 43 2c 5b 52 31 30 2c 23 65 5f 72 61 6e 64 6f |PC,[R10,#e_rando| 00000480 6d 5d 0a 20 20 53 54 52 20 20 20 52 30 2c 5b 52 |m]. STR R0,[R| 00000490 32 2c 23 62 61 6c 6c 5f 79 5d 0a 20 20 4d 4f 56 |2,#ball_y]. MOV| 000004a0 20 20 20 52 30 2c 52 33 2c 4c 53 4c 23 31 0a 20 | R0,R3,LSL#1. | 000004b0 20 4d 4f 56 20 20 20 52 31 34 2c 50 43 0a 20 20 | MOV R14,PC. | 000004c0 4c 44 52 20 20 20 50 43 2c 5b 52 31 30 2c 23 65 |LDR PC,[R10,#e| 000004d0 5f 72 61 6e 64 6f 6d 5d 0a 20 20 53 55 42 20 20 |_random]. SUB | 000004e0 20 52 30 2c 52 30 2c 52 33 0a 20 20 43 4d 50 20 | R0,R0,R3. CMP | 000004f0 20 20 52 30 2c 23 30 0a 20 20 4d 4f 56 45 51 20 | R0,#0. MOVEQ | 00000500 52 30 2c 23 2d 32 0a 20 20 53 54 52 20 20 20 52 |R0,#-2. STR R| 00000510 30 2c 5b 52 32 2c 23 62 61 6c 6c 5f 78 76 5d 0a |0,[R2,#ball_xv].| 00000520 20 20 4d 4f 56 20 20 20 52 30 2c 52 33 2c 4c 53 | MOV R0,R3,LS| 00000530 52 23 31 0a 20 20 4d 4f 56 20 20 20 52 31 34 2c |R#1. MOV R14,| 00000540 50 43 0a 20 20 4c 44 52 20 20 20 50 43 2c 5b 52 |PC. LDR PC,[R| 00000550 31 30 2c 23 65 5f 72 61 6e 64 6f 6d 5d 0a 20 20 |10,#e_random]. | 00000560 4d 4f 56 20 20 20 52 30 2c 52 30 2c 4c 53 4c 23 |MOV R0,R0,LSL#| 00000570 31 0a 20 20 53 55 42 20 20 20 52 30 2c 52 30 2c |1. SUB R0,R0,| 00000580 52 33 0a 20 20 43 4d 50 20 20 20 52 30 2c 23 30 |R3. CMP R0,#0| 00000590 0a 20 20 4d 4f 56 45 51 20 52 30 2c 23 2d 32 0a |. MOVEQ R0,#-2.| 000005a0 20 20 53 54 52 20 20 20 52 30 2c 5b 52 32 2c 23 | STR R0,[R2,#| 000005b0 62 61 6c 6c 5f 79 76 5d 0a 20 20 41 44 44 20 20 |ball_yv]. ADD | 000005c0 20 52 32 2c 52 32 2c 23 62 61 6c 6c 5f 73 69 7a | R2,R2,#ball_siz| 000005d0 65 0a 20 20 53 55 42 53 20 20 52 34 2c 52 34 2c |e. SUBS R4,R4,| 000005e0 23 31 0a 20 42 4e 45 20 20 20 69 6e 69 74 5f 62 |#1. BNE init_b| 000005f0 61 6c 6c 5f 6c 6f 6f 70 0a 20 4c 44 52 20 20 20 |all_loop. LDR | 00000600 52 34 2c 5b 52 31 30 2c 23 65 5f 63 6f 6c 6f 75 |R4,[R10,#e_colou| 00000610 72 73 5d 0a 20 43 4d 50 20 20 20 52 34 2c 23 6e |rs]. CMP R4,#n| 00000620 75 6d 62 65 72 5f 6f 66 5f 62 61 6c 6c 73 0a 20 |umber_of_balls. | 00000630 4d 4f 56 47 54 20 52 34 2c 23 6e 75 6d 62 65 72 |MOVGT R4,#number| 00000640 5f 6f 66 5f 62 61 6c 6c 73 0a 69 6e 69 74 5f 70 |_of_balls.init_p| 00000650 61 6c 65 74 74 65 5f 6c 6f 6f 70 0a 20 20 4c 44 |alette_loop. LD| 00000660 52 20 20 20 52 30 2c 69 6e 69 74 5f 6d 61 78 5f |R R0,init_max_| 00000670 70 61 6c 65 74 74 65 5f 6e 75 6d 62 65 72 0a 20 |palette_number. | 00000680 20 4d 4f 56 20 20 20 52 31 34 2c 50 43 0a 20 20 | MOV R14,PC. | 00000690 4c 44 52 20 20 20 50 43 2c 5b 52 31 30 2c 23 65 |LDR PC,[R10,#e| 000006a0 5f 72 61 6e 64 6f 6d 5d 0a 20 20 41 4e 44 20 20 |_random]. AND | 000006b0 20 52 33 2c 52 30 2c 23 32 35 35 0a 20 20 4d 4f | R3,R0,#255. MO| 000006c0 56 20 20 20 52 32 2c 52 30 2c 4c 53 52 23 38 0a |V R2,R0,LSR#8.| 000006d0 20 20 41 4e 44 20 20 20 52 32 2c 52 32 2c 23 32 | AND R2,R2,#2| 000006e0 35 35 0a 20 20 4d 4f 56 20 20 20 52 31 2c 52 30 |55. MOV R1,R0| 000006f0 2c 4c 53 52 23 31 36 0a 20 20 41 4e 44 20 20 20 |,LSR#16. AND | 00000700 52 31 2c 52 31 2c 23 32 35 35 0a 20 20 41 44 44 |R1,R1,#255. ADD| 00000710 20 20 20 52 30 2c 52 31 2c 52 32 0a 20 20 41 44 | R0,R1,R2. AD| 00000720 44 20 20 20 52 30 2c 52 30 2c 52 33 0a 20 20 52 |D R0,R0,R3. R| 00000730 53 42 53 20 20 52 30 2c 52 30 2c 23 72 65 71 75 |SBS R0,R0,#requ| 00000740 69 72 65 64 5f 63 6f 6c 6f 75 72 5f 61 76 65 72 |ired_colour_aver| 00000750 61 67 65 0a 20 20 41 44 44 47 54 20 52 31 2c 52 |age. ADDGT R1,R| 00000760 31 2c 52 30 2c 4c 53 52 23 31 0a 20 20 41 44 44 |1,R0,LSR#1. ADD| 00000770 47 54 20 52 33 2c 52 33 2c 52 30 2c 4c 53 52 23 |GT R3,R3,R0,LSR#| 00000780 31 0a 20 20 53 57 49 20 20 20 58 4f 53 5f 57 72 |1. SWI XOS_Wr| 00000790 69 74 65 49 2b 31 39 0a 20 20 4d 4f 56 20 20 20 |iteI+19. MOV | 000007a0 52 30 2c 52 34 0a 20 20 53 57 49 20 20 20 58 4f |R0,R4. SWI XO| 000007b0 53 5f 57 72 69 74 65 43 0a 20 20 53 57 49 20 20 |S_WriteC. SWI | 000007c0 20 58 4f 53 5f 57 72 69 74 65 49 2b 31 36 0a 20 | XOS_WriteI+16. | 000007d0 20 4d 4f 56 20 20 20 52 30 2c 52 31 0a 20 20 53 | MOV R0,R1. S| 000007e0 57 49 20 20 20 58 4f 53 5f 57 72 69 74 65 43 0a |WI XOS_WriteC.| 000007f0 20 20 4d 4f 56 20 20 20 52 30 2c 52 32 0a 20 20 | MOV R0,R2. | 00000800 53 57 49 20 20 20 58 4f 53 5f 57 72 69 74 65 43 |SWI XOS_WriteC| 00000810 0a 20 20 4d 4f 56 20 20 20 52 30 2c 52 33 0a 20 |. MOV R0,R3. | 00000820 20 53 57 49 20 20 20 58 4f 53 5f 57 72 69 74 65 | SWI XOS_Write| 00000830 43 0a 20 20 53 55 42 53 20 20 52 34 2c 52 34 2c |C. SUBS R4,R4,| 00000840 23 31 0a 20 42 4e 45 20 20 20 69 6e 69 74 5f 70 |#1. BNE init_p| 00000850 61 6c 65 74 74 65 5f 6c 6f 6f 70 0a 20 41 44 52 |alette_loop. ADR| 00000860 20 20 20 52 30 2c 62 61 6c 6c 73 0a 20 4d 4f 56 | R0,balls. MOV| 00000870 20 20 20 52 35 2c 23 6e 75 6d 62 65 72 5f 6f 66 | R5,#number_of| 00000880 5f 62 61 6c 6c 73 0a 20 4d 4f 56 20 20 20 52 34 |_balls. MOV R4| 00000890 2c 23 31 0a 20 4c 44 52 20 20 20 52 36 2c 5b 52 |,#1. LDR R6,[R| 000008a0 31 30 2c 23 65 5f 63 6f 6c 6f 75 72 73 5d 0a 69 |10,#e_colours].i| 000008b0 6e 69 74 5f 64 72 61 77 5f 62 61 6c 6c 73 5f 6c |nit_draw_balls_l| 000008c0 6f 6f 70 0a 20 20 4d 4f 56 20 20 20 52 37 2c 52 |oop. MOV R7,R| 000008d0 30 0a 20 20 43 4d 50 20 20 20 52 34 2c 52 36 0a |0. CMP R4,R6.| 000008e0 20 20 4d 4f 56 47 54 20 52 34 2c 52 36 0a 20 20 | MOVGT R4,R6. | 000008f0 4d 4f 56 20 20 20 52 31 2c 52 34 0a 20 20 4d 4f |MOV R1,R4. MO| 00000900 56 20 20 20 52 30 2c 52 37 0a 20 20 42 4c 20 20 |V R0,R7. BL | 00000910 20 20 64 72 61 77 5f 62 61 6c 6c 0a 20 20 41 44 | draw_ball. AD| 00000920 44 20 20 20 52 30 2c 52 30 2c 23 62 61 6c 6c 5f |D R0,R0,#ball_| 00000930 73 69 7a 65 0a 20 20 41 44 44 20 20 20 52 34 2c |size. ADD R4,| 00000940 52 34 2c 23 31 0a 20 20 53 55 42 53 20 20 52 35 |R4,#1. SUBS R5| 00000950 2c 52 35 2c 23 31 0a 20 42 4e 45 20 20 20 69 6e |,R5,#1. BNE in| 00000960 69 74 5f 64 72 61 77 5f 62 61 6c 6c 73 5f 6c 6f |it_draw_balls_lo| 00000970 6f 70 0a 20 4c 44 4d 46 44 20 52 31 33 21 2c 7b |op. LDMFD R13!,{| 00000980 50 43 7d 0a 69 6e 69 74 5f 65 72 72 6f 72 0a 20 |PC}.init_error. | 00000990 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 31 34 7d |LDMFD R13!,{R14}| 000009a0 0a 20 4f 52 52 53 20 20 50 43 2c 52 31 34 2c 23 |. ORRS PC,R14,#| 000009b0 76 5f 66 6c 61 67 0a 0a 69 6e 69 74 5f 6d 61 78 |v_flag..init_max| 000009c0 5f 70 61 6c 65 74 74 65 5f 6e 75 6d 62 65 72 0a |_palette_number.| 000009d0 20 44 43 44 20 26 46 46 46 46 46 46 0a 20 41 4c | DCD &FFFFFF. AL| 000009e0 49 47 4e 0a 0a 20 20 3b 20 52 30 20 3d 20 70 6f |IGN.. ; R0 = po| 000009f0 69 6e 74 65 72 20 74 6f 20 62 61 6c 6c 20 74 6f |inter to ball to| 00000a00 20 64 72 61 77 0a 20 20 3b 20 52 31 20 3d 20 63 | draw. ; R1 = c| 00000a10 6f 6c 6f 75 72 0a 64 72 61 77 5f 62 61 6c 6c 0a |olour.draw_ball.| 00000a20 20 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d | STMFD R13!,{R0-| 00000a30 52 32 2c 52 35 2d 52 37 2c 52 31 34 7d 0a 20 4d |R2,R5-R7,R14}. M| 00000a40 4f 56 20 20 20 52 36 2c 52 30 0a 20 4d 4f 56 20 |OV R6,R0. MOV | 00000a50 20 20 52 37 2c 52 31 0a 20 53 57 49 20 20 20 58 | R7,R1. SWI X| 00000a60 4f 53 5f 57 72 69 74 65 49 2b 31 38 0a 20 53 57 |OS_WriteI+18. SW| 00000a70 49 20 20 20 58 4f 53 5f 57 72 69 74 65 49 2b 30 |I XOS_WriteI+0| 00000a80 0a 20 53 57 49 20 20 20 58 4f 53 5f 57 72 69 74 |. SWI XOS_Writ| 00000a90 65 49 2b 30 0a 20 4d 4f 56 20 20 20 52 30 2c 23 |eI+0. MOV R0,#| 00000aa0 34 0a 20 4c 44 52 20 20 20 52 31 2c 5b 52 36 2c |4. LDR R1,[R6,| 00000ab0 23 62 61 6c 6c 5f 78 5d 0a 20 4c 44 52 20 20 20 |#ball_x]. LDR | 00000ac0 52 32 2c 5b 52 36 2c 23 62 61 6c 6c 5f 79 5d 0a |R2,[R6,#ball_y].| 00000ad0 20 53 57 49 20 20 20 58 4f 53 5f 50 6c 6f 74 0a | SWI XOS_Plot.| 00000ae0 20 4d 4f 56 20 20 20 52 30 2c 23 31 30 31 0a 20 | MOV R0,#101. | 00000af0 4c 44 52 20 20 20 52 31 2c 5b 52 36 2c 23 62 61 |LDR R1,[R6,#ba| 00000b00 6c 6c 5f 78 5d 0a 20 41 44 44 20 20 20 52 31 2c |ll_x]. ADD R1,| 00000b10 52 31 2c 23 62 61 6c 6c 5f 64 69 61 0a 20 4c 44 |R1,#ball_dia. LD| 00000b20 52 20 20 20 52 32 2c 5b 52 36 2c 23 62 61 6c 6c |R R2,[R6,#ball| 00000b30 5f 79 5d 0a 20 41 44 44 20 20 20 52 32 2c 52 32 |_y]. ADD R2,R2| 00000b40 2c 23 62 61 6c 6c 5f 64 69 61 0a 20 53 57 49 20 |,#ball_dia. SWI | 00000b50 20 20 58 4f 53 5f 50 6c 6f 74 0a 20 53 57 49 20 | XOS_Plot. SWI | 00000b60 20 20 58 4f 53 5f 57 72 69 74 65 49 2b 31 38 0a | XOS_WriteI+18.| 00000b70 20 53 57 49 20 20 20 58 4f 53 5f 57 72 69 74 65 | SWI XOS_Write| 00000b80 49 2b 30 0a 20 4d 4f 56 20 20 20 52 30 2c 52 37 |I+0. MOV R0,R7| 00000b90 0a 20 53 57 49 20 20 20 58 4f 53 5f 57 72 69 74 |. SWI XOS_Writ| 00000ba0 65 43 0a 20 4d 4f 56 20 20 20 52 30 2c 23 34 0a |eC. MOV R0,#4.| 00000bb0 20 4c 44 52 20 20 20 52 37 2c 5b 52 36 2c 23 62 | LDR R7,[R6,#b| 00000bc0 61 6c 6c 5f 78 5d 0a 20 4c 44 52 20 20 20 52 35 |all_x]. LDR R5| 00000bd0 2c 5b 52 36 2c 23 62 61 6c 6c 5f 79 5d 0a 20 41 |,[R6,#ball_y]. A| 00000be0 44 44 20 20 20 52 31 2c 52 37 2c 23 62 61 6c 6c |DD R1,R7,#ball| 00000bf0 5f 64 69 61 2f 32 0a 20 41 44 44 20 20 20 52 32 |_dia/2. ADD R2| 00000c00 2c 52 35 2c 23 62 61 6c 6c 5f 64 69 61 2f 32 0a |,R5,#ball_dia/2.| 00000c10 20 53 57 49 20 20 20 58 4f 53 5f 50 6c 6f 74 0a | SWI XOS_Plot.| 00000c20 20 4d 4f 56 20 20 20 52 30 2c 23 31 35 37 20 20 | MOV R0,#157 | 00000c30 20 3b 20 63 69 72 63 6c 65 20 66 69 6c 6c 0a 20 | ; circle fill. | 00000c40 41 44 44 20 20 20 52 31 2c 52 37 2c 23 62 61 6c |ADD R1,R7,#bal| 00000c50 6c 5f 64 69 61 0a 20 41 44 44 20 20 20 52 32 2c |l_dia. ADD R2,| 00000c60 52 35 2c 23 62 61 6c 6c 5f 64 69 61 2f 32 0a 20 |R5,#ball_dia/2. | 00000c70 53 57 49 20 20 20 58 4f 53 5f 50 6c 6f 74 0a 20 |SWI XOS_Plot. | 00000c80 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 30 2d 52 |LDMFD R13!,{R0-R| 00000c90 32 2c 52 35 2d 52 37 2c 50 43 7d 5e 0a 0a 70 6f |2,R5-R7,PC}^..po| 00000ca0 6c 6c 0a 20 53 54 4d 46 44 20 52 31 33 21 2c 7b |ll. STMFD R13!,{| 00000cb0 52 31 34 7d 0a 20 4c 44 52 20 20 20 52 31 31 2c |R14}. LDR R11,| 00000cc0 5b 52 31 31 5d 0a 20 41 44 52 20 20 20 52 38 2c |[R11]. ADR R8,| 00000cd0 62 61 6c 6c 73 0a 20 4d 4f 56 20 20 20 52 37 2c |balls. MOV R7,| 00000ce0 23 6e 75 6d 62 65 72 5f 6f 66 5f 62 61 6c 6c 73 |#number_of_balls| 00000cf0 0a 20 4d 4f 56 20 20 20 52 36 2c 23 31 0a 70 72 |. MOV R6,#1.pr| 00000d00 6f 63 65 73 73 5f 62 61 6c 6c 5f 6c 6f 6f 70 0a |ocess_ball_loop.| 00000d10 20 20 4d 4f 56 20 20 20 52 30 2c 23 30 0a 20 20 | MOV R0,#0. | 00000d20 53 54 52 20 20 20 52 30 2c 72 64 0a 20 20 20 20 |STR R0,rd. | 00000d30 3b 20 6d 6f 76 65 20 74 6f 20 63 75 72 72 65 6e |; move to curren| 00000d40 74 20 70 6f 73 69 74 69 6f 6e 0a 20 20 4c 44 52 |t position. LDR| 00000d50 20 20 20 52 33 2c 5b 52 38 2c 23 62 61 6c 6c 5f | R3,[R8,#ball_| 00000d60 78 5d 0a 20 20 4c 44 52 20 20 20 52 34 2c 5b 52 |x]. LDR R4,[R| 00000d70 38 2c 23 62 61 6c 6c 5f 79 5d 0a 20 20 4d 4f 56 |8,#ball_y]. MOV| 00000d80 20 20 20 52 30 2c 23 34 20 20 3b 20 6d 6f 76 65 | R0,#4 ; move| 00000d90 0a 20 20 4d 4f 56 20 20 20 52 31 2c 52 33 0a 20 |. MOV R1,R3. | 00000da0 20 4d 4f 56 20 20 20 52 32 2c 52 34 0a 20 20 53 | MOV R2,R4. S| 00000db0 57 49 20 20 20 58 4f 53 5f 50 6c 6f 74 0a 20 20 |WI XOS_Plot. | 00000dc0 4d 4f 56 20 20 20 52 30 2c 23 34 0a 20 20 41 44 |MOV R0,#4. AD| 00000dd0 44 20 20 20 52 31 2c 52 33 2c 23 62 61 6c 6c 5f |D R1,R3,#ball_| 00000de0 64 69 61 0a 20 20 41 44 44 20 20 20 52 32 2c 52 |dia. ADD R2,R| 00000df0 34 2c 23 62 61 6c 6c 5f 64 69 61 0a 20 20 53 57 |4,#ball_dia. SW| 00000e00 49 20 20 20 58 4f 53 5f 50 6c 6f 74 0a 20 20 20 |I XOS_Plot. | 00000e10 20 3b 20 72 65 63 61 6c 63 75 6c 61 74 65 20 62 | ; recalculate b| 00000e20 61 6c 6c 0a 20 20 4c 44 52 20 20 20 52 30 2c 5b |all. LDR R0,[| 00000e30 52 38 2c 23 62 61 6c 6c 5f 78 5d 0a 20 20 4c 44 |R8,#ball_x]. LD| 00000e40 52 20 20 20 52 31 2c 5b 52 38 2c 23 62 61 6c 6c |R R1,[R8,#ball| 00000e50 5f 78 76 5d 0a 20 20 41 44 44 20 20 20 52 30 2c |_xv]. ADD R0,| 00000e60 52 30 2c 52 31 0a 20 20 53 54 52 20 20 20 52 30 |R0,R1. STR R0| 00000e70 2c 5b 52 38 2c 23 62 61 6c 6c 5f 78 5d 0a 20 20 |,[R8,#ball_x]. | 00000e80 4c 44 52 20 20 20 52 31 2c 5b 52 31 30 2c 23 65 |LDR R1,[R10,#e| 00000e90 5f 6d 61 78 78 5d 0a 20 20 53 55 42 20 20 20 52 |_maxx]. SUB R| 00000ea0 31 2c 52 31 2c 23 62 61 6c 6c 5f 64 69 61 0a 20 |1,R1,#ball_dia. | 00000eb0 20 43 4d 50 20 20 20 52 30 2c 23 30 0a 20 20 42 | CMP R0,#0. B| 00000ec0 4c 45 20 20 20 72 65 76 65 72 73 65 5f 78 76 0a |LE reverse_xv.| 00000ed0 20 20 43 4d 50 20 20 20 52 30 2c 52 31 0a 20 20 | CMP R0,R1. | 00000ee0 42 47 45 20 20 20 72 65 76 65 72 73 65 5f 78 76 |BGE reverse_xv| 00000ef0 0a 72 65 76 65 72 73 65 5f 78 76 5f 72 65 74 75 |.reverse_xv_retu| 00000f00 72 6e 0a 20 20 4c 44 52 20 20 20 52 30 2c 5b 52 |rn. LDR R0,[R| 00000f10 38 2c 23 62 61 6c 6c 5f 79 5d 0a 20 20 4c 44 52 |8,#ball_y]. LDR| 00000f20 20 20 20 52 31 2c 5b 52 38 2c 23 62 61 6c 6c 5f | R1,[R8,#ball_| 00000f30 79 76 5d 0a 20 20 41 44 44 20 20 20 52 30 2c 52 |yv]. ADD R0,R| 00000f40 30 2c 52 31 0a 20 20 53 54 52 20 20 20 52 30 2c |0,R1. STR R0,| 00000f50 5b 52 38 2c 23 62 61 6c 6c 5f 79 5d 0a 20 20 4c |[R8,#ball_y]. L| 00000f60 44 52 20 20 20 52 31 2c 5b 52 31 30 2c 23 65 5f |DR R1,[R10,#e_| 00000f70 6d 61 78 79 5d 0a 20 20 53 55 42 20 20 20 52 31 |maxy]. SUB R1| 00000f80 2c 52 31 2c 23 62 61 6c 6c 5f 64 69 61 0a 20 20 |,R1,#ball_dia. | 00000f90 43 4d 50 20 20 20 52 30 2c 23 30 0a 20 20 42 4c |CMP R0,#0. BL| 00000fa0 45 20 20 20 72 65 76 65 72 73 65 5f 79 76 0a 20 |E reverse_yv. | 00000fb0 20 43 4d 50 20 20 20 52 30 2c 52 31 0a 20 20 42 | CMP R0,R1. B| 00000fc0 47 45 20 20 20 72 65 76 65 72 73 65 5f 79 76 0a |GE reverse_yv.| 00000fd0 72 65 76 65 72 73 65 5f 79 76 5f 72 65 74 75 72 |reverse_yv_retur| 00000fe0 6e 0a 20 20 20 20 3b 20 6d 6f 76 65 20 6f 6c 64 |n. ; move old| 00000ff0 20 62 61 6c 6c 20 74 6f 20 6e 65 77 20 70 6f 73 | ball to new pos| 00001000 69 74 69 6f 6e 0a 20 20 4d 4f 56 20 20 20 52 30 |ition. MOV R0| 00001010 2c 23 31 38 39 20 20 20 20 3b 20 62 6c 6f 63 6b |,#189 ; block| 00001020 20 6d 6f 76 65 0a 20 20 4c 44 52 20 20 20 52 31 | move. LDR R1| 00001030 2c 5b 52 38 2c 23 62 61 6c 6c 5f 78 5d 0a 20 20 |,[R8,#ball_x]. | 00001040 4c 44 52 20 20 20 52 32 2c 5b 52 38 2c 23 62 61 |LDR R2,[R8,#ba| 00001050 6c 6c 5f 79 5d 0a 20 20 53 57 49 20 20 20 58 4f |ll_y]. SWI XO| 00001060 53 5f 50 6c 6f 74 0a 20 20 4c 44 52 20 20 20 52 |S_Plot. LDR R| 00001070 30 2c 72 64 0a 20 20 43 4d 50 20 20 20 52 30 2c |0,rd. CMP R0,| 00001080 23 30 0a 20 20 4d 4f 56 4e 45 20 52 30 2c 23 72 |#0. MOVNE R0,#r| 00001090 65 64 72 61 77 5f 74 69 6d 65 73 0a 20 20 53 54 |edraw_times. ST| 000010a0 52 4e 45 20 52 30 2c 5b 52 38 2c 23 62 61 6c 6c |RNE R0,[R8,#ball| 000010b0 5f 72 64 5d 0a 20 20 4c 44 52 20 20 20 52 30 2c |_rd]. LDR R0,| 000010c0 5b 52 38 2c 23 62 61 6c 6c 5f 72 64 5d 0a 20 20 |[R8,#ball_rd]. | 000010d0 53 55 42 53 20 20 52 30 2c 52 30 2c 23 31 0a 20 |SUBS R0,R0,#1. | 000010e0 20 42 4c 54 20 20 20 61 66 74 65 72 5f 72 65 64 | BLT after_red| 000010f0 72 61 77 5f 62 61 6c 6c 0a 20 20 53 54 52 20 20 |raw_ball. STR | 00001100 20 52 30 2c 5b 52 38 2c 23 62 61 6c 6c 5f 72 64 | R0,[R8,#ball_rd| 00001110 5d 0a 3b 20 20 53 57 49 20 20 20 58 4f 53 5f 57 |].; SWI XOS_W| 00001120 72 69 74 65 49 2b 31 38 0a 3b 20 20 53 57 49 20 |riteI+18.; SWI | 00001130 20 20 58 4f 53 5f 57 72 69 74 65 49 2b 30 0a 20 | XOS_WriteI+0. | 00001140 20 4d 4f 56 20 20 20 52 31 2c 52 36 0a 3b 20 20 | MOV R1,R6.; | 00001150 53 57 49 20 20 20 58 4f 53 5f 57 72 69 74 65 43 |SWI XOS_WriteC| 00001160 0a 20 20 4d 4f 56 20 20 20 52 30 2c 52 38 0a 20 |. MOV R0,R8. | 00001170 20 42 4c 20 20 20 20 64 72 61 77 5f 62 61 6c 6c | BL draw_ball| 00001180 0a 61 66 74 65 72 5f 72 65 64 72 61 77 5f 62 61 |.after_redraw_ba| 00001190 6c 6c 0a 3b 20 20 4c 44 52 20 20 20 52 30 2c 72 |ll.; LDR R0,r| 000011a0 64 0a 3b 20 20 53 54 52 20 20 20 52 30 2c 5b 52 |d.; STR R0,[R| 000011b0 38 2c 23 62 61 6c 6c 5f 72 64 5d 0a 20 20 4c 44 |8,#ball_rd]. LD| 000011c0 52 20 20 20 52 30 2c 5b 52 31 30 2c 23 65 5f 63 |R R0,[R10,#e_c| 000011d0 6f 6c 6f 75 72 73 5d 0a 20 20 41 44 44 20 20 20 |olours]. ADD | 000011e0 52 36 2c 52 36 2c 23 31 0a 20 20 43 4d 50 20 20 |R6,R6,#1. CMP | 000011f0 20 52 36 2c 52 30 0a 20 20 4d 4f 56 47 54 20 52 | R6,R0. MOVGT R| 00001200 36 2c 52 30 0a 20 20 41 44 44 20 20 20 52 38 2c |6,R0. ADD R8,| 00001210 52 38 2c 23 62 61 6c 6c 5f 73 69 7a 65 0a 20 20 |R8,#ball_size. | 00001220 53 55 42 53 20 20 52 37 2c 52 37 2c 23 31 0a 20 |SUBS R7,R7,#1. | 00001230 42 4e 45 20 20 20 70 72 6f 63 65 73 73 5f 62 61 |BNE process_ba| 00001240 6c 6c 5f 6c 6f 6f 70 0a 20 41 44 52 20 20 20 52 |ll_loop. ADR R| 00001250 38 2c 62 61 6c 6c 73 0a 20 4d 4f 56 20 20 20 52 |8,balls. MOV R| 00001260 37 2c 23 6e 75 6d 62 65 72 5f 6f 66 5f 62 61 6c |7,#number_of_bal| 00001270 6c 73 0a 20 4d 4f 56 20 20 20 52 36 2c 23 31 0a |ls. MOV R6,#1.| 00001280 63 68 65 63 6b 5f 63 6f 6c 6c 69 73 69 6f 6e 73 |check_collisions| 00001290 5f 6c 6f 6f 70 0a 20 20 41 44 52 20 20 20 52 35 |_loop. ADR R5| 000012a0 2c 62 61 6c 6c 73 0a 20 20 4d 4f 56 20 20 20 52 |,balls. MOV R| 000012b0 34 2c 23 6e 75 6d 62 65 72 5f 6f 66 5f 62 61 6c |4,#number_of_bal| 000012c0 6c 73 0a 63 68 65 63 6b 5f 63 6f 6c 6c 69 73 69 |ls.check_collisi| 000012d0 6f 6e 73 5f 6c 6f 6f 70 32 0a 20 20 20 43 4d 50 |ons_loop2. CMP| 000012e0 20 20 20 52 34 2c 52 37 0a 20 20 20 42 45 51 20 | R4,R7. BEQ | 000012f0 20 20 63 68 65 63 6b 5f 63 6f 6c 6c 69 73 69 6f | check_collisio| 00001300 6e 73 5f 6c 6f 6f 70 32 5f 61 66 74 65 72 5f 63 |ns_loop2_after_c| 00001310 68 65 63 6b 0a 20 20 20 4c 44 52 20 20 20 52 33 |heck. LDR R3| 00001320 2c 5b 52 38 2c 23 62 61 6c 6c 5f 78 5d 0a 20 20 |,[R8,#ball_x]. | 00001330 20 41 44 44 20 20 20 52 32 2c 52 33 2c 23 62 61 | ADD R2,R3,#ba| 00001340 6c 6c 5f 64 69 61 0a 20 20 20 4c 44 52 20 20 20 |ll_dia. LDR | 00001350 52 30 2c 5b 52 35 2c 23 62 61 6c 6c 5f 78 5d 0a |R0,[R5,#ball_x].| 00001360 20 20 20 41 44 44 20 20 20 52 31 2c 52 30 2c 23 | ADD R1,R0,#| 00001370 62 61 6c 6c 5f 64 69 61 0a 63 68 65 63 6b 31 61 |ball_dia.check1a| 00001380 0a 20 20 20 43 4d 50 20 20 20 52 31 2c 52 33 0a |. CMP R1,R3.| 00001390 20 20 20 42 4c 54 20 20 20 63 68 65 63 6b 32 61 | BLT check2a| 000013a0 0a 63 68 65 63 6b 31 62 0a 20 20 20 43 4d 50 20 |.check1b. CMP | 000013b0 20 20 52 31 2c 52 32 0a 20 20 20 42 4c 54 20 20 | R1,R2. BLT | 000013c0 20 63 68 65 63 6b 5f 79 0a 63 68 65 63 6b 32 61 | check_y.check2a| 000013d0 0a 20 20 20 43 4d 50 20 20 20 52 30 2c 52 33 0a |. CMP R0,R3.| 000013e0 20 20 20 42 4c 54 20 20 20 63 68 65 63 6b 5f 63 | BLT check_c| 000013f0 6f 6c 6c 69 73 69 6f 6e 73 5f 6c 6f 6f 70 32 5f |ollisions_loop2_| 00001400 61 66 74 65 72 5f 63 68 65 63 6b 0a 63 68 65 63 |after_check.chec| 00001410 6b 32 62 0a 20 20 20 43 4d 50 20 20 20 52 30 2c |k2b. CMP R0,| 00001420 52 32 0a 20 20 20 42 47 54 20 20 20 63 68 65 63 |R2. BGT chec| 00001430 6b 5f 63 6f 6c 6c 69 73 69 6f 6e 73 5f 6c 6f 6f |k_collisions_loo| 00001440 70 32 5f 61 66 74 65 72 5f 63 68 65 63 6b 0a 63 |p2_after_check.c| 00001450 68 65 63 6b 5f 79 0a 20 20 20 4c 44 52 20 20 20 |heck_y. LDR | 00001460 52 33 2c 5b 52 38 2c 23 62 61 6c 6c 5f 79 5d 0a |R3,[R8,#ball_y].| 00001470 20 20 20 41 44 44 20 20 20 52 32 2c 52 33 2c 23 | ADD R2,R3,#| 00001480 62 61 6c 6c 5f 64 69 61 0a 20 20 20 4c 44 52 20 |ball_dia. LDR | 00001490 20 20 52 30 2c 5b 52 35 2c 23 62 61 6c 6c 5f 79 | R0,[R5,#ball_y| 000014a0 5d 0a 20 20 20 41 44 44 20 20 20 52 31 2c 52 30 |]. ADD R1,R0| 000014b0 2c 23 62 61 6c 6c 5f 64 69 61 0a 63 68 65 63 6b |,#ball_dia.check| 000014c0 33 61 0a 20 20 20 43 4d 50 20 20 20 52 31 2c 52 |3a. CMP R1,R| 000014d0 33 0a 20 20 20 42 4c 54 20 20 20 63 68 65 63 6b |3. BLT check| 000014e0 34 61 0a 63 68 65 63 6b 33 62 0a 20 20 20 43 4d |4a.check3b. CM| 000014f0 50 20 20 20 52 31 2c 52 32 0a 20 20 20 42 4c 54 |P R1,R2. BLT| 00001500 20 20 20 63 6f 6c 6c 69 73 69 6f 6e 0a 63 68 65 | collision.che| 00001510 63 6b 34 61 0a 20 20 20 43 4d 50 20 20 20 52 30 |ck4a. CMP R0| 00001520 2c 52 33 0a 20 20 20 42 4c 54 20 20 20 63 68 65 |,R3. BLT che| 00001530 63 6b 5f 63 6f 6c 6c 69 73 69 6f 6e 73 5f 6c 6f |ck_collisions_lo| 00001540 6f 70 32 5f 61 66 74 65 72 5f 63 68 65 63 6b 0a |op2_after_check.| 00001550 63 68 65 63 6b 34 62 0a 20 20 20 43 4d 50 20 20 |check4b. CMP | 00001560 20 52 30 2c 52 32 0a 20 20 20 42 47 54 20 20 20 | R0,R2. BGT | 00001570 63 68 65 63 6b 5f 63 6f 6c 6c 69 73 69 6f 6e 73 |check_collisions| 00001580 5f 6c 6f 6f 70 32 5f 61 66 74 65 72 5f 63 68 65 |_loop2_after_che| 00001590 63 6b 0a 63 6f 6c 6c 69 73 69 6f 6e 0a 20 20 20 |ck.collision. | 000015a0 4d 4f 56 20 20 20 52 30 2c 23 72 65 64 72 61 77 |MOV R0,#redraw| 000015b0 5f 74 69 6d 65 73 0a 20 20 20 53 54 52 20 20 20 |_times. STR | 000015c0 52 30 2c 5b 52 38 2c 23 62 61 6c 6c 5f 72 64 5d |R0,[R8,#ball_rd]| 000015d0 0a 20 20 20 53 54 52 20 20 20 52 30 2c 5b 52 35 |. STR R0,[R5| 000015e0 2c 23 62 61 6c 6c 5f 72 64 5d 0a 20 20 20 4c 44 |,#ball_rd]. LD| 000015f0 52 20 20 20 52 30 2c 5b 52 38 2c 23 62 61 6c 6c |R R0,[R8,#ball| 00001600 5f 78 76 5d 0a 20 20 20 4c 44 52 20 20 20 52 31 |_xv]. LDR R1| 00001610 2c 5b 52 38 2c 23 62 61 6c 6c 5f 79 76 5d 0a 20 |,[R8,#ball_yv]. | 00001620 20 20 53 54 52 20 20 20 52 31 2c 5b 52 38 2c 23 | STR R1,[R8,#| 00001630 62 61 6c 6c 5f 78 76 5d 0a 20 20 20 52 53 42 20 |ball_xv]. RSB | 00001640 20 20 52 30 2c 52 30 2c 23 30 0a 20 20 20 53 54 | R0,R0,#0. ST| 00001650 52 20 20 20 52 30 2c 5b 52 38 2c 23 62 61 6c 6c |R R0,[R8,#ball| 00001660 5f 79 76 5d 0a 20 20 20 4c 44 52 20 20 20 52 30 |_yv]. LDR R0| 00001670 2c 5b 52 35 2c 23 62 61 6c 6c 5f 78 76 5d 0a 20 |,[R5,#ball_xv]. | 00001680 20 20 4c 44 52 20 20 20 52 31 2c 5b 52 35 2c 23 | LDR R1,[R5,#| 00001690 62 61 6c 6c 5f 79 76 5d 0a 20 20 20 53 54 52 20 |ball_yv]. STR | 000016a0 20 20 52 31 2c 5b 52 35 2c 23 62 61 6c 6c 5f 78 | R1,[R5,#ball_x| 000016b0 76 5d 0a 20 20 20 52 53 42 20 20 20 52 30 2c 52 |v]. RSB R0,R| 000016c0 30 2c 23 30 0a 20 20 20 53 54 52 20 20 20 52 30 |0,#0. STR R0| 000016d0 2c 5b 52 35 2c 23 62 61 6c 6c 5f 79 76 5d 0a 63 |,[R5,#ball_yv].c| 000016e0 68 65 63 6b 5f 63 6f 6c 6c 69 73 69 6f 6e 73 5f |heck_collisions_| 000016f0 6c 6f 6f 70 32 5f 61 66 74 65 72 5f 63 68 65 63 |loop2_after_chec| 00001700 6b 0a 20 20 20 41 44 44 20 20 20 52 35 2c 52 35 |k. ADD R5,R5| 00001710 2c 23 62 61 6c 6c 5f 73 69 7a 65 0a 20 20 20 53 |,#ball_size. S| 00001720 55 42 53 20 20 52 34 2c 52 34 2c 23 31 0a 20 20 |UBS R4,R4,#1. | 00001730 42 4e 45 20 20 20 63 68 65 63 6b 5f 63 6f 6c 6c |BNE check_coll| 00001740 69 73 69 6f 6e 73 5f 6c 6f 6f 70 32 0a 20 20 4c |isions_loop2. L| 00001750 44 52 20 20 20 52 30 2c 5b 52 31 30 2c 23 65 5f |DR R0,[R10,#e_| 00001760 63 6f 6c 6f 75 72 73 5d 0a 20 20 41 44 44 20 20 |colours]. ADD | 00001770 20 52 36 2c 52 36 2c 23 31 0a 20 20 43 4d 50 20 | R6,R6,#1. CMP | 00001780 20 20 52 36 2c 52 30 0a 20 20 4d 4f 56 47 54 20 | R6,R0. MOVGT | 00001790 52 36 2c 52 30 0a 20 20 41 44 44 20 20 20 52 38 |R6,R0. ADD R8| 000017a0 2c 52 38 2c 23 62 61 6c 6c 5f 73 69 7a 65 0a 20 |,R8,#ball_size. | 000017b0 20 53 55 42 53 20 20 52 37 2c 52 37 2c 23 31 0a | SUBS R7,R7,#1.| 000017c0 20 42 4e 45 20 20 20 63 68 65 63 6b 5f 63 6f 6c | BNE check_col| 000017d0 6c 69 73 69 6f 6e 73 5f 6c 6f 6f 70 0a 20 4c 44 |lisions_loop. LD| 000017e0 4d 46 44 20 52 31 33 21 2c 7b 50 43 7d 0a 0a 72 |MFD R13!,{PC}..r| 000017f0 65 76 65 72 73 65 5f 78 76 0a 20 4c 44 52 20 20 |everse_xv. LDR | 00001800 20 52 30 2c 5b 52 38 2c 23 62 61 6c 6c 5f 78 76 | R0,[R8,#ball_xv| 00001810 5d 0a 20 52 53 42 20 20 20 52 30 2c 52 30 2c 23 |]. RSB R0,R0,#| 00001820 30 0a 20 53 54 52 20 20 20 52 30 2c 5b 52 38 2c |0. STR R0,[R8,| 00001830 23 62 61 6c 6c 5f 78 76 5d 0a 20 4d 4f 56 20 20 |#ball_xv]. MOV | 00001840 20 52 30 2c 23 31 0a 20 53 54 52 20 20 20 52 30 | R0,#1. STR R0| 00001850 2c 72 64 0a 20 42 20 20 20 20 20 72 65 76 65 72 |,rd. B rever| 00001860 73 65 5f 78 76 5f 72 65 74 75 72 6e 0a 0a 72 65 |se_xv_return..re| 00001870 76 65 72 73 65 5f 79 76 0a 20 4c 44 52 20 20 20 |verse_yv. LDR | 00001880 52 30 2c 5b 52 38 2c 23 62 61 6c 6c 5f 79 76 5d |R0,[R8,#ball_yv]| 00001890 0a 20 52 53 42 20 20 20 52 30 2c 52 30 2c 23 30 |. RSB R0,R0,#0| 000018a0 0a 20 53 54 52 20 20 20 52 30 2c 5b 52 38 2c 23 |. STR R0,[R8,#| 000018b0 62 61 6c 6c 5f 79 76 5d 0a 20 4d 4f 56 20 20 20 |ball_yv]. MOV | 000018c0 52 30 2c 23 31 0a 20 53 54 52 20 20 20 52 30 2c |R0,#1. STR R0,| 000018d0 72 64 0a 20 42 20 20 20 20 20 72 65 76 65 72 73 |rd. B revers| 000018e0 65 5f 79 76 5f 72 65 74 75 72 6e 0a 0a 66 69 6e |e_yv_return..fin| 000018f0 61 6c 69 73 65 0a 20 53 54 4d 46 44 20 52 31 33 |alise. STMFD R13| 00001900 21 2c 7b 52 31 34 7d 0a 20 4c 44 52 20 20 20 52 |!,{R14}. LDR R| 00001910 31 31 2c 5b 52 31 31 5d 0a 20 4d 4f 56 20 20 20 |11,[R11]. MOV | 00001920 52 30 2c 23 37 20 20 3b 20 66 72 65 65 20 62 6c |R0,#7 ; free bl| 00001930 6f 63 6b 20 69 6e 20 52 4d 41 0a 20 4d 4f 56 20 |ock in RMA. MOV | 00001940 20 20 52 32 2c 52 31 31 0a 20 53 57 49 20 20 20 | R2,R11. SWI | 00001950 58 4f 53 5f 4d 6f 64 75 6c 65 20 20 20 20 3b 20 |XOS_Module ; | 00001960 66 72 65 65 20 62 6c 6f 63 6b 0a 20 4c 44 4d 46 |free block. LDMF| 00001970 44 20 52 31 33 21 2c 7b 50 43 7d 0a 0a 20 20 3b |D R13!,{PC}.. ;| 00001980 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a | ***************| 00001990 20 77 6f 72 6b 73 70 61 63 65 20 64 65 66 69 6e | workspace defin| 000019a0 69 74 69 6f 6e 73 0a 0a 62 61 6c 6c 5f 78 20 20 |itions..ball_x | 000019b0 20 20 45 51 55 20 30 0a 62 61 6c 6c 5f 79 20 20 | EQU 0.ball_y | 000019c0 20 20 45 51 55 20 34 0a 62 61 6c 6c 5f 78 76 20 | EQU 4.ball_xv | 000019d0 20 20 45 51 55 20 38 0a 62 61 6c 6c 5f 79 76 20 | EQU 8.ball_yv | 000019e0 20 20 45 51 55 20 31 32 0a 62 61 6c 6c 5f 72 64 | EQU 12.ball_rd| 000019f0 20 20 20 45 51 55 20 31 36 0a 62 61 6c 6c 5f 73 | EQU 16.ball_s| 00001a00 69 7a 65 20 45 51 55 20 32 30 0a 0a 20 4c 54 4f |ize EQU 20.. LTO| 00001a10 52 47 0a 0a 20 5e 20 30 2c 52 31 31 0a 0a 77 6f |RG.. ^ 0,R11..wo| 00001a20 72 6b 5f 73 74 61 72 74 20 23 20 30 0a 0a 72 64 |rk_start # 0..rd| 00001a30 20 23 20 34 0a 0a 6d 61 78 5f 73 70 65 65 64 20 | # 4..max_speed | 00001a40 23 20 34 0a 0a 62 61 6c 6c 73 20 23 20 62 61 6c |# 4..balls # bal| 00001a50 6c 5f 73 69 7a 65 20 2a 20 6e 75 6d 62 65 72 5f |l_size * number_| 00001a60 6f 66 5f 62 61 6c 6c 73 0a 0a 77 6f 72 6b 5f 65 |of_balls..work_e| 00001a70 6e 64 20 23 20 30 0a 0a 20 45 4e 44 0a |nd # 0.. END.| 00001a7d