@L|}6CD l0C)HCC WhL/h `CmCDiD`  R@W1  Y0@R !L` D  C D     )16CS S)  C)D1 p p 0 C9DI pCDL~CiCDiD``c>>8|8|>>ZP[Z[Z[KJX@[Y@" D( "D(D("} !BLp      @@ 0H0"$&A } #,0a,0H2  8D@` `?}8?'  |cUIU}cA]U]A8|>>8|>>>BZX[[Z[KZ[[YX  D( " }D(D("!B$8    8#@@ H0"$F8 }&0 0d ` x? }`0  0=  }pcUIUcA]U]A8|8|>>ZP[Z[Z[KJX@[Y@" D( "D(D("10 ;EFT VERSION 1.8D (DATA) 11/30/81 COPYRIGHT CHRIS CRAWFORD 198120 *=$540030 CORPSX .BYTE 0,40,40,40,40,40,41,40,41,41,}4140 .BYTE 42,42,42,42,43,43,43,41,40,40,41,4150 .BYTE 42,42,42,40,41,42,41,42,42,43,41,4260 .BYTE 43,30,30,31,33,35,37},35,36,36,45,4570 .BYTE 38,45,31,45,45,32,45,4580 ;RUSSIAN90 .BYTE 29,27,24,230100 .BYTE 20,15,0,0,0,0,0,0,0,0,0,0011}0 .BYTE 21,21,30,30,39,38,23,19,34,34,31,270120 .BYTE 33,41,40,39,42,39,39,39,39,39,37,390130 .BYTE 39,39,40,41,41,39,36},34,32,35,30,280140 .BYTE 25,29,32,33,26,21,29,0,28,21,21,210150 .BYTE 20,20,12,0,0,0,0,0,0,0,21,250160 .BYTE 0,0,0,0,0},0,0,0,0,0,0,0,0,00170 .BYTE 0,0,0,0,38,21,12,20,21,20,15,21,20,190180 CORPSY .BYTE 0,20,19,18,17,16,20,19,18,17,160190 }.BYTE 20,19,18,17,19,18,17,23,22,21,21,220200 .BYTE 22,23,24,15,14,13,15,14,12,13,15,160210 .BYTE 16,2,3,4,6,7,8,38,37,38},20,15,80220 .BYTE 16,1,20,19,1,17,180230 ;RUSSIAN0240 .BYTE 32,31,38,38,38,380250 .BYTE 20,8,18,10,14,33,11,15,20,10}0260 .BYTE 28,27,14,13,28,28,31,24,22,21,34,60270 .BYTE 37,24,23,23,25,20,22,18,17,21,20,190280 .BYTE 16,15,14,13,12,11,}9,8,6,9,4,2,60290 .BYTE 14,22,36,23,8,33,28,30,20,28,33,270300 .BYTE 30,8,10,32,11,25,12,23,13,29,30,310310 .BYTE 15,27},17,25,11,23,19,21,33,28,13,260320 .BYTE 10,29,35,27,15,30,22,8,13,14,280330 .BYTE 3,3,3,20340 MSTRNG .BYTE 0,203,205,19}2,199,184,136,127,1500350 .BYTE 129,136,109,72,70,81,131,102,530360 .BYTE 198,194,129,123,101,104,112,1200370 .BYTE 202},195,191,72,140,142,119,1110380 .BYTE 122,77,97,96,92,125,131,1060390 .BYTE 112,104,101,210,97,98,95,520400 .BYTE 98,96},55,104,1010410 ;RUSSIAN0420 .BYTE 100,103,1100430 .BYTE 101,92,103,105,107,111,88,117,840440 .BYTE 109,89,105,930450} .BYTE 62,104,101,67,104,84,127,1120460 .BYTE 111,91,79,69,108,118,137,700470 .BYTE 85,130,91,131,71,86,75,900480 .BYT}E 123,124,151,128,88,77,79,800490 .BYTE 126,79,91,84,72,86,76,990500 .BYTE 67,78,121,114,105,122,127,1290510 .BYTE 105,}111,112,127,119,89,1080520 .BYTE 113,105,94,103,97,108,110,1110530 .BYTE 96,109,112,95,93,114,103,1070540 .BYTE 105,92,}109,101,106,95,99,1010550 .BYTE 118,106,112,104,185,108,94,1020560 .BYTE 980570 CSTRNG *=*+1590580 SWAP .BYTE 0,126,126},126,126,126,125,125,1250590 .BYTE 125,125,125,125,125,125,125,1250600 .BYTE 125,126,126,125,125,125,125,1250610 .BYTE  }125,126,126,126,126,125,125,1250620 .BYTE 125,125,125,125,125,125,125,1250630 .BYTE 125,125,125,125,126,125,126,1250640 !} .BYTE 125,125,125,125,125,1260650 ;RUSSIAN0660 .BYTE 253,2530670 .BYTE 253,253,253,253,253,253,253,2530680 .BYTE 254,"}254,254,254,254,2540690 .BYTE 254,253,253,254,253,254,253,2530700 .BYTE 253,254,253,253,253,253,253,2540710 .BYTE 254,2#}53,253,253,254,254,254,2540720 .BYTE 253,253,253,253,254,254,254,2540730 .BYTE 253,254,254,254,253,253,253,2530740 .BYT$}E 253,253,253,253,253,253,253,2530750 .BYTE 253,253,253,253,253,253,253,2530760 .BYTE 253,253,254,253,253,253,253,253077%}0 .BYTE 253,253,253,253,254,254,254,2530780 .BYTE 254,253,254,254,253,254,253,2530790 .BYTE 253,253,253,253,253,253,253,&}2530800 ARRIVE .BYTE 255,0,255,0,0,0,0,0,00810 .BYTE 0,0,255,255,255,255,255,2550820 .BYTE 255,0,0,0,0,0,0,00830 .BYTE'} 0,0,0,0,255,0,0,00840 .BYTE 0,255,255,0,0,0,0,00850 .BYTE 0,0,0,255,2,255,20860 .BYTE 5,6,9,10,11,20,240870 ;RUSSIAN(}0880 .BYTE 4,5,7,9,11,13,7,12,80890 .BYTE 10,10,14,15,16,18,70900 .BYTE 0,0,0,0,0,0,0,00910 .BYTE 0,0,0,0,0,0,0,00920)} .BYTE 0,0,0,0,0,0,0,00930 .BYTE 0,0,0,0,0,0,0,00940 .BYTE 0,0,0,0,1,1,1,10950 .BYTE 1,2,2,2,3,3,4,40960 .BYTE 5,5,6*},6,7,8,8,80970 .BYTE 9,9,5,5,2,9,10,100980 .BYTE 6,11,5,17,2,11,20,210990 .BYTE 22,23,24,26,28,30,2,31000 .BYTE 3,3,3+},6,6,4,4,41010 WORDS .BYTE " SS "1020 .BYTE "FINNISH RUMANIAN"1030 .BYTE "ITALIAN HUNGARAN"1040 .BYTE "MOU,}NTAINGUARDS "1050 .BYTE "INFANTRYTANK "1060 .BYTE "CAVALRY PANZER "1070 .BYTE "MILITIA SHOCK "1080 .BYTE "PARA-}TRP PZRGRNDR"1090 .BYTE " JANUARY "1100 .BYTE "FEBRUARYMARCH "1110 .BYTE "APRIL MAY "1120 .BYTE "JUNE .} JULY "1130 .BYTE "AUGUST SEPTEMBR"1140 .BYTE "OCTOBER NOVEMBER"1150 .BYTE "DECEMBERCORPS "1160 .BYTE "ARMY /} MUSTER "1170 .BYTE "COMBAT STRENGTH"1180 CORPT .BYTE 0,3,3,3,3,3,0,01190 .BYTE 0,0,0,0,0,0,0,01200 .BYTE 0,$40,3,30},0,0,0,01210 .BYTE 0,0,3,3,3,3,0,01220 .BYTE 0,0,0,0,$30,$30,$30,01230 .BYTE 0,0,$20,$20,$20,3,0,$531240 .BYTE 0,$30,1}0,0,$40,0,71250 ;RUSSIAN1260 .BYTE 4,4,0,0,0,0,0,0,01270 .BYTE 0,1,1,1,1,1,21280 .BYTE 1,0,0,2,0,1,0,01290 .BYTE 0,12},4,0,4,0,0,11300 .BYTE 1,0,0,0,1,1,2,21310 .BYTE 0,0,0,0,1,1,1,21320 .BYTE 0,1,2,2,0,4,0,41330 .BYTE 0,0,0,0,0,0,0,03}1340 .BYTE 0,0,0,0,0,0,0,01350 .BYTE 0,0,$72,0,$70,$70,$70,$701360 .BYTE 0,0,0,0,$72,1,$71,$701370 .BYTE 1,$70,1,1,0,04},0,01380 .BYTE 0,0,0,4,4,4,4,41390 CORPNO .BYTE 0,24,39,46,47,57,5,61400 .BYTE 7,8,9,12,13,20,42,431410 .BYTE 53,3,41,5}56,1,2,10,261420 .BYTE 28,38,3,14,48,52,49,41430 .BYTE 17,29,44,55,1,2,4,111440 .BYTE 30,54,2,4,6,40,27,11450 .BYTE 26}3,5,34,35,4,51,501460 ;RUSSIAN1470 .BYTE 7,11,41,42,43,44,45,461480 .BYTE 47,48,9,13,14,15,16,71490 .BYTE 2,19,18,1,277},10,22,211500 .BYTE 13,6,9,2,1,8,11,11510 .BYTE 7,3,4,10,5,8,3,61520 .BYTE 5,6,12,26,3,4,11,51530 .BYTE 9,12,4,2,7,2,8}14,41540 .BYTE 15,16,20,6,24,40,29,301550 .BYTE 31,32,33,37,43,49,50,521560 .BYTE 54,55,1,34,1,2,3,41570 .BYTE 39,59,9}60,61,2,1,1,51580 .BYTE 2,6,3,4,38,36,35,281590 .BYTE 25,23,17,8,10,3,5,61600 ;HERE COME NUMBER CODES1610 HDIGIT .BYTE :}0,0,0,0,0,0,0,01620 .BYTE 0,0,0,0,0,0,0,01630 .BYTE 0,0,0,0,0,0,0,01640 .BYTE 0,0,0,0,0,0,0,01650 .BYTE 0,0,0,0,0,0,0;},01660 .BYTE 0,0,0,0,0,0,0,01670 .BYTE 0,0,0,0,0,0,0,01680 .BYTE 0,0,0,0,0,0,0,01690 .BYTE 0,0,0,0,0,0,0,01700 .BYT<}E 0,0,0,0,0,0,0,01710 .BYTE 0,0,0,0,0,0,0,01720 .BYTE 0,0,0,0,0,0,0,01730 .BYTE 0,0,0,0,1,1,1,11740 .BYTE 1,1,1,1,1,1=},1,11750 .BYTE 1,1,1,1,1,1,1,11760 .BYTE 1,1,1,1,1,1,1,11770 .BYTE 1,1,1,1,1,1,1,11780 .BYTE 1,1,1,1,1,1,1,11790 .B>}YTE 1,1,1,1,1,1,1,11800 .BYTE 1,1,1,1,1,1,1,11810 .BYTE 1,1,1,1,1,1,1,11820 .BYTE 1,1,1,1,1,1,1,11830 .BYTE 1,1,1,1,1?},1,1,11840 .BYTE 1,1,1,1,1,1,1,11850 .BYTE 1,1,1,1,1,1,1,11860 .BYTE 2,2,2,2,2,2,2,21870 .BYTE 2,2,2,2,2,2,2,21880 @}.BYTE 2,2,2,2,2,2,2,21890 .BYTE 2,2,2,2,2,2,2,21900 .BYTE 2,2,2,2,2,2,2,21910 .BYTE 2,2,2,2,2,2,2,21920 .BYTE 2,2,2,2A},2,2,2,21930 TDIGIT .BYTE 0,0,0,0,0,0,0,0,0,01940 .BYTE 1,1,1,1,1,1,1,1,1,11950 .BYTE 2,2,2,2,2,2,2,2,2,21960 .BYTE 3,B}3,3,3,3,3,3,3,3,31970 .BYTE 4,4,4,4,4,4,4,4,4,41980 .BYTE 5,5,5,5,5,5,5,5,5,51990 .BYTE 6,6,6,6,6,6,6,6,6,62000 .BYTEC} 7,7,7,7,7,7,7,7,7,72010 .BYTE 8,8,8,8,8,8,8,8,8,82020 .BYTE 9,9,9,9,9,9,9,9,9,92030 .BYTE 0,0,0,0,0,0,0,0,0,02040 .BD}YTE 1,1,1,1,1,1,1,1,1,12050 .BYTE 2,2,2,2,2,2,2,2,2,22060 .BYTE 3,3,3,3,3,3,3,3,3,32070 .BYTE 4,4,4,4,4,4,4,4,4,42080 E} .BYTE 5,5,5,5,5,5,5,5,5,52090 .BYTE 6,6,6,6,6,6,6,6,6,62100 .BYTE 7,7,7,7,7,7,7,7,7,72110 .BYTE 8,8,8,8,8,8,8,8,8,821F}20 .BYTE 9,9,9,9,9,9,9,9,9,92130 .BYTE 0,0,0,0,0,0,0,0,0,02140 .BYTE 1,1,1,1,1,1,1,1,1,12150 .BYTE 2,2,2,2,2,2,2,2,2,2G}2160 .BYTE 3,3,3,3,3,3,3,3,3,32170 .BYTE 4,4,4,4,4,4,4,4,4,42180 .BYTE 5,5,5,5,5,52190 ODIGIT .BYTE 0,1,2,3,4,5,6,7,8,H}92200 .BYTE 0,1,2,3,4,5,6,7,8,92210 .BYTE 0,1,2,3,4,5,6,7,8,92220 .BYTE 0,1,2,3,4,5,6,7,8,92230 .BYTE 0,1,2,3,4,5,6,7I},8,92240 .BYTE 0,1,2,3,4,5,6,7,8,92250 .BYTE 0,1,2,3,4,5,6,7,8,92260 .BYTE 0,1,2,3,4,5,6,7,8,92270 .BYTE 0,1,2,3,4,5,J}6,7,8,92280 .BYTE 0,1,2,3,4,5,6,7,8,92290 .BYTE 0,1,2,3,4,5,6,7,8,92300 .BYTE 0,1,2,3,4,5,6,7,8,92310 .BYTE 0,1,2,3,4K},5,6,7,8,92320 .BYTE 0,1,2,3,4,5,6,7,8,92330 .BYTE 0,1,2,3,4,5,6,7,8,92340 .BYTE 0,1,2,3,4,5,6,7,8,92350 .BYTE 0,1,2,L}3,4,5,6,7,8,92360 .BYTE 0,1,2,3,4,5,6,7,8,92370 .BYTE 0,1,2,3,4,5,6,7,8,92380 .BYTE 0,1,2,3,4,5,6,7,8,92390 .BYTE 0,1M},2,3,4,5,6,7,8,92400 .BYTE 0,1,2,3,4,5,6,7,8,92410 .BYTE 0,1,2,3,4,5,6,7,8,92420 .BYTE 0,1,2,3,4,5,6,7,8,92430 .BYTE N}0,1,2,3,4,5,6,7,8,92440 .BYTE 0,1,2,3,4,52450 TXTTBL .BYTE "PLEASE ENTER YOU"2460 .BYTE "R ORDERS NOW "2470 .BYTE "O} GAME O"2480 .BYTE "VER "2490 .BYTE "FIGURING MOVE; N"2500 .BYTE "O ORDERS ALLOWED"2510 MONLEN .BP}YTE 0,31,28,31,30,312520 .BYTE 30,31,31,30,31,30,312530 HMORDS *=*+1592540 WHORDS *=*+3182550 BEEPTB .BYTE 30,40,50,602Q}560 ERRMSG .BYTE " THAT IS A RU"2570 .BYTE "SSIAN UNIT! "2580 .BYTE " ONLY 8 ORDERS"2590 .BYTE " ARE ALLOWED! R} "2600 .BYTE " PLEASE WAIT FO"2610 .BYTE "R MALTAKREUZE! "2620 .BYTE " NO DIAGONAL M"2630 .BYTE "OVES ALLOWED! S} "2640 XOFF .BYTE 0,8,0,$F82650 YOFF .BYTE $F8,0,8,02660 MASKO .BYTE 3,$0C,$30,$C02670 XADD .BYTE 0,1,0,$FF2680 YADD .BYT}TE $FF,0,1,02690 TRTAB .BYTE 0,$12,$12,$12,$D2,$D82700 .BYTE $D6,$C4,$D4,$C2,$12,$12,$122710 MLTKRZ .BYTE $24,$24,$E7,0,0W}VWFIELDFLENNREBUFSIZRLENBUFTEMPBLANKRECNFCNANKEYKEYKCNKEYSTARJUNLASV}80N64N100ALPHADISGUESN5327N55N70N70N70N76N5325N5325N5325N5324N500N600N1200N1300N2500WPLYSNSCRHCHKABCW},$E7,$24,$242720 *=$60002730 ;First comes 1024 bytes of new character set2740 *=*+10242750 ;2760 ;The display list goeX}s here; it is 49 bytes long.2770 ;2780 .BYTE $70,$70,$70,$C6,$E0,$64,$90,$90,$F72790 .BYTE $FE,$64,$F7,$2E,$65,$F7,$5E,$Y}652800 .BYTE $F7,$8E,$65,$F7,$BE,$65,$F7,$EE2810 .BYTE $65,$F7,$1E,$66,$F7,$4E,$66,$F72820 .BYTE $7E,$66,$57,$AE,$66,$9Z}0,$C2,$502830 .BYTE $64,$02,$90,$02,$90,$41,$00,$642840 ARRTAB .BYTE $10,$38,$54,$92,$10,$10,$10,$102850 .BYTE 8,4,2,$FF[},2,4,8,02860 .BYTE $10,$10,$10,$10,$92,$54,$38,$102870 .BYTE $10,$20,$40,$FF,$40,$20,$10,02880 ;2890 *=$64502900 ;Thi\}s next area is reserved for the text window2910 TXTWDW *=$64FF2920 ;2930 ;The map data goes here.2940 ;2950 .BYTE 127,1]}27,127,127,127,127,127,127,1272960 .BYTE 127,127,127,127,127,127,127,1272970 .BYTE 127,127,127,127,127,127,127,1272980 ^}.BYTE 127,127,127,127,127,127,127,1272990 .BYTE 127,127,127,127,127,127,127,1273000 .BYTE 127,127,127,127,127,127,127,127_}3010 .BYTE 127,191,191,191,169,0,0,03020 .BYTE 0,0,0,0,0,180,191,1913030 .BYTE 170,0,0,0,0,0,0,03040 .BYTE 0,0,0,0,0,`}0,0,03050 .BYTE 0,0,0,0,0,0,0,03060 .BYTE 0,0,0,0,0,0,0,1273070 .BYTE 127,191,191,191,175,178,0,03080 .BYTE 0,181,182a},184,183,182,179,1873090 .BYTE 176,0,0,0,0,0,0,03100 .BYTE 0,0,0,0,0,0,0,03110 .BYTE 0,0,0,0,0,0,0,03120 .BYTE 0,0,0,b}0,0,0,0,1273130 .BYTE 127,191,191,191,191,175,184,1833140 .BYTE 185,191,191,177,176,71,157,1553150 .BYTE 0,0,0,0,0,0,0,c}03160 .BYTE 0,0,0,0,0,0,0,03170 .BYTE 0,0,0,0,0,0,0,03180 .BYTE 0,0,0,0,0,0,0,1273190 .BYTE 127,191,191,191,191,191,1d}77,1723200 .BYTE 173,174,187,188,164,141,148,1403210 .BYTE 0,0,0,0,0,0,0,03220 .BYTE 157,165,0,156,160,162,166,03230 e}.BYTE 0,0,0,0,0,0,0,03240 .BYTE 0,0,0,0,0,0,0,1273250 .BYTE 127,191,191,191,191,191,171,03260 .BYTE 0,0,186,178,152,142f},149,13270 .BYTE 5,0,0,0,0,0,0,03280 .BYTE 148,145,161,154,0,0,146,1593290 .BYTE 165,0,0,0,0,156,164,03300 .BYTE 0,0,g}0,0,0,0,0,1273310 .BYTE 127,191,191,191,191,191,170,03320 .BYTE 0,0,180,170,147,140,150,23330 .BYTE 6,0,0,0,0,0,0,0334h}0 .BYTE 151,0,0,0,0,0,0,1563350 .BYTE 168,72,0,157,161,153,145,1603360 .BYTE 165,0,0,0,0,0,0,1273370 .BYTE 127,191,191i},191,191,191,175,1783380 .BYTE 0,0,0,176,149,139,151,33390 .BYTE 1,0,0,0,0,0,0,03400 .BYTE 0,0,0,0,0,0,0,1493410 .BYTj}E 145,160,159,155,0,0,0,733420 .BYTE 146,166,0,0,0,0,0,1273430 .BYTE 127,191,191,191,191,191,191,1693440 .BYTE 0,0,0,0,k}0,0,152,43450 .BYTE 3,0,0,0,0,0,0,03460 .BYTE 0,0,0,0,0,0,157,1543470 .BYTE 0,0,0,0,0,0,0,03480 .BYTE 0,149,0,0,0,0,0l},1273490 .BYTE 127,191,191,177,172,191,191,1703500 .BYTE 72,0,0,0,0,0,148,03510 .BYTE 2,0,0,0,0,0,0,03520 .BYTE 2,0,0m},0,0,0,150,03530 .BYTE 0,0,0,0,0,0,0,03540 .BYTE 0,144,162,159,167,0,0,1273550 .BYTE 127,191,191,170,0,179,173,1883560n} .BYTE 159,160,165,0,0,0,0,03570 .BYTE 0,0,0,0,0,0,0,03580 .BYTE 1,0,0,0,0,0,151,03590 .BYTE 0,0,0,0,0,0,0,03600 .BYo}TE 0,0,0,156,153,0,0,1273610 .BYTE 127,191,191,169,0,0,0,03620 .BYTE 0,0,143,164,0,0,0,03630 .BYTE 0,157,155,0,0,0,73,0p}3640 .BYTE 0,0,74,0,0,156,153,03650 .BYTE 0,0,0,0,0,0,0,03660 .BYTE 0,0,0,149,0,0,0,1273670 .BYTE 127,191,191,171,0,0q},0,03680 .BYTE 0,0,0,144,161,166,0,03690 .BYTE 156,154,0,0,0,0,0,33700 .BYTE 6,0,0,0,0,152,0,03710 .BYTE 0,0,0,0,0,0,r}0,03720 .BYTE 0,0,0,147,0,0,0,1273730 .BYTE 127,191,191,175,178,0,0,03740 .BYTE 0,0,0,0,0,145,162,1633750 .BYTE 153,0s},0,0,2,151,4,13760 .BYTE 2,158,163,161,159,155,0,03770 .BYTE 0,0,0,0,0,0,0,03780 .BYTE 0,0,0,150,0,0,0,1273790 .BYTE t}127,191,191,191,170,0,0,03800 .BYTE 0,0,0,0,0,0,0,03810 .BYTE 0,0,0,156,162,153,0,33820 .BYTE 4,148,0,0,0,0,0,03830 .u}BYTE 0,0,0,0,0,0,0,03840 .BYTE 0,0,156,154,0,0,0,1273850 .BYTE 127,191,191,177,188,160,159,1613860 .BYTE 164,0,0,0,2,6,v}5,03870 .BYTE 0,157,163,154,71,0,1,63880 .BYTE 0,147,0,0,152,0,0,03890 .BYTE 0,0,0,0,0,0,0,03900 .BYTE 0,0,151,74,0,0w},0,1273910 .BYTE 127,191,177,176,0,0,0,03920 .BYTE 145,162,0,1,4,3,1,03930 .BYTE 158,155,0,0,0,0,0,03940 .BYTE 0,0,0,x}0,151,0,0,03950 .BYTE 0,0,0,0,0,0,0,03960 .BYTE 0,0,148,0,0,0,0,1273970 .BYTE 127,173,176,0,0,0,0,03980 .BYTE 0,0,0,2y},6,74,0,1403990 .BYTE 150,139,0,0,0,0,0,04000 .BYTE 0,0,0,0,143,162,167,04010 .BYTE 0,0,0,0,0,0,0,04020 .BYTE 0,158,1z}55,0,0,0,0,1274030 .BYTE 127,0,0,0,0,0,0,04040 .BYTE 0,1,3,5,0,0,0,1424050 .BYTE 144,165,141,0,0,0,0,04060 .BYTE 0,71{},0,0,0,0,150,734070 .BYTE 0,0,0,0,0,0,0,04080 .BYTE 0,152,0,0,0,0,0,1274090 .BYTE 127,0,0,0,0,0,0,04100 .BYTE 2,6,0,0|},0,0,141,1394110 .BYTE 142,146,167,0,0,0,0,04120 .BYTE 0,0,0,0,0,0,145,1654130 .BYTE 0,0,0,0,0,0,0,04140 .BYTE 0,150,}}0,0,0,0,0,1274150 .BYTE 127,166,73,0,0,0,0,04160 .BYTE 5,4,0,0,139,140,142,1414170 .BYTE 140,0,152,0,0,0,0,04180 .BYT~}E 0,0,0,0,0,0,0,1494190 .BYTE 0,0,0,0,0,0,0,04200 .BYTE 0,149,0,0,0,0,0,1274210 .BYTE 127,146,165,0,0,0,0,04220 .BYTE} 3,1,0,0,141,159,163,1654230 .BYTE 142,139,148,0,0,0,0,04240 .BYTE 0,0,150,0,0,0,0,1444250 .BYTE 161,164,0,0,0,0,0,042}60 .BYTE 0,151,0,0,0,0,0,1274270 .BYTE 127,0,143,167,0,0,0,34280 .BYTE 4,6,0,139,140,142,141,1454290 .BYTE 160,166,151},0,0,0,0,04300 .BYTE 0,0,145,166,0,0,0,04310 .BYTE 0,146,166,0,0,0,0,04320 .BYTE 0,148,0,0,0,0,0,1274330 .BYTE 127,0,}0,149,0,0,0,24340 .BYTE 5,139,142,141,139,140,139,1424350 .BYTE 140,146,168,0,0,0,0,04360 .BYTE 0,0,0,151,0,0,0,04370 } .BYTE 0,0,143,163,159,161,160,1664380 .BYTE 0,152,0,0,0,0,0,1274390 .BYTE 127,0,156,154,0,0,0,04400 .BYTE 0,140,139,14}1,142,140,0,04410 .BYTE 0,139,148,0,0,0,0,04420 .BYTE 0,0,74,148,0,0,0,04430 .BYTE 0,0,0,0,0,0,0,1474440 .BYTE 71,143},159,160,162,165,0,1274450 .BYTE 127,153,151,0,0,0,0,04460 .BYTE 0,0,142,0,0,0,0,04470 .BYTE 0,71,149,0,0,0,0,04480 .}BYTE 0,0,0,144,165,0,0,04490 .BYTE 0,0,0,0,0,0,0,1494500 .BYTE 0,0,0,0,0,144,166,1274510 .BYTE 127,1,6,0,0,0,0,04520 }.BYTE 0,0,0,0,0,0,0,04530 .BYTE 0,0,143,156,161,0,0,04540 .BYTE 0,0,0,0,146,156,155,1574550 .BYTE 154,156,160,0,0,0,0,1}484560 .BYTE 0,0,0,0,0,0,146,1274570 .BYTE 127,2,5,3,4,0,0,04580 .BYTE 0,0,0,0,0,0,0,04590 .BYTE 0,0,0,0,145,155,158,}04600 .BYTE 0,0,0,0,0,0,0,04610 .BYTE 0,0,145,157,158,0,152,1504620 .BYTE 0,0,0,0,0,0,0,1274630 .BYTE 127,0,0,1,5,6,3},04640 .BYTE 0,156,161,0,0,0,156,1594650 .BYTE 0,0,0,0,0,0,144,1544660 .BYTE 160,0,0,0,0,0,0,04670 .BYTE 0,0,0,153,16}2,155,151,04680 .BYTE 0,0,0,0,0,0,0,1274690 .BYTE 127,0,0,0,0,4,3,14700 .BYTE 5,0,145,159,0,0,0,1464710 .BYTE 157,158},0,0,0,0,0,04720 .BYTE 146,157,159,0,0,0,0,04730 .BYTE 0,0,152,151,0,0,0,04740 .BYTE 0,0,0,0,0,0,0,1274750 .BYTE 127,}0,0,0,0,0,2,44760 .BYTE 6,0,0,143,155,156,154,1604770 .BYTE 0,143,154,161,0,0,0,04780 .BYTE 0,0,143,158,0,0,0,04790 .}BYTE 0,153,150,0,0,0,0,04800 .BYTE 0,0,0,0,0,0,0,1274810 .BYTE 127,0,0,0,0,0,0,14820 .BYTE 3,5,0,0,0,0,0,1444830 .BYT}E 158,0,0,145,160,0,0,04840 .BYTE 0,0,72,147,0,0,0,1764850 .BYTE 165,188,73,0,0,0,0,04860 .BYTE 0,0,0,0,0,0,0,1274870 } .BYTE 127,0,0,0,0,0,0,04880 .BYTE 2,6,4,0,0,0,0,04890 .BYTE 146,161,0,0,144,159,0,04900 .BYTE 0,0,153,150,0,177,166,17}04910 .BYTE 178,174,0,0,0,0,0,04920 .BYTE 0,0,0,0,0,0,0,1274930 .BYTE 127,0,0,0,0,0,0,04940 .BYTE 0,5,1,6,0,160,0,04}950 .BYTE 0,143,159,0,0,146,158,04960 .BYTE 0,0,149,0,175,171,191,1794970 .BYTE 173,0,0,0,0,0,0,04980 .BYTE 0,0,0,0,0,}0,0,1274990 .BYTE 127,0,0,0,0,0,0,05000 .BYTE 0,1,2,4,3,144,161,05010 .BYTE 0,0,145,160,73,0,147,05020 .BYTE 0,152,15}1,0,164,191,191,1685030 .BYTE 180,0,0,0,0,0,0,05040 .BYTE 0,0,0,0,0,0,0,1275050 .BYTE 127,0,0,0,0,0,0,05060 .BYTE 0,5},3,6,2,1,143,1595070 .BYTE 0,0,0,146,186,165,187,1665080 .BYTE 167,188,182,172,191,191,191,1785090 .BYTE 174,0,74,152,1}54,157,156,1595100 .BYTE 0,0,0,0,0,0,0,1275110 .BYTE 127,0,0,4,5,1,5,25120 .BYTE 3,6,1,4,5,6,2,1455130 .BYTE 158,0,0,}176,170,191,191,1915140 .BYTE 178,173,183,184,184,185,163,1815150 .BYTE 153,157,155,150,0,0,0,1485160 .BYTE 0,0,0,0,0,0},0,1275170 .BYTE 127,0,0,5,3,6,4,15180 .BYTE 4,2,0,3,4,1,6,05190 .BYTE 146,186,167,171,191,191,191,1915200 .BYTE 168,}180,0,0,176,170,191,1695210 .BYTE 187,166,167,180,0,0,0,05220 .BYTE 0,0,0,0,0,0,0,1275230 .BYTE 127,0,0,0,0,0,0,05240 } .BYTE 0,0,0,0,0,0,0,05250 .BYTE 177,172,191,191,191,191,191,1915260 .BYTE 191,169,181,175,171,191,191,1915270 .BYTE 19}1,191,191,169,165,181,5,45280 .BYTE 2,3,6,1,6,2,1,1275290 .BYTE 127,0,0,0,0,0,0,05300 .BYTE 0,0,0,0,0,0,0,05310 .BYTE} 164,191,191,191,191,191,191,1915320 .BYTE 191,191,168,172,191,191,191,1915330 .BYTE 191,191,191,191,191,168,166,1675340} .BYTE 181,1,2,3,4,3,3,1275350 .BYTE 127,127,127,127,127,127,127,1275360 .BYTE 127,127,127,127,127,127,127,1275370 .BY}TE 127,127,127,127,127,127,127,1275380 .BYTE 127,127,127,127,127,127,127,1275390 .BYTE 127,127,127,127,127,127,127,12754}00 .BYTE 127,127,127,127,127,127,127,127,1275410 STKTAB .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,15420 .BYTE $FF,$FF,$FF,3,$FF,2},0,$FF5430 SSNCOD .BYTE 40,40,40,20,0,0,0,0,0,20,40,405440 TRNTAB .BYTE 6,12,8,0,0,18,14,8,20,1285450 .BYTE 4,8,6,0,0,18,}13,6,16,1285460 .BYTE 24,30,24,0,0,30,30,26,28,1285470 .BYTE 30,30,30,0,0,30,30,30,30,1285480 .BYTE 10,16,10,12,12,24,2}8,12,24,1285490 .BYTE 6,10,8,8,8,24,28,8,20,1285500 BHX1 .BYTE 40,39,38,36,35,34,22,15,15,145510 .BYTE 40,39,38,35,35,34},22,15,14,14,19,195520 BHY1 .BYTE 35,35,35,33,36,36,4,7,7,85530 .BYTE 36,36,36,33,37,37,3,6,7,7,4,35540 BHX2 .BYTE 40,39,}38,35,35,34,22,15,14,145550 .BYTE 40,39,38,36,35,34,22,15,15,14,19,195560 BHY2 .BYTE 36,36,36,33,37,37,3,6,7,75570 .BYTE} 35,35,35,33,36,36,4,7,7,8,3,45580 EXEC *=*+1595590 .ENDRD 198120 *=$540030 CORPSX .BYTE 0,40,40,40,40,40,41,40,41,41,<10 ;EFT VERSION 1.8I (INTERRUPT) 11/30/81 COPYRIGHT CHRIS CRAWFORD 198120 ;30 ;Page zero RAM40 ;50 RTCLKL=$1460 ATRACT=$ }4D70 DRKMSK=$4E80 COLRSH=$4F90 *=$B00100 ;0110 ;These locations are used by the interrupt service routine0120 ;0130 D }LSTPT *=*+2 Zero page pointer to display list0140 MAPLO *=*+10150 MAPHI *=*+10160 CORPS *=*+1 number of unit under window }0170 CURSXL *=*+10180 CURSXH *=*+10190 CURSYL *=*+1 cursor coordinates on screen (map frame)0200 CURSYH *=*+10210 OFFLO * }=*+1 How far to offset new LMS value0220 OFFHI *=*+10230 TEMPI *=*+1 An all-purpose temporary register0240 CNT1 *=*+1 DLI }counter0250 CNT2 *=*+1 DLI counter for movable map DLI0260 CHUNKX *=*+1 cursor coordinates (pixel frame)0270 CHUNKY *=*+1 }0280 ;0290 ;THIS VALUE IS USED BY MAINLINE ROUTINE AND INTERRUPT0300 ;0310 TURN=$C90320 ;0330 ;OS locations (see OS manu }al)0340 ;0350 PCOLR0=$02C00360 STICK=$02780370 CH=$2FC0380 ;0390 ;HARDWARE LOCATIONS0400 ;0410 HPOSP0=$D0000420 HPOS }P1=$D0010430 HPOSP2=$D0020440 HPOSP3=$D0030450 TRIG0=$D0100460 TRIG1=$D0110470 TRIG2=$D0120480 COLPF0=$D0160490 COLPF1 }=$D0170500 COLPF2=$D0180510 COLBAK=$D01A0520 CONSOL=$D01F0530 AUDF1=$D2000540 AUDC1=$D2010550 HSCROLL=$D4040560 VSCROL }L=$D4050570 WSYNC=$D40A0580 CHBASE=$D4090590 SETVBV=$E45C0600 XITVBV=$E4620610 ;0620 ;Page 6 usage0630 ;0640 *=$0600 }0650 ;first come locations used by the interrupt service routine0660 XPOSL *=*+1 Horizontal position of0670 YPOSL *=*+1 Ve }rtical position of0680 YPOSH *=*+1 upper left corner of screen window0690 SCY *=*+1 vert position of cursor (player frame) }0700 SHPOS0 *=*+1 shadows player 0 position0710 TRCOLR *=*+10720 EARTH *=*+10730 ICELAT *=*+10740 SEASN1 *=*+10750 SEASN }2 *=*+10760 SEASN3 *=*+10770 DAY *=*+10780 MONTH *=*+10790 YEAR *=*+10800 BUTFLG *=*+10810 BUTMSK *=*+10820 TYL *=*+1 }0830 TYH *=*+10840 DELAY *=*+1 acceleration delay on scrolling0850 TIMSCL *=*+1 frame to scroll in0860 TEMPLO *=*+1 tempor }ary0870 TEMPHI *=*+10880 BASEX *=*+1 start position for arrow (player frame)0890 BASEY *=*+10900 STEPX *=*+1 intermediate } position of arrow0910 STEPY *=*+10920 STPCNT *=*+1 which intermediate steps arrow is on0930 ORDCNT *=*+1 which order arro }w is showing0940 ORD1 *=*+1 orders record0950 ORD2 *=*+10960 ARRNDX *=*+1 arrow index0970 HOWMNY *=*+1 how many orders fo }r unit under cursor0980 KRZX *=*+1 maltakreuze coords (player frame)0990 KRZY *=*+11000 DBTIMR *=*+1 joystick debounce tim }er1010 STICKI *=*+1 coded value of stick direction (0-3)1020 ERRFLG *=*+11030 KRZFLG *=*+11040 STKFLG *=*+11050 HITFLG * }=*+11060 TXL *=*+1 temporary values---slightly shifted1070 TXH *=*+11080 HANDCP=$68F1090 ;1100 *=$52001110 PLYR0 *=*+1 }281120 PLYR1 *=*+1281130 PLYR2 *=*+1281140 PLYR3 *=*+1281150 CORPSX *=*+159 x-coords of all units (pixel frame)1160 CORP }SY *=*+159 y-coords of all units (pixel frame)1170 MSTRNG *=*+159 muster strengths1180 CSTRNG *=*+159 combat strengths1190 } SWAP *=*+159 terrain code underneath unit1200 ARRIVE *=*+159 turn of arrival1210 WORDS *=*+272 various words for messages }1220 CORPT *=*+159 codes for unit types1230 CORPNO *=*+159 ID numbers of units1240 HDIGIT *=*+256 tables for displaying num }bers (hundreds)1250 TDIGIT *=*+256 tens tables1260 ODIGIT *=*+256 ones tables1270 TXTTBL *=*+96 more text1280 MONLEN *=*+ }13 table of month lengths1290 HMORDS *=*+159 how many orders each unit has in queue1300 WHORDS *=*+159 what the orders are }1310 WHORDH *=*+1591320 BEEPTB *=*+4 table of beep tones1330 ERRMSG *=*+128 table of error messages1340 XOFF *=*+4 offsets } for moving maltakreuze1350 YOFF *=*+41360 MASKO *=*+4 mask values for decoding orders1370 XADD *=*+4 offsets for moving a }rrow1380 YADD *=*+41390 TRTAB *=*+131400 MLTKRZ *=*+8 maltese cross shape1410 ;1420 ;RAM from $6000 to $6430 is taken up } by1430 ;character sets and the display list1440 ;1450 *=$64311460 ARRTAB *=*+32 arrow shapes1470 *=$64501480 TXTWDW }*=$6CB11490 ;1500 STKTAB *=*+16 a joystick decoding table1510 SSNCOD *=*+121520 TRNTAB *=*+601530 BHX1 *=*+221540 BHY1 }*=*+221550 BHX2 *=*+221560 BHY2 *=*+221570 EXEC *=*+1591580 ;1590 ;everything in here is taken up by the map data1600 ; }1610 ;1620 ;This is the vertical blank interrupt routine1630 ;It reads the joystick and scrolls the screen1640 ;1650 *= }$74001660 LDA TRIG1 check for break button1670 BNE Z30 no, check next1680 LDY #62 reset 60 Hertz vector1690 LDX #233 }1700 LDA #71710 JSR SETVBV1720 PLA reset stack1730 PLA1740 PLA1750 JMP $7210 break routine1760 Z30 LDA HANDCP177 }0 BEQ A311780 LDA TRIG01790 BEQ A311800 LDA #$081810 STA CONSOL1820 LDA CONSOL1830 AND #$041840 BNE A311850 }STA HANDCP1860 LDA #$301870 STA $7B7A my trademark1880 LDX #$361890 LOOPJ LDA MSTRNG,X1900 STA TEMPI1910 LSR A192 }0 ADC TEMPI1930 BCC A221940 LDA #$FF1950 A22 STA MSTRNG,X1960 DEX1970 BNE LOOPJ1980 ;1990 ;2000 A31 LDA TRIG0 bu }tton status2010 ORA BUTMSK button allowed?2020 BEQ X172030 LDA BUTFLG no button now; previous status2040 BNE X232050 } JMP NOBUT2060 X23 LDA #$58 button just released2070 STA PCOLR02080 LDA #$002090 STA BUTFLG2100 STA KRZFLG2110 ST }A AUDC12120 LDX #$522130 LOOP8 STA TXTWDW+8,X clear text window2140 DEX2150 BPL LOOP82160 LDA #$082170 STA DELAY2 }180 CLC2190 ADC RTCLKL2200 STA TIMSCL2210 JSR SWITCH2220 LDA #$002230 STA CORPS2240 JSR CLRP12250 JSR CLRP222 }60 JMP ENDISR2270 X17 STA ATRACT button is pressed2280 LDA STICK2290 AND #$0F2300 EOR #$0F2310 BEQ X20 joystick act }ive?2320 JMP ORDERS yes2330 X20 STA DBTIMR no, set debounce2340 STA AUDC12350 STA STKFLG2360 LDA BUTFLG2370 BNE BU }THLD is this the first button pass2380 JMP FBUTPS yes2390 BUTHLD JSR ERRCLR no, clear errors2400 X61 LDA HITFLG2410 BEQ } X63 anybody in the window?2420 JMP ENDISR no2430 X63 LDA CH2440 CMP #$212450 BNE X80 space bar pressed?2460 LDX COR }PS yes, check for Russian2470 CPX #$372480 BCS X802490 LDA #$002500 STA CH2510 STA HMORDS,X clear out orders2520 }STA HOWMNY2530 STA STPCNT2540 LDA #$012550 STA ORDCNT2560 JSR CLRP12570 JSR CLRP22580 LDA BASEX2590 STA STEPX2 }600 LDA BASEY2610 STA STEPY2620 X80 LDA RTCLKL2630 AND #$032640 BEQ X54 time to move arrow?2650 JMP ENDISR no2660 }X54 LDY HOWMNY yes2670 BNE X65 any orders to show?2680 JMP PCURSE no, go ahead to maltakreuze2690 X65 JSR CLRP1 yes, cle }ar old arrow2700 LDA ORDCNT2710 LDX #$00 assume first byte2720 CMP #$052730 BCC X52 second byte or first?2740 INX s }econd byte2750 X52 AND #$03 isolate bit pair index2760 TAY2770 LDA BITTAB,Y get mask2780 X50 AND ORD1,X get orders2790 } ;2800 ;right justify orders2810 ;2820 DEY2830 BPL X512840 LDY #$032850 X51 BEQ X532860 LOOP21 LSR A2870 LSR A28 }80 DEY2890 BNE LOOP212900 X53 STA ARRNDX2910 ASL A2920 ASL A2930 ASL A2940 ;get arrow image and store it to player } RAM2950 TAX2960 LDY STEPY2970 X55 LDA ARRTAB,X2980 CPY #$802990 BCS X433000 STA PLYR1,Y3010 X43 INX3020 INY30 }30 TXA3040 AND #$073050 BNE X553060 ;3070 LDA STEPX position arrow3080 STA HPOSP13090 ;3100 ;now step arrow3110 };3120 LDX ARRNDX3130 LDA STEPX3140 CLC3150 ADC XADD,X3160 STA STEPX3170 LDA STEPY3180 CLC3190 ADC YADD,X3200 } STA STEPY3210 ;3220 INC STPCNT next step3230 LDA STPCNT3240 AND #$073250 BNE X59 if not done end ISR3260 STA STP }CNT end of steps3270 INC ORDCNT next order3280 LDA ORDCNT3290 CMP HOWMNY last order?3300 BCC X59 no, out3310 BEQ X5 }9 no, out3320 LDA #$013330 STA ORDCNT yes, reset to start of arrow's path3340 ;3350 ;display maltese cross ('maltakreuz }e' or KRZ)3360 ;3370 PCURSE LDY STEPY3380 STY KRZY3390 LDA #$FF3400 STA KRZFLG3410 LDX #$003420 LOOP24 LDA MLTKRZ, }X3430 CPY #$803440 BCS X443450 STA PLYR2,Y3460 X44 INY3470 INX3480 CPX #$083490 BNE LOOP243500 LDA STEPX3510 } SEC3520 SBC #$013530 STA KRZX3540 STA HPOSP23550 JSR CLRP1 clear arrow3560 LDA BASEX reset arrow's coords3570 ST }A STEPX3580 LDA BASEY3590 STA STEPY3600 ;3610 X59 JMP ENDISR3620 ;3630 ;FIRST BUTTON PASS3640 ;looks for a unit insi }de cursor3650 ;if there is one, puts unit info into text window3660 ;3670 FBUTPS LDA #$FF3680 STA BUTFLG3690 ;3700 ;fi }rst get coords of center of cursor (map frame)3710 ;3720 X24 LDA CURSXL3730 CLC3740 ADC #$063750 STA TXL3760 LDA CU }RSXH3770 ADC #$003780 STA TXH3790 LDA CURSYL3800 CLC3810 ADC #$093820 STA TYL3830 LDA CURSYH3840 ADC #$00385 }0 STA TYH3860 LDA TXH3870 LSR A3880 LDA TXL3890 ROR A3900 LSR A3910 LSR A3920 ;3930 ;coords of cursor (pixel f }rame)3940 ;3950 STA CHUNKX3960 LDA TYH3970 LSR A3980 TAX3990 LDA TYL4000 ROR A4010 TAY4020 TXA4030 LSR A4 }040 TYA4050 ROR A4060 LSR A4070 LSR A4080 STA CHUNKY4090 ;4100 ;now look for a match with unit coordinates4110 ; }4120 LDX #$9E4130 LOOP6 CMP CORPSY,X4140 BEQ MAYBE4150 X16 DEX4160 BNE LOOP64170 STX CORPS no match obtained4180 D }EX4190 STX HITFLG4200 JMP ENDISR4210 ;4220 MAYBE LDA CHUNKX4230 CMP CORPSX,X4240 BNE X354250 LDA ARRIVE,X4260 B }MI X354270 CMP TURN4280 BCC MATCH4290 BEQ MATCH4300 X35 LDA CHUNKY4310 JMP X164320 ;4330 ;match obtained4340 ;43 }50 MATCH LDA #$004360 STA HITFLG note match4370 STA CH4380 LDA #$5C4390 STA PCOLR0 light up cursor4400 ;4410 ;displ }ay unit specs4420 ;4430 STX CORPS4440 LDY #$0D4450 LDA CORPNO,X ID number4460 JSR DNUMBR4470 INY4480 LDX CORPS4 }490 LDA CORPT,X first name4500 STA TEMPI4510 AND #$F04520 LSR A4530 JSR ENTRY24540 LDA TEMPI4550 AND #$0F second } name4560 CLC4570 ADC #$084580 JSR DWORDS4590 LDA #$1E4600 LDX CORPS4610 CPX #$374620 BCS X264630 LDA #$1D46 }40 X26 JSR DWORDS display unit size (corps or army)4650 LDY #$384660 LDA #$1F "MUSTER"4670 JSR DWORDS4680 DEY4690 L }DA #$1A ":"4700 STA TXTWDW,Y4710 INY4720 INY4730 LDX CORPS4740 LDA MSTRNG,X muster strength4750 JSR DNUMBR4760 }INY4770 INY4780 LDA #$20 "COMBAT"4790 JSR DWORDS4800 LDA #$21 "STRENGTH"4810 JSR DWORDS4820 DEY4830 LDA #$1A ": }"4840 STA TXTWDW,Y4850 INY4860 INY4870 LDX CORPS4880 LDA CSTRNG,X combat strength4890 JSR DNUMBR4900 X27 JSR SWI }TCH flip unit with terrain4910 LDA CORPS4920 CMP #$374930 BCC X79 Russian?4940 LDA #$FF yes, mask orders and exit495 }0 STA HITFLG4960 BMI X754970 ;4980 ;German unit4990 ;set up orders display5000 ;first calculate starting coords (BASEX }, BASEY)5010 ;5020 X79 LDA #$015030 STA ORDCNT5040 LDA #$005050 STA STPCNT5060 ;5070 LDA TXL5080 AND #$075090 }CLC5100 ADC #$015110 CLC5120 ADC SHPOS05130 STA BASEX5140 STA STEPX5150 ;5160 LDA TYL5170 AND #$0F5180 LSR A }5190 SEC5200 SBC #$015210 CLC5220 ADC SCY5230 STA BASEY5240 STA STEPY5250 ;5260 ;now set up page 6 values5270 };5280 LDX CORPS5290 LDA HMORDS,X5300 STA HOWMNY5310 LDA WHORDS,X5320 STA ORD15330 LDA WHORDH,X5340 STA ORD2535 }0 X75 JMP ENDISR5360 ;5370 ;ORDERS INPUT ROUTINE5380 ;5390 ORDERS LDA STKFLG5400 BNE X755410 LDX CORPS5420 CPX #$37 }5430 BCC X64 Russian?5440 LDX #$00 yes, error5450 JMP SQUAWK5460 X64 LDA HMORDS,X5470 CMP #$085480 BCC X66 only 8 }orders allowed5490 LDX #$205500 JMP SQUAWK5510 X66 LDA KRZFLG5520 BNE X67 must wait for maltakreuze5530 LDX #$40554 }0 JMP SQUAWK5550 X67 INC DBTIMR5560 LDA DBTIMR wait for debounce time5570 CMP #$105580 BCS X685590 BCC X755600 X68 } LDA #$005610 STA DBTIMR reset debounce timer5620 LDX STICK5630 LDA STKTAB,X5640 BPL X695650 LDX #$60 no diagonal o }rders allowed5660 JMP SQUAWK5670 ;5680 ;OK, this is a good order5690 ;5700 X69 TAY5710 STA STICKI5720 LDA BEEPTB,Y }5730 STA AUDF1 "BEEP!"5740 LDA #$A85750 STA AUDC15760 LDA #$FF5770 STA STKFLG5780 ;5790 LDX CORPS5800 INC HMORD }S,X5810 LDA HMORDS,X5820 STA HOWMNY5830 SEC5840 SBC #$015850 AND #$035860 TAY5870 STY TEMPI5880 LDA HMORDS,X }5890 SEC5900 SBC #$015910 LSR A5920 LSR A5930 TAX5940 LDA STICKI5950 ;isolate order5960 X71 DEY5970 BMI X7059 }80 ASL A5990 ASL A6000 JMP X716010 X70 LDY TEMPI6020 EOR ORD1,X fold in new order (sneaky code)6030 AND MASKO,Y604 }0 EOR ORD1,X6050 STA ORD1,X6060 LDA ORD16070 LDX CORPS6080 STA WHORDS,X6090 LDA ORD26100 STA WHORDH,X6110 ;612 }0 ;move maltakreuze6130 ;6140 JSR CLRP26150 LDX STICKI6160 LDA KRZX6170 CLC6180 ADC XOFF,X6190 STA KRZX6200 LD }A KRZY6210 CLC6220 ADC YOFF,X6230 STA KRZY6240 DSPKRZ LDA KRZX display it6250 STA HPOSP26260 LDY KRZY6270 LDX #$ }006280 LOOP26 LDA MLTKRZ,X6290 CPY #$806300 BCS X456310 STA PLYR2,Y6320 X45 INY6330 INX6340 CPX #$086350 BNE LO }OP266360 BEQ EXITI6370 ;6380 ;ERROR on inputs routine6390 ;squawks speaker and puts out error message6400 ;6410 SQUAWK } LDY #$696420 LOOP28 LDA ERRMSG,X6430 SEC6440 SBC #$206450 STA TXTWDW,Y6460 INY6470 INX6480 TXA6490 AND #$1F6 }500 BNE LOOP286510 LDA #$686520 STA AUDC16530 LDA #$506540 STA AUDF1 "HONK!"6550 LDA #$FF6560 STA ERRFLG6570 B }MI EXITI6580 ;6590 ;NO BUTTON PRESSED ROUTINE6600 ;6610 NOBUT STA DBTIMR6620 LDA STICK6630 AND #$0F6640 EOR #$0F66 }50 BNE SCROLL6660 STA AUDC16670 STA STKFLG6680 LDA #$086690 STA DELAY6700 CLC6710 ADC RTCLKL6720 STA TIMSCL67 }30 JSR ERRCLR6740 EXITI JMP ENDISR6750 SCROLL LDA #$006760 STA ATRACT6770 ;6780 ;acceleration feature of cursor6790 ; }6800 LDA TIMSCL6810 CMP RTCLKL6820 BNE EXITI6830 LDA DELAY6840 CMP #$016850 BEQ X216860 SEC6870 SBC #$016880 } STA DELAY6890 X21 CLC6900 ADC RTCLKL6910 STA TIMSCL6920 ;6930 LDA #$006940 STA OFFLO6950 STA OFFHI zero the off }set6960 ;6970 LDA STICK get joystick reading6980 PHA save it on stack for other bit checks6990 AND #$08 joystick left? }7000 BNE CHKRT no, move on7010 LDA CURSXL7020 BNE X137030 LDX CURSXH7040 BEQ CHKUP7050 X13 SEC7060 SBC #$017070 } STA CURSXL7080 BCS X147090 DEC CURSXH7100 X14 LDA SHPOS07110 CMP #$BA7120 BEQ X17130 CLC7140 ADC #$017150 ST }A SHPOS07160 STA HPOSP07170 BNE CHKUP7180 X1 LDA XPOSL7190 SEC decrement x-coordinate7200 SBC #$017210 STA XPOSL7 }220 AND #$077230 STA HSCROLL fine scroll7240 CMP #$07 scroll overflow?7250 BNE CHKUP no, move on7260 INC OFFLO yes, }mark it for offset7270 CLV7280 BVC CHKUP no point in checking for joystick right7290 CHKRT PLA get back joystick byte73 }00 PHA save it again7310 AND #$04 joystick right?7320 BNE CHKUP no, move on7330 LDA CURSXL7340 CMP #$647350 BNE X1 }27360 LDX CURSXH7370 BNE CHKUP7380 X12 CLC7390 ADC #$017400 STA CURSXL7410 BCC X157420 INC CURSXH7430 X15 LDA S }HPOS07440 CMP #$367450 BEQ X27460 SEC7470 SBC #$017480 STA SHPOS07490 STA HPOSP07500 BNE CHKUP7510 X2 LDA XPOS }L7520 CLC no, increment x-coordinate7530 ADC #$017540 STA XPOSL7550 X4 AND #$077560 STA HSCROLL fine scroll7570 BN }E CHKUP scroll overflow? if not, move on7580 DEC OFFLO yes, set up offset for character scroll7590 DEC OFFHI7600 CHKUP P }LA joystick up?7610 LSR A7620 PHA7630 BCS CHKDN no, ramble on7640 LDA CURSYL7650 CMP #$5E7660 BNE X37670 LDX CU !}RSYH7680 CPX #$027690 BEQ CHKDN7700 X3 INC CURSYL7710 BNE X117720 INC CURSYH7730 X11 LDX SCY7740 CPX #$1B7750 B "}EQ X67760 INC CURSYL7770 BNE X187780 INC CURSYH7790 X18 DEX7800 STX SCY7810 TXA7820 CLC7830 ADC #$127840 STA #} TEMPI7850 LOOP4 LDA PLYR0,X7860 STA PLYR0-1,X7870 INX7880 CPX TEMPI7890 BNE LOOP47900 BEQ CHKDN7910 X6 LDA YPOSL $}7920 SEC7930 SBC #$017940 BCS X77950 DEC YPOSH7960 X7 STA YPOSL7970 AND #$0F7980 STA VSCROLL fine scroll7990 C %}MP #$0F8000 BNE CHKDN scroll overflow? If not, amble on8010 LDA OFFLO yes, set up offset for character scroll8020 SEC8 &}030 SBC #$308040 STA OFFLO8050 LDA OFFHI8060 SBC #$008070 STA OFFHI8080 CHKDN PLA joystick down?8090 LSR A8100 '}BCS CHGDL no, trudge on8110 LDA CURSYL8120 CMP #$028130 BNE X58140 LDX CURSYH8150 BEQ CHGDL8160 X5 SEC8170 SBC # (}$018180 STA CURSYL8190 BCS X108200 DEC CURSYH8210 X10 LDX SCY8220 CPX #$4E8230 BEQ X88240 SEC8250 SBC #$01826 )}0 STA CURSYL8270 BCS X198280 DEC CURSYH8290 X19 INX8300 STX SCY8310 TXA8320 CLC8330 ADC #$128340 DEX8350 DE *}X8360 STX TEMPI8370 TAX8380 LOOP5 LDA PLYR0-1,X8390 STA PLYR0,X8400 DEX8410 CPX TEMPI8420 BNE LOOP58430 BEQ CH +}GDL8440 X8 LDA YPOSL8450 CLC no, decrement y-coordinate8460 ADC #$018470 STA YPOSL8480 BCC X98490 INC YPOSH8500 X ,}9 AND #$0F8510 STA VSCROLL fine scroll8520 BNE CHGDL no, move on8530 LDA OFFLO yes, mark offset8540 CLC8550 ADC #$3 -}08560 STA OFFLO8570 LDA OFFHI8580 ADC #$008590 STA OFFHI8600 ;8610 ;In this loop we add the offset values to the ex .}isting8620 ;LMS addresses of all display lines.8630 ;This scrolls the characters.8640 ;8650 CHGDL LDY #$098660 DLOOP LDA /} (DLSTPT),Y8670 CLC8680 ADC OFFLO8690 STA (DLSTPT),Y8700 INY8710 LDA (DLSTPT),Y8720 ADC OFFHI8730 STA (DLSTPT), 0}Y8740 INY8750 INY8760 CPY #$278770 BNE DLOOP8780 ;8790 ENDISR LDA YPOSH8800 LSR A8810 LDA YPOSL8820 ROR A883 1}0 LSR A8840 LSR A8850 LSR A8860 CMP #$118870 BCS X398880 LDA #$FF8890 BMI X408900 X39 CMP #$1A8910 BCC X4189 2}20 LDA #$028930 BPL X408940 X41 STA TEMPI8950 INX8960 LDA #$1D8970 SEC8980 SBC TEMPI8990 X40 STA CNT19000 LDA 3}#$009010 STA CNT29020 JMP XITVBV exit vertical blank routine9030 ;9040 *=$799C9050 JSTP .BYTE 0,0,0,0,3,3,3,39060 . 4}BYTE 2,2,2,2,1,1,1,09070 .BYTE 0,0,3,3,2,2,1,09080 DEFNC .BYTE 2,3,3,2,2,2,1,1,2,09090 *=$79C09100 ;9110 ;SUBROUTINE D 5}WORDS9120 ;displays a single word from a long table of words9130 ;9140 DWORDS ASL A9150 ASL A9160 ASL A9170 BCC ENTR 6}Y29180 TAX9190 BOOP20 LDA WORDS+256,X9200 SEC9210 SBC #$209220 BEQ BNDW9230 STA TXTWDW,Y9240 INY9250 INX9260 7} TXA9270 AND #$079280 BNE BOOP209290 BNDW INY9300 RTS9310 ENTRY2 TAX this is another entry point9320 LOOP20 LDA WORD 8}S,X9330 SEC9340 SBC #$209350 BEQ NDW9360 STA TXTWDW,Y9370 INY9380 INX9390 TXA9400 AND #$079410 BNE LOOP209 9}420 NDW INY9430 RTS9440 ;9450 ;9460 ;SUBROUTINE SWITCH FOR SWAPPING CORPS WITH TERRAIN9470 ;9480 SWITCH LDA #$009490 :} STA MAPHI9500 LDA #$279510 SEC9520 SBC CHUNKY9530 ASL A9540 ROL MAPHI9550 ASL A9560 ROL MAPHI9570 ASL A9580 ;} ROL MAPHI9590 ASL A9600 ROL MAPHI9610 STA TEMPLO9620 LDX MAPHI9630 STX TEMPHI9640 ASL A9650 ROL MAPHI9660 C <}LC9670 ADC TEMPLO9680 STA MAPLO9690 LDA MAPHI9700 ADC TEMPHI9710 ADC #$659720 STA MAPHI9730 LDA #469740 SEC9 =}750 SBC CHUNKX9760 TAY9770 LDA (MAPLO),Y9780 LDX CORPS9790 BEQ X349800 PHA9810 LDA SWAP,X9820 STA (MAPLO),Y98 >}30 PLA9840 STA SWAP,X9850 X34 RTS9860 ;9870 ;SUBROUTINE CLRP19880 ;clears the arrow player9890 ;9900 CLRP1 LDA #$00 ?}9910 LDY STEPY9920 DEY9930 TAX9940 LOOP23 CPY #$809950 BCS X229960 STA PLYR1,Y9970 X22 INY9980 INX9990 CPX #$0 @}B010000 BNE LOOP23010010 RTS010020 ;010030 ;SUBROUTINE CLRP2010040 ;clears the maltakreuze010050 ;010060 CLRP2 LDA # A}$00010070 LDY KRZY010080 TAX010090 LOOP25 CPY #$80010100 BCS X42010110 STA PLYR2,Y010120 X42 INY010130 INX010140 B} CPX #$0A010150 BNE LOOP25010160 RTS010170 ;010180 ;SUBROUTINE ERRCLR010190 ;clears sound and the text window010200 C};010210 ERRCLR LDA ERRFLG010220 BPL ENDERR010230 LDA #$00010240 STA ERRFLG010250 LDY #$86010260 LDX #$1F010270 LO D}OP29 STA TXTWDW,Y010280 DEY010290 DEX010300 BPL LOOP29010310 ENDERR RTS010320 ;010330 BITTAB .BYTE $C0,3,$C,$300103 E}40 ROTARR .BYTE 4,9,14,19,24010350 .BYTE 3,8,13,18,23010360 .BYTE 2,7,12,17,22010370 .BYTE 1,6,11,16,21010380 .BYTE 0 F},5,10,15,20010390 OBJX *=*+104010400 ;010410 ;From here to $7B00 is expansion RAM010420 ;010430 ;This is the DLI routine G}010440 ;010450 *=$7B00010460 DLISRV PHA010470 TXA010480 PHA010490 INC CNT2010500 LDA CNT2010510 CMP CNT1010520 H} BNE OVER1010530 LDX #$62 map DLI010540 LDA #$28010550 EOR COLRSH010560 AND DRKMSK010570 STA WSYNC010580 STX CHB I}ASE010590 STA COLPF0010600 JMP DLIOUT010610 ;010620 OVER1 CMP #$0F010630 BNE OVER6010640 LDA #$3A010650 EOR COLRS J}H010660 AND DRKMSK010670 TAX010680 LDA #$00010690 EOR COLRSH010700 AND DRKMSK010710 STA WSYNC010720 STX COLPF2 K}010730 STA COLPF1010740 JMP DLIOUT010750 ;010760 OVER6 CMP #$01010770 BNE OVER2010780 LDA TRCOLR green tree color01 L}0790 EOR COLRSH010800 AND DRKMSK010810 TAX010820 LDA #$1A yellow band at top of map010830 EOR COLRSH010840 AND DRK M}MSK010850 STA WSYNC010860 STA COLBAK010870 STX COLPF0010880 LDA #$60010890 STA CHBASE010900 JMP DLIOUT010910 ;0 N}10920 OVER2 CMP #$03010930 BNE OVER3010940 LDA EARTH top of map010950 EOR COLRSH010960 AND DRKMSK010970 STA WSYNC0 O}10980 STA COLBAK010990 JMP DLIOUT011000 ;011010 OVER3 CMP #$0D011020 BNE OVER4011030 LDX #$E0 bottom of map011040 P}LDA #$22011050 EOR COLRSH011060 AND DRKMSK011070 STA WSYNC011080 STA COLPF2011090 STX CHBASE011100 JMP DLIOUT011 Q}110 ;011120 OVER4 CMP #$0E011130 BNE OVER5011140 LDA #$8A bright blue strip011150 EOR COLRSH011160 AND DRKMSK011170 R} STA WSYNC011180 STA COLBAK011190 JMP DLIOUT011200 ;011210 OVER5 CMP #$10011220 BNE DLIOUT011230 LDA #$D4 green bo S}ttom011240 EOR COLRSH011250 AND DRKMSK011260 PHA some extra delay011270 PLA011280 NOP011290 STA COLBAK011300 ;0 T}11310 DLIOUT PLA011320 TAX011330 PLA011340 RTI011350 ;011360 ;SUBROUTINE DNUMBR011370 ;displays a number with leadin U}g zero suppress011380 ;011390 DNUMBR TAX011400 CLC011410 LDA HDIGIT,X011420 BEQ X36011430 ADC #$10011440 STA TXTW V}DW,Y011450 INY011460 SEC011470 X36 LDA TDIGIT,X011480 BCS X38011490 BEQ X37011500 X38 CLC011510 ADC #$10011520 W}STA TXTWDW,Y011530 INY011540 X37 LDA ODIGIT,X011550 CLC011560 ADC #$10011570 STA TXTWDW,Y011580 INY011590 RTS01 X}1600 ;011610 NDX .BYTE 0,1,2,3,4,9,14,19011620 .BYTE 24,23,22,21,20,15,10,5011630 .BYTE 6,7,8,13,18,17,16,11011640 YINC Y} .BYTE 1011650 XINC .BYTE 0,$FF,0,1011660 OFFNC .BYTE 1,1,1,1,1,1,2,2,1,0011670 .ENDo RAM40 ;50 RTCLKL=$1460 ATRACT=$ Y10 ;EFT VERSION 1.8M (MAINLINE) 11/30/81 COPYRIGHT CHRIS CRAWFORD 198120 ;30 ;Page zero RAM40 DLSTPT=$B0 Zero page pointer[} to display list50 CORPS=$B460 *=$BE70 CHUNKX *=*+1 cursor coordinates (pixel frame)80 CHUNKY *=*+190 ;0100 ;These loc\}ations are for the mainline routines0110 ;0120 MAPPTR *=*+20130 ARMY *=*+10140 UNITNO *=*+10150 DEFNDR *=*+10160 TEMPR ]}*=*+10170 TEMPZ *=*+10180 ACCLO *=*+10190 ACCHI *=*+10200 TURN *=*+10210 LAT *=*+10220 LONG *=*+10230 RFR *=*+10240 T^}RNTYP *=*+10250 SQVAL *=*+10260 ;0270 ;OS locations (see OS manual)0280 ;0290 SDMCTL=$022F0300 DLSTLO=$0230 Existing OS_} pointer to display list0310 DLSTHI=$02310320 GPRIOR=$026F0330 PCOLR0=$02C00340 ;0350 ;HARDWARE LOCATIONS0360 ;0370 HP`}OSP0=$D0000380 SIZEP0=$D0080390 COLBAK=$D01A0400 GRACTL=$D01D0410 RANDOM=$D20A0420 HSCROL=$D4040430 VSCROL=$D4050440 Pa}MBASE=$D4070450 NMIEN=$D40E0460 SETVBV=$E45C0470 ;0480 ;Page 6 usage0490 ;0500 *=$06000510 ;first come locations usedb} by the interrupt service routine0520 XPOSL *=*+5 Horizontal position of screen window0530 TRCOLR *=*+10540 EARTH *=*+105c}50 ICELAT *=*+10560 SEASN1 *=*+10570 SEASN2 *=*+10580 SEASN3 *=*+10590 DAY *=*+10600 MONTH *=*+10610 YEAR *=*+10620 BUd}TFLG *=*+10630 BUTMSK *=*+10640 ;0650 ;THESE VALUES ARE USED BY MAINLINE ROUTINE ONLY0660 ;0670 *=$62A0680 OLDLAT *=*+e}10690 TRNCOD *=*+10700 TLO *=*+10710 THI *=*+10720 TICK *=*+10730 UNTCOD *=*+10740 UNTCD1 *=*+10750 ;0760 HANDCP=$68Ff}0770 ZOC=$6940780 VICTRY=$6970790 ;0800 ;declarations of routines in other modules0810 ;0820 CHKZOC=$51400830 LOGSTC=$g}50910840 DNUMBR=$7BB20850 DWORDS=$79C00860 SWITCH=$79EF0870 YINC=$7BF10880 XINC=$7BF20890 ;0900 *=$52000910 PLYR0 *=q}B FONTS DATB EFT18D ASMCUDEMO BEFT18I ASMBxZEFT18M ASMBQEFT18C ASMB,EFT18T ASMBDISKNAMEDATDISKNAMEDAT*+5120920 CORPSX *=*+159 x-coords of all units (pixel frame)0930 CORPSY *=*+159 y-coords of all units (pixel frame)0940 MSr}TRNG *=*+159 muster strengths0950 CSTRNG *=*+159 combat strengths0960 SWAP *=*+159 terrain code underneath unit0970 ARRIVEs} *=*+159 turn of arrival0980 *=$5C080990 ODIGIT *=*+2561000 TXTTBL *=*+96 more text1010 MONLEN *=*+13 table of month lent}gths1020 HMORDS *=*+159 how many orders each unit has in queue1030 WHORDS *=*+159 what the orders are1040 WHORDH *=*+1591u}050 *=$5FE21060 XADD *=*+4 offsets for moving arrow1070 YADD *=*+41080 TRTAB *=*+131090 MLTKRZ *=*+8 maltese cross shapev}1100 ;1110 *=$64501120 TXTWDW *=$6CB11130 STKTAB *=*+16 a joystick decoding table1140 SSNCOD *=*+121150 TRNTAB *=*+60w}1160 BHX1 *=*+221170 BHY1 *=*+221180 BHX2 *=*+221190 BHY2 *=*+221200 EXEC *=*+1591210 ;1220 ;This is the initializationx} program1230 ;The program begins here1240 ;1250 *=$6E001260 ;1270 LDX #$081280 BOOP99 LDA ZPVAL,X initialize page zery}o values1290 STA DLSTPT,X1300 LDA COLTAB,X1310 STA PCOLR0,X1320 DEX1330 BPL BOOP991340 ;1350 LDX #$0F1360 BOOP9z}8 LDA PSXVAL,X initialize page six values1370 STA XPOSL,X1380 DEX1390 BPL BOOP981400 ;1410 LDA #$001420 STA DLSTLO{}1430 STA HSCROL1440 STA VSCROL1450 LDA DLSTPT+11460 STA DLSTHI1470 ;1480 LDX #$001490 LOOP22 LDA MSTRNG,X1500 S|}TA CSTRNG,X1510 LDA #$001520 STA HMORDS,X1530 LDA #$FF1540 STA EXEC,X1550 INX1560 CPX #$A01570 BNE LOOP221580 }};1590 ;1600 ;Now set up player window1610 ;1620 LDA #$501630 STA PMBASE1640 ;1650 ;here follow various initializatio~}ns1660 ;1670 LDA #$2F1680 STA SDMCTL1690 LDA #$031700 STA GRACTL1710 LDA #$781720 STA HPOSP01730 LDA #$011740} STA HANDCP1750 STA GPRIOR1760 STA SIZEP01770 LDX #$331780 ;1790 LDA #$FF1800 STA PLYR0,X1810 INX1820 STA PLY}R0,X1830 INX1840 LDA #$811850 LOOP2 STA PLYR0,X1860 INX1870 CPX #$3F1880 BNE LOOP21890 LDA #$FF1900 STA PLYR0,}X1910 STA TURN1920 INX1930 STA PLYR0,X1940 ;1950 ;Now enable deferred vertical blank interrupt1960 ;1970 LDY #$00}1980 LDX #$741990 LDA #$072000 JSR SETVBV2010 LDA #$00 This is DLI vector (low byte)2020 STA $02002030 LDA #$7B20}40 STA $02012050 LDA #$C02060 STA NMIEN Turn interrupts on2070 ;2080 NEWTRN INC TURN2090 ;2100 ;first do calendar ca}lculations2110 ;2120 LDA DAY2130 CLC2140 ADC #072150 LDX MONTH2160 CMP MONLEN,X2170 BEQ X282180 BCC X282190 }CPX #$022200 BNE X962210 LDY YEAR2220 CPY #442230 BNE X962240 SEC2250 SBC #$012260 X96 SEC2270 SBC MONLEN,X22}80 INX2290 CPX #132300 BNE X292310 INC YEAR2320 LDX #012330 X29 STX MONTH2340 LDY TRTAB,X2350 STY TRCOLR2360 X}28 STA DAY2370 LDY #$932380 LDA #$002390 LOOP13 STA TXTWDW,Y2400 INY2410 CPY #$A72420 BNE LOOP132430 LDY #$9324}40 TXA2450 CLC2460 ADC #$102470 JSR DWORDS2480 LDA DAY2490 JSR DNUMBR2500 LDA #$0C2510 STA TXTWDW,Y2520 INY}2530 INY2540 LDA #$112550 STA TXTWDW,Y2560 INY2570 LDA #$192580 STA TXTWDW,Y2590 INY2600 LDX YEAR2610 LDA #$}142620 STA TXTWDW,Y2630 INY2640 LDA ODIGIT,X2650 CLC2660 ADC #$102670 STA TXTWDW,Y2680 ;2690 ;now do season cal}culations2700 ;2710 LDA MONTH2720 CMP #$042730 BNE X872740 LDA #$022750 STA EARTH2760 LDA #$402770 STA SEASN1}2780 LDA #$012790 STA SEASN32800 LDA #$002810 STA SEASN22820 JMP ENDSSN2830 X87 CMP #$0A2840 BNE X882850 LDA #$}022860 STA EARTH2870 JMP ENDSSN2880 X88 CMP #$052890 BNE X892900 LDA #$102910 STA EARTH2920 JMP ENDSSN2930 X89 }CMP #$0B2940 BNE X902950 LDA #$0A2960 STA EARTH2970 JMP X912980 X90 CMP #$012990 BNE X923000 LDA #$803010 STA }SEASN13020 LDA #$FF3030 STA SEASN23040 STA SEASN33050 JMP ENDSSN3060 X92 CMP #$033070 BEQ X913080 JMP ENDSSN309}0 ;3100 ;3110 ;freeze those rivers, baby3120 ;3130 X91 LDA RANDOM3140 AND #$073150 CLC3160 ADC #$073170 EOR SEASN}23180 STA TEMPR3190 LDA ICELAT3200 STA OLDLAT3210 SEC3220 SBC TEMPR3230 BEQ X953240 BPL X943250 X95 LDA #$013}260 X94 CMP #$273270 BCC X933280 LDA #$273290 X93 STA ICELAT3300 LDA #$013310 STA CHUNKX3320 STA LONG3330 LDA OL}DLAT3340 STA CHUNKY3350 STA LAT3360 ;3370 LOOP40 JSR TERR3380 ;3390 AND #$3F3400 CMP #$0B3410 BCC NOTCH3420 CM}P #$293430 BCS NOTCH3440 LDX CHUNKY3450 CPX #$0E3460 BCS DOTCH3470 CMP #$233480 BCS NOTCH3490 DOTCH ORA SEASN13}500 LDX UNITNO3510 BEQ X863520 STA SWAP,X3530 JMP NOTCH3540 X86 STA (MAPPTR),Y3550 NOTCH INC CHUNKX3560 LDA CHUNKX}3570 STA LONG3580 CMP #463590 BNE LOOP403600 LDA #$003610 STA CHUNKX3620 STA LONG3630 LDA CHUNKY3640 CMP ICEL}AT3650 BEQ ENDSSN3660 SEC3670 SBC SEASN33680 STA CHUNKY3690 STA LAT3700 JMP LOOP403710 ;3720 ENDSSN LDX #$9E an}y reinforcements?3730 LOOP14 LDA ARRIVE,X3740 CMP TURN3750 BNE X333760 LDA CORPSX,X3770 STA CHUNKX3780 STA LONG37}90 LDA CORPSY,X3800 STA CHUNKY3810 STA LAT3820 STX CORPS3830 JSR TERRB3840 BEQ SORRY3850 CPX #$373860 BCS A51}3870 LDA #$0A3880 STA TXTWDW+363890 A51 JSR SWITCH3900 JMP X333910 SORRY LDA TURN3920 CLC3930 ADC #$013940 STA A}RRIVE,X3950 X33 DEX3960 BNE LOOP143970 ;3980 X31 LDX #$9E3990 LOOPF STX ARMY4000 JSR LOGSTC logistics subroutine4010} LDX ARMY4020 DEX4030 BNE LOOPF4040 ;4050 ;calculate some points4060 ;4070 LDA #$004080 STA ACCLO4090 STA ACCHI}4100 LDX #$014110 LOOPB LDA #$304120 SEC4130 SBC CORPSX,X4140 STA TEMPR4150 LDA MSTRNG,X4160 LSR A4170 BEQ A01}4180 TAY4190 LDA #$004200 CLC4210 LOOPA ADC TEMPR4220 BCC A04230 INC ACCHI4240 CLC4250 BNE A04260 DEC ACCHI}4270 A0 DEY4280 BNE LOOPA4290 A01 INX4300 CPX #$374310 BNE LOOPB4320 ;4330 LOOPC LDA CORPSX,X4340 STA TEMPR4350 }LDA CSTRNG,X4360 LSR A4370 LSR A4380 LSR A4390 BEQ A024400 TAY4410 LDA #$004420 CLC4430 LOOPD ADC TEMPR4440 }BCC A034450 INC ACCLO4460 CLC4470 BNE A034480 DEC ACCLO4490 A03 DEY4500 BNE LOOPD4510 A02 INX4520 CPX #$9E4530} BNE LOOPC4540 ;4550 LDA ACCHI4560 SEC4570 SBC ACCLO4580 BCS A044590 LDA #$004600 A04 LDX #$034610 LOOPG LDY MO}SCOW,X4620 BEQ A154630 CLC4640 ADC MPTS,X4650 BCC A154660 LDA #$FF4670 A15 DEX4680 BPL LOOPG4690 ;4700 LDX HA}NDCP was handicap option used?4710 BNE A23 no4720 LSR A yes, halve score4730 A23 LDY #$054740 JSR DNUMBR4750 LDA #$0}04760 STA TXTWDW,Y4770 LDA TURN4780 CMP #$284790 BNE Z004800 LDA #$01 end of game4810 JSR TXTMSG4820 FINI JMP FI}NI hang up4830 ;4840 ;4850 Z00 LDA #$004860 STA BUTMSK4870 STA CORPS4880 JSR TXTMSG4890 JSR $4700 artificial intel}ligence routine4900 LDA #$014910 STA BUTMSK4920 LDA #$024930 JSR TXTMSG4940 ;4950 ;movement execution phase4960 ;}4970 LDA #$004980 STA TICK4990 LDX #$9E5000 LOOP31 STX ARMY5010 JSR DINGO determine first execution time5020 DEX50}30 BNE LOOP315040 ;5050 LOOP33 LDX #$9E5060 LOOP32 STX ARMY5070 LDA MSTRNG,X5080 SEC5090 SBC CSTRNG,X5100 CMP #$0}25110 BCC Y305120 INC CSTRNG,X5130 CMP RANDOM5140 BCC Y305150 INC CSTRNG,X5160 Y30 LDA EXEC,X5170 BMI A605180 }CMP TICK5190 BNE A605200 LDA WHORDS,X5210 AND #$035220 TAY5230 LDA CORPSX,X5240 CLC5250 ADC XINC,Y5260 STA LO}NG5270 STA ACCLO5280 LDA CORPSY,X5290 CLC5300 ADC YINC,Y5310 STA LAT5320 STA ACCHI5330 JSR TERR5340 LDA UNITN}O5350 BEQ DOMOVE5360 CMP #$375370 BCC GERMAN5380 LDA ARMY5390 CMP #$375400 BCS TRJAM5410 BCC COMBAT5420 GERMAN} LDA ARMY5430 CMP #$375440 BCS COMBAT5450 TRJAM LDX ARMY5460 LDA TICK5470 CLC5480 ADC #$025490 STA EXEC,X5500 A}60 JMP Y065510 COMBAT JSR $4ED85520 LDA VICTRY5530 BEQ A605540 BNE Z945550 DOMOVE LDX ARMY5560 STX CORPS5570 LDA }CORPSY,X5580 STA CHUNKY5590 STA LAT5600 LDA CORPSX,X5610 STA CHUNKX5620 STA LONG5630 JSR CHKZOC5640 LDA ACCHI5}650 STA LAT5660 LDA ACCLO5670 STA LONG5680 LDA ZOC5690 CMP #$025700 BCC Z945710 JSR CHKZOC5720 LDA ZOC5730 C}MP #$025740 BCS TRJAM5750 Z94 JSR SWITCH5760 LDX CORPS5770 LDA LAT5780 STA CHUNKY5790 STA CORPSY,X5800 LDA LONG}5810 STA CHUNKX5820 STA CORPSX,X5830 JSR SWITCH5840 LDX ARMY5850 LDA #$FF5860 STA EXEC,X5870 DEC HMORDS,X5880 }BEQ Y065890 LSR WHORDH,X5900 ROR WHORDS,X5910 LSR WHORDH,X5920 ROR WHORDS,X5930 LDY #$035940 LOOPH LDA CORPSX,X59}50 CMP MOSCX,Y5960 BNE A185970 LDA CORPSY,X5980 CMP MOSCY,Y5990 BNE A186000 LDA #$FF6010 CPX #$376020 BCC A19}6030 LDA #$006040 A19 STA MOSCOW,Y6050 A18 DEY6060 BPL LOOPH6070 ;6080 JSR DINGO6090 JSR STALL6100 Y06 LDX ARMY61}10 DEX6120 BEQ Y076130 JMP LOOP326140 Y07 INC TICK6150 LDA TICK6160 CMP #$206170 BEQ Y086180 JMP LOOP336190 ;}6200 ;end of movement phase6210 ;6220 Y08 JMP NEWTRN6230 ;6240 MOSCOW .BYTE 0,0,0,06250 ;6260 *=$72006270 STALL LDA #}$006280 LOOP79 PHA6290 PLA6300 PHA6310 PLA6320 PHA6330 PLA6340 ADC #$016350 BNE LOOP796360 RTS6370 ;6380 ;}this is the debugging routine6390 ;it can't be reached by any route any longer6400 ;6410 ;6420 *=$72106430 LDA #$0064}40 STA $D01D6450 STA $D00D6460 STA $D00E6470 STA $D00F6480 LDA #$226490 STA $22F6500 LDA #$206510 STA $230652}0 LDA #$BC6530 STA $2316540 LDA #$406550 STA NMIEN6560 LDA #$0A6570 STA $2C56580 LDA #$006590 STA $5FFF6600 }STA $2C86610 BRK6620 ;6630 ;6640 ;6650 ;Subroutine TERR determines what terrain is in a square6660 ;6670 *=$7240668}0 ;6690 TERR JSR TERRB6700 BEQ LOOKUP6710 RTS6720 TERRB LDA #$006730 STA MAPPTR+16740 STA UNITNO6750 LDA #$27676}0 SEC6770 SBC LAT6780 ASL A6790 ROL MAPPTR+16800 ASL A6810 ROL MAPPTR+16820 ASL A6830 ROL MAPPTR+16840 ASL A}6850 ROL MAPPTR+16860 STA TLO6870 LDY MAPPTR+16880 STY THI6890 ASL A6900 ROL MAPPTR+16910 CLC6920 ADC TLO693}0 STA MAPPTR6940 LDA MAPPTR+16950 ADC THI6960 ADC #$656970 STA MAPPTR+16980 LDA #466990 SEC7000 SBC LONG7010 } TAY7020 LDA (MAPPTR),Y7030 STA TRNCOD7040 AND #$3F7050 CMP #$3D7060 BEQ A807070 CMP #$3E7080 A80 RTS7090 ;710}0 LOOKUP LDA TRNCOD7110 STA UNTCOD7120 AND #$C07130 LDX #$9E7140 CMP #$407150 BNE X987160 LDX #$377170 X98 LDA L}AT7180 LOOP30 CMP CORPSY,X7190 BEQ MIGHTB7200 X97 DEX7210 BNE LOOP307220 LDA #$FF7230 STA TXTWDW+1287240 BMI MATC}H7250 MIGHTB LDA LONG7260 CMP CORPSX,X7270 BNE X997280 LDA CSTRNG,X7290 BEQ X997300 LDA ARRIVE,X7310 BMI X99732}0 CMP TURN7330 BCC MATCH7340 BEQ MATCH7350 X99 LDA LAT7360 JMP X977370 MATCH STX UNITNO7380 LDA SWAP,X7390 STA T}RNCOD7400 RTS7410 ;7420 ;determines execution time of next move7430 ;7440 DINGO LDX ARMY7450 LDA HMORDS,X7460 BNE Y}007470 LDA #$FF7480 STA EXEC,X7490 RTS7500 Y00 LDA CORPSX,X7510 STA LONG7520 LDA CORPSY,X7530 STA LAT7540 JSR }TERR7550 LDA UNTCOD7560 STA UNTCD17570 LDX ARMY7580 LDA WHORDS,X7590 EOR #$027600 AND #$037610 TAY7620 LDA CO}RPSX,X7630 CLC7640 ADC XADD,Y7650 STA LONG7660 LDA CORPSY,X7670 CLC7680 ADC YADD,Y7690 STA LAT7700 JSR TERR7}710 JSR TERRTY7720 LDA UNTCD17730 AND #$3F7740 LDX #$007750 CMP #$3D7760 BEQ Y01 infantry7770 LDX #$0A armor778}0 Y01 TXA7790 LDX MONTH7800 CLC7810 ADC SSNCOD-1,X add season index7820 ADC TRNTYP add terrain index7830 TAX7840 }LDA TRNTAB,X get net delay7850 CLC7860 ADC TICK7870 LDX ARMY7880 STA EXEC,X7890 LDA TRNTYP7900 CMP #$077910 BCC} Y027920 LDY #$157930 LOOP35 LDA LAT7940 CMP BHY1,Y7950 BNE Y037960 LDA LONG7970 CMP BHX1,Y7980 BNE Y037990 LD}X ARMY8000 LDA CORPSX,X8010 CMP BHX2,Y8020 BNE Y038030 LDA CORPSY,X8040 CMP BHY2,Y8050 BNE Y038060 LDA #$FF807}0 STA EXEC,X8080 RTS8090 Y03 DEY8100 BPL LOOP358110 Y02 RTS8120 ;8130 ;this subroutine determines the type of terrai}n8140 ;in a square8150 ;8160 TERRTY LDY #$008170 LDA TRNCOD8180 BEQ DONE8190 CMP #$7F border?8200 BNE Y048210 LD}Y #$098220 BNE DONE8230 Y04 INY8240 CMP #$07 mountain?8250 BCC DONE8260 INY8270 CMP #$4B city?8280 BCC DONE8290} INY8300 CMP #$4F frozen swamp?8310 BCC DONE8320 INY8330 CMP #$69 frozen river?8340 BCC DONE8350 INY8360 CMP #}$8F swamp?8370 BCC DONE8380 INY8390 CMP #$A4 river?8400 BCC DONE8410 LDX LAT8420 CPX #$0E8430 BCC NEXT8440 CM}P #$A98450 BCC DONE8460 NEXT INY8470 CMP #$BA coastline?8480 BCC DONE8490 CPX #$0E8500 BCC NEXT28510 CMP #$BB85}20 BCC DONE8530 NEXT2 INY8540 CMP #$BD estuary?8550 BCC DONE8560 INY8570 DONE STY TRNTYP8580 RTS8590 ZPVAL .BYTE }0,$64,0,0,0,$22,1,$30,28600 PSXVAL .BYTE $E0,0,0,$33,$78,$D6,$10,$278610 .BYTE $40,0,1,15,6,41,0,18620 COLTAB .BYTE $58,$}DC,$2F,0,$6A,$C,$94,$46,$B08630 MPTS .BYTE 20,10,10,108640 MOSCX .BYTE 20,33,20,68650 MOSCY .BYTE 28,36,0,158660 TXTMSG A}SL A8670 ASL A8680 ASL A8690 ASL A8700 ASL A8710 TAX8720 LDY #$698730 LOOP19 LDA TXTTBL,X8740 SEC8750 SBC #$}208760 STA TXTWDW,Y8770 INY8780 INX8790 TXA8800 AND #$1F8810 BNE LOOP198820 RTS8830 .ENDB0 Zero page pointeri10 ;EFT VERSION 1.8C (COMBAT) 11/30/81 COPYRIGHT CHRIS CRAWFORD 198120 ;30 ;Page zero RAM40 ;50 ;These locations are for }the mainline routines60 ;70 CHUNKX=$BE80 CHUNKY=$BF90 CORPS=$B40100 *=$C00110 MAPPTR *=*+20120 ARMY *=*+10130 UNITNO} *=*+10140 DEFNDR *=*+10150 TEMPR *=*+10160 TEMPZ *=*+10170 ACCLO *=*+10180 ACCHI *=*+10190 TURN *=*+10200 LAT *=*+10}210 LONG *=*+10220 RFR *=*+10230 TRNTYP *=*+10240 SQVAL *=*+10250 ;0260 ;0270 CONSOL=$D01F0280 AUDF1=$D2000290 AUDC1=}$D2010300 RANDOM=$D20A0310 NMIEN=$D40E0320 ;0330 ;THESE VALUES ARE USED BY MAINLINE ROUTINE ONLY0340 ;0350 EARTH=$6060}360 TRNCOD=$62B0370 *=$6360380 SQX *=*+1 adjacent square0390 SQY *=*+10400 *=$68E0410 DELAY *=*+10420 HANDCP *=*+104}30 TOTGS *=*+10440 TOTRS *=*+10450 OFR *=*+10460 HOMEDR *=*+10470 ZOC *=*+10480 TEMPQ *=*+10490 LLIM *=*+10500 VICTRY }*=*+10510 ;0520 ;declarations of routines in other modules0530 ;0540 INVERT=$4D260550 STALL=$72000560 TERR=$72400570 T}ERRB=$72460580 Y00=$72DE0590 TERRTY=$73690600 DNUMBR=$7BB20610 JSTP=$799C0620 DWORDS=$79C00630 SWITCH=$79EF0640 DEFNC=}$79B40650 OFFNC=$7BF60660 XINC=$7BF20670 YINC=$7BF10680 ;0690 *=$54000700 CORPSX *=*+159 x-coords of all units (pixel }frame)0710 CORPSY *=*+159 y-coords of all units (pixel frame)0720 MSTRNG *=*+159 muster strengths0730 CSTRNG *=*+159 comba}t strengths0740 SWAP *=*+159 terrain code underneath unit0750 ARRIVE *=*+159 turn of arrival0760 WORDS *=*+272 various wor}ds for messages0770 CORPT *=*+159 codes for unit types0780 CORPNO *=*+159 ID numbers of units0790 HDIGIT *=*+256 tables fo}r displaying numbers (hundreds)0800 TDIGIT *=*+256 tens tables0810 ODIGIT *=*+256 ones tables0820 TXTTBL *=*+96 more text}0830 MONLEN *=*+13 table of month lengths0840 HMORDS *=*+159 how many orders each unit has in queue0850 WHORDS *=*+159 what} the orders are0860 WHORDH *=*+1590870 BEEPTB *=*+4 table of beep tones0880 ERRMSG *=*+128 table of error messages0890 XO}FF *=*+4 offsets for moving maltakreuze0900 YOFF *=*+40910 MASKO *=*+4 mask values for decoding orders0920 XADD *=*+4 offs}ets for moving arrow0930 YADD *=*+40940 TRTAB *=*+13 tree color table0950 MLTKRZ *=*+8 maltese cross shape0960 ;0970 ;RA}M from $6000 to $6430 is taken up by0980 ;character sets and the display list0990 ;1000 *=$64311010 ARRTAB *=*+32 arrow }shapes1020 *=$64501030 TXTWDW *=$6CB11040 STKTAB *=*+16 a joystick decoding table1050 SSNCOD *=*+12 season codes1060 TR}NTAB *=*+60 terrain cost tables1070 BHX1 *=*+22 intraversible square pair coordinates1080 BHY1 *=*+221090 BHX2 *=*+221100} BHY2 *=*+221110 EXEC *=*+159 execution times1120 ;1130 *=$4ED81140 ;1150 ;combat routine1160 ;1170 LDA #$001180 S}TA VICTRY clear victory flag1190 LDX ARMY1200 CPX #$2A Finns can't attack1210 BEQ A101220 CPX #$2B1230 BNE A111240} A10 RTS1250 A11 LDY UNITNO1260 STY DEFNDR1270 LDX DEFNDR make combat graphics1280 LDA SWAP,X1290 PHA1300 LDA #$FF} solid red square1310 CPX #$37 Russian unit?1320 BCS B11330 LDA #$7F make it white for Germans1340 B1 STA SWAP,X1350 } STX CORPS1360 LDA CORPSX,X1370 STA CHUNKX1380 LDA CORPSY,X1390 STA CHUNKY1400 JSR SWITCH1410 LDY #$081420 LDX }#$8F1430 LOOP78 STX AUDC11440 STY AUDF11450 JSR STALL1460 TYA1470 CLC1480 ADC #$081490 TAY1500 DEX1510 CPX #}$7F1520 BNE LOOP781530 ;1540 ;now replace original unit character1550 ;1560 JSR SWITCH1570 LDX DEFNDR1580 PLA1590} STA SWAP,X1600 ;1610 ;1620 JSR TERRTY terrain in defender's square1630 LDX DEFNC,Y defensive bonus factor1640 LDA C}STRNG,Y defender's strength1650 LSR A1660 Y15 DEX adjust for terrain1670 BEQ Y161680 ROL A1690 BCC Y151700 LDA #$F}F1710 ;1720 ;now adjust for defender's motion1730 ;1740 Y16 LDX HMORDS,Y1750 BEQ DOBATL1760 LSR A1770 ;1780 ;evalua}te defender's strike1790 ;1800 DOBATL CMP RANDOM1810 BCC ATAKR1820 LDX ARMY1830 DEC MSTRNG,X1840 LDA CSTRNG,X1850 } SBC #$051860 STA CSTRNG,X1870 BEQ Z281880 BCS Y241890 Z28 JMP DEAD attacker dies1900 Y24 JSR BRKCHK attacker lives; }does he break?1910 ;1920 ;evaluate attacker's strike1930 ;1940 ATAKR LDX ARMY1950 LDA CORPSX,X1960 STA LONG1970 LDA} CORPSY,X1980 STA LAT1990 JSR TERR2000 JSR TERRTY2010 LDA OFFNC,Y2020 TAY2030 LDX ARMY2040 LDA CSTRNG,X2050 D}EY2060 BEQ Y192070 LSR A river attack penalty2080 Y19 CMP RANDOM2090 BCC A202100 LDX DEFNDR attacker strikes defende}r2110 DEC MSTRNG,X2120 LDA CSTRNG,X2130 SBC #$052140 STA CSTRNG,X2150 BEQ Z292160 BCS Y252170 Z29 JSR DEAD defen}der dies2180 A20 JMP ENDCOM2190 Y25 JSR BRKCHK does defender break?2200 BCC A202210 LDY ARMY2220 LDA WHORDS,Y2230 A}ND #$032240 TAY first retreat priority : away from attacker2250 JSR RETRET2260 BCC VICCOM defender died2270 BEQ Y27 d}efender may retreat2280 LDY #$01 second priority: east/west2290 CPX #$372300 BCS Y282310 LDY #$032320 Y28 JSR RETRET}2330 BCC VICCOM2340 BEQ Y272350 LDY #$02 third priority: north2360 JSR RETRET2370 BCC VICCOM2380 BEQ Y272390 LD}Y #$00 fourth priority: south2400 JSR RETRET2410 BCC VICCOM2420 BEQ Y272430 LDY #$03 last priority: west/east2440 C}PX #$372450 BCS Y262460 LDY #$012470 Y26 JSR RETRET2480 BCC VICCOM2490 BNE ENDCOM2500 Y27 STX CORPS retreat the def}ender2510 LDA CORPSX,X2520 STA CHUNKX2530 LDA CORPSY,X2540 STA CHUNKY2550 JSR SWITCH2560 LDX CORPS2570 LDA LAT}2580 STA CORPSY,X2590 STA CHUNKY2600 LDA LONG2610 STA CORPSX,X2620 STA CHUNKX2630 JSR SWITCH2640 VICCOM LDX ARMY}2650 STX CORPS2660 LDA CORPSX,X2670 STA CHUNKX2680 LDA CORPSY,X2690 STA CHUNKY2700 LDA ACCLO defender's coordinate }s2710 STA LONG2720 LDA ACCHI2730 STA LAT2740 LDA #$FF2750 STA VICTRY2760 ENDCOM LDX ARMY2770 INC EXEC,X2780 RT }S2790 ;2800 ;Subroutines for combat2810 ;input: X = ID # of defender. Y = proposed DIR of retreat2820 ;output: C bit set  }if defender lives, clear if dies2830 ;Z bit set if retreat open, clear if blocked2840 ;2850 RETRET LDA CORPSX,X2860 CLC }2870 ADC XINC,Y2880 STA LONG2890 LDA CORPSY,X2900 CLC2910 ADC YINC,Y2920 STA LAT2930 JSR TERR examine terrain29 }40 JSR TERRTY2950 LDX DEFNDR2960 LDA UNITNO anybody in this square?2970 BNE Y222980 LDA TRNTYP no2990 ;3000 ;check} for bad ocean crossings3010 ;3020 CMP #$07 coastline?3030 BCC Y413040 CMP #$093050 BEQ Y223060 LDY #$153070 LOOP}42 LDA LAT3080 CMP BHY1,Y3090 BNE Y433100 LDA LONG3110 CMP BHX1,Y3120 BNE Y433130 LDA CORPSX,X3140 CMP BHX2,Y3}150 BNE Y433160 LDA CORPSY,X3170 CMP BHY2,Y3180 BEQ Y223190 Y43 DEY3200 BPL LOOP423210 ;3220 ;any blocking ZOC's?}3230 ;3240 Y41 JSR CHKZOC3250 LDX DEFNDR3260 LDA ZOC3270 CMP #$023280 BCS Y22 no retreat into ZOC3290 LDA #$00 re}treat is possible3300 SEC3310 RTS3320 Y22 LDA CSTRNG,X retreat not possible,extract penalty3330 SEC3340 SBC #$05335}0 STA CSTRNG,X3360 BEQ Z273370 BCS Y233380 Z27 JSR DEAD3390 CLC3400 Y23 LDA #$FF3410 RTS3420 ;3430 ;supply evalu}ation routine3440 ;3450 LDA ARRIVE,X3460 CMP TURN3470 BEQ Z863480 BCC Z863490 RTS3500 Z86 LDA #$183510 CPX #$37}3520 BCS A133530 LDA #$183540 LDY EARTH3550 CPY #$02 mud?3560 BEQ A123570 CPY #$0A snow?3580 BNE A133590 LDA }CORPSX,X this discourages gung-ho corps3600 ASL A double distance3610 ASL A3620 ADC #$4A3630 CMP RANDOM3640 BCC A12}3650 LDA #$10 harder to get supplies in winter3660 A13 STA ACCLO3670 LDY #$01 Russians go east3680 CPX #$373690 BCS }Z803700 LDY #$03 Germans go west3710 Z80 STY HOMEDR3720 LDA CORPSX,X3730 STA LONG3740 LDA CORPSY,X3750 STA LAT376}0 LDA #$003770 STA RFR3780 LOOP91 LDA LONG3790 STA SQX3800 LDA LAT3810 STA SQY3820 LOOP90 LDA SQX3830 CLC3840 }ADC XINC,Y3850 STA LONG3860 LDA SQY3870 CLC3880 ADC YINC,Y3890 STA LAT3900 JSR CHKZOC3910 CPX #$373920 BCC A8}03930 JSR TERRB3940 LDA TRNCOD3950 CMP #$BF3960 BEQ A773970 A80 LDA ZOC3980 CMP #$023990 BCC Z814000 INC RFR4}010 A77 INC RFR4020 LDA RFR4030 CMP ACCLO4040 BCC Z844050 A12 LSR CSTRNG,X4060 BNE A504070 JMP DEAD4080 A50 RTS4}090 Z84 LDA RANDOM4100 AND #$024110 TAY4120 JMP LOOP904130 Z81 LDY HOMEDR4140 LDA LONG4150 CPY #$014160 BNE Z85}4170 CMP #$FF4180 BNE LOOP914190 INC MSTRNG,X Russian replacements4200 INC MSTRNG,X4210 RTS4220 Z85 CMP #$2E4230 }BNE LOOP914240 RTS4250 ;4260 ;routine to check for zone of control4270 ;4280 CHKZOC LDA #$004290 STA ZOC4300 LDA #$ }404310 CPX #$374320 BCS A704330 LDA #$C04340 A70 STA TEMPR4350 JSR TERRB4360 BNE A744370 LDA TRNCOD4380 AND #$!}C04390 CMP TEMPR4400 BEQ A714410 LDA CORPSX,X4420 CMP LONG4430 BNE A794440 LDA CORPSY,X4450 CMP LAT4460 BEQ A"}744470 A79 RTS4480 A71 LDA #$024490 STA ZOC4500 RTS4510 A74 LDX #$074520 LOOPQ LDY JSTP+16,X4530 LDA LONG4540 CLC#}4550 ADC XINC,Y4560 STA LONG4570 LDA LAT4580 CLC4590 ADC YINC,Y4600 STA LAT4610 JSR TERRB4620 BNE A754630 L$}DA TRNCOD4640 AND #$C04650 CMP TEMPR4660 BNE A754670 TXA4680 AND #$014690 CLC4700 ADC #$014710 ADC ZOC4720 %}STA ZOC4730 A75 DEX4740 BPL LOOPQ4750 DEC LAT4760 DEC LONG4770 LDX ARMY4780 RTS4790 ;4800 ;4810 DEAD LDA #$004&}820 STA MSTRNG,X4830 STA CSTRNG,X4840 STA HMORDS,X4850 LDA #$FF4860 STA EXEC,X4870 STA ARRIVE,X4880 STX CORPS48'}90 LDA CORPSX,X4900 STA CHUNKX4910 LDA CORPSY,X4920 STA CHUNKY4930 JSR SWITCH4940 RTS4950 ;4960 ;Subroutine BRKC(}HK evaluates whether a unit under attack breaks4970 ;4980 BRKCHK CPX #$374990 BCS WEAKLG5000 LDA CORPT,X5010 AND #$F0)}5020 BNE WEAKLG5030 LDA MSTRNG,X5040 LSR A5050 JMP Y405060 WEAKLG LDA MSTRNG,X5070 LSR A5080 LSR A5090 LSR A5*}100 STA TEMPR5110 LDA MSTRNG,X5120 SEC5130 SBC TEMPR5140 Y40 CMP CSTRNG,X5150 BCC A305160 LDA #$FF5170 STA EXEC+},X5180 LDA #$005190 STA HMORDS,X5200 A30 RTS5210 ;5220 .END20 ;30 ;Page zero RAM40 ;50 ;These locations are for D10 ;EFT VERSION 1.8T (THINKING) 11/30/81 COPYRIGHT CHRIS CRAWFORD 198120 ;30 ;Page zero RAM40 ;50 ;These locations are fo-}r the mainline routines60 ;70 CHUNKX=$BE80 CHUNKY=$BF90 CORPS=$B40100 *=$C00110 MAPPTR *=*+20120 ARMY *=*+10130 UNIT.}NO *=*+10140 DEFNDR *=*+10150 TEMPR *=*+10160 TEMPZ *=*+10170 ACCLO *=*+10180 ACCHI *=*+10190 TURN *=*+10200 LAT *=*+1/}0210 LONG *=*+10220 RFR *=*+10230 TRNTYP *=*+10240 SQVAL *=*+10250 ;0260 ;0270 TRIG0=$D0100280 CONSOL=$D01F0290 AUDF0}1=$D2000300 AUDC1=$D2010310 RANDOM=$D20A0320 NMIEN=$D40E0330 SETVBV=$E45C0340 ;0350 ;THESE VALUES ARE USED BY MAINLINE 1}ROUTINE ONLY0360 ;0370 *=$6050380 TRCOLR *=*+10390 EARTH *=*+10400 ICELAT *=*+10410 SEASN1 *=*+10420 SEASN2 *=*+10432}0 SEASN3 *=*+10440 DAY *=*+10450 MONTH *=*+10460 YEAR *=*+10470 *=$62A0480 OLDLAT *=*+10490 TRNCOD *=*+10500 TLO *=*+3}10510 THI *=*+10520 TICK *=*+10530 UNTCOD *=*+10540 UNTCD1 *=*+10550 BVAL *=*+1 best value0560 BONE *=*+1 best index054}70 DIR *=*+1 direction0580 TARGX *=*+1 square under consideration0590 TARGY *=*+10600 SQX *=*+1 adjacent square0610 SQY *5}=*+10620 JCNT *=*+1 counter for adjacent squares0630 LINCOD *=*+1 code value of line configuration0640 NBVAL *=*+1 another6} best value0650 RORD1 *=*+1 Russian orders0660 RORD2 *=*+10670 HDIR *=*+1 horizontal direction0680 VDIR *=*+1 vertical di7}rection0690 LDIR *=*+1 larger direction0700 SDIR *=*+1 smaller direction0710 HRNGE *=*+1 horizontal range0720 VRNGE *=*+18} vertical range0730 LRNGE *=*+1 larger range0740 SRNGE *=*+1 smaller range0750 CHRIS *=*+1 midway counter0760 RANGE *=*+19} just that0770 RCNT *=*+1 counter for Russian orders0780 SECDIR *=*+1 secondary direction0790 POTATO *=*+1 a stupid tempor:}ary0800 BAKARR *=*+250810 LINARR *=*+250820 IFR0 *=*+10830 IFR1 *=*+10840 IFR2 *=*+10850 IFR3 *=*+10860 XLOC *=*+1087;}0 YLOC *=*+10880 TEMPX *=*+10890 TEMPY *=*+10900 LV *=*+50910 LPTS *=*+10920 COLUM *=*+10930 OCOLUM *=*+10940 IFRHI *=<}*+10950 PASSCT *=*+10960 DELAY *=*+10970 HANDCP *=*+10980 TOTGS *=*+10990 TOTRS *=*+11000 OFR *=*+11010 ;1020 ;declar=}ations of routines in other modules1030 DEFNC=$79B41040 ROTARR=$7A781050 OBJX=$7A911060 JSTP=$799C1070 *=$7BD91080 NDX>} *=*+241090 YINC *=*+11100 XINC *=*+41110 OFFNC *=*+101120 OBJY=$53981130 IFR=$6981140 TERR=$72401150 Y00=$72DE1160 ;?}1170 *=$54001180 CORPSX *=*+159 x-coords of all units (pixel frame)1190 CORPSY *=*+159 y-coords of all units (pixel frame@})1200 MSTRNG *=*+159 muster strengths1210 CSTRNG *=*+159 combat strengths1220 SWAP *=*+159 terrain code underneath unit12A}30 ARRIVE *=*+159 turn of arrival1240 WORDS *=*+272 various words for messages1250 CORPT *=*+159 codes for unit types1260 B}CORPNO *=*+159 ID numbers of units1270 HDIGIT *=*+256 tables for displaying numbers (hundreds)1280 TDIGIT *=*+256 tens tablC}es1290 ODIGIT *=*+256 ones tables1300 TXTTBL *=*+96 more text1310 MONLEN *=*+13 table of month lengths1320 HMORDS *=*+159D} how many orders each unit has in queue1330 WHORDS *=*+159 what the orders are1340 WHORDH *=*+1591350 BEEPTB *=*+4 table oE}f beep tones1360 ERRMSG *=*+128 table of error messages1370 XOFF *=*+4 offsets for moving maltakreuze1380 YOFF *=*+41390 F}MASKO *=*+4 mask values for decoding orders1400 XADD *=*+4 offsets for moving arrow1410 YADD *=*+41420 TRTAB *=*+13 tree cG}olor table1430 MLTKRZ *=*+8 maltese cross shape1440 ;1450 ;RAM from $6000 to $6430 is taken up by1460 ;character sets andH} the display list1470 ;1480 *=$64311490 ARRTAB *=*+32 arrow shapes1500 *=$64501510 TXTWDW *=$6CB11520 STKTAB *=*+16 aI} joystick decoding table1530 SSNCOD *=*+12 season codes1540 TRNTAB *=*+60 terrain cost tables1550 BHX1 *=*+22 intraversiblJ}e square pair coordinates1560 BHY1 *=*+221570 BHX2 *=*+221580 BHY2 *=*+221590 EXEC *=*+159 execution times1600 ;1610 ;K}1620 ;Russian artificial intelligence routine1630 ;1640 *=$47001650 ;1660 ;initialization loop1670 ;1680 LDX #$01169L}0 STA TEMPR1700 STA TOTRS1710 STA TOTGS1720 LDY #$9E1730 LOOP80 LDA ARRIVE,Y1740 CMP TURN1750 BCS Z501760 LDA TM}EMPR1770 CLC1780 ADC CSTRNG,Y1790 STA TEMPR1800 BCC Z501810 INC TOTGS,X1820 Z50 DEY1830 CPY #$371840 BCS LOOP8N}01850 LDX #$001860 CPY #$001870 BNE LOOP801880 ;1890 ;now shift values 4 places right1900 ;1910 LDA TOTRS1920 STO}A TEMPR1930 LDA TOTGS1940 LDX #$041950 LOOP81 ASL A1960 BCC Z511970 ROR A1980 LOOP82 LSR TEMPR1990 DEX2000 BNE P}LOOP822010 BEQ Z522020 Z51 DEX2030 BNE LOOP812040 ;2050 ;now calculate overall force ratio2060 ;2070 Z52 LDY #$FF20Q}80 LDX TEMPR2090 BEQ Z532100 SEC2110 LOOP83 INY2120 SBC TEMPR2130 BCS LOOP832140 Z53 STY OFR2150 ;2160 ;now calcR}ulate individual force ratios2170 ;2180 LDX #$9E2190 LOOP50 STX ARMY2200 LDA ARRIVE,X2210 CMP TURN2220 BCS Y442230S} JSR CALIFR2240 LDA CORPSX,X2250 STA OBJX-55,X2260 LDA CORPSY,X2270 STA OBJY-55,X2280 Y44 DEX2290 CPX #$372300 T}BCS LOOP502310 ;2320 ;here begins the main loop2330 ;2340 MLOOP LDX #$9E outer loop for entire Russian army2350 LOOP51 SU}TX ARMY inner loop for individual armies2360 LDA ARRIVE,X2370 CMP TURN2380 BCC Z262390 Z54 JMP TOGSCN2400 Z26 LDA CORV}PT,X2410 CMP #$042420 BEQ Z542430 LDA OFR is army near the front?2440 LSR A2450 CMP IFR-55,X2460 BNE Y51 yes2470W} STA BVAL no, treat as reinforcement2480 ;2490 ;find nearby beleaguered army2500 ;2510 LDY #$9E2520 LOOP52 LDA ARRIVE,X}Y2530 CMP TURN2540 BCS Y542550 LDA CORPSX,Y2560 SEC2570 SBC CORPSX,X2580 JSR INVERT2590 STA TEMPR2600 LDA CORY}PSY,Y2610 SEC2620 SBC CORPSY,X2630 JSR INVERT2640 CLC2650 ADC TEMPR2660 LSR A2670 LSR A2680 LSR A2690 BCS YZ}542700 STA TEMPR2710 LDA IFR-55,Y2720 SEC2730 SBC TEMPR2740 BCC Y54 no good using nearby armies2750 CMP BVAL2760[} BCC Y542770 STA BVAL2780 STY BONE2790 Y54 DEY2800 CPY #$372810 BCS LOOP522820 LDY BONE beleagueredest army2830 \} LDA CORPSX,Y2840 STA OBJX-55,X2850 LDA CORPSY,Y2860 STA OBJY-55,X2870 JMP TOGSCN2880 ;2890 ;front line armies2900]} ;2910 Y51 LDA #$FF2920 STA DIR a direction of $FF means 'stay put'2930 STA BONE2940 LDA #$002950 STA BVAL2960 ;29^}70 ;ad hoc logic for surrounded people2980 ;2990 LDA IFRE-55,X3000 CMP #$103010 BCS Z553020 LDA MSTRNG,X3030 LSR A_}3040 CMP CSTRNG,X out of supply?3050 BCC DRLOOP3060 Z55 LDA CORPSX,X head due east!3070 SEC3080 SBC #$053090 BCS Z`}963100 LDA #$003110 Z96 STA OBJX-55,X3120 JMP TOGSCN3130 DRLOOP LDA OBJX-55,X3140 LDY DIR3150 BMI Y553160 CLC317a}0 ADC XINC,Y3180 Y55 STA TARGX3190 LDA OBJY-55,X3200 LDY DIR3210 BMI Y563220 CLC3230 ADC YINC,Y3240 Y56 STA TARGb}Y3250 LDA #$003260 STA SQVAL3270 LDA DIR3280 BMI Y573290 STA WHORDS,X3300 JSR Y003310 LDY ARMY3320 LDA EXEC,Yc} is square accessible?3330 BPL Y57 yes3340 JMP EVALSQ no, skip this square3350 ;3360 ;now fill in the direct line arrayd}3370 ;3380 Y57 LDA #$003390 STA LINCOD3400 LDA TARGX3410 STA SQX3420 LDA TARGY3430 STA SQY3440 LDY #$173450 LOe}OP56 STY JCNT3460 LDA JSTP,Y3470 TAY3480 LDA SQX3490 CLC3500 ADC XINC,Y3510 STA SQX3520 LDA SQY3530 CLC3540 f} ADC YINC,Y3550 STA SQY3560 ;3570 LDX #$9E3580 LOOP55 LDA ARRIVE,X3590 CMP TURN3600 BEQ Z253610 BCS Y583620 Z25 g}LDA OBJX-55,X3630 CMP SQX3640 BNE Y583650 LDA OBJY-55,X3660 CMP SQY3670 BNE Y583680 CPX ARMY3690 BEQ Y313700 h}LDA MSTRNG,X3710 BNE Y593720 Y58 DEX3730 CPX #$373740 BCS LOOP553750 Y31 LDA #$003760 Y59 LDY JCNT3770 LDX NDX,Y3i}780 STA LINARR,X3790 DEY3800 BPL LOOP563810 ;3820 LDX ARMY3830 LDA MSTRNG,X3840 STA LINARR+123850 LDA #$003860j} STA ACCLO3870 STA ACCHI3880 STA SECDIR3890 ;3900 ;build LV array3910 ;3920 Y88 LDX #$003930 STX POTATO3940 Y92 Lk}DY #$003950 Y90 LDA LINARR,X3960 BNE Y893970 INX3980 INY3990 CPY #$054000 BNE Y904010 Y89 LDX POTATO4020 TYA40l}30 STA LV,X4040 INX4050 STX POTATO4060 CPX #$014070 BNE Y914080 LDX #$054090 BNE Y924100 Y91 CPX #$024110 BNEm} Y934120 LDX #$0A4130 BNE Y924140 ;4150 Y93 CPX #$034160 BNE Z404170 LDX #$0F4180 BNE Y924190 Z40 CPX #$044200 n} BNE Z414210 LDX #$144220 BNE Y924230 ;4240 Z41 LDA #$004250 LDY #$044260 LOOP76 LDX LV,Y4270 CPX #$054280 BEQ Zo}424290 CLC4300 ADC #$284310 Z42 DEY4320 BPL LOOP764330 ;4340 ;now add bonus if central column is otherwise empty435p}0 ;4360 LDY LINARR+104370 BNE Y954380 LDY LINARR+114390 BNE Y954400 LDY LINARR+134410 BNE Y954420 LDY LINARR+14q}4430 BNE Y954440 CLC4450 ADC #$304460 Y95 STA LPTS4470 ;4480 ;now evaluate blocking penalty4490 ;4500 LDX #$0045r}10 LOOP72 LDA LV,X4520 CMP #$044530 BCS Y964540 STA TEMPR4550 STX TEMPZ4560 TXA4570 ASL A4580 ASL A4590 ADC Ts}EMPZ4600 ADC TEMPR4610 TAY4620 INY4630 LDA LINARR,Y4640 BEQ Y964650 LDA LPTS4660 SEC4670 SBC #$204680 BCS At}914690 LDA #$004700 A91 STA LPTS4710 Y96 INX4720 CPX #$054730 BNE LOOP724740 ;4750 ;now evaluate vulnerability to pu}enetrations4760 ;4770 LDY #$004780 LOOP54 STY OCOLUM4790 LDX #$004800 LOOP73 STX COLUM4810 CPX OCOLUM4820 BEQ NXCLv}M4830 LDA LV,X4840 SEC4850 SBC LV,Y4860 BEQ NXCLM4870 BMI NXCLM4880 TAX4890 LDA #$014900 LOOP74 ASL A4910 DEw}X4920 BNE LOOP744930 STA TEMPR4940 LDA LPTS4950 SEC4960 SBC TEMPR4970 BCS Y324980 LDA #$004990 Y32 STA LPTS50x}00 NXCLM LDX COLUM5010 INX5020 CPX #$055030 BNE LOOP735040 INY5050 CPY #$055060 BNE LOOP545070 ;5080 ;now get oy}verall line value weighted by danger vector5090 ;5100 LDX ARMY5110 LDY SECDIR5120 BNE Z185130 LDA IFRN-55,X5140 JMz}P Z205150 Z18 CPY #$015160 BNE Z195170 LDA IFRE-55,X5180 JMP Z205190 Z19 CPY #$025200 BNE Z175210 LDA IFRS-55,X5{}220 JMP Z205230 Z17 LDA IFRW-55,X5240 Z20 STA TEMPR5250 LDX LPTS5260 BEQ Z495270 LDA ACCLO5280 CLC5290 LOOP75 ADC|} TEMPR5300 BCC Y345310 INC ACCHI5320 CLC5330 BNE Y345340 LDA #$FF5350 STA ACCHI5360 Y34 DEX5370 BNE LOOP75538}}0 ;5390 ;next secondary direction5400 ;5410 Z49 INY5420 CPY #$045430 BEQ Y355440 STY SECDIR5450 ;5460 ;rotate arra~}y5470 ;5480 LDX #$185490 LOOP70 LDA LINARR,X5500 STA BAKARR,X5510 DEX5520 BPL LOOP705530 LDX #$185540 LOOP71 LDY} ROTARR,X5550 LDA BAKARR,X5560 STA LINARR,Y5570 DEX5580 BPL LOOP715590 JMP Y885600 ;5610 ;5620 Y35 LDA ACCHI563}0 STA SQVAL5640 ;5650 ;get range to closest German into NBVAL5660 ;5670 Y65 LDY #$365680 LDA #$FF5690 STA NBVAL5700} LOOP59 LDA ARRIVE,Y5710 CMP TURN5720 BEQ Z455730 BCS Y685740 Z45 LDA CORPSX,Y5750 SEC5760 SBC TARGX5770 JSR INV}ERT5780 STA TEMPR5790 LDA CORPSY,Y5800 SEC5810 SBC TARGY5820 JSR INVERT5830 CLC5840 ADC TEMPR5850 CMP NBVAL5}860 BCS Y685870 STA NBVAL5880 Y68 DEY5890 BPL LOOP595900 ;5910 ;now determine whether to use offensive or defensive s}trategy5920 ;5930 LDX ARMY5940 LDA IFR-55,X5950 STA TEMPR5960 LDA #$0F5970 SEC5980 SBC TEMPR5990 BCC A406000 } ASL A OK, let's fool the routine6010 STA TEMPR6020 LDA #$096030 SEC6040 SBC NBVAL I know that NBVAL<9 for all front }line units6050 STA NBVAL6060 ;6070 ;now add NBVAL*IFR to SQVAL with defensive bonus6080 ;6090 A40 LDY NBVAL6100 BNE Z}24 this square occupied by a German?6110 STY SQVAL yes, do not enter!!!6120 JMP EVALSQ6130 Z24 LDY TRNTYP6140 LDA DEFN}C,Y6150 CLC6160 ADC NBVAL6170 TAY6180 LDA #$006190 CLC6200 LOOP60 ADC TEMPR6210 BCC Y696220 Z22 LDA #$FF6230 }BMI Y716240 Y69 DEY6250 BNE LOOP606260 ;6270 Y71 CLC6280 ADC SQVAL6290 BCC X006300 LDA #$FF6310 X00 STA SQVAL632}0 ;6330 ;extract penalty if somebody else has dibs on this square6340 ;6350 LDY #$9E6360 LOOP58 LDA OBJX-55,Y6370 CMP }TARGX6380 BNE Y636390 LDA OBJY-55,Y6400 CMP TARGY6410 BNE Y636420 CPY ARMY6430 BEQ Y636440 LDA ARRIVE,Y6450 C}MP TURN6460 BEQ Z446470 BCS Y636480 Z44 LDA SQVAL6490 SBC #$206500 STA SQVAL6510 JMP EVALSQ6520 Y63 DEY6530 CPY} #$376540 BCS LOOP586550 ;6560 ;now extract distance penalty6570 ;6580 Y60 LDA CORPSX,X6590 SEC6600 SBC TARGX6610 } JSR INVERT6620 STA TEMPR6630 LDA CORPSY,X6640 SEC6650 SBC TARGY6660 JSR INVERT6670 CLC6680 ADC TEMPR6690 CMP} #$076700 BCC Z486710 LDA #$006720 STA SQVAL this square is too far away6730 BEQ EVALSQ6740 ;6750 Z48 TAX6760 LDA} #$016770 LOOP77 ASL A6780 DEX6790 BPL LOOP776800 STA TEMPR6810 LDA SQVAL6820 SEC6830 SBC TEMPR6840 STA SQVAL}6850 BCS EVALSQ6860 LDA #$006870 STA SQVAL6880 ;6890 ;now evaluate this square6900 ;6910 EVALSQ LDY DIR6920 LDX AR}MY6930 LDA SQVAL6940 CMP BVAL6950 BCC Y726960 STA BVAL6970 STY BONE6980 Y72 INY6990 CPY #$047000 BEQ Y737010 } STY DIR7020 JMP DRLOOP7030 ;7040 Y73 LDA OBJX-55,X7050 LDY BONE7060 BMI Y747070 CLC7080 ADC XINC,Y7090 Y74 STA }OBJX-55,X7100 LDA OBJY-55,X7110 LDY BONE7120 BMI Y757130 CLC7140 ADC YINC,Y7150 Y75 STA OBJY-55,X7160 ;7170 ;71}80 TOGSCN LDA TRIG07190 BEQ A30 ignore game console if red button is down7200 LDA #$087210 STA CONSOL7220 LDA CONSOL}7230 AND #$017240 BEQ WRAPUP7250 A30 DEX7260 CPX #$377270 BCC Y767280 JMP LOOP517290 Y76 JMP MLOOP7300 ;7310 WRA}PUP LDX #$9E7320 LOOP62 STX ARMY7330 LDA ARRIVE,X7340 CMP TURN7350 BCC Y787360 JMP Y777370 Y78 LDA OBJX-55,X7380 }LDY #$037390 SEC7400 SBC CORPSX,X7410 BPL Y797420 LDY #$017430 JSR INVERT+27440 Y79 STY HDIR7450 STA HRNGE7460 } LDY #$007470 LDA OBJY-55,X7480 SEC7490 SBC CORPSY,X7500 BPL Y807510 LDY #$027520 JSR INVERT+27530 Y80 STY VDIR}7540 STA VRNGE7550 CMP HRNGE7560 BCC Y817570 STA LRNGE7580 LDA HRNGE7590 STA SRNGE7600 LDA HDIR7610 STA SDIR7}620 STY LDIR7630 JMP Y827640 Y81 STA SRNGE7650 STY SDIR7660 LDA HRNGE7670 STA LRNGE7680 LDY HDIR7690 STY LDIR7}700 Y82 LDA #$007710 STA RCNT7720 STA RORD17730 STA RORD27740 LDA LRNGE7750 CLC7760 ADC SRNGE7770 STA RANGE778}0 BEQ Y867790 LDA LRNGE7800 LSR A7810 STA CHRIS7820 ;7830 LOOP61 LDA CHRIS7840 CLC7850 ADC SRNGE7860 STA CHRIS}7870 SEC7880 SBC RANGE7890 BCS OVRFLO7900 LDA LDIR7910 BCC STIP7920 OVRFLO STA CHRIS7930 LDA SDIR7940 STIP STA }DIR7950 LDA RCNT7960 AND #$037970 TAY7980 STA TEMPR7990 LDA RCNT8000 LSR A8010 LSR A8020 TAX8030 LDA DIR80}40 Y85 DEY8050 BMI Y848060 ASL A8070 ASL A8080 JMP Y858090 ;8100 Y84 LDY TEMPR8110 EOR RORD1,X8120 AND MASKO,Y}8130 EOR RORD1,X8140 STA RORD1,X8150 LDX RCNT8160 INX8170 STX RCNT8180 CPX #$088190 BCS Y868200 CPX RANGE8210} BCC LOOP618220 Y86 LDX ARMY8230 LDA RORD18240 STA WHORDS,X8250 LDA RORD28260 STA WHORDH,X8270 LDA RCNT8280 STA} HMORDS,X8290 ;8300 Y77 DEX8310 CPX #$378320 BCC Y878330 JMP LOOP628340 Y87 RTS8350 ;8360 ;Subroutine CALIFR deter}mines individual force ratios8370 ;in all four directions8380 ;8390 CALIFR LDY #$00 initialize vectors8400 STY IFR08410} STY IFR18420 STY IFR28430 STY IFR38440 STY IFRHI8450 INY8460 STY RFR8470 LDA CORPSX,X8480 STA XLOC8490 LDA }CORPSY,X8500 STA YLOC8510 LDY #$9E8520 LOOP53 LDA ARRIVE,Y8530 CMP TURN8540 BCS Z078550 LDA CORPSY,Y8560 SEC857}0 SBC YLOC8580 STA TEMPY save signed vector8590 JSR INVERT8600 STA TEMPR8610 LDA CORPSX,Y8620 SEC8630 SBC XLOC8}640 STA TEMPX8650 JSR INVERT8660 CLC8670 ADC TEMPR8680 Z21 CMP #$09 no point in checking if he's too far8690 Z07 BCS} Y488700 LSR A8710 STA TEMPR this is half of range to unit8720 ;8730 ;now select which IFR gets this German8740 ;8750} LDA TEMPX8760 BPL Z008770 LDA TEMPY8780 BPL Z018790 LDX #$028800 CMP TEMPX8810 BCS Z028820 LDX #$018830 BCC} Z028840 Z00 LDA TEMPY8850 BPL Z038860 JSR INVERT+28870 LDX #$028880 CMP TEMPX8890 BCS Z028900 LDX #$038910 BC}C Z028920 Z03 LDX #$008930 CMP TEMPX8940 BCS Z028950 LDX #$038960 BCC Z028970 Z01 LDA TEMPX8980 JSR INVERT+28990} LDX #$019000 CMP TEMPY9010 BCS Z029020 LDX #$009030 Z02 LDA CSTRNG,Y9040 LSR A9050 LSR A9060 LSR A9070 LSR A}9080 Z11 CPY #$379090 BCC Z129100 CLC9110 ADC RFR9120 BCC Z139130 LDA #$FF9140 Z13 STA RFR9150 JMP Y489160 Z12} CLC9170 ADC IFR0,X9180 BCC Z059190 LDA #$FF9200 Z05 STA IFR0,X9210 Y48 DEY9220 BEQ Z069230 JMP LOOP539240 ;925}0 Z06 LDX #$039260 LDA #$009270 Y37 CLC9280 ADC IFR0,X9290 BCC Y369300 LDA #$FF9310 Y36 DEX9320 BPL Y379330 ;93}40 ;9350 ASL A9360 ROL IFRHI9370 ASL A9380 ROL IFRHI9390 ASL A9400 ROL IFRHI9410 ASL A9420 ROL IFRHI9430 LD}X #$009440 SEC9450 Z16 SBC RFR9460 BCS Z149470 DEC IFRHI9480 SEC9490 BMI Z159500 Z14 INX9510 JMP Z169520 Z15 T}XA9530 LDX ARMY9540 CLC9550 ADC OFR remember strategic situation9560 ROR A average strategic with tactical9570 STA }IFR-55,X9580 ;9590 ;keep a record of danger vector9600 ;9610 LDA IFR09620 STA IFRN-55,X9630 LDA IFR19640 STA IFRE-}55,X9650 LDA IFR29660 STA IFRS-55,X9670 LDA IFR39680 STA IFRW-55,X9690 RTS9700 ;9710 INVERT BPL Z469720 EOR #$F}F9730 CLC9740 ADC #$019750 Z46 RTS9760 ;9770 IFRN *=*+1049780 IFRE *=*+1049790 IFRS *=*+1049800 IFRW *=*+1049810 }.ENDFT VERSION 1.8T (THINKING) 11/30/81 COPYRIGHT CHRIS CRAWFORD 198120 ;30 ;Page zero RAM40 ;50 ;These locations are foAPX-20095E. FRONT SOURCE CODECHRIS CRAWFORD12/8/811ING PROCESS COMPLETEDD2:TITLE! INPUT MASTER DISK TO N8