(Editor’s Note: David has also created a ZX81 version of Tut-Tut which is available from his blog: https://www.zx81keyboardadventure.com/2019/10/zx81-game-tut-tut.html)

It’s coming to the end of 1921’s digging season in Egypt’s Valley of the Kings. Your excavations have not gone so well this year, failing to find any trace of the legendary and as yet undiscovered Pharaohs tombs. Then in your final weeks wild stories recounting the wrath of vengeful mummies strangling local would-be tomb raiders filter back to base camp.

At last some concrete leads worth looking into, and opportunities too good to pass up. Occultist tales of curses be dammed, you’re an Egyptologist and grand adventurer, such nonsense can’t possibly hurt you.

Or can it?

Tut-Tut is one-part puzzle, two parts arcade action game comprising of 15 levels. To complete each level the player will need to collect keys, open doors, move blocks and find exits to lower crypt levels. All this and more while keeping an eye out for Pharaohs roaming guardians.

Keys are: ‘O’ left, ‘P’ right, ‘Q’ up, ‘A’ for down and ‘R’ to reset the level (at a cost). Good luck adventurer.

How it Works

Type in BASIC games have a reputation for being notoriously slow on the ZX Spectrum, even early commercial titles tended to suffer from significant slowdown. With a little creative and careful programming, coders could find numerous ways to overcome the limitations of the system, putting together some surprising examples.

Tut-Tut takes advantage of the Spectrum’s inherent characteristics and some known workarounds dedicating as much processing power to the BASIC gaming experience as possible. Hopefully the end experience is more akin to playing an early machine code Spectrum game rather than a BASIC type in form an 80s magazine.

Can’t wait to play Tut-Tut? Don’t want to type in the listing?

You can download a Spectrum tape image at paleotronic.com/tut-tut.tap but be warned… your trip into the pyramid may already be doomed!

The only way to be sure the game will play fair is to type Tut-Tut in!

Tut-Tut’s BASIC Program Structure

Due to the nature of Sinclair BASIC the order of program flow is of vital importance. To this end variables are defined first, followed directly by the core of the Tut-Tut Game code.

It is important to declare variable at the beginning of a program, as every BASIC reference to variables first checks the initial declaration point in our program. If a variable is declared later in a listing, say at the end, then BASIC will need to read though the entire program before changing or referencing a variables value. Of equal importance is the order of variable declaration. Important and highly used variables are declared first, as these will be at the top of the variable stack. The further down the stack the longer it will take to reference them.

In a similar way to variables, Sinclair BASIC programs generally take longer to process instructions the further down a program listing they are kept. To keep game speeds high Tut-Tut’s main loop is located directly after variable definitions., with the most often accessed in game sub-functions situated directly afterwards. Functions not required for immediate in game purposes, such as the screen setup are located further down the Tut-Tut BASIC listing.

Finally, towards the end of the program listing come the User-defined Graphics and level information, all held in DATA statements.

Maintaining Game Speed

The greatest challenge, after knowing the above is how to keep in game speed as high as possible. There are several methods employed in Tut-Tut.

All instructions are kept as mathematically simple as possible. It takes considerably longer for Sinclair BASIC to process multiplication and division than simple addition or subtractions. Diligent use of mathematical comparisons, for example the use of IF NOT a is equivalent to IF a <> 0 only with the former achieving a significant speed increase.

To be any fun at all games have be responsive to player inputs, in Tut-Tut player interaction and movement is given priority over enemy movements. There are four enemy mummies in the game and these move at half speed of the player character. Functionally the mummies are processed in groups of two, so for every player action only 2 mummies are moved at a time.

One thing affecting game speed more directly are the differences between how enemy and player characters are tracked. Enemy mummies are tracked using their position on the colour attribute layer, while the player characters position is held using x,y screen coordinates. In fact, mummy characters are pre-drawn to the display at level setup time, with their colour attributes set to 0. During game play colour attribute at a mummy’s given position are POKEd on (or off), revealing the movement of the enemy character.

Enemy characters are handled in this fashion as PRINTing directly to the screen at named locations is costly in processor cycles. Poking attributes directly to memory on the other hand is considerably faster, particularly when dealing with four individual enemy character positions. Unfortunately, player character coordinates can’t be tracked in the same manner, the player character must be printed directly to the screen as the mummies need to be removed and printed over for the player graphic to appear. Regardless only having to process one character this way instead of five has much less an impact on game speed.

The ZX Spectrum’s colour attributes are used extensively throughout the game. For example, the exact location of static objects is not actively tracked by positioning variables. The player and mummy characters interact with object colour attribute to determine if there are keys, doors, walls or gold in any character’s path. With player charters relying entirely on an objects colour attributes to ascertain how an object should be used.

Another speed enhancement trick deployed in Tut-Tut is the disabling of the Spectrums keyboard reading routines. Under normal conditions the ZX Spectrum checks for keyboard activity 50 times per second. Switching this behaviour off and checking at specific times during program execution gains us a final speed boost. Line 265 of the program turns of the keyboard reading functions, this is actually a small machine code program held in the printer buffer.

265 POKE 23296,243: POKE 23297,201: RANDOMIZE USR 23296

Certain commands such as BEEP will automatically switch keyboard reading back on after execution, thefore line 265 is always run directly after the playing of end of level tunes or other sound.

One side effect of using the method is that if you SHIFT BREAK to halt the executing program the keyboard will become completely unresponsive. The Spectrum will need to be reset before normal keyboard behaviour is restored. For this reason the line is REMed out in the printed listing of Tut-Tut, you should only enable it once the typed in program is otherwise fully functional and or saved to tape (or disk or flash cart etc).

Level Definitions

Game level data is stored from line 940 onwards. Each level consists of three lines of DATA blocks.

The first line of each level contains the resources to build the playing field of 24×15 character squares. Each line of play is 24 characters long, represented by 8 character digits holding 3 squares of the play field each. These digit values are used to reference STING t$ that contains 8 possible tile variations.

Our second DATA object stores level object placement information. Objects are stored in the following order, 4 keys, 4 monsters, 4×4 colour blocks (16 in total including exits) and finally 4 Gems. Item location is relative to it’s position on the ZX Spectrum’s colour attribute layer. Objects given a 0 value are unused within the described level.

The final DATA block holds the players starting location and level name.

Entering the code into the ZX Spectrum

Typing the listing into the Spectrum is relatively straight forward, but there are a couple things to take note of.

The listing uses ‘\’ notation in PRINT and some STRING functions to denote User Designed Graphic characters. Where characters are slashed enter the appropriate graphic character in accordance with the ZX Spectrum Manual.

As mentioned in the above article, line 265 containing POKE and RANDOMIZE USR 23296 instructions should be REMed out until the game is otherwise working correctly and has been saved. It may then be enabled, be sure to save another copy and then run the game as normal. The game does not require line 265 to execute, and these instructions are used as a final measure to speed up BASIC execution.

10 DEF FN r(a,b)=a-(INT (a/b)*b): DEF FN m(a,b)=INT (a/b)

15 LET v=0: LET c=0: LET b=0: LET z=0: LET y=11: LET x=18: LET q=y: LET w=x

20 DIM m(4): DIM d(4): LET n=0: LET s=0: DIM k(4): LET g=0: LET u=3: LET t=0

25 LET z$=””: LET c$=””: LET t$=”\b\a\b\a\a\a\b\b\b\a\a”

30 GO SUB 640: GO TO 325

35 FOR n=1 TO 25

40 FOR z=1 TO 2

45 IF ATTR (y,x)=71 THEN GO SUB 275: GO SUB 255: GO SUB 225

50 IF INKEY$=”q” THEN LET y=y-1: GO TO 70

55 IF INKEY$=”a” THEN LET y=y+1: GO TO 70

60 IF INKEY$=”o” THEN LET x=x-1: GO TO 70

65 IF INKEY$=”p” THEN LET x=x+1

70 LET c=ATTR (y,x): IF y-q+x-w AND c<>114 THEN GO SUB 180

75 LET y=q: LET x=w

80 FOR v=z TO z+2 STEP 2

85 LET c=m(v)+d(v): IF PEEK c AND PEEK c<>69 THEN GO SUB 125: GO TO 95

90 POKE m(v),0: LET m(v)=c: POKE c,71

95 NEXT v

100 NEXT z

105 IF INKEY$=”r” THEN GO TO 480

110 NEXT n

115 LET s=s+1: POKE 23229-s,16: IF PEEK 23208=16 THEN GO TO 480

120 GO TO 35

125 LET c=y*32+x+22528-m(v): LET b=m(v)

130 IF c>16 AND NOT PEEK (b+32) THEN LET d(v)=32: RETURN

135 IF c>0 AND NOT PEEK (b+1) THEN LET d(v)=1: RETURN

140 IF c<-16 AND NOT PEEK (b-32) THEN LET d(v)=-32: RETURN

145 IF c<0 AND NOT PEEK (b-1) THEN LET d(v)=-1: RETURN

150 LET b=d(v)

155 IF b=1 THEN LET d(v)=-1: RETURN

160 IF b=-1 THEN LET d(v)=-32: RETURN

165 IF b=-32 THEN LET d(v)=32: RETURN

170 LET d(v)=1

175 RETURN

180 IF NOT c THEN GO TO 225

185 IF c=71 THEN GO SUB 275: GO SUB 255: GO TO 225

190 IF c=6 THEN LET g=g+25: GO SUB 255: GO TO 225

195 IF c>64 AND c<69 THEN LET k(c-64)=c: LET g=g+10: GO SUB 250: GO TO 225

200 IF c=16 THEN RETURN

205 IF NOT k(c-120) OR c<120 THEN RETURN

210 IF c=124 THEN LET t=t+1: LET g=g+25*(t+1)-FN r(s*(t+1),5): GO SUB 255: GO SUB 310: GO TO 610

215 LET v=y+(y-q): LET b=x+(x-w): IF ATTR (v,b) THEN RETURN

220 POKE 23693,c: PRINT AT v,b;”\e”

225 POKE 23693,0: LET c=FN r(q+w,2)

230 IF NOT c THEN PRINT AT q,w;”\b”: POKE 23693,69: PRINT AT y,x;”\i”

235 IF c THEN PRINT AT q,w;”\c”: POKE 23693,69: PRINT AT y,x;”\h”

240 LET q=y: LET w=x

245 RETURN

250 LET c=c-64: POKE 23693,k(c)+56: PRINT AT u+17,u+4+c;”\e”: IF c=4 THEN PRINT AT u+17,u+4+c;”\f”

255 IF g<0 THEN LET g=0

260 LET z$=”0”+STR$ g: POKE 23693,69: PRINT AT u+17,u+26-LEN z$;z$: BEEP .005,14

265 POKE 23296,243: POKE 23297,201: RANDOMIZE USR 23296

270 RETURN

275 LET g=g-25: GO SUB 225: OVER 1

280 FOR c=2 TO 5: PRINT AT y,x;”\b”: FOR b=66 TO 70: POKE 23693,c+b: PRINT AT y,x;”\h”: NEXT b: NEXT c

285 OVER 0: PRINT AT y,x;”\h”: GO SUB 225: GO SUB 315

290 RESTORE 940+15*t+10

295 READ z$: LET c=VAL z$: LET x=FN r(c,32)+U+1: LET y=FN m(c,32)+u: LET n=23

300 GO SUB 225

305 RETURN

310 BEEP .25,-2: BEEP .125,8: BEEP .125,5: BEEP .25,5: BEEP .25,-2: BEEP .25,5

315 BEEP .25,-2: BEEP .125,3: BEEP .125,3: BEEP .25,8: BEEP .125,-2: BEEP .125,-2

320 RETURN

325 GO SUB 530

330 FOR b=10 TO 1000

335 FOR z=1 TO 600

340 IF INKEY$<>”” THEN GO SUB 310: GO TO 605

345 IF z=1 THEN GO SUB 410

350 IF z=200 THEN GO SUB 445

355 IF z=400 THEN GO SUB 375

360 NEXT z

365 NEXT b

370 GO TO 605

375 GO SUB 585: POKE 23693,70

380 PRINT AT u+3,u+7;”\m\l\t\p”;TAB 17;”\d 10”

385 PRINT AT u+5,u+7;”G\lM\p”;TAB 17;”\g 25”

390 PRINT AT u+7,u+7;”\lXI\q”;TAB 17;”\f 50”

395 PRINT AT u+9,u+7;”\jI\o”;TAB 20;”*\p”

400 PRINT AT u+11,u+14;”\b -25”

405 RETURN

410 GO SUB 585: POKE 23693,71

415 PRINT AT u+3,u+4;”\kO



\l\k\q”

420 PRINT AT u+5,u+4;”* \m\l\t\p \p

ID\l W\j



\p”

425 PRINT AT u+7,u+4;”* \j



\qH\l G\lM\p”

430 PRINT AT u+9,u+4;”* G\o\l\lN \m\l\t \lXI\q\p”

435 PRINT AT u+11,u+4;”* \jVOID M\sMMI\l\p”

440 RETURN

445 GO SUB 585: POKE 23693,69

450 PRINT AT u+3,u+8;”L\lF\q”;TAB 18;”’O’”

455 PRINT AT u+5,u+8;”\oIGH\q”;TAB 18;”’P’”

460 PRINT AT u+7,u+8;”\sP”;TAB 18;”’Q’”

465 PRINT AT u+9,u+8;”DOWN”;TAB 18;”’A’”

470 PRINT AT u+11,u+8;”\o\l\p\l\q”;TAB 18;”’R’”

475 RETURN

480 GO SUB 585: POKE 23693,69

485 PRINT AT u+6,u+7;”R\l\qR\t

\l\r\l

”

490 PRINT AT u+8,u+5;”(\t)\l\p O\o (N)O”

495 GO SUB 315

500 FOR z=1 TO 2000

505 IF INKEY$=”y” THEN LET g=INT ((g+.1)/2): GO SUB 310: GO TO 615

510 IF INKEY$=”n” THEN LET z=2000

515 NEXT z

520 GO SUB 315

525 GO TO 325

530 POKE 23693,16

535 LET c$=”\m”: FOR z=1 TO 24: LET c$=c$+”\u”: NEXT z: LET c$=c$+”\q”: PRINT AT u-1,u;c$

540 LET z$=””: FOR z=1 TO 24: LET z$=z$+”\a”: NEXT z: FOR v=u TO u+14: PRINT AT v,u;”\u”;z$;”\u”: NEXT v: LET z$=””

545 PRINT AT u+15,u;”\q”;c$(2 TO 25);”\m”: POKE 23693,0: PRINT AT u+16,u+1;c$

550 POKE 23693,71: PRINT AT u-3,u+9;”\q\s\q-\q\s\q”

555 POKE 23693,71: PRINT AT u+17,u;”\m\l\t\p:”;: POKE 23693,0: PRINT ;”\d\d\d\d”;

560 POKE 23693,71: PRINT TAB 17;”\p\kO\o\l:”;: POKE 23693,69: PRINT ;”000000”;

565 FOR z=1 TO 4: POKE 23693,(z): PRINT AT u+17,u+4+z;”\d”: NEXT z

570 GO SUB 255

575 POKE 23693,71: PRINT AT u+18,u;”\jI\o :”;: POKE 23693,114: FOR z=4 TO 24: PRINT ;”\u”;: NEXT z

580 RETURN

585 LET z$=””: POKE 23693,0

590 FOR c=1 TO 20: LET z$=z$+” “: NEXT c

595 FOR v=u+2 TO u+12: PRINT AT v,u+3;z$: NEXT v

600 RETURN

605 LET g=0: LET t=0

610 IF t>14 THEN LET t=1

615 FOR z=1 TO 4: LET k(z)=0: NEXT z: LET s=0

620 GO SUB 530

625 RESTORE 940+15*t

630 GO SUB 690

635 GO TO 35

640 BORDER 0: POKE 23693,0: CLS : RESTORE

645 FOR z=97 TO 117

650 FOR c=0 TO 7: READ z$: POKE USR CHR$ (z)+c,VAL z$: NEXT c

655 NEXT z

660 POKE 23693,70: PRINT AT u+2,u+7;”P\j

\lO\q\oONI\k”;AT u+4,u+9;”P\o\l\p\lN\q\p”

665 POKE 23693,71: PRINT AT u+7,u+9;”\q\s\q-\q\s\q”

670 POKE 23693,69: PRINT AT u+10,u+12;”by”;AT u+12,u+5;”David Stephenson”

675 POKE 23693,7: PRINT AT u+14,u+11;”2019”

680 FOR z=1 TO 150: NEXT z

685 RETURN

690 FOR z=1 TO 15

695 LET c$=””: READ z$

700 FOR c=1 TO LEN z$: LET d=VAL z$(c): LET c$=c$+t$(d TO d+2): NEXT c

705 POKE 23693,114

710 PRINT AT z+u-1,u+1;c$

715 POKE 23693,0

720 FOR v=1 TO LEN c$

725 IF c$(v)=”\b” THEN LET c$(v)=CHR$ (145+FN r(v+z,2)): PRINT AT z+u-1,u+v;c$(v);

730 NEXT v

735 NEXT z

740 POKE 23693,0

745 FOR z=1 TO 8

750 READ z$: LET c=VAL z$

755 IF z<5 AND c THEN LET v=FN r(c,32)+u+1: LET b=FN m(c,32)+u: POKE 23693,z+64: PRINT AT b,v;”\d”

760 IF z>4 THEN LET m(z-4)=VAL z$+22528+u*32+u+1: POKE m(z-4),71

765 NEXT z

770 BRIGHT 1

775 FOR z=1 TO 5

780 FOR b=1 TO 4

785 READ z$: LET c=VAL z$

790 IF c AND z<5 THEN LET v=FN r(c,32)+u+1: LET c=FN m(c,32)+u: PAPER 7: INK z: PRINT AT c,v;”\e”: IF z=4 THEN PRINT AT c,v;”\f”

795 IF c AND z>4 THEN LET v=FN r(c,32)+u+1: LET c=FN m(c,32)+u: POKE 23693,6: PRINT AT c,v;”\g”

800 NEXT b

805 NEXT z

810 READ z$: LET c=VAL z$

815 LET x=FN r(c,32)+u+1: LET y=FN m(c,32)+u: LET q=y: LET w=x: GO SUB 225

820 READ z$

825 POKE 23693,66: PRINT AT u+16,u+12-INT (LEN z$/2);z$

830 RETURN

835 DATA “127”,”65”,”91”,”67”,”109”,”111”,”127”,”0”

840 DATA “24”,”216”,”76”,”62”,”7”,”12”,”20”,”50”

845 DATA “24”,”24”,”18”,”126”,”176”,”24”,”52”,”38”

850 DATA “60”,”36”,”44”,”60”,”24”,”16”,”28”,”28”

855 DATA “127”,”103”,”71”,”107”,”109”,”115”,”127”,”0”

860 DATA “127”,”99”,”93”,”93”,”99”,”65”,”127”,”0”

865 DATA “0”,”0”,”24”,”36”,”86”,”60”,”24”,”0”

870 DATA “24”,”60”,”24”,”72”,”126”,”24”,”44”,”32”

875 DATA “24”,”60”,”24”,”19”,”126”,”24”,”52”,”4”

880 DATA “0”,”8”,”20”,”20”,”36”,”34”,”66”,”78”

885 DATA “0”,”126”,”68”,”64”,”64”,”64”,”70”,”126”

890 DATA “0”,”126”,”68”,”32”,”28”,”32”,”70”,”126”

895 DATA “0”,”78”,”36”,”40”,”48”,”40”,”36”,”66”

900 DATA “64”,”48”,”16”,”16”,”16”,”16”,”48”,”62”

905 DATA “0”,”126”,”66”,”66”,”94”,”80”,”76”,”66”

910 DATA “0”,”126”,”68”,”32”,”16”,”8”,”100”,”126”

915 DATA “0”,”126”,”20”,”16”,”16”,”16”,”48”,”56”

920 DATA “4”,”66”,”68”,”36”,”36”,”40”,”40”,”16”

925 DATA “4”,”66”,”68”,”68”,”68”,”68”,”68”,”124”

930 DATA “4”,”66”,”36”,”24”,”16”,”16”,”48”,”56”

935 DATA “204”,”102”,”51”,”153”,”204”,”102”,”51”,”153”

940 DATA “44444444”,”67777778”,”45444544”,”45444544”,”45444444”,”67777778”,”44444544”,”44444544”,”44444544”,”67777778”,”45444444”,”45444444”,”45444544”,”67777778”,”44444444”

945 DATA “0”,”0”,”0”,”438”,”50”,”167”,”300”,”418”,”0”,”0”,”0”,”0”,”0”,”0”,”0”,”0”,”0”,”0”,”0”,”0”,”33”,”0”,”0”,”0”,”54”,”161”,”310”,”417”

950 DATA “113”,”H\tPOG\l\sM”

955 DATA “44444444”,”44444422”,”44477777”,”43422422”,”67824322”,”44224382”,”44267322”,”47824428”,”44244422”,”44245422”,”43677782”,”43444342”,”43244344”,”47777778”,”44444444”

960 DATA “323”,”374”,”0”,”175”,”79”,”214”,”330”,”424”,”84”,”307”,”0”,”0”,”75”,”170”,”0”,”0”,”0”,”0”,”0”,”0”,”143”,”0”,”0”,”0”,”203”,”205”,”207”,”227”

965 DATA “99”,”\jN\qICH\jMB\lR”

970 DATA “44444444”,”67734444”,”42477778”,”54434443”,”57773443”,”54434443”,”54434443”,”57777873”,”55434443”,”55438444”,”57738442”,”55437778”,”55434442”,”57777778”,”44444444”

975 DATA “74”,”242”,”135”,”418”,”240”,”297”,”354”,”438”,”84”,”213”,”0”,”0”,”136”,”194”,”0”,”0”,”406”,”0”,”0”,”0”,”301”,”0”,”0”,”0”,”300”,”332”,”333”,”364”

980 DATA “68”,”\p\jN\k\q\sM”

985 DATA “44424442”,”68464468”,”24424442”,”26777782”,”24422442”,”26777782”,”24424442”,”24468442”,”24426442”,”24425442”,”24425442”,”24427442”,”68424468”,”56777783”,”44444444”

990 DATA “418”,”51”,”364”,”179”,”22”,”34”,”114”,”165”,”374”,”0”,”0”,”0”,”394”,”0”,”0”,”0”,”74”,”0”,”0”,”0”,”43”,”0”,”0”,”0”,”36”,”100”,”115”,”164”

995 DATA “437”,”\k\jR\qO\s\kH\l”

1000 DATA “44444444”,”67777778”,”24443442”,”24463442”,”24463442”,”24463442”,”25754778”,”25777842”,”67855842”,”24453442”,”24468578”,”24424542”,”24424542”,”67777778”,”44444444”

1005 DATA “300”,”33”,”54”,”200”,”38”,”161”,”423”,”438”,”107”,”229”,”231”,”239”,”139”,”230”,”240”,”331”,”171”,”232”,”238”,”299”,”235”,”237”,”0”,”0”,”76”,”213”,”394”,”417”

1010 DATA “337”,”\kINO\o\qO\lL\jP”

1015 DATA “44247773”,”67773424”,”24444464”,”67774573”,”44264568”,”44254542”,”44677777”,”67723441”,”24465781”,”24461421”,”24441441”,”67781771”,”44443545”,”67777777”,”44444444”

1020 DATA “171”,”234”,”202”,”21”,”44”,”275”,”362”,”438”,”135”,”148”,”266”,”401”,”139”,”177”,”182”,”0”,”83”,”201”,”205”,”0”,”147”,”307”,”0”,”0”,”65”,”204”,”353”,”417”

1025 DATA “236”,”\mH\sF\s\p M\j\pK”

1030 DATA “44444444”,”77777778”,”24535342”,”24628842”,”24677842”,”24743742”,”45186184”,”57777774”,”58622863”,”68222258”,”64822648”,”24322542”,”45322534”,”25422432”,”44444444”

1035 DATA “182”,”172”,”106”,”161”,”33”,”54”,”426”,”429”,”140”,”143”,”0”,”0”,”136”,”235”,”0”,”0”,”36”,”227”,”259”,”291”,”353”,”417”,”438”,”0”,”48”,”137”,”421”,”434”

1040 DATA “374”,”\jN \jT\q\lN”

1045 DATA “44444444”,”67744474”,”24644414”,”24634414”,”87777714”,”88344454”,”82344454”,”46777778”,”54442252”,”57732252”,”52442242”,”67778242”,”54442242”,”57177778”,”44444444”

1050 DATA “135”,”137”,”364”,”163”,”52”,”228”,”418”,”424”,”65”,”103”,”269”,”324”,”105”,”322”,”355”,”397”,”104”,”133”,”136”,”196”,”97”,”297”,”0”,”0”,”33”,”34”,”131”,”246”

1055 DATA “336”,”\k\jRN\jRVON!”

1060 DATA “44444444”,”67744444”,”42554578”,”46573442”,”42443442”,”67777342”,”24441578”,”24441544”,”24441543”,”27781573”,”23421443”,”28787443”,”23421443”,”68421773”,”44444444”

1065 DATA “75”,”417”,”81”,”360”,”33”,”82”,”170”,”426”,”171”,”0”,”0”,”0”,”341”,”0”,”0”,”0”,”418”,”0”,”0”,”0”,”358”,”0”,”0”,”0”,”173”,”359”,”365”,”0”

1070 DATA “101”,”\q\j

\j\q\j\q”

1075 DATA “45444444”,”57777773”,”55444443”,”55447773”,”57733443”,”44443543”,”27777713”,”22441443”,”26476773”,”62435443”,”52434443”,”52477773”,”68434443”,”46777778”,”44434443”

1080 DATA “137”,”356”,”273”,”438”,”36”,”199”,”257”,”431”,”69”,”238”,”276”,”387”,”393”,”437”,”0”,”0”,”203”,”388”,”0”,”0”,”193”,”0”,”0”,”0”,”101”,”367”,”420”,”424”

1085 DATA “212”,”\p\q\l

\l”

1090 DATA “78677844”,”14244242”,”77877778”,”12434442”,”12234678”,”12273242”,”12257242”,”18262222”,”12222678”,”12222222”,”12226678”,”77724442”,”52477778”,”62444244”,”56777844”

1095 DATA “273”,”135”,”4”,”417”,”224”,”240”,”263”,”456”,”118”,”203”,”307”,”357”,”66”,”170”,”276”,”399”,”204”,”274”,”354”,”355”,”243”,”334”,”0”,”0”,”65”,”269”,”301”,”333”

1100 DATA “277”,”\q\jIN\p”

1105 DATA “44454444”,”57777778”,”45552242”,”57572272”,”41456812”,”61264412”,”25777776”,”24273252”,”24254258”,”68267852”,”42254242”,”22277268”,”22234222”,”26877778”,”44444444”

1110 DATA “34”,”425”,”203”,”308”,”35”,”211”,”421”,”438”,”107”,”267”,”277”,”393”,”100”,”165”,”200”,”231”,”205”,”240”,”336”,”0”,”353”,”366”,”385”,”417”,”54”,”193”,”373”,”403”

1115 DATA “112”,”\p\jQQ\j\o\j”

1120 DATA “44444544”,”77777778”,”22443442”,”22543442”,”22543442”,”22547782”,”22543432”,”22543432”,”24543432”,”67733432”,”24443432”,”27733432”,”24433242”,”67787778”,”44444444”

1125 DATA “400”,”370”,”228”,”104”,”39”,”178”,”296”,”436”,”173”,”0”,”0”,”0”,”43”,”0”,”0”,”0”,”290”,”418”,”0”,”0”,”426”,”0”,”0”,”0”,”136”,”168”,”355”,”356”

1130 DATA “17”,”W\l



OF O\pI\oI\p”

1135 DATA “44444444”,”57177778”,”54442242”,”67778242”,”52442242”,”57732252”,”54442252”,”46777778”,”82344454”,”88344454”,”87777714”,”24634414”,”24644414”,”67744474”,”44444444”

1140 DATA “327”,”329”,”108”,”291”,”34”,”40”,”228”,”436”,”132”,”205”,”359”,”385”,”77”,”99”,”130”,”361”,”260”,”325”,”328”,”360”,”169”,”353”,”0”,”0”,”246”,”323”,”417”,”418”

1145 DATA “144”,”\pH\jB\qI”

1150 DATA “44544442”,”47777678”,”63445312”,”25424778”,”85863354”,”24813718”,”63243354”,”47777354”,”45424778”,”45424344”,”46484444”,”45467778”,”55544442”,”67777778”,”44444434”

1155 DATA “392”,”101”,”106”,”386”,”51”,”128”,”175”,”430”,”115”,”199”,”230”,”233”,”204”,”207”,”235”,”238”,”82”,”86”,”116”,”420”,”48”,”169”,”0”,”0”,”134”,”139”,”212”,”389”

1160 DATA “8”,”\l\t\l OF \p\s\q\l\mH”

1165 CLEAR : SAVE “tut-tut” LINE 10