Home » Archimedes archive » Acorn User » AU 1993-05.adf » !GameDes/Files/Rocky

!GameDes/Files/Rocky

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1993-05.adf
Filename: !GameDes/Files/Rocky
Read OK:
File size: 89F0 bytes
Load address: FFFFFB44
Exec address: 7B5430ED
Duplicates

There is 1 duplicate copy of this file in the archive:

File contents
   10REM >Rocky
   20REM by Antony Bruce Lytis
   30REM for 32 bit machines
   40REM (c) BAU May 1993
   50:
   60MODE 9+128
   70MODE 9
   80OFF
   90PRINT"Loading..."
  100PROCinit
  110PROCload_game("Rocky")
  120PROCass
  130PROCset_palette
  140high_score=0
  150REPEAT
  160 FOR i%=1 TO 2
  170  SYS "OS_Byte",112,i%
  180  CLS
  190 NEXT
  200 SYS "OS_Byte",113,2
  210 PROCcentre(3,"Rocky Trade",15)
  220 PROCcentre(7,"Keys:",11)
  230 PROCcentre(10,"Up     -  A     ",10)
  240 PROCcentre(12,"Down   -  Z     ",10)
  250 PROCcentre(14,"Fire   -  RETURN",10)
  260 PROCcentre(16,"Bomb   -  TAB   ",10)
  270 PROCcentre(18,"Thrust -  SHIFT ",10)
  280 PROCcentre(20,"Brake  -  SPACE ",10)
  290 PROCcentre(24,"High score: "+STR$high_score,11)
  300 PROCcentre(29,"Press SPACE to start",1)
  310 *FX 15
  320 REPEAT UNTIL GET=32
  330 lives%=3
  340 PROCnew_game
  350 COLOUR 1
  360 REPEAT
  370  PROCnew_round
  380  result=USR(game)
  390  IF result=0 lives%-=1
  400  IF result=1 THEN
  410   *FX 112,1
  420   *FX 113,1
  430   CLS
  440   PROCcentre(8,"Well done!",10)
  450   PROCcentre(12,"You completed your mission",15)
  460   PROCcentre(14,"with flying colours",15)
  470   PROCcentre(20,"Press SPACE to try again",1)
  480   REPEAT UNTIL GET=32
  490  ENDIF
  500 UNTIL result=-1 OR lives%=0
  510 IF lives%=0 AND !score>high_score high_score=!score
  520UNTIL FALSE
  530END
  540:
  550DEF PROCset_palette
  560SYS "OS_SpriteOp",&118,scenery,"palette" TO ,,pal_spr
  570FOR i=0 TO 15
  580 a=pal_spr+44+8*i
  590 COLOUR i,a?1,a?2,a?3
  600NEXT
  610ENDPROC
  620:
  630DEF PROCcentre(y%,t$,c%)
  640COLOUR c%
  650PRINTTAB(20-LEN(t$)/2,y%);t$
  660ENDPROC
  670:
  680DEF PROCinit
  690DIM land 64*1024,scenery 64*1024,scene_spr 4*256,temp% &100
  700!scenery=64*1024
  710scenery!4=0
  720scenery!8=16
  730scenery!12=16
  740max_energy=120
  750ENDPROC
  760:
  770DEF PROCload_game(game$)
  780LOCAL in%
  790in%=OPENIN("Games."+game$)
  800WHILE NOT EOF#in%
  810 s$=FNstrip(GET$#in%)
  820 i%=INSTR(s$,":")
  830 IF i%>0 THEN
  840  r$=FNstrip(MID$(s$,i%+1))
  850  CASE LEFT$(s$,i%-1) OF
  860   WHEN "Maps":
  870    PROCload_map(r$)
  880   WHEN "Sprites":
  890    PROCload_sprites(r$)
  900   WHEN "Movement":
  910    PROCload_movement(r$)
  920   WHEN "Patterns":
  930    PROCload_patterns(r$)
  940   WHEN "Layout":
  950    PROCload_layout(r$)
  960  ENDCASE
  970 ENDIF
  980ENDWHILE
  990CLOSE#in%
 1000ENDPROC
 1010:
 1020DEF PROCload_sprites(file$)
 1030SYS "OS_File",5,"Sprites."+file$ TO ,,,,spr_len%
 1040spr_len%=5*spr_len%
 1050DIM spr% spr_len%
 1060!spr%=spr_len%
 1070spr%!4=0
 1080spr%!8=16
 1090spr%!12=16
 1100SYS "OS_SpriteOp",&10A,spr%,"Sprites."+file$
 1110SYS "OS_SpriteOp",&108,spr% TO ,,,sprites%
 1120DIM spr_name$(sprites%-1)
 1130FOR i%=0 TO sprites%-1
 1140 SYS "OS_SpriteOp",&10D,spr%,temp%,&100,i%+1 TO ,,,j%
 1150 temp%?j%=13
 1160 spr_name$(i%)=$temp%
 1170NEXT
 1180FOR i%=0 TO sprites%-1
 1190 IF spr_name$(i%)<>"!" AND LEFT$(spr_name$(i%),4)<>"fade" THEN
 1200  IF LEN(spr_name$(i%))=12 root$=LEFT$(spr_name$(i%),11) ELSE root$=spr_name$(i%)
 1210  SYS "OS_SpriteOp",&11A,spr%,spr_name$(i%),root$+"a"
 1220  FOR j%=1 TO 3
 1230   shift$=root$+CHR$(ASC"a"+j%)
 1240   SYS "OS_SpriteOp",&11B,spr%,root$+"a",shift$
 1250   FOR k%=1 TO 2*j%
 1260    SYS "OS_SpriteOp",&12D,spr%,shift$,0
 1270   NEXT
 1280  NEXT
 1290  FOR j%=0 TO 3
 1300   shift$=root$+CHR$(ASC"a"+j%)
 1310   REPEAT
 1320    SYS "OS_SpriteOp",&128,spr%,shift$ TO ,,,w%,h%
 1330    IF w% MOD 8<>0 SYS "OS_SpriteOp",&12D,spr%,shift$,w%
 1340   UNTIL w% MOD 8=0
 1350  NEXT
 1360 ENDIF
 1370NEXT
 1380fade_stages%=12
 1390DIM fade_tab 4*fade_stages%
 1400FOR i%=0 TO fade_stages%-1
 1410 SYS "OS_SpriteOp",&118,spr%,"fade"+STR$(i%+1) TO ,,fade_tab!(4*i%)
 1420NEXT
 1430ENDPROC
 1440:
 1450DEF PROCload_movement(file$)
 1460LOCAL in%
 1470movements%=0
 1480DIM move_name$(255),move_dat% &1000,move_ptr% &400,move_sprite% &1000
 1490in%=OPENIN("Movement."+file$)
 1500p%=move_dat%
 1510WHILE NOT EOF#in%
 1520 s$=FNstrip(GET$#in%)
 1530 IF LEFT$(s$,1)<>";" AND s$<>"" THEN
 1540  par1$=FNget_par(s$)
 1550  par2$=FNget_par(s$)
 1560  par3$=FNget_par(s$)
 1570  IF par3$="" THEN par3$=par2$:par2$=par1$
 1580  move_name$(movements%)=par1$
 1590  FOR i%=0 TO 3
 1600   SYS "OS_SpriteOp",&118,spr%,par2$+CHR$(ASC"a"+i%) TO ,,sa%
 1610   move_sprite%!(16*movements%+4*i%)=sa%
 1620  NEXT
 1630  move_ptr%!(4*movements%)=p%
 1640  par3$=MID$(par3$,3)
 1650  WHILE par3$<>""
 1660   a%=ASC(par3$)
 1670   IF a%>96 THEN ?p%=127-(a%-96) ELSE ?p%=127+(a%-64)
 1680   p%+=1
 1690   par3$=MID$(par3$,2)
 1700  ENDWHILE
 1710  p%?0=&FF
 1720  p%?1=&FF
 1730  p%+=2
 1740  movements%+=1
 1750 ENDIF
 1760ENDWHILE
 1770CLOSE#in%
 1780ENDPROC
 1790:
 1800DEF FNidentify_movement(move$)
 1810LOCAL i%,found%
 1820found%=FALSE
 1830i%=0
 1840IF move$="(LOOP)" THEN =-2
 1850WHILE i%<movements% AND NOT found%
 1860 IF move_name$(i%)=move$ THEN found%=TRUE ELSE i%+=1
 1870ENDWHILE
 1880IF NOT found% THEN ERROR 0,"Don't know movement '"+move$+"'"
 1890=i%
 1900:
 1910DEF FNidentify_pattern(pat$)
 1920LOCAL i%,found%
 1930found%=FALSE
 1940i%=0
 1950WHILE i%<patterns% AND NOT found%
 1960 IF pat_name$(i%)=pat$ THEN found%=TRUE ELSE i%+=1
 1970ENDWHILE
 1980IF NOT found% THEN ERROR 0,"Don't know pattern '"+pat$+"'"
 1990=i%
 2000:
 2010DEF FNget_par(RETURN s$)
 2020LOCAL p$,i%
 2030s$=FNstrip(s$)
 2040i%=INSTR(s$," ")
 2050IF i%=0 THEN p$=FNstrip(s$):s$="" ELSE p$=FNstrip(LEFT$(s$,i%-1)):s$=FNstrip(MID$(s$,i%+1))
 2060=p$
 2070:
 2080DEF PROCload_layout(file$)
 2090LOCAL in%
 2100in%=OPENIN("Layout."+file$)
 2110m%=-1
 2120max_pop%=1024
 2130DIM layout_pat%(255),pop_dat% 24*max_pop%,lay_par%(5)
 2140pop%=0
 2150line%=0
 2160bad$=""
 2170WHILE NOT EOF#in% AND bad$=""
 2180 s$=FNstrip(GET$#in%)
 2190 CASE s$ OF
 2200  WHEN "Patterns:":m%=0
 2210  WHEN "Layout:":m%=1
 2220 OTHERWISE
 2230  IF s$<>"" THEN
 2240   CASE m% OF
 2250    WHEN 0:
 2260     i%=INSTR(s$," ")
 2270     layout_pat%(VAL(MID$(s$,i%+1)))=FNidentify_pattern(FNstrip(LEFT$(s$,i%-1)))
 2280    WHEN 1:
 2290     FOR i%=0 TO 5
 2300      IF i%=3 i%+=1
 2310      lay_par%(i%)=FNget_num_par(s$)
 2320     NEXT
 2330     IF lay_par%(2)=-1 bad$="not enough parameters":bad_line%=line%
 2340     lay_par%(0)=layout_pat%(lay_par%(0))
 2350     lay_par%(1)=lay_par%(1) DIV 2
 2360     lay_par%(2)=240-16-lay_par%(2)
 2370     FOR i%=0 TO 5
 2380      pop_dat%!(24*pop%+4*i%)=lay_par%(i%)
 2390     NEXT
 2400     pop%+=1
 2410   OTHERWISE
 2420    IF LEFT$(s$,1)<>";" AND s$<>"" bad$="syntax error":bad_line%=line%
 2430   ENDCASE
 2440  ENDIF
 2450 ENDCASE
 2460 line%+=1
 2470ENDWHILE
 2480CLOSE#in%
 2490IF bad$<>"" ERROR 0,"Error in layout file: "+bad$+" at line "+STR$bad_line%
 2500pop_dat%!(24*pop%)=-1
 2510ENDPROC
 2520:
 2530DEF FNget_num_par(RETURN s$)
 2540LOCAL n%
 2550s$=FNstrip(s$)
 2560IF s$="" THEN =-1
 2570n%=VAL(s$)
 2580s$=MID$(s$,INSTR(s$," ")+1)
 2590=n%
 2600:
 2610DEF PROCload_patterns(file$)
 2620LOCAL in%
 2630DIM pat_name$(255),pat_dat% &1000,pat_ptr% &400
 2640patterns%=0
 2650p%=pat_dat%
 2660bad$=""
 2670in%=OPENIN("Patterns."+file$)
 2680line%=0
 2690cur_pat%=-1
 2700WHILE NOT EOF#in%
 2710 s$=GET$#in%
 2720 IF LEFT$(s$,1)<>";" AND s$<>"" THEN
 2730  IF LEFT$(s$,1)<>" " THEN
 2740   IF cur_pat%<>-1 THEN !p%=-1:p%+=4
 2750   cur_pat%=patterns%
 2760   pat_name$(cur_pat%)=FNget_par(s$)
 2770   pat_ptr%!(4*cur_pat%)=p%
 2780   patterns%+=1
 2790  ENDIF
 2800  IF s$<>"" AND patterns%=0 THEN
 2810   bad$="syntax error"
 2820   bad_line%=line%
 2830  ELSE
 2840   par1$=FNget_par(s$)
 2850   par2$=FNget_par(s$)
 2860   par3$=FNget_par(s$)
 2870   !p%=FNidentify_movement(par1$)
 2880   IF par2$<>"" p%!4=VAL(par2$) ELSE p%!4=-1
 2890   IF par3$<>"" p%!8=VAL(par3$) ELSE p%!8=-1
 2900   p%+=12
 2910  ENDIF
 2920 ENDIF
 2930 line%+=1
 2940ENDWHILE
 2950CLOSE#in%
 2960IF bad$<>"" ERROR 0,"Error in pattern file: "+bad$+" at line "+STR$bad_line%
 2970!p%=-1:p%+=4
 2980ENDPROC
 2990:
 3000DEF PROCload_map(file$)
 3010LOCAL in%
 3020in%=OPENIN("Maps."+file$)
 3030x%=0
 3040m%=0
 3050FOR i=0 TO 255
 3060 scene_spr!(4*i)=-1
 3070NEXT
 3080WHILE NOT EOF#in%
 3090 s$=FNstrip(GET$#in%)
 3100 IF s$<>"" THEN
 3110  CASE s$ OF
 3120   WHEN "Files:":m%=1
 3130   WHEN "Used:":m%=2
 3140   WHEN "Map:":m%=3
 3150   WHEN "Type:":m%=4
 3160  OTHERWISE
 3170   CASE m% OF
 3180    WHEN 1:SYS "OS_SpriteOp",&10B,scenery,"Scenery."+s$
 3190    WHEN 2:
 3200     i=EVAL("&"+LEFT$(s$,2))
 3210     s$=FNstrip(MID$(s$,3))
 3220     SYS "OS_SpriteOp",&118,scenery,s$ TO ,,d%
 3230     scene_spr!(4*i)=d%
 3240     IF s$="blank" THEN
 3250      blnk=i
 3260      SYS "OS_SpriteOp",&128,scenery,s$ TO ,,,,,,mode
 3270     ENDIF
 3280    WHEN 3:
 3290     dash%=INSTR(s$,"-")
 3300     IF dash%>0 THEN
 3310      s1$=LEFT$(s$,dash%-1)
 3320      s3$=MID$(s$,dash%+1)
 3330      s2$=RIGHT$("0"+STR$~blnk,2)
 3340      s$=s1$+STRING$(no-LEN(s1$+s3$)/2,s2$)+s3$
 3350     ENDIF
 3360     a%=land+no*x%
 3370     FOR i=0 TO no-1
 3380      a%?i=blnk
 3390     NEXT
 3400     y%=no-1
 3410     WHILE s$<>""
 3420      a%?y%=EVAL("&"+LEFT$(s$,2))
 3430      s$=MID$(s$,3)
 3440      y%-=1
 3450     ENDWHILE
 3460     x%+=1
 3470    WHEN 4:
 3480     size=VALMID$(s$,2)
 3490     IF LEFT$(s$,1)="H" THEN
 3500      IF size=32 total_size=224 ELSE total_size=240
 3510     ELSE
 3520      ERROR 17,"Only horizontal landscapes please!"
 3530     ENDIF
 3540     no=total_size DIV size
 3550   ENDCASE
 3560  ENDCASE
 3570 ENDIF
 3580ENDWHILE
 3590SYS "OS_ReadModeVariable",mode,6 TO ,,bytes_per_row
 3600screen_size=total_size*bytes_per_row
 3610IF mode=9 sprite_width=size DIV 2 ELSE sprite_width=size
 3620land_ext=x%*sprite_width
 3630FOR i=0 TO 255
 3640 IF scene_spr!(4*i)=-1 THEN scene_spr!(4*i)=blnk
 3650NEXT
 3660CLOSE#in%
 3670ENDPROC
 3680:
 3690DEF FNstrip(s$)
 3700WHILE LEFT$(s$,1)=" "
 3710 s$=MID$(s$,2)
 3720ENDWHILE
 3730WHILE RIGHT$(s$)=" "
 3740 s$=LEFT$(s$)
 3750ENDWHILE
 3760=s$
 3770:
 3780DEF PROCass
 3790dat_next=0
 3800dat_type=4
 3810dat_x=8
 3820dat_y=12
 3830dat_go=16
 3840dat_pat_pc=20
 3850dat_mov_pc=24
 3860dat_active=28
 3870dat_pat_count=32
 3880dat_class=36
 3890dat_spr=40
 3900dat_size=44
 3910max_aliens=96
 3920DIM code% &4000+4*screen_size
 3930sp=13:link=14:pc=15
 3940FOR pass%=0 TO 2 STEP 2
 3950P%=code%
 3960[OPT pass%
 3970.game   STMFD   (sp)!,{r0-r12,link}
 3980        LDR     r0,Apop_dat
 3990        STR     r0,pop_next
 4000        MOV     r9,#0
 4010        MOV     r10,#0
 4020        STR     r10,life_lost_count
 4030        STR     r10,finished_count
 4040        MOV     r11,#1
 4050.game_loop
 4060        BL      swap_banks
 4070        BL      copy_bank
 4080        LDR     r0,finished_count
 4090        CMP     r0,#0
 4100        BEQ     not_finished
 4110        SUBS    r0,r0,#1
 4120        STR     r0,finished_count
 4130        BNE     not_finished
 4140        LDMFD   (sp)!,{r0-r12,link}
 4150        MOV     r0,#1
 4160        MOV     pc,link
 4170.not_finished
 4180        LDR     r0,life_lost_count
 4190        CMP     r0,#0
 4200        BEQ     not_life_lost
 4210        SUBS    r0,r0,#1
 4220        STR     r0,life_lost_count
 4230        BNE     nearly_over
 4240        LDMFD   (sp)!,{r0-r12,link}
 4250        MOV     r0,#0
 4260        MOV     pc,link
 4270.not_life_lost
 4280        BL      scroll_on
 4290.nearly_over
 4300        BL      do_aliens
 4310        BL      back_collide
 4320        BL      fore_collide
 4330        BL      show_aliens
 4340        LDR     r0,fire_count
 4350        CMP     r0,#0
 4360        SUBGT   r0,r0,#1
 4370        STRGT   r0,fire_count
 4380        LDR     r0,energy
 4390        TST     r10,#31
 4400        BNE     no_drain
 4410        SUBS    r0,r0,#1
 4420        MOVMI   r0,#0
 4430        STR     r0,energy
 4440.no_drain
 4450        BL      show_energy
 4460        BL      show_score
 4470        SWI     "XOS_ReadEscapeState"
 4480        BCC     game_loop
 4490        MOV     r0,#126
 4500        SWI     "XOS_Byte"
 4510        LDMFD   (sp)!,{r0-r12,link}
 4520        MVN     r0,#0
 4530        MOV     pc,link
 4540
 4550.life_lost_count
 4560        DCD     0
 4570.finished_count
 4580        DCD     0
 4590
 4600.bomb_key
 4610        DCD     0
 4620.fire_count
 4630        DCD     0
 4640
 4650.do_aliens
 4660        STMFD   (sp)!,{r0-r12,link}
 4670        LDR     r6,pop_next
 4680        ADD     r5,r10,#160+16
 4690.check_for_new_entries
 4700        LDMIA   r6,{r0-r3}
 4710        CMP     r0,#0
 4720        BLT     done_new_entries
 4730        CMP     r1,r5
 4740        BGE     done_new_entries
 4750        BL      add_alien_to_list
 4760        ADD     r6,r6,#24
 4770        B       check_for_new_entries
 4780.done_new_entries
 4790        STR     r6,pop_next
 4800        ADR     r7,list
 4810        LDR     r8,list
 4820.do_alien_loop
 4830        CMP     r8,#0
 4840        LDMEQFD (sp)!,{r0-r12,pc}
 4850
 4860        LDR     r0,[r8,#dat_active]
 4870        CMP     r0,#0
 4880        BLT     alien_is_dying
 4890        BGT     alien_is_active
 4900        LDR     r0,[r8,#dat_go]
 4910        CMP     r10,r0
 4920        BLT     alien_is_active
 4930        MOV     r0,#1
 4940        STR     r0,[r8,#dat_active]
 4950        B       alien_is_active
 4960.alien_is_dying
 4970        ADDS    r0,r0,#1
 4980        STR     r0,[r8,#dat_active]
 4990        BEQ     alien_is_off
 5000        B       do_next_alien
 5010.alien_is_active
 5020        LDR     r2,[r8,#dat_x]
 5030        LDR     r3,[r8,#dat_y]
 5040        SUB     r14,r10,#32
 5050        CMP     r2,r14
 5060        BLT     alien_is_off
 5070        ADD     r14,r10,#160+48
 5080        CMP     r2,r14
 5090        BGT     alien_is_off
 5100        CMP     r3,#256+16
 5110        BGT     alien_is_off
 5120        CMN     r3,#15
 5130        BLT     alien_is_off
 5140
 5150        LDR     r4,[r8,#dat_type]
 5160        CMP     r4,#FNidentify_pattern("ship")
 5170        BNE     not_ship
 5180        MOV     r1,#256-1
 5190        BL      inkey
 5200        ADDEQ   r2,r2,#2
 5210        SUBNE   r2,r2,#1
 5220        MOV     r1,#256-99
 5230        BL      inkey
 5240        SUBEQ   r2,r2,#1
 5250        LDR     r0,energy
 5260        CMP     r0,#0
 5270        ADDLE   r3,r3,#2
 5280        BLE     drop_from_sky
 5290        MOV     r1,#256-66
 5300        BL      inkey
 5310        SUBEQ   r3,r3,#2
 5320        MOV     r1,#256-98
 5330        BL      inkey
 5340        ADDEQ   r3,r3,#2
 5350.drop_from_sky
 5360        ADD     r14,r10,#120
 5370        CMP     r2,r14
 5380        MOVGT   r2,r14
 5390        CMP     r2,r10
 5400        MOVLT   r2,r10
 5410        CMP     r3,#0
 5420        MOVLT   r3,#0
 5430        CMP     r3,#240-11
 5440        MOVGT   r3,#240-11
 5450        ADD     r14,r8,#dat_x
 5460        STMIA   r14,{r2,r3}
 5470        LDR     r1,fire_count
 5480        CMP     r1,#0
 5490        BNE     dont_fire
 5500        MOV     r1,#256-74
 5510        BL      inkey
 5520        BNE     dont_fire
 5530        STMFD   (sp)!,{r2-r3}
 5540        MOV     r0,#FNidentify_pattern("bullet")
 5550        ADD     r1,r2,#18
 5560        ADD     r2,r3,#5
 5570        MOV     r3,#0
 5580        BL      add_alien_to_list
 5590        MOV     r1,#10
 5600        STR     r1,fire_count
 5610        LDMFD   (sp)!,{r2-r3}
 5620.dont_fire
 5630        MOV     r1,#256-97
 5640        BL      inkey
 5650        MOVEQ   r0,#1
 5660        MOVNE   r0,#0
 5670        LDR     r14,bomb_key
 5680        CMP     r0,r14
 5690        BEQ     dont_drop
 5700        STR     r0,bomb_key
 5710        CMP     r0,#1
 5720        BNE     dont_drop
 5730        MOV     r0,#FNidentify_pattern("bomb")
 5740        ADD     r1,r2,#8
 5750        ADD     r2,r3,#8
 5760        MOV     r3,#0
 5770        BL      add_alien_to_list
 5780.dont_drop
 5790        B       apply_pat
 5800.not_ship
 5810.apply_pat
 5820        LDR     r1,Apat_ptr
 5830        LDR     r4,[r1,r4,LSL #2]
 5840        LDR     r3,[r8,#dat_pat_pc]
 5850        CMP     r3,#0
 5860        BLT     next_mov
 5870        LDR     r0,[r8,#dat_pat_count]
 5880        CMP     r0,#0
 5890        BNE     not_next_mov
 5900.next_mov
 5910        ADD     r3,r3,#12
 5920.do_pat_loop
 5930        ADD     r14,r4,r3
 5940        LDR     r0,[r14,#0]
 5950        CMN     r0,#1
 5960        BEQ     alien_is_off
 5970        MOVLT   r3,#0
 5980        BLT     do_pat_loop
 5990        LDR     r0,[r14,#4]
 6000        STR     r0,[r8,#dat_pat_count]
 6010.not_next_mov
 6020        STR     r3,[r8,#dat_pat_pc]
 6030        LDR     r5,[r4,r3]
 6040        CMP     r5,#0
 6050        BLT     alien_is_off
 6060
 6070        LDR     r1,Amov_ptr
 6080        LDR     r1,[r1,r5,LSL #2]
 6090        LDR     r2,[r8,#dat_mov_pc]
 6100        LDR     r3,[r8,#dat_x]
 6110        LDR     r4,[r8,#dat_y]
 6120
 6130        LDR     r0,[r8,#dat_active]
 6140        CMP     r0,#0
 6150        BEQ     skip_alien_move
 6160
 6170.cycle_move
 6180        LDRB    r0,[r1,r2]
 6190        CMP     r0,#&FF
 6200        BNE     not_end_cycle
 6210        LDR     r0,[r8,#dat_pat_count]
 6220        CMP     r0,#0
 6230        SUBGE   r0,r0,#1
 6240        STRGE   r0,[r8,#dat_pat_count]
 6250        MOV     r2,#0
 6260        B       cycle_move
 6270.not_end_cycle
 6280        ADD     r3,r3,r0
 6290        SUB     r3,r3,#&7F
 6300        ADD     r2,r2,#1
 6310        LDRB    r0,[r1,r2]
 6320        SUB     r4,r4,r0
 6330        ADD     r4,r4,#&7F
 6340        ADD     r2,r2,#1
 6350        STR     r2,[r8,#dat_mov_pc]
 6360        STR     r3,[r8,#dat_x]
 6370        STR     r4,[r8,#dat_y]
 6380.skip_alien_move
 6390        LDR     r0,Amov_sprite
 6400        ADD     r0,r0,r5,LSL #4
 6410        SUB     r14,r3,r10
 6420        AND     r14,r14,#3
 6430        LDR     r0,[r0,r14,LSL #2]
 6440        STR     r0,[r8,#dat_spr]
 6450.do_next_alien
 6460        MOV     r7,r8
 6470        LDR     r8,[r8,#dat_next]
 6480        B       do_alien_loop
 6490.alien_is_off
 6500        LDR     r6,[r8,#dat_next]
 6510        STR     r6,[r7,#dat_next]
 6520        LDR     r5,free
 6530        STR     r5,[r8,#dat_next]
 6540        STR     r8,free
 6550        MOV     r8,r6
 6560        B       do_alien_loop
 6570
 6580.show_aliens
 6590        STMFD   (sp)!,{r0-r12,link}
 6600        ADR     r8,list
 6610.show_aliens_loop
 6620        LDR     r8,[r8,#dat_next]
 6630        CMP     r8,#0
 6640        LDMEQFD (sp)!,{r0-r12,pc}
 6650        LDR     r0,[r8,#dat_active]
 6660        CMP     r0,#0
 6670        BGE     show_alive
 6680        ADD     r3,r0,#fade_stages%
 6690        LDR     r0,[r8,#dat_spr]
 6700        CMP     r0,#0
 6710        LDRNE   r1,[r8,#dat_x]
 6720        SUBNE   r1,r1,r10
 6730        LDRNE   r2,[r8,#dat_y]
 6740        BLNE    show_sprite_dying
 6750        B       show_aliens_loop
 6760.show_alive
 6770        LDR     r0,[r8,#dat_spr]
 6780        CMP     r0,#0
 6790        LDRNE   r1,[r8,#dat_x]
 6800        SUBNE   r1,r1,r10
 6810        LDRNE   r2,[r8,#dat_y]
 6820        BLNE    show_sprite
 6830        B       show_aliens_loop
 6840
 6850.back_collide
 6860        STMFD   (sp)!,{r0-r12,link}
 6870        ADR     r8,list
 6880.back_collide_loop
 6890        LDR     r8,[r8,#dat_next]
 6900        CMP     r8,#0
 6910        LDMEQFD (sp)!,{r0-r12,pc}
 6920        LDR     r0,[r8,#dat_active]
 6930        CMP     r0,#0
 6940        BLE     back_collide_loop
 6950        LDR     r0,[r8,#dat_class]
 6960        CMP     r0,#1
 6970        CMPNE   r0,#2
 6980        BNE     back_collide_loop
 6990        LDR     r0,[r8,#dat_spr]
 7000        CMP     r0,#0
 7010        BEQ     back_collide_loop
 7020        LDR     r1,[r8,#dat_x]
 7030        SUB     r1,r1,r10
 7040        LDR     r2,[r8,#dat_y]
 7050        BL      collide_check
 7060        BEQ     back_collide_loop
 7070        LDR     r5,[r8,#dat_type]
 7080        CMP     r5,#FNidentify_pattern("ship")
 7090        BNE     ship_hasnt_crashed
 7100        BL      ship_has_crashed
 7110        B       back_collide_loop
 7120.ship_hasnt_crashed
 7130        MVN     r0,#fade_stages%
 7140        STR     r0,[r8,#dat_active]
 7150        B       back_collide_loop
 7160
 7170.list   DCD     0
 7180.free   DCD     0
 7190
 7200.ship_has_crashed
 7210        STMFD   (sp)!,{r0-r12,link}
 7220        ADR     r8,list
 7230.find_ship
 7240        LDR     r8,[r8,#dat_next]
 7250        LDR     r0,[r8,#dat_type]
 7260        CMP     r0,#FNidentify_pattern("ship")
 7270        BNE     find_ship
 7280        MOV     r0,#50
 7290        STR     r0,life_lost_count
 7300        LDR     r1,[r8,#dat_x]
 7310        LDR     r2,[r8,#dat_y]
 7320        MOV     r3,#0
 7330        MOV     r0,#FNidentify_pattern("shipdead1")
 7340        BL      add_alien_to_list
 7350        MOV     r0,#FNidentify_pattern("shipdead2")
 7360        BL      add_alien_to_list
 7370        MOV     r0,#FNidentify_pattern("shipdead3")
 7380        BL      add_alien_to_list
 7390        MOV     r0,#FNidentify_pattern("shipdead4")
 7400        BL      add_alien_to_list
 7410        MVN     r0,#fade_stages%
 7420        STR     r0,[r8,#dat_active]
 7430        LDMFD   (sp)!,{r0-r12,pc}
 7440
 7450.fore_collide
 7460        STMFD   (sp)!,{r0-r12,link}
 7470        ADR     r8,list
 7480.fore_collide_loop
 7490        LDR     r8,[r8,#dat_next]
 7500        CMP     r8,#0
 7510        LDMEQFD (sp)!,{r0-r12,pc}
 7520        LDR     r0,[r8,#dat_class]
 7530        CMP     r0,#1
 7540        BNE     fore_collide_loop
 7550        LDR     r0,[r8,#dat_active]
 7560        CMP     r0,#0
 7570        BLT     fore_collide_loop
 7580        LDR     r14,[r8,#dat_spr]
 7590        CMP     r14,#0
 7600        BEQ     fore_collide_loop
 7610        ADD     r14,r14,#16
 7620        LDMIA   r14,{r6-r7}
 7630        ADD     r14,r8,#dat_x
 7640        LDMIA   r14,{r4,r5}
 7650        BIC     r4,r4,#3
 7660        ADD     r6,r6,#1
 7670        ADD     r6,r4,r6,LSL #2
 7680        ADD     r7,r7,#1
 7690        ADD     r7,r5,r7
 7700        ADR     r9,list
 7710.fore_collide_loopb
 7720        LDR     r9,[r9,#dat_next]
 7730        CMP     r9,#0
 7740        BEQ     fore_collide_loop
 7750        LDR     r0,[r9,#dat_class]
 7760        CMP     r0,#1
 7770        BEQ     fore_collide_loopb
 7780        BLT     not_a_meteor
 7790        LDR     r0,[r8,#dat_type]
 7800        CMP     r0,#FNidentify_pattern("bullet")
 7810        CMPNE   r0,#FNidentify_pattern("bomb")
 7820        BEQ     fore_collide_loopb
 7830.not_a_meteor
 7840        LDR     r0,[r9,#dat_active]
 7850        CMP     r0,#0
 7860        BLT     fore_collide_loopb
 7870        LDR     r14,[r9,#dat_spr]
 7880        CMP     r14,#0
 7890        BEQ     fore_collide_loopb
 7900        ADD     r14,r14,#16
 7910        LDMIA   r14,{r2-r3}
 7920        ADD     r14,r9,#dat_x
 7930        LDMIA   r14,{r0-r1}
 7940        BIC     r0,r0,#3
 7950        ADD     r2,r2,#1
 7960        ADD     r2,r0,r2,LSL #2
 7970        ADD     r3,r3,#1
 7980        ADD     r3,r1,r3
 7990        CMP     r6,r0
 8000        CMPGE   r2,r4
 8010        CMPGE   r7,r1
 8020        CMPGE   r3,r5
 8030        BLT     fore_collide_loopb
 8040        BL      clear_small_screen
 8050        STMFD   (sp)!,{r4,r5}
 8060        SUBS    r0,r0,r4
 8070        MOVPL   r4,#0
 8080        RSBMI   r4,r0,#0
 8090        MOVMI   r0,#0
 8100        SUBS    r1,r1,r5
 8110        MOVPL   r5,#0
 8120        RSBMI   r5,r1,#0
 8130        MOVMI   r1,#0
 8140        LDR     r2,[r9,#dat_spr]
 8150        BL      plot_on_small_screen
 8160        MOV     r0,r4
 8170        MOV     r1,r5
 8180        LDR     r2,[r8,#dat_spr]
 8190        BL      plot_on_small_screen
 8200        LDMFD   (sp)!,{r4,r5}
 8210        BL      check_for_overlap
 8220        BEQ     fore_collide_loopb
 8230        MVN     r0,#fade_stages%
 8240        STR     r0,[r8,#dat_active]
 8250        STR     r0,[r9,#dat_active]
 8260        LDR     r0,[r8,#dat_type]
 8270        CMP     r0,#FNidentify_pattern("ship")
 8280        BLEQ    ship_has_crashed
 8290        ADR     r10,hit_tab
 8300        LDR     r0,[r9,#dat_type]
 8310        CMP     r0,#FNidentify_pattern("base")
 8320        MOVEQ   r14,#50
 8330        STREQ   r14,finished_count
 8340.find_what_we_hit
 8350        LDMIA   r10!,{r1-r3}
 8360        CMP     r1,#0
 8370        BLT     fore_collide_loop
 8380        CMP     r1,r0
 8390        BNE     find_what_we_hit
 8400        ADR     r14,score
 8410        LDMIA   r14,{r0,r1}
 8420        ADD     r0,r0,r2
 8430        ADD     r1,r1,r3
 8440        CMP     r1,#max_energy
 8450        MOVGT   r1,#max_energy
 8460        STMIA   r14,{r0,r1}
 8470        B       fore_collide_loop
 8480
 8490.hit_tab
 8500        DCD     FNidentify_pattern("fuel")
 8510        DCD     10
 8520        DCD     20
 8530        DCD     FNidentify_pattern("dish")
 8540        DCD     20
 8550        DCD     0
 8560        DCD     FNidentify_pattern("rocket")
 8570        DCD     40
 8580        DCD     0
 8590        DCD     FNidentify_pattern("saucer")
 8600        DCD     40
 8610        DCD     0
 8620        DCD     FNidentify_pattern("base")
 8630        DCD     1000
 8640        DCD     0
 8650        DCD     -1
 8660
 8670.show_energy
 8680        STMFD   (sp)!,{r0-r12,link}
 8690        LDR     r11,vdu_o
 8700        LDR     r8,energy
 8710        MOV     r7,#0
 8720        ADD     r11,r11,#4
 8730        ADD     r11,r11,#248<<5
 8740        ADD     r11,r11,#248<<7
 8750.show_energy_loop
 8760        MOV     r0,#&FF
 8770        CMP     r7,#40
 8780        MOVLT   r0,#&BB
 8790        CMP     r7,#20
 8800        MOVLT   r0,#&AA
 8810        CMP     r7,r8
 8820        MOVGE   r0,#&00
 8830        STRB    r0,[r11,#160]
 8840        STRB    r0,[r11,#320]
 8850        STRB    r0,[r11,#480]
 8860        STRB    r0,[r11],#1
 8870        ADD     r7,r7,#1
 8880        CMP     r7,#max_energy
 8890        BLT     show_energy_loop
 8900        LDMFD   (sp)!,{r0-r12,pc}
 8910
 8920.show_score
 8930        STMFD   (sp)!,{r0-r3,link}
 8940        SUB     sp,sp,#8
 8950        LDR     r0,score
 8960        MOV     r1,sp
 8970        MOV     r2,#8
 8980        SWI     "XOS_ConvertCardinal4"
 8990        SUB     r1,r1,r0
 9000        SWI     &100+31
 9010        RSB     r0,r1,#38
 9020        SWI     "XOS_WriteC"
 9030        SWI     &100+31
 9040        MOV     r0,sp
 9050        SWI     "XOS_Write0"
 9060        ADD     sp,sp,#8
 9070        LDMFD   (sp)!,{r0-r3,pc}
 9080
 9090.score  DCD     0
 9100.energy DCD     0
 9110
 9120.Amov_ptr
 9130        DCD     move_ptr%
 9140.Amov_sprite
 9150        DCD     move_sprite%
 9160.Apat_ptr
 9170        DCD     pat_ptr%
 9180.Apop_dat
 9190        DCD     pop_dat%
 9200.pop_next
 9210        DCD     0
 9220
 9230.add_alien_to_list
 9240        STMFD   (sp)!,{r0-r12,link}
 9250        LDR     r8,free
 9260        CMP     r8,#0
 9270        LDMEQFD (sp)!,{r0-r12,pc}
 9280        LDR     r7,list
 9290        LDR     r14,[r8,#dat_next]
 9300        STR     r14,free
 9310        STR     r7,[r8,#dat_next]
 9320        STR     r8,list
 9330        ADD     r14,r8,#4
 9340        STMIA   r14,{r0-r3}
 9350        MOV     r1,#0
 9360        CMP     r0,#FNidentify_pattern("ship")
 9370        CMPNE   r0,#FNidentify_pattern("bullet")
 9380        CMPNE   r0,#FNidentify_pattern("bomb")
 9390        MOVEQ   r1,#1
 9400        CMP     r0,#FNidentify_pattern("meteor")
 9410        MOVEQ   r1,#2
 9420        STR     r1,[r8,#dat_class]
 9430        MOV     r0,#0
 9440        STR     r0,[r8,#dat_mov_pc]
 9450        STR     r0,[r8,#dat_active]
 9460        STR     r0,[r8,#dat_pat_count]
 9470        MVN     r0,#11
 9480        STR     r0,[r8,#dat_pat_pc]
 9490        MOV     r0,#0
 9500        STR     r0,[r8,#dat_spr]
 9510        LDMFD   (sp)!,{r0-r12,pc}
 9520
 9530.scroll_on
 9540        STMFD   (sp)!,{r0-r7,link}
 9550        LDR     r14,lands_end
 9560        CMP     r10,r14
 9570        LDMGEFD (sp)!,{r0-r7,pc}
 9580        AND     r0,r10,#3
 9590        ADR     r1,bank_dat
 9600        LDR     r0,[r1,r0,LSL #2]
 9610        BIC     r1,r9,#3
 9620        ADD     r0,r0,r1
 9630        ADD     r1,r10,#bytes_per_row
 9640        LDR     r2,land_addr
 9650        LDR     r3,spr_addr
 9660        BL      show_column
 9670        ADD     r9,r9,#1
 9680        CMP     r9,#bytes_per_row
 9690        MOVEQ   r9,#0
 9700        ADD     r10,r10,#1
 9710        LDMFD   (sp)!,{r0-r7,pc}
 9720
 9730.lands_end      EQUD    land_ext-bytes_per_row-16
 9740.spr_addr       EQUD    scene_spr
 9750.land_addr      EQUD    land
 9760
 9770.show_column
 9780        STMFD   (sp)!,{r0-r12,link}
 9790        MOV     r14,r1,LSR #FNlog2(sprite_width)
 9800        AND     r8,r1,#sprite_width-1
 9810        MOV     r6,#no
 9820        MLA     r7,r14,r6,r2
 9830.show_col1
 9840        LDRB    r9,[r7],#1
 9850        LDR     r9,[r3,r9,LSL #2]
 9860        LDR     r14,[r9,#32]
 9870        ADD     r9,r9,r14
 9880        BIC     r14,r8,#3
 9890        ADD     r9,r9,r14
 9900        CMP     r8,#sprite_width-4
 9910        ADDLT   r10,r9,#4
 9920        LDRGEB  r10,[r7,#no-1]
 9930        LDRGE   r10,[r3,r10,LSL #2]
 9940        LDRGE   r14,[r10,#32]
 9950        ADDGE   r10,r10,r14
 9960        AND     r14,r1,#3
 9970        MOV     r14,r14,LSL #3
 9980        RSB     r4,r14,#32
 9990]:FOR z%=0 TO size-1:[OPT pass%
10000        LDR     r11,[r9],#sprite_width
10010        LDR     r12,[r10],#sprite_width
10020        MOV     r11,r11,LSR r14
10030        ORR     r11,r11,r12,LSL r4
10040        STR     r11,[r0],#bytes_per_row
10050]:NEXT z%:[OPT pass%
10060        SUBS    r6,r6,#1
10070        BNE     show_col1
10080        LDMFD   (sp)!,{r0-r12,pc}
10090]
10100bank_dat=FNalloc(16,0)
10110[OPT pass%
10120.copy_bank
10130        STMFD   (sp)!,{r0-r12,link}
10140        AND     r0,r10,#3
10150        ADR     r1,bank_dat
10160        LDR     r10,[r1,r0,LSL #2]
10170        BIC     r9,r9,#3
10180        ADD     r10,r10,r9
10190        ADR     r7,routine
10200        MOV     r8,#bytes_per_row
10210        MVN     r14,#0
10220        ADR     r2,loadi
10230.make_route
10240        CMP     r8,#0
10250        BEQ     made_route
10260        RSB     r6,r9,#bytes_per_row
10270        CMP     r6,r8
10280        MOVGT   r6,r8
10290        CMP     r6,#40
10300        MOVGT   r6,#40
10310        LDMIA   r2,{r3,r4}
10320        MOV     r0,r6,LSR #2
10330        RSB     r0,r0,#10
10340        AND     r3,r3,r14,LSL r0
10350        AND     r4,r4,r14,LSL r0
10360        STMIA   r7!,{r3,r4}
10370        SUB     r8,r8,r6
10380        ADD     r9,r9,r6
10390        CMP     r9,#bytes_per_row
10400        LDREQ   r0,subi
10410        STREQ   r0,[r7],#4
10420        MOVEQ   r9,#0
10430        B       make_route
10440.made_route
10450        ADR     r2,add10
10460        LDMIA   r2,{r3-r6}
10470        ADR     r5,routine-16
10480        SUB     r5,r7,r5
10490        MOV     r5,r5,ASR #2
10500        RSB     r5,r5,#0
10510        BIC     r5,r5,#&FF000000
10520        ORR     r5,r5,#&1A000000
10530        STMIA   r7,{r3-r6}
10540        LDR     r11,vdu_o
10550        MOV     r12,#total_size
10560        BL      routine
10570        LDMFD   (sp)!,{r0-r12,pc}
10580
10590.loadi  LDMIA   r10!,{r0-r9}
10600        STMIA   r11!,{r0-r9}
10610.subi   SUB     r10,r10,#bytes_per_row
10620
10630.add10  ADD     r10,r10,#bytes_per_row
10640        SUBS    r12,r12,#1
10650        DCD     0
10660.reti   MOV     pc,link
10670
10680.swap_banks
10690        STMFD   (sp)!,{r0-r2,link}
10700        MOV     r0,#19
10710        SWI     "XOS_Byte"
10720        MOV     r0,#112
10730        MOV     r1,r11
10740        SWI     "XOS_Byte"
10750        RSB     r11,r11,#3
10760        MOV     r0,#113
10770        MOV     r1,r11
10780        SWI     "XOS_Byte"
10790        ADR     r0,vdu_i
10800        ADR     r1,vdu_o
10810        SWI     "XOS_ReadVduVariables"
10820        LDMFD   (sp)!,{r0-r2,pc}
10830
10840.vdu_i  EQUD    148
10850        EQUD    -1
10860.vdu_o  EQUD    0
10870        EQUD    0
10880
10890.show_sprite
10900        STMFD   (sp)!,{r0-r12,link}
10910        BL      bounds_check_etc
10920        LDMLEFD (sp)!,{r0-r12,pc}
10930.ss_yloop
10940        MOV     r7,r8
10950.ss_xloop
10960        LDR     r0,[r10]
10970        LDR     r1,[r12],#4
10980        BIC     r0,r0,r1
10990        LDR     r1,[r11],#4
11000        ORR     r0,r0,r1
11010        STR     r0,[r10],#4
11020        SUBS    r7,r7,#4
11030        BNE     ss_xloop
11040        SUB     r10,r10,r8
11050        ADD     r10,r10,#160
11060        ADD     r11,r11,r5
11070        ADD     r12,r12,r5
11080        SUBS    r9,r9,#1
11090        BNE     ss_yloop
11100        LDMFD   (sp)!,{r0-r12,pc}
11110
11120.show_sprite_dying
11130        STMFD   (sp)!,{r0-r12,link}
11140        BL      bounds_check_etc
11150        LDMLEFD (sp)!,{r0-r12,pc}
11160        LDR     r11,Afade_tab
11170        CMP     r3,#0
11180        MOVLT   r3,#0
11190        LDR     r11,[r11,r3,LSL #2]
11200        LDR     r14,[r11,#32]
11210        ADD     r11,r11,r14
11220.sd_yloop
11230        MOV     r7,r8
11240.sd_xloop
11250        LDR     r0,[r10]
11260        LDR     r1,[r12],#4
11270        BIC     r0,r0,r1
11280        AND     r2,r9,#7
11290        LDR     r2,[r11,r2,LSL #2]
11300        AND     r2,r2,r1
11310        ORR     r0,r0,r2
11320        STR     r0,[r10],#4
11330        SUBS    r7,r7,#4
11340        BNE     sd_xloop
11350        SUB     r10,r10,r8
11360        ADD     r10,r10,#160
11370        ADD     r11,r11,r5
11380        ADD     r12,r12,r5
11390        SUBS    r9,r9,#1
11400        BNE     sd_yloop
11410        LDMFD   (sp)!,{r0-r12,pc}
11420
11430.Afade_tab
11440        DCD     fade_tab
11450
11460.collide_check
11470        STMFD   (sp)!,{r0-r12,link}
11480        BL      bounds_check_etc
11490        CMPLT   r0,r0
11500        LDMEQFD (sp)!,{r0-r12,pc}
11510.cc_yloop
11520        MOV     r7,r8
11530.cc_xloop
11540        LDR     r0,[r10],#4
11550        LDR     r1,[r12],#4
11560        ANDS    r0,r0,r1
11570        LDMNEFD (sp)!,{r0-r12,pc}
11580        SUBS    r7,r7,#4
11590        BNE     cc_xloop
11600        SUB     r10,r10,r8
11610        ADD     r10,r10,#160
11620        ADD     r12,r12,r5
11630        SUBS    r9,r9,#1
11640        BNE     cc_yloop
11650        LDMFD   (sp)!,{r0-r12,pc}
11660
11670.bounds_check_etc
11680        STMFD   (sp)!,{link}
11690        BIC     r1,r1,#3
11700        LDR     r11,[r0,#32]
11710        ADD     r11,r11,r0
11720        LDR     r12,[r0,#36]
11730        ADD     r12,r12,r0
11740        LDR     r8,[r0,#16]
11750        ADD     r8,r8,#1
11760        MOV     r8,r8,LSL #2
11770        LDR     r9,[r0,#20]
11780        ADD     r9,r9,#1
11790        MOV     r5,#0
11800        CMP     r2,#0
11810        ADDLT   r9,r9,r2
11820        MULLT   r14,r2,r8
11830        SUBLT   r11,r11,r14
11840        SUBLT   r12,r12,r14
11850        MOVLT   r2,#0
11860        ADD     r14,r2,r9
11870        CMP     r14,#240
11880        SUBGT   r14,r14,#240
11890        SUBGT   r9,r9,r14
11900        CMP     r1,#0
11910        ADDLT   r8,r8,r1
11920        SUBLT   r11,r11,r1
11930        SUBLT   r12,r12,r1
11940        SUBLT   r5,r5,r1
11950        MOVLT   r1,#0
11960        ADD     r14,r1,r8
11970        CMP     r14,#160
11980        SUBGT   r14,r14,#160
11990        SUBGT   r8,r8,r14
12000        ADDGT   r5,r5,r14
12010        LDR     r10,vdu_o
12020        ADD     r10,r10,r2,LSL #7
12030        ADD     r10,r10,r2,LSL #5
12040        ADD     r10,r10,r1
12050        CMP     r8,#0
12060        CMPGT   r9,#0
12070        LDMFD   (sp)!,{pc}
12080
12090.inkey  STMFD   (sp)!,{r0,r2,link}
12100        MOV     r0,#129
12110        MOV     r2,#255
12120        SWI     "XOS_Byte"
12130        CMP     r1,#255
12140        LDMFD   (sp)!,{r0,r2,pc}
12150
12160.plot_on_small_screen
12170        STMFD   (sp)!,{r0-r12,link}
12180        ADD     r14,r2,#16
12190        LDMIA   r14,{r8,r9}
12200        ADD     r8,r8,#1
12210        MOV     r8,r8,LSL #2
12220        ADD     r9,r9,#1
12230        ADR     r11,small_screen
12240        ADD     r11,r11,r0
12250        ADD     r11,r11,r1,LSL #6
12260        LDR     r12,[r2,#36]
12270        ADD     r12,r12,r2
12280        LDR     r2,one_one_one_one
12290.plot_small_loop1
12300        MOV     r7,r8
12310.plot_small_loop2
12320        LDR     r0,[r12],#4
12330        AND     r0,r0,r2
12340        LDR     r1,[r11]
12350        ADD     r0,r1,r0
12360        STR     r0,[r11],#4
12370        SUBS    r7,r7,#4
12380        BNE     plot_small_loop2
12390        SUB     r11,r11,r8
12400        ADD     r11,r11,#64
12410        SUBS    r9,r9,#1
12420        BNE     plot_small_loop1
12430        LDMFD   (sp)!,{r0-r12,pc}
12440
12450.check_for_overlap
12460        STMFD   (sp)!,{r0-r12,link}
12470        ADR     r12,small_screen
12480        MOV     r11,#64*48
12490        LDR     r14,two_two_two_two
12500.overlap_loop
12510        LDMIA   r12!,{r0-r7}
12520        TST     r0,r14
12530        TSTEQ   r1,r14
12540        TSTEQ   r2,r14
12550        TSTEQ   r3,r14
12560        TSTEQ   r4,r14
12570        TSTEQ   r5,r14
12580        TSTEQ   r6,r14
12590        TSTEQ   r7,r14
12600        LDMNEFD (sp)!,{r0-r12,pc}
12610        SUBS    r11,r11,#32
12620        BNE     overlap_loop
12630        LDMFD   (sp)!,{r0-r12,pc}
12640
12650.one_one_one_one
12660        DCD     &11111111
12670.two_two_two_two
12680        DCD     &22222222
12690
12700.clear_small_screen
12710        STMFD   (sp)!,{r0-r12,link}
12720        ADR     r12,small_screen
12730        MOV     r11,#64*48
12740        MOV     r0,#0
12750        MOV     r1,#0
12760        MOV     r2,#0
12770        MOV     r3,#0
12780        MOV     r4,#0
12790        MOV     r5,#0
12800        MOV     r6,#0
12810        MOV     r7,#0
12820.clear_small_screen_loop
12830        STMIA   r12!,{r0-r7}
12840        STMIA   r12!,{r0-r7}
12850        STMIA   r12!,{r0-r7}
12860        STMIA   r12!,{r0-r7}
12870        SUBS    r11,r11,#128
12880        BNE     clear_small_screen_loop
12890        LDMFD   (sp)!,{r0-r12,pc}
12900]
12910routine=FNalloc(128,0)
12920small_screen=FNalloc(64*48,0)
12930alien_list=FNalloc(max_aliens*dat_size,0)
12940banks=FNalloc(4*screen_size,0)
12950NEXT pass%
12960ENDPROC
12970:
12980DEF PROCnew_game
12990!score=0
13000PROCnew_round
13010ENDPROC
13020:
13030DEF PROCnew_round
13040FOR i%=0 TO max_aliens-1
13050 a%=alien_list+i%*dat_size
13060 IF i%=max_aliens-1 a%!dat_next=0 ELSE a%!dat_next=a%+dat_size
13070NEXT
13080!list=0
13090!free=alien_list
13100FOR b=0 TO 3
13110 bank_dat!(4*b)=banks+b*screen_size
13120 FOR col%=0 TO bytes_per_row STEP 4
13130  A%=banks+(screen_size*b)+col%
13140  B%=col%+b
13150  C%=land
13160  D%=scene_spr
13170  CALL show_column
13180 NEXT
13190NEXT
13200FOR i%=0 TO pop%-1
13210 a%=pop_dat%+24*i%
13220 go1%=a%!16
13230 go2%=a%!20
13240 IF go1%=-1 THEN
13250  a%!12=a%!4-160
13260 ELSE
13270  IF go2%=-1 THEN
13280   a%!12=a%!4-go1%
13290  ELSE
13300   a%!12=a%!4-(go2%+RND(go1%-go2%)-1)
13310  ENDIF
13320 ENDIF
13330NEXT
13340PROCadd_alien(FNidentify_pattern("ship"),0,32,0)
13350!energy=max_energy
13360ENDPROC
13370:
13380DEF PROCadd_alien(A%,B%,C%,D%)
13390CALL add_alien_to_list
13400ENDPROC
13410:
13420DEF FNalloc(size,align%)
13430WHILE P% MOD 16<>align%
13440 P%+=4
13450ENDWHILE
13460P%+=size
13470=P%-size
13480:
13490DEF FNlog2(a%)=LOG(a%)/LOG(2)

� >Rocky
� by Antony Bruce Lytis
� for 32 bit machines
(� (c) BAU May 1993
2:
<� 9+128
F� 9
P�
Z�"Loading..."
d	�init
n�load_game("Rocky")
x�ass
��set_palette
�high_score=0
��
� � i%=1 � 2
�  ș "OS_Byte",112,i%
�  �
� �
� ș "OS_Byte",113,2
�  �centre(3,"Rocky Trade",15)
� �centre(7,"Keys:",11)
�& �centre(10,"Up     -  A     ",10)
�& �centre(12,"Down   -  Z     ",10)
�& �centre(14,"Fire   -  RETURN",10)
& �centre(16,"Bomb   -  TAB   ",10)
& �centre(18,"Thrust -  SHIFT ",10)
& �centre(20,"Brake  -  SPACE ",10)
". �centre(24,"High score: "+�high_score,11)
,) �centre(29,"Press SPACE to start",1)
6 *FX 15
@
 � � �=32
J
 lives%=3
T �new_game
^ � 1
h �
r  �new_round
|  result=�(game)
�  � result=0 lives%-=1
�  � result=1 �
�   *FX 112,1
�   *FX 113,1
�   �
�!   �centre(8,"Well done!",10)
�2   �centre(12,"You completed your mission",15)
�+   �centre(14,"with flying colours",15)
�/   �centre(20,"Press SPACE to try again",1)
�   � � �=32
�  �
� � result=-1 � lives%=0
�5 � lives%=0 � !score>high_score high_score=!score
� �
�
:
&� �set_palette
07ș "OS_SpriteOp",&118,scenery,"palette" � ,,pal_spr
:� i=0 � 15
D a=pal_spr+44+8*i
N � i,a?1,a?2,a?3
X�
b�
l:
v� �centre(y%,t$,c%)
�� c%
��20-�(t$)/2,y%);t$
��
�:
�� �init
�=� land 64*1024,scenery 64*1024,scene_spr 4*256,temp% &100
�!scenery=64*1024
�scenery!4=0
�scenery!8=16
�scenery!12=16
�max_energy=120
��
�:
� �load_game(game$)
	� in%
in%=�("Games."+game$)
 ȕ � �#in%
* s$=�strip(�#in%)
4 i%=�s$,":")
>
 � i%>0 �
H  r$=�strip(�s$,i%+1))
R  Ȏ �s$,i%-1) �
\   � "Maps":
f    �load_map(r$)
p   � "Sprites":
z    �load_sprites(r$)
�   � "Movement":
�    �load_movement(r$)
�   � "Patterns":
�    �load_patterns(r$)
�   � "Layout":
�    �load_layout(r$)
�  �
� �
��
�	�#in%
��
�:
�� �load_sprites(file$)
2ș "OS_File",5,"Sprites."+file$ � ,,,,spr_len%
spr_len%=5*spr_len%
� spr% spr_len%
$!spr%=spr_len%
.spr%!4=0
8
spr%!8=16
Bspr%!12=16
L/ș "OS_SpriteOp",&10A,spr%,"Sprites."+file$
V,ș "OS_SpriteOp",&108,spr% � ,,,sprites%
`� spr_name$(sprites%-1)
j� i%=0 � sprites%-1
t7 ș "OS_SpriteOp",&10D,spr%,temp%,&100,i%+1 � ,,,j%
~ temp%?j%=13
� spr_name$(i%)=$temp%
��
�� i%=0 � sprites%-1
�7 � spr_name$(i%)<>"!" � �spr_name$(i%),4)<>"fade" �
�J  � �(spr_name$(i%))=12 root$=�spr_name$(i%),11) � root$=spr_name$(i%)
�8  ș "OS_SpriteOp",&11A,spr%,spr_name$(i%),root$+"a"
�  � j%=1 � 3
�   shift$=root$+�(�"a"+j%)
�2   ș "OS_SpriteOp",&11B,spr%,root$+"a",shift$
�   � k%=1 � 2*j%
�+    ș "OS_SpriteOp",&12D,spr%,shift$,0
�   �
  �

  � j%=0 � 3
   shift$=root$+�(�"a"+j%)
   �
(4    ș "OS_SpriteOp",&128,spr%,shift$ � ,,,w%,h%
28    � w% � 8<>0 ș "OS_SpriteOp",&12D,spr%,shift$,w%
<   � w% � 8=0
F  �
P �
Z�
dfade_stages%=12
n� fade_tab 4*fade_stages%
x� i%=0 � fade_stages%-1
�B ș "OS_SpriteOp",&118,spr%,"fade"+�(i%+1) � ,,fade_tab!(4*i%)
��
��
�:
�� �load_movement(file$)
�	� in%
�movements%=0
�G� move_name$(255),move_dat% &1000,move_ptr% &400,move_sprite% &1000
�in%=�("Movement."+file$)
�p%=move_dat%
�ȕ � �#in%
� s$=�strip(�#in%)
� � �s$,1)<>";" � s$<>"" �
  par1$=�get_par(s$)
  par2$=�get_par(s$)
  par3$=�get_par(s$)
"*  � par3$="" � par3$=par2$:par2$=par1$
,"  move_name$(movements%)=par1$
6  � i%=0 � 3
@:   ș "OS_SpriteOp",&118,spr%,par2$+�(�"a"+i%) � ,,sa%
J,   move_sprite%!(16*movements%+4*i%)=sa%
T  �
^!  move_ptr%!(4*movements%)=p%
h  par3$=�par3$,3)
r  ȕ par3$<>""
|   a%=�(par3$)
�2   � a%>96 � ?p%=127-(a%-96) � ?p%=127+(a%-64)
�   p%+=1
�   par3$=�par3$,2)
�  �
�  p%?0=&FF
�  p%?1=&FF
�  p%+=2
�  movements%+=1
� �
��
�	�#in%
��
�:
� �identify_movement(move$)
� i%,found%
found%=�
&i%=0
0� move$="(LOOP)" � =-2
:ȕ i%<movements% � � found%
D. � move_name$(i%)=move$ � found%=� � i%+=1
N�
X6� � found% � � 0,"Don't know movement '"+move$+"'"
b=i%
l:
v� �identify_pattern(pat$)
�� i%,found%
�found%=�
�i%=0
�ȕ i%<patterns% � � found%
�, � pat_name$(i%)=pat$ � found%=� � i%+=1
��
�4� � found% � � 0,"Don't know pattern '"+pat$+"'"
�=i%
�:
�� �get_par(� s$)
�� p$,i%
�s$=�strip(s$)
�i%=�s$," ")
L� i%=0 � p$=�strip(s$):s$="" � p$=�strip(�s$,i%-1)):s$=�strip(�s$,i%+1))
=p$
:
 � �load_layout(file$)
*	� in%
4in%=�("Layout."+file$)
>	m%=-1
Hmax_pop%=1024
R7� layout_pat%(255),pop_dat% 24*max_pop%,lay_par%(5)
\
pop%=0
fline%=0
pbad$=""
zȕ � �#in% � bad$=""
� s$=�strip(�#in%)
� Ȏ s$ �
�  � "Patterns:":m%=0
�  � "Layout:":m%=1
� 
�  � s$<>"" �
�   Ȏ m% �
�    � 0:
�     i%=�s$," ")
�G     layout_pat%(�(�s$,i%+1)))=�identify_pattern(�strip(�s$,i%-1)))
�    � 1:
�     � i%=0 � 5
�      � i%=3 i%+=1
	'      lay_par%(i%)=�get_num_par(s$)
	
     �
	F     � lay_par%(2)=-1 bad$="not enough parameters":bad_line%=line%
	$-     lay_par%(0)=layout_pat%(lay_par%(0))
	.$     lay_par%(1)=lay_par%(1) � 2
	8'     lay_par%(2)=240-16-lay_par%(2)
	B     � i%=0 � 5
	L.      pop_dat%!(24*pop%+4*i%)=lay_par%(i%)
	V
     �
	`     pop%+=1
	j   
	tB    � �s$,1)<>";" � s$<>"" bad$="syntax error":bad_line%=line%
	~   �
	�  �
	� �
	�
 line%+=1
	��
	�	�#in%
	�G� bad$<>"" � 0,"Error in layout file: "+bad$+" at line "+�bad_line%
	�pop_dat%!(24*pop%)=-1
	��
	�:
	�� �get_num_par(� s$)
	�� n%
	�s$=�strip(s$)
� s$="" � =-1

n%=�(s$)
s$=�s$,�s$," ")+1)
=n%
(:
2� �load_patterns(file$)
<	� in%
F1� pat_name$(255),pat_dat% &1000,pat_ptr% &400
Ppatterns%=0
Zp%=pat_dat%
dbad$=""
nin%=�("Patterns."+file$)
xline%=0
�cur_pat%=-1
�ȕ � �#in%
�
 s$=�#in%
� � �s$,1)<>";" � s$<>"" �
�  � �s$,1)<>" " �
�$   � cur_pat%<>-1 � !p%=-1:p%+=4
�   cur_pat%=patterns%
�'   pat_name$(cur_pat%)=�get_par(s$)
�   pat_ptr%!(4*cur_pat%)=p%
�   patterns%+=1
�  �
�  � s$<>"" � patterns%=0 �
�   bad$="syntax error"
   bad_line%=line%
  �
   par1$=�get_par(s$)
"   par2$=�get_par(s$)
,   par3$=�get_par(s$)
6$   !p%=�identify_movement(par1$)
@*   � par2$<>"" p%!4=�(par2$) � p%!4=-1
J*   � par3$<>"" p%!8=�(par3$) � p%!8=-1
T
   p%+=12
^  �
h �
r
 line%+=1
|�
�	�#in%
�H� bad$<>"" � 0,"Error in pattern file: "+bad$+" at line "+�bad_line%
�!p%=-1:p%+=4
��
�:
�� �load_map(file$)
�	� in%
�in%=�("Maps."+file$)
�x%=0
�m%=0
�� i=0 � 255
� scene_spr!(4*i)=-1
��
ȕ � �#in%
 s$=�strip(�#in%)
 � s$<>"" �
&
  Ȏ s$ �
0   � "Files:":m%=1
:   � "Used:":m%=2
D   � "Map:":m%=3
N   � "Type:":m%=4
X  
b   Ȏ m% �
l7    � 1:ș "OS_SpriteOp",&10B,scenery,"Scenery."+s$
v    � 2:
�     i=�("&"+�s$,2))
�     s$=�strip(�s$,3))
�0     ș "OS_SpriteOp",&118,scenery,s$ � ,,d%
�     scene_spr!(4*i)=d%
�     � s$="blank" �
�      blnk=i
�7      ș "OS_SpriteOp",&128,scenery,s$ � ,,,,,,mode
�
     �
�    � 3:
�     dash%=�s$,"-")
�     � dash%>0 �
�      s1$=�s$,dash%-1)
�      s3$=�s$,dash%+1)

      s2$=�"0"+�~blnk,2)

*      s$=s1$+�no-�(s1$+s3$)/2,s2$)+s3$


     �

      a%=land+no*x%

*     � i=0 � no-1

4      a%?i=blnk

>
     �

H     y%=no-1

R     ȕ s$<>""

\      a%?y%=�("&"+�s$,2))

f      s$=�s$,3)

p      y%-=1

z
     �

�     x%+=1

�    � 4:

�     size=��s$,2)

�     � �s$,1)="H" �

�3      � size=32 total_size=224 � total_size=240

�
     �

�3      � 17,"Only horizontal landscapes please!"

�
     �

�     no=total_size � size

�   �

�  �

� �

��
5ș "OS_ReadModeVariable",mode,6 � ,,bytes_per_row
(screen_size=total_size*bytes_per_row
6� mode=9 sprite_width=size � 2 � sprite_width=size
$land_ext=x%*sprite_width
.� i=0 � 255
80 � scene_spr!(4*i)=-1 � scene_spr!(4*i)=blnk
B�
L	�#in%
V�
`:
j� �strip(s$)
tȕ �s$,1)=" "
~ s$=�s$,2)
��
�ȕ �s$)=" "
� s$=�s$)
��
�=s$
�:
�
� �ass
�dat_next=0
�dat_type=4
�dat_x=8
�dat_y=12
�
dat_go=16
dat_pat_pc=20

dat_mov_pc=24
dat_active=28
dat_pat_count=32
(dat_class=36
2dat_spr=40
<dat_size=44
Fmax_aliens=96
P� code% &4000+4*screen_size
Zsp=13:link=14:pc=15
d� pass%=0 � 2 � 2
nP%=code%
x[OPT pass%
�'.game   STMFD   (sp)!,{r0-r12,link}
�        LDR     r0,Apop_dat
�        STR     r0,pop_next
�        MOV     r9,#0
�        MOV     r10,#0
�'        STR     r10,life_lost_count
�&        STR     r10,finished_count
�        MOV     r11,#1
�.game_loop
�        BL      swap_banks
�        BL      copy_bank
�%        LDR     r0,finished_count
�        CMP     r0,#0
         BEQ     not_finished
        SUBS    r0,r0,#1
%        STR     r0,finished_count
"         BNE     not_finished
,'        LDMFD   (sp)!,{r0-r12,link}
6        MOV     r0,#1
@        MOV     pc,link
J.not_finished
T&        LDR     r0,life_lost_count
^        CMP     r0,#0
h!        BEQ     not_life_lost
r        SUBS    r0,r0,#1
|&        STR     r0,life_lost_count
�        BNE     nearly_over
�'        LDMFD   (sp)!,{r0-r12,link}
�        MOV     r0,#0
�        MOV     pc,link
�.not_life_lost
�        BL      scroll_on
�.nearly_over
�        BL      do_aliens
�         BL      back_collide
�         BL      fore_collide
�        BL      show_aliens
�!        LDR     r0,fire_count
�        CMP     r0,#0
        SUBGT   r0,r0,#1
!        STRGT   r0,fire_count
        LDR     r0,energy
&        TST     r10,#31
0        BNE     no_drain
:        SUBS    r0,r0,#1
D        MOVMI   r0,#0
N        STR     r0,energy
X
.no_drain
b        BL      show_energy
l        BL      show_score
v)        SWI     "XOS_ReadEscapeState"
�        BCC     game_loop
�        MOV     r0,#126
�        SWI     "XOS_Byte"
�'        LDMFD   (sp)!,{r0-r12,link}
�        MVN     r0,#0
�        MOV     pc,link
�
�.life_lost_count
�        DCD     0
�.finished_count
�        DCD     0
�
�
.bomb_key
        DCD     0
.fire_count
        DCD     0
 
*.do_aliens
4'        STMFD   (sp)!,{r0-r12,link}
>        LDR     r6,pop_next
H"        ADD     r5,r10,#160+16
R.check_for_new_entries
\        LDMIA   r6,{r0-r3}
f        CMP     r0,#0
p$        BLT     done_new_entries
z        CMP     r1,r5
�$        BGE     done_new_entries
�%        BL      add_alien_to_list
�        ADD     r6,r6,#24
�)        B       check_for_new_entries
�.done_new_entries
�        STR     r6,pop_next
�        ADR     r7,list
�        LDR     r8,list
�.do_alien_loop
�        CMP     r8,#0
�%        LDMEQFD (sp)!,{r0-r12,pc}
�
�'        LDR     r0,[r8,#dat_active]
        CMP     r0,#0
"        BLT     alien_is_dying
#        BGT     alien_is_active
$#        LDR     r0,[r8,#dat_go]
.        CMP     r10,r0
8#        BLT     alien_is_active
B        MOV     r0,#1
L'        STR     r0,[r8,#dat_active]
V#        B       alien_is_active
`.alien_is_dying
j        ADDS    r0,r0,#1
t'        STR     r0,[r8,#dat_active]
~         BEQ     alien_is_off
�!        B       do_next_alien
�.alien_is_active
�"        LDR     r2,[r8,#dat_x]
�"        LDR     r3,[r8,#dat_y]
�        SUB     r14,r10,#32
�        CMP     r2,r14
�         BLT     alien_is_off
�#        ADD     r14,r10,#160+48
�        CMP     r2,r14
�         BGT     alien_is_off
�        CMP     r3,#256+16
�         BGT     alien_is_off
        CMN     r3,#15

         BLT     alien_is_off

%        LDR     r4,[r8,#dat_type]
(1        CMP     r4,#�identify_pattern("ship")
2        BNE     not_ship
<        MOV     r1,#256-1
F        BL      inkey
P        ADDEQ   r2,r2,#2
Z        SUBNE   r2,r2,#1
d        MOV     r1,#256-99
n        BL      inkey
x        SUBEQ   r2,r2,#1
�        LDR     r0,energy
�        CMP     r0,#0
�        ADDLE   r3,r3,#2
�!        BLE     drop_from_sky
�        MOV     r1,#256-66
�        BL      inkey
�        SUBEQ   r3,r3,#2
�        MOV     r1,#256-98
�        BL      inkey
�        ADDEQ   r3,r3,#2
�.drop_from_sky
�         ADD     r14,r10,#120
�        CMP     r2,r14
        MOVGT   r2,r14
        CMP     r2,r10
        MOVLT   r2,r10
"        CMP     r3,#0
,        MOVLT   r3,#0
6        CMP     r3,#240-11
@        MOVGT   r3,#240-11
J!        ADD     r14,r8,#dat_x
T        STMIA   r14,{r2,r3}
^!        LDR     r1,fire_count
h        CMP     r1,#0
r        BNE     dont_fire
|        MOV     r1,#256-74
�        BL      inkey
�        BNE     dont_fire
�!        STMFD   (sp)!,{r2-r3}
�3        MOV     r0,#�identify_pattern("bullet")
�        ADD     r1,r2,#18
�        ADD     r2,r3,#5
�        MOV     r3,#0
�%        BL      add_alien_to_list
�        MOV     r1,#10
�!        STR     r1,fire_count
�!        LDMFD   (sp)!,{r2-r3}
�.dont_fire
�        MOV     r1,#256-97
        BL      inkey
        �Q   r0,#1
        MOVNE   r0,#0
&         LDR     r14,bomb_key
0        CMP     r0,r14
:        BEQ     dont_drop
D        STR     r0,bomb_key
N        CMP     r0,#1
X        BNE     dont_drop
b1        MOV     r0,#�identify_pattern("bomb")
l        ADD     r1,r2,#8
v        ADD     r2,r3,#8
�        MOV     r3,#0
�%        BL      add_alien_to_list
�.dont_drop
�        B       apply_pat
�
.not_ship
�.apply_pat
�        LDR     r1,Apat_ptr
�%        LDR     r4,[r1,r4,LSL #2]
�'        LDR     r3,[r8,#dat_pat_pc]
�        CMP     r3,#0
�        BLT     next_mov
�*        LDR     r0,[r8,#dat_pat_count]
�        CMP     r0,#0
         BNE     not_next_mov

.next_mov
        ADD     r3,r3,#12
 .do_pat_loop
*        ADD     r14,r4,r3
4        LDR     r0,[r14,#0]
>        CMN     r0,#1
H         BEQ     alien_is_off
R        MOVLT   r3,#0
\        BLT     do_pat_loop
f        LDR     r0,[r14,#4]
p*        STR     r0,[r8,#dat_pat_count]
z.not_next_mov
�'        STR     r3,[r8,#dat_pat_pc]
�        LDR     r5,[r4,r3]
�        CMP     r5,#0
�         BLT     alien_is_off
�
�        LDR     r1,Amov_ptr
�%        LDR     r1,[r1,r5,LSL #2]
�'        LDR     r2,[r8,#dat_mov_pc]
�"        LDR     r3,[r8,#dat_x]
�"        LDR     r4,[r8,#dat_y]
�
�'        LDR     r0,[r8,#dat_active]
�        CMP     r0,#0
#        BEQ     skip_alien_move

.cycle_move
$        LDRB    r0,[r1,r2]
.        CMP     r0,#&FF
8!        BNE     not_end_cycle
B*        LDR     r0,[r8,#dat_pat_count]
L        CMP     r0,#0
V        SUBGE   r0,r0,#1
`*        STRGE   r0,[r8,#dat_pat_count]
j        MOV     r2,#0
t        B       cycle_move
~.not_end_cycle
�        ADD     r3,r3,r0
�        SUB     r3,r3,#&7F
�        ADD     r2,r2,#1
�        LDRB    r0,[r1,r2]
�        SUB     r4,r4,r0
�        ADD     r4,r4,#&7F
�        ADD     r2,r2,#1
�'        STR     r2,[r8,#dat_mov_pc]
�"        STR     r3,[r8,#dat_x]
�"        STR     r4,[r8,#dat_y]
�.skip_alien_move
�"        LDR     r0,Amov_sprite
#        ADD     r0,r0,r5,LSL #4

        SUB     r14,r3,r10
        �     r14,r14,#3
&        LDR     r0,[r0,r14,LSL #2]
($        STR     r0,[r8,#dat_spr]
2.do_next_alien
<        MOV     r7,r8
F%        LDR     r8,[r8,#dat_next]
P!        B       do_alien_loop
Z.alien_is_off
d%        LDR     r6,[r8,#dat_next]
n%        STR     r6,[r7,#dat_next]
x        LDR     r5,free
�%        STR     r5,[r8,#dat_next]
�        STR     r8,free
�        MOV     r8,r6
�!        B       do_alien_loop
�
�.show_aliens
�'        STMFD   (sp)!,{r0-r12,link}
�        ADR     r8,list
�.show_aliens_loop
�%        LDR     r8,[r8,#dat_next]
�        CMP     r8,#0
�%        LDMEQFD (sp)!,{r0-r12,pc}
�'        LDR     r0,[r8,#dat_active]
        CMP     r0,#0
        BGE     show_alive
'        ADD     r3,r0,#fade_stages%
"$        LDR     r0,[r8,#dat_spr]
,        CMP     r0,#0
6"        LDRNE   r1,[r8,#dat_x]
@        SUBNE   r1,r1,r10
J"        LDRNE   r2,[r8,#dat_y]
T%        BLNE    show_sprite_dying
^$        B       show_aliens_loop
h.show_alive
r$        LDR     r0,[r8,#dat_spr]
|        CMP     r0,#0
�"        LDRNE   r1,[r8,#dat_x]
�        SUBNE   r1,r1,r10
�"        LDRNE   r2,[r8,#dat_y]
�        BLNE    show_sprite
�$        B       show_aliens_loop
�
�.back_collide
�'        STMFD   (sp)!,{r0-r12,link}
�        ADR     r8,list
�.back_collide_loop
�%        LDR     r8,[r8,#dat_next]
�        CMP     r8,#0
�%        LDMEQFD (sp)!,{r0-r12,pc}
'        LDR     r0,[r8,#dat_active]
        CMP     r0,#0
%        BLE     back_collide_loop
&&        LDR     r0,[r8,#dat_class]
0        CMP     r0,#1
:        CMPNE   r0,#2
D%        BNE     back_collide_loop
N$        LDR     r0,[r8,#dat_spr]
X        CMP     r0,#0
b%        BEQ     back_collide_loop
l"        LDR     r1,[r8,#dat_x]
v        SUB     r1,r1,r10
�"        LDR     r2,[r8,#dat_y]
�!        BL      collide_check
�%        BEQ     back_collide_loop
�%        LDR     r5,[r8,#dat_type]
�1        CMP     r5,#�identify_pattern("ship")
�&        BNE     ship_hasnt_crashed
�$        BL      ship_has_crashed
�%        B       back_collide_loop
�.ship_hasnt_crashed
�$        MVN     r0,#fade_stages%
�'        STR     r0,[r8,#dat_active]
�%        B       back_collide_loop
�
.list   DCD     0
.free   DCD     0

 .ship_has_crashed
*'        STMFD   (sp)!,{r0-r12,link}
4        ADR     r8,list
>.find_ship
H%        LDR     r8,[r8,#dat_next]
R%        LDR     r0,[r8,#dat_type]
\1        CMP     r0,#�identify_pattern("ship")
f        BNE     find_ship
p        MOV     r0,#50
z&        STR     r0,life_lost_count
�"        LDR     r1,[r8,#dat_x]
�"        LDR     r2,[r8,#dat_y]
�        MOV     r3,#0
�6        MOV     r0,#�identify_pattern("shipdead1")
�%        BL      add_alien_to_list
�6        MOV     r0,#�identify_pattern("shipdead2")
�%        BL      add_alien_to_list
�6        MOV     r0,#�identify_pattern("shipdead3")
�%        BL      add_alien_to_list
�6        MOV     r0,#�identify_pattern("shipdead4")
�%        BL      add_alien_to_list
�$        MVN     r0,#fade_stages%
�'        STR     r0,[r8,#dat_active]
%        LDMFD   (sp)!,{r0-r12,pc}

.fore_collide
$'        STMFD   (sp)!,{r0-r12,link}
.        ADR     r8,list
8.fore_collide_loop
B%        LDR     r8,[r8,#dat_next]
L        CMP     r8,#0
V%        LDMEQFD (sp)!,{r0-r12,pc}
`&        LDR     r0,[r8,#dat_class]
j        CMP     r0,#1
t%        BNE     fore_collide_loop
~'        LDR     r0,[r8,#dat_active]
�        CMP     r0,#0
�%        BLT     fore_collide_loop
�%        LDR     r14,[r8,#dat_spr]
�        CMP     r14,#0
�%        BEQ     fore_collide_loop
�        ADD     r14,r14,#16
�        LDMIA   r14,{r6-r7}
�!        ADD     r14,r8,#dat_x
�        LDMIA   r14,{r4,r5}
�        BIC     r4,r4,#3
�        ADD     r6,r6,#1
�#        ADD     r6,r4,r6,LSL #2
        ADD     r7,r7,#1

        ADD     r7,r5,r7
        ADR     r9,list
.fore_collide_loopb
(%        LDR     r9,[r9,#dat_next]
2        CMP     r9,#0
<%        BEQ     fore_collide_loop
F&        LDR     r0,[r9,#dat_class]
P        CMP     r0,#1
Z&        BEQ     fore_collide_loopb
d         BLT     not_a_meteor
n%        LDR     r0,[r8,#dat_type]
x3        CMP     r0,#�identify_pattern("bullet")
�1        CMPNE   r0,#�identify_pattern("bomb")
�&        BEQ     fore_collide_loopb
�.not_a_meteor
�'        LDR     r0,[r9,#dat_active]
�        CMP     r0,#0
�&        BLT     fore_collide_loopb
�%        LDR     r14,[r9,#dat_spr]
�        CMP     r14,#0
�&        BEQ     fore_collide_loopb
�        ADD     r14,r14,#16
�        LDMIA   r14,{r2-r3}
�!        ADD     r14,r9,#dat_x
�        LDMIA   r14,{r0-r1}
        BIC     r0,r0,#3
        ADD     r2,r2,#1
#        ADD     r2,r0,r2,LSL #2
"        ADD     r3,r3,#1
,        ADD     r3,r1,r3
6        CMP     r6,r0
@        CMPGE   r2,r4
J        CMPGE   r7,r1
T        CMPGE   r3,r5
^&        BLT     fore_collide_loopb
h&        BL      clear_small_screen
r!        STMFD   (sp)!,{r4,r5}
|        SUBS    r0,r0,r4
�        MOVPL   r4,#0
�        RSBMI   r4,r0,#0
�        MOVMI   r0,#0
�        SUBS    r1,r1,r5
�        MOVPL   r5,#0
�        RSBMI   r5,r1,#0
�        MOVMI   r1,#0
�$        LDR     r2,[r9,#dat_spr]
�(        BL      plot_on_small_screen
�        MOV     r0,r4
�        MOV     r1,r5
�$        LDR     r2,[r8,#dat_spr]
�(        BL      plot_on_small_screen
 !        LDMFD   (sp)!,{r4,r5}
 %        BL      check_for_overlap
 &        BEQ     fore_collide_loopb
 &$        MVN     r0,#fade_stages%
 0'        STR     r0,[r8,#dat_active]
 :'        STR     r0,[r9,#dat_active]
 D%        LDR     r0,[r8,#dat_type]
 N1        CMP     r0,#�identify_pattern("ship")
 X$        BLEQ    ship_has_crashed
 b        ADR     r10,hit_tab
 l%        LDR     r0,[r9,#dat_type]
 v1        CMP     r0,#�identify_pattern("base")
 �        �Q   r14,#50
 �&        STREQ   r14,finished_count
 �.find_what_we_hit
 �         LDMIA   r10!,{r1-r3}
 �        CMP     r1,#0
 �%        BLT     fore_collide_loop
 �        CMP     r1,r0
 �$        BNE     find_what_we_hit
 �        ADR     r14,score
 �        LDMIA   r14,{r0,r1}
 �        ADD     r0,r0,r2
 �        ADD     r1,r1,r3
 �"        CMP     r1,#max_energy
!"        MOVGT   r1,#max_energy
!        STMIA   r14,{r0,r1}
!%        B       fore_collide_loop
! 
!*.hit_tab
!4-        DCD     �identify_pattern("fuel")
!>        DCD     10
!H        DCD     20
!R-        DCD     �identify_pattern("dish")
!\        DCD     20
!f        DCD     0
!p/        DCD     �identify_pattern("rocket")
!z        DCD     40
!�        DCD     0
!�/        DCD     �identify_pattern("saucer")
!�        DCD     40
!�        DCD     0
!�-        DCD     �identify_pattern("base")
!�        DCD     1000
!�        DCD     0
!�        DCD     -1
!�
!�.show_energy
!�'        STMFD   (sp)!,{r0-r12,link}
!�        LDR     r11,vdu_o
!�        LDR     r8,energy
"        MOV     r7,#0
"        ADD     r11,r11,#4
"#        ADD     r11,r11,#248<<5
"$#        ADD     r11,r11,#248<<7
"..show_energy_loop
"8        MOV     r0,#&FF
"B        CMP     r7,#40
"L        MOVLT   r0,#&BB
"V        CMP     r7,#20
"`        MOVLT   r0,#&AA
"j        CMP     r7,r8
"t        MOVGE   r0,#&00
"~!        STRB    r0,[r11,#160]
"�!        STRB    r0,[r11,#320]
"�!        STRB    r0,[r11,#480]
"�        STRB    r0,[r11],#1
"�        ADD     r7,r7,#1
"�"        CMP     r7,#max_energy
"�$        BLT     show_energy_loop
"�%        LDMFD   (sp)!,{r0-r12,pc}
"�
"�.show_score
"�&        STMFD   (sp)!,{r0-r3,link}
"�        SUB     sp,sp,#8
"�        LDR     r0,score
#        MOV     r1,sp
#
        MOV     r2,#8
#*        SWI     "XOS_ConvertCardinal4"
#        SUB     r1,r1,r0
#(        SWI     &100+31
#2        RSB     r0,r1,#38
#<         SWI     "XOS_WriteC"
#F        SWI     &100+31
#P        MOV     r0,sp
#Z         SWI     "XOS_Write0"
#d        ADD     sp,sp,#8
#n$        LDMFD   (sp)!,{r0-r3,pc}
#x
#�.score  DCD     0
#�.energy DCD     0
#�
#�
.Amov_ptr
#�        DCD     move_ptr%
#�.Amov_sprite
#�         DCD     move_sprite%
#�
.Apat_ptr
#�        DCD     pat_ptr%
#�
.Apop_dat
#�        DCD     pop_dat%
#�
.pop_next
#�        DCD     0
$
$.add_alien_to_list
$'        STMFD   (sp)!,{r0-r12,link}
$"        LDR     r8,free
$,        CMP     r8,#0
$6%        LDMEQFD (sp)!,{r0-r12,pc}
$@        LDR     r7,list
$J&        LDR     r14,[r8,#dat_next]
$T        STR     r14,free
$^%        STR     r7,[r8,#dat_next]
$h        STR     r8,list
$r        ADD     r14,r8,#4
$|        STMIA   r14,{r0-r3}
$�        MOV     r1,#0
$�1        CMP     r0,#�identify_pattern("ship")
$�3        CMPNE   r0,#�identify_pattern("bullet")
$�1        CMPNE   r0,#�identify_pattern("bomb")
$�        �Q   r1,#1
$�3        CMP     r0,#�identify_pattern("meteor")
$�        �Q   r1,#2
$�&        STR     r1,[r8,#dat_class]
$�        MOV     r0,#0
$�'        STR     r0,[r8,#dat_mov_pc]
$�'        STR     r0,[r8,#dat_active]
$�*        STR     r0,[r8,#dat_pat_count]
$�        MVN     r0,#11
%'        STR     r0,[r8,#dat_pat_pc]
%        MOV     r0,#0
%$        STR     r0,[r8,#dat_spr]
%&%        LDMFD   (sp)!,{r0-r12,pc}
%0
%:.scroll_on
%D&        STMFD   (sp)!,{r0-r7,link}
%N!        LDR     r14,lands_end
%X        CMP     r10,r14
%b$        LDMGEFD (sp)!,{r0-r7,pc}
%l        �     r0,r10,#3
%v        ADR     r1,bank_dat
%�%        LDR     r0,[r1,r0,LSL #2]
%�        BIC     r1,r9,#3
%�        ADD     r0,r0,r1
%�)        ADD     r1,r10,#bytes_per_row
%�         LDR     r2,land_addr
%�        LDR     r3,spr_addr
%�        BL      show_column
%�        ADD     r9,r9,#1
%�%        CMP     r9,#bytes_per_row
%�        �Q   r9,#0
%�        ADD     r10,r10,#1
%�$        LDMFD   (sp)!,{r0-r7,pc}
%�
&5.lands_end      EQUD    land_ext-bytes_per_row-16
&%.spr_addr       EQUD    scene_spr
& .land_addr      EQUD    land
& 
&*.show_column
&4'        STMFD   (sp)!,{r0-r12,link}
&>3        MOV     r14,r1,LSR #�log2(sprite_width)
&H'        �     r8,r1,#sprite_width-1
&R        MOV     r6,#no
&\         MLA     r7,r14,r6,r2
&f.show_col1
&p        LDRB    r9,[r7],#1
&z%        LDR     r9,[r3,r9,LSL #2]
&�         LDR     r14,[r9,#32]
&�        ADD     r9,r9,r14
&�        BIC     r14,r8,#3
&�        ADD     r9,r9,r14
&�&        CMP     r8,#sprite_width-4
&�        ADDLT   r10,r9,#4
&�"        LDRGEB  r10,[r7,#no-1]
&�'        LDRGE   r10,[r3,r10,LSL #2]
&�!        LDRGE   r14,[r10,#32]
&�        ADDGE   r10,r10,r14
&�        �     r14,r1,#3
&�"        MOV     r14,r14,LSL #3
&�        RSB     r4,r14,#32
' ]:� z%=0 � size-1:[OPT pass%
'*        LDR     r11,[r9],#sprite_width
'+        LDR     r12,[r10],#sprite_width
'$#        MOV     r11,r11,LSR r14
'.%        �R     r11,r11,r12,LSL r4
'8+        STR     r11,[r0],#bytes_per_row
'B]:� z%:[OPT pass%
'L        SUBS    r6,r6,#1
'V        BNE     show_col1
'`%        LDMFD   (sp)!,{r0-r12,pc}
'j]
'tbank_dat=�alloc(16,0)
'~[OPT pass%
'�.copy_bank
'�'        STMFD   (sp)!,{r0-r12,link}
'�        �     r0,r10,#3
'�        ADR     r1,bank_dat
'�&        LDR     r10,[r1,r0,LSL #2]
'�        BIC     r9,r9,#3
'�        ADD     r10,r10,r9
'�        ADR     r7,routine
'�%        MOV     r8,#bytes_per_row
'�        MVN     r14,#0
'�        ADR     r2,loadi
'�.make_route
(        CMP     r8,#0
(
        BEQ     made_route
((        RSB     r6,r9,#bytes_per_row
(        CMP     r6,r8
((        MOVGT   r6,r8
(2        CMP     r6,#40
(<        MOVGT   r6,#40
(F        LDMIA   r2,{r3,r4}
(P         MOV     r0,r6,LSR #2
(Z        RSB     r0,r0,#10
(d"        �     r3,r3,r14,LSL r0
(n"        �     r4,r4,r14,LSL r0
(x        STMIA   r7!,{r3,r4}
(�        SUB     r8,r8,r6
(�        ADD     r9,r9,r6
(�%        CMP     r9,#bytes_per_row
(�        LDREQ   r0,subi
(�        STREQ   r0,[r7],#4
(�        �Q   r9,#0
(�        B       make_route
(�.made_route
(�        ADR     r2,add10
(�        LDMIA   r2,{r3-r6}
(�!        ADR     r5,routine-16
(�        SUB     r5,r7,r5
(�         MOV     r5,r5,ASR #2
)        RSB     r5,r5,#0
)$        BIC     r5,r5,#&FF000000
)#        �R     r5,r5,#&1A000000
)"        STMIA   r7,{r3-r6}
),        LDR     r11,vdu_o
)6#        MOV     r12,#total_size
)@        BL      routine
)J%        LDMFD   (sp)!,{r0-r12,pc}
)T
)^ .loadi  LDMIA   r10!,{r0-r9}
)h         STMIA   r11!,{r0-r9}
)r*.subi   SUB     r10,r10,#bytes_per_row
)|
)�*.add10  ADD     r10,r10,#bytes_per_row
)�        SUBS    r12,r12,#1
)�        DCD     0
)�.reti   MOV     pc,link
)�
)�.swap_banks
)�&        STMFD   (sp)!,{r0-r2,link}
)�        MOV     r0,#19
)�        SWI     "XOS_Byte"
)�        MOV     r0,#112
)�        MOV     r1,r11
)�        SWI     "XOS_Byte"
)�        RSB     r11,r11,#3
*        MOV     r0,#113
*        MOV     r1,r11
*        SWI     "XOS_Byte"
*&        ADR     r0,vdu_i
*0        ADR     r1,vdu_o
*:*        SWI     "XOS_ReadVduVariables"
*D$        LDMFD   (sp)!,{r0-r2,pc}
*N
*X.vdu_i  EQUD    148
*b        EQUD    -1
*l.vdu_o  EQUD    0
*v        EQUD    0
*�
*�.show_sprite
*�'        STMFD   (sp)!,{r0-r12,link}
*�$        BL      bounds_check_etc
*�%        LDMLEFD (sp)!,{r0-r12,pc}
*�
.ss_yloop
*�        MOV     r7,r8
*�
.ss_xloop
*�        LDR     r0,[r10]
*�        LDR     r1,[r12],#4
*�        BIC     r0,r0,r1
*�        LDR     r1,[r11],#4
*�        �R     r0,r0,r1
+        STR     r0,[r10],#4
+        SUBS    r7,r7,#4
+        BNE     ss_xloop
+         SUB     r10,r10,r8
+*         ADD     r10,r10,#160
+4        ADD     r11,r11,r5
+>        ADD     r12,r12,r5
+H        SUBS    r9,r9,#1
+R        BNE     ss_yloop
+\%        LDMFD   (sp)!,{r0-r12,pc}
+f
+p.show_sprite_dying
+z'        STMFD   (sp)!,{r0-r12,link}
+�$        BL      bounds_check_etc
+�%        LDMLEFD (sp)!,{r0-r12,pc}
+�!        LDR     r11,Afade_tab
+�        CMP     r3,#0
+�        MOVLT   r3,#0
+�'        LDR     r11,[r11,r3,LSL #2]
+�!        LDR     r14,[r11,#32]
+�        ADD     r11,r11,r14
+�
.sd_yloop
+�        MOV     r7,r8
+�
.sd_xloop
+�        LDR     r0,[r10]
+�        LDR     r1,[r12],#4
,        BIC     r0,r0,r1
,        �     r2,r9,#7
,&        LDR     r2,[r11,r2,LSL #2]
,$        �     r2,r2,r1
,.        �R     r0,r0,r2
,8        STR     r0,[r10],#4
,B        SUBS    r7,r7,#4
,L        BNE     sd_xloop
,V        SUB     r10,r10,r8
,`         ADD     r10,r10,#160
,j        ADD     r11,r11,r5
,t        ADD     r12,r12,r5
,~        SUBS    r9,r9,#1
,�        BNE     sd_yloop
,�%        LDMFD   (sp)!,{r0-r12,pc}
,�
,�.Afade_tab
,�        DCD     fade_tab
,�
,�.collide_check
,�'        STMFD   (sp)!,{r0-r12,link}
,�$        BL      bounds_check_etc
,�        CMPLT   r0,r0
,�%        LDMEQFD (sp)!,{r0-r12,pc}
,�
.cc_yloop
-        MOV     r7,r8
-

.cc_xloop
-        LDR     r0,[r10],#4
-        LDR     r1,[r12],#4
-(        �S    r0,r0,r1
-2%        LDMNEFD (sp)!,{r0-r12,pc}
-<        SUBS    r7,r7,#4
-F        BNE     cc_xloop
-P        SUB     r10,r10,r8
-Z         ADD     r10,r10,#160
-d        ADD     r12,r12,r5
-n        SUBS    r9,r9,#1
-x        BNE     cc_yloop
-�%        LDMFD   (sp)!,{r0-r12,pc}
-�
-�.bounds_check_etc
-�         STMFD   (sp)!,{link}
-�        BIC     r1,r1,#3
-�         LDR     r11,[r0,#32]
-�        ADD     r11,r11,r0
-�         LDR     r12,[r0,#36]
-�        ADD     r12,r12,r0
-�        LDR     r8,[r0,#16]
-�        ADD     r8,r8,#1
-�         MOV     r8,r8,LSL #2
-�        LDR     r9,[r0,#20]
.        ADD     r9,r9,#1
.        MOV     r5,#0
.        CMP     r2,#0
."        ADDLT   r9,r9,r2
.,        MULLT   r14,r2,r8
.6        SUBLT   r11,r11,r14
.@        SUBLT   r12,r12,r14
.J        MOVLT   r2,#0
.T        ADD     r14,r2,r9
.^        CMP     r14,#240
.h         SUBGT   r14,r14,#240
.r        SUBGT   r9,r9,r14
.|        CMP     r1,#0
.�        ADDLT   r8,r8,r1
.�        SUBLT   r11,r11,r1
.�        SUBLT   r12,r12,r1
.�        SUBLT   r5,r5,r1
.�        MOVLT   r1,#0
.�        ADD     r14,r1,r8
.�        CMP     r14,#160
.�         SUBGT   r14,r14,#160
.�        SUBGT   r8,r8,r14
.�        ADDGT   r5,r5,r14
.�        LDR     r10,vdu_o
.�%        ADD     r10,r10,r2,LSL #7
.�%        ADD     r10,r10,r2,LSL #5
/        ADD     r10,r10,r1
/        CMP     r8,#0
/        CMPGT   r9,#0
/&        LDMFD   (sp)!,{pc}
/0
/:&.inkey  STMFD   (sp)!,{r0,r2,link}
/D        MOV     r0,#129
/N        MOV     r2,#255
/X        SWI     "XOS_Byte"
/b        CMP     r1,#255
/l$        LDMFD   (sp)!,{r0,r2,pc}
/v
/�.plot_on_small_screen
/�'        STMFD   (sp)!,{r0-r12,link}
/�        ADD     r14,r2,#16
/�        LDMIA   r14,{r8,r9}
/�        ADD     r8,r8,#1
/�         MOV     r8,r8,LSL #2
/�        ADD     r9,r9,#1
/�$        ADR     r11,small_screen
/�        ADD     r11,r11,r0
/�%        ADD     r11,r11,r1,LSL #6
/�         LDR     r12,[r2,#36]
/�        ADD     r12,r12,r2
/�&        LDR     r2,one_one_one_one
0.plot_small_loop1
0        MOV     r7,r8
0.plot_small_loop2
0         LDR     r0,[r12],#4
0*        �     r0,r0,r2
04        LDR     r1,[r11]
0>        ADD     r0,r1,r0
0H        STR     r0,[r11],#4
0R        SUBS    r7,r7,#4
0\$        BNE     plot_small_loop2
0f        SUB     r11,r11,r8
0p        ADD     r11,r11,#64
0z        SUBS    r9,r9,#1
0�$        BNE     plot_small_loop1
0�%        LDMFD   (sp)!,{r0-r12,pc}
0�
0�.check_for_overlap
0�'        STMFD   (sp)!,{r0-r12,link}
0�$        ADR     r12,small_screen
0�        MOV     r11,#64*48
0�'        LDR     r14,two_two_two_two
0�.overlap_loop
0�         LDMIA   r12!,{r0-r7}
0�        TST     r0,r14
0�        TSTEQ   r1,r14
0�        TSTEQ   r2,r14
1        TSTEQ   r3,r14
1        TSTEQ   r4,r14
1        TSTEQ   r5,r14
1$        TSTEQ   r6,r14
1.        TSTEQ   r7,r14
18%        LDMNEFD (sp)!,{r0-r12,pc}
1B        SUBS    r11,r11,#32
1L         BNE     overlap_loop
1V%        LDMFD   (sp)!,{r0-r12,pc}
1`
1j.one_one_one_one
1t        DCD     &11111111
1~.two_two_two_two
1�        DCD     &22222222
1�
1�.clear_small_screen
1�'        STMFD   (sp)!,{r0-r12,link}
1�$        ADR     r12,small_screen
1�        MOV     r11,#64*48
1�        MOV     r0,#0
1�        MOV     r1,#0
1�        MOV     r2,#0
1�        MOV     r3,#0
1�        MOV     r4,#0
1�        MOV     r5,#0
2        MOV     r6,#0
2
        MOV     r7,#0
2.clear_small_screen_loop
2         STMIA   r12!,{r0-r7}
2(         STMIA   r12!,{r0-r7}
22         STMIA   r12!,{r0-r7}
2<         STMIA   r12!,{r0-r7}
2F         SUBS    r11,r11,#128
2P+        BNE     clear_small_screen_loop
2Z%        LDMFD   (sp)!,{r0-r12,pc}
2d]
2nroutine=�alloc(128,0)
2x small_screen=�alloc(64*48,0)
2�,alien_list=�alloc(max_aliens*dat_size,0)
2�!banks=�alloc(4*screen_size,0)
2�� pass%
2��
2�:
2�� �new_game
2�!score=0
2��new_round
2��
2�:
2�� �new_round
2�� i%=0 � max_aliens-1
2� a%=alien_list+i%*dat_size
3> � i%=max_aliens-1 a%!dat_next=0 � a%!dat_next=a%+dat_size
3�
3!list=0
3"!free=alien_list
3,
� b=0 � 3
36' bank_dat!(4*b)=banks+b*screen_size
3@! � col%=0 � bytes_per_row � 4
3J#  A%=banks+(screen_size*b)+col%
3T  B%=col%+b
3^
  C%=land
3h  D%=scene_spr
3r  � show_column
3| �
3��
3�� i%=0 � pop%-1
3� a%=pop_dat%+24*i%
3� go1%=a%!16
3� go2%=a%!20
3� � go1%=-1 �
3�  a%!12=a%!4-160
3� �
3�  � go2%=-1 �
3�   a%!12=a%!4-go1%
3�  �
3�'   a%!12=a%!4-(go2%+�(go1%-go2%)-1)
3�  �
4 �
4�
40�add_alien(�identify_pattern("ship"),0,32,0)
4&!energy=max_energy
40�
4::
4D� �add_alien(A%,B%,C%,D%)
4N� add_alien_to_list
4X�
4b:
4l� �alloc(size,align%)
4vȕ P% � 16<>align%
4�
 P%+=4
4��
4�P%+=size
4�=P%-size
4�:
4�� �log2(a%)=�(a%)/�(2)
�
00000000  0d 00 0a 0c f4 20 3e 52  6f 63 6b 79 0d 00 14 1b  |..... >Rocky....|
00000010  f4 20 62 79 20 41 6e 74  6f 6e 79 20 42 72 75 63  |. by Antony Bruc|
00000020  65 20 4c 79 74 69 73 0d  00 1e 19 f4 20 66 6f 72  |e Lytis..... for|
00000030  20 33 32 20 62 69 74 20  6d 61 63 68 69 6e 65 73  | 32 bit machines|
00000040  0d 00 28 16 f4 20 28 63  29 20 42 41 55 20 4d 61  |..(.. (c) BAU Ma|
00000050  79 20 31 39 39 33 0d 00  32 05 3a 0d 00 3c 0b eb  |y 1993..2.:..<..|
00000060  20 39 2b 31 32 38 0d 00  46 07 eb 20 39 0d 00 50  | 9+128..F.. 9..P|
00000070  05 87 0d 00 5a 11 f1 22  4c 6f 61 64 69 6e 67 2e  |....Z.."Loading.|
00000080  2e 2e 22 0d 00 64 09 f2  69 6e 69 74 0d 00 6e 17  |.."..d..init..n.|
00000090  f2 6c 6f 61 64 5f 67 61  6d 65 28 22 52 6f 63 6b  |.load_game("Rock|
000000a0  79 22 29 0d 00 78 08 f2  61 73 73 0d 00 82 10 f2  |y")..x..ass.....|
000000b0  73 65 74 5f 70 61 6c 65  74 74 65 0d 00 8c 10 68  |set_palette....h|
000000c0  69 67 68 5f 73 63 6f 72  65 3d 30 0d 00 96 05 f5  |igh_score=0.....|
000000d0  0d 00 a0 0f 20 e3 20 69  25 3d 31 20 b8 20 32 0d  |.... . i%=1 . 2.|
000000e0  00 aa 19 20 20 c8 99 20  22 4f 53 5f 42 79 74 65  |...  .. "OS_Byte|
000000f0  22 2c 31 31 32 2c 69 25  0d 00 b4 07 20 20 db 0d  |",112,i%....  ..|
00000100  00 be 06 20 ed 0d 00 c8  17 20 c8 99 20 22 4f 53  |... ..... .. "OS|
00000110  5f 42 79 74 65 22 2c 31  31 33 2c 32 0d 00 d2 20  |_Byte",113,2... |
00000120  20 f2 63 65 6e 74 72 65  28 33 2c 22 52 6f 63 6b  | .centre(3,"Rock|
00000130  79 20 54 72 61 64 65 22  2c 31 35 29 0d 00 dc 1a  |y Trade",15)....|
00000140  20 f2 63 65 6e 74 72 65  28 37 2c 22 4b 65 79 73  | .centre(7,"Keys|
00000150  3a 22 2c 31 31 29 0d 00  e6 26 20 f2 63 65 6e 74  |:",11)...& .cent|
00000160  72 65 28 31 30 2c 22 55  70 20 20 20 20 20 2d 20  |re(10,"Up     - |
00000170  20 41 20 20 20 20 20 22  2c 31 30 29 0d 00 f0 26  | A     ",10)...&|
00000180  20 f2 63 65 6e 74 72 65  28 31 32 2c 22 44 6f 77  | .centre(12,"Dow|
00000190  6e 20 20 20 2d 20 20 5a  20 20 20 20 20 22 2c 31  |n   -  Z     ",1|
000001a0  30 29 0d 00 fa 26 20 f2  63 65 6e 74 72 65 28 31  |0)...& .centre(1|
000001b0  34 2c 22 46 69 72 65 20  20 20 2d 20 20 52 45 54  |4,"Fire   -  RET|
000001c0  55 52 4e 22 2c 31 30 29  0d 01 04 26 20 f2 63 65  |URN",10)...& .ce|
000001d0  6e 74 72 65 28 31 36 2c  22 42 6f 6d 62 20 20 20  |ntre(16,"Bomb   |
000001e0  2d 20 20 54 41 42 20 20  20 22 2c 31 30 29 0d 01  |-  TAB   ",10)..|
000001f0  0e 26 20 f2 63 65 6e 74  72 65 28 31 38 2c 22 54  |.& .centre(18,"T|
00000200  68 72 75 73 74 20 2d 20  20 53 48 49 46 54 20 22  |hrust -  SHIFT "|
00000210  2c 31 30 29 0d 01 18 26  20 f2 63 65 6e 74 72 65  |,10)...& .centre|
00000220  28 32 30 2c 22 42 72 61  6b 65 20 20 2d 20 20 53  |(20,"Brake  -  S|
00000230  50 41 43 45 20 22 2c 31  30 29 0d 01 22 2e 20 f2  |PACE ",10)..". .|
00000240  63 65 6e 74 72 65 28 32  34 2c 22 48 69 67 68 20  |centre(24,"High |
00000250  73 63 6f 72 65 3a 20 22  2b c3 68 69 67 68 5f 73  |score: "+.high_s|
00000260  63 6f 72 65 2c 31 31 29  0d 01 2c 29 20 f2 63 65  |core,11)..,) .ce|
00000270  6e 74 72 65 28 32 39 2c  22 50 72 65 73 73 20 53  |ntre(29,"Press S|
00000280  50 41 43 45 20 74 6f 20  73 74 61 72 74 22 2c 31  |PACE to start",1|
00000290  29 0d 01 36 0b 20 2a 46  58 20 31 35 0d 01 40 0d  |)..6. *FX 15..@.|
000002a0  20 f5 20 fd 20 a5 3d 33  32 0d 01 4a 0d 20 6c 69  | . . .=32..J. li|
000002b0  76 65 73 25 3d 33 0d 01  54 0e 20 f2 6e 65 77 5f  |ves%=3..T. .new_|
000002c0  67 61 6d 65 0d 01 5e 08  20 fb 20 31 0d 01 68 06  |game..^. . 1..h.|
000002d0  20 f5 0d 01 72 10 20 20  f2 6e 65 77 5f 72 6f 75  | ...r.  .new_rou|
000002e0  6e 64 0d 01 7c 14 20 20  72 65 73 75 6c 74 3d ba  |nd..|.  result=.|
000002f0  28 67 61 6d 65 29 0d 01  86 1a 20 20 e7 20 72 65  |(game)....  . re|
00000300  73 75 6c 74 3d 30 20 6c  69 76 65 73 25 2d 3d 31  |sult=0 lives%-=1|
00000310  0d 01 90 12 20 20 e7 20  72 65 73 75 6c 74 3d 31  |....  . result=1|
00000320  20 8c 0d 01 9a 10 20 20  20 2a 46 58 20 31 31 32  | .....   *FX 112|
00000330  2c 31 0d 01 a4 10 20 20  20 2a 46 58 20 31 31 33  |,1....   *FX 113|
00000340  2c 31 0d 01 ae 08 20 20  20 db 0d 01 b8 21 20 20  |,1....   ....!  |
00000350  20 f2 63 65 6e 74 72 65  28 38 2c 22 57 65 6c 6c  | .centre(8,"Well|
00000360  20 64 6f 6e 65 21 22 2c  31 30 29 0d 01 c2 32 20  | done!",10)...2 |
00000370  20 20 f2 63 65 6e 74 72  65 28 31 32 2c 22 59 6f  |  .centre(12,"Yo|
00000380  75 20 63 6f 6d 70 6c 65  74 65 64 20 79 6f 75 72  |u completed your|
00000390  20 6d 69 73 73 69 6f 6e  22 2c 31 35 29 0d 01 cc  | mission",15)...|
000003a0  2b 20 20 20 f2 63 65 6e  74 72 65 28 31 34 2c 22  |+   .centre(14,"|
000003b0  77 69 74 68 20 66 6c 79  69 6e 67 20 63 6f 6c 6f  |with flying colo|
000003c0  75 72 73 22 2c 31 35 29  0d 01 d6 2f 20 20 20 f2  |urs",15).../   .|
000003d0  63 65 6e 74 72 65 28 32  30 2c 22 50 72 65 73 73  |centre(20,"Press|
000003e0  20 53 50 41 43 45 20 74  6f 20 74 72 79 20 61 67  | SPACE to try ag|
000003f0  61 69 6e 22 2c 31 29 0d  01 e0 0f 20 20 20 f5 20  |ain",1)....   . |
00000400  fd 20 a5 3d 33 32 0d 01  ea 07 20 20 cd 0d 01 f4  |. .=32....  ....|
00000410  1b 20 fd 20 72 65 73 75  6c 74 3d 2d 31 20 84 20  |. . result=-1 . |
00000420  6c 69 76 65 73 25 3d 30  0d 01 fe 35 20 e7 20 6c  |lives%=0...5 . l|
00000430  69 76 65 73 25 3d 30 20  80 20 21 73 63 6f 72 65  |ives%=0 . !score|
00000440  3e 68 69 67 68 5f 73 63  6f 72 65 20 68 69 67 68  |>high_score high|
00000450  5f 73 63 6f 72 65 3d 21  73 63 6f 72 65 0d 02 08  |_score=!score...|
00000460  07 fd 20 a3 0d 02 12 05  e0 0d 02 1c 05 3a 0d 02  |.. ..........:..|
00000470  26 12 dd 20 f2 73 65 74  5f 70 61 6c 65 74 74 65  |&.. .set_palette|
00000480  0d 02 30 37 c8 99 20 22  4f 53 5f 53 70 72 69 74  |..07.. "OS_Sprit|
00000490  65 4f 70 22 2c 26 31 31  38 2c 73 63 65 6e 65 72  |eOp",&118,scener|
000004a0  79 2c 22 70 61 6c 65 74  74 65 22 20 b8 20 2c 2c  |y,"palette" . ,,|
000004b0  70 61 6c 5f 73 70 72 0d  02 3a 0e e3 20 69 3d 30  |pal_spr..:.. i=0|
000004c0  20 b8 20 31 35 0d 02 44  15 20 61 3d 70 61 6c 5f  | . 15..D. a=pal_|
000004d0  73 70 72 2b 34 34 2b 38  2a 69 0d 02 4e 14 20 fb  |spr+44+8*i..N. .|
000004e0  20 69 2c 61 3f 31 2c 61  3f 32 2c 61 3f 33 0d 02  | i,a?1,a?2,a?3..|
000004f0  58 05 ed 0d 02 62 05 e1  0d 02 6c 05 3a 0d 02 76  |X....b....l.:..v|
00000500  17 dd 20 f2 63 65 6e 74  72 65 28 79 25 2c 74 24  |.. .centre(y%,t$|
00000510  2c 63 25 29 0d 02 80 08  fb 20 63 25 0d 02 8a 17  |,c%)..... c%....|
00000520  f1 8a 32 30 2d a9 28 74  24 29 2f 32 2c 79 25 29  |..20-.(t$)/2,y%)|
00000530  3b 74 24 0d 02 94 05 e1  0d 02 9e 05 3a 0d 02 a8  |;t$.........:...|
00000540  0b dd 20 f2 69 6e 69 74  0d 02 b2 3d de 20 6c 61  |.. .init...=. la|
00000550  6e 64 20 36 34 2a 31 30  32 34 2c 73 63 65 6e 65  |nd 64*1024,scene|
00000560  72 79 20 36 34 2a 31 30  32 34 2c 73 63 65 6e 65  |ry 64*1024,scene|
00000570  5f 73 70 72 20 34 2a 32  35 36 2c 74 65 6d 70 25  |_spr 4*256,temp%|
00000580  20 26 31 30 30 0d 02 bc  14 21 73 63 65 6e 65 72  | &100....!scener|
00000590  79 3d 36 34 2a 31 30 32  34 0d 02 c6 0f 73 63 65  |y=64*1024....sce|
000005a0  6e 65 72 79 21 34 3d 30  0d 02 d0 10 73 63 65 6e  |nery!4=0....scen|
000005b0  65 72 79 21 38 3d 31 36  0d 02 da 11 73 63 65 6e  |ery!8=16....scen|
000005c0  65 72 79 21 31 32 3d 31  36 0d 02 e4 12 6d 61 78  |ery!12=16....max|
000005d0  5f 65 6e 65 72 67 79 3d  31 32 30 0d 02 ee 05 e1  |_energy=120.....|
000005e0  0d 02 f8 05 3a 0d 03 02  17 dd 20 f2 6c 6f 61 64  |....:..... .load|
000005f0  5f 67 61 6d 65 28 67 61  6d 65 24 29 0d 03 0c 09  |_game(game$)....|
00000600  ea 20 69 6e 25 0d 03 16  19 69 6e 25 3d 8e 28 22  |. in%....in%=.("|
00000610  47 61 6d 65 73 2e 22 2b  67 61 6d 65 24 29 0d 03  |Games."+game$)..|
00000620  20 0e c8 95 20 ac 20 c5  23 69 6e 25 0d 03 2a 15  | ... . .#in%..*.|
00000630  20 73 24 3d a4 73 74 72  69 70 28 be 23 69 6e 25  | s$=.strip(.#in%|
00000640  29 0d 03 34 10 20 69 25  3d a7 73 24 2c 22 3a 22  |)..4. i%=.s$,":"|
00000650  29 0d 03 3e 0d 20 e7 20  69 25 3e 30 20 8c 0d 03  |)..>. . i%>0 ...|
00000660  48 1a 20 20 72 24 3d a4  73 74 72 69 70 28 c1 73  |H.  r$=.strip(.s|
00000670  24 2c 69 25 2b 31 29 29  0d 03 52 14 20 20 c8 8e  |$,i%+1))..R.  ..|
00000680  20 c0 73 24 2c 69 25 2d  31 29 20 ca 0d 03 5c 10  | .s$,i%-1) ...\.|
00000690  20 20 20 c9 20 22 4d 61  70 73 22 3a 0d 03 66 15  |   . "Maps":..f.|
000006a0  20 20 20 20 f2 6c 6f 61  64 5f 6d 61 70 28 72 24  |    .load_map(r$|
000006b0  29 0d 03 70 13 20 20 20  c9 20 22 53 70 72 69 74  |)..p.   . "Sprit|
000006c0  65 73 22 3a 0d 03 7a 19  20 20 20 20 f2 6c 6f 61  |es":..z.    .loa|
000006d0  64 5f 73 70 72 69 74 65  73 28 72 24 29 0d 03 84  |d_sprites(r$)...|
000006e0  14 20 20 20 c9 20 22 4d  6f 76 65 6d 65 6e 74 22  |.   . "Movement"|
000006f0  3a 0d 03 8e 1a 20 20 20  20 f2 6c 6f 61 64 5f 6d  |:....    .load_m|
00000700  6f 76 65 6d 65 6e 74 28  72 24 29 0d 03 98 14 20  |ovement(r$).... |
00000710  20 20 c9 20 22 50 61 74  74 65 72 6e 73 22 3a 0d  |  . "Patterns":.|
00000720  03 a2 1a 20 20 20 20 f2  6c 6f 61 64 5f 70 61 74  |...    .load_pat|
00000730  74 65 72 6e 73 28 72 24  29 0d 03 ac 12 20 20 20  |terns(r$)....   |
00000740  c9 20 22 4c 61 79 6f 75  74 22 3a 0d 03 b6 18 20  |. "Layout":.... |
00000750  20 20 20 f2 6c 6f 61 64  5f 6c 61 79 6f 75 74 28  |   .load_layout(|
00000760  72 24 29 0d 03 c0 07 20  20 cb 0d 03 ca 06 20 cd  |r$)....  ..... .|
00000770  0d 03 d4 05 ce 0d 03 de  09 d9 23 69 6e 25 0d 03  |..........#in%..|
00000780  e8 05 e1 0d 03 f2 05 3a  0d 03 fc 1a dd 20 f2 6c  |.......:..... .l|
00000790  6f 61 64 5f 73 70 72 69  74 65 73 28 66 69 6c 65  |oad_sprites(file|
000007a0  24 29 0d 04 06 32 c8 99  20 22 4f 53 5f 46 69 6c  |$)...2.. "OS_Fil|
000007b0  65 22 2c 35 2c 22 53 70  72 69 74 65 73 2e 22 2b  |e",5,"Sprites."+|
000007c0  66 69 6c 65 24 20 b8 20  2c 2c 2c 2c 73 70 72 5f  |file$ . ,,,,spr_|
000007d0  6c 65 6e 25 0d 04 10 17  73 70 72 5f 6c 65 6e 25  |len%....spr_len%|
000007e0  3d 35 2a 73 70 72 5f 6c  65 6e 25 0d 04 1a 13 de  |=5*spr_len%.....|
000007f0  20 73 70 72 25 20 73 70  72 5f 6c 65 6e 25 0d 04  | spr% spr_len%..|
00000800  24 12 21 73 70 72 25 3d  73 70 72 5f 6c 65 6e 25  |$.!spr%=spr_len%|
00000810  0d 04 2e 0c 73 70 72 25  21 34 3d 30 0d 04 38 0d  |....spr%!4=0..8.|
00000820  73 70 72 25 21 38 3d 31  36 0d 04 42 0e 73 70 72  |spr%!8=16..B.spr|
00000830  25 21 31 32 3d 31 36 0d  04 4c 2f c8 99 20 22 4f  |%!12=16..L/.. "O|
00000840  53 5f 53 70 72 69 74 65  4f 70 22 2c 26 31 30 41  |S_SpriteOp",&10A|
00000850  2c 73 70 72 25 2c 22 53  70 72 69 74 65 73 2e 22  |,spr%,"Sprites."|
00000860  2b 66 69 6c 65 24 0d 04  56 2c c8 99 20 22 4f 53  |+file$..V,.. "OS|
00000870  5f 53 70 72 69 74 65 4f  70 22 2c 26 31 30 38 2c  |_SpriteOp",&108,|
00000880  73 70 72 25 20 b8 20 2c  2c 2c 73 70 72 69 74 65  |spr% . ,,,sprite|
00000890  73 25 0d 04 60 1b de 20  73 70 72 5f 6e 61 6d 65  |s%..`.. spr_name|
000008a0  24 28 73 70 72 69 74 65  73 25 2d 31 29 0d 04 6a  |$(sprites%-1)..j|
000008b0  17 e3 20 69 25 3d 30 20  b8 20 73 70 72 69 74 65  |.. i%=0 . sprite|
000008c0  73 25 2d 31 0d 04 74 37  20 c8 99 20 22 4f 53 5f  |s%-1..t7 .. "OS_|
000008d0  53 70 72 69 74 65 4f 70  22 2c 26 31 30 44 2c 73  |SpriteOp",&10D,s|
000008e0  70 72 25 2c 74 65 6d 70  25 2c 26 31 30 30 2c 69  |pr%,temp%,&100,i|
000008f0  25 2b 31 20 b8 20 2c 2c  2c 6a 25 0d 04 7e 10 20  |%+1 . ,,,j%..~. |
00000900  74 65 6d 70 25 3f 6a 25  3d 31 33 0d 04 88 19 20  |temp%?j%=13.... |
00000910  73 70 72 5f 6e 61 6d 65  24 28 69 25 29 3d 24 74  |spr_name$(i%)=$t|
00000920  65 6d 70 25 0d 04 92 05  ed 0d 04 9c 17 e3 20 69  |emp%.......... i|
00000930  25 3d 30 20 b8 20 73 70  72 69 74 65 73 25 2d 31  |%=0 . sprites%-1|
00000940  0d 04 a6 37 20 e7 20 73  70 72 5f 6e 61 6d 65 24  |...7 . spr_name$|
00000950  28 69 25 29 3c 3e 22 21  22 20 80 20 c0 73 70 72  |(i%)<>"!" . .spr|
00000960  5f 6e 61 6d 65 24 28 69  25 29 2c 34 29 3c 3e 22  |_name$(i%),4)<>"|
00000970  66 61 64 65 22 20 8c 0d  04 b0 4a 20 20 e7 20 a9  |fade" ....J  . .|
00000980  28 73 70 72 5f 6e 61 6d  65 24 28 69 25 29 29 3d  |(spr_name$(i%))=|
00000990  31 32 20 72 6f 6f 74 24  3d c0 73 70 72 5f 6e 61  |12 root$=.spr_na|
000009a0  6d 65 24 28 69 25 29 2c  31 31 29 20 8b 20 72 6f  |me$(i%),11) . ro|
000009b0  6f 74 24 3d 73 70 72 5f  6e 61 6d 65 24 28 69 25  |ot$=spr_name$(i%|
000009c0  29 0d 04 ba 38 20 20 c8  99 20 22 4f 53 5f 53 70  |)...8  .. "OS_Sp|
000009d0  72 69 74 65 4f 70 22 2c  26 31 31 41 2c 73 70 72  |riteOp",&11A,spr|
000009e0  25 2c 73 70 72 5f 6e 61  6d 65 24 28 69 25 29 2c  |%,spr_name$(i%),|
000009f0  72 6f 6f 74 24 2b 22 61  22 0d 04 c4 10 20 20 e3  |root$+"a"....  .|
00000a00  20 6a 25 3d 31 20 b8 20  33 0d 04 ce 1e 20 20 20  | j%=1 . 3....   |
00000a10  73 68 69 66 74 24 3d 72  6f 6f 74 24 2b bd 28 97  |shift$=root$+.(.|
00000a20  22 61 22 2b 6a 25 29 0d  04 d8 32 20 20 20 c8 99  |"a"+j%)...2   ..|
00000a30  20 22 4f 53 5f 53 70 72  69 74 65 4f 70 22 2c 26  | "OS_SpriteOp",&|
00000a40  31 31 42 2c 73 70 72 25  2c 72 6f 6f 74 24 2b 22  |11B,spr%,root$+"|
00000a50  61 22 2c 73 68 69 66 74  24 0d 04 e2 14 20 20 20  |a",shift$....   |
00000a60  e3 20 6b 25 3d 31 20 b8  20 32 2a 6a 25 0d 04 ec  |. k%=1 . 2*j%...|
00000a70  2b 20 20 20 20 c8 99 20  22 4f 53 5f 53 70 72 69  |+    .. "OS_Spri|
00000a80  74 65 4f 70 22 2c 26 31  32 44 2c 73 70 72 25 2c  |teOp",&12D,spr%,|
00000a90  73 68 69 66 74 24 2c 30  0d 04 f6 08 20 20 20 ed  |shift$,0....   .|
00000aa0  0d 05 00 07 20 20 ed 0d  05 0a 10 20 20 e3 20 6a  |....  .....  . j|
00000ab0  25 3d 30 20 b8 20 33 0d  05 14 1e 20 20 20 73 68  |%=0 . 3....   sh|
00000ac0  69 66 74 24 3d 72 6f 6f  74 24 2b bd 28 97 22 61  |ift$=root$+.(."a|
00000ad0  22 2b 6a 25 29 0d 05 1e  08 20 20 20 f5 0d 05 28  |"+j%)....   ...(|
00000ae0  34 20 20 20 20 c8 99 20  22 4f 53 5f 53 70 72 69  |4    .. "OS_Spri|
00000af0  74 65 4f 70 22 2c 26 31  32 38 2c 73 70 72 25 2c  |teOp",&128,spr%,|
00000b00  73 68 69 66 74 24 20 b8  20 2c 2c 2c 77 25 2c 68  |shift$ . ,,,w%,h|
00000b10  25 0d 05 32 38 20 20 20  20 e7 20 77 25 20 83 20  |%..28    . w% . |
00000b20  38 3c 3e 30 20 c8 99 20  22 4f 53 5f 53 70 72 69  |8<>0 .. "OS_Spri|
00000b30  74 65 4f 70 22 2c 26 31  32 44 2c 73 70 72 25 2c  |teOp",&12D,spr%,|
00000b40  73 68 69 66 74 24 2c 77  25 0d 05 3c 11 20 20 20  |shift$,w%..<.   |
00000b50  fd 20 77 25 20 83 20 38  3d 30 0d 05 46 07 20 20  |. w% . 8=0..F.  |
00000b60  ed 0d 05 50 06 20 cd 0d  05 5a 05 ed 0d 05 64 13  |...P. ...Z....d.|
00000b70  66 61 64 65 5f 73 74 61  67 65 73 25 3d 31 32 0d  |fade_stages%=12.|
00000b80  05 6e 1d de 20 66 61 64  65 5f 74 61 62 20 34 2a  |.n.. fade_tab 4*|
00000b90  66 61 64 65 5f 73 74 61  67 65 73 25 0d 05 78 1b  |fade_stages%..x.|
00000ba0  e3 20 69 25 3d 30 20 b8  20 66 61 64 65 5f 73 74  |. i%=0 . fade_st|
00000bb0  61 67 65 73 25 2d 31 0d  05 82 42 20 c8 99 20 22  |ages%-1...B .. "|
00000bc0  4f 53 5f 53 70 72 69 74  65 4f 70 22 2c 26 31 31  |OS_SpriteOp",&11|
00000bd0  38 2c 73 70 72 25 2c 22  66 61 64 65 22 2b c3 28  |8,spr%,"fade"+.(|
00000be0  69 25 2b 31 29 20 b8 20  2c 2c 66 61 64 65 5f 74  |i%+1) . ,,fade_t|
00000bf0  61 62 21 28 34 2a 69 25  29 0d 05 8c 05 ed 0d 05  |ab!(4*i%).......|
00000c00  96 05 e1 0d 05 a0 05 3a  0d 05 aa 1b dd 20 f2 6c  |.......:..... .l|
00000c10  6f 61 64 5f 6d 6f 76 65  6d 65 6e 74 28 66 69 6c  |oad_movement(fil|
00000c20  65 24 29 0d 05 b4 09 ea  20 69 6e 25 0d 05 be 10  |e$)..... in%....|
00000c30  6d 6f 76 65 6d 65 6e 74  73 25 3d 30 0d 05 c8 47  |movements%=0...G|
00000c40  de 20 6d 6f 76 65 5f 6e  61 6d 65 24 28 32 35 35  |. move_name$(255|
00000c50  29 2c 6d 6f 76 65 5f 64  61 74 25 20 26 31 30 30  |),move_dat% &100|
00000c60  30 2c 6d 6f 76 65 5f 70  74 72 25 20 26 34 30 30  |0,move_ptr% &400|
00000c70  2c 6d 6f 76 65 5f 73 70  72 69 74 65 25 20 26 31  |,move_sprite% &1|
00000c80  30 30 30 0d 05 d2 1c 69  6e 25 3d 8e 28 22 4d 6f  |000....in%=.("Mo|
00000c90  76 65 6d 65 6e 74 2e 22  2b 66 69 6c 65 24 29 0d  |vement."+file$).|
00000ca0  05 dc 10 70 25 3d 6d 6f  76 65 5f 64 61 74 25 0d  |...p%=move_dat%.|
00000cb0  05 e6 0e c8 95 20 ac 20  c5 23 69 6e 25 0d 05 f0  |..... . .#in%...|
00000cc0  15 20 73 24 3d a4 73 74  72 69 70 28 be 23 69 6e  |. s$=.strip(.#in|
00000cd0  25 29 0d 05 fa 1d 20 e7  20 c0 73 24 2c 31 29 3c  |%).... . .s$,1)<|
00000ce0  3e 22 3b 22 20 80 20 73  24 3c 3e 22 22 20 8c 0d  |>";" . s$<>"" ..|
00000cf0  06 04 18 20 20 70 61 72  31 24 3d a4 67 65 74 5f  |...  par1$=.get_|
00000d00  70 61 72 28 73 24 29 0d  06 0e 18 20 20 70 61 72  |par(s$)....  par|
00000d10  32 24 3d a4 67 65 74 5f  70 61 72 28 73 24 29 0d  |2$=.get_par(s$).|
00000d20  06 18 18 20 20 70 61 72  33 24 3d a4 67 65 74 5f  |...  par3$=.get_|
00000d30  70 61 72 28 73 24 29 0d  06 22 2a 20 20 e7 20 70  |par(s$).."*  . p|
00000d40  61 72 33 24 3d 22 22 20  8c 20 70 61 72 33 24 3d  |ar3$="" . par3$=|
00000d50  70 61 72 32 24 3a 70 61  72 32 24 3d 70 61 72 31  |par2$:par2$=par1|
00000d60  24 0d 06 2c 22 20 20 6d  6f 76 65 5f 6e 61 6d 65  |$..,"  move_name|
00000d70  24 28 6d 6f 76 65 6d 65  6e 74 73 25 29 3d 70 61  |$(movements%)=pa|
00000d80  72 31 24 0d 06 36 10 20  20 e3 20 69 25 3d 30 20  |r1$..6.  . i%=0 |
00000d90  b8 20 33 0d 06 40 3a 20  20 20 c8 99 20 22 4f 53  |. 3..@:   .. "OS|
00000da0  5f 53 70 72 69 74 65 4f  70 22 2c 26 31 31 38 2c  |_SpriteOp",&118,|
00000db0  73 70 72 25 2c 70 61 72  32 24 2b bd 28 97 22 61  |spr%,par2$+.(."a|
00000dc0  22 2b 69 25 29 20 b8 20  2c 2c 73 61 25 0d 06 4a  |"+i%) . ,,sa%..J|
00000dd0  2c 20 20 20 6d 6f 76 65  5f 73 70 72 69 74 65 25  |,   move_sprite%|
00000de0  21 28 31 36 2a 6d 6f 76  65 6d 65 6e 74 73 25 2b  |!(16*movements%+|
00000df0  34 2a 69 25 29 3d 73 61  25 0d 06 54 07 20 20 ed  |4*i%)=sa%..T.  .|
00000e00  0d 06 5e 21 20 20 6d 6f  76 65 5f 70 74 72 25 21  |..^!  move_ptr%!|
00000e10  28 34 2a 6d 6f 76 65 6d  65 6e 74 73 25 29 3d 70  |(4*movements%)=p|
00000e20  25 0d 06 68 15 20 20 70  61 72 33 24 3d c1 70 61  |%..h.  par3$=.pa|
00000e30  72 33 24 2c 33 29 0d 06  72 12 20 20 c8 95 20 70  |r3$,3)..r.  .. p|
00000e40  61 72 33 24 3c 3e 22 22  0d 06 7c 12 20 20 20 61  |ar3$<>""..|.   a|
00000e50  25 3d 97 28 70 61 72 33  24 29 0d 06 86 32 20 20  |%=.(par3$)...2  |
00000e60  20 e7 20 61 25 3e 39 36  20 8c 20 3f 70 25 3d 31  | . a%>96 . ?p%=1|
00000e70  32 37 2d 28 61 25 2d 39  36 29 20 8b 20 3f 70 25  |27-(a%-96) . ?p%|
00000e80  3d 31 32 37 2b 28 61 25  2d 36 34 29 0d 06 90 0c  |=127+(a%-64)....|
00000e90  20 20 20 70 25 2b 3d 31  0d 06 9a 16 20 20 20 70  |   p%+=1....   p|
00000ea0  61 72 33 24 3d c1 70 61  72 33 24 2c 32 29 0d 06  |ar3$=.par3$,2)..|
00000eb0  a4 07 20 20 ce 0d 06 ae  0e 20 20 70 25 3f 30 3d  |..  .....  p%?0=|
00000ec0  26 46 46 0d 06 b8 0e 20  20 70 25 3f 31 3d 26 46  |&FF....  p%?1=&F|
00000ed0  46 0d 06 c2 0b 20 20 70  25 2b 3d 32 0d 06 cc 13  |F....  p%+=2....|
00000ee0  20 20 6d 6f 76 65 6d 65  6e 74 73 25 2b 3d 31 0d  |  movements%+=1.|
00000ef0  06 d6 06 20 cd 0d 06 e0  05 ce 0d 06 ea 09 d9 23  |... ...........#|
00000f00  69 6e 25 0d 06 f4 05 e1  0d 06 fe 05 3a 0d 07 08  |in%.........:...|
00000f10  1f dd 20 a4 69 64 65 6e  74 69 66 79 5f 6d 6f 76  |.. .identify_mov|
00000f20  65 6d 65 6e 74 28 6d 6f  76 65 24 29 0d 07 12 0f  |ement(move$)....|
00000f30  ea 20 69 25 2c 66 6f 75  6e 64 25 0d 07 1c 0c 66  |. i%,found%....f|
00000f40  6f 75 6e 64 25 3d a3 0d  07 26 08 69 25 3d 30 0d  |ound%=...&.i%=0.|
00000f50  07 30 1a e7 20 6d 6f 76  65 24 3d 22 28 4c 4f 4f  |.0.. move$="(LOO|
00000f60  50 29 22 20 8c 20 3d 2d  32 0d 07 3a 1f c8 95 20  |P)" . =-2..:... |
00000f70  69 25 3c 6d 6f 76 65 6d  65 6e 74 73 25 20 80 20  |i%<movements% . |
00000f80  ac 20 66 6f 75 6e 64 25  0d 07 44 2e 20 e7 20 6d  |. found%..D. . m|
00000f90  6f 76 65 5f 6e 61 6d 65  24 28 69 25 29 3d 6d 6f  |ove_name$(i%)=mo|
00000fa0  76 65 24 20 8c 20 66 6f  75 6e 64 25 3d b9 20 8b  |ve$ . found%=. .|
00000fb0  20 69 25 2b 3d 31 0d 07  4e 05 ce 0d 07 58 36 e7  | i%+=1..N....X6.|
00000fc0  20 ac 20 66 6f 75 6e 64  25 20 8c 20 85 20 30 2c  | . found% . . 0,|
00000fd0  22 44 6f 6e 27 74 20 6b  6e 6f 77 20 6d 6f 76 65  |"Don't know move|
00000fe0  6d 65 6e 74 20 27 22 2b  6d 6f 76 65 24 2b 22 27  |ment '"+move$+"'|
00000ff0  22 0d 07 62 07 3d 69 25  0d 07 6c 05 3a 0d 07 76  |"..b.=i%..l.:..v|
00001000  1d dd 20 a4 69 64 65 6e  74 69 66 79 5f 70 61 74  |.. .identify_pat|
00001010  74 65 72 6e 28 70 61 74  24 29 0d 07 80 0f ea 20  |tern(pat$)..... |
00001020  69 25 2c 66 6f 75 6e 64  25 0d 07 8a 0c 66 6f 75  |i%,found%....fou|
00001030  6e 64 25 3d a3 0d 07 94  08 69 25 3d 30 0d 07 9e  |nd%=.....i%=0...|
00001040  1e c8 95 20 69 25 3c 70  61 74 74 65 72 6e 73 25  |... i%<patterns%|
00001050  20 80 20 ac 20 66 6f 75  6e 64 25 0d 07 a8 2c 20  | . . found%..., |
00001060  e7 20 70 61 74 5f 6e 61  6d 65 24 28 69 25 29 3d  |. pat_name$(i%)=|
00001070  70 61 74 24 20 8c 20 66  6f 75 6e 64 25 3d b9 20  |pat$ . found%=. |
00001080  8b 20 69 25 2b 3d 31 0d  07 b2 05 ce 0d 07 bc 34  |. i%+=1........4|
00001090  e7 20 ac 20 66 6f 75 6e  64 25 20 8c 20 85 20 30  |. . found% . . 0|
000010a0  2c 22 44 6f 6e 27 74 20  6b 6e 6f 77 20 70 61 74  |,"Don't know pat|
000010b0  74 65 72 6e 20 27 22 2b  70 61 74 24 2b 22 27 22  |tern '"+pat$+"'"|
000010c0  0d 07 c6 07 3d 69 25 0d  07 d0 05 3a 0d 07 da 14  |....=i%....:....|
000010d0  dd 20 a4 67 65 74 5f 70  61 72 28 f8 20 73 24 29  |. .get_par(. s$)|
000010e0  0d 07 e4 0b ea 20 70 24  2c 69 25 0d 07 ee 11 73  |..... p$,i%....s|
000010f0  24 3d a4 73 74 72 69 70  28 73 24 29 0d 07 f8 0f  |$=.strip(s$)....|
00001100  69 25 3d a7 73 24 2c 22  20 22 29 0d 08 02 4c e7  |i%=.s$," ")...L.|
00001110  20 69 25 3d 30 20 8c 20  70 24 3d a4 73 74 72 69  | i%=0 . p$=.stri|
00001120  70 28 73 24 29 3a 73 24  3d 22 22 20 8b 20 70 24  |p(s$):s$="" . p$|
00001130  3d a4 73 74 72 69 70 28  c0 73 24 2c 69 25 2d 31  |=.strip(.s$,i%-1|
00001140  29 29 3a 73 24 3d a4 73  74 72 69 70 28 c1 73 24  |)):s$=.strip(.s$|
00001150  2c 69 25 2b 31 29 29 0d  08 0c 07 3d 70 24 0d 08  |,i%+1))....=p$..|
00001160  16 05 3a 0d 08 20 19 dd  20 f2 6c 6f 61 64 5f 6c  |..:.. .. .load_l|
00001170  61 79 6f 75 74 28 66 69  6c 65 24 29 0d 08 2a 09  |ayout(file$)..*.|
00001180  ea 20 69 6e 25 0d 08 34  1a 69 6e 25 3d 8e 28 22  |. in%..4.in%=.("|
00001190  4c 61 79 6f 75 74 2e 22  2b 66 69 6c 65 24 29 0d  |Layout."+file$).|
000011a0  08 3e 09 6d 25 3d 2d 31  0d 08 48 11 6d 61 78 5f  |.>.m%=-1..H.max_|
000011b0  70 6f 70 25 3d 31 30 32  34 0d 08 52 37 de 20 6c  |pop%=1024..R7. l|
000011c0  61 79 6f 75 74 5f 70 61  74 25 28 32 35 35 29 2c  |ayout_pat%(255),|
000011d0  70 6f 70 5f 64 61 74 25  20 32 34 2a 6d 61 78 5f  |pop_dat% 24*max_|
000011e0  70 6f 70 25 2c 6c 61 79  5f 70 61 72 25 28 35 29  |pop%,lay_par%(5)|
000011f0  0d 08 5c 0a 70 6f 70 25  3d 30 0d 08 66 0b 6c 69  |..\.pop%=0..f.li|
00001200  6e 65 25 3d 30 0d 08 70  0b 62 61 64 24 3d 22 22  |ne%=0..p.bad$=""|
00001210  0d 08 7a 18 c8 95 20 ac  20 c5 23 69 6e 25 20 80  |..z... . .#in% .|
00001220  20 62 61 64 24 3d 22 22  0d 08 84 15 20 73 24 3d  | bad$="".... s$=|
00001230  a4 73 74 72 69 70 28 be  23 69 6e 25 29 0d 08 8e  |.strip(.#in%)...|
00001240  0c 20 c8 8e 20 73 24 20  ca 0d 08 98 18 20 20 c9  |. .. s$ .....  .|
00001250  20 22 50 61 74 74 65 72  6e 73 3a 22 3a 6d 25 3d  | "Patterns:":m%=|
00001260  30 0d 08 a2 16 20 20 c9  20 22 4c 61 79 6f 75 74  |0....  . "Layout|
00001270  3a 22 3a 6d 25 3d 31 0d  08 ac 06 20 7f 0d 08 b6  |:":m%=1.... ....|
00001280  10 20 20 e7 20 73 24 3c  3e 22 22 20 8c 0d 08 c0  |.  . s$<>"" ....|
00001290  0e 20 20 20 c8 8e 20 6d  25 20 ca 0d 08 ca 0c 20  |.   .. m% ..... |
000012a0  20 20 20 c9 20 30 3a 0d  08 d4 14 20 20 20 20 20  |   . 0:....     |
000012b0  69 25 3d a7 73 24 2c 22  20 22 29 0d 08 de 47 20  |i%=.s$," ")...G |
000012c0  20 20 20 20 6c 61 79 6f  75 74 5f 70 61 74 25 28  |    layout_pat%(|
000012d0  bb 28 c1 73 24 2c 69 25  2b 31 29 29 29 3d a4 69  |.(.s$,i%+1)))=.i|
000012e0  64 65 6e 74 69 66 79 5f  70 61 74 74 65 72 6e 28  |dentify_pattern(|
000012f0  a4 73 74 72 69 70 28 c0  73 24 2c 69 25 2d 31 29  |.strip(.s$,i%-1)|
00001300  29 29 0d 08 e8 0c 20 20  20 20 c9 20 31 3a 0d 08  |))....    . 1:..|
00001310  f2 13 20 20 20 20 20 e3  20 69 25 3d 30 20 b8 20  |..     . i%=0 . |
00001320  35 0d 08 fc 16 20 20 20  20 20 20 e7 20 69 25 3d  |5....      . i%=|
00001330  33 20 69 25 2b 3d 31 0d  09 06 27 20 20 20 20 20  |3 i%+=1...'     |
00001340  20 6c 61 79 5f 70 61 72  25 28 69 25 29 3d a4 67  | lay_par%(i%)=.g|
00001350  65 74 5f 6e 75 6d 5f 70  61 72 28 73 24 29 0d 09  |et_num_par(s$)..|
00001360  10 0a 20 20 20 20 20 ed  0d 09 1a 46 20 20 20 20  |..     ....F    |
00001370  20 e7 20 6c 61 79 5f 70  61 72 25 28 32 29 3d 2d  | . lay_par%(2)=-|
00001380  31 20 62 61 64 24 3d 22  6e 6f 74 20 65 6e 6f 75  |1 bad$="not enou|
00001390  67 68 20 70 61 72 61 6d  65 74 65 72 73 22 3a 62  |gh parameters":b|
000013a0  61 64 5f 6c 69 6e 65 25  3d 6c 69 6e 65 25 0d 09  |ad_line%=line%..|
000013b0  24 2d 20 20 20 20 20 6c  61 79 5f 70 61 72 25 28  |$-     lay_par%(|
000013c0  30 29 3d 6c 61 79 6f 75  74 5f 70 61 74 25 28 6c  |0)=layout_pat%(l|
000013d0  61 79 5f 70 61 72 25 28  30 29 29 0d 09 2e 24 20  |ay_par%(0))...$ |
000013e0  20 20 20 20 6c 61 79 5f  70 61 72 25 28 31 29 3d  |    lay_par%(1)=|
000013f0  6c 61 79 5f 70 61 72 25  28 31 29 20 81 20 32 0d  |lay_par%(1) . 2.|
00001400  09 38 27 20 20 20 20 20  6c 61 79 5f 70 61 72 25  |.8'     lay_par%|
00001410  28 32 29 3d 32 34 30 2d  31 36 2d 6c 61 79 5f 70  |(2)=240-16-lay_p|
00001420  61 72 25 28 32 29 0d 09  42 13 20 20 20 20 20 e3  |ar%(2)..B.     .|
00001430  20 69 25 3d 30 20 b8 20  35 0d 09 4c 2e 20 20 20  | i%=0 . 5..L.   |
00001440  20 20 20 70 6f 70 5f 64  61 74 25 21 28 32 34 2a  |   pop_dat%!(24*|
00001450  70 6f 70 25 2b 34 2a 69  25 29 3d 6c 61 79 5f 70  |pop%+4*i%)=lay_p|
00001460  61 72 25 28 69 25 29 0d  09 56 0a 20 20 20 20 20  |ar%(i%)..V.     |
00001470  ed 0d 09 60 10 20 20 20  20 20 70 6f 70 25 2b 3d  |...`.     pop%+=|
00001480  31 0d 09 6a 08 20 20 20  7f 0d 09 74 42 20 20 20  |1..j.   ...tB   |
00001490  20 e7 20 c0 73 24 2c 31  29 3c 3e 22 3b 22 20 80  | . .s$,1)<>";" .|
000014a0  20 73 24 3c 3e 22 22 20  62 61 64 24 3d 22 73 79  | s$<>"" bad$="sy|
000014b0  6e 74 61 78 20 65 72 72  6f 72 22 3a 62 61 64 5f  |ntax error":bad_|
000014c0  6c 69 6e 65 25 3d 6c 69  6e 65 25 0d 09 7e 08 20  |line%=line%..~. |
000014d0  20 20 cb 0d 09 88 07 20  20 cd 0d 09 92 06 20 cb  |  .....  ..... .|
000014e0  0d 09 9c 0d 20 6c 69 6e  65 25 2b 3d 31 0d 09 a6  |.... line%+=1...|
000014f0  05 ce 0d 09 b0 09 d9 23  69 6e 25 0d 09 ba 47 e7  |.......#in%...G.|
00001500  20 62 61 64 24 3c 3e 22  22 20 85 20 30 2c 22 45  | bad$<>"" . 0,"E|
00001510  72 72 6f 72 20 69 6e 20  6c 61 79 6f 75 74 20 66  |rror in layout f|
00001520  69 6c 65 3a 20 22 2b 62  61 64 24 2b 22 20 61 74  |ile: "+bad$+" at|
00001530  20 6c 69 6e 65 20 22 2b  c3 62 61 64 5f 6c 69 6e  | line "+.bad_lin|
00001540  65 25 0d 09 c4 19 70 6f  70 5f 64 61 74 25 21 28  |e%....pop_dat%!(|
00001550  32 34 2a 70 6f 70 25 29  3d 2d 31 0d 09 ce 05 e1  |24*pop%)=-1.....|
00001560  0d 09 d8 05 3a 0d 09 e2  18 dd 20 a4 67 65 74 5f  |....:..... .get_|
00001570  6e 75 6d 5f 70 61 72 28  f8 20 73 24 29 0d 09 ec  |num_par(. s$)...|
00001580  08 ea 20 6e 25 0d 09 f6  11 73 24 3d a4 73 74 72  |.. n%....s$=.str|
00001590  69 70 28 73 24 29 0d 0a  00 11 e7 20 73 24 3d 22  |ip(s$)..... s$="|
000015a0  22 20 8c 20 3d 2d 31 0d  0a 0a 0c 6e 25 3d bb 28  |" . =-1....n%=.(|
000015b0  73 24 29 0d 0a 14 16 73  24 3d c1 73 24 2c a7 73  |s$)....s$=.s$,.s|
000015c0  24 2c 22 20 22 29 2b 31  29 0d 0a 1e 07 3d 6e 25  |$," ")+1)....=n%|
000015d0  0d 0a 28 05 3a 0d 0a 32  1b dd 20 f2 6c 6f 61 64  |..(.:..2.. .load|
000015e0  5f 70 61 74 74 65 72 6e  73 28 66 69 6c 65 24 29  |_patterns(file$)|
000015f0  0d 0a 3c 09 ea 20 69 6e  25 0d 0a 46 31 de 20 70  |..<.. in%..F1. p|
00001600  61 74 5f 6e 61 6d 65 24  28 32 35 35 29 2c 70 61  |at_name$(255),pa|
00001610  74 5f 64 61 74 25 20 26  31 30 30 30 2c 70 61 74  |t_dat% &1000,pat|
00001620  5f 70 74 72 25 20 26 34  30 30 0d 0a 50 0f 70 61  |_ptr% &400..P.pa|
00001630  74 74 65 72 6e 73 25 3d  30 0d 0a 5a 0f 70 25 3d  |tterns%=0..Z.p%=|
00001640  70 61 74 5f 64 61 74 25  0d 0a 64 0b 62 61 64 24  |pat_dat%..d.bad$|
00001650  3d 22 22 0d 0a 6e 1c 69  6e 25 3d 8e 28 22 50 61  |=""..n.in%=.("Pa|
00001660  74 74 65 72 6e 73 2e 22  2b 66 69 6c 65 24 29 0d  |tterns."+file$).|
00001670  0a 78 0b 6c 69 6e 65 25  3d 30 0d 0a 82 0f 63 75  |.x.line%=0....cu|
00001680  72 5f 70 61 74 25 3d 2d  31 0d 0a 8c 0e c8 95 20  |r_pat%=-1...... |
00001690  ac 20 c5 23 69 6e 25 0d  0a 96 0d 20 73 24 3d be  |. .#in%.... s$=.|
000016a0  23 69 6e 25 0d 0a a0 1d  20 e7 20 c0 73 24 2c 31  |#in%.... . .s$,1|
000016b0  29 3c 3e 22 3b 22 20 80  20 73 24 3c 3e 22 22 20  |)<>";" . s$<>"" |
000016c0  8c 0d 0a aa 15 20 20 e7  20 c0 73 24 2c 31 29 3c  |.....  . .s$,1)<|
000016d0  3e 22 20 22 20 8c 0d 0a  b4 24 20 20 20 e7 20 63  |>" " ....$   . c|
000016e0  75 72 5f 70 61 74 25 3c  3e 2d 31 20 8c 20 21 70  |ur_pat%<>-1 . !p|
000016f0  25 3d 2d 31 3a 70 25 2b  3d 34 0d 0a be 19 20 20  |%=-1:p%+=4....  |
00001700  20 63 75 72 5f 70 61 74  25 3d 70 61 74 74 65 72  | cur_pat%=patter|
00001710  6e 73 25 0d 0a c8 27 20  20 20 70 61 74 5f 6e 61  |ns%...'   pat_na|
00001720  6d 65 24 28 63 75 72 5f  70 61 74 25 29 3d a4 67  |me$(cur_pat%)=.g|
00001730  65 74 5f 70 61 72 28 73  24 29 0d 0a d2 1f 20 20  |et_par(s$)....  |
00001740  20 70 61 74 5f 70 74 72  25 21 28 34 2a 63 75 72  | pat_ptr%!(4*cur|
00001750  5f 70 61 74 25 29 3d 70  25 0d 0a dc 13 20 20 20  |_pat%)=p%....   |
00001760  70 61 74 74 65 72 6e 73  25 2b 3d 31 0d 0a e6 07  |patterns%+=1....|
00001770  20 20 cd 0d 0a f0 1e 20  20 e7 20 73 24 3c 3e 22  |  .....  . s$<>"|
00001780  22 20 80 20 70 61 74 74  65 72 6e 73 25 3d 30 20  |" . patterns%=0 |
00001790  8c 0d 0a fa 1a 20 20 20  62 61 64 24 3d 22 73 79  |.....   bad$="sy|
000017a0  6e 74 61 78 20 65 72 72  6f 72 22 0d 0b 04 16 20  |ntax error".... |
000017b0  20 20 62 61 64 5f 6c 69  6e 65 25 3d 6c 69 6e 65  |  bad_line%=line|
000017c0  25 0d 0b 0e 07 20 20 cc  0d 0b 18 19 20 20 20 70  |%....  .....   p|
000017d0  61 72 31 24 3d a4 67 65  74 5f 70 61 72 28 73 24  |ar1$=.get_par(s$|
000017e0  29 0d 0b 22 19 20 20 20  70 61 72 32 24 3d a4 67  |)..".   par2$=.g|
000017f0  65 74 5f 70 61 72 28 73  24 29 0d 0b 2c 19 20 20  |et_par(s$)..,.  |
00001800  20 70 61 72 33 24 3d a4  67 65 74 5f 70 61 72 28  | par3$=.get_par(|
00001810  73 24 29 0d 0b 36 24 20  20 20 21 70 25 3d a4 69  |s$)..6$   !p%=.i|
00001820  64 65 6e 74 69 66 79 5f  6d 6f 76 65 6d 65 6e 74  |dentify_movement|
00001830  28 70 61 72 31 24 29 0d  0b 40 2a 20 20 20 e7 20  |(par1$)..@*   . |
00001840  70 61 72 32 24 3c 3e 22  22 20 70 25 21 34 3d bb  |par2$<>"" p%!4=.|
00001850  28 70 61 72 32 24 29 20  8b 20 70 25 21 34 3d 2d  |(par2$) . p%!4=-|
00001860  31 0d 0b 4a 2a 20 20 20  e7 20 70 61 72 33 24 3c  |1..J*   . par3$<|
00001870  3e 22 22 20 70 25 21 38  3d bb 28 70 61 72 33 24  |>"" p%!8=.(par3$|
00001880  29 20 8b 20 70 25 21 38  3d 2d 31 0d 0b 54 0d 20  |) . p%!8=-1..T. |
00001890  20 20 70 25 2b 3d 31 32  0d 0b 5e 07 20 20 cd 0d  |  p%+=12..^.  ..|
000018a0  0b 68 06 20 cd 0d 0b 72  0d 20 6c 69 6e 65 25 2b  |.h. ...r. line%+|
000018b0  3d 31 0d 0b 7c 05 ce 0d  0b 86 09 d9 23 69 6e 25  |=1..|.......#in%|
000018c0  0d 0b 90 48 e7 20 62 61  64 24 3c 3e 22 22 20 85  |...H. bad$<>"" .|
000018d0  20 30 2c 22 45 72 72 6f  72 20 69 6e 20 70 61 74  | 0,"Error in pat|
000018e0  74 65 72 6e 20 66 69 6c  65 3a 20 22 2b 62 61 64  |tern file: "+bad|
000018f0  24 2b 22 20 61 74 20 6c  69 6e 65 20 22 2b c3 62  |$+" at line "+.b|
00001900  61 64 5f 6c 69 6e 65 25  0d 0b 9a 10 21 70 25 3d  |ad_line%....!p%=|
00001910  2d 31 3a 70 25 2b 3d 34  0d 0b a4 05 e1 0d 0b ae  |-1:p%+=4........|
00001920  05 3a 0d 0b b8 16 dd 20  f2 6c 6f 61 64 5f 6d 61  |.:..... .load_ma|
00001930  70 28 66 69 6c 65 24 29  0d 0b c2 09 ea 20 69 6e  |p(file$)..... in|
00001940  25 0d 0b cc 18 69 6e 25  3d 8e 28 22 4d 61 70 73  |%....in%=.("Maps|
00001950  2e 22 2b 66 69 6c 65 24  29 0d 0b d6 08 78 25 3d  |."+file$)....x%=|
00001960  30 0d 0b e0 08 6d 25 3d  30 0d 0b ea 0f e3 20 69  |0....m%=0..... i|
00001970  3d 30 20 b8 20 32 35 35  0d 0b f4 17 20 73 63 65  |=0 . 255.... sce|
00001980  6e 65 5f 73 70 72 21 28  34 2a 69 29 3d 2d 31 0d  |ne_spr!(4*i)=-1.|
00001990  0b fe 05 ed 0d 0c 08 0e  c8 95 20 ac 20 c5 23 69  |.......... . .#i|
000019a0  6e 25 0d 0c 12 15 20 73  24 3d a4 73 74 72 69 70  |n%.... s$=.strip|
000019b0  28 be 23 69 6e 25 29 0d  0c 1c 0f 20 e7 20 73 24  |(.#in%).... . s$|
000019c0  3c 3e 22 22 20 8c 0d 0c  26 0d 20 20 c8 8e 20 73  |<>"" ...&.  .. s|
000019d0  24 20 ca 0d 0c 30 16 20  20 20 c9 20 22 46 69 6c  |$ ...0.   . "Fil|
000019e0  65 73 3a 22 3a 6d 25 3d  31 0d 0c 3a 15 20 20 20  |es:":m%=1..:.   |
000019f0  c9 20 22 55 73 65 64 3a  22 3a 6d 25 3d 32 0d 0c  |. "Used:":m%=2..|
00001a00  44 14 20 20 20 c9 20 22  4d 61 70 3a 22 3a 6d 25  |D.   . "Map:":m%|
00001a10  3d 33 0d 0c 4e 15 20 20  20 c9 20 22 54 79 70 65  |=3..N.   . "Type|
00001a20  3a 22 3a 6d 25 3d 34 0d  0c 58 07 20 20 7f 0d 0c  |:":m%=4..X.  ...|
00001a30  62 0e 20 20 20 c8 8e 20  6d 25 20 ca 0d 0c 6c 37  |b.   .. m% ...l7|
00001a40  20 20 20 20 c9 20 31 3a  c8 99 20 22 4f 53 5f 53  |    . 1:.. "OS_S|
00001a50  70 72 69 74 65 4f 70 22  2c 26 31 30 42 2c 73 63  |priteOp",&10B,sc|
00001a60  65 6e 65 72 79 2c 22 53  63 65 6e 65 72 79 2e 22  |enery,"Scenery."|
00001a70  2b 73 24 0d 0c 76 0c 20  20 20 20 c9 20 32 3a 0d  |+s$..v.    . 2:.|
00001a80  0c 80 18 20 20 20 20 20  69 3d a0 28 22 26 22 2b  |...     i=.("&"+|
00001a90  c0 73 24 2c 32 29 29 0d  0c 8a 1a 20 20 20 20 20  |.s$,2))....     |
00001aa0  73 24 3d a4 73 74 72 69  70 28 c1 73 24 2c 33 29  |s$=.strip(.s$,3)|
00001ab0  29 0d 0c 94 30 20 20 20  20 20 c8 99 20 22 4f 53  |)...0     .. "OS|
00001ac0  5f 53 70 72 69 74 65 4f  70 22 2c 26 31 31 38 2c  |_SpriteOp",&118,|
00001ad0  73 63 65 6e 65 72 79 2c  73 24 20 b8 20 2c 2c 64  |scenery,s$ . ,,d|
00001ae0  25 0d 0c 9e 1b 20 20 20  20 20 73 63 65 6e 65 5f  |%....     scene_|
00001af0  73 70 72 21 28 34 2a 69  29 3d 64 25 0d 0c a8 17  |spr!(4*i)=d%....|
00001b00  20 20 20 20 20 e7 20 73  24 3d 22 62 6c 61 6e 6b  |     . s$="blank|
00001b10  22 20 8c 0d 0c b2 10 20  20 20 20 20 20 62 6c 6e  |" .....      bln|
00001b20  6b 3d 69 0d 0c bc 37 20  20 20 20 20 20 c8 99 20  |k=i...7      .. |
00001b30  22 4f 53 5f 53 70 72 69  74 65 4f 70 22 2c 26 31  |"OS_SpriteOp",&1|
00001b40  32 38 2c 73 63 65 6e 65  72 79 2c 73 24 20 b8 20  |28,scenery,s$ . |
00001b50  2c 2c 2c 2c 2c 2c 6d 6f  64 65 0d 0c c6 0a 20 20  |,,,,,,mode....  |
00001b60  20 20 20 cd 0d 0c d0 0c  20 20 20 20 c9 20 33 3a  |   .....    . 3:|
00001b70  0d 0c da 17 20 20 20 20  20 64 61 73 68 25 3d a7  |....     dash%=.|
00001b80  73 24 2c 22 2d 22 29 0d  0c e4 14 20 20 20 20 20  |s$,"-")....     |
00001b90  e7 20 64 61 73 68 25 3e  30 20 8c 0d 0c ee 1a 20  |. dash%>0 ..... |
00001ba0  20 20 20 20 20 73 31 24  3d c0 73 24 2c 64 61 73  |     s1$=.s$,das|
00001bb0  68 25 2d 31 29 0d 0c f8  1a 20 20 20 20 20 20 73  |h%-1)....      s|
00001bc0  33 24 3d c1 73 24 2c 64  61 73 68 25 2b 31 29 0d  |3$=.s$,dash%+1).|
00001bd0  0d 02 1c 20 20 20 20 20  20 73 32 24 3d c2 22 30  |...      s2$=."0|
00001be0  22 2b c3 7e 62 6c 6e 6b  2c 32 29 0d 0d 0c 2a 20  |"+.~blnk,2)...* |
00001bf0  20 20 20 20 20 73 24 3d  73 31 24 2b c4 6e 6f 2d  |     s$=s1$+.no-|
00001c00  a9 28 73 31 24 2b 73 33  24 29 2f 32 2c 73 32 24  |.(s1$+s3$)/2,s2$|
00001c10  29 2b 73 33 24 0d 0d 16  0a 20 20 20 20 20 cd 0d  |)+s3$....     ..|
00001c20  0d 20 16 20 20 20 20 20  61 25 3d 6c 61 6e 64 2b  |. .     a%=land+|
00001c30  6e 6f 2a 78 25 0d 0d 2a  15 20 20 20 20 20 e3 20  |no*x%..*.     . |
00001c40  69 3d 30 20 b8 20 6e 6f  2d 31 0d 0d 34 13 20 20  |i=0 . no-1..4.  |
00001c50  20 20 20 20 61 25 3f 69  3d 62 6c 6e 6b 0d 0d 3e  |    a%?i=blnk..>|
00001c60  0a 20 20 20 20 20 ed 0d  0d 48 10 20 20 20 20 20  |.     ...H.     |
00001c70  79 25 3d 6e 6f 2d 31 0d  0d 52 12 20 20 20 20 20  |y%=no-1..R.     |
00001c80  c8 95 20 73 24 3c 3e 22  22 0d 0d 5c 1d 20 20 20  |.. s$<>""..\.   |
00001c90  20 20 20 61 25 3f 79 25  3d a0 28 22 26 22 2b c0  |   a%?y%=.("&"+.|
00001ca0  73 24 2c 32 29 29 0d 0d  66 13 20 20 20 20 20 20  |s$,2))..f.      |
00001cb0  73 24 3d c1 73 24 2c 33  29 0d 0d 70 0f 20 20 20  |s$=.s$,3)..p.   |
00001cc0  20 20 20 79 25 2d 3d 31  0d 0d 7a 0a 20 20 20 20  |   y%-=1..z.    |
00001cd0  20 ce 0d 0d 84 0e 20 20  20 20 20 78 25 2b 3d 31  | .....     x%+=1|
00001ce0  0d 0d 8e 0c 20 20 20 20  c9 20 34 3a 0d 0d 98 15  |....    . 4:....|
00001cf0  20 20 20 20 20 73 69 7a  65 3d bb c1 73 24 2c 32  |     size=..s$,2|
00001d00  29 0d 0d a2 17 20 20 20  20 20 e7 20 c0 73 24 2c  |)....     . .s$,|
00001d10  31 29 3d 22 48 22 20 8c  0d 0d ac 33 20 20 20 20  |1)="H" ....3    |
00001d20  20 20 e7 20 73 69 7a 65  3d 33 32 20 74 6f 74 61  |  . size=32 tota|
00001d30  6c 5f 73 69 7a 65 3d 32  32 34 20 8b 20 74 6f 74  |l_size=224 . tot|
00001d40  61 6c 5f 73 69 7a 65 3d  32 34 30 0d 0d b6 0a 20  |al_size=240.... |
00001d50  20 20 20 20 cc 0d 0d c0  33 20 20 20 20 20 20 85  |    ....3      .|
00001d60  20 31 37 2c 22 4f 6e 6c  79 20 68 6f 72 69 7a 6f  | 17,"Only horizo|
00001d70  6e 74 61 6c 20 6c 61 6e  64 73 63 61 70 65 73 20  |ntal landscapes |
00001d80  70 6c 65 61 73 65 21 22  0d 0d ca 0a 20 20 20 20  |please!"....    |
00001d90  20 cd 0d 0d d4 1d 20 20  20 20 20 6e 6f 3d 74 6f  | .....     no=to|
00001da0  74 61 6c 5f 73 69 7a 65  20 81 20 73 69 7a 65 0d  |tal_size . size.|
00001db0  0d de 08 20 20 20 cb 0d  0d e8 07 20 20 cb 0d 0d  |...   .....  ...|
00001dc0  f2 06 20 cd 0d 0d fc 05  ce 0d 0e 06 35 c8 99 20  |.. .........5.. |
00001dd0  22 4f 53 5f 52 65 61 64  4d 6f 64 65 56 61 72 69  |"OS_ReadModeVari|
00001de0  61 62 6c 65 22 2c 6d 6f  64 65 2c 36 20 b8 20 2c  |able",mode,6 . ,|
00001df0  2c 62 79 74 65 73 5f 70  65 72 5f 72 6f 77 0d 0e  |,bytes_per_row..|
00001e00  10 28 73 63 72 65 65 6e  5f 73 69 7a 65 3d 74 6f  |.(screen_size=to|
00001e10  74 61 6c 5f 73 69 7a 65  2a 62 79 74 65 73 5f 70  |tal_size*bytes_p|
00001e20  65 72 5f 72 6f 77 0d 0e  1a 36 e7 20 6d 6f 64 65  |er_row...6. mode|
00001e30  3d 39 20 73 70 72 69 74  65 5f 77 69 64 74 68 3d  |=9 sprite_width=|
00001e40  73 69 7a 65 20 81 20 32  20 8b 20 73 70 72 69 74  |size . 2 . sprit|
00001e50  65 5f 77 69 64 74 68 3d  73 69 7a 65 0d 0e 24 1c  |e_width=size..$.|
00001e60  6c 61 6e 64 5f 65 78 74  3d 78 25 2a 73 70 72 69  |land_ext=x%*spri|
00001e70  74 65 5f 77 69 64 74 68  0d 0e 2e 0f e3 20 69 3d  |te_width..... i=|
00001e80  30 20 b8 20 32 35 35 0d  0e 38 30 20 e7 20 73 63  |0 . 255..80 . sc|
00001e90  65 6e 65 5f 73 70 72 21  28 34 2a 69 29 3d 2d 31  |ene_spr!(4*i)=-1|
00001ea0  20 8c 20 73 63 65 6e 65  5f 73 70 72 21 28 34 2a  | . scene_spr!(4*|
00001eb0  69 29 3d 62 6c 6e 6b 0d  0e 42 05 ed 0d 0e 4c 09  |i)=blnk..B....L.|
00001ec0  d9 23 69 6e 25 0d 0e 56  05 e1 0d 0e 60 05 3a 0d  |.#in%..V....`.:.|
00001ed0  0e 6a 10 dd 20 a4 73 74  72 69 70 28 73 24 29 0d  |.j.. .strip(s$).|
00001ee0  0e 74 11 c8 95 20 c0 73  24 2c 31 29 3d 22 20 22  |.t... .s$,1)=" "|
00001ef0  0d 0e 7e 0e 20 73 24 3d  c1 73 24 2c 32 29 0d 0e  |..~. s$=.s$,2)..|
00001f00  88 05 ce 0d 0e 92 0f c8  95 20 c2 73 24 29 3d 22  |......... .s$)="|
00001f10  20 22 0d 0e 9c 0c 20 73  24 3d c0 73 24 29 0d 0e  | ".... s$=.s$)..|
00001f20  a6 05 ce 0d 0e b0 07 3d  73 24 0d 0e ba 05 3a 0d  |.......=s$....:.|
00001f30  0e c4 0a dd 20 f2 61 73  73 0d 0e ce 0e 64 61 74  |.... .ass....dat|
00001f40  5f 6e 65 78 74 3d 30 0d  0e d8 0e 64 61 74 5f 74  |_next=0....dat_t|
00001f50  79 70 65 3d 34 0d 0e e2  0b 64 61 74 5f 78 3d 38  |ype=4....dat_x=8|
00001f60  0d 0e ec 0c 64 61 74 5f  79 3d 31 32 0d 0e f6 0d  |....dat_y=12....|
00001f70  64 61 74 5f 67 6f 3d 31  36 0d 0f 00 11 64 61 74  |dat_go=16....dat|
00001f80  5f 70 61 74 5f 70 63 3d  32 30 0d 0f 0a 11 64 61  |_pat_pc=20....da|
00001f90  74 5f 6d 6f 76 5f 70 63  3d 32 34 0d 0f 14 11 64  |t_mov_pc=24....d|
00001fa0  61 74 5f 61 63 74 69 76  65 3d 32 38 0d 0f 1e 14  |at_active=28....|
00001fb0  64 61 74 5f 70 61 74 5f  63 6f 75 6e 74 3d 33 32  |dat_pat_count=32|
00001fc0  0d 0f 28 10 64 61 74 5f  63 6c 61 73 73 3d 33 36  |..(.dat_class=36|
00001fd0  0d 0f 32 0e 64 61 74 5f  73 70 72 3d 34 30 0d 0f  |..2.dat_spr=40..|
00001fe0  3c 0f 64 61 74 5f 73 69  7a 65 3d 34 34 0d 0f 46  |<.dat_size=44..F|
00001ff0  11 6d 61 78 5f 61 6c 69  65 6e 73 3d 39 36 0d 0f  |.max_aliens=96..|
00002000  50 1f de 20 63 6f 64 65  25 20 26 34 30 30 30 2b  |P.. code% &4000+|
00002010  34 2a 73 63 72 65 65 6e  5f 73 69 7a 65 0d 0f 5a  |4*screen_size..Z|
00002020  17 73 70 3d 31 33 3a 6c  69 6e 6b 3d 31 34 3a 70  |.sp=13:link=14:p|
00002030  63 3d 31 35 0d 0f 64 15  e3 20 70 61 73 73 25 3d  |c=15..d.. pass%=|
00002040  30 20 b8 20 32 20 88 20  32 0d 0f 6e 0c 50 25 3d  |0 . 2 . 2..n.P%=|
00002050  63 6f 64 65 25 0d 0f 78  0e 5b 4f 50 54 20 70 61  |code%..x.[OPT pa|
00002060  73 73 25 0d 0f 82 27 2e  67 61 6d 65 20 20 20 53  |ss%...'.game   S|
00002070  54 4d 46 44 20 20 20 28  73 70 29 21 2c 7b 72 30  |TMFD   (sp)!,{r0|
00002080  2d 72 31 32 2c 6c 69 6e  6b 7d 0d 0f 8c 1f 20 20  |-r12,link}....  |
00002090  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 30  |      LDR     r0|
000020a0  2c 41 70 6f 70 5f 64 61  74 0d 0f 96 1f 20 20 20  |,Apop_dat....   |
000020b0  20 20 20 20 20 53 54 52  20 20 20 20 20 72 30 2c  |     STR     r0,|
000020c0  70 6f 70 5f 6e 65 78 74  0d 0f a0 19 20 20 20 20  |pop_next....    |
000020d0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 39 2c 23  |    MOV     r9,#|
000020e0  30 0d 0f aa 1a 20 20 20  20 20 20 20 20 4d 4f 56  |0....        MOV|
000020f0  20 20 20 20 20 72 31 30  2c 23 30 0d 0f b4 27 20  |     r10,#0...' |
00002100  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 72  |       STR     r|
00002110  31 30 2c 6c 69 66 65 5f  6c 6f 73 74 5f 63 6f 75  |10,life_lost_cou|
00002120  6e 74 0d 0f be 26 20 20  20 20 20 20 20 20 53 54  |nt...&        ST|
00002130  52 20 20 20 20 20 72 31  30 2c 66 69 6e 69 73 68  |R     r10,finish|
00002140  65 64 5f 63 6f 75 6e 74  0d 0f c8 1a 20 20 20 20  |ed_count....    |
00002150  20 20 20 20 4d 4f 56 20  20 20 20 20 72 31 31 2c  |    MOV     r11,|
00002160  23 31 0d 0f d2 0e 2e 67  61 6d 65 5f 6c 6f 6f 70  |#1.....game_loop|
00002170  0d 0f dc 1e 20 20 20 20  20 20 20 20 42 4c 20 20  |....        BL  |
00002180  20 20 20 20 73 77 61 70  5f 62 61 6e 6b 73 0d 0f  |    swap_banks..|
00002190  e6 1d 20 20 20 20 20 20  20 20 42 4c 20 20 20 20  |..        BL    |
000021a0  20 20 63 6f 70 79 5f 62  61 6e 6b 0d 0f f0 25 20  |  copy_bank...% |
000021b0  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 72  |       LDR     r|
000021c0  30 2c 66 69 6e 69 73 68  65 64 5f 63 6f 75 6e 74  |0,finished_count|
000021d0  0d 0f fa 19 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
000021e0  20 20 20 20 72 30 2c 23  30 0d 10 04 20 20 20 20  |    r0,#0...    |
000021f0  20 20 20 20 20 42 45 51  20 20 20 20 20 6e 6f 74  |     BEQ     not|
00002200  5f 66 69 6e 69 73 68 65  64 0d 10 0e 1c 20 20 20  |_finished....   |
00002210  20 20 20 20 20 53 55 42  53 20 20 20 20 72 30 2c  |     SUBS    r0,|
00002220  72 30 2c 23 31 0d 10 18  25 20 20 20 20 20 20 20  |r0,#1...%       |
00002230  20 53 54 52 20 20 20 20  20 72 30 2c 66 69 6e 69  | STR     r0,fini|
00002240  73 68 65 64 5f 63 6f 75  6e 74 0d 10 22 20 20 20  |shed_count.."   |
00002250  20 20 20 20 20 20 42 4e  45 20 20 20 20 20 6e 6f  |      BNE     no|
00002260  74 5f 66 69 6e 69 73 68  65 64 0d 10 2c 27 20 20  |t_finished..,'  |
00002270  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
00002280  70 29 21 2c 7b 72 30 2d  72 31 32 2c 6c 69 6e 6b  |p)!,{r0-r12,link|
00002290  7d 0d 10 36 19 20 20 20  20 20 20 20 20 4d 4f 56  |}..6.        MOV|
000022a0  20 20 20 20 20 72 30 2c  23 31 0d 10 40 1b 20 20  |     r0,#1..@.  |
000022b0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 70 63  |      MOV     pc|
000022c0  2c 6c 69 6e 6b 0d 10 4a  11 2e 6e 6f 74 5f 66 69  |,link..J..not_fi|
000022d0  6e 69 73 68 65 64 0d 10  54 26 20 20 20 20 20 20  |nished..T&      |
000022e0  20 20 4c 44 52 20 20 20  20 20 72 30 2c 6c 69 66  |  LDR     r0,lif|
000022f0  65 5f 6c 6f 73 74 5f 63  6f 75 6e 74 0d 10 5e 19  |e_lost_count..^.|
00002300  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00002310  72 30 2c 23 30 0d 10 68  21 20 20 20 20 20 20 20  |r0,#0..h!       |
00002320  20 42 45 51 20 20 20 20  20 6e 6f 74 5f 6c 69 66  | BEQ     not_lif|
00002330  65 5f 6c 6f 73 74 0d 10  72 1c 20 20 20 20 20 20  |e_lost..r.      |
00002340  20 20 53 55 42 53 20 20  20 20 72 30 2c 72 30 2c  |  SUBS    r0,r0,|
00002350  23 31 0d 10 7c 26 20 20  20 20 20 20 20 20 53 54  |#1..|&        ST|
00002360  52 20 20 20 20 20 72 30  2c 6c 69 66 65 5f 6c 6f  |R     r0,life_lo|
00002370  73 74 5f 63 6f 75 6e 74  0d 10 86 1f 20 20 20 20  |st_count....    |
00002380  20 20 20 20 42 4e 45 20  20 20 20 20 6e 65 61 72  |    BNE     near|
00002390  6c 79 5f 6f 76 65 72 0d  10 90 27 20 20 20 20 20  |ly_over...'     |
000023a0  20 20 20 4c 44 4d 46 44  20 20 20 28 73 70 29 21  |   LDMFD   (sp)!|
000023b0  2c 7b 72 30 2d 72 31 32  2c 6c 69 6e 6b 7d 0d 10  |,{r0-r12,link}..|
000023c0  9a 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
000023d0  20 20 72 30 2c 23 30 0d  10 a4 1b 20 20 20 20 20  |  r0,#0....     |
000023e0  20 20 20 4d 4f 56 20 20  20 20 20 70 63 2c 6c 69  |   MOV     pc,li|
000023f0  6e 6b 0d 10 ae 12 2e 6e  6f 74 5f 6c 69 66 65 5f  |nk.....not_life_|
00002400  6c 6f 73 74 0d 10 b8 1d  20 20 20 20 20 20 20 20  |lost....        |
00002410  42 4c 20 20 20 20 20 20  73 63 72 6f 6c 6c 5f 6f  |BL      scroll_o|
00002420  6e 0d 10 c2 10 2e 6e 65  61 72 6c 79 5f 6f 76 65  |n.....nearly_ove|
00002430  72 0d 10 cc 1d 20 20 20  20 20 20 20 20 42 4c 20  |r....        BL |
00002440  20 20 20 20 20 64 6f 5f  61 6c 69 65 6e 73 0d 10  |     do_aliens..|
00002450  d6 20 20 20 20 20 20 20  20 20 42 4c 20 20 20 20  |.         BL    |
00002460  20 20 62 61 63 6b 5f 63  6f 6c 6c 69 64 65 0d 10  |  back_collide..|
00002470  e0 20 20 20 20 20 20 20  20 20 42 4c 20 20 20 20  |.         BL    |
00002480  20 20 66 6f 72 65 5f 63  6f 6c 6c 69 64 65 0d 10  |  fore_collide..|
00002490  ea 1f 20 20 20 20 20 20  20 20 42 4c 20 20 20 20  |..        BL    |
000024a0  20 20 73 68 6f 77 5f 61  6c 69 65 6e 73 0d 10 f4  |  show_aliens...|
000024b0  21 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |!        LDR    |
000024c0  20 72 30 2c 66 69 72 65  5f 63 6f 75 6e 74 0d 10  | r0,fire_count..|
000024d0  fe 19 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |..        CMP   |
000024e0  20 20 72 30 2c 23 30 0d  11 08 1c 20 20 20 20 20  |  r0,#0....     |
000024f0  20 20 20 53 55 42 47 54  20 20 20 72 30 2c 72 30  |   SUBGT   r0,r0|
00002500  2c 23 31 0d 11 12 21 20  20 20 20 20 20 20 20 53  |,#1...!        S|
00002510  54 52 47 54 20 20 20 72  30 2c 66 69 72 65 5f 63  |TRGT   r0,fire_c|
00002520  6f 75 6e 74 0d 11 1c 1d  20 20 20 20 20 20 20 20  |ount....        |
00002530  4c 44 52 20 20 20 20 20  72 30 2c 65 6e 65 72 67  |LDR     r0,energ|
00002540  79 0d 11 26 1b 20 20 20  20 20 20 20 20 54 53 54  |y..&.        TST|
00002550  20 20 20 20 20 72 31 30  2c 23 33 31 0d 11 30 1c  |     r10,#31..0.|
00002560  20 20 20 20 20 20 20 20  42 4e 45 20 20 20 20 20  |        BNE     |
00002570  6e 6f 5f 64 72 61 69 6e  0d 11 3a 1c 20 20 20 20  |no_drain..:.    |
00002580  20 20 20 20 53 55 42 53  20 20 20 20 72 30 2c 72  |    SUBS    r0,r|
00002590  30 2c 23 31 0d 11 44 19  20 20 20 20 20 20 20 20  |0,#1..D.        |
000025a0  4d 4f 56 4d 49 20 20 20  72 30 2c 23 30 0d 11 4e  |MOVMI   r0,#0..N|
000025b0  1d 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |.        STR    |
000025c0  20 72 30 2c 65 6e 65 72  67 79 0d 11 58 0d 2e 6e  | r0,energy..X..n|
000025d0  6f 5f 64 72 61 69 6e 0d  11 62 1f 20 20 20 20 20  |o_drain..b.     |
000025e0  20 20 20 42 4c 20 20 20  20 20 20 73 68 6f 77 5f  |   BL      show_|
000025f0  65 6e 65 72 67 79 0d 11  6c 1e 20 20 20 20 20 20  |energy..l.      |
00002600  20 20 42 4c 20 20 20 20  20 20 73 68 6f 77 5f 73  |  BL      show_s|
00002610  63 6f 72 65 0d 11 76 29  20 20 20 20 20 20 20 20  |core..v)        |
00002620  53 57 49 20 20 20 20 20  22 58 4f 53 5f 52 65 61  |SWI     "XOS_Rea|
00002630  64 45 73 63 61 70 65 53  74 61 74 65 22 0d 11 80  |dEscapeState"...|
00002640  1d 20 20 20 20 20 20 20  20 42 43 43 20 20 20 20  |.        BCC    |
00002650  20 67 61 6d 65 5f 6c 6f  6f 70 0d 11 8a 1b 20 20  | game_loop....  |
00002660  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
00002670  2c 23 31 32 36 0d 11 94  1e 20 20 20 20 20 20 20  |,#126....       |
00002680  20 53 57 49 20 20 20 20  20 22 58 4f 53 5f 42 79  | SWI     "XOS_By|
00002690  74 65 22 0d 11 9e 27 20  20 20 20 20 20 20 20 4c  |te"...'        L|
000026a0  44 4d 46 44 20 20 20 28  73 70 29 21 2c 7b 72 30  |DMFD   (sp)!,{r0|
000026b0  2d 72 31 32 2c 6c 69 6e  6b 7d 0d 11 a8 19 20 20  |-r12,link}....  |
000026c0  20 20 20 20 20 20 4d 56  4e 20 20 20 20 20 72 30  |      MVN     r0|
000026d0  2c 23 30 0d 11 b2 1b 20  20 20 20 20 20 20 20 4d  |,#0....        M|
000026e0  4f 56 20 20 20 20 20 70  63 2c 6c 69 6e 6b 0d 11  |OV     pc,link..|
000026f0  bc 04 0d 11 c6 14 2e 6c  69 66 65 5f 6c 6f 73 74  |.......life_lost|
00002700  5f 63 6f 75 6e 74 0d 11  d0 15 20 20 20 20 20 20  |_count....      |
00002710  20 20 44 43 44 20 20 20  20 20 30 0d 11 da 13 2e  |  DCD     0.....|
00002720  66 69 6e 69 73 68 65 64  5f 63 6f 75 6e 74 0d 11  |finished_count..|
00002730  e4 15 20 20 20 20 20 20  20 20 44 43 44 20 20 20  |..        DCD   |
00002740  20 20 30 0d 11 ee 04 0d  11 f8 0d 2e 62 6f 6d 62  |  0.........bomb|
00002750  5f 6b 65 79 0d 12 02 15  20 20 20 20 20 20 20 20  |_key....        |
00002760  44 43 44 20 20 20 20 20  30 0d 12 0c 0f 2e 66 69  |DCD     0.....fi|
00002770  72 65 5f 63 6f 75 6e 74  0d 12 16 15 20 20 20 20  |re_count....    |
00002780  20 20 20 20 44 43 44 20  20 20 20 20 30 0d 12 20  |    DCD     0.. |
00002790  04 0d 12 2a 0e 2e 64 6f  5f 61 6c 69 65 6e 73 0d  |...*..do_aliens.|
000027a0  12 34 27 20 20 20 20 20  20 20 20 53 54 4d 46 44  |.4'        STMFD|
000027b0  20 20 20 28 73 70 29 21  2c 7b 72 30 2d 72 31 32  |   (sp)!,{r0-r12|
000027c0  2c 6c 69 6e 6b 7d 0d 12  3e 1f 20 20 20 20 20 20  |,link}..>.      |
000027d0  20 20 4c 44 52 20 20 20  20 20 72 36 2c 70 6f 70  |  LDR     r6,pop|
000027e0  5f 6e 65 78 74 0d 12 48  22 20 20 20 20 20 20 20  |_next..H"       |
000027f0  20 41 44 44 20 20 20 20  20 72 35 2c 72 31 30 2c  | ADD     r5,r10,|
00002800  23 31 36 30 2b 31 36 0d  12 52 1a 2e 63 68 65 63  |#160+16..R..chec|
00002810  6b 5f 66 6f 72 5f 6e 65  77 5f 65 6e 74 72 69 65  |k_for_new_entrie|
00002820  73 0d 12 5c 1e 20 20 20  20 20 20 20 20 4c 44 4d  |s..\.        LDM|
00002830  49 41 20 20 20 72 36 2c  7b 72 30 2d 72 33 7d 0d  |IA   r6,{r0-r3}.|
00002840  12 66 19 20 20 20 20 20  20 20 20 43 4d 50 20 20  |.f.        CMP  |
00002850  20 20 20 72 30 2c 23 30  0d 12 70 24 20 20 20 20  |   r0,#0..p$    |
00002860  20 20 20 20 42 4c 54 20  20 20 20 20 64 6f 6e 65  |    BLT     done|
00002870  5f 6e 65 77 5f 65 6e 74  72 69 65 73 0d 12 7a 19  |_new_entries..z.|
00002880  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00002890  72 31 2c 72 35 0d 12 84  24 20 20 20 20 20 20 20  |r1,r5...$       |
000028a0  20 42 47 45 20 20 20 20  20 64 6f 6e 65 5f 6e 65  | BGE     done_ne|
000028b0  77 5f 65 6e 74 72 69 65  73 0d 12 8e 25 20 20 20  |w_entries...%   |
000028c0  20 20 20 20 20 42 4c 20  20 20 20 20 20 61 64 64  |     BL      add|
000028d0  5f 61 6c 69 65 6e 5f 74  6f 5f 6c 69 73 74 0d 12  |_alien_to_list..|
000028e0  98 1d 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |..        ADD   |
000028f0  20 20 72 36 2c 72 36 2c  23 32 34 0d 12 a2 29 20  |  r6,r6,#24...) |
00002900  20 20 20 20 20 20 20 42  20 20 20 20 20 20 20 63  |       B       c|
00002910  68 65 63 6b 5f 66 6f 72  5f 6e 65 77 5f 65 6e 74  |heck_for_new_ent|
00002920  72 69 65 73 0d 12 ac 15  2e 64 6f 6e 65 5f 6e 65  |ries.....done_ne|
00002930  77 5f 65 6e 74 72 69 65  73 0d 12 b6 1f 20 20 20  |w_entries....   |
00002940  20 20 20 20 20 53 54 52  20 20 20 20 20 72 36 2c  |     STR     r6,|
00002950  70 6f 70 5f 6e 65 78 74  0d 12 c0 1b 20 20 20 20  |pop_next....    |
00002960  20 20 20 20 41 44 52 20  20 20 20 20 72 37 2c 6c  |    ADR     r7,l|
00002970  69 73 74 0d 12 ca 1b 20  20 20 20 20 20 20 20 4c  |ist....        L|
00002980  44 52 20 20 20 20 20 72  38 2c 6c 69 73 74 0d 12  |DR     r8,list..|
00002990  d4 12 2e 64 6f 5f 61 6c  69 65 6e 5f 6c 6f 6f 70  |...do_alien_loop|
000029a0  0d 12 de 19 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
000029b0  20 20 20 20 72 38 2c 23  30 0d 12 e8 25 20 20 20  |    r8,#0...%   |
000029c0  20 20 20 20 20 4c 44 4d  45 51 46 44 20 28 73 70  |     LDMEQFD (sp|
000029d0  29 21 2c 7b 72 30 2d 72  31 32 2c 70 63 7d 0d 12  |)!,{r0-r12,pc}..|
000029e0  f2 04 0d 12 fc 27 20 20  20 20 20 20 20 20 4c 44  |.....'        LD|
000029f0  52 20 20 20 20 20 72 30  2c 5b 72 38 2c 23 64 61  |R     r0,[r8,#da|
00002a00  74 5f 61 63 74 69 76 65  5d 0d 13 06 19 20 20 20  |t_active]....   |
00002a10  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 30 2c  |     CMP     r0,|
00002a20  23 30 0d 13 10 22 20 20  20 20 20 20 20 20 42 4c  |#0..."        BL|
00002a30  54 20 20 20 20 20 61 6c  69 65 6e 5f 69 73 5f 64  |T     alien_is_d|
00002a40  79 69 6e 67 0d 13 1a 23  20 20 20 20 20 20 20 20  |ying...#        |
00002a50  42 47 54 20 20 20 20 20  61 6c 69 65 6e 5f 69 73  |BGT     alien_is|
00002a60  5f 61 63 74 69 76 65 0d  13 24 23 20 20 20 20 20  |_active..$#     |
00002a70  20 20 20 4c 44 52 20 20  20 20 20 72 30 2c 5b 72  |   LDR     r0,[r|
00002a80  38 2c 23 64 61 74 5f 67  6f 5d 0d 13 2e 1a 20 20  |8,#dat_go]....  |
00002a90  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 31  |      CMP     r1|
00002aa0  30 2c 72 30 0d 13 38 23  20 20 20 20 20 20 20 20  |0,r0..8#        |
00002ab0  42 4c 54 20 20 20 20 20  61 6c 69 65 6e 5f 69 73  |BLT     alien_is|
00002ac0  5f 61 63 74 69 76 65 0d  13 42 19 20 20 20 20 20  |_active..B.     |
00002ad0  20 20 20 4d 4f 56 20 20  20 20 20 72 30 2c 23 31  |   MOV     r0,#1|
00002ae0  0d 13 4c 27 20 20 20 20  20 20 20 20 53 54 52 20  |..L'        STR |
00002af0  20 20 20 20 72 30 2c 5b  72 38 2c 23 64 61 74 5f  |    r0,[r8,#dat_|
00002b00  61 63 74 69 76 65 5d 0d  13 56 23 20 20 20 20 20  |active]..V#     |
00002b10  20 20 20 42 20 20 20 20  20 20 20 61 6c 69 65 6e  |   B       alien|
00002b20  5f 69 73 5f 61 63 74 69  76 65 0d 13 60 13 2e 61  |_is_active..`..a|
00002b30  6c 69 65 6e 5f 69 73 5f  64 79 69 6e 67 0d 13 6a  |lien_is_dying..j|
00002b40  1c 20 20 20 20 20 20 20  20 41 44 44 53 20 20 20  |.        ADDS   |
00002b50  20 72 30 2c 72 30 2c 23  31 0d 13 74 27 20 20 20  | r0,r0,#1..t'   |
00002b60  20 20 20 20 20 53 54 52  20 20 20 20 20 72 30 2c  |     STR     r0,|
00002b70  5b 72 38 2c 23 64 61 74  5f 61 63 74 69 76 65 5d  |[r8,#dat_active]|
00002b80  0d 13 7e 20 20 20 20 20  20 20 20 20 42 45 51 20  |..~         BEQ |
00002b90  20 20 20 20 61 6c 69 65  6e 5f 69 73 5f 6f 66 66  |    alien_is_off|
00002ba0  0d 13 88 21 20 20 20 20  20 20 20 20 42 20 20 20  |...!        B   |
00002bb0  20 20 20 20 64 6f 5f 6e  65 78 74 5f 61 6c 69 65  |    do_next_alie|
00002bc0  6e 0d 13 92 14 2e 61 6c  69 65 6e 5f 69 73 5f 61  |n.....alien_is_a|
00002bd0  63 74 69 76 65 0d 13 9c  22 20 20 20 20 20 20 20  |ctive..."       |
00002be0  20 4c 44 52 20 20 20 20  20 72 32 2c 5b 72 38 2c  | LDR     r2,[r8,|
00002bf0  23 64 61 74 5f 78 5d 0d  13 a6 22 20 20 20 20 20  |#dat_x]..."     |
00002c00  20 20 20 4c 44 52 20 20  20 20 20 72 33 2c 5b 72  |   LDR     r3,[r|
00002c10  38 2c 23 64 61 74 5f 79  5d 0d 13 b0 1f 20 20 20  |8,#dat_y]....   |
00002c20  20 20 20 20 20 53 55 42  20 20 20 20 20 72 31 34  |     SUB     r14|
00002c30  2c 72 31 30 2c 23 33 32  0d 13 ba 1a 20 20 20 20  |,r10,#32....    |
00002c40  20 20 20 20 43 4d 50 20  20 20 20 20 72 32 2c 72  |    CMP     r2,r|
00002c50  31 34 0d 13 c4 20 20 20  20 20 20 20 20 20 42 4c  |14...         BL|
00002c60  54 20 20 20 20 20 61 6c  69 65 6e 5f 69 73 5f 6f  |T     alien_is_o|
00002c70  66 66 0d 13 ce 23 20 20  20 20 20 20 20 20 41 44  |ff...#        AD|
00002c80  44 20 20 20 20 20 72 31  34 2c 72 31 30 2c 23 31  |D     r14,r10,#1|
00002c90  36 30 2b 34 38 0d 13 d8  1a 20 20 20 20 20 20 20  |60+48....       |
00002ca0  20 43 4d 50 20 20 20 20  20 72 32 2c 72 31 34 0d  | CMP     r2,r14.|
00002cb0  13 e2 20 20 20 20 20 20  20 20 20 42 47 54 20 20  |..         BGT  |
00002cc0  20 20 20 61 6c 69 65 6e  5f 69 73 5f 6f 66 66 0d  |   alien_is_off.|
00002cd0  13 ec 1e 20 20 20 20 20  20 20 20 43 4d 50 20 20  |...        CMP  |
00002ce0  20 20 20 72 33 2c 23 32  35 36 2b 31 36 0d 13 f6  |   r3,#256+16...|
00002cf0  20 20 20 20 20 20 20 20  20 42 47 54 20 20 20 20  |         BGT    |
00002d00  20 61 6c 69 65 6e 5f 69  73 5f 6f 66 66 0d 14 00  | alien_is_off...|
00002d10  1a 20 20 20 20 20 20 20  20 43 4d 4e 20 20 20 20  |.        CMN    |
00002d20  20 72 33 2c 23 31 35 0d  14 0a 20 20 20 20 20 20  | r3,#15...      |
00002d30  20 20 20 42 4c 54 20 20  20 20 20 61 6c 69 65 6e  |   BLT     alien|
00002d40  5f 69 73 5f 6f 66 66 0d  14 14 04 0d 14 1e 25 20  |_is_off.......% |
00002d50  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 72  |       LDR     r|
00002d60  34 2c 5b 72 38 2c 23 64  61 74 5f 74 79 70 65 5d  |4,[r8,#dat_type]|
00002d70  0d 14 28 31 20 20 20 20  20 20 20 20 43 4d 50 20  |..(1        CMP |
00002d80  20 20 20 20 72 34 2c 23  a4 69 64 65 6e 74 69 66  |    r4,#.identif|
00002d90  79 5f 70 61 74 74 65 72  6e 28 22 73 68 69 70 22  |y_pattern("ship"|
00002da0  29 0d 14 32 1c 20 20 20  20 20 20 20 20 42 4e 45  |)..2.        BNE|
00002db0  20 20 20 20 20 6e 6f 74  5f 73 68 69 70 0d 14 3c  |     not_ship..<|
00002dc0  1d 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00002dd0  20 72 31 2c 23 32 35 36  2d 31 0d 14 46 19 20 20  | r1,#256-1..F.  |
00002de0  20 20 20 20 20 20 42 4c  20 20 20 20 20 20 69 6e  |      BL      in|
00002df0  6b 65 79 0d 14 50 1c 20  20 20 20 20 20 20 20 41  |key..P.        A|
00002e00  44 44 45 51 20 20 20 72  32 2c 72 32 2c 23 32 0d  |DDEQ   r2,r2,#2.|
00002e10  14 5a 1c 20 20 20 20 20  20 20 20 53 55 42 4e 45  |.Z.        SUBNE|
00002e20  20 20 20 72 32 2c 72 32  2c 23 31 0d 14 64 1e 20  |   r2,r2,#1..d. |
00002e30  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00002e40  31 2c 23 32 35 36 2d 39  39 0d 14 6e 19 20 20 20  |1,#256-99..n.   |
00002e50  20 20 20 20 20 42 4c 20  20 20 20 20 20 69 6e 6b  |     BL      ink|
00002e60  65 79 0d 14 78 1c 20 20  20 20 20 20 20 20 53 55  |ey..x.        SU|
00002e70  42 45 51 20 20 20 72 32  2c 72 32 2c 23 31 0d 14  |BEQ   r2,r2,#1..|
00002e80  82 1d 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |..        LDR   |
00002e90  20 20 72 30 2c 65 6e 65  72 67 79 0d 14 8c 19 20  |  r0,energy.... |
00002ea0  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00002eb0  30 2c 23 30 0d 14 96 1c  20 20 20 20 20 20 20 20  |0,#0....        |
00002ec0  41 44 44 4c 45 20 20 20  72 33 2c 72 33 2c 23 32  |ADDLE   r3,r3,#2|
00002ed0  0d 14 a0 21 20 20 20 20  20 20 20 20 42 4c 45 20  |...!        BLE |
00002ee0  20 20 20 20 64 72 6f 70  5f 66 72 6f 6d 5f 73 6b  |    drop_from_sk|
00002ef0  79 0d 14 aa 1e 20 20 20  20 20 20 20 20 4d 4f 56  |y....        MOV|
00002f00  20 20 20 20 20 72 31 2c  23 32 35 36 2d 36 36 0d  |     r1,#256-66.|
00002f10  14 b4 19 20 20 20 20 20  20 20 20 42 4c 20 20 20  |...        BL   |
00002f20  20 20 20 69 6e 6b 65 79  0d 14 be 1c 20 20 20 20  |   inkey....    |
00002f30  20 20 20 20 53 55 42 45  51 20 20 20 72 33 2c 72  |    SUBEQ   r3,r|
00002f40  33 2c 23 32 0d 14 c8 1e  20 20 20 20 20 20 20 20  |3,#2....        |
00002f50  4d 4f 56 20 20 20 20 20  72 31 2c 23 32 35 36 2d  |MOV     r1,#256-|
00002f60  39 38 0d 14 d2 19 20 20  20 20 20 20 20 20 42 4c  |98....        BL|
00002f70  20 20 20 20 20 20 69 6e  6b 65 79 0d 14 dc 1c 20  |      inkey.... |
00002f80  20 20 20 20 20 20 20 41  44 44 45 51 20 20 20 72  |       ADDEQ   r|
00002f90  33 2c 72 33 2c 23 32 0d  14 e6 12 2e 64 72 6f 70  |3,r3,#2.....drop|
00002fa0  5f 66 72 6f 6d 5f 73 6b  79 0d 14 f0 20 20 20 20  |_from_sky...    |
00002fb0  20 20 20 20 20 41 44 44  20 20 20 20 20 72 31 34  |     ADD     r14|
00002fc0  2c 72 31 30 2c 23 31 32  30 0d 14 fa 1a 20 20 20  |,r10,#120....   |
00002fd0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 32 2c  |     CMP     r2,|
00002fe0  72 31 34 0d 15 04 1a 20  20 20 20 20 20 20 20 4d  |r14....        M|
00002ff0  4f 56 47 54 20 20 20 72  32 2c 72 31 34 0d 15 0e  |OVGT   r2,r14...|
00003000  1a 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |.        CMP    |
00003010  20 72 32 2c 72 31 30 0d  15 18 1a 20 20 20 20 20  | r2,r10....     |
00003020  20 20 20 4d 4f 56 4c 54  20 20 20 72 32 2c 72 31  |   MOVLT   r2,r1|
00003030  30 0d 15 22 19 20 20 20  20 20 20 20 20 43 4d 50  |0..".        CMP|
00003040  20 20 20 20 20 72 33 2c  23 30 0d 15 2c 19 20 20  |     r3,#0..,.  |
00003050  20 20 20 20 20 20 4d 4f  56 4c 54 20 20 20 72 33  |      MOVLT   r3|
00003060  2c 23 30 0d 15 36 1e 20  20 20 20 20 20 20 20 43  |,#0..6.        C|
00003070  4d 50 20 20 20 20 20 72  33 2c 23 32 34 30 2d 31  |MP     r3,#240-1|
00003080  31 0d 15 40 1e 20 20 20  20 20 20 20 20 4d 4f 56  |1..@.        MOV|
00003090  47 54 20 20 20 72 33 2c  23 32 34 30 2d 31 31 0d  |GT   r3,#240-11.|
000030a0  15 4a 21 20 20 20 20 20  20 20 20 41 44 44 20 20  |.J!        ADD  |
000030b0  20 20 20 72 31 34 2c 72  38 2c 23 64 61 74 5f 78  |   r14,r8,#dat_x|
000030c0  0d 15 54 1f 20 20 20 20  20 20 20 20 53 54 4d 49  |..T.        STMI|
000030d0  41 20 20 20 72 31 34 2c  7b 72 32 2c 72 33 7d 0d  |A   r14,{r2,r3}.|
000030e0  15 5e 21 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.^!        LDR  |
000030f0  20 20 20 72 31 2c 66 69  72 65 5f 63 6f 75 6e 74  |   r1,fire_count|
00003100  0d 15 68 19 20 20 20 20  20 20 20 20 43 4d 50 20  |..h.        CMP |
00003110  20 20 20 20 72 31 2c 23  30 0d 15 72 1d 20 20 20  |    r1,#0..r.   |
00003120  20 20 20 20 20 42 4e 45  20 20 20 20 20 64 6f 6e  |     BNE     don|
00003130  74 5f 66 69 72 65 0d 15  7c 1e 20 20 20 20 20 20  |t_fire..|.      |
00003140  20 20 4d 4f 56 20 20 20  20 20 72 31 2c 23 32 35  |  MOV     r1,#25|
00003150  36 2d 37 34 0d 15 86 19  20 20 20 20 20 20 20 20  |6-74....        |
00003160  42 4c 20 20 20 20 20 20  69 6e 6b 65 79 0d 15 90  |BL      inkey...|
00003170  1d 20 20 20 20 20 20 20  20 42 4e 45 20 20 20 20  |.        BNE    |
00003180  20 64 6f 6e 74 5f 66 69  72 65 0d 15 9a 21 20 20  | dont_fire...!  |
00003190  20 20 20 20 20 20 53 54  4d 46 44 20 20 20 28 73  |      STMFD   (s|
000031a0  70 29 21 2c 7b 72 32 2d  72 33 7d 0d 15 a4 33 20  |p)!,{r2-r3}...3 |
000031b0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
000031c0  30 2c 23 a4 69 64 65 6e  74 69 66 79 5f 70 61 74  |0,#.identify_pat|
000031d0  74 65 72 6e 28 22 62 75  6c 6c 65 74 22 29 0d 15  |tern("bullet")..|
000031e0  ae 1d 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |..        ADD   |
000031f0  20 20 72 31 2c 72 32 2c  23 31 38 0d 15 b8 1c 20  |  r1,r2,#18.... |
00003200  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00003210  32 2c 72 33 2c 23 35 0d  15 c2 19 20 20 20 20 20  |2,r3,#5....     |
00003220  20 20 20 4d 4f 56 20 20  20 20 20 72 33 2c 23 30  |   MOV     r3,#0|
00003230  0d 15 cc 25 20 20 20 20  20 20 20 20 42 4c 20 20  |...%        BL  |
00003240  20 20 20 20 61 64 64 5f  61 6c 69 65 6e 5f 74 6f  |    add_alien_to|
00003250  5f 6c 69 73 74 0d 15 d6  1a 20 20 20 20 20 20 20  |_list....       |
00003260  20 4d 4f 56 20 20 20 20  20 72 31 2c 23 31 30 0d  | MOV     r1,#10.|
00003270  15 e0 21 20 20 20 20 20  20 20 20 53 54 52 20 20  |..!        STR  |
00003280  20 20 20 72 31 2c 66 69  72 65 5f 63 6f 75 6e 74  |   r1,fire_count|
00003290  0d 15 ea 21 20 20 20 20  20 20 20 20 4c 44 4d 46  |...!        LDMF|
000032a0  44 20 20 20 28 73 70 29  21 2c 7b 72 32 2d 72 33  |D   (sp)!,{r2-r3|
000032b0  7d 0d 15 f4 0e 2e 64 6f  6e 74 5f 66 69 72 65 0d  |}.....dont_fire.|
000032c0  15 fe 1e 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
000032d0  20 20 20 72 31 2c 23 32  35 36 2d 39 37 0d 16 08  |   r1,#256-97...|
000032e0  19 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |.        BL     |
000032f0  20 69 6e 6b 65 79 0d 16  12 16 20 20 20 20 20 20  | inkey....      |
00003300  20 20 ec 51 20 20 20 72  30 2c 23 31 0d 16 1c 19  |  .Q   r0,#1....|
00003310  20 20 20 20 20 20 20 20  4d 4f 56 4e 45 20 20 20  |        MOVNE   |
00003320  72 30 2c 23 30 0d 16 26  20 20 20 20 20 20 20 20  |r0,#0..&        |
00003330  20 4c 44 52 20 20 20 20  20 72 31 34 2c 62 6f 6d  | LDR     r14,bom|
00003340  62 5f 6b 65 79 0d 16 30  1a 20 20 20 20 20 20 20  |b_key..0.       |
00003350  20 43 4d 50 20 20 20 20  20 72 30 2c 72 31 34 0d  | CMP     r0,r14.|
00003360  16 3a 1d 20 20 20 20 20  20 20 20 42 45 51 20 20  |.:.        BEQ  |
00003370  20 20 20 64 6f 6e 74 5f  64 72 6f 70 0d 16 44 1f  |   dont_drop..D.|
00003380  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00003390  72 30 2c 62 6f 6d 62 5f  6b 65 79 0d 16 4e 19 20  |r0,bomb_key..N. |
000033a0  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
000033b0  30 2c 23 31 0d 16 58 1d  20 20 20 20 20 20 20 20  |0,#1..X.        |
000033c0  42 4e 45 20 20 20 20 20  64 6f 6e 74 5f 64 72 6f  |BNE     dont_dro|
000033d0  70 0d 16 62 31 20 20 20  20 20 20 20 20 4d 4f 56  |p..b1        MOV|
000033e0  20 20 20 20 20 72 30 2c  23 a4 69 64 65 6e 74 69  |     r0,#.identi|
000033f0  66 79 5f 70 61 74 74 65  72 6e 28 22 62 6f 6d 62  |fy_pattern("bomb|
00003400  22 29 0d 16 6c 1c 20 20  20 20 20 20 20 20 41 44  |")..l.        AD|
00003410  44 20 20 20 20 20 72 31  2c 72 32 2c 23 38 0d 16  |D     r1,r2,#8..|
00003420  76 1c 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |v.        ADD   |
00003430  20 20 72 32 2c 72 33 2c  23 38 0d 16 80 19 20 20  |  r2,r3,#8....  |
00003440  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 33  |      MOV     r3|
00003450  2c 23 30 0d 16 8a 25 20  20 20 20 20 20 20 20 42  |,#0...%        B|
00003460  4c 20 20 20 20 20 20 61  64 64 5f 61 6c 69 65 6e  |L      add_alien|
00003470  5f 74 6f 5f 6c 69 73 74  0d 16 94 0e 2e 64 6f 6e  |_to_list.....don|
00003480  74 5f 64 72 6f 70 0d 16  9e 1d 20 20 20 20 20 20  |t_drop....      |
00003490  20 20 42 20 20 20 20 20  20 20 61 70 70 6c 79 5f  |  B       apply_|
000034a0  70 61 74 0d 16 a8 0d 2e  6e 6f 74 5f 73 68 69 70  |pat.....not_ship|
000034b0  0d 16 b2 0e 2e 61 70 70  6c 79 5f 70 61 74 0d 16  |.....apply_pat..|
000034c0  bc 1f 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |..        LDR   |
000034d0  20 20 72 31 2c 41 70 61  74 5f 70 74 72 0d 16 c6  |  r1,Apat_ptr...|
000034e0  25 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |%        LDR    |
000034f0  20 72 34 2c 5b 72 31 2c  72 34 2c 4c 53 4c 20 23  | r4,[r1,r4,LSL #|
00003500  32 5d 0d 16 d0 27 20 20  20 20 20 20 20 20 4c 44  |2]...'        LD|
00003510  52 20 20 20 20 20 72 33  2c 5b 72 38 2c 23 64 61  |R     r3,[r8,#da|
00003520  74 5f 70 61 74 5f 70 63  5d 0d 16 da 19 20 20 20  |t_pat_pc]....   |
00003530  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 33 2c  |     CMP     r3,|
00003540  23 30 0d 16 e4 1c 20 20  20 20 20 20 20 20 42 4c  |#0....        BL|
00003550  54 20 20 20 20 20 6e 65  78 74 5f 6d 6f 76 0d 16  |T     next_mov..|
00003560  ee 2a 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |.*        LDR   |
00003570  20 20 72 30 2c 5b 72 38  2c 23 64 61 74 5f 70 61  |  r0,[r8,#dat_pa|
00003580  74 5f 63 6f 75 6e 74 5d  0d 16 f8 19 20 20 20 20  |t_count]....    |
00003590  20 20 20 20 43 4d 50 20  20 20 20 20 72 30 2c 23  |    CMP     r0,#|
000035a0  30 0d 17 02 20 20 20 20  20 20 20 20 20 42 4e 45  |0...         BNE|
000035b0  20 20 20 20 20 6e 6f 74  5f 6e 65 78 74 5f 6d 6f  |     not_next_mo|
000035c0  76 0d 17 0c 0d 2e 6e 65  78 74 5f 6d 6f 76 0d 17  |v.....next_mov..|
000035d0  16 1d 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |..        ADD   |
000035e0  20 20 72 33 2c 72 33 2c  23 31 32 0d 17 20 10 2e  |  r3,r3,#12.. ..|
000035f0  64 6f 5f 70 61 74 5f 6c  6f 6f 70 0d 17 2a 1d 20  |do_pat_loop..*. |
00003600  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00003610  31 34 2c 72 34 2c 72 33  0d 17 34 1f 20 20 20 20  |14,r4,r3..4.    |
00003620  20 20 20 20 4c 44 52 20  20 20 20 20 72 30 2c 5b  |    LDR     r0,[|
00003630  72 31 34 2c 23 30 5d 0d  17 3e 19 20 20 20 20 20  |r14,#0]..>.     |
00003640  20 20 20 43 4d 4e 20 20  20 20 20 72 30 2c 23 31  |   CMN     r0,#1|
00003650  0d 17 48 20 20 20 20 20  20 20 20 20 42 45 51 20  |..H         BEQ |
00003660  20 20 20 20 61 6c 69 65  6e 5f 69 73 5f 6f 66 66  |    alien_is_off|
00003670  0d 17 52 19 20 20 20 20  20 20 20 20 4d 4f 56 4c  |..R.        MOVL|
00003680  54 20 20 20 72 33 2c 23  30 0d 17 5c 1f 20 20 20  |T   r3,#0..\.   |
00003690  20 20 20 20 20 42 4c 54  20 20 20 20 20 64 6f 5f  |     BLT     do_|
000036a0  70 61 74 5f 6c 6f 6f 70  0d 17 66 1f 20 20 20 20  |pat_loop..f.    |
000036b0  20 20 20 20 4c 44 52 20  20 20 20 20 72 30 2c 5b  |    LDR     r0,[|
000036c0  72 31 34 2c 23 34 5d 0d  17 70 2a 20 20 20 20 20  |r14,#4]..p*     |
000036d0  20 20 20 53 54 52 20 20  20 20 20 72 30 2c 5b 72  |   STR     r0,[r|
000036e0  38 2c 23 64 61 74 5f 70  61 74 5f 63 6f 75 6e 74  |8,#dat_pat_count|
000036f0  5d 0d 17 7a 11 2e 6e 6f  74 5f 6e 65 78 74 5f 6d  |]..z..not_next_m|
00003700  6f 76 0d 17 84 27 20 20  20 20 20 20 20 20 53 54  |ov...'        ST|
00003710  52 20 20 20 20 20 72 33  2c 5b 72 38 2c 23 64 61  |R     r3,[r8,#da|
00003720  74 5f 70 61 74 5f 70 63  5d 0d 17 8e 1e 20 20 20  |t_pat_pc]....   |
00003730  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 35 2c  |     LDR     r5,|
00003740  5b 72 34 2c 72 33 5d 0d  17 98 19 20 20 20 20 20  |[r4,r3]....     |
00003750  20 20 20 43 4d 50 20 20  20 20 20 72 35 2c 23 30  |   CMP     r5,#0|
00003760  0d 17 a2 20 20 20 20 20  20 20 20 20 42 4c 54 20  |...         BLT |
00003770  20 20 20 20 61 6c 69 65  6e 5f 69 73 5f 6f 66 66  |    alien_is_off|
00003780  0d 17 ac 04 0d 17 b6 1f  20 20 20 20 20 20 20 20  |........        |
00003790  4c 44 52 20 20 20 20 20  72 31 2c 41 6d 6f 76 5f  |LDR     r1,Amov_|
000037a0  70 74 72 0d 17 c0 25 20  20 20 20 20 20 20 20 4c  |ptr...%        L|
000037b0  44 52 20 20 20 20 20 72  31 2c 5b 72 31 2c 72 35  |DR     r1,[r1,r5|
000037c0  2c 4c 53 4c 20 23 32 5d  0d 17 ca 27 20 20 20 20  |,LSL #2]...'    |
000037d0  20 20 20 20 4c 44 52 20  20 20 20 20 72 32 2c 5b  |    LDR     r2,[|
000037e0  72 38 2c 23 64 61 74 5f  6d 6f 76 5f 70 63 5d 0d  |r8,#dat_mov_pc].|
000037f0  17 d4 22 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.."        LDR  |
00003800  20 20 20 72 33 2c 5b 72  38 2c 23 64 61 74 5f 78  |   r3,[r8,#dat_x|
00003810  5d 0d 17 de 22 20 20 20  20 20 20 20 20 4c 44 52  |]..."        LDR|
00003820  20 20 20 20 20 72 34 2c  5b 72 38 2c 23 64 61 74  |     r4,[r8,#dat|
00003830  5f 79 5d 0d 17 e8 04 0d  17 f2 27 20 20 20 20 20  |_y].......'     |
00003840  20 20 20 4c 44 52 20 20  20 20 20 72 30 2c 5b 72  |   LDR     r0,[r|
00003850  38 2c 23 64 61 74 5f 61  63 74 69 76 65 5d 0d 17  |8,#dat_active]..|
00003860  fc 19 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |..        CMP   |
00003870  20 20 72 30 2c 23 30 0d  18 06 23 20 20 20 20 20  |  r0,#0...#     |
00003880  20 20 20 42 45 51 20 20  20 20 20 73 6b 69 70 5f  |   BEQ     skip_|
00003890  61 6c 69 65 6e 5f 6d 6f  76 65 0d 18 10 04 0d 18  |alien_move......|
000038a0  1a 0f 2e 63 79 63 6c 65  5f 6d 6f 76 65 0d 18 24  |...cycle_move..$|
000038b0  1e 20 20 20 20 20 20 20  20 4c 44 52 42 20 20 20  |.        LDRB   |
000038c0  20 72 30 2c 5b 72 31 2c  72 32 5d 0d 18 2e 1b 20  | r0,[r1,r2].... |
000038d0  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
000038e0  30 2c 23 26 46 46 0d 18  38 21 20 20 20 20 20 20  |0,#&FF..8!      |
000038f0  20 20 42 4e 45 20 20 20  20 20 6e 6f 74 5f 65 6e  |  BNE     not_en|
00003900  64 5f 63 79 63 6c 65 0d  18 42 2a 20 20 20 20 20  |d_cycle..B*     |
00003910  20 20 20 4c 44 52 20 20  20 20 20 72 30 2c 5b 72  |   LDR     r0,[r|
00003920  38 2c 23 64 61 74 5f 70  61 74 5f 63 6f 75 6e 74  |8,#dat_pat_count|
00003930  5d 0d 18 4c 19 20 20 20  20 20 20 20 20 43 4d 50  |]..L.        CMP|
00003940  20 20 20 20 20 72 30 2c  23 30 0d 18 56 1c 20 20  |     r0,#0..V.  |
00003950  20 20 20 20 20 20 53 55  42 47 45 20 20 20 72 30  |      SUBGE   r0|
00003960  2c 72 30 2c 23 31 0d 18  60 2a 20 20 20 20 20 20  |,r0,#1..`*      |
00003970  20 20 53 54 52 47 45 20  20 20 72 30 2c 5b 72 38  |  STRGE   r0,[r8|
00003980  2c 23 64 61 74 5f 70 61  74 5f 63 6f 75 6e 74 5d  |,#dat_pat_count]|
00003990  0d 18 6a 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |..j.        MOV |
000039a0  20 20 20 20 72 32 2c 23  30 0d 18 74 1e 20 20 20  |    r2,#0..t.   |
000039b0  20 20 20 20 20 42 20 20  20 20 20 20 20 63 79 63  |     B       cyc|
000039c0  6c 65 5f 6d 6f 76 65 0d  18 7e 12 2e 6e 6f 74 5f  |le_move..~..not_|
000039d0  65 6e 64 5f 63 79 63 6c  65 0d 18 88 1c 20 20 20  |end_cycle....   |
000039e0  20 20 20 20 20 41 44 44  20 20 20 20 20 72 33 2c  |     ADD     r3,|
000039f0  72 33 2c 72 30 0d 18 92  1e 20 20 20 20 20 20 20  |r3,r0....       |
00003a00  20 53 55 42 20 20 20 20  20 72 33 2c 72 33 2c 23  | SUB     r3,r3,#|
00003a10  26 37 46 0d 18 9c 1c 20  20 20 20 20 20 20 20 41  |&7F....        A|
00003a20  44 44 20 20 20 20 20 72  32 2c 72 32 2c 23 31 0d  |DD     r2,r2,#1.|
00003a30  18 a6 1e 20 20 20 20 20  20 20 20 4c 44 52 42 20  |...        LDRB |
00003a40  20 20 20 72 30 2c 5b 72  31 2c 72 32 5d 0d 18 b0  |   r0,[r1,r2]...|
00003a50  1c 20 20 20 20 20 20 20  20 53 55 42 20 20 20 20  |.        SUB    |
00003a60  20 72 34 2c 72 34 2c 72  30 0d 18 ba 1e 20 20 20  | r4,r4,r0....   |
00003a70  20 20 20 20 20 41 44 44  20 20 20 20 20 72 34 2c  |     ADD     r4,|
00003a80  72 34 2c 23 26 37 46 0d  18 c4 1c 20 20 20 20 20  |r4,#&7F....     |
00003a90  20 20 20 41 44 44 20 20  20 20 20 72 32 2c 72 32  |   ADD     r2,r2|
00003aa0  2c 23 31 0d 18 ce 27 20  20 20 20 20 20 20 20 53  |,#1...'        S|
00003ab0  54 52 20 20 20 20 20 72  32 2c 5b 72 38 2c 23 64  |TR     r2,[r8,#d|
00003ac0  61 74 5f 6d 6f 76 5f 70  63 5d 0d 18 d8 22 20 20  |at_mov_pc]..."  |
00003ad0  20 20 20 20 20 20 53 54  52 20 20 20 20 20 72 33  |      STR     r3|
00003ae0  2c 5b 72 38 2c 23 64 61  74 5f 78 5d 0d 18 e2 22  |,[r8,#dat_x]..."|
00003af0  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00003b00  72 34 2c 5b 72 38 2c 23  64 61 74 5f 79 5d 0d 18  |r4,[r8,#dat_y]..|
00003b10  ec 14 2e 73 6b 69 70 5f  61 6c 69 65 6e 5f 6d 6f  |...skip_alien_mo|
00003b20  76 65 0d 18 f6 22 20 20  20 20 20 20 20 20 4c 44  |ve..."        LD|
00003b30  52 20 20 20 20 20 72 30  2c 41 6d 6f 76 5f 73 70  |R     r0,Amov_sp|
00003b40  72 69 74 65 0d 19 00 23  20 20 20 20 20 20 20 20  |rite...#        |
00003b50  41 44 44 20 20 20 20 20  72 30 2c 72 30 2c 72 35  |ADD     r0,r0,r5|
00003b60  2c 4c 53 4c 20 23 34 0d  19 0a 1e 20 20 20 20 20  |,LSL #4....     |
00003b70  20 20 20 53 55 42 20 20  20 20 20 72 31 34 2c 72  |   SUB     r14,r|
00003b80  33 2c 72 31 30 0d 19 14  1c 20 20 20 20 20 20 20  |3,r10....       |
00003b90  20 80 20 20 20 20 20 72  31 34 2c 72 31 34 2c 23  | .     r14,r14,#|
00003ba0  33 0d 19 1e 26 20 20 20  20 20 20 20 20 4c 44 52  |3...&        LDR|
00003bb0  20 20 20 20 20 72 30 2c  5b 72 30 2c 72 31 34 2c  |     r0,[r0,r14,|
00003bc0  4c 53 4c 20 23 32 5d 0d  19 28 24 20 20 20 20 20  |LSL #2]..($     |
00003bd0  20 20 20 53 54 52 20 20  20 20 20 72 30 2c 5b 72  |   STR     r0,[r|
00003be0  38 2c 23 64 61 74 5f 73  70 72 5d 0d 19 32 12 2e  |8,#dat_spr]..2..|
00003bf0  64 6f 5f 6e 65 78 74 5f  61 6c 69 65 6e 0d 19 3c  |do_next_alien..<|
00003c00  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00003c10  20 72 37 2c 72 38 0d 19  46 25 20 20 20 20 20 20  | r7,r8..F%      |
00003c20  20 20 4c 44 52 20 20 20  20 20 72 38 2c 5b 72 38  |  LDR     r8,[r8|
00003c30  2c 23 64 61 74 5f 6e 65  78 74 5d 0d 19 50 21 20  |,#dat_next]..P! |
00003c40  20 20 20 20 20 20 20 42  20 20 20 20 20 20 20 64  |       B       d|
00003c50  6f 5f 61 6c 69 65 6e 5f  6c 6f 6f 70 0d 19 5a 11  |o_alien_loop..Z.|
00003c60  2e 61 6c 69 65 6e 5f 69  73 5f 6f 66 66 0d 19 64  |.alien_is_off..d|
00003c70  25 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |%        LDR    |
00003c80  20 72 36 2c 5b 72 38 2c  23 64 61 74 5f 6e 65 78  | r6,[r8,#dat_nex|
00003c90  74 5d 0d 19 6e 25 20 20  20 20 20 20 20 20 53 54  |t]..n%        ST|
00003ca0  52 20 20 20 20 20 72 36  2c 5b 72 37 2c 23 64 61  |R     r6,[r7,#da|
00003cb0  74 5f 6e 65 78 74 5d 0d  19 78 1b 20 20 20 20 20  |t_next]..x.     |
00003cc0  20 20 20 4c 44 52 20 20  20 20 20 72 35 2c 66 72  |   LDR     r5,fr|
00003cd0  65 65 0d 19 82 25 20 20  20 20 20 20 20 20 53 54  |ee...%        ST|
00003ce0  52 20 20 20 20 20 72 35  2c 5b 72 38 2c 23 64 61  |R     r5,[r8,#da|
00003cf0  74 5f 6e 65 78 74 5d 0d  19 8c 1b 20 20 20 20 20  |t_next]....     |
00003d00  20 20 20 53 54 52 20 20  20 20 20 72 38 2c 66 72  |   STR     r8,fr|
00003d10  65 65 0d 19 96 19 20 20  20 20 20 20 20 20 4d 4f  |ee....        MO|
00003d20  56 20 20 20 20 20 72 38  2c 72 36 0d 19 a0 21 20  |V     r8,r6...! |
00003d30  20 20 20 20 20 20 20 42  20 20 20 20 20 20 20 64  |       B       d|
00003d40  6f 5f 61 6c 69 65 6e 5f  6c 6f 6f 70 0d 19 aa 04  |o_alien_loop....|
00003d50  0d 19 b4 10 2e 73 68 6f  77 5f 61 6c 69 65 6e 73  |.....show_aliens|
00003d60  0d 19 be 27 20 20 20 20  20 20 20 20 53 54 4d 46  |...'        STMF|
00003d70  44 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |D   (sp)!,{r0-r1|
00003d80  32 2c 6c 69 6e 6b 7d 0d  19 c8 1b 20 20 20 20 20  |2,link}....     |
00003d90  20 20 20 41 44 52 20 20  20 20 20 72 38 2c 6c 69  |   ADR     r8,li|
00003da0  73 74 0d 19 d2 15 2e 73  68 6f 77 5f 61 6c 69 65  |st.....show_alie|
00003db0  6e 73 5f 6c 6f 6f 70 0d  19 dc 25 20 20 20 20 20  |ns_loop...%     |
00003dc0  20 20 20 4c 44 52 20 20  20 20 20 72 38 2c 5b 72  |   LDR     r8,[r|
00003dd0  38 2c 23 64 61 74 5f 6e  65 78 74 5d 0d 19 e6 19  |8,#dat_next]....|
00003de0  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00003df0  72 38 2c 23 30 0d 19 f0  25 20 20 20 20 20 20 20  |r8,#0...%       |
00003e00  20 4c 44 4d 45 51 46 44  20 28 73 70 29 21 2c 7b  | LDMEQFD (sp)!,{|
00003e10  72 30 2d 72 31 32 2c 70  63 7d 0d 19 fa 27 20 20  |r0-r12,pc}...'  |
00003e20  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 30  |      LDR     r0|
00003e30  2c 5b 72 38 2c 23 64 61  74 5f 61 63 74 69 76 65  |,[r8,#dat_active|
00003e40  5d 0d 1a 04 19 20 20 20  20 20 20 20 20 43 4d 50  |]....        CMP|
00003e50  20 20 20 20 20 72 30 2c  23 30 0d 1a 0e 1e 20 20  |     r0,#0....  |
00003e60  20 20 20 20 20 20 42 47  45 20 20 20 20 20 73 68  |      BGE     sh|
00003e70  6f 77 5f 61 6c 69 76 65  0d 1a 18 27 20 20 20 20  |ow_alive...'    |
00003e80  20 20 20 20 41 44 44 20  20 20 20 20 72 33 2c 72  |    ADD     r3,r|
00003e90  30 2c 23 66 61 64 65 5f  73 74 61 67 65 73 25 0d  |0,#fade_stages%.|
00003ea0  1a 22 24 20 20 20 20 20  20 20 20 4c 44 52 20 20  |."$        LDR  |
00003eb0  20 20 20 72 30 2c 5b 72  38 2c 23 64 61 74 5f 73  |   r0,[r8,#dat_s|
00003ec0  70 72 5d 0d 1a 2c 19 20  20 20 20 20 20 20 20 43  |pr]..,.        C|
00003ed0  4d 50 20 20 20 20 20 72  30 2c 23 30 0d 1a 36 22  |MP     r0,#0..6"|
00003ee0  20 20 20 20 20 20 20 20  4c 44 52 4e 45 20 20 20  |        LDRNE   |
00003ef0  72 31 2c 5b 72 38 2c 23  64 61 74 5f 78 5d 0d 1a  |r1,[r8,#dat_x]..|
00003f00  40 1d 20 20 20 20 20 20  20 20 53 55 42 4e 45 20  |@.        SUBNE |
00003f10  20 20 72 31 2c 72 31 2c  72 31 30 0d 1a 4a 22 20  |  r1,r1,r10..J" |
00003f20  20 20 20 20 20 20 20 4c  44 52 4e 45 20 20 20 72  |       LDRNE   r|
00003f30  32 2c 5b 72 38 2c 23 64  61 74 5f 79 5d 0d 1a 54  |2,[r8,#dat_y]..T|
00003f40  25 20 20 20 20 20 20 20  20 42 4c 4e 45 20 20 20  |%        BLNE   |
00003f50  20 73 68 6f 77 5f 73 70  72 69 74 65 5f 64 79 69  | show_sprite_dyi|
00003f60  6e 67 0d 1a 5e 24 20 20  20 20 20 20 20 20 42 20  |ng..^$        B |
00003f70  20 20 20 20 20 20 73 68  6f 77 5f 61 6c 69 65 6e  |      show_alien|
00003f80  73 5f 6c 6f 6f 70 0d 1a  68 0f 2e 73 68 6f 77 5f  |s_loop..h..show_|
00003f90  61 6c 69 76 65 0d 1a 72  24 20 20 20 20 20 20 20  |alive..r$       |
00003fa0  20 4c 44 52 20 20 20 20  20 72 30 2c 5b 72 38 2c  | LDR     r0,[r8,|
00003fb0  23 64 61 74 5f 73 70 72  5d 0d 1a 7c 19 20 20 20  |#dat_spr]..|.   |
00003fc0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 30 2c  |     CMP     r0,|
00003fd0  23 30 0d 1a 86 22 20 20  20 20 20 20 20 20 4c 44  |#0..."        LD|
00003fe0  52 4e 45 20 20 20 72 31  2c 5b 72 38 2c 23 64 61  |RNE   r1,[r8,#da|
00003ff0  74 5f 78 5d 0d 1a 90 1d  20 20 20 20 20 20 20 20  |t_x]....        |
00004000  53 55 42 4e 45 20 20 20  72 31 2c 72 31 2c 72 31  |SUBNE   r1,r1,r1|
00004010  30 0d 1a 9a 22 20 20 20  20 20 20 20 20 4c 44 52  |0..."        LDR|
00004020  4e 45 20 20 20 72 32 2c  5b 72 38 2c 23 64 61 74  |NE   r2,[r8,#dat|
00004030  5f 79 5d 0d 1a a4 1f 20  20 20 20 20 20 20 20 42  |_y]....        B|
00004040  4c 4e 45 20 20 20 20 73  68 6f 77 5f 73 70 72 69  |LNE    show_spri|
00004050  74 65 0d 1a ae 24 20 20  20 20 20 20 20 20 42 20  |te...$        B |
00004060  20 20 20 20 20 20 73 68  6f 77 5f 61 6c 69 65 6e  |      show_alien|
00004070  73 5f 6c 6f 6f 70 0d 1a  b8 04 0d 1a c2 11 2e 62  |s_loop.........b|
00004080  61 63 6b 5f 63 6f 6c 6c  69 64 65 0d 1a cc 27 20  |ack_collide...' |
00004090  20 20 20 20 20 20 20 53  54 4d 46 44 20 20 20 28  |       STMFD   (|
000040a0  73 70 29 21 2c 7b 72 30  2d 72 31 32 2c 6c 69 6e  |sp)!,{r0-r12,lin|
000040b0  6b 7d 0d 1a d6 1b 20 20  20 20 20 20 20 20 41 44  |k}....        AD|
000040c0  52 20 20 20 20 20 72 38  2c 6c 69 73 74 0d 1a e0  |R     r8,list...|
000040d0  16 2e 62 61 63 6b 5f 63  6f 6c 6c 69 64 65 5f 6c  |..back_collide_l|
000040e0  6f 6f 70 0d 1a ea 25 20  20 20 20 20 20 20 20 4c  |oop...%        L|
000040f0  44 52 20 20 20 20 20 72  38 2c 5b 72 38 2c 23 64  |DR     r8,[r8,#d|
00004100  61 74 5f 6e 65 78 74 5d  0d 1a f4 19 20 20 20 20  |at_next]....    |
00004110  20 20 20 20 43 4d 50 20  20 20 20 20 72 38 2c 23  |    CMP     r8,#|
00004120  30 0d 1a fe 25 20 20 20  20 20 20 20 20 4c 44 4d  |0...%        LDM|
00004130  45 51 46 44 20 28 73 70  29 21 2c 7b 72 30 2d 72  |EQFD (sp)!,{r0-r|
00004140  31 32 2c 70 63 7d 0d 1b  08 27 20 20 20 20 20 20  |12,pc}...'      |
00004150  20 20 4c 44 52 20 20 20  20 20 72 30 2c 5b 72 38  |  LDR     r0,[r8|
00004160  2c 23 64 61 74 5f 61 63  74 69 76 65 5d 0d 1b 12  |,#dat_active]...|
00004170  19 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |.        CMP    |
00004180  20 72 30 2c 23 30 0d 1b  1c 25 20 20 20 20 20 20  | r0,#0...%      |
00004190  20 20 42 4c 45 20 20 20  20 20 62 61 63 6b 5f 63  |  BLE     back_c|
000041a0  6f 6c 6c 69 64 65 5f 6c  6f 6f 70 0d 1b 26 26 20  |ollide_loop..&& |
000041b0  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 72  |       LDR     r|
000041c0  30 2c 5b 72 38 2c 23 64  61 74 5f 63 6c 61 73 73  |0,[r8,#dat_class|
000041d0  5d 0d 1b 30 19 20 20 20  20 20 20 20 20 43 4d 50  |]..0.        CMP|
000041e0  20 20 20 20 20 72 30 2c  23 31 0d 1b 3a 19 20 20  |     r0,#1..:.  |
000041f0  20 20 20 20 20 20 43 4d  50 4e 45 20 20 20 72 30  |      CMPNE   r0|
00004200  2c 23 32 0d 1b 44 25 20  20 20 20 20 20 20 20 42  |,#2..D%        B|
00004210  4e 45 20 20 20 20 20 62  61 63 6b 5f 63 6f 6c 6c  |NE     back_coll|
00004220  69 64 65 5f 6c 6f 6f 70  0d 1b 4e 24 20 20 20 20  |ide_loop..N$    |
00004230  20 20 20 20 4c 44 52 20  20 20 20 20 72 30 2c 5b  |    LDR     r0,[|
00004240  72 38 2c 23 64 61 74 5f  73 70 72 5d 0d 1b 58 19  |r8,#dat_spr]..X.|
00004250  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00004260  72 30 2c 23 30 0d 1b 62  25 20 20 20 20 20 20 20  |r0,#0..b%       |
00004270  20 42 45 51 20 20 20 20  20 62 61 63 6b 5f 63 6f  | BEQ     back_co|
00004280  6c 6c 69 64 65 5f 6c 6f  6f 70 0d 1b 6c 22 20 20  |llide_loop..l"  |
00004290  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 31  |      LDR     r1|
000042a0  2c 5b 72 38 2c 23 64 61  74 5f 78 5d 0d 1b 76 1d  |,[r8,#dat_x]..v.|
000042b0  20 20 20 20 20 20 20 20  53 55 42 20 20 20 20 20  |        SUB     |
000042c0  72 31 2c 72 31 2c 72 31  30 0d 1b 80 22 20 20 20  |r1,r1,r10..."   |
000042d0  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 32 2c  |     LDR     r2,|
000042e0  5b 72 38 2c 23 64 61 74  5f 79 5d 0d 1b 8a 21 20  |[r8,#dat_y]...! |
000042f0  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 63  |       BL      c|
00004300  6f 6c 6c 69 64 65 5f 63  68 65 63 6b 0d 1b 94 25  |ollide_check...%|
00004310  20 20 20 20 20 20 20 20  42 45 51 20 20 20 20 20  |        BEQ     |
00004320  62 61 63 6b 5f 63 6f 6c  6c 69 64 65 5f 6c 6f 6f  |back_collide_loo|
00004330  70 0d 1b 9e 25 20 20 20  20 20 20 20 20 4c 44 52  |p...%        LDR|
00004340  20 20 20 20 20 72 35 2c  5b 72 38 2c 23 64 61 74  |     r5,[r8,#dat|
00004350  5f 74 79 70 65 5d 0d 1b  a8 31 20 20 20 20 20 20  |_type]...1      |
00004360  20 20 43 4d 50 20 20 20  20 20 72 35 2c 23 a4 69  |  CMP     r5,#.i|
00004370  64 65 6e 74 69 66 79 5f  70 61 74 74 65 72 6e 28  |dentify_pattern(|
00004380  22 73 68 69 70 22 29 0d  1b b2 26 20 20 20 20 20  |"ship")...&     |
00004390  20 20 20 42 4e 45 20 20  20 20 20 73 68 69 70 5f  |   BNE     ship_|
000043a0  68 61 73 6e 74 5f 63 72  61 73 68 65 64 0d 1b bc  |hasnt_crashed...|
000043b0  24 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |$        BL     |
000043c0  20 73 68 69 70 5f 68 61  73 5f 63 72 61 73 68 65  | ship_has_crashe|
000043d0  64 0d 1b c6 25 20 20 20  20 20 20 20 20 42 20 20  |d...%        B  |
000043e0  20 20 20 20 20 62 61 63  6b 5f 63 6f 6c 6c 69 64  |     back_collid|
000043f0  65 5f 6c 6f 6f 70 0d 1b  d0 17 2e 73 68 69 70 5f  |e_loop.....ship_|
00004400  68 61 73 6e 74 5f 63 72  61 73 68 65 64 0d 1b da  |hasnt_crashed...|
00004410  24 20 20 20 20 20 20 20  20 4d 56 4e 20 20 20 20  |$        MVN    |
00004420  20 72 30 2c 23 66 61 64  65 5f 73 74 61 67 65 73  | r0,#fade_stages|
00004430  25 0d 1b e4 27 20 20 20  20 20 20 20 20 53 54 52  |%...'        STR|
00004440  20 20 20 20 20 72 30 2c  5b 72 38 2c 23 64 61 74  |     r0,[r8,#dat|
00004450  5f 61 63 74 69 76 65 5d  0d 1b ee 25 20 20 20 20  |_active]...%    |
00004460  20 20 20 20 42 20 20 20  20 20 20 20 62 61 63 6b  |    B       back|
00004470  5f 63 6f 6c 6c 69 64 65  5f 6c 6f 6f 70 0d 1b f8  |_collide_loop...|
00004480  04 0d 1c 02 15 2e 6c 69  73 74 20 20 20 44 43 44  |......list   DCD|
00004490  20 20 20 20 20 30 0d 1c  0c 15 2e 66 72 65 65 20  |     0.....free |
000044a0  20 20 44 43 44 20 20 20  20 20 30 0d 1c 16 04 0d  |  DCD     0.....|
000044b0  1c 20 15 2e 73 68 69 70  5f 68 61 73 5f 63 72 61  |. ..ship_has_cra|
000044c0  73 68 65 64 0d 1c 2a 27  20 20 20 20 20 20 20 20  |shed..*'        |
000044d0  53 54 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |STMFD   (sp)!,{r|
000044e0  30 2d 72 31 32 2c 6c 69  6e 6b 7d 0d 1c 34 1b 20  |0-r12,link}..4. |
000044f0  20 20 20 20 20 20 20 41  44 52 20 20 20 20 20 72  |       ADR     r|
00004500  38 2c 6c 69 73 74 0d 1c  3e 0e 2e 66 69 6e 64 5f  |8,list..>..find_|
00004510  73 68 69 70 0d 1c 48 25  20 20 20 20 20 20 20 20  |ship..H%        |
00004520  4c 44 52 20 20 20 20 20  72 38 2c 5b 72 38 2c 23  |LDR     r8,[r8,#|
00004530  64 61 74 5f 6e 65 78 74  5d 0d 1c 52 25 20 20 20  |dat_next]..R%   |
00004540  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 30 2c  |     LDR     r0,|
00004550  5b 72 38 2c 23 64 61 74  5f 74 79 70 65 5d 0d 1c  |[r8,#dat_type]..|
00004560  5c 31 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |\1        CMP   |
00004570  20 20 72 30 2c 23 a4 69  64 65 6e 74 69 66 79 5f  |  r0,#.identify_|
00004580  70 61 74 74 65 72 6e 28  22 73 68 69 70 22 29 0d  |pattern("ship").|
00004590  1c 66 1d 20 20 20 20 20  20 20 20 42 4e 45 20 20  |.f.        BNE  |
000045a0  20 20 20 66 69 6e 64 5f  73 68 69 70 0d 1c 70 1a  |   find_ship..p.|
000045b0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
000045c0  72 30 2c 23 35 30 0d 1c  7a 26 20 20 20 20 20 20  |r0,#50..z&      |
000045d0  20 20 53 54 52 20 20 20  20 20 72 30 2c 6c 69 66  |  STR     r0,lif|
000045e0  65 5f 6c 6f 73 74 5f 63  6f 75 6e 74 0d 1c 84 22  |e_lost_count..."|
000045f0  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00004600  72 31 2c 5b 72 38 2c 23  64 61 74 5f 78 5d 0d 1c  |r1,[r8,#dat_x]..|
00004610  8e 22 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |."        LDR   |
00004620  20 20 72 32 2c 5b 72 38  2c 23 64 61 74 5f 79 5d  |  r2,[r8,#dat_y]|
00004630  0d 1c 98 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00004640  20 20 20 20 72 33 2c 23  30 0d 1c a2 36 20 20 20  |    r3,#0...6   |
00004650  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 30 2c  |     MOV     r0,|
00004660  23 a4 69 64 65 6e 74 69  66 79 5f 70 61 74 74 65  |#.identify_patte|
00004670  72 6e 28 22 73 68 69 70  64 65 61 64 31 22 29 0d  |rn("shipdead1").|
00004680  1c ac 25 20 20 20 20 20  20 20 20 42 4c 20 20 20  |..%        BL   |
00004690  20 20 20 61 64 64 5f 61  6c 69 65 6e 5f 74 6f 5f  |   add_alien_to_|
000046a0  6c 69 73 74 0d 1c b6 36  20 20 20 20 20 20 20 20  |list...6        |
000046b0  4d 4f 56 20 20 20 20 20  72 30 2c 23 a4 69 64 65  |MOV     r0,#.ide|
000046c0  6e 74 69 66 79 5f 70 61  74 74 65 72 6e 28 22 73  |ntify_pattern("s|
000046d0  68 69 70 64 65 61 64 32  22 29 0d 1c c0 25 20 20  |hipdead2")...%  |
000046e0  20 20 20 20 20 20 42 4c  20 20 20 20 20 20 61 64  |      BL      ad|
000046f0  64 5f 61 6c 69 65 6e 5f  74 6f 5f 6c 69 73 74 0d  |d_alien_to_list.|
00004700  1c ca 36 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |..6        MOV  |
00004710  20 20 20 72 30 2c 23 a4  69 64 65 6e 74 69 66 79  |   r0,#.identify|
00004720  5f 70 61 74 74 65 72 6e  28 22 73 68 69 70 64 65  |_pattern("shipde|
00004730  61 64 33 22 29 0d 1c d4  25 20 20 20 20 20 20 20  |ad3")...%       |
00004740  20 42 4c 20 20 20 20 20  20 61 64 64 5f 61 6c 69  | BL      add_ali|
00004750  65 6e 5f 74 6f 5f 6c 69  73 74 0d 1c de 36 20 20  |en_to_list...6  |
00004760  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
00004770  2c 23 a4 69 64 65 6e 74  69 66 79 5f 70 61 74 74  |,#.identify_patt|
00004780  65 72 6e 28 22 73 68 69  70 64 65 61 64 34 22 29  |ern("shipdead4")|
00004790  0d 1c e8 25 20 20 20 20  20 20 20 20 42 4c 20 20  |...%        BL  |
000047a0  20 20 20 20 61 64 64 5f  61 6c 69 65 6e 5f 74 6f  |    add_alien_to|
000047b0  5f 6c 69 73 74 0d 1c f2  24 20 20 20 20 20 20 20  |_list...$       |
000047c0  20 4d 56 4e 20 20 20 20  20 72 30 2c 23 66 61 64  | MVN     r0,#fad|
000047d0  65 5f 73 74 61 67 65 73  25 0d 1c fc 27 20 20 20  |e_stages%...'   |
000047e0  20 20 20 20 20 53 54 52  20 20 20 20 20 72 30 2c  |     STR     r0,|
000047f0  5b 72 38 2c 23 64 61 74  5f 61 63 74 69 76 65 5d  |[r8,#dat_active]|
00004800  0d 1d 06 25 20 20 20 20  20 20 20 20 4c 44 4d 46  |...%        LDMF|
00004810  44 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |D   (sp)!,{r0-r1|
00004820  32 2c 70 63 7d 0d 1d 10  04 0d 1d 1a 11 2e 66 6f  |2,pc}.........fo|
00004830  72 65 5f 63 6f 6c 6c 69  64 65 0d 1d 24 27 20 20  |re_collide..$'  |
00004840  20 20 20 20 20 20 53 54  4d 46 44 20 20 20 28 73  |      STMFD   (s|
00004850  70 29 21 2c 7b 72 30 2d  72 31 32 2c 6c 69 6e 6b  |p)!,{r0-r12,link|
00004860  7d 0d 1d 2e 1b 20 20 20  20 20 20 20 20 41 44 52  |}....        ADR|
00004870  20 20 20 20 20 72 38 2c  6c 69 73 74 0d 1d 38 16  |     r8,list..8.|
00004880  2e 66 6f 72 65 5f 63 6f  6c 6c 69 64 65 5f 6c 6f  |.fore_collide_lo|
00004890  6f 70 0d 1d 42 25 20 20  20 20 20 20 20 20 4c 44  |op..B%        LD|
000048a0  52 20 20 20 20 20 72 38  2c 5b 72 38 2c 23 64 61  |R     r8,[r8,#da|
000048b0  74 5f 6e 65 78 74 5d 0d  1d 4c 19 20 20 20 20 20  |t_next]..L.     |
000048c0  20 20 20 43 4d 50 20 20  20 20 20 72 38 2c 23 30  |   CMP     r8,#0|
000048d0  0d 1d 56 25 20 20 20 20  20 20 20 20 4c 44 4d 45  |..V%        LDME|
000048e0  51 46 44 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |QFD (sp)!,{r0-r1|
000048f0  32 2c 70 63 7d 0d 1d 60  26 20 20 20 20 20 20 20  |2,pc}..`&       |
00004900  20 4c 44 52 20 20 20 20  20 72 30 2c 5b 72 38 2c  | LDR     r0,[r8,|
00004910  23 64 61 74 5f 63 6c 61  73 73 5d 0d 1d 6a 19 20  |#dat_class]..j. |
00004920  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00004930  30 2c 23 31 0d 1d 74 25  20 20 20 20 20 20 20 20  |0,#1..t%        |
00004940  42 4e 45 20 20 20 20 20  66 6f 72 65 5f 63 6f 6c  |BNE     fore_col|
00004950  6c 69 64 65 5f 6c 6f 6f  70 0d 1d 7e 27 20 20 20  |lide_loop..~'   |
00004960  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 30 2c  |     LDR     r0,|
00004970  5b 72 38 2c 23 64 61 74  5f 61 63 74 69 76 65 5d  |[r8,#dat_active]|
00004980  0d 1d 88 19 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00004990  20 20 20 20 72 30 2c 23  30 0d 1d 92 25 20 20 20  |    r0,#0...%   |
000049a0  20 20 20 20 20 42 4c 54  20 20 20 20 20 66 6f 72  |     BLT     for|
000049b0  65 5f 63 6f 6c 6c 69 64  65 5f 6c 6f 6f 70 0d 1d  |e_collide_loop..|
000049c0  9c 25 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |.%        LDR   |
000049d0  20 20 72 31 34 2c 5b 72  38 2c 23 64 61 74 5f 73  |  r14,[r8,#dat_s|
000049e0  70 72 5d 0d 1d a6 1a 20  20 20 20 20 20 20 20 43  |pr]....        C|
000049f0  4d 50 20 20 20 20 20 72  31 34 2c 23 30 0d 1d b0  |MP     r14,#0...|
00004a00  25 20 20 20 20 20 20 20  20 42 45 51 20 20 20 20  |%        BEQ    |
00004a10  20 66 6f 72 65 5f 63 6f  6c 6c 69 64 65 5f 6c 6f  | fore_collide_lo|
00004a20  6f 70 0d 1d ba 1f 20 20  20 20 20 20 20 20 41 44  |op....        AD|
00004a30  44 20 20 20 20 20 72 31  34 2c 72 31 34 2c 23 31  |D     r14,r14,#1|
00004a40  36 0d 1d c4 1f 20 20 20  20 20 20 20 20 4c 44 4d  |6....        LDM|
00004a50  49 41 20 20 20 72 31 34  2c 7b 72 36 2d 72 37 7d  |IA   r14,{r6-r7}|
00004a60  0d 1d ce 21 20 20 20 20  20 20 20 20 41 44 44 20  |...!        ADD |
00004a70  20 20 20 20 72 31 34 2c  72 38 2c 23 64 61 74 5f  |    r14,r8,#dat_|
00004a80  78 0d 1d d8 1f 20 20 20  20 20 20 20 20 4c 44 4d  |x....        LDM|
00004a90  49 41 20 20 20 72 31 34  2c 7b 72 34 2c 72 35 7d  |IA   r14,{r4,r5}|
00004aa0  0d 1d e2 1c 20 20 20 20  20 20 20 20 42 49 43 20  |....        BIC |
00004ab0  20 20 20 20 72 34 2c 72  34 2c 23 33 0d 1d ec 1c  |    r4,r4,#3....|
00004ac0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00004ad0  72 36 2c 72 36 2c 23 31  0d 1d f6 23 20 20 20 20  |r6,r6,#1...#    |
00004ae0  20 20 20 20 41 44 44 20  20 20 20 20 72 36 2c 72  |    ADD     r6,r|
00004af0  34 2c 72 36 2c 4c 53 4c  20 23 32 0d 1e 00 1c 20  |4,r6,LSL #2.... |
00004b00  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00004b10  37 2c 72 37 2c 23 31 0d  1e 0a 1c 20 20 20 20 20  |7,r7,#1....     |
00004b20  20 20 20 41 44 44 20 20  20 20 20 72 37 2c 72 35  |   ADD     r7,r5|
00004b30  2c 72 37 0d 1e 14 1b 20  20 20 20 20 20 20 20 41  |,r7....        A|
00004b40  44 52 20 20 20 20 20 72  39 2c 6c 69 73 74 0d 1e  |DR     r9,list..|
00004b50  1e 17 2e 66 6f 72 65 5f  63 6f 6c 6c 69 64 65 5f  |...fore_collide_|
00004b60  6c 6f 6f 70 62 0d 1e 28  25 20 20 20 20 20 20 20  |loopb..(%       |
00004b70  20 4c 44 52 20 20 20 20  20 72 39 2c 5b 72 39 2c  | LDR     r9,[r9,|
00004b80  23 64 61 74 5f 6e 65 78  74 5d 0d 1e 32 19 20 20  |#dat_next]..2.  |
00004b90  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 39  |      CMP     r9|
00004ba0  2c 23 30 0d 1e 3c 25 20  20 20 20 20 20 20 20 42  |,#0..<%        B|
00004bb0  45 51 20 20 20 20 20 66  6f 72 65 5f 63 6f 6c 6c  |EQ     fore_coll|
00004bc0  69 64 65 5f 6c 6f 6f 70  0d 1e 46 26 20 20 20 20  |ide_loop..F&    |
00004bd0  20 20 20 20 4c 44 52 20  20 20 20 20 72 30 2c 5b  |    LDR     r0,[|
00004be0  72 39 2c 23 64 61 74 5f  63 6c 61 73 73 5d 0d 1e  |r9,#dat_class]..|
00004bf0  50 19 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |P.        CMP   |
00004c00  20 20 72 30 2c 23 31 0d  1e 5a 26 20 20 20 20 20  |  r0,#1..Z&     |
00004c10  20 20 20 42 45 51 20 20  20 20 20 66 6f 72 65 5f  |   BEQ     fore_|
00004c20  63 6f 6c 6c 69 64 65 5f  6c 6f 6f 70 62 0d 1e 64  |collide_loopb..d|
00004c30  20 20 20 20 20 20 20 20  20 42 4c 54 20 20 20 20  |         BLT    |
00004c40  20 6e 6f 74 5f 61 5f 6d  65 74 65 6f 72 0d 1e 6e  | not_a_meteor..n|
00004c50  25 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |%        LDR    |
00004c60  20 72 30 2c 5b 72 38 2c  23 64 61 74 5f 74 79 70  | r0,[r8,#dat_typ|
00004c70  65 5d 0d 1e 78 33 20 20  20 20 20 20 20 20 43 4d  |e]..x3        CM|
00004c80  50 20 20 20 20 20 72 30  2c 23 a4 69 64 65 6e 74  |P     r0,#.ident|
00004c90  69 66 79 5f 70 61 74 74  65 72 6e 28 22 62 75 6c  |ify_pattern("bul|
00004ca0  6c 65 74 22 29 0d 1e 82  31 20 20 20 20 20 20 20  |let")...1       |
00004cb0  20 43 4d 50 4e 45 20 20  20 72 30 2c 23 a4 69 64  | CMPNE   r0,#.id|
00004cc0  65 6e 74 69 66 79 5f 70  61 74 74 65 72 6e 28 22  |entify_pattern("|
00004cd0  62 6f 6d 62 22 29 0d 1e  8c 26 20 20 20 20 20 20  |bomb")...&      |
00004ce0  20 20 42 45 51 20 20 20  20 20 66 6f 72 65 5f 63  |  BEQ     fore_c|
00004cf0  6f 6c 6c 69 64 65 5f 6c  6f 6f 70 62 0d 1e 96 11  |ollide_loopb....|
00004d00  2e 6e 6f 74 5f 61 5f 6d  65 74 65 6f 72 0d 1e a0  |.not_a_meteor...|
00004d10  27 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |'        LDR    |
00004d20  20 72 30 2c 5b 72 39 2c  23 64 61 74 5f 61 63 74  | r0,[r9,#dat_act|
00004d30  69 76 65 5d 0d 1e aa 19  20 20 20 20 20 20 20 20  |ive]....        |
00004d40  43 4d 50 20 20 20 20 20  72 30 2c 23 30 0d 1e b4  |CMP     r0,#0...|
00004d50  26 20 20 20 20 20 20 20  20 42 4c 54 20 20 20 20  |&        BLT    |
00004d60  20 66 6f 72 65 5f 63 6f  6c 6c 69 64 65 5f 6c 6f  | fore_collide_lo|
00004d70  6f 70 62 0d 1e be 25 20  20 20 20 20 20 20 20 4c  |opb...%        L|
00004d80  44 52 20 20 20 20 20 72  31 34 2c 5b 72 39 2c 23  |DR     r14,[r9,#|
00004d90  64 61 74 5f 73 70 72 5d  0d 1e c8 1a 20 20 20 20  |dat_spr]....    |
00004da0  20 20 20 20 43 4d 50 20  20 20 20 20 72 31 34 2c  |    CMP     r14,|
00004db0  23 30 0d 1e d2 26 20 20  20 20 20 20 20 20 42 45  |#0...&        BE|
00004dc0  51 20 20 20 20 20 66 6f  72 65 5f 63 6f 6c 6c 69  |Q     fore_colli|
00004dd0  64 65 5f 6c 6f 6f 70 62  0d 1e dc 1f 20 20 20 20  |de_loopb....    |
00004de0  20 20 20 20 41 44 44 20  20 20 20 20 72 31 34 2c  |    ADD     r14,|
00004df0  72 31 34 2c 23 31 36 0d  1e e6 1f 20 20 20 20 20  |r14,#16....     |
00004e00  20 20 20 4c 44 4d 49 41  20 20 20 72 31 34 2c 7b  |   LDMIA   r14,{|
00004e10  72 32 2d 72 33 7d 0d 1e  f0 21 20 20 20 20 20 20  |r2-r3}...!      |
00004e20  20 20 41 44 44 20 20 20  20 20 72 31 34 2c 72 39  |  ADD     r14,r9|
00004e30  2c 23 64 61 74 5f 78 0d  1e fa 1f 20 20 20 20 20  |,#dat_x....     |
00004e40  20 20 20 4c 44 4d 49 41  20 20 20 72 31 34 2c 7b  |   LDMIA   r14,{|
00004e50  72 30 2d 72 31 7d 0d 1f  04 1c 20 20 20 20 20 20  |r0-r1}....      |
00004e60  20 20 42 49 43 20 20 20  20 20 72 30 2c 72 30 2c  |  BIC     r0,r0,|
00004e70  23 33 0d 1f 0e 1c 20 20  20 20 20 20 20 20 41 44  |#3....        AD|
00004e80  44 20 20 20 20 20 72 32  2c 72 32 2c 23 31 0d 1f  |D     r2,r2,#1..|
00004e90  18 23 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |.#        ADD   |
00004ea0  20 20 72 32 2c 72 30 2c  72 32 2c 4c 53 4c 20 23  |  r2,r0,r2,LSL #|
00004eb0  32 0d 1f 22 1c 20 20 20  20 20 20 20 20 41 44 44  |2..".        ADD|
00004ec0  20 20 20 20 20 72 33 2c  72 33 2c 23 31 0d 1f 2c  |     r3,r3,#1..,|
00004ed0  1c 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00004ee0  20 72 33 2c 72 31 2c 72  33 0d 1f 36 19 20 20 20  | r3,r1,r3..6.   |
00004ef0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 36 2c  |     CMP     r6,|
00004f00  72 30 0d 1f 40 19 20 20  20 20 20 20 20 20 43 4d  |r0..@.        CM|
00004f10  50 47 45 20 20 20 72 32  2c 72 34 0d 1f 4a 19 20  |PGE   r2,r4..J. |
00004f20  20 20 20 20 20 20 20 43  4d 50 47 45 20 20 20 72  |       CMPGE   r|
00004f30  37 2c 72 31 0d 1f 54 19  20 20 20 20 20 20 20 20  |7,r1..T.        |
00004f40  43 4d 50 47 45 20 20 20  72 33 2c 72 35 0d 1f 5e  |CMPGE   r3,r5..^|
00004f50  26 20 20 20 20 20 20 20  20 42 4c 54 20 20 20 20  |&        BLT    |
00004f60  20 66 6f 72 65 5f 63 6f  6c 6c 69 64 65 5f 6c 6f  | fore_collide_lo|
00004f70  6f 70 62 0d 1f 68 26 20  20 20 20 20 20 20 20 42  |opb..h&        B|
00004f80  4c 20 20 20 20 20 20 63  6c 65 61 72 5f 73 6d 61  |L      clear_sma|
00004f90  6c 6c 5f 73 63 72 65 65  6e 0d 1f 72 21 20 20 20  |ll_screen..r!   |
00004fa0  20 20 20 20 20 53 54 4d  46 44 20 20 20 28 73 70  |     STMFD   (sp|
00004fb0  29 21 2c 7b 72 34 2c 72  35 7d 0d 1f 7c 1c 20 20  |)!,{r4,r5}..|.  |
00004fc0  20 20 20 20 20 20 53 55  42 53 20 20 20 20 72 30  |      SUBS    r0|
00004fd0  2c 72 30 2c 72 34 0d 1f  86 19 20 20 20 20 20 20  |,r0,r4....      |
00004fe0  20 20 4d 4f 56 50 4c 20  20 20 72 34 2c 23 30 0d  |  MOVPL   r4,#0.|
00004ff0  1f 90 1c 20 20 20 20 20  20 20 20 52 53 42 4d 49  |...        RSBMI|
00005000  20 20 20 72 34 2c 72 30  2c 23 30 0d 1f 9a 19 20  |   r4,r0,#0.... |
00005010  20 20 20 20 20 20 20 4d  4f 56 4d 49 20 20 20 72  |       MOVMI   r|
00005020  30 2c 23 30 0d 1f a4 1c  20 20 20 20 20 20 20 20  |0,#0....        |
00005030  53 55 42 53 20 20 20 20  72 31 2c 72 31 2c 72 35  |SUBS    r1,r1,r5|
00005040  0d 1f ae 19 20 20 20 20  20 20 20 20 4d 4f 56 50  |....        MOVP|
00005050  4c 20 20 20 72 35 2c 23  30 0d 1f b8 1c 20 20 20  |L   r5,#0....   |
00005060  20 20 20 20 20 52 53 42  4d 49 20 20 20 72 35 2c  |     RSBMI   r5,|
00005070  72 31 2c 23 30 0d 1f c2  19 20 20 20 20 20 20 20  |r1,#0....       |
00005080  20 4d 4f 56 4d 49 20 20  20 72 31 2c 23 30 0d 1f  | MOVMI   r1,#0..|
00005090  cc 24 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |.$        LDR   |
000050a0  20 20 72 32 2c 5b 72 39  2c 23 64 61 74 5f 73 70  |  r2,[r9,#dat_sp|
000050b0  72 5d 0d 1f d6 28 20 20  20 20 20 20 20 20 42 4c  |r]...(        BL|
000050c0  20 20 20 20 20 20 70 6c  6f 74 5f 6f 6e 5f 73 6d  |      plot_on_sm|
000050d0  61 6c 6c 5f 73 63 72 65  65 6e 0d 1f e0 19 20 20  |all_screen....  |
000050e0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
000050f0  2c 72 34 0d 1f ea 19 20  20 20 20 20 20 20 20 4d  |,r4....        M|
00005100  4f 56 20 20 20 20 20 72  31 2c 72 35 0d 1f f4 24  |OV     r1,r5...$|
00005110  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00005120  72 32 2c 5b 72 38 2c 23  64 61 74 5f 73 70 72 5d  |r2,[r8,#dat_spr]|
00005130  0d 1f fe 28 20 20 20 20  20 20 20 20 42 4c 20 20  |...(        BL  |
00005140  20 20 20 20 70 6c 6f 74  5f 6f 6e 5f 73 6d 61 6c  |    plot_on_smal|
00005150  6c 5f 73 63 72 65 65 6e  0d 20 08 21 20 20 20 20  |l_screen. .!    |
00005160  20 20 20 20 4c 44 4d 46  44 20 20 20 28 73 70 29  |    LDMFD   (sp)|
00005170  21 2c 7b 72 34 2c 72 35  7d 0d 20 12 25 20 20 20  |!,{r4,r5}. .%   |
00005180  20 20 20 20 20 42 4c 20  20 20 20 20 20 63 68 65  |     BL      che|
00005190  63 6b 5f 66 6f 72 5f 6f  76 65 72 6c 61 70 0d 20  |ck_for_overlap. |
000051a0  1c 26 20 20 20 20 20 20  20 20 42 45 51 20 20 20  |.&        BEQ   |
000051b0  20 20 66 6f 72 65 5f 63  6f 6c 6c 69 64 65 5f 6c  |  fore_collide_l|
000051c0  6f 6f 70 62 0d 20 26 24  20 20 20 20 20 20 20 20  |oopb. &$        |
000051d0  4d 56 4e 20 20 20 20 20  72 30 2c 23 66 61 64 65  |MVN     r0,#fade|
000051e0  5f 73 74 61 67 65 73 25  0d 20 30 27 20 20 20 20  |_stages%. 0'    |
000051f0  20 20 20 20 53 54 52 20  20 20 20 20 72 30 2c 5b  |    STR     r0,[|
00005200  72 38 2c 23 64 61 74 5f  61 63 74 69 76 65 5d 0d  |r8,#dat_active].|
00005210  20 3a 27 20 20 20 20 20  20 20 20 53 54 52 20 20  | :'        STR  |
00005220  20 20 20 72 30 2c 5b 72  39 2c 23 64 61 74 5f 61  |   r0,[r9,#dat_a|
00005230  63 74 69 76 65 5d 0d 20  44 25 20 20 20 20 20 20  |ctive]. D%      |
00005240  20 20 4c 44 52 20 20 20  20 20 72 30 2c 5b 72 38  |  LDR     r0,[r8|
00005250  2c 23 64 61 74 5f 74 79  70 65 5d 0d 20 4e 31 20  |,#dat_type]. N1 |
00005260  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00005270  30 2c 23 a4 69 64 65 6e  74 69 66 79 5f 70 61 74  |0,#.identify_pat|
00005280  74 65 72 6e 28 22 73 68  69 70 22 29 0d 20 58 24  |tern("ship"). X$|
00005290  20 20 20 20 20 20 20 20  42 4c 45 51 20 20 20 20  |        BLEQ    |
000052a0  73 68 69 70 5f 68 61 73  5f 63 72 61 73 68 65 64  |ship_has_crashed|
000052b0  0d 20 62 1f 20 20 20 20  20 20 20 20 41 44 52 20  |. b.        ADR |
000052c0  20 20 20 20 72 31 30 2c  68 69 74 5f 74 61 62 0d  |    r10,hit_tab.|
000052d0  20 6c 25 20 20 20 20 20  20 20 20 4c 44 52 20 20  | l%        LDR  |
000052e0  20 20 20 72 30 2c 5b 72  39 2c 23 64 61 74 5f 74  |   r0,[r9,#dat_t|
000052f0  79 70 65 5d 0d 20 76 31  20 20 20 20 20 20 20 20  |ype]. v1        |
00005300  43 4d 50 20 20 20 20 20  72 30 2c 23 a4 69 64 65  |CMP     r0,#.ide|
00005310  6e 74 69 66 79 5f 70 61  74 74 65 72 6e 28 22 62  |ntify_pattern("b|
00005320  61 73 65 22 29 0d 20 80  18 20 20 20 20 20 20 20  |ase"). ..       |
00005330  20 ec 51 20 20 20 72 31  34 2c 23 35 30 0d 20 8a  | .Q   r14,#50. .|
00005340  26 20 20 20 20 20 20 20  20 53 54 52 45 51 20 20  |&        STREQ  |
00005350  20 72 31 34 2c 66 69 6e  69 73 68 65 64 5f 63 6f  | r14,finished_co|
00005360  75 6e 74 0d 20 94 15 2e  66 69 6e 64 5f 77 68 61  |unt. ...find_wha|
00005370  74 5f 77 65 5f 68 69 74  0d 20 9e 20 20 20 20 20  |t_we_hit. .     |
00005380  20 20 20 20 4c 44 4d 49  41 20 20 20 72 31 30 21  |    LDMIA   r10!|
00005390  2c 7b 72 31 2d 72 33 7d  0d 20 a8 19 20 20 20 20  |,{r1-r3}. ..    |
000053a0  20 20 20 20 43 4d 50 20  20 20 20 20 72 31 2c 23  |    CMP     r1,#|
000053b0  30 0d 20 b2 25 20 20 20  20 20 20 20 20 42 4c 54  |0. .%        BLT|
000053c0  20 20 20 20 20 66 6f 72  65 5f 63 6f 6c 6c 69 64  |     fore_collid|
000053d0  65 5f 6c 6f 6f 70 0d 20  bc 19 20 20 20 20 20 20  |e_loop. ..      |
000053e0  20 20 43 4d 50 20 20 20  20 20 72 31 2c 72 30 0d  |  CMP     r1,r0.|
000053f0  20 c6 24 20 20 20 20 20  20 20 20 42 4e 45 20 20  | .$        BNE  |
00005400  20 20 20 66 69 6e 64 5f  77 68 61 74 5f 77 65 5f  |   find_what_we_|
00005410  68 69 74 0d 20 d0 1d 20  20 20 20 20 20 20 20 41  |hit. ..        A|
00005420  44 52 20 20 20 20 20 72  31 34 2c 73 63 6f 72 65  |DR     r14,score|
00005430  0d 20 da 1f 20 20 20 20  20 20 20 20 4c 44 4d 49  |. ..        LDMI|
00005440  41 20 20 20 72 31 34 2c  7b 72 30 2c 72 31 7d 0d  |A   r14,{r0,r1}.|
00005450  20 e4 1c 20 20 20 20 20  20 20 20 41 44 44 20 20  | ..        ADD  |
00005460  20 20 20 72 30 2c 72 30  2c 72 32 0d 20 ee 1c 20  |   r0,r0,r2. .. |
00005470  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00005480  31 2c 72 31 2c 72 33 0d  20 f8 22 20 20 20 20 20  |1,r1,r3. ."     |
00005490  20 20 20 43 4d 50 20 20  20 20 20 72 31 2c 23 6d  |   CMP     r1,#m|
000054a0  61 78 5f 65 6e 65 72 67  79 0d 21 02 22 20 20 20  |ax_energy.!."   |
000054b0  20 20 20 20 20 4d 4f 56  47 54 20 20 20 72 31 2c  |     MOVGT   r1,|
000054c0  23 6d 61 78 5f 65 6e 65  72 67 79 0d 21 0c 1f 20  |#max_energy.!.. |
000054d0  20 20 20 20 20 20 20 53  54 4d 49 41 20 20 20 72  |       STMIA   r|
000054e0  31 34 2c 7b 72 30 2c 72  31 7d 0d 21 16 25 20 20  |14,{r0,r1}.!.%  |
000054f0  20 20 20 20 20 20 42 20  20 20 20 20 20 20 66 6f  |      B       fo|
00005500  72 65 5f 63 6f 6c 6c 69  64 65 5f 6c 6f 6f 70 0d  |re_collide_loop.|
00005510  21 20 04 0d 21 2a 0c 2e  68 69 74 5f 74 61 62 0d  |! ..!*..hit_tab.|
00005520  21 34 2d 20 20 20 20 20  20 20 20 44 43 44 20 20  |!4-        DCD  |
00005530  20 20 20 a4 69 64 65 6e  74 69 66 79 5f 70 61 74  |   .identify_pat|
00005540  74 65 72 6e 28 22 66 75  65 6c 22 29 0d 21 3e 16  |tern("fuel").!>.|
00005550  20 20 20 20 20 20 20 20  44 43 44 20 20 20 20 20  |        DCD     |
00005560  31 30 0d 21 48 16 20 20  20 20 20 20 20 20 44 43  |10.!H.        DC|
00005570  44 20 20 20 20 20 32 30  0d 21 52 2d 20 20 20 20  |D     20.!R-    |
00005580  20 20 20 20 44 43 44 20  20 20 20 20 a4 69 64 65  |    DCD     .ide|
00005590  6e 74 69 66 79 5f 70 61  74 74 65 72 6e 28 22 64  |ntify_pattern("d|
000055a0  69 73 68 22 29 0d 21 5c  16 20 20 20 20 20 20 20  |ish").!\.       |
000055b0  20 44 43 44 20 20 20 20  20 32 30 0d 21 66 15 20  | DCD     20.!f. |
000055c0  20 20 20 20 20 20 20 44  43 44 20 20 20 20 20 30  |       DCD     0|
000055d0  0d 21 70 2f 20 20 20 20  20 20 20 20 44 43 44 20  |.!p/        DCD |
000055e0  20 20 20 20 a4 69 64 65  6e 74 69 66 79 5f 70 61  |    .identify_pa|
000055f0  74 74 65 72 6e 28 22 72  6f 63 6b 65 74 22 29 0d  |ttern("rocket").|
00005600  21 7a 16 20 20 20 20 20  20 20 20 44 43 44 20 20  |!z.        DCD  |
00005610  20 20 20 34 30 0d 21 84  15 20 20 20 20 20 20 20  |   40.!..       |
00005620  20 44 43 44 20 20 20 20  20 30 0d 21 8e 2f 20 20  | DCD     0.!./  |
00005630  20 20 20 20 20 20 44 43  44 20 20 20 20 20 a4 69  |      DCD     .i|
00005640  64 65 6e 74 69 66 79 5f  70 61 74 74 65 72 6e 28  |dentify_pattern(|
00005650  22 73 61 75 63 65 72 22  29 0d 21 98 16 20 20 20  |"saucer").!..   |
00005660  20 20 20 20 20 44 43 44  20 20 20 20 20 34 30 0d  |     DCD     40.|
00005670  21 a2 15 20 20 20 20 20  20 20 20 44 43 44 20 20  |!..        DCD  |
00005680  20 20 20 30 0d 21 ac 2d  20 20 20 20 20 20 20 20  |   0.!.-        |
00005690  44 43 44 20 20 20 20 20  a4 69 64 65 6e 74 69 66  |DCD     .identif|
000056a0  79 5f 70 61 74 74 65 72  6e 28 22 62 61 73 65 22  |y_pattern("base"|
000056b0  29 0d 21 b6 18 20 20 20  20 20 20 20 20 44 43 44  |).!..        DCD|
000056c0  20 20 20 20 20 31 30 30  30 0d 21 c0 15 20 20 20  |     1000.!..   |
000056d0  20 20 20 20 20 44 43 44  20 20 20 20 20 30 0d 21  |     DCD     0.!|
000056e0  ca 16 20 20 20 20 20 20  20 20 44 43 44 20 20 20  |..        DCD   |
000056f0  20 20 2d 31 0d 21 d4 04  0d 21 de 10 2e 73 68 6f  |  -1.!...!...sho|
00005700  77 5f 65 6e 65 72 67 79  0d 21 e8 27 20 20 20 20  |w_energy.!.'    |
00005710  20 20 20 20 53 54 4d 46  44 20 20 20 28 73 70 29  |    STMFD   (sp)|
00005720  21 2c 7b 72 30 2d 72 31  32 2c 6c 69 6e 6b 7d 0d  |!,{r0-r12,link}.|
00005730  21 f2 1d 20 20 20 20 20  20 20 20 4c 44 52 20 20  |!..        LDR  |
00005740  20 20 20 72 31 31 2c 76  64 75 5f 6f 0d 21 fc 1d  |   r11,vdu_o.!..|
00005750  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00005760  72 38 2c 65 6e 65 72 67  79 0d 22 06 19 20 20 20  |r8,energy."..   |
00005770  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 37 2c  |     MOV     r7,|
00005780  23 30 0d 22 10 1e 20 20  20 20 20 20 20 20 41 44  |#0."..        AD|
00005790  44 20 20 20 20 20 72 31  31 2c 72 31 31 2c 23 34  |D     r11,r11,#4|
000057a0  0d 22 1a 23 20 20 20 20  20 20 20 20 41 44 44 20  |.".#        ADD |
000057b0  20 20 20 20 72 31 31 2c  72 31 31 2c 23 32 34 38  |    r11,r11,#248|
000057c0  3c 3c 35 0d 22 24 23 20  20 20 20 20 20 20 20 41  |<<5."$#        A|
000057d0  44 44 20 20 20 20 20 72  31 31 2c 72 31 31 2c 23  |DD     r11,r11,#|
000057e0  32 34 38 3c 3c 37 0d 22  2e 15 2e 73 68 6f 77 5f  |248<<7."...show_|
000057f0  65 6e 65 72 67 79 5f 6c  6f 6f 70 0d 22 38 1b 20  |energy_loop."8. |
00005800  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00005810  30 2c 23 26 46 46 0d 22  42 1a 20 20 20 20 20 20  |0,#&FF."B.      |
00005820  20 20 43 4d 50 20 20 20  20 20 72 37 2c 23 34 30  |  CMP     r7,#40|
00005830  0d 22 4c 1b 20 20 20 20  20 20 20 20 4d 4f 56 4c  |."L.        MOVL|
00005840  54 20 20 20 72 30 2c 23  26 42 42 0d 22 56 1a 20  |T   r0,#&BB."V. |
00005850  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00005860  37 2c 23 32 30 0d 22 60  1b 20 20 20 20 20 20 20  |7,#20."`.       |
00005870  20 4d 4f 56 4c 54 20 20  20 72 30 2c 23 26 41 41  | MOVLT   r0,#&AA|
00005880  0d 22 6a 19 20 20 20 20  20 20 20 20 43 4d 50 20  |."j.        CMP |
00005890  20 20 20 20 72 37 2c 72  38 0d 22 74 1b 20 20 20  |    r7,r8."t.   |
000058a0  20 20 20 20 20 4d 4f 56  47 45 20 20 20 72 30 2c  |     MOVGE   r0,|
000058b0  23 26 30 30 0d 22 7e 21  20 20 20 20 20 20 20 20  |#&00."~!        |
000058c0  53 54 52 42 20 20 20 20  72 30 2c 5b 72 31 31 2c  |STRB    r0,[r11,|
000058d0  23 31 36 30 5d 0d 22 88  21 20 20 20 20 20 20 20  |#160].".!       |
000058e0  20 53 54 52 42 20 20 20  20 72 30 2c 5b 72 31 31  | STRB    r0,[r11|
000058f0  2c 23 33 32 30 5d 0d 22  92 21 20 20 20 20 20 20  |,#320].".!      |
00005900  20 20 53 54 52 42 20 20  20 20 72 30 2c 5b 72 31  |  STRB    r0,[r1|
00005910  31 2c 23 34 38 30 5d 0d  22 9c 1f 20 20 20 20 20  |1,#480]."..     |
00005920  20 20 20 53 54 52 42 20  20 20 20 72 30 2c 5b 72  |   STRB    r0,[r|
00005930  31 31 5d 2c 23 31 0d 22  a6 1c 20 20 20 20 20 20  |11],#1."..      |
00005940  20 20 41 44 44 20 20 20  20 20 72 37 2c 72 37 2c  |  ADD     r7,r7,|
00005950  23 31 0d 22 b0 22 20 20  20 20 20 20 20 20 43 4d  |#1."."        CM|
00005960  50 20 20 20 20 20 72 37  2c 23 6d 61 78 5f 65 6e  |P     r7,#max_en|
00005970  65 72 67 79 0d 22 ba 24  20 20 20 20 20 20 20 20  |ergy.".$        |
00005980  42 4c 54 20 20 20 20 20  73 68 6f 77 5f 65 6e 65  |BLT     show_ene|
00005990  72 67 79 5f 6c 6f 6f 70  0d 22 c4 25 20 20 20 20  |rgy_loop.".%    |
000059a0  20 20 20 20 4c 44 4d 46  44 20 20 20 28 73 70 29  |    LDMFD   (sp)|
000059b0  21 2c 7b 72 30 2d 72 31  32 2c 70 63 7d 0d 22 ce  |!,{r0-r12,pc}.".|
000059c0  04 0d 22 d8 0f 2e 73 68  6f 77 5f 73 63 6f 72 65  |.."...show_score|
000059d0  0d 22 e2 26 20 20 20 20  20 20 20 20 53 54 4d 46  |.".&        STMF|
000059e0  44 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 33  |D   (sp)!,{r0-r3|
000059f0  2c 6c 69 6e 6b 7d 0d 22  ec 1c 20 20 20 20 20 20  |,link}."..      |
00005a00  20 20 53 55 42 20 20 20  20 20 73 70 2c 73 70 2c  |  SUB     sp,sp,|
00005a10  23 38 0d 22 f6 1c 20 20  20 20 20 20 20 20 4c 44  |#8."..        LD|
00005a20  52 20 20 20 20 20 72 30  2c 73 63 6f 72 65 0d 23  |R     r0,score.#|
00005a30  00 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
00005a40  20 20 72 31 2c 73 70 0d  23 0a 19 20 20 20 20 20  |  r1,sp.#..     |
00005a50  20 20 20 4d 4f 56 20 20  20 20 20 72 32 2c 23 38  |   MOV     r2,#8|
00005a60  0d 23 14 2a 20 20 20 20  20 20 20 20 53 57 49 20  |.#.*        SWI |
00005a70  20 20 20 20 22 58 4f 53  5f 43 6f 6e 76 65 72 74  |    "XOS_Convert|
00005a80  43 61 72 64 69 6e 61 6c  34 22 0d 23 1e 1c 20 20  |Cardinal4".#..  |
00005a90  20 20 20 20 20 20 53 55  42 20 20 20 20 20 72 31  |      SUB     r1|
00005aa0  2c 72 31 2c 72 30 0d 23  28 1b 20 20 20 20 20 20  |,r1,r0.#(.      |
00005ab0  20 20 53 57 49 20 20 20  20 20 26 31 30 30 2b 33  |  SWI     &100+3|
00005ac0  31 0d 23 32 1d 20 20 20  20 20 20 20 20 52 53 42  |1.#2.        RSB|
00005ad0  20 20 20 20 20 72 30 2c  72 31 2c 23 33 38 0d 23  |     r0,r1,#38.#|
00005ae0  3c 20 20 20 20 20 20 20  20 20 53 57 49 20 20 20  |<         SWI   |
00005af0  20 20 22 58 4f 53 5f 57  72 69 74 65 43 22 0d 23  |  "XOS_WriteC".#|
00005b00  46 1b 20 20 20 20 20 20  20 20 53 57 49 20 20 20  |F.        SWI   |
00005b10  20 20 26 31 30 30 2b 33  31 0d 23 50 19 20 20 20  |  &100+31.#P.   |
00005b20  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 30 2c  |     MOV     r0,|
00005b30  73 70 0d 23 5a 20 20 20  20 20 20 20 20 20 53 57  |sp.#Z         SW|
00005b40  49 20 20 20 20 20 22 58  4f 53 5f 57 72 69 74 65  |I     "XOS_Write|
00005b50  30 22 0d 23 64 1c 20 20  20 20 20 20 20 20 41 44  |0".#d.        AD|
00005b60  44 20 20 20 20 20 73 70  2c 73 70 2c 23 38 0d 23  |D     sp,sp,#8.#|
00005b70  6e 24 20 20 20 20 20 20  20 20 4c 44 4d 46 44 20  |n$        LDMFD |
00005b80  20 20 28 73 70 29 21 2c  7b 72 30 2d 72 33 2c 70  |  (sp)!,{r0-r3,p|
00005b90  63 7d 0d 23 78 04 0d 23  82 15 2e 73 63 6f 72 65  |c}.#x..#...score|
00005ba0  20 20 44 43 44 20 20 20  20 20 30 0d 23 8c 15 2e  |  DCD     0.#...|
00005bb0  65 6e 65 72 67 79 20 44  43 44 20 20 20 20 20 30  |energy DCD     0|
00005bc0  0d 23 96 04 0d 23 a0 0d  2e 41 6d 6f 76 5f 70 74  |.#...#...Amov_pt|
00005bd0  72 0d 23 aa 1d 20 20 20  20 20 20 20 20 44 43 44  |r.#..        DCD|
00005be0  20 20 20 20 20 6d 6f 76  65 5f 70 74 72 25 0d 23  |     move_ptr%.#|
00005bf0  b4 10 2e 41 6d 6f 76 5f  73 70 72 69 74 65 0d 23  |...Amov_sprite.#|
00005c00  be 20 20 20 20 20 20 20  20 20 44 43 44 20 20 20  |.         DCD   |
00005c10  20 20 6d 6f 76 65 5f 73  70 72 69 74 65 25 0d 23  |  move_sprite%.#|
00005c20  c8 0d 2e 41 70 61 74 5f  70 74 72 0d 23 d2 1c 20  |...Apat_ptr.#.. |
00005c30  20 20 20 20 20 20 20 44  43 44 20 20 20 20 20 70  |       DCD     p|
00005c40  61 74 5f 70 74 72 25 0d  23 dc 0d 2e 41 70 6f 70  |at_ptr%.#...Apop|
00005c50  5f 64 61 74 0d 23 e6 1c  20 20 20 20 20 20 20 20  |_dat.#..        |
00005c60  44 43 44 20 20 20 20 20  70 6f 70 5f 64 61 74 25  |DCD     pop_dat%|
00005c70  0d 23 f0 0d 2e 70 6f 70  5f 6e 65 78 74 0d 23 fa  |.#...pop_next.#.|
00005c80  15 20 20 20 20 20 20 20  20 44 43 44 20 20 20 20  |.        DCD    |
00005c90  20 30 0d 24 04 04 0d 24  0e 16 2e 61 64 64 5f 61  | 0.$...$...add_a|
00005ca0  6c 69 65 6e 5f 74 6f 5f  6c 69 73 74 0d 24 18 27  |lien_to_list.$.'|
00005cb0  20 20 20 20 20 20 20 20  53 54 4d 46 44 20 20 20  |        STMFD   |
00005cc0  28 73 70 29 21 2c 7b 72  30 2d 72 31 32 2c 6c 69  |(sp)!,{r0-r12,li|
00005cd0  6e 6b 7d 0d 24 22 1b 20  20 20 20 20 20 20 20 4c  |nk}.$".        L|
00005ce0  44 52 20 20 20 20 20 72  38 2c 66 72 65 65 0d 24  |DR     r8,free.$|
00005cf0  2c 19 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |,.        CMP   |
00005d00  20 20 72 38 2c 23 30 0d  24 36 25 20 20 20 20 20  |  r8,#0.$6%     |
00005d10  20 20 20 4c 44 4d 45 51  46 44 20 28 73 70 29 21  |   LDMEQFD (sp)!|
00005d20  2c 7b 72 30 2d 72 31 32  2c 70 63 7d 0d 24 40 1b  |,{r0-r12,pc}.$@.|
00005d30  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00005d40  72 37 2c 6c 69 73 74 0d  24 4a 26 20 20 20 20 20  |r7,list.$J&     |
00005d50  20 20 20 4c 44 52 20 20  20 20 20 72 31 34 2c 5b  |   LDR     r14,[|
00005d60  72 38 2c 23 64 61 74 5f  6e 65 78 74 5d 0d 24 54  |r8,#dat_next].$T|
00005d70  1c 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |.        STR    |
00005d80  20 72 31 34 2c 66 72 65  65 0d 24 5e 25 20 20 20  | r14,free.$^%   |
00005d90  20 20 20 20 20 53 54 52  20 20 20 20 20 72 37 2c  |     STR     r7,|
00005da0  5b 72 38 2c 23 64 61 74  5f 6e 65 78 74 5d 0d 24  |[r8,#dat_next].$|
00005db0  68 1b 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |h.        STR   |
00005dc0  20 20 72 38 2c 6c 69 73  74 0d 24 72 1d 20 20 20  |  r8,list.$r.   |
00005dd0  20 20 20 20 20 41 44 44  20 20 20 20 20 72 31 34  |     ADD     r14|
00005de0  2c 72 38 2c 23 34 0d 24  7c 1f 20 20 20 20 20 20  |,r8,#4.$|.      |
00005df0  20 20 53 54 4d 49 41 20  20 20 72 31 34 2c 7b 72  |  STMIA   r14,{r|
00005e00  30 2d 72 33 7d 0d 24 86  19 20 20 20 20 20 20 20  |0-r3}.$..       |
00005e10  20 4d 4f 56 20 20 20 20  20 72 31 2c 23 30 0d 24  | MOV     r1,#0.$|
00005e20  90 31 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |.1        CMP   |
00005e30  20 20 72 30 2c 23 a4 69  64 65 6e 74 69 66 79 5f  |  r0,#.identify_|
00005e40  70 61 74 74 65 72 6e 28  22 73 68 69 70 22 29 0d  |pattern("ship").|
00005e50  24 9a 33 20 20 20 20 20  20 20 20 43 4d 50 4e 45  |$.3        CMPNE|
00005e60  20 20 20 72 30 2c 23 a4  69 64 65 6e 74 69 66 79  |   r0,#.identify|
00005e70  5f 70 61 74 74 65 72 6e  28 22 62 75 6c 6c 65 74  |_pattern("bullet|
00005e80  22 29 0d 24 a4 31 20 20  20 20 20 20 20 20 43 4d  |").$.1        CM|
00005e90  50 4e 45 20 20 20 72 30  2c 23 a4 69 64 65 6e 74  |PNE   r0,#.ident|
00005ea0  69 66 79 5f 70 61 74 74  65 72 6e 28 22 62 6f 6d  |ify_pattern("bom|
00005eb0  62 22 29 0d 24 ae 16 20  20 20 20 20 20 20 20 ec  |b").$..        .|
00005ec0  51 20 20 20 72 31 2c 23  31 0d 24 b8 33 20 20 20  |Q   r1,#1.$.3   |
00005ed0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 30 2c  |     CMP     r0,|
00005ee0  23 a4 69 64 65 6e 74 69  66 79 5f 70 61 74 74 65  |#.identify_patte|
00005ef0  72 6e 28 22 6d 65 74 65  6f 72 22 29 0d 24 c2 16  |rn("meteor").$..|
00005f00  20 20 20 20 20 20 20 20  ec 51 20 20 20 72 31 2c  |        .Q   r1,|
00005f10  23 32 0d 24 cc 26 20 20  20 20 20 20 20 20 53 54  |#2.$.&        ST|
00005f20  52 20 20 20 20 20 72 31  2c 5b 72 38 2c 23 64 61  |R     r1,[r8,#da|
00005f30  74 5f 63 6c 61 73 73 5d  0d 24 d6 19 20 20 20 20  |t_class].$..    |
00005f40  20 20 20 20 4d 4f 56 20  20 20 20 20 72 30 2c 23  |    MOV     r0,#|
00005f50  30 0d 24 e0 27 20 20 20  20 20 20 20 20 53 54 52  |0.$.'        STR|
00005f60  20 20 20 20 20 72 30 2c  5b 72 38 2c 23 64 61 74  |     r0,[r8,#dat|
00005f70  5f 6d 6f 76 5f 70 63 5d  0d 24 ea 27 20 20 20 20  |_mov_pc].$.'    |
00005f80  20 20 20 20 53 54 52 20  20 20 20 20 72 30 2c 5b  |    STR     r0,[|
00005f90  72 38 2c 23 64 61 74 5f  61 63 74 69 76 65 5d 0d  |r8,#dat_active].|
00005fa0  24 f4 2a 20 20 20 20 20  20 20 20 53 54 52 20 20  |$.*        STR  |
00005fb0  20 20 20 72 30 2c 5b 72  38 2c 23 64 61 74 5f 70  |   r0,[r8,#dat_p|
00005fc0  61 74 5f 63 6f 75 6e 74  5d 0d 24 fe 1a 20 20 20  |at_count].$..   |
00005fd0  20 20 20 20 20 4d 56 4e  20 20 20 20 20 72 30 2c  |     MVN     r0,|
00005fe0  23 31 31 0d 25 08 27 20  20 20 20 20 20 20 20 53  |#11.%.'        S|
00005ff0  54 52 20 20 20 20 20 72  30 2c 5b 72 38 2c 23 64  |TR     r0,[r8,#d|
00006000  61 74 5f 70 61 74 5f 70  63 5d 0d 25 12 19 20 20  |at_pat_pc].%..  |
00006010  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
00006020  2c 23 30 0d 25 1c 24 20  20 20 20 20 20 20 20 53  |,#0.%.$        S|
00006030  54 52 20 20 20 20 20 72  30 2c 5b 72 38 2c 23 64  |TR     r0,[r8,#d|
00006040  61 74 5f 73 70 72 5d 0d  25 26 25 20 20 20 20 20  |at_spr].%&%     |
00006050  20 20 20 4c 44 4d 46 44  20 20 20 28 73 70 29 21  |   LDMFD   (sp)!|
00006060  2c 7b 72 30 2d 72 31 32  2c 70 63 7d 0d 25 30 04  |,{r0-r12,pc}.%0.|
00006070  0d 25 3a 0e 2e 73 63 72  6f 6c 6c 5f 6f 6e 0d 25  |.%:..scroll_on.%|
00006080  44 26 20 20 20 20 20 20  20 20 53 54 4d 46 44 20  |D&        STMFD |
00006090  20 20 28 73 70 29 21 2c  7b 72 30 2d 72 37 2c 6c  |  (sp)!,{r0-r7,l|
000060a0  69 6e 6b 7d 0d 25 4e 21  20 20 20 20 20 20 20 20  |ink}.%N!        |
000060b0  4c 44 52 20 20 20 20 20  72 31 34 2c 6c 61 6e 64  |LDR     r14,land|
000060c0  73 5f 65 6e 64 0d 25 58  1b 20 20 20 20 20 20 20  |s_end.%X.       |
000060d0  20 43 4d 50 20 20 20 20  20 72 31 30 2c 72 31 34  | CMP     r10,r14|
000060e0  0d 25 62 24 20 20 20 20  20 20 20 20 4c 44 4d 47  |.%b$        LDMG|
000060f0  45 46 44 20 28 73 70 29  21 2c 7b 72 30 2d 72 37  |EFD (sp)!,{r0-r7|
00006100  2c 70 63 7d 0d 25 6c 1b  20 20 20 20 20 20 20 20  |,pc}.%l.        |
00006110  80 20 20 20 20 20 72 30  2c 72 31 30 2c 23 33 0d  |.     r0,r10,#3.|
00006120  25 76 1f 20 20 20 20 20  20 20 20 41 44 52 20 20  |%v.        ADR  |
00006130  20 20 20 72 31 2c 62 61  6e 6b 5f 64 61 74 0d 25  |   r1,bank_dat.%|
00006140  80 25 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |.%        LDR   |
00006150  20 20 72 30 2c 5b 72 31  2c 72 30 2c 4c 53 4c 20  |  r0,[r1,r0,LSL |
00006160  23 32 5d 0d 25 8a 1c 20  20 20 20 20 20 20 20 42  |#2].%..        B|
00006170  49 43 20 20 20 20 20 72  31 2c 72 39 2c 23 33 0d  |IC     r1,r9,#3.|
00006180  25 94 1c 20 20 20 20 20  20 20 20 41 44 44 20 20  |%..        ADD  |
00006190  20 20 20 72 30 2c 72 30  2c 72 31 0d 25 9e 29 20  |   r0,r0,r1.%.) |
000061a0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
000061b0  31 2c 72 31 30 2c 23 62  79 74 65 73 5f 70 65 72  |1,r10,#bytes_per|
000061c0  5f 72 6f 77 0d 25 a8 20  20 20 20 20 20 20 20 20  |_row.%.         |
000061d0  4c 44 52 20 20 20 20 20  72 32 2c 6c 61 6e 64 5f  |LDR     r2,land_|
000061e0  61 64 64 72 0d 25 b2 1f  20 20 20 20 20 20 20 20  |addr.%..        |
000061f0  4c 44 52 20 20 20 20 20  72 33 2c 73 70 72 5f 61  |LDR     r3,spr_a|
00006200  64 64 72 0d 25 bc 1f 20  20 20 20 20 20 20 20 42  |ddr.%..        B|
00006210  4c 20 20 20 20 20 20 73  68 6f 77 5f 63 6f 6c 75  |L      show_colu|
00006220  6d 6e 0d 25 c6 1c 20 20  20 20 20 20 20 20 41 44  |mn.%..        AD|
00006230  44 20 20 20 20 20 72 39  2c 72 39 2c 23 31 0d 25  |D     r9,r9,#1.%|
00006240  d0 25 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |.%        CMP   |
00006250  20 20 72 39 2c 23 62 79  74 65 73 5f 70 65 72 5f  |  r9,#bytes_per_|
00006260  72 6f 77 0d 25 da 16 20  20 20 20 20 20 20 20 ec  |row.%..        .|
00006270  51 20 20 20 72 39 2c 23  30 0d 25 e4 1e 20 20 20  |Q   r9,#0.%..   |
00006280  20 20 20 20 20 41 44 44  20 20 20 20 20 72 31 30  |     ADD     r10|
00006290  2c 72 31 30 2c 23 31 0d  25 ee 24 20 20 20 20 20  |,r10,#1.%.$     |
000062a0  20 20 20 4c 44 4d 46 44  20 20 20 28 73 70 29 21  |   LDMFD   (sp)!|
000062b0  2c 7b 72 30 2d 72 37 2c  70 63 7d 0d 25 f8 04 0d  |,{r0-r7,pc}.%...|
000062c0  26 02 35 2e 6c 61 6e 64  73 5f 65 6e 64 20 20 20  |&.5.lands_end   |
000062d0  20 20 20 45 51 55 44 20  20 20 20 6c 61 6e 64 5f  |   EQUD    land_|
000062e0  65 78 74 2d 62 79 74 65  73 5f 70 65 72 5f 72 6f  |ext-bytes_per_ro|
000062f0  77 2d 31 36 0d 26 0c 25  2e 73 70 72 5f 61 64 64  |w-16.&.%.spr_add|
00006300  72 20 20 20 20 20 20 20  45 51 55 44 20 20 20 20  |r       EQUD    |
00006310  73 63 65 6e 65 5f 73 70  72 0d 26 16 20 2e 6c 61  |scene_spr.&. .la|
00006320  6e 64 5f 61 64 64 72 20  20 20 20 20 20 45 51 55  |nd_addr      EQU|
00006330  44 20 20 20 20 6c 61 6e  64 0d 26 20 04 0d 26 2a  |D    land.& ..&*|
00006340  10 2e 73 68 6f 77 5f 63  6f 6c 75 6d 6e 0d 26 34  |..show_column.&4|
00006350  27 20 20 20 20 20 20 20  20 53 54 4d 46 44 20 20  |'        STMFD  |
00006360  20 28 73 70 29 21 2c 7b  72 30 2d 72 31 32 2c 6c  | (sp)!,{r0-r12,l|
00006370  69 6e 6b 7d 0d 26 3e 33  20 20 20 20 20 20 20 20  |ink}.&>3        |
00006380  4d 4f 56 20 20 20 20 20  72 31 34 2c 72 31 2c 4c  |MOV     r14,r1,L|
00006390  53 52 20 23 a4 6c 6f 67  32 28 73 70 72 69 74 65  |SR #.log2(sprite|
000063a0  5f 77 69 64 74 68 29 0d  26 48 27 20 20 20 20 20  |_width).&H'     |
000063b0  20 20 20 80 20 20 20 20  20 72 38 2c 72 31 2c 23  |   .     r8,r1,#|
000063c0  73 70 72 69 74 65 5f 77  69 64 74 68 2d 31 0d 26  |sprite_width-1.&|
000063d0  52 1a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |R.        MOV   |
000063e0  20 20 72 36 2c 23 6e 6f  0d 26 5c 20 20 20 20 20  |  r6,#no.&\     |
000063f0  20 20 20 20 4d 4c 41 20  20 20 20 20 72 37 2c 72  |    MLA     r7,r|
00006400  31 34 2c 72 36 2c 72 32  0d 26 66 0e 2e 73 68 6f  |14,r6,r2.&f..sho|
00006410  77 5f 63 6f 6c 31 0d 26  70 1e 20 20 20 20 20 20  |w_col1.&p.      |
00006420  20 20 4c 44 52 42 20 20  20 20 72 39 2c 5b 72 37  |  LDRB    r9,[r7|
00006430  5d 2c 23 31 0d 26 7a 25  20 20 20 20 20 20 20 20  |],#1.&z%        |
00006440  4c 44 52 20 20 20 20 20  72 39 2c 5b 72 33 2c 72  |LDR     r9,[r3,r|
00006450  39 2c 4c 53 4c 20 23 32  5d 0d 26 84 20 20 20 20  |9,LSL #2].&.    |
00006460  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 31 34  |     LDR     r14|
00006470  2c 5b 72 39 2c 23 33 32  5d 0d 26 8e 1d 20 20 20  |,[r9,#32].&..   |
00006480  20 20 20 20 20 41 44 44  20 20 20 20 20 72 39 2c  |     ADD     r9,|
00006490  72 39 2c 72 31 34 0d 26  98 1d 20 20 20 20 20 20  |r9,r14.&..      |
000064a0  20 20 42 49 43 20 20 20  20 20 72 31 34 2c 72 38  |  BIC     r14,r8|
000064b0  2c 23 33 0d 26 a2 1d 20  20 20 20 20 20 20 20 41  |,#3.&..        A|
000064c0  44 44 20 20 20 20 20 72  39 2c 72 39 2c 72 31 34  |DD     r9,r9,r14|
000064d0  0d 26 ac 26 20 20 20 20  20 20 20 20 43 4d 50 20  |.&.&        CMP |
000064e0  20 20 20 20 72 38 2c 23  73 70 72 69 74 65 5f 77  |    r8,#sprite_w|
000064f0  69 64 74 68 2d 34 0d 26  b6 1d 20 20 20 20 20 20  |idth-4.&..      |
00006500  20 20 41 44 44 4c 54 20  20 20 72 31 30 2c 72 39  |  ADDLT   r10,r9|
00006510  2c 23 34 0d 26 c0 22 20  20 20 20 20 20 20 20 4c  |,#4.&."        L|
00006520  44 52 47 45 42 20 20 72  31 30 2c 5b 72 37 2c 23  |DRGEB  r10,[r7,#|
00006530  6e 6f 2d 31 5d 0d 26 ca  27 20 20 20 20 20 20 20  |no-1].&.'       |
00006540  20 4c 44 52 47 45 20 20  20 72 31 30 2c 5b 72 33  | LDRGE   r10,[r3|
00006550  2c 72 31 30 2c 4c 53 4c  20 23 32 5d 0d 26 d4 21  |,r10,LSL #2].&.!|
00006560  20 20 20 20 20 20 20 20  4c 44 52 47 45 20 20 20  |        LDRGE   |
00006570  72 31 34 2c 5b 72 31 30  2c 23 33 32 5d 0d 26 de  |r14,[r10,#32].&.|
00006580  1f 20 20 20 20 20 20 20  20 41 44 44 47 45 20 20  |.        ADDGE  |
00006590  20 72 31 30 2c 72 31 30  2c 72 31 34 0d 26 e8 1b  | r10,r10,r14.&..|
000065a0  20 20 20 20 20 20 20 20  80 20 20 20 20 20 72 31  |        .     r1|
000065b0  34 2c 72 31 2c 23 33 0d  26 f2 22 20 20 20 20 20  |4,r1,#3.&."     |
000065c0  20 20 20 4d 4f 56 20 20  20 20 20 72 31 34 2c 72  |   MOV     r14,r|
000065d0  31 34 2c 4c 53 4c 20 23  33 0d 26 fc 1e 20 20 20  |14,LSL #3.&..   |
000065e0  20 20 20 20 20 52 53 42  20 20 20 20 20 72 34 2c  |     RSB     r4,|
000065f0  72 31 34 2c 23 33 32 0d  27 06 20 5d 3a e3 20 7a  |r14,#32.'. ]:. z|
00006600  25 3d 30 20 b8 20 73 69  7a 65 2d 31 3a 5b 4f 50  |%=0 . size-1:[OP|
00006610  54 20 70 61 73 73 25 0d  27 10 2a 20 20 20 20 20  |T pass%.'.*     |
00006620  20 20 20 4c 44 52 20 20  20 20 20 72 31 31 2c 5b  |   LDR     r11,[|
00006630  72 39 5d 2c 23 73 70 72  69 74 65 5f 77 69 64 74  |r9],#sprite_widt|
00006640  68 0d 27 1a 2b 20 20 20  20 20 20 20 20 4c 44 52  |h.'.+        LDR|
00006650  20 20 20 20 20 72 31 32  2c 5b 72 31 30 5d 2c 23  |     r12,[r10],#|
00006660  73 70 72 69 74 65 5f 77  69 64 74 68 0d 27 24 23  |sprite_width.'$#|
00006670  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00006680  72 31 31 2c 72 31 31 2c  4c 53 52 20 72 31 34 0d  |r11,r11,LSR r14.|
00006690  27 2e 25 20 20 20 20 20  20 20 20 84 52 20 20 20  |'.%        .R   |
000066a0  20 20 72 31 31 2c 72 31  31 2c 72 31 32 2c 4c 53  |  r11,r11,r12,LS|
000066b0  4c 20 72 34 0d 27 38 2b  20 20 20 20 20 20 20 20  |L r4.'8+        |
000066c0  53 54 52 20 20 20 20 20  72 31 31 2c 5b 72 30 5d  |STR     r11,[r0]|
000066d0  2c 23 62 79 74 65 73 5f  70 65 72 5f 72 6f 77 0d  |,#bytes_per_row.|
000066e0  27 42 15 5d 3a ed 20 7a  25 3a 5b 4f 50 54 20 70  |'B.]:. z%:[OPT p|
000066f0  61 73 73 25 0d 27 4c 1c  20 20 20 20 20 20 20 20  |ass%.'L.        |
00006700  53 55 42 53 20 20 20 20  72 36 2c 72 36 2c 23 31  |SUBS    r6,r6,#1|
00006710  0d 27 56 1d 20 20 20 20  20 20 20 20 42 4e 45 20  |.'V.        BNE |
00006720  20 20 20 20 73 68 6f 77  5f 63 6f 6c 31 0d 27 60  |    show_col1.'`|
00006730  25 20 20 20 20 20 20 20  20 4c 44 4d 46 44 20 20  |%        LDMFD  |
00006740  20 28 73 70 29 21 2c 7b  72 30 2d 72 31 32 2c 70  | (sp)!,{r0-r12,p|
00006750  63 7d 0d 27 6a 05 5d 0d  27 74 19 62 61 6e 6b 5f  |c}.'j.].'t.bank_|
00006760  64 61 74 3d a4 61 6c 6c  6f 63 28 31 36 2c 30 29  |dat=.alloc(16,0)|
00006770  0d 27 7e 0e 5b 4f 50 54  20 70 61 73 73 25 0d 27  |.'~.[OPT pass%.'|
00006780  88 0e 2e 63 6f 70 79 5f  62 61 6e 6b 0d 27 92 27  |...copy_bank.'.'|
00006790  20 20 20 20 20 20 20 20  53 54 4d 46 44 20 20 20  |        STMFD   |
000067a0  28 73 70 29 21 2c 7b 72  30 2d 72 31 32 2c 6c 69  |(sp)!,{r0-r12,li|
000067b0  6e 6b 7d 0d 27 9c 1b 20  20 20 20 20 20 20 20 80  |nk}.'..        .|
000067c0  20 20 20 20 20 72 30 2c  72 31 30 2c 23 33 0d 27  |     r0,r10,#3.'|
000067d0  a6 1f 20 20 20 20 20 20  20 20 41 44 52 20 20 20  |..        ADR   |
000067e0  20 20 72 31 2c 62 61 6e  6b 5f 64 61 74 0d 27 b0  |  r1,bank_dat.'.|
000067f0  26 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |&        LDR    |
00006800  20 72 31 30 2c 5b 72 31  2c 72 30 2c 4c 53 4c 20  | r10,[r1,r0,LSL |
00006810  23 32 5d 0d 27 ba 1c 20  20 20 20 20 20 20 20 42  |#2].'..        B|
00006820  49 43 20 20 20 20 20 72  39 2c 72 39 2c 23 33 0d  |IC     r9,r9,#3.|
00006830  27 c4 1e 20 20 20 20 20  20 20 20 41 44 44 20 20  |'..        ADD  |
00006840  20 20 20 72 31 30 2c 72  31 30 2c 72 39 0d 27 ce  |   r10,r10,r9.'.|
00006850  1e 20 20 20 20 20 20 20  20 41 44 52 20 20 20 20  |.        ADR    |
00006860  20 72 37 2c 72 6f 75 74  69 6e 65 0d 27 d8 25 20  | r7,routine.'.% |
00006870  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00006880  38 2c 23 62 79 74 65 73  5f 70 65 72 5f 72 6f 77  |8,#bytes_per_row|
00006890  0d 27 e2 1a 20 20 20 20  20 20 20 20 4d 56 4e 20  |.'..        MVN |
000068a0  20 20 20 20 72 31 34 2c  23 30 0d 27 ec 1c 20 20  |    r14,#0.'..  |
000068b0  20 20 20 20 20 20 41 44  52 20 20 20 20 20 72 32  |      ADR     r2|
000068c0  2c 6c 6f 61 64 69 0d 27  f6 0f 2e 6d 61 6b 65 5f  |,loadi.'...make_|
000068d0  72 6f 75 74 65 0d 28 00  19 20 20 20 20 20 20 20  |route.(..       |
000068e0  20 43 4d 50 20 20 20 20  20 72 38 2c 23 30 0d 28  | CMP     r8,#0.(|
000068f0  0a 1e 20 20 20 20 20 20  20 20 42 45 51 20 20 20  |..        BEQ   |
00006900  20 20 6d 61 64 65 5f 72  6f 75 74 65 0d 28 14 28  |  made_route.(.(|
00006910  20 20 20 20 20 20 20 20  52 53 42 20 20 20 20 20  |        RSB     |
00006920  72 36 2c 72 39 2c 23 62  79 74 65 73 5f 70 65 72  |r6,r9,#bytes_per|
00006930  5f 72 6f 77 0d 28 1e 19  20 20 20 20 20 20 20 20  |_row.(..        |
00006940  43 4d 50 20 20 20 20 20  72 36 2c 72 38 0d 28 28  |CMP     r6,r8.((|
00006950  19 20 20 20 20 20 20 20  20 4d 4f 56 47 54 20 20  |.        MOVGT  |
00006960  20 72 36 2c 72 38 0d 28  32 1a 20 20 20 20 20 20  | r6,r8.(2.      |
00006970  20 20 43 4d 50 20 20 20  20 20 72 36 2c 23 34 30  |  CMP     r6,#40|
00006980  0d 28 3c 1a 20 20 20 20  20 20 20 20 4d 4f 56 47  |.(<.        MOVG|
00006990  54 20 20 20 72 36 2c 23  34 30 0d 28 46 1e 20 20  |T   r6,#40.(F.  |
000069a0  20 20 20 20 20 20 4c 44  4d 49 41 20 20 20 72 32  |      LDMIA   r2|
000069b0  2c 7b 72 33 2c 72 34 7d  0d 28 50 20 20 20 20 20  |,{r3,r4}.(P     |
000069c0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 30 2c 72  |    MOV     r0,r|
000069d0  36 2c 4c 53 52 20 23 32  0d 28 5a 1d 20 20 20 20  |6,LSR #2.(Z.    |
000069e0  20 20 20 20 52 53 42 20  20 20 20 20 72 30 2c 72  |    RSB     r0,r|
000069f0  30 2c 23 31 30 0d 28 64  22 20 20 20 20 20 20 20  |0,#10.(d"       |
00006a00  20 80 20 20 20 20 20 72  33 2c 72 33 2c 72 31 34  | .     r3,r3,r14|
00006a10  2c 4c 53 4c 20 72 30 0d  28 6e 22 20 20 20 20 20  |,LSL r0.(n"     |
00006a20  20 20 20 80 20 20 20 20  20 72 34 2c 72 34 2c 72  |   .     r4,r4,r|
00006a30  31 34 2c 4c 53 4c 20 72  30 0d 28 78 1f 20 20 20  |14,LSL r0.(x.   |
00006a40  20 20 20 20 20 53 54 4d  49 41 20 20 20 72 37 21  |     STMIA   r7!|
00006a50  2c 7b 72 33 2c 72 34 7d  0d 28 82 1c 20 20 20 20  |,{r3,r4}.(..    |
00006a60  20 20 20 20 53 55 42 20  20 20 20 20 72 38 2c 72  |    SUB     r8,r|
00006a70  38 2c 72 36 0d 28 8c 1c  20 20 20 20 20 20 20 20  |8,r6.(..        |
00006a80  41 44 44 20 20 20 20 20  72 39 2c 72 39 2c 72 36  |ADD     r9,r9,r6|
00006a90  0d 28 96 25 20 20 20 20  20 20 20 20 43 4d 50 20  |.(.%        CMP |
00006aa0  20 20 20 20 72 39 2c 23  62 79 74 65 73 5f 70 65  |    r9,#bytes_pe|
00006ab0  72 5f 72 6f 77 0d 28 a0  1b 20 20 20 20 20 20 20  |r_row.(..       |
00006ac0  20 4c 44 52 45 51 20 20  20 72 30 2c 73 75 62 69  | LDREQ   r0,subi|
00006ad0  0d 28 aa 1e 20 20 20 20  20 20 20 20 53 54 52 45  |.(..        STRE|
00006ae0  51 20 20 20 72 30 2c 5b  72 37 5d 2c 23 34 0d 28  |Q   r0,[r7],#4.(|
00006af0  b4 16 20 20 20 20 20 20  20 20 ec 51 20 20 20 72  |..        .Q   r|
00006b00  39 2c 23 30 0d 28 be 1e  20 20 20 20 20 20 20 20  |9,#0.(..        |
00006b10  42 20 20 20 20 20 20 20  6d 61 6b 65 5f 72 6f 75  |B       make_rou|
00006b20  74 65 0d 28 c8 0f 2e 6d  61 64 65 5f 72 6f 75 74  |te.(...made_rout|
00006b30  65 0d 28 d2 1c 20 20 20  20 20 20 20 20 41 44 52  |e.(..        ADR|
00006b40  20 20 20 20 20 72 32 2c  61 64 64 31 30 0d 28 dc  |     r2,add10.(.|
00006b50  1e 20 20 20 20 20 20 20  20 4c 44 4d 49 41 20 20  |.        LDMIA  |
00006b60  20 72 32 2c 7b 72 33 2d  72 36 7d 0d 28 e6 21 20  | r2,{r3-r6}.(.! |
00006b70  20 20 20 20 20 20 20 41  44 52 20 20 20 20 20 72  |       ADR     r|
00006b80  35 2c 72 6f 75 74 69 6e  65 2d 31 36 0d 28 f0 1c  |5,routine-16.(..|
00006b90  20 20 20 20 20 20 20 20  53 55 42 20 20 20 20 20  |        SUB     |
00006ba0  72 35 2c 72 37 2c 72 35  0d 28 fa 20 20 20 20 20  |r5,r7,r5.(.     |
00006bb0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 35 2c 72  |    MOV     r5,r|
00006bc0  35 2c 41 53 52 20 23 32  0d 29 04 1c 20 20 20 20  |5,ASR #2.)..    |
00006bd0  20 20 20 20 52 53 42 20  20 20 20 20 72 35 2c 72  |    RSB     r5,r|
00006be0  35 2c 23 30 0d 29 0e 24  20 20 20 20 20 20 20 20  |5,#0.).$        |
00006bf0  42 49 43 20 20 20 20 20  72 35 2c 72 35 2c 23 26  |BIC     r5,r5,#&|
00006c00  46 46 30 30 30 30 30 30  0d 29 18 23 20 20 20 20  |FF000000.).#    |
00006c10  20 20 20 20 84 52 20 20  20 20 20 72 35 2c 72 35  |    .R     r5,r5|
00006c20  2c 23 26 31 41 30 30 30  30 30 30 0d 29 22 1e 20  |,#&1A000000.)". |
00006c30  20 20 20 20 20 20 20 53  54 4d 49 41 20 20 20 72  |       STMIA   r|
00006c40  37 2c 7b 72 33 2d 72 36  7d 0d 29 2c 1d 20 20 20  |7,{r3-r6}.),.   |
00006c50  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 31 31  |     LDR     r11|
00006c60  2c 76 64 75 5f 6f 0d 29  36 23 20 20 20 20 20 20  |,vdu_o.)6#      |
00006c70  20 20 4d 4f 56 20 20 20  20 20 72 31 32 2c 23 74  |  MOV     r12,#t|
00006c80  6f 74 61 6c 5f 73 69 7a  65 0d 29 40 1b 20 20 20  |otal_size.)@.   |
00006c90  20 20 20 20 20 42 4c 20  20 20 20 20 20 72 6f 75  |     BL      rou|
00006ca0  74 69 6e 65 0d 29 4a 25  20 20 20 20 20 20 20 20  |tine.)J%        |
00006cb0  4c 44 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |LDMFD   (sp)!,{r|
00006cc0  30 2d 72 31 32 2c 70 63  7d 0d 29 54 04 0d 29 5e  |0-r12,pc}.)T..)^|
00006cd0  20 2e 6c 6f 61 64 69 20  20 4c 44 4d 49 41 20 20  | .loadi  LDMIA  |
00006ce0  20 72 31 30 21 2c 7b 72  30 2d 72 39 7d 0d 29 68  | r10!,{r0-r9}.)h|
00006cf0  20 20 20 20 20 20 20 20  20 53 54 4d 49 41 20 20  |         STMIA  |
00006d00  20 72 31 31 21 2c 7b 72  30 2d 72 39 7d 0d 29 72  | r11!,{r0-r9}.)r|
00006d10  2a 2e 73 75 62 69 20 20  20 53 55 42 20 20 20 20  |*.subi   SUB    |
00006d20  20 72 31 30 2c 72 31 30  2c 23 62 79 74 65 73 5f  | r10,r10,#bytes_|
00006d30  70 65 72 5f 72 6f 77 0d  29 7c 04 0d 29 86 2a 2e  |per_row.)|..).*.|
00006d40  61 64 64 31 30 20 20 41  44 44 20 20 20 20 20 72  |add10  ADD     r|
00006d50  31 30 2c 72 31 30 2c 23  62 79 74 65 73 5f 70 65  |10,r10,#bytes_pe|
00006d60  72 5f 72 6f 77 0d 29 90  1e 20 20 20 20 20 20 20  |r_row.)..       |
00006d70  20 53 55 42 53 20 20 20  20 72 31 32 2c 72 31 32  | SUBS    r12,r12|
00006d80  2c 23 31 0d 29 9a 15 20  20 20 20 20 20 20 20 44  |,#1.)..        D|
00006d90  43 44 20 20 20 20 20 30  0d 29 a4 1b 2e 72 65 74  |CD     0.)...ret|
00006da0  69 20 20 20 4d 4f 56 20  20 20 20 20 70 63 2c 6c  |i   MOV     pc,l|
00006db0  69 6e 6b 0d 29 ae 04 0d  29 b8 0f 2e 73 77 61 70  |ink.)...)...swap|
00006dc0  5f 62 61 6e 6b 73 0d 29  c2 26 20 20 20 20 20 20  |_banks.).&      |
00006dd0  20 20 53 54 4d 46 44 20  20 20 28 73 70 29 21 2c  |  STMFD   (sp)!,|
00006de0  7b 72 30 2d 72 32 2c 6c  69 6e 6b 7d 0d 29 cc 1a  |{r0-r2,link}.)..|
00006df0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00006e00  72 30 2c 23 31 39 0d 29  d6 1e 20 20 20 20 20 20  |r0,#19.)..      |
00006e10  20 20 53 57 49 20 20 20  20 20 22 58 4f 53 5f 42  |  SWI     "XOS_B|
00006e20  79 74 65 22 0d 29 e0 1b  20 20 20 20 20 20 20 20  |yte".)..        |
00006e30  4d 4f 56 20 20 20 20 20  72 30 2c 23 31 31 32 0d  |MOV     r0,#112.|
00006e40  29 ea 1a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |)..        MOV  |
00006e50  20 20 20 72 31 2c 72 31  31 0d 29 f4 1e 20 20 20  |   r1,r11.)..   |
00006e60  20 20 20 20 20 53 57 49  20 20 20 20 20 22 58 4f  |     SWI     "XO|
00006e70  53 5f 42 79 74 65 22 0d  29 fe 1e 20 20 20 20 20  |S_Byte".)..     |
00006e80  20 20 20 52 53 42 20 20  20 20 20 72 31 31 2c 72  |   RSB     r11,r|
00006e90  31 31 2c 23 33 0d 2a 08  1b 20 20 20 20 20 20 20  |11,#3.*..       |
00006ea0  20 4d 4f 56 20 20 20 20  20 72 30 2c 23 31 31 33  | MOV     r0,#113|
00006eb0  0d 2a 12 1a 20 20 20 20  20 20 20 20 4d 4f 56 20  |.*..        MOV |
00006ec0  20 20 20 20 72 31 2c 72  31 31 0d 2a 1c 1e 20 20  |    r1,r11.*..  |
00006ed0  20 20 20 20 20 20 53 57  49 20 20 20 20 20 22 58  |      SWI     "X|
00006ee0  4f 53 5f 42 79 74 65 22  0d 2a 26 1c 20 20 20 20  |OS_Byte".*&.    |
00006ef0  20 20 20 20 41 44 52 20  20 20 20 20 72 30 2c 76  |    ADR     r0,v|
00006f00  64 75 5f 69 0d 2a 30 1c  20 20 20 20 20 20 20 20  |du_i.*0.        |
00006f10  41 44 52 20 20 20 20 20  72 31 2c 76 64 75 5f 6f  |ADR     r1,vdu_o|
00006f20  0d 2a 3a 2a 20 20 20 20  20 20 20 20 53 57 49 20  |.*:*        SWI |
00006f30  20 20 20 20 22 58 4f 53  5f 52 65 61 64 56 64 75  |    "XOS_ReadVdu|
00006f40  56 61 72 69 61 62 6c 65  73 22 0d 2a 44 24 20 20  |Variables".*D$  |
00006f50  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
00006f60  70 29 21 2c 7b 72 30 2d  72 32 2c 70 63 7d 0d 2a  |p)!,{r0-r2,pc}.*|
00006f70  4e 04 0d 2a 58 17 2e 76  64 75 5f 69 20 20 45 51  |N..*X..vdu_i  EQ|
00006f80  55 44 20 20 20 20 31 34  38 0d 2a 62 16 20 20 20  |UD    148.*b.   |
00006f90  20 20 20 20 20 45 51 55  44 20 20 20 20 2d 31 0d  |     EQUD    -1.|
00006fa0  2a 6c 15 2e 76 64 75 5f  6f 20 20 45 51 55 44 20  |*l..vdu_o  EQUD |
00006fb0  20 20 20 30 0d 2a 76 15  20 20 20 20 20 20 20 20  |   0.*v.        |
00006fc0  45 51 55 44 20 20 20 20  30 0d 2a 80 04 0d 2a 8a  |EQUD    0.*...*.|
00006fd0  10 2e 73 68 6f 77 5f 73  70 72 69 74 65 0d 2a 94  |..show_sprite.*.|
00006fe0  27 20 20 20 20 20 20 20  20 53 54 4d 46 44 20 20  |'        STMFD  |
00006ff0  20 28 73 70 29 21 2c 7b  72 30 2d 72 31 32 2c 6c  | (sp)!,{r0-r12,l|
00007000  69 6e 6b 7d 0d 2a 9e 24  20 20 20 20 20 20 20 20  |ink}.*.$        |
00007010  42 4c 20 20 20 20 20 20  62 6f 75 6e 64 73 5f 63  |BL      bounds_c|
00007020  68 65 63 6b 5f 65 74 63  0d 2a a8 25 20 20 20 20  |heck_etc.*.%    |
00007030  20 20 20 20 4c 44 4d 4c  45 46 44 20 28 73 70 29  |    LDMLEFD (sp)|
00007040  21 2c 7b 72 30 2d 72 31  32 2c 70 63 7d 0d 2a b2  |!,{r0-r12,pc}.*.|
00007050  0d 2e 73 73 5f 79 6c 6f  6f 70 0d 2a bc 19 20 20  |..ss_yloop.*..  |
00007060  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 37  |      MOV     r7|
00007070  2c 72 38 0d 2a c6 0d 2e  73 73 5f 78 6c 6f 6f 70  |,r8.*...ss_xloop|
00007080  0d 2a d0 1c 20 20 20 20  20 20 20 20 4c 44 52 20  |.*..        LDR |
00007090  20 20 20 20 72 30 2c 5b  72 31 30 5d 0d 2a da 1f  |    r0,[r10].*..|
000070a0  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
000070b0  72 31 2c 5b 72 31 32 5d  2c 23 34 0d 2a e4 1c 20  |r1,[r12],#4.*.. |
000070c0  20 20 20 20 20 20 20 42  49 43 20 20 20 20 20 72  |       BIC     r|
000070d0  30 2c 72 30 2c 72 31 0d  2a ee 1f 20 20 20 20 20  |0,r0,r1.*..     |
000070e0  20 20 20 4c 44 52 20 20  20 20 20 72 31 2c 5b 72  |   LDR     r1,[r|
000070f0  31 31 5d 2c 23 34 0d 2a  f8 1b 20 20 20 20 20 20  |11],#4.*..      |
00007100  20 20 84 52 20 20 20 20  20 72 30 2c 72 30 2c 72  |  .R     r0,r0,r|
00007110  31 0d 2b 02 1f 20 20 20  20 20 20 20 20 53 54 52  |1.+..        STR|
00007120  20 20 20 20 20 72 30 2c  5b 72 31 30 5d 2c 23 34  |     r0,[r10],#4|
00007130  0d 2b 0c 1c 20 20 20 20  20 20 20 20 53 55 42 53  |.+..        SUBS|
00007140  20 20 20 20 72 37 2c 72  37 2c 23 34 0d 2b 16 1c  |    r7,r7,#4.+..|
00007150  20 20 20 20 20 20 20 20  42 4e 45 20 20 20 20 20  |        BNE     |
00007160  73 73 5f 78 6c 6f 6f 70  0d 2b 20 1e 20 20 20 20  |ss_xloop.+ .    |
00007170  20 20 20 20 53 55 42 20  20 20 20 20 72 31 30 2c  |    SUB     r10,|
00007180  72 31 30 2c 72 38 0d 2b  2a 20 20 20 20 20 20 20  |r10,r8.+*       |
00007190  20 20 41 44 44 20 20 20  20 20 72 31 30 2c 72 31  |  ADD     r10,r1|
000071a0  30 2c 23 31 36 30 0d 2b  34 1e 20 20 20 20 20 20  |0,#160.+4.      |
000071b0  20 20 41 44 44 20 20 20  20 20 72 31 31 2c 72 31  |  ADD     r11,r1|
000071c0  31 2c 72 35 0d 2b 3e 1e  20 20 20 20 20 20 20 20  |1,r5.+>.        |
000071d0  41 44 44 20 20 20 20 20  72 31 32 2c 72 31 32 2c  |ADD     r12,r12,|
000071e0  72 35 0d 2b 48 1c 20 20  20 20 20 20 20 20 53 55  |r5.+H.        SU|
000071f0  42 53 20 20 20 20 72 39  2c 72 39 2c 23 31 0d 2b  |BS    r9,r9,#1.+|
00007200  52 1c 20 20 20 20 20 20  20 20 42 4e 45 20 20 20  |R.        BNE   |
00007210  20 20 73 73 5f 79 6c 6f  6f 70 0d 2b 5c 25 20 20  |  ss_yloop.+\%  |
00007220  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
00007230  70 29 21 2c 7b 72 30 2d  72 31 32 2c 70 63 7d 0d  |p)!,{r0-r12,pc}.|
00007240  2b 66 04 0d 2b 70 16 2e  73 68 6f 77 5f 73 70 72  |+f..+p..show_spr|
00007250  69 74 65 5f 64 79 69 6e  67 0d 2b 7a 27 20 20 20  |ite_dying.+z'   |
00007260  20 20 20 20 20 53 54 4d  46 44 20 20 20 28 73 70  |     STMFD   (sp|
00007270  29 21 2c 7b 72 30 2d 72  31 32 2c 6c 69 6e 6b 7d  |)!,{r0-r12,link}|
00007280  0d 2b 84 24 20 20 20 20  20 20 20 20 42 4c 20 20  |.+.$        BL  |
00007290  20 20 20 20 62 6f 75 6e  64 73 5f 63 68 65 63 6b  |    bounds_check|
000072a0  5f 65 74 63 0d 2b 8e 25  20 20 20 20 20 20 20 20  |_etc.+.%        |
000072b0  4c 44 4d 4c 45 46 44 20  28 73 70 29 21 2c 7b 72  |LDMLEFD (sp)!,{r|
000072c0  30 2d 72 31 32 2c 70 63  7d 0d 2b 98 21 20 20 20  |0-r12,pc}.+.!   |
000072d0  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 31 31  |     LDR     r11|
000072e0  2c 41 66 61 64 65 5f 74  61 62 0d 2b a2 19 20 20  |,Afade_tab.+..  |
000072f0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 33  |      CMP     r3|
00007300  2c 23 30 0d 2b ac 19 20  20 20 20 20 20 20 20 4d  |,#0.+..        M|
00007310  4f 56 4c 54 20 20 20 72  33 2c 23 30 0d 2b b6 27  |OVLT   r3,#0.+.'|
00007320  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00007330  72 31 31 2c 5b 72 31 31  2c 72 33 2c 4c 53 4c 20  |r11,[r11,r3,LSL |
00007340  23 32 5d 0d 2b c0 21 20  20 20 20 20 20 20 20 4c  |#2].+.!        L|
00007350  44 52 20 20 20 20 20 72  31 34 2c 5b 72 31 31 2c  |DR     r14,[r11,|
00007360  23 33 32 5d 0d 2b ca 1f  20 20 20 20 20 20 20 20  |#32].+..        |
00007370  41 44 44 20 20 20 20 20  72 31 31 2c 72 31 31 2c  |ADD     r11,r11,|
00007380  72 31 34 0d 2b d4 0d 2e  73 64 5f 79 6c 6f 6f 70  |r14.+...sd_yloop|
00007390  0d 2b de 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |.+..        MOV |
000073a0  20 20 20 20 72 37 2c 72  38 0d 2b e8 0d 2e 73 64  |    r7,r8.+...sd|
000073b0  5f 78 6c 6f 6f 70 0d 2b  f2 1c 20 20 20 20 20 20  |_xloop.+..      |
000073c0  20 20 4c 44 52 20 20 20  20 20 72 30 2c 5b 72 31  |  LDR     r0,[r1|
000073d0  30 5d 0d 2b fc 1f 20 20  20 20 20 20 20 20 4c 44  |0].+..        LD|
000073e0  52 20 20 20 20 20 72 31  2c 5b 72 31 32 5d 2c 23  |R     r1,[r12],#|
000073f0  34 0d 2c 06 1c 20 20 20  20 20 20 20 20 42 49 43  |4.,..        BIC|
00007400  20 20 20 20 20 72 30 2c  72 30 2c 72 31 0d 2c 10  |     r0,r0,r1.,.|
00007410  1a 20 20 20 20 20 20 20  20 80 20 20 20 20 20 72  |.        .     r|
00007420  32 2c 72 39 2c 23 37 0d  2c 1a 26 20 20 20 20 20  |2,r9,#7.,.&     |
00007430  20 20 20 4c 44 52 20 20  20 20 20 72 32 2c 5b 72  |   LDR     r2,[r|
00007440  31 31 2c 72 32 2c 4c 53  4c 20 23 32 5d 0d 2c 24  |11,r2,LSL #2].,$|
00007450  1a 20 20 20 20 20 20 20  20 80 20 20 20 20 20 72  |.        .     r|
00007460  32 2c 72 32 2c 72 31 0d  2c 2e 1b 20 20 20 20 20  |2,r2,r1.,..     |
00007470  20 20 20 84 52 20 20 20  20 20 72 30 2c 72 30 2c  |   .R     r0,r0,|
00007480  72 32 0d 2c 38 1f 20 20  20 20 20 20 20 20 53 54  |r2.,8.        ST|
00007490  52 20 20 20 20 20 72 30  2c 5b 72 31 30 5d 2c 23  |R     r0,[r10],#|
000074a0  34 0d 2c 42 1c 20 20 20  20 20 20 20 20 53 55 42  |4.,B.        SUB|
000074b0  53 20 20 20 20 72 37 2c  72 37 2c 23 34 0d 2c 4c  |S    r7,r7,#4.,L|
000074c0  1c 20 20 20 20 20 20 20  20 42 4e 45 20 20 20 20  |.        BNE    |
000074d0  20 73 64 5f 78 6c 6f 6f  70 0d 2c 56 1e 20 20 20  | sd_xloop.,V.   |
000074e0  20 20 20 20 20 53 55 42  20 20 20 20 20 72 31 30  |     SUB     r10|
000074f0  2c 72 31 30 2c 72 38 0d  2c 60 20 20 20 20 20 20  |,r10,r8.,`      |
00007500  20 20 20 41 44 44 20 20  20 20 20 72 31 30 2c 72  |   ADD     r10,r|
00007510  31 30 2c 23 31 36 30 0d  2c 6a 1e 20 20 20 20 20  |10,#160.,j.     |
00007520  20 20 20 41 44 44 20 20  20 20 20 72 31 31 2c 72  |   ADD     r11,r|
00007530  31 31 2c 72 35 0d 2c 74  1e 20 20 20 20 20 20 20  |11,r5.,t.       |
00007540  20 41 44 44 20 20 20 20  20 72 31 32 2c 72 31 32  | ADD     r12,r12|
00007550  2c 72 35 0d 2c 7e 1c 20  20 20 20 20 20 20 20 53  |,r5.,~.        S|
00007560  55 42 53 20 20 20 20 72  39 2c 72 39 2c 23 31 0d  |UBS    r9,r9,#1.|
00007570  2c 88 1c 20 20 20 20 20  20 20 20 42 4e 45 20 20  |,..        BNE  |
00007580  20 20 20 73 64 5f 79 6c  6f 6f 70 0d 2c 92 25 20  |   sd_yloop.,.% |
00007590  20 20 20 20 20 20 20 4c  44 4d 46 44 20 20 20 28  |       LDMFD   (|
000075a0  73 70 29 21 2c 7b 72 30  2d 72 31 32 2c 70 63 7d  |sp)!,{r0-r12,pc}|
000075b0  0d 2c 9c 04 0d 2c a6 0e  2e 41 66 61 64 65 5f 74  |.,...,...Afade_t|
000075c0  61 62 0d 2c b0 1c 20 20  20 20 20 20 20 20 44 43  |ab.,..        DC|
000075d0  44 20 20 20 20 20 66 61  64 65 5f 74 61 62 0d 2c  |D     fade_tab.,|
000075e0  ba 04 0d 2c c4 12 2e 63  6f 6c 6c 69 64 65 5f 63  |...,...collide_c|
000075f0  68 65 63 6b 0d 2c ce 27  20 20 20 20 20 20 20 20  |heck.,.'        |
00007600  53 54 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |STMFD   (sp)!,{r|
00007610  30 2d 72 31 32 2c 6c 69  6e 6b 7d 0d 2c d8 24 20  |0-r12,link}.,.$ |
00007620  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 62  |       BL      b|
00007630  6f 75 6e 64 73 5f 63 68  65 63 6b 5f 65 74 63 0d  |ounds_check_etc.|
00007640  2c e2 19 20 20 20 20 20  20 20 20 43 4d 50 4c 54  |,..        CMPLT|
00007650  20 20 20 72 30 2c 72 30  0d 2c ec 25 20 20 20 20  |   r0,r0.,.%    |
00007660  20 20 20 20 4c 44 4d 45  51 46 44 20 28 73 70 29  |    LDMEQFD (sp)|
00007670  21 2c 7b 72 30 2d 72 31  32 2c 70 63 7d 0d 2c f6  |!,{r0-r12,pc}.,.|
00007680  0d 2e 63 63 5f 79 6c 6f  6f 70 0d 2d 00 19 20 20  |..cc_yloop.-..  |
00007690  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 37  |      MOV     r7|
000076a0  2c 72 38 0d 2d 0a 0d 2e  63 63 5f 78 6c 6f 6f 70  |,r8.-...cc_xloop|
000076b0  0d 2d 14 1f 20 20 20 20  20 20 20 20 4c 44 52 20  |.-..        LDR |
000076c0  20 20 20 20 72 30 2c 5b  72 31 30 5d 2c 23 34 0d  |    r0,[r10],#4.|
000076d0  2d 1e 1f 20 20 20 20 20  20 20 20 4c 44 52 20 20  |-..        LDR  |
000076e0  20 20 20 72 31 2c 5b 72  31 32 5d 2c 23 34 0d 2d  |   r1,[r12],#4.-|
000076f0  28 1a 20 20 20 20 20 20  20 20 80 53 20 20 20 20  |(.        .S    |
00007700  72 30 2c 72 30 2c 72 31  0d 2d 32 25 20 20 20 20  |r0,r0,r1.-2%    |
00007710  20 20 20 20 4c 44 4d 4e  45 46 44 20 28 73 70 29  |    LDMNEFD (sp)|
00007720  21 2c 7b 72 30 2d 72 31  32 2c 70 63 7d 0d 2d 3c  |!,{r0-r12,pc}.-<|
00007730  1c 20 20 20 20 20 20 20  20 53 55 42 53 20 20 20  |.        SUBS   |
00007740  20 72 37 2c 72 37 2c 23  34 0d 2d 46 1c 20 20 20  | r7,r7,#4.-F.   |
00007750  20 20 20 20 20 42 4e 45  20 20 20 20 20 63 63 5f  |     BNE     cc_|
00007760  78 6c 6f 6f 70 0d 2d 50  1e 20 20 20 20 20 20 20  |xloop.-P.       |
00007770  20 53 55 42 20 20 20 20  20 72 31 30 2c 72 31 30  | SUB     r10,r10|
00007780  2c 72 38 0d 2d 5a 20 20  20 20 20 20 20 20 20 41  |,r8.-Z         A|
00007790  44 44 20 20 20 20 20 72  31 30 2c 72 31 30 2c 23  |DD     r10,r10,#|
000077a0  31 36 30 0d 2d 64 1e 20  20 20 20 20 20 20 20 41  |160.-d.        A|
000077b0  44 44 20 20 20 20 20 72  31 32 2c 72 31 32 2c 72  |DD     r12,r12,r|
000077c0  35 0d 2d 6e 1c 20 20 20  20 20 20 20 20 53 55 42  |5.-n.        SUB|
000077d0  53 20 20 20 20 72 39 2c  72 39 2c 23 31 0d 2d 78  |S    r9,r9,#1.-x|
000077e0  1c 20 20 20 20 20 20 20  20 42 4e 45 20 20 20 20  |.        BNE    |
000077f0  20 63 63 5f 79 6c 6f 6f  70 0d 2d 82 25 20 20 20  | cc_yloop.-.%   |
00007800  20 20 20 20 20 4c 44 4d  46 44 20 20 20 28 73 70  |     LDMFD   (sp|
00007810  29 21 2c 7b 72 30 2d 72  31 32 2c 70 63 7d 0d 2d  |)!,{r0-r12,pc}.-|
00007820  8c 04 0d 2d 96 15 2e 62  6f 75 6e 64 73 5f 63 68  |...-...bounds_ch|
00007830  65 63 6b 5f 65 74 63 0d  2d a0 20 20 20 20 20 20  |eck_etc.-.      |
00007840  20 20 20 53 54 4d 46 44  20 20 20 28 73 70 29 21  |   STMFD   (sp)!|
00007850  2c 7b 6c 69 6e 6b 7d 0d  2d aa 1c 20 20 20 20 20  |,{link}.-..     |
00007860  20 20 20 42 49 43 20 20  20 20 20 72 31 2c 72 31  |   BIC     r1,r1|
00007870  2c 23 33 0d 2d b4 20 20  20 20 20 20 20 20 20 4c  |,#3.-.         L|
00007880  44 52 20 20 20 20 20 72  31 31 2c 5b 72 30 2c 23  |DR     r11,[r0,#|
00007890  33 32 5d 0d 2d be 1e 20  20 20 20 20 20 20 20 41  |32].-..        A|
000078a0  44 44 20 20 20 20 20 72  31 31 2c 72 31 31 2c 72  |DD     r11,r11,r|
000078b0  30 0d 2d c8 20 20 20 20  20 20 20 20 20 4c 44 52  |0.-.         LDR|
000078c0  20 20 20 20 20 72 31 32  2c 5b 72 30 2c 23 33 36  |     r12,[r0,#36|
000078d0  5d 0d 2d d2 1e 20 20 20  20 20 20 20 20 41 44 44  |].-..        ADD|
000078e0  20 20 20 20 20 72 31 32  2c 72 31 32 2c 72 30 0d  |     r12,r12,r0.|
000078f0  2d dc 1f 20 20 20 20 20  20 20 20 4c 44 52 20 20  |-..        LDR  |
00007900  20 20 20 72 38 2c 5b 72  30 2c 23 31 36 5d 0d 2d  |   r8,[r0,#16].-|
00007910  e6 1c 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |..        ADD   |
00007920  20 20 72 38 2c 72 38 2c  23 31 0d 2d f0 20 20 20  |  r8,r8,#1.-.   |
00007930  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 38  |      MOV     r8|
00007940  2c 72 38 2c 4c 53 4c 20  23 32 0d 2d fa 1f 20 20  |,r8,LSL #2.-..  |
00007950  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 39  |      LDR     r9|
00007960  2c 5b 72 30 2c 23 32 30  5d 0d 2e 04 1c 20 20 20  |,[r0,#20]....   |
00007970  20 20 20 20 20 41 44 44  20 20 20 20 20 72 39 2c  |     ADD     r9,|
00007980  72 39 2c 23 31 0d 2e 0e  19 20 20 20 20 20 20 20  |r9,#1....       |
00007990  20 4d 4f 56 20 20 20 20  20 72 35 2c 23 30 0d 2e  | MOV     r5,#0..|
000079a0  18 19 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |..        CMP   |
000079b0  20 20 72 32 2c 23 30 0d  2e 22 1c 20 20 20 20 20  |  r2,#0..".     |
000079c0  20 20 20 41 44 44 4c 54  20 20 20 72 39 2c 72 39  |   ADDLT   r9,r9|
000079d0  2c 72 32 0d 2e 2c 1d 20  20 20 20 20 20 20 20 4d  |,r2..,.        M|
000079e0  55 4c 4c 54 20 20 20 72  31 34 2c 72 32 2c 72 38  |ULLT   r14,r2,r8|
000079f0  0d 2e 36 1f 20 20 20 20  20 20 20 20 53 55 42 4c  |..6.        SUBL|
00007a00  54 20 20 20 72 31 31 2c  72 31 31 2c 72 31 34 0d  |T   r11,r11,r14.|
00007a10  2e 40 1f 20 20 20 20 20  20 20 20 53 55 42 4c 54  |.@.        SUBLT|
00007a20  20 20 20 72 31 32 2c 72  31 32 2c 72 31 34 0d 2e  |   r12,r12,r14..|
00007a30  4a 19 20 20 20 20 20 20  20 20 4d 4f 56 4c 54 20  |J.        MOVLT |
00007a40  20 20 72 32 2c 23 30 0d  2e 54 1d 20 20 20 20 20  |  r2,#0..T.     |
00007a50  20 20 20 41 44 44 20 20  20 20 20 72 31 34 2c 72  |   ADD     r14,r|
00007a60  32 2c 72 39 0d 2e 5e 1c  20 20 20 20 20 20 20 20  |2,r9..^.        |
00007a70  43 4d 50 20 20 20 20 20  72 31 34 2c 23 32 34 30  |CMP     r14,#240|
00007a80  0d 2e 68 20 20 20 20 20  20 20 20 20 53 55 42 47  |..h         SUBG|
00007a90  54 20 20 20 72 31 34 2c  72 31 34 2c 23 32 34 30  |T   r14,r14,#240|
00007aa0  0d 2e 72 1d 20 20 20 20  20 20 20 20 53 55 42 47  |..r.        SUBG|
00007ab0  54 20 20 20 72 39 2c 72  39 2c 72 31 34 0d 2e 7c  |T   r9,r9,r14..||
00007ac0  19 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |.        CMP    |
00007ad0  20 72 31 2c 23 30 0d 2e  86 1c 20 20 20 20 20 20  | r1,#0....      |
00007ae0  20 20 41 44 44 4c 54 20  20 20 72 38 2c 72 38 2c  |  ADDLT   r8,r8,|
00007af0  72 31 0d 2e 90 1e 20 20  20 20 20 20 20 20 53 55  |r1....        SU|
00007b00  42 4c 54 20 20 20 72 31  31 2c 72 31 31 2c 72 31  |BLT   r11,r11,r1|
00007b10  0d 2e 9a 1e 20 20 20 20  20 20 20 20 53 55 42 4c  |....        SUBL|
00007b20  54 20 20 20 72 31 32 2c  72 31 32 2c 72 31 0d 2e  |T   r12,r12,r1..|
00007b30  a4 1c 20 20 20 20 20 20  20 20 53 55 42 4c 54 20  |..        SUBLT |
00007b40  20 20 72 35 2c 72 35 2c  72 31 0d 2e ae 19 20 20  |  r5,r5,r1....  |
00007b50  20 20 20 20 20 20 4d 4f  56 4c 54 20 20 20 72 31  |      MOVLT   r1|
00007b60  2c 23 30 0d 2e b8 1d 20  20 20 20 20 20 20 20 41  |,#0....        A|
00007b70  44 44 20 20 20 20 20 72  31 34 2c 72 31 2c 72 38  |DD     r14,r1,r8|
00007b80  0d 2e c2 1c 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00007b90  20 20 20 20 72 31 34 2c  23 31 36 30 0d 2e cc 20  |    r14,#160... |
00007ba0  20 20 20 20 20 20 20 20  53 55 42 47 54 20 20 20  |        SUBGT   |
00007bb0  72 31 34 2c 72 31 34 2c  23 31 36 30 0d 2e d6 1d  |r14,r14,#160....|
00007bc0  20 20 20 20 20 20 20 20  53 55 42 47 54 20 20 20  |        SUBGT   |
00007bd0  72 38 2c 72 38 2c 72 31  34 0d 2e e0 1d 20 20 20  |r8,r8,r14....   |
00007be0  20 20 20 20 20 41 44 44  47 54 20 20 20 72 35 2c  |     ADDGT   r5,|
00007bf0  72 35 2c 72 31 34 0d 2e  ea 1d 20 20 20 20 20 20  |r5,r14....      |
00007c00  20 20 4c 44 52 20 20 20  20 20 72 31 30 2c 76 64  |  LDR     r10,vd|
00007c10  75 5f 6f 0d 2e f4 25 20  20 20 20 20 20 20 20 41  |u_o...%        A|
00007c20  44 44 20 20 20 20 20 72  31 30 2c 72 31 30 2c 72  |DD     r10,r10,r|
00007c30  32 2c 4c 53 4c 20 23 37  0d 2e fe 25 20 20 20 20  |2,LSL #7...%    |
00007c40  20 20 20 20 41 44 44 20  20 20 20 20 72 31 30 2c  |    ADD     r10,|
00007c50  72 31 30 2c 72 32 2c 4c  53 4c 20 23 35 0d 2f 08  |r10,r2,LSL #5./.|
00007c60  1e 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00007c70  20 72 31 30 2c 72 31 30  2c 72 31 0d 2f 12 19 20  | r10,r10,r1./.. |
00007c80  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00007c90  38 2c 23 30 0d 2f 1c 19  20 20 20 20 20 20 20 20  |8,#0./..        |
00007ca0  43 4d 50 47 54 20 20 20  72 39 2c 23 30 0d 2f 26  |CMPGT   r9,#0./&|
00007cb0  1e 20 20 20 20 20 20 20  20 4c 44 4d 46 44 20 20  |.        LDMFD  |
00007cc0  20 28 73 70 29 21 2c 7b  70 63 7d 0d 2f 30 04 0d  | (sp)!,{pc}./0..|
00007cd0  2f 3a 26 2e 69 6e 6b 65  79 20 20 53 54 4d 46 44  |/:&.inkey  STMFD|
00007ce0  20 20 20 28 73 70 29 21  2c 7b 72 30 2c 72 32 2c  |   (sp)!,{r0,r2,|
00007cf0  6c 69 6e 6b 7d 0d 2f 44  1b 20 20 20 20 20 20 20  |link}./D.       |
00007d00  20 4d 4f 56 20 20 20 20  20 72 30 2c 23 31 32 39  | MOV     r0,#129|
00007d10  0d 2f 4e 1b 20 20 20 20  20 20 20 20 4d 4f 56 20  |./N.        MOV |
00007d20  20 20 20 20 72 32 2c 23  32 35 35 0d 2f 58 1e 20  |    r2,#255./X. |
00007d30  20 20 20 20 20 20 20 53  57 49 20 20 20 20 20 22  |       SWI     "|
00007d40  58 4f 53 5f 42 79 74 65  22 0d 2f 62 1b 20 20 20  |XOS_Byte"./b.   |
00007d50  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 31 2c  |     CMP     r1,|
00007d60  23 32 35 35 0d 2f 6c 24  20 20 20 20 20 20 20 20  |#255./l$        |
00007d70  4c 44 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |LDMFD   (sp)!,{r|
00007d80  30 2c 72 32 2c 70 63 7d  0d 2f 76 04 0d 2f 80 19  |0,r2,pc}./v../..|
00007d90  2e 70 6c 6f 74 5f 6f 6e  5f 73 6d 61 6c 6c 5f 73  |.plot_on_small_s|
00007da0  63 72 65 65 6e 0d 2f 8a  27 20 20 20 20 20 20 20  |creen./.'       |
00007db0  20 53 54 4d 46 44 20 20  20 28 73 70 29 21 2c 7b  | STMFD   (sp)!,{|
00007dc0  72 30 2d 72 31 32 2c 6c  69 6e 6b 7d 0d 2f 94 1e  |r0-r12,link}./..|
00007dd0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00007de0  72 31 34 2c 72 32 2c 23  31 36 0d 2f 9e 1f 20 20  |r14,r2,#16./..  |
00007df0  20 20 20 20 20 20 4c 44  4d 49 41 20 20 20 72 31  |      LDMIA   r1|
00007e00  34 2c 7b 72 38 2c 72 39  7d 0d 2f a8 1c 20 20 20  |4,{r8,r9}./..   |
00007e10  20 20 20 20 20 41 44 44  20 20 20 20 20 72 38 2c  |     ADD     r8,|
00007e20  72 38 2c 23 31 0d 2f b2  20 20 20 20 20 20 20 20  |r8,#1./.        |
00007e30  20 4d 4f 56 20 20 20 20  20 72 38 2c 72 38 2c 4c  | MOV     r8,r8,L|
00007e40  53 4c 20 23 32 0d 2f bc  1c 20 20 20 20 20 20 20  |SL #2./..       |
00007e50  20 41 44 44 20 20 20 20  20 72 39 2c 72 39 2c 23  | ADD     r9,r9,#|
00007e60  31 0d 2f c6 24 20 20 20  20 20 20 20 20 41 44 52  |1./.$        ADR|
00007e70  20 20 20 20 20 72 31 31  2c 73 6d 61 6c 6c 5f 73  |     r11,small_s|
00007e80  63 72 65 65 6e 0d 2f d0  1e 20 20 20 20 20 20 20  |creen./..       |
00007e90  20 41 44 44 20 20 20 20  20 72 31 31 2c 72 31 31  | ADD     r11,r11|
00007ea0  2c 72 30 0d 2f da 25 20  20 20 20 20 20 20 20 41  |,r0./.%        A|
00007eb0  44 44 20 20 20 20 20 72  31 31 2c 72 31 31 2c 72  |DD     r11,r11,r|
00007ec0  31 2c 4c 53 4c 20 23 36  0d 2f e4 20 20 20 20 20  |1,LSL #6./.     |
00007ed0  20 20 20 20 4c 44 52 20  20 20 20 20 72 31 32 2c  |    LDR     r12,|
00007ee0  5b 72 32 2c 23 33 36 5d  0d 2f ee 1e 20 20 20 20  |[r2,#36]./..    |
00007ef0  20 20 20 20 41 44 44 20  20 20 20 20 72 31 32 2c  |    ADD     r12,|
00007f00  72 31 32 2c 72 32 0d 2f  f8 26 20 20 20 20 20 20  |r12,r2./.&      |
00007f10  20 20 4c 44 52 20 20 20  20 20 72 32 2c 6f 6e 65  |  LDR     r2,one|
00007f20  5f 6f 6e 65 5f 6f 6e 65  5f 6f 6e 65 0d 30 02 15  |_one_one_one.0..|
00007f30  2e 70 6c 6f 74 5f 73 6d  61 6c 6c 5f 6c 6f 6f 70  |.plot_small_loop|
00007f40  31 0d 30 0c 19 20 20 20  20 20 20 20 20 4d 4f 56  |1.0..        MOV|
00007f50  20 20 20 20 20 72 37 2c  72 38 0d 30 16 15 2e 70  |     r7,r8.0...p|
00007f60  6c 6f 74 5f 73 6d 61 6c  6c 5f 6c 6f 6f 70 32 0d  |lot_small_loop2.|
00007f70  30 20 1f 20 20 20 20 20  20 20 20 4c 44 52 20 20  |0 .        LDR  |
00007f80  20 20 20 72 30 2c 5b 72  31 32 5d 2c 23 34 0d 30  |   r0,[r12],#4.0|
00007f90  2a 1a 20 20 20 20 20 20  20 20 80 20 20 20 20 20  |*.        .     |
00007fa0  72 30 2c 72 30 2c 72 32  0d 30 34 1c 20 20 20 20  |r0,r0,r2.04.    |
00007fb0  20 20 20 20 4c 44 52 20  20 20 20 20 72 31 2c 5b  |    LDR     r1,[|
00007fc0  72 31 31 5d 0d 30 3e 1c  20 20 20 20 20 20 20 20  |r11].0>.        |
00007fd0  41 44 44 20 20 20 20 20  72 30 2c 72 31 2c 72 30  |ADD     r0,r1,r0|
00007fe0  0d 30 48 1f 20 20 20 20  20 20 20 20 53 54 52 20  |.0H.        STR |
00007ff0  20 20 20 20 72 30 2c 5b  72 31 31 5d 2c 23 34 0d  |    r0,[r11],#4.|
00008000  30 52 1c 20 20 20 20 20  20 20 20 53 55 42 53 20  |0R.        SUBS |
00008010  20 20 20 72 37 2c 72 37  2c 23 34 0d 30 5c 24 20  |   r7,r7,#4.0\$ |
00008020  20 20 20 20 20 20 20 42  4e 45 20 20 20 20 20 70  |       BNE     p|
00008030  6c 6f 74 5f 73 6d 61 6c  6c 5f 6c 6f 6f 70 32 0d  |lot_small_loop2.|
00008040  30 66 1e 20 20 20 20 20  20 20 20 53 55 42 20 20  |0f.        SUB  |
00008050  20 20 20 72 31 31 2c 72  31 31 2c 72 38 0d 30 70  |   r11,r11,r8.0p|
00008060  1f 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00008070  20 72 31 31 2c 72 31 31  2c 23 36 34 0d 30 7a 1c  | r11,r11,#64.0z.|
00008080  20 20 20 20 20 20 20 20  53 55 42 53 20 20 20 20  |        SUBS    |
00008090  72 39 2c 72 39 2c 23 31  0d 30 84 24 20 20 20 20  |r9,r9,#1.0.$    |
000080a0  20 20 20 20 42 4e 45 20  20 20 20 20 70 6c 6f 74  |    BNE     plot|
000080b0  5f 73 6d 61 6c 6c 5f 6c  6f 6f 70 31 0d 30 8e 25  |_small_loop1.0.%|
000080c0  20 20 20 20 20 20 20 20  4c 44 4d 46 44 20 20 20  |        LDMFD   |
000080d0  28 73 70 29 21 2c 7b 72  30 2d 72 31 32 2c 70 63  |(sp)!,{r0-r12,pc|
000080e0  7d 0d 30 98 04 0d 30 a2  16 2e 63 68 65 63 6b 5f  |}.0...0...check_|
000080f0  66 6f 72 5f 6f 76 65 72  6c 61 70 0d 30 ac 27 20  |for_overlap.0.' |
00008100  20 20 20 20 20 20 20 53  54 4d 46 44 20 20 20 28  |       STMFD   (|
00008110  73 70 29 21 2c 7b 72 30  2d 72 31 32 2c 6c 69 6e  |sp)!,{r0-r12,lin|
00008120  6b 7d 0d 30 b6 24 20 20  20 20 20 20 20 20 41 44  |k}.0.$        AD|
00008130  52 20 20 20 20 20 72 31  32 2c 73 6d 61 6c 6c 5f  |R     r12,small_|
00008140  73 63 72 65 65 6e 0d 30  c0 1e 20 20 20 20 20 20  |screen.0..      |
00008150  20 20 4d 4f 56 20 20 20  20 20 72 31 31 2c 23 36  |  MOV     r11,#6|
00008160  34 2a 34 38 0d 30 ca 27  20 20 20 20 20 20 20 20  |4*48.0.'        |
00008170  4c 44 52 20 20 20 20 20  72 31 34 2c 74 77 6f 5f  |LDR     r14,two_|
00008180  74 77 6f 5f 74 77 6f 5f  74 77 6f 0d 30 d4 11 2e  |two_two_two.0...|
00008190  6f 76 65 72 6c 61 70 5f  6c 6f 6f 70 0d 30 de 20  |overlap_loop.0. |
000081a0  20 20 20 20 20 20 20 20  4c 44 4d 49 41 20 20 20  |        LDMIA   |
000081b0  72 31 32 21 2c 7b 72 30  2d 72 37 7d 0d 30 e8 1a  |r12!,{r0-r7}.0..|
000081c0  20 20 20 20 20 20 20 20  54 53 54 20 20 20 20 20  |        TST     |
000081d0  72 30 2c 72 31 34 0d 30  f2 1a 20 20 20 20 20 20  |r0,r14.0..      |
000081e0  20 20 54 53 54 45 51 20  20 20 72 31 2c 72 31 34  |  TSTEQ   r1,r14|
000081f0  0d 30 fc 1a 20 20 20 20  20 20 20 20 54 53 54 45  |.0..        TSTE|
00008200  51 20 20 20 72 32 2c 72  31 34 0d 31 06 1a 20 20  |Q   r2,r14.1..  |
00008210  20 20 20 20 20 20 54 53  54 45 51 20 20 20 72 33  |      TSTEQ   r3|
00008220  2c 72 31 34 0d 31 10 1a  20 20 20 20 20 20 20 20  |,r14.1..        |
00008230  54 53 54 45 51 20 20 20  72 34 2c 72 31 34 0d 31  |TSTEQ   r4,r14.1|
00008240  1a 1a 20 20 20 20 20 20  20 20 54 53 54 45 51 20  |..        TSTEQ |
00008250  20 20 72 35 2c 72 31 34  0d 31 24 1a 20 20 20 20  |  r5,r14.1$.    |
00008260  20 20 20 20 54 53 54 45  51 20 20 20 72 36 2c 72  |    TSTEQ   r6,r|
00008270  31 34 0d 31 2e 1a 20 20  20 20 20 20 20 20 54 53  |14.1..        TS|
00008280  54 45 51 20 20 20 72 37  2c 72 31 34 0d 31 38 25  |TEQ   r7,r14.18%|
00008290  20 20 20 20 20 20 20 20  4c 44 4d 4e 45 46 44 20  |        LDMNEFD |
000082a0  28 73 70 29 21 2c 7b 72  30 2d 72 31 32 2c 70 63  |(sp)!,{r0-r12,pc|
000082b0  7d 0d 31 42 1f 20 20 20  20 20 20 20 20 53 55 42  |}.1B.        SUB|
000082c0  53 20 20 20 20 72 31 31  2c 72 31 31 2c 23 33 32  |S    r11,r11,#32|
000082d0  0d 31 4c 20 20 20 20 20  20 20 20 20 42 4e 45 20  |.1L         BNE |
000082e0  20 20 20 20 6f 76 65 72  6c 61 70 5f 6c 6f 6f 70  |    overlap_loop|
000082f0  0d 31 56 25 20 20 20 20  20 20 20 20 4c 44 4d 46  |.1V%        LDMF|
00008300  44 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |D   (sp)!,{r0-r1|
00008310  32 2c 70 63 7d 0d 31 60  04 0d 31 6a 14 2e 6f 6e  |2,pc}.1`..1j..on|
00008320  65 5f 6f 6e 65 5f 6f 6e  65 5f 6f 6e 65 0d 31 74  |e_one_one_one.1t|
00008330  1d 20 20 20 20 20 20 20  20 44 43 44 20 20 20 20  |.        DCD    |
00008340  20 26 31 31 31 31 31 31  31 31 0d 31 7e 14 2e 74  | &11111111.1~..t|
00008350  77 6f 5f 74 77 6f 5f 74  77 6f 5f 74 77 6f 0d 31  |wo_two_two_two.1|
00008360  88 1d 20 20 20 20 20 20  20 20 44 43 44 20 20 20  |..        DCD   |
00008370  20 20 26 32 32 32 32 32  32 32 32 0d 31 92 04 0d  |  &22222222.1...|
00008380  31 9c 17 2e 63 6c 65 61  72 5f 73 6d 61 6c 6c 5f  |1...clear_small_|
00008390  73 63 72 65 65 6e 0d 31  a6 27 20 20 20 20 20 20  |screen.1.'      |
000083a0  20 20 53 54 4d 46 44 20  20 20 28 73 70 29 21 2c  |  STMFD   (sp)!,|
000083b0  7b 72 30 2d 72 31 32 2c  6c 69 6e 6b 7d 0d 31 b0  |{r0-r12,link}.1.|
000083c0  24 20 20 20 20 20 20 20  20 41 44 52 20 20 20 20  |$        ADR    |
000083d0  20 72 31 32 2c 73 6d 61  6c 6c 5f 73 63 72 65 65  | r12,small_scree|
000083e0  6e 0d 31 ba 1e 20 20 20  20 20 20 20 20 4d 4f 56  |n.1..        MOV|
000083f0  20 20 20 20 20 72 31 31  2c 23 36 34 2a 34 38 0d  |     r11,#64*48.|
00008400  31 c4 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |1..        MOV  |
00008410  20 20 20 72 30 2c 23 30  0d 31 ce 19 20 20 20 20  |   r0,#0.1..    |
00008420  20 20 20 20 4d 4f 56 20  20 20 20 20 72 31 2c 23  |    MOV     r1,#|
00008430  30 0d 31 d8 19 20 20 20  20 20 20 20 20 4d 4f 56  |0.1..        MOV|
00008440  20 20 20 20 20 72 32 2c  23 30 0d 31 e2 19 20 20  |     r2,#0.1..  |
00008450  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 33  |      MOV     r3|
00008460  2c 23 30 0d 31 ec 19 20  20 20 20 20 20 20 20 4d  |,#0.1..        M|
00008470  4f 56 20 20 20 20 20 72  34 2c 23 30 0d 31 f6 19  |OV     r4,#0.1..|
00008480  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00008490  72 35 2c 23 30 0d 32 00  19 20 20 20 20 20 20 20  |r5,#0.2..       |
000084a0  20 4d 4f 56 20 20 20 20  20 72 36 2c 23 30 0d 32  | MOV     r6,#0.2|
000084b0  0a 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
000084c0  20 20 72 37 2c 23 30 0d  32 14 1c 2e 63 6c 65 61  |  r7,#0.2...clea|
000084d0  72 5f 73 6d 61 6c 6c 5f  73 63 72 65 65 6e 5f 6c  |r_small_screen_l|
000084e0  6f 6f 70 0d 32 1e 20 20  20 20 20 20 20 20 20 53  |oop.2.         S|
000084f0  54 4d 49 41 20 20 20 72  31 32 21 2c 7b 72 30 2d  |TMIA   r12!,{r0-|
00008500  72 37 7d 0d 32 28 20 20  20 20 20 20 20 20 20 53  |r7}.2(         S|
00008510  54 4d 49 41 20 20 20 72  31 32 21 2c 7b 72 30 2d  |TMIA   r12!,{r0-|
00008520  72 37 7d 0d 32 32 20 20  20 20 20 20 20 20 20 53  |r7}.22         S|
00008530  54 4d 49 41 20 20 20 72  31 32 21 2c 7b 72 30 2d  |TMIA   r12!,{r0-|
00008540  72 37 7d 0d 32 3c 20 20  20 20 20 20 20 20 20 53  |r7}.2<         S|
00008550  54 4d 49 41 20 20 20 72  31 32 21 2c 7b 72 30 2d  |TMIA   r12!,{r0-|
00008560  72 37 7d 0d 32 46 20 20  20 20 20 20 20 20 20 53  |r7}.2F         S|
00008570  55 42 53 20 20 20 20 72  31 31 2c 72 31 31 2c 23  |UBS    r11,r11,#|
00008580  31 32 38 0d 32 50 2b 20  20 20 20 20 20 20 20 42  |128.2P+        B|
00008590  4e 45 20 20 20 20 20 63  6c 65 61 72 5f 73 6d 61  |NE     clear_sma|
000085a0  6c 6c 5f 73 63 72 65 65  6e 5f 6c 6f 6f 70 0d 32  |ll_screen_loop.2|
000085b0  5a 25 20 20 20 20 20 20  20 20 4c 44 4d 46 44 20  |Z%        LDMFD |
000085c0  20 20 28 73 70 29 21 2c  7b 72 30 2d 72 31 32 2c  |  (sp)!,{r0-r12,|
000085d0  70 63 7d 0d 32 64 05 5d  0d 32 6e 19 72 6f 75 74  |pc}.2d.].2n.rout|
000085e0  69 6e 65 3d a4 61 6c 6c  6f 63 28 31 32 38 2c 30  |ine=.alloc(128,0|
000085f0  29 0d 32 78 20 73 6d 61  6c 6c 5f 73 63 72 65 65  |).2x small_scree|
00008600  6e 3d a4 61 6c 6c 6f 63  28 36 34 2a 34 38 2c 30  |n=.alloc(64*48,0|
00008610  29 0d 32 82 2c 61 6c 69  65 6e 5f 6c 69 73 74 3d  |).2.,alien_list=|
00008620  a4 61 6c 6c 6f 63 28 6d  61 78 5f 61 6c 69 65 6e  |.alloc(max_alien|
00008630  73 2a 64 61 74 5f 73 69  7a 65 2c 30 29 0d 32 8c  |s*dat_size,0).2.|
00008640  21 62 61 6e 6b 73 3d a4  61 6c 6c 6f 63 28 34 2a  |!banks=.alloc(4*|
00008650  73 63 72 65 65 6e 5f 73  69 7a 65 2c 30 29 0d 32  |screen_size,0).2|
00008660  96 0b ed 20 70 61 73 73  25 0d 32 a0 05 e1 0d 32  |... pass%.2....2|
00008670  aa 05 3a 0d 32 b4 0f dd  20 f2 6e 65 77 5f 67 61  |..:.2... .new_ga|
00008680  6d 65 0d 32 be 0c 21 73  63 6f 72 65 3d 30 0d 32  |me.2..!score=0.2|
00008690  c8 0e f2 6e 65 77 5f 72  6f 75 6e 64 0d 32 d2 05  |...new_round.2..|
000086a0  e1 0d 32 dc 05 3a 0d 32  e6 10 dd 20 f2 6e 65 77  |..2..:.2... .new|
000086b0  5f 72 6f 75 6e 64 0d 32  f0 19 e3 20 69 25 3d 30  |_round.2... i%=0|
000086c0  20 b8 20 6d 61 78 5f 61  6c 69 65 6e 73 2d 31 0d  | . max_aliens-1.|
000086d0  32 fa 1e 20 61 25 3d 61  6c 69 65 6e 5f 6c 69 73  |2.. a%=alien_lis|
000086e0  74 2b 69 25 2a 64 61 74  5f 73 69 7a 65 0d 33 04  |t+i%*dat_size.3.|
000086f0  3e 20 e7 20 69 25 3d 6d  61 78 5f 61 6c 69 65 6e  |> . i%=max_alien|
00008700  73 2d 31 20 61 25 21 64  61 74 5f 6e 65 78 74 3d  |s-1 a%!dat_next=|
00008710  30 20 8b 20 61 25 21 64  61 74 5f 6e 65 78 74 3d  |0 . a%!dat_next=|
00008720  61 25 2b 64 61 74 5f 73  69 7a 65 0d 33 0e 05 ed  |a%+dat_size.3...|
00008730  0d 33 18 0b 21 6c 69 73  74 3d 30 0d 33 22 14 21  |.3..!list=0.3".!|
00008740  66 72 65 65 3d 61 6c 69  65 6e 5f 6c 69 73 74 0d  |free=alien_list.|
00008750  33 2c 0d e3 20 62 3d 30  20 b8 20 33 0d 33 36 27  |3,.. b=0 . 3.36'|
00008760  20 62 61 6e 6b 5f 64 61  74 21 28 34 2a 62 29 3d  | bank_dat!(4*b)=|
00008770  62 61 6e 6b 73 2b 62 2a  73 63 72 65 65 6e 5f 73  |banks+b*screen_s|
00008780  69 7a 65 0d 33 40 21 20  e3 20 63 6f 6c 25 3d 30  |ize.3@! . col%=0|
00008790  20 b8 20 62 79 74 65 73  5f 70 65 72 5f 72 6f 77  | . bytes_per_row|
000087a0  20 88 20 34 0d 33 4a 23  20 20 41 25 3d 62 61 6e  | . 4.3J#  A%=ban|
000087b0  6b 73 2b 28 73 63 72 65  65 6e 5f 73 69 7a 65 2a  |ks+(screen_size*|
000087c0  62 29 2b 63 6f 6c 25 0d  33 54 0f 20 20 42 25 3d  |b)+col%.3T.  B%=|
000087d0  63 6f 6c 25 2b 62 0d 33  5e 0d 20 20 43 25 3d 6c  |col%+b.3^.  C%=l|
000087e0  61 6e 64 0d 33 68 12 20  20 44 25 3d 73 63 65 6e  |and.3h.  D%=scen|
000087f0  65 5f 73 70 72 0d 33 72  13 20 20 d6 20 73 68 6f  |e_spr.3r.  . sho|
00008800  77 5f 63 6f 6c 75 6d 6e  0d 33 7c 06 20 ed 0d 33  |w_column.3|. ..3|
00008810  86 05 ed 0d 33 90 13 e3  20 69 25 3d 30 20 b8 20  |....3... i%=0 . |
00008820  70 6f 70 25 2d 31 0d 33  9a 16 20 61 25 3d 70 6f  |pop%-1.3.. a%=po|
00008830  70 5f 64 61 74 25 2b 32  34 2a 69 25 0d 33 a4 0f  |p_dat%+24*i%.3..|
00008840  20 67 6f 31 25 3d 61 25  21 31 36 0d 33 ae 0f 20  | go1%=a%!16.3.. |
00008850  67 6f 32 25 3d 61 25 21  32 30 0d 33 b8 10 20 e7  |go2%=a%!20.3.. .|
00008860  20 67 6f 31 25 3d 2d 31  20 8c 0d 33 c2 14 20 20  | go1%=-1 ..3..  |
00008870  61 25 21 31 32 3d 61 25  21 34 2d 31 36 30 0d 33  |a%!12=a%!4-160.3|
00008880  cc 06 20 cc 0d 33 d6 11  20 20 e7 20 67 6f 32 25  |.. ..3..  . go2%|
00008890  3d 2d 31 20 8c 0d 33 e0  16 20 20 20 61 25 21 31  |=-1 ..3..   a%!1|
000088a0  32 3d 61 25 21 34 2d 67  6f 31 25 0d 33 ea 07 20  |2=a%!4-go1%.3.. |
000088b0  20 cc 0d 33 f4 27 20 20  20 61 25 21 31 32 3d 61  | ..3.'   a%!12=a|
000088c0  25 21 34 2d 28 67 6f 32  25 2b b3 28 67 6f 31 25  |%!4-(go2%+.(go1%|
000088d0  2d 67 6f 32 25 29 2d 31  29 0d 33 fe 07 20 20 cd  |-go2%)-1).3..  .|
000088e0  0d 34 08 06 20 cd 0d 34  12 05 ed 0d 34 1c 30 f2  |.4.. ..4....4.0.|
000088f0  61 64 64 5f 61 6c 69 65  6e 28 a4 69 64 65 6e 74  |add_alien(.ident|
00008900  69 66 79 5f 70 61 74 74  65 72 6e 28 22 73 68 69  |ify_pattern("shi|
00008910  70 22 29 2c 30 2c 33 32  2c 30 29 0d 34 26 16 21  |p"),0,32,0).4&.!|
00008920  65 6e 65 72 67 79 3d 6d  61 78 5f 65 6e 65 72 67  |energy=max_energ|
00008930  79 0d 34 30 05 e1 0d 34  3a 05 3a 0d 34 44 1d dd  |y.40...4:.:.4D..|
00008940  20 f2 61 64 64 5f 61 6c  69 65 6e 28 41 25 2c 42  | .add_alien(A%,B|
00008950  25 2c 43 25 2c 44 25 29  0d 34 4e 17 d6 20 61 64  |%,C%,D%).4N.. ad|
00008960  64 5f 61 6c 69 65 6e 5f  74 6f 5f 6c 69 73 74 0d  |d_alien_to_list.|
00008970  34 58 05 e1 0d 34 62 05  3a 0d 34 6c 19 dd 20 a4  |4X...4b.:.4l.. .|
00008980  61 6c 6c 6f 63 28 73 69  7a 65 2c 61 6c 69 67 6e  |alloc(size,align|
00008990  25 29 0d 34 76 16 c8 95  20 50 25 20 83 20 31 36  |%).4v... P% . 16|
000089a0  3c 3e 61 6c 69 67 6e 25  0d 34 80 0a 20 50 25 2b  |<>align%.4.. P%+|
000089b0  3d 34 0d 34 8a 05 ce 0d  34 94 0c 50 25 2b 3d 73  |=4.4....4..P%+=s|
000089c0  69 7a 65 0d 34 9e 0c 3d  50 25 2d 73 69 7a 65 0d  |ize.4..=P%-size.|
000089d0  34 a8 05 3a 0d 34 b2 1a  dd 20 a4 6c 6f 67 32 28  |4..:.4... .log2(|
000089e0  61 25 29 3d ab 28 61 25  29 2f ab 28 32 29 0d ff  |a%)=.(a%)/.(2)..|
000089f0