Home » Archimedes archive » Micro User » MU 1992-02.adf » PD » Twilight/c/bounce
Twilight/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-02.adf » PD |
Filename: | Twilight/c/bounce |
Read OK: | ✔ |
File size: | 1A84 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 2/12/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 DCD 0 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 2f 31 32 2f 39 31 0a 0a 20 47 45 54 20 68 2e 73 |/12/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 20 44 43 44 20 30 0a 0a 6d 65 73 73 |ags. DCD 0..mess| 00000240 61 67 65 0a 20 44 43 42 20 22 42 6f 75 6e 63 79 |age. DCB "Bouncy| 00000250 20 62 61 6c 6c 73 2e 20 59 6f 75 20 6a 75 73 74 | balls. You just| 00000260 20 63 61 6e 27 74 20 61 76 6f 69 64 20 74 68 65 | can't avoid the| 00000270 6d 2e 22 2c 30 0a 20 41 4c 49 47 4e 0a 0a 69 6e |m.",0. ALIGN..in| 00000280 69 74 0a 20 53 54 4d 46 44 20 52 31 33 21 2c 7b |it. STMFD R13!,{| 00000290 52 31 2c 52 31 34 7d 0a 20 4d 4f 56 20 20 20 52 |R1,R14}. MOV R| 000002a0 30 2c 23 36 20 20 3b 20 63 6c 61 69 6d 0a 20 4d |0,#6 ; claim. M| 000002b0 4f 56 20 20 20 52 33 2c 23 77 6f 72 6b 5f 65 6e |OV R3,#work_en| 000002c0 64 20 2d 20 77 6f 72 6b 5f 73 74 61 72 74 0a 20 |d - work_start. | 000002d0 53 57 49 20 20 20 58 4f 53 5f 4d 6f 64 75 6c 65 |SWI XOS_Module| 000002e0 0a 20 42 56 53 20 20 20 69 6e 69 74 5f 65 72 72 |. BVS init_err| 000002f0 6f 72 0a 20 53 54 52 20 20 20 52 32 2c 5b 52 31 |or. STR R2,[R1| 00000300 31 5d 0a 20 4d 4f 56 20 20 20 52 31 31 2c 52 32 |1]. MOV R11,R2| 00000310 0a 20 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 38 |. LDMFD R13!,{R8| 00000320 7d 0a 20 4c 44 52 20 20 20 52 30 2c 5b 52 38 5d |}. LDR R0,[R8]| 00000330 0a 20 4d 4f 56 20 20 20 52 31 2c 23 73 70 65 65 |. MOV R1,#spee| 00000340 64 5f 64 69 76 5f 62 79 0a 20 4d 4f 56 20 20 20 |d_div_by. MOV | 00000350 52 31 34 2c 50 43 0a 20 4c 44 52 20 20 20 50 43 |R14,PC. LDR PC| 00000360 2c 5b 52 31 30 2c 23 65 5f 64 69 76 5d 0a 20 53 |,[R10,#e_div]. S| 00000370 54 52 20 20 20 52 33 2c 6d 61 78 5f 73 70 65 65 |TR R3,max_spee| 00000380 64 0a 20 41 44 52 20 20 20 52 32 2c 62 61 6c 6c |d. ADR R2,ball| 00000390 73 0a 20 4d 4f 56 20 20 20 52 34 2c 23 6e 75 6d |s. MOV R4,#num| 000003a0 62 65 72 5f 6f 66 5f 62 61 6c 6c 73 0a 69 6e 69 |ber_of_balls.ini| 000003b0 74 5f 62 61 6c 6c 5f 6c 6f 6f 70 0a 20 20 4c 44 |t_ball_loop. LD| 000003c0 52 20 20 20 52 30 2c 5b 52 31 30 2c 23 65 5f 6d |R R0,[R10,#e_m| 000003d0 61 78 78 5d 0a 20 20 53 55 42 20 20 20 52 30 2c |axx]. SUB R0,| 000003e0 52 30 2c 23 62 61 6c 6c 5f 64 69 61 0a 20 20 4d |R0,#ball_dia. M| 000003f0 4f 56 20 20 20 52 31 34 2c 50 43 0a 20 20 4c 44 |OV R14,PC. LD| 00000400 52 20 20 20 50 43 2c 5b 52 31 30 2c 23 65 5f 72 |R PC,[R10,#e_r| 00000410 61 6e 64 6f 6d 5d 0a 20 20 53 54 52 20 20 20 52 |andom]. STR R| 00000420 30 2c 5b 52 32 2c 23 62 61 6c 6c 5f 78 5d 0a 20 |0,[R2,#ball_x]. | 00000430 20 4c 44 52 20 20 20 52 30 2c 5b 52 31 30 2c 23 | LDR R0,[R10,#| 00000440 65 5f 6d 61 78 79 5d 0a 20 20 53 55 42 20 20 20 |e_maxy]. SUB | 00000450 52 30 2c 52 30 2c 23 62 61 6c 6c 5f 64 69 61 0a |R0,R0,#ball_dia.| 00000460 20 20 4d 4f 56 20 20 20 52 31 34 2c 50 43 0a 20 | MOV R14,PC. | 00000470 20 4c 44 52 20 20 20 50 43 2c 5b 52 31 30 2c 23 | LDR PC,[R10,#| 00000480 65 5f 72 61 6e 64 6f 6d 5d 0a 20 20 53 54 52 20 |e_random]. STR | 00000490 20 20 52 30 2c 5b 52 32 2c 23 62 61 6c 6c 5f 79 | R0,[R2,#ball_y| 000004a0 5d 0a 20 20 4d 4f 56 20 20 20 52 30 2c 52 33 2c |]. MOV R0,R3,| 000004b0 4c 53 4c 23 31 0a 20 20 4d 4f 56 20 20 20 52 31 |LSL#1. MOV R1| 000004c0 34 2c 50 43 0a 20 20 4c 44 52 20 20 20 50 43 2c |4,PC. LDR PC,| 000004d0 5b 52 31 30 2c 23 65 5f 72 61 6e 64 6f 6d 5d 0a |[R10,#e_random].| 000004e0 20 20 53 55 42 20 20 20 52 30 2c 52 30 2c 52 33 | SUB R0,R0,R3| 000004f0 0a 20 20 43 4d 50 20 20 20 52 30 2c 23 30 0a 20 |. CMP R0,#0. | 00000500 20 4d 4f 56 45 51 20 52 30 2c 23 2d 32 0a 20 20 | MOVEQ R0,#-2. | 00000510 53 54 52 20 20 20 52 30 2c 5b 52 32 2c 23 62 61 |STR R0,[R2,#ba| 00000520 6c 6c 5f 78 76 5d 0a 20 20 4d 4f 56 20 20 20 52 |ll_xv]. MOV R| 00000530 30 2c 52 33 2c 4c 53 52 23 31 0a 20 20 4d 4f 56 |0,R3,LSR#1. MOV| 00000540 20 20 20 52 31 34 2c 50 43 0a 20 20 4c 44 52 20 | R14,PC. LDR | 00000550 20 20 50 43 2c 5b 52 31 30 2c 23 65 5f 72 61 6e | PC,[R10,#e_ran| 00000560 64 6f 6d 5d 0a 20 20 4d 4f 56 20 20 20 52 30 2c |dom]. MOV R0,| 00000570 52 30 2c 4c 53 4c 23 31 0a 20 20 53 55 42 20 20 |R0,LSL#1. SUB | 00000580 20 52 30 2c 52 30 2c 52 33 0a 20 20 43 4d 50 20 | R0,R0,R3. CMP | 00000590 20 20 52 30 2c 23 30 0a 20 20 4d 4f 56 45 51 20 | R0,#0. MOVEQ | 000005a0 52 30 2c 23 2d 32 0a 20 20 53 54 52 20 20 20 52 |R0,#-2. STR R| 000005b0 30 2c 5b 52 32 2c 23 62 61 6c 6c 5f 79 76 5d 0a |0,[R2,#ball_yv].| 000005c0 20 20 41 44 44 20 20 20 52 32 2c 52 32 2c 23 62 | ADD R2,R2,#b| 000005d0 61 6c 6c 5f 73 69 7a 65 0a 20 20 53 55 42 53 20 |all_size. SUBS | 000005e0 20 52 34 2c 52 34 2c 23 31 0a 20 42 4e 45 20 20 | R4,R4,#1. BNE | 000005f0 20 69 6e 69 74 5f 62 61 6c 6c 5f 6c 6f 6f 70 0a | init_ball_loop.| 00000600 20 4c 44 52 20 20 20 52 34 2c 5b 52 31 30 2c 23 | LDR R4,[R10,#| 00000610 65 5f 63 6f 6c 6f 75 72 73 5d 0a 20 43 4d 50 20 |e_colours]. CMP | 00000620 20 20 52 34 2c 23 6e 75 6d 62 65 72 5f 6f 66 5f | R4,#number_of_| 00000630 62 61 6c 6c 73 0a 20 4d 4f 56 47 54 20 52 34 2c |balls. MOVGT R4,| 00000640 23 6e 75 6d 62 65 72 5f 6f 66 5f 62 61 6c 6c 73 |#number_of_balls| 00000650 0a 69 6e 69 74 5f 70 61 6c 65 74 74 65 5f 6c 6f |.init_palette_lo| 00000660 6f 70 0a 20 20 4c 44 52 20 20 20 52 30 2c 69 6e |op. LDR R0,in| 00000670 69 74 5f 6d 61 78 5f 70 61 6c 65 74 74 65 5f 6e |it_max_palette_n| 00000680 75 6d 62 65 72 0a 20 20 4d 4f 56 20 20 20 52 31 |umber. MOV R1| 00000690 34 2c 50 43 0a 20 20 4c 44 52 20 20 20 50 43 2c |4,PC. LDR PC,| 000006a0 5b 52 31 30 2c 23 65 5f 72 61 6e 64 6f 6d 5d 0a |[R10,#e_random].| 000006b0 20 20 41 4e 44 20 20 20 52 33 2c 52 30 2c 23 32 | AND R3,R0,#2| 000006c0 35 35 0a 20 20 4d 4f 56 20 20 20 52 32 2c 52 30 |55. MOV R2,R0| 000006d0 2c 4c 53 52 23 38 0a 20 20 41 4e 44 20 20 20 52 |,LSR#8. AND R| 000006e0 32 2c 52 32 2c 23 32 35 35 0a 20 20 4d 4f 56 20 |2,R2,#255. MOV | 000006f0 20 20 52 31 2c 52 30 2c 4c 53 52 23 31 36 0a 20 | R1,R0,LSR#16. | 00000700 20 41 4e 44 20 20 20 52 31 2c 52 31 2c 23 32 35 | AND R1,R1,#25| 00000710 35 0a 20 20 41 44 44 20 20 20 52 30 2c 52 31 2c |5. ADD R0,R1,| 00000720 52 32 0a 20 20 41 44 44 20 20 20 52 30 2c 52 30 |R2. ADD R0,R0| 00000730 2c 52 33 0a 20 20 52 53 42 53 20 20 52 30 2c 52 |,R3. RSBS R0,R| 00000740 30 2c 23 72 65 71 75 69 72 65 64 5f 63 6f 6c 6f |0,#required_colo| 00000750 75 72 5f 61 76 65 72 61 67 65 0a 20 20 41 44 44 |ur_average. ADD| 00000760 47 54 20 52 31 2c 52 31 2c 52 30 2c 4c 53 52 23 |GT R1,R1,R0,LSR#| 00000770 31 0a 20 20 41 44 44 47 54 20 52 33 2c 52 33 2c |1. ADDGT R3,R3,| 00000780 52 30 2c 4c 53 52 23 31 0a 20 20 53 57 49 20 20 |R0,LSR#1. SWI | 00000790 20 58 4f 53 5f 57 72 69 74 65 49 2b 31 39 0a 20 | XOS_WriteI+19. | 000007a0 20 4d 4f 56 20 20 20 52 30 2c 52 34 0a 20 20 53 | MOV R0,R4. S| 000007b0 57 49 20 20 20 58 4f 53 5f 57 72 69 74 65 43 0a |WI XOS_WriteC.| 000007c0 20 20 53 57 49 20 20 20 58 4f 53 5f 57 72 69 74 | SWI XOS_Writ| 000007d0 65 49 2b 31 36 0a 20 20 4d 4f 56 20 20 20 52 30 |eI+16. MOV R0| 000007e0 2c 52 31 0a 20 20 53 57 49 20 20 20 58 4f 53 5f |,R1. SWI XOS_| 000007f0 57 72 69 74 65 43 0a 20 20 4d 4f 56 20 20 20 52 |WriteC. MOV R| 00000800 30 2c 52 32 0a 20 20 53 57 49 20 20 20 58 4f 53 |0,R2. SWI XOS| 00000810 5f 57 72 69 74 65 43 0a 20 20 4d 4f 56 20 20 20 |_WriteC. MOV | 00000820 52 30 2c 52 33 0a 20 20 53 57 49 20 20 20 58 4f |R0,R3. SWI XO| 00000830 53 5f 57 72 69 74 65 43 0a 20 20 53 55 42 53 20 |S_WriteC. SUBS | 00000840 20 52 34 2c 52 34 2c 23 31 0a 20 42 4e 45 20 20 | R4,R4,#1. BNE | 00000850 20 69 6e 69 74 5f 70 61 6c 65 74 74 65 5f 6c 6f | init_palette_lo| 00000860 6f 70 0a 20 41 44 52 20 20 20 52 30 2c 62 61 6c |op. ADR R0,bal| 00000870 6c 73 0a 20 4d 4f 56 20 20 20 52 35 2c 23 6e 75 |ls. MOV R5,#nu| 00000880 6d 62 65 72 5f 6f 66 5f 62 61 6c 6c 73 0a 20 4d |mber_of_balls. M| 00000890 4f 56 20 20 20 52 34 2c 23 31 0a 20 4c 44 52 20 |OV R4,#1. LDR | 000008a0 20 20 52 36 2c 5b 52 31 30 2c 23 65 5f 63 6f 6c | R6,[R10,#e_col| 000008b0 6f 75 72 73 5d 0a 69 6e 69 74 5f 64 72 61 77 5f |ours].init_draw_| 000008c0 62 61 6c 6c 73 5f 6c 6f 6f 70 0a 20 20 4d 4f 56 |balls_loop. MOV| 000008d0 20 20 20 52 37 2c 52 30 0a 20 20 43 4d 50 20 20 | R7,R0. CMP | 000008e0 20 52 34 2c 52 36 0a 20 20 4d 4f 56 47 54 20 52 | R4,R6. MOVGT R| 000008f0 34 2c 52 36 0a 20 20 4d 4f 56 20 20 20 52 31 2c |4,R6. MOV R1,| 00000900 52 34 0a 20 20 4d 4f 56 20 20 20 52 30 2c 52 37 |R4. MOV R0,R7| 00000910 0a 20 20 42 4c 20 20 20 20 64 72 61 77 5f 62 61 |. BL draw_ba| 00000920 6c 6c 0a 20 20 41 44 44 20 20 20 52 30 2c 52 30 |ll. ADD R0,R0| 00000930 2c 23 62 61 6c 6c 5f 73 69 7a 65 0a 20 20 41 44 |,#ball_size. AD| 00000940 44 20 20 20 52 34 2c 52 34 2c 23 31 0a 20 20 53 |D R4,R4,#1. S| 00000950 55 42 53 20 20 52 35 2c 52 35 2c 23 31 0a 20 42 |UBS R5,R5,#1. B| 00000960 4e 45 20 20 20 69 6e 69 74 5f 64 72 61 77 5f 62 |NE init_draw_b| 00000970 61 6c 6c 73 5f 6c 6f 6f 70 0a 20 4c 44 4d 46 44 |alls_loop. LDMFD| 00000980 20 52 31 33 21 2c 7b 50 43 7d 0a 69 6e 69 74 5f | R13!,{PC}.init_| 00000990 65 72 72 6f 72 0a 20 4c 44 4d 46 44 20 52 31 33 |error. LDMFD R13| 000009a0 21 2c 7b 52 31 34 7d 0a 20 4f 52 52 53 20 20 50 |!,{R14}. ORRS P| 000009b0 43 2c 52 31 34 2c 23 76 5f 66 6c 61 67 0a 0a 69 |C,R14,#v_flag..i| 000009c0 6e 69 74 5f 6d 61 78 5f 70 61 6c 65 74 74 65 5f |nit_max_palette_| 000009d0 6e 75 6d 62 65 72 0a 20 44 43 44 20 26 46 46 46 |number. DCD &FFF| 000009e0 46 46 46 0a 20 41 4c 49 47 4e 0a 0a 20 20 3b 20 |FFF. ALIGN.. ; | 000009f0 52 30 20 3d 20 70 6f 69 6e 74 65 72 20 74 6f 20 |R0 = pointer to | 00000a00 62 61 6c 6c 20 74 6f 20 64 72 61 77 0a 20 20 3b |ball to draw. ;| 00000a10 20 52 31 20 3d 20 63 6f 6c 6f 75 72 0a 64 72 61 | R1 = colour.dra| 00000a20 77 5f 62 61 6c 6c 0a 20 53 54 4d 46 44 20 52 31 |w_ball. STMFD R1| 00000a30 33 21 2c 7b 52 30 2d 52 32 2c 52 35 2d 52 37 2c |3!,{R0-R2,R5-R7,| 00000a40 52 31 34 7d 0a 20 4d 4f 56 20 20 20 52 36 2c 52 |R14}. MOV R6,R| 00000a50 30 0a 20 4d 4f 56 20 20 20 52 37 2c 52 31 0a 20 |0. MOV R7,R1. | 00000a60 53 57 49 20 20 20 58 4f 53 5f 57 72 69 74 65 49 |SWI XOS_WriteI| 00000a70 2b 31 38 0a 20 53 57 49 20 20 20 58 4f 53 5f 57 |+18. SWI XOS_W| 00000a80 72 69 74 65 49 2b 30 0a 20 53 57 49 20 20 20 58 |riteI+0. SWI X| 00000a90 4f 53 5f 57 72 69 74 65 49 2b 30 0a 20 4d 4f 56 |OS_WriteI+0. MOV| 00000aa0 20 20 20 52 30 2c 23 34 0a 20 4c 44 52 20 20 20 | R0,#4. LDR | 00000ab0 52 31 2c 5b 52 36 2c 23 62 61 6c 6c 5f 78 5d 0a |R1,[R6,#ball_x].| 00000ac0 20 4c 44 52 20 20 20 52 32 2c 5b 52 36 2c 23 62 | LDR R2,[R6,#b| 00000ad0 61 6c 6c 5f 79 5d 0a 20 53 57 49 20 20 20 58 4f |all_y]. SWI XO| 00000ae0 53 5f 50 6c 6f 74 0a 20 4d 4f 56 20 20 20 52 30 |S_Plot. MOV R0| 00000af0 2c 23 31 30 31 0a 20 4c 44 52 20 20 20 52 31 2c |,#101. LDR R1,| 00000b00 5b 52 36 2c 23 62 61 6c 6c 5f 78 5d 0a 20 41 44 |[R6,#ball_x]. AD| 00000b10 44 20 20 20 52 31 2c 52 31 2c 23 62 61 6c 6c 5f |D R1,R1,#ball_| 00000b20 64 69 61 0a 20 4c 44 52 20 20 20 52 32 2c 5b 52 |dia. LDR R2,[R| 00000b30 36 2c 23 62 61 6c 6c 5f 79 5d 0a 20 41 44 44 20 |6,#ball_y]. ADD | 00000b40 20 20 52 32 2c 52 32 2c 23 62 61 6c 6c 5f 64 69 | R2,R2,#ball_di| 00000b50 61 0a 20 53 57 49 20 20 20 58 4f 53 5f 50 6c 6f |a. SWI XOS_Plo| 00000b60 74 0a 20 53 57 49 20 20 20 58 4f 53 5f 57 72 69 |t. SWI XOS_Wri| 00000b70 74 65 49 2b 31 38 0a 20 53 57 49 20 20 20 58 4f |teI+18. SWI XO| 00000b80 53 5f 57 72 69 74 65 49 2b 30 0a 20 4d 4f 56 20 |S_WriteI+0. MOV | 00000b90 20 20 52 30 2c 52 37 0a 20 53 57 49 20 20 20 58 | R0,R7. SWI X| 00000ba0 4f 53 5f 57 72 69 74 65 43 0a 20 4d 4f 56 20 20 |OS_WriteC. MOV | 00000bb0 20 52 30 2c 23 34 0a 20 4c 44 52 20 20 20 52 37 | R0,#4. LDR R7| 00000bc0 2c 5b 52 36 2c 23 62 61 6c 6c 5f 78 5d 0a 20 4c |,[R6,#ball_x]. L| 00000bd0 44 52 20 20 20 52 35 2c 5b 52 36 2c 23 62 61 6c |DR R5,[R6,#bal| 00000be0 6c 5f 79 5d 0a 20 41 44 44 20 20 20 52 31 2c 52 |l_y]. ADD R1,R| 00000bf0 37 2c 23 62 61 6c 6c 5f 64 69 61 2f 32 0a 20 41 |7,#ball_dia/2. A| 00000c00 44 44 20 20 20 52 32 2c 52 35 2c 23 62 61 6c 6c |DD R2,R5,#ball| 00000c10 5f 64 69 61 2f 32 0a 20 53 57 49 20 20 20 58 4f |_dia/2. SWI XO| 00000c20 53 5f 50 6c 6f 74 0a 20 4d 4f 56 20 20 20 52 30 |S_Plot. MOV R0| 00000c30 2c 23 31 35 37 20 20 20 3b 20 63 69 72 63 6c 65 |,#157 ; circle| 00000c40 20 66 69 6c 6c 0a 20 41 44 44 20 20 20 52 31 2c | fill. ADD R1,| 00000c50 52 37 2c 23 62 61 6c 6c 5f 64 69 61 0a 20 41 44 |R7,#ball_dia. AD| 00000c60 44 20 20 20 52 32 2c 52 35 2c 23 62 61 6c 6c 5f |D R2,R5,#ball_| 00000c70 64 69 61 2f 32 0a 20 53 57 49 20 20 20 58 4f 53 |dia/2. SWI XOS| 00000c80 5f 50 6c 6f 74 0a 20 4c 44 4d 46 44 20 52 31 33 |_Plot. LDMFD R13| 00000c90 21 2c 7b 52 30 2d 52 32 2c 52 35 2d 52 37 2c 50 |!,{R0-R2,R5-R7,P| 00000ca0 43 7d 5e 0a 0a 70 6f 6c 6c 0a 20 53 54 4d 46 44 |C}^..poll. STMFD| 00000cb0 20 52 31 33 21 2c 7b 52 31 34 7d 0a 20 4c 44 52 | R13!,{R14}. LDR| 00000cc0 20 20 20 52 31 31 2c 5b 52 31 31 5d 0a 20 41 44 | R11,[R11]. AD| 00000cd0 52 20 20 20 52 38 2c 62 61 6c 6c 73 0a 20 4d 4f |R R8,balls. MO| 00000ce0 56 20 20 20 52 37 2c 23 6e 75 6d 62 65 72 5f 6f |V R7,#number_o| 00000cf0 66 5f 62 61 6c 6c 73 0a 20 4d 4f 56 20 20 20 52 |f_balls. MOV R| 00000d00 36 2c 23 31 0a 70 72 6f 63 65 73 73 5f 62 61 6c |6,#1.process_bal| 00000d10 6c 5f 6c 6f 6f 70 0a 20 20 4d 4f 56 20 20 20 52 |l_loop. MOV R| 00000d20 30 2c 23 30 0a 20 20 53 54 52 20 20 20 52 30 2c |0,#0. STR R0,| 00000d30 72 64 0a 20 20 20 20 3b 20 6d 6f 76 65 20 74 6f |rd. ; move to| 00000d40 20 63 75 72 72 65 6e 74 20 70 6f 73 69 74 69 6f | current positio| 00000d50 6e 0a 20 20 4c 44 52 20 20 20 52 33 2c 5b 52 38 |n. LDR R3,[R8| 00000d60 2c 23 62 61 6c 6c 5f 78 5d 0a 20 20 4c 44 52 20 |,#ball_x]. LDR | 00000d70 20 20 52 34 2c 5b 52 38 2c 23 62 61 6c 6c 5f 79 | R4,[R8,#ball_y| 00000d80 5d 0a 20 20 4d 4f 56 20 20 20 52 30 2c 23 34 20 |]. MOV R0,#4 | 00000d90 20 3b 20 6d 6f 76 65 0a 20 20 4d 4f 56 20 20 20 | ; move. MOV | 00000da0 52 31 2c 52 33 0a 20 20 4d 4f 56 20 20 20 52 32 |R1,R3. MOV R2| 00000db0 2c 52 34 0a 20 20 53 57 49 20 20 20 58 4f 53 5f |,R4. SWI XOS_| 00000dc0 50 6c 6f 74 0a 20 20 4d 4f 56 20 20 20 52 30 2c |Plot. MOV R0,| 00000dd0 23 34 0a 20 20 41 44 44 20 20 20 52 31 2c 52 33 |#4. ADD R1,R3| 00000de0 2c 23 62 61 6c 6c 5f 64 69 61 0a 20 20 41 44 44 |,#ball_dia. ADD| 00000df0 20 20 20 52 32 2c 52 34 2c 23 62 61 6c 6c 5f 64 | R2,R4,#ball_d| 00000e00 69 61 0a 20 20 53 57 49 20 20 20 58 4f 53 5f 50 |ia. SWI XOS_P| 00000e10 6c 6f 74 0a 20 20 20 20 3b 20 72 65 63 61 6c 63 |lot. ; recalc| 00000e20 75 6c 61 74 65 20 62 61 6c 6c 0a 20 20 4c 44 52 |ulate ball. LDR| 00000e30 20 20 20 52 30 2c 5b 52 38 2c 23 62 61 6c 6c 5f | R0,[R8,#ball_| 00000e40 78 5d 0a 20 20 4c 44 52 20 20 20 52 31 2c 5b 52 |x]. LDR R1,[R| 00000e50 38 2c 23 62 61 6c 6c 5f 78 76 5d 0a 20 20 41 44 |8,#ball_xv]. AD| 00000e60 44 20 20 20 52 30 2c 52 30 2c 52 31 0a 20 20 53 |D R0,R0,R1. S| 00000e70 54 52 20 20 20 52 30 2c 5b 52 38 2c 23 62 61 6c |TR R0,[R8,#bal| 00000e80 6c 5f 78 5d 0a 20 20 4c 44 52 20 20 20 52 31 2c |l_x]. LDR R1,| 00000e90 5b 52 31 30 2c 23 65 5f 6d 61 78 78 5d 0a 20 20 |[R10,#e_maxx]. | 00000ea0 53 55 42 20 20 20 52 31 2c 52 31 2c 23 62 61 6c |SUB R1,R1,#bal| 00000eb0 6c 5f 64 69 61 0a 20 20 43 4d 50 20 20 20 52 30 |l_dia. CMP R0| 00000ec0 2c 23 30 0a 20 20 42 4c 45 20 20 20 72 65 76 65 |,#0. BLE reve| 00000ed0 72 73 65 5f 78 76 0a 20 20 43 4d 50 20 20 20 52 |rse_xv. CMP R| 00000ee0 30 2c 52 31 0a 20 20 42 47 45 20 20 20 72 65 76 |0,R1. BGE rev| 00000ef0 65 72 73 65 5f 78 76 0a 72 65 76 65 72 73 65 5f |erse_xv.reverse_| 00000f00 78 76 5f 72 65 74 75 72 6e 0a 20 20 4c 44 52 20 |xv_return. LDR | 00000f10 20 20 52 30 2c 5b 52 38 2c 23 62 61 6c 6c 5f 79 | R0,[R8,#ball_y| 00000f20 5d 0a 20 20 4c 44 52 20 20 20 52 31 2c 5b 52 38 |]. LDR R1,[R8| 00000f30 2c 23 62 61 6c 6c 5f 79 76 5d 0a 20 20 41 44 44 |,#ball_yv]. ADD| 00000f40 20 20 20 52 30 2c 52 30 2c 52 31 0a 20 20 53 54 | R0,R0,R1. ST| 00000f50 52 20 20 20 52 30 2c 5b 52 38 2c 23 62 61 6c 6c |R R0,[R8,#ball| 00000f60 5f 79 5d 0a 20 20 4c 44 52 20 20 20 52 31 2c 5b |_y]. LDR R1,[| 00000f70 52 31 30 2c 23 65 5f 6d 61 78 79 5d 0a 20 20 53 |R10,#e_maxy]. S| 00000f80 55 42 20 20 20 52 31 2c 52 31 2c 23 62 61 6c 6c |UB R1,R1,#ball| 00000f90 5f 64 69 61 0a 20 20 43 4d 50 20 20 20 52 30 2c |_dia. CMP R0,| 00000fa0 23 30 0a 20 20 42 4c 45 20 20 20 72 65 76 65 72 |#0. BLE rever| 00000fb0 73 65 5f 79 76 0a 20 20 43 4d 50 20 20 20 52 30 |se_yv. CMP R0| 00000fc0 2c 52 31 0a 20 20 42 47 45 20 20 20 72 65 76 65 |,R1. BGE reve| 00000fd0 72 73 65 5f 79 76 0a 72 65 76 65 72 73 65 5f 79 |rse_yv.reverse_y| 00000fe0 76 5f 72 65 74 75 72 6e 0a 20 20 20 20 3b 20 6d |v_return. ; m| 00000ff0 6f 76 65 20 6f 6c 64 20 62 61 6c 6c 20 74 6f 20 |ove old ball to | 00001000 6e 65 77 20 70 6f 73 69 74 69 6f 6e 0a 20 20 4d |new position. M| 00001010 4f 56 20 20 20 52 30 2c 23 31 38 39 20 20 20 20 |OV R0,#189 | 00001020 3b 20 62 6c 6f 63 6b 20 6d 6f 76 65 0a 20 20 4c |; block move. L| 00001030 44 52 20 20 20 52 31 2c 5b 52 38 2c 23 62 61 6c |DR R1,[R8,#bal| 00001040 6c 5f 78 5d 0a 20 20 4c 44 52 20 20 20 52 32 2c |l_x]. LDR R2,| 00001050 5b 52 38 2c 23 62 61 6c 6c 5f 79 5d 0a 20 20 53 |[R8,#ball_y]. S| 00001060 57 49 20 20 20 58 4f 53 5f 50 6c 6f 74 0a 20 20 |WI XOS_Plot. | 00001070 4c 44 52 20 20 20 52 30 2c 72 64 0a 20 20 43 4d |LDR R0,rd. CM| 00001080 50 20 20 20 52 30 2c 23 30 0a 20 20 4d 4f 56 4e |P R0,#0. MOVN| 00001090 45 20 52 30 2c 23 72 65 64 72 61 77 5f 74 69 6d |E R0,#redraw_tim| 000010a0 65 73 0a 20 20 53 54 52 4e 45 20 52 30 2c 5b 52 |es. STRNE R0,[R| 000010b0 38 2c 23 62 61 6c 6c 5f 72 64 5d 0a 20 20 4c 44 |8,#ball_rd]. LD| 000010c0 52 20 20 20 52 30 2c 5b 52 38 2c 23 62 61 6c 6c |R R0,[R8,#ball| 000010d0 5f 72 64 5d 0a 20 20 53 55 42 53 20 20 52 30 2c |_rd]. SUBS R0,| 000010e0 52 30 2c 23 31 0a 20 20 42 4c 54 20 20 20 61 66 |R0,#1. BLT af| 000010f0 74 65 72 5f 72 65 64 72 61 77 5f 62 61 6c 6c 0a |ter_redraw_ball.| 00001100 20 20 53 54 52 20 20 20 52 30 2c 5b 52 38 2c 23 | STR R0,[R8,#| 00001110 62 61 6c 6c 5f 72 64 5d 0a 3b 20 20 53 57 49 20 |ball_rd].; SWI | 00001120 20 20 58 4f 53 5f 57 72 69 74 65 49 2b 31 38 0a | XOS_WriteI+18.| 00001130 3b 20 20 53 57 49 20 20 20 58 4f 53 5f 57 72 69 |; SWI XOS_Wri| 00001140 74 65 49 2b 30 0a 20 20 4d 4f 56 20 20 20 52 31 |teI+0. MOV R1| 00001150 2c 52 36 0a 3b 20 20 53 57 49 20 20 20 58 4f 53 |,R6.; SWI XOS| 00001160 5f 57 72 69 74 65 43 0a 20 20 4d 4f 56 20 20 20 |_WriteC. MOV | 00001170 52 30 2c 52 38 0a 20 20 42 4c 20 20 20 20 64 72 |R0,R8. BL dr| 00001180 61 77 5f 62 61 6c 6c 0a 61 66 74 65 72 5f 72 65 |aw_ball.after_re| 00001190 64 72 61 77 5f 62 61 6c 6c 0a 3b 20 20 4c 44 52 |draw_ball.; LDR| 000011a0 20 20 20 52 30 2c 72 64 0a 3b 20 20 53 54 52 20 | R0,rd.; STR | 000011b0 20 20 52 30 2c 5b 52 38 2c 23 62 61 6c 6c 5f 72 | R0,[R8,#ball_r| 000011c0 64 5d 0a 20 20 4c 44 52 20 20 20 52 30 2c 5b 52 |d]. LDR R0,[R| 000011d0 31 30 2c 23 65 5f 63 6f 6c 6f 75 72 73 5d 0a 20 |10,#e_colours]. | 000011e0 20 41 44 44 20 20 20 52 36 2c 52 36 2c 23 31 0a | ADD R6,R6,#1.| 000011f0 20 20 43 4d 50 20 20 20 52 36 2c 52 30 0a 20 20 | CMP R6,R0. | 00001200 4d 4f 56 47 54 20 52 36 2c 52 30 0a 20 20 41 44 |MOVGT R6,R0. AD| 00001210 44 20 20 20 52 38 2c 52 38 2c 23 62 61 6c 6c 5f |D R8,R8,#ball_| 00001220 73 69 7a 65 0a 20 20 53 55 42 53 20 20 52 37 2c |size. SUBS R7,| 00001230 52 37 2c 23 31 0a 20 42 4e 45 20 20 20 70 72 6f |R7,#1. BNE pro| 00001240 63 65 73 73 5f 62 61 6c 6c 5f 6c 6f 6f 70 0a 20 |cess_ball_loop. | 00001250 41 44 52 20 20 20 52 38 2c 62 61 6c 6c 73 0a 20 |ADR R8,balls. | 00001260 4d 4f 56 20 20 20 52 37 2c 23 6e 75 6d 62 65 72 |MOV R7,#number| 00001270 5f 6f 66 5f 62 61 6c 6c 73 0a 20 4d 4f 56 20 20 |_of_balls. MOV | 00001280 20 52 36 2c 23 31 0a 63 68 65 63 6b 5f 63 6f 6c | R6,#1.check_col| 00001290 6c 69 73 69 6f 6e 73 5f 6c 6f 6f 70 0a 20 20 41 |lisions_loop. A| 000012a0 44 52 20 20 20 52 35 2c 62 61 6c 6c 73 0a 20 20 |DR R5,balls. | 000012b0 4d 4f 56 20 20 20 52 34 2c 23 6e 75 6d 62 65 72 |MOV R4,#number| 000012c0 5f 6f 66 5f 62 61 6c 6c 73 0a 63 68 65 63 6b 5f |_of_balls.check_| 000012d0 63 6f 6c 6c 69 73 69 6f 6e 73 5f 6c 6f 6f 70 32 |collisions_loop2| 000012e0 0a 20 20 20 43 4d 50 20 20 20 52 34 2c 52 37 0a |. CMP R4,R7.| 000012f0 20 20 20 42 45 51 20 20 20 63 68 65 63 6b 5f 63 | BEQ check_c| 00001300 6f 6c 6c 69 73 69 6f 6e 73 5f 6c 6f 6f 70 32 5f |ollisions_loop2_| 00001310 61 66 74 65 72 5f 63 68 65 63 6b 0a 20 20 20 4c |after_check. L| 00001320 44 52 20 20 20 52 33 2c 5b 52 38 2c 23 62 61 6c |DR R3,[R8,#bal| 00001330 6c 5f 78 5d 0a 20 20 20 41 44 44 20 20 20 52 32 |l_x]. ADD R2| 00001340 2c 52 33 2c 23 62 61 6c 6c 5f 64 69 61 0a 20 20 |,R3,#ball_dia. | 00001350 20 4c 44 52 20 20 20 52 30 2c 5b 52 35 2c 23 62 | LDR R0,[R5,#b| 00001360 61 6c 6c 5f 78 5d 0a 20 20 20 41 44 44 20 20 20 |all_x]. ADD | 00001370 52 31 2c 52 30 2c 23 62 61 6c 6c 5f 64 69 61 0a |R1,R0,#ball_dia.| 00001380 63 68 65 63 6b 31 61 0a 20 20 20 43 4d 50 20 20 |check1a. CMP | 00001390 20 52 31 2c 52 33 0a 20 20 20 42 4c 54 20 20 20 | R1,R3. BLT | 000013a0 63 68 65 63 6b 32 61 0a 63 68 65 63 6b 31 62 0a |check2a.check1b.| 000013b0 20 20 20 43 4d 50 20 20 20 52 31 2c 52 32 0a 20 | CMP R1,R2. | 000013c0 20 20 42 4c 54 20 20 20 63 68 65 63 6b 5f 79 0a | BLT check_y.| 000013d0 63 68 65 63 6b 32 61 0a 20 20 20 43 4d 50 20 20 |check2a. CMP | 000013e0 20 52 30 2c 52 33 0a 20 20 20 42 4c 54 20 20 20 | R0,R3. BLT | 000013f0 63 68 65 63 6b 5f 63 6f 6c 6c 69 73 69 6f 6e 73 |check_collisions| 00001400 5f 6c 6f 6f 70 32 5f 61 66 74 65 72 5f 63 68 65 |_loop2_after_che| 00001410 63 6b 0a 63 68 65 63 6b 32 62 0a 20 20 20 43 4d |ck.check2b. CM| 00001420 50 20 20 20 52 30 2c 52 32 0a 20 20 20 42 47 54 |P R0,R2. BGT| 00001430 20 20 20 63 68 65 63 6b 5f 63 6f 6c 6c 69 73 69 | check_collisi| 00001440 6f 6e 73 5f 6c 6f 6f 70 32 5f 61 66 74 65 72 5f |ons_loop2_after_| 00001450 63 68 65 63 6b 0a 63 68 65 63 6b 5f 79 0a 20 20 |check.check_y. | 00001460 20 4c 44 52 20 20 20 52 33 2c 5b 52 38 2c 23 62 | LDR R3,[R8,#b| 00001470 61 6c 6c 5f 79 5d 0a 20 20 20 41 44 44 20 20 20 |all_y]. ADD | 00001480 52 32 2c 52 33 2c 23 62 61 6c 6c 5f 64 69 61 0a |R2,R3,#ball_dia.| 00001490 20 20 20 4c 44 52 20 20 20 52 30 2c 5b 52 35 2c | LDR R0,[R5,| 000014a0 23 62 61 6c 6c 5f 79 5d 0a 20 20 20 41 44 44 20 |#ball_y]. ADD | 000014b0 20 20 52 31 2c 52 30 2c 23 62 61 6c 6c 5f 64 69 | R1,R0,#ball_di| 000014c0 61 0a 63 68 65 63 6b 33 61 0a 20 20 20 43 4d 50 |a.check3a. CMP| 000014d0 20 20 20 52 31 2c 52 33 0a 20 20 20 42 4c 54 20 | R1,R3. BLT | 000014e0 20 20 63 68 65 63 6b 34 61 0a 63 68 65 63 6b 33 | check4a.check3| 000014f0 62 0a 20 20 20 43 4d 50 20 20 20 52 31 2c 52 32 |b. CMP R1,R2| 00001500 0a 20 20 20 42 4c 54 20 20 20 63 6f 6c 6c 69 73 |. BLT collis| 00001510 69 6f 6e 0a 63 68 65 63 6b 34 61 0a 20 20 20 43 |ion.check4a. C| 00001520 4d 50 20 20 20 52 30 2c 52 33 0a 20 20 20 42 4c |MP R0,R3. BL| 00001530 54 20 20 20 63 68 65 63 6b 5f 63 6f 6c 6c 69 73 |T check_collis| 00001540 69 6f 6e 73 5f 6c 6f 6f 70 32 5f 61 66 74 65 72 |ions_loop2_after| 00001550 5f 63 68 65 63 6b 0a 63 68 65 63 6b 34 62 0a 20 |_check.check4b. | 00001560 20 20 43 4d 50 20 20 20 52 30 2c 52 32 0a 20 20 | CMP R0,R2. | 00001570 20 42 47 54 20 20 20 63 68 65 63 6b 5f 63 6f 6c | BGT check_col| 00001580 6c 69 73 69 6f 6e 73 5f 6c 6f 6f 70 32 5f 61 66 |lisions_loop2_af| 00001590 74 65 72 5f 63 68 65 63 6b 0a 63 6f 6c 6c 69 73 |ter_check.collis| 000015a0 69 6f 6e 0a 20 20 20 4d 4f 56 20 20 20 52 30 2c |ion. MOV R0,| 000015b0 23 72 65 64 72 61 77 5f 74 69 6d 65 73 0a 20 20 |#redraw_times. | 000015c0 20 53 54 52 20 20 20 52 30 2c 5b 52 38 2c 23 62 | STR R0,[R8,#b| 000015d0 61 6c 6c 5f 72 64 5d 0a 20 20 20 53 54 52 20 20 |all_rd]. STR | 000015e0 20 52 30 2c 5b 52 35 2c 23 62 61 6c 6c 5f 72 64 | R0,[R5,#ball_rd| 000015f0 5d 0a 20 20 20 4c 44 52 20 20 20 52 30 2c 5b 52 |]. LDR R0,[R| 00001600 38 2c 23 62 61 6c 6c 5f 78 76 5d 0a 20 20 20 4c |8,#ball_xv]. L| 00001610 44 52 20 20 20 52 31 2c 5b 52 38 2c 23 62 61 6c |DR R1,[R8,#bal| 00001620 6c 5f 79 76 5d 0a 20 20 20 53 54 52 20 20 20 52 |l_yv]. STR R| 00001630 31 2c 5b 52 38 2c 23 62 61 6c 6c 5f 78 76 5d 0a |1,[R8,#ball_xv].| 00001640 20 20 20 52 53 42 20 20 20 52 30 2c 52 30 2c 23 | RSB R0,R0,#| 00001650 30 0a 20 20 20 53 54 52 20 20 20 52 30 2c 5b 52 |0. STR R0,[R| 00001660 38 2c 23 62 61 6c 6c 5f 79 76 5d 0a 20 20 20 4c |8,#ball_yv]. L| 00001670 44 52 20 20 20 52 30 2c 5b 52 35 2c 23 62 61 6c |DR R0,[R5,#bal| 00001680 6c 5f 78 76 5d 0a 20 20 20 4c 44 52 20 20 20 52 |l_xv]. LDR R| 00001690 31 2c 5b 52 35 2c 23 62 61 6c 6c 5f 79 76 5d 0a |1,[R5,#ball_yv].| 000016a0 20 20 20 53 54 52 20 20 20 52 31 2c 5b 52 35 2c | STR R1,[R5,| 000016b0 23 62 61 6c 6c 5f 78 76 5d 0a 20 20 20 52 53 42 |#ball_xv]. RSB| 000016c0 20 20 20 52 30 2c 52 30 2c 23 30 0a 20 20 20 53 | R0,R0,#0. S| 000016d0 54 52 20 20 20 52 30 2c 5b 52 35 2c 23 62 61 6c |TR R0,[R5,#bal| 000016e0 6c 5f 79 76 5d 0a 63 68 65 63 6b 5f 63 6f 6c 6c |l_yv].check_coll| 000016f0 69 73 69 6f 6e 73 5f 6c 6f 6f 70 32 5f 61 66 74 |isions_loop2_aft| 00001700 65 72 5f 63 68 65 63 6b 0a 20 20 20 41 44 44 20 |er_check. ADD | 00001710 20 20 52 35 2c 52 35 2c 23 62 61 6c 6c 5f 73 69 | R5,R5,#ball_si| 00001720 7a 65 0a 20 20 20 53 55 42 53 20 20 52 34 2c 52 |ze. SUBS R4,R| 00001730 34 2c 23 31 0a 20 20 42 4e 45 20 20 20 63 68 65 |4,#1. BNE che| 00001740 63 6b 5f 63 6f 6c 6c 69 73 69 6f 6e 73 5f 6c 6f |ck_collisions_lo| 00001750 6f 70 32 0a 20 20 4c 44 52 20 20 20 52 30 2c 5b |op2. LDR R0,[| 00001760 52 31 30 2c 23 65 5f 63 6f 6c 6f 75 72 73 5d 0a |R10,#e_colours].| 00001770 20 20 41 44 44 20 20 20 52 36 2c 52 36 2c 23 31 | ADD R6,R6,#1| 00001780 0a 20 20 43 4d 50 20 20 20 52 36 2c 52 30 0a 20 |. CMP R6,R0. | 00001790 20 4d 4f 56 47 54 20 52 36 2c 52 30 0a 20 20 41 | MOVGT R6,R0. A| 000017a0 44 44 20 20 20 52 38 2c 52 38 2c 23 62 61 6c 6c |DD R8,R8,#ball| 000017b0 5f 73 69 7a 65 0a 20 20 53 55 42 53 20 20 52 37 |_size. SUBS R7| 000017c0 2c 52 37 2c 23 31 0a 20 42 4e 45 20 20 20 63 68 |,R7,#1. BNE ch| 000017d0 65 63 6b 5f 63 6f 6c 6c 69 73 69 6f 6e 73 5f 6c |eck_collisions_l| 000017e0 6f 6f 70 0a 20 4c 44 4d 46 44 20 52 31 33 21 2c |oop. LDMFD R13!,| 000017f0 7b 50 43 7d 0a 0a 72 65 76 65 72 73 65 5f 78 76 |{PC}..reverse_xv| 00001800 0a 20 4c 44 52 20 20 20 52 30 2c 5b 52 38 2c 23 |. LDR R0,[R8,#| 00001810 62 61 6c 6c 5f 78 76 5d 0a 20 52 53 42 20 20 20 |ball_xv]. RSB | 00001820 52 30 2c 52 30 2c 23 30 0a 20 53 54 52 20 20 20 |R0,R0,#0. STR | 00001830 52 30 2c 5b 52 38 2c 23 62 61 6c 6c 5f 78 76 5d |R0,[R8,#ball_xv]| 00001840 0a 20 4d 4f 56 20 20 20 52 30 2c 23 31 0a 20 53 |. MOV R0,#1. S| 00001850 54 52 20 20 20 52 30 2c 72 64 0a 20 42 20 20 20 |TR R0,rd. B | 00001860 20 20 72 65 76 65 72 73 65 5f 78 76 5f 72 65 74 | reverse_xv_ret| 00001870 75 72 6e 0a 0a 72 65 76 65 72 73 65 5f 79 76 0a |urn..reverse_yv.| 00001880 20 4c 44 52 20 20 20 52 30 2c 5b 52 38 2c 23 62 | LDR R0,[R8,#b| 00001890 61 6c 6c 5f 79 76 5d 0a 20 52 53 42 20 20 20 52 |all_yv]. RSB R| 000018a0 30 2c 52 30 2c 23 30 0a 20 53 54 52 20 20 20 52 |0,R0,#0. STR R| 000018b0 30 2c 5b 52 38 2c 23 62 61 6c 6c 5f 79 76 5d 0a |0,[R8,#ball_yv].| 000018c0 20 4d 4f 56 20 20 20 52 30 2c 23 31 0a 20 53 54 | MOV R0,#1. ST| 000018d0 52 20 20 20 52 30 2c 72 64 0a 20 42 20 20 20 20 |R R0,rd. B | 000018e0 20 72 65 76 65 72 73 65 5f 79 76 5f 72 65 74 75 | reverse_yv_retu| 000018f0 72 6e 0a 0a 66 69 6e 61 6c 69 73 65 0a 20 53 54 |rn..finalise. ST| 00001900 4d 46 44 20 52 31 33 21 2c 7b 52 31 34 7d 0a 20 |MFD R13!,{R14}. | 00001910 4c 44 52 20 20 20 52 31 31 2c 5b 52 31 31 5d 0a |LDR R11,[R11].| 00001920 20 4d 4f 56 20 20 20 52 30 2c 23 37 20 20 3b 20 | MOV R0,#7 ; | 00001930 66 72 65 65 20 62 6c 6f 63 6b 20 69 6e 20 52 4d |free block in RM| 00001940 41 0a 20 4d 4f 56 20 20 20 52 32 2c 52 31 31 0a |A. MOV R2,R11.| 00001950 20 53 57 49 20 20 20 58 4f 53 5f 4d 6f 64 75 6c | SWI XOS_Modul| 00001960 65 20 20 20 20 3b 20 66 72 65 65 20 62 6c 6f 63 |e ; free bloc| 00001970 6b 0a 20 4c 44 4d 46 44 20 52 31 33 21 2c 7b 50 |k. LDMFD R13!,{P| 00001980 43 7d 0a 0a 20 20 3b 20 2a 2a 2a 2a 2a 2a 2a 2a |C}.. ; ********| 00001990 2a 2a 2a 2a 2a 2a 2a 20 77 6f 72 6b 73 70 61 63 |******* workspac| 000019a0 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 0a 0a 62 |e definitions..b| 000019b0 61 6c 6c 5f 78 20 20 20 20 45 51 55 20 30 0a 62 |all_x EQU 0.b| 000019c0 61 6c 6c 5f 79 20 20 20 20 45 51 55 20 34 0a 62 |all_y EQU 4.b| 000019d0 61 6c 6c 5f 78 76 20 20 20 45 51 55 20 38 0a 62 |all_xv EQU 8.b| 000019e0 61 6c 6c 5f 79 76 20 20 20 45 51 55 20 31 32 0a |all_yv EQU 12.| 000019f0 62 61 6c 6c 5f 72 64 20 20 20 45 51 55 20 31 36 |ball_rd EQU 16| 00001a00 0a 62 61 6c 6c 5f 73 69 7a 65 20 45 51 55 20 32 |.ball_size EQU 2| 00001a10 30 0a 0a 20 4c 54 4f 52 47 0a 0a 20 5e 20 30 2c |0.. LTORG.. ^ 0,| 00001a20 52 31 31 0a 0a 77 6f 72 6b 5f 73 74 61 72 74 20 |R11..work_start | 00001a30 23 20 30 0a 0a 72 64 20 23 20 34 0a 0a 6d 61 78 |# 0..rd # 4..max| 00001a40 5f 73 70 65 65 64 20 23 20 34 0a 0a 62 61 6c 6c |_speed # 4..ball| 00001a50 73 20 23 20 62 61 6c 6c 5f 73 69 7a 65 20 2a 20 |s # ball_size * | 00001a60 6e 75 6d 62 65 72 5f 6f 66 5f 62 61 6c 6c 73 0a |number_of_balls.| 00001a70 0a 77 6f 72 6b 5f 65 6e 64 20 23 20 30 0a 0a 20 |.work_end # 0.. | 00001a80 45 4e 44 0a |END.| 00001a84