A.N.A.L.O.G. ISSUE 69 / FEBRUARY 1989 / PAGE 74

Star Rider

by Paul Lay

Star Rider is an all-machine-code, 3-D arcade-action space game for any Atari 8-bit computer with a minimum 32K RAM, controlled by a joystick in Port 1.

Introduction

It is many centuries into our future, and all the countries of the Earth are currently united in an extensive colonization program involving the creation of new civilizations on distant planets. However, the entire program is under threat from the Xylons, a massive alien empire that for years has been trying to gain supremacy of the universe.

It has taken you many years of intense training, but you’ve finally graduated as a Star Rider. Armed with the latest in photon weaponry, your craft orbits one of the colonization planets, and you are all that stands between this planet’s destruction by the Xylons.

Typing it in

To create your copy of Star Rider, type in Listing 1 using the M/L Editor found elsewhere in this issue. Create the game file under the filename STARRIDE.OBJ, or, if you want the program to load automatically, use the filename AUTORUN.SYS.

Keyboard controls

START: Begin game at Level 1.

1,2,3,4,5: Begin game at Levels 10, 20, 30, 40, 50, respectively.

C: Continue game from previous level.

T: Toggle vertical control.

SPACEBAR: Pause/resume game.

ESC: Abort game.

Game play

When you start a game, you will be presented with a cockpit view from your spacecraft. In the viewport you can see the planet surface below with the attacking Xylon crafts appearing from over the horizon. You will also see your photon-gun sights in the viewport. These are controlled by a joystick in Port 1, and photons are fired by hitting the trigger. Note two points: First, the left photon is always fired first, and the right photon is only fired if the left’s already been fired! Second, the vertical control of the sights can be toggled by the T key.

At the bottom of the screen, you can see the control panel displaying your score, shields and the attack wave which you are on. For every Xylon craft which you destroy, five points are added to your score, and your shields are increased by an amount depending upon the attack wave (more for higher waves). Note that your shields cannot increase above 100% . However, if a Xylon craft is not destroyed, and instead shoots past you, deflecfing off your shields, then 4% is deducted from your shields. If your shields fall below 0%, the game ends.

When the game is over, if your score is high enough, you will be able to enter your name on the high-score board. Moving the joystick left and right will move the cursor in the appropriate direction, and moving the joystick up and down will move through the characters. When you have finished entering your name, press the trigger. Note that on subsequent high scores, the previously entered name will appear (in order to save having to enter the same name over again).

The program

Full use is made of the excellent graphics features of the Atari, utilizing player/missile graphics, custom display lists, GTIA modes, display-list interrupts, multiple character sets, load memory scans and so on.

The Xylon ships are drawn in 16-luminance mode, GTIA 9, which gives an excellent metallic effect. Actually, character graphics are used behind GTIA, giving characters of resoludon two by eight in 16 luminances. The scrolling terrain is drawn in high-resolution ANTIC F (animated as part of the DLI), and the control panel is done in ANTIC 2. Players are used for the photons and sights, and a single missile is used for the scrolling stars (in both the game and title screen). The metallic text effects on the control panel and on the title screen are done by altering color register luminances from light to dark. The sound on the title screen uses 15KHz clocking and a high-pass filter in Channel 1. Finally note that no OS routines are used at all.

Listing 1: M/L Editor Data

1000 DATA 255,255,253,31,198,61,76,215,38,0,0,0,0,0,0,0,6598
1010 DATA 0,0,0,0,0,48,243,255,255,0,48,60,60,255,255,255,837
1020 DATA 255,0,0,0,12,12,207,207,255,0,0,0,11,10,138,121,1096
1030 DATA 105,0,12,212,221,228,238,244,255,204,201,215,213,231,233,255,814
1040 DATA 249,204,156,125,93,126,158,255,159,0,192,77,221,78,238,79,298
1050 DATA 255,0,0,0,176,160,168,151,150,89,89,80,96,112,128,144,6748
1060 DATA 153,244,15,4,14,0,0,0,0,247,245,231,233,221,13,0,6087
1070 DATA 0,127,95,126,158,221,208,0,0,79,240,64,224,0,0,0,2795
1080 DATA 0,149,149,5,6,7,8,9,153,0,0,0,0,12,13,174,6569
1090 DATA 159,0,0,10,187,204,13,238,15,0,0,160,187,204,208,238,9713
1100 DATA 240,0,0,0,0,192,208,234,249,143,126,128,144,160,187,0,9330
1110 DATA 0,255,13,204,11,0,0,0,0,255,208,204,176,0,0,0,2104
1120 DATA 0,248,231,8,9,10,187,0,0,0,13,0,159,128,157,160,2672
1130 DATA 187,204,221,238,255,238,221,204,0,0,208,0,249,8,217,10,8274
1140 DATA 187,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1327
1150 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1150
1160 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1160
1170 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1170
1180 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1180
1190 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1190
1200 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1200
1210 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1210
1220 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1220
1230 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1230
1240 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1240
1250 DATA 0,0,0,0,0,0,0,0,0,131,129,130,129,129,131,129,3051
1260 DATA 129,130,131,129,130,129,131,129,131,129,129,130,129,130,131,129,8905
1270 DATA 131,129,129,129,131,129,129,129,130,129,131,129,131,130,129,131,8929
1280 DATA 129,255,255,0,0,3,255,255,255,0,0,1,255,255,255,0,9544
1290 DATA 0,1,255,255,255,0,0,1,255,255,255,0,0,1,255,255,9929
1300 DATA 255,0,0,1,255,255,255,128,0,255,252,0,0,15,255,255,610
1310 DATA 254,0,0,7,255,255,254,0,0,1,255,255,255,0,0,1,5381
1320 DATA 255,255,255,128,0,0,255,255,255,192,0,0,127,255,255,240,4288
1330 DATA 0,255,224,0,0,127,255,255,248,0,0,15,255,255,252,0,176
1340 DATA 0,3,255,255,255,0,0,0,255,255,255,192,0,0,63,255,9385
1350 DATA 255,240,0,0,31,255,255,254,0,255,0,0,1,255,255,255,1625
1360 DATA 224,0,0,63,255,255,248,0,0,3,255,255,255,0,0,0,5587
1370 DATA 255,255,255,224,0,0,31,255,255,252,0,0,3,255,255,255,2382
1380 DATA 224,248,0,0,7,255,255,255,128,0,0,127,255,255,240,0,651
1390 DATA 0,7,255,255,255,0,0,0,127,255,255,240,0,0,7,255,8027
1400 DATA 255,255,0,0,0,255,255,255,252,192,0,0,63,255,255,254,3986
1410 DATA 0,0,0,255,255,255,224,0,0,7,255,255,255,0,0,0,6053
1420 DATA 127,255,255,248,0,0,3,255,255,255,192,0,0,31,255,255,1171
1430 DATA 255,0,0,0,255,255,255,248,0,0,3,255,255,255,192,0,1117
1440 DATA 0,15,255,255,255,0,0,0,63,255,255,252,0,0,1,255,7571
1450 DATA 255,255,240,0,0,7,255,255,255,0,0,7,255,255,255,224,3475
1460 DATA 0,0,7,255,255,255,128,0,0,15,255,255,255,0,0,0,5532
1470 DATA 63,255,255,254,0,0,0,127,255,255,252,0,0,0,255,255,362
1480 DATA 255,0,0,31,255,255,255,128,0,0,31,255,255,255,0,0,7759
1490 DATA 0,31,255,255,255,0,0,0,31,255,255,255,0,0,0,63,4314
1500 DATA 255,255,255,0,0,0,63,255,255,0,0,255,255,255,254,0,1561
1510 DATA 0,0,63,255,255,254,0,0,0,31,255,255,255,0,0,0,5008
1520 DATA 31,255,255,255,128,0,0,15,255,255,255,192,0,0,7,255,8745
1530 DATA 255,0,3,255,255,255,248,0,0,0,255,255,255,252,0,0,63
1540 DATA 0,63,255,255,255,0,0,0,15,255,255,255,192,0,0,7,5884
1550 DATA 255,255,255,240,0,0,1,255,255,0,31,255,255,255,224,0,2028
1560 DATA 0,1,255,255,255,248,0,0,0,63,255,255,255,0,0,0,5920
1570 DATA 15,255,255,255,224,0,0,1,255,255,255,252,0,0,0,63,6690
1580 DATA 255,0,127,255,255,255,128,0,0,7,255,255,255,240,0,0,9547
1590 DATA 0,127,255,255,255,0,0,0,7,255,255,255,240,0,0,0,6502
1600 DATA 255,255,255,255,0,0,0,15,255,1,255,255,255,254,0,0,9311
1610 DATA 0,15,255,255,255,224,0,0,0,127,255,255,255,0,0,0,6494
1620 DATA 7,255,255,255,248,0,0,0,63,255,255,255,192,0,0,1,6656
1630 DATA 255,15,255,255,255,248,0,0,0,63,255,255,255,192,0,0,8961
1640 DATA 0,255,255,255,255,0,0,0,3,255,255,255,252,0,0,0,6928
1650 DATA 31,255,255,255,240,0,0,0,127,63,255,255,255,224,0,0,9265
1660 DATA 0,127,255,255,255,128,0,0,0,255,255,255,255,0,0,0,7472
1670 DATA 3,255,255,255,254,0,0,0,7,255,255,255,248,0,0,0,6940
1680 DATA 15,255,255,255,255,192,0,0,0,255,255,255,255,128,0,0,9939
1690 DATA 1,255,255,255,255,0,0,0,1,255,255,255,254,0,0,0,6987
1700 DATA 3,255,255,255,254,0,0,0,3,255,255,255,255,0,0,0,7025
1710 DATA 3,255,255,255,255,0,0,0,1,255,255,255,255,0,0,0,7022
1720 DATA 1,255,255,255,255,0,0,0,1,255,255,255,255,128,0,0,8822
1730 DATA 0,255,255,255,252,0,0,0,7,255,255,255,254,0,0,0,7065
1740 DATA 3,255,255,255,255,0,0,0,0,255,255,255,255,128,0,0,8835
1750 DATA 0,127,255,255,255,224,0,0,0,255,255,255,240,0,0,0,7943
1760 DATA 31,255,255,255,252,0,0,0,3,255,255,255,255,0,0,0,7103
1770 DATA 0,255,255,255,255,192,0,0,0,63,255,255,255,248,0,0,9774
1780 DATA 0,255,255,255,192,0,0,0,63,255,255,255,248,0,0,0,7241
1790 DATA 7,255,255,255,255,0,0,0,0,127,255,255,255,224,0,0,8953
1800 DATA 0,15,255,255,255,254,0,0,0,255,255,255,0,0,0,0,4829
1810 DATA 255,255,255,255,240,0,0,0,7,255,255,255,255,0,0,0,7353
1820 DATA 0,127,255,255,255,240,0,0,0,7,255,255,255,255,128,0,1314
1830 DATA 0,255,255,252,0,0,0,1,255,255,255,255,224,0,0,0,7743
1840 DATA 15,255,255,255,255,0,0,0,0,63,255,255,255,248,0,0,8707
1850 DATA 0,1,255,255,255,255,224,0,0,255,255,240,0,0,0,7,6357
1860 DATA 255,255,255,255,192,0,0,0,15,255,255,255,255,0,0,0,7235
1870 DATA 0,63,255,255,255,252,0,0,0,0,255,255,255,255,248,0,3038
1880 DATA 0,255,255,192,0,0,0,15,255,255,255,255,128,0,0,0,6417
1890 DATA 31,255,255,255,255,0,0,0,0,31,255,255,255,254,0,0,8537
1900 DATA 0,0,63,255,255,255,254,0,0,255,255,0,0,0,0,63,4055
1910 DATA 255,255,255,255,0,0,0,0,31,255,255,255,255,0,0,0,6469
1920 DATA 0,31,255,255,255,255,0,0,0,0,31,255,255,255,255,128,2731
1930 DATA 0,255,252,0,0,0,0,127,255,255,255,254,0,0,0,0,4910
1940 DATA 63,255,255,255,255,0,0,0,0,15,255,255,255,255,128,0,393
1950 DATA 0,0,7,255,255,255,255,224,0,255,240,0,0,0,0,255,8643
1960 DATA 255,255,255,252,0,0,0,0,63,255,255,255,255,0,0,0,6795
1970 DATA 0,15,255,255,255,255,192,0,0,0,3,255,255,255,255,248,5705
1980 DATA 0,255,192,0,0,0,3,255,255,255,255,248,0,0,0,0,5753
1990 DATA 127,255,255,255,255,0,0,0,0,7,255,255,255,255,224,0,1867
2000 DATA 0,0,1,255,255,255,255,254,0,255,0,0,0,0,7,255,6380
2010 DATA 255,255,255,240,0,0,0,0,127,255,255,255,255,0,0,0,7373
2020 DATA 0,7,255,255,255,255,240,0,0,0,0,127,255,255,255,255,4618
2030 DATA 128,252,0,0,0,0,31,255,255,255,255,224,0,0,0,0,5257
2040 DATA 255,255,255,255,255,0,0,0,0,3,255,255,255,255,248,0,2365
2050 DATA 0,0,0,63,255,255,255,255,224,48,48,112,240,66,104,41,9560
2060 DATA 66,0,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2734
2070 DATA 68,144,33,79,184,33,15,15,15,15,15,15,15,15,15,15,5684
2080 DATA 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4120
2090 DATA 15,15,15,15,0,66,144,41,0,2,2,0,2,65,144,38,7718
2100 DATA 169,90,133,2,169,56,133,3,169,2,133,9,169,0,141,68,3504
2110 DATA 2,141,235,0,141,236,0,133,212,169,1,141,226,0,169,3,7106
2120 DATA 141,15,210,141,29,208,169,72,141,8,2,169,48,141,9,2,2801
2130 DATA 169,64,141,14,210,169,120,141,7,212,169,128,141,14,212,169,429
2140 DATA 62,141,0,212,32,120,49,32,9,52,32,80,48,32,55,40,9261
2150 DATA 169,0,141,0,212,169,144,141,2,212,169,38,141,3,212,169,9164
2160 DATA 95,141,0,2,169,40,141,1,2,169,222,141,19,208,169,60,7121
2170 DATA 141,20,208,169,140,141,21,208,32,152,54,162,4,189,10,40,4842
2180 DATA 157,22,208,202,16,247,32,107,49,169,0,141,254,0,141,255,9775
2190 DATA 0,141,8,210,162,2,157,208,0,202,16,250,169,255,141,244,3903
2200 DATA 0,141,249,0,141,230,0,141,232,0,169,120,141,242,0,141,9306
2210 DATA 243,0,169,16,141,243,41,141,244,41,162,4,157,231,41,202,160
2220 DATA 16,250,169,17,141,242,41,169,4,141,15,40,32,55,40,169,3688
2230 DATA 62,141,0,212,173,226,0,141,227,0,32,43,40,32,61,40,2205
2240 DATA 32,55,40,32,84,43,32,15,46,32,61,40,32,55,40,32,7835
2250 DATA 67,40,32,58,44,32,206,46,32,61,40,32,55,40,32,15,8664
2260 DATA 46,32,177,47,32,183,48,32,61,40,32,55,40,32,67,40,9513
2270 DATA 32,58,44,32,206,46,32,61,40,173,227,0,208,194,32,55,6063
2280 DATA 40,32,18,40,173,226,0,201,255,240,169,24,105,1,141,226,379
2290 DATA 0,208,161,0,12,0,70,0,0,68,74,162,1,189,254,41,4302
2300 DATA 24,105,1,201,26,240,4,157,254,41,96,169,16,157,254,41,8847
2310 DATA 202,16,234,96,162,0,32,18,43,232,236,226,0,208,247,96,976
2320 DATA 173,11,212,208,251,96,173,11,212,240,251,96,174,15,40,232,2118
2330 DATA 224,5,208,16,173,16,40,72,173,17,40,141,16,40,104,141,3512
2340 DATA 17,40,162,1,142,15,40,96,72,138,72,152,72,162,139,142,6980
2350 DATA 10,212,142,24,208,202,224,131,208,245,169,65,162,32,141,10,9964
2360 DATA 212,141,27,208,142,9,212,173,111,120,72,162,110,189,0,120,8330
2370 DATA 141,10,212,141,4,208,157,1,120,142,18,208,202,208,238,104,2072
2380 DATA 141,1,120,169,0,141,10,212,141,4,208,169,1,141,10,212,7325
2390 DATA 141,27,208,162,8,142,10,212,202,208,250,173,16,40,172,17,8859
2400 DATA 40,141,23,208,140,24,208,174,15,40,142,10,212,202,208,250,2236
2410 DATA 141,24,208,140,23,208,162,5,142,10,212,202,208,250,141,23,1141
2420 DATA 208,140,24,208,162,6,142,10,212,202,208,250,141,24,208,140,2477
2430 DATA 23,208,162,7,142,10,212,202,208,250,141,23,208,140,24,208,1804
2440 DATA 162,8,142,10,212,202,208,250,174,15,40,224,4,240,14,141,9534
2450 DATA 24,208,140,23,208,142,10,212,232,224,4,208,248,169,12,141,1954
2460 DATA 10,212,141,23,208,162,139,169,224,141,10,212,142,24,208,141,1384
2470 DATA 9,212,202,142,10,212,142,24,208,202,224,131,208,245,169,0,3182
2480 DATA 141,10,212,141,23,208,162,203,142,10,212,142,24,208,142,10,8890
2490 DATA 212,202,224,195,208,242,169,12,141,10,212,141,23,208,162,139,1587
2500 DATA 142,10,212,142,24,208,202,224,131,208,245,104,168,104,170,104,3496
2510 DATA 64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2574
2520 DATA 214,246,233,229,247,240,239,242,244,194,0,0,0,0,0,0,5261
2530 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2530
2540 DATA 0,0,0,0,0,214,227,239,238,244,242,239,236,128,240,225,9497
2550 DATA 238,229,236,194,0,0,0,0,0,0,0,0,0,0,0,0,4730
2560 DATA 0,0,0,0,0,0,0,0,51,99,111,114,101,0,0,0,7911
2570 DATA 0,0,51,104,105,101,108,100,115,0,0,0,0,0,55,97,9238
2580 DATA 118,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2900
2590 DATA 16,16,16,16,16,0,0,0,0,0,0,17,16,16,0,5,3546
2600 DATA 0,0,0,0,0,0,0,16,17,0,0,0,0,0,0,0,2881
2610 DATA 0,0,0,0,0,0,0,0,0,0,48,114,111,103,114,97,653
2620 DATA 109,109,101,100,0,34,121,0,48,97,117,108,0,44,97,121,2693
2630 DATA 0,0,0,0,0,0,0,0,0,138,72,169,0,133,205,165,4407
2640 DATA 241,10,38,205,10,38,205,10,38,205,133,206,166,205,134,207,2305
2650 DATA 10,38,205,10,38,205,24,101,206,133,204,165,205,101,207,133,2507
2660 DATA 205,165,204,24,101,240,133,204,144,2,230,205,165,204,24,105,1758
2670 DATA 0,133,204,165,205,105,116,133,205,104,170,96,32,48,42,169,8068
2680 DATA 9,24,109,255,0,160,5,145,204,56,233,1,136,16,248,169,9626
2690 DATA 15,24,109,255,0,160,45,145,204,56,233,1,136,192,39,208,9875
2700 DATA 246,96,32,48,42,169,19,24,109,255,0,160,3,145,204,56,6451
2710 DATA 233,1,136,16,248,169,23,24,109,255,0,160,43,145,204,56,8020
2720 DATA 233,1,136,192,39,208,246,96,32,48,42,169,26,24,109,255,7711
2730 DATA 0,160,2,145,204,56,233,1,136,16,248,96,169,0,72,32,5684
2740 DATA 48,42,104,160,5,145,204,136,16,251,160,45,145,204,136,192,2042
2750 DATA 39,208,249,96,169,0,72,32,48,42,104,160,3,145,204,136,7162
2760 DATA 16,251,160,43,145,204,136,192,39,208,249,96,169,0,72,32,8478
2770 DATA 48,42,104,160,2,145,204,136,16,251,96,173,10,210,41,63,7729
2780 DATA 201,35,16,247,157,199,61,169,14,157,199,62,169,255,157,199,3780
2790 DATA 63,169,32,157,199,64,173,10,210,41,127,157,199,65,96,208,431
2800 DATA 3,76,3,43,201,1,208,3,76,235,42,76,211,42,208,3,6534
2810 DATA 76,191,42,201,1,208,3,76,153,42,76,115,42,162,0,142,5179
2820 DATA 231,0,189,199,64,201,3,48,98,41,16,208,29,189,199,64,7341
2830 DATA 41,32,240,15,222,199,65,208,10,169,0,157,199,64,169,9,7964
2840 DATA 157,199,65,232,236,226,0,208,217,96,222,199,65,48,31,169,1147
2850 DATA 23,141,255,0,189,199,61,133,240,189,199,62,133,241,189,199,5655
2860 DATA 64,41,3,32,69,43,169,0,141,255,0,76,122,43,189,199,7867
2870 DATA 61,133,240,189,199,62,133,241,189,199,64,41,3,32,54,43,5771
2880 DATA 169,3,157,199,64,206,227,0,76,122,43,189,199,61,133,240,1388
2890 DATA 189,199,62,133,241,189,199,64,32,54,43,222,199,65,208,29,9485
2900 DATA 169,9,157,199,65,254,199,64,189,199,64,201,3,48,14,32,6348
2910 DATA 106,47,169,4,141,230,0,32,18,43,76,122,43,189,199,62,6048
2920 DATA 24,125,199,63,157,199,62,133,241,141,231,0,208,5,169,1,8965
2930 DATA 157,199,63,173,10,210,201,25,176,10,189,199,61,240,22,222,1469
2940 DATA 199,61,16,17,173,10,210,201,25,176,10,189,199,61,201,34,8743
2950 DATA 240,3,254,199,61,189,199,61,133,240,189,199,64,32,69,43,9141
2960 DATA 76,122,43,173,16,208,208,26,173,254,0,240,24,169,0,141,9004
2970 DATA 254,0,173,244,0,16,3,76,19,45,173,249,0,16,6,76,2486
2980 DATA 137,45,141,254,0,160,15,174,243,0,169,0,157,0,125,232,8777
2990 DATA 136,16,249,173,0,211,41,15,133,204,174,235,0,240,18,162,463
3000 DATA 0,134,239,74,38,239,74,38,239,165,204,41,252,5,239,133,2323
3010 DATA 204,70,204,176,9,173,243,0,56,233,8,141,243,0,70,204,9541
3020 DATA 176,9,173,243,0,24,105,8,141,243,0,70,204,176,9,173,8206
3030 DATA 242,0,56,233,8,141,242,0,70,204,176,9,173,242,0,24,7687
3040 DATA 105,8,141,242,0,173,242,0,201,48,176,7,169,48,141,242,449
3050 DATA 0,16,9,201,201,144,5,169,200,141,242,0,173,243,0,201,1908
3060 DATA 40,176,7,169,40,141,243,0,16,9,201,177,144,5,169,176,8758
3070 DATA 141,243,0,160,15,174,243,0,185,3,45,157,0,125,232,136,8637
3080 DATA 16,246,173,242,0,141,1,208,141,208,0,96,0,84,146,146,7795
3090 DATA 16,16,16,238,238,16,16,16,146,146,84,0,165,242,56,233,9463
3100 DATA 48,74,74,74,141,245,0,169,176,56,229,243,74,74,74,141,284
3110 DATA 246,0,169,8,141,244,0,169,48,141,247,0,169,176,141,248,2719
3120 DATA 0,169,4,141,232,0,76,109,45,173,244,0,16,1,96,160,5639
3130 DATA 15,174,248,0,169,0,157,0,126,232,136,16,249,173,247,0,687
3140 DATA 24,109,245,0,141,247,0,173,248,0,56,237,246,0,141,248,2661
3150 DATA 0,206,244,0,48,27,160,15,174,248,0,185,255,45,45,10,6982
3160 DATA 210,157,0,126,232,136,16,243,173,247,0,141,2,208,141,209,2336
3170 DATA 0,96,169,200,56,229,242,74,74,74,141,250,0,169,176,56,468
3180 DATA 229,243,74,74,74,141,251,0,169,8,141,249,0,169,200,141,1148
3190 DATA 252,0,169,176,141,253,0,169,4,141,232,0,76,227,45,173,9835
3200 DATA 249,0,16,1,96,160,15,174,253,0,169,0,157,0,127,232,8232
3210 DATA 136,16,249,173,252,0,56,237,250,0,141,252,0,173,253,0,1407
3220 DATA 56,237,251,0,141,253,0,206,249,0,48,27,160,15,174,253,415
3230 DATA 0,185,255,45,45,10,210,157,0,127,232,136,16,243,173,252,3247
3240 DATA 0,141,3,208,141,210,0,96,24,60,126,126,126,255,255,255,3923
3250 DATA 255,255,255,126,126,126,60,24,32,96,46,32,151,46,32,64,3531
3260 DATA 45,76,182,45,56,233,40,74,74,74,141,225,0,173,224,0,8172
3270 DATA 56,233,48,74,74,56,253,199,61,24,105,1,48,35,72,189,5475
3280 DATA 199,64,168,104,217,90,46,16,24,173,225,0,56,253,199,62,9270
3290 DATA 24,105,1,48,12,217,93,46,16,7,169,8,141,233,0,56,4260
3300 DATA 96,24,96,3,4,6,1,2,2,165,244,240,1,96,162,0,4842
3310 DATA 189,199,64,201,3,48,7,232,236,226,0,208,243,96,165,247,4911
3320 DATA 133,224,165,248,32,27,46,144,20,32,233,46,32,70,47,189,5924
3330 DATA 199,64,9,16,157,199,64,169,8,157,199,65,96,76,110,46,6836
3340 DATA 165,249,240,1,96,162,0,189,199,64,201,3,48,7,232,236,347
3350 DATA 226,0,208,243,96,165,252,133,224,165,253,32,27,46,144,20,9778
3360 DATA 32,233,46,32,70,47,189,199,64,9,16,157,199,64,169,8,6543
3370 DATA 157,199,65,96,76,165,46,162,0,173,10,210,41,3,168,189,7971
3380 DATA 32,32,57,229,46,157,216,32,232,224,182,208,236,96,0,15,981
3390 DATA 240,255,173,242,41,201,17,240,73,165,226,56,233,1,41,248,2168
3400 DATA 74,74,74,201,4,48,2,169,3,168,185,62,47,141,228,0,6813
3410 DATA 185,66,47,141,229,0,173,244,41,24,109,228,0,201,26,48,7256
3420 DATA 6,238,229,0,56,233,10,141,244,41,173,243,41,24,109,229,1058
3430 DATA 0,201,26,48,14,169,17,141,242,41,169,16,141,243,41,141,9178
3440 DATA 244,41,96,141,243,41,96,2,5,0,0,0,0,1,2,160,9416
3450 DATA 4,185,231,41,24,105,5,201,26,48,19,56,233,10,153,231,7829
3460 DATA 41,136,48,14,185,231,41,24,105,1,201,26,16,237,153,231,9758
3470 DATA 41,96,96,160,2,185,242,41,56,233,4,201,16,16,19,24,4164
3480 DATA 105,10,153,242,41,136,48,14,185,242,41,56,233,1,201,16,8023
3490 DATA 48,237,153,242,41,96,169,16,141,242,41,141,243,41,141,244,3115
3500 DATA 41,32,196,54,32,74,49,162,3,169,0,157,64,48,157,68,5200
3510 DATA 48,202,16,247,162,0,154,76,33,39,174,230,0,48,27,189,6956
3520 DATA 21,48,141,144,38,189,26,48,141,0,210,141,64,48,189,31,6632
3530 DATA 48,141,1,210,141,68,48,206,230,0,173,231,0,141,2,210,9909
3540 DATA 141,65,48,141,3,210,141,69,48,174,232,0,48,21,189,36,6386
3550 DATA 48,141,4,210,141,66,48,189,41,48,141,5,210,141,70,48,6663
3560 DATA 206,232,0,174,233,0,48,21,189,46,48,141,6,210,141,67,7181
3570 DATA 48,189,55,48,141,7,210,141,71,48,206,233,0,96,48,32,6455
3580 DATA 64,16,80,0,128,176,208,224,0,130,132,134,136,0,160,140,9628
3590 DATA 120,48,0,138,140,142,198,0,240,230,220,210,200,190,180,170,7376
3600 DATA 0,136,138,140,140,142,142,142,140,0,0,0,0,0,0,0,9788
3610 DATA 0,173,9,210,141,234,0,104,64,32,120,52,32,6,55,169,4633
3620 DATA 255,133,234,173,31,208,201,6,208,4,162,0,240,34,165,234,1902
3630 DATA 201,45,208,11,173,235,0,73,255,141,235,0,76,86,48,201,9866
3640 DATA 18,240,30,162,5,221,159,48,240,6,202,208,248,76,90,48,1068
3650 DATA 189,165,48,133,226,189,171,48,141,255,41,189,177,48,141,254,4380
3660 DATA 41,169,255,133,234,76,74,49,255,31,30,26,24,29,1,10,2012
3670 DATA 20,30,40,50,17,16,16,16,16,16,16,17,18,19,20,21,6311
3680 DATA 165,234,201,28,208,3,76,152,47,201,45,208,11,165,235,73,404
3690 DATA 255,133,235,169,255,133,234,96,201,33,208,118,32,74,49,32,8613
3700 DATA 55,40,169,133,141,2,212,169,49,141,3,212,169,64,141,27,8495
3710 DATA 208,169,224,141,26,208,162,2,169,0,157,1,208,202,16,250,1052
3720 DATA 169,255,133,234,169,5,141,8,210,169,166,141,1,210,141,5,9906
3730 DATA 210,169,128,141,0,210,169,64,141,4,210,32,192,49,165,234,1585
3740 DATA 201,33,208,247,32,55,40,169,144,141,2,212,169,38,141,3,7905
3750 DATA 212,169,1,141,27,208,169,0,141,26,208,162,2,189,208,0,8986
3760 DATA 157,1,208,202,16,247,169,255,133,234,169,0,141,8,210,32,1139
3770 DATA 85,49,96,162,7,169,0,157,0,210,202,16,250,96,162,3,8780
3780 DATA 160,6,189,64,48,153,0,210,189,68,48,153,1,210,202,136,517
3790 DATA 136,16,239,96,169,0,133,222,169,116,133,223,162,4,76,138,941
3800 DATA 54,169,0,133,222,169,104,133,223,162,8,76,138,54,112,112,9289
3810 DATA 112,79,0,104,15,15,15,15,15,15,15,15,15,15,15,15,6386
3820 DATA 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,5860
3830 DATA 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,5870
3840 DATA 15,15,15,15,15,15,65,133,49,32,55,40,162,13,189,81,3939
3850 DATA 50,133,237,189,95,50,133,238,189,157,50,141,226,49,189,171,3951
3860 DATA 50,141,227,49,138,72,162,0,160,0,189,255,255,145,237,165,5444
3870 DATA 237,24,105,40,133,237,144,2,230,238,232,224,24,208,235,104,5844
3880 DATA 170,202,16,202,162,13,189,66,50,157,67,50,202,208,247,166,3305
3890 DATA 236,224,48,208,4,162,0,134,236,189,109,50,141,67,50,230,628
3900 DATA 236,162,13,189,67,50,48,17,189,81,50,24,125,67,50,157,5536
3910 DATA 81,50,144,20,254,95,50,208,15,189,81,50,24,125,67,50,5840
3920 DATA 157,81,50,176,3,222,95,50,202,16,216,96,0,0,0,0,3011
3930 DATA 0,0,0,0,0,0,0,0,0,0,61,62,63,64,65,66,9091
3940 DATA 67,68,69,70,71,72,73,74,106,106,106,106,106,106,106,106,7120
3950 DATA 106,106,106,106,106,106,0,0,0,40,40,40,40,216,216,216,7736
3960 DATA 216,0,0,40,40,40,80,80,120,136,176,176,216,216,216,0,1536
3970 DATA 0,0,40,80,120,136,176,216,0,0,40,40,40,40,40,40,2026
3980 DATA 136,176,216,0,0,0,185,209,233,1,25,49,73,97,121,145,7495
3990 DATA 169,193,217,241,50,50,50,51,51,51,51,51,51,51,51,51,2568
4000 DATA 51,51,0,0,0,0,136,153,170,187,204,221,238,255,255,238,8922
4010 DATA 221,204,187,170,153,0,0,0,0,0,0,0,0,0,136,153,1133
4020 DATA 170,187,0,13,14,0,15,14,13,12,187,170,153,0,0,0,1226
4030 DATA 0,0,0,0,0,0,136,153,170,187,204,13,14,255,255,238,3391
4040 DATA 221,204,187,170,153,0,0,0,0,0,0,0,0,0,136,153,1163
4050 DATA 170,187,192,13,14,0,15,14,13,12,187,170,153,0,0,0,1832
4060 DATA 0,0,0,0,0,0,136,153,170,187,204,13,14,15,15,14,2877
4070 DATA 13,12,187,170,153,0,0,0,0,0,0,0,0,0,136,153,601
4080 DATA 170,187,12,13,14,15,15,14,13,0,187,170,153,0,0,0,1292
4090 DATA 0,0,0,0,0,0,136,153,170,187,12,13,14,15,15,14,795
4100 DATA 13,12,187,170,153,0,0,0,0,0,0,0,0,0,136,153,631
4110 DATA 170,187,0,13,14,0,255,238,221,0,187,170,153,0,0,0,6540
4120 DATA 0,0,0,0,0,0,136,153,170,187,12,221,238,15,15,14,6233
4130 DATA 13,12,187,170,153,0,0,0,0,0,0,0,0,0,136,153,661
4140 DATA 170,187,0,13,14,0,15,14,13,0,187,170,153,0,0,0,1226
4150 DATA 0,0,0,0,0,0,136,153,170,187,12,221,238,255,255,238,6807
4160 DATA 221,12,187,170,153,0,0,0,0,0,0,0,0,0,136,153,899
4170 DATA 170,187,0,13,14,15,15,14,13,0,187,170,153,0,0,0,1346
4180 DATA 0,0,0,0,0,0,136,153,170,187,204,13,14,15,15,14,2997
4190 DATA 13,204,187,170,153,0,0,0,0,0,0,0,0,0,136,153,1105
4200 DATA 170,187,204,221,238,255,255,238,221,204,187,170,153,0,0,0,2764
4210 DATA 0,0,169,0,133,222,169,80,133,223,162,11,32,138,54,162,9628
4220 DATA 5,189,96,52,133,220,189,102,52,133,221,189,108,52,133,222,3399
4230 DATA 189,114,52,133,223,138,72,201,4,48,4,162,15,16,2,162,4935
4240 DATA 39,160,5,177,220,145,222,136,16,249,165,220,24,105,6,133,1023
4250 DATA 220,144,2,230,221,165,222,24,105,40,133,222,144,2,230,223,3915
4260 DATA 202,16,222,104,170,202,16,185,96,71,55,39,23,7,103,57,4731
4270 DATA 58,59,60,61,61,88,14,20,106,23,29,80,80,80,80,87,3176
4280 DATA 87,32,74,49,32,55,40,169,201,141,2,212,169,52,141,3,7844
4290 DATA 212,169,210,141,0,2,169,53,141,1,2,169,208,141,24,208,9348
4300 DATA 169,140,141,25,208,169,5,141,8,210,169,170,141,1,210,141,1813
4310 DATA 3,210,169,166,141,5,210,141,7,210,169,0,141,219,0,169,862
4320 DATA 39,141,220,0,169,1,141,195,54,32,152,54,169,0,141,195,9257
4330 DATA 54,96,112,112,240,79,0,80,15,15,15,15,15,15,15,15,9174
4340 DATA 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,6380
4350 DATA 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,6390
4360 DATA 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,6400
4370 DATA 15,15,15,15,112,66,30,53,112,6,112,6,112,6,112,6,1798
4380 DATA 112,6,112,2,65,201,52,0,0,0,0,0,0,0,0,0,6743
4390 DATA 0,0,0,0,0,0,40,41,39,40,0,51,35,47,50,37,8816
4400 DATA 51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4451
4410 DATA 0,0,97,110,97,108,111,103,0,0,0,16,17,16,16,16,9008
4420 DATA 0,0,0,0,0,0,97,110,97,108,111,103,0,0,0,16,645
4430 DATA 16,21,16,16,0,0,0,0,0,0,97,110,97,108,111,103,3073
4440 DATA 0,0,0,16,16,18,21,16,0,0,0,0,0,0,97,110,8182
4450 DATA 97,108,111,103,0,0,0,16,16,17,16,16,0,0,0,0,6318
4460 DATA 0,0,97,110,97,108,111,103,0,0,0,16,16,16,21,16,9120
4470 DATA 0,0,0,0,0,0,0,0,0,0,0,0,48,114,111,103,3
4480 DATA 114,97,109,109,101,100,0,34,121,0,48,97,117,108,0,44,3446
4490 DATA 97,121,0,0,0,0,0,0,0,0,0,72,138,72,162,224,4509
4500 DATA 169,65,141,10,212,142,26,208,141,27,208,162,60,189,0,120,137
4510 DATA 141,10,212,141,4,208,142,18,208,222,0,120,138,74,144,3,8847
4520 DATA 222,0,120,202,208,231,142,10,212,142,26,208,169,1,141,27,278
4530 DATA 208,162,109,138,10,141,10,212,141,23,208,24,105,64,141,22,7406
4540 DATA 208,189,60,120,141,4,208,142,18,208,222,60,120,138,74,144,1417
4550 DATA 3,222,60,120,202,208,220,142,4,208,206,219,0,16,40,174,1209
4560 DATA 220,0,224,40,208,2,162,0,189,98,54,141,0,210,24,105,7745
4570 DATA 1,141,2,210,74,141,4,210,24,105,1,141,6,210,232,142,362
4580 DATA 220,0,169,7,141,219,0,104,170,104,64,72,110,74,111,72,7607
4590 DATA 110,74,111,64,126,66,127,64,126,66,127,72,110,74,111,72,7202
4600 DATA 110,74,111,64,126,66,127,64,126,66,127,64,74,84,94,62,6373
4610 DATA 72,82,92,160,0,152,145,222,200,208,251,230,223,202,208,246,1649
4620 DATA 96,169,0,133,222,169,125,133,223,162,3,32,138,54,162,0,8673
4630 DATA 173,10,210,172,195,54,208,8,201,47,144,244,201,207,176,240,7742
4640 DATA 157,0,120,169,1,157,0,123,232,208,229,96,0,169,200,133,3097
4650 DATA 211,141,10,212,173,10,210,41,112,141,144,38,160,64,162,3,8656
4660 DATA 173,10,210,157,4,208,157,18,208,202,16,244,141,12,208,141,2995
4670 DATA 17,208,41,7,170,173,10,210,41,239,157,0,210,136,208,222,4684
4680 DATA 198,211,208,205,169,48,141,144,38,169,0,141,12,208,96,165,888
4690 DATA 212,240,46,169,82,133,213,169,53,133,214,162,0,160,0,177,1424
4700 DATA 213,217,231,41,144,24,208,5,200,192,5,208,242,165,213,24,3870
4710 DATA 105,20,133,213,144,2,230,214,232,224,5,208,224,96,76,59,3379
4720 DATA 55,230,212,96,134,217,169,130,133,213,169,53,133,214,169,4,3596
4730 DATA 56,229,217,170,240,36,165,213,24,105,20,133,215,165,214,105,3927
4740 DATA 0,133,216,160,19,177,213,145,215,136,16,249,165,213,56,233,6256
4750 DATA 20,133,213,176,2,198,214,202,16,218,169,73,133,213,169,53,3844
4760 DATA 133,214,165,217,10,10,72,24,101,213,133,213,144,2,230,214,3322
4770 DATA 104,10,10,24,101,213,133,213,144,2,230,214,160,7,185,82,2117
4780 DATA 56,170,189,45,56,145,213,136,16,244,165,213,24,105,9,133,652
4790 DATA 215,165,214,105,0,133,216,160,4,185,231,41,145,215,136,16,2097
4800 DATA 248,160,0,32,27,56,169,255,145,213,32,27,56,185,82,56,8745
4810 DATA 170,189,45,56,145,213,173,16,208,240,67,173,0,211,41,15,9953
4820 DATA 201,7,208,9,200,192,8,48,218,160,0,16,214,201,11,208,1130
4830 DATA 7,136,16,207,160,7,16,203,201,13,208,12,185,82,56,56,8223
4840 DATA 233,1,16,20,169,36,16,16,201,14,208,183,185,82,56,24,7714
4850 DATA 105,1,201,37,48,2,169,0,153,82,56,76,186,55,173,16,6907
4860 DATA 208,240,251,96,32,55,40,32,61,40,32,55,40,32,61,40,2195
4870 DATA 32,55,40,76,61,40,0,97,98,99,100,101,102,103,104,105,6949
4880 DATA 106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,656
4890 DATA 122,80,81,82,83,84,85,86,87,88,89,0,0,0,0,0,587
4900 DATA 0,0,0,169,0,141,0,212,141,14,210,141,14,212,141,8,8922
4910 DATA 210,169,3,141,15,210,169,169,141,2,212,169,56,141,3,212,1689
4920 DATA 169,120,141,9,212,169,12,141,23,208,169,0,141,24,208,169,1213
4930 DATA 35,141,0,212,169,14,141,1,210,141,3,210,162,1,142,0,8122
4940 DATA 210,232,142,2,210,162,127,173,10,210,157,0,120,202,16,247,2840
4950 DATA 48,243,66,231,56,2,66,231,56,2,66,231,56,2,66,231,8672
4960 DATA 56,2,66,231,56,2,66,231,56,2,66,231,56,2,66,231,8208
4970 DATA 56,2,66,231,56,2,66,231,56,2,66,231,56,2,66,231,8218
4980 DATA 56,2,66,231,56,2,66,231,56,2,66,231,56,65,169,56,7855
4990 DATA 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6350
5000 DATA 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6360
5010 DATA 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6370
5020 DATA 8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,5868
5030 DATA 8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,5878
5040 DATA 8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,5888
5050 DATA 15,255,255,255,255,80,255,255,255,255,255,245,255,255,255,255,8320
5060 DATA 255,245,255,255,255,255,255,245,238,238,238,238,238,230,238,238,7828
5070 DATA 238,238,238,230,238,238,238,238,238,230,238,238,238,238,238,230,7198
5080 DATA 221,221,221,221,221,215,221,221,221,221,221,215,221,221,112,13,65
5090 DATA 221,215,221,221,112,13,221,215,204,204,128,0,0,0,204,204,2801
5100 DATA 128,0,0,0,204,204,128,0,0,0,204,204,128,0,0,0,4724
5110 DATA 187,187,187,187,187,144,187,187,187,187,187,185,187,187,187,187,260
5120 DATA 187,185,187,187,187,187,187,185,170,170,170,170,170,170,170,170,8832
5130 DATA 170,170,170,170,170,170,170,170,170,170,10,170,170,170,170,170,6490
5140 DATA 0,0,0,9,153,155,0,0,0,9,153,155,0,0,0,9,648
5150 DATA 153,155,0,0,0,9,153,155,136,136,192,8,136,140,136,136,714
5160 DATA 192,8,136,140,136,136,136,136,136,140,136,136,136,136,136,140,3576
5170 DATA 119,119,119,119,119,126,119,119,119,119,119,126,119,119,119,119,1480
5180 DATA 119,126,119,119,119,119,119,126,102,102,102,102,102,111,102,102,9860
5190 DATA 102,102,102,111,102,102,102,102,102,111,6,102,102,102,102,240,340
5200 DATA 255,255,255,255,255,246,255,255,255,255,255,246,255,255,255,255,9718
5210 DATA 255,246,255,255,255,255,255,246,238,238,238,238,238,231,238,238,8002
5220 DATA 238,238,238,231,238,238,238,238,238,231,238,238,238,238,238,231,7378
5230 DATA 221,221,221,221,221,216,221,221,221,221,221,216,221,128,221,216,3814
5240 DATA 13,216,0,0,221,216,0,0,0,0,204,201,0,0,0,0,2742
5250 DATA 204,201,0,0,0,0,204,201,0,0,0,0,204,201,0,0,4358
5260 DATA 0,0,187,186,0,0,0,0,187,186,0,0,0,0,187,186,5889
5270 DATA 0,0,0,0,187,186,0,0,0,0,170,171,0,0,0,0,1243
5280 DATA 170,171,0,0,0,0,170,171,0,0,0,0,170,171,0,0,2954
5290 DATA 0,0,153,156,0,0,0,0,153,156,0,0,0,0,153,156,4101
5300 DATA 0,0,0,0,153,156,0,0,0,0,136,141,0,0,0,0,189
5310 DATA 136,141,0,0,0,0,136,141,0,0,0,0,136,141,0,0,1550
5320 DATA 0,0,119,126,0,0,0,0,119,126,0,0,0,0,119,126,2313
5330 DATA 0,0,0,0,119,126,0,0,0,0,102,111,0,0,0,0,9135
5340 DATA 102,111,0,0,0,0,102,111,0,0,0,0,102,111,0,0,146
5350 DATA 15,255,255,255,255,96,15,255,255,255,255,96,255,255,255,255,5248
5360 DATA 255,246,255,255,255,255,255,246,238,238,238,238,238,231,238,238,8152
5370 DATA 238,238,238,231,238,238,238,238,238,231,238,238,238,238,238,231,7528
5380 DATA 221,221,221,221,221,216,221,221,221,221,221,216,221,221,128,13,623
5390 DATA 221,216,221,221,128,13,221,216,204,204,144,12,204,201,204,204,8977
5400 DATA 144,12,204,201,204,204,144,12,204,201,204,204,144,12,204,201,7186
5410 DATA 187,187,160,11,187,186,187,187,160,11,187,186,187,187,160,11,4815
5420 DATA 187,186,187,187,160,11,187,186,170,170,170,170,170,171,170,170,7965
5430 DATA 170,170,170,171,170,170,170,170,170,171,170,170,170,170,170,171,8580
5440 DATA 153,153,192,9,153,156,153,153,192,9,153,156,153,153,192,9,3035
5450 DATA 153,156,153,153,192,9,153,156,136,136,208,8,136,141,136,136,3245
5460 DATA 208,8,136,141,136,136,208,8,136,141,136,136,208,8,136,141,2546
5470 DATA 119,119,224,7,119,126,119,119,224,7,119,126,119,119,224,7,1255
5480 DATA 119,126,119,119,224,7,119,126,102,102,240,6,102,111,102,102,379
5490 DATA 240,6,102,111,102,102,240,6,102,111,102,102,240,6,102,111,226
5500 DATA 255,255,255,255,255,96,255,255,255,255,255,96,255,255,255,255,7318
5510 DATA 255,246,255,255,255,255,255,246,238,238,238,238,238,231,238,238,8302
5520 DATA 238,238,238,231,238,238,238,238,238,231,238,238,238,238,238,231,7678
5530 DATA 221,221,221,221,221,216,221,221,221,221,221,216,221,221,128,13,773
5540 DATA 221,216,221,221,128,13,221,216,204,204,144,12,204,201,204,204,9127
5550 DATA 144,12,204,201,204,204,144,12,204,201,204,204,144,12,204,201,7336
5560 DATA 187,187,160,11,187,186,187,187,160,11,187,186,187,187,160,11,4965
5570 DATA 187,186,187,187,160,11,187,186,170,170,170,170,170,176,170,170,8185
5580 DATA 170,170,171,0,170,170,170,170,171,0,170,170,170,170,170,176,6428
5590 DATA 153,153,192,9,153,156,153,153,192,9,153,156,153,153,192,9,3185
5600 DATA 153,156,153,153,192,9,153,156,136,136,208,8,136,141,136,136,3395
5610 DATA 208,8,136,141,136,136,208,8,136,141,136,136,208,8,136,141,2696
5620 DATA 119,119,224,7,119,126,119,119,224,7,119,126,119,119,224,7,1405
5630 DATA 119,126,119,119,224,7,119,126,102,102,240,6,102,111,102,102,529
5640 DATA 240,6,102,111,102,102,240,6,102,111,102,102,240,6,102,111,376
5650 DATA 8,136,136,136,136,136,153,153,153,153,153,153,170,170,170,170,6959
5660 DATA 170,170,187,187,187,187,187,187,192,12,192,0,192,12,208,208,5413
5670 DATA 221,13,208,208,224,224,238,14,224,224,240,15,255,15,240,240,9656
5680 DATA 240,240,255,15,240,240,224,224,238,14,224,224,208,208,221,13,9798
5690 DATA 208,208,192,192,192,0,192,12,187,187,187,187,187,187,170,170,8231
5700 DATA 170,170,170,170,153,153,153,153,153,153,8,136,136,136,136,136,3893
5710 DATA 136,136,136,136,0,0,153,153,153,153,144,0,170,170,170,170,3716
5720 DATA 160,0,187,187,187,187,176,0,192,0,192,12,192,0,208,221,3614
5730 DATA 208,208,208,0,224,238,224,224,224,0,240,15,240,15,240,0,4652
5740 DATA 240,255,240,240,240,0,224,238,224,224,224,0,208,221,208,208,1808
5750 DATA 208,0,192,0,192,192,192,0,187,187,187,187,176,0,170,170,5402
5760 DATA 170,170,160,0,153,153,153,153,144,0,136,136,136,136,0,0,8824
5770 DATA 226,2,227,2,253,31,0,0,0,0,0,0,0,0,0,0,8140

Listing 2. Assembly

 org $1FFD

begining
 JMP start


; redefined character set data

character_set
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,48,243,255,255
 DB 0,48,60,60,255,255,255,255
 DB 0,0,0,12,12,207,207,255

big_ship
 DB 0,0,0,11,10,138,121,105
 DB 0,12,212,221,228,238,244,255
 DB 204,201,215,213,231,233,255,249
 DB 204,156,125,93,126,158,255,159
 DB 0,192,77,221,78,238,79,255
 DB 0,0,0,176,160,168,151,150
 DB 89,89,80,96,112,128,144,153
 DB 244,15,4,14,0,0,0,0
 DB 247,245,231,233,221,13,0,0
 DB 127,95,126,158,221,208,0,0
 DB 79,240,64,224,0,0,0,0
 DB 149,149,5,6,7,8,9,153

medium_ship
 DB 0,0,0,0,12,13,174,159
 DB 0,0,10,187,204,13,238,15
 DB 0,0,160,187,204,208,238,240
 DB 0,0,0,0,192,208,234,249
 DB 143,126,128,144,160,187,0,0
 DB 255,13,204,11,0,0,0,0
 DB 255,208,204,176,0,0,0,0
 DB 248,231,8,9,10,187,0,0

small_ship
 DB 0,13,0,159,128,157,160,187
 DB 204,221,238,255,238,221,204,0
 DB 0,208,0,249,8,217,10,187
   
fade_away
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0
 DB 0,0,0,0,0,0,0,0


; landscape data

horizon
 DB 131,129,130,129,129,131,129,129
 DB 130,131,129,130,129,131,129,131
 DB 129,129,130,129,130,131,129,131
 DB 129,129,129,131,129,129,129,130
 DB 129,131,129,131,130,129,131,129

terrain_data
 DB 255,255,0,0,3,255,255,255
 DB 0,0,1,255,255,255,0,0
 DB 1,255,255,255,0,0,1,255
 DB 255,255,0,0,1,255,255,255
 DB 0,0,1,255,255,255,128,0
 DB 255,252,0,0,15,255,255,254
 DB 0,0,7,255,255,254,0,0
 DB 1,255,255,255,0,0,1,255
 DB 255,255,128,0,0,255,255,255
 DB 192,0,0,127,255,255,240,0
 DB 255,224,0,0,127,255,255,248
 DB 0,0,15,255,255,252,0,0
 DB 3,255,255,255,0,0,0,255
 DB 255,255,192,0,0,63,255,255
 DB 240,0,0,31,255,255,254,0
 DB 255,0,0,1,255,255,255,224
 DB 0,0,63,255,255,248,0,0
 DB 3,255,255,255,0,0,0,255
 DB 255,255,224,0,0,31,255,255
 DB 252,0,0,3,255,255,255,224
 DB 248,0,0,7,255,255,255,128
 DB 0,0,127,255,255,240,0,0
 DB 7,255,255,255,0,0,0,127
 DB 255,255,240,0,0,7,255,255
 DB 255,0,0,0,255,255,255,252
 DB 192,0,0,63,255,255,254,0
 DB 0,0,255,255,255,224,0,0
 DB 7,255,255,255,0,0,0,127
 DB 255,255,248,0,0,3,255,255
 DB 255,192,0,0,31,255,255,255
 DB 0,0,0,255,255,255,248,0
 DB 0,3,255,255,255,192,0,0
 DB 15,255,255,255,0,0,0,63
 DB 255,255,252,0,0,1,255,255
 DB 255,240,0,0,7,255,255,255
 DB 0,0,7,255,255,255,224,0
 DB 0,7,255,255,255,128,0,0
 DB 15,255,255,255,0,0,0,63
 DB 255,255,254,0,0,0,127,255
 DB 255,252,0,0,0,255,255,255
 DB 0,0,31,255,255,255,128,0
 DB 0,31,255,255,255,0,0,0
 DB 31,255,255,255,0,0,0,31
 DB 255,255,255,0,0,0,63,255
 DB 255,255,0,0,0,63,255,255
 DB 0,0,255,255,255,254,0,0
 DB 0,63,255,255,254,0,0,0
 DB 31,255,255,255,0,0,0,31
 DB 255,255,255,128,0,0,15,255
 DB 255,255,192,0,0,7,255,255
 DB 0,3,255,255,255,248,0,0
 DB 0,255,255,255,252,0,0,0
 DB 63,255,255,255,0,0,0,15
 DB 255,255,255,192,0,0,7,255
 DB 255,255,240,0,0,1,255,255
 DB 0,31,255,255,255,224,0,0
 DB 1,255,255,255,248,0,0,0
 DB 63,255,255,255,0,0,0,15
 DB 255,255,255,224,0,0,1,255
 DB 255,255,252,0,0,0,63,255
 DB 0,127,255,255,255,128,0,0
 DB 7,255,255,255,240,0,0,0
 DB 127,255,255,255,0,0,0,7
 DB 255,255,255,240,0,0,0,255
 DB 255,255,255,0,0,0,15,255
 DB 1,255,255,255,254,0,0,0
 DB 15,255,255,255,224,0,0,0
 DB 127,255,255,255,0,0,0,7
 DB 255,255,255,248,0,0,0,63
 DB 255,255,255,192,0,0,1,255
 DB 15,255,255,255,248,0,0,0
 DB 63,255,255,255,192,0,0,0
 DB 255,255,255,255,0,0,0,3
 DB 255,255,255,252,0,0,0,31
 DB 255,255,255,240,0,0,0,127
 DB 63,255,255,255,224,0,0,0
 DB 127,255,255,255,128,0,0,0
 DB 255,255,255,255,0,0,0,3
 DB 255,255,255,254,0,0,0,7
 DB 255,255,255,248,0,0,0,15
 DB 255,255,255,255,192,0,0,0
 DB 255,255,255,255,128,0,0,1
 DB 255,255,255,255,0,0,0,1
 DB 255,255,255,254,0,0,0,3
 DB 255,255,255,254,0,0,0,3
 DB 255,255,255,255,0,0,0,3
 DB 255,255,255,255,0,0,0,1
 DB 255,255,255,255,0,0,0,1
 DB 255,255,255,255,0,0,0,1
 DB 255,255,255,255,128,0,0,0
 DB 255,255,255,252,0,0,0,7
 DB 255,255,255,254,0,0,0,3
 DB 255,255,255,255,0,0,0,0
 DB 255,255,255,255,128,0,0,0
 DB 127,255,255,255,224,0,0,0
 DB 255,255,255,240,0,0,0,31
 DB 255,255,255,252,0,0,0,3
 DB 255,255,255,255,0,0,0,0
 DB 255,255,255,255,192,0,0,0
 DB 63,255,255,255,248,0,0,0
 DB 255,255,255,192,0,0,0,63
 DB 255,255,255,248,0,0,0,7
 DB 255,255,255,255,0,0,0,0
 DB 127,255,255,255,224,0,0,0
 DB 15,255,255,255,254,0,0,0
 DB 255,255,255,0,0,0,0,255
 DB 255,255,255,240,0,0,0,7
 DB 255,255,255,255,0,0,0,0
 DB 127,255,255,255,240,0,0,0
 DB 7,255,255,255,255,128,0,0
 DB 255,255,252,0,0,0,1,255
 DB 255,255,255,224,0,0,0,15
 DB 255,255,255,255,0,0,0,0
 DB 63,255,255,255,248,0,0,0
 DB 1,255,255,255,255,224,0,0
 DB 255,255,240,0,0,0,7,255
 DB 255,255,255,192,0,0,0,15
 DB 255,255,255,255,0,0,0,0
 DB 63,255,255,255,252,0,0,0
 DB 0,255,255,255,255,248,0,0
 DB 255,255,192,0,0,0,15,255
 DB 255,255,255,128,0,0,0,31
 DB 255,255,255,255,0,0,0,0
 DB 31,255,255,255,254,0,0,0
 DB 0,63,255,255,255,254,0,0
 DB 255,255,0,0,0,0,63,255
 DB 255,255,255,0,0,0,0,31
 DB 255,255,255,255,0,0,0,0
 DB 31,255,255,255,255,0,0,0
 DB 0,31,255,255,255,255,128,0
 DB 255,252,0,0,0,0,127,255
 DB 255,255,254,0,0,0,0,63
 DB 255,255,255,255,0,0,0,0
 DB 15,255,255,255,255,128,0,0
 DB 0,7,255,255,255,255,224,0
 DB 255,240,0,0,0,0,255,255
 DB 255,255,252,0,0,0,0,63
 DB 255,255,255,255,0,0,0,0
 DB 15,255,255,255,255,192,0,0
 DB 0,3,255,255,255,255,248,0
 DB 255,192,0,0,0,3,255,255
 DB 255,255,248,0,0,0,0,127
 DB 255,255,255,255,0,0,0,0
 DB 7,255,255,255,255,224,0,0
 DB 0,1,255,255,255,255,254,0
 DB 255,0,0,0,0,7,255,255
 DB 255,255,240,0,0,0,0,127
 DB 255,255,255,255,0,0,0,0
 DB 7,255,255,255,255,240,0,0
 DB 0,0,127,255,255,255,255,128
 DB 252,0,0,0,0,31,255,255
 DB 255,255,224,0,0,0,0,255
 DB 255,255,255,255,0,0,0,0
 DB 3,255,255,255,255,248,0,0
 DB 0,0,63,255,255,255,255,224


title_memory = $5000
pause_memory = $6800
screen_memory = $7400
pmbase = $7800
play1 = pmbase+$0500
play2 = pmbase+$0600
play3 = pmbase+$0700
starfield = pmbase


display_list
 DB $30,$30,$70,$F0
         
; space
 DB $42
 DW viewport

 DB $42
 DW screen_memory
 DB $02,$02,$02,$02,$02,$02,$02,$02
 DB $02,$02,$02,$02,$02
           
; horizon
 DB $44
 DW horizon
               
; landscape
scroll_area
 DB $4F
 DW terrain_data
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$00

; control panel
 DB $42
 DW control_panel
 DB $00,$02,$02,$00,$02

 DB $41
 DW display_list
 

start
 LDA #LOW busted
 STA $02
 LDA #HIGH busted
 STA $03
 LDA #$02
 STA $09
 LDA #$00
 STA $244
 STA toggle
 STA pointer
 STA $D4
 LDA #$01
 STA number_of_ships
 LDA #$03
 STA $D20F
 STA $D01D
 LDA #LOW kb_int
 STA $0208
 LDA #HIGH kb_int
 STA $0209
 LDA #$40
 STA $D20E
 LDA #HIGH pmbase
 STA $D407
 LDA #$80
 STA $D40E
 LDA #$3E
 STA $D400

 JSR clr_pause_display

 JSR set_up_letters

main_program
 JSR wait_for_start

 JSR vb_wait
 LDA #$00
 STA $D400

 LDA #LOW display_list
 STA $D402
 LDA #HIGH display_list
 STA $D403

 LDA #LOW dli
 STA $200
 LDA #HIGH dli
 STA $201

 LDA #$DE
 STA $D013
 LDA #$3C
 STA $D014
 LDA #$8C
 STA $D015
 JSR pm_init

 LDX #$04
loop1
 LDA colours,X
 STA $D016,X
 DEX
 BPL loop1

 JSR clr_screen

 LDA #$00
 STA released
 STA chr_offset
 STA $D208
 LDX #$02
horiz_init
 STA p1x,X
 DEX
 BPL horiz_init

 LDA #$FF
 STA left_frame
 STA right_frame
 STA shakin
 STA tons
   
 LDA #$78
 STA x_cursor
 STA y_cursor
          
 LDA #$10
 STA shields+$01
 STA shields+$02
 LDX #$04
loop70
 STA score,X
 DEX
 BPL loop70

 LDA #$11
 STA shields

 LDA #$04
 STA llength

 JSR vb_wait
 LDA #$3E
 STA $D400

set_level
 LDA number_of_ships
 STA alive_ships
 JSR init_fleet
 JSR vb_waste

loop3     
 JSR vb_wait
 JSR handle_ship
 JSR move_missiles
 JSR vb_waste

 JSR vb_wait 
 JSR move_land
 JSR move_cursor
 JSR fade_em
 JSR vb_waste
       
 JSR vb_wait
 JSR move_missiles
 JSR effects
 JSR play_keys
 JSR vb_waste

 JSR vb_wait  
 JSR move_land     
 JSR move_cursor
 JSR fade_em
 JSR vb_waste

 LDA alive_ships
 BNE loop3

 JSR vb_wait
 
 JSR up_wave
 LDA number_of_ships
 CMP #$FF
 BEQ set_level
 CLC 
 ADC #$01
 STA number_of_ships
 BNE set_level

colours
 DB $00,$0C,$00,$46,$00

llength
 DB $00

lcol_1
 DB $44

lcol_2
 DB $4A

up_wave
 LDX #$01
wave_loop
 LDA wave,X
 CLC
 ADC #$01
 CMP #$1A
 BEQ next_wave_digit
 STA wave,X
 RTS
next_wave_digit
 LDA #$10
 STA wave,X
 DEX
 BPL wave_loop
 RTS


init_fleet
 LDX #$00
init1loop
 JSR init_ship
 INX
 CPX number_of_ships
 BNE init1loop
 RTS


vb_wait
 LDA $D40B
 BNE vb_wait
 RTS


vb_waste
 LDA $D40B
 BEQ vb_waste
 RTS
                  

move_land
 LDX llength
 INX
 CPX #$05
 BNE set_llength
 LDA lcol_1
 PHA
 LDA lcol_2
 STA lcol_1
 PLA
 STA lcol_2
 LDX #$01
set_llength
 STX llength
 RTS


dli
 PHA
 TXA
 PHA
 TYA
 PHA

 LDX #$8B 
loop6
 STX $D40A
 STX $D018
 DEX
 CPX #$83
 BNE loop6

 LDA #$41
 LDX #HIGH character_set
 STA $D40A
 STA $D01B              
 STX $D409
         
 LDA starfield+$6F
 PHA
 LDX #$6E
loop4
 LDA starfield,X
 STA $D40A
 STA $D004
 STA starfield+$01,X
 STX $D012
 DEX
 BNE loop4
 PLA
 STA starfield+$01

 LDA #$00
 STA $D40A
 STA $D004

 LDA #$01
 STA $D40A
 STA $D01B
          
 LDX #$08
loop8
 STX $D40A
 DEX
 BNE loop8

 LDA lcol_1
 LDY lcol_2
 STA $D017
 STY $D018
 LDX llength
lloop_1
 STX $D40A
 DEX
 BNE lloop_1
 STA $D018
 STY $D017
 LDX #$05
lloop_2
 STX $D40A
 DEX
 BNE lloop_2
 STA $D017
 STY $D018
 LDX #$06
lloop_3
 STX $D40A
 DEX
 BNE lloop_3
 STA $D018
 STY $D017
 LDX #$07
lloop_4
 STX $D40A
 DEX 
 BNE lloop_4
 STA $D017
 STY $D018
 LDX #$08
lloop_5
 STX $D40A
 DEX
 BNE lloop_5
 LDX llength
 CPX #$04
 BEQ lskip_1
 STA $D018
 STY $D017
lloop_6
 STX $D40A
 INX
 CPX #$04
 BNE lloop_6
lskip_1
 LDA #$0C
 STA $D40A
 STA $D017
 LDX #$8B
 LDA #$E0
 STA $D40A
 STX $D018
 STA $D409
 DEX

loop7
 STX $D40A
 STX $D018
 DEX
 CPX #$83
 BNE loop7

 LDA #$00
 STA $D40A
 STA $D017

 LDX #$CB
loop9
 STX $D40A
 STX $D018
 STX $D40A
 DEX
 CPX #$C3
 BNE loop9

 LDA #$0C
 STA $D40A
 STA $D017

 LDX #$8B
loop11
 STX $D40A
 STX $D018
 DEX
 CPX #$83
 BNE loop11

 PLA
 TAY
 PLA
 TAX
 PLA
 RTI       


viewport
 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0  
 DB 214,246,233,229,247
 DB 240,239,242,244,194
 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

control_panel                    
 DB 0,0,0,0,0,0,0,0,0,0,0,0
 DB 214,227,239,238,244,242,239,236
 DB 128,240,225,238,229,236,194
 DB 0,0,0,0,0,0,0,0,0,0,0,0,0

 DB 0,0,0,0,0,0,0
 DB 51,'core',0,0,0,0,0
 DB 51,'hields',0,0,0,0,0
 DB 55,'ave'
 DB 0,0,0,0,0,0,0

 DB 0,0,0,0,0,0,0
 DB 16,16,16,16,16,0,0,0,0,0
 DB 0,17,16,16,0,5,0,0,0,0,0,0
 DB 0,16,17,0
 DB 0,0,0,0,0,0,0

 DB 0,0,0,0,0,0,0,0,0
 DB 48,'rogrammed',0,34,'y',0
 DB 48,'aul',0,44,'ay'
 DB 0,0,0,0,0,0,0,0,0

score = control_panel+87
shields = control_panel+98
wave = control_panel+110


evaluate_address

; take the coordinates x,y in $F0,$F1
; and return the screen address in
; $CC,$CD

 TXA
 PHA

; first evaluate 40*y

 LDA #$00
 STA $CD
 LDA $F1

 ASL A   ; 2*y
 ROL $CD      
 ASL A   ; 4*y
 ROL $CD      
 ASL A   ; 8*y
 ROL $CD

 STA $CE ; save 8*y
 LDX $CD
 STX $CF

 ASL A   ; 16*y
 ROL $CD
 ASL A   ; 32*y
 ROL $CD

 CLC     ; add 32*y and 8*y
 ADC $CE                   
 STA $CC
 LDA $CD
 ADC $CF
 STA $CD

; now add in x
 
 LDA $CC
 CLC
 ADC $F0
 STA $CC
 BCC skip2
 INC $CD

skip2

; and add screen memory

 LDA $CC
 CLC
 ADC #LOW screen_memory
 STA $CC
 LDA $CD
 ADC #HIGH screen_memory
 STA $CD

 PLA
 TAX

; and return

 RTS


draw_big_ship

; draw a big space ship at
; coordinates x,y specified in $F0,
; $F1

 JSR evaluate_address

 LDA #$09      
 CLC
 ADC chr_offset
 LDY #$05
loop20
 STA ($CC),Y
 SEC
 SBC #$01
 DEY
 BPL loop20

 LDA #$0F 
 CLC
 ADC chr_offset
 LDY #$2D
loop21
 STA ($CC),Y
 SEC
 SBC #$01
 DEY     
 CPY #$27
 BNE loop21

 RTS


draw_medium_ship

; draw a medium space ship at
; coordinates x,y specified in $F0,
; $F1

 JSR evaluate_address

 LDA #$13
 CLC
 ADC chr_offset
 LDY #$03
loop22
 STA ($CC),Y
 SEC
 SBC #$01
 DEY
 BPL loop22

 LDA #$17      
 CLC
 ADC chr_offset
 LDY #$2B
loop23
 STA ($CC),Y
 SEC
 SBC #$01
 DEY
 CPY #$27     
 BNE loop23

 RTS


draw_small_ship

; draw a small space ship at
; coordinates x,y specified in $F0,
; $F1

 JSR evaluate_address

 LDA #$1A
 CLC
 ADC chr_offset
 LDY #$02
loop24
 STA ($CC),Y
 SEC
 SBC #$01
 DEY
 BPL loop24

 RTS


erase_big_ship
 LDA #$00


over_big_write
 PHA
 JSR evaluate_address
 PLA
 LDY #$05
loop30
 STA ($CC),Y
 DEY
 BPL loop30
 LDY #$2D
loop31
 STA ($CC),Y
 DEY
 CPY #$27
 BNE loop31
 RTS


erase_middle_ship
 LDA #$00


over_middle_write
 PHA
 JSR evaluate_address
 PLA
 LDY #$03
loop32
 STA ($CC),Y
 DEY
 BPL loop32
 LDY #$2B
loop33
 STA ($CC),Y
 DEY
 CPY #$27
 BNE loop33
 RTS

 
erase_small_ship
 LDA #$00

over_small_write
 PHA
 JSR evaluate_address
 PLA
 LDY #$02
loop34
 STA ($CC),Y
 DEY
 BPL loop34
 RTS


init_ship
 LDA $D20A
 AND #$3F
 CMP #$23
 BPL init_ship
 STA ship_x,X
 LDA #$0E
 STA ship_y,X
 LDA #$FF
 STA ship_direction,X
 LDA #$20
 STA ship_stage,X
 LDA $D20A
 AND #$7F
 STA ship_counter,X
 RTS


wipe_ship
 BNE test1
 JMP erase_small_ship
test1
 CMP #$01
 BNE test2
 JMP erase_medium_ship
test2
 JMP erase_big_ship


draw_ship
 BNE test3
 JMP draw_small_ship
test3
 CMP #$01
 BNE test4
 JMP draw_medium_ship
test4
 JMP draw_big_ship


handle_ship
 LDX #$00
 STX wings

main_loop
 LDA ship_stage,X
 CMP #$03
 BMI move_ship

 AND #$10
 BNE dying
        
 LDA ship_stage,X
 AND #$20
 BEQ next_ship

 DEC ship_counter,X
 BNE next_ship
 LDA #$00
 STA ship_stage,X
 LDA #$09
 STA ship_counter,X

next_ship
 INX 
 CPX number_of_ships
 BNE main_loop
 RTS

dying
 DEC ship_counter,X
 BMI dead
    
 LDA #$17
 STA chr_offset
 LDA ship_x,X
 STA $F0
 LDA ship_y,X
 STA $F1
 LDA ship_stage,X
 AND #$03
 JSR draw_ship
 LDA #$00
 STA chr_offset
 JMP next_ship

dead
 LDA ship_x,X
 STA $F0
 LDA ship_y,X
 STA $F1
 LDA ship_stage,X
 AND #$03
 JSR wipe_ship
 LDA #$03
 STA ship_stage,X
 DEC alive_ships
 JMP next_ship


move_ship
 LDA ship_x,X
 STA $F0
 LDA ship_y,X
 STA $F1
 LDA ship_stage,X
 JSR wipe_ship

 DEC ship_counter,X
 BNE skip10

 LDA #$09
 STA ship_counter,X
 INC ship_stage,X
 LDA ship_stage,X
 CMP #$03
 BMI skip10
           
 JSR down_shields
 LDA #$04
 STA shakin
 JSR init_ship
 JMP next_ship   

skip10
 LDA ship_y,X
 CLC
 ADC ship_direction,X
 STA ship_y,X
 STA $F1
 STA wings
 BNE skip11
 LDA #$01
 STA ship_direction,X

skip11
 LDA $D20A
 CMP #$19
 BCS skip12
 LDA ship_x,X
 BEQ draw_it
 DEC ship_x,X
 BPL draw_it

skip12
 LDA $D20A
 CMP #$19
 BCS draw_it
 LDA ship_x,X
 CMP #$22
 BEQ draw_it
 INC ship_x,X

draw_it
 LDA ship_x,X
 STA $F0
 LDA ship_stage,X
 JSR draw_ship
 JMP next_ship


move_cursor
 LDA $D010
 BNE no_fire

 LDA released
 BEQ proceed

 LDA #$00
 STA released

try_left
 LDA left_frame
 BPL try_right
 JMP fire_left_missile

try_right
 LDA right_frame
 BPL proceed
 JMP fire_right_missile

no_fire
 STA released

proceed
 LDY #$0F
 LDX y_cursor
 LDA #$00
loop50
 STA play1,X
 INX
 DEY
 BPL loop50

 LDA $D300
 AND #$0F
 STA $CC
 
 LDX toggle
 BEQ try0
     
 LDX #$00
 STX $EF
 LSR A
 ROL $EF   
 LSR A
 ROL $EF
 LDA $CC
 AND #$FC
 ORA $EF
 STA $CC
 
try0
 LSR $CC
 BCS try1
 LDA y_cursor
 SEC
 SBC #$08
 STA y_cursor

try1
 LSR $CC
 BCS try2
 LDA y_cursor
 CLC
 ADC #$08
 STA y_cursor

try2
 LSR $CC
 BCS try3
 LDA x_cursor
 SEC
 SBC #$08
 STA x_cursor

try3
 LSR $CC
 BCS check1
 LDA x_cursor
 CLC
 ADC #$08
 STA x_cursor

check1
 LDA x_cursor
 CMP #$30
 BCS check2
 LDA #$30
 STA x_cursor
 BPL check3

check2
 CMP #$C9
 BCC check3
 LDA #$C8
 STA x_cursor

check3
 LDA y_cursor
 CMP #$28
 BCS check4
 LDA #$28
 STA y_cursor
 BPL draw_cursor

check4
 CMP #$B1
 BCC draw_cursor
 LDA #$B0
 STA y_cursor
 
draw_cursor
 LDY #$0F
 LDX y_cursor
loop51
 LDA cross_hair,Y
 STA play1,X
 INX
 DEY
 BPL loop51

 LDA x_cursor
 STA $D001
 STA p1x
 
 RTS

cross_hair
 DB 0,84,146,146,16,16,16,238
 DB 238,16,16,16,146,146,84,0

x_cursor = $F2
y_cursor = $F3


fire_left_missile
 LDA x_cursor
 SEC
 SBC #$30
 LSR A
 LSR A
 LSR A
 STA left_x_inc

 LDA #$B0
 SEC
 SBC y_cursor
 LSR A
 LSR A
 LSR A
 STA left_y_dec

set_left_fire
 LDA #$08
 STA left_frame
 LDA #$30
 STA x_left
 LDA #$B0
 STA y_left
 LDA #$04
 STA tons
 JMP draw_left_missile


move_left_missile
 LDA left_frame
 BPL left_is_live
 RTS

left_is_live
 LDY #$0F
 LDX y_left
 LDA #$00
loop60
 STA play2,X
 INX
 DEY
 BPL loop60

 LDA x_left
 CLC
 ADC left_x_inc
 STA x_left

 LDA y_left
 SEC
 SBC left_y_dec
 STA y_left

 DEC left_frame
 BMI left_burned_out


draw_left_missile
 LDY #$0F
 LDX y_left
loop61
 LDA photon,Y
 AND $D20A
 STA play2,X
 INX
 DEY
 BPL loop61
 
 LDA x_left
 STA $D002
 STA p2x

left_burned_out
 RTS

left_frame = $F4
left_x_inc = $F5
left_y_dec = $F6
x_left = $F7
y_left = $F8


fire_right_missile
 LDA #$C8
 SEC
 SBC x_cursor
 LSR A
 LSR A
 LSR A
 STA right_x_dec

 LDA #$B0
 SEC
 SBC y_cursor
 LSR A
 LSR A
 LSR A
 STA right_y_dec

 LDA #$08
 STA right_frame
 LDA #$C8
 STA x_right
 LDA #$B0
 STA y_right
 LDA #$04
 STA tons
 JMP draw_right_missile


move_right_missile
 LDA right_frame
 BPL right_is_live
 RTS

right_is_live
 LDY #$0F
 LDX y_right
 LDA #$00
loop62
 STA play3,X
 INX
 DEY
 BPL loop62

 LDA x_right
 SEC
 SBC right_x_dec
 STA x_right

 LDA y_right
 SEC
 SBC right_y_dec
 STA y_right

 DEC right_frame
 BMI right_burned_out
      

draw_right_missile
 LDY #$0F
 LDX y_right
loop63
 LDA photon,Y
 AND $D20A
 STA play3,X
 INX
 DEY
 BPL loop63

 LDA x_right
 STA $D003
 STA p3x

right_burned_out
 RTS
    
right_frame = $F9
right_x_dec = $FA
right_y_dec = $FB
x_right = $FC
y_right = $FD
released = $FE
              
photon
 DB 24,60,126,126,126,255,255,255
 DB 255,255,255,126,126,126,60,24


move_missiles
 JSR test_left_missile
 JSR test_right_missile
 JSR move_left_missile
 JMP move_right_missile


check_missile_hit
 SEC
 SBC #$28
 LSR A
 LSR A
 LSR A 
 STA y_missile

 LDA x_missile
 SEC
 SBC #$30
 LSR A
 LSR A

 SEC
 SBC ship_x,X
 CLC
 ADC #$01
 BMI no_hit
                
 PHA
 LDA ship_stage,X
 TAY
 PLA
 CMP x_ranges,Y
 BPL no_hit

 LDA y_missile
 SEC
 SBC ship_y,X
 CLC
 ADC #$01
 BMI no_hit

 CMP y_ranges,Y
 BPL no_hit

a_hit
 LDA #$08
 STA hitz
 SEC
 RTS

no_hit
 CLC
 RTS

x_ranges
 DB $03,$04,$06

y_ranges
 DB $01,$02,$02

x_missile = $E0
y_missile = $E1


test_left_missile
 LDA left_frame
 BEQ left1test
 RTS

left1test
 LDX #$00

left1loop
 LDA ship_stage,X
 CMP #$03
 BMI left2test

left1next
 INX
 CPX number_of_ships
 BNE left1loop
 RTS    

left2test
 LDA x_left
 STA x_missile
 LDA y_left
 JSR check_missile_hit
 BCC left_miss

left_hit
 JSR up_shields
 JSR up_score
 LDA ship_stage,X
 ORA #$10
 STA ship_stage,X
 LDA #$08
 STA ship_counter,X
 RTS

left_miss
 JMP left1next

test_right_missile
 LDA right_frame
 BEQ right1test
 RTS

right1test  
 LDX #$00

r1loop
 LDA ship_stage,X
 CMP #$03
 BMI right2test

r1next
 INX
 CPX number_of_ships
 BNE r1loop
 RTS

right2test
 LDA x_right
 STA x_missile
 LDA y_right
 JSR check_missile_hit
 BCC right_miss

right_hit
 JSR up_shields
 JSR up_score
 LDA ship_stage,X
 ORA #$10
 STA ship_stage,X
 LDA #$08
 STA ship_counter,X
 RTS   

right_miss
 JMP r1next

chr_offset = $FF


fade_em
 LDX #$00

fade_loop
 LDA $D20A
 AND #$03
 TAY
 LDA character_set+$0020,X
 AND mask,Y
 STA character_set+$00D8,X
 INX
 CPX #$B6
 BNE fade_loop

 RTS

mask
 DB $00,$0F,$F0,$FF


number_of_ships = $E2
alive_ships = $E3


up_shields

 LDA shields
 CMP #$11
 BEQ done1

 LDA number_of_ships
 SEC
 SBC #$01
 AND #$F8
 LSR A
 LSR A
 LSR A
 CMP #$04
 BMI found_boost
 LDA #$03

found_boost
 TAY
 LDA lo_boosts,Y
 STA lo_add
 LDA hi_boosts,Y
 STA hi_add

 LDA shields+$02
 CLC
 ADC lo_add
 CMP #$1A
 BMI skip80

 INC hi_add
 SEC
 SBC #$0A

skip80
 STA shields+$02
 
 LDA shields+$01
 CLC
 ADC hi_add
 CMP #$1A
 BMI skip81
           
 LDA #$11
 STA shields
 LDA #$10
 STA shields+$01
 STA shields+$02

done1
 RTS

skip81
 STA shields+$01
 RTS

lo_add = $E4
hi_add = $E5

lo_boosts
 DB $02,$05,$00,$00

hi_boosts
 DB $00,$00,$01,$02


up_score
 LDY #$04
 LDA score,Y
 CLC
 ADC #$05
 CMP #$1A
 BMI done3

loop83
 SEC
 SBC #$0A
 STA score,Y

 DEY
 BMI overflow

 LDA score,Y
 CLC
 ADC #$01
 CMP #$1A
 BPL loop83

done3
 STA score,Y
 RTS

overflow
 RTS


down_shields
 LDY #$02
 LDA shields,Y
 SEC
 SBC #$04
 CMP #$10
 BPL done2

loop82
 CLC
 ADC #$0A
 STA shields,Y

 DEY 
 BMI no_shields

 LDA shields,Y
 SEC
 SBC #$01
 CMP #$10
 BMI loop82

done2
 STA shields,Y
 RTS

no_shields
 LDA #$10
 STA shields
 STA shields+$01
 STA shields+$02

game_over
 JSR time_to_die
 JSR off_sound
 LDX #$03
 LDA #$00
off_saves
 STA freqs,X
 STA dists,X
 DEX
 BPL off_saves
 LDX #$00
 TXS
 JMP main_program
 
effects
 LDX shakin
 BMI no_shakin

 LDA shake_lines,X
 STA display_list
 LDA shake_freq,X
 STA $D200
 STA freq1
 LDA shake_dist,X
 STA $D201
 STA dist1
 DEC shakin

no_shakin
 LDA wings
 STA $D202
 STA freq2
 STA $D203
 STA dist2

 LDX tons
 BMI no_tons

 LDA pho_freq,X
 STA $D204
 STA freq3
 LDA pho_dist,X
 STA $D205
 STA dist3
 DEC tons

no_tons
 LDX hitz
 BMI no_hitz

 LDA hit_freq,X
 STA $D206
 STA freq4
 LDA hit_dist,X
 STA $D207
 STA dist4
 DEC hitz

no_hitz
 RTS


shakin = $E6
wings = $E7
tons = $E8
hitz = $E9


shake_lines
 DB $30,$20,$40,$10,$50

shake_freq
 DB $00,$80,$B0,$D0,$E0

shake_dist
 DB $00,$82,$84,$86,$88

pho_freq
 DB 0,160,140,120,48

pho_dist
 DB 0,$8A,$8C,$8E,$C6

hit_freq
 DB 0,240,230,220,210,200,190,180
 DB 170

hit_dist
 DB $00,$88,$8A,$8C,$8C,$8E,$8E,$8E
 DB $8C


freqs

freq1
 DB 0
freq2
 DB 0
freq3
 DB 0
freq4
 DB 0


dists

dist1
 DB 0
dist2
 DB 0
dist3
 DB 0
dist4
 DB 0


kb_int
 LDA $D209
 STA the_key
 PLA
 RTI

the_key = $EA


wait_for_start

 JSR set_hi_up
 JSR try_hi_score

key_reset 
 LDA #$FF
 STA the_key

press_wait 
 LDA $D01F
 CMP #$06 ; start ?
 BNE try_a_key
 LDX #$00
 BEQ go_level

try_a_key
 LDA the_key
 CMP #$2D ; toggle ?
 BNE no_toggle

 LDA toggle
 EOR #$FF
 STA toggle
 JMP key_reset

no_toggle
 CMP #$12 ; continue ?
 BEQ go_there

 LDX #$05
key_loop
 CMP lvl_keys,X ; level ?
 BEQ go_level
 DEX
 BNE key_loop
 JMP press_wait

go_level
 LDA lvl_number,X
 STA number_of_ships
 LDA lvl_lo,X
 STA wave+$01
 LDA lvl_hi,X
 STA wave

go_there
 LDA #$FF
 STA the_key
 JMP off_sound

toggle = $EB
pointer = $EC

lvl_keys
 DB $FF,$1F,$1E,$1A,$18,$1D

lvl_number
 DB 1,10,20,30,40,50

lvl_lo
 DB $11,$10,$10,$10,$10,$10

lvl_hi
 DB $10,$11,$12,$13,$14,$15 


play_keys
 LDA the_key
 CMP #$1C
 BNE no_esc

 JMP game_over

no_esc
 CMP #$2D
 BNE dont_toggle

 LDA toggle
 EOR #$FF
 STA toggle
 LDA #$FF
 STA the_key
 RTS

dont_toggle
 CMP #$21
 BNE no_space
    
 JSR off_sound
 JSR vb_wait
 LDA #LOW dl_pause
 STA $D402
 LDA #HIGH dl_pause
 STA $D403
 LDA #$40
 STA $D01B
 LDA #$E0
 STA $D01A
 LDX #$02
 LDA #$00
pm_erase
 STA $D001,X
 DEX
 BPL pm_erase
 LDA #$FF
 STA the_key   

 LDA #$05
 STA $D208
 LDA #$A6
 STA $D201
 STA $D205
 LDA #$80
 STA $D200
 LDA #$40
 STA $D204

pause_loop 
 JSR wiggle
 LDA the_key
 CMP #$21
 BNE pause_loop

 JSR vb_wait
 LDA #LOW display_list
 STA $D402
 LDA #HIGH display_list
 STA $D403
 LDA #$01
 STA $D01B
 LDA #$00
 STA $D01A
 LDX #$02
pm_draw
 LDA p1x,X
 STA $D001,X
 DEX
 BPL pm_draw
 LDA #$FF
 STA the_key
 LDA #$00
 STA $D208
 JSR on_sound

no_space
 RTS
            
p1x = $D0
p2x = $D1
p3x = $D2


off_sound
 LDX #$07
 LDA #$00
off_loop
 STA $D200,X
 DEX
 BPL off_loop
 RTS


on_sound
 LDX #$03
 LDY #$06
on_loop
 LDA freqs,X
 STA $D200,Y
 LDA dists,X
 STA $D201,Y
 DEX        
 DEY
 DEY
 BPL on_loop
 RTS


clr_screen
 LDA #LOW screen_memory
 STA $DE
 LDA #HIGH screen_memory
 STA $DF
 LDX #$04
 JMP rub_memory


clr_pause_display
 LDA #LOW pause_memory
 STA $DE
 LDA #HIGH pause_memory
 STA $DF
 LDX #$08
 JMP rub_memory


dl_pause
 DB $70,$70,$70
 DB $4F
 DW pause_memory
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F
 DB $41
 DW dl_pause


wiggle
 JSR vb_wait
 LDX #$0D

wig1
 LDA pos_lo,X
 STA $ED
 LDA pos_hi,X
 STA $EE
 LDA chars_lo,X
 STA wig2+$01
 LDA chars_hi,X
 STA wig2+$02

 TXA
 PHA

 LDX #$00
 LDY #$00

wig2
 LDA $FFFF,X
 STA ($ED),Y
 LDA $ED
 CLC
 ADC #$28
 STA $ED
 BCC skip90
 INC $EE

skip90
 INX
 CPX #$18
 BNE wig2

 PLA
 TAX
 DEX
 BPL wig1

 LDX #$0D
 
wig3
 LDA updates-$01,X
 STA updates,X
 DEX
 BNE wig3

 LDX pointer
 CPX #$30
 BNE cont_sequence
 LDX #$00
 STX pointer

cont_sequence
 LDA sequence,X
 STA updates
 INC pointer

 LDX #$0D

wig4
 LDA updates,X
 BMI going_down

going_up
 LDA pos_lo,X
 CLC
 ADC updates,X
 STA pos_lo,X
 BCC lets_resume
 INC pos_hi,X
 BNE lets_resume

going_down
 LDA pos_lo,X
 CLC
 ADC updates,X
 STA pos_lo,X
 BCS lets_resume
 DEC pos_hi,X

lets_resume
 DEX
 BPL wig4

 RTS


updates
 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0

pos_lo
 DB $3D,$3E,$3F,$40,$41,$42,$43,$44
 DB $45,$46,$47,$48,$49,$4A

pos_hi
 DB $6A,$6A,$6A,$6A,$6A,$6A,$6A,$6A
 DB $6A,$6A,$6A,$6A,$6A,$6A

u1 = $28
u2 = $50
u3 = $78
d1 = $D8
d2 = $B0
d3 = $88

sequence
 DB 0,0,0
 DB u1,u1,u1,u1,d1,d1,d1,d1
 DB 0,0
 DB u1,u1,u1,u2,u2,u3
 DB d3,d2,d2,d1,d1,d1
 DB 0,0,0
 DB u1,u2,u3,d3,d2,d1
 DB 0,0
 DB u1,u1,u1,u1,u1,u1,d3,d2,d1
 DB 0,0,0                             
chars_lo
 DB LOW char1,LOW char2,LOW char3
 DB LOW char4,LOW char5,LOW char6
 DB LOW char7,LOW char8,LOW char9
 DB LOW char10,LOW char11
 DB LOW char12,LOW char13
 DB LOW char14

chars_hi
 DB HIGH char1,HIGH char2,HIGH char3
 DB HIGH char4,HIGH char5,HIGH char6
 DB HIGH char7,HIGH char8,HIGH char9
 DB HIGH char10,HIGH char11
 DB HIGH char12,HIGH char13
 DB HIGH char14

char1
 DB 0,0,0,0
 DB 136,153,170,187,204,221,238,255
 DB 255,238,221,204,187,170,153,0
 DB 0,0,0,0

char2
 DB 0,0,0,0
 DB 136,153,170,187,0,13,14,0
 DB 15,14,13,12,187,170,153,0
 DB 0,0,0,0

char3
 DB 0,0,0,0
 DB 136,153,170,187,204,13,14,255
 DB 255,238,221,204,187,170,153,0
 DB 0,0,0,0

char4
 DB 0,0,0,0
 DB 136,153,170,187,192,13,14,0
 DB 15,14,13,12,187,170,153,0
 DB 0,0,0,0

char5
 DB 0,0,0,0
 DB 136,153,170,187,204,13,14,15
 DB 15,14,13,12,187,170,153,0
 DB 0,0,0,0

char6
 DB 0,0,0,0
 DB 136,153,170,187,12,13,14,15
 DB 15,14,13,0,187,170,153,0
 DB 0,0,0,0

char7
 DB 0,0,0,0
 DB 136,153,170,187,12,13,14,15
 DB 15,14,13,12,187,170,153,0
 DB 0,0,0,0

char8
 DB 0,0,0,0
 DB 136,153,170,187,0,13,14,0
 DB 255,238,221,0,187,170,153,0
 DB 0,0,0,0

char9
 DB 0,0,0,0
 DB 136,153,170,187,12,221,238,15
 DB 15,14,13,12,187,170,153,0
 DB 0,0,0,0

char10
 DB 0,0,0,0
 DB 136,153,170,187,0,13,14,0
 DB 15,14,13,0,187,170,153,0
 DB 0,0,0,0

char11
 DB 0,0,0,0
 DB 136,153,170,187,12,221,238,255
 DB 255,238,221,12,187,170,153,0
 DB 0,0,0,0

char12
 DB 0,0,0,0
 DB 136,153,170,187,0,13,14,15
 DB 15,14,13,0,187,170,153,0
 DB 0,0,0,0

char13
 DB 0,0,0,0
 DB 136,153,170,187,204,13,14,15
 DB 15,14,13,204,187,170,153,0
 DB 0,0,0,0

char14
 DB 0,0,0,0
 DB 136,153,170,187,204,221,238,255
 DB 255,238,221,204,187,170,153,0
 DB 0,0,0,0
                      

set_up_letters
 LDA #LOW title_memory
 STA $DE
 LDA #HIGH title_memory
 STA $DF
 LDX #$0B
 JSR rub_memory

 LDX #$05
here
 LDA lo_letters,X
 STA $DC
 LDA hi_letters,X
 STA $DD
 LDA lo_goes,X
 STA $DE
 LDA hi_goes,X
 STA $DF
      
 TXA
 PHA

 CMP #$04
 BMI skip96

 LDX #$0F
 BPL loop99

skip96
 LDX #$27

loop99
 LDY #$05

get1
 LDA ($DC),Y
 STA ($DE),Y
 DEY
 BPL get1

 LDA $DC
 CLC 
 ADC #$06
 STA $DC
 BCC skip97
 INC $DD

skip97
 LDA $DE
 CLC 
 ADC #$28
 STA $DE
 BCC skip95
 INC $DF

skip95
 DEX
 BPL loop99

 PLA
 TAX
 DEX
 BPL here

 RTS

lo_letters
 DB LOW s_letter
 DB LOW t_letter
 DB LOW a_letter
 DB LOW r_letter
 DB LOW rid_letters
 DB LOW er_letters

hi_letters
 DB HIGH s_letter
 DB HIGH t_letter
 DB HIGH a_letter
 DB HIGH r_letter
 DB HIGH rid_letters
 DB HIGH er_letters
 
lo_goes
 DB $58,$0E,$14,$6A,$17,$1D

hi_goes
 DB $50,$50,$50,$50,$57,$57


set_hi_up
 JSR off_sound
 JSR vb_wait
 LDA #LOW hi_dlist
 STA $D402
 LDA #HIGH hi_dlist
 STA $D403
 LDA #LOW hi_dli
 STA $0200
 LDA #HIGH hi_dli
 STA $0201
 LDA #$D0
 STA $D018
 LDA #$8C
 STA $D019
 LDA #$05
 STA $D208
 LDA #$AA
 STA $D201
 STA $D203
 LDA #$A6
 STA $D205
 STA $D207
 LDA #$00
 STA decay
 LDA #$27
 STA note
 LDA #$01
 STA left_to_right
 JSR pm_init
 LDA #$00
 STA left_to_right
 RTS

hi_dlist
 DB $70,$70,$F0
 DB $4F
 DW title_memory
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
 DB $0F,$0F,$0F,$0F
 DB $70
 DB $42
 DW scores_memory
 DB $70,$06,$70,$06,$70,$06
 DB $70,$06,$70,$06,$70
 DB $02
 DB $41
 DW hi_dlist


scores_memory
 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 DB 40,41,39,40,0
 DB 51,35,47,50,37,51
 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0

hi_line
 DB 0,0,0
 DB 97,110,97,108,111,103,0,0,0
 DB 16,17,16,16,16
 DB 0,0,0
hi_start = hi_line+12

 DB 0,0,0
 DB 97,110,97,108,111,103,0,0,0
 DB 16,16,21,16,16
 DB 0,0,0

 DB 0,0,0
 DB 97,110,97,108,111,103,0,0,0
 DB 16,16,18,21,16
 DB 0,0,0

 DB 0,0,0
 DB 97,110,97,108,111,103,0,0,0
 DB 16,16,17,16,16
 DB 0,0,0

 DB 0,0,0
 DB 97,110,97,108,111,103,0,0,0
 DB 16,16,16,21,16
 DB 0,0,0
                       
 DB 0,0,0,0,0,0,0,0,0
 DB 48,'rogrammed',0,34,'y',0
 DB 48,'aul',0,44,'ay'
 DB 0,0,0,0,0,0,0,0,0


hi_dli
 PHA
 TXA
 PHA

 LDX #$E0
 LDA #$41
 STA $D40A
 STX $D01A
 STA $D01B

 LDX #$3C

dli8loop
 LDA starfield,X
 STA $D40A
 STA $D004
 STX $D012
 DEC starfield,X
 TXA
 LSR A
 BCC dli98skip
 DEC starfield,X
dli98skip
 DEX
 BNE dli8loop

 STX $D40A
 STX $D01A
 LDA #$01
 STA $D01B

 LDX #$6D

dli9loop
 TXA
 ASL A
 STA $D40A
 STA $D017
 CLC
 ADC #$40
 STA $D016
 LDA starfield+$3C,X
 STA $D004
 STX $D012
 DEC starfield+$3C,X
 TXA
 LSR A
 BCC dli99skip 
 DEC starfield+$3C,X
dli99skip
 DEX
 BNE dli9loop
    
 STX $D004

 DEC decay
 BPL decayin

 LDX note
 CPX #$28
 BNE ok_note
 LDX #$00

ok_note
 LDA pitch,X
 STA $D200
 CLC
 ADC #$01
 STA $D202
 LSR A
 STA $D204
 CLC 
 ADC #$01
 STA $D206
 INX
 STX note
 LDA #$07
 STA decay

decayin
 PLA
 TAX
 PLA
 RTI
     
decay = $DB
note = $DC

pitch
 DB 72,110,74,111,72,110,74,111
 DB 64,126,66,127,64,126,66,127
 DB 72,110,74,111,72,110,74,111
 DB 64,126,66,127,64,126,66,127
 DB 64,74,84,94,62,72,82,92


rub_memory
 LDY #$00
 TYA
rub_loop
 STA ($DE),Y
 INY
 BNE rub_loop
 INC $DF
 DEX
 BNE rub_loop
 RTS


pm_init
 LDA #LOW play1
 STA $DE
 LDA #HIGH play1
 STA $DF
 LDX #$03
 JSR rub_memory

 LDX #$00
loop5
 LDA $D20A
 LDY left_to_right
 BNE is_skip
 CMP #$2F
 BCC loop5
 CMP #$CF
 BCS loop5  
is_skip
 STA starfield,X
 LDA #$01
 STA pmbase+$0300,X
 INX
 BNE loop5
 RTS   

left_to_right
 DB $00


time_to_die
 LDA #$C8
 STA $D3

loop88
 STA $D40A
 LDA $D20A
 AND #$70
 STA display_list
 LDY #$40
exploding 
 LDX #$03
blowing
 LDA $D20A
 STA $D004,X
 STA $D012,X
 DEX
 BPL blowing
 STA $D00C
 STA $D011
 AND #$07
 TAX
 LDA $D20A
 AND #$EF
 STA $D200,X
 DEY
 BNE exploding
 DEC $D3
 BNE loop88

 LDA #$30
 STA display_list
 LDA #$00
 STA $D00C
 RTS


try_hi_score
 LDA $D4
 BEQ first_game

 LDA #LOW hi_start
 STA $D5
 LDA #HIGH hi_start
 STA $D6
 
 LDX #$00

hs1loop
 LDY #$00

hs2loop
 LDA ($D5),Y
 CMP score,Y
 BCC a_new_hi
 BNE hs1skip

 INY
 CPY #$05
 BNE hs2loop

hs1skip
 LDA $D5
 CLC
 ADC #$14
 STA $D5
 BCC hs2skip
 INC $D6

hs2skip
 INX
 CPX #$05
 BNE hs1loop
 RTS

a_new_hi
 JMP add_high_score

first_game
 INC $D4
 RTS


add_high_score
 STX $D9
 LDA #LOW [hi_line+60]
 STA $D5
 LDA #HIGH [hi_line+60]
 STA $D6

 LDA #$04
 SEC
 SBC $D9
 TAX

ah1loop
 BEQ ah1skip
 LDA $D5
 CLC
 ADC #$14
 STA $D7
 LDA $D6
 ADC #$00
 STA $D8

 LDY #$13

ah2loop
 LDA ($D5),Y
 STA ($D7),Y
 DEY
 BPL ah2loop

 LDA $D5
 SEC
 SBC #$14
 STA $D5
 BCS ah2skip
 DEC $D6

ah2skip
 DEX
 BPL ah1loop

ah1skip
 LDA #LOW [hi_line+$03]
 STA $D5
 LDA #HIGH [hi_line+$04]
 STA $D6
 LDA $D9
 ASL A
 ASL A
 PHA
 CLC
 ADC $D5
 STA $D5
 BCC ah3skip
 INC $D6

ah3skip
 PLA
 ASL A
 ASL A
 CLC
 ADC $D5
 STA $D5
 BCC ah4skip
 INC $D6

ah4skip
 LDY #$07

ah3loop
 LDA name_buffer,Y
 TAX
 LDA name_characters,X
 STA ($D5),Y
 DEY
 BPL ah3loop

 LDA $D5
 CLC
 ADC #$09
 STA $D7
 LDA $D6
 ADC #$00
 STA $D8

 LDY #$04

ah4loop
 LDA score,Y
 STA ($D7),Y
 DEY
 BPL ah4loop

 LDY #$00

en1loop
 JSR delay

 LDA #$FF
 STA ($D5),Y

 JSR delay
 
 LDA name_buffer,Y
 TAX
 LDA name_characters,X
 STA ($D5),Y

 LDA $D010
 BEQ en5skip

 LDA $D300
 AND #$0F
 
 CMP #$07
 BNE en1skip

 INY
 CPY #$08
 BMI en1loop
 LDY #$00
 BPL en1loop

en1skip
 CMP #$0B
 BNE en2skip

 DEY
 BPL en1loop
 LDY #$07
 BPL en1loop

en2skip
 CMP #$0D
 BNE en3skip

 LDA name_buffer,Y
 SEC
 SBC #$01
 BPL en4skip
 LDA #$24
 BPL en4skip

en3skip
 CMP #$0E
 BNE en1loop

 LDA name_buffer,Y
 CLC
 ADC #$01
 CMP #$25
 BMI en4skip
 LDA #$00

en4skip
 STA name_buffer,Y
 JMP en1loop

en5skip
 LDA $D010
 BEQ en5skip
 RTS


delay
 JSR vb_wait
 JSR vb_waste
 JSR vb_wait
 JSR vb_waste
 JSR vb_wait
 JMP vb_waste


name_characters
 DB 0

a_char SET 97
 ECHO 26
 DB a_char
a_char SET a_char+$01
 	ENDM

a_char SET 80
 ECHO 10
 DB a_char
a_char SET a_char+$01
 	ENDM


name_buffer
 DB 0,0,0,0,0,0,0,0


busted
 LDA #$00
 STA $D400
 STA $D20E
 STA $D40E
 STA $D208
 LDA #$03
 STA $D20F

 LDA #LOW blister
 STA $D402
 LDA #HIGH blister
 STA $D403
 LDA #HIGH pmbase
 STA $D409
 LDA #$0C
 STA $D017
 LDA #$00
 STA $D018

 LDA #$23
 STA $D400

 LDA #$0E
 STA $D201
 STA $D203
 LDX #$01
 STX $D200
 INX
 STX $D202

bl1loop
 LDX #$7F
bl2loop
 LDA $D20A
 STA pmbase,X
 DEX
 BPL bl2loop
 BMI bl1loop


blister

 ECHO 14
 DB $42
 DW bline
 DB $02
 	ENDM

 DB $42
 DW bline

 DB $41
 DW blister
       

bline
 DB 0,1,2,3,4,5,6,7
 DB 8,9,10,11,12,13,14,15
 DB 0,1,2,3,4,5,6,7
 DB 8,9,10,11,12,13,14,15
 DB 0,1,2,3,4,5,6,7
 DB 8,9,10,11,12,13,14,15
 DB 8,9,10,11,12,13,14,15
 DB 0,1,2,3,4,5,6,7
 DB 8,9,10,11,12,13,14,15
 DB 0,1,2,3,4,5,6,7
 DB 8,9,10,11,12,13,14,15 
 DB 0,1,2,3,4,5,6,7

s_letter
 DB 15,255,255,255,255,80
 DB 255,255,255,255,255,245
 DB 255,255,255,255,255,245
 DB 255,255,255,255,255,245
 DB 238,238,238,238,238,230
 DB 238,238,238,238,238,230
 DB 238,238,238,238,238,230
 DB 238,238,238,238,238,230
 DB 221,221,221,221,221,215
 DB 221,221,221,221,221,215
 DB 221,221,112,13,221,215
 DB 221,221,112,13,221,215
 DB 204,204,128,0,0,0
 DB 204,204,128,0,0,0
 DB 204,204,128,0,0,0
 DB 204,204,128,0,0,0
 DB 187,187,187,187,187,144
 DB 187,187,187,187,187,185
 DB 187,187,187,187,187,185
 DB 187,187,187,187,187,185
 DB 170,170,170,170,170,170
 DB 170,170,170,170,170,170
 DB 170,170,170,170,170,170
 DB 10,170,170,170,170,170
 DB 0,0,0,9,153,155
 DB 0,0,0,9,153,155
 DB 0,0,0,9,153,155
 DB 0,0,0,9,153,155
 DB 136,136,192,8,136,140
 DB 136,136,192,8,136,140
 DB 136,136,136,136,136,140
 DB 136,136,136,136,136,140
 DB 119,119,119,119,119,126
 DB 119,119,119,119,119,126
 DB 119,119,119,119,119,126
 DB 119,119,119,119,119,126
 DB 102,102,102,102,102,111
 DB 102,102,102,102,102,111
 DB 102,102,102,102,102,111
 DB 6,102,102,102,102,240

t_letter
 DB 255,255,255,255,255,246
 DB 255,255,255,255,255,246
 DB 255,255,255,255,255,246
 DB 255,255,255,255,255,246
 DB 238,238,238,238,238,231
 DB 238,238,238,238,238,231
 DB 238,238,238,238,238,231
 DB 238,238,238,238,238,231
 DB 221,221,221,221,221,216
 DB 221,221,221,221,221,216
 DB 221,128,221,216,13,216
 DB 0,0,221,216,0,0
 DB 0,0,204,201,0,0
 DB 0,0,204,201,0,0
 DB 0,0,204,201,0,0
 DB 0,0,204,201,0,0
 DB 0,0,187,186,0,0
 DB 0,0,187,186,0,0
 DB 0,0,187,186,0,0
 DB 0,0,187,186,0,0
 DB 0,0,170,171,0,0
 DB 0,0,170,171,0,0
 DB 0,0,170,171,0,0
 DB 0,0,170,171,0,0
 DB 0,0,153,156,0,0
 DB 0,0,153,156,0,0
 DB 0,0,153,156,0,0
 DB 0,0,153,156,0,0
 DB 0,0,136,141,0,0
 DB 0,0,136,141,0,0
 DB 0,0,136,141,0,0
 DB 0,0,136,141,0,0
 DB 0,0,119,126,0,0
 DB 0,0,119,126,0,0
 DB 0,0,119,126,0,0
 DB 0,0,119,126,0,0
 DB 0,0,102,111,0,0
 DB 0,0,102,111,0,0
 DB 0,0,102,111,0,0
 DB 0,0,102,111,0,0

a_letter
 DB 15,255,255,255,255,96
 DB 15,255,255,255,255,96
 DB 255,255,255,255,255,246
 DB 255,255,255,255,255,246
 DB 238,238,238,238,238,231
 DB 238,238,238,238,238,231
 DB 238,238,238,238,238,231
 DB 238,238,238,238,238,231
 DB 221,221,221,221,221,216
 DB 221,221,221,221,221,216
 DB 221,221,128,13,221,216
 DB 221,221,128,13,221,216
 DB 204,204,144,12,204,201
 DB 204,204,144,12,204,201
 DB 204,204,144,12,204,201
 DB 204,204,144,12,204,201
 DB 187,187,160,11,187,186
 DB 187,187,160,11,187,186
 DB 187,187,160,11,187,186
 DB 187,187,160,11,187,186
 DB 170,170,170,170,170,171
 DB 170,170,170,170,170,171
 DB 170,170,170,170,170,171
 DB 170,170,170,170,170,171
 DB 153,153,192,9,153,156
 DB 153,153,192,9,153,156
 DB 153,153,192,9,153,156
 DB 153,153,192,9,153,156
 DB 136,136,208,8,136,141
 DB 136,136,208,8,136,141
 DB 136,136,208,8,136,141
 DB 136,136,208,8,136,141
 DB 119,119,224,7,119,126
 DB 119,119,224,7,119,126
 DB 119,119,224,7,119,126
 DB 119,119,224,7,119,126
 DB 102,102,240,6,102,111
 DB 102,102,240,6,102,111
 DB 102,102,240,6,102,111
 DB 102,102,240,6,102,111

r_letter
 DB 255,255,255,255,255,96
 DB 255,255,255,255,255,96
 DB 255,255,255,255,255,246
 DB 255,255,255,255,255,246
 DB 238,238,238,238,238,231
 DB 238,238,238,238,238,231
 DB 238,238,238,238,238,231
 DB 238,238,238,238,238,231
 DB 221,221,221,221,221,216
 DB 221,221,221,221,221,216
 DB 221,221,128,13,221,216
 DB 221,221,128,13,221,216
 DB 204,204,144,12,204,201
 DB 204,204,144,12,204,201
 DB 204,204,144,12,204,201
 DB 204,204,144,12,204,201
 DB 187,187,160,11,187,186
 DB 187,187,160,11,187,186
 DB 187,187,160,11,187,186
 DB 187,187,160,11,187,186
 DB 170,170,170,170,170,176
 DB 170,170,170,170,171,0
 DB 170,170,170,170,171,0
 DB 170,170,170,170,170,176
 DB 153,153,192,9,153,156
 DB 153,153,192,9,153,156
 DB 153,153,192,9,153,156
 DB 153,153,192,9,153,156
 DB 136,136,208,8,136,141
 DB 136,136,208,8,136,141
 DB 136,136,208,8,136,141
 DB 136,136,208,8,136,141
 DB 119,119,224,7,119,126
 DB 119,119,224,7,119,126
 DB 119,119,224,7,119,126
 DB 119,119,224,7,119,126
 DB 102,102,240,6,102,111
 DB 102,102,240,6,102,111
 DB 102,102,240,6,102,111
 DB 102,102,240,6,102,111

rid_letters
 DB 8,136,136,136,136,136
 DB 153,153,153,153,153,153
 DB 170,170,170,170,170,170
 DB 187,187,187,187,187,187
 DB 192,12,192,0,192,12
 DB 208,208,221,13,208,208
 DB 224,224,238,14,224,224
 DB 240,15,255,15,240,240
 DB 240,240,255,15,240,240
 DB 224,224,238,14,224,224
 DB 208,208,221,13,208,208
 DB 192,192,192,0,192,12
 DB 187,187,187,187,187,187
 DB 170,170,170,170,170,170
 DB 153,153,153,153,153,153
 DB 8,136,136,136,136,136

er_letters
 DB 136,136,136,136,0,0
 DB 153,153,153,153,144,0
 DB 170,170,170,170,160,0
 DB 187,187,187,187,176,0
 DB 192,0,192,12,192,0
 DB 208,221,208,208,208,0
 DB 224,238,224,224,224,0
 DB 240,15,240,15,240,0
 DB 240,255,240,240,240,0
 DB 224,238,224,224,224,0
 DB 208,221,208,208,208,0
 DB 192,0,192,192,192,0
 DB 187,187,187,187,176,0
 DB 170,170,170,170,160,0
 DB 153,153,153,153,144,0
 DB 136,136,136,136,0,0


ship_x

ship_y = ship_x+$0100

ship_direction = ship_y+$0100

ship_stage = ship_direction+$0100

ship_counter = ship_stage+$0100


 end begining