Home » Archimedes archive » Archimedes World » AW-1996-12.adf » !AcornAns_AcornAns » December/!Balls/BallsNoInt
December/!Balls/BallsNoInt
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 » Archimedes World » AW-1996-12.adf » !AcornAns_AcornAns |
Filename: | December/!Balls/BallsNoInt |
Read OK: | ✔ |
File size: | 4383 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM >Balls 20REM 30: 40REM NB program will produce a beep if animation speed falls 50REM below the target fps rate. 60targetfps% = 50 70IF 100MODtargetfps%<>0 ERROR 1, "Require targetfps divides into 100" 80: 90SYS &20280, 0, -1 TO ;flags% 100IF flags% AND 1 THEN arm3%=FALSE ELSE arm3%=TRUE 110: 120ON ERROR SYS 6,112,1:SYS 6,113,1:PRINT REPORT$;" at line ";ERL:END 130D% = RND(-TIME) 140: 150CLS 160PRINT " B A L L S D E M O"' 170PRINT "� Program will beep if animation speed falls below the target of ";targetfps%;" fps." 180PRINT "� Pressing any key during demo will add one more ball." 190PRINT "� Press Escape to end program."' 200INPUT "Please input Standard (0) or VGA (1) display";VGA% 210IF VGA%<>1 VGA%=0 220: 230hpix%=288 240vpix%=200 250IF VGA% THEN 260 mode%=99 270 avpix%=400 280 hadd%=hpix%*2 290 lhadd%=6 300 lhpix%=5 310ELSE 320 mode%=98 330 avpix%=200 340 hadd%=hpix% 350 lhadd%=5 360 lhpix%=5 370ENDIF 380: 390DIM balldata% 864*3 400SYS "OS_File", 255, "<Balls$Dir>.Resources.BallrData", balldata%, 0 410SYS "OS_File", 255, "<Balls$Dir>.Resources.BallgData", balldata%+864, 0 420SYS "OS_File", 255, "<Balls$Dir>.Resources.BallbData", balldata%+864*2, 0 430DIM backdata% 57656 440SYS "OS_File", 255, "<Balls$Dir>.Resources.BackSpr", backdata%, 0 450DIM middata% 57656 460SYS "OS_File", 255, "<Balls$Dir>.Resources.MidSpr", middata%, 0 470: 480DIM vblin% 8, vblout% 8 490!vblin%=148:vblin%!4=-1 500MODE mode%+128 510SYS "OS_ReadVduVariables", vblin%, vblout% 520scrst2%=!vblout% 530MODE mode% 540SYS "OS_ReadVduVariables", vblin%, vblout% 550scrst1%=!vblout% 560OFF 570: 580maxn%=200 590DIM b% maxn%*24 600REM NB b% stores array (of size n%) of structure: 610REM {x coord, y coord, x increment, y increment, sticking count, ball type} 620: 630PROCass 640: 650SYS 6,112,1:SYS 6,113,1 660n%=1 670!an%=n% 680: 690REM initialise ball locations & velocities 700FOR i% = 0 TO n%*24-1 STEP 24 710 b%!(i%+0) = 259*256 720 b%!(i%+4) = 174*256 730 b%!(i%+8) = RND(64)-32 740 b%!(i%+12) = -4*256+RND(128)-64 750 b%!(i%+16) = 0 760 b%!(i%+20) = RND(3)-1 770NEXT 780: 790CALL makeback% 800: 810REPEAT 820 CALL anim% 830 IF n%<maxn% THEN 840 i%=24*n% 850 b%!(i%+0) = 259*256 860 b%!(i%+4) = 174*256 870 b%!(i%+8) = RND(64)-32 880 b%!(i%+12) = -4*256+RND(128)-64 890 b%!(i%+16) = 0 900 b%!(i%+20) = RND(3)-1 910 n%+=1 920 !an%=n% 930 ENDIF 940UNTIL FALSE 950: 960END 970: 980DEF PROCass 990DIM code% 10240, sqrt% 257*4, sincos% 256*8 1000FOR i%=0 TO 256 1010 sqrt%!(4*i%) = 0.5+SQR(256*i%) 1020NEXT 1030FOR i%=0 TO 255 1040 sincos%!(8*i% ) = 0.5+256*SIN(2*PI*i%/256) 1050 sincos%!(8*i%+4) = 0.5+256*COS(2*PI*i%/256) 1060NEXT 1070scrst%=scrst1% 1080FOR pass% = 0 TO 2 STEP 2 1090 P%=code% 1100 [OPT pass% 1110 .aspframe% EQUD 0 1120 .ascrstsum% EQUD scrst1%+scrst2% 1130 .an% EQUD 0 1140 .ab% EQUD b% 1150 .atime% EQUD 0 ;time storage for frame speed calc 1160 .afc% EQUD 0 ;frame counter 1170 .anim% 1180 STMFD 13!, {14} 1190 STR 13, aspframe% ;store sp to free up r13 1200 .nextframe% 1210 : 1220 SWI "OS_ReadMonotonicTime" ;track frame speed 1230 STR 0, atime% 1240 : 1250 MOV 0, #19 1260 SWI "OS_Byte" ;wait for vsync 1270 MOV 0, #113 1280 LDR 1, abank% 1290 RSB 3, 1, #3 1300 STR 3, abank% 1310 SWI "OS_Byte" ;swap displayed screen bank 1320 LDR 0, ascrstsum% 1330 LDR 1, ascrst% 1340 SUB 1, 0, 1 1350 STR 1, ascrst% ;swap ptr to other bank 1360 BL copyback% ;cls that bank to background 1370 : 1380 LDR 12, ab% 1390 LDR 13, an% 1400 .framemoveloop% ;then move each ball 1410 LDMIA 12, {0,1,2,3,4,5} ; read x,y,xi,yi,sc,bt 1420 BL movencheck% 1430 STMIA 12!, {0,1,2,3,4,5} ; restore x,y,xi,yi,sc,bt 1440 SUBS 13, 13, #1 1450 BNE framemoveloop% ;then do next ball 1460 : 1470 LDR 12, ab% 1480 LDR 13, an% 1490 .frameplotloop% ;now plot each ball: 1500 LDMIA 12, {0,1} ; read x,y coords from data 1510 LDR 2, [12, #20] 1520 MOV 0, 0, ASR #8 1530 MOV 1, 1, ASR #8 1540 BL plot% ; plot ball at x,y 1550 ADD 12, 12, #24 1560 SUBS 13, 13, #1 1570 BNE frameplotloop% ;then do next ball 1580 LDR 11, afc% 1590 ADD 11, 11, #1 1600 STR 11, afc% ;update frame count 1610 : 1620 ] 1630 IF VGA% THEN 1640 [OPT pass% 1650 LDR 14, ascrst% ;if in VGA mode, fill in the extra 1660 ADD 13, 14, #hadd%-hpix%;blank lines by copying the line 1670 MOV 12, #vpix% ;above 1680 .interlacel1% 1690 LDMIA 14!, {0-11} 1700 STMIA 13!, {0-11} 1710 LDMIA 14!, {0-11} 1720 STMIA 13!, {0-11} 1730 LDMIA 14!, {0-11} 1740 STMIA 13!, {0-11} 1750 LDMIA 14!, {0-11} 1760 STMIA 13!, {0-11} 1770 LDMIA 14!, {0-11} 1780 STMIA 13!, {0-11} 1790 LDMIA 14!, {0-11} 1800 STMIA 13!, {0-11} 1810 ADD 13, 13, #hadd%-hpix% 1820 ADD 14, 14, #hadd%-hpix% 1830 SUBS 12, 12, #1 1840 BNE interlacel1% 1850 ] 1860 ENDIF 1870 [OPT pass% 1880 : 1890 SWI "OS_ReadMonotonicTime" ;calculate frame speed 1900 LDR 1, atime% 1910 SUB 0, 0, 1 1920 CMP 0, #100/targetfps% 1930 SWIGT 256+7 ;beep if it falls below target fps 1940 : 1950 MOV 0, #129 1960 MOV 1, #0 1970 MOV 2, #0 1980 SWI "OS_Byte" 1990 CMP 2, #&FF 2000 BEQ nextframe% ;if no key pressed, do next frame 2010 LDR 13, aspframe% ;restore sp 2020 LDMFD 13!, {PC} ;return to BASIC 2030 : 2040 .makeback% 2050 LDR 0, abackdata% 2060 LDR 1, amiddata% 2070 MOV 2, #vpix%*hpix% 2080 MOV 4, #255 2090 .makebackloop% 2100 LDRB 3, [1] 2110 CMP 3, #0 2120 STRNEB 3, [0] 2130 STRNEB 4, [1] 2140 ADD 1, 1, #1 2150 ADD 0, 0, #1 2160 SUBS 2, 2, #1 2170 BNE makebackloop% 2180 MOVS PC, 14 2190 : 2200 .ascrst% EQUD scrst% 2210 .adata% EQUD balldata% 2220 .abackdata% EQUD backdata%+56 2230 .amiddata% EQUD middata%+56 2240 .abank% EQUD 1 2250 .aplotregs% EQUD 0:EQUD 0:EQUD 0 2260 .plot% ;plot our ball sprite at coords r0,r1 2270 ;where 0,0 is top left & 287,199 is bottom right 2280 ;NB sprite MUST lie entirely within screen 2290 ADR 11, aplotregs% 2300 STMIA 11, {12,13,14} 2310 AND 4, 0, #3 ;calc which of 4 sprite alignments 2320 ADD 3, 4, 4, ASL #1 ;we need via (xAND3)*12*2*9 + data% 2330 ADD 3, 3, 3, ASL #3 2340 BIC 0, 0, #3 ;round x down to mult of 3 2350 ADD 1, 1, 1, ASL #3 2360 LDR 4, ascrst% 2370 ADD 4, 4, 1, ASL #lhadd% 2380 ADD 0, 4, 0 ;calc (screen ptr + hadd%*y + x) 2390 LDR 1, adata% 2400 RSB 4, 2, 2, ASL #5 2410 SUB 4, 4, 2, ASL #2 2420 ADD 1, 1, 4, ASL #5 2430 ADD 1, 1, 3, ASL #3 ;finally calc (xAND3)*12*2*9+data% 2440 MOV 2, #3 2450 ADD 3, 1, #12*9 2460 .loop1% ;now plot sprite 2470 FNplotfrag(pass%) ;plot 1st row 2480 ADD 0, 0, #hadd%-12 ;move screen ptr to start next row 2490 FNplotfrag(pass%) 2500 ADD 0, 0, #hadd%-12 2510 FNplotfrag(pass%) ;plot 3rd row 2520 ADD 0, 0, #hadd%-12 2530 SUBS 2, 2, #1 2540 BNE loop1% ;repeat above 3 times to do all 9 rows 2550 ADR 11, aplotregs% ;plot completed - return to caller 2560 LDMIA 11, {12,13,PC} ;preserving r12 & r13. 2570 : 2580 .acollregs% EQUD 0:EQUD 0:EQUD 0:EQUD 0 2590 EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0 2600 .movencheck% ;move then collision check our 2610 ;ball sprite at coords r0,r1 2620 ;where 0,0 is top left & 287,199 is bottom right 2630 ;NB sprite MUST lie entirely within screen 2640 ADR 11, acollregs% 2650 ADD 0, 0, 2 2660 ADD 1, 1, 3 2670 STMIA 11, {0-5,12,13,14} 2680 MOV 0, 0, ASR #8 2690 MOV 1, 1, ASR #8 2700 AND 2, 0, #3 ;calc which of 4 sprite alignments 2710 ADD 3, 2, 2, ASL #1 ;we need via (xAND3)*12*2*9 + data% 2720 ADD 3, 3, 3, ASL #3 2730 BIC 0, 0, #3 ;round x down to mult of 3 2740 ADD 1, 1, 1, ASL #3 2750 LDR 2, amiddata% 2760 ADD 2, 2, 1, ASL #lhpix% 2770 ADD 0, 2, 0 ;calc (back mask ptr + hpix%*y + x) 2780 LDR 1, adata% 2790 RSB 2, 5, 5, ASL #5 2800 SUB 2, 2, 5, ASL #2 2810 ADD 1, 1, 2, ASL #5 ;add in to data ptr 864*balltype 2820 ADD 1, 1, 3, ASL #3 ;finally calc (xAND3)*12*2*9+data% 2830 ADD 1, 1, #12*9 2840 ADR 2, colladdrbuf% ;store back and sprite data addrs 2850 STMIA 2, {0,1} ;corresponding to top left of ball 2860 MOV 2, #3 2870 .collloop1% ;now check sprite 2880 FNcollfrag(pass%) ;check 1st row (if coll B gotcoll%) 2890 ADD 0, 0, #hpix%-12 ;move back ptr to start next row 2900 FNcollfrag(pass%) 2910 ADD 0, 0, #hpix%-12 2920 FNcollfrag(pass%) ;check 4th row 2930 ADD 0, 0, #hpix%-12 2940 SUBS 2, 2, #1 2950 BNE collloop1% ;repeat above 3 times to do all 9 rows 2960 ADR 11, acollregs% 2970 LDMIA 11, {0-5,12,13,14} 2980 ADD 3, 3, #8 ; accelerate ball downwards 2990 MOV 4, #0 3000 MOV PC, 14 3010 .colladdrbuf% EQUD 0:EQUD 0 3020 .gotcoll% 3030 ADR 11, acollregs% 3040 LDMIA 11, {0-3} 3050 SUB 0, 0, 2 ;reset position, moving it out of 3060 SUB 1, 1, 3 ;collision 3070 STMIA 11, {0,1} 3080 MOV 6, #0 ;in my lin reg notes, n 3090 MOV 7, #0 ; u 3100 MOV 8, #0 ; v 3110 MOV 9, #0 ; p 3120 MOV 10, #0 ; q 3130 ADR 2, colladdrbuf% 3140 LDMIA 2, {0,1} ;recall screen/data addrs for top 3150 MOV 3, #0 ;row 0 ;left of sprite 3160 .statloop1% 3170 MOV 2, #0 ;col 0 3180 .statloop2% 3190 LDR 4, [0], #4 ;rescan each pixel in collision area 3200 LDR 5, [1], #4 ;and for each collided pixel add its 3210 AND 4, 4, 5 ;coords (relative to topleft sprite) 3220 FNstatfrag(pass%, 255) ;onto the regression statistics 3230 ADD 2, 2, #1 3240 FNstatfrag(pass%, 255<<8) 3250 ADD 2, 2, #1 3260 FNstatfrag(pass%, 255<<16) 3270 ADD 2, 2, #1 3280 FNstatfrag(pass%, 255<<24) 3290 ADD 2, 2, #1 3300 CMP 2, #12 3310 BLT statloop2% 3320 ADD 0, 0, #hpix%-12 3330 ADD 3, 3, #1 3340 CMP 3, #9 3350 BLT statloop1% ;when done, n, u & v computed 3360 MUL 9, 6, 9 3370 ADD 5, 7, 8 3380 SUB 14, 7, 8 3390 MLA 9, 5, 14, 9 ;p computed 3400 MUL 10, 6, 10 3410 MUL 14, 7, 8 3420 SUB 10, 10, 14 3430 ADD 10, 10, 10 ;q computed 3440 MOVS 6, 9 3450 RSBMI 6, 6, #0 ;ap = abs p 3460 MOVS 7, 10 3470 RSBMI 7, 7, #0 ;aq = abs q 3480 CMP 6, 7 3490 MOV 8, 6 3500 MOVLT 8, 7 ; m = max {ap,aq} 3510 CMP 8, #0 ;if have degenerate collision 3520 BEQ patch1% ;(eg with single pixel), can't calc 3530 .statloop3% ;a linear regression, so go patch1% 3540 CMP 8, #1<<12 ;which simply reverses velocities! 3550 MOVGE 8, 8, ASR #1 3560 MOVGE 6, 6, ASR #1 ;proportionately reduce ap and aq in 3570 MOVGE 7, 7, ASR #1 ;magnitude, until in necessary range 3580 BGE statloop3% 3590 MUL 11, 6, 6 ;ap^2 in low range 3600 MUL 12, 7, 7 ;aq^2 in low range 3610 ADD 13, 11, 12 ;divisor ap^2+aq^2 3620 MOV 0, 11, ASL #8 3630 FNdiv(pass%, 0, 13, 11, 1) ;t in r11 = 256ap^2/(ap^2+aq^2) 3640 MOV 0, 12, ASL #8 3650 FNdiv(pass%, 0, 13, 12, 1) ;tb in r12 = 256aq^2/(ap^2+aq^2) 3660 LDR 13, asqrt% 3670 LDR 7, [13, 11, LSL #2] ;square root t 3680 LDR 8, [13, 12, LSL #2] ;and tb, via look-up-table 3690 CMP 9, #0 3700 RSBLT 7, 7, #0 ;final t in r7 3710 CMP 10, #0 3720 RSBPL 8, 8, #0 ;final tb in r8 3730 ADR 11, acollregs% 3740 LDMIA 11, {0-5,12,13,14} 3750 MUL 11, 7, 2 ;now modify velocity by 3760 MLA 11, 8, 3, 11 ;reflecting it in the 3770 RSB 11, 11, #0 ;line generated by the linear 3780 MUL 6, 7, 3 ;regression calculation 3790 MUL 9, 8, 2 ;(which we use to approximate the 3800 SUB 6, 6, 9 ; tangent at the collision surface) 3810 RSB 11, 11, 11, ASL #8 3820 RSB 6, 6, 6, ASL #8 ;& then attenuate by factor 255/256 3830 MOV 2, 11, ASR #16 ;(simulate energy loss on coll) 3840 MOV 3, 6, ASR #16 3850 ADD 4, 4, #1 ;track how many consecutive frames 3860 : ;this ball has been stuck in a 3870 CMP 4,#2 ;collision and if 2 or more, try to 3880 BLT movencheck% ;escape it via a bodge: 3890 .bodge1% ;bodge begin ... 3900 ADR 7, seed% 3910 LDMIA 7, {6, 11} 3920 MOVS 11, 11, LSR #1 ;generate random 32-bit number 3930 MOVS 8, 6, RRX 3940 ADC 11, 11, 11 3950 EOR 8, 8, 6, LSL #12 3960 EOR 6, 8, 8, LSR #20 3970 STMIA 7, {6, 11} 3980 LDR 7, asincos% ;when balls get stuck 3990 AND 6, 6, #255 ;due to conflict between correct 4000 ADD 7, 7, 6, ASL #3 ;reflection & small velocity or 4010 LDMIA 7, {6, 11} ;jagged overlap problems ... 4020 MUL 7, 2, 6 4030 MLA 7, 3, 11, 7 ;try a 'fix' - rotate velocity by 4040 MUL 8, 2, 11 ;a random angle, so eventually 4050 MUL 9, 3, 6 ;should pick some velocity that 4060 SUB 8, 8, 9 ;extricates ball from stuck position 4070 MOV 2, 7, ASR #8 4080 MOV 3, 8, ASR #8 ;... bodge end 4090 CMP 4, #16 4100 BLT movencheck% 4110 MOV PC, 14 4120 : 4130 .asincos% EQUD sincos% 4140 .seed% EQUD -1:EQUD -1 4150 .patch1% ;a patch to deal with collision case 4160 ADR 11, acollregs% ;where no linear regression exists 4170 LDMIA 11, {0-5,12,13,14} ;(eg where collision involves only 4180 SUB 2, 2, 2, ASL #8 ; one pixel) 4190 SUB 3, 3, 3, ASL #8 ;- simply reverse velocity! 4200 MOV 2, 2, ASR #8 4210 MOV 3, 3, ASR #8 ;nb also attenuate by factor 255/256 4220 ADD 4, 4, #1 ;(simulate energy loss on coll) 4230 CMP 4,#2 4240 BLT movencheck% 4250 B bodge1% ;if been stuck in collision for >= 2 4260 : ;frames go and apply bodged 'escape' 4270 .asqrt% EQUD sqrt% 4280 .alrcls% EQUD 0 4290 .aspcls% EQUD 0 4300 .copyback% ;simple routine to clear screen to 4310 STR 14, alrcls% ;background as rapidly as possible - 4320 STR 13, aspcls% ;note the heavy use of LDM/STM. 4330 LDR 0, ascrst% 4340 LDR 1, abackdata% 4350 MOV 2, #200 4360 .clsloop% 4370 LDMIA 1!, {3-14} 4380 STMIA 0!, {3-14} 4390 LDMIA 1!, {3-14} 4400 STMIA 0!, {3-14} 4410 LDMIA 1!, {3-14} 4420 STMIA 0!, {3-14} 4430 LDMIA 1!, {3-14} 4440 STMIA 0!, {3-14} 4450 LDMIA 1!, {3-14} 4460 STMIA 0!, {3-14} 4470 LDMIA 1!, {3-14} 4480 STMIA 0!, {3-14} 4490 ] 4500 IF VGA% THEN 4510 [OPT pass% 4520 ADD 0, 0, #hadd%-hpix% 4530 ] 4540 ENDIF 4550 [OPT pass% 4560 SUBS 2, 2, #1 4570 BNE clsloop% 4580 LDR 13, aspcls% 4590 LDR PC, alrcls% 4600 ] 4610NEXT 4620ENDPROC 4630: 4640DEF FNplotfrag(pass%) :REM macro to plot a row (12 pixels) 4650[OPT pass% :REM of our sprite 4660LDMIA 0, {4-6} ;read 3 words of screen (12 pixels) 4670LDMIA 1!, {7-9} ;read 12 sprite pixels 4680LDMIA 3!, {10-12} ;& 12 masks 4690BIC 4, 4, 10 ;apply mask to screen, zeroing 4700BIC 5, 5, 11 ; those bits where will write 4710BIC 6, 6, 12 ; sprite image in a moment 4720ORR 4, 4, 7 ;write in the sprite image 4730ORR 5, 5, 8 4740ORR 6, 6, 9 4750STMIA 0!, {4-6} ;restore the data back to screen 4760] 4770=pass% 4780: 4790DEF FNcollfrag(pass%) :REM macro to coll check a row 4800[OPT pass% :REM (12 pixels) of our sprite 4810LDMIA 0!, {3-5} ;read 3 words of screen (12 pixels) 4820LDMIA 1!, {8-10} ;read 12 sprite pixel masks 4830TST 3, 8 4840TSTEQ 4, 9 4850TSTEQ 5, 10 4860BNE gotcoll% ;branch to gotcoll% if any overlap 4870] :REM else continue with code after macro 4880=pass% 4890: 4900DEF FNstatfrag(pass%, m%):REM macro to add in regression stats 4910[OPT pass% :REM for one pixel (coords u(i),v(i)) 4920TST 4, #m% 4930BEQ P%+8*4 4940ADDNE 6, 6, #1 ; n = n + 1 4950ADDNE 7, 7, 2 ; u = u + u(i) 4960ADDNE 8, 8, 3 ; v = v + v(i) 4970ADDNE 5, 2, 3 4980SUBNE 14, 3, 2 4990MLANE 9, 5, 14, 9 ; p = p + v(i)^2-u(i)^2 5000MLANE 10, 2, 3, 10 ; q = q + u(i)*v(i) 5010] 5020=pass% 5030: 5040DEF FNdiv(pass%, ra, rb, rc, rd) :REM macro to set rc=raDIVrb 5050[OPT pass% 5060MOV rd, rb 5070CMP rd, ra, LSR #1 5080MOVLS rd, rd, LSL #1 5090CMP rd, ra, LSR #1 5100BLS P%-2*4 5110MOV rc, #0 5120CMP ra, rd 5130SUBCS ra, ra, rd 5140ADC rc, rc, rc 5150MOV rd, rd, LSR #1 5160CMP rd, rb 5170BHS P%-5*4 5180] 5190=pass%
� >Balls � : (=� NB program will produce a beep if animation speed falls 2 � below the target fps rate. <targetfps% = 50 FA� 100�targetfps%<>0 � 1, "Require targetfps divides into 100" P: Zș &20280, 0, -1 � ;flags% d$� flags% � 1 � arm3%=� � arm3%=� n: x2� � ș 6,112,1:ș 6,113,1:� �$;" at line ";�:� �D% = �(-�) �: �� �0� " B A L L S D E M O"' �\� "� Program will beep if animation speed falls below the target of ";targetfps%;" fps." �>� "� Pressing any key during demo will add one more ball." �'� "� Press Escape to end program."' �9� "Please input Standard (0) or VGA (1) display";VGA% �� VGA%<>1 VGA%=0 �: � hpix%=288 � vpix%=200 �� VGA% � mode%=99 avpix%=400 hadd%=hpix%*2 " lhadd%=6 , lhpix%=5 6� @ mode%=98 J avpix%=200 T hadd%=hpix% ^ lhadd%=5 h lhpix%=5 r� |: �� balldata% 864*3 �Fș "OS_File", 255, "<Balls$Dir>.Resources.BallrData", balldata%, 0 �Jș "OS_File", 255, "<Balls$Dir>.Resources.BallgData", balldata%+864, 0 �Lș "OS_File", 255, "<Balls$Dir>.Resources.BallbData", balldata%+864*2, 0 �� backdata% 57656 �Dș "OS_File", 255, "<Balls$Dir>.Resources.BackSpr", backdata%, 0 �� middata% 57656 �Bș "OS_File", 255, "<Balls$Dir>.Resources.MidSpr", middata%, 0 �: �� vblin% 8, vblout% 8 �!vblin%=148:vblin%!4=-1 �� mode%+128 �-ș "OS_ReadVduVariables", vblin%, vblout% scrst2%=!vblout% � mode% -ș "OS_ReadVduVariables", vblin%, vblout% &scrst1%=!vblout% 0� :: D maxn%=200 N� b% maxn%*24 X3� NB b% stores array (of size n%) of structure: bM� {x coord, y coord, x increment, y increment, sticking count, ball type} l: v�ass �: �ș 6,112,1:ș 6,113,1 �n%=1 �!an%=n% �: �,� initialise ball locations & velocities �� i% = 0 � n%*24-1 � 24 � b%!(i%+0) = 259*256 � b%!(i%+4) = 174*256 � b%!(i%+8) = �(64)-32 �# b%!(i%+12) = -4*256+�(128)-64 � b%!(i%+16) = 0 � b%!(i%+20) = �(3)-1 � : � makeback% : *� 4 � anim% > � n%<maxn% � H i%=24*n% R b%!(i%+0) = 259*256 \ b%!(i%+4) = 174*256 f b%!(i%+8) = �(64)-32 p# b%!(i%+12) = -4*256+�(128)-64 z b%!(i%+16) = 0 � b%!(i%+20) = �(3)-1 � n%+=1 � !an%=n% � � �� � �: �� �: � � �ass �-� code% 10240, sqrt% 257*4, sincos% 256*8 �� i%=0 � 256 �! sqrt%!(4*i%) = 0.5+�(256*i%) �� � i%=0 � 255 - sincos%!(8*i% ) = 0.5+256*�(2*�*i%/256) - sincos%!(8*i%+4) = 0.5+256*�(2*�*i%/256) $� .scrst%=scrst1% 8� pass% = 0 � 2 � 2 B P%=code% L [OPT pass% V .aspframe% EQUD 0 `, .ascrstsum% EQUD scrst1%+scrst2% j .an% EQUD 0 t .ab% EQUD b% ~D .atime% EQUD 0 ;time storage for frame speed calc �0 .afc% EQUD 0 ;frame counter � .anim% � STMFD 13!, {14} �: STR 13, aspframe% ;store sp to free up r13 � .nextframe% � : �> SWI "OS_ReadMonotonicTime" ;track frame speed � STR 0, atime% � : � MOV 0, #19 �; SWI "OS_Byte" ;wait for vsync � MOV 0, #113 LDR 1, abank% RSB 3, 1, #3 STR 3, abank% = SWI "OS_Byte" ;swap displayed screen bank ( LDR 0, ascrstsum% 2 LDR 1, ascrst% < SUB 1, 0, 1 F9 STR 1, ascrst% ;swap ptr to other bank P> BL copyback% ;cls that bank to background Z : d LDR 12, ab% n LDR 13, an% x6 .framemoveloop% ;then move each ball �8 LDMIA 12, {0,1,2,3,4,5} ; read x,y,xi,yi,sc,bt � BL movencheck% �; STMIA 12!, {0,1,2,3,4,5} ; restore x,y,xi,yi,sc,bt � SUBS 13, 13, #1 �4 BNE framemoveloop% ;then do next ball � : � LDR 12, ab% � LDR 13, an% �6 .frameplotloop% ;now plot each ball: �= LDMIA 12, {0,1} ; read x,y coords from data � LDR 2, [12, #20] � MOV 0, 0, ASR #8 � MOV 1, 1, ASR #8 4 BL plot% ; plot ball at x,y ADD 12, 12, #24 SUBS 13, 13, #1 "4 BNE frameplotloop% ;then do next ball , LDR 11, afc% 6 ADD 11, 11, #1 @5 STR 11, afc% ;update frame count J : T ] ^ � VGA% � h [OPT pass% rD LDR 14, ascrst% ;if in VGA mode, fill in the extra |B ADD 13, 14, #hadd%-hpix%;blank lines by copying the line �( MOV 12, #vpix% ;above � .interlacel1% � LDMIA 14!, {0-11} � STMIA 13!, {0-11} � LDMIA 14!, {0-11} � STMIA 13!, {0-11} � LDMIA 14!, {0-11} � STMIA 13!, {0-11} � LDMIA 14!, {0-11} � STMIA 13!, {0-11} � LDMIA 14!, {0-11} � STMIA 13!, {0-11} � LDMIA 14!, {0-11} STMIA 13!, {0-11} " ADD 13, 13, #hadd%-hpix% " ADD 14, 14, #hadd%-hpix% & SUBS 12, 12, #1 0 BNE interlacel1% : ] D � N [OPT pass% X : bB SWI "OS_ReadMonotonicTime" ;calculate frame speed l LDR 1, atime% v SUB 0, 0, 1 � CMP 0, #100/targetfps% �D SWIGT 256+7 ;beep if it falls below target fps � : � MOV 0, #129 � MOV 1, #0 � MOV 2, #0 � SWI "OS_Byte" � CMP 2, #&FF �C BEQ nextframe% ;if no key pressed, do next frame �- LDR 13, aspframe% ;restore sp �2 LDMFD 13!, {PC} ;return to BASIC � : � .makeback% LDR 0, abackdata% LDR 1, amiddata% MOV 2, #vpix%*hpix% MOV 4, #255 * .makebackloop% 4 LDRB 3, [1] > CMP 3, #0 H STRNEB 3, [0] R STRNEB 4, [1] \ ADD 1, 1, #1 f ADD 0, 0, #1 p SUBS 2, 2, #1 z BNE makebackloop% � MOVS PC, 14 � : � .ascrst% EQUD scrst% � .adata% EQUD balldata% �) .abackdata% EQUD backdata%+56 �( .amiddata% EQUD middata%+56 � .abank% EQUD 1 �, .aplotregs% EQUD 0:EQUD 0:EQUD 0 �3 .plot% ;plot our ball sprite at coords r0,r1 �> ;where 0,0 is top left & 287,199 is bottom right �8 ;NB sprite MUST lie entirely within screen � ADR 11, aplotregs% � STMIA 11, {12,13,14} B � 4, 0, #3 ;calc which of 4 sprite alignments E ADD 3, 4, 4, ASL #1 ;we need via (xAND3)*12*2*9 + data% ADD 3, 3, 3, ASL #3 $< BIC 0, 0, #3 ;round x down to mult of 3 . ADD 1, 1, 1, ASL #3 8 LDR 4, ascrst% B" ADD 4, 4, 1, ASL #lhadd% LB ADD 0, 4, 0 ;calc (screen ptr + hadd%*y + x) V LDR 1, adata% ` RSB 4, 2, 2, ASL #5 j SUB 4, 4, 2, ASL #2 t ADD 1, 1, 4, ASL #5 ~D ADD 1, 1, 3, ASL #3 ;finally calc (xAND3)*12*2*9+data% � MOV 2, #3 � ADD 3, 1, #12*9 �2 .loop1% ;now plot sprite �. �plotfrag(pass%) ;plot 1st row �D ADD 0, 0, #hadd%-12 ;move screen ptr to start next row � �plotfrag(pass%) � ADD 0, 0, #hadd%-12 �. �plotfrag(pass%) ;plot 3rd row � ADD 0, 0, #hadd%-12 � SUBS 2, 2, #1 �D BNE loop1% ;repeat above 3 times to do all 9 rows �D ADR 11, aplotregs% ;plot completed - return to caller 8 LDMIA 11, {12,13,PC} ;preserving r12 & r13. : / .acollregs% EQUD 0:EQUD 0:EQUD 0:EQUD 0 6 EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0 (4 .movencheck% ;move then collision check our 22 ;ball sprite at coords r0,r1 <F ;where 0,0 is top left & 287,199 is bottom right F@ ;NB sprite MUST lie entirely within screen P ADR 11, acollregs% Z ADD 0, 0, 2 d ADD 1, 1, 3 n STMIA 11, {0-5,12,13,14} x MOV 0, 0, ASR #8 � MOV 1, 1, ASR #8 �B � 2, 0, #3 ;calc which of 4 sprite alignments �E ADD 3, 2, 2, ASL #1 ;we need via (xAND3)*12*2*9 + data% � ADD 3, 3, 3, ASL #3 �< BIC 0, 0, #3 ;round x down to mult of 3 � ADD 1, 1, 1, ASL #3 � LDR 2, amiddata% �" ADD 2, 2, 1, ASL #lhpix% �E ADD 0, 2, 0 ;calc (back mask ptr + hpix%*y + x) � LDR 1, adata% � RSB 2, 5, 5, ASL #5 � SUB 2, 2, 5, ASL #2 �B ADD 1, 1, 2, ASL #5 ;add in to data ptr 864*balltype D ADD 1, 1, 3, ASL #3 ;finally calc (xAND3)*12*2*9+data% ADD 1, 1, #12*9 C ADR 2, colladdrbuf% ;store back and sprite data addrs "D STMIA 2, {0,1} ;corresponding to top left of ball , MOV 2, #3 63 .collloop1% ;now check sprite @D �collfrag(pass%) ;check 1st row (if coll B gotcoll%) JB ADD 0, 0, #hpix%-12 ;move back ptr to start next row T �collfrag(pass%) ^ ADD 0, 0, #hpix%-12 h/ �collfrag(pass%) ;check 4th row r ADD 0, 0, #hpix%-12 | SUBS 2, 2, #1 �D BNE collloop1% ;repeat above 3 times to do all 9 rows � ADR 11, acollregs% � LDMIA 11, {0-5,12,13,14} �= ADD 3, 3, #8 ; accelerate ball downwards � MOV 4, #0 � MOV PC, 14 �% .colladdrbuf% EQUD 0:EQUD 0 � .gotcoll% � ADR 11, acollregs% � LDMIA 11, {0-3} �C SUB 0, 0, 2 ;reset position, moving it out of �, SUB 1, 1, 3 ;collision � STMIA 11, {0,1} 9 MOV 6, #0 ;in my lin reg notes, n 9 MOV 7, #0 ; u 9 MOV 8, #0 ; v &9 MOV 9, #0 ; p 09 MOV 10, #0 ; q : ADR 2, colladdrbuf% DC LDMIA 2, {0,1} ;recall screen/data addrs for top N1 MOV 3, #0 ;row 0 ;left of sprite X .statloop1% b MOV 2, #0 ;col 0 l .statloop2% vF LDR 4, [0], #4 ;rescan each pixel in collision area �F LDR 5, [1], #4 ;and for each collided pixel add its �D � 4, 4, 5 ;coords (relative to topleft sprite) �@ �statfrag(pass%, 255) ;onto the regression statistics � ADD 2, 2, #1 � �statfrag(pass%, 255<<8) � ADD 2, 2, #1 � �statfrag(pass%, 255<<16) � ADD 2, 2, #1 � �statfrag(pass%, 255<<24) � ADD 2, 2, #1 � CMP 2, #12 � BLT statloop2% � ADD 0, 0, #hpix%-12 ADD 3, 3, #1 CMP 3, #9 ? BLT statloop1% ;when done, n, u & v computed MUL 9, 6, 9 * ADD 5, 7, 8 4 SUB 14, 7, 8 >- MLA 9, 5, 14, 9 ;p computed H MUL 10, 6, 10 R MUL 14, 7, 8 \ SUB 10, 10, 14 f- ADD 10, 10, 10 ;q computed p MOVS 6, 9 z- RSBMI 6, 6, #0 ;ap = abs p � MOVS 7, 10 �- RSBMI 7, 7, #0 ;aq = abs q � CMP 6, 7 � MOV 8, 6 �3 MOVLT 8, 7 ; m = max {ap,aq} �? CMP 8, #0 ;if have degenerate collision �E BEQ patch1% ;(eg with single pixel), can't calc �E .statloop3% ;a linear regression, so go patch1% �D CMP 8, #1<<12 ;which simply reverses velocities! � MOVGE 8, 8, ASR #1 �F MOVGE 6, 6, ASR #1 ;proportionately reduce ap and aq in �F MOVGE 7, 7, ASR #1 ;magnitude, until in necessary range � BGE statloop3% 4 MUL 11, 6, 6 ;ap^2 in low range 4 MUL 12, 7, 7 ;aq^2 in low range 4 ADD 13, 11, 12 ;divisor ap^2+aq^2 $ MOV 0, 11, ASL #8 .A �div(pass%, 0, 13, 11, 1) ;t in r11 = 256ap^2/(ap^2+aq^2) 8 MOV 0, 12, ASL #8 BA �div(pass%, 0, 13, 12, 1) ;tb in r12 = 256aq^2/(ap^2+aq^2) L LDR 13, asqrt% V0 LDR 7, [13, 11, LSL #2] ;square root t `< LDR 8, [13, 12, LSL #2] ;and tb, via look-up-table j CMP 9, #0 t1 RSBLT 7, 7, #0 ;final t in r7 ~ CMP 10, #0 �1 RSBPL 8, 8, #0 ;final tb in r8 � ADR 11, acollregs% � LDMIA 11, {0-5,12,13,14} �9 MUL 11, 7, 2 ;now modify velocity by �7 MLA 11, 8, 3, 11 ;reflecting it in the �? RSB 11, 11, #0 ;line generated by the linear �9 MUL 6, 7, 3 ;regression calculation �C MUL 9, 8, 2 ;(which we use to approximate the �E SUB 6, 6, 9 ; tangent at the collision surface) � RSB 11, 11, 11, ASL #8 �E RSB 6, 6, 6, ASL #8 ;& then attenuate by factor 255/256 �A MOV 2, 11, ASR #16 ;(simulate energy loss on coll) MOV 3, 6, ASR #16 D ADD 4, 4, #1 ;track how many consecutive frames @ : ;this ball has been stuck in a E CMP 4,#2 ;collision and if 2 or more, try to (9 BLT movencheck% ;escape it via a bodge: 22 .bodge1% ;bodge begin ... < ADR 7, seed% F LDMIA 7, {6, 11} P@ MOVS 11, 11, LSR #1 ;generate random 32-bit number Z MOVS 8, 6, RRX d ADC 11, 11, 11 n � 8, 8, 6, LSL #12 x � 6, 8, 8, LSR #20 � STMIA 7, {6, 11} �7 LDR 7, asincos% ;when balls get stuck �@ � 6, 6, #255 ;due to conflict between correct �A ADD 7, 7, 6, ASL #3 ;reflection & small velocity or �> LDMIA 7, {6, 11} ;jagged overlap problems ... � MUL 7, 2, 6 �C MLA 7, 3, 11, 7 ;try a 'fix' - rotate velocity by �@ MUL 8, 2, 11 ;a random angle, so eventually �A MUL 9, 3, 6 ;should pick some velocity that �F SUB 8, 8, 9 ;extricates ball from stuck position � MOV 2, 7, ASR #8 �0 MOV 3, 8, ASR #8 ;... bodge end � CMP 4, #16 BLT movencheck% MOV PC, 14 : "$ .asincos% EQUD sincos% , .seed% EQUD -1:EQUD -1 6F .patch1% ;a patch to deal with collision case @D ADR 11, acollregs% ;where no linear regression exists JD LDMIA 11, {0-5,12,13,14} ;(eg where collision involves only T. SUB 2, 2, 2, ASL #8 ; one pixel) ^= SUB 3, 3, 3, ASL #8 ;- simply reverse velocity! h MOV 2, 2, ASR #8 rF MOV 3, 3, ASR #8 ;nb also attenuate by factor 255/256 |A ADD 4, 4, #1 ;(simulate energy loss on coll) � CMP 4,#2 � BLT movencheck% �F B bodge1% ;if been stuck in collision for >= 2 �F : ;frames go and apply bodged 'escape' � .asqrt% EQUD sqrt% � .alrcls% EQUD 0 � .aspcls% EQUD 0 �D .copyback% ;simple routine to clear screen to �F STR 14, alrcls% ;background as rapidly as possible - �A STR 13, aspcls% ;note the heavy use of LDM/STM. � LDR 0, ascrst% � LDR 1, abackdata% � MOV 2, #200 .clsloop% LDMIA 1!, {3-14} STMIA 0!, {3-14} & LDMIA 1!, {3-14} 0 STMIA 0!, {3-14} : LDMIA 1!, {3-14} D STMIA 0!, {3-14} N LDMIA 1!, {3-14} X STMIA 0!, {3-14} b LDMIA 1!, {3-14} l STMIA 0!, {3-14} v LDMIA 1!, {3-14} � STMIA 0!, {3-14} � ] � � VGA% � � [OPT pass% � ADD 0, 0, #hadd%-hpix% � ] � � � [OPT pass% � SUBS 2, 2, #1 � BNE clsloop% � LDR 13, aspcls% � LDR PC, alrcls% � ] � � : <� �plotfrag(pass%) :� macro to plot a row (12 pixels) *-[OPT pass% :� of our sprite 4ELDMIA 0, {4-6} ;read 3 words of screen (12 pixels) >8LDMIA 1!, {7-9} ;read 12 sprite pixels H-LDMIA 3!, {10-12} ;& 12 masks R@BIC 4, 4, 10 ;apply mask to screen, zeroing \?BIC 5, 5, 11 ; those bits where will write f<BIC 6, 6, 12 ; sprite image in a moment p;�R 4, 4, 7 ;write in the sprite image z�R 5, 5, 8 ��R 6, 6, 9 �BSTMIA 0!, {4-6} ;restore the data back to screen �] � =pass% �: �6� �collfrag(pass%) :� macro to coll check a row �9[OPT pass% :� (12 pixels) of our sprite �ELDMIA 0!, {3-5} ;read 3 words of screen (12 pixels) �=LDMIA 1!, {8-10} ;read 12 sprite pixel masks �TST 3, 8 �TSTEQ 4, 9 �TSTEQ 5, 10 �DBNE gotcoll% ;branch to gotcoll% if any overlap D] :� else continue with code after macro =pass% : $=� �statfrag(pass%, m%):� macro to add in regression stats .@[OPT pass% :� for one pixel (coords u(i),v(i)) 8TST 4, #m% BBEQ P%+8*4 L-ADDNE 6, 6, #1 ; n = n + 1 V0ADDNE 7, 7, 2 ; u = u + u(i) `0ADDNE 8, 8, 3 ; v = v + v(i) jADDNE 5, 2, 3 tSUBNE 14, 3, 2 ~9MLANE 9, 5, 14, 9 ; p = p + v(i)^2-u(i)^2 �5MLANE 10, 2, 3, 10 ; q = q + u(i)*v(i) �] � =pass% �: �<� �div(pass%, ra, rb, rc, rd) :� macro to set rc=raDIVrb �[OPT pass% �MOV rd, rb �CMP rd, ra, LSR #1 �MOVLS rd, rd, LSL #1 �CMP rd, ra, LSR #1 �BLS P%-2*4 �MOV rc, #0 CMP ra, rd SUBCS ra, ra, rd ADC rc, rc, rc MOV rd, rd, LSR #1 (CMP rd, rb 2BHS P%-5*4 <] F =pass% �
00000000 0d 00 0a 0c f4 20 3e 42 61 6c 6c 73 0d 00 14 05 |..... >Balls....| 00000010 f4 0d 00 1e 05 3a 0d 00 28 3d f4 20 4e 42 20 70 |.....:..(=. NB p| 00000020 72 6f 67 72 61 6d 20 77 69 6c 6c 20 70 72 6f 64 |rogram will prod| 00000030 75 63 65 20 61 20 62 65 65 70 20 69 66 20 61 6e |uce a beep if an| 00000040 69 6d 61 74 69 6f 6e 20 73 70 65 65 64 20 66 61 |imation speed fa| 00000050 6c 6c 73 0d 00 32 20 f4 20 62 65 6c 6f 77 20 74 |lls..2 . below t| 00000060 68 65 20 74 61 72 67 65 74 20 66 70 73 20 72 61 |he target fps ra| 00000070 74 65 2e 0d 00 3c 13 74 61 72 67 65 74 66 70 73 |te...<.targetfps| 00000080 25 20 3d 20 35 30 0d 00 46 41 e7 20 31 30 30 83 |% = 50..FA. 100.| 00000090 74 61 72 67 65 74 66 70 73 25 3c 3e 30 20 85 20 |targetfps%<>0 . | 000000a0 31 2c 20 22 52 65 71 75 69 72 65 20 74 61 72 67 |1, "Require targ| 000000b0 65 74 66 70 73 20 64 69 76 69 64 65 73 20 69 6e |etfps divides in| 000000c0 74 6f 20 31 30 30 22 0d 00 50 05 3a 0d 00 5a 1e |to 100"..P.:..Z.| 000000d0 c8 99 20 26 32 30 32 38 30 2c 20 30 2c 20 2d 31 |.. &20280, 0, -1| 000000e0 20 b8 20 3b 66 6c 61 67 73 25 0d 00 64 24 e7 20 | . ;flags%..d$. | 000000f0 66 6c 61 67 73 25 20 80 20 31 20 8c 20 61 72 6d |flags% . 1 . arm| 00000100 33 25 3d a3 20 8b 20 61 72 6d 33 25 3d b9 0d 00 |3%=. . arm3%=...| 00000110 6e 05 3a 0d 00 78 32 ee 20 85 20 c8 99 20 36 2c |n.:..x2. . .. 6,| 00000120 31 31 32 2c 31 3a c8 99 20 36 2c 31 31 33 2c 31 |112,1:.. 6,113,1| 00000130 3a f1 20 f6 24 3b 22 20 61 74 20 6c 69 6e 65 20 |:. .$;" at line | 00000140 22 3b 9e 3a e0 0d 00 82 0e 44 25 20 3d 20 b3 28 |";.:.....D% = .(| 00000150 2d 91 29 0d 00 8c 05 3a 0d 00 96 05 db 0d 00 a0 |-.)....:........| 00000160 30 f1 20 22 20 20 20 20 20 20 20 20 20 20 20 20 |0. " | 00000170 20 20 20 20 20 20 20 20 42 20 41 20 4c 20 4c 20 | B A L L | 00000180 53 20 20 20 44 20 45 20 4d 20 4f 22 27 0d 00 aa |S D E M O"'...| 00000190 5c f1 20 22 8f 20 50 72 6f 67 72 61 6d 20 77 69 |\. ". Program wi| 000001a0 6c 6c 20 62 65 65 70 20 69 66 20 61 6e 69 6d 61 |ll beep if anima| 000001b0 74 69 6f 6e 20 73 70 65 65 64 20 66 61 6c 6c 73 |tion speed falls| 000001c0 20 62 65 6c 6f 77 20 74 68 65 20 74 61 72 67 65 | below the targe| 000001d0 74 20 6f 66 20 22 3b 74 61 72 67 65 74 66 70 73 |t of ";targetfps| 000001e0 25 3b 22 20 66 70 73 2e 22 0d 00 b4 3e f1 20 22 |%;" fps."...>. "| 000001f0 8f 20 50 72 65 73 73 69 6e 67 20 61 6e 79 20 6b |. Pressing any k| 00000200 65 79 20 64 75 72 69 6e 67 20 64 65 6d 6f 20 77 |ey during demo w| 00000210 69 6c 6c 20 61 64 64 20 6f 6e 65 20 6d 6f 72 65 |ill add one more| 00000220 20 62 61 6c 6c 2e 22 0d 00 be 27 f1 20 22 8f 20 | ball."...'. ". | 00000230 50 72 65 73 73 20 45 73 63 61 70 65 20 74 6f 20 |Press Escape to | 00000240 65 6e 64 20 70 72 6f 67 72 61 6d 2e 22 27 0d 00 |end program."'..| 00000250 c8 39 e8 20 22 50 6c 65 61 73 65 20 69 6e 70 75 |.9. "Please inpu| 00000260 74 20 53 74 61 6e 64 61 72 64 20 28 30 29 20 6f |t Standard (0) o| 00000270 72 20 56 47 41 20 28 31 29 20 64 69 73 70 6c 61 |r VGA (1) displa| 00000280 79 22 3b 56 47 41 25 0d 00 d2 14 e7 20 56 47 41 |y";VGA%..... VGA| 00000290 25 3c 3e 31 20 56 47 41 25 3d 30 0d 00 dc 05 3a |%<>1 VGA%=0....:| 000002a0 0d 00 e6 0d 68 70 69 78 25 3d 32 38 38 0d 00 f0 |....hpix%=288...| 000002b0 0d 76 70 69 78 25 3d 32 30 30 0d 00 fa 0c e7 20 |.vpix%=200..... | 000002c0 56 47 41 25 20 8c 0d 01 04 0d 20 6d 6f 64 65 25 |VGA% ..... mode%| 000002d0 3d 39 39 0d 01 0e 0f 20 61 76 70 69 78 25 3d 34 |=99.... avpix%=4| 000002e0 30 30 0d 01 18 12 20 68 61 64 64 25 3d 68 70 69 |00.... hadd%=hpi| 000002f0 78 25 2a 32 0d 01 22 0d 20 6c 68 61 64 64 25 3d |x%*2..". lhadd%=| 00000300 36 0d 01 2c 0d 20 6c 68 70 69 78 25 3d 35 0d 01 |6..,. lhpix%=5..| 00000310 36 05 cc 0d 01 40 0d 20 6d 6f 64 65 25 3d 39 38 |6....@. mode%=98| 00000320 0d 01 4a 0f 20 61 76 70 69 78 25 3d 32 30 30 0d |..J. avpix%=200.| 00000330 01 54 10 20 68 61 64 64 25 3d 68 70 69 78 25 0d |.T. hadd%=hpix%.| 00000340 01 5e 0d 20 6c 68 61 64 64 25 3d 35 0d 01 68 0d |.^. lhadd%=5..h.| 00000350 20 6c 68 70 69 78 25 3d 35 0d 01 72 05 cd 0d 01 | lhpix%=5..r....| 00000360 7c 05 3a 0d 01 86 15 de 20 62 61 6c 6c 64 61 74 ||.:..... balldat| 00000370 61 25 20 38 36 34 2a 33 0d 01 90 46 c8 99 20 22 |a% 864*3...F.. "| 00000380 4f 53 5f 46 69 6c 65 22 2c 20 32 35 35 2c 20 22 |OS_File", 255, "| 00000390 3c 42 61 6c 6c 73 24 44 69 72 3e 2e 52 65 73 6f |<Balls$Dir>.Reso| 000003a0 75 72 63 65 73 2e 42 61 6c 6c 72 44 61 74 61 22 |urces.BallrData"| 000003b0 2c 20 62 61 6c 6c 64 61 74 61 25 2c 20 30 0d 01 |, balldata%, 0..| 000003c0 9a 4a c8 99 20 22 4f 53 5f 46 69 6c 65 22 2c 20 |.J.. "OS_File", | 000003d0 32 35 35 2c 20 22 3c 42 61 6c 6c 73 24 44 69 72 |255, "<Balls$Dir| 000003e0 3e 2e 52 65 73 6f 75 72 63 65 73 2e 42 61 6c 6c |>.Resources.Ball| 000003f0 67 44 61 74 61 22 2c 20 62 61 6c 6c 64 61 74 61 |gData", balldata| 00000400 25 2b 38 36 34 2c 20 30 0d 01 a4 4c c8 99 20 22 |%+864, 0...L.. "| 00000410 4f 53 5f 46 69 6c 65 22 2c 20 32 35 35 2c 20 22 |OS_File", 255, "| 00000420 3c 42 61 6c 6c 73 24 44 69 72 3e 2e 52 65 73 6f |<Balls$Dir>.Reso| 00000430 75 72 63 65 73 2e 42 61 6c 6c 62 44 61 74 61 22 |urces.BallbData"| 00000440 2c 20 62 61 6c 6c 64 61 74 61 25 2b 38 36 34 2a |, balldata%+864*| 00000450 32 2c 20 30 0d 01 ae 15 de 20 62 61 63 6b 64 61 |2, 0..... backda| 00000460 74 61 25 20 35 37 36 35 36 0d 01 b8 44 c8 99 20 |ta% 57656...D.. | 00000470 22 4f 53 5f 46 69 6c 65 22 2c 20 32 35 35 2c 20 |"OS_File", 255, | 00000480 22 3c 42 61 6c 6c 73 24 44 69 72 3e 2e 52 65 73 |"<Balls$Dir>.Res| 00000490 6f 75 72 63 65 73 2e 42 61 63 6b 53 70 72 22 2c |ources.BackSpr",| 000004a0 20 62 61 63 6b 64 61 74 61 25 2c 20 30 0d 01 c2 | backdata%, 0...| 000004b0 14 de 20 6d 69 64 64 61 74 61 25 20 35 37 36 35 |.. middata% 5765| 000004c0 36 0d 01 cc 42 c8 99 20 22 4f 53 5f 46 69 6c 65 |6...B.. "OS_File| 000004d0 22 2c 20 32 35 35 2c 20 22 3c 42 61 6c 6c 73 24 |", 255, "<Balls$| 000004e0 44 69 72 3e 2e 52 65 73 6f 75 72 63 65 73 2e 4d |Dir>.Resources.M| 000004f0 69 64 53 70 72 22 2c 20 6d 69 64 64 61 74 61 25 |idSpr", middata%| 00000500 2c 20 30 0d 01 d6 05 3a 0d 01 e0 19 de 20 76 62 |, 0....:..... vb| 00000510 6c 69 6e 25 20 38 2c 20 76 62 6c 6f 75 74 25 20 |lin% 8, vblout% | 00000520 38 0d 01 ea 1b 21 76 62 6c 69 6e 25 3d 31 34 38 |8....!vblin%=148| 00000530 3a 76 62 6c 69 6e 25 21 34 3d 2d 31 0d 01 f4 0f |:vblin%!4=-1....| 00000540 eb 20 6d 6f 64 65 25 2b 31 32 38 0d 01 fe 2d c8 |. mode%+128...-.| 00000550 99 20 22 4f 53 5f 52 65 61 64 56 64 75 56 61 72 |. "OS_ReadVduVar| 00000560 69 61 62 6c 65 73 22 2c 20 76 62 6c 69 6e 25 2c |iables", vblin%,| 00000570 20 76 62 6c 6f 75 74 25 0d 02 08 14 73 63 72 73 | vblout%....scrs| 00000580 74 32 25 3d 21 76 62 6c 6f 75 74 25 0d 02 12 0b |t2%=!vblout%....| 00000590 eb 20 6d 6f 64 65 25 0d 02 1c 2d c8 99 20 22 4f |. mode%...-.. "O| 000005a0 53 5f 52 65 61 64 56 64 75 56 61 72 69 61 62 6c |S_ReadVduVariabl| 000005b0 65 73 22 2c 20 76 62 6c 69 6e 25 2c 20 76 62 6c |es", vblin%, vbl| 000005c0 6f 75 74 25 0d 02 26 14 73 63 72 73 74 31 25 3d |out%..&.scrst1%=| 000005d0 21 76 62 6c 6f 75 74 25 0d 02 30 05 87 0d 02 3a |!vblout%..0....:| 000005e0 05 3a 0d 02 44 0d 6d 61 78 6e 25 3d 32 30 30 0d |.:..D.maxn%=200.| 000005f0 02 4e 11 de 20 62 25 20 6d 61 78 6e 25 2a 32 34 |.N.. b% maxn%*24| 00000600 0d 02 58 33 f4 20 4e 42 20 62 25 20 73 74 6f 72 |..X3. NB b% stor| 00000610 65 73 20 61 72 72 61 79 20 28 6f 66 20 73 69 7a |es array (of siz| 00000620 65 20 6e 25 29 20 6f 66 20 73 74 72 75 63 74 75 |e n%) of structu| 00000630 72 65 3a 0d 02 62 4d f4 20 7b 78 20 63 6f 6f 72 |re:..bM. {x coor| 00000640 64 2c 20 79 20 63 6f 6f 72 64 2c 20 78 20 69 6e |d, y coord, x in| 00000650 63 72 65 6d 65 6e 74 2c 20 79 20 69 6e 63 72 65 |crement, y incre| 00000660 6d 65 6e 74 2c 20 73 74 69 63 6b 69 6e 67 20 63 |ment, sticking c| 00000670 6f 75 6e 74 2c 20 62 61 6c 6c 20 74 79 70 65 7d |ount, ball type}| 00000680 0d 02 6c 05 3a 0d 02 76 08 f2 61 73 73 0d 02 80 |..l.:..v..ass...| 00000690 05 3a 0d 02 8a 19 c8 99 20 36 2c 31 31 32 2c 31 |.:...... 6,112,1| 000006a0 3a c8 99 20 36 2c 31 31 33 2c 31 0d 02 94 08 6e |:.. 6,113,1....n| 000006b0 25 3d 31 0d 02 9e 0b 21 61 6e 25 3d 6e 25 0d 02 |%=1....!an%=n%..| 000006c0 a8 05 3a 0d 02 b2 2c f4 20 69 6e 69 74 69 61 6c |..:...,. initial| 000006d0 69 73 65 20 62 61 6c 6c 20 6c 6f 63 61 74 69 6f |ise ball locatio| 000006e0 6e 73 20 26 20 76 65 6c 6f 63 69 74 69 65 73 0d |ns & velocities.| 000006f0 02 bc 1b e3 20 69 25 20 3d 20 30 20 b8 20 6e 25 |.... i% = 0 . n%| 00000700 2a 32 34 2d 31 20 88 20 32 34 0d 02 c6 1a 20 20 |*24-1 . 24.... | 00000710 62 25 21 28 69 25 2b 30 29 20 20 3d 20 32 35 39 |b%!(i%+0) = 259| 00000720 2a 32 35 36 0d 02 d0 1a 20 20 62 25 21 28 69 25 |*256.... b%!(i%| 00000730 2b 34 29 20 20 3d 20 31 37 34 2a 32 35 36 0d 02 |+4) = 174*256..| 00000740 da 1b 20 20 62 25 21 28 69 25 2b 38 29 20 20 3d |.. b%!(i%+8) =| 00000750 20 b3 28 36 34 29 2d 33 32 0d 02 e4 23 20 20 62 | .(64)-32...# b| 00000760 25 21 28 69 25 2b 31 32 29 20 3d 20 2d 34 2a 32 |%!(i%+12) = -4*2| 00000770 35 36 2b b3 28 31 32 38 29 2d 36 34 0d 02 ee 14 |56+.(128)-64....| 00000780 20 20 62 25 21 28 69 25 2b 31 36 29 20 3d 20 30 | b%!(i%+16) = 0| 00000790 0d 02 f8 19 20 20 62 25 21 28 69 25 2b 32 30 29 |.... b%!(i%+20)| 000007a0 20 3d 20 b3 28 33 29 2d 31 0d 03 02 05 ed 0d 03 | = .(3)-1.......| 000007b0 0c 05 3a 0d 03 16 0f d6 20 6d 61 6b 65 62 61 63 |..:..... makebac| 000007c0 6b 25 0d 03 20 05 3a 0d 03 2a 05 f5 0d 03 34 0c |k%.. .:..*....4.| 000007d0 20 d6 20 61 6e 69 6d 25 0d 03 3e 11 20 e7 20 6e | . anim%..>. . n| 000007e0 25 3c 6d 61 78 6e 25 20 8c 0d 03 48 0e 20 20 69 |%<maxn% ...H. i| 000007f0 25 3d 32 34 2a 6e 25 0d 03 52 1a 20 20 62 25 21 |%=24*n%..R. b%!| 00000800 28 69 25 2b 30 29 20 20 3d 20 32 35 39 2a 32 35 |(i%+0) = 259*25| 00000810 36 0d 03 5c 1a 20 20 62 25 21 28 69 25 2b 34 29 |6..\. b%!(i%+4)| 00000820 20 20 3d 20 31 37 34 2a 32 35 36 0d 03 66 1b 20 | = 174*256..f. | 00000830 20 62 25 21 28 69 25 2b 38 29 20 20 3d 20 b3 28 | b%!(i%+8) = .(| 00000840 36 34 29 2d 33 32 0d 03 70 23 20 20 62 25 21 28 |64)-32..p# b%!(| 00000850 69 25 2b 31 32 29 20 3d 20 2d 34 2a 32 35 36 2b |i%+12) = -4*256+| 00000860 b3 28 31 32 38 29 2d 36 34 0d 03 7a 14 20 20 62 |.(128)-64..z. b| 00000870 25 21 28 69 25 2b 31 36 29 20 3d 20 30 0d 03 84 |%!(i%+16) = 0...| 00000880 19 20 20 62 25 21 28 69 25 2b 32 30 29 20 3d 20 |. b%!(i%+20) = | 00000890 b3 28 33 29 2d 31 0d 03 8e 0b 20 20 6e 25 2b 3d |.(3)-1.... n%+=| 000008a0 31 0d 03 98 0d 20 20 21 61 6e 25 3d 6e 25 0d 03 |1.... !an%=n%..| 000008b0 a2 06 20 cd 0d 03 ac 07 fd 20 a3 0d 03 b6 05 3a |.. ...... .....:| 000008c0 0d 03 c0 05 e0 0d 03 ca 05 3a 0d 03 d4 0a dd 20 |.........:..... | 000008d0 f2 61 73 73 0d 03 de 2d de 20 63 6f 64 65 25 20 |.ass...-. code% | 000008e0 31 30 32 34 30 2c 20 73 71 72 74 25 20 32 35 37 |10240, sqrt% 257| 000008f0 2a 34 2c 20 73 69 6e 63 6f 73 25 20 32 35 36 2a |*4, sincos% 256*| 00000900 38 0d 03 e8 10 e3 20 69 25 3d 30 20 b8 20 32 35 |8..... i%=0 . 25| 00000910 36 0d 03 f2 21 20 73 71 72 74 25 21 28 34 2a 69 |6...! sqrt%!(4*i| 00000920 25 29 20 3d 20 30 2e 35 2b b6 28 32 35 36 2a 69 |%) = 0.5+.(256*i| 00000930 25 29 0d 03 fc 05 ed 0d 04 06 10 e3 20 69 25 3d |%).......... i%=| 00000940 30 20 b8 20 32 35 35 0d 04 10 2d 20 73 69 6e 63 |0 . 255...- sinc| 00000950 6f 73 25 21 28 38 2a 69 25 20 20 29 20 3d 20 30 |os%!(8*i% ) = 0| 00000960 2e 35 2b 32 35 36 2a b5 28 32 2a af 2a 69 25 2f |.5+256*.(2*.*i%/| 00000970 32 35 36 29 0d 04 1a 2d 20 73 69 6e 63 6f 73 25 |256)...- sincos%| 00000980 21 28 38 2a 69 25 2b 34 29 20 3d 20 30 2e 35 2b |!(8*i%+4) = 0.5+| 00000990 32 35 36 2a 9b 28 32 2a af 2a 69 25 2f 32 35 36 |256*.(2*.*i%/256| 000009a0 29 0d 04 24 05 ed 0d 04 2e 12 73 63 72 73 74 25 |)..$......scrst%| 000009b0 3d 73 63 72 73 74 31 25 0d 04 38 17 e3 20 70 61 |=scrst1%..8.. pa| 000009c0 73 73 25 20 3d 20 30 20 b8 20 32 20 88 20 32 0d |ss% = 0 . 2 . 2.| 000009d0 04 42 0d 20 50 25 3d 63 6f 64 65 25 0d 04 4c 0f |.B. P%=code%..L.| 000009e0 20 5b 4f 50 54 20 70 61 73 73 25 0d 04 56 1e 20 | [OPT pass%..V. | 000009f0 2e 61 73 70 66 72 61 6d 65 25 20 20 20 20 20 20 |.aspframe% | 00000a00 20 20 20 45 51 55 44 20 30 0d 04 60 2c 20 2e 61 | EQUD 0..`, .a| 00000a10 73 63 72 73 74 73 75 6d 25 20 20 20 20 20 20 20 |scrstsum% | 00000a20 20 45 51 55 44 20 73 63 72 73 74 31 25 2b 73 63 | EQUD scrst1%+sc| 00000a30 72 73 74 32 25 0d 04 6a 14 20 2e 61 6e 25 20 20 |rst2%..j. .an% | 00000a40 20 20 20 45 51 55 44 20 30 0d 04 74 15 20 2e 61 | EQUD 0..t. .a| 00000a50 62 25 20 20 20 20 20 45 51 55 44 20 62 25 0d 04 |b% EQUD b%..| 00000a60 7e 44 20 2e 61 74 69 6d 65 25 20 20 45 51 55 44 |~D .atime% EQUD| 00000a70 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | 0 | 00000a80 3b 74 69 6d 65 20 73 74 6f 72 61 67 65 20 66 6f |;time storage fo| 00000a90 72 20 66 72 61 6d 65 20 73 70 65 65 64 20 63 61 |r frame speed ca| 00000aa0 6c 63 0d 04 88 30 20 2e 61 66 63 25 20 20 20 20 |lc...0 .afc% | 00000ab0 45 51 55 44 20 30 20 20 20 20 20 20 20 20 20 20 |EQUD 0 | 00000ac0 20 20 20 20 3b 66 72 61 6d 65 20 63 6f 75 6e 74 | ;frame count| 00000ad0 65 72 0d 04 92 0b 20 2e 61 6e 69 6d 25 0d 04 9c |er.... .anim%...| 00000ae0 17 20 53 54 4d 46 44 20 20 20 20 31 33 21 2c 20 |. STMFD 13!, | 00000af0 7b 31 34 7d 0d 04 a6 3a 20 53 54 52 20 20 20 20 |{14}...: STR | 00000b00 20 20 31 33 2c 20 61 73 70 66 72 61 6d 65 25 20 | 13, aspframe% | 00000b10 20 20 20 20 20 20 3b 73 74 6f 72 65 20 73 70 20 | ;store sp | 00000b20 74 6f 20 66 72 65 65 20 75 70 20 72 31 33 0d 04 |to free up r13..| 00000b30 b0 10 20 2e 6e 65 78 74 66 72 61 6d 65 25 0d 04 |.. .nextframe%..| 00000b40 ba 06 20 3a 0d 04 c4 3e 20 53 57 49 20 20 20 20 |.. :...> SWI | 00000b50 20 20 22 4f 53 5f 52 65 61 64 4d 6f 6e 6f 74 6f | "OS_ReadMonoto| 00000b60 6e 69 63 54 69 6d 65 22 20 20 20 20 20 20 20 20 |nicTime" | 00000b70 3b 74 72 61 63 6b 20 66 72 61 6d 65 20 73 70 65 |;track frame spe| 00000b80 65 64 0d 04 ce 17 20 53 54 52 20 20 20 20 20 20 |ed.... STR | 00000b90 30 2c 20 61 74 69 6d 65 25 0d 04 d8 06 20 3a 0d |0, atime%.... :.| 00000ba0 04 e2 14 20 4d 4f 56 20 20 20 20 20 20 30 2c 20 |... MOV 0, | 00000bb0 23 31 39 0d 04 ec 3b 20 53 57 49 20 20 20 20 20 |#19...; SWI | 00000bc0 20 22 4f 53 5f 42 79 74 65 22 20 20 20 20 20 20 | "OS_Byte" | 00000bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00000be0 77 61 69 74 20 66 6f 72 20 76 73 79 6e 63 0d 04 |wait for vsync..| 00000bf0 f6 15 20 4d 4f 56 20 20 20 20 20 20 30 2c 20 23 |.. MOV 0, #| 00000c00 31 31 33 0d 05 00 17 20 4c 44 52 20 20 20 20 20 |113.... LDR | 00000c10 20 31 2c 20 61 62 61 6e 6b 25 0d 05 0a 16 20 52 | 1, abank%.... R| 00000c20 53 42 20 20 20 20 20 20 33 2c 20 31 2c 20 23 33 |SB 3, 1, #3| 00000c30 0d 05 14 17 20 53 54 52 20 20 20 20 20 20 33 2c |.... STR 3,| 00000c40 20 61 62 61 6e 6b 25 0d 05 1e 3d 20 53 57 49 20 | abank%...= SWI | 00000c50 20 20 20 20 20 22 4f 53 5f 42 79 74 65 22 20 20 | "OS_Byte" | 00000c60 20 20 20 20 20 20 20 20 20 3b 73 77 61 70 20 64 | ;swap d| 00000c70 69 73 70 6c 61 79 65 64 20 73 63 72 65 65 6e 20 |isplayed screen | 00000c80 62 61 6e 6b 0d 05 28 1b 20 4c 44 52 20 20 20 20 |bank..(. LDR | 00000c90 20 20 30 2c 20 61 73 63 72 73 74 73 75 6d 25 0d | 0, ascrstsum%.| 00000ca0 05 32 18 20 4c 44 52 20 20 20 20 20 20 31 2c 20 |.2. LDR 1, | 00000cb0 61 73 63 72 73 74 25 0d 05 3c 15 20 53 55 42 20 |ascrst%..<. SUB | 00000cc0 20 20 20 20 20 31 2c 20 30 2c 20 31 0d 05 46 39 | 1, 0, 1..F9| 00000cd0 20 53 54 52 20 20 20 20 20 20 31 2c 20 61 73 63 | STR 1, asc| 00000ce0 72 73 74 25 20 20 20 20 20 20 20 20 20 20 3b 73 |rst% ;s| 00000cf0 77 61 70 20 70 74 72 20 74 6f 20 6f 74 68 65 72 |wap ptr to other| 00000d00 20 62 61 6e 6b 0d 05 50 3e 20 42 4c 20 20 20 20 | bank..P> BL | 00000d10 20 20 20 63 6f 70 79 62 61 63 6b 25 20 20 20 20 | copyback% | 00000d20 20 20 20 20 20 20 20 3b 63 6c 73 20 74 68 61 74 | ;cls that| 00000d30 20 62 61 6e 6b 20 74 6f 20 62 61 63 6b 67 72 6f | bank to backgro| 00000d40 75 6e 64 0d 05 5a 06 20 3a 0d 05 64 15 20 4c 44 |und..Z. :..d. LD| 00000d50 52 20 20 20 20 20 20 31 32 2c 20 61 62 25 0d 05 |R 12, ab%..| 00000d60 6e 15 20 4c 44 52 20 20 20 20 20 20 31 33 2c 20 |n. LDR 13, | 00000d70 61 6e 25 0d 05 78 36 20 2e 66 72 61 6d 65 6d 6f |an%..x6 .framemo| 00000d80 76 65 6c 6f 6f 70 25 20 20 20 20 20 20 20 20 20 |veloop% | 00000d90 20 20 20 20 20 3b 74 68 65 6e 20 6d 6f 76 65 20 | ;then move | 00000da0 65 61 63 68 20 62 61 6c 6c 0d 05 82 38 20 4c 44 |each ball...8 LD| 00000db0 4d 49 41 20 20 20 20 31 32 2c 20 7b 30 2c 31 2c |MIA 12, {0,1,| 00000dc0 32 2c 33 2c 34 2c 35 7d 20 20 20 3b 20 72 65 61 |2,3,4,5} ; rea| 00000dd0 64 20 78 2c 79 2c 78 69 2c 79 69 2c 73 63 2c 62 |d x,y,xi,yi,sc,b| 00000de0 74 0d 05 8c 19 20 42 4c 20 20 20 20 20 20 20 6d |t.... BL m| 00000df0 6f 76 65 6e 63 68 65 63 6b 25 0d 05 96 3b 20 53 |ovencheck%...; S| 00000e00 54 4d 49 41 20 20 20 20 31 32 21 2c 20 7b 30 2c |TMIA 12!, {0,| 00000e10 31 2c 32 2c 33 2c 34 2c 35 7d 20 20 3b 20 72 65 |1,2,3,4,5} ; re| 00000e20 73 74 6f 72 65 20 78 2c 79 2c 78 69 2c 79 69 2c |store x,y,xi,yi,| 00000e30 73 63 2c 62 74 0d 05 a0 18 20 53 55 42 53 20 20 |sc,bt.... SUBS | 00000e40 20 20 20 31 33 2c 20 31 33 2c 20 23 31 0d 05 aa | 13, 13, #1...| 00000e50 34 20 42 4e 45 20 20 20 20 20 20 66 72 61 6d 65 |4 BNE frame| 00000e60 6d 6f 76 65 6c 6f 6f 70 25 20 20 20 20 20 20 3b |moveloop% ;| 00000e70 74 68 65 6e 20 64 6f 20 6e 65 78 74 20 62 61 6c |then do next bal| 00000e80 6c 0d 05 b4 06 20 3a 0d 05 be 15 20 4c 44 52 20 |l.... :.... LDR | 00000e90 20 20 20 20 20 31 32 2c 20 61 62 25 0d 05 c8 15 | 12, ab%....| 00000ea0 20 4c 44 52 20 20 20 20 20 20 31 33 2c 20 61 6e | LDR 13, an| 00000eb0 25 0d 05 d2 36 20 2e 66 72 61 6d 65 70 6c 6f 74 |%...6 .frameplot| 00000ec0 6c 6f 6f 70 25 20 20 20 20 20 20 20 20 20 20 20 |loop% | 00000ed0 20 20 20 3b 6e 6f 77 20 70 6c 6f 74 20 65 61 63 | ;now plot eac| 00000ee0 68 20 62 61 6c 6c 3a 0d 05 dc 3d 20 4c 44 4d 49 |h ball:...= LDMI| 00000ef0 41 20 20 20 20 31 32 2c 20 7b 30 2c 31 7d 20 20 |A 12, {0,1} | 00000f00 20 20 20 20 20 20 20 20 20 3b 20 72 65 61 64 20 | ; read | 00000f10 78 2c 79 20 63 6f 6f 72 64 73 20 66 72 6f 6d 20 |x,y coords from | 00000f20 64 61 74 61 0d 05 e6 1a 20 4c 44 52 20 20 20 20 |data.... LDR | 00000f30 20 20 32 2c 20 5b 31 32 2c 20 23 32 30 5d 0d 05 | 2, [12, #20]..| 00000f40 f0 1a 20 4d 4f 56 20 20 20 20 20 20 30 2c 20 30 |.. MOV 0, 0| 00000f50 2c 20 41 53 52 20 23 38 0d 05 fa 1a 20 4d 4f 56 |, ASR #8.... MOV| 00000f60 20 20 20 20 20 20 31 2c 20 31 2c 20 41 53 52 20 | 1, 1, ASR | 00000f70 23 38 0d 06 04 34 20 42 4c 20 20 20 20 20 20 20 |#8...4 BL | 00000f80 70 6c 6f 74 25 20 20 20 20 20 20 20 20 20 20 20 |plot% | 00000f90 20 20 20 20 3b 20 70 6c 6f 74 20 62 61 6c 6c 20 | ; plot ball | 00000fa0 61 74 20 78 2c 79 0d 06 0e 19 20 41 44 44 20 20 |at x,y.... ADD | 00000fb0 20 20 20 20 31 32 2c 20 31 32 2c 20 23 32 34 0d | 12, 12, #24.| 00000fc0 06 18 18 20 53 55 42 53 20 20 20 20 20 31 33 2c |... SUBS 13,| 00000fd0 20 31 33 2c 20 23 31 0d 06 22 34 20 42 4e 45 20 | 13, #1.."4 BNE | 00000fe0 20 20 20 20 20 66 72 61 6d 65 70 6c 6f 74 6c 6f | frameplotlo| 00000ff0 6f 70 25 20 20 20 20 20 20 3b 74 68 65 6e 20 64 |op% ;then d| 00001000 6f 20 6e 65 78 74 20 62 61 6c 6c 0d 06 2c 16 20 |o next ball..,. | 00001010 4c 44 52 20 20 20 20 20 20 31 31 2c 20 61 66 63 |LDR 11, afc| 00001020 25 0d 06 36 18 20 41 44 44 20 20 20 20 20 20 31 |%..6. ADD 1| 00001030 31 2c 20 31 31 2c 20 23 31 0d 06 40 35 20 53 54 |1, 11, #1..@5 ST| 00001040 52 20 20 20 20 20 20 31 31 2c 20 61 66 63 25 20 |R 11, afc% | 00001050 20 20 20 20 20 20 20 20 20 20 20 3b 75 70 64 61 | ;upda| 00001060 74 65 20 66 72 61 6d 65 20 63 6f 75 6e 74 0d 06 |te frame count..| 00001070 4a 06 20 3a 0d 06 54 06 20 5d 0d 06 5e 0d 20 e7 |J. :..T. ]..^. .| 00001080 20 56 47 41 25 20 8c 0d 06 68 0f 20 5b 4f 50 54 | VGA% ...h. [OPT| 00001090 20 70 61 73 73 25 0d 06 72 44 20 4c 44 52 20 20 | pass%..rD LDR | 000010a0 20 20 20 20 31 34 2c 20 61 73 63 72 73 74 25 20 | 14, ascrst% | 000010b0 20 20 20 20 20 20 20 20 3b 69 66 20 69 6e 20 56 | ;if in V| 000010c0 47 41 20 6d 6f 64 65 2c 20 66 69 6c 6c 20 69 6e |GA mode, fill in| 000010d0 20 74 68 65 20 65 78 74 72 61 0d 06 7c 42 20 41 | the extra..|B A| 000010e0 44 44 20 20 20 20 20 20 31 33 2c 20 31 34 2c 20 |DD 13, 14, | 000010f0 23 68 61 64 64 25 2d 68 70 69 78 25 3b 62 6c 61 |#hadd%-hpix%;bla| 00001100 6e 6b 20 6c 69 6e 65 73 20 62 79 20 63 6f 70 79 |nk lines by copy| 00001110 69 6e 67 20 74 68 65 20 6c 69 6e 65 0d 06 86 28 |ing the line...(| 00001120 20 4d 4f 56 20 20 20 20 20 20 31 32 2c 20 23 76 | MOV 12, #v| 00001130 70 69 78 25 20 20 20 20 20 20 20 20 20 20 3b 61 |pix% ;a| 00001140 62 6f 76 65 0d 06 90 12 20 2e 69 6e 74 65 72 6c |bove.... .interl| 00001150 61 63 65 6c 31 25 0d 06 9a 19 20 4c 44 4d 49 41 |acel1%.... LDMIA| 00001160 20 20 20 20 31 34 21 2c 20 7b 30 2d 31 31 7d 0d | 14!, {0-11}.| 00001170 06 a4 19 20 53 54 4d 49 41 20 20 20 20 31 33 21 |... STMIA 13!| 00001180 2c 20 7b 30 2d 31 31 7d 0d 06 ae 19 20 4c 44 4d |, {0-11}.... LDM| 00001190 49 41 20 20 20 20 31 34 21 2c 20 7b 30 2d 31 31 |IA 14!, {0-11| 000011a0 7d 0d 06 b8 19 20 53 54 4d 49 41 20 20 20 20 31 |}.... STMIA 1| 000011b0 33 21 2c 20 7b 30 2d 31 31 7d 0d 06 c2 19 20 4c |3!, {0-11}.... L| 000011c0 44 4d 49 41 20 20 20 20 31 34 21 2c 20 7b 30 2d |DMIA 14!, {0-| 000011d0 31 31 7d 0d 06 cc 19 20 53 54 4d 49 41 20 20 20 |11}.... STMIA | 000011e0 20 31 33 21 2c 20 7b 30 2d 31 31 7d 0d 06 d6 19 | 13!, {0-11}....| 000011f0 20 4c 44 4d 49 41 20 20 20 20 31 34 21 2c 20 7b | LDMIA 14!, {| 00001200 30 2d 31 31 7d 0d 06 e0 19 20 53 54 4d 49 41 20 |0-11}.... STMIA | 00001210 20 20 20 31 33 21 2c 20 7b 30 2d 31 31 7d 0d 06 | 13!, {0-11}..| 00001220 ea 19 20 4c 44 4d 49 41 20 20 20 20 31 34 21 2c |.. LDMIA 14!,| 00001230 20 7b 30 2d 31 31 7d 0d 06 f4 19 20 53 54 4d 49 | {0-11}.... STMI| 00001240 41 20 20 20 20 31 33 21 2c 20 7b 30 2d 31 31 7d |A 13!, {0-11}| 00001250 0d 06 fe 19 20 4c 44 4d 49 41 20 20 20 20 31 34 |.... LDMIA 14| 00001260 21 2c 20 7b 30 2d 31 31 7d 0d 07 08 19 20 53 54 |!, {0-11}.... ST| 00001270 4d 49 41 20 20 20 20 31 33 21 2c 20 7b 30 2d 31 |MIA 13!, {0-1| 00001280 31 7d 0d 07 12 22 20 41 44 44 20 20 20 20 20 20 |1}..." ADD | 00001290 31 33 2c 20 31 33 2c 20 23 68 61 64 64 25 2d 68 |13, 13, #hadd%-h| 000012a0 70 69 78 25 0d 07 1c 22 20 41 44 44 20 20 20 20 |pix%..." ADD | 000012b0 20 20 31 34 2c 20 31 34 2c 20 23 68 61 64 64 25 | 14, 14, #hadd%| 000012c0 2d 68 70 69 78 25 0d 07 26 18 20 53 55 42 53 20 |-hpix%..&. SUBS | 000012d0 20 20 20 20 31 32 2c 20 31 32 2c 20 23 31 0d 07 | 12, 12, #1..| 000012e0 30 1a 20 42 4e 45 20 20 20 20 20 20 69 6e 74 65 |0. BNE inte| 000012f0 72 6c 61 63 65 6c 31 25 0d 07 3a 06 20 5d 0d 07 |rlacel1%..:. ]..| 00001300 44 06 20 cd 0d 07 4e 0f 20 5b 4f 50 54 20 70 61 |D. ...N. [OPT pa| 00001310 73 73 25 0d 07 58 06 20 3a 0d 07 62 42 20 53 57 |ss%..X. :..bB SW| 00001320 49 20 20 20 20 20 20 22 4f 53 5f 52 65 61 64 4d |I "OS_ReadM| 00001330 6f 6e 6f 74 6f 6e 69 63 54 69 6d 65 22 20 20 20 |onotonicTime" | 00001340 20 20 20 20 20 3b 63 61 6c 63 75 6c 61 74 65 20 | ;calculate | 00001350 66 72 61 6d 65 20 73 70 65 65 64 0d 07 6c 17 20 |frame speed..l. | 00001360 4c 44 52 20 20 20 20 20 20 31 2c 20 61 74 69 6d |LDR 1, atim| 00001370 65 25 0d 07 76 15 20 53 55 42 20 20 20 20 20 20 |e%..v. SUB | 00001380 30 2c 20 30 2c 20 31 0d 07 80 20 20 43 4d 50 20 |0, 0, 1... CMP | 00001390 20 20 20 20 20 30 2c 20 23 31 30 30 2f 74 61 72 | 0, #100/tar| 000013a0 67 65 74 66 70 73 25 0d 07 8a 44 20 53 57 49 47 |getfps%...D SWIG| 000013b0 54 20 20 20 20 32 35 36 2b 37 20 20 20 20 20 20 |T 256+7 | 000013c0 20 20 20 20 20 20 20 20 20 3b 62 65 65 70 20 69 | ;beep i| 000013d0 66 20 69 74 20 66 61 6c 6c 73 20 62 65 6c 6f 77 |f it falls below| 000013e0 20 74 61 72 67 65 74 20 66 70 73 0d 07 94 06 20 | target fps.... | 000013f0 3a 0d 07 9e 15 20 4d 4f 56 20 20 20 20 20 20 30 |:.... MOV 0| 00001400 2c 20 23 31 32 39 0d 07 a8 13 20 4d 4f 56 20 20 |, #129.... MOV | 00001410 20 20 20 20 31 2c 20 23 30 0d 07 b2 13 20 4d 4f | 1, #0.... MO| 00001420 56 20 20 20 20 20 20 32 2c 20 23 30 0d 07 bc 17 |V 2, #0....| 00001430 20 53 57 49 20 20 20 20 20 20 22 4f 53 5f 42 79 | SWI "OS_By| 00001440 74 65 22 0d 07 c6 15 20 43 4d 50 20 20 20 20 20 |te".... CMP | 00001450 20 32 2c 20 23 26 46 46 0d 07 d0 43 20 42 45 51 | 2, #&FF...C BEQ| 00001460 20 20 20 20 20 20 6e 65 78 74 66 72 61 6d 65 25 | nextframe%| 00001470 20 20 20 20 20 20 20 20 20 20 3b 69 66 20 6e 6f | ;if no| 00001480 20 6b 65 79 20 70 72 65 73 73 65 64 2c 20 64 6f | key pressed, do| 00001490 20 6e 65 78 74 20 66 72 61 6d 65 0d 07 da 2d 20 | next frame...- | 000014a0 4c 44 52 20 20 20 20 20 20 31 33 2c 20 61 73 70 |LDR 13, asp| 000014b0 66 72 61 6d 65 25 20 20 20 20 20 20 20 3b 72 65 |frame% ;re| 000014c0 73 74 6f 72 65 20 73 70 0d 07 e4 32 20 4c 44 4d |store sp...2 LDM| 000014d0 46 44 20 20 20 20 31 33 21 2c 20 7b 50 43 7d 20 |FD 13!, {PC} | 000014e0 20 20 20 20 20 20 20 20 20 20 3b 72 65 74 75 72 | ;retur| 000014f0 6e 20 74 6f 20 42 41 53 49 43 0d 07 ee 06 20 3a |n to BASIC.... :| 00001500 0d 07 f8 0f 20 2e 6d 61 6b 65 62 61 63 6b 25 0d |.... .makeback%.| 00001510 08 02 1b 20 4c 44 52 20 20 20 20 20 20 30 2c 20 |... LDR 0, | 00001520 61 62 61 63 6b 64 61 74 61 25 0d 08 0c 1a 20 4c |abackdata%.... L| 00001530 44 52 20 20 20 20 20 20 31 2c 20 61 6d 69 64 64 |DR 1, amidd| 00001540 61 74 61 25 0d 08 16 1d 20 4d 4f 56 20 20 20 20 |ata%.... MOV | 00001550 20 20 32 2c 20 23 76 70 69 78 25 2a 68 70 69 78 | 2, #vpix%*hpix| 00001560 25 0d 08 20 15 20 4d 4f 56 20 20 20 20 20 20 34 |%.. . MOV 4| 00001570 2c 20 23 32 35 35 0d 08 2a 13 20 2e 6d 61 6b 65 |, #255..*. .make| 00001580 62 61 63 6b 6c 6f 6f 70 25 0d 08 34 14 20 4c 44 |backloop%..4. LD| 00001590 52 42 20 20 20 20 20 33 2c 20 5b 31 5d 0d 08 3e |RB 3, [1]..>| 000015a0 13 20 43 4d 50 20 20 20 20 20 20 33 2c 20 23 30 |. CMP 3, #0| 000015b0 0d 08 48 14 20 53 54 52 4e 45 42 20 20 20 33 2c |..H. STRNEB 3,| 000015c0 20 5b 30 5d 0d 08 52 14 20 53 54 52 4e 45 42 20 | [0]..R. STRNEB | 000015d0 20 20 34 2c 20 5b 31 5d 0d 08 5c 16 20 41 44 44 | 4, [1]..\. ADD| 000015e0 20 20 20 20 20 20 31 2c 20 31 2c 20 23 31 0d 08 | 1, 1, #1..| 000015f0 66 16 20 41 44 44 20 20 20 20 20 20 30 2c 20 30 |f. ADD 0, 0| 00001600 2c 20 23 31 0d 08 70 16 20 53 55 42 53 20 20 20 |, #1..p. SUBS | 00001610 20 20 32 2c 20 32 2c 20 23 31 0d 08 7a 1b 20 42 | 2, 2, #1..z. B| 00001620 4e 45 20 20 20 20 20 20 6d 61 6b 65 62 61 63 6b |NE makeback| 00001630 6c 6f 6f 70 25 0d 08 84 14 20 4d 4f 56 53 20 20 |loop%.... MOVS | 00001640 20 20 20 50 43 2c 20 31 34 0d 08 8e 06 20 3a 0d | PC, 14.... :.| 00001650 08 98 19 20 2e 61 73 63 72 73 74 25 20 45 51 55 |... .ascrst% EQU| 00001660 44 20 73 63 72 73 74 25 0d 08 a2 1c 20 2e 61 64 |D scrst%.... .ad| 00001670 61 74 61 25 20 20 45 51 55 44 20 62 61 6c 6c 64 |ata% EQUD balld| 00001680 61 74 61 25 0d 08 ac 29 20 2e 61 62 61 63 6b 64 |ata%...) .abackd| 00001690 61 74 61 25 20 20 20 20 20 20 20 20 45 51 55 44 |ata% EQUD| 000016a0 20 62 61 63 6b 64 61 74 61 25 2b 35 36 0d 08 b6 | backdata%+56...| 000016b0 28 20 2e 61 6d 69 64 64 61 74 61 25 20 20 20 20 |( .amiddata% | 000016c0 20 20 20 20 20 45 51 55 44 20 6d 69 64 64 61 74 | EQUD middat| 000016d0 61 25 2b 35 36 0d 08 c0 14 20 2e 61 62 61 6e 6b |a%+56.... .abank| 000016e0 25 20 20 45 51 55 44 20 31 0d 08 ca 2c 20 2e 61 |% EQUD 1..., .a| 000016f0 70 6c 6f 74 72 65 67 73 25 20 20 20 20 20 20 20 |plotregs% | 00001700 20 45 51 55 44 20 30 3a 45 51 55 44 20 30 3a 45 | EQUD 0:EQUD 0:E| 00001710 51 55 44 20 30 0d 08 d4 33 20 2e 70 6c 6f 74 25 |QUD 0...3 .plot%| 00001720 20 20 20 3b 70 6c 6f 74 20 6f 75 72 20 62 61 6c | ;plot our bal| 00001730 6c 20 73 70 72 69 74 65 20 61 74 20 63 6f 6f 72 |l sprite at coor| 00001740 64 73 20 72 30 2c 72 31 0d 08 de 3e 20 20 20 20 |ds r0,r1...> | 00001750 20 20 20 20 20 20 3b 77 68 65 72 65 20 30 2c 30 | ;where 0,0| 00001760 20 69 73 20 74 6f 70 20 6c 65 66 74 20 26 20 32 | is top left & 2| 00001770 38 37 2c 31 39 39 20 69 73 20 62 6f 74 74 6f 6d |87,199 is bottom| 00001780 20 72 69 67 68 74 0d 08 e8 38 20 20 20 20 20 20 | right...8 | 00001790 20 20 20 20 3b 4e 42 20 73 70 72 69 74 65 20 4d | ;NB sprite M| 000017a0 55 53 54 20 6c 69 65 20 65 6e 74 69 72 65 6c 79 |UST lie entirely| 000017b0 20 77 69 74 68 69 6e 20 73 63 72 65 65 6e 0d 08 | within screen..| 000017c0 f2 1c 20 41 44 52 20 20 20 20 20 20 31 31 2c 20 |.. ADR 11, | 000017d0 61 70 6c 6f 74 72 65 67 73 25 0d 08 fc 1c 20 53 |aplotregs%.... S| 000017e0 54 4d 49 41 20 20 20 20 31 31 2c 20 7b 31 32 2c |TMIA 11, {12,| 000017f0 31 33 2c 31 34 7d 0d 09 06 42 20 80 20 20 20 20 |13,14}...B . | 00001800 20 20 34 2c 20 30 2c 20 23 33 20 20 20 20 20 20 | 4, 0, #3 | 00001810 20 20 20 20 20 20 3b 63 61 6c 63 20 77 68 69 63 | ;calc whic| 00001820 68 20 6f 66 20 34 20 73 70 72 69 74 65 20 61 6c |h of 4 sprite al| 00001830 69 67 6e 6d 65 6e 74 73 0d 09 10 45 20 41 44 44 |ignments...E ADD| 00001840 20 20 20 20 20 20 33 2c 20 34 2c 20 34 2c 20 41 | 3, 4, 4, A| 00001850 53 4c 20 23 31 20 20 20 20 20 3b 77 65 20 6e 65 |SL #1 ;we ne| 00001860 65 64 20 76 69 61 20 28 78 41 4e 44 33 29 2a 31 |ed via (xAND3)*1| 00001870 32 2a 32 2a 39 20 2b 20 64 61 74 61 25 0d 09 1a |2*2*9 + data%...| 00001880 1d 20 41 44 44 20 20 20 20 20 20 33 2c 20 33 2c |. ADD 3, 3,| 00001890 20 33 2c 20 41 53 4c 20 23 33 0d 09 24 3c 20 42 | 3, ASL #3..$< B| 000018a0 49 43 20 20 20 20 20 20 30 2c 20 30 2c 20 23 33 |IC 0, 0, #3| 000018b0 20 20 20 20 20 20 20 20 20 20 20 20 3b 72 6f 75 | ;rou| 000018c0 6e 64 20 78 20 64 6f 77 6e 20 74 6f 20 6d 75 6c |nd x down to mul| 000018d0 74 20 6f 66 20 33 0d 09 2e 1d 20 41 44 44 20 20 |t of 3.... ADD | 000018e0 20 20 20 20 31 2c 20 31 2c 20 31 2c 20 41 53 4c | 1, 1, 1, ASL| 000018f0 20 23 33 0d 09 38 18 20 4c 44 52 20 20 20 20 20 | #3..8. LDR | 00001900 20 34 2c 20 61 73 63 72 73 74 25 0d 09 42 22 20 | 4, ascrst%..B" | 00001910 41 44 44 20 20 20 20 20 20 34 2c 20 34 2c 20 31 |ADD 4, 4, 1| 00001920 2c 20 41 53 4c 20 23 6c 68 61 64 64 25 0d 09 4c |, ASL #lhadd%..L| 00001930 42 20 41 44 44 20 20 20 20 20 20 30 2c 20 34 2c |B ADD 0, 4,| 00001940 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | 0 ;| 00001950 63 61 6c 63 20 28 73 63 72 65 65 6e 20 70 74 72 |calc (screen ptr| 00001960 20 2b 20 68 61 64 64 25 2a 79 20 2b 20 78 29 0d | + hadd%*y + x).| 00001970 09 56 17 20 4c 44 52 20 20 20 20 20 20 31 2c 20 |.V. LDR 1, | 00001980 61 64 61 74 61 25 0d 09 60 1d 20 52 53 42 20 20 |adata%..`. RSB | 00001990 20 20 20 20 34 2c 20 32 2c 20 32 2c 20 41 53 4c | 4, 2, 2, ASL| 000019a0 20 23 35 0d 09 6a 1d 20 53 55 42 20 20 20 20 20 | #5..j. SUB | 000019b0 20 34 2c 20 34 2c 20 32 2c 20 41 53 4c 20 23 32 | 4, 4, 2, ASL #2| 000019c0 0d 09 74 1d 20 41 44 44 20 20 20 20 20 20 31 2c |..t. ADD 1,| 000019d0 20 31 2c 20 34 2c 20 41 53 4c 20 23 35 0d 09 7e | 1, 4, ASL #5..~| 000019e0 44 20 41 44 44 20 20 20 20 20 20 31 2c 20 31 2c |D ADD 1, 1,| 000019f0 20 33 2c 20 41 53 4c 20 23 33 20 20 20 20 20 3b | 3, ASL #3 ;| 00001a00 66 69 6e 61 6c 6c 79 20 63 61 6c 63 20 28 78 41 |finally calc (xA| 00001a10 4e 44 33 29 2a 31 32 2a 32 2a 39 2b 64 61 74 61 |ND3)*12*2*9+data| 00001a20 25 0d 09 88 13 20 4d 4f 56 20 20 20 20 20 20 32 |%.... MOV 2| 00001a30 2c 20 23 33 0d 09 92 19 20 41 44 44 20 20 20 20 |, #3.... ADD | 00001a40 20 20 33 2c 20 31 2c 20 23 31 32 2a 39 0d 09 9c | 3, 1, #12*9...| 00001a50 32 20 2e 6c 6f 6f 70 31 25 20 20 20 20 20 20 20 |2 .loop1% | 00001a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00001a70 6e 6f 77 20 70 6c 6f 74 20 73 70 72 69 74 65 0d |now plot sprite.| 00001a80 09 a6 2e 20 a4 70 6c 6f 74 66 72 61 67 28 70 61 |... .plotfrag(pa| 00001a90 73 73 25 29 20 20 20 20 20 20 20 20 20 20 20 20 |ss%) | 00001aa0 3b 70 6c 6f 74 20 31 73 74 20 72 6f 77 0d 09 b0 |;plot 1st row...| 00001ab0 44 20 41 44 44 20 20 20 20 20 20 30 2c 20 30 2c |D ADD 0, 0,| 00001ac0 20 23 68 61 64 64 25 2d 31 32 20 20 20 20 20 3b | #hadd%-12 ;| 00001ad0 6d 6f 76 65 20 73 63 72 65 65 6e 20 70 74 72 20 |move screen ptr | 00001ae0 74 6f 20 73 74 61 72 74 20 6e 65 78 74 20 72 6f |to start next ro| 00001af0 77 0d 09 ba 15 20 a4 70 6c 6f 74 66 72 61 67 28 |w.... .plotfrag(| 00001b00 70 61 73 73 25 29 0d 09 c4 1d 20 41 44 44 20 20 |pass%).... ADD | 00001b10 20 20 20 20 30 2c 20 30 2c 20 23 68 61 64 64 25 | 0, 0, #hadd%| 00001b20 2d 31 32 0d 09 ce 2e 20 a4 70 6c 6f 74 66 72 61 |-12.... .plotfra| 00001b30 67 28 70 61 73 73 25 29 20 20 20 20 20 20 20 20 |g(pass%) | 00001b40 20 20 20 20 3b 70 6c 6f 74 20 33 72 64 20 72 6f | ;plot 3rd ro| 00001b50 77 0d 09 d8 1d 20 41 44 44 20 20 20 20 20 20 30 |w.... ADD 0| 00001b60 2c 20 30 2c 20 23 68 61 64 64 25 2d 31 32 0d 09 |, 0, #hadd%-12..| 00001b70 e2 16 20 53 55 42 53 20 20 20 20 20 32 2c 20 32 |.. SUBS 2, 2| 00001b80 2c 20 23 31 0d 09 ec 44 20 42 4e 45 20 20 20 20 |, #1...D BNE | 00001b90 20 20 6c 6f 6f 70 31 25 20 20 20 20 20 20 20 20 | loop1% | 00001ba0 20 20 3b 72 65 70 65 61 74 20 61 62 6f 76 65 20 | ;repeat above | 00001bb0 33 20 74 69 6d 65 73 20 74 6f 20 64 6f 20 61 6c |3 times to do al| 00001bc0 6c 20 39 20 72 6f 77 73 0d 09 f6 44 20 41 44 52 |l 9 rows...D ADR| 00001bd0 20 20 20 20 20 20 31 31 2c 20 61 70 6c 6f 74 72 | 11, aplotr| 00001be0 65 67 73 25 20 20 20 20 20 20 3b 70 6c 6f 74 20 |egs% ;plot | 00001bf0 63 6f 6d 70 6c 65 74 65 64 20 2d 20 72 65 74 75 |completed - retu| 00001c00 72 6e 20 74 6f 20 63 61 6c 6c 65 72 0d 0a 00 38 |rn to caller...8| 00001c10 20 4c 44 4d 49 41 20 20 20 20 31 31 2c 20 7b 31 | LDMIA 11, {1| 00001c20 32 2c 31 33 2c 50 43 7d 20 20 20 20 20 20 3b 70 |2,13,PC} ;p| 00001c30 72 65 73 65 72 76 69 6e 67 20 72 31 32 20 26 20 |reserving r12 & | 00001c40 72 31 33 2e 0d 0a 0a 06 20 3a 0d 0a 14 2f 20 2e |r13..... :.../ .| 00001c50 61 63 6f 6c 6c 72 65 67 73 25 20 20 20 20 45 51 |acollregs% EQ| 00001c60 55 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 |UD 0:EQUD 0:EQUD| 00001c70 20 30 3a 45 51 55 44 20 30 0d 0a 1e 36 20 20 20 | 0:EQUD 0...6 | 00001c80 20 20 20 20 20 20 20 20 20 20 20 20 20 45 51 55 | EQU| 00001c90 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 44 20 |D 0:EQUD 0:EQUD | 00001ca0 30 3a 45 51 55 44 20 30 3a 45 51 55 44 20 30 0d |0:EQUD 0:EQUD 0.| 00001cb0 0a 28 34 20 2e 6d 6f 76 65 6e 63 68 65 63 6b 25 |.(4 .movencheck%| 00001cc0 20 20 20 20 20 3b 6d 6f 76 65 20 74 68 65 6e 20 | ;move then | 00001cd0 63 6f 6c 6c 69 73 69 6f 6e 20 63 68 65 63 6b 20 |collision check | 00001ce0 6f 75 72 0d 0a 32 32 20 20 20 20 20 20 20 20 20 |our..22 | 00001cf0 20 20 20 20 20 20 20 20 20 3b 62 61 6c 6c 20 73 | ;ball s| 00001d00 70 72 69 74 65 20 61 74 20 63 6f 6f 72 64 73 20 |prite at coords | 00001d10 72 30 2c 72 31 0d 0a 3c 46 20 20 20 20 20 20 20 |r0,r1..<F | 00001d20 20 20 20 20 20 20 20 20 20 20 20 3b 77 68 65 72 | ;wher| 00001d30 65 20 30 2c 30 20 69 73 20 74 6f 70 20 6c 65 66 |e 0,0 is top lef| 00001d40 74 20 26 20 32 38 37 2c 31 39 39 20 69 73 20 62 |t & 287,199 is b| 00001d50 6f 74 74 6f 6d 20 72 69 67 68 74 0d 0a 46 40 20 |ottom right..F@ | 00001d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001d70 20 3b 4e 42 20 73 70 72 69 74 65 20 4d 55 53 54 | ;NB sprite MUST| 00001d80 20 6c 69 65 20 65 6e 74 69 72 65 6c 79 20 77 69 | lie entirely wi| 00001d90 74 68 69 6e 20 73 63 72 65 65 6e 0d 0a 50 1c 20 |thin screen..P. | 00001da0 41 44 52 20 20 20 20 20 20 31 31 2c 20 61 63 6f |ADR 11, aco| 00001db0 6c 6c 72 65 67 73 25 0d 0a 5a 15 20 41 44 44 20 |llregs%..Z. ADD | 00001dc0 20 20 20 20 20 30 2c 20 30 2c 20 32 0d 0a 64 15 | 0, 0, 2..d.| 00001dd0 20 41 44 44 20 20 20 20 20 20 31 2c 20 31 2c 20 | ADD 1, 1, | 00001de0 33 0d 0a 6e 20 20 53 54 4d 49 41 20 20 20 20 31 |3..n STMIA 1| 00001df0 31 2c 20 7b 30 2d 35 2c 31 32 2c 31 33 2c 31 34 |1, {0-5,12,13,14| 00001e00 7d 0d 0a 78 1a 20 4d 4f 56 20 20 20 20 20 20 30 |}..x. MOV 0| 00001e10 2c 20 30 2c 20 41 53 52 20 23 38 0d 0a 82 1a 20 |, 0, ASR #8.... | 00001e20 4d 4f 56 20 20 20 20 20 20 31 2c 20 31 2c 20 41 |MOV 1, 1, A| 00001e30 53 52 20 23 38 0d 0a 8c 42 20 80 20 20 20 20 20 |SR #8...B . | 00001e40 20 32 2c 20 30 2c 20 23 33 20 20 20 20 20 20 20 | 2, 0, #3 | 00001e50 20 20 20 20 20 3b 63 61 6c 63 20 77 68 69 63 68 | ;calc which| 00001e60 20 6f 66 20 34 20 73 70 72 69 74 65 20 61 6c 69 | of 4 sprite ali| 00001e70 67 6e 6d 65 6e 74 73 0d 0a 96 45 20 41 44 44 20 |gnments...E ADD | 00001e80 20 20 20 20 20 33 2c 20 32 2c 20 32 2c 20 41 53 | 3, 2, 2, AS| 00001e90 4c 20 23 31 20 20 20 20 20 3b 77 65 20 6e 65 65 |L #1 ;we nee| 00001ea0 64 20 76 69 61 20 28 78 41 4e 44 33 29 2a 31 32 |d via (xAND3)*12| 00001eb0 2a 32 2a 39 20 2b 20 64 61 74 61 25 0d 0a a0 1d |*2*9 + data%....| 00001ec0 20 41 44 44 20 20 20 20 20 20 33 2c 20 33 2c 20 | ADD 3, 3, | 00001ed0 33 2c 20 41 53 4c 20 23 33 0d 0a aa 3c 20 42 49 |3, ASL #3...< BI| 00001ee0 43 20 20 20 20 20 20 30 2c 20 30 2c 20 23 33 20 |C 0, 0, #3 | 00001ef0 20 20 20 20 20 20 20 20 20 20 20 3b 72 6f 75 6e | ;roun| 00001f00 64 20 78 20 64 6f 77 6e 20 74 6f 20 6d 75 6c 74 |d x down to mult| 00001f10 20 6f 66 20 33 0d 0a b4 1d 20 41 44 44 20 20 20 | of 3.... ADD | 00001f20 20 20 20 31 2c 20 31 2c 20 31 2c 20 41 53 4c 20 | 1, 1, 1, ASL | 00001f30 23 33 0d 0a be 1a 20 4c 44 52 20 20 20 20 20 20 |#3.... LDR | 00001f40 32 2c 20 61 6d 69 64 64 61 74 61 25 0d 0a c8 22 |2, amiddata%..."| 00001f50 20 41 44 44 20 20 20 20 20 20 32 2c 20 32 2c 20 | ADD 2, 2, | 00001f60 31 2c 20 41 53 4c 20 23 6c 68 70 69 78 25 0d 0a |1, ASL #lhpix%..| 00001f70 d2 45 20 41 44 44 20 20 20 20 20 20 30 2c 20 32 |.E ADD 0, 2| 00001f80 2c 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 |, 0 | 00001f90 3b 63 61 6c 63 20 28 62 61 63 6b 20 6d 61 73 6b |;calc (back mask| 00001fa0 20 70 74 72 20 2b 20 68 70 69 78 25 2a 79 20 2b | ptr + hpix%*y +| 00001fb0 20 78 29 0d 0a dc 17 20 4c 44 52 20 20 20 20 20 | x).... LDR | 00001fc0 20 31 2c 20 61 64 61 74 61 25 0d 0a e6 1d 20 52 | 1, adata%.... R| 00001fd0 53 42 20 20 20 20 20 20 32 2c 20 35 2c 20 35 2c |SB 2, 5, 5,| 00001fe0 20 41 53 4c 20 23 35 0d 0a f0 1d 20 53 55 42 20 | ASL #5.... SUB | 00001ff0 20 20 20 20 20 32 2c 20 32 2c 20 35 2c 20 41 53 | 2, 2, 5, AS| 00002000 4c 20 23 32 0d 0a fa 42 20 41 44 44 20 20 20 20 |L #2...B ADD | 00002010 20 20 31 2c 20 31 2c 20 32 2c 20 41 53 4c 20 23 | 1, 1, 2, ASL #| 00002020 35 20 20 20 20 20 3b 61 64 64 20 69 6e 20 74 6f |5 ;add in to| 00002030 20 64 61 74 61 20 70 74 72 20 38 36 34 2a 62 61 | data ptr 864*ba| 00002040 6c 6c 74 79 70 65 0d 0b 04 44 20 41 44 44 20 20 |lltype...D ADD | 00002050 20 20 20 20 31 2c 20 31 2c 20 33 2c 20 41 53 4c | 1, 1, 3, ASL| 00002060 20 23 33 20 20 20 20 20 3b 66 69 6e 61 6c 6c 79 | #3 ;finally| 00002070 20 63 61 6c 63 20 28 78 41 4e 44 33 29 2a 31 32 | calc (xAND3)*12| 00002080 2a 32 2a 39 2b 64 61 74 61 25 0d 0b 0e 19 20 41 |*2*9+data%.... A| 00002090 44 44 20 20 20 20 20 20 31 2c 20 31 2c 20 23 31 |DD 1, 1, #1| 000020a0 32 2a 39 0d 0b 18 43 20 41 44 52 20 20 20 20 20 |2*9...C ADR | 000020b0 20 32 2c 20 63 6f 6c 6c 61 64 64 72 62 75 66 25 | 2, colladdrbuf%| 000020c0 20 20 20 20 20 3b 73 74 6f 72 65 20 62 61 63 6b | ;store back| 000020d0 20 61 6e 64 20 73 70 72 69 74 65 20 64 61 74 61 | and sprite data| 000020e0 20 61 64 64 72 73 0d 0b 22 44 20 53 54 4d 49 41 | addrs.."D STMIA| 000020f0 20 20 20 20 32 2c 20 7b 30 2c 31 7d 20 20 20 20 | 2, {0,1} | 00002100 20 20 20 20 20 20 20 20 3b 63 6f 72 72 65 73 70 | ;corresp| 00002110 6f 6e 64 69 6e 67 20 74 6f 20 74 6f 70 20 6c 65 |onding to top le| 00002120 66 74 20 6f 66 20 62 61 6c 6c 0d 0b 2c 13 20 4d |ft of ball..,. M| 00002130 4f 56 20 20 20 20 20 20 32 2c 20 23 33 0d 0b 36 |OV 2, #3..6| 00002140 33 20 2e 63 6f 6c 6c 6c 6f 6f 70 31 25 20 20 20 |3 .collloop1% | 00002150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00002160 6e 6f 77 20 63 68 65 63 6b 20 73 70 72 69 74 65 |now check sprite| 00002170 0d 0b 40 44 20 a4 63 6f 6c 6c 66 72 61 67 28 70 |..@D .collfrag(p| 00002180 61 73 73 25 29 20 20 20 20 20 20 20 20 20 20 20 |ass%) | 00002190 20 3b 63 68 65 63 6b 20 31 73 74 20 72 6f 77 20 | ;check 1st row | 000021a0 28 69 66 20 63 6f 6c 6c 20 42 20 67 6f 74 63 6f |(if coll B gotco| 000021b0 6c 6c 25 29 0d 0b 4a 42 20 41 44 44 20 20 20 20 |ll%)..JB ADD | 000021c0 20 20 30 2c 20 30 2c 20 23 68 70 69 78 25 2d 31 | 0, 0, #hpix%-1| 000021d0 32 20 20 20 20 20 3b 6d 6f 76 65 20 62 61 63 6b |2 ;move back| 000021e0 20 70 74 72 20 74 6f 20 73 74 61 72 74 20 6e 65 | ptr to start ne| 000021f0 78 74 20 72 6f 77 0d 0b 54 15 20 a4 63 6f 6c 6c |xt row..T. .coll| 00002200 66 72 61 67 28 70 61 73 73 25 29 0d 0b 5e 1d 20 |frag(pass%)..^. | 00002210 41 44 44 20 20 20 20 20 20 30 2c 20 30 2c 20 23 |ADD 0, 0, #| 00002220 68 70 69 78 25 2d 31 32 0d 0b 68 2f 20 a4 63 6f |hpix%-12..h/ .co| 00002230 6c 6c 66 72 61 67 28 70 61 73 73 25 29 20 20 20 |llfrag(pass%) | 00002240 20 20 20 20 20 20 20 20 20 3b 63 68 65 63 6b 20 | ;check | 00002250 34 74 68 20 72 6f 77 0d 0b 72 1d 20 41 44 44 20 |4th row..r. ADD | 00002260 20 20 20 20 20 30 2c 20 30 2c 20 23 68 70 69 78 | 0, 0, #hpix| 00002270 25 2d 31 32 0d 0b 7c 16 20 53 55 42 53 20 20 20 |%-12..|. SUBS | 00002280 20 20 32 2c 20 32 2c 20 23 31 0d 0b 86 44 20 42 | 2, 2, #1...D B| 00002290 4e 45 20 20 20 20 20 20 63 6f 6c 6c 6c 6f 6f 70 |NE collloop| 000022a0 31 25 20 20 20 20 20 20 3b 72 65 70 65 61 74 20 |1% ;repeat | 000022b0 61 62 6f 76 65 20 33 20 74 69 6d 65 73 20 74 6f |above 3 times to| 000022c0 20 64 6f 20 61 6c 6c 20 39 20 72 6f 77 73 0d 0b | do all 9 rows..| 000022d0 90 1c 20 41 44 52 20 20 20 20 20 20 31 31 2c 20 |.. ADR 11, | 000022e0 61 63 6f 6c 6c 72 65 67 73 25 0d 0b 9a 20 20 4c |acollregs%... L| 000022f0 44 4d 49 41 20 20 20 20 31 31 2c 20 7b 30 2d 35 |DMIA 11, {0-5| 00002300 2c 31 32 2c 31 33 2c 31 34 7d 0d 0b a4 3d 20 41 |,12,13,14}...= A| 00002310 44 44 20 20 20 20 20 20 33 2c 20 33 2c 20 23 38 |DD 3, 3, #8| 00002320 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 61 63 | ; ac| 00002330 63 65 6c 65 72 61 74 65 20 62 61 6c 6c 20 64 6f |celerate ball do| 00002340 77 6e 77 61 72 64 73 0d 0b ae 13 20 4d 4f 56 20 |wnwards.... MOV | 00002350 20 20 20 20 20 34 2c 20 23 30 0d 0b b8 14 20 4d | 4, #0.... M| 00002360 4f 56 20 20 20 20 20 20 50 43 2c 20 31 34 0d 0b |OV PC, 14..| 00002370 c2 25 20 2e 63 6f 6c 6c 61 64 64 72 62 75 66 25 |.% .colladdrbuf%| 00002380 20 20 20 20 20 20 45 51 55 44 20 30 3a 45 51 55 | EQUD 0:EQU| 00002390 44 20 30 0d 0b cc 0e 20 2e 67 6f 74 63 6f 6c 6c |D 0.... .gotcoll| 000023a0 25 0d 0b d6 1c 20 41 44 52 20 20 20 20 20 20 31 |%.... ADR 1| 000023b0 31 2c 20 61 63 6f 6c 6c 72 65 67 73 25 0d 0b e0 |1, acollregs%...| 000023c0 17 20 4c 44 4d 49 41 20 20 20 20 31 31 2c 20 7b |. LDMIA 11, {| 000023d0 30 2d 33 7d 0d 0b ea 43 20 53 55 42 20 20 20 20 |0-3}...C SUB | 000023e0 20 20 30 2c 20 30 2c 20 32 20 20 20 20 20 20 20 | 0, 0, 2 | 000023f0 20 20 20 20 20 20 3b 72 65 73 65 74 20 70 6f 73 | ;reset pos| 00002400 69 74 69 6f 6e 2c 20 6d 6f 76 69 6e 67 20 69 74 |ition, moving it| 00002410 20 6f 75 74 20 6f 66 0d 0b f4 2c 20 53 55 42 20 | out of..., SUB | 00002420 20 20 20 20 20 31 2c 20 31 2c 20 33 20 20 20 20 | 1, 1, 3 | 00002430 20 20 20 20 20 20 20 20 20 3b 63 6f 6c 6c 69 73 | ;collis| 00002440 69 6f 6e 0d 0b fe 17 20 53 54 4d 49 41 20 20 20 |ion.... STMIA | 00002450 20 31 31 2c 20 7b 30 2c 31 7d 0d 0c 08 39 20 4d | 11, {0,1}...9 M| 00002460 4f 56 20 20 20 20 20 20 36 2c 20 23 30 20 20 20 |OV 6, #0 | 00002470 20 20 20 20 20 20 20 20 20 20 20 20 3b 69 6e 20 | ;in | 00002480 6d 79 20 6c 69 6e 20 72 65 67 20 6e 6f 74 65 73 |my lin reg notes| 00002490 2c 20 6e 0d 0c 12 39 20 4d 4f 56 20 20 20 20 20 |, n...9 MOV | 000024a0 20 37 2c 20 23 30 20 20 20 20 20 20 20 20 20 20 | 7, #0 | 000024b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000024c0 20 20 20 20 20 20 20 20 20 3b 20 75 0d 0c 1c 39 | ; u...9| 000024d0 20 4d 4f 56 20 20 20 20 20 20 38 2c 20 23 30 20 | MOV 8, #0 | 000024e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 00002500 20 20 3b 20 76 0d 0c 26 39 20 4d 4f 56 20 20 20 | ; v..&9 MOV | 00002510 20 20 20 39 2c 20 23 30 20 20 20 20 20 20 20 20 | 9, #0 | 00002520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002530 20 20 20 20 20 20 20 20 20 20 20 3b 20 70 0d 0c | ; p..| 00002540 30 39 20 4d 4f 56 20 20 20 20 20 20 31 30 2c 20 |09 MOV 10, | 00002550 23 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |#0 | 00002560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002570 20 20 20 20 3b 20 71 0d 0c 3a 1d 20 41 44 52 20 | ; q..:. ADR | 00002580 20 20 20 20 20 32 2c 20 63 6f 6c 6c 61 64 64 72 | 2, colladdr| 00002590 62 75 66 25 0d 0c 44 43 20 4c 44 4d 49 41 20 20 |buf%..DC LDMIA | 000025a0 20 20 32 2c 20 7b 30 2c 31 7d 20 20 20 20 20 20 | 2, {0,1} | 000025b0 20 20 20 20 20 20 3b 72 65 63 61 6c 6c 20 73 63 | ;recall sc| 000025c0 72 65 65 6e 2f 64 61 74 61 20 61 64 64 72 73 20 |reen/data addrs | 000025d0 66 6f 72 20 74 6f 70 0d 0c 4e 31 20 4d 4f 56 20 |for top..N1 MOV | 000025e0 20 20 20 20 20 33 2c 20 23 30 20 20 20 20 20 3b | 3, #0 ;| 000025f0 72 6f 77 20 30 20 20 20 20 3b 6c 65 66 74 20 6f |row 0 ;left o| 00002600 66 20 73 70 72 69 74 65 0d 0c 58 10 20 2e 73 74 |f sprite..X. .st| 00002610 61 74 6c 6f 6f 70 31 25 0d 0c 62 1e 20 4d 4f 56 |atloop1%..b. MOV| 00002620 20 20 20 20 20 20 32 2c 20 23 30 20 20 20 20 20 | 2, #0 | 00002630 3b 63 6f 6c 20 30 0d 0c 6c 10 20 2e 73 74 61 74 |;col 0..l. .stat| 00002640 6c 6f 6f 70 32 25 0d 0c 76 46 20 4c 44 52 20 20 |loop2%..vF LDR | 00002650 20 20 20 20 34 2c 20 5b 30 5d 2c 20 23 34 20 20 | 4, [0], #4 | 00002660 20 20 20 20 20 20 20 20 3b 72 65 73 63 61 6e 20 | ;rescan | 00002670 65 61 63 68 20 70 69 78 65 6c 20 69 6e 20 63 6f |each pixel in co| 00002680 6c 6c 69 73 69 6f 6e 20 61 72 65 61 0d 0c 80 46 |llision area...F| 00002690 20 4c 44 52 20 20 20 20 20 20 35 2c 20 5b 31 5d | LDR 5, [1]| 000026a0 2c 20 23 34 20 20 20 20 20 20 20 20 20 20 3b 61 |, #4 ;a| 000026b0 6e 64 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 6c |nd for each coll| 000026c0 69 64 65 64 20 70 69 78 65 6c 20 61 64 64 20 69 |ided pixel add i| 000026d0 74 73 0d 0c 8a 44 20 80 20 20 20 20 20 20 34 2c |ts...D . 4,| 000026e0 20 34 2c 20 35 20 20 20 20 20 20 20 20 20 20 20 | 4, 5 | 000026f0 20 20 3b 63 6f 6f 72 64 73 20 28 72 65 6c 61 74 | ;coords (relat| 00002700 69 76 65 20 74 6f 20 74 6f 70 6c 65 66 74 20 73 |ive to topleft s| 00002710 70 72 69 74 65 29 0d 0c 94 40 20 a4 73 74 61 74 |prite)...@ .stat| 00002720 66 72 61 67 28 70 61 73 73 25 2c 20 32 35 35 29 |frag(pass%, 255)| 00002730 20 20 20 20 20 20 20 3b 6f 6e 74 6f 20 74 68 65 | ;onto the| 00002740 20 72 65 67 72 65 73 73 69 6f 6e 20 73 74 61 74 | regression stat| 00002750 69 73 74 69 63 73 0d 0c 9e 16 20 41 44 44 20 20 |istics.... ADD | 00002760 20 20 20 20 32 2c 20 32 2c 20 23 31 0d 0c a8 1d | 2, 2, #1....| 00002770 20 a4 73 74 61 74 66 72 61 67 28 70 61 73 73 25 | .statfrag(pass%| 00002780 2c 20 32 35 35 3c 3c 38 29 0d 0c b2 16 20 41 44 |, 255<<8).... AD| 00002790 44 20 20 20 20 20 20 32 2c 20 32 2c 20 23 31 0d |D 2, 2, #1.| 000027a0 0c bc 1e 20 a4 73 74 61 74 66 72 61 67 28 70 61 |... .statfrag(pa| 000027b0 73 73 25 2c 20 32 35 35 3c 3c 31 36 29 0d 0c c6 |ss%, 255<<16)...| 000027c0 16 20 41 44 44 20 20 20 20 20 20 32 2c 20 32 2c |. ADD 2, 2,| 000027d0 20 23 31 0d 0c d0 1e 20 a4 73 74 61 74 66 72 61 | #1.... .statfra| 000027e0 67 28 70 61 73 73 25 2c 20 32 35 35 3c 3c 32 34 |g(pass%, 255<<24| 000027f0 29 0d 0c da 16 20 41 44 44 20 20 20 20 20 20 32 |).... ADD 2| 00002800 2c 20 32 2c 20 23 31 0d 0c e4 14 20 43 4d 50 20 |, 2, #1.... CMP | 00002810 20 20 20 20 20 32 2c 20 23 31 32 0d 0c ee 18 20 | 2, #12.... | 00002820 42 4c 54 20 20 20 20 20 20 73 74 61 74 6c 6f 6f |BLT statloo| 00002830 70 32 25 0d 0c f8 1d 20 41 44 44 20 20 20 20 20 |p2%.... ADD | 00002840 20 30 2c 20 30 2c 20 23 68 70 69 78 25 2d 31 32 | 0, 0, #hpix%-12| 00002850 0d 0d 02 16 20 41 44 44 20 20 20 20 20 20 33 2c |.... ADD 3,| 00002860 20 33 2c 20 23 31 0d 0d 0c 13 20 43 4d 50 20 20 | 3, #1.... CMP | 00002870 20 20 20 20 33 2c 20 23 39 0d 0d 16 3f 20 42 4c | 3, #9...? BL| 00002880 54 20 20 20 20 20 20 73 74 61 74 6c 6f 6f 70 31 |T statloop1| 00002890 25 20 20 20 20 20 20 20 20 20 20 3b 77 68 65 6e |% ;when| 000028a0 20 64 6f 6e 65 2c 20 6e 2c 20 75 20 26 20 76 20 | done, n, u & v | 000028b0 63 6f 6d 70 75 74 65 64 0d 0d 20 15 20 4d 55 4c |computed.. . MUL| 000028c0 20 20 20 20 20 20 39 2c 20 36 2c 20 39 0d 0d 2a | 9, 6, 9..*| 000028d0 15 20 41 44 44 20 20 20 20 20 20 35 2c 20 37 2c |. ADD 5, 7,| 000028e0 20 38 0d 0d 34 16 20 53 55 42 20 20 20 20 20 20 | 8..4. SUB | 000028f0 31 34 2c 20 37 2c 20 38 0d 0d 3e 2d 20 4d 4c 41 |14, 7, 8..>- MLA| 00002900 20 20 20 20 20 20 39 2c 20 35 2c 20 31 34 2c 20 | 9, 5, 14, | 00002910 39 20 20 20 20 20 20 20 20 20 3b 70 20 63 6f 6d |9 ;p com| 00002920 70 75 74 65 64 0d 0d 48 17 20 4d 55 4c 20 20 20 |puted..H. MUL | 00002930 20 20 20 31 30 2c 20 36 2c 20 31 30 0d 0d 52 16 | 10, 6, 10..R.| 00002940 20 4d 55 4c 20 20 20 20 20 20 31 34 2c 20 37 2c | MUL 14, 7,| 00002950 20 38 0d 0d 5c 18 20 53 55 42 20 20 20 20 20 20 | 8..\. SUB | 00002960 31 30 2c 20 31 30 2c 20 31 34 0d 0d 66 2d 20 41 |10, 10, 14..f- A| 00002970 44 44 20 20 20 20 20 20 31 30 2c 20 31 30 2c 20 |DD 10, 10, | 00002980 31 30 20 20 20 20 20 20 20 20 20 20 3b 71 20 63 |10 ;q c| 00002990 6f 6d 70 75 74 65 64 0d 0d 70 12 20 4d 4f 56 53 |omputed..p. MOVS| 000029a0 20 20 20 20 20 36 2c 20 39 0d 0d 7a 2d 20 52 53 | 6, 9..z- RS| 000029b0 42 4d 49 20 20 20 20 36 2c 20 36 2c 20 23 30 20 |BMI 6, 6, #0 | 000029c0 20 20 20 20 20 20 20 20 20 20 20 3b 61 70 20 3d | ;ap =| 000029d0 20 61 62 73 20 70 0d 0d 84 13 20 4d 4f 56 53 20 | abs p.... MOVS | 000029e0 20 20 20 20 37 2c 20 31 30 0d 0d 8e 2d 20 52 53 | 7, 10...- RS| 000029f0 42 4d 49 20 20 20 20 37 2c 20 37 2c 20 23 30 20 |BMI 7, 7, #0 | 00002a00 20 20 20 20 20 20 20 20 20 20 20 3b 61 71 20 3d | ;aq =| 00002a10 20 61 62 73 20 71 0d 0d 98 12 20 43 4d 50 20 20 | abs q.... CMP | 00002a20 20 20 20 20 36 2c 20 37 0d 0d a2 12 20 4d 4f 56 | 6, 7.... MOV| 00002a30 20 20 20 20 20 20 38 2c 20 36 0d 0d ac 33 20 4d | 8, 6...3 M| 00002a40 4f 56 4c 54 20 20 20 20 38 2c 20 37 20 20 20 20 |OVLT 8, 7 | 00002a50 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 6d 20 | ; m | 00002a60 3d 20 6d 61 78 20 7b 61 70 2c 61 71 7d 0d 0d b6 |= max {ap,aq}...| 00002a70 3f 20 43 4d 50 20 20 20 20 20 20 38 2c 20 23 30 |? CMP 8, #0| 00002a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00002a90 69 66 20 68 61 76 65 20 64 65 67 65 6e 65 72 61 |if have degenera| 00002aa0 74 65 20 63 6f 6c 6c 69 73 69 6f 6e 0d 0d c0 45 |te collision...E| 00002ab0 20 42 45 51 20 20 20 20 20 20 70 61 74 63 68 31 | BEQ patch1| 00002ac0 25 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 28 |% ;(| 00002ad0 65 67 20 77 69 74 68 20 73 69 6e 67 6c 65 20 70 |eg with single p| 00002ae0 69 78 65 6c 29 2c 20 63 61 6e 27 74 20 63 61 6c |ixel), can't cal| 00002af0 63 0d 0d ca 45 20 2e 73 74 61 74 6c 6f 6f 70 33 |c...E .statloop3| 00002b00 25 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |% | 00002b10 20 20 20 3b 61 20 6c 69 6e 65 61 72 20 72 65 67 | ;a linear reg| 00002b20 72 65 73 73 69 6f 6e 2c 20 73 6f 20 67 6f 20 70 |ression, so go p| 00002b30 61 74 63 68 31 25 0d 0d d4 44 20 43 4d 50 20 20 |atch1%...D CMP | 00002b40 20 20 20 20 38 2c 20 23 31 3c 3c 31 32 20 20 20 | 8, #1<<12 | 00002b50 20 20 20 20 20 20 20 20 3b 77 68 69 63 68 20 73 | ;which s| 00002b60 69 6d 70 6c 79 20 72 65 76 65 72 73 65 73 20 76 |imply reverses v| 00002b70 65 6c 6f 63 69 74 69 65 73 21 0d 0d de 1a 20 4d |elocities!.... M| 00002b80 4f 56 47 45 20 20 20 20 38 2c 20 38 2c 20 41 53 |OVGE 8, 8, AS| 00002b90 52 20 23 31 0d 0d e8 46 20 4d 4f 56 47 45 20 20 |R #1...F MOVGE | 00002ba0 20 20 36 2c 20 36 2c 20 41 53 52 20 23 31 20 20 | 6, 6, ASR #1 | 00002bb0 20 20 20 20 20 20 3b 70 72 6f 70 6f 72 74 69 6f | ;proportio| 00002bc0 6e 61 74 65 6c 79 20 72 65 64 75 63 65 20 61 70 |nately reduce ap| 00002bd0 20 61 6e 64 20 61 71 20 69 6e 0d 0d f2 46 20 4d | and aq in...F M| 00002be0 4f 56 47 45 20 20 20 20 37 2c 20 37 2c 20 41 53 |OVGE 7, 7, AS| 00002bf0 52 20 23 31 20 20 20 20 20 20 20 20 3b 6d 61 67 |R #1 ;mag| 00002c00 6e 69 74 75 64 65 2c 20 75 6e 74 69 6c 20 69 6e |nitude, until in| 00002c10 20 6e 65 63 65 73 73 61 72 79 20 72 61 6e 67 65 | necessary range| 00002c20 0d 0d fc 18 20 42 47 45 20 20 20 20 20 20 73 74 |.... BGE st| 00002c30 61 74 6c 6f 6f 70 33 25 0d 0e 06 34 20 4d 55 4c |atloop3%...4 MUL| 00002c40 20 20 20 20 20 20 31 31 2c 20 36 2c 20 36 20 20 | 11, 6, 6 | 00002c50 20 20 20 20 20 20 20 20 20 20 3b 61 70 5e 32 20 | ;ap^2 | 00002c60 69 6e 20 6c 6f 77 20 72 61 6e 67 65 0d 0e 10 34 |in low range...4| 00002c70 20 4d 55 4c 20 20 20 20 20 20 31 32 2c 20 37 2c | MUL 12, 7,| 00002c80 20 37 20 20 20 20 20 20 20 20 20 20 20 20 3b 61 | 7 ;a| 00002c90 71 5e 32 20 69 6e 20 6c 6f 77 20 72 61 6e 67 65 |q^2 in low range| 00002ca0 0d 0e 1a 34 20 41 44 44 20 20 20 20 20 20 31 33 |...4 ADD 13| 00002cb0 2c 20 31 31 2c 20 31 32 20 20 20 20 20 20 20 20 |, 11, 12 | 00002cc0 20 20 3b 64 69 76 69 73 6f 72 20 61 70 5e 32 2b | ;divisor ap^2+| 00002cd0 61 71 5e 32 0d 0e 24 1b 20 4d 4f 56 20 20 20 20 |aq^2..$. MOV | 00002ce0 20 20 30 2c 20 31 31 2c 20 41 53 4c 20 23 38 0d | 0, 11, ASL #8.| 00002cf0 0e 2e 41 20 a4 64 69 76 28 70 61 73 73 25 2c 20 |..A .div(pass%, | 00002d00 30 2c 20 31 33 2c 20 31 31 2c 20 31 29 20 20 20 |0, 13, 11, 1) | 00002d10 3b 74 20 20 69 6e 20 72 31 31 20 3d 20 32 35 36 |;t in r11 = 256| 00002d20 61 70 5e 32 2f 28 61 70 5e 32 2b 61 71 5e 32 29 |ap^2/(ap^2+aq^2)| 00002d30 0d 0e 38 1b 20 4d 4f 56 20 20 20 20 20 20 30 2c |..8. MOV 0,| 00002d40 20 31 32 2c 20 41 53 4c 20 23 38 0d 0e 42 41 20 | 12, ASL #8..BA | 00002d50 a4 64 69 76 28 70 61 73 73 25 2c 20 30 2c 20 31 |.div(pass%, 0, 1| 00002d60 33 2c 20 31 32 2c 20 31 29 20 20 20 3b 74 62 20 |3, 12, 1) ;tb | 00002d70 69 6e 20 72 31 32 20 3d 20 32 35 36 61 71 5e 32 |in r12 = 256aq^2| 00002d80 2f 28 61 70 5e 32 2b 61 71 5e 32 29 0d 0e 4c 18 |/(ap^2+aq^2)..L.| 00002d90 20 4c 44 52 20 20 20 20 20 20 31 33 2c 20 61 73 | LDR 13, as| 00002da0 71 72 74 25 0d 0e 56 30 20 4c 44 52 20 20 20 20 |qrt%..V0 LDR | 00002db0 20 20 37 2c 20 5b 31 33 2c 20 31 31 2c 20 4c 53 | 7, [13, 11, LS| 00002dc0 4c 20 23 32 5d 20 3b 73 71 75 61 72 65 20 72 6f |L #2] ;square ro| 00002dd0 6f 74 20 74 0d 0e 60 3c 20 4c 44 52 20 20 20 20 |ot t..`< LDR | 00002de0 20 20 38 2c 20 5b 31 33 2c 20 31 32 2c 20 4c 53 | 8, [13, 12, LS| 00002df0 4c 20 23 32 5d 20 3b 61 6e 64 20 74 62 2c 20 76 |L #2] ;and tb, v| 00002e00 69 61 20 6c 6f 6f 6b 2d 75 70 2d 74 61 62 6c 65 |ia look-up-table| 00002e10 0d 0e 6a 13 20 43 4d 50 20 20 20 20 20 20 39 2c |..j. CMP 9,| 00002e20 20 23 30 0d 0e 74 31 20 52 53 42 4c 54 20 20 20 | #0..t1 RSBLT | 00002e30 20 37 2c 20 37 2c 20 23 30 20 20 20 20 20 20 20 | 7, 7, #0 | 00002e40 20 20 20 20 20 3b 66 69 6e 61 6c 20 74 20 20 69 | ;final t i| 00002e50 6e 20 72 37 0d 0e 7e 14 20 43 4d 50 20 20 20 20 |n r7..~. CMP | 00002e60 20 20 31 30 2c 20 23 30 0d 0e 88 31 20 52 53 42 | 10, #0...1 RSB| 00002e70 50 4c 20 20 20 20 38 2c 20 38 2c 20 23 30 20 20 |PL 8, 8, #0 | 00002e80 20 20 20 20 20 20 20 20 20 20 3b 66 69 6e 61 6c | ;final| 00002e90 20 74 62 20 69 6e 20 72 38 0d 0e 92 1c 20 41 44 | tb in r8.... AD| 00002ea0 52 20 20 20 20 20 20 31 31 2c 20 61 63 6f 6c 6c |R 11, acoll| 00002eb0 72 65 67 73 25 0d 0e 9c 20 20 4c 44 4d 49 41 20 |regs%... LDMIA | 00002ec0 20 20 20 31 31 2c 20 7b 30 2d 35 2c 31 32 2c 31 | 11, {0-5,12,1| 00002ed0 33 2c 31 34 7d 0d 0e a6 39 20 4d 55 4c 20 20 20 |3,14}...9 MUL | 00002ee0 20 20 20 31 31 2c 20 37 2c 20 32 20 20 20 20 20 | 11, 7, 2 | 00002ef0 20 20 20 20 20 20 20 3b 6e 6f 77 20 6d 6f 64 69 | ;now modi| 00002f00 66 79 20 76 65 6c 6f 63 69 74 79 20 62 79 0d 0e |fy velocity by..| 00002f10 b0 37 20 4d 4c 41 20 20 20 20 20 20 31 31 2c 20 |.7 MLA 11, | 00002f20 38 2c 20 33 2c 20 31 31 20 20 20 20 20 20 20 20 |8, 3, 11 | 00002f30 3b 72 65 66 6c 65 63 74 69 6e 67 20 69 74 20 69 |;reflecting it i| 00002f40 6e 20 74 68 65 0d 0e ba 3f 20 52 53 42 20 20 20 |n the...? RSB | 00002f50 20 20 20 31 31 2c 20 31 31 2c 20 23 30 20 20 20 | 11, 11, #0 | 00002f60 20 20 20 20 20 20 20 3b 6c 69 6e 65 20 67 65 6e | ;line gen| 00002f70 65 72 61 74 65 64 20 62 79 20 74 68 65 20 6c 69 |erated by the li| 00002f80 6e 65 61 72 0d 0e c4 39 20 4d 55 4c 20 20 20 20 |near...9 MUL | 00002f90 20 20 36 2c 20 37 2c 20 33 20 20 20 20 20 20 20 | 6, 7, 3 | 00002fa0 20 20 20 20 20 20 3b 72 65 67 72 65 73 73 69 6f | ;regressio| 00002fb0 6e 20 63 61 6c 63 75 6c 61 74 69 6f 6e 0d 0e ce |n calculation...| 00002fc0 43 20 4d 55 4c 20 20 20 20 20 20 39 2c 20 38 2c |C MUL 9, 8,| 00002fd0 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | 2 ;| 00002fe0 28 77 68 69 63 68 20 77 65 20 75 73 65 20 74 6f |(which we use to| 00002ff0 20 61 70 70 72 6f 78 69 6d 61 74 65 20 74 68 65 | approximate the| 00003000 0d 0e d8 45 20 53 55 42 20 20 20 20 20 20 36 2c |...E SUB 6,| 00003010 20 36 2c 20 39 20 20 20 20 20 20 20 20 20 20 20 | 6, 9 | 00003020 20 20 3b 20 74 61 6e 67 65 6e 74 20 61 74 20 74 | ; tangent at t| 00003030 68 65 20 63 6f 6c 6c 69 73 69 6f 6e 20 73 75 72 |he collision sur| 00003040 66 61 63 65 29 0d 0e e2 20 20 52 53 42 20 20 20 |face)... RSB | 00003050 20 20 20 31 31 2c 20 31 31 2c 20 31 31 2c 20 41 | 11, 11, 11, A| 00003060 53 4c 20 23 38 0d 0e ec 45 20 52 53 42 20 20 20 |SL #8...E RSB | 00003070 20 20 20 36 2c 20 36 2c 20 36 2c 20 41 53 4c 20 | 6, 6, 6, ASL | 00003080 23 38 20 20 20 20 20 3b 26 20 74 68 65 6e 20 61 |#8 ;& then a| 00003090 74 74 65 6e 75 61 74 65 20 62 79 20 66 61 63 74 |ttenuate by fact| 000030a0 6f 72 20 32 35 35 2f 32 35 36 0d 0e f6 41 20 4d |or 255/256...A M| 000030b0 4f 56 20 20 20 20 20 20 32 2c 20 31 31 2c 20 41 |OV 2, 11, A| 000030c0 53 52 20 23 31 36 20 20 20 20 20 20 3b 28 73 69 |SR #16 ;(si| 000030d0 6d 75 6c 61 74 65 20 65 6e 65 72 67 79 20 6c 6f |mulate energy lo| 000030e0 73 73 20 6f 6e 20 63 6f 6c 6c 29 0d 0f 00 1b 20 |ss on coll).... | 000030f0 4d 4f 56 20 20 20 20 20 20 33 2c 20 36 2c 20 41 |MOV 3, 6, A| 00003100 53 52 20 23 31 36 0d 0f 0a 44 20 41 44 44 20 20 |SR #16...D ADD | 00003110 20 20 20 20 34 2c 20 34 2c 20 23 31 20 20 20 20 | 4, 4, #1 | 00003120 20 20 20 20 20 20 20 20 3b 74 72 61 63 6b 20 68 | ;track h| 00003130 6f 77 20 6d 61 6e 79 20 63 6f 6e 73 65 63 75 74 |ow many consecut| 00003140 69 76 65 20 66 72 61 6d 65 73 0d 0f 14 40 20 3a |ive frames...@ :| 00003150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003160 20 20 20 20 20 20 20 20 20 20 20 20 3b 74 68 69 | ;thi| 00003170 73 20 62 61 6c 6c 20 68 61 73 20 62 65 65 6e 20 |s ball has been | 00003180 73 74 75 63 6b 20 69 6e 20 61 0d 0f 1e 45 20 43 |stuck in a...E C| 00003190 4d 50 20 20 20 20 20 20 34 2c 23 32 20 20 20 20 |MP 4,#2 | 000031a0 20 20 20 20 20 20 20 20 20 20 20 20 3b 63 6f 6c | ;col| 000031b0 6c 69 73 69 6f 6e 20 61 6e 64 20 69 66 20 32 20 |lision and if 2 | 000031c0 6f 72 20 6d 6f 72 65 2c 20 74 72 79 20 74 6f 0d |or more, try to.| 000031d0 0f 28 39 20 42 4c 54 20 20 20 20 20 20 6d 6f 76 |.(9 BLT mov| 000031e0 65 6e 63 68 65 63 6b 25 20 20 20 20 20 20 20 20 |encheck% | 000031f0 20 3b 65 73 63 61 70 65 20 69 74 20 76 69 61 20 | ;escape it via | 00003200 61 20 62 6f 64 67 65 3a 0d 0f 32 32 20 2e 62 6f |a bodge:..22 .bo| 00003210 64 67 65 31 25 20 20 20 20 20 20 20 20 20 20 20 |dge1% | 00003220 20 20 20 20 20 20 20 20 20 20 3b 62 6f 64 67 65 | ;bodge| 00003230 20 62 65 67 69 6e 20 2e 2e 2e 0d 0f 3c 16 20 41 | begin .....<. A| 00003240 44 52 20 20 20 20 20 20 37 2c 20 73 65 65 64 25 |DR 7, seed%| 00003250 0d 0f 46 18 20 4c 44 4d 49 41 20 20 20 20 37 2c |..F. LDMIA 7,| 00003260 20 7b 36 2c 20 31 31 7d 0d 0f 50 40 20 4d 4f 56 | {6, 11}..P@ MOV| 00003270 53 20 20 20 20 20 31 31 2c 20 31 31 2c 20 4c 53 |S 11, 11, LS| 00003280 52 20 23 31 20 20 20 20 20 20 3b 67 65 6e 65 72 |R #1 ;gener| 00003290 61 74 65 20 72 61 6e 64 6f 6d 20 33 32 2d 62 69 |ate random 32-bi| 000032a0 74 20 6e 75 6d 62 65 72 0d 0f 5a 17 20 4d 4f 56 |t number..Z. MOV| 000032b0 53 20 20 20 20 20 38 2c 20 36 2c 20 52 52 58 0d |S 8, 6, RRX.| 000032c0 0f 64 18 20 41 44 43 20 20 20 20 20 20 31 31 2c |.d. ADC 11,| 000032d0 20 31 31 2c 20 31 31 0d 0f 6e 1c 20 82 20 20 20 | 11, 11..n. . | 000032e0 20 20 20 38 2c 20 38 2c 20 36 2c 20 4c 53 4c 20 | 8, 8, 6, LSL | 000032f0 23 31 32 0d 0f 78 1c 20 82 20 20 20 20 20 20 36 |#12..x. . 6| 00003300 2c 20 38 2c 20 38 2c 20 4c 53 52 20 23 32 30 0d |, 8, 8, LSR #20.| 00003310 0f 82 18 20 53 54 4d 49 41 20 20 20 20 37 2c 20 |... STMIA 7, | 00003320 7b 36 2c 20 31 31 7d 0d 0f 8c 37 20 4c 44 52 20 |{6, 11}...7 LDR | 00003330 20 20 20 20 20 37 2c 20 61 73 69 6e 63 6f 73 25 | 7, asincos%| 00003340 20 20 20 20 20 20 20 20 20 3b 77 68 65 6e 20 62 | ;when b| 00003350 61 6c 6c 73 20 67 65 74 20 73 74 75 63 6b 0d 0f |alls get stuck..| 00003360 96 40 20 80 20 20 20 20 20 20 36 2c 20 36 2c 20 |.@ . 6, 6, | 00003370 23 32 35 35 20 20 20 20 20 20 20 20 20 20 3b 64 |#255 ;d| 00003380 75 65 20 74 6f 20 63 6f 6e 66 6c 69 63 74 20 62 |ue to conflict b| 00003390 65 74 77 65 65 6e 20 63 6f 72 72 65 63 74 0d 0f |etween correct..| 000033a0 a0 41 20 41 44 44 20 20 20 20 20 20 37 2c 20 37 |.A ADD 7, 7| 000033b0 2c 20 36 2c 20 41 53 4c 20 23 33 20 20 20 20 20 |, 6, ASL #3 | 000033c0 3b 72 65 66 6c 65 63 74 69 6f 6e 20 26 20 73 6d |;reflection & sm| 000033d0 61 6c 6c 20 76 65 6c 6f 63 69 74 79 20 6f 72 0d |all velocity or.| 000033e0 0f aa 3e 20 4c 44 4d 49 41 20 20 20 20 37 2c 20 |..> LDMIA 7, | 000033f0 7b 36 2c 20 31 31 7d 20 20 20 20 20 20 20 20 20 |{6, 11} | 00003400 20 3b 6a 61 67 67 65 64 20 6f 76 65 72 6c 61 70 | ;jagged overlap| 00003410 20 70 72 6f 62 6c 65 6d 73 20 2e 2e 2e 0d 0f b4 | problems ......| 00003420 15 20 4d 55 4c 20 20 20 20 20 20 37 2c 20 32 2c |. MUL 7, 2,| 00003430 20 36 0d 0f be 43 20 4d 4c 41 20 20 20 20 20 20 | 6...C MLA | 00003440 37 2c 20 33 2c 20 31 31 2c 20 37 20 20 20 20 20 |7, 3, 11, 7 | 00003450 20 20 20 20 3b 74 72 79 20 61 20 27 66 69 78 27 | ;try a 'fix'| 00003460 20 2d 20 72 6f 74 61 74 65 20 76 65 6c 6f 63 69 | - rotate veloci| 00003470 74 79 20 62 79 0d 0f c8 40 20 4d 55 4c 20 20 20 |ty by...@ MUL | 00003480 20 20 20 38 2c 20 32 2c 20 31 31 20 20 20 20 20 | 8, 2, 11 | 00003490 20 20 20 20 20 20 20 3b 61 20 72 61 6e 64 6f 6d | ;a random| 000034a0 20 61 6e 67 6c 65 2c 20 73 6f 20 65 76 65 6e 74 | angle, so event| 000034b0 75 61 6c 6c 79 0d 0f d2 41 20 4d 55 4c 20 20 20 |ually...A MUL | 000034c0 20 20 20 39 2c 20 33 2c 20 36 20 20 20 20 20 20 | 9, 3, 6 | 000034d0 20 20 20 20 20 20 20 3b 73 68 6f 75 6c 64 20 70 | ;should p| 000034e0 69 63 6b 20 73 6f 6d 65 20 76 65 6c 6f 63 69 74 |ick some velocit| 000034f0 79 20 74 68 61 74 0d 0f dc 46 20 53 55 42 20 20 |y that...F SUB | 00003500 20 20 20 20 38 2c 20 38 2c 20 39 20 20 20 20 20 | 8, 8, 9 | 00003510 20 20 20 20 20 20 20 20 3b 65 78 74 72 69 63 61 | ;extrica| 00003520 74 65 73 20 62 61 6c 6c 20 66 72 6f 6d 20 73 74 |tes ball from st| 00003530 75 63 6b 20 70 6f 73 69 74 69 6f 6e 0d 0f e6 1a |uck position....| 00003540 20 4d 4f 56 20 20 20 20 20 20 32 2c 20 37 2c 20 | MOV 2, 7, | 00003550 41 53 52 20 23 38 0d 0f f0 30 20 4d 4f 56 20 20 |ASR #8...0 MOV | 00003560 20 20 20 20 33 2c 20 38 2c 20 41 53 52 20 23 38 | 3, 8, ASR #8| 00003570 20 20 20 20 20 20 20 20 3b 2e 2e 2e 20 62 6f 64 | ;... bod| 00003580 67 65 20 65 6e 64 0d 0f fa 14 20 43 4d 50 20 20 |ge end.... CMP | 00003590 20 20 20 20 34 2c 20 23 31 36 0d 10 04 19 20 42 | 4, #16.... B| 000035a0 4c 54 20 20 20 20 20 20 6d 6f 76 65 6e 63 68 65 |LT movenche| 000035b0 63 6b 25 0d 10 0e 14 20 4d 4f 56 20 20 20 20 20 |ck%.... MOV | 000035c0 20 50 43 2c 20 31 34 0d 10 18 06 20 3a 0d 10 22 | PC, 14.... :.."| 000035d0 24 20 2e 61 73 69 6e 63 6f 73 25 20 20 20 20 20 |$ .asincos% | 000035e0 20 20 20 20 20 45 51 55 44 20 73 69 6e 63 6f 73 | EQUD sincos| 000035f0 25 0d 10 2c 1d 20 2e 73 65 65 64 25 20 20 20 45 |%..,. .seed% E| 00003600 51 55 44 20 2d 31 3a 45 51 55 44 20 2d 31 0d 10 |QUD -1:EQUD -1..| 00003610 36 46 20 2e 70 61 74 63 68 31 25 20 20 20 20 20 |6F .patch1% | 00003620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003630 3b 61 20 70 61 74 63 68 20 74 6f 20 64 65 61 6c |;a patch to deal| 00003640 20 77 69 74 68 20 63 6f 6c 6c 69 73 69 6f 6e 20 | with collision | 00003650 63 61 73 65 0d 10 40 44 20 41 44 52 20 20 20 20 |case..@D ADR | 00003660 20 20 31 31 2c 20 61 63 6f 6c 6c 72 65 67 73 25 | 11, acollregs%| 00003670 20 20 20 20 20 20 3b 77 68 65 72 65 20 6e 6f 20 | ;where no | 00003680 6c 69 6e 65 61 72 20 72 65 67 72 65 73 73 69 6f |linear regressio| 00003690 6e 20 65 78 69 73 74 73 0d 10 4a 44 20 4c 44 4d |n exists..JD LDM| 000036a0 49 41 20 20 20 20 31 31 2c 20 7b 30 2d 35 2c 31 |IA 11, {0-5,1| 000036b0 32 2c 31 33 2c 31 34 7d 20 20 3b 28 65 67 20 77 |2,13,14} ;(eg w| 000036c0 68 65 72 65 20 63 6f 6c 6c 69 73 69 6f 6e 20 69 |here collision i| 000036d0 6e 76 6f 6c 76 65 73 20 6f 6e 6c 79 0d 10 54 2e |nvolves only..T.| 000036e0 20 53 55 42 20 20 20 20 20 20 32 2c 20 32 2c 20 | SUB 2, 2, | 000036f0 32 2c 20 41 53 4c 20 23 38 20 20 20 20 20 3b 20 |2, ASL #8 ; | 00003700 6f 6e 65 20 70 69 78 65 6c 29 0d 10 5e 3d 20 53 |one pixel)..^= S| 00003710 55 42 20 20 20 20 20 20 33 2c 20 33 2c 20 33 2c |UB 3, 3, 3,| 00003720 20 41 53 4c 20 23 38 20 20 20 20 20 3b 2d 20 73 | ASL #8 ;- s| 00003730 69 6d 70 6c 79 20 72 65 76 65 72 73 65 20 76 65 |imply reverse ve| 00003740 6c 6f 63 69 74 79 21 0d 10 68 1a 20 4d 4f 56 20 |locity!..h. MOV | 00003750 20 20 20 20 20 32 2c 20 32 2c 20 41 53 52 20 23 | 2, 2, ASR #| 00003760 38 0d 10 72 46 20 4d 4f 56 20 20 20 20 20 20 33 |8..rF MOV 3| 00003770 2c 20 33 2c 20 41 53 52 20 23 38 20 20 20 20 20 |, 3, ASR #8 | 00003780 20 20 20 3b 6e 62 20 61 6c 73 6f 20 61 74 74 65 | ;nb also atte| 00003790 6e 75 61 74 65 20 62 79 20 66 61 63 74 6f 72 20 |nuate by factor | 000037a0 32 35 35 2f 32 35 36 0d 10 7c 41 20 41 44 44 20 |255/256..|A ADD | 000037b0 20 20 20 20 20 34 2c 20 34 2c 20 23 31 20 20 20 | 4, 4, #1 | 000037c0 20 20 20 20 20 20 20 20 20 3b 28 73 69 6d 75 6c | ;(simul| 000037d0 61 74 65 20 65 6e 65 72 67 79 20 6c 6f 73 73 20 |ate energy loss | 000037e0 6f 6e 20 63 6f 6c 6c 29 0d 10 86 12 20 43 4d 50 |on coll).... CMP| 000037f0 20 20 20 20 20 20 34 2c 23 32 0d 10 90 19 20 42 | 4,#2.... B| 00003800 4c 54 20 20 20 20 20 20 6d 6f 76 65 6e 63 68 65 |LT movenche| 00003810 63 6b 25 0d 10 9a 46 20 42 20 20 20 20 20 20 20 |ck%...F B | 00003820 20 62 6f 64 67 65 31 25 20 20 20 20 20 20 20 20 | bodge1% | 00003830 20 20 20 20 20 3b 69 66 20 62 65 65 6e 20 73 74 | ;if been st| 00003840 75 63 6b 20 69 6e 20 63 6f 6c 6c 69 73 69 6f 6e |uck in collision| 00003850 20 66 6f 72 20 3e 3d 20 32 0d 10 a4 46 20 3a 20 | for >= 2...F : | 00003860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003870 20 20 20 20 20 20 20 20 20 20 20 3b 66 72 61 6d | ;fram| 00003880 65 73 20 67 6f 20 61 6e 64 20 61 70 70 6c 79 20 |es go and apply | 00003890 62 6f 64 67 65 64 20 27 65 73 63 61 70 65 27 0d |bodged 'escape'.| 000038a0 10 ae 18 20 2e 61 73 71 72 74 25 20 20 45 51 55 |... .asqrt% EQU| 000038b0 44 20 73 71 72 74 25 0d 10 b8 14 20 2e 61 6c 72 |D sqrt%.... .alr| 000038c0 63 6c 73 25 20 45 51 55 44 20 30 0d 10 c2 14 20 |cls% EQUD 0.... | 000038d0 2e 61 73 70 63 6c 73 25 20 45 51 55 44 20 30 0d |.aspcls% EQUD 0.| 000038e0 10 cc 44 20 2e 63 6f 70 79 62 61 63 6b 25 20 20 |..D .copyback% | 000038f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003900 20 3b 73 69 6d 70 6c 65 20 72 6f 75 74 69 6e 65 | ;simple routine| 00003910 20 74 6f 20 63 6c 65 61 72 20 73 63 72 65 65 6e | to clear screen| 00003920 20 74 6f 0d 10 d6 46 20 53 54 52 20 20 20 20 20 | to...F STR | 00003930 20 31 34 2c 20 61 6c 72 63 6c 73 25 20 20 20 20 | 14, alrcls% | 00003940 20 20 20 20 20 3b 62 61 63 6b 67 72 6f 75 6e 64 | ;background| 00003950 20 61 73 20 72 61 70 69 64 6c 79 20 61 73 20 70 | as rapidly as p| 00003960 6f 73 73 69 62 6c 65 20 2d 0d 10 e0 41 20 53 54 |ossible -...A ST| 00003970 52 20 20 20 20 20 20 31 33 2c 20 61 73 70 63 6c |R 13, aspcl| 00003980 73 25 20 20 20 20 20 20 20 20 20 3b 6e 6f 74 65 |s% ;note| 00003990 20 74 68 65 20 68 65 61 76 79 20 75 73 65 20 6f | the heavy use o| 000039a0 66 20 4c 44 4d 2f 53 54 4d 2e 0d 10 ea 18 20 4c |f LDM/STM..... L| 000039b0 44 52 20 20 20 20 20 20 30 2c 20 61 73 63 72 73 |DR 0, ascrs| 000039c0 74 25 0d 10 f4 1b 20 4c 44 52 20 20 20 20 20 20 |t%.... LDR | 000039d0 31 2c 20 61 62 61 63 6b 64 61 74 61 25 0d 10 fe |1, abackdata%...| 000039e0 15 20 4d 4f 56 20 20 20 20 20 20 32 2c 20 23 32 |. MOV 2, #2| 000039f0 30 30 0d 11 08 0e 20 2e 63 6c 73 6c 6f 6f 70 25 |00.... .clsloop%| 00003a00 0d 11 12 18 20 4c 44 4d 49 41 20 20 20 20 31 21 |.... LDMIA 1!| 00003a10 2c 20 7b 33 2d 31 34 7d 0d 11 1c 18 20 53 54 4d |, {3-14}.... STM| 00003a20 49 41 20 20 20 20 30 21 2c 20 7b 33 2d 31 34 7d |IA 0!, {3-14}| 00003a30 0d 11 26 18 20 4c 44 4d 49 41 20 20 20 20 31 21 |..&. LDMIA 1!| 00003a40 2c 20 7b 33 2d 31 34 7d 0d 11 30 18 20 53 54 4d |, {3-14}..0. STM| 00003a50 49 41 20 20 20 20 30 21 2c 20 7b 33 2d 31 34 7d |IA 0!, {3-14}| 00003a60 0d 11 3a 18 20 4c 44 4d 49 41 20 20 20 20 31 21 |..:. LDMIA 1!| 00003a70 2c 20 7b 33 2d 31 34 7d 0d 11 44 18 20 53 54 4d |, {3-14}..D. STM| 00003a80 49 41 20 20 20 20 30 21 2c 20 7b 33 2d 31 34 7d |IA 0!, {3-14}| 00003a90 0d 11 4e 18 20 4c 44 4d 49 41 20 20 20 20 31 21 |..N. LDMIA 1!| 00003aa0 2c 20 7b 33 2d 31 34 7d 0d 11 58 18 20 53 54 4d |, {3-14}..X. STM| 00003ab0 49 41 20 20 20 20 30 21 2c 20 7b 33 2d 31 34 7d |IA 0!, {3-14}| 00003ac0 0d 11 62 18 20 4c 44 4d 49 41 20 20 20 20 31 21 |..b. LDMIA 1!| 00003ad0 2c 20 7b 33 2d 31 34 7d 0d 11 6c 18 20 53 54 4d |, {3-14}..l. STM| 00003ae0 49 41 20 20 20 20 30 21 2c 20 7b 33 2d 31 34 7d |IA 0!, {3-14}| 00003af0 0d 11 76 18 20 4c 44 4d 49 41 20 20 20 20 31 21 |..v. LDMIA 1!| 00003b00 2c 20 7b 33 2d 31 34 7d 0d 11 80 18 20 53 54 4d |, {3-14}.... STM| 00003b10 49 41 20 20 20 20 30 21 2c 20 7b 33 2d 31 34 7d |IA 0!, {3-14}| 00003b20 0d 11 8a 06 20 5d 0d 11 94 0d 20 e7 20 56 47 41 |.... ].... . VGA| 00003b30 25 20 8c 0d 11 9e 0f 20 5b 4f 50 54 20 70 61 73 |% ..... [OPT pas| 00003b40 73 25 0d 11 a8 20 20 41 44 44 20 20 20 20 20 20 |s%... ADD | 00003b50 30 2c 20 30 2c 20 23 68 61 64 64 25 2d 68 70 69 |0, 0, #hadd%-hpi| 00003b60 78 25 0d 11 b2 06 20 5d 0d 11 bc 06 20 cd 0d 11 |x%.... ].... ...| 00003b70 c6 0f 20 5b 4f 50 54 20 70 61 73 73 25 0d 11 d0 |.. [OPT pass%...| 00003b80 16 20 53 55 42 53 20 20 20 20 20 32 2c 20 32 2c |. SUBS 2, 2,| 00003b90 20 23 31 0d 11 da 16 20 42 4e 45 20 20 20 20 20 | #1.... BNE | 00003ba0 20 63 6c 73 6c 6f 6f 70 25 0d 11 e4 19 20 4c 44 | clsloop%.... LD| 00003bb0 52 20 20 20 20 20 20 31 33 2c 20 61 73 70 63 6c |R 13, aspcl| 00003bc0 73 25 0d 11 ee 19 20 4c 44 52 20 20 20 20 20 20 |s%.... LDR | 00003bd0 50 43 2c 20 61 6c 72 63 6c 73 25 0d 11 f8 06 20 |PC, alrcls%.... | 00003be0 5d 0d 12 02 05 ed 0d 12 0c 05 e1 0d 12 16 05 3a |]..............:| 00003bf0 0d 12 20 3c dd 20 a4 70 6c 6f 74 66 72 61 67 28 |.. <. .plotfrag(| 00003c00 70 61 73 73 25 29 20 20 20 20 3a f4 20 6d 61 63 |pass%) :. mac| 00003c10 72 6f 20 74 6f 20 70 6c 6f 74 20 61 20 72 6f 77 |ro to plot a row| 00003c20 20 28 31 32 20 70 69 78 65 6c 73 29 0d 12 2a 2d | (12 pixels)..*-| 00003c30 5b 4f 50 54 20 70 61 73 73 25 20 20 20 20 20 20 |[OPT pass% | 00003c40 20 20 20 20 20 20 20 20 20 3a f4 20 6f 66 20 6f | :. of o| 00003c50 75 72 20 73 70 72 69 74 65 0d 12 34 45 4c 44 4d |ur sprite..4ELDM| 00003c60 49 41 20 20 20 20 30 2c 20 7b 34 2d 36 7d 20 20 |IA 0, {4-6} | 00003c70 20 20 20 20 20 20 20 20 20 20 20 3b 72 65 61 64 | ;read| 00003c80 20 33 20 77 6f 72 64 73 20 6f 66 20 73 63 72 65 | 3 words of scre| 00003c90 65 6e 20 28 31 32 20 70 69 78 65 6c 73 29 0d 12 |en (12 pixels)..| 00003ca0 3e 38 4c 44 4d 49 41 20 20 20 20 31 21 2c 20 7b |>8LDMIA 1!, {| 00003cb0 37 2d 39 7d 20 20 20 20 20 20 20 20 20 20 20 20 |7-9} | 00003cc0 3b 72 65 61 64 20 31 32 20 73 70 72 69 74 65 20 |;read 12 sprite | 00003cd0 70 69 78 65 6c 73 0d 12 48 2d 4c 44 4d 49 41 20 |pixels..H-LDMIA | 00003ce0 20 20 20 33 21 2c 20 7b 31 30 2d 31 32 7d 20 20 | 3!, {10-12} | 00003cf0 20 20 20 20 20 20 20 20 3b 26 20 31 32 20 6d 61 | ;& 12 ma| 00003d00 73 6b 73 0d 12 52 40 42 49 43 20 20 20 20 20 20 |sks..R@BIC | 00003d10 34 2c 20 34 2c 20 31 30 20 20 20 20 20 20 20 20 |4, 4, 10 | 00003d20 20 20 20 20 20 3b 61 70 70 6c 79 20 6d 61 73 6b | ;apply mask| 00003d30 20 74 6f 20 73 63 72 65 65 6e 2c 20 7a 65 72 6f | to screen, zero| 00003d40 69 6e 67 0d 12 5c 3f 42 49 43 20 20 20 20 20 20 |ing..\?BIC | 00003d50 35 2c 20 35 2c 20 31 31 20 20 20 20 20 20 20 20 |5, 5, 11 | 00003d60 20 20 20 20 20 3b 20 74 68 6f 73 65 20 62 69 74 | ; those bit| 00003d70 73 20 77 68 65 72 65 20 77 69 6c 6c 20 77 72 69 |s where will wri| 00003d80 74 65 0d 12 66 3c 42 49 43 20 20 20 20 20 20 36 |te..f<BIC 6| 00003d90 2c 20 36 2c 20 31 32 20 20 20 20 20 20 20 20 20 |, 6, 12 | 00003da0 20 20 20 20 3b 20 73 70 72 69 74 65 20 69 6d 61 | ; sprite ima| 00003db0 67 65 20 69 6e 20 61 20 6d 6f 6d 65 6e 74 0d 12 |ge in a moment..| 00003dc0 70 3b 84 52 20 20 20 20 20 20 34 2c 20 34 2c 20 |p;.R 4, 4, | 00003dd0 37 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b |7 ;| 00003de0 77 72 69 74 65 20 69 6e 20 74 68 65 20 73 70 72 |write in the spr| 00003df0 69 74 65 20 69 6d 61 67 65 0d 12 7a 13 84 52 20 |ite image..z..R | 00003e00 20 20 20 20 20 35 2c 20 35 2c 20 38 0d 12 84 13 | 5, 5, 8....| 00003e10 84 52 20 20 20 20 20 20 36 2c 20 36 2c 20 39 0d |.R 6, 6, 9.| 00003e20 12 8e 42 53 54 4d 49 41 20 20 20 20 30 21 2c 20 |..BSTMIA 0!, | 00003e30 7b 34 2d 36 7d 20 20 20 20 20 20 20 20 20 20 20 |{4-6} | 00003e40 20 3b 72 65 73 74 6f 72 65 20 74 68 65 20 64 61 | ;restore the da| 00003e50 74 61 20 62 61 63 6b 20 74 6f 20 73 63 72 65 65 |ta back to scree| 00003e60 6e 0d 12 98 05 5d 0d 12 a2 0a 3d 70 61 73 73 25 |n....]....=pass%| 00003e70 0d 12 ac 05 3a 0d 12 b6 36 dd 20 a4 63 6f 6c 6c |....:...6. .coll| 00003e80 66 72 61 67 28 70 61 73 73 25 29 20 20 20 20 3a |frag(pass%) :| 00003e90 f4 20 6d 61 63 72 6f 20 74 6f 20 63 6f 6c 6c 20 |. macro to coll | 00003ea0 63 68 65 63 6b 20 61 20 72 6f 77 0d 12 c0 39 5b |check a row...9[| 00003eb0 4f 50 54 20 70 61 73 73 25 20 20 20 20 20 20 20 |OPT pass% | 00003ec0 20 20 20 20 20 20 20 20 3a f4 20 28 31 32 20 70 | :. (12 p| 00003ed0 69 78 65 6c 73 29 20 6f 66 20 6f 75 72 20 73 70 |ixels) of our sp| 00003ee0 72 69 74 65 0d 12 ca 45 4c 44 4d 49 41 20 20 20 |rite...ELDMIA | 00003ef0 20 30 21 2c 20 7b 33 2d 35 7d 20 20 20 20 20 20 | 0!, {3-5} | 00003f00 20 20 20 20 20 20 3b 72 65 61 64 20 33 20 77 6f | ;read 3 wo| 00003f10 72 64 73 20 6f 66 20 73 63 72 65 65 6e 20 28 31 |rds of screen (1| 00003f20 32 20 70 69 78 65 6c 73 29 0d 12 d4 3d 4c 44 4d |2 pixels)...=LDM| 00003f30 49 41 20 20 20 20 31 21 2c 20 7b 38 2d 31 30 7d |IA 1!, {8-10}| 00003f40 20 20 20 20 20 20 20 20 20 20 20 3b 72 65 61 64 | ;read| 00003f50 20 31 32 20 73 70 72 69 74 65 20 70 69 78 65 6c | 12 sprite pixel| 00003f60 20 6d 61 73 6b 73 0d 12 de 11 54 53 54 20 20 20 | masks....TST | 00003f70 20 20 20 33 2c 20 38 0d 12 e8 11 54 53 54 45 51 | 3, 8....TSTEQ| 00003f80 20 20 20 20 34 2c 20 39 0d 12 f2 12 54 53 54 45 | 4, 9....TSTE| 00003f90 51 20 20 20 20 35 2c 20 31 30 0d 12 fc 44 42 4e |Q 5, 10...DBN| 00003fa0 45 20 20 20 20 20 20 67 6f 74 63 6f 6c 6c 25 20 |E gotcoll% | 00003fb0 20 20 20 20 20 20 20 20 20 20 20 20 3b 62 72 61 | ;bra| 00003fc0 6e 63 68 20 74 6f 20 67 6f 74 63 6f 6c 6c 25 20 |nch to gotcoll% | 00003fd0 69 66 20 61 6e 79 20 6f 76 65 72 6c 61 70 0d 13 |if any overlap..| 00003fe0 06 44 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 |.D] | 00003ff0 20 20 20 20 20 20 20 20 20 20 20 3a f4 20 20 65 | :. e| 00004000 6c 73 65 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 |lse continue wit| 00004010 68 20 63 6f 64 65 20 61 66 74 65 72 20 6d 61 63 |h code after mac| 00004020 72 6f 0d 13 10 0a 3d 70 61 73 73 25 0d 13 1a 05 |ro....=pass%....| 00004030 3a 0d 13 24 3d dd 20 a4 73 74 61 74 66 72 61 67 |:..$=. .statfrag| 00004040 28 70 61 73 73 25 2c 20 6d 25 29 3a f4 20 6d 61 |(pass%, m%):. ma| 00004050 63 72 6f 20 74 6f 20 61 64 64 20 69 6e 20 72 65 |cro to add in re| 00004060 67 72 65 73 73 69 6f 6e 20 73 74 61 74 73 0d 13 |gression stats..| 00004070 2e 40 5b 4f 50 54 20 70 61 73 73 25 20 20 20 20 |.@[OPT pass% | 00004080 20 20 20 20 20 20 20 20 20 20 20 3a f4 20 66 6f | :. fo| 00004090 72 20 6f 6e 65 20 70 69 78 65 6c 20 28 63 6f 6f |r one pixel (coo| 000040a0 72 64 73 20 75 28 69 29 2c 76 28 69 29 29 0d 13 |rds u(i),v(i))..| 000040b0 38 14 54 53 54 20 20 20 20 20 20 20 34 2c 20 23 |8.TST 4, #| 000040c0 6d 25 0d 13 42 14 42 45 51 20 20 20 20 20 20 20 |m%..B.BEQ | 000040d0 50 25 2b 38 2a 34 0d 13 4c 2d 41 44 44 4e 45 20 |P%+8*4..L-ADDNE | 000040e0 20 20 20 20 36 2c 20 36 2c 20 23 31 20 20 20 20 | 6, 6, #1 | 000040f0 20 20 20 20 20 20 20 20 3b 20 6e 20 3d 20 6e 20 | ; n = n | 00004100 2b 20 31 0d 13 56 30 41 44 44 4e 45 20 20 20 20 |+ 1..V0ADDNE | 00004110 20 37 2c 20 37 2c 20 32 20 20 20 20 20 20 20 20 | 7, 7, 2 | 00004120 20 20 20 20 20 3b 20 75 20 3d 20 75 20 2b 20 75 | ; u = u + u| 00004130 28 69 29 0d 13 60 30 41 44 44 4e 45 20 20 20 20 |(i)..`0ADDNE | 00004140 20 38 2c 20 38 2c 20 33 20 20 20 20 20 20 20 20 | 8, 8, 3 | 00004150 20 20 20 20 20 3b 20 76 20 3d 20 76 20 2b 20 76 | ; v = v + v| 00004160 28 69 29 0d 13 6a 15 41 44 44 4e 45 20 20 20 20 |(i)..j.ADDNE | 00004170 20 35 2c 20 32 2c 20 33 0d 13 74 16 53 55 42 4e | 5, 2, 3..t.SUBN| 00004180 45 20 20 20 20 20 31 34 2c 20 33 2c 20 32 0d 13 |E 14, 3, 2..| 00004190 7e 39 4d 4c 41 4e 45 20 20 20 20 20 39 2c 20 35 |~9MLANE 9, 5| 000041a0 2c 20 31 34 2c 20 39 20 20 20 20 20 20 20 20 20 |, 14, 9 | 000041b0 3b 20 70 20 3d 20 70 20 2b 20 76 28 69 29 5e 32 |; p = p + v(i)^2| 000041c0 2d 75 28 69 29 5e 32 0d 13 88 35 4d 4c 41 4e 45 |-u(i)^2...5MLANE| 000041d0 20 20 20 20 20 31 30 2c 20 32 2c 20 33 2c 20 31 | 10, 2, 3, 1| 000041e0 30 20 20 20 20 20 20 20 20 3b 20 71 20 3d 20 71 |0 ; q = q| 000041f0 20 2b 20 75 28 69 29 2a 76 28 69 29 0d 13 92 05 | + u(i)*v(i)....| 00004200 5d 0d 13 9c 0a 3d 70 61 73 73 25 0d 13 a6 05 3a |]....=pass%....:| 00004210 0d 13 b0 3c dd 20 a4 64 69 76 28 70 61 73 73 25 |...<. .div(pass%| 00004220 2c 20 72 61 2c 20 72 62 2c 20 72 63 2c 20 72 64 |, ra, rb, rc, rd| 00004230 29 20 3a f4 20 6d 61 63 72 6f 20 74 6f 20 73 65 |) :. macro to se| 00004240 74 20 72 63 3d 72 61 44 49 56 72 62 0d 13 ba 0e |t rc=raDIVrb....| 00004250 5b 4f 50 54 20 70 61 73 73 25 0d 13 c4 14 4d 4f |[OPT pass%....MO| 00004260 56 20 20 20 20 20 20 20 72 64 2c 20 72 62 0d 13 |V rd, rb..| 00004270 ce 1c 43 4d 50 20 20 20 20 20 20 20 72 64 2c 20 |..CMP rd, | 00004280 72 61 2c 20 4c 53 52 20 23 31 0d 13 d8 1c 4d 4f |ra, LSR #1....MO| 00004290 56 4c 53 20 20 20 20 20 72 64 2c 20 72 64 2c 20 |VLS rd, rd, | 000042a0 4c 53 4c 20 23 31 0d 13 e2 1c 43 4d 50 20 20 20 |LSL #1....CMP | 000042b0 20 20 20 20 72 64 2c 20 72 61 2c 20 4c 53 52 20 | rd, ra, LSR | 000042c0 23 31 0d 13 ec 14 42 4c 53 20 20 20 20 20 20 20 |#1....BLS | 000042d0 50 25 2d 32 2a 34 0d 13 f6 14 4d 4f 56 20 20 20 |P%-2*4....MOV | 000042e0 20 20 20 20 72 63 2c 20 23 30 0d 14 00 14 43 4d | rc, #0....CM| 000042f0 50 20 20 20 20 20 20 20 72 61 2c 20 72 64 0d 14 |P ra, rd..| 00004300 0a 18 53 55 42 43 53 20 20 20 20 20 72 61 2c 20 |..SUBCS ra, | 00004310 72 61 2c 20 72 64 0d 14 14 18 41 44 43 20 20 20 |ra, rd....ADC | 00004320 20 20 20 20 72 63 2c 20 72 63 2c 20 72 63 0d 14 | rc, rc, rc..| 00004330 1e 1c 4d 4f 56 20 20 20 20 20 20 20 72 64 2c 20 |..MOV rd, | 00004340 72 64 2c 20 4c 53 52 20 23 31 0d 14 28 14 43 4d |rd, LSR #1..(.CM| 00004350 50 20 20 20 20 20 20 20 72 64 2c 20 72 62 0d 14 |P rd, rb..| 00004360 32 14 42 48 53 20 20 20 20 20 20 20 50 25 2d 35 |2.BHS P%-5| 00004370 2a 34 0d 14 3c 05 5d 0d 14 46 0a 3d 70 61 73 73 |*4..<.]..F.=pass| 00004380 25 0d ff |%..| 00004383