-
Notifications
You must be signed in to change notification settings - Fork 0
/
hanoi.bas
341 lines (340 loc) · 17.9 KB
/
hanoi.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
1000 REM TOWERS OF HANOI IN BASIC
1010 ND = 8 : REM NUMBER OF DISCS (MAXIMUM IS 8 FOR THIS SOLUTION)
1020 BG = 15 : REM BACKGROUND COLOR
1030 TK = 11 : REM (T)EXT BLAC(K) - REALLY DARK GREY, SINCE 0 = TRANSPARENT
1040 PC = 70 : REM PEG COLOR
1050 REM
1060 REM THE PEG LABELS (A, B, C) CAN BE IN ONE OF FOUR STATES : UNLIT,
1070 REM WHITE ON RED FOR THE CURRENT TARGET PEG BEFORE THE BOTTOM DISC REACHES
1080 REM IT, WHITE ON ORANGE ONCE THERE'S AN INCOMPLETE STACK STARTING WITH THE
1090 REM PROPER BOTTOM DISC, AND WHITE ON GREEN ONCE IT HAS A FULL STACK.
1100 REM THIS ARRAY HOLDS THE FG (0) AND BG (1) COLORS FOR EACH STATE.
1110 DIM LC(3, 1)
1120 FOR I = 0 TO 3 : FOR J = 0 TO 1 : READ LC(I, J) : NEXT J, I
1130 DATA 11, 0, 1, 2, 1, 8, 1, 5
1140 REM AND THIS ONE HOLDS THE CURRENT STATE OF EACH LABEL
1150 DIM PL(2)
1160 REM
1170 REM WHEN A DISC IS MOVED INTO ITS PROPER PLACE (HEIGHT), A TONE PLAYS,
1180 REM IN AN ASCENDING MAJOR SCALE COVERING AN OCTAVE FROM THE LARGEST TO
1190 REM THE SMALLEST DISC. N$ ARRAY HOLDS THE FMPLAY STRINGS FOR EACH NOTE,
1200 REM DESCENDING SINCE THE DISCS ARE NUMBERED FROM SMALL TO LARGE.
1210 DIM N$(7)
1220 FOR I = 0 TO 7 : READ N$(I): NEXT I
1230 DATA O5C, O4B, O4A, O4G, O4F, O4E, O4D, O4C
1240 REM
1250 REM THE P ARRAY HOLDS THE LOCATIONS OF THE DISCS. P(N, 0) IS THE HEIGHT
1260 REM OF THE STACK ON PEG N (0-2); P(N, 1) IS THE NUMBER OF THE BOTTOMMOST
1270 REM DISC, P(N, 2) THE SECOND DISC, AND SO ON UP TO P(N, P(N, 0)).
1280 DIM P(2, ND)
1290 REM
1300 REM WE START WITH ALL THE DISCS ON PEG 0 (A), PROPERLY STACKED
1310 P(0, 0) = ND : FOR I = 1 TO ND : P(0, I) = ND - I : NEXT
1320 REM WHICH MEANS PEG A'S LABEL STARTS IN STATE 3 (COMPLETE)
1330 PL(0) = 3
1340 REM
1350 REM THE SUBROUTINE THAT COMPUTES THE SEQUENCE OF MOVES IS RECURSIVE.
1360 REM SINCE BASIC ONLY HAS GLOBAL VARIABLES, EACH OF THE VARIABLES THAT
1370 REM WOULD NORMALLY BE LOCAL TO THAT ROUTINE, INCLUDING ITS PARAMETERS,
1380 REM IS REPRESENTED BY A GLOBAL ARRAY. THE CURRENT SET OF VALUES FOR A
1390 REM GIVEN ACTIVATION OF THE ROUTINE IS INDICATED BY A SINGLE GLOBAL
1400 REM STACK POINTER, SP. SP HOLDS THE INDEX WHERE THE NEXT SET OF VALUES
1410 REM WILL GO; THE CURRENT SET IS ALWAYS AT SP-1. SO IT STARTS AT 0.
1420 SP = 0
1430 REM TO SOLVE THE PROBLEM FOR ND DISCS, WE NEED ND LEVELS OF STACK.
1440 DIM N(ND) : REM THE NUMBER OF DISCS TO MOVE AT THIS STEP
1450 DIM F(ND) : REM THE PEG TO MOVE THE DISCS FROM
1460 DIM T(ND) : REM THE PEG TO MOVE THE DISCS TO
1470 DIM V(ND) : REM THE THIRD "VIA" PEG, WHICH IS COMPUTED AND CACHED HERE.
1480 REM
1490 REM COORDINATES FOR THE VISUALIZATION
1500 BX = 60 : REM BASE X : THE X-COORDINATE OF THE CENTER OF PEG 0
1510 DEF FN PX(P) = BX + P * 96 : REM X-COORDINATE OF THE CENTER OF PEG P
1520 DEF FN LX(P) = 8 + P * 12 : REM TEXT COLUMN FOR PEG P'S LABEL
1530 LR = 22 : REM TEXT ROW FOR PEG LABELS
1540 BY = 162 : REM Y-COORDINATE OF THE BOTTOMS OF THE PEGS
1550 Y0 = BY - 72 : REM Y-COORDINATE OF THE TOPS OF THE PEGS
1560 Y1 = BY + 1 : REM Y-COORDINATE OF THE TOPS OF THE PEGS' BASES
1570 Y2 = BY + 15 : REM Y-COORDINATE OF THE BOTTOMS OF THE PEGS' BASES
1580 DIM DW(7) : REM WIDTH OF SPRITE FOR DISC N
1590 REM
1600 REM THE FOREGOING SETUP ALL HAPPENS FAST ENOUGH THAT WE DIDN'T NEED
1610 REM A LOADING SCREEN OR ANYTHING, BUT READING THE SPRITE DATA INTO
1620 REM VIDEO RAM TAKES A WHILE. SO GIVE THE USER SOMETHING TO LOOK AT.
1630 GOSUB 2000 : REM SET UP SCREEN AND PROGRESS INDICATOR
1640 REM
1650 REM THE SETUP SCREEN CREATED A BLOCK IN THE TEXT AREA MATCHING THE
1660 REM BACKGROUND, SO WE CAN DRAW THE PEGS INVISIBLY.
1670 GOSUB 2200 : REM DRAW PEGS
1680 REM
1690 REM NOW WE LOAD THE SPRITE DATA. THE LOAD ROUTINE SCROLLS THE TEXT BLOCK
1700 REM UP SO THE PEGS GROW INTO VIEW AS THE DATA IS LOADED.
1710 GOSUB 2600 : REM LOAD SPRITE DATA
1720 REM
1730 REM THE TOP-LEVEL CALL TO THE SOLUTION FUNCTION IS ALWAYS MOVING ALL
1740 REM THE DISCS, SO WE CAN SET UP THAT PARAMETER ONCE AND LEAVE IT
1750 REM INSTEAD OF POPULATING IT EVERY TIME.
1760 N(SP) = ND
1770 REM
1780 REM MAIN LOOP; ENDLESS UNTIL USER PRESSES A KEY.
1790 FOR E = 0 TO 1 STEP 0
1800 : REM AT THE START OF A CYCLE THE DISCS ARE ON PEG 0
1810 : FP = 0
1820 : REM THE DISCS MOVE LEFT TO RIGHT (PD=1) THEN RIGHT TO LEFT (PD=-1)
1830 : FOR PD = 1 TO -1 STEP -2
1840 : FOR M = 0 TO 1 : REM TWO MOVES IN EACH DIRECTION
1850 : REM SET UP REMAINING PARAMETERS FOR SOLUTION CALL
1860 : F(SP) = FP : REM SOURCE PEG
1870 : T(SP) = FP + PD : REM TARGET PEG
1880 : PL(T(SP)) = 1 : REM MARK TARGET PEG'S LABEL
1890 : GOSUB 2800 : REM UPDATE DISPLAY
1900 : SP = SP + 1 : GOSUB 3000 : SP = SP - 1 : REM PERFORM THE SOLUTION
1910 : PL(T(SP)) = 3 : REM NOW WE HAVE A FULL STACK
1920 : GOSUB 2800 : REM UPDATE DISPLAY
1930 : FMDRUM 1, 33 : REM CELEBRATORY BELL
1940 : FOR Q=0 TO 9999 : NEXT Q: REM DELAY BEFORE NEXT MOVE
1950 : GET K$ : IF K$<>"" THEN M = 1 : PD = -1 : E = 1 : REM CHECK FOR KEY
1960 : FP = T(SP) : REM OLD TARGET PEG IS NEW SOURCE PEG
1970 : NEXT M
1980 : NEXT PD
1990 NEXT E
1991 END
1993 REM ======================================================================
1995 REM SUBROUTINES
1997 REM ----------------------------------------------------------------------
1999 REM SET UP SCREEN AND LOADING-PROGRESS INDICATOR
2000 SCREEN 128 : RECT 0, 0, 319, 239, BG: REM CLEAR THE SCREEN
2010 COLOR BG, 0 : CLS: REM SET TEXT COLOR TO MATCH THE BACKGROUND
2020 FOR I = 1 TO 16 : REM DRAW A BLOCK OF INVERSE SPACES TO COVER THE BITMAP
2030 LOCATE 9 + I, 4
2040 PRINT CHR$(18);RPT$(32, 33)
2050 NEXT I
2060 LOCATE 30
2070 COLOR TK, 0
2080 RETURN
2100 REM
2199 REM DRAW THE PEGS
2200 COLOR TK, 0
2210 FOR P=0 TO 2
2220 : CX = FN PX(P) : REM CENTER LINE
2230 : X0 = CX - 33 : REM LEFT EDGE OF BASE
2240 : X1 = CX - 2 : REM LEFT EDGE OF PEG
2250 : X2 = X1 + 4 : REM RIGHT EDGE OF PEG
2260 : X3 = X0 + 66 : REM RIGHT EDGE OF BASE
2270 : FRAME X0, Y1, X3, Y2, 0 : REM BLACK OUTLINE FOR BASE
2280 : RECT X0 + 1, Y1 + 1, X3 - 1, Y2 - 1, PC : REM BASE RECTANGLE
2290 : FRAME X1, Y0, X2, Y1, 0 : REM BLACK OUTLINE FOR PEG
2300 : RECT X1 + 1, Y0 + 1, X2 - 1, Y1 - 1, PC : REM PEG RECTANGLE
2310 NEXT P
2320 RETURN
2350 REM
2399 REM UPDATE THE "PROGRESS BAR"
2400 PRINT
2410 RETURN
2500 REM
2599 REM LOAD THE SPRITE DATA
2600 A = $3100 : REM START SPRITE DATA IN VIDEO RAM HERE
2610 FOR I=1 TO 8
2620 : SPRMEM I, 1, A, 0 : REM TELL BASIC WERE THIS SPRITE'S DATA IS
2630 : READ W, H, D : REM WIDTH (0-3), HEIGHT (0-3), COLOR DEPTH (0-1)
2640 : SPRITE I, 0, 0, 0, W, H, D : REM TELL BASIC ITS DIMENSIONS
2650 : SW(I - 1) = W : REM REMEMBER WIDTH FOR PROPER POSITIONING
2660 : FOR J=1 TO 2 : REM BREAK IN HALF TO UPDATE PROGRESS BAR MORE FREQUENTLY
2670 : FOR K=1 TO 2^(H + 2) : REM FOR EACH ROW OF PIXELS
2680 : FOR L=1 TO 2^(W + DEPTH + 2) : REM FOR EACH PIXEL OR PIXEL PAIR
2690 : READ B
2700 : VPOKE 1, A, B
2710 : A = A + 1
2720 : NEXT L
2730 : NEXT K
2740 : GOSUB 2400 : REM UPDATE PROGRESS BAR
2750 : NEXT J
2760 NEXT I
2770 RETURN
2780 REM
2799 REM DISPLAY THE CURRENT CONFIGURATION OF DISCS ON PEGS
2800 FOR DP=0 TO 2
2810 : LOCATE LR, FN LX(DP)
2820 : COLOR LC(PL(DP), 0), LC(PL(DP), 1)
2830 : PRINT CHR$(65 + DP)
2840 : IF P(DP, 0) = 0 THEN 2920
2850 : FOR L = 1 TO P(DP, 0)
2860 : D = P(DP, L)
2870 : X = FN PX(DP) - 4 * 2^SW(D)
2880 : Y = BY + 1 - L * 8
2890 : MOVSPR D + 1, X, Y
2900 : SPRITE D + 1, 3
2910 : NEXT L
2920 NEXT DP
2930 RETURN
2940 REM
2999 REM RECURSIVE SOLUTION FOR HANOI
3000 IF N(SP - 1) = 0 THEN RETURN
3010 V(SP - 1) = 3 - F(SP - 1) - T(SP - 1) : REM VIA PEG
3020 N(SP) = N(SP - 1) - 1 : F(SP) = F(SP - 1) : T(SP) = V(SP - 1)
3030 SP = SP + 1 : GOSUB 3000 : SP = SP - 1 : REM MOVE N-1 DISCS FROM F TO V
3040 REM WE CAN USE SOME INDIVIDUAL VARIABLES AS LONG AS WE DON'T RECURSE
3050 F = F(SP - 1): T = T(SP - 1)
3060 REM MOVE 1 DISC FROM F TO T
3070 H1 = P(F, 0) : REM STARTING HEIGHT
3080 TD = P(F, H1) : REM WHICH DISC TO MOVE
3090 H2 = P(T, 0) + 1 : REM NEW HEIGHT OF STACK ON TARGET PEG
3100 REM MAKE THE MOVE IN MEMORY
3110 P(T, 0) = H2
3120 P(T, H2) = TD
3130 P(F, 0) = H1 - 1
3140 REM CHANGE STATE OF SOURCE LABEL IF NEEDED
3150 IF PL(F) <> 1 AND H1 = 1 THEN PL(F) = 0: GOTO 3190
3160 IF PL(F) = 3 THEN PL(F) = 2: GOTO 3190
3170 GOTO 3230
3180 REM JUST UPDATE THE LABEL INSTEAD OF CALLING THE WHOLE DISPLAY ROUTINE
3190 LOCATE LR, FN LX(F)
3200 COLOR LC(PL(F), 0), LC(PL(F), 1)
3210 PRINT CHR$(65 + F)
3220 REM ANIMATE THE ACTUAL DISC MOVE
3230 X1 = FN PX(F) - 4 * 2^SW(TD)
3240 X2 = FN PX(T) - 4 * 2^SW(TD)
3250 Y0 = BY + 1 - H1 * 8 : REM STARTING Y
3260 Y1 = BY + 1 - 16 * 8 : REM Y USED FOR HORIZONTAL MOVE
3270 Y2 = BY + 1 - H2 * 8 : REM ENDING Y
3280 SPRITE TD + 1, 3, 1 : REM TURN DISC GREY WHEN NOT CONNECTED
3290 FOR Y = Y0 TO Y1 STEP -1 : MOVSPR TD + 1, X1, Y : NEXT Y : REM LIFT
3300 FOR X = X1 TO X2 STEP T - F : MOVSPR TD + 1, X, Y : NEXT X : REM OVER
3310 FOR TT = 0 TO Y2 - Y1 : REM DROP, ACCELERATING DUE TO GRAVITY
3320 : Y = Y1 + TT * TT : IF Y>= Y2 THEN Y = Y2 : TT = Y2 - Y1
3330 : MOVSPR TD + 1, X2, Y : FOR Q = 0 TO 9 : NEXT Q
3340 NEXT TT
3350 FMDRUM 1, 26 - 10 * (H2 = 1) : REM SOUND EFFECT
3360 IF H2 <> ND-TD THEN 3460
3380 REM DISC HAS MADE IT HOME
3390 SPRITE TD + 1, 3, 0 : REM RESTORE DISC COLOR
3400 IF PL(T) > 2 THEN 3450
3410 PL(T) = 2 : REM BUMP PEG LABEL
3420 LOCATE LR, FN LX(T)
3430 COLOR LC(PL(T), 0), LC(PL(T), 1)
3440 PRINT CHR$(65 + T)
3450 FMPLAY 0, N$(TD) : REM PLAY TONE
3460 N(SP) = N(SP - 1) - 1 : F(SP) = V(SP - 1) : T(SP) = T(SP - 1)
3470 SP = SP + 1 : GOSUB 3000 : SP = SP - 1: REM MOVE N-1 DISCS FROM V TO T
3480 RETURN
3999 REM SPRITE PIXEL MAPS
4000 DATA 2, 0, 0 : REM SPRITE 1 - 32X8X4
4010 DATA 0, 0, 0, 0, 0, 0,187,187,187,187, 0, 0, 0, 0, 0, 0
4020 DATA 0, 0, 0, 0,187,187,187, 17, 17,187,187,187, 0, 0, 0, 0
4030 DATA 0, 0, 0,187,187, 17, 17, 17, 17, 17, 17,187,187, 0, 0, 0
4040 DATA 0, 0, 11,177, 17, 17, 17, 17, 17, 17, 17, 17, 27,176, 0, 0
4050 DATA 0, 0, 11,177, 17, 17, 17, 17, 17, 17, 17, 17, 27,176, 0, 0
4060 DATA 0, 0, 0,187,187, 17, 17, 17, 17, 17, 17,187,187, 0, 0, 0
4070 DATA 0, 0, 0, 0,187,187,187, 17, 17,187,187,187, 0, 0, 0, 0
4080 DATA 0, 0, 0, 0, 0, 0,187,187,187,187, 0, 0, 0, 0, 0, 0
4090 DATA 2, 0, 0 : REM SPRITE 2, 32X8X4
4100 DATA 0, 0, 0, 0, 11,187,187,187,187,187,187,176, 0, 0, 0, 0
4110 DATA 0, 0, 11,187,187,178, 34, 34, 34, 34, 43,187,187,176, 0, 0
4120 DATA 0, 11,187,178, 34, 34, 34, 34, 34, 34, 34, 34, 43,187,176, 0
4130 DATA 0,187, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,187, 0
4140 DATA 0,187, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,187, 0
4150 DATA 0, 11,187,178, 34, 34, 34, 34, 34, 34, 34, 34, 43,187,176, 0
4160 DATA 0, 0, 11,187,187,178, 34, 34, 34, 34, 43,187,187,176, 0, 0
4170 DATA 0, 0, 0, 0, 11,187,187,187,187,187,187,176, 0, 0, 0, 0
4180 DATA 3, 0, 0 : REM SPRITE 3, 64X8X4
4190 DATA 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,187,187,187,187,187
4200 DATA 187,187,187,187,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
4210 DATA 0, 0, 0, 0, 0, 0, 0, 0, 0,187,187,187, 51, 51, 51, 51
4220 DATA 51, 51, 51, 51,187,187,187, 0, 0, 0, 0, 0, 0, 0, 0, 0
4230 DATA 0, 0, 0, 0, 0, 0, 0, 0,187,187, 51, 51, 51, 51, 51, 51
4240 DATA 51, 51, 51, 51, 51, 51,187,187, 0, 0, 0, 0, 0, 0, 0, 0
4250 DATA 0, 0, 0, 0, 0, 0, 0, 11,179, 51, 51, 51, 51, 51, 51, 51
4260 DATA 51, 51, 51, 51, 51, 51, 51, 59,176, 0, 0, 0, 0, 0, 0, 0
4270 DATA 0, 0, 0, 0, 0, 0, 0, 11,179, 51, 51, 51, 51, 51, 51, 51
4280 DATA 51, 51, 51, 51, 51, 51, 51, 59,176, 0, 0, 0, 0, 0, 0, 0
4290 DATA 0, 0, 0, 0, 0, 0, 0, 0,187,187, 51, 51, 51, 51, 51, 51
4300 DATA 51, 51, 51, 51, 51, 51,187,187, 0, 0, 0, 0, 0, 0, 0, 0
4310 DATA 0, 0, 0, 0, 0, 0, 0, 0, 0,187,187,187, 51, 51, 51, 51
4320 DATA 51, 51, 51, 51,187,187,187, 0, 0, 0, 0, 0, 0, 0, 0, 0
4330 DATA 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,187,187,187,187,187
4340 DATA 187,187,187,187,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
4350 DATA 3, 0, 0 : REM SPRITE 4, 64X8X4
4360 DATA 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,187,187,187,187,187,187
4370 DATA 187,187,187,187,187,187,176, 0, 0, 0, 0, 0, 0, 0, 0, 0
4380 DATA 0, 0, 0, 0, 0, 0, 0, 11,187,187,180, 68, 68, 68, 68, 68
4390 DATA 68, 68, 68, 68, 68, 75,187,187,176, 0, 0, 0, 0, 0, 0, 0
4400 DATA 0, 0, 0, 0, 0, 0, 11,187,180, 68, 68, 68, 68, 68, 68, 68
4410 DATA 68, 68, 68, 68, 68, 68, 68, 75,187,176, 0, 0, 0, 0, 0, 0
4420 DATA 0, 0, 0, 0, 0, 0,187, 68, 68, 68, 68, 68, 68, 68, 68, 68
4430 DATA 68, 68, 68, 68, 68, 68, 68, 68, 68,187, 0, 0, 0, 0, 0, 0
4440 DATA 0, 0, 0, 0, 0, 0,187, 68, 68, 68, 68, 68, 68, 68, 68, 68
4450 DATA 68, 68, 68, 68, 68, 68, 68, 68, 68,187, 0, 0, 0, 0, 0, 0
4460 DATA 0, 0, 0, 0, 0, 0, 11,187,180, 68, 68, 68, 68, 68, 68, 68
4470 DATA 68, 68, 68, 68, 68, 68, 68, 75,187,176, 0, 0, 0, 0, 0, 0
4480 DATA 0, 0, 0, 0, 0, 0, 0, 11,187,187,180, 68, 68, 68, 68, 68
4490 DATA 68, 68, 68, 68, 68, 75,187,187,176, 0, 0, 0, 0, 0, 0, 0
4500 DATA 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,187,187,187,187,187,187
4510 DATA 187,187,187,187,187,187,176, 0, 0, 0, 0, 0, 0, 0, 0, 0
4520 DATA 3, 0, 0 : REM SPRITE 5, 64X8X4
4530 DATA 0, 0, 0, 0, 0, 0, 0, 0,187,187,187,187,187,187,187,187
4540 DATA 187,187,187,187,187,187,187,187, 0, 0, 0, 0, 0, 0, 0, 0
4550 DATA 0, 0, 0, 0, 0, 0,187,187,187, 85, 85, 85, 85, 85, 85, 85
4560 DATA 85, 85, 85, 85, 85, 85, 85,187,187,187, 0, 0, 0, 0, 0, 0
4570 DATA 0, 0, 0, 0, 0,187,187, 85, 85, 85, 85, 85, 85, 85, 85, 85
4580 DATA 85, 85, 85, 85, 85, 85, 85, 85, 85,187,187, 0, 0, 0, 0, 0
4590 DATA 0, 0, 0, 0, 11,181, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85
4600 DATA 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 91,176, 0, 0, 0, 0
4610 DATA 0, 0, 0, 0, 11,181, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85
4620 DATA 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 91,176, 0, 0, 0, 0
4630 DATA 0, 0, 0, 0, 0,187,187, 85, 85, 85, 85, 85, 85, 85, 85, 85
4640 DATA 85, 85, 85, 85, 85, 85, 85, 85, 85,187,187, 0, 0, 0, 0, 0
4650 DATA 0, 0, 0, 0, 0, 0,187,187,187, 85, 85, 85, 85, 85, 85, 85
4660 DATA 85, 85, 85, 85, 85, 85, 85,187,187,187, 0, 0, 0, 0, 0, 0
4670 DATA 0, 0, 0, 0, 0, 0, 0, 0,187,187,187,187,187,187,187,187
4680 DATA 187,187,187,187,187,187,187,187, 0, 0, 0, 0, 0, 0, 0, 0
4690 DATA 3, 0, 0 : REM SPRITE 6, 64X8X4
4700 DATA 0, 0, 0, 0, 0, 0, 11,187,187,187,187,187,187,187,187,187
4710 DATA 187,187,187,187,187,187,187,187,187,176, 0, 0, 0, 0, 0, 0
4720 DATA 0, 0, 0, 0, 11,187,187,182,102,102,102,102,102,102,102,102
4730 DATA 102,102,102,102,102,102,102,102,107,187,187,176, 0, 0, 0, 0
4740 DATA 0, 0, 0, 11,187,182,102,102,102,102,102,102,102,102,102,102
4750 DATA 102,102,102,102,102,102,102,102,102,102,107,187,176, 0, 0, 0
4760 DATA 0, 0, 0,187,102,102,102,102,102,102,102,102,102,102,102,102
4770 DATA 102,102,102,102,102,102,102,102,102,102,102,102,187, 0, 0, 0
4780 DATA 0, 0, 0,187,102,102,102,102,102,102,102,102,102,102,102,102
4790 DATA 102,102,102,102,102,102,102,102,102,102,102,102,187, 0, 0, 0
4800 DATA 0, 0, 0, 11,187,182,102,102,102,102,102,102,102,102,102,102
4810 DATA 102,102,102,102,102,102,102,102,102,102,107,187,176, 0, 0, 0
4820 DATA 0, 0, 0, 0, 11,187,187,182,102,102,102,102,102,102,102,102
4830 DATA 102,102,102,102,102,102,102,102,107,187,187,176, 0, 0, 0, 0
4840 DATA 0, 0, 0, 0, 0, 0, 11,187,187,187,187,187,187,187,187,187
4850 DATA 187,187,187,187,187,187,187,187,187,176, 0, 0, 0, 0, 0, 0
4860 DATA 3, 0, 0 : REM SPRITE 7, 64X8X4
4870 DATA 0, 0, 0, 0, 0,187,187,187,187,187,187,187,187,187,187,187
4880 DATA 187,187,187,187,187,187,187,187,187,187,187, 0, 0, 0, 0, 0
4890 DATA 0, 0, 0,187,187,187,119,119,119,119,119,119,119,119,119,119
4900 DATA 119,119,119,119,119,119,119,119,119,119,187,187,187, 0, 0, 0
4910 DATA 0, 0,187,187,119,119,119,119,119,119,119,119,119,119,119,119
4920 DATA 119,119,119,119,119,119,119,119,119,119,119,119,187,187, 0, 0
4930 DATA 0, 11,183,119,119,119,119,119,119,119,119,119,119,119,119,119
4940 DATA 119,119,119,119,119,119,119,119,119,119,119,119,119,123,176, 0
4950 DATA 0, 11,183,119,119,119,119,119,119,119,119,119,119,119,119,119
4960 DATA 119,119,119,119,119,119,119,119,119,119,119,119,119,123,176, 0
4970 DATA 0, 0,187,187,119,119,119,119,119,119,119,119,119,119,119,119
4980 DATA 119,119,119,119,119,119,119,119,119,119,119,119,187,187, 0, 0
4990 DATA 0, 0, 0,187,187,187,119,119,119,119,119,119,119,119,119,119
5000 DATA 119,119,119,119,119,119,119,119,119,119,187,187,187, 0, 0, 0
5010 DATA 0, 0, 0, 0, 0,187,187,187,187,187,187,187,187,187,187,187
5020 DATA 187,187,187,187,187,187,187,187,187,187,187, 0, 0, 0, 0, 0
5030 DATA 3, 0, 0 : REM SPRITE 8, 64X8X4
5040 DATA 0, 0, 0, 11,187,187,187,187,187,187,187,187,187,187,187,187
5050 DATA 187,187,187,187,187,187,187,187,187,187,187,187,176, 0, 0, 0
5060 DATA 0, 11,187,187,184,136,136,136,136,136,136,136,136,136,136,136
5070 DATA 136,136,136,136,136,136,136,136,136,136,136,139,187,187,176, 0
5080 DATA 11,187,184,136,136,136,136,136,136,136,136,136,136,136,136,136
5090 DATA 136,136,136,136,136,136,136,136,136,136,136,136,136,139,187,176
5100 DATA 187,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136
5110 DATA 136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,187
5120 DATA 187,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136
5130 DATA 136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,187
5140 DATA 11,187,184,136,136,136,136,136,136,136,136,136,136,136,136,136
5150 DATA 136,136,136,136,136,136,136,136,136,136,136,136,136,139,187,176
5160 DATA 0, 11,187,187,184,136,136,136,136,136,136,136,136,136,136,136
5170 DATA 136,136,136,136,136,136,136,136,136,136,136,139,187,187,176, 0
5180 DATA 0, 0, 0, 11,187,187,187,187,187,187,187,187,187,187,187,187
5190 DATA 187,187,187,187,187,187,187,187,187,187,187,187,176, 0, 0, 0