A.N.A.L.O.G. ISSUE 64 / JULY 1988 / PAGE 16

Snowplow

by Barry Kolbe and Bryan Schappel

Your mother begged you to become an orthodontist and straighten out all those crooked teeth. But you just couldn’t see spending eight hours a day with your hands in someone else’s mouth. So here you are driving a truck for the highway department. Cutting weeds in the summer and filling potholes in the spring. Not to mention burning tons of leaves in the fall. Oh! Then there’s winter and all that snow to plow.

Speaking of which, we just had a snowfall and another storm is on the way. And it looks like a big one. Your regular truck won’t do the job. For this one you need a bulldozer. Here we go again. Put on your gloves, get your snow goggles, and grab a thermos of coffee (so you’ll be able to stay awake for 24 hours straight). Now get out there and clean up those flakes! Wait a second—make sure you keep tuned to the weather station for the latest weather bulletins.

Starting your dozer

Type in Listing 1 using the M/L Editor found elsewhere in this issue. To load the game, use the L option from the DOS menu.

If you wish to forgo watching the falling snow on the introduction screen (will you please watch at least once? After all, we did spend some time trying to create this special effect), press any key. After watching the scrolling weather message, press the START key to begin plowing. You may direct the dozer in any of the four directions using a joystick in port 1. No! You cannot go off the road—see the centerline markers? Follow them until the roads are completely clear of snow. If you accomplish this task there will probably be another snowfall to test your driving skills.

While you’re pushing snowflakes around, storms will occasionally cross your path. If your dozer touches one, it will undoubtedly get diesel-line freeze and crash. You’ll need a new one then. As time goes on the storms get more frequent and faster, so beware. Most of the streets are free of vehicles, but there are always some crazy people who venture out and risk their lives. Fortunately, a bell sound warns you that they are on the road. If you hit one, you score a 100-point bonus. These people will honk their horns at you, but I’d just ignore them and keep going. And don’t forget to keep your gas tank full. Remember the Knight-Rider and KIT?

Me neither. But KIT had turbo boost. And can jump to the edge of the screen (assuming there’s a road there; you wouldn’t want to jump into a tree, would you?). If you need to clean off your windshield or take a sip of coffee during plowing, just hit any key to pause. Press a key again to continue. Well, what are you waiting for? Get going!

Technical Notes and Other Stuff

Snowplow uses the four color Antic mode 5. Antic 4 would give better resolution but would have taken much more memory. An entire screen takes 2560 bytes—roughly 2.5K or about ⅓ of the entire program. In Snowplow we have an entire screen, but it takes only ⅙th of the program because it is compacted. We used a compacter similar to the one in BBK Artist (See issue #56).

The falling letters on the intro screen are each composed of four defined graphic zero characters. Of course, there’s also a complete character set in the DATA.

If you get tired of playing the same gameboard over and over, relief is in sight—a gameboard editor! That’s why, when you’re playing the game, the disk is being accessed. It’s looking for files named SMAP.??? where ??? can be anything that’s legal. It will load those files in the order they appear on the disk. As you clear each board, the storm appears on screen more often and moves faster until the 6th board. So leave your drive on while playing Snowplow. Next month, when we present the Snowplow Editor. you’ll be able to design your own screens. Excuse me a minute, I think I have to shovel the sidewalk….

Listing 1: M/L Editor Data

1000 DATA 255,255,0,128,10,128,72,169,2,141,10,212,141,26,208,104,6014
1010 DATA 64,0,140,255,143,0,0,0,0,0,0,0,0,236,226,202,3155
1020 DATA 42,162,162,170,170,63,143,163,168,10,10,10,10,255,255,0,5452
1030 DATA 170,128,128,128,128,255,255,0,170,10,10,10,10,253,245,213,8922
1040 DATA 213,213,245,254,254,127,95,87,87,87,95,191,191,255,255,255,5771
1050 DATA 255,255,255,255,255,250,234,160,162,160,162,226,250,250,234,170,9825
1060 DATA 170,170,170,234,250,191,175,11,171,11,171,175,191,191,175,171,2873
1070 DATA 171,171,171,175,191,0,0,0,0,0,24,24,48,255,255,255,6402
1080 DATA 251,234,251,234,255,254,234,239,234,254,254,254,254,191,171,251,2882
1090 DATA 171,191,191,191,191,127,99,99,99,99,99,127,0,56,24,24,2204
1100 DATA 24,60,60,60,0,127,99,3,127,96,96,127,0,126,6,6,9776
1110 DATA 127,7,7,127,0,112,112,112,119,119,127,7,0,127,96,96,2628
1120 DATA 127,7,7,127,0,124,108,96,127,99,99,127,0,127,3,3,675
1130 DATA 31,24,24,24,0,62,54,54,127,119,119,127,0,127,99,99,2572
1140 DATA 127,7,7,7,0,0,0,24,24,0,24,24,0,255,255,254,3749
1150 DATA 248,170,170,207,255,255,255,175,171,170,170,243,255,0,0,1,422
1160 DATA 4,85,85,48,0,0,0,80,84,85,85,12,0,0,60,102,7638
1170 DATA 12,24,0,24,0,0,60,102,110,110,96,62,0,0,0,63,7460
1180 DATA 3,127,103,127,0,0,96,96,127,115,115,127,0,0,0,127,808
1190 DATA 96,96,96,127,0,0,3,3,127,99,99,127,0,0,0,127,9097
1200 DATA 99,127,112,127,0,0,30,24,126,24,56,56,0,0,0,127,7493
1210 DATA 99,99,127,7,127,0,96,96,127,115,115,115,0,0,12,0,9109
1220 DATA 12,12,28,28,0,0,12,0,12,12,14,14,126,0,48,48,5212
1230 DATA 118,124,118,115,0,0,24,24,24,56,56,56,0,0,0,102,6466
1240 DATA 127,127,107,99,0,0,0,63,51,115,115,115,0,0,0,63,8104
1250 DATA 51,115,115,127,0,0,0,63,51,115,127,112,112,0,0,127,726
1260 DATA 99,99,127,7,7,0,0,63,51,112,112,112,0,0,0,127,8692
1270 DATA 96,127,7,127,0,0,12,127,12,28,28,28,0,0,0,51,5097
1280 DATA 51,115,115,127,0,0,0,99,99,99,54,28,0,0,0,99,7601
1290 DATA 107,127,62,54,0,0,0,102,60,24,60,102,0,0,0,51,6349
1300 DATA 51,115,127,3,15,0,0,126,12,24,48,126,0,0,30,24,6279
1310 DATA 24,24,24,30,0,0,64,96,48,24,12,6,0,0,120,24,5850
1320 DATA 24,24,24,120,0,0,8,28,54,99,0,0,0,0,0,0,3700
1330 DATA 0,0,0,255,0,0,0,7,15,28,28,28,31,15,0,0,4078
1340 DATA 0,24,31,31,0,0,0,252,252,12,0,0,252,254,14,14,3275
1350 DATA 14,30,252,248,0,0,0,124,124,30,30,31,31,31,29,28,8002
1360 DATA 28,28,124,124,0,0,0,62,62,56,56,56,56,184,248,248,6206
1370 DATA 120,120,62,62,0,0,0,63,127,112,112,112,112,112,112,112,4003
1380 DATA 112,112,127,63,0,0,0,248,252,28,28,28,28,28,28,28,9149
1390 DATA 28,28,252,248,0,0,0,124,124,28,28,28,29,29,29,29,7936
1400 DATA 31,31,126,124,0,0,0,62,62,56,56,56,184,184,184,184,5941
1410 DATA 248,248,126,62,0,0,0,127,127,28,28,28,28,31,31,28,7574
1420 DATA 28,28,127,127,0,0,0,240,248,28,28,28,28,248,240,0,4905
1430 DATA 0,0,0,0,0,0,0,127,127,28,28,28,28,28,28,28,6137
1440 DATA 28,28,127,127,0,0,0,0,0,0,0,0,0,0,0,0,2413
1450 DATA 28,28,252,252,0,0,0,63,127,112,112,112,112,112,112,112,5137
1460 DATA 112,112,127,63,0,0,0,248,252,28,28,28,28,28,28,28,9229
1470 DATA 28,28,252,248,0,0,0,124,124,28,28,28,29,29,29,29,8016
1480 DATA 31,31,126,124,0,0,0,62,62,56,56,56,184,184,184,184,6021
1490 DATA 248,248,126,62,0,255,255,255,215,255,255,255,255,0,0,0,1880
1500 DATA 20,0,0,0,0,255,253,255,253,255,253,255,253,0,1,0,835
1510 DATA 1,0,1,0,1,255,127,255,127,255,127,255,127,0,64,0,6739
1520 DATA 64,0,64,0,64,255,253,255,93,255,253,255,253,0,1,0,9971
1530 DATA 81,0,1,0,1,255,127,255,117,255,127,255,127,0,64,0,6749
1540 DATA 69,0,64,0,64,255,253,255,93,255,255,255,255,0,1,0,44
1550 DATA 81,0,0,0,0,255,255,255,93,255,253,255,253,0,0,0,9505
1560 DATA 81,0,1,0,1,255,255,255,117,255,127,255,127,0,0,0,6715
1570 DATA 69,0,64,0,64,255,127,255,117,255,255,255,255,0,64,0,353
1580 DATA 69,0,0,0,0,255,255,255,253,255,253,255,253,0,0,0,963
1590 DATA 1,0,1,0,1,255,255,255,127,255,127,255,127,0,0,0,6755
1600 DATA 64,0,64,0,64,255,127,255,127,255,255,255,255,0,64,0,468
1610 DATA 64,0,0,0,0,255,253,255,253,255,255,255,255,0,1,0,1037
1620 DATA 1,0,0,0,0,255,239,255,85,255,255,255,255,0,8,0,9479
1630 DATA 85,0,0,0,0,24,24,24,24,24,24,24,24,0,126,120,7349
1640 DATA 124,110,102,6,0,8,24,56,120,56,24,8,0,16,24,28,6010
1650 DATA 30,28,24,16,0,0,139,39,139,0,38,53,37,44,0,17,6831
1660 DATA 21,16,0,48,44,47,55,51,0,19,0,0,0,0,0,0,3390
1670 DATA 51,35,47,50,37,0,16,16,16,16,16,16,0,0,0,0,3229
1680 DATA 0,0,155,39,155,0,0,179,174,175,183,166,172,161,171,165,1524
1690 DATA 179,0,183,169,174,0,0,0,0,0,0,0,112,114,101,115,371
1700 DATA 115,0,51,52,33,50,52,0,0,0,0,0,0,0,127,32,5422
1710 DATA 127,112,112,112,112,112,112,112,66,0,123,2,112,112,112,2,2464
1720 DATA 2,112,112,112,112,87,0,124,112,112,112,112,70,160,123,65,5543
1730 DATA 0,127,128,127,174,127,112,112,112,66,0,123,2,117,0,144,3300
1740 DATA 117,128,144,117,0,145,117,128,145,117,0,146,117,128,146,117,7328
1750 DATA 0,147,117,128,147,117,0,148,117,128,148,213,0,149,70,0,5181
1760 DATA 139,6,65,128,127,0,64,165,79,160,50,185,128,127,153,192,8911
1770 DATA 127,136,16,247,169,140,141,244,2,32,251,64,162,74,160,158,9766
1780 DATA 169,7,32,92,228,169,0,133,198,169,0,133,183,133,178,32,8136
1790 DATA 39,76,76,47,64,32,73,76,32,90,66,32,215,74,169,3,2740
1800 DATA 133,182,169,0,133,186,32,225,73,32,81,78,32,36,75,32,1970
1810 DATA 48,71,32,130,70,32,215,74,32,50,65,165,183,208,14,165,6879
1820 DATA 178,208,10,169,1,133,178,32,166,79,76,106,64,32,84,76,3573
1830 DATA 32,156,70,32,61,71,32,4,72,32,239,70,32,36,71,32,433
1840 DATA 242,77,169,11,133,184,32,75,65,169,1,133,146,173,31,208,7375
1850 DATA 201,6,208,3,76,232,77,173,120,2,133,184,32,75,65,141,5862
1860 DATA 30,208,32,0,68,32,145,69,173,132,2,208,3,32,166,76,4089
1870 DATA 32,213,77,173,12,208,201,12,176,33,173,13,208,201,12,176,8549
1880 DATA 26,165,175,197,173,208,12,165,174,197,172,208,6,32,143,70,8781
1890 DATA 76,64,64,165,179,5,180,5,181,208,24,141,30,208,32,241,8474
1900 DATA 73,32,103,75,32,213,73,141,30,208,32,81,66,76,234,64,5853
1910 DATA 76,14,74,165,182,240,249,173,252,2,201,255,240,3,32,131,1670
1920 DATA 74,76,132,64,169,62,141,47,2,169,17,141,111,2,169,3,3019
1930 DATA 141,29,208,169,128,141,7,212,169,40,141,192,2,169,6,141,7174
1940 DATA 193,2,169,166,141,194,2,141,195,2,169,128,133,131,169,112,9379
1950 DATA 133,133,169,1,141,10,208,141,11,208,96,160,255,169,0,153,9493
1960 DATA 0,132,153,0,133,153,0,134,153,0,135,153,0,131,136,192,6982
1970 DATA 255,208,236,96,162,3,165,184,221,177,65,240,4,202,16,248,1630
1980 DATA 96,189,189,65,133,205,189,193,65,133,206,189,197,65,133,203,3206
1990 DATA 189,201,65,133,204,138,72,165,133,133,187,24,125,185,65,133,9170
2000 DATA 134,133,188,168,169,0,153,255,132,160,0,177,205,166,187,157,2810
2010 DATA 0,132,177,203,166,188,157,0,133,200,230,187,230,188,192,16,3403
2020 DATA 208,233,166,188,157,0,133,166,131,142,0,208,104,170,165,131,386
2030 DATA 24,125,181,65,133,132,141,1,208,96,11,7,14,13,255,1,2801
2040 DATA 0,0,0,0,255,1,205,221,237,253,65,65,65,65,13,29,5096
2050 DATA 45,61,66,66,66,66,0,0,0,255,255,118,118,118,118,118,7020
2060 DATA 118,255,255,0,0,0,0,0,0,255,255,110,110,110,110,110,6508
2070 DATA 110,255,255,0,0,0,0,102,102,126,126,126,126,126,126,102,6271
2080 DATA 102,102,126,126,102,0,0,102,126,126,102,102,102,126,126,126,6330
2090 DATA 126,126,126,102,102,0,0,170,170,128,128,132,132,132,132,132,8582
2100 DATA 132,128,128,170,170,0,0,253,253,1,1,97,97,97,97,97,5514
2110 DATA 97,1,1,253,253,0,0,255,255,0,153,153,24,24,153,153,7734
2120 DATA 24,24,153,153,0,0,0,0,129,153,24,24,153,153,24,24,1381
2130 DATA 153,153,0,255,255,0,160,19,208,2,160,7,32,247,67,136,6947
2140 DATA 208,250,96,160,0,169,0,141,89,86,169,144,141,125,86,185,8999
2150 DATA 89,86,24,105,128,153,90,86,185,125,86,105,0,153,126,86,6308
2160 DATA 200,192,33,208,234,162,7,169,16,149,212,202,16,251,133,196,2461
2170 DATA 32,48,71,169,3,133,182,169,19,141,16,139,169,96,133,211,8963
2180 DATA 169,255,133,191,96,216,68,10,70,0,169,127,133,206,169,136,9691
2190 DATA 133,205,96,164,130,185,89,86,133,205,185,125,86,133,206,96,1136
2200 DATA 22,4,165,184,201,7,208,62,32,86,69,144,1,96,165,243,7815
2210 DATA 201,83,144,1,96,169,1,133,138,32,197,74,169,1,133,135,6561
2220 DATA 32,61,67,238,183,66,230,243,162,3,142,4,212,32,247,67,9471
2230 DATA 32,165,75,202,16,244,198,138,165,138,16,224,32,96,70,32,6710
2240 DATA 69,74,32,117,71,96,201,11,208,79,32,105,69,144,1,96,4185
2250 DATA 165,243,208,1,96,169,1,133,138,32,197,74,162,0,142,4,5011
2260 DATA 212,32,247,67,32,200,75,232,224,4,208,242,169,255,133,135,4456
2270 DATA 162,0,142,4,212,32,61,67,198,243,206,183,66,198,138,165,2103
2280 DATA 138,16,217,76,243,66,160,0,185,136,127,24,101,135,153,136,8520
2290 DATA 127,200,200,200,192,33,208,240,96,201,14,208,48,32,132,69,8431
2300 DATA 144,1,96,165,244,240,94,32,197,74,169,255,133,135,32,189,1523
2310 DATA 67,198,244,206,184,66,162,15,142,5,212,32,247,67,32,217,9044
2320 DATA 75,202,16,244,169,0,141,5,212,76,243,66,96,201,13,208,9413
2330 DATA 52,32,119,69,144,1,96,165,244,201,9,144,1,96,32,197,6819
2340 DATA 74,162,0,142,5,212,32,247,67,32,217,75,232,224,16,208,733
2350 DATA 242,162,0,142,5,212,169,1,133,135,32,189,67,230,244,238,2698
2360 DATA 184,66,76,243,66,96,165,135,48,27,160,0,185,136,127,24,6077
2370 DATA 105,128,153,136,127,200,185,136,127,105,0,153,136,127,200,200,1727
2380 DATA 192,33,208,232,96,160,0,185,136,127,56,233,128,153,136,127,894
2390 DATA 200,185,136,127,233,0,153,136,127,200,200,192,33,208,232,96,3204
2400 DATA 169,0,133,20,165,20,240,252,96,165,184,201,7,208,68,165,1302
2410 DATA 131,201,124,144,9,165,243,201,83,176,3,76,70,68,165,131,8120
2420 DATA 201,200,176,46,32,86,69,144,1,96,32,197,74,160,7,230,6716
2430 DATA 131,166,131,142,0,208,230,132,166,132,142,1,208,32,247,67,85
2440 DATA 32,165,75,136,16,233,238,183,66,238,183,66,76,243,66,32,9850
2450 DATA 185,66,96,201,11,208,61,32,105,69,144,1,96,165,131,201,7815
2460 DATA 132,176,12,165,243,208,232,165,131,201,48,240,229,144,227,32,4554
2470 DATA 197,74,160,7,198,131,166,131,142,0,208,198,132,166,132,142,1543
2480 DATA 1,208,32,247,67,32,200,75,136,16,233,206,183,66,206,183,2248
2490 DATA 66,76,243,66,201,13,208,106,32,119,69,144,1,96,165,133,7013
2500 DATA 201,96,144,9,165,244,201,9,176,3,76,70,68,165,133,201,8824
2510 DATA 192,176,159,169,15,133,138,32,197,74,165,133,133,187,165,134,1192
2520 DATA 133,188,168,169,0,153,0,133,162,15,164,187,185,15,132,153,8890
2530 DATA 16,132,164,188,185,15,133,201,24,208,4,169,153,208,6,201,183
2540 DATA 153,208,2,169,24,153,16,133,198,187,198,188,202,16,219,230,3906
2550 DATA 133,230,134,32,247,67,198,138,165,138,16,190,238,184,66,76,997
2560 DATA 243,66,201,14,240,3,76,73,68,32,132,69,144,1,96,165,5106
2570 DATA 133,201,112,176,7,165,244,240,3,76,70,68,165,133,201,48,8961
2580 DATA 208,3,76,70,68,32,197,74,169,15,133,138,164,133,162,15,7259
2590 DATA 185,0,132,153,255,131,185,0,133,201,24,208,4,169,153,208,1147
2600 DATA 6,201,153,208,2,169,24,153,255,132,200,202,16,226,32,247,2758
2610 DATA 67,198,133,198,138,165,138,16,211,206,184,66,76,243,66,172,1945
2620 DATA 184,66,32,172,66,172,183,66,200,200,177,205,133,137,32,82,537
2630 DATA 70,96,172,184,66,32,172,66,172,183,66,136,136,76,97,69,7525
2640 DATA 172,184,66,200,32,172,66,172,183,66,76,97,69,172,184,66,8636
2650 DATA 136,32,172,66,172,183,66,76,97,69,172,184,66,32,172,66,7263
2660 DATA 172,183,66,177,205,162,15,221,53,70,240,6,202,16,248,76,9649
2670 DATA 224,69,201,27,240,4,201,29,208,21,72,169,97,145,205,200,1074
2680 DATA 145,205,32,71,72,32,93,74,104,201,27,240,19,208,26,170,7802
2690 DATA 232,138,145,205,200,177,205,170,232,138,145,205,201,11,240,9,3344
2700 DATA 230,174,208,2,230,175,32,75,72,165,137,201,8,208,44,230,507
2710 DATA 137,172,184,66,32,172,66,166,207,165,206,213,224,240,4,202,4888
2720 DATA 16,247,96,173,183,66,24,101,205,213,218,208,242,169,100,149,4762
2730 DATA 153,32,254,75,32,48,71,32,130,70,96,172,184,66,32,172,6748
2740 DATA 66,166,185,240,245,165,206,213,234,240,4,202,16,247,96,165,4734
2750 DATA 205,24,109,183,66,213,230,208,242,169,50,149,160,96,96,98,1582
2760 DATA 100,102,104,106,108,110,112,114,116,118,120,8,27,29,97,99,4132
2770 DATA 101,103,105,107,109,111,113,115,117,119,121,162,28,221,53,70,7633
2780 DATA 240,5,202,16,248,56,96,24,96,198,181,165,181,5,180,5,8158
2790 DATA 179,240,20,165,181,16,16,169,9,133,181,198,180,165,180,16,18
2800 DATA 6,169,9,133,180,198,179,32,130,70,96,162,2,181,179,9,7559
2810 DATA 16,157,6,139,202,16,246,96,169,0,162,15,133,146,32,77,6278
2820 DATA 66,202,16,250,96,162,16,169,12,157,66,3,32,86,228,162,7326
2830 DATA 16,169,3,157,66,3,169,70,157,69,3,169,227,157,68,3,6293
2840 DATA 169,4,157,74,3,169,0,157,75,3,32,86,228,16,1,96,2897
2850 DATA 162,16,169,144,157,69,3,169,0,157,68,3,169,0,169,10,3945
2860 DATA 157,73,3,169,7,157,66,3,32,86,228,96,68,49,58,83,3887
2870 DATA 77,65,80,46,32,32,32,155,160,0,132,172,230,172,132,173,419
2880 DATA 132,176,32,172,66,160,0,177,205,162,12,221,53,70,240,20,8692
2890 DATA 202,16,248,200,200,192,0,208,238,230,206,230,176,164,176,192,8248
2900 DATA 10,208,226,96,230,172,208,2,230,173,76,10,71,160,50,185,9671
2910 DATA 192,127,153,128,127,136,16,247,96,169,0,133,181,169,1,133,8878
2920 DATA 179,165,192,133,180,96,160,0,132,176,132,207,164,176,192,19,1797
2930 DATA 208,1,96,32,172,66,160,0,177,205,201,8,240,11,200,200,1356
2940 DATA 192,126,208,244,230,176,76,67,71,166,207,165,206,149,224,152,5370
2950 DATA 24,101,205,149,218,230,207,165,207,201,6,208,225,96,166,207,6132
2960 DATA 240,32,181,153,240,25,214,153,181,153,208,19,181,224,133,206,4946
2970 DATA 181,218,133,205,160,0,169,8,145,205,200,169,10,145,205,202,2903
2980 DATA 16,224,166,185,208,1,96,181,160,240,38,214,160,181,160,208,5016
2990 DATA 32,181,234,133,206,181,230,133,205,160,0,177,205,201,96,208,5224
3000 DATA 67,169,27,145,205,200,169,28,145,205,169,80,149,166,32,180,1493
3010 DATA 77,202,16,211,166,185,181,166,240,33,214,166,181,166,208,27,3983
3020 DATA 181,234,133,206,181,230,133,205,160,0,177,205,201,27,208,15,1946
3030 DATA 169,96,145,205,200,145,205,169,100,149,160,202,16,216,96,169,3253
3040 DATA 97,208,239,96,169,29,145,205,200,169,30,208,187,160,0,132,1427
3050 DATA 176,132,185,164,176,192,19,208,1,96,32,172,66,160,0,177,7845
3060 DATA 205,201,27,240,11,200,200,192,126,208,244,230,176,76,10,72,2211
3070 DATA 166,185,165,206,149,234,152,24,101,205,149,230,152,72,169,96,2743
3080 DATA 145,205,200,145,205,104,168,230,185,165,185,201,4,208,214,96,4952
3090 DATA 162,3,208,2,162,4,181,212,24,105,1,149,212,201,26,144,9016
3100 DATA 14,169,16,149,212,202,48,7,246,212,181,212,76,84,72,162,1465
3110 DATA 5,181,212,157,29,139,202,16,248,165,213,197,196,240,7,133,3992
3120 DATA 196,230,182,32,225,73,96,165,211,240,26,198,211,166,189,189,5892
3130 DATA 205,72,141,151,72,189,206,72,141,152,72,169,1,133,186,32,8804
3140 DATA 255,255,76,98,228,173,10,210,41,3,170,10,133,189,169,107,9464
3150 DATA 133,211,189,63,73,133,143,189,67,73,133,144,24,105,12,133,6814
3160 DATA 141,32,115,73,32,79,73,165,193,133,238,165,194,133,239,169,4805
3170 DATA 0,133,186,76,98,228,213,72,220,72,227,72,234,72,32,102,446
3180 DATA 73,32,241,72,96,32,71,73,32,22,73,96,32,102,73,32,1995
3190 DATA 22,73,96,32,71,73,32,241,72,96,164,143,162,31,185,0,7162
3200 DATA 134,153,255,133,185,0,135,153,255,134,200,202,16,240,198,143,5116
3210 DATA 169,0,164,142,153,1,131,169,195,153,255,130,198,142,96,165,3771
3220 DATA 143,24,105,31,168,162,31,185,0,134,153,1,134,185,0,135,6886
3230 DATA 153,1,135,136,202,16,240,230,143,169,0,164,142,153,0,131,9989
3240 DATA 169,195,153,2,131,230,142,96,192,48,48,192,10,224,10,224,103
3250 DATA 198,144,198,144,198,141,198,141,165,144,141,2,208,24,105,16,8627
3260 DATA 141,3,208,165,141,141,4,208,24,105,6,141,7,208,96,230,9081
3270 DATA 144,230,144,230,141,230,141,165,141,76,79,73,32,197,73,162,253
3280 DATA 0,164,143,189,165,73,153,0,134,153,1,134,189,181,73,153,16
3290 DATA 0,135,153,1,135,200,200,232,224,16,208,231,165,143,24,105,2577
3300 DATA 12,133,142,164,142,169,195,153,0,131,153,1,131,96,0,4,5089
3310 DATA 2,50,11,7,61,79,12,61,71,11,18,18,1,0,0,128,8048
3320 DATA 72,72,208,230,188,240,50,188,224,208,76,64,32,0,162,0,7860
3330 DATA 138,157,0,135,157,0,134,157,0,131,232,208,244,96,198,182,4057
3340 DATA 32,225,73,32,48,71,32,130,70,96,165,182,201,10,144,4,6665
3350 DATA 169,9,133,182,9,16,141,16,139,96,169,0,141,2,208,141,7227
3360 DATA 3,208,141,4,208,141,7,208,133,211,165,193,133,238,165,194,5895
3370 DATA 133,239,169,0,133,186,96,169,155,141,170,127,169,0,141,169,1508
3380 DATA 127,169,0,133,146,32,41,74,173,31,208,201,6,208,249,76,686
3390 DATA 32,64,169,0,141,8,210,162,3,142,15,210,162,7,157,0,6267
3400 DATA 210,202,16,250,96,169,0,141,0,210,141,1,210,96,169,0,7956
3410 DATA 141,3,210,141,2,210,96,169,0,141,4,210,141,5,210,141,9328
3420 DATA 6,210,141,7,210,96,32,41,74,162,1,169,121,141,4,210,7767
3430 DATA 169,166,141,5,210,169,10,141,6,210,169,36,141,7,210,32,7674
3440 DATA 77,66,32,78,74,32,77,66,202,16,224,96,162,255,142,252,3118
3450 DATA 2,169,0,133,146,32,247,67,173,252,2,201,255,240,249,142,6702
3460 DATA 252,2,169,1,133,146,96,165,146,208,3,76,98,228,165,238,2848
3470 DATA 5,239,240,13,198,238,165,238,201,255,208,239,198,239,76,162,9369
3480 DATA 74,198,145,165,145,208,228,165,195,133,145,76,126,72,165,186,3623
3490 DATA 208,13,169,50,141,2,210,169,70,141,3,210,32,247,67,96,8978
3500 DATA 169,128,133,131,169,112,133,133,169,4,141,184,66,169,24,141,9520
3510 DATA 183,66,169,0,133,243,133,244,162,5,169,0,149,153,202,16,70
3520 DATA 251,162,3,189,32,75,149,160,169,0,149,166,202,16,244,169,2159
3530 DATA 0,133,174,133,175,230,174,133,211,165,195,133,145,32,41,74,809
3540 DATA 165,193,133,238,165,194,133,239,96,48,96,128,176,166,191,224,5271
3550 DATA 5,240,2,230,191,166,191,189,75,75,133,192,189,81,75,133,1797
3560 DATA 193,189,87,75,133,194,189,93,75,133,195,169,1,141,88,86,9449
3570 DATA 32,41,74,96,8,7,6,5,4,3,128,128,0,128,0,128,1304
3580 DATA 3,2,2,1,1,0,10,8,6,4,2,1,0,2,1,3,3955
3590 DATA 165,184,72,160,4,132,148,169,0,133,197,162,3,134,147,189,764
3600 DATA 99,75,170,32,88,65,169,134,141,3,210,165,197,24,105,9,7777
3610 DATA 133,197,141,2,210,32,81,66,198,147,166,147,208,225,198,148,4939
3620 DATA 164,148,208,215,104,133,184,32,88,65,32,69,74,96,132,208,8662
3630 DATA 134,210,165,209,41,1,170,189,198,75,164,134,153,1,133,153,818
3640 DATA 2,133,153,13,133,153,14,133,230,209,164,208,166,210,96,85,3522
3650 DATA 169,132,208,134,210,165,209,41,1,170,189,215,75,76,177,75,1336
3660 DATA 170,149,132,208,134,210,164,134,162,7,185,4,133,201,153,208,3283
3670 DATA 4,169,24,208,6,201,24,208,2,169,153,153,4,133,200,202,1357
3680 DATA 16,232,166,210,164,208,96,32,69,74,169,164,141,3,210,162,1299
3690 DATA 160,142,2,210,32,30,76,224,45,208,5,169,162,141,3,210,9697
3700 DATA 202,208,238,32,69,74,96,160,200,32,247,67,136,16,250,96,820
3710 DATA 32,73,76,162,96,169,3,157,66,3,169,76,157,69,3,169,6686
3720 DATA 156,157,68,3,169,6,157,74,3,169,0,157,75,3,32,86,3452
3730 DATA 228,96,162,96,169,12,157,66,3,32,86,228,96,169,5,162,7874
3740 DATA 96,157,66,3,169,86,157,69,3,169,68,157,68,3,169,20,5502
3750 DATA 157,72,3,169,0,157,73,3,32,86,228,48,7,173,72,86,5414
3760 DATA 201,70,208,12,32,39,76,169,0,133,178,104,104,76,86,64,6317
3770 DATA 162,10,189,68,86,157,225,70,201,32,240,3,232,208,243,169,5380
3780 DATA 155,157,225,70,96,68,49,58,83,77,65,80,46,42,155,173,6370
3790 DATA 88,86,208,1,96,165,184,201,7,208,61,173,183,66,133,140,1472
3800 DATA 169,200,56,229,131,74,74,133,139,24,109,183,66,141,183,66,9653
3810 DATA 206,183,66,206,183,66,32,86,69,144,6,165,140,141,183,66,9329
3820 DATA 96,162,200,142,0,208,134,131,232,142,1,208,134,132,238,183,4745
3830 DATA 66,238,183,66,206,88,86,96,201,11,208,63,173,183,66,133,1005
3840 DATA 140,165,131,56,233,48,74,74,133,139,173,183,66,56,229,139,1477
3850 DATA 141,183,66,238,183,66,238,183,66,32,105,69,144,6,165,140,9516
3860 DATA 141,183,66,96,162,48,142,0,208,134,131,202,142,1,208,134,1242
3870 DATA 132,206,183,66,206,183,66,206,88,86,96,201,14,208,70,173,1497
3880 DATA 184,66,133,140,165,133,56,233,48,74,74,74,74,133,139,173,9585
3890 DATA 184,66,56,229,139,141,184,66,238,184,66,32,132,69,144,6,8677
3900 DATA 165,140,141,184,66,96,206,184,66,32,110,77,169,48,133,133,9364
3910 DATA 32,75,65,206,88,86,96,160,255,169,0,153,0,132,153,0,7983
3920 DATA 133,136,208,247,96,201,13,208,34,173,184,66,133,140,169,192,3526
3930 DATA 56,229,133,74,74,74,74,24,109,184,66,141,184,66,206,184,1252
3940 DATA 66,32,119,69,144,6,165,140,141,184,66,96,32,110,77,169,8536
3950 DATA 192,133,133,32,75,65,238,184,66,206,88,86,96,32,69,74,7407
3960 DATA 169,12,141,2,210,169,169,133,177,198,177,165,177,201,160,144,6214
3970 DATA 9,141,3,210,32,81,66,76,192,77,32,69,74,96,165,186,8261
3980 DATA 240,11,169,134,141,1,210,169,11,141,0,210,96,32,60,74,6627
3990 DATA 96,173,31,208,201,6,240,249,76,14,74,169,127,141,49,2,8128
4000 DATA 169,128,141,48,2,169,192,141,14,212,169,128,141,1,2,169,8758
4010 DATA 0,141,0,2,162,4,189,156,66,157,196,2,202,16,247,96,140
4020 DATA 146,10,0,66,0,238,225,244,233,239,238,225,236,128,247,229,1439
4030 DATA 225,244,232,229,242,128,243,229,242,246,233,227,229,128,226,245,3870
4040 DATA 236,236,229,244,233,238,0,0,0,0,0,0,0,128,243,238,8249
4050 DATA 239,247,128,247,225,242,238,233,238,231,160,0,132,146,132,186,7190
4060 DATA 32,41,74,166,198,208,26,169,8,141,31,208,169,90,133,240,2443
4070 DATA 185,0,142,153,0,125,169,0,153,0,142,153,0,124,200,208,65
4080 DATA 239,162,5,181,212,157,172,123,202,16,248,162,7,169,0,157,1191
4090 DATA 0,208,202,16,250,168,153,0,124,136,208,250,160,53,185,28,2314
4100 DATA 78,153,22,124,136,16,247,160,4,185,23,78,153,196,2,136,8845
4110 DATA 16,247,169,0,133,205,133,203,141,198,2,169,125,133,204,169,4127
4120 DATA 142,133,206,169,0,141,48,2,169,127,141,49,2,165,198,208,584
4130 DATA 43,230,198,32,110,79,169,15,133,200,169,15,133,150,164,150,1607
4140 DATA 185,52,86,168,185,150,79,133,203,133,205,164,200,177,203,32,4816
4150 DATA 61,79,176,8,198,150,16,230,198,200,16,222,160,0,140,21,9909
4160 DATA 127,185,0,125,153,0,142,200,208,247,162,7,142,4,212,169,2510
4170 DATA 0,133,20,173,31,208,240,38,201,6,240,23,165,20,240,243,3273
4180 DATA 202,16,233,172,21,127,200,196,240,208,2,160,0,140,21,127,125
4190 DATA 76,1,79,169,0,133,183,141,21,127,141,4,212,96,169,1,8097
4200 DATA 133,183,169,0,240,241,132,199,201,0,240,32,160,0,145,205,2736
4210 DATA 196,199,240,24,162,0,134,20,174,252,2,224,255,208,17,166,3462
4220 DATA 20,240,245,72,169,0,145,205,104,200,208,226,164,199,24,96,3993
4230 DATA 162,255,142,252,2,56,96,169,1,133,149,173,10,210,41,15,7685
4240 DATA 141,52,86,173,10,210,41,15,160,0,217,52,86,240,244,200,2941
4250 DATA 196,149,208,246,153,52,86,200,132,149,192,16,208,229,96,0,1963
4260 DATA 16,32,48,64,80,96,112,128,144,160,176,192,208,224,240,0,4100
4270 DATA 123,179,123,0,0,0,0,0,0,0,0,0,0,0,0,64,6144
4280 DATA 66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,0,4440
4290 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4290
4300 DATA 0,0,0,0,0,0,0,65,67,69,71,73,75,77,79,81,2304
4310 DATA 83,85,87,89,91,93,95,0,0,0,0,0,0,0,0,0,6858
4320 DATA 0,0,0,0,0,0,34,57,26,0,34,33,50,50,57,0,8223
4330 DATA 43,47,44,34,37,0,33,46,36,0,34,50,57,33,46,0,8710
4340 DATA 51,35,40,33,48,48,37,44,0,0,0,0,0,0,0,0,5852
4350 DATA 35,47,48,57,50,41,39,40,52,0,17,25,24,24,0,34,8087
4360 DATA 34,43,0,37,46,52,37,50,48,50,41,51,37,51,0,0,9019
4370 DATA 0,0,0,0,0,116,111,112,0,115,99,111,114,101,0,16,3462
4380 DATA 16,16,16,16,16,0,0,166,79,51,86,169,144,133,206,169,9671
4390 DATA 0,133,205,169,42,133,203,169,80,133,204,169,1,133,241,169,4244
4400 DATA 154,133,242,160,0,132,152,132,202,32,33,80,24,42,38,152,6461
4410 DATA 74,133,201,208,10,32,33,80,133,202,32,33,80,133,201,165,9820
4420 DATA 152,240,21,32,33,80,145,205,32,12,80,198,201,208,244,165,4032
4430 DATA 202,240,210,198,202,76,222,79,32,33,80,133,151,165,151,145,2138
4440 DATA 205,32,12,80,198,201,208,245,165,202,240,185,198,202,76,248,9552
4450 DATA 79,230,205,208,2,230,206,165,206,197,242,208,8,165,205,197,8211
4460 DATA 241,208,2,104,104,96,177,203,230,203,208,2,230,204,96,4,3260
4470 DATA 0,30,96,130,108,110,14,96,130,108,116,6,7,130,114,110,6383
4480 DATA 28,96,130,27,28,12,96,130,108,110,22,96,130,108,116,4,5594
4490 DATA 0,130,14,15,3,7,135,1,2,3,4,7,5,6,2,7,6329
4500 DATA 130,5,6,3,7,130,5,6,9,7,130,98,100,2,7,130,1838
4510 DATA 5,6,2,7,130,5,6,6,7,130,98,100,6,7,130,98,2666
4520 DATA 100,2,7,137,13,7,1,2,3,4,7,5,6,27,7,130,8168
4530 DATA 5,6,2,7,130,98,100,5,7,130,14,15,15,7,130,98,2067
4540 DATA 100,4,0,2,7,130,114,110,12,96,130,108,116,6,7,130,4720
4550 DATA 5,6,4,7,130,98,100,4,7,130,5,6,2,7,130,5,221
4560 DATA 6,4,7,132,98,100,5,6,2,7,132,5,6,98,104,10,1066
4570 DATA 96,130,108,116,6,7,135,1,2,3,4,7,5,6,5,7,7251
4580 DATA 130,5,6,8,7,132,5,6,98,100,2,7,130,114,110,14,2828
4590 DATA 96,130,108,116,2,7,130,98,100,4,0,135,5,6,98,100,3259
4600 DATA 7,5,6,9,7,133,98,100,7,5,6,5,7,130,5,6,9311
4610 DATA 2,7,130,98,100,14,7,130,98,100,2,7,130,5,6,2,951
4620 DATA 7,130,98,100,10,7,133,98,100,7,5,6,5,7,4,96,244
4630 DATA 130,108,116,2,7,130,14,15,11,7,131,13,98,100,2,7,947
4640 DATA 130,98,100,14,7,130,98,100,2,7,130,98,100,4,0,2,1705
4650 DATA 7,130,98,100,7,7,135,1,2,3,4,7,120,112,12,96,1661
4660 DATA 130,106,118,14,7,130,98,104,6,96,130,102,100,8,7,135,5090
4670 DATA 1,2,3,4,7,5,6,4,7,130,5,6,3,7,130,120,336
4680 DATA 112,12,96,130,108,110,2,96,130,106,118,2,7,130,98,100,6139
4690 DATA 2,7,130,114,110,6,96,130,108,116,2,7,130,98,100,2,4682
4700 DATA 7,130,98,100,4,0,2,7,130,98,100,4,7,130,5,6,1131
4710 DATA 3,7,130,5,6,5,7,130,5,6,2,7,130,5,6,6,8443
4720 DATA 7,130,5,6,2,7,130,5,6,8,7,130,98,100,6,7,675
4730 DATA 130,98,100,2,7,130,5,6,3,7,130,5,6,4,7,133,216
4740 DATA 5,6,7,5,6,16,7,130,8,10,2,7,130,98,100,2,885
4750 DATA 7,130,5,6,2,7,130,98,100,2,7,138,98,100,13,7,2436
4760 DATA 1,2,3,4,98,100,2,7,130,98,100,2,7,130,98,100,4205
4770 DATA 4,0,2,7,130,120,112,30,96,130,27,28,4,96,130,108,5073
4780 DATA 116,4,7,130,98,100,6,7,130,98,100,4,7,130,114,110,5312
4790 DATA 2,96,130,108,116,4,7,130,114,110,2,96,130,108,116,4,5805
4800 DATA 7,130,114,110,4,96,130,108,116,6,7,130,98,100,4,7,3806
4810 DATA 132,5,6,98,100,2,7,130,120,112,4,96,2,7,130,98,4001
4820 DATA 100,2,7,130,98,100,2,7,130,98,100,4,0,13,7,130,2290
4830 DATA 5,6,21,7,130,5,6,2,7,130,98,100,4,7,132,98,3015
4840 DATA 100,8,10,4,7,130,98,100,4,7,134,98,100,5,6,98,3087
4850 DATA 100,4,7,134,98,100,5,6,98,100,4,7,130,98,100,2,3292
4860 DATA 7,132,14,15,98,100,6,7,130,98,100,6,7,130,98,100,4724
4870 DATA 10,7,130,98,100,2,7,130,98,100,2,7,130,98,100,4,3891
4880 DATA 0,130,114,110,28,96,130,108,116,6,7,134,14,15,98,100,4663
4890 DATA 5,6,2,7,130,98,100,6,7,130,120,112,4,96,130,106,5996
4900 DATA 118,2,7,130,120,112,4,96,130,106,118,2,7,130,120,112,6686
4910 DATA 4,96,130,106,118,4,7,130,120,112,2,96,130,108,110,2,5881
4920 DATA 96,130,106,118,6,7,130,120,112,10,96,130,106,118,2,7,4904
4930 DATA 130,98,100,2,7,130,98,100,4,0,139,98,100,7,5,6,2175
4940 DATA 5,6,5,6,5,6,7,7,130,5,6,3,7,130,5,6,8566
4950 DATA 5,7,130,98,100,4,7,130,114,110,2,96,130,106,118,4,5672
4960 DATA 7,130,98,100,6,7,137,13,7,1,2,3,4,7,5,6,7508
4970 DATA 27,7,131,98,100,13,25,7,130,98,100,2,7,130,98,100,4860
4980 DATA 4,0,130,120,112,10,96,130,8,10,6,7,130,5,6,8,486
4990 DATA 7,130,98,100,4,7,130,98,100,8,7,130,98,100,8,7,3230
5000 DATA 130,114,110,18,96,130,108,116,4,7,130,114,110,6,96,130,6642
5010 DATA 106,112,4,96,130,27,28,20,96,130,102,100,2,7,130,98,5032
5020 DATA 100,4,0,5,7,130,5,6,16,7,130,5,6,5,7,130,83
5030 DATA 98,100,4,7,130,98,100,8,7,132,98,100,5,6,2,7,1322
5040 DATA 130,5,6,2,7,130,98,100,6,7,138,5,6,7,1,2,9432
5050 DATA 3,4,7,5,6,2,7,130,98,100,4,7,130,98,100,24,3189
5060 DATA 7,130,5,6,8,7,130,98,100,2,7,130,98,100,4,0,2433
5070 DATA 130,114,110,6,96,130,108,116,4,7,130,114,110,6,96,130,6664
5080 DATA 108,116,6,7,130,98,100,4,7,130,120,112,2,96,130,108,6511
5090 DATA 116,4,7,130,98,100,2,7,130,5,6,2,7,132,5,6,335
5100 DATA 98,100,2,7,130,5,6,4,7,130,5,6,8,7,132,98,1426
5110 DATA 100,8,10,2,7,130,98,104,10,96,130,108,116,2,7,136,5190
5120 DATA 13,7,1,2,3,4,1,2,3,7,132,5,6,5,6,5,7147
5130 DATA 7,130,98,100,2,7,130,98,100,4,0,130,98,100,6,7,3213
5140 DATA 130,98,100,2,7,132,5,6,98,100,6,7,130,98,100,6,3374
5150 DATA 7,130,98,100,8,7,130,98,100,4,7,130,98,100,8,7,3370
5160 DATA 130,98,100,4,7,130,5,6,12,7,130,98,100,4,7,130,3025
5170 DATA 98,100,2,7,130,5,6,6,7,130,98,100,6,7,130,98,3607
5180 DATA 100,2,7,130,5,6,10,7,130,98,100,2,7,130,98,100,4267
5190 DATA 4,0,130,98,100,2,7,130,5,6,2,7,130,120,112,4,2902
5200 DATA 96,132,106,118,5,6,2,7,134,5,6,98,100,5,6,2,471
5210 DATA 7,135,5,6,98,100,7,5,6,5,7,130,98,100,4,7,1292
5220 DATA 130,98,100,8,7,130,120,112,8,96,130,108,110,8,96,130,7249
5230 DATA 106,118,4,7,130,98,100,5,7,130,5,6,3,7,130,120,3087
5240 DATA 112,6,96,130,106,118,5,7,130,5,6,7,7,134,98,100,3908
5250 DATA 14,15,98,100,4,0,130,98,100,4,7,130,5,6,10,7,690
5260 DATA 130,5,6,2,7,130,98,100,2,7,130,5,6,2,7,130,1596
5270 DATA 120,112,8,96,130,106,112,4,96,130,102,100,4,7,130,5,4790
5280 DATA 6,3,7,130,5,6,2,7,130,5,6,3,7,130,98,100,2267
5290 DATA 2,7,130,5,6,3,7,130,5,6,5,7,130,98,104,4,1783
5300 DATA 96,130,108,116,11,7,130,5,6,14,7,131,13,98,100,2,2407
5310 DATA 7,130,98,100,4,0,130,98,100,6,7,130,114,110,6,96,5230
5320 DATA 132,1,2,3,4,2,7,130,98,100,9,7,130,5,6,11,684
5330 DATA 7,130,98,100,6,7,130,5,6,10,7,130,98,100,4,7,1950
5340 DATA 130,5,6,8,7,130,98,100,2,7,132,3,4,98,100,2,2363
5350 DATA 7,130,8,10,24,96,130,106,118,2,7,130,98,100,4,0,3588
5360 DATA 130,98,100,3,7,133,5,6,7,98,100,12,7,130,98,100,4182
5370 DATA 13,7,130,14,15,7,7,130,98,100,9,7,130,5,6,2,996
5380 DATA 7,130,5,6,3,7,130,98,100,7,7,130,5,6,5,7,380
5390 DATA 130,98,100,5,7,130,14,15,23,7,132,1,2,3,4,4,9002
5400 DATA 7,130,98,100,4,0,132,1,2,3,4,4,7,130,120,112,2956
5410 DATA 12,96,130,106,112,12,96,130,27,28,8,96,130,106,112,18,5677
5420 DATA 96,132,106,118,14,15,2,7,134,1,2,3,4,3,4,4,8292
5430 DATA 96,130,106,112,38,96,130,106,118,88,86,88,86,1,224,2,7544
5440 DATA 227,2,0,64,0,0,0,0,0,0,0,0,0,0,0,0,5927

Listing 2: Assembly

;SAVE#D:SNOWA.PT1
;-------------------
; part 1 of the game
;
; by: Barry Kolbe
;
;-------------------
	.OPT	NOLIST
;
;page zero variables
;
DRY	=	$82
PXP	=	$83	;2byter
PYP	=	$85	; "
ADD	=	$87
HMV	=	$88
CURCHR	=	$89
VERT	=	$8A
EADD	=	$8B
EHOLD	=	$8C
EYX	=	$8D
EYY	=	$8E
ICY	=	$8F
ICX	=	$90
VTIME	=	$91
VFLG	=	$92
XSP	=	$93
YSP	=	$94
RAND	=	$95
ICNT	=	$96
DATA	=	$97
UNIQUE	=	$98
FTIME	=	$99	;7 bytes
CARTIM	=	$A0	;6 bytes
RMTIM	=	$A6	;6 bytes
ROADC	=	$AC	;2 bytes
ROADG	=	$AE	;  "
CNT	=	$B0
SHD	=	$B1
MAPFLG	=	$B2
FUEL	=	$B3	;3 bytes
LIVES	=	$B6
DIRF	=	$B7
DIRECT	=	$B8
CARCNT	=	$B9
ICEON	=	$BA
Y1	=	$BB
Y2	=	$BC
ICEDIR	=	$BD
IDECNT	=	$BE
LEVEL	=	$BF
FULK	=	$C0
ICTL	=	$C1
ICTH	=	$C2
ICESPEED	=	$C3
THOUS	=	$C4
SPSND	=	$C5
IFLAG	=	$C6
IISY	=	$C7
IIY3	=	$C8
COUNT	=	$C9	;these are
IL	=	$CB
TL	=	$CB	;all
JL	=	$CD
BFL	=	$CD
INDR	=	$CB	;2 bytes
IND2	=	$CD
FOFS	=	$CF
YH	=	$D0
XD1	=	$D1
XH	=	$D2
ICECNT	=	$D3
SCRS	=	$D4	;6 bytes
FULX	=	$DA	;6 bytes
FULY	=	$E0	;6 bytes
CARX	=	$E6	;4 bytes
CARY	=	$EA	;4 bytes
OFFSCN	=	$EE	;2 bytes
SLENGTH	=	$F0
EDM	=	$F1	;2
SXP	=	$F3
SYP	=	$F4
;
;OS equates
;
CIOV	=	$E456
ICCOM	=	$0342
ICBAL	=	$0344
ICBAH	=	$0345
ICBLL	=	$0348
ICBLH	=	$0349
AUX1	=	$034A
AUX2	=	$034B
SETVBV	=	$E45C
XITVBV	=	$E462
RANDOM	=	$D20A
RTCLOK	=	$14
CONSOL	=	$D01F
EOL	=	$9B
SEOL	=	$BB
PCHR	=	54
;
COLOR0	=	$02C4
COLOR1	=	$02C5
COLOR2	=	$02C6
COLOR3	=	$02C7
COLOR4	=	$02C8
SDLSTL	=	$0230
CH	=	$02FC
;
STICK	=	$0278
STRIG	=	$0284
HPOSP0	=	$D000
HPOSM0	=	$D004
HSCROL	=	$D404
VSCROL	=	$D405
HITCLR	=	$D01E
P0PL	=	$D00C
P1PL	=	$D00D
;
;memory usage
;
SCNMEM	=	$9000
PMB	=	$8000
SET	=	$8C00
MYPMB	=	$8400
MSMEM	=	PMB+$0300
P0MEM	=	MYPMB
P1MEM	=	MYPMB+$0100
P2MEM	=	MYPMB+$0200
P3MEM	=	MYPMB+$0300
CHSET	=	$8C00
GOVER	=	$9B00
TXTWIN	=	$8B00
SCLN	=	TXTWIN+20
CHRLN1	=	TXTWIN+40
SC2	=	SCNMEM+128
SC3	=	SC2+128
SC4	=	SC3+128
SC5	=	SC4+128
SC6	=	SC5+128
SC7	=	SC6+128
SC8	=	SC7+128
SC9	=	SC8+128
SC10	=	SC9+128
SC11	=	SC10+128
BCKUP	=	$7FC0
SET2	=	$7D00
SCRLMEM	=	$7C00
;credits @ $7b00
;
;display list interrupt
;
	*=	PMB
DLI	PHA
DIC	LDA	#2
	STA	$D40A
	STA	$D01A
	PLA
	RTI
;
;character set
;
	*=	$8C00
	.INCLUDE	#D:SNOW.PT5
;
	*=	TXTWIN
	.SBYTE	" FUEL 150 PLOWS "
	.SBYTE	"3      SCORE "
	.SBYTE	"000000     "
;
	*=	GOVER
	.SBYTE	"  SNOWFLAKES "
	.SBYTE	"WIN       press "
	.SBYTE	"START      "
;
;display lists ;intro first
;then game board
;
	*=	$7F00
IDLST	.BYTE	$70,$70,$70,$70
	.BYTE	$70,$70,$70,$42
	.WORD	SNOWMEM
	.BYTE	$02,$70,$70,$70,$02
	.BYTE	$02,$70,$70,$70,$70
	.BYTE	$57
LMS	.WORD	SCRLMEM
	.BYTE	$70,$70,$70,$70,$46
	.WORD	TOPSCORE
	.BYTE	$41
	.WORD	IDLST
;
	*=	$7F80
DL1	.BYTE	$70,$70,$70
	.BYTE	$42
	.WORD	SNOWMEM
	.BYTE	2
	.BYTE	$75
SL1	.WORD	SCNMEM
	.BYTE	$75
	.WORD	SC2
	.BYTE	$75
	.WORD	SC3
	.BYTE	$75
	.WORD	SC4
	.BYTE	$75
	.WORD	SC5
	.BYTE	$75
	.WORD	SC6
	.BYTE	$75
	.WORD	SC7
	.BYTE	$75
	.WORD	SC8
	.BYTE	$75
	.WORD	SC9
	.BYTE	$75
	.WORD	SC10
	.BYTE	$D5
	.WORD	SC11
	.BYTE	$46
TMESS	.WORD	TXTWIN
	.BYTE	6,$41
	.WORD	DL1
;
;start of program
;
	*=	$4000
;
;save the display list
;for next levels
;
BEGIN	LDY	#50
MDL	LDA	DL1,Y
	STA	BCKUP,Y
	DEY
	BPL	MDL
	LDA	#>CHSET	;new chrset
	STA	756
	JSR	SETPMG	;player init
;
	LDX	#>VBLNK	;set vbi
	LDY	#<VBLNK
	LDA	#7
	JSR	SETVBV
	LDA	#0
	STA	IFLAG	;intro flag
;
;begin new level
;
NEWBEG	LDA	#0
	STA	DIRF
	STA	MAPFLG
	JSR	GETDIR
	JMP	NEWB
NDIRC	JSR	CLOSE6
;
NEWB	JSR	INIT
	JSR	REPLAY
	LDA	#3
	STA	LIVES
	LDA	#0
	STA	ICEON
	JSR	SHOLIV
NLEVL	JSR	STARTI
	JSR	FIGLEV
	JSR	RESFUL
	JSR	DSPFUL
	JSR	REPLAY
	JSR	CLRPM
	LDA	DIRF
	BNE	DROK
MAP2	LDA	MAPFLG	;intern map
	BNE	DROK
	LDA	#1
	STA	MAPFLG
	JSR	UNCOM
	JMP	SKP
DROK	JSR	GETFIL
	JSR	LOADMP
SKP	JSR	FNDFUL
	JSR	FNDCRS
	JSR	CNTRDS
	JSR	COPYDL
	JSR	SETSCN
	LDA	#$0B
	STA	DIRECT
	JSR	DEFPLR
	LDA	#1
	STA	VFLG
;
;main loop
;
MAIN	LDA	CONSOL
	CMP	#6
	BNE	MN2
	JMP	STKEY
MN2	LDA	STICK
	STA	DIRECT
	JSR	DEFPLR
	STA	HITCLR
	JSR	MOVPLR
	JSR	REMOVE
	LDA	644
	BNE	NTRG
	JSR	JMPEDG
NTRG	JSR	ICESND
	LDA	P0PL
	CMP	#12
	BCS	OUCH
	LDA	P1PL
	CMP	#12
	BCS	OUCH
	LDA	ROADG+1
	CMP	ROADC+1
	BNE	KL
	LDA	ROADG
	CMP	ROADC
	BNE	KL
	JSR	WAITSM
	JMP	NLEVL
KL	LDA	FUEL
	ORA	FUEL+1
	ORA	FUEL+2
	BNE	KK
OUCH	STA	HITCLR
	JSR	REMP23
	JSR	SPIN
	JSR	GRESET
	STA	HITCLR
	JSR	DELAY
	JMP	KK
OOPS	JMP	GAMOVR
KK	LDA	LIVES
	BEQ	OOPS
	LDA	CH
	CMP	#$FF
	BEQ	NOPAUS
	JSR	PAUSE
NOPAUS	JMP	MAIN
;
;set pmg
;
SETPMG	LDA	#62
	STA	559
	LDA	#17	;5th enable
	STA	623
	LDA	#3
	STA	53277
	LDA	#>PMB
	STA	54279
	LDA	#$28	;yellow
	STA	704
	LDA	#6	;black
	STA	705
	LDA	#$A6
	STA	706
	STA	707
	LDA	#$80
	STA	PXP
	LDA	#$70
	STA	PYP
	LDA	#1
	STA	53258
	STA	53259
	RTS
;
;clear pm area
;
CLRPM	LDY	#$FF
	LDA	#0
CPM	STA	P0MEM,Y
	STA	P1MEM,Y
	STA	P2MEM,Y
	STA	P3MEM,Y
	STA	MSMEM,Y
	DEY
	CPY	#$FF
	BNE	CPM
	RTS
;
;define plrs
;
DEFPLR	LDX	#3
	LDA	DIRECT
DF1	CMP	DIRTAB,X
	BEQ	DFOK
	DEX
	BPL	DF1
	RTS
DFOK	LDA	PD0L,X
	STA	JL
	LDA	PD0H,X
	STA	JL+1
	LDA	PD1L,X
	STA	IL
	LDA	PD1H,X
	STA	IL+1
	TXA
	PHA
	LDA	PYP
	STA	Y1
	CLC
	ADC	YTB,X
	STA	PYP+1
	STA	Y2
	TAY
	LDA	#0
	STA	P1MEM-1,Y
	LDY	#0
DFP	LDA	(JL),Y
	LDX	Y1
	STA	P0MEM,X
	LDA	(IL),Y
	LDX	Y2
	STA	P1MEM,X
	INY
	INC	Y1
	INC	Y2
	CPY	#16
	BNE	DFP
	LDX	Y2
	STA	P1MEM,X
	LDX	PXP
	STX	HPOSP0
	PLA
	TAX
	LDA	PXP
	CLC
	ADC	XTB,X
	STA	PXP+1
	STA	HPOSP0+1
	RTS
;
DIRTAB	.BYTE	11,7,14,13
XTB	.BYTE	$FF,$01,$00,$00
YTB	.BYTE	$00,$00,$FF,$01
;
;player definitions & tables
;
PD0L	.BYTE	<P0D1,<P0D2,<P0D3,<P0D4
PD0H	.BYTE	>P0D1,>P0D2,>P0D3,>P0D4
PD1L	.BYTE	<P1D1,<P1D2,<P1D3,<P1D4
PD1H	.BYTE	>P1D1,>P1D2,>P1D3,>P1D4
P0D1	.BYTE	$00,$00,$00,$FF
	.BYTE	$FF,$76,$76,$76
	.BYTE	$76,$76,$76,$FF
	.BYTE	$FF,$00,$00,$00
P0D2	.BYTE	$00,$00,$00,$FF
	.BYTE	$FF,$6E,$6E,$6E
	.BYTE	$6E,$6E,$6E,$FF
	.BYTE	$FF,$00,$00,$00
P0D3	.BYTE	$00,$66,$66,$7E
	.BYTE	$7E,$7E,$7E,$7E
	.BYTE	$7E,$66,$66,$66
	.BYTE	$7E,$7E,$66,$00
P0D4	.BYTE	$00,$66,$7E,$7E
	.BYTE	$66,$66,$66,$7E
	.BYTE	$7E,$7E,$7E,$7E
	.BYTE	$7E,$66,$66,0
;
P1D1	.BYTE	$00,$AA,$AA,$80
	.BYTE	$80,$84,$84,$84
	.BYTE	$84,$84,$84,$80
	.BYTE	$80,$AA,$AA,$00
P1D2	.BYTE	$00,$FD,$FD,$01
	.BYTE	$01,$61,$61,$61
	.BYTE	$61,$61,$61,$01
	.BYTE	$01,$FD,$FD,$00
P1D3	.BYTE	0,$FF,$FF,$00
	.BYTE	$99,$99,$18,$18
	.BYTE	$99,$99,$18,$18
	.BYTE	$99,$99,$00,$00
P1D4	.BYTE	$00,$00,$81,$99
	.BYTE	$18,$18,$99,$99
	.BYTE	$18,$18,$99,$99
	.BYTE	$00,$FF,$FF,$00
;
;delay
;
LDL	LDY	#19
	BNE	DLN
DELAY	LDY	#7
DLN	JSR	WAIT
	DEY
	BNE	DLN
	RTS
;
;initialize
;
;set up 128 table
INIT	LDY	#0
	LDA	#<SCNMEM
	STA	M128L
	LDA	#>SCNMEM
	STA	M128H
TLP	LDA	M128L,Y
	CLC
	ADC	#128
	STA	M128L+1,Y
	LDA	M128H,Y
	ADC	#0
	STA	M128H+1,Y
	INY
	CPY	#33
	BNE	TLP
;
	LDX	#7	;score & fuel
	LDA	#$10	;IC $10
SCF	STA	SCRS,X
	DEX
	BPL	SCF
	STA	THOUS
	JSR	RESFUL
	LDA	#3	;set lives
	STA	LIVES
	LDA	#$13
	STA	TXTWIN+16
	LDA	#$60
	STA	ICECNT
	LDA	#$FF
	STA	LEVEL
	RTS
;
CLRTAB	.BYTE	$D8,$44,$0A,$46,$00
;
STSCRL	LDA	#>SL1
	STA	JL+1
	LDA	#<SL1
	STA	JL
	RTS
;
;get scn pos
;
WHER	LDY	DRY
WHERE	LDA	M128L,Y
	STA	JL
	LDA	M128H,Y
	STA	JL+1
	RTS
;
;shadow scrols
;
SMX	.BYTE	22	;pos on scrn
SMY	.BYTE	4
;
;move
;
SCROLL	LDA	DIRECT
;
MMR	CMP	#7	;rt?
	BNE	MML
	JSR	LOOKR
	BCC	RA1
	RTS
RA1	LDA	SXP
	CMP	#83
	BCC	HO
	RTS
HO	LDA	#1
	STA	VERT
	JSR	PLWSND
KB	LDA	#1
	STA	ADD
	JSR	CORSH
	INC	SMX
	INC	SXP
	LDX	#3
KA	STX	HSCROL
	JSR	WAIT
	JSR	TRACKR
	DEX
	BPL	KA
	DEC	VERT
	LDA	VERT
	BPL	KB
FULOUT	JSR	SFUEL
	JSR	OFF2
	JSR	CKFTIM
	RTS
;
MML	CMP	#11
	BNE	MUP
	JSR	LOOKL
	BCC	LA1
	RTS
LA1	LDA	SXP
	BNE	HQ
	RTS
HQ	LDA	#1
	STA	VERT
	JSR	PLWSND
KD	LDX	#0
KC	STX	HSCROL
	JSR	WAIT
	JSR	TRACKL
	INX
	CPX	#4
	BNE	KC
	LDA	#$FF
	STA	ADD
	LDX	#0
	STX	HSCROL
	JSR	CORSH
	DEC	SXP
	DEC	SMX
	DEC	VERT
	LDA	VERT
	BPL	KD
	JMP	FULOUT
;
;coarse h scrol
;
CORSH	LDY	#0
CSA	LDA	SL1,Y
	CLC
	ADC	ADD
	STA	SL1,Y
	INY
	INY
	INY
	CPY	#33
	BNE	CSA
	RTS
;
;up
;
MUP	CMP	#14
	BNE	MDN
	JSR	LOOKU
	BCC	UA1
	RTS
UA1	LDA	SYP
	BEQ	NOM
	JSR	PLWSND
	LDA	#$FF
	STA	ADD
	JSR	CORSV
	DEC	SYP
	DEC	SMY
	LDX	#15
U1	STX	VSCROL
	JSR	WAIT
	JSR	TRACKU
	DEX
	BPL	U1
	LDA	#0
	STA	VSCROL
	JMP	FULOUT
	RTS
;
;down
;
MDN	CMP	#13
	BNE	NOM
	JSR	LOOKD
	BCC	DA1
	RTS
DA1	LDA	SYP
	CMP	#9
	BCC	D1
	RTS
D1	JSR	PLWSND
	LDX	#0
D2	STX	VSCROL
	JSR	WAIT
	JSR	TRACKU
	INX
	CPX	#16
	BNE	D2
	LDX	#0
	STX	VSCROL
	LDA	#1
	STA	ADD
	JSR	CORSV
	INC	SYP
	INC	SMY
	JMP	FULOUT
NOM	RTS
;
;coarse vrt scrl
;
CORSV	LDA	ADD
	BMI	CSV
	LDY	#0
CVL	LDA	SL1,Y
	CLC
	ADC	#$80
	STA	SL1,Y
	INY
	LDA	SL1,Y
	ADC	#0
	STA	SL1,Y
	INY
	INY
	CPY	#33
	BNE	CVL
	RTS
;
CSV	LDY	#0
CVP	LDA	SL1,Y
	SEC
	SBC	#$80
	STA	SL1,Y
	INY
	LDA	SL1,Y
	SBC	#0
	STA	SL1,Y
	INY
	INY
	CPY	#33
	BNE	CVP
	RTS
;
;wait a jiffy
;
WAIT	LDA	#0
	STA	$14
WW2	LDA	$14
	BEQ	WW2
	RTS
;
;fine scrl plr
;
MOVPLR	LDA	DIRECT
	CMP	#7
	BNE	MLL
	LDA	PXP
	CMP	#$7C
	BCC	GOR
	LDA	SXP
	CMP	#83
	BCS	GOR
	JMP	MOUT
GOR	LDA	PXP
	CMP	#$C8
	BCS	MVRET
	JSR	LOOKR
	BCC	GOR1
	RTS		;nope
GOR1	JSR	PLWSND
	LDY	#7
RL1	INC	PXP
	LDX	PXP
	STX	HPOSP0
	INC	PXP+1
	LDX	PXP+1
	STX	HPOSP0+1
	JSR	WAIT
	JSR	TRACKR
	DEY
	BPL	RL1
	INC	SMX
	INC	SMX
	JMP	FULOUT
MOUT	JSR	SCROLL
MVRET	RTS
;
MLL	CMP	#11
	BNE	MDD
	JSR	LOOKL
	BCC	GOL2
	RTS
GOL2	LDA	PXP
	CMP	#132	;124+8
	BCS	GOL1
	LDA	SXP
	BNE	MOUT
GOL	LDA	PXP
	CMP	#$30
	BEQ	MVRET
	BCC	MVRET
GOL1	JSR	PLWSND
	LDY	#7
LL1	DEC	PXP
	LDX	PXP
	STX	HPOSP0
	DEC	PXP+1
	LDX	PXP+1
	STX	HPOSP0+1
	JSR	WAIT
	JSR	TRACKL
	DEY
	BPL	LL1
	DEC	SMX
	DEC	SMX
	JMP	FULOUT
;
MDD	CMP	#13
	BNE	MUU
	JSR	LOOKD
	BCC	GD3
	RTS
GD3	LDA	PYP
	CMP	#$60
	BCC	GDN
	LDA	SYP
	CMP	#9
	BCS	GDN
	JMP	MOUT
GDN	LDA	PYP
	CMP	#$C0
	BCS	MVRET
	LDA	#15
	STA	VERT
	JSR	PLWSND
GD2	LDA	PYP
	STA	Y1
	LDA	PYP+1
	STA	Y2
	TAY
	LDA	#0
	STA	P1MEM,Y	;eras top
	LDX	#15
GD1	LDY	Y1
	LDA	P0MEM+15,Y
	STA	P0MEM+16,Y
	LDY	Y2
	LDA	P1MEM+15,Y
	CMP	#$18
	BNE	FOA
	LDA	#$99
	BNE	FOB
FOA	CMP	#$99
	BNE	FOB
	LDA	#$18
FOB	STA	P1MEM+16,Y
	DEC	Y1
	DEC	Y2
	DEX
	BPL	GD1
	INC	PYP
	INC	PYP+1
	JSR	WAIT
	DEC	VERT
	LDA	VERT
	BPL	GD2
	INC	SMY
	JMP	FULOUT
;
;
MUU	CMP	#14
	BEQ	MU3
GU4	JMP	MVRET
MU3	JSR	LOOKU
	BCC	MU4
	RTS
MU4	LDA	PYP
	CMP	#$70
	BCS	GUU
	LDA	SYP
	BEQ	GUU
	JMP	MOUT
GUU	LDA	PYP
	CMP	#$30
	BNE	GU5
	JMP	MOUT
GU5	JSR	PLWSND
	LDA	#15
	STA	VERT
GU2	LDY	PYP
	LDX	#15
GU1	LDA	P0MEM,Y
	STA	P0MEM-1,Y
	LDA	P1MEM,Y
	CMP	#$18
	BNE	FOC
	LDA	#$99
	BNE	FOD
FOC	CMP	#$99
	BNE	FOD
	LDA	#$18
FOD	STA	P1MEM-1,Y
	INY
	DEX
	BPL	GU1
	JSR	WAIT
	DEC	PYP
	DEC	VERT
	LDA	VERT
	BPL	GU2
	DEC	SMY
	JMP	FULOUT
;
;locate :result in curchr
;
LOOKR	LDY	SMY
	JSR	WHERE
	LDY	SMX
	INY
	INY
LKRET	LDA	(JL),Y
	STA	CURCHR
	JSR	CKCHAR
	RTS
;
LOOKL	LDY	SMY
	JSR	WHERE
	LDY	SMX
	DEY
	DEY
	JMP	LKRET
;
LOOKD	LDY	SMY
	INY
	JSR	WHERE
	LDY	SMX
	JMP	LKRET
;
LOOKU	LDY	SMY
	DEY
	JSR	WHERE
	LDY	SMX
	JMP	LKRET
;
;erase chr beneath dozer
;repalce with next char.
;which is a road w/o snow
;
REMOVE	LDY	SMY
	JSR	WHERE
	LDY	SMX
	LDA	(JL),Y
	LDX	#15
RB1	CMP	ROADS,X
	BEQ	SF5
	DEX
	BPL	RB1
	JMP	SF6
SF5	CMP	#$1B	;cng car to road
	BEQ	SF8
	CMP	#$1D
	BNE	SF7
SF8	PHA		;save car
	LDA	#$61
	STA	(JL),Y
	INY
	STA	(JL),Y
	JSR	BONSCR
	JSR	HORN
	PLA
	CMP	#$1B
	BEQ	SFA
	BNE	SF6
SF7	TAX
	INX
	TXA
	STA	(JL),Y
	INY
	LDA	(JL),Y
	TAX
	INX
	TXA
	STA	(JL),Y
	CMP	#$0B	;    fuel?
	BEQ	SF6
SFA	INC	ROADG
	BNE	SH1
	INC	ROADG+1
;
SH1	JSR	DOSCOR	;show score
;
SF6	LDA	CURCHR
	CMP	#$08	;fuel?
	BNE	CAR?
;
	INC	CURCHR	;empty fuel
	LDY	SMY
	JSR	WHERE
	LDX	FOFS	;get pos.
FFA	LDA	JL+1
	CMP	FULY,X
	BEQ	FFB
FFC	DEX
	BPL	FFA
	RTS		;shouldnt happen
FFB	LDA	SMX	;put it on
	CLC		;screen
	ADC	JL
	CMP	FULX,X
	BNE	FFC
	LDA	#100	;got it
	STA	FTIME,X	;set timer
	JSR	FILSND	;sound
	JSR	RESFUL	;show it
	JSR	DSPFUL
SF2	RTS
;
;hit a car
;
CAR?	LDY	SMY	;find out
	JSR	WHERE	;which one
	LDX	CARCNT
	BEQ	SF2
CB1	LDA	JL+1
	CMP	CARY,X
	BEQ	CB2
CB3	DEX
	BPL	CB1
	RTS		;nope
CB2	LDA	JL
	CLC
	ADC	SMX
	CMP	CARX,X
	BNE	CB3
	LDA	#50	;set timer
	STA	CARTIM,X
	RTS
;
;road,fuel,car chrs
; 8 = fuel $1b= car
;
ROADS	.BYTE	$60,$62,$64,$66
	.BYTE	$68,$6A,$6C,$6E
	.BYTE	$70,$72,$74,$76
	.BYTE	$78,$08,$1B,$1D
	.BYTE	$61,$63,$65,$67,$69
	.BYTE	$6B,$6D,$6F,$71
	.BYTE	$73,$75,$77,$79
;
;check if about to move
;onto a valid char.
;
CKCHAR	LDX	#28
CK1	CMP	ROADS,X
	BEQ	CROK
	DEX
	BPL	CK1
	SEC		;no move
	RTS
CROK	CLC		;move ok
	RTS
;
;decrease fuel
;
SFUEL	DEC	FUEL+2
	LDA	FUEL+2
	ORA	FUEL+1
	ORA	FUEL
	BEQ	SF3
	LDA	FUEL+2
	BPL	SF3
	LDA	#9
	STA	FUEL+2
	DEC	FUEL+1
	LDA	FUEL+1
	BPL	SF3
	LDA	#9
	STA	FUEL+1
	DEC	FUEL
SF3	JSR	DSPFUL
FRET	RTS
;
;show fuel left
;
DSPFUL	LDX	#2
DS	LDA	FUEL,X
	ORA	#$10
	STA	TXTWIN+6,X
	DEX
	BPL	DS
	RTS
;
;wait some
;
WAITSM	LDA	#0
	LDX	#15	;15 secs
	STA	VFLG
WSM	JSR	LDL
	DEX
	BPL	WSM
	RTS
;
;pt2 is rest of game
;pt3 is the screen maker
;pt4 is the introduction
;
	.INCLUDE	#D:SNOW.PT2
	.INCLUDE	#D:SNOW.PT4
	.INCLUDE	#D:SNOW.PT3
;
;variables
;
RANDS	.DS	16
DBUF	.DS	20
EDGFLG	.BYTE	1
M128L	.DS	36
M128H	.DS	36
	*=	$02E0
	.WORD	BEGIN
	.END

Listing 3: Assembly

;SAVE#D:SNOW.PT2
;----------------
; part 2 of game
;
; by:Barry Kolbe
;
;----------------
;
;load a map from disk
;
LOADMP	LDX	#$10
	LDA	#$0C
	STA	ICCOM,X
	JSR	CIOV
	LDX	#$10
	LDA	#3
	STA	ICCOM,X
	LDA	#>MAPNAM
	STA	ICBAH,X
	LDA	#<MAPNAM
	STA	ICBAL,X
	LDA	#4
	STA	AUX1,X
	LDA	#0
	STA	AUX2,X
	JSR	CIOV
	BPL	RDOK
	RTS
RDOK	LDX	#$10
	LDA	#>SCNMEM
	STA	ICBAH,X
	LDA	#<SCNMEM
	STA	ICBAL,X
	LDA	#0
	LDA	#10	;10 pages
	STA	ICBLH,X
	LDA	#7	;read it
	STA	ICCOM,X
	JSR	CIOV
	RTS
;
MAPNAM	.BYTE	"D1:SMAP.   ",EOL
;
;count all the roads
;each pair of road bytes
;counts as 1 point
;
CNTRDS	LDY	#0
	STY	ROADC
	INC	ROADC
	STY	ROADC+1
	STY	CNT	;lines
	JSR	WHERE
CR4	LDY	#0
CR1	LDA	(JL),Y
	LDX	#12
CR3	CMP	ROADS,X	;is it road?
	BEQ	CR2
	DEX
	BPL	CR3
CR6	INY		;skip over 2
	INY
	CPY	#0
	BNE	CR1
	INC	JL+1
	INC	CNT
	LDY	CNT
	CPY	#10
	BNE	CR4
	RTS
CR2	INC	ROADC
	BNE	CR5
	INC	ROADC+1
CR5	JMP	CR6
;
;copy the game dlist
;back for next board
;
COPYDL	LDY	#50
CC1	LDA	BCKUP,Y
	STA	DL1,Y
	DEY
	BPL	CC1
	RTS
;
;reset fuel in text window
;
RESFUL	LDA	#0
	STA	FUEL+2
	LDA	#1
	STA	FUEL
	LDA	FULK
	STA	FUEL+1
	RTS
;
;find fuel containers
;in map-store their
;positions
;
FNDFUL	LDY	#0
	STY	CNT
	STY	FOFS
SS4	LDY	CNT
	CPY	#19	;20 lines
	BNE	SS3
	RTS
SS3	JSR	WHERE
	LDY	#0
SS2	LDA	(JL),Y
	CMP	#8	;fuel chr
	BEQ	SS1
SS5	INY
	INY
	CPY	#126	;end of line?
	BNE	SS2
	INC	CNT
	JMP	SS4
;
SS1	LDX	FOFS	;store x,y
	LDA	JL+1	;positions
	STA	FULY,X
	TYA
	CLC
	ADC	JL
	STA	FULX,X
	INC	FOFS
	LDA	FOFS
	CMP	#6	;only 6 allowed
	BNE	SS5
	RTS
;
;check timers-fuel first
;
CKFTIM	LDX	FOFS
	BEQ	CCB	;no fuel
FTC	LDA	FTIME,X
	BEQ	FTB
	DEC	FTIME,X
	LDA	FTIME,X
	BNE	FTB
	LDA	FULY,X
	STA	JL+1
	LDA	FULX,X
	STA	JL
	LDY	#0
	LDA	#8
	STA	(JL),Y
	INY
	LDA	#$0A
	STA	(JL),Y
FTB	DEX
	BPL	FTC
;
;check bonus car timers
;
CCB	LDX	CARCNT
	BNE	CTC	;yes
	RTS		;no cars
CTC	LDA	CARTIM,X
	BEQ	CTD
	DEC	CARTIM,X
	LDA	CARTIM,X
	BNE	CTD
	LDA	CARY,X
	STA	JL+1
	LDA	CARX,X
	STA	JL
	LDY	#0	;put bonus
	LDA	(JL),Y	;car on scn
	CMP	#$60	;snow bckgrnd?
	BNE	CTF
	LDA	#$1B	;yes
	STA	(JL),Y
	INY
	LDA	#$1C
CTG	STA	(JL),Y
	LDA	#$50
	STA	RMTIM,X
	JSR	BELL
CTD	DEX
	BPL	CTC
;
;timers to remove cars
;
	LDX	CARCNT
CTK	LDA	RMTIM,X
	BEQ	RRA
	DEC	RMTIM,X
	LDA	RMTIM,X
	BNE	RRA
	LDA	CARY,X
	STA	JL+1
	LDA	CARX,X
	STA	JL
	LDY	#0
	LDA	(JL),Y
	CMP	#$1B
	BNE	CTI
	LDA	#$60	;snow road
CTM	STA	(JL),Y
	INY
	STA	(JL),Y
	LDA	#100	;reset timer
	STA	CARTIM,X
RRA	DEX
	BPL	CTK
	RTS
;
CTI	LDA	#$61	;plain road
	BNE	CTM
	RTS
CTF	LDA	#$1D
	STA	(JL),Y
	INY
	LDA	#$1E
	BNE	CTG
;
;find bonus cars on map
;
FNDCRS	LDY	#0
	STY	CNT
	STY	CARCNT
FCA	LDY	CNT
	CPY	#19	;20 lines
	BNE	FCE
	RTS
FCE	JSR	WHERE
	LDY	#0
FCC	LDA	(JL),Y
	CMP	#$1B	;cars
	BEQ	FCB
FCD	INY
	INY
	CPY	#126	;end of line?
	BNE	FCC
	INC	CNT
	JMP	FCA
FCB	LDX	CARCNT
	LDA	JL+1
	STA	CARY,X
	TYA
	CLC
	ADC	JL
	STA	CARX,X
	TYA
	PHA
	LDA	#$60	;repl w/road
	STA	(JL),Y
	INY
	STA	(JL),Y
	PLA
	TAY
	INC	CARCNT
	LDA	CARCNT
	CMP	#4	;only 4 cars
	BNE	FCD
	RTS
;
;show bonus & regular score
;
BONSCR	LDX	#3	;100 bonus
	BNE	SCD
;
DOSCOR	LDX	#4	;reg. score
SCD	LDA	SCRS,X
	CLC
	ADC	#1
	STA	SCRS,X
SCB	CMP	#$1A
	BCC	SCE
	LDA	#$10
	STA	SCRS,X
	DEX
	BMI	SCE
	INC	SCRS,X
	LDA	SCRS,X
	JMP	SCB
SCE	LDX	#5
SCC	LDA	SCRS,X
	STA	SCLN+9,X
	DEX
	BPL	SCC
	LDA	SCRS+1
	CMP	THOUS
	BEQ	CRET
	STA	THOUS
	INC	LIVES
	JSR	SHOLIV
CRET	RTS
;
;move the storm
;
MOVICE	LDA	ICECNT	;time for
	BEQ	NEWD	;new direction?
	DEC	ICECNT	;no
	LDX	ICEDIR	;get direction
	LDA	ICETB,X
	STA	IJMP+1
	LDA	ICETB+1,X
	STA	IJMP+2
	LDA	#1
	STA	ICEON
IJMP	JSR	$FFFF	;move it
	JMP	XITVBV
;
;get a new direction
;and set flags
;
NEWD	LDA	RANDOM
	AND	#3
	TAX
	ASL	A
	STA	ICEDIR
	LDA	#$6B	;time on
	STA	ICECNT	;screen
	LDA	IYP,X	;starting
	STA	ICY	;position
	LDA	IXP,X
	STA	ICX
	CLC
	ADC	#$0C	;eyes
	STA	EYX
	JSR	PUTICE	;put definition
	JSR	ZB3	;in memory
	LDA	ICTL	;time spent
	STA	OFFSCN	;off screen
	LDA	ICTH
	STA	OFFSCN+1
	LDA	#0	;off yet
	STA	ICEON
	JMP	XITVBV
;
;move table
;
ICETB	.WORD	ZRU
	.WORD	ZLD
	.WORD	ZRD
	.WORD	ZLU
;
;diagonal movement
;
ZRU	JSR	ZIRT
	JSR	ZIUP
	RTS
ZLD	JSR	ZILF
	JSR	ZIDN
	RTS
ZRD	JSR	ZIRT
	JSR	ZIDN
	RTS
ZLU	JSR	ZILF
	JSR	ZIUP
	RTS
;
;slide it up
;
ZIUP	LDY	ICY
	LDX	#31
ZIUA	LDA	P2MEM,Y
	STA	P2MEM-1,Y
	LDA	P3MEM,Y
	STA	P3MEM-1,Y
	INY
	DEX
	BPL	ZIUA
	DEC	ICY
	LDA	#0
	LDY	EYY
	STA	MSMEM+1,Y
	LDA	#$C3
	STA	MSMEM-1,Y
	DEC	EYY
	RTS
;
;go down
;
ZIDN	LDA	ICY
	CLC
	ADC	#31
	TAY
	LDX	#31
ZIDA	LDA	P2MEM,Y
	STA	P2MEM+1,Y
	LDA	P3MEM,Y
	STA	P3MEM+1,Y
	DEY
	DEX
	BPL	ZIDA
	INC	ICY
	LDA	#0
	LDY	EYY
	STA	MSMEM,Y
	LDA	#$C3
	STA	MSMEM+2,Y
	INC	EYY
	RTS
;
IYP	.BYTE	$C0,$30,$30,$C0
IXP	.BYTE	$0A,$E0,$0A,$E0
;
;move storm left
;
ZILF	DEC	ICX
	DEC	ICX
	DEC	EYX
	DEC	EYX
ZB3	LDA	ICX
	STA	HPOSP0+2
	CLC
	ADC	#16
	STA	HPOSP0+3
	LDA	EYX
	STA	HPOSM0
	CLC
	ADC	#6
	STA	HPOSM0+3
	RTS
;
;move stormy right
;
ZIRT	INC	ICX
	INC	ICX
	INC	EYX
	INC	EYX
	LDA	EYX
	JMP	ZB3
;
;put snow storm on screen
;
PUTICE	JSR	CLR23
	LDX	#0
	LDY	ICY
ICA	LDA	ICEDAT,X
	STA	P2MEM,Y
	STA	P2MEM+1,Y
	LDA	ICDT2,X
	STA	P3MEM,Y
	STA	P3MEM+1,Y
	INY
	INY
	INX
	CPX	#16
	BNE	ICA
	LDA	ICY
	CLC
	ADC	#$0C
	STA	EYY
	LDY	EYY
	LDA	#$C3
	STA	MSMEM,Y
	STA	MSMEM+1,Y
	RTS
;
;stormy's definition
;
ICEDAT	.BYTE	$00,$04,$02,$32
	.BYTE	$0B,$07,$3D,$4F
	.BYTE	$0C,$3D,$47,$0B
	.BYTE	$12,$12,$01,$00
ICDT2	.BYTE	$00,$80,$48,$48
	.BYTE	$D0,$E6,$BC,$F0
	.BYTE	$32,$BC,$E0,$D0
	.BYTE	$4C,$40,$20,$00
;
;erase plyrs 2,3 & missiles
;
CLR23	LDX	#0
	TXA
C23	STA	P3MEM,X
	STA	P2MEM,X
	STA	MSMEM,X
	INX
	BNE	C23
	RTS
;
;reset game due to
;lost lives
;
GRESET	DEC	LIVES
	JSR	SHOLIV
	JSR	RESFUL
	JSR	DSPFUL
	RTS
;
;show # of lives
;
SHOLIV	LDA	LIVES
	CMP	#10
	BCC	GRT
	LDA	#9
	STA	LIVES
GRT	ORA	#$10
	STA	TXTWIN+16
	RTS
;
;let the storm exit stage
;
REMP23	LDA	#0
	STA	HPOSP0+2
	STA	HPOSP0+3
	STA	HPOSM0
	STA	HPOSM0+3
	STA	ICECNT
	LDA	ICTL
	STA	OFFSCN
	LDA	ICTH
	STA	OFFSCN+1
	LDA	#0
	STA	ICEON
	RTS
;
;game over-snow guys win
;
GAMOVR	LDA	#>GOVER
	STA	TMESS+1
	LDA	#<GOVER
	STA	TMESS
	LDA	#0	;turn off vbi
	STA	VFLG
	JSR	SNDOFF
GAM	LDA	CONSOL	;chk for START
	CMP	#6
	BNE	GAM
	JMP	NEWBEG
;
;initialize sound
;
SNDOFF	LDA	#0
	STA	$D208
	LDX	#3
	STX	$D20F
	LDX	#7
SNL	STA	$D200,X
	DEX
	BPL	SNL
	RTS
;
;turn off individ. snds
;
OFF1	LDA	#0
	STA	$D200
	STA	$D201
	RTS
;
OFF2	LDA	#0
	STA	$D203
	STA	$D202
	RTS
;
OFF34	LDA	#0
	STA	$D204
	STA	$D205
	STA	$D206
	STA	$D207
	RTS
;
;honk horn when dozer hits car
;
HORN	JSR	SNDOFF
	LDX	#1	;twice!
HN1	LDA	#121
	STA	$D204
	LDA	#$A6
	STA	$D205
	LDA	#10
	STA	$D206
	LDA	#$24
	STA	$D207
	JSR	LDL
	JSR	OFF34
	JSR	LDL
	DEX
	BPL	HN1
	RTS
;
;pause the game
;
PAUSE	LDX	#$FF
	STX	CH
	LDA	#0	;hold on vbi
	STA	VFLG
	JSR	WAIT
PAUS	LDA	CH
	CMP	#$FF
	BEQ	PAUS
	STX	CH
	LDA	#1
	STA	VFLG
	RTS
;
;the vbi
;
VBLNK	LDA	VFLG	;running?
	BNE	VBC	;yes
VBA	JMP	XITVBV
VBC	LDA	OFFSCN	;coming on?
	ORA	OFFSCN+1
	BEQ	VBB	;yes
	DEC	OFFSCN	;countdown
	LDA	OFFSCN
	CMP	#$FF
	BNE	VBA
	DEC	OFFSCN+1
	JMP	VBA
VBB	DEC	VTIME	;vbi speed
	LDA	VTIME
	BNE	VBA
	LDA	ICESPEED
	STA	VTIME
	JMP	MOVICE	;do the move
;
;make a plowing sound
;
PLWSND	LDA	ICEON	;unless
	BNE	NOPL	;the storm is
	LDA	#$32	;making noise
	STA	$D202
	LDA	#$46
	STA	$D203
	JSR	WAIT
NOPL	RTS
;
;reset some playing stuff
;
REPLAY	LDA	#$80	;dozer's
	STA	PXP	;position
	LDA	#$70
	STA	PYP
	LDA	#4	;scroll shadows
	STA	SMY
	LDA	#24
	STA	SMX
	LDA	#0	;screen pos.
	STA	SXP
	STA	SYP
	LDX	#5	;fuel timers
	LDA	#0
FT1	STA	FTIME,X
	DEX
	BPL	FT1
	LDX	#3	;car timers
CT1	LDA	CARSHD,X
	STA	CARTIM,X
	LDA	#0
	STA	RMTIM,X
	DEX
	BPL	CT1
	LDA	#0	;reset road
	STA	ROADG	;counters
	STA	ROADG+1
	INC	ROADG
	STA	ICECNT
	LDA	ICESPEED	;storm'S speed
	STA	VTIME
	JSR	SNDOFF	;sound off
	LDA	ICTL
	STA	OFFSCN
	LDA	ICTH
	STA	OFFSCN+1
	RTS
;
;interval between cars
;
CARSHD	.BYTE	$30,$60,$80,$B0
;
;speed up for next level
;fuel down by 10
;storm is off screen less
;storm moves faster
;
FIGLEV	LDX	LEVEL
	CPX	#5
	BEQ	LEA
	INC	LEVEL
LEA	LDX	LEVEL
	LDA	FULM,X
	STA	FULK
	LDA	ICOFFL,X
	STA	ICTL
	LDA	ICOFFH,X
	STA	ICTH
	LDA	ICESPDT,X
	STA	ICESPEED
	LDA	#1
	STA	EDGFLG
	JSR	SNDOFF
	RTS
;
;tables for stormy
;
FULM	.BYTE	8,7,6,5,4,3
ICOFFL	.BYTE	$80,$80,0,$80,0,$80
ICOFFH	.BYTE	3,2,2,1,1,0
ICESPDT	.BYTE	10,8,6,4,2,1
SPTAB	.BYTE	0,2,1,3
;
;spin dozer if hit by storm
;or out of fuel
;
SPIN	LDA	DIRECT
	PHA
	LDY	#4
	STY	YSP
	LDA	#0
	STA	SPSND
SPB	LDX	#3
	STX	XSP
SPA	LDA	SPTAB,X
	TAX
	JSR	DFOK
	LDA	#$86
	STA	$D203
	LDA	SPSND
	CLC
	ADC	#9
	STA	SPSND
	STA	$D202
	JSR	DELAY
	DEC	XSP
	LDX	XSP
	BNE	SPA
	DEC	YSP
	LDY	YSP
	BNE	SPB
	PLA
	STA	DIRECT
	JSR	DFOK
	JSR	OFF2
	RTS
;
;move the tracks on the dozer
;
TRACKR	STY	YH
	STX	XH
	LDA	XD1
	AND	#1
	TAX
	LDA	TRKR,X
TRKJMP	LDY	PYP+1
	STA	P1MEM+1,Y
	STA	P1MEM+2,Y
	STA	P1MEM+13,Y
	STA	P1MEM+14,Y
	INC	XD1
	LDY	YH
	LDX	XH
	RTS
;
TRKR	.BYTE	$55,$A9	;masks
;
TRACKL	STY	YH
	STX	XH
	LDA	XD1
	AND	#1
	TAX
	LDA	TRKL,X
	JMP	TRKJMP
;
TRKL	.BYTE	$AA,$95	;masks
;
TRACKU	STY	YH
	STX	XH
	LDY	PYP+1
	LDX	#7
TRU1	LDA	P1MEM+4,Y
	CMP	#$99
	BNE	TRU2
	LDA	#$18
	BNE	TRU3
TRU2	CMP	#$18
	BNE	TRU3
	LDA	#$99
TRU3	STA	P1MEM+4,Y
	INY
	DEX
	BPL	TRU1
	LDX	XH
	LDY	YH
	RTS
;
;filling up with fuel sound
;
FILSND	JSR	OFF2
	LDA	#$A4
	STA	$D203
	LDX	#160
FIL1	STX	$D202
	JSR	FDEL
	CPX	#45
	BNE	FIL2
	LDA	#$A2
	STA	$D203
FIL2	DEX
	BNE	FIL1
	JSR	OFF2
	RTS
;
FDEL	LDY	#200
FD1	JSR	WAIT
	DEY
	BPL	FD1
	RTS
;
;get the directory
;search for SMAP.???
;
GETDIR	JSR	CLOSE6
	LDX	#$60
	LDA	#3
	STA	ICCOM,X
	LDA	#>DIRNAM
	STA	ICBAH,X
	LDA	#<DIRNAM
	STA	ICBAL,X
	LDA	#6
	STA	AUX1,X
	LDA	#0
	STA	AUX2,X
	JSR	CIOV
	RTS
;
CLOSE6	LDX	#$60
	LDA	#$0C
	STA	ICCOM,X
	JSR	CIOV
	RTS
;
;read ina map from disk
;
GETFIL	LDA	#5
	LDX	#$60
	STA	ICCOM,X
	LDA	#>DBUF
	STA	ICBAH,X
	LDA	#<DBUF
	STA	ICBAL,X
	LDA	#20
	STA	ICBLL,X
	LDA	#0
	STA	ICBLH,X
	JSR	CIOV
	BMI	DOV
	LDA	DBUF+4
	CMP	#'F
	BNE	FLP
DOV	JSR	GETDIR
	LDA	#0
	STA	MAPFLG
	PLA
	PLA
	JMP	MAP2
;
FLP	LDX	#10
DLP	LDA	DBUF,X
	STA	MAPNAM-2,X
	CMP	#$20
	BEQ	DRET
	INX
	BNE	DLP
DRET	LDA	#EOL
	STA	MAPNAM-2,X
	RTS
;
DIRNAM	.BYTE	"D1:SMAP.*",EOL
;
;try jumping to edge
;once per level only
;to road
;
JMPEDG	LDA	EDGFLG
	BNE	JEA
	RTS
JEA	LDA	DIRECT
	CMP	#7
	BNE	JLF
	LDA	SMX
	STA	EHOLD
	LDA	#$C8
	SEC
	SBC	PXP
	LSR	A
	LSR	A
	STA	EADD
	CLC
	ADC	SMX
	STA	SMX
	DEC	SMX
	DEC	SMX
	JSR	LOOKR
	BCC	JYES
	LDA	EHOLD
	STA	SMX
	RTS
JYES	LDX	#$C8
	STX	HPOSP0
	STX	PXP
	INX
	STX	HPOSP0+1
	STX	PXP+1
	INC	SMX
	INC	SMX
	DEC	EDGFLG
	RTS
;
JLF	CMP	#11
	BNE	JUP
	LDA	SMX
	STA	EHOLD
	LDA	PXP
	SEC
	SBC	#$30
	LSR	A
	LSR	A
	STA	EADD
	LDA	SMX
	SEC
	SBC	EADD
	STA	SMX
	INC	SMX
	INC	SMX
	JSR	LOOKL
	BCC	JEB
	LDA	EHOLD
	STA	SMX
	RTS
JEB	LDX	#$30
	STX	HPOSP0
	STX	PXP
	DEX
	STX	HPOSP0+1
	STX	PXP+1
	DEC	SMX
	DEC	SMX
	DEC	EDGFLG
	RTS
;
JUP	CMP	#14
	BNE	JDN
	LDA	SMY
	STA	EHOLD
	LDA	PYP
	SEC
	SBC	#$30
	LSR	A
	LSR	A
	LSR	A
	LSR	A	;/16
	STA	EADD
	LDA	SMY
	SEC
	SBC	EADD
	STA	SMY
	INC	SMY
	JSR	LOOKU
	BCC	JEC
	LDA	EHOLD
	STA	SMY
	RTS
JEC	DEC	SMY
	JSR	ERS01
	LDA	#$30
	STA	PYP
	JSR	DEFPLR
	DEC	EDGFLG
	RTS
;
;erase players 0 and 1
;
ERS01	LDY	#$FF
	LDA	#0
ERSA	STA	P0MEM,Y
	STA	P1MEM,Y
	DEY
	BNE	ERSA
	RTS
;
JDN	CMP	#13
	BNE	JRET
	LDA	SMY
	STA	EHOLD
	LDA	#$C0
	SEC
	SBC	PYP
	LSR	A
	LSR	A
	LSR	A
	LSR	A
	CLC
	ADC	SMY
	STA	SMY
	DEC	SMY
	JSR	LOOKD
	BCC	JED
	LDA	EHOLD
	STA	SMY
JRET	RTS
JED	JSR	ERS01
	LDA	#$C0
	STA	PYP
	JSR	DEFPLR
	INC	SMY
	DEC	EDGFLG
	RTS
;
;bonus car bell sound
;
BELL	JSR	OFF2
	LDA	#12
	STA	$D202
BL3	LDA	#$A9
	STA	SHD
BL1	DEC	SHD
	LDA	SHD
	CMP	#$A0
	BCC	BL2
	STA	$D203
	JSR	DELAY
	JMP	BL1
BL2	JSR	OFF2
	RTS
;
;storm sound
;
ICESND	LDA	ICEON
	BEQ	ICOFF
	LDA	#$86
	STA	$D201
	LDA	#11
	STA	$D200
	RTS
ICOFF	JSR	OFF1
	RTS
;
;check if START was pressed
;
STKEY	LDA	CONSOL
	CMP	#6
	BEQ	STKEY
	JMP	GAMOVR
;
;setup game board and colors
;
SETSCN	LDA	#>DL1
	STA	SDLSTL+1
	LDA	#<DL1
	STA	SDLSTL
	LDA	#$C0
	STA	$D40E
	LDA	#>DLI
	STA	513
	LDA	#<DLI
	STA	512
	LDX	#4
KLR	LDA	CLRTAB,X
	STA	COLOR0,X
	DEX
	BPL	KLR
	RTS

Listing 4: Assembly

;SAVE#D:SNOW.PT3
;
;-----------------
; screen data file
; & uncompacter
; for snowplow
;
; by: Barry Kolbe
;
;-----------------
;
;uncompact screen data
;
;set up pointers &
;end of memory
;
UNCOM	LDA	#$90
	STA	BFL+1
	LDA	#0
	STA	BFL
	LDA	#<MAPDATA
	STA	TL
	LDA	#>MAPDATA
	STA	TL+1
	LDA	#1
	STA	EDM
	LDA	#$9A
	STA	EDM+1
;
;test for unique or
;repeated data
;
	LDY	#0
UC1	STY	UNIQUE
	STY	COUNT+1
	JSR	GETAB	;in A
	CLC
	ROL	A
	ROL	UNIQUE	;bit 7 test
	LSR	A
	STA	COUNT	;lsb
	BNE	CKU	;if 0 long count
	JSR	GETAB	;msb
	STA	COUNT+1
	JSR	GETAB
	STA	COUNT	;lsb of long cnt
CKU	LDA	UNIQUE
	BEQ	UC2
UC3	JSR	GETAB	;unique data
	STA	(BFL),Y
	JSR	NXBFL
	DEC	COUNT
	BNE	UC3
	LDA	COUNT+1
	BEQ	UC1
	DEC	COUNT+1
	JMP	UC3
;
;repeated data
;
UC2	JSR	GETAB
	STA	DATA
UC4	LDA	DATA
	STA	(BFL),Y
	JSR	NXBFL
	DEC	COUNT
	BNE	UC4
	LDA	COUNT+1
	BEQ	UC1	;next
	DEC	COUNT+1
	JMP	UC4
;
;increment dest. ptr &
;check for end of screen
;memory
;
NXBFL	INC	BFL
	BNE	NIN
	INC	BFL+1
NIN	LDA	BFL+1
	CMP	EDM+1
	BNE	NRT
	LDA	BFL
	CMP	EDM
	BNE	NRT
	PLA		;done so get out
	PLA
NRT	RTS
;
GETAB	LDA	(TL),Y	;get 1 byte
	INC	TL	;&inc. ptr of
	BNE	GTZ	;source
	INC	TL+1
GTZ	RTS
;
;the actual screen compacted
;
MAPDATA	.BYTE	4,0,30,96,130,108
	.BYTE	110,14,96,130,108,116
	.BYTE	6,7,130,114,110,28
	.BYTE	96,130,27,28,12,96
	.BYTE	130,108,110,22,96,130
	.BYTE	108,116,4,0,130,14
	.BYTE	15,3,7,135,1,2
	.BYTE	3,4,7,5,6,2
	.BYTE	7,130,5,6,3,7
	.BYTE	130,5,6,9,7,130
	.BYTE	98,100,2,7,130,5
	.BYTE	6,2,7,130,5,6
	.BYTE	6,7,130,98,100,6
	.BYTE	7,130,98,100,2,7
	.BYTE	137,13,7,1,2,3
	.BYTE	4,7,5,6,27,7
	.BYTE	130,5,6,2,7,130
	.BYTE	98,100,5,7,130,14
	.BYTE	15,15,7,130,98,100
	.BYTE	4,0,2,7,130,114
	.BYTE	110,12,96,130,108,116
	.BYTE	6,7,130,5,6,4
	.BYTE	7,130,98,100,4,7
	.BYTE	130,5,6,2,7,130
	.BYTE	5,6,4,7,132,98
	.BYTE	100,5,6,2,7,132
	.BYTE	5,6,98,104,10,96
	.BYTE	130,108,116,6,7,135
	.BYTE	1,2,3,4,7,5
	.BYTE	6,5,7,130,5,6
	.BYTE	8,7,132,5,6,98
	.BYTE	100,2,7,130,114,110
	.BYTE	14,96,130,108,116,2
	.BYTE	7,130,98,100,4,0
	.BYTE	135,5,6,98,100,7
	.BYTE	5,6,9,7,133,98
	.BYTE	100,7,5,6,5,7
	.BYTE	130,5,6,2,7,130
	.BYTE	98,100,14,7,130,98
	.BYTE	100,2,7,130,5,6
	.BYTE	2,7,130,98,100,10
	.BYTE	7,133,98,100,7,5
	.BYTE	6,5,7,4,96,130
	.BYTE	108,116,2,7,130,14
	.BYTE	15,11,7,131,13,98
	.BYTE	100,2,7,130,98,100
	.BYTE	14,7,130,98,100,2
	.BYTE	7,130,98,100,4,0
	.BYTE	2,7,130,98,100,7
	.BYTE	7,135,1,2,3,4
	.BYTE	7,120,112,12,96,130
	.BYTE	106,118,14,7,130,98
	.BYTE	104,6,96,130,102,100
	.BYTE	8,7,135,1,2,3
	.BYTE	4,7,5,6,4,7
	.BYTE	130,5,6,3,7,130
	.BYTE	120,112,12,96,130,108
	.BYTE	110,2,96,130,106,118
	.BYTE	2,7,130,98,100,2
	.BYTE	7,130,114,110,6,96
	.BYTE	130,108,116,2,7,130
	.BYTE	98,100,2,7,130,98
	.BYTE	100,4,0,2,7,130
	.BYTE	98,100,4,7,130,5
	.BYTE	6,3,7,130,5,6
	.BYTE	5,7,130,5,6,2
	.BYTE	7,130,5,6,6,7
	.BYTE	130,5,6,2,7,130
	.BYTE	5,6,8,7,130,98
	.BYTE	100,6,7,130,98,100
	.BYTE	2,7,130,5,6,3
	.BYTE	7,130,5,6,4,7
	.BYTE	133,5,6,7,5,6
	.BYTE	16,7,130,8,10,2
	.BYTE	7,130,98,100,2,7
	.BYTE	130,5,6,2,7,130
	.BYTE	98,100,2,7,138,98
	.BYTE	100,13,7,1,2,3
	.BYTE	4,98,100,2,7,130
	.BYTE	98,100,2,7,130,98
	.BYTE	100,4,0,2,7,130
	.BYTE	120,112,30,96,130,27
	.BYTE	28,4,96,130,108,116
	.BYTE	4,7,130,98,100,6
	.BYTE	7,130,98,100,4,7
	.BYTE	130,114,110,2,96,130
	.BYTE	108,116,4,7,130,114
	.BYTE	110,2,96,130,108,116
	.BYTE	4,7,130,114,110,4
	.BYTE	96,130,108,116,6,7
	.BYTE	130,98,100,4,7,132
	.BYTE	5,6,98,100,2,7
	.BYTE	130,120,112,4,96,2
	.BYTE	7,130,98,100,2,7
	.BYTE	130,98,100,2,7,130
	.BYTE	98,100,4,0,13,7
	.BYTE	130,5,6,21,7,130
	.BYTE	5,6,2,7,130,98
	.BYTE	100,4,7,132,98,100
	.BYTE	8,10,4,7,130,98
	.BYTE	100,4,7,134,98,100
	.BYTE	5,6,98,100,4,7
	.BYTE	134,98,100,5,6,98
	.BYTE	100,4,7,130,98,100
	.BYTE	2,7,132,14,15,98
	.BYTE	100,6,7,130,98,100
	.BYTE	6,7,130,98,100,10
	.BYTE	7,130,98,100,2,7
	.BYTE	130,98,100,2,7,130
	.BYTE	98,100,4,0,130,114
	.BYTE	110,28,96,130,108,116
	.BYTE	6,7,134,14,15,98
	.BYTE	100,5,6,2,7,130
	.BYTE	98,100,6,7,130,120
	.BYTE	112,4,96,130,106,118
	.BYTE	2,7,130,120,112,4
	.BYTE	96,130,106,118,2,7
	.BYTE	130,120,112,4,96,130
	.BYTE	106,118,4,7,130,120
	.BYTE	112,2,96,130,108,110
	.BYTE	2,96,130,106,118,6
	.BYTE	7,130,120,112,10,96
	.BYTE	130,106,118,2,7,130
	.BYTE	98,100,2,7,130,98
	.BYTE	100,4,0,139,98,100
	.BYTE	7,5,6,5,6,5
	.BYTE	6,5,6,7,7,130
	.BYTE	5,6,3,7,130,5
	.BYTE	6,5,7,130,98,100
	.BYTE	4,7,130,114,110,2
	.BYTE	96,130,106,118,4,7
	.BYTE	130,98,100,6,7,137
	.BYTE	13,7,1,2,3,4
	.BYTE	7,5,6,27,7,131
	.BYTE	98,100,13,25,7,130
	.BYTE	98,100,2,7,130,98
	.BYTE	100,4,0,130,120,112
	.BYTE	10,96,130,8,10,6
	.BYTE	7,130,5,6,8,7
	.BYTE	130,98,100,4,7,130
	.BYTE	98,100,8,7,130,98
	.BYTE	100,8,7,130,114,110
	.BYTE	18,96,130,108,116,4
	.BYTE	7,130,114,110,6,96
	.BYTE	130,106,112,4,96,130
	.BYTE	27,28,20,96,130,102
	.BYTE	100,2,7,130,98,100
	.BYTE	4,0,5,7,130,5
	.BYTE	6,16,7,130,5,6
	.BYTE	5,7,130,98,100,4
	.BYTE	7,130,98,100,8,7
	.BYTE	132,98,100,5,6,2
	.BYTE	7,130,5,6,2,7
	.BYTE	130,98,100,6,7,138
	.BYTE	5,6,7,1,2,3
	.BYTE	4,7,5,6,2,7
	.BYTE	130,98,100,4,7,130
	.BYTE	98,100,24,7,130,5
	.BYTE	6,8,7,130,98,100
	.BYTE	2,7,130,98,100,4
	.BYTE	0,130,114,110,6,96
	.BYTE	130,108,116,4,7,130
	.BYTE	114,110,6,96,130,108
	.BYTE	116,6,7,130,98,100
	.BYTE	4,7,130,120,112,2
	.BYTE	96,130,108,116,4,7
	.BYTE	130,98,100,2,7,130
	.BYTE	5,6,2,7,132,5
	.BYTE	6,98,100,2,7,130
	.BYTE	5,6,4,7,130,5
	.BYTE	6,8,7,132,98,100
	.BYTE	8,10,2,7,130,98
	.BYTE	104,10,96,130,108,116
	.BYTE	2,7,136,13,7,1
	.BYTE	2,3,4,1,2,3
	.BYTE	7,132,5,6,5,6
	.BYTE	5,7,130,98,100,2
	.BYTE	7,130,98,100,4,0
	.BYTE	130,98,100,6,7,130
	.BYTE	98,100,2,7,132,5
	.BYTE	6,98,100,6,7,130
	.BYTE	98,100,6,7,130,98
	.BYTE	100,8,7,130,98,100
	.BYTE	4,7,130,98,100,8
	.BYTE	7,130,98,100,4,7
	.BYTE	130,5,6,12,7,130
	.BYTE	98,100,4,7,130,98
	.BYTE	100,2,7,130,5,6
	.BYTE	6,7,130,98,100,6
	.BYTE	7,130,98,100,2,7
	.BYTE	130,5,6,10,7,130
	.BYTE	98,100,2,7,130,98
	.BYTE	100,4,0,130,98,100
	.BYTE	2,7,130,5,6,2
	.BYTE	7,130,120,112,4,96
	.BYTE	132,106,118,5,6,2
	.BYTE	7,134,5,6,98,100
	.BYTE	5,6,2,7,135,5
	.BYTE	6,98,100,7,5,6
	.BYTE	5,7,130,98,100,4
	.BYTE	7,130,98,100,8,7
	.BYTE	130,120,112,8,96,130
	.BYTE	108,110,8,96,130,106
	.BYTE	118,4,7,130,98,100
	.BYTE	5,7,130,5,6,3
	.BYTE	7,130,120,112,6,96
	.BYTE	130,106,118,5,7,130
	.BYTE	5,6,7,7,134,98
	.BYTE	100,14,15,98,100,4
	.BYTE	0,130,98,100,4,7
	.BYTE	130,5,6,10,7,130
	.BYTE	5,6,2,7,130,98
	.BYTE	100,2,7,130,5,6
	.BYTE	2,7,130,120,112,8
	.BYTE	96,130,106,112,4,96
	.BYTE	130,102,100,4,7,130
	.BYTE	5,6,3,7,130,5
	.BYTE	6,2,7,130,5,6
	.BYTE	3,7,130,98,100,2
	.BYTE	7,130,5,6,3,7
	.BYTE	130,5,6,5,7,130
	.BYTE	98,104,4,96,130,108
	.BYTE	116,11,7,130,5,6
	.BYTE	14,7,131,13,98,100
	.BYTE	2,7,130,98,100,4
	.BYTE	0,130,98,100,6,7
	.BYTE	130,114,110,6,96,132
	.BYTE	1,2,3,4,2,7
	.BYTE	130,98,100,9,7,130
	.BYTE	5,6,11,7,130,98
	.BYTE	100,6,7,130,5,6
	.BYTE	10,7,130,98,100,4
	.BYTE	7,130,5,6,8,7
	.BYTE	130,98,100,2,7,132
	.BYTE	3,4,98,100,2,7
	.BYTE	130,8,10,24,96,130
	.BYTE	106,118,2,7,130,98
	.BYTE	100,4,0,130,98,100
	.BYTE	3,7,133,5,6,7
	.BYTE	98,100,12,7,130,98
	.BYTE	100,13,7,130,14,15
	.BYTE	7,7,130,98,100,9
	.BYTE	7,130,5,6,2,7
	.BYTE	130,5,6,3,7,130
	.BYTE	98,100,7,7,130,5
	.BYTE	6,5,7,130,98,100
	.BYTE	5,7,130,14,15,23
	.BYTE	7,132,1,2,3,4
	.BYTE	4,7,130,98,100,4
	.BYTE	0,132,1,2,3,4
	.BYTE	4,7,130,120,112,12
	.BYTE	96,130,106,112,12,96
	.BYTE	130,27,28,8,96,130
	.BYTE	106,112,18,96,132,106
	.BYTE	118,14,15,2,7,134
	.BYTE	1,2,3,4,3,4
	.BYTE	4,96,130,106,112,38
	.BYTE	96,130,106,118

Listing 5: Assembly

; SAVE#D:SNOW.PT4
;
;-------------------------
;Intro Screen for SNOWPLOW
;
;by: Bryan Schappel
;
;-------------------------
;
CLS	.BYTE	$92,$0A,$00,$42,$00
WEATHER	.SBYTE	"national weat"
	.SBYTE	"her service bulle"
	.SBYTE	"tin        snow w"
	.SBYTE	"arning"
;
STARTI	LDY	#0	;turn off vbi
	STY	VFLG
	STY	ICEON	;storm off
	JSR	SNDOFF
	LDX	IFLAG	;falling
	BNE	INTRO	;letters?
	LDA	#8
	STA	CONSOL
	LDA	#90	;scroll len
	STA	SLENGTH
CP1	LDA	SET+$0200,Y	;copy chrset
	STA	SET2,Y	;out
	LDA	#0
	STA	SET+$0200,Y
	STA	SCRLMEM,Y
	INY
	BNE	CP1
;
INTRO	LDX	#5	;copy high score
TSLP	LDA	SCRS,X	;to intro
	STA	TOPSCORE+12,X	;screen
	DEX
	BPL	TSLP
	LDX	#7
	LDA	#0	;players off
WWLP	STA	HPOSP0,X
	DEX
	BPL	WWLP
;
	TAY		;set up scroll
CWLP	STA	SCRLMEM,Y	;message
	DEY
	BNE	CWLP
	LDY	#53
WCP	LDA	WEATHER,Y
	STA	SCRLMEM+22,Y
	DEY
	BPL	WCP
;
	LDY	#4	;put in colors
GCL	LDA	CLS,Y
	STA	COLOR0,Y
	DEY
	BPL	GCL
;
	LDA	#0	;ptrs for chset
	STA	IND2	;move
	STA	INDR
	STA	COLOR2
	LDA	#>SET2
	STA	INDR+1
	LDA	#>[SET+$0200]
	STA	IND2+1
	LDA	#<IDLST	;intro dlist
	STA	SDLSTL
	LDA	#>IDLST
	STA	SDLSTL+1
;
	LDA	IFLAG	;first time?
	BNE	SKIPSNOW	;for snow
	INC	IFLAG	;letters?
	JSR	GETRAND
	LDA	#15
	STA	IIY3
LP1	LDA	#15
	STA	ICNT
LOOP	LDY	ICNT
	LDA	RANDS,Y
	TAY
	LDA	TAB16,Y
	STA	INDR
	STA	IND2
	LDY	IIY3
	LDA	(INDR),Y
	JSR	MOVEDN
	BCS	SKIPSNOW
	DEC	ICNT
	BPL	LOOP
	DEC	IIY3
	BPL	LP1
;
SKIPSNOW	LDY	#0
	STY	LMS
SK1	LDA	SET2,Y
	STA	SET+$0200,Y
	INY
	BNE	SK1
;
;Scroll Weather Message
;
ISCRL	LDX	#7
ISC	STX	HSCROL
	LDA	#0
	STA	RTCLOK
WT1	LDA	CONSOL
	BEQ	SKPPER
	CMP	#6
	BEQ	GSTART
	LDA	RTCLOK
	BEQ	WT1
	DEX
	BPL	ISC
	LDY	LMS
	INY
	CPY	SLENGTH
	BNE	ISK
	LDY	#0
ISK	STY	LMS
	JMP	ISCRL
;
GSTART	LDA	#0
	STA	DIRF
GST	STA	LMS
	STA	HSCROL
	RTS
;
SKPPER	LDA	#1
	STA	DIRF
	LDA	#0
	BEQ	GST
;
;Move byte down
;
MOVEDN	STY	IISY
	CMP	#0
	BEQ	MRTS
	LDY	#0
MLP	STA	(IND2),Y
	CPY	IISY
	BEQ	MRTS
	LDX	#0
	STX	RTCLOK
WL	LDX	CH
	CPX	#$FF
	BNE	BRTS
	LDX	RTCLOK
	BEQ	WL
	PHA
	LDA	#0
	STA	(IND2),Y
	PLA
	INY
	BNE	MLP
MRTS	LDY	IISY
	CLC
	RTS
BRTS	LDX	#$FF
	STX	CH
	SEC
	RTS
;
;Get 16 Random Numbers
;
GETRAND	LDA	#1
	STA	RAND
	LDA	RANDOM
	AND	#$0F
	STA	RANDS
RLOOP	LDA	RANDOM
	AND	#$0F
	LDY	#0
RSRCH	CMP	RANDS,Y
	BEQ	RLOOP
	INY
	CPY	RAND
	BNE	RSRCH
	STA	RANDS,Y
	INY
	STY	RAND
	CPY	#16
	BNE	RLOOP
	RTS
;
TAB16	.BYTE	0,16,32,48
	.BYTE	64,80,96,112
	.BYTE	128,144,160,176
	.BYTE	192,208,224,240
;
STAR	=	*
	*=	$7B00
;
SNOWMEM	.SBYTE	"            "
	.BYTE	"@BDFHJLNPRTVXZ\^"
	.SBYTE	"            "
	.SBYTE	"            "
	.BYTE	"ACEGIKMOQSUWY[]_"
	.SBYTE	"            "
	.SBYTE	"   BY: BARRY KOL"
	.SBYTE	"BE AND BRYAN SCH"
	.SBYTE	"APPEL   "
	.SBYTE	"     COPYRIGHT 1"
	.SBYTE	"988 BBK ENTERPRI"
	.SBYTE	"SES     "
;
TOPSCORE	.SBYTE	"  top score "
	.SBYTE	"000000  "
	*=	STAR

Listing 6: Assembly

;--------------------------
;
;SNOWPLOW Character Set
;
;by: Barry Kolbe (graphics)
;and Bryan Schappel (text)
;
;--------------------------
;
	.BYTE	$00,$00,$00,$00
	.BYTE	$00,$00,$00,$00
	.BYTE	$EC,$E2,$CA,$2A
	.BYTE	$A2,$A2,$AA,$AA
	.BYTE	$3F,$8F,$A3,$A8
	.BYTE	$0A,$0A,$0A,$0A
	.BYTE	$FF,$FF,$00,$AA
	.BYTE	$80,$80,$80,$80
	.BYTE	$FF,$FF,$00,$AA
	.BYTE	$0A,$0A,$0A,$0A
	.BYTE	$FD,$F5,$D5,$D5
	.BYTE	$D5,$F5,$FE,$FE
	.BYTE	$7F,$5F,$57,$57
	.BYTE	$57,$5F,$BF,$BF
	.BYTE	$FF,$FF,$FF,$FF
	.BYTE	$FF,$FF,$FF,$FF
	.BYTE	$FA,$EA,$A0,$A2
	.BYTE	$A0,$A2,$E2,$FA
	.BYTE	$FA,$EA,$AA,$AA
	.BYTE	$AA,$AA,$EA,$FA
	.BYTE	$BF,$AF,$0B,$AB
	.BYTE	$0B,$AB,$AF,$BF
	.BYTE	$BF,$AF,$AB,$AB
	.BYTE	$AB,$AB,$AF,$BF
	.BYTE	$00,$00,$00,$00
	.BYTE	$00,$18,$18,$30
	.BYTE	$FF,$FF,$FF,$FB
	.BYTE	$EA,$FB,$EA,$FF
	.BYTE	$FE,$EA,$EF,$EA
	.BYTE	$FE,$FE,$FE,$FE
	.BYTE	$BF,$AB,$FB,$AB
	.BYTE	$BF,$BF,$BF,$BF
	.BYTE	$7F,$63,$63,$63
	.BYTE	$63,$63,$7F,$00
	.BYTE	$38,$18,$18,$18
	.BYTE	$3C,$3C,$3C,$00
	.BYTE	$7F,$63,$03,$7F
	.BYTE	$60,$60,$7F,$00
	.BYTE	$7E,$06,$06,$7F
	.BYTE	$07,$07,$7F,$00
	.BYTE	$70,$70,$70,$77
	.BYTE	$77,$7F,$07,$00
	.BYTE	$7F,$60,$60,$7F
	.BYTE	$07,$07,$7F,$00
	.BYTE	$7C,$6C,$60,$7F
	.BYTE	$63,$63,$7F,$00
	.BYTE	$7F,$03,$03,$1F
	.BYTE	$18,$18,$18,$00
	.BYTE	$3E,$36,$36,$7F
	.BYTE	$77,$77,$7F,$00
	.BYTE	$7F,$63,$63,$7F
	.BYTE	$07,$07,$07,$00
	.BYTE	$00,$00,$18,$18
	.BYTE	$00,$18,$18,$00
	.BYTE	$FF,$FF,$FE,$F8
	.BYTE	$AA,$AA,$CF,$FF
	.BYTE	$FF,$FF,$AF,$AB
	.BYTE	$AA,$AA,$F3,$FF
	.BYTE	$00,$00,$01,$04
	.BYTE	$55,$55,$30,$00
	.BYTE	$00,$00,$50,$54
	.BYTE	$55,$55,$0C,$00
	.BYTE	$00,$3C,$66,$0C
	.BYTE	$18,$00,$18,$00
	.BYTE	$00,$3C,$66,$6E
	.BYTE	$6E,$60,$3E,$00
	.BYTE	$00,$00,$3F,$03
	.BYTE	$7F,$67,$7F,$00
	.BYTE	$00,$60,$60,$7F
	.BYTE	$73,$73,$7F,$00
	.BYTE	$00,$00,$7F,$60
	.BYTE	$60,$60,$7F,$00
	.BYTE	$00,$03,$03,$7F
	.BYTE	$63,$63,$7F,$00
	.BYTE	$00,$00,$7F,$63
	.BYTE	$7F,$70,$7F,$00
	.BYTE	$00,$1E,$18,$7E
	.BYTE	$18,$38,$38,$00
	.BYTE	$00,$00,$7F,$63
	.BYTE	$63,$7F,$07,$7F
	.BYTE	$00,$60,$60,$7F
	.BYTE	$73,$73,$73,$00
	.BYTE	$00,$0C,$00,$0C
	.BYTE	$0C,$1C,$1C,$00
	.BYTE	$00,$0C,$00,$0C
	.BYTE	$0C,$0E,$0E,$7E
	.BYTE	$00,$30,$30,$76
	.BYTE	$7C,$76,$73,$00
	.BYTE	$00,$18,$18,$18
	.BYTE	$38,$38,$38,$00
	.BYTE	$00,$00,$66,$7F
	.BYTE	$7F,$6B,$63,$00
	.BYTE	$00,$00,$3F,$33
	.BYTE	$73,$73,$73,$00
	.BYTE	$00,$00,$3F,$33
	.BYTE	$73,$73,$7F,$00
	.BYTE	$00,$00,$3F,$33
	.BYTE	$73,$7F,$70,$70
	.BYTE	$00,$00,$7F,$63
	.BYTE	$63,$7F,$07,$07
	.BYTE	$00,$00,$3F,$33
	.BYTE	$70,$70,$70,$00
	.BYTE	$00,$00,$7F,$60
	.BYTE	$7F,$07,$7F,$00
	.BYTE	$00,$0C,$7F,$0C
	.BYTE	$1C,$1C,$1C,$00
	.BYTE	$00,$00,$33,$33
	.BYTE	$73,$73,$7F,$00
	.BYTE	$00,$00,$63,$63
	.BYTE	$63,$36,$1C,$00
	.BYTE	$00,$00,$63,$6B
	.BYTE	$7F,$3E,$36,$00
	.BYTE	$00,$00,$66,$3C
	.BYTE	$18,$3C,$66,$00
	.BYTE	$00,$00,$33,$33
	.BYTE	$73,$7F,$03,$0F
	.BYTE	$00,$00,$7E,$0C
	.BYTE	$18,$30,$7E,$00
	.BYTE	$00,$1E,$18,$18
	.BYTE	$18,$18,$1E,$00
	.BYTE	$00,$40,$60,$30
	.BYTE	$18,$0C,$06,$00
	.BYTE	$00,$78,$18,$18
	.BYTE	$18,$18,$78,$00
	.BYTE	$00,$08,$1C,$36
	.BYTE	$63,$00,$00,$00
	.BYTE	$00,$00,$00,$00
	.BYTE	$00,$00,$FF,$00
	.BYTE	$00,$00,$07,$0F
	.BYTE	$1C,$1C,$1C,$1F
	.BYTE	$0F,$00,$00,$00
	.BYTE	$18,$1F,$1F,$00
	.BYTE	$00,$00,$FC,$FC
	.BYTE	$0C,$00,$00,$FC
	.BYTE	$FE,$0E,$0E,$0E
	.BYTE	$1E,$FC,$F8,$00
	.BYTE	$00,$00,$7C,$7C
	.BYTE	$1E,$1E,$1F,$1F
	.BYTE	$1F,$1D,$1C,$1C
	.BYTE	$1C,$7C,$7C,$00
	.BYTE	$00,$00,$3E,$3E
	.BYTE	$38,$38,$38,$38
	.BYTE	$B8,$F8,$F8,$78
	.BYTE	$78,$3E,$3E,$00
	.BYTE	$00,$00,$3F,$7F
	.BYTE	$70,$70,$70,$70
	.BYTE	$70,$70,$70,$70
	.BYTE	$70,$7F,$3F,$00
	.BYTE	$00,$00,$F8,$FC
	.BYTE	$1C,$1C,$1C,$1C
	.BYTE	$1C,$1C,$1C,$1C
	.BYTE	$1C,$FC,$F8,$00
	.BYTE	$00,$00,$7C,$7C
	.BYTE	$1C,$1C,$1C,$1D
	.BYTE	$1D,$1D,$1D,$1F
	.BYTE	$1F,$7E,$7C,$00
	.BYTE	$00,$00,$3E,$3E
	.BYTE	$38,$38,$38,$B8
	.BYTE	$B8,$B8,$B8,$F8
	.BYTE	$F8,$7E,$3E,$00
	.BYTE	$00,$00,$7F,$7F
	.BYTE	$1C,$1C,$1C,$1C
	.BYTE	$1F,$1F,$1C,$1C
	.BYTE	$1C,$7F,$7F,$00
	.BYTE	$00,$00,$F0,$F8
	.BYTE	$1C,$1C,$1C,$1C
	.BYTE	$F8,$F0,$00,$00
	.BYTE	$00,$00,$00,$00
	.BYTE	$00,$00,$7F,$7F
	.BYTE	$1C,$1C,$1C,$1C
	.BYTE	$1C,$1C,$1C,$1C
	.BYTE	$1C,$7F,$7F,$00
	.BYTE	$00,$00,$00,$00
	.BYTE	$00,$00,$00,$00
	.BYTE	$00,$00,$00,$1C
	.BYTE	$1C,$FC,$FC,$00
	.BYTE	$00,$00,$3F,$7F
	.BYTE	$70,$70,$70,$70
	.BYTE	$70,$70,$70,$70
	.BYTE	$70,$7F,$3F,$00
	.BYTE	$00,$00,$F8,$FC
	.BYTE	$1C,$1C,$1C,$1C
	.BYTE	$1C,$1C,$1C,$1C
	.BYTE	$1C,$FC,$F8,$00
	.BYTE	$00,$00,$7C,$7C
	.BYTE	$1C,$1C,$1C,$1D
	.BYTE	$1D,$1D,$1D,$1F
	.BYTE	$1F,$7E,$7C,$00
	.BYTE	$00,$00,$3E,$3E
	.BYTE	$38,$38,$38,$B8
	.BYTE	$B8,$B8,$B8,$F8
	.BYTE	$F8,$7E,$3E,$00
	.BYTE	$FF,$FF,$FF,$D7
	.BYTE	$FF,$FF,$FF,$FF
	.BYTE	$00,$00,$00,$14
	.BYTE	$00,$00,$00,$00
	.BYTE	$FF,$FD,$FF,$FD
	.BYTE	$FF,$FD,$FF,$FD
	.BYTE	$00,$01,$00,$01
	.BYTE	$00,$01,$00,$01
	.BYTE	$FF,$7F,$FF,$7F
	.BYTE	$FF,$7F,$FF,$7F
	.BYTE	$00,$40,$00,$40
	.BYTE	$00,$40,$00,$40
	.BYTE	$FF,$FD,$FF,$5D
	.BYTE	$FF,$FD,$FF,$FD
	.BYTE	$00,$01,$00,$51
	.BYTE	$00,$01,$00,$01
	.BYTE	$FF,$7F,$FF,$75
	.BYTE	$FF,$7F,$FF,$7F
	.BYTE	$00,$40,$00,$45
	.BYTE	$00,$40,$00,$40
	.BYTE	$FF,$FD,$FF,$5D
	.BYTE	$FF,$FF,$FF,$FF
	.BYTE	$00,$01,$00,$51
	.BYTE	$00,$00,$00,$00
	.BYTE	$FF,$FF,$FF,$5D
	.BYTE	$FF,$FD,$FF,$FD
	.BYTE	$00,$00,$00,$51
	.BYTE	$00,$01,$00,$01
	.BYTE	$FF,$FF,$FF,$75
	.BYTE	$FF,$7F,$FF,$7F
	.BYTE	$00,$00,$00,$45
	.BYTE	$00,$40,$00,$40
	.BYTE	$FF,$7F,$FF,$75
	.BYTE	$FF,$FF,$FF,$FF
	.BYTE	$00,$40,$00,$45
	.BYTE	$00,$00,$00,$00
	.BYTE	$FF,$FF,$FF,$FD
	.BYTE	$FF,$FD,$FF,$FD
	.BYTE	$00,$00,$00,$01
	.BYTE	$00,$01,$00,$01
	.BYTE	$FF,$FF,$FF,$7F
	.BYTE	$FF,$7F,$FF,$7F
	.BYTE	$00,$00,$00,$40
	.BYTE	$00,$40,$00,$40
	.BYTE	$FF,$7F,$FF,$7F
	.BYTE	$FF,$FF,$FF,$FF
	.BYTE	$00,$40,$00,$40
	.BYTE	$00,$00,$00,$00
	.BYTE	$FF,$FD,$FF,$FD
	.BYTE	$FF,$FF,$FF,$FF
	.BYTE	$00,$01,$00,$01
	.BYTE	$00,$00,$00,$00
	.BYTE	$FF,$EF,$FF,$55
	.BYTE	$FF,$FF,$FF,$FF
	.BYTE	$00,$08,$00,$55
	.BYTE	$00,$00,$00,$00
	.BYTE	$18,$18,$18,$18
	.BYTE	$18,$18,$18,$18
	.BYTE	$00,$7E,$78,$7C
	.BYTE	$6E,$66,$06,$00
	.BYTE	$08,$18,$38,$78
	.BYTE	$38,$18,$08,$00
	.BYTE	$10,$18,$1C,$1E
	.BYTE	$1C,$18,$10,$00
A.N.A.L.O.G. ISSUE 65 / AUGUST 1988 / PAGE 16

Snowplow Editor

by Barry Kolbe and Bryan Schappel

The Snowplow Editor (SE) is a scrolling-screen editor used to design new screens for the game Snowplow which was published in last month’s ANALOG. These screens may be arranged in any order on a disk to add levels to the game. And what is even better, you get to design them yourself!

First type in Listing 1 using the M/L Editor found elsewhere in this issue. To run SE follow the instructions in your DOS manual on loading a binary file. When the editor has loaded, you will notice that the screen is divided into two main sections. There is the editing window (which comprises most of the screen) and the input/info area at the bottom of the screen. The following commands may be entered simply by pressing the appropriate key:

K — choose character
C — change color register
M — define memory block
X — xerox memory block
P — change cursor luminance
B — block fill
H — home cursor
F — load a font
L — load saved screen
S — save screen
D — draw line mode
T — define a key

In addition to these commands are two others that are accessed by pressing CONTROL along with the appropriate key:

CNTL-H — home and clear
CNTL-< — clear memory

An explanation of all the commands follows.

Choose a character (K): This allows you to choose the character that you will draw with. When you press this key you may move the character cursor at the bottom of the screen on top of the character you wish to use. When you have made your choice, press fire. Move the stick up and down to see a different line of characters and move left or right to choose a character on that line. All plots, draws, block fills, etc., will use this character until another one is selected.

Change the color registers (C): Hit a key 0 through 4, to select the register to be altered. Use the joystick to select the hue and luminance. Press fire to exit.

Define a block of memory (M): This is used later in the Copy mode to rubber-stamp a rectangular region of the screen anywhere on the map. You may only define an area of 10 by 10. This is done by moving the cursor to the ujsper left-hand corner of the rectangle and pressing fire. Then move to the lower right-hand corner and press fire again.

Xerox a defined block (X): This allows you to rubber-stamp your predefined memory block anywhere on the screen. Just move the cursor to the upper-left corner of where you want your block copied and press fire. This is an excellent way to make lots of houses or trees.

Change cursor luminance (P): This changes the luminance of the cursor on the map. This is very useful on light backgrounds. Pressing this key toggles the cursor back and forth between light and dark.

Block fill (B): This allows you to fill a large area of the screen with one character. Simply select the upper left corner and the lower right corner of the rectangle, and it will be filled with the current character.

Home the cursor (H): This key will move the cursor to the screen position 0,0.

Home and clear (CNTL-H): This moves the cursor to position 0,0 and clears the screen. Use this only if you are positive that you want to erase your map; it is quite permanent.

Clear memory (CNTL-<): This is the same as the previous command; however, you are asked if you are certain about the erasure.

Load a font (F): This allows you to load in the character set that you will be drawing with. To extract the character set from the Snowplow game object file, simply use this small BASIC program. Make sure that you have the correct filename in Line 10. You may use any character set with this editor. Please note that you must load a character set before the editor will function properly.

10 OPEN #1,4,0,"D:SNOW"
20 FOR I=1 TO 21:GET #1,A:NEXT I
30 OPEN #2,8,0,"D:FONT"
40 FOR I=1 TO 1024
50 GET #1,A:PUT #2,A
60 NEXT I
70 END

Load a screen (L): This allows you to load in a previously created screen into the editor. Simply supply the filename and press RETURN. The screen is loaded and the one in memory is erased. Pressing ESCAPE will exit.

Save a screen (S): You may save your masterpiece by entering a legal DOS filename at the prompt. To allow this screen to be used by Snowplow, it must be named SMAP.???, where the question marks stand for any legal DOS filename extension. Each saved screen is about 23 sectors long (single density).

Draw a straight line (D): This allows you to enter draw mode, in which you may draw lines either left to right or up to down. Press fire at the beginning of the line, move the cursor, and fire at the end of the line. This uses the last selected character from K.

Define a key (T): Use the cursor to select a character; then hit a key (1 through 0) to register it. Anytime thereafter just hit the appropriate key to recall that character.

Snowplow Editor hints

Road characters must be placed horizontally in pairs, with the left always on an even X-coordinate (watch the text window). Roads must always be two characters wide. There must always be road characters placed at position X = 10 and Y = 4, since this is where the dozer begins. Use only the road characters that have a snow background. This starts with a and is every other one from there on in.

You may place up to six fuel (X-coordinate must be even) containers on the map. Again these are two characters wide. You are allowed a maximum of four bonus cars. The bonus cars must be placed on the road at an even X position. It would look best to put them on horizontal stretches. In the font, use the first set of car figures. The second set is used by the program for roads that have been cleared of snow. The first X position that can be used is X = 4. The first four spaces are used by ANTIC as a buffer for fine scrolling horizontally.

Enjoy making new levels for Snowplow. We hope you get a great deal of fun from this program.

Listing 1: M/L Editor Data

1000 DATA 255,255,128,127,169,127,112,112,112,69,0,144,69,128,144,69,5323
1010 DATA 0,145,69,128,145,69,0,146,69,128,146,69,0,147,69,128,3802
1020 DATA 147,69,0,148,69,128,148,196,0,139,130,130,2,65,128,127,4882
1030 DATA 0,48,250,58,76,38,48,72,169,224,141,9,212,169,10,141,6576
1040 DATA 23,208,138,72,166,168,189,54,50,141,24,208,169,0,141,26,5122
1050 DATA 208,141,10,212,230,168,104,170,104,64,160,50,185,128,127,153,9150
1060 DATA 192,127,136,16,247,32,50,51,32,136,52,32,170,53,32,117,2071
1070 DATA 49,32,213,49,32,247,49,32,7,50,169,6,160,187,162,48,4649
1080 DATA 32,92,228,169,127,141,49,2,169,128,141,48,2,32,115,50,2423
1090 DATA 32,89,50,32,60,53,32,75,51,173,120,2,201,15,240,9,3120
1100 DATA 32,209,48,32,216,48,76,101,48,173,252,2,32,225,58,144,6228
1110 DATA 248,201,255,240,47,162,255,142,252,2,160,14,217,251,54,240,2814
1120 DATA 5,136,16,248,48,30,152,10,170,189,221,54,141,165,48,189,8387
1130 DATA 222,54,141,166,48,32,125,52,32,255,255,32,125,52,32,60,4090
1140 DATA 53,76,117,48,173,132,2,208,176,32,182,50,76,101,48,160,5411
1150 DATA 4,185,196,2,153,22,208,136,16,247,169,128,141,9,212,200,9909
1160 DATA 132,168,76,95,228,201,7,208,14,76,126,49,32,43,50,32,1435
1170 DATA 60,53,169,0,133,77,96,201,11,208,3,76,167,49,201,14,4470
1180 DATA 208,30,165,146,240,14,198,146,198,148,165,136,56,233,16,133,9432
1190 DATA 136,76,91,49,165,145,240,7,198,145,198,148,32,13,51,96,5463
1200 DATA 201,13,208,34,165,146,201,9,240,14,230,146,230,148,165,136,1662
1210 DATA 24,105,16,133,136,76,253,48,165,145,201,9,240,225,230,145,2609
1220 DATA 32,230,50,230,148,96,201,6,208,6,32,126,49,76,238,48,5388
1230 DATA 201,5,208,6,32,126,49,76,16,49,201,10,208,6,32,167,2861
1240 DATA 49,76,238,48,201,9,208,6,32,167,49,32,16,49,96,32,637
1250 DATA 117,49,32,104,49,165,136,133,135,76,27,50,169,0,164,135,4917
1260 DATA 162,15,145,169,200,202,16,250,96,169,132,133,170,169,0,133,9193
1270 DATA 169,96,165,143,201,39,208,18,169,1,133,151,165,144,201,88,8927
1280 DATA 240,7,230,144,230,147,32,210,50,96,230,143,230,147,165,133,2043
1290 DATA 24,105,4,133,133,165,133,141,0,208,96,165,143,240,14,198,9495
1300 DATA 143,165,133,56,233,4,133,133,198,147,76,161,49,165,144,240,547
1310 DATA 216,198,144,198,147,169,255,133,151,76,210,50,134,128,169,12,9034
1320 DATA 157,66,3,32,86,228,166,128,96,169,62,141,47,2,169,1,3848
1330 DATA 141,111,2,169,3,141,29,208,169,128,141,7,212,169,108,141,8537
1340 DATA 192,2,169,0,141,8,208,141,9,208,96,169,132,133,170,169,9457
1350 DATA 0,133,169,160,0,145,169,200,208,251,96,160,32,132,136,132,190
1360 DATA 135,32,117,49,32,27,50,169,46,141,0,208,133,133,96,164,6105
1370 DATA 135,162,0,189,65,50,145,169,232,200,224,16,208,245,96,162,2487
1380 DATA 0,134,20,166,20,224,4,208,250,96,146,66,4,48,48,48,3328
1390 DATA 32,64,0,32,96,255,195,195,195,195,195,195,195,195,195,195,6113
1400 DATA 195,195,195,195,255,252,198,198,198,198,198,198,252,166,142,232,8865
1410 DATA 138,10,10,10,10,10,170,202,138,160,31,153,44,139,153,4,4450
1420 DATA 139,202,138,136,16,245,96,160,25,169,0,153,142,0,136,16,4316
1430 DATA 250,160,0,152,141,10,59,169,144,141,46,59,185,10,59,24,2872
1440 DATA 105,128,153,11,59,185,46,59,105,0,153,47,59,200,192,33,4670
1450 DATA 208,234,32,130,55,169,128,141,244,2,169,192,141,14,212,169,347
1460 DATA 48,141,1,2,169,3,141,0,2,96,166,148,189,10,59,133,3841
1470 DATA 171,189,46,59,133,172,165,149,164,147,145,171,96,169,127,133,677
1480 DATA 172,169,132,133,171,96,32,201,50,160,0,177,171,24,101,151,6845
1490 DATA 145,171,200,200,200,192,30,208,242,96,160,0,185,136,127,153,963
1500 DATA 133,127,185,135,127,153,132,127,200,200,200,192,27,208,237,173,4365
1510 DATA 156,127,24,105,128,141,159,127,173,157,127,105,0,141,160,127,8217
1520 DATA 96,160,27,185,129,127,153,132,127,185,130,127,153,133,127,136,170
1530 DATA 136,136,208,239,173,132,127,56,233,128,141,132,127,173,133,127,1124
1540 DATA 233,0,141,133,127,96,169,144,133,170,169,0,133,169,162,9,7699
1550 DATA 160,255,145,169,136,192,255,208,249,230,170,202,16,242,96,160,5043
1560 DATA 255,169,0,200,153,0,133,192,255,208,248,160,200,162,0,189,3100
1570 DATA 81,50,153,0,133,200,232,224,8,208,244,169,63,141,1,208,491
1580 DATA 133,134,169,77,141,193,2,96,162,38,169,52,32,18,52,173,3978
1590 DATA 120,2,201,15,208,3,76,232,51,201,7,208,24,165,150,201,8953
1600 DATA 31,240,10,230,150,165,134,24,105,4,76,176,51,169,0,133,5021
1610 DATA 150,169,63,208,15,201,11,208,27,165,150,240,15,198,150,165,421
1620 DATA 134,56,233,4,133,134,141,1,208,76,12,52,169,31,133,150,5459
1630 DATA 169,187,208,240,201,14,208,18,165,142,240,8,198,142,32,89,8553
1640 DATA 50,76,12,52,169,3,133,142,208,244,201,13,208,14,230,142,317
1650 DATA 165,142,201,4,208,232,169,0,133,142,240,226,173,132,2,208,1757
1660 DATA 34,32,98,54,32,43,50,173,132,2,240,251,166,142,232,138,1114
1670 DATA 10,10,10,10,10,24,101,150,56,233,32,133,149,76,43,50,3099
1680 DATA 32,43,50,76,123,51,134,169,133,170,160,255,200,177,169,153,3241
1690 DATA 122,139,16,248,41,127,153,122,139,96,35,104,111,111,115,101,6326
1700 DATA 0,99,104,97,114,97,99,116,101,242,35,111,108,111,114,0,5085
1710 DATA 114,101,103,105,115,116,101,114,0,16,13,148,36,114,97,119,3147
1720 DATA 0,109,111,100,229,34,108,111,99,107,0,102,105,108,236,44,5970
1730 DATA 111,97,100,105,110,103,0,102,111,110,244,36,101,102,105,110,6030
1740 DATA 101,0,98,108,111,99,235,35,111,112,121,0,98,108,111,99,5126
1750 DATA 235,160,39,169,0,153,120,139,136,16,250,96,160,160,169,0,8109
1760 DATA 153,0,139,136,192,255,208,248,96,162,54,169,52,32,18,52,6136
1770 DATA 173,252,2,162,255,201,255,240,247,201,28,240,12,160,4,217,2636
1780 DATA 50,53,240,9,136,16,248,48,231,142,252,2,96,185,55,53,7394
1790 DATA 133,132,32,125,52,162,123,169,56,32,18,52,32,52,56,164,2482
1800 DATA 132,185,196,2,72,41,240,133,129,104,41,15,133,130,173,120,7144
1810 DATA 2,201,7,208,10,165,129,24,105,16,133,129,76,24,53,201,4653
1820 DATA 11,208,10,165,129,56,233,16,133,129,76,24,53,201,14,208,6329
1830 DATA 13,230,130,230,130,165,130,41,15,133,130,76,24,53,201,13,4575
1840 DATA 208,25,198,130,198,130,165,130,41,15,133,130,165,129,5,130,6825
1850 DATA 164,132,153,196,2,32,52,56,32,43,50,173,132,2,208,174,5527
1860 DATA 173,132,2,208,251,96,50,31,30,26,24,0,1,2,3,4,6508
1870 DATA 165,147,162,10,32,98,53,165,148,162,16,32,98,53,164,148,5650
1880 DATA 32,219,53,164,147,177,171,141,102,139,160,3,185,163,55,153,9351
1890 DATA 111,139,136,16,247,96,133,212,169,0,133,213,138,72,32,170,8731
1900 DATA 217,32,230,216,160,2,169,48,153,57,50,136,16,250,160,255,431
1910 DATA 200,177,243,16,251,41,127,145,243,200,152,73,3,41,3,170,6920
1920 DATA 160,0,177,243,157,57,50,200,232,224,3,208,245,160,3,104,651
1930 DATA 170,185,57,50,41,31,157,80,139,202,136,16,244,96,160,39,7470
1940 DATA 169,0,153,80,139,136,16,250,160,24,185,194,53,153,85,139,8884
1950 DATA 136,16,247,76,60,53,56,26,16,16,16,0,57,26,16,16,6462
1960 DATA 16,0,35,40,33,50,26,0,0,37,114,114,111,114,26,185,2269
1970 DATA 10,59,133,171,185,46,59,133,172,96,169,255,133,141,169,52,356
1980 DATA 162,72,32,18,52,32,152,54,176,32,165,137,197,138,240,32,8370
1990 DATA 165,139,197,140,208,20,165,138,197,137,176,8,72,165,137,133,9607
2000 DATA 138,104,133,137,32,79,54,76,241,53,169,255,141,252,2,96,9458
2010 DATA 165,140,197,139,240,244,176,8,72,165,139,133,140,104,133,139,480
2020 DATA 32,50,54,76,22,54,164,140,32,219,53,164,137,165,149,145,8995
2030 DATA 171,198,140,164,140,196,139,208,239,32,219,53,164,137,165,149,2611
2040 DATA 145,171,96,164,139,32,219,53,164,138,165,149,145,171,136,196,2229
2050 DATA 137,208,249,145,171,96,169,0,141,31,208,96,169,255,133,141,1581
2060 DATA 169,52,162,81,32,18,52,32,152,54,144,1,96,165,138,197,6315
2070 DATA 137,240,249,144,247,165,140,197,139,240,241,144,239,230,140,32,5760
2080 DATA 79,54,230,139,165,139,197,140,208,245,240,224,169,255,133,141,7339
2090 DATA 173,252,2,201,28,208,7,169,255,141,252,2,56,96,173,120,9454
2100 DATA 2,201,15,240,6,32,209,48,32,216,48,173,132,2,208,224,9078
2110 DATA 32,98,54,173,132,2,240,251,230,141,164,141,165,147,153,137,3218
2120 DATA 0,165,148,153,139,0,165,141,201,1,240,3,76,156,54,24,5345
2130 DATA 96,116,51,149,52,230,53,10,55,104,54,19,55,148,56,251,5298
2140 DATA 56,10,57,48,57,155,57,163,57,183,57,20,58,148,58,5,2483
2150 DATA 18,58,10,21,56,0,62,47,182,185,57,37,22,45,173,192,4630
2160 DATA 2,73,14,141,192,2,96,162,91,169,52,32,18,52,32,188,3769
2170 DATA 55,144,1,96,162,16,32,200,49,169,3,157,66,3,169,58,4041
2180 DATA 157,69,3,169,249,157,68,3,169,0,157,75,3,169,4,157,4972
2190 DATA 74,3,32,86,228,16,5,132,129,76,112,55,169,7,157,66,4556
2200 DATA 3,169,128,157,69,3,169,0,157,68,3,169,4,157,73,3,2646
2210 DATA 169,0,157,72,3,32,86,228,132,129,48,8,162,16,32,200,4883
2220 DATA 49,76,86,53,162,16,32,200,49,32,68,218,165,129,162,34,6671
2230 DATA 32,98,53,76,170,55,162,32,32,200,49,169,3,157,66,3,3621
2240 DATA 169,55,157,69,3,169,167,157,68,3,169,0,157,75,3,169,5061
2250 DATA 4,157,74,3,76,86,228,174,239,238,229,75,58,155,169,0,95
2260 DATA 162,32,157,72,3,157,73,3,169,7,157,66,3,76,86,228,4888
2270 DATA 160,0,152,153,138,139,200,192,13,208,248,169,36,141,136,139,1617
2280 DATA 169,26,141,137,139,162,0,134,130,169,63,157,138,139,169,0,7923
2290 DATA 141,182,2,169,64,141,190,2,32,170,55,166,130,201,27,208,8811
2300 DATA 2,56,96,201,155,240,60,41,127,201,32,144,218,201,126,208,2568
2310 DATA 15,224,0,240,210,202,169,0,157,138,139,157,139,139,240,199,3921
2320 DATA 201,96,240,195,201,123,176,191,224,13,240,187,72,157,251,58,3573
2330 DATA 42,42,42,42,41,3,168,104,41,159,25,61,50,157,138,139,5089
2340 DATA 232,208,164,157,251,58,24,96,164,132,185,113,56,141,131,139,9725
2350 DATA 185,118,56,141,132,139,185,196,2,72,41,240,74,74,74,74,6221
2360 DATA 32,92,56,141,139,139,104,41,15,32,92,56,141,147,139,96,5544
2370 DATA 170,189,97,56,96,16,17,18,19,20,21,22,23,24,25,33,6676
2380 DATA 34,35,36,37,38,16,16,17,17,17,24,25,16,17,18,0,4877
2390 DATA 35,111,108,111,114,26,0,23,0,0,0,40,117,101,26,4,8194
2400 DATA 0,0,0,44,117,109,26,132,169,4,133,129,169,7,133,131,6011
2410 DATA 169,57,162,87,32,18,52,32,188,55,144,1,96,162,16,32,2521
2420 DATA 200,49,165,129,157,74,3,169,3,157,66,3,169,58,157,69,5158
2430 DATA 3,169,249,157,68,3,169,0,157,75,3,32,86,228,16,5,2897
2440 DATA 132,129,76,112,55,162,16,169,144,157,69,3,169,0,157,68,5518
2450 DATA 3,169,0,157,72,3,169,10,157,73,3,165,131,157,66,3,4155
2460 DATA 32,86,228,132,129,48,219,162,16,32,200,49,76,86,53,169,6581
2470 DATA 8,133,129,169,11,133,131,169,57,162,99,76,160,56,169,57,7374
2480 DATA 162,133,32,18,52,32,64,57,176,25,104,104,32,171,57,169,5027
2490 DATA 0,141,0,208,141,1,208,169,6,160,95,162,228,32,92,228,206
2500 DATA 76,116,228,96,169,57,162,110,32,18,52,32,64,57,176,3,2819
2510 DATA 32,50,51,96,173,252,2,162,255,201,35,240,9,201,43,208,1340
2520 DATA 243,142,252,2,24,96,142,252,2,56,96,44,111,97,100,105,5660
2530 DATA 110,103,0,102,105,108,229,51,97,118,105,110,103,0,102,105,5515
2540 DATA 108,229,35,44,37,33,50,1,0,33,114,101,0,121,111,117,2155
2550 DATA 0,115,117,114,101,0,57,15,174,49,53,41,52,1,0,33,8960
2560 DATA 114,101,0,121,111,117,0,115,117,114,101,0,57,15,174,32,2914
2570 DATA 171,57,104,104,76,49,48,32,171,57,104,104,76,52,48,160,4346
2580 DATA 50,185,192,127,153,128,127,136,16,247,96,169,52,162,103,32,8293
2590 DATA 18,52,169,255,133,141,32,152,54,144,1,96,165,140,56,229,8888
2600 DATA 139,201,10,176,246,170,165,138,56,229,137,201,10,176,236,133,3359
2610 DATA 164,134,165,169,0,133,167,165,137,133,166,230,138,230,140,164,4387
2620 DATA 139,32,219,53,164,166,177,171,164,167,153,82,59,230,167,230,4100
2630 DATA 166,165,166,197,138,208,237,165,137,133,166,230,139,165,139,197,5832
2640 DATA 140,208,220,169,1,133,153,96,165,153,208,1,96,169,52,162,9475
2650 DATA 115,32,18,52,173,120,2,201,15,240,6,32,209,48,32,216,6608
2660 DATA 48,173,252,2,201,28,208,6,169,255,141,252,2,96,173,132,1218
2670 DATA 2,208,225,32,98,54,173,132,2,240,251,32,43,50,165,147,8621
2680 DATA 133,137,133,167,24,101,164,133,138,230,138,201,128,144,1,96,9795
2690 DATA 165,148,133,139,24,101,165,133,140,230,140,201,18,176,240,169,3565
2700 DATA 0,133,166,164,139,32,219,53,164,166,185,82,59,164,167,145,1007
2710 DATA 171,230,167,230,166,165,167,197,138,208,237,165,137,133,167,230,7064
2720 DATA 139,165,139,197,140,208,220,96,32,116,51,169,58,162,188,32,9041
2730 DATA 18,52,173,252,2,201,255,240,249,201,28,208,1,96,160,9,256
2740 DATA 217,215,58,240,5,136,16,248,48,232,165,149,153,154,0,96,9494
2750 DATA 0,0,36,101,102,105,110,101,0,17,13,16,0,0,0,0,6485
2760 DATA 0,0,0,0,0,0,0,0,0,0,128,31,30,26,24,29,6118
2770 DATA 27,51,53,48,50,160,9,217,215,58,240,5,136,16,248,56,8082
2780 DATA 96,185,154,0,133,149,169,255,141,252,2,24,96,68,58,226,9275
2790 DATA 2,227,2,0,48,0,0,0,0,0,0,0,0,0,0,0,3492

Listing 2: Assembly

	.OPT	NOLIST
;-----------------------
;
;Scrolling Screen Editor
;for SNOWPLOW!
;
;by: Barry Kolbe
;and Bryan Schappel
;
;-----------------------
;
	*=	0
PASS	.=	PASS+1
	.IF	PASS=1
	.INCLUDE	#D:SYSEQU.M65
	.ENDIF
ICP	=	$3F
SCNMEM	=	$9000
PMB	=	$8000
MYPMB	=	$8400
P1MEM	=	MYPMB+$0100
CHSET	=	PMB
TXTWIN	=	$8B00
CHRLN1	=	TXTWIN+40
CHRLN2	=	TXTWIN
TXLN	=	TXTWIN+120
STSLN	=	TXTWIN+80
SC2	=	SCNMEM+128
SC3	=	SC2+128
SC4	=	SC3+128
SC5	=	SC4+128
SC6	=	SC5+128
SC7	=	SC6+128
SC8	=	SC7+128
SC9	=	SC8+128
SC10	=	SC9+128
BCKUP	=	$7FC0
;
	*=	$80
X1	.DS	1
X2	.DS	1
X3	.DS	1
PGT	.DS	1
CREG	.DS	1
PXP	.DS	2
PYP	.DS	1
NYP	.DS	1
DRX	.DS	2
DRY	.DS	2
NPTS	.DS	1
INITAB
SPRT	.DS	1
LRCRS	.DS	1
LRSCRL	.DS	1
UDSCRL	.DS	1
UDCRS	.DS	1
XPOS	.DS	1
YPOS	.DS	1
PCHR	.DS	1
CXPOS	.DS	1
LRADD	.DS	1
UDADD	.DS	1
XERXFLG	.DS	1
KCHRS	.DS	10
DBH	.DS	1
DBV	.DS	1
YH2	.DS	1
YH3	.DS	1
DLIDX	.DS	1
IL	.DS	2
JL	.DS	2
;
;Display List
;
	*=	$7F80
DL1	.BYTE	$70,$70,$70
	.BYTE	$45
SL1	.WORD	SCNMEM
	.BYTE	$45
	.WORD	SC2
	.BYTE	$45
	.WORD	SC3
	.BYTE	$45
	.WORD	SC4
	.BYTE	$45
	.WORD	SC5
	.BYTE	$45
	.WORD	SC6
	.BYTE	$45
	.WORD	SC7
	.BYTE	$45
	.WORD	SC8
	.BYTE	$45
	.WORD	SC9
	.BYTE	$45
	.WORD	SC10
	.BYTE	$C4
	.WORD	TXTWIN
	.BYTE	$82,$82,$02,$41
	.WORD	DL1
	.OPT	LIST
	.OPT	NOLIST
;
;Display List Interrupt
;
	*=	$3000
BEGIN	JMP	STRT
DLI	PHA
	LDA	#$E0
	STA	CHBASE
	LDA	#$0A
	STA	COLPF1
	TXA
	PHA
	LDX	DLIDX
	LDA	DLICL,X
	STA	COLPF2
	LDA	#0
	STA	COLBK
	STA	WSYNC
	INC	DLIDX
	PLA
	TAX
	PLA
	RTI
;
;Start of Program
;
STRT	LDY	#50
MDL	LDA	DL1,Y
	STA	BCKUP,Y
	DEY
	BPL	MDL
RSTRT	JSR	CLRSCN
RBEG	JSR	CLRTXT
	JSR	SETSTS
	JSR	PLRMEM
	JSR	SETPMG
	JSR	CLRPM
	JSR	DEFPLR
	LDA	#6
	LDY	#<VBI
	LDX	#>VBI
	JSR	SETVBV
;
	LDA	#>DL1
	STA	SDLSTL+1
	LDA	#<DL1
	STA	SDLSTL
	JSR	INIT
	JSR	SHWCRS
	JSR	SHWXY
	JSR	CHRCRS
;
;Try Stick
;
CHKSTK	LDA	STICK0
	CMP	#$0F
	BEQ	AKEY
	JSR	GENMOV
	JSR	TIME
	JMP	CHKSTK
AKEY	LDA	CH
	JSR	SWITCH
	BCC	AKEY
	CMP	#$FF
	BEQ	TRYTRG
	LDX	#$FF
	STX	CH
	LDY	#14
CKCMP	CMP	CMKEY,Y
	BEQ	GTCM
	DEY
	BPL	CKCMP
	BMI	TRYTRG
GTCM	TYA
	ASL	A
	TAX
	LDA	CMTAB,X
	STA	JMPOF+1
	LDA	CMTAB+1,X
	STA	JMPOF+2
	JSR	CLRLN1
JMPOF	JSR	$FFFF
	JSR	CLRLN1
	JSR	SHWXY
	JMP	AKEY
TRYTRG	LDA	STRIG0
	BNE	CHKSTK
	JSR	PLOT
	JMP	CHKSTK
;
;Immed. Vblank
;
VBI	LDY	#4
VBI1	LDA	COLOR0,Y
	STA	COLPF0,Y
	DEY
	BPL	VBI1
	LDA	#>CHSET
	STA	CHBASE
	INY
	STY	DLIDX
	JMP	SYSVBV
;
;General Move Routine
;
GENMOV	CMP	#7	;right?
	BNE	TLF
	JMP	MVRT
;
;Timer
;
TIME	JSR	DELAY
	JSR	SHWXY
	LDA	#0
	STA	ATRACT
	RTS
;
TLF	CMP	#11	;left?
	BNE	TUP
	JMP	MVLF
;
;Move Up
;
TUP	CMP	#14
	BNE	TDN
UP1	LDA	UDCRS
	BEQ	AA3	;scrol?
	DEC	UDCRS
	DEC	YPOS
	LDA	NYP
	SEC
	SBC	#16
	STA	NYP
TU1	JMP	UPDN
AA3	LDA	UDSCRL
	BEQ	NOUD
	DEC	UDSCRL
	DEC	YPOS
	JSR	SCRUP
NOUD	RTS
;
;Move Down
;
TDN	CMP	#13
	BNE	TUR
DN1	LDA	UDCRS
	CMP	#9
	BEQ	AA4	;scroll?
	INC	UDCRS
	INC	YPOS
	LDA	NYP
	CLC
	ADC	#16
	STA	NYP
	JMP	TU1
AA4	LDA	UDSCRL
	CMP	#9
	BEQ	NOUD
	INC	UDSCRL
	JSR	SCRDN
	INC	YPOS
	RTS
;Up-Right
TUR	CMP	#6
	BNE	TDR
	JSR	MVRT
	JMP	UP1
;Down-Right
TDR	CMP	#5
	BNE	TUL
	JSR	MVRT
	JMP	DN1
;Up-Left
TUL	CMP	#10
	BNE	TDL
	JSR	MVLF
	JMP	UP1
;Down-Left
TDL	CMP	#9
	BNE	NST
	JSR	MVLF
	JSR	DN1
NST	RTS
;
;Move Up and Down
;
UPDN	JSR	PLRMEM
	JSR	ERSPLR
	LDA	NYP
	STA	PYP
	JMP	PUTPLR
;
;Erase Player
;
ERSPLR	LDA	#0
	LDY	PYP
	LDX	#15
EML	STA	(IL),Y
	INY
	DEX
	BPL	EML
	RTS
;
;Set up Player Memory
;
PLRMEM	LDA	#>MYPMB
	STA	IL+1
	LDA	#0
	STA	IL
	RTS
;
;Move Right
;
MVRT	LDA	LRCRS
	CMP	#39
	BNE	AA1
	LDA	#1
	STA	LRADD
	LDA	LRSCRL
	CMP	#88	;end scrn
	BEQ	NOLR
	INC	LRSCRL
	INC	XPOS
	JSR	SCRLR
NOLR	RTS
AA1	INC	LRCRS
	INC	XPOS
	LDA	PXP
	CLC
	ADC	#4
	STA	PXP
MV1	LDA	PXP
	STA	HPOSP0
	RTS
;
;Move Left
;
MVLF	LDA	LRCRS
	BEQ	AA2
	DEC	LRCRS
	LDA	PXP
	SEC
	SBC	#4
	STA	PXP
	DEC	XPOS
	JMP	MV1
AA2	LDA	LRSCRL
	BEQ	NOLR
	DEC	LRSCRL
	DEC	XPOS
	LDA	#$FF
	STA	LRADD
	JMP	SCRLR
;
;Close IOCB
;
CLOSE	STX	X1
	LDA	#12
	STA	ICCOM,X
	JSR	CIOV
	LDX	X1
	RTS
;
;Set up PMG
;
SETPMG	LDA	#62
	STA	SDMCTL
	LDA	#1
	STA	GPRIOR
	LDA	#3
	STA	GRACTL
	LDA	#>PMB
	STA	PMBASE
	LDA	#$6C
	STA	PCOLR0
	LDA	#0
	STA	SIZEP0
	STA	SIZEP1
	RTS
;
;Clear P/M area
;
CLRPM	LDA	#>MYPMB
	STA	IL+1
	LDA	#0
	STA	IL
CA2	LDY	#0
CA1	STA	(IL),Y
	INY
	BNE	CA1
	RTS
;
;Define Players
;
DEFPLR	LDY	#$20
	STY	NYP
	STY	PYP
	JSR	PLRMEM
	JSR	PUTPLR
	LDA	#$2E
	STA	HPOSP0
	STA	PXP
	RTS
;
;Put Player on screen
;
PUTPLR	LDY	PYP
	LDX	#0
DF1	LDA	PL0DEF,X
	STA	(IL),Y
	INX
	INY
	CPX	#16
	BNE	DF1
	RTS
;
;Delay Loop
;
DELAY	LDX	#0
	STX	RTCLOK
YLP1	LDX	RTCLOK
	CPX	#4
	BNE	YLP1
	RTS
;
DLICL	.BYTE	$92,$42,$04
NBF	.BYTE	"000 "
A2I	.BYTE	$40,$00,$20,$60
PL0DEF	.BYTE	$FF,$C3,$C3,$C3
	.BYTE	$C3,$C3,$C3,$C3
	.BYTE	$C3,$C3,$C3,$C3
	.BYTE	$C3,$C3,$C3,$FF
P1DEF	.BYTE	$FC,$C6,$C6,$C6
	.BYTE	$C6,$C6,$C6,$FC
;
;Show Char Set
;
SHWCRS	LDX	SPRT
	INX
	TXA
	ASL	A
	ASL	A
	ASL	A
	ASL	A
	ASL	A
	TAX
	DEX
	TXA
	LDY	#31
SH1	STA	CHRLN1+4,Y
	STA	CHRLN2+4,Y
	DEX
	TXA
	DEY
	BPL	SH1
	RTS
;
;Init Memory
;
INIT	LDY	#25
	LDA	#0
INILP	STA	INITAB,Y
	DEY
	BPL	INILP
;set up 128
	LDY	#0
	TYA
	STA	M128L
	LDA	#>SCNMEM
	STA	M128H
TLP	LDA	M128L,Y
	CLC
	ADC	#128
	STA	M128L+1,Y
	LDA	M128H,Y
	ADC	#0
	STA	M128H+1,Y
	INY
	CPY	#33
	BNE	TLP
	JSR	OPNKEY
	LDA	#>CHSET
	STA	CHBAS
	LDA	#192
	STA	NMIEN
	LDA	#>DLI
	STA	VDSLST+1
	LDA	#<DLI
	STA	VDSLST
	RTS
;
;Plot a Character
;
PLOT	LDX	YPOS
	LDA	M128L,X
	STA	JL
	LDA	M128H,X
	STA	JL+1
	LDA	PCHR
	LDY	XPOS
	STA	(JL),Y
	RTS
;
STSCRL	LDA	#>SL1
	STA	JL+1
	LDA	#<SL1
	STA	JL
	RTS
;
;Scroll Left/right
;
SCRLR	JSR	STSCRL
	LDY	#0
SLR	LDA	(JL),Y
	CLC
	ADC	LRADD
	STA	(JL),Y
	INY
	INY
	INY
	CPY	#30
	BNE	SLR
	RTS
;
;Scroll Down
;
SCRDN	LDY	#0
SQ1	LDA	SL1+4,Y
	STA	SL1+1,Y
	LDA	SL1+3,Y
	STA	SL1,Y
	INY
	INY
	INY
	CPY	#27
	BNE	SQ1
	LDA	SL1+24
	CLC
	ADC	#$80
	STA	SL1+27
	LDA	SL1+25
	ADC	#0
	STA	SL1+28
	RTS
;
;Scroll Up
;
SCRUP	LDY	#27
SUP1	LDA	SL1-3,Y
	STA	SL1,Y
	LDA	SL1-2,Y
	STA	SL1+1,Y
	DEY
	DEY
	DEY
	BNE	SUP1
	LDA	SL1
	SEC
	SBC	#$80
	STA	SL1
	LDA	SL1+1
	SBC	#0
	STA	SL1+1
	RTS
;
;Clear Screen
;
CLRSCN	LDA	#>SCNMEM
	STA	IL+1
	LDA	#0
	STA	IL
	LDX	#9	;10 pages
CS1	LDY	#$FF
CSLP	STA	(IL),Y
	DEY
	CPY	#$FF
	BNE	CSLP
	INC	IL+1
	DEX
	BPL	CS1
	RTS
;
;Character Cursor
;
CHRCRS	LDY	#$FF	;erase
	LDA	#0
CR1	INY
	STA	P1MEM,Y
	CPY	#$FF
	BNE	CR1
;define playr
	LDY	#200
	LDX	#0
CR2	LDA	P1DEF,X
	STA	P1MEM,Y
	INY
	INX
	CPX	#8
	BNE	CR2
	LDA	#ICP
	STA	HPOSP0+1
	STA	PXP+1
	LDA	#$4D
	STA	PCOLR1
	RTS
;
;Move Character Cursor
;
KSELECT	LDX	#<CHRMES
	LDA	#>CHRMES
	JSR	PRINT
MVCRS	LDA	STICK0
	CMP	#$0F
	BNE	BH
	JMP	CKTRG2
BH	CMP	#7	;rt?
	BNE	ML
	LDA	CXPOS
	CMP	#31
	BEQ	BB
	INC	CXPOS
	LDA	PXP+1
	CLC
	ADC	#4
	JMP	BF
BB	LDA	#0
	STA	CXPOS
	LDA	#ICP
	BNE	BF
;
ML	CMP	#11	;lef?
	BNE	MU
	LDA	CXPOS
	BEQ	BE
	DEC	CXPOS
	LDA	PXP+1
	SEC
	SBC	#4
BF	STA	PXP+1
	STA	HPOSP0+1
	JMP	SLOW
BE	LDA	#31
	STA	CXPOS
	LDA	#187
	BNE	BF
;up
MU	CMP	#14
	BNE	MD
	LDA	SPRT
	BEQ	BC
	DEC	SPRT
DOC	JSR	SHWCRS
	JMP	SLOW
BC	LDA	#3
	STA	SPRT
	BNE	DOC
;
MD	CMP	#13
	BNE	CKTRG2
	INC	SPRT
	LDA	SPRT
	CMP	#4
	BNE	DOC
	LDA	#0
	STA	SPRT
	BEQ	DOC
;
CKTRG2	LDA	STRIG0
	BNE	SJ
	JSR	CLICK
	JSR	DELAY
CTR	LDA	STRIG0
	BEQ	CTR
	LDX	SPRT
	INX
	TXA
	ASL	A
	ASL	A
	ASL	A
	ASL	A
	ASL	A
	CLC
	ADC	CXPOS
	SEC
	SBC	#32
	STA	PCHR
	JMP	DELAY
SLOW	JSR	DELAY
SJ	JMP	MVCRS
;
;Print Text  x=lo,a=hi
;
PRINT	STX	IL
	STA	IL+1
	LDY	#$FF
MLP	INY
	LDA	(IL),Y
	STA	TXLN+2,Y
	BPL	MLP
	AND	#$7F
	STA	TXLN+2,Y
	RTS
;
CHRMES	.SBYTE	"Choose character"
COLMES	.SBYTE	"Color register 0-4"
DRWMES	.SBYTE	"Draw mode"
BLKMES	.SBYTE	"Block fill"
FNTMES	.SBYTE	"Loading font"
DEFMES	.SBYTE	"Define block"
STPMES	.SBYTE	"Copy block"
;
;clearline
;
CLRLN1	LDY	#39
	LDA	#0
CN1	STA	TXLN,Y
	DEY
	BPL	CN1
	RTS
;
;Clear Text Window
;
CLRTXT	LDY	#160
	LDA	#0
CTLP	STA	TXTWIN,Y
	DEY
	CPY	#$FF
	BNE	CTLP
	RTS
;
;colors
;
COLORS	LDX	#<COLMES
	LDA	#>COLMES
	JSR	PRINT
CKEY	LDA	CH
	LDX	#$FF
	CMP	#$FF
	BEQ	CKEY
	CMP	#$1C	;out
	BEQ	CA
	LDY	#4
CMS	CMP	CLRKEY,Y
	BEQ	CCC
	DEY
	BPL	CMS
	BMI	CKEY
CA	STX	CH
	RTS
CCC	LDA	CLREG,Y	;offset
	STA	CREG	;save it
	JSR	CLRLN1
;Change Register
	LDX	#<REGMES
	LDA	#>REGMES
	JSR	PRINT
	JSR	DISREG
	LDY	CREG
	LDA	COLOR0,Y
	PHA
	AND	#$F0
	STA	X2
	PLA
	AND	#$0F
	STA	X3
CSTK	LDA	STICK0
	CMP	#7	;rt
	BNE	CLF
	LDA	X2
	CLC
	ADC	#16
	STA	X2
	JMP	SCOLR
CLF	CMP	#11
	BNE	CUP
	LDA	X2
	SEC
	SBC	#16
	STA	X2
	JMP	SCOLR
CUP	CMP	#14
	BNE	CDN
	INC	X3
	INC	X3
	LDA	X3
	AND	#$0F
	STA	X3
	JMP	SCOLR
CDN	CMP	#13
	BNE	CSTG
	DEC	X3
	DEC	X3
	LDA	X3
	AND	#$0F
	STA	X3
SCOLR	LDA	X2
	ORA	X3
	LDY	CREG
	STA	COLOR0,Y
	JSR	DISREG
	JSR	DELAY
CSTG	LDA	STRIG0
	BNE	CSTK
CC2	LDA	STRIG0
	BNE	CC2
	RTS
;
CLRKEY	.BYTE	$32,$1F,$1E,$1A,$18
CLREG	.BYTE	0,1,2,3,4
;
;Show X/Y Position
;
SHWXY	LDA	XPOS
	LDX	#10
	JSR	RJUST
	LDA	YPOS
	LDX	#16
	JSR	RJUST
;
;Show character
;
	LDY	YPOS
	JSR	WHER
	LDY	XPOS
	LDA	(JL),Y
	STA	STSLN+22
;
NOERM	LDY	#3
NLP	LDA	NOM,Y
	STA	STSLN+31,Y
	DEY
	BPL	NLP
	RTS
;
;Right justify a number
;
RJUST	STA	FR0
	LDA	#0
	STA	FR0+1
	TXA
	PHA
	JSR	IFP
	JSR	FASC
	LDY	#2
	LDA	#'0
RJ1	STA	NBF,Y
	DEY
	BPL	RJ1
	LDY	#$FF
RJ2	INY
	LDA	(INBUFF),Y
	BPL	RJ2
	AND	#$7F
	STA	(INBUFF),Y
	INY
	TYA
	EOR	#3
	AND	#3
	TAX
	LDY	#0
RJ3	LDA	(INBUFF),Y
	STA	NBF,X
	INY
	INX
	CPX	#3
	BNE	RJ3
	LDY	#3
	PLA
	TAX
RJ4	LDA	NBF,Y
	AND	#$1F
	STA	STSLN,X
	DEX
	DEY
	BPL	RJ4
	RTS
;
;Set up Status Line
;
SETSTS	LDY	#39
	LDA	#0
STLP	STA	STSLN,Y
	DEY
	BPL	STLP
	LDY	#24
STLX	LDA	SLD,Y
	STA	STSLN+5,Y
	DEY
	BPL	STLX
	JMP	SHWXY
SLD	.SBYTE	"X:000 Y:000 CHAR:  "
	.SBYTE	"Error:"
;
WHER	LDA	M128L,Y
	STA	JL
	LDA	M128H,Y
	STA	JL+1
	RTS
;
DRAW	LDA	#$FF
	STA	NPTS
	LDA	#>DRWMES
	LDX	#<DRWMES
	JSR	PRINT
DRG	JSR	GETTWO
	BCS	DRP
DODRW	LDA	DRX
	CMP	DRX+1
	BEQ	DUD	;up/dn
	LDA	DRY
	CMP	DRY+1
	BNE	DRP
	LDA	DRX+1
	CMP	DRX
	BCS	DR5
	PHA
	LDA	DRX
	STA	DRX+1
	PLA
	STA	DRX
DR5	JSR	DRLR
	JMP	DRG
DRP	LDA	#$FF
	STA	CH
	RTS
;
;Up and Down
DUD	LDA	DRY+1
	CMP	DRY
	BEQ	DRP
	BCS	UYOK
	PHA
	LDA	DRY
	STA	DRY+1
	PLA
	STA	DRY
UYOK	JSR	DWUD
	JMP	DRP
;
;Do Up/Down Draw
DWUD	LDY	DRY+1
DDB	JSR	WHER
	LDY	DRX
	LDA	PCHR
	STA	(JL),Y
	DEC	DRY+1
	LDY	DRY+1
	CPY	DRY
	BNE	DDB
	JSR	WHER
	LDY	DRX
	LDA	PCHR
	STA	(JL),Y
	RTS
;
;Draw left and right
DRLR	LDY	DRY
	JSR	WHER
	LDY	DRX+1
	LDA	PCHR
DR7	STA	(JL),Y
	DEY
	CPY	DRX
	BNE	DR7
	STA	(JL),Y
DR8	RTS
;
;Click Speaker
;
CLICK	LDA	#0
	STA	CONSOL
	RTS
;
BLOCK	LDA	#$FF
	STA	NPTS
	LDA	#>BLKMES
	LDX	#<BLKMES
	JSR	PRINT
	JSR	GETTWO
	BCC	BAB
BAC	RTS
BAB	LDA	DRX+1
	CMP	DRX
	BEQ	BAC
	BCC	BAC
	LDA	DRY+1
	CMP	DRY
	BEQ	BAC
	BCC	BAC
	INC	DRY+1
BAD	JSR	DRLR
	INC	DRY
	LDA	DRY
	CMP	DRY+1
	BNE	BAD
	BEQ	BAC
;
;Get two screen Positions
GETTWO	LDA	#$FF
	STA	NPTS
GTWO	LDA	CH
	CMP	#$1C
	BNE	DRS
	LDA	#$FF
	STA	CH
	SEC
	RTS
DRS	LDA	STICK0
	CMP	#$0F
	BEQ	DRU
	JSR	GENMOV
	JSR	TIME
DRU	LDA	STRIG0
	BNE	GTWO
	JSR	CLICK
REL	LDA	STRIG0
	BEQ	REL
	INC	NPTS
	LDY	NPTS
	LDA	XPOS
	STA	DRX,Y
	LDA	YPOS
	STA	DRY,Y
	LDA	NPTS
	CMP	#1
	BEQ	GOM
	JMP	GTWO
GOM	CLC
	RTS
CMTAB	.WORD	KSELECT
	.WORD	COLORS
	.WORD	DRAW
	.WORD	BRIGHT
	.WORD	BLOCK
	.WORD	FONT
	.WORD	LOADM
	.WORD	SAVEM
	.WORD	QUIT
	.WORD	CLRMAP
	.WORD	RESTART
	.WORD	HOME
	.WORD	DEFINE
	.WORD	XEROX
	.WORD	DEFKEY
;
CMKEY	.BYTE	$05,$12,$3A,$0A
	.BYTE	$15,$38,$00,$3E,$2F
	.BYTE	$B6,$B9,$39,$25
	.BYTE	$16,$2D
;k c d q clr ^h h m x t
;
;Change Luminance of Player
;
BRIGHT	LDA	PCOLR0
	EOR	#$0E
	STA	PCOLR0
	RTS
;
;Load Font
;
FONT	LDX	#<FNTMES
	LDA	#>FNTMES
	JSR	PRINT
	JSR	GTNAME
	BCC	FAA
	RTS
FAA	LDX	#$10
	JSR	CLOSE
	LDA	#3
	STA	ICCOM,X
	LDA	#>FNAME
	STA	ICBAH,X
	LDA	#<FNAME
	STA	ICBAL,X
	LDA	#0
	STA	AUX2,X
	LDA	#4
	STA	AUX1,X
	JSR	CIOV
	BPL	FAB
FAC	STY	X2
	JMP	IOERR
FAB	LDA	#7
	STA	ICCOM,X
	LDA	#>CHSET
	STA	ICBAH,X
	LDA	#0
	STA	ICBAL,X
	LDA	#4
	STA	ICBLH,X
	LDA	#0
	STA	ICBLL,X
	JSR	CIOV
	STY	X2
	BMI	IOERR
	LDX	#$10
	JSR	CLOSE
	JMP	NOERM
;
IOERR	LDX	#$10
	JSR	CLOSE
	JSR	ZFR0
	LDA	X2
	LDX	#34
	JSR	RJUST
	JMP	GETKEY
;
;Open keyboard
;
OPNKEY	LDX	#$20
	JSR	CLOSE
	LDA	#3
	STA	ICCOM,X
	LDA	#>KDEV
	STA	ICBAH,X
	LDA	#<KDEV
	STA	ICBAL,X
	LDA	#0
	STA	AUX2,X
	LDA	#4
	STA	AUX1,X
	JMP	CIOV
;
NOM	.SBYTE	+$80,"None"
KDEV	.BYTE	"K:",EOL
;
;Get a Key from CIO
GETKEY	LDA	#0
	LDX	#$20
	STA	ICBLL,X
	STA	ICBLH,X
	LDA	#7
	STA	ICCOM,X
	JMP	CIOV
;
;Get filename
;
GTNAME	LDY	#0
	TYA
GT1	STA	TXLN+18,Y
	INY
	CPY	#13
	BNE	GT1
	LDA	#$24
	STA	TXLN+16
	LDA	#$1A
	STA	TXLN+17
	LDX	#0
INLP	STX	X3
	LDA	#$3F
	STA	TXLN+18,X	;cursor
	LDA	#0
	STA	694
	LDA	#64
	STA	702
	JSR	GETKEY
	LDX	X3
	CMP	#$1B
	BNE	GT2
	SEC
	RTS
GT2	CMP	#$9B
	BEQ	INEOL
	AND	#$7F
	CMP	#$20
	BCC	INLP
	CMP	#126
	BNE	INEXT
	CPX	#0
	BEQ	INLP
	DEX
	LDA	#0
	STA	TXLN+18,X
	STA	TXLN+19,X
	BEQ	INLP
;
INEXT	CMP	#96
	BEQ	INLP
	CMP	#123
	BCS	INLP
	CPX	#13
	BEQ	INLP
	PHA
	STA	FNAME+2,X
	ROL	A
	ROL	A
	ROL	A
	ROL	A
	AND	#3
	TAY
	PLA
	AND	#$9F
	ORA	A2I,Y
	STA	TXLN+18,X
	INX
	BNE	INLP
;
INEOL	STA	FNAME+2,X
	CLC
	RTS
;
;Show color register
;
DISREG	LDY	CREG
RGD	LDA	CRG1,Y
	STA	TXLN+11
	LDA	CRG2,Y
	STA	TXLN+12
	LDA	COLOR0,Y
	PHA
	AND	#$F0
	LSR	A
	LSR	A
	LSR	A
	LSR	A
	JSR	HEX
	STA	TXLN+19
	PLA
	AND	#$0F
	JSR	HEX
	STA	TXLN+27
	RTS
;
HEX	TAX
	LDA	HEXB,X
	RTS
;
HEXB	.SBYTE	"0123456789ABCDEF"
;
CRG1	.SBYTE	"00111"
CRG2	.SBYTE	"89012"
REGMES	.SBYTE	" Color: 7   Hue:$   Lum:$"
;
;Load a Map
LOADM	LDA	#4	;read
	STA	X2
	LDA	#7
	STA	PGT
	LDA	#>LODMES
	LDX	#<LODMES
INLOD	JSR	PRINT
	JSR	GTNAME
	BCC	NMOK
	RTS
NMOK	LDX	#$10
	JSR	CLOSE
	LDA	X2
	STA	AUX1,X
	LDA	#3
	STA	ICCOM,X
	LDA	#>FNAME
	STA	ICBAH,X
	LDA	#<FNAME
	STA	ICBAL,X
	LDA	#0
	STA	AUX2,X
	JSR	CIOV
	BPL	RWOK
	STY	X2
RWER	JMP	IOERR
RWOK	LDX	#$10
	LDA	#>SCNMEM
	STA	ICBAH,X
	LDA	#<SCNMEM
	STA	ICBAL,X
	LDA	#0
	STA	ICBLL,X
	LDA	#10
	STA	ICBLH,X
	LDA	PGT
	STA	ICCOM,X
	JSR	CIOV
	STY	X2
	BMI	RWER
	LDX	#$10
	JSR	CLOSE
	JMP	NOERM
;
;Save a map
;
SAVEM	LDA	#8	;write
	STA	X2
	LDA	#11
	STA	PGT
	LDA	#>SAVMES
	LDX	#<SAVMES
	JMP	INLOD
;
;quit
QUIT	LDA	#>QUTMES
	LDX	#<QUTMES
	JSR	PRINT
	JSR	SURE
	BCS	NOQ
	PLA
	PLA
	JSR	MOVEB
	LDA	#0
	STA	HPOSP0
	STA	HPOSP0+1
	LDA	#6
	LDY	#<SYSVBV
	LDX	#>SYSVBV
	JSR	SETVBV
	JMP	WARMSV
NOQ	RTS
;
;Clear Map
CLRMAP	LDA	#>SURMES
	LDX	#<SURMES
	JSR	PRINT
	JSR	SURE
	BCS	ERT
	JSR	CLRSCN
ERT	RTS
;
;sure?
SURE	LDA	CH
	LDX	#$FF
	CMP	#$23
	BEQ	NO
	CMP	#$2B
	BNE	SURE
	STX	CH
	CLC
	RTS
NO	STX	CH
	SEC
	RTS
LODMES	.SBYTE	"Loading file"
SAVMES	.SBYTE	"Saving file"
SURMES	.SBYTE	"CLEAR! Are you sure Y/N"
QUTMES	.SBYTE	"QUIT! Are you sure Y/N"
;
;restart
RESTART	JSR	MOVEB
	PLA
	PLA
	JMP	RSTRT
;
;home
HOME	JSR	MOVEB
	PLA
	PLA
	JMP	RBEG
;
;Get Display List back
MOVEB	LDY	#50
MDLB	LDA	BCKUP,Y
	STA	DL1,Y
	DEY
	BPL	MDLB
	RTS
;
;Define block
DEFINE	LDA	#>DEFMES
	LDX	#<DEFMES
	JSR	PRINT
	LDA	#$FF
	STA	NPTS
	JSR	GETTWO
	BCC	DFJ
DFR	RTS
DFJ	LDA	DRY+1
	SEC
	SBC	DRY
	CMP	#10
	BCS	DFR
	TAX		;keep
	LDA	DRX+1
	SEC
	SBC	DRX
	CMP	#10
	BCS	DFR
	STA	DBH
	STX	DBV
	LDA	#0
	STA	YH3
	LDA	DRX
	STA	YH2
	INC	DRX+1
	INC	DRY+1
DFK	LDY	DRY
	JSR	WHER
DFL	LDY	YH2
	LDA	(JL),Y
	LDY	YH3
	STA	DEFBLK,Y
	INC	YH3
	INC	YH2
	LDA	YH2
	CMP	DRX+1
	BNE	DFL
	LDA	DRX
	STA	YH2
	INC	DRY
	LDA	DRY
	CMP	DRY+1
	BNE	DFK
	LDA	#1
	STA	XERXFLG	;set flag
	RTS
;
;xerox
XEROX	LDA	XERXFLG	;chk if
	BNE	XEROX1	;block defined
	RTS
XEROX1	LDA	#>STPMES
	LDX	#<STPMES
	JSR	PRINT
XST	LDA	STICK0
	CMP	#$0F
	BEQ	XKY
	JSR	GENMOV
	JSR	TIME
XKY	LDA	CH
	CMP	#$1C
	BNE	XTRG
	LDA	#$FF
	STA	CH
	RTS
XTRG	LDA	STRIG0
	BNE	XST
	JSR	CLICK
XT2	LDA	STRIG0
	BEQ	XT2
	JSR	DELAY
	LDA	XPOS
	STA	DRX
	STA	YH3
	CLC
	ADC	DBH
	STA	DRX+1
	INC	DRX+1
	CMP	#128
	BCC	XAA
XAB	RTS
XAA	LDA	YPOS
	STA	DRY
	CLC
	ADC	DBV
	STA	DRY+1
	INC	DRY+1
	CMP	#18
	BCS	XAB
;do xerox
	LDA	#0
	STA	YH2
XLQ	LDY	DRY
	JSR	WHER
XLP	LDY	YH2
	LDA	DEFBLK,Y
	LDY	YH3
	STA	(JL),Y
	INC	YH3
	INC	YH2
	LDA	YH3
	CMP	DRX+1
	BNE	XLP
	LDA	DRX
	STA	YH3
	INC	DRY
	LDA	DRY
	CMP	DRY+1
	BNE	XLQ
	RTS
;
;Define a key
DEFKEY	JSR	KSELECT
	LDA	#>KEYMES
	LDX	#<KEYMES
	JSR	PRINT
DKEY	LDA	CH
	CMP	#$FF
	BEQ	DKEY
	CMP	#$1C
	BNE	DKO
	RTS
DKO	LDY	#9
DK2	CMP	KEYK,Y
	BEQ	DK3
	DEY
	BPL	DK2
	BMI	DKEY
DK3	LDA	PCHR
	STA	KCHRS,Y
	RTS
;
KEYMES	.SBYTE	"  Define 1-0               "
;
KEYK	.BYTE	$1F,$1E,$1A,$18
	.BYTE	$1D,$1B,$33,$35
	.BYTE	$30,$32
;
;Switch keys
;
SWITCH	LDY	#9
SW1	CMP	KEYK,Y
	BEQ	SW2
	DEY
	BPL	SW1
	SEC
	RTS
SW2	LDA	KCHRS,Y
	STA	PCHR
	LDA	#$FF
	STA	CH
	CLC
	RTS
FNAME	.BYTE	"D:"
;
	.DS	15
M128L	.DS	36
M128H	.DS	36
DEFBLK	.DS	120
	*=	$02E0
	.WORD	BEGIN