A.N.A.L.O.G. ISSUE 47 / OCTOBER 1986 / PAGE 22
Suddenly, your scanner detects the presence of an alien. Moments later it screams into view, charging headlong at you. In desperation, you back off, firing salvos of raw energy bolts at your attacker. One strikes home, and the alien pod disintegrates into scintillating dust. You were lucky that time, but how much longer will you be able to survive in the Deathzone?
Deathzone is a fast-moving, 3-dimensional arcade game that will work on all 8-bit Atari micros.
Listing 1 is the BASIC data used to create both cassette and disk versions of Deathzone. Those readers who are interested in how the game works may obtain the assembly listing on either the magazine disk version or the ANALOG Computing Atari Users’ Group on Delphi.
Disk users should refer to the M/L Editor article on page 11 for typing instructions.
If you have a cassette system, type in Listing 1, then add the lines shown in Listing 2. Type RUN and press RETURN. The program will begin checking the data statements, printing the line numbers as it goes. It will alert you to any problems. Fix any incorrect lines and rerun the program until all errors are eliminated.
When all your data lines are correct, the computer will beep twice and prompt you to READY CASSETTE AND PRESS RETURN. Now, insert a blank cassette in your recorder, press the RECORD and PLAY buttons simultaneously, and hit RETURN. The message WRITING FILE will appear, and the program will create a machine language boot tape version of Deathzone, printing each data line number as it goes. When the READY prompt appears, the game is recorded and ready to play. CSAVE the BASIC program onto a separate tape before continuing.
To play the game, rewind the tape created with the BASIC program to the beginning. Turn your computer off and remove all cartridges. Press the PLAY button on your recorder and turn on your computer, while holding down the START key. If you have an XL or XE series computer, you must hold the START and OPTION keys when you turn on the power. The computer will beep once. Hit the RETURN key, and Deathzone will load and run automatically.
If you’ve followed the instructions correctly, you will now be looking at the title page for Deathzone. Both the lowest (L) and highest (H) scores are shown. You can start the game either by pressing the trigger of joystick 1, or be pressing the START key. If you should wish to abort a game before completion, either the SELECT or OPTION keys will bring you back to the title page.
When you begin the game, you’ll notice that the screen is divided into sections. At the very top is a horizontal line whose length indicates how close the alien is. Two sets of directional arrows at either end of the line indicate whether the alien is to your front, left, right, or rear. The next line is the status line, showing your score from left to right, lives remaining and current level of play. Further down, there’s a standard radar scanner superimposed on the sky. The white central dot represents your own position, of course.
By using the joystick, you can move in and out of the screen, or swivel on the spot. You must do your best to avoid both the aliens themselves and the energy bolts they fire. Each time you’re hit, you’ll lose a life. You’ll need to dodge, reverse away and fire rapidly, in order to destroy the aliens before they reach you. Incidentally, you can pause the game with the SPACE BAR and continue it by moving the joystick.
Every so often, an alien pod with rather different characteristics will attack you. If you should succeed in destroying it, you’ll receive an extra life and move up to the next level of play. If not, you’ll have to restart that level. There are a total of six levels, each progressively more difficult than the last. Should you complete the last level, well…wait and see!
Last, a word of thanks to my brother for writing a “blackbox” 16-bit math package, around which the game was based.
1000 DATA 255,255,0,31,128,59,112,112,112,112,112,240,71,0,27,7,2243 1010 DATA 112,2,112,112,6,112,112,2,11 2,112,65,0,31,0,151,79,187 1020 DATA 80,76,77,78,0,203,79,80,76,7 7,78,0,152,65,66,67,1466 1030 DATA 68,69,70,71,72,0,137,79,80,1 33,76,77,78,0,143,79,1914 1040 DATA 80,83,0,136,73,74,75,69,70,7 1,72,0,134,79,80,76,1112 1050 DATA 77,78,0,137,65,66,67,68,69,7 0,71,72,0,137,79,80,914 1060 DATA 133,76,77,78,0,143,79,80,65, 66,67,68,136,69,70,71,1657 1070 DATA 72,0,131,79,80,138,76,77,78, 65,66,67,68,81,82,0,357 1080 DATA 132,79,80,131,83,0,132,73,74 ,75,135,69,70,71,72,79,2034 1090 DATA 80,133,76,77,78,0,130,65,66, 67,68,136,69,70,71,72,1530 1100 DATA 0,131,79,80,138,76,77,78,65, 66,67,68,81,82,0,132,1339 1110 DATA 79,80,130,14,143,69,84,80,13 9,1,2,3,4,134,81,82,9926 1120 DATA 79,80,134,83,73,74,75,142,5, 6,7,8,134,76,85,14,9146 1130 DATA 143,69,84,80,139,1,2,3,4,134 ,81,82,79,80,133,12,307 1140 DATA 13,14,139,15,28,140,4,140,29 ,30,132,9,10,11,158,12,8753 1150 DATA 13,14,139,15,28,140,4,140,29 ,30,176,29,207,29,131,0,1703 1160 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0, 85,85,3795 1170 DATA 85,85,85,85,90,165,85,85,85, 85,90,165,85,85,85,85,4250 1180 DATA 90,165,85,85,85,85,90,165,85 ,85,85,85,85,85,165,90,4860 1190 DATA 85,85,85,85,85,85,85,85,165, 90,85,85,85,85,85,85,3520 1200 DATA 85,85,165,90,85,85,85,85,85, 85,85,85,165,90,85,85,4130 1210 DATA 85,85,85,86,105,149,85,85,85 ,86,105,149,85,85,86,105,4591 1220 DATA 149,85,85,85,85,85,149,105,8 6,85,85,85,85,85,85,85,3461 1230 DATA 85,149,105,86,85,85,85,85,85 ,85,85,149,105,86,85,85,4024 1240 DATA 85,85,86,89,101,149,0,60,102 ,110,118,102,60,0,0,24,9692 1250 DATA 56,24,24,24,126,0,0,60,102,1 2,24,48,126,0,0,126,8164 1260 DATA 12,24,12,102,60,0,0,12,28,60 ,108,126,12,0,0,126,7884 1270 DATA 96,124,6,102,60,0,0,60,96,12 4,102,102,60,0,0,126,66 1280 DATA 6,12,24,48,48,0,0,60,102,60, 102,102,60,0,0,60,7898 1290 DATA 102,62,6,12,56,0,0,0,0,240,2 40,0,0,0,0,0,6902 1300 DATA 0,15,15,0,0,0,86,89,101,149, 85,85,85,85,149,101,3189 1310 DATA 89,86,85,85,85,85,85,85,85,8 5,149,101,89,86,0,0,1203 1320 DATA 0,255,255,0,0,0,0,0,63,63,60 ,60,60,60,0,0,6792 1330 DATA 192,224,240,120,60,28,60,60, 60,60,63,63,0,0,28,60,8507 1340 DATA 120,240,224,192,0,0,0,0,63,6 3,60,60,63,63,0,0,7658 1350 DATA 252,252,0,0,240,240,60,60,60 ,60,63,63,0,0,0,0,8235 1360 DATA 0,0,252,252,0,0,0,1,3,7,15,3 0,60,60,0,128,7422 1370 DATA 192,224,240,120,60,60,60,60, 63,63,60,60,0,0,60,60,9207 1380 DATA 252,252,60,60,0,0,0,0,63,63, 3,3,3,3,0,0,3903 1390 DATA 252,252,192,192,192,192,3,3, 3,3,3,3,0,0,192,192,1725 1400 DATA 192,192,192,192,0,0,0,0,60,6 0,60,60,63,63,0,0,7541 1410 DATA 60,60,60,60,252,252,60,60,60 ,60,60,60,0,0,60,60,62 1420 DATA 60,60,60,60,0,0,0,0,63,63,0, 0,1,3,0,0,3272 1430 DATA 252,252,120,240,224,192,7,15 ,30,60,63,63,0,0,128,0,186 1440 DATA 0,0,252,252,0,0,0,0,15,31,60 ,60,60,60,0,0,6649 1450 DATA 240,248,60,60,60,60,60,60,60 ,60,31,15,0,0,60,60,7687 1460 DATA 60,60,248,240,0,0,0,0,60,62, 63,63,63,63,0,0,7654 1470 DATA 60,60,60,188,252,252,63,61,6 0,60,60,60,0,0,252,252,6615 1480 DATA 252,124,60,60,0,0,85,85,85,8 5,85,85,85,85,0,0,9540 1490 DATA 0,0,0,0,10,165,0,0,0,0,10,16 5,85,85,0,0,6915 1500 DATA 10,165,85,85,85,85,10,165,85 ,85,85,85,85,85,160,90,4465 1510 DATA 85,85,85,85,85,85,0,0,160,90 ,85,85,85,85,0,0,9885 1520 DATA 0,0,160,90,85,85,0,0,0,0,0,0 ,160,90,0,0,6635 1530 DATA 0,0,0,2,41,149,0,0,0,2,41,14 9,85,85,2,41,7877 1540 DATA 149,85,85,85,85,85,128,104,8 6,85,85,85,85,85,0,0,991 1550 DATA 0,128,104,86,85,85,0,0,0,0,0 ,128,104,86,0,0,7489 1560 DATA 0,0,2,9,37,149,2,9,37,149,85 ,85,85,85,128,96,2296 1570 DATA 88,86,85,85,85,85,0,0,0,0,12 8,96,88,86,128,128,2236 1580 DATA 96,96,88,88,86,86,0,0,160,90 ,86,89,101,149,10,165,3973 1590 DATA 149,101,89,86,85,85,170,255, 255,170,255,255,255,255,255,255,1367 1600 DATA 170,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,170,48 35 1610 DATA 255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,62 90 1620 DATA 255,255,126,24,30,0,0,24,60, 126,24,24,24,0,0,24,6249 1630 DATA 24,24,126,60,24,0,0,24,48,12 6,48,24,0,0,0,24,5524 1640 DATA 12,126,12,24,0,0,8,24,56,120 ,56,24,8,0,0,96,6532 1650 DATA 96,96,96,96,126,0,0,60,96,60 ,6,6,60,0,16,24,6726 1660 DATA 28,30,28,24,16,0,112,112,194 ,160,27,130,112,96,112,112,5163 1670 DATA 112,112,112,112,112,240,240, 240,212,0,28,212,128,28,212,0,8386 1680 DATA 29,84,128,29,84,0,30,212,128 ,30,68,0,18,4,132,4,9237 1690 DATA 4,65,32,35,104,24,105,1,141, 0,2,104,105,0,141,1,9502 1700 DATA 2,104,64,72,169,6,141,10,212 ,141,23,208,169,152,133,202,9957 1710 DATA 32,78,35,72,169,0,141,23,208 ,141,10,212,173,194,2,141,7494 1720 DATA 25,208,165,202,56,233,16,141 ,26,208,133,202,201,56,240,2,9612 1730 DATA 104,64,32,78,35,72,141,30,20 8,165,203,141,10,212,141,8,6992 1740 DATA 208,165,200,141,0,208,165,20 1,141,18,208,32,78,35,72,169,6862 1750 DATA 182,141,10,212,141,23,208,16 9,178,141,24,208,169,0,141,26,7243 1760 DATA 208,32,78,35,72,169,15,141,1 8,208,169,120,141,10,212,141,7963 1770 DATA 0,208,169,1,141,8,208,173,8, 208,13,11,208,41,1,13,2218 1780 DATA 12,208,41,13,133,172,104,64, 216,169,64,141,14,212,169,6,7131 1790 DATA 162,228,160,95,32,92,228,169 ,32,141,244,2,169,34,141,47,6874 1800 DATA 2,169,0,141,29,208,162,4,157 ,13,208,202,16,250,32,36,6282 1810 DATA 38,169,18,133,129,169,0,133, 128,160,0,162,13,152,145,128,6711 1820 DATA 200,208,251,230,129,202,240, 8,224,3,208,242,169,64,208,238,4969 1830 DATA 162,255,232,188,100,38,192,2 55,240,15,232,189,100,38,201,155,2519 1840 DATA 240,240,153,0,27,200,232,208 ,242,169,0,141,198,2,141,200,1119 1850 DATA 2,133,130,141,4,212,133,187, 169,17,141,251,27,32,13,39,4663 1860 DATA 169,15,141,197,2,169,54,141, 196,2,169,62,141,47,2,169,5412 1870 DATA 31,141,49,2,169,0,141,48,2,3 2,12,38,169,38,141,1,340 1880 DATA 2,169,52,141,0,2,169,192,141 ,14,212,169,128,133,213,169,865 1890 DATA 3,133,196,9,16,141,226,27,24 8,162,2,181,190,213,193,144,2204 1900 DATA 16,208,5,202,16,245,48,9,162 ,2,181,190,149,193,202,16,8787 1910 DATA 249,216,160,0,162,2,181,193, 32,19,38,153,93,27,165,163,6106 1920 DATA 153,94,27,200,200,202,16,238 ,169,0,162,2,149,190,202,16,8580 1930 DATA 251,169,8,141,31,208,173,31, 208,201,6,240,15,173,16,208,8982 1940 DATA 208,244,32,12,38,173,16,208, 240,251,208,15,32,12,38,169,6780 1950 DATA 8,141,31,208,173,31,208,201, 6,240,249,169,28,133,129,169,1366 1960 DATA 0,133,128,162,0,160,0,189,23 ,31,48,26,208,20,232,189,6575 1970 DATA 23,31,41,127,168,169,0,145,1 28,136,16,251,189,23,31,200,7844 1980 DATA 240,4,145,128,169,1,41,127,2 4,101,128,133,128,144,2,230,6949 1990 DATA 129,232,224,225,144,209,160, 47,169,86,24,153,0,18,105,1,3949 2000 DATA 153,48,18,105,1,153,96,18,10 5,1,153,144,18,105,1,153,2995 2010 DATA 192,18,136,16,227,132,197,16 9,30,133,164,169,0,133,132,169,9346 2020 DATA 1,133,198,32,208,45,198,164, 208,245,169,17,133,174,141,111,1458 2030 DATA 2,169,15,141,192,2,169,255,1 33,138,141,158,20,141,208,20,8872 2040 DATA 169,129,141,157,20,141,209,2 0,169,1,133,139,141,8,208,169,8518 2050 DATA 120,141,0,208,162,4,169,24,1 57,62,20,202,16,250,169,0,6413 2060 DATA 141,47,2,141,243,2,169,16,16 0,6,153,215,27,153,157,38,6622 2070 DATA 136,16,247,162,98,142,213,27 ,202,142,224,27,142,249,27,32,8951 2080 DATA 226,55,169,3,141,29,208,169, 16,141,7,212,169,32,141,244,9461 2090 DATA 2,169,18,141,196,2,169,12,14 1,197,2,162,38,160,218,169,9232 2100 DATA 6,32,92,228,169,35,141,1,2,1 69,93,141,0,2,169,192,5466 2110 DATA 141,14,212,169,35,141,49,2,1 69,32,141,48,2,169,63,141,4532 2120 DATA 47,2,169,112,141,19,31,169,2 55,141,252,2,32,174,54,76,6893 2130 DATA 1,53,165,20,197,20,240,252,9 6,72,41,15,9,16,133,163,4772 2140 DATA 104,74,74,74,74,41,15,9,16,9 6,169,3,141,15,210,169,4599 2150 DATA 0,162,8,157,0,210,202,16,250 ,96,72,138,72,152,72,164,8354 2160 DATA 176,166,177,169,31,133,175,1 41,10,212,140,24,208,142,25,208,9614 2170 DATA 200,232,198,175,16,241,230,1 76,198,177,169,0,141,24,208,169,2076 2180 DATA 224,141,9,212,104,168,104,17 0,104,64,1,224,225,164,165,232,2860 2190 DATA 233,172,173,240,241,180,181, 248,249,188,189,228,229,155,21,226,779 6 2200 DATA 227,166,167,234,235,174,175, 242,243,182,183,250,251,190,191,230,10 64 2210 DATA 231,155,53,34,121,0,51,14,0, 40,105,108,108,101,110,155,3919 2220 DATA 80,44,0,16,16,16,16,16,16,16 ,0,0,40,0,16,16,4188 2230 DATA 16,16,16,16,16,155,102,0,0,0 ,8,35,9,0,0,17,5011 2240 DATA 25,24,22,0,0,0,33,110,97,108 ,111,103,0,35,111,109,1799 2250 DATA 112,117,116,105,110,103,0,0, 0,155,148,225,227,229,155,255,2972 2260 DATA 169,35,141,1,2,169,93,141,0, 2,165,130,141,4,212,165,6833 2270 DATA 240,32,238,44,165,186,48,2,1 98,186,230,169,165,169,201,16,1739 2280 DATA 144,14,173,243,2,73,2,141,24 3,2,169,0,133,169,133,77,6921 2290 DATA 76,95,228,169,95,133,157,133 ,225,133,156,133,224,96,32,49,9539 2300 DATA 40,162,16,6,140,38,141,38,14 2,38,143,6,148,38,149,144,5253 2310 DATA 17,165,150,24,101,140,133,14 0,165,151,101,141,133,141,144,2,8292 2320 DATA 230,142,202,208,222,76,107,4 0,32,49,40,165,148,5,149,208,7662 2330 DATA 3,76,23,40,165,150,5,151,208 ,3,76,32,40,162,0,134,3736 2340 DATA 144,134,145,134,146,134,147, 165,150,56,229,148,133,155,165,151,260 1 2350 DATA 229,149,176,8,232,6,150,38,1 51,76,97,39,5,155,208,3,5044 2360 DATA 76,12,40,224,0,240,35,70,151 ,102,150,165,148,56,229,150,273 2370 DATA 72,165,149,229,151,72,176,4, 104,104,144,7,104,133,149,104,7343 2380 DATA 133,148,56,38,142,38,143,202 ,208,221,162,16,70,151,102,150,9694 2390 DATA 102,147,102,146,165,148,56,2 29,150,133,155,72,165,149,229,151,2944 2400 DATA 72,144,66,5,155,208,28,165,1 44,56,229,146,72,165,145,229,1729 2410 DATA 147,72,144,47,104,133,145,10 4,133,144,104,133,149,104,133,148,9619 2420 DATA 56,176,37,104,133,149,104,13 3,148,165,144,56,229,146,133,144,1264 2430 DATA 165,145,229,147,133,145,176, 8,165,148,208,2,198,149,198,148,2266 2440 DATA 56,176,5,104,104,104,104,24, 38,140,38,141,202,208,157,76,8304 2450 DATA 107,40,232,56,38,142,38,143, 202,208,249,240,242,165,150,5,3312 2460 DATA 151,208,2,230,142,96,162,128 ,160,0,165,149,69,151,48,2,6203 2470 DATA 202,136,134,143,132,142,96,1 65,149,69,151,133,154,165,149,16,9513 2480 DATA 9,166,148,32,92,40,134,148,1 33,149,165,151,16,9,166,150,7753 2490 DATA 32,92,40,134,150,133,151,169 ,0,133,140,133,141,133,142,133,9738 2500 DATA 143,96,133,153,134,152,169,0 ,56,229,152,170,169,0,229,153,1197 2510 DATA 96,165,140,16,10,230,141,208 ,6,230,142,208,2,230,143,165,1944 2520 DATA 154,16,16,160,0,56,169,0,249 ,140,0,153,140,0,200,192,8282 2530 DATA 4,208,243,96,56,233,0,133,14 8,165,149,56,233,64,133,149,402 2540 DATA 169,0,133,154,165,149,16,9,1 66,148,32,92,40,134,148,133,6801 2550 DATA 149,165,149,41,192,240,17,16 9,0,56,229,148,133,148,169,128,750 2560 DATA 229,149,133,149,169,255,133, 154,6,148,38,149,38,148,38,149,7880 2570 DATA 176,40,38,148,144,4,230,149, 240,32,166,149,189,70,41,24,7608 2580 DATA 105,1,133,142,169,0,105,0,13 3,143,165,154,16,11,165,143,6649 2590 DATA 166,142,32,92,40,134,142,133 ,143,96,169,0,133,142,133,143,8672 2600 DATA 96,169,0,133,154,166,148,165 ,149,16,5,133,154,32,92,40,5310 2610 DATA 189,70,42,72,189,70,43,170,1 04,164,154,16,3,32,92,40,3348 2620 DATA 133,143,134,142,96,166,143,2 32,224,2,176,15,202,138,69,142,359 2630 DATA 48,9,165,142,133,143,165,141 ,133,142,96,162,127,160,255,165,3538 2640 DATA 143,48,5,134,143,132,142,96, 232,200,240,247,255,255,255,255,1181 2650 DATA 255,255,255,255,255,255,255, 254,254,254,254,254,254,254,253,253,71 91 2660 DATA 253,253,253,252,252,252,252, 251,251,251,251,250,250,250,249,249,67 29 2670 DATA 249,248,248,248,247,247,247, 246,246,245,245,244,244,244,243,243,59 73 2680 DATA 242,242,241,241,240,240,239, 238,238,237,237,236,236,235,234,234,48 73 2690 DATA 233,232,232,231,230,230,229, 228,228,227,226,226,225,224,223,223,34 58 2700 DATA 222,221,220,219,219,218,217, 216,215,214,214,213,212,211,210,209,17 39 2710 DATA 208,207,206,206,205,204,203, 202,201,200,199,198,197,196,195,194,97 68 2720 DATA 193,192,191,190,189,188,187, 185,184,183,182,181,180,179,178,177,75 00 2730 DATA 176,174,173,172,171,170,169, 167,166,165,164,163,161,160,159,158,50 05 2740 DATA 156,155,154,153,151,150,149, 148,146,145,144,143,141,140,139,137,22 96 2750 DATA 136,135,133,132,131,129,128, 127,125,124,122,121,120,118,117,116,94 06 2760 DATA 114,113,111,110,108,107,106, 104,103,101,100,98,97,96,94,93,6345 2770 DATA 91,90,88,87,85,84,82,81,79,7 8,76,75,73,72,70,69,3142 2780 DATA 67,66,64,63,61,60,58,57,55,5 4,52,50,49,47,46,44,9846 2790 DATA 43,41,40,38,37,35,33,32,30,2 9,27,26,24,23,21,19,6491 2800 DATA 18,16,15,13,12,10,8,7,5,4,2, 1,0,0,0,0,3298 2810 DATA 0,0,0,1,1,1,1,1,1,2,2,2,2,2, 2,3,3047 2820 DATA 3,3,3,3,3,3,4,4,4,4,4,4,5,5, 5,5,3401 2830 DATA 5,5,6,6,6,6,6,6,6,7,7,7,7,7, 7,8,3750 2840 DATA 8,8,8,8,8,8,9,9,9,9,9,9,9,10 ,10,10,4088 2850 DATA 10,10,10,11,11,11,11,11,11,1 1,12,12,12,12,12,12,4421 2860 DATA 12,13,13,13,13,13,13,13,14,1 4,14,14,14,14,14,15,4743 2870 DATA 15,15,15,15,15,15,15,16,16,1 6,16,16,16,16,17,17,5049 2880 DATA 17,17,17,17,17,17,18,18,18,1 8,18,18,18,19,19,19,5352 2890 DATA 19,19,19,19,19,20,20,20,20,2 0,20,20,20,20,21,21,5626 2900 DATA 21,21,21,21,21,21,22,22,22,2 2,22,22,22,22,22,23,5887 2910 DATA 23,23,23,23,23,23,23,23,24,2 4,24,24,24,24,24,24,6138 2920 DATA 24,25,25,25,25,25,25,25,25,2 5,26,26,26,26,26,26,6400 2930 DATA 26,26,26,26,27,27,27,27,27,2 7,27,27,27,27,27,28,6608 2940 DATA 28,28,28,28,28,28,28,28,28,2 9,29,29,29,29,29,29,6839 2950 DATA 29,29,29,29,29,30,30,30,30,3 0,30,30,30,30,30,30,7015 2960 DATA 31,31,31,31,31,31,31,31,31,3 1,31,31,0,41,81,122,9119 2970 DATA 163,204,244,29,70,111,151,19 2,233,17,58,98,139,180,220,5,9786 2980 DATA 45,86,126,167,207,247,32,72, 112,153,193,233,17,57,97,137,9683 2990 DATA 177,217,1,41,81,120,160,200, 239,23,62,102,141,181,220,3,9615 3000 DATA 42,81,120,159,198,237,20,59, 97,136,174,213,251,34,72,110,506 3010 DATA 148,186,224,6,44,81,119,157, 194,231,13,50,87,124,161,198,270 3020 DATA 235,16,52,89,125,162,198,234 ,15,51,86,122,158,194,229,9,58 3030 DATA 44,80,115,150,185,220,255,33 ,68,103,137,171,206,240,18,52,814 3040 DATA 86,119,153,187,220,253,31,64 ,97,130,163,195,228,5,37,69,8917 3050 DATA 102,134,166,198,230,5,37,68, 100,131,162,193,224,255,30,61,909 3060 DATA 91,122,152,183,213,243,17,47 ,76,106,136,165,194,224,253,26,2690 3070 DATA 55,84,112,141,170,198,226,25 4,27,55,83,110,138,166,193,221,3420 3080 DATA 248,19,46,73,100,127,154,180 ,207,233,4,30,56,82,108,134,7813 3090 DATA 159,185,211,236,5,31,56,81,1 06,131,156,180,205,229,254,22,2620 3100 DATA 46,70,94,118,142,166,190,213 ,237,4,27,51,74,97,120,142,8254 3110 DATA 165,188,211,233,255,22,44,66 ,88,110,132,154,176,197,219,240,4822 3120 DATA 6,27,48,69,90,111,132,153,17 4,195,215,236,169,1,133,226,3399 3130 DATA 173,0,211,201,255,208,4,169, 0,240,54,41,8,208,3,32,5702 3140 DATA 175,44,173,0,211,41,4,208,3, 32,143,44,173,0,211,41,5433 3150 DATA 2,208,8,32,15,45,198,226,32, 168,45,173,0,211,41,1,5383 3160 DATA 208,8,32,3,45,230,226,32,168 ,45,169,80,141,2,210,169,9431 3170 DATA 34,141,3,210,96,166,130,224, 3,208,12,162,255,172,51,35,9744 3180 DATA 208,2,160,80,136,132,240,232 ,134,130,230,200,230,200,169,0,4961 3190 DATA 162,128,76,207,44,166,130,20 8,14,162,4,172,51,35,192,79,7605 3200 DATA 208,2,160,255,200,132,240,20 2,134,130,198,200,198,200,169,0,4993 3210 DATA 162,128,32,92,40,133,163,36, 186,16,24,138,24,101,158,133,6497 3220 DATA 158,165,159,101,163,133,159, 138,24,101,222,133,222,165,223,101,384 0 3230 DATA 163,133,223,96,141,51,35,141 ,57,35,141,63,35,73,128,141,5919 3240 DATA 54,35,141,60,35,141,66,35,96 ,169,1,32,208,45,32,143,4841 3250 DATA 45,169,0,240,10,169,255,32,2 08,45,32,143,45,169,128,133,9087 3260 DATA 160,36,186,16,227,165,220,13 3,148,165,221,133,149,32,154,40,1187 3270 DATA 32,185,45,165,143,166,142,36 ,160,48,3,32,92,40,133,163,6156 3280 DATA 138,24,101,218,133,218,165,1 63,101,219,133,219,165,220,133,148,585 1 3290 DATA 165,221,133,149,32,147,40,32 ,185,45,165,218,133,150,165,219,2824 3300 DATA 133,151,165,142,133,148,165, 143,133,149,32,66,39,32,31,41,4557 3310 DATA 165,142,133,148,165,143,133, 149,32,251,40,166,142,165,143,36,663 3320 DATA 160,16,3,32,92,40,133,163,13 8,24,101,220,133,220,165,221,2637 3330 DATA 101,163,133,221,96,169,0,133 ,182,169,1,133,183,165,156,133,1690 3340 DATA 218,165,157,133,219,165,158, 133,220,165,159,133,221,96,165,220,633 3 3350 DATA 133,158,165,221,133,159,165, 218,133,156,165,219,133,157,96,165,490 3 3360 DATA 142,133,148,165,143,133,149, 165,182,133,150,165,183,133,151,32,236 4 3370 DATA 24,39,32,31,41,96,133,131,19 7,198,240,12,133,198,165,197,3117 3380 DATA 73,85,133,197,169,0,133,131, 165,132,24,101,131,48,14,201,7716 3390 DATA 20,144,18,165,197,73,85,133, 197,169,0,240,8,165,197,73,374 3400 DATA 85,133,197,169,19,133,132,17 0,165,197,157,202,34,73,85,168,1228 3410 DATA 138,74,170,152,157,192,34,13 8,74,170,152,157,180,34,162,0,9261 3420 DATA 165,132,201,3,144,5,233,3,23 2,208,247,165,197,157,185,34,3812 3430 DATA 162,0,165,132,201,5,144,5,23 3,5,232,208,247,165,197,157,4881 3440 DATA 176,34,96,198,139,208,16,169 ,2,133,139,165,138,16,25,173,8189 3450 DATA 16,208,240,4,32,170,46,96,16 9,15,133,138,169,3,133,203,9160 3460 DATA 169,112,133,200,169,16,133,1 37,32,170,46,165,138,170,74,24,8162 3470 DATA 169,15,133,201,224,14,208,11 ,169,1,133,203,165,200,24,105,35 3480 DATA 8,133,200,224,12,208,11,169, 0,133,203,165,200,24,105,4,8105 3490 DATA 133,200,169,2,141,6,210,164, 137,240,2,136,136,132,137,140,1259 3500 DATA 7,210,169,20,133,129,169,0,1 33,128,32,183,46,198,138,96,9137 3510 DATA 169,0,160,159,153,0,20,200,1 92,208,144,248,96,169,1,133,1425 3520 DATA 134,224,12,144,23,240,19,138 ,56,233,13,170,188,248,46,189,2153 3530 DATA 251,46,133,134,189,254,46,17 0,208,10,162,15,138,74,73,255,898 3540 DATA 24,105,184,168,134,164,189,2 2,50,170,165,134,133,136,189,142,2464 3550 DATA 49,145,128,200,198,136,208,2 49,232,198,164,16,237,96,172,168,6084 3560 DATA 159,2,2,4,11,15,11,165,157,4 8,33,201,96,144,12,165,6039 3570 DATA 159,73,128,133,159,169,95,13 3,157,133,156,165,157,201,2,144,1957 3580 DATA 11,165,225,48,16,201,2,144,1 2,76,180,47,169,2,133,156,7368 3590 DATA 133,157,32,180,47,169,0,133, 229,32,135,52,133,137,141,7,7530 3600 DATA 210,32,246,52,169,255,133,13 8,32,170,46,32,36,38,162,38,6146 3610 DATA 165,20,133,163,160,4,173,10, 210,153,22,208,192,4,208,1,8827 3620 DATA 136,136,16,242,173,10,210,14 1,18,208,173,10,210,141,25,208,1239 3630 DATA 141,20,208,141,21,208,173,10 ,210,141,19,208,9,16,141,1,6120 3640 DATA 210,165,20,197,163,240,205,2 02,16,198,32,13,39,198,196,208,2513 3650 DATA 5,104,104,76,226,35,206,226, 27,32,36,38,32,163,47,165,6527 3660 DATA 238,208,3,32,226,55,76,174,5 4,169,0,162,223,202,157,0,37 3670 DATA 21,157,0,22,157,0,23,208,244 ,96,32,163,47,166,157,224,1041 3680 DATA 2,144,13,165,156,16,1,232,22 4,64,144,5,169,0,133,217,9372 3690 DATA 96,189,62,49,133,217,170,224 ,16,176,46,165,165,56,253,126,2625 3700 DATA 49,141,2,208,169,0,141,10,20 8,134,164,138,74,133,163,169,1426 3710 DATA 183,56,229,163,56,229,208,16 8,189,22,50,170,189,142,49,153,1937 3720 DATA 0,22,200,232,198,164,16,244, 96,224,22,176,99,138,56,233,2575 3730 DATA 16,170,134,168,165,165,56,25 3,38,50,141,2,208,24,105,8,6551 3740 DATA 141,3,208,169,0,141,10,208,1 41,11,208,189,50,50,56,229,9556 3750 DATA 208,168,189,44,50,133,166,18 9,201,50,170,189,56,50,240,28,682 3760 DATA 153,0,23,134,163,162,0,134,1 67,166,166,74,38,167,202,16,9372 3770 DATA 250,166,163,165,167,153,0,22 ,200,232,208,223,166,168,165,165,6139 3780 DATA 56,253,186,51,72,188,180,51, 189,192,51,170,104,76,18,49,7952 3790 DATA 138,56,233,22,170,134,168,18 9,207,50,141,11,208,189,215,50,2590 3800 DATA 141,12,208,189,211,50,141,10 ,208,165,165,56,253,223,50,141,3193 3810 DATA 7,208,24,125,219,50,141,6,20 8,125,219,50,141,5,208,125,389 3820 DATA 219,50,141,4,208,125,227,50, 141,2,208,125,231,50,141,3,9300 3830 DATA 208,188,164,51,189,235,50,56 ,229,208,170,185,239,50,240,31,4397 3840 DATA 133,164,185,240,50,157,0,19, 185,241,50,157,0,22,185,242,624 3850 DATA 50,157,0,23,232,198,164,208, 233,200,200,200,200,208,220,136,9151 3860 DATA 136,136,136,185,239,50,240,3 1,133,164,185,240,50,157,0,19,9743 3870 DATA 185,241,50,157,0,22,185,242, 50,157,0,23,232,224,223,240,4311 3880 DATA 6,198,164,208,229,240,216,16 6,168,188,168,51,165,165,24,125,3698 3890 DATA 172,51,72,189,176,51,170,104 ,141,1,208,173,194,2,24,105,8577 3900 DATA 2,141,19,208,141,193,2,134,1 64,152,56,229,208,168,169,0,1973 3910 DATA 141,9,208,189,22,50,170,189, 142,49,153,0,21,200,232,198,1733 3920 DATA 164,16,244,96,0,0,25,24,23,2 2,21,20,19,18,17,16,7507 3930 DATA 15,14,13,12,11,10,10,9,9,8,8 ,7,7,7,6,6,5025 3940 DATA 6,6,5,5,5,5,5,4,4,4,4,4,3,3, 3,3,4457 3950 DATA 3,2,2,2,2,2,2,1,1,1,1,1,1,0, 0,0,4070 3960 DATA 0,0,0,0,5,5,4,4,5,5,4,4,5,5, 4,4,4521 3970 DATA 5,5,4,4,8,8,8,24,24,24,24,24 ,24,24,8,28,6573 3980 DATA 28,28,8,8,28,28,28,28,8,24,2 4,60,60,60,24,24,8508 3990 DATA 24,24,60,60,60,60,24,24,8,28 ,28,62,62,62,28,28,9448 4000 DATA 8,8,28,28,62,62,62,62,28,28, 8,24,60,60,126,126,2266 4010 DATA 126,126,126,60,60,24,24,60,6 0,126,126,126,126,126,126,60,7048 4020 DATA 60,24,28,62,62,127,127,127,1 27,127,127,127,62,62,28,28,5313 4030 DATA 62,62,127,127,127,127,127,12 7,127,127,62,62,28,24,60,126,5862 4040 DATA 126,255,255,255,255,255,255, 255,126,126,60,24,24,60,126,126,1491 4050 DATA 126,255,255,255,255,255,255, 126,126,126,60,24,0,1,3,6,5566 4060 DATA 10,15,21,28,36,45,55,66,78,9 1,105,120,9,8,9,8,337 4070 DATA 8,8,6,7,6,7,7,7,175,174,173, 171,170,167,192,224,2599 4080 DATA 224,240,240,240,248,248,248, 248,248,240,240,240,224,224,192,0,1992 4090 DATA 192,224,224,240,240,240,248, 248,248,248,248,248,248,240,240,240,71 62 4100 DATA 224,224,192,0,128,224,240,24 0,248,248,248,252,252,252,252,252,6012 4110 DATA 252,252,248,248,248,240,240, 224,128,0,128,224,224,240,240,248,1842 4120 DATA 248,248,252,252,252,252,252, 252,252,252,248,248,248,240,240,224,74 40 4130 DATA 224,128,0,128,224,240,248,24 8,252,252,252,254,254,254,254,254,6742 4140 DATA 254,254,254,254,254,254,252, 252,252,248,248,240,224,128,0,128,362 4150 DATA 240,248,248,252,252,254,254, 254,254,255,255,255,255,255,255,255,87 23 4160 DATA 255,255,255,255,255,254,254, 254,254,252,252,248,248,240,128,0,2377 4170 DATA 18,38,60,85,113,0,0,0,1,0,0, 1,1,0,0,0,5383 4180 DATA 85,2,2,2,4,13,12,16,24,2,2,2 ,4,8,8,16,5415 4190 DATA 16,165,160,152,136,0,0,0,0,1 ,0,62,0,1,0,127,9104 4200 DATA 0,1,0,255,128,1,1,255,192,2, 3,255,224,3,7,255,9895 4210 DATA 240,4,15,255,248,6,31,255,25 2,0,0,0,0,1,0,126,3354 4220 DATA 0,1,0,255,0,1,1,255,128,1,3, 255,192,1,7,255,8245 4230 DATA 224,2,15,255,240,2,31,255,24 8,3,63,255,252,5,127,255,4338 4240 DATA 254,7,255,255,255,0,0,0,0,1, 0,24,0,1,0,60,8840 4250 DATA 0,2,0,126,0,1,0,255,0,1,1,25 5,128,2,3,255,5702 4260 DATA 192,2,7,255,224,3,15,255,240 ,3,31,255,248,3,63,255,2662 4270 DATA 252,6,127,255,254,7,255,255, 255,0,0,0,0,1,0,60,4341 4280 DATA 0,1,0,126,0,2,0,255,0,2,1,25 5,128,2,3,255,5746 4290 DATA 192,3,7,255,224,3,15,255,240 ,4,31,255,248,5,63,255,2732 4300 DATA 252,10,127,255,254,15,255,25 5,255,0,4,40,84,136,171,167,2210 4310 DATA 160,151,255,0,1,2,9,11,13,15 ,179,178,177,176,175,173,235 4320 DATA 3,3,3,3,2,1,2,3,4,5,6,7,169, 97,56,229,2699 4330 DATA 157,133,163,41,7,170,165,163 ,74,74,74,168,189,217,52,141,1687 4340 DATA 219,32,141,220,32,189,226,52 ,141,211,32,141,212,32,132,171,2561 4350 DATA 162,23,169,31,153,184,27,157 ,160,27,202,136,16,246,164,171,2915 4360 DATA 169,27,157,161,27,169,26,153 ,184,27,169,0,153,185,27,157,9534 4370 DATA 160,27,202,200,192,15,144,24 4,165,159,24,105,32,42,42,42,6905 4380 DATA 41,3,170,208,19,165,159,24,1 05,32,201,54,144,4,162,1,6657 4390 DATA 208,6,201,12,176,2,162,3,188 ,235,52,185,243,52,160,3,480 4400 DATA 153,164,27,136,16,250,188,23 9,52,185,243,52,160,3,153,200,3546 4410 DATA 27,136,16,250,166,157,165,15 6,16,1,232,224,6,144,58,162,882 4420 DATA 0,32,152,52,74,102,150,133,1 51,32,24,39,32,31,41,169,4824 4430 DATA 127,24,101,143,133,241,162,1 ,32,152,52,133,151,32,24,39,6104 4440 DATA 32,31,41,169,64,56,229,143,1 33,174,96,169,3,164,174,153,2150 4450 DATA 255,18,153,0,19,153,1,19,96, 169,0,133,174,96,165,159,9147 4460 DATA 133,149,165,158,133,148,224, 1,240,6,32,147,40,76,173,52,8494 4470 DATA 32,154,40,165,142,133,148,16 5,143,133,149,165,156,133,150,165,4470 4480 DATA 157,74,102,150,74,102,150,96 ,24,105,32,201,64,176,13,133,8140 4490 DATA 149,165,158,162,6,70,149,106 ,202,208,250,96,169,0,96,0,9869 4500 DATA 1,3,7,15,31,63,127,255,0,128 ,192,224,240,248,252,254,8566 4510 DATA 255,1,1,0,0,1,2,2,1,224,0,22 7,162,47,169,0,5078 4520 DATA 157,160,27,202,16,250,96,32, 12,38,169,0,162,223,202,157,1511 4530 DATA 0,19,208,250,141,12,208,165, 186,16,12,165,174,240,8,165,2073 4540 DATA 241,141,4,208,32,133,52,32,1 ,47,32,94,53,32,61,46,2232 4550 DATA 32,70,44,165,186,16,30,32,15 7,54,32,102,53,32,198,51,5458 4560 DATA 173,252,2,201,33,208,14,164, 19,32,36,38,173,0,211,201,8843 4570 DATA 255,240,249,132,19,169,255,1 41,252,2,173,31,208,201,7,240,4628 4580 DATA 166,76,226,35,165,159,32,194 ,52,133,165,96,165,172,240,27,2621 4590 DATA 165,138,73,15,133,163,165,15 7,74,74,56,229,163,24,105,2,8196 4600 DATA 201,2,144,12,16,5,173,194,2, 208,2,169,15,133,201,96,8914 4610 DATA 230,237,169,0,32,135,52,32,3 6,38,32,246,52,133,137,133,8140 4620 DATA 234,169,255,133,138,32,170,4 6,169,30,133,239,173,194,2,133,2204 4630 DATA 199,32,180,47,32,94,53,169,1 35,56,229,208,168,185,0,19,9936 4640 DATA 45,10,210,153,0,19,185,0,21, 45,10,210,153,0,21,185,5889 4650 DATA 0,22,45,10,210,153,0,22,185, 0,23,45,10,210,153,0,4836 4660 DATA 23,200,192,223,144,215,165,2 39,74,170,133,163,144,4,169,0,1876 4670 DATA 240,6,165,199,41,240,5,163,1 60,2,153,193,2,153,19,208,437 4680 DATA 136,16,247,138,9,128,141,1,2 10,138,74,9,128,141,5,210,9214 4690 DATA 169,128,141,0,210,141,4,210, 32,70,44,165,157,201,2,176,295 4700 DATA 6,169,2,133,157,133,156,198, 239,240,6,32,12,38,76,171,9406 4710 DATA 53,32,36,38,32,13,39,165,238 ,208,29,32,226,55,165,187,1018 4720 DATA 201,5,144,10,169,6,141,19,31 ,104,104,76,226,35,230,187,668 4730 DATA 238,251,27,230,196,238,226,2 7,248,173,10,210,41,112,240,248,6938 4740 DATA 24,101,190,133,190,165,191,1 01,187,133,191,165,192,105,0,133,3341 4750 DATA 192,216,162,2,160,0,181,190, 32,19,38,153,215,27,153,157,167 4760 DATA 38,200,165,163,153,215,27,15 3,157,38,200,202,16,232,76,174,3610 4770 DATA 54,173,10,210,41,240,201,176 ,240,247,9,6,141,194,2,141,2136 4780 DATA 195,2,96,165,238,208,3,76,22 0,56,201,1,208,3,76,57,8555 4790 DATA 57,76,21,55,169,45,133,186,1 65,237,197,236,144,3,76,199,3908 4800 DATA 55,173,10,210,197,213,176,3, 76,237,55,165,213,24,105,10,69 4810 DATA 133,213,169,0,133,180,133,18 1,164,187,173,10,210,41,3,201,1934 4820 DATA 3,240,247,133,188,201,2,240, 17,169,1,190,169,55,44,10,8577 4830 DATA 210,48,3,32,92,40,133,181,13 4,180,32,139,54,165,188,208,2538 4840 DATA 4,192,2,176,8,173,10,210,41, 31,56,233,15,133,159,32,7811 4850 DATA 13,39,169,0,133,158,169,2,13 3,238,96,164,187,165,156,56,2838 4860 DATA 249,163,55,133,156,165,157,2 33,1,133,157,165,188,240,67,165,5360 4870 DATA 159,16,3,32,157,55,217,175,5 5,144,31,165,188,201,1,240,2601 4880 DATA 9,190,187,55,185,193,55,76,7 3,55,190,169,55,169,1,36,8123 4890 DATA 159,48,3,32,92,40,134,180,13 3,181,165,188,201,2,208,18,1487 4900 DATA 165,159,16,3,32,157,55,217,1 81,55,176,6,169,0,133,180,9925 4910 DATA 133,181,165,158,24,101,180,1 33,158,165,159,101,181,133,159,169,491 9 4920 DATA 4,141,8,210,169,96,24,101,15 7,141,0,210,56,233,1,141,71 4930 DATA 4,210,169,96,56,229,157,74,7 4,74,9,160,141,1,210,141,268 4940 DATA 5,210,96,73,255,24,105,1,96, 40,56,72,80,104,112,0,5027 4950 DATA 0,32,64,64,64,8,12,16,16,16, 16,4,6,8,12,15,7180 4960 DATA 15,128,192,216,0,128,0,0,0,1 ,1,2,2,32,237,55,2393 4970 DATA 185,220,55,133,189,169,255,1 33,231,133,159,133,235,169,0,133,5403 4980 DATA 238,96,6,5,4,3,3,3,169,12,13 3,236,169,0,133,237,9451 4990 DATA 133,208,96,32,139,54,164,187 ,173,10,210,41,15,24,121,178,9271 5000 DATA 56,133,189,169,0,133,19,133, 156,133,158,169,75,133,157,173,3020 5010 DATA 10,210,133,159,32,39,56,32,7 4,56,32,127,56,169,1,133,5856 5020 DATA 238,169,3,133,228,165,213,56 ,233,10,133,213,96,173,10,210,3602 5030 DATA 41,128,133,210,164,187,173,1 0,210,57,190,56,217,196,56,176,4242 5040 DATA 245,133,180,169,0,133,181,17 3,10,210,57,184,56,133,211,96,2532 5050 DATA 173,10,210,41,128,133,209,16 4,187,173,10,210,57,214,56,133,2998 5060 DATA 179,173,10,210,57,184,56,133 ,212,192,4,144,10,165,238,240,4750 5070 DATA 6,169,0,133,179,160,3,173,10 ,210,57,202,56,217,208,56,2229 5080 DATA 176,245,133,178,96,164,187,1 73,10,210,57,153,56,24,105,1,8322 5090 DATA 133,230,185,159,56,133,231,3 2,165,56,169,0,133,229,96,255,4184 5100 DATA 127,255,127,63,31,1,1,0,0,0, 0,169,0,162,143,157,5491 5110 DATA 0,21,232,224,223,144,248,96, 15,13,11,9,7,6,255,255,9801 5120 DATA 127,127,127,127,63,127,127,2 55,255,255,64,96,128,160,192,255,7961 5130 DATA 127,127,255,255,63,63,96,128 ,192,255,32,64,0,0,0,0,5083 5140 DATA 1,1,165,169,208,9,173,194,2, 24,105,16,32,150,54,164,7726 5150 DATA 217,185,77,59,133,149,169,0, 133,148,133,151,230,235,165,235,7413 5160 DATA 201,50,144,4,169,0,133,235,2 01,25,144,4,169,49,229,235,3334 5170 DATA 170,189,103,59,141,0,210,56, 233,4,141,4,210,169,96,141,1414 5180 DATA 8,210,165,217,74,24,105,2,9, 32,141,1,210,141,5,210,8339 5190 DATA 189,52,59,133,150,32,24,39,3 2,31,41,165,143,133,208,164,108 5200 DATA 187,165,229,208,32,165,19,19 7,189,144,26,169,255,133,230,165,6817 5210 DATA 156,56,249,163,55,133,156,16 5,157,233,1,133,157,165,238,240,7473 5220 DATA 3,32,121,55,96,198,211,208,1 5,165,238,208,8,165,235,240,7357 5230 DATA 4,230,211,208,3,32,39,56,165 ,159,16,3,32,157,55,217,8285 5240 DATA 6,59,144,8,165,159,41,128,73 ,128,133,210,198,212,208,15,3740 5250 DATA 165,238,208,8,165,235,240,4, 230,212,208,3,32,74,56,165,1940 5260 DATA 157,197,228,176,4,169,0,240, 7,217,12,59,144,4,169,128,9737 5270 DATA 133,209,198,230,208,6,165,23 1,240,9,198,231,169,3,133,228,6496 5280 DATA 76,152,58,230,230,165,229,20 8,32,169,15,133,228,133,234,197,7388 5290 DATA 157,176,237,165,157,133,225, 165,156,133,224,165,158,133,222,165,87 12 5300 DATA 159,133,223,133,232,169,40,1 33,229,198,229,208,9,32,165,56,3436 5310 DATA 32,127,56,76,152,58,165,234, 240,4,198,234,9,128,141,5,1493 5320 DATA 210,169,10,141,4,210,166,226 ,224,1,240,11,165,232,24,105,2943 5330 DATA 64,16,4,138,73,2,170,134,183 ,169,64,133,182,165,224,133,4430 5340 DATA 218,165,225,133,219,165,222, 133,220,165,223,133,221,165,232,24,852 4 5350 DATA 105,64,41,128,32,25,45,165,2 18,133,224,165,219,133,225,165,6623 5360 DATA 220,133,222,165,221,133,223, 32,194,52,133,233,165,225,16,4,3016 5370 DATA 169,1,133,225,201,96,144,13, 32,165,56,169,0,133,229,32,9924 5380 DATA 127,56,76,152,58,201,64,176, 53,74,74,32,157,55,24,105,7073 5390 DATA 15,170,160,2,217,43,59,176,3 ,136,16,248,165,233,56,249,4167 5400 DATA 46,59,141,1,208,185,49,59,14 1,9,208,169,15,141,193,2,9727 5410 DATA 141,19,208,169,21,133,129,16 9,0,133,128,32,183,46,165,209,2011 5420 DATA 240,16,165,156,56,229,178,13 3,156,165,157,229,179,133,157,76,6064 5430 DATA 185,58,165,156,24,101,178,13 3,156,165,157,101,179,133,157,165,5063 5440 DATA 210,240,16,165,158,56,229,18 0,133,158,165,159,229,181,133,159,7557 5450 DATA 76,218,58,165,158,24,101,180 ,133,158,165,159,101,181,133,159,4763 5460 DATA 165,238,240,39,198,216,16,35 ,166,215,165,217,74,9,96,141,2502 5470 DATA 1,210,169,64,141,8,210,189,1 8,59,141,0,210,189,30,59,9462 5480 DATA 133,216,232,224,12,144,2,162 ,0,134,215,96,24,32,40,48,6856 5490 DATA 64,96,70,75,80,85,90,95,150, 130,135,150,145,160,130,135,2726 5500 DATA 150,130,140,145,3,2,3,4,3,4, 5,4,2,3,4,2,7320 5510 DATA 0,0,13,15,4,8,16,0,1,3,0,56, 72,89,102,114,2036 5520 DATA 125,135,145,154,162,170,177, 185,191,198,205,211,217,223,229,235,31 39 5530 DATA 240,246,251,3,4,8,10,12,14,1 6,20,26,30,33,36,39,95 5540 DATA 42,45,48,51,57,60,66,72,78,8 5,100,120,110,240,232,224,3649 5550 DATA 216,208,200,192,184,176,168, 160,152,144,136,128,120,112,108,104,42 34 5560 DATA 100,96,94,92,92,92,0,224,2,2 25,2,226,35,0,0,0,4763
10 REM *** DEATHZONE *** 20 REM CASSETTE MAKER PROGRAM 40 DIM DAT(16):LINE=990:RESTORE 1000:TRAP 120:? "CHECKING DATA" 50 LINE=LINE+10:? "LINE:";LINE:FOR X=1 TO 16:READ DAT:IF DAT<0 OR DAT>255 TH EN 220 60 DAT(X)=DAT:NEXT X:DATLIN=PEEK(183)+ PEEK(184)*256:IF DATLIN<>LINE THEN ? " LINE ";LINE;" MISSING!":END 70 TOTAL=LINE:FOR K=1 TO 16 80 IF PASS=2 THEN PUT #1,DAT(X):NEXT X :READ CHKSUM:GOTO 50 90 TOTAL=TOTAL+DAT(X)*X:IF TOTAL>9999 THEN TOTAL=TOTAL−10000 100 NEXT X:READ CHKSUM:IF TOTAL=CHKSUM THEN 50 110 GOTO 220 120 IF PEEK(195)<>6 THEN 226 130 IF PASS=0 THEN 200 160 FOR X=1 TO 128:PUT #1,0:NEXT X:CLO SE #1:END 200 ? "READY CASSETTE AND PRESS RETURN ";:OPEN #1,8,128,"C:":RESTORE 230:FOR X=1 TO 40:READ N:PUT #1,N:NEXT X 210 ? :? "WRITING FILE":PASS=2:LINE=99 0:RESTORE 1000:TRAP 120:GOTO 50 220 ? "BAD DATA: LINE ";LINE:END 230 DATA 0,58,210,30,249,30,169,0,234, 234,234,169,60,141,2,211,169,0,141,231 ,2,133,14,169,64,141,232,2 240 DATA 133,15,169,226,133,10,169,35, 133,11,24,96
;Deathzone
;
.LI OFF
;
PMAREA .EQ $1000
CHAR.SET .EQ $2000
.OR $80
;
;Equates.
;
RTCLOCK .EQ $12
ATRACT .EQ $4D
;
VDSLST .EQ $200
SDMCTL .EQ $22F
SDLSTL .EQ $230
GPRIOR .EQ $26F
PCOLOR0 .EQ $2C0
PCOLOR1 .EQ $2C1
PCOLOR2 .EQ $2C2
PCOLOR3 .EQ $2C3
COLOR0 .EQ $2C4
COLOR1 .EQ $2C5
COLOR2 .EQ $2C6
COLOR3 .EQ $2C7
COLOR4 .EQ $2C8
CHACT .EQ $2F3
CHBAS .EQ $2F4
CH .EQ $2FC
;
GTIA .EQ $D000
HPOSP0 .EQ GTIA+0
HPOSP1 .EQ GTIA+1
HPOSP2 .EQ GTIA+2
HPOSP3 .EQ GTIA+3
HPOSM0 .EQ GTIA+4
HPOSM1 .EQ GTIA+5
HPOSM2 .EQ GTIA+6
HPOSM3 .EQ GTIA+7
SIZEP0 .EQ GTIA+8
M0PL .EQ GTIA+8
SIZEP1 .EQ GTIA+9
M1PL .EQ GTIA+9
SIZEP2 .EQ GTIA+$A
M2PL .EQ GTIA+$A
SIZEP3 .EQ GTIA+$B
M3PL .EQ GTIA+$B
SIZEM .EQ GTIA+$C
P0PL .EQ GTIA+$C
TRIG0 .EQ GTIA+$10
COLPM0 .EQ GTIA+$12
COLPM1 .EQ GTIA+$13
COLPM2 .EQ GTIA+$14
COLPM3 .EQ GTIA+$15
COLPF0 .EQ GTIA+$16
COLPF1 .EQ GTIA+$17
COLPH2 .EQ GTIA+$18
COLPH3 .EQ GTIA+$19
COLBK .EQ GTIA+$1A
PRIOR .EQ GTIA+$1B
GRACTL .EQ GTIA+$1D
HITCLR .EQ GTIA+$1E
CONSOL .EQ GTIA+$1F
;
POKEY .EQ $D200
AUDF1 .EQ POKEY+0
AUDC1 .EQ POKEY+1
AUDF2 .EQ POKEY+2
AUDC2 .EQ POKEY+3
AUDF3 .EQ POKEY+4
AUDC3 .EQ POKEY+5
AUDF4 .EQ POKEY+6
AUDC4 .EQ POKEY+7
AUDCTL .EQ POKEY+8
RANDOM .EQ POKEY+$A
IRQEN .EQ POKEY+$E
SKCTL .EQ POKEY+$F
;
PIA .EQ $D300
PORTA .EQ PIA+0
;
ANTIC .EQ $D400
DMACTL .EQ ANTIC+0
HSCROL .EQ ANTIC+4
PMBASE .EQ ANTIC+7
CHBASE .EQ ANTIC+9
WSYNC .EQ ANTIC+$A
NMIEN .EQ ANTIC+$E
;
CIOV .EQ $E456
SETVBV .EQ $E45C
SYSVBV .EQ $E45F
XITVBV .EQ $E462
COLDSV .EQ $E477
;
;
;Working Variables.
;
TO .BS 2
S.HSCROL .BS 1
INTS.DIR .BS 1
INTS.POS .BS 1
INTS.DEL .BS 1
REPEAT .BS 1
ITEMS .BS 1
S.REPEAT .BS 1
FIREC1 .BS 1
BULLET .BS 1
DLY .BS 1
RESLO .BS 2
RESHI .BS 2
TEMP1 .BS 2
TEMP2 .BS 2
MATH1 .BS 2
MATH2 .BS 2
MTEMP .BS 2
MSIGN .BS 1
HOLD .BS 1
R .BS 2
THETA .BS 2
FBFLAG .BS 1
SINETHETA .BS 2
TEMP .BS 1
COUNT .BS 1
XPOS .BS 1
SHRPT .BS 1
BYTE .BS 1
XSTORE .BS 1
VBCOUNT .BS 1
DLI2COUNT .BS 1
YTEMP .BS 1
S.PPL .BS 1
TIME .BS 1
YSCAN .BS 1
TCOUNT .BS 1
COLUP .BS 1
COLDOWN .BS 1
EN.D.R .BS 2
EN.D.T .BS 2
DELTAR .BS 2
TEMPR .BS 2
TIMER .BS 1
LEVEL .BS 1
ENFLAG .BS 1
E.TIME .BS 1
SCORE .BS 3
HISCORE .BS 3
LIVES .BS 1
COLOUR .BS 1
LAST.DIR .BS 1
PCOL .BS 1
P0.POS .BS 1
PCOL.DLI .BS 1
SUNSET .BS 1
PSIZ.DLI .BS 1
EXPLFG .BS 1
EX.COUNT .BS 1
EXP.RPT .BS 1
Y.HOLD .BS 1
JUMP .BS 1
R.DIR .BS 1
T.DIR .BS 1
T.TIME .BS 1
R.TIME .BS 1
PROB .BS 1
RTSAVE .BS 1
SNDPTR .BS 1
S.DELAY .BS 1
SPHKIND .BS 1
WORK.R .BS 2
WORK.THETA .BS 2
EB.THETA .BS 2
EB.R .BS 2
EB.D.R .BS 1
EB.D.T .BS 1
MINR .BS 1
SETFLAG .BS 1
F.TIME .BS 2
DIR .BS 1
EB.XPOS .BS 1
FIREC2 .BS 1
BOUNCE .BS 1
NECC .BS 1
DEAD .BS 1
KFLAG .BS 1
EXPTIM .BS 1
LMSCHG .BS 1
SCANPOS .BS 1
;
INTS.DELAY .EQ $1
HORIZON .EQ $B7
M .EQ PMAREA+$300
P0 .EQ PMAREA+$400
P1 .EQ PMAREA+$500
P2 .EQ PMAREA+$600
P3 .EQ PMAREA+$700
TSCREEN .EQ PMAREA+$B00
GROUND .EQ PMAREA+$200
MOUNTAIN .EQ PMAREA+$C00
SCANLINE .EQ TSCREEN+140+20
C.SCORE .EQ SCANLINE+48+7
C.LIVES .EQ C.SCORE+11
C.LEVEL .EQ SCANLINE+48+43
CHAR22 .EQ CHAR.SET+688
CHARL .EQ CHAR.SET+216
CHARR .EQ CHARL-8
YOUR.D.R .EQ $100
BULL.DELAY .EQ 2
OSCAN .EQ 64
YOUR.D.T .EQ $80
.OR $1F00
.TF "D:DZONE.OBJ"
;
;=======================
;Title page display list
;=======================
;
TDLIST .HS 7070707070F047
.DA TSCREEN
.HS 07700270700670700270
ACE .HS 7041
.DA TDLIST
;
;===========================
;Compressed data for the
;mountains.
;===========================
;
MTAIN.DATA
.HS 00974F504C4D4E00CB
.HS 4F504C4D4E009841
.HS 42434445464748
.HS 00894F50854C4D4E
.HS 008F4F50530088494A
.HS 4B4546474800864F
.HS 504C4D4E00894142
.HS 4344454647480089
.HS 4F50854C4D4E008F
.HS 4F504142434488
.HS 4546474800834F50
.HS 8A4C4D4E414243
.HS 44515200844F5083
.HS 530084494A4B8745
.HS 4647484F50854C
.HS 4D4E008241424344
.HS 884546474800834F
.HS 508A4C4D4E4142
.HS 4344515200844F50
.HS 820E8F4554508B
.HS 01020304865152
.HS 4F508653494A4B
.HS 8E05060708864C
.HS 550E8F4554508B
.HS 01020304865152
.HS 4F50850C0D0E8B
.HS 0F1C8C048C1D1E
.HS 84090A0B9E0C0D
.HS 0E8B0F1C8C048C
.HS 1D1EB01DCF1D83
LEN.MTN .EQ *-MTAIN.DATA-1
.BS CHAR.SET-*
;
;==========================
;Character set data
;==========================
;
CSET .HS 0000000000000000
.HS 5555555555555AA5
.HS 555555555AA55555
.HS 55555AA555555555
.HS 5AA5555555555555
.HS A55A555555555555
.HS 5555A55A55555555
.HS 55555555A55A5555
.HS 555555555555A55A
.HS 5555555555566995
.HS 5555555669955555
.HS 5669955555555555
.HS 9569565555555555
.HS 5555559569565555
.HS 5555555555956956
.HS 5555555556596595
.HS 003C666E76663C00
.HS 0018381818187E00
.HS 003C660C18307E00
.HS 007E0C180C663C00
.HS 000C1C3C6C7E0C00
.HS 007E607C06663C00
.HS 003C607C66663C00
.HS 007E060C18303000
.HS 003C663C66663C00
.HS 003C663E060C3800
.HS 000000F0F0000000
.HS 0000000F0F000000
.HS 5659659555555555
.HS 9565595655555555
.HS 5555555595655956
.HS 000000FFFF000000
.HS 00003F3F3C3C3C3C
.HS 0000C0E0F0783C1C
.HS 3C3C3C3C3F3F0000
.HS 1C3C78F0E0C00000
.HS 00003F3F3C3C3F3F
.HS 0000FCFC0000F0F0
.HS 3C3C3C3C3F3F0000
.HS 00000000FCFC0000
.HS 000103070F1E3C3C
.HS 0080C0E0F0783C3C
.HS 3C3C3F3F3C3C0000
.HS 3C3CFCFC3C3C0000
.HS 00003F3F03030303
.HS 0000FCFCC0C0C0C0
.HS 0303030303030000
.HS C0C0C0C0C0C00000
.HS 00003C3C3C3C3F3F
.HS 00003C3C3C3CFCFC
.HS 3C3C3C3C3C3C0000
.HS 3C3C3C3C3C3C0000
.HS 00003F3F00000103
.HS 0000FCFC78F0E0C0
.HS 070F1E3C3F3F0000
.HS 80000000FCFC0000
.HS 00000F1F3C3C3C3C
.HS 0000F0F83C3C3C3C
.HS 3C3C3C3C1F0F0000
.HS 3C3C3C3CF8F00000
.HS 00003C3E3F3F3F3F
.HS 00003C3C3CBCFCFC
.HS 3F3D3C3C3C3C0000
.HS FCFCFC7C3C3C0000
.HS 5555555555555555
.HS 0000000000000AA5
.HS 000000000AA55555
.HS 00000AA555555555
.HS 0AA5555555555555
.HS A05A555555555555
.HS 0000A05A55555555
.HS 00000000A05A5555
.HS 000000000000A05A
.HS 0000000000022995
.HS 0000000229955555
.HS 0229955555555555
.HS 8068565555555555
.HS 0000008068565555
.HS 0000000000806856
.HS 0000000002092595
.HS 0209259555555555
.HS 8060585655555555
.HS 0000000080605856
.HS 8080606058585656
.HS 0000A05A56596595
.HS 0AA5956559565555
.HS AAFFFFAAFFFFFFFF
.HS FFFFAAFFFFFFFFFF
.HS FFFFFFFFFFFFFFFF
.HS FFAAFFFFFFFFFFFF
.HS FFFFFFFFFFFFFFFF
.HS FFFFFFFF7E181E00
.HS 00183C7E18181800
.HS 001818187E3C1800
.HS 0018307E30180000
.HS 00180C7E0C180000
.HS 0818387838180800
.HS 0060606060607E00
.HS 003C603C06063C00
.HS 10181C1E1C181000
;
;===========================
;Display list data
;===========================
;
D.LIST
.HS 7070C2
.DA SCANLINE
.HS 8270
.HS 607070707070
.HS 7070F0F0F0D4
MT.LMS .DA MOUNTAIN,#$D4
.DA MOUNTAIN+$80,#$D4
.DA MOUNTAIN+$100,#$54
.DA MOUNTAIN+$180,#$54
.DA MOUNTAIN+$200,#$D4
.DA MOUNTAIN+$280,#$44
.DA GROUND
.HS 0484040441
.DA D.LIST
;
;==========================
;Main screen Display List
;Interrupts to multiplex
;players and change colours
;==========================
;
NEWDLI
PLA
CLC
ADC #1
STA VDSLST
PLA
ADC #0
STA VDSLST+1
PLA
RTI
;
DLI PHA
LDA #6
STA WSYNC
STA COLPF1
LDA #$98
STA SUNSET
JSR NEWDLI
;
PHA
LDA #0
STA COLPF1
STA WSYNC
LDA PCOLOR2
STA COLPH3
LDA SUNSET
SEC
SBC #$10
STA COLBK
STA SUNSET
CMP #$38
BEQ .1
PLA
RTI
.1 JSR NEWDLI
;
PHA
STA HITCLR
LDA PSIZ.DLI
STA WSYNC
STA SIZEP0
LDA P0.POS
STA HPOSP0
LDA PCOL.DLI
STA COLPM0
JSR NEWDLI
;
PHA
LDA #$B6
STA WSYNC
STA COLPF1
LDA #$B2
STA COLPH2
LDA #0
STA COLBK
JSR NEWDLI
;
PHA
LDA #15
STA COLPM0
LDA #$78
STA WSYNC
STA HPOSP0
LDA #1
STA SIZEP0
LDA M0PL
ORA M3PL
AND #1
ORA P0PL
AND #$0D
STA S.PPL
PLA
RTI
;
;==========================
;Intro routine
;==========================
;
START
CLD
LDA #$40
STA NMIEN
LDA #6
LDX /SYSVBV
LDY #SYSVBV
JSR SETVBV
;
LDA /CHAR.SET
STA CHBAS
LDA #34
STA SDMCTL
LDA #0
STA GRACTL
LDX #4
NOPM STA P0PL+1,X
DEX
BPL NOPM
;
JSR NOSOUND
;
;==========================
;Clear out rubbish from
;player area, etc.
;==========================
;
ERASE.PLAYERS
LDA /GROUND
STA TO+1
LDA #GROUND
STA TO
LDY #0
LDX #13
TYA
.1 STA (TO),Y
INY
BNE .1
INC TO+1
DEX
BEQ ERADONE
CPX #3
BNE .1
LDA #64
BNE .1
;
ERADONE
LDX #$FF
.1 INX
LDY TMESS,X
CPY #$FF
BEQ .3
INX
.2 LDA TMESS,X
CMP #$9B
BEQ .1
STA TSCREEN,Y
INY
INX
BNE .2
.3
LDA #0
STA COLOR2
STA COLOR4
STA S.HSCROL
STA HSCROL
STA LEVEL
LDA #$11
STA C.LEVEL
JSR SETR
LDA #$F
STA COLOR1
LDA #$36
STA COLOR0
LDA #62
STA SDMCTL
LDA /TDLIST
STA SDLSTL+1
LDA #TDLIST
STA SDLSTL
JSR DEBOUNCE
LDA /TDLI
STA VDSLST+1
LDA #TDLI
STA VDSLST
LDA #$C0
STA NMIEN
LDA #$80
STA PROB
;
LDA #3
STA LIVES
ORA #$10
STA C.LIVES
;
HIGHSCORE
SED
LDX #2
.1 LDA SCORE,X
CMP HISCORE,X
BCC NOTHIGH
BNE HIGH
DEX
BPL .1
BMI NOTHIGH
HIGH LDX #2
.1 LDA SCORE,X
STA HISCORE,X
DEX
BPL .1
NOTHIGH CLD
;
LDY #0
LDX #2
.2 LDA HISCORE,X
JSR SPLIT
STA TSCREEN+93,Y
LDA TEMP
STA TSCREEN+94,Y
INY
INY
DEX
BPL .2
;
LDA #0
LDX #2
.3 STA SCORE,X
DEX
BPL .3
;
LDA #8
STA CONSOL
READ LDA CONSOL
CMP #6
BEQ .3
LDA TRIG0
BNE READ
JSR DEBOUNCE
.1 LDA TRIG0
BEQ .1
BNE EXPAND
.3 JSR DEBOUNCE
LDA #8
STA CONSOL
.4 LDA CONSOL
CMP #6
BEQ .4
;
;===========================
;Block in the mountains by
;expanding the data
;===========================
;
EXPAND
LDA /MOUNTAIN
STA TO+1
LDA #MOUNTAIN
STA TO
LDX #0
LDY #0
.0 LDA MTAIN.DATA,X
BMI .1
BNE .3
INX
LDA MTAIN.DATA,X
AND #$7F
TAY
LDA #0
.4 STA (TO),Y
DEY
BPL .4
LDA MTAIN.DATA,X
INY
BEQ .1
;
.3 STA (TO),Y
LDA #1
.1 AND #$7F
CLC
ADC TO
STA TO
BCC .2
INC TO+1
.2 INX
CPX #LEN.MTN
BCC .0
;
;============================
;Fill in the ground with one
;character repeated per line.
;============================
;
FILL.GROUND
LDY #47
.1 LDA #22+$40
CLC
STA GROUND,Y
ADC #1
STA GROUND+$30,Y
ADC #1
STA GROUND+$60,Y
ADC #1
STA GROUND+$90,Y
ADC #1
STA GROUND+$C0,Y
DEY
BPL .1
;
;=========================
;Now set the alternate lines
;on the ground by altering
;the character set.
;=========================
;
INIT.GROUND
STY COLOUR Y=FF
LDA #30
STA COUNT
LDA #0
STA INTS.POS
FILLINTS LDA #1
STA LAST.DIR
JSR MOVE.INTS
DEC COUNT
BNE FILLINTS
;
;=========================
;Draw into player 0 the
;crosshair and central dot
;of the overhead scanner.
;=========================
;
DO.CROSSHAIR
LDA #17
STA YSCAN
STA GPRIOR
LDA #$0F
STA PCOLOR0
LDA #$FF
STA BULLET
STA P0+HORIZON-25
STA P0+HORIZON+25
LDA #$81
STA P0+HORIZON-26
STA P0+HORIZON+26
LDA #1
STA DLY
STA SIZEP0
LDA #$80-8
STA HPOSP0
;
LDX #4
LDA #$18
SCANLP STA P0+OSCAN-2,X
DEX
BPL SCANLP
;
;=========================
;Enable PMG, set colours
;and other variables etc.
;=========================
;
SET.SCREEN
LDA #0
STA SDMCTL
STA CHACT
;
LDA #$10
LDY #6
.1 STA C.SCORE,Y
STA TSCORES+2,Y
DEY
BPL .1
;
LDX #'b
STX C.SCORE-2
DEX
STX C.LIVES-2
STX C.LEVEL-2
;
JSR RESET
LDA #3
STA GRACTL
LDA /PMAREA
STA PMBASE
LDA /CHAR.SET
STA CHBAS
LDA #$12
STA COLOR0
LDA #12
STA COLOR1
LDX /VBI
LDY #VBI
LDA #6
JSR SETVBV
LDA /DLI
STA VDSLST+1
LDA #DLI
STA VDSLST
LDA #192
STA NMIEN
LDA /D.LIST
STA SDLSTL+1
LDA #D.LIST
STA SDLSTL
LDA #63
STA SDMCTL
LDA #$70
STA ACE
LDA #$FF
STA CH
JSR CHOOSE
;
JMP MAINLOOP
;
DEBOUNCE LDA RTCLOCK+2
.1 CMP RTCLOCK+2
BEQ .1
RTS
;
SPLIT PHA
AND #$0F
ORA #$10
STA TEMP
PLA
LSR
LSR
LSR
LSR
AND #$0F
ORA #$10
RTS
;
NOSOUND LDA #3
STA SKCTL
LDA #0
LDX #8
.1 STA AUDF1,X
DEX
BPL .1
RTS
;
;===========================
;Title DLI
;===========================
;
TDLI PHA
TXA
PHA
TYA
PHA
LDY COLUP
LDX COLDOWN
LDA #31
STA TCOUNT
.1 STA WSYNC
STY COLPH2
STX COLPH3
INY
INX
DEC TCOUNT
BPL .1
INC COLUP
DEC COLDOWN
LDA #0
STA COLPH2
LDA #$E0
STA CHBASE
PLA
TAY
PLA
TAX
PLA
RTI
;
;=========================
;Title messages
;=========================
;
TMESS .DA #1
.DA #96+$80
.AT -"aDEhiLMpqTUxy\]de"
.DA #$9B,#1+20
.AT -"bcFGjkNOrsVWz"
.DA #$80+123
.AT -"^_fg"
.DA #$9B,#20+13+20
.AT "By S. Hillen"
.DA #$9B,#20+40+20
TSCORES .AT "L 0000000 H 0000000"
.DA #$9B,#20+40+20+20+2
.AT " (C) 1986 Analog Computing "
.DA #$9B,#20+40+20+20+40+8
.AT -"ace"
.HS 9BFF
;
VBI
LDA /DLI
STA VDSLST+1
LDA #DLI
STA VDSLST
LDA S.HSCROL
STA HSCROL
LDA LMSCHG
JSR CHANGELMS
LDA TIMER
BMI NODEC
DEC TIMER
NODEC
INC VBCOUNT
LDA VBCOUNT
CMP #16
BCC .1
LDA CHACT
EOR #2
STA CHACT
LDA #0
STA VBCOUNT
STA ATRACT
.1 JMP SYSVBV
;
;
SETR LDA #95
STA R+1
STA EB.R+1
STA R
STA EB.R
RTS
;
; Maths routines
;
; 14/5/85
; Updated 9/6/85
;
; Storage in page 0
;
; 16 BIT MULTIPLY
;
; MATH1 * MATH2
;
MULT16
JSR SET.POS make both ops +ve
LDX #16
MULT ASL RESLO
ROL RESLO+1
ROL RESHI
ROL RESHI+1
;
ASL MATH1
ROL MATH1+1
BCC NO.ADD
;
LDA MATH2
CLC
ADC RESLO
STA RESLO
LDA MATH2+1
ADC RESLO+1
STA RESLO+1
BCC NO.ADD
;
INC RESHI
;
NO.ADD DEX
BNE MULT
;
JMP COMP.RES if needed
;
;16 BIT DIVIDE
;
; MATH1/MATH2
;
DIV16 JSR SET.POS
LDA MATH1
ORA MATH1+1
BNE .1 math1<>0
JMP RES01
;
.1 LDA MATH2
ORA MATH2+1
BNE .2 math2<>0
JMP RESINF
;
.2 LDX #0
STX TEMP1
STX TEMP1+1
STX TEMP2
STX TEMP2+1
;
COMPARE LDA MATH2
SEC
SBC MATH1
STA HOLD
LDA MATH2+1
SBC MATH1+1
BCS TWOGT
;
TIMES2 INX
ASL MATH2
ROL MATH2+1
JMP COMPARE
;
;
TWOGT ORA HOLD
BNE .1
JMP POWER2
;
.1 CPX #0
BEQ ONLYREM
;
DIVIDE LSR MATH2+1
ROR MATH2
LDA MATH1
SEC
SBC MATH2
PHA
LDA MATH1+1
SBC MATH2+1
PHA
;
BCS OK
PLA
PLA
BCC ITOVFLOW
;
OK PLA
STA MATH1+1
PLA
STA MATH1
SEC
;
ITOVFLOW ROL RESHI
ROL RESHI+1
DEX
BNE DIVIDE
;
;
ONLYREM
LDX #16
DIVREM LSR MATH2+1
ROR MATH2
ROR TEMP2+1
ROR TEMP2
;
LDA MATH1
SEC
SBC MATH2
STA HOLD
PHA
LDA MATH1+1
SBC MATH2+1
PHA
BCC TOTOBIG
;
ORA HOLD
BNE MUCHSMAL
;
LDA TEMP1
SEC
SBC TEMP2
PHA
LDA TEMP1+1
SBC TEMP2+1
PHA
BCC TOBIG
;
PLA
STA TEMP1+1
PLA
STA TEMP1
PLA
STA MATH1+1
PLA
STA MATH1
SEC
BCS CONTDIV
;
MUCHSMAL PLA
STA MATH1+1
PLA
STA MATH1
LDA TEMP1
SEC
SBC TEMP2
STA TEMP1
LDA TEMP1+1
SBC TEMP2+1
STA TEMP1+1
BCS NOTOVFL
;
LDA MATH1
BNE .1
DEC MATH1+1
.1 DEC MATH1
;
NOTOVFL SEC
BCS CONTDIV
;
TOBIG PLA
PLA
TOTOBIG PLA
PLA
CLC
;
CONTDIV ROL RESLO
ROL RESLO+1
DEX
BNE DIVREM
;
SETSGN JMP COMP.RES
;
POWER2 INX
SEC
.1 ROL RESHI
ROL RESHI+1
DEX
BNE .1
BEQ SETSGN
;
RES01 LDA MATH2
ORA MATH2+1
BNE RES0
INC RESHI
RES0 RTS
;
RESINF LDX #$80
LDY #0
LDA MATH1+1
EOR MATH2+1
BMI STORE
;
DEX
DEY
STORE STX RESHI+1
STY RESHI
RTS
;
SET.POS
LDA MATH1+1
EOR MATH2+1
STA MSIGN
LDA MATH1+1
BPL .1
LDX MATH1
JSR COMPL16
STX MATH1
STA MATH1+1
;
.1 LDA MATH2+1
BPL .2
LDX MATH2
JSR COMPL16
STX MATH2
STA MATH2+1
;
.2 LDA #0
STA RESLO
STA RESLO+1
STA RESHI
STA RESHI+1
RTS
;
COMPL16
STA MTEMP+1
STX MTEMP
LDA #0
SEC
SBC MTEMP
TAX
LDA #0
SBC MTEMP+1
RTS
;
COMP.RES
LDA RESLO
BPL .1
INC RESLO+1
BNE .1
INC RESHI
BNE .1
INC RESHI+1
.1 LDA MSIGN
BPL POS.RES
;
LDY #0
SEC
.2 LDA #0
SBC RESLO,Y
STA RESLO,Y
INY
CPY #$4
BNE .2
;
POS.RES RTS
;
SEC
SBC #0
STA MATH1
SINE LDA MATH1+1
SEC
SBC #$40
STA MATH1+1
COSINE LDA #0
STA MSIGN
LDA MATH1+1
BPL .1
LDX MATH1
JSR COMPL16
STX MATH1
STA MATH1+1
;
.1 LDA MATH1+1
AND #$C0
BEQ LOOK.COS
;
LDA #0
SEC
SBC MATH1
STA MATH1
LDA #$80
SBC MATH1+1
STA MATH1+1
LDA #$FF
STA MSIGN
;
LOOK.COS
ASL MATH1
ROL MATH1+1
ROL MATH1
ROL MATH1+1
BCS ZRES
;
ROL MATH1
BCC NORDUP
INC MATH1+1
BEQ ZRES
;
NORDUP LDX MATH1+1
LDA COS.TABLE,X
CLC
ADC #$1
STA RESHI
LDA #0
ADC #0
STA RESHI+1
;
.0 LDA MSIGN
BPL .1
;
LDA RESHI+1
LDX RESHI
JSR COMPL16
STX RESHI
STA RESHI+1
;
.1 RTS
;
ZRES LDA #0
STA RESHI
STA RESHI+1
RTS
;
INVTAN
LDA #0
STA MSIGN
LDX MATH1
LDA MATH1+1
BPL .1
STA MSIGN
JSR COMPL16
.1 LDA INV.TAN.HI,X
PHA
LDA INV.TAN.LO,X
TAX
PLA
LDY MSIGN
BPL .2
JSR COMPL16
.2 STA RESHI+1
STX RESHI
RTS
;
SET256 LDX RESHI+1
INX
CPX #2
BCS SET.INF
;
DEX
TXA
EOR RESHI
BMI SET.INF
;
LDA RESHI
STA RESHI+1
LDA RESLO+1
STA RESHI
RTS
;
SET.INF LDX #$7F
LDY #$FF
LDA RESHI+1
BMI NEG.INF
;
SAVE STX RESHI+1
STY RESHI
RTS
;
NEG.INF INX
INY
BEQ SAVE
;
COS.TABLE
.HS FFFFFFFFFFFFFFFFFF
.HS FFFFFEFEFEFEFEFEFE
.HS FDFDFDFDFDFCFCFCFC
.HS FBFBFBFBFAFAFAF9F9
.HS F9F8F8F8F7F7F7F6F6
.HS F5F5F4F4F4F3F3F2F2
.HS F1F1F0F0EFEEEEEDED
.HS ECECEBEAEAE9E8E8E7
.HS E6E6E5E4E4E3E2E2E1
.HS E0DFDFDEDDDCDBDBDA
.HS D9D8D7D6D6D5D4D3D2
.HS D1D0CFCECECDCCCBCA
.HS C9C8C7C6C5C4C3C2C1
.HS C0BFBEBDBCBBB9B8B7
.HS B6B5B4B3B2B1B0AEAD
.HS ACABAAA9A7A6A5A4A3
.HS A1A09F9E9C9B9A9997
.HS 9695949291908F8D8C
.HS 8B8988878584838180
.HS 7F7D7C7A7978767574
.HS 72716F6E6C6B6A6867
.HS 65646261605E5D5B5A
.HS 5857555452514F4E4C
.HS 4B494846454342403F
.HS 3D3C3A393736343231
.HS 2F2E2C2B2928262523
.HS 21201E1D1B1A181715
.HS 1312100F0D0C0A0807
.HS 05040201
;
INV.TAN.HI
.HS 00000000000000010101010101020202
.HS 02020203030303030303040404040404
.HS 05050505050506060606060606070707
.HS 07070708080808080808090909090909
.HS 090A0A0A0A0A0A0B0B0B0B0B0B0B0C0C
.HS 0C0C0C0C0C0D0D0D0D0D0D0D0E0E0E0E
.HS 0E0E0E0F0F0F0F0F0F0F0F1010101010
.HS 10101111111111111111121212121212
.HS 12131313131313131314141414141414
.HS 14141515151515151515161616161616
.HS 16161617171717171717171718181818
.HS 18181818181919191919191919191A1A
.HS 1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B
.HS 1B1B1B1C1C1C1C1C1C1C1C1C1C1D1D1D
.HS 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E
.HS 1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F
;
INV.TAN.LO
.HS 0029517AA3CCF41D466F97C0E9113A62
.HS 8BB4DC052D567EA7CFF720487099C1E9
.HS 11396189B1D901295178A0C8EF173E66
.HS 8DB5DC032A51789FC6ED143B6188AED5
.HS FB22486E94BAE0062C51779DC2E70D32
.HS 577CA1C6EB1034597DA2C6EA0F33567A
.HS 9EC2E5092C507396B9DCFF21446789AB
.HS CEF01234567799BBDCFD1F406182A3C3
.HS E40525456686A6C6E60525446483A2C1
.HS E0FF1E3D5B7A98B7D5F3112F4C6A88A5
.HS C2E0FD1A3754708DAAC6E2FE1B37536E
.HS 8AA6C1DDF8132E49647F9AB4CFE9041E
.HS 38526C869FB9D3EC051F38516A839CB4
.HS CDE5FE162E465E768EA6BED5ED041B33
.HS 4A61788EA5BCD3E9FF162C42586E849A
.HS B0C5DBF0061B30455A6F8499AEC3D7EC
;
;==========================
;Read the joystick and act
;accordingly!
;==========================
;
JOYSTICK
LDA #1
STA EB.D.R
LDA PORTA
CMP #$FF
BNE .0
LDA #0
BEQ ENGINE
;
.0 AND #8
BNE .1
JSR RIGHT.MOVE
.1 LDA PORTA
AND #4
BNE .2
JSR LEFT.MOVE
.2 LDA PORTA
AND #2
BNE .3
JSR BACK.MOVE
DEC EB.D.R
JSR RESTORE
.3 LDA PORTA
AND #1
BNE .4
JSR FWD.MOVE
INC EB.D.R
JSR RESTORE
.4 LDA #$50
STA AUDF2
LDA #$22
ENGINE STA AUDC2
RTS
;
;=========================
;Scroll mountains, move
;enemy and bullet to left
;=========================
;
LEFT.MOVE
LDX S.HSCROL
CPX #3
BNE .1
LDX #$FF
LDY MT.LMS
BNE .2
LDY #80
.2 DEY
STY LMSCHG
.1 INX
STX S.HSCROL
INC P0.POS
INC P0.POS
;
LDA /YOUR.D.T
LDX #YOUR.D.T
JMP ADDTHETA
;
;=========================
;Move mountains, enemy and
;bullet to right.
;=========================
;
RIGHT.MOVE
LDX S.HSCROL
BNE .1
LDX #4
LDY MT.LMS
CPY #79
BNE .2
LDY #$FF
.2 INY
STY LMSCHG
.1 DEX
STX S.HSCROL
DEC P0.POS
DEC P0.POS
;
LDA /YOUR.D.T
LDX #YOUR.D.T
JSR COMPL16
ADDTHETA STA TEMP
BIT TIMER
BPL .1
TXA
CLC
ADC THETA
STA THETA
LDA THETA+1
ADC TEMP
STA THETA+1
TXA
CLC
ADC EB.THETA
STA EB.THETA
LDA EB.THETA+1
ADC TEMP
STA EB.THETA+1
.1 RTS
;
CHANGELMS
STA MT.LMS
STA MT.LMS+6
STA MT.LMS+12
EOR #$80
STA MT.LMS+3
STA MT.LMS+9
STA MT.LMS+15
NORCHG RTS
;
;==========================
;Move forward, ie move lines
;down and calculate new R
;and theta for enemy.
;==========================
;
FWD.MOVE
LDA #1
JSR MOVE.INTS
JSR SETDELTA
;
EN.FWD LDA #0
BEQ BKDSKIP
;
;==========================
;Move backward ie move lines
;up and calculate new R
;and theta for enemy.
;==========================
;
BACK.MOVE
LDA #$FF
JSR MOVE.INTS
JSR SETDELTA
;
EN.BKD LDA #$80
;
;==========================
;Now do the maths to find
;new R and new theta.
;==========================
;
BKDSKIP STA FBFLAG
BIT TIMER
BPL NORCHG
LDA WORK.THETA
STA MATH1
LDA WORK.THETA+1
STA MATH1+1
JSR COSINE
JSR MULT.DELTA
;
INFRONT LDA RESHI+1
LDX RESHI
BIT FBFLAG
BMI .1
JSR COMPL16
.1 STA TEMP
TXA
CLC
ADC WORK.R
STA WORK.R
LDA TEMP
ADC WORK.R+1
STA WORK.R+1
;
;Now got R+-D.R*cos.th
;
ONWARD
LDA WORK.THETA
STA MATH1
LDA WORK.THETA+1
STA MATH1+1
JSR SINE
JSR MULT.DELTA
;
LDA WORK.R
STA MATH2
LDA WORK.R+1
STA MATH2+1
LDA RESHI
STA MATH1
LDA RESHI+1
STA MATH1+1
JSR DIV16
JSR SET256
;
;Done D.R*sin.th/R+-D.R*cos.th
;
LDA RESHI
STA MATH1
LDA RESHI+1
STA MATH1+1
JSR INVTAN
;
LDX RESHI
LDA RESHI+1
;
;Just done arctan for phi
;
BIT FBFLAG
BPL .1
JSR COMPL16
.1 STA TEMP
TXA
CLC
ADC WORK.THETA
STA WORK.THETA
LDA WORK.THETA+1
ADC TEMP
STA WORK.THETA+1
;
NOWEXIT RTS
;
SETDELTA LDA #YOUR.D.R
STA DELTAR
LDA /YOUR.D.R
STA DELTAR+1
LDA R
STA WORK.R
LDA R+1
STA WORK.R+1
LDA THETA
STA WORK.THETA
LDA THETA+1
STA WORK.THETA+1
RTS
;
RESTORE LDA WORK.THETA
STA THETA
LDA WORK.THETA+1
STA THETA+1
LDA WORK.R
STA R
LDA WORK.R+1
STA R+1
RTS
;
MULT.DELTA
LDA RESHI
STA MATH1
LDA RESHI+1
STA MATH1+1
LDA DELTAR
STA MATH2
LDA DELTAR+1
STA MATH2+1
JSR MULT16
JSR SET256
RTS
;
;==========================
;Move the black lines on
;the ground up or down.
;==========================
;
MOVE.INTS
STA INTS.DIR
CMP LAST.DIR
BEQ NOEOR
STA LAST.DIR
LDA COLOUR
EOR #$55
STA COLOUR
LDA #0
STA INTS.DIR
;
NOEOR
LDA INTS.POS
CLC
ADC INTS.DIR
BMI .1
CMP #20
BCC .2
LDA COLOUR
EOR #$55
STA COLOUR
LDA #0
BEQ .2
.1 LDA COLOUR
EOR #$55
STA COLOUR
LDA #19
.2 STA INTS.POS
TAX
LDA COLOUR
STA CHAR22+4+5+7+10,X
EOR #$55
TAY
TXA
LSR
TAX
TYA
STA CHAR22+4+5+7,X
TXA
LSR
TAX
TYA
STA CHAR22+4,X
;
LDX #0
LDA INTS.POS
DIV3 CMP #3
BCC .1
SBC #3
INX
BNE DIV3
.1 LDA COLOUR
STA CHAR22+4+5,X
;
LDX #0
LDA INTS.POS
DIV5 CMP #5
BCC .1
SBC #5
INX
BNE DIV5
.1 LDA COLOUR
STA CHAR22,X
RTS
;
;=========================
;Fire a bullet if the
;trigger's pressed.
;=========================
;
FIRE
DEC DLY
BNE .1
LDA #BULL.DELAY
STA DLY
LDA BULLET
BPL DO.ALREADY
LDA TRIG0
BEQ FIRED
JSR B.CLEAR
.1 RTS
;
FIRED LDA #15
STA BULLET
LDA #3
STA PSIZ.DLI
LDA #$70
STA P0.POS
LDA #$10
STA FIREC1
;
DO.ALREADY
JSR B.CLEAR
;
LDA BULLET
TAX
LSR
CLC
LDA #$F
STA PCOL.DLI
;
CPX #14
BNE .1
LDA #1
STA PSIZ.DLI
LDA P0.POS
CLC
ADC #8
STA P0.POS
;
.1 CPX #12
BNE NOISE1
LDA #0
STA PSIZ.DLI
LDA P0.POS
CLC
ADC #4
STA P0.POS
;
NOISE1
LDA #2
STA AUDF4
LDY FIREC1
BEQ .1
DEY
DEY
.1 STY FIREC1
STY AUDC4
;
NEW.BULLET
LDA /P0
STA TO+1
LDA #P0
STA TO
JSR BULLETLOAD
DEC BULLET
;
FIRE.EXIT
RTS
;
B.CLEAR LDA #0
LDY #HORIZON-24
.1 STA P0,Y
INY
CPY #HORIZON+25
BCC .1
RTS
;
;==========================
;Bullet load- passed size
;0 to 15 inclusive in X
;===========================
;
BULLETLOAD
LDA #1
STA REPEAT
;
CPX #12
BCC .1
BEQ .2
;
TXA
SEC
SBC #13
TAX
LDY L3BOFFS,X
LDA REPTL3B,X
STA REPEAT
LDA L3BTYPE,X
TAX
BNE BSKIP
;
.2 LDX #15
.1 TXA
LSR
EOR #$FF
CLC
ADC #HORIZON+1
TAY
BSKIP STX COUNT
LDA SMSPOFFS,X
TAX
BLOOP
LDA REPEAT
STA S.REPEAT
LDA SMSPDATA,X
.1 STA (TO),Y
INY
DEC S.REPEAT
BNE .1
INX
DEC COUNT
BPL BLOOP
;
RTS
;
L3BOFFS .DA #HORIZON-11,#HORIZON-15,#HORIZON-24
REPTL3B .HS 020204
L3BTYPE .DA #11,#15,#11
;
;==========================
;Rangecheck looks for a hit
;by the enemy, and if
;necessary draws in the
;sphere.Also does wrapround.
;==========================
;
RANGECHECK
LDA R+1
BMI YOUREHIT
;
CMP #96
BCC NOWRAP
LDA THETA+1
EOR #$80
STA THETA+1
LDA #95
STA R+1
STA R
;
NOWRAP LDA R+1
CMP #2
BCC YOUREHIT
;
LDA EB.R+1
BMI YOUREHIT2
CMP #2
BCC YOUREHIT2
;
JMP DRAWING
;
;=========================
;Nasty colours as you've
;been hit!
;=========================
;
YOUREHIT
LDA #2
STA R
STA R+1
JSR DRAWING
;
YOUREHIT2
LDA #0
STA SETFLAG
JSR SCANFILL
STA FIREC1
STA AUDC4
JSR SCANERA
LDA #$FF
STA BULLET
JSR B.CLEAR
JSR NOSOUND
LDX #38
.1 LDA RTCLOCK+2
STA TEMP
.2 LDY #4
.3 LDA RANDOM
STA COLPF0,Y
CPY #4
BNE .4
DEY
.4 DEY
BPL .3
LDA RANDOM
STA COLPM0
LDA RANDOM
STA COLPH3
STA COLPM2
STA COLPM3
LDA RANDOM
STA COLPM1
ORA #$10
STA AUDC1
LDA RTCLOCK+2
CMP TEMP
BEQ .2
DEX
BPL .1
;
JSR SETR
DEC LIVES
BNE LIVESLEFT
PLA
PLA
JMP START
LIVESLEFT
DEC C.LIVES
JSR NOSOUND
JSR ERASE
LDA KFLAG
BNE .1
JSR RESET
.1 JMP CHOOSE
;
;============================
;Drawing in the players
;============================
;
ERASE
LDA #0
LDX #HORIZON+40
.1 DEX
STA P1,X
STA P2,X
STA P3,X
BNE .1
RTS
;
DRAWING
JSR ERASE
;
;Just erased the old sphere.
;
FINDSIZE
LDX R+1
CPX #2
BCC .0
LDA R
BPL .1
INX
.1 CPX #64
BCC .2
LDA #0
STA SPHKIND
.0 RTS Not there.
;
.2 LDA SPHERETYPE,X
STA SPHKIND
TAX
CPX #16
BCS MIDDLE
;
;Draw in the 1 player wide one.
;
LDA XPOS
SEC
SBC SMSPHADJ,X
STA HPOSP2
LDA #0
STA SIZEP2
STX COUNT
;
TXA
LSR
STA TEMP
LDA #HORIZON
SEC
SBC TEMP
SEC
SBC JUMP
TAY Get player tab offset.
LDA SMSPOFFS,X
TAX
;
SMLOOP LDA SMSPDATA,X
STA P2,Y
INY
INX
DEC COUNT
BPL SMLOOP
SLEAVE RTS
;
MIDDLE
CPX #22
BCS LARGE
TXA
SEC
SBC #16
TAX
STX XSTORE
LDA XPOS
SEC
SBC MSPHADJ,X
STA HPOSP2
CLC
ADC #8
STA HPOSP3
LDA #0
STA SIZEP2
STA SIZEP3
;
LDA MSPPOFF,X
SEC
SBC JUMP
TAY
LDA SHRPTS,X
STA SHRPT
LDA MSPOFFS,X
TAX
;
MLOOP LDA MSPDATA,X
BEQ MEXIT
;
STA P3,Y
STX TEMP
LDX #0
STX BYTE
LDX SHRPT
REVERSE LSR
ROL BYTE
DEX
BPL REVERSE
LDX TEMP
;
LDA BYTE
STA P2,Y
INY
INX
BNE MLOOP
MEXIT
LDX XSTORE
LDA XPOS
SEC
SBC MHADJ,X
PHA
LDY MHOFFS,X
LDA MHTYPE,X
TAX
PLA
JMP HIGHLIGHT
;
LARGE
TXA
SEC
SBC #22
TAX
STX XSTORE
LDA LSPS1,X
STA SIZEP3
LDA LSPSM,X
STA SIZEM
LDA LSPS2,X
STA SIZEP2
;
LDA XPOS
SEC
SBC LSPHADJ1,X
STA HPOSM3
CLC
ADC LSPADD,X
STA HPOSM2
ADC LSPADD,X
STA HPOSM1
ADC LSPADD,X
STA HPOSM0
ADC LSPHADJ2,X
STA HPOSP2
ADC LSPHADJ3,X
STA HPOSP3
;
LDY LSPOFFS,X
LDA LSPSTART,X
SEC
SBC JUMP
TAX
;
.0 LDA LSPDATA,Y
BEQ HALFWAY
STA COUNT
.1 LDA LSPDATA+1,Y
STA M,X
LDA LSPDATA+2,Y
STA P2,X
LDA LSPDATA+3,Y
STA P3,X
INX
DEC COUNT
BNE .1
INY
INY
INY
INY
BNE .0
;
HALFWAY
DEY
DEY
DEY
DEY
.0 LDA LSPDATA,Y
BEQ LEXIT
STA COUNT
.1 LDA LSPDATA+1,Y
STA M,X
LDA LSPDATA+2,Y
STA P2,X
LDA LSPDATA+3,Y
STA P3,X
INX
CPX #HORIZON+40
BEQ LEXIT
DEC COUNT
BNE .1
BEQ HALFWAY
;
LEXIT
LDX XSTORE
LDY LHOFFS,X
LDA XPOS
CLC
ADC LHADJ,X
PHA
LDA LHTYPE,X
TAX
PLA
;
HIGHLIGHT
STA HPOSP1
LDA PCOLOR2
CLC
ADC #2
STA COLPM1
STA PCOLOR1
STX COUNT
TYA
SEC
SBC JUMP
TAY
LDA #0
STA SIZEP1
LDA SMSPOFFS,X
TAX
HI.LOOP
LDA SMSPDATA,X
STA P1,Y
INY
INX
DEC COUNT
BPL HI.LOOP
RTS
;
SPHERETYPE .BS 2
.HS 19181716
.HS 151413121110
.HS 0F0E0D0C0B0A0A09090808070707060606060505050505
.HS 04040404040303030303020202020202010101010101
.HS 00000000000000
;
;
SMSPHADJ .HS 05050404050504040505040405050404
;
SMSPDATA
E0 .HS 08
E1 .HS 0808
E2 .HS 181818
E3 .HS 18181818
E4 .HS 081C1C1C08
E5 .HS 081C1C1C1C08
E6 .HS 18183C3C3C1818
E7 .HS 18183C3C3C3C1818
E8 .HS 081C1C3E3E3E1C1C08
E9 .HS 081C1C3E3E3E3E1C1C08
E10 .HS 183C3C7E7E7E7E7E3C3C18
E11 .HS 183C3C7E7E7E7E7E7E3C3C18
E12 .HS 1C3E3E7F7F7F7F7F7F7F3E3E1C
E13 .HS 1C3E3E7F7F7F7F7F7F7F7F3E3E1C
E14 .HS 183C7E7EFFFFFFFFFFFFFF7E7E3C18
E15 .HS 183C7E7E7EFFFFFFFFFFFF7E7E7E3C18
;
;
SMSPOFFS .DA #0,#E1-E0,#E2-E0,#E3-E0,#E4-E0,#E5-E0,#E6-E0
.DA #E7-E0,#E8-E0,#E9-E0,#E10-E0,#E11-E0,#E12-E0
.DA #E13-E0,#E14-E0,#E15-E0
;
;
;Middle size data.
;
MSPHADJ .HS 090809080808
;
SHRPTS .HS 060706070707
;
MSPPOFF .DA #HORIZON-8,#HORIZON-9,#HORIZON-10,#HORIZON-12
.DA #HORIZON-13,#HORIZON-16
;
MSPDATA
;
E16 .HS C0E0E0F0F0F0F8F8F8F8F8F0F0F0E0E0C000
E17 .HS C0E0E0F0F0F0F8F8F8F8F8F8F8F0F0F0E0E0C000
E18 .HS 80E0F0F0F8F8F8FCFCFCFCFCFCFCF8F8F8F0F0E08000
E19 .HS 80E0E0F0F0F8F8F8FCFCFCFCFCFCFCFCF8F8F8F0F0E0E08000
E20 .HS 80E0F0F8F8FCFCFCFEFEFEFEFEFEFEFEFEFEFEFCFCFCF8F8
.HS F0E08000
E21 .HS 80F0F8F8FCFCFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
.HS FEFEFEFEFCFCF8F8F080
;
;
MSPOFFS .DA #0,#E17-E16,#E18-E16,#E19-E16,#E20-E16,#E21-E16
;
;
LSPS1 .HS 00000001
LSPS2 .HS 00000101
LSPSM .HS 00000055
;
LSPADD .DA #2,#2,#2,#4
LSPHADJ1 .DA #13,#12,#16,#24
LSPHADJ2 .DA #2,#2,#2,#4
LSPHADJ3 .DA #8,#8,#16,#16
;
LSPSTART .DA #HORIZON-18,#HORIZON-23,#HORIZON-31,#HORIZON-47
;
LSPDATA
.HS 00000000
;
E22 .HS 01003E0001007F00
.HS 0100FF800101FFC0
.HS 0203FFE00307FFF0
.HS 040FFFF8061FFFFC
.HS 00000000
;
E23 .HS 01007E000100FF00
.HS 0101FF800103FFC0
.HS 0107FFE0020FFFF0
.HS 021FFFF8033FFFFC
.HS 057FFFFE07FFFFFF
.HS 00000000
;
E24 .HS 0100180001003C00
.HS 02007E000100FF00
.HS 0101FF800203FFC0
.HS 0207FFE0030FFFF0
.HS 031FFFF8033FFFFC
.HS 067FFFFE07FFFFFF
.HS 00000000
;
E25 .HS 01003C0001007E00
.HS 0200FF000201FF80
.HS 0203FFC00307FFE0
.HS 030FFFF0041FFFF8
.HS 053FFFFC0A7FFFFE
.HS 0FFFFFFF00
;
;
LSPOFFS .DA #E22-LSPDATA,#E23-LSPDATA,#E24-LSPDATA,#E25-LSPDATA
;
;
;Highlight data.
;
;
LHOFFS .DA #HORIZON-12,#HORIZON-16,#HORIZON-23,#HORIZON-32
;
LHADJ .DA #$FF,#0,#1,#2
LHTYPE .DA #9,#11,#13,#15
;
;
MHOFFS .DA #HORIZON-4,#HORIZON-5,#HORIZON-6,#HORIZON-7
.DA #HORIZON-8,#HORIZON-10
;
MHADJ .DA #3,#3,#3,#3,#2,#1
MHTYPE .DA #2,#3,#4,#5,#6,#7
;
;==========================
;Do all the bits to the
;scanner-the first is to
;draw the horizontal bar.
;==========================
;
DOSCANLN
LDA #97
SEC
SBC R+1
;
STA TEMP
AND #7 X=REM
TAX
LDA TEMP
LSR
LSR
LSR
TAY Y=QUOT
LDA BYTEL,X
STA CHARL+3
STA CHARL+4
LDA BYTER,X
STA CHARR+3
STA CHARR+4
;
STY YTEMP
LDX #23
LDA #$1F ?
SCLOOP STA SCANLINE+24,Y
STA SCANLINE,X
DEX
DEY
BPL SCLOOP
;
LDY YTEMP
LDA #27 ;
STA SCANLINE+1,X
LDA #26 :
STA SCANLINE+24,Y
;
LDA #$00
.1 STA SCANLINE+25,Y
STA SCANLINE,X
DEX
INY
CPY #15
BCC .1
;
;========================
;Now show the chevrons
;at either edge.
;========================
;
LDA THETA+1
CLC
ADC #$20 45 DEG
ROL
ROL
ROL
AND #3
TAX
BNE LRSKIP
LDA THETA+1
CLC
ADC #$20
CMP #$16+$20
BCC .5
LDX #1
BNE LRSKIP
.5 CMP #$EC+$20
BCS LRSKIP
LDX #3
;
LRSKIP
LDY LEFTRIGHT1,X
LDA LRDATA,Y
LDY #3
LRLOOP1 STA SCANLINE+4,Y
DEY
BPL LRLOOP1
;
LDY LEFTRIGHT2,X
LDA LRDATA,Y
LDY #3
LRLOOP2 STA SCANLINE+40,Y
DEY
BPL LRLOOP2
;
;=========================
;Now the plan view scanner,
;calculating Rcos and Rsin
;=========================
;
;
LDX R+1
LDA R
BPL .1
INX
.1 CPX #6
BCC NOSCAN
;
LDX #0
JSR SCANSUB
LSR
ROR MATH2
STA MATH2+1
JSR MULT16
JSR SET256
LDA #$7F
CLC
ADC RESHI+1
STA SCANPOS
;
LDX #1
JSR SCANSUB
STA MATH2+1
JSR MULT16
JSR SET256
LDA #OSCAN
SEC
SBC RESHI+1
STA YSCAN
RTS
;
SCANPUT LDA #$3
SCANFILL LDY YSCAN
STA M-1,Y
STA M,Y
STA M+1,Y
RTS
;
NOSCAN LDA #0
STA YSCAN
RTS
;
SCANSUB
LDA THETA+1
STA MATH1+1
LDA THETA
STA MATH1
CPX #1
BEQ .1
JSR SINE
JMP .2
.1 JSR COSINE
.2 LDA RESHI
STA MATH1
LDA RESHI+1
STA MATH1+1
;
LDA R
STA MATH2
LDA R+1
LSR
ROR MATH2
LSR
ROR MATH2
RTS
;
;========================
;Is the enemy at an angle
;to be displayed yet?
;Theta+1 passed in A.
;========================
;
ENEMYSHOW
CLC
ADC #$20
CMP #$40
BCS NOTON
;
STA MATH1+1
LDA THETA
LDX #6
.1 LSR MATH1+1
ROR
DEX
BNE .1
RTS
;
NOTON LDA #0
RTS
;
BYTEL .HS 000103070F1F3F7FFF
BYTER .HS 0080C0E0F0F8FCFEFF
LEFTRIGHT1 .HS 01010000
LEFTRIGHT2 .HS 01020201
LRDATA .DA #$80+96,#0,#$80+99
;
SCANERA LDX #47
LDA #0
.1 STA SCANLINE,X
DEX
BPL .1
RTS
;
;======================
;The main loop!
;======================
;
MAINLOOP
JSR DEBOUNCE
LDA #0
LDX #HORIZON+40
.1 DEX
STA M,X
BNE .1
;
STA SIZEM
LDA TIMER
BPL .2
LDA YSCAN
BEQ .2
LDA SCANPOS
STA HPOSM0
JSR SCANPUT
.2
JSR RANGECHECK
JSR ESHOW
;
NOSCYET JSR FIRE
JSR JOYSTICK
;
.1 LDA TIMER
BPL NOPAUSE
;
JSR DOENEMY
JSR HITDETECT
JSR DOSCANLN
;
LDA CH
CMP #$21
BNE NOPAUSE
LDY RTCLOCK+1
JSR NOSOUND
;
.2 LDA PORTA
CMP #$FF
BEQ .2
STY RTCLOCK+1
;
NOPAUSE LDA #$FF
STA CH
;
LDA CONSOL
CMP #7
BEQ MAINLOOP
JMP START
;
ESHOW LDA THETA+1
JSR ENEMYSHOW
STA XPOS
RTS
;
;======================
;Hit detection.Did you get it?
;======================
;
HITDETECT
LDA S.PPL
BEQ .1
;
LDA BULLET
EOR #$0F
STA TEMP
LDA R+1
LSR
LSR 0 to 15
SEC
SBC TEMP
CLC
ADC #2
CMP #2
BCC EXPLODE
BPL .1
LDA PCOLOR2
BNE .2
;
.1 LDA #$0F
.2 STA PCOL.DLI
RTS
;
EXPLODE
;========================
;It's the explosion folks!
;========================
;
INC DEAD
LDA #0
JSR SCANFILL
;
JSR NOSOUND
JSR SCANERA
STA FIREC1
STA FIREC2
LDA #$FF
STA BULLET
JSR B.CLEAR
;
;Turn off bullet
;
LDA #30
STA EXPTIM
LDA PCOLOR2
STA PCOL
;
ENEXPL
JSR DRAWING
JSR ESHOW
;
LDA #HORIZON-48
SEC
SBC JUMP
TAY
.0 LDA M,Y
AND RANDOM
STA M,Y
LDA P1,Y
AND RANDOM
STA P1,Y
LDA P2,Y
AND RANDOM
STA P2,Y
LDA P3,Y
AND RANDOM
STA P3,Y
INY
CPY #HORIZON+40
BCC .0
;
LDA EXPTIM
LSR
TAX
STA TEMP
BCC NOWHITE
LDA #$00
BEQ SCOLS
NOWHITE LDA PCOL
AND #$F0
ORA TEMP
SCOLS LDY #2
FADE STA PCOLOR1,Y
STA COLPM1,Y
DEY
BPL FADE
TXA
ORA #$80
STA AUDC1
TXA
LSR
ORA #$80
STA AUDC3
LDA #$80
STA AUDF1
STA AUDF3
;
JSR JOYSTICK
LDA R+1
CMP #2
BCS .0
LDA #2
STA R+1
STA R
.0 DEC EXPTIM
BEQ DONEXPL
JSR DEBOUNCE
JMP ENEXPL
;
DONEXPL JSR NOSOUND
JSR SETR
;
DOSCORE
LDA KFLAG
BNE SCORS
JSR RESET
LDA LEVEL
CMP #5
BCC .1
LDA #$06
STA ACE
PLA
PLA
JMP START
;
.1 INC LEVEL
INC C.LEVEL
INC LIVES
INC C.LIVES
;
SCORS SED
LDA RANDOM
AND #$70
BEQ SCORS
CLC
ADC SCORE
STA SCORE
LDA SCORE+1
ADC LEVEL
STA SCORE+1
LDA SCORE+2
ADC #0
STA SCORE+2
CLD
LDX #2
LDY #0
.2 LDA SCORE,X
JSR SPLIT
STA C.SCORE,Y
STA TSCORES+2,Y
INY
LDA TEMP
STA C.SCORE,Y
STA TSCORES+2,Y
INY
DEX
BPL .2
JMP CHOOSE
.IN "D:DZONE8.SYN"
.EN