back to project page

PhantomsFive Disassembly

                   ********************************************************************************
                   * Phantoms Five for the Apple II, by Nasir Gabelli                             *
                   * Copyright 1980 Sirius Software                                               *
                   ********************************************************************************
                   * This is a modified version of a cracked copy.                                *
                   ********************************************************************************
                   * Disassembly by Andy McFadden, using 6502bench SourceGen v1.7.2.              *
                   * Last updated 2020/08/23                                                      *
                   *                                                                              *
                   * Note the entry point is at $3000, not the start of the file.                 *
                   ********************************************************************************
                   * The first 8 lines of the screen display the status, usually score/lives but  *
                   * sometimes a flashing message.  During the bombing phase, the rest of the     *
                   * screen shows scrolling terrain on the odd lines, and the player's plane on   *
                   * the even lines.  The quick flak pops and bomb explosions are drawn on top of *
                   * the terrain, while the damaging flak bursts are drawn on the even lines.     *
                   ********************************************************************************
                   O_EXPL_STATE    .eq     $00    {const}    ;animation frame counter, initially 1
                   O_EXPL_VIGOR    .eq     $01    {const}    ;explosion size, 4/8/14
                   O_EXPL_ROW      .eq     $02    {const}    ;screen row
                   start_row       .eq     $04               ;bitmap copy: start row (0-191)
                   end_row         .eq     $05               ;bitmap copy: end row (0-191)
                   start_col       .eq     $06               ;bitmap copy: start col (0-39)
                   end_col         .eq     $07               ;bitmap copy: end col (0-39)
                   player_row      .eq     $0c               ;row where top of plane/sight drawn
                   player_col      .eq     $0d               ;player horiz byte position (0-34 by two)
                   player_col_shift .eq    $0e               ;player horiz pixel position (0-6)
                   player_desired_xc .eq   $10               ;desired horiziontal coord (0-60)
                   player_cur_xc   .eq     $11               ;current horizontal coord (0-60)
                   player_slide_ctr .eq    $12               ;controls player up/down slide
                   frame_counter   .eq     $20               ;counts down frames until events
                   plyr_crash_ctr  .eq     $21               ;show player crash until counter expires
                   dogfight_upd_ctr .eq    $22               ;controls pace of dogfight
                   restart_vec     .eq     $4e    {addr/2}   ;reboot vector, set by title program
                   score           .eq     $50    {addr/6}   ;score, as 6 individual digits
                   player_level    .eq     $56               ;difficulty level (1-5)
                   targets_hit     .eq     $57    {addr/3}   ;number of targets hit, as 3 digits
                   planes_hit      .eq     $5a    {addr/3}   ;number of planes hit, as 3 digits
                   player_lives    .eq     $5d               ;number of planes remaining
                   terrain_src_ptr .eq     $60    {addr/2}   ;points to top line in terrain data
                   wronly_62?      .eq     $62               ;written, never read
                   air_attack_msg_flag .eq $63               ;bool 00/01: showing "air attack" msg?
                   bombrun_timer_lo .eq    $64               ;low part of bomb run phase timer
                   frames_until_dogfight .eq $65             ;show "air attack" msg for this long
                   dogfight_remain .eq     $66               ;# of planes remaining to destroy
                   bombrun_timer_hi .eq    $67               ;high part of bomb run phase timer
                   eplane_suppress_fire .eq $68              ;bool 00/01: enemy gunfire suppressed?
                   gun_fire_count  .eq     $6a               ;counts down bullets fired per button press
                   enemy_plane_sec_timer .eq $6b             ;paces secondary plane updates
                   enemy_plane_state1 .eq  $70    {addr/8}   ;swap with primary state at $a0-a7
                   bullet_rows     .eq     $90    {addr/7}   ;used to erase bullets
                   bullet_cols     .eq     $97    {addr/7}   ;used to erase bullets
                   bullet_draw_index .eq   $9e               ;cycles through 0-6
                   bullet_erase_index .eq  $9f               ;used to erase bullets (0-6)
                   eplane_state    .eq     $a0               ;0=inactive, <$80=alive, >$80=exploding
                   eplane_row      .eq     $a1               ;enemy plane: top row
                   eplane_col      .eq     $a2               ;enemy plane: leftmost column
                   eplane_float_dir .eq    $a3               ;$00=up, $ff=down
                   eplane_veer_dir .eq     $a4               ;$01=climb, $02=left, $03=right
                   eplane_float_time .eq   $a5               ;duration of float in given direction
                   eplane_float_ctr .eq    $a6               ;counts down to float dir change
                   eplane_frame_hold_ctr .eq $a7             ;how long to hold each animation frame
                   gun_sound_ctr   .eq     $af               ;controls gun-firing sound
                   bullet_flying_flag .eq  $b0               ;bool 00/01: is a bullet in flight?
                   bullet_row      .eq     $b1               ;bullet's current row (8-191)
                   bullet_col_byte .eq     $b2               ;bullet horizontal byte posn (0-39)
                   bullet_col_pixel .eq    $b3               ;bullet horizontal pixel posn (0-6)
                   bullet_horiz_count .eq  $b4               ;used to reset counter; |$80 for leftward
                   bullet_horiz_ctr .eq    $b5               ;counts down to horizontal move
                   bullet_vert_count .eq   $b6               ;used to reset counter
                   bullet_vert_ctr .eq     $b7               ;counts down to vertical move
                   flak_burst_ctr  .eq     $c0               ;countdown to next flak burst
                   burst_pending_state .eq $c1               ;0=not, 1=draw, 2=erase, 3=wait
                   burst_delay_ctr .eq     $c3               ;counts delay between pop and burst
                   flak_burst_pop_row .eq  $c4               ;current row of pre-burst pop
                   flak_burst_pop_col .eq  $c5               ;current column of pre-burst pop
                   flak_burst_state .eq    $d0               ;animation frame; 0 if inactive
                   flak_burst_row  .eq     $d1               ;current row of flak burst
                   flak_burst_col  .eq     $d2               ;current column of flak burst
                   bomb_explosion0 .eq     $e0    {addr/4}   ;bomb explosion state (slot 0)
                   bomb_explosion1 .eq     $e4    {addr/4}   ;bomb explosion state (slot 1)
                   bomb_explosion2 .eq     $e8    {addr/4}   ;bomb explosion state (slot 2)
                   bomb_explosion3 .eq     $ec    {addr/4}   ;bomb explosion state (slot 3)
                   bomb_state      .eq     $f0               ;0=not falling, 1-8=falling, 9=impact
                   bomb_vert_posn  .eq     $f1               ;current row of falling bomb
                   bomb_horiz_posn .eq     $f2               ;current column of falling bomb
                   bomb_exp_slot   .eq     $f3               ;cycles through bomb slots (0-4)
                   bomb_explosion4 .eq     $f4    {addr/4}   ;bomb explosion state (slot 4)
                   player_crash_state .eq  $f8               ;0=alive, 1+ = crash animation frame
                   plyr_crash_row  .eq     $f9               ;current row of crashing player plane
                   plyr_crash_col  .eq     $fa               ;current column of crashing player plane
                   plyr_crash_flags .eq    $fb               ;bit flags: $01=on right, $02=very low
                   player_as_plane .eq     $fd               ;bool 00/01: draw player as plane?
                   flak0_state     .eq     $0300             ;0=inactive, 1=need draw, 2=need erase
                   flak0_row       .eq     $0303             ;row where flak appears
                   flak0_col       .eq     $0304             ;column where flak appears
                   flak1_state     .eq     $0308             ;0=inactive, 1=need draw, 2=need erase
                   flak1_row       .eq     $030a             ;row where flak appears
                   flak1_col       .eq     $030b             ;column where flak appears
                   flak_delay_ctr  .eq     $030c             ;time between flakkings
                   HIRES_PAGE1     .eq     $2000  {addr/8192} ;hi-res screen, page 1
                   KBD             .eq     $c000             ;R last key pressed + 128
                   KBDSTRB         .eq     $c010             ;RW keyboard strobe
                   SPKR            .eq     $c030             ;RW toggle speaker
                   BUTN0           .eq     $c061             ;R switch input 0 / open-apple
                   PADDL0          .eq     $c064             ;R analog input 0
                   PTRIG           .eq     $c070             ;RW analog input reset
                   ROMIN_RO        .eq     $c082             ;RW read ROM, no write
                   LCBANK2         .eq     $c083             ;RWx2 read/write RAM bank 2
                   MON_WAIT        .eq     $fca8             ;delay for (26 + 27*Acc + 5*(Acc*Acc))/2 cycles
                   RESET_VECTOR    .eq     $fffc  {addr/2}   ;6502 reset vector

                                   .org    $0400
                   ; 
                   ; Scrolls the terrain on the hi-res screen, copying odd lines down two lines,
                   ; and adding one new line from the terrain data.  This does not include the top
                   ; 8 lines, which hold the status text.
                   ; 
                   ; The code is on text page 1, so it has to step around the screen holes.
                   ; 
0400: a0 00        ScrollTerrain   ldy     #$00
0402: b9 d0 37     :ScrollLoop     lda     HIRES_PAGE1+$17d0,y ;read line 189
0405: 99 d0 3f                     sta     HIRES_PAGE1+$1fd0,y ;write line 191
0408: b9 d0 2f                     lda     HIRES_PAGE1+$fd0,y ;read line 187
040b: 99 d0 37                     sta     HIRES_PAGE1+$17d0,y ;write line 189
040e: b9 d0 27                     lda     HIRES_PAGE1+$7d0,y ; ...
0411: 99 d0 2f                     sta     HIRES_PAGE1+$fd0,y
0414: b9 50 3f                     lda     HIRES_PAGE1+$1f50,y
0417: 99 d0 27                     sta     HIRES_PAGE1+$7d0,y
041a: b9 50 37                     lda     HIRES_PAGE1+$1750,y
041d: 99 50 3f                     sta     HIRES_PAGE1+$1f50,y
0420: b9 50 2f                     lda     HIRES_PAGE1+$f50,y
0423: 99 50 37                     sta     HIRES_PAGE1+$1750,y
0426: b9 50 27                     lda     HIRES_PAGE1+$750,y
0429: 99 50 2f                     sta     HIRES_PAGE1+$f50,y
042c: b9 d0 3e                     lda     HIRES_PAGE1+$1ed0,y
042f: 99 50 27                     sta     HIRES_PAGE1+$750,y
0432: b9 d0 36                     lda     HIRES_PAGE1+$16d0,y
0435: 99 d0 3e                     sta     HIRES_PAGE1+$1ed0,y
0438: b9 d0 2e                     lda     HIRES_PAGE1+$ed0,y
043b: 99 d0 36                     sta     HIRES_PAGE1+$16d0,y
043e: b9 d0 26                     lda     HIRES_PAGE1+$6d0,y
0441: 99 d0 2e                     sta     HIRES_PAGE1+$ed0,y
0444: b9 50 3e                     lda     HIRES_PAGE1+$1e50,y
0447: 99 d0 26                     sta     HIRES_PAGE1+$6d0,y
044a: b9 50 36                     lda     HIRES_PAGE1+$1650,y
044d: 99 50 3e                     sta     HIRES_PAGE1+$1e50,y
0450: b9 50 2e                     lda     HIRES_PAGE1+$e50,y
0453: 99 50 36                     sta     HIRES_PAGE1+$1650,y
0456: b9 50 26                     lda     HIRES_PAGE1+$650,y
0459: 99 50 2e                     sta     HIRES_PAGE1+$e50,y
045c: b9 d0 3d                     lda     HIRES_PAGE1+$1dd0,y
045f: 99 50 26                     sta     HIRES_PAGE1+$650,y
0462: b9 d0 35                     lda     HIRES_PAGE1+$15d0,y
0465: 99 d0 3d                     sta     HIRES_PAGE1+$1dd0,y
0468: b9 d0 2d                     lda     HIRES_PAGE1+$dd0,y
046b: 99 d0 35                     sta     HIRES_PAGE1+$15d0,y
046e: b9 d0 25                     lda     HIRES_PAGE1+$5d0,y
0471: 99 d0 2d                     sta     HIRES_PAGE1+$dd0,y
0474: 4c 80 04                     jmp     :Cont480

0477: 00 06 04 04+                 .junk   9                 ;screen hole $478-47f

0480: b9 50 3d     :Cont480        lda     HIRES_PAGE1+$1d50,y
0483: 99 d0 25                     sta     HIRES_PAGE1+$5d0,y
0486: b9 50 35                     lda     HIRES_PAGE1+$1550,y
0489: 99 50 3d                     sta     HIRES_PAGE1+$1d50,y
048c: b9 50 2d                     lda     HIRES_PAGE1+$d50,y
048f: 99 50 35                     sta     HIRES_PAGE1+$1550,y
0492: b9 50 25                     lda     HIRES_PAGE1+$550,y
0495: 99 50 2d                     sta     HIRES_PAGE1+$d50,y
0498: b9 d0 3c                     lda     HIRES_PAGE1+$1cd0,y
049b: 99 50 25                     sta     HIRES_PAGE1+$550,y
049e: b9 d0 34                     lda     HIRES_PAGE1+$14d0,y
04a1: 99 d0 3c                     sta     HIRES_PAGE1+$1cd0,y
04a4: b9 d0 2c                     lda     HIRES_PAGE1+$cd0,y
04a7: 99 d0 34                     sta     HIRES_PAGE1+$14d0,y
04aa: b9 d0 24                     lda     HIRES_PAGE1+$4d0,y
04ad: 99 d0 2c                     sta     HIRES_PAGE1+$cd0,y
04b0: b9 50 3c                     lda     HIRES_PAGE1+$1c50,y
04b3: 99 d0 24                     sta     HIRES_PAGE1+$4d0,y
04b6: b9 50 34                     lda     HIRES_PAGE1+$1450,y
04b9: 99 50 3c                     sta     HIRES_PAGE1+$1c50,y
04bc: b9 50 2c                     lda     HIRES_PAGE1+$c50,y
04bf: 99 50 34                     sta     HIRES_PAGE1+$1450,y
04c2: b9 50 24                     lda     HIRES_PAGE1+$450,y
04c5: 99 50 2c                     sta     HIRES_PAGE1+$c50,y
04c8: b9 a8 3f                     lda     HIRES_PAGE1+$1fa8,y
04cb: 99 50 24                     sta     HIRES_PAGE1+$450,y
04ce: b9 a8 37                     lda     HIRES_PAGE1+$17a8,y
04d1: 99 a8 3f                     sta     HIRES_PAGE1+$1fa8,y
04d4: b9 a8 2f                     lda     HIRES_PAGE1+$fa8,y
04d7: 99 a8 37                     sta     HIRES_PAGE1+$17a8,y
04da: b9 a8 27                     lda     HIRES_PAGE1+$7a8,y
04dd: 99 a8 2f                     sta     HIRES_PAGE1+$fa8,y
04e0: b9 28 3f                     lda     HIRES_PAGE1+$1f28,y
04e3: 99 a8 27                     sta     HIRES_PAGE1+$7a8,y
04e6: b9 28 37                     lda     HIRES_PAGE1+$1728,y
04e9: 99 28 3f                     sta     HIRES_PAGE1+$1f28,y
04ec: b9 28 2f                     lda     HIRES_PAGE1+$f28,y
04ef: 99 28 37                     sta     HIRES_PAGE1+$1728,y
04f2: b9 28 27                     lda     HIRES_PAGE1+$728,y
04f5: 4c 00 05                     jmp     :Cont500

04f8: 04 00 00 00+                 .junk   8                 ;screen hole

0500: 99 28 2f     :Cont500        sta     HIRES_PAGE1+$f28,y
0503: b9 a8 3e                     lda     HIRES_PAGE1+$1ea8,y
0506: 99 28 27                     sta     HIRES_PAGE1+$728,y
0509: b9 a8 36                     lda     HIRES_PAGE1+$16a8,y
050c: 99 a8 3e                     sta     HIRES_PAGE1+$1ea8,y
050f: b9 a8 2e                     lda     HIRES_PAGE1+$ea8,y
0512: 99 a8 36                     sta     HIRES_PAGE1+$16a8,y
0515: b9 a8 26                     lda     HIRES_PAGE1+$6a8,y
0518: 99 a8 2e                     sta     HIRES_PAGE1+$ea8,y
051b: b9 28 3e                     lda     HIRES_PAGE1+$1e28,y
051e: 99 a8 26                     sta     HIRES_PAGE1+$6a8,y
0521: b9 28 36                     lda     HIRES_PAGE1+$1628,y
0524: 99 28 3e                     sta     HIRES_PAGE1+$1e28,y
0527: b9 28 2e                     lda     HIRES_PAGE1+$e28,y
052a: 99 28 36                     sta     HIRES_PAGE1+$1628,y
052d: b9 28 26                     lda     HIRES_PAGE1+$628,y
0530: 99 28 2e                     sta     HIRES_PAGE1+$e28,y
0533: b9 a8 3d                     lda     HIRES_PAGE1+$1da8,y
0536: 99 28 26                     sta     HIRES_PAGE1+$628,y
0539: b9 a8 35                     lda     HIRES_PAGE1+$15a8,y
053c: 99 a8 3d                     sta     HIRES_PAGE1+$1da8,y
053f: b9 a8 2d                     lda     HIRES_PAGE1+$da8,y
0542: 99 a8 35                     sta     HIRES_PAGE1+$15a8,y
0545: b9 a8 25                     lda     HIRES_PAGE1+$5a8,y
0548: 99 a8 2d                     sta     HIRES_PAGE1+$da8,y
054b: b9 28 3d                     lda     HIRES_PAGE1+$1d28,y
054e: 99 a8 25                     sta     HIRES_PAGE1+$5a8,y
0551: b9 28 35                     lda     HIRES_PAGE1+$1528,y
0554: 99 28 3d                     sta     HIRES_PAGE1+$1d28,y
0557: b9 28 2d                     lda     HIRES_PAGE1+$d28,y
055a: 99 28 35                     sta     HIRES_PAGE1+$1528,y
055d: b9 28 25                     lda     HIRES_PAGE1+$528,y
0560: 99 28 2d                     sta     HIRES_PAGE1+$d28,y
0563: b9 a8 3c                     lda     HIRES_PAGE1+$1ca8,y
0566: 99 28 25                     sta     HIRES_PAGE1+$528,y
0569: b9 a8 34                     lda     HIRES_PAGE1+$14a8,y
056c: 99 a8 3c                     sta     HIRES_PAGE1+$1ca8,y
056f: b9 a8 2c                     lda     HIRES_PAGE1+$ca8,y
0572: 99 a8 34                     sta     HIRES_PAGE1+$14a8,y
0575: 4c 80 05                     jmp     :Cont580

0578: 24 00 00 00+                 .junk   8                 ;screen hole

0580: b9 a8 24     :Cont580        lda     HIRES_PAGE1+$4a8,y
0583: 99 a8 2c                     sta     HIRES_PAGE1+$ca8,y
0586: b9 28 3c                     lda     HIRES_PAGE1+$1c28,y
0589: 99 a8 24                     sta     HIRES_PAGE1+$4a8,y
058c: b9 28 34                     lda     HIRES_PAGE1+$1428,y
058f: 99 28 3c                     sta     HIRES_PAGE1+$1c28,y
0592: b9 28 2c                     lda     HIRES_PAGE1+$c28,y
0595: 99 28 34                     sta     HIRES_PAGE1+$1428,y
0598: b9 28 24                     lda     HIRES_PAGE1+$428,y
059b: 99 28 2c                     sta     HIRES_PAGE1+$c28,y
059e: b9 80 3f                     lda     HIRES_PAGE1+$1f80,y
05a1: 99 28 24                     sta     HIRES_PAGE1+$428,y
05a4: b9 80 37                     lda     HIRES_PAGE1+$1780,y
05a7: 99 80 3f                     sta     HIRES_PAGE1+$1f80,y
05aa: b9 80 2f                     lda     HIRES_PAGE1+$f80,y
05ad: 99 80 37                     sta     HIRES_PAGE1+$1780,y
05b0: b9 80 27                     lda     HIRES_PAGE1+$780,y
05b3: 99 80 2f                     sta     HIRES_PAGE1+$f80,y
05b6: b9 00 3f                     lda     HIRES_PAGE1+$1f00,y
05b9: 99 80 27                     sta     HIRES_PAGE1+$780,y
05bc: b9 00 37                     lda     HIRES_PAGE1+$1700,y
05bf: 99 00 3f                     sta     HIRES_PAGE1+$1f00,y
05c2: b9 00 2f                     lda     HIRES_PAGE1+$f00,y
05c5: 99 00 37                     sta     HIRES_PAGE1+$1700,y
05c8: b9 00 27                     lda     HIRES_PAGE1+$700,y
05cb: 99 00 2f                     sta     HIRES_PAGE1+$f00,y
05ce: b9 80 3e                     lda     HIRES_PAGE1+$1e80,y
05d1: 99 00 27                     sta     HIRES_PAGE1+$700,y
05d4: b9 80 36                     lda     HIRES_PAGE1+$1680,y
05d7: 99 80 3e                     sta     HIRES_PAGE1+$1e80,y
05da: b9 80 2e                     lda     HIRES_PAGE1+$e80,y
05dd: 99 80 36                     sta     HIRES_PAGE1+$1680,y
05e0: b9 80 26                     lda     HIRES_PAGE1+$680,y
05e3: 99 80 2e                     sta     HIRES_PAGE1+$e80,y
05e6: b9 00 3e                     lda     HIRES_PAGE1+$1e00,y
05e9: 99 80 26                     sta     HIRES_PAGE1+$680,y
05ec: b9 00 36                     lda     HIRES_PAGE1+$1600,y
05ef: 99 00 3e                     sta     HIRES_PAGE1+$1e00,y
05f2: b9 00 2e                     lda     HIRES_PAGE1+$e00,y
05f5: 4c 00 06                     jmp     :Cont600

05f8: 60 00 00 00+                 .junk   8                 ;screen hole

0600: 99 00 36     :Cont600        sta     HIRES_PAGE1+$1600,y
0603: b9 00 26                     lda     HIRES_PAGE1+$600,y
0606: 99 00 2e                     sta     HIRES_PAGE1+$e00,y
0609: b9 80 3d                     lda     HIRES_PAGE1+$1d80,y
060c: 99 00 26                     sta     HIRES_PAGE1+$600,y
060f: b9 80 35                     lda     HIRES_PAGE1+$1580,y
0612: 99 80 3d                     sta     HIRES_PAGE1+$1d80,y
0615: b9 80 2d                     lda     HIRES_PAGE1+$d80,y
0618: 99 80 35                     sta     HIRES_PAGE1+$1580,y
061b: b9 80 25                     lda     HIRES_PAGE1+$580,y
061e: 99 80 2d                     sta     HIRES_PAGE1+$d80,y
0621: b9 00 3d                     lda     HIRES_PAGE1+$1d00,y
0624: 99 80 25                     sta     HIRES_PAGE1+$580,y
0627: b9 00 35                     lda     HIRES_PAGE1+$1500,y
062a: 99 00 3d                     sta     HIRES_PAGE1+$1d00,y
062d: b9 00 2d                     lda     HIRES_PAGE1+$d00,y
0630: 99 00 35                     sta     HIRES_PAGE1+$1500,y
0633: b9 00 25                     lda     HIRES_PAGE1+$500,y
0636: 99 00 2d                     sta     HIRES_PAGE1+$d00,y
0639: b9 80 3c                     lda     HIRES_PAGE1+$1c80,y
063c: 99 00 25                     sta     HIRES_PAGE1+$500,y
063f: b9 80 34                     lda     HIRES_PAGE1+$1480,y
0642: 99 80 3c                     sta     HIRES_PAGE1+$1c80,y
0645: b9 80 2c                     lda     HIRES_PAGE1+$c80,y
0648: 99 80 34                     sta     HIRES_PAGE1+$1480,y
064b: b9 80 24                     lda     HIRES_PAGE1+$480,y ;read line 9
064e: 99 80 2c                     sta     HIRES_PAGE1+$c80,y ;write line 11
0651: c8                           iny
0652: c0 28                        cpy     #40               ;reached end of line?
0654: f0 03                        beq     :TopLine          ;yes, bail
0656: 4c 02 04                     jmp     :ScrollLoop

                   ; Draw the top line of the screen from the terrain data.
0659: 20 00 1c     :TopLine        jsr     DecrTerrPtrAndDfC ;back up a line in the terrain data
065c: a0 00                        ldy     #$00
065e: b1 60        :LineLoop       lda     (terrain_src_ptr),y
0660: 99 80 24                     sta     HIRES_PAGE1+$480,y ;line 9
0663: c8                           iny
0664: c0 28                        cpy     #40               ;done with line?
0666: 90 f6                        bcc     :LineLoop         ;not yet
0668: 60                           rts

0669: 00 00 00 00+                 .align  $0100 (151 bytes)

                   ; 
                   ; Clears the screen to a specific color.  Called when starting a bombing run
                   ; (black), starting a dogfight (blue), or when the game is over (black).
                   ; 
                   ; On entry:
                   ;   A-reg: color pattern (even bytes)
                   ; 
0700: a0 00        ClearScreen     ldy     #$00
0702: 99 00 20     :Loop           sta     HIRES_PAGE1,y
0705: 99 00 21                     sta     HIRES_PAGE1+$100,y
0708: 99 00 22                     sta     HIRES_PAGE1+$200,y
070b: 99 00 23                     sta     HIRES_PAGE1+$300,y
070e: 99 00 24                     sta     HIRES_PAGE1+$400,y
0711: 99 00 25                     sta     HIRES_PAGE1+$500,y
0714: 99 00 26                     sta     HIRES_PAGE1+$600,y
0717: 99 00 27                     sta     HIRES_PAGE1+$700,y
071a: 99 00 28                     sta     HIRES_PAGE1+$800,y
071d: 99 00 29                     sta     HIRES_PAGE1+$900,y
0720: 99 00 2a                     sta     HIRES_PAGE1+$a00,y
0723: 99 00 2b                     sta     HIRES_PAGE1+$b00,y
0726: 99 00 2c                     sta     HIRES_PAGE1+$c00,y
0729: 99 00 2d                     sta     HIRES_PAGE1+$d00,y
072c: 99 00 2e                     sta     HIRES_PAGE1+$e00,y
072f: 99 00 2f                     sta     HIRES_PAGE1+$f00,y
0732: 99 00 30                     sta     HIRES_PAGE1+$1000,y
0735: 99 00 31                     sta     HIRES_PAGE1+$1100,y
0738: 99 00 32                     sta     HIRES_PAGE1+$1200,y
073b: 99 00 33                     sta     HIRES_PAGE1+$1300,y
073e: 99 00 34                     sta     HIRES_PAGE1+$1400,y
0741: 99 00 35                     sta     HIRES_PAGE1+$1500,y
0744: 99 00 36                     sta     HIRES_PAGE1+$1600,y
0747: 99 00 37                     sta     HIRES_PAGE1+$1700,y
074a: 99 00 38                     sta     HIRES_PAGE1+$1800,y
074d: 99 00 39                     sta     HIRES_PAGE1+$1900,y
0750: 99 00 3a                     sta     HIRES_PAGE1+$1a00,y
0753: 99 00 3b                     sta     HIRES_PAGE1+$1b00,y
0756: 99 00 3c                     sta     HIRES_PAGE1+$1c00,y
0759: 99 00 3d                     sta     HIRES_PAGE1+$1d00,y
075c: 99 00 3e                     sta     HIRES_PAGE1+$1e00,y
075f: 99 00 3f                     sta     HIRES_PAGE1+$1f00,y
0762: c9 00                        cmp     #$00              ;clearing to black?
0764: f0 02                        beq     :NotColor         ;yes, branch
0766: 49 7f                        eor     #$7f              ;no, flip pixels for odd/even columns
0768: c8           :NotColor       iny
0769: d0 97                        bne     :Loop
076b: 60                           rts

076c: 00 00 00 00+                 .junk   20                ;junk + screen hole

                   ; 
                   ; Draws a full set of terrain lines.
                   ; 
0780: a2 bf        DrawFullTerrain ldx     #191              ;bottom line of screen
0782: bd 00 08     :NextLine       lda     hires_addr_hi,x   ;get hi-res line address
0785: 8d 97 07                     sta     :_Store+2
0788: bd c0 08                     lda     hires_addr_lo,x
078b: 8d 96 07                     sta     :_Store+1
078e: a0 00                        ldy     #$00
0790: 20 00 1c                     jsr     DecrTerrPtrAndDfC ;back up a line in the terrain data
0793: b1 60        :_Load          lda     (terrain_src_ptr),y
0795: 99 00 20     :_Store         sta     HIRES_PAGE1,y
0798: c8                           iny
0799: c0 28                        cpy     #40               ;done with line?
079b: 90 f6                        bcc     :_Load
079d: ca                           dex
079e: ca                           dex
079f: e0 09                        cpx     #$09              ;done with screen?
07a1: b0 df                        bcs     :NextLine
07a3: 60                           rts

07a4: 00 00 00 00+                 .align  $0100 (92 bytes)
                   ; 
                   ; Hi-res line base address table.
0800: 20 24 28 2c+ hires_addr_hi   .bulk   $20,$24,$28,$2c,$30,$34,$38,$3c,$20,$24,$28,$2c,$30,$34,$38,$3c
                                    +      $21,$25,$29,$2d,$31,$35,$39,$3d,$21,$25,$29,$2d,$31,$35,$39,$3d
                                    +      $22,$26,$2a,$2e,$32,$36,$3a,$3e,$22,$26,$2a,$2e,$32,$36,$3a,$3e
                                    +      $23,$27,$2b,$2f,$33,$37,$3b,$3f,$23,$27,$2b,$2f,$33,$37,$3b,$3f
                                    +      $20,$24,$28,$2c,$30,$34,$38,$3c,$20,$24,$28,$2c,$30,$34,$38,$3c
                                    +      $21,$25,$29,$2d,$31,$35,$39,$3d,$21,$25,$29,$2d,$31,$35,$39,$3d
                                    +      $22,$26,$2a,$2e,$32,$36,$3a,$3e,$22,$26,$2a,$2e,$32,$36,$3a,$3e
                                    +      $23,$27,$2b,$2f,$33,$37,$3b,$3f,$23,$27,$2b,$2f,$33,$37,$3b,$3f
                                    +      $20,$24,$28,$2c,$30,$34,$38,$3c,$20,$24,$28,$2c,$30,$34,$38,$3c
                                    +      $21,$25,$29,$2d,$31,$35,$39,$3d,$21,$25,$29,$2d,$31,$35,$39,$3d
                                    +      $22,$26,$2a,$2e,$32,$36,$3a,$3e,$22,$26,$2a,$2e,$32,$36,$3a,$3e
                                    +      $23,$27,$2b,$2f,$33,$37,$3b,$3f,$23,$27,$2b,$2f,$33,$37,$3b,$3f
08c0: 00 00 00 00+ hires_addr_lo   .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$80,$80,$80,$80,$80,$80,$80,$80
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$80,$80,$80,$80,$80,$80,$80,$80
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$80,$80,$80,$80,$80,$80,$80,$80
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$80,$80,$80,$80,$80,$80,$80,$80
                                    +      $28,$28,$28,$28,$28,$28,$28,$28,$a8,$a8,$a8,$a8,$a8,$a8,$a8,$a8
                                    +      $28,$28,$28,$28,$28,$28,$28,$28,$a8,$a8,$a8,$a8,$a8,$a8,$a8,$a8
                                    +      $28,$28,$28,$28,$28,$28,$28,$28,$a8,$a8,$a8,$a8,$a8,$a8,$a8,$a8
                                    +      $28,$28,$28,$28,$28,$28,$28,$28,$a8,$a8,$a8,$a8,$a8,$a8,$a8,$a8
                                    +      $50,$50,$50,$50,$50,$50,$50,$50,$d0,$d0,$d0,$d0,$d0,$d0,$d0,$d0
                                    +      $50,$50,$50,$50,$50,$50,$50,$50,$d0,$d0,$d0,$d0,$d0,$d0,$d0,$d0
                                    +      $50,$50,$50,$50,$50,$50,$50,$50,$d0,$d0,$d0,$d0,$d0,$d0,$d0,$d0
                                    +      $50,$50,$50,$50,$50,$50,$50,$50,$d0,$d0,$d0,$d0,$d0,$d0,$d0,$d0

                   ; 
                   ; Bomb bitmaps (1x8, height doubled).  There's only one version of these, not
                   ; seven shifted forms, which is why bombs don't always line up with the plane.
                   vis vis
0980: 04 0e 1f 1f+ bomb_0          .bulk   $04,$0e,$1f,$1f,$1f,$0e,$1b,$00

                   vis
0988: 00 06 0f 0f+ bomb_1          .bulk   $00,$06,$0f,$0f,$0f,$06,$09,$00

                   vis
0990: 00 00 04 0e+ bomb_2          .bulk   $00,$00,$04,$0e,$0e,$0e,$04,$00

                   vis
0998: 00 00 00 0e+ bomb_3          .bulk   $00,$00,$00,$0e,$0e,$0e,$00,$00

                   ; 
                   ; Draws a falling bomb.  Like the player's plane, the bomb is drawn on even
                   ; rows.  The bomb is one byte wide.
                   ; 
                   ; On entry:
                   ;   $04: start row
                   ;   $05: end row (exclusive)
                   ;   $07: must be $00 (used as data index)
                   ; 
09a0: a5 04        DrawBomb        lda     start_row
09a2: 38                           sec
09a3: e9 04                        sbc     #$04              ;previous bomb was drawn a few lines up,
09a5: aa                           tax                       ; so erase those (SBC #$02 is sufficent)
09a6: e0 c0        :RowLoop1       cpx     #192              ;off bottom of screen?
09a8: b0 1b                        bcs     :NextLine1        ;yes, skip draw
09aa: e0 08                        cpx     #$08              ;off top of screen?
09ac: 90 17                        bcc     :NextLine1        ;yes, skip draw
09ae: bd 00 08                     lda     hires_addr_hi,x   ;set up hi-res address
09b1: 8d c4 09                     sta     :_Store1+2
09b4: bd c0 08                     lda     hires_addr_lo,x
09b7: 8d c3 09                     sta     :_Store1+1
09ba: a4 06                        ldy     start_col         ;get column
09bc: c0 28                        cpy     #40               ;off screen left/right?
09be: b0 05                        bcs     :NextLine1
09c0: a9 00                        lda     #$00              ;draw black pixels
09c2: 99 d0 38     :_Store1        sta     HIRES_PAGE1+$18d0,y ;erase previous bomb
09c5: e8           :NextLine1      inx
09c6: e8                           inx
09c7: e4 04                        cpx     start_row         ;stop when we reach first row of new output
09c9: d0 db                        bne     :RowLoop1
                   ; Draw bomb.
09cb: e0 c0        :RowLoop2       cpx     #192              ;off bottom of screen?
09cd: b0 1c                        bcs     :NextLine2        ;yes, skip draw
09cf: e0 08                        cpx     #$08              ;off top of screen?
09d1: 90 18                        bcc     :NextLine2        ;yes, skip draw
09d3: bd 00 08                     lda     hires_addr_hi,x   ;set up hi-res address
09d6: 8d e8 09                     sta     :_Store+2
09d9: bd c0 08                     lda     hires_addr_lo,x
09dc: 8d e7 09                     sta     :_Store+1
09df: a4 07                        ldy     end_col
09e1: b9 98 09     _LoadBombGfx    lda     bomb_3,y          ;get pixels from bitmap, set earlier
09e4: a4 06                        ldy     start_col
09e6: 99 d0 39     :_Store         sta     HIRES_PAGE1+$19d0,y ;copy to screen
09e9: e6 07                        inc     end_col           ;increment index into bitmap data
09eb: e8           :NextLine2      inx
09ec: e8                           inx
09ed: e4 05                        cpx     end_row           ;done with rows?
09ef: d0 da                        bne     :RowLoop2         ;not yet
09f1: 60                           rts

09f2: 00 00 00 00+                 .junk   5
                   ; 
                   ; Addresses of bomb bitmaps (1x8, height doubled)  This is just the low byte of
                   ; the address; all bitmaps are at $09xx.  Note each frame is shown twice.
09f7: 00           bomb_addrs      .dd1    $00               ;state 0
09f8: 80                           .dd1    <bomb_0
09f9: 80                           .dd1    <bomb_0
09fa: 88                           .dd1    <bomb_1
09fb: 88                           .dd1    <bomb_1
09fc: 90                           .dd1    <bomb_2
09fd: 90                           .dd1    <bomb_2
09fe: 98                           .dd1    <bomb_3
09ff: 98                           .dd1    <bomb_3           ;state 8

                   ; 
                   ; Updates the state of a falling bomb.  Handles impact detonation.
                   ; 
                   • Clear variables
                   ]hptr           .var    $00    {addr/2}

0a00: a5 f0        UpdateBomb      lda     bomb_state        ;check bomb state
0a02: d0 01                        bne     :Active           ;it's active, branch
0a04: 60                           rts

0a05: c9 09        :Active         cmp     #$09              ;have we hit the ground?
0a07: b0 27                        bcs     :BombImpact       ;yes, go deal with that
0a09: aa                           tax                       ;no, draw it
0a0a: bd f7 09                     lda     bomb_addrs,x      ;set up bitmap address
0a0d: 8d e2 09                     sta     _LoadBombGfx+1    ;high byte doesn't change
0a10: a5 f1                        lda     bomb_vert_posn    ;set up bomb renderer
0a12: 85 04                        sta     start_row
0a14: 18                           clc
0a15: 69 10                        adc     #16               ;16 rows high (8 * 2)
0a17: 85 05                        sta     end_row
0a19: a5 f2                        lda     bomb_horiz_posn
0a1b: 85 06                        sta     start_col
0a1d: a9 00                        lda     #$00
0a1f: 85 07                        sta     end_col           ;used as data index
0a21: e6 f0                        inc     bomb_state        ;advance bomb state
0a23: a5 f1                        lda     bomb_vert_posn    ;move down so it falls behind player plane
0a25: 18                           clc
0a26: 69 02                        adc     #$02              ;+2 rows (need to stay on even rows)
0a28: 85 f1                        sta     bomb_vert_posn
0a2a: 4c a0 09                     jmp     DrawBomb          ;draw it; erases previous remnant

0a2d: ea ea ea                     .junk   3

                   ; Bomb has hit the ground.  We need to erase it, because the bomb explosion is
                   ; drawn on the odd (terrain) lines rather than the even (player) lines and won't
                   ; overwrite it.
0a30: a9 00        :BombImpact     lda     #$00
0a32: 85 f0                        sta     bomb_state        ;reset bomb state
                   ; Erase bomb.
0a34: a5 f1                        lda     bomb_vert_posn
0a36: aa                           tax                       ;set top row
0a37: 18                           clc
0a38: 69 10                        adc     #16               ;erase all 16 rows
0a3a: 85 05                        sta     end_row
0a3c: a4 f2                        ldy     bomb_horiz_posn   ;get column
0a3e: e0 c0        :EraseLoop      cpx     #192              ;off the bottom?
0a40: b0 12                        bcs     :NextRow          ;yes, branch
0a42: e0 08                        cpx     #8                ;off the top?
0a44: 90 0e                        bcc     :NextRow          ;yes, branch
0a46: bd 00 08                     lda     hires_addr_hi,x   ;set up hi-res addr
0a49: 85 01                        sta     ]hptr+1
0a4b: bd c0 08                     lda     hires_addr_lo,x
0a4e: 85 00                        sta     ]hptr
0a50: a9 00                        lda     #$00              ;black pixels
0a52: 91 00                        sta     (]hptr),y
0a54: e8           :NextRow        inx
0a55: e8                           inx
0a56: e4 05                        cpx     end_row           ;done with bitmap?
0a58: d0 e4                        bne     :EraseLoop        ;not yet, loop
0a5a: 4c 8f 0b                     jmp     HandleBombImpact  ;consequence time

0a5d: 00 00 00                     .junk   3

                   ; 
                   ; Checks to see if the button is down.  If so, and a bomb is not already
                   ; falling, drop one.
                   ; 
                   ; Holding the button down drops bombs continuously.
                   ; 
0a60: a5 f0        CheckBombButton lda     bomb_state        ;is a bomb falling?
0a62: f0 01                        beq     :DoCheck          ;no, check button
0a64: 60                           rts

0a65: ad 61 c0     :DoCheck        lda     BUTN0             ;get button state
0a68: 30 06                        bmi     :ButtonDown       ;pressed, branch
0a6a: 60                           rts

0a6b: 61 c0 30 01+                 .junk   5

0a70: a9 01        :ButtonDown     lda     #$01
0a72: 85 f0                        sta     bomb_state        ;set button-down flag
0a74: a5 0c                        lda     player_row
0a76: 18                           clc
0a77: 69 34                        adc     #52               ;move down screen to bottom of plane
0a79: c9 c0                        cmp     #192              ;off bottom of screen?
0a7b: 90 05                        bcc     :OnScreen         ;no, branch
0a7d: a9 00                        lda     #$00              ;whoops, cancel bomb
0a7f: 85 f0                        sta     bomb_state
0a81: 60                           rts

0a82: 85 f1        :OnScreen       sta     bomb_vert_posn    ;set as bomb position (vertical)
0a84: a5 0e                        lda     player_col_shift  ;get two-pixel shift amount (0-6)
0a86: 4a                           lsr     A                 ;divide by 4 to get byte offset (0-1)
0a87: 4a                           lsr     A
0a88: 18                           clc
0a89: 65 0d                        adc     player_col        ;add column (0-34); result is still 0-34
0a8b: 69 03                        adc     #$03              ;add 3 to center it on plane (now 3-37)
0a8d: c9 28                        cmp     #40               ;off screen?
0a8f: 90 05                        bcc     :OnScreen2        ;no, branch
0a91: a9 00                        lda     #$00              ;whoops, cancel bomb
0a93: 85 f0                        sta     bomb_state
0a95: 60                           rts

0a96: 85 f2        :OnScreen2      sta     bomb_horiz_posn   ;set as bomb position (horizontal)
0a98: 60                           rts

0a99: 00 00 00 00+                 .junk   6
                   ; 
                   ; Addresses of bomb explosion animations.
                   bomb_exp_addr_lo
0a9f: 00                           .dd1    $00
0aa0: 00                           .dd1    <bomb_expl_0
0aa1: 6c                           .dd1    <bomb_expl_1
0aa2: d8                           .dd1    <bomb_expl_2      ;max frame (low-value)
0aa3: 44                           .dd1    <bomb_expl_3
0aa4: b0                           .dd1    <bomb_expl_4
0aa5: 1c                           .dd1    <bomb_expl_5
0aa6: 88                           .dd1    <bomb_expl_6      ;max frame (medium-value)
0aa7: f4                           .dd1    <bomb_expl_7
0aa8: 60                           .dd1    <bomb_expl_8
0aa9: cc                           .dd1    <bomb_expl_9
0aaa: 38                           .dd1    <bomb_expl_a
0aab: cc                           .dd1    <bomb_expl_9
0aac: 38                           .dd1    <bomb_expl_a      ;max frame (high-value)
0aad: 00 00                        .junk   2
                   bomb_exp_addr_hi
0aaf: 00                           .dd1    $00
0ab0: 67                           .dd1    >bomb_expl_0
0ab1: 67                           .dd1    >bomb_expl_1
0ab2: 67                           .dd1    >bomb_expl_2
0ab3: 68                           .dd1    >bomb_expl_3
0ab4: 68                           .dd1    >bomb_expl_4
0ab5: 69                           .dd1    >bomb_expl_5
0ab6: 69                           .dd1    >bomb_expl_6
0ab7: 69                           .dd1    >bomb_expl_7
0ab8: 6a                           .dd1    >bomb_expl_8
0ab9: 6a                           .dd1    >bomb_expl_9
0aba: 6b                           .dd1    >bomb_expl_a
0abb: 6a                           .dd1    >bomb_expl_9
0abc: 6b                           .dd1    >bomb_expl_a
0abd: 00 00 00                     .junk   3

                   ; 
                   ; Draws a bomb explosion bitmap.
                   ; 
                   ; Each frame is drawn without erasing the previous frame, and zero-valued bytes
                   ; aren't copied.  This means that parts of previous frames may blend with the
                   ; current frame.  This is important because the explosion is drawn on odd
                   ; (terrain) lines, and needs to blend with the terrain features.
                   ; 
                   ; On entry:
                   ;   A-reg: bitmap index (1-13)
                   ; 
0ac0: aa           DrawBombExp1    tax
0ac1: bd 9f 0a                     lda     bomb_exp_addr_lo,x ;set up bitmap address
0ac4: 8d ea 0a                     sta     :_Load+1
0ac7: bd af 0a                     lda     bomb_exp_addr_hi,x
0aca: 8d eb 0a                     sta     :_Load+2
0acd: a6 04                        ldx     start_row         ;get top row
0acf: e0 c0        :RowLoop        cpx     #192              ;off bottom of screen?
0ad1: b0 31                        bcs     :ClickReturn      ;yes, bail
0ad3: e0 08                        cpx     #8                ;off top of screen?
0ad5: 90 2d                        bcc     :ClickReturn      ;yes, bail
0ad7: bd 00 08                     lda     hires_addr_hi,x   ;set up hi-res address
0ada: 8d f0 0a                     sta     :_Store+2
0add: bd c0 08                     lda     hires_addr_lo,x
0ae0: 8d ef 0a                     sta     :_Store+1
0ae3: a4 06                        ldy     start_col         ;get left column
0ae5: c0 28        :ColLoop        cpy     #40               ;check left/right
0ae7: b0 08                        bcs     :SkipDraw         ;off screen, skip
0ae9: ad 94 69     :_Load          lda     bomb_expl_6+12    ;get pixels
0aec: f0 03                        beq     :SkipDraw         ;all black, don't write
0aee: 99 d0 3f     :_Store         sta     HIRES_PAGE1+$1fd0,y ;update hi-res screen
0af1: c8           :SkipDraw       iny                       ;advance column
0af2: ee ea 0a                     inc     :_Load+1          ;advance bitmap pointer
0af5: d0 03                        bne     :NoInc
0af7: ee eb 0a                     inc     :_Load+2
0afa: c4 07        :NoInc          cpy     end_col           ;done with row?
0afc: d0 e7                        bne     :ColLoop          ;not yet, loop
0afe: e8                           inx                       ;advance row by 2 (odd lines only)
0aff: e8                           inx
0b00: e4 05                        cpx     end_row           ;done?
0b02: d0 cb                        bne     :RowLoop          ;no, loop
0b04: 8d 30 c0     :ClickReturn    sta     SPKR              ;click
0b07: 60                           rts

0b08: 00 00 00 00+                 .junk   8

                   ; 
                   ; Draws current frame of bomb explosion sequence.  The state advances until it
                   ; reaches the max (which is determined by target value), and then cycles between
                   ; the last two frames until it falls off the screen.
                   ; 
                   ; There are five explosion state areas on the direct page, 4 bytes each.  Pass
                   ; in a pointer to one of them.
                   ; 
                   ; On entry:
                   ;   $00-01: pointer to bomb explosion state
                   ; 
                   • Clear variables
                   ]bomb_exp_ptr   .var    $00    {addr/2}
                   ]cur_frame      .var    $02    {addr/1}

                   DrawBombExplosion
0b10: a0 00                        ldy     #O_EXPL_STATE
0b12: b1 00                        lda     (]bomb_exp_ptr),y ;get state
0b14: d0 01                        bne     :Cont             ;exploding, continue
0b16: 60                           rts

0b17: 85 02        :Cont           sta     ]cur_frame        ;save state
0b19: c8                           iny                       ;O_EXPL_VIGOR
0b1a: b1 00                        lda     (]bomb_exp_ptr),y ;get max frame value
0b1c: 88                           dey                       ;O_EXPL_STATE
0b1d: c5 02                        cmp     ]cur_frame        ;reached max for this explosion?
0b1f: d0 0b                        bne     :Advance          ;not yet
0b21: b1 00                        lda     (]bomb_exp_ptr),y ;get state
0b23: 38                           sec
0b24: e9 02                        sbc     #$02              ;drop us back two frames
0b26: 91 00                        sta     (]bomb_exp_ptr),y ;save state
0b28: 4c 33 0b                     jmp     :DoDraw

0b2b: ea                           .junk   1

0b2c: b1 00        :Advance        lda     (]bomb_exp_ptr),y ;get state
0b2e: 18                           clc
0b2f: 69 01                        adc     #$01              ;advance animation one frame forward
0b31: 91 00                        sta     (]bomb_exp_ptr),y ;save state
0b33: a0 02        :DoDraw         ldy     #O_EXPL_ROW       ;set up bitmap renderer
0b35: b1 00                        lda     (]bomb_exp_ptr),y ;get row
0b37: 85 04                        sta     start_row
0b39: 18                           clc
0b3a: 69 24                        adc     #36               ;36 lines high
0b3c: 85 05                        sta     end_row
0b3e: c8                           iny                       ;O_EXPL_COL
0b3f: b1 00                        lda     (]bomb_exp_ptr),y
0b41: 85 06                        sta     start_col
0b43: 18                           clc
0b44: 69 06                        adc     #6                ;6 bytes wide
0b46: 85 07                        sta     end_col
0b48: a0 00                        ldy     #$00
0b4a: b1 00                        lda     (]bomb_exp_ptr),y ;get state
0b4c: 38                           sec
0b4d: e9 01                        sbc     #$01              ;subtract one to counteract earlier increment
0b4f: 20 c0 0a                     jsr     DrawBombExp1      ;draw it
0b52: a0 02                        ldy     #$02
0b54: b1 00                        lda     (]bomb_exp_ptr),y ;get current row
0b56: 18                           clc                       ;add 4 (2 rows per frame, we're called
0b57: 69 04                        adc     #$04              ; on alternate frames)
0b59: c9 c0                        cmp     #192              ;reached bottom of screen?
0b5b: b0 03                        bcs     :StopExplosion    ;yes, deactivate the explosion
0b5d: 91 00                        sta     (]bomb_exp_ptr),y ;no, save updated value
0b5f: 60                           rts

0b60: a0 00        :StopExplosion  ldy     #$00
0b62: a9 00                        lda     #$00
0b64: 91 00                        sta     (]bomb_exp_ptr),y
0b66: 60                           rts

0b67: 00                           .junk   1
                   ; 
                   ; Addresses of zero-page locations that hold the bomb explosion animation state
                   ; (4 bytes each).
0b68: e0           bomb_exp_addrs  .dd1    bomb_explosion0
0b69: e4                           .dd1    bomb_explosion1
0b6a: e8                           .dd1    bomb_explosion2
0b6b: ec                           .dd1    bomb_explosion3
0b6c: f4                           .dd1    bomb_explosion4
0b6d: 00 00 00                     .junk   3

                   ; 
                   ; Draws all of the active bomb explosions.
                   ; 
                   DrawBombExplosions
0b70: a9 00                        lda     #$00              ;start at index 0
0b72: 48           :Loop           pha                       ;hang on to this
0b73: aa                           tax
0b74: bd 68 0b                     lda     bomb_exp_addrs,x  ;get ZP address of slot N
0b77: 85 00                        sta     ]bomb_exp_ptr     ;store in pointer
0b79: a9 00                        lda     #$00
0b7b: 85 01                        sta     ]bomb_exp_ptr+1   ;set high byte
0b7d: 20 10 0b                     jsr     DrawBombExplosion ;draw the explosion if it's active
0b80: 68                           pla                       ;restore index
0b81: 18                           clc
0b82: 69 01                        adc     #$01              ;increment (no INC A on 6502)
0b84: c9 05                        cmp     #$05              ;done yet?
0b86: 90 ea                        bcc     :Loop             ;no, branch
0b88: 60                           rts

0b89: 00 00 00 00+                 .junk   6

                   ; 
                   ; Handles bomb hitting the ground.  Set up explosion record, update score.
                   ; 
                   ]hptr           .var    $02    {addr/2}

                   HandleBombImpact
0b8f: e6 f3                        inc     bomb_exp_slot     ;move to next slot
0b91: a5 f3                        lda     bomb_exp_slot
0b93: c9 05                        cmp     #$05              ;reached the limit?
0b95: 90 04                        bcc     :Sub5             ;not yet, branch
0b97: a9 00                        lda     #$00
0b99: 85 f3                        sta     bomb_exp_slot     ;back to zero
0b9b: aa           :Sub5           tax                       ;use as index
0b9c: bd 68 0b                     lda     bomb_exp_addrs,x  ;get address of 4-byte record in ZP
0b9f: 85 00                        sta     ]bomb_exp_ptr     ;put in pointer
0ba1: a9 00                        lda     #$00
0ba3: 85 01                        sta     ]bomb_exp_ptr+1   ;set ptr high byte
0ba5: a0 00                        ldy     #O_EXPL_STATE
0ba7: a9 01                        lda     #$01              ;init state to 1
0ba9: 91 00                        sta     (]bomb_exp_ptr),y
0bab: a6 f1                        ldx     bomb_vert_posn    ;get (even-numbered) row where bomb hit
0bad: e8                           inx                       ;move down one so we're examining terrain
0bae: bd 00 08                     lda     hires_addr_hi,x   ;get address of strike location
0bb1: 85 03                        sta     ]hptr+1
0bb3: bd c0 08                     lda     hires_addr_lo,x
0bb6: 85 02                        sta     ]hptr
0bb8: a4 f2                        ldy     bomb_horiz_posn   ;get column where bomb hit
0bba: b1 02                        lda     (]hptr),y         ;check value on hi-res screen
0bbc: c9 7f                        cmp     #$7f              ;high bit clear, not all white?
0bbe: 90 05                        bcc     :HiCNoW           ;yes, branch
0bc0: a0 0e                        ldy     #14               ;high bit set or white == high value target
0bc2: 4c d0 0b                     jmp     :ScoreBombHit

0bc5: c9 00        :HiCNoW         cmp     #$00              ;all black?
0bc7: d0 05                        bne     :NotBlack         ;no, branch
0bc9: a0 04                        ldy     #4                ;yes, hit blank area on map, low score
0bcb: 4c d0 0b                     jmp     :ScoreBombHit

0bce: a0 08        :NotBlack       ldy     #8                ;medium-value target
0bd0: 20 c0 1b     :ScoreBombHit   jsr     CheckSpecialTargets ;moves Y-reg to A-reg, sets Y-reg to 1
0bd3: 91 00                        sta     (]bomb_exp_ptr),y ;set "explosion vigor" value (4/8/14)
0bd5: a5 f1                        lda     bomb_vert_posn    ;get row
0bd7: 38                           sec
0bd8: e9 05                        sbc     #$05              ;subtract five to center explosion
0bda: c8                           iny
0bdb: 91 00                        sta     (]bomb_exp_ptr),y ;set explosion row
0bdd: a5 f2                        lda     bomb_horiz_posn   ;get col
0bdf: 38                           sec
0be0: e9 03                        sbc     #$03              ;subtract three to center explosion
0be2: c8                           iny
0be3: 91 00                        sta     (]bomb_exp_ptr),y ;set explosion col
0be5: a0 01                        ldy     #O_EXPL_VIGOR
0be7: b1 00                        lda     (]bomb_exp_ptr),y ;get explosion size
0be9: 4a                           lsr     A                 ;divide by 4 (yielding 1/2/3)
0bea: 4a                           lsr     A
0beb: 48                           pha                       ;preserve
0bec: aa                           tax                       ;use as index
0bed: 20 80 5c     :ScoreLoop      jsr     Add10Points       ;add 10 points per
0bf0: ca                           dex
0bf1: d0 fa                        bne     :ScoreLoop
0bf3: 68                           pla
0bf4: 4c a0 1c                     jmp     UpdateTargetCounter

0bf7: 4c a0 1c 20+                 .junk   9

                   ; 
                   ; Draws a frame from the player-crashing sequence.
                   ; 
                   ; On entry:
                   ;   $04: start row
                   ;   $05: end row (exclusive)
                   ;   $06: start column
                   ;   $07: end column (exclusive), must be start + 9
                   ; 
                   • Clear variables

0c00: a9 00        DrawPlayerCrash lda     #$00
0c02: 8d 2c 0c                     sta     :_Load+1          ;page-aligned
0c05: a5 f8                        lda     player_crash_state
0c07: ea                           nop
0c08: 4a                           lsr     A                 ;divide by 2 so we show each frame twice
0c09: 18                           clc
0c0a: 69 70                        adc     #$70              ;$7000, one page per bitmap
0c0c: 8d 2d 0c                     sta     :_Load+2
0c0f: a6 04                        ldx     start_row
0c11: e0 c0        :RowLoop        cpx     #192              ;off top of screen?
0c13: b0 2e                        bcs     :SkipRow          ;yes, skip
0c15: e0 08                        cpx     #8
0c17: 90 2a                        bcc     :SkipRow
0c19: bd 00 08                     lda     hires_addr_hi,x
0c1c: 8d 30 0c                     sta     :_Store+2
0c1f: bd c0 08                     lda     hires_addr_lo,x
0c22: 8d 2f 0c                     sta     :_Store+1
0c25: a4 06                        ldy     start_col
0c27: c0 28        :ColLoop        cpy     #40               ;off left/right edge?
0c29: b0 06                        bcs     :NextCol          ;yes, skip draw
0c2b: ad fc 78     :_Load          lda     player_crash_0+$8fc ;copy data
0c2e: 99 50 38     :_Store         sta     HIRES_PAGE1+$1850,y
0c31: c8           :NextCol        iny
0c32: ee 2c 0c                     inc     :_Load+1
0c35: c4 07                        cpy     end_col           ;done with row?
0c37: d0 ee                        bne     :ColLoop          ;not yet, loop
0c39: e8           :NextRow        inx                       ;move down two rows
0c3a: e8                           inx
0c3b: e4 05                        cpx     end_row           ;done with bitmap?
0c3d: d0 d2                        bne     :RowLoop          ;not yet, loop
0c3f: 60                           rts

0c40: ea ea ea                     .junk   3

0c43: ad 2c 0c     :SkipRow        lda     :_Load+1          ;get bitmap load address
0c46: 18                           clc
0c47: 69 09                        adc     #$09              ;assume bitmap is 9 bytes wide
0c49: 8d 2c 0c                     sta     :_Load+1
0c4c: 4c 39 0c                     jmp     :NextRow

0c4f: 00                           .junk   1

                   ; 
                   ; Updates the state of the player's plane as it crashes.
                   ; 
                   UpdatePlayerCrash
0c50: a5 f8                        lda     player_crash_state ;check state
0c52: d0 01                        bne     :Crashing         ;still crashing, branch
0c54: 60                           rts                       ;done crashing, return

0c55: c9 12        :Crashing       cmp     #18               ;have we hit the ground yet?
0c57: b0 1b                        bcs     :Crashed          ;yes, handle that
                   ; Draw the crashing plane.
0c59: a5 f9                        lda     plyr_crash_row    ;set up bitmap renderer
0c5b: 85 04                        sta     start_row
0c5d: 18                           clc
0c5e: 69 38                        adc     #56               ;56 rows high
0c60: 85 05                        sta     end_row
0c62: a5 fa                        lda     plyr_crash_col
0c64: 85 06                        sta     start_col
0c66: 18                           clc
0c67: 69 09                        adc     #9                ;9 bytes wide
0c69: 85 07                        sta     end_col
0c6b: 20 00 0c                     jsr     DrawPlayerCrash   ;draw it
0c6e: e6 f8                        inc     player_crash_state ;advance to next state
0c70: 4c e8 0c                     jmp     UpdateCrashPosn   ;shift plane's position

0c73: 08                           .junk   1

                   ; We hit the ground.  Treat the crash like a bomb impact.
0c74: a5 f0        :Crashed        lda     bomb_state        ;preserve current bomb parameters, in case
0c76: 48                           pha                       ; we dropped one right as we got hit
0c77: a5 f1                        lda     bomb_vert_posn
0c79: 48                           pha
0c7a: a5 f2                        lda     bomb_horiz_posn
0c7c: 48                           pha
0c7d: a5 f9                        lda     plyr_crash_row    ;replace with crashing plane position
0c7f: 18                           clc
0c80: 69 08                        adc     #8                ;toward center of plane
0c82: 85 f1                        sta     bomb_vert_posn
0c84: a5 fa                        lda     plyr_crash_col
0c86: 18                           clc
0c87: 69 04                        adc     #4                ;toward center of plane
0c89: 85 f2                        sta     bomb_horiz_posn
0c8b: 20 8f 0b                     jsr     HandleBombImpact  ;create bomb explosion record
0c8e: 68                           pla                       ;restore bomb parameters
0c8f: 85 f2                        sta     bomb_horiz_posn
0c91: 68                           pla
0c92: 85 f1                        sta     bomb_vert_posn
0c94: 68                           pla
0c95: 85 f0                        sta     bomb_state
0c97: a9 00                        lda     #$00
0c99: 85 f8                        sta     player_crash_state ;done with crash
                   ; Erase plane crash from even rows.  The bomb explosion is on odd rows.
0c9b: a5 f9                        lda     plyr_crash_row    ;get crash area top
0c9d: 85 04                        sta     start_row
0c9f: 18                           clc
0ca0: 69 38                        adc     #56               ;erase 56 rows (28 * 2)
0ca2: 85 05                        sta     end_row
0ca4: a5 fa                        lda     plyr_crash_col
0ca6: 85 06                        sta     start_col
0ca8: 18                           clc
0ca9: 69 09                        adc     #9                ;9 bytes wide
0cab: 85 07                        sta     end_col
0cad: a6 04                        ldx     start_row
0caf: e0 c0        :RowLoop        cpx     #192              ;off bottom of screen?
0cb1: b0 20                        bcs     :NextRow          ;yes, skip
0cb3: e0 08                        cpx     #8                ;off top of screen?
0cb5: 90 1c                        bcc     :NextRow          ;yes, skip
0cb7: bd 00 08                     lda     hires_addr_hi,x   ;set up hi-res address
0cba: 8d cd 0c                     sta     :_Store+2
0cbd: bd c0 08                     lda     hires_addr_lo,x
0cc0: 8d cc 0c                     sta     :_Store+1
0cc3: a4 06                        ldy     start_col
0cc5: c0 28        :ColLoop        cpy     #40               ;off left/right edge?
0cc7: b0 05                        bcs     :NextCol          ;yes, skip
0cc9: a9 00                        lda     #$00              ;black pixels
0ccb: 99 d0 20     :_Store         sta     HIRES_PAGE1+208,y ;erase
0cce: c8           :NextCol        iny
0ccf: c4 07                        cpy     end_col           ;done with row?
0cd1: d0 f2                        bne     :ColLoop          ;no, branch
0cd3: e8           :NextRow        inx
0cd4: e8                           inx
0cd5: e4 05                        cpx     end_row           ;done erasing?
0cd7: d0 d6                        bne     :RowLoop          ;no, branch
0cd9: 60                           rts

0cda: 00 00 00 00+                 .junk   14

                   ; 
                   ; Updates the position of the player's plane as it crashes to the ground,
                   ; banking left or right and sliding toward the bottom of the screen.
                   ; 
0ce8: a5 fb        UpdateCrashPosn lda     plyr_crash_flags  ;get flags
0cea: 48                           pha
0ceb: 4a                           lsr     A                 ;check "on right" flag
0cec: b0 05                        bcs     :CrashLeft        ;it's set, move plane to left
0cee: e6 fa                        inc     plyr_crash_col    ;move to right
0cf0: 4c f5 0c                     jmp     :Cont

0cf3: c6 fa        :CrashLeft      dec     plyr_crash_col    ;move to left
0cf5: 68           :Cont           pla                       ;get flags
0cf6: 4a                           lsr     A
0cf7: 4a                           lsr     A                 ;check "down low" flag
0cf8: b0 04                        bcs     :NoIncRow         ;set, don't alter vertical position
0cfa: e6 f9                        inc     plyr_crash_row    ;move down two rows
0cfc: e6 f9                        inc     plyr_crash_row
0cfe: 60           :NoIncRow       rts

0cff: 00                           .junk   1
                   ; 
                   ; Pointers to frames in flak burst sequence.  There are 24 frames, with each
                   ; image repeated 3x.
0d00: 00           flak_addr_lo    .dd1    <flak_burst_0
0d01: 00                           .dd1    <flak_burst_0
0d02: 00                           .dd1    <flak_burst_0
0d03: a1                           .dd1    <flak_burst_1
0d04: a1                           .dd1    <flak_burst_1
0d05: a1                           .dd1    <flak_burst_1
0d06: 42                           .dd1    <flak_burst_2
0d07: 42                           .dd1    <flak_burst_2
0d08: 42                           .dd1    <flak_burst_2
0d09: e3                           .dd1    <flak_burst_3
0d0a: e3                           .dd1    <flak_burst_3
0d0b: e3                           .dd1    <flak_burst_3
0d0c: 84                           .dd1    <flak_burst_4
0d0d: 84                           .dd1    <flak_burst_4
0d0e: 84                           .dd1    <flak_burst_4
0d0f: 25                           .dd1    <flak_burst_5
0d10: 25                           .dd1    <flak_burst_5
0d11: 25                           .dd1    <flak_burst_5
0d12: c6                           .dd1    <flak_burst_6
0d13: c6                           .dd1    <flak_burst_6
0d14: c6                           .dd1    <flak_burst_6
0d15: 67                           .dd1    <flak_burst_7
0d16: 67                           .dd1    <flak_burst_7
0d17: 67                           .dd1    <flak_burst_7
0d18: 79           flak_addr_hi    .dd1    >flak_burst_0
0d19: 79                           .dd1    >flak_burst_0
0d1a: 79                           .dd1    >flak_burst_0
0d1b: 79                           .dd1    >flak_burst_1
0d1c: 79                           .dd1    >flak_burst_1
0d1d: 79                           .dd1    >flak_burst_1
0d1e: 7a                           .dd1    >flak_burst_2
0d1f: 7a                           .dd1    >flak_burst_2
0d20: 7a                           .dd1    >flak_burst_2
0d21: 7a                           .dd1    >flak_burst_3
0d22: 7a                           .dd1    >flak_burst_3
0d23: 7a                           .dd1    >flak_burst_3
0d24: 7b                           .dd1    >flak_burst_4
0d25: 7b                           .dd1    >flak_burst_4
0d26: 7b                           .dd1    >flak_burst_4
0d27: 7c                           .dd1    >flak_burst_5
0d28: 7c                           .dd1    >flak_burst_5
0d29: 7c                           .dd1    >flak_burst_5
0d2a: 7c                           .dd1    >flak_burst_6
0d2b: 7c                           .dd1    >flak_burst_6
0d2c: 7c                           .dd1    >flak_burst_6
0d2d: 7d                           .dd1    >flak_burst_7
0d2e: 7d                           .dd1    >flak_burst_7
0d2f: 7d                           .dd1    >flak_burst_7

                   ; 
                   ; Updates and draws a deadly flak burst.
                   ; 
                   ; Drawn on even lines so it doesn't mess up the terrain.
                   ; 
0d30: a5 d0        UpdateFlakBurst lda     flak_burst_state  ;burst active?
0d32: d0 01                        bne     :DrawFlak         ;yes, branch
0d34: 60                           rts

0d35: c9 18        :DrawFlak       cmp     #24               ;did we reach the end of the sequence?
0d37: 90 07                        bcc     :InSeq            ;not yet, branch
0d39: a5 d0                        lda     flak_burst_state
0d3b: 38                           sec
0d3c: e9 06                        sbc     #$06              ;back up to start of (6,6,6,7,7,7) sequence
0d3e: 85 d0                        sta     flak_burst_state
0d40: a6 d0        :InSeq          ldx     flak_burst_state  ;get animation frame
0d42: ca                           dex
0d43: bd 00 0d                     lda     flak_addr_lo,x    ;get bitmap address
0d46: 8d 9d 0d                     sta     _FlakGfxLoad+1
0d49: bd 18 0d                     lda     flak_addr_hi,x
0d4c: 8d 9e 0d                     sta     _FlakGfxLoad+2
0d4f: a5 d1                        lda     flak_burst_row    ;configure bitmap renderer
0d51: 85 04                        sta     start_row
0d53: 18                           clc
0d54: 69 2e                        adc     #46               ;46 lines high (23 doubled)
0d56: 85 05                        sta     end_row
0d58: a5 d2                        lda     flak_burst_col
0d5a: 85 06                        sta     start_col
0d5c: 18                           clc
0d5d: 69 07                        adc     #7                ;7 bytes across
0d5f: 85 07                        sta     end_col
0d61: 20 80 0d                     jsr     DrawFlakBurst     ;draw it
0d64: a5 d1                        lda     flak_burst_row    ;get top row
0d66: 18                           clc
0d67: 69 08                        adc     #8                ;move it 8 lines down the screen
0d69: 85 d1                        sta     flak_burst_row
0d6b: e6 d0                        inc     flak_burst_state  ;advance state
0d6d: c9 c0                        cmp     #192              ;reached bottom of screen?
0d6f: b0 01                        bcs     :DeactivateBurst  ;yes, deactivate it
0d71: 60                           rts

                   :DeactivateBurst
0d72: a9 00                        lda     #$00
0d74: 85 d0                        sta     flak_burst_state  ;mark as inactive
0d76: 60                           rts

0d77: 00 00 00 00+                 .junk   9

                   ; 
                   ; Draws a frame of the flak burst animation.
                   ; 
                   ; On entry:
                   ;   $04: start row
                   ;   $05: end row (exclusive)
                   ;   $06: start column
                   ;   $07: end column (exclusive)
                   ; 
0d80: a6 04        DrawFlakBurst   ldx     start_row         ;get top row
0d82: e0 c0        :RowLoop        cpx     #192              ;off bottom of screen?
0d84: b0 2f                        bcs     :ClickReturn      ;yes, bail
0d86: e0 08                        cpx     #8                ;off top of screen?
0d88: 90 2b                        bcc     :ClickReturn      ;yes, bail
0d8a: bd 00 08                     lda     hires_addr_hi,x   ;set up hi-res address
0d8d: 8d a1 0d                     sta     :_Store+2
0d90: bd c0 08                     lda     hires_addr_lo,x
0d93: 8d a0 0d                     sta     :_Store+1
0d96: a4 06                        ldy     start_col         ;get start column
0d98: c0 28        :ColLoop        cpy     #40               ;off left/right edge?
0d9a: b0 06                        bcs     :SkipDraw         ;yes, branch
0d9c: ad 41 7c     _FlakGfxLoad    lda     flak_burst_5+28
0d9f: 99 d0 3b     :_Store         sta     HIRES_PAGE1+$1bd0,y
0da2: ee 9d 0d     :SkipDraw       inc     _FlakGfxLoad+1    ;advance bitmap pointer
0da5: d0 03                        bne     :NoInc
0da7: ee 9e 0d                     inc     _FlakGfxLoad+2
0daa: c8           :NoInc          iny
0dab: c4 07                        cpy     end_col           ;done with row?
0dad: d0 e9                        bne     :ColLoop          ;no, loop
0daf: e8                           inx                       ;advance two rows on hi-res screen
0db0: e8                           inx
0db1: e4 05                        cpx     end_row           ;done with bitmap?
0db3: d0 cd                        bne     :RowLoop          ;no, loop
0db5: 8d 30 c0     :ClickReturn    sta     SPKR              ;click
0db8: 60                           rts

0db9: 00 00 00 00+                 .junk   7

                   ; 
                   ; Draws player bomb sight bitmap.  Image must reside on a single page.
                   ; 
                   ; On entry:
                   ;   $04: start row
                   ;   $05: end row (exclusive)
                   ;   $06: start column
                   ;   $07: end column (exclusive)
                   ; 
0dc0: a6 04        DrawPlyrSight1  ldx     start_row         ;start at the top
0dc2: e0 c0        :RowLoop        cpx     #192              ;off bottom of screen?
0dc4: b0 24                        bcs     :NextRow          ;yes, branch
0dc6: e0 08                        cpx     #8                ;off top of screen?
0dc8: 90 20                        bcc     :NextRow          ;yes, branch
0dca: bd 00 08                     lda     hires_addr_hi,x   ;get hi-res address
0dcd: 8d e1 0d                     sta     :Store+2
0dd0: bd c0 08                     lda     hires_addr_lo,x
0dd3: 8d e0 0d                     sta     :Store+1
0dd6: a4 06                        ldy     start_col         ;get left column
0dd8: c0 28        :ColLoop        cpy     #40               ;off left/right edges?
0dda: b0 06                        bcs     :SkipDraw         ;yes, branch
0ddc: ad 85 6e     _LoadSightGfx   lda     bomb_sight_s5+5   ;copy a byte
0ddf: 99 a8 2a     :Store          sta     HIRES_PAGE1+$aa8,y
0de2: c8           :SkipDraw       iny
0de3: ee dd 0d                     inc     _LoadSightGfx+1   ;advance bitmap pointer
0de6: c4 07                        cpy     end_col           ;done with row?
0de8: d0 ee                        bne     :ColLoop          ;no, loop
0dea: e8           :NextRow        inx                       ;move down two rows
0deb: e8                           inx
0dec: e4 05                        cpx     end_row           ;done with bitmap?
0dee: d0 d2                        bne     :RowLoop          ;no, loop
0df0: 60                           rts

0df1: ad dd 0d 18+                 .junk   31

                   ; 
                   ; Draws the player's bomb sight during the bombing phase.
                   ; 
                   ; As with the plane, we don't explicitly erase the entire bitmap.  Instead, we
                   ; draw the bitmap and clean up edges as needed.  The top and bottom lines in the
                   ; bitmap are black, so those are self-erasing, but the left/right edges may need
                   ; to be trimmed.
                   ; 
                   • Clear variables
                   ]hptr           .var    $00    {addr/2}

0e10: a5 0c        DrawPlyrSight   lda     player_row        ;get row where plane would be
0e12: 18                           clc
0e13: 69 0c                        adc     #12               ;start 12 rows down
0e15: 85 04                        sta     start_row
0e17: 18                           clc
0e18: 69 26                        adc     #38               ;38 rows high
0e1a: 85 05                        sta     end_row
0e1c: a5 0d                        lda     player_col        ;get column where plane would be
0e1e: 18                           clc
0e1f: 69 00                        adc     #$00              ;don't modify it (?)
0e21: 85 06                        sta     start_col         ;set left column
0e23: 18                           clc
0e24: 69 07                        adc     #7                ;7 bytes wide
0e26: 85 07                        sta     end_col
0e28: 20 78 0f                     jsr     GetSightAddr      ;get addr of shifted image
0e2b: 20 c0 0d                     jsr     DrawPlyrSight1    ;draw it
0e2e: 4c 37 0e                     jmp     :EraseLeft        ;erase left/right sides as needed

0e31: 0e 8d de 0d+                 .junk   6

0e37: ea           :EraseLeft      nop
0e38: a5 0e                        lda     player_col_shift  ;check pixel position
0e3a: d0 2f                        bne     :EraseRight       ;nonzero, left edge is fine; branch
0e3c: a5 0c                        lda     player_row
0e3e: 18                           clc
0e3f: 69 18                        adc     #24               ;start 24 rows down (leftward-extending part)
0e41: aa                           tax                       ;use as start
0e42: 18                           clc
0e43: 69 0e                        adc     #14               ;erase 14 lines
0e45: 85 04                        sta     start_row         ;put the end row in start_row
0e47: a4 0d                        ldy     player_col
0e49: 88                           dey
0e4a: e0 c0        :RowLoopL       cpx     #192              ;off bottom of screen? (not possible)
0e4c: b0 16                        bcs     :NextRowL         ;yes, branch
0e4e: e0 08                        cpx     #8                ;off top of screen? (also not possible)
0e50: 90 12                        bcc     :NextRowL         ;yes, branch
0e52: c0 28                        cpy     #40               ;off left/right edge? (nope!)
0e54: b0 14                        bcs     :Return           ;yes, branch
0e56: bd 00 08                     lda     hires_addr_hi,x   ;set up hi-res address
0e59: 85 01                        sta     ]hptr+1
0e5b: bd c0 08                     lda     hires_addr_lo,x
0e5e: 85 00                        sta     ]hptr
0e60: a9 00                        lda     #$00              ;black pixels
0e62: 91 00                        sta     (]hptr),y         ;erase one byte
0e64: e8           :NextRowL       inx
0e65: e8                           inx
0e66: e4 04                        cpx     start_row         ;have we reached the end row?
0e68: d0 e0                        bne     :RowLoopL         ;no, loop
0e6a: 60           :Return         rts

0e6b: c9 05        :EraseRight     cmp     #$05              ;pixel position at right edge?
0e6d: 90 fb                        bcc     :Return           ;no, right edge is fine; branch
0e6f: a5 0c                        lda     player_row
0e71: 18                           clc
0e72: 69 18                        adc     #24               ;(same as above)
0e74: aa                           tax                       ; ...
0e75: 18                           clc
0e76: 69 0e                        adc     #14
0e78: 85 04                        sta     start_row
0e7a: a5 0d                        lda     player_col
0e7c: 18                           clc
0e7d: 69 07                        adc     #7                ;right edge, 7 bytes over
0e7f: a8                           tay
0e80: c0 28                        cpy     #40
0e82: b0 e6                        bcs     :Return
0e84: e0 c0        :RowLoopR       cpx     #192
0e86: b0 12                        bcs     :NextRowR
0e88: e0 08                        cpx     #$08
0e8a: 90 0e                        bcc     :NextRowR
0e8c: bd 00 08                     lda     hires_addr_hi,x
0e8f: 85 01                        sta     ]hptr+1
0e91: bd c0 08                     lda     hires_addr_lo,x
0e94: 85 00                        sta     ]hptr
0e96: a9 00                        lda     #$00
0e98: 91 00                        sta     (]hptr),y
0e9a: e8           :NextRowR       inx
0e9b: e8                           inx
0e9c: e4 04                        cpx     start_row
0e9e: d0 e4                        bne     :RowLoopR
0ea0: 60                           rts

0ea1: 00 00 00 00+                 .junk   10

                   ; 
                   ; Erases the player's plane while bombing.  Only used when switching from the
                   ; plane to the bomb sight.
                   ; 
                   ErasePlayerPlane
0eab: a5 0c                        lda     player_row        ;set up bitmap renderer
0ead: 85 04                        sta     start_row
0eaf: 18                           clc
0eb0: 69 38                        adc     #56               ;56 lines high
0eb2: 85 05                        sta     end_row
0eb4: a5 0d                        lda     player_col
0eb6: 85 06                        sta     start_col
0eb8: 18                           clc
0eb9: 69 0a                        adc     #10               ;10 bytes wide
0ebb: 85 07                        sta     end_col
0ebd: c6 06                        dec     start_col
0ebf: 8d 30 c0                     sta     SPKR              ;click
0ec2: a6 04                        ldx     start_row
0ec4: e0 c0        :RowLoop        cpx     #192              ;off bottom of screen?
0ec6: b0 1d                        bcs     :NextRow          ;yes, branch
0ec8: e0 08                        cpx     #8                ;off top of screen?
0eca: 90 19                        bcc     :NextRow          ;yes, branch
0ecc: bd 00 08                     lda     hires_addr_hi,x   ;set up hi-res address
0ecf: 85 01                        sta     ]hptr+1
0ed1: bd c0 08                     lda     hires_addr_lo,x
0ed4: 85 00                        sta     ]hptr
0ed6: a4 06                        ldy     start_col
0ed8: c0 28        :ColLoop        cpy     #40
0eda: b0 04                        bcs     :SkipErase
0edc: a9 00                        lda     #$00              ;black pixels
0ede: 91 00                        sta     (]hptr),y
0ee0: c8           :SkipErase      iny
0ee1: c4 07                        cpy     end_col           ;done with row?
0ee3: d0 f3                        bne     :ColLoop          ;no, branch
0ee5: e8           :NextRow        inx
0ee6: e8                           inx
0ee7: e4 05                        cpx     end_row           ;done?
0ee9: d0 d9                        bne     :RowLoop          ;no, branch
0eeb: 60                           rts

0eec: 00 00 00 00                  .junk   4

                   ; 
                   ; Erases the player's bomb sight.  Only used when switching from the bomb sight
                   ; to the plane.
                   ; 
                   ErasePlayerSight
0ef0: a5 0c                        lda     player_row
0ef2: 18                           clc
0ef3: 69 0a                        adc     #10               ;start 10 lines down (sight is smaller than
0ef5: 85 04                        sta     start_row         ; player plane)
0ef7: 18                           clc
0ef8: 69 26                        adc     #38               ;38 lines high
0efa: 85 05                        sta     end_row
0efc: a5 0d                        lda     player_col
0efe: 85 06                        sta     start_col
0f00: 18                           clc
0f01: 69 09                        adc     #9                ;9 bytes wide
0f03: 85 07                        sta     end_col
0f05: a6 04                        ldx     start_row
0f07: e0 c0        :RowLoop        cpx     #192              ;off bottom of screen?
0f09: b0 1d                        bcs     :NextRow          ;yes, branch
0f0b: e0 08                        cpx     #8                ;off top of screen?
0f0d: 90 19                        bcc     :NextRow          ;yes, branch
0f0f: bd 00 08                     lda     hires_addr_hi,x   ;set up hi-res address
0f12: 85 01                        sta     ]hptr+1
0f14: bd c0 08                     lda     hires_addr_lo,x
0f17: 85 00                        sta     ]hptr
0f19: a4 06                        ldy     start_col
0f1b: c0 28        :ColLoop        cpy     #40               ;off left/right edge?
0f1d: b0 04                        bcs     :SkipErase        ;yes, don't erase
0f1f: a9 00                        lda     #$00              ;black pixels
0f21: 91 00                        sta     (]hptr),y
0f23: c8           :SkipErase      iny
0f24: c4 07                        cpy     end_col           ;done with row?
0f26: d0 f3                        bne     :ColLoop          ;no, branch
0f28: e8           :NextRow        inx
0f29: e8                           inx
0f2a: e4 05                        cpx     end_row           ;done?
0f2c: d0 d9                        bne     :RowLoop          ;no, branch
0f2e: 60                           rts

0f2f: 00                           .junk   1

                   ; 
                   ; Checks to see if the player hit the spacebar to flip between plane and bomb
                   ; sight.
                   ; 
0f30: ad 00 c0     CheckKbdSpc     lda     KBD               ;check keyboard
0f33: c9 a0                        cmp     #“ ”              ;spacebar hit?
0f35: f0 01                        beq     :IsSpc            ;yes, continue
0f37: 60                           rts                       ;no, return

0f38: 8d 10 c0     :IsSpc          sta     KBDSTRB           ;clear key
0f3b: a9 01                        lda     #$01
0f3d: 38                           sec
0f3e: e5 fd                        sbc     player_as_plane
0f40: 85 fd                        sta     player_as_plane   ;value = 1 - value (toggles between 0/1)
0f42: d0 10                        bne     :DrawPlane        ;now 1, configure plane
                   ; Toggle to bomb sight.
0f44: 20 ab 0e                     jsr     ErasePlayerPlane  ;erase plane
0f47: a9 10                        lda     #<DrawPlyrSight   ;next time, draw sight
0f49: 8d a6 13                     sta     _JmpDrawPlayer+1
0f4c: a9 0e                        lda     #>DrawPlyrSight
0f4e: 8d a7 13                     sta     _JmpDrawPlayer+2
0f51: 60                           rts

0f52: ea ea                        .junk   2

0f54: a9 c0        :DrawPlane      lda     #<DrawPlyrPlane   ;next time, draw plane
0f56: 8d a6 13                     sta     _JmpDrawPlayer+1
0f59: a9 12                        lda     #>DrawPlyrPlane
0f5b: 8d a7 13                     sta     _JmpDrawPlayer+2
0f5e: 20 f0 0e                     jsr     ErasePlayerSight  ;erase sight
0f61: 60                           rts

0f62: 00 00 00 00+                 .fill   6,$00
                   ; 
                   ; Addresses of shifted bomb sight bitmaps.
0f68: 00           sight_addr_lo   .dd1    <bomb_sight_s0
0f69: 80                           .dd1    <bomb_sight_s1
0f6a: 00                           .dd1    <bomb_sight_s2
0f6b: 80                           .dd1    <bomb_sight_s3
0f6c: 00                           .dd1    <bomb_sight_s4
0f6d: 80                           .dd1    <bomb_sight_s5
0f6e: 00                           .dd1    <bomb_sight_s6
0f6f: 00                           .dd1    $00
0f70: 6c           sight_addr_hi   .dd1    >bomb_sight_s0
0f71: 6c                           .dd1    >bomb_sight_s1
0f72: 6d                           .dd1    >bomb_sight_s2
0f73: 6d                           .dd1    >bomb_sight_s3
0f74: 6e                           .dd1    >bomb_sight_s4
0f75: 6e                           .dd1    >bomb_sight_s5
0f76: 6f                           .dd1    >bomb_sight_s6
0f77: 00                           .dd1    $00

                   ; 
                   ; Returns an entry in the bomb sight table.
                   ; 
0f78: a6 0e        GetSightAddr    ldx     player_col_shift  ;get pixel position
0f7a: bd 68 0f                     lda     sight_addr_lo,x   ;get bitmap address
0f7d: 8d dd 0d                     sta     _LoadSightGfx+1   ;configure renderer
0f80: bd 70 0f                     lda     sight_addr_hi,x
0f83: 8d de 0d                     sta     _LoadSightGfx+2
0f86: 60                           rts

0f87: 00 00 00 00+                 .junk   9

                   ; 
                   ; Draw a flak pop graphic with exclusive-OR.  Call a second time to erase.
                   ; 
                   ; This is used for the quick harmless flashes (which may presage the damaging
                   ; burst). This is drawn on odd (terrain) lines so it doesn't clash with the
                   ; plane.  It's not on-screen for very long, so the color distortions it causes
                   ; don't seem weird.
                   ; 
                   ; The bitmap is a full 6x36, so when drawing it on alternating lines we must
                   ; also skip those lines in the source bitmap.  The bitmap must reside on a
                   ; single page.
                   ; 
                   ; On entry:
                   ;   $04: start row
                   ;   $05: end row (exclusive)
                   ;   $06: start column
                   ;   $07: end column (exclusive); must be start + 6
                   ; 
                   • Clear variables
                   ]hptr           .var    $00    {addr/2}

0f90: a9 00        XdrawFlakPop    lda     #$00              ;zero the low byte of the address to reset to the
0f92: 8d a4 0f                     sta     :_Load+1          ; start of the bitmap
0f95: a6 04                        ldx     start_row
0f97: bd 00 08     :RowLoop        lda     hires_addr_hi,x   ;get hi-res address
0f9a: 85 01                        sta     ]hptr+1
0f9c: bd c0 08                     lda     hires_addr_lo,x
0f9f: 85 00                        sta     ]hptr
0fa1: a4 06                        ldy     start_col
0fa3: ad d8 54     :_Load          lda     flak_pop+216      ;loads from $5400-54d7 (6x36)
0fa6: 51 00                        eor     (]hptr),y         ;exclusive-OR with hi-res screen
0fa8: 91 00                        sta     (]hptr),y
0faa: ee a4 0f                     inc     :_Load+1          ;advance to next byte in bitmap
0fad: c8                           iny
0fae: c4 07                        cpy     end_col           ;done with row?
0fb0: 90 f1                        bcc     :_Load            ;no, loop
0fb2: e8                           inx                       ;move down two lines
0fb3: e8                           inx
0fb4: ad a4 0f                     lda     :_Load+1
0fb7: 18                           clc
0fb8: 69 06                        adc     #$06              ;add 6 to skip a line of the source bitmap
0fba: 8d a4 0f                     sta     :_Load+1
0fbd: e4 05                        cpx     end_row           ;done with bitmap?
0fbf: 90 d6                        bcc     :RowLoop          ;not yet, loop
0fc1: a2 20                        ldx     #$20              ;fall into sound routine
                   ; 
                   ; Plays a sound.
                   ; 
                   ; On entry:
                   ;   X-reg: determines frequency and duration
                   ; 
0fc3: 8a           PlaySimpleSound txa                       ;(TXY)
0fc4: a8                           tay
0fc5: 88           :WaitLoop       dey
0fc6: ea                           nop
0fc7: d0 fc                        bne     :WaitLoop
0fc9: 8d 30 c0                     sta     SPKR
0fcc: ca                           dex                       ;reduces delay and counts down duration
0fcd: d0 f4                        bne     PlaySimpleSound
0fcf: 60                           rts

                   ; 
                   ; Plays sound when a flak burst fires.
                   ; 
0fd0: a2 30        PlayBurstSound  ldx     #$30
0fd2: 20 c3 0f                     jsr     PlaySimpleSound
0fd5: a2 20                        ldx     #$20
0fd7: 4c c3 0f                     jmp     PlaySimpleSound

0fda: 00 00 00 00+                 .junk   22

                   ; 
                   ; Used for bullets.  These values are ORed into the blue background.
                   vis
0ff0: 01 02 04 08+ single_pixel    .bulk   $01,$02,$04,$08,$10,$20,$40,$00

                   vis
0ff8: 03 06 0c 18+ double_pixel    .bulk   $03,$06,$0c,$18,$30,$60,$60,$00

                   ; 
                   ; Updates progress on a deadly flak burst.
                   ; 
                   ; The states are:
                   ;   0 - no burst pending
                   ;   1 - draw flak "pop"
                   ;   2 - erase flak "pop"
                   ;   3 - pause a few frames, then fire the burst
                   ; 
1000: a5 c1        UpdateBurstSeq  lda     burst_pending_state ;get state
1002: d0 01                        bne     :Pending          ;branch if burst is pending
1004: 60                           rts

1005: c9 02        :Pending        cmp     #$02              ;in "draw" state?
1007: b0 17                        bcs     :NotDraw          ;no, branch
1009: a5 c4        :DrawPop        lda     flak_burst_pop_row
100b: 85 04                        sta     start_row
100d: 18                           clc
100e: 69 24                        adc     #36               ;36 lines high (18, doubled)
1010: 85 05                        sta     end_row
1012: a5 c5                        lda     flak_burst_pop_col
1014: 85 06                        sta     start_col
1016: 18                           clc
1017: 69 06                        adc     #6                ;6 bytes across
1019: 85 07                        sta     end_col
101b: e6 c1                        inc     burst_pending_state ;incr from 1 to 2
101d: 4c 90 0f                     jmp     XdrawFlakPop

1020: c9 03        :NotDraw        cmp     #$03              ;in "erase" state?
1022: b0 10                        bcs     :NotErase         ;no, branch
1024: a5 c4                        lda     flak_burst_pop_row
1026: 18                           clc
1027: 69 04                        adc     #$04              ;move down 4 lines to match new position
1029: 85 c4                        sta     flak_burst_pop_row
102b: 20 09 10                     jsr     :DrawPop
102e: a9 06                        lda     #$06
1030: 85 c3                        sta     burst_delay_ctr   ;init counter to 6 frames
1032: 60                           rts

1033: ea                           .junk   1

1034: c6 c3        :NotErase       dec     burst_delay_ctr   ;time to fire the burst?
1036: f0 01                        beq     :FireBurst        ;yes, branch
1038: 60                           rts

1039: a9 00        :FireBurst      lda     #$00
103b: 85 c1                        sta     burst_pending_state ;reset burst state
103d: a5 c4                        lda     flak_burst_pop_row ;get the row where we showed the burst
103f: 18                           clc
1040: 69 0f                        adc     #15               ;move it down 15 rows (even row number)
1042: 85 d1                        sta     flak_burst_row
1044: a5 c5                        lda     flak_burst_pop_col ;copy the column
1046: 85 d2                        sta     flak_burst_col
1048: a9 01                        lda     #$01
104a: 85 d0                        sta     flak_burst_state  ;init burst animation state
104c: 4c d0 0f                     jmp     PlayBurstSound

104f: 00                           .junk   1

                   ; 
                   ; Checks to see if we're due for a flak burst.  If so, we need to fire a flak
                   ; pop as a warning.
                   ; 
                   ; Also checks to see if it's time to show an air-attack message.  At difficulty
                   ; level 1, the flak checks are happening so infrequently that we don't actually
                   ; get a chance to display the message before the transition.  On higher
                   ; difficulties things line up in a way that gets us different warning durations
                   ; (12/10/6/12).
                   ; 
                   ; Note hostile flak is disabled during an air warning.
                   ; 
1050: c6 c0        CheckFlakBurst1 dec     flak_burst_ctr    ;time for a flak burst?
1052: f0 01                        beq     :FireFlakBurst    ;yes, branch
1054: 60                           rts

1055: a5 0c        :FireFlakBurst  lda     player_row        ;get player row
1057: 38                           sec
1058: e9 21                        sbc     #33               ;move up 33 lines (now odd)
105a: 85 c4                        sta     flak_burst_pop_row
105c: ad 84 24                     lda     HIRES_PAGE1+$484  ;read contents of hi-res line 9, column 4
105f: 05 60                        ora     terrain_src_ptr   ;mix with pointer ("randomization")
1061: 29 1e                        and     #$1e              ;limit to 0-30, even values only
1063: 85 c5                        sta     flak_burst_pop_col ;save as column
1065: a9 01                        lda     #$01
1067: 85 c1                        sta     burst_pending_state ;set state to first frame
1069: a9 50        _LevelFlakBurst lda     #$50              ;modified by difficulty ($50 - $10)
106b: 85 c0                        sta     flak_burst_ctr    ;reset time-between-bursts counter
106d: a5 c4                        lda     flak_burst_pop_row ;check row
106f: c9 c0                        cmp     #192              ;off bottom?
1071: b0 04                        bcs     :TrimRow          ;yes, clamp it
1073: c9 08                        cmp     #$08              ;off top?
1075: b0 04                        bcs     :CheckAam         ;no, branch
1077: a9 09        :TrimRow        lda     #$09
1079: 85 c4                        sta     flak_burst_pop_row ;set to top of screen
107b: 4c e0 10     :CheckAam       jmp     ShowAamMaybe      ;show air-attack message, maybe

107e: 00 00                        .junk   2

1080: a5 c1        CheckFlakBurst  lda     burst_pending_state ;burst already in progress?
1082: f0 cc                        beq     CheckFlakBurst1   ;not yet, see if we want to create one
1084: 4c 00 10                     jmp     UpdateBurstSeq    ;yes, advance the burst state

1087: 00 ff ff 00+                 .junk   9

                   ; 
                   ; Checks to see if the player collided with a flak burst.
                   ; 
                   • Clear variables
                   ]row            .var    $00    {addr/1}
                   ]row_sub_48     .var    $01    {addr/1}
                   ]col_sub_2      .var    $03    {addr/1}
                   ]col_plus_8     .var    $04    {addr/1}

                   CheckPlayerFlakked
1090: a5 d0                        lda     flak_burst_state  ;flak burst active?
1092: d0 01                        bne     :GotFlak
1094: 60           :Return         rts

                   ; Define the hit box as the player's plane expanded 2 bytes left/right.  Flak
                   ; bursts happen near the player's row and move down quickly, so we don't bother
                   ; extending top/bottom.
1095: a5 0c        :GotFlak        lda     player_row        ;get top row
1097: 85 00                        sta     ]row
1099: 18                           clc
109a: 69 30                        adc     #48               ;48 lines high (24 doubled)
109c: 85 01                        sta     ]row_sub_48
109e: 20 70 12                     jsr     PlayerColSub2     ;sets $03 to (player_column - 2)
10a1: ea                           nop
10a2: 18                           clc
10a3: 69 08                        adc     #8                ;8 bytes across
10a5: 85 04                        sta     ]col_plus_8
10a7: a5 d1                        lda     flak_burst_row    ;see if burst center is inside player hit box
10a9: c5 00                        cmp     ]row
10ab: 90 e7                        bcc     :Return
10ad: c5 01                        cmp     ]row_sub_48
10af: b0 e3                        bcs     :Return
10b1: a5 d2                        lda     flak_burst_col
10b3: c5 03                        cmp     ]col_sub_2
10b5: 90 dd                        bcc     :Return
10b7: c5 04                        cmp     ]col_plus_8
10b9: b0 d9                        bcs     :Return
                   ; Player has been hit.
10bb: a9 01                        lda     #$01
10bd: 85 f8                        sta     player_crash_state ;init crash state
10bf: a5 0c                        lda     player_row
10c1: 85 f9                        sta     plyr_crash_row    ;copy position to crash position
10c3: a5 0d                        lda     player_col
10c5: 85 fa                        sta     plyr_crash_col
10c7: a9 30                        lda     #$30
10c9: 85 21                        sta     plyr_crash_ctr    ;crash lasts for this long
10cb: a5 f9                        lda     plyr_crash_row    ;check row
10cd: c9 70                        cmp     #112              ;>= 112? (not possible?)
10cf: 26 fb                        rol     plyr_crash_flags  ;set bit
10d1: a5 fa                        lda     plyr_crash_col    ;check column
10d3: c9 11                        cmp     #17               ;+3 would be 20, center of screen
10d5: 26 fb                        rol     plyr_crash_flags  ;set low bit if on right side of screen
10d7: 4c 20 15                     jmp     PlayerCrashLoop

10da: 00 00 ff ff+                 .junk   6

                   ; 
                   ; Draws "air attack" message if appropriate.  Also, overrides the burst column
                   ; if the player is on the right edge of the screen.
                   ; 
10e0: a5 63        ShowAamMaybe    lda     air_attack_msg_flag ;showing message?
10e2: f0 0b                        beq     :CheckCol         ;no, branch
10e4: a9 00                        lda     #$00
10e6: 85 c1                        sta     burst_pending_state ;disable dangerous flak
10e8: a9 04                        lda     #$04
10ea: 85 c0                        sta     flak_burst_ctr    ;set counter to 4 so message color toggles frequently
10ec: 4c 50 5a                     jmp     DrawAirAttackMsg  ;draw it

10ef: a5 0d        :CheckCol       lda     player_col        ;is player on right side of screen?
10f1: c9 20                        cmp     #32
10f3: b0 01                        bcs     :OnRight          ;yes, branch
10f5: 60                           rts

10f6: a9 22        :OnRight        lda     #34               ;fire flak so it will hit player
10f8: 85 c5                        sta     flak_burst_pop_col
10fa: 60                           rts

10fb: 00 ff ff 00+                 .junk   5
                   ; 
                   ; Table of plane behaviors.  Determines position and escape direction.
                   ; 
                   ; There are one or two active planes, with state stored in $70-77 and $a0-a7. 
                   ; The values are copied from the list below, although the last byte in each
                   ; entry is ignored: $77/$a7 is set to $03 by the copy functions (and possibly
                   ; reset to $02 after it counts down).
                   ; 
                   ; Code generally works off the primary ($a0) copy, swapping with state with $70
                   ; to update the secondary plane.
                   ; 
                   ; The plane created in the primary slot is hostile: it will fire at the player,
                   ; and killing it counts for points.  The plane in the secondary slot is passive:
                   ; it doesn't fire, and killing it doesn't count for anything.
                   ; 
                   ; Enemy planes approach the player over a few frames, fire their guns (if
                   ; hostile), and veer away.  While flying in and firing they "float" up and down
                   ; a bit.  The veering and floating are controlled by the table below.
                   ; 
                   ; Each animation frame is held for a few updates.  Reducing the hold count
                   ; increases the apparent speed of the planes.  At level 1, the counter is set to
                   ; 3; at higher levels, it's set to two.  (Plane updates happen every few game
                   ; frames; increasing the update frequency also makes everything faster.)
                   ; 
                   ; Values:
                   ;  +00: animation frame; 0=inactive, <$80=alive, >$80=exploding
                   ;  +01: row
                   ;  +02: column
                   ;  +03: float direction ($00=up, $ff=down) while approaching
                   ;  +04: veer direction ($01=up, $02=left, $03=right)
                   ;  +05: float duration (time until float changes direction)
                   ;  +06: float counter (initial value)
                   ;  +07: frame hold counter (initial value) [not used]
                   ; 
                   ; This table must be page-aligned.
                   enemy_plane_behav
1100: 01 50 10 ff+                 .bulk   $01,$50,$10,$ff,$03,$20,$20,$00
1108: 01 20 14 ff+                 .bulk   $01,$20,$14,$ff,$01,$20,$20,$03
1110: 01 90 12 00+                 .bulk   $01,$90,$12,$00,$01,$40,$40,$00
1118: 01 10 20 ff+                 .bulk   $01,$10,$20,$ff,$02,$20,$20,$03
1120: 01 80 10 ff+                 .bulk   $01,$80,$10,$ff,$03,$10,$10,$03
1128: 01 60 1c ff+                 .bulk   $01,$60,$1c,$ff,$01,$04,$04,$03
1130: 01 70 10 ff+                 .bulk   $01,$70,$10,$ff,$01,$10,$10,$03
1138: 01 60 20 00+                 .bulk   $01,$60,$20,$00,$02,$40,$40,$03
1140: 01 90 10 00+                 .bulk   $01,$90,$10,$00,$01,$10,$10,$03
1148: 01 80 0e 00+                 .bulk   $01,$80,$0e,$00,$02,$40,$40,$03
1150: 01 a0 20 00+                 .bulk   $01,$a0,$20,$00,$02,$40,$40,$03
1158: 01 40 10 ff+                 .bulk   $01,$40,$10,$ff,$01,$30,$30,$03
1160: 01 a0 0a 00+                 .bulk   $01,$a0,$0a,$00,$03,$40,$40,$00
1168: 01 50 0e ff+                 .bulk   $01,$50,$0e,$ff,$03,$03,$03,$00
1170: 01 20 18 ff+                 .bulk   $01,$20,$18,$ff,$01,$20,$20,$03
1178: 01 99 16 00+                 .bulk   $01,$99,$16,$00,$01,$40,$40,$00
1180: 01 10 20 ff+                 .bulk   $01,$10,$20,$ff,$02,$02,$02,$03
1188: 01 80 12 ff+                 .bulk   $01,$80,$12,$ff,$03,$10,$10,$03
1190: 01 60 1c ff+                 .bulk   $01,$60,$1c,$ff,$01,$20,$20,$03
1198: 01 70 12 ff+                 .bulk   $01,$70,$12,$ff,$03,$10,$10,$03
11a0: 01 60 20 00+                 .bulk   $01,$60,$20,$00,$01,$40,$40,$03
11a8: 01 90 10 00+                 .bulk   $01,$90,$10,$00,$01,$10,$10,$03
11b0: 01 80 0e 00+                 .bulk   $01,$80,$0e,$00,$02,$40,$40,$03
11b8: 01 a0 14 00+                 .bulk   $01,$a0,$14,$00,$02,$40,$40,$03
11c0: 01 40 10 ff+                 .bulk   $01,$40,$10,$ff,$01,$03,$03,$03
11c8: 01 20 10 ff+                 .bulk   $01,$20,$10,$ff,$01,$20,$20,$03
11d0: 01 90 12 00+                 .bulk   $01,$90,$12,$00,$01,$40,$40,$00
11d8: 01 10 20 ff+                 .bulk   $01,$10,$20,$ff,$02,$20,$20,$03
11e0: 01 80 08 ff+                 .bulk   $01,$80,$08,$ff,$03,$10,$10,$03
11e8: 01 60 10 ff+                 .bulk   $01,$60,$10,$ff,$01,$04,$04,$03
11f0: 01 50 10 ff+                 .bulk   $01,$50,$10,$ff,$01,$04,$04,$00
11f8: 01 60 10 00+                 .bulk   $01,$60,$10,$00,$01,$04,$04,$00

                   ; 
                   ; Swaps the state of the primary and secondary planes.
                   ; 
1200: a0 07        SwapPlaneState  ldy     #$07              ;8 bytes
1202: b9 70 00     :Loop           lda     enemy_plane_state1,y
1205: 48                           pha
1206: b9 a0 00                     lda     eplane_state,y
1209: 99 70 00                     sta     enemy_plane_state1,y
120c: 68                           pla
120d: 99 a0 00                     sta     eplane_state,y
1210: 88                           dey
1211: 10 ef                        bpl     :Loop
1213: 60                           rts

1214: ff ff 00 00                  .junk   4

                   ; 
                   ; Updates the state of the secondary (non-hostile) plane.
                   ; 
                   UpdateSecondaryPlane1
1218: a5 70                        lda     enemy_plane_state1 ;is plane active?
121a: f0 02                        beq     :Return           ;no, return
121c: 10 01                        bpl     :DoUpdate         ;if not exploding, branch
121e: 60           :Return         rts

121f: 20 00 12     :DoUpdate       jsr     SwapPlaneState    ;swap state so we can share code
1222: 20 e0 19                     jsr     UpdateEnemyPlane  ;do the updates
1225: 20 00 1a                     jsr     DeactOffscreenPlane ;deactivate plane if it flew off screen
1228: 20 20 1a                     jsr     UpdateEnemyPlaneFrame ;update the plane's animation frame
122b: 4c 00 12                     jmp     SwapPlaneState    ;swap them back

122e: ea ea                        .junk   2

                   ; 
                   ; Populates the secondary plane slot.
                   ; 
                   ; Ideally this will be called the same number of times as the function at $17a0
                   ; (which populates the primary slot).  Otherwise the instructions that load data
                   ; from $1100 will eventually both be loading from the same slot, and we'll
                   ; create two planes with identical parameters.  If the dogfight is over, we can
                   ; try to keep the balance by going through the motions but marking the plane
                   ; inactive before returning.
                   ; 
                   • Clear variables
                   ]behav_ptr      .var    $00    {addr/2}

                   CreateSecondaryPlane
1230: a5 70                        lda     enemy_plane_state1 ;is secondary plane active?
1232: f0 01                        beq     :Inactive         ;no, create a new one
1234: 60                           rts

1235: ad 3f 12     :Inactive       lda     :_SetLow+1        ;get pointer to behavior table
1238: 18                           clc
1239: 69 08                        adc     #$08              ;advance to next entry
123b: 8d 3f 12                     sta     :_SetLow+1
123e: a9 b8        :_SetLow        lda     #<enemy_plane_behav-72 ;get pointer to behavior table
1240: 85 00                        sta     ]behav_ptr        ; as DP pointer this time
1242: a9 11                        lda     #>enemy_plane_behav
1244: 85 01                        sta     ]behav_ptr+1
1246: a0 06                        ldy     #$06              ;copy values 0-6
1248: b1 00        :Loop           lda     (]behav_ptr),y
124a: 99 70 00                     sta     enemy_plane_state1,y
124d: 88                           dey
124e: 10 f8                        bpl     :Loop
1250: a9 03                        lda     #$03              ;hold each frame for 3 updates, not
1252: 85 77                        sta     enemy_plane_state1+7 ; modified by difficulty
1254: a5 66                        lda     dogfight_remain   ;are we still in a dogfight?
1256: f0 01                        beq     :NotFighting      ;no, branch
1258: 60                           rts

1259: a9 00        :NotFighting    lda     #$00
125b: 85 70                        sta     enemy_plane_state1 ;mark thing we just created as inactive
125d: 60                           rts

125e: 00 00                        .junk   2

                   ; 
                   ; Updates the secondary (non-hostile) plane.
                   ; 
                   UpdateSecondaryPlane
1260: a9 01                        lda     #$01
1262: 85 68                        sta     eplane_suppress_fire ;secondary plane doesn't shoot
1264: 20 18 12                     jsr     UpdateSecondaryPlane1 ;do the update
1267: 4c 30 12                     jmp     CreateSecondaryPlane ;try to create it if it's inactive

126a: 00 00 00 00+                 .junk   6

                   ; 
                   ; Calculates the column of the player's bomber, minus two.  The result is
                   ; clamped to zero.
                   ; 
                   ; On entry:
                   ;   $0d: current column
                   ; 
                   ; On exit:
                   ;   $03: (column - 2), or zero if the value went negative
                   ; 
                   • Clear variables
                   ]result         .var    $03    {addr/1}

1270: a5 0d        PlayerColSub2   lda     player_col        ;get player column
1272: 38                           sec
1273: e9 02                        sbc     #$02              ;subtract two
1275: 10 02                        bpl     :IsPos
1277: a9 00                        lda     #$00              ;clamp to zero
1279: 85 03        :IsPos          sta     ]result
127b: 60                           rts

127c: 00 00 00 00                  .junk   4

                   ; 
                   ; Draws plane or bomb sight.
                   ; 
                   ; On entry:
                   ;   $04: start row
                   ;   $05: end row (exclusive)
                   ;   $06: start column
                   ;   $07: end column (exclusive); must be start + 9
                   ; 
                   • Clear variables

1280: a6 04        DrawBomberGfx   ldx     start_row         ;get screen row
1282: e0 c0        :RowLoop        cpx     #192              ;off the bottom?
1284: b0 2b                        bcs     :BadRow           ;yes, branch
1286: e0 08                        cpx     #8                ;off the top?
1288: 90 27                        bcc     :BadRow           ;yes, branch
128a: bd 00 08                     lda     hires_addr_hi,x   ;set up hi-res address
128d: 8d a1 12                     sta     :_Store+2
1290: bd c0 08                     lda     hires_addr_lo,x
1293: 8d a0 12                     sta     :_Store+1
1296: a4 06                        ldy     start_col         ;get screen column
1298: c0 28        :ColLoop        cpy     #40               ;off the right edge?
129a: b0 06                        bcs     :NextCol          ;yes, branch
129c: ad fc 65     :_Load          lda     phantom_s0+$5fc   ;copy a byte
129f: 99 50 30     :_Store         sta     HIRES_PAGE1+$1050,y
12a2: c8           :NextCol        iny                       ;move to next column
12a3: ee 9d 12                     inc     :_Load+1          ;advance input (note: must be page-aligned)
12a6: c4 07                        cpy     end_col           ;reached end?
12a8: d0 ee                        bne     :ColLoop          ;not yet, loop
12aa: e8           :NextRow        inx                       ;advance screen row by 2
12ab: e8                           inx
12ac: e4 05                        cpx     end_row           ;done yet?
12ae: d0 d2                        bne     :RowLoop          ;no, branch
12b0: 60                           rts

12b1: ad 9d 12     :BadRow         lda     :_Load+1
12b4: 18                           clc
12b5: 69 09                        adc     #$09              ;assume bitmap is 9 bytes wide
12b7: 8d 9d 12                     sta     :_Load+1
12ba: 4c aa 12                     jmp     :NextRow

12bd: 00 00 00                     .junk   3

                   ; 
                   ; Draws the player's plane while bombing.
                   ; 
                   ; Note we don't erase the plane; we just overwrite it.  This works when moving
                   ; to the left because we have a full byte of black down the right edge, but we
                   ; have to do a little cleanup when moving to the right.
                   ; 
                   ; The top and bottom rows of the plane are black, so the plane erases its trail
                   ; when drifting up and down.
                   ; 
                   • Clear variables
                   ]hptr           .var    $00    {addr/2}

12c0: a5 0c        DrawPlyrPlane   lda     player_row        ;set up bitmap renderer
12c2: 85 04                        sta     start_row
12c4: 18                           clc
12c5: 69 38                        adc     #56               ;56 rows high
12c7: 85 05                        sta     end_row
12c9: a5 0d                        lda     player_col
12cb: 85 06                        sta     start_col
12cd: 18                           clc
12ce: 69 09                        adc     #9                ;9 bytes wide
12d0: 85 07                        sta     end_col
12d2: a9 00                        lda     #$00
12d4: 8d 9d 12                     sta     :_Load+1          ;zero out the high byte of the pointer
12d7: a9 60                        lda     #$60              ;bitmap at $60xx
12d9: 18                           clc
12da: 65 0e                        adc     player_col_shift  ;one bitmap per page
12dc: 8d 9e 12                     sta     :_Load+2          ;set high byte of pointer
12df: 20 80 12                     jsr     DrawBomberGfx     ;draw it
12e2: ea                           nop                       ;hang out for a bit
12e3: ea                           nop
12e4: ea                           nop
12e5: ea                           nop                       ;yeah
12e6: ea                           nop
12e7: ea                           nop
12e8: a5 0e                        lda     player_col_shift  ;get horizontal pixel position
12ea: f0 01                        beq     :EraseLeft        ;column 0, erase the left side just in case
12ec: 60           :Return         rts

                   ; When moving right, the leftmost part of the bitmap (the edge of the wing)
                   ; doesn't get erased.  Take care of that here.
12ed: a4 06        :EraseLeft      ldy     start_col         ;get left column
12ef: 88                           dey                       ;move one more left
12f0: c0 28                        cpy     #40               ;did it go negative?
12f2: b0 f8                        bcs     :Return           ;yes, bail
12f4: a5 04                        lda     start_row         ;get top row
12f6: 18                           clc
12f7: 69 1c                        adc     #28               ;add 28 to get to where the wing starts
12f9: aa                           tax
12fa: e0 c0        :RowLoop        cpx     #192              ;off bottom of screen?
12fc: b0 12                        bcs     :NextRow          ;yes, skip this row
12fe: e0 08                        cpx     #8                ;off top of screen?
1300: 90 0e                        bcc     :NextRow          ;yes, skip this row
1302: bd 00 08                     lda     hires_addr_hi,x   ;get hi-res address
1305: 85 01                        sta     ]hptr+1
1307: bd c0 08                     lda     hires_addr_lo,x
130a: 85 00                        sta     ]hptr
130c: a9 00                        lda     #$00              ;black pixels
130e: 91 00                        sta     (]hptr),y
1310: e8           :NextRow        inx                       ;move down two rows
1311: e8                           inx
1312: e4 05                        cpx     end_row           ;done?
1314: d0 e4                        bne     :RowLoop          ;not yet, loop
1316: 60                           rts

1317: 00 00 00 00+                 .junk   25

                   ; 
                   ; Reads the paddle during a bombing run.  We stop when we hit a value of 60,
                   ; which happens a little later than usual because the read loop is 13 cycles
                   ; rather than 12, but it still represents a small fraction of the full range.
                   ; 
                   ; On exit:
                   ;   $10: value read from paddle (0-60)
                   ; 
1330: ad 70 c0     ReadBombPaddle  lda     PTRIG             ;trigger analog paddles
1333: a0 00                        ldy     #$00
1335: ea                           nop
1336: ea                           nop
1337: ad 64 c0     :PdlLoop        lda     PADDL0            ;4
133a: 10 05                        bpl     :GotPdl           ;2
133c: c8                           iny                       ;2
133d: c0 3c                        cpy     #60               ;2
133f: 90 f6                        bcc     :PdlLoop          ;3 (13 cycles/loop)
1341: 84 10        :GotPdl         sty     player_desired_xc ;update desired horizontal position
1343: 60                           rts

1344: 00 00 00 00                  .junk   4

                   ; 
                   ; Slides the player's plane or bomb sight up two rows.
                   ; 
1348: a5 0c        SlidePlayerUp   lda     player_row        ;get current row
134a: 38                           sec
134b: e9 02                        sbc     #$02              ;move up 2
134d: c9 30                        cmp     #$30              ;reached $30?
134f: 90 02                        bcc     :Return           ;yes, don't move higher
1351: 85 0c                        sta     player_row
1353: 60           :Return         rts

1354: ea ea ea ea                  .junk   4

                   ; 
                   ; Slides the player's plane or bomb sight down two rows.
                   ; 
1358: a5 0c        SlidePlayerDown lda     player_row        ;get current row
135a: 18                           clc
135b: 69 02                        adc     #$02              ;move down 2
135d: c9 50                        cmp     #$50              ;reached $50?
135f: b0 02                        bcs     :Return           ;yes, don't move lower
1361: 85 0c                        sta     player_row
1363: 60           :Return         rts

1364: 00 00 00 00                  .junk   4

                   ; 
                   ; Moves the player's plane two positions to the left.
                   ; 
                   ; Moving twice isn't necessary for correctness -- the pixel shift mechanism is
                   ; already working off of double pixels -- but it does allow the plane to move
                   ; sideways twice as fast.
                   ; 
1368: a5 0e        FlyPlayerLeft   lda     player_col_shift  ;get current shift
136a: 38                           sec
136b: e9 02                        sbc     #$02              ;subtract 2
136d: 10 07                        bpl     :NoByteAdj        ;still positive, don't need to update byte
136f: 18                           clc
1370: 69 07                        adc     #$07              ;add 7 to make it positive again
1372: c6 0d                        dec     player_col        ;decrement the byte position twice (always even)
1374: c6 0d                        dec     player_col
1376: 85 0e        :NoByteAdj      sta     player_col_shift  ;save updated value
1378: 60                           rts

                   ; 
                   ; Moves the player's plane two pixels to the right.
                   ; 
1379: a5 0e        FlyPlayerRight  lda     player_col_shift  ;get current shift
137b: 18                           clc
137c: 69 02                        adc     #$02              ;add 2
137e: c9 07                        cmp     #$07              ;are we at 7 or 8?
1380: 90 07                        bcc     :NoByteAdj        ;nope, leave byte position alone
1382: 38                           sec
1383: e9 07                        sbc     #$07              ;drop it back to 0 or 1
1385: e6 0d                        inc     player_col        ;increment the byte position twice (always even)
1387: e6 0d                        inc     player_col
1389: 85 0e        :NoByteAdj      sta     player_col_shift  ;save updated value
138b: 60                           rts

138c: 00 00 00 00                  .junk   4

                   ; 
                   ; Draws the player's plane or bombsight.
                   ; 
                   DrawPlaneOrSight
1390: a5 11                        lda     player_cur_xc     ;get current horizontal position
1392: c5 10                        cmp     player_desired_xc ;compare to desired position
1394: f0 0f                        beq     _JmpDrawPlayer    ;equal, no movement required
1396: 90 08                        bcc     :FlyRight         ;current < desired, fly right
                   ; Fly left.
1398: c6 11                        dec     player_cur_xc     ;decrement position
139a: 20 68 13                     jsr     FlyPlayerLeft
139d: 4c a5 13                     jmp     _JmpDrawPlayer

13a0: e6 11        :FlyRight       inc     player_cur_xc     ;increment position
13a2: 20 79 13                     jsr     FlyPlayerRight
13a5: 4c c0 12     _JmpDrawPlayer  jmp     DrawPlyrPlane     ;draw player as plane or bomb sight

13a8: 00 00 00 00+                 .junk   8

                   ; 
                   ; Slides the player's plane up or down.
                   ; 
                   ; During a bombing run, the plane slowly drifts up and down the screen, with the
                   ; top of the plane between $32 and $4e.  Because we only draw on even rows, the
                   ; slide is done two rows at a time.  There are 14 positions, but we try to move
                   ; each direction 32 times, so we spend about half our time sliding and the other
                   ; half holding position at one end or the other.
                   ; 
13b0: e6 12        SlidePlayer     inc     player_slide_ctr
13b2: a5 12                        lda     player_slide_ctr  ;check the counter
13b4: c9 40                        cmp     #$40              ;reached limit?
13b6: 90 04                        bcc     :NotAtLim         ;not yet, branch
13b8: a9 00                        lda     #$00
13ba: 85 12                        sta     player_slide_ctr  ;reset counter
13bc: c9 20        :NotAtLim       cmp     #$20              ;are we sliding up or down?
13be: 90 03                        bcc     :Down
13c0: 4c 48 13                     jmp     SlidePlayerUp

13c3: 4c 58 13     :Down           jmp     SlidePlayerDown

13c6: 00 00 00 00+                 .junk   26

                   ; 
                   ; Finishes bombing-phase initialization, and falls into game loop.
                   ; 
                   InitBombingMode2
13e0: a9 00                        lda     #$00
13e2: 85 63                        sta     air_attack_msg_flag ;showing status bar
13e4: 85 64                        sta     bombrun_timer_lo  ;init game counters and flags
13e6: 85 65                        sta     frames_until_dogfight
13e8: 85 66                        sta     dogfight_remain
13ea: 85 68                        sta     eplane_suppress_fire
13ec: 85 67                        sta     bombrun_timer_hi
13ee: a9 02                        lda     #$02
13f0: 85 20                        sta     frame_counter     ;init alternate-frame counter
                   ; 
                   ; Main loop during bombing phase.
                   ; 
                   ; On every frame we scroll the terrain, update the plane, and update flak
                   ; bursts.  We do additional updates on alterate frames.  One set of updates
                   ; reads the paddle and updates the player, the other deals with explosions and
                   ; enemy flak pops.
                   ; 
13f2: 20 20 14     BombGameLoop    jsr     :MainUpdates
13f5: c6 20                        dec     frame_counter
13f7: d0 13                        bne     :DoUpdates2
13f9: a9 02                        lda     #$02
13fb: 85 20                        sta     frame_counter     ;reset counter
                   ; Update set #1.
13fd: 20 30 13                     jsr     ReadBombPaddle    ;read game paddle to position bomber
1400: 20 b0 13                     jsr     SlidePlayer       ;slide player up/down
1403: 20 80 10                     jsr     CheckFlakBurst    ;see if it's time for a flak burst
1406: 20 60 0a                     jsr     CheckBombButton   ;drop a bomb if button pushed
1409: 4c f2 13                     jmp     BombGameLoop

                   ; Update set #2.
140c: 20 70 0b     :DoUpdates2     jsr     DrawBombExplosions ;update bomb explosions
140f: 20 30 0f                     jsr     CheckKbdSpc       ;check for ' ' key
1412: 20 90 10                     jsr     CheckPlayerFlakked ;check if player got hit by flak burst
1415: 20 00 0a                     jsr     UpdateBomb        ;update falling bomb
1418: 20 e0 1f                     jsr     UpdateFlakPops    ;update harmless flak pops
141b: 4c f2 13                     jmp     BombGameLoop

141e: 4c f2                        .junk   2

                   ; These happen every frame.
1420: 20 00 04     :MainUpdates    jsr     ScrollTerrain     ;scroll terrain down 2 lines, draw new line at top
1423: 20 90 13                     jsr     DrawPlaneOrSight  ;draw player
1426: 4c 30 0d                     jmp     UpdateFlakBurst   ;update flak burst progress

1429: 00 00 00 00+                 .fill   23,$00
                   ; 
                   ; Difficulty modifiers.  The difficulty level is initially 1 and goes up to 5. 
                   ; (The last 3 bytes in each item are unused.)
1440: e0 c0 a0 80+ lvl_plane_freq  .bulk   $e0,$c0,$a0,$80,$60,$00,$00,$00 ;dogfight: game frames between plane updates
1448: 07 07 07 07+ lvl_plane_kdist .bulk   $07,$07,$07,$07,$06,$00,$00,$00 ;dogfight: state at which bullets kill player
1450: 03 03 02 02+ lvl_plane_speed .bulk   $03,$03,$02,$02,$02,$00,$00,$00 ;dogfight: # of rounds to hold each animation frame
                   lvl_flak_burst_int
1458: 50 40 30 20+                 .bulk   $50,$40,$30,$20,$10,$00,$00,$00 ;bombing: flak burst interval

1460: a6 56        SetDifficulty   ldx     player_level      ;get current difficulty (1-5)
1462: ca                           dex                       ;now 0-4
1463: bd 40 14                     lda     lvl_plane_freq,x  ;copy values out of table and into "constants"
1466: 8d 97 17                     sta     _DogfightFreq+1
1469: 4a                           lsr     A
146a: 8d 8a 17                     sta     _PrimaryPlaneFreq+1
146d: bd 48 14                     lda     lvl_plane_kdist,x
1470: 8d 92 1e                     sta     _LevelKillFrame+1
1473: bd 50 14                     lda     lvl_plane_speed,x
1476: 8d 26 1a                     sta     _LevelPlaneSpeed+1
1479: bd 58 14                     lda     lvl_flak_burst_int,x
147c: 8d 6a 10                     sta     _LevelFlakBurst+1
147f: 60                           rts

1480: d5 aa d5 aa+                 .junk   32

                   ; 
                   ; Checks to see if a bullet we fired hit an enemy plane.  Only used for
                   ; secondary planes.
                   ; 
                   ; This is an exact copy of the code at $1a50, with one exception: no points are
                   ; scored.
                   ; 
                   • Clear variables
                   ]top_row        .var    $00    {addr/1}
                   ]bottom_row     .var    $01    {addr/1}
                   ]left_col       .var    $03    {addr/1}
                   ]right_col      .var    $04    {addr/1}

                   CheckSecondaryPlaneHit
14a0: a5 b0                        lda     bullet_flying_flag ;is a bullet in flight?
14a2: d0 01                        bne     :GotBullet        ;yes, do the check
14a4: 60           :Return         rts

14a5: a5 a0        :GotBullet      lda     eplane_state      ;is the plane alive?
14a7: 10 01                        bpl     :IsAlive          ;yes, do the check
14a9: 60                           rts

14aa: a5 a1        :IsAlive        lda     eplane_row        ;create hitbox around plane
14ac: 85 00                        sta     ]top_row
14ae: 18                           clc
14af: 69 17                        adc     #23               ;23 rows high
14b1: 85 01                        sta     ]bottom_row
14b3: a5 a2                        lda     eplane_col
14b5: 85 03                        sta     ]left_col
14b7: 18                           clc
14b8: 69 06                        adc     #6                ;6 bytes wide
14ba: 85 04                        sta     ]right_col
14bc: a5 b1                        lda     bullet_row        ;see if bullet is inside hit box
14be: c5 00                        cmp     ]top_row
14c0: 90 e2                        bcc     :Return
14c2: c5 01                        cmp     ]bottom_row
14c4: b0 de                        bcs     :Return
14c6: a5 b2                        lda     bullet_col_byte
14c8: c5 03                        cmp     ]left_col
14ca: 90 d8                        bcc     :Return
14cc: c5 04                        cmp     ]right_col
14ce: b0 d4                        bcs     :Return
                   ; Bullet hit.
14d0: a9 81                        lda     #$81
14d2: 85 a0                        sta     eplane_state      ;set state to exploding
14d4: a9 17                        lda     #23
14d6: 85 00                        sta     ]top_row          ;this is now bitmap height
14d8: 20 30 19                     jsr     EraseEnemyPlane   ;erase the plane
14db: a5 a2                        lda     eplane_col        ;make column even so we don't have to
14dd: 29 fe                        and     #$fe              ; do odd/even games with bitmap
14df: 85 a2                        sta     eplane_col
14e1: 60                           rts

                   ; 
                   ; Checks the secondary plane if it's time to do so.
                   ; 
                   CheckSecondaryPlane
14e2: a5 6b                        lda     enemy_plane_sec_timer ;get the timer
14e4: f0 05                        beq     :DoCheck          ;if zero, do the check
14e6: c9 50                        cmp     #$50
14e8: f0 01                        beq     :DoCheck          ;if it's $50, do the check
14ea: 60           :Return         rts                       ;otherwise, no check

14eb: a5 70        :DoCheck        lda     enemy_plane_state1 ;is secondary plane active?
14ed: f0 fb                        beq     :Return           ;no, return to caller
14ef: 20 00 12                     jsr     SwapPlaneState    ;swap secondary with primary
14f2: 20 a0 14                     jsr     CheckSecondaryPlaneHit ;do the check (with a dedicated function...
14f5: 20 00 12                     jsr     SwapPlaneState    ; state swap not necessary)
14f8: 60                           rts

14f9: 20 e0 1a 4c+                 .junk   7

                   ; 
                   ; Initializes state when transitioning to the bombing phase.
                   ; 
                   InitBombingMode1
1500: 20 60 14                     jsr     SetDifficulty     ;configure difficulty values
1503: a0 0f                        ldy     #$0f
1505: a9 00                        lda     #$00
1507: 99 00 03     :ZeroLoop       sta     flak0_state,y     ;reset the flak pop state
150a: 88                           dey
150b: 10 fa                        bpl     :ZeroLoop
150d: ea                           nop
150e: 85 10                        sta     player_desired_xc ;set horizontal position to left edge
1510: 85 11                        sta     player_cur_xc
1512: 85 12                        sta     player_slide_ctr  ;init vertical drift
1514: 85 0d                        sta     player_col        ;set byte/pixel position for left edge
1516: 85 0e                        sta     player_col_shift
1518: a9 20                        lda     #$20              ;start fairly high up
151a: 85 0c                        sta     player_row
151c: 4c e0 13                     jmp     InitBombingMode2  ;continue initialization

151f: 00                           .junk   1

                   ; 
                   ; This acts as the game loop while the player is crashing/crashed.
                   ; 
1520: 20 50 15     PlayerCrashLoop jsr     UpdateTerrainAndFlak ;scroll terrain, update flak burst
1523: c6 20                        dec     frame_counter     ;update plane every other frame
1525: d0 f9                        bne     PlayerCrashLoop   ;not this time, loop
1527: a9 02                        lda     #$02
1529: 85 20                        sta     frame_counter     ;reset counter
152b: 20 50 0c                     jsr     UpdatePlayerCrash ;update crashing player
152e: 20 43 15                     jsr     PlayCrashSound
1531: 20 00 0a                     jsr     UpdateBomb        ;update bomb if we dropped one before getting hit
1534: 20 e0 1f                     jsr     UpdateFlakPops    ;update the flak pops
1537: 20 70 0b                     jsr     DrawBombExplosions ;update bomb explosions (including plane)
153a: c6 21                        dec     plyr_crash_ctr    ;are we done showing player's demise?
153c: d0 e2                        bne     PlayerCrashLoop   ;not yet, loop
153e: 4c 00 1d                     jmp     PlaneShotDown     ;that's enough, move on

1541: 00 00                        .junk   2

1543: a5 f8        PlayCrashSound  lda     player_crash_state ;time left on counter?
1545: d0 01                        bne     :TimeLeft         ;yes, play the sound
1547: 60                           rts

1548: a2 1a        :TimeLeft       ldx     #$1a
154a: 20 c3 0f                     jsr     PlaySimpleSound
154d: 60                           rts

154e: 00 00                        .junk   2

                   ; 
                   ; Scrolls the terrain and updates the flak burst.  Called while the player is
                   ; crashing.
                   ; 
                   UpdateTerrainAndFlak
1550: 20 00 04                     jsr     ScrollTerrain
1553: a9 00                        lda     #$00
1555: 85 65                        sta     frames_until_dogfight
1557: 4c 30 0d                     jmp     UpdateFlakBurst

155a: 00 00 00 00+                 .junk   6

                   ; 
                   ; Continue initialization of new game.
                   ; 
1560: a0 00        InitGame1       ldy     #$00
1562: a9 00        :Zero50Loop     lda     #$00
1564: 99 50 00                     sta     score,y           ;zero score, level, and plane/target hit counters
1567: c8                           iny
1568: c0 10                        cpy     #$10
156a: 90 f6                        bcc     :Zero50Loop
156c: a9 01                        lda     #$01
156e: 85 56                        sta     player_level      ;init level to 1
1570: a9 05                        lda     #$05
1572: 85 5d                        sta     player_lives      ;player gets 5 planes
                   ; 
                   ; We jump here when transitioning from dogfight mode, and after being shot down.
                   ; 
1574: a9 00        InitBombingMode lda     #$00
1576: 20 00 07                     jsr     ClearScreen       ;clear screen to black
1579: 20 80 07                     jsr     DrawFullTerrain   ;fill the terrain lines
157c: 20 60 5b                     jsr     DrawScoreTempl    ;draw the score text
157f: 20 30 5a                     jsr     RedrawPlaneIcons  ;draw the plane icons
1582: 20 12 5c                     jsr     DrawLevel         ;draw current difficulty level
1585: 20 50 5c                     jsr     DrawScore         ;draw score
1588: 20 20 5c                     jsr     DrawTargetsHit    ;draw number of targets hit
158b: 20 38 5c                     jsr     DrawPlanesHit     ;draw number of planes hit
                   ; Zero out zero page from $70-ff.  This resets most of the active state for both
                   ; bombing and dogfighting.
158e: a0 00                        ldy     #$00
1590: a9 00        :ZeroLoop70     lda     #$00
1592: 99 70 00                     sta     $0070,y
1595: c8                           iny
1596: c0 90                        cpy     #$90
1598: 90 f6                        bcc     :ZeroLoop70
159a: a9 30                        lda     #$30              ;init flak burst counter (L3 timing)
159c: 85 c0                        sta     flak_burst_ctr
159e: 4c 00 15                     jmp     InitBombingMode1  ;continue initialization

15a1: 00 00 00 00+                 .junk   15

                   ; 
                   ; Entry point for starting (or re-starting) the game.
                   ; 
15b0: a9 c0        GameStart       lda     #$c0              ;start terrain at $c000 - 40
15b2: 85 60                        sta     terrain_src_ptr
15b4: a9 bf                        lda     #$bf
15b6: 85 61                        sta     terrain_src_ptr+1
15b8: a9 00                        lda     #$00
15ba: 85 62                        sta     wronly_62?        ;(?)
15bc: 85 63                        sta     air_attack_msg_flag ;init flags and timers
15be: 85 64                        sta     bombrun_timer_lo
15c0: 85 65                        sta     frames_until_dogfight
15c2: 85 68                        sta     eplane_suppress_fire
15c4: 85 67                        sta     bombrun_timer_hi
15c6: a0 00                        ldy     #$00
15c8: a9 00                        lda     #$00
15ca: 99 00 03     :InitLoop       sta     flak0_state,y     ;init flak pop state
15cd: c8                           iny
15ce: c0 10                        cpy     #$10
15d0: 90 f8                        bcc     :InitLoop
15d2: 4c 60 15                     jmp     InitGame1         ;continue initialization

15d5: 00 00 00 00+                 .junk   11

                   ; 
                   ; Checks whether the primary or secondary enemy plane has been hit.
                   ; 
15e0: 20 e0 1a     CheckPlanesHit  jsr     CheckPrimaryPlaneHit ;check primary plane
15e3: 20 e2 14                     jsr     CheckSecondaryPlane ;check secondary plane
15e6: 4c d0 1d                     jmp     UpdateExplodSecPlane ;if secondary exploding, update it

15e9: 00 00 00 00+                 .junk   23

                   ; 
                   ; Draws a bullet, recording its position in the bullet-erase list.  Makes the
                   ; gun-firing sound.
                   ; 
1600: 20 8e 16     DrawBullet      jsr     DrawBullet1       ;draw it
1603: a6 9e                        ldx     bullet_draw_index ;get index into bullet-erase list
1605: a5 b1                        lda     bullet_row        ;set row and column
1607: 95 90                        sta     bullet_rows,x
1609: a5 b2                        lda     bullet_col_byte
160b: 95 97                        sta     bullet_cols,x
                   ; Make player-gun-firing sound.
160d: e6 af                        inc     gun_sound_ctr
160f: a5 af                        lda     gun_sound_ctr
1611: c9 10                        cmp     #$10              ;time to click?
1613: 90 07                        bcc     :Return
1615: a9 00                        lda     #$00
1617: 85 af                        sta     gun_sound_ctr     ;reset counter
1619: 8d 30 c0                     sta     SPKR              ;click
161c: 60           :Return         rts

161d: 00 00 00 a5+                 .junk   23

                   ; 
                   ; Moves a bullet fired by the player.
                   ; 
1634: c6 b5        MoveBullet      dec     bullet_horiz_ctr  ;decrement horizontal-movement counter
1636: d0 2a                        bne     :NoHoriz          ;still counting, skip movement
1638: a5 b4                        lda     bullet_horiz_count ;get the move count
163a: 48                           pha
163b: 29 7f                        and     #$7f              ;strip leftward flag
163d: 85 b5                        sta     bullet_horiz_ctr  ;reset counter
163f: 68                           pla                       ;now check high bit
1640: 0a                           asl     A                 ;(could just BMI here?)
1641: b0 12                        bcs     :MoveLeft         ;flag set, move left
1643: a5 b3                        lda     bullet_col_pixel  ;get pixel-granularity column
1645: 18                           clc
1646: 69 01                        adc     #$01              ;add one (move right)
1648: c9 07                        cmp     #$07              ;check for roll into next byte
164a: 90 04                        bcc     :NoInc1
164c: e6 b2                        inc     bullet_col_byte   ;advance byte, zero pixel
164e: a9 00                        lda     #$00
1650: 85 b3        :NoInc1         sta     bullet_col_pixel
1652: 4c 62 16                     jmp     :NoHoriz

1655: a5 b3        :MoveLeft       lda     bullet_col_pixel  ;get pixel-granularity column
1657: 38                           sec
1658: e9 01                        sbc     #$01              ;subtract one (move left)
165a: 10 04                        bpl     :NoDec1           ;didn't roll into next byte, branch
165c: c6 b2                        dec     bullet_col_byte
165e: a9 06                        lda     #$06
1660: 85 b3        :NoDec1         sta     bullet_col_pixel
                   ; Check vertical movement.  Unlike horizontal movement, the counter determines
                   ; how often we *don't* move.
1662: c6 b7        :NoHoriz        dec     bullet_vert_ctr   ;decrement vertical-movement counter
1664: d0 06                        bne     :DoVert           ;still counting, do movement
1666: a5 b6                        lda     bullet_vert_count ;reset counter
1668: 85 b7                        sta     bullet_vert_ctr
166a: d0 02                        bne     :NoDec            ;(always)
166c: c6 b1        :DoVert         dec     bullet_row        ;decrement row (move up)
166e: a5 b1        :NoDec          lda     bullet_row        ;check to see if bullet has gone off screen
1670: c9 c0                        cmp     #192              ;off bottom of screen?
1672: b0 0b                        bcs     :StopBullet       ;yes, stop it
1674: c9 08                        cmp     #8                ;off top of screen?
1676: 90 07                        bcc     :StopBullet       ;yes, stop it
1678: a5 b2                        lda     bullet_col_byte   ;has bullet reached left/right edge?
167a: c9 28                        cmp     #40               ;check for 0 < value <= 40
167c: b0 01                        bcs     :StopBullet       ;off screen, stop it
167e: 60                           rts

167f: a9 00        :StopBullet     lda     #$00
1681: 85 b0                        sta     bullet_flying_flag ;stop bullet
1683: 60                           rts

1684: 00 00 00 00+                 .junk   10

                   ; 
                   ; Draw one step of a tracer bullet.  This will be a single or double pixel
                   ; depending on how far up the screen it is (effectively making things smaller as
                   ; they get farther away).
                   ; 
                   ; In practice, because we're merging with blue, our double pixels are
                   ; effectively just guaranteed single pixels, and single pixels may not appear at
                   ; all.  When they do appear it will be as a 3-pixel-wide white dash.
                   ; 
                   ; (The frame rate is so high during the dogfight that it's all just a blur
                   ; anyway.)
                   ; 
                   • Clear variables
                   ]hptr           .var    $00    {addr/2}

168e: 20 34 16     DrawBullet1     jsr     MoveBullet        ;update position
1691: a5 b0                        lda     bullet_flying_flag ;still flying?
1693: d0 01                        bne     :DoDraw           ;yes, draw it
1695: 60                           rts

1696: a5 b1        :DoDraw         lda     bullet_row        ;get current row
1698: aa                           tax
1699: c9 60                        cmp     #96               ;above line 96 (halfway up screen)?
169b: a9 f0                        lda     #<single_pixel
169d: 90 02                        bcc     :UseSingle        ;yes, use single pixels
169f: a9 f8                        lda     #<double_pixel    ;no, near bottom of screen, use double
16a1: 8d b5 16     :UseSingle      sta     :_Load+1
16a4: a6 b1                        ldx     bullet_row        ;set up hi-res addr
16a6: bd 00 08                     lda     hires_addr_hi,x
16a9: 85 01                        sta     ]hptr+1
16ab: bd c0 08                     lda     hires_addr_lo,x
16ae: 85 00                        sta     ]hptr
16b0: a6 b3                        ldx     bullet_col_pixel  ;get horizontal byte/pixel position
16b2: a4 b2                        ldy     bullet_col_byte
16b4: bd f0 0f     :_Load          lda     single_pixel,x    ;get pixel mask
16b7: 11 00                        ora     (]hptr),y         ;blend pixel into blue, yielding white
16b9: 91 00                        sta     (]hptr),y         ; (or possibly no change at all)
16bb: 60                           rts

16bc: 00 00 00 00                  .junk   4
                   ; 
                   ; Bullet movement parameters, for 16 different angles (which are reflected
                   ; left/right).  The horizontal value determines how often we move left/right,
                   ; the vertical value determines how often we *don't* move upward.
                   bullet_horiz_move
16c0: 3f 14 0a 07+                 .bulk   $3f,$14,$0a,$07,$05,$04,$03,$03,$03,$02,$02,$02,$02,$01,$01,$01
                   bullet_vert_freeze
16d0: ff 14 0a 07+                 .bulk   $ff,$14,$0a,$07,$0a,$0a,$32,$05,$03,$06,$04,$03,$02,$06,$03,$02

                   ; 
                   ; Get the paddle position for firing guns.
                   ; 
                   ; The timing loop is slightly faster than PREAD, but stops when the count
                   ; reaches 128, so it spans slightly less than half the range of the paddle.  The
                   ; result is divided by 4 to get 0-32, but anything outside 1-31 just fires
                   ; straight ahead.
                   ; 
                   ; The use of an odd number of positions (33) makes sense, because you don't want
                   ; things to be lopsided or have a double-wide center position.  However, there
                   ; are only 16 entries in the table, so the far-right paddle position is actually
                   ; wrapping around and reading code.
                   ; 
                   • Clear variables
                   ]tmp            .var    $00    {addr/1}

16e0: ad 70 c0     ReadGunPaddle   lda     PTRIG             ;trigger paddle discharge
16e3: a0 00                        ldy     #$00
16e5: ea                           nop
16e6: ea                           nop
16e7: ad 64 c0     :PdlLoop        lda     PADDL0            ;4
16ea: 10 03                        bpl     :PdlDone          ;2
16ec: c8                           iny                       ;2
16ed: 10 f8                        bpl     :PdlLoop          ;3 (11 cycles, 1 faster than PREAD)
16ef: 98           :PdlDone        tya                       ;value is 0-128
16f0: 4a                           lsr     A                 ;divide by 4 to get 0-32
16f1: 4a                           lsr     A
16f2: c9 10                        cmp     #16               ;value >= 16?
16f4: b0 0f                        bcs     :OnRight          ;yes, branch
16f6: 85 00                        sta     ]tmp              ;no, value is [0,15]
16f8: a9 10                        lda     #16               ;compute 16 - value
16fa: 38                           sec
16fb: e5 00                        sbc     ]tmp              ;now [1,16], where 1 is near center, 16 far left
16fd: aa                           tax                       ;put in X-reg
16fe: a9 80                        lda     #$80
1700: 85 00                        sta     ]tmp              ;negative value
1702: 4c 0d 17                     jmp     :Cont

1705: 38           :OnRight        sec                       ;value is [16,32]
1706: e9 10                        sbc     #16               ;subtract 16, now [0,16] (0 at center, 16 far right)
1708: aa                           tax                       ;put in X-reg
1709: a9 00                        lda     #$00              ;positive value
170b: 85 00                        sta     ]tmp
170d: bd c0 16     :Cont           lda     bullet_horiz_move,x ;get horizontal move cadence
1710: 85 b5                        sta     bullet_horiz_ctr  ;save as current value
1712: 05 00                        ora     ]tmp              ;OR in the left/right flag
1714: 85 b4                        sta     bullet_horiz_count ;save as reset value
1716: bd d0 16                     lda     bullet_vert_freeze,x ;get vertical move cadence
1719: 85 b6                        sta     bullet_vert_count ;save as reset value
171b: 85 b7                        sta     bullet_vert_ctr   ;save as current value
171d: a9 bf                        lda     #191
171f: 85 b1                        sta     bullet_row        ;start at bottom of screen
1721: a9 14                        lda     #20
1723: 85 b2                        sta     bullet_col_byte   ;centered horizontally
1725: a9 00                        lda     #$00
1727: 85 b3                        sta     bullet_col_pixel
1729: a9 01                        lda     #$01
172b: 85 b0                        sta     bullet_flying_flag ;set flag to indicate guns are firing
172d: 60                           rts

172e: 00 00                        .junk   2

                   ; 
                   ; Checks to see if the gun is firing.  Updates bullet if one is in flight.
                   ; 
                   ; It's hard to see at full speed, but the game fires individual bullets, which
                   ; animate up and away over the course of several frames.
                   ; 
                   ; When you press the paddle button, a bullet fires.  If you keep the button
                   ; pressed, 3 more will fire before you must release the button and press it
                   ; again.  The paddle position is read before firing each bullet, allowing the
                   ; user to sweep the cannon while holding the button down.
                   ; 
1730: a5 b0        UpdateGunFiring lda     bullet_flying_flag ;bullet in flight?
1732: f0 03                        beq     :NotFiring        ;no, check controls
1734: 4c 00 16                     jmp     DrawBullet        ;yes, update bullet position

1737: 20 e0 1b     :NotFiring      jsr     GetGunButton      ;check gun button (resets firing count when rel)
173a: a5 6a                        lda     gun_fire_count    ;can we fire more bullets?
173c: f0 0b                        beq     :ShortWait        ;no, delay (balances paddle read?)
173e: ad 61 c0                     lda     BUTN0             ;bullets ready; button pressed?
1741: 10 06                        bpl     :ShortWait        ;no, delay
1743: 20 e0 16                     jsr     ReadGunPaddle     ;get new paddle reading (sets bullet-flying flag)
1746: c6 6a                        dec     gun_fire_count    ;bullet fired, reduce count
1748: 60                           rts

1749: a9 05        :ShortWait      lda     #$05              ;delay for ~134 usec
174b: 4c a8 fc                     jmp     MON_WAIT

174e: 00 00                        .junk   2

                   ; 
                   ; Updates gun state, updates bullet, and erases the current bullet tail.
                   ; 
1750: 20 30 17     UpdateGun       jsr     UpdateGunFiring   ;update gun status
1753: 20 00 1b                     jsr     EraseBulletTail   ;erase tail of current bullet
1756: e6 9e                        inc     bullet_draw_index ;cycle through 0-6
1758: a5 9e                        lda     bullet_draw_index
175a: c9 07                        cmp     #$07              ;reached 7?
175c: 90 04                        bcc     :Return
175e: a9 00                        lda     #$00
1760: 85 9e                        sta     bullet_draw_index ;start over at 0
1762: 60           :Return         rts

1763: 30 c0 60 00+                 .junk   29

                   ; 
                   ; Main dogfight loop.
                   ; 
                   ; There's not a lot going on animation-wise, so each game frame is pretty brief.
                   ; The frame counter is used to pace things to level humans can handle.  The
                   ; counter is initialized to a level-dependent value.  Halfway through, we update
                   ; the primary plane.  When it reaches zero, we update the secondary plane.
                   ; 
1780: 20 d8 17     DogfightLoop    jsr     UpdatePlayerDogfight ;shoot player gun, kill enemy planes
1783: c6 20                        dec     frame_counter     ;is it time to check the secondary plane?
1785: a5 20                        lda     frame_counter
1787: f0 0a                        beq     :CheckSecondary   ;yes, branch
                   _PrimaryPlaneFreq
1789: c9 40                        cmp     #$40              ;modified by difficulty
178b: d0 f3                        bne     DogfightLoop      ;not time to advance state yet, branch
178d: 20 ea 1f                     jsr     UpdatePrimaryPlane ;advance hostile plane
1790: 4c 80 17                     jmp     DogfightLoop

1793: 20 60 12     :CheckSecondary jsr     UpdateSecondaryPlane ;advance passive plane
1796: a9 a0        _DogfightFreq   lda     #$a0              ;modified by difficulty
1798: 85 20                        sta     frame_counter     ;reset counter
179a: 4c 80 17                     jmp     DogfightLoop

179d: 17 00 00                     .junk   3

                   ; 
                   ; Creates a hostile enemy plane in the primary slot.
                   ; 
                   • Clear variables
                   ]behav_ptr      .var    $00    {addr/2}

                   CreatePrimaryPlane
17a0: a5 a0                        lda     eplane_state      ;enemy plane active?
17a2: f0 01                        beq     :Inactive         ;no, branch
17a4: 60                           rts

17a5: ad b3 17     :Inactive       lda     :_Load+1          ;get behavior table pointer
17a8: 18                           clc
17a9: 69 08                        adc     #$08              ;cycle through table
17ab: 8d b3 17                     sta     :_Load+1
17ae: ea                           nop
17af: ea                           nop
17b0: ea                           nop
17b1: ea                           nop
17b2: a9 60        :_Load          lda     #<enemy_plane_behav+96 ;get behavior table pointer
17b4: 85 00                        sta     ]behav_ptr        ;copy to DP
17b6: a9 11                        lda     #>enemy_plane_behav
17b8: 85 01                        sta     ]behav_ptr+1
17ba: a0 00                        ldy     #$00
17bc: b1 00        :Loop           lda     (]behav_ptr),y    ;copy bytes into primary state
17be: 99 a0 00                     sta     eplane_state,y
17c1: c8                           iny
17c2: c0 08                        cpy     #$08              ;copy all 8 bytes
17c4: 90 f6                        bcc     :Loop
17c6: a9 03                        lda     #$03              ;replace last value with $03
17c8: 85 a7                        sta     eplane_frame_hold_ctr ;(it may get reset to 2)
17ca: 60                           rts

17cb: 01 38 e5 68+                 .junk   13

                   ; 
                   ; Updates the player's gun, and checks if enemy planes were hit.
                   ; 
                   ; This is called in the main dogfight loop, and in the "dogfight done" loop to
                   ; give the final secondary plane a chance to flee (or be shot down) before we go
                   ; back to bombing.
                   ; 
                   UpdatePlayerDogfight
17d8: 20 50 17                     jsr     UpdateGun         ;update gun and bullet
17db: 20 e0 15                     jsr     CheckPlanesHit    ;see if player hit something
17de: ea                           nop
17df: ea                           nop
17e0: c6 22                        dec     dogfight_upd_ctr  ;decrement counter
17e2: f0 01                        beq     :CountZero        ;reached zero, do bonus stuff
17e4: 60                           rts

17e5: a9 a0        :CountZero      lda     #$a0
17e7: 85 22                        sta     dogfight_upd_ctr  ;reset counter
17e9: a5 a0                        lda     eplane_state      ;is primary plane exploding?
17eb: 10 0e                        bpl     :Return           ;no, bail
17ed: 20 90 18                     jsr     DrawExplodingPlane ;draw explosion
17f0: e6 a0                        inc     eplane_state      ;advance explosion frame
17f2: a5 a0                        lda     eplane_state
17f4: c9 88                        cmp     #$88              ;reached the end?
17f6: 90 03                        bcc     :Return           ;not yet, bail
17f8: 4c 3c 1a                     jmp     DeactivatePlane   ;yes, mark plane as inactive

17fb: 60           :Return         rts

17fc: 50 1a 00 00                  .align  $0100 (4 bytes)
                   ; 
                   ; Address tables for enemy plane bitmaps.  Must be page-aligned.
                   plane_approach_lo
1800: 20                           .dd1    <plane_approach_0
1801: 60                           .dd1    <plane_approach_1
1802: a0                           .dd1    <plane_approach_2
1803: e0                           .dd1    <plane_approach_3
1804: 20                           .dd1    <plane_approach_4
1805: 60                           .dd1    <plane_approach_5
1806: a0                           .dd1    <plane_approach_6
                   plane_approach_hi
1807: 51                           .dd1    >plane_approach_0
1808: 51                           .dd1    >plane_approach_1
1809: 51                           .dd1    >plane_approach_2
180a: 51                           .dd1    >plane_approach_3
180b: 52                           .dd1    >plane_approach_4
180c: 52                           .dd1    >plane_approach_5
180d: 52                           .dd1    >plane_approach_6
180e: 00 00                        .junk   2
                   ; 
                   ; Addresses for bitmaps of planes veering off, up/left/right.  Each table of
                   ; addresses has 6 entries and spans 16 bytes.
1810: 60           plane_rising_lo .dd1    <plane_rising_0
1811: f0                           .dd1    <plane_rising_1
1812: 80                           .dd1    <plane_rising_2
1813: 10                           .dd1    <plane_rising_3
1814: a0                           .dd1    <plane_rising_4
1815: 30                           .dd1    <plane_rising_5
1816: 4a           plane_rising_hi .dd1    >plane_rising_0
1817: 4a                           .dd1    >plane_rising_1
1818: 4b                           .dd1    >plane_rising_2
1819: 4c                           .dd1    >plane_rising_3
181a: 4c                           .dd1    >plane_rising_4
181b: 4d                           .dd1    >plane_rising_5
181c: 00 00 00 00                  .junk   4
1820: 00           plane_left_lo   .dd1    <plane_left_0
1821: 90                           .dd1    <plane_left_1
1822: 20                           .dd1    <plane_left_2
1823: b0                           .dd1    <plane_left_3
1824: 40                           .dd1    <plane_left_4
1825: d0                           .dd1    <plane_left_5
1826: 47           plane_left_hi   .dd1    >plane_left_0
1827: 47                           .dd1    >plane_left_1
1828: 48                           .dd1    >plane_left_2
1829: 48                           .dd1    >plane_left_3
182a: 49                           .dd1    >plane_left_4
182b: 49                           .dd1    >plane_left_5
182c: 00 00 00 00                  .junk   4
1830: c0           plane_right_lo  .dd1    <plane_right_0
1831: 50                           .dd1    <plane_right_1
1832: e0                           .dd1    <plane_right_2
1833: 70                           .dd1    <plane_right_3
1834: 00                           .dd1    <plane_right_4
1835: 90                           .dd1    <plane_right_5
1836: 4d           plane_right_hi  .dd1    >plane_right_0
1837: 4e                           .dd1    >plane_right_1
1838: 4e                           .dd1    >plane_right_2
1839: 4f                           .dd1    >plane_right_3
183a: 50                           .dd1    >plane_right_4
183b: 50                           .dd1    >plane_right_5
183c: 00 00 00 00                  .junk   4

                   ; 
                   ; Draws an enemy plane bitmap.
                   ; 
                   ; On entry:
                   ;   $04: start row
                   ;   $05: end row (exclusive)
                   ;   $06: start column
                   ;   $07: end column (exclusive), must be start + 6
                   ; 
1840: a6 04        DrawEnemyPlane  ldx     start_row         ;get top
1842: e0 c0        :RowLoop        cpx     #192              ;off bottom of screen?
1844: b0 2f                        bcs     :SkipRow          ;yes, branch
1846: e0 08                        cpx     #8                ;off top of screen?
1848: 90 2b                        bcc     :SkipRow          ;yes, branch
184a: bd c0 08                     lda     hires_addr_lo,x   ;get hi-res address
184d: 8d 60 18                     sta     :_Store+1
1850: bd 00 08                     lda     hires_addr_hi,x
1853: 8d 61 18                     sta     :_Store+2
1856: a4 06                        ldy     start_col         ;get left column
1858: c0 28        :ColLoop        cpy     #40               ;off left/right edge?
185a: b0 06                        bcs     :SkipDraw         ;yes, branch
185c: ad 96 51     _LoadPlaneBits  lda     plane_approach_0+118 ;get a byte of data
185f: 99 50 3a     :_Store         sta     HIRES_PAGE1+$1a50,y ;copy to hi-res screen
1862: ee 5d 18     :SkipDraw       inc     _LoadPlaneBits+1  ;advance to next byte of bitmap
1865: d0 03                        bne     :NoInc
1867: ee 5e 18                     inc     _LoadPlaneBits+2
186a: c8           :NoInc          iny
186b: c4 07                        cpy     end_col           ;done with row?
186d: d0 e9                        bne     :ColLoop          ;no, loop
186f: e8           :NextRow        inx                       ;down one line
1870: e4 05                        cpx     end_row           ;done with bitmap?
1872: d0 ce                        bne     :RowLoop          ;no, loop
1874: 60                           rts

1875: ad 5d 18     :SkipRow        lda     _LoadPlaneBits+1  ;get bitmap pointer
1878: 18                           clc
1879: 69 06                        adc     #$06              ;6 bytes wide
187b: 8d 5d 18                     sta     _LoadPlaneBits+1
187e: 90 ef                        bcc     :NextRow
1880: ee 5e 18                     inc     _LoadPlaneBits+2  ;update high byte
1883: 4c 6f 18                     jmp     :NextRow

1886: 00 00 00 00+                 .junk   10

                   ; 
                   ; Draws an exploding enemy plane.
                   ; 
                   DrawExplodingPlane
1890: a5 a0                        lda     eplane_state      ;get animation frame
1892: 29 7f                        and     #$7f              ;strip "exploding" flag
1894: 38                           sec
1895: e9 01                        sbc     #$01              ;index from zero
1897: 18                           clc
1898: 69 40                        adc     #>enemy_pl_exp_0  ;each frame is on its own page
189a: 8d 5e 18                     sta     _LoadPlaneBits+2  ;set pointer
189d: a9 00                        lda     #<enemy_pl_exp_0
189f: 8d 5d 18                     sta     _LoadPlaneBits+1
18a2: a5 a1                        lda     eplane_row        ;set up bitmap renderer
18a4: 85 04                        sta     start_row
18a6: 18                           clc
18a7: 69 24                        adc     #36               ;36 rows high
18a9: 85 05                        sta     end_row
18ab: a5 a2                        lda     eplane_col
18ad: 85 06                        sta     start_col
18af: 18                           clc
18b0: 69 06                        adc     #6                ;6 bytes wide
18b2: 85 07                        sta     end_col
18b4: 20 40 18                     jsr     DrawEnemyPlane    ;draw it
18b7: 4c a0 1a                     jmp     EnemyPlaneExplSound ;make some noise

18ba: 00 00 00 00+                 .junk   6

                   ; 
                   ; Draws an approaching enemy plane.
                   ; 
                   DrawApproachingPlane
18c0: a6 a0                        ldx     eplane_state      ;get state
18c2: ca                           dex                       ;index from zero
18c3: bd 00 18                     lda     plane_approach_lo,x ;get bitmap address
18c6: 8d 5d 18                     sta     _LoadPlaneBits+1
18c9: bd 07 18                     lda     plane_approach_hi,x
18cc: 8d 5e 18                     sta     _LoadPlaneBits+2
18cf: a5 a1                        lda     eplane_row        ;set up bitmap renderer
18d1: 85 04                        sta     start_row
18d3: 18                           clc
18d4: 69 09                        adc     #9                ;9 rows high
18d6: 85 05                        sta     end_row
18d8: a5 a2                        lda     eplane_col
18da: 85 06                        sta     start_col
18dc: 18                           clc
18dd: 69 06                        adc     #6                ;6 bytes wide
18df: 85 07                        sta     end_col
18e1: 20 40 18                     jsr     DrawEnemyPlane    ;draw it
18e4: 4c 80 1e                     jmp     FireEnemyGuns     ;fire guns if they're close enough

18e7: 00 00 00 00+                 .junk   9

                   ; 
                   ; Draws a plane as it veers away.
                   ; 
                   DrawVeeringPlane
18f0: a5 a0                        lda     eplane_state      ;get state (veers away at 8)
18f2: 38                           sec
18f3: e9 08                        sbc     #$08              ;index from zero
18f5: aa                           tax                       ;copy to X-reg for later
18f6: a5 a4                        lda     eplane_veer_dir   ;get direction (1=up, 2=left, 3=right)
18f8: 0a                           asl     A                 ;multiply by 16
18f9: 0a                           asl     A
18fa: 0a                           asl     A
18fb: 0a                           asl     A
18fc: 8d 06 19                     sta     :_LoadAddrLo+1    ;use as offset to low byte in addr table
18ff: 18                           clc
1900: 69 06                        adc     #$06              ;add 6 (6 frames per entry)
1902: 8d 0c 19                     sta     :_LoadAddrHi+1    ;use as offset to high byte in addr table
1905: bd 10 18     :_LoadAddrLo    lda     plane_rising_lo,x ;get address of bitmap
1908: 8d 5d 18                     sta     _LoadPlaneBits+1
190b: bd 16 18     :_LoadAddrHi    lda     plane_rising_hi,x
190e: 8d 5e 18                     sta     _LoadPlaneBits+2
1911: a5 a1                        lda     eplane_row        ;set up bitmap renderer
1913: 85 04                        sta     start_row
1915: 18                           clc
1916: 69 17                        adc     #23               ;23 lines high
1918: 85 05                        sta     end_row
191a: a5 a2                        lda     eplane_col
191c: 85 06                        sta     start_col
191e: 18                           clc
191f: 69 06                        adc     #6                ;6 bytes across
1921: 85 07                        sta     end_col
1923: 4c 40 18                     jmp     DrawEnemyPlane    ;draw

1926: 00 00 00 00+                 .junk   10

                   ; 
                   ; Erases an enemy plane to blue.  Width is assumed to be 6 bytes.
                   ; 
                   ; On entry:
                   ;   $00: bitmap height
                   ; 
                   • Clear variables
                   ]bitmap_height  .var    $00    {addr/1}

1930: a5 a1        EraseEnemyPlane lda     eplane_row        ;get top row
1932: aa                           tax                       ;save in X-reg for later
1933: 18                           clc
1934: 65 00                        adc     ]bitmap_height    ;add height
1936: 85 05                        sta     end_row           ;save as end row
1938: a5 a2                        lda     eplane_col        ;get left column
193a: 85 06                        sta     start_col
193c: 18                           clc
193d: 69 06                        adc     #6                ;6 bytes wide
193f: 85 07                        sta     end_col
1941: e0 c0        :RowLoop        cpx     #192              ;off bottom of screen?
1943: b0 21                        bcs     :NextRow          ;yes, branch
1945: e0 08                        cpx     #8                ;off top of screen?
1947: 90 1d                        bcc     :NextRow          ;yes, branch
1949: bd 00 08                     lda     hires_addr_hi,x   ;get hi-res address
194c: 8d 60 19                     sta     :_Store+2
194f: bd c0 08                     lda     hires_addr_lo,x
1952: 8d 5f 19                     sta     :_Store+1
1955: a4 06                        ldy     start_col         ;get left col
1957: c0 28        :ColLoop        cpy     #40               ;off left/right edge?
1959: b0 06                        bcs     :SkipDraw         ;yes, don't draw
195b: b9 50 53                     lda     blue_sky,y        ;get a byte of blue (odd/even aligned)
195e: 99 50 3e     :_Store         sta     HIRES_PAGE1+$1e50,y ;copy to hi-res screen
1961: c8           :SkipDraw       iny                       ;next column
1962: c4 07                        cpy     end_col           ;done with row?
1964: d0 f1                        bne     :ColLoop          ;no, loop
1966: e8           :NextRow        inx                       ;next row
1967: e4 05                        cpx     end_row           ;done?
1969: d0 d6                        bne     :RowLoop          ;no, loop
196b: 60                           rts

196c: 00 00 00 00                  .junk   4

                   ; 
                   ; Updates an approaching plane, modifying the float, erasing and redrawing it.
                   ; 
                   ; Incoming planes float up and down, using values determined by the parameter
                   ; table.
                   ; 
                   UpdateApproachingPlane
1970: c6 a6                        dec     eplane_float_ctr  ;time to update float?
1972: d0 0a                        bne     :NoChange         ;not yet
1974: a5 a5                        lda     eplane_float_time
1976: 85 a6                        sta     eplane_float_ctr  ;reset float counter
1978: a5 a3                        lda     eplane_float_dir
197a: 49 ff                        eor     #$ff              ;reverse float direction ($00/$ff)
197c: 85 a3                        sta     eplane_float_dir
197e: a9 09        :NoChange       lda     #9
1980: 85 00                        sta     ]bitmap_height    ;set height to 9
1982: 20 30 19                     jsr     EraseEnemyPlane   ;erase plane
                   ]tmp            .var    $00    {addr/1}

1985: a5 a0                        lda     eplane_state      ;get current state
1987: 4a                           lsr     A                 ;cut it in half
1988: 85 00                        sta     ]tmp              ;save it
198a: a5 a3                        lda     eplane_float_dir
198c: d0 0a                        bne     :FloatDown
                   ; Float up.
198e: a5 a1                        lda     eplane_row        ;get current row
1990: 38                           sec
1991: e5 00                        sbc     ]tmp              ;subtract the half-state value
1993: 85 a1                        sta     eplane_row        ;save new row
1995: 4c 9f 19                     jmp     :DoDrawAppr       ;draw it

                   ; Float down.
1998: a5 a1        :FloatDown      lda     eplane_row        ;get current row
199a: 18                           clc
199b: 65 00                        adc     ]tmp              ;add the half-state value
199d: 85 a1                        sta     eplane_row        ;save new row
199f: 4c c0 18     :DoDrawAppr     jmp     DrawApproachingPlane ;draw it

19a2: 00 00 00 00+                 .junk   14

                   ; 
                   ; Updates plane after it reaches the veer-away state.
                   ; 
                   ]bitmap_height  .var    $00    {addr/1}

19b0: a9 17        PlaneLeaving    lda     #23
19b2: 85 00                        sta     ]bitmap_height
19b4: 20 30 19                     jsr     EraseEnemyPlane   ;erase plane
19b7: a5 a1                        lda     eplane_row        ;get row
19b9: 38                           sec                       ;incoming planes are 9 rows high, veer-away planes
19ba: e9 06                        sbc     #$06              ; are 23 high, so add (23-9)/2=6 to maintain
19bc: 85 a1                        sta     eplane_row        ; center line
19be: a5 a4                        lda     eplane_veer_dir   ;get the veer-off direction
19c0: c9 01                        cmp     #$01              ;veer up?
19c2: f0 0f                        beq     :DoDraw           ;yes, no change to horizontal position
19c4: c9 02                        cmp     #$02              ;veer left?
19c6: f0 07                        beq     :GoLeft           ;yes, branch
19c8: e6 a2                        inc     eplane_col        ;value=$03, veer right by incrementing column
19ca: e6 a2                        inc     eplane_col        ;twice
19cc: 4c d3 19                     jmp     :DoDraw

19cf: c6 a2        :GoLeft         dec     eplane_col        ;decrement column
19d1: c6 a2                        dec     eplane_col        ;twice
19d3: 4c f0 18     :DoDraw         jmp     DrawVeeringPlane

19d6: 00 00 00 00+                 .junk   10

                   ; 
                   ; Erases and redraws enemy plane.  Updates position.
                   ; 
                   UpdateEnemyPlane
19e0: a5 a0                        lda     eplane_state      ;get plane state
19e2: d0 01                        bne     :IsActive         ;active, branch
19e4: 60                           rts

19e5: c9 08        :IsActive       cmp     #$08              ;incoming?
19e7: 90 87                        bcc     UpdateApproachingPlane ;yes, do that
19e9: c9 10                        cmp     #$10              ;veering away?
19eb: 90 c3                        bcc     PlaneLeaving      ;yes, do that
19ed: 60                           rts                       ;exploding, do nothing here

19ee: 90 18 00 00+                 .junk   18

                   ; 
                   ; Deactivates plane if it flies offscreen.
                   ; 
                   DeactOffscreenPlane
1a00: a5 a0                        lda     eplane_state      ;is plane active?
1a02: d0 01                        bne     :IsActive         ;yes, continue
1a04: 60                           rts

1a05: a5 a1        :IsActive       lda     eplane_row        ;get row
1a07: c9 c0                        cmp     #192              ;off bottom of screen?
1a09: 90 09                        bcc     :RowOk            ;no, branch
1a0b: c9 e0                        cmp     #224              ;off top of screen?
1a0d: b0 05                        bcs     :RowOk            ;no, branch
1a0f: a9 00        :Deactivate     lda     #$00
1a11: 85 a0                        sta     eplane_state      ;mark inactive
1a13: 60           :Return         rts

1a14: a5 a2        :RowOk          lda     eplane_col        ;get column
1a16: c9 28                        cmp     #40               ;off right edge of screen?
1a18: 90 f9                        bcc     :Return           ;no, bail
1a1a: c9 e0                        cmp     #$e0              ;off left edge of screen?
1a1c: 90 f1                        bcc     :Deactivate       ;yes, branch
1a1e: 60                           rts

1a1f: 00                           .junk   1

                   ; 
                   ; Advances enemy plane state when hold counter expires.
                   ; 
                   UpdateEnemyPlaneFrame
1a20: c6 a7                        dec     eplane_frame_hold_ctr ;have we held anim frame for enough game frames?
1a22: f0 01                        beq     _LevelPlaneSpeed  ;yes, branch
1a24: 60           :Return         rts

                   _LevelPlaneSpeed
1a25: a9 03                        lda     #$03              ;modified by difficulty
1a27: 85 a7                        sta     eplane_frame_hold_ctr ;reset counter
1a29: a5 a0                        lda     eplane_state      ;get plane state
1a2b: 30 f7                        bmi     :Return           ;exploding, leave it be
1a2d: e6 a0                        inc     eplane_state      ;advance to next frame
1a2f: c9 0d                        cmp     #13               ;reached frame 13?
1a31: 90 04                        bcc     :Return           ;not yet
1a33: a9 0d                        lda     #13               ;cap at 13
1a35: 85 a0                        sta     eplane_state
1a37: 60           :Return         rts

1a38: c9 88 90 fb                  .junk   4

                   ; 
                   ; Marks plane as inactive, and erases it from the screen.
                   ; 
1a3c: a9 00        DeactivatePlane lda     #$00
1a3e: 85 a0                        sta     eplane_state      ;mark plane as inactive
1a40: a9 24                        lda     #36               ;use max height (explosions are 36 high)
1a42: 85 00                        sta     ]bitmap_height
1a44: 20 30 19                     jsr     EraseEnemyPlane   ;erase
1a47: 60                           rts

1a48: 00 00 00 00+                 .junk   8

                   ; 
                   ; Checks to see if one of our bullets has struck an enemy plane.  Only used for
                   ; primary planes.
                   ; 
                   ; There is an exact copy of this code at $14a0 that does everything but increase
                   ; the score and kill count.  It appears this function is used for "hostile"
                   ; planes in the primary slot, and the other is used for passive planes in the
                   ; secondary slot.
                   ; 
                   • Clear variables
                   ]top_row        .var    $00    {addr/1}
                   ]bottom_row     .var    $01    {addr/1}
                   ]left_col       .var    $03    {addr/1}
                   ]right_col      .var    $04    {addr/1}

                   CheckEnemyPlaneHit1
1a50: a5 b0                        lda     bullet_flying_flag ;is a bullet in flight?
1a52: d0 01                        bne     :GotBullet        ;yes, branch
1a54: 60           :Return         rts

1a55: a5 a0        :GotBullet      lda     eplane_state      ;is primary plane active and not exploding?
1a57: 10 01                        bpl     :CheckEnemyHit    ;yes, branch
1a59: 60                           rts

1a5a: a5 a1        :CheckEnemyHit  lda     eplane_row        ;set up a hit box around enemy plane
1a5c: 85 00                        sta     ]top_row
1a5e: 18                           clc
1a5f: 69 17                        adc     #23
1a61: 85 01                        sta     ]bottom_row
1a63: a5 a2                        lda     eplane_col
1a65: 85 03                        sta     ]left_col
1a67: 18                           clc
1a68: 69 06                        adc     #6
1a6a: 85 04                        sta     ]right_col
1a6c: a5 b1                        lda     bullet_row        ;see if our bullet is inside the hit box
1a6e: c5 00                        cmp     ]top_row
1a70: 90 e2                        bcc     :Return
1a72: c5 01                        cmp     ]bottom_row
1a74: b0 de                        bcs     :Return
1a76: a5 b2                        lda     bullet_col_byte
1a78: c5 03                        cmp     ]left_col
1a7a: 90 d8                        bcc     :Return
1a7c: c5 04                        cmp     ]right_col
1a7e: b0 d4                        bcs     :Return
                   ; Enemy plane was hit.
1a80: a9 81                        lda     #$81
1a82: 85 a0                        sta     eplane_state
1a84: a9 17                        lda     #23               ;largest height for plane bitmap
1a86: 85 00                        sta     ]top_row          ;(this is now bitmap height arg)
1a88: 20 30 19                     jsr     EraseEnemyPlane   ;erase it
1a8b: a5 a2                        lda     eplane_col        ;make column even
1a8d: 29 fe                        and     #$fe
1a8f: 85 a2                        sta     eplane_col
                   ; Update score and kill counter.
1a91: a2 04                        ldx     #$04              ;add 40 points
1a93: 20 80 5c     :Add10Loop      jsr     Add10Points
1a96: ca                           dex
1a97: d0 fa                        bne     :Add10Loop
1a99: 20 e0 5c                     jsr     IncPlanesHit      ;add 1 to number of planes hit
1a9c: 4c c0 1c                     jmp     RedrawPlanesHit   ;redraw score, check if dogfight is done

1a9f: ea                           .junk   1

                   ; 
                   ; Plays a sound when enemy plane is shot down.
                   ; 
                   EnemyPlaneExplSound
1aa0: a5 a0                        lda     eplane_state      ;get plane state for a little variety
1aa2: 29 0f                        and     #$0f              ;reduce to 0-15
1aa4: 48                           pha
1aa5: 68           :Loop1          pla
1aa6: f0 14                        beq     :Return
1aa8: 38                           sec
1aa9: e9 01                        sbc     #$01
1aab: 48                           pha
1aac: a2 20                        ldx     #$20
1aae: 8a           :Loop2          txa
1aaf: a8                           tay
1ab0: 88           :Loop3          dey
1ab1: d0 fd                        bne     :Loop3
1ab3: 8d 30 c0                     sta     SPKR              ;click
1ab6: ca                           dex
1ab7: d0 f5                        bne     :Loop2
1ab9: 4c a5 1a                     jmp     :Loop1

1abc: 60           :Return         rts

1abd: 00 00 00                     .junk   3

                   ; 
                   ; Checks to see if the POW camp was bombed.  Called after confirming the
                   ; vertical position.
                   ; 
1ac0: a5 f2        CheckPowCampHit lda     bomb_horiz_posn   ;get horizontal position
1ac2: c9 0a                        cmp     #10               ;inside column 10-21 inclusive?
1ac4: 90 10                        bcc     :Return
1ac6: c9 16                        cmp     #22
1ac8: b0 0c                        bcs     :Return
1aca: a2 00                        ldx     #$00
1acc: 56 50        :HalveLoop      lsr     score,x           ;halve each decimal digit individually
1ace: e8                           inx
1acf: e0 05                        cpx     #$05
1ad1: 90 f9                        bcc     :HalveLoop
1ad3: 4c 70 1e                     jmp     PlayPowBombedSound

1ad6: 60           :Return         rts

1ad7: 00 00 00 00+                 .junk   9

                   ; 
                   ; Checks to see if a bullet struck an enemy plane.
                   ; 
                   ; We only do this sometimes, perhaps to require multiple shots to bring down a
                   ; plane.
                   ; 
                   CheckPrimaryPlaneHit
1ae0: a5 22                        lda     dogfight_upd_ctr
1ae2: c9 40                        cmp     #$40              ;magic value?
1ae4: f0 04                        beq     :DoCheck          ;yes, check
1ae6: c9 80                        cmp     #$80              ;other magic value?
1ae8: d0 04                        bne     :Return           ;no, bail
1aea: a5 a0        :DoCheck        lda     eplane_state      ;is plane active (alive or exploding)?
1aec: d0 01                        bne     :CheckIt          ;yes, branch to check it
1aee: 60           :Return         rts

1aef: 4c 50 1a     :CheckIt        jmp     CheckEnemyPlaneHit1

1af2: 00                           .junk   1

                   ; 
                   ; Checks to see if a bomb hit one of the special targets.  If so, the score is
                   ; updated appropriately.
                   ; 
                   • Clear variables
                   ]hptr           .var    $02    {addr/2}

                   CheckSpecialTargets1
1af3: a0 27                        ldy     #39               ;check rightmost column (odd)
1af5: b1 02                        lda     (]hptr),y         ;POW area has a green line there
1af7: c9 01                        cmp     #$01              ;do we see that here?
1af9: d0 67                        bne     CheckSpecialTargets2 ;nope, not POW camp
1afb: 4c c0 1a                     jmp     CheckPowCampHit   ;maybe, check column

1afe: 00 00                        .junk   2

                   ; 
                   ; Erases the tail of the bullets, which are recorded in a 7-element circular
                   ; buffer.
                   ; 
                   ; This is called whether or not a bullet is active (need to clean up after
                   ; they're gone).  Entries are flagged as inactive as we erase things.
                   ; 
                   ]hptr           .var    $00    {addr/2}

1b00: e6 9f        EraseBulletTail inc     bullet_erase_index ;cycle through 0-6
1b02: a5 9f                        lda     bullet_erase_index
1b04: c9 07                        cmp     #$07
1b06: 90 04                        bcc     :Lt7
1b08: a9 00                        lda     #$00
1b0a: 85 9f                        sta     bullet_erase_index
1b0c: a4 9f        :Lt7            ldy     bullet_erase_index ;get index
1b0e: b9 90 00                     lda     bullet_rows,y     ;get row
1b11: c9 ff                        cmp     #$ff              ;something here?
1b13: f0 25                        beq     :Return           ;no, bail
1b15: aa                           tax                       ;save in X-reg
1b16: a9 ff                        lda     #$ff
1b18: 99 90 00                     sta     bullet_rows,y     ;mark this erasure record as done
1b1b: b9 97 00                     lda     bullet_cols,y     ;get column
1b1e: a8                           tay
1b1f: bd 00 08                     lda     hires_addr_hi,x   ;get hi-res address
1b22: 85 01                        sta     ]hptr+1
1b24: bd c0 08                     lda     hires_addr_lo,x
1b27: 85 00                        sta     ]hptr
1b29: e0 c0                        cpx     #192              ;off bottom of screen?
1b2b: b0 0d                        bcs     :Return           ;yes, bail
1b2d: e0 08                        cpx     #8                ;off top of screen?
1b2f: 90 09                        bcc     :Return           ;yes, bail
1b31: c0 28                        cpy     #40               ;off left/right edge?
1b33: b0 05                        bcs     :Return           ;yes, bail
1b35: b9 50 53                     lda     blue_sky,y        ;get a byte of blue (odd/even)
1b38: 91 00                        sta     (]hptr),y         ;write to hi-res screen
1b3a: 60           :Return         rts

1b3b: 00 00 00 00+                 .junk   5

                   ; 
                   ; Adds 100 points to the player's score.
                   ; 
1b40: a0 03        Add100Points    ldy     #$03              ;4th column from left (000x00)
1b42: b9 50 00     :Loop           lda     score,y           ;get current value
1b45: 18                           clc
1b46: 69 01                        adc     #$01              ;add one
1b48: c9 0a                        cmp     #10               ;rolled over?
1b4a: 90 09                        bcc     :NoRoll           ;no, done
1b4c: a9 00                        lda     #$00
1b4e: 99 50 00                     sta     score,y           ;set to zero
1b51: 88                           dey                       ;move left one column
1b52: 10 ee                        bpl     :Loop             ;do it again
1b54: 60                           rts

1b55: 99 50 00     :NoRoll         sta     score,y
1b58: 60                           rts

1b59: 00 a0 27 b1+                 .junk   9

                   ; 
                   ; Wasn't the POW camp; check fuel, hospital, and HQ.
                   ; 
                   ]hptr           .var    $02    {addr/2}

                   CheckSpecialTargets2
1b62: a0 00                        ldy     #$00              ;leftmost column (even)
1b64: b1 02                        lda     (]hptr),y         ;get byte there
1b66: c9 01                        cmp     #$01              ;fuel dump has purple line
1b68: f0 1a                        beq     :CheckFuelHit
1b6a: c9 81                        cmp     #$81              ;hospital has blue line
1b6c: f0 28                        beq     :CheckHospitalHit
1b6e: c9 82                        cmp     #$82              ;HQ has orange line
1b70: f0 01                        beq     :CheckHqHit
1b72: 60           :Return         rts

1b73: a5 f2        :CheckHqHit     lda     bomb_horiz_posn   ;get position
1b75: c9 0e                        cmp     #14               ;column 14-19, inclusive?
1b77: 90 f9                        bcc     :Return
1b79: c9 14                        cmp     #20
1b7b: b0 f5                        bcs     :Return
1b7d: 20 40 1b                     jsr     Add100Points      ;+100 points for HQ
1b80: 20 50 5c                     jsr     DrawScore         ;draw score
1b83: 60                           rts

1b84: a5 f2        :CheckFuelHit   lda     bomb_horiz_posn   ;get position
1b86: c9 0c                        cmp     #12               ;column 12 or 13, inclusive?
1b88: f0 04                        beq     :HitFuel          ; (should be 11/12?)
1b8a: c9 0d                        cmp     #13
1b8c: d0 e4                        bne     :Return
1b8e: 20 40 1b     :HitFuel        jsr     Add100Points      ;+100 points for fuel dump
1b91: 4c 50 5c                     jmp     DrawScore         ;draw score

1b94: ea ea                        .junk   2

                   :CheckHospitalHit
1b96: a5 f2                        lda     bomb_horiz_posn   ;get position
1b98: c9 0e                        cmp     #14               ;column 14-19, inclusive?
1b9a: 90 d6                        bcc     :Return
1b9c: c9 14                        cmp     #20
1b9e: b0 d2                        bcs     :Return
1ba0: a9 00                        lda     #$00              ;reset score to zero
1ba2: 85 50                        sta     score
1ba4: 85 51                        sta     score+1
1ba6: 85 52                        sta     score+2
1ba8: 85 53                        sta     score+3
1baa: 85 54                        sta     score+4
1bac: 20 50 5c                     jsr     DrawScore         ;draw score
                   ; Play "hospital bombed" sound.
1baf: a2 18                        ldx     #$18
1bb1: a0 20        :SoundLoop      ldy     #$20
1bb3: 88           :WaitLoop       dey
1bb4: d0 fd                        bne     :WaitLoop
1bb6: 8d 30 c0                     sta     SPKR              ;click
1bb9: ca                           dex
1bba: d0 f5                        bne     :SoundLoop
1bbc: 60                           rts

1bbd: 00 00 00                     .junk   3

                   ; 
                   ; Checks to see if the bomb hit one of the special targets.
                   ; 
                   ; All of the score modification is handled by the subroutine.  No indication of
                   ; whether a special target was hit is returned.  The player is awarded (or
                   ; deducted) points for the special target, and then the general points are
                   ; applied.
                   ; 
                   ; On exit:
                   ;   A-reg: value of Y-reg on entry
                   ;   Y-reg: #$01
                   ;   $00-01 preserved
                   ; 
                   ]ptr00          .var    $00    {addr/2}

                   CheckSpecialTargets
1bc0: 98                           tya
1bc1: 48                           pha                       ;preserve A-reg
1bc2: a5 00                        lda     ]ptr00            ;preserve $00-01
1bc4: 48                           pha
1bc5: a5 01                        lda     ]ptr00+1
1bc7: 48                           pha
1bc8: 20 f3 1a                     jsr     CheckSpecialTargets1 ;check the targets
1bcb: 68                           pla                       ;restore $00-01
1bcc: 85 01                        sta     ]ptr00+1
1bce: 68                           pla
1bcf: 85 00                        sta     ]ptr00
1bd1: 68                           pla                       ;restore A-reg
1bd2: a0 01                        ldy     #O_EXPL_VIGOR
1bd4: 60                           rts

1bd5: 00 00 00 00+                 .junk   11

                   ; 
                   ; Checks the paddle button during a bombing run.
                   ; 
                   ; On exit:
                   ;   $6a: set to $04 if button pressed
                   ; 
1be0: ad 61 c0     GetGunButton    lda     BUTN0             ;button pressed?
1be3: 30 05                        bmi     :Return           ;yes, return without modifying count
1be5: a9 04                        lda     #$04
1be7: 85 6a                        sta     gun_fire_count    ;button not pressed, reset count to 4
1be9: 60                           rts

1bea: 60           :Return         rts

1beb: 6a f0 fb c6+                 .junk   21

                   ; 
                   ; Decrements the terrain pointer one line (40 bytes), wrapping around to the end
                   ; when we reach the top.  Also, decrements the countdown to dogfight mode.
                   ; 
                   DecrTerrPtrAndDfC
1c00: a5 60                        lda     terrain_src_ptr
1c02: 38                           sec
1c03: e9 28                        sbc     #40               ;back up one line
1c05: 85 60                        sta     terrain_src_ptr
1c07: b0 02                        bcs     :NoDec
1c09: c6 61                        dec     terrain_src_ptr+1
1c0b: a5 61        :NoDec          lda     terrain_src_ptr+1
1c0d: c9 8a                        cmp     #>terrain_data    ;did we back up off start of data?
1c0f: b0 2f                        bcs     :CheckDfTimer     ;not yet
1c11: a9 c0                        lda     #$c0              ;point to last line: $c000 - 40 = $bfc0
1c13: 85 60                        sta     terrain_src_ptr
1c15: a9 bf                        lda     #$bf
1c17: 85 61                        sta     terrain_src_ptr+1
1c19: 4c 40 1c                     jmp     :CheckDfTimer

1c1c: b0 02 c6 61+                 .junk   36

1c40: a5 63        :CheckDfTimer   lda     air_attack_msg_flag ;is "air attack" message enabled?
1c42: d0 0c                        bne     CountdownToDf     ;yes, count frames down
1c44: 4c 80 1c                     jmp     UpdateBombRunTime ;no, see if it's time for dogfighting

1c47: 01 60                        .junk   2

                   ; 
                   ; Initializes the "quiet period" countdown to a dogfight.  During this period we
                   ; (try to) show the air-attack message, and deadly flak bursts are suspended.
                   ; 
1c49: e6 63        InitDfCountdown inc     air_attack_msg_flag ;enable "air attack" message
1c4b: a9 70                        lda     #112
1c4d: 85 65                        sta     frames_until_dogfight ;play message for a few frames
1c4f: 60                           rts

                   ; 
                   ; Updates countdown during pre-dogfight quiet period.  If it reaches zero, jump
                   ; to dogfight code.
                   ; 
1c50: c6 65        CountdownToDf   dec     frames_until_dogfight ;decrement count
1c52: f0 01                        beq     InitDogfightMode  ;hit zero, it's dogfight time
1c54: 60                           rts

                   ; 
                   ; Prepare for a dogfight.
                   ; 
                   InitDogfightMode
1c55: a9 d5                        lda     #$d5
1c57: 20 00 07                     jsr     ClearScreen       ;clear screen to blue
1c5a: 20 60 5b                     jsr     DrawScoreTempl    ;draw status bar
1c5d: 20 30 5a                     jsr     RedrawPlaneIcons  ;draw lives-left icons
1c60: 20 50 5c                     jsr     DrawScore         ;draw score
1c63: 20 12 5c                     jsr     DrawLevel         ;draw difficulty level
1c66: 20 20 5c                     jsr     DrawTargetsHit    ;draw targets-hit counter
1c69: 20 38 5c                     jsr     DrawPlanesHit     ;draw hostile-planes-hit counter
1c6c: a9 07                        lda     #$07              ;player must defeat 7 planes to end dogfight
1c6e: 85 66                        sta     dogfight_remain
1c70: a9 00                        lda     #$00
1c72: 85 64                        sta     bombrun_timer_lo  ;reset this (why?)
1c74: 85 63                        sta     air_attack_msg_flag ;clear air-attack message flag
1c76: a9 80                        lda     #$80
1c78: 85 22                        sta     dogfight_upd_ctr  ;init update counter
1c7a: 4c 80 17                     jmp     DogfightLoop      ;tallyho

1c7d: 00 00 00                     .junk   3

                   ; 
                   ; Increments the 16-bit bomb run duration timer.  When it hits 512, we kick off
                   ; the pre-dogfight quiet period.
                   ; 
                   UpdateBombRunTime
1c80: e6 64                        inc     bombrun_timer_lo  ;count 256x
1c82: d0 0f                        bne     :Return           ;not there yet
1c84: e6 67                        inc     bombrun_timer_hi
1c86: a5 67                        lda     bombrun_timer_hi
1c88: c9 02                        cmp     #$02              ;512 interations?
1c8a: 90 07                        bcc     :Return           ;not yet, branch
1c8c: a9 00                        lda     #$00
1c8e: 85 67                        sta     bombrun_timer_hi  ;reset timer
1c90: 4c 49 1c                     jmp     InitDfCountdown

1c93: 60           :Return         rts

1c94: 00 00 00 00+                 .junk   12

                   ; 
                   ; Updates the "bomb targets hit" counter.  Only medium- and high-value targets
                   ; count.
                   ; 
                   ; Redraws the hit counter and the score.
                   ; 
                   ; On entry:
                   ;   A-reg: 1-3 depending on target value
                   ; 
                   UpdateTargetCounter
1ca0: c9 01                        cmp     #$01              ;low value target?
1ca2: f0 03                        beq     :NoInc            ;yes, don't incr count
1ca4: 20 c0 5c                     jsr     IncTargetsHit     ;add one
1ca7: a5 63        :NoInc          lda     air_attack_msg_flag ;showing status bar?
1ca9: d0 06                        bne     :Return           ;no, showing message; bail
1cab: 20 20 5c                     jsr     DrawTargetsHit    ;update on-screen display
1cae: 20 50 5c                     jsr     DrawScore         ;draw score
1cb1: 60           :Return         rts

1cb2: 00 00 00 00+                 .junk   14

                   ; 
                   ; Redraws the "hostile planes hit" counter, and the score.
                   ; 
                   ; If we've shot down enough planes, we end the dogfight.
                   ; 
1cc0: 20 50 5c     RedrawPlanesHit jsr     DrawScore         ;redraw score
1cc3: 20 38 5c                     jsr     DrawPlanesHit     ;redraw number of enemy planes shot down
1cc6: c6 66                        dec     dogfight_remain   ;decrement number required to end dogfight
1cc8: f0 01                        beq     :DogfightOver     ;if we hit zero, end the dogfight
1cca: 60                           rts

1ccb: a9 18        :DogfightOver   lda     #24               ;loop this many times
1ccd: 48                           pha
                   ; 
                   ; This becomes the dogfight game loop when the dogfight is over (successfully). 
                   ; We show the "bomb target approach" message and let the secondary plane fly
                   ; away.
                   ; 
                   :DogfightOverLoop
1cce: 68                           pla
1ccf: f0 18                        beq     :BackToBombing    ;done, go back to bombing
1cd1: 38                           sec
1cd2: e9 01                        sbc     #$01
1cd4: 48                           pha
1cd5: 20 d8 17     :Loop           jsr     UpdatePlayerDogfight
1cd8: c6 20                        dec     frame_counter     ;check number of frames?
1cda: d0 f9                        bne     :Loop
1cdc: a9 00                        lda     #$00
1cde: 85 20                        sta     frame_counter     ;reset counter
1ce0: 20 20 1d                     jsr     DrawBtaMsgAndSecPlane ;show BTA message, and draw non-hostile plane if alive
1ce3: 4c ce 1c                     jmp     :DogfightOverLoop

1ce6: 4c ce 1c                     .junk   3

1ce9: 20 a0 5c     :BackToBombing  jsr     IncDifficulty     ;survived dogfight, increase player level
1cec: 4c 74 15                     jmp     InitBombingMode   ;switch to bombing mode

1cef: 00 e0 17 19+                 .junk   17

                   ; 
                   ; Plane was shot down, during bombing or dogfight.  Reduce difficulty level and
                   ; lives remaining, then go back to bombing.
                   ; 
1d00: 20 b0 5c     PlaneShotDown   jsr     DecDifficulty     ;shot down by plane, decrease player level
1d03: c6 5d                        dec     player_lives      ;decrease lives
1d05: f0 29                        beq     GameOverMode      ;whoops, game over
1d07: 4c 74 15                     jmp     InitBombingMode   ;switch to bombing mode

1d0a: ca d0 f8 c6+                 .junk   22

                   ; 
                   ; Draws "bomb target approach" message and moves the secondary plane.
                   ; 
                   DrawBtaMsgAndSecPlane
1d20: 20 00 5b                     jsr     DrawBtaMsg        ;draw message in status bar
1d23: 4c 60 12                     jmp     UpdateSecondaryPlane ;let secondary plane flee

1d26: 00 00 00 00+                 .junk   10

                   ; 
                   ; Game over, man.
                   ; 
1d30: a9 00        GameOverMode    lda     #$00
1d32: 20 00 07                     jsr     ClearScreen       ;clear screen to black
1d35: 20 60 5b                     jsr     DrawScoreTempl    ;redraw status bar, with scores
1d38: 20 12 5c                     jsr     DrawLevel
1d3b: 20 20 5c                     jsr     DrawTargetsHit
1d3e: 20 38 5c                     jsr     DrawPlanesHit
1d41: 20 50 5c                     jsr     DrawScore
1d44: 20 80 5f                     jsr     DrawPressStartMsg ;draw "press button to play again" message
1d47: a9 49                        lda     #73               ;set counter for roughly 60 seconds
1d49: 85 60                        sta     terrain_src_ptr   ;re-use the terrain pointer as a counter
1d4b: 20 50 5f     :FlashMsgLoop   jsr     XdrawGameOver     ;draw or erase text
1d4e: ad 61 c0                     lda     BUTN0             ;button 0 pressed?
1d51: 30 11                        bmi     :JumpToStart      ;yes, start game
1d53: a2 05                        ldx     #$05
1d55: a9 00        :WaitLoop       lda     #$00              ;(ought to check button here so tap wakes us up)
1d57: 20 a8 fc                     jsr     MON_WAIT          ;wait for ~164 msec
1d5a: ca                           dex                       ;repeat 5x, for ~820 msec
1d5b: d0 f8                        bne     :WaitLoop
1d5d: c6 60                        dec     terrain_src_ptr   ;timer expired?
1d5f: f0 06                        beq     :ReturnToDemo     ;yes, bail out
1d61: 4c 4b 1d                     jmp     :FlashMsgLoop     ;no, keep flashing

1d64: 4c b0 15     :JumpToStart    jmp     GameStart         ;start a new game

1d67: 6c 4e 00     :ReturnToDemo   jmp     (restart_vec)     ;reboot (e.g. $C600)

1d6a: 50 5f 4c 47+                 .junk   22

                   ; 
                   ; Increments the pointer at $00-01.
                   ; 
                   • Clear variables
                   ]hptr           .var    $00    {addr/2}
                   ]src_ptr        .var    $02    {addr/2}

1d80: e6 00        IncPtr00        inc     ]hptr
1d82: d0 02                        bne     :NoInc
1d84: e6 01                        inc     ]hptr+1
1d86: 60           :NoInc          rts

1d87: ea                           .junk   1

                   ; 
                   ; Increments the pointer at $02-03.
                   ; 
1d88: e6 02        IncPtr02        inc     ]src_ptr
1d8a: d0 02                        bne     :NoInc
1d8c: e6 03                        inc     ]src_ptr+1
1d8e: 60           :NoInc          rts

1d8f: ea                           .junk   1

                   ; 
                   ; Draws jagged lines on the screen after being shot through the cockpit.  This
                   ; essentially uncompresses a full-screen overlay.
                   ; 
                   DrawCockpitDeath
1d90: a9 00                        lda     #$00
1d92: 85 00                        sta     ]hptr
1d94: 85 02                        sta     ]src_ptr
1d96: a9 20                        lda     #>HIRES_PAGE1     ;set draw pointer to start of page
1d98: 85 01                        sta     ]hptr+1
1d9a: a9 80                        lda     #>shatter_data    ;data starts at $8000
1d9c: 85 03                        sta     ]src_ptr+1
1d9e: a0 00                        ldy     #$00
1da0: b1 02        :Loop           lda     (]src_ptr),y      ;get byte of shatter data
1da2: 30 0d                        bmi     :HandleCmd        ;if high bit is set, handle specially
1da4: 51 00                        eor     (]hptr),y         ;merge with screen contents
1da6: 91 00                        sta     (]hptr),y         ;store
1da8: 20 80 1d                     jsr     IncPtr00          ;advance hi-res pointer
1dab: 20 88 1d                     jsr     IncPtr02          ;advance data pointer
1dae: 4c a0 1d                     jmp     :Loop

1db1: c9 ff        :HandleCmd      cmp     #$ff              ;end of list?
1db3: d0 01                        bne     :NotDone          ;no, keep going
1db5: 60                           rts

1db6: 29 7f        :NotDone        and     #%01111111        ;strip high bit
1db8: 18                           clc
1db9: 65 00                        adc     ]hptr             ;add value to hi-res pointer
1dbb: 85 00                        sta     ]hptr
1dbd: 90 02                        bcc     :NoInc
1dbf: e6 01                        inc     ]hptr+1
1dc1: 20 88 1d     :NoInc          jsr     IncPtr02          ;advance data pointer
1dc4: 8d 30 c0                     sta     SPKR              ;click
1dc7: 4c a0 1d                     jmp     :Loop

1dca: 00 00 00 00+                 .junk   6

                   ; 
                   ; Updates secondary plane when it's exploding.
                   ; 
                   ; This function has a bug: it swaps primary/secondary plane state, but fails to
                   ; swap them back if the plane hasn't finished exploding.  This makes the
                   ; exploding plane primary, and the hostile plane secondary.  Which is why, when
                   ; you shoot a secondary plane, the primary plane stops shooting at you.
                   ; 
                   UpdateExplodSecPlane
1dd0: c6 6b                        dec     enemy_plane_sec_timer
1dd2: f0 01                        beq     :DoUpdate
1dd4: 60                           rts

1dd5: a9 a0        :DoUpdate       lda     #$a0
1dd7: 85 6b                        sta     enemy_plane_sec_timer ;reset timer
1dd9: a5 70                        lda     enemy_plane_state1 ;secondary plane exploding?
1ddb: 10 14                        bpl     :Return           ;no, inactive or alive; bail
1ddd: 20 00 12                     jsr     SwapPlaneState    ;swap secondary state in
1de0: 20 90 18                     jsr     DrawExplodingPlane ;draw the exploding plane
1de3: e6 a0                        inc     eplane_state      ;advance the state
1de5: a5 a0                        lda     eplane_state
1de7: c9 88                        cmp     #$88              ;fully exploded?
1de9: 90 06                        bcc     :Return           ;not yet (BUG: should swap state back)
1deb: 20 3c 1a                     jsr     DeactivatePlane   ;deactivate plane
1dee: 20 00 12                     jsr     SwapPlaneState    ;swap state back
1df1: 60           :Return         rts

1df2: 00 00 00 00+                 .junk   14

                   ; 
                   ; Draws bitmap that indicates enemy plane is firing at us.  The bitmap is XORed
                   ; so we can erase it later.
                   ; 
                   ; On entry:
                   ;   $04: start row
                   ;   $05: end row (exclusive)
                   ;   $06: start column
                   ;   $07: end column (exclusive), must be start + 6
                   ; 
                   • Clear variables
                   ]hptr           .var    $00    {addr/2}

                   XdrawPlaneFiring1
1e00: a6 04                        ldx     start_row         ;get top row
1e02: e0 c0        :RowLoop        cpx     #192              ;off bottom of screen?
1e04: b0 29                        bcs     :SkipRow          ;yes, skip row
1e06: e0 08                        cpx     #8                ;off top of screen?
1e08: 90 25                        bcc     :SkipRow          ;yes, skip row
1e0a: bd 00 08                     lda     hires_addr_hi,x   ;get hi-res address
1e0d: 85 01                        sta     ]hptr+1
1e0f: bd c0 08                     lda     hires_addr_lo,x
1e12: 85 00                        sta     ]hptr
1e14: a4 06                        ldy     start_col         ;get left column
1e16: c0 28                        cpy     #40               ;off left/right edge?
1e18: b0 07                        bcs     :SkipDraw         ;yes, skip draw
1e1a: ad 90 53     _PlaneFireLoad  lda     plane_firing+144  ;get byte from bitmap
1e1d: 51 00                        eor     (]hptr),y         ;XOR with screen contents
1e1f: 91 00                        sta     (]hptr),y         ;update hi-res screen
1e21: ee 1b 1e     :SkipDraw       inc     _PlaneFireLoad+1  ;advance bitmap pointer
1e24: c8                           iny
1e25: c4 07                        cpy     end_col
1e27: d0 f1                        bne     _PlaneFireLoad    ;bug: should branch to CPY two lines above
1e29: e8           :NextRow        inx
1e2a: e4 05                        cpx     end_row
1e2c: d0 d4                        bne     :RowLoop
1e2e: 60                           rts

1e2f: ad 1b 1e     :SkipRow        lda     _PlaneFireLoad+1
1e32: 18                           clc
1e33: 69 06                        adc     #6                ;bitmap is 6 bytes wide
1e35: 8d 1b 1e                     sta     _PlaneFireLoad+1
1e38: 4c 29 1e                     jmp     :NextRow

1e3b: 00 00 00 00+                 .junk   5

                   ; 
                   ; Draws bitmap that indicates enemy plane is firing at us.  The bitmap is XORed
                   ; so we can erase it later.
                   ; 
                   XdrawPlaneFiring
1e40: a5 a1                        lda     eplane_row        ;set up bitmap renderer
1e42: 85 04                        sta     start_row
1e44: 18                           clc
1e45: 69 09                        adc     #9                ;9 lines high
1e47: 85 05                        sta     end_row
1e49: a5 a2                        lda     eplane_col
1e4b: 85 06                        sta     start_col
1e4d: 18                           clc
1e4e: 69 06                        adc     #6                ;6 columns wide
1e50: 85 07                        sta     end_col
1e52: a9 00                        lda     #<plane_firing
1e54: 8d 1b 1e                     sta     _PlaneFireLoad+1
1e57: 20 00 1e                     jsr     XdrawPlaneFiring1 ;draw it
1e5a: a2 20                        ldx     #$20
1e5c: 4c c3 0f                     jmp     PlaySimpleSound   ;make enemy-firing sound

1e5f: 00                           .junk   1

                   ; 
                   ; Sound subroutine, used for POW camp hit sound.
                   ; 
                   ; On entry:
                   ;   Y-reg: affects frequency
                   ; 
1e60: a2 08        PowBombedSound1 ldx     #$08              ;repeat 8x
1e62: ea           :WaitLoop       nop
1e63: 88                           dey
1e64: d0 fc                        bne     :WaitLoop
1e66: 8d 30 c0                     sta     SPKR              ;click
1e69: ca                           dex
1e6a: d0 f6                        bne     :WaitLoop         ;note Y-reg is now $00
1e6c: 60                           rts

1e6d: ea ea ea                     .junk   3

                   ; 
                   ; Plays a distinctive sound when a POW camp is bombed.
                   ; 
                   PlayPowBombedSound
1e70: a0 10                        ldy     #$10
1e72: 20 60 1e                     jsr     PowBombedSound1
1e75: a0 30                        ldy     #$30
1e77: 20 60 1e                     jsr     PowBombedSound1
1e7a: a0 20                        ldy     #$20
1e7c: 4c 60 1e                     jmp     PowBombedSound1

1e7f: 00                           .junk   1

                   ; 
                   ; Fires enemy guns if the hostile plane is close enough.
                   ; 
                   ; The animation frame number for an incoming plane tells us how far they appear
                   ; to be.  Starting on frame 4 the guns fire, on frame 7 they either kill the
                   ; player or miss entirely.  At difficulty level five, frame 6 becomes the kill
                   ; frame.
                   ; 
1e80: a5 68        FireEnemyGuns   lda     eplane_suppress_fire ;do we need to suppress guns?
1e82: f0 01                        beq     :FireOk           ;no, firing is okay
1e84: 60                           rts

1e85: a5 a0        :FireOk         lda     eplane_state      ;check state of incoming plane (effective distance)
1e87: c9 04                        cmp     #$04              ;close enough?
1e89: b0 01                        bcs     :CloseEnough      ;yes, branch
1e8b: 60                           rts

1e8c: 20 40 1e     :CloseEnough    jsr     XdrawPlaneFiring  ;draw bitmap and play sound
1e8f: a5 a0                        lda     eplane_state      ;check animation frame
1e91: c9 07        _LevelKillFrame cmp     #$07              ;modified by difficulty
1e93: f0 01                        beq     :JmpCheckShot     ;potential kill
1e95: 60                           rts

1e96: 4c d0 1e     :JmpCheckShot   jmp     :CheckPlayerIsShot ;see if it's in the strike zone

1e99: 4c 00 1d 00+                 .junk   55

                   :CheckPlayerIsShot
1ed0: a5 a1                        lda     eplane_row        ;get enemy plane's row
1ed2: c9 10                        cmp     #16               ;near top of screen?
1ed4: b0 01                        bcs     :NotTop           ;no, branch
1ed6: 60           :Return         rts

1ed7: c9 80        :NotTop         cmp     #128              ;near bottom of screen?
1ed9: b0 fb                        bcs     :Return           ;yes, give the player a break
1edb: a5 a2                        lda     eplane_col
1edd: c9 08                        cmp     #8                ;far left?
1edf: 90 f5                        bcc     :Return           ;yes, not a kill
1ee1: c9 20                        cmp     #32               ;far right?
1ee3: b0 f1                        bcs     :Return           ;yes, not a kill
                   ; Player has been shot down.
1ee5: 20 90 1d                     jsr     DrawCockpitDeath  ;draw shattered windshield
1ee8: a2 30                        ldx     #$30              ;make some noise
1eea: 20 c3 0f                     jsr     PlaySimpleSound
1eed: a9 00                        lda     #$00
1eef: 20 a8 fc                     jsr     MON_WAIT
1ef2: a2 30                        ldx     #$30
1ef4: 20 c3 0f                     jsr     PlaySimpleSound
1ef7: a9 00                        lda     #$00
1ef9: 20 a8 fc                     jsr     MON_WAIT
1efc: 4c 00 1d                     jmp     PlaneShotDown     ;handle death

1eff: 00                           .junk   1

                   ; 
                   ; Draws or erases the flak pop in slot 0.
                   ; 
1f00: ad 00 03     UpdateFlakPop0  lda     flak0_state       ;is flak active?
1f03: f0 2f                        beq     :Return           ;no, bail
1f05: ad 03 03                     lda     flak0_row         ;set up bitmap renderer
1f08: 85 04                        sta     start_row
1f0a: 18                           clc
1f0b: 69 24                        adc     #36               ;36 lines high
1f0d: 85 05                        sta     end_row
1f0f: ad 04 03                     lda     flak0_col
1f12: 85 06                        sta     start_col
1f14: 18                           clc
1f15: 69 06                        adc     #6                ;6 bytes wide
1f17: 85 07                        sta     end_col
1f19: 20 90 0f                     jsr     XdrawFlakPop      ;draw or erase
1f1c: ad 03 03                     lda     flak0_row
1f1f: 18                           clc
1f20: 69 04                        adc     #$04              ;called on alternate frames, scroll 2 lines per frame
1f22: 8d 03 03                     sta     flak0_row
1f25: ee 00 03                     inc     flak0_state       ;advance to next state
1f28: ad 00 03                     lda     flak0_state
1f2b: c9 03                        cmp     #$03              ;are we done yet?
1f2d: 90 05                        bcc     :Return           ;no, bail
1f2f: a9 00                        lda     #$00
1f31: 8d 00 03                     sta     flak0_state       ;mark inactive
1f34: 60           :Return         rts

1f35: 00 00 00 00+                 .junk   11

                   ; 
                   ; Draws or erases the flak pop in slot 1.
                   ; 
1f40: ad 08 03     UpdateFlakPop1  lda     flak1_state       ;is flak active?
1f43: d0 01                        bne     :NonZero          ;yes, branch
1f45: 60                           rts

1f46: ad 0a 03     :NonZero        lda     flak1_row         ;set up bitmap renderer
1f49: 85 04                        sta     start_row
1f4b: 18                           clc
1f4c: 69 24                        adc     #36               ;36 lines high
1f4e: 85 05                        sta     end_row
1f50: ad 0b 03                     lda     flak1_col
1f53: 85 06                        sta     start_col
1f55: 18                           clc
1f56: 69 06                        adc     #6                ;6 bytes wide
1f58: 85 07                        sta     end_col
1f5a: 20 90 0f                     jsr     XdrawFlakPop      ;draw or erase
1f5d: ad 0a 03                     lda     flak1_row
1f60: 18                           clc
1f61: 69 04                        adc     #$04              ;called on alternate frames, scroll 2 lines per frame
1f63: 8d 0a 03                     sta     flak1_row
1f66: ee 08 03                     inc     flak1_state       ;advance to next state
1f69: ad 08 03                     lda     flak1_state
1f6c: c9 03                        cmp     #$03              ;are we done yet?
1f6e: 90 05                        bcc     :Return           ;no, bail
1f70: a9 00                        lda     #$00
1f72: 8d 08 03                     sta     flak1_state       ;mark inactive
1f75: 60           :Return         rts

1f76: ea 00 00 00+                 .junk   10

                   ; 
                   ; Generates new flak pops in slots 0/1.
                   ; 
1f80: ad 00 03     GenerateFlak    lda     flak0_state       ;slot 0 available?
1f83: d0 15                        bne     :ZeroBusy         ;no, branch
1f85: a9 01                        lda     #$01
1f87: 8d 00 03                     sta     flak0_state       ;mark as need-draw
1f8a: ad 90 24                     lda     HIRES_PAGE1+$490  ;get byte from line 9, column 16
1f8d: 29 1e                        and     #$1e              ;reduce to 0-30, even values
1f8f: 8d 04 03                     sta     flak0_col         ;set as column
1f92: a5 0c                        lda     player_row
1f94: 38                           sec
1f95: e9 1d                        sbc     #29               ;target player row minus 29 (terrain row)
1f97: 8d 03 03                     sta     flak0_row
1f9a: ad 08 03     :ZeroBusy       lda     flak1_state       ;slot 1 available?
1f9d: f0 01                        beq     :OneAvail         ;yes, branch
1f9f: 60                           rts

1fa0: a9 01        :OneAvail       lda     #$01
1fa2: 8d 08 03                     sta     flak1_state       ;mark as need-draw
1fa5: a5 0c                        lda     player_row
1fa7: 38                           sec
1fa8: e9 25                        sbc     #37               ;target player row minus 37 (terrain row)
1faa: 8d 0a 03                     sta     flak1_row
1fad: ad 90 2c                     lda     HIRES_PAGE1+$c90  ;get byte from line 11, column 16
1fb0: 05 60                        ora     terrain_src_ptr   ;blend in the low byte of the pointer
1fb2: 29 1e                        and     #$1e              ;reduce to 0-30, even values
1fb4: 8d 0b 03                     sta     flak1_col         ;set as column
1fb7: 60                           rts

1fb8: 00 00 00 00+                 .junk   8

                   ; 
                   ; Generates flak pops if it's time to do so.
                   ; 
                   MaybeGenerateFlak
1fc0: ee 0c 03                     inc     flak_delay_ctr    ;increment counter
1fc3: ad 0c 03                     lda     flak_delay_ctr
1fc6: c9 20                        cmp     #$20              ;waited long enough?
1fc8: 90 08                        bcc     :Return           ;not yet
1fca: a9 00                        lda     #$00
1fcc: 8d 0c 03                     sta     flak_delay_ctr    ;reset counter
1fcf: 4c 80 1f                     jmp     GenerateFlak      ;generate it

1fd2: 60           :Return         rts

1fd3: 00 00 00 00+                 .junk   13

                   ; 
                   ; Updates the harmless flak pops.
                   ; 
1fe0: 20 00 1f     UpdateFlakPops  jsr     UpdateFlakPop0    ;draw or erase pop #0
1fe3: 20 40 1f                     jsr     UpdateFlakPop1    ;draw or erase pop #1
1fe6: 4c c0 1f                     jmp     MaybeGenerateFlak ;generate new pops, if it's time

1fe9: 00                           .junk   1

                   ; 
                   ; Updates the primary enemy plane.
                   ; 
                   UpdatePrimaryPlane
1fea: a9 00                        lda     #$00
1fec: 85 68                        sta     eplane_suppress_fire ;primary plane can shoot
1fee: 20 00 1a                     jsr     DeactOffscreenPlane ;deactivate plane if offscreen
1ff1: 20 20 1a                     jsr     UpdateEnemyPlaneFrame ;advance animation frame
1ff4: 20 e0 19                     jsr     UpdateEnemyPlane  ;update float, redraw
1ff7: a5 a0                        lda     eplane_state      ;plane in primary slot active?
1ff9: d0 03                        bne     :Return           ;yes, bail
1ffb: 20 a0 17                     jsr     CreatePrimaryPlane ;no, create a new one
1ffe: 60           :Return         rts

1fff: 00                           .junk   1

                                   .org    $b000
                   ; 
                   ; Terrain graphics, continued (starts at $8a00).  This section runs from $b000-
                   ; bfff after being relocated.
                   ; 
b000: 10 00 04 20+ terrain_2       .bulk   $10,$00,$04,$20,$40,$70,$00,$00,$00,$00,$82,$0c,$18,$00,$8a,$00
                                    +      $01,$04,$00,$95,$00,$30,$18,$c0,$8a,$41,$00,$00,$a4,$92,$00,$00
                                    +      $00,$00,$00,$00,$00,$a0,$00,$04,$04,$00,$01,$08,$11,$70,$83,$00
                                    +      $00,$80,$82,$0c,$18,$80,$8a,$80,$01,$04,$00,$85,$00,$7c,$07,$00
                                    +      $8a,$41,$00,$00,$12,$49,$00,$00,$00,$00,$00,$00,$00,$88,$00,$00
                                    +      $01,$00,$01,$0a,$04,$00,$87,$00,$00,$80,$82,$0c,$18,$80,$8a,$80
                                    +      $01,$04,$00,$d5,$aa,$d5,$aa,$d5,$8a,$41,$00,$00,$a4,$92,$00,$00
                                    +      $00,$00,$00,$00,$00,$88,$00,$80,$01,$20,$00,$02,$01,$66,$84,$00
                                    +      $00,$80,$82,$0c,$18,$80,$8a,$80,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$12,$49,$00,$00,$00,$00,$00,$49,$04,$82,$01,$a4
                                    +      $00,$20,$40,$00,$00,$0c,$80,$00,$00,$80,$82,$00,$00,$80,$8a,$80
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$41,$00,$00,$a4,$92,$00,$00
                                    +      $00,$00,$00,$00,$c0,$80,$00,$a0,$00,$08,$40,$00,$00,$10,$80,$00
                                    +      $00,$80,$aa,$d5,$aa,$d5,$82,$80,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$12,$49,$00,$00,$00,$02,$08,$00,$c0,$90,$82,$08
                                    +      $00,$0a,$10,$00,$00,$11,$80,$00,$00,$80,$80,$80,$80,$80,$80,$80
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$41,$00,$00,$a4,$92,$00,$00
                                    +      $00,$00,$00,$00,$90,$d5,$82,$0a,$00,$02,$10,$00,$00,$01,$80,$00
                                    +      $00,$80,$80,$80,$80,$80,$80,$80,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$12,$49,$00,$00,$00,$00,$00,$00,$90,$d5,$82,$02
                                    +      $40,$02,$04,$00,$00,$0c,$80,$00,$00,$00,$00,$00,$00,$00,$00,$80
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$41,$00,$00,$a4,$92,$00,$00
                                    +      $00,$00,$00,$00,$a4,$d5,$c0,$00,$40,$00,$04,$00,$30,$06,$80,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$80,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$00,$12,$09,$a4,$d1,$c1,$00
                                    +      $10,$00,$01,$00,$60,$08,$80,$00,$00,$00,$00,$00,$00,$00,$00,$80
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$a9,$95,$90,$00,$10,$20,$00,$00,$00,$01,$80,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$80,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$a4,$92,$00,$00,$00,$00,$00,$80,$a9,$84,$10,$00
                                    +      $04,$20,$00,$00,$48,$01,$80,$00,$00,$00,$00,$00,$00,$00,$00,$80
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$41,$00,$00,$12,$49,$00,$00
                                    +      $00,$00,$00,$a0,$88,$91,$05,$00,$04,$08,$00,$00,$18,$02,$80,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$80,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$a4,$92,$00,$00,$00,$00,$00,$a0,$00,$00,$01,$00
                                    +      $01,$08,$00,$00,$00,$00,$80,$00,$00,$00,$00,$00,$00,$00,$00,$80
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$41,$00,$00,$12,$49,$00,$00
                                    +      $00,$00,$00,$80,$00,$80,$01,$20,$01,$02,$00,$00,$32,$00,$80,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$80,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$a4,$92,$00,$00,$00,$00,$00,$00,$20,$a0,$00,$20
                                    +      $00,$02,$00,$00,$46,$00,$80,$10,$22,$44,$08,$11,$22,$44,$08,$81
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$10,$41,$00,$00,$12,$49,$00,$00
                                    +      $00,$00,$00,$00,$00,$a0,$00,$08,$40,$02,$00,$00,$02,$00,$80,$80
                                    +      $91,$a2,$c4,$88,$91,$a2,$84,$80,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$00,$00,$00,$a4,$92,$00,$00,$00,$00,$00,$00,$00,$08,$00,$08
                                    +      $50,$01,$00,$00,$00,$00,$00,$80,$c4,$88,$91,$a2,$c4,$88,$91,$80
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$00,$00,$00,$12,$49,$00,$00
                                    +      $00,$00,$00,$00,$20,$0a,$00,$02,$30,$02,$00,$00,$08,$00,$00,$80
                                    +      $91,$a2,$c4,$88,$91,$a2,$84,$80,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $02,$40,$00,$00,$a4,$92,$00,$00,$00,$00,$00,$00,$00,$02,$00,$02
                                    +      $14,$01,$00,$40,$00,$00,$80,$80,$c4,$88,$91,$a2,$c4,$88,$91,$81
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$c0,$00,$40,$00,$24,$02,$00,$40,$00,$00,$80,$80
                                    +      $91,$a2,$08,$11,$22,$44,$84,$80,$01,$04,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$c0,$00,$40,$00
                                    +      $11,$01,$00,$40,$00,$00,$80,$80,$c4,$c5,$a2,$d1,$a8,$94,$8a,$80
                                    +      $01,$04,$00,$00,$08,$11,$22,$20,$00,$08,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$90,$00,$10,$00,$25,$02,$00,$00,$02,$00,$80,$80
                                    +      $91,$85,$00,$00,$00,$00,$8a,$80,$01,$04,$00,$00,$22,$44,$08,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$50,$aa,$d5,$aa,$95,$00,$14,$20
                                    +      $12,$01,$00,$00,$02,$00,$80,$80,$c4,$95,$00,$7c,$07,$c0,$8a,$81
                                    +      $01,$04,$00,$00,$08,$11,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$04,$20,$a4,$02,$00,$10,$02,$00,$80,$80
                                    +      $91,$d5,$00,$30,$18,$d0,$8a,$80,$01,$04,$00,$00,$22,$44,$08,$04
                                    +      $00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$08
                                    +      $12,$01,$00,$10,$00,$00,$80,$80,$c4,$d5,$aa,$30,$18,$d5,$8a,$80
                                    +      $01,$04,$00,$00,$08,$11,$22,$00,$00,$00,$64,$08,$11,$44,$08,$00
                                    +      $00,$00,$00,$00,$00,$00,$01,$02,$a4,$02,$00,$10,$00,$00,$80,$80
                                    +      $91,$d5,$aa,$70,$07,$d5,$8a,$80,$01,$04,$00,$00,$22,$44,$08,$20
                                    +      $44,$08,$11,$22,$44,$11,$02,$00,$00,$00,$00,$00,$00,$20,$00,$02
                                    +      $12,$01,$00,$00,$00,$00,$80,$80,$c4,$d5,$80,$30,$18,$d0,$8a,$81
                                    +      $01,$04,$00,$00,$08,$11,$22,$08,$11,$22,$44,$08,$11,$44,$08,$00
                                    +      $00,$00,$00,$00,$00,$20,$40,$00,$a4,$02,$00,$00,$00,$00,$80,$80
                                    +      $91,$95,$00,$30,$18,$c0,$8a,$80,$01,$04,$00,$00,$22,$44,$08,$22
                                    +      $44,$08,$11,$22,$44,$11,$02,$00,$00,$00,$00,$00,$00,$08,$40,$00
                                    +      $12,$01,$00,$00,$00,$00,$80,$80,$c4,$85,$00,$7c,$07,$00,$8a,$80
                                    +      $01,$04,$00,$00,$08,$11,$40,$08,$11,$22,$44,$08,$11,$44,$08,$00
                                    +      $00,$00,$00,$00,$00,$08,$10,$00,$a4,$02,$08,$11,$22,$44,$80,$80
                                    +      $91,$c5,$a2,$d9,$a8,$94,$8a,$80,$01,$04,$00,$00,$00,$00,$10,$22
                                    +      $44,$08,$11,$22,$44,$11,$02,$00,$00,$00,$00,$00,$00,$02,$10,$00
                                    +      $12,$01,$22,$44,$08,$11,$80,$80,$c4,$88,$91,$a2,$c4,$88,$91,$81
                                    +      $01,$04,$00,$00,$00,$00,$40,$08,$11,$22,$44,$08,$11,$44,$08,$00
                                    +      $00,$00,$00,$00,$00,$00,$04,$00,$a4,$02,$08,$11,$22,$44,$80,$80
                                    +      $91,$a2,$c4,$88,$91,$a2,$84,$80,$01,$04,$00,$00,$00,$00,$10,$22
                                    +      $44,$08,$11,$22,$44,$11,$02,$00,$00,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$22,$44,$08,$11,$80,$80,$c4,$88,$91,$a2,$c4,$88,$91,$80
                                    +      $01,$04,$00,$00,$00,$00,$44,$08,$11,$22,$44,$08,$11,$44,$08,$00
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$08,$11,$22,$44,$80,$80
                                    +      $91,$a2,$c4,$88,$91,$a2,$84,$80,$01,$04,$00,$00,$00,$00,$11,$22
                                    +      $44,$08,$11,$22,$44,$11,$02,$00,$00,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$22,$44,$08,$11,$80,$80,$c4,$88,$91,$a2,$c4,$88,$91,$81
                                    +      $01,$04,$00,$00,$00,$00,$44,$08,$11,$22,$44,$08,$11,$44,$08,$00
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$08,$11,$22,$44,$80,$80
                                    +      $91,$a2,$c4,$88,$91,$a2,$84,$80,$01,$04,$00,$00,$00,$00,$11,$00
                                    +      $00,$00,$00,$00,$80,$11,$02,$00,$00,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$22,$44,$08,$11,$80,$80,$c4,$88,$91,$a2,$c4,$88,$91,$80
                                    +      $01,$04,$00,$00,$00,$00,$44,$91,$a2,$c4,$88,$91,$8a,$44,$08,$00
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$08,$11,$22,$44,$80,$80
                                    +      $91,$a2,$c4,$88,$91,$a2,$84,$80,$01,$04,$00,$00,$00,$00,$11,$85
                                    +      $00,$0c,$18,$00,$8a,$11,$02,$00,$00,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$00,$00,$00,$00,$80,$80,$80,$80,$80,$80,$80,$80,$80,$81
                                    +      $01,$04,$00,$00,$00,$00,$44,$95,$00,$3c,$1e,$c0,$8a,$44,$08,$00
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$00,$00,$00,$00,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$01,$04,$00,$00,$00,$00,$11,$d5
                                    +      $00,$4c,$19,$d0,$8a,$11,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$00,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
                                    +      $01,$04,$00,$00,$00,$00,$44,$95,$a2,$0c,$18,$d1,$8a,$44,$08,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$00,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$01,$24,$12,$49,$24,$00,$11,$95
                                    +      $a2,$0c,$18,$91,$8a,$11,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$00,$80,$80,$80,$80,$80,$80,$80,$80,$80,$81
                                    +      $01,$00,$00,$00,$00,$02,$44,$d5,$80,$0c,$18,$d0,$8a,$44,$08,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$00,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$c0,$80,$01,$00,$00,$00,$00,$02,$11,$95
                                    +      $00,$0c,$18,$c0,$8a,$11,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$51,$24,$12,$49,$24,$24,$12,$49,$24,$92,$c9,$a4,$92,$c9,$a4
                                    +      $00,$00,$00,$00,$00,$02,$44,$85,$00,$00,$00,$00,$8a,$44,$08,$00
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$49,$24,$12,$49,$49,$24
                                    +      $12,$49,$a4,$92,$c9,$a4,$92,$c9,$00,$00,$00,$00,$00,$02,$11,$91
                                    +      $a2,$c4,$88,$91,$8a,$11,$02,$00,$00,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$24,$12,$49,$24,$24,$12,$49,$24,$92,$c9,$a4,$92,$c9,$a4
                                    +      $00,$00,$00,$00,$00,$02,$44,$08,$a2,$22,$44,$08,$11,$44,$08,$00
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$49,$24,$12,$49,$49,$24
                                    +      $12,$49,$a4,$92,$c9,$a4,$92,$c9,$00,$00,$00,$00,$00,$02,$11,$22
                                    +      $88,$08,$11,$22,$44,$11,$02,$00,$00,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$24,$12,$49,$24,$24,$12,$49,$24,$92,$c9,$a4,$92,$c9,$a4
                                    +      $00,$00,$00,$00,$00,$02,$44,$08,$a2,$22,$44,$08,$11,$44,$08,$00
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$49,$24,$12,$49,$49,$24
                                    +      $12,$49,$a4,$92,$c9,$a4,$92,$c9,$00,$00,$00,$00,$00,$02,$11,$22
                                    +      $88,$08,$11,$22,$44,$11,$02,$00,$00,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$41,$24,$12,$49,$24,$24,$12,$49,$24,$92,$c9,$a4,$92,$c9,$a4
                                    +      $92,$c9,$a4,$92,$00,$02,$44,$08,$a2,$22,$a2,$c4,$88,$44,$08,$00
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$49,$24,$12,$49,$49,$24
                                    +      $12,$49,$a4,$92,$c9,$a4,$92,$c9,$a4,$92,$c9,$a4,$00,$02,$11,$22
                                    +      $88,$08,$88,$91,$a2,$11,$02,$00,$00,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$24,$12,$49,$24,$24,$12,$49,$24,$92,$c9,$a4,$92,$c9,$a4
                                    +      $92,$c9,$a4,$92,$00,$02,$44,$08,$a2,$22,$a2,$c4,$88,$44,$08,$00
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$49,$24,$12,$49,$49,$24
                                    +      $12,$49,$a4,$92,$c9,$a4,$92,$c9,$a4,$92,$c9,$a4,$00,$02,$11,$22
                                    +      $44,$08,$88,$91,$a2,$11,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$24,$12,$49,$24,$24,$12,$49,$24,$92,$c9,$a4,$92,$c9,$a4
                                    +      $92,$c9,$a4,$92,$00,$02,$44,$08,$11,$22,$a2,$c4,$88,$44,$08,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$49,$24,$12,$49,$49,$24
                                    +      $12,$49,$a4,$92,$c9,$a4,$92,$c9,$a4,$92,$c9,$a4,$00,$02,$11,$22
                                    +      $44,$08,$88,$91,$a2,$11,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$24,$12,$49,$24,$24,$12,$49,$24,$92,$c9,$a4,$92,$c9,$a4
                                    +      $92,$c9,$a4,$92,$00,$02,$44,$08,$11,$22,$a2,$c4,$88,$44,$08,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$c4,$49,$24,$12,$49,$49,$24
                                    +      $12,$49,$a4,$92,$c9,$a4,$92,$c9,$a4,$92,$c9,$a4,$00,$02,$11,$22
                                    +      $44,$08,$88,$91,$a2,$11,$02,$00,$00,$00,$00,$00,$00,$00,$20,$00
                                    +      $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$22,$92
                                    +      $00,$00,$00,$40,$00,$02,$44,$08,$11,$22,$a2,$c4,$88,$44,$08,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$40,$08,$11,$22,$44,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$11,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$91
                                    +      $a2,$c4,$88,$40,$00,$02,$44,$08,$11,$22,$44,$08,$11,$44,$08,$01
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$40,$08,$11,$22,$44,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$11,$02,$01,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$22,$91
                                    +      $a2,$c4,$88,$40,$00,$02,$04,$00,$00,$00,$00,$00,$00,$44,$08,$01
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$40,$08,$11,$22,$44,$40,$00,$02,$11,$95
                                    +      $aa,$d4,$a8,$d1,$8a,$11,$02,$01,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$91
                                    +      $a2,$c4,$88,$40,$00,$02,$44,$85,$00,$0c,$18,$00,$8a,$44,$08,$01
                                    +      $00,$44,$08,$11,$22,$44,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$40,$08,$11,$22,$44,$40,$00,$02,$11,$95
                                    +      $00,$3c,$1e,$c0,$8a,$11,$02,$01,$00,$11,$22,$44,$08,$11,$02,$00
                                    +      $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$22,$91
                                    +      $a2,$c4,$88,$40,$00,$02,$44,$d5,$00,$4c,$19,$d0,$8a,$44,$08,$01
                                    +      $00,$44,$08,$11,$22,$44,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$40,$08,$11,$22,$44,$40,$00,$02,$11,$d5
                                    +      $aa,$0c,$18,$d5,$8a,$11,$02,$01,$00,$11,$22,$44,$08,$11,$02,$00
                                    +      $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00
                                    +      $00,$00,$00,$40,$00,$02,$44,$d5,$aa,$0c,$18,$d5,$8a,$44,$08,$01
                                    +      $00,$44,$08,$11,$22,$44,$08,$00,$00,$00,$aa,$d5,$aa,$d5,$9a,$00
                                    +      $aa,$d5,$aa,$d5,$9a,$00,$40,$00,$00,$00,$00,$40,$00,$02,$11,$d5
                                    +      $80,$0c,$18,$d0,$8a,$11,$02,$01,$00,$11,$22,$44,$08,$11,$02,$00
                                    +      $02,$02,$92,$7c,$07,$92,$cc,$02,$92,$7c,$07,$92,$cc,$02,$22,$00
                                    +      $00,$00,$00,$40,$00,$02,$44,$95,$00,$0c,$18,$c0,$8a,$44,$08,$01
                                    +      $00,$44,$00,$00,$00,$00,$08,$00,$00,$00,$49,$30,$18,$49,$99,$00
                                    +      $49,$30,$18,$49,$99,$00,$40,$00,$00,$00,$00,$40,$00,$02,$11,$85
                                    +      $00,$00,$00,$00,$8a,$11,$02,$01,$00,$11,$d5,$aa,$d5,$aa,$02,$00
                                    +      $20,$20,$92,$30,$18,$92,$cc,$20,$92,$30,$18,$92,$cc,$20,$20,$08
                                    +      $11,$22,$44,$40,$00,$02,$44,$95,$aa,$d4,$a8,$d1,$8a,$44,$08,$01
                                    +      $00,$04,$89,$91,$a2,$a4,$08,$00,$00,$00,$49,$70,$07,$49,$99,$00
                                    +      $49,$70,$07,$49,$99,$00,$40,$91,$a2,$c4,$88,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$11,$02,$01,$00,$11,$a3,$c4,$88,$b1,$02,$00
                                    +      $02,$02,$92,$30,$00,$92,$cc,$02,$92,$30,$00,$92,$cc,$02,$22,$09
                                    +      $11,$22,$44,$40,$00,$02,$44,$08,$11,$22,$44,$08,$11,$44,$08,$01
                                    +      $00,$44,$89,$91,$a2,$a4,$08,$00,$00,$00,$49,$30,$00,$49,$99,$00
                                    +      $49,$30,$00,$49,$99,$00,$40,$91,$a2,$c4,$88,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$11,$02,$01,$00,$11,$a3,$c4,$88,$b1,$02,$00
                                    +      $20,$20,$92,$7c,$01,$92,$cc,$20,$92,$7c,$01,$92,$cc,$20,$20,$08
                                    +      $11,$22,$44,$40,$00,$02,$44,$08,$11,$22,$44,$08,$11,$44,$08,$01
                                    +      $00,$44,$89,$0c,$18,$a4,$08,$00,$00,$00,$aa,$d5,$aa,$d5,$9a,$00
                                    +      $aa,$d5,$aa,$d5,$9a,$00,$40,$91,$a2,$c4,$88,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$11,$02,$01,$00,$11,$a3,$3c,$1e,$b1,$02,$00
                                    +      $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$22,$09
                                    +      $11,$22,$44,$40,$00,$02,$44,$08,$11,$22,$44,$08,$11,$44,$08,$01
                                    +      $00,$44,$89,$4c,$19,$a4,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$40,$91,$a2,$c4,$88,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$11,$02,$01,$00,$11,$a3,$0c,$18,$b1,$02,$00
                                    +      $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$08
                                    +      $11,$22,$44,$40,$00,$02,$44,$08,$11,$22,$44,$08,$11,$22,$04,$01
                                    +      $00,$44,$89,$0c,$18,$a4,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$40,$00,$00,$00,$00,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$08,$11,$01,$00,$11,$a3,$0c,$18,$b1,$02,$00
                                    +      $00,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$22,$11
                                    +      $22,$44,$00,$40,$00,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
                                    +      $00,$44,$89,$0c,$18,$a4,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$40,$00,$00,$00,$00,$40,$00,$02,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$01,$00,$11,$a3,$00,$00,$b1,$02,$00
                                    +      $00,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
                                    +      $00,$44,$89,$91,$a2,$a4,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $aa,$d5,$aa,$d5,$9a,$00,$00,$00,$00,$00,$00,$40,$00,$02,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$01,$00,$11,$a3,$c4,$88,$b1,$02,$00
                                    +      $00,$00,$02,$02,$02,$02,$02,$02,$92,$7c,$07,$92,$cc,$02,$02,$00
                                    +      $00,$00,$08,$40,$00,$02,$00,$00,$00,$00,$00,$00,$01,$04,$00,$01
                                    +      $00,$44,$89,$91,$a2,$a4,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $49,$30,$18,$49,$99,$00,$00,$00,$00,$00,$00,$40,$00,$02,$00,$00
                                    +      $00,$00,$00,$00,$01,$04,$00,$01,$00,$11,$a3,$c4,$88,$b1,$02,$00
                                    +      $00,$00,$20,$20,$20,$20,$20,$20,$92,$30,$18,$92,$cc,$20,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$22,$44,$08,$00,$01,$04,$00,$01
                                    +      $00,$44,$d5,$aa,$d5,$aa,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $49,$70,$07,$49,$99,$00,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $88,$91,$82,$00,$01,$04,$00,$01,$00,$11,$22,$00,$00,$11,$02,$00
                                    +      $00,$00,$00,$02,$02,$02,$02,$02,$92,$30,$00,$92,$cc,$02,$02,$00
                                    +      $00,$00,$00,$41,$00,$02,$00,$11,$22,$44,$08,$00,$01,$04,$00,$01
                                    +      $00,$44,$08,$01,$20,$44,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $49,$30,$00,$49,$99,$00,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $88,$91,$82,$00,$01,$04,$00,$01,$00,$11,$22,$00,$00,$11,$02,$00
                                    +      $00,$00,$00,$20,$20,$20,$20,$20,$92,$7c,$01,$92,$cc,$20,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$00,$00,$08,$00,$01,$04,$00,$01
                                    +      $00,$44,$08,$01,$20,$44,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $aa,$d5,$aa,$d5,$9a,$00,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $7c,$07,$82,$00,$01,$04,$00,$01,$00,$11,$22,$00,$00,$11,$02,$00
                                    +      $00,$00,$00,$00,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00
                                    +      $00,$00,$00,$50,$00,$02,$00,$11,$30,$18,$08,$00,$01,$04,$00,$01
                                    +      $00,$44,$08,$01,$20,$44,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $30,$18,$82,$00,$01,$04,$00,$01,$00,$11,$22,$04,$00,$11,$02,$00
                                    +      $00,$00,$00,$00,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$70,$07,$08,$00,$01,$04,$00,$01
                                    +      $00,$44,$08,$01,$20,$44,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $30,$18,$82,$00,$01,$04,$00,$01,$00,$11,$22,$04,$00,$11,$02,$00
                                    +      $00,$00,$00,$00,$00,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$30,$18,$08,$00,$01,$04,$00,$01
                                    +      $00,$44,$08,$11,$20,$44,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $7c,$07,$82,$00,$01,$04,$00,$01,$00,$11,$22,$04,$00,$11,$02,$00
                                    +      $00,$00,$00,$00,$00,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00,$00

                                   .org    $3000
                   ********************************************************************************
                   * Initial entry point.                                                         *
                   *                                                                              *
                   * Relocates data from the hi-res page to high memory, ovewriting the disk I/O  *
                   * routines, then starts the game.                                              *
                   ********************************************************************************
3000: a0 00        Entry           ldy     #$00
3002: b9 00 20     :_CopyLoop      lda     $2000,y           ;copy $2000-2fff to $b000-bfff
3005: 99 00 b0     :_Store         sta     terrain_2,y
3008: c8                           iny
3009: d0 f7                        bne     :_CopyLoop
300b: ee 04 30                     inc     :_CopyLoop+2      ;increment high bytes
300e: ee 07 30                     inc     :_Store+2
3011: ad 04 30                     lda     :_CopyLoop+2
3014: c9 30                        cmp     #$30              ;done yet?
3016: d0 ea                        bne     :_CopyLoop        ;no, branch
3018: ad 83 c0                     lda     LCBANK2           ;enable write to language card
301b: ad 83 c0                     lda     LCBANK2
301e: a9 65                        lda     #$65
3020: 8d fc ff                     sta     RESET_VECTOR      ;set the reset vector (why?)
3023: a9 ff                        lda     #$ff
3025: 8d fd ff                     sta     RESET_VECTOR+1
3028: ad 82 c0                     lda     ROMIN_RO          ;reset to ROM
302b: 4c b0 15                     jmp     GameStart         ;start the game

302e: 00 00 00 00+                 .junk   25

                                   .org    $4000
                   ; 
                   ; Enemy plane explosion sequence (6x36).  Each frame is on its own page.
                   vis vis
4000: d5 aa d5 aa+ enemy_pl_exp_0  .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$a9,$d5,$aa,$d5,$aa
                                    +      $d5,$ad,$d5,$aa,$d5,$aa,$d5,$ac,$d5,$aa,$d5,$aa,$d5,$a4,$d5,$aa
                                    +      $d5,$aa,$d5,$a4,$d5,$ac,$d5,$aa,$d5,$a5,$95,$a9,$d5,$aa,$d5,$b5
                                    +      $a5,$ab,$d5,$aa,$a5,$b5,$ad,$aa,$d5,$ca,$a2,$d5,$aa,$aa,$d5,$d4
                                    +      $aa,$d5,$ea,$aa,$95,$d1,$aa,$d5,$ca,$aa,$95,$d5,$8a,$d4,$da,$aa
                                    +      $d5,$92,$ea,$d3,$d2,$aa,$d5,$aa,$ea,$d1,$d4,$aa,$d5,$aa,$ea,$fe
                                    +      $d5,$aa,$d5,$ca,$aa,$fe,$d4,$aa,$d5,$ca,$8a,$d5,$d4,$aa,$d5,$d2
                                    +      $d0,$c7,$d2,$aa,$d5,$aa,$9d,$d5,$ca,$aa,$d5,$ca,$8a,$d1,$ca,$aa
                                    +      $d5,$da,$9c,$85,$ca,$aa,$d5,$d5,$90,$a9,$d5,$aa,$d5,$95,$95,$aa
                                    +      $d5,$aa,$d5,$a4,$95,$aa,$d5,$aa,$d5,$aa,$95,$a8,$d5,$aa,$d5,$aa
                                    +      $95,$8a,$d5,$aa,$d5,$aa,$95,$8b,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
40d8: e8 e8 e8 e8+                 .align  $0100 (40 bytes)

                   vis
4100: d5 aa d5 aa+                 .bulk   $d5,$aa,$d5,$aa,$a1,$a9,$d5,$aa,$d5,$aa,$95,$aa,$d5,$aa,$94,$ab
                                    +      $a9,$a5,$d5,$d2,$8a,$ab,$aa,$a9,$d5,$ea,$aa,$a9,$ca,$aa,$d5,$ea
                                    +      $a9,$c1,$da,$aa,$d5,$aa,$a9,$d9,$d2,$aa,$d5,$aa,$a9,$c5,$d2,$aa
                                    +      $d5,$aa,$ad,$d5,$d2,$aa,$d5,$aa,$ad,$d5,$c2,$a8,$d5,$aa,$a5,$d5
                                    +      $a8,$d0,$d5,$aa,$a9,$d5,$aa,$d5,$d5,$aa,$aa,$c5,$8a,$a5,$d5,$d5
                                    +      $aa,$df,$8a,$a9,$ad,$d1,$aa,$ff,$ab,$aa,$a5,$95,$ea,$f3,$eb,$aa
                                    +      $d5,$da,$92,$f0,$cb,$aa,$d5,$ca,$ce,$f0,$ca,$aa,$d5,$d2,$ea,$e5
                                    +      $da,$d6,$d5,$94,$ea,$a1,$aa,$b5,$d5,$d5,$da,$bf,$aa,$b5,$ad,$ab
                                    +      $98,$d3,$d2,$a4,$ad,$eb,$aa,$c7,$d2,$aa,$d5,$ca,$aa,$c5,$da,$aa
                                    +      $d5,$ca,$a0,$d1,$da,$aa,$d5,$d2,$a8,$95,$ca,$aa,$d5,$95,$ad,$d0
                                    +      $aa,$aa,$b5,$a5,$ac,$95,$ad,$aa,$ad,$ab,$a9,$a5,$a9,$8b,$dd,$aa
                                    +      $a9,$a5,$a9,$ab,$d5,$aa,$a9,$ad,$95,$aa,$d5,$aa,$a5,$a9,$d5,$aa
                                    +      $d5,$aa,$a5,$ab,$d5,$aa,$d5,$aa,$b5,$ab,$d5,$aa,$d5,$aa,$b5,$ab
                                    +      $d5,$aa,$d5,$aa,$85,$ab,$d5,$aa
41d8: e8 e8 e8 e8+                 .align  $0100 (40 bytes)

                   vis
4200: d5 aa d5 aa+                 .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$b5,$a5
                                    +      $d5,$aa,$d5,$aa,$b5,$ad,$d5,$aa,$d5,$aa,$b5,$ad,$d5,$aa,$d5,$aa
                                    +      $b5,$ad,$d5,$aa,$d5,$aa,$d4,$aa,$d5,$aa,$d5,$aa,$d4,$a2,$a9,$a9
                                    +      $d5,$ca,$d0,$aa,$a9,$ab,$d5,$aa,$d5,$aa,$ab,$aa,$d5,$aa,$d5,$a2
                                    +      $ea,$aa,$b5,$a9,$d5,$ab,$c9,$aa,$b5,$a9,$d5,$a9,$d5,$aa,$95,$85
                                    +      $f5,$a9,$d5,$aa,$95,$a5,$dd,$ab,$d5,$aa,$d5,$ad,$a5,$cd,$97,$aa
                                    +      $d5,$ad,$fd,$e5,$d7,$aa,$d5,$aa,$9b,$f3,$f5,$aa,$d5,$aa,$ea,$f2
                                    +      $f5,$aa,$d5,$aa,$de,$aa,$b9,$aa,$d5,$8a,$d5,$a8,$d5,$aa,$d5,$be
                                    +      $c5,$a8,$95,$aa,$d5,$be,$f1,$b1,$a5,$a9,$d5,$aa,$9e,$bf,$a5,$a9
                                    +      $d5,$aa,$c7,$8f,$a1,$a5,$d5,$a5,$c5,$c3,$d5,$a5,$95,$a9,$d5,$f9
                                    +      $d5,$aa,$a5,$a9,$d5,$ff,$d5,$aa,$ad,$a9,$d5,$9f,$d5,$aa,$ed,$aa
                                    +      $d5,$a7,$d5,$aa,$ed,$ea,$d2,$aa,$d5,$aa,$d5,$ca,$d2,$ea,$c2,$aa
                                    +      $d5,$d2,$d4,$ca,$ea,$aa,$d5,$94,$d5,$d5,$ea,$aa,$d5,$a4,$d5,$a1
                                    +      $eb,$aa,$d5,$aa,$d5,$aa,$d5,$aa
42d8: e8 e8 e8 e8+                 .align  $0100 (40 bytes)

                   vis
4300: d5 aa d5 aa+                 .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$f5,$aa,$d5,$aa
                                    +      $d5,$d6,$d5,$aa,$d5,$a4,$d5,$d6,$d5,$aa,$d5,$a4,$d5,$aa,$d5,$aa
                                    +      $d5,$a4,$fd,$ef,$d6,$aa,$d5,$a5,$fd,$eb,$d6,$aa,$d5,$a9,$fd,$a1
                                    +      $dd,$aa,$d5,$ab,$b9,$a7,$d7,$aa,$d5,$aa,$b7,$ab,$d7,$aa,$d5,$aa
                                    +      $f4,$8a,$d5,$aa,$d5,$aa,$cf,$aa,$d8,$aa,$d5,$aa,$d7,$bc,$98,$aa
                                    +      $d5,$fa,$d5,$9e,$be,$aa,$d5,$ba,$d5,$f3,$d5,$aa,$d5,$bc,$f9,$bf
                                    +      $d5,$aa,$d5,$88,$8e,$9b,$95,$a5,$d5,$aa,$f1,$ef,$b5,$a9,$d5,$c2
                                    +      $99,$ff,$d5,$8d,$d5,$ea,$f8,$bf,$d5,$ab,$d5,$9b,$84,$9f,$d5,$ab
                                    +      $d5,$99,$b5,$c7,$96,$aa,$f5,$e9,$fb,$a1,$d5,$aa,$d5,$a9,$8e,$a9
                                    +      $d5,$aa,$d5,$aa,$d5,$a9,$d5,$aa,$d5,$aa,$f9,$ab,$d5,$aa,$d5,$aa
                                    +      $f9,$ab,$d5,$aa,$d5,$aa,$91,$aa,$d5,$aa,$d5,$b2,$d5,$d2,$d5,$aa
                                    +      $d5,$aa,$d5,$d5,$d4,$aa,$d5,$aa,$d5,$ea,$d4,$aa,$d5,$aa,$d5,$ea
                                    +      $94,$aa,$d5,$aa,$d5,$8a,$d5,$aa
43d8: e8 e8 e8 e8+                 .align  $0100 (40 bytes)

                   vis
4400: d5 aa d5 aa+                 .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$a8,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $e5,$ab,$d5,$aa,$d5,$aa,$bd,$91,$d5,$a7,$d5,$ea,$ff,$df,$f5,$a6
                                    +      $d5,$aa,$fe,$cf,$fb,$a7,$d5,$c2,$ff,$f7,$98,$a9,$d5,$84,$fc,$f7
                                    +      $dc,$a9,$d5,$8f,$fc,$a1,$f4,$aa,$d5,$bf,$88,$c1,$d3,$aa,$d5,$af
                                    +      $d5,$85,$d6,$aa,$d5,$9f,$88,$87,$d4,$a9,$d5,$a0,$8f,$bf,$f4,$ab
                                    +      $d5,$b1,$dc,$cd,$ff,$ab,$d5,$bf,$fc,$8f,$d3,$8b,$f5,$bf,$bf,$c7
                                    +      $d3,$9a,$f5,$a9,$bf,$c0,$d3,$92,$d5,$ea,$fd,$f0,$c6,$aa,$d5,$ea
                                    +      $fd,$f1,$f5,$aa,$d5,$ea,$ff,$fd,$fc,$a3,$d5,$ea,$fb,$ff,$fc,$ab
                                    +      $d5,$e9,$df,$bf,$fe,$a9,$f5,$a9,$ff,$af,$ff,$aa,$d5,$aa,$fd,$a9
                                    +      $bf,$aa,$d5,$ca,$d3,$ea,$d7,$aa,$d5,$ea,$d3,$ea,$d5,$aa,$d5,$ea
                                    +      $9f,$aa,$d5,$aa,$d5,$ea,$d3,$8a,$d5,$aa,$d5,$aa,$d5,$ea,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
44d8: e8 e8 e8 e8+                 .align  $0100 (40 bytes)

                   vis
4500: d5 aa d5 aa+                 .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d4,$aa,$d5,$aa,$d5,$aa,$9f,$aa,$d5,$aa
                                    +      $d5,$aa,$af,$a8,$d5,$aa,$d5,$aa,$cf,$ab,$d5,$aa,$d4,$aa,$e2,$8f
                                    +      $d5,$aa,$d4,$aa,$f8,$f9,$9f,$aa,$d5,$aa,$ff,$ff,$b5,$a9,$d5,$da
                                    +      $ff,$cb,$a5,$ab,$d5,$fa,$ff,$a9,$a4,$aa,$f5,$b6,$f7,$89,$a3,$aa
                                    +      $f9,$be,$be,$a9,$a3,$aa,$d9,$8f,$be,$a9,$a1,$aa,$89,$ae,$ba,$a9
                                    +      $d9,$aa,$d5,$86,$eb,$ef,$c9,$aa,$d5,$8e,$e5,$ff,$cd,$aa,$d5,$9b
                                    +      $d5,$ff,$f7,$a9,$d5,$af,$d4,$ff,$fb,$a9,$d5,$ff,$b4,$ff,$fb,$ab
                                    +      $d5,$ff,$81,$fe,$fd,$aa,$d5,$f0,$85,$be,$ff,$aa,$d5,$f0,$e0,$bf
                                    +      $be,$aa,$d5,$ca,$fe,$bf,$bb,$aa,$d5,$ca,$bf,$97,$91,$aa,$d5,$ea
                                    +      $8e,$eb,$d5,$aa,$c5,$aa,$f1,$a9,$d5,$a9,$d5,$aa,$9f,$ab,$d5,$89
                                    +      $d5,$aa,$d5,$ab,$d5,$aa,$d5,$aa,$d5,$91,$d5,$aa,$d5,$aa,$d5,$b1
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
45d8: e8 e8 e8 e8+                 .align  $0100 (40 bytes)

                   vis
4600: d5 aa d5 aa+                 .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$94,$d5,$ab,$fd,$aa,$d5,$9e,$d5,$a9
                                    +      $f5,$aa,$d5,$ae,$d5,$a9,$9d,$aa,$d5,$8a,$8d,$a9,$d5,$aa,$d5,$aa
                                    +      $8e,$9f,$d5,$aa,$d5,$aa,$c3,$8f,$d5,$aa,$d5,$aa,$d5,$01,$d5,$aa
                                    +      $d5,$aa,$d5,$e1,$91,$aa,$d5,$aa,$d5,$bd,$f5,$aa,$d5,$aa,$d5,$bf
                                    +      $c9,$aa,$d5,$ba,$a5,$bf,$c9,$aa,$d5,$ea,$ef,$af,$ee,$aa,$d5,$ca
                                    +      $83,$cb,$cf,$aa,$d5,$aa,$d5,$e1,$c4,$aa,$d5,$aa,$f0,$bf,$d5,$aa
                                    +      $d5,$aa,$fe,$ef,$d6,$aa,$d5,$a2,$fe,$bf,$d6,$aa,$d5,$aa,$fd,$cb
                                    +      $d5,$aa,$d5,$aa,$cd,$b1,$d5,$aa,$d5,$aa,$f9,$ad,$d5,$aa,$d5,$aa
                                    +      $d5,$8b,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
46d8: e8 e8 e8 e8+                 .align  $0100 (40 bytes)

                   ; 
                   ; Plane veering off to left.  (6x23)
                   vis vis
4700: d5 aa d5 aa+ plane_left_0    .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $f5,$ab,$d5,$aa,$d5,$aa,$fd,$a7,$d5,$aa,$d5,$aa,$dd,$af,$d5,$aa
                                    +      $d5,$aa,$ed,$9e,$d5,$aa,$d5,$aa,$dd,$7a,$d7,$ea,$d5,$aa,$dd,$6e
                                    +      $7f,$7f,$d5,$aa,$fd,$6d,$d5,$aa,$d5,$fa,$77,$2f,$d5,$aa,$95,$7f
                                    +      $67,$bd,$d5,$aa,$f7,$1f,$f5,$af,$d5,$aa,$c6,$ea,$d5,$a6,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
478a: e8 e8 e8 e8+                 .junk   6

                   vis
4790: d5 aa d5 aa+ plane_left_1    .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$df,$aa,$d5,$aa,$d5,$aa
                                    +      $7f,$aa,$d5,$aa,$d5,$aa,$6b,$a9,$d5,$aa,$d5,$aa,$7b,$ab,$d5,$aa
                                    +      $d5,$aa,$bf,$a7,$d5,$aa,$d5,$aa,$2f,$7b,$ff,$6f,$d5,$aa,$ff,$bf
                                    +      $f7,$aa,$d5,$aa,$df,$bd,$d5,$aa,$d5,$aa,$ff,$af,$d5,$aa,$d5,$ea
                                    +      $ef,$bf,$d5,$aa,$d5,$fe,$e9,$df,$d5,$aa,$d5,$af,$d5,$7e,$d5,$aa
                                    +      $fd,$ab,$d7,$b6,$d5,$aa,$bd,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
481a: e8 e8 e8 e8+                 .junk   6

                   vis
4820: d5 aa d5 aa+ plane_left_2    .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$df,$aa,$d5,$aa,$d5,$ea
                                    +      $ff,$aa,$d5,$aa,$d5,$ea,$ef,$ea,$d5,$aa,$d5,$ea,$a7,$eb,$d5,$7f
                                    +      $d5,$ea,$ff,$67,$ff,$af,$d5,$aa,$bf,$bd,$ff,$ab,$d5,$aa,$3e,$ef
                                    +      $d7,$aa,$d5,$aa,$bd,$fd,$df,$aa,$d5,$aa,$f9,$f5,$d4,$aa,$d5,$ca
                                    +      $f7,$f5,$d5,$aa,$d5,$fa,$df,$ff,$d5,$aa,$d5,$de,$cf,$fe,$dd,$aa
                                    +      $d5,$af,$d5,$fa,$d9,$aa,$f5,$aa,$d7,$aa,$d5,$aa,$cd,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
48aa: e8 e8 e8 e8+                 .junk   6

                   vis
48b0: d5 aa d5 aa+ plane_left_3    .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$ea,$df,$aa,$d5,$be,$d5,$ea
                                    +      $ff,$ea,$d5,$af,$d5,$ea,$eb,$e9,$fd,$a9,$d5,$ea,$ff,$eb,$3f,$aa
                                    +      $d5,$aa,$ef,$ff,$cf,$aa,$d5,$aa,$ef,$fb,$d3,$aa,$d5,$aa,$3e,$bd
                                    +      $d5,$aa,$d5,$aa,$b9,$bd,$d5,$aa,$d5,$aa,$fe,$f6,$d5,$aa,$d5,$ea
                                    +      $cd,$ff,$d5,$aa,$d5,$fa,$d7,$fe,$d5,$aa,$d5,$fa,$d1,$de,$d7,$aa
                                    +      $d5,$1e,$d7,$fa,$d7,$aa,$d5,$a7,$d5,$aa,$d5,$aa,$e5,$a9,$d5,$aa
                                    +      $d5,$aa,$bd,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
493a: e8 e8 e8 e8+                 .junk   6

                   vis
4940: d5 aa d5 aa+ plane_left_4    .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$9a,$d5,$fa,$d7,$aa
                                    +      $d5,$af,$d5,$fa,$db,$aa,$f5,$ab,$d5,$fa,$be,$aa,$fd,$aa,$d5,$ba
                                    +      $fe,$ea,$f7,$aa,$d5,$fa,$ff,$f9,$dd,$aa,$d5,$fa,$fb,$f9,$d7,$aa
                                    +      $d5,$ea,$ef,$ef,$d5,$aa,$d5,$aa,$5f,$9f,$d5,$aa,$d5,$aa,$3e,$9d
                                    +      $d5,$aa,$d5,$aa,$ff,$b7,$d6,$aa,$d5,$da,$ef,$df,$d6,$aa,$d5,$fa
                                    +      $8b,$ff,$d4,$aa,$d5,$fa,$d3,$dc,$d7,$aa,$d5,$da,$d5,$ba,$d7,$aa
                                    +      $d5,$be,$d5,$ab,$d5,$aa,$d5,$af,$d5,$aa,$d5,$aa,$d5,$ab,$d5,$aa
                                    +      $d5,$aa,$e5,$aa,$d5,$aa,$d5,$aa,$dd,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
49ca: e8 e8 e8 e8+                 .junk   6

                   vis
49d0: d5 7e d5 aa+ plane_left_5    .bulk   $d5,$7e,$d5,$aa,$d5,$bc,$d5,$d6,$d3,$aa,$d5,$af,$d5,$9e,$df,$aa
                                    +      $fd,$ab,$d5,$ce,$de,$ea,$7d,$aa,$d5,$9e,$fb,$ba,$df,$aa,$d5,$fe
                                    +      $fe,$fa,$df,$aa,$d5,$fa,$fb,$ff,$d7,$aa,$d5,$fa,$ef,$ef,$d5,$aa
                                    +      $d5,$ea,$eb,$9f,$d5,$aa,$d5,$aa,$ff,$af,$d5,$aa,$d5,$aa,$de,$bd
                                    +      $dd,$aa,$d5,$aa,$7d,$be,$dd,$aa,$d5,$ea,$f7,$ff,$d7,$aa,$d5,$be
                                    +      $6f,$ff,$d7,$aa,$d5,$fa,$df,$fd,$d7,$aa,$d5,$fe,$d3,$da,$d5,$aa
                                    +      $d5,$f6,$d5,$aa,$d5,$aa,$d5,$9d,$d5,$aa,$d5,$aa,$d5,$af,$d5,$aa
                                    +      $d5,$aa,$f5,$ab,$d5,$aa,$d5,$aa,$fd,$aa,$d5,$aa,$d5,$aa,$df,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
4a5a: e8 e8 e8 e8+                 .junk   6

                   ; 
                   ; Plane, rising.  (23x6)
                   vis vis
4a60: d5 aa d5 aa+ plane_rising_0  .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$a9,$d5,$aa,$d5,$aa
                                    +      $f5,$ab,$d5,$aa,$d5,$aa,$f5,$a7,$d5,$aa,$d5,$aa,$f5,$a7,$d5,$aa
                                    +      $d5,$aa,$fd,$af,$d5,$aa,$d5,$aa,$fd,$ae,$d5,$aa,$d5,$aa,$fd,$ae
                                    +      $d5,$aa,$d5,$fa,$7b,$6e,$d7,$aa,$93,$6f,$6b,$6a,$ff,$fa,$ff,$2f
                                    +      $d7,$f5,$fa,$ff,$d7,$aa,$f5,$a7,$d5,$aa,$d5,$aa,$f5,$ab,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
4aea: e8 e8 e8 e8+                 .junk   6

                   vis
4af0: d5 aa d5 aa+ plane_rising_1  .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $f5,$ab,$d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa,$fd,$af,$d5,$aa
                                    +      $d5,$aa,$fd,$af,$d5,$aa,$d5,$aa,$fd,$ae,$d5,$aa,$d5,$aa,$fd,$ae
                                    +      $d5,$aa,$d5,$aa,$fd,$ac,$d5,$aa,$d7,$fe,$fb,$6e,$df,$ae,$ff,$7f
                                    +      $fb,$6e,$7f,$3f,$d5,$eb,$f5,$ae,$d5,$aa,$d5,$aa,$f5,$ab,$d5,$aa
                                    +      $d5,$aa,$f5,$ab,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
4b7a: e8 e8 e8 e8+                 .junk   6

                   vis
4b80: d5 aa d5 aa+ plane_rising_2  .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$ab,$d5,$aa,$d5,$aa
                                    +      $f5,$ab,$d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa,$bd,$ae,$d5,$aa
                                    +      $d5,$aa,$dd,$ad,$d5,$aa,$d5,$aa,$fd,$af,$d5,$aa,$d5,$aa,$fd,$be
                                    +      $d5,$aa,$d5,$aa,$fd,$bf,$d5,$aa,$d5,$aa,$fd,$be,$d6,$aa,$d5,$ea
                                    +      $3f,$ef,$d7,$aa,$d7,$3f,$3f,$ff,$7e,$af,$ff,$7f,$7b,$ff,$7f,$ff
                                    +      $f7,$aa,$f5,$af,$d5,$fa,$d5,$aa,$f5,$ae,$d5,$aa,$d5,$aa,$f5,$af
                                    +      $d5,$aa,$d5,$aa,$d5,$ab,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
4c0a: e8 e8 e8 e8+                 .junk   6

                   vis
4c10: d5 aa d5 aa+ plane_rising_3  .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$ab
                                    +      $d5,$aa,$d5,$aa,$f5,$ab,$d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa
                                    +      $f5,$af,$d5,$aa,$d5,$aa,$fd,$af,$d5,$aa,$d5,$aa,$fd,$ae,$d5,$aa
                                    +      $d5,$aa,$fd,$af,$d5,$aa,$d5,$aa,$fd,$af,$d5,$aa,$d5,$aa,$fd,$ad
                                    +      $d5,$aa,$d5,$aa,$fd,$af,$d5,$aa,$d5,$ea,$ed,$bf,$d5,$aa,$d5,$ea
                                    +      $df,$ff,$d5,$aa,$d5,$fe,$da,$bf,$df,$aa,$f5,$7f,$eb,$eb,$ff,$aa
                                    +      $7f,$3f,$ff,$ff,$7e,$7f,$cf,$aa,$fd,$af,$d5,$fa,$d5,$aa,$f5,$af
                                    +      $d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
4c9a: e8 e8 e8 e8+                 .junk   6

                   vis
4ca0: d5 aa d5 aa+ plane_rising_4  .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$ab,$d5,$aa,$d5,$aa,$f5,$ab,$d5,$aa,$d5,$aa
                                    +      $f5,$af,$d5,$aa,$d5,$aa,$fd,$af,$d5,$aa,$d5,$aa,$fd,$bf,$d5,$aa
                                    +      $d5,$aa,$fd,$af,$d5,$aa,$d5,$aa,$fd,$bf,$d5,$aa,$d5,$aa,$dd,$af
                                    +      $d5,$aa,$d5,$aa,$dd,$bf,$d5,$aa,$d5,$aa,$f9,$af,$d5,$aa,$d5,$ea
                                    +      $ef,$fb,$d5,$aa,$d5,$fa,$fb,$ef,$cf,$aa,$d5,$7f,$ea,$af,$7d,$aa
                                    +      $fd,$5f,$fa,$af,$55,$4f,$7f,$2f,$df,$ff,$7a,$7f,$df,$aa,$f5,$a7
                                    +      $d5,$fe,$d3,$aa,$f5,$ae,$d5,$ea,$d5,$aa,$e5,$ab,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
4d2a: e8 e8 e8 e8+                 .junk   6

                   vis
4d30: d5 aa d5 aa+ plane_rising_5  .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$ab,$d5,$aa,$d5,$aa,$f5,$ab
                                    +      $d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa
                                    +      $fd,$af,$d5,$aa,$d5,$aa,$fd,$be,$d5,$aa,$d5,$aa,$dd,$ad,$d5,$aa
                                    +      $d5,$aa,$fd,$bf,$d5,$aa,$d5,$aa,$dd,$ad,$d5,$aa,$d5,$aa,$fd,$bf
                                    +      $d5,$aa,$d5,$aa,$fd,$af,$d5,$aa,$d5,$aa,$fd,$bf,$d5,$aa,$d5,$ba
                                    +      $ff,$be,$d5,$aa,$d5,$ea,$df,$ff,$d7,$aa,$d5,$ff,$be,$ff,$dd,$aa
                                    +      $d5,$ff,$fb,$ff,$f7,$aa,$f7,$df,$7f,$ff,$7d,$db,$ff,$bf,$f5,$a6
                                    +      $f7,$7b,$df,$aa,$f5,$ae,$d5,$fa,$d7,$aa,$f5,$af,$d5,$ea,$d5,$aa
                                    +      $f5,$a7,$d5,$aa,$d5,$aa,$ed,$bb,$d5,$aa
4dba: e8 e8 e8 e8+                 .junk   6

                   ; 
                   ; Plane, veering off to right.  (6x23)
                   vis vis
4dc0: d5 aa d5 aa+ plane_right_0   .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $f5,$a7,$d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa,$fd,$bd,$d5,$aa
                                    +      $d5,$aa,$bd,$bb,$d5,$aa,$d3,$f4,$2f,$bd,$d5,$aa,$df,$7f,$3b,$bd
                                    +      $d5,$aa,$d5,$da,$db,$bf,$d5,$aa,$d5,$9a,$fa,$77,$d7,$aa,$d5,$ba
                                    +      $52,$b3,$ff,$aa,$d5,$aa,$fd,$ab,$fd,$3f,$d5,$aa,$b5,$ab,$d5,$ba
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
4e4a: e8 e8 e8 e8+                 .junk   6

                   vis
4e50: d5 aa d5 aa+ plane_right_1   .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$ba,$d5,$aa,$d5,$aa
                                    +      $d5,$7f,$d5,$aa,$d5,$aa,$d5,$6b,$d5,$aa,$d5,$aa,$e5,$6f,$d5,$aa
                                    +      $d1,$aa,$72,$7a,$d5,$aa,$d3,$f7,$6f,$7a,$d5,$aa,$d5,$d7,$4a,$3f
                                    +      $d5,$aa,$d5,$da,$4a,$1d,$d5,$aa,$d5,$92,$fb,$7e,$d5,$aa,$d5,$9a
                                    +      $d7,$7b,$cf,$aa,$d5,$aa,$7d,$cb,$fb,$aa,$d5,$aa,$3f,$ab,$fd,$ab
                                    +      $d5,$aa,$d7,$aa,$e5,$af,$d5,$aa,$d5,$aa,$d5,$9e,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
4eda: e8 e8 e8 e8+                 .junk   6

                   vis
4ee0: d5 aa d5 aa+ plane_right_2   .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$ea,$d7,$aa,$d5,$aa,$d5,$fe,$d5,$aa,$d5,$aa
                                    +      $d5,$7f,$d7,$aa,$d6,$aa,$d5,$6b,$d5,$aa,$7f,$aa,$e5,$f2,$d5,$aa
                                    +      $f5,$77,$73,$6f,$d5,$aa,$d5,$57,$5a,$3e,$d5,$aa,$d5,$d4,$7a,$3e
                                    +      $d5,$aa,$d5,$ca,$5a,$be,$d5,$aa,$d5,$aa,$56,$ef,$d5,$aa,$d5,$aa
                                    +      $57,$ff,$d5,$aa,$d5,$ea,$7d,$31,$dd,$aa,$d5,$ea,$fe,$fa,$fd,$aa
                                    +      $d5,$ea,$cf,$aa,$fd,$ab,$d5,$aa,$d5,$aa,$d5,$b7,$d5,$aa,$d5,$aa
                                    +      $d5,$ba,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
4f6a: e8 e8 e8 e8+                 .junk   6

                   vis
4f70: d5 aa d5 aa+ plane_right_3   .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$cf,$aa,$d5,$fc,$d5,$aa,$ed,$aa
                                    +      $d5,$fd,$d5,$aa,$d5,$8f,$d5,$eb,$d5,$aa,$d5,$7e,$a3,$7b,$d5,$aa
                                    +      $d5,$fa,$7f,$7a,$d5,$aa,$d5,$ea,$6b,$7a,$d5,$aa,$d5,$aa,$4a,$be
                                    +      $d5,$aa,$d5,$aa,$5a,$0e,$d5,$aa,$d5,$aa,$37,$ff,$d5,$aa,$d5,$92
                                    +      $75,$59,$d7,$aa,$d5,$92,$ff,$fa,$d5,$aa,$d5,$fa,$dd,$ca,$df,$aa
                                    +      $d5,$ba,$d5,$ea,$dc,$aa,$d5,$aa,$d5,$aa,$f5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$ab,$d5,$aa,$d5,$aa,$d5,$be,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
4ffa: e8 e8 e8 e8+                 .junk   6

                   vis
5000: d5 aa d5 aa+ plane_right_4   .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d4,$aa,$d5,$aa,$d5,$aa,$db,$aa,$d5,$ea
                                    +      $d7,$aa,$6c,$a9,$dd,$ba,$d7,$aa,$f5,$97,$d6,$ae,$d7,$aa,$d5,$57
                                    +      $d3,$eb,$d6,$aa,$d5,$de,$5a,$7b,$d3,$aa,$d5,$f2,$4a,$6a,$d7,$aa
                                    +      $d5,$aa,$5b,$7a,$d5,$aa,$d5,$aa,$5c,$7d,$d5,$aa,$d5,$aa,$dd,$3e
                                    +      $d5,$aa,$d5,$aa,$56,$6f,$d5,$aa,$d5,$aa,$75,$ff,$dd,$aa,$d5,$9a
                                    +      $77,$fa,$d7,$aa,$d5,$aa,$dd,$ea,$d7,$aa,$d5,$ba,$d6,$ea,$dd,$aa
                                    +      $d5,$aa,$d5,$aa,$ff,$aa,$d5,$aa,$d5,$aa,$f5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$ab,$d5,$aa,$d5,$aa,$d5,$ab,$d5,$aa,$d5,$aa,$d5,$ae,$d5,$aa
                                    +      $d5,$aa,$d5,$b6,$d5,$aa,$d5,$aa,$d5,$aa
508a: e8 e8 e8 e8+                 .junk   6

                   vis
5090: 9c aa d5 aa+ plane_right_5   .bulk   $9c,$aa,$d5,$aa,$3f,$aa,$bd,$ab,$d5,$ea,$f5,$aa,$a5,$bf,$cd,$fa
                                    +      $fc,$aa,$d5,$5f,$d7,$ae,$f9,$aa,$d5,$de,$ce,$6e,$dc,$aa,$d5,$fa
                                    +      $52,$2b,$df,$aa,$d5,$fa,$6b,$4a,$df,$aa,$d5,$ea,$6b,$7a,$d7,$aa
                                    +      $d5,$aa,$dd,$6a,$d5,$aa,$d5,$aa,$db,$fe,$d5,$aa,$d5,$aa,$56,$bf
                                    +      $d5,$aa,$d5,$ca,$16,$5f,$d5,$aa,$d5,$a2,$f5,$fe,$f7,$aa,$d5,$aa
                                    +      $bd,$7b,$de,$aa,$d5,$d2,$df,$fa,$de,$aa,$d5,$ea,$d5,$ea,$dd,$aa
                                    +      $d5,$aa,$d5,$aa,$ff,$aa,$d5,$aa,$d5,$aa,$fd,$aa,$d5,$aa,$d5,$aa
                                    +      $fd,$ab,$d5,$aa,$d5,$aa,$f5,$ab,$d5,$aa,$d5,$aa,$d5,$bf,$d5,$aa
                                    +      $d5,$aa,$d5,$be,$d5,$aa,$d5,$aa,$d5,$aa
511a: e8 e8 e8 e8+                 .junk   6

                   ; 
                   ; Plane, approaching player (6x9).
                   vis vis
                   plane_approach_0
5120: d5 aa d5 aa+                 .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$ab,$d5,$aa,$d5,$aa,$f5,$a7,$d5,$aa,$d5,$ea
                                    +      $6b,$ff,$d7,$aa,$d5,$aa,$f5,$ae,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa
5156: e8 e8 e8 e8+                 .junk   10

                   vis
                   plane_approach_1
5160: d5 aa d5 aa+                 .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$ab,$d5,$aa,$d5,$aa,$d5,$ab
                                    +      $d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$ea
                                    +      $bf,$fc,$de,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa
5196: e8 e8 e8 e8+                 .junk   10

                   vis
                   plane_approach_2
51a0: d5 aa d5 aa+                 .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$ab,$d5,$aa,$d5,$aa,$d5,$ab
                                    +      $d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa,$f5,$ad,$d5,$aa,$d5,$fe
                                    +      $bf,$fc,$df,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa
51d6: e8 e8 e8 e8+                 .junk   10

                   vis
                   plane_approach_3
51e0: d5 aa d5 aa+                 .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$ab,$d5,$aa,$d5,$aa,$f5,$a7
                                    +      $d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa,$dd,$9f,$d5,$aa,$d5,$ea
                                    +      $fa,$ef,$d5,$aa,$d5,$ff,$bf,$fc,$ff,$aa,$d5,$aa,$ed,$33,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa
5216: e8 e8 e8 e8+                 .junk   10

                   vis
                   plane_approach_4
5220: d5 aa d5 aa+                 .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$af,$d5,$aa,$d5,$aa,$d5,$af
                                    +      $d5,$aa,$d5,$aa,$f5,$bf,$d5,$aa,$f4,$aa,$f5,$fd,$d5,$ae,$f5,$d7
                                    +      $9f,$fb,$ef,$af,$f5,$aa,$fd,$df,$d5,$ae,$d5,$aa,$d5,$ab,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa
5256: e8 e8 e8 e8+                 .junk   10

                   vis
                   plane_approach_5
5260: d5 aa d5 ab+                 .bulk   $d5,$aa,$d5,$ab,$d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa,$f5,$af
                                    +      $d5,$aa,$d5,$aa,$bd,$bd,$d5,$aa,$d5,$aa,$f9,$a7,$d5,$aa,$dc,$ea
                                    +      $7f,$7a,$d6,$ba,$fd,$5f,$be,$7d,$7b,$b7,$dd,$aa,$73,$67,$d5,$ba
                                    +      $d5,$aa,$d5,$aa,$d5,$aa
5296: e8 e8 e8 e8+                 .junk   10

                   vis
                   plane_approach_6
52a0: d5 aa d5 a7+                 .bulk   $d5,$aa,$d5,$a7,$d5,$aa,$d5,$aa,$f5,$af,$d5,$aa,$d5,$aa,$bd,$bd
                                    +      $d5,$aa,$d5,$aa,$9d,$39,$d5,$aa,$d5,$aa,$be,$3d,$d5,$aa,$d5,$da
                                    +      $bf,$55,$df,$aa,$d6,$ff,$37,$b5,$ff,$eb,$7e,$ff,$2f,$75,$ff,$ff
                                    +      $d6,$aa,$f9,$ad,$d5,$ea
52d6: e8 e8 e8 e8+                 .align  $0100 (42 bytes)

                   ; 
                   ; Bitmap used for planes firing at player (6x9).  Drawn on top of approaching
                   ; plane.  Must not cross a page boundary.
                   vis
5300: 00 40 01 02+ plane_firing    .bulk   $00,$40,$01,$02,$0c,$00,$00,$00,$1b,$07,$07,$00,$00,$00,$1e,$72
                                    +      $01,$00,$00,$00,$3a,$77,$00,$00,$00,$00,$30,$1e,$01,$00,$00,$00
                                    +      $45,$0b,$03,$00,$00,$00,$18,$39,$00,$00,$00,$00,$7c,$75,$00,$00
                                    +      $00,$40,$07,$60,$0f,$00
5336: 00 00 00 00+                 .junk   26
                   ; 
                   ; Full line of blue sky, used for erasing things during dogfights.  The hi-res
                   ; screen's odd/even nature prevents the use of a single color byte value.
5350: d5 aa d5 aa+ blue_sky        .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
5378: d5 00 00 00+                 .align  $0100 (136 bytes)

                   ; 
                   ; Harmless flak pop (6x36).  Must not cross a page boundary.
                   ; 
                   ; Like other bombing-mode bitmaps, this is drawn on alternating lines.  Unlike
                   ; the others, the drawing routine skips every other line of the bitmap itself.
                   vis
5400: 00 00 00 00+ flak_pop        .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$80
                                    +      $00,$00,$00,$00,$80,$80,$00,$00,$00,$00,$00,$81,$00,$00,$00,$00
                                    +      $80,$81,$00,$00,$00,$00,$80,$80,$00,$00,$00,$00,$00,$85,$00,$00
                                    +      $00,$00,$00,$85,$00,$00,$00,$00,$00,$85,$80,$81,$00,$00,$00,$85
                                    +      $a0,$00,$00,$00,$a0,$85,$a8,$00,$00,$c0,$a2,$d1,$8a,$00,$00,$d0
                                    +      $aa,$d1,$8a,$00,$00,$d4,$a2,$d5,$8a,$00,$00,$d4,$8a,$d4,$88,$00
                                    +      $00,$95,$8a,$d1,$82,$00,$00,$00,$8a,$d0,$80,$84,$00,$80,$8a,$d4
                                    +      $00,$00,$82,$c0,$8a,$d4,$80,$00,$82,$c0,$8a,$d5,$80,$00,$82,$d0
                                    +      $e0,$c7,$82,$00,$00,$80,$b8,$d5,$8a,$00,$00,$00,$bc,$d1,$8a,$00
                                    +      $00,$00,$ac,$85,$8a,$00,$00,$85,$a0,$81,$80,$00,$00,$81,$a0,$81
                                    +      $00,$00,$00,$00,$a0,$81,$00,$00,$00,$00,$a0,$81,$00,$00,$00,$00
                                    +      $a0,$81,$00,$00,$00,$00,$a0,$81,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00
54d8: 00 00 00 00+                 .align  $0100 (40 bytes)

                   ; 
                   ; Numerals 0-9, 8 pixels high.  The bitmap is 16x8.
                   vis
5500: 1c 08 1c 3e+ number_font_0   .bulk   $1c,$08,$1c,$3e,$10,$3e,$38,$3e,$1c,$1c,$00,$00,$00,$00,$00,$00
5510: 22 0c 22 20+ number_font_1   .bulk   $22,$0c,$22,$20,$18,$02,$04,$20,$22,$22,$00,$00,$00,$00,$00,$00
5520: 32 08 20 10+ number_font_2   .bulk   $32,$08,$20,$10,$14,$1e,$02,$10,$22,$22,$00,$00,$00,$00,$00,$00
5530: 2a 08 18 18+ number_font_3   .bulk   $2a,$08,$18,$18,$12,$20,$1e,$08,$1c,$3c,$00,$00,$00,$00,$00,$00
5540: 26 08 04 20+ number_font_4   .bulk   $26,$08,$04,$20,$3e,$20,$22,$04,$22,$20,$00,$00,$00,$00,$00,$00
5550: 22 08 02 22+ number_font_5   .bulk   $22,$08,$02,$22,$10,$22,$22,$04,$22,$10,$00,$00,$00,$00,$00,$00
5560: 1c 1c 3e 1c+ number_font_6   .bulk   $1c,$1c,$3e,$1c,$10,$1c,$1c,$04,$1c,$0e,$00,$00,$00,$00,$00,$00
5570: 00 00 00 00+ number_font_7   .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00

                   ; 
                   ; Status bar score template: "SCORE:000000 L:0 H:000 T:000".  The numeric fields
                   ; are overwritten as they are updated.
                   ; 
                   ; This, and some of the other text, has a weird 128-byte alignment restriction.
                   vis
                   score_template_0
5580: 1e 1c 1e 1f+                 .bulk   $1e,$1c,$1e,$1f,$3f,$00,$1c,$1c,$1c,$1c,$1c,$1c,$00,$0f,$00,$1c
                                    +      $00,$33,$00,$1c,$1c,$1c,$00,$3f,$00,$1c,$1c,$1c,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00
                   score_template_1
55a8: 33 36 33 33+                 .bulk   $33,$36,$33,$33,$36,$0c,$22,$22,$22,$22,$22,$22,$00,$06,$0c,$22
                                    +      $00,$33,$0c,$22,$22,$22,$00,$3f,$0c,$22,$22,$22,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00
                   score_template_2
55d0: 03 03 33 33+                 .bulk   $03,$03,$33,$33,$06,$0c,$32,$32,$32,$32,$32,$32,$00,$06,$0c,$32
                                    +      $00,$33,$0c,$32,$32,$32,$00,$0c,$0c,$32,$32,$32,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00
55f8: 00 00 00 00+                 .junk   8
                   score_template_3
5600: 1e 03 33 1f+                 .bulk   $1e,$03,$33,$1f,$0e,$00,$2a,$2a,$2a,$2a,$2a,$2a,$00,$06,$00,$2a
                                    +      $00,$3f,$00,$2a,$2a,$2a,$00,$0c,$00,$2a,$2a,$2a,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00
                   score_template_4
5628: 30 03 33 0f+                 .bulk   $30,$03,$33,$0f,$06,$0c,$26,$26,$26,$26,$26,$26,$00,$06,$0c,$26
                                    +      $00,$33,$0c,$26,$26,$26,$00,$0c,$0c,$26,$26,$26,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00
                   score_template_5
5650: 33 36 33 1b+                 .bulk   $33,$36,$33,$1b,$36,$0c,$22,$22,$22,$22,$22,$22,$00,$36,$0c,$22
                                    +      $00,$33,$0c,$22,$22,$22,$00,$0c,$0c,$22,$22,$22,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00
5678: 00 00 00 00+                 .junk   8
                   score_template_6
5680: 1e 1c 1e 33+                 .bulk   $1e,$1c,$1e,$33,$3f,$00,$1c,$1c,$1c,$1c,$1c,$1c,$00,$3f,$00,$1c
                                    +      $00,$33,$00,$1c,$1c,$1c,$00,$1e,$00,$1c,$1c,$1c,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00
                   score_template_7
56a8: 00 00 00 00+                 .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00

                   ; 
                   ; Plane icon (2x8), drawn on the right side of the status bar to show how many
                   ; lives the player has remaining.
                   vis
56d0: 40 40 40 60+ plane_icon_0    .bulk   $40,$40,$40,$60,$78,$7c,$44,$40
56d8: 01 01 01 03+ plane_icon_1    .bulk   $01,$01,$01,$03,$0f,$1f,$11,$01
56e0: 00 00 00 00+                 .junk   32

                   ; 
                   ; "WARNING: AIR ATTACK".  All characters are two pixels wide so we can AND it
                   ; with a color mask.
                   vis
5700: 8c 98 c0 81+ air_atk_msg_0   .bulk   $8c,$98,$c0,$81,$fc,$87,$8c,$98,$f0,$87,$8c,$98,$f0,$87,$80,$80
                                    +      $80,$80,$80,$80,$c0,$81,$f0,$87,$fc,$87,$80,$80,$c0,$81,$fc,$9f
                                    +      $fc,$9f,$c0,$81,$c0,$87,$8c,$98
5728: 8c 98 b0 86+ air_atk_msg_1   .bulk   $8c,$98,$b0,$86,$8c,$98,$8c,$98,$c0,$81,$8c,$98,$8c,$98,$f0,$81
                                    +      $80,$80,$80,$80,$b0,$86,$c0,$81,$8c,$98,$80,$80,$b0,$86,$cc,$99
                                    +      $cc,$99,$b0,$86,$b0,$98,$8c,$86
5750: 8c 98 8c 98+ air_atk_msg_2   .bulk   $8c,$98,$8c,$98,$8c,$98,$bc,$98,$c0,$81,$bc,$98,$8c,$80,$f0,$81
                                    +      $80,$80,$80,$80,$8c,$98,$c0,$81,$8c,$98,$80,$80,$8c,$98,$c0,$81
                                    +      $c0,$81,$8c,$98,$8c,$80,$cc,$81
5778: 80 80 80 80+                 .junk   8
5780: 8c 98 8c 98+ air_atk_msg_3   .bulk   $8c,$98,$8c,$98,$fc,$87,$cc,$99,$c0,$81,$cc,$99,$8c,$80,$80,$80
                                    +      $80,$80,$80,$80,$8c,$98,$c0,$81,$fc,$87,$80,$80,$8c,$98,$c0,$81
                                    +      $c0,$81,$8c,$98,$8c,$80,$bc,$80
57a8: 8c 98 8c 98+ air_atk_msg_4   .bulk   $8c,$98,$8c,$98,$fc,$87,$cc,$99,$c0,$81,$cc,$99,$8c,$80,$80,$80
                                    +      $80,$80,$80,$80,$8c,$98,$c0,$81,$fc,$87,$80,$80,$8c,$98,$c0,$81
                                    +      $c0,$81,$8c,$98,$8c,$80,$bc,$80
57d0: cc 99 fc 9f+ air_atk_msg_5   .bulk   $cc,$99,$fc,$9f,$cc,$81,$8c,$9e,$c0,$81,$8c,$9e,$8c,$9e,$f0,$81
                                    +      $80,$80,$80,$80,$fc,$9f,$c0,$81,$cc,$81,$80,$80,$fc,$9f,$c0,$81
                                    +      $c0,$81,$fc,$9f,$8c,$80,$cc,$81
57f8: 80 80 80 80+                 .junk   8
5800: cc 99 8c 98+ air_atk_msg_6   .bulk   $cc,$99,$8c,$98,$8c,$86,$8c,$98,$c0,$81,$8c,$98,$8c,$98,$f0,$81
                                    +      $80,$80,$80,$80,$8c,$98,$c0,$81,$8c,$86,$80,$80,$8c,$98,$c0,$81
                                    +      $c0,$81,$8c,$98,$b0,$98,$8c,$86
5828: b8 8e 8c 98+ air_atk_msg_7   .bulk   $b8,$8e,$8c,$98,$8c,$98,$8c,$98,$f0,$87,$8c,$98,$f8,$9f,$80,$80
                                    +      $80,$80,$80,$80,$8c,$98,$f0,$87,$8c,$98,$80,$80,$8c,$98,$f0,$87
                                    +      $f0,$87,$8c,$98,$c0,$87,$8c,$98
5850: 80 80 80 80+                 .align  $80 (48 bytes)

                   ; 
                   ; "BOMB TARGET APPROACH" text.  All characters are two pixels wide so we can AND
                   ; it with a color mask.
                   vis
5880: fc 87 f0 87+ bta_msg_0       .bulk   $fc,$87,$f0,$87,$8c,$98,$fc,$87,$80,$80,$fc,$9f,$c0,$81,$fc,$87
                                    +      $f0,$87,$fc,$9f,$fc,$9f,$80,$80,$c0,$81,$fc,$87,$fc,$87,$fc,$87
                                    +      $f0,$87,$c0,$81,$c0,$87,$8c,$98
58a8: b0 98 8c 98+ bta_msg_1       .bulk   $b0,$98,$8c,$98,$bc,$9e,$b0,$98,$80,$80,$cc,$99,$b0,$86,$8c,$98
                                    +      $8c,$98,$b0,$98,$cc,$99,$80,$80,$b0,$86,$b0,$98,$b0,$98,$8c,$98
                                    +      $8c,$98,$b0,$86,$b0,$98,$8c,$98
58d0: b0 98 8c 98+ bta_msg_2       .bulk   $b0,$98,$8c,$98,$cc,$99,$b0,$98,$80,$80,$c0,$81,$8c,$98,$8c,$98
                                    +      $8c,$80,$b0,$80,$c0,$81,$80,$80,$8c,$98,$b0,$98,$b0,$98,$8c,$98
                                    +      $8c,$98,$8c,$98,$8c,$80,$8c,$98
58f8: 80 80 80 80+                 .junk   8
5900: f0 87 8c 98+ bta_msg_3       .bulk   $f0,$87,$8c,$98,$8c,$98,$f0,$87,$80,$80,$c0,$81,$8c,$98,$fc,$87
                                    +      $8c,$80,$f0,$81,$c0,$81,$80,$80,$8c,$98,$f0,$87,$f0,$87,$fc,$87
                                    +      $8c,$98,$8c,$98,$8c,$80,$fc,$9f
5928: b0 98 8c 98+ bta_msg_4       .bulk   $b0,$98,$8c,$98,$8c,$98,$b0,$98,$80,$80,$c0,$81,$fc,$9f,$cc,$81
                                    +      $8c,$9e,$b0,$80,$c0,$81,$80,$80,$fc,$9f,$b0,$80,$b0,$80,$cc,$81
                                    +      $8c,$98,$fc,$9f,$8c,$80,$8c,$98
5950: b0 98 8c 98+ bta_msg_5       .bulk   $b0,$98,$8c,$98,$8c,$98,$b0,$98,$80,$80,$c0,$81,$8c,$98,$8c,$86
                                    +      $8c,$98,$b0,$98,$c0,$81,$80,$80,$8c,$98,$b0,$80,$b0,$80,$8c,$86
                                    +      $8c,$98,$8c,$98,$b0,$98,$8c,$98
5978: 80 80 80 80+                 .junk   8
5980: fc 87 f0 87+ bta_msg_6       .bulk   $fc,$87,$f0,$87,$8c,$98,$fc,$87,$80,$80,$f0,$87,$8c,$98,$8c,$98
                                    +      $f0,$9f,$fc,$9f,$f0,$87,$80,$80,$8c,$98,$fc,$81,$fc,$81,$8c,$98
                                    +      $f0,$87,$8c,$98,$c0,$87,$8c,$98
59a8: 80 80 80 80+ bta_msg_7       .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$80
59d0: 80 80 80 80+                 .align  $0100 (48 bytes)
                   ; 
                   ; Text color mask, applied to "bomb target approach" and "warning: air attack"
                   ; messages in status bar.  This gets XORed to provide alternating colors.
5a00: d5 aa d5 aa+ text_color_mask .bulk   $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
                                    +      $d5,$aa,$d5,$aa,$d5,$aa,$d5,$aa
5a28: d5 aa d5 aa+                 .junk   8

                   ; 
                   ; Erases the rightmost part of the status area, where the plane icons are shown,
                   ; then calls the draw code.
                   ; 
                   • Clear variables
                   ]hptr           .var    $00    {addr/2}

                   RedrawPlaneIcons
5a30: a2 00                        ldx     #$00              ;line 0
5a32: bd 00 08     :RowLoop        lda     hires_addr_hi,x   ;get hi-res address
5a35: 85 01                        sta     ]hptr+1
5a37: bd c0 08                     lda     hires_addr_lo,x
5a3a: 85 00                        sta     ]hptr
5a3c: a0 1e                        ldy     #30               ;start in column 30
5a3e: a9 00                        lda     #$00              ;black pixels
5a40: 91 00        :ColLoop        sta     (]hptr),y
5a42: c8                           iny
5a43: c0 28                        cpy     #40               ;reached column 40 (5 planes * 2 bytes each)?
5a45: 90 f9                        bcc     :ColLoop
5a47: e8                           inx
5a48: e0 08                        cpx     #8                ;reached line 8?
5a4a: 90 e6                        bcc     :RowLoop          ;not yet, loop
5a4c: 4c a0 5b                     jmp     DrawPlaneIcons    ;now draw the appropriate number of icons

5a4f: 00                           .junk   1

                   ; 
                   ; Displays "WARNING: AIR ATTACK" at the top of the screen.  Shown when planes
                   ; are about to attack, and the level is greater than 1.
                   ; 
                   DrawAirAttackMsg
5a50: a0 00                        ldy     #$00              ;start in left column
5a52: b9 00 57     :Loop           lda     air_atk_msg_0,y   ;get byte from top line
5a55: 39 00 5a                     and     text_color_mask,y ;AND with mask
5a58: 99 00 20                     sta     HIRES_PAGE1,y     ;store in line 0 of the hi-res screen
5a5b: b9 28 57                     lda     air_atk_msg_1,y   ;now do next line
5a5e: 39 00 5a                     and     text_color_mask,y ; ...
5a61: 99 00 24                     sta     HIRES_PAGE1+$400,y
5a64: b9 50 57                     lda     air_atk_msg_2,y
5a67: 39 00 5a                     and     text_color_mask,y
5a6a: 99 00 28                     sta     HIRES_PAGE1+$800,y
5a6d: b9 80 57                     lda     air_atk_msg_3,y
5a70: 39 00 5a                     and     text_color_mask,y
5a73: 99 00 2c                     sta     HIRES_PAGE1+$c00,y
5a76: b9 a8 57                     lda     air_atk_msg_4,y
5a79: 39 00 5a                     and     text_color_mask,y
5a7c: 99 00 30                     sta     HIRES_PAGE1+$1000,y
5a7f: b9 d0 57                     lda     air_atk_msg_5,y
5a82: 39 00 5a                     and     text_color_mask,y
5a85: 99 00 34                     sta     HIRES_PAGE1+$1400,y
5a88: b9 00 58                     lda     air_atk_msg_6,y
5a8b: 39 00 5a                     and     text_color_mask,y
5a8e: 99 00 38                     sta     HIRES_PAGE1+$1800,y
5a91: b9 28 58                     lda     air_atk_msg_7,y
5a94: 39 00 5a                     and     text_color_mask,y
5a97: 99 00 3c                     sta     HIRES_PAGE1+$1c00,y
5a9a: c8                           iny
5a9b: c0 28                        cpy     #40               ;finished with entire thing?
5a9d: 90 b3                        bcc     :Loop             ;not yet, loop
5a9f: ea                           nop
                   ; Invert the color mask for next time.
5aa0: a0 00        InvertColorMask ldy     #$00
5aa2: b9 00 5a     :MaskLoop       lda     text_color_mask,y
5aa5: 49 7f                        eor     #$7f
5aa7: 99 00 5a                     sta     text_color_mask,y
5aaa: c8                           iny
5aab: c0 28                        cpy     #40
5aad: 90 f3                        bcc     :MaskLoop
                   ; Make a sound.
5aaf: a2 20                        ldx     #$20
5ab1: a0 20        :SoundLoop      ldy     #$20
5ab3: 88           :DelayLoop      dey
5ab4: ea                           nop
5ab5: d0 fc                        bne     :DelayLoop
5ab7: 8d 30 c0                     sta     SPKR              ;click
5aba: ca                           dex
5abb: d0 f4                        bne     :SoundLoop
5abd: 60                           rts

5abe: 00 00 00 00+                 .fill   66,$00

                   ; 
                   ; Draws "BOMB TARGET APPROACH", in alternating colors, at the top of the screen.
                   ; This is shown when a wave of planes is completed successfully.
                   ; 
5b00: a0 00        DrawBtaMsg      ldy     #$00              ;start in left column
5b02: b9 80 58     :Loop           lda     bta_msg_0,y       ;get byte from top line
5b05: 39 00 5a                     and     text_color_mask,y ;AND with mask
5b08: 99 00 20                     sta     HIRES_PAGE1,y     ;store in line 0 of the hi-res screen
5b0b: b9 a8 58                     lda     bta_msg_1,y       ;now do next line
5b0e: 39 00 5a                     and     text_color_mask,y ; ...
5b11: 99 00 24                     sta     HIRES_PAGE1+$400,y
5b14: b9 d0 58                     lda     bta_msg_2,y
5b17: 39 00 5a                     and     text_color_mask,y
5b1a: 99 00 28                     sta     HIRES_PAGE1+$800,y
5b1d: b9 00 59                     lda     bta_msg_3,y
5b20: 39 00 5a                     and     text_color_mask,y
5b23: 99 00 2c                     sta     HIRES_PAGE1+$c00,y
5b26: b9 28 59                     lda     bta_msg_4,y
5b29: 39 00 5a                     and     text_color_mask,y
5b2c: 99 00 30                     sta     HIRES_PAGE1+$1000,y
5b2f: b9 50 59                     lda     bta_msg_5,y
5b32: 39 00 5a                     and     text_color_mask,y
5b35: 99 00 34                     sta     HIRES_PAGE1+$1400,y
5b38: b9 80 59                     lda     bta_msg_6,y
5b3b: 39 00 5a                     and     text_color_mask,y
5b3e: 99 00 38                     sta     HIRES_PAGE1+$1800,y
5b41: b9 a8 59                     lda     bta_msg_7,y
5b44: 39 00 5a                     and     text_color_mask,y
5b47: 99 00 3c                     sta     HIRES_PAGE1+$1c00,y
5b4a: c8                           iny
5b4b: c0 28                        cpy     #40
5b4d: 90 b3                        bcc     :Loop
5b4f: 4c a0 5a                     jmp     InvertColorMask   ;flip colors, make sound

5b52: 00 00 00 00+                 .junk   14

                   ; 
                   ; Draws the score template text across the top of the screen.  This renders the
                   ; entire line, so it also clears the entire status bar to black.
                   ; 
5b60: a0 00        DrawScoreTempl  ldy     #$00
5b62: b9 80 55     :Loop           lda     score_template_0,y ;copy to fixed position on screen
5b65: 99 00 20                     sta     HIRES_PAGE1,y     ;unroll to copy all 8 lines with one loop
5b68: b9 a8 55                     lda     score_template_1,y
5b6b: 99 00 24                     sta     HIRES_PAGE1+$400,y
5b6e: b9 d0 55                     lda     score_template_2,y
5b71: 99 00 28                     sta     HIRES_PAGE1+$800,y
5b74: b9 00 56                     lda     score_template_3,y
5b77: 99 00 2c                     sta     HIRES_PAGE1+$c00,y
5b7a: b9 28 56                     lda     score_template_4,y
5b7d: 99 00 30                     sta     HIRES_PAGE1+$1000,y
5b80: b9 50 56                     lda     score_template_5,y
5b83: 99 00 34                     sta     HIRES_PAGE1+$1400,y
5b86: b9 80 56                     lda     score_template_6,y
5b89: 99 00 38                     sta     HIRES_PAGE1+$1800,y
5b8c: b9 a8 56                     lda     score_template_7,y
5b8f: 99 00 3c                     sta     HIRES_PAGE1+$1c00,y
5b92: c8                           iny
5b93: c0 28                        cpy     #40               ;all the way across?
5b95: 90 cb                        bcc     :Loop             ;not yet, loop
5b97: 60                           rts

5b98: 00 00 00 00+                 .junk   8

                   ; 
                   ; Draws plane icons at the top of the screen, to tell the player how many lives
                   ; they have left.
                   ; 
                   • Clear variables
                   ]hptr           .var    $00    {addr/2}
                   ]col            .var    $02    {addr/1}

5ba0: a5 5d        DrawPlaneIcons  lda     player_lives      ;get number of lives remaining
5ba2: d0 01        :DrawLoop       bne     :DoDraw           ;nonzero, draw an icon
5ba4: 60                           rts

5ba5: 48           :DoDraw         pha                       ;preserve count
5ba6: 0a                           asl     A                 ;double it
5ba7: 85 00                        sta     ]hptr             ;save in temp storage
5ba9: a9 28                        lda     #40
5bab: 38                           sec
5bac: e5 00                        sbc     ]hptr             ;compute 40 - count
5bae: 85 02                        sta     ]col              ;save as column
5bb0: a2 00                        ldx     #$00              ;start at row 0 of the hi-res screen
5bb2: a4 02        :LineLoop       ldy     ]col              ;get column offset
5bb4: bd 00 08                     lda     hires_addr_hi,x   ;get hi-res address
5bb7: 85 01                        sta     ]hptr+1
5bb9: bd c0 08                     lda     hires_addr_lo,x
5bbc: 85 00                        sta     ]hptr
5bbe: bd d0 56                     lda     plane_icon_0,x    ;get a byte from the bitmap (column 0)
5bc1: 91 00                        sta     (]hptr),y         ;store it
5bc3: c8                           iny                       ;advance to next column
5bc4: bd d8 56                     lda     plane_icon_1,x    ;get a byte from the bitmap (column 1)
5bc7: 91 00                        sta     (]hptr),y         ;store it
5bc9: e8                           inx                       ;advance to next line
5bca: e0 08                        cpx     #$08              ;done yet?
5bcc: 90 e4                        bcc     :LineLoop         ;no, loop
5bce: 68                           pla                       ;restore count
5bcf: 38                           sec
5bd0: e9 01                        sbc     #$01              ;decrement
5bd2: 4c a2 5b                     jmp     :DrawLoop         ;loop

5bd5: 60 55 99 00+                 .junk   11

                   ; 
                   ; Draws a number in the top row of the screen.  Used for scores.
                   ; 
                   ; On entry:
                   ;   X-reg: number (0-9)
                   ;   Y-reg: horizontal offset (0-39)
                   ; 
5be0: bd 00 55     DrawNumber      lda     number_font_0,x   ;get byte from appropriate digit glyph
5be3: 99 00 20                     sta     HIRES_PAGE1,y     ;store in top row of hi-res screen
5be6: bd 10 55                     lda     number_font_1,x   ;...unroll...
5be9: 99 00 24                     sta     HIRES_PAGE1+$400,y
5bec: bd 20 55                     lda     number_font_2,x
5bef: 99 00 28                     sta     HIRES_PAGE1+$800,y
5bf2: bd 30 55                     lda     number_font_3,x
5bf5: 99 00 2c                     sta     HIRES_PAGE1+$c00,y
5bf8: bd 40 55                     lda     number_font_4,x
5bfb: 99 00 30                     sta     HIRES_PAGE1+$1000,y
5bfe: bd 50 55                     lda     number_font_5,x
5c01: 99 00 34                     sta     HIRES_PAGE1+$1400,y
5c04: bd 60 55                     lda     number_font_6,x
5c07: 99 00 38                     sta     HIRES_PAGE1+$1800,y
5c0a: bd 70 55                     lda     number_font_7,x
5c0d: 99 00 3c                     sta     HIRES_PAGE1+$1c00,y
5c10: 60                           rts

5c11: 55                           .junk   1

                   ; 
                   ; Draws the difficulty level number.
                   ; 
5c12: a6 56        DrawLevel       ldx     player_level      ;one digit, column 15
5c14: a0 0f                        ldy     #15
5c16: 4c e0 5b                     jmp     DrawNumber

5c19: 00 ff ff 00+                 .junk   7

                   ; 
                   ; Draws the number of targets bombed.
                   ; 
5c20: a6 57        DrawTargetsHit  ldx     targets_hit       ;3 digits, columns 25-27
5c22: a0 19                        ldy     #25
5c24: 20 e0 5b                     jsr     DrawNumber
5c27: a6 58                        ldx     targets_hit+1
5c29: a0 1a                        ldy     #26
5c2b: 20 e0 5b                     jsr     DrawNumber
5c2e: a6 59                        ldx     targets_hit+2
5c30: a0 1b                        ldy     #27
5c32: 4c e0 5b                     jmp     DrawNumber

5c35: 00 ff ff                     .junk   3

                   ; 
                   ; Draws the number of hostile planes shot down.
                   ; 
5c38: a6 5a        DrawPlanesHit   ldx     planes_hit        ;3 digits, columns 19-21
5c3a: a0 13                        ldy     #19
5c3c: 20 e0 5b                     jsr     DrawNumber
5c3f: a6 5b                        ldx     planes_hit+1
5c41: a0 14                        ldy     #20
5c43: 20 e0 5b                     jsr     DrawNumber
5c46: a6 5c                        ldx     planes_hit+2
5c48: a0 15                        ldy     #21
5c4a: 4c e0 5b                     jmp     DrawNumber

5c4d: 00 ff ff                     .junk   3

                   ; 
                   ; Draws the score.
                   ; 
5c50: a6 50        DrawScore       ldx     score             ;6 digits, columns 7-11
5c52: a0 06                        ldy     #6
5c54: 20 e0 5b                     jsr     DrawNumber
5c57: a6 51                        ldx     score+1
5c59: a0 07                        ldy     #7
5c5b: 20 e0 5b                     jsr     DrawNumber
5c5e: a6 52                        ldx     score+2
5c60: a0 08                        ldy     #8
5c62: 20 e0 5b                     jsr     DrawNumber
5c65: a6 53                        ldx     score+3
5c67: a0 09                        ldy     #9
5c69: 20 e0 5b                     jsr     DrawNumber
5c6c: a6 54                        ldx     score+4
5c6e: a0 0a                        ldy     #10
5c70: 20 e0 5b                     jsr     DrawNumber
5c73: a6 55                        ldx     score+5
5c75: a0 0b                        ldy     #11
5c77: 4c e0 5b                     jmp     DrawNumber

5c7a: ff ff 00 00+                 .junk   6

                   ; 
                   ; Adds 10 points to the player's score.
                   ; 
                   ; On exit:
                   ;   X-reg preserved
                   ; 
5c80: a0 04        Add10Points     ldy     #$04              ;5th column from left (0000x0)
5c82: b9 50 00     :NextDigit      lda     score,y
5c85: 18                           clc
5c86: 69 01                        adc     #$01              ;add one
5c88: c9 0a                        cmp     #10               ;did we roll over?
5c8a: 90 09                        bcc     :Done             ;no, bail
5c8c: a9 00                        lda     #$00
5c8e: 99 50 00                     sta     score,y           ;set digit to zero
5c91: 88                           dey                       ;move one digit left
5c92: 10 ee                        bpl     :NextDigit
5c94: 60                           rts

5c95: 99 50 00     :Done           sta     score,y
5c98: 60                           rts

5c99: 00 ff ff 00+                 .junk   7

                   ; 
                   ; Increments the difficulty level.
                   ; 
5ca0: a5 56        IncDifficulty   lda     player_level      ;get current level
5ca2: 18                           clc
5ca3: 69 01                        adc     #$01
5ca5: c9 06                        cmp     #$06              ;more than 5?
5ca7: b0 03                        bcs     :Return           ;yes, don't change it
5ca9: 8d 56 00                     sta:    player_level
5cac: 60           :Return         rts

5cad: ea ff ff                     .junk   3

                   ; 
                   ; Decrements the difficulty level.
                   ; 
5cb0: a5 56        DecDifficulty   lda     player_level      ;get current level
5cb2: 38                           sec
5cb3: e9 01                        sbc     #$01
5cb5: f0 02                        beq     :Return           ;if reduced to zero, don't change it
5cb7: 85 56                        sta     player_level
5cb9: 60           :Return         rts

5cba: ff ff 00 00+                 .junk   6

                   ; 
                   ; Increments the number of bomb targets hit.
                   ; 
5cc0: a0 02        IncTargetsHit   ldy     #$02              ;3rd digit from left (00x)
5cc2: b9 57 00     :NextDigit      lda     targets_hit,y
5cc5: 18                           clc
5cc6: 69 01                        adc     #$01              ;add one
5cc8: c9 0a                        cmp     #10               ;rolled over?
5cca: 90 09                        bcc     :Done             ;no, done
5ccc: a9 00                        lda     #$00
5cce: 99 57 00                     sta     targets_hit,y
5cd1: 88                           dey
5cd2: 10 ee                        bpl     :NextDigit
5cd4: 60                           rts

5cd5: 99 57 00     :Done           sta     targets_hit,y
5cd8: 60                           rts

5cd9: 00 ff ff 00+                 .junk   7

                   ; 
                   ; Increments the number of hostile planes hit.
                   ; 
5ce0: a0 02        IncPlanesHit    ldy     #$02              ;3rd digit from left (00x)
5ce2: b9 5a 00     :NextDigit      lda     planes_hit,y
5ce5: 18                           clc
5ce6: 69 01                        adc     #$01              ;add one
5ce8: c9 0a                        cmp     #10               ;rolled over?
5cea: 90 09                        bcc     :Done             ;no, done
5cec: a9 00                        lda     #$00
5cee: 99 5a 00                     sta     planes_hit,y
5cf1: 88                           dey
5cf2: 10 ee                        bpl     :NextDigit
5cf4: 60                           rts

5cf5: 99 5a 00     :Done           sta     planes_hit,y
5cf8: 60                           rts

5cf9: 00 ff ff 00+                 .junk   7

                   ; 
                   ; "GAME OVER" message (20x8).  Shown in middle of black screen, starting on an
                   ; odd column.  Must not cross a page boundary.
                   vis
5d00: f8 87 c0 81+ game_over       .bulk   $f8,$87,$c0,$81,$8c,$98,$fc,$9f,$80,$80,$f8,$8f,$8c,$98,$fc,$9f
                                    +      $fc,$8b,$80,$80,$8c,$98,$b0,$86,$bc,$9e,$b0,$98,$80,$80,$8c,$98
                                    +      $8c,$98,$b0,$98,$8c,$98,$80,$80,$8c,$80,$8c,$98,$cc,$99,$b0,$80
                                    +      $80,$80,$8c,$98,$8c,$98,$b0,$80,$8c,$98,$80,$80,$8c,$80,$8c,$98
                                    +      $8c,$98,$f0,$81,$80,$80,$8c,$98,$b0,$86,$f0,$81,$fc,$8b,$80,$80
                                    +      $8c,$9e,$fc,$9f,$8c,$98,$b0,$80,$80,$80,$8c,$98,$b0,$86,$b0,$80
                                    +      $cc,$81,$80,$80,$8c,$98,$8c,$98,$8c,$98,$b0,$98,$80,$80,$8c,$98
                                    +      $c0,$81,$b0,$98,$8c,$86,$80,$80,$f8,$9f,$8c,$98,$8c,$98,$fc,$9f
                                    +      $80,$80,$f8,$8f,$c0,$81,$fc,$9f,$8c,$98,$80,$80,$80,$80,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
5da0: 00 00 00 00+                 .align  $0100 (96 bytes)

                   ; 
                   ; "PRESS PUSHBUTTON(0) TO START NEW MISSION" text.  (40x8)
                   vis
5e00: 1e 1e 3e 1c+ press_start_msg .bulk   $1e,$1e,$3e,$1c,$1c,$00,$1e,$22,$1c,$22,$1e,$22,$3e,$3e,$1c,$22
                                    +      $08,$1c,$08,$00,$3e,$1c,$00,$1c,$3e,$08,$1e,$3e,$00,$22,$3e,$22
                                    +      $00,$22,$1c,$1c,$1c,$1c,$1c,$22,$24,$22,$24,$22,$22,$00,$24,$22
                                    +      $22,$22,$24,$22,$2a,$2a,$22,$22,$04,$22,$10,$00,$2a,$22,$00,$22
                                    +      $2a,$14,$22,$2a,$00,$22,$24,$22,$00,$36,$08,$22,$22,$08,$22,$22
                                    +      $24,$22,$04,$02,$02,$00,$24,$22,$02,$22,$24,$22,$08,$08,$22,$26
                                    +      $02,$32,$20,$00,$08,$22,$00,$02,$08,$22,$22,$08,$00,$26,$04,$22
                                    +      $00,$2a,$08,$02,$02,$08,$22,$26,$1c,$1e,$0c,$1c,$1c,$00,$1c,$22
                                    +      $1c,$3e,$1c,$22,$08,$08,$22,$2a,$02,$2a,$20,$00,$08,$22,$00,$1c
                                    +      $08,$22,$1e,$08,$00,$2a,$0c,$22,$00,$22,$08,$1c,$1c,$08,$22,$2a
                                    +      $04,$0a,$04,$20,$20,$00,$04,$22,$20,$22,$24,$22,$08,$08,$22,$32
                                    +      $02,$26,$20,$00,$08,$22,$00,$20,$08,$3e,$0a,$08,$00,$32,$04,$2a
                                    +      $00,$22,$08,$20,$20,$08,$22,$32,$04,$12,$24,$22,$22,$00,$04,$22
                                    +      $22,$22,$24,$22,$08,$08,$22,$22,$04,$22,$10,$00,$08,$22,$00,$22
                                    +      $08,$22,$12,$08,$00,$22,$24,$2a,$00,$22,$08,$22,$22,$08,$22,$22
                                    +      $0e,$22,$3e,$1c,$1c,$00,$0e,$1c,$1c,$22,$1e,$1c,$1c,$1c,$1c,$22
                                    +      $08,$1c,$08,$00,$1c,$1c,$00,$1c,$1c,$22,$22,$1c,$00,$22,$3e,$14
                                    +      $00,$22,$1c,$1c,$1c,$1c,$1c,$22,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
5f40: 00 00 00 00+                 .junk   16

                   ; 
                   ; Draws the "GAME OVER" text, using exclusive-OR instructions.  Calling this a
                   ; second time erases the text.
                   ; 
                   • Clear variables
                   ]hptr           .var    $00    {addr/2}

5f50: a9 00        XdrawGameOver   lda     #<game_over
5f52: 8d 66 5f                     sta     :_Load+1          ;set low byte to zero
5f55: ea                           nop
5f56: ea                           nop
5f57: a2 60                        ldx     #96               ;line at middle of screen
5f59: bd 00 08     :RowLoop        lda     hires_addr_hi,x   ;get hi-res address
5f5c: 85 01                        sta     ]hptr+1
5f5e: bd c0 08                     lda     hires_addr_lo,x
5f61: 85 00                        sta     ]hptr
5f63: a0 0b                        ldy     #11               ;column 11
5f65: ad a0 5d     :_Load          lda     game_over+160     ;reads from $5d00-5d9f
5f68: 51 00                        eor     (]hptr),y         ;exclusive-OR with screen contents
5f6a: ea                           nop
5f6b: 91 00                        sta     (]hptr),y         ;store on screen
5f6d: ee 66 5f                     inc     :_Load+1          ;next byte
5f70: c8                           iny
5f71: c0 1f                        cpy     #31               ;drawn 20 bytes? (11+20=31)
5f73: 90 f0                        bcc     :_Load            ;not yet, loop
5f75: e8                           inx
5f76: e0 68                        cpx     #104              ;drawn 8 lines? (96+8=104)
5f78: 90 df                        bcc     :RowLoop          ;not yet, loop
5f7a: 60                           rts

5f7b: 00 00 00 00+                 .fill   5,$00

                   ; 
                   ; Draws the "press button 0 to start" message at the bottom of the screen.
                   ; 
                   DrawPressStartMsg
5f80: a9 00                        lda     #<press_start_msg ;init bitmap pointer
5f82: 8d 99 5f                     sta     :_Load+1
5f85: a9 5e                        lda     #>press_start_msg
5f87: 8d 9a 5f                     sta     :_Load+2
5f8a: a2 b8                        ldx     #184              ;near bottom of screen
5f8c: bd 00 08     :RowLoop        lda     hires_addr_hi,x   ;get hi-res address
5f8f: 85 01                        sta     ]hptr+1
5f91: bd c0 08                     lda     hires_addr_lo,x
5f94: 85 00                        sta     ]hptr
5f96: a0 00                        ldy     #$00
5f98: ad 40 5f     :_Load          lda     press_start_msg+$140 ;get byte from bitmap
5f9b: 91 00                        sta     (]hptr),y         ;store on hi-res screen
5f9d: ee 99 5f                     inc     :_Load+1          ;advance bitmap pointer
5fa0: d0 03                        bne     :NoInc
5fa2: ee 9a 5f                     inc     :_Load+2
5fa5: c8           :NoInc          iny
5fa6: c0 28                        cpy     #40               ;finished whole row?
5fa8: 90 ee                        bcc     :_Load            ;no, loop
5faa: e8                           inx
5fab: e0 c0                        cpx     #192              ;done?
5fad: 90 dd                        bcc     :RowLoop          ;no, loop
5faf: 60                           rts

5fb0: 00 00 00 00+                 .align  $0100 (80 bytes)

                   ; 
                   ; Player plane bitmap (9x28, height doubled).  Shifted right 7x, two pixels per
                   ; shift to avoid weird color effects.
                   vis vis
6000: 00 00 00 00+ phantom_s0      .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$80,$c0,$81,$80,$80,$00
                                    +      $00,$00,$80,$80,$c0,$81,$80,$80,$00,$00,$00,$80,$80,$e0,$83,$80
                                    +      $80,$00,$00,$00,$80,$80,$f0,$87,$80,$80,$00,$00,$00,$80,$80,$f8
                                    +      $8f,$80,$80,$00,$00,$00,$80,$80,$bc,$9e,$80,$80,$00,$00,$00,$80
                                    +      $80,$9c,$9c,$80,$80,$00,$00,$00,$80,$80,$fc,$9f,$80,$80,$00,$00
                                    +      $00,$80,$80,$9c,$9c,$80,$80,$00,$00,$00,$80,$80,$fc,$9f,$80,$80
                                    +      $00,$00,$00,$80,$80,$fc,$9f,$80,$80,$00,$00,$00,$80,$80,$fd,$df
                                    +      $80,$80,$00,$00,$00,$80,$c0,$ff,$ff,$81,$80,$00,$00,$00,$80,$f8
                                    +      $fb,$ef,$8f,$80,$00,$00,$00,$8c,$de,$fb,$ef,$bd,$98,$00,$00,$00
                                    +      $ec,$d5,$fb,$ef,$d5,$9b,$00,$00,$00,$bc,$d5,$fb,$ef,$d5,$9e,$00
                                    +      $00,$00,$ac,$d5,$fb,$ef,$d5,$9a,$00,$00,$00,$ac,$d5,$fb,$ef,$d5
                                    +      $9a,$00,$00,$00,$ac,$f5,$ff,$ff,$d3,$9a,$00,$00,$00,$ec,$bf,$fc
                                    +      $9f,$fe,$9b,$00,$00,$00,$bc,$80,$ef,$fb,$80,$9e,$00,$00,$00,$8c
                                    +      $e0,$af,$fb,$83,$98,$00,$00,$00,$80,$f0,$ce,$f9,$86,$80,$00,$00
                                    +      $00,$80,$f0,$87,$f0,$87,$80,$00,$00,$00,$80,$b0,$80,$80,$86,$80
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
60fc: 00 00 00 00                  .align  $0100 (4 bytes)

                   vis
6100: 80 80 80 80+ phantom_s1      .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$86,$80,$80,$80
                                    +      $80,$80,$80,$80,$80,$86,$80,$80,$80,$80,$80,$80,$80,$80,$8f,$80
                                    +      $80,$80,$80,$80,$80,$80,$c0,$9f,$80,$80,$80,$80,$80,$80,$80,$e0
                                    +      $bf,$80,$80,$80,$80,$80,$80,$80,$f0,$f9,$80,$80,$80,$80,$80,$80
                                    +      $80,$f0,$f0,$80,$80,$80,$80,$80,$80,$80,$f0,$ff,$80,$80,$80,$80
                                    +      $80,$80,$80,$f0,$f0,$80,$80,$80,$80,$80,$80,$80,$f0,$ff,$80,$80
                                    +      $80,$80,$80,$80,$80,$f0,$ff,$80,$80,$80,$80,$80,$80,$80,$f4,$ff
                                    +      $82,$80,$80,$80,$80,$80,$80,$fe,$ff,$87,$80,$80,$80,$80,$80,$e0
                                    +      $ef,$bf,$bf,$80,$80,$80,$80,$b0,$f8,$ee,$bf,$f7,$e1,$80,$80,$80
                                    +      $b0,$d7,$ee,$bf,$d7,$ee,$80,$80,$80,$f0,$d5,$ee,$bf,$d7,$fa,$80
                                    +      $80,$80,$b0,$d5,$ee,$bf,$d7,$ea,$80,$80,$80,$b0,$d5,$ee,$bf,$d7
                                    +      $ea,$80,$80,$80,$b0,$d5,$ff,$ff,$cf,$ea,$80,$80,$80,$b0,$ff,$f1
                                    +      $ff,$f8,$ef,$80,$80,$80,$f0,$81,$bc,$ef,$83,$f8,$80,$80,$80,$b0
                                    +      $80,$bf,$ed,$8f,$e0,$80,$80,$80,$80,$c0,$bb,$e6,$9b,$80,$80,$80
                                    +      $80,$80,$c0,$9f,$c0,$9f,$80,$80,$80,$80,$80,$c0,$81,$80,$98,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
61fc: 80 80 80 80                  .junk   4

                   vis
6200: 80 80 80 80+ phantom_s2      .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$98,$80,$80,$80
                                    +      $80,$80,$80,$80,$80,$98,$80,$80,$80,$80,$80,$80,$80,$80,$bc,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$fe,$80,$80,$80,$80,$80,$80,$80,$80
                                    +      $ff,$81,$80,$80,$80,$80,$80,$80,$c0,$e7,$83,$80,$80,$80,$80,$80
                                    +      $80,$c0,$c3,$83,$80,$80,$80,$80,$80,$80,$c0,$ff,$83,$80,$80,$80
                                    +      $80,$80,$80,$c0,$c3,$83,$80,$80,$80,$80,$80,$80,$c0,$ff,$83,$80
                                    +      $80,$80,$80,$80,$80,$c0,$ff,$83,$80,$80,$80,$80,$80,$80,$d0,$ff
                                    +      $8b,$80,$80,$80,$80,$80,$80,$f8,$ff,$9f,$80,$80,$80,$80,$80,$80
                                    +      $bf,$ff,$fd,$81,$80,$80,$80,$c0,$e1,$bb,$ff,$dd,$87,$83,$80,$80
                                    +      $c0,$dd,$ba,$ff,$dd,$ba,$83,$80,$80,$c0,$d7,$ba,$ff,$dd,$ea,$83
                                    +      $80,$80,$c0,$d5,$ba,$ff,$dd,$aa,$83,$80,$80,$c0,$d5,$ba,$ff,$dd
                                    +      $aa,$83,$80,$80,$c0,$d5,$fe,$ff,$bf,$aa,$83,$80,$80,$c0,$fd,$c7
                                    +      $ff,$e3,$bf,$83,$80,$80,$c0,$87,$f0,$bd,$8f,$e0,$83,$80,$80,$c0
                                    +      $81,$fc,$b5,$bf,$80,$83,$80,$80,$80,$80,$ee,$99,$ef,$80,$80,$80
                                    +      $80,$80,$80,$fe,$80,$fe,$80,$80,$80,$80,$80,$80,$86,$80,$e0,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
62fc: 80 80 80 80                  .junk   4

                   vis
6300: 80 80 80 80+ phantom_s3      .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$e0,$80,$80,$80
                                    +      $80,$80,$80,$80,$80,$e0,$80,$80,$80,$80,$80,$80,$80,$80,$f0,$81
                                    +      $80,$80,$80,$80,$80,$80,$80,$f8,$83,$80,$80,$80,$80,$80,$80,$80
                                    +      $fc,$87,$80,$80,$80,$80,$80,$80,$80,$9e,$8f,$80,$80,$80,$80,$80
                                    +      $80,$80,$8e,$8e,$80,$80,$80,$80,$80,$80,$80,$fe,$8f,$80,$80,$80
                                    +      $80,$80,$80,$80,$8e,$8e,$80,$80,$80,$80,$80,$80,$80,$fe,$8f,$80
                                    +      $80,$80,$80,$80,$80,$80,$fe,$8f,$80,$80,$80,$80,$80,$80,$c0,$fe
                                    +      $af,$80,$80,$80,$80,$80,$80,$e0,$ff,$ff,$80,$80,$80,$80,$80,$80
                                    +      $fc,$fd,$f7,$87,$80,$80,$80,$80,$86,$ef,$fd,$f7,$9e,$8c,$80,$80
                                    +      $80,$f6,$ea,$fd,$f7,$ea,$8d,$80,$80,$80,$de,$ea,$fd,$f7,$aa,$8f
                                    +      $80,$80,$80,$d6,$ea,$fd,$f7,$aa,$8d,$80,$80,$80,$d6,$ea,$fd,$f7
                                    +      $aa,$8d,$80,$80,$80,$d6,$fa,$ff,$ff,$a9,$8d,$80,$80,$80,$f6,$9f
                                    +      $fe,$8f,$ff,$8d,$80,$80,$80,$9e,$c0,$f7,$bd,$80,$8f,$80,$80,$80
                                    +      $86,$f0,$d7,$fd,$81,$8c,$80,$80,$80,$80,$b8,$e7,$bc,$83,$80,$80
                                    +      $80,$80,$80,$f8,$83,$f8,$83,$80,$80,$80,$80,$80,$98,$80,$80,$83
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
63fc: 80 80 80 80                  .junk   4

                   vis
6400: 80 80 80 80+ phantom_s4      .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$83,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$83,$80,$80,$80,$80,$80,$80,$80,$c0,$87
                                    +      $80,$80,$80,$80,$80,$80,$80,$e0,$8f,$80,$80,$80,$80,$80,$80,$80
                                    +      $f0,$9f,$80,$80,$80,$80,$80,$80,$80,$f8,$bc,$80,$80,$80,$80,$80
                                    +      $80,$80,$b8,$b8,$80,$80,$80,$80,$80,$80,$80,$f8,$bf,$80,$80,$80
                                    +      $80,$80,$80,$80,$b8,$b8,$80,$80,$80,$80,$80,$80,$80,$f8,$bf,$80
                                    +      $80,$80,$80,$80,$80,$80,$f8,$bf,$80,$80,$80,$80,$80,$80,$80,$fa
                                    +      $bf,$81,$80,$80,$80,$80,$80,$80,$ff,$ff,$83,$80,$80,$80,$80,$80
                                    +      $f0,$f7,$df,$9f,$80,$80,$80,$80,$98,$bc,$f7,$df,$fb,$b0,$80,$80
                                    +      $80,$d8,$ab,$f7,$df,$ab,$b7,$80,$80,$80,$f8,$aa,$f7,$df,$ab,$bd
                                    +      $80,$80,$80,$d8,$aa,$f7,$df,$ab,$b5,$80,$80,$80,$d8,$aa,$f7,$df
                                    +      $ab,$b5,$80,$80,$80,$d8,$ea,$ff,$ff,$a7,$b5,$80,$80,$80,$d8,$ff
                                    +      $f8,$bf,$fc,$b7,$80,$80,$80,$f8,$80,$de,$f7,$81,$bc,$80,$80,$80
                                    +      $98,$c0,$df,$f6,$87,$b0,$80,$80,$80,$80,$e0,$9d,$f3,$8d,$80,$80
                                    +      $80,$80,$80,$e0,$8f,$e0,$8f,$80,$80,$80,$80,$80,$e0,$80,$80,$8c
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
64fc: 80 80 80 80                  .junk   4

                   vis
6500: 80 80 80 80+ phantom_s5      .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$8c,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$8c,$80,$80,$80,$80,$80,$80,$80,$80,$9e
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$bf,$80,$80,$80,$80,$80,$80,$80
                                    +      $c0,$ff,$80,$80,$80,$80,$80,$80,$80,$e0,$f3,$81,$80,$80,$80,$80
                                    +      $80,$80,$e0,$e1,$81,$80,$80,$80,$80,$80,$80,$e0,$ff,$81,$80,$80
                                    +      $80,$80,$80,$80,$e0,$e1,$81,$80,$80,$80,$80,$80,$80,$e0,$ff,$81
                                    +      $80,$80,$80,$80,$80,$80,$e0,$ff,$81,$80,$80,$80,$80,$80,$80,$e8
                                    +      $ff,$85,$80,$80,$80,$80,$80,$80,$fc,$ff,$8f,$80,$80,$80,$80,$80
                                    +      $c0,$df,$ff,$fe,$80,$80,$80,$80,$e0,$f0,$dd,$ff,$ee,$c3,$81,$80
                                    +      $80,$e0,$ae,$dd,$ff,$ae,$dd,$81,$80,$80,$e0,$ab,$dd,$ff,$ae,$f5
                                    +      $81,$80,$80,$e0,$aa,$dd,$ff,$ae,$d5,$81,$80,$80,$e0,$aa,$dd,$ff
                                    +      $ae,$d5,$81,$80,$80,$e0,$aa,$ff,$ff,$9f,$d5,$81,$80,$80,$e0,$fe
                                    +      $e3,$ff,$f1,$df,$81,$80,$80,$e0,$83,$f8,$de,$87,$f0,$81,$80,$80
                                    +      $e0,$80,$fe,$da,$9f,$c0,$81,$80,$80,$80,$80,$f7,$cc,$b7,$80,$80
                                    +      $80,$80,$80,$80,$bf,$80,$bf,$80,$80,$80,$80,$80,$80,$83,$80,$b0
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
65fc: 80 80 80 80                  .junk   4

                   vis
6600: 80 80 80 80+ phantom_s6      .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$b0,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$b0,$80,$80,$80,$80,$80,$80,$80,$80,$f8
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$fc,$81,$80,$80,$80,$80,$80,$80
                                    +      $80,$fe,$83,$80,$80,$80,$80,$80,$80,$80,$cf,$87,$80,$80,$80,$80
                                    +      $80,$80,$80,$87,$87,$80,$80,$80,$80,$80,$80,$80,$ff,$87,$80,$80
                                    +      $80,$80,$80,$80,$80,$87,$87,$80,$80,$80,$80,$80,$80,$80,$ff,$87
                                    +      $80,$80,$80,$80,$80,$80,$80,$ff,$87,$80,$80,$80,$80,$80,$80,$a0
                                    +      $ff,$97,$80,$80,$80,$80,$80,$80,$f0,$ff,$bf,$80,$80,$80,$80,$80
                                    +      $80,$fe,$fe,$fb,$83,$80,$80,$80,$80,$c3,$f7,$fe,$bb,$8f,$86,$80
                                    +      $80,$80,$bb,$f5,$fe,$bb,$f5,$86,$80,$80,$80,$af,$f5,$fe,$bb,$d5
                                    +      $87,$80,$80,$80,$ab,$f5,$fe,$bb,$d5,$86,$80,$80,$80,$ab,$f5,$fe
                                    +      $bb,$d5,$86,$80,$80,$80,$ab,$fd,$ff,$ff,$d4,$86,$80,$80,$80,$fb
                                    +      $8f,$ff,$c7,$ff,$86,$80,$80,$80,$8f,$e0,$fb,$9e,$c0,$87,$80,$80
                                    +      $80,$83,$f8,$eb,$fe,$80,$86,$80,$80,$80,$80,$dc,$b3,$de,$81,$80
                                    +      $80,$80,$80,$80,$fc,$81,$fc,$81,$80,$80,$80,$80,$80,$8c,$80,$c0
                                    +      $81,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
66fc: 80 80 80 00                  .align  $0100 (4 bytes)

                   ; 
                   ; Bomb explosion sequence (6x18, height doubled).
                   ; 
                   ; These are drawn without erasing, with empty bytes (value=$00) being skipped. 
                   ; This allows them to blend with the terrain and with each other.
                   vis vis
6700: 00 00 00 00+ bomb_expl_0     .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$90,$00,$00,$00,$00,$00,$00,$88,$82,$00,$00,$00
                                    +      $a0,$88,$00,$00,$00,$00,$b0,$8f,$00,$00,$00,$00,$9c,$bf,$00,$00
                                    +      $00,$00,$f0,$b9,$00,$00,$00,$00,$b4,$83,$00,$00,$00,$00,$00,$a2
                                    +      $00,$00,$00,$00,$c8,$82,$00,$00,$00,$00,$00,$84,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00

                   vis
676c: 00 00 00 00+ bomb_expl_1     .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$82
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$8c,$90,$00,$00,$00,$80
                                    +      $a8,$98,$00,$00,$00,$c0,$e0,$8f,$00,$00,$00,$c0,$be,$9c,$00,$00
                                    +      $00,$00,$de,$f3,$00,$00,$00,$00,$90,$99,$00,$00,$00,$c0,$f8,$87
                                    +      $00,$00,$00,$00,$bc,$84,$00,$00,$00,$c0,$98,$89,$81,$00,$00,$c0
                                    +      $84,$90,$00,$00,$00,$80,$00,$81,$00,$00,$00,$00,$80,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00

                   vis
67d8: 00 00 00 00+ bomb_expl_2     .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$90,$88
                                    +      $00,$00,$00,$00,$a8,$84,$00,$00,$00,$c0,$90,$00,$81,$00,$00,$c0
                                    +      $ba,$8c,$84,$00,$00,$00,$f8,$bf,$00,$00,$00,$90,$ff,$b6,$00,$00
                                    +      $00,$80,$af,$f6,$81,$00,$00,$00,$af,$97,$00,$00,$00,$c0,$ef,$df
                                    +      $00,$00,$00,$00,$be,$8b,$82,$00,$00,$d0,$c1,$92,$00,$00,$00,$90
                                    +      $e0,$a0,$81,$00,$00,$00,$88,$a0,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00

                   vis
6844: 00 00 00 00+ bomb_expl_3     .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$a0,$00
                                    +      $00,$00,$00,$d0,$b0,$84,$00,$00,$00,$c0,$c4,$b0,$8e,$00,$00,$00
                                    +      $f0,$bf,$82,$00,$00,$00,$ff,$fd,$00,$00,$00,$00,$f1,$bb,$00,$00
                                    +      $00,$90,$ef,$f5,$83,$00,$00,$80,$8f,$fd,$81,$00,$00,$a0,$af,$bf
                                    +      $00,$00,$00,$00,$ee,$c5,$89,$00,$00,$00,$9c,$c7,$00,$00,$00,$90
                                    +      $88,$e0,$00,$00,$00,$80,$a1,$c1,$83,$00,$00,$00,$00,$82,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00

                   vis
68b0: 00 00 00 00+ bomb_expl_4     .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$84,$00,$00,$00,$88,$fc
                                    +      $8a,$00,$00,$a5,$9c,$86,$82,$00,$00,$00,$fc,$ef,$81,$00,$00,$c0
                                    +      $ab,$ff,$81,$00,$00,$fc,$ff,$de,$90,$00,$00,$fc,$cf,$ee,$00,$00
                                    +      $00,$e1,$a7,$cc,$83,$00,$00,$f8,$bd,$fd,$83,$00,$00,$fe,$a9,$ff
                                    +      $83,$00,$00,$e2,$aa,$ff,$a1,$00,$00,$f0,$ff,$8f,$00,$00,$00,$f9
                                    +      $d8,$88,$82,$00,$80,$c1,$98,$86,$82,$00,$a0,$c8,$00,$9e,$80,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00

                   vis
691c: 00 00 00 81+ bomb_expl_5     .bulk   $00,$00,$00,$81,$00,$00,$00,$00,$00,$82,$00,$00,$00,$81,$e0,$82
                                    +      $a4,$81,$00,$81,$e2,$86,$a0,$00,$00,$a0,$fe,$f7,$00,$00,$00,$00
                                    +      $ff,$df,$00,$00,$80,$fe,$f7,$fa,$81,$00,$00,$de,$f7,$9f,$a7,$00
                                    +      $00,$90,$e7,$d8,$87,$00,$c0,$b8,$e7,$dd,$83,$00,$00,$d8,$a7,$8d
                                    +      $82,$00,$00,$f8,$a7,$ff,$83,$00,$00,$fd,$bb,$bf,$00,$00,$00,$fc
                                    +      $ff,$8f,$82,$00,$a0,$00,$ab,$9c,$00,$00,$00,$00,$e2,$91,$00,$00
                                    +      $00,$88,$90,$80,$00,$00,$00,$00,$00,$00,$00,$00

                   vis
6988: 00 00 00 00+ bomb_expl_6     .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$8c,$00,$84,$00,$a0,$91,$9c,$86
                                    +      $80,$81,$00,$83,$fe,$c7,$a1,$00,$00,$c0,$fc,$fe,$83,$00,$00,$f8
                                    +      $ff,$fb,$82,$00,$c0,$8f,$97,$9f,$83,$00,$00,$ce,$d7,$f8,$8f,$00
                                    +      $00,$e8,$d7,$fd,$87,$81,$00,$f8,$a7,$b5,$81,$00,$a0,$e8,$a6,$8d
                                    +      $87,$00,$00,$fc,$ae,$fd,$81,$00,$a8,$f8,$ab,$fc,$83,$81,$c8,$e8
                                    +      $fb,$87,$00,$00,$00,$b8,$cf,$91,$84,$00,$a0,$a0,$84,$87,$b0,$81
                                    +      $00,$00,$88,$c4,$00,$81,$00,$00,$00,$c0,$00,$00

                   vis
69f4: 00 00 00 00+ bomb_expl_7     .bulk   $00,$00,$00,$00,$a0,$00,$00,$90,$82,$00,$90,$00,$00,$81,$87,$8f
                                    +      $c1,$00,$00,$00,$ff,$ff,$81,$00,$00,$f0,$fa,$ff,$83,$84,$00,$98
                                    +      $bb,$fd,$be,$00,$00,$cf,$ff,$bf,$b0,$00,$d0,$ff,$b7,$f0,$9f,$00
                                    +      $c0,$ff,$a2,$f4,$ff,$83,$00,$bc,$aa,$f6,$bd,$00,$80,$d1,$ab,$d9
                                    +      $8e,$00,$00,$d8,$8b,$df,$8e,$00,$00,$d8,$eb,$fd,$a3,$00,$90,$f0
                                    +      $ef,$ff,$81,$00,$a0,$f2,$bf,$84,$00,$00,$88,$f0,$c0,$87,$88,$00
                                    +      $88,$f0,$c0,$a6,$00,$00,$00,$00,$00,$00,$00,$00

                   vis
6a60: 00 84 00 00+ bomb_expl_8     .bulk   $00,$84,$00,$00,$00,$00,$a0,$a0,$00,$90,$00,$81,$a0,$00,$fe,$99
                                    +      $00,$00,$80,$c1,$fb,$bf,$82,$00,$a0,$fc,$a9,$e0,$cf,$00,$00,$ef
                                    +      $e0,$fb,$8f,$84,$00,$cf,$89,$ff,$8f,$00,$a0,$ff,$ab,$ff,$8f,$00
                                    +      $00,$ff,$a9,$a5,$87,$00,$90,$8c,$ab,$b3,$9f,$82,$00,$9c,$ee,$b1
                                    +      $96,$00,$90,$9e,$9f,$fc,$97,$00,$00,$c7,$af,$f8,$9f,$00,$00,$cf
                                    +      $ef,$fc,$86,$00,$88,$fe,$f7,$fd,$83,$00,$00,$f8,$9f,$ff,$a0,$00
                                    +      $00,$00,$8f,$81,$00,$00,$00,$00,$00,$00,$00,$00

                   vis
6acc: 80 00 00 00+ bomb_expl_9     .bulk   $80,$00,$00,$00,$00,$00,$90,$00,$e7,$f1,$e0,$00,$82,$f8,$8f,$bf
                                    +      $00,$00,$a8,$ec,$bf,$e4,$84,$00,$80,$c4,$bb,$d5,$8c,$82,$80,$a6
                                    +      $fa,$f4,$98,$00,$88,$ee,$fa,$ff,$90,$00,$c0,$fb,$f8,$cf,$9f,$81
                                    +      $c8,$92,$d2,$cb,$9f,$90,$cc,$d9,$91,$fc,$b1,$00,$fc,$ab,$9c,$ff
                                    +      $a9,$00,$fc,$ff,$fa,$ff,$ae,$00,$f0,$8e,$ea,$c7,$b7,$82,$e0,$ef
                                    +      $ab,$f7,$9f,$00,$82,$b8,$a9,$ff,$83,$00,$80,$f0,$ff,$81,$88,$00
                                    +      $80,$82,$87,$90,$00,$00,$80,$00,$00,$00,$00,$00

                   vis
6b38: 88 00 f1 b8+ bomb_expl_a     .bulk   $88,$00,$f1,$b8,$00,$00,$80,$f8,$df,$ff,$e1,$00,$80,$fe,$af,$be
                                    +      $f1,$81,$88,$bf,$a0,$b5,$ff,$83,$88,$fb,$d2,$9e,$fd,$97,$90,$ff
                                    +      $9a,$82,$fe,$87,$c0,$e9,$f0,$df,$f2,$8f,$e2,$ac,$dc,$f7,$e2,$8f
                                    +      $e0,$ab,$cd,$d5,$e3,$8e,$f8,$98,$a7,$d5,$fc,$92,$ec,$dc,$b7,$a5
                                    +      $f8,$82,$bc,$d1,$f7,$f1,$e6,$93,$f4,$97,$df,$fe,$f9,$83,$9c,$96
                                    +      $d0,$df,$ee,$81,$b0,$f4,$be,$d5,$be,$00,$e2,$b9,$b4,$ff,$87,$82
                                    +      $90,$f0,$af,$e3,$81,$00,$80,$e0,$87,$b0,$91,$00
6ba4: 00 00 00 00+                 .align  $0100 (92 bytes)

                   ; 
                   ; Bomb sight bitmap (7x19, height doubled).  7x19 is 133 bytes, but only 128
                   ; bytes are used, so there's some overlap in data.
                   vis
6c00: 00 00 00 00+ bomb_sight_s0   .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$60,$00,$00,$00,$00,$00,$00
                                    +      $60,$00,$00,$00,$00,$00,$00,$7e,$0f,$00,$00,$00,$00,$00,$60,$00
                                    +      $00,$00,$00,$00,$00,$60,$00,$00,$00,$00,$00,$00,$78,$03,$00,$00
                                    +      $00,$40,$01,$60,$00,$60,$00,$00,$40,$61,$60,$40,$61,$00,$00,$7c
                                    +      $7f,$07,$7e,$7f,$07,$00,$40,$61,$60,$40,$61,$00,$00,$40,$01,$60
                                    +      $00,$60,$00,$00,$00,$00,$78,$03,$00,$00,$00,$00,$00,$60,$00,$00
                                    +      $00,$00,$00,$00,$60,$00,$00,$00,$00,$00,$00,$7e,$0f,$00,$00,$00
                                    +      $00,$00,$60,$00,$00,$00,$00,$00,$00,$60,$00,$00,$00,$00,$00,$00

                   vis
6c80: 80 80 80 80+ bomb_sight_s1   .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$83,$80,$80,$80,$80,$80
                                    +      $80,$83,$80,$80,$80,$80,$80,$f8,$bf,$80,$80,$80,$80,$80,$80,$83
                                    +      $80,$80,$80,$80,$80,$80,$83,$80,$80,$80,$80,$80,$e0,$8f,$80,$80
                                    +      $80,$80,$86,$80,$83,$80,$83,$80,$80,$86,$83,$83,$86,$83,$80,$f0
                                    +      $ff,$9f,$f8,$ff,$9f,$80,$80,$86,$83,$83,$86,$83,$80,$80,$86,$80
                                    +      $83,$80,$83,$80,$80,$80,$e0,$8f,$80,$80,$80,$80,$80,$80,$83,$80
                                    +      $80,$80,$80,$80,$80,$83,$80,$80,$80,$80,$80,$f8,$bf,$80,$80,$80
                                    +      $80,$80,$80,$83,$80,$80,$80,$80,$80,$80,$83,$80,$80,$80,$80,$80

                   vis
6d00: 80 80 80 80+ bomb_sight_s2   .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$8c,$80,$80,$80,$80,$80
                                    +      $80,$8c,$80,$80,$80,$80,$80,$e0,$ff,$81,$80,$80,$80,$80,$80,$8c
                                    +      $80,$80,$80,$80,$80,$80,$8c,$80,$80,$80,$80,$80,$80,$bf,$80,$80
                                    +      $80,$80,$98,$80,$8c,$80,$8c,$80,$80,$98,$8c,$8c,$98,$8c,$80,$c0
                                    +      $ff,$ff,$e0,$ff,$ff,$80,$80,$98,$8c,$8c,$98,$8c,$80,$80,$98,$80
                                    +      $8c,$80,$8c,$80,$80,$80,$80,$bf,$80,$80,$80,$80,$80,$80,$8c,$80
                                    +      $80,$80,$80,$80,$80,$8c,$80,$80,$80,$80,$80,$e0,$ff,$81,$80,$80
                                    +      $80,$80,$80,$8c,$80,$80,$80,$80,$80,$80,$8c,$80,$80,$80,$80,$80

                   vis
6d80: 80 80 80 80+ bomb_sight_s3   .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$b0,$80,$80,$80,$80,$80
                                    +      $80,$b0,$80,$80,$80,$80,$80,$80,$ff,$87,$80,$80,$80,$80,$80,$b0
                                    +      $80,$80,$80,$80,$80,$80,$b0,$80,$80,$80,$80,$80,$80,$fc,$81,$80
                                    +      $80,$80,$e0,$80,$b0,$80,$b0,$80,$80,$e0,$b0,$b0,$e0,$b0,$80,$80
                                    +      $fe,$ff,$83,$ff,$ff,$83,$80,$e0,$b0,$b0,$e0,$b0,$80,$80,$e0,$80
                                    +      $b0,$80,$b0,$80,$80,$80,$80,$fc,$81,$80,$80,$80,$80,$80,$b0,$80
                                    +      $80,$80,$80,$80,$80,$b0,$80,$80,$80,$80,$80,$80,$ff,$87,$80,$80
                                    +      $80,$80,$80,$b0,$80,$80,$80,$80,$80,$80,$b0,$80,$80,$80,$80,$80

                   vis
6e00: 80 80 80 80+ bomb_sight_s4   .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$c0,$81,$80,$80,$80,$80
                                    +      $80,$c0,$81,$80,$80,$80,$80,$80,$fc,$9f,$80,$80,$80,$80,$80,$c0
                                    +      $81,$80,$80,$80,$80,$80,$c0,$81,$80,$80,$80,$80,$80,$f0,$87,$80
                                    +      $80,$80,$80,$83,$c0,$81,$c0,$81,$80,$80,$c3,$c1,$81,$c3,$81,$80
                                    +      $f8,$ff,$8f,$fc,$ff,$8f,$80,$80,$c3,$c1,$81,$c3,$81,$80,$80,$83
                                    +      $c0,$81,$c0,$81,$80,$80,$80,$f0,$87,$80,$80,$80,$80,$80,$c0,$81
                                    +      $80,$80,$80,$80,$80,$c0,$81,$80,$80,$80,$80,$80,$fc,$9f,$80,$80
                                    +      $80,$80,$80,$c0,$81,$80,$80,$80,$80,$80,$c0,$81,$80,$80,$80,$80

                   vis
6e80: 80 80 80 80+ bomb_sight_s5   .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$86,$80,$80,$80,$80
                                    +      $80,$80,$86,$80,$80,$80,$80,$80,$f0,$ff,$80,$80,$80,$80,$80,$80
                                    +      $86,$80,$80,$80,$80,$80,$80,$86,$80,$80,$80,$80,$80,$c0,$9f,$80
                                    +      $80,$80,$80,$8c,$80,$86,$80,$86,$80,$80,$8c,$86,$86,$8c,$86,$80
                                    +      $e0,$ff,$bf,$f0,$ff,$bf,$80,$80,$8c,$86,$86,$8c,$86,$80,$80,$8c
                                    +      $80,$86,$80,$86,$80,$80,$80,$c0,$9f,$80,$80,$80,$80,$80,$80,$86
                                    +      $80,$80,$80,$80,$80,$80,$86,$80,$80,$80,$80,$80,$f0,$ff,$80,$80
                                    +      $80,$80,$80,$80,$86,$80,$80,$80,$80,$80,$80,$86,$80,$80,$80,$80

                   vis
6f00: 80 80 80 80+ bomb_sight_s6   .bulk   $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$98,$80,$80,$80,$80
                                    +      $80,$80,$98,$80,$80,$80,$80,$80,$c0,$ff,$83,$80,$80,$80,$80,$80
                                    +      $98,$80,$80,$80,$80,$80,$80,$98,$80,$80,$80,$80,$80,$80,$fe,$80
                                    +      $80,$80,$80,$b0,$80,$98,$80,$98,$80,$80,$b0,$98,$98,$b0,$98,$80
                                    +      $80,$ff,$ff,$c1,$ff,$ff,$80,$80,$b0,$98,$98,$b0,$98,$80,$80,$b0
                                    +      $80,$98,$80,$98,$80,$80,$80,$80,$fe,$80,$80,$80,$80,$80,$80,$98
                                    +      $80,$80,$80,$80,$80,$80,$98,$80,$80,$80,$80,$80,$c0,$ff,$83,$80
                                    +      $80,$80,$80,$80,$98,$80,$80,$80,$80,$80,$80,$98,$80,$80,$80,$80
                                    +      $00,$00,$00,$00,$00
6f85: 00 00 00 00+                 .align  $0100 (123 bytes)

                   ; 
                   ; Player plane crash sequence (9x28, height doubled).
                   vis vis
7000: 00 00 00 00+ player_crash_0  .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$c0,$81,$80
                                    +      $80,$00,$00,$00,$00,$80,$c0,$81,$80,$80,$00,$00,$00,$00,$80,$e0
                                    +      $83,$80,$80,$00,$00,$00,$00,$80,$f0,$87,$80,$80,$00,$00,$00,$00
                                    +      $80,$f8,$8f,$80,$80,$00,$00,$00,$00,$80,$bc,$9e,$88,$80,$00,$00
                                    +      $00,$00,$80,$9c,$9c,$a0,$80,$00,$00,$00,$00,$80,$fc,$9f,$80,$80
                                    +      $00,$00,$00,$00,$91,$9c,$9c,$80,$80,$00,$00,$00,$00,$80,$fc,$9f
                                    +      $84,$87,$00,$00,$00,$00,$80,$fc,$9f,$80,$80,$00,$00,$00,$00,$84
                                    +      $fd,$df,$90,$82,$00,$00,$00,$00,$c0,$ff,$ff,$89,$88,$00,$00,$00
                                    +      $0c,$f8,$fb,$ef,$8f,$8f,$00,$00,$00,$0c,$de,$fb,$ef,$bd,$98,$00
                                    +      $00,$00,$7c,$d5,$fb,$ef,$d5,$9b,$00,$00,$00,$ac,$d5,$fb,$6b,$fd
                                    +      $9e,$00,$00,$00,$ac,$d5,$fb,$6b,$f8,$da,$00,$00,$00,$ac,$d5,$fb
                                    +      $6b,$d5,$9a,$00,$00,$00,$ac,$f5,$ff,$7b,$d2,$9a,$00,$00,$00,$ec
                                    +      $bf,$fc,$1b,$fc,$9b,$00,$00,$00,$3c,$80,$ef,$7b,$c0,$9e,$00,$00
                                    +      $00,$0c,$e0,$af,$7b,$93,$99,$00,$00,$00,$04,$f0,$ce,$79,$b6,$80
                                    +      $00,$00,$00,$00,$f0,$87,$7a,$87,$80,$00,$00,$00,$00,$b0,$80,$1a
                                    +      $86,$80,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00
70fc: 00 00 00 00                  .align  $0100 (4 bytes)

                   vis
7100: 00 00 00 00+ player_crash_1  .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$60,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$70,$00,$00,$00,$00,$00,$00,$00,$00,$78
                                    +      $01,$00,$00,$00,$00,$00,$00,$80,$6e,$c3,$80,$00,$00,$00,$00,$00
                                    +      $00,$7f,$03,$00,$00,$00,$00,$00,$00,$00,$47,$03,$00,$00,$00,$00
                                    +      $00,$00,$81,$0f,$03,$a2,$84,$00,$00,$00,$80,$00,$77,$03,$00,$c5
                                    +      $00,$00,$00,$88,$c1,$07,$73,$00,$88,$00,$00,$00,$80,$40,$7f,$3b
                                    +      $ba,$8e,$00,$00,$00,$80,$50,$7f,$e3,$9f,$e3,$00,$00,$00,$00,$78
                                    +      $7f,$a3,$fe,$bb,$00,$00,$00,$00,$3f,$7f,$93,$f0,$80,$00,$00,$40
                                    +      $71,$dd,$eb,$f3,$c8,$fe,$00,$00,$40,$af,$dd,$7f,$92,$c8,$81,$00
                                    +      $00,$40,$ab,$d5,$fb,$d6,$fc,$e9,$00,$00,$40,$ab,$d5,$eb,$96,$f1
                                    +      $8d,$00,$00,$40,$ab,$dd,$ef,$96,$ed,$81,$00,$00,$40,$eb,$ff,$ed
                                    +      $28,$9d,$ec,$00,$00,$40,$7f,$71,$ff,$4d,$ee,$9b,$00,$00,$60,$01
                                    +      $3c,$ff,$78,$ef,$89,$00,$00,$60,$01,$3f,$6f,$61,$f8,$84,$00,$00
                                    +      $00,$40,$3b,$6c,$4d,$e2,$84,$00,$00,$00,$40,$1f,$e7,$19,$90,$00
                                    +      $00,$00,$00,$60,$c0,$c1,$7d,$82,$00,$00,$00,$00,$00,$c0,$81,$4c
                                    +      $00,$00,$00,$00,$00,$00,$00,$88,$00,$00,$00,$00
71fc: 00 00 00 00                  .align  $0100 (4 bytes)

                   vis
7200: 00 00 00 00+ player_crash_2  .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$60,$81,$00
                                    +      $00,$00,$00,$00,$00,$00,$60,$81,$82,$00,$00,$00,$00,$00,$00,$78
                                    +      $81,$00,$00,$00,$00,$00,$80,$81,$de,$83,$00,$00,$00,$00,$00,$00
                                    +      $80,$df,$85,$80,$00,$00,$00,$00,$80,$00,$87,$e7,$80,$80,$00,$00
                                    +      $00,$a0,$84,$8f,$b3,$82,$00,$00,$00,$00,$80,$60,$73,$83,$a4,$80
                                    +      $00,$00,$00,$80,$e1,$9f,$fe,$e0,$85,$00,$00,$00,$00,$68,$df,$79
                                    +      $d7,$83,$00,$00,$00,$81,$7c,$cf,$40,$e3,$81,$00,$00,$10,$c1,$5f
                                    +      $ef,$5d,$ee,$81,$00,$00,$50,$bb,$b5,$d7,$15,$84,$8a,$00,$00,$40
                                    +      $a5,$f7,$eb,$59,$a3,$00,$00,$00,$60,$ad,$f5,$eb,$7d,$ed,$9f,$00
                                    +      $00,$60,$ab,$f5,$c3,$54,$0d,$93,$00,$00,$70,$aa,$f5,$8b,$5d,$cf
                                    +      $81,$00,$00,$70,$f7,$1f,$df,$5c,$ed,$b3,$00,$00,$30,$58,$7f,$ff
                                    +      $7c,$fe,$bb,$00,$00,$00,$70,$77,$ff,$6d,$03,$9e,$00,$00,$00,$30
                                    +      $47,$bf,$45,$c3,$83,$00,$00,$00,$70,$63,$88,$40,$a3,$82,$00,$00
                                    +      $00,$0c,$90,$dc,$70,$82,$00,$00,$00,$00,$00,$98,$f0,$4e,$00,$00
                                    +      $00,$00,$00,$00,$8c,$20,$08,$00,$00,$00,$00,$00,$00,$90,$84,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$8c,$00,$00,$00,$00
72fc: 00 00 00 00                  .align  $0100 (4 bytes)

                   vis
7300: 00 00 00 00+ player_crash_3  .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$84,$60,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$78,$00,$00,$00,$00,$00,$00,$a0,$80,$7e
                                    +      $00,$00,$00,$00,$00,$00,$80,$84,$7f,$00,$00,$00,$00,$00,$00,$00
                                    +      $81,$67,$02,$00,$00,$00,$00,$00,$a0,$e1,$47,$02,$92,$00,$00,$00
                                    +      $00,$88,$f0,$79,$82,$00,$00,$00,$00,$00,$00,$f0,$f3,$9a,$80,$00
                                    +      $00,$00,$00,$00,$fc,$b5,$be,$b6,$00,$00,$00,$60,$40,$ff,$b7,$be
                                    +      $81,$80,$00,$00,$30,$5f,$fd,$fe,$fa,$81,$c7,$00,$00,$70,$9b,$f5
                                    +      $7f,$60,$a1,$80,$00,$00,$50,$aa,$f5,$bf,$fc,$e3,$83,$00,$00,$50
                                    +      $9a,$f5,$bb,$fd,$a9,$00,$00,$00,$c4,$bd,$f5,$3b,$fd,$f9,$00,$00
                                    +      $00,$94,$c7,$ed,$3b,$dd,$e1,$83,$00,$00,$90,$7c,$7f,$af,$97,$b8
                                    +      $00,$00,$00,$80,$6c,$7d,$bb,$9d,$82,$00,$00,$00,$90,$7c,$f0,$cf
                                    +      $9d,$be,$00,$00,$00,$80,$a3,$dc,$db,$18,$8c,$00,$00,$00,$00,$b0
                                    +      $c7,$cf,$00,$00,$00,$00,$00,$40,$b2,$d5,$8b,$1e,$e7,$81,$00,$00
                                    +      $50,$a0,$95,$c2,$3a,$84,$80,$00,$00,$50,$be,$87,$c6,$66,$80,$80
                                    +      $00,$00,$00,$84,$00,$80,$1c,$80,$00,$00,$00,$00,$80,$82,$00,$87
                                    +      $00,$00,$00,$00,$00,$88,$88,$00,$83,$00,$00,$00
73fc: 00 00 00 00                  .align  $0100 (4 bytes)

                   vis
7400: 00 00 00 00+ player_crash_4  .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$a0,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $be,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$00,$00,$00,$00,$00,$00
                                    +      $00,$20,$ef,$a1,$00,$00,$00,$00,$00,$c0,$b8,$a3,$81,$00,$00,$00
                                    +      $00,$88,$00,$bc,$e3,$81,$00,$00,$00,$00,$80,$00,$fe,$d3,$81,$00
                                    +      $00,$00,$00,$00,$00,$fe,$fb,$84,$88,$00,$00,$00,$00,$81,$ff,$b7
                                    +      $80,$00,$00,$00,$00,$84,$fd,$ff,$9b,$b9,$00,$00,$00,$00,$c0,$ef
                                    +      $3d,$8b,$81,$82,$00,$00,$90,$e0,$da,$be,$bf,$db,$80,$00,$00,$00
                                    +      $b5,$da,$b4,$8f,$84,$8e,$00,$00,$a0,$fd,$ff,$92,$cf,$8f,$83,$00
                                    +      $00,$80,$fe,$cf,$92,$cf,$c7,$82,$00,$00,$b4,$f8,$c7,$b4,$da,$aa
                                    +      $88,$00,$00,$f0,$9e,$db,$14,$9b,$ca,$82,$00,$00,$94,$fe,$aa,$de
                                    +      $9f,$8c,$00,$00,$00,$10,$fe,$a3,$b6,$8e,$93,$00,$00,$00,$94,$f4
                                    +      $e7,$17,$b8,$9a,$83,$00,$00,$60,$eb,$c7,$11,$a2,$82,$00,$00,$00
                                    +      $00,$90,$bc,$18,$80,$87,$00,$00,$00,$00,$90,$ad,$09,$c8,$c3,$00
                                    +      $00,$00,$00,$00,$84,$18,$00,$d4,$00,$00,$00,$00,$82,$8c,$00,$00
                                    +      $9c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
74fc: 00 00 00 00                  .align  $0100 (4 bytes)

                   vis
7500: 00 00 00 00+ player_crash_5  .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$82,$00,$00,$00,$00,$00,$00,$00,$00,$80
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$8e,$82,$00,$00,$00,$00,$00
                                    +      $81,$40,$8f,$00,$00,$00,$00,$00,$00,$84,$5c,$8f,$00,$00,$00,$00
                                    +      $00,$00,$90,$fc,$cf,$e3,$00,$00,$00,$00,$00,$00,$fe,$c6,$b0,$00
                                    +      $00,$00,$00,$82,$c1,$9f,$f7,$00,$00,$00,$00,$00,$c0,$fd,$4f,$dd
                                    +      $87,$00,$00,$00,$00,$e0,$bf,$52,$fc,$e1,$81,$00,$00,$c0,$f2,$88
                                    +      $f8,$fd,$86,$00,$00,$00,$00,$b0,$b0,$bc,$e3,$8f,$00,$00,$00,$00
                                    +      $98,$d0,$01,$bc,$f8,$81,$00,$00,$40,$fb,$c9,$1d,$8c,$81,$00,$00
                                    +      $00,$40,$f9,$89,$5e,$8f,$88,$00,$00,$00,$00,$9e,$8d,$cb,$89,$87
                                    +      $00,$00,$00,$40,$de,$df,$0b,$00,$82,$00,$00,$00,$94,$00,$85,$82
                                    +      $84,$fe,$8f,$00,$00,$00,$cc,$83,$41,$c0,$c3,$81,$00,$00,$00,$85
                                    +      $00,$50,$c3,$cf,$00,$00,$00,$00,$82,$90,$10,$d0,$00,$00,$00,$00
                                    +      $00,$82,$91,$18,$89,$83,$00,$00,$00,$00,$88,$81,$08,$f9,$81,$00
                                    +      $00,$00,$00,$00,$00,$5c,$81,$00,$00,$00,$00,$00,$00,$00,$1c,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
75fc: 00 00 00 00                  .align  $0100 (4 bytes)

                   vis
7600: 00 00 00 00+ player_crash_6  .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$a0,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$80,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$80,$00,$00,$00,$00,$82,$00,$90,$00,$80,$00,$00
                                    +      $00,$00,$00,$00,$9c,$00,$80,$00,$00,$00,$00,$00,$00,$b7,$00,$00
                                    +      $00,$00,$00,$00,$88,$c0,$b1,$00,$00,$00,$00,$00,$00,$00,$c0,$90
                                    +      $87,$00,$00,$00,$00,$00,$00,$e0,$be,$00,$00,$00,$00,$00,$00,$fc
                                    +      $f9,$bf,$87,$00,$00,$00,$00,$80,$ff,$af,$8b,$87,$00,$00,$00,$00
                                    +      $84,$fe,$c3,$ff,$98,$00,$00,$00,$00,$84,$f8,$9d,$9f,$88,$00,$00
                                    +      $00,$00,$00,$ae,$9c,$b2,$00,$00,$00,$00,$00,$00,$82,$ec,$a2,$00
                                    +      $82,$00,$00,$00,$80,$e0,$a7,$00,$90,$80,$00,$00,$00,$90,$b8,$96
                                    +      $00,$00,$00,$00,$00,$00,$80,$b8,$82,$e0,$85,$00,$00,$00,$00,$00
                                    +      $c0,$9b,$c8,$81,$00,$00,$00,$00,$00,$00,$d8,$8a,$00,$00,$00,$00
                                    +      $00,$c0,$b8,$c2,$e0,$85,$00,$00,$00,$00,$00,$c0,$9b,$c0,$81,$00
                                    +      $00,$00,$00,$00,$00,$88,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
76fc: 00 00 00 00                  .align  $0100 (4 bytes)

                   vis
7700: 00 00 00 00+ player_crash_7  .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$a0,$00,$00,$00,$00,$00,$00
                                    +      $80,$00,$00,$00,$00,$00,$00,$00,$00,$80,$c4,$88,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$80,$00,$00,$00,$00,$00,$90,$a0,$00,$80,$81,$00
                                    +      $00,$00,$00,$00,$80,$de,$a1,$81,$00,$00,$00,$00,$00,$00,$e3,$a1
                                    +      $00,$00,$00,$00,$00,$80,$00,$ff,$9c,$00,$00,$00,$00,$00,$c0,$d6
                                    +      $ef,$a5,$f8,$00,$00,$00,$00,$00,$ce,$e4,$81,$af,$00,$00,$00,$00
                                    +      $f0,$fd,$fe,$c7,$bf,$00,$00,$00,$00,$98,$ff,$df,$00,$00,$00,$00
                                    +      $00,$00,$e8,$db,$dc,$00,$00,$00,$00,$00,$00,$a0,$bc,$8e,$a7,$00
                                    +      $00,$00,$00,$00,$00,$88,$84,$82,$00,$00,$00,$00,$00,$00,$80,$a0
                                    +      $f8,$00,$00,$00,$00,$00,$00,$b0,$82,$fe,$81,$00,$00,$00,$00,$00
                                    +      $c0,$00,$c4,$00,$00,$00,$00,$00,$00,$00,$84,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$80,$00,$00,$00,$00,$00,$00,$00,$80,$c0,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$84,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
77fc: 00 00 00 00                  .junk   4

                   vis
7800: 00 00 00 00+ player_crash_8  .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$c0,$82,$80,$82,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$a0,$00,$00,$00,$00
                                    +      $00,$00,$00,$84,$00,$80,$00,$00,$00,$00,$00,$00,$c0,$80,$00,$00
                                    +      $00,$00,$00,$00,$8b,$a1,$88,$00,$00,$00,$00,$00,$00,$cb,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$fc,$f8,$c3,$80,$00,$00,$00,$00,$82,$f0
                                    +      $c1,$e7,$00,$00,$00,$00,$00,$90,$f8,$8f,$89,$00,$00,$00,$00,$00
                                    +      $f4,$a8,$00,$88,$00,$00,$00,$00,$00,$00,$bd,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$84,$e1,$a1,$00,$00,$00,$00,$00,$00,$00,$f0,$83,$00
                                    +      $00,$00,$00,$00,$81,$82,$00,$00,$00,$00,$00,$00,$00,$00,$82,$86
                                    +      $c0,$83,$00,$00,$00,$00,$00,$00,$82,$00,$82,$00,$00,$00,$00,$90
                                    +      $88,$00,$00,$00,$00,$00,$00,$00,$84,$00,$00,$84,$00,$00,$00,$00
                                    +      $00,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$90,$00,$00,$00
                                    +      $00,$00,$00,$00,$82,$85,$00,$00,$00,$00,$00,$00,$00,$80,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
78fc: 00 00 00 00                  .junk   4

                   ; 
                   ; Deadly flak burst sequence (7x23, height doubled).
                   vis vis
7900: 00 00 00 00+ flak_burst_0    .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$c0,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$81,$00,$00,$00,$00
                                    +      $00,$98,$b0,$00,$00,$00,$00,$00,$a2,$9a,$86,$00,$00,$00,$00,$b4
                                    +      $e9,$00,$00,$80,$00,$b0,$8e,$a5,$8b,$00,$00,$00,$00,$f2,$df,$00
                                    +      $00,$00,$00,$08,$f3,$8f,$9b,$00,$00,$00,$88,$fb,$d7,$01,$00,$00
                                    +      $00,$20,$a1,$91,$88,$00,$00,$00,$a0,$bc,$bb,$02,$00,$00,$00,$00
                                    +      $93,$9b,$00,$00,$00,$00,$00,$98,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00

                   vis
79a1: 00 00 00 00+ flak_burst_1    .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$81,$00,$00
                                    +      $00,$00,$00,$84,$a2,$00,$00,$00,$00,$00,$88,$a1,$88,$00,$00,$00
                                    +      $a0,$96,$90,$82,$00,$00,$00,$c0,$f0,$89,$c9,$00,$00,$00,$88,$a5
                                    +      $f5,$84,$00,$00,$00,$c0,$a2,$a7,$91,$00,$00,$00,$92,$e0,$a7,$84
                                    +      $81,$00,$00,$c0,$9c,$f9,$82,$00,$00,$00,$a0,$a8,$9c,$88,$00,$00
                                    +      $00,$c4,$80,$c0,$a1,$00,$00,$00,$00,$98,$90,$84,$00,$00,$00,$84
                                    +      $00,$00,$00,$00,$00,$00,$00,$c4,$a0,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00

                   vis
7a42: 00 00 00 00+ flak_burst_2    .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$81,$00,$00
                                    +      $00,$00,$00,$82,$00,$81,$00,$00,$00,$00,$00,$a1,$00,$00,$00,$00
                                    +      $00,$84,$90,$a0,$00,$00,$00,$c0,$99,$8f,$86,$00,$00,$00,$85,$a4
                                    +      $87,$00,$86,$00,$00,$90,$88,$b1,$b2,$00,$00,$00,$00,$f5,$c7,$00
                                    +      $00,$00,$c0,$c8,$f6,$8f,$e4,$00,$00,$00,$00,$f8,$8b,$00,$90,$00
                                    +      $00,$00,$b3,$c6,$8a,$00,$00,$00,$94,$b6,$d8,$90,$81,$00,$00,$82
                                    +      $91,$89,$82,$00,$00,$00,$a0,$88,$91,$84,$00,$00,$00,$88,$84,$a0
                                    +      $90,$00,$00,$00,$00,$84,$81,$00,$00,$00,$00,$00,$c0,$c0,$00,$00
                                    +      $00

                   vis
7ae3: 00 00 00 00+ flak_burst_3    .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$c1,$00,$84,$00,$00,$00,$00,$84,$c1,$00,$00
                                    +      $00,$00,$00,$84,$a0,$00,$00,$00,$00,$c4,$00,$81,$90,$81,$00,$00
                                    +      $00,$98,$9a,$88,$00,$00,$90,$82,$85,$ba,$00,$90,$00,$00,$e8,$fc
                                    +      $9f,$cc,$82,$00,$00,$00,$dc,$f1,$00,$00,$00,$c0,$91,$e6,$af,$89
                                    +      $a6,$00,$88,$00,$f8,$9d,$00,$00,$00,$00,$c0,$94,$99,$84,$00,$00
                                    +      $00,$84,$f0,$85,$88,$81,$00,$00,$00,$d1,$81,$83,$8a,$00,$00,$81
                                    +      $90,$91,$88,$00,$00,$00,$90,$00,$81,$90,$00,$00,$00,$00,$84,$e0
                                    +      $00,$00,$00,$00,$00,$00,$82,$82,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00

                   vis
7b84: 00 00 00 00+ flak_burst_4    .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$84,$84,$00,$00,$00,$00,$88,$84,$82,$00
                                    +      $00,$00,$a0,$00,$82,$00,$81,$00,$00,$c0,$90,$c4,$c1,$00,$00,$88
                                    +      $00,$a6,$95,$90,$00,$00,$00,$86,$a0,$bc,$88,$98,$00,$00,$d0,$f0
                                    +      $c8,$e1,$00,$00,$00,$80,$c4,$ed,$86,$00,$00,$b0,$80,$e8,$ef,$00
                                    +      $82,$00,$c0,$b1,$ee,$df,$8c,$d1,$00,$00,$00,$cc,$83,$c6,$00,$00
                                    +      $00,$b0,$d0,$c9,$81,$81,$00,$c0,$81,$c8,$95,$00,$a8,$00,$00,$00
                                    +      $8f,$84,$88,$00,$00,$00,$90,$a2,$c4,$c0,$00,$00,$00,$88,$90,$84
                                    +      $81,$81,$00,$00,$00,$84,$82,$82,$00,$00,$00,$00,$84,$84,$00,$00
                                    +      $00

                   vis
7c25: 00 00 00 00+ flak_burst_5    .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$84
                                    +      $84,$00,$00,$00,$a0,$8c,$84,$86,$00,$00,$00,$a0,$90,$88,$82,$84
                                    +      $00,$00,$00,$90,$00,$81,$84,$00,$c0,$00,$a3,$ec,$e0,$00,$00,$00
                                    +      $81,$c0,$b0,$00,$c0,$00,$00,$8c,$c8,$9d,$84,$b4,$00,$00,$90,$c3
                                    +      $df,$b7,$82,$00,$00,$00,$f2,$e2,$81,$00,$00,$e8,$8c,$d9,$cd,$a0
                                    +      $c0,$83,$00,$c0,$db,$d7,$99,$8a,$00,$00,$e0,$b3,$b9,$9c,$00,$00
                                    +      $00,$cc,$c0,$ab,$00,$83,$00,$e8,$00,$a6,$81,$83,$e0,$81,$00,$e0
                                    +      $98,$a2,$88,$00,$00,$00,$00,$00,$00,$a1,$00,$00,$00,$85,$88,$82
                                    +      $81,$85,$00,$00,$00,$84,$00,$9c,$00,$00,$00,$00,$83,$86,$00,$00
                                    +      $00

                   vis
7cc6: 00 00 00 00+ flak_burst_6    .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$a0,$a0,$83,$a4,$00
                                    +      $00,$00,$c8,$00,$92,$86,$00,$00,$c0,$85,$86,$82,$82,$ba,$00,$a0
                                    +      $92,$88,$c2,$c0,$81,$00,$00,$ea,$90,$a2,$88,$00,$00,$cc,$83,$81
                                    +      $b2,$84,$c0,$06,$94,$81,$e4,$91,$81,$8e,$00,$87,$a0,$ad,$8b,$98
                                    +      $00,$00,$00,$a0,$f0,$ef,$81,$00,$00,$94,$91,$fa,$b9,$9a,$a5,$01
                                    +      $00,$00,$a4,$c7,$00,$c0,$84,$00,$90,$a9,$88,$86,$f0,$00,$c0,$88
                                    +      $e4,$ea,$c0,$fc,$00,$a0,$c0,$a4,$91,$83,$99,$00,$a0,$a0,$90,$a1
                                    +      $84,$b0,$00,$00,$c4,$90,$a3,$8c,$a0,$00,$00,$c4,$84,$00,$90,$00
                                    +      $00

                   vis
7d67: 00 00 00 00+ flak_burst_7    .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$e0,$00
                                    +      $00,$00,$00,$00,$90,$00,$c1,$90,$00,$00,$00,$dc,$e0,$83,$84,$00
                                    +      $00,$90,$87,$82,$00,$87,$00,$00,$88,$90,$84,$83,$00,$91,$00,$00
                                    +      $a0,$b0,$d2,$f1,$00,$00,$98,$00,$a2,$92,$8e,$00,$00,$82,$84,$bc
                                    +      $bf,$d8,$d0,$01,$00,$c0,$f9,$ee,$85,$00,$00,$00,$a2,$cc,$9b,$a4
                                    +      $82,$00,$98,$91,$e6,$9f,$84,$e2,$00,$00,$00,$bd,$f0,$00,$c0,$00
                                    +      $8b,$a4,$84,$97,$c6,$00,$00,$a2,$82,$c4,$00,$81,$8c,$00,$00,$c0
                                    +      $a0,$92,$a5,$88,$00,$c0,$eb,$88,$82,$00,$88,$00,$c0,$85,$88,$a2
                                    +      $9c,$00,$00,$00,$84,$00,$00,$9e,$84,$00,$00,$00,$84,$c2,$00,$00
                                    +      $00
7e08: 00 00 00 00+                 .junk   504

                   ; 
                   ; Data for drawing the "shot through the windshield" graphic.  Essentially a
                   ; compressed full-screen overlay.
                   ; 
                   ; Algorithm: set the hi-res pointer to $2000, and start walking through the
                   ; data.
                   ;  - If the value is <= 0x7f, it's EORed with the byte at the hi-res pointer. 
                   ; The hi-res pointer is incremented.
                   ;  - If 0x80 <= value < 0xff, then (value & 0x7f) is added to the hi-res
                   ; pointer.
                   ;  - If the value is 0xff, stop: we've reached the end of the list.
                   vis
8000: ad 02 01 84+ shatter_data    .bulk   $ad,$02,$01,$84,$02,$83,$30,$31,$02,$10,$82,$20,$81,$40,$55,$2a
                                    +      $05,$1c,$10,$90,$20,$01,$84,$03,$82,$05,$82,$08,$10,$81,$04,$85
                                    +      $10,$86,$02,$b7,$20,$01,$81,$40,$83,$01,$83,$5c,$77,$26,$02,$54
                                    +      $81,$04,$08,$40,$2a,$83,$7b,$22,$7e,$01,$85,$10,$89,$40,$85,$06
                                    +      $87,$04,$81,$10,$87,$14,$86,$28,$90,$40,$02,$85,$02,$83,$08,$87
                                    +      $28,$84,$50,$97,$40,$38,$18,$05,$43,$07,$3c,$83,$55,$0a,$07,$78
                                    +      $81,$03,$06,$28,$01,$8d,$04,$84,$06,$40,$02,$82,$01,$83,$04,$82
                                    +      $02,$88,$01,$86,$20,$01,$8b,$40,$0a,$83,$0a,$85,$02,$40,$86,$28
                                    +      $84,$40,$8b,$10,$89,$40,$2a,$01,$81,$18,$81,$4e,$30,$45,$20,$81
                                    +      $02,$81,$20,$1d,$85,$60,$84,$20,$05,$88,$20,$83,$28,$85,$08,$85
                                    +      $02,$81,$08,$89,$02,$90,$01,$88,$08,$84,$40,$84,$20,$01,$84,$20
                                    +      $8b,$20,$89,$02,$83,$20,$83,$08,$34,$82,$20,$83,$20,$84,$01,$04
                                    +      $86,$01,$86,$02,$05,$87,$04,$87,$01,$8b,$04,$9a,$20,$83,$02,$82
                                    +      $10,$85,$10,$8c,$02,$81,$2a,$86,$01,$83,$15,$82,$40,$01,$20,$04
                                    +      $60,$82,$50,$83,$04,$83,$40,$40,$87,$08,$8c,$40,$83,$10,$85,$40
                                    +      $8c,$08,$9a,$01,$82,$08,$82,$10,$84,$20,$50,$02,$8a,$15,$87,$05
                                    +      $83,$04,$83,$40,$01,$81,$02,$11,$81,$60,$21,$82,$50,$81,$40,$84
                                    +      $08,$0c,$87,$40,$8a,$20,$84,$40,$93,$10,$97,$01,$84,$20,$82,$17
                                    +      $83,$10,$01,$81,$28,$87,$0a,$82,$01,$83,$40,$0a,$84,$40,$85,$03
                                    +      $81,$10,$02,$81,$02,$81,$02,$84,$10,$08,$84,$40,$01,$9e,$04,$8c
                                    +      $08,$b9,$02,$04,$84,$08,$83,$1c,$18,$81,$10,$82,$28,$55,$6a,$01
                                    +      $81,$10,$46,$1f,$86,$02,$89,$20,$85,$01,$81,$20,$01,$83,$10,$81
                                    +      $04,$85,$50,$86,$08,$90,$50,$86,$20,$85,$20,$84,$10,$85,$05,$83
                                    +      $40,$02,$8a,$04,$85,$04,$81,$50,$81,$04,$81,$74,$40,$14,$81,$04
                                    +      $02,$55,$84,$49,$2a,$62,$86,$10,$89,$40,$85,$03,$82,$02,$84,$05
                                    +      $89,$10,$86,$20,$01,$90,$0a,$85,$08,$89,$08,$81,$0a,$84,$14,$98
                                    +      $1a,$58,$0b,$06,$1c,$30,$84,$40,$01,$40,$07,$03,$04,$81,$15,$92
                                    +      $02,$50,$83,$01,$83,$10,$82,$02,$88,$01,$87,$05,$8b,$54,$84,$28
                                    +      $85,$08,$40,$86,$0a,$84,$10,$8b,$04,$89,$54,$0a,$82,$0c,$81,$7c
                                    +      $1a,$83,$02,$82,$05,$85,$40,$85,$54,$8c,$0a,$85,$02,$04,$84,$08
                                    +      $81,$08,$89,$02,$99,$20,$89,$20,$91,$20,$89,$02,$83,$30,$82,$01
                                    +      $08,$60,$83,$01,$87,$04,$0c,$86,$04,$86,$20,$01,$87,$01,$93,$04
                                    +      $9b,$01,$85,$10,$85,$10,$8c,$02,$40,$0a,$86,$01,$82,$40,$83,$60
                                    +      $82,$04,$40,$01,$81,$41,$02,$86,$40,$40,$01,$86,$20,$84,$04,$87
                                    +      $40,$83,$10,$92,$08,$9a,$01,$85,$10,$84,$08,$81,$2a,$89,$20,$15
                                    +      $86,$28,$01,$83,$05,$83,$40,$83,$01,$81,$40,$03,$82,$40,$02,$40
                                    +      $84,$08,$08,$87,$40,$02,$81,$20,$87,$20,$84,$40,$86,$20,$8c,$10
                                    +      $97,$04,$86,$40,$13,$83,$10,$03,$81,$08,$86,$50,$87,$50,$02,$84
                                    +      $10,$84,$40,$01,$84,$02,$81,$02,$84,$40,$08,$85,$03,$89,$02,$94
                                    +      $04,$8c,$20,$b9,$02,$14,$84,$08,$83,$0f,$4e,$81,$11,$82,$02,$82
                                    +      $03,$81,$40,$7f,$1d,$86,$02,$89,$20,$84,$40,$01,$81,$20,$01,$83
                                    +      $10,$81,$04,$85,$40,$02,$85,$20,$90,$40,$02,$85,$20,$85,$20,$89
                                    +      $20,$84,$50,$8b,$50,$85,$14,$81,$45,$02,$10,$81,$5c,$70,$04,$81
                                    +      $44,$2a,$01,$83,$40,$41,$6a,$33,$54,$2a,$55,$2a,$55,$2a,$15,$89
                                    +      $50,$84,$40,$01,$82,$02,$84,$01,$89,$40,$87,$05,$90,$28,$85,$20
                                    +      $89,$08,$40,$85,$05,$98,$2f,$7e,$0e,$06,$10,$10,$84,$70,$82,$7c
                                    +      $01,$0c,$81,$50,$02,$8c,$01,$84,$03,$05,$83,$01,$83,$10,$82,$02
                                    +      $88,$04,$87,$14,$8b,$15,$84,$20,$01,$84,$20,$40,$86,$02,$84,$10
                                    +      $8b,$04,$89,$55,$83,$04,$81,$64,$0c,$10,$82,$02,$82,$14,$85,$40
                                    +      $01,$84,$40,$02,$87,$08,$82,$50,$86,$02,$04,$84,$08,$8b,$08,$9a
                                    +      $01,$88,$08,$85,$08,$8b,$20,$88,$40,$84,$18,$81,$28,$01,$20,$41
                                    +      $01,$82,$01,$83,$01,$83,$04,$08,$86,$14,$85,$40,$89,$01,$87,$04
                                    +      $8b,$10,$9b,$01,$85,$10,$85,$04,$8d,$54,$86,$20,$83,$20,$83,$30
                                    +      $81,$08,$10,$81,$03,$81,$01,$0a,$82,$10,$83,$40,$81,$01,$86,$20
                                    +      $84,$04,$87,$10,$83,$10,$86,$02,$8b,$20,$9a,$01,$85,$10,$84,$08
                                    +      $82,$15,$88,$28,$04,$86,$0a,$84,$01,$83,$60,$81,$40,$20,$83,$0f
                                    +      $83,$0a,$86,$18,$88,$02,$81,$20,$87,$08,$84,$40,$86,$20,$8c,$40
                                    +      $97,$04,$86,$60,$10,$83,$04,$06,$81,$02,$86,$14,$82,$20,$84,$15
                                    +      $85,$10,$84,$60,$82,$44,$82,$02,$81,$02,$01,$84,$02,$85,$08,$89
                                    +      $02,$a1,$20,$ba,$50,$84,$20,$82,$64,$03,$47,$20,$11,$81,$40,$83
                                    +      $06,$81,$6e,$07,$0c,$86,$02,$89,$08,$84,$60,$82,$20,$83,$20,$10
                                    +      $88,$02,$86,$01,$90,$0a,$86,$01,$84,$20,$84,$40,$84,$0a,$84,$14
                                    +      $8b,$40,$02,$10,$83,$50,$20,$01,$0a,$10,$81,$5c,$63,$75,$81,$10
                                    +      $85,$40,$30,$6a,$3b,$05,$8f,$10,$84,$60,$82,$40,$85,$01,$81,$40
                                    +      $88,$02,$86,$14,$90,$2a,$01,$84,$20,$01,$82,$02,$86,$10,$84,$20
                                    +      $01,$97,$50,$07,$16,$26,$13,$81,$14,$81,$05,$82,$18,$82,$40,$81
                                    +      $08,$82,$2a,$8c,$01,$83,$40,$21,$01,$83,$01,$86,$02,$88,$04,$87
                                    +      $50,$8a,$28,$01,$85,$05,$85,$01,$85,$40,$02,$84,$04,$8b,$04,$89
                                    +      $01,$83,$06,$81,$44,$04,$10,$82,$08,$82,$50,$02,$83,$20,$81,$01
                                    +      $85,$02,$87,$08,$82,$14,$85,$40,$81,$04,$84,$08,$8b,$08,$9a,$04
                                    +      $84,$02,$83,$0a,$85,$08,$94,$40,$84,$08,$40,$0a,$81,$20,$01,$03
                                    +      $82,$01,$83,$01,$83,$04,$18,$86,$10,$85,$40,$88,$20,$88,$04,$8b
                                    +      $10,$9b,$01,$82,$08,$82,$10,$85,$04,$8b,$40,$81,$15,$86,$20,$83
                                    +      $08,$83,$18,$81,$08,$10,$81,$07,$81,$01,$08,$82,$10,$85,$01,$87
                                    +      $01,$83,$04,$87,$10,$8a,$02,$8b,$20,$9a,$01,$82,$20,$82,$10,$84
                                    +      $02,$82,$10,$87,$40,$0a,$04,$85,$40,$02,$83,$20,$84,$30,$81,$40
                                    +      $20,$40,$82,$0e,$83,$08,$81,$02,$83,$20,$10,$88,$08,$81,$20,$87
                                    +      $08,$84,$40,$93,$40,$97,$10,$85,$01,$30,$10,$83,$04,$0c,$40,$87
                                    +      $05,$82,$20,$84,$05,$85,$04,$84,$30,$82,$44,$82,$02,$40,$81,$01
                                    +      $84,$2a,$85,$20,$89,$02,$94,$10,$8d,$01,$b9,$40,$02,$83,$20,$82
                                    +      $6c,$41,$15,$28,$01,$81,$10,$83,$0c,$5c,$1d,$81,$06,$85,$40,$8a
                                    +      $08,$84,$30,$82,$20,$83,$20,$10,$88,$08,$86,$04,$90,$20,$86,$01
                                    +      $89,$40,$83,$40,$02,$84,$05,$8c,$28,$10,$83,$40,$2a,$81,$28,$40
                                    +      $81,$56,$23,$47,$07,$50,$0a,$84,$60,$60,$79,$3a,$90,$10,$84,$20
                                    +      $82,$40,$85,$01,$81,$40,$88,$08,$86,$50,$8f,$50,$02,$05,$85,$05
                                    +      $82,$02,$85,$20,$14,$84,$28,$97,$20,$55,$0e,$12,$42,$15,$81,$14
                                    +      $81,$14,$82,$0e,$84,$18,$82,$20,$05,$8b,$01,$83,$60,$0a,$88,$40
                                    +      $8b,$10,$87,$40,$02,$89,$2a,$86,$14,$85,$04,$85,$50,$85,$04,$94
                                    +      $20,$84,$03,$81,$04,$81,$10,$82,$08,$83,$0a,$83,$20,$81,$01,$85
                                    +      $08,$87,$08,$81,$20,$01,$85,$40,$81,$04,$84,$20,$81,$20,$89,$20
                                    +      $9a,$10,$84,$02,$82,$40,$02,$85,$02,$8b,$08,$88,$10,$84,$0c,$54
                                    +      $82,$20,$01,$06,$82,$04,$83,$01,$84,$10,$86,$40,$85,$40,$88,$28
                                    +      $82,$10,$91,$40,$9b,$01,$82,$08,$82,$10,$85,$04,$8b,$40,$20,$01
                                    +      $86,$08,$83,$02,$83,$08,$81,$08,$10,$81,$0e,$82,$20,$82,$10,$84
                                    +      $02,$03,$87,$05,$8b,$04,$8a,$02,$8c,$01,$99,$01,$82,$20,$82,$10
                                    +      $84,$02,$82,$04,$87,$50,$81,$04,$85,$54,$84,$08,$84,$18,$81,$40
                                    +      $81,$40,$82,$1c,$83,$28,$81,$02,$83,$20,$30,$88,$08,$89,$02,$84
                                    +      $40,$87,$01,$a3,$10,$85,$01,$1c,$10,$83,$01,$08,$40,$86,$28,$88
                                    +      $01,$85,$04,$84,$10,$82,$14,$83,$40,$81,$01,$84,$28,$86,$01,$9d
                                    +      $10,$8d,$01,$b3,$50,$83,$40,$82,$02,$83,$20,$82,$2c,$20,$15,$08
                                    +      $05,$81,$04,$82,$20,$55,$77,$4e,$81,$07,$85,$40,$8a,$0a,$84,$18
                                    +      $82,$20,$83,$20,$04,$81,$10,$86,$20,$86,$50,$91,$01,$85,$04,$8d
                                    +      $50,$84,$20,$8d,$20,$11,$84,$02,$81,$20,$41,$81,$57,$6d,$1d,$1c
                                    +      $81,$28,$15,$83,$30,$28,$2b,$0c,$05,$94,$30,$82,$14,$81,$01,$83
                                    +      $01,$81,$40,$88,$08,$86,$40,$02,$8e,$14,$81,$14,$85,$14,$82,$02
                                    +      $85,$20,$05,$84,$0a,$97,$2a,$60,$38,$10,$43,$14,$81,$01,$81,$50
                                    +      $82,$03,$84,$10,$83,$14,$8f,$70,$02,$83,$20,$84,$40,$8b,$10,$88
                                    +      $0a,$88,$50,$02,$86,$50,$85,$10,$85,$10,$85,$01,$8b,$01,$88,$20
                                    +      $84,$01,$81,$04,$02,$83,$08,$83,$28,$81,$20,$55,$2a,$81,$03,$85
                                    +      $28,$89,$28,$86,$10,$81,$04,$84,$20,$81,$20,$89,$20,$9a,$40,$84
                                    +      $02,$82,$40,$86,$02,$8b,$08,$88,$10,$84,$26,$05,$83,$01,$0c,$82
                                    +      $04,$87,$10,$30,$86,$40,$85,$10,$88,$08,$82,$10,$85,$10,$8b,$40
                                    +      $9b,$01,$82,$08,$82,$10,$85,$01,$8b,$40,$2a,$87,$0a,$82,$40,$02
                                    +      $83,$0c,$82,$14,$81,$1c,$20,$82,$01,$86,$02,$02,$87,$04,$83,$01
                                    +      $87,$04,$8a,$08,$8c,$01,$99,$01,$82,$20,$82,$14,$87,$05,$87,$14
                                    +      $87,$15,$84,$0a,$84,$0c,$82,$08,$40,$82,$38,$83,$20,$01,$02,$84
                                    +      $21,$88,$20,$81,$08,$8c,$40,$87,$01,$8c,$02,$96,$40,$85,$01,$0e
                                    +      $10,$83,$01,$18,$10,$86,$0a,$83,$08,$8a,$04,$84,$18,$82,$10,$83
                                    +      $40,$81,$01,$84,$20,$86,$04,$87,$40,$95,$10,$8d,$04,$b3,$40,$02
                                    +      $82,$40,$82,$08,$84,$01,$81,$1c,$20,$04,$02,$04,$81,$01,$81,$40
                                    +      $0a,$58,$06,$7f,$81,$03,$85,$40,$8a,$02,$84,$0c,$82,$28,$83,$20
                                    +      $04,$81,$10,$87,$01,$85,$40,$02,$90,$04,$85,$10,$84,$08,$85,$02
                                    +      $82,$04,$84,$08,$8e,$14,$87,$05,$42,$15,$2e,$71,$70,$01,$81,$54
                                    +      $0a,$82,$78,$0b,$1c,$0c,$52,$8f,$04,$84,$18,$81,$20,$01,$81,$01
                                    +      $83,$04,$81,$40,$88,$20,$87,$0a,$8d,$20,$05,$81,$50,$85,$50,$89
                                    +      $01,$83,$40,$02,$96,$54,$02,$30,$60,$01,$61,$40,$02,$41,$82,$02
                                    +      $60,$01,$84,$30,$83,$40,$02,$89,$20,$84,$1c,$84,$20,$87,$08,$88
                                    +      $40,$88,$28,$88,$55,$87,$40,$02,$84,$40,$85,$04,$85,$01,$8b,$01
                                    +      $88,$08,$83,$40,$01,$82,$02,$04,$82,$20,$83,$20,$55,$2a,$82,$01
                                    +      $02,$85,$20,$87,$02,$40,$02,$86,$10,$81,$04,$84,$20,$81,$20,$8a
                                    +      $01,$9a,$02,$83,$02,$82,$10,$85,$40,$8c,$08,$88,$04,$84,$2a,$83
                                    +      $20,$01,$18,$82,$14,$83,$04,$83,$10,$20,$87,$02,$84,$10,$88,$02
                                    +      $82,$10,$85,$10,$8c,$02,$9a,$01,$82,$08,$82,$10,$85,$01,$8b,$40
                                    +      $0a,$86,$50,$83,$40,$84,$06,$81,$02,$14,$81,$38,$20,$82,$05,$86
                                    +      $02,$06,$87,$10,$83,$01,$87,$01,$8a,$08,$8c,$04,$97,$55,$2a,$01
                                    +      $82,$20,$82,$14,$83,$40,$83,$01,$86,$20,$05,$81,$01,$84,$20,$01
                                    +      $83,$40,$02,$84,$06,$81,$10,$08,$83,$20,$84,$05,$85,$64,$8a,$08
                                    +      $8d,$01,$86,$01,$8c,$02,$91,$08,$84,$40,$85,$01,$0b,$10,$82,$20
                                    +      $81,$30,$04,$83,$40,$2a,$55,$02,$83,$08,$8a,$01,$84,$0c,$82,$01
                                    +      $82,$08,$40,$87,$01,$85,$10,$87,$40,$95,$40,$8d,$04,$b4,$28,$82
                                    +      $40,$82,$20,$84,$01,$81,$34,$08,$44,$02,$81,$20,$81,$20,$15,$81
                                    +      $08,$62,$69,$47,$01,$90,$02,$84,$04,$82,$28,$84,$04,$81,$10,$87
                                    +      $05,$86,$0a,$90,$10,$85,$40,$84,$08,$85,$02,$81,$20,$01,$83,$40
                                    +      $02,$96,$10,$62,$30,$1e,$63,$01,$07,$82,$2a,$15,$28,$0d,$0f,$81
                                    +      $06,$02,$0a,$8e,$04,$84,$0c,$81,$28,$82,$01,$83,$04,$8a,$20,$87
                                    +      $28,$8d,$28,$82,$40,$02,$84,$40,$02,$87,$20,$01,$83,$40,$8b,$10
                                    +      $8a,$20,$15,$81,$10,$81,$43,$31,$44,$2a,$40,$82,$28,$30,$85,$20
                                    +      $84,$2a,$89,$20,$84,$0d,$84,$08,$85,$02,$81,$08,$88,$40,$91,$05
                                    +      $88,$02,$84,$40,$85,$05,$84,$20,$8c,$01,$88,$08,$83,$60,$83,$08
                                    +      $14,$82,$20,$83,$20,$84,$01,$06,$86,$01,$86,$02,$50,$87,$04,$87
                                    +      $01,$8b,$01,$9a,$08,$83,$02,$82,$10,$85,$40,$8e,$28,$86,$04,$83
                                    +      $50,$02,$82,$01,$20,$81,$30,$82,$10,$83,$04,$83,$10,$60,$87,$0a
                                    +      $84,$10,$88,$02,$82,$10,$85,$40,$8c,$02,$9a,$01,$82,$08,$82,$10
                                    +      $84,$20,$05,$8b,$50,$87,$14,$83,$10,$84,$03,$81,$02,$10,$81,$70
                                    +      $20,$82,$14,$81,$40,$84,$08,$04,$87,$10,$83,$01,$87,$01,$8a,$08
                                    +      $8c,$04,$97,$01,$84,$20,$82,$1d,$83,$40,$82,$20,$87,$28,$82,$01
                                    +      $84,$2a,$84,$40,$85,$02,$81,$10,$02,$83,$22,$84,$04,$08,$84,$50
                                    +      $8a,$08,$a1,$08,$91,$22,$85,$02,$84,$61,$03,$10,$82,$20,$81,$60
                                    +      $05,$81,$50,$3a,$15,$86,$08,$8a,$01,$08,$83,$06,$82,$05,$82,$08
                                    +      $40,$87,$04,$85,$40,$9d,$40,$99,$ff
89f9: ff ff ff ff+                 .align  $0100 (7 bytes)

                   ; 
                   ; Start of terrain data.  This runs from $8a00 to $bfff, separated into two
                   ; ranges by the file loader.  This chunk spans $8a00-afff, with $b000-bfff
                   ; starting at +001c00.
                   ; 
                   ; At 40 bytes per line, that gives us 345 lines, just shy of 2x the height of
                   ; the hi-res screen (which loses 8 lines at the top for the status area).
                   ; 
                   vis vis
8a00: 00 00 00 00+ terrain_data    .bulk   $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$00,$00,$00,$00,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$d5,$aa,$d5,$aa,$10,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$91,$a2,$c4,$88,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$08,$11,$22,$44,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$c5,$88,$91,$a2,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$91,$a2,$c4,$88,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$91,$a2,$c4,$88,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$08,$11,$22,$44,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$c5,$88,$91,$a2,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$91,$a2,$c4,$88,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$91,$a2,$c4,$88,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$08,$11,$22,$44,$00
                                    +      $00,$41,$00,$00,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$c5,$88,$91,$a2,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$91,$a2,$c4,$88,$00,$00,$41,$00,$00,$aa,$d5,$aa,$85
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$91,$a2,$c4,$88,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$08,$11,$22,$44,$00
                                    +      $00,$41,$00,$00,$8a,$91,$a2,$84,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$d5,$aa,$d5,$aa,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$91,$a2,$c4,$88,$00,$00,$41,$00,$00,$a2,$c4,$88,$85
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$08,$11,$22,$44,$00
                                    +      $00,$41,$00,$00,$8a,$91,$a2,$84,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$a2,$c4,$88,$81
                                    +      $00,$80,$aa,$d5,$aa,$d5,$8a,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$00,$00,$00,$00,$00
                                    +      $00,$41,$00,$00,$8a,$0c,$18,$85,$00,$c0,$a2,$c4,$88,$91,$8a,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$a2,$3c,$1e,$81
                                    +      $00,$c0,$8c,$91,$a2,$c4,$82,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$00,$00,$00,$00,$00
                                    +      $00,$41,$00,$00,$8a,$4c,$19,$84,$00,$c0,$a8,$d5,$aa,$d5,$88,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$08,$11,$22,$44,$00,$00,$41,$00,$00,$a2,$0c,$18,$81
                                    +      $00,$c0,$88,$00,$00,$c0,$88,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$91,$a2,$c4,$88,$00
                                    +      $00,$41,$00,$00,$8a,$0c,$18,$84,$00,$c0,$88,$21,$08,$c2,$88,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$08,$11,$22,$44,$00,$00,$41,$00,$00,$a2,$0c,$18,$81
                                    +      $00,$c0,$88,$04,$21,$c0,$88,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$91,$a2,$c4,$88,$00
                                    +      $00,$41,$00,$00,$8a,$0c,$18,$84,$00,$c0,$88,$00,$00,$c0,$88,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$08,$11,$22,$44,$00,$00,$41,$00,$00,$a2,$c5,$88,$81
                                    +      $00,$c0,$a8,$d5,$aa,$d5,$88,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$91,$a2,$c4,$88,$00
                                    +      $00,$41,$00,$00,$aa,$91,$a2,$84,$00,$c0,$88,$91,$a2,$c4,$89,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$08,$11,$22,$44,$00,$00,$41,$00,$00,$a2,$c4,$88,$85
                                    +      $01,$c0,$a2,$c4,$88,$d1,$8c,$00,$a4,$02,$00,$ff,$ff,$87,$00,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$91,$a2,$c4,$88,$00
                                    +      $00,$41,$00,$00,$8a,$91,$a2,$84,$01,$c0,$aa,$d5,$aa,$d5,$8a,$00
                                    +      $12,$01,$00,$81,$00,$84,$00,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$08,$11,$22,$44,$00,$00,$41,$00,$00,$aa,$c4,$88,$81
                                    +      $01,$00,$00,$00,$00,$00,$00,$00,$24,$02,$00,$f1,$1f,$84,$00,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$00,$00,$00,$00,$00
                                    +      $00,$41,$00,$00,$aa,$d5,$aa,$85,$01,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$f9,$3f,$84,$00,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $01,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$fd,$7f,$84,$00,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$00,$00,$00,$00,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$01,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$fd,$7f,$84,$00,$00,$41,$20,$10,$08,$04,$02,$41,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $01,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$fd,$7f,$84,$00,$00
                                    +      $08,$04,$02,$41,$20,$10,$08,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$08,$11,$22,$a4,$92,$01,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$f9,$3f,$84,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$22,$44,$08,$12,$49
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$f1,$1f,$84,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$08,$11,$22,$a4,$92,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$ff,$ff,$87,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$22,$44,$08,$12,$49
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$08,$11,$22,$a4,$92,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$22,$44,$08,$12,$49
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$08,$11,$22,$a4,$92,$00,$d5,$aa,$d5,$aa,$d5,$82,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$22,$44,$08,$12,$49
                                    +      $00,$95,$49,$24,$12,$c9,$82,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$08,$11,$22,$a4,$92,$00,$d1,$0c,$18,$00,$94,$82,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$c5,$3c,$1e,$80,$c5,$82,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$d5,$4c,$19,$a8,$54,$82,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$d5,$0c,$18,$8a,$54,$82,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$00,$a4,$92,$c9,$a4,$00,$95,$0c,$18,$a8,$54,$82,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$00,$12,$49,$24,$12
                                    +      $00,$c5,$0c,$18,$80,$d5,$82,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$00,$a4,$92,$c9,$a4,$00,$d1,$0c,$18,$00,$94,$82,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$00,$12,$49,$24,$12
                                    +      $00,$d5,$aa,$d5,$aa,$d5,$82,$00,$a4,$02,$00,$a2,$c4,$88,$91,$a2
                                    +      $c4,$a3,$c4,$88,$91,$a2,$c4,$88,$01,$04,$20,$d5,$aa,$d5,$aa,$d5
                                    +      $82,$41,$00,$00,$a4,$92,$c9,$a4,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$88,$91,$a2,$c4,$88,$91,$88,$91,$a2,$c4,$88,$91,$a2
                                    +      $01,$04,$00,$95,$0c,$18,$12,$c9,$82,$41,$00,$00,$12,$49,$24,$12
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$a2,$aa,$d5,$aa,$d5
                                    +      $8a,$a2,$aa,$d5,$aa,$d5,$8a,$88,$01,$04,$00,$d1,$3c,$1e,$00,$94
                                    +      $82,$41,$00,$00,$a4,$92,$c9,$a4,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$88,$a2,$c4,$88,$91,$8a,$88,$a2,$c4,$88,$91,$8a,$a2
                                    +      $01,$04,$00,$c5,$4c,$19,$80,$c5,$82,$41,$00,$00,$12,$49,$24,$12
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$a2,$8c,$91,$a2,$c4
                                    +      $82,$a2,$8c,$91,$a2,$c4,$82,$88,$01,$04,$00,$d5,$0c,$18,$a8,$54
                                    +      $82,$41,$00,$00,$a4,$92,$c9,$a4,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$88,$a8,$d5,$aa,$d5,$88,$88,$a8,$7c,$07,$d5,$88,$a2
                                    +      $01,$04,$00,$d5,$0c,$18,$8a,$54,$82,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$a2,$88,$00,$00,$c0
                                    +      $88,$a2,$88,$0c,$18,$c0,$88,$88,$01,$04,$00,$95,$0c,$18,$a8,$54
                                    +      $82,$41,$00,$00,$00,$00,$00,$00,$00,$00,$08,$11,$22,$44,$00,$00
                                    +      $12,$01,$00,$88,$88,$21,$08,$c2,$88,$88,$88,$0c,$18,$c2,$88,$a2
                                    +      $01,$04,$00,$c5,$0c,$18,$80,$d5,$82,$41,$00,$00,$a4,$92,$00,$00
                                    +      $00,$00,$22,$44,$08,$11,$00,$00,$a4,$02,$00,$a2,$88,$04,$21,$c0
                                    +      $88,$a2,$88,$7c,$07,$c0,$88,$88,$01,$04,$00,$d1,$00,$00,$00,$94
                                    +      $82,$41,$00,$00,$12,$49,$00,$00,$00,$00,$08,$11,$22,$44,$00,$00
                                    +      $12,$01,$00,$88,$88,$00,$00,$c0,$88,$88,$88,$4c,$01,$c0,$88,$a2
                                    +      $01,$04,$00,$d5,$aa,$d5,$aa,$d5,$82,$41,$00,$00,$a4,$92,$00,$00
                                    +      $00,$00,$22,$44,$08,$11,$00,$00,$a4,$02,$00,$a2,$a8,$d5,$aa,$d5
                                    +      $88,$a2,$a8,$0c,$06,$d5,$88,$88,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$12,$49,$00,$00,$00,$00,$08,$11,$22,$44,$00,$00
                                    +      $12,$01,$00,$88,$88,$91,$a2,$c4,$89,$88,$88,$0c,$18,$c4,$89,$a2
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$41,$00,$00,$a4,$92,$00,$00
                                    +      $00,$00,$22,$44,$08,$11,$00,$00,$a4,$02,$00,$a2,$a2,$c4,$88,$d1
                                    +      $8c,$a2,$a2,$c4,$88,$d1,$8c,$88,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$12,$49,$00,$00,$00,$00,$08,$11,$22,$44,$00,$00
                                    +      $12,$01,$00,$88,$aa,$d5,$aa,$d5,$8a,$88,$aa,$d5,$aa,$d5,$8a,$a2
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$41,$00,$00,$a4,$92,$00,$00
                                    +      $00,$00,$22,$44,$08,$11,$00,$00,$a4,$02,$00,$a2,$c4,$88,$91,$a2
                                    +      $c4,$a2,$c4,$88,$91,$a2,$c4,$88,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$12,$49,$00,$00,$00,$00,$08,$11,$22,$44,$00,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$41,$00,$00,$a4,$92,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$a4,$92,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$41,$00,$00,$12,$49,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$a4,$92,$00,$00,$00,$d5,$aa,$d5,$aa,$d5,$82,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$41,$00,$00,$12,$49,$00,$00
                                    +      $80,$95,$49,$24,$12,$c9,$82,$00,$a4,$02,$00,$00,$50,$4a,$ff,$ff
                                    +      $ff,$ff,$ff,$ff,$00,$d5,$aa,$85,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$41,$00,$00,$a4,$92,$00,$00,$81,$d1,$00,$00,$00,$94,$82,$00
                                    +      $12,$01,$00,$00,$08,$00,$81,$80,$80,$80,$80,$f8,$00,$81,$00,$84
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$10,$41,$00,$00,$12,$49,$00,$00
                                    +      $81,$c5,$82,$00,$80,$c5,$82,$00,$a4,$02,$00,$00,$04,$00,$ff,$ff
                                    +      $bf,$fd,$ff,$fb,$00,$91,$00,$84,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $00,$00,$00,$00,$a4,$92,$00,$00,$81,$d5,$a8,$00,$a8,$54,$82,$00
                                    +      $12,$01,$00,$00,$02,$00,$ff,$ff,$bf,$fd,$ff,$fb,$00,$81,$3f,$84
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$00,$00,$00,$12,$49,$00,$00
                                    +      $81,$d5,$a0,$d5,$8a,$54,$82,$00,$a4,$02,$00,$00,$61,$11,$ff,$ff
                                    +      $bf,$fd,$ff,$fb,$00,$91,$41,$84,$01,$04,$00,$a4,$92,$c9,$a4,$00
                                    +      $02,$40,$00,$00,$a4,$92,$00,$00,$81,$95,$a8,$00,$a8,$54,$82,$00
                                    +      $12,$01,$00,$40,$00,$00,$ff,$ff,$ab,$95,$ff,$fb,$00,$81,$41,$84
                                    +      $01,$04,$00,$12,$49,$24,$12,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $81,$c5,$82,$00,$80,$d5,$82,$00,$a4,$02,$00,$20,$60,$11,$ff,$ff
                                    +      $a9,$95,$ff,$fb,$00,$91,$3f,$84,$01,$04,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$81,$d1,$00,$00,$00,$94,$82,$00
                                    +      $12,$01,$00,$60,$00,$00,$ff,$ff,$a9,$95,$ff,$fb,$00,$81,$01,$84
                                    +      $01,$04,$00,$00,$08,$11,$22,$20,$00,$08,$00,$00,$00,$00,$00,$00
                                    +      $81,$d5,$aa,$d5,$aa,$d5,$82,$00,$a4,$02,$00,$40,$61,$11,$ff,$ff
                                    +      $bf,$fd,$ff,$fb,$00,$91,$29,$84,$01,$04,$00,$00,$22,$44,$08,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$81,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$03,$00,$ff,$ff,$bf,$fd,$ff,$fb,$00,$81,$01,$84
                                    +      $01,$04,$00,$00,$08,$11,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $81,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$66,$11,$ff,$ff
                                    +      $bf,$fd,$ff,$fb,$00,$91,$29,$84,$01,$04,$00,$00,$22,$44,$08,$04
                                    +      $00,$01,$00,$00,$00,$00,$00,$00,$81,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$0c,$00,$ff,$ff,$ff,$ff,$ff,$bb,$00,$81,$00,$84
                                    +      $01,$04,$00,$00,$08,$11,$22,$00,$00,$00,$64,$08,$11,$22,$44,$08
                                    +      $81,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$58,$0a,$ff,$ff
                                    +      $ff,$ff,$ff,$9b,$00,$d5,$aa,$85,$01,$04,$00,$00,$22,$44,$08,$20
                                    +      $44,$08,$11,$22,$44,$08,$11,$02,$80,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$20,$05,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$00,$08,$11,$22,$08,$11,$22,$44,$08,$11,$22,$44,$08
                                    +      $82,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$c0,$aa,$d5
                                    +      $aa,$d5,$aa,$d5,$aa,$00,$00,$00,$01,$04,$00,$00,$22,$44,$08,$22
                                    +      $44,$08,$11,$22,$44,$08,$11,$02,$82,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$d0,$aa,$d5,$aa,$d5,$aa,$d5,$aa,$00,$00,$00
                                    +      $01,$04,$00,$00,$08,$11,$40,$08,$11,$22,$44,$08,$11,$22,$44,$08
                                    +      $82,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$90,$00,$00
                                    +      $00,$00,$00,$00,$a8,$00,$00,$00,$01,$04,$00,$00,$00,$00,$10,$22
                                    +      $44,$08,$11,$22,$44,$08,$11,$02,$82,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$90,$00,$00,$00,$00,$00,$00,$a8,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$40,$08,$11,$22,$44,$08,$11,$22,$44,$08
                                    +      $82,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$00,$00,$00,$90,$00,$0c
                                    +      $18,$70,$07,$00,$a8,$00,$00,$00,$01,$04,$00,$00,$00,$00,$10,$22
                                    +      $44,$08,$11,$22,$44,$08,$11,$02,$82,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$00,$00,$00,$90,$00,$0c,$18,$0c,$18,$00,$a8,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$44,$08,$11,$22,$44,$08,$11,$22,$44,$08
                                    +      $82,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$00,$00,$08,$90,$00,$0c
                                    +      $18,$0c,$18,$00,$a8,$00,$00,$00,$01,$04,$00,$00,$00,$00,$11,$22
                                    +      $44,$08,$11,$22,$44,$08,$11,$02,$82,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$00,$00,$21,$90,$00,$7c,$1f,$0c,$18,$00,$a8,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$44,$08,$11,$22,$44,$08,$11,$22,$44,$08
                                    +      $82,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$00,$00,$08,$90,$00,$0c
                                    +      $18,$4c,$19,$00,$a8,$00,$00,$00,$01,$04,$00,$00,$00,$00,$11,$22
                                    +      $44,$40,$12,$22,$44,$08,$11,$02,$82,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$00,$00,$21,$90,$00,$0c,$18,$0c,$06,$00,$a8,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$44,$08,$11,$d4,$aa,$d5,$aa,$d5,$82,$08
                                    +      $82,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$00,$00,$08,$90,$00,$0c
                                    +      $18,$70,$19,$00,$a8,$00,$00,$00,$01,$04,$00,$00,$00,$00,$11,$22
                                    +      $44,$30,$06,$24,$12,$c9,$82,$02,$82,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$00,$00,$21,$90,$00,$00,$00,$00,$00,$00,$a8,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$44,$08,$11,$40,$01,$00,$00,$94,$82,$08
                                    +      $82,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$00,$00,$08,$90,$00,$00
                                    +      $00,$00,$00,$00,$a8,$00,$00,$00,$01,$04,$00,$00,$00,$00,$11,$22
                                    +      $44,$30,$06,$00,$80,$c5,$82,$02,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$90,$00,$00,$00,$00,$00,$00,$a8,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$44,$08,$11,$0c,$18,$00,$a8,$54,$82,$08
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$d0,$aa,$d5
                                    +      $aa,$d5,$aa,$d5,$8a,$00,$00,$00,$01,$24,$12,$49,$24,$00,$11,$22
                                    +      $44,$0c,$18,$d5,$8a,$54,$82,$02,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$00,$00,$00,$00,$02,$44,$08,$11,$00,$00,$00,$a8,$54,$82,$08
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$00,$00,$00,$02,$11,$22
                                    +      $44,$c5,$82,$00,$80,$d5,$82,$02,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$41,$24,$12,$49,$24,$92,$c9,$a4,$92,$c9,$a4,$92,$c9,$a4,$92
                                    +      $01,$00,$00,$00,$00,$02,$44,$08,$a2,$d1,$00,$00,$00,$94,$82,$08
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$00,$00,$00,$00,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$00,$00,$00,$00,$00,$02,$11,$22
                                    +      $88,$d5,$aa,$d5,$aa,$d5,$82,$02,$00,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$00,$00,$00,$00,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
                                    +      $00,$00,$00,$00,$00,$02,$44,$08,$a2,$22,$44,$08,$11,$22,$44,$08
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$00,$00,$00,$00,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$00,$00,$00,$00,$00,$02,$11,$22
                                    +      $88,$08,$11,$22,$44,$08,$11,$02,$00,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$00,$00,$00,$00,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
                                    +      $00,$00,$00,$00,$00,$02,$44,$08,$a2,$22,$44,$08,$11,$22,$44,$08
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$00,$00,$00,$00,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$00,$00,$00,$00,$00,$02,$11,$22
                                    +      $88,$08,$11,$22,$44,$08,$00,$00,$00,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$41,$24,$12,$49,$24,$92,$c9,$a4,$92,$c9,$a4,$92,$c9,$a4,$92
                                    +      $49,$24,$12,$49,$00,$02,$44,$08,$a2,$22,$a2,$c4,$88,$22,$00,$00
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$00,$00,$00,$00,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$00,$00,$00,$40,$00,$02,$11,$22
                                    +      $88,$08,$88,$91,$a2,$08,$00,$00,$00,$00,$00,$c4,$88,$91,$82,$00
                                    +      $12,$01,$00,$00,$00,$00,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
                                    +      $00,$00,$00,$40,$00,$02,$44,$08,$a2,$22,$a2,$c4,$88,$22,$00,$00
                                    +      $00,$00,$00,$11,$22,$44,$08,$00,$a4,$02,$00,$00,$00,$00,$80,$80
                                    +      $80,$80,$80,$80,$80,$80,$80,$80,$00,$00,$00,$40,$00,$02,$11,$22
                                    +      $44,$08,$88,$91,$a2,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$00,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
                                    +      $00,$00,$00,$40,$00,$02,$44,$08,$11,$22,$a2,$c4,$88,$22,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$02,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$40,$00,$02,$11,$22
                                    +      $44,$08,$88,$91,$a2,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$44,$08,$11,$22,$a2,$c4,$88,$22,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$c4,$c4,$88,$91,$a2,$c4,$88
                                    +      $91,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$40,$00,$02,$11,$22
                                    +      $44,$08,$88,$91,$a2,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$91,$91,$a2,$c4,$88,$91,$a2,$c4,$88,$91,$a2,$c4,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$44,$08,$11,$22,$a2,$c4,$88,$22,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$c4,$c4,$88,$91,$a2,$c4,$88
                                    +      $91,$a2,$c4,$88,$91,$a2,$00,$08,$11,$22,$44,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$08,$11,$02,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$91,$91,$a2,$c4,$88,$91,$a2,$e4,$88,$91,$a2,$c4,$88,$00,$91
                                    +      $a2,$c4,$88,$40,$00,$02,$44,$08,$11,$22,$44,$08,$11,$22,$44,$08
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$a4,$c4,$c4,$88,$91,$a2,$c4,$88
                                    +      $91,$a2,$c4,$88,$91,$a2,$00,$08,$11,$22,$44,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$08,$11,$02,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$91,$91,$a3,$c4,$88,$91,$a2,$c4,$88,$91,$a2,$c4,$88,$00,$91
                                    +      $a2,$c4,$88,$40,$00,$02,$44,$08,$11,$22,$44,$08,$11,$22,$44,$08
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$c4,$c4,$88,$91,$a2,$c4,$88
                                    +      $91,$a2,$c4,$88,$91,$a2,$00,$08,$11,$22,$44,$40,$00,$02,$11,$22
                                    +      $44,$d5,$aa,$d5,$aa,$d5,$82,$02,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$91,$91,$a2,$aa,$d5,$aa,$d5,$8a,$88,$91,$a2,$c4,$88,$00,$91
                                    +      $a2,$c4,$88,$40,$00,$02,$44,$08,$11,$95,$49,$24,$12,$c9,$82,$08
                                    +      $00,$45,$08,$11,$22,$45,$08,$11,$22,$c4,$c4,$88,$a2,$c4,$88,$91
                                    +      $8a,$a2,$c4,$88,$91,$a2,$00,$08,$11,$22,$44,$40,$00,$02,$11,$22
                                    +      $44,$d1,$00,$00,$00,$94,$82,$02,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$8c,$91,$a2,$c4,$82,$88,$91,$a2,$c4,$88,$00,$91
                                    +      $a2,$c4,$88,$40,$00,$02,$44,$08,$11,$c5,$82,$00,$80,$c5,$82,$08
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$a8,$d5,$aa,$d5
                                    +      $88,$a2,$c4,$88,$91,$a2,$00,$08,$11,$22,$44,$40,$00,$02,$11,$22
                                    +      $44,$d5,$a8,$00,$a8,$54,$82,$02,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$88,$00,$00,$c0,$88,$88,$91,$a2,$c4,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$44,$08,$11,$d5,$a0,$d5,$8a,$54,$82,$08
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$88,$21,$08,$c2
                                    +      $88,$a2,$c4,$88,$91,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$11,$22
                                    +      $44,$95,$a8,$00,$a8,$54,$82,$02,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$88,$04,$21,$c0,$88,$88,$91,$a2,$c4,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$44,$08,$11,$c5,$82,$00,$80,$d5,$82,$08
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$88,$00,$00,$c0
                                    +      $88,$a2,$c4,$88,$91,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$11,$22
                                    +      $44,$d1,$00,$00,$00,$94,$82,$02,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$a8,$d5,$aa,$d5,$88,$88,$91,$a2,$c4,$88,$00,$08
                                    +      $11,$22,$44,$40,$00,$02,$44,$08,$11,$d5,$aa,$d5,$aa,$d5,$82,$08
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$88,$91,$a2,$c4
                                    +      $89,$a2,$c4,$88,$91,$a2,$00,$91,$a2,$c4,$88,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$08,$11,$02,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$a2,$c4,$88,$d1,$8c,$88,$91,$a2,$c4,$88,$00,$08
                                    +      $11,$22,$44,$40,$00,$02,$44,$08,$11,$22,$44,$08,$11,$22,$44,$08
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$aa,$d5,$aa,$d5
                                    +      $8a,$a2,$c4,$88,$91,$a2,$00,$91,$a2,$c4,$88,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$08,$11,$02,$00,$11,$02,$00,$00,$00,$00,$40
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$a2,$c4,$88,$91,$a2,$c4,$88,$00,$08
                                    +      $11,$22,$44,$40,$00,$02,$44,$08,$11,$22,$44,$08,$11,$22,$44,$08
                                    +      $00,$44,$00,$11,$22,$44,$08,$00,$22,$c4,$c4,$88,$91,$a2,$c4,$88
                                    +      $91,$a2,$c4,$88,$91,$a2,$00,$91,$a2,$c4,$88,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$08,$11,$02,$00,$11,$02,$44,$08,$11,$02,$44
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$a2,$c4,$88,$91,$a2,$c4,$88,$00,$08
                                    +      $11,$22,$44,$40,$00,$02,$44,$08,$11,$22,$44,$08,$11,$22,$44,$08
                                    +      $00,$44,$00,$10,$22,$44,$00,$01,$22,$c4,$c4,$88,$aa,$d5,$aa,$d5
                                    +      $8a,$a2,$c4,$88,$91,$a2,$00,$91,$a2,$c4,$88,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$08,$11,$02,$00,$11,$22,$40,$08,$11,$20,$44
                                    +      $08,$91,$91,$a2,$a2,$c4,$88,$91,$8a,$88,$91,$a2,$c4,$88,$00,$08
                                    +      $11,$22,$44,$40,$00,$02,$44,$08,$11,$22,$44,$08,$11,$22,$44,$08
                                    +      $00,$44,$00,$01,$22,$04,$08,$01,$22,$c4,$c4,$88,$8c,$91,$a2,$c4
                                    +      $82,$a2,$c4,$88,$91,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$11,$22
                                    +      $44,$08,$11,$22,$44,$08,$11,$02,$00,$11,$22,$04,$08,$01,$22,$44
                                    +      $08,$91,$91,$a2,$a8,$7d,$07,$d5,$88,$88,$91,$a2,$c4,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$44,$00,$11,$20,$40,$08,$01,$22,$c4,$c4,$88,$88,$0c,$18,$c0
                                    +      $88,$a2,$c4,$88,$91,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$11,$22,$44,$00,$10,$22,$44
                                    +      $08,$91,$91,$a2,$88,$0c,$18,$c2,$88,$88,$91,$a2,$c4,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$44,$00,$11,$02,$44,$08,$01,$22,$c4,$c4,$88,$88,$7c,$07,$c0
                                    +      $88,$a2,$c4,$88,$91,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$11,$22,$44,$00,$10,$22,$44
                                    +      $08,$91,$91,$a2,$88,$4c,$01,$c0,$88,$88,$91,$a2,$c4,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$00,$00,$00,$00,$00,$01,$04,$00,$00
                                    +      $00,$44,$00,$11,$20,$40,$08,$01,$22,$c4,$c4,$88,$a8,$0c,$06,$d5
                                    +      $88,$a2,$c4,$88,$91,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$00
                                    +      $00,$00,$00,$00,$01,$04,$00,$00,$00,$11,$22,$04,$08,$01,$22,$44
                                    +      $08,$91,$91,$a2,$88,$0c,$18,$c4,$89,$88,$91,$a2,$c4,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$22,$44,$08,$00,$01,$04,$00,$00
                                    +      $00,$44,$00,$01,$22,$04,$08,$01,$22,$c4,$c4,$88,$a2,$c4,$88,$d1
                                    +      $8c,$a2,$c4,$88,$91,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $88,$91,$82,$00,$01,$04,$00,$00,$00,$11,$22,$40,$08,$11,$20,$44
                                    +      $08,$91,$91,$a2,$aa,$d5,$aa,$d5,$8a,$88,$91,$a2,$c4,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$22,$44,$08,$00,$01,$04,$00,$00
                                    +      $00,$44,$00,$10,$22,$44,$00,$01,$22,$c4,$c4,$88,$91,$a2,$c4,$80
                                    +      $80,$80,$80,$90,$42,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $88,$91,$82,$00,$01,$04,$00,$00,$00,$11,$02,$44,$08,$11,$02,$44
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$c4,$88,$91,$a2,$d4,$88,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$22,$44,$08,$00,$01,$04,$00,$00
                                    +      $00,$44,$00,$11,$22,$44,$08,$00,$22,$c4,$c4,$88,$91,$a2,$c4,$91
                                    +      $a2,$c4,$88,$90,$42,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $88,$91,$82,$00,$01,$04,$00,$00,$00,$11,$02,$00,$00,$00,$00,$40
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$c4,$88,$91,$a2,$d4,$88,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$22,$44,$08,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$91,$a2,$c4,$81
                                    +      $80,$80,$88,$90,$42,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $88,$91,$82,$00,$01,$04,$00,$00,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$c4,$88,$91,$a0,$d4,$88,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$22,$44,$08,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$91,$a2,$c4,$81
                                    +      $0c,$18,$88,$90,$42,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $88,$91,$82,$00,$01,$04,$00,$00,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$c4,$0c,$18,$a0,$d4,$88,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$22,$44,$08,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$91,$a2,$c4,$81
                                    +      $30,$06,$88,$90,$42,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $88,$91,$82,$00,$01,$04,$00,$00,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$c4,$40,$01,$a0,$d4,$88,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$22,$44,$08,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$91,$a2,$c4,$81
                                    +      $30,$06,$88,$90,$42,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $88,$91,$82,$00,$01,$04,$00,$00,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$c4,$0c,$18,$a0,$d4,$88,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$22,$44,$08,$00,$01,$04,$00,$00
                                    +      $00,$44,$00,$00,$00,$00,$00,$00,$22,$c4,$c4,$88,$91,$a2,$c4,$81
                                    +      $0c,$18,$88,$90,$42,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $88,$91,$82,$00,$01,$04,$00,$00,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$c4,$88,$91,$a0,$d4,$88,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$11,$22,$44,$08,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$91,$a2,$c4,$81
                                    +      $a2,$c4,$88,$90,$42,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$c4
                                    +      $88,$91,$82,$00,$01,$04,$00,$00,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$84,$80,$80,$a0,$d4,$88,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$00,$00,$00,$00,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$91,$a2,$c4,$91
                                    +      $a2,$c4,$88,$90,$42,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$00
                                    +      $00,$00,$00,$00,$01,$04,$00,$00,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$c4,$88,$91,$a2,$d4,$88,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$00,$00,$40,$00,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$91,$a2,$c4,$91
                                    +      $a2,$c4,$88,$90,$91,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$00
                                    +      $00,$41,$00,$00,$01,$04,$00,$00,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$a2,$c4,$88,$91,$a2,$c4,$88,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$00,$00,$41,$00,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$c4,$c4,$88,$91,$a2,$c4,$88
                                    +      $91,$a2,$c4,$88,$91,$a2,$00,$00,$00,$00,$00,$40,$00,$02,$00,$00
                                    +      $00,$41,$00,$00,$01,$04,$00,$00,$00,$11,$02,$00,$00,$00,$00,$40
                                    +      $08,$91,$91,$a2,$c4,$88,$91,$a2,$84,$80,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$40,$00,$02,$00,$00,$00,$41,$00,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$80,$80,$80,$80,$80,$80,$80
                                    +      $80,$80,$00,$00,$00,$00,$00,$20,$10,$08,$04,$42,$41,$02,$00,$00
                                    +      $00,$41,$00,$00,$01,$04,$00,$00,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$80,$80,$80,$80,$80,$80,$80,$80,$80,$00,$00,$00,$00,$00,$04
                                    +      $02,$41,$20,$10,$08,$00,$00,$00,$00,$41,$00,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$80,$80,$80,$80,$80,$80,$80
                                    +      $80,$80,$00,$00,$00,$00,$00,$20,$10,$08,$04,$02,$41,$00,$00,$00
                                    +      $00,$41,$00,$00,$01,$04,$00,$00,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$80,$80,$80,$80,$80,$80,$80,$80,$80,$00,$00,$00,$00,$00,$04
                                    +      $02,$41,$20,$10,$08,$00,$00,$00,$00,$41,$00,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$80,$80,$80,$80,$80,$80,$80
                                    +      $80,$80,$00,$00,$00,$00,$00,$20,$10,$08,$04,$02,$41,$00,$00,$00
                                    +      $00,$41,$00,$00,$01,$04,$00,$00,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$80,$80,$80,$80,$80,$80,$80,$80,$80,$00,$00,$00,$00,$00,$04
                                    +      $02,$41,$20,$10,$08,$00,$00,$00,$00,$41,$00,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$80,$80,$80,$80,$80,$80,$80
                                    +      $80,$80,$00,$00,$00,$00,$00,$20,$10,$08,$04,$02,$41,$00,$00,$00
                                    +      $00,$41,$00,$00,$01,$04,$00,$00,$00,$11,$22,$44,$08,$11,$22,$44
                                    +      $08,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$04
                                    +      $02,$41,$20,$10,$08,$00,$00,$00,$00,$41,$00,$00,$01,$04,$00,$00
                                    +      $00,$44,$08,$11,$22,$44,$08,$11,$22,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$20,$10,$08,$04,$02,$41,$00,$00,$00
                                    +      $00,$41,$00,$00,$01,$04,$00,$00,$00,$a3,$c4,$88,$91,$a2,$c4,$88
                                    +      $08,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$04
                                    +      $02,$41,$20,$10,$08,$00,$00,$00,$00,$41,$00,$00,$01,$04,$00,$00
                                    +      $00,$88,$91,$a2,$c4,$88,$91,$a2,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$20,$10,$08,$04,$02,$41,$00,$00,$00
                                    +      $00,$41,$00,$00,$01,$04,$00,$00,$00,$a2,$aa,$d5,$aa,$d5,$8a,$88
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$04
                                    +      $02,$41,$20,$10,$08,$00,$00,$00,$00,$41,$00,$00,$01,$04,$00,$00
                                    +      $00,$88,$a2,$c4,$88,$91,$8a,$a2,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$20,$10,$08,$04,$02,$41,$00,$00,$00
                                    +      $00,$41,$00,$00,$01,$04,$00,$00,$00,$a2,$8c,$91,$a2,$c4,$82,$88
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$04
                                    +      $02,$41,$20,$10,$08,$00,$00,$00,$00,$41,$00,$00,$01,$04,$00,$00
                                    +      $00,$88,$a8,$7c,$07,$d5,$88,$a2,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$20,$10,$08,$04,$02,$41,$00,$00,$00
                                    +      $00,$41,$00,$00,$01,$04,$00,$00,$00,$a2,$88,$0c,$18,$c0,$88,$88
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$04
                                    +      $02,$41,$20,$10,$08,$00,$00,$00,$00,$41,$00,$00,$01,$04,$00,$00
                                    +      $00,$88,$88,$0c,$18,$c2,$88,$a2,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$20,$10,$08,$04,$02,$41,$00,$00,$00
                                    +      $00,$41,$00,$00,$01,$04,$00,$00,$00,$a2,$88,$7c,$07,$c0,$88,$88
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$04
                                    +      $02,$41,$20,$10,$08,$00,$00,$00,$00,$41,$00,$00,$01,$04,$00,$00
                                    +      $00,$88,$88,$4c,$01,$c0,$88,$a2,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$20,$10,$08,$04,$02,$41,$00,$00,$00
                                    +      $00,$41,$00,$00,$01,$04,$00,$00,$00,$a2,$a8,$0c,$06,$d5,$88,$88
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$04
                                    +      $02,$41,$20,$10,$08,$00,$00,$00,$00,$41,$00,$00,$01,$04,$00,$00
                                    +      $00,$88,$88,$0c,$18,$c4,$89,$a2,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$a2,$a2,$c4,$88,$d1,$8c,$88
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$88,$aa,$d5,$aa,$d5,$8a,$a2,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$00,$00,$00,$00,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$a2,$c4,$88,$91,$a2,$c4,$88
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$00,$00,$00,$00,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$00,$00,$00,$00,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$10,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$08,$11,$22,$44,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$20,$45,$22,$51,$28,$14,$0a
                                    +      $01,$04,$00,$91,$a2,$c4,$88,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$20,$00,$00,$00,$00,$00,$00,$01,$04,$00,$08,$11,$22,$44,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$08,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$91,$a2,$c4,$88,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$08,$00,$00,$00,$00,$00,$00,$01,$04,$00,$08,$11,$22,$44,$00
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$91,$a2,$c4,$88,$00,$00,$41,$00,$00,$d5,$aa,$d5,$aa
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$02,$00,$00,$00,$00,$00,$00,$01,$04,$00,$08,$11,$22,$44,$00
                                    +      $00,$41,$00,$00,$89,$91,$a2,$a4,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$40,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$91,$a2,$c4,$88,$00,$00,$41,$00,$00,$a3,$c4,$88,$b1
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $40,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$08,$11,$22,$44,$00
                                    +      $00,$41,$00,$00,$89,$91,$a2,$a4,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $12,$01,$00,$00,$00,$00,$00,$00,$10,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$a3,$c4,$88,$b1
                                    +      $00,$00,$00,$28,$45,$22,$51,$28,$14,$0a,$45,$22,$51,$08,$00,$00
                                    +      $14,$00,$45,$22,$51,$28,$14,$2a,$01,$04,$00,$00,$00,$00,$00,$00
                                    +      $00,$41,$00,$00,$89,$00,$00,$a4,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$08,$00,$00,$04,$20,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$a3,$7c,$07,$b1
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$08,$00,$00
                                    +      $05,$08,$00,$00,$00,$00,$00,$00,$01,$04,$00,$00,$00,$00,$00,$00
                                    +      $00,$41,$00,$00,$89,$30,$18,$a4,$10,$04,$21,$08,$d2,$aa,$d5,$aa
                                    +      $d5,$aa,$00,$00,$00,$08,$00,$00,$01,$48,$20,$10,$08,$04,$01,$01
                                    +      $01,$04,$00,$08,$11,$22,$44,$00,$00,$41,$00,$00,$a3,$30,$18,$b1
                                    +      $00,$00,$00,$00,$90,$00,$40,$01,$00,$a0,$00,$00,$00,$08,$00,$20
                                    +      $01,$02,$00,$00,$00,$00,$00,$00,$01,$04,$00,$91,$a2,$c4,$88,$00
                                    +      $00,$41,$00,$00,$89,$70,$07,$a4,$00,$00,$00,$00,$84,$00,$30,$06
                                    +      $00,$88,$00,$00,$00,$08,$00,$20,$00,$02,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$08,$11,$22,$44,$00,$00,$41,$00,$00,$a3,$30,$02,$b1
                                    +      $00,$00,$00,$00,$84,$00,$0c,$18,$00,$88,$00,$00,$00,$00,$00,$28
                                    +      $40,$00,$02,$41,$20,$10,$08,$04,$01,$04,$00,$91,$a2,$c4,$88,$00
                                    +      $00,$41,$00,$00,$89,$30,$0c,$a4,$00,$00,$00,$00,$84,$00,$0c,$18
                                    +      $00,$88,$00,$00,$00,$08,$00,$08,$40,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$08,$11,$22,$44,$00,$00,$41,$00,$00,$a3,$7c,$31,$b1
                                    +      $00,$21,$08,$02,$81,$00,$7c,$1f,$08,$c2,$10,$00,$00,$08,$00,$02
                                    +      $10,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$91,$a2,$c4,$88,$00
                                    +      $00,$49,$11,$22,$89,$91,$a2,$a4,$00,$00,$00,$00,$81,$00,$0c,$18
                                    +      $00,$82,$00,$00,$00,$08,$40,$02,$14,$40,$20,$10,$08,$04,$01,$01
                                    +      $01,$04,$00,$08,$11,$22,$44,$00,$00,$41,$00,$00,$a3,$c4,$88,$b1
                                    +      $00,$00,$00,$80,$81,$00,$0c,$18,$00,$82,$00,$00,$00,$0a,$40,$00
                                    +      $04,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$91,$a2,$c4,$88,$00
                                    +      $10,$41,$00,$00,$89,$91,$a2,$a4,$00,$00,$00,$b0,$00,$00,$00,$00
                                    +      $c0,$80,$00,$00,$00,$02,$50,$00,$01,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$08,$11,$22,$44,$20,$00,$41,$00,$00,$a3,$c4,$88,$b1
                                    +      $00,$00,$00,$a0,$d5,$aa,$d5,$aa,$d5,$00,$00,$00,$c0,$00,$10,$00
                                    +      $01,$00,$00,$00,$00,$15,$2a,$20,$11,$0c,$04,$02,$41,$10,$04,$01
                                    +      $00,$43,$08,$04,$d5,$aa,$d5,$aa,$00,$00,$00,$40,$40,$10,$04,$21
                                    +      $08,$42,$10,$00,$c0,$00,$14,$20,$00,$00,$00,$00,$2a,$00,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$90,$00,$04,$20
                                    +      $00,$00,$00,$50,$00,$40,$22,$20,$11,$0c,$04,$02,$41,$20,$10,$08
                                    +      $04,$41,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$10,$00,$05,$08,$00,$41,$00,$05,$20,$11,$00,$00
                                    +      $01,$04,$00,$00,$00,$00,$00,$00,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$04,$00,$01,$08
                                    +      $00,$00,$20,$00,$0a,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$08,$11,$22,$a4,$92,$00,$00,$00,$00,$00,$00,$49,$00
                                    +      $00,$00,$00,$00,$01,$20,$00,$02,$00,$00,$08,$50,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$22,$44,$08,$12,$49
                                    +      $00,$02,$08,$40,$00,$02,$00,$00,$00,$80,$00,$80,$01,$28,$40,$00
                                    +      $00,$40,$02,$05,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$08,$11,$22,$a4,$92,$00,$00,$00,$00,$00,$00,$48,$24
                                    +      $c0,$88,$00,$a0,$00,$08,$40,$00,$00,$10,$20,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$22,$44,$08,$12,$49
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$90,$00,$00,$a0,$00,$0a,$10,$00
                                    +      $00,$04,$08,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$08,$11,$22,$a4,$92,$00,$00,$00,$00,$00,$20,$12,$00
                                    +      $90,$00,$00,$08,$00,$02,$10,$00,$02,$41,$02,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$22,$44,$08,$12,$49
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$84,$08,$00,$0a,$40,$02,$04,$00
                                    +      $20,$10,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$08,$11,$22,$a4,$92,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $84,$00,$00,$02,$40,$00,$04,$00,$08,$04,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$22,$44,$08,$12,$49
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$81,$00,$c0,$00,$10,$00,$01,$00
                                    +      $00,$01,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$08,$11,$22,$a4,$92,$00,$00,$00,$00,$00,$10,$49,$80
                                    +      $81,$08,$c0,$00,$10,$20,$01,$00,$22,$01,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$a0,$00,$00,$90,$00,$04,$20,$80,$40
                                    +      $08,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$00,$00,$00,$00,$00,$00,$02,$08,$40,$00,$00,$00,$a0
                                    +      $00,$00,$10,$00,$05,$08,$80,$10,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$00,$00,$88,$10,$08,$04,$00,$01,$28,$80,$00
                                    +      $02,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$00,$a4,$92,$c9,$a4,$00,$00,$00,$00,$00,$00,$00,$88
                                    +      $00,$00,$01,$20,$01,$0a,$80,$44,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$00,$12,$49,$24,$12
                                    +      $00,$00,$00,$00,$48,$04,$00,$82,$00,$80,$01,$20,$00,$22,$84,$01
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$a4,$92,$c9,$a4,$92
                                    +      $00,$41,$00,$00,$a4,$92,$c9,$a4,$00,$00,$00,$00,$20,$12,$c1,$82
                                    +      $10,$a0,$00,$28,$40,$08,$8c,$10,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$12,$49,$24,$12,$49,$00,$41,$00,$00,$12,$49,$24,$12
                                    +      $00,$00,$00,$00,$12,$01,$c0,$00,$00,$a0,$00,$08,$40,$00,$b8,$04
                                    +      $00,$00,$00,$00,$00,$00,$00,$00,$01,$04,$00,$d5,$aa,$d5,$aa,$d5
                                    +      $8a,$41,$00,$00,$a4,$92,$c9,$a4,$00,$00,$00,$00,$00,$00,$90,$00
                                    +      $00,$08,$00,$02,$10,$00,$b8,$04,$00,$00,$00,$00,$00,$00,$00,$00
                                    +      $01,$04,$00,$85,$00,$01,$00,$00,$8a,$41,$00,$00,$12,$49,$24,$12
                                    +      $00,$00,$00,$00,$00,$00,$90,$04,$10,$0a,$00,$02,$04,$00,$e8,$01
                                    +      $00,$00,$a8,$d5,$aa,$d5,$8a,$00,$01,$04,$00,$95,$00,$7c,$07,$c0
                                    +      $8a,$41,$00,$00,$a4,$92,$c9,$a4,$00,$00,$00,$00,$00,$00,$84,$00
                                    +      $00,$02,$40,$00,$44,$00,$c2,$81,$00,$00,$aa,$d5,$aa,$d5,$8a,$00
                                    +      $01,$04,$00,$d5,$00,$30,$18,$d0,$8a,$41,$00,$00,$12,$49,$24,$12
                                    +      $00,$02,$08,$00,$00,$00,$84,$00,$c0,$00,$50,$00,$11,$20,$22,$83
                                    +      $00,$00,$82,$0c,$18,$00,$8a,$00,$01,$04,$00,$95,$a2,$30,$18,$d1
                                    +      $8a,$41,$00,$00,$a4,$92,$c9,$a4,$00,$00,$00,$40,$24,$02,$81,$04
                                    +      $c0,$00,$10,$00,$05,$40,$00,$82,$00,$00,$82,$3c,$1e,$00,$8a,$00
                                    +      $01,$04,$00,$95,$a2,$70,$07,$d1,$8a,$41,$00,$00,$00,$00,$00,$00
                                    +      $00,$00,$00,$00,$00,$80,$81,$00,$90,$00,$14,$20,$01,$60,$08,$00
                                    +      $00,$00,$82,$4c,$19,$00,$8a,$00,$01,$04,$00,$d5,$80,$30,$18,$d0
                                    +      $8a,$41,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$a0,$00,$00

Symbol Table

Entry$3000