WACCI Programmers Patch (UK) (Face A) (1999) [COMPILATION].dsk
HexaDumpAscii only
000000:  45 58 54 45 4E 44 45 44 20 43 50 43 20 44 53 4B    EXTENDED CPC DSK
000010:  20 46 69 6C 65 0D 0A 44 69 73 6B 2D 49 6E 66 6F     File..Disk-Info
000020:  0D 0A 53 41 4D 64 69 73 6B 31 34 31 32 30 38 00    ..SAMdisk141208.
000030:  28 01 00 00 13 13 13 13 13 13 13 13 13 13 13 13    (...............
000040:  13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13    ................
000050:  13 13 13 13 13 13 13 13 13 13 13 13 00 00 00 00    ................
000060:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000070:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000080:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000090:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0000A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0000B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0000C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0000D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0000E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0000F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000100:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
000110:  00 00 01 00 02 09 4E E5 00 00 C1 02 00 00 00 02    ......N.........
000120:  00 00 C6 02 00 00 00 02 00 00 C2 02 00 00 00 02    ................
000130:  00 00 C7 02 00 00 00 02 00 00 C3 02 00 00 00 02    ................
000140:  00 00 C8 02 00 00 00 02 00 00 C4 02 00 00 00 02    ................
000150:  00 00 C9 02 00 00 00 02 00 00 C5 02 00 00 00 02    ................
000160:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000170:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000180:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000190:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0001A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0001B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0001C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0001D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0001E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0001F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000200:  00 44 49 53 43 20 20 20 20 42 41 53 00 00 00 02    .DISC    BAS....
000210:  02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000220:  00 4C 49 4E 4B 42 41 53 45 54 58 54 00 00 00 0D    .LINKBASETXT....
000230:  03 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000240:  00 4C 4F 4F 4D 20 20 20 20 42 49 4E 00 00 00 74    .LOOM    BIN...t
000250:  05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 00    ................
000260:  00 4D 45 53 53 41 47 45 53 54 58 54 00 00 00 06    .MESSAGESTXT....
000270:  15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000280:  00 52 45 41 44 4D 45 20 20 20 20 20 00 00 00 23    .README     ...#
000290:  16 17 18 19 AF 00 00 00 00 00 00 00 00 00 00 00    ................
0002A0:  00 41 30 31 20 20 20 20 20 20 20 20 00 00 00 4D    .A01        ...M
0002B0:  1A 1B 1C 1D 1E 1F 20 21 22 23 00 00 00 00 00 00    ...... !"#......
0002C0:  00 41 30 32 20 20 20 20 20 20 20 20 00 00 00 4F    .A02        ...O
0002D0:  24 25 26 27 28 29 2A 2B 2C 2D 00 00 00 00 00 00    $%&'()*+,-......
0002E0:  00 41 30 33 20 20 20 20 20 20 20 20 00 00 00 57    .A03        ...W
0002F0:  2E 2F 30 31 32 33 34 35 36 37 38 00 00 00 00 00    ./012345678.....
000300:  00 41 30 34 20 20 20 20 20 20 20 20 00 00 00 54    .A04        ...T
000310:  39 3A 3B 3C 3D 3E 3F 40 41 42 43 00 00 00 00 00    9:;<=>?@ABC.....
000320:  00 41 30 35 20 20 20 20 20 20 20 20 00 00 00 63    .A05        ...c
000330:  44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 00 00 00    DEFGHIJKLMNOP...
000340:  00 41 30 36 20 20 20 20 20 20 20 20 00 00 00 4F    .A06        ...O
000350:  51 52 53 54 55 56 57 58 59 5A 00 00 00 00 00 00    QRSTUVWXYZ......
000360:  00 41 30 37 20 20 20 20 20 20 20 20 00 00 00 51    .A07        ...Q
000370:  5B 5C 5D 5E 5F 60 61 62 63 64 65 00 00 00 00 00    [\]^_`abcde.....
000380:  00 41 30 38 20 20 20 20 20 20 20 20 00 00 00 58    .A08        ...X
000390:  66 67 68 69 6A 6B 6C 6D 6E 6F 70 00 00 00 00 00    fghijklmnop.....
0003A0:  00 41 30 39 20 20 20 20 20 20 20 20 00 00 00 5F    .A09        ..._
0003B0:  71 72 73 74 75 76 77 78 79 7A 7B 7C 00 00 00 00    qrstuvwxyz{|....
0003C0:  00 44 49 53 43 4D 45 4E 55 42 41 53 00 00 00 08    .DISCMENUBAS....
0003D0:  7D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    }...............
0003E0:  00 46 49 47 31 36 31 20 20 20 20 20 00 00 00 06    .FIG161     ....
0003F0:  7E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ~...............
000400:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000410:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000420:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000430:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000440:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000450:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000460:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000470:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000480:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000490:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0004A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0004B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0004C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0004D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0004E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0004F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000500:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000510:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000520:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000530:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000540:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000550:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000560:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000570:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000580:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000590:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0005A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0005B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0005C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0005D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0005E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0005F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000600:  00 46 49 47 31 36 31 38 20 20 20 20 00 00 00 05    .FIG1618    ....
000610:  7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000620:  00 46 49 47 32 20 20 20 20 20 20 20 00 00 00 02    .FIG2       ....
000630:  80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000640:  00 46 49 47 32 37 20 20 20 20 20 20 00 00 00 03    .FIG27      ....
000650:  81 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000660:  00 46 49 47 32 37 31 20 20 20 20 20 00 00 00 03    .FIG271     ....
000670:  82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000680:  00 46 49 47 32 37 31 38 20 20 20 20 00 00 00 03    .FIG2718    ....
000690:  83 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0006A0:  00 48 45 4C 50 20 20 20 20 54 58 54 00 00 00 0A    .HELP    TXT....
0006B0:  84 85 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0006C0:  00 4D 45 4E 55 45 58 31 20 42 41 53 00 00 00 08    .MENUEX1 BAS....
0006D0:  86 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0006E0:  00 4D 45 4E 55 45 58 32 20 42 41 53 00 00 00 0A    .MENUEX2 BAS....
0006F0:  87 88 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000700:  00 4D 45 4E 55 45 58 33 20 42 41 53 00 00 00 0B    .MENUEX3 BAS....
000710:  89 8A 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000720:  00 4D 45 4E 55 45 58 34 20 42 41 53 00 00 00 0C    .MENUEX4 BAS....
000730:  8B 8C 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000740:  00 4D 45 4E 55 53 55 42 20 20 20 20 00 00 00 05    .MENUSUB    ....
000750:  8D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000760:  00 50 45 4C 4D 41 4E 20 20 42 41 53 00 00 00 18    .PELMAN  BAS....
000770:  8E 8F 90 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000780:  00 42 53 49 44 45 20 20 20 42 41 53 00 00 00 0B    .BSIDE   BAS....
000790:  91 92 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0007A0:  00 42 53 49 44 45 20 20 20 42 49 4E 00 00 00 07    .BSIDE   BIN....
0007B0:  93 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0007C0:  00 41 31 30 20 20 20 20 20 20 20 20 00 00 00 54    .A10        ...T
0007D0:  94 95 96 97 98 99 9A 9B 9C 9D 9E 00 00 00 00 00    ................
0007E0:  00 41 31 31 20 20 20 20 20 20 20 20 00 00 00 5E    .A11        ...^
0007F0:  9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA 00 00 00 00    ....£...........
000800:  46 20 72 65 61 64 6D 65 0D 0A 42 20 72 65 61 64    F readme..B read
000810:  6D 65 20 31 33 36 20 31 34 34 20 72 65 61 64 6D    me 136 144 readm
000820:  65 20 34 34 34 36 0D 0A 42 20 72 65 61 64 6D 65    e 4446..B readme
000830:  20 31 30 32 39 20 31 30 33 37 20 61 30 31 20 30     1029 1037 a01 0
000840:  0D 0A 42 20 72 65 61 64 6D 65 20 31 30 36 36 20    ..B readme 1066 
000850:  31 30 37 34 20 61 30 32 20 30 0D 0A 42 20 72 65    1074 a02 0..B re
000860:  61 64 6D 65 20 31 31 32 35 20 31 31 33 33 20 61    adme 1125 1133 a
000870:  30 33 20 30 0D 0A 42 20 72 65 61 64 6D 65 20 31    03 0..B readme 1
000880:  31 39 37 20 31 32 30 35 20 61 30 34 20 30 0D 0A    197 1205 a04 0..
000890:  42 20 72 65 61 64 6D 65 20 31 32 36 30 20 31 32    B readme 1260 12
0008A0:  36 38 20 61 30 35 20 30 0D 0A 42 20 72 65 61 64    68 a05 0..B read
0008B0:  6D 65 20 31 33 30 36 20 31 33 31 34 20 61 30 36    me 1306 1314 a06
0008C0:  20 30 0D 0A 42 20 72 65 61 64 6D 65 20 31 33 35     0..B readme 135
0008D0:  33 20 31 33 36 31 20 61 30 37 20 30 0D 0A 42 20    3 1361 a07 0..B 
0008E0:  72 65 61 64 6D 65 20 31 34 31 35 20 31 34 32 33    readme 1415 1423
0008F0:  20 61 30 38 20 30 0D 0A 42 20 72 65 61 64 6D 65     a08 0..B readme
000900:  20 31 34 36 30 20 31 34 36 38 20 61 30 39 20 30     1460 1468 a09 0
000910:  0D 0A 42 20 72 65 61 64 6D 65 20 31 34 38 35 20    ..B readme 1485 
000920:  31 34 39 34 20 61 31 30 20 30 0D 0A 42 20 72 65    1494 a10 0..B re
000930:  61 64 6D 65 20 31 35 32 37 20 31 35 33 36 20 61    adme 1527 1536 a
000940:  31 31 20 30 0D 0A 42 20 72 65 61 64 6D 65 20 31    11 0..B readme 1
000950:  36 34 31 20 31 36 35 30 20 61 31 32 20 30 0D 0A    641 1650 a12 0..
000960:  42 20 72 65 61 64 6D 65 20 31 37 30 36 20 31 37    B readme 1706 17
000970:  31 35 20 61 31 33 20 30 0D 0A 42 20 72 65 61 64    15 a13 0..B read
000980:  6D 65 20 31 37 37 39 20 31 37 38 38 20 61 31 34    me 1779 1788 a14
000990:  20 30 0D 0A 42 20 72 65 61 64 6D 65 20 31 38 35     0..B readme 185
0009A0:  36 20 31 38 36 35 20 61 31 35 20 30 0D 0A 42 20    6 1865 a15 0..B 
0009B0:  72 65 61 64 6D 65 20 31 39 31 36 20 31 39 32 35    readme 1916 1925
0009C0:  20 61 31 36 20 30 0D 0A 42 20 72 65 61 64 6D 65     a16 0..B readme
0009D0:  20 31 39 38 33 20 31 39 39 32 20 61 31 37 20 30     1983 1992 a17 0
0009E0:  0D 0A 42 20 72 65 61 64 6D 65 20 32 30 34 30 20    ..B readme 2040 
0009F0:  32 30 34 39 20 61 31 38 20 30 0D 0A 42 20 72 65    2049 a18 0..B re
000A00:  00 53 45 4E 44 20 20 20 20 41 53 4D 00 00 00 0C    .SEND    ASM....
000A10:  AB AC 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000A20:  00 4D 49 44 49 31 20 20 20 42 41 53 00 00 00 04    .MIDI1   BAS....
000A30:  AD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000A40:  00 53 45 4E 44 20 20 20 20 42 41 53 00 00 00 08    .SEND    BAS....
000A50:  AE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000A60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000A90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000AA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000AB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000AC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000AD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000AE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000AF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000B90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000BA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000BB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000BC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000BD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000BE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000BF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000C00:  61 64 6D 65 20 32 31 30 37 20 32 31 31 36 20 61    adme 2107 2116 a
000C10:  31 39 20 30 0D 0A 42 20 72 65 61 64 6D 65 20 32    19 0..B readme 2
000C20:  31 36 34 20 32 31 37 33 20 61 32 30 20 30 0D 0A    164 2173 a20 0..
000C30:  42 20 72 65 61 64 6D 65 20 32 32 32 32 20 32 32    B readme 2222 22
000C40:  33 31 20 61 32 31 20 30 0D 0A 42 20 61 30 31 20    31 a21 0..B a01 
000C50:  39 32 36 20 39 33 33 20 61 30 31 20 38 35 31 39    926 933 a01 8519
000C60:  0D 0A 42 20 61 30 32 20 38 39 31 20 39 30 31 20    ..B a02 891 901 
000C70:  61 30 32 20 38 32 38 39 0D 0A 42 20 61 30 32 20    a02 8289..B a02 
000C80:  33 30 31 30 20 33 30 32 31 20 61 30 32 20 39 30    3010 3021 a02 90
000C90:  34 39 0D 0A 42 20 61 30 33 20 31 37 39 31 20 31    49..B a03 1791 1
000CA0:  37 39 38 20 61 30 33 20 39 34 34 30 0D 0A 42 20    798 a03 9440..B 
000CB0:  61 30 33 20 33 35 39 38 20 33 36 30 37 20 61 30    a03 3598 3607 a0
000CC0:  33 20 39 38 34 35 0D 0A 42 20 61 30 33 20 38 38    3 9845..B a03 88
000CD0:  30 38 20 38 38 31 38 20 61 30 33 20 31 30 33 32    08 8818 a03 1032
000CE0:  34 0D 0A 42 20 61 30 34 20 35 32 37 20 35 33 38    4..B a04 527 538
000CF0:  20 61 30 34 20 38 30 31 31 0D 0A 42 20 61 30 34     a04 8011..B a04
000D00:  20 34 37 34 34 20 34 37 35 35 20 61 30 34 20 38     4744 4755 a04 8
000D10:  35 34 33 0D 0A 42 20 61 30 34 20 34 37 37 34 20    543..B a04 4774 
000D20:  34 37 38 37 20 61 30 34 20 31 30 31 30 34 0D 0A    4787 a04 10104..
000D30:  42 20 61 30 35 20 36 33 36 20 36 34 33 20 61 30    B a05 636 643 a0
000D40:  35 20 31 31 31 37 38 0D 0A 42 20 61 30 36 20 31    5 11178..B a06 1
000D50:  31 35 31 20 31 31 35 39 20 61 30 36 20 38 38 37    151 1159 a06 887
000D60:  39 0D 0A 42 20 61 30 36 20 32 39 39 33 20 32 39    9..B a06 2993 29
000D70:  39 37 20 61 30 36 20 38 30 39 38 0D 0A 42 20 61    97 a06 8098..B a
000D80:  30 36 20 33 30 30 32 20 33 30 30 32 20 61 30 36    06 3002 3002 a06
000D90:  20 38 30 39 38 0D 0A 42 20 61 30 37 20 33 35 31     8098..B a07 351
000DA0:  20 33 35 39 20 61 30 37 20 37 38 33 39 0D 0A 42     359 a07 7839..B
000DB0:  20 61 30 37 20 32 31 38 34 20 32 31 39 32 20 61     a07 2184 2192 a
000DC0:  30 37 20 37 38 33 39 0D 0A 42 20 61 30 37 20 34    07 7839..B a07 4
000DD0:  32 31 34 20 34 32 32 32 20 61 30 37 20 39 31 33    214 4222 a07 913
000DE0:  30 0D 0A 42 20 61 30 38 20 35 34 39 20 35 35 36    0..B a08 549 556
000DF0:  20 61 30 38 20 31 30 33 33 33 0D 0A 42 20 61 30     a08 10333..B a0
000E00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000E10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000E20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000E30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000E40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000E50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000E60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000E70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000E80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000E90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000EA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000EB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000EC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000ED0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000EE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000EF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000F00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000F10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000F20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000F30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000F40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000F50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000F60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000F70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000F80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000F90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000FA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000FB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000FC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000FD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000FE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
000FF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
001000:  38 20 36 31 34 20 36 31 38 20 61 30 38 20 39 34    8 614 618 a08 94
001010:  33 31 0D 0A 42 20 61 30 39 20 35 39 36 20 36 32    31..B a09 596 62
001020:  31 20 61 30 39 20 38 34 37 33 0D 0A 42 20 61 31    1 a09 8473..B a1
001030:  30 20 34 38 35 32 20 34 38 35 38 20 61 31 30 20    0 4852 4858 a10 
001040:  39 38 32 38 0D 0A 42 20 61 31 30 20 39 32 38 32    9828..B a10 9282
001050:  20 39 32 39 34 20 61 31 30 20 31 30 31 30 31 0D     9294 a10 10101.
001060:  0A 42 20 61 31 31 20 34 35 31 20 34 35 39 20 61    .B a11 451 459 a
001070:  31 31 20 38 31 33 31 0D 0A 42 20 61 31 31 20 35    11 8131..B a11 5
001080:  33 32 20 35 34 30 20 61 31 31 20 39 30 37 39 0D    32 540 a11 9079.
001090:  0A 42 20 61 31 32 20 33 38 31 30 20 33 38 31 38    .B a12 3810 3818
0010A0:  20 61 31 32 20 31 30 35 31 31 0D 0A 42 20 61 31     a12 10511..B a1
0010B0:  32 20 38 34 35 34 20 38 34 36 30 20 61 31 32 20    2 8454 8460 a12 
0010C0:  31 31 37 36 38 0D 0A 42 20 61 31 33 20 32 30 37    11768..B a13 207
0010D0:  35 20 32 30 38 33 20 61 31 33 20 36 33 30 32 0D    5 2083 a13 6302.
0010E0:  0A 42 20 61 31 33 20 32 38 30 34 20 32 38 31 31    .B a13 2804 2811
0010F0:  20 61 31 33 20 35 39 37 31 0D 0A 42 20 61 31 34     a13 5971..B a14
001100:  20 31 33 36 34 20 31 33 37 30 20 61 31 34 74 31     1364 1370 a14t1
001110:  20 30 0D 0A 42 20 61 31 35 20 35 30 32 37 20 35     0..B a15 5027 5
001120:  30 33 35 20 34 36 34 72 73 78 2E 62 61 73 20 30    035 464rsx.bas 0
001130:  0D 0A 42 20 61 31 36 20 35 34 33 20 35 34 39 20    ..B a16 543 549 
001140:  61 69 31 2E 62 61 73 20 30 0D 0A 42 20 61 31 36    ai1.bas 0..B a16
001150:  20 39 35 32 20 39 35 39 20 61 31 36 20 31 30 35     952 959 a16 105
001160:  31 34 0D 0A 42 20 61 31 36 20 31 30 34 34 34 20    14..B a16 10444 
001170:  31 30 34 36 34 20 61 31 36 61 20 30 0D 0A 42 20    10464 a16a 0..B 
001180:  61 31 36 61 20 34 36 39 20 34 37 35 20 61 69 32    a16a 469 475 ai2
001190:  2E 62 61 73 20 30 0D 0A 42 20 61 31 37 20 33 37    .bas 0..B a17 37
0011A0:  30 39 20 33 37 31 36 20 61 31 37 20 31 30 39 30    09 3716 a17 1090
0011B0:  35 0D 0A 42 20 61 31 37 20 35 30 31 31 20 35 30    5..B a17 5011 50
0011C0:  31 38 20 61 31 37 20 31 31 35 39 34 0D 0A 42 20    18 a17 11594..B 
0011D0:  61 32 31 20 34 33 32 32 20 34 33 32 38 20 61 69    a21 4322 4328 ai
0011E0:  36 2E 6C 6F 67 20 30 0D 0A 42 20 61 32 31 20 34    6.log 0..B a21 4
0011F0:  33 33 34 20 34 33 34 34 20 36 34 6B 62 69 74 73    334 4344 64kbits
001200:  00 44 49 53 43 20 20 20 20 42 41 53 00 00 00 00    .DISC    BAS....
001210:  00 00 00 00 00 70 01 00 2A 00 00 00 00 00 00 00    .....p..*.......
001220:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
001230:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
001240:  2A 00 00 3E 03 28 00 0A 00 BE 20 1C 00 BF 2C FF    *..>.(.... ...,.
001250:  12 28 1C 00 A7 29 01 BE 20 1C 01 BF 2C 1C C7 00    .(...).. ...,...
001260:  01 CA 22 6C 6F 6F 6D 2E 62 69 6E 22 00 00 00 1A    .."loom.bin"....
001270:  65 73 74 20 74 68 65 20 6D 61 63 68 69 6E 65 20    est the machine 
001280:  28 00 0A 00 BE 20 1C 00 BF 2C FF 12 28 1C 00 A7    (.... ...,..(...
001290:  29 01 BE 20 1C 01 BF 2C 1C C7 00 01 CA 22 6C 6F    ).. ...,....."lo
0012A0:  6F 6D 2E 62 69 6E 22 00 00 00 1A 65 73 74 20 74    om.bin"....est t
0012B0:  68 65 20 6D 61 63 68 69 6E 65 20 75 70 6F 6E 20    he machine upon 
0012C0:  65 78 69 74 3A 00 27 00 14 00 BE 20 1C 00 BF 2C    exit:.'.... ...,
0012D0:  FF 12 28 1C 00 A7 29 01 BE 20 1C 01 BF 2C 1C C7    ..(...).. ...,..
0012E0:  00 01 CA 22 6C 6C 6C 2E 62 69 6E 22 00 00 00 1A    ..."lll.bin"....
0012F0:  61 70 74 65 64 20 66 72 6F 6D 20 22 4C 65 61 72    apted from "Lear
001300:  30 20 54 48 45 4E 20 33 35 30 30 20 45 4C 53 45    0 THEN 3500 ELSE
001310:  20 34 30 30 30 0D 0A 20 20 20 34 35 33 30 20 52     4000..   4530 R
001320:  45 54 55 52 4E 0D 0A 1A 69 6C 6C 69 70 73 0D 0A    ETURN...illips..
001330:  0D 0A 20 20 20 59 65 73 2C 20 74 68 69 73 20 6D    ..   Yes, this m
001340:  6F 6E 74 68 20 74 68 65 20 70 72 6F 6F 66 72 65    onth the proofre
001350:  61 64 65 72 20 67 65 74 73 20 61 20 20 67 6F 20    ader gets a  go 
001360:  20 61 74 20 77 72 69 74 69 6E 67 20 61 6E 20 61     at writing an a
001370:  72 74 69 63 6C 65 2C 20 74 6F 20 67 69 76 65 0D    rticle, to give.
001380:  20 4D 49 44 24 28 63 61 72 64 24 2C 63 61 72 64     MID$(card$,card
001390:  2C 31 29 3B 0D 0A 20 20 20 20 20 20 20 20 43 48    ,1);..        CH
0013A0:  52 24 28 32 32 36 2B 73 75 69 74 29 3A 52 45 54    R$(226+suit):RET
0013B0:  55 52 4E 0D 0A 20 20 20 33 35 30 30 20 4C 4F 43    URN..   3500 LOC
0013C0:  41 54 45 20 63 6F 6C 2A 33 2B 32 2C 72 6F 77 2A    ATE col*3+2,row*
0013D0:  32 2B 32 3A 50 41 50 45 52 20 30 3A 50 45 4E 20    2+2:PAPER 0:PEN 
0013E0:  31 3A 50 52 49 4E 54 20 43 48 52 24 28 32 32 30    1:PRINT CHR$(220
0013F0:  29 43 48 52 24 28 32 32 32 29 3A 52 45 54 55 52    )CHR$(222):RETUR
001400:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
001410:  01 00 01 00 02 09 4E E5 01 00 C4 02 00 00 00 02    ......N.........
001420:  01 00 C9 02 00 00 00 02 01 00 C5 02 00 00 00 02    ................
001430:  01 00 C1 02 00 00 00 02 01 00 C6 02 00 00 00 02    ................
001440:  01 00 C2 02 00 00 00 02 01 00 C7 02 00 00 00 02    ................
001450:  01 00 C3 02 00 00 00 02 01 00 C8 02 00 00 00 02    ................
001460:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
001470:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
001480:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
001490:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0014A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0014B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0014C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0014D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0014E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0014F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
001500:  00 18 0E CD C2 02 E5 AF 11 FF FF 13 BE 23 20 FB    .............# .
001510:  E1 F1 E5 FE 73 20 13 3A 72 08 B7 28 0D D5 2A 70    ....s .:r..(..*p
001520:  08 E5 CD B0 01 E1 D1 30 01 EB 2A 73 08 2B B7 ED    .......0..*s.+..
001530:  52 23 F2 F8 03 21 00 00 44 4D AF 2A 6E 08 B5 C4    R#...!..DM.*n...
001540:  1E 04 E1 7B B2 28 08 1B 7E 23 CD 7E 08 18 F4 2A    ...{.(..~#.~...*
001550:  6E 08 B5 CC 1E 04 D1 E1 E1 2B 2B E5 18 95 78 B1    n........++...x.
001560:  C8 7C CD 7E 08 0B 18 F6 22 7F 08 D1 F1 E1 E5 F5    .|.~....".......
001570:  39 D5 5E 23 56 ED 53 81 08 2B 2B 2B C9 1A FE 61    9.^#V.S..+++...a
001580:  30 02 C6 20 FE 6C 20 01 13 C1 F1 E1 E5 F5 1A FE    0.. .l .........
001590:  61 30 02 C6 20 13 D5 C5 56 2B 5E 01 0A 00 C9 E5    a0.. ...V+^.....
0015A0:  2A 81 08 7E 23 22 81 08 E1 C9 E5 D5 C5 2A 81 08    *..~#".......*..
0015B0:  E5 CD 49 00 7D C1 D1 E1 C9 E5 2A 81 08 2B 77 22    ..I.}.....*..+w"
0015C0:  81 08 E1 C9 E5 D5 C5 6F 26 00 E5 2A 81 08 E5 CD    .......o&..*....
0015D0:  6A 00 C1 D1 E1 C9 21 5F 04 11 79 04 18 06 21 6A    j.....!_..y...!j
0015E0:  04 11 84 04 ED 53 7C 08 CD 28 04 18 17 21 6A 04    .....S|..(...!j.
0015F0:  22 7F 08 21 84 04 22 7C 08 21 00 00 22 81 08 D1    "..!.."|.!.."...
001600:  E1 E5 D5 39 C5 5E 23 56 2B 2B E5 3E C3 32 7E 08    ...9.^#V++.>.2~.
001610:  32 7B 08 21 00 00 22 6E 08 1A 13 B7 28 2F CD F6    2{.!.."n....(/..
001620:  01 20 0D CD 7E 08 CD F6 01 28 F8 CD 7B 08 18 E9    . ..~....(..{...
001630:  FE 25 28 27 6F CD 7E 08 BD 28 DE FE FF 20 0B ED    .%('o.~..(... ..
001640:  5B 6E 08 7A B3 20 0A 1B 18 07 CD 7B 08 ED 5B 6E    [n.z. .....{..[n
001650:  08 E1 C1 E1 E3 39 F1 F9 F5 EB C9 D5 21 FF FF 1A    .....9......!...
001660:  D6 2A 32 70 08 20 01 13 1A CD 88 00 DC A9 02 22    .*2p. ........."
001670:  71 08 CD 3D 04 FE 68 28 2F FE 64 28 2B 0B 0B FE    q..=..h(/.d(+...
001680:  6F 28 25 FE 78 28 0C FE 63 28 65 FE 73 28 6F D1    o(%.x(..c(e.s(o.
001690:  D1 18 BA CD 7E 08 FE 30 20 09 CD 7E 08 FE 78 28    ....~..0 ..~..x(
0016A0:  05 FE 58 C4 7B 08 CB 21 F5 D5 50 59 60 68 ED 4B    ..X.{..!..PY`h.K
0016B0:  71 08 78 B1 28 27 0B CD 7E 08 F5 D6 30 38 1A FE    q.x.('..~...08..
0016C0:  0A 38 0B D6 11 38 12 E6 1F C6 0A BB 30 0B C5 4F    .8...8......0..O
0016D0:  42 CD 1D 01 09 C1 F1 18 D9 F1 CD 7B 08 D1 C1 3A    B..........{...:
0016E0:  70 08 B7 28 4D EB 73 3E 68 B8 28 36 23 72 18 32    p..(M.s>h.(6#r.2
0016F0:  CD 7E 08 6F 3A 70 08 B7 28 38 7D 12 18 24 ED 4B    .~.o:p..(8}..$.K
001700:  04 00 DD E5 C1 09 01 01 00 CD 72 02 18 83 DD 6E    ..........r....n
001710:  06 DD 66 07 6E 26 00 E5 CD 0B 02 E5 DD 6E 04 DD    ..f.n&.......n..
001720:  66 05 6E 26 00 E5 CD 0B 02 EB E1 B7 ED 52 18 AB    f.n&.........R..
001730:  18 A9 21 00 00 CD 8F 00 DD 6E 04 DD 66 05 22 EE    ..!......n..f.".
001740:  A1 2A EE A1 CD D4 BC AF CD 1B 00 11 02 00 C3 C4    .*..............
001750:  00 21 00 00 CD 8F 00 DD 6E 04 DD 66 05 22 EE A1    .!......n..f."..
001760:  2A EE A1 7E CD 2B BD 38 08 21 EE A1 36 00 23 36    *..~.+.8.!..6.#6
001770:  00 2A EE A1 11 02 00 C3 C4 00 18 F8 21 00 00 CD    .*..........!...
001780:  8F 00 DD 6E 08 DD 66 09 22 D5 63 21 06 00 DD E5    ...n..f.".c!....
001790:  C1 09 01 FF FF CD 72 02 11 00 00 CD 98 01 7D B4    ......r.......}.
0017A0:  CA 7D 0E DD 6E 04 DD 66 05 E5 CD 49 00 22 D7 63    .}..n..f...I.".c
0017B0:  11 FF 00 CD 91 01 7D B4 28 03 21 01 00 7D B4 CA    ......}.(.!..}..
0017C0:  92 0E 2A D7 63 11 0D 00 CD 91 01 7D B4 28 03 21    ..*.c......}.(.!
0017D0:  01 00 7D B4 CA AB 0E 21 D5 63 01 01 00 CD 7D 02    ..}....!.c....}.
0017E0:  E5 2A D7 63 D1 7D 12 26 00 18 A0 2A D5 63 E5 21    .*.c.}.&...*.c.!
0017F0:  00 00 D1 7D 12 26 00 2A D7 63 11 0D 00 CD 88 01    ...}.&.*.c......
001800:  7D B4 CA D2 0E DD 6E 04 DD 66 05 E5 CD 49 00 22    }.....n..f...I."
001810:  D7 63 2A D7 63 11 FF 00 CD 88 01 7D B4 CA F4 0E    .c*.c......}....
001820:  DD 6E 08 DD 66 09 EB 2A D5 63 CD 88 01 7D B4 28    .n..f..*.c...}.(
001830:  03 21 01 00 7D B4 CA FF 0E 21 00 00 C3 05 0F DD    .!..}....!......
001840:  6E 08 DD 66 09 11 06 00 C3 C4 00 18 F8 21 FE FF    n..f.........!..
001850:  CD 8F 00 21 0A 00 E5 CD 0B 0A DD 75 FE DD 74 FF    ...!.......u..t.
001860:  11 00 00 CD 88 01 7D B4 CA 4B 0F C3 32 0F 25 73    ......}..K..2.%s
001870:  0A 00 21 2E 0F E5 2A 4A A1 E5 01 06 00 C5 CD 16    ..!...*J........
001880:  03 21 01 00 E5 CD 37 38 C3 5C 0F DD 6E FE DD 66    .!....78.\..n..f
001890:  FF 11 00 00 19 E5 21 00 00 CD 6A 02 DD 6E FE DD    ......!...j..n..
0018A0:  66 FF 11 00 00 C3 C4 00 18 F8 21 FE FF CD 8F 00    f.........!.....
0018B0:  21 0A 00 E5 CD 0B 0A DD 75 FE DD 74 FF 11 00 00    !.......u..t....
0018C0:  CD 88 01 7D B4 CA A8 0F C3 8F 0F 25 73 0A 00 21    ...}.......%s..!
0018D0:  8B 0F E5 2A 4C A1 E5 01 06 00 C5 CD 16 03 21 01    ...*L.........!.
0018E0:  00 E5 CD 37 38 C3 93 10 DD 6E FE DD 66 FF 11 02    ...78....n..f...
0018F0:  00 19 E5 DD 6E 0C DD 66 0D 11 02 00 19 CD 4B 02    ....n..f......K.
001900:  71 08 CD 7E 08 CD F6 01 20 05 CD 7B 08 18 0F 6F    q..~.... ..{...o
001910:  3A 70 08 B7 28 03 7D 12 13 0B 78 B1 20 E4 2E 00    :p..(.}...x. ...
001920:  18 D2 2A 6E 08 23 22 6E 08 D1 E1 E1 2B 2B E5 C3    ..*n.#"n....++..
001930:  D9 04 D1 E1 18 F9 00 00 00 21 00 00 E5 CD 49 00    .........!....I.
001940:  7D C9 2A DA 08 7E 23 22 DA 08 6F 26 FF BC C8 24    }.*..~#"..o&...$
001950:  B7 C0 06 50 CD 45 06 EB CD 7C 00 FE 7F 28 13 CD    ...P.E...|...(..
001960:  82 00 7D 12 13 FE 0A 28 05 3C 28 02 10 EA AF 12    ..}....(.<(.....
001970:  18 D0 3E 50 B8 28 E1 1B 04 3E 08 CD 82 00 3E 10    ..>P.(...>....>.
001980:  CD 82 00 18 D3 21 89 08 36 00 22 DA 08 C9 2F C6    .....!..6.".../.
001990:  21 91 63 01 64 3E D1 F9 D5 36 00 5D 54 13 ED B0    !.c.d>...6.]T...
0019A0:  21 30 39 18 02 ED B0 4E 23 46 23 5E 23 56 23 78    !09....N#F#^#V#x
0019B0:  B1 20 F2 CD 52 00 CD B8 1F C3 64 00 52 20 50 52    . ..R.....d.R PR
0019C0:  F7 A1 F7 A1 1A 13 ED A1 C0 E0 18 F8 C5 DD E5 21    ...............!
0019D0:  E5 08 06 0B 36 00 10 FC CD 84 BB CD 7B BB DD E1    ....6.......{...
0019E0:  C1 C3 85 00 D1 E1 7D D5 C3 5A BB D1 E1 7D D5 F5    ......}..Z...}..
0019F0:  3E 00 CD 24 08 F1 FE 0A 20 07 3E 0D CD 5A BB 3E    >..$.... .>..Z.>
001A00:  0A CD 5A BB C9 CD 81 BB CD 06 BB CD 84 BB FE 0D    ..Z.............
001A10:  20 02 3E 0A 6F 26 00 FE 1A C0 21 FF FF 7D C9 CD     .>.o&....!..}..
001A20:  06 BB 6F 26 00 C9 CD 09 BB 21 00 00 38 02 AF C9    ..o&.....!..8...
001A30:  CD 0C BB 2C C9 CD 09 BB 21 00 00 3F D8 FE FC 37    ...,....!..?...7
001A40:  C0 2C 3F C9 D1 E1 7D E1 D5 B7 FA 4F 07 FE 08 28    .,?...}....O...(
001A50:  1C 38 12 FE 09 20 38 7D DD E5 CD 95 BC DD E1 D8    .8... 8}........
001A60:  CD 92 BC 18 2A CD 24 08 7D CD 5A BB C9 7D CD 2B    ....*.$.}.Z..}.+
001A70:  BD D8 18 F9 E1 D1 7B E5 21 E5 08 5F AF 57 19 BE    ......{.!.._.W..
001A80:  28 04 5E 77 EB C9 7B B7 CA 02 06 FE 0A 28 04 21    (.^w..{......(.!
001A90:  FF FF C9 DD E5 CD 80 BC DD E1 6F 26 00 D8 CD 7D    ..........o&...}
001AA0:  BC 18 EC F1 D1 E1 F5 00 7B FE 0B D0 7A B7 C0 7D    ........{...z..}
001AB0:  21 E5 08 19 77 C9 D1 E1 7D D5 21 8A 4C FE 09 28    !...w...}.!.L..(
001AC0:  12 FE 0A 20 CA DD E5 CB 86 CD 7A BC DD E1 30 BF    ... ......z...0.
001AD0:  B7 18 78 DD E5 CB 8E CB 56 20 02 CB 86 CD 8F BC    ..x.....V ......
001AE0:  18 EA AF 21 E5 08 77 21 EF 08 77 21 8A 4C 77 2A    ...!..w!..w!.Lw*
001AF0:  80 06 22 82 06 3E 09 CD 7A 07 3E 0A C3 7A 07 F1    .."..>..z.>..z..
001B00:  2E 6C 6F 67 20 30 0D 0A 42 20 61 32 31 20 31 31    .log 0..B a21 11
001B10:  36 39 37 20 31 31 37 30 33 20 61 69 37 2E 6C 6F    697 11703 ai7.lo
001B20:  67 20 30 0D 0A 1A 0D 0A 42 20 72 65 61 64 6D 65    g 0.....B readme
001B30:  20 31 30 32 39 20 31 30 33 37 20 61 30 31 20 30     1029 1037 a01 0
001B40:  0D 0A 42 20 72 65 61 64 6D 65 20 31 30 36 36 20    ..B readme 1066 
001B50:  31 30 37 34 20 61 30 32 20 30 0D 0A 42 20 72 65    1074 a02 0..B re
001B60:  61 64 6D 65 20 31 31 32 35 20 31 31 33 33 20 61    adme 1125 1133 a
001B70:  30 33 20 30 0D 0A 42 20 72 65 61 64 6D 65 20 31    03 0..B readme 1
001B80:  33 32 20 35 34 30 20 61 31 31 20 39 30 37 39 0D    32 540 a11 9079.
001B90:  0A 42 20 61 31 32 20 33 38 31 30 20 33 38 31 38    .B a12 3810 3818
001BA0:  20 61 31 32 20 31 30 35 31 31 0D 0A 42 20 61 31     a12 10511..B a1
001BB0:  32 20 38 34 35 34 20 38 34 36 30 20 61 31 32 20    2 8454 8460 a12 
001BC0:  31 31 37 36 38 0D 0A 42 20 61 31 33 20 32 30 37    11768..B a13 207
001BD0:  35 20 32 30 38 33 20 61 31 33 20 36 33 30 32 0D    5 2083 a13 6302.
001BE0:  0A 42 20 61 31 33 20 32 38 30 34 20 32 38 31 31    .B a13 2804 2811
001BF0:  20 61 31 33 20 35 39 37 31 0D 0A 42 20 61 31 34     a13 5971..B a14
001C00:  20 31 33 36 34 20 31 33 37 30 20 61 31 34 74 31     1364 1370 a14t1
001C10:  20 30 0D 0A 42 20 61 31 35 20 35 30 32 37 20 35     0..B a15 5027 5
001C20:  30 33 35 20 34 36 34 72 73 78 2E 62 61 73 20 30    035 464rsx.bas 0
001C30:  0D 0A 42 20 61 31 36 20 35 34 33 20 35 34 39 20    ..B a16 543 549 
001C40:  61 69 31 2E 62 61 73 20 30 0D 0A 42 20 61 31 36    ai1.bas 0..B a16
001C50:  20 39 35 32 20 39 35 39 20 61 31 36 20 31 30 35     952 959 a16 105
001C60:  31 34 0D 0A 42 20 61 31 36 20 31 30 34 34 34 20    14..B a16 10444 
001C70:  31 30 34 36 34 20 61 31 36 61 20 30 0D 0A 42 20    10464 a16a 0..B 
001C80:  61 31 36 61 20 34 36 39 20 34 37 35 20 61 69 32    a16a 469 475 ai2
001C90:  2E 62 61 73 20 30 0D 0A 42 20 61 31 37 20 33 37    .bas 0..B a17 37
001CA0:  30 39 20 33 37 31 36 20 61 31 37 20 31 30 39 30    09 3716 a17 1090
001CB0:  35 0D 0A 42 20 61 31 37 20 35 30 31 31 20 35 30    5..B a17 5011 50
001CC0:  31 38 20 61 31 37 20 31 31 35 39 34 0D 0A 42 20    18 a17 11594..B 
001CD0:  61 32 31 20 34 33 32 32 20 34 33 32 38 20 61 69    a21 4322 4328 ai
001CE0:  36 2E 6C 6F 67 20 30 0D 0A 42 20 61 32 31 20 34    6.log 0..B a21 4
001CF0:  33 33 34 20 34 33 34 34 20 36 34 6B 62 69 74 73    334 4344 64kbits
001D00:  D1 E1 F5 D5 E5 CD 15 02 45 E1 D1 1A ED 5B 8A 4C    ........E....[.L
001D10:  16 01 DD E5 FE 72 28 08 15 FE 77 28 13 B7 18 29    .....r(...w(...)
001D20:  CB 43 20 25 CB C3 D5 ED 5B 80 06 CD 77 BC 18 18    .C %....[...w...
001D30:  CB 4B 20 15 CB 53 20 06 CB 43 20 0D CB C3 CB CB    .K ..S ..C .....
001D40:  D5 ED 5B 82 06 CD 8C BC D1 DD E1 21 00 00 D0 7B    ..[........!...{
001D50:  32 8A 4C 3E 09 82 6F C9 D1 E1 D5 22 82 06 21 8A    2.L>..o...."..!.
001D60:  4C CB D6 C9 E5 CD B4 BB E1 C9 ED B0 E1 D1 44 4D    L.............DM
001D70:  CD 98 BC C3 A2 07 0E FF 21 3E 08 C3 16 BD 60 69    ........!>....`i
001D80:  CD 46 39 CD 50 06 C7 C9 DD E5 C1 09 6E 26 00 C9    .F9.P.......n&..
001D90:  00 02 00 71 4D 71 4D 02 6C 69 73 74 20 20 20 20    ...qMqM.list    
001DA0:  00 BC 4D 00 00 73 23 00 00 00 00 8A 08 63 09 EB    ..M..s#......c..
001DB0:  72 2B 73 EB C9 5E 23 56 D5 EB 09 EB 72 2B 73 E1    r+s..^#V....r+s.
001DC0:  01 00 26 00 C3 81 23 FE 36 FF 00 6E 63 6C 75 64    ..&...#.6..nclud
001DD0:  65 0A 00 01 09 D1 CD 89 02 E5 CD 90 01 05 E5 CD    e...............
001DE0:  E8 22 D1 D1 D1 EB 60 69 73 CD 90 01 09 E5 CD 90    ."....`is.......
001DF0:  01 07 E5 CD 90 01 09 D1 CD 29 02 E5 CD 90 01 05    .........)......
001E00:  E5 CD E8 22 D1 D1 D1 60 69 6E 26 00 23 26 00 C3    ..."...`in&.#&..
001E10:  81 23 EB 21 01 00 39 F9 EB C1 8A 08 21 00 00 39    .#.!..9.....!..9
001E20:  F9 44 4D 21 04 00 09 6E 26 00 11 D0 FF 19 7C 00    .DM!...n&.....|.
001E30:  CD AF 01 DA B5 23 21 04 00 09 6E 26 00 11 C6 FF    .....#!...n&....
001E40:  21 00 00 CD 8F 00 DD 6E 04 DD 66 05 11 02 00 CD    !......n..f.....
001E50:  34 01 11 01 00 B7 ED 52 22 E7 A1 21 04 00 DD E5    4......R"..!....
001E60:  C1 09 E5 2A E7 A1 11 02 00 CD 0B 01 EB E1 19 22    ...*..........."
001E70:  E5 A1 21 01 80 22 E3 A1 21 E7 A1 01 FF FF CD 7D    ..!.."..!......}
001E80:  02 7D B4 CA 6C 09 2A E5 A1 CD 4B 02 ED 5B E3 A1    .}..l.*...K..[..
001E90:  CD 98 01 7D B4 CA 61 09 2A E5 A1 CD 4B 02 22 E3    ...}..a.*...K.".
001EA0:  A1 21 E5 A1 01 FE FF CD 72 02 18 CC 2A E3 A1 C3    .!......r...*...
001EB0:  BE 00 18 FB 21 00 00 CD 8F 00 DD 6E 04 DD 66 05    ....!......n..f.
001EC0:  11 02 00 CD 34 01 11 01 00 B7 ED 52 22 E1 A1 21    ....4......R"..!
001ED0:  04 00 DD E5 C1 09 E5 2A E1 A1 11 02 00 CD 0B 01    .......*........
001EE0:  EB E1 19 22 DF A1 21 FF 7F 22 DD A1 21 E1 A1 01    ..."..!.."..!...
001EF0:  FF FF CD 7D 02 7D B4 CA E0 09 2A DF A1 CD 4B 02    ...}.}....*...K.
001F00:  00 4C 4F 4F 4D 20 20 20 20 42 49 4E 00 00 00 00    .LOOM    BIN....
001F10:  00 00 02 00 00 40 00 00 0B 39 40 00 00 00 00 00    .....@...9@.....
001F20:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
001F30:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
001F40:  0B 39 00 9A 03 59 0F 00 00 FB A1 0E 07 C3 CE BC    .9...Y..........
001F50:  1A 24 FF 00 FF 26 B1 0A 12 FD A7 86 22 37 67 CC    .$...&......"7g.
001F60:  80 99 76 6A 33 97 82 02 F3 2C 0F 96 E7 F3 94 3E    ..vj3....,.....>
001F70:  A8 60 99 0F 2A 86 FA 63 80 EA A4 11 53 F3 0D 36    .`..*..c....S..6
001F80:  CD 36 08 C3 00 00 C3 BF 07 C3 34 07 C3 04 07 C3    .6........4.....
001F90:  76 07 C3 8C 06 C3 DF 06 C3 AB 06 C3 E6 06 C3 F9    v...............
001FA0:  05 C3 AB 06 C3 A2 07 C3 F5 06 C3 63 07 C3 A4 06    ...........c....
001FB0:  C3 00 09 C3 00 09 C3 00 09 C3 16 03 C3 C5 06 C3    ................
001FC0:  C5 06 C3 AF 06 C3 45 06 FE 30 3F D0 FE 3A C9 D1    ......E..0?..:..
001FD0:  DD E5 DD 21 00 00 DD 39 39 F9 2A 4E 06 39 30 02    ...!...99.*N.90.
001FE0:  EB E9 21 AF 00 E5 21 04 00 E5 CD 79 00 18 91 73    ..!...!....y...s
001FF0:  74 61 63 6B 20 6F 76 65 72 66 6C 6F 77 00 DD 5E    tack overflow..^
002000:  04 DD 56 05 DD F9 DD E1 C1 EB 39 F9 EB C5 44 4D    ..V.......9...DM
002010:  C9 7D B3 6F 7C B2 67 C9 7D AB 6F 7C AA 67 C9 7D    .}.o|.g.}.o|.g.}
002020:  A3 6F 7C A2 67 C9 1D F8 29 18 FB 1D F8 CB 3C CB    £o|.g...).....<.
002030:  1D 18 F8 1D F8 CB 2C CB 1D 18 F8 2B 7C 2F 67 7D    ......,....+|/g}
002040:  2F 6F C9 7C B5 21 00 00 C0 23 C9 7C AA F5 AA FC    /o.|.!...#.|....
002050:  FB 00 7A CD 49 01 CD 1D 01 F1 F0 18 DE C5 06 10    ..z.I...........
002060:  7C 4D 21 00 00 29 38 0A CB 11 17 30 03 19 38 02    |M!..)8....0..8.
002070:  10 F3 C1 C9 7C AA 7C F5 B7 FC FB 00 7A CD 49 01    ....|.|.....z.I.
002080:  CD 50 01 F1 F5 FC FB 00 F1 EB B7 FC FB 00 EB C9    .P..............
002090:  C5 42 4B 11 00 00 3E 10 29 38 06 3D 20 FA C1 C9    .BK...>.)8.= ...
0020A0:  29 F5 CB 13 CB 12 7B 91 7A 98 FA 72 01 57 7B 91    ).....{.z..r.W{.
0020B0:  5F 2C F1 3D 20 EA C1 C9 CD 34 01 EB C9 CD 50 01    _,.= ....4....P.
0020C0:  EB C9 AF ED 52 67 6F C9 CD 82 01 37 23 C8 3F 2B    ....Rgo....7#.?+
0020D0:  C9 CD 82 01 C8 23 37 C9 EB CD 91 01 C8 FA A3 01    .....#7.......£.
0020E0:  E8 2B 3F E0 2B 3F C9 EB CD 99 01 C0 23 37 C9 EB    .+?.+?......#7..
0020F0:  CD 82 01 D0 23 C9 EB CD B0 01 C0 23 37 C9 F1 E1    ....#......#7...
002100:  ED 5B DD A1 CD 99 01 7D B4 CA D5 09 2A DF A1 CD    .[.....}....*...
002110:  4B 02 22 DD A1 21 DF A1 01 FE FF CD 72 02 18 CC    K."..!......r...
002120:  2A DD A1 C3 BE 00 18 FB 6C 69 6E 6B 62 61 73 65    *.......linkbase
002130:  2E 74 78 74 00 68 65 6C 70 2E 74 78 74 00 6D 65    .txt.help.txt.me
002140:  73 73 61 67 65 73 2E 74 78 74 00 21 00 00 CD 8F    ssages.txt.!....
002150:  00 DD 6E 04 DD 66 05 11 03 00 19 11 04 00 CD 50    ..n..f.........P
002160:  01 11 01 00 19 22 40 A1 2A F0 A1 22 42 A1 11 00    ....."@.*.."B...
002170:  00 CD 88 01 7D B4 CA 5E 0A 21 D9 63 22 42 A1 22    ....}..^.!.c"B."
002180:  F0 A1 2A 42 A1 11 00 00 19 E5 2A 42 A1 CD 6A 02    ..*B......*B..j.
002190:  2A 42 A1 11 02 00 19 E5 21 59 0F CD 6A 02 2A 42    *B......!Y..j.*B
0021A0:  A1 11 00 00 19 CD 4B 02 22 44 A1 21 01 00 7D B4    ......K."D.!..}.
0021B0:  CA 3C 0B 2A 44 A1 11 02 00 19 CD 4B 02 ED 5B 40    .<.*D......K..[@
0021C0:  A1 CD B6 01 7D B4 CA 12 0B 2A 44 A1 11 02 00 19    ....}....*D.....
0021D0:  CD 4B 02 ED 5B 40 A1 CD 88 01 7D B4 CA B7 0A 2A    .K..[@....}....*
0021E0:  42 A1 11 00 00 19 E5 2A 44 A1 11 00 00 19 CD 4B    B......*D......K
0021F0:  02 CD 6A 02 C3 F2 0A 2A 44 A1 11 02 00 19 E5 CD    ..j....*D.......
002200:  4B 02 ED 5B 40 A1 B7 ED 52 CD 6A 02 2A 44 A1 11    K..[@...R.j.*D..
002210:  02 00 19 CD 4B 02 11 04 00 CD 0B 01 EB 2A 44 A1    ....K........*D.
002220:  19 22 44 A1 2A 44 A1 11 02 00 19 E5 2A 40 A1 CD    ."D.*D......*@..
002230:  6A 02 2A 42 A1 22 F0 A1 2A 46 A1 ED 5B 40 A1 B7    j.*B."..*F..[@..
002240:  ED 52 22 46 A1 2A 44 A1 11 04 00 19 11 02 00 C3    .R"F.*D.........
002250:  C4 00 2A 44 A1 ED 5B F0 A1 CD 88 01 7D B4 CA 26    ..*D..[.....}..&
002260:  0B 21 00 00 18 E6 2A 44 A1 22 42 A1 2A 44 A1 11    .!....*D."B.*D..
002270:  00 00 19 CD 4B 02 22 44 A1 C3 6B 0A 18 CE 21 FC    ....K."D..k...!.
002280:  FF CD 8F 00 DD 6E 06 DD 66 07 11 04 00 B7 ED 52    .....n..f......R
002290:  11 02 00 19 CD 4B 02 DD 75 FE DD 74 FF DD 6E 04    .....K..u..t..n.
0022A0:  DD 66 05 E5 CD 0B 0A DD 75 FC DD 74 FD DD 6E FC    .f......u..t..n.
0022B0:  DD 66 FD 11 00 00 CD 88 01 7D B4 CA 87 0B 21 00    .f.......}....!.
0022C0:  00 11 04 00 C3 C4 00 DD 6E FC DD 66 FD E5 DD 6E    ........n..f...n
0022D0:  06 DD 66 07 E5 DD 6E FE DD 66 FF 11 01 00 B7 ED    ..f...n..f......
0022E0:  52 11 04 00 CD 0B 01 E5 CD 2E 02 DD 6E 06 DD 66    R...........n..f
0022F0:  07 E5 CD 92 36 DD 6E FC DD 66 FD 18 C4 18 C2 21    ....6.n..f.....!
002300:  D1 E5 F5 21 00 00 7B C9 CD BE 01 CD 88 00 D0 23    ...!..{........#
002310:  C9 CD BE 01 CD DD 01 D8 18 0F CD BE 01 FE 41 3F    ..............A?
002320:  D0 FE 5B D0 23 C9 CD BE 01 C6 E0 18 F0 CD BE 01    ..[.#...........
002330:  CD F6 01 C0 23 C9 FE 20 C8 FE 0A C8 FE 09 C9 CD    ....#.. ........
002340:  BE 01 CD DD 01 EB D0 C6 20 6F C9 CD BE 01 CD E9    ........ o......
002350:  01 EB D0 6F C9 EB 21 00 00 1A B7 C8 13 23 18 F9    ...o..!......#..
002360:  F1 C1 D1 E1 F5 1A ED A0 2B 77 23 E0 18 F7 F1 C1    ........+w#.....
002370:  E1 D1 F5 78 B1 C8 ED 52 19 38 03 ED B0 C9 0B 09    ...x...R.8......
002380:  EB 09 EB 03 ED B8 C9 DD E5 C1 09 7E 23 66 6F C9    ...........~#fo.
002390:  DD E5 C1 09 6E 26 00 C9 DD E5 C1 EB 09 73 23 72    ....n&.......s#r
0023A0:  EB C9 DD E5 C1 EB 09 73 EB C9 D1 EB E3 73 23 72    .......s.....s#r
0023B0:  EB C9 5E 23 56 EB 09 EB 72 2B 73 EB C9 5E 23 56    ..^#V...r+s..^#V
0023C0:  D5 EB 09 EB 72 2B 73 E1 C9 EB E1 CD 4B 02 4E 23    ....r+s.....K.N#
0023D0:  46 23 78 B1 28 0C 7E 23 BB 7E 23 20 F1 BA 20 EE    F#x.(.~#.~# .. .
0023E0:  60 69 E9 19 C9 B7 ED 52 C9 21 00 00 1A CD 88 00    `i.....R.!......
0023F0:  D0 D6 30 13 D5 29 5D 54 29 29 19 5F 16 00 19 D1    ..0..)]T))._....
002400:  18 EA D5 59 50 CD 50 01 E3 7B C6 30 FE 3A 38 02    ...YP.P..{.0.:8.
002410:  C6 07 2B 77 E3 7D B4 20 EA E1 C9 E5 CB 7C 28 03    ..+w.}. .....|(.
002420:  CD FB 00 CD C2 02 D1 CB 7A C8 2B 36 2D C9 E5 D5    ........z.+6-...
002430:  C5 6F E5 2A 81 08 E5 CD 4C 00 C1 D1 E1 C9 E5 2A    .o.*....L......*
002440:  81 08 77 23 22 81 08 E1 C9 21 FE 02 18 03 21 EE    ..w#"....!....!.
002450:  02 CD 28 04 18 0B 21 82 00 22 7F 08 D1 E1 E5 D5    ..(...!.."......
002460:  39 C5 5E 23 56 2B 2B E5 3E C3 32 7E 08 1A 13 B7    9.^#V++.>.2~....
002470:  28 0F FE 25 20 06 1A FE 25 20 12 13 CD 7E 08 18    (..% ...% ...~..
002480:  EC 2A 7F 08 3E FE 95 CC FE 02 C3 11 05 D5 21 20    .*..>.........! 
002490:  06 22 6F 08 AF 6F 67 22 71 08 1A FE 2D 3E 01 20    ."o..og"q...->. 
0024A0:  02 AF 13 32 6E 08 1A FE 30 20 05 13 32 6F 08 1A    ...2n...0 ..2o..
0024B0:  CD 88 00 30 03 CD A9 02 22 73 08 1A FE 2E 20 0A    ...0...."s.... .
0024C0:  32 72 08 13 CD A9 02 22 70 08 CD 3D 04 21 7D 08    2r....."p..=.!}.
0024D0:  F5 70 EB FE 64 28 1F FE 75 28 28 0B 0B FE 6F 28    .p..d(..u((...o(
0024E0:  22 01 10 00 FE 78 28 1B FE 73 28 1A FE 63 28 0B    "....x(..s(..c(.
0024F0:  D1 D1 D1 C3 2D 03 CD DB 02 18 0B 1B EB 73 11 01    ....-........s..
002500:  FC FF CD 8F 00 21 00 00 DD 75 FE DD 74 FF DD 6E    .....!...u..t..n
002510:  FE DD 66 FF 11 0C 00 CD 99 01 7D B4 CA 25 0C C3    ..f.......}..%..
002520:  F1 0B 21 FE FF DD E5 C1 09 01 01 00 CD 7D 02 18    ..!..........}..
002530:  DD 21 00 00 DD 75 FC DD 74 FD DD 6E 04 DD 66 05    .!...u..t..n..f.
002540:  EB DD 6E FC DD 66 FD CD 99 01 7D B4 CA 23 0C C3    ..n..f....}..#..
002550:  21 0C 21 FC FF DD E5 C1 09 01 01 00 CD 7D 02 18    !.!..........}..
002560:  D9 18 EF 18 BD 11 02 00 C3 C4 00 21 00 00 CD 8F    ...........!....
002570:  00 21 1F 00 E5 CD 6D 00 DD 6E 06 DD 66 07 E5 CD    .!....m..n..f...
002580:  6D 00 DD 6E 04 DD 66 05 E5 CD 6D 00 11 04 00 C3    m..n..f...m.....
002590:  C4 00 21 00 00 CD 8F 00 21 0C 00 E5 CD 6D 00 11    ..!.....!....m..
0025A0:  00 00 C3 C4 00 21 00 00 CD 8F 00 DD 6E 04 DD 66    .....!......n..f
0025B0:  05 11 01 00 CD 88 01 7D B4 CA 82 0C CD 81 BB C3    .......}........
0025C0:  85 0C CD 84 BB 11 02 00 C3 C4 00 21 00 00 CD 8F    ...........!....
0025D0:  00 21 0E 00 E5 CD 6D 00 DD 6E 04 DD 66 05 E5 CD    .!....m..n..f...
0025E0:  6D 00 11 02 00 C3 C4 00 21 00 00 CD 8F 00 21 0F    m.......!.....!.
0025F0:  00 E5 CD 6D 00 DD 6E 04 DD 66 05 E5 CD 6D 00 11    ...m..n..f...m..
002600:  02 00 C3 C4 00 21 00 00 CD 8F 00 21 1A 00 E5 CD    .....!.....!....
002610:  6D 00 DD 6E 0A DD 66 0B 11 01 00 B7 ED 52 E5 CD    m..n..f......R..
002620:  6D 00 DD 6E 06 DD 66 07 11 01 00 B7 ED 52 E5 CD    m..n..f......R..
002630:  6D 00 DD 6E 08 DD 66 09 11 01 00 B7 ED 52 E5 CD    m..n..f......R..
002640:  6D 00 DD 6E 04 DD 66 05 11 01 00 B7 ED 52 E5 CD    m..n..f......R..
002650:  6D 00 11 08 00 C3 C4 00 21 00 00 CD 8F 00 DD 6E    m.......!......n
002660:  04 DD 66 05 7D B4 CA 42 0D C3 30 0D 0A 25 73 00    ..f.}..B..0..%s.
002670:  21 2C 0D E5 2A 58 A1 E5 01 06 00 C5 CD 16 03 CD    !,..*X..........
002680:  55 00 C3 01 BF 11 02 00 C3 C4 00 21 00 00 CD 8F    U..........!....
002690:  00 DD 6E 06 DD 66 07 6E 26 00 E5 CD 0B 02 E5 DD    ..n..f.n&.......
0026A0:  6E 04 DD 66 05 6E 26 00 E5 CD 0B 02 EB E1 CD 88    n..f.n&.........
0026B0:  01 7D B4 CA CE 0D DD 6E 06 DD 66 07 6E 26 00 CD    .}.....n..f.n&..
0026C0:  03 01 7D B4 CA B2 0D DD 6E 04 DD 66 05 6E 26 00    ..}.....n..f.n&.
0026D0:  CD 03 01 7D B4 CA A4 0D 21 00 00 11 04 00 C3 C4    ...}....!.......
0026E0:  00 C3 B2 0D DD 6E 04 DD 66 05 6E 26 00 CD FB 00    .....n..f.n&....
0026F0:  18 E9 21 06 00 DD E5 C1 09 01 01 00 CD 72 02 21    ..!..........r.!
002700:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
002710:  02 00 01 00 02 09 4E E5 02 00 C2 02 00 00 00 02    ......N.........
002720:  02 00 C7 02 00 00 00 02 02 00 C3 02 00 00 00 02    ................
002730:  02 00 C8 02 00 00 00 02 02 00 C4 02 00 00 00 02    ................
002740:  02 00 C9 02 00 00 00 02 02 00 C5 02 00 00 00 02    ................
002750:  02 00 C1 02 00 00 00 02 02 00 C6 02 00 00 00 02    ................
002760:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002770:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002780:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002790:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0027A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0027B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0027C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0027D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0027E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0027F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
002800:  00 DD 6E 04 DD 66 05 11 00 00 19 CD 4B 02 11 00    ..n..f......K...
002810:  00 CD 88 01 7D B4 CA E5 11 21 01 00 11 02 00 C3    ....}....!......
002820:  C4 00 C3 EA 11 21 00 00 18 F2 18 F0 21 00 00 CD    .....!......!...
002830:  8F 00 21 BC 02 E5 CD 0B 0A 22 48 A1 11 00 00 CD    ..!......"H.....
002840:  88 01 7D B4 CA 24 12 C3 0E 12 25 73 0A 00 21 0A    ..}..$....%s..!.
002850:  12 E5 2A 50 A1 E5 01 06 00 C5 CD 16 03 21 01 00    ..*P.........!..
002860:  E5 CD 37 38 11 00 00 C3 C4 00 21 00 00 CD 8F 00    ..78......!.....
002870:  2A D5 A1 11 46 00 CD 88 01 7D B4 CA 5E 12 C3 45    *...F....}..^..E
002880:  12 25 73 0A 00 21 41 12 E5 2A 52 A1 E5 01 06 00    .%s..!A..*R.....
002890:  C5 CD 16 03 21 01 00 E5 CD 37 38 C3 3F 15 DD 6E    ....!....78.?..n
0028A0:  06 DD 66 07 ED 5B D5 A1 CD 99 01 7D B4 CA AF 12    ..f..[.....}....
0028B0:  DD 6E 06 DD 66 07 11 01 00 19 11 0A 00 CD 0B 01    .n..f...........
0028C0:  EB 2A 48 A1 19 E5 DD 6E 06 DD 66 07 11 0A 00 CD    .*H....n..f.....
0028D0:  0B 01 EB 2A 48 A1 19 E5 DD 6E 06 DD 66 07 EB 2A    ...*H....n..f..*
0028E0:  D5 A1 B7 ED 52 11 0A 00 CD 0B 01 E5 CD 2E 02 DD    ....R...........
0028F0:  6E 06 DD 66 07 11 0A 00 CD 0B 01 EB 2A 48 A1 19    n..f........*H..
002900:  11 00 00 19 E5 DD 6E 04 DD 66 05 11 00 00 19 CD    ......n..f......
002910:  4B 02 CD 6A 02 DD 6E 06 DD 66 07 11 0A 00 CD 0B    K..j..n..f......
002920:  01 EB 2A 48 A1 19 11 02 00 19 E5 DD 6E 04 DD 66    ..*H........n..f
002930:  05 11 02 00 19 CD 4B 02 CD 6A 02 DD 6E 06 DD 66    ......K..j..n..f
002940:  07 11 0A 00 CD 0B 01 EB 2A 48 A1 19 11 08 00 19    ........*H......
002950:  E5 DD 6E 04 DD 66 05 11 08 00 19 CD 4B 02 CD 6A    ..n..f......K..j
002960:  02 DD 6E 06 DD 66 07 11 0A 00 CD 0B 01 EB 2A 48    ..n..f........*H
002970:  A1 19 11 04 00 19 E5 DD 6E 04 DD 66 05 11 04 00    ........n..f....
002980:  19 CD 4B 02 E5 CD 02 36 11 01 00 19 E5 CD 0B 0A    ..K....6........
002990:  CD 6A 02 11 00 00 CD 88 01 7D B4 C2 9A 13 DD 6E    .j.......}.....n
0029A0:  06 DD 66 07 11 0A 00 CD 0B 01 EB 2A 48 A1 19 11    ..f........*H...
0029B0:  06 00 19 E5 DD 6E 04 DD 66 05 11 06 00 19 CD 4B    .....n..f......K
0029C0:  02 E5 CD 02 36 11 01 00 19 E5 CD 0B 0A CD 6A 02    ....6.........j.
0029D0:  11 00 00 CD 88 01 7D B4 28 03 21 01 00 7D B4 CA    ......}.(.!..}..
0029E0:  BF 13 C3 A9 13 25 73 0A 00 21 A5 13 E5 2A 54 A1    .....%s..!...*T.
0029F0:  E5 01 06 00 C5 CD 16 03 21 01 00 E5 CD 37 38 DD    ........!....78.
002A00:  B9 DD 6E FE DD 66 FF ED 5B DB A1 CD B0 01 7D B4    ..n..f..[.....}.
002A10:  CA EB 1B C3 D9 1B 25 73 00 21 D6 1B E5 DD 6E FE    ......%s.!....n.
002A20:  DD 66 FF E5 01 06 00 C5 CD 16 03 DD 6E 04 DD 66    .f..........n..f
002A30:  05 E5 21 00 00 E5 21 16 00 E5 CD 0B 1C DD 6E 04    ..!...!.......n.
002A40:  DD 66 05 11 02 00 C3 C4 00 18 F8 21 A4 FF CD 8F    .f.........!....
002A50:  00 21 00 00 E5 CD A8 0C 21 01 00 E5 CD 8B 0C 2A    .!......!......*
002A60:  D5 A1 11 00 00 CD 98 01 7D B4 CA 4C 1E 2A D9 A1    ........}..L.*..
002A70:  E5 DD 6E 08 DD 66 09 ED 5B D3 63 B7 ED 52 E5 CD    ..n..f..[.c..R..
002A80:  45 15 DD 75 A8 DD 74 A9 DD 6E 08 DD 66 09 DD 75    E..u..t..n..f..u
002A90:  A6 DD 74 A7 DD 6E A8 DD 66 A9 ED 5B D5 A1 CD 99    ..t..n..f..[....
002AA0:  01 7D B4 CA 93 1C DD 6E A8 DD 66 A9 11 0A 00 CD    .}.....n..f.....
002AB0:  0B 01 EB 2A 48 A1 19 11 04 00 19 CD 4B 02 E5 2A    ...*H.......K..*
002AC0:  D9 A1 E5 CD 4B 0D 11 00 00 CD 88 01 7D B4 28 03    ....K.......}.(.
002AD0:  21 01 00 7D B4 CA AC 1C DD 6E A6 DD 66 A7 ED 5B    !..}.....n..f..[
002AE0:  DB A1 CD B0 01 7D B4 28 03 21 01 00 7D B4 CA C8    .....}.(.!..}...
002AF0:  1C DD 6E 04 DD 66 05 EB DD 6E 06 DD 66 07 CD 99    ..n..f...n..f...
002B00:  01 7D B4 28 03 21 01 00 7D B4 CA 4C 1E C3 EF 1C    .}.(.!..}..L....
002B10:  DD 6E A6 DD 66 A7 E5 CD 02 36 11 01 00 19 EB DD    .n..f....6......
002B20:  6E A6 DD 66 A7 19 DD 75 A6 DD 74 A7 C3 54 1C DD    n..f...u..t..T..
002B30:  6E A8 DD 66 A9 ED 5B D5 A1 CD 99 01 7D B4 CA 2E    n..f..[.....}...
002B40:  1D DD 6E A8 DD 66 A9 11 0A 00 CD 0B 01 EB 2A 48    ..n..f........*H
002B50:  A1 19 11 04 00 19 CD 4B 02 E5 2A D9 A1 E5 CD 4B    .......K..*....K
002B60:  0D 11 00 00 CD 88 01 7D B4 28 03 21 01 00 7D B4    .......}.(.!..}.
002B70:  CA 71 1D DD 6E A8 DD 66 A9 11 0A 00 CD 0B 01 EB    .q..n..f........
002B80:  2A 48 A1 19 11 00 00 19 E5 DD 6E A6 DD 66 A7 E5    *H........n..f..
002B90:  CD 02 36 EB DD 6E A6 DD 66 A7 19 ED 5B D3 63 B7    ..6..n..f...[.c.
002BA0:  ED 52 EB E1 CD 4B 02 CD B0 01 7D B4 28 03 21 01    .R...K....}.(.!.
002BB0:  00 7D B4 CA 3C 1E DD 6E A8 DD 66 A9 11 0A 00 CD    .}..<..n..f.....
002BC0:  0B 01 EB 2A 48 A1 19 11 00 00 19 CD 4B 02 ED 5B    ...*H.......K..[
002BD0:  D3 63 19 EB DD 6E A6 DD 66 A7 EB B7 ED 52 DD 75    .c...n..f....R.u
002BE0:  AA DD 74 AB DD 6E AA DD 66 AB 11 01 00 19 E5 DD    ..t..n..f.......
002BF0:  6E 06 DD 66 07 11 01 00 19 E5 CD 2B 0C DD 6E A8    n..f.......+..n.
002C00:  6E 06 DD 66 07 11 00 00 CD 98 01 7D B4 CA 0D 14    n..f.......}....
002C10:  DD 6E 06 DD 66 07 11 01 00 B7 ED 52 11 0A 00 CD    .n..f......R....
002C20:  0B 01 EB 2A 48 A1 19 11 04 00 19 CD 4B 02 E5 DD    ...*H.......K...
002C30:  6E 04 DD 66 05 11 04 00 19 CD 4B 02 E5 CD 4B 0D    n..f......K...K.
002C40:  11 00 00 CD 88 01 7D B4 28 03 21 01 00 7D B4 CA    ......}.(.!..}..
002C50:  68 14 DD 6E 06 DD 66 07 11 0A 00 CD 0B 01 EB 2A    h..n..f........*
002C60:  48 A1 19 11 04 00 19 CD 4B 02 E5 CD 92 36 DD 6E    H.......K....6.n
002C70:  06 DD 66 07 11 0A 00 CD 0B 01 EB 2A 48 A1 19 11    ..f........*H...
002C80:  04 00 19 E5 DD 6E 06 DD 66 07 11 01 00 B7 ED 52    .....n..f......R
002C90:  11 0A 00 CD 0B 01 EB 2A 48 A1 19 11 04 00 19 CD    .......*H.......
002CA0:  4B 02 CD 6A 02 C3 92 14 DD 6E 06 DD 66 07 11 0A    K..j.....n..f...
002CB0:  00 CD 0B 01 EB 2A 48 A1 19 11 04 00 19 CD 4B 02    .....*H.......K.
002CC0:  E5 DD 6E 04 DD 66 05 11 04 00 19 CD 4B 02 E5 CD    ..n..f......K...
002CD0:  BF 35 DD 6E 04 DD 66 05 11 04 00 19 CD 4B 02 E5    .5.n..f......K..
002CE0:  DD 6E 04 DD 66 05 11 06 00 19 CD 4B 02 E5 CD 4B    .n..f......K...K
002CF0:  0D 11 00 00 CD 88 01 7D B4 CA 0C 15 DD 6E 06 DD    .......}.....n..
002D00:  66 07 11 0A 00 CD 0B 01 EB 2A 48 A1 19 11 06 00    f........*H.....
002D10:  19 CD 4B 02 E5 CD 92 36 DD 6E 06 DD 66 07 11 0A    ..K....6.n..f...
002D20:  00 CD 0B 01 EB 2A 48 A1 19 11 06 00 19 E5 DD 6E    .....*H........n
002D30:  06 DD 66 07 11 0A 00 CD 0B 01 EB 2A 48 A1 19 11    ..f........*H...
002D40:  04 00 19 CD 4B 02 CD 6A 02 C3 36 15 DD 6E 06 DD    ....K..j..6..n..
002D50:  66 07 11 0A 00 CD 0B 01 EB 2A 48 A1 19 11 06 00    f........*H.....
002D60:  19 CD 4B 02 E5 DD 6E 04 DD 66 05 11 06 00 19 CD    ..K...n..f......
002D70:  4B 02 E5 CD BF 35 21 D5 A1 01 01 00 CD 7D 02 11    K....5!......}..
002D80:  04 00 C3 C4 00 21 FE FF CD 8F 00 21 00 00 DD 75    .....!.....!...u
002D90:  FE DD 74 FF DD 6E FE DD 66 FF ED 5B D5 A1 CD 99    ..t..n..f..[....
002DA0:  01 7D B4 CA 96 15 DD 6E FE DD 66 FF 11 0A 00 CD    .}.....n..f.....
002DB0:  0B 01 EB 2A 48 A1 19 11 04 00 19 CD 4B 02 E5 DD    ...*H.......K...
002DC0:  6E 06 DD 66 07 E5 CD 4B 0D 11 00 00 CD 99 01 7D    n..f...K.......}
002DD0:  B4 28 03 21 01 00 7D B4 CA AA 15 21 FE FF DD E5    .(.!..}....!....
002DE0:  C1 09 01 01 00 CD 7D 02 18 AA DD 6E FE DD 66 FF    ......}....n..f.
002DF0:  ED 5B D5 A1 CD 99 01 7D B4 CA EC 15 DD 6E FE DD    .[.....}.....n..
002E00:  DD 66 A9 11 0A 00 CD 0B 01 EB 2A 48 A1 19 11 00    .f........*H....
002E10:  00 19 CD 4B 02 DD 75 A4 DD 74 A5 DD 6E A8 DD 66    ...K..u..t..n..f
002E20:  A9 11 0A 00 CD 0B 01 EB 2A 48 A1 19 11 02 00 19    ........*H......
002E30:  CD 4B 02 11 01 00 19 EB DD 6E A4 DD 66 A5 CD B0    .K.......n..f...
002E40:  01 7D B4 CA 2C 1E C3 18 1E 21 A4 FF DD E5 C1 09    .}..,....!......
002E50:  01 01 00 CD 7D 02 18 C3 DD 6E A4 DD 66 A5 EB 2A    ....}....n..f..*
002E60:  D3 63 19 6E 26 00 E5 CD 6D 00 18 DD 21 A8 FF DD    .c.n&...m...!...
002E70:  E5 C1 09 01 01 00 CD 7D 02 C3 EF 1C 21 06 00 DD    .......}....!...
002E80:  E5 C1 09 01 01 00 CD 7D 02 C3 D0 1C 21 01 00 E5    .......}....!...
002E90:  CD 70 33 11 06 00 C3 C4 00 21 00 00 CD 8F 00 DD    .p3......!......
002EA0:  6E 06 DD 66 07 ED 5B DB A1 CD B6 01 7D B4 CA 7A    n..f..[.....}..z
002EB0:  1E 21 00 00 11 04 00 C3 C4 00 DD 6E 04 DD 66 05    .!.........n..f.
002EC0:  11 01 00 19 E5 DD 6E 06 DD 66 07 E5 CD 02 36 EB    ......n..f....6.
002ED0:  E1 CD AF 01 7D B4 CA 9E 1E 21 00 00 18 D6 21 01    ....}....!....!.
002EE0:  00 18 D1 18 CF 21 00 00 CD 8F 00 DD 6E 06 DD 66    .....!......n..f
002EF0:  07 E5 DD 6E 04 DD 66 05 E5 CD 59 1E CD 03 01 7D    ...n..f...Y....}
002F00:  B4 CA CD 1E 21 FF FF 11 04 00 C3 C4 00 DD 6E 04    ....!.........n.
002F10:  DD 66 05 EB DD 6E 06 DD 66 07 19 ED 5B D3 63 B7    .f...n..f...[.c.
002F20:  ED 52 18 E3 18 E1 21 00 00 CD 8F 00 DD 6E 04 DD    .R....!......n..
002F30:  66 05 ED 5B D3 63 CD AF 01 7D B4 CA 5F 1F 21 04    f..[.c...}.._.!.
002F40:  00 DD E5 C1 09 01 FF FF CD 7D 02 DD 6E 04 DD 66    .........}..n..f
002F50:  05 ED 5B DB A1 CD B0 01 7D B4 CA 5F 1F DD 6E 04    ..[.....}.._..n.
002F60:  DD 66 05 ED 5B D3 63 CD AF 01 7D B4 CA 4B 1F DD    .f..[.c...}..K..
002F70:  6E 04 DD 66 05 11 01 00 B7 ED 52 6E 26 00 11 00    n..f......Rn&...
002F80:  00 CD 98 01 7D B4 28 03 21 01 00 7D B4 CA 5F 1F    ....}.(.!..}.._.
002F90:  21 04 00 DD E5 C1 09 01 FF FF CD 7D 02 18 BE DD    !..........}....
002FA0:  6E 04 DD 66 05 11 02 00 C3 C4 00 18 F8 21 00 00    n..f.........!..
002FB0:  CD 8F 00 DD 6E 04 DD 66 05 ED 5B DB A1 CD B0 01    ....n..f..[.....
002FC0:  7D B4 CA 9D 1F DD 6E 04 DD 66 05 E5 CD 02 36 EB    }.....n..f....6.
002FD0:  DD 6E 04 DD 66 05 19 DD 75 04 DD 74 05 21 04 00    .n..f...u..t.!..
002FE0:  DD E5 C1 09 01 01 00 CD 7D 02 DD 6E 04 DD 66 05    ........}..n..f.
002FF0:  11 02 00 C3 C4 00 18 F8 21 FB FF CD 8F 00 21 00    ........!.....!.
003000:  66 FF 11 0A 00 CD 0B 01 EB 2A 48 A1 19 11 04 00    f........*H.....
003010:  19 CD 4B 02 E5 DD 6E 06 DD 66 07 E5 CD 4B 0D 11    ..K...n..f...K..
003020:  00 00 CD 88 01 7D B4 28 03 21 01 00 7D B4 CA 1B    .....}.(.!..}...
003030:  16 DD 6E FE DD 66 FF 11 0A 00 CD 0B 01 EB 2A 48    ..n..f........*H
003040:  A1 19 11 00 00 19 CD 4B 02 EB DD 6E 04 DD 66 05    .......K...n..f.
003050:  EB CD B0 01 7D B4 28 03 21 01 00 7D B4 CA 30 16    ....}.(.!..}..0.
003060:  21 FE FF DD E5 C1 09 01 01 00 CD 7D 02 C3 AA 15    !..........}....
003070:  DD 6E FE DD 66 FF 11 04 00 C3 C4 00 18 F8 21 00    .n..f.........!.
003080:  00 CD 8F 00 DD 6E 04 DD 66 05 11 00 00 CD A7 01    .....n..f.......
003090:  7D B4 CA 69 16 DD 6E 04 DD 66 05 ED 5B D5 A1 CD    }..i..n..f..[...
0030A0:  99 01 7D B4 28 03 21 01 00 7D B4 CA 9E 16 DD 6E    ..}.(.!..}.....n
0030B0:  08 DD 66 09 E5 DD 6E 04 DD 66 05 11 0A 00 CD 0B    ..f...n..f......
0030C0:  01 EB 2A 48 A1 19 11 04 00 19 CD 4B 02 E5 CD 4B    ..*H.......K...K
0030D0:  0D 11 00 00 CD 88 01 7D B4 28 03 21 01 00 7D B4    .......}.(.!..}.
0030E0:  CA CD 16 DD 6E 04 DD 66 05 11 0A 00 CD 0B 01 EB    ....n..f........
0030F0:  2A 48 A1 19 11 00 00 19 CD 4B 02 EB DD 6E 06 DD    *H.......K...n..
003100:  66 07 EB CD B7 01 7D B4 28 03 21 01 00 7D B4 CA    f.....}.(.!..}..
003110:  FC 16 DD 6E 04 DD 66 05 11 0A 00 CD 0B 01 EB 2A    ...n..f........*
003120:  48 A1 19 11 02 00 19 CD 4B 02 EB DD 6E 06 DD 66    H.......K...n..f
003130:  07 EB CD B6 01 7D B4 28 03 21 01 00 7D B4 CA 0A    .....}.(.!..}...
003140:  17 21 01 00 11 06 00 C3 C4 00 21 00 00 18 F5 18    .!........!.....
003150:  F3 21 00 00 CD 8F 00 21 00 32 E5 CD 0B 0A 22 D3    .!.....!.2....".
003160:  63 11 00 00 CD 88 01 7D B4 CA 49 17 C3 33 17 25    c......}..I..3.%
003170:  73 0A 00 21 2F 17 E5 2A 56 A1 E5 01 06 00 C5 CD    s..!/..*V.......
003180:  16 03 21 01 00 E5 CD 37 38 11 00 00 C3 C4 00 21    ..!....78......!
003190:  F9 FF CD 8F 00 DD 6E 04 DD 66 05 E5 C3 61 17 72    ......n..f...a.r
0031A0:  00 21 5F 17 E5 CD 46 00 DD 75 FE DD 74 FF 11 00    .!_...F..u..t...
0031B0:  00 CD 88 01 7D B4 CA 82 17 21 FF FF 11 02 00 C3    ....}....!......
0031C0:  C4 00 21 00 00 7D 32 84 A1 26 00 DD 6E FE DD 66    ..!..}2..&..n..f
0031D0:  FF E5 CD 49 00 DD 75 FD 26 00 DD 6E FD 26 00 11    ...I..u.&..n.&..
0031E0:  23 00 CD 88 01 7D B4 CA CB 17 21 84 A1 E5 21 42    #....}....!...!B
0031F0:  00 E5 DD 6E FE DD 66 FF E5 CD 3C 0E DD 6E FE DD    ...n..f...<..n..
003200:  00 DD 75 FF 26 00 21 C2 63 E5 21 E8 09 E5 CD BF    ..u.&.!.c.!.....
003210:  35 21 B5 63 E5 21 F5 09 E5 CD BF 35 21 00 00 7D    5!.c.!.....5!..}
003220:  32 B4 63 26 00 2A D1 63 6E 26 00 11 01 00 CD 88    2.c&.*.cn&......
003230:  01 7D B4 CA 02 20 C3 FB 1F C2 00 21 F9 1F E5 CD    .}... .....!....
003240:  F2 0D 21 B4 63 22 D9 A1 CD F5 34 CD 0D 0F 22 CF    ..!.c"....4...".
003250:  63 CD EC 11 CD 11 17 CD 78 29 CD 10 2E 2A D3 63    c.......x)...*.c
003260:  E5 CD B1 19 22 A1 63 2A A1 63 22 9F 63 21 01 00    ....".c*.c".c!..
003270:  E5 21 01 00 E5 CD 2B 0C DD 6E FF 26 00 11 51 00    .!....+..n.&..Q.
003280:  CD 91 01 7D B4 CA 64 28 21 01 00 E5 CD 65 0C CD    ...}..d(!....e..
003290:  55 00 E5 CD 0B 02 DD 75 FF 26 00 21 00 00 E5 CD    U......u.&.!....
0032A0:  65 0C 21 02 00 E5 CD 70 33 21 0C 00 E5 CD 6D 00    e.!....p3!....m.
0032B0:  21 01 00 E5 CD 70 33 2A A5 63 E5 2A A3 63 E5 CD    !....p3*.c.*£c..
0032C0:  2B 0C DD 6E FF 26 00 CD 89 02 FF 27 C3 61 28 CD    +..n.&.....'.a(.
0032D0:  26 2A C3 61 28 21 B5 63 E5 CD D8 31 7D B4 CA BD    &*.a(!.c...1}...
0032E0:  20 2A D3 63 E5 CD B1 19 22 A1 63 2A A1 63 22 9F     *.c....".c*.c".
0032F0:  63 21 01 00 22 A3 63 21 01 00 22 A5 63 2A A5 63    c!.."£c!..".c*.c
003300:  E5 2A A3 63 E5 CD 2B 0C C3 61 28 21 02 00 E5 CD    .*£c..+..a(!....
003310:  70 33 C3 DB 20 25 73 20 25 64 00 21 D5 20 E5 2A    p3.. %s %d.!. .*
003320:  5C A1 E5 2A 46 A1 E5 01 08 00 C5 CD 16 03 21 01    \..*F.........!.
003330:  00 E5 CD 70 33 2A A5 63 E5 2A A3 63 E5 CD 2B 0C    ...p3*.c.*£c..+.
003340:  C3 61 28 CD 78 29 2A A1 63 E5 CD B1 19 2A A5 63    .a(.x)*.c....*.c
003350:  E5 2A A3 63 E5 CD 2B 0C C3 61 28 21 02 00 E5 CD    .*£c..+..a(!....
003360:  70 33 CD 07 19 21 01 00 E5 CD 70 33 2A A5 63 E5    p3...!....p3*.c.
003370:  2A A3 63 E5 CD 2B 0C C3 61 28 CD 4D 2B C3 61 28    *£c..+..a(.M+.a(
003380:  CD CD 2B C3 61 28 2A A3 63 11 01 00 CD 88 01 7D    ..+.a(*£c......}
003390:  B4 CA 7A 21 2A A1 63 ED 5B D3 63 CD AF 01 7D B4    ..z!*.c.[.c...}.
0033A0:  CA 77 21 CD CC 28 2A A1 63 22 9F 63 2A A5 63 E5    .w!..(*.c".c*.c.
0033B0:  21 01 00 E5 CD 2B 0C C3 95 21 2A A5 63 E5 21 A3    !....+...!*.c.!£
0033C0:  63 01 FF FF CD 72 02 E5 CD 2B 0C 2A 9F 63 E5 CD    c....r...+.*.c..
0033D0:  E6 1E 22 9F 63 C3 61 28 2A A3 63 11 16 00 CD 88    ..".c.a(*£c.....
0033E0:  01 7D B4 CA E6 21 2A 9F 63 E5 CD 02 36 EB 2A 9F    .}...!*.c...6.*.
0033F0:  63 19 11 01 00 19 ED 5B DB A1 CD B0 01 7D B4 CA    c......[.....}..
003400:  66 FF E5 CD 49 00 DD 75 FD 26 00 2A D3 63 22 DB    f...I..u.&.*.c".
003410:  A1 21 00 00 DD 75 F9 DD 74 FA DD 6E FD 26 00 11    .!...u..t..n.&..
003420:  FF 00 CD 91 01 7D B4 CA 05 18 2A D3 63 11 00 32    .....}....*.c..2
003430:  19 11 01 00 B7 ED 52 EB 2A DB A1 CD B0 01 7D B4    ......R.*.....}.
003440:  28 03 21 01 00 7D B4 CA C7 18 DD 6E FD 26 00 CD    (.!..}.....n.&..
003450:  89 02 A5 18 C3 B5 18 21 DB A1 01 01 00 CD 7D 02    .......!......}.
003460:  E5 21 20 00 D1 7D 12 26 00 21 F9 FF DD E5 C1 09    .! ..}.&.!......
003470:  01 01 00 CD 7D 02 2A D3 63 11 00 32 19 EB 2A DB    ....}.*.c..2..*.
003480:  A1 CD B0 01 7D B4 CA 5C 18 DD 6E F9 DD 66 FA 11    ....}..\..n..f..
003490:  08 00 CD 78 01 7D B4 28 03 21 01 00 7D B4 20 B7    ...x.}.(.!..}. .
0034A0:  C3 B5 18 21 DB A1 01 01 00 CD 7D 02 E5 21 00 00    ...!......}..!..
0034B0:  D1 7D 12 26 00 21 00 00 DD 75 F9 DD 74 FA C3 B5    .}.&.!...u..t...
0034C0:  18 21 DB A1 01 01 00 CD 7D 02 E5 DD 6E FD 26 00    .!......}...n.&.
0034D0:  D1 7D 12 26 00 21 F9 FF DD E5 C1 09 01 01 00 CD    .}.&.!..........
0034E0:  7D 02 C3 B5 18 14 18 0D 00 17 18 09 00 63 18 0A    }............c..
0034F0:  00 00 00 18 CC DD 6E FE DD 66 FF E5 CD 49 00 DD    ......n..f...I..
003500:  75 FD 26 00 C3 DA 17 DD 6E FE DD 66 FF E5 CD 4F    u.&.....n..f...O
003510:  00 DD 6E FD 26 00 CD 89 02 FC 18 21 DB A1 01 01    ..n.&......!....
003520:  00 CD 7D 02 E5 21 00 00 D1 7D 12 26 00 21 00 00    ..}..!...}.&.!..
003530:  C3 7C 17 21 FE FF C3 7C 17 C3 04 19 DB 18 FF 00    .|.!...|........
003540:  00 00 18 EF C3 7C 17 21 FE FF CD 8F 00 21 84 A1    .....|.!.....!..
003550:  E5 CD 37 34 7D B4 C2 30 19 C3 1F 19 0A 0A 00 21    ..74}..0.......!
003560:  1C 19 E5 CD 11 0E 11 00 00 CD 88 01 7D B4 28 03    ............}.(.
003570:  21 01 00 7D B4 CA 41 19 21 00 00 11 00 00 C3 C4    !..}..A.!.......
003580:  00 2A D3 63 DD 75 FE DD 74 FF DD 6E FE DD 66 FF    .*.c.u..t..n..f.
003590:  ED 5B DB A1 CD B0 01 7D B4 CA AF 19 C3 7D 19 DD    .[.....}.....}..
0035A0:  6E FE DD 66 FF E5 CD 02 36 11 01 00 19 EB DD 6E    n..f....6......n
0035B0:  FE DD 66 FF 19 DD 75 FE DD 74 FF 18 CD DD 6E FE    ..f...u..t....n.
0035C0:  DD 66 FF E5 CD 37 34 7D B4 C2 A2 19 C3 91 19 0A    .f...74}........
0035D0:  00 21 8F 19 E5 CD 11 0E 11 00 00 CD 88 01 7D B4    .!............}.
0035E0:  28 03 21 01 00 7D B4 CA AD 19 C3 AF 19 18 B0 18    (.!..}..........
0035F0:  8A 21 FC FF CD 8F 00 21 00 00 E5 CD 70 33 21 01    .!.....!....p3!.
003600:  CD 6A 02 DD 6E FE DD 66 FF 11 04 00 19 E5 DD 6E    .j..n..f.......n
003610:  0C DD 66 0D 11 04 00 19 CD 4B 02 CD 6A 02 DD 6E    ..f......K..j..n
003620:  FE DD 66 FF 11 06 00 19 E5 DD 6E 0C DD 66 0D 11    ..f.......n..f..
003630:  06 00 19 CD 4B 02 CD 6A 02 DD 6E FE DD 66 FF 11    ....K..j..n..f..
003640:  08 00 19 E5 DD 6E 0C DD 66 0D 11 08 00 19 CD 4B    .....n..f......K
003650:  02 CD 6A 02 DD 6E FE DD 66 FF 11 00 00 19 E5 DD    ..j..n..f.......
003660:  6E 0C DD 66 0D 11 00 00 19 CD 4B 02 CD 6A 02 DD    n..f......K..j..
003670:  6E 0C DD 66 0D 11 02 00 19 E5 DD 6E 0A DD 66 0B    n..f.......n..f.
003680:  CD 6A 02 DD 6E 0C DD 66 0D 11 04 00 19 E5 DD 6E    .j..n..f.......n
003690:  08 DD 66 09 CD 6A 02 DD 6E 0C DD 66 0D 11 06 00    ..f..j..n..f....
0036A0:  19 E5 DD 6E 06 DD 66 07 CD 6A 02 DD 6E 0C DD 66    ...n..f..j..n..f
0036B0:  0D 11 08 00 19 E5 DD 6E 04 DD 66 05 CD 6A 02 DD    .......n..f..j..
0036C0:  6E 0C DD 66 0D 11 00 00 19 E5 DD 6E FE DD 66 FF    n..f.......n..f.
0036D0:  CD 6A 02 11 0A 00 C3 C4 00 21 FE FF CD 8F 00 DD    .j.......!......
0036E0:  6E 04 DD 66 05 11 00 00 19 CD 4B 02 DD 75 FE DD    n..f......K..u..
0036F0:  74 FF DD 6E 04 DD 66 05 11 02 00 19 E5 DD 6E FE    t..n..f.......n.
003700:  DD 66 FF 11 02 00 19 CD 4B 02 CD 6A 02 DD 6E 04    .f......K..j..n.
003710:  DD 66 05 11 04 00 19 E5 DD 6E FE DD 66 FF 11 04    .f.......n..f...
003720:  00 19 CD 4B 02 CD 6A 02 DD 6E 04 DD 66 05 11 06    ...K..j..n..f...
003730:  00 19 E5 DD 6E FE DD 66 FF 11 06 00 19 CD 4B 02    ....n..f......K.
003740:  CD 6A 02 DD 6E 04 DD 66 05 11 08 00 19 E5 DD 6E    .j..n..f.......n
003750:  FE DD 66 FF 11 08 00 19 CD 4B 02 CD 6A 02 DD 6E    ..f......K..j..n
003760:  04 DD 66 05 11 00 00 19 E5 DD 6E FE DD 66 FF 11    ..f.......n..f..
003770:  00 00 19 CD 4B 02 CD 6A 02 DD 6E FE DD 66 FF E5    ....K..j..n..f..
003780:  CD 92 36 11 02 00 C3 C4 00 21 00 00 CD 8F 00 DD    ..6......!......
003790:  6E 0A DD 66 0B E5 DD 6E 0C DD 66 0D 11 02 00 19    n..f...n..f.....
0037A0:  CD 4B 02 CD 6A 02 DD 6E 08 DD 66 09 E5 DD 6E 0C    .K..j..n..f...n.
0037B0:  DD 66 0D 11 04 00 19 CD 4B 02 CD 6A 02 DD 6E 06    .f......K..j..n.
0037C0:  DD 66 07 E5 DD 6E 0C DD 66 0D 11 06 00 19 CD 4B    .f...n..f......K
0037D0:  02 CD 6A 02 DD 6E 04 DD 66 05 E5 DD 6E 0C DD 66    ..j..n..f...n..f
0037E0:  0D 11 08 00 19 CD 4B 02 CD 6A 02 DD 6E 0C DD 66    ......K..j..n..f
0037F0:  0D E5 CD 99 10 11 0A 00 C3 C4 00 21 00 00 CD 8F    ...........!....
003800:  00 E5 21 02 00 E5 CD 2B 0C C3 D1 19 25 73 25 63    ..!....+....%s%c
003810:  00 21 CC 19 E5 21 84 A1 E5 21 12 00 E5 01 08 00    .!...!...!......
003820:  C5 CD 16 03 21 01 00 E5 CD 70 33 CD 52 0C 21 00    ....!....p3.R.!.
003830:  00 DD 75 FC DD 74 FD 2A DB A1 11 01 00 B7 ED 52    ..u..t.*.......R
003840:  EB DD 6E 04 DD 66 05 CD AF 01 7D B4 CA 1E 1A 2A    ..n..f....}....*
003850:  DB A1 11 01 00 B7 ED 52 DD 75 04 DD 74 05 DD 6E    .......R.u..t..n
003860:  04 DD 66 05 ED 5B D3 63 CD AF 01 7D B4 CA 4C 1A    ..f..[.c...}..L.
003870:  DD 6E 04 DD 66 05 11 01 00 B7 ED 52 6E 26 00 11    .n..f......Rn&..
003880:  00 00 CD 98 01 7D B4 28 03 21 01 00 7D B4 CA 65    .....}.(.!..}..e
003890:  1A C3 63 1A 21 04 00 DD E5 C1 09 01 FF FF CD 7D    ..c.!..........}
0038A0:  02 18 BB 18 EF DD 6E 04 DD 66 05 DD 75 FE DD 74    ......n..f..u..t
0038B0:  FF DD 6E FE DD 66 FF ED 5B DB A1 CD B0 01 7D B4    ..n..f..[.....}.
0038C0:  CA 96 1A DD 6E FC DD 66 FD 11 15 00 CD 99 01 7D    ....n..f.......}
0038D0:  B4 28 03 21 01 00 7D B4 CA CB 1A C3 BC 1A DD 6E    .(.!..}........n
0038E0:  FE DD 66 FF E5 CD 02 36 11 01 00 19 EB DD 6E FE    ..f....6......n.
0038F0:  DD 66 FF 19 DD 75 FE DD 74 FF 18 B5 21 FC FF DD    .f...u..t...!...
003900:  E5 C1 09 01 01 00 CD 7D 02 18 D3 DD 6E FE DD 66    .......}....n..f
003910:  FF ED 5B DB A1 CD 88 01 7D B4 CA EA 1A 21 FC FF    ..[.....}....!..
003920:  DD E5 C1 09 01 FF FF CD 7D 02 DD 6E 04 DD 66 05    ........}..n..f.
003930:  ED 5B D3 63 CD AF 01 7D B4 CA 0F 1B DD 6E FC DD    .[.c...}.....n..
003940:  66 FD 11 15 00 CD 99 01 7D B4 28 03 21 01 00 7D    f.......}.(.!..}
003950:  B4 CA 38 1B C3 26 1B 21 FC FF DD E5 C1 09 01 01    ..8..&.!........
003960:  00 CD 7D 02 18 C4 DD 6E 04 DD 66 05 E5 CD E6 1E    ..}....n..f.....
003970:  DD 75 04 DD 74 05 18 DF 21 00 00 DD 75 FC DD 74    .u..t...!...u..t
003980:  FD DD 6E 04 DD 66 05 DD 75 FE DD 74 FF DD 6E FE    ..n..f..u..t..n.
003990:  DD 66 FF ED 5B DB A1 CD B0 01 7D B4 CA 72 1B DD    .f..[.....}..r..
0039A0:  6E FC DD 66 FD 11 15 00 CD 99 01 7D B4 28 03 21    n..f.......}.(.!
0039B0:  01 00 7D B4 CA C1 1B C3 98 1B DD 6E FE DD 66 FF    ..}........n..f.
0039C0:  E5 CD 02 36 11 01 00 19 EB DD 6E FE DD 66 FF 19    ...6......n..f..
0039D0:  DD 75 FE DD 74 FF 18 B5 C3 A0 1B 25 73 0D 0A 00    .u..t......%s...
0039E0:  21 9B 1B E5 DD 6E FE DD 66 FF E5 01 06 00 C5 CD    !....n..f.......
0039F0:  16 03 21 FC FF DD E5 C1 09 01 01 00 CD 7D 02 18    ..!..........}..
003A00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
003A10:  03 00 01 00 02 09 4E E5 03 00 C1 02 00 00 00 02    ......N.........
003A20:  03 00 C6 02 00 00 00 02 03 00 C2 02 00 00 00 02    ................
003A30:  03 00 C7 02 00 00 00 02 03 00 C3 02 00 00 00 02    ................
003A40:  03 00 C8 02 00 00 00 02 03 00 C4 02 00 00 00 02    ................
003A50:  03 00 C9 02 00 00 00 02 03 00 C5 02 00 00 00 02    ................
003A60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003A70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003A80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003A90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003AA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003AB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003AC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003AD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003AE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003AF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
003B00:  E3 21 2A 9F 63 E5 CD 02 36 11 01 00 19 EB 2A 9F    .!*.c...6.....*.
003B10:  63 19 22 9F 63 CD 19 29 2A A5 63 E5 21 16 00 E5    c.".c..)*.c.!...
003B20:  CD 2B 0C C3 1E 22 2A A5 63 E5 21 A3 63 01 01 00    .+..."*.c.!£c...
003B30:  CD 72 02 E5 CD 2B 0C 2A 9F 63 ED 5B DB A1 CD B0    .r...+.*.c.[....
003B40:  01 7D B4 CA 15 22 2A 9F 63 E5 CD 02 36 EB 2A 9F    .}..."*.c...6.*.
003B50:  63 19 22 9F 63 21 9F 63 01 01 00 CD 7D 02 C3 61    c.".c!.c....}..a
003B60:  28 2A A5 63 11 01 00 B7 ED 52 E5 21 01 00 E5 01    (*.c.....R.!....
003B70:  06 00 C5 CD 00 09 22 A5 63 2A A5 63 E5 2A A3 63    ......".c*.c.*£c
003B80:  E5 CD 2B 0C C3 61 28 2A A5 63 11 01 00 19 E5 21    ..+..a(*.c.....!
003B90:  50 00 E5 01 06 00 C5 CD 74 09 22 A5 63 2A A5 63    P.......t.".c*.c
003BA0:  E5 2A A3 63 E5 CD 2B 0C C3 61 28 2A A5 63 11 01    .*£c..+..a(*.c..
003BB0:  00 CD 88 01 7D B4 CA 9F 22 2A A3 63 11 01 00 CD    ....}..."*£c....
003BC0:  98 01 7D B4 C2 95 22 2A A1 63 ED 5B D3 63 CD AF    ..}..."*.c.[.c..
003BD0:  01 7D B4 28 03 21 01 00 7D B4 28 03 21 01 00 7D    .}.(.!..}.(.!..}
003BE0:  B4 CA FA 22 2A A3 63 11 01 00 CD 88 01 7D B4 CA    ..."*£c......}..
003BF0:  BE 22 CD CC 28 2A A1 63 22 9F 63 C3 D1 22 21 A3    ."..(*.c".c.."!£
003C00:  63 01 FF FF CD 7D 02 2A 9F 63 E5 CD E6 1E 22 9F    c....}.*.c....".
003C10:  63 2A 9F 63 ED 5B DB A1 CD B6 01 7D B4 CA E9 22    c*.c.[.....}..."
003C20:  21 01 00 22 A5 63 C3 F7 22 2A 9F 63 E5 CD 02 36    !..".c.."*.c...6
003C30:  11 01 00 19 22 A5 63 C3 C3 23 2A A5 63 11 01 00    ....".c..#*.c...
003C40:  CD 98 01 7D B4 CA C3 23 2A 9F 63 ED 5B DB A1 CD    ...}...#*.c.[...
003C50:  B6 01 7D B4 CA 20 23 21 01 00 22 A5 63 C3 C3 23    ..}.. #!..".c..#
003C60:  2A 9F 63 E5 CD 02 36 11 01 00 19 EB 2A A5 63 CD    *.c...6.....*.c.
003C70:  AF 01 7D B4 CA 48 23 2A 9F 63 E5 CD 02 36 11 01    ..}..H#*.c...6..
003C80:  00 19 22 A5 63 C3 C3 23 21 A5 63 01 FF FF CD 72    ..".c..#!.c....r
003C90:  02 11 01 00 B7 ED 52 EB 2A 9F 63 19 6E 26 00 11    ......R.*.c.n&..
003CA0:  20 00 CD 88 01 7D B4 CA 7A 23 2A A5 63 11 01 00     ....}..z#*.c...
003CB0:  CD 98 01 7D B4 28 03 21 01 00 7D B4 CA 81 23 18    ...}.(.!..}...#.
003CC0:  C7 21 A5 63 01 FF FF CD 72 02 11 01 00 B7 ED 52    .!.c....r......R
003CD0:  EB 2A 9F 63 19 6E 26 00 11 20 00 CD 91 01 7D B4    .*.c.n&.. ....}.
003CE0:  CA B3 23 2A A5 63 11 00 00 CD 98 01 7D B4 28 03    ..#*.c......}.(.
003CF0:  21 01 00 7D B4 CA BA 23 18 C7 21 A5 63 01 01 00    !..}...#..!.c...
003D00:  2A A3 63 E5 CD 2B 0C 11 00 00 C3 C4 00 21 FE FF    *£c..+.......!..
003D10:  CD 8F 00 21 02 00 E5 CD 70 33 2A 9F 63 E5 2A A5    ...!....p3*.c.*.
003D20:  63 11 01 00 B7 ED 52 E5 CD 59 1E 7D B4 CA B3 2C    c.....R..Y.}...,
003D30:  2A D9 A1 E5 2A 9F 63 E5 2A A5 63 11 01 00 B7 ED    *...*.c.*.c.....
003D40:  52 E5 CD A5 1E E5 CD 45 15 DD 75 FE DD 74 FF DD    R......E..u..t..
003D50:  6E FE DD 66 FF 11 0A 00 CD 0B 01 EB 2A 48 A1 19    n..f........*H..
003D60:  11 04 00 19 CD 4B 02 E5 2A D9 A1 E5 CD 4B 0D 11    .....K..*....K..
003D70:  00 00 CD 91 01 7D B4 C2 6D 2C DD 6E FE DD 66 FF    .....}..m,.n..f.
003D80:  11 0A 00 CD 0B 01 EB 2A 48 A1 19 11 00 00 19 E5    .......*H.......
003D90:  2A 9F 63 E5 2A A5 63 11 01 00 B7 ED 52 E5 CD A5    *.c.*.c.....R...
003DA0:  1E EB E1 CD 4B 02 CD AF 01 7D B4 28 03 21 01 00    ....K....}.(.!..
003DB0:  7D B4 CA 88 2C DD 6E FE DD 66 FF 11 00 00 CD 98    }...,.n..f......
003DC0:  01 7D B4 28 03 21 01 00 7D B4 C2 9E 2C DD 6E FE    .}.(.!..}...,.n.
003DD0:  DD 66 FF ED 5B D5 A1 CD 88 01 7D B4 28 03 21 01    .f..[.....}.(.!.
003DE0:  00 7D B4 CA B3 2C 21 FE FF DD E5 C1 09 01 FF FF    .}...,!.........
003DF0:  CD 7D 02 2A 9F 63 E5 2A A5 63 11 01 00 B7 ED 52    .}.*.c.*.c.....R
003E00:  E5 CD 59 1E CD 03 01 7D B4 C2 F6 2C 2A D9 A1 E5    ..Y....}...,*...
003E10:  2A 9F 63 E5 2A A5 63 11 01 00 B7 ED 52 E5 CD A5    *.c.*.c.....R...
003E20:  1E E5 DD 6E FE DD 66 FF E5 CD 3E 16 11 00 00 CD    ...n..f...>.....
003E30:  88 01 7D B4 28 03 21 01 00 7D B4 CA 17 2D C3 05    ..}.(.!..}...-..
003E40:  2D 0C 25 73 00 21 01 2D E5 2A 66 A1 E5 01 06 00    -.%s.!.-.*f.....
003E50:  C5 CD 16 03 C3 21 2D DD 6E FE DD 66 FF E5 CD 39    .....!-.n..f...9
003E60:  2D 21 01 00 E5 CD 70 33 2A A5 63 E5 2A A3 63 E5    -!....p3*.c.*£c.
003E70:  CD 2B 0C 11 00 00 C3 C4 00 21 00 00 CD 8F 00 DD    .+.......!......
003E80:  6E 04 DD 66 05 11 0A 00 CD 0B 01 EB 2A 48 A1 19    n..f........*H..
003E90:  11 06 00 19 CD 4B 02 E5 CD D8 31 7D B4 CA 0A 2E    .....K....1}....
003EA0:  DD 6E 04 DD 66 05 11 0A 00 CD 0B 01 EB 2A 48 A1    .n..f........*H.
003EB0:  19 11 08 00 19 5E 23 56 2A D3 63 19 E5 CD B1 19    .....^#V*.c.....
003EC0:  22 A1 63 2A A1 63 22 9F 63 21 01 00 22 A3 63 2A    ".c*.c".c!.."£c*
003ED0:  9F 63 E5 CD 02 36 EB 2A 9F 63 19 E5 DD 6E 04 DD    .c...6.*.c...n..
003EE0:  66 05 11 0A 00 CD 0B 01 EB 2A 48 A1 19 11 08 00    f........*H.....
003EF0:  19 5E 23 56 2A D3 63 19 EB E1 CD B7 01 7D B4 CA    .^#V*.c......}..
003F00:  CD 7D 02 2A A5 63 E5 2A A3 63 E5 CD 2B 0C C3 61    .}.*.c.*£c..+..a
003F10:  28 2A 9F 63 ED 5B DB A1 CD B6 01 7D B4 CA EC 23    (*.c.[.....}...#
003F20:  21 00 00 DD 75 FB DD 74 FC C3 F9 23 2A 9F 63 E5    !...u..t...#*.c.
003F30:  CD 02 36 DD 75 FB DD 74 FC DD 6E FB DD 66 FC 11    ..6.u..t..n..f..
003F40:  01 00 19 EB 2A A5 63 CD A7 01 7D B4 CA 42 24 2A    ....*.c...}..B$*
003F50:  A3 63 11 16 00 CD 99 01 7D B4 C2 38 24 2A 9F 63    £c......}..8$*.c
003F60:  E5 CD 02 36 EB 2A 9F 63 19 11 01 00 19 ED 5B DB    ...6.*.c......[.
003F70:  A1 CD B0 01 7D B4 28 03 21 01 00 7D B4 28 03 21    ....}.(.!..}.(.!
003F80:  01 00 7D B4 CA A7 24 2A A3 63 11 16 00 CD 88 01    ..}...$*£c......
003F90:  7D B4 CA 6E 24 2A 9F 63 E5 CD 02 36 11 01 00 19    }..n$*.c...6....
003FA0:  EB 2A 9F 63 19 22 9F 63 CD 19 29 C3 9E 24 21 A3    .*.c.".c..)..$!£
003FB0:  63 01 01 00 CD 7D 02 2A 9F 63 ED 5B DB A1 CD B0    c....}.*.c.[....
003FC0:  01 7D B4 CA 95 24 2A 9F 63 E5 CD 02 36 EB 2A 9F    .}...$*.c...6.*.
003FD0:  63 19 22 9F 63 21 9F 63 01 01 00 CD 7D 02 21 01    c.".c!.c....}.!.
003FE0:  00 22 A5 63 C3 3B 25 DD 6E FB DD 66 FC 11 01 00    .".c.;%.n..f....
003FF0:  19 EB 2A A5 63 CD 99 01 7D B4 CA 3B 25 DD 6E FB    ..*.c...}..;%.n.
004000:  DD 66 FC EB 2A A5 63 CD 99 01 7D B4 CA F3 24 21    .f..*.c...}...$!
004010:  A5 63 01 01 00 CD 72 02 11 01 00 B7 ED 52 EB 2A    .c....r......R.*
004020:  9F 63 19 6E 26 00 11 20 00 CD 91 01 7D B4 28 03    .c.n&.. ....}.(.
004030:  21 01 00 7D B4 CA FA 24 18 C3 21 A5 63 01 01 00    !..}...$..!.c...
004040:  CD 72 02 11 01 00 B7 ED 52 EB 2A 9F 63 19 6E 26    .r......R.*.c.n&
004050:  00 11 20 00 CD 88 01 7D B4 CA 34 25 DD 6E FB DD    .. ....}..4%.n..
004060:  66 FC 11 01 00 19 EB 2A A5 63 CD 99 01 7D B4 28    f......*.c...}.(
004070:  03 21 01 00 7D B4 CA 3B 25 18 BF 2A A5 63 E5 2A    .!..}..;%..*.c.*
004080:  A3 63 E5 CD 2B 0C C3 61 28 2A A1 63 ED 5B D3 63    £c..+..a(*.c.[.c
004090:  CD 88 01 7D B4 CA 67 25 2A A1 63 22 9F 63 21 01    ...}..g%*.c".c!.
0040A0:  00 22 A3 63 C3 E8 25 21 01 00 DD 75 FB DD 74 FC    ."£c..%!...u..t.
0040B0:  DD 6E FB DD 66 FC 11 16 00 CD 99 01 7D B4 CA 9F    .n..f.......}...
0040C0:  25 C3 93 25 21 FB FF DD E5 C1 09 01 01 00 CD 7D    %..%!..........}
0040D0:  02 18 DD 2A A1 63 E5 CD E6 1E 22 A1 63 18 E5 2A    ...*.c....".c..*
0040E0:  A1 63 E5 CD B1 19 22 A1 63 2A A1 63 22 9F 63 21    .c....".c*.c".c!
0040F0:  01 00 DD 75 FB DD 74 FC DD 6E FB DD 66 FC ED 5B    ...u..t..n..f..[
004100:  E0 2D 2A 9F 63 E5 CD 02 36 11 01 00 19 EB 2A 9F    .-*.c...6.....*.
004110:  63 19 22 9F 63 21 A3 63 01 01 00 CD 7D 02 18 AF    c.".c!£c....}...
004120:  DD 6E 04 DD 66 05 11 0A 00 CD 0B 01 EB 2A 48 A1    .n..f........*H.
004130:  19 11 08 00 19 5E 23 56 2A D3 63 19 11 01 00 19    .....^#V*.c.....
004140:  ED 5B 9F 63 B7 ED 52 22 A5 63 11 02 00 C3 C4 00    .[.c..R".c......
004150:  21 F1 FF CD 8F 00 21 03 00 E5 CD 70 33 21 0D 00    !.....!....p3!..
004160:  E5 CD 0B 0A DD 75 F8 DD 74 F9 11 00 00 CD 88 01    .....u..t.......
004170:  7D B4 C2 4C 2E 21 0D 00 E5 CD 0B 0A DD 75 FA DD    }..L.!.......u..
004180:  74 FB 11 00 00 CD 88 01 7D B4 28 03 21 01 00 7D    t.......}.(.!..}
004190:  B4 CA 73 2E C3 5A 2E 25 73 00 21 57 2E E5 2A 6A    ..s..Z.%s.!W..*j
0041A0:  A1 E5 01 06 00 C5 CD 16 03 21 01 00 E5 CD 37 38    .........!....78
0041B0:  C3 99 2E 21 C2 63 E5 C3 7C 2E 72 00 21 7A 2E E5    ...!.c..|.r.!z..
0041C0:  CD 46 00 DD 75 FE DD 74 FF 11 00 00 CD 88 01 7D    .F..u..t.......}
0041D0:  B4 CA 99 2E CD 64 31 18 DA 21 02 00 E5 CD 70 33    .....d1..!....p3
0041E0:  C3 A9 2E 25 73 20 25 73 00 21 A3 2E E5 2A 6C A1    ...%s %s.!£..*l.
0041F0:  E5 21 C2 63 E5 01 08 00 C5 CD 16 03 21 03 00 E5    .!.c........!...
004200:  CD 70 33 DD 6E FE DD 66 FF E5 CD 49 00 E5 CD 0B    .p3.n..f...I....
004210:  02 DD 75 F3 26 00 11 FF 00 CD 91 01 7D B4 CA 68    ..u.&.......}..h
004220:  30 DD 6E F3 26 00 CD 89 02 59 30 DD 6E FE DD 66    0.n.&....Y0.n..f
004230:  FF E5 C3 FE 2E 20 25 31 32 73 20 0D 20 00 21 F5    ..... %12s . .!.
004240:  2E E5 21 A7 63 E5 01 08 00 C5 CD 9E 04 11 01 00    ..!.c...........
004250:  CD 91 01 7D B4 CA 39 2F C3 23 2F 25 73 20 25 73    ...}..9/.#/%s %s
004260:  0A 0D 00 21 1B 2F E5 2A 6E A1 E5 2A 70 A1 E5 01    ...!./.*n..*p...
004270:  08 00 C5 CD 16 03 C3 94 2F 21 00 00 DD 75 F1 DD    ......../!...u..
004280:  74 F2 DD 6E F1 DD 66 F2 11 0C 00 CD 99 01 7D B4    t..n..f.......}.
004290:  CA 94 2F C3 65 2F 21 F1 FF DD E5 C1 09 01 01 00    ../.e/!.........
0042A0:  CD 7D 02 18 DD DD 6E F1 DD 66 F2 EB 21 A7 63 19    .}....n..f..!.c.
0042B0:  6E 26 00 11 0D 00 CD 88 01 7D B4 CA 92 2F DD 6E    n&.......}.../.n
0042C0:  F1 DD 66 F2 EB 21 A7 63 19 E5 21 00 00 D1 7D 12    ..f..!.c..!...}.
0042D0:  26 00 18 C2 C3 65 30 DD 6E FE DD 66 FF E5 C3 B8    &....e0.n..f....
0042E0:  2F 20 25 31 32 73 20 25 64 20 25 64 20 25 31 32    / %12s %d %d %12
0042F0:  73 20 25 64 20 0D 20 00 21 A1 2F E5 DD 6E F8 DD    s %d . .!./..n..
004300:  A3 63 CD 99 01 7D B4 CA E8 25 C3 DC 25 21 FB FF    £c...}...%..%!..
004310:  DD E5 C1 09 01 01 00 CD 7D 02 18 DC 2A 9F 63 E5    ........}...*.c.
004320:  CD 6D 1F 22 9F 63 18 E5 2A A5 63 E5 2A A3 63 E5    .m.".c..*.c.*£c.
004330:  CD 2B 0C C3 61 28 CD 71 28 ED 5B DB A1 CD B6 01    .+..a(.q(.[.....
004340:  7D B4 CA 18 26 21 16 00 22 A3 63 CD 71 28 E5 CD    }...&!.."£c.q(..
004350:  E6 1E 22 9F 63 C3 99 26 21 01 00 DD 75 FB DD 74    ..".c..&!...u..t
004360:  FC DD 6E FB DD 66 FC 11 16 00 CD 99 01 7D B4 CA    ..n..f.......}..
004370:  50 26 C3 44 26 21 FB FF DD E5 C1 09 01 01 00 CD    P&.D&!..........
004380:  7D 02 18 DD 2A A1 63 E5 CD 6D 1F 22 A1 63 18 E5    }...*.c..m.".c..
004390:  2A A1 63 E5 CD B1 19 22 A1 63 2A A1 63 22 9F 63    *.c....".c*.c".c
0043A0:  21 01 00 DD 75 FB DD 74 FC DD 6E FB DD 66 FC ED    !...u..t..n..f..
0043B0:  5B A3 63 CD 99 01 7D B4 CA 99 26 C3 8D 26 21 FB    [£c...}...&..&!.
0043C0:  FF DD E5 C1 09 01 01 00 CD 7D 02 18 DC 2A 9F 63    .........}...*.c
0043D0:  E5 CD 6D 1F 22 9F 63 18 E5 2A A5 63 E5 2A A3 63    ..m.".c..*.c.*£c
0043E0:  E5 CD 2B 0C C3 61 28 21 01 00 22 A5 63 21 01 00    ..+..a(!..".c!..
0043F0:  22 A3 63 2A A1 63 ED 5B D3 63 CD 91 01 7D B4 CA    "£c*.c.[.c...}..
004400:  CC 26 2A D3 63 E5 CD B1 19 22 A1 63 2A A1 63 22    .&*.c....".c*.c"
004410:  9F 63 2A A5 63 E5 2A A3 63 E5 CD 2B 0C C3 61 28    .c*.c.*£c..+..a(
004420:  21 01 00 22 A5 63 CD 71 28 ED 5B DB A1 CD B0 01    !..".c.q(.[.....
004430:  7D B4 CA 05 27 2A DB A1 11 01 00 B7 ED 52 E5 CD    }...'*.......R..
004440:  B1 19 22 A1 63 CD 71 28 E5 CD E6 1E 22 9F 63 21    ..".c.q(....".c!
004450:  16 00 22 A3 63 2A A5 63 E5 2A A3 63 E5 CD 2B 0C    .."£c*.c.*£c..+.
004460:  C3 61 28 21 01 00 22 A5 63 2A A5 63 E5 2A A3 63    .a(!..".c*.c.*£c
004470:  E5 CD 2B 0C C3 61 28 2A 9F 63 ED 5B DB A1 CD B6    ..+..a(*.c.[....
004480:  01 7D B4 CA 4F 27 21 01 00 22 A5 63 C3 5D 27 2A    .}..O'!..".c.]'*
004490:  9F 63 E5 CD 02 36 11 01 00 19 22 A5 63 2A A5 63    .c...6....".c*.c
0044A0:  E5 2A A3 63 E5 CD 2B 0C C3 61 28 2A A1 63 ED 5B    .*£c..+..a(*.c.[
0044B0:  D3 63 CD AF 01 7D B4 CA AC 27 CD CC 28 2A A3 63    .c...}...'..(*£c
0044C0:  11 16 00 CD 88 01 7D B4 CA 98 27 2A 9F 63 E5 CD    ......}...'*.c..
0044D0:  E6 1E 22 9F 63 C3 A1 27 21 A3 63 01 01 00 CD 7D    ..".c..'!£c....}
0044E0:  02 2A A5 63 E5 2A A3 63 E5 CD 2B 0C C3 61 28 CD    .*.c.*£c..+..a(.
0044F0:  71 28 ED 5B DB A1 CD B0 01 7D B4 CA F9 27 CD 19    q(.[.....}...'..
004500:  66 F9 E5 21 F4 FF DD E5 C1 09 E5 21 F6 FF DD E5    f..!.......!....
004510:  C1 09 E5 DD 6E FA DD 66 FB E5 21 FC FF DD E5 C1    ....n..f..!.....
004520:  09 E5 01 10 00 C5 CD 9E 04 11 05 00 CD 91 01 7D    ...............}
004530:  B4 CA 15 30 C3 FF 2F 25 73 20 25 73 0A 0D 00 21    ...0../%s %s...!
004540:  F7 2F E5 2A 6E A1 E5 2A 72 A1 E5 01 08 00 C5 CD    ./.*n..*r.......
004550:  16 03 C3 32 30 DD 6E F8 DD 66 F9 E5 DD 6E F4 DD    ...20.n..f...n..
004560:  66 F5 E5 CD 45 15 E5 21 F4 FF DD E5 C1 09 E5 CD    f...E..!........
004570:  2A 12 C3 65 30 C3 40 30 25 73 20 25 73 0A 0D 00    *..e0.@0%s %s...
004580:  21 38 30 E5 2A 6E A1 E5 2A 74 A1 E5 01 08 00 C5    !80.*n..*t......
004590:  CD 16 03 C3 65 30 C3 65 30 EB 2E 46 00 97 2F 42    ....e0.e0..F../B
0045A0:  00 00 00 18 D0 C3 C3 2E DD 6E FE DD 66 FF E5 CD    .........n..f...
0045B0:  4F 00 DD 6E F8 DD 66 F9 E5 CD 92 36 DD 6E FA DD    O..n..f....6.n..
0045C0:  66 FB E5 CD 92 36 2A A7 63 26 00 7D B4 CA BF 30    f....6*.c&.}...0
0045D0:  21 A7 63 E5 CD CF 30 7D B4 CA B8 30 C3 A2 30 25    !.c...0}...0..0%
0045E0:  73 00 21 9F 30 E5 2A 76 A1 E5 01 06 00 C5 CD 16    s.!.0.*v........
0045F0:  03 21 01 00 E5 CD 37 38 2A CF 63 E5 CD 99 10 21    .!....78*.c....!
004600:  02 00 E5 CD 70 33 CD 52 0C 11 00 00 C3 C4 00 21    ....p3.R.......!
004610:  FE FF CD 8F 00 DD 6E 04 DD 66 05 E5 CD 4F 17 DD    ......n..f...O..
004620:  75 FE DD 74 FF DD 6E FE DD 66 FF CD 89 02 56 31    u..t..n..f....V1
004630:  C3 F8 30 25 73 20 20 00 21 F3 30 E5 2A 78 A1 E5    ..0%s  .!.0.*x..
004640:  01 06 00 C5 CD 16 03 21 01 00 11 02 00 C3 C4 00    .......!........
004650:  C3 1A 31 0A 0D 25 73 20 20 00 21 13 31 E5 2A 7A    ..1..%s  .!.1.*z
004660:  A1 E5 01 06 00 C5 CD 16 03 21 02 00 18 DC 2A CF    .........!....*.
004670:  63 E5 2A D9 A1 E5 2A A5 63 E5 2A A3 63 E5 2A A1    c.*...*.c.*£c.*.
004680:  63 E5 CD 6A 0F DD 6E 04 DD 66 05 22 D9 A1 21 00    c..j..n..f."..!.
004690:  00 18 B7 C3 62 31 F0 30 FF FF 10 31 FE FF 00 00    ....b1.0...1....
0046A0:  18 CC 18 A6 21 FF FF CD 8F 00 C3 7A 31 0A 0D 25    ....!......z1..%
0046B0:  73 20 25 73 0A 0D 0A 25 73 00 21 6D 31 E5 2A 7C    s %s...%s.!m1.*|
0046C0:  A1 E5 21 C2 63 E5 2A 7E A1 E5 01 0A 00 C5 CD 16    ..!.c.*~........
0046D0:  03 C3 97 31 52 51 00 21 94 31 E5 CD 55 00 E5 CD    ...1RQ.!.1..U...
0046E0:  0B 02 DD 75 FF 26 00 E5 CD 3C 36 11 00 00 CD 88    ...u.&...<6.....
0046F0:  01 7D B4 CA B8 31 18 D9 DD 6E FF 26 00 11 51 00    .}...1...n.&..Q.
004700:  29 2A A3 63 11 01 00 CD 88 01 7D B4 CA E5 27 2A    )*£c......}...'*
004710:  9F 63 E5 CD 02 36 11 01 00 19 EB 2A 9F 63 19 22    .c...6.....*.c."
004720:  9F 63 C3 EE 27 21 A3 63 01 FF FF CD 7D 02 2A A5    .c..'!£c....}.*.
004730:  63 E5 2A A3 63 E5 CD 2B 0C C3 61 28 C3 61 28 8C    c.*£c..+..a(.a(.
004740:  20 51 00 8F 20 3C 00 8F 20 2C 00 8F 20 42 00 95     Q.. <.. ,.. B..
004750:  20 48 00 CB 20 46 00 03 21 0C 00 1B 21 50 00 3A     H.. F..!...!P.:
004760:  21 4F 00 40 21 0D 00 46 21 F0 00 98 21 F1 00 21    !O.@!..F!...!..!
004770:  22 F2 00 47 22 F3 00 6B 22 F6 00 D1 23 F7 00 49    "..G"..k"...#..I
004780:  25 F8 00 F6 25 F9 00 A7 26 1B 00 E0 26 1D 00 23    %...%...&...&..#
004790:  27 FA 00 37 27 FB 00 6B 27 F4 00 AF 27 F5 00 00    '..7'..k'...'...
0047A0:  00 C3 38 20 21 00 00 E5 CD 37 38 11 00 00 C3 C4    ..8 !....78.....
0047B0:  00 21 FC FF CD 8F 00 2A A1 63 DD 75 FC DD 74 FD    .!.....*.c.u..t.
0047C0:  21 00 00 DD 75 FE DD 74 FF DD 6E FE DD 66 FF 11    !...u..t..n..f..
0047D0:  16 00 CD 99 01 7D B4 CA BE 28 C3 AC 28 21 FE FF    .....}...(..(!..
0047E0:  DD E5 C1 09 01 01 00 CD 7D 02 18 DD DD 6E FC DD    ........}....n..
0047F0:  66 FD E5 CD 6D 1F DD 75 FC DD 74 FD 18 DF DD 6E    f...m..u..t....n
004800:  FC DD 66 FD 11 00 00 C3 C4 00 18 F8 21 00 00 CD    ..f.........!...
004810:  8F 00 2A A1 63 E5 CD E6 1E 22 A1 63 21 01 00 E5    ..*.c....".c!...
004820:  21 01 00 E5 CD 2B 0C 21 0B 00 E5 CD 6D 00 C3 F5    !....+.!....m...
004830:  28 0D 25 73 00 21 F1 28 E5 2A A1 63 E5 01 06 00    (.%s.!.(.*.c....
004840:  C5 CD 16 03 2A A1 63 E5 21 00 00 E5 21 01 00 E5    ....*.c.!...!...
004850:  CD 0B 1C 11 00 00 C3 C4 00 21 FE FF CD 8F 00 21    .........!.....!
004860:  01 00 E5 21 16 00 E5 CD 2B 0C CD 71 28 DD 75 FE    ...!....+..q(.u.
004870:  DD 74 FF C3 3B 29 0A 0D 25 73 00 21 36 29 E5 DD    .t..;)..%s.!6)..
004880:  6E FE DD 66 FF E5 01 06 00 C5 CD 16 03 DD 6E FE    n..f..........n.
004890:  DD 66 FF E5 21 15 00 E5 21 16 00 E5 CD 0B 1C 2A    .f..!...!......*
0048A0:  A1 63 E5 CD 02 36 11 01 00 19 EB 2A A1 63 19 22    .c...6.....*.c."
0048B0:  A1 63 11 00 00 C3 C4 00 21 00 00 CD 8F 00 21 04    .c......!.....!.
0048C0:  00 E5 CD 6D 00 21 02 00 E5 CD 6D 00 21 44 00 E5    ...m.!....m.!D..
0048D0:  21 01 00 E5 21 50 00 E5 21 02 00 E5 CD C5 0C 21    !...!P..!......!
0048E0:  00 00 E5 CD A8 0C 21 01 00 E5 CD 8B 0C CD 52 0C    ......!.......R.
0048F0:  C3 CF 29 25 63 4C 6F 6F 6D 20 76 33 2E 32 20 62    ..)%cLoom v3.2 b
004900:  CD 88 01 7D B4 CA CF 31 21 00 00 E5 CD 37 38 CD    ...}...1!....78.
004910:  52 0C 11 00 00 C3 C4 00 21 F8 FF CD 8F 00 2A D9    R.......!.....*.
004920:  A1 E5 DD 6E 04 DD 66 05 E5 CD 4B 0D 11 00 00 CD    ...n..f...K.....
004930:  88 01 7D B4 CA 1E 32 21 03 00 E5 CD 70 33 2A CF    ..}...2!....p3*.
004940:  63 E5 2A D9 A1 E5 2A A5 63 E5 2A A3 63 E5 2A A1    c.*...*.c.*£c.*.
004950:  63 E5 CD 6A 0F 21 01 00 11 02 00 C3 C4 00 21 00    c..j.!........!.
004960:  00 DD 75 F8 DD 74 F9 21 02 00 E5 CD 70 33 C3 38    ..u..t.!....p3.8
004970:  32 0C 25 73 20 25 73 00 21 31 32 E5 2A 6C A1 E5    2.%s %s.!12.*l..
004980:  DD 6E 04 DD 66 05 E5 01 08 00 C5 CD 16 03 21 03    .n..f.........!.
004990:  00 E5 CD 70 33 DD 6E 04 DD 66 05 DD 75 FE DD 74    ...p3.n..f..u..t
0049A0:  FF DD 6E FE DD 66 FF E5 CD CF 30 DD 75 FC DD 74    ..n..f....0.u..t
0049B0:  FD DD 6E FC DD 66 FD CD 89 02 3A 33 21 01 00 DD    ..n..f....:3!...
0049C0:  75 F8 DD 74 F9 C3 48 33 21 00 00 DD 75 FA DD 74    u..t..H3!...u..t
0049D0:  FB C3 97 32 25 73 00 21 94 32 E5 2A 80 A1 E5 01    ...2%s.!.2.*....
0049E0:  06 00 C5 CD 16 03 C3 AC 32 59 4E 00 21 A9 32 E5    ........2YN.!.2.
0049F0:  CD 55 00 E5 CD 0B 02 DD 75 FA DD 74 FB E5 CD 3C    .U......u..t...<
004A00:  36 11 00 00 CD 88 01 7D B4 CA CE 32 18 D8 DD 6E    6......}...2...n
004A10:  FA DD 66 FB 11 4E 00 CD 88 01 7D B4 CA EF 32 21    ..f..N....}...2!
004A20:  00 00 DD 75 FC DD 74 FD 2A A1 63 E5 CD B1 19 C3    ...u..t.*.c.....
004A30:  48 33 C3 FB 32 25 73 0D 0A 20 00 21 F5 32 E5 2A    H3..2%s.. .!.2.*
004A40:  82 A1 E5 01 06 00 C5 CD 16 03 2A D9 A1 22 D7 A1    ..........*.."..
004A50:  21 B4 63 22 D9 A1 2A D7 A1 E5 CD D8 31 2A CF 63    !.c"..*.....1*.c
004A60:  E5 CD 99 10 21 00 00 DD 75 FC DD 74 FD 2A A1 63    ....!...u..t.*.c
004A70:  E5 CD B1 19 C3 48 33 C3 48 33 7C 32 00 00 88 32    .....H3.H3|2...2
004A80:  01 00 F2 32 02 00 00 00 DD 6E FC DD 66 FD 7D B4    ...2.....n..f.}.
004A90:  C2 61 32 21 02 00 E5 CD 70 33 CD 52 0C 21 01 00    .a2!....p3.R.!..
004AA0:  E5 CD 70 33 DD 6E F8 DD 66 F9 C3 18 32 C3 18 32    ..p3.n..f...2..2
004AB0:  21 00 00 CD 8F 00 DD 6E 04 DD 66 05 CD 89 02 1F    !......n..f.....
004AC0:  34 21 01 00 E5 21 01 00 E5 21 43 00 E5 21 02 00    4!...!...!C..!..
004AD0:  E5 CD C5 0C 21 00 00 E5 CD A8 0C 21 01 00 E5 CD    ....!......!....
004AE0:  8B 0C C3 31 34 21 01 00 E5 21 03 00 E5 21 50 00    ...14!...!...!P.
004AF0:  E5 21 18 00 E5 CD C5 0C 21 01 00 E5 CD A8 0C 21    .!......!......!
004B00:  79 25 63 53 2E 20 50 68 69 6C 6C 69 70 73 00 21    y%cS. Phillips.!
004B10:  B3 29 E5 21 D3 00 E5 21 D3 00 E5 01 08 00 C5 CD    .).!...!........
004B20:  16 03 21 00 00 E5 CD 70 33 21 01 00 E5 CD A8 0C    ..!....p3!......
004B30:  21 00 00 E5 CD 8B 0C C3 FD 29 25 73 00 21 FA 29    !........)%s.!.)
004B40:  E5 2A 5E A1 E5 01 06 00 C5 CD 16 03 21 01 00 E5    .*^.........!...
004B50:  CD 70 33 CD 52 0C 21 02 00 E5 CD 70 33 CD 52 0C    .p3.R.!....p3.R.
004B60:  11 00 00 C3 C4 00 21 F8 FF CD 8F 00 2A CF 63 E5    ......!.....*.c.
004B70:  CD BB 11 7D B4 CA 5F 2A 21 02 00 E5 CD 70 33 C3    ...}.._*!....p3.
004B80:  46 2A 0C 25 73 00 21 42 2A E5 2A 60 A1 E5 01 06    F*.%s.!B*.*`....
004B90:  00 C5 CD 16 03 21 01 00 E5 CD 70 33 C3 3C 2B 2A    .....!....p3.<+*
004BA0:  CF 63 E5 21 FE FF DD E5 C1 09 E5 21 FC FF DD E5    .c.!.......!....
004BB0:  C1 09 E5 21 FA FF DD E5 C1 09 E5 21 F8 FF DD E5    ...!.......!....
004BC0:  C1 09 E5 CD 49 11 DD 6E FE DD 66 FF E5 CD D8 31    ....I..n..f....1
004BD0:  7D B4 CA 19 2B DD 6E FC DD 66 FD 22 A5 63 DD 6E    }...+.n..f.".c.n
004BE0:  FA DD 66 FB 22 A3 63 DD 6E F8 DD 66 F9 22 A1 63    ..f."£c.n..f.".c
004BF0:  2A A1 63 22 9F 63 2A A1 63 22 9F 63 DD 6E FA DD    *.c".c*.c".c.n..
004C00:  66 FB 11 01 00 CD 98 01 7D B4 CA 08 2B C3 DF 2A    f.......}...+..*
004C10:  21 FA FF DD E5 C1 09 01 FF FF CD 7D 02 18 DD 2A    !..........}...*
004C20:  9F 63 ED 5B DB A1 CD B0 01 7D B4 CA FD 2A 2A 9F    .c.[.....}...**.
004C30:  63 E5 CD 02 36 EB 2A 9F 63 19 22 9F 63 21 9F 63    c...6.*.c.".c!.c
004C40:  01 01 00 CD 7D 02 18 C8 2A CF 63 E5 CD 99 10 2A    ....}...*.c....*
004C50:  A1 63 E5 CD B1 19 C3 3C 2B 2A CF 63 E5 DD 6E FE    .c.....<+*.c..n.
004C60:  DD 66 FF E5 DD 6E FC DD 66 FD E5 DD 6E FA DD 66    .f...n..f...n..f
004C70:  FB E5 DD 6E F8 DD 66 F9 E5 CD 6A 0F 2A A5 63 E5    ...n..f...j.*.c.
004C80:  2A A3 63 E5 CD 2B 0C 11 00 00 C3 C4 00 21 FE FF    *£c..+.......!..
004C90:  CD 8F 00 21 02 00 E5 CD 70 33 2A 9F 63 E5 2A A5    ...!....p3*.c.*.
004CA0:  63 11 01 00 B7 ED 52 E5 CD A5 1E DD 75 FE DD 74    c.....R.....u..t
004CB0:  FF 11 FF FF CD 88 01 7D B4 CA 95 2B C3 83 2B 0C    .......}...+..+.
004CC0:  25 73 00 21 7F 2B E5 2A 62 A1 E5 01 06 00 C5 CD    %s.!.+.*b.......
004CD0:  16 03 C3 B5 2B C3 9F 2B 0C 25 73 20 25 64 00 21    ....+..+.%s %d.!
004CE0:  98 2B E5 2A 64 A1 E5 DD 6E FE DD 66 FF E5 01 08    .+.*d...n..f....
004CF0:  00 C5 CD 16 03 21 01 00 E5 CD 70 33 2A A5 63 E5    .....!....p3*.c.
004D00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
004D10:  04 00 01 00 02 09 4E E5 04 00 C4 02 00 00 00 02    ......N.........
004D20:  04 00 C9 02 00 00 00 02 04 00 C5 02 00 00 00 02    ................
004D30:  04 00 C1 02 00 00 00 02 04 00 C6 02 00 00 00 02    ................
004D40:  04 00 C2 02 00 00 00 02 04 00 C7 02 00 00 00 02    ................
004D50:  04 00 C3 02 00 00 00 02 04 00 C8 02 00 00 00 02    ................
004D60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004D70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004D80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004D90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004DA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004DB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004DC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004DD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004DE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004DF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004E00:  A8 68 12 EA 6F 73 70 EC 98 9B 6C 0C 38 F6 85 FC    .h..osp...l.8...
004E10:  07 66 F6 18 DC 7B 71 28 70 3E D1 83 DE 74 2C 30    .f...{q(p>...t,0
004E20:  D0 CB 0F F0 63 27 F0 E6 B4 B7 64 95 60 88 E1 BC    ....c'....d.`...
004E30:  81 E0 37 80 EA A4 11 73 F3 1F DB 17 C1 AF D4 0A    ..7....s........
004E40:  B3 28 F4 4A 2C B2 14 D8 B2 FC 89 E0 DC B7 36 D9    .(.J,.........6.
004E50:  2B 34 48 D0 61 8B DE 59 AB 9A 9C 32 B3 C5 09 97    +4H.a..Y...2....
004E60:  72 48 43 88 03 86 95 84 FC 9B E7 CD 28 AA 0A 12    rHC.........(...
004E70:  EA 35 BE F8 EF C9 B5 C3 F1 0B 4A 6C 89 9F D8 D0    .5........Jl....
004E80:  0A 75 E2 EA 6C CC 9E F6 03 44 16 00 03 22 E8 09    .u..l....D..."..
004E90:  03 22 F5 09 03 22 FE 09 03 44 1D 00 03 44 46 00    ."..."...D...DF.
004EA0:  03 44 0D 00 03 4C 64 02 03 44 67 3D 00 00 11 FF    .D...Ld..Dg=....
004EB0:  69 6E 74 20 20 20 20 20 00 00 12 FF 6C 6F 6E 67    int     ....long
004EC0:  20 20 20 20 00 00 13 FF 72 65 67 69 73 74 65 72        ....register
004ED0:  00 00 14 FF 72 65 74 75 72 6E 20 20 00 00 15 FF    ....return  ....
004EE0:  73 68 6F 72 74 20 20 20 00 00 16 FF 73 69 7A 65    short   ....size
004EF0:  6F 03 00 A3 63 01 00 01 01 00 D2 63 BF 02 00 46    o..£c......c...F
004F00:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004F10:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004F20:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004F30:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004F40:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004F50:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004F60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004F70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004F80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004F90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004FA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004FB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004FC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004FD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004FE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
004FF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
005000:  23 57 65 6C 63 6F 6D 65 20 74 6F 20 74 68 65 20    #Welcome to the 
005010:  50 72 6F 67 72 61 6D 6D 65 72 73 27 20 50 61 74    Programmers' Pat
005020:  63 68 20 64 69 73 63 0D 0A 50 52 4F 47 52 41 4D    ch disc..PROGRAM
005030:  4D 45 52 53 27 20 50 41 54 43 48 0D 0A 42 79 20    MERS' PATCH..By 
005040:  53 74 65 70 68 65 6E 2C 20 4D 61 74 74 68 65 77    Stephen, Matthew
005050:  20 61 6E 64 20 48 69 6C 61 72 79 20 50 68 69 6C     and Hilary Phil
005060:  6C 69 70 73 0D 0A 0D 0A 54 68 65 20 50 72 6F 67    lips....The Prog
005070:  72 61 6D 6D 65 72 73 27 20 50 61 74 63 68 20 64    rammers' Patch d
005080:  69 73 63 20 66 65 61 74 75 72 65 73 20 61 6C 6C    isc features all
005090:  20 74 68 65 20 61 72 74 69 63 6C 65 73 20 61 6E     the articles an
0050A0:  64 20 70 72 6F 67 72 61 6D 73 20 66 72 6F 6D 20    d programs from 
0050B0:  74 68 65 0D 0A 61 63 63 6C 61 69 6D 65 64 20 57    the..acclaimed W
0050C0:  41 43 43 49 20 73 65 72 69 65 73 2E 20 20 54 68    ACCI series.  Th
0050D0:  65 20 66 69 6C 65 73 20 6F 6E 20 74 68 69 73 20    e files on this 
0050E0:  64 69 73 63 20 61 72 65 20 63 6F 70 79 72 69 67    disc are copyrig
0050F0:  68 74 20 53 74 65 70 68 65 6E 2C 20 4D 61 74 74    ht Stephen, Matt
005100:  68 65 77 0D 0A 61 6E 64 20 48 69 6C 61 72 79 20    hew..and Hilary 
005110:  50 68 69 6C 6C 69 70 73 2E 20 20 50 65 72 6D 69    Phillips.  Permi
005120:  73 73 69 6F 6E 20 69 73 20 67 72 61 6E 74 65 64    ssion is granted
005130:  20 74 6F 20 64 69 73 74 72 69 62 75 74 65 20 63     to distribute c
005140:  6F 70 69 65 73 20 6F 66 20 74 68 65 0D 0A 63 6F    opies of the..co
005150:  6D 70 6C 65 74 65 20 64 69 73 63 2C 20 74 6F 20    mplete disc, to 
005160:  70 72 69 6E 74 20 6F 75 74 20 74 68 65 20 61 72    print out the ar
005170:  74 69 63 6C 65 73 20 61 6E 64 20 6C 69 73 74 69    ticles and listi
005180:  6E 67 73 20 66 6F 72 20 70 65 72 73 6F 6E 61 6C    ngs for personal
005190:  20 75 73 65 2C 20 61 6E 64 20 74 6F 0D 0A 69 6E     use, and to..in
0051A0:  63 6F 72 70 6F 72 61 74 65 20 74 68 65 20 70 72    corporate the pr
0051B0:  6F 67 72 61 6D 6D 69 6E 67 20 65 78 61 6D 70 6C    ogramming exampl
0051C0:  65 73 20 69 6E 20 79 6F 75 72 20 6F 77 6E 20 70    es in your own p
0051D0:  72 6F 67 72 61 6D 73 2E 20 20 41 4C 4C 20 4F 54    rograms.  ALL OT
0051E0:  48 45 52 20 52 49 47 48 54 53 0D 0A 52 45 53 45    HER RIGHTS..RESE
0051F0:  52 56 45 44 2E 0D 0A 0D 0A 59 6F 75 20 63 61 6E    RVED.....You can
005200:  50 2C EE AE 93 37 3C A8 D4 DF 79 48 25 D4 6E B1    P,...7<...yH%.n.
005210:  12 44 00 33 37 50 8C 03 86 73 CF A1 23 39 69 74    .D.37P...s..#9it
005220:  CE 8F 01 B4 6D 6B 97 A8 D3 F1 00 EC 07 B5 F0 43    ....mk.........C
005230:  F9 71 2A CE BE A4 11 73 D3 3F C9 E8 BF 3F D6 02    .q*....s.?...?..
005240:  FD 6F F4 4A 0C 92 07 27 D3 66 9C EC C8 AA 20 DF    .o.J...'.f.... .
005250:  4E 46 5C 2F 07 11 D8 49 AD 81 CE 7C 93 E5 1C 68    NF\/...I...|...h
005260:  14 DF 5F 92 18 D4 C1 84 DC BB F1 32 4D 3C 03 1E    .._........2M<..
005270:  FF 53 D1 58 8C 72 D6 C3 F0 0A 9F 0F E6 FE 67 96    .S.X.r........g.
005280:  AB 2C ED DA 19 35 3F A4 3A 86 75 0C 3B 2F CC EF    .,...5?.:.u.;/..
005290:  16 00 03 22 E8 09 03 22 F5 09 03 22 FE 09 03 44    ..."..."..."...D
0052A0:  1D 00 03 44 0D 00 03 4C 64 02 03 44 67 3D 00 00    ...D...Ld..Dg=..
0052B0:  11 FF 69 6E 74 20 20 20 20 20 00 00 12 FF 6C 6F    ..int     ....lo
0052C0:  6E 67 20 20 20 20 00 00 13 FF 72 65 67 69 73 74    ng    ....regist
0052D0:  65 72 00 00 14 FF 72 65 74 75 72 6E 20 20 00 00    er....return  ..
0052E0:  15 FF 73 68 6F 72 74 20 20 20 00 00 16 FF 73 69    ..short   ....si
0052F0:  7A 65 6F 03 00 BA 63 01 00 01 07 00 D0 63 BF 00    zeo...c......c..
005300:  2B 31 0D 0A 31 36 30 20 49 46 20 49 4E 4B 45 59    +1..160 IF INKEY
005310:  28 32 31 29 3E 2D 31 20 54 48 45 4E 20 61 64 64    (21)>-1 THEN add
005320:  78 3D 61 64 64 78 2A 34 0D 0A 31 37 30 20 61 64    x=addx*4..170 ad
005330:  64 78 3D 33 2A 61 64 64 78 0D 0A 31 38 30 20 49    dx=3*addx..180 I
005340:  46 20 49 4E 4B 45 59 28 32 29 3E 2D 31 20 54 48    F INKEY(2)>-1 TH
005350:  45 4E 20 61 64 64 79 3D 2D 31 0D 0A 31 39 30 20    EN addy=-1..190 
005360:  49 46 20 49 4E 4B 45 59 28 30 29 3E 2D 31 20 54    IF INKEY(0)>-1 T
005370:  48 45 4E 20 61 64 64 79 3D 61 64 64 79 2B 31 0D    HEN addy=addy+1.
005380:  0A 32 30 30 20 49 46 20 49 4E 4B 45 59 28 32 31    .200 IF INKEY(21
005390:  29 3E 2D 31 20 54 48 45 4E 20 61 64 64 79 3D 61    )>-1 THEN addy=a
0053A0:  64 64 79 2A 32 0D 0A 32 31 30 20 61 64 64 79 3D    ddy*2..210 addy=
0053B0:  33 2A 61 64 64 79 0D 0A 32 32 30 20 78 3D 78 2B    3*addy..220 x=x+
0053C0:  61 64 64 78 3A 79 3D 79 2B 61 64 64 79 0D 0A 32    addx:y=y+addy..2
0053D0:  32 35 20 52 45 4D 20 43 68 65 63 6B 20 78 20 26    25 REM Check x &
0053E0:  20 79 20 61 72 65 20 6F 6E 20 73 63 72 65 65 6E     y are on screen
0053F0:  0D 0A 32 33 30 20 49 46 20 78 3E 36 33 32 20 54    ..230 IF x>632 T
005400:  00 00 E5 CD 8B 0C C3 31 34 21 01 00 E5 21 19 00    .......14!...!..
005410:  E5 21 50 00 E5 21 19 00 E5 CD C5 0C 21 00 00 E5    .!P..!......!...
005420:  CD A8 0C 21 01 00 E5 CD 8B 0C C3 31 34 21 15 00    ...!.......14!..
005430:  E5 21 0B 00 E5 21 3C 00 E5 21 0D 00 E5 CD C5 0C    .!...!<..!......
005440:  21 00 00 E5 CD A8 0C 21 01 00 E5 CD 8B 0C 21 32    !......!......!2
005450:  00 E5 21 03 00 E5 CD 2B 0C C3 31 34 C3 31 34 81    ..!....+..14.14.
005460:  33 00 00 A5 33 01 00 C9 33 02 00 ED 33 03 00 00    3...3...3...3...
005470:  00 11 02 00 C3 C4 00 21 FF FF CD 8F 00 DD 6E 04    .......!......n.
005480:  DD 66 05 6E 26 00 11 00 00 CD 91 01 7D B4 CA EE    .f.n&.......}...
005490:  34 DD 6E 04 DD 66 05 E5 CD 11 0E 11 00 00 CD 88    4.n..f..........
0054A0:  01 7D B4 CA DE 34 C3 71 34 0C 25 73 20 20 25 73    .}...4.q4.%s  %s
0054B0:  00 21 69 34 E5 2A 5A A1 E5 2A 7E A1 E5 01 08 00    .!i4.*Z..*~.....
0054C0:  C5 CD 16 03 C3 8A 34 52 51 00 21 87 34 E5 CD 55    ......4RQ.!.4..U
0054D0:  00 E5 CD 0B 02 DD 75 FF 26 00 E5 CD 3C 36 11 00    ......u.&...<6..
0054E0:  00 CD 88 01 7D B4 CA AB 34 18 D9 CD 52 0C DD 6E    ....}...4...R..n
0054F0:  FF 26 00 CD 89 02 D4 34 21 04 00 DD E5 C1 09 01    .&.....4!.......
005500:  FF FF CD 7D 02 C3 DE 34 21 FF FF 11 02 00 C3 C4    ...}...4!.......
005510:  00 C3 DE 34 B8 34 52 00 C8 34 51 00 00 00 21 04    ...4.4R..4Q...!.
005520:  00 DD E5 C1 09 01 01 00 CD 7D 02 C3 3D 34 21 00    .........}..=4!.
005530:  00 18 D8 18 D6 21 AC FF CD 8F 00 21 FE 09 E5 C3    .....!.....!....
005540:  04 35 72 00 21 02 35 E5 CD 46 00 DD 75 FE DD 74    .5r.!.5..F..u..t
005550:  FF 11 00 00 CD 88 01 7D B4 CA 23 35 21 00 00 E5    .......}..#5!...
005560:  CD 37 38 21 00 00 DD 75 FC DD 74 FD DD 6E FC DD    .78!...u..t..n..
005570:  66 FD 11 1D 00 CD 99 01 7D B4 CA AF 35 C3 4F 35    f.......}...5.O5
005580:  21 FC FF DD E5 C1 09 01 01 00 CD 7D 02 18 DD 21    !..........}...!
005590:  AC FF DD E5 C1 09 E5 21 4F 00 E5 DD 6E FE DD 66    .......!O...n..f
0055A0:  FF E5 CD 3C 0E DD 6E FC DD 66 FD 11 02 00 CD 0B    ...<..n..f......
0055B0:  01 EB 21 4A A1 19 E5 21 AC FF DD E5 C1 09 E5 CD    ..!J...!........
0055C0:  02 36 11 01 00 19 E5 CD 0B 0A CD 6A 02 DD 6E FC    .6.........j..n.
0055D0:  DD 66 FD 11 02 00 CD 0B 01 EB 21 4A A1 19 CD 4B    .f........!J...K
0055E0:  02 E5 21 AC FF DD E5 C1 09 E5 CD BF 35 18 91 DD    ..!.........5...
0055F0:  6E FE DD 66 FF E5 CD 4F 00 11 00 00 C3 C4 00 21    n..f...O.......!
005600:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005610:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005620:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005630:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005640:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005650:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005660:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005670:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005680:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005690:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0056A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0056B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0056C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0056D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0056E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0056F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005700:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005710:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005720:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005730:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005740:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005750:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005760:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005770:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005780:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005790:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0057A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0057B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0057C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0057D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0057E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0057F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
005800:  00 00 CD 8F 00 DD 6E 06 DD 66 07 22 9D 63 21 9D    ......n..f.".c!.
005810:  63 01 01 00 CD 7D 02 E5 21 04 00 DD E5 C1 09 01    c....}..!.......
005820:  01 00 CD 7D 02 6E 26 00 D1 7D 12 26 00 7D B4 CA    ...}.n&..}.&.}..
005830:  F4 35 18 DA DD 6E 06 DD 66 07 11 04 00 C3 C4 00    .5...n..f.......
005840:  18 F8 21 00 00 CD 8F 00 DD 6E 04 DD 66 05 22 9B    ..!......n..f.".
005850:  63 21 9B 63 01 01 00 CD 7D 02 6E 26 00 7D B4 20    c!.c....}.n&.}. 
005860:  F0 DD 6E 04 DD 66 05 EB 2A 9B 63 B7 ED 52 11 01    ..n..f..*.c..R..
005870:  00 B7 ED 52 11 02 00 C3 C4 00 18 F8 21 00 00 CD    ...R........!...
005880:  8F 00 DD 6E 06 DD 66 07 6E 26 00 EB DD 6E 04 26    ...n..f.n&...n.&
005890:  00 EB CD 88 01 7D B4 CA 66 36 DD 6E 06 DD 66 07    .....}..f6.n..f.
0058A0:  11 04 00 C3 C4 00 DD 6E 06 DD 66 07 6E 26 00 CD    .......n..f.n&..
0058B0:  03 01 7D B4 CA 7C 36 21 00 00 18 E4 21 06 00 DD    ..}..|6!....!...
0058C0:  E5 C1 09 01 01 00 CD 72 02 21 01 00 7D B4 20 B2    .......r.!..}. .
0058D0:  18 CE 21 00 00 CD 8F 00 DD 6E 04 DD 66 05 11 04    ..!......n..f...
0058E0:  00 B7 ED 52 22 99 63 2A 99 63 11 02 00 19 5E 23    ...R".c*.c....^#
0058F0:  56 2A 46 A1 19 22 46 A1 2A F0 A1 22 97 63 2A 99    V*F.."F.*..".c*.
005900:  63 ED 5B 97 63 CD AF 01 7D B4 CA E4 36 2A 97 63    c.[.c...}...6*.c
005910:  11 00 00 19 5E 23 56 2A 99 63 CD B0 01 7D B4 28    ....^#V*.c...}.(
005920:  03 21 01 00 CD 03 01 7D B4 CA 4A 37 C3 FE 36 2A    .!.....}..J7..6*
005930:  97 63 11 00 00 19 CD 4B 02 22 97 63 18 C0 2A 97    .c.....K.".c..*.
005940:  63 11 00 00 19 5E 23 56 2A 97 63 CD B6 01 7D B4    c....^#V*.c...}.
005950:  CA 40 37 2A 99 63 ED 5B 97 63 CD AF 01 7D B4 C2    .@7*.c.[.c...}..
005960:  36 37 2A 97 63 11 00 00 19 5E 23 56 2A 99 63 CD    67*.c....^#V*.c.
005970:  B0 01 7D B4 28 03 21 01 00 7D B4 28 03 21 01 00    ..}.(.!..}.(.!..
005980:  7D B4 CA 48 37 C3 4A 37 18 A5 2A 99 63 11 02 00    }..H7.J7..*.c...
005990:  19 CD 4B 02 11 04 00 CD 0B 01 EB 2A 99 63 19 E5    ..K........*.c..
0059A0:  2A 97 63 11 00 00 19 5E 23 56 E1 CD 88 01 7D B4    *.c....^#V....}.
0059B0:  CA B4 37 2A 99 63 11 02 00 19 E5 E5 2A 97 63 11    ..7*.c......*.c.
0059C0:  00 00 19 CD 4B 02 11 02 00 19 5E 23 56 E1 CD 4B    ....K.....^#V..K
0059D0:  02 19 CD 6A 02 2A 99 63 11 00 00 19 E5 2A 97 63    ...j.*.c.....*.c
0059E0:  11 00 00 19 CD 4B 02 11 00 00 19 CD 4B 02 CD 6A    .....K......K..j
0059F0:  02 C3 C9 37 2A 99 63 11 00 00 19 E5 2A 97 63 11    ...7*.c.....*.c.
005A00:  55 6E 61 62 6C 65 20 74 6F 20 69 6E 69 74 69 61    Unable to initia
005A10:  6C 69 73 65 20 73 74 61 63 6B 2E 0D 0A 4E 6F 20    lise stack...No 
005A20:  6D 6F 72 65 20 73 70 61 63 65 20 6F 6E 20 73 74    more space on st
005A30:  61 63 6B 2E 0D 0A 4E 6F 20 6D 6F 72 65 20 72 6F    ack...No more ro
005A40:  6F 6D 20 66 6F 72 20 73 74 72 69 6E 67 20 6F 6E    om for string on
005A50:  20 73 74 61 63 6B 2E 0D 0A 55 6E 61 62 6C 65 20     stack...Unable 
005A60:  74 6F 20 69 6E 69 74 69 61 6C 69 73 65 20 6C 69    to initialise li
005A70:  73 74 2E 0D 0A 55 6E 61 62 6C 65 20 74 6F 20 61    st...Unable to a
005A80:  64 64 20 74 6F 20 6C 69 73 74 2E 0D 0A 4E 6F 20    dd to list...No 
005A90:  72 6F 6F 6D 20 66 6F 72 20 73 74 72 69 6E 67 20    room for string 
005AA0:  69 6E 20 6C 69 73 74 2E 0D 0A 55 6E 61 62 6C 65    in list...Unable
005AB0:  20 74 6F 20 69 6E 69 74 69 61 6C 69 73 65 20 74     to initialise t
005AC0:  65 78 74 20 62 75 66 66 65 72 2E 0D 0A 50 72 65    ext buffer...Pre
005AD0:  73 73 20 61 6E 79 20 6B 65 79 20 74 6F 20 71 75    ss any key to qu
005AE0:  69 74 2E 0D 0A 50 72 69 6E 74 65 72 20 6E 6F 74    it...Printer not
005AF0:  20 72 65 61 64 79 2E 0D 0A 46 72 65 65 3A 0D 0A     ready...Free:..
005B00:  20 20 45 4E 54 45 52 20 2D 20 66 6F 6C 6C 6F 77      ENTER - follow
005B10:  20 6C 69 6E 6B 2C 20 42 20 2D 20 67 6F 20 62 61     link, B - go ba
005B20:  63 6B 2C 20 50 20 2D 20 70 72 69 6E 74 2C 20 48    ck, P - print, H
005B30:  20 2D 20 68 65 6C 70 2C 20 51 20 2D 20 71 75 69     - help, Q - qui
005B40:  74 20 20 0D 0A 59 6F 75 20 63 61 6E 6E 6F 74 20    t  ..You cannot 
005B50:  67 6F 20 66 75 72 74 68 65 72 20 62 61 63 6B 2E    go further back.
005B60:  0D 0A 59 6F 75 20 61 72 65 20 6F 75 74 73 69 64    ..You are outsid
005B70:  65 20 74 68 65 20 74 65 78 74 20 61 72 65 61 2E    e the text area.
005B80:  0D 0A 50 6F 73 69 74 69 6F 6E 3A 0D 0A 54 68 65    ..Position:..The
005B90:  72 65 20 69 73 20 6E 6F 20 6C 69 6E 6B 20 74 68    re is no link th
005BA0:  65 72 65 2E 0D 0A 6C 69 6E 6B 73 20 68 65 72 65    ere...links here
005BB0:  2E 0D 0A 4F 75 74 20 6F 66 20 6D 65 6D 6F 72 79    ...Out of memory
005BC0:  20 77 68 65 6E 20 6C 6F 61 64 69 6E 67 20 6C 69     when loading li
005BD0:  6E 6B 62 61 73 65 2E 0D 0A 4C 6F 61 64 69 6E 67    nkbase...Loading
005BE0:  0D 0A 45 72 72 6F 72 20 69 6E 20 6C 69 6E 6B 62    ..Error in linkb
005BF0:  61 73 65 3A 0D 0A 46 20 63 6F 6D 6D 61 6E 64 20    ase:..F command 
005C00:  00 00 19 CD 4B 02 CD 6A 02 2A 97 63 11 02 00 19    ....K..j.*.c....
005C10:  CD 4B 02 11 04 00 CD 0B 01 EB 2A 97 63 19 ED 5B    .K........*.c..[
005C20:  99 63 CD 88 01 7D B4 CA 1D 38 2A 97 63 11 02 00    .c...}...8*.c...
005C30:  19 E5 E5 2A 99 63 11 02 00 19 5E 23 56 E1 CD 4B    ...*.c....^#V..K
005C40:  02 19 CD 6A 02 2A 97 63 11 00 00 19 E5 2A 99 63    ...j.*.c.....*.c
005C50:  11 00 00 19 CD 4B 02 CD 6A 02 C3 2B 38 2A 97 63    .....K..j..+8*.c
005C60:  11 00 00 19 E5 2A 99 63 CD 6A 02 2A 97 63 22 F0    .....*.c.j.*.c".
005C70:  A1 11 02 00 C3 C4 00 21 00 00 CD 8F 00 21 09 00    .......!.....!..
005C80:  E5 CD 4F 00 21 0A 00 E5 CD 4F 00 DD 6E 04 DD 66    ..O.!....O..n..f
005C90:  05 E5 CD 18 0D 11 02 00 C3 C4 00 0A 45 52 52 4F    ............ERRO
005CA0:  52 20 45 58 49 54 20 25 64 00 0A 45 58 49 54 20    R EXIT %d..EXIT 
005CB0:  4F 4B 00 0A 50 6C 65 61 73 65 20 70 72 65 73 73    OK..Please press
005CC0:  20 61 6E 79 20 6B 65 79 00 26 00 03 44 CB 15 03     any key.&..D...
005CD0:  44 CD 00 03 44 06 00 03 44 28 00 03 44 30 00 03    D...D...D(..D0..
005CE0:  44 04 00 03 44 DD E5 03 44 DD E1 03 44 FD E5 03    D...D...D...D...
005CF0:  44 FD E1 03 44 CD 00 03 44 F3 00 03 44 FB 00 03    D...D...D...D...
005D00:  44 FF 00 03 44 4F 00 03 44 16 00 03 22 E8 09 03    D...DO..D..."...
005D10:  22 F5 09 03 22 FE 09 03 44 1D 00 03 44 46 00 03    "..."...D...DF..
005D20:  44 0D 00 03 4C 64 02 03 44 67 3D 00 00 11 FF 69    D...Ld..Dg=....i
005D30:  6E 74 20 20 20 20 20 00 00 12 FF 6C 6F 6E 67 20    nt     ....long 
005D40:  20 20 20 00 00 13 FF 72 65 67 69 73 74 65 72 00       ....register.
005D50:  00 14 FF 72 65 74 75 72 6E 20 20 00 00 15 FF 73    ...return  ....s
005D60:  68 6F 72 74 20 20 20 00 00 16 FF 73 69 7A 65 6F    hort   ....sizeo
005D70:  03 00 A3 63 01 00 01 01 00 D2 63 BF 02 00 46 A1    ..£c......c...F.
005D80:  59 0F 00 00 FB A1 0E 07 C3 CE BC 1A 24 FF 00 FF    Y...........$...
005D90:  26 B1 0A 12 FD A7 86 22 37 67 CC 80 99 76 6A 33    &......"7g...vj3
005DA0:  97 82 02 F3 2C 0F 96 E7 F3 94 3E A8 60 99 0F 2A    ....,.....>.`..*
005DB0:  86 FA 63 80 EA A4 11 53 F3 0D 36 84 C2 AE DD 4D    ..c....S..6....M
005DC0:  B3 28 F4 6A 2C A1 F8 55 A5 FE 87 FA DB A6 21 AB    .(.j,..U......!.
005DD0:  2B 20 A3 5D 76 9A DF 5E B7 D4 9C 12 B3 D0 E3 1B    + £]v..^........
005DE0:  69 4F 5E 8E 57 86 95 A4 FC 8D 0E 41 32 B9 15 18    iO^.W......A2...
005DF0:  86 36 1D 38 8D C8 B4 C3 F0 D9 FB B0 34 9D 9E 37    .6.8........4..7
005E00:  74 61 6B 65 73 20 6F 6E 65 20 70 61 72 61 6D 65    takes one parame
005E10:  74 65 72 2E 0D 0A 42 20 63 6F 6D 6D 61 6E 64 20    ter...B command 
005E20:  74 61 6B 65 73 20 66 69 76 65 20 70 61 72 61 6D    takes five param
005E30:  65 74 65 72 73 2E 0D 0A 75 6E 6B 6E 6F 77 6E 20    eters...unknown 
005E40:  63 6F 6D 6D 61 6E 64 2E 0D 0A 46 61 69 6C 65 64    command...Failed
005E50:  20 74 6F 20 6C 6F 61 64 20 66 69 72 73 74 20 66     to load first f
005E60:  69 6C 65 2E 0D 0A 46 69 6C 65 20 65 72 72 6F 72    ile...File error
005E70:  2E 0D 0A 4D 65 6D 6F 72 79 20 65 78 68 61 75 73    ...Memory exhaus
005E80:  74 65 64 2E 0D 0A 43 6F 75 6C 64 20 6E 6F 74 20    ted...Could not 
005E90:  66 69 6E 64 0D 0A 28 52 29 65 74 72 79 2C 20 6F    find..(R)etry, o
005EA0:  72 20 28 51 29 75 69 74 3F 0D 0A 54 72 79 20 61    r (Q)uit?..Try a
005EB0:  67 61 69 6E 3F 20 28 59 2F 4E 29 0D 0A 52 65 2D    gain? (Y/N)..Re-
005EC0:  6C 6F 61 64 69 6E 67 20 6F 6C 64 20 66 69 6C 65    loading old file
005ED0:  2E 0D 0A 1A 63 6B 2E 0D 0A 55 6E 61 62 6C 65 20    ....ck...Unable 
005EE0:  74 6F 20 69 6E 69 74 69 61 6C 69 73 65 20 6C 69    to initialise li
005EF0:  73 74 2E 0D 0A 55 6E 61 62 6C 65 20 74 6F 20 61    st...Unable to a
005F00:  31 29 29 0D 0A 33 37 30 20 61 64 64 78 3D 33 2A    1))..370 addx=3*
005F10:  61 64 64 78 0D 0A 33 38 30 20 61 64 64 79 3D 28    addx..380 addy=(
005F20:  49 4E 4B 45 59 28 32 29 3E 2D 31 29 0D 0A 33 39    INKEY(2)>-1)..39
005F30:  30 20 61 64 64 79 3D 61 64 64 79 2D 28 49 4E 4B    0 addy=addy-(INK
005F40:  45 59 28 30 29 3E 2D 31 29 0D 0A 34 30 30 20 61    EY(0)>-1)..400 a
005F50:  64 64 79 3D 61 64 64 79 2A 28 28 49 4E 4B 45 59    ddy=addy*((INKEY
005F60:  28 32 31 29 3D 2D 31 29 2B 32 29 0D 0A 34 31 30    (21)=-1)+2)..410
005F70:  20 61 64 64 79 3D 33 2A 61 64 64 79 0D 0A 34 32     addy=3*addy..42
005F80:  30 20 78 3D 78 2B 61 64 64 78 3A 79 3D 79 2B 61    0 x=x+addx:y=y+a
005F90:  64 64 79 0D 0A 34 32 35 20 52 45 4D 20 43 68 65    ddy..425 REM Che
005FA0:  63 6B 20 78 20 26 20 79 20 61 72 65 20 6F 6E 20    ck x & y are on 
005FB0:  73 63 72 65 65 6E 0D 0A 34 33 30 20 78 3D 4D 49    screen..430 x=MI
005FC0:  4E 28 36 33 32 2C 78 29 0D 0A 34 34 30 20 78 3D    N(632,x)..440 x=
005FD0:  4D 41 58 28 30 2C 78 29 0D 0A 34 35 30 20 79 3D    MAX(0,x)..450 y=
005FE0:  4D 49 4E 28 33 39 39 2C 79 29 0D 0A 34 36 30 20    MIN(399,y)..460 
005FF0:  79 3D 4D 41 58 28 31 35 2C 79 29 0D 0A 34 36 35    y=MAX(15,y)..465
006000:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
006010:  05 00 01 00 02 09 4E E5 05 00 C7 02 00 00 00 02    ......N.........
006020:  05 00 C3 02 00 00 00 02 05 00 C8 02 00 00 00 02    ................
006030:  05 00 C4 02 00 00 00 02 05 00 C9 02 00 00 00 02    ................
006040:  05 00 C5 02 00 00 00 02 05 00 C1 02 00 00 00 02    ................
006050:  05 00 C6 02 00 00 00 02 05 00 C2 02 00 00 00 02    ................
006060:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
006070:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
006080:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
006090:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0060A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0060B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0060C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0060D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0060E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0060F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
006100:  20 64 65 66 69 6E 69 74 69 6F 6E 73 20 66 6F 72     definitions for
006110:  20 74 68 65 20 34 36 34 20 61 6E 64 20 36 36 34     the 464 and 664
006120:  20 28 73 65 65 20 61 72 74 69 63 6C 65 20 32 31     (see article 21
006130:  29 0D 0A 41 31 34 54 31 09 09 74 61 62 6C 65 20    )..A14T1..table 
006140:  66 72 6F 6D 20 61 72 74 69 63 6C 65 20 31 34 20    from article 14 
006150:  77 69 74 68 20 73 79 6E 74 61 78 20 6F 66 20 42    with syntax of B
006160:  41 53 49 43 20 31 2E 31 20 63 6F 6D 6D 61 6E 64    ASIC 1.1 command
006170:  73 0D 0A 41 49 31 09 2E 42 41 53 09 6C 69 73 74    s..AI1..BAS.list
006180:  69 6E 67 20 66 72 6F 6D 20 61 72 74 69 63 6C 65    ing from article
006190:  20 31 36 0D 0A 41 49 32 09 2E 42 41 53 09 6C 69     16..AI2..BAS.li
0061A0:  73 74 69 6E 67 20 66 72 6F 6D 20 61 72 74 69 63    sting from artic
0061B0:  6C 65 20 31 36 20 77 69 74 68 20 76 6F 63 61 62    le 16 with vocab
0061C0:  75 6C 61 72 79 20 73 61 76 69 6E 67 0D 0A 41 49    ulary saving..AI
0061D0:  33 09 2E 42 41 53 09 69 6D 70 72 6F 76 65 64 20    3..BAS.improved 
0061E0:  76 65 72 73 69 6F 6E 20 6F 66 20 41 49 20 66 72    version of AI fr
0061F0:  6F 6D 20 61 72 74 69 63 6C 65 20 31 37 0D 0A 41    om article 17..A
006200:  49 34 09 2E 42 41 53 09 41 49 20 77 69 74 68 20    I4..BAS.AI with 
006210:  61 20 62 69 6E 61 72 79 20 74 72 65 65 20 28 73    a binary tree (s
006220:  65 65 20 61 72 74 69 63 6C 65 20 31 39 29 0D 0A    ee article 19)..
006230:  41 49 35 09 2E 42 41 53 09 41 49 20 77 69 74 68    AI5..BAS.AI with
006240:  20 61 20 68 61 73 68 20 74 61 62 6C 65 20 28 66     a hash table (f
006250:  72 6F 6D 20 61 72 74 69 63 6C 65 20 32 30 29 0D    rom article 20).
006260:  0A 41 49 36 09 2E 4C 4F 47 09 41 49 20 69 6E 20    .AI6..LOG.AI in 
006270:  4C 6F 67 6F 20 2D 20 74 68 65 20 76 65 72 73 69    Logo - the versi
006280:  6F 6E 20 70 75 62 6C 69 73 68 65 64 20 69 6E 20    on published in 
006290:  57 41 43 43 49 0D 0A 41 49 37 09 2E 4C 4F 47 09    WACCI..AI7..LOG.
0062A0:  41 49 20 69 6E 20 4C 6F 67 6F 20 2D 20 61 6E 20    AI in Logo - an 
0062B0:  69 6D 70 72 6F 76 65 64 20 76 65 72 73 69 6F 6E    improved version
0062C0:  20 75 73 69 6E 67 20 70 72 6F 70 65 72 74 79 20     using property 
0062D0:  6C 69 73 74 73 0D 0A 4C 49 53 54 45 58 09 2E 42    lists..LISTEX..B
0062E0:  41 53 09 65 78 61 6D 70 6C 65 20 6C 69 6E 6B 65    AS.example linke
0062F0:  64 20 6C 69 73 74 20 66 72 6F 6D 20 61 72 74 69    d list from arti
006300:  63 6C 65 20 39 20 20 2D 20 61 20 63 61 72 64 20    cle 9  - a card 
006310:  67 61 6D 65 0D 0A 41 72 74 69 63 6C 65 20 31 30    game..Article 10
006320:  20 2D 20 70 72 6F 67 72 61 6D 6D 69 6E 67 20 61     - programming a
006330:  20 4D 49 44 49 20 69 6E 74 65 72 66 61 63 65 0D     MIDI interface.
006340:  0A 41 72 74 69 63 6C 65 20 31 31 20 20 20 2D 20    .Article 11   - 
006350:  74 68 65 20 6D 61 69 6E 20 4D 49 44 49 20 6D 65    the main MIDI me
006360:  73 73 61 67 65 73 2C 20 61 6E 64 20 61 6E 20 52    ssages, and an R
006370:  53 58 20 74 6F 20 73 65 6E 64 20 74 68 65 6D 0D    SX to send them.
006380:  0A 0D 0A 54 75 72 6E 20 74 68 65 20 64 69 73 63    ...Turn the disc
006390:  20 6F 76 65 72 20 62 65 66 6F 72 65 20 66 6F 6C     over before fol
0063A0:  6C 6F 77 69 6E 67 20 74 68 65 73 65 20 6C 69 6E    lowing these lin
0063B0:  6B 73 3A 0D 0A 0D 0A 41 72 74 69 63 6C 65 20 31    ks:....Article 1
0063C0:  32 20 20 20 2D 20 6F 74 68 65 72 20 4D 49 44 49    2   - other MIDI
0063D0:  20 6D 65 73 73 61 67 65 73 2C 20 61 6E 64 20 61     messages, and a
0063E0:  20 70 72 6F 67 72 61 6D 20 74 6F 20 70 6C 61 79     program to play
0063F0:  20 61 20 74 75 6E 65 0D 0A 41 72 74 69 63 6C 65     a tune..Article
006400:  20 31 33 20 2D 20 68 6F 77 20 74 6F 20 61 64 61     13 - how to ada
006410:  70 74 20 36 31 32 38 20 70 72 6F 67 72 61 6D 73    pt 6128 programs
006420:  20 66 6F 72 20 74 68 65 20 34 36 34 2C 20 77 69     for the 464, wi
006430:  74 68 20 61 6E 20 52 53 58 20 74 6F 20 68 65 6C    th an RSX to hel
006440:  70 0D 0A 41 72 74 69 63 6C 65 20 31 34 20 20 20    p..Article 14   
006450:  2D 20 63 6F 6D 6D 61 6E 64 73 20 61 64 64 65 64    - commands added
006460:  20 69 6E 20 42 41 53 49 43 20 31 2E 31 2C 20 61     in BASIC 1.1, a
006470:  6E 64 20 77 68 61 74 20 74 6F 20 64 6F 20 77 69    nd what to do wi
006480:  74 68 20 6D 6F 73 74 20 6F 66 20 74 68 65 6D 0D    th most of them.
006490:  0A 41 72 74 69 63 6C 65 20 31 35 20 20 20 2D 20    .Article 15   - 
0064A0:  62 75 67 73 20 69 6E 20 34 36 34 20 42 41 53 49    bugs in 464 BASI
0064B0:  43 2C 20 61 6E 64 20 68 6F 77 20 74 6F 20 64 65    C, and how to de
0064C0:  61 6C 20 77 69 74 68 20 74 68 65 6D 0D 0A 41 72    al with them..Ar
0064D0:  74 69 63 6C 65 20 31 36 20 2D 20 41 49 3A 20 61    ticle 16 - AI: a
0064E0:  6E 20 22 61 72 74 69 66 69 63 69 61 6C 20 69 6E    n "artificial in
0064F0:  74 65 6C 6C 69 67 65 6E 63 65 22 20 63 6F 6E 76    telligence" conv
006500:  23 50 72 6F 67 72 61 6D 6D 65 72 73 27 20 50 61    #Programmers' Pa
006510:  74 63 68 20 31 20 2D 20 57 41 43 43 49 20 31 30    tch 1 - WACCI 10
006520:  39 2C 20 46 65 62 20 31 39 39 37 2C 20 70 2E 20    9, Feb 1997, p. 
006530:  36 2D 37 0D 0A 20 20 20 50 52 4F 47 52 41 4D 4D    6-7..   PROGRAMM
006540:  45 52 53 27 20 50 41 54 43 48 20 31 0D 0A 20 20    ERS' PATCH 1..  
006550:  20 42 79 20 4D 61 74 74 68 65 77 20 61 6E 64 20     By Matthew and 
006560:  53 74 65 70 68 65 6E 20 50 68 69 6C 6C 69 70 73    Stephen Phillips
006570:  0D 0A 0D 0A 20 20 20 54 68 69 73 20 6E 65 77 20    ....   This new 
006580:  73 65 72 69 65 73 20 61 69 6D 73 20 20 74 6F 20    series aims  to 
006590:  20 6F 66 66 65 72 20 20 61 20 20 73 6D 6F 72 67     offer  a  smorg
0065A0:  61 73 62 6F 72 64 20 6F 66 20 70 72 6F 67 72 61    asbord of progra
0065B0:  6D 6D 69 6E 67 20 64 65 6C 69 63 61 63 69 65 73    mming delicacies
0065C0:  2C 0D 0A 20 20 20 6A 75 67 67 6C 69 6E 67 20 20    ,..   juggling  
0065D0:  74 68 6F 73 65 20 20 68 6F 74 20 20 70 6F 74 61    those  hot  pota
0065E0:  74 6F 65 73 20 20 20 6F 66 20 20 20 65 66 66 69    toes   of   effi
0065F0:  63 69 65 6E 63 79 20 20 76 65 72 73 75 73 20 20    ciency  versus  
006600:  72 65 61 64 61 62 69 6C 69 74 79 2C 20 20 6F 66    readability,  of
006610:  0D 0A 20 20 20 63 6F 6D 70 61 63 74 69 74 75 64    ..   compactitud
006620:  65 20 76 65 72 73 75 73 20 70 65 72 61 6D 62 75    e versus perambu
006630:  6C 61 74 6F 72 79 20 65 78 65 63 75 74 69 6F 6E    latory execution
006640:  2C 20 61 6E 64 20 20 65 76 65 72 20 73 65 61 72    , and  ever sear
006650:  63 68 69 6E 67 20 66 6F 72 20 61 20 75 73 65 0D    ching for a use.
006660:  0A 20 20 20 6F 66 20 74 68 65 20 43 52 45 41 4C    .   of the CREAL
006670:  20 66 75 6E 63 74 69 6F 6E 2C 20 79 65 74 20 20     function, yet  
006680:  77 69 74 68 6F 75 74 20 20 77 61 73 74 69 6E 67    without  wasting
006690:  20 20 61 6E 20 20 6F 70 70 6F 72 74 75 6E 69 74      an  opportunit
0066A0:  79 20 6F 66 20 75 73 69 6E 67 20 6F 75 72 0D 0A    y of using our..
0066B0:  20 20 20 74 68 65 73 61 75 72 75 73 2E 20 20 4D       thesaurus.  M
0066C0:  61 6E 79 20 6F 66 20 79 6F 75 20 77 69 6C 6C 20    any of you will 
0066D0:  68 61 76 65 20 66 6F 6C 6C 6F 77 65 64 20 41 6C    have followed Al
0066E0:  61 6E 20 54 69 6C 6C 69 6E 67 27 73 20 56 65 72    an Tilling's Ver
0066F0:  79 20 42 61 73 69 63 20 42 61 73 69 63 0D 0A 20    y Basic Basic.. 
006700:  65 72 73 61 74 69 6F 6E 20 70 72 6F 67 72 61 6D    ersation program
006710:  0D 0A 41 72 74 69 63 6C 65 20 31 37 20 20 20 2D    ..Article 17   -
006720:  20 69 6D 70 72 6F 76 69 6E 67 20 74 68 65 20 70     improving the p
006730:  72 6F 67 72 61 6D 20 75 73 69 6E 67 20 61 20 6C    rogram using a l
006740:  69 6E 6B 65 64 20 6C 69 73 74 0D 0A 41 72 74 69    inked list..Arti
006750:  63 6C 65 20 31 38 20 20 20 2D 20 6D 6F 72 65 20    cle 18   - more 
006760:  61 62 6F 75 74 20 6C 69 6E 6B 65 64 20 6C 69 73    about linked lis
006770:  74 73 2C 20 61 6E 64 20 4D 72 20 42 6C 61 63 6B    ts, and Mr Black
006780:  20 74 68 65 20 6E 65 77 73 61 67 65 6E 74 0D 0A     the newsagent..
006790:  41 72 74 69 63 6C 65 20 31 39 20 20 20 2D 20 69    Article 19   - i
0067A0:  6D 70 72 6F 76 69 6E 67 20 73 65 61 72 63 68 20    mproving search 
0067B0:  73 70 65 65 64 73 20 77 69 74 68 20 62 69 6E 61    speeds with bina
0067C0:  72 79 20 74 72 65 65 73 0D 0A 41 72 74 69 63 6C    ry trees..Articl
0067D0:  65 20 32 30 20 20 20 2D 20 75 73 69 6E 67 20 68    e 20   - using h
0067E0:  61 73 68 20 74 61 62 6C 65 73 20 74 6F 20 72 65    ash tables to re
0067F0:  64 75 63 65 20 73 65 61 72 63 68 69 6E 67 20 74    duce searching t
006800:  69 6D 65 0D 0A 41 72 74 69 63 6C 65 20 32 31 20    ime..Article 21 
006810:  20 20 2D 20 41 49 20 69 6E 20 4C 6F 67 6F 0D 0A      - AI in Logo..
006820:  0D 0A 4F 74 68 65 72 20 66 69 6C 65 73 20 6F 6E    ..Other files on
006830:  20 62 6F 74 68 20 73 69 64 65 73 20 6F 66 20 74     both sides of t
006840:  68 65 20 64 69 73 63 3A 0D 0A 0D 0A 44 49 53 43    he disc:....DISC
006850:  09 2E 42 41 53 09 72 75 6E 73 20 74 68 65 20 4C    ..BAS.runs the L
006860:  6F 6F 6D 20 68 79 70 65 72 74 65 78 74 20 76 69    oom hypertext vi
006870:  65 77 65 72 0D 0A 48 45 4C 50 09 2E 54 58 54 09    ewer..HELP..TXT.
006880:  74 68 65 20 68 65 6C 70 20 74 65 78 74 20 66 6F    the help text fo
006890:  72 20 4C 6F 6F 6D 0D 0A 4C 49 4E 4B 42 41 53 45    r Loom..LINKBASE
0068A0:  2E 54 58 54 09 74 68 65 20 6C 69 6E 6B 61 67 65    .TXT.the linkage
0068B0:  20 64 61 74 61 20 66 6F 72 20 4C 6F 6F 6D 0D 0A     data for Loom..
0068C0:  4C 4F 4F 4D 09 2E 42 49 4E 09 74 68 65 20 4C 6F    LOOM..BIN.the Lo
0068D0:  6F 6D 20 70 72 6F 67 72 61 6D 0D 0A 4D 45 53 53    om program..MESS
0068E0:  41 47 45 53 2E 54 58 54 09 74 68 65 20 6D 65 73    AGES.TXT.the mes
0068F0:  73 61 67 65 20 74 65 78 74 73 20 66 6F 72 20 4C    sage texts for L
006900:  20 20 73 65 72 69 65 73 2C 20 20 61 6E 64 20 20      series,  and  
006910:  77 65 20 20 68 6F 70 65 20 20 74 68 61 74 20 20    we  hope  that  
006920:  79 6F 75 20 20 20 6E 6F 77 20 20 66 65 65 6C 20    you   now  feel 
006930:  20 72 65 61 64 79 20 20 66 6F 72 20 20 73 6F 6D     ready  for  som
006940:  65 74 68 69 6E 67 20 20 6D 6F 72 65 0D 0A 20 20    ething  more..  
006950:  20 61 64 76 65 6E 74 75 72 6F 75 73 2E 0D 0A 0D     adventurous....
006960:  0A 20 20 20 52 55 4E 22 41 52 54 49 43 4C 45 0D    .   RUN"ARTICLE.
006970:  0A 20 20 20 57 65 20 61 72 65 20 67 6F 69 6E 67    .   We are going
006980:  20 74 6F 20 73 74 61 72 74 20 62 79 20 6C 6F 6F     to start by loo
006990:  6B 69 6E 67 20 20 61 74 20 20 61 20 20 70 72 6F    king  at  a  pro
0069A0:  67 72 61 6D 20 77 72 69 74 74 65 6E 20 62 79 20    gram written by 
0069B0:  53 74 65 70 68 65 6E 20 69 6E 20 74 68 65 0D 0A    Stephen in the..
0069C0:  20 20 20 64 61 79 73 20 77 68 65 6E 20 43 6F 6D       days when Com
0069D0:  70 75 74 69 6E 67 20 77 69 74 68 20 74 68 65 20    puting with the 
0069E0:  20 41 6D 73 74 72 61 64 20 20 68 61 64 20 20 61     Amstrad  had  a
0069F0:  20 20 22 74 65 6E 2D 6C 69 6E 65 72 73 22 20 73      "ten-liners" s
006A00:  6C 6F 74 20 66 6F 72 20 73 68 6F 72 74 0D 0A 20    lot for short.. 
006A10:  20 20 42 41 53 49 43 20 70 72 6F 67 72 61 6D 73      BASIC programs
006A20:  2E 20 20 54 68 69 73 20 77 61 73 6E 27 74 20 6F    .  This wasn't o
006A30:  6E 65 20 20 6F 66 20 20 74 68 65 6D 2E 20 20 20    ne  of  them.   
006A40:  44 6F 6E 27 74 20 20 67 65 74 20 73 63 61 72 65    Don't  get scare
006A50:  64 20 6F 66 66 20 62 79 20 74 68 65 0D 0A 20 20    d off by the..  
006A60:  20 68 6F 72 72 69 62 6C 65 20 6C 69 73 74 69 6E     horrible listin
006A70:  67 2C 20 61 73 20 61 6C 6C 20 77 69 6C 6C 20 73    g, as all will s
006A80:  6F 6F 6E 20 62 65 63 6F 6D 65 20 61 73 20 63 6C    oon become as cl
006A90:  65 61 72 20 61 73 20 6A 65 6C 6C 79 2E 0D 0A 20    ear as jelly... 
006AA0:  20 20 20 20 49 66 20 79 6F 75 20 66 65 65 6C 20        If you feel 
006AB0:  6C 69 6B 65 20 69 74 2C 20 79 6F 75 20 63 6F 75    like it, you cou
006AC0:  6C 64 20 74 79 70 65 20 20 69 6E 20 74 68 65 20    ld type  in the 
006AD0:  70 72 6F 67 72 61 6D 20 6C 69 73 74 69 6E 67 20    program listing 
006AE0:  69 6E 20 46 69 67 75 72 65 20 31 2E 0D 0A 20 20    in Figure 1...  
006AF0:  20 3C 3C 49 74 20 68 61 73 20 62 65 65 6E 20 73     <<It has been s
006B00:  6F 6F 6D 0D 0A 52 45 41 44 4D 45 09 2E 09 74 68    oom..README...th
006B10:  69 73 20 66 69 6C 65 0D 0A 0D 0A 4F 74 68 65 72    is file....Other
006B20:  20 66 69 6C 65 73 20 6F 6E 20 73 69 64 65 20 41     files on side A
006B30:  20 6F 66 20 74 68 65 20 64 69 73 63 3A 0D 0A 0D     of the disc:...
006B40:  0A 42 53 49 44 45 09 2E 42 41 53 09 74 68 65 20    .BSIDE..BAS.the 
006B50:  42 53 49 44 45 20 70 72 6F 67 72 61 6D 20 66 6F    BSIDE program fo
006B60:  72 20 63 6F 70 79 69 6E 67 20 73 69 64 65 20 42    r copying side B
006B70:  0D 0A 42 53 49 44 45 09 2E 42 49 4E 09 64 69 74    ..BSIDE..BIN.dit
006B80:  74 6F 0D 0A 44 49 53 43 4D 45 4E 55 2E 42 41 53    to..DISCMENU.BAS
006B90:  09 74 68 65 20 70 72 6F 67 72 61 6D 20 66 65 61    .the program fea
006BA0:  74 75 72 65 64 20 69 6E 20 61 72 74 69 63 6C 65    tured in article
006BB0:  73 20 31 2C 32 2C 34 20 61 6E 64 20 35 0D 0A 46    s 1,2,4 and 5..F
006BC0:  49 47 31 36 31 09 2E 09 73 75 62 72 6F 75 74 69    IG161...subrouti
006BD0:  6E 65 20 66 65 61 74 75 72 65 64 20 69 6E 20 61    ne featured in a
006BE0:  72 74 69 63 6C 65 20 32 0D 0A 46 49 47 31 36 31    rticle 2..FIG161
006BF0:  38 20 2E 09 61 6E 6F 74 68 65 72 20 73 75 62 72    8 ..another subr
006C00:  6F 75 74 69 6E 65 20 66 65 61 74 75 72 65 64 20    outine featured 
006C10:  69 6E 20 61 72 74 69 63 6C 65 20 32 0D 0A 46 49    in article 2..FI
006C20:  47 32 09 2E 09 61 6E 20 65 78 61 6D 70 6C 65 20    G2...an example 
006C30:  66 72 6F 6D 20 61 72 74 69 63 6C 65 20 33 0D 0A    from article 3..
006C40:  46 49 47 32 37 09 2E 09 61 6E 6F 74 68 65 72 20    FIG27...another 
006C50:  65 78 61 6D 70 6C 65 20 66 72 6F 6D 20 61 72 74    example from art
006C60:  69 63 6C 65 20 33 0D 0A 46 49 47 32 37 31 09 2E    icle 3..FIG271..
006C70:  09 61 6E 20 65 78 61 6D 70 6C 65 20 66 72 6F 6D    .an example from
006C80:  20 61 72 74 69 63 6C 65 73 20 33 20 61 6E 64 20     articles 3 and 
006C90:  34 0D 0A 46 49 47 32 37 31 38 09 2E 09 61 6E 6F    4..FIG2718...ano
006CA0:  74 68 65 72 20 65 78 61 6D 70 6C 65 20 66 72 6F    ther example fro
006CB0:  6D 20 61 72 74 69 63 6C 65 20 34 0D 0A 4D 45 4E    m article 4..MEN
006CC0:  55 45 58 31 09 2E 42 41 53 09 74 68 65 20 6C 69    UEX1..BAS.the li
006CD0:  73 74 69 6E 67 20 66 72 6F 6D 20 61 72 74 69 63    sting from artic
006CE0:  6C 65 20 36 0D 0A 4D 45 4E 55 45 58 32 09 2E 42    le 6..MENUEX2..B
006CF0:  41 53 09 6C 69 73 74 69 6E 67 20 31 20 66 72 6F    AS.listing 1 fro
006D00:  20 72 65 61 64 20 74 68 65 20 61 72 74 69 63 6C     read the articl
006D10:  65 73 20 62 79 20 75 73 69 6E 67 20 74 68 65 20    es by using the 
006D20:  4C 6F 6F 6D 20 68 79 70 65 72 74 65 78 74 20 76    Loom hypertext v
006D30:  69 65 77 65 72 2C 20 77 68 69 63 68 20 77 69 6C    iewer, which wil
006D40:  6C 20 61 6C 73 6F 0D 0A 70 72 69 6E 74 20 74 68    l also..print th
006D50:  65 6D 20 6F 75 74 20 69 66 20 79 6F 75 20 68 61    em out if you ha
006D60:  76 65 20 61 20 70 72 69 6E 74 65 72 2E 20 20 54    ve a printer.  T
006D70:  6F 20 64 6F 20 74 68 69 73 2C 20 6A 75 73 74 20    o do this, just 
006D80:  52 55 4E 22 44 49 53 43 20 61 6E 64 20 4C 6F 6F    RUN"DISC and Loo
006D90:  6D 20 77 69 6C 6C 0D 0A 73 74 61 72 74 20 75 70    m will..start up
006DA0:  2E 20 20 54 68 65 20 66 6F 6C 6C 6F 77 69 6E 67    .  The following
006DB0:  20 68 65 61 64 69 6E 67 73 20 74 68 65 6E 20 62     headings then b
006DC0:  65 63 6F 6D 65 20 68 79 70 65 72 6C 69 6E 6B 73    ecome hyperlinks
006DD0:  20 77 68 69 63 68 20 63 61 6E 20 62 65 20 66 6F     which can be fo
006DE0:  6C 6C 6F 77 65 64 0D 0A 62 79 20 6D 6F 76 69 6E    llowed..by movin
006DF0:  67 20 74 68 65 20 63 75 72 73 6F 72 20 6F 76 65    g the cursor ove
006E00:  72 20 74 68 65 20 6C 69 6E 6B 20 61 6E 64 20 70    r the link and p
006E10:  72 65 73 73 69 6E 67 20 45 4E 54 45 52 2E 0D 0A    ressing ENTER...
006E20:  0D 0A 54 68 65 20 61 72 74 69 63 6C 65 73 20 63    ..The articles c
006E30:  61 6E 20 61 6C 73 6F 20 62 65 20 76 69 65 77 65    an also be viewe
006E40:  64 20 77 69 74 68 20 61 20 74 65 78 74 20 65 64    d with a text ed
006E50:  69 74 6F 72 20 6F 72 20 77 6F 72 64 70 72 6F 63    itor or wordproc
006E60:  65 73 73 6F 72 20 73 75 63 68 20 61 73 0D 0A 50    essor such as..P
006E70:  72 6F 74 65 78 74 2E 0D 0A 0D 0A 49 66 20 74 68    rotext.....If th
006E80:  69 73 20 68 61 73 20 62 65 65 6E 20 73 75 70 70    is has been supp
006E90:  6C 69 65 64 20 6F 6E 20 61 20 33 2E 35 22 20 64    lied on a 3.5" d
006EA0:  69 73 63 20 61 6E 64 20 79 6F 75 20 64 6F 20 6E    isc and you do n
006EB0:  6F 74 20 68 61 76 65 20 61 20 73 69 64 65 20 73    ot have a side s
006EC0:  77 69 74 63 68 2C 0D 0A 52 55 4E 22 42 53 49 44    witch,..RUN"BSID
006ED0:  45 20 74 6F 20 63 6F 70 79 20 74 68 65 20 42 20    E to copy the B 
006EE0:  73 69 64 65 20 6F 66 20 74 68 65 20 64 69 73 63    side of the disc
006EF0:  20 6F 6E 74 6F 20 61 20 64 69 73 63 20 69 6E 20     onto a disc in 
006F00:  6D 20 61 72 74 69 63 6C 65 20 37 0D 0A 4D 45 4E    m article 7..MEN
006F10:  55 45 58 33 20 2E 42 41 53 09 6C 69 73 74 69 6E    UEX3 .BAS.listin
006F20:  67 20 32 20 66 72 6F 6D 20 61 72 74 69 63 6C 65    g 2 from article
006F30:  20 37 0D 0A 4D 45 4E 55 45 58 34 20 2E 42 41 53     7..MENUEX4 .BAS
006F40:  09 6C 69 73 74 69 6E 67 20 32 20 6D 6F 64 69 66    .listing 2 modif
006F50:  69 65 64 20 74 6F 20 75 73 65 20 74 68 65 20 53    ied to use the S
006F60:  48 49 46 54 20 6B 65 79 0D 0A 4D 45 4E 55 53 55    HIFT key..MENUSU
006F70:  42 20 2E 09 74 68 65 20 6D 65 6E 75 20 73 75 62    B ..the menu sub
006F80:  72 6F 75 74 69 6E 65 20 66 65 61 74 75 72 65 64    routine featured
006F90:  20 69 6E 20 61 72 74 69 63 6C 65 73 20 36 2D 38     in articles 6-8
006FA0:  0D 0A 4D 49 44 49 31 09 2E 42 41 53 09 6C 69 73    ..MIDI1..BAS.lis
006FB0:  74 69 6E 67 20 66 72 6F 6D 20 61 72 74 69 63 6C    ting from articl
006FC0:  65 20 31 30 3A 20 61 20 70 72 6F 67 72 61 6D 20    e 10: a program 
006FD0:  74 6F 20 70 6C 61 79 20 61 20 6D 69 64 64 6C 65    to play a middle
006FE0:  20 43 0D 0A 50 45 4C 4D 41 4E 09 2E 42 41 53 09     C..PELMAN..BAS.
006FF0:  74 68 65 20 63 61 72 64 20 67 61 6D 65 20 66 65    the card game fe
007000:  61 74 75 72 65 64 20 69 6E 20 61 72 74 69 63 6C    atured in articl
007010:  65 20 39 0D 0A 53 45 4E 44 09 2E 41 53 4D 09 61    e 9..SEND..ASM.a
007020:  73 73 65 6D 62 6C 79 20 6C 69 73 74 69 6E 67 20    ssembly listing 
007030:  66 6F 72 20 4D 49 44 49 20 7C 53 45 4E 44 20 52    for MIDI |SEND R
007040:  53 58 0D 0A 53 45 4E 44 09 2E 42 41 53 09 42 41    SX..SEND..BAS.BA
007050:  53 49 43 20 6C 6F 61 64 65 72 20 66 6F 72 20 4D    SIC loader for M
007060:  49 44 49 20 7C 53 45 4E 44 20 52 53 58 20 28 73    IDI |SEND RSX (s
007070:  65 65 20 61 72 74 69 63 6C 65 20 31 31 29 0D 0A    ee article 11)..
007080:  0D 0A 4F 74 68 65 72 20 66 69 6C 65 73 20 6F 6E    ..Other files on
007090:  20 73 69 64 65 20 42 20 6F 66 20 74 68 65 20 64     side B of the d
0070A0:  69 73 63 3A 0D 0A 0D 0A 34 36 34 52 53 58 09 2E    isc:....464RSX..
0070B0:  42 41 53 09 6C 69 73 74 69 6E 67 20 31 20 66 72    BAS.listing 1 fr
0070C0:  6F 6D 20 61 72 74 69 63 6C 65 20 31 35 20 77 68    om article 15 wh
0070D0:  69 63 68 20 69 6D 70 72 6F 76 65 73 20 34 36 34    ich improves 464
0070E0:  20 52 53 58 20 68 61 6E 64 6C 69 6E 67 0D 0A 36     RSX handling..6
0070F0:  34 4B 42 49 54 53 09 2E 4C 4F 47 09 4C 6F 67 6F    4KBITS..LOG.Logo
007100:  79 6F 75 72 20 41 20 64 72 69 76 65 2E 0D 0A 0D    your A drive....
007110:  0A 4C 69 6E 6B 73 20 74 6F 20 61 72 74 69 63 6C    .Links to articl
007120:  65 73 20 6F 6E 20 74 68 69 73 20 73 69 64 65 20    es on this side 
007130:  6F 66 20 74 68 65 20 64 69 73 63 3A 20 20 20 20    of the disc:    
007140:  20 0D 0A 0D 0A 41 72 74 69 63 6C 65 20 31 20 20     ....Article 1  
007150:  2D 20 69 6E 74 72 6F 64 75 63 69 6E 67 20 61 20    - introducing a 
007160:  64 69 73 63 20 6D 65 6E 75 0D 0A 41 72 74 69 63    disc menu..Artic
007170:  6C 65 20 32 20 20 20 20 2D 20 6C 69 6E 65 20 34    le 2    - line 4
007180:  30 2C 20 74 65 73 74 69 6E 67 20 6B 65 79 73 20    0, testing keys 
007190:  61 6E 64 20 6D 6F 76 69 6E 67 20 74 68 65 20 63    and moving the c
0071A0:  75 72 73 6F 72 0D 0A 41 72 74 69 63 6C 65 20 33    ursor..Article 3
0071B0:  20 20 20 20 2D 20 67 65 74 74 69 6E 67 20 42 41        - getting BA
0071C0:  53 49 43 20 61 6E 64 20 6D 61 63 68 69 6E 65 20    SIC and machine 
0071D0:  63 6F 64 65 20 74 6F 20 77 6F 72 6B 20 74 6F 67    code to work tog
0071E0:  65 74 68 65 72 20 28 70 61 72 74 20 31 29 0D 0A    ether (part 1)..
0071F0:  41 72 74 69 63 6C 65 20 34 20 20 20 20 2D 20 70    Article 4    - p
007200:  61 72 74 20 32 2C 20 61 6E 64 20 74 68 65 20 6D    art 2, and the m
007210:  61 63 68 69 6E 65 20 63 6F 64 65 20 66 72 6F 6D    achine code from
007220:  20 74 68 65 20 64 69 73 63 20 6D 65 6E 75 0D 0A     the disc menu..
007230:  41 72 74 69 63 6C 65 20 35 20 20 20 20 2D 20 66    Article 5    - f
007240:  69 6E 61 6C 20 61 72 74 69 63 6C 65 20 6F 6E 20    inal article on 
007250:  74 68 65 20 64 69 73 63 20 6D 65 6E 75 0D 0A 41    the disc menu..A
007260:  72 74 69 63 6C 65 20 36 20 20 2D 20 61 20 67 65    rticle 6  - a ge
007270:  6E 65 72 61 6C 20 70 75 72 70 6F 73 65 20 6D 65    neral purpose me
007280:  6E 75 20 73 75 62 72 6F 75 74 69 6E 65 0D 0A 41    nu subroutine..A
007290:  72 74 69 63 6C 65 20 37 20 20 20 20 2D 20 68 6F    rticle 7    - ho
0072A0:  77 20 74 6F 20 67 65 74 20 74 68 65 20 6D 6F 73    w to get the mos
0072B0:  74 20 6F 75 74 20 6F 66 20 74 68 65 20 6D 65 6E    t out of the men
0072C0:  75 20 73 75 62 72 6F 75 74 69 6E 65 0D 0A 41 72    u subroutine..Ar
0072D0:  74 69 63 6C 65 20 38 20 20 20 20 2D 20 68 6F 77    ticle 8    - how
0072E0:  20 74 68 65 20 6D 65 6E 75 20 73 75 62 72 6F 75     the menu subrou
0072F0:  74 69 6E 65 20 77 6F 72 6B 73 0D 0A 41 72 74 69    tine works..Arti
007300:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
007310:  06 00 01 00 02 09 4E E5 06 00 C1 02 00 00 00 02    ......N.........
007320:  06 00 C6 02 00 00 00 02 06 00 C2 02 00 00 00 02    ................
007330:  06 00 C7 02 00 00 00 02 06 00 C3 02 00 00 00 02    ................
007340:  06 00 C8 02 00 00 00 02 06 00 C4 02 00 00 00 02    ................
007350:  06 00 C9 02 00 00 00 02 06 00 C5 02 00 00 00 02    ................
007360:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
007370:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
007380:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
007390:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0073A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0073B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0073C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0073D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0073E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0073F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
007400:  61 76 65 64 20 6F 6E 20 74 68 65 20 64 69 73 63    aved on the disc
007410:  20 61 73 20 44 49 53 43 4D 45 4E 55 2E 42 41 53     as DISCMENU.BAS
007420:  3E 3E 20 20 20 59 6F 75 20 6D 69 67 68 74 20 65    >>   You might e
007430:  76 65 6E 20 66 69 6E 64 20 69 74 0D 0A 20 20 20    ven find it..   
007440:  75 73 65 66 75 6C 2C 20 61 6E 64 20 69 74 20 20    useful, and it  
007450:  69 73 20 6F 6E 6C 79 20 20 65 69 67 68 74 20 6C    is only  eight l
007460:  69 6E 65 73 20 20 61 66 74 65 72 20 20 61 6C 6C    ines  after  all
007470:  2E 20 20 20 54 68 65 20 70 72 6F 67 72 61 6D 20    .   The program 
007480:  64 69 73 70 6C 61 79 73 20 61 0D 0A 20 20 20 63    displays a..   c
007490:  61 74 61 6C 6F 67 75 65 20 6F 66 20 74 68 65 20    atalogue of the 
0074A0:  64 69 73 63 2C 20 20 61 6E 64 20 61 6C 6C 6F 77    disc,  and allow
0074B0:  73 20 79 6F 75 20 74 6F 20 63 68 6F 6F 73 65 20    s you to choose 
0074C0:  61 20 66 69 6C 65 20 74 6F 20 72 75 6E 20 62 79    a file to run by
0074D0:  20 6D 6F 76 69 6E 67 20 61 0D 0A 20 20 20 70 6F     moving a..   po
0074E0:  69 6E 74 65 72 20 20 61 72 6F 75 6E 64 20 20 77    inter  around  w
0074F0:  69 74 68 20 20 74 68 65 20 20 63 75 72 73 6F 72    ith  the  cursor
007500:  20 6B 65 79 73 2E 20 20 48 6F 6C 64 69 6E 67 20     keys.  Holding 
007510:  64 6F 77 6E 20 53 48 49 46 54 20 77 69 6C 6C 20    down SHIFT will 
007520:  6D 61 6B 65 20 74 68 65 0D 0A 20 20 20 70 6F 69    make the..   poi
007530:  6E 74 65 72 20 6D 6F 76 65 20 66 61 73 74 65 72    nter move faster
007540:  2E 20 20 20 54 68 65 20 20 66 69 6C 65 20 69 73    .   The  file is
007550:  20 20 73 65 6C 65 63 74 65 64 20 20 62 79 20 70      selected  by p
007560:  72 65 73 73 69 6E 67 20 20 43 4F 50 59 2C 20 53    ressing  COPY, S
007570:  50 41 43 45 20 6F 72 0D 0A 20 20 20 45 4E 54 45    PACE or..   ENTE
007580:  52 20 28 6B 6E 6F 77 6E 20 61 73 20 52 45 54 55    R (known as RETU
007590:  52 4E 20 74 6F 20 20 79 6F 75 20 36 31 32 38 20    RN to  you 6128 
0075A0:  75 73 65 72 73 20 6F 75 74 20 74 68 65 72 65 29    users out there)
0075B0:  2E 20 20 59 6F 75 20 63 61 6E 20 63 68 61 6E 67    .  You can chang
0075C0:  65 20 74 6F 20 61 0D 0A 20 20 20 64 69 66 66 65    e to a..   diffe
0075D0:  72 65 6E 74 20 75 73 65 72 20 61 72 65 61 20 62    rent user area b
0075E0:  79 20 6D 6F 76 69 6E 67 20 74 68 65 20 70 6F 69    y moving the poi
0075F0:  6E 74 65 72 20 75 70 20 74 6F 20 74 68 65 20 77    nter up to the w
007600:  72 75 6E 20 69 74 2E 20 20 4F 74 68 65 72 77 69    run it.  Otherwi
007610:  73 65 20 77 65 20 70 72 6F 63 65 65 64 20 74 6F    se we proceed to
007620:  2E 2E 2E 0D 0A 0D 0A 20 20 20 36 30 20 77 68 69    .......   60 whi
007630:  63 68 20 61 73 6B 73 20 66 6F 72 20 74 68 65 20    ch asks for the 
007640:  6E 65 77 20 75 73 65 72 20 6E 75 6D 62 65 72 2C    new user number,
007650:  20 63 68 61 6E 67 65 73 20 74 6F 20 69 74 2C 20     changes to it, 
007660:  61 6E 64 20 72 65 63 61 74 61 6C 6F 67 75 65 73    and recatalogues
007670:  20 74 68 65 0D 0A 20 20 20 20 20 20 64 69 73 63     the..      disc
007680:  2E 20 20 54 68 65 20 57 48 49 4C 45 2D 57 45 4E    .  The WHILE-WEN
007690:  44 20 6C 6F 6F 70 20 68 65 72 65 20 65 6E 73 75    D loop here ensu
0076A0:  72 65 73 20 74 68 61 74 20 74 68 65 20 69 6E 70    res that the inp
0076B0:  75 74 20 69 73 20 62 65 74 77 65 65 6E 20 30 20    ut is between 0 
0076C0:  61 6E 64 0D 0A 20 20 20 20 20 20 31 35 2E 0D 0A    and..      15...
0076D0:  0D 0A 20 20 20 37 30 20 69 73 20 74 68 65 20 57    ..   70 is the W
0076E0:  45 4E 44 20 77 68 69 63 68 20 77 69 6C 6C 20 73    END which will s
0076F0:  65 6E 64 20 75 73 20 62 61 63 6B 20 74 6F 20 6C    end us back to l
007700:  69 6E 65 20 33 30 2C 20 72 65 61 64 79 20 74 6F    ine 30, ready to
007710:  20 73 74 61 72 74 20 61 67 61 69 6E 2E 0D 0A 0D     start again....
007720:  0A 20 20 20 38 30 20 69 73 20 61 20 73 75 62 72    .   80 is a subr
007730:  6F 75 74 69 6E 65 20 77 68 69 63 68 20 77 61 69    outine which wai
007740:  74 73 20 75 6E 74 69 6C 20 6E 6F 6E 65 20 20 6F    ts until none  o
007750:  66 20 74 68 65 20 73 65 6C 65 63 74 69 6F 6E 20    f the selection 
007760:  6B 65 79 73 20 61 72 65 20 62 65 69 6E 67 0D 0A    keys are being..
007770:  20 20 20 20 20 20 70 72 65 73 73 65 64 2C 20 61          pressed, a
007780:  6E 64 20 74 68 65 6E 20 63 6C 65 61 72 73 20 74    nd then clears t
007790:  68 65 20 6B 65 79 62 6F 61 72 64 20 62 75 66 66    he keyboard buff
0077A0:  65 72 2E 0D 0A 0D 0A 0D 0A 20 20 20 47 4F 54 4F    er.......   GOTO
0077B0:  20 31 30 0D 0A 20 20 20 20 20 54 68 65 20 66 69     10..     The fi
0077C0:  72 73 74 20 63 6F 6D 6D 61 6E 64 20 69 6E 20 74    rst command in t
0077D0:  68 65 20 70 72 6F 67 72 61 6D 20 20 69 73 20 20    he program  is  
0077E0:  74 68 65 72 65 20 74 6F 20 73 70 65 65 64 20 74    there to speed t
0077F0:  68 69 6E 67 73 20 75 70 20 73 6C 69 67 68 74 6C    hings up slightl
007800:  6F 72 64 20 22 75 73 65 72 22 20 61 74 20 74 68    ord "user" at th
007810:  65 20 74 6F 70 0D 0A 20 20 20 6F 66 20 74 68 65    e top..   of the
007820:  20 64 69 73 70 6C 61 79 2C 20 61 6E 64 20 70 72     display, and pr
007830:  65 73 73 69 6E 67 20 6F 6E 65 20 6F 66 20 74 68    essing one of th
007840:  65 20 74 68 72 65 65 20 73 65 6C 65 63 74 69 6F    e three selectio
007850:  6E 20 6B 65 79 73 2E 0D 0A 20 20 20 20 20 41 73    n keys...     As
007860:  20 68 65 20 68 61 73 20 62 65 65 6E 20 77 6F 72     he has been wor
007870:  6B 69 6E 67 20 61 73 20 20 61 20 20 73 6F 66 74    king as  a  soft
007880:  77 61 72 65 20 65 6E 67 69 6E 65 65 72 20 6F 76    ware engineer ov
007890:  65 72 20 74 68 65 20 73 75 6D 6D 65 72 2C 20 53    er the summer, S
0078A0:  74 65 70 68 65 6E 0D 0A 20 20 20 77 61 6E 74 73    tephen..   wants
0078B0:  20 74 6F 20 6D 61 6B 65 20 69 74 20 71 75 69 74     to make it quit
0078C0:  65 20 63 6C 65 61 72 20 74 68 61 74 20 20 74 68    e clear that  th
0078D0:  69 73 20 20 69 73 20 20 4E 4F 54 20 6D 65 61 6E    is  is  NOT mean
0078E0:  74 20 74 6F 20 62 65 20 61 6E 20 65 78 61 6D 70    t to be an examp
0078F0:  6C 65 20 6F 66 0D 0A 20 20 20 47 6F 6F 64 20 50    le of..   Good P
007900:  72 6F 67 72 61 6D 6D 69 6E 67 20 50 72 61 63 74    rogramming Pract
007910:  69 63 65 2E 20 20 20 4D 75 73 74 6E 27 74 20 20    ice.   Mustn't  
007920:  73 70 6F 69 6C 20 20 74 68 65 20 20 6A 6F 62 20    spoil  the  job 
007930:  20 70 72 6F 73 70 65 63 74 73 20 20 77 69 74 68     prospects  with
007940:  20 6F 6E 65 0D 0A 20 20 20 6C 69 74 74 6C 65 20     one..   little 
007950:  65 78 61 6D 70 6C 65 2E 2E 2E 0D 0A 20 20 20 20    example.....    
007960:  20 54 68 65 20 70 72 6F 67 72 61 6D 20 74 61 6B     The program tak
007970:  65 73 20 75 70 20 6C 65 73 73 20 20 74 68 61 6E    es up less  than
007980:  20 20 31 4B 20 20 6F 66 20 20 64 69 73 63 20 20      1K  of  disc  
007990:  73 70 61 63 65 2E 20 20 54 68 69 73 20 69 73 20    space.  This is 
0079A0:  69 6D 70 6F 72 74 61 6E 74 0D 0A 20 20 20 62 65    important..   be
0079B0:  63 61 75 73 65 20 74 68 65 20 69 64 65 61 20 69    cause the idea i
0079C0:  73 20 74 68 61 74 20 79 6F 75 20 77 6F 75 6C 64    s that you would
0079D0:  20 73 61 76 65 20 20 69 74 20 20 6F 6E 20 65 76     save  it  on ev
0079E0:  65 72 79 20 64 69 73 63 20 61 6E 64 20 75 73 65    ery disc and use
0079F0:  20 69 74 20 61 73 20 61 0D 0A 20 20 20 64 69 73     it as a..   dis
007A00:  79 2E 0D 0A 20 20 20 54 68 65 72 65 20 61 72 65    y...   There are
007A10:  20 74 68 72 65 65 20 64 69 66 66 65 72 65 6E 74     three different
007A20:  20 74 79 70 65 73 20 6F 66 20 20 76 61 72 69 61     types of  varia
007A30:  62 6C 65 3A 20 73 74 72 69 6E 67 73 2C 20 69 6E    ble: strings, in
007A40:  74 65 67 65 72 73 20 61 6E 64 20 72 65 61 6C 73    tegers and reals
007A50:  2E 0D 0A 20 20 20 4F 6E 20 74 68 65 20 41 6D 73    ...   On the Ams
007A60:  74 72 61 64 2C 20 69 6E 74 65 67 65 72 20 76 61    trad, integer va
007A70:  72 69 61 62 6C 65 73 20 61 72 65 20 20 77 68 6F    riables are  who
007A80:  6C 65 20 6E 75 6D 62 65 72 73 20 66 72 6F 6D 20    le numbers from 
007A90:  2D 33 32 37 36 38 20 74 6F 20 33 32 37 36 37 2E    -32768 to 32767.
007AA0:  0D 0A 20 20 20 52 65 61 6C 20 76 61 72 69 61 62    ..   Real variab
007AB0:  6C 65 73 20 28 61 6C 73 6F 20 6B 6E 6F 77 6E 20    les (also known 
007AC0:  61 73 20 66 6C 6F 61 74 69 6E 67 20 70 6F 69 6E    as floating poin
007AD0:  74 20 76 61 72 69 61 62 6C 65 73 29 20 63 61 6E    t variables) can
007AE0:  20 62 65 20 6D 75 63 68 20 62 69 67 67 65 72 0D     be much bigger.
007AF0:  0A 20 20 20 61 6E 64 20 64 6F 6E 27 74 20 68 61    .   and don't ha
007B00:  76 65 20 74 6F 20 62 65 20 77 68 6F 6C 65 20 6E    ve to be whole n
007B10:  75 6D 62 65 72 73 2E 20 20 55 73 69 6E 67 20 61    umbers.  Using a
007B20:  20 72 65 61 6C 20 76 61 72 69 61 62 6C 65 20 77     real variable w
007B30:  68 65 6E 20 61 6E 20 69 6E 74 65 67 65 72 0D 0A    hen an integer..
007B40:  20 20 20 77 69 6C 6C 20 64 6F 20 6D 61 6B 65 73       will do makes
007B50:  20 65 78 74 72 61 20 77 6F 72 6B 20 66 6F 72 20     extra work for 
007B60:  42 41 53 49 43 20 61 6E 64 20 73 6C 6F 77 73 20    BASIC and slows 
007B70:  74 68 65 20 70 72 6F 67 72 61 6D 20 64 6F 77 6E    the program down
007B80:  2E 20 20 54 6F 20 73 70 65 63 69 66 79 0D 0A 20    .  To specify.. 
007B90:  20 20 65 78 70 6C 69 63 69 74 6C 79 20 74 68 61      explicitly tha
007BA0:  74 20 61 20 76 61 72 69 61 62 6C 65 20 69 73 20    t a variable is 
007BB0:  61 20 73 74 72 69 6E 67 20 77 65 20 75 73 65 20    a string we use 
007BC0:  74 68 65 20 22 24 22 20 63 68 61 72 61 63 74 65    the "$" characte
007BD0:  72 20 61 73 20 69 6E 3A 0D 0A 0D 0A 20 20 20 20    r as in:....    
007BE0:  20 61 24 3D 22 48 65 6C 6C 6F 20 4D 75 6D 21 22     a$="Hello Mum!"
007BF0:  0D 0A 0D 0A 20 20 20 54 68 65 72 65 20 61 72 65    ....   There are
007C00:  63 20 6D 65 6E 75 20 73 79 73 74 65 6D 2E 20 20    c menu system.  
007C10:  54 6F 20 61 63 68 69 65 76 65 20 20 74 68 69 73    To achieve  this
007C20:  20 20 73 6D 61 6C 6C 20 73 69 7A 65 2C 20 6D 61      small size, ma
007C30:  6E 79 20 69 6E 67 65 6E 69 6F 75 73 20 74 65 63    ny ingenious tec
007C40:  68 6E 69 71 75 65 73 0D 0A 20 20 20 68 61 76 65    hniques..   have
007C50:  20 62 65 65 6E 20 65 6D 70 6C 6F 79 65 64 2E 20     been employed. 
007C60:  20 41 6C 74 68 6F 75 67 68 20 74 68 65 79 20 20     Although they  
007C70:  64 6F 20 20 6D 61 6B 65 20 20 74 68 65 20 6C 69    do  make  the li
007C80:  73 74 69 6E 67 20 72 61 74 68 65 72 20 64 61 75    sting rather dau
007C90:  6E 74 69 6E 67 2C 0D 0A 20 20 20 6F 6E 65 20 62    nting,..   one b
007CA0:  6F 6E 75 73 20 69 73 20 74 68 61 74 20 74 68 65    onus is that the
007CB0:  20 70 72 6F 67 72 61 6D 20 72 75 6E 73 20 6D 75     program runs mu
007CC0:  63 68 20 66 61 73 74 65 72 2E 0D 0A 0D 0A 20 20    ch faster.....  
007CD0:  20 4C 49 53 54 20 31 30 2D 38 30 0D 0A 20 20 20     LIST 10-80..   
007CE0:  4C 65 74 27 73 20 68 61 76 65 20 61 20 71 75 69    Let's have a qui
007CF0:  63 6B 20 6C 6F 6F 6B 20 74 68 72 6F 75 67 68 20    ck look through 
007D00:  77 68 61 74 20 65 61 63 68 20 6C 69 6E 65 20 64    what each line d
007D10:  6F 65 73 2E 0D 0A 0D 0A 20 20 20 31 30 20 73 65    oes.....   10 se
007D20:  74 73 20 75 70 20 73 6F 6D 65 20 6D 61 63 68 69    ts up some machi
007D30:  6E 65 20 63 6F 64 65 20 28 73 68 6F 63 6B 2C 20    ne code (shock, 
007D40:  68 6F 72 72 6F 72 21 29 20 74 68 61 74 20 77 65    horror!) that we
007D50:  20 6E 65 65 64 20 6C 61 74 65 72 2E 0D 0A 0D 0A     need later.....
007D60:  20 20 20 32 30 20 6D 61 6B 65 73 20 73 75 72 65       20 makes sure
007D70:  20 74 68 65 20 73 63 72 65 65 6E 20 69 73 20 73     the screen is s
007D80:  65 74 20 75 70 20 61 73 20 6E 6F 72 6D 61 6C 2C    et up as normal,
007D90:  20 61 6E 64 20 63 61 74 61 6C 6F 67 75 65 73 20     and catalogues 
007DA0:  74 68 65 20 64 69 73 63 2E 0D 0A 0D 0A 20 20 20    the disc.....   
007DB0:  33 30 20 69 73 20 77 68 65 72 65 20 74 68 65 20    30 is where the 
007DC0:  66 75 6E 20 73 74 61 72 74 73 2E 20 20 20 54 68    fun starts.   Th
007DD0:  65 20 20 6C 6F 6F 70 20 20 73 74 61 72 74 69 6E    e  loop  startin
007DE0:  67 20 22 57 48 49 4C 45 20 31 22 20 65 6E 64 73    g "WHILE 1" ends
007DF0:  20 61 74 20 74 68 65 0D 0A 20 20 20 20 20 20 22     at the..      "
007E00:  20 65 71 75 69 76 61 6C 65 6E 74 20 20 63 68 61     equivalent  cha
007E10:  72 61 63 74 65 72 73 20 20 66 6F 72 20 20 69 6E    racters  for  in
007E20:  74 65 67 65 72 20 20 76 61 72 69 61 62 6C 65 73    teger  variables
007E30:  20 20 61 6E 64 20 72 65 61 6C 73 2E 20 20 46 6F      and reals.  Fo
007E40:  72 0D 0A 20 20 20 65 78 61 6D 70 6C 65 3A 0D 0A    r..   example:..
007E50:  0D 0A 20 20 20 20 20 69 25 3D 33 0D 0A 20 20 20    ..     i%=3..   
007E60:  20 20 72 21 3D 33 2E 31 34 31 35 0D 0A 0D 0A 20      r!=3.1415.... 
007E70:  20 20 54 68 65 20 22 21 22 20 63 68 61 72 61 63      The "!" charac
007E80:  74 65 72 20 69 73 20 72 61 72 65 6C 79 20 75 73    ter is rarely us
007E90:  65 64 20 69 6E 20 74 68 69 73 20 63 6F 6E 74 65    ed in this conte
007EA0:  78 74 20 62 65 63 61 75 73 65 20 76 61 72 69 61    xt because varia
007EB0:  62 6C 65 73 20 77 69 74 68 6F 75 74 0D 0A 20 20    bles without..  
007EC0:  20 61 6E 79 20 74 79 70 65 20 20 69 64 65 6E 74     any type  ident
007ED0:  69 66 69 65 72 73 20 20 61 72 65 20 20 72 65 61    ifiers  are  rea
007EE0:  6C 20 20 62 79 20 20 64 65 66 61 75 6C 74 2E 20    l  by  default. 
007EF0:  20 20 22 44 45 46 49 4E 54 20 61 2D 7A 22 20 20      "DEFINT a-z"  
007F00:  63 68 61 6E 67 65 73 20 74 68 65 0D 0A 20 20 20    changes the..   
007F10:  64 65 66 61 75 6C 74 20 74 79 70 65 20 74 6F 20    default type to 
007F20:  69 6E 74 65 67 65 72 20 66 6F 72 20 61 6C 6C 20    integer for all 
007F30:  76 61 72 69 61 62 6C 65 73 20 20 62 65 67 69 6E    variables  begin
007F40:  6E 69 6E 67 20 77 69 74 68 20 74 68 65 20 6C 65    ning with the le
007F50:  74 74 65 72 73 20 61 20 74 6F 0D 0A 20 20 20 7A    tters a to..   z
007F60:  2E 20 20 59 6F 75 20 63 61 6E 20 66 69 6E 64 20    .  You can find 
007F70:  6F 75 74 20 61 62 6F 75 74 20 69 74 73 20 20 6C    out about its  l
007F80:  65 73 73 65 72 20 6B 6E 6F 77 6E 20 66 72 69 65    esser known frie
007F90:  6E 64 73 20 44 45 46 52 45 41 4C 20 61 6E 64 20    nds DEFREAL and 
007FA0:  44 45 46 53 54 52 20 69 6E 0D 0A 20 20 20 79 6F    DEFSTR in..   yo
007FB0:  75 72 20 6D 61 6E 75 61 6C 2E 20 20 41 73 20 61    ur manual.  As a
007FC0:  6E 20 65 78 61 6D 70 6C 65 2C 20 68 6F 77 20 61    n example, how a
007FD0:  62 6F 75 74 3A 0D 0A 0D 0A 20 20 20 20 20 44 45    bout:....     DE
007FE0:  46 53 54 52 20 74 0D 0A 20 20 20 20 20 74 69 67    FSTR t..     tig
007FF0:  67 65 72 3D 22 50 68 69 6C 69 70 20 44 69 52 69    ger="Philip DiRi
008000:  57 45 4E 44 22 20 69 6E 20 6C 69 6E 65 20 37 30    WEND" in line 70
008010:  2E 20 20 54 68 65 72 65 20 69 73 20 6E 6F 20 20    .  There is no  
008020:  77 61 79 20 20 6F 75 74 20 6F 66 20 74 68 69 73    way  out of this
008030:  20 6C 6F 6F 70 2C 20 61 6E 64 20 74 68 65 20 70     loop, and the p
008040:  72 6F 67 72 61 6D 0D 0A 20 20 20 20 20 20 6F 6E    rogram..      on
008050:  6C 79 20 73 74 6F 70 73 20 77 68 65 6E 20 74 68    ly stops when th
008060:  65 20 75 73 65 72 20 73 65 6C 65 63 74 73 20 20    e user selects  
008070:  61 20 20 66 69 6C 65 2C 20 20 77 68 69 63 68 20    a  file,  which 
008080:  20 69 73 20 72 75 6E 20 61 74 20 74 68 65 20 65     is run at the e
008090:  6E 64 20 6F 66 0D 0A 20 20 20 20 20 20 6C 69 6E    nd of..      lin
0080A0:  65 20 35 30 2E 0D 0A 20 20 20 20 20 20 20 20 54    e 50...        T
0080B0:  68 65 20 73 65 63 6F 6E 64 20 57 48 49 4C 45 20    he second WHILE 
0080C0:  6C 6F 6F 70 20 65 6E 64 73 20 61 74 20 74 68 65    loop ends at the
0080D0:  20 20 57 45 4E 44 20 70 61 72 74 20 77 61 79 20      WEND part way 
0080E0:  74 68 72 6F 75 67 68 20 6C 69 6E 65 20 35 30 2C    through line 50,
0080F0:  20 61 6E 64 0D 0A 20 20 20 20 20 20 77 61 69 74     and..      wait
008100:  73 20 75 6E 74 69 6C 20 61 20 66 69 6C 65 20 6F    s until a file o
008110:  72 20 22 75 73 65 72 22 20 69 73 20 73 65 6C 65    r "user" is sele
008120:  63 74 65 64 2E 0D 0A 20 20 20 20 20 20 20 20 41    cted...        A
008130:  74 20 74 68 65 20 65 6E 64 20 6F 66 20 74 68 65    t the end of the
008140:  20 20 6C 69 6E 65 20 20 74 68 65 20 20 70 6F 69      line  the  poi
008150:  6E 74 65 72 2C 20 20 43 48 52 24 28 32 31 35 29    nter,  CHR$(215)
008160:  2C 20 20 69 73 20 70 72 69 6E 74 65 64 20 6F 6E    ,  is printed on
008170:  20 74 68 65 0D 0A 20 20 20 20 20 20 73 63 72 65     the..      scre
008180:  65 6E 2E 0D 0A 0D 0A 20 20 20 34 30 20 68 61 73    en.....   40 has
008190:  20 61 20 57 48 49 4C 45 2D 57 45 4E 44 20 6C 6F     a WHILE-WEND lo
0081A0:  6F 70 20 61 6C 6C 20 20 74 6F 20 20 69 74 73 65    op all  to  itse
0081B0:  6C 66 2E 20 20 20 49 74 20 20 77 61 69 74 73 20    lf.   It  waits 
0081C0:  75 6E 74 69 6C 20 53 50 41 43 45 2C 20 43 4F 50    until SPACE, COP
0081D0:  59 20 6F 72 0D 0A 20 20 20 20 20 20 45 4E 54 45    Y or..      ENTE
0081E0:  52 20 69 73 20 70 72 65 73 73 65 64 2C 20 20 61    R is pressed,  a
0081F0:  6E 64 20 20 69 6E 20 20 74 68 65 20 20 6D 65 61    nd  in  the  mea
008200:  63 68 6C 65 61 75 22 0D 0A 20 20 20 20 20 50 52    chleau"..     PR
008210:  49 4E 54 20 74 69 67 67 65 72 0D 0A 0D 0A 20 20    INT tigger....  
008220:  20 20 20 57 65 27 6C 6C 20 63 6F 76 65 72 20 74       We'll cover t
008230:  68 65 20 72 65 73 74 20 6F 66 20 6C 69 6E 65 20    he rest of line 
008240:  31 30 20 69 6E 20 61 20 6C 61 74 65 72 20 61 72    10 in a later ar
008250:  74 69 63 6C 65 2E 0D 0A 0D 0A 20 20 20 49 4E 49    ticle.....   INI
008260:  54 49 41 4C 20 54 48 4F 55 47 48 54 53 0D 0A 20    TIAL THOUGHTS.. 
008270:  20 20 54 68 69 73 20 64 69 73 63 20 6D 65 6E 75      This disc menu
008280:  20 70 72 6F 67 72 61 6D 20 63 6F 75 6C 64 20 62     program could b
008290:  65 20 72 75 6E 20 61 74 20 61 6E 79 20 74 69 6D    e run at any tim
0082A0:  65 2C 20 73 6F 20 69 74 20 6D 75 73 74 20 6D 61    e, so it must ma
0082B0:  6B 65 20 73 75 72 65 20 74 68 61 74 0D 0A 20 20    ke sure that..  
0082C0:  20 74 68 65 20 63 6F 6D 70 75 74 65 72 2C 20 61     the computer, a
0082D0:  6E 64 20 69 6E 20 70 61 72 74 69 63 75 6C 61 72    nd in particular
0082E0:  20 74 68 65 20 20 73 63 72 65 65 6E 2C 20 20 69     the  screen,  i
0082F0:  73 20 73 65 74 20 75 70 20 70 72 6F 70 65 72 6C    s set up properl
008300:  79 2E 20 20 54 68 69 73 20 69 73 0D 0A 20 20 20    y.  This is..   
008310:  61 6C 6C 20 68 61 6E 64 6C 65 64 20 69 6E 20 6C    all handled in l
008320:  69 6E 65 20 32 30 2E 20 20 57 65 20 6D 61 6B 65    ine 20.  We make
008330:  20 75 73 65 20 6F 66 20 74 68 72 65 65 20 66 69     use of three fi
008340:  72 6D 77 61 72 65 20 63 61 6C 6C 73 2C 20 6D 61    rmware calls, ma
008350:  63 68 69 6E 65 20 63 6F 64 65 0D 0A 20 20 20 72    chine code..   r
008360:  6F 75 74 69 6E 65 73 20 77 68 69 63 68 20 61 72    outines which ar
008370:  65 20 62 75 69 6C 74 20 69 6E 20 74 6F 20 74 68    e built in to th
008380:  65 20 63 6F 6D 70 75 74 65 72 2E 20 20 54 68 65    e computer.  The
008390:  79 20 61 72 65 3A 0D 0A 0D 0A 20 20 20 26 42 42    y are:....   &BB
0083A0:  34 45 20 20 54 58 54 20 49 4E 49 54 49 41 4C 49    4E  TXT INITIALI
0083B0:  53 45 0D 0A 20 20 20 20 20 20 20 20 20 20 41 6D    SE..          Am
0083C0:  6F 6E 67 20 6F 74 68 65 72 20 74 68 69 6E 67 73    ong other things
0083D0:  2C 20 72 65 73 65 74 73 20 74 68 65 20 70 65 6E    , resets the pen
0083E0:  20 61 6E 64 20 70 61 70 65 72 20 63 6F 6C 6F 75     and paper colou
0083F0:  72 73 2C 20 61 6E 64 20 6D 6F 76 65 73 20 74 68    rs, and moves th
008400:  6E 74 69 6D 65 20 20 6D 6F 76 65 73 20 20 74 68    ntime  moves  th
008410:  65 20 20 70 6F 69 6E 74 65 72 20 61 62 6F 75 74    e  pointer about
008420:  20 69 6E 0D 0A 20 20 20 20 20 20 72 65 73 70 6F     in..      respo
008430:  6E 73 65 20 74 6F 20 74 68 65 20 63 75 72 73 6F    nse to the curso
008440:  72 20 6B 65 79 73 2E 0D 0A 0D 0A 20 20 20 35 30    r keys.....   50
008450:  20 61 66 74 65 72 20 72 65 6D 6F 76 69 6E 67 20     after removing 
008460:  74 68 65 20 20 63 75 72 73 6F 72 2C 20 20 72 65    the  cursor,  re
008470:  61 64 73 20 20 74 77 65 6C 76 65 20 20 63 68 61    ads  twelve  cha
008480:  72 61 63 74 65 72 73 20 20 6F 66 66 20 74 68 65    racters  off the
008490:  20 73 63 72 65 65 6E 2C 0D 0A 20 20 20 20 20 20     screen,..      
0084A0:  75 73 69 6E 67 20 74 68 65 20 6D 61 63 68 69 6E    using the machin
0084B0:  65 20 63 6F 64 65 20 65 6E 74 65 72 65 64 20 69    e code entered i
0084C0:  6E 20 6C 69 6E 65 20 20 31 30 2E 20 20 57 65 20    n line  10.  We 
0084D0:  6E 6F 77 20 65 6E 63 6F 75 6E 74 65 72 20 74 68    now encounter th
0084E0:  65 20 57 45 4E 44 2C 0D 0A 20 20 20 20 20 20 77    e WEND,..      w
0084F0:  68 6F 73 65 20 57 48 49 4C 45 20 77 61 73 20 68    hose WHILE was h
008500:  61 6C 66 77 61 79 20 74 68 72 6F 75 67 68 20 6C    alfway through l
008510:  69 6E 65 20 20 33 30 2E 20 20 20 49 66 20 20 77    ine  30.   If  w
008520:  65 20 67 65 74 20 70 61 73 74 20 74 68 65 20 57    e get past the W
008530:  45 4E 44 20 77 65 0D 0A 20 20 20 20 20 20 6B 6E    END we..      kn
008540:  6F 77 20 74 68 61 74 20 77 65 20 65 69 74 68 65    ow that we eithe
008550:  72 20 77 61 6E 74 20 74 6F 20 72 75 6E 20 20 61    r want to run  a
008560:  20 20 66 69 6C 65 2C 20 6F 72 20 63 68 61 6E 67      file, or chang
008570:  65 20 74 6F 20 61 20 64 69 66 66 65 72 65 6E 74    e to a different
008580:  20 75 73 65 72 0D 0A 20 20 20 20 20 20 61 72 65     user..      are
008590:  61 20 6F 6E 20 74 68 65 20 64 69 73 63 2E 20 20    a on the disc.  
0085A0:  49 66 20 74 68 65 20 6E 69 6E 74 68 20 63 68 61    If the ninth cha
0085B0:  72 61 63 74 65 72 20 69 73 20 61 20 66 75 6C 6C    racter is a full
0085C0:  20 73 74 6F 70 2C 20 77 65 20 63 61 6E 20 61 73     stop, we can as
0085D0:  73 75 6D 65 0D 0A 20 20 20 20 20 20 74 68 61 74    sume..      that
0085E0:  20 74 68 65 20 73 74 72 69 6E 67 20 20 69 73 20     the string  is 
0085F0:  61 20 66 69 6C 65 6E 61 6D 65 2C 20 61 6E 64 20    a filename, and 
008600:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
008610:  07 00 01 00 02 09 4E E5 07 00 C8 02 00 00 00 02    ......N.........
008620:  07 00 C4 02 00 00 00 02 07 00 C9 02 00 00 00 02    ................
008630:  07 00 C5 02 00 00 00 02 07 00 C1 02 00 00 00 02    ................
008640:  07 00 C6 02 00 00 00 02 07 00 C2 02 00 00 00 02    ................
008650:  07 00 C7 02 00 00 00 02 07 00 C3 02 00 00 00 02    ................
008660:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
008670:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
008680:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
008690:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0086A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0086B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0086C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0086D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0086E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0086F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
008700:  63 3D 79 3A 0D 0A 20 20 20 78 3D 4D 41 58 28 30    c=y:..   x=MAX(0
008710:  2C 4D 49 4E 28 36 33 32 2C 78 2B 33 2A 28 28 49    ,MIN(632,x+3*((I
008720:  4E 4B 45 59 28 38 29 3E 2D 31 29 2D 28 49 4E 4B    NKEY(8)>-1)-(INK
008730:  45 59 28 31 29 3E 2D 31 29 29 2A 28 34 2B 33 2A    EY(1)>-1))*(4+3*
008740:  28 49 4E 4B 45 59 28 32 31 29 3D 2D 31 29 29 29    (INKEY(21)=-1)))
008750:  29 3A 0D 0A 20 20 20 79 3D 4D 41 58 28 31 35 2C    ):..   y=MAX(15,
008760:  4D 49 4E 28 33 39 39 2C 79 2B 33 2A 28 28 49 4E    MIN(399,y+3*((IN
008770:  4B 45 59 28 32 29 3E 2D 31 29 2D 28 49 4E 4B 45    KEY(2)>-1)-(INKE
008780:  59 28 30 29 3E 2D 31 29 29 2A 28 28 49 4E 4B 45    Y(0)>-1))*((INKE
008790:  59 28 32 31 29 3D 2D 31 29 2B 32 29 29 29 3A 0D    Y(21)=-1)+2))):.
0087A0:  0A 20 20 20 4D 4F 56 45 20 62 2C 63 3A 50 52 49    .   MOVE b,c:PRI
0087B0:  4E 54 20 43 48 52 24 28 32 31 35 29 3B 3A 4D 4F    NT CHR$(215);:MO
0087C0:  56 45 20 78 2C 79 3A 50 52 49 4E 54 20 43 48 52    VE x,y:PRINT CHR
0087D0:  24 28 32 31 35 29 3B 3A 57 45 4E 44 0D 0A 35 30    $(215);:WEND..50
0087E0:  20 47 4F 53 55 42 20 38 30 3A 4D 4F 56 45 20 78     GOSUB 80:MOVE x
0087F0:  2C 79 3A 50 52 49 4E 54 20 43 48 52 24 28 32 31    ,y:PRINT CHR$(21
008800:  35 29 3B 3A 70 3D 28 78 5C 31 36 30 29 2A 32 30    5);:p=(x\160)*20
008810:  2B 31 3A 71 3D 28 34 30 30 2D 79 29 5C 31 36 2B    +1:q=(400-y)\16+
008820:  31 3A 4C 4F 43 41 54 45 20 70 2C 71 3A 0D 0A 20    1:LOCATE p,q:.. 
008830:  20 20 43 41 4C 4C 20 61 2C 40 66 24 3A 57 45 4E      CALL a,@f$:WEN
008840:  44 3A 54 41 47 4F 46 46 3A 49 46 20 4D 49 44 24    D:TAGOFF:IF MID$
008850:  28 66 24 2C 39 2C 31 29 3D 22 2E 22 20 54 48 45    (f$,9,1)="." THE
008860:  4E 20 4D 45 4D 4F 52 59 20 48 49 4D 45 4D 2B 33    N MEMORY HIMEM+3
008870:  34 3A 43 41 4C 4C 20 26 42 42 42 41 3A 0D 0A 20    4:CALL &BBBA:.. 
008880:  20 20 4D 4F 44 45 20 31 3A 52 55 4E 20 66 24 0D      MODE 1:RUN f$.
008890:  0A 36 30 20 75 3D 31 36 3A 57 48 49 4C 45 20 75    .60 u=16:WHILE u
0088A0:  20 41 4E 44 20 2D 31 36 3A 4C 4F 43 41 54 45 20     AND -16:LOCATE 
0088B0:  31 2C 76 3A 50 52 49 4E 54 22 55 73 65 72 3A 20    1,v:PRINT"User: 
0088C0:  22 2B 43 48 52 24 28 32 30 29 3B 3A 4C 49 4E 45    "+CHR$(20);:LINE
0088D0:  20 49 4E 50 55 54 20 75 24 3A 0D 0A 20 20 20 75     INPUT u$:..   u
0088E0:  3D 56 41 4C 28 75 24 29 3A 57 45 4E 44 3A 49 46    =VAL(u$):WEND:IF
0088F0:  20 75 24 3C 3E 22 22 20 54 48 45 4E 20 7C 55 53     u$<>"" THEN |US
008900:  6F 70 2E 20 20 54 68 65 20 63 6F 6C 6F 75 72 20    op.  The colour 
008910:  74 68 61 74 20 61 70 70 65 61 72 73 20 20 6F 6E    that appears  on
008920:  20 20 74 68 65 20 73 63 72 65 65 6E 20 69 73 20      the screen is 
008930:  61 20 58 4F 52 20 62 2E 20 20 53 6F 2C 0D 0A 20    a XOR b.  So,.. 
008940:  20 20 69 66 20 62 20 69 73 20 30 2C 20 74 68 65      if b is 0, the
008950:  6E 20 74 68 65 20 63 6F 6C 6F 75 72 20 73 74 61    n the colour sta
008960:  79 73 20 61 73 20 61 2E 20 20 49 66 20 62 20 69    ys as a.  If b i
008970:  73 20 31 2C 20 74 68 65 6E 20 74 68 65 20 63 6F    s 1, then the co
008980:  6C 6F 75 72 20 63 68 61 6E 67 65 73 0D 0A 20 20    lour changes..  
008990:  20 66 72 6F 6D 20 30 20 74 6F 20 31 20 6F 72 20     from 0 to 1 or 
0089A0:  66 72 6F 6D 20 31 20 20 74 6F 20 20 30 2E 20 20    from 1  to  0.  
0089B0:  20 49 6E 20 20 65 69 74 68 65 72 20 20 63 61 73     In  either  cas
0089C0:  65 2C 20 70 72 69 6E 74 69 6E 67 20 63 6F 6C 6F    e, printing colo
0089D0:  75 72 20 62 20 6F 6E 20 74 6F 70 0D 0A 20 20 20    ur b on top..   
0089E0:  61 67 61 69 6E 20 6D 65 61 6E 73 20 74 68 61 74    again means that
0089F0:  20 77 65 20 65 6E 64 20 75 70 20 77 69 74 68 20     we end up with 
008A00:  77 68 61 74 20 20 77 65 20 73 74 61 72 74 65 64    what  we started
008A10:  20 77 69 74 68 2E 20 20 54 68 69 73 20 6D 61 6B     with.  This mak
008A20:  65 73 20 69 74 20 65 61 73 79 0D 0A 20 20 20 66    es it easy..   f
008A30:  6F 72 20 75 73 20 74 6F 20 6D 6F 76 65 20 6F 75    or us to move ou
008A40:  72 20 70 6F 69 6E 74 65 72 20 61 62 6F 75 74 20    r pointer about 
008A50:  6F 6E 20 74 68 65 20 73 63 72 65 65 6E 20 77 69    on the screen wi
008A60:  74 68 6F 75 74 20 77 6F 72 72 79 69 6E 67 20 61    thout worrying a
008A70:  62 6F 75 74 20 77 68 61 74 0D 0A 20 20 20 69 73    bout what..   is
008A80:  20 75 6E 64 65 72 6E 65 61 74 68 20 69 74 2E 0D     underneath it..
008A90:  0A 20 20 20 20 20 54 68 65 20 70 6F 73 69 74 69    .     The positi
008AA0:  6F 6E 20 6F 66 20 74 68 65 20 70 6F 69 6E 74 65    on of the pointe
008AB0:  72 20 69 73 20 68 65 6C 64 20 69 6E 20 20 74 68    r is held in  th
008AC0:  65 20 76 61 72 69 61 62 6C 65 73 20 78 20 61 6E    e variables x an
008AD0:  64 20 79 2C 20 61 6E 64 20 74 68 65 73 65 0D 0A    d y, and these..
008AE0:  20 20 20 61 72 65 20 73 65 74 20 75 70 20 74 6F       are set up to
008AF0:  20 70 6C 61 63 65 20 69 74 20 6E 65 61 72 20 74     place it near t
008B00:  45 52 2C 75 3A 43 4C 53 3A 43 41 54 3A 76 3D 56    ER,u:CLS:CAT:v=V
008B10:  50 4F 53 28 23 30 29 0D 0A 37 30 20 57 45 4E 44    POS(#0)..70 WEND
008B20:  0D 0A 38 30 20 57 48 49 4C 45 20 49 4E 4B 45 59    ..80 WHILE INKEY
008B30:  28 34 37 29 2B 49 4E 4B 45 59 28 31 38 29 2B 49    (47)+INKEY(18)+I
008B40:  4E 4B 45 59 28 39 29 3E 2D 33 3A 57 45 4E 44 3A    NKEY(9)>-3:WEND:
008B50:  57 48 49 4C 45 20 49 4E 4B 45 59 24 3C 3E 22 22    WHILE INKEY$<>""
008B60:  3A 57 45 4E 44 3A 52 45 54 55 52 4E 0D 0A 0D 0A    :WEND:RETURN....
008B70:  20 20 20 46 69 67 75 72 65 20 31 0D 0A 1A 6E 67       Figure 1...ng
008B80:  39 30 30 30 2C 40 63 25 0D 0A 31 33 30 20 50 52    9000,@c%..130 PR
008B90:  49 4E 54 3A 50 52 49 4E 54 22 54 68 65 20 6C 65    INT:PRINT"The le
008BA0:  74 74 65 72 20 61 74 20 74 68 65 20 74 6F 70 20    tter at the top 
008BB0:  6C 65 66 74 20 6F 66 20 74 68 65 20 73 63 72 65    left of the scre
008BC0:  65 6E 20 69 73 20 61 20 22 3B 43 48 52 24 28 63    en is a ";CHR$(c
008BD0:  25 29 0D 0A 31 39 30 20 44 41 54 41 20 44 44 2C    %)..190 DATA DD,
008BE0:  36 36 2C 30 31 2C 44 44 2C 36 45 2C 30 30 2C 43    66,01,DD,6E,00,C
008BF0:  44 2C 36 30 2C 42 42 2C 37 37 2C 32 33 2C 33 36    D,60,BB,77,23,36
008C00:  2C 30 30 2C 43 39 0D 0A 1A 20 24 24 24 FF 00 FF    ,00,C9... $$$...
008C10:  00 00 0A 00 00 72 01 00 10 29 00 00 00 00 00 00    .....r...)......
008C20:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
008C30:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
008C40:  10 29 00 86 03 54 0D 0A 0D 0A 46 69 67 75 72 65    .)...T....Figure
008C50:  20 32 2E 37 31 1A 00 0A 00 00 73 01 00 1E 00 00     2.71.....s.....
008C60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
008C70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
008C80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008C90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008CA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008CB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008CC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008CD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008CE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008CF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
008D00:  68 65 20 20 74 6F 70 20 6F 66 20 74 68 65 20 73    he  top of the s
008D10:  63 72 65 65 6E 2E 20 20 41 66 74 65 72 20 63 61    creen.  After ca
008D20:  74 61 6C 6F 67 75 69 6E 67 20 74 68 65 0D 0A 20    taloguing the.. 
008D30:  20 20 64 69 73 63 2C 20 74 68 65 20 56 50 4F 53      disc, the VPOS
008D40:  20 66 75 6E 63 74 69 6F 6E 20 69 73 20 75 73 65     function is use
008D50:  64 20 74 6F 20 20 70 75 74 20 20 74 68 65 20 56    d to  put  the V
008D60:  65 72 74 69 63 61 6C 20 50 4F 53 69 74 69 6F 6E    ertical POSition
008D70:  20 6F 66 20 74 68 65 20 74 65 78 74 0D 0A 20 20     of the text..  
008D80:  20 63 75 72 73 6F 72 20 69 6E 74 6F 20 76 61 72     cursor into var
008D90:  69 61 62 6C 65 20 76 2E 20 20 41 73 20 64 69 73    iable v.  As dis
008DA0:  63 20 63 61 74 61 6C 6F 67 75 65 73 20 76 61 72    c catalogues var
008DB0:  79 20 69 6E 20 6C 65 6E 67 74 68 2C 20 77 65 20    y in length, we 
008DC0:  68 61 76 65 20 74 6F 20 75 73 65 0D 0A 20 20 20    have to use..   
008DD0:  56 50 4F 53 20 74 6F 20 66 69 6E 64 20 6F 75 74    VPOS to find out
008DE0:  20 77 68 65 72 65 20 74 68 65 20 63 75 72 73 6F     where the curso
008DF0:  72 20 68 61 73 20 65 6E 64 65 64 20 75 70 2E 20    r has ended up. 
008E00:  20 56 61 72 69 61 62 6C 65 20 76 20 69 73 20 75     Variable v is u
008E10:  73 65 64 20 69 6E 20 74 68 65 0D 0A 20 20 20 4C    sed in the..   L
008E20:  4F 43 41 54 45 20 63 6F 6D 6D 61 6E 64 20 69 6E    OCATE command in
008E30:  20 6C 69 6E 65 20 36 30 20 74 6F 20 65 6E 73 75     line 60 to ensu
008E40:  72 65 20 20 74 68 61 74 20 20 74 68 65 20 22 55    re  that  the "U
008E50:  73 65 72 3A 22 20 70 72 6F 6D 70 74 20 69 73 20    ser:" prompt is 
008E60:  61 6C 77 61 79 73 20 69 6E 0D 0A 20 20 20 74 68    always in..   th
008E70:  65 20 72 69 67 68 74 20 70 6C 61 63 65 2C 20 6A    e right place, j
008E80:  75 73 74 20 62 65 6C 6F 77 20 74 68 65 20 65 6E    ust below the en
008E90:  64 20 6F 66 20 74 68 65 20 64 69 73 63 20 63 61    d of the disc ca
008EA0:  74 61 6C 6F 67 75 65 2E 0D 0A 0D 0A 20 20 20 45    talogue.....   E
008EB0:  4E 44 20 4F 46 20 46 49 4C 45 0D 0A 20 20 20 54    ND OF FILE..   T
008EC0:  68 65 20 70 72 6F 67 72 61 6D 20 65 6E 64 73 20    he program ends 
008ED0:  69 6E 20 6C 69 6E 65 20 35 30 20 77 68 65 6E 20    in line 50 when 
008EE0:  20 74 68 65 20 73 65 6C 65 63 74 65 64 20 66 69     the selected fi
008EF0:  6C 65 20 69 73 20 52 55 4E 2E 20 20 53 6F 6D 65    le is RUN.  Some
008F00:  65 0D 0A 20 20 20 20 20 20 20 20 20 20 63 75 72    e..          cur
008F10:  73 6F 72 20 74 6F 20 74 68 65 20 74 6F 70 20 6C    sor to the top l
008F20:  65 66 74 20 6F 66 20 74 68 65 20 73 63 72 65 65    eft of the scree
008F30:  6E 2E 0D 0A 0D 0A 20 20 20 26 42 42 42 41 20 20    n.....   &BBBA  
008F40:  47 52 41 20 49 4E 49 54 49 41 4C 49 53 45 0D 0A    GRA INITIALISE..
008F50:  20 20 20 20 20 20 20 20 20 20 52 65 73 65 74 73              Resets
008F60:  20 74 68 65 20 67 72 61 70 68 69 63 73 20 70 65     the graphics pe
008F70:  6E 20 20 61 6E 64 20 20 20 70 61 70 65 72 2C 20    n  and   paper, 
008F80:  20 74 68 65 20 20 73 69 7A 65 20 20 61 6E 64 20     the  size  and 
008F90:  6F 72 69 67 69 6E 20 6F 66 20 74 68 65 0D 0A 20    origin of the.. 
008FA0:  20 20 20 20 20 20 20 20 20 67 72 61 70 68 69 63             graphic
008FB0:  73 20 77 69 6E 64 6F 77 2C 20 6D 6F 76 65 73 20    s window, moves 
008FC0:  74 68 65 20 67 72 61 70 68 69 63 73 20 63 75 72    the graphics cur
008FD0:  73 6F 72 20 20 74 6F 20 74 68 65 20 62 6F 74 74    sor  to the bott
008FE0:  6F 6D 20 6C 65 66 74 2C 20 61 6E 64 0D 0A 20 20    om left, and..  
008FF0:  20 20 20 20 20 20 20 20 73 65 74 73 20 74 68 65            sets the
009000:  20 67 72 61 70 68 69 63 73 20 77 72 69 74 65 20     graphics write 
009010:  6D 6F 64 65 20 74 6F 20 6E 6F 72 6D 61 6C 2E 0D    mode to normal..
009020:  0A 0D 0A 20 20 20 26 42 43 30 32 20 20 53 43 52    ...   &BC02  SCR
009030:  20 52 45 53 45 54 0D 0A 20 20 20 20 20 20 20 20     RESET..        
009040:  20 20 53 65 74 73 20 74 68 65 20 69 6E 6B 73 20      Sets the inks 
009050:  74 6F 20 74 68 65 69 72 20 64 65 66 61 75 6C 74    to their default
009060:  20 76 61 6C 75 65 73 2E 0D 0A 0D 0A 20 20 20 54     values.....   T
009070:  68 65 73 65 20 74 68 72 65 65 20 72 6F 75 74 69    hese three routi
009080:  6E 65 73 20 61 72 65 20 61 20 68 61 6E 64 79 20    nes are a handy 
009090:  20 77 61 79 20 20 6F 66 20 20 67 65 74 74 69 6E     way  of  gettin
0090A0:  67 20 20 61 20 6C 6F 74 20 6F 66 20 74 68 69 6E    g  a lot of thin
0090B0:  67 73 20 73 65 74 20 75 70 0D 0A 20 20 20 77 69    gs set up..   wi
0090C0:  74 68 20 76 65 72 79 20 66 65 77 20 63 6F 6D 6D    th very few comm
0090D0:  61 6E 64 73 2E 0D 0A 20 20 20 20 20 41 66 74 65    ands...     Afte
0090E0:  72 20 73 65 6C 65 63 74 69 6E 67 20 4D 4F 44 45    r selecting MODE
0090F0:  20 32 2C 20 77 65 20 70 72 69 6E 74 20 20 43 48     2, we print  CH
009100:  20 70 72 6F 67 72 61 6D 73 0D 0A 20 20 20 6D 61     programs..   ma
009110:  79 20 61 73 73 75 6D 65 20 74 68 61 74 20 74 68    y assume that th
009120:  65 20 73 63 72 65 65 6E 20 69 73 20 61 6C 72 65    e screen is alre
009130:  61 64 79 20 20 69 6E 20 20 4D 4F 44 45 20 20 31    ady  in  MODE  1
009140:  20 61 73 20 69 74 20 69 73 20 77 68 65 6E 20 79     as it is when y
009150:  6F 75 20 66 69 72 73 74 0D 0A 20 20 20 73 77 69    ou first..   swi
009160:  74 63 68 20 6F 6E 2E 20 20 42 65 66 6F 72 65 20    tch on.  Before 
009170:  72 75 6E 6E 69 6E 67 20 74 68 65 20 20 70 72 6F    running the  pro
009180:  67 72 61 6D 20 20 77 65 20 20 72 65 73 65 74 20    gram  we  reset 
009190:  74 68 65 20 67 72 61 70 68 69 63 73 20 77 72 69    the graphics wri
0091A0:  74 65 20 6D 6F 64 65 0D 0A 20 20 20 77 69 74 68    te mode..   with
0091B0:  20 61 6E 6F 74 68 65 72 20 63 61 6C 6C 20 74 6F     another call to
0091C0:  20 26 42 42 42 41 20 61 6E 64 20 20 63 68 61 6E     &BBBA and  chan
0091D0:  67 65 20 20 74 6F 20 20 4D 4F 44 45 20 20 31 2C    ge  to  MODE  1,
0091E0:  20 61 73 20 74 68 65 73 65 20 61 72 65 20 74 68     as these are th
0091F0:  65 20 6F 6E 6C 79 0D 0A 20 20 20 74 68 69 6E 67    e only..   thing
009200:  73 20 77 65 20 68 61 76 65 20 61 6C 74 65 72 65    s we have altere
009210:  64 2E 0D 0A 0D 0A 20 20 20 46 49 4E 41 4C 20 53    d.....   FINAL S
009220:  49 4C 4C 59 20 48 45 41 44 49 4E 47 0D 0A 20 20    ILLY HEADING..  
009230:  20 41 73 20 61 20 63 68 61 6C 6C 65 6E 67 65 20     As a challenge 
009240:  79 6F 75 20 6D 61 79 20 77 61 6E 74 20 74 6F 20    you may want to 
009250:  69 6E 76 65 73 74 69 67 61 74 65 20 6C 69 6E 65    investigate line
009260:  20 34 30 20 61 73 20 74 68 61 74 27 73 20 77 68     40 as that's wh
009270:  61 74 20 77 65 27 6C 6C 20 62 65 0D 0A 20 20 20    at we'll be..   
009280:  6C 6F 6F 6B 69 6E 67 20 61 74 20 6E 65 78 74 20    looking at next 
009290:  74 69 6D 65 2E 20 20 41 6C 73 6F 2C 20 69 66 20    time.  Also, if 
0092A0:  61 6E 79 6F 6E 65 20 63 61 6E 20 65 78 70 6C 61    anyone can expla
0092B0:  69 6E 20 77 68 79 20 4C 6F 63 6F 6D 6F 74 69 76    in why Locomotiv
0092C0:  65 20 53 6F 66 74 77 61 72 65 0D 0A 20 20 20 64    e Software..   d
0092D0:  65 63 69 64 65 64 20 74 6F 20 69 6E 63 6C 75 64    ecided to includ
0092E0:  65 20 74 68 65 20 43 52 45 41 4C 20 66 75 6E 63    e the CREAL func
0092F0:  74 69 6F 6E 20 69 6E 20 41 6D 73 74 72 61 64 20    tion in Amstrad 
009300:  52 24 28 32 33 29 20 20 61 6E 64 20 43 48 52 24    R$(23)  and CHR$
009310:  28 31 29 20 74 6F 20 73 77 69 74 63 68 20 74 6F    (1) to switch to
009320:  20 58 4F 52 0D 0A 20 20 20 67 72 61 70 68 69 63     XOR..   graphic
009330:  73 20 6D 6F 64 65 2E 20 20 59 6F 75 20 73 65 65    s mode.  You see
009340:  20 58 4F 52 20 6D 6F 64 65 20 69 6E 20 20 75 73     XOR mode in  us
009350:  65 20 20 61 6C 6C 20 20 74 68 65 20 20 74 69 6D    e  all  the  tim
009360:  65 2C 20 61 73 20 69 74 20 69 73 20 75 73 65 64    e, as it is used
009370:  20 74 6F 0D 0A 20 20 20 64 69 73 70 6C 61 79 20     to..   display 
009380:  74 68 65 20 42 41 53 49 43 20 74 65 78 74 20 63    the BASIC text c
009390:  75 72 73 6F 72 2E 20 20 20 57 65 20 20 75 73 65    ursor.   We  use
0093A0:  20 20 74 68 69 73 20 20 73 61 6D 65 20 65 66 66      this  same eff
0093B0:  65 63 74 20 74 6F 20 64 69 73 70 6C 61 79 20 6F    ect to display o
0093C0:  75 72 0D 0A 20 20 20 70 6F 69 6E 74 65 72 2E 20    ur..   pointer. 
0093D0:  20 49 66 20 79 6F 75 20 73 77 69 74 63 68 20 6F     If you switch o
0093E0:  6E 20 20 79 6F 75 72 20 20 41 6D 73 74 72 61 64    n  your  Amstrad
0093F0:  2C 20 20 61 6E 64 20 20 74 79 70 65 20 69 6E 20    ,  and  type in 
009400:  74 68 65 20 66 6F 6C 6C 6F 77 69 6E 67 20 66 65    the following fe
009410:  77 0D 0A 20 20 20 63 6F 6D 6D 61 6E 64 73 2C 20    w..   commands, 
009420:  79 6F 75 20 63 61 6E 20 73 65 65 20 61 20 66 75    you can see a fu
009430:  72 74 68 65 72 20 64 65 6D 6F 6E 73 74 72 61 74    rther demonstrat
009440:  69 6F 6E 3A 0D 0A 0D 0A 20 20 20 20 20 4D 4F 44    ion:....     MOD
009450:  45 20 32 0D 0A 20 20 20 20 20 50 52 49 4E 54 20    E 2..     PRINT 
009460:  43 48 52 24 28 32 33 29 3B 43 48 52 24 28 31 29    CHR$(23);CHR$(1)
009470:  0D 0A 20 20 20 20 20 4D 4F 56 45 20 30 2C 33 37    ..     MOVE 0,37
009480:  32 3A 44 52 41 57 52 20 32 30 30 2C 30 2C 31 0D    2:DRAWR 200,0,1.
009490:  0A 0D 0A 20 20 20 41 20 68 6F 72 69 7A 6F 6E 74    ...   A horizont
0094A0:  61 6C 20 6C 69 6E 65 20 73 68 6F 75 6C 64 20 20    al line should  
0094B0:  61 70 70 65 61 72 2C 20 20 63 75 74 74 69 6E 67    appear,  cutting
0094C0:  20 20 74 68 72 6F 75 67 68 20 20 73 6F 6D 65 20      through  some 
0094D0:  20 6F 66 20 74 68 65 20 74 65 78 74 20 79 6F 75     of the text you
0094E0:  0D 0A 20 20 20 74 79 70 65 64 2E 20 20 54 79 70    ..   typed.  Typ
0094F0:  65 20 74 68 65 20 6C 61 73 74 20 6C 69 6E 65 20    e the last line 
009500:  42 41 53 49 43 2C 20 77 65 27 64 20 62 65 20 69    BASIC, we'd be i
009510:  6E 74 65 72 65 73 74 65 64 0D 0A 20 20 20 74 6F    nterested..   to
009520:  20 6B 6E 6F 77 21 0D 0A 0D 0A 0D 0A 31 30 20 44     know!......10 D
009530:  45 46 49 4E 54 20 61 2D 7A 3A 4D 45 4D 4F 52 59    EFINT a-z:MEMORY
009540:  20 48 49 4D 45 4D 2D 33 34 3A 61 3D 55 4E 54 28     HIMEM-34:a=UNT(
009550:  48 49 4D 45 4D 2B 31 29 3A 46 4F 52 20 78 3D 30    HIMEM+1):FOR x=0
009560:  20 54 4F 20 33 33 3A 52 45 41 44 20 61 24 3A 0D     TO 33:READ a$:.
009570:  0A 20 20 20 50 4F 4B 45 20 61 2B 78 2C 56 41 4C    .   POKE a+x,VAL
009580:  28 22 26 22 2B 61 24 29 3A 4E 45 58 54 3A 44 41    ("&"+a$):NEXT:DA
009590:  54 41 20 43 44 2C 37 38 2C 42 42 2C 34 43 2C 44    TA CD,78,BB,4C,D
0095A0:  44 2C 36 45 2C 30 2C 44 44 2C 36 36 2C 31 2C 34    D,6E,0,DD,66,1,4
0095B0:  36 2C 37 38 2C 42 37 2C 43 38 2C 32 33 2C 0D 0A    6,78,B7,C8,23,..
0095C0:  20 20 20 35 45 2C 32 33 2C 36 36 2C 36 42 2C 43       5E,23,66,6B,C
0095D0:  44 2C 36 30 2C 42 42 2C 37 37 2C 32 33 2C 43 2C    D,60,BB,77,23,C,
0095E0:  37 39 2C 45 35 2C 43 44 2C 36 46 2C 42 42 2C 45    79,E5,CD,6F,BB,E
0095F0:  31 2C 31 30 2C 46 32 2C 43 39 0D 0A 32 30 20 43    1,10,F2,C9..20 C
009600:  41 4C 4C 20 26 42 42 34 45 3A 43 41 4C 4C 20 26    ALL &BB4E:CALL &
009610:  42 43 30 32 3A 43 41 4C 4C 20 26 42 42 42 41 3A    BC02:CALL &BBBA:
009620:  4D 4F 44 45 20 32 3A 50 52 49 4E 54 20 43 48 52    MODE 2:PRINT CHR
009630:  24 28 32 33 29 2B 43 48 52 24 28 31 29 3A 78 3D    $(23)+CHR$(1):x=
009640:  31 30 30 3A 79 3D 32 39 36 3A 0D 0A 20 20 20 43    100:y=296:..   C
009650:  41 54 3A 76 3D 56 50 4F 53 28 23 30 29 0D 0A 33    AT:v=VPOS(#0)..3
009660:  30 20 57 48 49 4C 45 20 31 3A 54 41 47 3A 66 24    0 WHILE 1:TAG:f$
009670:  3D 53 50 41 43 45 24 28 31 32 29 3A 57 48 49 4C    =SPACE$(12):WHIL
009680:  45 20 4D 49 44 24 28 66 24 2C 39 2C 31 29 3C 3E    E MID$(f$,9,1)<>
009690:  22 2E 22 20 41 4E 44 20 4D 49 44 24 28 66 24 2C    "." AND MID$(f$,
0096A0:  38 2C 31 29 3C 3E 22 3A 22 3A 0D 0A 20 20 20 4D    8,1)<>":":..   M
0096B0:  4F 56 45 20 78 2C 79 3A 50 52 49 4E 54 20 43 48    OVE x,y:PRINT CH
0096C0:  52 24 28 32 31 35 29 3B 3A 47 4F 53 55 42 20 38    R$(215);:GOSUB 8
0096D0:  30 0D 0A 34 30 20 57 48 49 4C 45 20 49 4E 4B 45    0..40 WHILE INKE
0096E0:  59 28 34 37 29 2B 49 4E 4B 45 59 28 31 38 29 2B    Y(47)+INKEY(18)+
0096F0:  49 4E 4B 45 59 28 39 29 3D 2D 33 3A 62 3D 78 3A    INKEY(9)=-3:b=x:
009700:  61 67 61 69 6E 2C 20 20 61 6E 64 20 20 74 68 65    again,  and  the
009710:  20 74 65 78 74 20 77 69 6C 6C 20 6D 61 67 69 63     text will magic
009720:  61 6C 6C 79 20 28 6F 72 20 72 61 74 68 65 72 0D    ally (or rather.
009730:  0A 20 20 20 6C 6F 67 69 63 61 6C 6C 79 29 20 72    .   logically) r
009740:  65 61 70 70 65 61 72 2E 20 20 54 68 69 73 20 69    eappear.  This i
009750:  73 20 61 6C 6C 20 20 64 75 65 20 20 74 6F 20 20    s all  due  to  
009760:  74 68 65 20 20 70 72 6F 70 65 72 74 69 65 73 20    the  properties 
009770:  6F 66 20 58 4F 52 2C 20 61 73 20 61 6E 79 0D 0A    of XOR, as any..
009780:  20 20 20 6C 6F 67 69 63 69 61 6E 20 63 6F 75 6C       logician coul
009790:  64 20 74 65 6C 6C 20 79 6F 75 2E 0D 0A 0D 0A 20    d tell you..... 
0097A0:  20 20 20 20 20 20 20 20 20 20 61 20 20 20 20 20              a     
0097B0:  20 20 62 20 20 20 20 20 20 20 61 20 58 4F 52 20      b       a XOR 
0097C0:  62 0D 0A 0D 0A 20 20 20 20 20 20 20 20 20 20 20    b....           
0097D0:  30 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20    0       0       
0097E0:  30 0D 0A 20 20 20 20 20 20 20 20 20 20 20 31 20    0..           1 
0097F0:  20 20 20 20 20 20 30 20 20 20 20 20 20 20 31 0D          0       1.
009800:  0A 20 20 20 20 20 20 20 20 20 20 20 30 20 20 20    .           0   
009810:  20 20 20 20 31 20 20 20 20 20 20 20 31 0D 0A 20        1       1.. 
009820:  20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20              1     
009830:  20 20 31 20 20 20 20 20 20 20 30 0D 0A 0D 0A 20      1       0.... 
009840:  20 20 46 69 67 75 72 65 20 31 2E 36 0D 0A 0D 0A      Figure 1.6....
009850:  0D 0A 20 20 20 20 20 46 69 67 75 72 65 20 31 2E    ..     Figure 1.
009860:  36 20 73 68 6F 77 73 20 74 68 65 20 22 74 72 75    6 shows the "tru
009870:  74 68 20 74 61 62 6C 65 22 20 66 6F 72 20 20 65    th table" for  e
009880:  58 63 6C 75 73 69 76 65 20 4F 52 2E 20 20 49 6D    Xclusive OR.  Im
009890:  61 67 69 6E 65 20 74 68 61 74 20 61 20 69 73 0D    agine that a is.
0098A0:  0A 20 20 20 74 68 65 20 63 6F 6C 6F 75 72 20 6F    .   the colour o
0098B0:  66 20 61 20 70 69 78 65 6C 20 6F 6E 20 74 68 65    f a pixel on the
0098C0:  20 73 63 72 65 65 6E 2C 20 61 6E 64 20 74 68 61     screen, and tha
0098D0:  74 20 62 20 69 73 20 74 68 65 20 63 6F 6C 6F 75    t b is the colou
0098E0:  72 20 77 65 20 61 72 65 20 67 6F 69 6E 67 0D 0A    r we are going..
0098F0:  20 20 20 74 6F 20 70 72 69 6E 74 20 6F 6E 20 74       to print on t
009900:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
009910:  08 00 01 00 02 09 4E E5 08 00 C6 02 00 00 00 02    ......N.........
009920:  08 00 C2 02 00 00 00 02 08 00 C7 02 00 00 00 02    ................
009930:  08 00 C3 02 00 00 00 02 08 00 C8 02 00 00 00 02    ................
009940:  08 00 C4 02 00 00 00 02 08 00 C9 02 00 00 00 02    ................
009950:  08 00 C5 02 00 00 00 02 08 00 C1 02 00 00 00 02    ................
009960:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
009970:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
009980:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
009990:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0099A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0099B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0099C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0099D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0099E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0099F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
009A00:  20 20 67 72 61 70 68 69 63 73 20 6D 6F 64 65 2E      graphics mode.
009A10:  20 20 54 68 69 73 20 69 73 20 74 75 72 6E 65 64      This is turned
009A20:  20 6F 6E 20 69 6E 0D 0A 20 20 20 6C 69 6E 65 20     on in..   line 
009A30:  32 30 20 62 79 20 70 72 69 6E 74 69 6E 67 20 43    20 by printing C
009A40:  48 52 24 28 32 33 29 20 66 6F 6C 6C 6F 77 65 64    HR$(23) followed
009A50:  20 20 62 79 20 20 43 48 52 24 28 31 29 2E 20 20      by  CHR$(1).  
009A60:  49 6E 20 58 4F 52 20 6D 6F 64 65 2C 20 77 68 65    In XOR mode, whe
009A70:  6E 20 79 6F 75 0D 0A 20 20 20 70 72 69 6E 74 20    n you..   print 
009A80:  61 20 63 68 61 72 61 63 74 65 72 20 74 6F 20 74    a character to t
009A90:  68 65 20 73 63 72 65 65 6E 20 69 74 20 63 61 6E    he screen it can
009AA0:  20 20 62 65 20 72 65 6D 6F 76 65 64 20 62 79 20      be removed by 
009AB0:  70 72 69 6E 74 69 6E 67 20 69 74 20 61 67 61 69    printing it agai
009AC0:  6E 20 61 74 0D 0A 20 20 20 74 68 65 20 73 61 6D    n at..   the sam
009AD0:  65 20 70 6F 73 69 74 69 6F 6E 2C 20 6C 65 61 76    e position, leav
009AE0:  69 6E 67 20 77 68 61 74 20 77 61 73 20 20 75 6E    ing what was  un
009AF0:  64 65 72 6E 65 61 74 68 20 69 6E 74 61 63 74 2E    derneath intact.
009B00:  20 20 54 68 75 73 2C 20 69 6E 20 6C 69 6E 65 20      Thus, in line 
009B10:  32 35 30 0D 0A 20 20 20 77 65 20 72 65 6D 6F 76    250..   we remov
009B20:  65 20 74 68 65 20 70 6F 69 6E 74 65 72 20 66 72    e the pointer fr
009B30:  6F 6D 20 69 74 73 20 6F 6C 64 20 20 70 6F 73 69    om its old  posi
009B40:  74 69 6F 6E 2C 20 20 61 6E 64 20 69 6E 20 6C 69    tion,  and in li
009B50:  6E 65 20 32 36 30 20 70 72 69 6E 74 20 69 74 20    ne 260 print it 
009B60:  61 74 0D 0A 20 20 20 74 68 65 20 6E 65 77 20 70    at..   the new p
009B70:  6F 73 69 74 69 6F 6E 2E 20 20 4C 69 6E 65 20 34    osition.  Line 4
009B80:  30 20 75 73 65 73 20 62 20 61 6E 64 20 20 63 20    0 uses b and  c 
009B90:  20 69 6E 73 74 65 61 64 20 6F 66 20 6F 6C 64 78     instead of oldx
009BA0:  20 61 6E 64 20 6F 6C 64 79 20 74 6F 20 6D 61 6B     and oldy to mak
009BB0:  65 0D 0A 20 20 20 69 74 20 73 68 6F 72 74 65 72    e..   it shorter
009BC0:  2E 0D 0A 0D 0A 20 20 20 54 52 55 54 48 20 4F 52    .....   TRUTH OR
009BD0:  20 44 41 52 45 0D 0A 20 20 20 4C 65 74 27 73 20     DARE..   Let's 
009BE0:  73 65 65 20 68 6F 77 20 77 65 20 63 61 6E 20 61    see how we can a
009BF0:  6C 74 65 72 20 74 68 61 74 20 20 73 75 62 72 6F    lter that  subro
009C00:  32 29 3E 2D 31 29 2D 28 49 4E 4B 45 59 28 30 29    2)>-1)-(INKEY(0)
009C10:  3E 2D 31 29 29 2A 28 28 49 4E 4B 45 59 28 32 31    >-1))*((INKEY(21
009C20:  29 3D 2D 31 29 2B 32 29 29 29 3A 0D 0A 20 20 20    )=-1)+2))):..   
009C30:  20 20 20 4D 4F 56 45 20 62 2C 63 3A 50 52 49 4E       MOVE b,c:PRIN
009C40:  54 20 43 48 52 24 28 32 31 35 29 3B 3A 4D 4F 56    T CHR$(215);:MOV
009C50:  45 20 78 2C 79 3A 50 52 49 4E 54 20 43 48 52 24    E x,y:PRINT CHR$
009C60:  28 32 31 35 29 3B 3A 57 45 4E 44 0D 0A 0D 0A 20    (215);:WEND.... 
009C70:  20 20 53 57 49 4D 4D 49 4E 47 20 4C 45 53 53 4F      SWIMMING LESSO
009C80:  4E 0D 0A 20 20 20 49 74 27 73 20 61 62 6F 75 74    N..   It's about
009C90:  20 74 69 6D 65 20 66 6F 72 20 61 6E 20 65 78 70     time for an exp
009CA0:  6C 61 6E 61 74 69 6F 6E 20 20 6F 66 20 20 68 6F    lanation  of  ho
009CB0:  77 20 20 73 6F 6D 65 20 20 6F 66 20 74 68 65 20    w  some  of the 
009CC0:  70 72 6F 67 72 61 6D 20 77 6F 72 6B 73 20 69 6E    program works in
009CD0:  0D 0A 20 20 20 64 65 74 61 69 6C 2C 20 73 6F 20    ..   detail, so 
009CE0:  6C 65 74 27 73 20 64 69 76 65 20 69 6E 20 61 6E    let's dive in an
009CF0:  64 20 74 61 63 6B 6C 65 20 74 68 65 20 6C 6F 6E    d tackle the lon
009D00:  67 65 73 74 20 6C 69 6E 65 20 6F 66 20 61 6C 6C    gest line of all
009D10:  2E 0D 0A 20 20 20 20 20 4C 69 6E 65 20 34 30 20    ...     Line 40 
009D20:  68 61 73 20 73 6F 6D 65 20 76 65 72 79 20 68 6F    has some very ho
009D30:  72 72 69 62 6C 65 20 20 6C 6F 6F 6B 69 6E 67 20    rrible  looking 
009D40:  20 62 69 74 73 2C 20 20 61 73 20 20 69 74 20 69     bits,  as  it i
009D50:  73 20 64 6F 69 6E 67 20 61 20 6C 6F 74 20 6F 66    s doing a lot of
009D60:  0D 0A 20 20 20 74 68 69 6E 67 73 20 61 74 20 6F    ..   things at o
009D70:  6E 63 65 2E 20 20 54 6F 20 67 65 74 20 61 6E 20    nce.  To get an 
009D80:  20 69 64 65 61 20 20 6F 66 20 20 6A 75 73 74 20     idea  of  just 
009D90:  20 68 6F 77 20 6D 75 63 68 20 69 73 20 73 71 75     how much is squ
009DA0:  61 73 68 65 64 20 69 6E 20 74 68 65 72 65 2C 0D    ashed in there,.
009DB0:  0A 20 20 20 74 61 6B 65 20 61 20 6C 6F 6F 6B 20    .   take a look 
009DC0:  61 74 20 46 69 67 75 72 65 20 31 2E 36 31 2E 20    at Figure 1.61. 
009DD0:  20 54 68 69 73 20 6C 69 73 74 73 20 61 20 73 75     This lists a su
009DE0:  62 72 6F 75 74 69 6E 65 20 74 68 61 74 20 64 6F    broutine that do
009DF0:  65 73 20 65 78 61 63 74 6C 79 20 74 68 65 0D 0A    es exactly the..
009E00:  75 74 69 6E 65 20 20 74 6F 20 6D 61 6B 65 20 69    utine  to make i
009E10:  74 20 6D 6F 72 65 20 6C 69 6B 65 20 6C 69 6E 65    t more like line
009E20:  20 34 30 2E 0D 0A 20 20 20 46 69 67 75 72 65 20     40...   Figure 
009E30:  31 2E 36 31 38 20 68 61 73 20 65 78 61 63 74 6C    1.618 has exactl
009E40:  79 20 74 68 65 20 73 61 6D 65 20 20 73 74 72 75    y the same  stru
009E50:  63 74 75 72 65 20 20 61 73 20 20 46 69 67 75 72    cture  as  Figur
009E60:  65 20 31 2E 36 31 20 62 75 74 20 75 73 65 73 20    e 1.61 but uses 
009E70:  74 68 65 0D 0A 20 20 20 73 61 6D 65 20 74 65 63    the..   same tec
009E80:  68 6E 69 71 75 65 73 20 61 73 20 6C 69 6E 65 20    hniques as line 
009E90:  34 30 2E 20 20 20 3C 3C 54 68 65 73 65 20 20 6C    40.   <<These  l
009EA0:  69 6E 65 73 20 20 61 72 65 20 20 73 61 76 65 64    ines  are  saved
009EB0:  20 61 73 20 46 49 47 31 36 31 38 20 6F 6E 20 74     as FIG1618 on t
009EC0:  68 65 0D 0A 20 20 20 64 69 73 63 2E 3E 3E 0D 0A    he..   disc.>>..
009ED0:  20 20 20 20 20 54 6F 20 74 65 73 74 20 74 68 65         To test the
009EE0:  20 74 68 72 65 65 20 73 65 6C 65 63 74 69 6F 6E     three selection
009EF0:  20 6B 65 79 73 2C 20 77 65 20 20 63 61 6E 20 61     keys, we  can a
009F00:  64 64 20 74 68 65 20 49 4E 4B 45 59 20 76 61 6C    dd the INKEY val
009F10:  75 65 73 20 74 6F 67 65 74 68 65 72 2E 0D 0A 20    ues together... 
009F20:  20 20 49 66 20 6E 6F 6E 65 20 6F 66 20 74 68 65      If none of the
009F30:  20 74 68 72 65 65 20 6B 65 79 73 20 69 73 20 62     three keys is b
009F40:  65 69 6E 67 20 70 72 65 73 73 65 64 2C 20 74 68    eing pressed, th
009F50:  65 20 73 75 6D 20 77 69 6C 6C 20 62 65 20 2D 33    e sum will be -3
009F60:  2E 20 20 57 65 20 64 6F 20 6E 6F 74 0D 0A 20 20    .  We do not..  
009F70:  20 68 61 76 65 20 74 6F 20 74 65 73 74 20 74 68     have to test th
009F80:  61 74 20 65 61 63 68 20 6F 66 20 74 68 65 20 49    at each of the I
009F90:  4E 4B 45 59 20 76 61 6C 75 65 73 20 69 73 20 2D    NKEY values is -
009FA0:  31 20 69 6E 64 69 76 69 64 75 61 6C 6C 79 2E 20    1 individually. 
009FB0:  20 44 6F 69 6E 67 20 74 68 69 73 0D 0A 20 20 20     Doing this..   
009FC0:  67 69 76 65 73 20 75 73 20 6C 69 6E 65 20 33 31    gives us line 31
009FD0:  30 20 69 6E 20 46 69 67 75 72 65 20 31 2E 36 31    0 in Figure 1.61
009FE0:  38 2E 0D 0A 20 20 20 20 20 48 6F 77 20 64 6F 20    8...     How do 
009FF0:  77 65 20 67 6F 20 61 62 6F 75 74 20 74 72 61 6E    we go about tran
00A000:  20 20 20 73 61 6D 65 20 61 73 20 6C 69 6E 65 20       same as line 
00A010:  34 30 2C 20 62 75 74 20 69 6E 20 61 20 20 6D 6F    40, but in a  mo
00A020:  72 65 20 20 63 6F 6E 76 65 6E 74 69 6F 6E 61 6C    re  conventional
00A030:  20 20 77 61 79 2E 20 20 49 66 20 79 6F 75 20 77      way.  If you w
00A040:  61 6E 74 20 74 6F 20 74 72 79 20 69 74 0D 0A 20    ant to try it.. 
00A050:  20 20 6F 75 74 2C 20 79 6F 75 20 63 6F 75 6C 64      out, you could
00A060:  20 74 79 70 65 20 69 74 20 69 6E 20 20 61 6E 64     type it in  and
00A070:  20 20 72 65 70 6C 61 63 65 20 20 6C 69 6E 65 20      replace  line 
00A080:  20 34 30 20 77 69 74 68 20 22 47 4F 53 55 42 20     40 with "GOSUB 
00A090:  31 31 30 22 2E 20 20 49 74 20 69 73 0D 0A 20 20    110".  It is..  
00A0A0:  20 6D 75 63 68 20 73 6C 6F 77 65 72 2E 20 20 3C     much slower.  <
00A0B0:  3C 54 68 65 20 64 69 73 63 20 6D 65 6E 75 20 69    <The disc menu i
00A0C0:  73 20 73 61 76 65 64 20 61 73 20 44 49 53 43 4D    s saved as DISCM
00A0D0:  45 4E 55 2E 42 41 53 20 61 6E 64 20 79 6F 75 20    ENU.BAS and you 
00A0E0:  63 61 6E 20 61 64 64 20 74 68 65 0D 0A 20 20 20    can add the..   
00A0F0:  6C 69 6E 65 73 20 69 6E 20 46 69 67 75 72 65 20    lines in Figure 
00A100:  31 2E 36 31 20 62 79 20 74 79 70 69 6E 67 20 4D    1.61 by typing M
00A110:  45 52 47 45 22 46 49 47 31 36 31 3E 3E 0D 0A 20    ERGE"FIG161>>.. 
00A120:  20 20 20 20 4C 6F 6F 6B 69 6E 67 20 61 74 20 74        Looking at t
00A130:  68 65 20 73 75 62 72 6F 75 74 69 6E 65 20 74 6F    he subroutine to
00A140:  20 73 74 61 72 74 20 77 69 74 68 2C 20 20 77 65     start with,  we
00A150:  20 74 65 73 74 20 74 68 65 20 6B 65 79 73 20 62     test the keys b
00A160:  79 20 75 73 69 6E 67 20 74 68 65 0D 0A 20 20 20    y using the..   
00A170:  49 4E 4B 45 59 20 66 75 6E 63 74 69 6F 6E 2E 20    INKEY function. 
00A180:  20 54 68 65 20 6E 75 6D 62 65 72 20 69 6E 20 62     The number in b
00A190:  72 61 63 6B 65 74 73 20 69 73 20 20 61 20 20 63    rackets is  a  c
00A1A0:  6F 64 65 20 66 6F 72 20 74 68 65 20 6B 65 79 20    ode for the key 
00A1B0:  77 65 20 77 61 6E 74 20 74 6F 0D 0A 20 20 20 63    we want to..   c
00A1C0:  68 65 63 6B 2E 20 20 49 66 20 74 68 65 20 20 6B    heck.  If the  k
00A1D0:  65 79 20 20 69 73 20 20 6E 6F 74 20 20 70 72 65    ey  is  not  pre
00A1E0:  73 73 65 64 2C 20 20 74 68 65 6E 20 20 49 4E 4B    ssed,  then  INK
00A1F0:  45 59 20 20 67 69 76 65 73 20 20 74 68 65 20 20    EY  gives  the  
00A200:  73 66 6F 72 6D 69 6E 67 20 6C 69 6E 65 73 20 20    sforming lines  
00A210:  31 34 30 2D 31 39 30 20 69 6E 74 6F 20 33 34 30    140-190 into 340
00A220:  2D 33 39 30 3F 20 20 54 69 6D 65 20 66 6F 72 20    -390?  Time for 
00A230:  61 0D 0A 20 20 20 70 72 61 63 74 69 63 61 6C 20    a..   practical 
00A240:  6C 65 73 73 6F 6E 20 69 6E 20 54 72 75 65 20 61    lesson in True a
00A250:  6E 64 20 46 61 6C 73 65 2E 20 20 20 54 75 72 6E    nd False.   Turn
00A260:  20 20 79 6F 75 72 20 20 63 6F 6D 70 75 74 65 72      your  computer
00A270:  20 6F 6E 20 61 6E 64 20 74 79 70 65 20 74 68 65     on and type the
00A280:  0D 0A 20 20 20 66 6F 6C 6C 6F 77 69 6E 67 20 63    ..   following c
00A290:  6F 6D 6D 61 6E 64 73 3A 0D 0A 0D 0A 20 20 20 20    ommands:....    
00A2A0:  20 50 52 49 4E 54 20 35 3E 32 0D 0A 20 20 20 20     PRINT 5>2..    
00A2B0:  20 50 52 49 4E 54 20 33 3D 33 0D 0A 20 20 20 20     PRINT 3=3..    
00A2C0:  20 50 52 49 4E 54 20 31 32 3C 36 36 0D 0A 0D 0A     PRINT 12<66....
00A2D0:  20 20 20 49 6E 20 65 61 63 68 20 63 61 73 65 20       In each case 
00A2E0:  22 2D 31 22 20 69 73 20 70 72 69 6E 74 65 64 20    "-1" is printed 
00A2F0:  6F 6E 20 74 68 65 20 73 63 72 65 65 6E 2E 20 20    on the screen.  
00A300:  54 72 79 20 74 68 65 73 65 20 63 6F 6D 6D 61 6E    Try these comman
00A310:  64 73 3A 0D 0A 0D 0A 20 20 20 20 20 50 52 49 4E    ds:....     PRIN
00A320:  54 20 32 3E 35 0D 0A 20 20 20 20 20 50 52 49 4E    T 2>5..     PRIN
00A330:  54 20 33 3C 3E 33 0D 0A 20 20 20 20 20 50 52 49    T 3<>3..     PRI
00A340:  4E 54 20 31 32 3E 36 36 0D 0A 0D 0A 20 20 20 54    NT 12>66....   T
00A350:  68 69 73 20 74 69 6D 65 20 22 30 22 20 69 73 20    his time "0" is 
00A360:  70 72 69 6E 74 65 64 20 61 6C 6C 20 74 68 72 65    printed all thre
00A370:  65 20 20 74 69 6D 65 73 2E 20 20 20 54 68 65 20    e  times.   The 
00A380:  72 65 61 73 6F 6E 20 77 65 20 67 65 74 20 22 2D    reason we get "-
00A390:  31 22 20 6F 72 20 22 30 22 0D 0A 20 20 20 70 72    1" or "0"..   pr
00A3A0:  69 6E 74 65 64 20 69 73 20 74 68 61 74 20 20 74    inted is that  t
00A3B0:  68 65 20 20 73 74 61 74 65 6D 65 6E 74 73 20 20    he  statements  
00A3C0:  61 66 74 65 72 20 20 74 68 65 20 20 50 52 49 4E    after  the  PRIN
00A3D0:  54 20 20 63 6F 6D 6D 61 6E 64 73 20 20 61 72 65    T  commands  are
00A3E0:  20 6C 6F 67 69 63 61 6C 0D 0A 20 20 20 65 78 70     logical..   exp
00A3F0:  72 65 73 73 69 6F 6E 73 2E 20 20 42 41 53 49 43    ressions.  BASIC
00A400:  76 61 6C 75 65 20 2D 31 2C 0D 0A 20 20 20 6F 74    value -1,..   ot
00A410:  68 65 72 77 69 73 65 2C 20 69 74 20 72 65 74 75    herwise, it retu
00A420:  72 6E 73 20 61 20 20 6E 75 6D 62 65 72 20 20 67    rns a  number  g
00A430:  72 65 61 74 65 72 20 20 74 68 61 6E 20 20 2D 31    reater  than  -1
00A440:  2E 20 20 20 48 61 76 65 20 20 61 20 6C 6F 6F 6B    .   Have  a look
00A450:  20 69 6E 20 79 6F 75 72 0D 0A 20 20 20 6D 61 6E     in your..   man
00A460:  75 61 6C 20 74 6F 20 66 69 6E 64 20 6F 75 74 20    ual to find out 
00A470:  6D 6F 72 65 2E 20 20 20 49 6E 20 20 6C 69 6E 65    more.   In  line
00A480:  20 20 31 31 30 20 20 77 65 20 20 61 72 65 20 63      110  we  are c
00A490:  68 65 63 6B 69 6E 67 20 74 68 61 74 20 74 68 65    hecking that the
00A4A0:  20 53 50 41 43 45 2C 0D 0A 20 20 20 45 4E 54 45     SPACE,..   ENTE
00A4B0:  52 20 61 6E 64 20 43 4F 50 59 20 6B 65 79 73 20    R and COPY keys 
00A4C0:  61 72 65 20 6E 6F 74 20 62 65 69 6E 67 20 70 72    are not being pr
00A4D0:  65 73 73 65 64 2E 0D 0A 20 20 20 20 20 54 68 65    essed...     The
00A4E0:  20 70 6F 73 69 74 69 6F 6E 20 6F 66 20 74 68 65     position of the
00A4F0:  20 70 6F 69 6E 74 65 72 20 69 73 20 20 68 65 6C     pointer is  hel
00A500:  64 20 20 69 6E 20 20 74 68 65 20 20 76 61 72 69    d  in  the  vari
00A510:  61 62 6C 65 73 20 78 20 61 6E 64 20 79 2E 20 20    ables x and y.  
00A520:  4C 69 6E 65 73 0D 0A 20 20 20 31 34 30 2D 31 39    Lines..   140-19
00A530:  30 20 63 68 65 63 6B 20 74 68 65 20 63 75 72 73    0 check the curs
00A540:  6F 72 20 6B 65 79 73 2C 20 20 61 6E 64 20 20 61    or keys,  and  a
00A550:  64 6A 75 73 74 20 20 74 77 6F 20 76 61 72 69 61    djust  two varia
00A560:  62 6C 65 73 2C 20 78 61 64 64 20 61 6E 64 20 79    bles, xadd and y
00A570:  61 64 64 2C 0D 0A 20 20 20 77 68 69 63 68 20 61    add,..   which a
00A580:  72 65 20 74 68 65 6E 20 61 64 64 65 64 20 74 6F    re then added to
00A590:  20 78 20 61 6E 64 20 79 20 20 69 6E 20 20 6C 69     x and y  in  li
00A5A0:  6E 65 20 32 30 30 2E 20 20 4C 69 6E 65 73 20 31    ne 200.  Lines 1
00A5B0:  37 30 20 61 6E 64 20 32 31 30 20 6D 75 6C 74 69    70 and 210 multi
00A5C0:  70 6C 79 0D 0A 20 20 20 61 64 64 78 20 61 6E 64    ply..   addx and
00A5D0:  20 61 64 64 79 20 62 79 20 33 20 74 6F 20 6D 61     addy by 3 to ma
00A5E0:  6B 65 20 74 68 65 20 70 6F 69 6E 74 65 72 20 6D    ke the pointer m
00A5F0:  6F 76 65 20 61 74 20 61 20 72 65 61 73 6F 6E 61    ove at a reasona
00A600:  20 77 6F 72 6B 73 20 6F 75 74 20 20 77 68 65 74     works out  whet
00A610:  68 65 72 20 20 61 20 20 6C 6F 67 69 63 61 6C 20    her  a  logical 
00A620:  20 65 78 70 72 65 73 73 69 6F 6E 20 20 69 73 20     expression  is 
00A630:  74 72 75 65 20 6F 72 0D 0A 20 20 20 66 61 6C 73    true or..   fals
00A640:  65 2E 20 20 49 66 20 69 74 20 69 73 20 74 72 75    e.  If it is tru
00A650:  65 2C 20 69 74 20 65 76 61 6C 75 61 74 65 73 20    e, it evaluates 
00A660:  74 6F 20 20 2D 31 2C 20 20 61 6E 64 20 69 66 20    to  -1,  and if 
00A670:  69 74 20 69 73 20 66 61 6C 73 65 2C 20 77 65 20    it is false, we 
00A680:  67 65 74 20 30 2E 0D 0A 20 20 20 54 68 65 20 65    get 0...   The e
00A690:  78 70 72 65 73 73 69 6F 6E 20 22 35 3E 32 22 20    xpression "5>2" 
00A6A0:  69 73 20 74 72 75 65 20 73 6F 20 22 2D 31 22 20    is true so "-1" 
00A6B0:  69 73 20 70 72 69 6E 74 65 64 20 62 75 74 20 74    is printed but t
00A6C0:  68 65 20 65 78 70 72 65 73 73 69 6F 6E 20 22 31    he expression "1
00A6D0:  32 3E 36 36 22 0D 0A 20 20 20 69 73 20 66 61 6C    2>66"..   is fal
00A6E0:  73 65 20 28 62 65 63 61 75 73 65 20 31 32 20 69    se (because 12 i
00A6F0:  73 20 6E 6F 74 20 6C 61 72 67 65 72 20 74 68 61    s not larger tha
00A700:  6E 20 36 36 29 20 61 6E 64 20 73 6F 20 22 30 22    n 66) and so "0"
00A710:  20 69 73 20 70 72 69 6E 74 65 64 2E 0D 0A 20 20     is printed...  
00A720:  20 20 20 57 65 20 75 73 75 61 6C 6C 79 20 6D 65       We usually me
00A730:  65 74 20 6C 6F 67 69 63 61 6C 20 65 78 70 72 65    et logical expre
00A740:  73 73 69 6F 6E 73 20 61 73 20 70 61 72 74 20 6F    ssions as part o
00A750:  66 20 61 6E 20 49 46 20 73 74 61 74 65 6D 65 6E    f an IF statemen
00A760:  74 3A 0D 0A 0D 0A 20 20 20 20 20 49 46 20 3C 6C    t:....     IF <l
00A770:  6F 67 69 63 61 6C 20 65 78 70 72 2E 3E 20 54 48    ogical expr.> TH
00A780:  45 4E 20 3C 63 6F 6D 6D 61 6E 64 3E 0D 0A 0D 0A    EN <command>....
00A790:  20 20 20 66 6F 72 20 65 78 61 6D 70 6C 65 3A 0D       for example:.
00A7A0:  0A 0D 0A 20 20 20 20 20 49 46 20 61 3E 62 20 54    ...     IF a>b T
00A7B0:  48 45 4E 20 50 52 49 4E 54 22 61 20 69 73 20 62    HEN PRINT"a is b
00A7C0:  69 67 67 65 72 21 22 0D 0A 0D 0A 20 20 20 42 41    igger!"....   BA
00A7D0:  53 49 43 20 77 6F 72 6B 73 20 6F 75 74 20 74 68    SIC works out th
00A7E0:  65 20 76 61 6C 75 65 20 20 6F 66 20 20 74 68 65    e value  of  the
00A7F0:  20 20 6C 6F 67 69 63 61 6C 20 20 65 78 70 72 65      logical  expre
00A800:  62 6C 65 20 73 70 65 65 64 2E 20 20 57 65 20 75    ble speed.  We u
00A810:  73 65 0D 0A 20 20 20 49 4E 4B 45 59 28 32 31 29    se..   INKEY(21)
00A820:  20 74 6F 20 74 65 73 74 20 74 68 65 20 53 48 49     to test the SHI
00A830:  46 54 20 6B 65 79 2C 20 61 6E 64 20 69 66 20 20    FT key, and if  
00A840:  69 74 20 69 73 20 64 6F 77 6E 20 74 68 65 20 76    it is down the v
00A850:  61 6C 75 65 73 20 6F 66 20 78 61 64 64 20 61 6E    alues of xadd an
00A860:  64 0D 0A 20 20 20 79 61 64 64 20 61 72 65 20 6D    d..   yadd are m
00A870:  75 6C 74 69 70 6C 69 65 64 20 74 6F 20 6D 61 6B    ultiplied to mak
00A880:  65 20 74 68 65 20 6D 6F 76 65 6D 65 6E 74 20 65    e the movement e
00A890:  76 65 6E 20 66 61 73 74 65 72 2E 0D 0A 20 20 20    ven faster...   
00A8A0:  20 20 54 68 65 20 6F 74 68 65 72 20 69 6D 70 6F      The other impo
00A8B0:  72 74 61 6E 74 20 62 69 74 20 74 6F 20 6D 65 6E    rtant bit to men
00A8C0:  74 69 6F 6E 20 69 73 20 74 68 65 20 70 72 69 6E    tion is the prin
00A8D0:  74 69 6E 67 20 6F 66 20 74 68 65 20 70 6F 69 6E    ting of the poin
00A8E0:  74 65 72 20 6F 6E 20 74 68 65 0D 0A 20 20 20 73    ter on the..   s
00A8F0:  63 72 65 65 6E 2E 20 20 57 65 20 61 72 65 20 75    creen.  We are u
00A900:  73 69 6E 67 20 63 68 61 72 61 63 74 65 72 20 32    sing character 2
00A910:  31 35 2C 20 77 68 69 63 68 20 69 73 20 61 20 73    15, which is a s
00A920:  75 69 74 61 62 6C 79 20 70 6F 69 6E 74 79 20 73    uitably pointy s
00A930:  68 61 70 65 2E 20 20 54 6F 0D 0A 20 20 20 61 6C    hape.  To..   al
00A940:  6C 6F 77 20 74 68 65 20 70 6F 69 6E 74 65 72 20    low the pointer 
00A950:  74 6F 20 6D 6F 76 65 20 73 6D 6F 6F 74 68 6C 79    to move smoothly
00A960:  20 20 61 63 72 6F 73 73 20 20 74 68 65 20 73 63      across  the sc
00A970:  72 65 65 6E 2C 20 77 65 20 61 72 65 20 70 72 69    reen, we are pri
00A980:  6E 74 69 6E 67 20 69 74 0D 0A 20 20 20 61 74 20    nting it..   at 
00A990:  74 68 65 20 67 72 61 70 68 69 63 73 20 63 75 72    the graphics cur
00A9A0:  73 6F 72 20 70 6F 73 69 74 69 6F 6E 2E 20 20 54    sor position.  T
00A9B0:  68 69 73 20 66 65 61 74 75 72 65 20 20 69 73 20    his feature  is 
00A9C0:  74 75 72 6E 65 64 20 6F 6E 20 77 69 74 68 20 22    turned on with "
00A9D0:  54 41 47 22 20 69 6E 0D 0A 20 20 20 6C 69 6E 65    TAG" in..   line
00A9E0:  20 33 30 2E 20 20 57 65 20 61 72 65 20 61 6C 73     30.  We are als
00A9F0:  6F 20 75 73 69 6E 67 20 74 68 65 20 20 58 4F 52    o using the  XOR
00AA00:  23 50 72 6F 67 72 61 6D 6D 65 72 73 27 20 50 61    #Programmers' Pa
00AA10:  74 63 68 20 32 20 2D 20 57 41 43 43 49 20 31 31    tch 2 - WACCI 11
00AA20:  30 2C 20 4D 61 72 20 31 39 39 37 2C 20 70 2E 20    0, Mar 1997, p. 
00AA30:  31 34 2D 31 35 0D 0A 20 20 20 50 52 4F 47 52 41    14-15..   PROGRA
00AA40:  4D 4D 45 52 53 27 20 50 41 54 43 48 20 32 0D 0A    MMERS' PATCH 2..
00AA50:  20 20 20 42 79 20 53 74 65 70 68 65 6E 20 61 6E       By Stephen an
00AA60:  64 20 4D 61 74 74 68 65 77 20 50 68 69 6C 6C 69    d Matthew Philli
00AA70:  70 73 0D 0A 0D 0A 20 20 20 57 65 6C 6C 2C 20 74    ps....   Well, t
00AA80:  68 69 73 20 6D 6F 6E 74 68 20 20 77 65 20 20 6D    his month  we  m
00AA90:  6F 76 65 20 20 66 72 6F 6D 20 20 74 68 65 20 20    ove  from  the  
00AAA0:  73 74 61 72 74 65 72 20 20 74 6F 20 20 61 20 20    starter  to  a  
00AAB0:  6C 69 67 68 74 6C 79 20 67 72 69 6C 6C 65 64 20    lightly grilled 
00AAC0:  61 6E 64 0D 0A 20 20 20 63 61 72 65 66 75 6C 6C    and..   carefull
00AAD0:  79 20 73 74 75 66 66 65 64 20 70 6F 72 74 69 6F    y stuffed portio
00AAE0:  6E 20 6F 66 20 20 70 72 6F 67 72 61 6D 2C 20 20    n of  program,  
00AAF0:  64 65 6C 69 63 61 74 65 6C 79 20 20 73 65 61 73    delicately  seas
00AB00:  6F 6E 65 64 20 77 69 74 68 20 74 61 72 72 61 67    oned with tarrag
00AB10:  6F 6E 0D 0A 20 20 20 61 6E 64 20 63 68 69 76 65    on..   and chive
00AB20:  73 2C 20 61 6E 64 20 73 65 72 76 65 64 20 77 69    s, and served wi
00AB30:  74 68 20 61 20 67 65 6E 65 72 6F 75 73 20 68 65    th a generous he
00AB40:  6C 70 69 6E 67 20 6F 66 20 76 65 72 62 69 61 67    lping of verbiag
00AB50:  65 2E 0D 0A 0D 0A 20 20 20 34 30 20 57 48 49 4C    e.....   40 WHIL
00AB60:  45 20 49 4E 4B 45 59 28 34 37 29 2B 49 4E 4B 45    E INKEY(47)+INKE
00AB70:  59 28 31 38 29 2B 49 4E 4B 45 59 28 39 29 3D 2D    Y(18)+INKEY(9)=-
00AB80:  33 3A 62 3D 78 3A 63 3D 79 3A 0D 0A 20 20 20 20    3:b=x:c=y:..    
00AB90:  20 20 78 3D 4D 41 58 28 30 2C 4D 49 4E 28 36 33      x=MAX(0,MIN(63
00ABA0:  32 2C 78 2B 33 2A 28 28 49 4E 4B 45 59 28 38 29    2,x+3*((INKEY(8)
00ABB0:  3E 2D 31 29 2D 28 49 4E 4B 45 59 28 31 29 3E 2D    >-1)-(INKEY(1)>-
00ABC0:  31 29 29 2A 28 34 2B 33 2A 28 49 4E 4B 45 59 28    1))*(4+3*(INKEY(
00ABD0:  32 31 29 3D 2D 31 29 29 29 29 3A 0D 0A 20 20 20    21)=-1)))):..   
00ABE0:  20 20 20 79 3D 4D 41 58 28 31 35 2C 4D 49 4E 28       y=MAX(15,MIN(
00ABF0:  33 39 39 2C 79 2B 33 2A 28 28 49 4E 4B 45 59 28    399,y+3*((INKEY(
00AC00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
00AC10:  09 00 01 00 02 09 4E E5 09 00 C5 02 00 00 00 02    ......N.........
00AC20:  09 00 C1 02 00 00 00 02 09 00 C6 02 00 00 00 02    ................
00AC30:  09 00 C2 02 00 00 00 02 09 00 C7 02 00 00 00 02    ................
00AC40:  09 00 C3 02 00 00 00 02 09 00 C8 02 00 00 00 02    ................
00AC50:  09 00 C4 02 00 00 00 02 09 00 C9 02 00 00 00 02    ................
00AC60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00AC70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00AC80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00AC90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00ACA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00ACB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00ACC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00ACD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00ACE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00ACF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00AD00:  20 32 30 30 20 69 73 20 66 6F 72 6D 65 64 20 69     200 is formed i
00AD10:  6E 20 61 20 73 69 6D 69 6C 61 72 20 77 61 79 2E    n a similar way.
00AD20:  0D 0A 0D 0A 20 20 20 4D 41 58 20 50 41 43 4B 53    ....   MAX PACKS
00AD30:  0D 0A 20 20 20 4C 69 6E 65 73 20 32 33 30 2D 32    ..   Lines 230-2
00AD40:  36 30 20 61 72 65 20 74 72 61 6E 73 66 6F 72 6D    60 are transform
00AD50:  65 64 20 69 6E 74 6F 20 20 34 33 30 2D 34 36 30    ed into  430-460
00AD60:  20 20 75 73 69 6E 67 20 74 68 65 20 4D 41 58 69      using the MAXi
00AD70:  6D 75 6D 20 61 6E 64 20 4D 49 4E 69 6D 75 6D 0D    mum and MINimum.
00AD80:  0A 20 20 20 66 75 6E 63 74 69 6F 6E 73 2E 20 20    .   functions.  
00AD90:  4D 41 58 20 69 73 20 70 61 73 73 65 64 20 20 73    MAX is passed  s
00ADA0:  65 76 65 72 61 6C 20 20 6E 75 6D 62 65 72 73 20    everal  numbers 
00ADB0:  20 61 6E 64 20 20 72 65 74 75 72 6E 73 20 74 68     and  returns th
00ADC0:  65 20 6C 61 72 67 65 73 74 2C 20 4D 49 4E 0D 0A    e largest, MIN..
00ADD0:  20 20 20 72 65 74 75 72 6E 73 20 74 68 65 20 73       returns the s
00ADE0:  6D 61 6C 6C 65 73 74 2E 0D 0A 20 20 20 20 20 4C    mallest...     L
00ADF0:  6F 6F 6B 20 61 74 20 6C 69 6E 65 20 34 34 30 3A    ook at line 440:
00AE00:  0D 0A 0D 0A 20 20 20 20 20 34 34 30 20 78 3D 4D    ....     440 x=M
00AE10:  41 58 28 30 2C 78 29 0D 0A 0D 0A 20 20 20 49 66    AX(0,x)....   If
00AE20:  20 78 3E 30 20 74 68 65 6E 20 4D 41 58 28 30 2C     x>0 then MAX(0,
00AE30:  78 29 20 77 69 6C 6C 20 20 72 65 74 75 72 6E 20    x) will  return 
00AE40:  20 78 20 20 73 6F 20 20 77 65 20 61 72 65 20 65     x  so  we are e
00AE50:  66 66 65 63 74 69 76 65 6C 79 20 73 61 79 69 6E    ffectively sayin
00AE60:  67 20 22 78 3D 78 22 2E 0D 0A 20 20 20 48 6F 77    g "x=x"...   How
00AE70:  65 76 65 72 2C 20 69 66 20 78 3C 30 2C 20 4D 41    ever, if x<0, MA
00AE80:  58 28 30 2C 78 29 20 77 69 6C 6C 20 72 65 74 75    X(0,x) will retu
00AE90:  72 6E 20 20 30 20 20 61 6E 64 20 20 77 65 20 61    rn  0  and  we a
00AEA0:  72 65 20 73 61 79 69 6E 67 20 22 78 3D 30 22 2C    re saying "x=0",
00AEB0:  20 73 6F 20 74 68 65 0D 0A 20 20 20 65 66 66 65     so the..   effe
00AEC0:  63 74 20 69 73 20 65 78 61 63 74 6C 79 20 74 68    ct is exactly th
00AED0:  65 20 73 61 6D 65 20 61 73 20 74 68 65 20 49 46    e same as the IF
00AEE0:  20 73 74 61 74 65 6D 65 6E 74 20 69 6E 20 6C 69     statement in li
00AEF0:  6E 65 20 32 34 30 2E 0D 0A 0D 0A 20 20 20 4F 52    ne 240.....   OR
00AF00:  73 73 69 6F 6E 2C 20 20 61 6E 64 20 75 6E 6C 65    ssion,  and unle
00AF10:  73 73 20 69 74 20 69 73 0D 0A 20 20 20 66 61 6C    ss it is..   fal
00AF20:  73 65 20 28 7A 65 72 6F 29 2C 20 74 68 65 20 63    se (zero), the c
00AF30:  6F 6D 6D 61 6E 64 20 66 6F 6C 6C 6F 77 69 6E 67    ommand following
00AF40:  20 54 48 45 4E 20 69 73 20 65 78 65 63 75 74 65     THEN is execute
00AF50:  64 2E 20 20 54 72 79 20 74 68 69 73 3A 0D 0A 0D    d.  Try this:...
00AF60:  0A 20 20 20 20 20 49 46 20 2D 31 20 54 48 45 4E    .     IF -1 THEN
00AF70:  20 50 52 49 4E 54 22 4D 69 6E 75 73 20 6F 6E 65     PRINT"Minus one
00AF80:  20 69 73 20 74 72 75 65 22 0D 0A 0D 0A 20 20 20     is true"....   
00AF90:  54 68 65 20 75 73 65 66 75 6C 6E 65 73 73 20 6F    The usefulness o
00AFA0:  66 20 54 72 75 65 20 61 6E 64 20 46 61 6C 73 65    f True and False
00AFB0:  20 20 68 61 76 69 6E 67 20 20 6E 75 6D 65 72 69      having  numeri
00AFC0:  63 61 6C 20 20 76 61 6C 75 65 73 20 69 73 20 74    cal  values is t
00AFD0:  68 61 74 20 77 65 20 63 61 6E 0D 0A 20 20 20 75    hat we can..   u
00AFE0:  73 65 20 74 68 65 20 2D 31 20 61 6E 64 20 30 20    se the -1 and 0 
00AFF0:  69 6E 20 61 72 69 74 68 6D 65 74 69 63 20 65 78    in arithmetic ex
00B000:  70 72 65 73 73 69 6F 6E 73 2C 20 66 6F 72 20 69    pressions, for i
00B010:  6E 73 74 61 6E 63 65 3A 0D 0A 0D 0A 20 20 20 20    nstance:....    
00B020:  20 61 3D 28 35 3E 32 29 0D 0A 20 20 20 20 20 50     a=(5>2)..     P
00B030:  52 49 4E 54 20 61 2A 33 0D 0A 0D 0A 20 20 20 59    RINT a*3....   Y
00B040:  6F 75 20 73 68 6F 75 6C 64 20 67 65 74 20 2D 33    ou should get -3
00B050:  20 61 70 70 65 61 72 69 6E 67 2E 20 20 46 69 76     appearing.  Fiv
00B060:  65 20 69 73 20 20 62 69 67 67 65 72 20 20 74 68    e is  bigger  th
00B070:  61 6E 20 74 77 6F 2C 20 73 6F 20 22 35 3E 32 22    an two, so "5>2"
00B080:  20 69 73 20 74 72 75 65 2C 0D 0A 20 20 20 73 6F     is true,..   so
00B090:  20 61 20 69 73 20 73 65 74 20 74 6F 20 2D 31 2E     a is set to -1.
00B0A0:  20 20 50 72 69 6E 74 69 6E 67 20 74 68 72 65 65      Printing three
00B0B0:  20 74 69 6D 65 73 20 61 20 67 69 76 65 73 20 2D     times a gives -
00B0C0:  33 2E 0D 0A 20 20 20 20 20 48 6F 77 20 64 6F 65    3...     How doe
00B0D0:  73 20 74 68 69 73 20 68 65 6C 70 20 75 73 20 77    s this help us w
00B0E0:  69 74 68 20 6C 69 6E 65 20 34 30 2C 20 74 68 65    ith line 40, the
00B0F0:  6E 3F 20 20 57 65 6C 6C 2C 20 6C 69 6E 65 20 33    n?  Well, line 3
00B100:  41 4E 47 45 20 53 51 55 41 53 48 0D 0A 20 20 20    ANGE SQUASH..   
00B110:  4C 6F 6F 6B 20 61 74 20 6C 69 6E 65 20 33 37 30    Look at line 370
00B120:  2E 20 20 57 68 61 74 20 69 73 20 74 68 65 20 76    .  What is the v
00B130:  61 6C 75 65 20 20 6F 66 20 20 61 64 64 78 20 6F    alue  of  addx o
00B140:  6E 20 74 68 65 20 72 69 67 68 74 20 68 61 6E 64    n the right hand
00B150:  20 73 69 64 65 3F 20 20 57 65 0D 0A 20 20 20 68     side?  We..   h
00B160:  61 76 65 20 6A 75 73 74 20 64 65 66 69 6E 65 64    ave just defined
00B170:  20 69 74 20 69 6E 20 6C 69 6E 65 20 33 36 30 2E     it in line 360.
00B180:  20 20 54 68 65 20 20 72 69 67 68 74 20 68 61 6E      The  right han
00B190:  64 20 73 69 64 65 20 6F 66 20 6C 69 6E 65 20 33    d side of line 3
00B1A0:  36 30 20 63 61 6E 20 62 65 0D 0A 20 20 20 69 6E    60 can be..   in
00B1B0:  73 65 72 74 65 64 20 69 6E 74 6F 20 6C 69 6E 65    serted into line
00B1C0:  20 33 37 30 20 61 6E 64 20 6C 69 6E 65 20 33 36     370 and line 36
00B1D0:  30 20 72 65 6D 6F 76 65 64 3A 0D 0A 0D 0A 20 20    0 removed:....  
00B1E0:  20 20 20 33 37 30 20 61 64 64 78 3D 33 2A 61 64       370 addx=3*ad
00B1F0:  64 78 2A 28 34 2B 33 2A 28 49 4E 4B 45 59 28 32    dx*(4+3*(INKEY(2
00B200:  31 29 3D 2D 31 29 29 0D 0A 0D 0A 20 20 20 57 65    1)=-1))....   We
00B210:  20 63 61 6E 20 74 68 65 6E 20 72 65 6D 6F 76 65     can then remove
00B220:  20 6C 69 6E 65 20 33 35 30 20 61 6E 64 20 69 6E     line 350 and in
00B230:  73 65 72 74 20 69 74 20 69 6E 74 6F 20 6C 69 6E    sert it into lin
00B240:  65 20 33 37 30 3A 0D 0A 0D 0A 20 20 20 20 20 33    e 370:....     3
00B250:  37 30 20 61 64 64 78 3D 33 2A 28 61 64 64 78 2D    70 addx=3*(addx-
00B260:  28 49 4E 4B 45 59 28 31 29 3E 2D 31 29 29 2A 28    (INKEY(1)>-1))*(
00B270:  34 2B 33 2A 28 49 4E 4B 45 59 28 32 31 29 3D 2D    4+3*(INKEY(21)=-
00B280:  31 29 29 0D 0A 0D 0A 20 20 20 53 69 6D 69 6C 61    1))....   Simila
00B290:  72 6C 79 2C 20 6C 69 6E 65 20 33 34 30 20 63 61    rly, line 340 ca
00B2A0:  6E 20 62 65 20 72 65 6D 6F 76 65 64 3A 0D 0A 0D    n be removed:...
00B2B0:  0A 20 20 20 20 20 33 37 30 20 61 64 64 78 3D 33    .     370 addx=3
00B2C0:  2A 28 28 49 4E 4B 45 59 28 38 29 3E 2D 31 29 2D    *((INKEY(8)>-1)-
00B2D0:  28 49 4E 4B 45 59 28 31 29 3E 2D 31 29 29 2A 28    (INKEY(1)>-1))*(
00B2E0:  34 2B 33 2A 28 49 4E 4B 45 59 28 32 31 29 3D 2D    4+3*(INKEY(21)=-
00B2F0:  31 29 29 0D 0A 0D 0A 20 20 20 20 20 45 78 61 63    1))....     Exac
00B300:  34 30 20 69 73 3A 0D 0A 0D 0A 20 20 20 20 20 33    40 is:....     3
00B310:  34 30 20 61 64 64 78 3D 28 49 4E 4B 45 59 28 38    40 addx=(INKEY(8
00B320:  29 3E 2D 31 29 0D 0A 0D 0A 20 20 20 49 74 20 68    )>-1)....   It h
00B330:  61 73 20 65 78 61 63 74 6C 79 20 74 68 65 20 73    as exactly the s
00B340:  61 6D 65 20 65 66 66 65 63 74 20 61 73 20 6C 69    ame effect as li
00B350:  6E 65 20 20 31 34 30 2C 20 62 75 74 20 67 65 74    ne  140, but get
00B360:  73 20 72 69 64 20 6F 66 20 74 68 65 20 22 49 46    s rid of the "IF
00B370:  22 2E 20 20 49 66 0D 0A 20 20 20 74 68 65 20 6C    ".  If..   the l
00B380:  65 66 74 20 63 75 72 73 6F 72 20 6B 65 79 20 69    eft cursor key i
00B390:  73 20 70 72 65 73 73 65 64 2C 20 74 68 65 6E 20    s pressed, then 
00B3A0:  20 49 4E 4B 45 59 28 38 29 20 77 69 6C 6C 20 62     INKEY(8) will b
00B3B0:  65 20 67 72 65 61 74 65 72 20 74 68 61 6E 20 2D    e greater than -
00B3C0:  31 2C 20 73 6F 0D 0A 20 20 20 22 28 49 4E 4B 45    1, so..   "(INKE
00B3D0:  59 28 38 29 3E 2D 31 29 22 20 69 73 20 74 72 75    Y(8)>-1)" is tru
00B3E0:  65 20 61 6E 64 20 61 64 64 78 20 69 73 20 73 65    e and addx is se
00B3F0:  74 20 74 6F 20 2D 31 2E 20 20 49 66 20 69 74 20    t to -1.  If it 
00B400:  69 73 20 6E 6F 74 20 70 72 65 73 73 65 64 2C 20    is not pressed, 
00B410:  61 64 64 78 0D 0A 20 20 20 77 69 6C 6C 20 62 65    addx..   will be
00B420:  20 73 65 74 20 74 6F 20 7A 65 72 6F 2C 20 61 73     set to zero, as
00B430:  20 74 68 65 20 6C 6F 67 69 63 61 6C 20 65 78 70     the logical exp
00B440:  72 65 73 73 69 6F 6E 20 22 28 49 4E 4B 45 59 28    ression "(INKEY(
00B450:  38 29 3E 2D 31 29 22 20 69 73 20 66 61 6C 73 65    8)>-1)" is false
00B460:  2E 0D 0A 20 20 20 20 20 49 6E 20 6C 69 6E 65 73    ...     In lines
00B470:  20 33 35 30 20 61 6E 64 20 33 39 30 20 77 65 20     350 and 390 we 
00B480:  20 73 75 62 74 72 61 63 74 20 20 74 68 65 20 20     subtract  the  
00B490:  49 4E 4B 45 59 20 72 65 74 75 72 6E 20 76 61 6C    INKEY return val
00B4A0:  75 65 20 66 72 6F 6D 20 61 64 64 78 20 61 6E 64    ue from addx and
00B4B0:  0D 0A 20 20 20 61 64 64 79 2E 20 20 49 66 20 74    ..   addy.  If t
00B4C0:  68 65 20 6B 65 79 20 69 73 20 20 62 65 69 6E 67    he key is  being
00B4D0:  20 20 70 72 65 73 73 65 64 20 20 49 4E 4B 45 59      pressed  INKEY
00B4E0:  20 20 72 65 74 75 72 6E 73 20 20 2D 31 20 73 6F      returns  -1 so
00B4F0:  20 73 75 62 74 72 61 63 74 69 6E 67 20 69 74 0D     subtracting it.
00B500:  74 6C 79 20 74 68 65 20 73 61 6D 65 20 70 72 6F    tly the same pro
00B510:  63 65 64 75 72 65 20 63 61 6E 20 62 65 20 20 66    cedure can be  f
00B520:  6F 6C 6C 6F 77 65 64 20 74 6F 20 73 71 75 61 73    ollowed to squas
00B530:  68 20 6C 69 6E 65 73 20 33 37 30 2D 34 30 30 20    h lines 370-400 
00B540:  69 6E 74 6F 0D 0A 20 20 20 6C 69 6E 65 20 34 31    into..   line 41
00B550:  30 2E 0D 0A 20 20 20 20 20 4E 6F 77 20 74 68 61    0...     Now tha
00B560:  74 20 61 6C 6C 20 74 68 6F 73 65 20 6C 69 6E 65    t all those line
00B570:  73 20 68 61 76 65 20 62 65 65 6E 20 20 73 71 75    s have been  squ
00B580:  61 73 68 65 64 20 69 6E 74 6F 20 6A 75 73 74 20    ashed into just 
00B590:  74 77 6F 20 77 65 20 64 6F 6E 27 74 20 6E 65 65    two we don't nee
00B5A0:  64 0D 0A 20 20 20 61 64 64 78 20 61 6E 64 20 61    d..   addx and a
00B5B0:  64 64 79 20 61 6E 79 6D 6F 72 65 2E 20 20 4C 69    ddy anymore.  Li
00B5C0:  6E 65 73 20 33 37 30 2C 20 20 34 31 30 20 20 61    nes 370,  410  a
00B5D0:  6E 64 20 20 34 32 30 20 63 61 6E 20 62 65 20 63    nd  420 can be c
00B5E0:  6F 6D 62 69 6E 65 64 20 69 6E 74 6F 20 6F 6E 65    ombined into one
00B5F0:  0D 0A 20 20 20 61 6E 64 20 6C 69 6E 65 20 33 33    ..   and line 33
00B600:  30 20 64 65 6C 65 74 65 64 2E 0D 0A 20 20 20 20    0 deleted...    
00B610:  20 4F 6E 63 65 20 6C 69 6E 65 73 20 34 33 30 20     Once lines 430 
00B620:  61 6E 64 20 34 34 30 20 61 72 65 20 63 6F 6D 62    and 440 are comb
00B630:  69 6E 65 64 20 69 6E 74 6F 0D 0A 0D 0A 20 20 20    ined into....   
00B640:  20 20 34 34 30 20 78 3D 4D 41 58 28 30 2C 4D 49      440 x=MAX(0,MI
00B650:  4E 28 36 33 32 2C 78 29 29 0D 0A 0D 0A 20 20 20    N(632,x))....   
00B660:  61 6E 64 20 6C 69 6E 65 73 20 34 35 30 20 61 6E    and lines 450 an
00B670:  64 20 34 36 30 20 69 6E 74 6F 0D 0A 0D 0A 20 20    d 460 into....  
00B680:  20 20 20 34 36 30 20 79 3D 4D 41 58 28 31 35 2C       460 y=MAX(15,
00B690:  4D 49 4E 28 33 39 39 2C 79 29 29 0D 0A 0D 0A 20    MIN(399,y)).... 
00B6A0:  20 20 77 65 20 6A 75 73 74 20 68 61 76 65 20 74      we just have t
00B6B0:  6F 20 63 6F 6D 62 69 6E 65 20 74 68 65 20 20 6B    o combine the  k
00B6C0:  65 79 2D 63 68 65 63 6B 69 6E 67 20 20 61 6E 64    ey-checking  and
00B6D0:  20 72 61 6E 67 65 2D 63 68 65 63 6B 69 6E 67 20     range-checking 
00B6E0:  70 61 72 74 73 20 74 6F 20 67 65 74 0D 0A 20 20    parts to get..  
00B6F0:  20 74 68 65 20 65 78 70 72 65 73 73 69 6F 6E 73     the expressions
00B700:  0A 20 20 20 6D 65 61 6E 73 20 77 65 20 73 75 62    .   means we sub
00B710:  74 72 61 63 74 20 2D 31 20 6F 72 2C 20 69 6E 20    tract -1 or, in 
00B720:  6F 74 68 65 72 20 77 6F 72 64 73 2C 20 61 64 64    other words, add
00B730:  20 31 2E 0D 0A 20 20 20 20 20 4C 69 6E 65 73 20     1...     Lines 
00B740:  31 36 30 20 61 6E 64 20 32 30 30 20 61 72 65 20    160 and 200 are 
00B750:  61 20 62 69 74 20 6D 6F 72 65 20 74 72 69 63 6B    a bit more trick
00B760:  79 20 74 6F 20 61 6C 74 65 72 2E 20 20 54 61 6B    y to alter.  Tak
00B770:  69 6E 67 20 6C 69 6E 65 20 31 36 30 20 61 73 20    ing line 160 as 
00B780:  61 6E 0D 0A 20 20 20 65 78 61 6D 70 6C 65 2C 20    an..   example, 
00B790:  69 66 20 53 48 49 46 54 20 69 73 20 62 65 69 6E    if SHIFT is bein
00B7A0:  67 20 70 72 65 73 73 65 64 20 77 65 20 20 77 61    g pressed we  wa
00B7B0:  6E 74 20 74 6F 20 6D 75 6C 74 69 70 6C 79 20 62    nt to multiply b
00B7C0:  79 20 34 2C 20 6F 74 68 65 72 77 69 73 65 20 77    y 4, otherwise w
00B7D0:  65 0D 0A 20 20 20 77 61 6E 74 20 74 6F 20 64 6F    e..   want to do
00B7E0:  20 6E 6F 74 68 69 6E 67 2E 20 20 41 6E 20 65 71     nothing.  An eq
00B7F0:  75 69 76 61 6C 65 6E 74 20 20 74 6F 20 20 64 6F    uivalent  to  do
00B800:  69 6E 67 20 6E 6F 74 68 69 6E 67 20 69 73 20 6D    ing nothing is m
00B810:  75 6C 74 69 70 6C 79 69 6E 67 20 62 79 20 31 2E    ultiplying by 1.
00B820:  0D 0A 20 20 20 49 66 20 77 65 20 63 68 6F 6F 73    ..   If we choos
00B830:  65 20 74 68 65 20 6C 6F 67 69 63 61 6C 20 65 78    e the logical ex
00B840:  70 72 65 73 73 69 6F 6E 20 22 49 4E 4B 45 59 28    pression "INKEY(
00B850:  32 31 29 3D 2D 31 22 20 20 74 68 65 6E 20 77 65    21)=-1"  then we
00B860:  20 67 65 74 20 30 20 77 68 65 6E 20 74 68 65 0D     get 0 when the.
00B870:  0A 20 20 20 6B 65 79 20 69 73 20 64 6F 77 6E 20    .   key is down 
00B880:  61 6E 64 20 2D 31 20 77 68 65 6E 20 20 69 74 20    and -1 when  it 
00B890:  20 69 73 20 20 75 70 2E 20 20 20 4F 75 72 20 20     is  up.   Our  
00B8A0:  74 61 72 67 65 74 20 6D 75 6C 74 69 70 6C 69 65    target multiplie
00B8B0:  72 73 20 61 72 65 20 34 20 61 6E 64 20 31 0D 0A    rs are 4 and 1..
00B8C0:  20 20 20 74 68 6F 75 67 68 20 73 6F 20 73 6F 6D       though so som
00B8D0:  65 20 6D 61 6E 69 70 75 6C 61 74 69 6F 6E 20 69    e manipulation i
00B8E0:  73 20 6E 65 65 64 65 64 20 74 6F 20 6D 61 70 20    s needed to map 
00B8F0:  74 68 65 20 70 61 69 72 20 30 2C 2D 31 20 74 6F    the pair 0,-1 to
00B900:  20 69 6E 20 6C 69 6E 65 20 34 30 2E 0D 0A 0D 0A     in line 40.....
00B910:  20 20 20 50 48 45 57 57 21 21 0D 0A 20 20 20 57       PHEWW!!..   W
00B920:  65 20 68 6F 70 65 20 79 6F 75 20 63 61 6E 20 75    e hope you can u
00B930:  6E 64 65 72 73 74 61 6E 64 20 20 74 68 65 20 20    nderstand  the  
00B940:  63 6F 6D 70 6C 69 63 61 74 65 64 20 20 65 78 70    complicated  exp
00B950:  72 65 73 73 69 6F 6E 73 20 20 69 6E 20 6C 69 6E    ressions  in lin
00B960:  65 20 34 30 20 6E 6F 77 2E 0D 0A 20 20 20 54 68    e 40 now...   Th
00B970:  65 79 20 72 65 61 6C 6C 79 20 61 72 65 20 61 62    ey really are ab
00B980:  6F 75 74 20 61 73 20 62 61 64 20 61 73 20 74 68    out as bad as th
00B990:  69 6E 67 73 20 67 65 74 21 0D 0A 20 20 20 20 20    ings get!..     
00B9A0:  49 6E 20 74 68 65 20 6E 65 78 74 20 61 72 74 69    In the next arti
00B9B0:  63 6C 65 20 77 65 20 77 69 6C 6C 20 20 70 72 6F    cle we will  pro
00B9C0:  62 61 62 6C 79 20 20 74 61 6B 65 20 20 61 20 20    bably  take  a  
00B9D0:  67 6F 6F 64 20 6C 6F 6F 6B 20 61 74 20 74 68 65    good look at the
00B9E0:  20 6D 61 63 68 69 6E 65 0D 0A 20 20 20 63 6F 64     machine..   cod
00B9F0:  65 2C 20 61 6E 64 20 61 6C 73 6F 20 65 78 61 6D    e, and also exam
00BA00:  69 6E 65 20 20 61 20 20 66 65 77 20 20 69 73 73    ine  a  few  iss
00BA10:  75 65 73 20 20 6F 66 20 20 63 6F 6D 70 61 74 69    ues  of  compati
00BA20:  62 69 6C 69 74 79 2E 20 20 54 68 65 6E 20 61 67    bility.  Then ag
00BA30:  61 69 6E 2C 20 77 65 0D 0A 20 20 20 6D 69 67 68    ain, we..   migh
00BA40:  74 20 6E 6F 74 2E 0D 0A 0D 0A 0D 0A 20 20 20 31    t not.......   1
00BA50:  30 30 20 52 45 4D 20 41 6E 20 69 6E 65 66 66 69    00 REM An ineffi
00BA60:  63 69 65 6E 74 20 73 75 62 72 6F 75 74 69 6E 65    cient subroutine
00BA70:  20 74 6F 20 72 65 70 6C 61 63 65 20 6C 69 6E 65     to replace line
00BA80:  20 34 30 2E 0D 0A 20 20 20 31 31 30 20 57 48 49     40...   110 WHI
00BA90:  4C 45 20 49 4E 4B 45 59 28 34 37 29 3D 2D 31 20    LE INKEY(47)=-1 
00BAA0:  41 4E 44 20 49 4E 4B 45 59 28 31 38 29 3D 2D 31    AND INKEY(18)=-1
00BAB0:  20 41 4E 44 20 49 4E 4B 45 59 28 39 29 3D 2D 31     AND INKEY(9)=-1
00BAC0:  0D 0A 20 20 20 31 32 30 20 6F 6C 64 78 3D 78 3A    ..   120 oldx=x:
00BAD0:  6F 6C 64 79 3D 79 0D 0A 20 20 20 31 33 30 20 61    oldy=y..   130 a
00BAE0:  64 64 78 3D 30 3A 61 64 64 79 3D 30 0D 0A 20 20    ddx=0:addy=0..  
00BAF0:  20 31 33 35 20 52 45 4D 20 43 68 65 63 6B 20 6B     135 REM Check k
00BB00:  20 34 2C 31 2E 0D 0A 20 20 20 20 20 49 66 20 77     4,1...     If w
00BB10:  65 20 6D 75 6C 74 69 70 6C 79 20 62 79 20 33 20    e multiply by 3 
00BB20:  74 68 65 6E 20 77 65 20 67 65 74 20 20 66 72 6F    then we get  fro
00BB30:  6D 20 30 2C 2D 31 20 74 6F 20 30 2C 2D 33 2E 20    m 0,-1 to 0,-3. 
00BB40:  20 54 68 65 20 67 61 70 20 62 65 74 77 65 65 6E     The gap between
00BB50:  20 74 68 65 0D 0A 20 20 20 70 61 69 72 20 69 73     the..   pair is
00BB60:  20 6E 6F 77 20 74 68 65 20 73 61 6D 65 20 61 73     now the same as
00BB70:  20 62 65 74 77 65 65 6E 20 34 20 61 6E 64 20 31     between 4 and 1
00BB80:  20 20 73 6F 20 61 6C 6C 20 77 65 20 68 61 76 65      so all we have
00BB90:  20 74 6F 20 64 6F 20 69 73 20 61 64 64 20 34 20     to do is add 4 
00BBA0:  61 6E 64 0D 0A 20 20 20 77 65 20 61 72 65 20 74    and..   we are t
00BBB0:  68 65 72 65 2E 0D 0A 0D 0A 20 20 20 20 20 53 48    here.....     SH
00BBC0:  49 46 54 20 6B 65 79 20 70 6F 73 69 74 69 6F 6E    IFT key position
00BBD0:  20 20 20 20 75 70 20 20 20 20 20 20 64 6F 77 6E        up      down
00BBE0:  0D 0A 20 20 20 20 20 49 4E 4B 45 59 28 32 32 29    ..     INKEY(22)
00BBF0:  20 20 20 20 20 20 20 20 20 20 20 20 20 2D 31 20                 -1 
00BC00:  20 20 20 20 20 3E 20 2D 31 0D 0A 20 20 20 20 20         > -1..     
00BC10:  28 49 4E 4B 45 59 28 32 32 29 3D 2D 31 29 20 20    (INKEY(22)=-1)  
00BC20:  20 20 20 20 20 20 2D 31 20 20 20 20 20 20 30 0D          -1      0.
00BC30:  0A 20 20 20 20 20 33 2A 28 49 4E 4B 45 59 28 32    .     3*(INKEY(2
00BC40:  32 29 3D 2D 31 29 20 20 20 20 20 20 2D 33 20 20    2)=-1)      -3  
00BC50:  20 20 20 20 30 0D 0A 20 20 20 20 20 34 2B 33 2A        0..     4+3*
00BC60:  28 49 4E 4B 45 59 28 32 32 29 3D 2D 31 29 20 20    (INKEY(22)=-1)  
00BC70:  20 20 31 20 20 20 20 20 20 20 34 0D 0A 0D 0A 20      1       4.... 
00BC80:  20 20 20 20 4C 69 6E 65 20 31 36 30 20 63 61 6E        Line 160 can
00BC90:  20 74 68 65 72 65 66 6F 72 65 20 62 65 20 63 68     therefore be ch
00BCA0:  61 6E 67 65 64 20 74 6F 3A 0D 0A 0D 0A 20 20 20    anged to:....   
00BCB0:  20 20 33 36 30 20 61 64 64 78 3D 61 64 64 78 2A      360 addx=addx*
00BCC0:  28 34 2B 33 2A 28 49 4E 4B 45 59 28 32 31 29 3D    (4+3*(INKEY(21)=
00BCD0:  2D 31 29 29 0D 0A 0D 0A 20 20 20 4C 69 6E 65 20    -1))....   Line 
00BCE0:  34 30 30 2C 20 77 68 69 63 68 20 69 73 20 65 71    400, which is eq
00BCF0:  75 69 76 61 6C 65 6E 74 20 74 6F 20 6C 69 6E 65    uivalent to line
00BD00:  65 79 73 0D 0A 20 20 20 31 34 30 20 49 46 20 49    eys..   140 IF I
00BD10:  4E 4B 45 59 28 38 29 3E 2D 31 20 54 48 45 4E 20    NKEY(8)>-1 THEN 
00BD20:  61 64 64 78 3D 2D 31 0D 0A 20 20 20 31 35 30 20    addx=-1..   150 
00BD30:  49 46 20 49 4E 4B 45 59 28 31 29 3E 2D 31 20 54    IF INKEY(1)>-1 T
00BD40:  48 45 4E 20 61 64 64 78 3D 61 64 64 78 2B 31 0D    HEN addx=addx+1.
00BD50:  0A 20 20 20 31 36 30 20 49 46 20 49 4E 4B 45 59    .   160 IF INKEY
00BD60:  28 32 31 29 3E 2D 31 20 54 48 45 4E 20 61 64 64    (21)>-1 THEN add
00BD70:  78 3D 61 64 64 78 2A 34 0D 0A 20 20 20 31 37 30    x=addx*4..   170
00BD80:  20 61 64 64 78 3D 33 2A 61 64 64 78 0D 0A 20 20     addx=3*addx..  
00BD90:  20 31 38 30 20 49 46 20 49 4E 4B 45 59 28 32 29     180 IF INKEY(2)
00BDA0:  3E 2D 31 20 54 48 45 4E 20 61 64 64 79 3D 2D 31    >-1 THEN addy=-1
00BDB0:  0D 0A 20 20 20 31 39 30 20 49 46 20 49 4E 4B 45    ..   190 IF INKE
00BDC0:  59 28 30 29 3E 2D 31 20 54 48 45 4E 20 61 64 64    Y(0)>-1 THEN add
00BDD0:  79 3D 61 64 64 79 2B 31 0D 0A 20 20 20 32 30 30    y=addy+1..   200
00BDE0:  20 49 46 20 49 4E 4B 45 59 28 32 31 29 3E 2D 31     IF INKEY(21)>-1
00BDF0:  20 54 48 45 4E 20 61 64 64 79 3D 61 64 64 79 2A     THEN addy=addy*
00BE00:  32 0D 0A 20 20 20 32 31 30 20 61 64 64 79 3D 33    2..   210 addy=3
00BE10:  2A 61 64 64 79 0D 0A 20 20 20 32 32 30 20 78 3D    *addy..   220 x=
00BE20:  78 2B 61 64 64 78 3A 79 3D 79 2B 61 64 64 79 0D    x+addx:y=y+addy.
00BE30:  0A 20 20 20 32 32 35 20 52 45 4D 20 43 68 65 63    .   225 REM Chec
00BE40:  6B 20 78 20 26 20 79 20 61 72 65 20 6F 6E 20 73    k x & y are on s
00BE50:  63 72 65 65 6E 0D 0A 20 20 20 32 33 30 20 49 46    creen..   230 IF
00BE60:  20 78 3E 36 33 32 20 54 48 45 4E 20 78 3D 36 33     x>632 THEN x=63
00BE70:  32 0D 0A 20 20 20 32 34 30 20 49 46 20 78 3C 30    2..   240 IF x<0
00BE80:  20 54 48 45 4E 20 78 3D 30 0D 0A 20 20 20 32 35     THEN x=0..   25
00BE90:  30 20 49 46 20 79 3E 33 39 39 20 54 48 45 4E 20    0 IF y>399 THEN 
00BEA0:  79 3D 33 39 39 0D 0A 20 20 20 32 36 30 20 49 46    y=399..   260 IF
00BEB0:  20 79 3C 31 35 20 54 48 45 4E 20 79 3D 31 35 0D     y<15 THEN y=15.
00BEC0:  0A 20 20 20 32 36 35 20 52 45 4D 20 52 65 6D 6F    .   265 REM Remo
00BED0:  76 65 20 70 6F 69 6E 74 65 72 20 61 6E 64 20 72    ve pointer and r
00BEE0:  65 64 69 73 70 6C 61 79 0D 0A 20 20 20 32 37 30    edisplay..   270
00BEF0:  20 4D 4F 56 45 20 6F 6C 64 78 2C 6F 6C 64 79 3A     MOVE oldx,oldy:
00BF00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
00BF10:  0A 00 01 00 02 09 4E E5 0A 00 C3 02 00 00 00 02    ......N.........
00BF20:  0A 00 C8 02 00 00 00 02 0A 00 C4 02 00 00 00 02    ................
00BF30:  0A 00 C9 02 00 00 00 02 0A 00 C5 02 00 00 00 02    ................
00BF40:  0A 00 C1 02 00 00 00 02 0A 00 C6 02 00 00 00 02    ................
00BF50:  0A 00 C2 02 00 00 00 02 0A 00 C7 02 00 00 00 02    ................
00BF60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00BF70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00BF80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00BF90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00BFA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00BFB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00BFC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00BFD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00BFE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00BFF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00C000:  23 50 72 6F 67 72 61 6D 6D 65 72 73 27 20 50 61    #Programmers' Pa
00C010:  74 63 68 20 33 20 2D 20 57 41 43 43 49 20 31 31    tch 3 - WACCI 11
00C020:  32 2C 20 4D 61 79 20 31 39 39 37 2C 20 70 2E 20    2, May 1997, p. 
00C030:  31 30 2D 31 32 0D 0A 20 20 20 50 52 4F 47 52 41    10-12..   PROGRA
00C040:  4D 4D 45 52 53 27 20 50 41 54 43 48 20 33 0D 0A    MMERS' PATCH 3..
00C050:  20 20 20 42 79 20 4D 61 74 74 68 65 77 20 61 6E       By Matthew an
00C060:  64 20 53 74 65 70 68 65 6E 20 50 68 69 6C 6C 69    d Stephen Philli
00C070:  70 73 0D 0A 0D 0A 20 20 20 53 69 6E 63 65 20 74    ps....   Since t
00C080:  68 69 73 20 61 72 74 69 63 6C 65 20 77 61 73 20    his article was 
00C090:  77 72 69 74 74 65 6E 20 69 6E 20 20 4C 65 6E 74    written in  Lent
00C0A0:  2C 20 20 77 65 20 61 72 65 20 6F 66 66 65 72 69    ,  we are offeri
00C0B0:  6E 67 20 6D 6F 72 65 20 66 72 75 67 61 6C 20 66    ng more frugal f
00C0C0:  61 72 65 0D 0A 20 20 20 69 6E 20 74 68 65 20 66    are..   in the f
00C0D0:  6F 72 6D 20 6F 66 20 61 20 20 6D 65 61 67 72 65    orm of a  meagre
00C0E0:  20 20 72 61 74 69 6F 6E 20 20 6F 66 20 20 6D 61      ration  of  ma
00C0F0:  63 68 69 6E 65 20 20 63 6F 64 65 20 61 6E 64 20    chine  code and 
00C100:  61 6E 20 75 6E 75 73 75 61 6C 6C 79 20 73 68 6F    an unusually sho
00C110:  72 74 0D 0A 20 20 20 69 6E 74 72 6F 64 75 63 74    rt..   introduct
00C120:  69 6F 6E 2E 20 20 54 68 65 20 20 68 65 61 64 69    ion.  The  headi
00C130:  6E 67 73 20 20 61 72 65 20 20 66 72 6F 6D 20 20    ngs  are  from  
00C140:  61 72 74 69 63 6C 65 73 20 20 69 6E 20 20 74 68    articles  in  th
00C150:  69 73 20 20 6D 6F 6E 74 68 27 73 20 67 75 65 73    is  month's gues
00C160:  74 0D 0A 20 20 20 70 75 62 6C 69 63 61 74 69 6F    t..   publicatio
00C170:  6E 2C 20 52 49 53 43 20 55 73 65 72 20 6D 61 67    n, RISC User mag
00C180:  61 7A 69 6E 65 2E 0D 0A 0D 0A 20 20 20 52 41 44    azine.....   RAD
00C190:  49 41 4C 20 50 41 4C 45 54 54 45 53 0D 0A 20 20    IAL PALETTES..  
00C1A0:  20 41 6C 74 68 6F 75 67 68 20 74 68 65 72 65 20     Although there 
00C1B0:  68 61 76 65 20 62 65 65 6E 20 6D 61 6E 79 20 61    have been many a
00C1C0:  72 74 69 63 6C 65 73 20 20 61 62 6F 75 74 20 20    rticles  about  
00C1D0:  42 41 53 49 43 20 6F 76 65 72 20 74 68 65 20 79    BASIC over the y
00C1E0:  65 61 72 73 2C 20 61 6E 64 20 61 0D 0A 20 20 20    ears, and a..   
00C1F0:  66 65 77 20 61 62 6F 75 74 20 6D 61 63 68 69 6E    few about machin
00C200:  77 20 6D 61 6E 79 20 70 61 72 61 6D 65 74 65 72    w many parameter
00C210:  73 20 74 68 65 72 65 20 61 72 65 2E 20 20 49 66    s there are.  If
00C220:  20 77 65 20 64 69 64 0D 0A 20 20 20 74 68 65 20     we did..   the 
00C230:  66 6F 6C 6C 6F 77 69 6E 67 3A 0D 0A 0D 0A 20 20    following:....  
00C240:  20 20 20 20 20 20 20 43 41 4C 4C 20 26 39 30 30           CALL &900
00C250:  30 2C 36 2C 34 2C 26 43 44 45 46 0D 0A 0D 0A 20    0,6,4,&CDEF.... 
00C260:  20 20 74 68 65 6E 20 77 68 65 6E 20 74 68 65 20      then when the 
00C270:  6D 61 63 68 69 6E 65 20 63 6F 64 65 20 73 74 61    machine code sta
00C280:  72 74 65 64 2C 20 74 68 65 20 41 20 72 65 67 69    rted, the A regi
00C290:  73 74 65 72 20 77 6F 75 6C 64 20 62 65 20 65 71    ster would be eq
00C2A0:  75 61 6C 20 74 6F 20 33 2C 20 74 6F 0D 0A 20 20    ual to 3, to..  
00C2B0:  20 74 65 6C 6C 20 75 73 20 74 68 65 20 6E 75 6D     tell us the num
00C2C0:  62 65 72 20 6F 66 20 70 61 72 61 6D 65 74 65 72    ber of parameter
00C2D0:  73 20 70 61 73 73 65 64 2C 20 20 61 6E 64 20 20    s passed,  and  
00C2E0:  49 58 20 77 6F 75 6C 64 20 70 6F 69 6E 74 20 74    IX would point t
00C2F0:  6F 20 61 20 6C 69 73 74 20 6F 66 0D 0A 20 20 20    o a list of..   
00C300:  74 68 65 20 70 61 72 61 6D 65 74 65 72 73 2E 20    the parameters. 
00C310:  20 54 68 65 72 65 20 61 72 65 20 74 77 6F 20 62     There are two b
00C320:  79 74 65 73 20 66 6F 72 20 20 65 61 63 68 20 70    ytes for  each p
00C330:  61 72 61 6D 65 74 65 72 2C 20 61 6E 64 20 74 68    arameter, and th
00C340:  65 20 6C 61 73 74 20 6F 6E 65 0D 0A 20 20 20 69    e last one..   i
00C350:  6E 20 74 68 65 20 43 41 4C 4C 20 63 6F 6D 6D 61    n the CALL comma
00C360:  6E 64 20 63 6F 6D 65 73 20 66 69 72 73 74 20 20    nd comes first  
00C370:  69 6E 20 20 74 68 65 20 20 6C 69 73 74 21 20 20    in  the  list!  
00C380:  20 49 6E 20 74 68 69 73 20 65 78 61 6D 70 6C 65     In this example
00C390:  20 69 74 20 77 6F 75 6C 64 0D 0A 20 20 20 6C 6F     it would..   lo
00C3A0:  6F 6B 20 6C 69 6B 65 20 74 68 69 73 3A 0D 0A 0D    ok like this:...
00C3B0:  0A 20 20 20 20 20 20 20 20 20 28 49 58 2B 30 29    .         (IX+0)
00C3C0:  20 20 45 46 20 20 20 20 20 20 28 49 58 2B 31 29      EF      (IX+1)
00C3D0:  20 20 43 44 0D 0A 20 20 20 20 20 20 20 20 20 28      CD..         (
00C3E0:  49 58 2B 32 29 20 20 30 34 20 20 20 20 20 20 28    IX+2)  04      (
00C3F0:  49 58 2B 33 29 20 20 30 30 0D 0A 20 20 20 20 20    IX+3)  00..     
00C400:  65 20 63 6F 64 65 2C 20 74 68 65 72 65 20 68 61    e code, there ha
00C410:  76 65 20 20 62 65 65 6E 20 20 68 61 72 64 6C 79    ve  been  hardly
00C420:  20 20 61 6E 79 20 61 62 6F 75 74 20 68 6F 77 20      any about how 
00C430:  74 6F 20 75 73 65 20 74 68 65 0D 0A 20 20 20 74    to use the..   t
00C440:  77 6F 20 74 6F 67 65 74 68 65 72 2E 20 20 54 68    wo together.  Th
00C450:  65 20 61 64 76 61 6E 74 61 67 65 20 6F 66 20 20    e advantage of  
00C460:  42 41 53 49 43 20 20 69 73 20 20 74 68 61 74 20    BASIC  is  that 
00C470:  20 69 74 20 20 69 73 20 65 61 73 79 20 74 6F 20     it  is easy to 
00C480:  77 72 69 74 65 20 61 6E 64 0D 0A 20 20 20 64 65    write and..   de
00C490:  62 75 67 2C 20 61 6E 64 20 74 68 65 72 65 20 69    bug, and there i
00C4A0:  73 20 6E 6F 20 6E 65 65 64 20 20 74 6F 20 20 77    s no need  to  w
00C4B0:  6F 72 72 79 20 20 61 62 6F 75 74 20 68 6F 77 20    orry  about how 
00C4C0:  61 6E 64 20 77 68 65 72 65 20 79 6F 75 72 20 76    and where your v
00C4D0:  61 72 69 61 62 6C 65 73 0D 0A 20 20 20 61 72 65    ariables..   are
00C4E0:  20 73 74 6F 72 65 64 2E 20 20 4D 61 63 68 69 6E     stored.  Machin
00C4F0:  65 20 63 6F 64 65 20 77 69 6E 73 20 6F 6E 20 20    e code wins on  
00C500:  73 70 65 65 64 20 20 61 6E 64 20 62 65 74 74 65    speed  and bette
00C510:  72 20 75 73 65 20 6F 66 20 6D 65 6D 6F 72 79 2E    r use of memory.
00C520:  20 20 54 68 65 72 65 0D 0A 20 20 20 61 72 65 20      There..   are 
00C530:  61 6C 73 6F 20 6D 61 6E 79 20 74 68 69 6E 67 73    also many things
00C540:  20 74 68 61 74 20 63 61 6E 6E 6F 74 20 62 65 20     that cannot be 
00C550:  64 6F 6E 65 20 77 69 74 68 20 42 41 53 49 43 20    done with BASIC 
00C560:  61 6C 6F 6E 65 2E 0D 0A 20 20 20 20 20 42 41 53    alone...     BAS
00C570:  49 43 20 61 6E 64 20 6D 61 63 68 69 6E 65 20 63    IC and machine c
00C580:  6F 64 65 20 74 6F 67 65 74 68 65 72 20 63 61 6E    ode together can
00C590:  20 20 62 65 20 61 20 76 65 72 79 20 70 6F 77 65      be a very powe
00C5A0:  72 66 75 6C 20 63 6F 6D 62 69 6E 61 74 69 6F 6E    rful combination
00C5B0:  2E 20 20 49 66 0D 0A 20 20 20 74 68 65 20 73 70    .  If..   the sp
00C5C0:  65 65 64 2D 63 72 69 74 69 63 61 6C 20 70 61 72    eed-critical par
00C5D0:  74 73 20 6F 66 20 61 20 70 72 6F 67 72 61 6D 20    ts of a program 
00C5E0:  20 61 72 65 20 63 6F 6E 76 65 72 74 65 64 20 69     are converted i
00C5F0:  6E 74 6F 20 6D 61 63 68 69 6E 65 20 63 6F 64 65    nto machine code
00C600:  20 20 20 20 28 49 58 2B 34 29 20 20 30 36 20 20        (IX+4)  06  
00C610:  20 20 20 20 28 49 58 2B 35 29 20 20 30 30 0D 0A        (IX+5)  00..
00C620:  0D 0A 20 20 20 20 20 48 61 76 65 20 61 20 6C 6F    ..     Have a lo
00C630:  6F 6B 20 61 74 20 74 68 65 20 20 6D 61 63 68 69    ok at the  machi
00C640:  6E 65 20 20 63 6F 64 65 20 20 69 6E 20 20 46 69    ne  code  in  Fi
00C650:  67 75 72 65 20 20 32 2E 20 20 20 54 68 65 20 6E    gure  2.   The n
00C660:  75 6D 62 65 72 20 78 20 77 69 6C 6C 20 62 65 0D    umber x will be.
00C670:  0A 20 20 20 73 74 6F 72 65 64 20 61 74 20 28 49    .   stored at (I
00C680:  58 2B 30 29 2C 20 61 73 20 69 74 20 69 73 20 20    X+0), as it is  
00C690:  74 68 65 20 20 6C 61 73 74 20 20 70 61 72 61 6D    the  last  param
00C6A0:  65 74 65 72 20 20 69 6E 20 74 68 65 20 6C 69 73    eter  in the lis
00C6B0:  74 2E 20 20 49 66 20 69 74 20 77 65 72 65 0D 0A    t.  If it were..
00C6C0:  20 20 20 62 69 67 67 65 72 20 74 68 61 6E 20 32       bigger than 2
00C6D0:  35 35 20 74 68 65 6E 20 70 61 72 74 20 6F 66 20    55 then part of 
00C6E0:  74 68 65 20 6E 75 6D 62 65 72 20 77 6F 75 6C 64    the number would
00C6F0:  20 62 65 20 61 74 20 28 49 58 2B 31 29 20 61 73     be at (IX+1) as
00C700:  20 77 65 6C 6C 2C 20 62 75 74 20 77 65 0D 0A 20     well, but we.. 
00C710:  20 20 68 61 76 65 20 69 67 6E 6F 72 65 64 20 74      have ignored t
00C720:  68 69 73 20 63 61 73 65 2E 20 20 54 68 65 20 20    his case.  The  
00C730:  6E 75 6D 62 65 72 20 20 69 73 20 20 6C 6F 61 64    number  is  load
00C740:  65 64 20 20 69 6E 74 6F 20 74 68 65 20 42 20 72    ed  into the B r
00C750:  65 67 69 73 74 65 72 2C 20 61 6E 64 0D 0A 20 20    egister, and..  
00C760:  20 74 68 65 6E 20 61 20 6C 6F 6F 70 20 69 73 20     then a loop is 
00C770:  65 78 65 63 75 74 65 64 20 74 6F 20 70 72 69 6E    executed to prin
00C780:  74 20 74 68 65 20 22 40 22 20 63 68 61 72 61 63    t the "@" charac
00C790:  74 65 72 73 2E 0D 0A 0D 0A 20 20 20 43 48 41 4E    ters.....   CHAN
00C7A0:  47 49 4E 47 20 54 48 45 20 4C 49 47 48 54 0D 0A    GING THE LIGHT..
00C7B0:  20 20 20 53 75 70 70 6F 73 65 20 77 65 20 77 61       Suppose we wa
00C7C0:  6E 74 20 74 6F 20 72 65 74 75 72 6E 20 61 20 76    nt to return a v
00C7D0:  61 6C 75 65 20 20 74 6F 20 42 41 53 49 43 20 66    alue  to BASIC f
00C7E0:  72 6F 6D 20 74 68 65 20 6D 61 63 68 69 6E 65 20    rom the machine 
00C7F0:  63 6F 64 65 3F 20 20 41 67 61 69 6E 2C 0D 0A 20    code?  Again,.. 
00C800:  20 61 6E 64 0D 0A 20 20 20 74 68 65 20 72 65 73     and..   the res
00C810:  74 20 6C 65 66 74 20 61 73 20 42 41 53 49 43 2C    t left as BASIC,
00C820:  20 79 6F 75 20 63 61 6E 20 65 6E 64 20 75 70 20     you can end up 
00C830:  20 77 69 74 68 20 61 6C 6D 6F 73 74 20 61 73 20     with almost as 
00C840:  67 6F 6F 64 20 61 20 72 65 73 75 6C 74 20 61 73    good a result as
00C850:  20 69 66 0D 0A 20 20 20 74 68 65 20 77 68 6F 6C     if..   the whol
00C860:  65 20 6C 6F 74 20 77 65 72 65 20 77 72 69 74 74    e lot were writt
00C870:  65 6E 20 69 6E 20 6D 61 63 68 69 6E 65 20 63 6F    en in machine co
00C880:  64 65 2C 20 62 75 74 20 77 69 74 68 20 6D 75 63    de, but with muc
00C890:  68 20 6C 65 73 73 20 68 61 73 73 6C 65 2E 0D 0A    h less hassle...
00C8A0:  20 20 20 20 20 54 68 69 73 20 6D 6F 6E 74 68 20         This month 
00C8B0:  77 65 20 77 69 6C 6C 20 74 61 6B 65 20 61 20 20    we will take a  
00C8C0:  71 75 69 63 6B 20 20 6C 6F 6F 6B 20 20 61 74 20    quick  look  at 
00C8D0:  20 74 68 65 20 65 73 73 65 6E 74 69 61 6C 73 20     the essentials 
00C8E0:  6F 66 20 68 6F 77 20 74 6F 20 67 65 74 0D 0A 20    of how to get.. 
00C8F0:  20 20 42 41 53 49 43 20 61 6E 64 20 6D 61 63 68      BASIC and mach
00C900:  69 6E 65 20 63 6F 64 65 20 74 6F 20 77 6F 72 6B    ine code to work
00C910:  20 20 74 6F 67 65 74 68 65 72 2C 20 20 74 68 65      together,  the
00C920:  6E 20 20 6E 65 78 74 20 74 69 6D 65 20 77 65 20    n  next time we 
00C930:  77 69 6C 6C 20 73 65 65 20 68 6F 77 0D 0A 20 20    will see how..  
00C940:  20 74 68 69 73 20 61 70 70 6C 69 65 73 20 74 6F     this applies to
00C950:  20 6F 75 72 20 64 69 73 63 20 6D 65 6E 75 2E 0D     our disc menu..
00C960:  0A 0D 0A 20 20 20 54 55 52 4E 49 4E 47 20 54 48    ...   TURNING TH
00C970:  45 20 57 4F 52 4C 44 20 47 52 45 59 0D 0A 20 20    E WORLD GREY..  
00C980:  20 53 6F 6D 65 20 70 69 65 63 65 73 20 6F 66 20     Some pieces of 
00C990:  6D 61 63 68 69 6E 65 20 63 6F 64 65 20 73 74 61    machine code sta
00C9A0:  6E 64 20 68 61 70 70 69 6C 79 20 6F 6E 20 74 68    nd happily on th
00C9B0:  65 69 72 20 6F 77 6E 2C 20 73 75 63 68 20 61 73    eir own, such as
00C9C0:  20 75 73 69 6E 67 20 43 41 4C 4C 0D 0A 20 20 20     using CALL..   
00C9D0:  26 42 42 34 45 20 74 6F 20 72 65 73 65 74 20 70    &BB4E to reset p
00C9E0:  61 72 74 73 20 20 6F 66 20 20 74 68 65 20 20 73    arts  of  the  s
00C9F0:  63 72 65 65 6E 2E 20 20 20 4F 66 74 65 6E 20 20    creen.   Often  
00CA00:  50 52 49 4E 54 20 43 48 52 24 28 32 31 35 29 3B    PRINT CHR$(215);
00CA10:  0D 0A 20 20 20 32 38 30 20 4D 4F 56 45 20 78 2C    ..   280 MOVE x,
00CA20:  79 3A 50 52 49 4E 54 20 43 48 52 24 28 32 31 35    y:PRINT CHR$(215
00CA30:  29 3B 0D 0A 20 20 20 32 39 30 20 57 45 4E 44 3A    );..   290 WEND:
00CA40:  52 45 54 55 52 4E 0D 0A 0D 0A 20 20 20 46 49 47    RETURN....   FIG
00CA50:  55 52 45 20 31 2E 36 31 0D 0A 0D 0A 0D 0A 0D 0A    URE 1.61........
00CA60:  20 20 20 33 30 30 20 52 45 4D 20 41 20 62 65 74       300 REM A bet
00CA70:  74 65 72 20 73 75 62 72 6F 75 74 69 6E 65 20 74    ter subroutine t
00CA80:  6F 20 72 65 70 6C 61 63 65 20 6C 69 6E 65 20 34    o replace line 4
00CA90:  30 2E 0D 0A 20 20 20 33 31 30 20 57 48 49 4C 45    0...   310 WHILE
00CAA0:  20 49 4E 4B 45 59 28 34 37 29 2B 49 4E 4B 45 59     INKEY(47)+INKEY
00CAB0:  28 31 38 29 2B 49 4E 4B 45 59 28 39 29 3D 2D 33    (18)+INKEY(9)=-3
00CAC0:  0D 0A 20 20 20 33 32 30 20 6F 6C 64 78 3D 78 3A    ..   320 oldx=x:
00CAD0:  6F 6C 64 79 3D 79 0D 0A 20 20 20 33 33 30 20 61    oldy=y..   330 a
00CAE0:  64 64 78 3D 30 3A 61 64 64 79 3D 30 0D 0A 20 20    ddx=0:addy=0..  
00CAF0:  20 33 33 35 20 52 45 4D 20 43 68 65 63 6B 20 6B     335 REM Check k
00CB00:  65 79 73 0D 0A 20 20 20 33 34 30 20 61 64 64 78    eys..   340 addx
00CB10:  3D 28 49 4E 4B 45 59 28 38 29 3E 2D 31 29 0D 0A    =(INKEY(8)>-1)..
00CB20:  20 20 20 33 35 30 20 61 64 64 78 3D 61 64 64 78       350 addx=addx
00CB30:  2D 28 49 4E 4B 45 59 28 31 29 3E 2D 31 29 0D 0A    -(INKEY(1)>-1)..
00CB40:  20 20 20 33 36 30 20 61 64 64 78 3D 61 64 64 78       360 addx=addx
00CB50:  2A 28 34 2B 33 2A 28 49 4E 4B 45 59 28 32 31 29    *(4+3*(INKEY(21)
00CB60:  3D 2D 31 29 29 0D 0A 20 20 20 33 37 30 20 61 64    =-1))..   370 ad
00CB70:  64 78 3D 33 2A 61 64 64 78 0D 0A 20 20 20 33 38    dx=3*addx..   38
00CB80:  30 20 61 64 64 79 3D 28 49 4E 4B 45 59 28 32 29    0 addy=(INKEY(2)
00CB90:  3E 2D 31 29 0D 0A 20 20 20 33 39 30 20 61 64 64    >-1)..   390 add
00CBA0:  79 3D 61 64 64 79 2D 28 49 4E 4B 45 59 28 30 29    y=addy-(INKEY(0)
00CBB0:  3E 2D 31 29 0D 0A 20 20 20 34 30 30 20 61 64 64    >-1)..   400 add
00CBC0:  79 3D 61 64 64 79 2A 28 28 49 4E 4B 45 59 28 32    y=addy*((INKEY(2
00CBD0:  31 29 3D 2D 31 29 2B 32 29 0D 0A 20 20 20 34 31    1)=-1)+2)..   41
00CBE0:  30 20 61 64 64 79 3D 33 2A 61 64 64 79 0D 0A 20    0 addy=3*addy.. 
00CBF0:  20 20 34 32 30 20 78 3D 78 2B 61 64 64 78 3A 79      420 x=x+addx:y
00CC00:  74 68 6F 75 67 68 20 20 77 65 20 20 6E 65 65 64    though  we  need
00CC10:  20 42 41 53 49 43 20 61 6E 64 0D 0A 20 20 20 6D     BASIC and..   m
00CC20:  61 63 68 69 6E 65 20 63 6F 64 65 20 74 6F 20 63    achine code to c
00CC30:  6F 6D 6D 75 6E 69 63 61 74 65 2E 20 20 46 6F 72    ommunicate.  For
00CC40:  20 65 78 61 6D 70 6C 65 20 20 79 6F 75 20 6D 69     example  you mi
00CC50:  67 68 74 20 77 61 6E 74 20 61 20 42 41 53 49 43    ght want a BASIC
00CC60:  20 76 61 72 69 61 62 6C 65 0D 0A 20 20 20 74 6F     variable..   to
00CC70:  20 61 66 66 65 63 74 20 77 68 61 74 20 74 68 65     affect what the
00CC80:  20 6D 61 63 68 69 6E 65 20 63 6F 64 65 20 64 6F     machine code do
00CC90:  65 73 2E 20 20 54 68 65 20 6F 62 76 69 6F 75 73    es.  The obvious
00CCA0:  20 77 61 79 20 74 6F 20 64 6F 20 74 68 69 73 20     way to do this 
00CCB0:  77 6F 75 6C 64 20 62 65 0D 0A 20 20 20 74 6F 20    would be..   to 
00CCC0:  50 4F 4B 45 20 74 68 65 20 76 61 6C 75 65 20 6F    POKE the value o
00CCD0:  66 20 74 68 65 20 20 76 61 72 69 61 62 6C 65 20    f the  variable 
00CCE0:  20 69 6E 74 6F 20 20 61 20 20 6D 65 6D 6F 72 79     into  a  memory
00CCF0:  20 6C 6F 63 61 74 69 6F 6E 2C 20 61 6E 64 20 74     location, and t
00CD00:  68 65 6E 20 74 68 65 0D 0A 20 20 20 6D 61 63 68    hen the..   mach
00CD10:  69 6E 65 20 63 6F 64 65 20 63 6F 75 6C 64 20 72    ine code could r
00CD20:  65 61 64 20 74 68 61 74 20 6C 6F 63 61 74 69 6F    ead that locatio
00CD30:  6E 20 61 6E 64 20 61 63 74 20 6F 6E 20 74 68 65    n and act on the
00CD40:  20 69 6E 66 6F 72 6D 61 74 69 6F 6E 2E 0D 0A 20     information... 
00CD50:  20 20 20 20 46 69 67 75 72 65 20 32 20 67 69 76        Figure 2 giv
00CD60:  65 73 20 61 20 62 65 74 74 65 72 20 6D 65 74 68    es a better meth
00CD70:  6F 64 2E 20 20 54 68 65 20 20 42 41 53 49 43 20    od.  The  BASIC 
00CD80:  70 72 6F 67 72 61 6D 20 70 6F 6B 65 73 20 69 6E    program pokes in
00CD90:  20 74 68 65 20 6D 61 63 68 69 6E 65 0D 0A 20 20     the machine..  
00CDA0:  20 63 6F 64 65 20 69 6E 20 6C 69 6E 65 20 31 39     code in line 19
00CDB0:  30 2E 20 20 41 66 74 65 72 20 74 68 65 20 20 42    0.  After the  B
00CDC0:  41 53 49 43 20 20 77 65 20 20 6C 69 73 74 20 74    ASIC  we  list t
00CDD0:  68 65 20 6D 61 63 68 69 6E 65 20 63 6F 64 65 20    he machine code 
00CDE0:  69 6E 20 61 73 73 65 6D 62 6C 79 0D 0A 20 20 20    in assembly..   
00CDF0:  6C 61 6E 67 75 61 67 65 2C 20 73 6F 20 74 68 61    language, so tha
00CE00:  3D 79 2B 61 64 64 79 0D 0A 20 20 20 34 32 35 20    =y+addy..   425 
00CE10:  52 45 4D 20 43 68 65 63 6B 20 78 20 26 20 79 20    REM Check x & y 
00CE20:  61 72 65 20 6F 6E 20 73 63 72 65 65 6E 0D 0A 20    are on screen.. 
00CE30:  20 20 34 33 30 20 78 3D 4D 49 4E 28 36 33 32 2C      430 x=MIN(632,
00CE40:  78 29 0D 0A 20 20 20 34 34 30 20 78 3D 4D 41 58    x)..   440 x=MAX
00CE50:  28 30 2C 78 29 0D 0A 20 20 20 34 35 30 20 79 3D    (0,x)..   450 y=
00CE60:  4D 49 4E 28 33 39 39 2C 79 29 0D 0A 20 20 20 34    MIN(399,y)..   4
00CE70:  36 30 20 79 3D 4D 41 58 28 31 35 2C 79 29 0D 0A    60 y=MAX(15,y)..
00CE80:  20 20 20 34 36 35 20 52 45 4D 20 52 65 6D 6F 76       465 REM Remov
00CE90:  65 20 70 6F 69 6E 74 65 72 20 61 6E 64 20 72 65    e pointer and re
00CEA0:  64 69 73 70 6C 61 79 0D 0A 20 20 20 34 37 30 20    display..   470 
00CEB0:  4D 4F 56 45 20 6F 6C 64 78 2C 6F 6C 64 79 3A 50    MOVE oldx,oldy:P
00CEC0:  52 49 4E 54 20 43 48 52 24 28 32 31 35 29 3B 0D    RINT CHR$(215);.
00CED0:  0A 20 20 20 34 38 30 20 4D 4F 56 45 20 78 2C 79    .   480 MOVE x,y
00CEE0:  3A 50 52 49 4E 54 20 43 48 52 24 28 32 31 35 29    :PRINT CHR$(215)
00CEF0:  3B 0D 0A 20 20 20 34 39 30 20 57 45 4E 44 3A 52    ;..   490 WEND:R
00CF00:  45 54 55 52 4E 0D 0A 0D 0A 20 20 20 46 49 47 55    ETURN....   FIGU
00CF10:  52 45 20 31 2E 36 31 38 0D 0A 1A 20 42 79 20 53    RE 1.618... By S
00CF20:  74 65 70 68 65 6E 20 61 6E 64 20 4D 61 74 74 68    tephen and Matth
00CF30:  65 77 20 50 68 69 6C 6C 69 70 73 0D 0A 0D 0A 20    ew Phillips.... 
00CF40:  20 20 57 65 6C 6C 2C 20 74 68 69 73 20 6D 6F 6E      Well, this mon
00CF50:  74 68 20 20 77 65 20 20 6D 6F 76 65 20 20 66 72    th  we  move  fr
00CF60:  6F 6D 20 20 74 68 65 20 20 73 74 61 72 74 65 72    om  the  starter
00CF70:  20 20 74 6F 20 20 61 20 20 6C 69 67 68 74 6C 79      to  a  lightly
00CF80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00CF90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00CFA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00CFB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00CFC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00CFD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00CFE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00CFF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00D000:  74 20 79 6F 75 20 63 61 6E 20 73 65 65 20 77 68    t you can see wh
00D010:  61 74 20 69 74 20 20 64 6F 65 73 2E 20 20 3C 3C    at it  does.  <<
00D020:  54 68 65 20 42 41 53 49 43 20 69 73 20 73 61 76    The BASIC is sav
00D030:  65 64 20 61 73 20 46 49 47 32 0D 0A 20 20 20 6F    ed as FIG2..   o
00D040:  6E 20 74 68 65 20 64 69 73 63 2E 3E 3E 0D 0A 20    n the disc.>>.. 
00D050:  20 20 20 20 54 68 65 20 70 72 6F 67 72 61 6D 20        The program 
00D060:  61 73 6B 73 20 66 6F 72 20 61 20 6E 75 6D 62 65    asks for a numbe
00D070:  72 20 20 66 72 6F 6D 20 20 74 68 65 20 20 75 73    r  from  the  us
00D080:  65 72 2C 20 20 78 2C 20 61 6E 64 20 74 68 65 6E    er,  x, and then
00D090:  20 70 72 69 6E 74 73 20 74 68 61 74 0D 0A 20 20     prints that..  
00D0A0:  20 6D 61 6E 79 20 22 40 22 20 63 68 61 72 61 63     many "@" charac
00D0B0:  74 65 72 73 2E 20 20 57 68 65 6E 20 74 68 65 20    ters.  When the 
00D0C0:  6D 61 63 68 69 6E 65 20 20 63 6F 64 65 20 20 69    machine  code  i
00D0D0:  73 20 63 61 6C 6C 65 64 2C 20 75 73 69 6E 67 20    s called, using 
00D0E0:  43 41 4C 4C 20 26 39 30 30 30 2C 0D 0A 20 20 20    CALL &9000,..   
00D0F0:  74 68 65 20 76 61 6C 75 65 20 6F 66 20 78 20 69    the value of x i
00D100:  73 20 73 69 6D 70 6C 79 20 74 61 67 67 65 64 20    s simply tagged 
00D110:  6F 6E 20 20 74 68 65 20 65 6E 64 20 61 66 74 65    on  the end afte
00D120:  72 20 61 20 63 6F 6D 6D 61 2E 20 20 42 65 66 6F    r a comma.  Befo
00D130:  72 65 20 70 61 73 73 69 6E 67 0D 0A 20 20 20 63    re passing..   c
00D140:  6F 6E 74 72 6F 6C 20 74 6F 20 74 68 65 20 6D 61    ontrol to the ma
00D150:  63 68 69 6E 65 20 63 6F 64 65 2C 20 42 41 53 49    chine code, BASI
00D160:  43 20 20 61 72 72 61 6E 67 65 73 20 74 68 65 73    C  arranges thes
00D170:  65 20 70 61 72 61 6D 65 74 65 72 73 20 69 6E 74    e parameters int
00D180:  6F 20 61 20 62 6C 6F 63 6B 0D 0A 20 20 20 69 6E    o a block..   in
00D190:  20 6D 65 6D 6F 72 79 2C 20 61 6E 64 20 6C 6F 61     memory, and loa
00D1A0:  64 73 20 74 68 65 20 49 58 20 72 65 67 69 73 74    ds the IX regist
00D1B0:  65 72 20 20 77 69 74 68 20 74 68 65 20 61 64 64    er  with the add
00D1C0:  72 65 73 73 20 6F 66 20 74 68 69 73 20 62 6C 6F    ress of this blo
00D1D0:  63 6B 2E 20 20 54 68 65 0D 0A 20 20 20 41 20 72    ck.  The..   A r
00D1E0:  65 67 69 73 74 65 72 20 69 73 20 73 65 74 20 75    egister is set u
00D1F0:  70 20 74 6F 20 69 6E 64 69 63 61 74 65 20 68 6F    p to indicate ho
00D200:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
00D210:  0B 00 01 00 02 09 4E E5 0B 00 C2 02 00 00 00 02    ......N.........
00D220:  0B 00 C7 02 00 00 00 02 0B 00 C3 02 00 00 00 02    ................
00D230:  0B 00 C8 02 00 00 00 02 0B 00 C4 02 00 00 00 02    ................
00D240:  0B 00 C9 02 00 00 00 02 0B 00 C5 02 00 00 00 02    ................
00D250:  0B 00 C1 02 00 00 00 02 0B 00 C6 02 00 00 00 02    ................
00D260:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00D270:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00D280:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00D290:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00D2A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00D2B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00D2C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00D2D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00D2E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00D2F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00D300:  63 61 6E 20 61 6C 74 65 72 0D 0A 20 20 20 74 68    can alter..   th
00D310:  65 20 76 61 6C 75 65 20 6F 66 20 63 25 2E 0D 0A    e value of c%...
00D320:  20 20 20 20 20 54 72 79 20 74 68 65 20 66 6F 6C         Try the fol
00D330:  6C 6F 77 69 6E 67 20 63 6F 6D 6D 61 6E 64 73 20    lowing commands 
00D340:  69 6E 20 42 41 53 49 43 3A 0D 0A 0D 0A 20 20 20    in BASIC:....   
00D350:  20 20 20 20 20 20 63 25 3D 35 0D 0A 20 20 20 20          c%=5..    
00D360:  20 20 20 20 20 50 52 49 4E 54 20 40 63 25 0D 0A         PRINT @c%..
00D370:  20 20 20 20 20 20 20 20 20 50 52 49 4E 54 20 50             PRINT P
00D380:  45 45 4B 28 40 63 25 29 0D 0A 0D 0A 20 20 20 41    EEK(@c%)....   A
00D390:  73 20 40 63 25 20 69 73 20 74 68 65 20 61 64 64    s @c% is the add
00D3A0:  72 65 73 73 20 61 74 20 77 68 69 63 68 20 63 25    ress at which c%
00D3B0:  20 69 73 20 73 74 6F 72 65 64 2C 20 50 45 45 4B     is stored, PEEK
00D3C0:  28 40 63 25 29 20 69 73 20 74 68 65 20 76 61 6C    (@c%) is the val
00D3D0:  75 65 20 6F 66 20 63 25 2E 0D 0A 20 20 20 20 20    ue of c%...     
00D3E0:  4E 6F 77 20 74 72 79 3A 0D 0A 0D 0A 20 20 20 20    Now try:....    
00D3F0:  20 20 20 20 20 50 4F 4B 45 20 40 63 25 2C 37 0D         POKE @c%,7.
00D400:  0A 20 20 20 20 20 20 20 20 20 50 52 49 4E 54 20    .         PRINT 
00D410:  63 25 0D 0A 0D 0A 20 20 20 61 6E 64 20 61 73 20    c%....   and as 
00D420:  69 66 20 62 79 20 6D 61 67 69 63 2C 20 63 25 20    if by magic, c% 
00D430:  68 61 73 20 63 68 61 6E 67 65 64 21 0D 0A 20 20    has changed!..  
00D440:  20 20 20 54 68 65 20 70 72 6F 67 72 61 6D 20 69       The program i
00D450:  6E 20 66 69 67 75 72 65 20 32 2E 37 20 20 75 73    n figure 2.7  us
00D460:  65 73 20 20 74 68 69 73 20 74 65 63 68 6E 69 71    es  this techniq
00D470:  75 65 2E 20 20 54 68 65 20 76 61 72 69 61 62 6C    ue.  The variabl
00D480:  65 27 73 20 61 64 64 72 65 73 73 0D 0A 20 20 20    e's address..   
00D490:  69 73 20 6C 6F 61 64 65 64 20 69 6E 74 6F 20 48    is loaded into H
00D4A0:  4C 2C 20 61 6E 64 20 74 68 65 6E 20 74 68 65 20    L, and then the 
00D4B0:  66 69 72 6D 77 61 72 65 20 63 61 6C 6C 20 74 6F    firmware call to
00D4C0:  20 72 65 61 64 20 61 20 63 68 61 72 61 63 74 65     read a characte
00D4D0:  72 20 66 72 6F 6D 20 74 68 65 0D 0A 20 20 20 73    r from the..   s
00D4E0:  63 72 65 65 6E 20 69 73 20 75 73 65 64 2E 20 20    creen is used.  
00D4F0:  54 68 65 20 20 76 61 6C 75 65 20 20 72 65 74 75    The  value  retu
00D500:  77 65 20 68 61 64 20 64 6F 6E 65 0D 0A 0D 0A 20    we had done.... 
00D510:  20 20 20 20 20 20 20 20 63 25 3D 32 30 30 30 3A            c%=2000:
00D520:  43 41 4C 4C 20 26 39 30 30 30 2C 40 63 25 0D 0A    CALL &9000,@c%..
00D530:  0D 0A 20 20 20 74 68 65 6E 20 77 65 20 77 6F 75    ..   then we wou
00D540:  6C 64 20 67 65 74 20 62 61 63 6B 20 20 73 6F 6D    ld get back  som
00D550:  65 20 20 76 65 72 79 20 20 66 75 6E 6E 79 20 20    e  very  funny  
00D560:  72 65 73 75 6C 74 73 20 20 69 66 20 77 65 20 64    results  if we d
00D570:  69 64 6E 27 74 20 7A 65 72 6F 20 74 68 61 74 0D    idn't zero that.
00D580:  0A 20 20 20 73 65 63 6F 6E 64 20 62 79 74 65 2E    .   second byte.
00D590:  0D 0A 20 20 20 20 20 54 68 65 20 72 65 61 73 6F    ..     The reaso
00D5A0:  6E 20 77 65 20 6B 65 65 70 20 75 73 69 6E 67 20    n we keep using 
00D5B0:  69 6E 74 65 67 65 72 20 76 61 72 69 61 62 6C 65    integer variable
00D5C0:  73 20 69 73 20 74 68 61 74 20 76 61 72 69 61 62    s is that variab
00D5D0:  6C 65 73 20 77 69 74 68 6F 75 74 20 74 68 65 0D    les without the.
00D5E0:  0A 20 20 20 70 65 72 63 65 6E 74 61 67 65 20 73    .   percentage s
00D5F0:  69 67 6E 20 28 72 65 61 6C 20 76 61 72 69 61 62    ign (real variab
00D600:  6C 65 73 29 2C 20 20 61 72 65 20 20 73 74 6F 72    les),  are  stor
00D610:  65 64 20 20 69 6E 20 20 61 20 6D 6F 72 65 20 63    ed  in  a more c
00D620:  6F 6D 70 6C 69 63 61 74 65 64 20 77 61 79 0D 0A    omplicated way..
00D630:  20 20 20 75 73 69 6E 67 20 66 69 76 65 20 62 79       using five by
00D640:  74 65 73 20 72 61 74 68 65 72 20 74 68 61 6E 20    tes rather than 
00D650:  74 77 6F 2C 20 73 6F 20 69 74 20 6D 61 6B 65 73    two, so it makes
00D660:  20 69 74 20 6D 75 63 68 20 65 61 73 69 65 72 20     it much easier 
00D670:  6A 75 73 74 20 74 6F 20 73 74 69 63 6B 0D 0A 20    just to stick.. 
00D680:  20 20 74 6F 20 69 6E 74 65 67 65 72 73 2E 0D 0A      to integers...
00D690:  0D 0A 20 20 20 46 45 41 54 55 52 45 53 20 4D 55    ..   FEATURES MU
00D6A0:  43 48 20 4D 49 53 53 45 44 0D 0A 20 20 20 49 6E    CH MISSED..   In
00D6B0:  74 65 67 65 72 20 76 61 72 69 61 62 6C 65 73 20    teger variables 
00D6C0:  74 68 65 6D 73 65 6C 76 65 73 20 61 72 65 20 6E    themselves are n
00D6D0:  6F 74 20 20 72 65 61 6C 6C 79 20 20 71 75 69 74    ot  really  quit
00D6E0:  65 20 20 61 73 20 20 73 69 6D 70 6C 65 20 61 73    e  as  simple as
00D6F0:  20 77 65 20 6A 75 73 74 0D 0A 20 20 20 6D 61 64     we just..   mad
00D700:  72 6E 65 64 20 20 69 6E 20 20 41 20 20 69 73 20    rned  in  A  is 
00D710:  20 74 68 65 6E 20 20 73 61 76 65 64 20 69 6E 20     then  saved in 
00D720:  74 68 65 20 42 41 53 49 43 0D 0A 20 20 20 76 61    the BASIC..   va
00D730:  72 69 61 62 6C 65 20 62 65 66 6F 72 65 20 67 6F    riable before go
00D740:  69 6E 67 20 62 61 63 6B 20 74 6F 20 42 41 53 49    ing back to BASI
00D750:  43 2E 0D 0A 20 20 20 20 20 4E 6F 74 65 20 74 68    C...     Note th
00D760:  61 74 20 74 68 65 20 76 61 72 69 61 62 6C 65 20    at the variable 
00D770:  77 68 6F 73 65 20 61 64 64 72 65 73 73 20 20 77    whose address  w
00D780:  65 20 20 70 61 73 73 20 6D 75 73 74 20 61 6C 72    e  pass must alr
00D790:  65 61 64 79 20 65 78 69 73 74 2E 20 20 54 68 61    eady exist.  Tha
00D7A0:  74 0D 0A 20 20 20 69 73 20 77 68 79 20 6C 69 6E    t..   is why lin
00D7B0:  65 20 31 32 30 20 73 65 74 73 20 63 25 20 74 6F    e 120 sets c% to
00D7C0:  20 7A 65 72 6F 20 62 65 66 6F 72 65 20 63 61 6C     zero before cal
00D7D0:  6C 69 6E 67 20 74 68 65 20 6D 61 63 68 69 6E 65    ling the machine
00D7E0:  20 63 6F 64 65 2E 0D 0A 0D 0A 20 20 20 41 20 44     code.....   A D
00D7F0:  4F 4F 44 4C 45 20 54 52 41 4E 53 46 4F 52 4D 45    OODLE TRANSFORME
00D800:  44 0D 0A 20 20 20 41 63 74 75 61 6C 6C 79 2C 20    D..   Actually, 
00D810:  74 68 61 74 20 69 73 6E 27 74 20 71 75 69 74 65    that isn't quite
00D820:  20 20 74 68 65 20 20 77 68 6F 6C 65 20 20 73 74      the  whole  st
00D830:  6F 72 79 2C 20 20 61 73 20 20 61 66 74 65 72 20    ory,  as  after 
00D840:  20 73 61 76 69 6E 67 20 41 20 69 6E 20 74 68 65     saving A in the
00D850:  0D 0A 20 20 20 61 64 64 72 65 73 73 20 70 6F 69    ..   address poi
00D860:  6E 74 65 64 20 74 6F 20 62 79 20 48 4C 2C 20 74    nted to by HL, t
00D870:  68 65 20 6D 61 63 68 69 6E 65 20 63 6F 64 65 20    he machine code 
00D880:  67 6F 65 73 20 6F 6E 20 74 6F 20 70 75 74 20 7A    goes on to put z
00D890:  65 72 6F 20 69 6E 20 74 68 65 20 6E 65 78 74 0D    ero in the next.
00D8A0:  0A 20 20 20 62 79 74 65 20 6F 66 20 6D 65 6D 6F    .   byte of memo
00D8B0:  72 79 2E 20 20 54 68 69 73 20 69 73 20 62 65 63    ry.  This is bec
00D8C0:  61 75 73 65 20 6F 66 20 74 68 65 20 77 61 79 20    ause of the way 
00D8D0:  69 6E 74 65 67 65 72 20 76 61 72 69 61 62 6C 65    integer variable
00D8E0:  73 20 61 72 65 20 73 74 6F 72 65 64 2E 0D 0A 20    s are stored... 
00D8F0:  20 20 20 20 54 68 65 20 62 61 73 69 63 20 75 6E        The basic un
00D900:  65 20 6F 75 74 2C 20 61 73 20 69 6E 73 74 65 61    e out, as instea
00D910:  64 20 6F 66 20 75 73 69 6E 67 20 20 74 68 65 20    d of using  the 
00D920:  20 74 77 6F 20 20 62 79 74 65 73 20 20 74 6F 20     two  bytes  to 
00D930:  73 74 6F 72 65 20 6E 75 6D 62 65 72 73 20 66 72    store numbers fr
00D940:  6F 6D 20 30 20 74 6F 0D 0A 20 20 20 36 35 35 33    om 0 to..   6553
00D950:  35 2C 20 74 68 65 79 20 73 74 6F 72 65 20 6E 75    5, they store nu
00D960:  6D 62 65 72 73 20 66 72 6F 6D 20 2D 33 32 37 36    mbers from -3276
00D970:  38 20 74 6F 20 33 32 37 36 37 2E 0D 0A 20 20 20    8 to 32767...   
00D980:  20 20 59 6F 75 20 77 69 6C 6C 20 76 65 72 79 20      You will very 
00D990:  72 61 72 65 6C 79 20 6E 65 65 64 20 74 6F 20 6B    rarely need to k
00D9A0:  6E 6F 77 20 20 65 78 61 63 74 6C 79 20 20 68 6F    now  exactly  ho
00D9B0:  77 20 74 68 65 79 20 61 72 65 20 73 74 6F 72 65    w they are store
00D9C0:  64 2E 20 20 49 66 20 79 6F 75 0D 0A 20 20 20 61    d.  If you..   a
00D9D0:  72 65 20 70 61 73 73 69 6E 67 20 61 20 76 61 6C    re passing a val
00D9E0:  75 65 20 74 6F 20 6D 61 63 68 69 6E 65 20 63 6F    ue to machine co
00D9F0:  64 65 2C 20 20 42 41 53 49 43 20 6C 6F 6F 6B 73    de,  BASIC looks
00DA00:  20 61 66 74 65 72 20 74 68 65 20 73 74 6F 72 69     after the stori
00DA10:  6E 67 20 6F 66 20 74 68 65 0D 0A 20 20 20 76 61    ng of the..   va
00DA20:  6C 75 65 20 69 6E 20 74 68 65 20 62 75 66 66 65    lue in the buffe
00DA30:  72 2E 20 20 57 68 65 6E 20 72 65 74 75 72 6E 69    r.  When returni
00DA40:  6E 67 20 20 61 20 20 76 61 6C 75 65 20 66 72 6F    ng  a  value fro
00DA50:  6D 20 6D 61 63 68 69 6E 65 20 63 6F 64 65 20 74    m machine code t
00DA60:  6F 20 42 41 53 49 43 2C 0D 0A 20 20 20 69 66 69    o BASIC,..   ifi
00DA70:  74 20 69 73 20 61 20 73 69 6E 67 6C 65 20 62 79    t is a single by
00DA80:  74 65 20 76 61 6C 75 65 20 68 65 6C 64 20 69 6E    te value held in
00DA90:  20 61 6E 20 38 2D 62 69 74 20 72 65 67 69 73 74     an 8-bit regist
00DAA0:  65 72 20 77 65 20 6A 75 73 74 20 75 73 65 20 74    er we just use t
00DAB0:  68 65 20 73 61 6D 65 0D 0A 20 20 20 74 65 63 68    he same..   tech
00DAC0:  6E 69 71 75 65 20 61 73 20 46 69 67 75 72 65 20    nique as Figure 
00DAD0:  32 2E 37 2E 20 20 49 66 20 74 68 65 20 76 61 6C    2.7.  If the val
00DAE0:  75 65 20 20 77 61 73 20 68 65 6C 64 20 69 6E 20    ue  was held in 
00DAF0:  61 20 31 36 2D 62 69 74 20 72 65 67 69 73 74 65    a 16-bit registe
00DB00:  69 74 20 6F 66 20 73 74 6F 72 61 67 65 20 69 73    it of storage is
00DB10:  20 61 20 62 79 74 65 2C 20 20 77 68 69 63 68 20     a byte,  which 
00DB20:  20 63 61 6E 20 68 6F 6C 64 20 61 20 6E 75 6D 62     can hold a numb
00DB30:  65 72 20 66 72 6F 6D 20 30 20 74 6F 0D 0A 20 20    er from 0 to..  
00DB40:  20 32 35 35 2E 20 20 49 66 20 77 65 20 77 61 6E     255.  If we wan
00DB50:  74 20 74 6F 20 20 73 74 6F 72 65 20 20 62 69 67    t to  store  big
00DB60:  67 65 72 20 20 6E 75 6D 62 65 72 73 20 20 77 65    ger  numbers  we
00DB70:  20 20 6E 65 65 64 20 20 6D 6F 72 65 20 62 79 74      need  more byt
00DB80:  65 73 2E 20 20 41 20 67 6F 6F 64 0D 0A 20 20 20    es.  A good..   
00DB90:  61 6E 61 6C 6F 67 79 20 69 73 20 74 6F 20 6C 6F    analogy is to lo
00DBA0:  6F 6B 20 61 74 20 74 68 65 20 20 66 61 6D 69 6C    ok at the  famil
00DBB0:  69 61 72 20 20 64 65 63 69 6D 61 6C 20 20 6E 75    iar  decimal  nu
00DBC0:  6D 62 65 72 73 2E 20 20 41 20 73 69 6E 67 6C 65    mbers.  A single
00DBD0:  20 64 69 67 69 74 20 63 61 6E 0D 0A 20 20 20 65     digit can..   e
00DBE0:  78 70 72 65 73 73 20 74 68 65 20 6E 75 6D 62 65    xpress the numbe
00DBF0:  72 73 20 30 2D 39 2C 20 74 65 6E 20 64 69 66 66    rs 0-9, ten diff
00DC00:  65 72 65 6E 74 20 20 6E 75 6D 62 65 72 73 20 69    erent  numbers i
00DC10:  6E 20 61 6C 6C 2E 20 20 54 6F 20 65 78 70 72 65    n all.  To expre
00DC20:  73 73 20 62 69 67 67 65 72 0D 0A 20 20 20 6E 75    ss bigger..   nu
00DC30:  6D 62 65 72 73 20 77 65 20 75 73 65 20 61 6E 6F    mbers we use ano
00DC40:  74 68 65 72 20 64 69 67 69 74 2C 20 67 69 76 69    ther digit, givi
00DC50:  6E 67 20 20 75 73 20 20 74 65 6E 20 74 69 6D 65    ng  us  ten time
00DC60:  73 20 61 73 20 6D 61 6E 79 20 6E 75 6D 62 65 72    s as many number
00DC70:  73 20 61 67 61 69 6E 3A 0D 0A 20 20 20 74 68 65    s again:..   the
00DC80:  20 68 75 6E 64 72 65 64 20 64 69 66 66 65 72 65     hundred differe
00DC90:  6E 74 20 6E 75 6D 62 65 72 73 20 66 72 6F 6D 20    nt numbers from 
00DCA0:  30 20 20 74 6F 20 20 39 39 2E 20 20 20 57 65 20    0  to  99.   We 
00DCB0:  77 72 69 74 65 20 74 68 65 20 22 74 65 6E 73 22    write the "tens"
00DCC0:  20 62 65 66 6F 72 65 0D 0A 20 20 20 74 68 65 20     before..   the 
00DCD0:  22 75 6E 69 74 73 22 2E 20 20 54 68 65 20 22 74    "units".  The "t
00DCE0:  65 6E 73 22 20 20 61 72 65 20 20 74 65 72 6D 65    ens"  are  terme
00DCF0:  64 20 20 22 6D 6F 72 65 20 20 73 69 67 6E 69 66    d  "more  signif
00DD00:  72 20 70 61 69 72 0D 0A 20 20 20 73 75 63 68 20    r pair..   such 
00DD10:  61 73 20 44 45 20 6F 72 20 48 4C 2C 20 20 74 68    as DE or HL,  th
00DD20:  65 6E 20 20 75 73 75 61 6C 6C 79 20 20 77 65 20    en  usually  we 
00DD30:  20 77 69 6C 6C 20 20 67 65 74 20 20 74 68 65 20     will  get  the 
00DD40:  72 69 67 68 74 20 72 65 73 75 6C 74 73 20 6A 75    right results ju
00DD50:  73 74 20 62 79 0D 0A 20 20 20 70 6C 6F 6E 6B 69    st by..   plonki
00DD60:  6E 67 20 69 74 20 73 74 72 61 69 67 68 74 20 62    ng it straight b
00DD70:  61 63 6B 20 69 6E 74 6F 20 74 68 65 20 74 77 6F    ack into the two
00DD80:  20 62 79 74 65 73 20 6F 66 20 74 68 65 20 69 6E     bytes of the in
00DD90:  74 65 67 65 72 20 76 61 72 69 61 62 6C 65 2E 0D    teger variable..
00DDA0:  0A 20 20 20 20 20 46 6F 72 20 65 78 61 6D 70 6C    .     For exampl
00DDB0:  65 2C 20 74 68 65 20 66 69 72 6D 77 61 72 65 20    e, the firmware 
00DDC0:  63 61 6C 6C 20 20 26 42 42 43 36 20 20 73 65 74    call  &BBC6  set
00DDD0:  73 20 20 44 45 20 20 61 6E 64 20 20 48 4C 20 20    s  DE  and  HL  
00DDE0:  74 6F 20 74 68 65 20 78 20 61 6E 64 20 79 0D 0A    to the x and y..
00DDF0:  20 20 20 70 6F 73 69 74 69 6F 6E 20 6F 66 20 74       position of t
00DE00:  68 65 20 67 72 61 70 68 69 63 73 20 63 75 72 73    he graphics curs
00DE10:  6F 72 2C 20 20 65 69 74 68 65 72 20 20 6F 66 20    or,  either  of 
00DE20:  20 77 68 69 63 68 20 63 6F 75 6C 64 20 62 65 20     which could be 
00DE30:  6E 65 67 61 74 69 76 65 2E 20 20 54 6F 0D 0A 20    negative.  To.. 
00DE40:  20 20 72 65 74 75 72 6E 20 74 68 65 20 78 20 63      return the x c
00DE50:  6F 2D 6F 72 64 69 6E 61 74 65 20 74 6F 20 61 20    o-ordinate to a 
00DE60:  42 41 53 49 43 20 20 69 6E 74 65 67 65 72 20 76    BASIC  integer v
00DE70:  61 72 69 61 62 6C 65 2C 20 77 65 20 77 6F 75 6C    ariable, we woul
00DE80:  64 20 73 69 6D 70 6C 79 20 70 75 74 0D 0A 20 20    d simply put..  
00DE90:  20 74 68 65 20 63 6F 6E 74 65 6E 74 73 20 6F 66     the contents of
00DEA0:  20 74 68 65 20 45 20 72 65 67 69 73 74 65 72 20     the E register 
00DEB0:  69 6E 74 6F 20 74 68 65 20 20 66 69 72 73 74 20    into the  first 
00DEC0:  62 79 74 65 2C 20 61 6E 64 20 74 68 65 20 63 6F    byte, and the co
00DED0:  6E 74 65 6E 74 73 20 6F 66 20 44 0D 0A 20 20 20    ntents of D..   
00DEE0:  69 6E 74 6F 20 74 68 65 20 73 65 63 6F 6E 64 2E    into the second.
00DEF0:  20 20 54 68 65 20 6E 65 67 61 74 69 76 65 20 6E      The negative n
00DF00:  69 63 61 6E 74 22 20 20 74 68 61 6E 20 74 68 65    icant"  than the
00DF10:  20 75 6E 69 74 73 0D 0A 20 20 20 62 65 63 61 75     units..   becau
00DF20:  73 65 20 74 68 65 79 20 68 65 6C 70 20 75 73 20    se they help us 
00DF30:  74 6F 20 65 78 70 72 65 73 73 20 62 69 67 67 65    to express bigge
00DF40:  72 20 6E 75 6D 62 65 72 73 2E 0D 0A 20 20 20 20    r numbers...    
00DF50:  20 49 6E 20 74 68 65 20 73 61 6D 65 20 77 61 79     In the same way
00DF60:  20 75 73 69 6E 67 20 74 77 6F 20 20 62 79 74 65     using two  byte
00DF70:  73 20 20 65 6E 61 62 6C 65 73 20 20 75 73 20 74    s  enables  us t
00DF80:  6F 20 73 74 6F 72 65 20 36 35 35 33 36 20 28 3D    o store 65536 (=
00DF90:  20 32 35 36 2A 32 35 36 29 0D 0A 20 20 20 6E 75     256*256)..   nu
00DFA0:  6D 62 65 72 73 20 66 72 6F 6D 20 30 20 74 6F 20    mbers from 0 to 
00DFB0:  36 35 35 33 35 2E 20 20 54 68 65 20 20 6D 6F 72    65535.  The  mor
00DFC0:  65 20 20 73 69 67 6E 69 66 69 63 61 6E 74 20 20    e  significant  
00DFD0:  62 79 74 65 2C 20 77 68 69 63 68 20 61 6C 6C 6F    byte, which allo
00DFE0:  77 73 20 75 73 20 74 6F 0D 0A 20 20 20 73 74 6F    ws us to..   sto
00DFF0:  72 65 20 6E 75 6D 62 65 72 73 20 62 69 67 67 65    re numbers bigge
00E000:  72 20 74 68 61 6E 20 32 35 35 2C 20 69 73 20 20    r than 255, is  
00E010:  70 6C 61 63 65 64 20 20 61 66 74 65 72 20 74 68    placed  after th
00E020:  65 20 66 69 72 73 74 20 62 79 74 65 20 69 6E 20    e first byte in 
00E030:  6D 65 6D 6F 72 79 2C 0D 0A 20 20 20 75 6E 6C 69    memory,..   unli
00E040:  6B 65 20 74 68 65 20 77 61 79 20 77 65 20 77 72    ke the way we wr
00E050:  69 74 65 20 64 65 63 69 6D 61 6C 20 6E 75 6D 62    ite decimal numb
00E060:  65 72 73 2C 20 77 68 65 72 65 20 74 68 65 20 6D    ers, where the m
00E070:  6F 72 65 20 73 69 67 6E 69 66 69 63 61 6E 74 20    ore significant 
00E080:  64 69 67 69 74 73 0D 0A 20 20 20 63 6F 6D 65 20    digits..   come 
00E090:  66 69 72 73 74 2E 0D 0A 20 20 20 20 20 41 6D 73    first...     Ams
00E0A0:  74 72 61 64 73 20 70 75 74 20 74 68 65 20 6D 6F    trads put the mo
00E0B0:  73 74 20 73 69 67 6E 69 66 69 63 61 6E 74 20 62    st significant b
00E0C0:  79 74 65 20 20 61 66 74 65 72 20 74 68 65 20 6C    yte  after the l
00E0D0:  65 61 73 74 20 73 69 67 6E 69 66 69 63 61 6E 74    east significant
00E0E0:  20 62 79 74 65 0D 0A 20 20 20 62 65 63 61 75 73     byte..   becaus
00E0F0:  65 20 74 68 61 74 20 69 73 20 68 6F 77 20 74 68    e that is how th
00E100:  20 20 74 68 65 20 6F 62 76 69 6F 75 73 20 77 61      the obvious wa
00E110:  79 20 20 77 6F 75 6C 64 20 20 62 65 20 20 74 6F    y  would  be  to
00E120:  20 20 73 74 6F 72 65 20 20 74 68 65 20 20 76 61      store  the  va
00E130:  6C 75 65 20 20 69 6E 20 20 61 20 70 61 72 74 69    lue  in  a parti
00E140:  63 75 6C 61 72 20 6D 65 6D 6F 72 79 0D 0A 20 20    cular memory..  
00E150:  20 6C 6F 63 61 74 69 6F 6E 20 77 68 69 63 68 20     location which 
00E160:  63 6F 75 6C 64 20 74 68 65 6E 20 62 65 20 50 45    could then be PE
00E170:  45 4B 65 64 20 62 79 20 42 41 53 49 43 2E 0D 0A    EKed by BASIC...
00E180:  20 20 20 20 20 46 69 67 75 72 65 20 32 2E 37 20         Figure 2.7 
00E190:  67 69 76 65 73 20 61 20 20 6D 6F 72 65 20 20 66    gives a  more  f
00E1A0:  6C 65 78 69 62 6C 65 20 20 6D 65 74 68 6F 64 2E    lexible  method.
00E1B0:  20 20 20 3C 3C 54 68 65 20 20 6C 69 73 74 69 6E       <<The  listin
00E1C0:  67 20 69 73 20 73 61 76 65 64 20 61 73 0D 0A 20    g is saved as.. 
00E1D0:  20 20 46 49 47 32 37 2E 3E 3E 20 20 54 68 65 20      FIG27.>>  The 
00E1E0:  6D 61 63 68 69 6E 65 20 20 63 6F 64 65 20 20 69    machine  code  i
00E1F0:  73 20 20 63 61 6C 6C 65 64 20 20 77 69 74 68 20    s  called  with 
00E200:  20 43 41 4C 4C 20 20 26 39 30 30 30 2C 40 63 25     CALL  &9000,@c%
00E210:  2E 20 20 20 63 25 20 69 73 20 61 6E 0D 0A 20 20    .   c% is an..  
00E220:  20 69 6E 74 65 67 65 72 20 76 61 72 69 61 62 6C     integer variabl
00E230:  65 2E 20 20 54 68 65 20 22 40 22 20 20 69 6E 20    e.  The "@"  in 
00E240:  20 66 72 6F 6E 74 20 20 6D 65 61 6E 73 20 20 74     front  means  t
00E250:  68 61 74 20 20 69 6E 73 74 65 61 64 20 6F 66 20    hat  instead of 
00E260:  70 61 73 73 69 6E 67 20 74 68 65 0D 0A 20 20 20    passing the..   
00E270:  76 61 6C 75 65 20 6F 66 20 63 25 2C 20 77 65 20    value of c%, we 
00E280:  61 72 65 20 70 61 73 73 69 6E 67 20 74 68 65 20    are passing the 
00E290:  20 61 64 64 72 65 73 73 20 20 69 6E 20 6D 65 6D     address  in mem
00E2A0:  6F 72 79 20 61 74 20 77 68 69 63 68 20 69 74 20    ory at which it 
00E2B0:  69 73 20 73 74 6F 72 65 64 2E 0D 0A 20 20 20 54    is stored...   T
00E2C0:  68 65 20 69 64 65 61 20 69 73 20 74 68 61 74 20    he idea is that 
00E2D0:  69 66 20 77 65 20 61 6C 74 65 72 20 20 74 68 65    if we alter  the
00E2E0:  20 20 63 6F 6E 74 65 6E 74 73 20 20 6F 66 20 74      contents  of t
00E2F0:  68 69 73 20 61 64 64 72 65 73 73 2C 20 77 65 20    his address, we 
00E300:  65 20 20 5A 38 30 20 20 70 72 6F 63 65 73 73 6F    e  Z80  processo
00E310:  72 20 20 63 6F 6E 74 72 6F 6C 6C 69 6E 67 20 6F    r  controlling o
00E320:  75 72 20 63 6F 6D 70 75 74 65 72 73 20 70 72 65    ur computers pre
00E330:  66 65 72 73 0D 0A 20 20 20 69 74 2E 20 20 54 68    fers..   it.  Th
00E340:  69 73 20 6D 65 74 68 6F 64 20 69 73 20 63 61 6C    is method is cal
00E350:  6C 65 64 20 20 22 4C 69 74 74 6C 65 20 20 45 6E    led  "Little  En
00E360:  64 69 61 6E 22 20 61 72 72 61 6E 67 65 6D 65 6E    dian" arrangemen
00E370:  74 2C 20 74 6F 20 62 65 20 63 6F 6E 74 72 61 73    t, to be contras
00E380:  74 65 64 0D 0A 20 20 20 77 69 74 68 20 22 42 69    ted..   with "Bi
00E390:  67 20 45 6E 64 69 61 6E 22 2C 20 61 73 20 75 73    g Endian", as us
00E3A0:  65 64 20 62 79 20 20 74 68 65 20 20 41 70 70 6C    ed by  the  Appl
00E3B0:  65 20 4D 61 63 69 6E 74 6F 73 68 2C 20 61 6D 6F    e Macintosh, amo
00E3C0:  6E 67 20 6F 74 68 65 72 73 2C 20 61 6E 64 20 6E    ng others, and n
00E3D0:  6F 74 0D 0A 20 20 20 74 6F 20 62 65 20 63 6F 6E    ot..   to be con
00E3E0:  66 75 73 65 64 20 77 69 74 68 20 61 6E 79 74 68    fused with anyth
00E3F0:  69 6E 67 20 74 6F 20 64 6F 20 77 69 74 68 20 62    ing to do with b
00E400:  6F 69 6C 65 64 20 65 67 67 73 2E 0D 0A 20 20 20    oiled eggs...   
00E410:  20 20 46 6F 72 20 6E 75 6D 62 65 72 73 20 73 6D      For numbers sm
00E420:  61 6C 6C 65 72 20 74 68 61 6E 20 32 35 36 2C 20    aller than 256, 
00E430:  74 68 65 20 73 65 63 6F 6E 64 20 62 79 74 65 20    the second byte 
00E440:  77 69 6C 6C 20 61 6C 77 61 79 73 20 62 65 20 7A    will always be z
00E450:  65 72 6F 2C 20 73 6F 20 61 73 0D 0A 20 20 20 77    ero, so as..   w
00E460:  65 20 61 72 65 20 72 65 74 75 72 6E 69 6E 67 20    e are returning 
00E470:  61 20 76 61 6C 75 65 20 62 65 74 77 65 65 6E 20    a value between 
00E480:  30 20 61 6E 64 20 32 35 35 2C 20 77 65 20 6E 65    0 and 255, we ne
00E490:  65 64 20 74 6F 20 73 65 74 20 74 68 65 20 73 65    ed to set the se
00E4A0:  63 6F 6E 64 20 62 79 74 65 0D 0A 20 20 20 74 6F    cond byte..   to
00E4B0:  20 7A 65 72 6F 20 6A 75 73 74 20 74 6F 20 6D 61     zero just to ma
00E4C0:  6B 65 20 73 75 72 65 20 20 77 65 20 20 6F 76 65    ke sure  we  ove
00E4D0:  72 77 72 69 74 65 20 61 6E 79 20 70 72 65 76 69    rwrite any previ
00E4E0:  6F 75 73 20 76 61 6C 75 65 2E 20 20 46 6F 72 20    ous value.  For 
00E4F0:  65 78 61 6D 70 6C 65 2C 0D 0A 20 20 20 69 66 20    example,..   if 
00E500:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
00E510:  0C 00 01 00 02 09 4E E5 0C 00 C9 02 00 00 00 02    ......N.........
00E520:  0C 00 C5 02 00 00 00 02 0C 00 C1 02 00 00 00 02    ................
00E530:  0C 00 C6 02 00 00 00 02 0C 00 C2 02 00 00 00 02    ................
00E540:  0C 00 C7 02 00 00 00 02 0C 00 C3 02 00 00 00 02    ................
00E550:  0C 00 C8 02 00 00 00 02 0C 00 C4 02 00 00 00 02    ................
00E560:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00E570:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00E580:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00E590:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00E5A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00E5B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00E5C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00E5D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00E5E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00E5F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00E600:  20 62 79 74 65 20 69 73 20 74 68 65 20 6C 65 6E     byte is the len
00E610:  67 74 68 20 6F 66 20 20 74 68 65 20 73 74 72 69    gth of  the stri
00E620:  6E 67 2C 20 61 6E 64 20 74 68 65 20 6E 65 78 74    ng, and the next
00E630:  20 74 77 6F 20 62 79 74 65 73 0D 0A 20 20 20 67     two bytes..   g
00E640:  69 76 65 20 74 68 65 20 61 64 64 72 65 73 73 20    ive the address 
00E650:  61 74 20 20 77 68 69 63 68 20 20 74 68 65 20 20    at  which  the  
00E660:  61 63 74 75 61 6C 20 20 63 68 61 72 61 63 74 65    actual  characte
00E670:  72 73 20 20 69 6E 20 20 74 68 65 20 73 74 72 69    rs  in  the stri
00E680:  6E 67 20 63 61 6E 20 62 65 0D 0A 20 20 20 66 6F    ng can be..   fo
00E690:  75 6E 64 2E 0D 0A 20 20 20 20 20 57 68 65 6E 20    und...     When 
00E6A0:  70 61 73 73 69 6E 67 20 74 68 65 20 61 64 64 72    passing the addr
00E6B0:  65 73 73 20 6F 66 20 61 20 20 73 74 72 69 6E 67    ess of a  string
00E6C0:  20 20 76 61 72 69 61 62 6C 65 20 74 6F 20 6D 61      variable to ma
00E6D0:  63 68 69 6E 65 20 63 6F 64 65 2C 20 77 65 20 6D    chine code, we m
00E6E0:  75 73 74 0D 0A 20 20 20 6D 61 6B 65 20 73 75 72    ust..   make sur
00E6F0:  65 20 74 68 61 74 20 74 68 65 20 76 61 72 69 61    e that the varia
00E700:  62 6C 65 20 61 6C 72 65 61 64 79 20 65 78 69 73    ble already exis
00E710:  74 73 2C 20 20 61 6E 64 20 74 68 61 74 20 69 74    ts,  and that it
00E720:  20 69 73 20 6C 6F 6E 67 20 65 6E 6F 75 67 68 20     is long enough 
00E730:  74 6F 0D 0A 20 20 20 68 6F 6C 64 20 77 68 61 74    to..   hold what
00E740:  20 77 65 20 77 61 6E 74 20 74 68 65 20 6D 61 63     we want the mac
00E750:  68 69 6E 65 20 63 6F 64 65 20 74 6F 20 73 74 6F    hine code to sto
00E760:  72 65 20 69 6E 20 69 74 2E 20 20 4C 69 6E 65 20    re in it.  Line 
00E770:  31 32 30 20 74 61 6B 65 73 20 63 61 72 65 20 6F    120 takes care o
00E780:  66 0D 0A 20 20 20 74 68 69 73 20 62 79 20 73 65    f..   this by se
00E790:  74 74 69 6E 67 20 61 24 20 74 6F 20 62 65 20 61    tting a$ to be a
00E7A0:  20 73 70 61 63 65 2E 0D 0A 20 20 20 20 20 54 68     space...     Th
00E7B0:  65 20 6D 61 63 68 69 6E 65 20 63 6F 64 65 20 66    e machine code f
00E7C0:  69 72 73 74 20 6C 6F 61 64 73 20 74 68 65 20 20    irst loads the  
00E7D0:  61 64 64 72 65 73 73 20 6F 66 20 74 68 65 20 73    address of the s
00E7E0:  74 72 69 6E 67 20 64 65 73 63 72 69 70 74 6F 72    tring descriptor
00E7F0:  20 62 6C 6F 63 6B 0D 0A 20 20 20 69 6E 74 6F 20     block..   into 
00E800:  31 33 30 20 50 52 49 4E 54 3A 50 52 49 4E 54 22    130 PRINT:PRINT"
00E810:  54 68 65 20 6C 65 74 74 65 72 20 61 74 20 74 68    The letter at th
00E820:  65 20 74 6F 70 20 6C 65 66 74 20 6F 66 20 74 68    e top left of th
00E830:  65 20 73 63 72 65 65 6E 20 69 73 20 61 20 22 3B    e screen is a ";
00E840:  43 48 52 24 28 63 25 29 0D 0A 20 20 20 31 39 30    CHR$(c%)..   190
00E850:  20 44 41 54 41 20 44 44 2C 36 36 2C 30 31 2C 44     DATA DD,66,01,D
00E860:  44 2C 36 45 2C 30 30 2C 43 44 2C 36 30 2C 42 42    D,6E,00,CD,60,BB
00E870:  2C 37 37 2C 32 33 2C 33 36 2C 30 30 2C 43 39 0D    ,77,23,36,00,C9.
00E880:  0A 0D 0A 20 20 20 44 44 20 36 36 20 30 31 20 20    ...   DD 66 01  
00E890:  20 20 20 20 4C 44 20 48 2C 28 49 58 2B 31 29 0D        LD H,(IX+1).
00E8A0:  0A 20 20 20 44 44 20 36 45 20 30 30 20 20 20 20    .   DD 6E 00    
00E8B0:  20 20 4C 44 20 4C 2C 28 49 58 2B 30 29 0D 0A 20      LD L,(IX+0).. 
00E8C0:  20 20 43 44 20 36 30 20 42 42 20 20 20 20 20 20      CD 60 BB      
00E8D0:  43 41 4C 4C 20 30 42 42 36 30 68 0D 0A 20 20 20    CALL 0BB60h..   
00E8E0:  37 37 20 20 20 20 20 20 20 20 20 20 20 20 4C 44    77            LD
00E8F0:  20 28 48 4C 29 2C 41 0D 0A 20 20 20 32 33 20 20     (HL),A..   23  
00E900:  20 20 20 20 20 20 20 20 20 20 49 4E 43 20 48 4C              INC HL
00E910:  0D 0A 20 20 20 33 36 20 30 30 20 20 20 20 20 20    ..   36 00      
00E920:  20 20 20 4C 44 20 28 48 4C 29 2C 30 0D 0A 20 20       LD (HL),0..  
00E930:  20 43 39 20 20 20 20 20 20 20 20 20 20 20 20 52     C9            R
00E940:  45 54 0D 0A 0D 0A 20 20 20 46 69 67 75 72 65 20    ET....   Figure 
00E950:  32 2E 37 0D 0A 0D 0A 0D 0A 0D 0A 20 20 20 31 30    2.7........   10
00E960:  30 20 4D 45 4D 4F 52 59 20 26 38 46 46 46 3A 61    0 MEMORY &8FFF:a
00E970:  3D 26 39 30 30 30 3A 46 4F 52 20 78 3D 30 20 54    =&9000:FOR x=0 T
00E980:  4F 20 31 34 3A 52 45 41 44 20 61 24 3A 50 4F 4B    O 14:READ a$:POK
00E990:  45 20 61 2B 78 2C 56 41 4C 28 22 26 22 2B 61 24    E a+x,VAL("&"+a$
00E9A0:  29 3A 4E 45 58 54 0D 0A 20 20 20 31 31 30 20 4D    ):NEXT..   110 M
00E9B0:  4F 44 45 20 32 3A 50 52 49 4E 54 22 53 69 6C 6C    ODE 2:PRINT"Sill
00E9C0:  79 20 73 74 72 69 6E 67 22 0D 0A 20 20 20 31 32    y string"..   12
00E9D0:  30 20 61 24 3D 22 20 22 3A 4C 4F 43 41 54 45 20    0 a$=" ":LOCATE 
00E9E0:  31 2C 31 3A 43 41 4C 4C 20 26 39 30 30 30 2C 40    1,1:CALL &9000,@
00E9F0:  61 24 0D 0A 20 20 20 31 33 30 20 50 52 49 4E 54    a$..   130 PRINT
00EA00:  75 6D 62 65 72 73 20 77 69 6C 6C 20 6C 6F 6F 6B    umbers will look
00EA10:  20 61 66 74 65 72 20 74 68 65 6D 73 65 6C 76 65     after themselve
00EA20:  73 2E 0D 0A 0D 0A 20 20 20 53 4D 41 4C 4C 20 42    s.....   SMALL B
00EA30:  55 54 20 49 4E 44 49 53 50 45 4E 53 41 42 4C 45    UT INDISPENSABLE
00EA40:  0D 0A 20 20 20 53 74 72 69 6E 67 20 76 61 72 69    ..   String vari
00EA50:  61 62 6C 65 73 20 61 72 65 20 73 74 6F 72 65 64    ables are stored
00EA60:  20 69 6E 20 61 20 76 65 72 79 20 64 69 66 66 65     in a very diffe
00EA70:  72 65 6E 74 20 77 61 79 20 66 72 6F 6D 20 69 6E    rent way from in
00EA80:  74 65 67 65 72 73 2E 20 20 49 66 20 79 6F 75 0D    tegers.  If you.
00EA90:  0A 20 20 20 68 61 76 65 20 61 20 73 74 72 69 6E    .   have a strin
00EAA0:  67 20 76 61 72 69 61 62 6C 65 20 61 24 2C 20 74    g variable a$, t
00EAB0:  68 65 6E 20 20 40 61 24 20 20 67 69 76 65 73 20    hen  @a$  gives 
00EAC0:  20 75 73 20 20 74 68 65 20 61 64 64 72 65 73 73     us  the address
00EAD0:  20 6F 66 20 74 68 65 20 73 74 72 69 6E 67 0D 0A     of the string..
00EAE0:  20 20 20 64 65 73 63 72 69 70 74 6F 72 20 62 6C       descriptor bl
00EAF0:  6F 63 6B 20 66 6F 72 20 61 24 2E 20 20 54 68 65    ock for a$.  The
00EB00:  20 73 74 72 69 6E 67 20 64 65 73 63 72 69 70 74     string descript
00EB10:  6F 72 20 62 6C 6F 63 6B 20 69 73 20 74 68 72 65    or block is thre
00EB20:  65 20 62 79 74 65 73 20 6C 6F 6E 67 2C 0D 0A 20    e bytes long,.. 
00EB30:  20 20 61 6E 64 20 74 68 65 20 66 69 72 73 74 20      and the first 
00EB40:  62 79 74 65 20 69 73 20 74 68 65 20 6C 65 6E 67    byte is the leng
00EB50:  74 68 20 6F 66 20 61 24 2E 20 20 54 72 79 20 69    th of a$.  Try i
00EB60:  74 20 6F 75 74 3A 0D 0A 0D 0A 20 20 20 20 20 20    t out:....      
00EB70:  20 20 20 61 24 3D 22 48 65 6C 6C 6F 22 0D 0A 20       a$="Hello".. 
00EB80:  20 20 20 20 20 20 20 20 50 52 49 4E 54 20 50 45            PRINT PE
00EB90:  45 4B 28 40 61 24 29 0D 0A 0D 0A 20 20 20 54 68    EK(@a$)....   Th
00EBA0:  65 20 6E 65 78 74 20 74 77 6F 20 62 79 74 65 73    e next two bytes
00EBB0:  20 67 69 76 65 20 75 73 20 74 68 65 20 20 61 64     give us the  ad
00EBC0:  64 72 65 73 73 20 20 61 74 20 77 68 69 63 68 20    dress  at which 
00EBD0:  74 68 65 20 61 63 74 75 61 6C 20 63 68 61 72 61    the actual chara
00EBE0:  63 74 65 72 73 20 69 6E 0D 0A 20 20 20 74 68 65    cters in..   the
00EBF0:  20 73 74 72 69 6E 67 20 61 72 65 20 73 74 6F 72     string are stor
00EC00:  3A 50 52 49 4E 54 22 54 68 65 20 6C 65 74 74 65    :PRINT"The lette
00EC10:  72 20 61 74 20 74 68 65 20 74 6F 70 20 6C 65 66    r at the top lef
00EC20:  74 20 6F 66 20 74 68 65 20 73 63 72 65 65 6E 20    t of the screen 
00EC30:  69 73 20 22 3B 61 24 0D 0A 20 20 20 31 39 30 20    is ";a$..   190 
00EC40:  44 41 54 41 20 44 44 2C 36 36 2C 30 31 2C 44 44    DATA DD,66,01,DD
00EC50:  2C 36 45 2C 30 30 2C 32 33 2C 35 45 2C 32 33 2C    ,6E,00,23,5E,23,
00EC60:  35 36 2C 43 44 2C 36 30 2C 42 42 2C 31 32 2C 43    56,CD,60,BB,12,C
00EC70:  39 0D 0A 0D 0A 20 20 20 44 44 20 36 36 20 30 31    9....   DD 66 01
00EC80:  20 20 20 20 20 20 4C 44 20 48 2C 28 49 58 2B 31          LD H,(IX+1
00EC90:  29 0D 0A 20 20 20 44 44 20 36 45 20 30 30 20 20    )..   DD 6E 00  
00ECA0:  20 20 20 20 4C 44 20 4C 2C 28 49 58 2B 30 29 0D        LD L,(IX+0).
00ECB0:  0A 20 20 20 32 33 20 20 20 20 20 20 20 20 20 20    .   23          
00ECC0:  20 20 49 4E 43 20 48 4C 0D 0A 20 20 20 35 45 20      INC HL..   5E 
00ECD0:  20 20 20 20 20 20 20 20 20 20 20 4C 44 20 45 2C               LD E,
00ECE0:  28 48 4C 29 0D 0A 20 20 20 32 33 20 20 20 20 20    (HL)..   23     
00ECF0:  20 20 20 20 20 20 20 49 4E 43 20 48 4C 0D 0A 20           INC HL.. 
00ED00:  20 20 35 36 20 20 20 20 20 20 20 20 20 20 20 20      56            
00ED10:  4C 44 20 44 2C 28 48 4C 29 0D 0A 20 20 20 43 44    LD D,(HL)..   CD
00ED20:  20 36 30 20 42 42 20 20 20 20 20 20 43 41 4C 4C     60 BB      CALL
00ED30:  20 30 42 42 36 30 68 0D 0A 20 20 20 31 32 20 20     0BB60h..   12  
00ED40:  20 20 20 20 20 20 20 20 20 20 4C 44 20 28 44 45              LD (DE
00ED50:  29 2C 41 0D 0A 20 20 20 43 39 20 20 20 20 20 20    ),A..   C9      
00ED60:  20 20 20 20 20 20 52 45 54 0D 0A 0D 0A 20 20 20          RET....   
00ED70:  46 69 67 75 72 65 20 32 2E 37 31 0D 0A 1A 72 65    Figure 2.71...re
00ED80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00ED90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00EDA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00EDB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00EDC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00EDD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00EDE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00EDF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
00EE00:  65 64 2E 20 20 54 68 65 20 66 6F 6C 6C 6F 77 69    ed.  The followi
00EE10:  6E 67 20 20 63 6F 6D 6D 61 6E 64 73 20 20 70 75    ng  commands  pu
00EE20:  74 20 74 68 69 73 20 61 64 64 72 65 73 73 20 69    t this address i
00EE30:  6E 74 6F 20 74 68 65 0D 0A 20 20 20 76 61 72 69    nto the..   vari
00EE40:  61 62 6C 65 20 61 64 64 72 2C 20 61 6E 64 20 74    able addr, and t
00EE50:  68 65 6E 20 70 72 69 6E 74 20 6F 75 74 20 74 68    hen print out th
00EE60:  65 20 63 68 61 72 61 63 74 65 72 73 20 69 6E 20    e characters in 
00EE70:  74 68 65 20 73 74 72 69 6E 67 3A 0D 0A 0D 0A 20    the string:.... 
00EE80:  20 20 20 20 20 20 20 20 6C 65 6E 67 74 68 3D 50            length=P
00EE90:  45 45 4B 28 40 61 24 29 0D 0A 20 20 20 20 20 20    EEK(@a$)..      
00EEA0:  20 20 20 61 64 64 72 3D 50 45 45 4B 28 40 61 24       addr=PEEK(@a$
00EEB0:  2B 31 29 2B 32 35 36 2A 50 45 45 4B 28 40 61 24    +1)+256*PEEK(@a$
00EEC0:  2B 32 29 0D 0A 20 20 20 20 20 20 20 20 20 46 4F    +2)..         FO
00EED0:  52 20 7A 3D 30 20 54 4F 20 6C 65 6E 67 74 68 2D    R z=0 TO length-
00EEE0:  31 3A 50 52 49 4E 54 20 43 48 52 24 28 50 45 45    1:PRINT CHR$(PEE
00EEF0:  4B 28 61 64 64 72 2B 7A 29 29 3B 3A 4E 45 58 54    K(addr+z));:NEXT
00EF00:  0D 0A 0D 0A 20 20 20 49 74 20 69 73 20 62 61 73    ....   It is bas
00EF10:  69 63 61 6C 6C 79 20 61 20 76 65 72 79 20 73 6C    ically a very sl
00EF20:  6F 77 20 77 61 79 20 6F 66 20 64 6F 69 6E 67 20    ow way of doing 
00EF30:  50 52 49 4E 54 20 61 24 2E 0D 0A 20 20 20 20 20    PRINT a$...     
00EF40:  46 69 67 75 72 65 20 32 2E 37 31 20 3C 3C 73 61    Figure 2.71 <<sa
00EF50:  76 65 64 20 61 73 20 46 49 47 32 37 31 20 20 6F    ved as FIG271  o
00EF60:  6E 20 20 74 68 65 20 20 64 69 73 63 3E 3E 20 20    n  the  disc>>  
00EF70:  70 75 74 73 20 74 68 69 73 20 6B 6E 6F 77 6C 65    puts this knowle
00EF80:  64 67 65 20 69 6E 74 6F 0D 0A 20 20 20 70 72 61    dge into..   pra
00EF90:  63 74 69 63 65 20 77 69 74 68 20 61 6E 6F 74 68    ctice with anoth
00EFA0:  65 72 20 6C 69 74 74 6C 65 20 65 78 61 6D 70 6C    er little exampl
00EFB0:  65 20 74 6F 20 72 65 61 64 20 61 20 63 68 61 72    e to read a char
00EFC0:  61 63 74 65 72 20 6F 66 66 20 74 68 65 20 73 63    acter off the sc
00EFD0:  72 65 65 6E 2E 0D 0A 0D 0A 20 20 20 20 20 54 68    reen.....     Th
00EFE0:  65 72 65 20 69 73 20 71 75 69 74 65 20 61 20 62    ere is quite a b
00EFF0:  69 74 20 20 20 6D 6F 72 65 20 20 74 6F 20 20 73    it   more  to  s
00F000:  23 50 72 6F 67 72 61 6D 6D 65 72 73 27 20 50 61    #Programmers' Pa
00F010:  74 63 68 20 34 20 2D 20 57 41 43 43 49 20 31 31    tch 4 - WACCI 11
00F020:  33 2C 20 4A 75 6E 65 20 31 39 39 37 2C 20 70 2E    3, June 1997, p.
00F030:  20 31 31 2D 31 32 0D 0A 20 20 20 50 52 4F 47 52     11-12..   PROGR
00F040:  41 4D 4D 45 52 53 27 20 50 41 54 43 48 20 34 0D    AMMERS' PATCH 4.
00F050:  0A 20 20 20 62 79 20 4D 61 74 74 68 65 77 20 26    .   by Matthew &
00F060:  20 53 74 65 70 68 65 6E 20 50 68 69 6C 6C 69 70     Stephen Phillip
00F070:  73 0D 0A 0D 0A 20 20 20 57 65 20 66 69 6E 64 20    s....   We find 
00F080:  66 69 6E 65 6C 79 20 67 72 61 74 65 64 20 20 50    finely grated  P
00F090:  61 72 6D 65 73 61 6E 20 20 63 68 65 65 73 65 20    armesan  cheese 
00F0A0:  20 73 70 72 69 6E 6B 6C 65 64 20 20 67 65 6E 65     sprinkled  gene
00F0B0:  72 6F 75 73 6C 79 20 6F 76 65 72 20 61 20 67 6F    rously over a go
00F0C0:  6F 64 0D 0A 20 20 20 70 6C 61 74 65 66 75 6C 20    od..   plateful 
00F0D0:  6F 66 20 73 70 61 67 68 65 74 74 69 20 70 72 6F    of spaghetti pro
00F0E0:  64 75 63 65 73 20 61 20 20 70 6C 61 69 6E 2C 20    duces a  plain, 
00F0F0:  20 6E 75 74 72 69 74 69 6F 75 73 2C 20 62 75 74     nutritious, but
00F100:  20 73 74 72 69 6E 67 79 20 6D 65 61 6C 2E 20 20     stringy meal.  
00F110:  41 0D 0A 20 20 20 70 6F 70 75 6C 61 72 20 61 6C    A..   popular al
00F120:  74 65 72 6E 61 74 69 76 65 20 66 72 6F 6D 20 74    ternative from t
00F130:  68 65 20 4F 72 69 65 6E 74 20 69 73 20 65 67 67    he Orient is egg
00F140:  20 6E 6F 6F 64 6C 65 73 2C 20 62 75 74 20 77 65     noodles, but we
00F150:  20 77 6F 75 6C 64 20 72 65 63 6F 6D 6D 65 6E 64     would recommend
00F160:  0D 0A 20 20 20 74 68 65 20 66 6F 6C 6C 6F 77 69    ..   the followi
00F170:  6E 67 20 61 72 74 69 63 6C 65 2C 20 77 68 69 63    ng article, whic
00F180:  68 20 20 69 73 20 20 65 71 75 61 6C 6C 79 20 20    h  is  equally  
00F190:  73 74 72 69 6E 67 79 20 20 61 6E 64 20 72 65 71    stringy  and req
00F1A0:  75 69 72 65 73 20 70 6C 65 6E 74 79 20 6F 66 0D    uires plenty of.
00F1B0:  0A 20 20 20 62 6C 61 63 6B 20 70 65 70 70 65 72    .   black pepper
00F1C0:  2E 0D 0A 0D 0A 20 20 20 53 54 52 49 4E 47 49 4E    .....   STRINGIN
00F1D0:  47 20 41 4C 4F 4E 47 0D 0A 20 20 20 4C 61 73 74    G ALONG..   Last
00F1E0:  20 6D 6F 6E 74 68 20 77 65 20 66 69 6E 69 73 68     month we finish
00F1F0:  65 64 20 6F 66 66 20 77 69 74 68 20 61 6E 20 65    ed off with an e
00F200:  74 72 69 6E 67 20 20 68 61 6E 64 6C 69 6E 67 20    tring  handling 
00F210:  20 74 68 61 6E 20 79 6F 75 20 6D 69 67 68 74 20     than you might 
00F220:  74 68 69 6E 6B 2E 0D 0A 20 20 20 41 66 74 65 72    think...   After
00F230:  20 79 6F 75 20 68 61 76 65 20 72 75 6E 20 74 68     you have run th
00F240:  65 20 61 62 6F 76 65 20 70 72 6F 67 72 61 6D 2C    e above program,
00F250:  20 6C 69 73 74 20 69 74 20 61 67 61 69 6E 2C 20     list it again, 
00F260:  61 6E 64 20 68 61 76 65 20 61 20 63 6C 6F 73 65    and have a close
00F270:  20 6C 6F 6F 6B 0D 0A 20 20 20 61 74 20 6C 69 6E     look..   at lin
00F280:  65 20 31 32 30 2E 20 20 41 6E 20 69 6E 74 65 72    e 120.  An inter
00F290:  65 73 74 69 6E 67 20 65 66 66 65 63 74 2C 20 69    esting effect, i
00F2A0:  73 6E 27 74 20 69 74 3F 0D 0A 20 20 20 20 20 4E    sn't it?..     N
00F2B0:  65 78 74 20 6D 6F 6E 74 68 20 77 65 20 77 69 6C    ext month we wil
00F2C0:  6C 20 72 75 6E 20 20 6F 76 65 72 20 20 74 68 65    l run  over  the
00F2D0:  20 20 6D 61 69 6E 20 20 70 6F 69 6E 74 73 20 20      main  points  
00F2E0:  6F 66 20 20 68 6F 77 20 74 6F 20 68 61 6E 64 6C    of  how to handl
00F2F0:  65 20 42 41 53 49 43 0D 0A 20 20 20 73 74 72 69    e BASIC..   stri
00F300:  6E 67 73 20 69 6E 20 6D 61 63 68 69 6E 65 20 63    ngs in machine c
00F310:  6F 64 65 2C 20 61 6E 64 20 67 6F 20 6F 76 65 72    ode, and go over
00F320:  20 20 74 68 65 20 20 6D 61 63 68 69 6E 65 20 63      the  machine c
00F330:  6F 64 65 20 66 6F 72 20 6F 75 72 20 64 69 73 63    ode for our disc
00F340:  20 6D 65 6E 75 2E 0D 0A 20 20 20 49 6E 20 74 68     menu...   In th
00F350:  65 20 6D 65 61 6E 74 69 6D 65 2C 20 68 61 76 65    e meantime, have
00F360:  20 66 75 6E 20 70 6C 61 79 69 6E 67 20 20 61 72     fun playing  ar
00F370:  6F 75 6E 64 20 20 77 69 74 68 20 20 73 6F 6D 65    ound  with  some
00F380:  20 6F 66 20 74 68 65 20 65 78 61 6D 70 6C 65 73     of the examples
00F390:  2C 20 61 6E 64 0D 0A 20 20 20 73 65 65 20 77 68    , and..   see wh
00F3A0:  61 74 20 65 6C 73 65 20 79 6F 75 20 63 61 6E 20    at else you can 
00F3B0:  63 6F 6D 65 20 75 70 20 77 69 74 68 2E 0D 0A 0D    come up with....
00F3C0:  0A 0D 0A 0D 0A 20 20 20 31 30 30 20 4D 45 4D 4F    .....   100 MEMO
00F3D0:  52 59 20 26 38 46 46 46 3A 61 3D 26 39 30 30 30    RY &8FFF:a=&9000
00F3E0:  3A 46 4F 52 20 78 3D 30 20 54 4F 20 31 30 3A 52    :FOR x=0 TO 10:R
00F3F0:  45 41 44 20 61 24 3A 50 4F 4B 45 20 61 2B 78 2C    EAD a$:POKE a+x,
00F400:  78 61 6D 70 6C 65 20 6F 66 20 63 68 61 6E 67 69    xample of changi
00F410:  6E 67 20 61 20 42 41 53 49 43 20 73 74 72 69 6E    ng a BASIC strin
00F420:  67 20 66 72 6F 6D 0D 0A 20 20 20 6D 61 63 68 69    g from..   machi
00F430:  6E 65 20 63 6F 64 65 2E 20 20 48 65 72 65 20 69    ne code.  Here i
00F440:  74 20 20 69 73 20 20 61 67 61 69 6E 20 20 69 6E    t  is  again  in
00F450:  20 20 46 69 67 75 72 65 20 20 32 2E 37 31 2E 20      Figure  2.71. 
00F460:  20 20 54 68 65 20 70 72 6F 67 72 61 6D 20 72 65      The program re
00F470:  61 64 73 20 61 0D 0A 20 20 20 63 68 61 72 61 63    ads a..   charac
00F480:  74 65 72 20 66 72 6F 6D 20 74 68 65 20 73 63 72    ter from the scr
00F490:  65 65 6E 20 20 61 6E 64 20 20 70 75 74 73 20 20    een  and  puts  
00F4A0:  69 74 20 20 69 6E 74 6F 20 20 74 68 65 20 20 73    it  into  the  s
00F4B0:  74 72 69 6E 67 20 6F 66 20 6F 75 72 20 63 68 6F    tring of our cho
00F4C0:  69 63 65 2E 0D 0A 20 20 20 3C 3C 54 68 65 20 42    ice...   <<The B
00F4D0:  41 53 49 43 20 76 65 72 73 69 6F 6E 20 69 73 20    ASIC version is 
00F4E0:  73 61 76 65 64 20 61 73 20 46 49 47 32 37 31 20    saved as FIG271 
00F4F0:  6F 6E 20 74 68 65 20 64 69 73 63 2E 3E 3E 0D 0A    on the disc.>>..
00F500:  20 20 20 20 20 4A 75 73 74 20 74 6F 20 72 65 63         Just to rec
00F510:  61 70 2C 20 75 6E 6C 69 6B 65 20 77 69 74 68 20    ap, unlike with 
00F520:  6E 75 6D 65 72 69 63 20 76 61 72 69 61 62 6C 65    numeric variable
00F530:  73 2C 20 77 68 65 72 65 20 40 61 25 20 67 69 76    s, where @a% giv
00F540:  65 73 20 74 68 65 20 61 63 74 75 61 6C 0D 0A 20    es the actual.. 
00F550:  20 20 61 64 64 72 65 73 73 20 77 68 65 72 65 20      address where 
00F560:  74 68 65 20 6E 75 6D 62 65 72 20 68 65 6C 64 20    the number held 
00F570:  69 6E 20 61 25 20 69 73 20 73 74 6F 72 65 64 2C    in a% is stored,
00F580:  20 66 6F 72 20 61 20 73 74 72 69 6E 67 2C 20 40     for a string, @
00F590:  61 24 20 67 69 76 65 73 20 74 68 65 0D 0A 20 20    a$ gives the..  
00F5A0:  20 61 64 64 72 65 73 73 20 6F 66 20 74 68 65 20     address of the 
00F5B0:  73 74 72 69 6E 67 20 64 65 73 63 72 69 70 74 6F    string descripto
00F5C0:  72 20 62 6C 6F 63 6B 20 66 6F 72 20 20 61 24 2E    r block for  a$.
00F5D0:  20 20 54 68 69 73 20 62 6C 6F 63 6B 20 69 73 20      This block is 
00F5E0:  74 68 72 65 65 20 62 79 74 65 73 0D 0A 20 20 20    three bytes..   
00F5F0:  6C 6F 6E 67 2E 20 20 54 68 65 20 66 69 72 73 74    long.  The first
00F600:  56 41 4C 28 22 26 22 2B 61 24 29 3A 4E 45 58 54    VAL("&"+a$):NEXT
00F610:  0D 0A 20 20 20 31 31 30 20 50 52 49 4E 54 22 45    ..   110 PRINT"E
00F620:  6E 74 65 72 20 6E 75 6D 62 65 72 20 28 31 20 74    nter number (1 t
00F630:  6F 20 32 35 35 29 22 3B 3A 49 4E 50 55 54 20 78    o 255)";:INPUT x
00F640:  0D 0A 20 20 20 31 32 30 20 43 41 4C 4C 20 26 39    ..   120 CALL &9
00F650:  30 30 30 2C 78 3A 50 52 49 4E 54 0D 0A 20 20 20    000,x:PRINT..   
00F660:  31 33 30 20 47 4F 54 4F 20 31 31 30 0D 0A 20 20    130 GOTO 110..  
00F670:  20 31 39 30 20 44 41 54 41 20 44 44 2C 34 36 2C     190 DATA DD,46,
00F680:  30 30 2C 33 45 2C 34 30 2C 43 44 2C 35 41 2C 42    00,3E,40,CD,5A,B
00F690:  42 2C 31 30 2C 46 42 2C 43 39 0D 0A 0D 0A 20 20    B,10,FB,C9....  
00F6A0:  20 44 44 20 34 36 20 30 30 20 20 20 20 20 20 20     DD 46 00       
00F6B0:  20 20 20 20 20 20 20 4C 44 20 42 2C 28 49 58 2B           LD B,(IX+
00F6C0:  30 29 0D 0A 20 20 20 33 45 20 34 30 20 20 20 20    0)..   3E 40    
00F6D0:  20 20 20 20 20 20 20 20 20 20 20 20 20 4C 44 20                 LD 
00F6E0:  41 2C 22 40 22 0D 0A 20 20 20 43 44 20 35 41 20    A,"@"..   CD 5A 
00F6F0:  42 42 20 20 20 20 20 20 20 20 20 20 20 20 20 20    BB              
00F700:  6C 6F 6F 70 3A 20 43 41 4C 4C 20 30 42 42 35 41    loop: CALL 0BB5A
00F710:  68 0D 0A 20 20 20 31 30 20 46 42 20 20 20 20 20    h..   10 FB     
00F720:  20 20 20 20 20 20 20 20 20 20 20 20 44 4A 4E 5A                DJNZ
00F730:  20 6C 6F 6F 70 0D 0A 20 20 20 43 39 20 20 20 20     loop..   C9    
00F740:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
00F750:  52 45 54 0D 0A 0D 0A 20 20 20 46 69 67 75 72 65    RET....   Figure
00F760:  20 32 0D 0A 0D 0A 0D 0A 0D 0A 20 20 20 31 30 30     2........   100
00F770:  20 4D 45 4D 4F 52 59 20 26 38 46 46 46 3A 61 3D     MEMORY &8FFF:a=
00F780:  26 39 30 30 30 3A 46 4F 52 20 78 3D 30 20 54 4F    &9000:FOR x=0 TO
00F790:  20 31 33 3A 52 45 41 44 20 61 24 3A 50 4F 4B 45     13:READ a$:POKE
00F7A0:  20 61 2B 78 2C 56 41 4C 28 22 26 22 2B 61 24 29     a+x,VAL("&"+a$)
00F7B0:  3A 4E 45 58 54 0D 0A 20 20 20 31 31 30 20 4D 4F    :NEXT..   110 MO
00F7C0:  44 45 20 32 3A 50 52 49 4E 54 22 42 75 6E 6E 79    DE 2:PRINT"Bunny
00F7D0:  6D 65 6E 22 0D 0A 20 20 20 31 32 30 20 63 25 3D    men"..   120 c%=
00F7E0:  30 3A 4C 4F 43 41 54 45 20 31 2C 31 3A 43 41 4C    0:LOCATE 1,1:CAL
00F7F0:  4C 20 26 39 30 30 30 2C 40 63 25 0D 0A 20 20 20    L &9000,@c%..   
00F800:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
00F810:  0D 00 01 00 02 09 4E E5 0D 00 C7 02 00 00 00 02    ......N.........
00F820:  0D 00 C3 02 00 00 00 02 0D 00 C8 02 00 00 00 02    ................
00F830:  0D 00 C4 02 00 00 00 02 0D 00 C9 02 00 00 00 02    ................
00F840:  0D 00 C5 02 00 00 00 02 0D 00 C1 02 00 00 00 02    ................
00F850:  0D 00 C6 02 00 00 00 02 0D 00 C2 02 00 00 00 02    ................
00F860:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00F870:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00F880:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00F890:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00F8A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00F8B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00F8C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00F8D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00F8E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00F8F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00F900:  70 72 6F 70 65 72 6C 79 2E 20 20 49 74 20 69 73    properly.  It is
00F910:  20 62 65 74 74 65 72 20 20 74 6F 20 20 73 74 69     better  to  sti
00F920:  63 6B 20 20 74 6F 20 61 6C 74 65 72 69 6E 67 20    ck  to altering 
00F930:  74 68 65 20 63 6F 6E 74 65 6E 74 73 20 6F 66 0D    the contents of.
00F940:  0A 20 20 20 74 68 65 20 73 74 72 69 6E 67 20 61    .   the string a
00F950:  6C 6F 6E 65 2E 0D 0A 0D 0A 20 20 20 50 4F 50 20    lone.....   POP 
00F960:  49 54 20 4F 4E 20 41 20 53 54 52 49 4E 47 0D 0A    IT ON A STRING..
00F970:  20 20 20 41 74 20 6C 6F 6E 67 20 6C 61 73 74 20       At long last 
00F980:  77 65 20 77 69 6C 6C 20 68 61 76 65 20 61 20 20    we will have a  
00F990:  67 6F 6F 64 20 20 6C 6F 6F 6B 20 20 61 74 20 74    good  look  at t
00F9A0:  68 65 20 6D 61 63 68 69 6E 65 20 63 6F 64 65 20    he machine code 
00F9B0:  66 72 6F 6D 20 74 68 65 20 64 69 73 63 0D 0A 20    from the disc.. 
00F9C0:  20 20 6D 65 6E 75 20 70 72 6F 67 72 61 6D 20 69      menu program i
00F9D0:  6E 20 74 68 65 20 46 65 62 72 75 61 72 79 20 20    n the February  
00F9E0:  61 72 74 69 63 6C 65 2E 20 20 20 54 68 65 20 20    article.   The  
00F9F0:  61 73 73 65 6D 62 6C 79 20 6C 69 73 74 69 6E 67    assembly listing
00FA00:  20 69 73 20 67 69 76 65 6E 20 69 6E 0D 0A 20 20     is given in..  
00FA10:  20 46 69 67 75 72 65 20 32 2E 37 31 38 2C 20 66     Figure 2.718, f
00FA20:  6F 6C 6C 6F 77 65 64 20 62 79 20 20 61 20 20 42    ollowed by  a  B
00FA30:  41 53 49 43 20 20 70 72 6F 67 72 61 6D 20 20 74    ASIC  program  t
00FA40:  6F 20 20 70 6F 6B 65 20 20 69 74 20 69 6E 74 6F    o  poke  it into
00FA50:  20 6D 65 6D 6F 72 79 20 61 6E 64 0D 0A 20 20 20     memory and..   
00FA60:  64 65 6D 6F 6E 73 74 72 61 74 65 20 69 74 73 20    demonstrate its 
00FA70:  75 73 65 2E 20 20 3C 3C 54 68 69 73 20 69 73 20    use.  <<This is 
00FA80:  73 61 76 65 64 20 61 73 20 46 49 47 32 37 31 38    saved as FIG2718
00FA90:  20 6F 6E 20 74 68 65 20 64 69 73 63 2E 3E 3E 0D     on the disc.>>.
00FAA0:  0A 20 20 20 20 20 4C 69 6E 65 20 32 30 20 73 68    .     Line 20 sh
00FAB0:  6F 77 73 20 68 6F 77 20 20 74 68 65 20 20 6D 61    ows how  the  ma
00FAC0:  63 68 69 6E 65 20 20 63 6F 64 65 20 20 63 61 6E    chine  code  can
00FAD0:  20 20 62 65 20 20 63 61 6C 6C 65 64 2E 20 20 20      be  called.   
00FAE0:  54 68 65 20 6A 6F 62 20 6F 66 20 74 68 65 0D 0A    The job of the..
00FAF0:  20 20 20 6D 61 63 68 69 6E 65 20 63 6F 64 65 20       machine code 
00FB00:  77 61 79 2C 20 61 6E 64 20 69 66 20 79 6F 75 72    way, and if your
00FB10:  20 70 72 6F 67 72 61 6D 20 64 65 66 69 6E 65 73     program defines
00FB20:  0D 0A 20 20 20 61 20 73 74 72 69 6E 67 20 62 79    ..   a string by
00FB30:  20 73 61 79 69 6E 67 20 61 24 3D 22 20 22 2C 20     saying a$=" ", 
00FB40:  69 74 20 73 65 74 73 20 20 75 70 20 74 68 65 20    it sets  up the 
00FB50:  73 74 72 69 6E 67 20 64 65 73 63 72 69 70 74 6F    string descripto
00FB60:  72 20 62 6C 6F 63 6B 20 73 6F 20 74 68 61 74 0D    r block so that.
00FB70:  0A 20 20 20 74 68 65 20 61 64 64 72 65 73 73 20    .   the address 
00FB80:  70 6F 69 6E 74 69 6E 67 20 74 6F 20 74 68 65 20    pointing to the 
00FB90:  20 63 68 61 72 61 63 74 65 72 73 20 20 6A 75 73     characters  jus
00FBA0:  74 20 20 70 6F 69 6E 74 73 20 20 62 61 63 6B 20    t  points  back 
00FBB0:  74 6F 20 74 68 65 20 6C 69 6E 65 20 69 6E 0D 0A    to the line in..
00FBC0:  20 20 20 42 41 53 49 43 20 77 68 65 72 65 20 79       BASIC where y
00FBD0:  6F 75 20 64 65 66 69 6E 65 64 20 74 68 65 20 73    ou defined the s
00FBE0:  74 72 69 6E 67 21 20 20 20 54 68 65 20 20 61 64    tring!   The  ad
00FBF0:  64 72 65 73 73 20 20 69 73 20 63 68 61 6E 67 65    dress  is change
00FC00:  64 20 74 6F 20 70 6F 69 6E 74 20 74 6F 0D 0A 20    d to point to.. 
00FC10:  20 20 73 6F 6D 65 77 68 65 72 65 20 69 6E 20 74      somewhere in t
00FC20:  68 65 20 73 74 72 69 6E 67 20 20 61 72 65 61 20    he string  area 
00FC30:  20 61 73 20 20 73 6F 6F 6E 20 20 61 73 20 20 79     as  soon  as  y
00FC40:  6F 75 20 20 61 6C 74 65 72 20 20 74 68 65 20 73    ou  alter  the s
00FC50:  74 72 69 6E 67 20 77 69 74 68 20 61 0D 0A 20 20    tring with a..  
00FC60:  20 63 6F 6D 6D 61 6E 64 20 6C 69 6B 65 20 61 24     command like a$
00FC70:  3D 61 24 2B 22 65 78 74 72 61 22 2C 20 6F 72 20    =a$+"extra", or 
00FC80:  73 69 6D 69 6C 61 72 20 63 6F 6E 73 74 72 75 63    similar construc
00FC90:  74 69 6F 6E 73 2E 20 20 42 65 66 6F 72 65 20 74    tions.  Before t
00FCA0:  68 69 73 20 68 61 70 70 65 6E 73 0D 0A 20 20 20    his happens..   
00FCB0:  74 68 6F 75 67 68 2C 20 61 6E 79 20 6D 61 63 68    though, any mach
00FCC0:  69 6E 65 20 63 6F 64 65 20 61 6C 74 65 72 69 6E    ine code alterin
00FCD0:  67 20 74 68 65 20 63 6F 6E 74 65 6E 74 73 20 6F    g the contents o
00FCE0:  66 20 61 24 20 77 6F 75 6C 64 20 61 6C 73 6F 20    f a$ would also 
00FCF0:  63 68 61 6E 67 65 20 74 68 65 0D 0A 20 20 20 42    change the..   B
00FD00:  69 73 20 20 74 6F 20 20 72 65 61 64 20 20 63 68    is  to  read  ch
00FD10:  61 72 61 63 74 65 72 73 20 20 66 72 6F 6D 20 20    aracters  from  
00FD20:  74 68 65 20 20 73 63 72 65 65 6E 2C 20 20 73 74    the  screen,  st
00FD30:  61 72 74 69 6E 67 20 61 74 20 74 68 65 0D 0A 20    arting at the.. 
00FD40:  20 20 63 75 72 72 65 6E 74 20 63 75 72 73 6F 72      current cursor
00FD50:  20 70 6F 73 69 74 69 6F 6E 2E 20 20 54 68 65 20     position.  The 
00FD60:  72 65 73 75 6C 74 73 20 61 72 65 20 70 6C 61 63    results are plac
00FD70:  65 64 20 69 6E 20 74 68 65 20 73 74 72 69 6E 67    ed in the string
00FD80:  20 70 61 73 73 65 64 20 66 72 6F 6D 0D 0A 20 20     passed from..  
00FD90:  20 42 41 53 49 43 2E 20 20 54 68 65 20 6D 61 63     BASIC.  The mac
00FDA0:  68 69 6E 65 20 63 6F 64 65 20 6C 6F 6F 6B 73 20    hine code looks 
00FDB0:  74 6F 20 20 73 65 65 20 20 68 6F 77 20 20 6C 6F    to  see  how  lo
00FDC0:  6E 67 20 74 68 69 73 20 73 74 72 69 6E 67 20 69    ng this string i
00FDD0:  73 2C 20 61 6E 64 20 74 68 65 6E 0D 0A 20 20 20    s, and then..   
00FDE0:  72 65 61 64 73 20 74 68 69 73 20 6D 61 6E 79 20    reads this many 
00FDF0:  63 68 61 72 61 63 74 65 72 73 20 66 72 6F 6D 20    characters from 
00FE00:  74 68 65 20 73 63 72 65 65 6E 20 61 6E 64 20 70    the screen and p
00FE10:  6C 61 63 65 73 20 74 68 65 6D 20 69 6E 20 74 68    laces them in th
00FE20:  65 20 73 74 72 69 6E 67 2E 0D 0A 20 20 20 20 20    e string...     
00FE30:  54 68 65 72 65 20 61 72 65 20 70 6C 65 6E 74 79    There are plenty
00FE40:  20 6F 66 20 63 6F 6D 6D 65 6E 74 73 20 69 6E 20     of comments in 
00FE50:  74 68 65 20 6C 69 73 74 69 6E 67 20 74 6F 20 6D    the listing to m
00FE60:  61 6B 65 20 69 74 20 65 61 73 69 65 72 20 74 6F    ake it easier to
00FE70:  20 66 6F 6C 6C 6F 77 2C 0D 0A 20 20 20 62 75 74     follow,..   but
00FE80:  20 74 68 65 20 74 68 72 65 65 20 66 69 72 6D 77     the three firmw
00FE90:  61 72 65 20 63 61 6C 6C 73 20 6E 65 65 64 20 6D    are calls need m
00FEA0:  6F 72 65 20 65 78 70 6C 61 6E 61 74 69 6F 6E 3A    ore explanation:
00FEB0:  0D 0A 0D 0A 20 20 20 26 42 42 37 38 20 20 54 58    ....   &BB78  TX
00FEC0:  54 20 47 45 54 20 43 55 52 53 4F 52 0D 0A 20 20    T GET CURSOR..  
00FED0:  20 20 20 20 20 20 20 20 52 65 74 75 72 6E 73 20            Returns 
00FEE0:  74 68 65 20 63 75 72 72 65 6E 74 20 20 74 65 78    the current  tex
00FEF0:  74 20 20 63 75 72 73 6F 72 20 20 70 6F 73 69 74    t  cursor  posit
00FF00:  41 53 49 43 20 70 72 6F 67 72 61 6D 20 6C 69 6E    ASIC program lin
00FF10:  65 20 61 73 20 61 20 73 69 64 65 20 65 66 66 65    e as a side effe
00FF20:  63 74 2E 0D 0A 20 20 20 20 20 54 68 69 73 20 64    ct...     This d
00FF30:  6F 65 73 20 6E 6F 74 20 72 65 61 6C 6C 79 20 6D    oes not really m
00FF40:  61 74 74 65 72 20 69 6E 20 6F 75 72 20 20 6C 69    atter in our  li
00FF50:  74 74 6C 65 20 65 78 61 6D 70 6C 65 2E 20 20 41    ttle example.  A
00FF60:  6C 6C 20 77 65 20 77 61 6E 74 65 64 20 74 6F 20    ll we wanted to 
00FF70:  64 6F 0D 0A 20 20 20 77 61 73 20 74 6F 20 6D 61    do..   was to ma
00FF80:  6B 65 20 73 75 72 65 20 74 68 61 74 20 61 24 20    ke sure that a$ 
00FF90:  77 61 73 20 20 6F 6E 65 20 20 63 68 61 72 61 63    was  one  charac
00FFA0:  74 65 72 20 6C 6F 6E 67 2C 20 61 6E 64 20 61 24    ter long, and a$
00FFB0:  3D 22 53 22 20 64 6F 65 73 20 6A 75 73 74 20 61    ="S" does just a
00FFC0:  73 0D 0A 20 20 20 77 65 6C 6C 20 61 73 20 61 24    s..   well as a$
00FFD0:  3D 22 20 22 2E 20 20 4F 66 74 65 6E 20 74 68 6F    =" ".  Often tho
00FFE0:  75 67 68 2C 20 20 69 74 20 20 63 6F 75 6C 64 20    ugh,  it  could 
00FFF0:  70 72 6F 64 75 63 65 20 75 6E 64 65 73 69 72 61    produce undesira
010000:  62 6C 65 20 63 6F 6E 73 65 71 75 65 6E 63 65 73    ble consequences
010010:  0D 0A 20 20 20 28 62 75 67 73 29 2E 20 20 54 68    ..   (bugs).  Th
010020:  65 20 6D 61 63 68 69 6E 65 20 63 6F 64 65 20 63    e machine code c
010030:  61 6E 6E 6F 74 20 74 65 6C 6C 20 77 68 65 74 68    annot tell wheth
010040:  65 72 20 74 68 65 20 63 68 61 72 61 63 74 65 72    er the character
010050:  73 20 6F 66 20 74 68 65 20 73 74 72 69 6E 67 0D    s of the string.
010060:  0A 20 20 20 61 72 65 20 70 61 72 74 20 6F 66 20    .   are part of 
010070:  74 68 65 20 42 41 53 49 43 20 70 72 6F 67 72 61    the BASIC progra
010080:  6D 20 6F 72 20 73 74 6F 72 65 64 20 20 69 6E 20    m or stored  in 
010090:  74 68 65 20 73 74 72 69 6E 67 20 61 72 65 61 2E    the string area.
0100A0:  20 20 57 68 61 74 20 77 65 20 6E 65 65 64 0D 0A      What we need..
0100B0:  20 20 20 69 73 20 61 20 77 61 79 20 6F 66 20 66       is a way of f
0100C0:  6F 72 63 69 6E 67 20 42 41 53 49 43 20 74 6F 20    orcing BASIC to 
0100D0:  20 73 74 6F 72 65 20 20 74 68 65 20 73 74 72 69     store  the stri
0100E0:  6E 67 20 69 6E 20 74 68 65 20 73 74 72 69 6E 67    ng in the string
0100F0:  20 61 72 65 61 2C 20 72 61 74 68 65 72 0D 0A 20     area, rather.. 
010100:  69 6F 6E 2E 20 20 20 54 68 65 20 20 78 2D 63 6F    ion.   The  x-co
010110:  6F 72 64 69 6E 61 74 65 20 69 73 0D 0A 20 20 20    ordinate is..   
010120:  20 20 20 20 20 20 20 72 65 74 75 72 6E 65 64 20           returned 
010130:  69 6E 20 48 2C 20 61 6E 64 20 72 65 67 69 73 74    in H, and regist
010140:  65 72 20 20 4C 20 20 68 6F 6C 64 73 20 20 74 68    er  L  holds  th
010150:  65 20 79 2D 63 6F 6F 72 64 69 6E 61 74 65 2E 20    e y-coordinate. 
010160:  20 41 6C 6C 20 6F 74 68 65 72 0D 0A 20 20 20 20     All other..    
010170:  20 20 20 20 20 20 72 65 67 69 73 74 65 72 73 20          registers 
010180:  61 70 61 72 74 20 66 72 6F 6D 20 41 46 20 61 72    apart from AF ar
010190:  65 20 70 72 65 73 65 72 76 65 64 2E 0D 0A 0D 0A    e preserved.....
0101A0:  20 20 20 26 42 42 36 30 20 20 54 58 54 20 52 44       &BB60  TXT RD
0101B0:  20 43 48 41 52 0D 0A 20 20 20 20 20 20 20 20 20     CHAR..         
0101C0:  20 4C 6F 6F 6B 73 20 61 74 20 74 68 65 20 63 75     Looks at the cu
0101D0:  72 72 65 6E 74 20 20 63 75 72 73 6F 72 20 20 70    rrent  cursor  p
0101E0:  6F 73 69 74 69 6F 6E 20 20 74 6F 20 20 73 65 65    osition  to  see
0101F0:  20 20 69 66 20 20 61 20 63 68 61 72 61 63 74 65      if  a characte
010200:  72 20 69 73 0D 0A 20 20 20 20 20 20 20 20 20 20    r is..          
010210:  70 72 65 73 65 6E 74 20 61 6E 64 20 69 64 65 6E    present and iden
010220:  74 69 66 69 61 62 6C 65 2E 20 20 54 68 65 20 70    tifiable.  The p
010230:  65 6E 20 61 6E 64 20 70 61 70 65 72 20 74 68 61    en and paper tha
010240:  74 20 74 68 65 20 63 68 61 72 61 63 74 65 72 20    t the character 
010250:  77 61 73 0D 0A 20 20 20 20 20 20 20 20 20 20 70    was..          p
010260:  72 69 6E 74 65 64 20 69 6E 20 68 61 76 65 20 74    rinted in have t
010270:  6F 20 62 65 20 74 68 65 20 73 61 6D 65 20 61 73    o be the same as
010280:  20 20 74 68 65 20 63 75 72 72 65 6E 74 20 70 61      the current pa
010290:  70 65 72 20 61 6E 64 20 70 65 6E 20 66 6F 72 20    per and pen for 
0102A0:  69 74 0D 0A 20 20 20 20 20 20 20 20 20 20 74 6F    it..          to
0102B0:  20 62 65 20 72 65 63 6F 67 6E 69 7A 65 64 2E 20     be recognized. 
0102C0:  20 49 66 20 74 68 65 72 65 20 20 69 73 20 20 61     If there  is  a
0102D0:  20 20 63 68 61 72 61 63 74 65 72 20 74 68 65 72      character ther
0102E0:  65 2C 20 43 61 72 72 79 20 69 73 20 74 72 75 65    e, Carry is true
0102F0:  2C 0D 0A 20 20 20 20 20 20 20 20 20 20 61 6E 64    ,..          and
010300:  20 20 74 68 61 6E 20 70 6F 69 6E 74 69 6E 67 20      than pointing 
010310:  62 61 63 6B 20 74 6F 20 74 68 65 20 42 41 53 49    back to the BASI
010320:  43 20 70 72 6F 67 72 61 6D 2E 0D 0A 20 20 20 20    C program...    
010330:  20 49 66 20 79 6F 75 20 6A 75 73 74 20 77 61 6E     If you just wan
010340:  74 20 20 74 6F 20 20 64 65 66 69 6E 65 20 20 61    t  to  define  a
010350:  20 20 73 74 72 69 6E 67 20 20 6F 66 20 20 61 20      string  of  a 
010360:  20 63 65 72 74 61 69 6E 20 20 6C 65 6E 67 74 68     certain  length
010370:  2C 20 73 61 79 20 74 65 6E 0D 0A 20 20 20 6C 65    , say ten..   le
010380:  74 74 65 72 73 2C 20 6A 75 73 74 20 75 73 65 3A    tters, just use:
010390:  0D 0A 0D 0A 20 20 20 20 20 31 30 20 61 24 3D 53    ....     10 a$=S
0103A0:  50 41 43 45 24 28 31 30 29 0D 0A 0D 0A 20 20 20    PACE$(10)....   
0103B0:  49 66 20 79 6F 75 20 77 61 6E 74 65 64 20 69 74    If you wanted it
0103C0:  20 74 6F 20 63 6F 6E 74 61 69 6E 20 70 61 72 74     to contain part
0103D0:  69 63 75 6C 61 72 20 63 68 61 72 61 63 74 65 72    icular character
0103E0:  73 2C 20 74 68 65 6E 0D 0A 0D 0A 20 20 20 20 20    s, then....     
0103F0:  31 30 20 61 24 3D 22 22 2B 22 54 68 69 73 20 73    10 a$=""+"This s
010400:  74 72 69 6E 67 22 0D 0A 0D 0A 20 20 20 64 6F 65    tring"....   doe
010410:  73 20 74 68 65 20 74 72 69 63 6B 20 71 75 69 74    s the trick quit
010420:  65 20 6E 69 63 65 6C 79 2E 20 20 42 41 53 49 43    e nicely.  BASIC
010430:  20 20 64 6F 65 73 6E 27 74 20 20 73 70 6F 74 20      doesn't  spot 
010440:  74 68 61 74 20 74 68 65 20 66 69 6E 61 6C 20 76    that the final v
010450:  61 6C 75 65 20 6F 66 0D 0A 20 20 20 61 24 20 69    alue of..   a$ i
010460:  73 20 63 6F 6E 74 61 69 6E 65 64 20 69 6E 20 74    s contained in t
010470:  68 61 74 20 20 6C 69 6E 65 2C 20 20 61 6E 64 20    hat  line,  and 
010480:  20 6A 75 73 74 20 20 73 68 6F 76 65 73 20 20 74     just  shoves  t
010490:  68 65 20 72 65 73 75 6C 74 20 6F 66 66 20 69 6E    he result off in
0104A0:  74 6F 20 74 68 65 0D 0A 20 20 20 73 74 72 69 6E    to the..   strin
0104B0:  67 20 61 72 65 61 20 77 69 74 68 6F 75 74 20 66    g area without f
0104C0:  75 72 74 68 65 72 20 61 64 6F 2E 0D 0A 0D 0A 20    urther ado..... 
0104D0:  20 20 48 4F 57 20 4C 4F 4E 47 20 49 53 20 41 20      HOW LONG IS A 
0104E0:  50 49 45 43 45 20 4F 46 20 53 54 52 49 4E 47 3F    PIECE OF STRING?
0104F0:  0D 0A 20 20 20 4D 61 63 68 69 6E 65 20 63 6F 64    ..   Machine cod
010500:  48 4C 2C 20 74 68 65 6E 20 74 68 65 20 61 64 64    HL, then the add
010510:  72 65 73 73 20 6F 66 20 20 74 68 65 20 20 73 74    ress of  the  st
010520:  72 69 6E 67 20 20 69 74 73 65 6C 66 20 20 69 73    ring  itself  is
010530:  20 6C 6F 61 64 65 64 20 69 6E 74 6F 20 44 45 2E     loaded into DE.
010540:  20 20 54 68 65 0D 0A 20 20 20 63 68 61 72 61 63      The..   charac
010550:  74 65 72 20 72 65 74 75 72 6E 65 64 20 69 6E 20    ter returned in 
010560:  72 65 67 69 73 74 65 72 20 41 20 62 79 20 74 68    register A by th
010570:  65 20 66 69 72 6D 77 61 72 65 20 63 61 6C 6C 20    e firmware call 
010580:  69 73 20 74 68 65 6E 20 70 75 74 20 69 6E 74 6F    is then put into
010590:  20 74 68 65 0D 0A 20 20 20 73 74 61 72 74 20 6F     the..   start o
0105A0:  66 20 74 68 65 20 73 74 72 69 6E 67 2E 20 20 49    f the string.  I
0105B0:  74 20 77 6F 75 6C 64 20 20 68 61 76 65 20 20 62    t would  have  b
0105C0:  65 65 6E 20 20 6D 6F 72 65 20 72 65 73 70 6F 6E    een  more respon
0105D0:  73 69 62 6C 65 20 74 6F 20 63 68 65 63 6B 20 74    sible to check t
0105E0:  68 61 74 0D 0A 20 20 20 74 68 65 20 73 74 72 69    hat..   the stri
0105F0:  6E 67 20 77 61 73 20 74 68 65 20 72 69 67 68 74    ng was the right
010600:  20 6C 65 6E 67 74 68 20 20 62 65 66 6F 72 65 20     length  before 
010610:  20 61 6C 74 65 72 69 6E 67 20 20 69 74 2C 20 62     altering  it, b
010620:  75 74 20 74 68 61 74 20 77 6F 75 6C 64 20 6D 61    ut that would ma
010630:  6B 65 0D 0A 20 20 20 66 6F 72 20 61 20 72 61 74    ke..   for a rat
010640:  68 65 72 20 63 6F 6D 70 6C 69 63 61 74 65 64 20    her complicated 
010650:  65 78 61 6D 70 6C 65 2E 0D 0A 20 20 20 20 20 57    example...     W
010660:  68 65 6E 20 79 6F 75 20 72 75 6E 20 74 68 65 20    hen you run the 
010670:  70 72 6F 67 72 61 6D 2C 20 61 73 20 20 77 65 6C    program, as  wel
010680:  6C 20 20 61 73 20 20 63 68 61 6E 67 69 6E 67 20    l  as  changing 
010690:  20 61 24 20 74 6F 20 22 53 22 20 61 6E 64 20 70     a$ to "S" and p
0106A0:  72 69 6E 74 69 6E 67 0D 0A 20 20 20 74 68 69 73    rinting..   this
0106B0:  20 6F 6E 20 73 63 72 65 65 6E 20 69 6E 20 6C 69     on screen in li
0106C0:  6E 65 20 31 33 30 2C 20 69 66 20 20 79 6F 75 20    ne 130, if  you 
0106D0:  20 6C 69 73 74 20 69 74 20 61 67 61 69 6E 20 61     list it again a
0106E0:  66 74 65 72 77 61 72 64 73 20 79 6F 75 20 77 69    fterwards you wi
0106F0:  6C 6C 20 73 65 65 0D 0A 20 20 20 74 68 61 74 20    ll see..   that 
010700:  65 20 63 61 6E 20 6C 6F 6F 6B 20 61 74 20 74 68    e can look at th
010710:  65 20 66 69 72 73 74 20 20 62 79 74 65 20 69 6E    e first  byte in
010720:  20 74 68 65 20 73 74 72 69 6E 67 20 64 65 73 63     the string desc
010730:  72 69 70 74 6F 72 20 62 6C 6F 63 6B 20 74 6F 0D    riptor block to.
010740:  0A 20 20 20 66 69 6E 64 20 6F 75 74 20 74 68 65    .   find out the
010750:  20 6C 65 6E 67 74 68 20 6F 66 20 74 68 65 20 20     length of the  
010760:  73 74 72 69 6E 67 2E 20 20 20 59 6F 75 20 20 61    string.   You  a
010770:  72 65 20 20 6E 6F 74 20 73 75 70 70 6F 73 65 64    re  not supposed
010780:  20 74 6F 20 61 6C 74 65 72 20 74 68 69 73 0D 0A     to alter this..
010790:  20 20 20 62 79 74 65 2C 20 77 68 69 63 68 20 20       byte, which  
0107A0:  6D 65 61 6E 73 20 20 74 68 61 74 20 20 79 6F 75    means  that  you
0107B0:  20 20 63 61 6E 6E 6F 74 20 20 63 68 61 6E 67 65      cannot  change
0107C0:  20 20 74 68 65 20 20 6C 65 6E 67 74 68 20 20 6F      the  length  o
0107D0:  66 20 20 61 6E 79 20 73 74 72 69 6E 67 0D 0A 20    f  any string.. 
0107E0:  20 20 70 61 72 61 6D 65 74 65 72 20 70 61 73 73      parameter pass
0107F0:  65 64 20 74 6F 20 6D 61 63 68 69 6E 65 20 63 6F    ed to machine co
010800:  64 65 2E 0D 0A 20 20 20 20 20 4F 6E 20 74 68 65    de...     On the
010810:  20 34 36 34 20 69 74 20 69 73 20 70 6F 73 73 69     464 it is possi
010820:  62 6C 65 20 74 6F 20 20 6D 61 6B 65 20 20 61 20    ble to  make  a 
010830:  20 73 74 72 69 6E 67 20 73 68 6F 72 74 65 72 20     string shorter 
010840:  62 79 20 73 69 6D 70 6C 79 20 70 6F 6B 69 6E 67    by simply poking
010850:  20 61 0D 0A 20 20 20 73 6D 61 6C 6C 65 72 20 76     a..   smaller v
010860:  61 6C 75 65 20 69 6E 74 6F 20 74 68 65 20 66 69    alue into the fi
010870:  72 73 74 20 62 79 74 65 20 6F 66 20 74 68 65 20    rst byte of the 
010880:  73 74 72 69 6E 67 20 64 65 73 63 72 69 70 74 6F    string descripto
010890:  72 2C 20 62 75 74 20 69 66 20 79 6F 75 20 74 72    r, but if you tr
0108A0:  79 0D 0A 20 20 20 74 68 69 73 20 74 72 69 63 6B    y..   this trick
0108B0:  20 77 69 74 68 20 6F 74 68 65 72 20 76 65 72 73     with other vers
0108C0:  69 6F 6E 73 20 6F 66 20 74 68 65 20 43 50 43 20    ions of the CPC 
0108D0:  79 6F 75 20 77 69 6C 6C 20 66 69 6E 64 20 74 68    you will find th
0108E0:  61 74 20 74 68 65 20 6D 65 6D 6F 72 79 20 69 73    at the memory is
0108F0:  0D 0A 20 20 20 6E 6F 74 20 72 65 75 73 65 64 20    ..   not reused 
010900:  6C 69 6E 65 20 31 32 30 20 68 61 73 20 63 68 61    line 120 has cha
010910:  6E 67 65 64 20 61 6E 64 20 6E 6F 77 20 73 61 79    nged and now say
010920:  73 20 61 24 3D 22 53 22 20 61 74 20 74 68 65 20    s a$="S" at the 
010930:  73 74 61 72 74 2E 0D 0A 20 20 20 20 20 54 68 69    start...     Thi
010940:  73 20 69 73 20 70 72 6F 62 61 62 6C 79 20 6E 6F    s is probably no
010950:  74 20 71 75 69 74 65 20 77 68 61 74 20 79 6F 75    t quite what you
010960:  20 20 77 6F 75 6C 64 20 65 78 70 65 63 74 2E 20      would expect. 
010970:  20 41 6C 6C 20 74 68 61 74 20 74 68 65 20 6D 61     All that the ma
010980:  63 68 69 6E 65 0D 0A 20 20 20 63 6F 64 65 20 64    chine..   code d
010990:  69 64 20 77 61 73 20 70 6C 61 63 65 20 61 20 62    id was place a b
0109A0:  79 74 65 20 69 6E 74 6F 20 20 74 68 65 20 20 6D    yte into  the  m
0109B0:  65 6D 6F 72 79 20 20 61 64 64 72 65 73 73 20 70    emory  address p
0109C0:  6F 69 6E 74 65 64 20 74 6F 20 62 79 20 44 45 2C    ointed to by DE,
0109D0:  20 61 6E 64 0D 0A 20 20 20 74 68 65 20 44 45 20     and..   the DE 
0109E0:  72 65 67 69 73 74 65 72 20 68 61 73 20 62 65 65    register has bee
0109F0:  6E 20 6C 6F 61 64 65 64 20 77 69 74 68 20 74 68    n loaded with th
010A00:  65 20 61 64 64 72 65 73 73 20 6F 66 20 74 68 65    e address of the
010A10:  20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72     first character
010A20:  20 69 6E 0D 0A 20 20 20 74 68 65 20 73 74 72 69     in..   the stri
010A30:  6E 67 2E 0D 0A 20 20 20 20 20 4E 6F 72 6D 61 6C    ng...     Normal
010A40:  6C 79 20 74 68 69 73 20 61 64 64 72 65 73 73 20    ly this address 
010A50:  77 6F 75 6C 64 20 70 6F 69 6E 74 20 74 6F 20 73    would point to s
010A60:  6F 6D 65 77 68 65 72 65 20 69 6E 20 74 68 65 20    omewhere in the 
010A70:  22 73 74 72 69 6E 67 20 61 72 65 61 22 2C 20 74    "string area", t
010A80:  68 65 0D 0A 20 20 20 6D 65 6D 6F 72 79 20 6A 75    he..   memory ju
010A90:  73 74 20 62 65 6C 6F 77 20 48 49 4D 45 4D 20 77    st below HIMEM w
010AA0:  68 65 72 65 20 74 68 65 20 63 68 61 72 61 63 74    here the charact
010AB0:  65 72 73 20 69 6E 20 74 68 65 20 73 74 72 69 6E    ers in the strin
010AC0:  67 73 20 61 72 65 20 6B 65 70 74 2E 20 20 42 75    gs are kept.  Bu
010AD0:  74 0D 0A 20 20 20 42 41 53 49 43 20 63 61 6E 20    t..   BASIC can 
010AE0:  62 65 20 71 75 69 74 65 20 65 63 6F 6E 6F 6D 69    be quite economi
010AF0:  63 61 6C 20 69 6E 20 69 74 73 20 20 6F 77 6E 20    cal in its  own 
010B00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
010B10:  0E 00 01 00 02 09 4E E5 0E 00 C1 02 00 00 00 02    ......N.........
010B20:  0E 00 C6 02 00 00 00 02 0E 00 C2 02 00 00 00 02    ................
010B30:  0E 00 C7 02 00 00 00 02 0E 00 C3 02 00 00 00 02    ................
010B40:  0E 00 C8 02 00 00 00 02 0E 00 C4 02 00 00 00 02    ................
010B50:  0E 00 C9 02 00 00 00 02 0E 00 C5 02 00 00 00 02    ................
010B60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
010B70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
010B80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
010B90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
010BA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
010BB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
010BC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
010BD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
010BE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
010BF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
010C00:  20 41 20 77 69 6C 6C 20 68 6F 6C 64 20 74 68 65     A will hold the
010C10:  20 63 68 61 72 61 63 74 65 72 20 6E 75 6D 62 65     character numbe
010C20:  72 2E 20 20 4F 74 68 65 72 77 69 73 65 20 43 61    r.  Otherwise Ca
010C30:  72 72 79 20 69 73 20 66 61 6C 73 65 20 61 6E 64    rry is false and
010C40:  0D 0A 20 20 20 20 20 20 20 20 20 20 41 20 69 73    ..          A is
010C50:  20 7A 65 72 6F 2E 20 20 41 6C 6C 20 74 68 65 20     zero.  All the 
010C60:  6F 74 68 65 72 20 72 65 67 69 73 74 65 72 73 20    other registers 
010C70:  61 72 65 20 70 72 65 73 65 72 76 65 64 2E 0D 0A    are preserved...
010C80:  0D 0A 20 20 20 26 42 42 36 46 20 20 54 58 54 20    ..   &BB6F  TXT 
010C90:  53 45 54 20 43 4F 4C 55 4D 4E 0D 0A 20 20 20 20    SET COLUMN..    
010CA0:  20 20 20 20 20 20 53 65 74 73 20 6A 75 73 74 20          Sets just 
010CB0:  78 2D 63 6F 6F 72 64 69 6E 61 74 65 20 6F 66 20    x-coordinate of 
010CC0:  74 68 65 20 74 65 78 74 20 20 63 75 72 73 6F 72    the text  cursor
010CD0:  20 20 74 6F 20 61 20 6E 65 77 20 70 6F 73 69 74      to a new posit
010CE0:  69 6F 6E 2C 20 68 65 6C 64 0D 0A 20 20 20 20 20    ion, held..     
010CF0:  20 20 20 20 20 69 6E 20 41 2E 20 20 52 65 67 69         in A.  Regi
010D00:  73 74 65 72 73 20 41 46 20 61 6E 64 20 48 4C 20    sters AF and HL 
010D10:  61 72 65 20 63 6F 72 72 75 70 74 65 64 2C 20 61    are corrupted, a
010D20:  6E 64 20 61 6C 6C 20 6F 74 68 65 72 73 20 70 72    nd all others pr
010D30:  65 73 65 72 76 65 64 2E 0D 0A 0D 0A 20 20 20 4E    eserved.....   N
010D40:  4F 20 53 54 52 49 4E 47 53 20 41 54 54 41 43 48    O STRINGS ATTACH
010D50:  45 44 0D 0A 20 20 20 57 65 6C 6C 2C 20 74 77 6F    ED..   Well, two
010D60:  20 61 72 74 69 63 6C 65 73 20 74 6F 20 65 78 70     articles to exp
010D70:  6C 61 69 6E 20 6A 75 73 74 20 33 34 20 62 79 74    lain just 34 byt
010D80:  65 73 20 20 6F 66 20 6D 61 63 68 69 6E 65 20 63    es  of machine c
010D90:  6F 64 65 20 6D 75 73 74 20 62 65 20 61 20 62 69    ode must be a bi
010DA0:  74 0D 0A 20 20 20 6F 66 20 61 20 72 65 63 6F 72    t..   of a recor
010DB0:  64 2E 20 20 41 6C 74 68 6F 75 67 68 20 20 69 74    d.  Although  it
010DC0:  20 20 69 73 20 20 71 75 69 74 65 20 20 73 69 6D      is  quite  sim
010DD0:  70 6C 65 20 20 63 6F 64 65 2C 20 20 69 74 20 64    ple  code,  it d
010DE0:  65 6D 6F 6E 73 74 72 61 74 65 73 20 73 6F 6D 65    emonstrates some
010DF0:  0D 0A 20 20 20 75 73 65 66 75 6C 20 74 65 63 68    ..   useful tech
010E00:  20 28 44 45 29 2C 41 0D 0A 20 20 20 43 39 20 20     (DE),A..   C9  
010E10:  20 20 20 20 20 20 20 20 20 20 52 45 54 0D 0A 0D              RET...
010E20:  0A 20 20 20 46 69 67 75 72 65 20 32 2E 37 31 0D    .   Figure 2.71.
010E30:  0A 0D 0A 0D 0A 0D 0A 20 20 20 3B 69 6E 69 74 69    .......   ;initi
010E40:  61 6C 69 73 61 74 69 6F 6E 20 2D 20 66 69 6E 64    alisation - find
010E50:  20 63 75 72 73 6F 72 20 6C 6F 63 61 74 69 6F 6E     cursor location
010E60:  20 61 6E 64 20 66 69 6E 64 20 61 64 64 72 65 73     and find addres
010E70:  73 20 61 6E 64 20 6C 65 6E 67 74 68 20 6F 66 20    s and length of 
010E80:  73 74 72 69 6E 67 0D 0A 0D 0A 20 20 20 43 44 20    string....   CD 
010E90:  37 38 20 42 42 20 20 43 41 4C 4C 20 30 42 42 37    78 BB  CALL 0BB7
010EA0:  38 68 20 20 20 20 20 20 20 3B 67 65 74 20 63 75    8h       ;get cu
010EB0:  72 72 65 6E 74 20 63 75 72 73 6F 72 20 70 6F 73    rrent cursor pos
010EC0:  69 74 69 6F 6E 20 69 6E 74 6F 20 48 4C 0D 0A 20    ition into HL.. 
010ED0:  20 20 34 43 20 20 20 20 20 20 20 20 4C 44 20 43      4C        LD C
010EE0:  2C 48 20 20 20 20 20 20 20 20 20 20 20 20 3B 70    ,H            ;p
010EF0:  75 74 20 78 2D 63 6F 6F 72 64 69 6E 61 74 65 20    ut x-coordinate 
010F00:  69 6E 74 6F 20 74 68 65 20 43 20 72 65 67 69 73    into the C regis
010F10:  74 65 72 0D 0A 20 20 20 44 44 20 36 45 20 30 30    ter..   DD 6E 00
010F20:  20 20 4C 44 20 4C 2C 28 49 58 2B 30 29 20 20 20      LD L,(IX+0)   
010F30:  20 20 20 20 3B 6C 6F 61 64 20 48 4C 20 77 69 74        ;load HL wit
010F40:  68 20 73 74 72 69 6E 67 20 64 65 73 63 72 69 70    h string descrip
010F50:  74 6F 72 20 62 6C 6F 63 6B 20 61 64 64 72 65 73    tor block addres
010F60:  73 0D 0A 20 20 20 44 44 20 36 36 20 30 31 20 20    s..   DD 66 01  
010F70:  4C 44 20 48 2C 28 49 58 2B 31 29 0D 0A 20 20 20    LD H,(IX+1)..   
010F80:  34 36 20 20 20 20 20 20 20 20 4C 44 20 42 2C 28    46        LD B,(
010F90:  48 4C 29 20 20 20 20 20 20 20 20 20 3B 6C 6F 61    HL)         ;loa
010FA0:  64 20 42 20 77 69 74 68 20 74 68 65 20 6C 65 6E    d B with the len
010FB0:  67 74 68 20 6F 66 20 74 68 65 20 73 74 72 69 6E    gth of the strin
010FC0:  67 0D 0A 20 20 20 37 38 20 20 20 20 20 20 20 20    g..   78        
010FD0:  4C 44 20 41 2C 42 0D 0A 20 20 20 42 37 20 20 20    LD A,B..   B7   
010FE0:  20 20 20 20 20 4F 52 20 41 20 20 20 20 20 20 20         OR A       
010FF0:  20 20 20 20 20 20 20 3B 63 68 65 63 6B 20 69 66           ;check if
011000:  6E 69 71 75 65 73 2E 20 20 41 20 6C 6F 74 20 6F    niques.  A lot o
011010:  66 20 70 65 6F 70 6C 65 20 77 68 6F 20 73 74 61    f people who sta
011020:  72 74 20 6C 65 61 72 6E 69 6E 67 20 6D 61 63 68    rt learning mach
011030:  69 6E 65 20 63 6F 64 65 20 64 6F 20 6E 6F 74 0D    ine code do not.
011040:  0A 20 20 20 72 65 61 6C 6C 79 20 65 6E 64 20 75    .   really end u
011050:  70 20 6D 61 6B 69 6E 67 20 6D 75 63 68 20 75 73    p making much us
011060:  65 20 6F 66 20 69 74 2C 20 61 73 20 69 74 20 69    e of it, as it i
011070:  73 20 73 6F 20 6D 75 63 68 20 65 61 73 69 65 72    s so much easier
011080:  20 74 6F 20 70 72 6F 67 72 61 6D 20 69 6E 0D 0A     to program in..
011090:  20 20 20 42 41 53 49 43 2E 20 20 4C 65 61 72 6E       BASIC.  Learn
0110A0:  69 6E 67 20 68 6F 77 20 74 6F 20 67 65 74 20 42    ing how to get B
0110B0:  41 53 49 43 20 20 61 6E 64 20 6D 61 63 68 69 6E    ASIC  and machin
0110C0:  65 20 63 6F 64 65 20 77 6F 72 6B 69 6E 67 20 74    e code working t
0110D0:  6F 67 65 74 68 65 72 20 6D 65 61 6E 73 0D 0A 20    ogether means.. 
0110E0:  20 20 79 6F 75 20 63 61 6E 20 68 61 76 65 20 74      you can have t
0110F0:  68 65 20 62 65 73 74 20 6F 66 20 62 6F 74 68 20    he best of both 
011100:  20 77 6F 72 6C 64 73 3A 20 20 20 42 41 53 49 43     worlds:   BASIC
011110:  20 77 68 69 63 68 20 69 73 20 71 75 69 63 6B 20     which is quick 
011120:  74 6F 20 77 72 69 74 65 20 61 6E 64 0D 0A 20 20    to write and..  
011130:  20 65 61 73 79 20 74 6F 20 64 65 62 75 67 2C 20     easy to debug, 
011140:  61 6E 64 20 6D 61 63 68 69 6E 65 20 63 6F 64 65    and machine code
011150:  20 66 6F 72 20 65 78 74 72 61 20 73 70 65 65 64     for extra speed
011160:  20 77 68 65 72 65 20 79 6F 75 20 6E 65 65 64 20     where you need 
011170:  69 74 20 6D 6F 73 74 2E 0D 0A 20 20 20 20 20 53    it most...     S
011180:  6F 6D 65 20 6F 66 20 79 6F 75 20 6D 61 79 20 62    ome of you may b
011190:  65 20 77 6F 6E 64 65 72 69 6E 67 20 77 68 79 20    e wondering why 
0111A0:  74 68 65 72 65 20 20 77 61 73 20 61 6E 79 20 6D    there  was any m
0111B0:  61 63 68 69 6E 65 20 63 6F 64 65 20 61 74 20 61    achine code at a
0111C0:  6C 6C 2E 20 20 49 74 0D 0A 20 20 20 77 6F 75 6C    ll.  It..   woul
0111D0:  64 20 68 61 76 65 20 62 65 65 6E 20 6D 75 63 68    d have been much
0111E0:  20 65 61 73 69 65 72 20 74 6F 20 20 75 73 65 20     easier to  use 
0111F0:  20 74 68 65 20 20 43 4F 50 59 43 48 52 24 20 66     the  COPYCHR$ f
011200:  20 74 68 65 20 6C 65 6E 67 74 68 20 69 73 20 7A     the length is z
011210:  65 72 6F 0D 0A 20 20 20 43 38 20 20 20 20 20 20    ero..   C8      
011220:  20 20 52 45 54 20 5A 20 20 20 20 20 20 20 20 20      RET Z         
011230:  20 20 20 20 3B 69 66 20 73 6F 2C 20 65 78 69 74        ;if so, exit
011240:  2E 2E 2E 0D 0A 20 20 20 32 33 20 20 20 20 20 20    .....   23      
011250:  20 20 49 4E 43 20 48 4C 20 20 20 20 20 20 20 20      INC HL        
011260:  20 20 20 20 3B 70 6F 69 6E 74 20 48 4C 20 61 74        ;point HL at
011270:  20 74 68 65 20 6C 6F 77 20 62 79 74 65 20 6F 66     the low byte of
011280:  20 74 68 65 20 73 74 72 69 6E 67 20 61 64 64 72     the string addr
011290:  65 73 73 0D 0A 20 20 20 35 45 20 20 20 20 20 20    ess..   5E      
0112A0:  20 20 4C 44 20 45 2C 28 48 4C 29 20 20 20 20 20      LD E,(HL)     
0112B0:  20 20 20 20 3B 6C 6F 61 64 20 69 74 20 69 6E 74        ;load it int
0112C0:  6F 20 45 0D 0A 20 20 20 32 33 20 20 20 20 20 20    o E..   23      
0112D0:  20 20 49 4E 43 20 48 4C 20 20 20 20 20 20 20 20      INC HL        
0112E0:  20 20 20 20 3B 6D 6F 76 65 20 6F 6E 20 74 6F 20        ;move on to 
0112F0:  74 68 65 20 68 69 67 68 20 62 79 74 65 20 6F 66    the high byte of
011300:  20 74 68 65 20 73 74 72 69 6E 67 20 61 64 64 72     the string addr
011310:  65 73 73 0D 0A 20 20 20 36 36 20 20 20 20 20 20    ess..   66      
011320:  20 20 4C 44 20 48 2C 28 48 4C 29 20 20 20 20 20      LD H,(HL)     
011330:  20 20 20 20 3B 6C 6F 61 64 20 69 74 20 69 6E 74        ;load it int
011340:  6F 20 48 0D 0A 20 20 20 36 42 20 20 20 20 20 20    o H..   6B      
011350:  20 20 4C 44 20 4C 2C 45 20 20 20 20 20 20 20 20      LD L,E        
011360:  20 20 20 20 3B 63 6F 70 79 20 6C 6F 77 20 62 79        ;copy low by
011370:  74 65 20 74 6F 20 4C 20 28 73 6F 20 48 4C 20 68    te to L (so HL h
011380:  6F 6C 64 73 20 73 74 72 69 6E 67 20 61 64 64 72    olds string addr
011390:  65 73 73 29 0D 0A 0D 0A 20 20 20 3B 6D 61 69 6E    ess)....   ;main
0113A0:  20 6C 6F 6F 70 20 2D 20 74 72 61 6E 73 66 65 72     loop - transfer
0113B0:  73 20 42 20 63 68 61 72 61 63 74 65 72 73 20 66    s B characters f
0113C0:  72 6F 6D 20 73 63 72 65 65 6E 20 69 6E 74 6F 20    rom screen into 
0113D0:  73 74 72 69 6E 67 20 61 74 20 48 4C 0D 0A 0D 0A    string at HL....
0113E0:  20 20 20 43 44 20 36 30 20 42 42 20 20 6C 6F 6F       CD 60 BB  loo
0113F0:  70 3A 20 43 41 4C 4C 20 30 42 42 36 30 68 20 3B    p: CALL 0BB60h ;
011400:  75 6E 63 74 69 6F 6E 2E 20 20 54 68 65 20 77 68    unction.  The wh
011410:  6F 6C 65 20 6F 66 0D 0A 20 20 20 6F 75 72 20 65    ole of..   our e
011420:  78 61 6D 70 6C 65 20 70 72 6F 67 72 61 6D 20 63    xample program c
011430:  6F 75 6C 64 20 62 65 20 72 65 77 72 69 74 74 65    ould be rewritte
011440:  6E 20 6C 69 6B 65 20 74 68 69 73 3A 0D 0A 0D 0A    n like this:....
011450:  20 20 20 32 30 20 4D 4F 44 45 20 32 3A 43 41 54       20 MODE 2:CAT
011460:  3A 76 3D 56 50 4F 53 28 23 30 29 3A 66 24 3D 22    :v=VPOS(#0):f$="
011470:  22 3A 4C 4F 43 41 54 45 20 31 2C 34 3A 46 4F 52    ":LOCATE 1,4:FOR
011480:  20 78 3D 31 20 54 4F 20 31 32 3A 66 24 3D 66 24     x=1 TO 12:f$=f$
011490:  2B 43 4F 50 59 43 48 52 24 28 23 30 29 0D 0A 20    +COPYCHR$(#0).. 
0114A0:  20 20 3A 4E 45 58 54 3A 4C 4F 43 41 54 45 20 31      :NEXT:LOCATE 1
0114B0:  2C 76 0D 0A 20 20 20 33 30 20 50 52 49 4E 54 22    ,v..   30 PRINT"
0114C0:  54 68 65 20 66 69 72 73 74 20 66 69 6C 65 20 6F    The first file o
0114D0:  6E 20 74 68 69 73 20 64 69 73 63 20 69 73 20 22    n this disc is "
0114E0:  66 24 0D 0A 0D 0A 20 20 20 20 20 54 68 65 20 72    f$....     The r
0114F0:  65 61 73 6F 6E 20 69 73 20 74 68 61 74 20 74 68    eason is that th
011500:  65 20 64 69 73 63 20 20 6D 65 6E 75 20 20 77 61    e disc  menu  wa
011510:  73 20 20 77 72 69 74 74 65 6E 20 6F 6E 20 61 20    s  written on a 
011520:  43 50 43 20 34 36 34 2C 20 77 68 69 63 68 20 64    CPC 464, which d
011530:  6F 65 73 0D 0A 20 20 20 6E 6F 74 20 68 61 76 65    oes..   not have
011540:  20 74 68 65 20 43 4F 50 59 43 48 52 24 20 66 75     the COPYCHR$ fu
011550:  6E 63 74 69 6F 6E 2C 20 73 6F 20 77 65 20 20 68    nction, so we  h
011560:  61 64 20 74 6F 20 75 73 65 20 73 6F 6D 65 20 6D    ad to use some m
011570:  61 63 68 69 6E 65 20 63 6F 64 65 2E 20 20 45 76    achine code.  Ev
011580:  65 6E 0D 0A 20 20 20 69 66 20 79 6F 75 20 68 61    en..   if you ha
011590:  76 65 20 61 20 36 36 34 2C 20 36 31 32 38 20 20    ve a 664, 6128  
0115A0:  6F 72 20 20 61 20 20 50 6C 75 73 20 20 6D 61 63    or  a  Plus  mac
0115B0:  68 69 6E 65 2C 20 20 69 74 20 69 73 20 77 6F 72    hine,  it is wor
0115C0:  74 68 20 6B 6E 6F 77 69 6E 67 20 68 6F 77 20 74    th knowing how t
0115D0:  6F 0D 0A 20 20 20 61 76 6F 69 64 20 75 73 69 6E    o..   avoid usin
0115E0:  67 20 74 68 65 20 43 4F 50 59 43 48 52 24 20 66    g the COPYCHR$ f
0115F0:  75 6E 63 74 69 6F 6E 20 73 6F 20 74 68 61 74 20    unction so that 
011600:  67 65 74 20 63 68 61 72 61 63 74 65 72 20 66 72    get character fr
011610:  6F 6D 20 73 63 72 65 65 6E 0D 0A 20 20 20 37 37    om screen..   77
011620:  20 20 20 20 20 20 20 20 4C 44 20 28 48 4C 29 2C            LD (HL),
011630:  41 20 20 20 20 20 20 20 20 20 3B 70 75 74 20 69    A         ;put i
011640:  74 20 69 6E 74 6F 20 73 74 72 69 6E 67 20 73 74    t into string st
011650:  6F 72 61 67 65 20 73 70 61 63 65 0D 0A 20 20 20    orage space..   
011660:  32 33 20 20 20 20 20 20 20 20 49 4E 43 20 48 4C    23        INC HL
011670:  20 20 20 20 20 20 20 20 20 20 20 20 3B 6D 6F 76                ;mov
011680:  65 20 6F 6E 20 74 6F 20 6E 65 78 74 20 63 68 61    e on to next cha
011690:  72 61 63 74 65 72 20 69 6E 20 73 74 72 69 6E 67    racter in string
0116A0:  0D 0A 20 20 20 30 43 20 20 20 20 20 20 20 20 49    ..   0C        I
0116B0:  4E 43 20 43 20 20 20 20 20 20 20 20 20 20 20 20    NC C            
0116C0:  20 3B 43 20 68 6F 6C 64 73 20 63 75 72 73 6F 72     ;C holds cursor
0116D0:  20 78 2D 63 6F 6F 72 64 69 6E 61 74 65 20 2D 20     x-coordinate - 
0116E0:  69 6E 63 72 65 61 73 65 20 69 74 0D 0A 20 20 20    increase it..   
0116F0:  37 39 20 20 20 20 20 20 20 20 4C 44 20 41 2C 43    79        LD A,C
011700:  0D 0A 20 20 20 45 35 20 20 20 20 20 20 20 20 50    ..   E5        P
011710:  55 53 48 20 48 4C 20 20 20 20 20 20 20 20 20 20    USH HL          
011720:  20 3B 73 61 76 65 20 48 4C 20 74 6F 20 74 68 65     ;save HL to the
011730:  20 73 74 61 63 6B 20 28 6E 65 78 74 20 72 6F 75     stack (next rou
011740:  74 69 6E 65 20 63 6F 72 72 75 70 74 73 20 48 4C    tine corrupts HL
011750:  29 0D 0A 20 20 20 43 44 20 36 46 20 42 42 20 20    )..   CD 6F BB  
011760:  43 41 4C 4C 20 30 42 42 36 46 68 20 20 20 20 20    CALL 0BB6Fh     
011770:  20 20 3B 73 65 74 20 74 65 78 74 20 63 75 72 73      ;set text curs
011780:  6F 72 20 78 2D 63 6F 6F 72 64 69 6E 61 74 65 20    or x-coordinate 
011790:  74 6F 20 76 61 6C 75 65 20 69 6E 20 41 0D 0A 20    to value in A.. 
0117A0:  20 20 45 31 20 20 20 20 20 20 20 20 50 4F 50 20      E1        POP 
0117B0:  48 4C 20 20 20 20 20 20 20 20 20 20 20 20 3B 72    HL            ;r
0117C0:  65 73 74 6F 72 65 20 48 4C 20 66 72 6F 6D 20 74    estore HL from t
0117D0:  68 65 20 73 74 61 63 6B 0D 0A 20 20 20 31 30 20    he stack..   10 
0117E0:  46 32 20 20 20 20 20 44 4A 4E 5A 20 6C 6F 6F 70    F2     DJNZ loop
0117F0:  20 20 20 20 20 20 20 20 20 3B 64 65 63 72 65 61             ;decrea
011800:  79 6F 75 20 63 61 6E 20 77 72 69 74 65 20 70 72    you can write pr
011810:  6F 67 72 61 6D 73 20 74 68 61 74 20 77 6F 72 6B    ograms that work
011820:  0D 0A 20 20 20 6F 6E 20 61 6C 6C 20 6F 66 20 74    ..   on all of t
011830:  68 65 20 43 50 43 73 2E 20 20 4F 66 20 63 6F 75    he CPCs.  Of cou
011840:  72 73 65 20 74 68 65 20 6D 61 63 68 69 6E 65 20    rse the machine 
011850:  63 6F 64 65 20 72 75 6E 73 20 66 61 73 74 65 72    code runs faster
011860:  20 74 68 61 6E 20 74 68 65 20 42 41 53 49 43 0D     than the BASIC.
011870:  0A 20 20 20 61 6C 74 65 72 6E 61 74 69 76 65 20    .   alternative 
011880:  61 73 20 77 65 6C 6C 2E 0D 0A 0D 0A 20 20 20 57    as well.....   W
011890:  52 41 50 50 49 4E 47 20 55 50 0D 0A 20 20 20 4E    RAPPING UP..   N
0118A0:  65 78 74 20 6D 6F 6E 74 68 20 77 65 20 77 69 6C    ext month we wil
0118B0:  6C 20 62 65 20 72 65 74 75 72 6E 69 6E 67 20 74    l be returning t
0118C0:  6F 20 42 41 53 49 43 20 66 6F 72 20 20 61 20 6C    o BASIC for  a l
0118D0:  61 73 74 20 6C 6F 6F 6B 20 61 74 20 61 20 66 65    ast look at a fe
0118E0:  77 20 6D 6F 72 65 20 6F 66 0D 0A 20 20 20 74 68    w more of..   th
0118F0:  65 20 74 72 69 63 6B 73 20 75 73 65 64 20 69 6E    e tricks used in
011900:  20 46 65 62 72 75 61 72 79 27 73 20 64 69 73 63     February's disc
011910:  20 20 6D 65 6E 75 20 20 70 72 6F 67 72 61 6D 2E      menu  program.
011920:  20 20 41 66 74 65 72 20 74 68 61 74 2C 20 77 68      After that, wh
011930:  6F 20 6B 6E 6F 77 73 3F 0D 0A 20 20 20 50 65 72    o knows?..   Per
011940:  68 61 70 73 20 77 65 20 63 6F 75 6C 64 20 68 61    haps we could ha
011950:  76 65 20 61 20 67 6F 20 20 61 74 20 20 61 6E 6F    ve a go  at  ano
011960:  74 68 65 72 20 20 6C 61 6E 67 75 61 67 65 20 20    ther  language  
011970:  73 75 63 68 20 20 61 73 20 43 2C 20 69 66 20 74    such  as C, if t
011980:  68 65 72 65 20 69 73 0D 0A 20 20 20 65 6E 6F 75    here is..   enou
011990:  67 68 20 69 6E 74 65 72 65 73 74 2C 20 6F 72 20    gh interest, or 
0119A0:  65 76 65 6E 20 73 65 65 20 68 6F 77 20 74 6F 20    even see how to 
0119B0:  63 6F 6E 74 72 6F 6C 20 61 20 4D 49 44 49 20 69    control a MIDI i
0119C0:  6E 74 65 72 66 61 63 65 2E 20 20 54 68 65 6E 20    nterface.  Then 
0119D0:  61 67 61 69 6E 2C 0D 0A 20 20 20 74 68 65 72 65    again,..   there
0119E0:  20 69 73 20 61 20 6C 6F 74 20 6D 6F 72 65 20 42     is a lot more B
0119F0:  41 53 49 43 20 66 6F 72 20 75 73 20 74 6F 20 65    ASIC for us to e
011A00:  73 65 20 42 2C 20 61 6E 64 20 69 66 20 6E 6F 74    se B, and if not
011A10:  20 7A 65 72 6F 20 6A 75 6D 70 20 62 61 63 6B 20     zero jump back 
011A20:  74 6F 20 6C 6F 6F 70 0D 0A 20 20 20 43 39 20 20    to loop..   C9  
011A30:  20 20 20 20 20 20 52 45 54 20 20 20 20 20 20 20          RET       
011A40:  20 20 20 20 20 20 20 20 3B 72 65 74 75 72 6E 20            ;return 
011A50:  77 68 65 6E 63 65 20 77 65 20 63 61 6D 65 20 28    whence we came (
011A60:  74 6F 20 42 41 53 49 43 29 0D 0A 0D 0A 20 31 30    to BASIC).... 10
011A70:  20 44 45 46 49 4E 54 20 61 2D 7A 3A 4D 45 4D 4F     DEFINT a-z:MEMO
011A80:  52 59 20 48 49 4D 45 4D 2D 33 34 3A 61 3D 55 4E    RY HIMEM-34:a=UN
011A90:  54 28 48 49 4D 45 4D 2B 31 29 3A 46 4F 52 20 78    T(HIMEM+1):FOR x
011AA0:  3D 30 20 54 4F 20 33 33 3A 52 45 41 44 20 61 24    =0 TO 33:READ a$
011AB0:  3A 50 4F 4B 45 20 61 2B 78 2C 56 41 0D 0A 20 20    :POKE a+x,VA..  
011AC0:  20 20 4C 28 22 26 22 2B 61 24 29 3A 4E 45 58 54      L("&"+a$):NEXT
011AD0:  3A 44 41 54 41 20 43 44 2C 37 38 2C 42 42 2C 34    :DATA CD,78,BB,4
011AE0:  43 2C 44 44 2C 36 45 2C 30 2C 44 44 2C 36 36 2C    C,DD,6E,0,DD,66,
011AF0:  31 2C 34 36 2C 37 38 2C 42 37 2C 43 38 2C 32 33    1,46,78,B7,C8,23
011B00:  2C 35 45 2C 32 33 2C 36 36 2C 36 42 2C 0D 0A 20    ,5E,23,66,6B,.. 
011B10:  20 20 20 43 44 2C 36 30 2C 42 42 2C 37 37 2C 32       CD,60,BB,77,2
011B20:  33 2C 43 2C 37 39 2C 45 35 2C 43 44 2C 36 46 2C    3,C,79,E5,CD,6F,
011B30:  42 42 2C 45 31 2C 31 30 2C 46 32 2C 43 39 0D 0A    BB,E1,10,F2,C9..
011B40:  20 32 30 20 4D 4F 44 45 20 32 3A 43 41 54 3A 76     20 MODE 2:CAT:v
011B50:  3D 56 50 4F 53 28 23 30 29 3A 66 24 3D 53 50 41    =VPOS(#0):f$=SPA
011B60:  43 45 24 28 31 32 29 3A 4C 4F 43 41 54 45 20 31    CE$(12):LOCATE 1
011B70:  2C 34 3A 43 41 4C 4C 20 61 2C 40 66 24 3A 4C 4F    ,4:CALL a,@f$:LO
011B80:  43 41 54 45 20 31 2C 76 0D 0A 20 33 30 20 50 52    CATE 1,v.. 30 PR
011B90:  49 4E 54 22 54 68 65 20 66 69 72 73 74 20 66 69    INT"The first fi
011BA0:  6C 65 20 6F 6E 20 74 68 69 73 20 64 69 73 63 20    le on this disc 
011BB0:  69 73 20 22 66 24 0D 0A 0D 0A 20 20 20 46 69 67    is "f$....   Fig
011BC0:  75 72 65 20 32 2E 37 31 38 0D 0A 1A 6C 79 20 67    ure 2.718...ly g
011BD0:  72 61 74 65 64 20 20 50 61 72 6D 65 73 61 6E 20    rated  Parmesan 
011BE0:  20 63 68 65 65 73 65 20 20 73 70 72 69 6E 6B 6C     cheese  sprinkl
011BF0:  65 64 20 20 67 65 6E 65 72 6F 75 73 6C 79 20 6F    ed  generously o
011C00:  78 70 6C 6F 72 65 2E 0D 0A 0D 0A 0D 0A 0D 0A 20    xplore......... 
011C10:  20 20 31 30 30 20 4D 45 4D 4F 52 59 20 26 38 46      100 MEMORY &8F
011C20:  46 46 3A 61 3D 26 39 30 30 30 3A 46 4F 52 20 78    FF:a=&9000:FOR x
011C30:  3D 30 20 54 4F 20 31 34 3A 52 45 41 44 20 61 24    =0 TO 14:READ a$
011C40:  3A 50 4F 4B 45 20 61 2B 78 2C 56 41 4C 28 22 26    :POKE a+x,VAL("&
011C50:  22 2B 61 24 29 3A 4E 45 58 54 0D 0A 20 20 20 31    "+a$):NEXT..   1
011C60:  31 30 20 4D 4F 44 45 20 32 3A 50 52 49 4E 54 22    10 MODE 2:PRINT"
011C70:  53 69 6C 6C 79 20 73 74 72 69 6E 67 22 0D 0A 20    Silly string".. 
011C80:  20 20 31 32 30 20 61 24 3D 22 20 22 3A 4C 4F 43      120 a$=" ":LOC
011C90:  41 54 45 20 31 2C 31 3A 43 41 4C 4C 20 26 39 30    ATE 1,1:CALL &90
011CA0:  30 30 2C 40 61 24 0D 0A 20 20 20 31 33 30 20 50    00,@a$..   130 P
011CB0:  52 49 4E 54 3A 50 52 49 4E 54 22 54 68 65 20 6C    RINT:PRINT"The l
011CC0:  65 74 74 65 72 20 61 74 20 74 68 65 20 74 6F 70    etter at the top
011CD0:  20 6C 65 66 74 20 6F 66 20 74 68 65 20 73 63 72     left of the scr
011CE0:  65 65 6E 20 69 73 20 22 3B 61 24 0D 0A 20 20 20    een is ";a$..   
011CF0:  31 39 30 20 44 41 54 41 20 44 44 2C 36 36 2C 30    190 DATA DD,66,0
011D00:  31 2C 44 44 2C 36 45 2C 30 30 2C 32 33 2C 35 45    1,DD,6E,00,23,5E
011D10:  2C 32 33 2C 35 36 2C 43 44 2C 36 30 2C 42 42 2C    ,23,56,CD,60,BB,
011D20:  31 32 2C 43 39 0D 0A 0D 0A 20 20 20 44 44 20 36    12,C9....   DD 6
011D30:  36 20 30 31 20 20 20 20 20 20 4C 44 20 48 2C 28    6 01      LD H,(
011D40:  49 58 2B 31 29 0D 0A 20 20 20 44 44 20 36 45 20    IX+1)..   DD 6E 
011D50:  30 30 20 20 20 20 20 20 4C 44 20 4C 2C 28 49 58    00      LD L,(IX
011D60:  2B 30 29 0D 0A 20 20 20 32 33 20 20 20 20 20 20    +0)..   23      
011D70:  20 20 20 20 20 20 49 4E 43 20 48 4C 0D 0A 20 20          INC HL..  
011D80:  20 35 45 20 20 20 20 20 20 20 20 20 20 20 20 4C     5E            L
011D90:  44 20 45 2C 28 48 4C 29 0D 0A 20 20 20 32 33 20    D E,(HL)..   23 
011DA0:  20 20 20 20 20 20 20 20 20 20 20 49 4E 43 20 48               INC H
011DB0:  4C 0D 0A 20 20 20 35 36 20 20 20 20 20 20 20 20    L..   56        
011DC0:  20 20 20 20 4C 44 20 44 2C 28 48 4C 29 0D 0A 20        LD D,(HL).. 
011DD0:  20 20 43 44 20 36 30 20 42 42 20 20 20 20 20 20      CD 60 BB      
011DE0:  43 41 4C 4C 20 30 42 42 36 30 68 0D 0A 20 20 20    CALL 0BB60h..   
011DF0:  31 32 20 20 20 20 20 20 20 20 20 20 20 20 4C 44    12            LD
011E00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
011E10:  0F 00 01 00 02 09 4E E5 0F 00 C9 02 00 00 00 02    ......N.........
011E20:  0F 00 C5 02 00 00 00 02 0F 00 C1 02 00 00 00 02    ................
011E30:  0F 00 C6 02 00 00 00 02 0F 00 C2 02 00 00 00 02    ................
011E40:  0F 00 C7 02 00 00 00 02 0F 00 C3 02 00 00 00 02    ................
011E50:  0F 00 C8 02 00 00 00 02 0F 00 C4 02 00 00 00 02    ................
011E60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
011E70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
011E80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
011E90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
011EA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
011EB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
011EC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
011ED0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
011EE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
011EF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
011F00:  31 36 20 67 72 61 70 68 69 63 73 20 63 6F 6F 72    16 graphics coor
011F10:  64 69 6E 61 74 65 73 20 20 70 65 72 20 20 74 65    dinates  per  te
011F20:  78 74 20 63 6F 6F 72 64 69 6E 61 74 65 2C 20 61    xt coordinate, a
011F30:  6C 6C 20 77 65 20 6E 65 65 64 0D 0A 20 20 20 74    ll we need..   t
011F40:  6F 20 64 6F 20 69 73 20 69 6E 74 65 67 65 72 20    o do is integer 
011F50:  64 69 76 69 73 69 6F 6E 20 62 79 20 20 31 36 2E    division by  16.
011F60:  20 20 20 49 74 20 20 69 73 20 20 6E 6F 74 20 71       It  is  not q
011F70:  75 69 74 65 20 74 68 61 74 20 73 69 6D 70 6C 65    uite that simple
011F80:  20 68 6F 77 65 76 65 72 2C 0D 0A 20 20 20 62 65     however,..   be
011F90:  63 61 75 73 65 20 74 68 65 20 67 72 61 70 68 69    cause the graphi
011FA0:  63 73 20 63 6F 6F 72 64 69 6E 61 74 65 73 20 20    cs coordinates  
011FB0:  73 74 61 72 74 20 20 63 6F 75 6E 74 69 6E 67 20    start  counting 
011FC0:  20 66 72 6F 6D 20 20 74 68 65 20 62 6F 74 74 6F     from  the botto
011FD0:  6D 20 6F 66 20 74 68 65 0D 0A 20 20 20 73 63 72    m of the..   scr
011FE0:  65 65 6E 20 28 61 73 20 69 66 20 79 6F 75 20 77    een (as if you w
011FF0:  65 72 65 20 20 64 72 61 77 69 6E 67 20 20 61 20    ere  drawing  a 
012000:  20 67 72 61 70 68 29 20 20 61 6E 64 20 74 68 65     graph)  and the
012010:  20 74 65 78 74 20 63 6F 6F 72 64 69 6E 61 74 65     text coordinate
012020:  73 20 73 74 61 72 74 0D 0A 20 20 20 66 72 6F 6D    s start..   from
012030:  20 74 68 65 20 74 6F 70 20 28 61 73 20 69 66 20     the top (as if 
012040:  20 79 6F 75 20 20 77 65 72 65 20 20 77 72 69 74     you  were  writ
012050:  69 6E 67 29 2E 20 20 20 54 6F 20 20 73 6F 6C 76    ing).   To  solv
012060:  65 20 74 68 69 73 20 70 72 6F 62 6C 65 6D 20 77    e this problem w
012070:  65 20 6A 75 73 74 0D 0A 20 20 20 73 75 62 74 72    e just..   subtr
012080:  61 63 74 20 79 20 66 72 6F 6D 20 34 30 30 2E 20    act y from 400. 
012090:  20 54 68 69 73 20 67 69 76 65 73 20 20 61 20 20     This gives  a  
0120A0:  6C 61 72 67 65 20 20 76 61 6C 75 65 20 20 77 68    large  value  wh
0120B0:  65 6E 20 79 20 69 73 20 73 6D 61 6C 6C 20 28 61    en y is small (a
0120C0:  74 20 74 68 65 0D 0A 20 20 20 62 6F 74 74 6F 6D    t the..   bottom
0120D0:  20 6F 66 20 74 68 65 20 73 63 72 65 65 6E 29 20     of the screen) 
0120E0:  61 6E 64 20 61 20 73 6D 61 6C 6C 20 20 76 61 6C    and a small  val
0120F0:  75 65 20 20 61 74 20 20 74 68 65 20 20 74 6F 70    ue  at  the  top
012100:  20 70 69 65 63 65 20 6F 66 20 6D 61 63 68 69 6E     piece of machin
012110:  65 0D 0A 20 20 20 63 6F 64 65 20 74 6F 20 64 6F    e..   code to do
012120:  20 74 68 69 73 20 6A 6F 62 2C 20 62 75 74 20 66     this job, but f
012130:  69 72 73 74 20 74 68 65 20 20 74 65 78 74 20 63    irst the  text c
012140:  75 72 73 6F 72 20 6E 65 65 64 20 74 6F 20 62 65    ursor need to be
012150:  20 20 4C 4F 43 41 54 45 64 20 74 6F 20 74 68 65      LOCATEd to the
012160:  0D 0A 20 20 20 70 6F 73 69 74 69 6F 6E 20 6F 6E    ..   position on
012170:  20 73 63 72 65 65 6E 20 77 68 65 72 65 20 77 65     screen where we
012180:  20 77 61 6E 74 20 74 6F 20 73 74 61 72 74 20 72     want to start r
012190:  65 61 64 69 6E 67 2E 0D 0A 0D 0A 20 20 20 57 65    eading.....   We
0121A0:  20 68 61 76 65 20 75 73 65 64 20 74 68 65 20 66     have used the f
0121B0:  6F 6C 6C 6F 77 69 6E 67 20 20 65 78 70 72 65 73    ollowing  expres
0121C0:  73 69 6F 6E 73 20 20 74 6F 20 63 61 6C 63 75 6C    sions  to calcul
0121D0:  61 74 65 20 74 68 65 20 74 65 78 74 20 63 6F 6F    ate the text coo
0121E0:  72 64 69 6E 61 74 65 73 0D 0A 20 20 20 6E 65 65    rdinates..   nee
0121F0:  64 65 64 3A 0D 0A 0D 0A 20 20 20 20 20 20 20 20    ded:....        
012200:  20 20 20 70 3D 28 78 5C 31 36 30 29 2A 32 30 2B       p=(x\160)*20+
012210:  31 0D 0A 20 20 20 20 20 20 20 20 20 20 20 71 3D    1..           q=
012220:  28 34 30 30 2D 79 29 5C 31 36 2B 31 0D 0A 0D 0A    (400-y)\16+1....
012230:  20 20 20 77 68 65 72 65 20 78 20 61 6E 64 20 79       where x and y
012240:  20 61 72 65 20 74 68 65 20 67 72 61 70 68 69 63     are the graphic
012250:  73 20 63 6F 6F 72 64 69 6E 61 74 65 64 20 6F 66    s coordinated of
012260:  20 6F 75 72 20 70 6F 69 6E 74 65 72 2C 20 61 6E     our pointer, an
012270:  64 20 70 20 61 6E 64 20 71 20 61 72 65 0D 0A 20    d p and q are.. 
012280:  20 20 74 68 65 20 74 65 78 74 20 63 6F 6F 72 64      the text coord
012290:  69 6E 61 74 65 73 20 77 65 20 6E 65 65 64 2E 0D    inates we need..
0122A0:  0A 0D 0A 20 20 20 42 65 66 6F 72 65 20 77 72 69    ...   Before wri
0122B0:  74 69 6E 67 20 65 78 70 72 65 73 73 69 6F 6E 73    ting expressions
0122C0:  20 73 75 63 68 20 61 73 20 74 68 65 73 65 2C 20     such as these, 
0122D0:  69 74 20 70 61 79 73 20 74 6F 20 77 6F 72 6B 20    it pays to work 
0122E0:  6F 75 74 20 65 78 61 63 74 6C 79 20 77 68 61 74    out exactly what
0122F0:  0D 0A 20 20 20 79 6F 75 20 77 61 6E 74 20 74 6F    ..   you want to
012300:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012310:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012320:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012330:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012340:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012350:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012360:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012370:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012380:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012390:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0123A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0123B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0123C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0123D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0123E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0123F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012400:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012410:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012420:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012430:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012440:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012450:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012460:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012470:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012480:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012490:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0124A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0124B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0124C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0124D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0124E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0124F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
012500:  20 64 6F 2E 20 20 50 75 74 20 61 20 64 69 73 63     do.  Put a disc
012510:  20 69 6E 20 20 74 68 65 20 20 64 72 69 76 65 2C     in  the  drive,
012520:  20 73 77 69 74 63 68 20 74 6F 20 4D 4F 44 45 20     switch to MODE 
012530:  32 20 61 6E 64 20 63 61 74 61 6C 6F 67 75 65 0D    2 and catalogue.
012540:  0A 20 20 20 69 74 2E 20 20 59 6F 75 20 77 69 6C    .   it.  You wil
012550:  6C 20 66 69 6E 64 20 74 68 61 74 20 66 6F 75 72    l find that four
012560:  20 20 63 6F 6C 75 6D 6E 73 20 20 6F 66 20 66 69      columns  of fi
012570:  6C 65 6E 61 6D 65 73 20 61 72 65 20 70 72 69 6E    lenames are prin
012580:  74 65 64 20 6F 6E 20 73 63 72 65 65 6E 2E 0D 0A    ted on screen...
012590:  20 20 20 54 68 65 20 74 65 78 74 20 63 75 72 73       The text curs
0125A0:  6F 72 20 6E 65 65 64 73 20 74 6F 20 62 65 20 20    or needs to be  
0125B0:  70 6F 73 69 74 69 6F 6E 65 64 20 20 61 74 20 20    positioned  at  
0125C0:  74 68 65 20 73 74 61 72 74 20 6F 66 20 77 68 69    the start of whi
0125D0:  63 68 65 76 65 72 20 6F 66 20 74 68 65 0D 0A 20    chever of the.. 
0125E0:  20 20 66 6F 75 72 20 63 6F 6C 75 6D 6E 73 20 74      four columns t
0125F0:  68 65 20 70 6F 69 6E 74 65 72 20 69 73 20 69 6E    he pointer is in
012600:  2E 0D 0A 0D 0A 20 20 20 53 69 6E 63 65 20 74 68    .....   Since th
012610:  65 20 73 63 72 65 65 6E 20 69 73 20 20 36 34 30    e screen is  640
012620:  20 20 67 72 61 70 68 69 63 73 20 20 63 6F 6F 72      graphics  coor
012630:  64 69 6E 61 74 65 73 20 20 61 63 72 6F 73 73 2C    dinates  across,
012640:  20 20 65 61 63 68 20 6F 66 20 74 68 65 20 66 6F      each of the fo
012650:  75 72 0D 0A 20 20 20 63 6F 6C 75 6D 6E 73 20 64    ur..   columns d
012660:  69 73 70 6C 61 79 65 64 20 69 73 20 31 36 30 20    isplayed is 160 
012670:  63 6F 6F 72 64 69 6E 61 74 65 73 20 77 69 64 65    coordinates wide
012680:  2E 20 20 4F 75 72 20 65 78 70 72 65 73 73 69 6F    .  Our expressio
012690:  6E 20 69 6E 20 6C 69 6E 65 20 35 30 20 75 73 65    n in line 50 use
0126A0:  73 0D 0A 20 20 20 74 68 65 20 69 6E 74 65 67 65    s..   the intege
0126B0:  72 20 64 69 76 69 73 69 6F 6E 20 6F 70 65 72 61    r division opera
0126C0:  74 6F 72 2C 20 22 5C 22 2E 20 20 54 68 69 73 20    tor, "\".  This 
0126D0:  20 6F 70 65 72 61 74 6F 72 20 68 61 73 20 74 68     operator has th
0126E0:  65 20 73 61 6D 65 20 65 66 66 65 63 74 20 61 73    e same effect as
0126F0:  0D 0A 20 20 20 75 73 69 6E 67 20 6E 6F 72 6D 61    ..   using norma
012700:  23 50 72 6F 67 72 61 6D 6D 65 72 73 27 20 50 61    #Programmers' Pa
012710:  74 63 68 20 35 20 2D 20 57 41 43 43 49 20 31 31    tch 5 - WACCI 11
012720:  34 2C 20 4A 75 6C 79 20 31 39 39 37 2C 20 70 2E    4, July 1997, p.
012730:  20 32 36 2D 32 37 0D 0A 20 20 20 50 52 4F 47 52     26-27..   PROGR
012740:  41 4D 4D 45 52 53 27 20 50 41 54 43 48 20 35 0D    AMMERS' PATCH 5.
012750:  0A 20 20 20 42 79 20 53 74 65 70 68 65 6E 20 61    .   By Stephen a
012760:  6E 64 20 4D 61 74 74 68 65 77 20 50 68 69 6C 6C    nd Matthew Phill
012770:  69 70 73 0D 0A 0D 0A 20 20 20 57 68 61 74 20 67    ips....   What g
012780:  61 73 74 72 6F 6E 6F 6D 69 63 20 64 65 6C 69 67    astronomic delig
012790:  68 74 73 20 61 77 61 69 74 20 75 73 20 20 66 6F    hts await us  fo
0127A0:  72 20 20 74 68 65 20 20 66 69 6E 61 6C 20 20 63    r  the  final  c
0127B0:  6F 75 72 73 65 3F 20 20 41 73 20 74 68 65 20 73    ourse?  As the s
0127C0:  77 65 65 74 0D 0A 20 20 20 74 72 6F 6C 6C 65 79    weet..   trolley
0127D0:  20 6F 66 20 70 72 6F 67 72 61 6D 6D 69 6E 67 20     of programming 
0127E0:  77 68 65 65 6C 73 20 20 69 74 73 20 20 77 61 79    wheels  its  way
0127F0:  20 20 74 68 72 6F 75 67 68 20 20 74 68 65 20 6F      through  the o
012800:  62 73 74 61 63 6C 65 73 20 6F 66 20 69 6E 74 65    bstacles of inte
012810:  67 65 72 0D 0A 20 20 20 64 69 76 69 73 69 6F 6E    ger..   division
012820:  20 61 6E 64 20 74 77 6F 27 73 20 63 6F 6D 70 6C     and two's compl
012830:  65 6D 65 6E 74 20 62 69 6E 61 72 79 2C 20 77 65    ement binary, we
012840:  20 20 66 69 6E 64 20 6F 75 72 73 65 6C 76 65 73      find ourselves
012850:  20 74 68 69 6E 6B 69 6E 67 20 22 53 68 61 6C 6C     thinking "Shall
012860:  20 49 0D 0A 20 20 20 68 61 76 65 20 74 68 65 20     I..   have the 
012870:  73 74 72 61 77 62 65 72 72 69 65 73 3F 22 2C 20    strawberries?", 
012880:  61 6E 64 20 20 22 57 68 6F 27 73 20 20 70 61 79    and  "Who's  pay
012890:  69 6E 67 20 20 74 68 65 20 20 62 69 6C 6C 3F 22    ing  the  bill?"
0128A0:  2E 20 20 20 28 43 6F 66 66 65 65 20 74 6F 20 62    .   (Coffee to b
0128B0:  65 0D 0A 20 20 20 73 65 72 76 65 64 20 69 6E 20    e..   served in 
0128C0:  74 68 65 20 6C 6F 75 6E 67 65 2E 29 0D 0A 0D 0A    the lounge.)....
0128D0:  20 20 20 41 6C 6C 20 74 68 61 74 20 72 65 6D 61       All that rema
0128E0:  69 6E 73 20 69 6E 20 6F 72 64 65 72 20 74 6F 20    ins in order to 
0128F0:  72 6F 75 6E 64 20 20 6F 66 66 20 74 68 65 20 64    round  off the d
012900:  6C 20 64 69 76 69 73 69 6F 6E 20 61 6E 64 20 74    l division and t
012910:  68 72 6F 77 69 6E 67 20 61 77 61 79 20 20 74 68    hrowing away  th
012920:  65 20 70 61 72 74 20 61 66 74 65 72 20 74 68 65    e part after the
012930:  20 64 65 63 69 6D 61 6C 20 70 6F 69 6E 74 2E 0D     decimal point..
012940:  0A 20 20 20 44 69 76 69 64 69 6E 67 20 74 68 65    .   Dividing the
012950:  20 78 20 63 6F 6F 72 64 69 6E 61 74 65 20 62 79     x coordinate by
012960:  20 31 36 30 20 69 6E 20 74 68 69 73 20 77 61 79     160 in this way
012970:  20 72 65 73 75 6C 74 73 20 69 6E 20 61 20 6E 75     results in a nu
012980:  6D 62 65 72 20 66 72 6F 6D 20 30 20 74 6F 0D 0A    mber from 0 to..
012990:  20 20 20 33 2C 20 63 6F 72 72 65 73 70 6F 6E 64       3, correspond
0129A0:  69 6E 67 20 74 6F 20 74 68 65 20 66 6F 75 72 20    ing to the four 
0129B0:  63 6F 6C 75 6D 6E 73 20 20 6F 66 20 20 74 65 78    columns  of  tex
0129C0:  74 2E 20 20 54 68 65 20 66 6F 6C 6C 6F 77 69 6E    t.  The followin
0129D0:  67 20 74 61 62 6C 65 20 73 68 6F 77 73 0D 0A 20    g table shows.. 
0129E0:  20 20 77 68 61 74 20 77 65 20 6E 65 65 64 20 74      what we need t
0129F0:  6F 20 61 63 68 69 65 76 65 3A 0D 0A 0D 0A 20 20    o achieve:....  
012A00:  20 47 72 61 70 68 69 63 73 20 20 20 20 20 20 43     Graphics      C
012A10:  6F 6C 75 6D 6E 20 20 20 20 20 54 65 78 74 0D 0A    olumn     Text..
012A20:  20 20 20 78 2D 63 6F 6F 72 64 69 6E 61 74 65 73       x-coordinates
012A30:  20 20 20 20 20 20 20 20 20 20 20 20 78 2D 63 6F                x-co
012A40:  6F 72 64 69 6E 61 74 65 0D 0A 0D 0A 20 20 20 20    ordinate....    
012A50:  20 30 2D 31 35 39 20 20 20 20 20 20 20 30 20 20     0-159       0  
012A60:  20 20 20 20 20 20 20 20 31 0D 0A 20 20 20 31 36            1..   16
012A70:  30 2D 33 31 39 20 20 20 20 20 20 20 31 20 20 20    0-319       1   
012A80:  20 20 20 20 20 20 20 32 31 0D 0A 20 20 20 33 32           21..   32
012A90:  30 2D 34 37 39 20 20 20 20 20 20 20 32 20 20 20    0-479       2   
012AA0:  20 20 20 20 20 20 20 34 31 0D 0A 20 20 20 34 38           41..   48
012AB0:  30 2D 36 33 39 20 20 20 20 20 20 20 33 20 20 20    0-639       3   
012AC0:  20 20 20 20 20 20 20 36 31 0D 0A 0D 0A 20 20 20           61....   
012AD0:  49 66 20 77 65 20 74 68 65 6E 20 6D 75 6C 74 69    If we then multi
012AE0:  70 6C 79 20 74 68 65 20 63 6F 6C 75 6D 6E 20 6E    ply the column n
012AF0:  75 6D 62 65 72 20 62 79 20 20 32 30 2C 20 74 68    umber by  20, th
012B00:  69 73 63 20 63 61 74 61 6C 6F 67 75 69 6E 67 20    isc cataloguing 
012B10:  70 72 6F 67 72 61 6D 20 69 73 20 74 6F 0D 0A 20    program is to.. 
012B20:  20 20 65 78 70 6C 61 69 6E 20 73 6F 6D 65 20 6F      explain some o
012B30:  66 20 6C 69 6E 65 73 20 35 30 20 20 61 6E 64 20    f lines 50  and 
012B40:  20 36 30 2E 20 20 20 53 69 6E 63 65 20 20 69 74     60.   Since  it
012B50:  20 20 77 61 73 20 46 65 62 72 75 61 72 79 20 74      was February t
012B60:  68 61 74 20 77 65 20 66 69 72 73 74 0D 0A 20 20    hat we first..  
012B70:  20 6C 6F 6F 6B 65 64 20 61 74 20 74 68 65 20 70     looked at the p
012B80:  72 6F 67 72 61 6D 2C 20 77 65 27 76 65 20 20 61    rogram, we've  a
012B90:  73 6B 65 64 20 20 4A 6F 68 6E 20 20 74 6F 20 20    sked  John  to  
012BA0:  70 72 69 6E 74 20 20 74 68 65 20 6C 69 73 74 69    print  the listi
012BB0:  6E 67 20 61 67 61 69 6E 20 69 6E 0D 0A 20 20 20    ng again in..   
012BC0:  46 69 67 75 72 65 20 31 2E 20 20 3C 3C 41 6E 64    Figure 1.  <<And
012BD0:  20 79 6F 75 20 63 61 6E 20 6C 6F 61 64 20 69 74     you can load it
012BE0:  20 66 72 6F 6D 20 74 68 65 20 64 69 73 63 20 61     from the disc a
012BF0:  73 20 44 49 53 43 4D 45 4E 55 2E 42 41 53 3E 3E    s DISCMENU.BAS>>
012C00:  0D 0A 0D 0A 20 20 20 4C 69 6E 65 20 35 30 20 69    ....   Line 50 i
012C10:  73 20 72 65 61 63 68 65 64 20 77 68 65 6E 20 74    s reached when t
012C20:  68 65 20 57 48 49 4C 45 20 63 6F 6E 64 69 74 69    he WHILE conditi
012C30:  6F 6E 20 69 6E 20 6C 69 6E 65 20 34 30 20 69 73    on in line 40 is
012C40:  20 66 61 6C 73 65 2C 20 69 2E 65 2E 20 77 68 65     false, i.e. whe
012C50:  6E 0D 0A 20 20 20 6F 6E 65 20 6F 66 20 74 68 65    n..   one of the
012C60:  20 74 68 72 65 65 20 73 65 6C 65 63 74 69 6F 6E     three selection
012C70:  20 6B 65 79 73 20 69 73 20 20 70 72 65 73 73 65     keys is  presse
012C80:  64 2E 20 20 54 68 65 20 66 69 72 73 74 20 74 68    d.  The first th
012C90:  69 6E 67 20 6C 69 6E 65 20 35 30 20 64 6F 65 73    ing line 50 does
012CA0:  0D 0A 20 20 20 69 73 20 63 61 6C 6C 20 74 68 65    ..   is call the
012CB0:  20 73 75 62 72 6F 75 74 69 6E 65 20 69 6E 20 6C     subroutine in l
012CC0:  69 6E 65 20 38 30 20 20 77 68 69 63 68 20 77 61    ine 80  which wa
012CD0:  69 74 73 20 75 6E 74 69 6C 20 74 68 65 20 75 73    its until the us
012CE0:  65 72 20 68 61 73 20 72 65 6C 65 61 73 65 64 0D    er has released.
012CF0:  0A 20 20 20 74 68 65 20 73 65 6C 65 63 74 69 6F    .   the selectio
012D00:  61 74 20 77 69 6C 6C 20 67 69 76 65 20 75 73 20    at will give us 
012D10:  30 2C 20 32 30 2C 20 34 30 2C 0D 0A 20 20 20 36    0, 20, 40,..   6
012D20:  30 2C 20 77 68 69 63 68 20 69 73 20 74 68 65 20    0, which is the 
012D30:  63 6F 72 72 65 63 74 20 73 65 70 61 72 61 74 69    correct separati
012D40:  6F 6E 20 66 6F 72 20 20 74 68 65 20 74 65 78 74    on for  the text
012D50:  20 63 75 72 73 6F 72 2E 20 20 57 65 20 6A 75 73     cursor.  We jus
012D60:  74 20 6E 65 65 64 20 74 6F 0D 0A 20 20 20 61 64    t need to..   ad
012D70:  64 20 31 20 74 6F 20 67 65 74 20 74 68 65 20 72    d 1 to get the r
012D80:  69 67 68 74 20 74 65 78 74 20 63 6F 6F 72 64 69    ight text coordi
012D90:  6E 61 74 65 2E 20 20 20 54 72 79 20 20 69 74 20    nate.   Try  it 
012DA0:  6F 75 74 20 69 6E 20 73 74 61 67 65 73 20 77 69    out in stages wi
012DB0:  74 68 20 61 20 66 65 77 0D 0A 20 20 20 65 78 61    th a few..   exa
012DC0:  6D 70 6C 65 20 78 20 76 61 6C 75 65 73 20 69 66    mple x values if
012DD0:  20 79 6F 75 20 6C 69 6B 65 2C 20 73 6F 20 74 68     you like, so th
012DE0:  61 74 20 79 6F 75 20 63 61 6E 20 73 65 65 20 68    at you can see h
012DF0:  6F 77 20 69 74 20 77 6F 72 6B 73 2E 0D 0A 0D 0A    ow it works.....
012E00:  20 20 20 54 68 65 20 65 78 70 72 65 73 73 69 6F       The expressio
012E10:  6E 20 66 6F 72 20 71 20 69 73 20 73 69 6D 70 6C    n for q is simpl
012E20:  65 72 20 69 6E 20 6F 6E 65 20 77 61 79 20 2D 20    er in one way - 
012E30:  61 6C 6C 20 77 65 20 77 61 6E 74 20 74 6F 20 64    all we want to d
012E40:  6F 20 69 73 20 73 65 74 20 71 20 74 6F 0D 0A 20    o is set q to.. 
012E50:  20 20 62 65 20 74 68 65 20 74 65 78 74 20 6C 69      be the text li
012E60:  6E 65 20 74 68 61 74 20 74 68 65 20 67 72 61 70    ne that the grap
012E70:  68 69 63 73 20 20 63 75 72 73 6F 72 20 20 69 73    hics  cursor  is
012E80:  20 6F 6E 2E 20 20 54 68 65 72 65 20 61 72 65 20     on.  There are 
012E90:  34 30 30 20 67 72 61 70 68 69 63 73 0D 0A 20 20    400 graphics..  
012EA0:  20 63 6F 6F 72 64 69 6E 61 74 65 73 20 76 65 72     coordinates ver
012EB0:  74 69 63 61 6C 6C 79 2C 20 61 6E 64 20 32 35 20    tically, and 25 
012EC0:  20 74 65 78 74 20 20 63 6F 6F 72 64 69 6E 61 74     text  coordinat
012ED0:  65 73 2E 20 20 20 59 6F 75 20 20 6D 69 67 68 74    es.   You  might
012EE0:  20 74 68 69 6E 6B 20 74 68 61 74 0D 0A 20 20 20     think that..   
012EF0:  73 69 6E 63 65 20 74 68 65 72 65 20 61 72 65 20    since there are 
012F00:  6E 20 6B 65 79 20 61 6E 64 20 74 68 65 6E 20 63    n key and then c
012F10:  6C 65 61 72 73 20 74 68 65 20 20 69 6E 70 75 74    lears the  input
012F20:  20 62 75 66 66 65 72 2E 20 20 54 68 65 6E 20 6C     buffer.  Then l
012F30:  69 6E 65 20 35 30 20 72 65 6D 6F 76 65 73 0D 0A    ine 50 removes..
012F40:  20 20 20 74 68 65 20 70 6F 69 6E 74 65 72 20 66       the pointer f
012F50:  72 6F 6D 20 74 68 65 20 73 63 72 65 65 6E 20 62    rom the screen b
012F60:  65 66 6F 72 65 20 74 72 79 69 6E 67 20 74 6F 20    efore trying to 
012F70:  77 6F 72 6B 20 6F 75 74 20 77 68 61 74 20 74 68    work out what th
012F80:  65 20 75 73 65 72 20 77 61 6E 74 65 64 0D 0A 20    e user wanted.. 
012F90:  20 20 74 6F 20 73 65 6C 65 63 74 2E 0D 0A 0D 0A      to select.....
012FA0:  20 20 20 57 68 65 6E 20 61 20 73 65 6C 65 63 74       When a select
012FB0:  69 6F 6E 20 6B 65 79 20 69 73 20 70 72 65 73 73    ion key is press
012FC0:  65 64 2C 20 74 68 65 72 65 20 61 72 65 20 74 68    ed, there are th
012FD0:  72 65 65 20 70 6F 73 73 69 62 6C 65 20 63 61 73    ree possible cas
012FE0:  65 73 3A 0D 0A 0D 0A 20 20 20 31 2E 20 54 68 65    es:....   1. The
012FF0:  20 70 6F 69 6E 74 65 72 20 69 73 20 6F 76 65 72     pointer is over
013000:  20 61 20 66 69 6C 65 6E 61 6D 65 2E 0D 0A 20 20     a filename...  
013010:  20 32 2E 20 54 68 65 20 70 6F 69 6E 74 65 72 20     2. The pointer 
013020:  69 73 20 6F 76 65 72 20 74 68 65 20 22 75 73 65    is over the "use
013030:  72 20 20 30 22 20 73 74 61 74 65 6D 65 6E 74 2E    r  0" statement.
013040:  0D 0A 20 20 20 33 2E 20 54 68 65 20 70 6F 69 6E    ..   3. The poin
013050:  74 65 72 20 69 73 20 6F 76 65 72 20 6E 65 69 74    ter is over neit
013060:  68 65 72 20 6F 66 20 74 68 65 20 61 62 6F 76 65    her of the above
013070:  2E 0D 0A 0D 0A 20 20 20 54 6F 20 66 69 6E 64 20    .....   To find 
013080:  6F 75 74 20 77 68 69 63 68 20 63 61 73 65 20 77    out which case w
013090:  65 20 68 61 76 65 2C 20 20 77 65 20 20 6E 65 65    e have,  we  nee
0130A0:  64 20 74 6F 20 72 65 61 64 20 73 6F 6D 65 20 63    d to read some c
0130B0:  68 61 72 61 63 74 65 72 73 20 66 72 6F 6D 20 74    haracters from t
0130C0:  68 65 0D 0A 20 20 20 73 63 72 65 65 6E 2E 20 20    he..   screen.  
0130D0:  41 73 20 65 78 70 6C 61 69 6E 65 64 20 69 6E 20    As explained in 
0130E0:  74 68 65 20 70 72 65 76 69 6F 75 73 20 61 72 74    the previous art
0130F0:  69 63 6C 65 2C 20 20 77 65 20 68 61 76 65 20 61    icle,  we have a
013100:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
013110:  10 00 01 00 02 09 4E E5 10 00 C3 02 00 00 00 02    ......N.........
013120:  10 00 C8 02 00 00 00 02 10 00 C4 02 00 00 00 02    ................
013130:  10 00 C9 02 00 00 00 02 10 00 C5 02 00 00 00 02    ................
013140:  10 00 C1 02 00 00 00 02 10 00 C6 02 00 00 00 02    ................
013150:  10 00 C2 02 00 00 00 02 10 00 C7 02 00 00 00 02    ................
013160:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
013170:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
013180:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
013190:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0131A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0131B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0131C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0131D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0131E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0131F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
013200:  65 20 32 30 29 2E 0D 0A 20 20 20 54 68 65 20 6C    e 20)...   The l
013210:  69 6E 65 20 75 73 65 64 20 74 6F 20 6C 6F 6F 6B    ine used to look
013220:  20 61 20 6C 6F 74 20 73 69 6D 70 6C 65 72 20 20     a lot simpler  
013230:  62 75 74 20 4D 61 74 74 68 65 77 20 63 61 6D 65    but Matthew came
013240:  20 75 70 20 77 69 74 68 20 61 6E 20 69 6E 67 65     up with an inge
013250:  6E 69 6F 75 73 0D 0A 20 20 20 77 61 79 20 6F 66    nious..   way of
013260:  20 6D 61 6B 69 6E 67 20 69 74 20 6C 65 73 73 20     making it less 
013270:  74 68 61 6E 20 20 72 65 61 64 61 62 6C 65 2E 20    than  readable. 
013280:  20 20 49 66 20 20 66 6F 72 20 20 74 68 65 20 20      If  for  the  
013290:  6D 6F 6D 65 6E 74 20 77 65 20 69 6D 61 67 69 6E    moment we imagin
0132A0:  65 20 69 74 0D 0A 20 20 20 73 61 79 73 20 22 57    e it..   says "W
0132B0:  48 49 4C 45 20 75 3C 30 20 4F 52 20 75 3E 31 35    HILE u<0 OR u>15
0132C0:  22 20 72 61 74 68 65 72 20 20 74 68 61 6E 20 20    " rather  than  
0132D0:  22 57 48 49 4C 45 20 20 75 20 20 41 4E 44 20 2D    "WHILE  u  AND -
0132E0:  31 36 22 20 74 68 65 6E 20 69 74 20 77 69 6C 6C    16" then it will
0132F0:  20 62 65 0D 0A 20 20 20 65 61 73 69 65 72 20 74     be..   easier t
013300:  6F 20 65 78 70 6C 61 69 6E 2E 0D 0A 0D 0A 20 20    o explain.....  
013310:  20 49 6E 69 74 69 61 6C 6C 79 20 75 20 69 73 20     Initially u is 
013320:  73 65 74 20 74 6F 20 62 65 20 31 36 20 28 61 6E    set to be 16 (an
013330:  20 20 69 6E 76 61 6C 69 64 20 20 75 73 65 72 20      invalid  user 
013340:  6E 75 6D 62 65 72 29 20 73 6F 20 74 68 61 74 20    number) so that 
013350:  74 68 65 20 63 6F 64 65 20 69 6E 0D 0A 20 20 20    the code in..   
013360:  74 68 65 20 57 48 49 4C 45 2D 57 45 4E 44 20 6C    the WHILE-WEND l
013370:  6F 6F 70 20 69 73 20 65 78 65 63 75 74 65 64 20    oop is executed 
013380:  61 74 20 6C 65 61 73 74 20 6F 6E 63 65 2E 20 20    at least once.  
013390:  54 68 65 20 63 75 72 73 6F 72 20 69 73 20 4C 4F    The cursor is LO
0133A0:  43 41 54 45 64 20 6A 75 73 74 0D 0A 20 20 20 75    CATEd just..   u
0133B0:  6E 64 65 72 20 74 68 65 20 64 69 73 63 20 63 61    nder the disc ca
0133C0:  74 61 6C 6F 67 75 65 20 20 28 75 73 69 6E 67 20    talogue  (using 
0133D0:  20 76 29 20 20 61 6E 64 20 20 74 68 65 20 20 22     v)  and  the  "
0133E0:  55 73 65 72 3A 22 20 70 72 6F 6D 70 74 20 69 73    User:" prompt is
0133F0:  20 70 72 69 6E 74 65 64 2E 0D 0A 20 20 20 54 68     printed...   Th
013400:  20 20 53 65 65 20 61 20 6C 61 74 65 72 20 61 72      See a later ar
013410:  74 69 63 6C 65 20 66 6F 72 20 6D 6F 72 65 20 64    ticle for more d
013420:  65 74 61 69 6C 73 2E 3E 3E 0D 0A 0D 0A 20 20 20    etails.>>....   
013430:  54 6F 20 77 6F 72 6B 20 6F 75 74 20 22 75 20 41    To work out "u A
013440:  4E 44 20 2D 31 36 22 2C 20 77 65 20 77 72 69 74    ND -16", we writ
013450:  65 20 64 6F 77 6E 20 20 74 68 65 20 76 61 6C 75    e down  the valu
013460:  65 20 6F 66 20 75 20 69 6E 20 62 69 6E 61 72 79    e of u in binary
013470:  2C 20 77 69 74 68 20 2D 31 36 0D 0A 20 20 20 77    , with -16..   w
013480:  72 69 74 74 65 6E 20 6F 75 74 20 62 65 6E 65 61    ritten out benea
013490:  74 68 2C 20 61 6E 64 20 41 4E 44 20 65 61 63 68    th, and AND each
0134A0:  20 62 69 74 20 20 6F 66 20 75 20 69 6E 20 74 75     bit  of u in tu
0134B0:  72 6E 20 77 69 74 68 20 74 68 65 20 63 6F 72 72    rn with the corr
0134C0:  65 73 70 6F 6E 64 69 6E 67 0D 0A 20 20 20 62 69    esponding..   bi
0134D0:  74 20 62 65 6C 6F 77 2E 20 20 57 68 65 6E 20 79    t below.  When y
0134E0:  6F 75 20 41 4E 44 20 74 77 6F 20 62 69 74 73 20    ou AND two bits 
0134F0:  74 68 65 6E 20 79 6F 75 20 6F 6E 6C 79 20 67 65    then you only ge
013500:  74 20 61 20 6F 6E 65 20 61 73 20 74 68 65 20 72    t a one as the r
013510:  65 73 75 6C 74 20 69 66 0D 0A 20 20 20 62 6F 74    esult if..   bot
013520:  68 20 74 68 65 20 62 69 74 73 20 77 65 72 65 20    h the bits were 
013530:  6F 6E 65 2E 20 20 46 6F 72 20 65 78 61 6D 70 6C    one.  For exampl
013540:  65 2C 20 69 66 20 75 20 69 73 20 38 37 20 77 65    e, if u is 87 we
013550:  20 67 65 74 3A 0D 0A 0D 0A 20 20 20 75 20 20 20     get:....   u   
013560:  20 20 20 20 20 20 20 30 30 30 30 30 30 30 30 30           000000000
013570:  31 30 31 30 31 31 31 0D 0A 20 20 20 2D 31 36 20    1010111..   -16 
013580:  20 20 20 20 20 20 20 31 31 31 31 31 31 31 31 31           111111111
013590:  31 31 31 30 30 30 30 0D 0A 20 20 20 20 20 20 20    1110000..       
0135A0:  20 20 20 20 20 20 20 2D 2D 2D 2D 2D 2D 2D 2D 2D           ---------
0135B0:  2D 2D 2D 2D 2D 2D 2D 0D 0A 20 20 20 75 20 41 4E    -------..   u AN
0135C0:  44 20 2D 31 36 20 20 30 30 30 30 30 30 30 30 30    D -16  000000000
0135D0:  31 30 31 30 30 30 30 0D 0A 0D 0A 20 20 20 49 74    1010000....   It
0135E0:  20 69 73 20 71 75 69 74 65 20 65 61 73 79 20 74     is quite easy t
0135F0:  6F 20 73 65 65 20 74 68 61 74 20 75 20 20 41 4E    o see that u  AN
013600:  65 72 65 20 61 72 65 20 74 77 6F 20 74 68 69 6E    ere are two thin
013610:  67 73 20 74 6F 20 6E 6F 74 69 63 65 20 61 62 6F    gs to notice abo
013620:  75 74 20 20 74 68 65 20 50 52 49 4E 54 20 73 74    ut  the PRINT st
013630:  61 74 65 6D 65 6E 74 2C 20 66 69 72 73 74 6C 79    atement, firstly
013640:  20 74 68 61 74 20 77 65 0D 0A 20 20 20 70 72 69     that we..   pri
013650:  6E 74 20 43 48 52 24 28 32 30 29 20 74 6F 6F 2E    nt CHR$(20) too.
013660:  20 20 43 68 61 72 61 63 74 65 72 20 32 30 20 69      Character 20 i
013670:  73 20 20 61 20 63 6F 6E 74 72 6F 6C 20 63 68 61    s  a control cha
013680:  72 61 63 74 65 72 20 77 68 69 63 68 20 63 6C 65    racter which cle
013690:  61 72 73 20 74 68 65 0D 0A 20 20 20 77 68 6F 6C    ars the..   whol
0136A0:  65 20 6F 66 20 74 68 65 20 73 63 72 65 65 6E 20    e of the screen 
0136B0:  66 72 6F 6D 20 74 68 65 20 20 63 75 72 73 6F 72    from the  cursor
0136C0:  20 20 6F 6E 77 61 72 64 73 2E 20 20 54 68 69 73      onwards.  This
0136D0:  20 65 6E 73 75 72 65 73 20 74 68 61 74 20 74 68     ensures that th
0136E0:  65 72 65 20 69 73 0D 0A 20 20 20 6E 6F 20 6D 65    ere is..   no me
0136F0:  73 73 20 61 6E 79 77 68 65 72 65 2E 20 20 53 65    ss anywhere.  Se
013700:  63 6F 6E 64 6C 79 2C 20 74 68 65 72 65 20 69 73    condly, there is
013710:  20 61 20 20 73 65 6D 69 63 6F 6C 6F 6E 20 61 74     a  semicolon at
013720:  20 74 68 65 20 65 6E 64 2E 20 20 54 68 69 73 20     the end.  This 
013730:  6D 65 61 6E 73 0D 0A 20 20 20 74 68 61 74 20 74    means..   that t
013740:  68 65 20 63 75 72 73 6F 72 20 72 65 6D 61 69 6E    he cursor remain
013750:  73 20 6F 6E 20 74 68 61 74 20 20 6C 69 6E 65 20    s on that  line 
013760:  20 66 6F 72 20 74 68 65 20 69 6E 70 75 74 20 72     for the input r
013770:  61 74 68 65 72 20 74 68 61 6E 20 62 65 67 69 6E    ather than begin
013780:  6E 69 6E 67 0D 0A 20 20 20 61 67 61 69 6E 20 61    ning..   again a
013790:  74 20 74 68 65 20 73 74 61 72 74 20 6F 66 20 74    t the start of t
0137A0:  68 65 20 6E 65 78 74 20 6C 69 6E 65 2E 0D 0A 0D    he next line....
0137B0:  0A 20 20 20 54 68 65 20 6E 65 78 74 20 73 74 61    .   The next sta
0137C0:  74 65 6D 65 6E 74 20 69 73 20 22 4C 49 4E 45 20    tement is "LINE 
0137D0:  49 4E 50 55 54 20 75 24 22 2E 20 20 20 49 6E 70    INPUT u$".   Inp
0137E0:  75 74 20 69 6E 74 6F 20 61 20 73 74 72 69 6E 67    ut into a string
0137F0:  20 77 61 73 20 63 68 6F 73 65 6E 20 73 6F 0D 0A     was chosen so..
013800:  44 20 20 2D 31 36 20 77 69 6C 6C 20 6F 6E 6C 79    D  -16 will only
013810:  20 62 65 20 7A 65 72 6F 20 77 68 65 6E 20 74 68     be zero when th
013820:  65 20 62 69 6E 61 72 79 0D 0A 20 20 20 66 6F 72    e binary..   for
013830:  6D 20 6F 66 20 75 20 68 61 73 20 7A 65 72 6F 73    m of u has zeros
013840:  20 77 68 65 72 65 20 2D 31 36 20 20 68 61 73 20     where -16  has 
013850:  20 6F 6E 65 73 2E 20 20 20 57 68 65 72 65 20 20     ones.   Where  
013860:  2D 31 36 20 68 61 73 20 7A 65 72 6F 73 2C 20 75    -16 has zeros, u
013870:  20 63 61 6E 20 62 65 0D 0A 20 20 20 61 6E 79 74     can be..   anyt
013880:  68 69 6E 67 20 77 65 20 6C 69 6B 65 2C 20 61 6E    hing we like, an
013890:  64 20 69 74 20 73 6F 20 68 61 70 70 65 6E 73 20    d it so happens 
0138A0:  74 68 61 74 20 74 68 65 20 6E 75 6D 62 65 72 73    that the numbers
0138B0:  20 77 69 74 68 20 7A 65 72 6F 73 20 69 6E 20 74     with zeros in t
0138C0:  68 65 20 74 6F 70 0D 0A 20 20 20 74 77 65 6C 76    he top..   twelv
0138D0:  65 20 62 69 74 73 20 61 6E 64 20 7A 65 72 6F 73    e bits and zeros
0138E0:  20 61 6E 64 20 6F 6E 65 73 20 69 6E 20 20 74 68     and ones in  th
0138F0:  65 20 20 62 6F 74 74 6F 6D 20 66 6F 75 72 20 62    e  bottom four b
013900:  69 74 73 20 61 72 65 20 74 68 65 20 6E 75 6D 62    its are the numb
013910:  65 72 73 20 30 0D 0A 20 20 20 74 6F 20 31 35 2C    ers 0..   to 15,
013920:  20 74 68 65 20 76 61 6C 69 64 20 75 73 65 72 20     the valid user 
013930:  6E 75 6D 62 65 72 73 21 0D 0A 0D 0A 20 20 20 43    numbers!....   C
013940:  4F 4D 50 4C 49 4D 45 4E 54 41 52 59 20 4D 49 4E    OMPLIMENTARY MIN
013950:  54 53 0D 0A 20 20 20 54 68 65 20 41 6D 73 74 72    TS..   The Amstr
013960:  61 64 20 75 73 65 73 20 20 74 68 65 20 20 63 6F    ad uses  the  co
013970:  6D 6D 6F 6E 20 20 74 77 6F 27 73 20 20 63 6F 6D    mmon  two's  com
013980:  70 6C 65 6D 65 6E 74 20 20 6D 65 74 68 6F 64 20    plement  method 
013990:  20 74 6F 20 73 74 6F 72 65 20 69 6E 74 65 67 65     to store intege
0139A0:  72 0D 0A 20 20 20 76 61 72 69 61 62 6C 65 73 2E    r..   variables.
0139B0:  20 20 49 74 20 69 73 20 63 61 6C 6C 65 64 20 20      It is called  
0139C0:  74 77 6F 27 73 20 20 63 6F 6D 70 6C 65 6D 65 6E    two's  complemen
0139D0:  74 20 20 74 6F 20 20 64 69 73 74 69 6E 67 75 69    t  to  distingui
0139E0:  73 68 20 69 74 20 66 72 6F 6D 20 6F 6E 65 27 73    sh it from one's
0139F0:  0D 0A 20 20 20 63 6F 6D 70 6C 65 6D 65 6E 74 20    ..   complement 
013A00:  20 20 20 74 68 61 74 20 6E 6F 20 65 72 72 6F 72       that no error
013A10:  73 20 6F 63 63 75 72 20 69 66 20 73 6F 6D 65 74    s occur if somet
013A20:  68 69 6E 67 20 6F 74 68 65 72 20 74 68 61 6E 20    hing other than 
013A30:  61 20 64 69 67 69 74 20 69 73 20 74 79 70 65 64    a digit is typed
013A40:  2E 20 20 55 73 69 6E 67 20 4C 49 4E 45 0D 0A 20    .  Using LINE.. 
013A50:  20 20 49 4E 50 55 54 20 6D 65 61 6E 73 20 74 68      INPUT means th
013A60:  61 74 20 20 65 76 65 6E 20 20 63 6F 6D 6D 61 73    at  even  commas
013A70:  20 20 63 61 6E 20 20 62 65 20 20 74 79 70 65 64      can  be  typed
013A80:  20 20 61 6E 64 20 20 69 74 20 20 77 69 6C 6C 20      and  it  will 
013A90:  6E 6F 74 20 63 6F 6D 70 6C 61 69 6E 0D 0A 20 20    not complain..  
013AA0:  20 28 6F 72 64 69 6E 61 72 79 20 49 4E 50 55 54     (ordinary INPUT
013AB0:  20 77 69 6C 6C 20 67 69 76 65 20 61 6E 20 20 65     will give an  e
013AC0:  72 72 6F 72 20 20 69 66 20 20 61 20 20 63 6F 6D    rror  if  a  com
013AD0:  6D 61 20 20 69 73 20 75 73 65 64 20 77 68 65 6E    ma  is used when
013AE0:  20 69 74 20 64 6F 65 73 6E 27 74 0D 0A 20 20 20     it doesn't..   
013AF0:  65 78 70 65 63 74 20 69 74 29 2E 20 20 57 68 69    expect it).  Whi
013B00:  6C 65 20 6D 6F 73 74 20 75 73 65 72 73 20 77 69    le most users wi
013B10:  6C 6C 20 20 64 6F 20 20 77 68 61 74 20 77 65 20    ll  do  what we 
013B20:  65 78 70 65 63 74 2C 20 67 6F 6F 64 20 70 72 6F    expect, good pro
013B30:  67 72 61 6D 73 20 63 6F 70 65 0D 0A 20 20 20 77    grams cope..   w
013B40:  69 74 68 20 74 68 65 20 75 6E 65 78 70 65 63 74    ith the unexpect
013B50:  65 64 20 74 6F 6F 2E 0D 0A 0D 0A 20 20 20 54 6F    ed too.....   To
013B60:  20 66 69 6E 64 20 6F 75 74 20 77 68 61 74 20 6E     find out what n
013B70:  75 6D 62 65 72 20 77 61 73 20 74 79 70 65 64 2C    umber was typed,
013B80:  20 77 65 20 73 65 74 20 20 75 20 74 6F 20 62 65     we set  u to be
013B90:  20 74 68 65 20 6E 75 6D 65 72 69 63 20 56 41 4C     the numeric VAL
013BA0:  75 65 20 6F 66 20 75 24 0D 0A 20 20 20 61 6E 64    ue of u$..   and
013BB0:  20 74 68 65 20 57 45 4E 44 20 74 68 65 6E 20 6C     the WEND then l
013BC0:  6F 6F 70 73 20 62 61 63 6B 20 69 66 20 75 20 69    oops back if u i
013BD0:  73 20 6E 6F 74 20 61 20 76 61 6C 69 64 20 75 73    s not a valid us
013BE0:  65 72 20 6E 75 6D 62 65 72 2E 20 20 49 66 20 74    er number.  If t
013BF0:  68 65 20 75 73 65 72 0D 0A 20 20 20 64 6F 65 73    he user..   does
013C00:  20 6F 66 20 74 68 65 20 73 63 72 65 65 6E 20 2D     of the screen -
013C10:  20 74 68 65 0D 0A 20 20 20 73 61 6D 65 20 61 73     the..   same as
013C20:  20 74 68 65 20 74 65 78 74 20 63 75 72 73 6F 72     the text cursor
013C30:  2E 20 20 57 65 20 63 61 6E 20 74 68 65 6E 20 20    .  We can then  
013C40:  64 6F 20 69 6E 74 65 67 65 72 20 64 69 76 69 73    do integer divis
013C50:  69 6F 6E 20 62 79 20 31 36 20 61 6E 64 20 61 64    ion by 16 and ad
013C60:  64 20 31 0D 0A 20 20 20 74 6F 20 66 69 6E 69 73    d 1..   to finis
013C70:  68 20 6F 66 66 2E 0D 0A 0D 0A 20 20 20 41 66 74    h off.....   Aft
013C80:  65 72 20 70 20 61 6E 64 20 71 20 68 61 76 65 20    er p and q have 
013C90:  62 65 65 6E 20 63 61 6C 63 75 6C 61 74 65 64 2C    been calculated,
013CA0:  20 74 68 65 20 20 74 65 78 74 20 63 75 72 73 6F     the  text curso
013CB0:  72 20 69 73 20 4C 4F 43 41 54 45 64 20 61 74 20    r is LOCATEd at 
013CC0:  70 2C 71 20 61 6E 64 0D 0A 20 20 20 74 68 65 20    p,q and..   the 
013CD0:  6D 61 63 68 69 6E 65 20 63 6F 64 65 20 63 61 6C    machine code cal
013CE0:  6C 65 64 20 74 6F 20 70 75 74 20 20 74 68 65 20    led to put  the 
013CF0:  20 6E 65 78 74 20 20 31 32 20 63 68 61 72 61 63     next  12 charac
013D00:  74 65 72 73 20 69 6E 74 6F 20 66 24 2E 20 20 57    ters into f$.  W
013D10:  65 20 74 68 65 6E 0D 0A 20 20 20 68 69 74 20 61    e then..   hit a
013D20:  20 57 45 4E 44 2E 20 20 54 68 65 20 57 45 4E 44     WEND.  The WEND
013D30:  20 72 65 66 65 72 73 20 62 61 63 6B 20 74 6F 20     refers back to 
013D40:  74 68 65 20 73 65 63 6F 6E 64 20 57 48 49 4C 45    the second WHILE
013D50:  20 63 6F 6E 64 69 74 69 6F 6E 20 69 6E 20 6C 69     condition in li
013D60:  6E 65 20 33 30 0D 0A 20 20 20 74 68 61 74 20 73    ne 30..   that s
013D70:  61 79 73 20 74 6F 20 6B 65 65 70 20 6C 6F 6F 70    ays to keep loop
013D80:  69 6E 67 20 75 6E 74 69 6C 20 65 69 74 68 65 72    ing until either
013D90:  20 74 68 65 20 20 39 74 68 20 63 68 61 72 61 63     the  9th charac
013DA0:  74 65 72 20 6F 66 20 66 24 20 69 73 20 61 20 66    ter of f$ is a f
013DB0:  75 6C 6C 2D 0D 0A 20 20 20 73 74 6F 70 20 28 6F    ull-..   stop (o
013DC0:  6E 20 61 20 66 69 6C 65 6E 61 6D 65 29 2C 20 6F    n a filename), o
013DD0:  72 20 74 68 65 20 38 74 68 20 20 63 68 61 72 61    r the 8th  chara
013DE0:  63 74 65 72 20 20 69 73 20 20 61 20 63 6F 6C 6F    cter  is  a colo
013DF0:  6E 20 28 61 74 20 74 68 65 20 22 44 72 69 76 65    n (at the "Drive
013E00:  6E 27 74 20 74 79 70 65 20 61 6E 79 74 68 69 6E    n't type anythin
013E10:  67 20 61 6E 64 20 6A 75 73 74 20 70 72 65 73 73    g and just press
013E20:  65 73 20 74 68 65 20 45 6E 74 65 72 2F 52 65 74    es the Enter/Ret
013E30:  75 72 6E 20 6B 65 79 20 74 68 65 6E 20 75 20 77    urn key then u w
013E40:  69 6C 6C 20 62 65 0D 0A 20 20 20 73 65 74 20 74    ill be..   set t
013E50:  6F 20 30 20 2D 20 61 20 76 61 6C 69 64 20 75 73    o 0 - a valid us
013E60:  65 72 20 6E 75 6D 62 65 72 20 20 2D 20 20 61 6E    er number  -  an
013E70:  64 20 20 75 24 20 77 69 6C 6C 20 62 65 20 65 6D    d  u$ will be em
013E80:  70 74 79 2E 20 20 49 6E 20 74 68 69 73 20 63 61    pty.  In this ca
013E90:  73 65 20 77 65 0D 0A 20 20 20 61 73 73 75 6D 65    se we..   assume
013EA0:  20 74 68 61 74 20 74 68 65 20 75 73 65 72 20 64     that the user d
013EB0:  69 64 20 6E 6F 74 20 72 65 61 6C 6C 79 20 77 61    id not really wa
013EC0:  6E 74 20 20 74 6F 20 63 68 61 6E 67 65 20 74 68    nt  to change th
013ED0:  65 20 75 73 65 72 20 6E 75 6D 62 65 72 2E 20 20    e user number.  
013EE0:  41 73 20 61 0D 0A 20 20 20 70 72 6F 67 72 61 6D    As a..   program
013EF0:  6D 65 72 20 69 74 20 69 73 20 77 69 73 65 20 20    mer it is wise  
013F00:  74 6F 20 20 72 65 61 6C 69 73 65 20 20 74 68 61    to  realise  tha
013F10:  74 20 20 75 73 65 72 73 20 20 64 6F 20 20 6E 6F    t  users  do  no
013F20:  74 20 61 6C 77 61 79 73 20 73 65 6C 65 63 74 20    t always select 
013F30:  74 68 65 0D 0A 20 20 20 6F 70 74 69 6F 6E 73 20    the..   options 
013F40:  74 68 65 79 20 69 6E 74 65 6E 64 20 74 6F 2C 20    they intend to, 
013F50:  61 6E 64 20 77 65 20 20 63 61 6E 20 20 61 6E 74    and we  can  ant
013F60:  69 63 69 70 61 74 65 20 20 74 68 69 73 20 62 79    icipate  this by
013F70:  20 70 72 6F 76 69 64 69 6E 67 20 61 6E 20 65 61     providing an ea
013F80:  73 79 0D 0A 20 20 20 77 61 79 20 6F 75 74 20 69    sy..   way out i
013F90:  6E 20 73 75 63 68 20 73 69 74 75 61 74 69 6F 6E    n such situation
013FA0:  73 2E 20 20 20 54 68 61 74 20 20 69 73 20 20 77    s.   That  is  w
013FB0:  68 79 20 20 74 68 65 20 20 72 65 73 74 20 20 6F    hy  the  rest  o
013FC0:  66 20 74 68 65 20 6C 69 6E 65 20 69 73 20 6E 6F    f the line is no
013FD0:  74 0D 0A 20 20 20 65 78 65 63 75 74 65 64 20 69    t..   executed i
013FE0:  66 20 75 24 20 69 73 20 65 6D 70 74 79 2E 0D 0A    f u$ is empty...
013FF0:  0D 0A 20 20 20 57 48 49 4C 45 20 41 57 41 59 20    ..   WHILE AWAY 
014000:  20 41 3A 0D 0A 20 20 20 75 73 65 72 20 20 30 22     A:..   user  0"
014010:  20 70 6F 73 69 74 69 6F 6E 29 2E 20 20 49 66 20     position).  If 
014020:  77 65 20 66 61 6C 6C 20 74 68 72 6F 75 67 68 20    we fall through 
014030:  20 74 68 65 20 57 45 4E 44 20 61 6E 64 20 74 68     the WEND and th
014040:  65 20 39 74 68 20 63 68 61 72 61 63 74 65 72 20    e 9th character 
014050:  69 73 0D 0A 20 20 20 61 20 66 75 6C 6C 2D 73 74    is..   a full-st
014060:  6F 70 20 74 68 65 6E 20 74 68 65 20 70 72 6F 67    op then the prog
014070:  72 61 6D 20 77 69 74 68 20 66 69 6C 65 6E 61 6D    ram with filenam
014080:  65 20 20 66 24 20 69 73 20 72 75 6E 20 28 61 73    e  f$ is run (as
014090:  20 64 69 73 63 75 73 73 65 64 20 69 6E 20 74 68     discussed in th
0140A0:  65 0D 0A 20 20 20 66 69 72 73 74 20 61 72 74 69    e..   first arti
0140B0:  63 6C 65 29 2E 20 20 4F 74 68 65 72 77 69 73 65    cle).  Otherwise
0140C0:  20 77 65 20 6E 65 65 64 20 74 6F 20 20 61 73 6B     we need to  ask
0140D0:  20 20 74 68 65 20 20 75 73 65 72 20 77 68 69 63      the  user whic
0140E0:  68 20 75 73 65 72 20 6E 75 6D 62 65 72 20 74 6F    h user number to
0140F0:  0D 0A 20 20 20 63 68 61 6E 67 65 20 74 6F 2E 0D    ..   change to..
014100:  0A 0D 0A 20 20 20 55 53 45 46 55 4C 20 55 53 45    ...   USEFUL USE
014110:  52 20 55 54 49 4C 49 54 59 0D 0A 20 20 20 4C 69    R UTILITY..   Li
014120:  6E 65 20 36 30 20 6C 6F 6F 70 73 20 75 6E 74 69    ne 60 loops unti
014130:  6C 20 61 20 76 61 6C 69 64 20 75 73 65 72 20 20    l a valid user  
014140:  6E 75 6D 62 65 72 20 69 73 20 65 6E 74 65 72 65    number is entere
014150:  64 2C 20 63 68 61 6E 67 65 73 20 74 68 65 20 75    d, changes the u
014160:  73 65 72 20 61 72 65 61 0D 0A 20 20 20 74 6F 20    ser area..   to 
014170:  74 68 61 74 20 6E 75 6D 62 65 72 2C 20 63 6C 65    that number, cle
014180:  61 72 73 20 74 68 65 20 73 63 72 65 65 6E 2C 20    ars the screen, 
014190:  20 72 65 63 61 74 61 6C 6F 67 75 65 73 20 20 74     recatalogues  t
0141A0:  68 65 20 64 69 73 63 20 61 6E 64 20 72 65 73 65    he disc and rese
0141B0:  74 73 20 76 20 74 6F 0D 0A 20 20 20 62 65 20 74    ts v to..   be t
0141C0:  68 65 20 79 2D 63 6F 6F 72 64 69 6E 61 74 65 20    he y-coordinate 
0141D0:  6F 66 20 74 68 65 20 74 65 78 74 20 20 63 75 72    of the text  cur
0141E0:  73 6F 72 20 20 28 76 20 20 69 73 20 69 6E 69 74    sor  (v  is init
0141F0:  69 61 6C 6C 79 20 73 65 74 20 69 6E 20 6C 69 6E    ially set in lin
014200:  54 48 45 20 54 49 4D 45 0D 0A 20 20 20 53 6F 20    THE TIME..   So 
014210:  77 68 79 20 64 6F 65 73 20 22 57 48 49 4C 45 20    why does "WHILE 
014220:  75 20 41 4E 44 20 2D 31 36 22 20 20 6D 65 61 6E    u AND -16"  mean
014230:  20 20 74 68 65 20 20 73 61 6D 65 20 61 73 20 22      the  same as "
014240:  57 48 49 4C 45 20 75 3C 30 20 4F 52 20 75 3E 31    WHILE u<0 OR u>1
014250:  35 22 3F 20 20 49 74 0D 0A 20 20 20 6D 61 79 20    5"?  It..   may 
014260:  6D 61 6B 65 20 6D 6F 72 65 20 73 65 6E 73 65 20    make more sense 
014270:  77 68 65 6E 20 79 6F 75 20 6B 6E 6F 77 20 20 74    when you know  t
014280:  68 61 74 20 2D 31 36 20 69 6E 20 62 69 6E 61 72    hat -16 in binar
014290:  79 20 69 73 20 31 31 31 31 31 31 31 31 31 31 31    y is 11111111111
0142A0:  31 30 30 30 30 2E 0D 0A 20 20 20 54 68 65 20 57    10000...   The W
0142B0:  48 49 4C 45 20 6C 6F 6F 70 20 77 69 6C 6C 20 6B    HILE loop will k
0142C0:  65 65 70 20 67 6F 69 6E 67 20 75 6E 74 69 6C 20    eep going until 
0142D0:  74 68 65 20 63 6F 6E 64 69 74 69 6F 6E 20 69 73    the condition is
0142E0:  20 66 61 6C 73 65 2C 20 77 68 69 63 68 20 69 6E     false, which in
0142F0:  20 74 68 69 73 0D 0A 20 20 20 63 61 73 65 20 68     this..   case h
014300:  61 70 70 65 6E 73 20 6F 6E 6C 79 20 77 68 65 6E    appens only when
014310:  20 22 75 20 41 4E 44 20 20 2D 31 36 22 20 20 69     "u AND  -16"  i
014320:  73 20 20 7A 65 72 6F 2E 20 20 3C 3C 57 65 20 68    s  zero.  <<We h
014330:  61 76 65 20 73 69 6E 63 65 20 64 69 73 63 6F 76    ave since discov
014340:  65 72 65 64 0D 0A 20 20 20 74 68 61 74 20 74 68    ered..   that th
014350:  69 73 20 63 6F 6E 64 69 74 69 6F 6E 20 64 6F 65    is condition doe
014360:  73 20 6E 6F 74 20 77 6F 72 6B 20 70 72 6F 70 65    s not work prope
014370:  72 6C 79 20 20 6F 6E 20 20 74 68 65 20 43 50 43    rly  on  the CPC
014380:  20 34 36 34 2C 20 61 73 20 74 68 65 72 65 20 69     464, as there i
014390:  73 20 61 0D 0A 20 20 20 62 75 67 20 69 6E 20 42    s a..   bug in B
0143A0:  41 53 49 43 20 31 2E 30 2E 20 20 49 66 20 79 6F    ASIC 1.0.  If yo
0143B0:  75 20 74 79 70 65 20 69 6E 20 61 20 20 76 61 6C    u type in a  val
0143C0:  75 65 20 6F 66 20 75 20 74 68 61 74 20 69 73 20    ue of u that is 
0143D0:  61 20 6D 75 6C 74 69 70 6C 65 20 6F 66 20 32 35    a multiple of 25
0143E0:  36 2C 0D 0A 20 20 20 69 74 20 77 69 6C 6C 20 6C    6,..   it will l
0143F0:  65 74 20 69 74 20 74 68 72 6F 75 67 68 2E 2E 2E    et it through...
014400:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
014410:  11 00 01 00 02 09 4E E5 11 00 C1 02 00 00 00 02    ......N.........
014420:  11 00 C6 02 00 00 00 02 11 00 C2 02 00 00 00 02    ................
014430:  11 00 C7 02 00 00 00 02 11 00 C3 02 00 00 00 02    ................
014440:  11 00 C8 02 00 00 00 02 11 00 C4 02 00 00 00 02    ................
014450:  11 00 C9 02 00 00 00 02 11 00 C5 02 00 00 00 02    ................
014460:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
014470:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
014480:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
014490:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0144A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0144B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0144C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0144D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0144E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0144F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
014500:  77 68 69 63 68 20 69 73 20 6E 65 76 65 72 20 75    which is never u
014510:  73 65 64 20 20 61 6E 79 77 61 79 21 20 20 20 54    sed  anyway!   T
014520:  68 65 20 20 62 61 73 69 63 20 69 64 65 61 20 69    he  basic idea i
014530:  73 20 74 68 61 74 20 6E 65 67 61 74 69 76 65 0D    s that negative.
014540:  0A 20 20 20 6E 75 6D 62 65 72 73 20 61 72 65 20    .   numbers are 
014550:  73 74 6F 72 65 64 20 61 73 20 6C 61 72 67 65 20    stored as large 
014560:  70 6F 73 69 74 69 76 65 20 6E 75 6D 62 65 72 73    positive numbers
014570:  2E 20 20 54 68 65 20 6C 61 72 67 65 73 74 20 6E    .  The largest n
014580:  75 6D 62 65 72 20 74 68 61 74 20 63 61 6E 0D 0A    umber that can..
014590:  20 20 20 62 65 20 73 74 6F 72 65 64 20 69 6E 20       be stored in 
0145A0:  31 36 20 62 69 74 73 20 20 69 73 20 20 36 35 35    16 bits  is  655
0145B0:  33 35 2C 20 20 61 6C 73 6F 20 20 6B 6E 6F 77 6E    35,  also  known
0145C0:  20 20 61 73 20 46 46 46 46 20 69 6E 20 68 65 78      as FFFF in hex
0145D0:  61 64 65 63 69 6D 61 6C 2C 20 61 6E 64 0D 0A 20    adecimal, and.. 
0145E0:  20 20 31 31 31 31 31 31 31 31 31 31 31 31 31 31      11111111111111
0145F0:  31 31 20 69 6E 20 62 69 6E 61 72 79 2E 20 20 57    11 in binary.  W
014600:  68 65 6E 20 77 65 20 75 73 65 20 74 77 6F 27 73    hen we use two's
014610:  20 63 6F 6D 70 6C 65 6D 65 6E 74 2C 20 77 65 20     complement, we 
014620:  70 72 65 74 65 6E 64 20 74 68 61 74 0D 0A 20 20    pretend that..  
014630:  20 69 74 20 6D 65 61 6E 73 20 6D 69 6E 75 73 20     it means minus 
014640:  31 20 69 6E 73 74 65 61 64 2E 20 20 53 69 6D 69    1 instead.  Simi
014650:  6C 61 72 6C 79 20 20 77 65 20 20 6C 65 74 20 20    larly  we  let  
014660:  36 35 35 33 34 20 73 74 61 6E 64 20 66 6F 72 20    65534 stand for 
014670:  2D 32 2E 20 20 36 35 35 32 35 2C 0D 0A 20 20 20    -2.  65525,..   
014680:  74 65 6E 20 6C 65 73 73 20 74 68 61 6E 20 36 35    ten less than 65
014690:  35 33 35 2C 20 73 74 61 6E 64 73 20 66 6F 72 20    535, stands for 
0146A0:  2D 31 31 2C 20 77 68 69 63 68 20 20 69 73 20 74    -11, which  is t
0146B0:  65 6E 20 6C 65 73 73 20 74 68 61 6E 20 2D 31 2C    en less than -1,
0146C0:  20 61 6E 64 20 73 6F 20 6F 6E 0D 0A 20 20 20 75     and so on..   u
0146D0:  6E 74 69 6C 20 77 65 20 6D 65 65 74 20 75 70 20    ntil we meet up 
0146E0:  73 6F 6D 65 77 68 65 72 65 20 69 6E 20 74 68 65    somewhere in the
0146F0:  20 6D 69 64 64 6C 65 3A 0D 0A 0D 0A 20 20 20 2D     middle:....   -
014700:  20 4E 65 78 74 20 6D 6F 6E 74 68 20 77 65 20 73     Next month we s
014710:  68 61 6C 6C 20 20 62 65 67 69 6E 20 20 64 69 73    hall  begin  dis
014720:  73 65 63 74 69 6E 67 20 61 6E 6F 74 68 65 72 20    secting another 
014730:  73 6D 61 6C 6C 20 70 72 6F 67 72 61 6D 2C 20 74    small program, t
014740:  69 6C 6C 0D 0A 20 20 20 74 68 65 6E 20 70 65 72    ill..   then per
014750:  68 61 70 73 20 79 6F 75 20 63 6F 75 6C 64 20 20    haps you could  
014760:  74 68 69 6E 6B 20 20 6F 66 20 20 61 20 20 67 6F    think  of  a  go
014770:  6F 64 20 20 72 65 61 73 6F 6E 20 20 77 68 79 20    od  reason  why 
014780:  20 74 68 65 72 65 20 69 73 6E 27 74 20 61 20 6B     there isn't a k
014790:  65 79 0D 0A 20 20 20 6E 75 6D 62 65 72 65 64 20    ey..   numbered 
0147A0:  37 38 3F 20 20 48 61 76 65 20 66 75 6E 21 0D 0A    78?  Have fun!..
0147B0:  0D 0A 0D 0A 31 30 20 44 45 46 49 4E 54 20 61 2D    ....10 DEFINT a-
0147C0:  7A 3A 4D 45 4D 4F 52 59 20 48 49 4D 45 4D 2D 33    z:MEMORY HIMEM-3
0147D0:  34 3A 61 3D 55 4E 54 28 48 49 4D 45 4D 2B 31 29    4:a=UNT(HIMEM+1)
0147E0:  3A 46 4F 52 20 78 3D 30 20 54 4F 20 33 33 3A 52    :FOR x=0 TO 33:R
0147F0:  45 41 44 20 61 24 3A 50 4F 4B 45 20 61 2B 78 2C    EAD a$:POKE a+x,
014800:  56 41 4C 0D 0A 20 20 20 28 22 26 22 2B 61 24 29    VAL..   ("&"+a$)
014810:  3A 4E 45 58 54 3A 44 41 54 41 20 43 44 2C 37 38    :NEXT:DATA CD,78
014820:  2C 42 42 2C 34 43 2C 44 44 2C 36 45 2C 30 2C 44    ,BB,4C,DD,6E,0,D
014830:  44 2C 36 36 2C 31 2C 34 36 2C 37 38 2C 42 37 2C    D,66,1,46,78,B7,
014840:  43 38 2C 32 33 2C 35 45 2C 32 33 2C 36 36 2C 36    C8,23,5E,23,66,6
014850:  42 2C 43 44 0D 0A 20 20 20 2C 36 30 2C 42 42 2C    B,CD..   ,60,BB,
014860:  37 37 2C 32 33 2C 43 2C 37 39 2C 45 35 2C 43 44    77,23,C,79,E5,CD
014870:  2C 36 46 2C 42 42 2C 45 31 2C 31 30 2C 46 32 2C    ,6F,BB,E1,10,F2,
014880:  43 39 0D 0A 32 30 20 43 41 4C 4C 20 26 42 42 34    C9..20 CALL &BB4
014890:  45 3A 43 41 4C 4C 20 26 42 43 30 32 3A 43 41 4C    E:CALL &BC02:CAL
0148A0:  4C 20 26 42 42 42 41 3A 4D 4F 44 45 20 32 3A 50    L &BBBA:MODE 2:P
0148B0:  52 49 4E 54 20 43 48 52 24 28 32 33 29 2B 43 48    RINT CHR$(23)+CH
0148C0:  52 24 28 31 29 3A 78 3D 31 30 30 3A 79 3D 32 39    R$(1):x=100:y=29
0148D0:  36 3A 43 0D 0A 20 20 20 41 54 3A 76 3D 56 50 4F    6:C..   AT:v=VPO
0148E0:  53 28 23 30 29 0D 0A 33 30 20 57 48 49 4C 45 20    S(#0)..30 WHILE 
0148F0:  31 3A 54 41 47 3A 66 24 3D 53 50 41 43 45 24 28    1:TAG:f$=SPACE$(
014900:  33 32 37 36 38 20 20 31 30 30 30 30 30 30 30 30    32768  100000000
014910:  30 30 30 30 30 30 30 0D 0A 20 20 20 2B 33 32 37    0000000..   +327
014920:  36 37 20 20 30 31 31 31 31 31 31 31 31 31 31 31    67  011111111111
014930:  31 31 31 31 0D 0A 0D 0A 20 20 20 41 73 20 79 6F    1111....   As yo
014940:  75 20 73 65 65 2C 20 74 68 65 20 6C 61 72 67 65    u see, the large
014950:  73 74 20 20 70 6F 73 69 74 69 76 65 20 20 6E 75    st  positive  nu
014960:  6D 62 65 72 20 20 61 6C 6C 6F 77 65 64 20 20 69    mber  allowed  i
014970:  6E 20 74 77 6F 27 73 20 63 6F 6D 70 6C 65 6D 65    n two's compleme
014980:  6E 74 20 69 73 0D 0A 20 20 20 33 32 37 36 37 2C    nt is..   32767,
014990:  20 61 6E 64 20 69 74 20 68 61 73 20 74 68 65 20     and it has the 
0149A0:  74 6F 70 20 62 69 74 20 7A 65 72 6F 20 69 6E 20    top bit zero in 
0149B0:  62 69 6E 61 72 79 2E 20 20 54 68 65 20 6D 6F 73    binary.  The mos
0149C0:  74 20 6E 65 67 61 74 69 76 65 20 6E 75 6D 62 65    t negative numbe
0149D0:  72 20 69 73 0D 0A 20 20 20 2D 33 32 37 36 38 2C    r is..   -32768,
0149E0:  20 77 68 69 63 68 20 68 61 73 20 74 68 65 20 74     which has the t
0149F0:  6F 70 20 62 69 74 20 73 65 74 2E 20 20 49 6E 20    op bit set.  In 
014A00:  66 61 63 74 2C 20 61 6C 6C 20 74 68 65 20 6E 65    fact, all the ne
014A10:  67 61 74 69 76 65 20 6E 75 6D 62 65 72 73 20 68    gative numbers h
014A20:  61 76 65 0D 0A 20 20 20 6F 6E 65 20 69 6E 20 74    ave..   one in t
014A30:  68 65 20 74 6F 70 20 62 69 74 2C 20 61 6E 64 20    he top bit, and 
014A40:  61 6C 6C 20 74 68 65 20 70 6F 73 69 74 69 76 65    all the positive
014A50:  20 6E 75 6D 62 65 72 73 20 68 61 76 65 20 74 68     numbers have th
014A60:  65 20 74 6F 70 20 62 69 74 20 63 6C 65 61 72 2E    e top bit clear.
014A70:  0D 0A 0D 0A 20 20 20 41 20 67 6F 6F 64 20 20 61    ....   A good  a
014A80:  6E 61 6C 6F 67 79 20 20 66 6F 72 20 20 74 77 6F    nalogy  for  two
014A90:  27 73 20 20 63 6F 6D 70 6C 65 6D 65 6E 74 20 20    's  complement  
014AA0:  61 72 69 74 68 6D 65 74 69 63 20 20 69 73 20 20    arithmetic  is  
014AB0:  74 68 65 20 20 63 6C 6F 63 6B 20 20 66 61 63 65    the  clock  face
014AC0:  2E 0D 0A 20 20 20 53 6F 6D 65 74 69 6D 65 73 20    ...   Sometimes 
014AD0:  77 65 20 63 6F 75 6E 74 20 66 72 6F 6D 20 31 31    we count from 11
014AE0:  3A 30 30 20 74 6F 20 20 31 31 3A 35 39 2C 20 20    :00 to  11:59,  
014AF0:  61 6E 64 20 20 68 61 76 65 20 20 75 70 20 74 6F    and  have  up to
014B00:  31 32 29 3A 57 48 49 4C 45 20 4D 49 44 24 28 66    12):WHILE MID$(f
014B10:  24 2C 39 2C 31 29 3C 3E 22 2E 22 20 41 4E 44 20    $,9,1)<>"." AND 
014B20:  4D 49 44 24 28 66 24 2C 38 2C 31 29 3C 3E 22 3A    MID$(f$,8,1)<>":
014B30:  22 3A 4D 4F 56 45 0D 0A 20 20 20 20 78 2C 79 3A    ":MOVE..    x,y:
014B40:  50 52 49 4E 54 20 43 48 52 24 28 32 31 35 29 3B    PRINT CHR$(215);
014B50:  3A 47 4F 53 55 42 20 38 30 0D 0A 34 30 20 57 48    :GOSUB 80..40 WH
014B60:  49 4C 45 20 49 4E 4B 45 59 28 34 37 29 2B 49 4E    ILE INKEY(47)+IN
014B70:  4B 45 59 28 31 38 29 2B 49 4E 4B 45 59 28 39 29    KEY(18)+INKEY(9)
014B80:  3D 2D 33 3A 62 3D 78 3A 63 3D 79 3A 78 3D 4D 41    =-3:b=x:c=y:x=MA
014B90:  58 28 30 2C 4D 49 4E 28 36 33 32 2C 78 2B 33 2A    X(0,MIN(632,x+3*
014BA0:  28 28 49 4E 4B 45 59 28 38 29 0D 0A 20 20 20 3E    ((INKEY(8)..   >
014BB0:  2D 31 29 2D 28 49 4E 4B 45 59 28 31 29 3E 2D 31    -1)-(INKEY(1)>-1
014BC0:  29 29 2A 28 34 2B 33 2A 28 49 4E 4B 45 59 28 32    ))*(4+3*(INKEY(2
014BD0:  31 29 3D 2D 31 29 29 29 29 3A 79 3D 4D 41 58 28    1)=-1)))):y=MAX(
014BE0:  31 35 2C 4D 49 4E 28 33 39 39 2C 79 2B 33 2A 28    15,MIN(399,y+3*(
014BF0:  28 49 4E 4B 45 59 28 32 29 3E 2D 0D 0A 20 20 20    (INKEY(2)>-..   
014C00:  31 29 2D 28 49 4E 4B 45 59 28 30 29 3E 2D 31 29    1)-(INKEY(0)>-1)
014C10:  29 2A 28 28 49 4E 4B 45 59 28 32 31 29 3D 2D 31    )*((INKEY(21)=-1
014C20:  29 2B 32 29 29 29 3A 4D 4F 56 45 20 62 2C 63 3A    )+2))):MOVE b,c:
014C30:  50 52 49 4E 54 20 43 48 52 24 28 32 31 35 29 3B    PRINT CHR$(215);
014C40:  3A 4D 4F 56 45 20 78 2C 79 3A 50 52 0D 0A 20 20    :MOVE x,y:PR..  
014C50:  20 49 4E 54 20 43 48 52 24 28 32 31 35 29 3B 3A     INT CHR$(215);:
014C60:  57 45 4E 44 0D 0A 35 30 20 47 4F 53 55 42 20 38    WEND..50 GOSUB 8
014C70:  30 3A 4D 4F 56 45 20 78 2C 79 3A 50 52 49 4E 54    0:MOVE x,y:PRINT
014C80:  20 43 48 52 24 28 32 31 35 29 3B 3A 70 3D 28 78     CHR$(215);:p=(x
014C90:  5C 31 36 30 29 2A 32 30 2B 31 3A 71 3D 28 34 30    \160)*20+1:q=(40
014CA0:  30 2D 79 29 5C 31 36 2B 31 3A 4C 4F 43 41 54 45    0-y)\16+1:LOCATE
014CB0:  20 70 2C 71 3A 0D 0A 20 20 20 43 41 4C 4C 20 61     p,q:..   CALL a
014CC0:  2C 40 66 24 3A 57 45 4E 44 3A 54 41 47 4F 46 46    ,@f$:WEND:TAGOFF
014CD0:  3A 49 46 20 4D 49 44 24 28 66 24 2C 39 2C 31 29    :IF MID$(f$,9,1)
014CE0:  3D 22 2E 22 20 54 48 45 4E 20 4D 45 4D 4F 52 59    ="." THEN MEMORY
014CF0:  20 48 49 4D 45 4D 2B 33 34 3A 43 41 4C 4C 20 26     HIMEM+34:CALL &
014D00:  20 35 39 20 6D 69 6E 75 74 65 73 20 66 72 6F 6D     59 minutes from
014D10:  0D 0A 20 20 20 65 6C 65 76 65 6E 20 6F 27 63 6C    ..   eleven o'cl
014D20:  6F 63 6B 2E 20 20 4F 72 20 77 65 20 63 61 6E 20    ock.  Or we can 
014D30:  20 6C 6F 6F 6B 20 20 61 74 20 20 69 74 20 20 61     look  at  it  a
014D40:  6E 6F 74 68 65 72 20 20 77 61 79 20 61 6E 64 20    nother  way and 
014D50:  61 66 74 65 72 20 68 61 6C 66 20 70 61 73 74 0D    after half past.
014D60:  0A 20 20 20 65 6C 65 76 65 6E 20 77 65 20 73 74    .   eleven we st
014D70:  61 72 74 20 73 61 79 69 6E 67 20 32 39 20 6D 69    art saying 29 mi
014D80:  6E 75 74 65 73 20 74 6F 20 20 74 77 65 6C 76 65    nutes to  twelve
014D90:  2E 20 20 35 39 20 6D 69 6E 75 74 65 73 20 70 61    .  59 minutes pa
014DA0:  73 74 20 65 6C 65 76 65 6E 20 74 68 65 6E 0D 0A    st eleven then..
014DB0:  20 20 20 62 65 63 6F 6D 65 73 20 31 20 6D 69 6E       becomes 1 min
014DC0:  75 74 65 20 74 6F 20 20 74 77 65 6C 76 65 20 20    ute to  twelve  
014DD0:  6F 72 20 20 69 66 20 20 79 6F 75 20 20 70 72 65    or  if  you  pre
014DE0:  66 65 72 2C 20 20 74 77 65 6C 76 65 20 20 6F 27    fer,  twelve  o'
014DF0:  63 6C 6F 63 6B 20 6D 69 6E 75 73 20 31 0D 0A 20    clock minus 1.. 
014E00:  20 20 6D 69 6E 75 74 65 2E 0D 0A 0D 0A 20 20 20      minute.....   
014E10:  4D 6F 73 74 20 6F 66 20 74 68 65 20 74 69 6D 65    Most of the time
014E20:  20 79 6F 75 20 64 6F 20 6E 6F 74 20 20 6E 65 65     you do not  nee
014E30:  64 20 20 74 6F 20 6B 6E 6F 77 20 61 6E 79 74 68    d  to know anyth
014E40:  69 6E 67 20 61 62 6F 75 74 20 68 6F 77 20 74 68    ing about how th
014E50:  65 20 63 6F 6D 70 75 74 65 72 0D 0A 20 20 20 73    e computer..   s
014E60:  74 6F 72 65 73 20 6E 75 6D 62 65 72 73 2C 20 62    tores numbers, b
014E70:  75 74 20 6F 63 63 61 73 69 6F 6E 61 6C 6C 79 20    ut occasionally 
014E80:  69 74 20 69 73 20 20 75 73 65 66 75 6C 2E 20 20    it is  useful.  
014E90:  20 49 66 20 20 79 6F 75 20 77 61 6E 74 20 74 6F     If  you want to
014EA0:  20 66 69 6E 64 20 6F 75 74 0D 0A 20 20 20 77 68     find out..   wh
014EB0:  61 74 20 2D 32 33 20 69 73 20 69 6E 20 62 69 6E    at -23 is in bin
014EC0:  61 72 79 2C 20 74 68 65 20 20 65 61 73 69 65 73    ary, the  easies
014ED0:  74 20 20 74 68 69 6E 67 20 20 74 6F 20 64 6F 20    t  thing  to do 
014EE0:  69 73 20 74 79 70 65 20 50 52 49 4E 54 20 42 49    is type PRINT BI
014EF0:  4E 24 28 2D 32 33 29 2C 0D 0A 20 20 20 62 75 74    N$(-23),..   but
014F00:  42 42 42 41 3A 4D 0D 0A 20 20 20 4F 44 45 20 31    BBBA:M..   ODE 1
014F10:  3A 52 55 4E 20 66 24 0D 0A 36 30 20 75 3D 31 36    :RUN f$..60 u=16
014F20:  3A 57 48 49 4C 45 20 75 20 41 4E 44 20 2D 31 36    :WHILE u AND -16
014F30:  3A 4C 4F 43 41 54 45 20 31 2C 76 3A 50 52 49 4E    :LOCATE 1,v:PRIN
014F40:  54 22 55 73 65 72 3A 20 22 2B 43 48 52 24 28 32    T"User: "+CHR$(2
014F50:  30 29 3B 3A 4C 49 4E 45 20 49 4E 50 55 54 20 75    0);:LINE INPUT u
014F60:  24 3A 75 3D 56 41 4C 28 0D 0A 20 20 20 75 24 29    $:u=VAL(..   u$)
014F70:  3A 57 45 4E 44 3A 49 46 20 75 24 3C 3E 22 22 20    :WEND:IF u$<>"" 
014F80:  54 48 45 4E 20 7C 55 53 45 52 2C 75 3A 43 4C 53    THEN |USER,u:CLS
014F90:  3A 43 41 54 3A 76 3D 56 50 4F 53 28 23 30 29 0D    :CAT:v=VPOS(#0).
014FA0:  0A 37 30 20 57 45 4E 44 0D 0A 38 30 20 57 48 49    .70 WEND..80 WHI
014FB0:  4C 45 20 49 4E 4B 45 59 28 34 37 29 2B 49 4E 4B    LE INKEY(47)+INK
014FC0:  45 59 28 31 38 29 2B 49 4E 4B 45 59 28 39 29 3E    EY(18)+INKEY(9)>
014FD0:  2D 33 3A 57 45 4E 44 3A 57 48 49 4C 45 20 49 4E    -3:WEND:WHILE IN
014FE0:  4B 45 59 24 3C 3E 22 22 3A 57 45 4E 44 3A 52 45    KEY$<>"":WEND:RE
014FF0:  54 55 52 4E 0D 0A 0D 0A 20 20 20 46 69 67 75 72    TURN....   Figur
015000:  65 20 31 0D 0A 1A 20 20 20 20 24 24 24 FF 00 FF    e 1...    $$$...
015010:  50 41 54 43 48 20 35 0D 0A 20 20 20 42 79 20 53    PATCH 5..   By S
015020:  74 65 70 68 65 6E 20 61 6E 64 20 4D 61 74 74 68    tephen and Matth
015030:  65 77 20 50 68 69 6C 6C 69 70 73 0D 0A 0D 0A 20    ew Phillips.... 
015040:  20 20 57 68 61 74 20 67 61 73 74 72 6F 6E 6F 6D      What gastronom
015050:  69 63 20 64 65 6C 69 67 68 74 73 20 61 77 61 69    ic delights awai
015060:  74 20 75 73 20 20 66 6F 72 20 20 74 68 65 20 20    t us  for  the  
015070:  66 69 6E 61 6C 20 20 63 6F 75 72 73 65 3F 20 20    final  course?  
015080:  C0 60 60 D6 00 06 00 18 00 18 66 7C CC 7E 60 00    .``.......f|.~`.
015090:  00 66 66 00 C0 18 18 66 7E 00 66 7E 18 18 7C 66    .ff....f~.f~..|f
0150A0:  66 00 00 CC 7C 66 66 7C 60 66 00 18 06 06 FE 00    f...|ff|`f......
0150B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0150C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0150D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0150E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0150F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
015100:  20 69 66 20 79 6F 75 20 72 65 61 6C 6C 79 20 77     if you really w
015110:  61 6E 74 20 74 6F 20 6B 6E 6F 77 2C 20 74 68 69    ant to know, thi
015120:  73 20 69 73 20 68 6F 77 20 74 6F 20 64 6F 20 69    s is how to do i
015130:  74 20 62 79 20 68 61 6E 64 3A 0D 0A 0D 0A 20 20    t by hand:....  
015140:  20 31 2E 20 57 72 69 74 65 20 64 6F 77 6E 20 74     1. Write down t
015150:  68 65 20 70 6F 73 69 74 69 76 65 20 6E 75 6D 62    he positive numb
015160:  65 72 20 69 6E 20 62 69 6E 61 72 79 2E 0D 0A 20    er in binary... 
015170:  20 20 32 2E 20 54 61 6B 65 20 74 68 65 20 63 6F      2. Take the co
015180:  6D 70 6C 65 6D 65 6E 74 20 28 63 68 61 6E 67 65    mplement (change
015190:  20 65 61 63 68 20 31 20 74 6F 20 30 20 61 6E 64     each 1 to 0 and
0151A0:  20 65 61 63 68 20 30 20 74 6F 20 31 29 2E 0D 0A     each 0 to 1)...
0151B0:  20 20 20 33 2E 20 41 64 64 20 6F 6E 20 6F 6E 65       3. Add on one
0151C0:  2E 0D 0A 0D 0A 20 20 20 46 6F 72 20 65 78 61 6D    .....   For exam
0151D0:  70 6C 65 20 77 69 74 68 20 2D 32 33 3A 0D 0A 0D    ple with -23:...
0151E0:  0A 20 20 20 32 33 20 69 6E 20 62 69 6E 61 72 79    .   23 in binary
0151F0:  3A 20 20 30 30 30 30 30 30 30 30 30 30 30 31 30    :  0000000000010
015200:  31 31 31 0D 0A 20 20 20 43 6F 6D 70 6C 65 6D 65    111..   Compleme
015210:  6E 74 3A 20 20 20 20 31 31 31 31 31 31 31 31 31    nt:    111111111
015220:  31 31 30 31 30 30 30 0D 0A 20 20 20 41 64 64 20    1101000..   Add 
015230:  6F 6E 20 6F 6E 65 3A 20 20 20 20 31 31 31 31 31    on one:    11111
015240:  31 31 31 31 31 31 30 31 30 30 31 0D 0A 0D 0A 20    11111101001.... 
015250:  20 20 73 6F 20 2D 32 33 20 69 73 20 31 31 31 31      so -23 is 1111
015260:  31 31 31 31 31 31 31 30 31 30 30 31 2E 0D 0A 0D    111111101001....
015270:  0A 20 20 20 49 66 20 79 6F 75 20 61 72 65 20 66    .   If you are f
015280:  65 65 6C 69 6E 67 20 72 65 61 6C 6C 79 20 20 6B    eeling really  k
015290:  65 65 6E 20 20 6F 6E 20 20 6D 61 74 68 73 20 20    een  on  maths  
0152A0:  68 6F 6D 65 77 6F 72 6B 2C 20 79 6F 75 20 63 6F    homework, you co
0152B0:  75 6C 64 20 74 72 79 20 61 64 64 69 6E 67 0D 0A    uld try adding..
0152C0:  20 20 20 74 6F 67 65 74 68 65 72 20 32 33 20 61       together 23 a
0152D0:  6E 64 20 2D 32 33 20 69 6E 20 62 69 6E 61 72 79    nd -23 in binary
0152E0:  2C 20 20 6A 75 73 74 20 20 74 6F 20 20 63 68 65    ,  just  to  che
0152F0:  63 6B 20 20 74 68 61 74 20 79 6F 75 20 67 65 74    ck  that you get
015300:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015310:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015320:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015330:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015340:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015350:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015360:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015370:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015380:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015390:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0153A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0153B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0153C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0153D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0153E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0153F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015400:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015410:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015420:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015430:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015440:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015450:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015460:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015470:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015480:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015490:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0154A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0154B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0154C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0154D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0154E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0154F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
015500:  20 6E 6F 75 67 68 74 2E 20 20 59 6F 75 0D 0A 20     nought.  You.. 
015510:  20 20 77 69 6C 6C 20 61 63 74 75 61 6C 6C 79 20      will actually 
015520:  67 65 74 20 31 20 77 69 74 68 20 73 69 78 74 65    get 1 with sixte
015530:  65 6E 20 7A 65 72 6F 73 20 61 66 74 65 72 20 20    en zeros after  
015540:  69 74 2C 20 62 75 74 20 61 73 20 77 65 20 63 61    it, but as we ca
015550:  6E 20 6F 6E 6C 79 20 73 74 6F 72 65 0D 0A 20 20    n only store..  
015560:  20 73 69 78 74 65 65 6E 20 62 69 74 73 20 69 6E     sixteen bits in
015570:  20 6F 75 72 20 69 6E 74 65 67 65 72 20 76 61 72     our integer var
015580:  69 61 62 6C 65 73 2C 20 69 74 27 73 20 61 73 20    iables, it's as 
015590:  67 6F 6F 64 20 61 73 20 6E 6F 75 67 68 74 20 72    good as nought r
0155A0:  65 61 6C 6C 79 2E 0D 0A 0D 0A 20 20 20 43 4F 46    eally.....   COF
0155B0:  46 45 45 20 54 49 4D 45 0D 0A 20 20 20 57 65 20    FEE TIME..   We 
0155C0:  68 6F 70 65 20 74 68 61 74 20 74 68 65 72 65 20    hope that there 
0155D0:  69 73 6E 27 74 20 61 6E 79 74 68 69 6E 67 20 6D    isn't anything m
0155E0:  6F 72 65 20 74 6F 20 73 61 79 20 61 62 6F 75 74    ore to say about
0155F0:  20 74 68 61 74 20 70 72 6F 67 72 61 6D 2E 20 20     that program.  
015600:  49 74 20 6D 75 73 74 0D 0A 20 20 20 62 65 20 71    It must..   be q
015610:  75 69 74 65 20 61 20 72 65 63 6F 72 64 20 74 61    uite a record ta
015620:  6B 69 6E 67 20 20 73 69 78 20 20 6D 6F 6E 74 68    king  six  month
015630:  73 20 20 74 6F 20 20 65 78 70 6C 61 69 6E 20 20    s  to  explain  
015640:  73 75 63 68 20 20 61 20 73 68 6F 72 74 20 70 69    such  a short pi
015650:  65 63 65 20 6F 66 0D 0A 20 20 20 42 41 53 49 43    ece of..   BASIC
015660:  2E 20 20 57 69 74 68 20 61 20 62 69 74 20 6F 66    .  With a bit of
015670:  20 6C 75 63 6B 20 20 79 6F 75 20 20 6E 6F 77 20     luck  you  now 
015680:  20 68 61 76 65 20 20 61 20 20 75 73 65 66 75 6C     have  a  useful
015690:  20 75 74 69 6C 69 74 79 20 61 6E 64 20 61 20 62     utility and a b
0156A0:  65 74 74 65 72 0D 0A 20 20 20 75 6E 64 65 72 73    etter..   unders
0156B0:  74 61 6E 64 69 6E 67 20 6F 66 20 73 6F 6D 65 20    tanding of some 
0156C0:  6F 66 20 74 68 65 20 6D 6F 72 65 20 20 61 64 76    of the more  adv
0156D0:  61 6E 63 65 64 20 20 74 72 69 63 6B 73 20 20 6F    anced  tricks  o
0156E0:  6E 65 20 20 63 61 6E 20 67 65 74 20 75 70 20 74    ne  can get up t
0156F0:  6F 20 69 6E 0D 0A 20 20 20 42 41 53 49 43 2E 20    o in..   BASIC. 
015700:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
015710:  12 00 01 00 02 09 4E E5 12 00 C8 02 00 00 00 02    ......N.........
015720:  12 00 C4 02 00 00 00 02 12 00 C9 02 00 00 00 02    ................
015730:  12 00 C5 02 00 00 00 02 12 00 C1 02 00 00 00 02    ................
015740:  12 00 C6 02 00 00 00 02 12 00 C2 02 00 00 00 02    ................
015750:  12 00 C7 02 00 00 00 02 12 00 C3 02 00 00 00 02    ................
015760:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
015770:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
015780:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
015790:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0157A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0157B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0157C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0157D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0157E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0157F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
015800:  6D 65 6E 74 20 20 62 79 20 20 73 65 74 74 69 6E    ment  by  settin
015810:  67 20 69 74 20 74 6F 20 7A 65 72 6F 2E 20 20 57    g it to zero.  W
015820:  65 20 77 69 6C 6C 20 64 6F 0D 0A 20 20 20 73 6F    e will do..   so
015830:  6D 65 20 65 78 61 6D 70 6C 65 73 20 6F 66 20 77    me examples of w
015840:  68 61 74 20 69 74 20 69 73 20 75 73 65 66 75 6C    hat it is useful
015850:  20 66 6F 72 20 6C 61 74 65 72 2E 0D 0A 0D 0A 20     for later..... 
015860:  20 20 53 49 5A 49 4E 47 20 49 54 20 55 50 0D 0A      SIZING IT UP..
015870:  20 20 20 4F 6E 20 6C 69 6E 65 20 32 30 20 6D 63       On line 20 mc
015880:  6F 6C 20 64 65 74 65 72 6D 69 6E 65 73 20 74 68    ol determines th
015890:  65 20 20 63 6F 6C 6F 75 72 20 20 6F 66 20 20 74    e  colour  of  t
0158A0:  68 65 20 20 6D 65 6E 75 20 20 62 61 72 2E 20 20    he  menu  bar.  
0158B0:  49 66 20 79 6F 75 20 68 61 76 65 20 61 0D 0A 20    If you have a.. 
0158C0:  20 20 62 61 63 6B 67 72 6F 75 6E 64 20 6F 66 20      background of 
0158D0:  50 41 50 45 52 20 30 2C 20 74 68 65 6E 20 6D 63    PAPER 0, then mc
0158E0:  6F 6C 20 73 68 6F 75 6C 64 20 62 65 20 20 73 65    ol should be  se
0158F0:  74 20 74 6F 20 74 68 65 20 50 45 4E 20 63 6F 6C    t to the PEN col
015900:  6F 75 72 20 79 6F 75 20 77 61 6E 74 0D 0A 20 20    our you want..  
015910:  20 66 6F 72 20 74 68 65 20 6D 65 6E 75 20 62 61     for the menu ba
015920:  72 2E 20 20 41 73 20 74 68 65 20 6D 65 6E 75 20    r.  As the menu 
015930:  20 62 61 72 20 20 69 73 20 20 70 72 69 6E 74 65     bar  is  printe
015940:  64 20 75 70 20 75 73 69 6E 67 20 58 4F 52 20 67    d up using XOR g
015950:  72 61 70 68 69 63 73 2C 20 69 66 0D 0A 20 20 20    raphics, if..   
015960:  79 6F 75 20 68 61 76 65 20 61 20 64 69 66 66 65    you have a diffe
015970:  72 65 6E 74 20 62 61 63 6B 67 72 6F 75 6E 64 20    rent background 
015980:  74 68 69 6E 67 73 20 61 72 65 20 20 6D 6F 72 65    things are  more
015990:  20 63 6F 6D 70 6C 69 63 61 74 65 64 2E 20 20 49     complicated.  I
0159A0:  66 20 78 20 69 73 20 74 68 65 0D 0A 20 20 20 62    f x is the..   b
0159B0:  61 63 6B 67 72 6F 75 6E 64 20 70 65 6E 2C 20 61    ackground pen, a
0159C0:  6E 64 20 79 20 74 68 65 20 70 65 6E 20 79 6F 75    nd y the pen you
0159D0:  20 77 61 6E 74 20 20 66 6F 72 20 74 68 65 20 6D     want  for the m
0159E0:  65 6E 75 20 62 61 72 2C 20 74 68 65 6E 20 6D 63    enu bar, then mc
0159F0:  6F 6C 20 73 68 6F 75 6C 64 0D 0A 20 20 20 62 65    ol should..   be
015A00:  61 73 69 73 20 6F 66 20 20 73 65 76 65 72 61 6C    asis of  several
015A10:  20 20 65 78 61 6D 70 6C 65 20 20 70 72 6F 67 72      example  progr
015A20:  61 6D 73 20 20 6F 76 65 72 20 20 74 68 65 20 20    ams  over  the  
015A30:  6E 65 78 74 20 66 65 77 20 61 72 74 69 63 6C 65    next few article
015A40:  73 2E 0D 0A 20 20 20 3C 3C 54 68 69 73 20 69 73    s...   <<This is
015A50:  20 73 61 76 65 64 20 6F 6E 20 74 68 65 20 64 69     saved on the di
015A60:  73 63 20 61 73 20 4D 45 4E 55 53 55 42 3E 3E 0D    sc as MENUSUB>>.
015A70:  0A 0D 0A 20 20 20 49 6E 20 66 61 63 74 20 74 68    ...   In fact th
015A80:  65 20 73 75 62 72 6F 75 74 69 6E 65 73 20 77 69    e subroutines wi
015A90:  6C 6C 20 73 71 75 61 73 68 20 64 6F 77 6E 20 20    ll squash down  
015AA0:  69 6E 74 6F 20 6A 75 73 74 20 74 77 6F 20 6C 69    into just two li
015AB0:  6E 65 73 2E 20 20 4C 69 6E 65 73 20 31 30 30 30    nes.  Lines 1000
015AC0:  0D 0A 20 20 20 74 6F 20 31 30 30 39 20 63 61 6E    ..   to 1009 can
015AD0:  20 61 6C 6C 20 62 65 20 74 79 70 65 64 20 69 6E     all be typed in
015AE0:  20 20 74 6F 67 65 74 68 65 72 20 20 61 73 20 20      together  as  
015AF0:  6C 69 6E 65 20 20 31 30 30 30 2C 20 61 6E 64 20    line  1000, and 
015B00:  74 68 65 20 72 65 73 74 20 6F 66 20 74 68 65 0D    the rest of the.
015B10:  0A 20 20 20 6C 69 6E 65 73 20 63 61 6E 20 61 6C    .   lines can al
015B20:  6C 20 62 65 20 74 79 70 65 64 20 69 6E 20 61 73    l be typed in as
015B30:  20 6C 69 6E 65 20 20 31 30 31 30 2E 20 20 41 6C     line  1010.  Al
015B40:  74 68 6F 75 67 68 20 69 74 20 77 6F 75 6C 64 20    though it would 
015B50:  68 61 76 65 20 62 65 65 6E 20 6D 6F 72 65 0D 0A    have been more..
015B60:  20 20 20 69 6D 70 72 65 73 73 69 76 65 20 74 6F       impressive to
015B70:  20 73 68 6F 77 20 6F 66 66 20 77 69 74 68 20 61     show off with a
015B80:  20 74 77 6F 2D 6C 69 6E 65 20 20 6D 65 6E 75 20     two-line  menu 
015B90:  20 73 79 73 74 65 6D 2C 20 77 65 20 68 61 76 65     system, we have
015BA0:  20 6C 69 73 74 65 64 20 69 74 20 69 6E 0D 0A 20     listed it in.. 
015BB0:  20 20 65 69 67 68 74 65 65 6E 20 6C 69 6E 65 73      eighteen lines
015BC0:  20 74 6F 20 6D 61 6B 65 20 69 74 20 65 61 73 69     to make it easi
015BD0:  65 72 20 74 6F 20 66 6F 6C 6C 6F 77 2E 0D 0A 0D    er to follow....
015BE0:  0A 20 20 20 4F 6E 63 65 20 79 6F 75 20 68 61 76    .   Once you hav
015BF0:  65 20 73 61 76 65 64 20 74 68 65 20 20 73 75 62    e saved the  sub
015C00:  20 73 65 74 20 74 6F 0D 0A 0D 0A 20 20 20 20 20     set to....     
015C10:  20 20 20 20 20 20 78 20 58 4F 52 20 79 0D 0A 0D          x XOR y...
015C20:  0A 20 20 20 54 68 65 20 72 65 73 74 20 6F 66 20    .   The rest of 
015C30:  74 68 65 20 76 61 72 69 61 62 6C 65 73 20 6F 6E    the variables on
015C40:  20 6C 69 6E 65 20 32 30 20 20 61 72 65 20 20 74     line 20  are  t
015C50:  6F 20 64 6F 20 77 69 74 68 20 77 68 65 72 65 20    o do with where 
015C60:  74 68 65 20 6D 65 6E 75 20 69 73 20 6F 6E 0D 0A    the menu is on..
015C70:  20 20 20 73 63 72 65 65 6E 20 61 6E 64 20 68 6F       screen and ho
015C80:  77 20 62 69 67 20 74 68 65 20 6D 65 6E 75 20 62    w big the menu b
015C90:  61 72 20 73 68 6F 75 6C 64 20 62 65 2E 20 20 46    ar should be.  F
015CA0:  6F 72 20 65 78 61 6D 70 6C 65 20 77 65 20 63 6F    or example we co
015CB0:  75 6C 64 20 70 72 69 6E 74 20 74 68 65 0D 0A 20    uld print the.. 
015CC0:  20 20 6D 65 6E 75 20 6D 6F 72 65 20 73 70 61 63      menu more spac
015CD0:  65 64 20 6F 75 74 20 62 79 20 61 6C 74 65 72 69    ed out by alteri
015CE0:  6E 67 20 6C 69 6E 65 20 35 30 3A 0D 0A 0D 0A 20    ng line 50:.... 
015CF0:  20 20 35 30 20 46 4F 52 20 78 3D 31 20 54 4F 20      50 FOR x=1 TO 
015D00:  6D 63 68 3A 50 52 49 4E 54 3A 50 52 49 4E 54 22    mch:PRINT:PRINT"
015D10:  20 20 49 74 65 6D 22 78 3A 4E 45 58 54 0D 0A 0D      Item"x:NEXT...
015D20:  0A 20 20 20 52 75 6E 20 74 68 65 20 70 72 6F 67    .   Run the prog
015D30:  72 61 6D 20 61 67 61 69 6E 2E 20 20 41 6C 74 68    ram again.  Alth
015D40:  6F 75 67 68 20 74 68 65 20 6D 65 6E 75 20 74 65    ough the menu te
015D50:  78 74 20 69 73 20 73 70 72 65 61 64 20 6F 75 74    xt is spread out
015D60:  2C 20 74 68 65 20 6D 65 6E 75 20 62 61 72 0D 0A    , the menu bar..
015D70:  20 20 20 69 73 20 73 74 69 6C 6C 20 69 6E 20 74       is still in t
015D80:  68 65 20 73 61 6D 65 20 70 6F 73 69 74 69 6F 6E    he same position
015D90:  20 61 73 20 20 62 65 66 6F 72 65 2E 20 20 54 6F     as  before.  To
015DA0:  20 63 6F 72 72 65 63 74 20 74 68 69 73 20 79 6F     correct this yo
015DB0:  75 20 63 6F 75 6C 64 20 61 6C 74 65 72 0D 0A 20    u could alter.. 
015DC0:  20 20 6C 69 6E 65 20 32 30 20 61 73 20 66 6F 6C      line 20 as fol
015DD0:  6C 6F 77 73 3A 0D 0A 0D 0A 20 20 20 32 30 20 6D    lows:....   20 m
015DE0:  63 6F 6C 3D 31 3A 6D 73 70 3D 33 32 3A 6D 78 3D    col=1:msp=32:mx=
015DF0:  32 34 3A 6D 79 3D 33 39 39 2D 33 2A 31 36 2B 38    24:my=399-3*16+8
015E00:  72 6F 75 74 69 6E 65 73 2C 20 20 79 6F 75 20 20    routines,  you  
015E10:  63 61 6E 20 20 74 68 65 6E 20 20 74 79 70 65 20    can  then  type 
015E20:  69 6E 20 74 68 65 20 65 61 72 6C 69 65 72 0D 0A    in the earlier..
015E30:  20 20 20 6C 69 6E 65 73 20 69 6E 20 74 68 65 20       lines in the 
015E40:  6C 69 73 74 69 6E 67 20 61 6E 64 20 72 75 6E 20    listing and run 
015E50:  69 74 20 74 6F 20 73 65 65 20 74 68 65 20 66 69    it to see the fi
015E60:  72 73 74 20 65 78 61 6D 70 6C 65 2E 20 20 3C 3C    rst example.  <<
015E70:  54 68 69 73 20 69 73 20 73 61 76 65 64 0D 0A 20    This is saved.. 
015E80:  20 20 61 73 20 4D 45 4E 55 45 58 31 2E 42 41 53      as MENUEX1.BAS
015E90:  3E 3E 0D 0A 0D 0A 20 20 20 48 4F 57 20 44 4F 45    >>....   HOW DOE
015EA0:  53 20 49 54 20 57 4F 52 4B 20 54 48 45 4E 3F 0D    S IT WORK THEN?.
015EB0:  0A 20 20 20 44 6F 6E 27 74 20 77 6F 72 72 79 20    .   Don't worry 
015EC0:  61 62 6F 75 74 20 68 6F 77 20 74 68 65 20 20 73    about how the  s
015ED0:  75 62 72 6F 75 74 69 6E 65 73 20 20 77 6F 72 6B    ubroutines  work
015EE0:  20 20 74 6F 20 20 73 74 61 72 74 20 77 69 74 68      to  start with
015EF0:  2E 20 20 49 74 20 69 73 20 71 75 69 74 65 0D 0A    .  It is quite..
015F00:  20 20 20 65 61 73 79 20 74 6F 20 75 73 65 20 74       easy to use t
015F10:  68 65 6D 20 69 6E 20 70 72 6F 67 72 61 6D 73 20    hem in programs 
015F20:  20 77 69 74 68 6F 75 74 20 20 6B 6E 6F 77 69 6E     without  knowin
015F30:  67 20 20 68 6F 77 20 20 74 68 65 79 20 64 6F 20    g  how  they do 
015F40:  74 68 65 20 77 6F 72 6B 2E 20 20 49 6E 0D 0A 20    the work.  In.. 
015F50:  20 20 66 61 63 74 20 74 68 61 74 20 69 73 20 6F      fact that is o
015F60:  6E 65 20 6F 66 20 74 68 65 20 67 6F 6F 64 20 20    ne of the good  
015F70:  74 68 69 6E 67 73 20 61 62 6F 75 74 20 73 75 62    things about sub
015F80:  72 6F 75 74 69 6E 65 73 2E 20 20 4F 6E 63 65 20    routines.  Once 
015F90:  79 6F 75 20 68 61 76 65 20 6F 6E 65 0D 0A 20 20    you have one..  
015FA0:  20 74 68 61 74 20 77 6F 72 6B 73 20 61 6E 64 20     that works and 
015FB0:  64 6F 65 73 20 74 68 65 20 20 6A 6F 62 20 20 79    does the  job  y
015FC0:  6F 75 20 20 77 61 6E 74 20 20 64 6F 69 6E 67 2C    ou  want  doing,
015FD0:  20 20 79 6F 75 20 20 73 68 6F 75 6C 64 6E 27 74      you  shouldn't
015FE0:  20 6E 65 65 64 20 74 6F 20 62 65 0D 0A 20 20 20     need to be..   
015FF0:  62 6F 74 68 65 72 65 64 20 77 69 74 68 20 68 6F    bothered with ho
016000:  23 50 72 6F 67 72 61 6D 6D 65 72 73 27 20 50 61    #Programmers' Pa
016010:  74 63 68 20 36 20 2D 20 57 41 43 43 49 20 31 31    tch 6 - WACCI 11
016020:  35 2C 20 41 75 67 2F 53 65 70 74 20 31 39 39 37    5, Aug/Sept 1997
016030:  2C 20 70 2E 20 32 36 2D 32 37 0D 0A 20 20 20 50    , p. 26-27..   P
016040:  52 4F 47 52 41 4D 4D 45 52 53 27 20 50 41 54 43    ROGRAMMERS' PATC
016050:  48 20 36 0D 0A 20 20 20 42 79 20 53 74 65 70 68    H 6..   By Steph
016060:  65 6E 20 61 6E 64 20 4D 61 74 74 68 65 77 20 50    en and Matthew P
016070:  68 69 6C 6C 69 70 73 0D 0A 0D 0A 20 20 20 22 57    hillips....   "W
016080:  68 61 74 27 73 20 6F 6E 20 74 68 65 20 6D 65 6E    hat's on the men
016090:  75 20 66 6F 72 20 74 68 69 73 20 6D 6F 6E 74 68    u for this month
0160A0:  3F 22 2C 20 20 77 65 20 20 68 65 61 72 20 79 6F    ?",  we  hear yo
0160B0:  75 20 63 72 79 2E 20 20 57 65 6C 6C 2C 20 69 66    u cry.  Well, if
0160C0:  20 79 6F 75 20 68 61 64 0D 0A 20 20 20 6B 6E 6F     you had..   kno
0160D0:  77 6E 20 77 68 61 74 20 74 68 65 20 61 72 74 69    wn what the arti
0160E0:  63 6C 65 20 20 77 61 73 20 20 67 6F 69 6E 67 20    cle  was  going 
0160F0:  20 74 6F 20 20 62 65 20 20 6F 6E 2C 20 20 79 6F     to  be  on,  yo
016100:  75 20 20 77 6F 75 6C 64 20 20 62 65 20 61 73 68    u  would  be ash
016110:  61 6D 65 64 20 61 74 0D 0A 20 20 20 70 68 72 61    amed at..   phra
016120:  73 69 6E 67 20 74 68 65 20 71 75 65 73 74 69 6F    sing the questio
016130:  6E 20 6C 69 6B 65 20 74 68 61 74 2C 20 61 73 20    n like that, as 
016140:  69 74 20 20 69 73 20 73 75 63 68 20 61 20 70 72    it  is such a pr
016150:  65 64 69 63 74 61 62 6C 65 20 70 75 6E 2C 20 61    edictable pun, a
016160:  6E 64 20 6E 6F 74 0D 0A 20 20 20 72 65 61 6C 6C    nd not..   reall
016170:  79 20 75 70 20 74 6F 20 74 68 65 20 73 74 61 6E    y up to the stan
016180:  64 61 72 64 20 6F 66 20 68 75 6D 6F 75 72 20 20    dard of humour  
016190:  77 65 20 20 63 61 6E 20 65 78 70 65 63 74 20 66    we  can expect f
0161A0:  72 6F 6D 20 57 41 43 43 49 2E 20 20 42 75 74 20    rom WACCI.  But 
0161B0:  73 69 6E 63 65 0D 0A 20 20 20 79 6F 75 20 64 69    since..   you di
0161C0:  64 6E 27 74 20 6B 6E 6F 77 2C 20 77 65 27 6C 6C    dn't know, we'll
0161D0:  20 70 72 65 74 65 6E 64 20 74 6F 20 66 69 6E 64     pretend to find
0161E0:  20 69 74 20 61 6D 75 73 69 6E 67 20 61 6E 64 20     it amusing and 
0161F0:  74 68 65 6E 20 67 65 74 20 6F 6E 20 77 69 74 68    then get on with
016200:  77 20 69 74 20 77 6F 72 6B 73 20 61 6E 79 20 6D    w it works any m
016210:  6F 72 65 2E 0D 0A 0D 0A 20 20 20 49 6E 73 74 65    ore.....   Inste
016220:  61 64 2C 20 6C 65 74 20 75 73 20 68 61 76 65 20    ad, let us have 
016230:  61 20 6C 6F 6F 6B 20 61 74 20 68 6F 77 20 74 68    a look at how th
016240:  65 20 6D 61 69 6E 20 70 72 6F 67 72 61 6D 20 28    e main program (
016250:  6C 69 6E 65 73 20 31 30 20 74 6F 20 39 30 29 20    lines 10 to 90) 
016260:  77 6F 72 6B 73 0D 0A 20 20 20 69 6E 20 72 65 6C    works..   in rel
016270:  61 74 69 6F 6E 20 74 6F 20 74 68 65 20 20 73 75    ation to the  su
016280:  62 72 6F 75 74 69 6E 65 73 2E 20 20 20 4F 75 72    broutines.   Our
016290:  20 20 65 78 61 6D 70 6C 65 20 20 70 72 69 6E 74      example  print
0162A0:  73 20 20 75 70 20 20 61 20 73 68 6F 72 74 20 6D    s  up  a short m
0162B0:  65 6E 75 2C 0D 0A 20 20 20 61 6C 6C 6F 77 73 20    enu,..   allows 
0162C0:  74 68 65 20 75 73 65 72 20 74 6F 20 6D 6F 76 65    the user to move
0162D0:  20 74 68 65 20 6D 65 6E 75 20 62 61 72 20 75 70     the menu bar up
0162E0:  20 61 6E 64 20 64 6F 77 6E 20 77 69 74 68 20 74     and down with t
0162F0:  68 65 20 63 75 72 73 6F 72 20 6B 65 79 73 2C 20    he cursor keys, 
016300:  61 6E 64 0D 0A 20 20 20 74 68 65 6E 20 63 68 6F    and..   then cho
016310:  6F 73 65 20 61 20 6D 65 6E 75 20 69 74 65 6D 20    ose a menu item 
016320:  77 69 74 68 20 74 68 65 20 20 43 4F 50 59 20 20    with the  COPY  
016330:  6B 65 79 2E 20 20 54 68 65 20 70 72 6F 67 72 61    key.  The progra
016340:  6D 20 74 68 65 6E 20 70 72 69 6E 74 73 20 75 70    m then prints up
016350:  20 61 0D 0A 20 20 20 6D 65 73 73 61 67 65 20 74     a..   message t
016360:  65 6C 6C 69 6E 67 20 74 68 65 20 75 73 65 72 20    elling the user 
016370:  77 68 69 63 68 20 69 74 65 6D 20 77 61 73 20 73    which item was s
016380:  65 6C 65 63 74 65 64 2E 0D 0A 0D 0A 20 20 20 4C    elected.....   L
016390:  69 6E 65 73 20 31 30 20 74 6F 20 33 30 20 20 73    ines 10 to 30  s
0163A0:  65 74 20 20 75 70 20 20 73 6F 6D 65 20 20 76 61    et  up  some  va
0163B0:  72 69 61 62 6C 65 73 20 20 77 68 69 63 68 20 20    riables  which  
0163C0:  74 65 6C 6C 20 20 74 68 65 20 6D 65 6E 75 20 73    tell  the menu s
0163D0:  75 62 72 6F 75 74 69 6E 65 0D 0A 20 20 20 69 6D    ubroutine..   im
0163E0:  70 6F 72 74 61 6E 74 20 69 6E 66 6F 72 6D 61 74    portant informat
0163F0:  69 6F 6E 20 61 62 6F 75 74 20 74 68 65 20 73 69    ion about the si
016400:  20 74 68 65 0D 0A 20 20 20 61 72 74 69 63 6C 65     the..   article
016410:  2C 20 77 68 69 63 68 20 73 74 72 61 6E 67 65 6C    , which strangel
016420:  79 20 69 73 20 61 6C 6C 20 61 62 6F 75 74 20 6D    y is all about m
016430:  65 6E 75 73 2E 2E 2E 0D 0A 0D 0A 20 20 20 41 20    enus.......   A 
016440:  42 52 45 41 54 48 20 4F 46 20 46 52 45 53 48 20    BREATH OF FRESH 
016450:  41 49 52 0D 0A 20 20 20 54 6F 20 6D 61 6B 65 20    AIR..   To make 
016460:  61 20 63 68 61 6E 67 65 20 66 72 6F 6D 20 77 6F    a change from wo
016470:  72 6B 69 6E 67 20 6F 75 72 20 77 61 79 20 74 68    rking our way th
016480:  72 6F 75 67 68 20 61 20 73 69 6E 67 6C 65 20 70    rough a single p
016490:  72 6F 67 72 61 6D 2C 20 77 65 20 74 68 6F 75 67    rogram, we thoug
0164A0:  68 74 0D 0A 20 20 20 77 65 20 77 6F 75 6C 64 20    ht..   we would 
0164B0:  70 72 65 73 65 6E 74 20 61 20 75 73 65 66 75 6C    present a useful
0164C0:  20 73 75 62 72 6F 75 74 69 6E 65 20 74 68 61 74     subroutine that
0164D0:  20 20 79 6F 75 20 63 61 6E 20 69 6E 63 6F 72 70      you can incorp
0164E0:  6F 72 61 74 65 20 69 6E 20 79 6F 75 72 20 6F 77    orate in your ow
0164F0:  6E 0D 0A 20 20 20 70 72 6F 67 72 61 6D 73 2E 0D    n..   programs..
016500:  0A 0D 0A 20 20 20 54 68 65 20 65 61 73 69 65 73    ...   The easies
016510:  74 20 77 61 79 20 74 6F 20 6C 65 61 72 6E 20 70    t way to learn p
016520:  72 6F 67 72 61 6D 6D 69 6E 67 20 69 73 20 74 6F    rogramming is to
016530:  20 61 6C 74 65 72 20 70 72 6F 67 72 61 6D 73 20     alter programs 
016540:  77 72 69 74 74 65 6E 20 62 79 20 6F 74 68 65 72    written by other
016550:  0D 0A 20 20 20 70 65 6F 70 6C 65 2E 20 20 57 68    ..   people.  Wh
016560:  65 6E 20 79 6F 75 20 67 65 74 20 6D 6F 72 65 20    en you get more 
016570:  20 65 78 70 65 72 69 65 6E 63 65 64 20 20 69 6E     experienced  in
016580:  20 20 61 20 63 6F 6D 70 75 74 65 72 20 6C 61 6E      a computer lan
016590:  67 75 61 67 65 2C 20 79 6F 75 20 74 68 65 6E 0D    guage, you then.
0165A0:  0A 20 20 20 66 69 6E 64 20 74 68 61 74 20 74 68    .   find that th
0165B0:  65 20 65 61 73 69 65 73 74 20 77 61 79 20 74 6F    e easiest way to
0165C0:  20 77 72 69 74 65 20 61 20 70 72 6F 67 72 61 6D     write a program
0165D0:  20 69 73 20 74 6F 20 61 6C 74 65 72 20 6F 6E 65     is to alter one
0165E0:  20 74 68 61 74 20 79 6F 75 20 68 61 76 65 0D 0A     that you have..
0165F0:  20 20 20 77 72 69 74 74 65 6E 20 62 65 66 6F 72       written befor
016600:  7A 65 20 61 6E 64 20 20 70 6F 73 69 74 69 6F 6E    ze and  position
016610:  20 20 6F 66 20 74 68 65 20 6D 65 6E 75 20 28 73      of the menu (s
016620:  65 65 20 54 61 62 6C 65 0D 0A 20 20 20 32 29 2E    ee Table..   2).
016630:  0D 0A 0D 0A 20 20 20 4F 6E 65 20 6F 66 20 74 68    ....   One of th
016640:  65 73 65 20 20 76 61 72 69 61 62 6C 65 73 2C 20    ese  variables, 
016650:  20 6D 70 2C 20 20 69 73 20 20 61 6C 73 6F 20 20     mp,  is  also  
016660:  75 73 65 64 20 20 62 79 20 20 74 68 65 20 20 73    used  by  the  s
016670:  75 62 72 6F 75 74 69 6E 65 20 74 6F 20 70 61 73    ubroutine to pas
016680:  73 0D 0A 20 20 20 69 6E 66 6F 72 6D 61 74 69 6F    s..   informatio
016690:  6E 20 62 61 63 6B 20 74 6F 20 74 68 65 20 6D 61    n back to the ma
0166A0:  69 6E 20 70 72 6F 67 72 61 6D 2E 20 20 49 6E 20    in program.  In 
0166B0:  6C 69 6E 65 20 31 30 20 6D 70 20 69 73 20 73 65    line 10 mp is se
0166C0:  74 20 74 6F 20 7A 65 72 6F 2C 20 77 68 69 63 68    t to zero, which
0166D0:  0D 0A 20 20 20 6D 61 6B 65 73 20 74 68 65 20 6D    ..   makes the m
0166E0:  65 6E 75 20 62 61 72 20 73 74 61 72 74 20 6F 66    enu bar start of
0166F0:  66 20 6F 6E 20 74 68 65 20 20 66 69 72 73 74 20    f on the  first 
016700:  69 74 65 6D 20 6F 6E 20 74 68 65 20 6D 65 6E 75    item on the menu
016710:  2E 20 20 43 68 61 6E 67 65 20 69 74 20 74 6F 0D    .  Change it to.
016720:  0A 20 20 20 31 2C 20 32 20 6F 72 20 33 20 61 6E    .   1, 2 or 3 an
016730:  64 20 69 74 20 77 69 6C 6C 20 73 74 61 72 74 20    d it will start 
016740:  6F 66 66 20 6F 6E 20 6F 6E 65 20 6F 66 20 74 68    off on one of th
016750:  65 20 6F 74 68 65 72 20 6D 65 6E 75 20 69 74 65    e other menu ite
016760:  6D 73 2E 20 20 41 66 74 65 72 20 74 68 65 0D 0A    ms.  After the..
016770:  20 20 20 70 72 6F 67 72 61 6D 20 68 61 73 20 72       program has r
016780:  65 74 75 72 6E 65 64 20 66 72 6F 6D 20 74 68 65    eturned from the
016790:  20 47 4F 53 55 42 20 31 30 30 30 20 69 6E 20 6C     GOSUB 1000 in l
0167A0:  69 6E 65 20 37 30 2C 20 6D 70 20 74 65 6C 6C 73    ine 70, mp tells
0167B0:  20 75 73 20 77 68 65 72 65 20 74 68 65 0D 0A 20     us where the.. 
0167C0:  20 20 6D 65 6E 75 20 62 61 72 20 68 61 73 20 65      menu bar has e
0167D0:  6E 64 65 64 20 75 70 2E 0D 0A 0D 0A 20 20 20 49    nded up.....   I
0167E0:  67 6E 6F 72 65 20 74 68 65 20 6D 66 20 76 61 72    gnore the mf var
0167F0:  69 61 62 6C 65 20 66 6F 72 20 74 68 65 20 6D 6F    iable for the mo
016800:  65 2E 20 20 50 72 6F 67 72 61 6D 6D 65 72 73 20    e.  Programmers 
016810:  74 65 6E 64 20 74 6F 20 20 62 75 69 6C 64 20 20    tend to  build  
016820:  75 70 20 20 6C 69 62 72 61 72 69 65 73 20 6F 66    up  libraries of
016830:  20 72 6F 75 74 69 6E 65 73 20 66 6F 72 0D 0A 20     routines for.. 
016840:  20 20 70 65 72 66 6F 72 6D 69 6E 67 20 75 73 65      performing use
016850:  66 75 6C 20 74 61 73 6B 73 20 77 68 69 63 68 20    ful tasks which 
016860:  74 68 65 79 20 20 63 61 6E 20 20 6A 75 73 74 20    they  can  just 
016870:  20 73 6C 6F 74 20 20 69 6E 20 74 6F 20 61 6E 79     slot  in to any
016880:  20 6E 65 77 20 70 72 6F 67 72 61 6D 0D 0A 20 20     new program..  
016890:  20 62 65 69 6E 67 20 77 72 69 74 74 65 6E 2E 0D     being written..
0168A0:  0A 0D 0A 20 20 20 41 46 54 45 52 20 54 48 45 20    ...   AFTER THE 
0168B0:  4C 45 43 54 55 52 45 0D 0A 20 20 20 4C 69 6E 65    LECTURE..   Line
0168C0:  73 20 31 30 30 30 20 74 6F 20 31 30 31 37 20 6F    s 1000 to 1017 o
0168D0:  66 20 4C 69 73 74 69 6E 67 20 31 20 66 6F 72 6D    f Listing 1 form
0168E0:  20 61 20 73 75 62 72 6F 75 74 69 6E 65 20 66 6F     a subroutine fo
0168F0:  72 20 70 72 6F 64 75 63 69 6E 67 20 6D 65 6E 75    r producing menu
016900:  73 20 77 69 74 68 0D 0A 20 20 20 61 20 73 63 72    s with..   a scr
016910:  6F 6C 6C 69 6E 67 20 62 61 72 20 74 68 61 74 20    olling bar that 
016920:  74 68 65 20 75 73 65 72 20 6D 6F 76 65 73 20 20    the user moves  
016930:  75 70 20 20 61 6E 64 20 20 64 6F 77 6E 20 74 6F    up  and  down to
016940:  20 73 65 6C 65 63 74 20 74 68 65 20 6D 65 6E 75     select the menu
016950:  20 69 74 65 6D 0D 0A 20 20 20 72 65 71 75 69 72     item..   requir
016960:  65 64 2E 20 20 54 79 70 65 20 69 6E 20 6C 69 6E    ed.  Type in lin
016970:  65 73 20 31 30 30 30 20 74 6F 20 31 30 31 37 20    es 1000 to 1017 
016980:  6F 6E 20 20 74 68 65 69 72 20 6F 77 6E 20 61 6E    on  their own an
016990:  64 20 73 61 76 65 20 69 74 20 69 6E 20 61 20 66    d save it in a f
0169A0:  69 6C 65 2E 0D 0A 20 20 20 54 68 65 79 20 77 69    ile...   They wi
0169B0:  6C 6C 20 6E 6F 74 20 61 63 74 75 61 6C 6C 79 20    ll not actually 
0169C0:  64 6F 20 61 6E 79 74 68 69 6E 67 20 6F 6E 20 74    do anything on t
0169D0:  68 65 69 72 20 6F 77 6E 2C 20 62 75 74 20 77 65    heir own, but we
0169E0:  20 77 69 6C 6C 20 62 65 20 75 73 69 6E 67 20 74     will be using t
0169F0:  68 65 6D 0D 0A 20 20 20 61 73 20 74 68 65 20 62    hem..   as the b
016A00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
016A10:  13 00 01 00 02 09 4E E5 13 00 C7 02 00 00 00 02    ......N.........
016A20:  13 00 C3 02 00 00 00 02 13 00 C8 02 00 00 00 02    ................
016A30:  13 00 C4 02 00 00 00 02 13 00 C9 02 00 00 00 02    ................
016A40:  13 00 C5 02 00 00 00 02 13 00 C1 02 00 00 00 02    ................
016A50:  13 00 C6 02 00 00 00 02 13 00 C2 02 00 00 00 02    ................
016A60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
016A70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
016A80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
016A90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
016AA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
016AB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
016AC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
016AD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
016AE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
016AF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
016B00:  61 72 65 20 73 65 74 20 75 70 2C 20 20 74 68 65    are set up,  the
016B10:  20 20 72 6F 75 74 69 6E 65 73 20 20 61 72 65 20      routines  are 
016B20:  72 65 61 6C 6C 79 20 65 61 73 79 20 74 6F 20 75    really easy to u
016B30:  73 65 2E 20 20 49 66 0D 0A 20 20 20 79 6F 75 20    se.  If..   you 
016B40:  77 61 6E 74 65 64 20 74 6F 20 68 61 76 65 20 73    wanted to have s
016B50:  65 76 65 72 61 6C 20 64 69 66 66 65 72 65 6E 74    everal different
016B60:  20 6D 65 6E 75 73 20 69 6E 20 6F 6E 65 20 70 72     menus in one pr
016B70:  6F 67 72 61 6D 2C 20 79 6F 75 20 63 6F 75 6C 64    ogram, you could
016B80:  20 64 6F 20 69 74 0D 0A 20 20 20 6A 75 73 74 20     do it..   just 
016B90:  62 79 20 61 6C 74 65 72 69 6E 67 20 61 20 66 65    by altering a fe
016BA0:  77 20 6F 66 20 74 68 65 20 20 76 61 72 69 61 62    w of the  variab
016BB0:  6C 65 73 20 20 66 6F 72 20 20 65 61 63 68 20 63    les  for  each c
016BC0:  61 73 65 2C 20 61 6E 64 20 74 68 65 6E 20 75 73    ase, and then us
016BD0:  65 20 74 68 65 0D 0A 20 20 20 73 61 6D 65 20 6C    e the..   same l
016BE0:  69 6E 65 73 20 31 30 30 30 20 74 6F 20 31 30 31    ines 1000 to 101
016BF0:  37 20 74 6F 20 70 72 6F 76 69 64 65 20 74 68 65    7 to provide the
016C00:  20 62 61 73 69 63 20 6D 65 6E 75 20 73 79 73 74     basic menu syst
016C10:  65 6D 2E 0D 0A 0D 0A 20 20 20 54 45 4C 4C 20 4D    em.....   TELL M
016C20:  45 20 4D 4F 52 45 0D 0A 20 20 20 57 65 6C 6C 2C    E MORE..   Well,
016C30:  20 75 6E 66 6F 72 74 75 6E 61 74 65 6C 79 2C 20     unfortunately, 
016C40:  77 65 20 68 61 76 65 20 72 75 6E 20 6F 75 74 20    we have run out 
016C50:  20 6F 66 20 20 73 70 61 63 65 2C 20 20 73 6F 20     of  space,  so 
016C60:  79 6F 75 20 77 69 6C 6C 20 68 61 76 65 20 74 6F    you will have to
016C70:  20 77 61 69 74 0D 0A 20 20 20 75 6E 74 69 6C 20     wait..   until 
016C80:  74 68 65 20 6E 65 78 74 20 74 68 72 69 6C 6C 69    the next thrilli
016C90:  6E 67 20 69 6E 73 74 61 6C 6D 65 6E 74 2C 20 20    ng instalment,  
016CA0:  77 68 65 6E 20 20 77 65 20 20 77 69 6C 6C 20 65    when  we  will e
016CB0:  78 70 6C 61 69 6E 20 61 6C 6C 20 61 62 6F 75 74    xplain all about
016CC0:  20 6B 66 2C 0D 0A 20 20 20 61 6E 64 20 64 65 6D     kf,..   and dem
016CD0:  6F 6E 73 74 72 61 74 65 20 61 20 66 65 77 20 6D    onstrate a few m
016CE0:  6F 72 65 20 69 6E 74 65 72 65 73 74 69 6E 67 20    ore interesting 
016CF0:  6D 65 6E 75 20 65 78 61 6D 70 6C 65 73 2E 20 20    menu examples.  
016D00:  65 0D 0A 20 20 20 6D 62 68 20 62 65 63 61 75 73    e..   mbh becaus
016D10:  65 20 74 68 65 20 6D 65 6E 75 20 62 61 72 20 69    e the menu bar i
016D20:  73 20 64 72 61 77 6E 20 75 73 69 6E 67 20 74 68    s drawn using th
016D30:  65 20 44 52 41 57 52 20 28 64 72 61 77 20 72 65    e DRAWR (draw re
016D40:  6C 61 74 69 76 65 29 20 63 6F 6D 6D 61 6E 64 2E    lative) command.
016D50:  0D 0A 20 20 20 57 6F 72 6B 20 6F 75 74 20 74 68    ..   Work out th
016D60:  65 20 77 69 64 74 68 20 6F 66 20 74 68 65 20 6D    e width of the m
016D70:  65 6E 75 20 20 62 61 72 20 69 6E 20 67 72 61 70    enu  bar in grap
016D80:  68 69 63 73 20 63 6F 6F 72 64 69 6E 61 74 65 73    hics coordinates
016D90:  2C 20 61 6E 64 20 74 68 65 6E 20 74 61 6B 65 0D    , and then take.
016DA0:  0A 20 20 20 6F 66 66 20 6F 6E 65 20 70 69 78 65    .   off one pixe
016DB0:  6C 27 73 20 77 6F 72 74 68 20 61 6E 64 20 73 65    l's worth and se
016DC0:  74 20 6D 62 6C 20 20 74 6F 20 20 74 68 61 74 2E    t mbl  to  that.
016DD0:  20 20 49 6E 20 6C 69 6E 65 20 32 30 20 77 65 20      In line 20 we 
016DE0:  63 61 6C 63 75 6C 61 74 65 64 20 6D 62 6C 0D 0A    calculated mbl..
016DF0:  20 20 20 61 73 20 31 36 2A 36 2D 32 2C 20 77 68       as 16*6-2, wh
016E00:  69 63 68 20 69 73 20 31 36 20 66 6F 72 20 65 61    ich is 16 for ea
016E10:  63 68 20 20 6F 66 20 20 74 68 65 20 20 73 69 78    ch  of  the  six
016E20:  20 63 68 61 72 61 63 74 65 72 73 20 6F 66 20 74     characters of t
016E30:  68 65 20 6D 65 6E 75 20 74 65 78 74 2C 0D 0A 20    he menu text,.. 
016E40:  20 20 6C 65 73 73 20 74 77 6F 2C 20 77 68 69 63      less two, whic
016E50:  68 20 69 73 20 74 68 65 20 77 69 64 74 68 20 6F    h is the width o
016E60:  66 20 61 20 70 69 78 65 6C 20 69 6E 20 4D 4F 44    f a pixel in MOD
016E70:  45 20 31 2E 20 20 49 6E 20 4D 4F 44 45 20 32 20    E 1.  In MODE 2 
016E80:  79 6F 75 20 77 6F 75 6C 64 20 64 6F 0D 0A 20 20    you would do..  
016E90:  20 65 69 67 68 74 20 74 69 6D 65 73 20 74 68 65     eight times the
016EA0:  20 6E 75 6D 62 65 72 20 6F 66 20 63 68 61 72 61     number of chara
016EB0:  63 74 65 72 73 2C 20 61 6E 64 20 6F 6E 6C 79 20    cters, and only 
016EC0:  74 61 6B 65 20 6F 66 66 20 6F 6E 65 2E 0D 0A 0D    take off one....
016ED0:  0A 20 20 20 49 66 20 69 6E 20 64 6F 75 62 74 2C    .   If in doubt,
016EE0:  20 6A 75 73 74 20 65 78 70 65 72 69 6D 65 6E 74     just experiment
016EF0:  20 77 69 74 68 20 74 68 65 20 76 61 6C 75 65 73     with the values
016F00:  42 65 66 6F 72 65 20 74 68 65 6E 2C 20 68 61 76    Before then, hav
016F10:  65 20 61 0D 0A 20 20 20 67 6F 20 61 74 20 64 65    e a..   go at de
016F20:  73 69 67 6E 69 6E 67 20 61 20 66 65 77 20 20 73    signing a few  s
016F30:  69 6D 70 6C 65 20 20 6D 65 6E 75 73 20 20 74 6F    imple  menus  to
016F40:  20 20 67 65 74 20 20 74 68 65 20 20 68 61 6E 67      get  the  hang
016F50:  20 6F 66 20 73 65 74 74 69 6E 67 20 75 70 20 74     of setting up t
016F60:  68 65 0D 0A 20 20 20 76 61 72 69 61 62 6C 65 73    he..   variables
016F70:  2E 0D 0A 0D 0A 0D 0A 20 20 20 6D 63 68 20 20 20    .......   mch   
016F80:  20 20 20 20 20 20 4E 75 6D 62 65 72 20 6F 66 20          Number of 
016F90:  63 68 6F 69 63 65 73 20 6F 6E 20 74 68 65 20 6D    choices on the m
016FA0:  65 6E 75 0D 0A 20 20 20 6D 70 20 20 20 20 20 20    enu..   mp      
016FB0:  20 20 20 20 4D 65 6E 75 20 62 61 72 20 70 6F 73        Menu bar pos
016FC0:  69 74 69 6F 6E 20 28 7A 65 72 6F 20 66 6F 72 20    ition (zero for 
016FD0:  66 69 72 73 74 20 69 74 65 6D 20 6F 6E 20 6D 65    first item on me
016FE0:  6E 75 29 0D 0A 20 20 20 6D 66 20 20 20 20 20 20    nu)..   mf      
016FF0:  20 20 20 20 4D 65 6E 75 20 66 6C 61 67 73 20 28        Menu flags (
017000:  74 6F 20 62 65 20 65 78 70 6C 61 69 6E 65 64 20    to be explained 
017010:  6C 61 74 65 72 29 0D 0A 20 20 20 6D 64 65 20 20    later)..   mde  
017020:  20 20 20 20 20 20 20 4D 65 6E 75 20 64 65 6C 61           Menu dela
017030:  79 0D 0A 20 20 20 6D 63 6F 6C 20 20 20 20 20 20    y..   mcol      
017040:  20 20 50 65 6E 20 74 6F 20 75 73 65 20 66 6F 72      Pen to use for
017050:  20 74 68 65 20 6D 65 6E 75 20 62 61 72 0D 0A 20     the menu bar.. 
017060:  20 20 6D 73 70 20 20 20 20 20 20 20 20 20 56 65      msp         Ve
017070:  72 74 69 63 61 6C 20 73 70 61 63 69 6E 67 20 6F    rtical spacing o
017080:  66 20 6D 65 6E 75 20 69 74 65 6D 73 20 69 6E 20    f menu items in 
017090:  67 72 61 70 68 69 63 73 20 63 6F 6F 72 64 69 6E    graphics coordin
0170A0:  61 74 65 73 0D 0A 20 20 20 6D 78 2C 20 6D 79 20    ates..   mx, my 
0170B0:  20 20 20 20 20 47 72 61 70 68 69 63 73 20 63 6F         Graphics co
0170C0:  6F 72 64 69 6E 61 74 65 73 20 6F 66 20 74 6F 70    ordinates of top
0170D0:  20 6C 65 66 74 20 6F 66 20 6D 65 6E 75 0D 0A 20     left of menu.. 
0170E0:  20 20 6D 62 68 20 20 20 20 20 20 20 20 20 4D 65      mbh         Me
0170F0:  6E 75 20 62 61 72 20 68 65 69 67 68 74 20 69 6E    nu bar height in
017100:  20 75 6E 74 69 6C 20 69 74 20 6C 6F 6F 6B 73 20     until it looks 
017110:  72 69 67 68 74 21 0D 0A 0D 0A 20 20 20 4B 45 59    right!....   KEY
017120:  53 20 54 4F 20 53 55 43 43 45 53 53 0D 0A 20 20    S TO SUCCESS..  
017130:  20 49 6E 20 6C 69 6E 65 20 33 30 20 77 65 20 61     In line 30 we a
017140:  72 65 20 74 65 6C 6C 69 6E 67 20 74 68 65 20 6D    re telling the m
017150:  65 6E 75 20 20 72 6F 75 74 69 6E 65 73 20 77 68    enu  routines wh
017160:  69 63 68 20 6B 65 79 73 20 77 65 20 77 61 6E 74    ich keys we want
017170:  20 69 74 20 74 6F 20 74 61 6B 65 0D 0A 20 20 20     it to take..   
017180:  6E 6F 74 69 63 65 20 6F 66 2E 20 20 57 65 20 68    notice of.  We h
017190:  61 76 65 20 63 68 6F 73 65 6E 20 74 68 65 20 20    ave chosen the  
0171A0:  63 75 72 73 6F 72 20 20 6B 65 79 73 20 20 61 6E    cursor  keys  an
0171B0:  64 20 20 43 4F 50 59 20 6B 65 79 20 62 79 20 73    d  COPY key by s
0171C0:  65 74 74 69 6E 67 20 74 68 65 0D 0A 20 20 20 76    etting the..   v
0171D0:  61 72 69 61 62 6C 65 73 20 74 6F 20 74 68 65 20    ariables to the 
0171E0:  61 70 70 72 6F 70 72 69 61 74 65 20 6B 65 79 20    appropriate key 
0171F0:  6E 75 6D 62 65 72 73 2C 20 62 75 74 20 79 6F 75    numbers, but you
017200:  20 63 6F 75 6C 64 20 75 73 65 20 61 6E 79 20 6F     could use any o
017210:  74 68 65 72 20 6B 65 79 73 0D 0A 20 20 20 62 79    ther keys..   by
017220:  20 63 68 61 6E 67 69 6E 67 20 74 68 65 20 6E 75     changing the nu
017230:  6D 62 65 72 73 2C 20 6F 72 20 65 76 65 6E 20 61    mbers, or even a
017240:  6C 6C 6F 77 20 74 68 65 20 75 73 65 72 20 74 6F    llow the user to
017250:  20 72 65 64 65 66 69 6E 65 20 74 68 65 20 6B 65     redefine the ke
017260:  79 73 2E 0D 0A 0D 0A 20 20 20 54 68 65 20 6B 65    ys.....   The ke
017270:  79 73 20 69 6E 64 69 63 61 74 65 64 20 62 79 20    ys indicated by 
017280:  22 75 70 22 20 61 6E 64 20 22 64 6F 77 22 20 6D    "up" and "dow" m
017290:  61 6B 65 20 74 68 65 20 6D 65 6E 75 20 62 61 72    ake the menu bar
0172A0:  20 6D 6F 76 65 20 75 70 20 61 6E 64 20 64 6F 77     move up and dow
0172B0:  6E 20 6F 6E 0D 0A 20 20 20 74 68 65 20 73 63 72    n on..   the scr
0172C0:  65 65 6E 2E 20 20 54 68 65 20 6F 74 68 65 72 20    een.  The other 
0172D0:  74 68 72 65 65 20 6B 65 79 73 2C 20 22 6C 65 22    three keys, "le"
0172E0:  2C 20 22 72 69 22 20 20 61 6E 64 20 22 66 69 22    , "ri"  and "fi"
0172F0:  20 63 61 6E 20 62 65 20 75 73 65 64 20 62 79 20     can be used by 
017300:  20 67 72 61 70 68 69 63 73 20 63 6F 6F 72 64 69     graphics coordi
017310:  6E 61 74 65 73 0D 0A 20 20 20 6D 62 6C 20 20 20    nates..   mbl   
017320:  20 20 20 20 20 20 4D 65 6E 75 20 62 61 72 20 6C          Menu bar l
017330:  65 6E 67 74 68 20 69 6E 20 67 72 61 70 68 69 63    ength in graphic
017340:  73 20 63 6F 6F 72 64 69 6E 61 74 65 73 0D 0A 20    s coordinates.. 
017350:  20 20 75 70 2C 20 64 6F 77 20 20 20 20 20 53 65      up, dow     Se
017360:  74 20 74 68 65 73 65 20 74 6F 20 74 68 65 20 49    t these to the I
017370:  4E 4B 45 59 20 6E 75 6D 62 65 72 73 20 6F 66 20    NKEY numbers of 
017380:  74 68 65 20 75 70 20 61 6E 64 20 64 6F 77 6E 20    the up and down 
017390:  6B 65 79 73 20 6F 66 20 79 6F 75 72 0D 0A 20 20    keys of your..  
0173A0:  20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 6F                 cho
0173B0:  69 63 65 0D 0A 20 20 20 6C 65 2C 20 72 69 2C 20    ice..   le, ri, 
0173C0:  66 69 20 20 53 65 74 20 74 68 65 73 65 20 74 6F    fi  Set these to
0173D0:  20 74 68 65 20 49 4E 4B 45 59 20 6E 75 6D 62 65     the INKEY numbe
0173E0:  72 73 20 6F 66 20 6F 74 68 65 72 20 6B 65 79 73    rs of other keys
0173F0:  20 74 68 61 74 20 79 6F 75 20 77 61 6E 74 20 74     that you want t
017400:  68 65 0D 0A 20 20 20 20 20 20 20 20 20 20 20 20    he..            
017410:  20 20 20 6D 65 6E 75 20 74 6F 20 72 65 73 70 6F       menu to respo
017420:  6E 64 20 74 6F 2E 0D 0A 20 20 20 6B 66 20 20 20    nd to...   kf   
017430:  20 20 20 20 20 20 20 4B 65 79 20 66 6C 61 67 73           Key flags
017440:  20 28 74 6F 20 62 65 20 65 78 70 6C 61 69 6E 65     (to be explaine
017450:  64 20 6C 61 74 65 72 29 0D 0A 0D 0A 20 20 20 54    d later)....   T
017460:  61 62 6C 65 20 32 0D 0A 0D 0A 20 20 20 2D 2D 2D    able 2....   ---
017470:  2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D    ----------------
017480:  2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D    ----------------
017490:  2D 2D 2D 0D 0A 0D 0A 20 20 20 46 69 67 75 72 65    ---....   Figure
0174A0:  20 31 3A 0D 0A 0D 0A 20 20 20 31 30 20 4D 4F 44     1:....   10 MOD
0174B0:  45 20 31 3A 6D 63 68 3D 34 3A 6D 70 3D 30 3A 6D    E 1:mch=4:mp=0:m
0174C0:  66 3D 30 3A 6D 64 65 3D 30 0D 0A 20 20 20 32 30    f=0:mde=0..   20
0174D0:  20 6D 63 6F 6C 3D 31 3A 6D 73 70 3D 31 36 3A 6D     mcol=1:msp=16:m
0174E0:  78 3D 30 3A 6D 79 3D 33 39 39 2D 32 2A 31 36 3A    x=0:my=399-2*16:
0174F0:  6D 62 68 3D 31 36 3A 6D 62 6C 3D 31 36 2A 36 2D    mbh=16:mbl=16*6-
017500:  74 68 65 0D 0A 20 20 20 70 72 6F 67 72 61 6D 6D    the..   programm
017510:  65 72 20 74 6F 20 20 70 72 6F 76 69 64 65 20 20    er to  provide  
017520:  6F 74 68 65 72 20 20 66 65 61 74 75 72 65 73 2E    other  features.
017530:  20 20 20 54 68 65 20 20 6B 65 79 20 20 66 6C 61       The  key  fla
017540:  67 73 2C 20 20 76 61 72 69 61 62 6C 65 20 20 6B    gs,  variable  k
017550:  66 2C 0D 0A 20 20 20 69 6E 64 69 63 61 74 65 20    f,..   indicate 
017560:  77 68 69 63 68 20 6F 66 20 74 68 65 73 65 20 74    which of these t
017570:  68 72 65 65 20 6B 65 79 73 20 74 68 65 20 20 72    hree keys the  r
017580:  6F 75 74 69 6E 65 20 77 69 6C 6C 20 6C 6F 6F 6B    outine will look
017590:  20 6F 75 74 20 66 6F 72 2E 20 20 49 6E 20 6F 75     out for.  In ou
0175A0:  72 0D 0A 20 20 20 65 78 61 6D 70 6C 65 20 77 65    r..   example we
0175B0:  20 61 72 65 20 6F 6E 6C 79 20 69 6E 74 65 72 65     are only intere
0175C0:  73 74 65 64 20 69 6E 20 77 68 65 6E 20 74 68 65    sted in when the
0175D0:  20 75 73 65 72 20 70 72 65 73 73 65 73 20 43 4F     user presses CO
0175E0:  50 59 20 74 6F 20 73 65 6C 65 63 74 20 74 68 65    PY to select the
0175F0:  0D 0A 20 20 20 6D 65 6E 75 20 69 74 65 6D 2E 20    ..   menu item. 
017600:  20 54 6F 20 64 6F 20 74 68 69 73 2C 20 6B 66 20     To do this, kf 
017610:  68 61 73 20 62 65 65 6E 20 73 65 74 20 74 6F 20    has been set to 
017620:  34 2E 20 20 4D 6F 72 65 20 6F 6E 20 68 6F 77 20    4.  More on how 
017630:  6B 66 20 77 6F 72 6B 73 20 6C 61 74 65 72 2E 0D    kf works later..
017640:  0A 0D 0A 20 20 20 54 48 45 20 52 45 41 4C 4C 59    ...   THE REALLY
017650:  20 45 58 43 49 54 49 4E 47 20 42 49 54 0D 0A 20     EXCITING BIT.. 
017660:  20 20 4F 6E 63 65 20 61 6C 6C 20 74 68 65 20 76      Once all the v
017670:  61 72 69 61 62 6C 65 73 20 61 72 65 20 73 65 74    ariables are set
017680:  20 20 75 70 2C 20 20 77 65 20 20 64 6F 20 20 47      up,  we  do  G
017690:  4F 53 55 42 20 20 31 30 31 30 20 69 6E 20 6C 69    OSUB  1010 in li
0176A0:  6E 65 20 36 30 2C 20 77 68 69 63 68 0D 0A 20 20    ne 60, which..  
0176B0:  20 70 72 69 6E 74 73 20 74 68 65 20 6D 65 6E 75     prints the menu
0176C0:  20 62 61 72 20 75 70 20 6F 6E 20 20 74 68 65 20     bar up on  the 
0176D0:  20 73 63 72 65 65 6E 2E 20 20 20 54 68 65 20 20     screen.   The  
0176E0:  47 4F 53 55 42 20 31 30 30 30 20 69 6E 20 74 68    GOSUB 1000 in th
0176F0:  65 20 6E 65 78 74 20 6C 69 6E 65 0D 0A 20 20 20    e next line..   
017700:  3A 6D 62 68 3D 33 32 3A 6D 62 6C 3D 31 36 2A 37    :mbh=32:mbl=16*7
017710:  2D 32 0D 0A 0D 0A 20 20 20 48 61 76 65 20 61 20    -2....   Have a 
017720:  70 6C 61 79 20 61 72 6F 75 6E 64 20 61 6E 64 20    play around and 
017730:  74 72 79 20 6F 75 74 20 20 64 69 66 66 65 72 65    try out  differe
017740:  6E 74 20 76 61 6C 75 65 73 20 66 6F 72 20 74 68    nt values for th
017750:  65 73 65 20 76 61 72 69 61 62 6C 65 73 2E 20 20    ese variables.  
017760:  54 68 65 0D 0A 20 20 20 6D 73 70 20 76 61 72 69    The..   msp vari
017770:  61 62 6C 65 20 73 68 6F 75 6C 64 20 62 65 20 73    able should be s
017780:  65 74 20 61 63 63 6F 72 64 69 6E 67 20 20 74 6F    et according  to
017790:  20 20 68 6F 77 20 20 66 61 72 20 61 70 61 72 74      how  far apart
0177A0:  20 74 68 65 20 6C 69 6E 65 73 20 6F 66 20 74 65     the lines of te
0177B0:  78 74 0D 0A 20 20 20 61 72 65 2E 20 20 49 66 20    xt..   are.  If 
0177C0:  65 61 63 68 20 6D 65 6E 75 20 69 74 65 6D 20 74    each menu item t
0177D0:  61 6B 65 73 20 75 70 20 20 6F 6E 65 20 20 6C 69    akes up  one  li
0177E0:  6E 65 2C 20 61 6E 64 20 74 68 65 72 65 20 61 72    ne, and there ar
0177F0:  65 20 6E 6F 20 67 61 70 73 20 62 65 74 77 65 65    e no gaps betwee
017800:  6E 0D 0A 20 20 20 74 68 65 6D 2C 20 6D 73 70 20    n..   them, msp 
017810:  6E 65 65 64 73 20 74 6F 20 62 65 20 20 73 65 74    needs to be  set
017820:  20 20 74 6F 20 20 31 36 2C 20 20 61 73 20 20 74      to  16,  as  t
017830:  68 65 72 65 20 20 61 72 65 20 20 74 68 61 74 20    here  are  that 
017840:  6D 61 6E 79 20 67 72 61 70 68 69 63 73 20 79 2D    many graphics y-
017850:  0D 0A 20 20 20 63 6F 6F 72 64 69 6E 61 74 65 73    ..   coordinates
017860:  20 66 6F 72 20 65 61 63 68 20 74 65 78 74 20 6C     for each text l
017870:  69 6E 65 2E 20 20 59 6F 75 20 63 61 6E 20 65 76    ine.  You can ev
017880:  65 6E 20 68 61 76 65 20 6D 65 6E 75 20 74 65 78    en have menu tex
017890:  74 20 70 72 69 6E 74 65 64 20 65 76 65 72 79 0D    t printed every.
0178A0:  0A 20 20 20 6F 6E 65 20 61 6E 64 20 61 20 68 61    .   one and a ha
0178B0:  6C 66 20 6C 69 6E 65 73 20 61 6E 64 20 73 65 74    lf lines and set
0178C0:  20 6D 73 70 20 74 6F 20 32 34 20 69 66 20 79 6F     msp to 24 if yo
0178D0:  75 20 66 65 65 6C 20 73 6F 20 69 6E 63 6C 69 6E    u feel so inclin
0178E0:  65 64 2E 0D 0A 0D 0A 20 20 20 54 68 65 20 76 61    ed.....   The va
0178F0:  72 69 61 62 6C 65 73 20 6D 78 20 61 6E 64 20 6D    riables mx and m
017900:  63 61 6C 6C 73 20 74 68 65 20 6D 61 69 6E 20 6D    calls the main m
017910:  65 6E 75 20 72 6F 75 74 69 6E 65 2C 20 77 68 69    enu routine, whi
017920:  63 68 20 6C 65 74 73 20 74 68 65 20 20 75 73 65    ch lets the  use
017930:  72 20 6D 6F 76 65 20 74 68 65 20 6D 65 6E 75 20    r move the menu 
017940:  62 61 72 20 75 70 20 61 6E 64 0D 0A 20 20 20 64    bar up and..   d
017950:  6F 77 6E 20 75 6E 74 69 6C 20 74 68 65 20 43 4F    own until the CO
017960:  50 59 20 6B 65 79 20 28 69 6E 20 74 68 69 73 20    PY key (in this 
017970:  20 63 61 73 65 29 20 20 69 73 20 70 72 65 73 73     case)  is press
017980:  65 64 2E 20 20 4C 69 6E 65 20 38 30 20 74 68 65    ed.  Line 80 the
017990:  6E 20 69 6E 66 6F 72 6D 73 0D 0A 20 20 20 74 68    n informs..   th
0179A0:  65 20 75 73 65 72 20 6F 66 20 74 68 65 20 70 6F    e user of the po
0179B0:  73 69 74 69 6F 6E 20 6F 66 20 74 68 65 20 20 6D    sition of the  m
0179C0:  65 6E 75 20 20 62 61 72 2E 20 20 20 54 68 69 73    enu  bar.   This
0179D0:  20 6D 75 73 74 20 62 65 20 74 68 65 20 6D 6F 73     must be the mos
0179E0:  74 20 75 73 65 66 75 6C 0D 0A 20 20 20 6D 65 6E    t useful..   men
0179F0:  75 20 65 76 65 72 21 0D 0A 0D 0A 20 20 20 49 66    u ever!....   If
017A00:  20 79 6F 75 20 77 61 6E 74 20 74 6F 20 72 65 6D     you want to rem
017A10:  6F 76 65 20 74 68 65 20 6D 65 6E 75 20 20 62 61    ove the menu  ba
017A20:  72 20 20 66 72 6F 6D 20 74 68 65 20 73 63 72 65    r  from the scre
017A30:  65 6E 20 61 67 61 69 6E 20 61 66 74 65 72 20 72    en again after r
017A40:  65 74 75 72 6E 69 6E 67 0D 0A 20 20 20 66 72 6F    eturning..   fro
017A50:  6D 20 6C 69 6E 65 20 31 30 30 30 2C 20 61 6C 6C    m line 1000, all
017A60:  20 79 6F 75 20 68 61 76 65 20 20 74 6F 20 20 64     you have  to  d
017A70:  6F 20 20 69 73 20 20 47 4F 53 55 42 20 20 31 30    o  is  GOSUB  10
017A80:  31 30 20 61 67 61 69 6E 2E 20 20 59 6F 75 20 6D    10 again.  You m
017A90:  69 67 68 74 20 6F 66 0D 0A 20 20 20 63 6F 75 72    ight of..   cour
017AA0:  73 65 20 77 61 6E 74 20 74 6F 20 6C 65 61 76 65    se want to leave
017AB0:  20 69 74 20 69 6E 20 70 6C 61 63 65 20 72 65 61     it in place rea
017AC0:  64 79 20 66 6F 72 20 74 68 65 20 6E 65 78 74 20    dy for the next 
017AD0:  74 69 6D 65 20 74 68 65 20 6D 65 6E 75 20 69 73    time the menu is
017AE0:  20 75 73 65 64 2E 0D 0A 0D 0A 20 20 20 4F 6E 63     used.....   Onc
017AF0:  65 20 74 68 65 20 76 61 72 69 61 62 6C 65 73 20    e the variables 
017B00:  79 20 20 68 6F 6C 64 20 20 74 68 65 20 20 67 72    y  hold  the  gr
017B10:  61 70 68 69 63 73 20 20 63 6F 6F 72 64 69 6E 61    aphics  coordina
017B20:  74 65 73 20 20 6F 66 20 74 68 65 20 74 6F 70 20    tes  of the top 
017B30:  6C 65 66 74 0D 0A 20 20 20 70 69 78 65 6C 20 6F    left..   pixel o
017B40:  66 20 74 68 65 20 6D 65 6E 75 20 62 61 72 20 77    f the menu bar w
017B50:  68 65 6E 20 69 74 20 69 73 20 20 6F 76 65 72 20    hen it is  over 
017B60:  74 68 65 20 66 69 72 73 74 20 6D 65 6E 75 20 69    the first menu i
017B70:  74 65 6D 2E 20 20 41 6C 6C 20 74 68 65 20 6F 74    tem.  All the ot
017B80:  68 65 72 0D 0A 20 20 20 63 6F 6F 72 64 69 6E 61    her..   coordina
017B90:  74 65 73 20 6E 65 65 64 65 64 20 61 72 65 20 77    tes needed are w
017BA0:  6F 72 6B 65 64 20 6F 75 74 20 75 73 69 6E 67 20    orked out using 
017BB0:  6D 73 70 2E 0D 0A 0D 0A 20 20 20 46 69 6E 61 6C    msp.....   Final
017BC0:  6C 79 20 74 68 65 20 61 63 74 75 61 6C 20 73 69    ly the actual si
017BD0:  7A 65 20 6F 66 20 74 68 65 20 20 6D 65 6E 75 20    ze of the  menu 
017BE0:  20 62 61 72 20 20 69 73 20 20 73 74 6F 72 65 64     bar  is  stored
017BF0:  20 69 6E 20 6D 62 6C 20 61 6E 64 20 6D 62 68 2E     in mbl and mbh.
017C00:  20 20 54 68 65 0D 0A 20 20 20 68 65 69 67 68 74      The..   height
017C10:  2C 20 73 74 6F 72 65 64 20 69 6E 20 6D 62 68 2C    , stored in mbh,
017C20:  20 69 73 20 6D 65 61 73 75 72 65 64 20 69 6E 20     is measured in 
017C30:  67 72 61 70 68 69 63 73 20 63 6F 6F 72 64 69 6E    graphics coordin
017C40:  61 74 65 73 2E 20 20 54 68 69 73 20 63 6F 75 6C    ates.  This coul
017C50:  64 20 62 65 0D 0A 20 20 20 74 68 65 20 73 61 6D    d be..   the sam
017C60:  65 20 61 73 20 6D 73 70 2C 20 62 75 74 20 6D 61    e as msp, but ma
017C70:  6B 69 6E 67 20 20 69 74 20 20 6C 61 72 67 65 72    king  it  larger
017C80:  20 20 6F 72 20 73 6D 61 6C 6C 65 72 20 77 69 6C      or smaller wil
017C90:  6C 20 70 72 6F 64 75 63 65 20 64 69 66 66 65 72    l produce differ
017CA0:  65 6E 74 0D 0A 20 20 20 65 66 66 65 63 74 73 2E    ent..   effects.
017CB0:  0D 0A 0D 0A 20 20 20 54 68 65 20 76 61 72 69 61    ....   The varia
017CC0:  62 6C 65 20 66 6F 72 20 74 68 65 20 6C 65 6E 67    ble for the leng
017CD0:  74 68 20 6F 66 20 74 68 65 20 6D 65 6E 75 20 62    th of the menu b
017CE0:  61 72 2C 20 6D 62 6C 2C 20 64 6F 65 73 20 6E 6F    ar, mbl, does no
017CF0:  74 20 77 6F 72 6B 20 71 75 69 74 65 20 6C 69 6B    t work quite lik
017D00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
017D10:  14 00 01 00 02 09 4E E5 14 00 C1 02 00 00 00 02    ......N.........
017D20:  14 00 C6 02 00 00 00 02 14 00 C2 02 00 00 00 02    ................
017D30:  14 00 C7 02 00 00 00 02 14 00 C3 02 00 00 00 02    ................
017D40:  14 00 C8 02 00 00 00 02 14 00 C4 02 00 00 00 02    ................
017D50:  14 00 C9 02 00 00 00 02 14 00 C5 02 00 00 00 02    ................
017D60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
017D70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
017D80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
017D90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
017DA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
017DB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
017DC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
017DD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
017DE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
017DF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
017E00:  32 0D 0A 20 20 20 33 30 20 75 70 3D 30 3A 64 6F    2..   30 up=0:do
017E10:  77 3D 32 3A 6C 65 3D 38 3A 72 69 3D 31 3A 66 69    w=2:le=8:ri=1:fi
017E20:  3D 39 3A 6B 66 3D 34 0D 0A 20 20 20 34 30 20 50    =9:kf=4..   40 P
017E30:  52 49 4E 54 22 4D 65 6E 75 22 3A 50 52 49 4E 54    RINT"Menu":PRINT
017E40:  22 2D 2D 2D 2D 22 0D 0A 20 20 20 35 30 20 46 4F    "----"..   50 FO
017E50:  52 20 78 3D 31 20 54 4F 20 6D 63 68 3A 50 52 49    R x=1 TO mch:PRI
017E60:  4E 54 22 49 74 65 6D 22 78 3A 4E 45 58 54 0D 0A    NT"Item"x:NEXT..
017E70:  20 20 20 36 30 20 47 4F 53 55 42 20 31 30 31 30       60 GOSUB 1010
017E80:  0D 0A 20 20 20 37 30 20 47 4F 53 55 42 20 31 30    ..   70 GOSUB 10
017E90:  30 30 0D 0A 20 20 20 38 30 20 50 52 49 4E 54 22    00..   80 PRINT"
017EA0:  59 6F 75 20 68 61 76 65 20 63 68 6F 73 65 6E 20    You have chosen 
017EB0:  69 74 65 6D 22 6D 70 2B 31 0D 0A 20 20 20 39 30    item"mp+1..   90
017EC0:  20 45 4E 44 0D 0A 20 20 20 31 30 30 30 20 6B 70     END..   1000 kp
017ED0:  3D 30 3A 6D 64 3D 31 3A 6D 7A 3D 30 0D 0A 20 20    =0:md=1:mz=0..  
017EE0:  20 31 30 30 31 20 57 48 49 4C 45 20 28 6B 70 20     1001 WHILE (kp 
017EF0:  41 4E 44 20 6B 66 29 3D 30 0D 0A 20 20 20 31 30    AND kf)=0..   10
017F00:  30 32 20 57 48 49 4C 45 20 28 32 5E 6D 70 20 41    02 WHILE (2^mp A
017F10:  4E 44 20 6D 66 29 3E 30 20 4F 52 20 6D 7A 0D 0A    ND mf)>0 OR mz..
017F20:  20 20 20 31 30 30 33 20 6D 7A 3D 30 3A 47 4F 53       1003 mz=0:GOS
017F30:  55 42 20 31 30 31 30 3A 6D 70 3D 28 6D 70 2B 6D    UB 1010:mp=(mp+m
017F40:  63 68 2B 6D 64 29 20 4D 4F 44 20 6D 63 68 3A 47    ch+md) MOD mch:G
017F50:  4F 53 55 42 20 31 30 31 30 0D 0A 20 20 20 31 30    OSUB 1010..   10
017F60:  30 34 20 57 45 4E 44 0D 0A 20 20 20 31 30 30 35    04 WEND..   1005
017F70:  20 6D 64 3D 28 49 4E 4B 45 59 28 75 70 29 3E 2D     md=(INKEY(up)>-
017F80:  31 29 2D 28 49 4E 4B 45 59 28 64 6F 77 29 3E 2D    1)-(INKEY(dow)>-
017F90:  31 29 3A 6D 7A 3D 6D 64 0D 0A 20 20 20 31 30 30    1):mz=md..   100
017FA0:  36 20 6B 70 3D 2D 28 49 4E 4B 45 59 28 6C 65 29    6 kp=-(INKEY(le)
017FB0:  3E 2D 31 29 2D 32 2A 28 49 4E 4B 45 59 28 72 69    >-1)-2*(INKEY(ri
017FC0:  29 3E 2D 31 29 2D 34 2A 28 49 4E 4B 45 59 28 66    )>-1)-4*(INKEY(f
017FD0:  69 29 3E 2D 31 29 0D 0A 20 20 20 31 30 30 37 20    i)>-1)..   1007 
017FE0:  57 45 4E 44 0D 0A 20 20 20 31 30 30 38 20 57 48    WEND..   1008 WH
017FF0:  49 4C 45 20 49 4E 4B 45 59 24 3C 3E 22 22 3A 57    ILE INKEY$<>"":W
018000:  64 20 72 65 73 70 6F 6E 64 20 74 6F 20 20 74 68    d respond to  th
018010:  65 20 20 22 6C 65 22 2C 20 20 22 72 69 22 20 20    e  "le",  "ri"  
018020:  61 6E 64 20 20 22 66 69 22 20 20 6B 65 79 73 2E    and  "fi"  keys.
018030:  20 20 20 4A 75 73 74 20 20 61 64 64 20 20 75 70       Just  add  up
018040:  20 74 68 65 0D 0A 20 20 20 66 6F 6C 6C 6F 77 69     the..   followi
018050:  6E 67 20 76 61 6C 75 65 73 20 66 6F 72 20 65 61    ng values for ea
018060:  63 68 20 6F 66 20 74 68 65 20 6B 65 79 73 3A 0D    ch of the keys:.
018070:  0A 0D 0A 20 20 20 20 20 6C 65 20 20 20 20 20 20    ...     le      
018080:  31 0D 0A 20 20 20 20 20 72 69 20 20 20 20 20 20    1..     ri      
018090:  32 0D 0A 20 20 20 20 20 66 69 20 20 20 20 20 20    2..     fi      
0180A0:  34 0D 0A 0D 0A 20 20 20 54 68 75 73 20 33 20 77    4....   Thus 3 w
0180B0:  6F 75 6C 64 20 6D 65 61 6E 20 74 68 61 74 20 6F    ould mean that o
0180C0:  6E 6C 79 20 74 68 65 20 22 6C 65 22 20 61 6E 64    nly the "le" and
0180D0:  20 22 72 69 22 20 6B 65 79 73 20 73 68 6F 75 6C     "ri" keys shoul
0180E0:  64 20 62 65 20 75 73 65 64 2E 0D 0A 0D 0A 20 20    d be used.....  
0180F0:  20 49 6E 20 6F 75 72 20 65 78 61 6D 70 6C 65 20     In our example 
018100:  6C 61 73 74 20 6D 6F 6E 74 68 2C 20 77 65 20 73    last month, we s
018110:  65 74 20 6B 66 20 20 74 6F 20 20 62 65 20 34 2C    et kf  to  be 4,
018120:  20 73 6F 20 74 68 61 74 20 6F 6E 6C 79 20 74 68     so that only th
018130:  65 20 22 66 69 22 20 6B 65 79 0D 0A 20 20 20 28    e "fi" key..   (
018140:  77 68 69 63 68 20 77 65 20 68 61 64 20 73 65 74    which we had set
018150:  20 74 6F 20 62 65 20 20 43 4F 50 59 29 20 20 77     to be  COPY)  w
018160:  61 73 20 20 64 65 74 65 63 74 65 64 2E 20 20 20    as  detected.   
018170:  49 66 20 20 77 65 20 68 61 64 20 77 61 6E 74 65    If  we had wante
018180:  64 20 74 6F 2C 20 77 65 0D 0A 20 20 20 63 6F 75    d to, we..   cou
018190:  6C 64 20 68 61 76 65 20 73 65 74 20 22 6C 65 22    ld have set "le"
0181A0:  20 74 6F 20 62 65 20 20 31 38 20 20 61 6E 64 20     to be  18  and 
0181B0:  20 22 72 69 22 20 20 74 6F 20 20 62 65 20 20 36     "ri"  to  be  6
0181C0:  20 28 74 68 65 20 52 45 54 55 52 4E 20 61 6E 64     (the RETURN and
0181D0:  20 45 4E 54 45 52 0D 0A 20 20 20 6B 65 79 73 29     ENTER..   keys)
0181E0:  2E 20 20 54 68 65 6E 20 77 69 74 68 20 6B 66 20    .  Then with kf 
0181F0:  73 65 74 20 74 6F 20 37 2C 20 73 6F 20 20 74 68    set to 7, so  th
018200:  45 4E 44 0D 0A 20 20 20 31 30 30 39 20 52 45 54    END..   1009 RET
018210:  55 52 4E 0D 0A 20 20 20 31 30 31 30 20 50 52 49    URN..   1010 PRI
018220:  4E 54 20 43 48 52 24 28 32 33 29 2B 43 48 52 24    NT CHR$(23)+CHR$
018230:  28 31 29 3B 0D 0A 20 20 20 31 30 31 31 20 4D 4F    (1);..   1011 MO
018240:  56 45 20 6D 78 2C 6D 79 2D 6D 70 2A 6D 73 70 2B    VE mx,my-mp*msp+
018250:  28 6D 64 3D 2D 31 29 2A 28 6D 62 68 2D 32 29 0D    (md=-1)*(mbh-2).
018260:  0A 20 20 20 31 30 31 32 20 46 4F 52 20 6D 63 3D    .   1012 FOR mc=
018270:  31 20 54 4F 20 6D 62 68 2F 32 0D 0A 20 20 20 31    1 TO mbh/2..   1
018280:  30 31 33 20 44 52 41 57 52 20 6D 62 6C 2C 30 2C    013 DRAWR mbl,0,
018290:  6D 63 6F 6C 3A 4D 4F 56 45 52 20 2D 6D 62 6C 2C    mcol:MOVER -mbl,
0182A0:  2D 32 2D 28 6D 64 3D 2D 31 29 2A 34 0D 0A 20 20    -2-(md=-1)*4..  
0182B0:  20 31 30 31 34 20 46 4F 52 20 64 65 6C 61 79 3D     1014 FOR delay=
0182C0:  30 20 54 4F 20 6D 64 65 3A 4E 45 58 54 0D 0A 20    0 TO mde:NEXT.. 
0182D0:  20 20 31 30 31 35 20 4E 45 58 54 0D 0A 20 20 20      1015 NEXT..   
0182E0:  31 30 31 36 20 50 52 49 4E 54 20 43 48 52 24 28    1016 PRINT CHR$(
0182F0:  32 33 29 2B 43 48 52 24 28 30 29 3B 0D 0A 20 20    23)+CHR$(0);..  
018300:  20 31 30 31 37 20 52 45 54 55 52 4E 0D 0A 1A FF     1017 RETURN....
018310:  50 41 54 43 48 20 36 0D 0A 20 20 20 42 79 20 53    PATCH 6..   By S
018320:  74 65 70 68 65 6E 20 61 6E 64 20 4D 61 74 74 68    tephen and Matth
018330:  65 77 20 50 68 69 6C 6C 69 70 73 0D 0A 0D 0A 20    ew Phillips.... 
018340:  20 20 22 57 68 61 74 27 73 20 6F 6E 20 74 68 65      "What's on the
018350:  20 6D 65 6E 75 20 66 6F 72 20 74 68 69 73 20 6D     menu for this m
018360:  6F 6E 74 68 3F 22 2C 20 20 77 65 20 20 68 65 61    onth?",  we  hea
018370:  72 20 79 6F 75 20 63 72 79 2E 20 20 57 65 6C 6C    r you cry.  Well
018380:  61 31 30 20 31 30 31 30 31 0D 0A 42 20 61 31 31    a10 10101..B a11
018390:  20 34 35 31 20 34 35 39 20 61 31 31 20 38 31 33     451 459 a11 813
0183A0:  31 0D 0A 42 20 61 31 31 20 35 33 32 20 35 34 30    1..B a11 532 540
0183B0:  20 61 31 31 20 39 30 37 39 0D 0A 42 20 61 31 32     a11 9079..B a12
0183C0:  20 33 38 31 30 20 33 38 31 38 20 61 31 32 20 31     3810 3818 a12 1
0183D0:  30 35 31 31 0D 0A 42 20 61 31 32 20 38 34 35 34    0511..B a12 8454
0183E0:  20 38 34 36 30 20 61 31 32 20 31 31 37 36 38 0D     8460 a12 11768.
0183F0:  0A 42 20 61 31 33 20 32 30 37 35 20 32 30 38 33    .B a13 2075 2083
018400:  61 74 20 61 6C 6C 20 74 68 72 65 65 20 6B 65 79    at all three key
018410:  73 20 77 65 72 65 20 64 65 74 65 63 74 65 64 2C    s were detected,
018420:  20 74 68 65 0D 0A 20 20 20 75 73 65 72 20 63 6F     the..   user co
018430:  75 6C 64 20 68 61 76 65 20 75 73 65 64 20 74 68    uld have used th
018440:  65 20 63 75 72 73 6F 72 20 6B 65 79 73 20 20 74    e cursor keys  t
018450:  6F 20 20 6D 6F 76 65 20 20 74 68 65 20 6D 65 6E    o  move  the men
018460:  75 20 62 61 72 20 75 70 20 61 6E 64 20 64 6F 77    u bar up and dow
018470:  6E 2C 0D 0A 20 20 20 61 6E 64 20 73 65 6C 65 63    n,..   and selec
018480:  74 65 64 20 74 68 65 20 6D 65 6E 75 20 69 74 65    ted the menu ite
018490:  6D 20 77 69 74 68 20 61 6E 79 20 6F 66 20 74 68    m with any of th
0184A0:  65 20 43 4F 50 59 2C 20 45 4E 54 45 52 20 61 6E    e COPY, ENTER an
0184B0:  64 20 52 45 54 55 52 4E 20 6B 65 79 73 2E 0D 0A    d RETURN keys...
0184C0:  0D 0A 20 20 20 41 4E 4F 54 48 45 52 20 4D 45 4E    ..   ANOTHER MEN
0184D0:  55 2C 20 41 4E 4F 54 48 45 52 20 56 41 52 49 41    U, ANOTHER VARIA
0184E0:  42 4C 45 0D 0A 20 20 20 49 6E 20 4C 69 73 74 69    BLE..   In Listi
0184F0:  6E 67 20 31 20 77 65 20 68 61 76 65 20 61 6E 6F    ng 1 we have ano
018500:  74 68 65 72 20 65 78 61 6D 70 6C 65 20 20 70 72    ther example  pr
018510:  6F 67 72 61 6D 2C 20 77 68 69 63 68 20 73 68 6F    ogram, which sho
018520:  77 73 20 61 6E 6F 74 68 65 72 20 77 61 79 20 6F    ws another way o
018530:  66 0D 0A 20 20 20 75 73 69 6E 67 20 74 68 65 20    f..   using the 
018540:  6D 65 6E 75 20 72 6F 75 74 69 6E 65 73 2C 20 61    menu routines, a
018550:  6E 64 20 61 6C 73 6F 20 68 65 6C 70 73 20 20 79    nd also helps  y
018560:  6F 75 20 74 6F 20 63 61 6C 63 75 6C 61 74 65 20    ou to calculate 
018570:  74 68 65 20 76 61 6C 75 65 20 6F 66 20 6B 66 0D    the value of kf.
018580:  0A 20 20 20 74 68 61 74 20 79 6F 75 20 6E 65 65    .   that you nee
018590:  64 2E 20 20 54 68 69 73 20 74 69 6D 65 20 66 69    d.  This time fi
0185A0:  20 69 73 20 31 38 20 20 66 6F 72 20 20 74 68 65     is 18  for  the
0185B0:  20 20 52 45 54 55 52 4E 20 6B 65 79 2C 20 6C 65      RETURN key, le
0185C0:  20 69 73 20 73 65 74 20 74 6F 20 34 37 0D 0A 20     is set to 47.. 
0185D0:  20 20 66 6F 72 20 74 68 65 20 73 70 61 63 65 20      for the space 
0185E0:  62 61 72 2C 20 61 6E 64 20 77 65 20 64 6F 20 6E    bar, and we do n
0185F0:  6F 74 20 6E 65 65 64 20 22 72 69 22 2C 20 73 6F    ot need "ri", so
018600:  23 50 72 6F 67 72 61 6D 6D 65 72 73 27 20 50 61    #Programmers' Pa
018610:  74 63 68 20 37 20 2D 20 57 41 43 43 49 20 31 31    tch 7 - WACCI 11
018620:  36 2C 20 4F 63 74 20 31 39 39 37 2C 20 70 2E 20    6, Oct 1997, p. 
018630:  32 33 2D 32 34 0D 0A 20 20 20 50 52 4F 47 52 41    23-24..   PROGRA
018640:  4D 4D 45 52 53 27 20 50 41 54 43 48 20 37 0D 0A    MMERS' PATCH 7..
018650:  20 20 20 42 79 20 53 74 65 70 68 65 6E 20 61 6E       By Stephen an
018660:  64 20 4D 61 74 74 68 65 77 20 50 68 69 6C 6C 69    d Matthew Philli
018670:  70 73 0D 0A 0D 0A 20 20 20 4C 61 73 74 20 6D 6F    ps....   Last mo
018680:  6E 74 68 20 77 65 20 73 74 61 72 74 65 64 20 6C    nth we started l
018690:  6F 6F 6B 69 6E 67 20 61 74 20 20 61 20 20 73 68    ooking at  a  sh
0186A0:  6F 72 74 20 20 72 6F 75 74 69 6E 65 20 66 6F 72    ort  routine for
0186B0:  20 68 61 6E 64 6C 69 6E 67 20 6D 65 6E 75 73 20     handling menus 
0186C0:  69 6E 0D 0A 20 20 20 42 41 53 49 43 2C 20 61 6E    in..   BASIC, an
0186D0:  64 20 70 72 6F 64 75 63 65 64 20 61 20 73 69 6D    d produced a sim
0186E0:  70 6C 65 20 73 65 6C 65 63 74 69 6F 6E 20 20 6D    ple selection  m
0186F0:  65 6E 75 20 20 77 69 74 68 20 61 20 73 63 72 6F    enu  with a scro
018700:  6C 6C 69 6E 67 20 62 61 72 2E 20 20 54 68 69 73    lling bar.  This
018710:  0D 0A 20 20 20 6D 6F 6E 74 68 20 77 65 20 61 72    ..   month we ar
018720:  65 20 67 6F 69 6E 67 20 74 6F 20 68 61 76 65 20    e going to have 
018730:  61 20 67 6F 20 61 74 20 73 6F 6D 65 20 6D 6F 72    a go at some mor
018740:  65 20 63 6F 6D 70 6C 69 63 61 74 65 64 20 65 78    e complicated ex
018750:  61 6D 70 6C 65 73 2E 0D 0A 0D 0A 20 20 20 54 68    amples.....   Th
018760:  65 20 72 6F 75 74 69 6E 65 73 20 61 72 65 20 72    e routines are r
018770:  65 70 72 69 6E 74 65 64 20 74 68 69 73 20 20 6D    eprinted this  m
018780:  6F 6E 74 68 20 20 69 6E 20 20 6C 69 6E 65 73 20    onth  in  lines 
018790:  31 30 30 30 2D 31 30 31 37 20 6F 66 20 4C 69 73    1000-1017 of Lis
0187A0:  74 69 6E 67 20 31 2C 0D 0A 20 20 20 62 75 74 20    ting 1,..   but 
0187B0:  79 6F 75 20 6D 61 79 20 77 61 6E 74 20 74 6F 20    you may want to 
0187C0:  68 61 76 65 20 6C 61 73 74 20 6D 6F 6E 74 68 27    have last month'
0187D0:  73 20 20 61 72 74 69 63 6C 65 20 68 61 6E 64 79    s  article handy
0187E0:  20 74 6F 20 72 65 66 65 72 20 74 6F 20 74 68 65     to refer to the
0187F0:  20 6C 69 73 74 0D 0A 20 20 20 6F 66 20 76 61 72     list..   of var
018800:  20 69 74 20 68 61 73 20 62 65 65 6E 20 6C 65 66     it has been lef
018810:  74 20 61 73 20 69 74 20 69 73 2E 0D 0A 20 20 20    t as it is...   
018820:  3C 3C 54 68 65 20 70 72 6F 67 72 61 6D 20 69 73    <<The program is
018830:  20 73 61 76 65 64 20 6F 6E 20 64 69 73 63 20 61     saved on disc a
018840:  73 20 4D 45 4E 55 45 58 32 2E 42 41 53 3E 3E 0D    s MENUEX2.BAS>>.
018850:  0A 0D 0A 20 20 20 54 68 65 20 70 72 6F 67 72 61    ...   The progra
018860:  6D 20 62 72 69 6E 67 73 20 69 6E 20 61 20 76 61    m brings in a va
018870:  72 69 61 62 6C 65 20 77 65 20 20 68 61 76 65 20    riable we  have 
018880:  20 6E 6F 74 20 79 65 74 20 6D 65 74 2E 20 20 54     not yet met.  T
018890:  68 65 20 6B 65 79 73 20 70 72 65 73 73 65 64 0D    he keys pressed.
0188A0:  0A 20 20 20 61 72 65 20 69 6E 64 69 63 61 74 65    .   are indicate
0188B0:  64 20 62 79 20 6B 70 2C 20 61 6E 64 20 69 74 20    d by kp, and it 
0188C0:  77 6F 72 6B 73 20 69 6E 20 20 74 68 65 20 20 73    works in  the  s
0188D0:  61 6D 65 20 77 61 79 20 61 73 20 6B 66 20 61 62    ame way as kf ab
0188E0:  6F 76 65 2E 20 20 57 68 65 6E 20 77 65 0D 0A 20    ove.  When we.. 
0188F0:  20 20 72 65 74 75 72 6E 20 66 72 6F 6D 20 6C 69      return from li
018900:  6E 65 20 31 30 30 30 2C 20 69 66 20 6A 75 73 74    ne 1000, if just
018910:  20 74 68 65 20 20 22 66 69 22 20 20 6B 65 79 20     the  "fi"  key 
018920:  69 73 20 70 72 65 73 73 65 64 2C 20 74 68 65 6E    is pressed, then
018930:  20 6B 70 20 77 69 6C 6C 20 62 65 0D 0A 20 20 20     kp will be..   
018940:  34 2E 20 20 49 66 20 6F 6E 6C 79 20 74 68 65 20    4.  If only the 
018950:  22 6C 65 22 20 6B 65 79 20 77 61 73 20 70 72 65    "le" key was pre
018960:  73 73 65 64 20 20 74 68 65 6E 20 6B 70 20 77 6F    ssed  then kp wo
018970:  75 6C 64 20 62 65 20 31 2E 20 20 4F 66 20 63 6F    uld be 1.  Of co
018980:  75 72 73 65 2C 20 74 68 65 0D 0A 20 20 20 75 73    urse, the..   us
018990:  65 72 20 6D 69 67 68 74 20 68 61 76 65 20 70 72    er might have pr
0189A0:  65 73 73 65 64 20 62 6F 74 68 20 61 74 20 6F 6E    essed both at on
0189B0:  63 65 2C 20 69 6E 20 77 68 69 63 68 20 63 61 73    ce, in which cas
0189C0:  65 20 6B 70 20 77 6F 75 6C 64 20 62 65 20 35 2E    e kp would be 5.
0189D0:  0D 0A 0D 0A 20 20 20 49 6E 20 4C 69 73 74 69 6E    ....   In Listin
0189E0:  67 20 31 20 77 65 20 20 68 61 76 65 20 20 69 67    g 1 we  have  ig
0189F0:  6E 6F 72 65 64 20 20 74 68 65 20 20 63 61 73 65    nored  the  case
018A00:  69 61 62 6C 65 73 20 75 73 65 64 20 69 6E 20 74    iables used in t
018A10:  68 65 20 70 72 6F 67 72 61 6D 2E 0D 0A 0D 0A 20    he program..... 
018A20:  20 20 49 6E 20 74 68 65 20 73 69 6D 70 6C 65 20      In the simple 
018A30:  73 65 6C 65 63 74 69 6F 6E 20 6D 65 6E 75 2C 20    selection menu, 
018A40:  77 65 20 20 6A 75 73 74 20 20 6E 65 65 64 65 64    we  just  needed
018A50:  20 20 74 6F 20 20 73 65 74 20 75 70 20 77 68 65      to  set up whe
018A60:  72 65 20 74 68 65 20 6D 65 6E 75 0D 0A 20 20 20    re the menu..   
018A70:  77 61 73 2C 20 61 6E 64 20 68 6F 77 20 62 69 67    was, and how big
018A80:  20 69 74 20 77 61 73 2C 20 61 6E 64 20 74 68 61     it was, and tha
018A90:  74 20 77 61 73 20 61 62 6F 75 74 20 69 74 2E 20    t was about it. 
018AA0:  20 54 68 65 20 72 6F 75 74 69 6E 65 73 20 61 72     The routines ar
018AB0:  65 20 63 61 70 61 62 6C 65 0D 0A 20 20 20 6F 66    e capable..   of
018AC0:  20 61 20 6C 6F 74 20 6F 66 20 64 69 66 66 65 72     a lot of differ
018AD0:  65 6E 74 20 20 61 70 70 6C 69 63 61 74 69 6F 6E    ent  application
018AE0:  73 2C 20 20 63 6F 6E 74 72 6F 6C 6C 65 64 20 20    s,  controlled  
018AF0:  6D 61 69 6E 6C 79 20 20 62 79 20 74 68 65 20 6D    mainly  by the m
018B00:  66 20 28 6D 65 6E 75 0D 0A 20 20 20 66 6C 61 67    f (menu..   flag
018B10:  73 29 20 61 6E 64 20 6B 66 20 28 6B 65 79 20 66    s) and kf (key f
018B20:  6C 61 67 73 29 20 76 61 72 69 61 62 6C 65 73 2C    lags) variables,
018B30:  20 20 61 6C 6F 6E 67 20 77 69 74 68 20 6B 70 20      along with kp 
018B40:  28 6B 65 79 73 20 70 72 65 73 73 65 64 29 2C 20    (keys pressed), 
018B50:  77 68 69 63 68 0D 0A 20 20 20 72 65 74 75 72 6E    which..   return
018B60:  73 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 20 74 6F    s information to
018B70:  20 75 73 20 61 66 74 65 72 20 74 68 65 20 75 73     us after the us
018B80:  65 72 20 68 61 73 20 73 65 6C 65 63 74 65 64 20    er has selected 
018B90:  61 20 6D 65 6E 75 20 69 74 65 6D 2E 0D 0A 0D 0A    a menu item.....
018BA0:  20 20 20 46 4C 41 47 47 49 4E 47 20 44 4F 57 4E       FLAGGING DOWN
018BB0:  0D 0A 20 20 20 54 68 65 20 6B 66 20 76 61 72 69    ..   The kf vari
018BC0:  61 62 6C 65 20 69 73 20 66 6F 72 20 63 6F 6E 74    able is for cont
018BD0:  72 6F 6C 6C 69 6E 67 20 68 6F 77 20 20 74 68 65    rolling how  the
018BE0:  20 72 6F 75 74 69 6E 65 73 20 72 65 73 70 6F 6E     routines respon
018BF0:  64 20 74 6F 20 74 68 65 20 6B 65 79 73 2E 0D 0A    d to the keys...
018C00:  73 20 20 77 68 65 72 65 20 20 73 65 76 65 72 61    s  where  severa
018C10:  6C 20 20 6B 65 79 73 20 6D 69 67 68 74 20 62 65    l  keys might be
018C20:  0D 0A 20 20 20 70 72 65 73 73 65 64 20 61 74 20    ..   pressed at 
018C30:  6F 6E 63 65 2E 20 20 54 68 65 20 57 48 49 4C 45    once.  The WHILE
018C40:  2D 57 45 4E 44 20 6C 6F 6F 70 20 6F 66 20 20 6C    -WEND loop of  l
018C50:  69 6E 65 73 20 31 31 30 20 74 6F 20 31 34 30 20    ines 110 to 140 
018C60:  67 6F 65 73 20 72 6F 75 6E 64 20 61 6E 64 0D 0A    goes round and..
018C70:  20 20 20 72 6F 75 6E 64 20 75 6E 74 69 6C 20 6B       round until k
018C80:  70 3D 34 2C 20 77 68 69 63 68 20 68 61 70 70 65    p=4, which happe
018C90:  6E 73 20 20 77 68 65 6E 20 20 74 68 65 20 20 52    ns  when  the  R
018CA0:  45 54 55 52 4E 20 20 6B 65 79 20 69 73 20 70 72    ETURN  key is pr
018CB0:  65 73 73 65 64 20 6F 6E 20 69 74 73 0D 0A 20 20    essed on its..  
018CC0:  20 6F 77 6E 2E 20 20 49 6E 20 6C 69 6E 65 20 31     own.  In line 1
018CD0:  33 30 2C 20 74 68 65 20 63 6F 6D 6D 61 6E 64 73    30, the commands
018CE0:  20 74 6F 20 20 74 6F 67 67 6C 65 20 20 74 68 65     to  toggle  the
018CF0:  20 76 61 6C 75 65 73 20 62 65 74 77 65 65 6E 20     values between 
018D00:  4F 6E 20 61 6E 64 20 4F 66 66 0D 0A 20 20 20 6F    On and Off..   o
018D10:  6E 6C 79 20 68 61 70 70 65 6E 20 77 68 65 6E 20    nly happen when 
018D20:  6B 70 3D 31 2C 20 77 68 65 6E 20 6F 6E 6C 79 20    kp=1, when only 
018D30:  73 70 61 63 65 20 69 73 20 70 72 65 73 73 65 64    space is pressed
018D40:  2E 0D 0A 0D 0A 20 20 20 41 6C 74 68 6F 75 67 68    .....   Although
018D50:  20 77 65 20 63 6F 75 6C 64 20 74 65 6C 6C 20 77     we could tell w
018D60:  68 65 6E 20 62 6F 74 68 20 20 6F 66 20 20 74 68    hen both  of  th
018D70:  6F 73 65 20 20 6B 65 79 73 20 61 72 65 20 70 72    ose  keys are pr
018D80:  65 73 73 65 64 20 61 74 20 74 68 65 20 73 61 6D    essed at the sam
018D90:  65 0D 0A 20 20 20 74 69 6D 65 2C 20 74 68 65 20    e..   time, the 
018DA0:  75 73 65 72 20 69 73 20 6E 6F 74 20 72 65 61 6C    user is not real
018DB0:  6C 79 20 67 69 76 69 6E 67 20 20 61 20 63 6C 65    ly giving  a cle
018DC0:  61 72 20 69 6E 64 69 63 61 74 69 6F 6E 20 6F 66    ar indication of
018DD0:  20 77 68 61 74 20 73 68 6F 75 6C 64 20 62 65 0D     what should be.
018DE0:  0A 20 20 20 64 6F 6E 65 2C 20 73 6F 20 69 74 20    .   done, so it 
018DF0:  69 73 20 6D 6F 72 65 20 73 65 6E 73 69 62 6C 65    is more sensible
018E00:  20 20 20 54 68 65 20 6E 75 6D 62 65 72 73 20 6F       The numbers o
018E10:  66 20 74 68 65 20 6B 65 79 73 20 20 64 65 74 65    f the keys  dete
018E20:  63 74 65 64 20 20 62 79 20 20 74 68 65 20 20 72    cted  by  the  r
018E30:  6F 75 74 69 6E 65 73 20 20 61 72 65 20 68 65 6C    outines  are hel
018E40:  64 20 69 6E 20 73 65 76 65 72 61 6C 0D 0A 20 20    d in several..  
018E50:  20 76 61 72 69 61 62 6C 65 73 3A 20 22 75 70 22     variables: "up"
018E60:  20 61 6E 64 20 22 64 6F 77 22 20 74 65 6C 6C 20     and "dow" tell 
018E70:  74 68 65 20 72 6F 75 74 69 6E 65 73 20 20 77 68    the routines  wh
018E80:  69 63 68 20 6B 65 79 73 20 74 6F 20 75 73 65 20    ich keys to use 
018E90:  66 6F 72 20 6D 6F 76 69 6E 67 0D 0A 20 20 20 74    for moving..   t
018EA0:  68 65 20 6D 65 6E 75 20 62 61 72 20 75 70 20 61    he menu bar up a
018EB0:  6E 64 20 64 6F 77 6E 2C 20 77 68 69 6C 65 20 22    nd down, while "
018EC0:  6C 65 22 2C 20 22 72 69 22 2C 20 61 6E 64 20 22    le", "ri", and "
018ED0:  66 69 22 20 61 72 65 20 6A 75 73 74 20 74 68 72    fi" are just thr
018EE0:  65 65 20 6F 74 68 65 72 0D 0A 20 20 20 6B 65 79    ee other..   key
018EF0:  73 20 74 68 61 74 20 63 61 6E 20 62 65 20 64 65    s that can be de
018F00:  74 65 63 74 65 64 20 62 79 20 20 74 68 65 20 20    tected by  the  
018F10:  72 6F 75 74 69 6E 65 2E 20 20 20 54 68 65 79 20    routine.   They 
018F20:  20 64 6F 20 6E 6F 74 20 68 61 76 65 20 74 6F 20     do not have to 
018F30:  61 63 74 20 61 73 0D 0A 20 20 20 6C 65 66 74 2C    act as..   left,
018F40:  20 72 69 67 68 74 2C 20 61 6E 64 20 66 69 72 65     right, and fire
018F50:  20 69 6E 20 61 6E 79 20 70 61 72 74 69 63 75 6C     in any particul
018F60:  61 72 20 77 61 79 3B 20 74 68 65 79 20 61 72 65    ar way; they are
018F70:  20 6A 75 73 74 20 63 61 6C 6C 65 64 20 74 68 61     just called tha
018F80:  74 20 74 6F 0D 0A 20 20 20 6D 61 6B 65 20 74 68    t to..   make th
018F90:  65 6D 20 65 61 73 69 65 72 20 74 6F 20 72 65 6D    em easier to rem
018FA0:  65 6D 62 65 72 2E 0D 0A 0D 0A 20 20 20 56 61 72    ember.....   Var
018FB0:  69 61 62 6C 65 20 6B 66 20 69 73 20 20 61 20 20    iable kf is  a  
018FC0:  62 69 74 2D 73 69 67 6E 69 66 69 63 61 6E 74 20    bit-significant 
018FD0:  20 6E 75 6D 62 65 72 20 20 73 68 6F 77 69 6E 67     number  showing
018FE0:  20 20 77 68 65 74 68 65 72 20 20 74 68 65 20 72      whether  the r
018FF0:  6F 75 74 69 6E 65 0D 0A 20 20 20 73 68 6F 75 6C    outine..   shoul
019000:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
019010:  15 00 01 00 02 09 4E E5 15 00 C4 02 00 00 00 02    ......N.........
019020:  15 00 C9 02 00 00 00 02 15 00 C5 02 00 00 00 02    ................
019030:  15 00 C1 02 00 00 00 02 15 00 C6 02 00 00 00 02    ................
019040:  15 00 C2 02 00 00 00 02 15 00 C7 02 00 00 00 02    ................
019050:  15 00 C3 02 00 00 00 02 15 00 C8 02 00 00 00 02    ................
019060:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
019070:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
019080:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
019090:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0190A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0190B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0190C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0190D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0190E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0190F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
019100:  69 73 20 69 73 20 77 68 65 72 65 20 74 68 65 20    is is where the 
019110:  6D 79 73 74 65 72 69 6F 75 73 20 76 61 72 69 61    mysterious varia
019120:  62 6C 65 20 6D 66 20 63 6F 6D 65 73 20 69 6E 2E    ble mf comes in.
019130:  20 20 49 74 0D 0A 20 20 20 69 73 20 61 6E 6F 74      It..   is anot
019140:  68 65 72 20 6F 66 20 74 68 65 73 65 20 62 69 74    her of these bit
019150:  2D 73 69 67 6E 69 66 69 63 61 6E 74 20 76 61 72    -significant var
019160:  69 61 62 6C 65 73 2E 20 20 20 49 6E 20 20 6C 69    iables.   In  li
019170:  6E 65 20 31 30 20 6D 66 20 69 73 20 73 65 74 20    ne 10 mf is set 
019180:  74 6F 0D 0A 20 20 20 38 2B 33 32 2C 20 6F 72 20    to..   8+32, or 
019190:  31 30 31 30 30 30 20 69 6E 20 62 69 6E 61 72 79    101000 in binary
0191A0:  2E 20 20 45 61 63 68 20 20 62 69 6E 61 72 79 20    .  Each  binary 
0191B0:  20 64 69 67 69 74 2C 20 6F 72 20 62 69 74 2C 20     digit, or bit, 
0191C0:  63 6F 72 72 65 73 70 6F 6E 64 73 20 74 6F 20 61    corresponds to a
0191D0:  0D 0A 20 20 20 6D 65 6E 75 20 69 74 65 6D 2C 20    ..   menu item, 
0191E0:  61 6E 64 20 61 20 31 20 74 65 6C 6C 73 20 74 68    and a 1 tells th
0191F0:  65 20 20 6D 65 6E 75 20 20 72 6F 75 74 69 6E 65    e  menu  routine
019200:  20 74 68 61 74 20 74 68 65 20 69 74 65 6D 20 69     that the item i
019210:  73 20 75 6E 73 65 6C 65 63 74 61 62 6C 65 0D 0A    s unselectable..
019220:  20 20 20 61 6E 64 20 73 68 6F 75 6C 64 20 62 65       and should be
019230:  20 72 6F 6C 6C 65 64 20 6F 76 65 72 2E 20 20 54     rolled over.  T
019240:  68 65 20 6C 65 61 73 74 20 20 73 69 67 6E 69 66    he least  signif
019250:  69 63 61 6E 74 20 62 69 74 20 28 61 74 20 74 68    icant bit (at th
019260:  65 20 72 69 67 68 74 20 68 61 6E 64 0D 0A 20 20    e right hand..  
019270:  20 65 6E 64 29 20 72 65 66 65 72 73 20 74 6F 20     end) refers to 
019280:  74 68 65 20 66 69 72 73 74 20 20 69 74 65 6D 20    the first  item 
019290:  20 6F 6E 20 20 74 68 65 20 20 6D 65 6E 75 2E 20     on  the  menu. 
0192A0:  20 20 49 66 20 20 79 6F 75 20 77 61 6E 74 20 74      If  you want t
0192B0:  6F 20 75 73 65 20 74 68 69 73 0D 0A 20 20 20 66    o use this..   f
0192C0:  65 61 74 75 72 65 20 79 6F 75 72 20 6D 65 6E 75    eature your menu
0192D0:  20 69 73 20 6C 69 6D 69 74 65 64 20 74 6F 20 31     is limited to 1
0192E0:  36 20 69 74 65 6D 73 2E 0D 0A 0D 0A 20 20 20 59    6 items.....   Y
0192F0:  6F 75 20 63 61 6E 20 63 61 6C 63 75 6C 61 74 65    ou can calculate
019300:  6C 74 69 70 6C 79 20 62 79 20 31 30 0D 0A 20 20    ltiply by 10..  
019310:  20 69 66 20 53 48 49 46 54 20 69 73 20 70 72 65     if SHIFT is pre
019320:  73 73 65 64 2C 20 6F 72 20 62 79 20 31 20 69 66    ssed, or by 1 if
019330:  20 20 69 74 20 69 73 6E 27 74 2E 20 20 59 6F 75      it isn't.  You
019340:  20 63 6F 75 6C 64 20 67 65 74 20 74 68 65 20 73     could get the s
019350:  61 6D 65 20 65 66 66 65 63 74 0D 0A 20 20 20 77    ame effect..   w
019360:  69 74 68 20 61 20 6C 6F 74 20 6F 66 20 49 46 20    ith a lot of IF 
019370:  73 74 61 74 65 6D 65 6E 74 73 20 69 6E 20 61 20    statements in a 
019380:  6D 75 63 68 20 73 69 6D 70 6C 65 72 2C 20 62 75    much simpler, bu
019390:  74 20 6C 6F 6E 67 65 72 2C 20 77 61 79 2E 0D 0A    t longer, way...
0193A0:  0D 0A 20 20 20 57 48 41 54 20 41 42 4F 55 54 20    ..   WHAT ABOUT 
0193B0:  54 48 45 20 53 55 42 52 4F 55 54 49 4E 45 53 3F    THE SUBROUTINES?
0193C0:  0D 0A 20 20 20 59 65 73 2C 20 77 65 27 6C 6C 20    ..   Yes, we'll 
0193D0:  67 65 74 20 6F 6E 74 6F 20 74 68 65 6D 20 6E 65    get onto them ne
0193E0:  78 74 20 20 6D 6F 6E 74 68 2E 20 20 20 42 65 20    xt  month.   Be 
0193F0:  70 61 74 69 65 6E 74 21 20 20 49 6E 20 74 68 65    patient!  In the
019400:  20 6D 65 61 6E 74 69 6D 65 2C 20 77 68 79 0D 0A     meantime, why..
019410:  20 20 20 6E 6F 74 20 61 6C 74 65 72 20 4C 69 73       not alter Lis
019420:  74 69 6E 67 20 32 20 20 73 6F 20 20 74 68 61 74    ting 2  so  that
019430:  20 20 79 6F 75 20 20 63 61 6E 6E 6F 74 20 20 6F      you  cannot  o
019440:  72 64 65 72 20 20 6E 65 67 61 74 69 76 65 20 71    rder  negative q
019450:  75 61 6E 74 69 74 69 65 73 20 6F 66 0D 0A 20 20    uantities of..  
019460:  20 6D 61 67 61 7A 69 6E 65 73 2E 2E 2E 0D 0A 0D     magazines......
019470:  0A 0D 0A 0D 0A 20 20 20 4C 69 73 74 69 6E 67 20    .....   Listing 
019480:  31 3A 0D 0A 0D 0A 20 20 20 31 30 20 4D 4F 44 45    1:....   10 MODE
019490:  20 31 3A 6D 63 68 3D 33 3A 6D 66 3D 30 3A 6D 64     1:mch=3:mf=0:md
0194A0:  65 3D 30 0D 0A 20 20 20 32 30 20 6D 63 6F 6C 3D    e=0..   20 mcol=
0194B0:  32 3A 6D 73 70 3D 31 36 3A 6D 78 3D 30 3A 6D 79    2:msp=16:mx=0:my
0194C0:  3D 33 39 39 2D 35 2A 31 36 3A 6D 62 68 3D 31 36    =399-5*16:mbh=16
0194D0:  3A 6D 62 6C 3D 31 36 2A 32 2D 32 0D 0A 20 20 20    :mbl=16*2-2..   
0194E0:  33 30 20 75 70 3D 30 3A 64 6F 77 3D 32 3A 6C 65    30 up=0:dow=2:le
0194F0:  3D 34 37 3A 72 69 3D 31 3A 66 69 3D 31 38 3A 6B    =47:ri=1:fi=18:k
019500:  20 6D 66 20 69 6E 20 76 61 72 69 6F 75 73 20 20     mf in various  
019510:  77 61 79 73 2C 20 20 61 6E 64 20 20 69 74 20 72    ways,  and  it r
019520:  65 61 6C 6C 79 20 64 65 70 65 6E 64 73 20 6F 6E    eally depends on
019530:  20 77 68 65 74 68 65 72 0D 0A 20 20 20 79 6F 75     whether..   you
019540:  20 77 69 6C 6C 20 6E 65 65 64 20 74 6F 20 61 6C     will need to al
019550:  74 65 72 20 69 74 20 6D 75 63 68 2E 20 20 20 49    ter it much.   I
019560:  66 20 20 6D 66 20 20 69 73 20 20 67 6F 69 6E 67    f  mf  is  going
019570:  20 74 6F 20 73 74 61 79 20 74 68 65 20 73 61 6D     to stay the sam
019580:  65 2C 20 74 68 65 0D 0A 20 20 20 65 61 73 69 65    e, the..   easie
019590:  73 74 20 77 61 79 20 69 73 20 74 6F 20 73 65 74    st way is to set
0195A0:  20 69 74 20 69 6E 20 62 69 6E 61 72 79 3A 0D 0A     it in binary:..
0195B0:  0D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 6D    ..             m
0195C0:  66 3D 26 78 31 30 31 30 30 30 0D 0A 0D 0A 20 20    f=&x101000....  
0195D0:  20 4F 74 68 65 72 77 69 73 65 20 79 6F 75 20 77     Otherwise you w
0195E0:  69 6C 6C 20 70 72 6F 62 61 62 6C 79 20 20 68 61    ill probably  ha
0195F0:  76 65 20 20 74 6F 20 20 6D 65 73 73 20 20 61 72    ve  to  mess  ar
019600:  6F 75 6E 64 20 20 77 69 74 68 20 20 70 6F 77 65    ound  with  powe
019610:  72 73 20 6F 66 20 32 20 74 6F 0D 0A 20 20 20 61    rs of 2 to..   a
019620:  63 68 69 65 76 65 20 74 68 65 20 72 69 67 68 74    chieve the right
019630:  20 76 61 6C 75 65 2E 0D 0A 0D 0A 20 20 20 4C 4F     value.....   LO
019640:  4F 4B 49 4E 47 20 53 48 49 46 54 59 0D 0A 20 20    OKING SHIFTY..  
019650:  20 54 68 65 20 70 72 6F 67 72 61 6D 20 61 73 20     The program as 
019660:  69 74 20 73 74 61 6E 64 73 20 6F 6E 6C 79 20 61    it stands only a
019670:  6C 6C 6F 77 73 20 20 79 6F 75 20 20 74 6F 20 61    llows  you  to a
019680:  6C 74 65 72 20 74 68 65 20 71 75 61 6E 74 69 74    lter the quantit
019690:  69 65 73 20 62 79 20 6F 6E 65 0D 0A 20 20 20 61    ies by one..   a
0196A0:  74 20 61 20 74 69 6D 65 2E 20 20 49 74 20 77 6F    t a time.  It wo
0196B0:  75 6C 64 20 62 65 20 6E 69 63 65 20 74 6F 20 20    uld be nice to  
0196C0:  62 65 20 20 61 62 6C 65 20 20 74 6F 20 68 6F 6C    be  able  to hol
0196D0:  64 20 74 68 65 20 53 48 49 46 54 20 6B 65 79 20    d the SHIFT key 
0196E0:  64 6F 77 6E 20 61 6E 64 0D 0A 20 20 20 70 72 65    down and..   pre
0196F0:  73 73 20 6C 65 66 74 20 6F 72 20 72 69 67 68 74    ss left or right
019700:  20 6A 75 73 74 20 74 6F 20 20 69 67 6E 6F 72 65     just to  ignore
019710:  20 69 74 2E 20 20 49 74 20 61 6C 73 6F 20 6D 61     it.  It also ma
019720:  6B 65 73 20 74 68 65 20 42 41 53 49 43 0D 0A 20    kes the BASIC.. 
019730:  20 20 70 72 6F 67 72 61 6D 20 6D 75 63 68 20 73      program much s
019740:  69 6D 70 6C 65 72 20 66 6F 72 20 61 20 63 68 61    impler for a cha
019750:  6E 67 65 21 0D 0A 0D 0A 20 20 20 4A 75 73 74 20    nge!....   Just 
019760:  66 6F 72 20 74 68 65 20 72 65 63 6F 72 64 2C 20    for the record, 
019770:  77 65 20 6F 75 67 68 74 20 74 6F 20 70 6F 69 6E    we ought to poin
019780:  74 20 20 6F 75 74 20 20 74 68 61 74 20 65 76 65    t  out  that eve
019790:  6E 20 69 66 20 79 6F 75 20 73 65 74 20 6B 66 20    n if you set kf 
0197A0:  74 6F 20 35 0D 0A 20 20 20 74 6F 20 73 68 6F 77    to 5..   to show
0197B0:  20 74 68 61 74 20 79 6F 75 20 61 72 65 20 6E 6F     that you are no
0197C0:  74 20 69 6E 74 65 72 65 73 74 65 64 20 69 6E 20    t interested in 
0197D0:  74 68 65 20 22 72 69 22 20 20 6B 65 79 2C 20 69    the "ri"  key, i
0197E0:  66 20 74 68 65 20 75 73 65 72 20 70 72 65 73 73    f the user press
0197F0:  65 73 0D 0A 20 20 20 74 68 65 20 22 6C 65 22 20    es..   the "le" 
019800:  61 6E 64 20 22 72 69 22 20 6B 65 79 73 20 74 6F    and "ri" keys to
019810:  67 65 74 68 65 72 20 20 74 68 65 6E 20 20 6B 70    gether  then  kp
019820:  20 20 77 69 6C 6C 20 20 62 65 20 72 65 74 75 72      will  be retur
019830:  6E 65 64 20 61 73 20 33 2C 20 6E 6F 74 20 31 2E    ned as 3, not 1.
019840:  0D 0A 20 20 20 54 68 65 72 65 20 61 72 65 20 63    ..   There are c
019850:  61 73 65 73 20 77 68 65 72 65 20 74 68 69 73 20    ases where this 
019860:  6D 69 67 68 74 20 62 65 20 20 61 20 20 6E 75 69    might be  a  nui
019870:  73 61 6E 63 65 2C 20 73 6F 20 69 66 20 79 6F 75    sance, so if you
019880:  20 77 61 6E 74 20 74 6F 20 61 76 6F 69 64 0D 0A     want to avoid..
019890:  20 20 20 69 74 2C 20 79 6F 75 20 63 61 6E 20 6A       it, you can j
0198A0:  75 73 74 20 73 61 79 0D 0A 0D 0A 20 20 20 20 20    ust say....     
0198B0:  20 20 20 20 20 20 20 20 6B 70 3D 6B 70 20 41 4E            kp=kp AN
0198C0:  44 20 6B 66 0D 0A 0D 0A 20 20 20 73 74 72 61 69    D kf....   strai
0198D0:  67 68 74 20 61 66 74 65 72 20 74 68 65 20 72 65    ght after the re
0198E0:  74 75 72 6E 20 66 72 6F 6D 20 6C 69 6E 65 20 31    turn from line 1
0198F0:  30 30 30 2C 20 20 61 6E 64 20 74 68 65 6E 20 6B    000,  and then k
019900:  20 74 6F 20 61 6C 74 65 72 20 74 68 65 20 76 61     to alter the va
019910:  6C 75 65 20 20 62 79 20 20 74 65 6E 2E 20 20 54    lue  by  ten.  T
019920:  6F 20 64 6F 20 74 68 69 73 20 77 65 20 77 69 6C    o do this we wil
019930:  6C 20 68 61 76 65 0D 0A 20 20 20 74 6F 20 6D 6F    l have..   to mo
019940:  64 69 66 79 20 74 68 65 20 6D 65 6E 75 20 73 75    dify the menu su
019950:  62 72 6F 75 74 69 6E 65 2C 20 61 73 20 77 65 20    broutine, as we 
019960:  64 6F 6E 27 74 20 68 61 76 65 20 61 20 73 70 61    don't have a spa
019970:  72 65 20 6B 65 79 2E 0D 0A 0D 0A 20 20 20 4A 75    re key.....   Ju
019980:  73 74 20 61 64 64 20 6F 6E 74 6F 20 74 68 65 20    st add onto the 
019990:  65 6E 64 20 6F 66 20 6C 69 6E 65 20 31 30 30 36    end of line 1006
0199A0:  3A 0D 0A 0D 0A 20 20 20 20 20 20 20 20 20 20 20    :....           
0199B0:  20 20 2D 38 2A 28 49 4E 4B 45 59 28 73 68 29 3E      -8*(INKEY(sh)>
0199C0:  2D 31 29 0D 0A 0D 0A 20 20 20 61 6E 64 20 61 64    -1)....   and ad
0199D0:  64 20 22 73 68 3D 32 31 22 20 74 6F 20 6C 69 6E    d "sh=21" to lin
0199E0:  65 20 33 30 2E 20 20 54 68 69 73 20 74 65 73 74    e 30.  This test
0199F0:  73 20 61 6E 6F 74 68 65 72 20 6B 65 79 2C 20 22    s another key, "
019A00:  73 68 22 2C 20 77 68 69 63 68 20 68 61 73 20 62    sh", which has b
019A10:  65 65 6E 0D 0A 20 20 20 73 65 74 20 75 70 20 74    een..   set up t
019A20:  6F 20 62 65 20 74 68 65 20 20 53 48 49 46 54 20    o be the  SHIFT 
019A30:  20 6B 65 79 2E 20 20 20 45 69 67 68 74 20 20 77     key.   Eight  w
019A40:  69 6C 6C 20 20 62 65 20 20 61 64 64 65 64 20 20    ill  be  added  
019A50:  74 6F 20 6B 70 20 69 66 20 53 48 49 46 54 20 69    to kp if SHIFT i
019A60:  73 0D 0A 20 20 20 70 72 65 73 73 65 64 2E 0D 0A    s..   pressed...
019A70:  0D 0A 20 20 20 57 65 20 64 6F 20 6E 6F 74 20 6E    ..   We do not n
019A80:  65 65 64 20 74 6F 20 61 6C 74 65 72 20 6B 66 20    eed to alter kf 
019A90:  62 65 63 61 75 73 65 20 20 77 65 20 64 6F 20 6E    because  we do n
019AA0:  6F 74 20 77 61 6E 74 20 63 6F 6E 74 72 6F 6C 20    ot want control 
019AB0:  74 6F 20 72 65 74 75 72 6E 20 66 72 6F 6D 0D 0A    to return from..
019AC0:  20 20 20 6C 69 6E 65 20 31 30 30 30 20 69 66 20       line 1000 if 
019AD0:  74 68 65 20 53 48 49 46 54 20 6B 65 79 20 69 73    the SHIFT key is
019AE0:  20 70 72 65 73 73 65 64 20 20 6F 6E 20 69 74 73     pressed  on its
019AF0:  20 6F 77 6E 2E 20 20 57 68 65 74 68 65 72 20 74     own.  Whether t
019B00:  70 20 77 69 6C 6C 20 6F 6E 6C 79 20 74 65 6C 6C    p will only tell
019B10:  20 79 6F 75 0D 0A 20 20 20 61 62 6F 75 74 20 74     you..   about t
019B20:  68 65 20 73 74 61 74 65 20 6F 66 20 74 68 65 20    he state of the 
019B30:  6B 65 79 73 20 69 6E 64 69 63 61 74 65 64 20 69    keys indicated i
019B40:  6E 20 6B 66 2E 0D 0A 0D 0A 20 20 20 42 41 43 4B    n kf.....   BACK
019B50:  20 54 4F 20 54 48 45 20 49 53 53 55 45 0D 0A 20     TO THE ISSUE.. 
019B60:  20 20 4F 75 72 20 73 65 63 6F 6E 64 20 65 78 61      Our second exa
019B70:  6D 70 6C 65 20 74 68 69 73 20 6D 6F 6E 74 68 20    mple this month 
019B80:  73 68 6F 77 73 20 77 68 61 74 20 79 6F 75 20 6D    shows what you m
019B90:  69 67 68 74 20 77 61 6E 74 20 74 68 65 20 22 6C    ight want the "l
019BA0:  65 22 20 61 6E 64 20 22 72 69 22 0D 0A 20 20 20    e" and "ri"..   
019BB0:  6B 65 79 73 20 66 6F 72 2E 20 20 59 6F 75 20 77    keys for.  You w
019BC0:  69 6C 6C 20 6E 65 65 64 20 74 6F 20 74 79 70 65    ill need to type
019BD0:  20 69 6E 20 20 6C 69 6E 65 73 20 20 31 30 30 30     in  lines  1000
019BE0:  20 74 6F 20 31 30 31 37 20 61 67 61 69 6E 20 74     to 1017 again t
019BF0:  6F 20 67 6F 20 77 69 74 68 0D 0A 20 20 20 4C 69    o go with..   Li
019C00:  73 74 69 6E 67 20 32 2E 20 20 3C 3C 54 68 65 20    sting 2.  <<The 
019C10:  77 68 6F 6C 65 20 77 6F 72 6B 69 6E 67 20 20 70    whole working  p
019C20:  72 6F 67 72 61 6D 20 20 69 73 20 20 73 61 76 65    rogram  is  save
019C30:  64 20 61 73 20 4D 45 4E 55 45 58 33 2E 42 41 53    d as MENUEX3.BAS
019C40:  20 6F 6E 20 74 68 65 0D 0A 20 20 20 64 69 73 63     on the..   disc
019C50:  3E 3E 0D 0A 0D 0A 20 20 20 54 68 65 20 75 73 65    >>....   The use
019C60:  72 20 69 73 20 70 72 65 73 65 6E 74 65 64 20 77    r is presented w
019C70:  69 74 68 20 61 6E 20 6F 72 64 65 72 20 66 6F 72    ith an order for
019C80:  6D 20 66 6F 72 20 62 61 63 6B 20 69 73 73 75 65    m for back issue
019C90:  73 20 6F 66 20 6F 75 72 20 66 61 76 6F 75 72 69    s of our favouri
019CA0:  74 65 0D 0A 20 20 20 6D 61 67 61 7A 69 6E 65 2E    te..   magazine.
019CB0:  20 20 54 68 65 20 6C 65 66 74 20 61 6E 64 20 72      The left and r
019CC0:  69 67 68 74 20 20 63 75 72 73 6F 72 20 20 6B 65    ight  cursor  ke
019CD0:  79 73 20 20 61 64 6A 75 73 74 20 20 74 68 65 20    ys  adjust  the 
019CE0:  71 75 61 6E 74 69 74 79 20 6F 66 20 65 61 63 68    quantity of each
019CF0:  0D 0A 20 20 20 6D 61 67 61 7A 69 6E 65 20 74 6F    ..   magazine to
019D00:  68 65 20 53 48 49 46 54 20 6B 65 79 0D 0A 20 20    he SHIFT key..  
019D10:  20 77 61 73 20 70 72 65 73 73 65 64 20 69 73 20     was pressed is 
019D20:  73 74 69 6C 6C 20 69 6E 64 69 63 61 74 65 64 20    still indicated 
019D30:  69 6E 20 6B 70 2C 20 65 76 65 6E 20 20 74 68 6F    in kp, even  tho
019D40:  75 67 68 20 77 65 20 73 65 74 20 6B 66 20 74 6F    ugh we set kf to
019D50:  20 73 68 6F 77 20 74 68 61 74 0D 0A 20 20 20 77     show that..   w
019D60:  65 20 77 65 72 65 20 6E 6F 74 20 69 6E 74 65 72    e were not inter
019D70:  65 73 74 65 64 20 69 6E 20 69 74 2E 0D 0A 0D 0A    ested in it.....
019D80:  20 20 20 46 69 6E 61 6C 6C 79 20 77 65 20 6E 65       Finally we ne
019D90:  65 64 20 74 6F 20 61 6C 74 65 72 20 20 6C 69 6E    ed to alter  lin
019DA0:  65 20 20 31 35 30 2C 20 20 77 68 65 72 65 20 20    e  150,  where  
019DB0:  74 68 65 20 71 75 61 6E 74 69 74 79 20 6F 66 20    the quantity of 
019DC0:  6D 61 67 61 7A 69 6E 65 73 20 69 73 0D 0A 20 20    magazines is..  
019DD0:  20 61 64 6A 75 73 74 65 64 3A 0D 0A 0D 0A 20 20     adjusted:....  
019DE0:  20 31 35 30 20 6E 75 6D 28 6D 70 29 3D 6E 75 6D     150 num(mp)=num
019DF0:  28 6D 70 29 2B 28 28 28 6B 70 20 41 4E 44 20 31    (mp)+(((kp AND 1
019E00:  29 3D 31 29 2D 28 28 6B 70 20 41 4E 44 20 32 29    )=1)-((kp AND 2)
019E10:  3D 32 29 29 2A 28 31 2D 39 2A 28 28 6B 70 20 41    =2))*(1-9*((kp A
019E20:  4E 44 20 38 29 3D 38 29 29 3A 0D 0A 20 20 20 20    ND 8)=8)):..    
019E30:  20 20 20 47 4F 53 55 42 20 32 31 30 0D 0A 0D 0A       GOSUB 210....
019E40:  20 20 20 3C 3C 54 68 65 20 61 6C 74 65 72 65 64       <<The altered
019E50:  20 76 65 72 73 69 6F 6E 20 69 73 20 73 61 76 65     version is save
019E60:  64 20 61 73 20 4D 45 4E 55 45 58 34 2E 42 41 53    d as MENUEX4.BAS
019E70:  20 6F 6E 20 74 68 65 20 64 69 73 63 3E 3E 0D 0A     on the disc>>..
019E80:  0D 0A 20 20 20 54 68 69 73 20 74 69 6D 65 20 77    ..   This time w
019E90:  65 20 64 6F 20 6E 65 65 64 20 74 6F 20 20 63 6F    e do need to  co
019EA0:  70 65 20 20 77 69 74 68 20 20 6D 6F 72 65 20 20    pe  with  more  
019EB0:  74 68 61 6E 20 20 6F 6E 65 20 6B 65 79 20 62 65    than  one key be
019EC0:  69 6E 67 20 70 72 65 73 73 65 64 20 61 74 0D 0A    ing pressed at..
019ED0:  20 20 20 6F 6E 63 65 2C 20 73 6F 20 74 68 65 20       once, so the 
019EE0:  6C 69 6E 65 20 69 73 20 61 20 20 6C 6F 74 20 20    line is a  lot  
019EF0:  6D 6F 72 65 20 20 63 6F 6D 70 6C 69 63 61 74 65    more  complicate
019F00:  20 62 65 20 6F 72 64 65 72 65 64 2E 20 20 43 65     be ordered.  Ce
019F10:  72 74 61 69 6E 20 69 73 73 75 65 73 20 61 72 65    rtain issues are
019F20:  20 6F 75 74 20 6F 66 20 73 74 6F 63 6B 2C 20 61     out of stock, a
019F30:  6E 64 20 73 6F 20 74 68 65 20 6D 65 6E 75 0D 0A    nd so the menu..
019F40:  20 20 20 62 61 72 20 77 69 6C 6C 20 72 6F 6C 6C       bar will roll
019F50:  20 73 74 72 61 69 67 68 74 20 6F 76 65 72 20 74     straight over t
019F60:  68 65 73 65 20 6F 70 74 69 6F 6E 73 20 20 74 6F    hese options  to
019F70:  20 74 68 65 20 6E 65 78 74 20 6F 6E 65 2E 20 20     the next one.  
019F80:  59 6F 75 20 6D 61 79 20 68 61 76 65 0D 0A 20 20    You may have..  
019F90:  20 73 65 65 6E 20 73 69 6D 69 6C 61 72 20 66 65     seen similar fe
019FA0:  61 74 75 72 65 73 20 6F 6E 20 74 68 65 20 6D 65    atures on the me
019FB0:  6E 75 73 20 6F 66 20 74 68 65 20 41 64 76 61 6E    nus of the Advan
019FC0:  63 65 64 20 4D 75 73 69 63 20 53 79 73 74 65 6D    ced Music System
019FD0:  2E 0D 0A 0D 0A 20 20 20 4C 69 6E 65 20 31 35 30    .....   Line 150
019FE0:  20 61 64 6A 75 73 74 73 20 74 68 65 20 6E 75 6D     adjusts the num
019FF0:  62 65 72 20 6F 66 20 6D 61 67 61 7A 69 6E 65 73    ber of magazines
01A000:  20 61 63 63 6F 72 64 69 6E 67 20 74 6F 20 77 68     according to wh
01A010:  65 74 68 65 72 20 74 68 65 20 22 6C 65 22 20 6F    ether the "le" o
01A020:  72 0D 0A 20 20 20 22 72 69 22 20 6B 65 79 73 20    r..   "ri" keys 
01A030:  61 72 65 20 70 72 65 73 73 65 64 2E 20 20 54 68    are pressed.  Th
01A040:  69 73 20 69 73 20 61 20 20 6D 75 63 68 20 73 69    is is a  much si
01A050:  6D 70 6C 65 72 20 76 65 72 73 69 6F 6E 20 6F 66    mpler version of
01A060:  20 74 68 65 20 74 65 63 68 6E 69 71 75 65 73 0D     the techniques.
01A070:  0A 20 20 20 77 65 20 65 78 70 6C 61 69 6E 65 64    .   we explained
01A080:  20 69 6E 20 74 68 65 20 4D 61 72 63 68 20 61 72     in the March ar
01A090:  74 69 63 6C 65 2E 0D 0A 0D 0A 20 20 20 48 6F 77    ticle.....   How
01A0A0:  20 64 6F 20 77 65 20 74 65 6C 6C 20 74 68 65 20     do we tell the 
01A0B0:  6D 65 6E 75 20 20 72 6F 75 74 69 6E 65 20 20 74    menu  routine  t
01A0C0:  6F 20 20 72 6F 6C 6C 20 6F 76 65 72 20 74 68 65    o  roll over the
01A0D0:  20 6D 61 67 61 7A 69 6E 65 20 69 73 73 75 65 73     magazine issues
01A0E0:  20 77 68 69 63 68 0D 0A 20 20 20 61 72 65 20 6F     which..   are o
01A0F0:  75 74 20 6F 66 20 73 74 6F 63 6B 3F 20 20 54 68    ut of stock?  Th
01A100:  64 20 20 74 68 61 6E 20 62 65 66 6F 72 65 2E 20    d  than before. 
01A110:  20 54 6F 20 66 69 6E 64 20 6F 75 74 0D 0A 20 20     To find out..  
01A120:  20 66 72 6F 6D 20 6B 70 20 20 77 68 65 74 68 65     from kp  whethe
01A130:  72 20 20 61 20 20 70 61 72 74 69 63 75 6C 61 72    r  a  particular
01A140:  20 20 6B 65 79 20 20 69 73 20 20 70 72 65 73 73      key  is  press
01A150:  65 64 20 20 77 65 20 20 41 4E 44 20 20 6B 70 20    ed  we  AND  kp 
01A160:  20 77 69 74 68 20 20 74 68 65 0D 0A 20 20 20 61     with  the..   a
01A170:  70 70 72 6F 70 72 69 61 74 65 20 76 61 6C 75 65    ppropriate value
01A180:  2E 20 20 54 68 75 73 20 69 66 20 74 68 65 20 22    .  Thus if the "
01A190:  73 68 22 20 6B 65 79 20 69 73 20 20 70 72 65 73    sh" key is  pres
01A1A0:  73 65 64 2C 20 6B 70 20 41 4E 44 20 38 20 77 69    sed, kp AND 8 wi
01A1B0:  6C 6C 20 62 65 20 38 3A 0D 0A 20 20 20 6F 74 68    ll be 8:..   oth
01A1C0:  65 72 77 69 73 65 20 69 74 20 69 73 20 7A 65 72    erwise it is zer
01A1D0:  6F 2E 0D 0A 0D 0A 20 20 20 41 67 61 69 6E 20 20    o.....   Again  
01A1E0:  77 65 20 20 61 72 65 20 20 75 73 69 6E 67 20 20    we  are  using  
01A1F0:  74 68 65 20 20 20 72 65 73 75 6C 74 73 20 20 20    the   results   
01A200:  6F 66 20 20 20 6C 6F 67 69 63 61 6C 20 20 65 78    of   logical  ex
01A210:  70 72 65 73 73 69 6F 6E 73 20 20 69 6E 20 20 6F    pressions  in  o
01A220:  75 72 0D 0A 20 20 20 63 61 6C 63 75 6C 61 74 69    ur..   calculati
01A230:  6F 6E 73 2E 20 20 54 68 65 20 69 6D 70 6F 72 74    ons.  The import
01A240:  61 6E 74 20 70 6F 69 6E 74 20 69 73 20 74 68 61    ant point is tha
01A250:  74 20 20 61 20 74 72 75 65 20 73 74 61 74 65 6D    t  a true statem
01A260:  65 6E 74 20 68 61 73 20 76 61 6C 75 65 20 2D 31    ent has value -1
01A270:  0D 0A 20 20 20 61 6E 64 20 61 20 66 61 6C 73 65    ..   and a false
01A280:  20 73 74 61 74 65 6D 65 6E 74 20 67 69 76 65 73     statement gives
01A290:  20 30 2E 20 20 54 68 65 20 20 66 69 72 73 74 20     0.  The  first 
01A2A0:  70 61 72 74 20 6F 66 20 74 68 65 20 65 78 70 72    part of the expr
01A2B0:  65 73 73 69 6F 6E 20 67 69 76 65 73 20 2D 0D 0A    ession gives -..
01A2C0:  20 20 20 31 2C 20 30 20 6F 72 20 31 20 64 65 70       1, 0 or 1 dep
01A2D0:  65 6E 64 69 6E 67 20 6F 6E 20 74 68 65 20 6C 65    ending on the le
01A2E0:  66 74 20 20 61 6E 64 20 20 72 69 67 68 74 20 6B    ft  and  right k
01A2F0:  65 79 73 2E 20 20 57 65 20 74 68 65 6E 20 6D 75    eys.  We then mu
01A300:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
01A310:  16 00 01 00 02 09 4E E5 16 00 C2 02 00 00 00 02    ......N.........
01A320:  16 00 C7 02 00 00 00 02 16 00 C3 02 00 00 00 02    ................
01A330:  16 00 C8 02 00 00 00 02 16 00 C4 02 00 00 00 02    ................
01A340:  16 00 C9 02 00 00 00 02 16 00 C5 02 00 00 00 02    ................
01A350:  16 00 C1 02 00 00 00 02 16 00 C6 02 00 00 00 02    ................
01A360:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01A370:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01A380:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01A390:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01A3A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01A3B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01A3C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01A3D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01A3E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01A3F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01A400:  0A 20 20 20 31 36 30 20 4C 4F 43 41 54 45 20 31    .   160 LOCATE 1
01A410:  30 2C 6D 70 2B 36 3A 49 46 20 6F 75 72 6B 66 20    0,mp+6:IF ourkf 
01A420:  41 4E 44 20 32 5E 6D 70 20 54 48 45 4E 20 50 52    AND 2^mp THEN PR
01A430:  49 4E 54 22 4F 6E 20 22 20 45 4C 53 45 20 50 52    INT"On " ELSE PR
01A440:  49 4E 54 22 4F 66 66 22 0D 0A 20 20 20 31 37 30    INT"Off"..   170
01A450:  20 52 45 54 55 52 4E 0D 0A 20 20 20 31 30 30 30     RETURN..   1000
01A460:  20 6B 70 3D 30 3A 6D 64 3D 31 3A 6D 7A 3D 30 0D     kp=0:md=1:mz=0.
01A470:  0A 20 20 20 31 30 30 31 20 57 48 49 4C 45 20 28    .   1001 WHILE (
01A480:  6B 70 20 41 4E 44 20 6B 66 29 3D 30 0D 0A 20 20    kp AND kf)=0..  
01A490:  20 31 30 30 32 20 57 48 49 4C 45 20 28 32 5E 6D     1002 WHILE (2^m
01A4A0:  70 20 41 4E 44 20 6D 66 29 3E 30 20 4F 52 20 6D    p AND mf)>0 OR m
01A4B0:  7A 0D 0A 20 20 20 31 30 30 33 20 6D 7A 3D 30 3A    z..   1003 mz=0:
01A4C0:  47 4F 53 55 42 20 31 30 31 30 3A 6D 70 3D 28 6D    GOSUB 1010:mp=(m
01A4D0:  70 2B 6D 63 68 2B 6D 64 29 20 4D 4F 44 20 6D 63    p+mch+md) MOD mc
01A4E0:  68 3A 47 4F 53 55 42 20 31 30 31 30 0D 0A 20 20    h:GOSUB 1010..  
01A4F0:  20 31 30 30 34 20 57 45 4E 44 0D 0A 20 20 20 31     1004 WEND..   1
01A500:  30 30 35 20 6D 64 3D 28 49 4E 4B 45 59 28 75 70    005 md=(INKEY(up
01A510:  29 3E 2D 31 29 2D 28 49 4E 4B 45 59 28 64 6F 77    )>-1)-(INKEY(dow
01A520:  29 3E 2D 31 29 3A 6D 7A 3D 6D 64 0D 0A 20 20 20    )>-1):mz=md..   
01A530:  31 30 30 36 20 6B 70 3D 2D 28 49 4E 4B 45 59 28    1006 kp=-(INKEY(
01A540:  6C 65 29 3E 2D 31 29 2D 32 2A 28 49 4E 4B 45 59    le)>-1)-2*(INKEY
01A550:  28 72 69 29 3E 2D 31 29 2D 34 2A 28 49 4E 4B 45    (ri)>-1)-4*(INKE
01A560:  59 28 66 69 29 3E 2D 31 29 0D 0A 20 20 20 31 30    Y(fi)>-1)..   10
01A570:  30 37 20 57 45 4E 44 0D 0A 20 20 20 31 30 30 38    07 WEND..   1008
01A580:  20 57 48 49 4C 45 20 49 4E 4B 45 59 24 3C 3E 22     WHILE INKEY$<>"
01A590:  22 3A 57 45 4E 44 0D 0A 20 20 20 31 30 30 39 20    ":WEND..   1009 
01A5A0:  52 45 54 55 52 4E 0D 0A 20 20 20 31 30 31 30 20    RETURN..   1010 
01A5B0:  50 52 49 4E 54 20 43 48 52 24 28 32 33 29 2B 43    PRINT CHR$(23)+C
01A5C0:  48 52 24 28 31 29 3B 0D 0A 20 20 20 31 30 31 31    HR$(1);..   1011
01A5D0:  20 4D 4F 56 45 20 6D 78 2C 6D 79 2D 6D 70 2A 6D     MOVE mx,my-mp*m
01A5E0:  73 70 2B 28 6D 64 3D 2D 31 29 2A 28 6D 62 68 2D    sp+(md=-1)*(mbh-
01A5F0:  32 29 0D 0A 20 20 20 31 30 31 32 20 46 4F 52 20    2)..   1012 FOR 
01A600:  23 50 72 6F 67 72 61 6D 6D 65 72 73 27 20 50 61    #Programmers' Pa
01A610:  74 63 68 20 38 20 2D 20 57 41 43 43 49 20 31 31    tch 8 - WACCI 11
01A620:  37 2C 20 4E 6F 76 2F 44 65 63 20 31 39 39 37 2C    7, Nov/Dec 1997,
01A630:  20 70 2E 20 31 35 2D 31 36 0D 0A 20 20 20 50 52     p. 15-16..   PR
01A640:  4F 47 52 41 4D 4D 45 52 53 27 20 50 41 54 43 48    OGRAMMERS' PATCH
01A650:  20 38 0D 0A 20 20 20 42 79 20 53 74 65 70 68 65     8..   By Stephe
01A660:  6E 20 61 6E 64 20 4D 61 74 74 68 65 77 20 50 68    n and Matthew Ph
01A670:  69 6C 6C 69 70 73 0D 0A 0D 0A 20 20 20 49 6E 20    illips....   In 
01A680:  74 68 65 20 6C 61 73 74 20 6F 66 20 74 68 72 65    the last of thre
01A690:  65 20 61 72 74 69 63 6C 65 73 20 61 62 6F 75 74    e articles about
01A6A0:  20 6D 65 6E 75 20 68 61 6E 64 6C 69 6E 67 20 69     menu handling i
01A6B0:  6E 20 42 41 53 49 43 20 77 65 20 61 72 65 20 67    n BASIC we are g
01A6C0:  6F 69 6E 67 20 74 6F 0D 0A 20 20 20 6C 6F 6F 6B    oing to..   look
01A6D0:  20 61 74 20 68 6F 77 20 74 68 65 20 72 6F 75 74     at how the rout
01A6E0:  69 6E 65 73 20 20 77 65 20 20 68 61 76 65 20 20    ines  we  have  
01A6F0:  70 72 65 73 65 6E 74 65 64 20 20 77 6F 72 6B 2E    presented  work.
01A700:  20 20 20 52 65 6D 65 6D 62 65 72 20 74 68 61 74       Remember that
01A710:  20 69 74 20 69 73 0D 0A 20 20 20 70 6F 73 73 69     it is..   possi
01A720:  62 6C 65 20 74 6F 20 75 73 65 20 74 68 65 20 73    ble to use the s
01A730:  75 62 72 6F 75 74 69 6E 65 73 20 20 79 6F 75 72    ubroutines  your
01A740:  73 65 6C 66 20 20 77 69 74 68 6F 75 74 20 20 68    self  without  h
01A750:  61 76 69 6E 67 20 61 20 63 6C 75 65 20 68 6F 77    aving a clue how
01A760:  20 74 68 65 79 0D 0A 20 20 20 61 63 74 75 61 6C     they..   actual
01A770:  6C 79 20 64 6F 20 74 68 65 20 6A 6F 62 2E 20 20    ly do the job.  
01A780:  49 66 20 79 6F 75 20 77 61 6E 74 20 74 6F 20 61    If you want to a
01A790:  64 61 70 74 20 74 68 65 20 73 75 62 72 6F 75 74    dapt the subrout
01A7A0:  69 6E 65 73 20 79 6F 75 72 73 65 6C 66 20 6F 72    ines yourself or
01A7B0:  20 75 73 65 0D 0A 20 20 20 73 6F 6D 65 20 20 6F     use..   some  o
01A7C0:  66 20 20 74 68 65 20 20 74 65 63 68 6E 69 71 75    f  the  techniqu
01A7D0:  65 73 20 20 69 6E 20 20 79 6F 75 72 20 20 20 6F    es  in  your   o
01A7E0:  77 6E 20 20 70 72 6F 67 72 61 6D 73 2C 20 20 74    wn  programs,  t
01A7F0:  68 65 6E 20 20 74 68 65 20 20 66 6F 6C 6C 6F 77    hen  the  follow
01A800:  6D 63 3D 31 20 54 4F 20 6D 62 68 2F 32 0D 0A 20    mc=1 TO mbh/2.. 
01A810:  20 20 31 30 31 33 20 44 52 41 57 52 20 6D 62 6C      1013 DRAWR mbl
01A820:  2C 30 2C 6D 63 6F 6C 3A 4D 4F 56 45 52 20 2D 6D    ,0,mcol:MOVER -m
01A830:  62 6C 2C 2D 32 2D 28 6D 64 3D 2D 31 29 2A 34 0D    bl,-2-(md=-1)*4.
01A840:  0A 20 20 20 31 30 31 34 20 46 4F 52 20 64 65 6C    .   1014 FOR del
01A850:  61 79 3D 30 20 54 4F 20 6D 64 65 3A 4E 45 58 54    ay=0 TO mde:NEXT
01A860:  0D 0A 20 20 20 31 30 31 35 20 4E 45 58 54 0D 0A    ..   1015 NEXT..
01A870:  20 20 20 31 30 31 36 20 50 52 49 4E 54 20 43 48       1016 PRINT CH
01A880:  52 24 28 32 33 29 2B 43 48 52 24 28 30 29 3B 0D    R$(23)+CHR$(0);.
01A890:  0A 20 20 20 31 30 31 37 20 52 45 54 55 52 4E 0D    .   1017 RETURN.
01A8A0:  0A 0D 0A 0D 0A 0D 0A 0D 0A 20 20 20 4C 69 73 74    .........   List
01A8B0:  69 6E 67 20 32 3A 0D 0A 0D 0A 20 20 20 31 30 20    ing 2:....   10 
01A8C0:  6D 63 68 3D 36 3A 6D 66 3D 38 2B 33 32 3A 6D 64    mch=6:mf=8+32:md
01A8D0:  65 3D 30 0D 0A 20 20 20 32 30 20 6D 63 6F 6C 3D    e=0..   20 mcol=
01A8E0:  31 3A 6D 73 70 3D 33 32 3A 6D 78 3D 31 32 34 3A    1:msp=32:mx=124:
01A8F0:  6D 79 3D 33 32 32 3A 6D 62 68 3D 32 32 3A 6D 62    my=322:mbh=22:mb
01A900:  6C 3D 31 33 32 0D 0A 20 20 20 33 30 20 75 70 3D    l=132..   30 up=
01A910:  30 3A 64 6F 77 3D 32 3A 6C 65 3D 38 3A 72 69 3D    0:dow=2:le=8:ri=
01A920:  31 3A 66 69 3D 34 37 3A 6B 66 3D 37 0D 0A 20 20    1:fi=47:kf=7..  
01A930:  20 34 30 20 44 49 4D 20 6E 75 6D 28 6D 63 68 2D     40 DIM num(mch-
01A940:  31 29 0D 0A 20 20 20 35 30 20 4D 4F 44 45 20 31    1)..   50 MODE 1
01A950:  3A 4C 4F 43 41 54 45 20 38 2C 33 3A 50 52 49 4E    :LOCATE 8,3:PRIN
01A960:  54 22 57 41 43 43 49 20 62 61 63 6B 2D 69 73 73    T"WACCI back-iss
01A970:  75 65 73 20 6F 72 64 65 72 73 22 0D 0A 20 20 20    ues orders"..   
01A980:  36 30 20 4C 4F 43 41 54 45 20 38 2C 34 3A 50 52    60 LOCATE 8,4:PR
01A990:  49 4E 54 20 53 54 52 49 4E 47 24 28 32 34 2C 22    INT STRING$(24,"
01A9A0:  2D 22 29 3A 4C 4F 43 41 54 45 20 31 2C 31 39 0D    -"):LOCATE 1,19.
01A9B0:  0A 20 20 20 37 30 20 50 52 49 4E 54 22 55 73 65    .   70 PRINT"Use
01A9C0:  20 74 68 65 20 63 75 72 73 6F 72 20 6B 65 79 73     the cursor keys
01A9D0:  20 74 6F 20 6D 6F 76 65 20 61 6E 64 20 61 6C 74     to move and alt
01A9E0:  65 72 2E 20 20 53 50 41 43 45 20 74 6F 20 66 69    er.  SPACE to fi
01A9F0:  6E 69 73 68 2E 22 0D 0A 20 20 20 38 30 20 46 4F    nish."..   80 FO
01AA00:  69 6E 67 0D 0A 20 20 20 65 78 70 6C 61 6E 61 74    ing..   explanat
01AA10:  69 6F 6E 20 6D 61 79 20 62 65 20 68 65 6C 70 66    ion may be helpf
01AA20:  75 6C 2E 20 20 49 66 20 69 74 20 20 69 73 6E 27    ul.  If it  isn'
01AA30:  74 20 20 74 68 65 6E 20 20 77 72 69 74 65 20 74    t  then  write t
01AA40:  6F 20 46 61 69 72 20 43 6F 6D 6D 65 6E 74 20 61    o Fair Comment a
01AA50:  6E 64 0D 0A 20 20 20 63 6F 6D 70 6C 61 69 6E 21    nd..   complain!
01AA60:  0D 0A 0D 0A 20 20 20 54 68 65 20 72 6F 75 74 69    ....   The routi
01AA70:  6E 65 73 20 68 61 76 65 20 62 65 65 6E 20 72 65    nes have been re
01AA80:  70 72 69 6E 74 65 64 20 20 66 6F 72 20 20 79 6F    printed  for  yo
01AA90:  75 20 20 79 65 74 20 20 61 67 61 69 6E 2C 20 61    u  yet  again, a
01AAA0:  6C 6F 6E 67 20 77 69 74 68 20 61 20 74 61 62 6C    long with a tabl
01AAB0:  65 0D 0A 20 20 20 73 68 6F 77 69 6E 67 20 61 6C    e..   showing al
01AAC0:  6C 20 74 68 65 20 76 61 72 69 61 62 6C 65 73 20    l the variables 
01AAD0:  77 65 20 20 75 73 65 2E 20 20 20 3C 3C 54 68 65    we  use.   <<The
01AAE0:  20 20 6D 65 6E 75 20 20 72 6F 75 74 69 6E 65 20      menu  routine 
01AAF0:  69 73 20 61 6C 73 6F 20 73 61 76 65 64 20 6F 6E    is also saved on
01AB00:  0D 0A 20 20 20 64 69 73 63 20 61 73 20 4D 45 4E    ..   disc as MEN
01AB10:  55 53 55 42 3E 3E 0D 0A 0D 0A 20 20 20 57 45 4E    USUB>>....   WEN
01AB20:  44 49 4E 47 20 4F 55 52 20 57 41 59 0D 0A 20 20    DING OUR WAY..  
01AB30:  20 54 68 65 20 6D 61 69 6E 20 73 75 62 72 6F 75     The main subrou
01AB40:  74 69 6E 65 2C 20 6C 69 6E 65 73 20 20 31 30 30    tine, lines  100
01AB50:  30 2D 31 30 30 39 2C 20 20 63 6F 6E 74 61 69 6E    0-1009,  contain
01AB60:  73 20 73 65 76 65 72 61 6C 20 57 48 49 4C 45 2D    s several WHILE-
01AB70:  57 45 4E 44 20 6C 6F 6F 70 73 2E 0D 0A 20 20 20    WEND loops...   
01AB80:  4C 69 6E 65 20 31 30 30 38 20 73 65 65 73 20 6F    Line 1008 sees o
01AB90:  75 72 20 66 61 76 6F 75 72 69 74 65 20 6C 6F 6F    ur favourite loo
01ABA0:  70 20 20 66 6F 72 20 63 6C 65 61 72 69 6E 67 20    p  for clearing 
01ABB0:  74 68 65 20 6B 65 79 62 6F 61 72 64 20 62 75 66    the keyboard buf
01ABC0:  66 65 72 2E 20 20 54 68 69 73 0D 0A 20 20 20 69    fer.  This..   i
01ABD0:  73 20 64 6F 6E 65 20 62 65 66 6F 72 65 20 72 65    s done before re
01ABE0:  74 75 72 6E 69 6E 67 20 74 6F 20 79 6F 75 72 20    turning to your 
01ABF0:  20 70 72 6F 67 72 61 6D 20 20 69 6E 20 20 6F 72     program  in  or
01AC00:  52 20 6D 70 3D 30 20 54 4F 20 6D 63 68 2D 31 3A    R mp=0 TO mch-1:
01AC10:  4C 4F 43 41 54 45 20 39 2C 36 2B 6D 70 2A 32 3A    LOCATE 9,6+mp*2:
01AC20:  50 52 49 4E 54 22 57 41 43 43 49 22 34 30 2B 6D    PRINT"WACCI"40+m
01AC30:  70 3A 47 4F 53 55 42 20 32 31 30 3A 4E 45 58 54    p:GOSUB 210:NEXT
01AC40:  0D 0A 20 20 20 39 30 20 46 4F 52 20 6D 70 3D 30    ..   90 FOR mp=0
01AC50:  20 54 4F 20 6D 63 68 2D 31 0D 0A 20 20 20 31 30     TO mch-1..   10
01AC60:  30 20 49 46 20 6D 66 20 41 4E 44 20 32 5E 6D 70    0 IF mf AND 2^mp
01AC70:  20 54 48 45 4E 20 4C 4F 43 41 54 45 20 33 30 2C     THEN LOCATE 30,
01AC80:  32 2A 6D 70 2B 36 3A 50 52 49 4E 54 22 28 6E 6F    2*mp+6:PRINT"(no
01AC90:  20 73 74 6F 63 6B 29 22 0D 0A 20 20 20 31 31 30     stock)"..   110
01ACA0:  20 4E 45 58 54 0D 0A 20 20 20 31 32 30 20 6D 70     NEXT..   120 mp
01ACB0:  3D 30 3A 6B 70 3D 30 0D 0A 20 20 20 31 33 30 20    =0:kp=0..   130 
01ACC0:  47 4F 53 55 42 20 31 30 31 30 0D 0A 20 20 20 31    GOSUB 1010..   1
01ACD0:  34 30 20 57 48 49 4C 45 20 6B 70 3C 3E 34 0D 0A    40 WHILE kp<>4..
01ACE0:  20 20 20 31 35 30 20 6E 75 6D 28 6D 70 29 3D 6E       150 num(mp)=n
01ACF0:  75 6D 28 6D 70 29 2B 28 6B 70 3D 31 29 2D 28 6B    um(mp)+(kp=1)-(k
01AD00:  70 3D 32 29 3A 47 4F 53 55 42 20 32 31 30 0D 0A    p=2):GOSUB 210..
01AD10:  20 20 20 31 36 30 20 47 4F 53 55 42 20 31 30 30       160 GOSUB 100
01AD20:  30 0D 0A 20 20 20 31 37 30 20 57 45 4E 44 0D 0A    0..   170 WEND..
01AD30:  20 20 20 31 38 30 20 6D 61 67 73 3D 30 3A 46 4F       180 mags=0:FO
01AD40:  52 20 78 3D 30 20 54 4F 20 6D 63 68 2D 31 3A 6D    R x=0 TO mch-1:m
01AD50:  61 67 73 3D 6D 61 67 73 2B 6E 75 6D 28 78 29 3A    ags=mags+num(x):
01AD60:  4E 45 58 54 0D 0A 20 20 20 31 39 30 20 4C 4F 43    NEXT..   190 LOC
01AD70:  41 54 45 20 31 2C 32 32 3A 50 52 49 4E 54 22 54    ATE 1,22:PRINT"T
01AD80:  68 61 6E 6B 20 79 6F 75 20 66 6F 72 20 79 6F 75    hank you for you
01AD90:  72 20 6F 72 64 65 72 2E 22 0D 0A 20 20 20 32 30    r order."..   20
01ADA0:  30 20 50 52 49 4E 54 22 50 6C 65 61 73 65 20 73    0 PRINT"Please s
01ADB0:  65 6E 64 20 61 20 63 68 65 71 75 65 20 66 6F 72    end a cheque for
01ADC0:  20 A3 22 3B 55 53 49 4E 47 22 23 23 2E 23 23 22     £";USING"##.##"
01ADD0:  3B 30 2E 35 2A 6D 61 67 73 3A 45 4E 44 0D 0A 20    ;0.5*mags:END.. 
01ADE0:  20 20 32 31 30 20 4C 4F 43 41 54 45 20 32 37 2C      210 LOCATE 27,
01ADF0:  36 2B 6D 70 2A 32 3A 50 52 49 4E 54 20 6E 75 6D    6+mp*2:PRINT num
01AE00:  64 65 72 20 74 6F 20 6D 61 6B 65 20 73 75 72 65    der to make sure
01AE10:  20 74 68 61 74 20 74 68 65 0D 0A 20 20 20 6B 65     that the..   ke
01AE20:  79 20 70 72 65 73 73 65 73 20 66 72 6F 6D 20 74    y presses from t
01AE30:  68 65 20 6D 65 6E 75 20 20 73 65 6C 65 63 74 69    he menu  selecti
01AE40:  6F 6E 20 20 61 72 65 20 20 60 75 73 65 64 20 75    on  are  `used u
01AE50:  70 27 20 70 72 6F 70 65 72 6C 79 2E 20 20 54 72    p' properly.  Tr
01AE60:  79 20 74 61 6B 69 6E 67 0D 0A 20 20 20 74 68 65    y taking..   the
01AE70:  20 6C 69 6E 65 20 6F 75 74 20 61 6E 64 20 79 6F     line out and yo
01AE80:  75 20 77 69 6C 6C 20 73 6F 6F 6E 20 73 65 65 20    u will soon see 
01AE90:  77 68 79 20 69 74 20 69 73 20 75 73 65 66 75 6C    why it is useful
01AEA0:  20 74 6F 20 68 61 76 65 20 69 74 20 74 68 65 72     to have it ther
01AEB0:  65 2E 0D 0A 0D 0A 20 20 20 4C 69 6E 65 73 20 31    e.....   Lines 1
01AEC0:  30 30 31 2D 31 30 30 37 20 66 6F 72 6D 20 74 68    001-1007 form th
01AED0:  65 20 6D 61 69 6E 20 20 57 48 49 4C 45 2D 57 45    e main  WHILE-WE
01AEE0:  4E 44 20 20 6C 6F 6F 70 20 20 6F 66 20 74 68 65    ND  loop  of the
01AEF0:  20 73 75 62 72 6F 75 74 69 6E 65 2C 20 77 69 74     subroutine, wit
01AF00:  68 69 6E 0D 0A 20 20 20 77 68 69 63 68 20 74 68    hin..   which th
01AF10:  65 72 65 20 69 73 20 79 65 74 20 61 6E 6F 74 68    ere is yet anoth
01AF20:  65 72 20 6C 6F 6F 70 20 61 74 20 6C 69 6E 65 73    er loop at lines
01AF30:  20 31 30 30 32 20 74 6F 20 31 30 30 34 2E 0D 0A     1002 to 1004...
01AF40:  0D 0A 20 20 20 54 68 65 20 6D 61 69 6E 20 6C 6F    ..   The main lo
01AF50:  6F 70 20 69 73 20 65 73 73 65 6E 74 69 61 6C 6C    op is essentiall
01AF60:  79 20 20 61 6C 6C 20 20 61 62 6F 75 74 20 20 63    y  all  about  c
01AF70:  68 65 63 6B 69 6E 67 20 20 74 68 65 20 6B 65 79    hecking  the key
01AF80:  73 20 74 68 61 74 20 74 68 65 20 75 73 65 72 0D    s that the user.
01AF90:  0A 20 20 20 70 72 65 73 73 65 73 2E 20 20 54 68    .   presses.  Th
01AFA0:  65 20 22 75 70 22 20 61 6E 64 20 20 22 64 6F 77    e "up" and  "dow
01AFB0:  22 20 20 6B 65 79 73 20 20 61 72 65 20 20 64 65    "  keys  are  de
01AFC0:  74 65 63 74 65 64 20 20 69 6E 20 20 6C 69 6E 65    tected  in  line
01AFD0:  20 20 31 30 30 35 20 61 6E 64 20 74 68 65 0D 0A      1005 and the..
01AFE0:  20 20 20 69 6E 74 65 72 6E 61 6C 20 76 61 72 69       internal vari
01AFF0:  61 62 6C 65 20 22 6D 64 22 20 69 73 20 73 65 74    able "md" is set
01B000:  28 6D 70 29 3A 52 45 54 55 52 4E 0D 0A 1A 00 FF    (mp):RETURN.....
01B010:  50 41 54 43 48 20 37 0D 0A 20 20 20 42 79 20 53    PATCH 7..   By S
01B020:  74 65 70 68 65 6E 20 61 6E 64 20 4D 61 74 74 68    tephen and Matth
01B030:  65 77 20 50 68 69 6C 6C 69 70 73 0D 0A 0D 0A 20    ew Phillips.... 
01B040:  20 20 4C 61 73 74 20 6D 6F 6E 74 68 20 77 65 20      Last month we 
01B050:  73 74 61 72 74 65 64 20 6C 6F 6F 6B 69 6E 67 20    started looking 
01B060:  61 74 20 20 61 20 20 73 68 6F 72 74 20 20 72 6F    at  a  short  ro
01B070:  75 74 69 6E 65 20 66 6F 72 20 68 61 6E 64 6C 69    utine for handli
01B080:  AB 2C ED DA 19 35 3F A4 3A 86 75 0C 3B 2F CC EF    .,...5?.:.u.;/..
01B090:  16 00 03 22 E8 09 03 22 F5 09 03 22 FE 09 03 44    ..."..."..."...D
01B0A0:  1D 00 03 44 0D 00 03 4C 64 02 03 44 67 3D 00 00    ...D...Ld..Dg=..
01B0B0:  11 FF 69 6E 74 20 20 20 20 20 00 00 12 FF 6C 6F    ..int     ....lo
01B0C0:  6E 67 20 20 20 20 00 00 13 FF 72 65 67 69 73 74    ng    ....regist
01B0D0:  65 72 00 00 14 FF 72 65 74 75 72 6E 20 20 00 00    er....return  ..
01B0E0:  15 FF 73 68 6F 72 74 20 20 20 00 00 16 FF 73 69    ..short   ....si
01B0F0:  7A 65 6F 03 00 BA 63 01 00 01 07 00 D0 63 BF 00    zeo...c......c..
01B100:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B110:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B120:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B130:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B140:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B150:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B160:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B170:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B180:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B190:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B1A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B1B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B1C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B1D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B1E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B1F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B200:  66 3D 35 0D 0A 20 20 20 34 30 20 6F 75 72 6B 66    f=5..   40 ourkf
01B210:  3D 30 0D 0A 20 20 20 35 30 20 50 52 49 4E 54 22    =0..   50 PRINT"
01B220:  50 72 65 73 73 20 53 50 41 43 45 20 74 6F 20 74    Press SPACE to t
01B230:  6F 67 67 6C 65 20 74 68 65 20 76 61 6C 75 65 73    oggle the values
01B240:  20 4F 6E 2F 4F 66 66 22 0D 0A 20 20 20 36 30 20     On/Off"..   60 
01B250:  50 52 49 4E 54 20 43 48 52 24 28 33 34 29 22 4F    PRINT CHR$(34)"O
01B260:  66 66 22 43 48 52 24 28 33 34 29 22 20 6D 65 61    ff"CHR$(34)" mea
01B270:  6E 73 20 74 68 65 20 6B 65 79 20 77 6F 75 6C 64    ns the key would
01B280:  20 62 65 20 69 67 6E 6F 72 65 64 22 0D 0A 20 20     be ignored"..  
01B290:  20 37 30 20 50 52 49 4E 54 3A 50 52 49 4E 54 22     70 PRINT:PRINT"
01B2A0:  50 72 65 73 73 20 52 45 54 55 52 4E 20 74 6F 20    Press RETURN to 
01B2B0:  63 61 6C 63 75 6C 61 74 65 20 74 68 65 20 6B 66    calculate the kf
01B2C0:  20 76 61 6C 75 65 22 0D 0A 20 20 20 38 30 20 4C     value"..   80 L
01B2D0:  4F 43 41 54 45 20 31 2C 36 3A 50 52 49 4E 54 22    OCATE 1,6:PRINT"
01B2E0:  6C 65 22 3A 50 52 49 4E 54 22 72 69 22 3A 50 52    le":PRINT"ri":PR
01B2F0:  49 4E 54 22 66 69 22 0D 0A 20 20 20 39 30 20 46    INT"fi"..   90 F
01B300:  4F 52 20 6D 70 3D 30 20 54 4F 20 6D 63 68 2D 31    OR mp=0 TO mch-1
01B310:  3A 47 4F 53 55 42 20 31 36 30 3A 4E 45 58 54 3A    :GOSUB 160:NEXT:
01B320:  6D 70 3D 30 0D 0A 20 20 20 31 30 30 20 47 4F 53    mp=0..   100 GOS
01B330:  55 42 20 31 30 31 30 0D 0A 20 20 20 31 31 30 20    UB 1010..   110 
01B340:  57 48 49 4C 45 20 6B 70 3C 3E 34 0D 0A 20 20 20    WHILE kp<>4..   
01B350:  31 32 30 20 47 4F 53 55 42 20 31 30 30 30 0D 0A    120 GOSUB 1000..
01B360:  20 20 20 31 33 30 20 49 46 20 6B 70 3D 31 20 54       130 IF kp=1 T
01B370:  48 45 4E 20 6F 75 72 6B 66 3D 6F 75 72 6B 66 20    HEN ourkf=ourkf 
01B380:  58 4F 52 20 32 5E 6D 70 3A 47 4F 53 55 42 20 31    XOR 2^mp:GOSUB 1
01B390:  36 30 3A 46 4F 52 20 64 65 6C 61 79 3D 31 20 54    60:FOR delay=1 T
01B3A0:  4F 20 31 30 30 3A 4E 45 58 54 0D 0A 20 20 20 31    O 100:NEXT..   1
01B3B0:  34 30 20 57 45 4E 44 0D 0A 20 20 20 31 35 30 20    40 WEND..   150 
01B3C0:  47 4F 53 55 42 20 31 30 31 30 3A 4C 4F 43 41 54    GOSUB 1010:LOCAT
01B3D0:  45 20 31 2C 31 30 3A 50 52 49 4E 54 22 54 68 65    E 1,10:PRINT"The
01B3E0:  20 6B 66 20 76 61 6C 75 65 20 79 6F 75 20 6E 65     kf value you ne
01B3F0:  65 64 20 69 73 22 6F 75 72 6B 66 3A 45 4E 44 0D    ed is"ourkf:END.
01B400:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B410:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B420:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B430:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B440:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B450:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B460:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B470:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B480:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B490:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B4A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B4B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B4C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B4D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B4E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B4F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B500:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B510:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B520:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B530:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B540:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B550:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B560:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B570:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B580:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B590:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B5A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B5B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B5C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B5D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B5E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B5F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
01B600:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
01B610:  17 00 01 00 02 09 4E E5 17 00 C9 02 00 00 00 02    ......N.........
01B620:  17 00 C5 02 00 00 00 02 17 00 C1 02 00 00 00 02    ................
01B630:  17 00 C6 02 00 00 00 02 17 00 C2 02 00 00 00 02    ................
01B640:  17 00 C7 02 00 00 00 02 17 00 C3 02 00 00 00 02    ................
01B650:  17 00 C8 02 00 00 00 02 17 00 C4 02 00 00 00 02    ................
01B660:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B670:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B680:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B690:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B6A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B6B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B6C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B6D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B6E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B6F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01B700:  65 73 20 74 68 65 20 6D 65 6E 75 20 62 61 72 2E    es the menu bar.
01B710:  0D 0A 0D 0A 20 20 20 20 20 54 68 65 20 66 69 72    ....     The fir
01B720:  73 74 20 63 6F 6D 6D 61 6E 64 20 69 6E 73 69 64    st command insid
01B730:  65 20 74 68 65 20 6C 6F 6F 70 2C 20 6F 6E 20 20    e the loop, on  
01B740:  6C 69 6E 65 20 31 30 30 33 2C 20 73 65 74 73 20    line 1003, sets 
01B750:  6D 7A 20 74 6F 20 7A 65 72 6F 20 61 67 61 69 6E    mz to zero again
01B760:  2C 0D 0A 20 20 20 6D 61 6B 69 6E 67 20 69 74 20    ,..   making it 
01B770:  66 61 6C 73 65 2E 20 20 54 68 65 20 6D 65 6E 75    false.  The menu
01B780:  20 62 61 72 20 74 68 65 6E 20 6D 6F 76 65 73 20     bar then moves 
01B790:  20 6F 6E 20 20 74 6F 20 74 68 65 20 6E 65 78 74     on  to the next
01B7A0:  20 6D 65 6E 75 20 69 74 65 6D 20 75 70 20 6F 72     menu item up or
01B7B0:  0D 0A 20 20 20 64 6F 77 6E 2E 20 20 55 70 6F 6E    ..   down.  Upon
01B7C0:  20 72 65 61 63 68 69 6E 67 20 74 68 65 20 57 45     reaching the WE
01B7D0:  4E 44 20 69 6E 20 6C 69 6E 65 20 20 31 30 30 34    ND in line  1004
01B7E0:  2C 20 74 68 65 20 62 61 72 20 6D 6F 76 69 6E 67    , the bar moving
01B7F0:  20 6C 6F 6F 70 20 77 69 6C 6C 20 6F 6E 6C 79 0D     loop will only.
01B800:  0A 20 20 20 65 78 65 63 75 74 65 20 61 67 61 69    .   execute agai
01B810:  6E 20 69 66 20 74 68 65 20 62 61 72 20 69 73 20    n if the bar is 
01B820:  20 6F 76 65 72 20 20 61 20 20 70 72 6F 68 69 62     over  a  prohib
01B830:  69 74 65 64 20 6D 65 6E 75 20 6F 70 74 69 6F 6E    ited menu option
01B840:  2C 20 73 69 6E 63 65 20 6D 7A 20 68 61 73 0D 0A    , since mz has..
01B850:  20 20 20 62 65 65 6E 20 72 65 73 65 74 20 74 6F       been reset to
01B860:  20 74 68 65 20 66 61 6C 73 65 20 76 61 6C 75 65     the false value
01B870:  20 6F 66 20 7A 65 72 6F 2E 0D 0A 0D 0A 20 20 20     of zero.....   
01B880:  20 20 57 68 79 20 64 69 64 20 77 65 20 6E 65 65      Why did we nee
01B890:  64 20 61 6E 6F 74 68 65 72 20 76 61 72 69 61 62    d another variab
01B8A0:  6C 65 20 20 74 68 6F 75 67 68 20 20 2D 20 20 63    le  though  -  c
01B8B0:  6F 75 6C 64 20 77 65 20 6E 6F 74 20 6A 75 73 74    ould we not just
01B8C0:  20 68 61 76 65 20 75 73 65 64 0D 0A 20 20 20 6D     have used..   m
01B8D0:  64 3F 20 20 57 65 20 63 65 72 74 61 69 6E 6C 79    d?  We certainly
01B8E0:  20 6E 65 65 64 20 20 61 20 20 76 61 72 69 61 62     need  a  variab
01B8F0:  6C 65 20 20 74 68 61 74 20 20 73 68 6F 77 73 20    le  that  shows 
01B900:  72 73 74 20 69 74 65 6D 20 6F 6E 0D 0A 20 20 20    rst item on..   
01B910:  74 68 65 20 6D 65 6E 75 2C 20 74 68 65 20 6E 65    the menu, the ne
01B920:  78 74 20 64 69 67 69 74 20 61 6C 6F 6E 67 20 72    xt digit along r
01B930:  65 66 65 72 73 20 74 6F 20 74 68 65 20 73 65 63    efers to the sec
01B940:  6F 6E 64 20 69 74 65 6D 20 61 6E 64 20 73 6F 20    ond item and so 
01B950:  6F 6E 2E 0D 0A 0D 0A 20 20 20 46 6F 72 20 65 78    on.....   For ex
01B960:  61 6D 70 6C 65 2C 20 69 66 20 6D 66 20 77 61 73    ample, if mf was
01B970:  20 38 20 28 31 30 30 30 20 20 69 6E 20 20 62 69     8 (1000  in  bi
01B980:  6E 61 72 79 29 2C 20 20 74 68 69 73 20 6D 65 61    nary),  this mea
01B990:  6E 73 20 74 68 61 74 20 74 68 65 20 31 73 74 2C    ns that the 1st,
01B9A0:  20 32 6E 64 0D 0A 20 20 20 61 6E 64 20 33 72 64     2nd..   and 3rd
01B9B0:  20 69 74 65 6D 73 20 6F 6E 20 74 68 65 20 6D 65     items on the me
01B9C0:  6E 75 20 20 63 61 6E 20 20 62 65 20 20 73 65 6C    nu  can  be  sel
01B9D0:  65 63 74 65 64 2C 20 20 62 75 74 20 20 74 68 65    ected,  but  the
01B9E0:  20 20 34 74 68 20 69 74 65 6D 20 69 73 20 74 6F      4th item is to
01B9F0:  20 62 65 0D 0A 20 20 20 61 76 6F 69 64 65 64 2E     be..   avoided.
01BA00:  20 20 49 66 20 6D 66 20 77 61 73 20 31 32 20 28      If mf was 12 (
01BA10:  31 31 30 30 20 20 69 6E 20 20 62 69 6E 61 72 79    1100  in  binary
01BA20:  29 2C 20 20 74 68 65 6E 20 20 74 68 65 20 33 72    ),  then  the 3r
01BA30:  64 20 69 74 65 6D 20 6D 75 73 74 20 6E 6F 74 20    d item must not 
01BA40:  62 65 0D 0A 20 20 20 73 65 6C 65 63 74 65 64 20    be..   selected 
01BA50:  65 69 74 68 65 72 2E 0D 0A 0D 0A 20 20 20 54 68    either.....   Th
01BA60:  65 20 70 6F 73 69 74 69 6F 6E 20 6F 66 20 74 68    e position of th
01BA70:  65 20 6D 65 6E 75 20 62 61 72 20 69 73 20 68 65    e menu bar is he
01BA80:  6C 64 20 69 6E 20 22 6D 70 22 2E 20 20 46 6F 72    ld in "mp".  For
01BA90:  20 6D 6F 72 65 20 74 68 61 6E 20 6F 6E 65 20 72     more than one r
01BAA0:  65 61 73 6F 6E 20 77 65 0D 0A 20 20 20 73 74 61    eason we..   sta
01BAB0:  72 74 20 63 6F 75 6E 74 69 6E 67 20 66 72 6F 6D    rt counting from
01BAC0:  20 7A 65 72 6F 2C 20 73 6F 20 6D 70 20 20 69 73     zero, so mp  is
01BAD0:  20 20 7A 65 72 6F 20 20 77 68 65 6E 20 20 74 68      zero  when  th
01BAE0:  65 20 20 6D 65 6E 75 20 62 61 72 20 69 73 20 6F    e  menu bar is o
01BAF0:  76 65 72 20 74 68 65 0D 0A 20 20 20 66 69 72 73    ver the..   firs
01BB00:  20 20 74 6F 20 20 69 6E 64 69 63 61 74 65 20 20      to  indicate  
01BB10:  77 68 69 63 68 20 20 64 69 72 65 63 74 69 6F 6E    which  direction
01BB20:  20 74 68 65 20 6D 65 6E 75 20 62 61 72 0D 0A 20     the menu bar.. 
01BB30:  20 20 73 68 6F 75 6C 64 20 6D 6F 76 65 2C 20 75      should move, u
01BB40:  73 69 6E 67 20 6D 75 63 68 20 74 68 65 20 73 61    sing much the sa
01BB50:  6D 65 20 20 74 65 63 68 6E 69 71 75 65 20 20 61    me  technique  a
01BB60:  73 20 69 6E 20 74 68 65 20 64 69 73 63 20 6D 65    s in the disc me
01BB70:  6E 75 20 70 72 6F 67 72 61 6D 6D 65 0D 0A 20 20    nu programme..  
01BB80:  20 77 65 20 66 65 61 74 75 72 65 64 20 69 6E 20     we featured in 
01BB90:  69 73 73 75 65 20 31 31 30 2E 20 20 49 6E 20 74    issue 110.  In t
01BBA0:  68 65 20 6E 65 78 74 20 6C 69 6E 65 20 74 68 65    he next line the
01BBB0:  20 6F 74 68 65 72 20 6B 65 79 73 2C 20 22 6C 65     other keys, "le
01BBC0:  22 2C 20 22 72 69 22 20 61 6E 64 0D 0A 20 20 20    ", "ri" and..   
01BBD0:  22 66 69 22 20 61 72 65 20 63 68 65 63 6B 65 64    "fi" are checked
01BBE0:  2E 20 20 54 68 65 20 76 61 6C 75 65 20 20 6F 66    .  The value  of
01BBF0:  20 20 22 6B 70 22 20 20 69 73 20 20 73 65 74 20      "kp"  is  set 
01BC00:  61 63 63 6F 72 64 69 6E 67 20 74 6F 20 77 68 65    according to whe
01BC10:  74 68 65 72 20 74 68 6F 73 65 0D 0A 20 20 20 6B    ther those..   k
01BC20:  65 79 73 20 61 72 65 20 70 72 65 73 73 65 64 20    eys are pressed 
01BC30:  6F 72 20 6E 6F 74 2C 20 61 73 20 77 65 20 20 65    or not, as we  e
01BC40:  78 70 6C 61 69 6E 65 64 20 6C 61 73 74 20 6D 6F    xplained last mo
01BC50:  6E 74 68 2E 20 20 53 65 74 74 69 6E 67 20 61 73    nth.  Setting as
01BC60:  69 64 65 20 6C 69 6E 65 73 0D 0A 20 20 20 31 30    ide lines..   10
01BC70:  30 32 20 74 6F 20 31 30 30 34 2C 20 77 68 69 63    02 to 1004, whic
01BC80:  68 20 64 6F 20 74 68 65 20 6D 6F 76 69 6E 67 20    h do the moving 
01BC90:  6F 66 20 74 68 65 20 6D 65 6E 75 20 62 61 72 2C    of the menu bar,
01BCA0:  20 74 68 61 74 20 69 73 20 61 6C 6C 20 74 68 65     that is all the
01BCB0:  72 65 20 69 73 20 74 6F 0D 0A 20 20 20 69 74 2E    re is to..   it.
01BCC0:  0D 0A 0D 0A 20 20 20 54 68 65 20 6D 61 69 6E 20    ....   The main 
01BCD0:  6C 6F 6F 70 20 6B 65 65 70 73 20 67 6F 69 6E 67    loop keeps going
01BCE0:  20 77 68 69 6C 65 0D 0A 0D 0A 20 20 20 20 20 20     while....      
01BCF0:  20 20 20 20 20 28 6B 70 20 41 4E 44 20 6B 66 29         (kp AND kf)
01BD00:  74 20 69 74 65 6D 20 6F 6E 20 74 68 65 20 6D 65    t item on the me
01BD10:  6E 75 2C 20 6F 6E 65 20 77 68 65 6E 20 69 74 20    nu, one when it 
01BD20:  69 73 20 6F 76 65 72 20 74 68 65 20 73 65 63 6F    is over the seco
01BD30:  6E 64 20 69 74 65 6D 20 61 6E 64 20 73 6F 20 6F    nd item and so o
01BD40:  6E 2E 0D 0A 0D 0A 20 20 20 54 68 65 20 65 78 70    n.....   The exp
01BD50:  72 65 73 73 69 6F 6E 0D 0A 0D 0A 20 20 20 20 20    ression....     
01BD60:  20 20 20 20 20 20 28 32 5E 6D 70 20 41 4E 44 20          (2^mp AND 
01BD70:  6D 66 29 3E 30 0D 0A 0D 0A 20 20 20 69 6E 20 6C    mf)>0....   in l
01BD80:  69 6E 65 20 31 30 30 32 20 69 73 20 64 65 73 69    ine 1002 is desi
01BD90:  67 6E 65 64 20 74 6F 20 74 65 73 74 20 77 68 65    gned to test whe
01BDA0:  74 68 65 72 20 74 68 65 20 6D 65 6E 75 20 62 61    ther the menu ba
01BDB0:  72 20 69 73 20 6F 76 65 72 20 61 20 70 72 6F 68    r is over a proh
01BDC0:  69 62 69 74 65 64 0D 0A 20 20 20 69 74 65 6D 2E    ibited..   item.
01BDD0:  20 20 28 54 68 65 20 5E 20 73 79 6D 62 6F 6C 20      (The ^ symbol 
01BDE0:  69 73 20 74 68 65 20 73 61 6D 65 20 20 61 73 20    is the same  as 
01BDF0:  20 74 68 65 20 20 75 70 20 61 72 72 6F 77 20 74     the  up arrow t
01BE00:  68 61 74 20 73 68 61 72 65 73 20 61 20 6B 65 79    hat shares a key
01BE10:  20 77 69 74 68 0D 0A 20 20 20 74 68 65 20 70 6F     with..   the po
01BE20:  75 6E 64 20 73 69 67 6E 20 6F 6E 20 79 6F 75 72    und sign on your
01BE30:  20 43 50 43 29 2E 20 20 54 72 79 20 6F 75 74 20     CPC).  Try out 
01BE40:  74 68 65 20 66 6F 6C 6C 6F 77 69 6E 67 20 6F 6E    the following on
01BE50:  20 79 6F 75 72 20 63 6F 6D 70 75 74 65 72 3A 0D     your computer:.
01BE60:  0A 0D 0A 20 20 20 20 20 46 4F 52 20 6D 70 3D 30    ...     FOR mp=0
01BE70:  20 54 4F 20 36 3A 50 52 49 4E 54 20 42 49 4E 24     TO 6:PRINT BIN$
01BE80:  28 32 5E 6D 70 29 3A 4E 45 58 54 0D 0A 0D 0A 20    (2^mp):NEXT.... 
01BE90:  20 20 54 68 69 73 20 70 72 69 6E 74 73 20 75 70      This prints up
01BEA0:  20 32 5E 6D 70 20 69 6E 20 62 69 6E 61 72 79 2C     2^mp in binary,
01BEB0:  20 61 6E 64 20 79 6F 75 20 77 69 6C 6C 20 20 73     and you will  s
01BEC0:  65 65 20 74 68 61 74 20 61 73 20 6D 70 20 67 6F    ee that as mp go
01BED0:  65 73 20 66 72 6F 6D 20 30 20 74 6F 0D 0A 20 20    es from 0 to..  
01BEE0:  20 36 2C 20 74 68 65 20 62 69 6E 61 72 79 20 66     6, the binary f
01BEF0:  6F 72 6D 20 6F 66 20 32 5E 6D 70 20 67 6F 65 73    orm of 2^mp goes
01BF00:  3D 30 0D 0A 0D 0A 20 20 20 54 68 69 73 20 70 72    =0....   This pr
01BF10:  6F 76 69 64 65 73 20 74 68 65 20 6D 65 63 68 61    ovides the mecha
01BF20:  6E 69 73 6D 20 74 6F 20 69 67 6E 6F 72 65 20 63    nism to ignore c
01BF30:  65 72 74 61 69 6E 20 6B 65 79 73 2E 20 20 49 66    ertain keys.  If
01BF40:  20 6B 66 20 69 73 20 73 65 74 20 74 6F 20 34 20     kf is set to 4 
01BF50:  28 6F 72 0D 0A 20 20 20 31 30 30 20 69 6E 20 62    (or..   100 in b
01BF60:  69 6E 61 72 79 29 2C 20 74 68 65 6E 20 6F 6E 6C    inary), then onl
01BF70:  79 20 74 68 65 20 22 66 69 22 20 20 6B 65 79 20    y the "fi"  key 
01BF80:  20 77 69 6C 6C 20 63 61 75 73 65 20 74 68 65 20     will cause the 
01BF90:  73 75 62 72 6F 75 74 69 6E 65 20 74 6F 20 65 6E    subroutine to en
01BFA0:  64 2E 0D 0A 20 20 20 54 68 65 20 62 69 74 73 20    d...   The bits 
01BFB0:  6F 66 20 6B 70 20 61 72 65 20 73 65 74 20 69 6E    of kp are set in
01BFC0:  20 20 6C 69 6E 65 20 20 31 30 30 36 20 61 63 63      line  1006 acc
01BFD0:  6F 72 64 69 6E 67 20 74 6F 20 77 68 69 63 68 20    ording to which 
01BFE0:  6B 65 79 73 20 61 72 65 20 70 72 65 73 73 65 64    keys are pressed
01BFF0:  2E 0D 0A 20 20 20 53 75 70 70 6F 73 65 20 74 68    ...   Suppose th
01C000:  65 20 22 6C 65 22 20 61 6E 64 20 22 72 69 22 20    e "le" and "ri" 
01C010:  20 6B 65 79 73 20 20 77 65 72 65 20 20 70 72 65     keys  were  pre
01C020:  73 73 65 64 3B 20 20 6B 70 20 20 77 6F 75 6C 64    ssed;  kp  would
01C030:  20 20 62 65 20 33 2C 20 6F 72 20 31 31 20 69 6E      be 3, or 11 in
01C040:  0D 0A 20 20 20 62 69 6E 61 72 79 2E 0D 0A 0D 0A    ..   binary.....
01C050:  20 20 20 20 20 20 20 20 20 20 20 30 31 31 20 20               011  
01C060:  20 20 6B 70 0D 0A 20 20 20 20 20 20 20 20 20 20      kp..          
01C070:  20 31 30 30 20 20 20 20 6B 66 0D 0A 20 20 20 20     100    kf..    
01C080:  20 20 20 20 20 20 20 2D 2D 2D 0D 0A 20 20 20 20           ---..    
01C090:  20 20 20 20 20 20 20 30 30 30 20 20 20 20 6B 70           000    kp
01C0A0:  20 41 4E 44 20 6B 66 0D 0A 0D 0A 20 20 20 54 68     AND kf....   Th
01C0B0:  65 20 70 72 65 73 73 69 6E 67 20 6F 66 20 74 68    e pressing of th
01C0C0:  65 20 22 6C 65 22 20 61 6E 64 20 22 72 69 22 20    e "le" and "ri" 
01C0D0:  6B 65 79 73 20 69 73 20 6D 61 73 6B 65 64 20 6F    keys is masked o
01C0E0:  75 74 20 62 79 20 74 68 65 20 6B 65 79 20 66 6C    ut by the key fl
01C0F0:  61 67 73 2C 20 6B 66 2C 0D 0A 20 20 20 67 69 76    ags, kf,..   giv
01C100:  20 66 72 6F 6D 20 20 31 20 20 74 6F 20 31 30 2C     from  1  to 10,
01C110:  20 31 30 30 2C 20 31 30 30 30 20 61 6E 64 20 73     100, 1000 and s
01C120:  6F 20 6F 6E 2E 20 20 57 68 65 6E 0D 0A 20 20 20    o on.  When..   
01C130:  74 68 69 73 20 76 61 6C 75 65 20 69 73 20 41 4E    this value is AN
01C140:  44 65 64 20 77 69 74 68 20 6D 66 2C 20 69 74 20    Ded with mf, it 
01C150:  20 68 61 73 20 20 74 68 65 20 65 66 66 65 63 74     has  the effect
01C160:  20 6F 66 20 70 69 63 6B 69 6E 67 20 6F 75 74 20     of picking out 
01C170:  74 68 65 20 62 69 6E 61 72 79 0D 0A 20 20 20 64    the binary..   d
01C180:  69 67 69 74 20 6F 66 20 6D 66 20 61 70 70 72 6F    igit of mf appro
01C190:  70 72 69 61 74 65 20 74 6F 20 74 68 61 74 20 6D    priate to that m
01C1A0:  65 6E 75 20 70 6F 73 69 74 69 6F 6E 20 61 6E 64    enu position and
01C1B0:  20 69 67 6E 6F 72 69 6E 67 20 61 6C 6C 20 74 68     ignoring all th
01C1C0:  65 20 6F 74 68 65 72 73 2E 0D 0A 20 20 20 54 68    e others...   Th
01C1D0:  75 73 20 22 32 5E 6D 70 20 41 4E 44 20 6D 66 22    us "2^mp AND mf"
01C1E0:  20 69 73 20 7A 65 72 6F 20 77 68 65 6E 20 77 65     is zero when we
01C1F0:  20 61 72 65 20 61 6C 6C 6F 77 65 64 20 74 6F 20     are allowed to 
01C200:  73 74 6F 70 20 6F 6E 20 61 20 6D 65 6E 75 20 70    stop on a menu p
01C210:  6F 73 69 74 69 6F 6E 2C 0D 0A 20 20 20 61 6E 64    osition,..   and
01C220:  20 67 72 65 61 74 65 72 20 74 68 61 6E 20 7A 65     greater than ze
01C230:  72 6F 20 77 68 65 6E 20 77 65 20 6E 65 65 64 20    ro when we need 
01C240:  74 6F 20 72 6F 6C 6C 20 6F 76 65 72 20 69 74 2E    to roll over it.
01C250:  0D 0A 0D 0A 20 20 20 20 20 49 66 20 79 6F 75 20    ....     If you 
01C260:  6C 6F 6F 6B 20 61 74 20 6C 69 6E 65 20 31 30 30    look at line 100
01C270:  32 20 74 68 6F 75 67 68 2C 20 20 79 6F 75 20 20    2 though,  you  
01C280:  77 69 6C 6C 20 73 65 65 20 74 68 61 74 20 74 68    will see that th
01C290:  65 20 57 48 49 4C 45 20 73 74 61 74 65 6D 65 6E    e WHILE statemen
01C2A0:  74 0D 0A 20 20 20 69 73 20 61 20 6C 69 74 74 6C    t..   is a littl
01C2B0:  65 20 6D 6F 72 65 20 63 6F 6D 70 6C 69 63 61 74    e more complicat
01C2C0:  65 64 2E 20 20 54 68 65 20 20 62 69 74 20 20 77    ed.  The  bit  w
01C2D0:  65 20 20 68 61 76 65 20 6A 75 73 74 20 6C 6F 6F    e  have just loo
01C2E0:  6B 65 64 20 61 74 20 6B 65 65 70 73 20 74 68 65    ked at keeps the
01C2F0:  0D 0A 20 20 20 6C 6F 6F 70 20 67 6F 69 6E 67 20    ..   loop going 
01C300:  69 6E 67 20 61 20 72 65 73 75 6C 74 20 6F 66 20    ing a result of 
01C310:  7A 65 72 6F 2E 20 20 49 74 20 69 73 20 65 61 73    zero.  It is eas
01C320:  79 20 20 74 6F 20 20 73 65 65 20 74 68 61 74 20    y  to  see that 
01C330:  74 68 65 20 6C 6F 6F 70 20 77 69 6C 6C 20 6F 6E    the loop will on
01C340:  6C 79 20 63 6F 6D 65 0D 0A 20 20 20 74 6F 20 61    ly come..   to a
01C350:  6E 20 65 6E 64 20 77 68 65 6E 20 74 68 65 20 22    n end when the "
01C360:  66 69 22 20 6B 65 79 20 69 73 20 70 72 65 73 73    fi" key is press
01C370:  65 64 2E 0D 0A 0D 0A 20 20 20 20 20 4D 61 73 6B    ed.....     Mask
01C380:  69 6E 67 20 6F 75 74 20 62 69 74 2D 73 69 67 6E    ing out bit-sign
01C390:  69 66 69 63 61 6E 74 20 76 61 6C 75 65 73 20 20    ificant values  
01C3A0:  75 73 69 6E 67 20 20 74 68 65 20 20 41 4E 44 20    using  the  AND 
01C3B0:  20 6F 70 65 72 61 74 6F 72 20 20 69 73 20 61 20     operator  is a 
01C3C0:  76 65 72 79 0D 0A 20 20 20 69 6D 70 6F 72 74 61    very..   importa
01C3D0:  6E 74 20 74 65 63 68 6E 69 71 75 65 2C 20 65 73    nt technique, es
01C3E0:  70 65 63 69 61 6C 6C 79 20 69 66 20 79 6F 75 20    pecially if you 
01C3F0:  61 72 65 20 74 72 79 69 6E 67 20 74 6F 20 73 71    are trying to sq
01C400:  75 65 65 7A 65 20 6C 61 72 67 65 20 61 6D 6F 75    ueeze large amou
01C410:  6E 74 73 0D 0A 20 20 20 6F 66 20 69 6E 66 6F 72    nts..   of infor
01C420:  6D 61 74 69 6F 6E 20 69 6E 74 6F 20 6D 65 6D 6F    mation into memo
01C430:  72 79 20 65 66 66 69 63 69 65 6E 74 6C 79 2E 0D    ry efficiently..
01C440:  0A 0D 0A 20 20 20 50 55 42 20 43 52 41 57 4C 0D    ...   PUB CRAWL.
01C450:  0A 20 20 20 54 68 65 20 73 6D 61 6C 6C 65 72 20    .   The smaller 
01C460:  6C 6F 6F 70 20 69 6E 20 6C 69 6E 65 73 20 31 30    loop in lines 10
01C470:  30 32 20 74 6F 20 31 30 30 34 20 20 6D 61 6B 65    02 to 1004  make
01C480:  73 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20    s sure that the 
01C490:  6D 65 6E 75 20 62 61 72 20 6D 6F 76 65 73 0D 0A    menu bar moves..
01C4A0:  20 20 20 77 68 65 6E 20 74 68 65 20 75 73 65 72       when the user
01C4B0:  20 70 72 65 73 73 65 73 20 74 68 65 20 22 75 70     presses the "up
01C4C0:  22 20 6F 72 20 22 64 6F 77 22 20 6B 65 79 73 2C    " or "dow" keys,
01C4D0:  20 61 6E 64 20 6B 65 65 70 73 20 6F 6E 20 6D 6F     and keeps on mo
01C4E0:  76 69 6E 67 20 74 68 65 20 6D 65 6E 75 0D 0A 20    ving the menu.. 
01C4F0:  20 20 62 61 72 20 69 6E 20 74 68 65 20 73 61 6D      bar in the sam
01C500:  75 6E 74 69 6C 20 77 65 20 61 72 65 20 6F 76 65    until we are ove
01C510:  72 20 61 20 20 6D 65 6E 75 20 20 69 74 65 6D 20    r a  menu  item 
01C520:  74 68 61 74 20 69 73 20 73 65 6C 65 63 74 61 62    that is selectab
01C530:  6C 65 2C 20 62 75 74 20 77 65 20 6E 65 65 64 0D    le, but we need.
01C540:  0A 20 20 20 61 6E 6F 74 68 65 72 20 70 61 72 74    .   another part
01C550:  20 74 6F 20 67 65 74 20 74 68 65 20 6D 65 6E 75     to get the menu
01C560:  20 62 61 72 20 6D 6F 76 69 6E 67 20 20 69 6E 20     bar moving  in 
01C570:  74 68 65 20 66 69 72 73 74 20 70 6C 61 63 65 2E    the first place.
01C580:  20 20 4C 69 6E 65 20 31 30 30 35 20 69 73 0D 0A      Line 1005 is..
01C590:  20 20 20 77 68 65 72 65 20 74 68 65 20 75 70 20       where the up 
01C5A0:  61 6E 64 20 64 6F 77 6E 20 6B 65 79 73 20 61 72    and down keys ar
01C5B0:  65 20 20 63 68 65 63 6B 65 64 2E 20 20 54 68 65    e  checked.  The
01C5C0:  20 6D 64 20 76 61 72 69 61 62 6C 65 20 69 73 20     md variable is 
01C5D0:  73 65 74 20 61 63 63 6F 72 64 69 6E 67 0D 0A 20    set according.. 
01C5E0:  20 20 74 6F 20 74 68 65 20 64 69 72 65 63 74 69      to the directi
01C5F0:  6F 6E 2C 20 61 6E 64 20 74 68 65 6E 20 6D 7A 20    on, and then mz 
01C600:  69 73 20 70 75 74 20 65 71 75 61 6C 20 20 74 6F    is put equal  to
01C610:  20 6D 64 2E 20 20 49 66 20 75 70 20 6F 72 20 64     md.  If up or d
01C620:  6F 77 6E 20 68 61 73 20 62 65 65 6E 0D 0A 20 20    own has been..  
01C630:  20 70 72 65 73 73 65 64 2C 20 6D 64 20 61 6E 64     pressed, md and
01C640:  20 6D 7A 20 77 69 6C 6C 20 62 65 20 31 20 20 6F     mz will be 1  o
01C650:  72 20 20 2D 31 2C 20 20 73 6F 20 20 6D 7A 20 77    r  -1,  so  mz w
01C660:  69 6C 6C 20 62 65 20 74 72 75 65 2E 20 20 57 68    ill be true.  Wh
01C670:  65 6E 20 74 68 65 20 6D 61 69 6E 0D 0A 20 20 20    en the main..   
01C680:  6C 6F 6F 70 20 67 65 74 73 20 62 61 63 6B 20 74    loop gets back t
01C690:  6F 20 6C 69 6E 65 20 31 30 30 32 20 74 68 69 73    o line 1002 this
01C6A0:  20 6D 65 61 6E 73 20 74 68 61 74 20 74 68 65 20     means that the 
01C6B0:  57 48 49 4C 45 20 63 6F 6E 64 69 74 69 6F 6E 20    WHILE condition 
01C6C0:  74 68 65 72 65 20 77 69 6C 6C 0D 0A 20 20 20 62    there will..   b
01C6D0:  65 20 74 72 75 65 2C 20 61 6E 64 20 42 41 53 49    e true, and BASI
01C6E0:  43 20 77 69 6C 6C 20 65 78 65 63 75 74 65 20 74    C will execute t
01C6F0:  68 65 20 6C 6F 6F 70 20 74 68 61 74 20 6D 6F 76    he loop that mov
01C700:  65 20 64 69 72 65 63 74 69 6F 6E 20 20 6F 76 65    e direction  ove
01C710:  72 20 20 61 6E 79 20 20 6D 61 73 6B 65 64 20 20    r  any  masked  
01C720:  6F 75 74 20 20 6D 65 6E 75 20 65 6E 74 72 69 65    out  menu entrie
01C730:  73 2E 20 20 59 6F 75 20 77 69 6C 6C 0D 0A 20 20    s.  You will..  
01C740:  20 72 65 6D 65 6D 62 65 72 20 74 68 65 20 65 78     remember the ex
01C750:  61 6D 70 6C 65 20 6C 61 73 74 20 6D 6F 6E 74 68    ample last month
01C760:  20 66 6F 72 20 20 6F 72 64 65 72 69 6E 67 20 57     for  ordering W
01C770:  41 43 43 49 20 62 61 63 6B 20 69 73 73 75 65 73    ACCI back issues
01C780:  2C 20 77 68 65 72 65 20 74 68 65 0D 0A 20 20 20    , where the..   
01C790:  6D 65 6E 75 20 62 61 72 20 64 69 64 20 6E 6F 74    menu bar did not
01C7A0:  20 73 74 6F 70 20 6F 76 65 72 20 74 68 65 20 69     stop over the i
01C7B0:  73 73 75 65 73 20 74 68 61 74 20 77 65 72 65 20    ssues that were 
01C7C0:  6F 75 74 20 6F 66 20 73 74 6F 63 6B 2E 0D 0A 0D    out of stock....
01C7D0:  0A 20 20 20 54 68 65 20 69 6E 66 6F 72 6D 61 74    .   The informat
01C7E0:  69 6F 6E 20 61 73 20 74 6F 20 77 68 69 63 68 20    ion as to which 
01C7F0:  6D 65 6E 75 20 69 74 65 6D 73 20 20 61 72 65 20    menu items  are 
01C800:  20 6F 75 74 20 20 6F 66 20 62 6F 75 6E 64 73 20     out  of bounds 
01C810:  69 73 20 68 65 6C 64 20 69 6E 20 74 68 65 0D 0A    is held in the..
01C820:  20 20 20 70 61 72 61 6D 65 74 65 72 20 22 6D 66       parameter "mf
01C830:  22 2E 20 20 54 68 69 73 20 69 73 20 61 6C 73 6F    ".  This is also
01C840:  20 61 20 20 22 62 69 74 20 20 73 69 67 6E 69 66     a  "bit  signif
01C850:  69 63 61 6E 74 22 20 76 61 6C 75 65 2C 20 77 68    icant" value, wh
01C860:  69 63 68 20 6D 65 61 6E 73 20 79 6F 75 0D 0A 20    ich means you.. 
01C870:  20 20 68 61 76 65 20 74 6F 20 6C 6F 6F 6B 20 61      have to look a
01C880:  74 20 69 74 20 69 6E 20 62 69 6E 61 72 79 20 74    t it in binary t
01C890:  6F 20 20 6D 61 6B 65 20 20 61 6E 79 20 20 73 65    o  make  any  se
01C8A0:  6E 73 65 20 6F 66 20 69 74 2E 20 20 54 68 65 20    nse of it.  The 
01C8B0:  76 61 6C 75 65 20 6F 66 20 74 68 65 0D 0A 20 20    value of the..  
01C8C0:  20 6C 65 61 73 74 20 73 69 67 6E 69 66 69 63 61     least significa
01C8D0:  6E 74 20 62 69 74 20 28 74 68 65 20 6F 6E 65 20    nt bit (the one 
01C8E0:  6F 6E 20 74 68 65 20 20 72 69 67 68 74 29 20 20    on the  right)  
01C8F0:  72 65 66 65 72 73 20 74 6F 20 74 68 65 20 66 69    refers to the fi
01C900:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
01C910:  18 00 01 00 02 09 4E E5 18 00 C3 02 00 00 00 02    ......N.........
01C920:  18 00 C8 02 00 00 00 02 18 00 C4 02 00 00 00 02    ................
01C930:  18 00 C9 02 00 00 00 02 18 00 C5 02 00 00 00 02    ................
01C940:  18 00 C1 02 00 00 00 02 18 00 C6 02 00 00 00 02    ................
01C950:  18 00 C2 02 00 00 00 02 18 00 C7 02 00 00 00 02    ................
01C960:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01C970:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01C980:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01C990:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01C9A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01C9B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01C9C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01C9D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01C9E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01C9F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01CA00:  0A 20 20 20 57 65 20 75 73 65 20 74 68 65 20 75    .   We use the u
01CA10:  73 65 66 75 6C 20 4D 4F 44 20 6F 70 65 72 61 74    seful MOD operat
01CA20:  6F 72 20 69 6E 20 20 6F 72 64 65 72 20 20 74 6F    or in  order  to
01CA30:  20 6D 61 6B 65 20 74 68 65 20 6D 65 6E 75 20 62     make the menu b
01CA40:  61 72 20 6C 6F 6F 70 20 72 6F 75 6E 64 2E 0D 0A    ar loop round...
01CA50:  20 20 20 57 68 65 6E 20 79 6F 75 20 67 65 74 20       When you get 
01CA60:  74 6F 20 74 68 65 20 62 6F 74 74 6F 6D 20 6F 66    to the bottom of
01CA70:  20 20 74 68 65 20 20 6D 65 6E 75 2C 20 20 70 72      the  menu,  pr
01CA80:  65 73 73 69 6E 67 20 74 68 65 20 64 6F 77 6E 20    essing the down 
01CA90:  6B 65 79 20 77 69 6C 6C 20 74 61 6B 65 0D 0A 20    key will take.. 
01CAA0:  20 20 74 68 65 20 6D 65 6E 75 20 62 61 72 20 72      the menu bar r
01CAB0:  69 67 68 74 20 74 6F 20 74 68 65 20 74 6F 70 20    ight to the top 
01CAC0:  6F 66 20 74 68 65 20 6D 65 6E 75 20 61 67 61 69    of the menu agai
01CAD0:  6E 2C 20 61 6E 64 20 76 69 63 65 20 76 65 72 73    n, and vice vers
01CAE0:  61 2E 0D 0A 0D 0A 20 20 20 20 20 4F 6E 65 20 77    a.....     One w
01CAF0:  61 79 20 6F 66 20 77 72 69 74 69 6E 67 20 74 68    ay of writing th
01CB00:  69 73 20 77 6F 75 6C 64 20 62 65 20 73 6F 6D 65    is would be some
01CB10:  74 68 69 6E 67 20 6C 69 6B 65 20 74 68 65 20 66    thing like the f
01CB20:  6F 6C 6C 6F 77 69 6E 67 3A 0D 0A 0D 0A 20 20 20    ollowing:....   
01CB30:  20 20 6D 70 3D 6D 70 2B 6D 64 0D 0A 20 20 20 20      mp=mp+md..    
01CB40:  20 49 46 20 6D 70 3D 6D 63 68 20 54 48 45 4E 20     IF mp=mch THEN 
01CB50:  6D 70 3D 30 0D 0A 20 20 20 20 20 49 46 20 6D 70    mp=0..     IF mp
01CB60:  3D 2D 31 20 54 48 45 4E 20 6D 70 3D 6D 63 68 2D    =-1 THEN mp=mch-
01CB70:  31 0D 0A 0D 0A 20 20 20 62 75 74 20 75 73 69 6E    1....   but usin
01CB80:  67 20 74 68 65 20 4D 4F 44 20 6F 70 65 72 61 74    g the MOD operat
01CB90:  6F 72 20 77 65 20 68 61 76 65 20 6D 61 6E 61 67    or we have manag
01CBA0:  65 64 20 74 6F 20 63 6F 6E 64 65 6E 73 65 20 69    ed to condense i
01CBB0:  74 20 74 6F 3A 0D 0A 0D 0A 20 20 20 20 20 6D 70    t to:....     mp
01CBC0:  3D 28 6D 70 2B 6D 63 68 2B 6D 64 29 20 4D 4F 44    =(mp+mch+md) MOD
01CBD0:  20 6D 63 68 0D 0A 0D 0A 20 20 20 48 6F 77 20 64     mch....   How d
01CBE0:  6F 65 73 20 74 68 69 73 20 77 6F 72 6B 3F 20 20    oes this work?  
01CBF0:  49 66 20 79 6F 75 20 6C 6F 6F 6B 20 20 75 70 20    If you look  up 
01CC00:  68 20 20 20 20 20 20 20 20 20 20 20 4E 75 6D 62    h           Numb
01CC10:  65 72 20 6F 66 20 63 68 6F 69 63 65 73 20 6F 6E    er of choices on
01CC20:  20 74 68 65 20 6D 65 6E 75 0D 0A 20 20 20 6D 70     the menu..   mp
01CC30:  20 20 20 20 20 20 20 20 20 20 20 20 4D 65 6E 75                Menu
01CC40:  20 62 61 72 20 70 6F 73 69 74 69 6F 6E 20 28 7A     bar position (z
01CC50:  65 72 6F 20 66 6F 72 20 66 69 72 73 74 20 69 74    ero for first it
01CC60:  65 6D 20 6F 6E 20 6D 65 6E 75 29 0D 0A 20 20 20    em on menu)..   
01CC70:  6D 66 20 20 20 20 20 20 20 20 20 20 20 20 4D 65    mf            Me
01CC80:  6E 75 20 66 6C 61 67 73 20 28 73 65 65 20 6C 61    nu flags (see la
01CC90:  73 74 20 6D 6F 6E 74 68 29 0D 0A 20 20 20 6D 64    st month)..   md
01CCA0:  65 20 20 20 20 20 20 20 20 20 20 20 4D 65 6E 75    e           Menu
01CCB0:  20 64 65 6C 61 79 0D 0A 20 20 20 6D 63 6F 6C 20     delay..   mcol 
01CCC0:  20 20 20 20 20 20 20 20 20 50 65 6E 20 74 6F 20             Pen to 
01CCD0:  75 73 65 20 66 6F 72 20 74 68 65 20 6D 65 6E 75    use for the menu
01CCE0:  20 62 61 72 0D 0A 20 20 20 6D 73 70 20 20 20 20     bar..   msp    
01CCF0:  20 20 20 20 20 20 20 56 65 72 74 69 63 61 6C 20           Vertical 
01CD00:  73 70 61 63 69 6E 67 20 6F 66 20 6D 65 6E 75 20    spacing of menu 
01CD10:  69 74 65 6D 73 20 69 6E 20 67 72 61 70 68 69 63    items in graphic
01CD20:  73 20 63 6F 6F 72 64 69 6E 61 74 65 73 0D 0A 20    s coordinates.. 
01CD30:  20 20 6D 78 2C 20 6D 79 20 20 20 20 20 20 20 20      mx, my        
01CD40:  47 72 61 70 68 69 63 73 20 63 6F 6F 72 64 69 6E    Graphics coordin
01CD50:  61 74 65 73 20 6F 66 20 74 6F 70 20 6C 65 66 74    ates of top left
01CD60:  20 6F 66 20 6D 65 6E 75 0D 0A 20 20 20 6D 62 68     of menu..   mbh
01CD70:  20 20 20 20 20 20 20 20 20 20 20 4D 65 6E 75 20               Menu 
01CD80:  62 61 72 20 68 65 69 67 68 74 20 69 6E 20 67 72    bar height in gr
01CD90:  61 70 68 69 63 73 20 63 6F 6F 72 64 69 6E 61 74    aphics coordinat
01CDA0:  65 73 0D 0A 20 20 20 6D 62 6C 20 20 20 20 20 20    es..   mbl      
01CDB0:  20 20 20 20 20 4D 65 6E 75 20 62 61 72 20 6C 65         Menu bar le
01CDC0:  6E 67 74 68 20 69 6E 20 67 72 61 70 68 69 63 73    ngth in graphics
01CDD0:  20 63 6F 6F 72 64 69 6E 61 74 65 73 0D 0A 20 20     coordinates..  
01CDE0:  20 75 70 2C 20 64 6F 77 20 20 20 20 20 20 20 49     up, dow       I
01CDF0:  4E 4B 45 59 20 6E 75 6D 62 65 72 73 20 6F 66 20    NKEY numbers of 
01CE00:  20 4D 4F 44 20 20 69 6E 20 79 6F 75 72 20 6D 61     MOD  in your ma
01CE10:  6E 75 61 6C 20 28 64 6F 6E 27 74 20 62 6F 74 68    nual (don't both
01CE20:  65 72 20 69 66 0D 0A 20 20 20 79 6F 75 20 68 61    er if..   you ha
01CE30:  76 65 20 61 6E 20 6F 72 69 67 69 6E 61 6C 20 43    ve an original C
01CE40:  50 43 20 34 36 34 20 6D 61 6E 75 61 6C 20 2D 20    PC 464 manual - 
01CE50:  20 74 68 65 79 20 66 6F 72 67 6F 74 20 74 6F 20     they forgot to 
01CE60:  70 75 74 20 69 74 20 69 6E 29 2C 20 79 6F 75 20    put it in), you 
01CE70:  77 69 6C 6C 0D 0A 20 20 20 66 69 6E 64 20 69 74    will..   find it
01CE80:  20 64 65 73 63 72 69 62 65 64 20 61 73 20 20 72     described as  r
01CE90:  65 74 75 72 6E 69 6E 67 20 20 74 68 65 20 20 72    eturning  the  r
01CEA0:  65 6D 61 69 6E 64 65 72 20 20 61 66 74 65 72 20    emainder  after 
01CEB0:  20 64 69 76 69 64 69 6E 67 20 74 68 65 20 66 69     dividing the fi
01CEC0:  72 73 74 0D 0A 20 20 20 61 72 67 75 6D 65 6E 74    rst..   argument
01CED0:  20 62 79 20 74 68 65 20 73 65 63 6F 6E 64 20 61     by the second a
01CEE0:  72 67 75 6D 65 6E 74 2E 20 20 49 6E 20 20 6F 75    rgument.  In  ou
01CEF0:  72 20 20 63 61 73 65 20 20 69 74 20 69 73 20 74    r  case  it is t
01CF00:  68 65 20 72 65 6D 61 69 6E 64 65 72 20 61 66 74    he remainder aft
01CF10:  65 72 0D 0A 20 20 20 64 69 76 69 64 69 6E 67 20    er..   dividing 
01CF20:  6D 70 2B 6D 63 68 2B 6D 64 20 62 79 20 6D 63 68    mp+mch+md by mch
01CF30:  2E 20 20 41 6E 6F 74 68 65 72 20 77 61 79 20 74    .  Another way t
01CF40:  6F 20 20 74 68 69 6E 6B 20 20 6F 66 20 69 74 20    o  think  of it 
01CF50:  69 73 20 74 68 61 74 20 4D 4F 44 20 6B 65 65 70    is that MOD keep
01CF60:  73 0D 0A 20 20 20 6F 6E 20 73 75 62 74 72 61 63    s..   on subtrac
01CF70:  74 69 6E 67 20 6D 63 68 20 66 72 6F 6D 20 6D 70    ting mch from mp
01CF80:  2B 6D 63 68 2B 6D 64 20 75 6E 74 69 6C 20 69 74    +mch+md until it
01CF90:  20 67 65 74 73 20 61 20 72 65 73 75 6C 74 20 66     gets a result f
01CFA0:  72 6F 6D 20 30 20 74 6F 20 6D 63 68 2D 31 2E 0D    rom 0 to mch-1..
01CFB0:  0A 0D 0A 20 20 20 20 20 53 75 70 70 6F 73 65 20    ...     Suppose 
01CFC0:  74 68 61 74 20 6D 63 68 20 69 73 20 36 2C 20 6D    that mch is 6, m
01CFD0:  65 61 6E 69 6E 67 20 73 69 78 20 6D 65 6E 75 20    eaning six menu 
01CFE0:  20 69 74 65 6D 73 20 6E 75 6D 62 65 72 65 64 20     items numbered 
01CFF0:  66 72 6F 6D 20 30 20 74 6F 20 35 2E 20 20 49 66    from 0 to 5.  If
01D000:  74 68 65 20 75 70 20 61 6E 64 20 64 6F 77 6E 20    the up and down 
01D010:  6B 65 79 73 0D 0A 20 20 20 6C 65 2C 20 72 69 2C    keys..   le, ri,
01D020:  20 66 69 20 20 20 20 49 4E 4B 45 59 20 6E 75 6D     fi    INKEY num
01D030:  62 65 72 73 20 6F 66 20 6F 74 68 65 72 20 6B 65    bers of other ke
01D040:  79 73 20 74 68 61 74 20 74 68 65 20 6D 65 6E 75    ys that the menu
01D050:  20 72 65 73 70 6F 6E 64 73 20 74 6F 2E 0D 0A 20     responds to... 
01D060:  20 20 6B 66 20 20 20 20 20 20 20 20 20 20 20 20      kf            
01D070:  4B 65 79 20 66 6C 61 67 73 20 28 73 65 65 20 6C    Key flags (see l
01D080:  61 73 74 20 6D 6F 6E 74 68 29 0D 0A 0D 0A 20 20    ast month)....  
01D090:  20 56 61 6C 75 65 73 20 72 65 74 75 72 6E 65 64     Values returned
01D0A0:  20 62 79 20 74 68 65 20 72 6F 75 74 69 6E 65 73     by the routines
01D0B0:  3A 0D 0A 0D 0A 20 20 20 6D 70 20 20 20 20 20 20    :....   mp      
01D0C0:  20 20 20 20 20 20 4D 65 6E 75 20 62 61 72 20 70          Menu bar p
01D0D0:  6F 73 69 74 69 6F 6E 20 28 61 73 20 61 62 6F 76    osition (as abov
01D0E0:  65 29 0D 0A 20 20 20 6B 70 20 20 20 20 20 20 20    e)..   kp       
01D0F0:  20 20 20 20 20 4B 65 79 73 20 70 72 65 73 73 65         Keys presse
01D100:  64 20 28 73 65 65 20 6C 61 73 74 20 6D 6F 6E 74    d (see last mont
01D110:  68 29 0D 0A 0D 0A 20 20 20 56 61 72 69 61 62 6C    h)....   Variabl
01D120:  65 73 20 75 73 65 64 20 69 6E 74 65 72 6E 61 6C    es used internal
01D130:  6C 79 20 62 79 20 74 68 65 20 72 6F 75 74 69 6E    ly by the routin
01D140:  65 73 3A 0D 0A 0D 0A 20 20 20 64 65 6C 61 79 0D    es:....   delay.
01D150:  0A 20 20 20 6D 63 0D 0A 20 20 20 6D 64 0D 0A 20    .   mc..   md.. 
01D160:  20 20 6D 7A 0D 0A 0D 0A 0D 0A 20 20 20 4C 69 73      mz......   Lis
01D170:  74 69 6E 67 20 31 3A 0D 0A 0D 0A 20 20 20 31 30    ting 1:....   10
01D180:  30 30 20 6B 70 3D 30 3A 6D 64 3D 31 3A 6D 7A 3D    00 kp=0:md=1:mz=
01D190:  30 0D 0A 20 20 20 31 30 30 31 20 57 48 49 4C 45    0..   1001 WHILE
01D1A0:  20 28 6B 70 20 41 4E 44 20 6B 66 29 3D 30 0D 0A     (kp AND kf)=0..
01D1B0:  20 20 20 31 30 30 32 20 57 48 49 4C 45 20 28 32       1002 WHILE (2
01D1C0:  5E 6D 70 20 41 4E 44 20 6D 66 29 3E 30 20 4F 52    ^mp AND mf)>0 OR
01D1D0:  20 6D 7A 0D 0A 20 20 20 31 30 30 33 20 6D 7A 3D     mz..   1003 mz=
01D1E0:  30 3A 47 4F 53 55 42 20 31 30 31 30 3A 6D 70 3D    0:GOSUB 1010:mp=
01D1F0:  28 6D 70 2B 6D 63 68 2B 6D 64 29 20 4D 4F 44 20    (mp+mch+md) MOD 
01D200:  0D 0A 20 20 20 77 65 20 77 65 72 65 20 6F 6E 20    ..   we were on 
01D210:  74 68 65 20 6C 61 73 74 20 6D 65 6E 75 20 69 74    the last menu it
01D220:  65 6D 20 74 68 65 6D 20 6D 70 20 77 6F 75 6C 64    em them mp would
01D230:  20 62 65 20 35 2E 20 20 50 72 65 73 73 69 6E 67     be 5.  Pressing
01D240:  20 64 6F 77 6E 20 77 6F 75 6C 64 20 73 65 74 0D     down would set.
01D250:  0A 20 20 20 6D 64 20 74 6F 20 31 2C 20 73 6F 20    .   md to 1, so 
01D260:  6D 70 2B 6D 64 20 69 73 20 36 2E 20 20 44 69 76    mp+md is 6.  Div
01D270:  69 64 65 20 74 68 61 74 20 20 62 79 20 6D 63 68    ide that  by mch
01D280:  2C 20 77 68 69 63 68 20 69 73 20 36 20 61 6C 73    , which is 6 als
01D290:  6F 2C 20 61 6E 64 20 69 74 20 67 6F 65 73 0D 0A    o, and it goes..
01D2A0:  20 20 20 65 78 61 63 74 6C 79 20 6F 6E 63 65 2C       exactly once,
01D2B0:  20 73 6F 20 74 68 65 72 65 20 69 73 20 20 6E 6F     so there is  no
01D2C0:  20 20 72 65 6D 61 69 6E 64 65 72 2E 20 20 20 54      remainder.   T
01D2D0:  68 65 72 65 66 6F 72 65 20 20 74 68 65 20 6E 65    herefore  the ne
01D2E0:  77 20 76 61 6C 75 65 20 6F 66 20 6D 70 0D 0A 20    w value of mp.. 
01D2F0:  20 20 77 69 6C 6C 20 62 65 20 7A 65 72 6F 2C 20      will be zero, 
01D300:  77 68 69 63 68 20 73 69 67 6E 69 66 69 65 73 20    which signifies 
01D310:  74 68 65 20 74 6F 70 20 69 74 65 6D 20 6F 6E 20    the top item on 
01D320:  74 68 65 20 6D 65 6E 75 2E 0D 0A 0D 0A 20 20 20    the menu.....   
01D330:  20 20 4C 65 74 20 75 73 20 74 72 79 20 67 6F 69      Let us try goi
01D340:  6E 67 20 75 70 20 20 66 72 6F 6D 20 20 74 68 65    ng up  from  the
01D350:  20 20 74 6F 70 20 20 6D 65 6E 75 20 20 69 74 65      top  menu  ite
01D360:  6D 2E 20 20 54 68 65 20 6D 65 6E 75 20 70 6F 73    m.  The menu pos
01D370:  69 74 69 6F 6E 2C 20 6D 70 2C 0D 0A 20 20 20 73    ition, mp,..   s
01D380:  74 61 72 74 73 20 61 73 20 7A 65 72 6F 20 74 68    tarts as zero th
01D390:  69 73 20 20 74 69 6D 65 2E 20 20 20 47 6F 69 6E    is  time.   Goin
01D3A0:  67 20 20 75 70 20 20 74 72 61 6E 73 6C 61 74 65    g  up  translate
01D3B0:  73 20 20 69 6E 74 6F 20 73 75 62 74 72 61 63 74    s  into subtract
01D3C0:  69 6E 67 20 31 2C 20 73 6F 0D 0A 20 20 20 6D 70    ing 1, so..   mp
01D3D0:  2B 6D 64 20 69 73 20 2D 31 2E 20 20 54 68 65 20    +md is -1.  The 
01D3E0:  6F 6E 6C 79 20 74 72 6F 75 62 6C 65 20 69 73 20    only trouble is 
01D3F0:  74 68 61 74 20 69 66 20 79 6F 75 20 74 68 65 6E    that if you then
01D400:  20 75 73 20 20 77 68 65 6E 20 20 61 20 6B 65 79     us  when  a key
01D410:  20 68 61 73 20 62 65 65 6E 0D 0A 20 20 20 70 72     has been..   pr
01D420:  65 73 73 65 64 20 74 6F 20 74 72 69 67 67 65 72    essed to trigger
01D430:  20 74 68 65 20 6C 6F 6F 70 20 69 6E 20 20 6C 69     the loop in  li
01D440:  6E 65 73 20 20 31 30 30 32 20 20 74 6F 20 20 31    nes  1002  to  1
01D450:  30 30 34 20 61 6E 64 20 73 65 74 20 74 68 65 20    004 and set the 
01D460:  6D 65 6E 75 20 62 61 72 0D 0A 20 20 20 6D 6F 76    menu bar..   mov
01D470:  69 6E 67 2E 20 20 57 65 20 61 6C 73 6F 20 6E 65    ing.  We also ne
01D480:  65 64 20 74 6F 20 72 65 73 65 74 20 74 68 61 74    ed to reset that
01D490:  20 20 74 72 69 67 67 65 72 20 20 74 6F 20 7A 65      trigger  to ze
01D4A0:  72 6F 20 6F 72 20 65 6C 73 65 20 74 68 65 20 6D    ro or else the m
01D4B0:  65 6E 75 20 62 61 72 0D 0A 20 20 20 77 69 6C 6C    enu bar..   will
01D4C0:  20 6E 65 76 65 72 20 73 74 6F 70 20 6D 6F 76 69     never stop movi
01D4D0:  6E 67 2E 20 20 20 54 68 65 20 20 74 72 6F 75 62    ng.   The  troub
01D4E0:  6C 65 20 20 69 73 20 20 74 68 61 74 20 20 69 66    le  is  that  if
01D4F0:  20 20 77 65 20 20 75 73 65 64 20 6D 64 20 66 6F      we  used md fo
01D500:  72 20 74 68 69 73 0D 0A 20 20 20 70 75 72 70 6F    r this..   purpo
01D510:  73 65 2C 20 77 65 20 77 6F 75 6C 64 20 67 65 74    se, we would get
01D520:  20 69 6E 20 61 20 6D 65 73 73 20 20 69 66 20 20     in a mess  if  
01D530:  77 65 20 6D 6F 76 65 64 20 6F 6E 74 6F 20 61 20    we moved onto a 
01D540:  70 72 6F 68 69 62 69 74 65 64 20 6D 65 6E 75 20    prohibited menu 
01D550:  69 74 65 6D 2E 0D 0A 20 20 20 48 61 76 69 6E 67    item...   Having
01D560:  20 73 65 74 20 6D 64 20 74 6F 20 7A 65 72 6F 2C     set md to zero,
01D570:  20 74 68 65 20 6E 65 78 74 20 20 74 69 6D 65 20     the next  time 
01D580:  20 74 68 72 6F 75 67 68 20 20 74 68 65 20 6C 6F     through  the lo
01D590:  6F 70 20 77 65 20 77 6F 75 6C 64 20 6E 6F 74 20    op we would not 
01D5A0:  6B 6E 6F 77 0D 0A 20 20 20 77 68 69 63 68 20 64    know..   which d
01D5B0:  69 72 65 63 74 69 6F 6E 20 77 65 20 77 65 72 65    irection we were
01D5C0:  20 6D 65 61 6E 74 20 74 6F 20 62 65 20 20 67 6F     meant to be  go
01D5D0:  69 6E 67 20 69 6E 20 77 68 65 6E 20 73 6B 69 70    ing in when skip
01D5E0:  70 69 6E 67 20 74 68 61 74 20 6D 65 6E 75 20 69    ping that menu i
01D5F0:  74 65 6D 0D 0A 20 20 20 74 6F 20 6D 6F 76 65 20    tem..   to move 
01D600:  20 64 6F 20 4D 4F 44 20 36 2C 20 69 74 20 77 69     do MOD 6, it wi
01D610:  6C 6C 20 73 74 69 6C 6C 0D 0A 20 20 20 62 65 20    ll still..   be 
01D620:  2D 31 2C 20 61 6E 64 20 77 65 20 77 61 6E 74 20    -1, and we want 
01D630:  35 2E 20 20 20 54 68 69 73 20 20 69 73 20 20 77    5.   This  is  w
01D640:  68 79 20 20 74 68 65 20 20 65 78 70 72 65 73 73    hy  the  express
01D650:  69 6F 6E 20 69 6E 20 6C 69 6E 65 20 31 30 30 33    ion in line 1003
01D660:  20 68 61 73 20 61 6E 0D 0A 20 20 20 65 78 74 72     has an..   extr
01D670:  61 20 6D 63 68 20 61 64 64 65 64 20 69 6E 2C 20    a mch added in, 
01D680:  61 73 20 6D 70 2B 6D 63 68 2B 6D 64 20 69 73 20    as mp+mch+md is 
01D690:  35 2C 20 20 61 6E 64 20 77 68 65 6E 20 79 6F 75    5,  and when you
01D6A0:  20 74 61 6B 65 20 74 68 65 20 72 65 6D 61 69 6E     take the remain
01D6B0:  64 65 72 20 6F 6E 0D 0A 20 20 20 64 69 76 69 73    der on..   divis
01D6C0:  69 6F 6E 20 62 79 20 36 2C 20 79 6F 75 20 65 6E    ion by 6, you en
01D6D0:  64 20 75 70 20 77 69 74 68 20 20 35 20 20 61 73    d up with  5  as
01D6E0:  20 20 74 68 65 20 20 61 6E 73 77 65 72 2C 20 77      the  answer, w
01D6F0:  68 69 63 68 20 69 73 20 74 68 65 20 6C 61 73 74    hich is the last
01D700:  20 6D 65 6E 75 0D 0A 20 20 20 69 74 65 6D 2C 20     menu..   item, 
01D710:  6A 75 73 74 20 61 73 20 77 65 20 77 61 6E 74 2E    just as we want.
01D720:  0D 0A 0D 0A 20 20 20 54 48 41 54 27 53 20 41 4C    ....   THAT'S AL
01D730:  4C 20 46 4F 4C 4B 53 0D 0A 20 20 20 54 68 61 74    L FOLKS..   That
01D740:  20 70 72 65 74 74 79 20 77 65 6C 6C 20 77 72 61     pretty well wra
01D750:  70 73 20 75 70 20 74 68 65 20 6D 65 6E 75 20 73    ps up the menu s
01D760:  75 62 72 6F 75 74 69 6E 65 73 2C 20 73 6F 20 6E    ubroutines, so n
01D770:  65 78 74 20 6D 6F 6E 74 68 20 77 65 20 77 69 6C    ext month we wil
01D780:  6C 20 68 61 76 65 0D 0A 20 20 20 61 20 67 6F 20    l have..   a go 
01D790:  61 74 20 73 6F 6D 65 74 68 69 6E 67 20 63 6F 6D    at something com
01D7A0:  70 6C 65 74 65 6C 79 20 64 69 66 66 65 72 65 6E    pletely differen
01D7B0:  74 2E 20 20 20 4A 75 73 74 20 20 74 6F 20 73 68    t.   Just  to sh
01D7C0:  6F 77 20 74 68 61 74 20 6E 6F 20 70 72 6F 67 72    ow that no progr
01D7D0:  61 6D 20 69 73 0D 0A 20 20 20 65 76 65 72 20 70    am is..   ever p
01D7E0:  65 72 66 65 63 74 20 74 68 6F 75 67 68 2C 20 74    erfect though, t
01D7F0:  72 79 20 74 6F 20 73 65 65 20 20 69 66 20 20 79    ry to see  if  y
01D800:  74 6F 20 74 68 65 20 6E 65 78 74 20 6F 6E 65 21    to the next one!
01D810:  0D 0A 0D 0A 0D 0A 20 20 20 57 41 52 50 20 46 41    ......   WARP FA
01D820:  43 54 4F 52 20 4D 43 48 0D 0A 20 20 20 4C 69 6E    CTOR MCH..   Lin
01D830:  65 20 31 30 30 33 20 69 73 20 77 68 65 72 65 20    e 1003 is where 
01D840:  74 68 65 20 6D 65 6E 75 20 62 61 72 20 20 69 73    the menu bar  is
01D850:  20 20 61 63 74 75 61 6C 6C 79 20 6D 6F 76 65 64      actually moved
01D860:  2E 20 20 46 69 72 73 74 20 77 65 20 47 4F 53 55    .  First we GOSU
01D870:  42 20 31 30 31 30 2C 0D 0A 20 20 20 77 68 69 63    B 1010,..   whic
01D880:  68 20 72 65 6D 6F 76 65 73 20 74 68 65 20 62 61    h removes the ba
01D890:  72 20 66 72 6F 6D 20 74 68 65 20 20 73 63 72 65    r from the  scre
01D8A0:  65 6E 2E 20 20 20 54 68 65 6E 20 6D 70 20 69 73    en.   Then mp is
01D8B0:  20 61 64 6A 75 73 74 65 64 2C 20 61 6E 64 20 66     adjusted, and f
01D8C0:  69 6E 61 6C 6C 79 0D 0A 20 20 20 77 65 20 68 61    inally..   we ha
01D8D0:  76 65 20 47 4F 53 55 42 20 31 30 31 30 20 61 67    ve GOSUB 1010 ag
01D8E0:  61 69 6E 20 74 6F 20 70 75 74 20 74 68 65 20 6D    ain to put the m
01D8F0:  65 6E 75 20 62 61 72 20 62 61 63 6B 20 6F 6E 20    enu bar back on 
01D900:  74 68 65 20 73 63 72 65 65 6E 20 69 6E 20 74 68    the screen in th
01D910:  65 20 6E 65 77 0D 0A 20 20 20 70 6F 73 69 74 69    e new..   positi
01D920:  6F 6E 2E 20 20 54 68 65 20 72 65 61 73 6F 6E 20    on.  The reason 
01D930:  20 77 65 20 20 63 61 6E 20 20 75 73 65 20 20 74     we  can  use  t
01D940:  68 65 20 20 73 61 6D 65 20 20 72 6F 75 74 69 6E    he  same  routin
01D950:  65 20 20 66 6F 72 20 20 72 65 6D 6F 76 69 6E 67    e  for  removing
01D960:  20 61 6E 64 0D 0A 20 20 20 72 65 64 69 73 70 6C     and..   redispl
01D970:  61 79 69 6E 67 20 74 68 65 20 6D 65 6E 75 20 62    aying the menu b
01D980:  61 72 20 69 73 20 74 68 61 74 20 77 65 20 61 72    ar is that we ar
01D990:  65 20 75 73 69 6E 67 20 74 68 65 20 58 4F 52 20    e using the XOR 
01D9A0:  67 72 61 70 68 69 63 73 20 6D 6F 64 65 2E 0D 0A    graphics mode...
01D9B0:  0D 0A 20 20 20 20 20 54 68 65 20 61 64 6A 75 73    ..     The adjus
01D9C0:  74 6D 65 6E 74 20 6F 66 20 6D 70 2C 20 74 68 65    tment of mp, the
01D9D0:  20 6D 65 6E 75 20 20 70 6F 73 69 74 69 6F 6E 20     menu  position 
01D9E0:  20 76 61 72 69 61 62 6C 65 2C 20 69 73 20 77 6F     variable, is wo
01D9F0:  72 74 68 20 6C 6F 6F 6B 69 6E 67 20 61 74 2E 0D    rth looking at..
01DA00:  6F 75 20 20 63 61 6E 20 20 66 69 6E 64 20 61 20    ou  can  find a 
01DA10:  77 61 79 20 6F 66 20 72 65 6D 6F 76 69 6E 67 20    way of removing 
01DA20:  66 6F 75 72 0D 0A 20 20 20 63 68 61 72 61 63 74    four..   charact
01DA30:  65 72 73 20 66 72 6F 6D 20 6C 69 6E 65 20 31 30    ers from line 10
01DA40:  30 32 20 69 6E 20 61 20 77 61 79 20 20 77 68 69    02 in a way  whi
01DA50:  63 68 20 64 6F 65 73 20 6E 6F 74 20 61 66 66 65    ch does not affe
01DA60:  63 74 20 74 68 65 20 6F 70 65 72 61 74 69 6F 6E    ct the operation
01DA70:  20 6F 66 0D 0A 20 20 20 74 68 65 20 70 72 6F 67     of..   the prog
01DA80:  72 61 6D 2C 20 6F 72 20 69 66 20 61 6E 79 74 68    ram, or if anyth
01DA90:  69 6E 67 20 73 6C 69 67 68 74 6C 79 20 69 6D 70    ing slightly imp
01DAA0:  72 6F 76 65 73 20 69 74 2E 20 20 57 65 20 6F 6E    roves it.  We on
01DAB0:  6C 79 20 73 70 6F 74 74 65 64 20 69 74 20 77 68    ly spotted it wh
01DAC0:  65 6E 0D 0A 20 20 20 77 72 69 74 69 6E 67 20 74    en..   writing t
01DAD0:  68 69 73 20 66 69 6E 61 6C 20 61 72 74 69 63 6C    his final articl
01DAE0:  65 21 20 20 20 3C 3C 53 69 6E 63 65 20 20 74 68    e!   <<Since  th
01DAF0:  65 6E 20 20 77 65 20 20 68 61 76 65 20 64 69 73    en  we  have dis
01DB00:  63 6F 76 65 72 65 64 20 74 68 61 74 20 74 68 69    covered that thi
01DB10:  73 0D 0A 20 20 20 61 6C 74 65 72 61 74 69 6F 6E    s..   alteration
01DB20:  20 6D 65 61 6E 73 20 74 68 61 74 20 74 68 65 20     means that the 
01DB30:  70 72 6F 67 72 61 6D 20 20 77 6F 75 6C 64 20 20    program  would  
01DB40:  6E 6F 74 20 20 66 75 6E 63 74 69 6F 6E 20 63 6F    not  function co
01DB50:  72 72 65 63 74 6C 79 20 6F 6E 20 61 20 43 50 43    rrectly on a CPC
01DB60:  0D 0A 20 20 20 34 36 34 20 69 66 20 74 68 65 20    ..   464 if the 
01DB70:  6D 65 6E 75 20 68 61 64 20 6D 6F 72 65 20 20 74    menu had more  t
01DB80:  68 61 6E 20 20 38 20 20 69 74 65 6D 73 2C 20 20    han  8  items,  
01DB90:  73 6F 20 20 69 74 20 20 69 73 20 20 62 65 73 74    so  it  is  best
01DBA0:  20 74 6F 20 6C 65 61 76 65 20 69 74 20 61 73 0D     to leave it as.
01DBB0:  0A 20 20 20 70 72 69 6E 74 65 64 21 3E 3E 0D 0A    .   printed!>>..
01DBC0:  0D 0A 0D 0A 0D 0A 20 20 20 54 41 42 4C 45 20 4F    ......   TABLE O
01DBD0:  46 20 56 41 52 49 41 42 4C 45 53 0D 0A 0D 0A 20    F VARIABLES.... 
01DBE0:  20 20 50 61 72 61 6D 65 74 65 72 73 20 74 6F 20      Parameters to 
01DBF0:  73 65 74 20 75 70 3A 0D 0A 0D 0A 20 20 20 6D 63    set up:....   mc
01DC00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
01DC10:  19 00 01 00 02 09 4E E5 19 00 C6 02 00 00 00 02    ......N.........
01DC20:  19 00 C2 02 00 00 00 02 19 00 C7 02 00 00 00 02    ................
01DC30:  19 00 C3 02 00 00 00 02 19 00 C8 02 00 00 00 02    ................
01DC40:  19 00 C4 02 00 00 00 02 19 00 C9 02 00 00 00 02    ................
01DC50:  19 00 C5 02 00 00 00 02 19 00 C1 02 00 00 00 02    ................
01DC60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01DC70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01DC80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01DC90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01DCA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01DCB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01DCC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01DCD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01DCE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01DCF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01DD00:  41 20 47 4F 4F 44 20 44 45 41 4C 0D 0A 20 20 20    A GOOD DEAL..   
01DD10:  54 68 65 20 67 61 6D 65 20 73 74 61 72 74 73 20    The game starts 
01DD20:  62 79 20 47 4F 53 55 42 62 69 6E 67 20 31 30 30    by GOSUBbing 100
01DD30:  30 20 74 6F 20 64 65 61 6C 20 20 74 68 65 20 63    0 to deal  the c
01DD40:  61 72 64 73 20 6F 75 74 20 6F 6E 20 74 68 65 20    ards out on the 
01DD50:  74 61 62 6C 65 2E 20 20 49 6E 0D 0A 20 20 20 6C    table.  In..   l
01DD60:  69 6E 65 20 35 30 20 77 65 20 70 75 74 20 74 68    ine 50 we put th
01DD70:  65 20 70 61 63 6B 20 69 6E 20 6F 72 64 65 72 20    e pack in order 
01DD80:  20 73 6F 20 20 77 65 20 6D 75 73 74 20 73 68 75     so  we must shu
01DD90:  66 66 6C 65 20 74 68 65 20 63 61 72 64 73 20 61    ffle the cards a
01DDA0:  73 20 77 65 6C 6C 20 61 73 0D 0A 20 20 20 64 65    s well as..   de
01DDB0:  61 6C 69 6E 67 2E 20 20 57 65 20 64 6F 20 62 6F    aling.  We do bo
01DDC0:  74 68 20 61 74 20 74 68 65 20 73 61 6D 65 20 20    th at the same  
01DDD0:  74 69 6D 65 20 20 69 6E 20 20 6C 69 6E 65 20 31    time  in  line 1
01DDE0:  30 31 30 2E 20 20 49 6E 20 61 20 6C 6F 6F 70 20    010.  In a loop 
01DDF0:  73 74 61 72 74 69 6E 67 0D 0A 20 20 20 77 69 74    starting..   wit
01DE00:  68 20 6E 3D 35 32 2C 20 77 65 20 70 69 63 6B 20    h n=52, we pick 
01DE10:  61 20 72 61 6E 64 6F 6D 20 63 61 72 64 20 62 65    a random card be
01DE20:  74 77 65 65 6E 20 31 20 61 6E 64 20 6E 20 75 73    tween 1 and n us
01DE30:  69 6E 67 20 74 68 65 20 65 78 70 72 65 73 73 69    ing the expressi
01DE40:  6F 6E 0D 0A 0D 0A 20 20 20 63 64 65 6C 3D 49 4E    on....   cdel=IN
01DE50:  54 28 52 4E 44 2A 6E 2B 31 29 0D 0A 0D 0A 20 20    T(RND*n+1)....  
01DE60:  20 57 65 20 70 75 74 20 74 68 69 73 20 63 61 72     We put this car
01DE70:  64 20 69 6E 20 74 68 65 20 6C 61 79 6F 75 74 20    d in the layout 
01DE80:  20 61 72 72 61 79 20 20 61 74 20 63 28 72 6F 77     array  at c(row
01DE90:  2C 63 6F 6C 29 20 61 6E 64 20 6D 6F 76 65 20 74    ,col) and move t
01DEA0:  68 65 20 6E 74 68 20 63 61 72 64 0D 0A 20 20 20    he nth card..   
01DEB0:  69 6E 20 74 68 65 20 70 61 63 6B 20 74 6F 20 74    in the pack to t
01DEC0:  68 65 20 70 6F 73 69 74 69 6F 6E 20 20 76 61 63    he position  vac
01DED0:  61 74 65 64 20 20 62 79 20 20 6F 75 72 20 63 68    ated  by  our ch
01DEE0:  6F 73 65 6E 20 63 61 72 64 2E 20 20 54 68 69 73    osen card.  This
01DEF0:  20 6C 65 61 76 65 73 20 75 73 0D 0A 20 20 20 77     leaves us..   w
01DF00:  23 50 72 6F 67 72 61 6D 6D 65 72 73 27 20 50 61    #Programmers' Pa
01DF10:  74 63 68 20 39 20 2D 20 57 41 43 43 49 20 31 31    tch 9 - WACCI 11
01DF20:  38 2C 20 4A 61 6E 20 31 39 39 38 2C 20 70 2E 20    8, Jan 1998, p. 
01DF30:  31 38 2D 31 39 0D 0A 20 20 20 50 52 4F 47 52 41    18-19..   PROGRA
01DF40:  4D 4D 45 52 53 27 20 50 41 54 43 48 20 39 0D 0A    MMERS' PATCH 9..
01DF50:  20 20 20 42 79 20 48 69 6C 61 72 79 20 50 68 69       By Hilary Phi
01DF60:  6C 6C 69 70 73 0D 0A 0D 0A 20 20 20 59 65 73 2C    llips....   Yes,
01DF70:  20 74 68 69 73 20 6D 6F 6E 74 68 20 74 68 65 20     this month the 
01DF80:  70 72 6F 6F 66 72 65 61 64 65 72 20 67 65 74 73    proofreader gets
01DF90:  20 61 20 20 67 6F 20 20 61 74 20 77 72 69 74 69     a  go  at writi
01DFA0:  6E 67 20 61 6E 20 61 72 74 69 63 6C 65 2C 20 74    ng an article, t
01DFB0:  6F 20 67 69 76 65 0D 0A 20 20 20 4D 61 74 74 68    o give..   Matth
01DFC0:  65 77 20 61 6E 64 20 53 74 65 70 68 65 6E 20 61    ew and Stephen a
01DFD0:  20 62 72 65 61 6B 2E 20 20 54 68 69 73 20 77 61     break.  This wa
01DFE0:  73 20 20 69 6E 74 65 6E 64 65 64 20 74 6F 20 62    s  intended to b
01DFF0:  65 20 61 20 43 68 72 69 73 74 6D 61 73 20 53 70    e a Christmas Sp
01E000:  65 63 69 61 6C 0D 0A 20 20 20 6F 6E 20 63 61 72    ecial..   on car
01E010:  64 20 67 61 6D 65 73 2C 20 62 75 74 20 57 41 43    d games, but WAC
01E020:  43 49 27 73 20 62 72 69 65 66 20 62 69 2D 6D 6F    CI's brief bi-mo
01E030:  6E 74 68 6C 79 20 73 70 65 6C 6C 20 70 75 74 20    nthly spell put 
01E040:  70 61 69 64 20 74 6F 20 74 68 61 74 20 69 64 65    paid to that ide
01E050:  61 20 73 6F 0D 0A 20 20 20 69 74 20 68 61 73 20    a so..   it has 
01E060:  74 6F 20 62 65 20 61 20 20 4E 65 77 20 20 59 65    to be a  New  Ye
01E070:  61 72 27 73 20 20 73 70 65 63 69 61 6C 20 20 69    ar's  special  i
01E080:  6E 73 74 65 61 64 2E 20 20 49 20 73 74 61 72 74    nstead.  I start
01E090:  65 64 20 70 72 6F 67 72 61 6D 6D 69 6E 67 20 63    ed programming c
01E0A0:  61 72 64 0D 0A 20 20 20 67 61 6D 65 73 20 61 66    ard..   games af
01E0B0:  74 65 72 20 73 65 65 69 6E 67 20 61 20 72 61 74    ter seeing a rat
01E0C0:  68 65 72 20 20 67 6F 6F 64 20 20 70 61 74 69 65    her  good  patie
01E0D0:  6E 63 65 20 20 67 61 6D 65 20 20 6F 6E 20 20 6D    nce  game  on  m
01E0E0:  79 20 73 69 73 74 65 72 27 73 20 4D 61 63 20 61    y sister's Mac a
01E0F0:  6E 64 0D 0A 20 20 20 77 6F 6E 64 65 72 69 6E 67    nd..   wondering
01E100:  69 74 68 20 61 6C 6C 20 74 68 65 20 75 6E 64 65    ith all the unde
01E110:  61 6C 74 20 63 61 72 64 73 20 69 6E 20 74 68 65    alt cards in the
01E120:  20 66 69 72 73 74 20 6E 2D 31 20 70 6F 73 69 74     first n-1 posit
01E130:  69 6F 6E 73 20 69 6E 20 74 68 65 20 70 61 63 6B    ions in the pack
01E140:  2C 20 61 6E 64 20 74 68 65 0D 0A 20 20 20 64 65    , and the..   de
01E150:  61 6C 74 20 6F 75 74 20 63 61 72 64 73 20 69 6E    alt out cards in
01E160:  20 74 68 65 20 6C 61 79 6F 75 74 20 20 61 72 72     the layout  arr
01E170:  61 79 2E 20 20 20 47 4F 53 55 42 62 69 6E 67 20    ay.   GOSUBbing 
01E180:  20 33 35 30 30 20 70 72 69 6E 74 73 20 74 68 65     3500 prints the
01E190:  20 62 61 63 6B 20 6F 66 0D 0A 20 20 20 74 68 65     back of..   the
01E1A0:  20 63 61 72 64 20 61 74 20 74 68 65 20 70 6F 73     card at the pos
01E1B0:  69 74 69 6F 6E 20 66 6F 72 20 20 63 28 72 6F 77    ition for  c(row
01E1C0:  2C 63 6F 6C 29 2E 20 20 20 57 65 20 20 63 61 6E    ,col).   We  can
01E1D0:  20 74 68 65 6E 20 64 65 63 72 65 61 73 65 20 6E     then decrease n
01E1E0:  20 62 79 20 6F 6E 65 0D 0A 20 20 20 61 6E 64 20     by one..   and 
01E1F0:  67 6F 20 74 68 72 6F 75 67 68 20 74 68 65 20 70    go through the p
01E200:  72 6F 63 65 73 73 20 61 67 61 69 6E 20 75 6E 74    rocess again unt
01E210:  69 6C 20 61 6C 6C 20 74 68 65 20 63 61 72 64 73    il all the cards
01E220:  20 68 61 76 65 20 62 65 65 6E 20 64 65 61 6C 74     have been dealt
01E230:  2E 0D 0A 0D 0A 20 20 20 57 65 20 6E 65 65 64 20    .....   We need 
01E240:  6C 69 6E 65 20 31 30 32 30 20 61 73 20 77 65 6C    line 1020 as wel
01E250:  6C 20 61 73 20 31 30 31 30 20 20 74 6F 20 20 64    l as 1010  to  d
01E260:  6F 20 74 68 69 73 20 62 65 63 61 75 73 65 20 74    o this because t
01E270:  68 65 20 6C 61 79 6F 75 74 20 61 72 72 61 79 20    he layout array 
01E280:  69 73 0D 0A 20 20 20 6E 6F 74 20 61 20 72 65 63    is..   not a rec
01E290:  74 61 6E 67 6C 65 20 62 75 74 20 37 20 72 6F 77    tangle but 7 row
01E2A0:  73 20 6F 66 20 37 20 61 6E 64 20 61 6E 20 65 78    s of 7 and an ex
01E2B0:  74 72 61 20 72 6F 77 20 6F 66 20 33 20 63 61 72    tra row of 3 car
01E2C0:  64 73 2E 0D 0A 0D 0A 20 20 20 50 52 49 4E 54 49    ds.....   PRINTI
01E2D0:  4E 47 0D 0A 20 20 20 4C 65 74 27 73 20 6E 6F 77    NG..   Let's now
01E2E0:  20 6C 6F 6F 6B 20 61 74 20 74 68 65 20 72 6F 75     look at the rou
01E2F0:  74 69 6E 65 73 20 20 66 6F 72 20 20 70 72 69 6E    tines  for  prin
01E300:  20 77 68 65 74 68 65 72 20 49 20 63 6F 75 6C 64     whether I could
01E310:  20 72 65 70 72 6F 64 75 63 65 20 69 74 20 6F 6E     reproduce it on
01E320:  20 4D 61 74 74 68 65 77 27 73 20 43 50 43 2E 20     Matthew's CPC. 
01E330:  20 49 20 63 6F 75 6C 64 2C 20 62 75 74 20 74 68     I could, but th
01E340:  65 0D 0A 20 20 20 6C 69 73 74 69 6E 67 27 73 20    e..   listing's 
01E350:  61 20 62 69 74 20 6C 6F 6E 67 20 74 6F 20 70 75    a bit long to pu
01E360:  74 20 20 69 6E 74 6F 20 20 61 20 20 74 77 6F 2D    t  into  a  two-
01E370:  70 61 67 65 20 20 57 41 43 43 49 20 61 72 74 69    page  WACCI arti
01E380:  63 6C 65 20 73 6F 20 68 65 72 65 20 69 73 20 61    cle so here is a
01E390:  0D 0A 20 20 20 73 68 6F 72 74 65 72 2C 20 6D 75    ..   shorter, mu
01E3A0:  6C 74 69 2D 70 6C 61 79 65 72 20 67 61 6D 65 2E    lti-player game.
01E3B0:  20 20 46 75 6E 20 66 6F 72 20 61 6C 6C 20 20 74      Fun for all  t
01E3C0:  68 65 20 66 61 6D 69 6C 79 20 69 6E 20 74 68 65    he family in the
01E3D0:  20 66 65 73 74 69 76 65 20 73 65 61 73 6F 6E 0D     festive season.
01E3E0:  0A 20 20 20 77 69 74 68 20 50 65 6C 6D 61 6E 69    .   with Pelmani
01E3F0:  73 6D 2C 20 6F 72 20 4D 61 74 63 68 69 6E 67 20    sm, or Matching 
01E400:  43 61 72 64 73 2E 0D 0A 0D 0A 20 20 20 3C 3C 54    Cards.....   <<T
01E410:  68 69 73 20 69 73 20 73 61 76 65 64 20 6F 6E 20    his is saved on 
01E420:  64 69 73 63 20 61 73 20 50 45 4C 4D 41 4E 2E 42    disc as PELMAN.B
01E430:  41 53 3E 3E 0D 0A 0D 0A 20 20 20 49 6E 20 74 68    AS>>....   In th
01E440:  65 20 66 69 6E 65 20 74 72 61 64 69 74 69 6F 6E    e fine tradition
01E450:  20 6F 66 20 74 68 69 73 20 73 65 72 69 65 73 20     of this series 
01E460:  20 49 27 6D 20 20 67 6F 69 6E 67 20 74 6F 20 67     I'm  going to g
01E470:  6F 20 74 68 72 6F 75 67 68 20 74 68 65 20 70 72    o through the pr
01E480:  6F 67 72 61 6D 0D 0A 20 20 20 73 68 6F 77 69 6E    ogram..   showin
01E490:  67 20 68 6F 77 20 69 74 20 77 6F 72 6B 73 20 61    g how it works a
01E4A0:  6E 64 20 70 69 63 6B 69 6E 67 20 6F 75 74 20 74    nd picking out t
01E4B0:  68 65 20 6D 6F 73 74 20 68 6F 72 72 69 62 6C 65    he most horrible
01E4C0:  20 6C 69 6E 65 73 20 61 6E 64 20 74 72 79 69 6E     lines and tryin
01E4D0:  67 20 74 6F 0D 0A 20 20 20 65 78 70 6C 61 69 6E    g to..   explain
01E4E0:  20 68 6F 77 20 6F 6E 20 65 61 72 74 68 20 49 20     how on earth I 
01E4F0:  63 61 6D 65 20 75 70 20 20 77 69 74 68 20 20 74    came up  with  t
01E500:  74 69 6E 67 20 74 68 69 6E 67 73 20 69 6E 20 6C    ting things in l
01E510:  69 6E 65 73 20 33 30 30 30 2D 34 35 33 30 20 61    ines 3000-4530 a
01E520:  73 0D 0A 20 20 20 74 68 65 79 20 61 72 65 20 75    s..   they are u
01E530:  73 65 64 20 62 79 20 6D 61 6E 79 20 62 69 74 73    sed by many bits
01E540:  20 6F 66 20 74 68 65 20 70 72 6F 67 72 61 6D 2E     of the program.
01E550:  20 20 45 61 63 68 20 72 6F 75 74 69 6E 65 20 75      Each routine u
01E560:  73 65 73 20 74 68 65 20 70 6F 73 69 74 69 6F 6E    ses the position
01E570:  0D 0A 20 20 20 6D 61 72 6B 65 72 73 20 28 72 6F    ..   markers (ro
01E580:  77 2C 63 6F 6C 29 2E 0D 0A 0D 0A 20 20 20 33 30    w,col).....   30
01E590:  30 30 20 50 72 69 6E 74 69 6E 67 20 63 61 72 64    00 Printing card
01E5A0:  73 0D 0A 20 20 20 46 6F 72 20 73 69 6D 70 6C 69    s..   For simpli
01E5B0:  63 69 74 79 20 69 6E 20 74 68 65 20 76 65 72 73    city in the vers
01E5C0:  69 6F 6E 20 66 6F 72 20 74 68 69 73 20 61 72 74    ion for this art
01E5D0:  69 63 6C 65 2C 20 74 68 65 20 63 61 72 64 73 20    icle, the cards 
01E5E0:  61 72 65 20 64 69 73 70 6C 61 79 65 64 20 62 79    are displayed by
01E5F0:  0D 0A 20 20 20 6A 75 73 74 20 74 77 6F 20 63 68    ..   just two ch
01E600:  61 72 61 63 74 65 72 73 2C 20 6F 6E 65 20 66 6F    aracters, one fo
01E610:  72 20 20 74 68 65 20 20 76 61 6C 75 65 20 20 28    r  the  value  (
01E620:  22 63 61 72 64 22 29 20 20 61 6E 64 20 20 6F 6E    "card")  and  on
01E630:  65 20 66 6F 72 20 74 68 65 20 73 75 69 74 2E 0D    e for the suit..
01E640:  0A 20 20 20 54 68 65 73 65 20 61 72 65 20 63 61    .   These are ca
01E650:  6C 63 75 6C 61 74 65 64 20 66 72 6F 6D 20 63 28    lculated from c(
01E660:  72 6F 77 2C 63 6F 6C 29 20 69 6E 20 20 6C 69 6E    row,col) in  lin
01E670:  65 20 20 33 30 30 30 2E 20 20 22 63 61 72 64 22    e  3000.  "card"
01E680:  20 74 61 6B 65 73 20 61 20 76 61 6C 75 65 0D 0A     takes a value..
01E690:  20 20 20 66 72 6F 6D 20 31 20 74 6F 20 31 33 20       from 1 to 13 
01E6A0:  61 6E 64 20 20 22 73 75 69 74 22 20 20 61 20 20    and  "suit"  a  
01E6B0:  76 61 6C 75 65 20 20 66 72 6F 6D 20 20 30 20 20    value  from  0  
01E6C0:  74 6F 20 20 33 3A 20 20 63 28 72 6F 77 2C 63 6F    to  3:  c(row,co
01E6D0:  6C 29 20 69 73 20 69 6E 20 66 61 63 74 0D 0A 20    l) is in fact.. 
01E6E0:  20 20 63 61 72 64 2B 28 73 75 69 74 2A 31 34 29      card+(suit*14)
01E6F0:  2C 20 68 65 6E 63 65 20 63 61 72 64 3D 63 28 72    , hence card=c(r
01E700:  68 65 6D 2E 20 20 20 49 27 6C 6C 20 20 74 72 79    hem.   I'll  try
01E710:  20 74 6F 20 6B 65 65 70 20 69 74 20 64 6F 77 6E     to keep it down
01E720:  20 74 6F 0D 0A 20 20 20 6A 75 73 74 20 6F 6E 65     to..   just one
01E730:  20 61 72 74 69 63 6C 65 2C 20 74 68 6F 75 67 68     article, though
01E740:  2E 0D 0A 0D 0A 20 20 20 53 45 54 54 49 4E 47 20    .....   SETTING 
01E750:  4F 55 54 0D 0A 20 20 20 54 68 65 20 66 69 72 73    OUT..   The firs
01E760:  74 20 66 65 77 20 6C 69 6E 65 73 20 73 65 74 20    t few lines set 
01E770:  75 70 20 77 68 61 74 20 77 65 20 77 69 6C 6C 20    up what we will 
01E780:  6E 65 65 64 20 74 6F 20 70 6C 61 79 20 74 68 65    need to play the
01E790:  20 67 61 6D 65 2E 20 20 49 6E 20 6C 69 6E 65 20     game.  In line 
01E7A0:  31 30 0D 0A 20 20 20 77 65 20 63 72 65 61 74 65    10..   we create
01E7B0:  20 61 20 73 70 65 63 69 61 6C 20 63 68 61 72 61     a special chara
01E7C0:  63 74 65 72 20 73 6F 20 74 68 61 74 20 74 68 65    cter so that the
01E7D0:  20 6E 75 6D 62 65 72 20 22 31 30 22 20 63 61 6E     number "10" can
01E7E0:  20 62 65 20 70 72 69 6E 74 65 64 20 75 70 20 61     be printed up a
01E7F0:  73 0D 0A 20 20 20 6F 6E 65 20 63 68 61 72 61 63    s..   one charac
01E800:  74 65 72 2E 20 20 4C 69 6E 65 20 33 30 20 73 65    ter.  Line 30 se
01E810:  74 73 20 20 75 70 20 20 61 72 72 61 79 73 20 20    ts  up  arrays  
01E820:  66 6F 72 20 20 74 68 65 20 20 70 61 63 6B 2C 20    for  the  pack, 
01E830:  74 68 65 20 63 61 72 64 73 20 69 6E 20 74 68 65    the cards in the
01E840:  0D 0A 20 20 20 74 77 6F 2D 64 69 6D 65 6E 73 69    ..   two-dimensi
01E850:  6F 6E 61 6C 20 6C 61 79 6F 75 74 2C 20 74 68 65    onal layout, the
01E860:  20 6E 61 6D 65 73 20 6F 66 20 73 69 78 20 20 70     names of six  p
01E870:  6C 61 79 65 72 73 20 61 6E 64 20 74 68 65 20 6E    layers and the n
01E880:  75 6D 62 65 72 73 20 6F 66 20 70 61 69 72 73 0D    umbers of pairs.
01E890:  0A 20 20 20 77 6F 6E 20 62 79 20 74 68 65 20 73    .   won by the s
01E8A0:  69 78 20 70 6C 61 79 65 72 73 2E 20 20 4C 69 6E    ix players.  Lin
01E8B0:  65 20 20 34 30 20 20 64 65 66 69 6E 65 73 20 20    e  40  defines  
01E8C0:  61 20 20 73 74 72 69 6E 67 20 77 68 69 63 68 20    a  string which 
01E8D0:  77 65 20 77 69 6C 6C 20 75 73 65 20 74 6F 0D 0A    we will use to..
01E8E0:  20 20 20 70 72 69 6E 74 20 75 70 20 74 68 65 20       print up the 
01E8F0:  76 61 6C 75 65 73 20 6F 66 20 74 68 65 20 63 61    values of the ca
01E900:  6F 77 2C 63 6F 6C 29 20 6D 6F 64 20 31 34 20 61    ow,col) mod 14 a
01E910:  6E 64 20 73 75 69 74 3D 63 28 72 6F 77 2C 63 6F    nd suit=c(row,co
01E920:  6C 29 5C 31 34 2E 0D 0A 0D 0A 20 20 20 54 68 65    l)\14.....   The
01E930:  20 73 75 69 74 20 63 68 61 72 61 63 74 65 72 73     suit characters
01E940:  20 61 72 65 20 69 6E 20 74 68 65 20 41 53 43 49     are in the ASCI
01E950:  49 20 63 68 61 72 61 63 74 65 72 20 73 65 74 20    I character set 
01E960:  77 68 69 63 68 20 6D 61 6B 65 73 20 74 68 69 6E    which makes thin
01E970:  67 73 20 76 65 72 79 0D 0A 20 20 20 65 61 73 79    gs very..   easy
01E980:  2E 20 20 54 68 65 20 63 68 61 72 61 63 74 65 72    .  The character
01E990:  20 66 6F 72 20 22 63 61 72 64 22 20 20 69 73 20     for "card"  is 
01E9A0:  20 68 65 6C 64 20 20 69 6E 20 20 74 68 65 20 73     held  in  the s
01E9B0:  74 72 69 6E 67 20 63 61 72 64 24 20 64 65 66 69    tring card$ defi
01E9C0:  6E 65 64 20 69 6E 0D 0A 20 20 20 6C 69 6E 65 20    ned in..   line 
01E9D0:  34 30 2E 20 41 6C 6C 20 77 65 20 68 61 76 65 20    40. All we have 
01E9E0:  74 6F 20 20 64 6F 20 20 74 6F 20 20 70 72 69 6E    to  do  to  prin
01E9F0:  74 20 20 69 74 20 20 69 73 20 74 6F 20 74 61 6B    t  it  is to tak
01EA00:  65 20 6F 75 74 20 74 68 65 20 61 70 70 72 6F 70    e out the approp
01EA10:  72 69 61 74 65 0D 0A 20 20 20 63 68 61 72 61 63    riate..   charac
01EA20:  74 65 72 20 75 73 69 6E 67 20 4D 49 44 24 2E 20    ter using MID$. 
01EA30:  20 54 68 65 20 63 6F 6C 6F 75 72 20 74 6F 20 70     The colour to p
01EA40:  72 69 6E 74 20 74 68 65 20 63 61 72 64 73 20 69    rint the cards i
01EA50:  73 20 73 6C 69 67 68 74 6C 79 20 74 72 69 63 6B    s slightly trick
01EA60:  79 20 74 6F 0D 0A 20 20 20 77 6F 72 6B 20 6F 75    y to..   work ou
01EA70:  74 20 61 73 20 77 65 20 77 61 6E 74 20 62 6C 61    t as we want bla
01EA80:  63 6B 20 28 30 29 20 66 6F 72 20 73 75 69 74 73    ck (0) for suits
01EA90:  20 30 20 61 6E 64 20 33 20 28 63 6C 75 62 73 20     0 and 3 (clubs 
01EAA0:  61 6E 64 20 73 70 61 64 65 73 29 20 61 6E 64 20    and spades) and 
01EAB0:  72 65 64 0D 0A 20 20 20 28 31 29 20 66 6F 72 20    red..   (1) for 
01EAC0:  73 75 69 74 73 20 31 20 61 6E 64 20 32 20 28 64    suits 1 and 2 (d
01EAD0:  69 61 6D 6F 6E 64 73 20 20 61 6E 64 20 20 68 65    iamonds  and  he
01EAE0:  61 72 74 73 29 2E 20 20 54 72 79 20 6F 75 74 20    arts).  Try out 
01EAF0:  74 68 65 20 65 78 70 72 65 73 73 69 6F 6E 20 66    the expression f
01EB00:  72 64 73 2E 0D 0A 0D 0A 20 20 20 49 6E 20 6C 69    rds.....   In li
01EB10:  6E 65 20 35 30 20 77 65 20 70 75 74 20 35 32 20    ne 50 we put 52 
01EB20:  65 6E 74 72 69 65 73 20 69 6E 20 74 68 65 20 22    entries in the "
01EB30:  70 61 63 6B 22 20 61 72 72 61 79 2E 20 20 57 65    pack" array.  We
01EB40:  20 63 6F 75 6C 64 20 6A 75 73 74 20 72 65 70 72     could just repr
01EB50:  65 73 65 6E 74 0D 0A 20 20 20 74 68 65 20 63 61    esent..   the ca
01EB60:  72 64 73 20 62 79 20 74 68 65 20 6E 75 6D 62 65    rds by the numbe
01EB70:  72 73 20 31 2D 35 32 20 62 75 74 20 69 74 20 20    rs 1-52 but it  
01EB80:  74 75 72 6E 73 20 6F 75 74 20 74 6F 20 62 65 20    turns out to be 
01EB90:  65 61 73 69 65 72 20 74 6F 20 6D 61 6E 69 70 75    easier to manipu
01EBA0:  6C 61 74 65 0D 0A 20 20 20 74 68 65 6D 20 69 6E    late..   them in
01EBB0:  20 6F 74 68 65 72 20 63 61 72 64 20 67 61 6D 65     other card game
01EBC0:  73 20 49 20 68 61 76 65 20 20 77 72 69 74 74 65    s I have  writte
01EBD0:  6E 20 20 69 66 20 77 65 20 75 73 65 20 31 2D 31    n  if we use 1-1
01EBE0:  33 2C 20 31 35 2D 32 37 2C 20 32 39 2D 34 31 20    3, 15-27, 29-41 
01EBF0:  61 6E 64 0D 0A 20 20 20 34 33 2D 35 35 20 66 6F    and..   43-55 fo
01EC00:  72 20 63 6C 75 62 73 2C 20 20 64 69 61 6D 6F 6E    r clubs,  diamon
01EC10:  64 73 2C 20 20 68 65 61 72 74 73 20 20 61 6E 64    ds,  hearts  and
01EC20:  20 20 73 70 61 64 65 73 20 20 72 65 73 70 65 63      spades  respec
01EC30:  74 69 76 65 6C 79 2C 20 20 68 65 6E 63 65 20 74    tively,  hence t
01EC40:  68 65 0D 0A 20 20 20 70 65 63 75 6C 69 61 72 20    he..   peculiar 
01EC50:  65 78 70 72 65 73 73 69 6F 6E 20 69 6E 20 6C 69    expression in li
01EC60:  6E 65 20 35 30 2E 20 20 20 4C 69 6E 65 20 20 36    ne 50.   Line  6
01EC70:  30 20 20 73 65 74 73 20 20 75 70 20 74 68 65 20    0  sets  up the 
01EC80:  69 6E 6B 73 20 28 62 6C 61 63 6B 2C 20 72 65 64    inks (black, red
01EC90:  2C 0D 0A 20 20 20 77 68 69 74 65 2C 20 61 6E 64    ,..   white, and
01ECA0:  20 67 72 65 65 6E 20 66 6F 72 20 74 68 65 20 63     green for the c
01ECB0:  61 72 64 20 74 61 62 6C 65 29 20 61 6E 64 20 20    ard table) and  
01ECC0:  6C 69 6E 65 20 37 30 20 67 69 76 65 73 20 75 73    line 70 gives us
01ECD0:  20 61 20 77 69 6E 64 6F 77 20 61 74 20 74 68 65     a window at the
01ECE0:  0D 0A 20 20 20 62 6F 74 74 6F 6D 20 66 6F 72 20    ..   bottom for 
01ECF0:  6D 65 73 73 61 67 65 73 2E 0D 0A 0D 0A 20 20 20    messages.....   
01ED00:  6D 63 68 3A 47 4F 53 55 42 20 31 30 31 30 0D 0A    mch:GOSUB 1010..
01ED10:  20 20 20 31 30 30 34 20 57 45 4E 44 0D 0A 20 20       1004 WEND..  
01ED20:  20 31 30 30 35 20 6D 64 3D 28 49 4E 4B 45 59 28     1005 md=(INKEY(
01ED30:  75 70 29 3E 2D 31 29 2D 28 49 4E 4B 45 59 28 64    up)>-1)-(INKEY(d
01ED40:  6F 77 29 3E 2D 31 29 3A 6D 7A 3D 6D 64 0D 0A 20    ow)>-1):mz=md.. 
01ED50:  20 20 31 30 30 36 20 6B 70 3D 2D 28 49 4E 4B 45      1006 kp=-(INKE
01ED60:  59 28 6C 65 29 3E 2D 31 29 2D 32 2A 28 49 4E 4B    Y(le)>-1)-2*(INK
01ED70:  45 59 28 72 69 29 3E 2D 31 29 2D 34 2A 28 49 4E    EY(ri)>-1)-4*(IN
01ED80:  4B 45 59 28 66 69 29 3E 2D 31 29 0D 0A 20 20 20    KEY(fi)>-1)..   
01ED90:  31 30 30 37 20 57 45 4E 44 0D 0A 20 20 20 31 30    1007 WEND..   10
01EDA0:  30 38 20 57 48 49 4C 45 20 49 4E 4B 45 59 24 3C    08 WHILE INKEY$<
01EDB0:  3E 22 22 3A 57 45 4E 44 0D 0A 20 20 20 31 30 30    >"":WEND..   100
01EDC0:  39 20 52 45 54 55 52 4E 0D 0A 20 20 20 31 30 31    9 RETURN..   101
01EDD0:  30 20 50 52 49 4E 54 20 43 48 52 24 28 32 33 29    0 PRINT CHR$(23)
01EDE0:  2B 43 48 52 24 28 31 29 3B 0D 0A 20 20 20 31 30    +CHR$(1);..   10
01EDF0:  31 31 20 4D 4F 56 45 20 6D 78 2C 6D 79 2D 6D 70    11 MOVE mx,my-mp
01EE00:  2A 6D 73 70 2B 28 6D 64 3D 2D 31 29 2A 28 6D 62    *msp+(md=-1)*(mb
01EE10:  68 2D 32 29 0D 0A 20 20 20 31 30 31 32 20 46 4F    h-2)..   1012 FO
01EE20:  52 20 6D 63 3D 31 20 54 4F 20 6D 62 68 2F 32 0D    R mc=1 TO mbh/2.
01EE30:  0A 20 20 20 31 30 31 33 20 44 52 41 57 52 20 6D    .   1013 DRAWR m
01EE40:  62 6C 2C 30 2C 6D 63 6F 6C 3A 4D 4F 56 45 52 20    bl,0,mcol:MOVER 
01EE50:  2D 6D 62 6C 2C 2D 32 2D 28 6D 64 3D 2D 31 29 2A    -mbl,-2-(md=-1)*
01EE60:  34 0D 0A 20 20 20 31 30 31 34 20 46 4F 52 20 64    4..   1014 FOR d
01EE70:  65 6C 61 79 3D 30 20 54 4F 20 6D 64 65 3A 4E 45    elay=0 TO mde:NE
01EE80:  58 54 0D 0A 20 20 20 31 30 31 35 20 4E 45 58 54    XT..   1015 NEXT
01EE90:  0D 0A 20 20 20 31 30 31 36 20 50 52 49 4E 54 20    ..   1016 PRINT 
01EEA0:  43 48 52 24 28 32 33 29 2B 43 48 52 24 28 30 29    CHR$(23)+CHR$(0)
01EEB0:  3B 0D 0A 20 20 20 31 30 31 37 20 52 45 54 55 52    ;..   1017 RETUR
01EEC0:  4E 0D 0A 1A 20 74 68 65 20 6C 61 73 74 20 6F 66    N... the last of
01EED0:  20 74 68 72 65 65 20 61 72 74 69 63 6C 65 73 20     three articles 
01EEE0:  61 62 6F 75 74 20 6D 65 6E 75 20 68 61 6E 64 6C    about menu handl
01EEF0:  69 6E 67 20 69 6E 20 42 41 53 49 43 20 77 65 20    ing in BASIC we 
01EF00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
01EF10:  1A 00 01 00 02 09 4E E5 1A 00 C9 02 00 00 00 02    ......N.........
01EF20:  1A 00 C5 02 00 00 00 02 1A 00 C1 02 00 00 00 02    ................
01EF30:  1A 00 C6 02 00 00 00 02 1A 00 C2 02 00 00 00 02    ................
01EF40:  1A 00 C7 02 00 00 00 02 1A 00 C3 02 00 00 00 02    ................
01EF50:  1A 00 C8 02 00 00 00 02 1A 00 C4 02 00 00 00 02    ................
01EF60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01EF70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01EF80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01EF90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01EFA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01EFB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01EFC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01EFD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01EFE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01EFF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
01F000:  6F 72 20 22 51 22 2C 20 61 6E 64 20 69 66 20 20    or "Q", and if  
01F010:  79 6F 75 20 20 71 75 69 74 20 20 74 68 65 6E 20    you  quit  then 
01F020:  6C 69 6E 65 20 32 35 30 20 72 65 73 65 74 73 20    line 250 resets 
01F030:  74 68 65 20 73 63 72 65 65 6E 0D 0A 20 20 20 61    the screen..   a
01F040:  6E 64 20 74 65 78 74 20 73 65 74 74 69 6E 67 73    nd text settings
01F050:  20 75 73 69 6E 67 20 74 77 6F 20 66 69 72 6D 77     using two firmw
01F060:  61 72 65 20 63 61 6C 6C 73 2E 0D 0A 0D 0A 20 20    are calls.....  
01F070:  20 43 4F 55 4C 44 20 44 4F 20 42 45 54 54 45 52     COULD DO BETTER
01F080:  0D 0A 20 20 20 54 68 69 73 20 69 73 20 61 20 76    ..   This is a v
01F090:  65 72 79 20 62 61 73 69 63 20 76 65 72 73 69 6F    ery basic versio
01F0A0:  6E 20 6F 66 20 74 68 65 20 67 61 6D 65 2C 20 61    n of the game, a
01F0B0:  6E 64 20 6C 6F 74 73 20 6F 66 20 74 68 69 6E 67    nd lots of thing
01F0C0:  73 20 63 6F 75 6C 64 20 62 65 20 64 6F 6E 65 0D    s could be done.
01F0D0:  0A 20 20 20 74 6F 20 73 70 69 63 65 20 69 74 20    .   to spice it 
01F0E0:  75 70 2E 20 20 54 68 65 20 63 61 72 64 73 20 20    up.  The cards  
01F0F0:  63 6F 75 6C 64 20 20 62 65 20 20 61 20 20 62 65    could  be  a  be
01F100:  74 74 65 72 20 20 73 68 61 70 65 20 61 6E 64 20    tter  shape and 
01F110:  6C 6F 6F 6B 20 6D 6F 72 65 20 6C 69 6B 65 0D 0A    look more like..
01F120:  20 20 20 70 6C 61 79 69 6E 67 20 63 61 72 64 73       playing cards
01F130:  2E 20 20 59 6F 75 20 63 6F 75 6C 64 20 69 6E 63    .  You could inc
01F140:  6C 75 64 65 20 61 70 70 72 6F 70 72 69 61 74 65    lude appropriate
01F150:  20 6D 75 73 69 63 20 77 68 65 6E 20 63 61 72 64     music when card
01F160:  73 20 6D 61 74 63 68 20 6F 72 20 64 6F 0D 0A 20    s match or do.. 
01F170:  20 20 6E 6F 74 20 6D 61 74 63 68 2E 20 20 4F 72      not match.  Or
01F180:  20 79 6F 75 20 63 6F 75 6C 64 20 64 69 73 70 65     you could dispe
01F190:  6E 73 65 20 20 77 69 74 68 20 20 74 68 65 20 63    nse  with  the c
01F1A0:  6F 6D 70 75 74 65 72 20 61 6C 74 6F 67 65 74 68    omputer altogeth
01F1B0:  65 72 20 61 6E 64 20 75 73 65 20 61 0D 0A 20 20    er and use a..  
01F1C0:  20 73 69 6D 70 6C 65 20 70 61 63 6B 20 6F 66 20     simple pack of 
01F1D0:  35 32 20 63 61 72 64 73 20 61 6E 64 20 61 20 74    52 cards and a t
01F1E0:  61 62 6C 65 2E 0D 0A 0D 0A 0D 0A 20 20 20 35 20    able.......   5 
01F1F0:  52 45 4D 20 50 65 6C 6D 61 6E 69 73 6D 20 76 2E    REM Pelmanism v.
01F200:  20 20 20 6C 69 6E 65 73 20 32 35 33 30 2D 32 35       lines 2530-25
01F210:  36 30 20 64 65 70 65 6E 64 69 6E 67 20 6F 6E 20    60 depending on 
01F220:  77 68 69 63 68 20 20 6B 65 79 20 20 69 73 20 20    which  key  is  
01F230:  70 72 65 73 73 65 64 2E 20 20 49 66 20 74 68 65    pressed.  If the
01F240:  20 70 6C 61 79 65 72 20 6D 6F 76 65 73 0D 0A 20     player moves.. 
01F250:  20 20 6F 66 66 20 74 68 65 20 38 78 37 20 72 65      off the 8x7 re
01F260:  63 74 61 6E 67 6C 65 20 74 68 65 20 63 75 72 73    ctangle the curs
01F270:  6F 72 20 77 72 61 70 73 20 20 72 6F 75 6E 64 20    or wraps  round 
01F280:  20 61 6E 64 20 72 65 61 70 70 65 61 72 73 20 61     and reappears a
01F290:  74 20 74 68 65 20 74 6F 70 20 69 66 0D 0A 20 20    t the top if..  
01F2A0:  20 69 74 20 77 65 6E 74 20 6F 66 66 20 74 68 65     it went off the
01F2B0:  20 62 6F 74 74 6F 6D 2C 20 65 74 63 2E 20 20 20     bottom, etc.   
01F2C0:  54 68 69 73 20 20 69 73 20 20 64 6F 6E 65 20 20    This  is  done  
01F2D0:  75 73 69 6E 67 20 4D 4F 44 2E 20 20 49 6E 20 6C    using MOD.  In l
01F2E0:  69 6E 65 20 32 35 33 30 20 77 65 0D 0A 20 20 20    ine 2530 we..   
01F2F0:  68 61 76 65 20 74 6F 20 61 64 64 20 38 20 62 65    have to add 8 be
01F300:  66 6F 72 65 20 4D 4F 44 64 69 6E 67 20 62 79 20    fore MODding by 
01F310:  20 38 2C 20 20 61 73 20 20 74 68 65 20 63 75 72     8,  as  the cur
01F320:  73 6F 72 20 6D 69 67 68 74 20 62 65 20 61 74 20    sor might be at 
01F330:  70 6F 73 69 74 69 6F 6E 20 30 0D 0A 20 20 20 28    position 0..   (
01F340:  74 68 65 20 66 69 72 73 74 20 72 6F 77 29 20 61    the first row) a
01F350:  6E 64 20 4D 4F 44 20 2D 31 20 20 3D 20 20 2D 31    nd MOD -1  =  -1
01F360:  2C 20 20 77 68 65 72 65 61 73 20 20 77 65 20 20    ,  whereas  we  
01F370:  77 61 6E 74 20 37 2C 20 66 6F 72 20 74 68 65 20    want 7, for the 
01F380:  6C 61 73 74 20 72 6F 77 2E 0D 0A 20 20 20 4C 69    last row...   Li
01F390:  6E 65 20 32 35 35 30 20 69 73 20 73 69 6D 69 6C    ne 2550 is simil
01F3A0:  61 72 2E 0D 0A 0D 0A 20 20 20 42 65 66 6F 72 65    ar.....   Before
01F3B0:  20 6D 6F 76 69 6E 67 20 74 68 65 20 63 75 72 73     moving the curs
01F3C0:  6F 72 20 77 65 20 64 65 6C 65 74 65 20 69 74 20    or we delete it 
01F3D0:  20 66 72 6F 6D 20 69 74 73 20 66 6F 72 6D 65 72     from its former
01F3E0:  20 70 6F 73 69 74 69 6F 6E 2C 20 61 6E 64 20 61     position, and a
01F3F0:  66 74 65 72 0D 0A 20 20 20 6D 6F 76 69 6E 67 20    fter..   moving 
01F400:  6F 72 0D 0A 20 20 20 70 63 6F 6C 20 61 6E 64 20    or..   pcol and 
01F410:  79 6F 75 20 77 69 6C 6C 20 73 65 65 20 74 68 61    you will see tha
01F420:  74 20 69 74 20 77 6F 72 6B 73 2E 0D 0A 0D 0A 20    t it works..... 
01F430:  20 20 33 35 30 30 20 50 72 69 6E 74 69 6E 67 20      3500 Printing 
01F440:  62 61 63 6B 73 20 6F 66 20 63 61 72 64 73 0D 0A    backs of cards..
01F450:  20 20 20 54 68 69 73 20 69 73 20 76 65 72 79 20       This is very 
01F460:  73 69 6D 70 6C 65 3A 20 74 68 65 20 62 61 63 6B    simple: the back
01F470:  73 20 20 61 72 65 20 20 74 77 6F 20 63 68 61 72    s  are  two char
01F480:  61 63 74 65 72 73 20 67 6C 65 61 6E 65 64 20 66    acters gleaned f
01F490:  72 6F 6D 20 74 68 65 20 41 53 43 49 49 0D 0A 20    rom the ASCII.. 
01F4A0:  20 20 63 68 61 72 61 63 74 65 72 20 73 65 74 2E      character set.
01F4B0:  0D 0A 0D 0A 20 20 20 34 30 30 30 20 44 65 6C 65    ....   4000 Dele
01F4C0:  74 69 6E 67 20 63 61 72 64 73 0D 0A 20 20 20 54    ting cards..   T
01F4D0:  68 69 73 20 69 73 20 65 76 65 72 20 73 6F 20 65    his is ever so e
01F4E0:  61 73 79 20 61 73 20 61 6C 6C 20 77 65 20 68 61    asy as all we ha
01F4F0:  76 65 20 20 74 6F 20 64 6F 20 69 73 20 70 72 69    ve  to do is pri
01F500:  6E 74 20 73 70 61 63 65 73 20 6F 76 65 72 20 74    nt spaces over t
01F510:  68 65 20 74 6F 70 20 6F 66 0D 0A 20 20 20 74 68    he top of..   th
01F520:  65 20 63 61 72 64 20 70 72 65 76 69 6F 75 73 6C    e card previousl
01F530:  79 20 74 68 65 72 65 2E 0D 0A 0D 0A 20 20 20 34    y there.....   4
01F540:  35 30 30 20 50 72 69 6E 74 69 6E 67 20 63 75 72    500 Printing cur
01F550:  73 6F 72 0D 0A 20 20 20 54 68 69 73 20 69 73 20    sor..   This is 
01F560:  61 6E 20 22 58 22 20 73 70 72 65 61 64 20 6F 76    an "X" spread ov
01F570:  65 72 20 74 77 6F 20 63 68 61 72 61 63 74 65 72    er two character
01F580:  73 2C 20 70 72 69 6E 74 65 64 20 69 6E 20 77 68    s, printed in wh
01F590:  69 74 65 20 69 6E 20 74 72 61 6E 73 70 61 72 65    ite in transpare
01F5A0:  6E 74 0D 0A 20 20 20 6D 6F 64 65 20 6F 76 65 72    nt..   mode over
01F5B0:  20 74 68 65 20 63 61 72 64 20 62 65 6C 6F 77 2E     the card below.
01F5C0:  20 20 49 74 20 69 73 20 20 6E 6F 74 20 20 70 72      It is  not  pr
01F5D0:  69 6E 74 65 64 20 20 75 70 20 20 69 66 20 74 68    inted  up  if th
01F5E0:  65 20 63 61 72 64 20 69 73 20 74 68 65 20 6F 6E    e card is the on
01F5F0:  65 0D 0A 20 20 20 6A 75 73 74 20 73 65 6C 65 63    e..   just selec
01F600:  77 65 20 70 72 69 6E 74 20 69 74 20 69 6E 20 69    we print it in i
01F610:  74 73 20 6E 65 77 20 70 6F 73 69 74 69 6F 6E 2E    ts new position.
01F620:  0D 0A 0D 0A 20 20 20 4F 6E 63 65 20 74 68 65 20    ....   Once the 
01F630:  45 4E 54 45 52 2F 52 45 54 55 52 4E 20 6B 65 79    ENTER/RETURN key
01F640:  20 68 61 73 20 20 62 65 65 6E 20 20 70 72 65 73     has  been  pres
01F650:  73 65 64 20 20 74 68 65 20 20 63 61 72 64 20 73    sed  the  card s
01F660:  65 6C 65 63 74 65 64 20 69 73 20 74 75 72 6E 65    elected is turne
01F670:  64 0D 0A 20 20 20 6F 76 65 72 2C 20 69 2E 65 2E    d..   over, i.e.
01F680:  20 70 72 69 6E 74 65 64 20 75 70 20 62 79 20 47     printed up by G
01F690:  4F 53 55 42 62 69 6E 67 20 33 30 30 30 2E 20 20    OSUBbing 3000.  
01F6A0:  20 54 68 65 20 76 61 6C 75 65 20 6F 66 20 74 68     The value of th
01F6B0:  65 20 63 61 72 64 20 28 77 68 69 63 68 20 77 65    e card (which we
01F6C0:  0D 0A 20 20 20 77 6F 72 6B 65 64 20 6F 75 74 20    ..   worked out 
01F6D0:  77 68 65 6E 20 47 4F 53 55 42 62 69 6E 67 20 33    when GOSUBbing 3
01F6E0:  30 30 30 29 20 69 73 20 20 73 74 6F 72 65 64 20    000) is  stored 
01F6F0:  20 69 6E 20 63 61 72 64 73 65 6C 20 61 6E 64 20     in cardsel and 
01F700:  74 68 65 20 70 6F 73 69 74 69 6F 6E 20 69 6E 0D    the position in.
01F710:  0A 20 20 20 28 72 31 2C 63 31 29 2E 20 20 54 68    .   (r1,c1).  Th
01F720:  65 20 70 6C 61 79 65 72 20 69 73 20 20 74 68 65    e player is  the
01F730:  6E 20 20 61 73 6B 65 64 20 20 74 6F 20 20 63 68    n  asked  to  ch
01F740:  6F 6F 73 65 20 20 61 6E 6F 74 68 65 72 20 63 61    oose  another ca
01F750:  72 64 2E 20 20 4C 69 6E 65 20 32 30 33 30 0D 0A    rd.  Line 2030..
01F760:  20 20 20 65 6E 73 75 72 65 73 20 74 68 61 74 20       ensures that 
01F770:  74 68 65 79 20 64 6F 20 6E 6F 74 20 63 68 6F 6F    they do not choo
01F780:  73 65 20 74 68 65 20 20 73 61 6D 65 20 63 61 72    se the  same car
01F790:  64 20 61 67 61 69 6E 2C 20 70 72 69 6E 74 73 20    d again, prints 
01F7A0:  75 70 20 74 68 65 20 73 65 63 6F 6E 64 0D 0A 20    up the second.. 
01F7B0:  20 20 63 61 72 64 20 73 65 6C 65 63 74 65 64 20      card selected 
01F7C0:  61 6E 64 20 74 68 65 6E 20 63 6F 6D 70 61 72 65    and then compare
01F7D0:  73 20 74 68 65 20 76 61 6C 75 65 73 20 6F 66 20    s the values of 
01F7E0:  74 68 65 20 74 77 6F 20 63 61 72 64 73 2E 0D 0A    the two cards...
01F7F0:  0D 0A 20 20 20 49 66 20 74 68 65 79 20 61 72 65    ..   If they are
01F800:  74 65 64 2C 20 69 2E 65 2E 20 69 6E 20 74 68 65    ted, i.e. in the
01F810:  20 70 6F 73 69 74 69 6F 6E 20 28 72 31 2C 63 31     position (r1,c1
01F820:  29 2E 0D 0A 0D 0A 20 20 20 34 35 32 30 20 44 65    ).....   4520 De
01F830:  6C 65 74 69 6E 67 20 63 75 72 73 6F 72 0D 0A 20    leting cursor.. 
01F840:  20 20 57 65 20 64 6F 20 6E 6F 74 20 6E 65 65 64      We do not need
01F850:  20 74 6F 20 64 65 6C 65 74 65 20 74 68 65 20 63     to delete the c
01F860:  75 72 73 6F 72 20 20 69 66 20 69 74 20 69 73 20    ursor  if it is 
01F870:  6F 76 65 72 20 74 68 65 20 63 61 72 64 20 6A 75    over the card ju
01F880:  73 74 20 73 65 6C 65 63 74 65 64 2C 0D 0A 20 20    st selected,..  
01F890:  20 61 73 20 69 74 20 77 61 73 20 6E 6F 74 20 70     as it was not p
01F8A0:  72 69 6E 74 65 64 20 74 68 65 72 65 20 20 69 6E    rinted there  in
01F8B0:  20 20 74 68 65 20 20 66 69 72 73 74 20 20 70 6C      the  first  pl
01F8C0:  61 63 65 2E 20 20 20 49 66 20 74 68 65 72 65 20    ace.   If there 
01F8D0:  77 61 73 20 6E 6F 20 63 61 72 64 0D 0A 20 20 20    was no card..   
01F8E0:  75 6E 64 65 72 20 74 68 65 20 63 75 72 73 6F 72    under the cursor
01F8F0:  20 74 68 65 6E 20 74 68 65 20 20 63 75 72 73 6F     then the  curso
01F900:  72 20 20 69 73 20 20 64 65 6C 65 74 65 64 20 20    r  is  deleted  
01F910:  75 73 69 6E 67 20 74 68 65 20 72 6F 75 74 69 6E    using the routin
01F920:  65 20 61 74 20 34 30 30 30 3A 0D 0A 20 20 20 6F    e at 4000:..   o
01F930:  74 68 65 72 77 69 73 65 20 74 68 65 20 62 61 63    therwise the bac
01F940:  6B 20 69 73 20 70 72 69 6E 74 65 64 20 75 70 20    k is printed up 
01F950:  61 67 61 69 6E 20 75 73 69 6E 67 20 33 35 30 30    again using 3500
01F960:  2E 0D 0A 0D 0A 20 20 20 4F 4E 20 57 49 54 48 20    .....   ON WITH 
01F970:  54 48 45 20 47 41 4D 45 0D 0A 20 20 20 4C 69 6E    THE GAME..   Lin
01F980:  65 73 20 31 31 30 2D 31 34 30 20 61 6C 6C 6F 77    es 110-140 allow
01F990:  20 74 68 65 20 75 73 65 72 20 20 74 6F 20 20 73     the user  to  s
01F9A0:  65 6C 65 63 74 20 20 74 68 65 20 20 6E 75 6D 62    elect  the  numb
01F9B0:  65 72 20 6F 66 20 70 6C 61 79 65 72 73 20 61 6E    er of players an
01F9C0:  64 20 65 6E 74 65 72 0D 0A 20 20 20 74 68 65 69    d enter..   thei
01F9D0:  72 20 6E 61 6D 65 73 2C 20 74 68 65 20 66 69 72    r names, the fir
01F9E0:  73 74 20 31 36 20 63 68 61 72 61 63 74 65 72 73    st 16 characters
01F9F0:  20 6F 66 20 20 77 68 69 63 68 20 61 72 65 20 75     of  which are u
01FA00:  20 74 68 65 20 73 61 6D 65 20 74 68 65 6E 20 77     the same then w
01FA10:  65 20 47 4F 53 55 42 20 32 31 30 30 2C 20 72 65    e GOSUB 2100, re
01FA20:  6D 6F 76 65 20 74 68 65 20 63 61 72 64 73 20 62    move the cards b
01FA30:  79 20 64 65 6C 65 74 69 6E 67 20 74 68 65 6D 0D    y deleting them.
01FA40:  0A 20 20 20 61 6E 64 20 73 65 74 74 69 6E 67 20    .   and setting 
01FA50:  63 28 72 6F 77 2C 63 6F 6C 29 3D 30 20 66 6F 72    c(row,col)=0 for
01FA60:  20 20 65 61 63 68 20 20 70 6F 73 69 74 69 6F 6E      each  position
01FA70:  2C 20 20 61 6E 64 20 20 61 64 64 20 20 31 20 74    ,  and  add  1 t
01FA80:  6F 20 74 68 65 20 70 6C 61 79 65 72 27 73 0D 0A    o the player's..
01FA90:  20 20 20 73 63 6F 72 65 20 6F 66 20 70 61 69 72       score of pair
01FAA0:  73 20 77 6F 6E 2C 20 70 72 69 6E 74 69 6E 67 20    s won, printing 
01FAB0:  69 74 20 20 62 65 6C 6F 77 20 20 74 68 65 69 72    it  below  their
01FAC0:  20 20 6E 61 6D 65 20 6F 6E 20 73 63 72 65 65 6E      name on screen
01FAD0:  2E 20 20 54 68 65 20 70 6C 61 79 65 72 0D 0A 20    .  The player.. 
01FAE0:  20 20 74 68 65 6E 20 67 65 74 73 20 61 6E 6F 74      then gets anot
01FAF0:  68 65 72 20 74 75 72 6E 2E 20 20 49 66 20 74 68    her turn.  If th
01FB00:  65 20 63 61 72 64 73 20 64 6F 20 6E 6F 74 20 6D    e cards do not m
01FB10:  61 74 63 68 20 74 68 65 6E 20 74 68 65 79 20 61    atch then they a
01FB20:  72 65 20 73 68 6F 77 6E 20 66 6F 72 0D 0A 20 20    re shown for..  
01FB30:  20 61 20 73 65 74 20 6C 65 6E 67 74 68 20 6F 66     a set length of
01FB40:  20 74 69 6D 65 20 73 6F 20 74 68 61 74 20 20 61     time so that  a
01FB50:  6C 6C 20 20 70 6C 61 79 65 72 73 20 20 68 61 76    ll  players  hav
01FB60:  65 20 61 20 66 61 69 72 20 63 68 61 6E 63 65 20    e a fair chance 
01FB70:  74 6F 20 73 65 65 20 77 68 61 74 0D 0A 20 20 20    to see what..   
01FB80:  61 6E 64 20 77 68 65 72 65 20 74 68 65 79 20 77    and where they w
01FB90:  65 72 65 2C 20 61 6E 64 20 20 74 68 65 6E 20 20    ere, and  then  
01FBA0:  74 68 65 79 20 20 61 72 65 20 20 74 75 72 6E 65    they  are  turne
01FBB0:  64 20 20 6F 76 65 72 20 61 67 61 69 6E 20 62 79    d  over again by
01FBC0:  20 47 4F 53 55 42 62 69 6E 67 0D 0A 20 20 20 33     GOSUBbing..   3
01FBD0:  35 30 30 2C 20 61 6E 64 20 69 74 20 69 73 20 74    500, and it is t
01FBE0:  68 65 20 6E 65 78 74 20 70 6C 61 79 65 72 27 73    he next player's
01FBF0:  20 74 75 72 6E 2E 0D 0A 0D 0A 20 20 20 41 4E 44     turn.....   AND
01FC00:  73 65 64 20 62 79 20 74 68 65 20 70 72 6F 67 72    sed by the progr
01FC10:  61 6D 20 61 6E 64 0D 0A 20 20 20 61 72 65 20 70    am and..   are p
01FC20:  72 69 6E 74 65 64 20 75 70 20 74 6F 20 74 68 65    rinted up to the
01FC30:  20 20 72 69 67 68 74 20 20 6F 66 20 20 74 68 65      right  of  the
01FC40:  20 20 64 65 61 6C 74 20 20 6F 75 74 20 63 61 72      dealt  out car
01FC50:  64 73 2E 20 20 41 6C 6C 20 73 69 78 20 70 6C 61    ds.  All six pla
01FC60:  79 65 72 73 27 0D 0A 20 20 20 73 63 6F 72 65 73    yers'..   scores
01FC70:  20 61 72 65 20 73 65 74 20 74 6F 20 30 20 72 65     are set to 0 re
01FC80:  67 61 72 64 6C 65 73 73 20 6F 66 20 68 6F 77 20    gardless of how 
01FC90:  20 6D 61 6E 79 20 61 72 65 20 70 6C 61 79 69 6E     many are playin
01FCA0:  67 20 61 73 20 6C 69 6E 65 20 31 35 30 20 63 68    g as line 150 ch
01FCB0:  65 63 6B 73 0D 0A 20 20 20 74 68 65 20 73 75 6D    ecks..   the sum
01FCC0:  20 74 6F 74 61 6C 20 6F 66 20 70 61 69 72 73 20     total of pairs 
01FCD0:  77 6F 6E 20 74 6F 20 64 65 74 65 72 6D 69 6E 65    won to determine
01FCE0:  20 77 68 65 6E 20 74 68 65 20 67 61 6D 65 20 65     when the game e
01FCF0:  6E 64 73 2E 0D 0A 0D 0A 20 20 20 54 41 4B 49 4E    nds.....   TAKIN
01FD00:  47 20 54 55 52 4E 53 0D 0A 20 20 20 57 65 20 6E    G TURNS..   We n
01FD10:  6F 77 20 47 4F 53 55 42 20 74 68 65 20 6D 61 69    ow GOSUB the mai
01FD20:  6E 20 6C 6F 6F 70 20 20 69 6E 20 20 32 30 30 30    n loop  in  2000
01FD30:  20 20 66 6F 72 20 20 65 61 63 68 20 70 6C 61 79      for  each play
01FD40:  65 72 27 73 20 74 75 72 6E 2E 20 20 54 68 65 20    er's turn.  The 
01FD50:  63 75 72 73 6F 72 0D 0A 20 20 20 73 74 61 72 74    cursor..   start
01FD60:  73 20 6F 66 66 20 61 74 20 28 30 2C 30 29 20 61    s off at (0,0) a
01FD70:  6E 64 20 74 68 65 20 70 6F 73 69 74 69 6F 6E 20    nd the position 
01FD80:  20 6F 66 20 74 68 65 20 6C 61 73 74 20 63 61 72     of the last car
01FD90:  64 20 63 68 6F 73 65 6E 2C 20 28 72 31 2C 63 31    d chosen, (r1,c1
01FDA0:  29 2C 20 69 73 0D 0A 20 20 20 73 65 74 20 74 6F    ), is..   set to
01FDB0:  20 62 65 20 28 2D 31 2C 2D 31 29 20 61 73 20 74     be (-1,-1) as t
01FDC0:  68 69 73 20 69 73 20 20 6F 75 74 73 69 64 65 20    his is  outside 
01FDD0:  20 74 68 65 20 70 6C 61 79 69 6E 67 20 61 72 65     the playing are
01FDE0:  61 20 73 6F 20 77 6F 6E 27 74 20 69 6E 74 65 72    a so won't inter
01FDF0:  66 65 72 65 0D 0A 20 20 20 77 69 74 68 20 74 68    fere..   with th
01FE00:  20 54 48 45 20 57 49 4E 4E 45 52 20 49 53 2E 2E     THE WINNER IS..
01FE10:  2E 0D 0A 20 20 20 4F 6E 63 65 20 61 6C 6C 20 74    ...   Once all t
01FE20:  68 65 20 70 61 69 72 73 20 68 61 76 65 20 62 65    he pairs have be
01FE30:  65 6E 20 77 6F 6E 2C 20 74 68 65 20 57 48 49 4C    en won, the WHIL
01FE40:  45 2D 57 45 4E 44 20 6C 6F 6F 70 20 69 6E 20 6C    E-WEND loop in l
01FE50:  69 6E 65 20 31 35 30 20 65 6E 64 73 20 61 6E 64    ine 150 ends and
01FE60:  0D 0A 20 20 20 77 65 20 67 65 74 20 6F 6E 74 6F    ..   we get onto
01FE70:  20 74 68 65 20 62 75 73 69 6E 65 73 73 20 20 6F     the business  o
01FE80:  66 20 20 77 6F 72 6B 69 6E 67 20 20 6F 75 74 20    f  working  out 
01FE90:  20 74 68 65 20 20 77 69 6E 6E 65 72 2E 20 20 41     the  winner.  A
01FEA0:  73 20 6D 6F 72 65 20 74 68 61 6E 20 6F 6E 65 0D    s more than one.
01FEB0:  0A 20 20 20 70 6C 61 79 65 72 20 6D 69 67 68 74    .   player might
01FEC0:  20 68 61 76 65 20 67 6F 74 20 74 68 65 20 68 69     have got the hi
01FED0:  67 68 65 73 74 20 6E 75 6D 62 65 72 20 6F 66 20    ghest number of 
01FEE0:  70 61 69 72 73 20 77 65 20 73 74 6F 72 65 20 61    pairs we store a
01FEF0:  20 63 68 61 72 61 63 74 65 72 20 66 6F 72 0D 0A     character for..
01FF00:  20 20 20 65 61 63 68 20 6F 66 20 74 68 65 20 77       each of the w
01FF10:  69 6E 6E 65 72 73 20 69 6E 20 77 69 6E 24 2C 20    inners in win$, 
01FF20:  61 6E 64 20 74 68 65 20 6C 65 6E 67 74 68 20 6F    and the length o
01FF30:  66 20 77 69 6E 24 20 73 68 6F 77 73 20 68 6F 77    f win$ shows how
01FF40:  20 6D 61 6E 79 20 77 69 6E 6E 65 72 73 0D 0A 20     many winners.. 
01FF50:  20 20 74 68 65 72 65 20 61 72 65 2E 20 20 57 65      there are.  We
01FF60:  20 63 61 6E 20 74 68 65 6E 20 20 70 72 69 6E 74     can then  print
01FF70:  20 20 75 70 20 20 61 70 70 72 6F 70 72 69 61 74      up  appropriat
01FF80:  65 20 63 6F 6E 67 72 61 74 75 6C 61 74 6F 72 79    e congratulatory
01FF90:  20 6D 65 73 73 61 67 65 73 20 69 6E 0D 0A 20 20     messages in..  
01FFA0:  20 6C 69 6E 65 20 32 32 30 2E 20 20 4C 69 6E 65     line 220.  Line
01FFB0:  20 32 33 30 20 77 61 69 74 73 20 66 6F 72 20 79     230 waits for y
01FFC0:  6F 75 20 20 74 6F 20 20 64 65 63 69 64 65 20 77    ou  to  decide w
01FFD0:  68 65 74 68 65 72 20 74 6F 20 70 6C 61 79 20 61    hether to play a
01FFE0:  67 61 69 6E 20 6F 72 20 6E 6F 74 0D 0A 20 20 20    gain or not..   
01FFF0:  62 79 20 70 72 65 73 73 69 6E 67 20 22 50 22 20    by pressing "P" 
020000:  65 20 70 72 69 6E 74 69 6E 67 20 75 70 20 6F 66    e printing up of
020010:  20 74 68 65 20 20 63 75 72 73 6F 72 2E 20 20 20     the  cursor.   
020020:  47 4F 53 55 42 62 69 6E 67 20 20 32 35 30 30 20    GOSUBbing  2500 
020030:  74 65 6C 6C 73 20 74 68 65 20 70 6C 61 79 65 72    tells the player
020040:  20 74 6F 0D 0A 20 20 20 63 68 6F 6F 73 65 20 22     to..   choose "
020050:  61 20 63 61 72 64 22 20 6F 72 20 22 61 6E 6F 74    a card" or "anot
020060:  68 65 72 20 63 61 72 64 22 20 20 64 65 70 65 6E    her card"  depen
020070:  64 69 6E 67 20 20 6F 6E 20 20 74 68 65 20 76 61    ding  on  the va
020080:  6C 75 65 20 6F 66 20 6D 75 64 24 20 2D 20 74 68    lue of mud$ - th
020090:  69 73 0D 0A 20 20 20 73 61 76 65 73 20 68 61 76    is..   saves hav
0200A0:  69 6E 67 20 74 6F 20 70 75 74 20 69 6E 20 74 68    ing to put in th
0200B0:  65 20 20 73 61 6D 65 20 20 72 6F 75 74 69 6E 65    e  same  routine
0200C0:  20 20 74 77 69 63 65 2E 20 20 4C 69 6E 65 20 32      twice.  Line 2
0200D0:  35 32 30 20 77 61 69 74 73 20 66 6F 72 20 74 68    520 waits for th
0200E0:  65 0D 0A 20 20 20 63 75 72 73 6F 72 20 6B 65 79    e..   cursor key
0200F0:  73 20 6F 72 20 74 68 65 20 45 4E 54 45 52 2F 52    s or the ENTER/R
020100:  45 54 55 52 4E 20 6B 65 79 20 20 74 6F 20 20 62    ETURN key  to  b
020110:  65 20 20 70 72 65 73 73 65 64 2E 20 20 49 74 20    e  pressed.  It 
020120:  6F 6E 6C 79 20 72 65 73 70 6F 6E 64 73 20 74 6F    only responds to
020130:  0D 0A 20 20 20 74 68 65 20 45 4E 54 45 52 2F 52    ..   the ENTER/R
020140:  45 54 55 52 4E 20 6B 65 79 20 69 66 20 74 68 65    ETURN key if the
020150:  72 65 20 69 73 20 61 20 63 61 72 64 20 20 69 6E    re is a card  in
020160:  20 74 68 61 74 20 70 6F 73 69 74 69 6F 6E 2C 20     that position, 
020170:  69 6E 20 77 68 69 63 68 20 63 61 73 65 20 61 0D    in which case a.
020180:  0A 20 20 20 63 61 72 64 20 68 61 73 20 62 65 65    .   card has bee
020190:  6E 20 73 65 6C 65 63 74 65 64 20 61 6E 64 20 77    n selected and w
0201A0:  65 20 63 61 6E 20 52 45 54 55 52 4E 2E 0D 0A 0D    e can RETURN....
0201B0:  0A 20 20 20 49 66 20 61 20 63 75 72 73 6F 72 20    .   If a cursor 
0201C0:  6B 65 79 20 69 73 20 70 72 65 73 73 65 64 20 77    key is pressed w
0201D0:  65 20 20 6E 65 65 64 20 20 74 6F 20 20 6D 6F 76    e  need  to  mov
0201E0:  65 20 74 68 65 20 63 75 72 73 6F 72 2E 20 20 54    e the cursor.  T
0201F0:  68 69 73 20 69 73 20 64 6F 6E 65 20 69 6E 0D 0A    his is done in..
020200:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
020210:  1B 00 01 00 02 09 4E E5 1B 00 C3 02 00 00 00 02    ......N.........
020220:  1B 00 C8 02 00 00 00 02 1B 00 C4 02 00 00 00 02    ................
020230:  1B 00 C9 02 00 00 00 02 1B 00 C5 02 00 00 00 02    ................
020240:  1B 00 C1 02 00 00 00 02 1B 00 C6 02 00 00 00 02    ................
020250:  1B 00 C2 02 00 00 00 02 1B 00 C7 02 00 00 00 02    ................
020260:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
020270:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
020280:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
020290:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0202A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0202B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0202C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0202D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0202E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0202F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
020300:  3B 22 2E 22 20 45 4C 53 45 20 50 52 49 4E 54 22    ;"." ELSE PRINT"
020310:  73 20 61 72 65 3A 22 3A 0D 0A 20 20 20 20 20 20    s are:":..      
020320:  20 46 4F 52 20 6E 3D 31 20 54 4F 20 4C 45 4E 28     FOR n=1 TO LEN(
020330:  77 69 6E 24 29 3A 50 52 49 4E 54 20 70 6C 24 28    win$):PRINT pl$(
020340:  41 53 43 28 4D 49 44 24 28 77 69 6E 24 2C 6E 2C    ASC(MID$(win$,n,
020350:  31 29 29 29 3A 4E 45 58 54 0D 0A 20 20 20 32 33    1))):NEXT..   23
020360:  30 20 4C 4F 43 41 54 45 23 31 2C 31 2C 31 3A 50    0 LOCATE#1,1,1:P
020370:  52 49 4E 54 23 31 2C 22 50 72 65 73 73 20 50 20    RINT#1,"Press P 
020380:  74 6F 20 70 6C 61 79 20 61 67 61 69 6E 2C 20 51    to play again, Q
020390:  20 74 6F 20 71 75 69 74 22 3B 43 48 52 24 28 32     to quit";CHR$(2
0203A0:  30 29 3B 3A 0D 0A 20 20 20 20 20 20 20 61 24 3D    0);:..       a$=
0203B0:  22 22 3A 57 48 49 4C 45 20 61 24 3C 22 50 22 20    "":WHILE a$<"P" 
0203C0:  4F 52 20 61 24 3E 22 51 22 3A 61 24 3D 55 50 50    OR a$>"Q":a$=UPP
0203D0:  45 52 24 28 49 4E 4B 45 59 24 29 3A 57 45 4E 44    ER$(INKEY$):WEND
0203E0:  0D 0A 20 20 20 32 34 30 20 49 46 20 61 24 3D 22    ..   240 IF a$="
0203F0:  50 22 20 47 4F 54 4F 20 35 30 0D 0A 20 20 20 32    P" GOTO 50..   2
020400:  35 30 20 43 41 4C 4C 20 26 42 43 30 32 3A 43 41    50 CALL &BC02:CA
020410:  4C 4C 20 26 42 42 34 45 3A 4D 4F 44 45 20 31 3A    LL &BB4E:MODE 1:
020420:  45 4E 44 0D 0A 20 20 20 31 30 30 30 20 4C 4F 43    END..   1000 LOC
020430:  41 54 45 23 31 2C 31 30 2C 31 3A 50 52 49 4E 54    ATE#1,10,1:PRINT
020440:  23 31 2C 43 48 52 24 28 31 37 29 3B 22 44 65 61    #1,CHR$(17);"Dea
020450:  6C 69 6E 67 2E 2E 2E 22 3B 43 48 52 24 28 32 30    ling...";CHR$(20
020460:  29 3B 0D 0A 20 20 20 31 30 31 30 20 6E 3D 35 32    );..   1010 n=52
020470:  3A 46 4F 52 20 72 6F 77 3D 30 20 54 4F 20 36 3A    :FOR row=0 TO 6:
020480:  46 4F 52 20 63 6F 6C 3D 30 20 54 4F 20 36 3A 63    FOR col=0 TO 6:c
020490:  64 65 6C 3D 49 4E 54 28 52 4E 44 2A 6E 2B 31 29    del=INT(RND*n+1)
0204A0:  3A 0D 0A 20 20 20 20 20 20 20 20 63 28 72 6F 77    :..        c(row
0204B0:  2C 63 6F 6C 29 3D 70 61 63 6B 28 63 64 65 6C 29    ,col)=pack(cdel)
0204C0:  3A 70 61 63 6B 28 63 64 65 6C 29 3D 70 61 63 6B    :pack(cdel)=pack
0204D0:  28 6E 29 3A 47 4F 53 55 42 20 33 35 30 30 3A 6E    (n):GOSUB 3500:n
0204E0:  3D 6E 2D 31 3A 4E 45 58 54 3A 4E 45 58 54 0D 0A    =n-1:NEXT:NEXT..
0204F0:  20 20 20 31 30 32 30 20 46 4F 52 20 63 6F 6C 3D       1020 FOR col=
020500:  00 44 49 53 43 4D 45 4E 55 42 41 53 00 00 00 00    .DISCMENUBAS....
020510:  00 00 00 00 00 70 01 00 74 03 00 00 00 00 00 00    .....p..t.......
020520:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
020530:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
020540:  74 03 00 8D 04 A6 20 A3 20 03 00 00 F5 01 0D 00    t..... £ .......
020550:  00 F5 EF FF 1D 28 03 00 00 F5 29 01 D5 01 A1 20    .....(....).... 
020560:  03 00 00 F5 F2 22 22 20 EB 20 7C 00 55 53 45 D2    ....."" . |.USE.
020570:  2C 0D 00 00 F5 01 8A 01 84 01 0D 00 00 F6 EF FF    ,...............
020580:  B5 00 0A 00 8E 20 61 2D 7A 01 AA 20 FF 42 F5 19    ..... a-z.. .B..
020590:  22 01 0D 00 00 E1 EF FF 1B 28 FF 42 F4 0F 29 01    "........(.B..).
0205A0:  9E 20 0D 00 00 F8 EF 0E 20 EC 20 19 21 01 C3 20    . ...... . .!.. 
0205B0:  03 00 00 E1 01 BE 20 0D 00 00 E1 F4 0D 00 00 F8    ...... .........
0205C0:  2C FF 1D 28 22 26 22 F4 03 00 00 E1 29 01 B0 01    ,..("&".....)...
0205D0:  8C 20 43 44 2C 37 38 2C 42 42 2C 34 43 2C 44 44    . CD,78,BB,4C,DD
0205E0:  2C 36 45 2C 30 2C 44 44 2C 36 36 2C 31 2C 34 36    ,6E,0,DD,66,1,46
0205F0:  2C 37 38 2C 42 37 2C 43 38 2C 32 33 2C 35 45 2C    ,78,B7,C8,23,5E,
020600:  32 33 2C 36 36 2C 36 42 2C 43 44 2C 36 30 2C 42    23,66,6B,CD,60,B
020610:  42 2C 37 37 2C 32 33 2C 43 2C 37 39 2C 45 35 2C    B,77,23,C,79,E5,
020620:  43 44 2C 36 46 2C 42 42 2C 45 31 2C 31 30 2C 46    CD,6F,BB,E1,10,F
020630:  32 2C 43 39 00 48 00 14 00 83 20 1C 4E BB 01 83    2,C9.H.... .N...
020640:  20 1C 02 BC 01 83 20 1C BA BB 01 AD 20 10 01 BF     ..... ..... ...
020650:  20 FF 03 28 19 17 29 F4 FF 03 28 0F 29 01 0D 00     ..(..)...(.)...
020660:  00 F8 EF 19 64 01 0D 00 00 F9 EF 1A 28 01 01 84    ....d.......(...
020670:  01 0D 00 00 F6 EF FF 7F 28 23 0E 29 00 56 00 1E    ........(#.).V..
020680:  00 D6 20 0F 01 D0 01 03 00 00 E6 EF FF 16 28 19    .. ...........(.
020690:  0C 29 01 D6 20 AC 28 03 00 00 E6 2C 17 2C 0F 29    .).. .(....,.,.)
0206A0:  F2 22 2E 22 20 FA 20 AC 28 03 00 00 E6 2C 16 2C    ."." . .(....,.,
0206B0:  0F 29 F2 22 3A 22 01 AE 20 0D 00 00 F8 2C 0D 00    .).":".. ....,..
0206C0:  00 F9 01 BF 20 FF 03 28 19 D7 29 3B 01 9F 20 1E    .... ..(..);.. .
0206D0:  50 00 00 E6 00 28 00 D6 20 FF 0A 28 19 2F 29 F4    P....(.. ..(./).
0206E0:  FF 0A 28 19 12 29 F4 FF 0A 28 17 29 EF F5 11 01    ..(..)...(.)....
0206F0:  0D 00 00 E2 EF 0D 00 00 F8 01 0D 00 00 E3 EF 0D    ................
020700:  30 20 54 4F 20 32 3A 63 64 65 6C 3D 49 4E 54 28    0 TO 2:cdel=INT(
020710:  52 4E 44 28 31 29 2A 6E 2B 31 29 3A 63 28 72 6F    RND(1)*n+1):c(ro
020720:  77 2C 63 6F 6C 29 3D 70 61 63 6B 28 63 64 65 6C    w,col)=pack(cdel
020730:  29 3A 0D 0A 20 20 20 20 20 20 20 20 70 61 63 6B    ):..        pack
020740:  28 63 64 65 6C 29 3D 70 61 63 6B 28 6E 29 3A 47    (cdel)=pack(n):G
020750:  4F 53 55 42 20 33 35 30 30 3A 6E 3D 6E 2D 31 3A    OSUB 3500:n=n-1:
020760:  4E 45 58 54 3A 52 45 54 55 52 4E 0D 0A 20 20 20    NEXT:RETURN..   
020770:  32 30 30 30 20 72 6F 77 3D 30 3A 63 6F 6C 3D 30    2000 row=0:col=0
020780:  3A 72 31 3D 2D 31 3A 63 31 3D 2D 31 3A 47 4F 53    :r1=-1:c1=-1:GOS
020790:  55 42 20 34 35 30 30 0D 0A 20 20 20 32 30 31 30    UB 4500..   2010
0207A0:  20 6D 75 64 24 3D 22 22 3A 47 4F 53 55 42 20 32     mud$="":GOSUB 2
0207B0:  35 30 30 3A 47 4F 53 55 42 20 33 30 30 30 3A 72    500:GOSUB 3000:r
0207C0:  31 3D 72 6F 77 3A 63 31 3D 63 6F 6C 3A 63 61 72    1=row:c1=col:car
0207D0:  64 73 65 6C 3D 63 61 72 64 0D 0A 20 20 20 32 30    dsel=card..   20
0207E0:  32 30 20 6D 75 64 24 3D 22 6E 6F 74 68 65 72 22    20 mud$="nother"
0207F0:  3A 47 4F 53 55 42 20 32 35 30 30 0D 0A 20 20 20    :GOSUB 2500..   
020800:  32 30 33 30 20 49 46 20 72 6F 77 3C 3E 72 31 20    2030 IF row<>r1 
020810:  4F 52 20 63 6F 6C 3C 3E 63 31 20 54 48 45 4E 20    OR col<>c1 THEN 
020820:  47 4F 53 55 42 20 33 30 30 30 20 45 4C 53 45 20    GOSUB 3000 ELSE 
020830:  32 30 32 30 0D 0A 20 20 20 32 30 34 30 20 49 46    2020..   2040 IF
020840:  20 63 61 72 64 3D 63 61 72 64 73 65 6C 20 54 48     card=cardsel TH
020850:  45 4E 20 32 31 30 30 20 45 4C 53 45 20 32 32 30    EN 2100 ELSE 220
020860:  30 0D 0A 20 20 20 32 31 30 30 20 4C 4F 43 41 54    0..   2100 LOCAT
020870:  45 23 31 2C 31 2C 31 3A 50 52 49 4E 54 23 31 2C    E#1,1,1:PRINT#1,
020880:  22 54 68 65 79 20 6D 61 74 63 68 21 20 57 65 6C    "They match! Wel
020890:  6C 20 64 6F 6E 65 20 22 3B 70 6C 24 28 74 75 72    l done ";pl$(tur
0208A0:  6E 29 3B 22 2E 22 3B 43 48 52 24 28 32 30 29 3A    n);".";CHR$(20):
0208B0:  0D 0A 20 20 20 20 20 20 20 20 46 4F 52 20 64 65    ..        FOR de
0208C0:  6C 61 79 3D 31 20 54 4F 20 35 30 30 3A 4E 45 58    lay=1 TO 500:NEX
0208D0:  54 0D 0A 20 20 20 32 31 31 30 20 47 4F 53 55 42    T..   2110 GOSUB
0208E0:  20 34 30 30 30 3A 63 28 72 6F 77 2C 63 6F 6C 29     4000:c(row,col)
0208F0:  3D 30 3A 72 6F 77 3D 72 31 3A 63 6F 6C 3D 63 31    =0:row=r1:col=c1
020900:  00 00 F9 01 0D 00 00 F8 EF FF 76 28 0E 2C FF 77    ..........v(.,.w
020910:  28 1A 78 02 2C 0D 00 00 F8 F4 11 F6 28 28 FF 0A    (.x.,.......((..
020920:  28 16 29 EE F5 0F 29 F5 28 FF 0A 28 0F 29 EE F5    (.)...).(..(.)..
020930:  0F 29 29 F6 28 12 F4 11 F6 28 FF 0A 28 19 15 29    .)).(....(..(..)
020940:  EF F5 0F 29 29 29 29 01 0D 00 00 F9 EF FF 76 28    ...)))).......v(
020950:  19 0F 2C FF 77 28 1A 8F 01 2C 0D 00 00 F9 F4 11    ..,.w(...,......
020960:  F6 28 28 FF 0A 28 10 29 EE F5 0F 29 F5 28 FF 0A    .((..(.)...).(..
020970:  28 0E 29 EE F5 0F 29 29 F6 28 28 FF 0A 28 19 15    (.)...)).((..(..
020980:  29 EF F5 0F 29 F4 10 29 29 29 01 AE 20 0D 00 00    )...)..))).. ...
020990:  E2 2C 0D 00 00 E3 01 BF 20 FF 03 28 19 D7 29 3B    .,...... ..(..);
0209A0:  01 AE 20 0D 00 00 F8 2C 0D 00 00 F9 01 BF 20 FF    .. ....,...... .
0209B0:  03 28 19 D7 29 3B 01 D5 00 93 00 32 00 9F 20 1E    .(..);.....2.. .
0209C0:  50 00 01 AE 20 0D 00 00 F8 2C 0D 00 00 F9 01 BF    P... ....,......
0209D0:  20 FF 03 28 19 D7 29 3B 01 0D 00 00 F0 EF 28 0D     ..(..);......(.
0209E0:  00 00 F8 F9 19 A0 29 F6 19 14 F4 0F 01 0D 00 00    ......).........
0209F0:  F1 EF 28 1A 90 01 F5 0D 00 00 F9 29 F9 19 10 F4    ..(........)....
020A00:  0F 01 A9 20 0D 00 00 F0 2C 0D 00 00 F1 01 83 20    ... ....,...... 
020A10:  0D 00 00 E1 2C 40 03 00 00 E6 01 D5 01 D1 01 A1    ....,@..........
020A20:  20 AC 28 03 00 00 E6 2C 17 2C 0F 29 EF 22 2E 22     .(....,.,.)."."
020A30:  20 EB 20 AA 20 FF 42 F4 19 22 01 83 20 1C BA BB     . . .B..".. ...
020A40:  01 AD 20 0F 01 CA 20 03 00 00 E6 00 75 00 3C 00    .. ... .....u.<.
020A50:  0D 00 00 F5 EF 19 10 01 D6 20 0D 00 00 F5 20 FA    ......... .... .
020A60:  20 F5 19 10 01 A9 20 0F 2C 0D 00 00 F6 01 BF 22     ..... .,......"
020A70:  55 73 65 72 3A 20 22 F4 FF 03 28 19 14 29 3B 01    User: "...(..);.
020A80:  A6 20 A3 20 03 00 00 F5 01 0D 00 00 F5 EF FF 1D    . £ ............
020A90:  28 03 00 00 F5 29 01 D5 01 A1 20 03 00 00 F5 F2    (....).... .....
020AA0:  22 22 20 EB 20 7C 00 55 53 45 D2 2C 0D 00 00 F5    "" . |.USE.,....
020AB0:  01 8A 01 84 01 0D 00 00 F6 EF FF 7F 28 23 0E 29    ............(#.)
020AC0:  00 06 00 46 00 D5 00 2B 00 50 00 D6 20 FF 0A 28    ...F...+.P.. ..(
020AD0:  19 2F 29 F4 FF 0A 28 19 12 29 F4 FF 0A 28 17 29    ./)...(..)...(.)
020AE0:  EE F5 11 01 D5 01 D6 20 FF 43 F2 22 22 01 D5 01    ....... .C.""...
020AF0:  C9 00 00 00 1A 2C 44 44 2C 36 36 2C 31 2C 34 36    .....,DD,66,1,46
020B00:  3A 63 28 72 6F 77 2C 63 6F 6C 29 3D 30 3A 47 4F    :c(row,col)=0:GO
020B10:  53 55 42 20 34 30 30 30 0D 0A 20 20 20 32 31 32    SUB 4000..   212
020B20:  30 20 70 77 28 74 75 72 6E 29 3D 70 77 28 74 75    0 pw(turn)=pw(tu
020B30:  72 6E 29 2B 31 3A 4C 4F 43 41 54 45 20 32 37 2C    rn)+1:LOCATE 27,
020B40:  74 75 72 6E 2A 33 2D 31 3A 50 41 50 45 52 20 33    turn*3-1:PAPER 3
020B50:  3A 50 45 4E 20 32 3A 0D 0A 20 20 20 20 20 20 20    :PEN 2:..       
020B60:  20 50 52 49 4E 54 20 70 77 28 74 75 72 6E 29 3A     PRINT pw(turn):
020B70:  52 45 54 55 52 4E 0D 0A 20 20 20 32 32 30 30 20    RETURN..   2200 
020B80:  4C 4F 43 41 54 45 23 31 2C 31 2C 31 3A 50 52 49    LOCATE#1,1,1:PRI
020B90:  4E 54 23 31 2C 22 54 68 65 79 20 64 6F 6E 27 74    NT#1,"They don't
020BA0:  20 6D 61 74 63 68 21 22 3B 43 48 52 24 28 32 30     match!";CHR$(20
020BB0:  29 3A 0D 0A 20 20 20 20 20 20 20 20 46 4F 52 20    ):..        FOR 
020BC0:  64 65 6C 61 79 3D 31 20 54 4F 20 35 30 30 30 3A    delay=1 TO 5000:
020BD0:  4E 45 58 54 0D 0A 20 20 20 32 32 31 30 20 47 4F    NEXT..   2210 GO
020BE0:  53 55 42 20 33 35 30 30 3A 72 6F 77 3D 72 31 3A    SUB 3500:row=r1:
020BF0:  63 6F 6C 3D 63 31 3A 47 4F 53 55 42 20 33 35 30    col=c1:GOSUB 350
020C00:  30 3A 74 75 72 6E 3D 28 74 75 72 6E 20 4D 4F 44    0:turn=(turn MOD
020C10:  20 6E 70 6C 29 2B 31 3A 52 45 54 55 52 4E 0D 0A     npl)+1:RETURN..
020C20:  20 20 20 32 35 30 30 20 4C 4F 43 41 54 45 23 31       2500 LOCATE#1
020C30:  2C 31 2C 31 3A 50 52 49 4E 54 23 31 2C 22 43 68    ,1,1:PRINT#1,"Ch
020C40:  6F 6F 73 65 20 61 22 3B 6D 75 64 24 3B 22 20 63    oose a";mud$;" c
020C50:  61 72 64 2C 20 22 3B 70 6C 24 28 74 75 72 6E 29    ard, ";pl$(turn)
020C60:  3B 22 2E 22 3B 43 48 52 24 28 32 30 29 0D 0A 20    ;".";CHR$(20).. 
020C70:  20 20 32 35 31 30 20 6B 70 24 3D 22 22 3A 57 48      2510 kp$="":WH
020C80:  49 4C 45 20 28 6B 70 24 3C 43 48 52 24 28 32 34    ILE (kp$<CHR$(24
020C90:  30 29 20 4F 52 20 6B 70 24 3E 43 48 52 24 28 32    0) OR kp$>CHR$(2
020CA0:  34 33 29 29 20 41 4E 44 20 6B 70 24 3C 3E 43 48    43)) AND kp$<>CH
020CB0:  52 24 28 31 33 29 3A 0D 0A 20 20 20 20 20 20 20    R$(13):..       
020CC0:  20 6B 70 24 3D 55 50 50 45 52 24 28 49 4E 4B 45     kp$=UPPER$(INKE
020CD0:  59 24 29 3A 57 45 4E 44 0D 0A 20 20 20 32 35 32    Y$):WEND..   252
020CE0:  30 20 49 46 20 6B 70 24 3D 43 48 52 24 28 31 33    0 IF kp$=CHR$(13
020CF0:  29 20 41 4E 44 20 63 28 72 6F 77 2C 63 6F 6C 29    ) AND c(row,col)
020D00:  32 2E 30 20 28 53 69 6D 70 6C 65 20 76 65 72 73    2.0 (Simple vers
020D10:  69 6F 6E 29 2C 20 44 65 63 20 31 39 39 37 20 62    ion), Dec 1997 b
020D20:  79 20 48 69 6C 61 72 79 20 50 68 69 6C 6C 69 70    y Hilary Phillip
020D30:  73 0D 0A 20 20 20 31 30 20 53 59 4D 42 4F 4C 20    s..   10 SYMBOL 
020D40:  41 46 54 45 52 20 32 35 35 3A 53 59 4D 42 4F 4C    AFTER 255:SYMBOL
020D50:  20 32 35 35 2C 37 36 2C 32 31 30 2C 38 32 2C 38     255,76,210,82,8
020D60:  32 2C 38 32 2C 38 32 2C 37 36 2C 30 0D 0A 20 20    2,82,82,76,0..  
020D70:  20 33 30 20 44 49 4D 20 70 61 63 6B 28 35 32 29     30 DIM pack(52)
020D80:  3A 44 49 4D 20 63 28 37 2C 36 29 3A 44 49 4D 20    :DIM c(7,6):DIM 
020D90:  70 6C 24 28 36 29 3A 44 49 4D 20 70 77 28 36 29    pl$(6):DIM pw(6)
020DA0:  0D 0A 20 20 20 34 30 20 63 61 72 64 24 3D 22 41    ..   40 card$="A
020DB0:  32 33 34 35 36 37 38 39 22 2B 43 48 52 24 28 32    23456789"+CHR$(2
020DC0:  35 35 29 2B 22 4A 51 4B 22 0D 0A 20 20 20 35 30    55)+"JQK"..   50
020DD0:  20 46 4F 52 20 6E 3D 31 20 54 4F 20 35 32 3A 70     FOR n=1 TO 52:p
020DE0:  61 63 6B 28 6E 29 3D 6E 2B 28 6E 2D 31 29 5C 31    ack(n)=n+(n-1)\1
020DF0:  33 3A 4E 45 58 54 0D 0A 20 20 20 37 30 20 49 4E    3:NEXT..   70 IN
020E00:  4B 20 30 2C 30 3A 49 4E 4B 20 31 2C 36 3A 49 4E    K 0,0:INK 1,6:IN
020E10:  4B 20 32 2C 32 36 3A 49 4E 4B 20 33 2C 39 3A 4D    K 2,26:INK 3,9:M
020E20:  4F 44 45 20 31 3A 50 41 50 45 52 20 33 3A 43 4C    ODE 1:PAPER 3:CL
020E30:  53 0D 0A 20 20 20 38 30 20 57 49 4E 44 4F 57 23    S..   80 WINDOW#
020E40:  31 2C 31 2C 34 30 2C 32 34 2C 32 35 3A 50 41 50    1,1,40,24,25:PAP
020E50:  45 52 23 31 2C 33 3A 50 45 4E 23 31 2C 32 3A 43    ER#1,3:PEN#1,2:C
020E60:  4C 53 23 31 0D 0A 20 20 20 31 30 30 20 47 4F 53    LS#1..   100 GOS
020E70:  55 42 20 31 30 30 30 0D 0A 20 20 20 31 31 30 20    UB 1000..   110 
020E80:  4C 4F 43 41 54 45 23 31 2C 31 2C 31 3A 50 52 49    LOCATE#1,1,1:PRI
020E90:  4E 54 23 31 2C 22 45 6E 74 65 72 20 6E 75 6D 62    NT#1,"Enter numb
020EA0:  65 72 20 6F 66 20 70 6C 61 79 65 72 73 20 28 31    er of players (1
020EB0:  2D 36 29 22 3B 3A 6E 70 6C 3D 30 3A 0D 0A 20 20    -6)";:npl=0:..  
020EC0:  20 20 20 20 20 57 48 49 4C 45 20 6E 70 6C 3C 31         WHILE npl<1
020ED0:  20 4F 52 20 6E 70 6C 3E 36 3A 6E 70 6C 3D 56 41     OR npl>6:npl=VA
020EE0:  4C 28 49 4E 4B 45 59 24 29 3A 57 45 4E 44 3A 50    L(INKEY$):WEND:P
020EF0:  52 49 4E 54 23 31 2C 6E 70 6C 0D 0A 20 20 20 31    RINT#1,npl..   1
020F00:  3E 30 20 54 48 45 4E 20 52 45 54 55 52 4E 0D 0A    >0 THEN RETURN..
020F10:  20 20 20 32 35 33 30 20 47 4F 53 55 42 20 34 35       2530 GOSUB 45
020F20:  32 30 3A 49 46 20 6B 70 24 3D 43 48 52 24 28 32    20:IF kp$=CHR$(2
020F30:  34 30 29 20 54 48 45 4E 20 72 6F 77 3D 28 72 6F    40) THEN row=(ro
020F40:  77 2D 31 2B 38 29 20 4D 4F 44 20 38 0D 0A 20 20    w-1+8) MOD 8..  
020F50:  20 32 35 34 30 20 49 46 20 6B 70 24 3D 43 48 52     2540 IF kp$=CHR
020F60:  24 28 32 34 31 29 20 54 48 45 4E 20 72 6F 77 3D    $(241) THEN row=
020F70:  28 72 6F 77 2B 31 29 20 4D 4F 44 20 38 0D 0A 20    (row+1) MOD 8.. 
020F80:  20 20 32 35 35 30 20 49 46 20 6B 70 24 3D 43 48      2550 IF kp$=CH
020F90:  52 24 28 32 34 32 29 20 54 48 45 4E 20 63 6F 6C    R$(242) THEN col
020FA0:  3D 28 63 6F 6C 2D 31 2B 37 29 20 4D 4F 44 20 37    =(col-1+7) MOD 7
020FB0:  0D 0A 20 20 20 32 35 36 30 20 49 46 20 6B 70 24    ..   2560 IF kp$
020FC0:  3D 43 48 52 24 28 32 34 33 29 20 54 48 45 4E 20    =CHR$(243) THEN 
020FD0:  63 6F 6C 3D 28 63 6F 6C 2B 31 29 20 4D 4F 44 20    col=(col+1) MOD 
020FE0:  37 0D 0A 20 20 20 32 35 37 30 20 47 4F 53 55 42    7..   2570 GOSUB
020FF0:  20 34 35 30 30 3A 47 4F 54 4F 20 32 35 31 30 0D     4500:GOTO 2510.
021000:  0A 20 20 20 33 30 30 30 20 73 75 69 74 3D 63 28    .   3000 suit=c(
021010:  72 6F 77 2C 63 6F 6C 29 5C 31 34 3A 63 61 72 64    row,col)\14:card
021020:  3D 63 28 72 6F 77 2C 63 6F 6C 29 20 4D 4F 44 20    =c(row,col) MOD 
021030:  31 34 3A 70 63 6F 6C 3D 4D 49 4E 28 31 2C 73 75    14:pcol=MIN(1,su
021040:  69 74 20 4D 4F 44 20 33 29 0D 0A 20 20 20 33 30    it MOD 3)..   30
021050:  31 30 20 4C 4F 43 41 54 45 20 63 6F 6C 2A 33 2B    10 LOCATE col*3+
021060:  32 2C 72 6F 77 2A 32 2B 32 3A 50 41 50 45 52 20    2,row*2+2:PAPER 
021070:  32 3A 50 45 4E 20 70 63 6F 6C 3A 50 52 49 4E 54    2:PEN pcol:PRINT
021080:  20 4D 49 44 24 28 63 61 72 64 24 2C 63 61 72 64     MID$(card$,card
021090:  2C 31 29 3B 0D 0A 20 20 20 20 20 20 20 20 43 48    ,1);..        CH
0210A0:  52 24 28 32 32 36 2B 73 75 69 74 29 3A 52 45 54    R$(226+suit):RET
0210B0:  55 52 4E 0D 0A 20 20 20 33 35 30 30 20 4C 4F 43    URN..   3500 LOC
0210C0:  41 54 45 20 63 6F 6C 2A 33 2B 32 2C 72 6F 77 2A    ATE col*3+2,row*
0210D0:  32 2B 32 3A 50 41 50 45 52 20 30 3A 50 45 4E 20    2+2:PAPER 0:PEN 
0210E0:  31 3A 50 52 49 4E 54 20 43 48 52 24 28 32 32 30    1:PRINT CHR$(220
0210F0:  29 43 48 52 24 28 32 32 32 29 3A 52 45 54 55 52    )CHR$(222):RETUR
021100:  32 30 20 46 4F 52 20 6E 3D 31 20 54 4F 20 6E 70    20 FOR n=1 TO np
021110:  6C 3A 4C 4F 43 41 54 45 23 31 2C 31 2C 31 3A 50    l:LOCATE#1,1,1:P
021120:  52 49 4E 54 23 31 2C 22 50 6C 61 79 65 72 22 3B    RINT#1,"Player";
021130:  6E 3B 22 65 6E 74 65 72 20 79 6F 75 72 20 6E 61    n;"enter your na
021140:  6D 65 3A 22 3B 0D 0A 20 20 20 20 20 20 20 43 48    me:";..       CH
021150:  52 24 28 32 30 29 3A 4C 49 4E 45 20 49 4E 50 55    R$(20):LINE INPU
021160:  54 23 31 2C 61 24 3A 70 6C 24 28 6E 29 3D 4C 45    T#1,a$:pl$(n)=LE
021170:  46 54 24 28 61 24 2C 31 36 29 0D 0A 20 20 20 31    FT$(a$,16)..   1
021180:  33 30 20 4C 4F 43 41 54 45 20 32 35 2C 6E 2A 33    30 LOCATE 25,n*3
021190:  2D 32 3A 50 41 50 45 52 20 33 3A 50 45 4E 20 32    -2:PAPER 3:PEN 2
0211A0:  3A 50 52 49 4E 54 20 70 6C 24 28 6E 29 3A 4E 45    :PRINT pl$(n):NE
0211B0:  58 54 0D 0A 20 20 20 31 34 30 20 46 4F 52 20 6E    XT..   140 FOR n
0211C0:  3D 31 20 54 4F 20 36 3A 70 77 28 6E 29 3D 30 3A    =1 TO 6:pw(n)=0:
0211D0:  4E 45 58 54 3A 74 75 72 6E 3D 31 0D 0A 20 20 20    NEXT:turn=1..   
0211E0:  31 35 30 20 57 48 49 4C 45 20 70 77 28 31 29 2B    150 WHILE pw(1)+
0211F0:  70 77 28 32 29 2B 70 77 28 33 29 2B 70 77 28 34    pw(2)+pw(3)+pw(4
021200:  29 2B 70 77 28 35 29 2B 70 77 28 36 29 3C 32 36    )+pw(5)+pw(6)<26
021210:  3A 47 4F 53 55 42 20 32 30 30 30 3A 57 45 4E 44    :GOSUB 2000:WEND
021220:  0D 0A 20 20 20 32 30 30 20 77 69 6E 24 3D 22 22    ..   200 win$=""
021230:  3A 46 4F 52 20 6E 3D 31 20 54 4F 20 6E 70 6C 3A    :FOR n=1 TO npl:
021240:  49 46 20 70 77 28 6E 29 3D 4D 41 58 28 70 77 28    IF pw(n)=MAX(pw(
021250:  31 29 2C 70 77 28 32 29 2C 70 77 28 33 29 2C 70    1),pw(2),pw(3),p
021260:  77 28 34 29 2C 70 77 28 35 29 2C 70 77 28 36 29    w(4),pw(5),pw(6)
021270:  29 0D 0A 20 20 20 20 20 20 20 54 48 45 4E 20 77    )..       THEN w
021280:  69 6E 24 3D 77 69 6E 24 2B 43 48 52 24 28 6E 29    in$=win$+CHR$(n)
021290:  0D 0A 20 20 20 32 31 30 20 4E 45 58 54 3A 4C 4F    ..   210 NEXT:LO
0212A0:  43 41 54 45 20 31 2C 39 3A 50 41 50 45 52 20 33    CATE 1,9:PAPER 3
0212B0:  3A 50 45 4E 20 32 3A 50 52 49 4E 54 22 54 68 65    :PEN 2:PRINT"The
0212C0:  20 77 69 6E 6E 65 72 22 3B 0D 0A 20 20 20 32 32     winner";..   22
0212D0:  30 20 49 46 20 4C 45 4E 28 77 69 6E 24 29 3D 31    0 IF LEN(win$)=1
0212E0:  20 54 48 45 4E 20 50 52 49 4E 54 22 20 69 73 20     THEN PRINT" is 
0212F0:  22 3B 70 6C 24 28 41 53 43 28 77 69 6E 24 29 29    ";pl$(ASC(win$))
021300:  4E 0D 0A 20 20 20 34 30 30 30 20 4C 4F 43 41 54    N..   4000 LOCAT
021310:  45 20 63 6F 6C 2A 33 2B 32 2C 72 6F 77 2A 32 2B    E col*3+2,row*2+
021320:  32 3A 50 41 50 45 52 20 33 3A 50 52 49 4E 54 20    2:PAPER 3:PRINT 
021330:  22 20 20 22 3A 52 45 54 55 52 4E 0D 0A 20 20 20    "  ":RETURN..   
021340:  34 35 30 30 20 49 46 20 72 6F 77 3C 3E 72 31 20    4500 IF row<>r1 
021350:  4F 52 20 63 6F 6C 3C 3E 63 31 20 54 48 45 4E 20    OR col<>c1 THEN 
021360:  4C 4F 43 41 54 45 20 63 6F 6C 2A 33 2B 32 2C 72    LOCATE col*3+2,r
021370:  6F 77 2A 32 2B 32 3A 50 45 4E 20 32 3A 0D 0A 20    ow*2+2:PEN 2:.. 
021380:  20 20 20 20 20 20 20 50 52 49 4E 54 20 43 48 52           PRINT CHR
021390:  24 28 32 32 29 43 48 52 24 28 31 29 43 48 52 24    $(22)CHR$(1)CHR$
0213A0:  28 31 39 37 29 43 48 52 24 28 31 39 39 29 43 48    (197)CHR$(199)CH
0213B0:  52 24 28 32 32 29 43 48 52 24 28 30 29 0D 0A 20    R$(22)CHR$(0).. 
0213C0:  20 20 34 35 31 30 20 52 45 54 55 52 4E 0D 0A 20      4510 RETURN.. 
0213D0:  20 20 34 35 32 30 20 49 46 20 72 6F 77 3C 3E 72      4520 IF row<>r
0213E0:  31 20 4F 52 20 63 6F 6C 3C 3E 63 31 20 54 48 45    1 OR col<>c1 THE
0213F0:  4E 20 49 46 20 63 28 72 6F 77 2C 63 6F 6C 29 3E    N IF c(row,col)>
021400:  30 20 54 48 45 4E 20 33 35 30 30 20 45 4C 53 45    0 THEN 3500 ELSE
021410:  20 34 30 30 30 0D 0A 20 20 20 34 35 33 30 20 52     4000..   4530 R
021420:  45 54 55 52 4E 0D 0A 1A 69 6C 6C 69 70 73 0D 0A    ETURN...illips..
021430:  0D 0A 20 20 20 59 65 73 2C 20 74 68 69 73 20 6D    ..   Yes, this m
021440:  6F 6E 74 68 20 74 68 65 20 70 72 6F 6F 66 72 65    onth the proofre
021450:  61 64 65 72 20 67 65 74 73 20 61 20 20 67 6F 20    ader gets a  go 
021460:  20 61 74 20 77 72 69 74 69 6E 67 20 61 6E 20 61     at writing an a
021470:  72 74 69 63 6C 65 2C 20 74 6F 20 67 69 76 65 0D    rticle, to give.
021480:  03 00 06 00 EC 03 D5 00 35 00 ED 03 0D 00 00 6D    ........5......m
021490:  E4 EF 28 FF 0A 28 0D 00 00 75 F0 29 EE F5 0F 29    ..(..(...u.)...)
0214A0:  F5 28 FF 0A 28 0D 00 00 64 6F F7 29 EE F5 0F 29    .(..(...do.)...)
0214B0:  01 0D 00 00 6D FA EF 0D 00 00 6D E4 00 3C 00 EE    ....m.....m..<..
0214C0:  03 0D 00 00 6B F0 EF F5 28 FF 0A 28 0D 00 00 6C    ....k...(..(...l
0214D0:  E5 29 EE F5 0F 29 F5 10 F6 28 FF 0A 28 0D 00 00    .)...)...(..(...
0214E0:  72 E9 29 EE F5 0F 29 F5 12 F6 28 FF 0A 28 0D 00    r.)...)...(..(..
0214F0:  00 66 E9 29 EE F5 0F 29 00 06 00 EF 03 D5 00 0E    .f.)...)........
021500:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
021510:  1C 00 01 00 02 09 4E E5 1C 00 C1 02 00 00 00 02    ......N.........
021520:  1C 00 C6 02 00 00 00 02 1C 00 C2 02 00 00 00 02    ................
021530:  1C 00 C7 02 00 00 00 02 1C 00 C3 02 00 00 00 02    ................
021540:  1C 00 C8 02 00 00 00 02 1C 00 C4 02 00 00 00 02    ................
021550:  1C 00 C9 02 00 00 00 02 1C 00 C5 02 00 00 00 02    ................
021560:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
021570:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
021580:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
021590:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0215A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0215B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0215C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0215D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0215E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0215F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
021600:  39 39 20 52 45 4D 20 46 69 67 75 72 65 20 31 2E    99 REM Figure 1.
021610:  36 31 0D 0A 31 30 30 20 52 45 4D 20 41 6E 20 69    61..100 REM An i
021620:  6E 65 66 66 69 63 69 65 6E 74 20 73 75 62 72 6F    nefficient subro
021630:  75 74 69 6E 65 20 74 6F 20 72 65 70 6C 61 63 65    utine to replace
021640:  20 6C 69 6E 65 20 34 30 2E 0D 0A 31 31 30 20 57     line 40...110 W
021650:  48 49 4C 45 20 49 4E 4B 45 59 28 34 37 29 3D 2D    HILE INKEY(47)=-
021660:  31 20 41 4E 44 20 49 4E 4B 45 59 28 31 38 29 3D    1 AND INKEY(18)=
021670:  2D 31 20 41 4E 44 20 49 4E 4B 45 59 28 39 29 3D    -1 AND INKEY(9)=
021680:  2D 31 0D 0A 31 32 30 20 6F 6C 64 78 3D 78 3A 6F    -1..120 oldx=x:o
021690:  6C 64 79 3D 79 0D 0A 31 33 30 20 61 64 64 78 3D    ldy=y..130 addx=
0216A0:  30 3A 61 64 64 79 3D 30 0D 0A 31 33 35 20 52 45    0:addy=0..135 RE
0216B0:  4D 20 43 68 65 63 6B 20 6B 65 79 73 0D 0A 31 34    M Check keys..14
0216C0:  30 20 49 46 20 49 4E 4B 45 59 28 38 29 3E 2D 31    0 IF INKEY(8)>-1
0216D0:  20 54 48 45 4E 20 61 64 64 78 3D 2D 31 0D 0A 31     THEN addx=-1..1
0216E0:  35 30 20 49 46 20 49 4E 4B 45 59 28 31 29 3E 2D    50 IF INKEY(1)>-
0216F0:  31 20 54 48 45 4E 20 61 64 64 78 3D 61 64 64 78    1 THEN addx=addx
021700:  2B 31 0D 0A 31 36 30 20 49 46 20 49 4E 4B 45 59    +1..160 IF INKEY
021710:  28 32 31 29 3E 2D 31 20 54 48 45 4E 20 61 64 64    (21)>-1 THEN add
021720:  78 3D 61 64 64 78 2A 34 0D 0A 31 37 30 20 61 64    x=addx*4..170 ad
021730:  64 78 3D 33 2A 61 64 64 78 0D 0A 31 38 30 20 49    dx=3*addx..180 I
021740:  46 20 49 4E 4B 45 59 28 32 29 3E 2D 31 20 54 48    F INKEY(2)>-1 TH
021750:  45 4E 20 61 64 64 79 3D 2D 31 0D 0A 31 39 30 20    EN addy=-1..190 
021760:  49 46 20 49 4E 4B 45 59 28 30 29 3E 2D 31 20 54    IF INKEY(0)>-1 T
021770:  48 45 4E 20 61 64 64 79 3D 61 64 64 79 2B 31 0D    HEN addy=addy+1.
021780:  0A 32 30 30 20 49 46 20 49 4E 4B 45 59 28 32 31    .200 IF INKEY(21
021790:  29 3E 2D 31 20 54 48 45 4E 20 61 64 64 79 3D 61    )>-1 THEN addy=a
0217A0:  64 64 79 2A 32 0D 0A 32 31 30 20 61 64 64 79 3D    ddy*2..210 addy=
0217B0:  33 2A 61 64 64 79 0D 0A 32 32 30 20 78 3D 78 2B    3*addy..220 x=x+
0217C0:  61 64 64 78 3A 79 3D 79 2B 61 64 64 79 0D 0A 32    addx:y=y+addy..2
0217D0:  32 35 20 52 45 4D 20 43 68 65 63 6B 20 78 20 26    25 REM Check x &
0217E0:  20 79 20 61 72 65 20 6F 6E 20 73 63 72 65 65 6E     y are on screen
0217F0:  0D 0A 32 33 30 20 49 46 20 78 3E 36 33 32 20 54    ..230 IF x>632 T
021800:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021810:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021820:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021830:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021840:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021850:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021860:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021870:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021880:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021890:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0218A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0218B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0218C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0218D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0218E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0218F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021900:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021910:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021920:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021930:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021940:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021950:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021960:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021970:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021980:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021990:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0219A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0219B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0219C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0219D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0219E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0219F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
021A00:  48 45 4E 20 78 3D 36 33 32 0D 0A 32 34 30 20 49    HEN x=632..240 I
021A10:  46 20 78 3C 30 20 54 48 45 4E 20 78 3D 30 0D 0A    F x<0 THEN x=0..
021A20:  32 35 30 20 49 46 20 79 3E 33 39 39 20 54 48 45    250 IF y>399 THE
021A30:  4E 20 79 3D 33 39 39 0D 0A 32 36 30 20 49 46 20    N y=399..260 IF 
021A40:  79 3C 31 35 20 54 48 45 4E 20 79 3D 31 35 0D 0A    y<15 THEN y=15..
021A50:  32 36 35 20 52 45 4D 20 52 65 6D 6F 76 65 20 70    265 REM Remove p
021A60:  6F 69 6E 74 65 72 20 61 6E 64 20 72 65 64 69 73    ointer and redis
021A70:  70 6C 61 79 0D 0A 32 37 30 20 4D 4F 56 45 20 6F    play..270 MOVE o
021A80:  6C 64 78 2C 6F 6C 64 79 3A 50 52 49 4E 54 20 43    ldx,oldy:PRINT C
021A90:  48 52 24 28 32 31 35 29 3B 0D 0A 32 38 30 20 4D    HR$(215);..280 M
021AA0:  4F 56 45 20 78 2C 79 3A 50 52 49 4E 54 20 43 48    OVE x,y:PRINT CH
021AB0:  52 24 28 32 31 35 29 3B 0D 0A 32 39 30 20 57 45    R$(215);..290 WE
021AC0:  4E 44 3A 52 45 54 55 52 4E 0D 0A 1A 6F 6E 74 68    ND:RETURN...onth
021AD0:  20 20 77 65 20 20 6D 6F 76 65 20 20 66 72 6F 6D      we  move  from
021AE0:  20 20 74 68 65 20 20 73 74 61 72 74 65 72 20 20      the  starter  
021AF0:  74 6F 20 20 61 20 20 6C 69 67 68 74 6C 79 20 67    to  a  lightly g
021B00:  EF 0F 20 EC 20 0D 00 00 6D 62 E8 F7 10 00 31 00    .. . ...mb....1.
021B10:  F5 03 95 20 0D 00 00 6D 62 EC 2C 0E 2C 0D 00 00    ... ...mb.,.,...
021B20:  6D 63 6F EC 01 AF 20 F5 0D 00 00 6D 62 EC 2C F5    mco... ....mb.,.
021B30:  10 F5 28 0D 00 00 6D E4 EF F5 0F 29 F6 12 00 1C    ..(...m....)....
021B40:  00 F6 03 9E 20 0D 00 00 64 65 6C 61 F9 EF 0E 20    .... ...dela... 
021B50:  EC 20 0D 00 00 6D 64 E5 01 B0 00 06 00 F7 03 B0    . ...md.........
021B60:  00 14 00 F8 03 BF 20 FF 03 28 19 17 29 F4 FF 03    ...... ..(..)...
021B70:  28 0E 29 3B 00 06 00 F9 03 C9 00 00 00 1A 35 30    (.);..........50
021B80:  0D 00 00 6D F0 29 01 C9 00 1C 00 E8 03 0D 00 00    ...m.)..........
021B90:  6B F0 EF 0E 01 0D 00 00 6D E4 EF 0F 01 0D 00 00    k.......m.......
021BA0:  6D FA EF 0E 00 18 00 E9 03 D6 20 28 0D 00 00 6B    m......... (...k
021BB0:  F0 20 FA 20 0D 00 00 6B E6 29 EF 0E 00 22 00 EA    . . ...k.)..."..
021BC0:  03 D6 20 28 10 F8 0D 00 00 6D F0 20 FA 20 0D 00    .. (.....m. . ..
021BD0:  00 6D E6 29 EE 0E 20 FC 20 0D 00 00 6D FA 00 3C    .m.).. . ...m..<
021BE0:  00 EB 03 0D 00 00 6D FA EF 0E 01 9F 20 1E F2 03    ......m..... ...
021BF0:  01 0D 00 00 6D F0 EF 28 0D 00 00 6D F0 F4 0D 00    ....m..(...m....
021C00:  31 30 30 20 4D 45 4D 4F 52 59 20 26 38 46 46 46    100 MEMORY &8FFF
021C10:  3A 61 3D 26 39 30 30 30 3A 46 4F 52 20 78 3D 30    :a=&9000:FOR x=0
021C20:  20 54 4F 20 31 33 3A 52 45 41 44 20 61 24 3A 50     TO 13:READ a$:P
021C30:  4F 4B 45 20 61 2B 78 2C 56 41 4C 28 22 26 22 2B    OKE a+x,VAL("&"+
021C40:  61 24 29 3A 4E 45 58 54 0D 0A 31 31 30 20 4D 4F    a$):NEXT..110 MO
021C50:  44 45 20 32 3A 50 52 49 4E 54 22 42 75 6E 6E 79    DE 2:PRINT"Bunny
021C60:  6D 65 6E 22 0D 0A 31 32 30 20 63 25 3D 30 3A 4C    men"..120 c%=0:L
021C70:  4F 43 41 54 45 20 31 2C 31 3A 43 41 4C 4C 20 26    OCATE 1,1:CALL &
021C80:  39 30 30 30 2C 40 63 25 0D 0A 31 33 30 20 50 52    9000,@c%..130 PR
021C90:  49 4E 54 3A 50 52 49 4E 54 22 54 68 65 20 6C 65    INT:PRINT"The le
021CA0:  74 74 65 72 20 61 74 20 74 68 65 20 74 6F 70 20    tter at the top 
021CB0:  6C 65 66 74 20 6F 66 20 74 68 65 20 73 63 72 65    left of the scre
021CC0:  65 6E 20 69 73 20 61 20 22 3B 43 48 52 24 28 63    en is a ";CHR$(c
021CD0:  25 29 0D 0A 31 39 30 20 44 41 54 41 20 44 44 2C    %)..190 DATA DD,
021CE0:  36 36 2C 30 31 2C 44 44 2C 36 45 2C 30 30 2C 43    66,01,DD,6E,00,C
021CF0:  44 2C 36 30 2C 42 42 2C 37 37 2C 32 33 2C 33 36    D,60,BB,77,23,36
021D00:  2C 30 30 2C 43 39 0D 0A 1A 20 24 24 24 FF 00 FF    ,00,C9... $$$...
021D10:  00 00 0A 00 00 72 01 00 10 29 00 00 00 00 00 00    .....r...)......
021D20:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
021D30:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
021D40:  10 29 00 86 03 54 0D 0A 0D 0A 46 69 67 75 72 65    .)...T....Figure
021D50:  20 32 2E 37 31 1A 00 0A 00 00 73 01 00 1E 00 00     2.71.....s.....
021D60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
021D70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
021D80:  61 64 65 72 20 66 6F 72 20 4D 49 44 49 20 7C 53    ader for MIDI |S
021D90:  45 4E 44 20 52 53 58 20 28 73 65 65 20 61 72 74    END RSX (see art
021DA0:  69 63 6C 65 20 31 31 29 0D 0A 54 55 4E 45 09 2E    icle 11)..TUNE..
021DB0:  42 41 53 09 70 72 6F 67 72 61 6D 20 74 6F 20 70    BAS.program to p
021DC0:  6C 61 79 20 61 20 74 75 6E 65 20 66 72 6F 6D 20    lay a tune from 
021DD0:  61 72 74 69 63 6C 65 20 31 32 0D 0A 0D 0A 2D 2D    article 12....--
021DE0:  2D 2D 0D 0A 2A 20 53 65 65 20 22 42 6C 61 73 74    --..* See "Blast
021DF0:  20 66 72 6F 6D 20 74 68 65 20 50 61 73 74 22 2C     from the Past",
021E00:  32 39 39 20 52 45 4D 20 46 69 67 75 72 65 20 31    299 REM Figure 1
021E10:  2E 36 31 38 0D 0A 33 30 30 20 52 45 4D 20 41 20    .618..300 REM A 
021E20:  62 65 74 74 65 72 20 73 75 62 72 6F 75 74 69 6E    better subroutin
021E30:  65 20 74 6F 20 72 65 70 6C 61 63 65 20 6C 69 6E    e to replace lin
021E40:  65 20 34 30 2E 0D 0A 33 31 30 20 57 48 49 4C 45    e 40...310 WHILE
021E50:  20 49 4E 4B 45 59 28 34 37 29 2B 49 4E 4B 45 59     INKEY(47)+INKEY
021E60:  28 31 38 29 2B 49 4E 4B 45 59 28 39 29 3D 2D 33    (18)+INKEY(9)=-3
021E70:  0D 0A 33 32 30 20 6F 6C 64 78 3D 78 3A 6F 6C 64    ..320 oldx=x:old
021E80:  79 3D 79 0D 0A 33 33 30 20 61 64 64 78 3D 30 3A    y=y..330 addx=0:
021E90:  61 64 64 79 3D 30 0D 0A 33 33 35 20 52 45 4D 20    addy=0..335 REM 
021EA0:  43 68 65 63 6B 20 6B 65 79 73 0D 0A 33 34 30 20    Check keys..340 
021EB0:  61 64 64 78 3D 28 49 4E 4B 45 59 28 38 29 3E 2D    addx=(INKEY(8)>-
021EC0:  31 29 0D 0A 33 35 30 20 61 64 64 78 3D 61 64 64    1)..350 addx=add
021ED0:  78 2D 28 49 4E 4B 45 59 28 31 29 3E 2D 31 29 0D    x-(INKEY(1)>-1).
021EE0:  0A 33 36 30 20 61 64 64 78 3D 61 64 64 78 2A 28    .360 addx=addx*(
021EF0:  34 2B 33 2A 28 49 4E 4B 45 59 28 32 31 29 3D 2D    4+3*(INKEY(21)=-
021F00:  31 29 29 0D 0A 33 37 30 20 61 64 64 78 3D 33 2A    1))..370 addx=3*
021F10:  61 64 64 78 0D 0A 33 38 30 20 61 64 64 79 3D 28    addx..380 addy=(
021F20:  49 4E 4B 45 59 28 32 29 3E 2D 31 29 0D 0A 33 39    INKEY(2)>-1)..39
021F30:  30 20 61 64 64 79 3D 61 64 64 79 2D 28 49 4E 4B    0 addy=addy-(INK
021F40:  45 59 28 30 29 3E 2D 31 29 0D 0A 34 30 30 20 61    EY(0)>-1)..400 a
021F50:  64 64 79 3D 61 64 64 79 2A 28 28 49 4E 4B 45 59    ddy=addy*((INKEY
021F60:  28 32 31 29 3D 2D 31 29 2B 32 29 0D 0A 34 31 30    (21)=-1)+2)..410
021F70:  20 61 64 64 79 3D 33 2A 61 64 64 79 0D 0A 34 32     addy=3*addy..42
021F80:  30 20 78 3D 78 2B 61 64 64 78 3A 79 3D 79 2B 61    0 x=x+addx:y=y+a
021F90:  64 64 79 0D 0A 34 32 35 20 52 45 4D 20 43 68 65    ddy..425 REM Che
021FA0:  63 6B 20 78 20 26 20 79 20 61 72 65 20 6F 6E 20    ck x & y are on 
021FB0:  73 63 72 65 65 6E 0D 0A 34 33 30 20 78 3D 4D 49    screen..430 x=MI
021FC0:  4E 28 36 33 32 2C 78 29 0D 0A 34 34 30 20 78 3D    N(632,x)..440 x=
021FD0:  4D 41 58 28 30 2C 78 29 0D 0A 34 35 30 20 79 3D    MAX(0,x)..450 y=
021FE0:  4D 49 4E 28 33 39 39 2C 79 29 0D 0A 34 36 30 20    MIN(399,y)..460 
021FF0:  79 3D 4D 41 58 28 31 35 2C 79 29 0D 0A 34 36 35    y=MAX(15,y)..465
022000:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022010:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022020:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022030:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022040:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022050:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022060:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022070:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022080:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022090:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0220A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0220B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0220C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0220D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0220E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0220F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022100:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022110:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022120:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022130:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022140:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022150:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022160:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022170:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022180:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022190:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0221A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0221B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0221C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0221D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0221E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0221F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022200:  20 52 45 4D 20 52 65 6D 6F 76 65 20 70 6F 69 6E     REM Remove poin
022210:  74 65 72 20 61 6E 64 20 72 65 64 69 73 70 6C 61    ter and redispla
022220:  79 0D 0A 34 37 30 20 4D 4F 56 45 20 6F 6C 64 78    y..470 MOVE oldx
022230:  2C 6F 6C 64 79 3A 50 52 49 4E 54 20 43 48 52 24    ,oldy:PRINT CHR$
022240:  28 32 31 35 29 3B 0D 0A 34 38 30 20 4D 4F 56 45    (215);..480 MOVE
022250:  20 78 2C 79 3A 50 52 49 4E 54 20 43 48 52 24 28     x,y:PRINT CHR$(
022260:  32 31 35 29 3B 0D 0A 34 39 30 20 57 45 4E 44 3A    215);..490 WEND:
022270:  52 45 54 55 52 4E 0D 0A 1A 67 68 74 6C 79 20 67    RETURN...ghtly g
022280:  55 42 20 31 30 31 30 0D 0A 31 30 30 34 20 57 45    UB 1010..1004 WE
022290:  4E 44 0D 0A 31 30 30 35 20 6D 64 3D 28 49 4E 4B    ND..1005 md=(INK
0222A0:  45 59 28 75 70 29 3E 2D 31 29 2D 28 49 4E 4B 45    EY(up)>-1)-(INKE
0222B0:  59 28 64 6F 77 29 3E 2D 31 29 3A 6D 7A 3D 6D 64    Y(dow)>-1):mz=md
0222C0:  0D 0A 31 30 30 36 20 6B 70 3D 2D 28 49 4E 4B 45    ..1006 kp=-(INKE
0222D0:  59 28 6C 65 29 3E 2D 31 29 2D 32 2A 28 49 4E 4B    Y(le)>-1)-2*(INK
0222E0:  45 59 28 72 69 29 3E 2D 31 29 2D 34 2A 28 49 4E    EY(ri)>-1)-4*(IN
0222F0:  4B 45 59 28 66 69 29 3E 2D 31 29 0D 0A 31 30 30    KEY(fi)>-1)..100
022300:  37 20 57 45 4E 44 0D 0A 31 30 30 38 20 57 48 49    7 WEND..1008 WHI
022310:  4C 45 20 49 4E 4B 45 59 24 3C 3E 22 22 3A 57 45    LE INKEY$<>"":WE
022320:  4E 44 0D 0A 31 30 30 39 20 52 45 54 55 52 4E 0D    ND..1009 RETURN.
022330:  0A 31 30 31 30 20 50 52 49 4E 54 20 43 48 52 24    .1010 PRINT CHR$
022340:  28 32 33 29 2B 43 48 52 24 28 31 29 3B 0D 0A 31    (23)+CHR$(1);..1
022350:  30 31 31 20 4D 4F 56 45 20 6D 78 2C 6D 79 2D 6D    011 MOVE mx,my-m
022360:  70 2A 6D 73 70 2B 28 6D 64 3D 2D 31 29 2A 28 6D    p*msp+(md=-1)*(m
022370:  62 68 2D 32 29 0D 0A 31 30 31 32 20 46 4F 52 20    bh-2)..1012 FOR 
022380:  6D 63 3D 31 20 54 4F 20 6D 62 68 2F 32 0D 0A 31    mc=1 TO mbh/2..1
022390:  30 31 33 20 44 52 41 57 52 20 6D 62 6C 2C 30 2C    013 DRAWR mbl,0,
0223A0:  6D 63 6F 6C 3A 4D 4F 56 45 52 20 2D 6D 62 6C 2C    mcol:MOVER -mbl,
0223B0:  2D 32 2D 28 6D 64 3D 2D 31 29 2A 34 0D 0A 31 30    -2-(md=-1)*4..10
0223C0:  31 34 20 46 4F 52 20 64 65 6C 61 79 3D 30 20 54    14 FOR delay=0 T
0223D0:  4F 20 6D 64 65 3A 4E 45 58 54 0D 0A 31 30 31 35    O mde:NEXT..1015
0223E0:  20 4E 45 58 54 0D 0A 31 30 31 36 20 50 52 49 4E     NEXT..1016 PRIN
0223F0:  54 20 43 48 52 24 28 32 33 29 2B 43 48 52 24 28    T CHR$(23)+CHR$(
022400:  31 30 30 20 4D 45 4D 4F 52 59 20 26 38 46 46 46    100 MEMORY &8FFF
022410:  3A 61 3D 26 39 30 30 30 3A 46 4F 52 20 78 3D 30    :a=&9000:FOR x=0
022420:  20 54 4F 20 31 34 3A 52 45 41 44 20 61 24 3A 50     TO 14:READ a$:P
022430:  4F 4B 45 20 61 2B 78 2C 56 41 4C 28 22 26 22 2B    OKE a+x,VAL("&"+
022440:  61 24 29 3A 4E 45 58 54 0D 0A 31 31 30 20 4D 4F    a$):NEXT..110 MO
022450:  44 45 20 32 3A 50 52 49 4E 54 22 53 69 6C 6C 79    DE 2:PRINT"Silly
022460:  20 73 74 72 69 6E 67 22 0D 0A 31 32 30 20 61 24     string"..120 a$
022470:  3D 22 20 22 3A 4C 4F 43 41 54 45 20 31 2C 31 3A    =" ":LOCATE 1,1:
022480:  43 41 4C 4C 20 26 39 30 30 30 2C 40 61 24 0D 0A    CALL &9000,@a$..
022490:  31 33 30 20 50 52 49 4E 54 3A 50 52 49 4E 54 22    130 PRINT:PRINT"
0224A0:  54 68 65 20 6C 65 74 74 65 72 20 61 74 20 74 68    The letter at th
0224B0:  65 20 74 6F 70 20 6C 65 66 74 20 6F 66 20 74 68    e top left of th
0224C0:  65 20 73 63 72 65 65 6E 20 69 73 20 22 3B 61 24    e screen is ";a$
0224D0:  0D 0A 31 39 30 20 44 41 54 41 20 44 44 2C 36 36    ..190 DATA DD,66
0224E0:  2C 30 31 2C 44 44 2C 36 45 2C 30 30 2C 32 33 2C    ,01,DD,6E,00,23,
0224F0:  35 45 2C 32 33 2C 35 36 2C 43 44 2C 36 30 2C 42    5E,23,56,CD,60,B
022500:  42 2C 31 32 2C 43 39 0D 0A 1A 24 24 24 FF 00 FF    B,12,C9...$$$...
022510:  00 00 0A 00 00 72 01 00 10 29 00 00 00 00 00 00    .....r...)......
022520:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022530:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022540:  10 29 00 86 03 54 0D 0A 0D 0A 46 69 67 75 72 65    .)...T....Figure
022550:  20 32 2E 37 31 1A 00 0A 00 00 73 01 00 1E 00 00     2.71.....s.....
022560:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022570:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022580:  C0 7C 30 FE 00 1C 00 18 00 18 66 0C CC 66 76 00    .|0.......f..fv.
022590:  00 66 66 00 C0 18 18 66 66 00 7C 66 18 18 0C 66    .ff....ff.|f...f
0225A0:  66 00 00 0C 0C 66 66 0C 76 66 00 18 3E 3E CC 00    f....ff.vf..>>..
0225B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0225C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0225D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0225E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0225F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022600:  31 30 30 20 4D 45 4D 4F 52 59 20 26 38 46 46 46    100 MEMORY &8FFF
022610:  3A 61 3D 26 39 30 30 30 3A 46 4F 52 20 78 3D 30    :a=&9000:FOR x=0
022620:  20 54 4F 20 31 30 3A 52 45 41 44 20 61 24 3A 50     TO 10:READ a$:P
022630:  4F 4B 45 20 61 2B 78 2C 56 41 4C 28 22 26 22 2B    OKE a+x,VAL("&"+
022640:  61 24 29 3A 4E 45 58 54 0D 0A 31 31 30 20 50 52    a$):NEXT..110 PR
022650:  49 4E 54 22 45 6E 74 65 72 20 6E 75 6D 62 65 72    INT"Enter number
022660:  20 28 31 20 74 6F 20 32 35 35 29 22 3B 3A 49 4E     (1 to 255)";:IN
022670:  50 55 54 20 78 0D 0A 31 32 30 20 43 41 4C 4C 20    PUT x..120 CALL 
022680:  26 39 30 30 30 2C 78 3A 50 52 49 4E 54 0D 0A 31    &9000,x:PRINT..1
022690:  33 30 20 47 4F 54 4F 20 31 31 30 0D 0A 31 39 30    30 GOTO 110..190
0226A0:  20 44 41 54 41 20 44 44 2C 34 36 2C 30 30 2C 33     DATA DD,46,00,3
0226B0:  45 2C 34 30 2C 43 44 2C 35 41 2C 42 42 2C 31 30    E,40,CD,5A,BB,10
0226C0:  2C 46 42 2C 43 39 0D 0A 1A 0A 46 69 67 75 72 65    ,FB,C9....Figure
0226D0:  20 32 2E 37 31 1A 00 0A 00 00 73 01 00 1E 00 00     2.71.....s.....
0226E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0226F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022700:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022710:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022720:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022730:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022740:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022750:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022760:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022770:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022780:  C0 7C 30 FE 00 1C 00 18 00 18 66 0C CC 66 76 00    .|0.......f..fv.
022790:  00 66 66 00 C0 18 18 66 66 00 7C 66 18 18 0C 66    .ff....ff.|f...f
0227A0:  66 00 00 0C 0C 66 66 0C 76 66 00 18 3E 3E CC 00    f....ff.vf..>>..
0227B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0227C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0227D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0227E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0227F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022800:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
022810:  1D 00 01 00 02 09 4E E5 1D 00 C4 02 00 00 00 02    ......N.........
022820:  1D 00 C9 02 00 00 00 02 1D 00 C5 02 00 00 00 02    ................
022830:  1D 00 C1 02 00 00 00 02 1D 00 C6 02 00 00 00 02    ................
022840:  1D 00 C2 02 00 00 00 02 1D 00 C7 02 00 00 00 02    ................
022850:  1D 00 C3 02 00 00 00 02 1D 00 C8 02 00 00 00 02    ................
022860:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022870:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022880:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022890:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0228A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0228B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0228C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0228D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0228E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0228F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
022900:  23 48 65 6C 70 20 66 6F 72 20 4C 6F 6F 6D 20 68    #Help for Loom h
022910:  79 70 65 72 74 65 78 74 20 72 65 61 64 65 72 20    ypertext reader 
022920:  76 33 2E 32 0D 0A 4C 6F 6F 6D 20 69 73 20 61 20    v3.2..Loom is a 
022930:  73 79 73 74 65 6D 20 66 6F 72 20 76 69 65 77 69    system for viewi
022940:  6E 67 20 68 79 70 65 72 74 65 78 74 3A 20 61 20    ng hypertext: a 
022950:  73 65 74 20 6F 66 20 6F 72 64 69 6E 61 72 79 20    set of ordinary 
022960:  74 65 78 74 20 66 69 6C 65 73 20 77 69 74 68 20    text files with 
022970:  6C 69 6E 6B 73 0D 0A 62 65 74 77 65 65 6E 20 74    links..between t
022980:  68 65 6D 2E 20 20 41 6E 79 20 74 65 78 74 20 77    hem.  Any text w
022990:  68 69 63 68 20 69 73 20 68 69 67 68 6C 69 67 68    hich is highligh
0229A0:  74 65 64 20 69 73 20 61 20 6C 69 6E 6B 2E 20 20    ted is a link.  
0229B0:  55 73 65 20 74 68 65 20 63 75 72 73 6F 72 20 6B    Use the cursor k
0229C0:  65 79 73 20 74 6F 0D 0A 70 6F 73 69 74 69 6F 6E    eys to..position
0229D0:  20 74 68 65 20 63 75 72 73 6F 72 20 6F 76 65 72     the cursor over
0229E0:  20 61 20 6C 69 6E 6B 2C 20 61 6E 64 20 70 72 65     a link, and pre
0229F0:  73 73 20 74 68 65 20 45 4E 54 45 52 20 6F 72 20    ss the ENTER or 
022A00:  52 45 54 55 52 4E 20 6B 65 79 20 61 6E 64 20 79    RETURN key and y
022A10:  6F 75 20 77 69 6C 6C 0D 0A 62 65 20 74 61 6B 65    ou will..be take
022A20:  6E 20 74 6F 20 74 68 65 20 61 70 70 72 6F 70 72    n to the appropr
022A30:  69 61 74 65 20 70 6C 61 63 65 20 65 69 74 68 65    iate place eithe
022A40:  72 20 65 6C 73 65 77 68 65 72 65 20 69 6E 20 74    r elsewhere in t
022A50:  68 65 20 73 61 6D 65 20 66 69 6C 65 2C 20 6F 72    he same file, or
022A60:  20 69 6E 20 61 0D 0A 64 69 66 66 65 72 65 6E 74     in a..different
022A70:  20 66 69 6C 65 20 65 6E 74 69 72 65 6C 79 2E 0D     file entirely..
022A80:  0A 0D 0A 54 68 65 72 65 20 61 72 65 20 71 75 69    ...There are qui
022A90:  63 6B 20 63 75 72 73 6F 72 20 6D 6F 76 65 6D 65    ck cursor moveme
022AA0:  6E 74 73 20 73 69 6D 69 6C 61 72 20 74 6F 20 50    nts similar to P
022AB0:  72 6F 74 65 78 74 3A 0D 0A 0D 0A 53 48 49 46 54    rotext:....SHIFT
022AC0:  20 6C 65 66 74 20 2B 20 72 69 67 68 74 09 4D 6F     left + right.Mo
022AD0:  76 65 20 6C 65 66 74 20 6F 72 20 72 69 67 68 74    ve left or right
022AE0:  20 61 20 77 6F 72 64 20 61 74 20 61 20 74 69 6D     a word at a tim
022AF0:  65 0D 0A 43 54 52 4C 20 6C 65 66 74 20 2B 20 72    e..CTRL left + r
022B00:  F2 03 01 0D 00 00 6D F0 EF 28 0D 00 00 6D F0 F4    ......m..(...m..
022B10:  0D 00 00 6D 63 E8 F4 0D 00 00 6D E4 29 20 FB 20    ...mc.....m.) . 
022B20:  0D 00 00 6D 63 E8 01 9F 20 1E F2 03 00 06 00 EC    ...mc... .......
022B30:  03 D5 00 35 00 ED 03 0D 00 00 6D E4 EF 28 FF 0A    ...5......m..(..
022B40:  28 0D 00 00 75 F0 29 EE F5 0F 29 F5 28 FF 0A 28    (...u.)...).(..(
022B50:  0D 00 00 64 6F F7 29 EE F5 0F 29 01 0D 00 00 6D    ...do.)...)....m
022B60:  FA EF 0D 00 00 6D E4 00 3C 00 EE 03 0D 00 00 6B    .....m..<......k
022B70:  F0 EF F5 28 FF 0A 28 0D 00 00 6C E5 29 EE F5 0F    ...(..(...l.)...
022B80:  29 F5 10 F6 28 FF 0A 28 0D 00 00 72 E9 29 EE F5    )...(..(...r.)..
022B90:  0F 29 F5 12 F6 28 FF 0A 28 0D 00 00 66 E9 29 EE    .)...(..(...f.).
022BA0:  F5 0F 29 00 06 00 EF 03 D5 00 0E 00 F0 03 D6 20    ..)............ 
022BB0:  FF 43 F2 22 22 01 D5 00 06 00 F1 03 C9 00 14 00    .C.""...........
022BC0:  F2 03 BF 20 FF 03 28 19 17 29 F4 FF 03 28 0F 29    ... ..(..)...(.)
022BD0:  3B 00 35 00 F3 03 AE 20 0D 00 00 6D F8 2C 0D 00    ;.5.... ...m.,..
022BE0:  00 6D F9 F5 0D 00 00 6D F0 F6 0D 00 00 6D 73 F0    .m.....m.....ms.
022BF0:  F4 28 0D 00 00 6D E4 EF F5 0F 29 F6 28 0D 00 00    .(...m....).(...
022C00:  6D 62 E8 F5 10 29 00 19 00 F4 03 9E 20 0D 00 00    mb...)...... ...
022C10:  6D E3 EF 0F 20 EC 20 0D 00 00 6D 62 E8 F7 10 00    m... . ...mb....
022C20:  31 00 F5 03 95 20 0D 00 00 6D 62 EC 2C 0E 2C 0D    1.... ...mb.,.,.
022C30:  00 00 6D 63 6F EC 01 AF 20 F5 0D 00 00 6D 62 EC    ..mco... ....mb.
022C40:  2C F5 10 F5 28 0D 00 00 6D E4 EF F5 0F 29 F6 12    ,...(...m....)..
022C50:  00 1C 00 F6 03 9E 20 0D 00 00 64 65 6C 61 F9 EF    ...... ...dela..
022C60:  0E 20 EC 20 0D 00 00 6D 64 E5 01 B0 00 06 00 F7    . . ...md.......
022C70:  03 B0 00 14 00 F8 03 BF 20 FF 03 28 19 17 29 F4    ........ ..(..).
022C80:  FF 03 28 0E 29 3B 00 06 00 F9 03 C9 00 00 00 1A    ..(.);..........
022C90:  6D 70 3D 30 3A 6D 66 3D 30 3A 6D 64 65 3D 30 0D    mp=0:mf=0:mde=0.
022CA0:  0A 32 30 20 6D 63 6F 6C 3D 31 3A 6D 73 70 3D 31    .20 mcol=1:msp=1
022CB0:  36 3A 6D 78 3D 30 3A 6D 79 3D 33 39 39 2D 32 2A    6:mx=0:my=399-2*
022CC0:  31 36 3A 6D 62 68 3D 31 36 3A 6D 62 6C 3D 31 36    16:mbh=16:mbl=16
022CD0:  2A 36 2D 32 0D 0A 33 30 20 75 70 3D 30 3A 64 6F    *6-2..30 up=0:do
022CE0:  77 3D 32 3A 6C 65 3D 38 3A 72 69 3D 31 3A 66 69    w=2:le=8:ri=1:fi
022CF0:  3D 39 3A 6B 66 3D 34 0D 0A 34 30 20 50 52 49 4E    =9:kf=4..40 PRIN
022D00:  69 67 68 74 3A 09 4D 6F 76 65 20 74 6F 20 73 74    ight:.Move to st
022D10:  61 72 74 20 6F 72 20 65 6E 64 20 6F 66 20 6C 69    art or end of li
022D20:  6E 65 0D 0A 53 48 49 46 54 20 75 70 20 2B 20 64    ne..SHIFT up + d
022D30:  6F 77 6E 3A 09 53 63 72 6F 6C 6C 20 73 63 72 65    own:.Scroll scre
022D40:  65 6E 20 75 70 20 6F 72 20 64 6F 77 6E 20 6F 6E    en up or down on
022D50:  65 20 6C 69 6E 65 0D 0A 43 54 52 4C 20 75 70 20    e line..CTRL up 
022D60:  2B 20 64 6F 77 6E 3A 09 09 4D 6F 76 65 20 75 70    + down:..Move up
022D70:  20 6F 72 20 64 6F 77 6E 20 61 20 77 68 6F 6C 65     or down a whole
022D80:  20 70 61 67 65 0D 0A 43 54 52 4C 20 5B 20 2B 20     page..CTRL [ + 
022D90:  5D 09 09 4D 6F 76 65 20 74 6F 20 74 6F 70 20 6F    ]..Move to top o
022DA0:  72 20 62 6F 74 74 6F 6D 20 6F 66 20 64 6F 63 75    r bottom of docu
022DB0:  6D 65 6E 74 0D 0A 0D 0A 55 73 65 20 74 68 65 20    ment....Use the 
022DC0:  45 4E 54 45 52 20 6F 72 20 52 45 54 55 52 4E 20    ENTER or RETURN 
022DD0:  6B 65 79 20 74 6F 20 66 6F 6C 6C 6F 77 20 61 20    key to follow a 
022DE0:  6C 69 6E 6B 2E 20 20 4F 6E 63 65 20 79 6F 75 20    link.  Once you 
022DF0:  68 61 76 65 20 66 6F 6C 6C 6F 77 65 64 20 61 20    have followed a 
022E00:  6C 69 6E 6B 2C 0D 0A 70 72 65 73 73 20 74 68 65    link,..press the
022E10:  20 22 3C 22 20 6B 65 79 20 6F 72 20 74 68 65 20     "<" key or the 
022E20:  22 42 22 20 6B 65 79 20 74 6F 20 72 65 74 75 72    "B" key to retur
022E30:  6E 20 74 6F 20 77 68 65 72 65 20 79 6F 75 20 63    n to where you c
022E40:  61 6D 65 20 66 72 6F 6D 2E 0D 0A 0D 0A 54 6F 20    ame from.....To 
022E50:  71 75 69 74 20 4C 6F 6F 6D 2C 20 70 72 65 73 73    quit Loom, press
022E60:  20 22 51 22 2E 20 20 20 20 20 20 20 20 20 20 20     "Q".           
022E70:  20 20 20 20 20 20 54 6F 20 6C 65 61 76 65 20 74          To leave t
022E80:  68 69 73 20 68 65 6C 70 20 73 63 72 65 65 6E 2C    his help screen,
022E90:  20 70 72 65 73 73 20 22 42 22 0D 0A 2D 2D 2D 2D     press "B"..----
022EA0:  2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D    ----------------
022EB0:  2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D    ----------------
022EC0:  2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D    ----------------
022ED0:  2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D    ----------------
022EE0:  2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 0A 4F 72 69    -----------..Ori
022EF0:  67 69 6E 61 6C 20 76 65 72 73 69 6F 6E 20 28 63    ginal version (c
022F00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022F10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022F20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022F30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022F40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022F50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022F60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022F70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022F80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022F90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022FA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022FB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022FC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022FD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022FE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
022FF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023000:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023010:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023020:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023030:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023040:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023050:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023060:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023070:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023080:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023090:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0230A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0230B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0230C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0230D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0230E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0230F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023100:  29 20 53 74 65 70 68 65 6E 20 50 68 69 6C 6C 69    ) Stephen Philli
023110:  70 73 20 31 39 39 35 0D 0A 41 6D 73 74 72 61 64    ps 1995..Amstrad
023120:  20 43 50 43 20 76 65 72 73 69 6F 6E 20 28 63 29     CPC version (c)
023130:  20 4D 61 74 74 68 65 77 20 61 6E 64 20 53 74 65     Matthew and Ste
023140:  70 68 65 6E 20 50 68 69 6C 6C 69 70 73 20 31 39    phen Phillips 19
023150:  39 37 0D 0A 57 72 69 74 74 65 6E 20 75 73 69 6E    97..Written usin
023160:  67 20 74 68 65 20 48 69 53 6F 66 74 20 43 20 63    g the HiSoft C c
023170:  6F 6D 70 69 6C 65 72 2E 20 20 52 75 6E 74 69 6D    ompiler.  Runtim
023180:  65 20 72 6F 75 74 69 6E 65 73 20 28 63 29 20 48    e routines (c) H
023190:  69 53 6F 66 74 20 31 39 38 38 1A 61 64 65 72 20    iSoft 1988.ader 
0231A0:  76 33 2E 32 0D 0A 4C 6F 6F 6D 20 69 73 20 61 20    v3.2..Loom is a 
0231B0:  73 79 73 74 65 6D 20 66 6F 72 20 76 69 65 77 69    system for viewi
0231C0:  6E 67 20 68 79 70 65 72 74 65 78 74 3A 20 61 20    ng hypertext: a 
0231D0:  73 65 74 20 6F 66 20 6F 72 64 69 6E 61 72 79 20    set of ordinary 
0231E0:  74 65 78 74 20 66 69 6C 65 73 20 77 69 74 68 20    text files with 
0231F0:  6C 69 6E 6B 73 0D 0A 62 65 74 77 65 65 6E 20 74    links..between t
023200:  6C 69 6E 6B 2C 0D 0A 70 72 65 73 73 20 74 68 65    link,..press the
023210:  20 22 3C 22 20 6B 65 79 20 6F 72 20 74 68 65 20     "<" key or the 
023220:  22 42 22 20 6B 65 79 20 74 6F 20 72 65 74 75 72    "B" key to retur
023230:  6E 20 74 6F 20 77 68 65 72 65 20 79 6F 75 20 63    n to where you c
023240:  61 6D 65 20 66 72 6F 6D 2E 0D 0A 0D 0A 54 6F 20    ame from.....To 
023250:  71 75 69 74 20 4C 6F 6F 6D 2C 20 70 72 65 73 73    quit Loom, press
023260:  20 22 51 22 2E 20 20 20 20 20 20 20 20 20 20 20     "Q".           
023270:  20 20 20 20 20 20 54 6F 20 6C 65 61 76 65 20 74          To leave t
023280:  68 69 73 20 68 65 6C 70 20 73 63 72 65 65 6E 2C    his help screen,
023290:  20 70 72 65 73 73 20 22 42 22 0D 0A 2D 2D 2D 2D     press "B"..----
0232A0:  2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D    ----------------
0232B0:  2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D    ----------------
0232C0:  2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D    ----------------
0232D0:  2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D    ----------------
0232E0:  2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 0A 4F 72 69    -----------..Ori
0232F0:  67 69 6E 61 6C 20 76 65 72 73 69 6F 6E 20 28 63    ginal version (c
023300:  31 30 20 44 45 46 49 4E 54 20 61 2D 7A 3A 4D 45    10 DEFINT a-z:ME
023310:  4D 4F 52 59 20 48 49 4D 45 4D 2D 33 34 3A 61 3D    MORY HIMEM-34:a=
023320:  55 4E 54 28 48 49 4D 45 4D 2B 31 29 3A 46 4F 52    UNT(HIMEM+1):FOR
023330:  20 78 3D 30 20 54 4F 20 33 33 3A 52 45 41 44 20     x=0 TO 33:READ 
023340:  61 24 3A 50 4F 4B 45 20 61 2B 78 2C 56 41 4C 28    a$:POKE a+x,VAL(
023350:  22 26 22 2B 61 24 29 3A 4E 45 58 54 3A 44 41 54    "&"+a$):NEXT:DAT
023360:  41 20 43 44 2C 37 38 2C 42 42 2C 34 43 2C 44 44    A CD,78,BB,4C,DD
023370:  2C 36 45 2C 30 2C 44 44 2C 36 36 2C 31 2C 34 36    ,6E,0,DD,66,1,46
023380:  2C 37 38 2C 42 37 2C 43 38 2C 32 33 2C 35 45 2C    ,78,B7,C8,23,5E,
023390:  32 33 2C 36 36 2C 36 42 2C 43 44 2C 36 30 2C 42    23,66,6B,CD,60,B
0233A0:  42 2C 37 37 2C 32 33 2C 43 2C 37 39 2C 45 35 2C    B,77,23,C,79,E5,
0233B0:  43 44 2C 36 46 2C 42 42 2C 45 31 2C 31 30 2C 46    CD,6F,BB,E1,10,F
0233C0:  32 2C 43 39 0D 0A 32 30 20 4D 4F 44 45 20 32 3A    2,C9..20 MODE 2:
0233D0:  43 41 54 3A 76 3D 56 50 4F 53 28 23 30 29 3A 66    CAT:v=VPOS(#0):f
0233E0:  24 3D 53 50 41 43 45 24 28 31 32 29 3A 4C 4F 43    $=SPACE$(12):LOC
0233F0:  41 54 45 20 31 2C 34 3A 43 41 4C 4C 20 61 2C 40    ATE 1,4:CALL a,@
023400:  66 24 3A 4C 4F 43 41 54 45 20 31 2C 76 0D 0A 33    f$:LOCATE 1,v..3
023410:  30 20 50 52 49 4E 54 22 54 68 65 20 66 69 72 73    0 PRINT"The firs
023420:  74 20 66 69 6C 65 20 6F 6E 20 74 68 69 73 20 64    t file on this d
023430:  69 73 63 20 69 73 20 22 66 24 0D 0A 1A 20 57 65    isc is "f$... We
023440:  20 66 69 6E 64 20 66 69 6E 65 6C 79 20 67 72 61     find finely gra
023450:  74 65 64 20 20 50 61 72 6D 65 73 61 6E 20 20 63    ted  Parmesan  c
023460:  68 65 65 73 65 20 20 73 70 72 69 6E 6B 6C 65 64    heese  sprinkled
023470:  20 20 67 65 6E 65 72 6F 75 73 6C 79 20 6F 76 65      generously ove
023480:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023490:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0234A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0234B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0234C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0234D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0234E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0234F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023500:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023510:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023520:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023530:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023540:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023550:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023560:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023570:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023580:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023590:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0235A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0235B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0235C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0235D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0235E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0235F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023600:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023610:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023620:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023630:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023640:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023650:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023660:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023670:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023680:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023690:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0236A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0236B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0236C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0236D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0236E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0236F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023700:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023710:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023720:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023730:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023740:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023750:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023760:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023770:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023780:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023790:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0237A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0237B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0237C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0237D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0237E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0237F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023800:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023810:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023820:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023830:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023840:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023850:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023860:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023870:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023880:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023890:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0238A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0238B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0238C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0238D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0238E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0238F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
023900:  00 4D 45 4E 55 45 58 31 20 42 41 53 00 00 00 00    .MENUEX1 BAS....
023910:  00 00 00 00 00 70 01 00 0F 03 00 00 00 00 00 00    .....p..........
023920:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023930:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023940:  0F 03 00 8E 03 FF 03 28 0E 29 3B 00 06 00 F9 03    .......(.);.....
023950:  C9 00 00 00 1A 6D 70 3D 30 3A 6D 66 3D 30 3A 6D    .....mp=0:mf=0:m
023960:  64 65 3D 30 0D 0A 32 30 20 6D 63 6F 6C 3D 31 3A    de=0..20 mcol=1:
023970:  6D 73 70 3D 31 36 3A 6D 78 3D 30 3A 6D 79 3D 33    msp=16:mx=0:my=3
023980:  2A 00 0A 00 AD 20 0F 01 0D 00 00 6D 63 E8 EF 12    *.... .....mc...
023990:  01 0D 00 00 6D F0 EF 0E 01 0D 00 00 6D E6 EF 0E    ....m.......m...
0239A0:  01 0D 00 00 6D 64 E5 EF 0E 00 47 00 14 00 0D 00    ....md....G.....
0239B0:  00 6D 63 6F EC EF 0F 01 0D 00 00 6D 73 F0 EF 19    .mco.......ms...
0239C0:  10 01 0D 00 00 6D F8 EF 0E 01 0D 00 00 6D F9 EF    .....m.......m..
0239D0:  1A 8F 01 F5 10 F6 19 10 01 0D 00 00 6D 62 E8 EF    ............mb..
0239E0:  19 10 01 0D 00 00 6D 62 EC EF 19 10 F6 14 F5 10    ......mb........
0239F0:  00 35 00 1E 00 0D 00 00 75 F0 EF 0E 01 0D 00 00    .5......u.......
023A00:  64 6F F7 EF 10 01 0D 00 00 6C E5 EF 16 01 0D 00    do.......l......
023A10:  00 72 E9 EF 0F 01 0D 00 00 66 E9 EF 17 01 0D 00    .r.......f......
023A20:  00 6B E6 EF 12 00 14 00 28 00 BF 22 4D 65 6E 75    .k......(.."Menu
023A30:  22 01 BF 22 2D 2D 2D 2D 22 00 24 00 32 00 9E 20    ".."----".$.2.. 
023A40:  0D 00 00 F8 EF 0F 20 EC 20 0D 00 00 6D 63 E8 01    ...... . ...mc..
023A50:  BF 22 49 74 65 6D 22 0D 00 00 F8 01 B0 00 0A 00    ."Item".........
023A60:  3C 00 9F 20 1E F2 03 00 0A 00 46 00 9F 20 1E E8    <.. ......F.. ..
023A70:  03 00 23 00 50 00 BF 22 59 6F 75 20 68 61 76 65    ..#.P.."You have
023A80:  20 63 68 6F 73 65 6E 20 69 74 65 6D 22 0D 00 00     chosen item"...
023A90:  6D F0 F4 0F 00 06 00 5A 00 98 00 1C 00 E8 03 0D    m......Z........
023AA0:  00 00 6B F0 EF 0E 01 0D 00 00 6D E4 EF 0F 01 0D    ..k.......m.....
023AB0:  00 00 6D FA EF 0E 00 18 00 E9 03 D6 20 28 0D 00    ..m......... (..
023AC0:  00 6B F0 20 FA 20 0D 00 00 6B E6 29 EF 0E 00 22    .k. . ...k.)..."
023AD0:  00 EA 03 D6 20 28 10 F8 0D 00 00 6D F0 20 FA 20    .... (.....m. . 
023AE0:  0D 00 00 6D E6 29 EE 0E 20 FC 20 0D 00 00 6D FA    ...m.).. . ...m.
023AF0:  00 3C 00 EB 03 0D 00 00 6D FA EF 0E 01 9F 20 1E    .<......m..... .
023B00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
023B10:  1E 00 01 00 02 09 4E E5 1E 00 C7 02 00 00 00 02    ......N.........
023B20:  1E 00 C3 02 00 00 00 02 1E 00 C8 02 00 00 00 02    ................
023B30:  1E 00 C4 02 00 00 00 02 1E 00 C9 02 00 00 00 02    ................
023B40:  1E 00 C5 02 00 00 00 02 1E 00 C1 02 00 00 00 02    ................
023B50:  1E 00 C6 02 00 00 00 02 1E 00 C2 02 00 00 00 02    ................
023B60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023B70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023B80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023B90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023BA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023BB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023BC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023BD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023BE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023BF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
023C00:  00 6D 63 E8 F4 0D 00 00 6D E4 29 20 FB 20 0D 00    .mc.....m.) . ..
023C10:  00 6D 63 E8 01 9F 20 1E F2 03 00 06 00 EC 03 D5    .mc... .........
023C20:  00 35 00 ED 03 0D 00 00 6D E4 EF 28 FF 0A 28 0D    .5......m..(..(.
023C30:  00 00 75 F0 29 EE F5 0F 29 F5 28 FF 0A 28 0D 00    ..u.)...).(..(..
023C40:  00 64 6F F7 29 EE F5 0F 29 01 0D 00 00 6D FA EF    .do.)...)....m..
023C50:  0D 00 00 6D E4 00 3C 00 EE 03 0D 00 00 6B F0 EF    ...m..<......k..
023C60:  F5 28 FF 0A 28 0D 00 00 6C E5 29 EE F5 0F 29 F5    .(..(...l.)...).
023C70:  10 F6 28 FF 0A 28 0D 00 00 72 E9 29 EE F5 0F 29    ..(..(...r.)...)
023C80:  F5 12 F6 28 FF 0A 28 0D 00 00 66 E9 29 EE F5 0F    ...(..(...f.)...
023C90:  29 00 06 00 EF 03 D5 00 0E 00 F0 03 D6 20 FF 43    )............ .C
023CA0:  F2 22 22 01 D5 00 06 00 F1 03 C9 00 14 00 F2 03    ."".............
023CB0:  BF 20 FF 03 28 19 17 29 F4 FF 03 28 0F 29 3B 00    . ..(..)...(.);.
023CC0:  35 00 F3 03 AE 20 0D 00 00 6D F8 2C 0D 00 00 6D    5.... ...m.,...m
023CD0:  F9 F5 0D 00 00 6D F0 F6 0D 00 00 6D 73 F0 F4 28    .....m.....ms..(
023CE0:  0D 00 00 6D E4 EF F5 0F 29 F6 28 0D 00 00 6D 62    ...m....).(...mb
023CF0:  E8 F5 10 29 00 19 00 F4 03 9E 20 0D 00 00 6D E3    ...)...... ...m.
023D00:  EF 0F 20 EC 20 0D 00 00 6D 62 E8 F7 10 00 31 00    .. . ...mb....1.
023D10:  F5 03 95 20 0D 00 00 6D 62 EC 2C 0E 2C 0D 00 00    ... ...mb.,.,...
023D20:  6D 63 6F EC 01 AF 20 F5 0D 00 00 6D 62 EC 2C F5    mco... ....mb.,.
023D30:  10 F5 28 0D 00 00 6D E4 EF F5 0F 29 F6 12 00 1C    ..(...m....)....
023D40:  00 F6 03 9E 20 0D 00 00 64 65 6C 61 F9 EF 0E 20    .... ...dela... 
023D50:  EC 20 0D 00 00 6D 64 E5 01 B0 00 06 00 F7 03 B0    . ...md.........
023D60:  00 14 00 F8 03 BF 20 FF 03 28 19 17 29 F4 FF 03    ...... ..(..)...
023D70:  28 0E 29 3B 00 06 00 F9 03 C9 00 00 00 1A 35 30    (.);..........50
023D80:  68 61 6E 6B 20 79 6F 75 20 66 6F 72 20 79 6F 75    hank you for you
023D90:  72 20 6F 72 64 65 72 2E 22 0D 0A 20 20 20 32 30    r order."..   20
023DA0:  30 20 50 52 49 4E 54 22 50 6C 65 61 73 65 20 73    0 PRINT"Please s
023DB0:  65 6E 64 20 61 20 63 68 65 71 75 65 20 66 6F 72    end a cheque for
023DC0:  20 A3 22 3B 55 53 49 4E 47 22 23 23 2E 23 23 22     £";USING"##.##"
023DD0:  3B 30 2E 35 2A 6D 61 67 73 3A 45 4E 44 0D 0A 20    ;0.5*mags:END.. 
023DE0:  20 20 32 31 30 20 4C 4F 43 41 54 45 20 32 37 2C      210 LOCATE 27,
023DF0:  36 2B 6D 70 2A 32 3A 50 52 49 4E 54 20 6E 75 6D    6+mp*2:PRINT num
023E00:  00 F0 03 D6 20 FF 43 F2 22 22 01 D5 00 06 00 F1    .... .C.""......
023E10:  03 C9 00 14 00 F2 03 BF 20 FF 03 28 19 17 29 F4    ........ ..(..).
023E20:  FF 03 28 0F 29 3B 00 35 00 F3 03 AE 20 0D 00 00    ..(.);.5.... ...
023E30:  6D F8 2C 0D 00 00 6D F9 F5 0D 00 00 6D F0 F6 0D    m.,...m.....m...
023E40:  00 00 6D 73 F0 F4 28 0D 00 00 6D E4 EF F5 0F 29    ..ms..(...m....)
023E50:  F6 28 0D 00 00 6D 62 E8 F5 10 29 00 19 00 F4 03    .(...mb...).....
023E60:  9E 20 0D 00 00 6D E3 EF 0F 20 EC 20 0D 00 00 6D    . ...m... . ...m
023E70:  62 E8 F7 10 00 31 00 F5 03 95 20 0D 00 00 6D 62    b....1.... ...mb
023E80:  EC 2C 0E 2C 0D 00 00 6D 63 6F EC 01 AF 20 F5 0D    .,.,...mco... ..
023E90:  00 00 6D 62 EC 2C F5 10 F5 28 0D 00 00 6D E4 EF    ..mb.,...(...m..
023EA0:  F5 0F 29 F6 12 00 1C 00 F6 03 9E 20 0D 00 00 64    ..)........ ...d
023EB0:  65 6C 61 F9 EF 0E 20 EC 20 0D 00 00 6D 64 E5 01    ela... . ...md..
023EC0:  B0 00 06 00 F7 03 B0 00 14 00 F8 03 BF 20 FF 03    ............. ..
023ED0:  28 19 17 29 F4 FF 03 28 0E 29 3B 00 06 00 F9 03    (..)...(.);.....
023EE0:  C9 00 00 00 1A 72 69 3D 31 3A 66 69 3D 31 38 3A    .....ri=1:fi=18:
023EF0:  6B 66 3D 35 0D 0A 34 30 20 6F 75 72 6B 66 3D 30    kf=5..40 ourkf=0
023F00:  20 31 30 31 37 20 52 45 54 55 52 4E 0D 0A 1A FF     1017 RETURN....
023F10:  50 41 54 43 48 20 36 0D 0A 20 20 20 42 79 20 53    PATCH 6..   By S
023F20:  74 65 70 68 65 6E 20 61 6E 64 20 4D 61 74 74 68    tephen and Matth
023F30:  65 77 20 50 68 69 6C 6C 69 70 73 0D 0A 0D 0A 20    ew Phillips.... 
023F40:  20 20 22 57 68 61 74 27 73 20 6F 6E 20 74 68 65      "What's on the
023F50:  20 6D 65 6E 75 20 66 6F 72 20 74 68 69 73 20 6D     menu for this m
023F60:  6F 6E 74 68 3F 22 2C 20 20 77 65 20 20 68 65 61    onth?",  we  hea
023F70:  72 20 79 6F 75 20 63 72 79 2E 20 20 57 65 6C 6C    r you cry.  Well
023F80:  31 29 2D 28 49 4E 4B 45 59 28 64 6F 77 29 3E 2D    1)-(INKEY(dow)>-
023F90:  31 29 3A 6D 7A 3D 6D 64 0D 0A 20 20 20 31 30 30    1):mz=md..   100
023FA0:  36 20 6B 70 3D 2D 28 49 4E 4B 45 59 28 6C 65 29    6 kp=-(INKEY(le)
023FB0:  3E 2D 31 29 2D 32 2A 28 49 4E 4B 45 59 28 72 69    >-1)-2*(INKEY(ri
023FC0:  29 3E 2D 31 29 2D 34 2A 28 49 4E 4B 45 59 28 66    )>-1)-4*(INKEY(f
023FD0:  69 29 3E 2D 31 29 0D 0A 20 20 20 31 30 30 37 20    i)>-1)..   1007 
023FE0:  57 45 4E 44 0D 0A 20 20 20 31 30 30 38 20 57 48    WEND..   1008 WH
023FF0:  49 4C 45 20 49 4E 4B 45 59 24 3C 3E 22 22 3A 57    ILE INKEY$<>"":W
024000:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024010:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024020:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024030:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024040:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024050:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024060:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024070:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024080:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024090:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0240A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0240B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0240C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0240D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0240E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0240F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024100:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024110:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024120:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024130:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024140:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024150:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024160:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024170:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024180:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024190:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0241A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0241B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0241C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0241D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0241E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0241F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024200:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024210:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024220:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024230:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024240:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024250:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024260:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024270:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024280:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024290:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0242A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0242B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0242C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0242D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0242E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0242F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024300:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024310:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024320:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024330:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024340:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024350:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024360:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024370:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024380:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024390:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0243A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0243B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0243C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0243D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0243E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0243F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
024400:  00 4D 45 4E 55 45 58 34 20 42 41 53 00 00 00 00    .MENUEX4 BAS....
024410:  00 00 00 00 00 70 01 00 3B 05 00 00 00 00 00 00    .....p..;.......
024420:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024430:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024440:  3B 05 00 ED 03 03 9E 20 0D 00 00 64 65 6C 61 F9    ;...... ...dela.
024450:  EF 0E 20 EC 20 0D 00 00 6D 64 E5 01 B0 00 06 00    .. . ...md......
024460:  F7 03 B0 00 14 00 F8 03 BF 20 FF 03 28 19 17 29    ......... ..(..)
024470:  F4 FF 03 28 0E 29 3B 00 06 00 F9 03 C9 00 00 00    ...(.);.........
024480:  21 00 0A 00 0D 00 00 6D 63 E8 EF 14 01 0D 00 00    !......mc.......
024490:  6D E6 EF 16 F4 19 20 01 0D 00 00 6D 64 E5 EF 0E    m..... ....md...
0244A0:  00 3F 00 14 00 0D 00 00 6D 63 6F EC EF 0F 01 0D    .?......mco.....
0244B0:  00 00 6D 73 F0 EF 19 20 01 0D 00 00 6D F8 EF 19    ..ms... ....m...
0244C0:  7C 01 0D 00 00 6D F9 EF 1A 42 01 01 0D 00 00 6D    |....m...B.....m
0244D0:  62 E8 EF 19 16 01 0D 00 00 6D 62 EC EF 19 84 00    b........mb.....
0244E0:  3F 00 1E 00 0D 00 00 75 F0 EF 0E 01 0D 00 00 64    ?......u.......d
0244F0:  6F F7 EF 10 01 0D 00 00 6C E5 EF 16 01 0D 00 00    o.......l.......
024500:  72 E9 EF 0F 01 0D 00 00 66 E9 EF 19 2F 01 0D 00    r.......f.../...
024510:  00 73 E8 EF 19 15 01 0D 00 00 6B E6 EF 15 00 17    .s........k.....
024520:  00 28 00 93 20 0D 00 00 6E 75 ED 28 0D 00 00 6D    .(.. ...nu.(...m
024530:  63 E8 F5 0F 29 00 2A 00 32 00 AD 20 0F 01 A9 20    c...).*.2.. ... 
024540:  16 2C 11 01 BF 22 57 41 43 43 49 20 62 61 63 6B    .,..."WACCI back
024550:  2D 69 73 73 75 65 73 20 6F 72 64 65 72 73 22 00    -issues orders".
024560:  1E 00 3C 00 A9 20 16 2C 12 01 BF 20 FF 7B 28 19    ..<.. .,... .{(.
024570:  18 2C 22 2D 22 29 01 A9 20 0F 2C 19 13 00 40 00    .,"-").. .,...@.
024580:  46 00 BF 22 55 73 65 20 74 68 65 20 63 75 72 73    F.."Use the curs
024590:  6F 72 20 6B 65 79 73 20 74 6F 20 6D 6F 76 65 20    or keys to move 
0245A0:  61 6E 64 20 61 6C 74 65 72 2E 20 20 53 50 41 43    and alter.  SPAC
0245B0:  45 20 74 6F 20 66 69 6E 69 73 68 2E 22 00 40 00    E to finish.".@.
0245C0:  50 00 9E 20 0D 00 00 6D F0 EF 0E 20 EC 20 0D 00    P.. ...m... . ..
0245D0:  00 6D 63 E8 F5 0F 01 A9 20 17 2C 14 F4 0D 00 00    .mc..... .,.....
0245E0:  6D F0 F6 10 01 BF 22 57 41 43 43 49 22 19 28 F4    m....."WACCI".(.
0245F0:  0D 00 00 6D F0 01 9F 20 1E D2 00 01 B0 00 19 00    ...m... ........
024600:  00 4D 45 4E 55 45 58 33 20 42 41 53 00 00 00 00    .MENUEX3 BAS....
024610:  00 00 00 00 00 70 01 00 FD 04 00 00 00 00 00 00    .....p..........
024620:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024630:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024640:  FD 04 00 6E 05 EF 0F 20 EC 20 0D 00 00 6D 62 E8    ...n... . ...mb.
024650:  F7 10 00 31 00 F5 03 95 20 0D 00 00 6D 62 EC 2C    ...1.... ...mb.,
024660:  0E 2C 0D 00 00 6D 63 6F EC 01 AF 20 F5 0D 00 00    .,...mco... ....
024670:  6D 62 EC 2C F5 10 F5 28 0D 00 00 6D E4 EF F5 0F    mb.,...(...m....
024680:  21 00 0A 00 0D 00 00 6D 63 E8 EF 14 01 0D 00 00    !......mc.......
024690:  6D E6 EF 16 F4 19 20 01 0D 00 00 6D 64 E5 EF 0E    m..... ....md...
0246A0:  00 3F 00 14 00 0D 00 00 6D 63 6F EC EF 0F 01 0D    .?......mco.....
0246B0:  00 00 6D 73 F0 EF 19 20 01 0D 00 00 6D F8 EF 19    ..ms... ....m...
0246C0:  7C 01 0D 00 00 6D F9 EF 1A 42 01 01 0D 00 00 6D    |....m...B.....m
0246D0:  62 E8 EF 19 16 01 0D 00 00 6D 62 EC EF 19 84 00    b........mb.....
0246E0:  36 00 1E 00 0D 00 00 75 F0 EF 0E 01 0D 00 00 64    6......u.......d
0246F0:  6F F7 EF 10 01 0D 00 00 6C E5 EF 16 01 0D 00 00    o.......l.......
024700:  72 E9 EF 0F 01 0D 00 00 66 E9 EF 19 2F 01 0D 00    r.......f.../...
024710:  00 6B E6 EF 15 00 17 00 28 00 93 20 0D 00 00 6E    .k......(.. ...n
024720:  75 ED 28 0D 00 00 6D 63 E8 F5 0F 29 00 2A 00 32    u.(...mc...).*.2
024730:  00 AD 20 0F 01 A9 20 16 2C 11 01 BF 22 57 41 43    .. ... .,..."WAC
024740:  43 49 20 62 61 63 6B 2D 69 73 73 75 65 73 20 6F    CI back-issues o
024750:  72 64 65 72 73 22 00 1E 00 3C 00 A9 20 16 2C 12    rders"...<.. .,.
024760:  01 BF 20 FF 7B 28 19 18 2C 22 2D 22 29 01 A9 20    .. .{(..,"-").. 
024770:  0F 2C 19 13 00 40 00 46 00 BF 22 55 73 65 20 74    .,...@.F.."Use t
024780:  68 65 20 63 75 72 73 6F 72 20 6B 65 79 73 20 74    he cursor keys t
024790:  6F 20 6D 6F 76 65 20 61 6E 64 20 61 6C 74 65 72    o move and alter
0247A0:  2E 20 20 53 50 41 43 45 20 74 6F 20 66 69 6E 69    .  SPACE to fini
0247B0:  73 68 2E 22 00 40 00 50 00 9E 20 0D 00 00 6D F0    sh.".@.P.. ...m.
0247C0:  EF 0E 20 EC 20 0D 00 00 6D 63 E8 F5 0F 01 A9 20    .. . ...mc..... 
0247D0:  17 2C 14 F4 0D 00 00 6D F0 F6 10 01 BF 22 57 41    .,.....m....."WA
0247E0:  43 43 49 22 19 28 F4 0D 00 00 6D F0 01 9F 20 1E    CCI".(....m... .
0247F0:  D2 00 01 B0 00 19 00 5A 00 9E 20 0D 00 00 6D F0    .......Z.. ...m.
024800:  00 4D 45 4E 55 45 58 32 20 42 41 53 00 00 00 00    .MENUEX2 BAS....
024810:  00 00 00 00 00 70 01 00 64 04 00 00 00 00 00 00    .....p..d.......
024820:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024830:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024840:  64 04 00 3B 04 EC 2C 0E 2C 0D 00 00 6D 63 6F EC    d..;..,.,...mco.
024850:  01 AF 20 F5 0D 00 00 6D 62 EC 2C F5 10 F5 28 0D    .. ....mb.,...(.
024860:  00 00 6D E4 EF F5 0F 29 F6 12 00 1C 00 F6 03 9E    ..m....)........
024870:  20 0D 00 00 64 65 6C 61 F9 EF 0E 20 EC 20 0D 00     ...dela... . ..
024880:  22 00 0A 00 AD 20 0F 01 0D 00 00 6D 63 E8 EF 11    ".... .....mc...
024890:  01 0D 00 00 6D E6 EF 0E 01 0D 00 00 6D 64 E5 EF    ....m.......md..
0248A0:  0E 00 47 00 14 00 0D 00 00 6D 63 6F EC EF 10 01    ..G......mco....
0248B0:  0D 00 00 6D 73 F0 EF 19 10 01 0D 00 00 6D F8 EF    ...ms........m..
0248C0:  0E 01 0D 00 00 6D F9 EF 1A 8F 01 F5 13 F6 19 10    .....m..........
0248D0:  01 0D 00 00 6D 62 E8 EF 19 10 01 0D 00 00 6D 62    ....mb........mb
0248E0:  EC EF 19 10 F6 10 F5 10 00 37 00 1E 00 0D 00 00    .........7......
0248F0:  75 F0 EF 0E 01 0D 00 00 64 6F F7 EF 10 01 0D 00    u.......do......
024900:  00 6C E5 EF 19 2F 01 0D 00 00 72 E9 EF 0F 01 0D    .l.../....r.....
024910:  00 00 66 E9 EF 19 12 01 0D 00 00 6B E6 EF 13 00    ..f........k....
024920:  0F 00 28 00 0D 00 00 6F 75 72 6B E6 EF 0E 00 2F    ..(....ourk..../
024930:  00 32 00 BF 22 50 72 65 73 73 20 53 50 41 43 45    .2.."Press SPACE
024940:  20 74 6F 20 74 6F 67 67 6C 65 20 74 68 65 20 76     to toggle the v
024950:  61 6C 75 65 73 20 4F 6E 2F 4F 66 66 22 00 39 00    alues On/Off".9.
024960:  3C 00 BF 20 FF 03 28 19 22 29 22 4F 66 66 22 FF    <.. ..(.")"Off".
024970:  03 28 19 22 29 22 20 6D 65 61 6E 73 20 74 68 65    .(.")" means the
024980:  20 6B 65 79 20 77 6F 75 6C 64 20 62 65 20 69 67     key would be ig
024990:  6E 6F 72 65 64 22 00 30 00 46 00 BF 01 BF 22 50    nored".0.F...."P
0249A0:  72 65 73 73 20 52 45 54 55 52 4E 20 74 6F 20 63    ress RETURN to c
0249B0:  61 6C 63 75 6C 61 74 65 20 74 68 65 20 6B 66 20    alculate the kf 
0249C0:  76 61 6C 75 65 22 00 1C 00 50 00 A9 20 0F 2C 14    value"...P.. .,.
0249D0:  01 BF 22 6C 65 22 01 BF 22 72 69 22 01 BF 22 66    .."le".."ri".."f
0249E0:  69 22 00 29 00 5A 00 9E 20 0D 00 00 6D F0 EF 0E    i".).Z.. ...m...
0249F0:  20 EC 20 0D 00 00 6D 63 E8 F5 0F 01 9F 20 1E A0     . ...mc..... ..
024A00:  EF 0E 20 EC 20 0D 00 00 6D 63 E8 F5 0F 00 35 00    .. . ...mc....5.
024A10:  64 00 A1 20 0D 00 00 6D E6 20 FA 20 10 F8 0D 00    d.. ...m. . ....
024A20:  00 6D F0 20 EB 20 A9 20 19 1E 2C 10 F6 0D 00 00    .m. . . ..,.....
024A30:  6D F0 F4 14 01 BF 22 28 6E 6F 20 73 74 6F 63 6B    m....."(no stock
024A40:  29 22 00 06 00 6E 00 B0 00 14 00 78 00 0D 00 00    )"...n.....x....
024A50:  6D F0 EF 0E 01 0D 00 00 6B F0 EF 0E 00 0A 00 82    m.......k.......
024A60:  00 9F 20 1E F2 03 00 0E 00 8C 00 D6 20 0D 00 00    .. ......... ...
024A70:  6B F0 F2 12 00 3A 00 96 00 0D 00 00 6E 75 ED 28    k....:......nu.(
024A80:  0D 00 00 6D F0 29 EF 0D 00 00 6E 75 ED 28 0D 00    ...m.)....nu.(..
024A90:  00 6D F0 29 F4 28 0D 00 00 6B F0 EF 0F 29 F5 28    .m.).(...k...).(
024AA0:  0D 00 00 6B F0 EF 10 29 01 9F 20 1E D2 00 00 0A    ...k...).. .....
024AB0:  00 A0 00 9F 20 1E E8 03 00 06 00 AA 00 D5 00 41    .... ..........A
024AC0:  00 B4 00 0D 00 00 6D 61 67 F3 EF 0E 01 9E 20 0D    ......mag..... .
024AD0:  00 00 F8 EF 0E 20 EC 20 0D 00 00 6D 63 E8 F5 0F    ..... . ...mc...
024AE0:  01 0D 00 00 6D 61 67 F3 EF 0D 00 00 6D 61 67 F3    ....mag.....mag.
024AF0:  F4 0D 00 00 6E 75 ED 28 0D 00 00 F8 29 01 B0 00    ....nu.(....)...
024B00:  28 00 BE 00 A9 20 0F 2C 19 16 01 BF 22 54 68 61    (.... .,...."Tha
024B10:  6E 6B 20 79 6F 75 20 66 6F 72 20 79 6F 75 72 20    nk you for your 
024B20:  6F 72 64 65 72 2E 22 00 3C 00 C8 00 BF 22 50 6C    order.".<...."Pl
024B30:  65 61 73 65 20 73 65 6E 64 20 61 20 63 68 65 71    ease send a cheq
024B40:  75 65 20 66 6F 72 20 A3 22 3B ED 22 23 23 2E 23    ue for £";."##.#
024B50:  23 22 3B 1F 00 00 00 00 80 F6 0D 00 00 6D 61 67    #";..........mag
024B60:  F3 01 98 00 25 00 D2 00 A9 20 19 1B 2C 14 F4 0D    ....%.... ..,...
024B70:  00 00 6D F0 F6 10 01 BF 20 0D 00 00 6E 75 ED 28    ..m..... ...nu.(
024B80:  0D 00 00 6D F0 29 01 C9 00 1C 00 E8 03 0D 00 00    ...m.)..........
024B90:  6B F0 EF 0E 01 0D 00 00 6D E4 EF 0F 01 0D 00 00    k.......m.......
024BA0:  6D FA EF 0E 00 18 00 E9 03 D6 20 28 0D 00 00 6B    m......... (...k
024BB0:  F0 20 FA 20 0D 00 00 6B E6 29 EF 0E 00 22 00 EA    . . ...k.)..."..
024BC0:  03 D6 20 28 10 F8 0D 00 00 6D F0 20 FA 20 0D 00    .. (.....m. . ..
024BD0:  00 6D E6 29 EE 0E 20 FC 20 0D 00 00 6D FA 00 3C    .m.).. . ...m..<
024BE0:  00 EB 03 0D 00 00 6D FA EF 0E 01 9F 20 1E F2 03    ......m..... ...
024BF0:  01 0D 00 00 6D F0 EF 28 0D 00 00 6D F0 F4 0D 00    ....m..(...m....
024C00:  00 01 B0 01 0D 00 00 6D F0 EF 0E 00 0A 00 64 00    .......m......d.
024C10:  9F 20 1E F2 03 00 0E 00 6E 00 D6 20 0D 00 00 6B    . ......n.. ...k
024C20:  F0 F2 12 00 0A 00 78 00 9F 20 1E E8 03 00 46 00    ......x.. ....F.
024C30:  82 00 A1 20 0D 00 00 6B F0 EF 0F 20 EB 20 0D 00    ... ...k... . ..
024C40:  00 6F 75 72 6B E6 EF 0D 00 00 6F 75 72 6B E6 20    .ourk.....ourk. 
024C50:  FD 20 10 F8 0D 00 00 6D F0 01 9F 20 1E A0 00 01    . .....m... ....
024C60:  9E 20 0D 00 00 64 65 6C 61 F9 EF 0F 20 EC 20 19    . ...dela... . .
024C70:  64 01 B0 00 06 00 8C 00 D5 00 37 00 96 00 9F 20    d.........7.... 
024C80:  1E F2 03 01 A9 20 0F 2C 19 0A 01 BF 22 54 68 65    ..... .,...."The
024C90:  20 6B 66 20 76 61 6C 75 65 20 79 6F 75 20 6E 65     kf value you ne
024CA0:  65 64 20 69 73 22 0D 00 00 6F 75 72 6B E6 01 98    ed is"...ourk...
024CB0:  00 39 00 A0 00 A9 20 19 0A 2C 0D 00 00 6D F0 F4    .9.... ..,...m..
024CC0:  14 01 A1 20 0D 00 00 6F 75 72 6B E6 20 FA 20 10    ... ...ourk. . .
024CD0:  F8 0D 00 00 6D F0 20 EB 20 BF 22 4F 6E 20 22 20    ....m. . ."On " 
024CE0:  01 97 20 BF 22 4F 66 66 22 00 06 00 AA 00 C9 00    .. ."Off".......
024CF0:  1C 00 E8 03 0D 00 00 6B F0 EF 0E 01 0D 00 00 6D    .......k.......m
024D00:  E4 EF 0F 01 0D 00 00 6D FA EF 0E 00 18 00 E9 03    .......m........
024D10:  D6 20 28 0D 00 00 6B F0 20 FA 20 0D 00 00 6B E6    . (...k. . ...k.
024D20:  29 EF 0E 00 22 00 EA 03 D6 20 28 10 F8 0D 00 00    )...".... (.....
024D30:  6D F0 20 FA 20 0D 00 00 6D E6 29 EE 0E 20 FC 20    m. . ...m.).. . 
024D40:  0D 00 00 6D FA 00 3C 00 EB 03 0D 00 00 6D FA EF    ...m..<......m..
024D50:  0E 01 9F 20 1E F2 03 01 0D 00 00 6D F0 EF 28 0D    ... .......m..(.
024D60:  00 00 6D F0 F4 0D 00 00 6D 63 E8 F4 0D 00 00 6D    ..m.....mc.....m
024D70:  E4 29 20 FB 20 0D 00 00 6D 63 E8 01 9F 20 1E F2    .) . ...mc... ..
024D80:  03 00 06 00 EC 03 D5 00 35 00 ED 03 0D 00 00 6D    ........5......m
024D90:  E4 EF 28 FF 0A 28 0D 00 00 75 F0 29 EE F5 0F 29    ..(..(...u.)...)
024DA0:  F5 28 FF 0A 28 0D 00 00 64 6F F7 29 EE F5 0F 29    .(..(...do.)...)
024DB0:  01 0D 00 00 6D FA EF 0D 00 00 6D E4 00 3C 00 EE    ....m.....m..<..
024DC0:  03 0D 00 00 6B F0 EF F5 28 FF 0A 28 0D 00 00 6C    ....k...(..(...l
024DD0:  E5 29 EE F5 0F 29 F5 10 F6 28 FF 0A 28 0D 00 00    .)...)...(..(...
024DE0:  72 E9 29 EE F5 0F 29 F5 12 F6 28 FF 0A 28 0D 00    r.)...)...(..(..
024DF0:  00 66 E9 29 EE F5 0F 29 00 06 00 EF 03 D5 00 0E    .f.)...)........
024E00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
024E10:  1F 00 01 00 02 09 4E E5 1F 00 C1 02 00 00 00 02    ......N.........
024E20:  1F 00 C6 02 00 00 00 02 1F 00 C2 02 00 00 00 02    ................
024E30:  1F 00 C7 02 00 00 00 02 1F 00 C3 02 00 00 00 02    ................
024E40:  1F 00 C8 02 00 00 00 02 1F 00 C4 02 00 00 00 02    ................
024E50:  1F 00 C9 02 00 00 00 02 1F 00 C5 02 00 00 00 02    ................
024E60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024E70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024E80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024E90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024EA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024EB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024EC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024ED0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024EE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024EF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
024F00:  5A 00 9E 20 0D 00 00 6D F0 EF 0E 20 EC 20 0D 00    Z.. ...m... . ..
024F10:  00 6D 63 E8 F5 0F 00 35 00 64 00 A1 20 0D 00 00    .mc....5.d.. ...
024F20:  6D E6 20 FA 20 10 F8 0D 00 00 6D F0 20 EB 20 A9    m. . .....m. . .
024F30:  20 19 1E 2C 10 F6 0D 00 00 6D F0 F4 14 01 BF 22     ..,.....m....."
024F40:  28 6E 6F 20 73 74 6F 63 6B 29 22 00 06 00 6E 00    (no stock)"...n.
024F50:  B0 00 14 00 78 00 0D 00 00 6D F0 EF 0E 01 0D 00    ....x....m......
024F60:  00 6B F0 EF 0E 00 0A 00 82 00 9F 20 1E F2 03 00    .k......... ....
024F70:  0E 00 8C 00 D6 20 0D 00 00 6B F0 F2 12 00 5E 00    ..... ...k....^.
024F80:  96 00 0D 00 00 6E 75 ED 28 0D 00 00 6D F0 29 EF    .....nu.(...m.).
024F90:  0D 00 00 6E 75 ED 28 0D 00 00 6D F0 29 F4 28 28    ...nu.(...m.).((
024FA0:  28 0D 00 00 6B F0 20 FA 20 0F 29 EF 0F 29 F5 28    (...k. . .)..).(
024FB0:  28 0D 00 00 6B F0 20 FA 20 10 29 EF 10 29 29 F6    (...k. . .)..)).
024FC0:  28 0F F5 17 F6 28 28 0D 00 00 6B F0 20 FA 20 16    (....((...k. . .
024FD0:  29 EF 16 29 29 01 9F 20 1E D2 00 00 0A 00 A0 00    )..)).. ........
024FE0:  9F 20 1E E8 03 00 06 00 AA 00 D5 00 41 00 B4 00    . ..........A...
024FF0:  0D 00 00 6D 61 67 F3 EF 0E 01 9E 20 0D 00 00 F8    ...mag..... ....
025000:  EF 0E 20 EC 20 0D 00 00 6D 63 E8 F5 0F 01 0D 00    .. . ...mc......
025010:  00 6D 61 67 F3 EF 0D 00 00 6D 61 67 F3 F4 0D 00    .mag.....mag....
025020:  00 6E 75 ED 28 0D 00 00 F8 29 01 B0 00 28 00 BE    .nu.(....)...(..
025030:  00 A9 20 0F 2C 19 16 01 BF 22 54 68 61 6E 6B 20    .. .,...."Thank 
025040:  79 6F 75 20 66 6F 72 20 79 6F 75 72 20 6F 72 64    you for your ord
025050:  65 72 2E 22 00 3C 00 C8 00 BF 22 50 6C 65 61 73    er.".<...."Pleas
025060:  65 20 73 65 6E 64 20 61 20 63 68 65 71 75 65 20    e send a cheque 
025070:  66 6F 72 20 A3 22 3B ED 22 23 23 2E 23 23 22 3B    for £";."##.##";
025080:  1F 00 00 00 00 80 F6 0D 00 00 6D 61 67 F3 01 98    ..........mag...
025090:  00 25 00 D2 00 A9 20 19 1B 2C 14 F4 0D 00 00 6D    .%.... ..,.....m
0250A0:  F0 F6 10 01 BF 20 0D 00 00 6E 75 ED 28 0D 00 00    ..... ...nu.(...
0250B0:  6D F0 29 01 C9 00 1C 00 E8 03 0D 00 00 6B F0 EF    m.)..........k..
0250C0:  0E 01 0D 00 00 6D E4 EF 0F 01 0D 00 00 6D FA EF    .....m.......m..
0250D0:  0E 00 18 00 E9 03 D6 20 28 0D 00 00 6B F0 20 FA    ....... (...k. .
0250E0:  20 0D 00 00 6B E6 29 EF 0E 00 22 00 EA 03 D6 20     ...k.)...".... 
0250F0:  28 10 F8 0D 00 00 6D F0 20 FA 20 0D 00 00 6D E6    (.....m. . ...m.
025100:  00 50 45 4C 4D 41 4E 20 20 42 41 53 00 00 00 00    .PELMAN  BAS....
025110:  00 00 00 00 00 70 01 00 75 0B 00 00 00 00 00 00    .....p..u.......
025120:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
025130:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
025140:  75 0B 00 44 04 29 FF 03 28 0F 29 FF 03 28 19 C5    u..D.)..(.)..(..
025150:  29 FF 03 28 19 C7 29 FF 03 28 19 16 29 FF 03 28    )..(..)..(..)..(
025160:  0E 29 00 06 00 9E 11 C9 00 49 00 A8 11 A1 20 0D    .).......I.... .
025170:  00 00 72 6F F7 F2 0D 00 00 72 B1 20 FC 20 0D 00    ..ro.....r. . ..
025180:  44 00 05 00 C5 20 50 65 6C 6D 61 6E 69 73 6D 20    D.... Pelmanism 
025190:  76 2E 32 2E 30 20 28 53 69 6D 70 6C 65 20 76 65    v.2.0 (Simple ve
0251A0:  72 73 69 6F 6E 29 2C 20 44 65 63 20 31 39 39 37    rsion), Dec 1997
0251B0:  20 62 79 20 48 69 6C 61 72 79 20 50 68 69 6C 6C     by Hilary Phill
0251C0:  69 70 73 00 27 00 0A 00 CF 20 80 20 19 FF 01 CF    ips.'.... . ....
0251D0:  20 19 FF 2C 19 4C 2C 19 D2 2C 19 52 2C 19 52 2C     ..,.L,..,.R,.R,
0251E0:  19 52 2C 19 52 2C 19 4C 2C 0E 00 34 00 1E 00 93    .R,.R,.L,..4....
0251F0:  20 0D 00 00 70 61 63 EB 28 19 34 29 01 93 20 0D     ...pac.(.4).. .
025200:  00 00 E3 28 15 2C 14 29 01 93 20 03 00 00 70 EC    ...(.,.).. ...p.
025210:  28 14 29 01 93 20 0D 00 00 70 F7 28 14 29 00 25    (.).. ...p.(.).%
025220:  00 28 00 03 00 00 63 61 72 E4 EF 22 41 32 33 34    .(....car.."A234
025230:  35 36 37 38 39 22 F4 FF 03 28 19 FF 29 F4 22 4A    56789"...(..)."J
025240:  51 4B 22 00 33 00 32 00 9E 20 0D 00 00 EE EF 0F    QK".3.2.. ......
025250:  20 EC 20 19 34 01 0D 00 00 70 61 63 EB 28 0D 00     . .4....pac.(..
025260:  00 EE 29 EF 0D 00 00 EE F4 28 0D 00 00 EE F5 0F    ..)......(......
025270:  29 F9 19 0D 01 B0 00 27 00 46 00 A2 20 0E 2C 0E    )......'.F.. .,.
025280:  01 A2 20 0F 2C 14 01 A2 20 10 2C 19 1A 01 A2 20    .. .,... .,.... 
025290:  11 2C 17 01 AD 20 0F 01 BA 20 11 01 8A 00 23 00    .,... ... ....#.
0252A0:  50 00 D8 23 0F 2C 0F 2C 19 28 2C 19 18 2C 19 19    P..#.,.,.(,..,..
0252B0:  01 BA 23 0F 2C 11 01 BB 23 0F 2C 10 01 8A 23 0F    ..#.,...#.,...#.
0252C0:  00 0A 00 64 00 9F 20 1E E8 03 00 6B 00 6E 00 A9    ...d.. ....k.n..
0252D0:  23 0F 2C 0F 2C 0F 01 BF 23 0F 2C 22 45 6E 74 65    #.,.,...#.,"Ente
0252E0:  72 20 6E 75 6D 62 65 72 20 6F 66 20 70 6C 61 79    r number of play
0252F0:  65 72 73 20 28 31 2D 36 29 22 3B 01 0D 00 00 6E    ers (1-6)";....n
025300:  29 EE 0E 20 FC 20 0D 00 00 6D FA 00 3C 00 EB 03    ).. . ...m..<...
025310:  0D 00 00 6D FA EF 0E 01 9F 20 1E F2 03 01 0D 00    ...m..... ......
025320:  00 6D F0 EF 28 0D 00 00 6D F0 F4 0D 00 00 6D 63    .m..(...m.....mc
025330:  E8 F4 0D 00 00 6D E4 29 20 FB 20 0D 00 00 6D 63    .....m.) . ...mc
025340:  E8 01 9F 20 1E F2 03 00 06 00 EC 03 D5 00 35 00    ... ..........5.
025350:  ED 03 0D 00 00 6D E4 EF 28 FF 0A 28 0D 00 00 75    .....m..(..(...u
025360:  F0 29 EE F5 0F 29 F5 28 FF 0A 28 0D 00 00 64 6F    .)...).(..(...do
025370:  F7 29 EE F5 0F 29 01 0D 00 00 6D FA EF 0D 00 00    .)...)....m.....
025380:  6D E4 00 4D 00 EE 03 0D 00 00 6B F0 EF F5 28 FF    m..M......k...(.
025390:  0A 28 0D 00 00 6C E5 29 EE F5 0F 29 F5 10 F6 28    .(...l.)...)...(
0253A0:  FF 0A 28 0D 00 00 72 E9 29 EE F5 0F 29 F5 12 F6    ..(...r.)...)...
0253B0:  28 FF 0A 28 0D 00 00 66 E9 29 EE F5 0F 29 F5 16    (..(...f.)...)..
0253C0:  F6 28 FF 0A 28 0D 00 00 73 E8 29 EE F5 0F 29 00    .(..(...s.)...).
0253D0:  06 00 EF 03 D5 00 0E 00 F0 03 D6 20 FF 43 F2 22    ........... .C."
0253E0:  22 01 D5 00 06 00 F1 03 C9 00 14 00 F2 03 BF 20    ".............. 
0253F0:  FF 03 28 19 17 29 F4 FF 03 28 0F 29 3B 00 35 00    ..(..)...(.);.5.
025400:  F3 03 AE 20 0D 00 00 6D F8 2C 0D 00 00 6D F9 F5    ... ...m.,...m..
025410:  0D 00 00 6D F0 F6 0D 00 00 6D 73 F0 F4 28 0D 00    ...m.....ms..(..
025420:  00 6D E4 EF F5 0F 29 F6 28 0D 00 00 6D 62 E8 F5    .m....).(...mb..
025430:  10 29 00 19 00 F4 03 9E 20 0D 00 00 6D E3 EF 0F    .)...... ...m...
025440:  20 EC 20 0D 00 00 6D 62 E8 F7 10 00 31 00 F5 03     . ...mb....1...
025450:  95 20 0D 00 00 6D 62 EC 2C 0E 2C 0D 00 00 6D 63    . ...mb.,.,...mc
025460:  6F EC 01 AF 20 F5 0D 00 00 6D 62 EC 2C F5 10 F5    o... ....mb.,...
025470:  28 0D 00 00 6D E4 EF F5 0F 29 F6 12 00 1C 00 F6    (...m....)......
025480:  03 9E 20 0D 00 00 64 65 6C 61 F9 EF 0E 20 EC 20    .. ...dela... . 
025490:  0D 00 00 6D 64 E5 01 B0 00 06 00 F7 03 B0 00 14    ...md...........
0254A0:  00 F8 03 BF 20 FF 03 28 19 17 29 F4 FF 03 28 0E    .... ..(..)...(.
0254B0:  29 3B 00 06 00 F9 03 C9 00 00 00 1A 32 3A 6D 62    );..........2:mb
0254C0:  6C 3D 31 33 32 0D 0A 33 30 20 75 70 3D 30 3A 64    l=132..30 up=0:d
0254D0:  6F 77 3D 32 3A 6C 65 3D 38 3A 72 69 3D 31 3A 66    ow=2:le=8:ri=1:f
0254E0:  69 3D 34 37 3A 73 68 3D 32 31 3A 6B 66 3D 37 0D    i=47:sh=21:kf=7.
0254F0:  0A 34 30 20 44 49 4D 20 6E 75 6D 28 6D 63 68 2D    .40 DIM num(mch-
025500:  70 EC EF 0E 01 D6 20 0D 00 00 6E 70 EC F1 0F 20    p..... ...np... 
025510:  FC 20 0D 00 00 6E 70 EC EE 14 01 0D 00 00 6E 70    . ...np.......np
025520:  EC EF FF 1D 28 FF 43 29 01 D5 01 BF 23 0F 2C 0D    ....(.C)....#.,.
025530:  00 00 6E 70 EC 00 6D 00 78 00 9E 20 0D 00 00 EE    ..np..m.x.. ....
025540:  EF 0F 20 EC 20 0D 00 00 6E 70 EC 01 A9 23 0F 2C    .. . ...np...#.,
025550:  0F 2C 0F 01 BF 23 0F 2C 22 50 6C 61 79 65 72 22    .,...#.,"Player"
025560:  3B 0D 00 00 EE 3B 22 65 6E 74 65 72 20 79 6F 75    ;....;"enter you
025570:  72 20 6E 61 6D 65 3A 22 3B FF 03 28 19 14 29 01    r name:";..(..).
025580:  A6 20 A3 23 0F 2C 03 00 00 E1 01 03 00 00 70 EC    . £#.,........p.
025590:  28 0D 00 00 EE 29 EF FF 75 28 03 00 00 E1 2C 19    (....)..u(....,.
0255A0:  10 29 00 2A 00 82 00 A9 20 19 19 2C 0D 00 00 EE    .).*.... ..,....
0255B0:  F6 11 F5 10 01 BA 20 11 01 BB 20 10 01 BF 20 03    ...... ... ... .
0255C0:  00 00 70 EC 28 0D 00 00 EE 29 01 B0 00 2B 00 8C    ..p.(....)...+..
0255D0:  00 9E 20 0D 00 00 EE EF 0F 20 EC 20 14 01 0D 00    .. ...... . ....
0255E0:  00 70 F7 28 0D 00 00 EE 29 EF 0E 01 B0 01 0D 00    .p.(....).......
0255F0:  00 74 75 72 EE EF 0F 00 47 00 96 00 D6 20 0D 00    .tur....G.... ..
025600:  00 70 F7 28 0F 29 F4 0D 00 00 70 F7 28 10 29 F4    .p.(.)....p.(.).
025610:  0D 00 00 70 F7 28 11 29 F4 0D 00 00 70 F7 28 12    ...p.(.)....p.(.
025620:  29 F4 0D 00 00 70 F7 28 13 29 F4 0D 00 00 70 F7    )....p.(.)....p.
025630:  28 14 29 F1 19 1A 01 9F 20 1E D0 07 01 D5 00 81    (.)..... .......
025640:  00 C8 00 03 00 00 77 69 EE EF 22 22 01 9E 20 0D    ......wi.."".. .
025650:  00 00 EE EF 0F 20 EC 20 0D 00 00 6E 70 EC 01 A1    ..... . ...np...
025660:  20 0D 00 00 70 F7 28 0D 00 00 EE 29 EF FF 76 28     ...p.(....)..v(
025670:  0D 00 00 70 F7 28 0F 29 2C 0D 00 00 70 F7 28 10    ...p.(.),...p.(.
025680:  29 2C 0D 00 00 70 F7 28 11 29 2C 0D 00 00 70 F7    ),...p.(.),...p.
025690:  28 12 29 2C 0D 00 00 70 F7 28 13 29 2C 0D 00 00    (.),...p.(.),...
0256A0:  70 F7 28 14 29 29 20 EB 20 03 00 00 77 69 EE EF    p.(.)) . ...wi..
0256B0:  03 00 00 77 69 EE F4 FF 03 28 0D 00 00 EE 29 00    ...wi....(....).
0256C0:  23 00 D2 00 B0 01 A9 20 0F 2C 17 01 BA 20 11 01    #...... .,... ..
0256D0:  BB 20 10 01 BF 22 54 68 65 20 77 69 6E 6E 65 72    . ..."The winner
0256E0:  22 3B 00 76 00 DC 00 A1 20 FF 0E 28 03 00 00 77    ";.v.... ..(...w
0256F0:  69 EE 29 EF 0F 20 EB 20 BF 22 20 69 73 20 22 3B    i.).. . ." is ";
025700:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025710:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025720:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025730:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025740:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025750:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025760:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025770:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025780:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025790:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0257A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0257B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0257C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0257D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0257E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0257F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025800:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025810:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025820:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025830:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025840:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025850:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025860:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025870:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025880:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025890:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0258A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0258B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0258C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0258D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0258E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
0258F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
025900:  03 00 00 70 EC 28 FF 01 28 03 00 00 77 69 EE 29    ...p.(..(...wi.)
025910:  29 3B 22 2E 22 20 01 97 20 BF 22 73 20 61 72 65    );"." .. ."s are
025920:  3A 22 01 9E 20 0D 00 00 EE EF 0F 20 EC 20 FF 0E    :".. ...... . ..
025930:  28 03 00 00 77 69 EE 29 01 BF 20 03 00 00 70 EC    (...wi.).. ...p.
025940:  28 FF 01 28 AC 28 03 00 00 77 69 EE 2C 0D 00 00    (..(.(...wi.,...
025950:  EE 2C 0F 29 29 29 01 B0 00 67 00 E6 00 A9 23 0F    .,.)))...g....#.
025960:  2C 0F 2C 0F 01 BF 23 0F 2C 22 50 72 65 73 73 20    ,.,...#.,"Press 
025970:  50 20 74 6F 20 70 6C 61 79 20 61 67 61 69 6E 2C    P to play again,
025980:  20 51 20 74 6F 20 71 75 69 74 22 3B FF 03 28 19     Q to quit";..(.
025990:  14 29 3B 01 03 00 00 E1 EF 22 22 01 D6 20 03 00    .);......"".. ..
0259A0:  00 E1 F1 22 50 22 20 FC 20 03 00 00 E1 EE 22 51    ..."P" . ....."Q
0259B0:  22 01 03 00 00 E1 EF FF 1C 28 FF 43 29 01 D5 00    "........(.C)...
0259C0:  15 00 F0 00 A1 20 03 00 00 E1 EF 22 50 22 20 A0    ..... ....."P" .
0259D0:  20 1E 32 00 00 16 00 FA 00 83 20 1C 02 BC 01 83     .2....... .....
0259E0:  20 1C 4E BB 01 AD 20 0F 01 98 00 2D 00 E8 03 A9     .N... ....-....
0259F0:  23 0F 2C 19 0A 2C 0F 01 BF 23 0F 2C FF 03 28 19    #.,..,...#.,..(.
025A00:  11 29 3B 22 44 65 61 6C 69 6E 67 2E 2E 2E 22 3B    .);"Dealing...";
025A10:  FF 03 28 19 14 29 3B 00 9A 00 F2 03 0D 00 00 EE    ..(..);.........
025A20:  EF 19 34 01 9E 20 0D 00 00 72 6F F7 EF 0E 20 EC    ..4.. ...ro... .
025A30:  20 14 01 9E 20 0D 00 00 63 6F EC EF 0E 20 EC 20     ... ...co... . 
025A40:  14 01 0D 00 00 63 64 65 EC EF FF 0C 28 FF 45 F6    .....cde....(.E.
025A50:  0D 00 00 EE F4 0F 29 01 0D 00 00 E3 28 0D 00 00    ......).....(...
025A60:  72 6F F7 2C 0D 00 00 63 6F EC 29 EF 0D 00 00 70    ro.,...co.)....p
025A70:  61 63 EB 28 0D 00 00 63 64 65 EC 29 01 0D 00 00    ac.(...cde.)....
025A80:  70 61 63 EB 28 0D 00 00 63 64 65 EC 29 EF 0D 00    pac.(...cde.)...
025A90:  00 70 61 63 EB 28 0D 00 00 EE 29 01 9F 20 1E AC    .pac.(....).. ..
025AA0:  0D 01 0D 00 00 EE EF 0D 00 00 EE F5 0F 01 B0 01    ................
025AB0:  B0 00 86 00 FC 03 9E 20 0D 00 00 63 6F EC EF 0E    ....... ...co...
025AC0:  20 EC 20 10 01 0D 00 00 63 64 65 EC EF FF 0C 28     . .....cde....(
025AD0:  FF 45 28 0F 29 F6 0D 00 00 EE F4 0F 29 01 0D 00    .E(.).......)...
025AE0:  00 E3 28 0D 00 00 72 6F F7 2C 0D 00 00 63 6F EC    ..(...ro.,...co.
025AF0:  29 EF 0D 00 00 70 61 63 EB 28 0D 00 00 63 64 65    )....pac.(...cde
025B00:  31 30 30 30 20 6B 70 3D 30 3A 6D 64 3D 31 3A 6D    1000 kp=0:md=1:m
025B10:  7A 3D 30 0D 0A 31 30 30 31 20 57 48 49 4C 45 20    z=0..1001 WHILE 
025B20:  28 6B 70 20 41 4E 44 20 6B 66 29 3D 30 0D 0A 31    (kp AND kf)=0..1
025B30:  30 30 32 20 57 48 49 4C 45 20 28 32 5E 6D 70 20    002 WHILE (2^mp 
025B40:  41 4E 44 20 6D 66 29 3E 30 20 4F 52 20 6D 7A 0D    AND mf)>0 OR mz.
025B50:  0A 31 30 30 33 20 6D 7A 3D 30 3A 47 4F 53 55 42    .1003 mz=0:GOSUB
025B60:  20 31 30 31 30 3A 6D 70 3D 28 6D 70 2B 6D 63 68     1010:mp=(mp+mch
025B70:  2B 6D 64 29 20 4D 4F 44 20 6D 63 68 3A 47 4F 53    +md) MOD mch:GOS
025B80:  55 42 20 31 30 31 30 0D 0A 31 30 30 34 20 57 45    UB 1010..1004 WE
025B90:  4E 44 0D 0A 31 30 30 35 20 6D 64 3D 28 49 4E 4B    ND..1005 md=(INK
025BA0:  45 59 28 75 70 29 3E 2D 31 29 2D 28 49 4E 4B 45    EY(up)>-1)-(INKE
025BB0:  59 28 64 6F 77 29 3E 2D 31 29 3A 6D 7A 3D 6D 64    Y(dow)>-1):mz=md
025BC0:  0D 0A 31 30 30 36 20 6B 70 3D 2D 28 49 4E 4B 45    ..1006 kp=-(INKE
025BD0:  59 28 6C 65 29 3E 2D 31 29 2D 32 2A 28 49 4E 4B    Y(le)>-1)-2*(INK
025BE0:  45 59 28 72 69 29 3E 2D 31 29 2D 34 2A 28 49 4E    EY(ri)>-1)-4*(IN
025BF0:  4B 45 59 28 66 69 29 3E 2D 31 29 0D 0A 31 30 30    KEY(fi)>-1)..100
025C00:  37 20 57 45 4E 44 0D 0A 31 30 30 38 20 57 48 49    7 WEND..1008 WHI
025C10:  4C 45 20 49 4E 4B 45 59 24 3C 3E 22 22 3A 57 45    LE INKEY$<>"":WE
025C20:  4E 44 0D 0A 31 30 30 39 20 52 45 54 55 52 4E 0D    ND..1009 RETURN.
025C30:  0A 31 30 31 30 20 50 52 49 4E 54 20 43 48 52 24    .1010 PRINT CHR$
025C40:  28 32 33 29 2B 43 48 52 24 28 31 29 3B 0D 0A 31    (23)+CHR$(1);..1
025C50:  30 31 31 20 4D 4F 56 45 20 6D 78 2C 6D 79 2D 6D    011 MOVE mx,my-m
025C60:  70 2A 6D 73 70 2B 28 6D 64 3D 2D 31 29 2A 28 6D    p*msp+(md=-1)*(m
025C70:  62 68 2D 32 29 0D 0A 31 30 31 32 20 46 4F 52 20    bh-2)..1012 FOR 
025C80:  6D 63 3D 31 20 54 4F 20 6D 62 68 2F 32 0D 0A 31    mc=1 TO mbh/2..1
025C90:  30 31 33 20 44 52 41 57 52 20 6D 62 6C 2C 30 2C    013 DRAWR mbl,0,
025CA0:  6D 63 6F 6C 3A 4D 4F 56 45 52 20 2D 6D 62 6C 2C    mcol:MOVER -mbl,
025CB0:  2D 32 2D 28 6D 64 3D 2D 31 29 2A 34 0D 0A 31 30    -2-(md=-1)*4..10
025CC0:  31 34 20 46 4F 52 20 64 65 6C 61 79 3D 30 20 54    14 FOR delay=0 T
025CD0:  4F 20 6D 64 65 3A 4E 45 58 54 0D 0A 31 30 31 35    O mde:NEXT..1015
025CE0:  20 4E 45 58 54 0D 0A 31 30 31 36 20 50 52 49 4E     NEXT..1016 PRIN
025CF0:  54 20 43 48 52 24 28 32 33 29 2B 43 48 52 24 28    T CHR$(23)+CHR$(
025D00:  EC 29 01 0D 00 00 70 61 63 EB 28 0D 00 00 63 64    .)....pac.(...cd
025D10:  65 EC 29 EF 0D 00 00 70 61 63 EB 28 0D 00 00 EE    e.)....pac.(....
025D20:  29 01 9F 20 1E AC 0D 01 0D 00 00 EE EF 0D 00 00    ).. ............
025D30:  EE F5 0F 01 B0 01 C9 00 2E 00 D0 07 0D 00 00 72    ...............r
025D40:  6F F7 EF 0E 01 0D 00 00 63 6F EC EF 0E 01 0D 00    o.......co......
025D50:  00 72 B1 EF F5 0F 01 0D 00 00 63 B1 EF F5 0F 01    .r........c.....
025D60:  9F 20 1E 94 11 00 47 00 DA 07 03 00 00 6D 75 E4    . ....G......mu.
025D70:  EF 22 22 01 9F 20 1E C4 09 01 9F 20 1E B8 0B 01    ."".. ..... ....
025D80:  0D 00 00 72 B1 EF 0D 00 00 72 6F F7 01 0D 00 00    ...r.....ro.....
025D90:  63 B1 EF 0D 00 00 63 6F EC 01 0D 00 00 63 61 72    c.....co.....car
025DA0:  64 73 65 EC EF 0D 00 00 63 61 72 E4 00 1A 00 E4    dse.....car.....
025DB0:  07 03 00 00 6D 75 E4 EF 22 6E 6F 74 68 65 72 22    ....mu.."nother"
025DC0:  01 9F 20 1E C4 09 00 31 00 EE 07 A1 20 0D 00 00    .. ....1.... ...
025DD0:  72 6F F7 F2 0D 00 00 72 B1 20 FC 20 0D 00 00 63    ro.....r. . ...c
025DE0:  6F EC F2 0D 00 00 63 B1 20 EB 20 9F 20 1E B8 0B    o.....c. . . ...
025DF0:  20 01 97 20 1E E4 07 00 26 00 F8 07 A1 20 0D 00     .. ....&.... ..
025E00:  00 63 61 72 E4 EF 0D 00 00 63 61 72 64 73 65 EC    .car.....cardse.
025E10:  20 EB 20 1E 34 08 20 01 97 20 1E 98 08 00 58 00     . .4. .. ....X.
025E20:  34 08 A9 23 0F 2C 0F 2C 0F 01 BF 23 0F 2C 22 54    4..#.,.,...#.,"T
025E30:  68 65 79 20 6D 61 74 63 68 21 20 57 65 6C 6C 20    hey match! Well 
025E40:  64 6F 6E 65 20 22 3B 03 00 00 70 EC 28 0D 00 00    done ";...p.(...
025E50:  74 75 72 EE 29 3B 22 2E 22 3B FF 03 28 19 14 29    tur.);".";..(..)
025E60:  01 9E 20 0D 00 00 64 65 6C 61 F9 EF 0F 20 EC 20    .. ...dela... . 
025E70:  1A F4 01 01 B0 00 56 00 3E 08 9F 20 1E A0 0F 01    ......V.>.. ....
025E80:  0D 00 00 E3 28 0D 00 00 72 6F F7 2C 0D 00 00 63    ....(...ro.,...c
025E90:  6F EC 29 EF 0E 01 0D 00 00 72 6F F7 EF 0D 00 00    o.)......ro.....
025EA0:  72 B1 01 0D 00 00 63 6F EC EF 0D 00 00 63 B1 01    r.....co.....c..
025EB0:  0D 00 00 E3 28 0D 00 00 72 6F F7 2C 0D 00 00 63    ....(...ro.,...c
025EC0:  6F EC 29 EF 0E 01 9F 20 1E A0 0F 00 50 00 48 08    o.).... ....P.H.
025ED0:  0D 00 00 70 F7 28 0D 00 00 74 75 72 EE 29 EF 0D    ...p.(...tur.)..
025EE0:  00 00 70 F7 28 0D 00 00 74 75 72 EE 29 F4 0F 01    ..p.(...tur.)...
025EF0:  A9 20 19 1B 2C 0D 00 00 74 75 72 EE F6 11 F5 0F    . ..,...tur.....
025F00:  30 29 3B 0D 0A 31 30 31 37 20 52 45 54 55 52 4E    0);..1017 RETURN
025F10:  0D 0A 1A 00 00 72 01 00 C8 25 00 00 00 00 00 00    .....r...%......
025F20:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
025F30:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
025F40:  C8 25 00 F1 04 61 79 3D 30 20 54 4F 20 6D 64 65    .%...ay=0 TO mde
025F50:  3A 4E 45 58 54 0D 0A 31 30 31 35 20 4E 45 58 54    :NEXT..1015 NEXT
025F60:  0D 0A 31 30 31 36 20 50 52 49 4E 54 20 43 48 52    ..1016 PRINT CHR
025F70:  24 28 32 33 29 2B 43 48 52 24 28 30 29 3B 0D 0A    $(23)+CHR$(0);..
025F80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
025F90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
025FA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
025FB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
025FC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
025FD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
025FE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
025FF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026000:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026010:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026020:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026030:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026040:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026050:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026060:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026070:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026080:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026090:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0260A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0260B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0260C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0260D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0260E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0260F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026100:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
026110:  20 00 01 00 02 09 4E E5 20 00 C8 02 00 00 00 02     .....N. .......
026120:  20 00 C4 02 00 00 00 02 20 00 C9 02 00 00 00 02     ....... .......
026130:  20 00 C5 02 00 00 00 02 20 00 C1 02 00 00 00 02     ....... .......
026140:  20 00 C6 02 00 00 00 02 20 00 C2 02 00 00 00 02     ....... .......
026150:  20 00 C7 02 00 00 00 02 20 00 C3 02 00 00 00 02     ....... .......
026160:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026170:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026180:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026190:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0261A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0261B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0261C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0261D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0261E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0261F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026200:  CD CE 91 CD FE 91 CD 12 91 B7 C0 37 C9 3E 45 CD    ...........7.>E.
026210:  97 91 CD E6 91 18 EC CD B8 91 7B CD B8 91 16 04    ..........{.....
026220:  DD 7E 00 CD B8 91 DD 23 15 20 F5 DD 7E FE CD B8    .~.....#. ..~...
026230:  91 3E 11 CD B8 91 3E FF F3 01 7E FB F5 ED 78 87    .>....>...~...x.
026240:  30 FB FA BD 91 F1 0C ED 79 06 07 10 FE C9 F3 01    0.......y.......
026250:  7E FB C3 DB 91 0C ED 78 77 23 0D ED 78 F2 DB 91    ~......xw#..x...
026260:  E6 20 C2 D5 91 C9 F3 01 7E FB C3 F3 91 0C 7E ED    . ......~.....~.
026270:  79 23 0D ED 78 F2 F3 91 E6 20 C2 ED 91 C9 21 DA    y#..x.... ....!.
026280:  92 F3 01 7E FB ED 78 FE C0 38 FA 0C ED 78 77 23    ...~..x..8...xw#
026290:  0D 3E 05 00 3D 20 FC ED 78 E6 10 20 E8 FB C9 F5    .>..= ..x.. ....
0262A0:  3E FF DF 2D 90 F1 21 DA 92 06 07 36 00 23 10 FB    >..-..!....6.#..
0262B0:  DD 6E 00 DD 23 DD 66 00 DD 23 22 D8 92 23 36 00    .n..#.f..#"..#6.
0262C0:  3D C9 C1 32 D2 92 AF DF 2D 90 3A D2 92 2A D8 92    =..2....-.:..*..
0262D0:  77 C9 23 10 FD 0D 20 38 3E 0C 32 E2 92 3E 42 C3    w.#... 8>.2..>B.
0262E0:  43 92 7B 32 D1 92 11 E5 92 06 0C C5 3E 4A CD B8    C.{2........>J..
0262F0:  91 3A D1 92 CD B8 91 CD FE 91 CD 12 91 C2 42 92    .:............B.
026300:  21 DD 92 01 04 00 ED B0 C1 10 E0 0E 0B 21 E9 92    !............!..
026310:  06 04 11 E5 92 1A BE 20 B9 13 23 10 F8 3E 0C 91    ....... ..#..>..
026320:  32 E2 92 AF C3 43 92 CD 45 91 B7 C2 42 92 3E 4D    2....C..E...B.>M
026330:  CD B8 91 7B CD B8 91 21 E1 92 16 04 7E CD B8 91    ...{...!....~...
026340:  23 15 20 F8 CD E6 91 CD FE 91 CD 12 91 C8 C3 42    #. ............B
026350:  92 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026360:  00 02 00 00 E5 00 00 00 00 00 00 00 00 00 00 00    ................
026370:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026380:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026390:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0263A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0263B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0263C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0263D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0263E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0263F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
026400:  54 68 65 72 65 20 69 73 20 6E 6F 20 70 6F 69 6E    There is no poin
026410:  74 20 75 73 69 6E 67 20 74 68 69 73 20 70 72 6F    t using this pro
026420:  67 72 61 6D 20 69 66 20 79 6F 75 20 68 61 76 65    gram if you have
026430:  20 61 20 73 69 64 65 20 73 77 69 74 63 68 20 66     a side switch f
026440:  69 74 74 65 64 2E 22 00 62 00 46 00 BF 01 BF 22    itted.".b.F...."
026450:  57 41 52 4E 49 4E 47 3A 20 2D 20 74 68 65 20 63    WARNING: - the c
026460:  6F 6E 74 65 6E 74 73 20 6F 66 20 74 68 65 20 64    ontents of the d
026470:  69 73 63 20 69 6E 20 64 72 69 76 65 20 41 20 77    isc in drive A w
026480:  69 6C 6C 20 62 65 20 6F 76 65 72 77 72 69 74 74    ill be overwritt
026490:  65 6E 20 62 79 20 74 68 69 73 20 20 20 20 20 20    en by this      
0264A0:  70 72 6F 67 72 61 6D 2E 22 00 51 00 50 00 BF 01    program.".Q.P...
0264B0:  BF 22 54 68 69 73 20 70 72 6F 67 72 61 6D 20 6D    ."This program m
0264C0:  61 79 20 62 65 20 66 72 65 65 6C 79 20 64 69 73    ay be freely dis
0264D0:  74 72 69 62 75 74 65 64 20 70 72 6F 76 69 64 65    tributed provide
0264E0:  64 20 74 68 61 74 20 69 74 20 69 73 20 6E 6F 74    d that it is not
0264F0:  20 61 6C 74 65 72 65 64 2E 22 00 08 00 5A 00 BF     altered."...Z..
026500:  01 BF 00 68 00 64 00 BF 22 50 75 74 20 64 69 73    ...h.d.."Put dis
026510:  63 20 74 6F 20 63 6F 70 79 20 66 72 6F 6D 20 69    c to copy from i
026520:  6E 20 64 72 69 76 65 20 42 2E 22 01 BF 22 50 75    n drive B.".."Pu
026530:  74 20 64 69 73 63 20 74 6F 20 63 6F 70 79 20 74    t disc to copy t
026540:  6F 20 69 6E 20 64 72 69 76 65 20 41 2E 22 01 BF    o in drive A."..
026550:  22 50 72 65 73 73 20 61 6E 79 20 6B 65 79 20 74    "Press any key t
026560:  6F 20 63 6F 70 79 2E 2E 2E 22 00 18 00 6E 00 D6    o copy..."...n..
026570:  20 FF 43 F2 22 22 01 D5 01 D6 20 FF 43 EF 22 22     .C."".... .C.""
026580:  01 D5 00 23 00 78 00 BF 01 7C 00 42 43 4F 50 D9    ...#.x...|.BCOP.
026590:  2C 40 02 00 00 74 72 61 63 EB 2C 40 02 00 00 65    ,@...trac.,@...e
0265A0:  F2 01 BF 01 BF 00 57 00 82 00 A1 20 02 00 00 65    ......W.... ...e
0265B0:  F2 EE 0E 20 EB 20 BF 22 45 72 72 6F 72 22 02 00    ... . ."Error"..
0265C0:  00 65 F2 22 77 68 65 6E 20 63 6F 70 79 69 6E 67    .e."when copying
0265D0:  20 74 72 61 63 6B 22 02 00 00 74 72 61 63 EB 01     track"...trac..
0265E0:  9F 20 1E C8 00 20 01 97 20 BF 22 43 6F 70 79 69    . ... .. ."Copyi
0265F0:  6E 67 20 63 6F 6D 70 6C 65 74 65 22 00 0E 00 8C    ng complete"....
026600:  23 50 72 6F 67 72 61 6D 6D 65 72 73 27 20 50 61    #Programmers' Pa
026610:  74 63 68 20 31 30 20 2D 20 57 41 43 43 49 20 31    tch 10 - WACCI 1
026620:  31 39 2C 20 46 65 62 20 31 39 39 38 2C 20 70 2E    19, Feb 1998, p.
026630:  20 31 37 2D 31 38 0D 0A 20 20 20 50 52 4F 47 52     17-18..   PROGR
026640:  41 4D 4D 45 52 53 27 20 50 41 54 43 48 20 31 30    AMMERS' PATCH 10
026650:  0D 0A 20 20 20 42 79 20 4D 61 74 74 68 65 77 20    ..   By Matthew 
026660:  50 68 69 6C 6C 69 70 73 0D 0A 0D 0A 20 20 20 54    Phillips....   T
026670:  68 69 73 20 6D 6F 6E 74 68 20 69 6E 20 50 72 6F    his month in Pro
026680:  67 72 61 6D 6D 65 72 73 27 20 50 61 74 63 68 20    grammers' Patch 
026690:  77 65 20 61 72 65 20 20 67 6F 69 6E 67 20 20 74    we are  going  t
0266A0:  6F 20 73 74 61 72 74 20 61 20 73 68 6F 72 74 20    o start a short 
0266B0:  73 65 72 69 65 73 20 6F 6E 0D 0A 20 20 20 4D 49    series on..   MI
0266C0:  44 49 20 70 72 6F 67 72 61 6D 6D 69 6E 67 2E 20    DI programming. 
0266D0:  20 41 6C 74 68 6F 75 67 68 20 74 68 65 72 65 20     Although there 
0266E0:  68 61 76 65 20 62 65 65 6E 20 6D 61 6E 79 20 72    have been many r
0266F0:  65 76 69 65 77 73 20 6F 66 20 4D 49 44 49 20 65    eviews of MIDI e
026700:  71 75 69 70 6D 65 6E 74 0D 0A 20 20 20 66 6F 72    quipment..   for
026710:  20 74 68 65 20 41 6D 73 74 72 61 64 20 69 6E 20     the Amstrad in 
026720:  6D 61 67 61 7A 69 6E 65 73 20 6F 76 65 72 20 74    magazines over t
026730:  68 65 20 79 65 61 72 73 2C 20 74 68 65 72 65 20    he years, there 
026740:  68 61 73 20 62 65 65 6E 20 76 65 72 79 20 6C 69    has been very li
026750:  74 74 6C 65 20 6F 6E 0D 0A 20 20 20 68 6F 77 20    ttle on..   how 
026760:  74 6F 20 70 72 6F 67 72 61 6D 20 79 6F 75 72 20    to program your 
026770:  43 50 43 20 74 6F 20 20 63 6F 6E 74 72 6F 6C 20    CPC to  control 
026780:  20 4D 49 44 49 20 65 71 75 69 70 6D 65 6E 74 2E     MIDI equipment.
026790:  20 20 54 68 69 73 20 6D 6F 6E 74 68 20 61 6C 73      This month als
0267A0:  6F 20 73 65 65 73 0D 0A 20 20 20 74 68 65 20 66    o sees..   the f
0267B0:  69 72 73 74 20 61 6E 6E 69 76 65 72 73 61 72 79    irst anniversary
0267C0:  20 6F 66 20 74 68 65 20 50 72 6F 67 72 61 6D 6D     of the Programm
0267D0:  65 72 73 27 20 50 61 74 63 68 20 73 65 72 69 65    ers' Patch serie
0267E0:  73 2C 20 61 6E 64 20 69 66 20 74 68 65 20 72 65    s, and if the re
0267F0:  76 69 65 77 73 0D 0A 20 20 20 69 6E 20 6C 61 73    views..   in las
026800:  00 BF 01 BF 01 A0 20 1E 64 00 00 2B 00 C8 00 A1    ...... .d..+....
026810:  20 02 00 00 65 F2 20 FA 20 0F 20 EB 20 BF 22 4D     ...e. . . . ."M
026820:  69 73 73 69 6E 67 20 61 64 64 72 65 73 73 20 6D    issing address m
026830:  61 72 6B 2E 22 00 2E 00 D2 00 A1 20 02 00 00 65    ark."...... ...e
026840:  F2 20 FA 20 10 20 EB 20 BF 22 44 69 73 63 20 69    . . . . ."Disc i
026850:  73 20 77 72 69 74 65 20 70 72 6F 74 65 63 74 65    s write protecte
026860:  64 2E 22 00 2D 00 DC 00 A1 20 02 00 00 65 F2 20    d.".-.... ...e. 
026870:  FA 20 12 20 EB 20 BF 22 43 61 6E 6E 6F 74 20 66    . . . ."Cannot f
026880:  69 6E 64 20 74 68 65 20 73 65 63 74 6F 72 2E 22    ind the sector."
026890:  00 36 00 E6 00 A1 20 02 00 00 65 F2 20 FA 20 16    .6.... ...e. . .
0268A0:  20 EB 20 BF 22 44 69 73 63 20 6D 69 73 73 69 6E     . ."Disc missin
0268B0:  67 20 6F 72 20 64 72 69 76 65 20 6E 6F 74 20 72    g or drive not r
0268C0:  65 61 64 79 2E 22 00 25 00 F0 00 A1 20 02 00 00    eady.".%.... ...
0268D0:  65 F2 20 FA 20 19 10 20 EB 20 BF 22 4F 76 65 72    e. . .. . ."Over
0268E0:  72 75 6E 20 65 72 72 6F 72 2E 22 00 22 00 FA 00    run error."."...
0268F0:  A1 20 02 00 00 65 F2 20 FA 20 19 20 20 EB 20 BF    . ...e. . .  . .
026900:  22 44 61 74 61 20 65 72 72 6F 72 2E 22 00 06 00    "Data error."...
026910:  04 01 C9 00 00 00 1A 69 64 65 2E 62 69 6E 22 2C    .......ide.bin",
026920:  26 39 30 30 30 3A 67 70 62 75 66 66 25 3D 30 3A    &9000:gpbuff%=0:
026930:  43 41 4C 4C 20 26 39 30 30 30 2C 40 67 70 62 75    CALL &9000,@gpbu
026940:  66 66 25 0D 0A 32 30 20 74 72 61 63 6B 25 3D 30    ff%..20 track%=0
026950:  3A 65 72 25 3D 30 0D 0A 33 30 20 4D 4F 44 45 20    :er%=0..30 MODE 
026960:  32 0D 0A 34 30 20 50 52 49 4E 54 22 42 53 69 64    2..40 PRINT"BSid
026970:  65 20 76 20 31 2E 30 20 62 79 20 4D 61 74 74 68    e v 1.0 by Matth
026980:  01 D5 00 23 00 78 00 BF 01 7C 00 42 43 4F 50 D9    ...#.x...|.BCOP.
026990:  2C 40 02 00 00 74 72 61 63 EB 2C 40 02 00 00 65    ,@...trac.,@...e
0269A0:  F2 01 BF 01 BF 00 57 00 82 00 A1 20 02 00 00 65    ......W.... ...e
0269B0:  F2 EE 0E 20 EB 20 BF 22 45 72 72 6F 72 22 02 00    ... . ."Error"..
0269C0:  00 65 F2 22 77 68 65 6E 20 63 6F 70 79 69 6E 67    .e."when copying
0269D0:  20 74 72 61 63 6B 22 02 00 00 74 72 61 63 EB 01     track"...trac..
0269E0:  9F 20 1E C8 00 20 01 97 20 BF 22 43 6F 70 79 69    . ... .. ."Copyi
0269F0:  6E 67 20 63 6F 6D 70 6C 65 74 65 22 00 0E 00 8C    ng complete"....
026A00:  01 BA 20 11 01 BB 20 10 01 BF 20 0D 00 00 70 F7    .. ... ... ...p.
026A10:  28 0D 00 00 74 75 72 EE 29 01 C9 00 40 00 98 08    (...tur.)...@...
026A20:  A9 23 0F 2C 0F 2C 0F 01 BF 23 0F 2C 22 54 68 65    .#.,.,...#.,"The
026A30:  79 20 64 6F 6E 27 74 20 6D 61 74 63 68 21 22 3B    y don't match!";
026A40:  FF 03 28 19 14 29 01 9E 20 0D 00 00 64 65 6C 61    ..(..).. ...dela
026A50:  F9 EF 0F 20 EC 20 1A 88 13 01 B0 00 49 00 A2 08    ... . ......I...
026A60:  9F 20 1E AC 0D 01 0D 00 00 72 6F F7 EF 0D 00 00    . .......ro.....
026A70:  72 B1 01 0D 00 00 63 6F EC EF 0D 00 00 63 B1 01    r.....co.....c..
026A80:  9F 20 1E AC 0D 01 0D 00 00 74 75 72 EE EF 28 0D    . .......tur..(.
026A90:  00 00 74 75 72 EE 20 FB 20 0D 00 00 6E 70 EC 29    ..tur. . ...np.)
026AA0:  F4 0F 01 C9 00 46 00 C4 09 A9 23 0F 2C 0F 2C 0F    .....F....#.,.,.
026AB0:  01 BF 23 0F 2C 22 43 68 6F 6F 73 65 20 61 22 3B    ..#.,"Choose a";
026AC0:  03 00 00 6D 75 E4 3B 22 20 63 61 72 64 2C 20 22    ...mu.;" card, "
026AD0:  3B 03 00 00 70 EC 28 0D 00 00 74 75 72 EE 29 3B    ;...p.(...tur.);
026AE0:  22 2E 22 3B FF 03 28 19 14 29 00 4B 00 CE 09 03    ".";..(..).K....
026AF0:  00 00 6B F0 EF 22 22 01 D6 20 28 03 00 00 6B F0    ..k.."".. (...k.
026B00:  F1 FF 03 28 19 F0 29 20 FC 20 03 00 00 6B F0 EE    ...(..) . ...k..
026B10:  FF 03 28 19 F3 29 29 20 FA 20 03 00 00 6B F0 F2    ..(..)) . ...k..
026B20:  FF 03 28 19 0D 29 01 03 00 00 6B F0 EF FF 1C 28    ..(..)....k....(
026B30:  FF 43 29 01 D5 00 2F 00 D8 09 A1 20 03 00 00 6B    .C).../.... ...k
026B40:  F0 EF FF 03 28 19 0D 29 20 FA 20 0D 00 00 E3 28    ....(..) . ....(
026B50:  0D 00 00 72 6F F7 2C 0D 00 00 63 6F EC 29 EE 0E    ...ro.,...co.)..
026B60:  20 EB 20 C9 00 33 00 E2 09 9F 20 1E A8 11 01 A1     . ..3.... .....
026B70:  20 03 00 00 6B F0 EF FF 03 28 19 F0 29 20 EB 20     ...k....(..) . 
026B80:  0D 00 00 72 6F F7 EF 28 0D 00 00 72 6F F7 F5 0F    ...ro..(...ro...
026B90:  F4 16 29 20 FB 20 16 00 2B 00 EC 09 A1 20 03 00    ..) . ..+.... ..
026BA0:  00 6B F0 EF FF 03 28 19 F1 29 20 EB 20 0D 00 00    .k....(..) . ...
026BB0:  72 6F F7 EF 28 0D 00 00 72 6F F7 F4 0F 29 20 FB    ro..(...ro...) .
026BC0:  20 16 00 2D 00 F6 09 A1 20 03 00 00 6B F0 EF FF     ..-.... ...k...
026BD0:  03 28 19 F2 29 20 EB 20 0D 00 00 63 6F EC EF 28    .(..) . ...co..(
026BE0:  0D 00 00 63 6F EC F5 0F F4 15 29 20 FB 20 15 00    ...co.....) . ..
026BF0:  2B 00 00 0A A1 20 03 00 00 6B F0 EF FF 03 28 19    +.... ...k....(.
026C00:  39 38 0D 0A 0D 0A 73 65 63 74 62 75 66 66 3D 30    98....sectbuff=0
026C10:  38 30 30 30 68 0D 0A 0D 0A 3B 69 6E 69 74 69 61    8000h....;initia
026C20:  6C 69 73 61 74 69 6F 6E 20 72 6F 75 74 69 6E 65    lisation routine
026C30:  20 74 6F 20 62 65 20 63 61 6C 6C 65 64 20 77 69     to be called wi
026C40:  74 68 20 43 41 4C 4C 20 26 39 30 30 30 0D 0A 41    th CALL &9000..A
026C50:  4F 52 47 20 30 39 30 30 30 68 0D 0A 0D 0A 3B 4C    ORG 09000h....;L
026C60:  44 20 4C 2C 28 49 58 2B 30 29 0D 0A 3B 4C 44 20    D L,(IX+0)..;LD 
026C70:  48 2C 28 49 58 2B 31 29 0D 0A 3B 4C 44 20 44 45    H,(IX+1)..;LD DE
026C80:  2C 67 70 62 75 66 66 0D 0A 3B 4C 44 20 28 48 4C    ,gpbuff..;LD (HL
026C90:  29 2C 45 0D 0A 3B 49 4E 43 20 48 4C 0D 0A 3B 4C    ),E..;INC HL..;L
026CA0:  44 20 28 48 4C 29 2C 44 0D 0A 0D 0A 4C 44 20 42    D (HL),D....LD B
026CB0:  43 2C 6A 75 6D 70 73 0D 0A 4C 44 20 48 4C 2C 77    C,jumps..LD HL,w
026CC0:  6F 72 6B 73 70 0D 0A 43 41 4C 4C 20 30 42 43 44    orksp..CALL 0BCD
026CD0:  31 68 0D 0A 3B 66 69 6E 64 20 66 61 72 20 61 64    1h..;find far ad
026CE0:  64 72 65 73 73 65 73 0D 0A 4C 44 20 49 58 2C 66    dresses..LD IX,f
026CF0:  61 72 61 64 64 72 73 0D 0A 4C 44 20 48 4C 2C 6D    araddrs..LD HL,m
026D00:  65 73 73 65 73 0D 0A 66 61 72 66 69 6E 64 6C 6F    esses..farfindlo
026D10:  6F 70 3A 20 4C 44 20 41 2C 28 48 4C 29 0D 0A 4F    op: LD A,(HL)..O
026D20:  52 20 41 0D 0A 52 45 54 20 5A 0D 0A 50 55 53 48    R A..RET Z..PUSH
026D30:  20 48 4C 0D 0A 43 41 4C 4C 20 30 42 43 44 34 68     HL..CALL 0BCD4h
026D40:  0D 0A 4C 44 20 28 49 58 2B 30 29 2C 4C 0D 0A 4C    ..LD (IX+0),L..L
026D50:  44 20 28 49 58 2B 31 29 2C 48 0D 0A 4C 44 20 28    D (IX+1),H..LD (
026D60:  49 58 2B 32 29 2C 43 0D 0A 49 4E 43 20 49 58 0D    IX+2),C..INC IX.
026D70:  0A 49 4E 43 20 49 58 0D 0A 49 4E 43 20 49 58 0D    .INC IX..INC IX.
026D80:  0A 50 4F 50 20 48 4C 0D 0A 49 4E 43 20 48 4C 0D    .POP HL..INC HL.
026D90:  0A 4A 52 20 66 61 72 66 69 6E 64 6C 6F 6F 70 0D    .JR farfindloop.
026DA0:  0A 0D 0A 3B 20 73 74 6F 72 65 73 20 66 6F 72 20    ...; stores for 
026DB0:  52 53 58 20 63 6F 6D 6D 61 6E 64 73 20 74 68 61    RSX commands tha
026DC0:  74 20 61 72 65 20 73 65 61 72 63 68 65 64 20 66    t are searched f
026DD0:  6F 72 2C 20 74 65 72 6D 69 6E 61 74 65 64 20 62    or, terminated b
026DE0:  79 20 61 20 7A 65 72 6F 20 62 79 74 65 0D 0A 6D    y a zero byte..m
026DF0:  65 73 73 65 73 3A 20 44 45 46 42 20 30 38 31 68    esses: DEFB 081h
026E00:  F3 29 20 EB 20 0D 00 00 63 6F EC EF 28 0D 00 00    .) . ...co..(...
026E10:  63 6F EC F4 0F 29 20 FB 20 15 00 10 00 0A 0A 9F    co...) . .......
026E20:  20 1E 94 11 01 A0 20 1E CE 09 00 5E 00 B8 0B 0D     ..... ....^....
026E30:  00 00 73 75 69 F4 EF 0D 00 00 E3 28 0D 00 00 72    ..sui......(...r
026E40:  6F F7 2C 0D 00 00 63 6F EC 29 F9 19 0E 01 0D 00    o.,...co.)......
026E50:  00 63 61 72 E4 EF 0D 00 00 E3 28 0D 00 00 72 6F    .car......(...ro
026E60:  F7 2C 0D 00 00 63 6F EC 29 20 FB 20 19 0E 01 0D    .,...co.) . ....
026E70:  00 00 70 63 6F EC EF FF 77 28 0F 2C 0D 00 00 73    ..pco...w(.,...s
026E80:  75 69 F4 20 FB 20 11 29 00 52 00 C2 0B A9 20 0D    ui. . .).R.... .
026E90:  00 00 63 6F EC F6 11 F4 10 2C 0D 00 00 72 6F F7    ..co.....,...ro.
026EA0:  F6 10 F4 10 01 BA 20 10 01 BB 20 0D 00 00 70 63    ...... ... ...pc
026EB0:  6F EC 01 BF 20 AC 28 03 00 00 63 61 72 E4 2C 0D    o... .(...car.,.
026EC0:  00 00 63 61 72 E4 2C 0F 29 3B FF 03 28 19 E2 F4    ..car.,.);..(...
026ED0:  0D 00 00 73 75 69 F4 29 01 C9 00 35 00 AC 0D A9    ...sui.)...5....
026EE0:  20 0D 00 00 63 6F EC F6 11 F4 10 2C 0D 00 00 72     ...co.....,...r
026EF0:  6F F7 F6 10 F4 10 01 BA 20 0E 01 BB 20 0F 01 BF    o....... ... ...
026F00:  20 FF 03 28 19 DC 29 FF 03 28 19 DE 29 01 C9 00     ..(..)..(..)...
026F10:  29 00 A0 0F A9 20 0D 00 00 63 6F EC F6 11 F4 10    ).... ...co.....
026F20:  2C 0D 00 00 72 6F F7 F6 10 F4 10 01 BA 20 11 01    ,...ro....... ..
026F30:  BF 20 22 20 20 22 01 C9 00 65 00 94 11 A1 20 0D    . "  "...e.... .
026F40:  00 00 72 6F F7 F2 0D 00 00 72 B1 20 FC 20 0D 00    ..ro.....r. . ..
026F50:  00 63 6F EC F2 0D 00 00 63 B1 20 EB 20 A9 20 0D    .co.....c. . . .
026F60:  00 00 63 6F EC F6 11 F4 10 2C 0D 00 00 72 6F F7    ..co.....,...ro.
026F70:  F6 10 F4 10 01 BB 20 10 01 BF 20 FF 03 28 19 16    ...... ... ..(..
026F80:  29 FF 03 28 0F 29 FF 03 28 19 C5 29 FF 03 28 19    )..(.)..(..)..(.
026F90:  C7 29 FF 03 28 19 16 29 FF 03 28 0E 29 00 06 00    .)..(..)..(.)...
026FA0:  9E 11 C9 00 49 00 A8 11 A1 20 0D 00 00 72 6F F7    ....I.... ...ro.
026FB0:  F2 0D 00 00 72 B1 20 FC 20 0D 00 00 63 6F EC F2    ....r. . ...co..
026FC0:  0D 00 00 63 B1 20 EB 20 A1 20 0D 00 00 E3 28 0D    ...c. . . ....(.
026FD0:  00 00 72 6F F7 2C 0D 00 00 63 6F EC 29 EE 0E 20    ..ro.,...co.).. 
026FE0:  EB 20 1E AC 0D 20 01 97 20 1E A0 0F 00 06 00 B2    . ... .. .......
026FF0:  11 C9 00 00 00 1A 2C 37 36 2C 30 0D 0A 33 30 20    ......,76,0..30 
027000:  00 42 53 49 44 45 20 20 20 42 49 4E 00 00 00 00    .BSIDE   BIN....
027010:  00 00 02 00 00 00 90 00 E5 02 00 00 00 00 00 00    ................
027020:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
027030:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
027040:  E5 02 00 00 05 00 00 00 00 00 00 00 00 00 00 00    ................
027050:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
027060:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
027070:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
027080:  01 33 90 21 38 90 CD D1 BC DD 21 2D 90 21 2A 90    .3.!8.....!-.!*.
027090:  7E B7 C8 E5 CD D4 BC DD 75 00 DD 74 01 DD 71 02    ~.......u..t..q.
0270A0:  DD 23 DD 23 DD 23 E1 23 18 E6 81 87 00 00 00 00    .#.#.#.#........
0270B0:  00 00 00 3C 90 C3 42 90 00 00 00 00 42 43 4F 50    ...<..B.....BCOP
0270C0:  D9 00 CD 1F 92 21 E2 90 CD D9 90 CD 78 BB 22 D6    .....!......x.".
0270D0:  92 DD 6E 00 DD 66 01 22 D3 92 23 36 00 2B AF 32    ..n..f."..#6.+.2
0270E0:  D5 92 77 1E 05 57 3A D5 92 CD F2 90 CD 45 91 D2    ..w..W:......E..
0270F0:  43 92 CD 62 92 B7 C0 3A E2 92 D6 07 47 10 04 3E    C..b...:....G..>
027100:  50 18 0E 10 04 3E 52 18 08 10 04 3E 32 18 02 3E    P....>R....>2..>
027110:  52 32 E3 92 1E 00 2A D3 92 56 CD A7 92 DD 21 E5    R2....*..V....!.
027120:  92 3A E2 92 47 C5 DD E5 1E 05 21 00 80 CD 7B 91    .:..G.....!...{.
027130:  DD E1 D2 42 92 1E 00 21 00 80 CD 8D 91 D2 42 92    ...B...!......B.
027140:  C1 10 E2 3A D5 92 C6 01 27 32 D5 92 2A D3 92 7E    ...:....'2..*..~
027150:  3C FE 28 20 8D AF C3 43 92 7E B7 C8 CD 5A BB 23    <.( ...C.~...Z.#
027160:  18 F7 43 6F 70 79 69 6E 67 20 74 72 61 63 6B 3A    ..Copying track:
027170:  20 00 F5 2A D6 92 CD 75 BB F1 47 CB 3F CB 3F CB     ..*...u..G.?.?.
027180:  3F CB 3F 28 05 C6 30 CD 5A BB 78 E6 0F C6 30 C3    ?.?(..0.Z.x...0.
027190:  5A BB 21 DA 92 7E 23 E6 08 47 7E E6 37 B0 C9 3E    Z.!..~#..G~.7..>
0271A0:  01 01 7E FA ED 79 21 00 15 2B 7C B5 C8 3E 04 CD    ..~..y!..+|..>..
0271B0:  B8 91 7B E6 03 CD B8 91 E5 CD FE 91 E1 3A DA 92    ..{..........:..
0271C0:  CB 6F 28 E5 C9 E5 C5 CD 1F 91 D5 DF 30 90 D1 3E    .o(.........0..>
0271D0:  0F CD B8 91 7B CD B8 91 7A CD B8 91 3E 08 CD B8    ....{...z...>...
0271E0:  91 CD FE 91 3A DA 92 CB 6F 28 F1 3A DB 92 BA C1    ....:...o(.:....
0271F0:  E1 20 D2 3A DA 92 E6 08 C0 37 C9 3E 66 CD 97 91    . .:.....7.>f...
027200:  00 42 53 49 44 45 20 20 20 42 41 53 00 00 00 00    .BSIDE   BAS....
027210:  00 00 00 00 00 70 01 00 96 04 00 00 00 00 00 00    .....p..........
027220:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
027230:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
027240:  96 04 00 42 04 22 44 61 74 61 20 65 72 72 6F 72    ...B."Data error
027250:  2E 22 00 06 00 04 01 C9 00 00 00 1A 69 64 65 2E    ."..........ide.
027260:  62 69 6E 22 2C 26 39 30 30 30 3A 67 70 62 75 66    bin",&9000:gpbuf
027270:  66 25 3D 30 3A 43 41 4C 4C 20 26 39 30 30 30 2C    f%=0:CALL &9000,
027280:  38 00 0A 00 AA 20 1C FF 7F 01 A8 22 62 73 69 64    8.... ....."bsid
027290:  65 2E 62 69 6E 22 2C 1C 00 90 01 02 00 00 67 70    e.bin",.......gp
0272A0:  62 75 66 E6 EF 0E 01 83 20 1C 00 90 2C 40 02 00    buf..... ...,@..
0272B0:  00 67 70 62 75 66 E6 00 17 00 14 00 02 00 00 74    .gpbuf.........t
0272C0:  72 61 63 EB EF 0E 01 02 00 00 65 F2 EF 0E 00 08    rac.......e.....
0272D0:  00 1E 00 AD 20 10 00 37 00 28 00 BF 22 42 53 69    .... ..7.(.."BSi
0272E0:  64 65 20 76 20 31 2E 30 20 62 79 20 4D 61 74 74    de v 1.0 by Matt
0272F0:  68 65 77 20 50 68 69 6C 6C 69 70 73 2C 20 53 65    hew Phillips, Se
027300:  70 74 65 6D 62 65 72 20 31 39 39 38 22 00 EA 00    ptember 1998"...
027310:  32 00 BF 01 BF 22 54 68 69 73 20 70 72 6F 67 72    2...."This progr
027320:  61 6D 20 69 73 20 66 6F 72 20 75 73 65 20 62 79    am is for use by
027330:  20 74 68 6F 73 65 20 77 69 74 68 20 61 20 33 2E     those with a 3.
027340:  35 22 F4 FF 03 28 19 22 29 F4 22 20 64 69 73 63    5"...(.")." disc
027350:  20 64 72 69 76 65 20 77 68 69 63 68 20 68 61 73     drive which has
027360:  20 6E 6F 20 73 69 64 65 20 73 77 69 74 63 68 66     no side switchf
027370:  69 74 74 65 64 2E 20 20 49 66 20 74 68 65 20 33    itted.  If the 3
027380:  2E 35 22 F4 FF 03 28 19 22 29 F4 22 20 64 72 69    .5"...(.")." dri
027390:  76 65 20 69 73 20 63 6F 6E 6E 65 63 74 65 64 20    ve is connected 
0273A0:  61 73 20 64 72 69 76 65 20 42 2C 20 74 68 69 73    as drive B, this
0273B0:  20 70 72 6F 67 72 61 6D 20 77 69 6C 6C 20 63 6F     program will co
0273C0:  70 79 20 74 68 65 20 20 73 65 63 6F 6E 64 20 73    py the  second s
0273D0:  69 64 65 20 6F 66 20 74 68 65 20 64 69 73 63 20    ide of the disc 
0273E0:  69 6E 20 64 72 69 76 65 20 42 20 74 6F 20 64 72    in drive B to dr
0273F0:  69 76 65 20 41 2E 22 00 50 00 3C 00 BF 01 BF 22    ive A.".P.<...."
027400:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
027410:  21 00 01 00 02 09 4E E5 21 00 C6 02 00 00 00 02    !.....N.!.......
027420:  21 00 C2 02 00 00 00 02 21 00 C7 02 00 00 00 02    !.......!.......
027430:  21 00 C3 02 00 00 00 02 21 00 C8 02 00 00 00 02    !.......!.......
027440:  21 00 C4 02 00 00 00 02 21 00 C9 02 00 00 00 02    !.......!.......
027450:  21 00 C5 02 00 00 00 02 21 00 C1 02 00 00 00 02    !.......!.......
027460:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
027470:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
027480:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
027490:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0274A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0274B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0274C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0274D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0274E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0274F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
027500:  0A 20 20 20 6D 75 73 69 63 21 20 20 46 6F 72 20    .   music!  For 
027510:  69 6E 73 74 61 6E 63 65 2C 20 69 66 20 79 6F 75    instance, if you
027520:  20 68 61 76 65 20 74 77 6F 20 63 6F 6D 70 75 74     have two comput
027530:  65 72 73 20 77 69 74 68 20 4D 49 44 49 20 69 6E    ers with MIDI in
027540:  74 65 72 66 61 63 65 73 2C 20 74 68 65 6E 0D 0A    terfaces, then..
027550:  20 20 20 79 6F 75 20 63 61 6E 20 75 73 65 20 4D       you can use M
027560:  49 44 49 20 74 6F 20 67 65 74 20 74 68 65 20 63    IDI to get the c
027570:  6F 6D 70 75 74 65 72 73 20 74 6F 20 74 72 61 6E    omputers to tran
027580:  73 66 65 72 20 61 6E 79 20 6B 69 6E 64 20 6F 66    sfer any kind of
027590:  20 64 61 74 61 20 62 65 74 77 65 65 6E 0D 0A 20     data between.. 
0275A0:  20 20 74 68 65 6D 2E 0D 0A 0D 0A 20 20 20 57 69      them.....   Wi
0275B0:  74 68 20 73 75 69 74 61 62 6C 65 20 73 6F 66 74    th suitable soft
0275C0:  77 61 72 65 2C 20 79 6F 75 20 63 61 6E 20 65 64    ware, you can ed
0275D0:  69 74 20 20 61 20 20 70 69 65 63 65 20 20 6F 66    it  a  piece  of
0275E0:  20 6D 75 73 69 63 20 6F 6E 20 79 6F 75 72 20 63     music on your c
0275F0:  6F 6D 70 75 74 65 72 2C 0D 0A 20 20 20 61 6E 64    omputer,..   and
027600:  20 74 68 65 6E 20 75 73 65 20 4D 49 44 49 20 74     then use MIDI t
027610:  6F 20 20 69 6E 73 74 72 75 63 74 20 20 79 6F 75    o  instruct  you
027620:  72 20 20 6B 65 79 62 6F 61 72 64 20 20 74 6F 20    r  keyboard  to 
027630:  20 70 6C 61 79 20 69 74 20 66 6F 72 20 79 6F 75     play it for you
027640:  2E 20 20 53 6F 6D 65 0D 0A 20 20 20 65 64 69 74    .  Some..   edit
027650:  6F 72 73 20 75 73 65 20 63 6F 6E 76 65 6E 74 69    ors use conventi
027660:  6F 6E 61 6C 20 20 6D 75 73 69 63 61 6C 20 20 6E    onal  musical  n
027670:  6F 74 61 74 69 6F 6E 2C 20 20 6F 74 68 65 72 73    otation,  others
027680:  20 20 6F 70 65 72 61 74 65 20 20 6D 6F 72 65 20      operate  more 
027690:  6C 69 6B 65 20 61 0D 0A 20 20 20 73 65 71 75 65    like a..   seque
0276A0:  6E 63 65 72 2E 20 20 4D 6F 72 65 20 61 64 76 61    ncer.  More adva
0276B0:  6E 63 65 64 20 20 73 6F 66 74 77 61 72 65 20 20    nced  software  
0276C0:  65 6E 61 62 6C 65 73 20 20 79 6F 75 20 20 74 6F    enables  you  to
0276D0:  20 20 70 6C 61 79 20 20 6D 75 73 69 63 20 6F 6E      play  music on
0276E0:  20 79 6F 75 72 0D 0A 20 20 20 6B 65 79 62 6F 61     your..   keyboa
0276F0:  72 64 20 77 68 69 6C 65 20 74 68 65 20 63 6F 6D    rd while the com
027700:  74 73 20 61 6E 64 0D 0A 20 20 20 73 6F 6D 65 20    ts and..   some 
027710:  74 79 70 65 73 20 6F 66 20 63 6F 6D 70 75 74 65    types of compute
027720:  72 20 63 6F 6D 65 20 77 69 74 68 20 20 4D 49 44    r come with  MID
027730:  49 20 63 61 70 61 62 69 6C 69 74 69 65 73 20 62    I capabilities b
027740:  75 69 6C 74 20 69 6E 2E 20 20 54 68 65 20 41 6D    uilt in.  The Am
027750:  73 74 72 61 64 0D 0A 20 20 20 75 6E 66 6F 72 74    strad..   unfort
027760:  75 6E 61 74 65 6C 79 20 69 73 20 6E 6F 74 20 6F    unately is not o
027770:  6E 65 20 6F 66 20 74 68 65 6D 2E 0D 0A 0D 0A 20    ne of them..... 
027780:  20 20 4D 49 44 49 20 49 4E 54 45 52 46 41 43 45      MIDI INTERFACE
027790:  53 20 46 4F 52 20 54 48 45 20 43 50 43 0D 0A 20    S FOR THE CPC.. 
0277A0:  20 20 54 6F 20 75 73 65 20 79 6F 75 72 20 41 6D      To use your Am
0277B0:  73 74 72 61 64 20 20 74 6F 20 20 63 6F 6E 74 72    strad  to  contr
0277C0:  6F 6C 20 20 4D 49 44 49 20 20 69 6E 73 74 72 75    ol  MIDI  instru
0277D0:  6D 65 6E 74 73 20 20 79 6F 75 20 20 77 69 6C 6C    ments  you  will
0277E0:  20 6E 65 65 64 20 61 20 4D 49 44 49 0D 0A 20 20     need a MIDI..  
0277F0:  20 69 6E 74 65 72 66 61 63 65 2C 20 77 68 69 63     interface, whic
027800:  68 20 70 6C 75 67 73 20 69 6E 74 6F 20 74 68 65    h plugs into the
027810:  20 65 78 70 61 6E 73 69 6F 6E 20 20 70 6F 72 74     expansion  port
027820:  20 61 6E 64 20 70 72 6F 76 69 64 65 73 20 74 68     and provides th
027830:  65 20 6E 65 63 65 73 73 61 72 79 0D 0A 20 20 20    e necessary..   
027840:  65 6C 65 63 74 72 6F 6E 69 63 73 20 61 6E 64 20    electronics and 
027850:  74 68 65 20 4D 49 44 49 20 73 6F 63 6B 65 74 73    the MIDI sockets
027860:  2E 20 20 20 54 68 65 72 65 20 20 77 65 72 65 20    .   There  were 
027870:  73 65 76 65 72 61 6C 20 64 69 66 66 65 72 65 6E    several differen
027880:  74 20 6D 61 6B 65 73 20 6F 66 0D 0A 20 20 20 69    t makes of..   i
027890:  6E 74 65 72 66 61 63 65 20 70 72 6F 64 75 63 65    nterface produce
0278A0:  64 20 66 6F 72 20 74 68 65 20 20 43 50 43 2C 20    d for the  CPC, 
0278B0:  20 61 6E 64 20 20 77 68 69 6C 65 20 20 74 68 65     and  while  the
0278C0:  79 20 20 61 6C 6C 20 20 68 61 64 20 6D 75 63 68    y  all  had much
0278D0:  20 74 68 65 20 73 61 6D 65 0D 0A 20 20 20 63 61     the same..   ca
0278E0:  70 61 62 69 6C 69 74 79 20 69 6E 20 74 65 72 6D    pability in term
0278F0:  73 20 6F 66 20 68 61 72 64 77 61 72 65 2C 20 74    s of hardware, t
027900:  70 75 74 65 72 20 72 65 63 6F 72 64 73 20 69 74    puter records it
027910:  20 69 6E 20 6D 65 6D 6F 72 79 20 66 6F 72 20 73     in memory for s
027920:  61 76 69 6E 67 20 6F 72 20 65 64 69 74 69 6E 67    aving or editing
027930:  2E 0D 0A 0D 0A 20 20 20 45 76 65 6E 20 77 69 74    .....   Even wit
027940:  68 6F 75 74 20 65 64 69 74 69 6E 67 20 73 6F 66    hout editing sof
027950:  74 77 61 72 65 2C 20 79 6F 75 20 63 61 6E 20 20    tware, you can  
027960:  75 73 65 20 20 4D 49 44 49 20 20 74 6F 20 67 65    use  MIDI  to ge
027970:  74 20 6D 6F 72 65 20 6F 75 74 20 6F 66 20 79 6F    t more out of yo
027980:  75 72 0D 0A 20 20 20 6B 65 79 62 6F 61 72 64 2E    ur..   keyboard.
027990:  20 20 46 6F 72 20 65 78 61 6D 70 6C 65 20 20 53      For example  S
0279A0:  74 65 70 68 65 6E 27 73 20 20 59 61 6D 61 68 61    tephen's  Yamaha
0279B0:  20 20 50 53 53 2D 36 38 30 20 20 6B 65 79 62 6F      PSS-680  keybo
0279C0:  61 72 64 20 20 68 61 73 20 61 20 63 75 73 74 6F    ard  has a custo
0279D0:  6D 0D 0A 20 20 20 64 72 75 6D 6D 65 72 20 66 6F    m..   drummer fo
0279E0:  72 20 64 65 73 69 67 6E 69 6E 67 20 64 72 75 6D    r designing drum
0279F0:  20 73 65 71 75 65 6E 63 65 73 2C 20 62 75 74 20     sequences, but 
027A00:  69 74 20 20 63 61 6E 20 6F 6E 6C 79 20 72 65 6D    it  can only rem
027A10:  65 6D 62 65 72 20 61 20 66 65 77 20 61 74 20 61    ember a few at a
027A20:  0D 0A 20 20 20 74 69 6D 65 2E 20 20 55 73 69 6E    ..   time.  Usin
027A30:  67 20 4D 49 44 49 20 77 65 20 63 61 6E 20 74 72    g MIDI we can tr
027A40:  61 6E 73 6D 69 74 20 74 68 65 20 64 72 75 6D 20    ansmit the drum 
027A50:  6D 65 6D 6F 72 79 20 74 6F 20 74 68 65 20 63 6F    memory to the co
027A60:  6D 70 75 74 65 72 20 61 6E 64 20 73 61 76 65 0D    mputer and save.
027A70:  0A 20 20 20 69 74 20 74 6F 20 64 69 73 63 20 66    .   it to disc f
027A80:  6F 72 20 66 75 74 75 72 65 20 75 73 65 2E 20 20    or future use.  
027A90:  49 74 20 20 63 61 6E 20 20 74 68 65 6E 20 20 62    It  can  then  b
027AA0:  65 20 20 6C 6F 61 64 65 64 20 61 6E 64 20 73 65    e  loaded and se
027AB0:  6E 74 20 62 61 63 6B 20 74 6F 20 74 68 65 0D 0A    nt back to the..
027AC0:  20 20 20 6B 65 79 62 6F 61 72 64 2E 0D 0A 0D 0A       keyboard.....
027AD0:  20 20 20 57 48 41 54 20 41 42 4F 55 54 20 54 48       WHAT ABOUT TH
027AE0:  45 20 50 52 4F 47 52 41 4D 4D 49 4E 47 3F 0D 0A    E PROGRAMMING?..
027AF0:  20 20 20 57 65 6C 6C 2C 20 73 69 6E 63 65 20 74       Well, since t
027B00:  68 65 20 73 6F 66 74 77 61 72 65 20 20 74 68 61    he software  tha
027B10:  74 20 63 61 6D 65 20 77 69 74 68 20 65 61 63 68    t came with each
027B20:  20 6F 6E 65 20 77 61 73 0D 0A 20 20 20 76 65 72     one was..   ver
027B30:  79 20 64 69 66 66 65 72 65 6E 74 20 61 6E 64 20    y different and 
027B40:  76 61 72 69 65 64 20 69 6E 20 71 75 61 6C 69 74    varied in qualit
027B50:  79 2E 0D 0A 0D 0A 20 20 20 54 68 65 20 6D 61 69    y.....   The mai
027B60:  6E 20 69 6E 74 65 72 66 61 63 65 73 20 61 72 65    n interfaces are
027B70:  20 74 68 65 20 45 4D 52 20 69 6E 74 65 72 66 61     the EMR interfa
027B80:  63 65 2C 20 74 68 65 20 44 48 43 50 20 69 6E 74    ce, the DHCP int
027B90:  65 72 66 61 63 65 2C 20 61 6E 64 20 74 68 65 20    erface, and the 
027BA0:  52 41 4D 0D 0A 20 20 20 4D 75 73 69 63 20 4D 61    RAM..   Music Ma
027BB0:  63 68 69 6E 65 2C 20 77 68 69 63 68 20 61 6C 73    chine, which als
027BC0:  6F 20 69 6E 63 6C 75 64 65 64 20 61 20 73 61 6D    o included a sam
027BD0:  70 6C 65 72 2E 20 20 42 65 63 61 75 73 65 20 74    pler.  Because t
027BE0:  68 65 20 69 6E 74 65 72 66 61 63 65 73 20 75 73    he interfaces us
027BF0:  65 64 0D 0A 20 20 20 64 69 66 66 65 72 65 6E 74    ed..   different
027C00:  20 70 6F 72 74 20 61 64 64 72 65 73 73 65 73 2C     port addresses,
027C10:  20 73 6F 66 74 77 61 72 65 20 77 72 69 74 74 65     software writte
027C20:  6E 20 20 66 6F 72 20 20 6F 6E 65 20 20 77 69 6C    n  for  one  wil
027C30:  6C 20 6E 6F 74 20 77 6F 72 6B 20 6F 6E 20 74 68    l not work on th
027C40:  65 0D 0A 20 20 20 6F 74 68 65 72 20 6D 61 6B 65    e..   other make
027C50:  73 2E 20 20 54 68 65 72 65 20 68 61 73 20 68 6F    s.  There has ho
027C60:  77 65 76 65 72 20 20 62 65 65 6E 20 20 73 6F 6D    wever  been  som
027C70:  65 20 20 73 6F 66 74 77 61 72 65 20 20 77 72 69    e  software  wri
027C80:  74 74 65 6E 20 73 75 63 68 20 61 73 20 74 68 65    tten such as the
027C90:  0D 0A 20 20 20 46 6F 75 6E 64 61 74 69 6F 6E 20    ..   Foundation 
027CA0:  53 74 65 70 2D 54 69 6D 65 20 53 65 71 75 65 6E    Step-Time Sequen
027CB0:  63 65 72 20 77 68 69 63 68 20 20 63 61 6E 20 20    cer which  can  
027CC0:  62 65 20 20 63 6F 6E 66 69 67 75 72 65 64 20 20    be  configured  
027CD0:  74 6F 20 20 77 6F 72 6B 20 6F 6E 20 61 6C 6C 0D    to  work on all.
027CE0:  0A 20 20 20 74 68 72 65 65 20 69 6E 74 65 72 66    .   three interf
027CF0:  61 63 65 73 2E 0D 0A 0D 0A 20 20 20 49 66 20 79    aces.....   If y
027D00:  68 69 73 20 69 73 20 50 72 6F 67 72 61 6D 6D 65    his is Programme
027D10:  72 73 27 20 50 61 74 63 68 20 20 77 65 20 68 61    rs' Patch  we ha
027D20:  64 20 62 65 74 74 65 72 20 64 6F 20 73 6F 6D 65    d better do some
027D30:  20 70 72 6F 67 72 61 6D 6D 69 6E 67 2E 0D 0A 20     programming... 
027D40:  20 20 59 6F 75 20 77 69 6C 6C 20 70 72 6F 62 61      You will proba
027D50:  62 6C 79 20 66 69 6E 64 20 74 68 61 74 20 79 6F    bly find that yo
027D60:  75 72 20 20 69 6E 74 65 72 66 61 63 65 20 20 6D    ur  interface  m
027D70:  61 6E 75 61 6C 20 73 61 79 73 20 76 65 72 79 20    anual says very 
027D80:  6C 69 74 74 6C 65 20 61 62 6F 75 74 0D 0A 20 20    little about..  
027D90:  20 68 6F 77 20 74 6F 20 70 72 6F 67 72 61 6D 20     how to program 
027DA0:  74 68 65 20 69 6E 74 65 72 66 61 63 65 20 79 6F    the interface yo
027DB0:  75 72 73 65 6C 66 2E 20 20 49 20 20 68 61 76 65    urself.  I  have
027DC0:  20 20 74 6F 20 61 64 6D 69 74 20 74 68 61 74 20      to admit that 
027DD0:  6D 75 63 68 20 6F 66 20 74 68 65 0D 0A 20 20 20    much of the..   
027DE0:  70 72 6F 67 72 61 6D 6D 69 6E 67 20 69 6E 66 6F    programming info
027DF0:  72 6D 61 74 69 6F 6E 20 69 6E 20 74 68 69 73 20    rmation in this 
027E00:  20 61 72 74 69 63 6C 65 20 20 77 61 73 20 20 66     article  was  f
027E10:  6F 75 6E 64 20 20 62 79 20 64 69 73 61 73 73 65    ound  by disasse
027E20:  6D 62 6C 69 6E 67 20 74 68 65 0D 0A 20 20 20 6D    mbling the..   m
027E30:  61 63 68 69 6E 65 20 63 6F 64 65 20 20 66 6F 72    achine code  for
027E40:  20 20 74 68 65 20 20 46 6F 75 6E 64 61 74 69 6F      the  Foundatio
027E50:  6E 20 20 53 74 65 70 2D 54 69 6D 65 20 20 53 65    n  Step-Time  Se
027E60:  71 75 65 6E 63 65 72 2E 20 20 20 57 68 65 74 68    quencer.   Wheth
027E70:  65 72 20 20 69 74 20 69 73 0D 0A 20 20 20 73 74    er  it is..   st
027E80:  72 69 63 74 6C 79 20 73 70 65 61 6B 69 6E 67 20    rictly speaking 
027E90:  6C 65 67 69 74 69 6D 61 74 65 20 74 6F 20 64 6F    legitimate to do
027EA0:  20 74 68 69 73 20 20 49 20 20 61 6D 20 20 6E 6F     this  I  am  no
027EB0:  74 20 20 73 75 72 65 2C 20 62 75 74 20 69 6E 20    t  sure, but in 
027EC0:  61 6E 20 69 64 65 61 6C 0D 0A 20 20 20 77 6F 72    an ideal..   wor
027ED0:  6C 64 20 74 68 65 73 65 20 64 65 74 61 69 6C 73    ld these details
027EE0:  20 77 6F 75 6C 64 20 68 61 76 65 20 62 65 65 6E     would have been
027EF0:  20 70 72 6F 76 69 64 65 64 20 69 6E 20 74 68 65     provided in the
027F00:  6F 75 20 61 72 65 20 69 6E 74 65 72 65 73 74 65    ou are intereste
027F10:  64 20 69 6E 20 6D 75 73 69 63 20 61 6E 64 20 68    d in music and h
027F20:  61 76 65 20 61 20 73 75 69 74 61 62 6C 65 20 4D    ave a suitable M
027F30:  49 44 49 20 69 6E 73 74 72 75 6D 65 6E 74 20 74    IDI instrument t
027F40:  68 65 6E 20 69 74 0D 0A 20 20 20 77 6F 75 6C 64    hen it..   would
027F50:  20 62 65 20 77 65 6C 6C 20 77 6F 72 74 68 20 20     be well worth  
027F60:  74 72 79 69 6E 67 20 20 74 6F 20 20 67 65 74 20    trying  to  get 
027F70:  20 61 20 20 4D 49 44 49 20 20 69 6E 74 65 72 66     a  MIDI  interf
027F80:  61 63 65 2E 20 20 59 6F 75 20 63 61 6E 20 70 72    ace.  You can pr
027F90:  6F 64 75 63 65 0D 0A 20 20 20 70 72 65 74 74 79    oduce..   pretty
027FA0:  20 67 6F 6F 64 20 72 65 73 75 6C 74 73 20 65 76     good results ev
027FB0:  65 6E 20 77 69 74 68 20 74 68 65 20 43 50 43 2E    en with the CPC.
027FC0:  20 20 20 54 68 6F 75 67 68 20 69 74 20 69 73 20       Though it is 
027FD0:  71 75 69 74 65 20 68 61 72 64 20 74 6F 20 6F 62    quite hard to ob
027FE0:  74 61 69 6E 0D 0A 20 20 20 41 6D 73 74 72 61 64    tain..   Amstrad
027FF0:  20 67 65 61 72 20 6E 6F 77 2C 20 74 68 65 72 65     gear now, there
028000:  20 6D 75 73 74 20 62 65 20 71 75 69 74 65 20 61     must be quite a
028010:  20 20 6C 6F 74 20 20 6F 66 20 69 74 20 61 62 6F      lot  of it abo
028020:  75 74 20 61 6E 64 20 79 6F 75 20 6D 61 79 20 66    ut and you may f
028030:  69 6E 64 0D 0A 20 20 20 69 74 20 74 75 72 6E 69    ind..   it turni
028040:  6E 67 20 75 70 20 61 74 20 63 61 72 20 62 6F 6F    ng up at car boo
028050:  74 20 73 61 6C 65 73 20 66 72 6F 6D 20 74 69 6D    t sales from tim
028060:  65 20 74 6F 20 74 69 6D 65 2E 20 20 49 74 20 6D    e to time.  It m
028070:  69 67 68 74 20 65 76 65 6E 20 62 65 20 77 6F 72    ight even be wor
028080:  74 68 0D 0A 20 20 20 70 6C 61 63 69 6E 67 20 61    th..   placing a
028090:  6E 20 61 64 20 69 6E 20 79 6F 75 72 20 6C 6F 63    n ad in your loc
0280A0:  61 6C 20 6E 65 77 73 70 61 70 65 72 20 61 73 6B    al newspaper ask
0280B0:  69 6E 67 20 66 6F 72 20 41 6D 73 74 72 61 64 20    ing for Amstrad 
0280C0:  6B 69 74 2C 20 6F 72 20 6F 66 20 63 6F 75 72 73    kit, or of cours
0280D0:  65 0D 0A 20 20 20 61 6E 20 61 64 20 69 6E 20 57    e..   an ad in W
0280E0:  41 43 43 49 2E 20 20 49 20 20 6F 62 74 61 69 6E    ACCI.  I  obtain
0280F0:  65 64 20 20 6D 79 20 20 52 41 4D 20 20 4D 75 73    ed  my  RAM  Mus
028100:  20 69 6E 74 65 72 66 61 63 65 20 6D 61 6E 75 61     interface manua
028110:  6C 73 2E 0D 0A 0D 0A 20 20 20 49 74 20 73 65 65    ls.....   It see
028120:  6D 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65    ms that the thre
028130:  65 20 20 6D 61 69 6E 20 20 69 6E 74 65 72 66 61    e  main  interfa
028140:  63 65 73 20 20 66 6F 72 20 20 74 68 65 20 41 6D    ces  for  the Am
028150:  73 74 72 61 64 20 75 73 65 20 65 69 74 68 65 72    strad use either
028160:  20 74 68 65 0D 0A 20 20 20 73 61 6D 65 20 6F 72     the..   same or
028170:  20 61 20 76 65 72 79 20 73 69 6D 69 6C 61 72 20     a very similar 
028180:  63 68 69 70 20 20 74 6F 20 20 68 61 6E 64 6C 65    chip  to  handle
028190:  20 20 74 68 65 20 20 4D 49 44 49 20 63 68 61 6E      the  MIDI chan
0281A0:  6E 65 6C 2E 20 20 54 68 65 20 52 41 4D 20 4D 75    nel.  The RAM Mu
0281B0:  73 69 63 0D 0A 20 20 20 4D 61 63 68 69 6E 65 20    sic..   Machine 
0281C0:  75 73 65 73 20 61 20 4D 6F 74 6F 72 6F 6C 61 20    uses a Motorola 
0281D0:  36 38 35 30 20 41 43 49 41 20 63 68 69 70 2C 20    6850 ACIA chip, 
0281E0:  20 61 6E 64 20 20 74 68 65 20 64 61 74 61 20 73     and  the data s
0281F0:  68 65 65 74 20 66 6F 72 20 74 68 69 73 20 63 68    heet for this ch
028200:  69 70 0D 0A 20 20 20 77 6F 75 6C 64 20 62 65 20    ip..   would be 
028210:  71 75 69 74 65 20 75 73 65 66 75 6C 2E 0D 0A 0D    quite useful....
028220:  0A 20 20 20 54 68 65 20 6D 6F 73 74 20 69 6D 70    .   The most imp
028230:  6F 72 74 61 6E 74 20 20 69 6E 66 6F 72 6D 61 74    ortant  informat
028240:  69 6F 6E 20 20 69 73 20 20 74 68 65 20 20 70 6F    ion  is  the  po
028250:  72 74 20 20 6E 75 6D 62 65 72 73 20 20 66 6F 72    rt  numbers  for
028260:  20 74 68 65 20 64 69 66 66 65 72 65 6E 74 0D 0A     the different..
028270:  20 20 20 69 6E 74 65 72 66 61 63 65 73 2E 20 20       interfaces.  
028280:  54 61 62 6C 65 20 31 20 67 69 76 65 73 20 79 6F    Table 1 gives yo
028290:  75 20 61 6C 6C 20 20 79 6F 75 20 20 6E 65 65 64    u all  you  need
0282A0:  20 20 74 6F 20 20 6B 6E 6F 77 20 66 6F 72 20 74      to  know for t
0282B0:  68 65 20 74 68 72 65 65 20 6D 61 69 6E 0D 0A 20    he three main.. 
0282C0:  20 20 4D 49 44 49 20 69 6E 74 65 72 66 61 63 65      MIDI interface
0282D0:  73 20 66 6F 72 20 20 74 68 65 20 20 41 6D 73 74    s for  the  Amst
0282E0:  72 61 64 2E 20 20 20 49 66 20 20 61 6E 79 6F 6E    rad.   If  anyon
0282F0:  65 20 20 68 61 73 20 20 61 20 20 64 69 66 66 65    e  has  a  diffe
028300:  69 63 20 20 4D 61 63 68 69 6E 65 20 69 6E 20 31    ic  Machine in 1
028310:  39 39 30 20 77 68 65 6E 20 61 6E 6F 74 68 65 72    990 when another
028320:  0D 0A 20 20 20 57 41 43 43 49 20 6D 65 6D 62 65    ..   WACCI membe
028330:  72 20 73 70 6F 74 74 65 64 20 74 68 65 6D 20 62    r spotted them b
028340:  65 69 6E 67 20 73 6F 6C 64 20 6F 66 66 20 63 68    eing sold off ch
028350:  65 61 70 20 69 6E 20 42 61 72 72 6F 77 2D 69 6E    eap in Barrow-in
028360:  2D 46 75 72 6E 65 73 73 2E 0D 0A 0D 0A 20 20 20    -Furness.....   
028370:  49 66 20 79 6F 75 20 61 72 65 20 67 6F 6F 64 20    If you are good 
028380:  77 69 74 68 20 61 20 73 6F 6C 64 65 72 69 6E 67    with a soldering
028390:  20 69 72 6F 6E 2C 20 49 20 68 61 76 65 20 69 6E     iron, I have in
0283A0:  73 74 72 75 63 74 69 6F 6E 73 20 6F 6E 20 68 6F    structions on ho
0283B0:  77 20 74 6F 20 62 75 69 6C 64 0D 0A 20 20 20 79    w to build..   y
0283C0:  6F 75 72 20 6F 77 6E 20 4D 49 44 49 20 69 6E 74    our own MIDI int
0283D0:  65 72 66 61 63 65 20 69 66 20 61 6E 79 6F 6E 65    erface if anyone
0283E0:  20 69 73 20 67 6F 6F 64 20 65 6E 6F 75 67 68 20     is good enough 
0283F0:  61 74 20 47 65 72 6D 61 6E 20 74 6F 20 66 6F 6C    at German to fol
028400:  6C 6F 77 20 74 68 65 6D 2E 0D 0A 0D 0A 20 20 20    low them.....   
028410:  59 6F 75 20 77 69 6C 6C 20 61 6C 73 6F 20 6E 65    You will also ne
028420:  65 64 20 61 20 4D 49 44 49 20 6C 65 61 64 20 74    ed a MIDI lead t
028430:  6F 20 63 6F 6E 6E 65 63 74 20 79 6F 75 72 20 43    o connect your C
028440:  50 43 20 74 6F 20 74 68 65 20 4D 49 44 49 20 69    PC to the MIDI i
028450:  6E 73 74 72 75 6D 65 6E 74 2C 0D 0A 20 20 20 62    nstrument,..   b
028460:  75 74 20 74 68 65 73 65 20 61 72 65 20 65 61 73    ut these are eas
028470:  69 6C 79 20 6F 62 74 61 69 6E 65 64 20 69 6E 20    ily obtained in 
028480:  6D 75 73 69 63 20 73 68 6F 70 73 2E 0D 0A 0D 0A    music shops.....
028490:  20 20 20 53 4F 20 57 48 41 54 20 43 41 4E 20 59       SO WHAT CAN Y
0284A0:  4F 55 20 44 4F 20 57 49 54 48 20 4D 49 44 49 3F    OU DO WITH MIDI?
0284B0:  0D 0A 20 20 20 54 68 65 72 65 20 61 72 65 20 61    ..   There are a
0284C0:  6C 6C 20 73 6F 72 74 73 20 6F 66 20 61 70 70 6C    ll sorts of appl
0284D0:  69 63 61 74 69 6F 6E 73 20 66 6F 72 20 20 4D 49    ications for  MI
0284E0:  44 49 2C 20 61 6E 64 20 6E 6F 74 20 61 6C 6C 20    DI, and not all 
0284F0:  6F 66 20 74 68 65 6D 20 69 6E 76 6F 6C 76 65 0D    of them involve.
028500:  74 20 6D 6F 6E 74 68 27 73 20 42 6C 61 73 74 20    t month's Blast 
028510:  66 72 6F 6D 20 74 68 65 20 50 61 73 74 20 61 72    from the Past ar
028520:  65 20 20 61 6E 79 74 68 69 6E 67 20 74 6F 20 67    e  anything to g
028530:  6F 20 62 79 2C 20 77 65 20 68 61 76 65 20 70 6C    o by, we have pl
028540:  65 6E 74 79 0D 0A 20 20 20 6F 66 20 72 65 61 73    enty..   of reas
028550:  6F 6E 20 74 6F 20 63 65 6C 65 62 72 61 74 65 2E    on to celebrate.
028560:  20 20 54 68 65 6E 20 20 61 67 61 69 6E 2C 20 20      Then  again,  
028570:  49 20 20 68 61 76 65 20 20 72 75 6E 20 6F 75 74    I  have  run out
028580:  20 6F 66 20 69 6E 73 70 69 72 61 74 69 6F 6E 20     of inspiration 
028590:  66 6F 72 0D 0A 20 20 20 73 75 62 68 65 61 64 73    for..   subheads
0285A0:  20 74 68 69 73 20 6D 6F 6E 74 68 2E 2E 2E 0D 0A     this month.....
0285B0:  0D 0A 20 20 20 53 4F 20 57 48 41 54 20 49 53 20    ..   SO WHAT IS 
0285C0:  4D 49 44 49 20 54 48 45 4E 3F 0D 0A 20 20 20 49    MIDI THEN?..   I
0285D0:  20 73 75 70 70 6F 73 65 20 77 65 20 6F 75 67 68     suppose we ough
0285E0:  74 20 20 74 6F 20 20 73 74 61 72 74 20 20 77 69    t  to  start  wi
0285F0:  74 68 20 20 74 68 65 20 20 6F 62 6C 69 67 61 74    th  the  obligat
028600:  6F 72 79 20 65 78 70 6C 61 6E 61 74 69 6F 6E 20    ory explanation 
028610:  74 68 61 74 20 4D 49 44 49 0D 0A 20 20 20 73 74    that MIDI..   st
028620:  61 6E 64 73 20 66 6F 72 20 4D 75 73 69 63 61 6C    ands for Musical
028630:  20 49 6E 73 74 72 75 6D 65 6E 74 20 20 44 69 67     Instrument  Dig
028640:  69 74 61 6C 20 20 49 6E 74 65 72 66 61 63 65 2C    ital  Interface,
028650:  20 20 61 6E 64 20 20 69 73 20 61 20 73 74 61 6E      and  is a stan
028660:  64 61 72 64 20 66 6F 72 0D 0A 20 20 20 63 6F 6E    dard for..   con
028670:  74 72 6F 6C 20 61 6E 64 20 63 6F 6D 6D 75 6E 69    trol and communi
028680:  63 61 74 69 6F 6E 20 64 65 76 65 6C 6F 70 65 64    cation developed
028690:  20 20 62 79 20 20 74 68 65 20 6D 61 6A 6F 72 20      by  the major 
0286A0:  6B 65 79 62 6F 61 72 64 20 6D 61 6E 75 66 61 63    keyboard manufac
0286B0:  74 75 72 65 72 73 2E 0D 0A 20 20 20 41 6C 6C 20    turers...   All 
0286C0:  6D 6F 64 65 72 6E 20 6B 65 79 62 6F 61 72 64 73    modern keyboards
0286D0:  20 28 65 78 63 65 70 74 20 20 74 68 65 20 20 63     (except  the  c
0286E0:  68 65 61 70 65 72 20 20 6D 6F 64 65 6C 73 29 20    heaper  models) 
0286F0:  20 68 61 76 65 20 4D 49 44 49 20 73 6F 63 6B 65     have MIDI socke
028700:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
028710:  22 00 01 00 02 09 4E E5 22 00 C9 02 00 00 00 02    ".....N.".......
028720:  22 00 C5 02 00 00 00 02 22 00 C1 02 00 00 00 02    ".......".......
028730:  22 00 C6 02 00 00 00 02 22 00 C2 02 00 00 00 02    ".......".......
028740:  22 00 C7 02 00 00 00 02 22 00 C3 02 00 00 00 02    ".......".......
028750:  22 00 C8 02 00 00 00 02 22 00 C4 02 00 00 00 02    ".......".......
028760:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
028770:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
028780:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
028790:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0287A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0287B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0287C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0287D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0287E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
0287F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
028800:  73 74 61 72 74 73 20 77 69 74 68 0D 0A 20 20 20    starts with..   
028810:  38 20 69 6E 73 74 65 61 64 20 6F 66 20 39 2E 20    8 instead of 9. 
028820:  20 57 65 20 68 61 76 65 20 74 6F 20 73 75 70 70     We have to supp
028830:  6C 79 20 20 74 68 65 20 20 70 69 74 63 68 20 6F    ly  the  pitch o
028840:  66 20 74 68 65 20 6E 6F 74 65 20 77 65 20 77 61    f the note we wa
028850:  6E 74 20 74 6F 20 74 75 72 6E 0D 0A 20 20 20 6F    nt to turn..   o
028860:  66 66 2C 20 61 73 20 77 65 20 63 6F 75 6C 64 20    ff, as we could 
028870:  68 61 76 65 20 73 65 76 65 72 61 6C 20 64 69 66    have several dif
028880:  66 65 72 65 6E 74 20 20 6E 6F 74 65 73 20 70 6C    ferent  notes pl
028890:  61 79 69 6E 67 20 61 74 20 6F 6E 63 65 2C 20 61    aying at once, a
0288A0:  6C 6C 20 6F 6E 20 74 68 65 0D 0A 20 20 20 73 61    ll on the..   sa
0288B0:  6D 65 20 63 68 61 6E 6E 65 6C 2E 20 20 54 68 65    me channel.  The
0288C0:  20 76 65 6C 6F 63 69 74 79 20 69 73 20 75 73 65     velocity is use
0288D0:  64 20 20 69 6E 20 20 73 6F 6D 65 20 74 79 70 65    d  in  some type
0288E0:  73 20 6F 66 20 69 6E 73 74 72 75 6D 65 6E 74 20    s of instrument 
0288F0:  6E 6F 69 73 65 20 74 6F 0D 0A 20 20 20 64 65 74    noise to..   det
028900:  65 72 6D 69 6E 65 20 68 6F 77 20 74 68 65 20 6E    ermine how the n
028910:  6F 74 65 20 69 73 20 73 69 6C 65 6E 63 65 64 2E    ote is silenced.
028920:  0D 0A 0D 0A 20 20 20 54 68 65 20 42 41 53 49 43    ....   The BASIC
028930:  20 6C 69 73 74 69 6E 67 20 70 75 74 73 20 61 6C     listing puts al
028940:  6C 20 74 68 61 74 20 74 6F 67 65 74 68 65 72 20    l that together 
028950:  20 69 6E 20 61 20 73 69 6D 70 6C 65 20 70 72 6F     in a simple pro
028960:  67 72 61 6D 20 74 68 61 74 20 70 6C 61 79 73 20    gram that plays 
028970:  61 0D 0A 20 20 20 73 69 6E 67 6C 65 20 4D 69 64    a..   single Mid
028980:  64 6C 65 20 43 2E 20 20 49 74 20 69 73 20 73 65    dle C.  It is se
028990:  74 20 20 75 70 20 20 66 6F 72 20 20 74 68 65 20    t  up  for  the 
0289A0:  20 52 41 4D 20 20 4D 75 73 69 63 20 4D 61 63 68     RAM  Music Mach
0289B0:  69 6E 65 2C 20 62 75 74 20 79 6F 75 20 63 61 6E    ine, but you can
0289C0:  0D 0A 20 20 20 61 64 61 70 74 20 69 74 20 66 6F    ..   adapt it fo
0289D0:  72 20 74 68 65 20 6F 74 68 65 72 20 69 6E 74 65    r the other inte
0289E0:  72 66 61 63 65 73 20 62 79 20 20 63 68 61 6E 67    rfaces by  chang
0289F0:  69 6E 67 20 20 74 68 65 20 76 61 6C 75 65 73 20    ing  the values 
028A00:  77 65 72 65 20 73 65 6E 74 20 6F 6E 20 63 68 61    were sent on cha
028A10:  6E 6E 65 6C 20 31 30 2C 20 77 68 69 6C 65 20 74    nnel 10, while t
028A20:  68 65 0D 0A 20 20 20 6B 65 79 62 6F 61 72 64 20    he..   keyboard 
028A30:  77 6F 75 6C 64 20 62 65 20 6C 69 73 74 65 6E 69    would be listeni
028A40:  6E 67 20 6F 75 74 20 6F 6E 20 63 68 61 6E 6E 65    ng out on channe
028A50:  6C 20 20 31 2E 20 20 54 68 65 20 77 61 79 20 74    l  1.  The way t
028A60:  68 65 73 65 20 63 68 61 6E 6E 65 6C 73 20 61 72    hese channels ar
028A70:  65 0D 0A 20 20 20 64 65 74 65 72 6D 69 6E 65 64    e..   determined
028A80:  20 69 73 20 6E 6F 74 20 62 79 20 20 68 6F 77 20     is not by  how 
028A90:  20 74 68 65 20 20 62 6F 78 65 73 20 20 61 72 65     the  boxes  are
028AA0:  20 20 70 6C 75 67 67 65 64 20 74 6F 67 65 74 68      plugged togeth
028AB0:  65 72 2E 20 20 49 6E 73 74 65 61 64 20 79 6F 75    er.  Instead you
028AC0:  0D 0A 20 20 20 73 65 6C 65 63 74 20 74 68 65 20    ..   select the 
028AD0:  63 68 61 6E 6E 65 6C 20 62 79 20 75 73 69 6E 67    channel by using
028AE0:  20 74 68 65 20 63 6F 6E 74 72 6F 6C 73 20 6F 6E     the controls on
028AF0:  20 74 68 65 20 64 72 75 6D 20 62 6F 78 20 6F 72     the drum box or
028B00:  20 6B 65 79 62 6F 61 72 64 2E 0D 0A 0D 0A 20 20     keyboard.....  
028B10:  20 49 6E 20 66 61 63 74 20 6D 6F 73 74 20 6D 6F     In fact most mo
028B20:  64 65 72 6E 20 6B 65 79 62 6F 61 72 64 73 20 20    dern keyboards  
028B30:  61 6E 64 20 20 76 6F 69 63 65 20 20 62 6F 78 65    and  voice  boxe
028B40:  73 20 77 69 6C 6C 20 64 65 66 61 75 6C 74 20 74    s will default t
028B50:  6F 20 6C 69 73 74 65 6E 69 6E 67 0D 0A 20 20 20    o listening..   
028B60:  6F 75 74 20 6F 6E 20 61 6C 6C 20 63 68 61 6E 6E    out on all chann
028B70:  65 6C 73 20 61 74 20 6F 6E 63 65 2E 20 20 54 68    els at once.  Th
028B80:  75 73 20 20 77 69 74 68 20 20 6A 75 73 74 20 6F    us  with  just o
028B90:  6E 65 20 6B 65 79 62 6F 61 72 64 20 79 6F 75 20    ne keyboard you 
028BA0:  63 61 6E 20 73 65 6E 64 20 61 0D 0A 20 20 20 63    can send a..   c
028BB0:  6F 6D 6D 61 6E 64 20 6F 75 74 20 6F 6E 20 63 68    ommand out on ch
028BC0:  61 6E 6E 65 6C 20 31 20 74 6F 20 63 68 6F 6F 73    annel 1 to choos
028BD0:  65 20 61 20 76 69 6F 6C 69 6E 20 6E 6F 69 73 65    e a violin noise
028BE0:  2C 20 61 6E 64 20 61 73 6B 20 63 68 61 6E 6E 65    , and ask channe
028BF0:  6C 20 32 20 74 6F 20 62 65 0D 0A 20 20 20 61 20    l 2 to be..   a 
028C00:  72 65 6E 74 20 74 79 70 65 20 6F 66 0D 0A 20 20    rent type of..  
028C10:  20 69 6E 74 65 72 66 61 63 65 2C 20 49 20 77 6F     interface, I wo
028C20:  75 6C 64 20 62 65 20 76 65 72 79 20 69 6E 74 65    uld be very inte
028C30:  72 65 73 74 65 64 20 74 6F 20 6B 6E 6F 77 2E 0D    rested to know..
028C40:  0A 0D 0A 20 20 20 53 45 4E 44 49 4E 47 20 4D 49    ...   SENDING MI
028C50:  44 49 20 44 41 54 41 0D 0A 20 20 20 54 68 65 20    DI DATA..   The 
028C60:  65 61 73 69 65 73 74 20 6F 70 65 72 61 74 69 6F    easiest operatio
028C70:  6E 20 69 73 20 73 65 6E 64 69 6E 67 20 64 61 74    n is sending dat
028C80:  61 20 74 6F 20 20 74 68 65 20 4D 49 44 49 20 64    a to  the MIDI d
028C90:  65 76 69 63 65 73 20 61 74 74 61 63 68 65 64 20    evices attached 
028CA0:  74 6F 20 74 68 65 0D 0A 20 20 20 69 6E 74 65 72    to the..   inter
028CB0:  66 61 63 65 2E 20 20 59 6F 75 20 63 61 6E 20 69    face.  You can i
028CC0:  6E 20 20 66 61 63 74 20 20 64 6F 20 20 74 68 69    n  fact  do  thi
028CD0:  73 20 20 65 6E 74 69 72 65 6C 79 20 20 66 72 6F    s  entirely  fro
028CE0:  6D 20 20 42 41 53 49 43 2C 20 20 61 6E 64 20 49    m  BASIC,  and I
028CF0:  20 77 69 6C 6C 0D 0A 20 20 20 70 72 65 73 65 6E     will..   presen
028D00:  74 20 69 74 20 69 6E 20 74 68 69 73 20 66 6F 72    t it in this for
028D10:  6D 20 20 74 6F 20 20 73 74 61 72 74 20 20 77 69    m  to  start  wi
028D20:  74 68 2E 20 20 20 42 65 74 74 65 72 20 72 65 73    th.   Better res
028D30:  75 6C 74 73 20 63 61 6E 20 62 65 20 61 63 68 69    ults can be achi
028D40:  65 76 65 64 0D 0A 20 20 20 77 69 74 68 20 61 20    eved..   with a 
028D50:  73 70 6F 74 20 6F 66 20 6D 61 63 68 69 6E 65 20    spot of machine 
028D60:  63 6F 64 65 20 6F 66 20 63 6F 75 72 73 65 2E 0D    code of course..
028D70:  0A 0D 0A 20 20 20 46 69 72 73 74 20 77 65 20 6E    ...   First we n
028D80:  65 65 64 20 74 6F 20 72 65 73 65 74 20 74 68 65    eed to reset the
028D90:  20 20 69 6E 74 65 72 66 61 63 65 20 20 61 6E 64      interface  and
028DA0:  20 20 67 65 74 20 69 74 20 72 65 61 64 79 20 66      get it ready f
028DB0:  6F 72 20 73 65 6E 64 69 6E 67 20 64 61 74 61 2E    or sending data.
028DC0:  0D 0A 20 20 20 4F 6E 20 74 68 65 20 45 4D 52 20    ..   On the EMR 
028DD0:  69 6E 74 65 72 66 61 63 65 2C 20 74 68 69 73 20    interface, this 
028DE0:  69 73 20 64 6F 6E 65 20 77 69 74 68 3A 0D 0A 0D    is done with:...
028DF0:  0A 20 20 20 20 20 4F 55 54 20 26 46 38 46 32 2C    .     OUT &F8F2,
028E00:  70 69 61 6E 6F 2E 20 20 54 68 65 6E 20 61 6E 79    piano.  Then any
028E10:  20 4E 6F 74 65 20 4F 6E 20 65 76 65 6E 74 73 20     Note On events 
028E20:  73 65 6E 74 20 20 6F 75 74 20 6F 6E 20 63 68 61    sent  out on cha
028E30:  6E 6E 65 6C 20 31 20 77 69 6C 6C 20 62 65 20 70    nnel 1 will be p
028E40:  6C 61 79 65 64 20 62 79 0D 0A 20 20 20 79 6F 75    layed by..   you
028E50:  72 20 6B 65 79 62 6F 61 72 64 20 77 69 74 68 20    r keyboard with 
028E60:  74 68 65 20 76 69 6F 6C 69 6E 20 6E 6F 69 73 65    the violin noise
028E70:  2C 20 61 6E 64 20 6E 6F 74 65 73 20 6F 6E 20 63    , and notes on c
028E80:  68 61 6E 6E 65 6C 20 32 20 77 69 6C 6C 20 62 65    hannel 2 will be
028E90:  20 70 6C 61 79 65 64 0D 0A 20 20 20 77 69 74 68     played..   with
028EA0:  20 74 68 65 20 70 69 61 6E 6F 20 6E 6F 69 73 65     the piano noise
028EB0:  2E 0D 0A 0D 0A 20 20 20 54 6F 20 74 75 72 6E 20    .....   To turn 
028EC0:  61 20 6E 6F 74 65 20 6F 6E 2C 20 77 65 20 74 72    a note on, we tr
028ED0:  61 6E 73 6D 69 74 20 74 68 72 65 65 20 62 79 74    ansmit three byt
028EE0:  65 73 20 69 6E 20 73 65 71 75 65 6E 63 65 3A 0D    es in sequence:.
028EF0:  0A 0D 0A 20 20 20 20 20 26 39 78 20 20 3C 70 69    ...     &9x  <pi
028F00:  74 63 68 3E 20 20 3C 76 65 6C 6F 63 69 74 79 3E    tch>  <velocity>
028F10:  0D 0A 0D 0A 20 20 20 54 68 65 20 66 69 72 73 74    ....   The first
028F20:  20 69 73 20 74 68 65 20 63 6F 6D 6D 61 6E 64 20     is the command 
028F30:  20 62 79 74 65 2C 20 20 61 6E 64 20 20 26 39 78     byte,  and  &9x
028F40:  20 20 6D 65 61 6E 73 20 20 4E 6F 74 65 20 20 4F      means  Note  O
028F50:  6E 2C 20 77 68 65 72 65 20 78 20 69 73 20 74 68    n, where x is th
028F60:  65 0D 0A 20 20 20 63 68 61 6E 6E 65 6C 20 6E 75    e..   channel nu
028F70:  6D 62 65 72 20 66 72 6F 6D 20 30 20 74 6F 20 46    mber from 0 to F
028F80:  20 20 69 6E 20 20 68 65 78 61 64 65 63 69 6D 61      in  hexadecima
028F90:  6C 2E 20 20 20 44 69 64 20 49 20 73 61 79 20 74    l.   Did I say t
028FA0:  68 65 20 63 68 61 6E 6E 65 6C 73 20 77 65 72 65    he channels were
028FB0:  0D 0A 20 20 20 6E 75 6D 62 65 72 65 64 20 66 72    ..   numbered fr
028FC0:  6F 6D 20 31 20 74 6F 20 31 36 3F 20 20 20 59 65    om 1 to 16?   Ye
028FD0:  73 2C 20 20 77 65 6C 6C 20 20 75 6E 6C 69 6B 65    s,  well  unlike
028FE0:  20 63 6F 6D 70 75 74 65 72 20 73 63 69 65 6E 74     computer scient
028FF0:  69 73 74 73 2C 20 6D 75 73 69 63 69 61 6E 73 0D    ists, musicians.
029000:  33 3A 4F 55 54 20 26 46 38 46 32 2C 26 31 36 0D    3:OUT &F8F2,&16.
029010:  0A 0D 0A 20 20 20 54 68 65 20 44 48 43 50 20 69    ...   The DHCP i
029020:  6E 74 65 72 66 61 63 65 20 69 73 20 64 6F 6E 65    nterface is done
029030:  20 74 68 65 20 73 61 6D 65 20 77 61 79 20 62 75     the same way bu
029040:  74 20 77 69 74 68 20 26 46 38 45 30 20 28 74 68    t with &F8E0 (th
029050:  65 20 61 64 64 72 65 73 73 20 6F 66 20 74 68 65    e address of the
029060:  0D 0A 20 20 20 44 48 43 50 27 73 20 63 6F 6E 74    ..   DHCP's cont
029070:  72 6F 6C 20 70 6F 72 74 29 20 69 6E 73 74 65 61    rol port) instea
029080:  64 20 6F 66 20 26 46 38 46 32 20 69 6E 20 65 61    d of &F8F2 in ea
029090:  63 68 20 63 61 73 65 2E 0D 0A 0D 0A 20 20 20 54    ch case.....   T
0290A0:  68 65 20 52 41 4D 20 4D 75 73 69 63 20 4D 61 63    he RAM Music Mac
0290B0:  68 69 6E 65 20 20 69 73 20 20 73 6C 69 67 68 74    hine  is  slight
0290C0:  6C 79 20 20 64 69 66 66 65 72 65 6E 74 2C 20 20    ly  different,  
0290D0:  61 73 20 20 74 68 65 20 20 73 65 63 6F 6E 64 20    as  the  second 
0290E0:  62 79 74 65 20 73 65 6E 74 0D 0A 20 20 20 73 68    byte sent..   sh
0290F0:  6F 75 6C 64 20 62 65 20 26 31 35 20 69 6E 73 74    ould be &15 inst
029100:  65 61 64 20 6F 66 20 26 31 36 3A 0D 0A 0D 0A 20    ead of &16:.... 
029110:  20 20 20 20 4F 55 54 20 26 46 38 45 43 2C 33 3A        OUT &F8EC,3:
029120:  4F 55 54 20 26 46 38 45 43 2C 26 31 35 0D 0A 0D    OUT &F8EC,&15...
029130:  0A 20 20 20 4F 6E 63 65 20 74 68 61 74 20 69 73    .   Once that is
029140:  20 64 6F 6E 65 2C 20 77 65 20 63 61 6E 20 20 74     done, we can  t
029150:  72 61 6E 73 6D 69 74 20 20 74 68 65 20 64 61 74    ransmit  the dat
029160:  61 2E 20 20 54 68 69 73 20 65 6E 74 61 69 6C 73    a.  This entails
029170:  20 77 61 69 74 69 6E 67 20 75 6E 74 69 6C 0D 0A     waiting until..
029180:  20 20 20 62 69 74 20 32 20 69 73 20 20 73 65 74       bit 2 is  set
029190:  20 20 6F 6E 20 20 74 68 65 20 20 73 74 61 74 75      on  the  statu
0291A0:  73 20 20 70 6F 72 74 2C 20 20 61 6E 64 20 20 74    s  port,  and  t
0291B0:  68 65 6E 20 20 73 65 6E 64 69 6E 67 20 20 74 68    hen  sending  th
0291C0:  65 20 20 62 79 74 65 20 74 6F 20 62 65 0D 0A 20    e  byte to be.. 
0291D0:  20 20 74 72 61 6E 73 6D 69 74 74 65 64 20 74 6F      transmitted to
0291E0:  20 74 68 65 20 64 61 74 61 20 77 72 69 74 65 20     the data write 
0291F0:  70 6F 72 74 2E 20 20 54 69 6D 65 20 66 6F 72 20    port.  Time for 
029200:  0A 20 20 20 73 74 61 72 74 20 63 6F 75 6E 74 69    .   start counti
029210:  6E 67 20 61 74 20 6F 6E 65 2C 20 73 6F 20 74 68    ng at one, so th
029220:  61 74 20 20 69 73 20 20 68 6F 77 20 74 68 65 20    at  is  how the 
029230:  63 68 61 6E 6E 65 6C 73 20 61 72 65 20 61 6C 77    channels are alw
029240:  61 79 73 20 64 65 73 63 72 69 62 65 64 2C 0D 0A    ays described,..
029250:  20 20 20 62 75 74 20 61 73 20 66 61 72 20 61 73       but as far as
029260:  20 74 68 65 20 63 6F 6D 70 75 74 65 72 20 69 73     the computer is
029270:  20 63 6F 6E 63 65 72 6E 65 64 20 74 68 65 79 20     concerned they 
029280:  61 72 65 20 6E 75 6D 62 65 72 65 64 20 30 20 74    are numbered 0 t
029290:  6F 20 31 35 20 28 6F 72 20 30 20 74 6F 0D 0A 20    o 15 (or 0 to.. 
0292A0:  20 20 46 20 69 6E 20 68 65 78 29 2E 0D 0A 0D 0A      F in hex).....
0292B0:  20 20 20 50 69 74 63 68 20 69 73 20 68 6F 77 20       Pitch is how 
0292C0:  68 69 67 68 20 74 68 65 20 6E 6F 74 65 20 69 73    high the note is
0292D0:  2C 20 61 6E 64 20 69 73 20 20 61 20 76 61 6C 75    , and is  a valu
0292E0:  65 20 66 72 6F 6D 20 30 20 74 6F 20 31 32 37 2E    e from 0 to 127.
0292F0:  20 20 4D 69 64 64 6C 65 20 43 20 69 73 0D 0A 20      Middle C is.. 
029300:  20 20 36 30 2C 20 43 20 73 68 61 72 70 20 69 73      60, C sharp is
029310:  20 36 31 2C 20 61 6E 64 20 73 6F 20 20 6F 6E 2E     61, and so  on.
029320:  20 20 20 56 65 6C 6F 63 69 74 79 20 20 69 73 20       Velocity  is 
029330:  74 68 65 20 4D 49 44 49 20 6A 61 72 67 6F 6E 20    the MIDI jargon 
029340:  74 65 72 6D 20 66 6F 72 20 68 6F 77 0D 0A 20 20    term for how..  
029350:  20 6C 6F 75 64 20 74 68 65 20 6E 6F 74 65 20 69     loud the note i
029360:  73 20 28 74 68 69 6E 6B 20 6F 66 20 68 69 74 74    s (think of hitt
029370:  69 6E 67 20 20 61 20 20 70 69 61 6E 6F 20 20 6B    ing  a  piano  k
029380:  65 79 29 2C 20 61 6E 64 20 61 6C 73 6F 20 72 61    ey), and also ra
029390:  6E 67 65 73 20 66 72 6F 6D 20 30 0D 0A 20 20 20    nges from 0..   
0293A0:  28 73 69 6C 65 6E 74 29 20 74 6F 20 31 32 37 20    (silent) to 127 
0293B0:  28 6C 6F 75 64 65 73 74 29 2E 20 20 53 6F 20 74    (loudest).  So t
0293C0:  6F 20 73 74 61 72 74 20 61 20 4D 69 64 64 6C 65    o start a Middle
0293D0:  20 43 20 70 6C 61 79 69 6E 67 20 6F 6E 20 63 68     C playing on ch
0293E0:  61 6E 6E 65 6C 20 31 20 61 74 0D 0A 20 20 20 6D    annel 1 at..   m
0293F0:  65 64 69 75 6D 20 76 6F 6C 75 6D 65 2C 20 77 65    edium volume, we
029400:  61 20 73 75 62 72 6F 75 74 69 6E 65 3A 0D 0A 0D    a subroutine:...
029410:  0A 20 20 20 31 30 30 20 57 48 49 4C 45 20 28 49    .   100 WHILE (I
029420:  4E 50 28 73 74 61 74 75 73 29 20 41 4E 44 20 32    NP(status) AND 2
029430:  29 3D 30 3A 57 45 4E 44 0D 0A 20 20 20 31 31 30    )=0:WEND..   110
029440:  20 4F 55 54 20 64 61 74 61 77 72 69 74 65 2C 64     OUT datawrite,d
029450:  0D 0A 20 20 20 31 32 30 20 52 45 54 55 52 4E 0D    ..   120 RETURN.
029460:  0A 0D 0A 20 20 20 41 74 20 74 68 65 20 73 74 61    ...   At the sta
029470:  72 74 20 6F 66 20 20 79 6F 75 72 20 20 70 72 6F    rt of  your  pro
029480:  67 72 61 6D 20 20 79 6F 75 20 20 73 68 6F 75 6C    gram  you  shoul
029490:  64 20 20 73 65 74 20 20 74 68 65 20 76 61 72 69    d  set  the vari
0294A0:  61 62 6C 65 73 20 73 74 61 74 75 73 20 61 6E 64    ables status and
0294B0:  0D 0A 20 20 20 64 61 74 61 77 72 69 74 65 20 61    ..   datawrite a
0294C0:  63 63 6F 72 64 69 6E 67 20 74 6F 20 77 68 69 63    ccording to whic
0294D0:  68 20 69 6E 74 65 72 66 61 63 65 20 79 6F 75 20    h interface you 
0294E0:  20 61 72 65 20 20 75 73 69 6E 67 2E 20 20 54 6F     are  using.  To
0294F0:  20 73 65 6E 64 20 61 20 62 79 74 65 20 74 6F 0D     send a byte to.
029500:  0A 20 20 20 74 68 65 20 4D 49 44 49 20 69 6E 74    .   the MIDI int
029510:  65 72 66 61 63 65 2C 20 61 6C 6C 20 79 6F 75 20    erface, all you 
029520:  64 6F 20 69 73 20 70 75 74 20 74 68 65 20 20 76    do is put the  v
029530:  61 6C 75 65 20 79 6F 75 20 77 61 6E 74 20 74 6F    alue you want to
029540:  20 73 65 6E 64 20 69 6E 20 64 20 61 6E 64 0D 0A     send in d and..
029550:  20 20 20 47 4F 53 55 42 20 31 30 30 2E 20 20 4C       GOSUB 100.  L
029560:  69 6E 65 20 31 30 30 20 77 61 69 74 73 20 20 75    ine 100 waits  u
029570:  6E 74 69 6C 20 20 74 68 65 20 20 69 6E 74 65 72    ntil  the  inter
029580:  66 61 63 65 20 20 69 73 20 20 72 65 61 64 79 20    face  is  ready 
029590:  74 6F 20 74 72 61 6E 73 6D 69 74 20 61 0D 0A 20    to transmit a.. 
0295A0:  20 20 62 79 74 65 2C 20 61 6E 64 20 74 68 65 6E      byte, and then
0295B0:  20 6C 69 6E 65 20 31 31 30 20 73 65 6E 64 73 20     line 110 sends 
0295C0:  69 74 2E 0D 0A 0D 0A 20 20 20 4D 49 44 49 20 4E    it.....   MIDI N
0295D0:  4F 54 45 20 43 4F 4D 4D 41 4E 44 53 0D 0A 20 20    OTE COMMANDS..  
0295E0:  20 4F 66 20 63 6F 75 72 73 65 2C 20 79 6F 75 20     Of course, you 
0295F0:  61 6C 73 6F 20 6E 65 65 64 20 74 6F 20 20 6B 6E    also need to  kn
029600:  20 77 6F 75 6C 64 20 74 72 61 6E 73 6D 69 74 20     would transmit 
029610:  74 68 65 20 66 6F 6C 6C 6F 77 69 6E 67 20 62 79    the following by
029620:  74 65 73 3A 0D 0A 0D 0A 20 20 20 20 20 26 39 30    tes:....     &90
029630:  2C 20 36 30 2C 20 36 34 0D 0A 0D 0A 20 20 20 4E    , 60, 64....   N
029640:  6F 74 69 63 65 20 74 68 61 74 20 6F 6E 6C 79 20    otice that only 
029650:  74 68 65 20 20 66 69 72 73 74 20 20 6F 6E 65 20    the  first  one 
029660:  20 69 73 20 20 77 72 69 74 74 65 6E 20 20 69 6E     is  written  in
029670:  20 20 68 65 78 3A 20 20 74 68 65 20 6F 74 68 65      hex:  the othe
029680:  72 20 74 77 6F 20 61 72 65 0D 0A 20 20 20 64 65    r two are..   de
029690:  63 69 6D 61 6C 2E 0D 0A 0D 0A 20 20 20 54 68 65    cimal.....   The
0296A0:  20 6E 6F 74 65 20 77 69 6C 6C 20 63 6F 6E 74 69     note will conti
0296B0:  6E 75 65 20 70 6C 61 79 69 6E 67 20 75 6E 74 69    nue playing unti
0296C0:  6C 20 77 65 20 20 74 65 6C 6C 20 20 69 74 20 74    l we  tell  it t
0296D0:  6F 20 73 74 6F 70 2E 20 20 4F 66 20 63 6F 75 72    o stop.  Of cour
0296E0:  73 65 20 77 69 74 68 0D 0A 20 20 20 73 6F 6D 65    se with..   some
0296F0:  20 69 6E 73 74 72 75 6D 65 6E 74 73 2C 20 73 75     instruments, su
029700:  63 68 20 61 73 20 70 69 61 6E 6F 2C 20 69 74 20    ch as piano, it 
029710:  20 77 69 6C 6C 20 20 64 69 65 20 61 77 61 79 20     will  die away 
029720:  74 6F 20 6E 6F 74 68 69 6E 67 20 65 76 65 6E 74    to nothing event
029730:  75 61 6C 6C 79 2C 0D 0A 20 20 20 62 75 74 20 77    ually,..   but w
029740:  69 74 68 20 61 6E 20 6F 72 67 61 6E 20 6E 6F 69    ith an organ noi
029750:  73 65 20 69 74 20 77 69 6C 6C 20 6B 65 65 70 20    se it will keep 
029760:  67 6F 69 6E 67 2E 20 20 54 6F 20 74 75 72 6E 20    going.  To turn 
029770:  69 74 20 6F 66 66 2C 20 77 65 20 74 72 61 6E 73    it off, we trans
029780:  6D 69 74 20 61 0D 0A 20 20 20 4E 6F 74 65 20 4F    mit a..   Note O
029790:  66 66 20 65 76 65 6E 74 3A 0D 0A 0D 0A 20 20 20    ff event:....   
0297A0:  20 20 26 38 78 20 20 3C 70 69 74 63 68 3E 20 20      &8x  <pitch>  
0297B0:  3C 76 65 6C 6F 63 69 74 79 3E 0D 0A 0D 0A 20 20    <velocity>....  
0297C0:  20 54 68 69 73 20 69 73 20 76 65 72 79 20 73 69     This is very si
0297D0:  6D 69 6C 61 72 20 74 6F 20 4E 6F 74 65 20 4F 6E    milar to Note On
0297E0:  2C 20 20 65 78 63 65 70 74 20 74 68 61 74 20 74    ,  except that t
0297F0:  68 65 20 63 6F 6D 6D 61 6E 64 20 62 79 74 65 20    he command byte 
029800:  6F 77 20 20 77 68 61 74 20 20 64 61 74 61 20 20    ow  what  data  
029810:  74 6F 20 74 72 61 6E 73 6D 69 74 2E 20 20 4E 65    to transmit.  Ne
029820:  78 74 20 6D 6F 6E 74 68 20 77 65 0D 0A 20 20 20    xt month we..   
029830:  77 69 6C 6C 20 67 6F 20 69 6E 74 6F 20 74 68 69    will go into thi
029840:  73 20 6D 6F 72 65 20 64 65 65 70 6C 79 2C 20 62    s more deeply, b
029850:  75 74 20 66 6F 72 20 6E 6F 77 20 77 65 20 77 69    ut for now we wi
029860:  6C 6C 20 6C 6F 6F 6B 20 61 74 20 74 68 65 20 63    ll look at the c
029870:  6F 6D 6D 61 6E 64 73 20 74 6F 0D 0A 20 20 20 74    ommands to..   t
029880:  75 72 6E 20 6E 6F 74 65 73 20 6F 6E 20 61 6E 64    urn notes on and
029890:  20 6F 66 66 2E 0D 0A 0D 0A 20 20 20 4D 49 44 49     off.....   MIDI
0298A0:  20 63 6F 6D 6D 61 6E 64 73 20 74 6F 20 64 65 61     commands to dea
0298B0:  6C 20 77 69 74 68 20 6E 6F 74 65 73 20 61 72 65    l with notes are
0298C0:  20 74 72 61 6E 73 6D 69 74 74 65 64 20 6F 6E 20     transmitted on 
0298D0:  22 63 68 61 6E 6E 65 6C 73 22 2E 20 20 54 68 65    "channels".  The
0298E0:  72 65 20 61 72 65 0D 0A 20 20 20 73 69 78 74 65    re are..   sixte
0298F0:  65 6E 20 63 68 61 6E 6E 65 6C 73 2C 20 6E 75 6D    en channels, num
029900:  62 65 72 65 64 20 31 20 74 6F 20 31 36 2C 20 61    bered 1 to 16, a
029910:  6E 64 20 20 65 61 63 68 20 6F 66 20 74 68 65 73    nd  each of thes
029920:  65 20 63 6F 75 6C 64 20 63 6F 72 72 65 73 70 6F    e could correspo
029930:  6E 64 20 74 6F 0D 0A 20 20 20 61 20 64 69 66 66    nd to..   a diff
029940:  65 72 65 6E 74 20 4D 49 44 49 20 64 65 76 69 63    erent MIDI devic
029950:  65 2E 20 20 20 46 6F 72 20 20 65 78 61 6D 70 6C    e.   For  exampl
029960:  65 2C 20 20 79 6F 75 20 20 6D 69 67 68 74 20 20    e,  you  might  
029970:  68 61 76 65 20 20 61 20 20 64 72 75 6D 20 62 6F    have  a  drum bo
029980:  78 20 6F 6E 0D 0A 20 20 20 63 68 61 6E 6E 65 6C    x on..   channel
029990:  20 31 30 2C 20 61 6E 64 20 61 20 6B 65 79 62 6F     10, and a keybo
0299A0:  61 72 64 20 6F 6E 20 63 68 61 6E 6E 65 6C 20 20    ard on channel  
0299B0:  31 2E 20 20 54 68 65 20 64 72 75 6D 20 62 6F 78    1.  The drum box
0299C0:  20 77 6F 75 6C 64 20 6F 6E 6C 79 20 72 65 73 70     would only resp
0299D0:  6F 6E 64 0D 0A 20 20 20 74 6F 20 4E 6F 74 65 20    ond..   to Note 
0299E0:  4F 6E 20 61 6E 64 20 4E 6F 74 65 20 4F 66 66 20    On and Note Off 
0299F0:  65 76 65 6E 74 73 20 69 66 20 20 74 68 65 79 20    events if  they 
029A00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
029A10:  23 00 01 00 02 09 4E E5 23 00 C7 02 00 00 00 02    #.....N.#.......
029A20:  23 00 C3 02 00 00 00 02 23 00 C8 02 00 00 00 02    #.......#.......
029A30:  23 00 C4 02 00 00 00 02 23 00 C9 02 00 00 00 02    #.......#.......
029A40:  23 00 C5 02 00 00 00 02 23 00 C1 02 00 00 00 02    #.......#.......
029A50:  23 00 C6 02 00 00 00 02 23 00 C2 02 00 00 00 02    #.......#.......
029A60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
029A70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
029A80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
029A90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
029AA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
029AB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
029AC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
029AD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
029AE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
029AF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
029B00:  0A 20 20 20 73 74 61 72 74 69 6E 67 20 61 20 4D    .   starting a M
029B10:  69 64 64 6C 65 20 43 20 6F 6E 20 43 68 61 6E 6E    iddle C on Chann
029B20:  65 6C 20 31 20 77 6F 75 6C 64 20 62 65 20 64 6F    el 1 would be do
029B30:  6E 65 20 6C 69 6B 65 20 74 68 69 73 3A 0D 0A 0D    ne like this:...
029B40:  0A 20 20 20 20 20 7C 53 45 4E 44 2C 26 39 30 2C    .     |SEND,&90,
029B50:  36 30 2C 36 34 0D 0A 0D 0A 20 20 20 61 6E 64 20    60,64....   and 
029B60:  74 6F 20 74 75 72 6E 20 69 74 20 6F 66 66 20 79    to turn it off y
029B70:  6F 75 20 77 6F 75 6C 64 20 64 6F 20 74 68 65 20    ou would do the 
029B80:  73 61 6D 65 20 62 75 74 20 77 69 74 68 20 26 38    same but with &8
029B90:  30 20 69 6E 73 74 65 61 64 20 6F 66 20 26 39 30    0 instead of &90
029BA0:  2E 0D 0A 0D 0A 20 20 20 4D 45 53 53 41 47 45 20    .....   MESSAGE 
029BB0:  50 41 52 4C 4F 55 52 0D 0A 20 20 20 50 65 72 68    PARLOUR..   Perh
029BC0:  61 70 73 20 69 74 20 69 73 20 74 69 6D 65 20 74    aps it is time t
029BD0:  6F 20 65 78 70 6C 61 69 6E 20 61 20 62 69 74 20    o explain a bit 
029BE0:  6D 6F 72 65 20 61 62 6F 75 74 20 74 68 65 20 64    more about the d
029BF0:  69 66 66 65 72 65 6E 74 20 4D 49 44 49 20 6D 65    ifferent MIDI me
029C00:  73 73 61 67 65 73 0D 0A 20 20 20 61 76 61 69 6C    ssages..   avail
029C10:  61 62 6C 65 2E 20 20 4E 6F 3F 20 20 57 65 6C 6C    able.  No?  Well
029C20:  2C 20 69 66 20 79 6F 75 20 77 6F 75 6C 64 20 72    , if you would r
029C30:  61 74 68 65 72 20 20 49 20 63 6F 76 65 72 20 69    ather  I cover i
029C40:  74 20 6E 65 78 74 20 6D 6F 6E 74 68 20 74 68 65    t next month the
029C50:  6E 20 79 6F 75 0D 0A 20 20 20 77 69 6C 6C 20 68    n you..   will h
029C60:  61 76 65 20 74 6F 20 67 65 74 20 6F 75 74 20 74    ave to get out t
029C70:  68 65 20 73 63 69 73 73 6F 72 73 20 61 6E 64 20    he scissors and 
029C80:  70 61 73 74 65 20 61 6E 64 20 6D 61 6B 65 20 61    paste and make a
029C90:  20 6D 65 73 73 20 6F 66 20 79 6F 75 72 20 57 41     mess of your WA
029CA0:  43 43 49 2E 0D 0A 0D 0A 20 20 20 4D 49 44 49 20    CCI.....   MIDI 
029CB0:  6D 65 73 73 61 67 65 73 20 61 72 65 20 6D 61 64    messages are mad
029CC0:  65 20 75 70 20 6F 66 20 73 74 61 74 75 73 20 62    e up of status b
029CD0:  79 74 65 73 20 61 6E 64 20 64 61 74 61 20 62 79    ytes and data by
029CE0:  74 65 73 2E 20 20 54 68 65 20 73 74 61 74 75 73    tes.  The status
029CF0:  20 62 79 74 65 0D 0A 20 20 20 74 65 6C 6C 73 20     byte..   tells 
029D00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029D10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029D20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029D30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029D40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029D50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029D60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029D70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029D80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029D90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029DA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029DB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029DC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029DD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029DE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029DF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029E00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029E10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029E20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029E30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029E40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029E50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029E60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029E70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029E80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029E90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029EA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029EB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029EC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029ED0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029EE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029EF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
029F00:  75 73 20 77 68 61 74 20 6B 69 6E 64 20 6F 66 20    us what kind of 
029F10:  20 6D 65 73 73 61 67 65 20 20 69 74 20 20 69 73     message  it  is
029F20:  2C 20 20 61 6E 64 20 20 74 68 65 20 20 64 61 74    ,  and  the  dat
029F30:  61 20 20 62 79 74 65 73 20 66 69 6C 6C 20 69 6E    a  bytes fill in
029F40:  20 74 68 65 0D 0A 20 20 20 64 65 74 61 69 6C 73     the..   details
029F50:  2E 20 20 53 74 61 74 75 73 20 62 79 74 65 73 20    .  Status bytes 
029F60:  61 72 65 20 61 6C 77 61 79 73 20 62 65 74 77 65    are always betwe
029F70:  65 6E 20 31 32 38 20 20 61 6E 64 20 32 35 35 2C    en 128  and 255,
029F80:  20 61 6E 64 20 64 61 74 61 20 62 79 74 65 73 20     and data bytes 
029F90:  61 72 65 0D 0A 20 20 20 61 6C 77 61 79 73 20 6C    are..   always l
029FA0:  65 73 73 20 20 74 68 61 6E 20 20 31 32 38 2E 20    ess  than  128. 
029FB0:  20 20 49 74 20 20 69 73 20 20 65 61 73 69 65 73      It  is  easies
029FC0:  74 20 20 74 6F 20 20 74 68 69 6E 6B 20 20 6F 66    t  to  think  of
029FD0:  20 20 73 74 61 74 75 73 20 20 62 79 74 65 73 20      status  bytes 
029FE0:  69 6E 0D 0A 20 20 20 68 65 78 61 64 65 63 69 6D    in..   hexadecim
029FF0:  61 6C 2E 20 20 54 68 65 20 66 6F 6C 6C 6F 77 69    al.  The followi
02A000:  6E 67 20 74 61 62 6C 65 20 6C 69 73 74 73 20 61    ng table lists a
02A010:  6C 6C 20 74 68 65 20 74 79 70 65 73 20 6F 66 20    ll the types of 
02A020:  6D 65 73 73 61 67 65 3A 0D 0A 0D 0A 20 20 20 20    message:....    
02A030:  20 26 38 78 20 20 20 20 20 4E 6F 74 65 20 6F 66     &8x     Note of
02A040:  66 20 28 32 29 0D 0A 20 20 20 20 20 26 39 78 20    f (2)..     &9x 
02A050:  20 20 20 20 4E 6F 74 65 20 6F 6E 20 28 32 29 0D        Note on (2).
02A060:  0A 20 20 20 20 20 26 41 78 20 20 20 20 20 50 6F    .     &Ax     Po
02A070:  6C 79 70 68 6F 6E 69 63 20 6B 65 79 20 70 72 65    lyphonic key pre
02A080:  73 73 75 72 65 20 28 32 29 0D 0A 20 20 20 20 20    ssure (2)..     
02A090:  26 42 78 20 20 20 20 20 43 6F 6E 74 72 6F 6C 20    &Bx     Control 
02A0A0:  63 68 61 6E 67 65 20 28 32 29 0D 0A 20 20 20 20    change (2)..    
02A0B0:  20 26 43 78 20 20 20 20 20 50 72 6F 67 72 61 6D     &Cx     Program
02A0C0:  6D 65 20 63 68 61 6E 67 65 20 28 31 29 0D 0A 20    me change (1).. 
02A0D0:  20 20 20 20 26 44 78 20 20 20 20 20 4F 76 65 72        &Dx     Over
02A0E0:  61 6C 6C 20 6B 65 79 20 70 72 65 73 73 75 72 65    all key pressure
02A0F0:  20 28 31 29 0D 0A 20 20 20 20 20 26 45 78 20 20     (1)..     &Ex  
02A100:  23 50 72 6F 67 72 61 6D 6D 65 72 73 27 20 50 61    #Programmers' Pa
02A110:  74 63 68 20 31 31 20 2D 20 57 41 43 43 49 20 31    tch 11 - WACCI 1
02A120:  32 30 2C 20 4D 61 72 2F 41 70 72 20 31 39 39 38    20, Mar/Apr 1998
02A130:  2C 20 70 2E 20 31 36 2D 31 38 0D 0A 20 20 20 50    , p. 16-18..   P
02A140:  52 4F 47 52 41 4D 4D 45 52 53 27 20 50 41 54 43    ROGRAMMERS' PATC
02A150:  48 20 31 31 0D 0A 20 20 20 42 79 20 4D 61 74 74    H 11..   By Matt
02A160:  68 65 77 20 50 68 69 6C 6C 69 70 73 0D 0A 0D 0A    hew Phillips....
02A170:  20 20 20 43 6F 6E 74 69 6E 75 69 6E 67 20 6F 75       Continuing ou
02A180:  72 20 6C 6F 6F 6B 20 61 74 20 20 70 72 6F 67 72    r look at  progr
02A190:  61 6D 6D 69 6E 67 20 20 4D 49 44 49 20 20 69 6E    amming  MIDI  in
02A1A0:  74 65 72 66 61 63 65 73 2C 20 20 74 68 69 73 20    terfaces,  this 
02A1B0:  6D 6F 6E 74 68 20 77 65 20 77 69 6C 6C 0D 0A 20    month we will.. 
02A1C0:  20 20 66 69 6E 64 20 6F 75 74 20 68 6F 77 20 74      find out how t
02A1D0:  6F 20 73 65 6C 65 63 74 20 20 69 6E 73 74 72 75    o select  instru
02A1E0:  6D 65 6E 74 73 20 20 61 6E 64 20 20 75 73 65 20    ments  and  use 
02A1F0:  76 61 72 69 6F 75 73 20 6F 74 68 65 72 20 4D 49    various other MI
02A200:  44 49 20 63 6F 6D 6D 61 6E 64 73 2E 0D 0A 20 20    DI commands...  
02A210:  20 4E 65 78 74 20 6D 6F 6E 74 68 20 77 65 20 6D     Next month we m
02A220:  69 67 68 74 20 65 76 65 6E 20 6D 61 6E 61 67 65    ight even manage
02A230:  20 61 20 70 72 6F 67 72 61 6D 20 74 68 61 74 20     a program that 
02A240:  61 63 74 75 61 6C 6C 79 20 70 6C 61 79 73 20 61    actually plays a
02A250:  20 74 75 6E 65 2E 2E 2E 0D 0A 0D 0A 20 20 20 4C     tune.......   L
02A260:  61 73 74 20 74 69 6D 65 20 77 65 20 75 73 65 64    ast time we used
02A270:  20 61 20 70 69 65 63 65 20 20 6F 66 20 20 42 41     a piece  of  BA
02A280:  53 49 43 20 20 74 6F 20 20 63 6F 6E 74 72 6F 6C    SIC  to  control
02A290:  20 74 68 65 20 4D 49 44 49 20 69 6E 74 65 72 66     the MIDI interf
02A2A0:  61 63 65 2E 20 54 68 69 73 0D 0A 20 20 20 6D 6F    ace. This..   mo
02A2B0:  6E 74 68 20 77 65 20 68 61 76 65 20 70 72 69 6E    nth we have prin
02A2C0:  74 65 64 20 61 6E 6F 74 68 65 72 20 6C 69 73 74    ted another list
02A2D0:  69 6E 67 20 20 77 68 69 63 68 20 20 75 73 65 73    ing  which  uses
02A2E0:  20 20 6D 61 63 68 69 6E 65 20 63 6F 64 65 20 74      machine code t
02A2F0:  6F 20 64 6F 20 74 68 65 0D 0A 20 20 20 73 61 6D    o do the..   sam
02A300:  20 20 20 50 69 74 63 68 20 62 65 6E 64 20 28 32       Pitch bend (2
02A310:  29 0D 0A 20 20 20 20 20 26 46 78 20 20 20 20 20    )..     &Fx     
02A320:  53 79 73 74 65 6D 20 6D 65 73 73 61 67 65 73 0D    System messages.
02A330:  0A 0D 0A 20 20 20 54 68 65 20 6E 75 6D 62 65 72    ...   The number
02A340:  20 69 6E 20 62 72 61 63 6B 65 74 73 20 69 73 20     in brackets is 
02A350:  74 68 65 20 20 6E 75 6D 62 65 72 20 20 6F 66 20    the  number  of 
02A360:  20 64 61 74 61 20 62 79 74 65 73 20 74 68 61 74     data bytes that
02A370:  20 6D 75 73 74 20 66 6F 6C 6C 6F 77 20 66 6F 72     must follow for
02A380:  0D 0A 20 20 20 74 68 61 74 20 73 74 61 74 75 73    ..   that status
02A390:  20 62 79 74 65 2E 20 20 54 68 65 20 22 78 22 20     byte.  The "x" 
02A3A0:  72 65 70 72 65 73 65 6E 74 73 20 74 68 65 20 73    represents the s
02A3B0:  65 63 6F 6E 64 20 68 65 78 20 64 69 67 69 74 2C    econd hex digit,
02A3C0:  20 6F 72 20 6E 79 62 62 6C 65 2C 20 61 6E 64 0D     or nybble, and.
02A3D0:  0A 20 20 20 69 6E 20 6D 6F 73 74 20 63 61 73 65    .   in most case
02A3E0:  73 20 64 65 74 65 72 6D 69 6E 65 73 20 74 68 65    s determines the
02A3F0:  20 63 68 61 6E 6E 65 6C 20 6E 75 6D 62 65 72 2C     channel number,
02A400:  20 20 30 20 74 6F 20 46 20 72 65 66 65 72 72 69      0 to F referri
02A410:  6E 67 20 74 6F 20 63 68 61 6E 6E 65 6C 73 0D 0A    ng to channels..
02A420:  20 20 20 31 20 74 6F 20 31 36 2E 20 20 41 73 20       1 to 16.  As 
02A430:  49 20 20 65 78 70 6C 61 69 6E 65 64 20 20 6C 61    I  explained  la
02A440:  73 74 20 20 6D 6F 6E 74 68 2C 20 20 64 69 66 66    st  month,  diff
02A450:  65 72 65 6E 74 20 63 68 61 6E 6E 65 6C 73 20 6D    erent channels m
02A460:  69 67 68 74 20 72 65 66 65 72 20 74 6F 0D 0A 20    ight refer to.. 
02A470:  20 20 64 69 66 66 65 72 65 6E 74 20 70 69 65 63      different piec
02A480:  65 73 20 6F 66 20 4D 49 44 49 20 65 71 75 69 70    es of MIDI equip
02A490:  6D 65 6E 74 2C 20 6F 72 20 20 6F 6E 20 20 61 20    ment, or  on  a 
02A4A0:  70 6F 6C 79 70 68 6F 6E 69 63 20 6B 65 79 62 6F    polyphonic keybo
02A4B0:  61 72 64 20 6F 72 20 76 6F 69 63 65 0D 0A 20 20    ard or voice..  
02A4C0:  20 62 6F 78 20 63 61 6E 20 62 65 20 20 75 73 65     box can be  use
02A4D0:  64 20 20 74 6F 20 20 64 69 73 74 69 6E 67 75 69    d  to  distingui
02A4E0:  73 68 20 20 62 65 74 77 65 65 6E 20 20 73 65 76    sh  between  sev
02A4F0:  65 72 61 6C 20 20 64 69 66 66 65 72 65 6E 74 20    eral  different 
02A500:  65 20 6A 6F 62 2E 20 20 4C 69 73 74 69 6E 67 20    e job.  Listing 
02A510:  31 20 69 73 20 61 20 70 69 65 63 65 20 20 6F 66    1 is a piece  of
02A520:  20 20 42 41 53 49 43 20 20 77 68 69 63 68 20 69      BASIC  which i
02A530:  6E 73 74 61 6C 6C 73 20 61 20 63 6F 75 70 6C 65    nstalls a couple
02A540:  20 6F 66 20 52 53 58 0D 0A 20 20 20 63 6F 6D 6D     of RSX..   comm
02A550:  61 6E 64 73 2C 20 61 6E 64 20 4C 69 73 74 69 6E    ands, and Listin
02A560:  67 20 32 20 69 73 20 74 68 65 20 61 73 73 65 6D    g 2 is the assem
02A570:  62 6C 79 20 6C 61 6E 67 75 61 67 65 20 66 6F 72    bly language for
02A580:  20 74 68 65 20 52 53 58 73 2E 20 20 3C 3C 54 68     the RSXs.  <<Th
02A590:  65 79 20 61 72 65 0D 0A 20 20 20 73 61 76 65 64    ey are..   saved
02A5A0:  20 6F 6E 20 74 68 65 20 64 69 73 63 20 61 73 20     on the disc as 
02A5B0:  53 45 4E 44 2E 42 41 53 20 61 6E 64 20 53 45 4E    SEND.BAS and SEN
02A5C0:  44 2E 41 53 4D 3E 3E 0D 0A 0D 0A 20 20 20 54 6F    D.ASM>>....   To
02A5D0:  20 75 73 65 20 74 68 65 20 52 53 58 20 63 6F 6D     use the RSX com
02A5E0:  6D 61 6E 64 73 2C 20 74 79 70 65 20 69 6E 20 4C    mands, type in L
02A5F0:  69 73 74 69 6E 67 20 20 31 20 20 61 6E 64 20 72    isting  1  and r
02A600:  75 6E 20 69 74 2E 20 20 49 66 20 79 6F 75 20 68    un it.  If you h
02A610:  61 76 65 20 6D 61 64 65 0D 0A 20 20 20 61 6E 79    ave made..   any
02A620:  20 6D 69 73 74 61 6B 65 73 20 69 6E 20 20 74 68     mistakes in  th
02A630:  65 20 20 74 79 70 69 6E 67 2C 20 20 74 68 65 73    e  typing,  thes
02A640:  65 20 20 77 69 6C 6C 20 20 62 65 20 20 73 70 6F    e  will  be  spo
02A650:  74 74 65 64 20 20 77 68 65 6E 20 20 79 6F 75 20    tted  when  you 
02A660:  72 75 6E 20 74 68 65 0D 0A 20 20 20 70 72 6F 67    run the..   prog
02A670:  72 61 6D 2E 20 20 4F 6E 63 65 20 74 68 65 20 52    ram.  Once the R
02A680:  53 58 73 20 61 72 65 20 69 6E 73 74 61 6C 6C 65    SXs are installe
02A690:  64 2C 20 79 6F 75 20 20 6E 65 65 64 20 74 6F 20    d, you  need to 
02A6A0:  75 73 65 20 74 68 65 20 7C 43 48 4F 55 54 20 63    use the |CHOUT c
02A6B0:  6F 6D 6D 61 6E 64 0D 0A 20 20 20 74 6F 20 73 65    ommand..   to se
02A6C0:  6C 65 63 74 20 74 68 65 20 74 79 70 65 20 6F 66    lect the type of
02A6D0:  20 4D 49 44 49 20 69 6E 74 65 72 66 61 63 65 20     MIDI interface 
02A6E0:  79 6F 75 20 61 72 65 20 75 73 69 6E 67 2E 0D 0A    you are using...
02A6F0:  0D 0A 20 20 20 20 20 7C 43 48 4F 55 54 2C 30 20    ..     |CHOUT,0 
02A700:  69 6E 20 6C 69 6E 65 73 20 31 30 20 61 6E 64 0D    in lines 10 and.
02A710:  0A 20 20 20 33 30 2E 20 20 3C 3C 49 74 20 69 73    .   30.  <<It is
02A720:  20 73 61 76 65 64 20 6F 6E 20 64 69 73 63 20 61     saved on disc a
02A730:  73 20 4D 49 44 49 31 2E 42 41 53 3E 3E 0D 0A 0D    s MIDI1.BAS>>...
02A740:  0A 20 20 20 4F 56 45 52 20 54 4F 20 59 4F 55 0D    .   OVER TO YOU.
02A750:  0A 20 20 20 57 65 6C 6C 2C 20 74 68 61 74 27 73    .   Well, that's
02A760:  20 79 6F 75 72 20 20 6C 6F 74 20 20 75 6E 74 69     your  lot  unti
02A770:  6C 20 20 4D 61 72 63 68 21 20 20 20 49 6E 20 20    l  March!   In  
02A780:  74 68 65 20 20 6D 65 61 6E 20 20 74 69 6D 65 20    the  mean  time 
02A790:  20 68 61 76 65 20 20 61 20 67 6F 20 61 74 0D 0A     have  a go at..
02A7A0:  20 20 20 69 6E 73 74 72 75 63 74 69 6E 67 20 79       instructing y
02A7B0:  6F 75 72 20 6B 65 79 62 6F 61 72 64 20 74 6F 20    our keyboard to 
02A7C0:  70 6C 61 79 20 20 61 20 20 74 75 6E 65 2C 20 20    play  a  tune,  
02A7D0:  61 6E 64 20 65 78 70 65 72 69 6D 65 6E 74 20 77    and experiment w
02A7E0:  69 74 68 20 64 69 66 66 65 72 65 6E 74 0D 0A 20    ith different.. 
02A7F0:  20 20 63 68 61 6E 6E 65 6C 20 6E 75 6D 62 65 72      channel number
02A800:  73 20 2D 20 20 79 6F 75 20 20 6D 69 67 68 74 20    s -  you  might 
02A810:  20 65 76 65 6E 20 20 66 69 6E 64 20 20 74 68 61     even  find  tha
02A820:  74 20 20 6F 6E 65 20 20 70 72 6F 64 75 63 65 73    t  one  produces
02A830:  20 64 72 75 6D 20 6E 6F 69 73 65 73 0D 0A 20 20     drum noises..  
02A840:  20 69 6E 73 74 65 61 64 20 6F 66 20 6E 6F 74 65     instead of note
02A850:  73 2E 0D 0A 0D 0A 0D 0A 0D 0A 20 20 20 54 41 42    s.........   TAB
02A860:  4C 45 20 31 0D 0A 20 20 20 20 20 20 20 20 20 20    LE 1..          
02A870:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02A880:  20 20 20 20 20 20 52 41 4D 20 20 20 20 45 4D 52          RAM    EMR
02A890:  20 20 20 20 44 48 43 50 0D 0A 20 20 20 73 74 61        DHCP..   sta
02A8A0:  74 75 73 20 28 72 65 61 64 20 6F 6E 6C 79 29 20    tus (read only) 
02A8B0:  20 20 20 20 20 20 20 20 20 20 26 46 38 45 45 20              &F8EE 
02A8C0:  20 26 46 38 46 32 20 20 26 46 38 45 30 0D 0A 20     &F8F2  &F8E0.. 
02A8D0:  20 20 63 6F 6E 74 72 6F 6C 20 28 77 72 69 74 65      control (write
02A8E0:  20 6F 6E 6C 79 29 20 20 20 20 20 20 20 20 20 26     only)         &
02A8F0:  46 38 45 43 20 20 26 46 38 46 32 20 20 26 46 38    F8EC  &F8F2  &F8
02A900:  20 20 2D 20 52 41 4D 20 4D 75 73 69 63 20 4D 61      - RAM Music Ma
02A910:  63 68 69 6E 65 0D 0A 20 20 20 20 20 7C 43 48 4F    chine..     |CHO
02A920:  55 54 2C 31 20 20 20 2D 20 45 4D 52 20 69 6E 74    UT,1   - EMR int
02A930:  65 72 66 61 63 65 0D 0A 20 20 20 20 20 7C 43 48    erface..     |CH
02A940:  4F 55 54 2C 32 20 20 20 2D 20 44 48 43 50 20 69    OUT,2   - DHCP i
02A950:  6E 74 65 72 66 61 63 65 0D 0A 0D 0A 20 20 20 54    nterface....   T
02A960:  68 65 20 7C 43 48 4F 55 54 20 63 6F 6D 6D 61 6E    he |CHOUT comman
02A970:  64 20 6D 61 6B 65 73 20 20 74 68 65 20 20 6E 65    d makes  the  ne
02A980:  63 65 73 73 61 72 79 20 20 61 64 6A 75 73 74 6D    cessary  adjustm
02A990:  65 6E 74 73 20 20 74 6F 20 20 65 6E 73 75 72 65    ents  to  ensure
02A9A0:  20 74 68 61 74 20 74 68 65 0D 0A 20 20 20 63 6F     that the..   co
02A9B0:  72 72 65 63 74 20 70 6F 72 74 20 61 64 64 72 65    rrect port addre
02A9C0:  73 73 65 73 20 61 72 65 20 75 73 65 64 2C 20 61    sses are used, a
02A9D0:  6E 64 20 20 61 6C 73 6F 20 20 73 65 74 73 20 20    nd  also  sets  
02A9E0:  74 68 65 20 4D 49 44 49 20 69 6E 74 65 72 66 61    the MIDI interfa
02A9F0:  63 65 20 74 6F 20 62 65 0D 0A 20 20 20 72 65 61    ce to be..   rea
02AA00:  64 79 20 74 6F 20 73 65 6E 64 20 64 61 74 61 2E    dy to send data.
02AA10:  0D 0A 0D 0A 20 20 20 4E 65 78 74 20 20 79 6F 75    ....   Next  you
02AA20:  20 20 63 61 6E 20 20 75 73 65 20 20 74 68 65 20      can  use  the 
02AA30:  20 7C 53 45 4E 44 20 20 63 6F 6D 6D 61 6E 64 20     |SEND  command 
02AA40:  20 74 6F 20 20 73 65 6E 64 20 20 69 6E 73 74 72     to  send  instr
02AA50:  75 63 74 69 6F 6E 73 20 20 74 6F 20 20 4D 49 44    uctions  to  MID
02AA60:  49 0D 0A 20 20 20 69 6E 73 74 72 75 6D 65 6E 74    I..   instrument
02AA70:  73 2E 20 20 54 68 65 20 7C 53 45 4E 44 20 52 53    s.  The |SEND RS
02AA80:  58 20 74 61 6B 65 73 20 61 73 20 6D 61 6E 79 20    X takes as many 
02AA90:  20 61 72 67 75 6D 65 6E 74 73 20 61 73 20 79 6F     arguments as yo
02AAA0:  75 20 6C 69 6B 65 2C 20 61 6E 64 20 74 68 65 79    u like, and they
02AAB0:  0D 0A 20 20 20 61 72 65 20 73 65 6E 74 20 6F 75    ..   are sent ou
02AAC0:  74 20 76 69 61 20 74 68 65 20 20 4D 49 44 49 20    t via the  MIDI 
02AAD0:  20 69 6E 74 65 72 66 61 63 65 20 20 69 6E 20 20     interface  in  
02AAE0:  6F 72 64 65 72 2E 20 20 4C 61 73 74 20 6D 6F 6E    order.  Last mon
02AAF0:  74 68 27 73 20 65 78 61 6D 70 6C 65 20 6F 66 0D    th's example of.
02AB00:  45 30 0D 0A 20 20 20 64 61 74 61 20 72 65 61 64    E0..   data read
02AB10:  20 28 72 65 61 64 20 6F 6E 6C 79 29 20 20 20 20     (read only)    
02AB20:  20 20 20 20 26 46 38 45 46 20 20 26 46 38 46 33        &F8EF  &F8F3
02AB30:  20 20 26 46 38 45 31 0D 0A 20 20 20 64 61 74 61      &F8E1..   data
02AB40:  20 77 72 69 74 65 20 28 77 72 69 74 65 20 6F 6E     write (write on
02AB50:  6C 79 29 20 20 20 20 20 20 26 46 38 45 44 20 20    ly)      &F8ED  
02AB60:  26 46 38 46 33 20 20 26 46 38 45 31 0D 0A 0D 0A    &F8F3  &F8E1....
02AB70:  0D 0A 0D 0A 20 20 20 31 30 20 20 73 74 61 74 75    ....   10  statu
02AB80:  73 3D 26 46 38 45 45 3A 63 6F 6E 74 72 6F 6C 3D    s=&F8EE:control=
02AB90:  26 46 38 45 43 3A 64 61 74 61 77 72 69 74 65 3D    &F8EC:datawrite=
02ABA0:  26 46 38 45 44 0D 0A 20 20 20 32 30 20 20 4F 55    &F8ED..   20  OU
02ABB0:  54 20 63 6F 6E 74 72 6F 6C 2C 33 0D 0A 20 20 20    T control,3..   
02ABC0:  33 30 20 20 4F 55 54 20 63 6F 6E 74 72 6F 6C 2C    30  OUT control,
02ABD0:  26 31 35 3A 52 45 4D 20 63 68 61 6E 67 65 20 74    &15:REM change t
02ABE0:  6F 20 26 31 36 20 66 6F 72 20 45 4D 52 20 61 6E    o &16 for EMR an
02ABF0:  64 20 44 48 43 50 0D 0A 20 20 20 34 30 20 20 46    d DHCP..   40  F
02AC00:  4F 52 20 78 3D 30 20 54 4F 20 32 3A 52 45 41 44    OR x=0 TO 2:READ
02AC10:  20 64 3A 47 4F 53 55 42 20 31 30 30 3A 4E 45 58     d:GOSUB 100:NEX
02AC20:  54 0D 0A 20 20 20 35 30 20 20 46 4F 52 20 78 3D    T..   50  FOR x=
02AC30:  30 20 54 4F 20 35 30 30 30 3A 4E 45 58 54 0D 0A    0 TO 5000:NEXT..
02AC40:  20 20 20 36 30 20 20 46 4F 52 20 78 3D 30 20 54       60  FOR x=0 T
02AC50:  4F 20 32 3A 52 45 41 44 20 64 3A 47 4F 53 55 42    O 2:READ d:GOSUB
02AC60:  20 31 30 30 3A 4E 45 58 54 0D 0A 20 20 20 37 30     100:NEXT..   70
02AC70:  20 20 45 4E 44 0D 0A 20 20 20 38 30 20 20 44 41      END..   80  DA
02AC80:  54 41 20 26 39 30 2C 36 30 2C 36 34 2C 26 38 30    TA &90,60,64,&80
02AC90:  2C 36 30 2C 30 0D 0A 20 20 20 31 30 30 20 57 48    ,60,0..   100 WH
02ACA0:  49 4C 45 20 28 49 4E 50 28 73 74 61 74 75 73 29    ILE (INP(status)
02ACB0:  20 41 4E 44 20 32 29 3D 30 3A 57 45 4E 44 0D 0A     AND 2)=0:WEND..
02ACC0:  20 20 20 31 31 30 20 4F 55 54 20 64 61 74 61 77       110 OUT dataw
02ACD0:  72 69 74 65 2C 64 0D 0A 20 20 20 31 32 30 20 52    rite,d..   120 R
02ACE0:  45 54 55 52 4E 0D 0A 1A 0D 0A 0D 0A 20 20 20 54    ETURN.......   T
02ACF0:  68 69 73 20 6D 6F 6E 74 68 20 69 6E 20 50 72 6F    his month in Pro
02AD00:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
02AD10:  24 00 01 00 02 09 4E E5 24 00 C1 02 00 00 00 02    $.....N.$.......
02AD20:  24 00 C6 02 00 00 00 02 24 00 C2 02 00 00 00 02    $.......$.......
02AD30:  24 00 C7 02 00 00 00 02 24 00 C3 02 00 00 00 02    $.......$.......
02AD40:  24 00 C8 02 00 00 00 02 24 00 C4 02 00 00 00 02    $.......$.......
02AD50:  24 00 C9 02 00 00 00 02 24 00 C5 02 00 00 00 02    $.......$.......
02AD60:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02AD70:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02AD80:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02AD90:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02ADA0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02ADB0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02ADC0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02ADD0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02ADE0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02ADF0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02AE00:  69 6E 73 74 72 75 6D 65 6E 74 73 0D 0A 20 20 20    instruments..   
02AE10:  70 6C 61 79 65 64 20 6F 6E 20 74 68 65 20 73 61    played on the sa
02AE20:  6D 65 20 70 69 65 63 65 20 6F 66 20 4D 49 44 49    me piece of MIDI
02AE30:  20 65 71 75 69 70 6D 65 6E 74 2E 0D 0A 0D 0A 20     equipment..... 
02AE40:  20 20 54 68 65 20 73 74 61 74 75 73 20 62 79 74      The status byt
02AE50:  65 20 26 39 30 20 77 6F 75 6C 64 20 62 65 20 61    e &90 would be a
02AE60:  20 4E 6F 74 65 20 20 4F 6E 20 20 65 76 65 6E 74     Note  On  event
02AE70:  20 6F 6E 20 63 68 61 6E 6E 65 6C 20 31 2C 20 61     on channel 1, a
02AE80:  6E 64 20 26 38 31 20 77 6F 75 6C 64 0D 0A 20 20    nd &81 would..  
02AE90:  20 62 65 20 61 20 4E 6F 74 65 20 4F 66 66 20 6F     be a Note Off o
02AEA0:  6E 20 63 68 61 6E 6E 65 6C 20 32 2E 20 20 54 68    n channel 2.  Th
02AEB0:  65 20 6F 6E 6C 79 20 65 78 63 65 70 74 69 6F 6E    e only exception
02AEC0:  20 69 6E 20 66 61 63 74 20 69 73 20 26 46 78 2C     in fact is &Fx,
02AED0:  20 74 68 65 20 73 79 73 74 65 6D 0D 0A 20 20 20     the system..   
02AEE0:  6D 65 73 73 61 67 65 73 2C 20 77 68 69 63 68 20    messages, which 
02AEF0:  61 66 66 65 63 74 20 61 6C 6C 20 63 68 61 6E 6E    affect all chann
02AF00:  65 6C 73 20 20 61 74 20 20 6F 6E 63 65 2E 20 20    els  at  once.  
02AF10:  48 65 72 65 20 74 68 65 20 22 78 22 20 64 69 73    Here the "x" dis
02AF20:  74 69 6E 67 75 69 73 68 65 73 0D 0A 20 20 20 62    tinguishes..   b
02AF30:  65 74 77 65 65 6E 20 64 69 66 66 65 72 65 6E 74    etween different
02AF40:  20 6B 69 6E 64 73 20 6F 66 20 73 79 73 74 65 6D     kinds of system
02AF50:  20 6D 65 73 73 61 67 65 20 69 6E 73 74 65 61 64     message instead
02AF60:  2E 0D 0A 0D 0A 20 20 20 4F 4E 45 20 4D 41 4E 20    .....   ONE MAN 
02AF70:  42 41 4E 44 0D 0A 20 20 20 54 68 65 20 6E 65 78    BAND..   The nex
02AF80:  74 20 6D 6F 73 74 20 75 73 65 66 75 6C 20 4D 49    t most useful MI
02AF90:  44 49 20 20 6D 65 73 73 61 67 65 20 20 61 66 74    DI  message  aft
02AFA0:  65 72 20 20 4E 6F 74 65 20 20 4F 6E 20 20 61 6E    er  Note  On  an
02AFB0:  64 20 20 4E 6F 74 65 20 4F 66 66 20 69 73 20 26    d  Note Off is &
02AFC0:  43 78 2C 0D 0A 20 20 20 50 72 6F 67 72 61 6D 6D    Cx,..   Programm
02AFD0:  65 20 43 68 61 6E 67 65 2E 20 20 54 68 69 73 20    e Change.  This 
02AFE0:  69 73 20 75 73 65 64 20 74 6F 20 73 65 6C 65 63    is used to selec
02AFF0:  74 20 77 68 61 74 20 69 6E 73 74 72 75 6D 65 6E    t what instrumen
02B000:  20 6F 6E 65 20 77 65 20 73 65 6E 74 2C 20 74 68     one we sent, th
02B010:  61 74 20 69 73 20 61 6E 6F 74 68 65 72 20 62 79    at is another by
02B020:  74 65 20 6F 66 20 26 39 30 2E 0D 0A 0D 0A 20 20    te of &90.....  
02B030:  20 4F 66 20 63 6F 75 72 73 65 2C 20 79 6F 75 20     Of course, you 
02B040:  63 61 6E 20 70 75 74 20 69 6E 20 74 68 6F 73 65    can put in those
02B050:  20 26 39 30 20 62 79 74 65 73 20 69 66 20 79 6F     &90 bytes if yo
02B060:  75 20 6C 69 6B 65 2C 20 61 6E 64 20 69 66 20 79    u like, and if y
02B070:  6F 75 20 61 72 65 20 6A 75 73 74 0D 0A 20 20 20    ou are just..   
02B080:  73 65 6E 64 69 6E 67 20 4D 49 44 49 20 64 61 74    sending MIDI dat
02B090:  61 20 79 6F 75 20 64 6F 20 6E 6F 74 20 72 65 61    a you do not rea
02B0A0:  6C 6C 79 20 6E 65 65 64 20 74 6F 20 6B 6E 6F 77    lly need to know
02B0B0:  20 61 62 6F 75 74 20 72 75 6E 6E 69 6E 67 20 73     about running s
02B0C0:  74 61 74 75 73 2E 20 20 49 66 0D 0A 20 20 20 79    tatus.  If..   y
02B0D0:  6F 75 20 61 72 65 20 72 65 63 65 69 76 69 6E 67    ou are receiving
02B0E0:  20 64 61 74 61 20 66 72 6F 6D 20 20 74 68 65 20     data from  the 
02B0F0:  20 6B 65 79 62 6F 61 72 64 20 20 74 68 6F 75 67     keyboard  thoug
02B100:  68 2C 20 20 79 6F 75 20 77 69 6C 6C 20 68 61 76    h,  you will hav
02B110:  65 20 74 6F 20 63 6F 70 65 0D 0A 20 20 20 77 69    e to cope..   wi
02B120:  74 68 20 69 74 2E 20 20 57 68 65 6E 20 49 20 66    th it.  When I f
02B130:  69 72 73 74 20 20 73 74 61 72 74 65 64 20 20 65    irst  started  e
02B140:  78 70 65 72 69 6D 65 6E 74 69 6E 67 20 20 77 69    xperimenting  wi
02B150:  74 68 20 72 65 63 6F 72 64 69 6E 67 20 64 61 74    th recording dat
02B160:  61 20 66 72 6F 6D 20 61 0D 0A 20 20 20 6B 65 79    a from a..   key
02B170:  62 6F 61 72 64 2C 20 49 20 64 69 64 20 6E 6F 74    board, I did not
02B180:  20 6B 6E 6F 77 20 20 61 62 6F 75 74 20 20 72 75     know  about  ru
02B190:  6E 6E 69 6E 67 20 20 73 74 61 74 75 73 2C 20 20    nning  status,  
02B1A0:  73 6F 20 20 49 20 74 68 6F 75 67 68 74 20 74 68    so  I thought th
02B1B0:  65 72 65 20 77 61 73 0D 0A 20 20 20 73 6F 6D 65    ere was..   some
02B1C0:  74 68 69 6E 67 20 77 72 6F 6E 67 20 77 69 74 68    thing wrong with
02B1D0:  20 6D 79 20 69 6E 74 65 72 66 61 63 65 21 0D 0A     my interface!..
02B1E0:  0D 0A 20 20 20 59 6F 75 20 61 72 65 20 61 6C 73    ..   You are als
02B1F0:  6F 20 61 6C 6C 6F 77 65 64 20 74 6F 20 74 75 72    o allowed to tur
02B200:  74 20 6E 6F 69 73 65 20 74 6F 20 75 73 65 20 66    t noise to use f
02B210:  6F 72 0D 0A 20 20 20 74 68 65 20 6E 6F 74 65 73    or..   the notes
02B220:  20 6F 6E 20 61 20 63 68 61 6E 6E 65 6C 2E 20 20     on a channel.  
02B230:  49 74 20 74 61 6B 65 73 20 20 6F 6E 65 20 20 64    It takes  one  d
02B240:  61 74 61 20 62 79 74 65 20 61 73 20 61 20 70 61    ata byte as a pa
02B250:  72 61 6D 65 74 65 72 2C 20 61 6C 6C 6F 77 69 6E    rameter, allowin
02B260:  67 0D 0A 20 20 20 79 6F 75 20 20 74 6F 20 20 63    g..   you  to  c
02B270:  68 6F 6F 73 65 20 20 66 72 6F 6D 20 20 31 32 38    hoose  from  128
02B280:  20 20 64 69 66 66 65 72 65 6E 74 20 20 20 69 6E      different   in
02B290:  73 74 72 75 6D 65 6E 74 73 20 20 6E 75 6D 62 65    struments  numbe
02B2A0:  72 65 64 20 20 30 20 20 74 6F 20 20 31 32 37 2E    red  0  to  127.
02B2B0:  0D 0A 20 20 20 55 6E 66 6F 72 74 75 6E 61 74 65    ..   Unfortunate
02B2C0:  6C 79 20 64 69 66 66 65 72 65 6E 74 20 74 79 70    ly different typ
02B2D0:  65 73 20 6F 66 20 20 4D 49 44 49 20 20 6B 65 79    es of  MIDI  key
02B2E0:  62 6F 61 72 64 20 20 75 73 65 20 64 69 66 66 65    board  use diffe
02B2F0:  72 65 6E 74 20 6E 75 6D 62 65 72 73 20 74 6F 0D    rent numbers to.
02B300:  0A 20 20 20 73 65 6C 65 63 74 20 61 20 76 69 6F    .   select a vio
02B310:  6C 69 6E 2C 20 73 61 79 2E 20 20 53 6F 6D 65 20    lin, say.  Some 
02B320:  6B 65 79 62 6F 61 72 64 73 20 20 66 6F 6C 6C 6F    keyboards  follo
02B330:  77 20 20 61 20 63 6F 64 65 20 63 61 6C 6C 65 64    w  a code called
02B340:  20 47 65 6E 65 72 61 6C 20 4D 49 44 49 2C 0D 0A     General MIDI,..
02B350:  20 20 20 61 6E 64 20 74 6F 20 73 65 6C 65 63 74       and to select
02B360:  20 61 20 76 69 6F 6C 69 6E 20 6F 6E 20 63 68 61     a violin on cha
02B370:  6E 6E 65 6C 20 31 20 79 6F 75 20 77 6F 75 6C 64    nnel 1 you would
02B380:  20 64 6F 3A 0D 0A 0D 0A 20 20 20 20 20 7C 53 45     do:....     |SE
02B390:  4E 44 2C 26 43 30 2C 34 31 0D 0A 0D 0A 20 20 20    ND,&C0,41....   
02B3A0:  49 20 61 6D 20 67 75 65 73 73 69 6E 67 20 61 20    I am guessing a 
02B3B0:  62 69 74 20 20 68 65 72 65 2C 20 20 61 73 20 20    bit  here,  as  
02B3C0:  69 74 20 20 6D 69 67 68 74 20 20 6E 6F 74 20 20    it  might  not  
02B3D0:  62 65 20 20 61 20 76 69 6F 6C 69 6E 2C 20 62 75    be  a violin, bu
02B3E0:  74 20 69 74 20 77 6F 75 6C 64 0D 0A 20 20 20 63    t it would..   c
02B3F0:  65 72 74 61 69 6E 6C 79 20 62 65 20 61 20 73 74    ertainly be a st
02B400:  6E 20 20 61 20 20 6E 6F 74 65 20 20 6F 66 66 20    n  a  note  off 
02B410:  20 75 73 69 6E 67 20 20 61 20 20 4E 6F 74 65 20     using  a  Note 
02B420:  4F 6E 20 65 76 65 6E 74 20 77 69 74 68 20 61 0D    On event with a.
02B430:  0A 20 20 20 76 65 6C 6F 63 69 74 79 20 6F 66 20    .   velocity of 
02B440:  7A 65 72 6F 3A 0D 0A 0D 0A 20 20 20 20 20 7C 53    zero:....     |S
02B450:  45 4E 44 2C 26 39 30 2C 36 30 2C 30 0D 0A 0D 0A    END,&90,60,0....
02B460:  20 20 20 77 6F 75 6C 64 20 74 75 72 6E 20 6F 66       would turn of
02B470:  66 20 61 20 4D 69 64 64 6C 65 20 43 20 20 70 6C    f a Middle C  pl
02B480:  61 79 69 6E 67 20 20 6F 6E 20 20 63 68 61 6E 6E    aying  on  chann
02B490:  65 6C 20 20 31 2E 20 20 57 68 65 6E 20 79 6F 75    el  1.  When you
02B4A0:  20 63 6F 6D 62 69 6E 65 20 74 68 69 73 0D 0A 20     combine this.. 
02B4B0:  20 20 77 69 74 68 20 72 75 6E 6E 69 6E 67 20 73      with running s
02B4C0:  74 61 74 75 73 2C 20 79 6F 75 20 20 63 61 6E 20    tatus, you  can 
02B4D0:  20 70 6C 61 79 20 20 6C 6F 6E 67 20 20 70 69 65     play  long  pie
02B4E0:  63 65 73 20 20 6F 6E 20 20 6F 6E 65 20 63 68 61    ces  on  one cha
02B4F0:  6E 6E 65 6C 20 77 69 74 68 6F 75 74 0D 0A 20 20    nnel without..  
02B500:  20 73 65 6E 64 69 6E 67 20 61 6E 79 20 73 74 61     sending any sta
02B510:  74 75 73 20 62 79 74 65 73 20 61 70 61 72 74 20    tus bytes apart 
02B520:  66 72 6F 6D 20 74 68 65 20 66 69 72 73 74 20 4E    from the first N
02B530:  6F 74 65 20 4F 6E 2E 0D 0A 0D 0A 20 20 20 41 46    ote On.....   AF
02B540:  54 45 52 20 45 46 46 45 43 54 53 0D 0A 20 20 20    TER EFFECTS..   
02B550:  47 65 74 74 69 6E 67 20 62 61 63 6B 20 74 6F 20    Getting back to 
02B560:  74 68 65 20 73 74 61 74 75 73 20 63 6F 64 65 73    the status codes
02B570:  2C 20 69 66 20 20 79 6F 75 20 20 77 61 6E 74 20    , if  you  want 
02B580:  20 74 6F 20 63 68 61 6E 67 65 20 74 68 65 20 76     to change the v
02B590:  6F 6C 75 6D 65 20 6F 66 20 61 0D 0A 20 20 20 6E    olume of a..   n
02B5A0:  6F 74 65 20 61 66 74 65 72 20 69 74 20 68 61 73    ote after it has
02B5B0:  20 73 74 61 72 74 65 64 2C 20 79 6F 75 20 20 6E     started, you  n
02B5C0:  65 65 64 20 20 74 68 65 20 20 73 65 72 76 69 63    eed  the  servic
02B5D0:  65 73 20 6F 66 20 26 41 78 2C 20 50 6F 6C 79 70    es of &Ax, Polyp
02B5E0:  68 6F 6E 69 63 20 4B 65 79 0D 0A 20 20 20 50 72    honic Key..   Pr
02B5F0:  65 73 73 75 72 65 20 28 6F 72 20 61 66 74 65 72    essure (or after
02B600:  72 69 6E 67 20 69 6E 73 74 72 75 6D 65 6E 74 2E    ring instrument.
02B610:  20 20 20 49 66 20 20 79 6F 75 72 20 20 6B 65 79       If  your  key
02B620:  62 6F 61 72 64 20 64 6F 65 73 20 6E 6F 74 20 63    board does not c
02B630:  6F 6E 66 6F 72 6D 20 74 6F 0D 0A 20 20 20 47 65    onform to..   Ge
02B640:  6E 65 72 61 6C 20 4D 49 44 49 20 74 68 65 6E 20    neral MIDI then 
02B650:  74 68 65 72 65 20 6D 61 79 20 62 65 20 61 20 6C    there may be a l
02B660:  69 73 74 20 20 6F 66 20 74 68 65 20 6E 75 6D 62    ist  of the numb
02B670:  65 72 73 20 69 6E 20 79 6F 75 72 20 6D 61 6E 75    ers in your manu
02B680:  61 6C 20 6F 72 20 6F 6E 0D 0A 20 20 20 74 68 65    al or on..   the
02B690:  20 6B 65 79 62 6F 61 72 64 20 69 74 73 65 6C 66     keyboard itself
02B6A0:  2E 0D 0A 0D 0A 20 20 20 41 66 74 65 72 20 74 68    .....   After th
02B6B0:  61 74 2C 20 7C 53 45 4E 44 2C 26 39 30 2C 36 39    at, |SEND,&90,69
02B6C0:  2C 36 34 20 77 6F 75 6C 64 20 20 70 6C 61 79 20    ,64 would  play 
02B6D0:  20 74 68 65 20 20 41 20 20 61 62 6F 76 65 20 20     the  A  above  
02B6E0:  4D 69 64 64 6C 65 20 43 20 28 6B 6E 6F 77 6E 20    Middle C (known 
02B6F0:  61 73 0D 0A 20 20 20 49 6E 74 65 72 6E 61 74 69    as..   Internati
02B700:  6F 6E 61 6C 20 41 29 20 75 73 69 6E 67 20 74 68    onal A) using th
02B710:  65 20 76 69 6F 6C 69 6E 20 6E 6F 69 73 65 2E 20    e violin noise. 
02B720:  20 49 66 20 79 6F 75 20 74 68 65 6E 20 64 69 64     If you then did
02B730:  0D 0A 0D 0A 20 20 20 20 20 7C 53 45 4E 44 2C 26    ....     |SEND,&
02B740:  43 31 2C 35 37 2C 26 39 31 2C 36 30 2C 36 34 0D    C1,57,&91,60,64.
02B750:  0A 0D 0A 20 20 20 69 74 20 77 6F 75 6C 64 20 73    ...   it would s
02B760:  65 6C 65 63 74 20 61 20 62 72 61 73 73 20 69 6E    elect a brass in
02B770:  73 74 72 75 6D 65 6E 74 20 20 6F 6E 20 20 63 68    strument  on  ch
02B780:  61 6E 6E 65 6C 20 32 20 61 6E 64 20 73 74 61 72    annel 2 and star
02B790:  74 20 70 6C 61 79 69 6E 67 20 4D 69 64 64 6C 65    t playing Middle
02B7A0:  0D 0A 20 20 20 43 2E 20 20 54 6F 20 74 75 72 6E    ..   C.  To turn
02B7B0:  20 74 68 65 20 6E 6F 74 65 73 20 6F 66 66 2C 20     the notes off, 
02B7C0:  79 6F 75 20 77 6F 75 6C 64 20 74 68 65 6E 20 64    you would then d
02B7D0:  6F 0D 0A 0D 0A 20 20 20 20 20 7C 53 45 4E 44 2C    o....     |SEND,
02B7E0:  26 38 30 2C 36 39 2C 30 20 28 66 6F 72 20 74 68    &80,69,0 (for th
02B7F0:  65 20 76 69 6F 6C 69 6E 29 0D 0A 20 20 20 20 20    e violin)..     
02B800:  74 6F 75 63 68 29 2E 20 20 54 68 69 73 20 74 61    touch).  This ta
02B810:  6B 65 73 20 74 77 6F 20 20 64 61 74 61 20 20 62    kes two  data  b
02B820:  79 74 65 73 3A 20 66 69 72 73 74 20 74 68 65 20    ytes: first the 
02B830:  70 69 74 63 68 20 6F 66 0D 0A 20 20 20 74 68 65    pitch of..   the
02B840:  20 20 6E 6F 74 65 20 20 63 6F 6E 63 65 72 6E 65      note  concerne
02B850:  64 2C 20 20 73 65 63 6F 6E 64 6C 79 20 20 74 68    d,  secondly  th
02B860:  65 20 20 20 6E 65 77 20 20 70 72 65 73 73 75 72    e   new  pressur
02B870:  65 20 20 28 6F 72 20 20 76 6F 6C 75 6D 65 29 20    e  (or  volume) 
02B880:  20 76 61 6C 75 65 2E 0D 0A 20 20 20 4F 62 76 69     value...   Obvi
02B890:  6F 75 73 6C 79 20 77 69 74 68 20 73 6F 6D 65 20    ously with some 
02B8A0:  69 6E 73 74 72 75 6D 65 6E 74 73 2C 20 6C 69 6B    instruments, lik
02B8B0:  65 20 70 69 61 6E 6F 2C 20 20 79 6F 75 20 63 61    e piano,  you ca
02B8C0:  6E 6E 6F 74 20 63 68 61 6E 67 65 20 74 68 65 20    nnot change the 
02B8D0:  76 6F 6C 75 6D 65 0D 0A 20 20 20 6F 66 20 61 20    volume..   of a 
02B8E0:  6E 6F 74 65 20 6F 6E 63 65 20 74 68 65 20 20 6B    note once the  k
02B8F0:  65 79 20 20 68 61 73 20 20 62 65 65 6E 20 20 73    ey  has  been  s
02B900:  74 72 75 63 6B 2C 20 20 61 6E 64 20 20 73 6F 6D    truck,  and  som
02B910:  65 20 6B 65 79 62 6F 61 72 64 73 20 77 69 6C 6C    e keyboards will
02B920:  20 74 61 6B 65 0D 0A 20 20 20 61 63 63 6F 75 6E     take..   accoun
02B930:  74 20 6F 66 20 74 68 69 73 2E 20 20 20 4C 65 73    t of this.   Les
02B940:  73 20 20 65 78 70 65 6E 73 69 76 65 20 20 6D 6F    s  expensive  mo
02B950:  64 65 6C 73 20 20 6F 66 20 20 6B 65 79 62 6F 61    dels  of  keyboa
02B960:  72 64 20 20 64 6F 20 6E 6F 74 20 69 6D 70 6C 65    rd  do not imple
02B970:  6D 65 6E 74 0D 0A 20 20 20 61 66 74 65 72 74 6F    ment..   afterto
02B980:  75 63 68 20 61 74 20 61 6C 6C 2E 0D 0A 0D 0A 20    uch at all..... 
02B990:  20 20 53 74 61 74 75 73 20 62 79 74 65 20 26 44      Status byte &D
02B9A0:  78 2C 20 4F 76 65 72 61 6C 6C 20 4B 65 79 20 50    x, Overall Key P
02B9B0:  72 65 73 73 75 72 65 2C 20 77 6F 72 6B 73 20 69    ressure, works i
02B9C0:  6E 20 61 20 73 69 6D 69 6C 61 72 20 77 61 79 2C    n a similar way,
02B9D0:  20 62 75 74 20 61 70 70 6C 69 65 73 0D 0A 20 20     but applies..  
02B9E0:  20 74 6F 20 61 6C 6C 20 6E 6F 74 65 73 20 6F 6E     to all notes on
02B9F0:  20 20 74 68 65 20 20 63 68 61 6E 6E 65 6C 2E 20      the  channel. 
02BA00:  7C 53 45 4E 44 2C 26 38 31 2C 36 30 2C 30 20 28    |SEND,&81,60,0 (
02BA10:  66 6F 72 20 74 68 65 20 62 72 61 73 73 29 0D 0A    for the brass)..
02BA20:  0D 0A 20 20 20 4F 6E 20 61 20 70 6F 6C 79 70 68    ..   On a polyph
02BA30:  6F 6E 69 63 20 6B 65 79 62 6F 61 72 64 20 79 6F    onic keyboard yo
02BA40:  75 20 63 61 6E 20 68 61 76 65 20 20 73 65 76 65    u can have  seve
02BA50:  72 61 6C 20 6E 6F 74 65 73 20 73 6F 75 6E 64 69    ral notes soundi
02BA60:  6E 67 20 61 74 20 6F 6E 63 65 20 65 76 65 6E 0D    ng at once even.
02BA70:  0A 20 20 20 6F 6E 20 74 68 65 20 73 61 6D 65 20    .   on the same 
02BA80:  63 68 61 6E 6E 65 6C 2C 20 73 6F 20 79 6F 75 20    channel, so you 
02BA90:  20 63 6F 75 6C 64 20 20 73 74 61 72 74 20 20 73     could  start  s
02BAA0:  65 76 65 72 61 6C 20 76 69 6F 6C 69 6E 20 6E 6F    everal violin no
02BAB0:  74 65 73 20 61 74 20 6F 6E 63 65 20 6F 6E 0D 0A    tes at once on..
02BAC0:  20 20 20 63 68 61 6E 6E 65 6C 20 31 3A 0D 0A 0D       channel 1:...
02BAD0:  0A 20 20 20 20 20 7C 53 45 4E 44 2C 26 39 30 2C    .     |SEND,&90,
02BAE0:  36 30 2C 34 30 2C 26 39 30 2C 36 34 2C 34 30 2C    60,40,&90,64,40,
02BAF0:  26 39 30 2C 36 37 2C 34 30 0D 0A 0D 0A 20 20 20    &90,67,40....   
02BB00:  61 6E 64 20 74 68 65 6E 20 74 75 72 6E 20 74 68    and then turn th
02BB10:  65 6D 20 20 6F 66 66 20 20 6F 6E 65 20 20 62 79    em  off  one  by
02BB20:  20 20 6F 6E 65 20 20 77 69 74 68 20 20 74 68 65      one  with  the
02BB30:  20 20 61 70 70 72 6F 70 72 69 61 74 65 20 26 38      appropriate &8
02BB40:  30 20 4E 6F 74 65 20 4F 66 66 0D 0A 20 20 20 65    0 Note Off..   e
02BB50:  76 65 6E 74 73 2E 0D 0A 0D 0A 20 20 20 52 55 4E    vents.....   RUN
02BB60:  4E 49 4E 47 20 43 4F 4D 4D 45 4E 54 41 52 59 0D    NING COMMENTARY.
02BB70:  0A 20 20 20 42 65 66 6F 72 65 20 77 65 20 6C 6F    .   Before we lo
02BB80:  6F 6B 20 61 74 20 74 68 65 20 6F 74 68 65 72 20    ok at the other 
02BB90:  73 74 61 74 75 73 20 20 63 6F 64 65 73 2C 20 20    status  codes,  
02BBA0:  69 74 20 20 73 65 65 6D 73 20 6C 69 6B 65 20 61    it  seems like a
02BBB0:  20 67 6F 6F 64 20 70 6F 69 6E 74 20 74 6F 0D 0A     good point to..
02BBC0:  20 20 20 6D 65 6E 74 69 6F 6E 20 22 72 75 6E 6E       mention "runn
02BBD0:  69 6E 67 20 73 74 61 74 75 73 22 2E 20 20 57 65    ing status".  We
02BBE0:  20 68 61 76 65 20 20 6A 75 73 74 20 20 74 75 72     have  just  tur
02BBF0:  6E 65 64 20 20 6F 6E 20 20 74 68 72 65 65 20 6E    ned  on  three n
02BC00:  20 20 49 74 20 20 6F 6E 6C 79 20 20 6E 65 65 64      It  only  need
02BC10:  73 20 20 6F 6E 65 20 20 64 61 74 61 20 20 62 79    s  one  data  by
02BC20:  74 65 2C 20 74 68 65 20 6E 65 77 0D 0A 20 20 20    te, the new..   
02BC30:  70 72 65 73 73 75 72 65 20 76 61 6C 75 65 2E 0D    pressure value..
02BC40:  0A 0D 0A 20 20 20 55 52 41 4E 49 55 4D 20 4F 52    ...   URANIUM OR
02BC50:  45 0D 0A 20 20 20 50 69 74 63 68 20 42 65 6E 64    E..   Pitch Bend
02BC60:  2C 20 26 45 78 2C 20 69 73 20 66 6F 72 20 76 61    , &Ex, is for va
02BC70:  72 79 69 6E 67 20 74 68 65 20 20 70 69 74 63 68    rying the  pitch
02BC80:  20 20 6F 66 20 6E 6F 74 65 73 20 74 68 61 74 20      of notes that 
02BC90:  61 72 65 20 70 6C 61 79 69 6E 67 2E 20 20 49 74    are playing.  It
02BCA0:  0D 0A 20 20 20 69 73 20 66 6F 6C 6C 6F 77 65 64    ..   is followed
02BCB0:  20 62 79 20 74 77 6F 20 64 61 74 61 20 62 79 74     by two data byt
02BCC0:  65 73 20 77 68 69 63 68 20 61 72 65 20 70 75 74    es which are put
02BCD0:  20 74 6F 67 65 74 68 65 72 20 74 6F 20 67 69 76     together to giv
02BCE0:  65 20 61 20 22 6D 6F 64 75 6C 61 74 69 6F 6E 0D    e a "modulation.
02BCF0:  0A 20 20 20 76 61 6C 75 65 22 2C 20 72 61 6E 67    .   value", rang
02BD00:  69 6E 67 20 66 72 6F 6D 20 30 20 74 6F 20 31 36    ing from 0 to 16
02BD10:  33 38 33 2E 20 20 49 66 20 20 74 68 65 20 6D 6F    383.  If  the mo
02BD20:  64 75 6C 61 74 69 6F 6E 20 76 61 6C 75 65 20 77    dulation value w
02BD30:  61 73 20 6D 2C 20 74 68 65 6E 20 74 68 65 0D 0A    as m, then the..
02BD40:  20 20 20 74 77 6F 20 64 61 74 61 20 62 79 74 65       two data byte
02BD50:  73 20 61 72 65 20 63 61 6C 63 75 6C 61 74 65 64    s are calculated
02BD60:  20 61 73 20 66 6F 6C 6C 6F 77 73 3A 0D 0A 0D 0A     as follows:....
02BD70:  20 20 20 20 20 62 79 74 65 31 3D 6D 20 4D 4F 44         byte1=m MOD
02BD80:  20 31 32 38 0D 0A 20 20 20 20 20 62 79 74 65 32     128..     byte2
02BD90:  3D 6D 5C 31 32 38 0D 0A 0D 0A 20 20 20 41 20 6D    =m\128....   A m
02BDA0:  6F 64 75 6C 61 74 69 6F 6E 20 76 61 6C 75 65 20    odulation value 
02BDB0:  6F 66 20 38 31 39 32 20 20 69 73 20 20 74 68 65    of 8192  is  the
02BDC0:  20 20 63 65 6E 74 72 65 20 20 73 65 74 74 69 6E      centre  settin
02BDD0:  67 2C 20 77 68 69 63 68 20 6D 65 61 6E 73 20 74    g, which means t
02BDE0:  68 61 74 20 74 68 65 0D 0A 20 20 20 70 69 74 63    hat the..   pitc
02BDF0:  68 65 73 20 6F 66 20 74 68 65 20 20 6E 6F 74 65    hes of the  note
02BE00:  6F 74 65 73 2C 20 65 61 63 68 20 62 79 0D 0A 20    otes, each by.. 
02BE10:  20 20 73 65 6E 64 69 6E 67 20 74 68 65 20 73 74      sending the st
02BE20:  61 74 75 73 20 62 79 74 65 20 6F 66 20 26 39 30    atus byte of &90
02BE30:  20 20 66 6F 6C 6C 6F 77 65 64 20 20 62 79 20 20      followed  by  
02BE40:  74 77 6F 20 62 79 74 65 73 20 6F 66 20 64 61 74    two bytes of dat
02BE50:  61 2E 20 20 57 65 20 63 6F 75 6C 64 0D 0A 20 20    a.  We could..  
02BE60:  20 68 61 76 65 20 61 6C 73 6F 20 64 6F 6E 65 20     have also done 
02BE70:  69 74 20 6C 69 6B 65 20 74 68 69 73 3A 0D 0A 0D    it like this:...
02BE80:  0A 20 20 20 20 20 7C 53 45 4E 44 2C 26 39 30 2C    .     |SEND,&90,
02BE90:  36 30 2C 34 30 2C 36 34 2C 34 30 2C 36 37 2C 34    60,40,64,40,67,4
02BEA0:  30 0D 0A 0D 0A 20 20 20 41 66 74 65 72 20 74 68    0....   After th
02BEB0:  65 20 76 6F 6C 75 6D 65 20 62 79 74 65 20 6F 66    e volume byte of
02BEC0:  20 34 30 20 66 6F 72 20 74 68 65 20 20 66 69 72     40 for the  fir
02BED0:  73 74 20 6E 6F 74 65 2C 20 69 6E 73 74 65 61 64    st note, instead
02BEE0:  20 6F 66 20 74 68 65 20 26 39 30 20 73 74 61 74     of the &90 stat
02BEF0:  75 73 0D 0A 20 20 20 62 79 74 65 20 77 65 20 68    us..   byte we h
02BF00:  61 76 65 20 67 6F 6E 65 20 20 73 74 72 61 69 67    ave gone  straig
02BF10:  68 74 20 20 6F 6E 20 20 74 6F 20 20 74 68 65 20    ht  on  to  the 
02BF20:  20 70 69 74 63 68 20 20 64 61 74 61 20 20 66 6F     pitch  data  fo
02BF30:  72 20 20 74 68 65 20 6E 65 78 74 20 6E 6F 74 65    r  the next note
02BF40:  2E 0D 0A 20 20 20 42 65 63 61 75 73 65 20 64 61    ...   Because da
02BF50:  74 61 20 62 79 74 65 73 20 61 72 65 20 61 6C 6C    ta bytes are all
02BF60:  20 6C 65 73 73 20 74 68 61 6E 20 31 32 38 2C 20     less than 128, 
02BF70:  20 74 68 65 20 20 70 69 74 63 68 20 6F 66 20 36     the  pitch of 6
02BF80:  34 20 6D 75 73 74 20 62 65 20 61 20 64 61 74 61    4 must be a data
02BF90:  0D 0A 20 20 20 62 79 74 65 20 6E 6F 74 20 61 20    ..   byte not a 
02BFA0:  73 74 61 74 75 73 20 62 79 74 65 2C 20 73 6F 20    status byte, so 
02BFB0:  4D 49 44 49 20 20 65 71 75 69 70 6D 65 6E 74 20    MIDI  equipment 
02BFC0:  61 73 73 75 6D 65 73 20 74 68 61 74 20 74 68 65    assumes that the
02BFD0:  20 6D 69 73 73 69 6E 67 20 73 74 61 74 75 73 0D     missing status.
02BFE0:  0A 20 20 20 63 6F 64 65 20 69 73 20 74 68 65 20    .   code is the 
02BFF0:  73 61 6D 65 20 61 73 20 74 68 65 20 6C 61 73 74    same as the last
02C000:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
02C010:  25 00 01 00 02 09 4E E5 25 00 C4 02 00 00 00 02    %.....N.%.......
02C020:  25 00 C9 02 00 00 00 02 25 00 C5 02 00 00 00 02    %.......%.......
02C030:  25 00 C1 02 00 00 00 02 25 00 C6 02 00 00 00 02    %.......%.......
02C040:  25 00 C2 02 00 00 00 02 25 00 C7 02 00 00 00 02    %.......%.......
02C050:  25 00 C3 02 00 00 00 02 25 00 C8 02 00 00 00 02    %.......%.......
02C060:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02C070:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02C080:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02C090:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02C0A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02C0B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02C0C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02C0D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02C0E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02C0F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02C100:  32 32 30 20 44 41 54 41 20 39 44 32 38 46 36 32    220 DATA 9D28F62
02C110:  31 33 31 39 44 31 38 46 31 34 46 43 42 30 31 30    1319D18F14FCB010
02C120:  36 34 44 34 0D 0A 20 32 33 30 20 44 41 54 41 20    64D4.. 230 DATA 
02C130:  30 30 44 44 30 39 34 37 44 44 32 42 44 44 32 42    00DD0947DD2BDD2B
02C140:  44 44 37 45 30 30 43 35 35 35 44 0D 0A 20 32 34    DD7E00C555D.. 24
02C150:  30 20 44 41 54 41 20 43 44 32 32 39 44 43 31 31    0 DATA CD229DC11
02C160:  30 46 32 43 39 30 30 30 30 30 30 30 30 30 30 34    0F2C900000000004
02C170:  31 38 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 20 20    18............  
02C180:  20 4C 49 53 54 49 4E 47 20 32 0D 0A 0D 0A 20 20     LISTING 2....  
02C190:  20 3B 53 65 6E 64 20 76 65 72 73 69 6F 6E 20 32     ;Send version 2
02C1A0:  2E 30 30 2C 20 31 31 2F 35 2F 31 39 39 37 0D 0A    .00, 11/5/1997..
02C1B0:  20 20 20 3B 64 65 73 69 67 6E 65 64 20 74 6F 20       ;designed to 
02C1C0:  62 65 20 61 73 73 65 6D 62 6C 65 64 20 77 69 74    be assembled wit
02C1D0:  68 20 5A 4D 41 43 0D 0A 0D 0A 20 20 20 3B 69 6E    h ZMAC....   ;in
02C1E0:  69 74 69 61 6C 69 73 65 20 52 53 58 73 20 62 79    itialise RSXs by
02C1F0:  20 43 41 4C 4C 20 26 39 44 30 30 0D 0A 0D 0A 20     CALL &9D00.... 
02C200:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02C210:  20 20 41 4F 52 47 20 39 44 30 30 68 0D 0A 0D 0A      AORG 9D00h....
02C220:  20 20 20 69 6E 69 74 69 61 6C 69 73 65 3A 20 20       initialise:  
02C230:  20 20 20 4C 44 20 42 43 2C 72 73 78 74 61 62 0D       LD BC,rsxtab.
02C240:  0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    .               
02C250:  20 20 20 20 4C 44 20 48 4C 2C 77 72 6B 73 70 0D        LD HL,wrksp.
02C260:  0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    .               
02C270:  20 20 20 20 4A 50 20 30 42 43 44 31 68 0D 0A 20        JP 0BCD1h.. 
02C280:  20 20 72 73 78 74 61 62 3A 20 20 20 20 20 20 20      rsxtab:       
02C290:  20 20 44 45 46 57 20 6E 61 6D 65 73 0D 0A 20 20      DEFW names..  
02C2A0:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02C2B0:  20 4A 50 20 73 65 6E 64 0D 0A 20 20 20 20 20 20     JP send..      
02C2C0:  20 20 20 20 20 20 20 20 20 20 20 20 20 4A 50 20                 JP 
02C2D0:  63 68 6F 75 74 0D 0A 20 20 20 6E 61 6D 65 73 3A    chout..   names:
02C2E0:  20 20 20 20 20 20 20 20 20 20 44 45 46 42 20 22              DEFB "
02C2F0:  53 45 4E 22 2C 22 44 22 2B 31 32 38 0D 0A 20 20    SEN","D"+128..  
02C300:  0D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20    ..              
02C310:  20 20 20 20 20 4C 44 20 41 2C 28 49 58 2B 30 29         LD A,(IX+0)
02C320:  0D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20    ..              
02C330:  20 20 20 20 20 50 55 53 48 20 42 43 0D 0A 20 20         PUSH BC..  
02C340:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02C350:  20 43 41 4C 4C 20 6A 6D 70 6D 69 64 69 73 65 6E     CALL jmpmidisen
02C360:  64 0D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20    d..             
02C370:  20 20 20 20 20 20 50 4F 50 20 42 43 0D 0A 20 20          POP BC..  
02C380:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02C390:  20 44 4A 4E 5A 20 73 65 6E 64 6C 6F 6F 70 0D 0A     DJNZ sendloop..
02C3A0:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02C3B0:  20 20 20 52 45 54 0D 0A 1A 38 0D 0A 20 20 20 50       RET...8..   P
02C3C0:  52 4F 47 52 41 4D 4D 45 52 53 27 20 50 41 54 43    ROGRAMMERS' PATC
02C3D0:  48 20 31 31 0D 0A 20 20 20 42 79 20 4D 61 74 74    H 11..   By Matt
02C3E0:  68 65 77 20 50 68 69 6C 6C 69 70 73 0D 0A 0D 0A    hew Phillips....
02C3F0:  20 20 20 43 6F 6E 74 69 6E 75 69 6E 67 20 6F 75       Continuing ou
02C400:  20 20 20 20 20 20 20 20 20 20 20 20 20 4C 44 20                 LD 
02C410:  48 4C 2C 44 48 43 50 62 6C 6F 63 6B 73 0D 0A 20    HL,DHCPblocks.. 
02C420:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02C430:  20 20 4A 52 20 63 6F 70 79 62 6C 6F 63 6B 73 0D      JR copyblocks.
02C440:  0A 0D 0A 20 20 20 73 65 6E 64 3A 20 20 20 20 20    ...   send:     
02C450:  20 20 20 20 20 20 4C 44 20 43 2C 41 0D 0A 20 20          LD C,A..  
02C460:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02C470:  20 52 4C 43 20 43 0D 0A 20 20 20 20 20 20 20 20     RLC C..        
02C480:  20 20 20 20 20 20 20 20 20 20 20 4C 44 20 42 2C               LD B,
02C490:  30 0D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20    0..             
02C4A0:  20 20 20 20 20 20 41 44 44 20 49 58 2C 42 43 0D          ADD IX,BC.
02C4B0:  0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    .               
02C4C0:  20 20 20 20 4C 44 20 42 2C 41 0D 0A 20 20 20 73        LD B,A..   s
02C4D0:  65 6E 64 6C 6F 6F 70 3A 20 20 20 20 20 20 20 44    endloop:       D
02C4E0:  45 43 20 49 58 0D 0A 20 20 20 20 20 20 20 20 20    EC IX..         
02C4F0:  20 20 20 20 20 20 20 20 20 20 44 45 43 20 49 58              DEC IX
02C500:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02C510:  20 44 45 46 42 20 22 43 48 4F 55 22 2C 22 54 22     DEFB "CHOU","T"
02C520:  2B 31 32 38 0D 0A 20 20 20 20 20 20 20 20 20 20    +128..          
02C530:  20 20 20 20 20 20 20 20 20 44 45 46 42 20 30 0D             DEFB 0.
02C540:  0A 20 20 20 77 72 6B 73 70 3A 20 20 20 20 20 20    .   wrksp:      
02C550:  20 20 20 20 44 45 46 53 20 34 0D 0A 0D 0A 0D 0A        DEFS 4......
02C560:  20 20 20 6A 75 6D 70 62 6C 6F 63 6B 73 3A 0D 0A       jumpblocks:..
02C570:  20 20 20 6A 6D 70 72 65 73 65 74 3A 20 20 20 20       jmpreset:    
02C580:  20 20 20 4A 50 20 72 61 6D 72 65 73 65 74 0D 0A       JP ramreset..
02C590:  20 20 20 6A 6D 70 6D 69 64 69 73 65 6E 64 3A 20       jmpmidisend: 
02C5A0:  20 20 20 4A 50 20 72 61 6D 73 65 6E 64 0D 0A 0D       JP ramsend...
02C5B0:  0A 20 20 20 52 41 4D 62 6C 6F 63 6B 73 3A 20 20    .   RAMblocks:  
02C5C0:  20 20 20 20 4A 50 20 72 61 6D 72 65 73 65 74 0D        JP ramreset.
02C5D0:  0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    .               
02C5E0:  20 20 20 20 4A 50 20 72 61 6D 73 65 6E 64 0D 0A        JP ramsend..
02C5F0:  20 20 20 45 4D 52 62 6C 6F 63 6B 73 3A 20 20 20       EMRblocks:   
02C600:  20 20 20 4A 50 20 65 6D 72 72 65 73 65 74 0D 0A       JP emrreset..
02C610:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02C620:  20 20 20 4A 50 20 65 6D 72 73 65 6E 64 0D 0A 20       JP emrsend.. 
02C630:  20 20 44 48 43 50 62 6C 6F 63 6B 73 3A 20 20 20      DHCPblocks:   
02C640:  20 20 4A 50 20 64 68 63 70 72 65 73 65 74 0D 0A      JP dhcpreset..
02C650:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02C660:  20 20 20 4A 50 20 64 68 63 70 73 65 6E 64 0D 0A       JP dhcpsend..
02C670:  0D 0A 20 20 20 72 61 6D 72 65 73 65 74 3A 20 20    ..   ramreset:  
02C680:  20 20 20 20 20 4C 44 20 42 43 2C 30 46 38 45 43         LD BC,0F8EC
02C690:  68 0D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20    h..             
02C6A0:  20 20 20 20 20 20 4C 44 20 41 2C 33 0D 0A 20 20          LD A,3..  
02C6B0:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02C6C0:  20 4F 55 54 20 28 43 29 2C 41 0D 0A 20 20 20 20     OUT (C),A..    
02C6D0:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4C                   L
02C6E0:  44 20 41 2C 31 35 68 0D 0A 20 20 20 20 20 20 20    D A,15h..       
02C6F0:  20 20 20 20 20 20 20 20 20 20 20 20 4F 55 54 20                OUT 
02C700:  73 20 20 77 69 6C 6C 20 20 6E 6F 74 20 20 62 65    s  will  not  be
02C710:  20 20 61 6C 74 65 72 65 64 2E 20 20 20 47 69 76      altered.   Giv
02C720:  69 6E 67 20 20 73 6D 61 6C 6C 65 72 20 6F 72 20    ing  smaller or 
02C730:  6C 61 72 67 65 72 0D 0A 20 20 20 6D 6F 64 75 6C    larger..   modul
02C740:  61 74 69 6F 6E 20 76 61 6C 75 65 73 20 73 6C 69    ation values sli
02C750:  67 68 74 6C 79 20 63 68 61 6E 67 65 73 20 74 68    ghtly changes th
02C760:  65 20 70 69 74 63 68 20 20 6F 66 20 74 68 65 20    e pitch  of the 
02C770:  6E 6F 74 65 73 20 70 6C 61 79 69 6E 67 20 6F 6E    notes playing on
02C780:  20 74 68 61 74 0D 0A 20 20 20 63 68 61 6E 6E 65     that..   channe
02C790:  6C 2E 20 20 59 6F 75 20 77 6F 75 6C 64 20 68 61    l.  You would ha
02C7A0:  76 65 20 74 6F 20 73 65 6E 64 20 20 71 75 69 74    ve to send  quit
02C7B0:  65 20 20 61 20 20 6C 6F 74 20 20 6F 66 20 70 69    e  a  lot  of pi
02C7C0:  74 63 68 20 62 65 6E 64 20 6D 65 73 73 61 67 65    tch bend message
02C7D0:  73 20 74 6F 0D 0A 20 20 20 61 63 68 69 65 76 65    s to..   achieve
02C7E0:  20 61 6E 79 20 75 73 65 66 75 6C 20 65 66 66 65     any useful effe
02C7F0:  63 74 20 6C 69 6B 65 20 76 69 62 72 61 74 6F 2E    ct like vibrato.
02C800:  0D 0A 0D 0A 20 20 20 48 45 52 45 20 57 45 20 41    ....   HERE WE A
02C810:  52 45 20 41 47 41 49 4E 0D 0A 20 20 20 59 65 73    RE AGAIN..   Yes
02C820:  2C 20 77 65 27 72 65 20 64 72 61 77 69 6E 67 20    , we're drawing 
02C830:  74 6F 20 74 68 65 20 65 6E 64 20 6F 66 20 61 6E    to the end of an
02C840:  6F 74 68 65 72 20 61 72 74 69 63 6C 65 2E 20 20    other article.  
02C850:  57 65 20 68 61 76 65 20 6E 6F 74 20 79 65 74 20    We have not yet 
02C860:  63 6F 76 65 72 65 64 0D 0A 20 20 20 61 6C 6C 20    covered..   all 
02C870:  74 68 65 20 4D 49 44 49 20 73 74 61 74 75 73 20    the MIDI status 
02C880:  63 6F 64 65 73 2C 20 62 75 74 20 74 68 65 20 6D    codes, but the m
02C890:  6F 73 74 20 69 6D 70 6F 72 74 61 6E 74 20 6F 6E    ost important on
02C8A0:  65 73 20 61 72 65 20 6F 75 74 20 6F 66 20 74 68    es are out of th
02C8B0:  65 20 77 61 79 2E 0D 0A 20 20 20 49 66 20 79 6F    e way...   If yo
02C8C0:  75 20 61 72 65 20 72 65 61 6C 6C 79 20 20 67 65    u are really  ge
02C8D0:  74 74 69 6E 67 20 20 69 6E 74 6F 20 20 74 68 69    tting  into  thi
02C8E0:  73 2C 20 20 77 68 79 20 20 6E 6F 74 20 20 70 6F    s,  why  not  po
02C8F0:  70 20 20 64 6F 77 6E 20 74 6F 20 79 6F 75 72 20    p  down to your 
02C900:  28 43 29 2C 41 0D 0A 20 20 20 20 20 20 20 20 20    (C),A..         
02C910:  20 20 20 20 20 20 20 20 20 20 52 45 54 0D 0A 0D              RET...
02C920:  0A 20 20 20 65 6D 72 72 65 73 65 74 3A 20 20 20    .   emrreset:   
02C930:  20 20 20 20 4C 44 20 42 43 2C 30 46 38 46 32 68        LD BC,0F8F2h
02C940:  0D 0A 20 20 20 65 68 72 63 6F 6D 6D 6F 6E 3A 20    ..   ehrcommon: 
02C950:  20 20 20 20 20 4C 44 20 41 2C 33 0D 0A 20 20 20         LD A,3..   
02C960:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02C970:  4F 55 54 20 28 43 29 2C 41 0D 0A 20 20 20 20 20    OUT (C),A..     
02C980:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 4C 44                  LD
02C990:  20 41 2C 31 36 68 0D 0A 20 20 20 20 20 20 20 20     A,16h..        
02C9A0:  20 20 20 20 20 20 20 20 20 20 20 4F 55 54 20 28               OUT (
02C9B0:  43 29 2C 41 0D 0A 20 20 20 20 20 20 20 20 20 20    C),A..          
02C9C0:  20 20 20 20 20 20 20 20 20 52 45 54 0D 0A 0D 0A             RET....
02C9D0:  20 20 20 64 68 63 70 72 65 73 65 74 3A 20 20 20       dhcpreset:   
02C9E0:  20 20 20 4C 44 20 42 43 2C 30 46 38 45 30 68 0D       LD BC,0F8E0h.
02C9F0:  0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    .               
02CA00:  20 20 20 20 4A 52 20 65 68 72 63 6F 6D 6D 6F 6E        JR ehrcommon
02CA10:  0D 0A 0D 0A 20 20 20 72 61 6D 73 65 6E 64 3A 20    ....   ramsend: 
02CA20:  20 20 20 20 20 20 20 4C 44 20 42 43 2C 30 46 38           LD BC,0F8
02CA30:  45 45 68 0D 0A 20 20 20 20 20 20 20 20 20 20 20    EEh..           
02CA40:  20 20 20 20 20 20 20 20 50 55 53 48 20 41 46 0D            PUSH AF.
02CA50:  0A 20 20 20 72 61 6D 73 6C 70 3A 20 20 20 20 20    .   ramslp:     
02CA60:  20 20 20 20 49 4E 20 41 2C 28 43 29 0D 0A 20 20        IN A,(C)..  
02CA70:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02CA80:  20 41 4E 44 20 32 0D 0A 20 20 20 20 20 20 20 20     AND 2..        
02CA90:  20 20 20 20 20 20 20 20 20 20 20 4A 52 20 5A 2C               JR Z,
02CAA0:  72 61 6D 73 6C 70 0D 0A 20 20 20 20 20 20 20 20    ramslp..        
02CAB0:  20 20 20 20 20 20 20 20 20 20 20 50 4F 50 20 41               POP A
02CAC0:  46 0D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20    F..             
02CAD0:  20 20 20 20 20 20 44 45 43 20 43 0D 0A 20 20 20          DEC C..   
02CAE0:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02CAF0:  4F 55 54 20 28 43 29 2C 41 0D 0A 20 20 20 20 20    OUT (C),A..     
02CB00:  6C 6F 63 61 6C 0D 0A 20 20 20 6C 69 62 72 61 72    local..   librar
02CB10:  79 20 61 6E 64 20 73 65 65 20 77 68 61 74 20 62    y and see what b
02CB20:  6F 6F 6B 73 20 74 68 65 79 20 20 68 61 76 65 20    ooks they  have 
02CB30:  20 6F 6E 20 20 4D 49 44 49 3F 20 20 20 49 20 77     on  MIDI?   I w
02CB40:  69 6C 6C 20 74 72 79 20 74 6F 20 63 6F 6D 70 69    ill try to compi
02CB50:  6C 65 20 61 0D 0A 20 20 20 6C 69 73 74 20 6F 66    le a..   list of
02CB60:  20 67 6F 6F 64 20 6F 6E 65 73 20 74 6F 20 6C 6F     good ones to lo
02CB70:  6F 6B 20 6F 75 74 20 66 6F 72 20 74 6F 20 62 65    ok out for to be
02CB80:  20 70 72 69 6E 74 65 64 20 77 69 74 68 20 6E 65     printed with ne
02CB90:  78 74 20 6D 6F 6E 74 68 27 73 20 61 72 74 69 63    xt month's artic
02CBA0:  6C 65 2E 0D 0A 0D 0A 0D 0A 0D 0A 20 4C 49 53 54    le......... LIST
02CBB0:  49 4E 47 20 31 0D 0A 0D 0A 20 31 30 20 53 59 4D    ING 1.... 10 SYM
02CBC0:  42 4F 4C 20 41 46 54 45 52 20 32 35 36 3A 4D 45    BOL AFTER 256:ME
02CBD0:  4D 4F 52 59 20 26 39 43 46 46 0D 0A 20 32 30 20    MORY &9CFF.. 20 
02CBE0:  52 45 53 54 4F 52 45 20 31 30 30 3A 65 72 3D 30    RESTORE 100:er=0
02CBF0:  3A 61 64 64 72 3D 48 49 4D 45 4D 2B 31 0D 0A 20    :addr=HIMEM+1.. 
02CC00:  33 30 20 46 4F 52 20 69 25 3D 30 20 54 4F 20 31    30 FOR i%=0 TO 1
02CC10:  34 3A 52 45 41 44 20 63 6F 64 24 3A 63 68 6B 25    4:READ cod$:chk%
02CC20:  3D 30 0D 0A 20 34 30 20 46 4F 52 20 6A 25 3D 30    =0.. 40 FOR j%=0
02CC30:  20 54 4F 20 31 31 3A 61 25 3D 56 41 4C 28 22 26     TO 11:a%=VAL("&
02CC40:  22 2B 4D 49 44 24 28 63 6F 64 24 2C 6A 25 2A 32    "+MID$(cod$,j%*2
02CC50:  2B 31 2C 32 29 29 0D 0A 20 35 30 20 50 4F 4B 45    +1,2)).. 50 POKE
02CC60:  20 61 64 64 72 2C 61 25 3A 63 68 6B 25 3D 63 68     addr,a%:chk%=ch
02CC70:  6B 25 2B 61 25 3A 61 64 64 72 3D 61 64 64 72 2B    k%+a%:addr=addr+
02CC80:  31 3A 4E 45 58 54 0D 0A 20 36 30 20 49 46 20 63    1:NEXT.. 60 IF c
02CC90:  68 6B 25 3C 3E 56 41 4C 28 22 26 22 2B 52 49 47    hk%<>VAL("&"+RIG
02CCA0:  48 54 24 28 63 6F 64 24 2C 33 29 29 20 54 48 45    HT$(cod$,3)) THE
02CCB0:  4E 20 50 52 49 4E 54 22 45 72 72 6F 72 20 69 6E    N PRINT"Error in
02CCC0:  20 6C 69 6E 65 22 3B 69 25 2A 31 30 2B 31 30 30     line";i%*10+100
02CCD0:  3A 65 72 3D 2D 31 0D 0A 20 37 30 20 4E 45 58 54    :er=-1.. 70 NEXT
02CCE0:  3A 49 46 20 65 72 20 54 48 45 4E 20 45 4E 44 0D    :IF er THEN END.
02CCF0:  0A 20 38 30 20 43 41 4C 4C 20 48 49 4D 45 4D 2B    . 80 CALL HIMEM+
02CD00:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 45                  RE
02CD10:  54 0D 0A 0D 0A 20 20 20 65 6D 72 73 65 6E 64 3A    T....   emrsend:
02CD20:  20 20 20 20 20 20 20 20 4C 44 20 42 43 2C 30 46            LD BC,0F
02CD30:  38 46 32 68 0D 0A 20 20 20 65 68 73 63 6F 6D 6D    8F2h..   ehscomm
02CD40:  6F 6E 3A 20 20 20 20 20 20 50 55 53 48 20 41 46    on:      PUSH AF
02CD50:  0D 0A 20 20 20 65 6D 72 73 6C 70 3A 20 20 20 20    ..   emrslp:    
02CD60:  20 20 20 20 20 49 4E 20 41 2C 28 43 29 0D 0A 20         IN A,(C).. 
02CD70:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02CD80:  20 20 41 4E 44 20 32 0D 0A 20 20 20 20 20 20 20      AND 2..       
02CD90:  20 20 20 20 20 20 20 20 20 20 20 20 4A 52 20 5A                JR Z
02CDA0:  2C 65 6D 72 73 6C 70 0D 0A 20 20 20 20 20 20 20    ,emrslp..       
02CDB0:  20 20 20 20 20 20 20 20 20 20 20 20 50 4F 50 20                POP 
02CDC0:  41 46 0D 0A 20 20 20 20 20 20 20 20 20 20 20 20    AF..            
02CDD0:  20 20 20 20 20 20 20 49 4E 43 20 43 0D 0A 20 20           INC C..  
02CDE0:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02CDF0:  20 4F 55 54 20 28 43 29 2C 41 0D 0A 20 20 20 20     OUT (C),A..    
02CE00:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                   R
02CE10:  45 54 0D 0A 0D 0A 20 20 20 64 68 63 70 73 65 6E    ET....   dhcpsen
02CE20:  64 3A 20 20 20 20 20 20 20 4C 44 20 42 43 2C 30    d:       LD BC,0
02CE30:  46 38 45 30 68 0D 0A 20 20 20 20 20 20 20 20 20    F8E0h..         
02CE40:  20 20 20 20 20 20 20 20 20 20 4A 52 20 65 68 73              JR ehs
02CE50:  63 6F 6D 6D 6F 6E 0D 0A 0D 0A 20 20 20 63 68 6F    common....   cho
02CE60:  75 74 3A 20 20 20 20 20 20 20 20 20 20 43 50 20    ut:          CP 
02CE70:  31 0D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20    1..             
02CE80:  20 20 20 20 20 20 52 45 54 20 4E 5A 0D 0A 20 20          RET NZ..  
02CE90:  20 63 68 6F 75 74 6A 70 32 3A 20 20 20 20 20 20     choutjp2:      
02CEA0:  20 4C 44 20 41 2C 28 49 58 2B 30 29 0D 0A 20 20     LD A,(IX+0)..  
02CEB0:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02CEC0:  20 4C 44 20 44 45 2C 6A 75 6D 70 62 6C 6F 63 6B     LD DE,jumpblock
02CED0:  73 0D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20    s..             
02CEE0:  20 20 20 20 20 20 4C 44 20 42 43 2C 45 4D 52 62          LD BC,EMRb
02CEF0:  6C 6F 63 6B 73 2D 52 41 4D 62 6C 6F 63 6B 73 0D    locks-RAMblocks.
02CF00:  31 0D 0A 20 39 30 20 50 52 49 4E 54 22 7C 43 48    1.. 90 PRINT"|CH
02CF10:  4F 55 54 20 61 6E 64 20 7C 53 45 4E 44 20 69 6E    OUT and |SEND in
02CF20:  73 74 61 6C 6C 65 64 2E 22 0D 0A 20 31 30 30 20    stalled.".. 100 
02CF30:  44 41 54 41 20 30 31 30 39 39 44 32 31 31 42 39    DATA 01099D211B9
02CF40:  44 43 33 44 31 42 43 31 31 39 44 43 33 35 34 31    DC3D1BC119DC3541
02CF50:  0D 0A 20 31 31 30 20 44 41 54 41 20 39 38 39 44    .. 110 DATA 989D
02CF60:  43 33 37 37 39 44 35 33 34 35 34 45 43 34 34 33    C3779D53454EC443
02CF70:  34 38 34 46 35 39 30 0D 0A 20 31 32 30 20 44 41    484F590.. 120 DA
02CF80:  54 41 20 35 35 44 34 30 30 30 30 30 30 30 30 30    TA 55D4000000000
02CF90:  30 43 33 33 37 39 44 43 33 35 34 33 44 37 0D 0A    0C3379DC3543D7..
02CFA0:  20 31 33 30 20 44 41 54 41 20 39 44 43 33 33 37     130 DATA 9DC337
02CFB0:  39 44 43 33 35 34 39 44 43 33 34 33 39 44 43 33    9DC3549DC3439DC3
02CFC0:  36 33 36 42 31 0D 0A 20 31 34 30 20 44 41 54 41    636B1.. 140 DATA
02CFD0:  20 39 44 43 33 34 46 39 44 43 33 37 32 39 44 30     9DC34F9DC3729D0
02CFE0:  31 45 43 46 38 33 45 30 33 36 34 34 0D 0A 20 31    1ECF83E03644.. 1
02CFF0:  35 30 20 44 41 54 41 20 45 44 37 39 33 45 31 35    50 DATA ED793E15
02D000:  45 44 37 39 43 39 30 31 46 32 46 38 33 45 30 33    ED79C901F2F83E03
02D010:  36 31 34 0D 0A 20 31 36 30 20 44 41 54 41 20 45    614.. 160 DATA E
02D020:  44 37 39 33 45 31 36 45 44 37 39 43 39 30 31 45    D793E16ED79C901E
02D030:  30 46 38 31 38 46 32 36 43 43 0D 0A 20 31 37 30    0F818F26CC.. 170
02D040:  20 44 41 54 41 20 30 31 45 45 46 38 46 35 45 44     DATA 01EEF8F5ED
02D050:  37 38 45 36 30 32 32 38 46 41 46 31 30 44 37 34    78E60228FAF10D74
02D060:  39 0D 0A 20 31 38 30 20 44 41 54 41 20 45 44 37    9.. 180 DATA ED7
02D070:  39 43 39 30 31 46 32 46 38 46 35 45 44 37 38 45    9C901F2F8F5ED78E
02D080:  36 30 32 32 38 37 38 34 0D 0A 20 31 39 30 20 44    60228784.. 190 D
02D090:  41 54 41 20 46 41 46 31 30 43 45 44 37 39 43 39    ATA FAF10CED79C9
02D0A0:  30 31 45 30 46 38 31 38 45 46 46 45 38 30 34 0D    01E0F818EFFE804.
02D0B0:  0A 20 32 30 30 20 44 41 54 41 20 30 31 43 30 44    . 200 DATA 01C0D
02D0C0:  44 37 45 30 30 31 31 31 46 39 44 30 31 30 36 30    D7E00111F9D01060
02D0D0:  30 32 31 33 31 31 0D 0A 20 32 31 30 20 44 41 54    021311.. 210 DAT
02D0E0:  41 20 32 35 39 44 42 37 32 30 30 34 45 44 42 30    A 259DB72004EDB0
02D0F0:  31 38 39 32 33 44 32 31 32 42 34 36 44 0D 0A 20    18923D212B46D.. 
02D100:  0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    .               
02D110:  20 20 20 20 4C 44 20 48 4C 2C 52 41 4D 62 6C 6F        LD HL,RAMblo
02D120:  63 6B 73 0D 0A 20 20 20 20 20 20 20 20 20 20 20    cks..           
02D130:  20 20 20 20 20 20 20 20 4F 52 20 41 0D 0A 20 20            OR A..  
02D140:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02D150:  20 4A 52 20 4E 5A 2C 6E 6F 74 52 41 4D 0D 0A 20     JR NZ,notRAM.. 
02D160:  20 20 63 6F 70 79 62 6C 6F 63 6B 73 3A 20 20 20      copyblocks:   
02D170:  20 20 4C 44 49 52 0D 0A 20 20 20 20 20 20 20 20      LDIR..        
02D180:  20 20 20 20 20 20 20 20 20 20 20 4A 52 20 6A 6D               JR jm
02D190:  70 72 65 73 65 74 0D 0A 20 20 20 6E 6F 74 52 41    preset..   notRA
02D1A0:  4D 3A 20 20 20 20 20 20 20 20 20 44 45 43 20 41    M:         DEC A
02D1B0:  0D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20    ..              
02D1C0:  20 20 20 20 20 4C 44 20 48 4C 2C 45 4D 52 62 6C         LD HL,EMRbl
02D1D0:  6F 63 6B 73 0D 0A 20 20 20 20 20 20 20 20 20 20    ocks..          
02D1E0:  20 20 20 20 20 20 20 20 20 4A 52 20 5A 2C 63 6F             JR Z,co
02D1F0:  70 79 62 6C 6F 63 6B 73 0D 0A 20 20 20 20 20 20    pyblocks..      
02D200:  20 20 20 20 20 20 20 20 20 20 20 20 20 4C 44 20                 LD 
02D210:  48 4C 2C 44 48 43 50 62 6C 6F 63 6B 73 0D 0A 20    HL,DHCPblocks.. 
02D220:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02D230:  20 20 4A 52 20 63 6F 70 79 62 6C 6F 63 6B 73 0D      JR copyblocks.
02D240:  0A 0D 0A 20 20 20 73 65 6E 64 3A 20 20 20 20 20    ...   send:     
02D250:  20 20 20 20 20 20 4C 44 20 43 2C 41 0D 0A 20 20          LD C,A..  
02D260:  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
02D270:  20 52 4C 43 20 43 0D 0A 20 20 20 20 20 20 20 20     RLC C..        
02D280:  20 20 20 20 20 20 20 20 20 20 20 4C 44 20 42 2C               LD B,
02D290:  30 0D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20    0..             
02D2A0:  20 20 20 20 20 20 41 44 44 20 49 58 2C 42 43 0D          ADD IX,BC.
02D2B0:  0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    .               
02D2C0:  20 20 20 20 4C 44 20 42 2C 41 0D 0A 20 20 20 73        LD B,A..   s
02D2D0:  65 6E 64 6C 6F 6F 70 3A 20 20 20 20 20 20 20 44    endloop:       D
02D2E0:  45 43 20 49 58 0D 0A 20 20 20 20 20 20 20 20 20    EC IX..         
02D2F0:  20 20 20 20 20 20 20 20 20 20 44 45 43 20 49 58              DEC IX
02D300:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
02D310:  26 00 01 00 02 09 4E E5 26 00 C7 02 00 00 00 02    &.....N.&.......
02D320:  26 00 C3 02 00 00 00 02 26 00 C8 02 00 00 00 02    &.......&.......
02D330:  26 00 C4 02 00 00 00 02 26 00 C9 02 00 00 00 02    &.......&.......
02D340:  26 00 C5 02 00 00 00 02 26 00 C1 02 00 00 00 02    &.......&.......
02D350:  26 00 C6 02 00 00 00 02 26 00 C2 02 00 00 00 02    &.......&.......
02D360:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02D370:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02D380:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02D390:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02D3A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02D3B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02D3C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02D3D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02D3E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02D3F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02D400:  00 53 45 4E 44 20 20 20 20 42 41 53 00 00 00 00    .SEND    BAS....
02D410:  00 00 00 00 00 70 01 00 4C 03 00 00 00 00 00 00    .....p..L.......
02D420:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02D430:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02D440:  4C 03 00 8F 03 30 36 34 44 34 00 22 00 E6 00 8C    L....064D4."....
02D450:  20 30 30 44 44 30 39 34 37 44 44 32 42 44 44 32     00DD0947DD2BDD2
02D460:  42 44 44 37 45 30 30 43 35 35 35 44 00 22 00 F0    BDD7E00C555D."..
02D470:  00 8C 20 43 44 32 32 39 44 43 31 31 30 46 32 43    .. CD229DC110F2C
02D480:  12 00 0A 00 CF 20 80 20 1A 00 01 01 AA 20 1C FF    ..... . ..... ..
02D490:  9C 00 1F 00 14 00 C7 20 1E 64 00 01 0D 00 00 65    ....... .d.....e
02D4A0:  F2 EF 0E 01 0D 00 00 61 64 64 F2 EF FF 42 F4 0F    .......add...B..
02D4B0:  00 24 00 1E 00 9E 20 02 00 00 E9 EF 0E 20 EC 20    .$.... ...... . 
02D4C0:  19 0E 01 C3 20 03 00 00 63 6F E4 01 02 00 00 63    .... ...co.....c
02D4D0:  68 EB EF 0E 00 34 00 28 00 9E 20 02 00 00 EA EF    h....4.(.. .....
02D4E0:  0E 20 EC 20 19 0B 01 02 00 00 E1 EF FF 1D 28 22    . . ..........("
02D4F0:  26 22 F4 AC 28 03 00 00 63 6F E4 2C 02 00 00 EA    &"..(...co.,....
02D500:  F6 10 F4 0F 2C 10 29 29 00 3A 00 32 00 BE 20 0D    ....,.)).:.2.. .
02D510:  00 00 61 64 64 F2 2C 02 00 00 E1 01 02 00 00 63    ..add.,........c
02D520:  68 EB EF 02 00 00 63 68 EB F4 02 00 00 E1 01 0D    h.....ch........
02D530:  00 00 61 64 64 F2 EF 0D 00 00 61 64 64 F2 F4 0F    ..add.....add...
02D540:  01 B0 00 49 00 3C 00 A1 20 02 00 00 63 68 EB F2    ...I.<.. ...ch..
02D550:  FF 1D 28 22 26 22 F4 FF 79 28 03 00 00 63 6F E4    ..("&"..y(...co.
02D560:  2C 11 29 29 20 EB 20 BF 22 45 72 72 6F 72 20 69    ,.)) . ."Error i
02D570:  6E 20 6C 69 6E 65 22 3B 02 00 00 E9 F6 19 0A F4    n line";........
02D580:  19 64 01 0D 00 00 65 F2 EF F5 0F 00 12 00 46 00    .d....e.......F.
02D590:  B0 01 A1 20 0D 00 00 65 F2 20 EB 20 98 00 0B 00    ... ...e. . ....
02D5A0:  50 00 83 20 FF 42 F4 0F 00 23 00 5A 00 BF 22 7C    P.. .B...#.Z.."|
02D5B0:  43 48 4F 55 54 20 61 6E 64 20 7C 53 45 4E 44 20    CHOUT and |SEND 
02D5C0:  69 6E 73 74 61 6C 6C 65 64 2E 22 00 22 00 64 00    installed.".".d.
02D5D0:  8C 20 30 31 30 39 39 44 32 31 31 42 39 44 43 33    . 01099D211B9DC3
02D5E0:  44 31 42 43 31 31 39 44 43 33 35 34 31 00 22 00    D1BC119DC3541.".
02D5F0:  6E 00 8C 20 39 38 39 44 43 33 37 37 39 44 35 33    n.. 989DC3779D53
02D600:  58 2B 30 29 0D 0A 09 09 4C 44 20 44 45 2C 6A 75    X+0)....LD DE,ju
02D610:  6D 70 62 6C 6F 63 6B 73 0D 0A 09 09 4C 44 20 42    mpblocks....LD B
02D620:  43 2C 45 4D 52 62 6C 6F 63 6B 73 2D 52 41 4D 62    C,EMRblocks-RAMb
02D630:  6C 6F 63 6B 73 0D 0A 09 09 4C 44 20 48 4C 2C 52    locks....LD HL,R
02D640:  41 4D 62 6C 6F 63 6B 73 0D 0A 09 09 4F 52 20 41    AMblocks....OR A
02D650:  0D 0A 09 09 4A 52 20 4E 5A 2C 6E 6F 74 52 41 4D    ....JR NZ,notRAM
02D660:  0D 0A 63 6F 70 79 62 6C 6F 63 6B 73 3A 09 4C 44    ..copyblocks:.LD
02D670:  49 52 0D 0A 09 09 4A 52 20 6A 6D 70 72 65 73 65    IR....JR jmprese
02D680:  74 0D 0A 6E 6F 74 52 41 4D 3A 09 09 44 45 43 20    t..notRAM:..DEC 
02D690:  41 0D 0A 09 09 4C 44 20 48 4C 2C 45 4D 52 62 6C    A....LD HL,EMRbl
02D6A0:  6F 63 6B 73 0D 0A 09 09 4A 52 20 5A 2C 63 6F 70    ocks....JR Z,cop
02D6B0:  79 62 6C 6F 63 6B 73 0D 0A 09 09 4C 44 20 48 4C    yblocks....LD HL
02D6C0:  2C 44 48 43 50 62 6C 6F 63 6B 73 0D 0A 09 09 4A    ,DHCPblocks....J
02D6D0:  52 20 63 6F 70 79 62 6C 6F 63 6B 73 0D 0A 0D 0A    R copyblocks....
02D6E0:  73 65 6E 64 3A 09 09 4C 44 20 43 2C 41 0D 0A 09    send:..LD C,A...
02D6F0:  09 52 4C 43 20 43 0D 0A 09 09 4C 44 20 42 2C 30    .RLC C....LD B,0
02D700:  0D 0A 09 09 41 44 44 20 49 58 2C 42 43 0D 0A 09    ....ADD IX,BC...
02D710:  09 4C 44 20 42 2C 41 0D 0A 73 65 6E 64 6C 6F 6F    .LD B,A..sendloo
02D720:  70 3A 09 44 45 43 20 49 58 0D 0A 09 09 44 45 43    p:.DEC IX....DEC
02D730:  20 49 58 0D 0A 09 09 4C 44 20 41 2C 28 49 58 2B     IX....LD A,(IX+
02D740:  30 29 0D 0A 09 09 50 55 53 48 20 42 43 0D 0A 09    0)....PUSH BC...
02D750:  09 43 41 4C 4C 20 6A 6D 70 6D 69 64 69 73 65 6E    .CALL jmpmidisen
02D760:  64 0D 0A 09 09 50 4F 50 20 42 43 0D 0A 09 09 44    d....POP BC....D
02D770:  4A 4E 5A 20 73 65 6E 64 6C 6F 6F 70 0D 0A 09 09    JNZ sendloop....
02D780:  52 45 54 0D 0A 1A 20 20 20 20 24 24 24 FF 00 FF    RET...    $$$...
02D790:  30 30 2C 20 31 31 2F 35 2F 31 39 39 37 0D 0A 3B    00, 11/5/1997..;
02D7A0:  64 65 73 69 67 6E 65 64 20 74 6F 20 62 65 20 61    designed to be a
02D7B0:  73 73 65 6D 62 6C 65 64 20 77 69 74 68 20 5A 4D    ssembled with ZM
02D7C0:  41 43 0D 0A 0D 0A 3B 69 6E 69 74 69 61 6C 69 73    AC....;initialis
02D7D0:  65 20 52 53 58 73 20 62 79 20 43 41 4C 4C 20 26    e RSXs by CALL &
02D7E0:  39 44 30 30 0D 0A 0D 0A 09 09 41 4F 52 47 20 39    9D00......AORG 9
02D7F0:  44 30 30 68 0D 0A 0D 0A 69 6E 69 74 69 61 6C 69    D00h....initiali
02D800:  34 35 34 45 43 34 34 33 34 38 34 46 35 39 30 00    454EC443484F590.
02D810:  22 00 78 00 8C 20 35 35 44 34 30 30 30 30 30 30    ".x.. 55D4000000
02D820:  30 30 30 30 43 33 33 37 39 44 43 33 35 34 33 44    0000C3379DC3543D
02D830:  37 00 22 00 82 00 8C 20 39 44 43 33 33 37 39 44    7.".... 9DC3379D
02D840:  43 33 35 34 39 44 43 33 34 33 39 44 43 33 36 33    C3549DC3439DC363
02D850:  36 42 31 00 22 00 8C 00 8C 20 39 44 43 33 34 46    6B1.".... 9DC34F
02D860:  39 44 43 33 37 32 39 44 30 31 45 43 46 38 33 45    9DC3729D01ECF83E
02D870:  30 33 36 34 34 00 22 00 96 00 8C 20 45 44 37 39    03644.".... ED79
02D880:  33 45 31 35 45 44 37 39 43 39 30 31 46 32 46 38    3E15ED79C901F2F8
02D890:  33 45 30 33 36 31 34 00 22 00 A0 00 8C 20 45 44    3E03614.".... ED
02D8A0:  37 39 33 45 31 36 45 44 37 39 43 39 30 31 45 30    793E16ED79C901E0
02D8B0:  46 38 31 38 46 32 36 43 43 00 22 00 AA 00 8C 20    F818F26CC.".... 
02D8C0:  30 31 45 45 46 38 46 35 45 44 37 38 45 36 30 32    01EEF8F5ED78E602
02D8D0:  32 38 46 41 46 31 30 44 37 34 39 00 22 00 B4 00    28FAF10D749."...
02D8E0:  8C 20 45 44 37 39 43 39 30 31 46 32 46 38 46 35    . ED79C901F2F8F5
02D8F0:  45 44 37 38 45 36 30 32 32 38 37 38 34 00 22 00    ED78E60228784.".
02D900:  BE 00 8C 20 46 41 46 31 30 43 45 44 37 39 43 39    ... FAF10CED79C9
02D910:  30 31 45 30 46 38 31 38 45 46 46 45 38 30 34 00    01E0F818EFFE804.
02D920:  22 00 C8 00 8C 20 30 31 43 30 44 44 37 45 30 30    ".... 01C0DD7E00
02D930:  31 31 31 46 39 44 30 31 30 36 30 30 32 31 33 31    111F9D0106002131
02D940:  31 00 22 00 D2 00 8C 20 32 35 39 44 42 37 32 30    1.".... 259DB720
02D950:  30 34 45 44 42 30 31 38 39 32 33 44 32 31 32 42    04EDB018923D212B
02D960:  34 36 44 00 22 00 DC 00 8C 20 39 44 32 38 46 36    46D.".... 9D28F6
02D970:  32 31 33 31 39 44 31 38 46 31 34 46 43 42 30 31    21319D18F14FCB01
02D980:  30 36 34 44 34 00 22 00 E6 00 8C 20 30 30 44 44    064D4.".... 00DD
02D990:  30 39 34 37 44 44 32 42 44 44 32 42 44 44 37 45    0947DD2BDD2BDD7E
02D9A0:  30 30 43 35 35 35 44 00 22 00 F0 00 8C 20 43 44    00C555D.".... CD
02D9B0:  32 32 39 44 43 31 31 30 46 32 43 39 30 30 30 30    229DC110F2C90000
02D9C0:  30 30 30 30 30 30 34 31 38 00 00 00 1A 3D 30 20    000000418....=0 
02D9D0:  54 4F 20 31 34 3A 52 45 41 44 20 63 6F 64 24 3A    TO 14:READ cod$:
02D9E0:  63 68 6B 25 3D 30 0D 0A 34 30 20 46 4F 52 20 6A    chk%=0..40 FOR j
02D9F0:  25 3D 30 20 54 4F 20 31 31 3A 61 25 3D 56 41 4C    %=0 TO 11:a%=VAL
02DA00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DA10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DA20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DA30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DA40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DA50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DA60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DA70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DA80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DA90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DAA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DAB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DAC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DAD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DAE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DAF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DB00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DB10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DB20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DB30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DB40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DB50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DB60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DB70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DB80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DB90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DBA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DBB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DBC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DBD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DBE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DBF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02DC00:  63 6C 65 20 31 38 0D 0A 53 43 41 4E 34 36 34 09    cle 18..SCAN464.
02DC10:  2E 42 41 53 09 52 53 58 20 74 6F 20 73 63 61 6E    .BAS.RSX to scan
02DC20:  20 66 6F 72 20 34 36 34 2D 75 6E 66 72 69 65 6E     for 464-unfrien
02DC30:  64 6C 79 20 42 41 53 49 43 20 28 73 65 65 20 61    dly BASIC (see a
02DC40:  72 74 69 63 6C 65 20 31 33 29 0D 0A 53 43 41 4E    rticle 13)..SCAN
02DC50:  34 36 34 09 2E 42 49 4E 09 62 69 6E 61 72 79 20    464..BIN.binary 
02DC60:  66 69 6C 65 20 66 6F 72 20 74 68 65 20 61 62 6F    file for the abo
02DC70:  76 65 0D 0A 53 43 41 4E 36 31 32 38 2E 42 41 53    ve..SCAN6128.BAS
02DC80:  09 76 65 72 73 69 6F 6E 20 6F 66 20 53 43 41 4E    .version of SCAN
02DC90:  34 36 34 20 74 6F 20 72 75 6E 20 6F 6E 20 42 41    464 to run on BA
02DCA0:  53 49 43 20 31 2E 31 20 6D 61 63 68 69 6E 65 73    SIC 1.1 machines
02DCB0:  0D 0A 53 43 41 4E 36 31 32 38 2E 42 49 4E 09 62    ..SCAN6128.BIN.b
02DCC0:  69 6E 61 72 79 20 66 69 6C 65 20 66 6F 72 20 74    inary file for t
02DCD0:  68 65 20 61 62 6F 76 65 0D 0A 54 55 4E 45 09 2E    he above..TUNE..
02DCE0:  42 41 53 09 70 72 6F 67 72 61 6D 20 74 6F 20 70    BAS.program to p
02DCF0:  6C 61 79 20 61 20 74 75 6E 65 20 66 72 6F 6D 20    lay a tune from 
02DD00:  61 72 74 69 63 6C 65 20 31 32 0D 0A 0D 0A 2D 2D    article 12....--
02DD10:  2D 2D 0D 0A 2A 20 53 65 65 20 22 42 6C 61 73 74    --..* See "Blast
02DD20:  20 66 72 6F 6D 20 74 68 65 20 50 61 73 74 22 2C     from the Past",
02DD30:  20 57 41 43 43 49 20 31 31 38 2C 20 4A 61 6E 20     WACCI 118, Jan 
02DD40:  31 39 39 38 2C 20 70 2E 20 32 37 2D 32 39 2E 0D    1998, p. 27-29..
02DD50:  0A 1A 6E 64 20 48 69 6C 61 72 79 20 50 68 69 6C    ..nd Hilary Phil
02DD60:  6C 69 70 73 0D 0A 0D 0A 54 68 65 20 50 72 6F 67    lips....The Prog
02DD70:  72 61 6D 6D 65 72 73 27 20 50 61 74 63 68 20 64    rammers' Patch d
02DD80:  6F 6E 20 70 75 62 6C 69 73 68 65 64 20 69 6E 20    on published in 
02DD90:  57 41 43 43 49 0D 0A 41 49 37 09 2E 4C 4F 47 09    WACCI..AI7..LOG.
02DDA0:  41 49 20 69 6E 20 4C 6F 67 6F 20 2D 20 61 6E 20    AI in Logo - an 
02DDB0:  69 6D 70 72 6F 76 65 64 20 76 65 72 73 69 6F 6E    improved version
02DDC0:  20 75 73 69 6E 67 20 70 72 6F 70 65 72 74 79 20     using property 
02DDD0:  6C 69 73 74 73 0D 0A 4C 49 53 54 45 58 09 2E 42    lists..LISTEX..B
02DDE0:  41 53 09 65 78 61 6D 70 6C 65 20 6C 69 6E 6B 65    AS.example linke
02DDF0:  64 20 6C 69 73 74 20 66 72 6F 6D 20 61 72 74 69    d list from arti
02DE00:  00 4D 49 44 49 31 20 20 20 42 41 53 00 00 00 00    .MIDI1   BAS....
02DE10:  00 00 00 00 00 70 01 00 2D 01 00 00 00 00 00 00    .....p..-.......
02DE20:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02DE30:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02DE40:  2D 01 00 57 03 75 F3 29 20 FA 20 10 29 EF 0E 01    -..W.u.) . .)...
02DE50:  D5 00 18 00 6E 00 B9 20 0D 00 00 64 61 74 61 77    ....n.. ...dataw
02DE60:  72 69 74 E5 2C 0D 00 00 E4 00 06 00 78 00 C9 00    rit.,.......x...
02DE70:  00 00 1A 0A 32 30 20 4F 55 54 20 63 6F 6E 74 72    ....20 OUT contr
02DE80:  32 00 0A 00 0D 00 00 73 74 61 74 75 F3 EF 1C EE    2......statu....
02DE90:  F8 01 0D 00 00 63 6F 6E 74 72 6F EC EF 1C EC F8    .....contro.....
02DEA0:  01 0D 00 00 64 61 74 61 77 72 69 74 E5 EF 1C ED    ....datawrit....
02DEB0:  F8 00 13 00 14 00 B9 20 0D 00 00 63 6F 6E 74 72    ....... ...contr
02DEC0:  6F EC 2C 11 00 36 00 1E 00 B9 20 0D 00 00 63 6F    o.,..6.... ...co
02DED0:  6E 74 72 6F EC 2C 1C 15 00 01 C5 20 63 68 61 6E    ntro.,..... chan
02DEE0:  67 65 20 74 6F 20 26 31 36 20 66 6F 72 20 45 4D    ge to &16 for EM
02DEF0:  52 20 61 6E 64 20 44 48 43 50 00 20 00 28 00 9E    R and DHCP. .(..
02DF00:  20 0D 00 00 F8 EF 0E 20 EC 20 10 01 C3 20 0D 00     ...... . ... ..
02DF10:  00 E4 01 9F 20 1E 64 00 01 B0 00 15 00 32 00 9E    .... .d......2..
02DF20:  20 0D 00 00 F8 EF 0E 20 EC 20 1A 88 13 01 B0 00     ...... . ......
02DF30:  20 00 3C 00 9E 20 0D 00 00 F8 EF 0E 20 EC 20 10     .<.. ...... . .
02DF40:  01 C3 20 0D 00 00 E4 01 9F 20 1E 64 00 01 B0 00    .. ...... .d....
02DF50:  06 00 46 00 98 00 19 00 50 00 8C 20 26 39 30 2C    ..F.....P.. &90,
02DF60:  36 30 2C 36 34 2C 26 38 30 2C 36 30 2C 30 00 1E    60,64,&80,60,0..
02DF70:  00 64 00 D6 20 28 FF 0B 28 0D 00 00 73 74 61 74    .d.. (..(...stat
02DF80:  75 F3 29 20 FA 20 10 29 EF 0E 01 D5 00 18 00 6E    u.) . .).......n
02DF90:  00 B9 20 0D 00 00 64 61 74 61 77 72 69 74 E5 2C    .. ...datawrit.,
02DFA0:  0D 00 00 E4 00 06 00 78 00 C9 00 00 00 1A 0A 32    .......x.......2
02DFB0:  30 20 4F 55 54 20 63 6F 6E 74 72 6F 6C 2C 33 0D    0 OUT control,3.
02DFC0:  0A 33 30 20 4F 55 54 20 63 6F 6E 74 72 6F 6C 2C    .30 OUT control,
02DFD0:  26 31 35 3A 52 45 4D 20 63 68 61 6E 67 65 20 74    &15:REM change t
02DFE0:  6F 20 26 31 36 20 66 6F 72 20 45 4D 52 20 61 6E    o &16 for EMR an
02DFF0:  64 20 44 48 43 50 0D 0A 34 30 20 46 4F 52 20 78    d DHCP..40 FOR x
02E000:  3B 53 65 6E 64 20 76 65 72 73 69 6F 6E 20 32 2E    ;Send version 2.
02E010:  30 30 2C 20 31 31 2F 35 2F 31 39 39 37 0D 0A 3B    00, 11/5/1997..;
02E020:  64 65 73 69 67 6E 65 64 20 74 6F 20 62 65 20 61    designed to be a
02E030:  73 73 65 6D 62 6C 65 64 20 77 69 74 68 20 5A 4D    ssembled with ZM
02E040:  41 43 0D 0A 0D 0A 3B 69 6E 69 74 69 61 6C 69 73    AC....;initialis
02E050:  65 20 52 53 58 73 20 62 79 20 43 41 4C 4C 20 26    e RSXs by CALL &
02E060:  39 44 30 30 0D 0A 0D 0A 09 09 41 4F 52 47 20 39    9D00......AORG 9
02E070:  44 30 30 68 0D 0A 0D 0A 69 6E 69 74 69 61 6C 69    D00h....initiali
02E080:  73 65 3A 20 09 4C 44 20 42 43 2C 72 73 78 74 61    se: .LD BC,rsxta
02E090:  62 0D 0A 09 09 4C 44 20 48 4C 2C 77 72 6B 73 70    b....LD HL,wrksp
02E0A0:  0D 0A 09 09 4A 50 20 30 42 43 44 31 68 0D 0A 72    ....JP 0BCD1h..r
02E0B0:  73 78 74 61 62 3A 09 09 44 45 46 57 20 6E 61 6D    sxtab:..DEFW nam
02E0C0:  65 73 0D 0A 09 09 4A 50 20 73 65 6E 64 0D 0A 09    es....JP send...
02E0D0:  09 4A 50 20 63 68 6F 75 74 0D 0A 6E 61 6D 65 73    .JP chout..names
02E0E0:  3A 09 09 44 45 46 42 20 22 53 45 4E 22 2C 22 44    :..DEFB "SEN","D
02E0F0:  22 2B 31 32 38 0D 0A 09 09 44 45 46 42 20 22 43    "+128....DEFB "C
02E100:  48 4F 55 22 2C 22 54 22 2B 31 32 38 0D 0A 09 09    HOU","T"+128....
02E110:  44 45 46 42 20 30 0D 0A 77 72 6B 73 70 3A 09 09    DEFB 0..wrksp:..
02E120:  44 45 46 53 20 34 0D 0A 0D 0A 0D 0A 6A 75 6D 70    DEFS 4......jump
02E130:  62 6C 6F 63 6B 73 3A 0D 0A 6A 6D 70 72 65 73 65    blocks:..jmprese
02E140:  74 3A 09 4A 50 20 72 61 6D 72 65 73 65 74 0D 0A    t:.JP ramreset..
02E150:  6A 6D 70 6D 69 64 69 73 65 6E 64 3A 09 4A 50 20    jmpmidisend:.JP 
02E160:  72 61 6D 73 65 6E 64 0D 0A 0D 0A 52 41 4D 62 6C    ramsend....RAMbl
02E170:  6F 63 6B 73 3A 09 4A 50 20 72 61 6D 72 65 73 65    ocks:.JP ramrese
02E180:  74 0D 0A 09 09 4A 50 20 72 61 6D 73 65 6E 64 0D    t....JP ramsend.
02E190:  0A 45 4D 52 62 6C 6F 63 6B 73 3A 09 4A 50 20 65    .EMRblocks:.JP e
02E1A0:  6D 72 72 65 73 65 74 0D 0A 09 09 4A 50 20 65 6D    mrreset....JP em
02E1B0:  72 73 65 6E 64 0D 0A 44 48 43 50 62 6C 6F 63 6B    rsend..DHCPblock
02E1C0:  73 3A 09 4A 50 20 64 68 63 70 72 65 73 65 74 0D    s:.JP dhcpreset.
02E1D0:  0A 09 09 4A 50 20 64 68 63 70 73 65 6E 64 0D 0A    ...JP dhcpsend..
02E1E0:  0D 0A 72 61 6D 72 65 73 65 74 3A 09 4C 44 20 42    ..ramreset:.LD B
02E1F0:  43 2C 30 46 38 45 43 68 0D 0A 09 09 4C 44 20 41    C,0F8ECh....LD A
02E200:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E210:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E220:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E230:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E240:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E250:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E260:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E270:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E280:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E290:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E2A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E2B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E2C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E2D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E2E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E2F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E300:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E310:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E320:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E330:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E340:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E350:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E360:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E370:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E380:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E390:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E3A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E3B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E3C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E3D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E3E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E3F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E400:  2C 33 0D 0A 09 09 4F 55 54 20 28 43 29 2C 41 0D    ,3....OUT (C),A.
02E410:  0A 09 09 4C 44 20 41 2C 31 35 68 0D 0A 09 09 4F    ...LD A,15h....O
02E420:  55 54 20 28 43 29 2C 41 0D 0A 09 09 52 45 54 0D    UT (C),A....RET.
02E430:  0A 0D 0A 65 6D 72 72 65 73 65 74 3A 09 4C 44 20    ...emrreset:.LD 
02E440:  42 43 2C 30 46 38 46 32 68 0D 0A 65 68 72 63 6F    BC,0F8F2h..ehrco
02E450:  6D 6D 6F 6E 3A 09 4C 44 20 41 2C 33 0D 0A 09 09    mmon:.LD A,3....
02E460:  4F 55 54 20 28 43 29 2C 41 0D 0A 09 09 4C 44 20    OUT (C),A....LD 
02E470:  41 2C 31 36 68 0D 0A 09 09 4F 55 54 20 28 43 29    A,16h....OUT (C)
02E480:  2C 41 0D 0A 09 09 52 45 54 0D 0A 0D 0A 64 68 63    ,A....RET....dhc
02E490:  70 72 65 73 65 74 3A 09 4C 44 20 42 43 2C 30 46    preset:.LD BC,0F
02E4A0:  38 45 30 68 0D 0A 09 09 4A 52 20 65 68 72 63 6F    8E0h....JR ehrco
02E4B0:  6D 6D 6F 6E 0D 0A 0D 0A 72 61 6D 73 65 6E 64 3A    mmon....ramsend:
02E4C0:  09 4C 44 20 42 43 2C 30 46 38 45 45 68 0D 0A 09    .LD BC,0F8EEh...
02E4D0:  09 50 55 53 48 20 41 46 0D 0A 72 61 6D 73 6C 70    .PUSH AF..ramslp
02E4E0:  3A 09 09 49 4E 20 41 2C 28 43 29 0D 0A 09 09 41    :..IN A,(C)....A
02E4F0:  4E 44 20 32 0D 0A 09 09 4A 52 20 5A 2C 72 61 6D    ND 2....JR Z,ram
02E500:  73 6C 70 0D 0A 09 09 50 4F 50 20 41 46 0D 0A 09    slp....POP AF...
02E510:  09 44 45 43 20 43 0D 0A 09 09 4F 55 54 20 28 43    .DEC C....OUT (C
02E520:  29 2C 41 0D 0A 09 09 52 45 54 0D 0A 0D 0A 65 6D    ),A....RET....em
02E530:  72 73 65 6E 64 3A 09 4C 44 20 42 43 2C 30 46 38    rsend:.LD BC,0F8
02E540:  46 32 68 0D 0A 65 68 73 63 6F 6D 6D 6F 6E 3A 09    F2h..ehscommon:.
02E550:  50 55 53 48 20 41 46 0D 0A 65 6D 72 73 6C 70 3A    PUSH AF..emrslp:
02E560:  09 09 49 4E 20 41 2C 28 43 29 0D 0A 09 09 41 4E    ..IN A,(C)....AN
02E570:  44 20 32 0D 0A 09 09 4A 52 20 5A 2C 65 6D 72 73    D 2....JR Z,emrs
02E580:  6C 70 0D 0A 09 09 50 4F 50 20 41 46 0D 0A 09 09    lp....POP AF....
02E590:  49 4E 43 20 43 0D 0A 09 09 4F 55 54 20 28 43 29    INC C....OUT (C)
02E5A0:  2C 41 0D 0A 09 09 52 45 54 0D 0A 0D 0A 64 68 63    ,A....RET....dhc
02E5B0:  70 73 65 6E 64 3A 09 4C 44 20 42 43 2C 30 46 38    psend:.LD BC,0F8
02E5C0:  45 30 68 0D 0A 09 09 4A 52 20 65 68 73 63 6F 6D    E0h....JR ehscom
02E5D0:  6D 6F 6E 0D 0A 0D 0A 63 68 6F 75 74 3A 09 09 43    mon....chout:..C
02E5E0:  50 20 31 0D 0A 09 09 52 45 54 20 4E 5A 0D 0A 63    P 1....RET NZ..c
02E5F0:  68 6F 75 74 6A 70 32 3A 09 4C 44 20 41 2C 28 49    houtjp2:.LD A,(I
02E600:  54 72 61 63 6B 2D 49 6E 66 6F 0D 0A 00 00 00 00    Track-Info......
02E610:  27 00 01 00 02 09 4E E5 27 00 C1 02 00 00 00 02    '.....N.'.......
02E620:  27 00 C6 02 00 00 00 02 27 00 C2 02 00 00 00 02    '.......'.......
02E630:  27 00 C7 02 00 00 00 02 27 00 C3 02 00 00 00 02    '.......'.......
02E640:  27 00 C8 02 00 00 00 02 27 00 C4 02 00 00 00 02    '.......'.......
02E650:  27 00 C9 02 00 00 00 02 27 00 C5 02 00 00 00 02    '.......'.......
02E660:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02E670:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02E680:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02E690:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02E6A0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02E6B0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02E6C0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02E6D0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02E6E0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02E6F0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
02E700:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E710:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E720:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E730:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E740:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E750:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E760:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E770:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E780:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E790:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E7A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E7B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E7C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E7D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E7E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E7F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E800:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E810:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E820:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E830:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E840:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E850:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E860:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E870:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E880:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E890:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E8A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E8B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E8C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E8D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E8E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E8F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E900:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E910:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E920:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E930:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E940:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E950:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E960:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E970:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E980:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E990:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E9A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E9B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E9C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E9D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E9E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02E9F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EA00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EA10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EA20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EA30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EA40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EA50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EA60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EA70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EA80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EA90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EAA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EAB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EAC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EAD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EAE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EAF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EB00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EB10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EB20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EB30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EB40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EB50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EB60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EB70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EB80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EB90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EBA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EBB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EBC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EBD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EBE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EBF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EC00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EC10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EC20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EC30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EC40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EC50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EC60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EC70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EC80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EC90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ECA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ECB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ECC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ECD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ECE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ECF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ED00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ED10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ED20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ED30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ED40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ED50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ED60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ED70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ED80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02ED90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EDA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EDB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EDC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EDD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EDE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EDF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EE00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EE10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EE20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EE30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EE40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EE50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EE60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EE70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EE80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EE90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EEA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EEB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EEC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EED0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EEE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EEF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EF00:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EF10:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EF20:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EF30:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EF40:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EF50:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EF60:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EF70:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EF80:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EF90:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EFA0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EFB0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EFC0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EFD0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EFE0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02EFF0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F000:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F010:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F020:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F030:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F040:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F050:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F060:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F070:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F080:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F090:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F0A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F0B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F0C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F0D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F0E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F0F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F100:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F110:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F120:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F130:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F140:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F150:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F160:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F170:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F180:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F190:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F1A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F1B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F1C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F1D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F1E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F1F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F200:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F210:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F220:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F230:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F240:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F250:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F260:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F270:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F280:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F290:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F2A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F2B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F2C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F2D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F2E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F2F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F300:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F310:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F320:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F330:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F340:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F350:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F360:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F370:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F380:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F390:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F3A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F3B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F3C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F3D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F3E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F3F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F400:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F410:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F420:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F430:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F440:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F450:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F460:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F470:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F480:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F490:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F4A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F4B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F4C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F4D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F4E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F4F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F500:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F510:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F520:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F530:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F540:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F550:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F560:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F570:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F580:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F590:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F5A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F5B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F5C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F5D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F5E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F5F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F600:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F610:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F620:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F630:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F640:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F650:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F660:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F670:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F680:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F690:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F6A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F6B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F6C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F6D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F6E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F6F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F700:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F710:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F720:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F730:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F740:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F750:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F760:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F770:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F780:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F790:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F7A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F7B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F7C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F7D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F7E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F7F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F800:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F810:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F820:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F830:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F840:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F850:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F860:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F870:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F880:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F890:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F8A0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F8B0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F8C0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F8D0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F8E0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
02F8F0:  E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5    ................
RESULT OF SEARCH :
PRO=198   CHEA=2   COD=68   MUSI=16   COP=40   GRA=174   WRIT=46   198=2   199=23   STARTER=3   KBI=3   CAAV=0   L.TOURNIER=0  
EXTENDED CPC DSK File    SAMdisk141208(  NDISC    BASLINKBASETXT LOOM    BINt  M
ESSAGESTXTREADME     #A01        M !"#A02        O$%&'()*+,-A03        W./012345
678A04        T9ABCA05        cDEFGHIJKLMNOPA06        OQRSTUVWXYZA07        Qab
cdeA08        XfghijklmnopA09        qrstuvwxyzDISCMENUBASFIG161     FIG1618    
FIG2       FIG27      FIG271     FIG2718    HELP    TXT MENUEX1 BASMENUEX2 BAS M
ENUEX3 BASMENUEX4 BASMENUSUB    PELMAN  BASBSIDE   BASBSIDE   BINA10        TA11
        £F readme  B readme 136 144 readme 4446  B readme 1029 1037 a01 0  B rea
dme 1066 1074 a02 0  B readme 1125 1133 a03 0  B readme 1197 1205 a04 0  B readm
e 1260 1268 a05 0  B readme 1306 1314 a06 0  B readme 1353 1361 a07 0  B readme 
1415 1423 a08 0  B readme 1460 1468 a09 0  B readme 1485 1494 a10 0  B readme 15
27 1536 a11 0  B readme 1641 1650 a12 0  B readme 1706 1715 a13 0  B readme 1779
 1788 a14 0  B readme 1856 1865 a15 0  B readme 1916 1925 a16 0  B readme 1983 1
992 a17 0  B readme 2040 2049 a18 0  B reSEND    ASMMIDI1   BASSEND    BASadme 2
107 2116 a19 0  B readme 2164 2173 a20 0  B readme 2222 2231 a21 0  B a01 926 93
3 a01 8519  B a02 891 901 a02 8289  B a02 3010 3021 a02 9049  B a03 1791 1798 a0
3 9440  B a03 3598 3607 a03 9845  B a03 8808 8818 a03 10324  B a04 527 538 a04 8
011  B a04 4744 4755 a04 8543  B a04 4774 4787 a04 10104  B a05 636 643 a05 1117
8  B a06 1151 1159 a06 8879  B a06 2993 2997 a06 8098  B a06 3002 3002 a06 8098 
 B a07 351 359 a07 7839  B a07 2184 2192 a07 7839  B a07 4214 4222 a07 9130  B a
08 549 556 a08 10333  B a08 614 618 a08 9431  B a09 596 621 a09 8473  B a10 4852
 4858 a10 9828  B a10 9282 9294 a10 10101  B a11 451 459 a11 8131  B a11 532 540
 a11 9079  B a12 3810 3818 a12 10511  B a12 8454 8460 a12 11768  B a13 2075 2083
 a13 6302  B a13 2804 2811 a13 5971  B a14 1364 1370 a14t1 0  B a15 5027 5035 46
4rsx.bas 0  B a16 543 549 ai1.bas 0  B a16 952 959 a16 10514  B a16 10444 10464 
a16a 0  B a16a 469 475 ai2.bas 0  B a17 3709 3716 a17 10905  B a17 5011 5018 a17
 11594  B a21 4322 4328 ai6.log 0  B a21 4334 4344 64kbitsDISC    BASp**(  ,() ,
"loom.bin"est the machine (  ,() ,"loom.bin"est the machine upon exit' ,() ,"lll
.bin"apted from "Lear0 THEN 3500 ELSE 4000     4530 RETURN  illips       Yes, th
is month the proofreader gets a  go  at writing an article, to give  MID$(card$,
card,1)          CHR$(226+suit)RETURN     3500 LOCATE col*3+2,row*2+2PAPER 0PEN 
1PRINT CHR$(220)CHR$(222)RETUR  N# s r( *p0*s+R#!DM*n(#*n++x"9#VS+++a0 l a0 V+ *
#"*I*+w"o&*j!y!jS(!j"!"!"9#V++22!"n(/  (%('o( nz  n9!*2p "qh(/d(+o(%x(c(es(o0 x(
X!PYhKqx('08 88 0OBp(Msh(6#r2op(8$Krnfn&nfn&R!nf"*!nf"*+8!6#6*!nf"c!rnfI"c(!*c (
!!c*c&*c!&*c nfI"c*cnf*c(!!nf!!  utK2%s !.*J!78nf!jnf!!  ut%s !*L!78nfnf Kq op(x
 .*n#"n++!I*#"o&$PE( ((P(!6"/!cd6T!09N#F##V#x RdR PR!6Z$   Z Z   o&!o&!8,!7,O(8 
8*$Z+!W(w (!o&z!w!L(  z0xV !w!w!Lw*"z z.log 0  B a21 11697 11703 ai7.log 0    B 
readme 1029 1037 a01 0  B readme 1066 1074 a02 0  B readme 1125 1133 a03 0  B re
adme 132 540 a11 9079  B a12 3810 3818 a12 10511  B a12 8454 8460 a12 11768  B a
13 2075 2083 a13 6302  B a13 2804 2811 a13 5971  B a14 1364 1370 a14t1 0  B a15 
5027 5035 464rsx.bas 0  B a16 543 549 ai1.bas 0  B a16 952 959 a16 10514  B a16 
10444 10464 a16a 0  B a16a 469 475 ai2.bas 0  B a17 3709 3716 a17 10905  B a17 5
011 5018 a17 11594  B a21 4322 4328 ai6.log 0  B a21 4334 4344 64kbitsELr(w()C %
wK S C  !2Lo"!LDM!iF9Pn&qMqMlist    Ms#cr+s#Vr+s&#6nclude "is)"in&#&#!9!9DM!n&#!
n&!nf4R"!*"!"!l*Ka*K"!r*!nf4R"!*"!"!*KLOOM    BIN99Y$& "7gvj3,*cS 664vcE0!99*N90
!!ystack overflowV9DMogog£og),+/g/o!#zIM!)8 08zIPBK)8 )zrW, 4PRgo7#+#7£++#7##7*K
"!r*linkbase.txthelp.txtmessages.txt!nfP"*"B !c"B"*B*Bj*B!Yj*BK"D!*DK*DK *B*DKj 
*DKRj*DK*D"D*D*j*B"*FR"F*D*D&!*D"B*DK"Dk !nfRKutnf utnf!nfnfnfR.nf6nf!!#A##   oo
!#+w#xR8#fon&s#rss#r#Vr+s#Vr+sKN#F#x(##  iR!0)T))YPP08+w (z+6-o*L*w#"!!(!"9#V++2
(% % *! "oog"q- 2n0 2o0"s.  2r"p!pd(u((o("x(s(c(-s!utnf%!!utnfnf#!!!!mnfmnfm!!m!
nf!!mnfm!!mnfm!!mn fRmnfRmnfRmnfRm!nfB 0  %s!, *XU!nfn&nfn& nfn& nfn& ! nfn&!r! 
 NnfK!!!! "H$%s ! *P!78!*FE%s !A*R!78nfnf *Hnf *Hnf*R .nf *HnfKjnf *HnfKjnf *Hnf
Kjnf *HnfK6 jnf *HnfK6 j(!%s !*T!78nf%s!nfnf!!nf!!!*L*nfcREutnfutnfnf *HK*K (!nf
(!nfnf(!Lnf6nfutTnf.nf *HK*K (!qnf *Hnf6nfcRK(!nf *HKcnfRutnfnf+nnf nfR *HKnfKK 
(!hnf *HK6nf *HnfR *HKjnf *HKnfK5nfKnfKK nf *HK6nf *Hnf *HKj6nf *HKnfK5!!!utnfnf
 *HKnfK (!!nfnf *HKutnf *HKnf,!nf*cn&m!!!p3!nfz!nfnf6!!!nfnfY!nfnfcR!nfc!nfnfcKn
fRn&(!!nf!nfnf6nfut!nf!!f *HKnfK (!nf *HKnf(!0!nf!nfinf(!nfnf *HKK (!nf *HKnf(!n
f *HKnf(! !!!!2 "cI3%s !/*V!78!nfar!Fut!!2&nfIu&n&#!!Bnfnu&!c!5!c!5!2c&*cn& ! !c
"4 "cx).*c"c*c"c!!+n&Qd(!eUu&!e!p3!m!p3*c*£c+n&'a(&*a(!c1 *c"c*c"c!"£c!"c*c*£c+a
(!p3 %s %d! **F!p3*c*£c+a(x)*c*c*£c+a(!p3!p3*c*£c+a(M+a(+a(*£cz!*ccw!(*c"c*c!+!*
c!£cr+*c"ca(*£c!*c6*cfIu&*c"!utn&*c2R*(!n&!! &!*c2*nfx(! !!&!ut!n&&! c nfIu&nfOn
&!!&!!!!740  !(!A!*cutnfnf6nfutnf74 !(!!!p3!jnfnf Kjnfnf Kjnfnf Kjnfnf Kjnf n fj
nf nfjnf nfjnf nfjnf nfj !nfKutnfnfKjnfnfKjnfnfKjnfnfKjnfnfKjnf6!n fnf Kjnfnf Kj
nfnf Kjnfnf Kjnf  !!+%s%c!!!!p3R!ut*Rnf*RutnfcLnfRn&(!ec!nfutnfnf(!nf6nfut!nf!nf
cnf(!8&!nfut!utnfutnfrnf(!nf6nfut%s  !nf!  N!*c6*c"c)*c!+"*c!£cr+*c"*c6*c"c!ca(*
cR!"c*c*£c+a(*c!Pt"c*c*£c+a(*c"*£c"*cc(!(!"*£c"(*c"c"!£c*c"c*c"!"c"*c6"c#*c#*c #
!"c#*c6*cH#*c6"c#!crR*cn& z#*c(!#!crR*cn& #*c(!#!c*£c+!!p3*c*cRY,**c*cREutnf *HK
*K m,nf *H*c*cRK(!,nf(!,nf(!,!*c*cRY,**c*cRnf(!--%s!-*f!-nf9-!p3*c*£c+!nf *HK1 .
nf *H#V*c"c*c"c!"£c*c6*cnf *H#V*c*c*£c+a(*c#!ut#*c6utnf*cB$*£c8$*c6*c(!(!$*£cn$*
c6*c"c)$!£c*c$*c6*c"c!c!"c%nf*c%nf*c$!crR*cn& (!$!crR*cn& 4%nf*c(!%*c*£c+a(*ccg%
*c"c!"£c%!utnf%%!*c"c*c"c*c"c!utnf-*c6*c"c!£cnf *H#V*ccR"c!!p3!  utL.!  ut(!s.Z.
%s!W.*j!78.!c.r!z.Fut.d1!p3.%s %s!£.*l!c!p3nfIu&h0n&Y0nf. %12s   !.!c9/#/%s %s  
!/*n*p/!utnf/e/!nf!cn& /nf!c!&e0nf/ %12s %d %d %12s %d   !/n£c%%!*cm"c*c*£c+a(q(
&!"£cq("c&!utnfP&D&!*cm"c*c"c*c"c!utnf£c&&!*cm"c*c*£c+a(!"c!"£c*cc&*c"c*c"c*c*£c
+a(!"cq('*R"cq("c!"£c*c*£c+a(!"c*c*£c+a(*cO'!"c'*c6"c*c*£c+a(*cc'(*£c'*c"c'!£c*c
*£c+a(q('f!!nf!0/%s %s  !/*n*r20nfnfE!*e00%s %s  !80*n*te0e0.F/B.nfOnf6nf6*c&0!c
000%s!0*v!78*c!p3R!nfOutnfV10%s  !0*x!1  %s  !1*z!*c**c*£c*cjnf"!b101!z1  %s %s 
  %s!m1*!c* 1RQ!1Uu&61n&Q)*£c'*c6*c"c'!£c*c*£c+a(a( Q  , B H F!!P!O! F!!!"G"k"#I
%%&&#'7'k''8 !78!*cut!utnf((!nfmutnf!*c"c!!+!m( %s!(*c*c!!!!!+q(ut)  %s!6)nfnf!!
*c6*c"c!!m!m!D!!P!!!R)%cLoom v3.2 b1!78R!*nfK 2!p3*c**c*£c*cj!!ut!p382%s %s!12*l
nf!p3nfutnf0utnf3!utH3!ut2%s!2*2YN!2Uut62nfN2!ut*cH32%s   !2**"!c"*1*c!ut*cH3H32
22nfa2!p3R!p3nf22!nf4!!!C!!!14!!!P!!!y%cS. Phillips!)!!!p3!!)%s!)*!p3R!p3R!*c*!p
3F*%s!B**!p3+*c!!!!Inf1+nf"cnf"£cnf"c*c"c*c"cnf+*!*c**c6*c"c!c*c*c+*cnfnfnfnfj*c
*£c+!!p3*c*cRut++%s!+*b++%s %d!+*dnf!p3*c  Nhospl8fq(pt,0c'd7s (J,6+4HaY2rHC( 5J
l ulD"""DDFD LdDgint     long    registerreturn  short   sizeo£ccF#Welcome to th
e Programmers' Patch disc  PROGRAMMERS' PATCH  By Stephen, Matthew and Hilary Ph
illips    The Programmers' Patch disc features all the articles and programs fro
m the  acclaimed WACCI series.  The files on this disc are copyright Stephen, Ma
tthew  and Hilary Phillips.  Permission is granted to distribute copies of the  
complete disc, to print out the articles and listings for personal use, and to  
incorporate the programming examples in your own programs.  ALL OTHER RIGHTS  RE
SERVED.    You canP,7yH%nD37Ps#9itmkCq*soJ'f NF/Ih2MSXr g,5u/"""DD LdDgint     l
ong    registerreturn  short   sizeocc+1  160 IF INKEY(21)-1 THEN addxaddx*4  17
0 addx3*addx  180 IF INKEY(2)-1 THEN addy-1  190 IF INKEY(0)-1 THEN addyaddy+1  
200 IF INKEY(21)-1 THEN addyaddy*2  210 addy3*addy  220 xx+addxyy+addy  225 REM 
Check x & y are on screen  230 IF x632 T14!!!P!!!14!!!! !!!2!+14143333!nfn&4nf4q
4%s  %s!i4*Z*4RQ!4Uu&64Rn&4!4!44R4Q!4!!!5r!5Fut#5!78!utnf5O5!!!Onfnf!J!6 jnf!JK!
5nfO!nf"c!c!n&&5nf!nf"c!cn& nf*cRR!nfn&n&f6nfnfn&6!!r! !nfR"c*c#V*F"F*"c*cc6*c#V
*c(!J76*cK"c*c#V*c7*cc67*c#V*c(!(!H7J7*cK*c*c#V7*c*cK#VKj*c*cKKj7*c*cUnable to i
nitialise stack.  No more space on stack.  No more room for string on stack.  Un
able to initialise list.  Unable to add to list.  No room for string in list.  U
nable to initialise text buffer.  Press any key to quit.  Printer not ready.  Fr
ee    ENTER - follow link, B - go back, P - print, H - help, Q - quit    You can
not go further back.  You are outside the text area.  Position  There is no link
 there.  links here.  Out of memory when loading linkbase.  Loading  Error in li
nkbase  F command Kj*cK*cc8*c*c#VKj*c*cKj+8*c*cj*c"!!O! Onf  ERROR EXIT %d EXIT 
OK Please press any key&DDDD(D0DDDDDDDDDDOD"""DDFD LdDgint     long    registerr
eturn  short   sizeo£ccFY$& "7gvj3,*cS 6M(j,U!+ £viOWA26847takes one parameter. 
 B command takes five parameters.  unknown command.  Failed to load first file. 
 File error.  Memory exhausted.  Could not find  (R)etry, or (Q)uit  Try again (
Y/N)  Re-loading old file.  ck.  Unable to initialise list.  Unable to a1))  370
 addx3*addx  380 addy(INKEY(2)-1)  390 addyaddy-(INKEY(0)-1)  400 addyaddy*((INK
EY(21)-1)+2)  410 addy3*addy  420 xx+addxyy+addy  425 REM Check x & y are on scr
een  430 xMIN(632,x)  440 xMAX(0,x)  450 yMIN(399,y)  460 yMAX(15,y)  465  N def
initions for the 464 and 664 (see article 21)  A14T1table from article 14 with s
yntax of BASIC 1.1 commands  AI1.BASlisting from article 16  AI2.BASlisting from
 article 16 with vocabulary saving  AI3.BASimproved version of AI from article 1
7  AI4.BASAI with a binary tree (see article 19)  AI5.BASAI with a hash table (f
rom article 20)  AI6.LOGAI in Logo - the version published in WACCI  AI7.LOGAI i
n Logo - an improved version using property lists  LISTEX.BASexample linked list
 from article 9  - a card game  Article 10 - programming a MIDI interface  Artic
le 11   - the main MIDI messages, and an RSX to send them    Turn the disc over 
before following these links    Article 12   - other MIDI messages, and a progra
m to play a tune  Article 13 - how to adapt 6128 programs for the 464, with an R
SX to help  Article 14   - commands added in BASIC 1.1, and what to do with most
 of them  Article 15   - bugs in 464 BASIC, and how to deal with them  Article 1
6 - AI an "artificial intelligence" conv#Programmers' Patch 1 - WACCI 109, Feb 1
997, p. 6-7     PROGRAMMERS' PATCH 1     By Matthew and Stephen Phillips       T
his new series aims  to  offer  a  smorgasbord of programming delicacies,     ju
ggling  those  hot  potatoes   of   efficiency  versus  readability,  of     com
pactitude versus perambulatory execution, and  ever searching for a use     of t
he CREAL function, yet  without  wasting  an  opportunity of using our     thesa
urus.  Many of you will have followed Alan Tilling's Very Basic Basic   ersation
 program  Article 17   - improving the program using a linked list  Article 18  
 - more about linked lists, and Mr Black the newsagent  Article 19   - improving
 search speeds with binary trees  Article 20   - using hash tables to reduce sea
rching time  Article 21   - AI in Logo    Other files on both sides of the disc 
   DISC.BASruns the Loom hypertext viewer  HELP.TXTthe help text for Loom  LINKB
ASE.TXTthe linkage data for Loom  LOOM.BINthe Loom program  MESSAGES.TXTthe mess
age texts for L  series,  and  we  hope  that  you   now  feel  ready  for  some
thing  more     adventurous.       RUN"ARTICLE     We are going to start by look
ing  at  a  program written by Stephen in the     days when Computing with the  
Amstrad  had  a  "ten-liners" slot for short     BASIC programs.  This wasn't on
e  of  them.   Don't  get scared off by the     horrible listing, as all will so
on become as clear as jelly.       If you feel like it, you could type  in the p
rogram listing in Figure 1.     It has been soom  README.this file    Other file
s on side A of the disc    BSIDE.BASthe BSIDE program for copying side B  BSIDE.
BINditto  DISCMENU.BASthe program featured in articles 1,2,4 and 5  FIG161.subro
utine featured in article 2  FIG1618 .another subroutine featured in article 2  
FIG2.an example from article 3  FIG27.another example from article 3  FIG271.an 
example from articles 3 and 4  FIG2718.another example from article 4  MENUEX1.B
ASthe listing from article 6  MENUEX2.BASlisting 1 fro read the articles by usin
g the Loom hypertext viewer, which will also  print them out if you have a print
er.  To do this, just RUN"DISC and Loom will  start up.  The following headings 
then become hyperlinks which can be followed  by moving the cursor over the link
 and pressing ENTER.    The articles can also be viewed with a text editor or wo
rdprocessor such as  Protext.    If this has been supplied on a 3.5" disc and yo
u do not have a side switch,  RUN"BSIDE to copy the B side of the disc onto a di
sc in m article 7  MENUEX3 .BASlisting 2 from article 7  MENUEX4 .BASlisting 2 m
odified to use the SHIFT key  MENUSUB .the menu subroutine featured in articles 
6-8  MIDI1.BASlisting from article 10 a program to play a middle C  PELMAN.BASth
e card game featured in article 9  SEND.ASMassembly listing for MIDI SEND RSX  S
END.BASBASIC loader for MIDI SEND RSX (see article 11)    Other files on side B 
of the disc    464RSX.BASlisting 1 from article 15 which improves 464 RSX handli
ng  64KBITS.LOGLogoyour A drive.    Links to articles on this side of the disc  
       Article 1  - introducing a disc menu  Article 2    - line 40, testing key
s and moving the cursor  Article 3    - getting BASIC and machine code to work t
ogether (part 1)  Article 4    - part 2, and the machine code from the disc menu
  Article 5    - final article on the disc menu  Article 6  - a general purpose 
menu subroutine  Article 7    - how to get the most out of the menu subroutine  
Article 8    - how the menu subroutine works  Arti  Naved on the disc as DISCMEN
U.BAS   You might even find it     useful, and it  is only  eight lines  after  
all.   The program displays a     catalogue of the disc,  and allows you to choo
se a file to run by moving a     pointer  around  with  the  cursor keys.  Holdi
ng down SHIFT will make the     pointer move faster.   The  file is  selected  b
y pressing  COPY, SPACE or     ENTER (known as RETURN to  you 6128 users out the
re).  You can change to a     different user area by moving the pointer up to th
e wrun it.  Otherwise we proceed to...       60 which asks for the new user numb
er, changes to it, and recatalogues the        disc.  The WHILE-WEND loop here e
nsures that the input is between 0 and        15.       70 is the WEND which wil
l send us back to line 30, ready to start again.       80 is a subroutine which 
waits until none  of the selection keys are being        pressed, and then clear
s the keyboard buffer.         GOTO 10       The first command in the program  i
s  there to speed things up slightlord "user" at the top     of the display, and
 pressing one of the three selection keys.       As he has been working as  a  s
oftware engineer over the summer, Stephen     wants to make it quite clear that 
 this  is  NOT meant to be an example of     Good Programming Practice.   Mustn'
t  spoil  the  job  prospects  with one     little example...       The program 
takes up less  than  1K  of  disc  space.  This is important     because the ide
a is that you would save  it  on every disc and use it as a     disy.     There 
are three different types of  variable strings, integers and reals.     On the A
mstrad, integer variables are  whole numbers from -32768 to 32767.     Real vari
ables (also known as floating point variables) can be much bigger     and don't 
have to be whole numbers.  Using a real variable when an integer     will do mak
es extra work for BASIC and slows the program down.  To specify     explicitly t
hat a variable is a string we use the "$" character as in         a$"Hello Mum!"
       There arec menu system.  To achieve  this  small size, many ingenious tec
hniques     have been employed.  Although they  do  make  the listing rather dau
nting,     one bonus is that the program runs much faster.       LIST 10-80     
Let's have a quick look through what each line does.       10 sets up some machi
ne code (shock, horror!) that we need later.       20 makes sure the screen is s
et up as normal, and catalogues the disc.       30 is where the fun starts.   Th
e  loop  starting "WHILE 1" ends at the        " equivalent  characters  for  in
teger  variables  and reals.  For     example         i%3       r!3.1415       T
he "!" character is rarely used in this context because variables without     an
y type  identifiers  are  real  by  default.   "DEFINT a-z"  changes the     def
ault type to integer for all variables  beginning with the letters a to     z.  
You can find out about its  lesser known friends DEFREAL and DEFSTR in     your 
manual.  As an example, how about         DEFSTR t       tigger"Philip DiRiWEND"
 in line 70.  There is no  way  out of this loop, and the program        only st
ops when the user selects  a  file,  which  is run at the end of        line 50.
          The second WHILE loop ends at the  WEND part way through line 50, and 
       waits until a file or "user" is selected.          At the end of the  lin
e  the  pointer,  CHR$(215),  is printed on the        screen.       40 has a WH
ILE-WEND loop all  to  itself.   It  waits until SPACE, COPY or        ENTER is 
pressed,  and  in  the  meachleau"       PRINT tigger         We'll cover the re
st of line 10 in a later article.       INITIAL THOUGHTS     This disc menu prog
ram could be run at any time, so it must make sure that     the computer, and in
 particular the  screen,  is set up properly.  This is     all handled in line 2
0.  We make use of three firmware calls, machine code     routines which are bui
lt in to the computer.  They are       &BB4E  TXT INITIALISE            Among ot
her things, resets the pen and paper colours, and moves thntime  moves  the  poi
nter about in        response to the cursor keys.       50 after removing the  c
ursor,  reads  twelve  characters  off the screen,        using the machine code
 entered in line  10.  We now encounter the WEND,        whose WHILE was halfway
 through line  30.   If  we get past the WEND we        know that we either want
 to run  a  file, or change to a different user        area on the disc.  If the
 ninth character is a full stop, we can assume        that the string  is a file
name, and   Ncy     xMAX(0,MIN(632,x+3*((INKEY(8)-1)-(INKEY(1)-1))*(4+3*(INKEY(2
1)-1))))     yMAX(15,MIN(399,y+3*((INKEY(2)-1)-(INKEY(0)-1))*((INKEY(21)-1)+2)))
     MOVE b,cPRINT CHR$(215)MOVE x,yPRINT CHR$(215)WEND  50 GOSUB 80MOVE x,yPRIN
T CHR$(215)p(x160)*20+1q(400-y)16+1LOCATE p,q     CALL a,f$WENDTAGOFFIF MID$(f$,
9,1)"." THEN MEMORY HIMEM+34CALL &BBBA     MODE 1RUN f$  60 u16WHILE u AND -16LO
CATE 1,vPRINT"User "+CHR$(20)LINE INPUT u$     uVAL(u$)WENDIF u$"" THEN USop.  T
he colour that appears  on  the screen is a XOR b.  So,     if b is 0, then the 
colour stays as a.  If b is 1, then the colour changes     from 0 to 1 or from 1
  to  0.   In  either  case, printing colour b on top     again means that we en
d up with what  we started with.  This makes it easy     for us to move our poin
ter about on the screen without worrying about what     is underneath it.       
The position of the pointer is held in  the variables x and y, and these     are
 set up to place it near tER,uCLSCATvVPOS(#0)  70 WEND  80 WHILE INKEY(47)+INKEY
(18)+INKEY(9)-3WENDWHILE INKEY$""WENDRETURN       Figure 1  ng9000,c%  130 PRINT
PRINT"The letter at the top left of the screen is a "CHR$(c%)  190 DATA DD,66,01
,DD,6E,00,CD,60,BB,77,23,36,00,C9   $$$ r))T    Figure 2.71 she  top of the scre
en.  After cataloguing the     disc, the VPOS function is used to  put  the Vert
ical POSition of the text     cursor into variable v.  As disc catalogues vary i
n length, we have to use     VPOS to find out where the cursor has ended up.  Va
riable v is used in the     LOCATE command in line 60 to ensure  that  the "User
" prompt is always in     the right place, just below the end of the disc catalo
gue.       END OF FILE     The program ends in line 50 when  the selected file i
s RUN.  Somee            cursor to the top left of the screen.       &BBBA  GRA 
INITIALISE            Resets the graphics pen  and   paper,  the  size  and orig
in of the            graphics window, moves the graphics cursor  to the bottom l
eft, and            sets the graphics write mode to normal.       &BC02  SCR RES
ET            Sets the inks to their default values.       These three routines 
are a handy  way  of  getting  a lot of things set up     with very few commands
.       After selecting MODE 2, we print  CH programs     may assume that the sc
reen is already  in  MODE  1 as it is when you first     switch on.  Before runn
ing the  program  we  reset the graphics write mode     with another call to &BB
BA and  change  to  MODE  1, as these are the only     things we have altered.  
     FINAL SILLY HEADING     As a challenge you may want to investigate line 40 
as that's what we'll be     looking at next time.  Also, if anyone can explain w
hy Locomotive Software     decided to include the CREAL function in Amstrad R$(2
3)  and CHR$(1) to switch to XOR     graphics mode.  You see XOR mode in  use  a
ll  the  time, as it is used to     display the BASIC text cursor.   We  use  th
is  same effect to display our     pointer.  If you switch on  your  Amstrad,  a
nd  type in the following few     commands, you can see a further demonstration 
        MODE 2       PRINT CHR$(23)CHR$(1)       MOVE 0,372DRAWR 200,0,1       A
 horizontal line should  appear,  cutting  through  some  of the text you     ty
ped.  Type the last line BASIC, we'd be interested     to know!      10 DEFINT a
-zMEMORY HIMEM-34aUNT(HIMEM+1)FOR x0 TO 33READ a$     POKE a+x,VAL("&"+a$)NEXTDA
TA CD,78,BB,4C,DD,6E,0,DD,66,1,46,78,B7,C8,23,     5E,23,66,6B,CD,60,BB,77,23,C,
79,E5,CD,6F,BB,E1,10,F2,C9  20 CALL &BB4ECALL &BC02CALL &BBBAMODE 2PRINT CHR$(23
)+CHR$(1)x100y296     CATvVPOS(#0)  30 WHILE 1TAGf$SPACE$(12)WHILE MID$(f$,9,1)"
." AND MID$(f$,8,1)""     MOVE x,yPRINT CHR$(215)GOSUB 80  40 WHILE INKEY(47)+IN
KEY(18)+INKEY(9)-3bxagain,  and  the text will magically (or rather     logicall
y) reappear.  This is all  due  to  the  properties of XOR, as any     logician 
could tell you.               a       b       a XOR b               0       0   
    0             1       0       1             0       1       1             1 
      1       0       Figure 1.6           Figure 1.6 shows the "truth table" fo
r  eXclusive OR.  Imagine that a is     the colour of a pixel on the screen, and
 that b is the colour we are going     to print on t  N  graphics mode.  This is
 turned on in     line 20 by printing CHR$(23) followed  by  CHR$(1).  In XOR mo
de, when you     print a character to the screen it can  be removed by printing 
it again at     the same position, leaving what was  underneath intact.  Thus, i
n line 250     we remove the pointer from its old  position,  and in line 260 pr
int it at     the new position.  Line 40 uses b and  c  instead of oldx and oldy
 to make     it shorter.       TRUTH OR DARE     Let's see how we can alter that
  subro2)-1)-(INKEY(0)-1))*((INKEY(21)-1)+2)))        MOVE b,cPRINT CHR$(215)MOV
E x,yPRINT CHR$(215)WEND       SWIMMING LESSON     It's about time for an explan
ation  of  how  some  of the program works in     detail, so let's dive in and t
ackle the longest line of all.       Line 40 has some very horrible  looking  bi
ts,  as  it is doing a lot of     things at once.  To get an  idea  of  just  ho
w much is squashed in there,     take a look at Figure 1.61.  This lists a subro
utine that does exactly the  utine  to make it more like line 40.     Figure 1.6
18 has exactly the same  structure  as  Figure 1.61 but uses the     same techni
ques as line 40.   These  lines  are  saved as FIG1618 on the     disc.       To
 test the three selection keys, we  can add the INKEY values together.     If no
ne of the three keys is being pressed, the sum will be -3.  We do not     have t
o test that each of the INKEY values is -1 individually.  Doing this     gives u
s line 310 in Figure 1.618.       How do we go about tran   same as line 40, but
 in a  more  conventional  way.  If you want to try it     out, you could type i
t in  and  replace  line  40 with "GOSUB 110".  It is     much slower.  The disc
 menu is saved as DISCMENU.BAS and you can add the     lines in Figure 1.61 by t
yping MERGE"FIG161       Looking at the subroutine to start with,  we test the k
eys by using the     INKEY function.  The number in brackets is  a  code for the
 key we want to     check.  If the  key  is  not  pressed,  then  INKEY  gives  
the  sforming lines  140-190 into 340-390  Time for a     practical lesson in Tr
ue and False.   Turn  your  computer on and type the     following commands     
    PRINT 52       PRINT 33       PRINT 1266       In each case "-1" is printed 
on the screen.  Try these commands         PRINT 25       PRINT 33       PRINT 1
266       This time "0" is printed all three  times.   The reason we get "-1" or
 "0"     printed is that  the  statements  after  the  PRINT  commands  are logi
cal     expressions.  BASICvalue -1,     otherwise, it returns a  number  greate
r  than  -1.   Have  a look in your     manual to find out more.   In  line  110
  we  are checking that the SPACE,     ENTER and COPY keys are not being pressed
.       The position of the pointer is  held  in  the  variables x and y.  Lines
     140-190 check the cursor keys,  and  adjust  two variables, xadd and yadd, 
    which are then added to x and y  in  line 200.  Lines 170 and 210 multiply  
   addx and addy by 3 to make the pointer move at a reasona works out  whether  
a  logical  expression  is true or     false.  If it is true, it evaluates to  -
1,  and if it is false, we get 0.     The expression "52" is true so "-1" is pri
nted but the expression "1266"     is false (because 12 is not larger than 66) a
nd so "0" is printed.       We usually meet logical expressions as part of an IF
 statement         IF logical expr. THEN command       for example         IF ab
 THEN PRINT"a is bigger!"       BASIC works out the value  of  the  logical  exp
reble speed.  We use     INKEY(21) to test the SHIFT key, and if  it is down the
 values of xadd and     yadd are multiplied to make the movement even faster.   
    The other important bit to mention is the printing of the pointer on the    
 screen.  We are using character 215, which is a suitably pointy shape.  To     
allow the pointer to move smoothly  across  the screen, we are printing it     a
t the graphics cursor position.  This feature  is turned on with "TAG" in     li
ne 30.  We are also using the  XOR#Programmers' Patch 2 - WACCI 110, Mar 1997, p
. 14-15     PROGRAMMERS' PATCH 2     By Stephen and Matthew Phillips       Well,
 this month  we  move  from  the  starter  to  a  lightly grilled and     carefu
lly stuffed portion of  program,  delicately  seasoned with tarragon     and chi
ves, and served with a generous helping of verbiage.       40 WHILE INKEY(47)+IN
KEY(18)+INKEY(9)-3bxcy        xMAX(0,MIN(632,x+3*((INKEY(8)-1)-(INKEY(1)-1))*(4+
3*(INKEY(21)-1))))        yMAX(15,MIN(399,y+3*((INKEY(  N 200 is formed in a sim
ilar way.       MAX PACKS     Lines 230-260 are transformed into  430-460  using
 the MAXimum and MINimum     functions.  MAX is passed  several  numbers  and  r
eturns the largest, MIN     returns the smallest.       Look at line 440        
 440 xMAX(0,x)       If x0 then MAX(0,x) will  return  x  so  we are effectively
 saying "xx".     However, if x0, MAX(0,x) will return  0  and  we are saying "x
0", so the     effect is exactly the same as the IF statement in line 240.      
 ORssion,  and unless it is     false (zero), the command following THEN is exec
uted.  Try this         IF -1 THEN PRINT"Minus one is true"       The usefulness
 of True and False  having  numerical  values is that we can     use the -1 and 
0 in arithmetic expressions, for instance         a(52)       PRINT a*3       Yo
u should get -3 appearing.  Five is  bigger  than two, so "52" is true,     so a
 is set to -1.  Printing three times a gives -3.       How does this help us wit
h line 40, then  Well, line 3ANGE SQUASH     Look at line 370.  What is the valu
e  of  addx on the right hand side  We     have just defined it in line 360.  Th
e  right hand side of line 360 can be     inserted into line 370 and line 360 re
moved         370 addx3*addx*(4+3*(INKEY(21)-1))       We can then remove line 3
50 and insert it into line 370         370 addx3*(addx-(INKEY(1)-1))*(4+3*(INKEY
(21)-1))       Similarly, line 340 can be removed         370 addx3*((INKEY(8)-1
)-(INKEY(1)-1))*(4+3*(INKEY(21)-1))         Exac40 is         340 addx(INKEY(8)-
1)       It has exactly the same effect as line  140, but gets rid of the "IF". 
 If     the left cursor key is pressed, then  INKEY(8) will be greater than -1, 
so     "(INKEY(8)-1)" is true and addx is set to -1.  If it is not pressed, addx
     will be set to zero, as the logical expression "(INKEY(8)-1)" is false.    
   In lines 350 and 390 we  subtract  the  INKEY return value from addx and     
addy.  If the key is  being  pressed  INKEY  returns  -1 so subtracting it tly t
he same procedure can be  followed to squash lines 370-400 into     line 410.   
    Now that all those lines have been  squashed into just two we don't need    
 addx and addy anymore.  Lines 370,  410  and  420 can be combined into one     
and line 330 deleted.       Once lines 430 and 440 are combined into         440
 xMAX(0,MIN(632,x))       and lines 450 and 460 into         460 yMAX(15,MIN(399
,y))       we just have to combine the  key-checking  and range-checking parts t
o get     the expressions    means we subtract -1 or, in other words, add 1.    
   Lines 160 and 200 are a bit more tricky to alter.  Taking line 160 as an     
example, if SHIFT is being pressed we  want to multiply by 4, otherwise we     w
ant to do nothing.  An equivalent  to  doing nothing is multiplying by 1.     If
 we choose the logical expression "INKEY(21)-1"  then we get 0 when the     key 
is down and -1 when  it  is  up.   Our  target multipliers are 4 and 1     thoug
h so some manipulation is needed to map the pair 0,-1 to in line 40.       PHEWW
!!     We hope you can understand  the  complicated  expressions  in line 40 now
.     They really are about as bad as things get!       In the next article we w
ill  probably  take  a  good look at the machine     code, and also examine  a  
few  issues  of  compatibility.  Then again, we     might not.         100 REM A
n inefficient subroutine to replace line 40.     110 WHILE INKEY(47)-1 AND INKEY
(18)-1 AND INKEY(9)-1     120 oldxxoldyy     130 addx0addy0     135 REM Check k 
4,1.       If we multiply by 3 then we get  from 0,-1 to 0,-3.  The gap between 
the     pair is now the same as between 4 and 1  so all we have to do is add 4 a
nd     we are there.         SHIFT key position    up      down       INKEY(22) 
            -1       -1       (INKEY(22)-1)        -1      0       3*(INKEY(22)-
1)      -3      0       4+3*(INKEY(22)-1)    1       4         Line 160 can ther
efore be changed to         360 addxaddx*(4+3*(INKEY(21)-1))       Line 400, whi
ch is equivalent to lineeys     140 IF INKEY(8)-1 THEN addx-1     150 IF INKEY(1
)-1 THEN addxaddx+1     160 IF INKEY(21)-1 THEN addxaddx*4     170 addx3*addx   
  180 IF INKEY(2)-1 THEN addy-1     190 IF INKEY(0)-1 THEN addyaddy+1     200 IF
 INKEY(21)-1 THEN addyaddy*2     210 addy3*addy     220 xx+addxyy+addy     225 R
EM Check x & y are on screen     230 IF x632 THEN x632     240 IF x0 THEN x0    
 250 IF y399 THEN y399     260 IF y15 THEN y15     265 REM Remove pointer and re
display     270 MOVE oldx,oldy   N         #Programmers' Patch 3 - WACCI 112, Ma
y 1997, p. 10-12     PROGRAMMERS' PATCH 3     By Matthew and Stephen Phillips   
    Since this article was written in  Lent,  we are offering more frugal fare  
   in the form of a  meagre  ration  of  machine  code and an unusually short   
  introduction.  The  headings  are  from  articles  in  this  month's guest    
 publication, RISC User magazine.       RADIAL PALETTES     Although there have 
been many articles  about  BASIC over the years, and a     few about machinw man
y parameters there are.  If we did     the following             CALL &9000,6,4,
&CDEF       then when the machine code started, the A register would be equal to
 3, to     tell us the number of parameters passed,  and  IX would point to a li
st of     the parameters.  There are two bytes for  each parameter, and the last
 one     in the CALL command comes first  in  the  list!   In this example it wo
uld     look like this             (IX+0)  EF      (IX+1)  CD           (IX+2)  
04      (IX+3)  00       e code, there have  been  hardly  any about how to use 
the     two together.  The advantage of  BASIC  is  that  it  is easy to write a
nd     debug, and there is no need  to  worry  about how and where your variable
s     are stored.  Machine code wins on  speed  and better use of memory.  There
     are also many things that cannot be done with BASIC alone.       BASIC and 
machine code together can  be a very powerful combination.  If     the speed-cri
tical parts of a program  are converted into machine code    (IX+4)  06      (IX
+5)  00         Have a look at the  machine  code  in  Figure  2.   The number x
 will be     stored at (IX+0), as it is  the  last  parameter  in the list.  If 
it were     bigger than 255 then part of the number would be at (IX+1) as well, 
but we     have ignored this case.  The  number  is  loaded  into the B register
, and     then a loop is executed to print the "" characters.       CHANGING THE
 LIGHT     Suppose we want to return a value  to BASIC from the machine code  Ag
ain,    and     the rest left as BASIC, you can end up  with almost as good a re
sult as if     the whole lot were written in machine code, but with much less ha
ssle.       This month we will take a  quick  look  at  the essentials of how to
 get     BASIC and machine code to work  together,  then  next time we will see 
how     this applies to our disc menu.       TURNING THE WORLD GREY     Some pie
ces of machine code stand happily on their own, such as using CALL     &BB4E to 
reset parts  of  the  screen.   Often  PRINT CHR$(215)     280 MOVE x,yPRINT CHR
$(215)     290 WENDRETURN       FIGURE 1.61           300 REM A better subroutin
e to replace line 40.     310 WHILE INKEY(47)+INKEY(18)+INKEY(9)-3     320 oldxx
oldyy     330 addx0addy0     335 REM Check keys     340 addx(INKEY(8)-1)     350
 addxaddx-(INKEY(1)-1)     360 addxaddx*(4+3*(INKEY(21)-1))     370 addx3*addx  
   380 addy(INKEY(2)-1)     390 addyaddy-(INKEY(0)-1)     400 addyaddy*((INKEY(2
1)-1)+2)     410 addy3*addy     420 xx+addxythough  we  need BASIC and     machi
ne code to communicate.  For example  you might want a BASIC variable     to aff
ect what the machine code does.  The obvious way to do this would be     to POKE
 the value of the  variable  into  a  memory location, and then the     machine 
code could read that location and act on the information.       Figure 2 gives a
 better method.  The  BASIC program pokes in the machine     code in line 190.  
After the  BASIC  we  list the machine code in assembly     language, so thay+ad
dy     425 REM Check x & y are on screen     430 xMIN(632,x)     440 xMAX(0,x)  
   450 yMIN(399,y)     460 yMAX(15,y)     465 REM Remove pointer and redisplay  
   470 MOVE oldx,oldyPRINT CHR$(215)     480 MOVE x,yPRINT CHR$(215)     490 WEN
DRETURN       FIGURE 1.618   By Stephen and Matthew Phillips       Well, this mo
nth  we  move  from  the  starter  to  a  lightlyt you can see what it  does.  T
he BASIC is saved as FIG2     on the disc.       The program asks for a number  
from  the  user,  x, and then prints that     many "" characters.  When the mach
ine  code  is called, using CALL &9000,     the value of x is simply tagged on  
the end after a comma.  Before passing     control to the machine code, BASIC  a
rranges these parameters into a block     in memory, and loads the IX register  
with the address of this block.  The     A register is set up to indicate ho  Nc
an alter     the value of c%.       Try the following commands in BASIC         
    c%5           PRINT c%           PRINT PEEK(c%)       As c% is the address a
t which c% is stored, PEEK(c%) is the value of c%.       Now try             POK
E c%,7           PRINT c%       and as if by magic, c% has changed!       The pr
ogram in figure 2.7  uses  this technique.  The variable's address     is loaded
 into HL, and then the firmware call to read a character from the     screen is 
used.  The  value  retuwe had done             c%2000CALL &9000,c%       then we
 would get back  some  very  funny  results  if we didn't zero that     second b
yte.       The reason we keep using integer variables is that variables without 
the     percentage sign (real variables),  are  stored  in  a more complicated w
ay     using five bytes rather than two, so it makes it much easier just to stic
k     to integers.       FEATURES MUCH MISSED     Integer variables themselves a
re not  really  quite  as  simple as we just     madrned  in  A  is  then  saved
 in the BASIC     variable before going back to BASIC.       Note that the varia
ble whose address  we  pass must already exist.  That     is why line 120 sets c
% to zero before calling the machine code.       A DOODLE TRANSFORMED     Actual
ly, that isn't quite  the  whole  story,  as  after  saving A in the     address
 pointed to by HL, the machine code goes on to put zero in the next     byte of 
memory.  This is because of the way integer variables are stored.       The basi
c une out, as instead of using  the  two  bytes  to store numbers from 0 to     
65535, they store numbers from -32768 to 32767.       You will very rarely need 
to know  exactly  how they are stored.  If you     are passing a value to machin
e code,  BASIC looks after the storing of the     value in the buffer.  When ret
urning  a  value from machine code to BASIC,     ifit is a single byte value hel
d in an 8-bit register we just use the same     technique as Figure 2.7.  If the
 value  was held in a 16-bit registeit of storage is a byte,  which  can hold a 
number from 0 to     255.  If we want to  store  bigger  numbers  we  need  more
 bytes.  A good     analogy is to look at the  familiar  decimal  numbers.  A si
ngle digit can     express the numbers 0-9, ten different  numbers in all.  To e
xpress bigger     numbers we use another digit, giving  us  ten times as many nu
mbers again     the hundred different numbers from 0  to  99.   We write the "te
ns" before     the "units".  The "tens"  are  termed  "more  signifr pair     su
ch as DE or HL,  then  usually  we  will  get  the right results just by     plo
nking it straight back into the two bytes of the integer variable.       For exa
mple, the firmware call  &BBC6  sets  DE  and  HL  to the x and y     position o
f the graphics cursor,  either  of  which could be negative.  To     return the 
x co-ordinate to a BASIC  integer variable, we would simply put     the contents
 of the E register into the  first byte, and the contents of D     into the seco
nd.  The negative nicant"  than the units     because they help us to express bi
gger numbers.       In the same way using two  bytes  enables  us to store 65536
 ( 256*256)     numbers from 0 to 65535.  The  more  significant  byte, which al
lows us to     store numbers bigger than 255, is  placed  after the first byte i
n memory,     unlike the way we write decimal numbers, where the more significan
t digits     come first.       Amstrads put the most significant byte  after the
 least significant byte     because that is how th  the obvious way  would  be  
to  store  the  value  in  a particular memory     location which could then be 
PEEKed by BASIC.       Figure 2.7 gives a  more  flexible  method.   The  listin
g is saved as     FIG27.  The machine  code  is  called  with  CALL  &9000,c%.  
 c% is an     integer variable.  The ""  in  front  means  that  instead of pass
ing the     value of c%, we are passing the  address  in memory at which it is s
tored.     The idea is that if we alter  the  contents  of this address, we e  Z
80  processor  controlling our computers prefers     it.  This method is called 
 "Little  Endian" arrangement, to be contrasted     with "Big Endian", as used b
y  the  Apple Macintosh, among others, and not     to be confused with anything 
to do with boiled eggs.       For numbers smaller than 256, the second byte will
 always be zero, so as     we are returning a value between 0 and 255, we need t
o set the second byte     to zero just to make sure  we  overwrite any previous 
value.  For example,     if   N byte is the length of  the string, and the next 
two bytes     give the address at  which  the  actual  characters  in  the strin
g can be     found.       When passing the address of a  string  variable to mac
hine code, we must     make sure that the variable already exists,  and that it 
is long enough to     hold what we want the machine code to store in it.  Line 1
20 takes care of     this by setting a$ to be a space.       The machine code fi
rst loads the  address of the string descriptor block     into 130 PRINTPRINT"Th
e letter at the top left of the screen is a "CHR$(c%)     190 DATA DD,66,01,DD,6
E,00,CD,60,BB,77,23,36,00,C9       DD 66 01      LD H,(IX+1)     DD 6E 00      L
D L,(IX+0)     CD 60 BB      CALL 0BB60h     77            LD (HL),A     23     
       INC HL     36 00         LD (HL),0     C9            RET       Figure 2.7
           100 MEMORY &8FFFa&9000FOR x0 TO 14READ a$POKE a+x,VAL("&"+a$)NEXT    
 110 MODE 2PRINT"Silly string"     120 a$" "LOCATE 1,1CALL &9000,a$     130 PRIN
Tumbers will look after themselves.       SMALL BUT INDISPENSABLE     String var
iables are stored in a very different way from integers.  If you     have a stri
ng variable a$, then  a$  gives  us  the address of the string     descriptor bl
ock for a$.  The string descriptor block is three bytes long,     and the first 
byte is the length of a$.  Try it out             a$"Hello"           PRINT PEEK
(a$)       The next two bytes give us the  address  at which the actual characte
rs in     the string are storPRINT"The letter at the top left of the screen is "
a$     190 DATA DD,66,01,DD,6E,00,23,5E,23,56,CD,60,BB,12,C9       DD 66 01     
 LD H,(IX+1)     DD 6E 00      LD L,(IX+0)     23            INC HL     5E      
      LD E,(HL)     23            INC HL     56            LD D,(HL)     CD 60 B
B      CALL 0BB60h     12            LD (DE),A     C9            RET       Figur
e 2.71  reed.  The following  commands  put this address into the     variable a
ddr, and then print out the characters in the string             lengthPEEK(a$) 
          addrPEEK(a$+1)+256*PEEK(a$+2)           FOR z0 TO length-1PRINT CHR$(P
EEK(addr+z))NEXT       It is basically a very slow way of doing PRINT a$.       
Figure 2.71 saved as FIG271  on  the  disc  puts this knowledge into     practic
e with another little example to read a character off the screen.         There 
is quite a bit   more  to  s#Programmers' Patch 4 - WACCI 113, June 1997, p. 11-
12     PROGRAMMERS' PATCH 4     by Matthew & Stephen Phillips       We find fine
ly grated  Parmesan  cheese  sprinkled  generously over a good     plateful of s
paghetti produces a  plain,  nutritious, but stringy meal.  A     popular altern
ative from the Orient is egg noodles, but we would recommend     the following a
rticle, which  is  equally  stringy  and requires plenty of     black pepper.   
    STRINGING ALONG     Last month we finished off with an etring  handling  tha
n you might think.     After you have run the above program, list it again, and 
have a close look     at line 120.  An interesting effect, isn't it       Next m
onth we will run  over  the  main  points  of  how to handle BASIC     strings i
n machine code, and go over  the  machine code for our disc menu.     In the mea
ntime, have fun playing  around  with  some of the examples, and     see what el
se you can come up with.           100 MEMORY &8FFFa&9000FOR x0 TO 10READ a$POKE
 a+x,xample of changing a BASIC string from     machine code.  Here it  is  agai
n  in  Figure  2.71.   The program reads a     character from the screen  and  p
uts  it  into  the  string of our choice.     The BASIC version is saved as FIG2
71 on the disc.       Just to recap, unlike with numeric variables, where a% giv
es the actual     address where the number held in a% is stored, for a string, a
$ gives the     address of the string descriptor block for  a$.  This block is t
hree bytes     long.  The firstVAL("&"+a$)NEXT     110 PRINT"Enter number (1 to 
255)"INPUT x     120 CALL &9000,xPRINT     130 GOTO 110     190 DATA DD,46,00,3E
,40,CD,5A,BB,10,FB,C9       DD 46 00              LD B,(IX+0)     3E 40         
        LD A,""     CD 5A BB              loop CALL 0BB5Ah     10 FB            
     DJNZ loop     C9                    RET       Figure 2           100 MEMORY
 &8FFFa&9000FOR x0 TO 13READ a$POKE a+x,VAL("&"+a$)NEXT     110 MODE 2PRINT"Bunn
ymen"     120 c%0LOCATE 1,1CALL &9000,c%        N         properly.  It is bette
r  to  stick  to altering the contents of     the string alone.       POP IT ON 
A STRING     At long last we will have a  good  look  at the machine code from t
he disc     menu program in the February  article.   The  assembly listing is gi
ven in     Figure 2.718, followed by  a  BASIC  program  to  poke  it into memor
y and     demonstrate its use.  This is saved as FIG2718 on the disc.       Line
 20 shows how  the  machine  code  can  be  called.   The job of the     machine
 code way, and if your program defines     a string by saying a$" ", it sets  up
 the string descriptor block so that     the address pointing to the  characters
  just  points  back to the line in     BASIC where you defined the string!   Th
e  address  is changed to point to     somewhere in the string  area  as  soon  
as  you  alter  the string with a     command like a$a$+"extra", or similar cons
tructions.  Before this happens     though, any machine code altering the conten
ts of a$ would also change the     Bis  to  read  characters  from  the  screen,
  starting at the     current cursor position.  The results are placed in the st
ring passed from     BASIC.  The machine code looks to  see  how  long this stri
ng is, and then     reads this many characters from the screen and places them i
n the string.       There are plenty of comments in the listing to make it easie
r to follow,     but the three firmware calls need more explanation       &BB78 
 TXT GET CURSOR            Returns the current  text  cursor  positASIC program 
line as a side effect.       This does not really matter in our  little example.
  All we wanted to do     was to make sure that a$ was  one  character long, and
 a$"S" does just as     well as a$" ".  Often though,  it  could produce undesir
able consequences     (bugs).  The machine code cannot tell whether the characte
rs of the string     are part of the BASIC program or stored  in the string area
.  What we need     is a way of forcing BASIC to  store  the string in the strin
g area, rather   ion.   The  x-coordinate is            returned in H, and regis
ter  L  holds  the y-coordinate.  All other            registers apart from AF a
re preserved.       &BB60  TXT RD CHAR            Looks at the current  cursor  
position  to  see  if  a character is            present and identifiable.  The 
pen and paper that the character was            printed in have to be the same a
s  the current paper and pen for it            to be recognized.  If there  is  
a  character there, Carry is true,            and  than pointing back to the BAS
IC program.       If you just want  to  define  a  string  of  a  certain  lengt
h, say ten     letters, just use         10 a$SPACE$(10)       If you wanted it 
to contain particular characters, then         10 a$""+"This string"       does 
the trick quite nicely.  BASIC  doesn't  spot that the final value of     a$ is 
contained in that  line,  and  just  shoves  the result off into the     string 
area without further ado.       HOW LONG IS A PIECE OF STRING     Machine codHL,
 then the address of  the  string  itself  is loaded into DE.  The     character
 returned in register A by the firmware call is then put into the     start of t
he string.  It would  have  been  more responsible to check that     the string 
was the right length  before  altering  it, but that would make     for a rather
 complicated example.       When you run the program, as  well  as  changing  a$
 to "S" and printing     this on screen in line 130, if  you  list it again afte
rwards you will see     that e can look at the first  byte in the string descrip
tor block to     find out the length of the  string.   You  are  not supposed to
 alter this     byte, which  means  that  you  cannot  change  the  length  of  
any string     parameter passed to machine code.       On the 464 it is possible
 to  make  a  string shorter by simply poking a     smaller value into the first
 byte of the string descriptor, but if you try     this trick with other version
s of the CPC you will find that the memory is     not reused line 120 has change
d and now says a$"S" at the start.       This is probably not quite what you  wo
uld expect.  All that the machine     code did was place a byte into  the  memor
y  address pointed to by DE, and     the DE register has been loaded with the ad
dress of the first character in     the string.       Normally this address woul
d point to somewhere in the "string area", the     memory just below HIMEM where
 the characters in the strings are kept.  But     BASIC can be quite economical 
in its  own   N A will hold the character number.  Otherwise Carry is false and 
           A is zero.  All the other registers are preserved.       &BB6F  TXT S
ET COLUMN            Sets just x-coordinate of the text  cursor  to a new positi
on, held            in A.  Registers AF and HL are corrupted, and all others pre
served.       NO STRINGS ATTACHED     Well, two articles to explain just 34 byte
s  of machine code must be a bit     of a record.  Although  it  is  quite  simp
le  code,  it demonstrates some     useful tech (DE),A     C9            RET    
   Figure 2.71           initialisation - find cursor location and find address 
and length of string       CD 78 BB  CALL 0BB78h       get current cursor positi
on into HL     4C        LD C,H            put x-coordinate into the C register 
    DD 6E 00  LD L,(IX+0)       load HL with string descriptor block address    
 DD 66 01  LD H,(IX+1)     46        LD B,(HL)         load B with the length of
 the string     78        LD A,B     B7        OR A              check ifniques.
  A lot of people who start learning machine code do not     really end up makin
g much use of it, as it is so much easier to program in     BASIC.  Learning how
 to get BASIC  and machine code working together means     you can have the best
 of both  worlds   BASIC which is quick to write and     easy to debug, and mach
ine code for extra speed where you need it most.       Some of you may be wonder
ing why there  was any machine code at all.  It     would have been much easier 
to  use  the  COPYCHR$ f the length is zero     C8        RET Z             if s
o, exit...     23        INC HL            point HL at the low byte of the strin
g address     5E        LD E,(HL)         load it into E     23        INC HL   
         move on to the high byte of the string address     66        LD H,(HL) 
        load it into H     6B        LD L,E            copy low byte to L (so HL
 holds string address)       main loop - transfers B characters from screen into
 string at HL       CD 60 BB  loop CALL 0BB60h unction.  The whole of     our ex
ample program could be rewritten like this       20 MODE 2CATvVPOS(#0)f$""LOCATE
 1,4FOR x1 TO 12f$f$+COPYCHR$(#0)     NEXTLOCATE 1,v     30 PRINT"The first file
 on this disc is "f$         The reason is that the disc  menu  was  written on 
a CPC 464, which does     not have the COPYCHR$ function, so we  had to use some
 machine code.  Even     if you have a 664, 6128  or  a  Plus  machine,  it is w
orth knowing how to     avoid using the COPYCHR$ function so that get character 
from screen     77        LD (HL),A         put it into string storage space    
 23        INC HL            move on to next character in string     0C        I
NC C             C holds cursor x-coordinate - increase it     79        LD A,C 
    E5        PUSH HL           save HL to the stack (next routine corrupts HL) 
    CD 6F BB  CALL 0BB6Fh       set text cursor x-coordinate to value in A     E
1        POP HL            restore HL from the stack     10 F2     DJNZ loop    
     decreayou can write programs that work     on all of the CPCs.  Of course t
he machine code runs faster than the BASIC     alternative as well.       WRAPPI
NG UP     Next month we will be returning to BASIC for  a last look at a few mor
e of     the tricks used in February's disc  menu  program.  After that, who kno
ws     Perhaps we could have a go  at  another  language  such  as C, if there i
s     enough interest, or even see how to control a MIDI interface.  Then again,
     there is a lot more BASIC for us to ese B, and if not zero jump back to loo
p     C9        RET               return whence we came (to BASIC)     10 DEFINT
 a-zMEMORY HIMEM-34aUNT(HIMEM+1)FOR x0 TO 33READ a$POKE a+x,VA      L("&"+a$)NEX
TDATA CD,78,BB,4C,DD,6E,0,DD,66,1,46,78,B7,C8,23,5E,23,66,6B,      CD,60,BB,77,2
3,C,79,E5,CD,6F,BB,E1,10,F2,C9   20 MODE 2CATvVPOS(#0)f$SPACE$(12)LOCATE 1,4CALL
 a,f$LOCATE 1,v   30 PRINT"The first file on this disc is "f$       Figure 2.718
  ly grated  Parmesan  cheese  sprinkled  generously oxplore.           100 MEMO
RY &8FFFa&9000FOR x0 TO 14READ a$POKE a+x,VAL("&"+a$)NEXT     110 MODE 2PRINT"Si
lly string"     120 a$" "LOCATE 1,1CALL &9000,a$     130 PRINTPRINT"The letter a
t the top left of the screen is "a$     190 DATA DD,66,01,DD,6E,00,23,5E,23,56,C
D,60,BB,12,C9       DD 66 01      LD H,(IX+1)     DD 6E 00      LD L,(IX+0)     
23            INC HL     5E            LD E,(HL)     23            INC HL     56
            LD D,(HL)     CD 60 BB      CALL 0BB60h     12            LD  N16 gr
aphics coordinates  per  text coordinate, all we need     to do is integer divis
ion by  16.   It  is  not quite that simple however,     because the graphics co
ordinates  start  counting  from  the bottom of the     screen (as if you were  
drawing  a  graph)  and the text coordinates start     from the top (as if  you 
 were  writing).   To  solve this problem we just     subtract y from 400.  This
 gives  a  large  value  when y is small (at the     bottom of the screen) and a
 small  value  at  the  top piece of machine     code to do this job, but first 
the  text cursor need to be  LOCATEd to the     position on screen where we want
 to start reading.       We have used the following  expressions  to calculate t
he text coordinates     needed               p(x160)*20+1             q(400-y)16
+1       where x and y are the graphics coordinated of our pointer, and p and q 
are     the text coordinates we need.       Before writing expressions such as t
hese, it pays to work out exactly what     you want to do.  Put a disc in  the  
drive, switch to MODE 2 and catalogue     it.  You will find that four  columns 
 of filenames are printed on screen.     The text cursor needs to be  positioned
  at  the start of whichever of the     four columns the pointer is in.       Si
nce the screen is  640  graphics  coordinates  across,  each of the four     col
umns displayed is 160 coordinates wide.  Our expression in line 50 uses     the 
integer division operator, "".  This  operator has the same effect as     using 
norma#Programmers' Patch 5 - WACCI 114, July 1997, p. 26-27     PROGRAMMERS' PAT
CH 5     By Stephen and Matthew Phillips       What gastronomic delights await u
s  for  the  final  course  As the sweet     trolley of programming wheels  its 
 way  through  the obstacles of integer     division and two's complement binary
, we  find ourselves thinking "Shall I     have the strawberries", and  "Who's  
paying  the  bill".   (Coffee to be     served in the lounge.)       All that re
mains in order to round  off the dl division and throwing away  the part after t
he decimal point.     Dividing the x coordinate by 160 in this way results in a 
number from 0 to     3, corresponding to the four columns  of  text.  The follow
ing table shows     what we need to achieve       Graphics      Column     Text 
    x-coordinates            x-coordinate         0-159       0          1     1
60-319       1          21     320-479       2          41     480-639       3  
        61       If we then multiply the column number by  20, thisc cataloguing
 program is to     explain some of lines 50  and  60.   Since  it  was February 
that we first     looked at the program, we've  asked  John  to  print  the list
ing again in     Figure 1.  And you can load it from the disc as DISCMENU.BAS   
    Line 50 is reached when the WHILE condition in line 40 is false, i.e. when  
   one of the three selection keys is  pressed.  The first thing line 50 does   
  is call the subroutine in line 80  which waits until the user has released    
 the selectioat will give us 0, 20, 40,     60, which is the correct separation 
for  the text cursor.  We just need to     add 1 to get the right text coordinat
e.   Try  it out in stages with a few     example x values if you like, so that 
you can see how it works.       The expression for q is simpler in one way - all
 we want to do is set q to     be the text line that the graphics  cursor  is on
.  There are 400 graphics     coordinates vertically, and 25  text  coordinates.
   You  might think that     since there are n key and then clears the  input bu
ffer.  Then line 50 removes     the pointer from the screen before trying to wor
k out what the user wanted     to select.       When a selection key is pressed,
 there are three possible cases       1. The pointer is over a filename.     2. 
The pointer is over the "user  0" statement.     3. The pointer is over neither 
of the above.       To find out which case we have,  we  need to read some chara
cters from the     screen.  As explained in the previous article,  we have a  Ne
 20).     The line used to look a lot simpler  but Matthew came up with an ingen
ious     way of making it less than  readable.   If  for  the  moment we imagine
 it     says "WHILE u0 OR u15" rather  than  "WHILE  u  AND -16" then it will be
     easier to explain.       Initially u is set to be 16 (an  invalid  user num
ber) so that the code in     the WHILE-WEND loop is executed at least once.  The
 cursor is LOCATEd just     under the disc catalogue  (using  v)  and  the  "Use
r" prompt is printed.     Th  See a later article for more details.       To wor
k out "u AND -16", we write down  the value of u in binary, with -16     written
 out beneath, and AND each bit  of u in turn with the corresponding     bit belo
w.  When you AND two bits then you only get a one as the result if     both the 
bits were one.  For example, if u is 87 we get       u          0000000001010111
     -16        1111111111110000                ----------------     u AND -16  
0000000001010000       It is quite easy to see that u  ANere are two things to n
otice about  the PRINT statement, firstly that we     print CHR$(20) too.  Chara
cter 20 is  a control character which clears the     whole of the screen from th
e  cursor  onwards.  This ensures that there is     no mess anywhere.  Secondly,
 there is a  semicolon at the end.  This means     that the cursor remains on th
at  line  for the input rather than beginning     again at the start of the next
 line.       The next statement is "LINE INPUT u$".   Input into a string was ch
osen so  D  -16 will only be zero when the binary     form of u has zeros where 
-16  has  ones.   Where  -16 has zeros, u can be     anything we like, and it so
 happens that the numbers with zeros in the top     twelve bits and zeros and on
es in  the  bottom four bits are the numbers 0     to 15, the valid user numbers
!       COMPLIMENTARY MINTS     The Amstrad uses  the  common  two's  complement
  method  to store integer     variables.  It is called  two's  complement  to  
distinguish it from one's     complement    that no errors occur if something ot
her than a digit is typed.  Using LINE     INPUT means that  even  commas  can  
be  typed  and  it  will not complain     (ordinary INPUT will give an  error  i
f  a  comma  is used when it doesn't     expect it).  While most users will  do 
 what we expect, good programs cope     with the unexpected too.       To find o
ut what number was typed, we set  u to be the numeric VALue of u$     and the WE
ND then loops back if u is not a valid user number.  If the user     does of the
 screen - the     same as the text cursor.  We can then  do integer division by 
16 and add 1     to finish off.       After p and q have been calculated, the  t
ext cursor is LOCATEd at p,q and     the machine code called to put  the  next  
12 characters into f$.  We then     hit a WEND.  The WEND refers back to the sec
ond WHILE condition in line 30     that says to keep looping until either the  9
th character of f$ is a full-     stop (on a filename), or the 8th  character  i
s  a colon (at the "Driven't type anything and just presses the Enter/Return key
 then u will be     set to 0 - a valid user number  -  and  u$ will be empty.  I
n this case we     assume that the user did not really want  to change the user 
number.  As a     programmer it is wise  to  realise  that  users  do  not alway
s select the     options they intend to, and we  can  anticipate  this by provid
ing an easy     way out in such situations.   That  is  why  the  rest  of the l
ine is not     executed if u$ is empty.       WHILE AWAY  A     user  0" positio
n).  If we fall through  the WEND and the 9th character is     a full-stop then 
the program with filename  f$ is run (as discussed in the     first article).  O
therwise we need to  ask  the  user which user number to     change to.       US
EFUL USER UTILITY     Line 60 loops until a valid user  number is entered, chang
es the user area     to that number, clears the screen,  recatalogues  the disc 
and resets v to     be the y-coordinate of the text  cursor  (v  is initially se
t in linTHE TIME     So why does "WHILE u AND -16"  mean  the  same as "WHILE u0
 OR u15"  It     may make more sense when you know  that -16 in binary is 111111
1111110000.     The WHILE loop will keep going until the condition is false, whi
ch in this     case happens only when "u AND  -16"  is  zero.  We have since dis
covered     that this condition does not work properly  on  the CPC 464, as ther
e is a     bug in BASIC 1.0.  If you type in a  value of u that is a multiple of
 256,     it will let it through...  Nwhich is never used  anyway!   The  basic 
idea is that negative     numbers are stored as large positive numbers.  The lar
gest number that can     be stored in 16 bits  is  65535,  also  known  as FFFF 
in hexadecimal, and     1111111111111111 in binary.  When we use two's complemen
t, we pretend that     it means minus 1 instead.  Similarly  we  let  65534 stan
d for -2.  65525,     ten less than 65535, stands for -11, which  is ten less th
an -1, and so on     until we meet up somewhere in the middle       - Next month
 we shall  begin  dissecting another small program, till     then perhaps you co
uld  think  of  a  good  reason  why  there isn't a key     numbered 78  Have fu
n!      10 DEFINT a-zMEMORY HIMEM-34aUNT(HIMEM+1)FOR x0 TO 33READ a$POKE a+x,VAL
     ("&"+a$)NEXTDATA CD,78,BB,4C,DD,6E,0,DD,66,1,46,78,B7,C8,23,5E,23,66,6B,CD 
    ,60,BB,77,23,C,79,E5,CD,6F,BB,E1,10,F2,C9  20 CALL &BB4ECALL &BC02CALL &BBBA
MODE 2PRINT CHR$(23)+CHR$(1)x100y296C     ATvVPOS(#0)  30 WHILE 1TAGf$SPACE$(327
68  1000000000000000     +32767  0111111111111111       As you see, the largest 
 positive  number  allowed  in two's complement is     32767, and it has the top
 bit zero in binary.  The most negative number is     -32768, which has the top 
bit set.  In fact, all the negative numbers have     one in the top bit, and all
 the positive numbers have the top bit clear.       A good  analogy  for  two's 
 complement  arithmetic  is  the  clock  face.     Sometimes we count from 1100 
to  1159,  and  have  up to12)WHILE MID$(f$,9,1)"." AND MID$(f$,8,1)""MOVE      
x,yPRINT CHR$(215)GOSUB 80  40 WHILE INKEY(47)+INKEY(18)+INKEY(9)-3bxcyxMAX(0,MI
N(632,x+3*((INKEY(8)     -1)-(INKEY(1)-1))*(4+3*(INKEY(21)-1))))yMAX(15,MIN(399,
y+3*((INKEY(2)-     1)-(INKEY(0)-1))*((INKEY(21)-1)+2)))MOVE b,cPRINT CHR$(215)M
OVE x,yPR     INT CHR$(215)WEND  50 GOSUB 80MOVE x,yPRINT CHR$(215)p(x160)*20+1q
(400-y)16+1LOCATE p,q     CALL a,f$WENDTAGOFFIF MID$(f$,9,1)"." THEN MEMORY HIME
M+34CALL & 59 minutes from     eleven o'clock.  Or we can  look  at  it  another
  way and after half past     eleven we start saying 29 minutes to  twelve.  59 
minutes past eleven then     becomes 1 minute to  twelve  or  if  you  prefer,  
twelve  o'clock minus 1     minute.       Most of the time you do not  need  to 
know anything about how the computer     stores numbers, but occasionally it is 
 useful.   If  you want to find out     what -23 is in binary, the  easiest  thi
ng  to do is type PRINT BIN$(-23),     butBBBAM     ODE 1RUN f$  60 u16WHILE u A
ND -16LOCATE 1,vPRINT"User "+CHR$(20)LINE INPUT u$uVAL(     u$)WENDIF u$"" THEN 
USER,uCLSCATvVPOS(#0)  70 WEND  80 WHILE INKEY(47)+INKEY(18)+INKEY(9)-3WENDWHILE
 INKEY$""WENDRETURN       Figure 1      $$$PATCH 5     By Stephen and Matthew Ph
illips       What gastronomic delights await us  for  the  final  course  ffffff
ffff if you really want to know, this is how to do it by hand       1. Write dow
n the positive number in binary.     2. Take the complement (change each 1 to 0 
and each 0 to 1).     3. Add on one.       For example with -23       23 in bina
ry  0000000000010111     Complement    1111111111101000     Add on one    111111
1111101001       so -23 is 1111111111101001.       If you are feeling really  ke
en  on  maths  homework, you could try adding     together 23 and -23 in binary,
  just  to  check  that you get nought.  You     will actually get 1 with sixtee
n zeros after  it, but as we can only store     sixteen bits in our integer vari
ables, it's as good as nought really.       COFFEE TIME     We hope that there i
sn't anything more to say about that program.  It must     be quite a record tak
ing  six  months  to  explain  such  a short piece of     BASIC.  With a bit of 
luck  you  now  have  a  useful utility and a better     understanding of some o
f the more  advanced  tricks  one  can get up to in     BASIC.   Nment  by  sett
ing it to zero.  We will do     some examples of what it is useful for later.   
    SIZING IT UP     On line 20 mcol determines the  colour  of  the  menu  bar.
  If you have a     background of PAPER 0, then mcol should be  set to the PEN c
olour you want     for the menu bar.  As the menu  bar  is  printed up using XOR
 graphics, if     you have a different background things are  more complicated. 
 If x is the     background pen, and y the pen you want  for the menu bar, then 
mcol should     beasis of  several  example  programs  over  the  next few artic
les.     This is saved on the disc as MENUSUB       In fact the subroutines will
 squash down  into just two lines.  Lines 1000     to 1009 can all be typed in  
together  as  line  1000, and the rest of the     lines can all be typed in as l
ine  1010.  Although it would have been more     impressive to show off with a t
wo-line  menu  system, we have listed it in     eighteen lines to make it easier
 to follow.       Once you have saved the  sub set to               x XOR y     
  The rest of the variables on line 20  are  to do with where the menu is on    
 screen and how big the menu bar should be.  For example we could print the     
menu more spaced out by altering line 50       50 FOR x1 TO mchPRINTPRINT"  Item
"xNEXT       Run the program again.  Although the menu text is spread out, the m
enu bar     is still in the same position as  before.  To correct this you could
 alter     line 20 as follows       20 mcol1msp32mx24my399-3*16+8routines,  you 
 can  then  type in the earlier     lines in the listing and run it to see the f
irst example.  This is saved     as MENUEX1.BAS       HOW DOES IT WORK THEN     
Don't worry about how the  subroutines  work  to  start with.  It is quite     e
asy to use them in programs  without  knowing  how  they do the work.  In     fa
ct that is one of the good  things about subroutines.  Once you have one     tha
t works and does the  job  you  want  doing,  you  shouldn't need to be     both
ered with ho#Programmers' Patch 6 - WACCI 115, Aug/Sept 1997, p. 26-27     PROGR
AMMERS' PATCH 6     By Stephen and Matthew Phillips       "What's on the menu fo
r this month",  we  hear you cry.  Well, if you had     known what the article  
was  going  to  be  on,  you  would  be ashamed at     phrasing the question lik
e that, as it  is such a predictable pun, and not     really up to the standard 
of humour  we  can expect from WACCI.  But since     you didn't know, we'll pret
end to find it amusing and then get on withw it works any more.       Instead, l
et us have a look at how the main program (lines 10 to 90) works     in relation
 to the  subroutines.   Our  example  prints  up  a short menu,     allows the u
ser to move the menu bar up and down with the cursor keys, and     then choose a
 menu item with the  COPY  key.  The program then prints up a     message tellin
g the user which item was selected.       Lines 10 to 30  set  up  some  variabl
es  which  tell  the menu subroutine     important information about the si the 
    article, which strangely is all about menus...       A BREATH OF FRESH AIR  
   To make a change from working our way through a single program, we thought   
  we would present a useful subroutine that  you can incorporate in your own    
 programs.       The easiest way to learn programming is to alter programs writt
en by other     people.  When you get more  experienced  in  a computer language
, you then     find that the easiest way to write a program is to alter one that
 you have     written beforze and  position  of the menu (see Table     2).     
  One of these  variables,  mp,  is  also  used  by  the  subroutine to pass    
 information back to the main program.  In line 10 mp is set to zero, which     
makes the menu bar start off on the  first item on the menu.  Change it to     1
, 2 or 3 and it will start off on one of the other menu items.  After the     pr
ogram has returned from the GOSUB 1000 in line 70, mp tells us where the     men
u bar has ended up.       Ignore the mf variable for the moe.  Programmers tend 
to  build  up  libraries of routines for     performing useful tasks which they 
 can  just  slot  in to any new program     being written.       AFTER THE LECTU
RE     Lines 1000 to 1017 of Listing 1 form a subroutine for producing menus wit
h     a scrolling bar that the user moves  up  and  down to select the menu item
     required.  Type in lines 1000 to 1017 on  their own and save it in a file. 
    They will not actually do anything on their own, but we will be using them  
   as the b  Nare set up,  the  routines  are really easy to use.  If     you wa
nted to have several different menus in one program, you could do it     just by
 altering a few of the  variables  for  each case, and then use the     same lin
es 1000 to 1017 to provide the basic menu system.       TELL ME MORE     Well, u
nfortunately, we have run out  of  space,  so you will have to wait     until th
e next thrilling instalment,  when  we  will explain all about kf,     and demon
strate a few more interesting menu examples.  e     mbh because the menu bar is 
drawn using the DRAWR (draw relative) command.     Work out the width of the men
u  bar in graphics coordinates, and then take     off one pixel's worth and set 
mbl  to  that.  In line 20 we calculated mbl     as 16*6-2, which is 16 for each
  of  the  six characters of the menu text,     less two, which is the width of 
a pixel in MODE 1.  In MODE 2 you would do     eight times the number of charact
ers, and only take off one.       If in doubt, just experiment with the valuesBe
fore then, have a     go at designing a few  simple  menus  to  get  the  hang o
f setting up the     variables.         mch         Number of choices on the men
u     mp          Menu bar position (zero for first item on menu)     mf        
  Menu flags (to be explained later)     mde         Menu delay     mcol        
Pen to use for the menu bar     msp         Vertical spacing of menu items in gr
aphics coordinates     mx, my      Graphics coordinates of top left of menu     
mbh         Menu bar height in until it looks right!       KEYS TO SUCCESS     I
n line 30 we are telling the menu  routines which keys we want it to take     no
tice of.  We have chosen the  cursor  keys  and  COPY key by setting the     var
iables to the appropriate key numbers, but you could use any other keys     by c
hanging the numbers, or even allow the user to redefine the keys.       The keys
 indicated by "up" and "dow" make the menu bar move up and down on     the scree
n.  The other three keys, "le", "ri"  and "fi" can be used by  graphics coordina
tes     mbl         Menu bar length in graphics coordinates     up, dow     Set 
these to the INKEY numbers of the up and down keys of your                 choic
e     le, ri, fi  Set these to the INKEY numbers of other keys that you want the
                 menu to respond to.     kf          Key flags (to be explained 
later)       Table 2       --------------------------------------       Figure 1
       10 MODE 1mch4mp0mf0mde0     20 mcol1msp16mx0my399-2*16mbh16mbl16*6-the   
  programmer to  provide  other  features.   The  key  flags,  variable  kf,    
 indicate which of these three keys the  routine will look out for.  In our     
example we are only interested in when the user presses COPY to select the     m
enu item.  To do this, kf has been set to 4.  More on how kf works later.       
THE REALLY EXCITING BIT     Once all the variables are set  up,  we  do  GOSUB  
1010 in line 60, which     prints the menu bar up on  the  screen.   The  GOSUB 
1000 in the next line     mbh32mbl16*7-2       Have a play around and try out  d
ifferent values for these variables.  The     msp variable should be set accordi
ng  to  how  far apart the lines of text     are.  If each menu item takes up  o
ne  line, and there are no gaps between     them, msp needs to be  set  to  16, 
 as  there  are  that many graphics y-     coordinates for each text line.  You 
can even have menu text printed every     one and a half lines and set msp to 24
 if you feel so inclined.       The variables mx and mcalls the main menu routin
e, which lets the  user move the menu bar up and     down until the COPY key (in
 this  case)  is pressed.  Line 80 then informs     the user of the position of 
the  menu  bar.   This must be the most useful     menu ever!       If you want 
to remove the menu  bar  from the screen again after returning     from line 100
0, all you have  to  do  is  GOSUB  1010 again.  You might of     course want to
 leave it in place ready for the next time the menu is used.       Once the vari
ables y  hold  the  graphics  coordinates  of the top left     pixel of the menu
 bar when it is  over the first menu item.  All the other     coordinates needed
 are worked out using msp.       Finally the actual size of the  menu  bar  is  
stored in mbl and mbh.  The     height, stored in mbh, is measured in graphics c
oordinates.  This could be     the same as msp, but making  it  larger  or small
er will produce different     effects.       The variable for the length of the 
menu bar, mbl, does not work quite lik  N2     30 up0dow2le8ri1fi9kf4     40 PRI
NT"Menu"PRINT"----"     50 FOR x1 TO mchPRINT"Item"xNEXT     60 GOSUB 1010     7
0 GOSUB 1000     80 PRINT"You have chosen item"mp+1     90 END     1000 kp0md1mz
0     1001 WHILE (kp AND kf)0     1002 WHILE (2mp AND mf)0 OR mz     1003 mz0GOS
UB 1010mp(mp+mch+md) MOD mchGOSUB 1010     1004 WEND     1005 md(INKEY(up)-1)-(I
NKEY(dow)-1)mzmd     1006 kp-(INKEY(le)-1)-2*(INKEY(ri)-1)-4*(INKEY(fi)-1)     1
007 WEND     1008 WHILE INKEY$""Wd respond to  the  "le",  "ri"  and  "fi"  keys
.   Just  add  up the     following values for each of the keys         le      
1       ri      2       fi      4       Thus 3 would mean that only the "le" and
 "ri" keys should be used.       In our example last month, we set kf  to  be 4,
 so that only the "fi" key     (which we had set to be  COPY)  was  detected.   
If  we had wanted to, we     could have set "le" to be  18  and  "ri"  to  be  6
 (the RETURN and ENTER     keys).  Then with kf set to 7, so  thEND     1009 RET
URN     1010 PRINT CHR$(23)+CHR$(1)     1011 MOVE mx,my-mp*msp+(md-1)*(mbh-2)   
  1012 FOR mc1 TO mbh/2     1013 DRAWR mbl,0,mcolMOVER -mbl,-2-(md-1)*4     1014
 FOR delay0 TO mdeNEXT     1015 NEXT     1016 PRINT CHR$(23)+CHR$(0)     1017 RE
TURN  PATCH 6     By Stephen and Matthew Phillips       "What's on the menu for 
this month",  we  hear you cry.  Wella10 10101  B a11 451 459 a11 8131  B a11 53
2 540 a11 9079  B a12 3810 3818 a12 10511  B a12 8454 8460 a12 11768  B a13 2075
 2083at all three keys were detected, the     user could have used the cursor ke
ys  to  move  the menu bar up and down,     and selected the menu item with any 
of the COPY, ENTER and RETURN keys.       ANOTHER MENU, ANOTHER VARIABLE     In 
Listing 1 we have another example  program, which shows another way of     using
 the menu routines, and also helps  you to calculate the value of kf     that yo
u need.  This time fi is 18  for  the  RETURN key, le is set to 47     for the s
pace bar, and we do not need "ri", so#Programmers' Patch 7 - WACCI 116, Oct 1997
, p. 23-24     PROGRAMMERS' PATCH 7     By Stephen and Matthew Phillips       La
st month we started looking at  a  short  routine for handling menus in     BASI
C, and produced a simple selection  menu  with a scrolling bar.  This     month 
we are going to have a go at some more complicated examples.       The routines 
are reprinted this  month  in  lines 1000-1017 of Listing 1,     but you may wan
t to have last month's  article handy to refer to the list     of var it has bee
n left as it is.     The program is saved on disc as MENUEX2.BAS       The progr
am brings in a variable we  have  not yet met.  The keys pressed     are indicat
ed by kp, and it works in  the  same way as kf above.  When we     return from l
ine 1000, if just the  "fi"  key is pressed, then kp will be     4.  If only the
 "le" key was pressed  then kp would be 1.  Of course, the     user might have p
ressed both at once, in which case kp would be 5.       In Listing 1 we  have  i
gnored  the  caseiables used in the program.       In the simple selection menu,
 we  just  needed  to  set up where the menu     was, and how big it was, and th
at was about it.  The routines are capable     of a lot of different  applicatio
ns,  controlled  mainly  by the mf (menu     flags) and kf (key flags) variables
,  along with kp (keys pressed), which     returns information to us after the u
ser has selected a menu item.       FLAGGING DOWN     The kf variable is for con
trolling how  the routines respond to the keys.  s  where  several  keys might b
e     pressed at once.  The WHILE-WEND loop of  lines 110 to 140 goes round and 
    round until kp4, which happens  when  the  RETURN  key is pressed on its    
 own.  In line 130, the commands to  toggle  the values between On and Off     o
nly happen when kp1, when only space is pressed.       Although we could tell wh
en both  of  those  keys are pressed at the same     time, the user is not reall
y giving  a clear indication of what should be     done, so it is more sensible 
  The numbers of the keys  detected  by  the  routines  are held in several     
variables "up" and "dow" tell the routines  which keys to use for moving     the
 menu bar up and down, while "le", "ri", and "fi" are just three other     keys 
that can be detected by  the  routine.   They  do not have to act as     left, r
ight, and fire in any particular way they are just called that to     make them 
easier to remember.       Variable kf is  a  bit-significant  number  showing  w
hether  the routine     shoul  Nis is where the mysterious variable mf comes in.
  It     is another of these bit-significant variables.   In  line 10 mf is set 
to     8+32, or 101000 in binary.  Each  binary  digit, or bit, corresponds to a
     menu item, and a 1 tells the  menu  routine that the item is unselectable  
   and should be rolled over.  The least  significant bit (at the right hand    
 end) refers to the first  item  on  the  menu.   If  you want to use this     f
eature your menu is limited to 16 items.       You can calculateltiply by 10    
 if SHIFT is pressed, or by 1 if  it isn't.  You could get the same effect     w
ith a lot of IF statements in a much simpler, but longer, way.       WHAT ABOUT 
THE SUBROUTINES     Yes, we'll get onto them next  month.   Be patient!  In the 
meantime, why     not alter Listing 2  so  that  you  cannot  order  negative qu
antities of     magazines...           Listing 1       10 MODE 1mch3mf0mde0     
20 mcol2msp16mx0my399-5*16mbh16mbl16*2-2     30 up0dow2le47ri1fi18k mf in variou
s  ways,  and  it really depends on whether     you will need to alter it much. 
  If  mf  is  going to stay the same, the     easiest way is to set it in binary
                 mf&x101000       Otherwise you will probably  have  to  mess  a
round  with  powers of 2 to     achieve the right value.       LOOKING SHIFTY   
  The program as it stands only allows  you  to alter the quantities by one     
at a time.  It would be nice to  be  able  to hold the SHIFT key down and     pr
ess left or right just to  ignore it.  It also makes the BASIC     program much 
simpler for a change!       Just for the record, we ought to point  out  that ev
en if you set kf to 5     to show that you are not interested in the "ri"  key, 
if the user presses     the "le" and "ri" keys together  then  kp  will  be retu
rned as 3, not 1.     There are cases where this might be  a  nuisance, so if yo
u want to avoid     it, you can just say                 kpkp AND kf       strai
ght after the return from line 1000,  and then k to alter the value  by  ten.  T
o do this we will have     to modify the menu subroutine, as we don't have a spa
re key.       Just add onto the end of line 1006                 -8*(INKEY(sh)-1
)       and add "sh21" to line 30.  This tests another key, "sh", which has been
     set up to be the  SHIFT  key.   Eight  will  be  added  to kp if SHIFT is  
   pressed.       We do not need to alter kf because  we do not want control to 
return from     line 1000 if the SHIFT key is pressed  on its own.  Whether tp w
ill only tell you     about the state of the keys indicated in kf.       BACK TO
 THE ISSUE     Our second example this month shows what you might want the "le" 
and "ri"     keys for.  You will need to type in  lines  1000 to 1017 again to g
o with     Listing 2.  The whole working  program  is  saved as MENUEX3.BAS on t
he     disc       The user is presented with an order form for back issues of ou
r favourite     magazine.  The left and right  cursor  keys  adjust  the quantit
y of each     magazine tohe SHIFT key     was pressed is still indicated in kp, 
even  though we set kf to show that     we were not interested in it.       Fina
lly we need to alter  line  150,  where  the quantity of magazines is     adjust
ed       150 num(mp)num(mp)+(((kp AND 1)1)-((kp AND 2)2))*(1-9*((kp AND 8)8))   
      GOSUB 210       The altered version is saved as MENUEX4.BAS on the disc   
    This time we do need to  cope  with  more  than  one key being pressed at   
  once, so the line is a  lot  more  complicate be ordered.  Certain issues are 
out of stock, and so the menu     bar will roll straight over these options  to 
the next one.  You may have     seen similar features on the menus of the Advanc
ed Music System.       Line 150 adjusts the number of magazines according to whe
ther the "le" or     "ri" keys are pressed.  This is a  much simpler version of 
the techniques     we explained in the March article.       How do we tell the m
enu  routine  to  roll over the magazine issues which     are out of stock  Thd 
 than before.  To find out     from kp  whether  a  particular  key  is  pressed
  we  AND  kp  with  the     appropriate value.  Thus if the "sh" key is  presse
d, kp AND 8 will be 8     otherwise it is zero.       Again  we  are  using  the
   results   of   logical  expressions  in  our     calculations.  The important
 point is that  a true statement has value -1     and a false statement gives 0.
  The  first part of the expression gives -     1, 0 or 1 depending on the left 
 and  right keys.  We then mu  N    160 LOCATE 10,mp+6IF ourkf AND 2mp THEN PRIN
T"On " ELSE PRINT"Off"     170 RETURN     1000 kp0md1mz0     1001 WHILE (kp AND 
kf)0     1002 WHILE (2mp AND mf)0 OR mz     1003 mz0GOSUB 1010mp(mp+mch+md) MOD 
mchGOSUB 1010     1004 WEND     1005 md(INKEY(up)-1)-(INKEY(dow)-1)mzmd     1006
 kp-(INKEY(le)-1)-2*(INKEY(ri)-1)-4*(INKEY(fi)-1)     1007 WEND     1008 WHILE I
NKEY$""WEND     1009 RETURN     1010 PRINT CHR$(23)+CHR$(1)     1011 MOVE mx,my-
mp*msp+(md-1)*(mbh-2)     1012 FOR #Programmers' Patch 8 - WACCI 117, Nov/Dec 19
97, p. 15-16     PROGRAMMERS' PATCH 8     By Stephen and Matthew Phillips       
In the last of three articles about menu handling in BASIC we are going to     l
ook at how the routines  we  have  presented  work.   Remember that it is     po
ssible to use the subroutines  yourself  without  having a clue how they     act
ually do the job.  If you want to adapt the subroutines yourself or use     some
  of  the  techniques  in  your   own  programs,  then  the  followmc1 TO mbh/2 
    1013 DRAWR mbl,0,mcolMOVER -mbl,-2-(md-1)*4     1014 FOR delay0 TO mdeNEXT  
   1015 NEXT     1016 PRINT CHR$(23)+CHR$(0)     1017 RETURN             Listing
 2       10 mch6mf8+32mde0     20 mcol1msp32mx124my322mbh22mbl132     30 up0dow2
le8ri1fi47kf7     40 DIM num(mch-1)     50 MODE 1LOCATE 8,3PRINT"WACCI back-issu
es orders"     60 LOCATE 8,4PRINT STRING$(24,"-")LOCATE 1,19     70 PRINT"Use th
e cursor keys to move and alter.  SPACE to finish."     80 FOing     explanation
 may be helpful.  If it  isn't  then  write to Fair Comment and     complain!   
    The routines have been reprinted  for  you  yet  again, along with a table  
   showing all the variables we  use.   The  menu  routine is also saved on     
disc as MENUSUB       WENDING OUR WAY     The main subroutine, lines  1000-1009,
  contains several WHILE-WEND loops.     Line 1008 sees our favourite loop  for 
clearing the keyboard buffer.  This     is done before returning to your  progra
m  in  orR mp0 TO mch-1LOCATE 9,6+mp*2PRINT"WACCI"40+mpGOSUB 210NEXT     90 FOR 
mp0 TO mch-1     100 IF mf AND 2mp THEN LOCATE 30,2*mp+6PRINT"(no stock)"     11
0 NEXT     120 mp0kp0     130 GOSUB 1010     140 WHILE kp4     150 num(mp)num(mp
)+(kp1)-(kp2)GOSUB 210     160 GOSUB 1000     170 WEND     180 mags0FOR x0 TO mc
h-1magsmags+num(x)NEXT     190 LOCATE 1,22PRINT"Thank you for your order."     2
00 PRINT"Please send a cheque for £"USING"##.##"0.5*magsEND     210 LOCATE 27,6+
mp*2PRINT numder to make sure that the     key presses from the menu  selection 
 are  used up' properly.  Try taking     the line out and you will soon see why 
it is useful to have it there.       Lines 1001-1007 form the main  WHILE-WEND  
loop  of the subroutine, within     which there is yet another loop at lines 100
2 to 1004.       The main loop is essentially  all  about  checking  the keys th
at the user     presses.  The "up" and  "dow"  keys  are  detected  in  line  10
05 and the     internal variable "md" is set(mp)RETURN  PATCH 7     By Stephen a
nd Matthew Phillips       Last month we started looking at  a  short  routine fo
r handli,5u/"""DD LdDgint     long    registerreturn  short   sizeoccf5     40 o
urkf0     50 PRINT"Press SPACE to toggle the values On/Off"     60 PRINT CHR$(34
)"Off"CHR$(34)" means the key would be ignored"     70 PRINTPRINT"Press RETURN t
o calculate the kf value"     80 LOCATE 1,6PRINT"le"PRINT"ri"PRINT"fi"     90 FO
R mp0 TO mch-1GOSUB 160NEXTmp0     100 GOSUB 1010     110 WHILE kp4     120 GOSU
B 1000     130 IF kp1 THEN ourkfourkf XOR 2mpGOSUB 160FOR delay1 TO 100NEXT     
140 WEND     150 GOSUB 1010LOCATE 1,10PRINT"The kf value you need is"ourkfEND   
Nes the menu bar.         The first command inside the loop, on  line 1003, sets
 mz to zero again,     making it false.  The menu bar then moves  on  to the nex
t menu item up or     down.  Upon reaching the WEND in line  1004, the bar movin
g loop will only     execute again if the bar is  over  a  prohibited menu optio
n, since mz has     been reset to the false value of zero.         Why did we ne
ed another variable  though  -  could we not just have used     md  We certainly
 need  a  variable  that  shows rst item on     the menu, the next digit along r
efers to the second item and so on.       For example, if mf was 8 (1000  in  bi
nary),  this means that the 1st, 2nd     and 3rd items on the menu  can  be  sel
ected,  but  the  4th item is to be     avoided.  If mf was 12 (1100  in  binary
),  then  the 3rd item must not be     selected either.       The position of th
e menu bar is held in "mp".  For more than one reason we     start counting from
 zero, so mp  is  zero  when  the  menu bar is over the     firs  to  indicate  
which  direction the menu bar     should move, using much the same  technique  a
s in the disc menu programme     we featured in issue 110.  In the next line the
 other keys, "le", "ri" and     "fi" are checked.  The value  of  "kp"  is  set 
according to whether those     keys are pressed or not, as we  explained last mo
nth.  Setting aside lines     1002 to 1004, which do the moving of the menu bar,
 that is all there is to     it.       The main loop keeps going while          
     (kp AND kf)t item on the menu, one when it is over the second item and so o
n.       The expression               (2mp AND mf)0       in line 1002 is design
ed to test whether the menu bar is over a prohibited     item.  (The  symbol is 
the same  as  the  up arrow that shares a key with     the pound sign on your CP
C).  Try out the following on your computer         FOR mp0 TO 6PRINT BIN$(2mp)N
EXT       This prints up 2mp in binary, and you will  see that as mp goes from 0
 to     6, the binary form of 2mp goes0       This provides the mechanism to ign
ore certain keys.  If kf is set to 4 (or     100 in binary), then only the "fi" 
 key  will cause the subroutine to end.     The bits of kp are set in  line  100
6 according to which keys are pressed.     Suppose the "le" and "ri"  keys  were
  pressed  kp  would  be 3, or 11 in     binary.               011    kp        
     100    kf             ---             000    kp AND kf       The pressing o
f the "le" and "ri" keys is masked out by the key flags, kf,     giv from  1  to
 10, 100, 1000 and so on.  When     this value is ANDed with mf, it  has  the ef
fect of picking out the binary     digit of mf appropriate to that menu position
 and ignoring all the others.     Thus "2mp AND mf" is zero when we are allowed 
to stop on a menu position,     and greater than zero when we need to roll over 
it.         If you look at line 1002 though,  you  will see that the WHILE state
ment     is a little more complicated.  The  bit  we  have just looked at keeps 
the     loop going ing a result of zero.  It is easy  to  see that the loop will
 only come     to an end when the "fi" key is pressed.         Masking out bit-s
ignificant values  using  the  AND  operator  is a very     important technique,
 especially if you are trying to squeeze large amounts     of information into m
emory efficiently.       PUB CRAWL     The smaller loop in lines 1002 to 1004  m
akes sure that the menu bar moves     when the user presses the "up" or "dow" ke
ys, and keeps on moving the menu     bar in the samuntil we are over a  menu  it
em that is selectable, but we need     another part to get the menu bar moving  
in the first place.  Line 1005 is     where the up and down keys are  checked.  
The md variable is set according     to the direction, and then mz is put equal 
 to md.  If up or down has been     pressed, md and mz will be 1  or  -1,  so  m
z will be true.  When the main     loop gets back to line 1002 this means that t
he WHILE condition there will     be true, and BASIC will execute the loop that 
move direction  over  any  masked  out  menu entries.  You will     remember the
 example last month for  ordering WACCI back issues, where the     menu bar did 
not stop over the issues that were out of stock.       The information as to whi
ch menu items  are  out  of bounds is held in the     parameter "mf".  This is a
lso a  "bit  significant" value, which means you     have to look at it in binar
y to  make  any  sense of it.  The value of the     least significant bit (the o
ne on the  right)  refers to the fi  N    We use the useful MOD operator in  ord
er  to make the menu bar loop round.     When you get to the bottom of  the  men
u,  pressing the down key will take     the menu bar right to the top of the men
u again, and vice versa.         One way of writing this would be something like
 the following         mpmp+md       IF mpmch THEN mp0       IF mp-1 THEN mpmch-
1       but using the MOD operator we have managed to condense it to         mp(
mp+mch+md) MOD mch       How does this work  If you look  up h           Number 
of choices on the menu     mp            Menu bar position (zero for first item 
on menu)     mf            Menu flags (see last month)     mde           Menu de
lay     mcol          Pen to use for the menu bar     msp           Vertical spa
cing of menu items in graphics coordinates     mx, my        Graphics coordinate
s of top left of menu     mbh           Menu bar height in graphics coordinates 
    mbl           Menu bar length in graphics coordinates     up, dow       INKE
Y numbers of  MOD  in your manual (don't bother if     you have an original CPC 
464 manual -  they forgot to put it in), you will     find it described as  retu
rning  the  remainder  after  dividing the first     argument by the second argu
ment.  In  our  case  it is the remainder after     dividing mp+mch+md by mch.  
Another way to  think  of it is that MOD keeps     on subtracting mch from mp+mc
h+md until it gets a result from 0 to mch-1.         Suppose that mch is 6, mean
ing six menu  items numbered from 0 to 5.  Ifthe up and down keys     le, ri, fi
    INKEY numbers of other keys that the menu responds to.     kf            Key
 flags (see last month)       Values returned by the routines       mp          
  Menu bar position (as above)     kp            Keys pressed (see last month)  
     Variables used internally by the routines       delay     mc     md     mz 
        Listing 1       1000 kp0md1mz0     1001 WHILE (kp AND kf)0     1002 WHIL
E (2mp AND mf)0 OR mz     1003 mz0GOSUB 1010mp(mp+mch+md) MOD      we were on th
e last menu item them mp would be 5.  Pressing down would set     md to 1, so mp
+md is 6.  Divide that  by mch, which is 6 also, and it goes     exactly once, s
o there is  no  remainder.   Therefore  the new value of mp     will be zero, wh
ich signifies the top item on the menu.         Let us try going up  from  the  
top  menu  item.  The menu position, mp,     starts as zero this  time.   Going 
 up  translates  into subtracting 1, so     mp+md is -1.  The only trouble is th
at if you then us  when  a key has been     pressed to trigger the loop in  line
s  1002  to  1004 and set the menu bar     moving.  We also need to reset that  
trigger  to zero or else the menu bar     will never stop moving.   The  trouble
  is  that  if  we  used md for this     purpose, we would get in a mess  if  we
 moved onto a prohibited menu item.     Having set md to zero, the next  time  t
hrough  the loop we would not know     which direction we were meant to be  goin
g in when skipping that menu item     to move  do MOD 6, it will still     be -1
, and we want 5.   This  is  why  the  expression in line 1003 has an     extra 
mch added in, as mp+mch+md is 5,  and when you take the remainder on     divisio
n by 6, you end up with  5  as  the  answer, which is the last menu     item, ju
st as we want.       THAT'S ALL FOLKS     That pretty well wraps up the menu sub
routines, so next month we will have     a go at something completely different.
   Just  to show that no program is     ever perfect though, try to see  if  yto
 the next one!         WARP FACTOR MCH     Line 1003 is where the menu bar  is  
actually moved.  First we GOSUB 1010,     which removes the bar from the  screen
.   Then mp is adjusted, and finally     we have GOSUB 1010 again to put the men
u bar back on the screen in the new     position.  The reason  we  can  use  the
  same  routine  for  removing and     redisplaying the menu bar is that we are 
using the XOR graphics mode.         The adjustment of mp, the menu  position  v
ariable, is worth looking at. ou  can  find a way of removing four     character
s from line 1002 in a way  which does not affect the operation of     the progra
m, or if anything slightly improves it.  We only spotted it when     writing thi
s final article!   Since  then  we  have discovered that this     alteration mea
ns that the program  would  not  function correctly on a CPC     464 if the menu
 had more  than  8  items,  so  it  is  best to leave it as     printed!        
   TABLE OF VARIABLES       Parameters to set up       mc  NA GOOD DEAL     The 
game starts by GOSUBbing 1000 to deal  the cards out on the table.  In     line 
50 we put the pack in order  so  we must shuffle the cards as well as     dealin
g.  We do both at the same  time  in  line 1010.  In a loop starting     with n5
2, we pick a random card between 1 and n using the expression       cdelINT(RND*
n+1)       We put this card in the layout  array  at c(row,col) and move the nth
 card     in the pack to the position  vacated  by  our chosen card.  This leave
s us     w#Programmers' Patch 9 - WACCI 118, Jan 1998, p. 18-19     PROGRAMMERS'
 PATCH 9     By Hilary Phillips       Yes, this month the proofreader gets a  go
  at writing an article, to give     Matthew and Stephen a break.  This was  int
ended to be a Christmas Special     on card games, but WACCI's brief bi-monthly 
spell put paid to that idea so     it has to be a  New  Year's  special  instead
.  I started programming card     games after seeing a rather  good  patience  g
ame  on  my sister's Mac and     wonderingith all the undealt cards in the first
 n-1 positions in the pack, and the     dealt out cards in the layout  array.   
GOSUBbing  3500 prints the back of     the card at the position for  c(row,col).
   We  can then decrease n by one     and go through the process again until all
 the cards have been dealt.       We need line 1020 as well as 1010  to  do this
 because the layout array is     not a rectangle but 7 rows of 7 and an extra ro
w of 3 cards.       PRINTING     Let's now look at the routines  for  prin wheth
er I could reproduce it on Matthew's CPC.  I could, but the     listing's a bit 
long to put  into  a  two-page  WACCI article so here is a     shorter, multi-pl
ayer game.  Fun for all  the family in the festive season     with Pelmanism, or
 Matching Cards.       This is saved on disc as PELMAN.BAS       In the fine tra
dition of this series  I'm  going to go through the program     showing how it w
orks and picking out the most horrible lines and trying to     explain how on ea
rth I came up  with  tting things in lines 3000-4530 as     they are used by man
y bits of the program.  Each routine uses the position     markers (row,col).   
    3000 Printing cards     For simplicity in the version for this article, the 
cards are displayed by     just two characters, one for  the  value  ("card")  a
nd  one for the suit.     These are calculated from c(row,col) in  line  3000.  
"card" takes a value     from 1 to 13 and  "suit"  a  value  from  0  to  3  c(r
ow,col) is in fact     card+(suit*14), hence cardc(rhem.   I'll  try to keep it 
down to     just one article, though.       SETTING OUT     The first few lines 
set up what we will need to play the game.  In line 10     we create a special c
haracter so that the number "10" can be printed up as     one character.  Line 3
0 sets  up  arrays  for  the  pack, the cards in the     two-dimensional layout,
 the names of six  players and the numbers of pairs     won by the six players. 
 Line  40  defines  a  string which we will use to     print up the values of th
e caow,col) mod 14 and suitc(row,col)14.       The suit characters are in the AS
CII character set which makes things very     easy.  The character for "card"  i
s  held  in  the string card$ defined in     line 40. All we have to  do  to  pr
int  it  is to take out the appropriate     character using MID$.  The colour to
 print the cards is slightly tricky to     work out as we want black (0) for sui
ts 0 and 3 (clubs and spades) and red     (1) for suits 1 and 2 (diamonds  and  
hearts).  Try out the expression frds.       In line 50 we put 52 entries in the
 "pack" array.  We could just represent     the cards by the numbers 1-52 but it
  turns out to be easier to manipulate     them in other card games I have  writ
ten  if we use 1-13, 15-27, 29-41 and     43-55 for clubs,  diamonds,  hearts  a
nd  spades  respectively,  hence the     peculiar expression in line 50.   Line 
 60  sets  up the inks (black, red,     white, and green for the card table) and
  line 70 gives us a window at the     bottom for messages.       mchGOSUB 1010 
    1004 WEND     1005 md(INKEY(up)-1)-(INKEY(dow)-1)mzmd     1006 kp-(INKEY(le)
-1)-2*(INKEY(ri)-1)-4*(INKEY(fi)-1)     1007 WEND     1008 WHILE INKEY$""WEND   
  1009 RETURN     1010 PRINT CHR$(23)+CHR$(1)     1011 MOVE mx,my-mp*msp+(md-1)*
(mbh-2)     1012 FOR mc1 TO mbh/2     1013 DRAWR mbl,0,mcolMOVER -mbl,-2-(md-1)*
4     1014 FOR delay0 TO mdeNEXT     1015 NEXT     1016 PRINT CHR$(23)+CHR$(0)  
   1017 RETURN   the last of three articles about menu handling in BASIC we   No
r "Q", and if  you  quit  then line 250 resets the screen     and text settings 
using two firmware calls.       COULD DO BETTER     This is a very basic version
 of the game, and lots of things could be done     to spice it up.  The cards  c
ould  be  a  better  shape and look more like     playing cards.  You could incl
ude appropriate music when cards match or do     not match.  Or you could dispen
se  with  the computer altogether and use a     simple pack of 52 cards and a ta
ble.         5 REM Pelmanism v.   lines 2530-2560 depending on which  key  is  p
ressed.  If the player moves     off the 8x7 rectangle the cursor wraps  round  
and reappears at the top if     it went off the bottom, etc.   This  is  done  u
sing MOD.  In line 2530 we     have to add 8 before MODding by  8,  as  the curs
or might be at position 0     (the first row) and MOD -1    -1,  whereas  we  wa
nt 7, for the last row.     Line 2550 is similar.       Before moving the cursor
 we delete it  from its former position, and after     moving or     pcol and yo
u will see that it works.       3500 Printing backs of cards     This is very si
mple the backs  are  two characters gleaned from the ASCII     character set.   
    4000 Deleting cards     This is ever so easy as all we have  to do is print 
spaces over the top of     the card previously there.       4500 Printing cursor
     This is an "X" spread over two characters, printed in white in transparent 
    mode over the card below.  It is  not  printed  up  if the card is the one  
   just selecwe print it in its new position.       Once the ENTER/RETURN key ha
s  been  pressed  the  card selected is turned     over, i.e. printed up by GOSU
Bbing 3000.   The value of the card (which we     worked out when GOSUBbing 3000
) is  stored  in cardsel and the position in     (r1,c1).  The player is  then  
asked  to  choose  another card.  Line 2030     ensures that they do not choose 
the  same card again, prints up the second     card selected and then compares t
he values of the two cards.       If they areted, i.e. in the position (r1,c1). 
      4520 Deleting cursor     We do not need to delete the cursor  if it is ove
r the card just selected,     as it was not printed there  in  the  first  place
.   If there was no card     under the cursor then the  cursor  is  deleted  usi
ng the routine at 4000     otherwise the back is printed up again using 3500.   
    ON WITH THE GAME     Lines 110-140 allow the user  to  select  the  number o
f players and enter     their names, the first 16 characters of  which are u the
 same then we GOSUB 2100, remove the cards by deleting them     and setting c(ro
w,col)0 for  each  position,  and  add  1 to the player's     score of pairs won
, printing it  below  their  name on screen.  The player     then gets another t
urn.  If the cards do not match then they are shown for     a set length of time
 so that  all  players  have a fair chance to see what     and where they were, 
and  then  they  are  turned  over again by GOSUBbing     3500, and it is the ne
xt player's turn.       ANDsed by the program and     are printed up to the  rig
ht  of  the  dealt  out cards.  All six players'     scores are set to 0 regardl
ess of how  many are playing as line 150 checks     the sum total of pairs won t
o determine when the game ends.       TAKING TURNS     We now GOSUB the main loo
p  in  2000  for  each player's turn.  The cursor     starts off at (0,0) and th
e position  of the last card chosen, (r1,c1), is     set to be (-1,-1) as this i
s  outside  the playing area so won't interfere     with th THE WINNER IS...    
 Once all the pairs have been won, the WHILE-WEND loop in line 150 ends and     
we get onto the business  of  working  out  the  winner.  As more than one     p
layer might have got the highest number of pairs we store a character for     ea
ch of the winners in win$, and the length of win$ shows how many winners     the
re are.  We can then  print  up  appropriate congratulatory messages in     line
 220.  Line 230 waits for you  to  decide whether to play again or not     by pr
essing "P" e printing up of the  cursor.   GOSUBbing  2500 tells the player to  
   choose "a card" or "another card"  depending  on  the value of mud$ - this   
  saves having to put in the  same  routine  twice.  Line 2520 waits for the    
 cursor keys or the ENTER/RETURN key  to  be  pressed.  It only responds to     
the ENTER/RETURN key if there is a card  in that position, in which case a     c
ard has been selected and we can RETURN.       If a cursor key is pressed we  ne
ed  to  move the cursor.  This is done in    N"." ELSE PRINT"s are"         FOR 
n1 TO LEN(win$)PRINT pl$(ASC(MID$(win$,n,1)))NEXT     230 LOCATE#1,1,1PRINT#1,"P
ress P to play again, Q to quit"CHR$(20)         a$""WHILE a$"P" OR a$"Q"a$UPPER
$(INKEY$)WEND     240 IF a$"P" GOTO 50     250 CALL &BC02CALL &BB4EMODE 1END    
 1000 LOCATE#1,10,1PRINT#1,CHR$(17)"Dealing..."CHR$(20)     1010 n52FOR row0 TO 
6FOR col0 TO 6cdelINT(RND*n+1)          c(row,col)pack(cdel)pack(cdel)pack(n)GOS
UB 3500nn-1NEXTNEXT     1020 FOR colDISCMENUBASptt £  () ""  USE,    a-z B" (B) 
   !    ,("&") CD,78,BB,4C,DD,6E,0,DD,66,1,46,78,B7,C8,23,5E,23,66,6B,CD,60,BB,7
7,23,C,79,E5,CD,6F,BB,E1,10,F2,C9H N    ()() d ( (#)V () (,,)"."  (,,)""  ,  () 
P(  (/) () ()    0 TO 2cdelINT(RND(1)*n+1)c(row,col)pack(cdel)          pack(cde
l)pack(n)GOSUB 3500nn-1NEXTRETURN     2000 row0col0r1-1c1-1GOSUB 4500     2010 m
ud$""GOSUB 2500GOSUB 3000r1rowc1colcardselcard     2020 mud$"nother"GOSUB 2500  
   2030 IF rowr1 OR colc1 THEN GOSUB 3000 ELSE 2020     2040 IF cardcardsel THEN
 2100 ELSE 2200     2100 LOCATE#1,1,1PRINT#1,"They match! Well done "pl$(turn)".
"CHR$(20)          FOR delay1 TO 500NEXT     2110 GOSUB 4000c(row,col)0rowr1colc
1 v(,w(x, (( ())( ()))(( ())))) v(,w(, (( ())( ()))(( ()))))  ,  ()  ,  ()2 P  ,
  () ( ) ( )  ,   , (,,)"."   B"   u      , "User "() £  () ""  USE,  (#)F+P  (/
) () () C"",DD,66,1,46c(row,col)0GOSUB 4000     2120 pw(turn)pw(turn)+1LOCATE 27
,turn*3-1PAPER 3PEN 2          PRINT pw(turn)RETURN     2200 LOCATE#1,1,1PRINT#1
,"They don't match!"CHR$(20)          FOR delay1 TO 5000NEXT     2210 GOSUB 3500
rowr1colc1GOSUB 3500turn(turn MOD npl)+1RETURN     2500 LOCATE#1,1,1PRINT#1,"Cho
ose a"mud$" card, "pl$(turn)"."CHR$(20)     2510 kp$""WHILE (kp$CHR$(240) OR kp$
CHR$(243)) AND kp$CHR$(13)          kp$UPPER$(INKEY$)WEND     2520 IF kp$CHR$(13
) AND c(row,col)2.0 (Simple version), Dec 1997 by Hilary Phillips     10 SYMBOL 
AFTER 255SYMBOL 255,76,210,82,82,82,82,76,0     30 DIM pack(52)DIM c(7,6)DIM pl$
(6)DIM pw(6)     40 card$"A23456789"+CHR$(255)+"JQK"     50 FOR n1 TO 52pack(n)n
+(n-1)13NEXT     70 INK 0,0INK 1,6INK 2,26INK 3,9MODE 1PAPER 3CLS     80 WINDOW#
1,1,40,24,25PAPER#1,3PEN#1,2CLS#1     100 GOSUB 1000     110 LOCATE#1,1,1PRINT#1
,"Enter number of players (1-6)"npl0         WHILE npl1 OR npl6nplVAL(INKEY$)WEN
DPRINT#1,npl     10 THEN RETURN     2530 GOSUB 4520IF kp$CHR$(240) THEN row(row-
1+8) MOD 8     2540 IF kp$CHR$(241) THEN row(row+1) MOD 8     2550 IF kp$CHR$(24
2) THEN col(col-1+7) MOD 7     2560 IF kp$CHR$(243) THEN col(col+1) MOD 7     25
70 GOSUB 4500GOTO 2510     3000 suitc(row,col)14cardc(row,col) MOD 14pcolMIN(1,s
uit MOD 3)     3010 LOCATE col*3+2,row*2+2PAPER 2PEN pcolPRINT MID$(card$,card,1
)          CHR$(226+suit)RETURN     3500 LOCATE col*3+2,row*2+2PAPER 0PEN 1PRINT
 CHR$(220)CHR$(222)RETUR20 FOR n1 TO nplLOCATE#1,1,1PRINT#1,"Player"n"enter your
 name"         CHR$(20)LINE INPUT#1,a$pl$(n)LEFT$(a$,16)     130 LOCATE 25,n*3-2
PAPER 3PEN 2PRINT pl$(n)NEXT     140 FOR n1 TO 6pw(n)0NEXTturn1     150 WHILE pw
(1)+pw(2)+pw(3)+pw(4)+pw(5)+pw(6)26GOSUB 2000WEND     200 win$""FOR n1 TO nplIF 
pw(n)MAX(pw(1),pw(2),pw(3),pw(4),pw(5),pw(6))         THEN win$win$+CHR$(n)     
210 NEXTLOCATE 1,9PAPER 3PEN 2PRINT"The winner"     220 IF LEN(win$)1 THEN PRINT
" is "pl$(ASC(win$))N     4000 LOCATE col*3+2,row*2+2PAPER 3PRINT "  "RETURN    
 4500 IF rowr1 OR colc1 THEN LOCATE col*3+2,row*2+2PEN 2          PRINT CHR$(22)
CHR$(1)CHR$(197)CHR$(199)CHR$(22)CHR$(0)     4510 RETURN     4520 IF rowr1 OR co
lc1 THEN IF c(row,col)0 THEN 3500 ELSE 4000     4530 RETURN  illips       Yes, t
his month the proofreader gets a  go  at writing an article, to give 5 m( ( u))(
 ( do)) m m k( ( l))( ( r))( ( f))  N99 REM Figure 1.61  100 REM An inefficient 
subroutine to replace line 40.  110 WHILE INKEY(47)-1 AND INKEY(18)-1 AND INKEY(
9)-1  120 oldxxoldyy  130 addx0addy0  135 REM Check keys  140 IF INKEY(8)-1 THEN
 addx-1  150 IF INKEY(1)-1 THEN addxaddx+1  160 IF INKEY(21)-1 THEN addxaddx*4  
170 addx3*addx  180 IF INKEY(2)-1 THEN addy-1  190 IF INKEY(0)-1 THEN addyaddy+1
  200 IF INKEY(21)-1 THEN addyaddy*2  210 addy3*addy  220 xx+addxyy+addy  225 RE
M Check x & y are on screen  230 IF x632 THEN x632  240 IF x0 THEN x0  250 IF y3
99 THEN y399  260 IF y15 THEN y15  265 REM Remove pointer and redisplay  270 MOV
E oldx,oldyPRINT CHR$(215)  280 MOVE x,yPRINT CHR$(215)  290 WENDRETURN  onth  w
e  move  from  the  starter  to  a  lightly g   mb1  mb,, mco  mb,( m)  dela   m
d ()()50 m) k m m ( k   k)" ( m   m)   m m  m( m 100 MEMORY &8FFFa&9000FOR x0 TO
 13READ a$POKE a+x,VAL("&"+a$)NEXT  110 MODE 2PRINT"Bunnymen"  120 c%0LOCATE 1,1
CALL &9000,c%  130 PRINTPRINT"The letter at the top left of the screen is a "CHR
$(c%)  190 DATA DD,66,01,DD,6E,00,CD,60,BB,77,23,36,00,C9   $$$ r))T    Figure 2
.71 sader for MIDI SEND RSX (see article 11)  TUNE.BASprogram to play a tune fro
m article 12    ----  * See "Blast from the Past",299 REM Figure 1.618  300 REM 
A better subroutine to replace line 40.  310 WHILE INKEY(47)+INKEY(18)+INKEY(9)-
3  320 oldxxoldyy  330 addx0addy0  335 REM Check keys  340 addx(INKEY(8)-1)  350
 addxaddx-(INKEY(1)-1)  360 addxaddx*(4+3*(INKEY(21)-1))  370 addx3*addx  380 ad
dy(INKEY(2)-1)  390 addyaddy-(INKEY(0)-1)  400 addyaddy*((INKEY(21)-1)+2)  410 a
ddy3*addy  420 xx+addxyy+addy  425 REM Check x & y are on screen  430 xMIN(632,x
)  440 xMAX(0,x)  450 yMIN(399,y)  460 yMAX(15,y)  465 REM Remove pointer and re
display  470 MOVE oldx,oldyPRINT CHR$(215)  480 MOVE x,yPRINT CHR$(215)  490 WEN
DRETURN  ghtly gUB 1010  1004 WEND  1005 md(INKEY(up)-1)-(INKEY(dow)-1)mzmd  100
6 kp-(INKEY(le)-1)-2*(INKEY(ri)-1)-4*(INKEY(fi)-1)  1007 WEND  1008 WHILE INKEY$
""WEND  1009 RETURN  1010 PRINT CHR$(23)+CHR$(1)  1011 MOVE mx,my-mp*msp+(md-1)*
(mbh-2)  1012 FOR mc1 TO mbh/2  1013 DRAWR mbl,0,mcolMOVER -mbl,-2-(md-1)*4  101
4 FOR delay0 TO mdeNEXT  1015 NEXT  1016 PRINT CHR$(23)+CHR$(100 MEMORY &8FFFa&9
000FOR x0 TO 14READ a$POKE a+x,VAL("&"+a$)NEXT  110 MODE 2PRINT"Silly string"  1
20 a$" "LOCATE 1,1CALL &9000,a$  130 PRINTPRINT"The letter at the top left of th
e screen is "a$  190 DATA DD,66,01,DD,6E,00,23,5E,23,56,CD,60,BB,12,C9  $$$ r))T
    Figure 2.71 s0ffvfffffffffvf100 MEMORY &8FFFa&9000FOR x0 TO 10READ a$POKE a+
x,VAL("&"+a$)NEXT  110 PRINT"Enter number (1 to 255)"INPUT x  120 CALL &9000,xPR
INT  130 GOTO 110  190 DATA DD,46,00,3E,40,CD,5A,BB,10,FB,C9   Figure 2.71 s0ffv
fffffffffvf  N#Help for Loom hypertext reader v3.2  Loom is a system for viewing
 hypertext a set of ordinary text files with links  between them.  Any text whic
h is highlighted is a link.  Use the cursor keys to  position the cursor over a 
link, and press the ENTER or RETURN key and you will  be taken to the appropriat
e place either elsewhere in the same file, or in a  different file entirely.    
There are quick cursor movements similar to Protext    SHIFT left + rightMove le
ft or right a word at a time  CTRL left + r m( m mc m)   mc 5 m( ( u))( ( do)) m
 m k( ( l))( ( r))( ( f)) C"" ()()5  m, m m ms( m)( mb)  m   mb1  mb,, mco  mb,(
 m)  dela   md ()()mp0mf0mde0  20 mcol1msp16mx0my399-2*16mbh16mbl16*6-2  30 up0d
ow2le8ri1fi9kf4  40 PRINightMove to start or end of line  SHIFT up + downScroll 
screen up or down one line  CTRL up + downMove up or down a whole page  CTRL  + 
Move to top or bottom of document    Use the ENTER or RETURN key to follow a lin
k.  Once you have followed a link,  press the "" key or the "B" key to return to
 where you came from.    To quit Loom, press "Q".                 To leave this 
help screen, press "B"  --------------------------------------------------------
-----------------------  Original version (c) Stephen Phillips 1995  Amstrad CPC
 version (c) Matthew and Stephen Phillips 1997  Written using the HiSoft C compi
ler.  Runtime routines (c) HiSoft 1988ader v3.2  Loom is a system for viewing hy
pertext a set of ordinary text files with links  between tlink,  press the "" ke
y or the "B" key to return to where you came from.    To quit Loom, press "Q".  
               To leave this help screen, press "B"  ---------------------------
----------------------------------------------------  Original version (c10 DEFI
NT a-zMEMORY HIMEM-34aUNT(HIMEM+1)FOR x0 TO 33READ a$POKE a+x,VAL("&"+a$)NEXTDAT
A CD,78,BB,4C,DD,6E,0,DD,66,1,46,78,B7,C8,23,5E,23,66,6B,CD,60,BB,77,23,C,79,E5,
CD,6F,BB,E1,10,F2,C9  20 MODE 2CATvVPOS(#0)f$SPACE$(12)LOCATE 1,4CALL a,f$LOCATE
 1,v  30 PRINT"The first file on this disc is "f$   We find finely grated  Parme
san  cheese  sprinkled  generously oveMENUEX1 BASp()mp0mf0mde0  20 mcol1msp16mx0
my3*   mc m m mdG mco ms m m mb mb5 u do l r f k("Menu""----"$2     mc"Item"    
F #P"You have chosen item" mZ k m m ( k   k)" ( m   m)   m m   Nmc m)   mc 5 m( 
( u))( ( do)) m m k( ( l))( ( r))( ( f)) C"" ()()5  m, m m ms( m)( mb)  m   mb1 
 mb,, mco  mb,( m)  dela   md ()()50hank you for your order."     200 PRINT"Plea
se send a cheque for £"USING"##.##"0.5*magsEND     210 LOCATE 27,6+mp*2PRINT num
 C"" ()()5  m, m m ms( m)( mb)  m   mb1  mb,, mco  mb,( m)  dela   md ()()ri1fi1
8kf5  40 ourkf0 1017 RETURN  PATCH 6     By Stephen and Matthew Phillips       "
What's on the menu for this month",  we  hear you cry.  Well1)-(INKEY(dow)-1)mzm
d     1006 kp-(INKEY(le)-1)-2*(INKEY(ri)-1)-4*(INKEY(fi)-1)     1007 WEND     10
08 WHILE INKEY$""WMENUEX4 BASp  dela   md ()()!  mc m  md mco ms  m mB mb mb u d
o l r f/ s k(  nu( mc)*2  ,"WACCI back-issues orders" , (,"-") ,F"Use the cursor
 keys to move and alter.  SPACE to finish."P  m   mc , m"WACCI"( m MENUEX3 BASpn
   mb1  mb,, mco  mb,( m!  mc m  md mco ms  m mB mb mb6 u do l r f/ k(  nu( mc)*
2  ,"WACCI back-issues orders" , (,"-") ,F"Use the cursor keys to move and alter
.  SPACE to finish."P  m   mc , m"WACCI"( m Z  mMENUEX2 BASpdd,, mco  mb,( m)  d
ela   "   mc m mdG mco ms m m mb mb7 u do l/ r f k( ourk/2"Press SPACE to toggle
 the values On/Off"9 (")"Off"(")" means the key would be ignored"0F"Press RETURN
 to calculate the kf value"P ,"le""ri""fi")Z  m   mc    mc5d  m   m   , m"(no st
ock)"nx m k    k nu( m) nu( m)( k)( k)   A mag     mc mag mag nu( )( ,"Thank you
 for your order.""Please send a cheque for £""##.##" mag% , m  nu( m) k m m ( k 
  k)" ( m   m)   m m  m( m  m d n  k x F  k   ourk ourk   m   dela  d7  , "The k
f value you need is" ourk9  , m  ourk   m  "On "  "Off" k m m ( k   k)" ( m   m)
   m m  m( m mc m)   mc 5 m( ( u))( ( do)) m m k( ( l))( ( r))( ( f))  NZ  m   m
c5d  m   m   , m"(no stock)"nx m k    k nu( m) nu( m)((( k  ))(( k  )))((( k  ))
)   A mag     mc mag mag nu( )( ,"Thank you for your order.""Please send a chequ
e for £""##.##" mag% , m  nu( m) k m m ( k   k)" ( m   mPELMAN  BASpuuD)()()()()
()I  ro r   D Pelmanism v.2.0 (Simple version), Dec 1997 by Hilary Phillips'    
,L,,R,R,R,R,L,4  pac(4)  (,) p()  p()%(car"A23456789"()"JQK"32    4 pac( ) ( ) '
F , , , ,  #P#,,(,,#,#,# d kn#,,#,"Enter number of players (1-6)" n)   m m  m( m
 mc m)   mc 5 m( ( u))( ( do)) m mM k( ( l))( ( r))( ( f))( ( s)) C"" ()()5  m, 
m m ms( m)( mb)  m   mb1  mb,, mco  mb,( m)  dela   md ()()2mbl132  30 up0dow2le
8ri1fi47sh21kf7  40 DIM num(mch-p  np   np np(C)#, npmx     np#,,#,"Player" "ent
er your name"() £#,p( )u(,)* ,    p( )+     p( ) turG  p() p() p() p() p() p() w
i""     np  p( )v( p(), p(), p(), p(), p(), p())  wiwi( )# ,  "The winner"v (wi)
  " is "p((wi))"."  "s are"    (wi) p(((wi, ,)))g#,,#,"Press P to play again, Q 
to quit"()"" "P"  "Q"(C) "P"  2  N -#, ,#,()"Dealing..."() 4  ro    co   cde(E )
 ( ro, co) pac( cde) pac( cde) pac( )      co   cde(E() ) ( ro, co) pac( cde1000
 kp0md1mz0  1001 WHILE (kp AND kf)0  1002 WHILE (2mp AND mf)0 OR mz  1003 mz0GOS
UB 1010mp(mp+mch+md) MOD mchGOSUB 1010  1004 WEND  1005 md(INKEY(up)-1)-(INKEY(d
ow)-1)mzmd  1006 kp-(INKEY(le)-1)-2*(INKEY(ri)-1)-4*(INKEY(fi)-1)  1007 WEND  10
08 WHILE INKEY$""WEND  1009 RETURN  1010 PRINT CHR$(23)+CHR$(1)  1011 MOVE mx,my
-mp*msp+(md-1)*(mbh-2)  1012 FOR mc1 TO mbh/2  1013 DRAWR mbl,0,mcolMOVER -mbl,-
2-(md-1)*4  1014 FOR delay0 TO mdeNEXT  1015 NEXT  1016 PRINT CHR$(23)+CHR$() pa
c( cde) pac( )    . ro co r c Gmu""   r ro c co cardse carmu"nother" 1  ro r   c
o c     &  car cardse  4  X4#,,#,"They match! Well done "p( tur)"."()  dela  V  
( ro, co) ro r co c ( ro, co) PH p( tur) p( tur) , tur0)  1017 RETURN  r%%ay0 TO
 mdeNEXT  1015 NEXT  1016 PRINT CHR$(23)+CHR$(0)     N         7E# x0yxw# x y# x
 !x8xw#  x -!6#n#f#"#62-*w#  82BC2JB!! #2CEBM!# BThere is no point using this pr
ogram if you have a side switch fitted."bF"WARNING - the contents of the disc in
 drive A will be overwritten by this      program."QP"This program may be freely
 distributed provided that it is not altered."Zhd"Put disc to copy from in drive
 B.""Put disc to copy to in drive A.""Press any key to copy..."n C"" C""#xBCOP,t
rac,eW e  "Error"e"when copying track"trac   "Copying complete"#Programmers' Pat
ch 10 - WACCI 119, Feb 1998, p. 17-18     PROGRAMMERS' PATCH 10     By Matthew P
hillips       This month in Programmers' Patch we are  going  to start a short s
eries on     MIDI programming.  Although there have been many reviews of MIDI eq
uipment     for the Amstrad in magazines over the years, there has been very lit
tle on     how to program your CPC to  control  MIDI equipment.  This month also
 sees     the first anniversary of the Programmers' Patch series, and if the rev
iews     in las d+ e    "Missing address mark.". e    "Disc is write protected."
- e    "Cannot find the sector."6 e    "Disc missing or drive not ready."% e    
"Overrun error."" e     "Data error."ide.bin",&9000gpbuff%0CALL &9000,gpbuff%  2
0 track%0er%0  30 MODE 2  40 PRINT"BSide v 1.0 by Matth#xBCOP,trac,eW e  "Error"
e"when copying track"trac   "Copying complete"    p( tur)#,,#,"They don't match!
"()  dela  I   ro r co c   tur( tur   np)F#,,#,"Choose a"mu" card, "p( tur)"."()
Kk"" (k()  k())  k( )k(C)/ k( )   ( ro, co)  3  k()   ro( ro)  + k()   ro( ro)  
- k()   co( co)  +  k(98    sectbuff08000h    initialisation routine to be calle
d with CALL &9000  AORG 09000h    LD L,(IX+0)  LD H,(IX+1)  LD DE,gpbuff  LD (HL
),E  INC HL  LD (HL),D    LD BC,jumps  LD HL,worksp  CALL 0BCD1h  find far addre
sses  LD IX,faraddrs  LD HL,messes  farfindloop LD A,(HL)  OR A  RET Z  PUSH HL 
 CALL 0BCD4h  LD (IX+0),L  LD (IX+1),H  LD (IX+2),C  INC IX  INC IX  INC IX  POP
 HL  INC HL  JR farfindloop     stores for RSX commands that are searched for, t
erminated by a zero byte  messes DEFB 081h)   co( co)       sui ( ro, co) car ( 
ro, co)   pcow(, sui  )R  co, ro   pco (car, car,)( sui)5   co, ro   ()())  co, 
ro  "  "e  ro r   co c    co, ro  ()()()()()()I  ro r   co c    ( ro, co)     ,7
6,0  30 BSIDE   BIN3!8!-!*utq####BBCOP!x"nf"#6+2wWECbGPR2R2*V!G!B!B'2*( CZ#Copyi
ng track *uG(0Zx0Z!#G7y!+o(0zo( 7fBSIDE   BASpB"Data error."ide.bin",&9000gpbuff
%0CALL &9000,8  "bside.bin",gpbuf ,gpbuftrace 7("BSide v 1.0 by Matthew Phillips
, September 1998"2"This program is for use by those with a 3.5"(")" disc drive w
hich has no side switchfitted.  If the 3.5"(")" drive is connected as drive B, t
his program will copy the  second side of the disc in drive B to drive A."P"  !N
!!!!!!!!!    music!  For instance, if you have two computers with MIDI interface
s, then     you can use MIDI to get the computers to transfer any kind of data b
etween     them.       With suitable software, you can edit  a  piece  of music 
on your computer,     and then use MIDI to  instruct  your  keyboard  to  play i
t for you.  Some     editors use conventional  musical  notation,  others  opera
te  more like a     sequencer.  More advanced  software  enables  you  to  play 
 music on your     keyboard while the comts and     some types of computer come 
with  MIDI capabilities built in.  The Amstrad     unfortunately is not one of t
hem.       MIDI INTERFACES FOR THE CPC     To use your Amstrad  to  control  MID
I  instruments  you  will need a MIDI     interface, which plugs into the expans
ion  port and provides the necessary     electronics and the MIDI sockets.   The
re  were several different makes of     interface produced for the  CPC,  and  w
hile  they  all  had much the same     capability in terms of hardware, tputer r
ecords it in memory for saving or editing.       Even without editing software, 
you can  use  MIDI  to get more out of your     keyboard.  For example  Stephen'
s  Yamaha  PSS-680  keyboard  has a custom     drummer for designing drum sequen
ces, but it  can only remember a few at a     time.  Using MIDI we can transmit 
the drum memory to the computer and save     it to disc for future use.  It  can
  then  be  loaded and sent back to the     keyboard.       WHAT ABOUT THE PROGR
AMMING     Well, since the software  that came with each one was     very differ
ent and varied in quality.       The main interfaces are the EMR interface, the 
DHCP interface, and the RAM     Music Machine, which also included a sampler.  B
ecause the interfaces used     different port addresses, software written  for  
one  will not work on the     other makes.  There has however  been  some  softw
are  written such as the     Foundation Step-Time Sequencer which  can  be  conf
igured  to  work on all     three interfaces.       If yhis is Programmers' Patc
h  we had better do some programming.     You will probably find that your  inte
rface  manual says very little about     how to program the interface yourself. 
 I  have  to admit that much of the     programming information in this  article
  was  found  by disassembling the     machine code  for  the  Foundation  Step-
Time  Sequencer.   Whether  it is     strictly speaking legitimate to do this  I
  am  not  sure, but in an ideal     world these details would have been provide
d in theou are interested in music and have a suitable MIDI instrument then it  
   would be well worth  trying  to  get  a  MIDI  interface.  You can produce   
  pretty good results even with the CPC.   Though it is quite hard to obtain    
 Amstrad gear now, there must be quite a  lot  of it about and you may find     
it turning up at car boot sales from time to time.  It might even be worth     p
lacing an ad in your local newspaper asking for Amstrad kit, or of course     an
 ad in WACCI.  I  obtained  my  RAM  Mus interface manuals.       It seems that 
the three  main  interfaces  for  the Amstrad use either the     same or a very 
similar chip  to  handle  the  MIDI channel.  The RAM Music     Machine uses a M
otorola 6850 ACIA chip,  and  the data sheet for this chip     would be quite us
eful.       The most important  information  is  the  port  numbers  for the dif
ferent     interfaces.  Table 1 gives you all  you  need  to  know for the three
 main     MIDI interfaces for  the  Amstrad.   If  anyone  has  a  diffeic  Mach
ine in 1990 when another     WACCI member spotted them being sold off cheap in B
arrow-in-Furness.       If you are good with a soldering iron, I have instructio
ns on how to build     your own MIDI interface if anyone is good enough at Germa
n to follow them.       You will also need a MIDI lead to connect your CPC to th
e MIDI instrument,     but these are easily obtained in music shops.       SO WH
AT CAN YOU DO WITH MIDI     There are all sorts of applications for  MIDI, and n
ot all of them involve t month's Blast from the Past are  anything to go by, we 
have plenty     of reason to celebrate.  Then  again,  I  have  run out of inspi
ration for     subheads this month...       SO WHAT IS MIDI THEN     I suppose w
e ought  to  start  with  the  obligatory explanation that MIDI     stands for M
usical Instrument  Digital  Interface,  and  is a standard for     control and c
ommunication developed  by  the major keyboard manufacturers.     All modern key
boards (except  the  cheaper  models)  have MIDI socke  "N"""""""""starts with  
   8 instead of 9.  We have to supply  the  pitch of the note we want to turn   
  off, as we could have several different  notes playing at once, all on the    
 same channel.  The velocity is used  in  some types of instrument noise to     
determine how the note is silenced.       The BASIC listing puts all that togeth
er  in a simple program that plays a     single Middle C.  It is set  up  for  t
he  RAM  Music Machine, but you can     adapt it for the other interfaces by  ch
anging  the values were sent on channel 10, while the     keyboard would be list
ening out on channel  1.  The way these channels are     determined is not by  h
ow  the  boxes  are  plugged together.  Instead you     select the channel by us
ing the controls on the drum box or keyboard.       In fact most modern keyboard
s  and  voice  boxes will default to listening     out on all channels at once. 
 Thus  with  just one keyboard you can send a     command out on channel 1 to ch
oose a violin noise, and ask channel 2 to be     a rent type of     interface, I
 would be very interested to know.       SENDING MIDI DATA     The easiest opera
tion is sending data to  the MIDI devices attached to the     interface.  You ca
n in  fact  do  this  entirely  from  BASIC,  and I will     present it in this 
form  to  start  with.   Better results can be achieved     with a spot of machi
ne code of course.       First we need to reset the  interface  and  get it read
y for sending data.     On the EMR interface, this is done with         OUT &F8F
2,piano.  Then any Note On events sent  out on channel 1 will be played by     y
our keyboard with the violin noise, and notes on channel 2 will be played     wi
th the piano noise.       To turn a note on, we transmit three bytes in sequence
         &9x  pitch  velocity       The first is the command  byte,  and  &9x  m
eans  Note  On, where x is the     channel number from 0 to F  in  hexadecimal. 
  Did I say the channels were     numbered from 1 to 16   Yes,  well  unlike com
puter scientists, musicians 3OUT &F8F2,&16       The DHCP interface is done the 
same way but with &F8E0 (the address of the     DHCP's control port) instead of 
&F8F2 in each case.       The RAM Music Machine  is  slightly  different,  as  t
he  second byte sent     should be &15 instead of &16         OUT &F8EC,3OUT &F8
EC,&15       Once that is done, we can  transmit  the data.  This entails waitin
g until     bit 2 is  set  on  the  status  port,  and  then  sending  the  byte
 to be     transmitted to the data write port.  Time for     start counting at o
ne, so that  is  how the channels are always described,     but as far as the co
mputer is concerned they are numbered 0 to 15 (or 0 to     F in hex).       Pitc
h is how high the note is, and is  a value from 0 to 127.  Middle C is     60, C
 sharp is 61, and so  on.   Velocity  is the MIDI jargon term for how     loud t
he note is (think of hitting  a  piano  key), and also ranges from 0     (silent
) to 127 (loudest).  So to start a Middle C playing on channel 1 at     medium v
olume, wea subroutine       100 WHILE (INP(status) AND 2)0WEND     110 OUT dataw
rite,d     120 RETURN       At the start of  your  program  you  should  set  th
e variables status and     datawrite according to which interface you  are  usin
g.  To send a byte to     the MIDI interface, all you do is put the  value you w
ant to send in d and     GOSUB 100.  Line 100 waits  until  the  interface  is  
ready to transmit a     byte, and then line 110 sends it.       MIDI NOTE COMMAN
DS     Of course, you also need to  kn would transmit the following bytes       
  &90, 60, 64       Notice that only the  first  one  is  written  in  hex  the 
other two are     decimal.       The note will continue playing until we  tell  
it to stop.  Of course with     some instruments, such as piano, it  will  die a
way to nothing eventually,     but with an organ noise it will keep going.  To t
urn it off, we transmit a     Note Off event         &8x  pitch  velocity       
This is very similar to Note On,  except that the command byte ow  what  data  t
o transmit.  Next month we     will go into this more deeply, but for now we wil
l look at the commands to     turn notes on and off.       MIDI commands to deal
 with notes are transmitted on "channels".  There are     sixteen channels, numb
ered 1 to 16, and  each of these could correspond to     a different MIDI device
.   For  example,  you  might  have  a  drum box on     channel 10, and a keyboa
rd on channel  1.  The drum box would only respond     to Note On and Note Off e
vents if  they   #N#########    starting a Middle C on Channel 1 would be done l
ike this         SEND,&90,60,64       and to turn it off you would do the same b
ut with &80 instead of &90.       MESSAGE PARLOUR     Perhaps it is time to expl
ain a bit more about the different MIDI messages     available.  No  Well, if yo
u would rather  I cover it next month then you     will have to get out the scis
sors and paste and make a mess of your WACCI.       MIDI messages are made up of
 status bytes and data bytes.  The status byte     tells us what kind of  messag
e  it  is,  and  the  data  bytes fill in the     details.  Status bytes are alw
ays between 128  and 255, and data bytes are     always less  than  128.   It  i
s  easiest  to  think  of  status  bytes in     hexadecimal.  The following tabl
e lists all the types of message         &8x     Note off (2)       &9x     Note
 on (2)       &Ax     Polyphonic key pressure (2)       &Bx     Control change (
2)       &Cx     Programme change (1)       &Dx     Overall key pressure (1)    
   &Ex  #Programmers' Patch 11 - WACCI 120, Mar/Apr 1998, p. 16-18     PROGRAMME
RS' PATCH 11     By Matthew Phillips       Continuing our look at  programming  
MIDI  interfaces,  this month we will     find out how to select  instruments  a
nd  use various other MIDI commands.     Next month we might even manage a progr
am that actually plays a tune...       Last time we used a piece  of  BASIC  to 
 control the MIDI interface. This     month we have printed another listing  whi
ch  uses  machine code to do the     sam   Pitch bend (2)       &Fx     System m
essages       The number in brackets is the  number  of  data bytes that must fo
llow for     that status byte.  The "x" represents the second hex digit, or nybb
le, and     in most cases determines the channel number,  0 to F referring to ch
annels     1 to 16.  As I  explained  last  month,  different channels might ref
er to     different pieces of MIDI equipment, or  on  a polyphonic keyboard or v
oice     box can be  used  to  distinguish  between  several  different e job.  
Listing 1 is a piece  of  BASIC  which installs a couple of RSX     commands, an
d Listing 2 is the assembly language for the RSXs.  They are     saved on the di
sc as SEND.BAS and SEND.ASM       To use the RSX commands, type in Listing  1  a
nd run it.  If you have made     any mistakes in  the  typing,  these  will  be 
 spotted  when  you run the     program.  Once the RSXs are installed, you  need
 to use the CHOUT command     to select the type of MIDI interface you are using
.         CHOUT,0 in lines 10 and     30.  It is saved on disc as MIDI1.BAS     
  OVER TO YOU     Well, that's your  lot  until  March!   In  the  mean  time  h
ave  a go at     instructing your keyboard to play  a  tune,  and experiment wit
h different     channel numbers -  you  might  even  find  that  one  produces d
rum noises     instead of notes.           TABLE 1                              
    RAM    EMR    DHCP     status (read only)           &F8EE  &F8F2  &F8E0     
control (write only)         &F8EC  &F8F2  &F8  - RAM Music Machine       CHOUT,
1   - EMR interface       CHOUT,2   - DHCP interface       The CHOUT command mak
es  the  necessary  adjustments  to  ensure that the     correct port addresses 
are used, and  also  sets  the MIDI interface to be     ready to send data.     
  Next  you  can  use  the  SEND  command  to  send  instructions  to  MIDI     
instruments.  The SEND RSX takes as many  arguments as you like, and they     ar
e sent out via the  MIDI  interface  in  order.  Last month's example of E0     
data read (read only)        &F8EF  &F8F3  &F8E1     data write (write only)    
  &F8ED  &F8F3  &F8E1           10  status&F8EEcontrol&F8ECdatawrite&F8ED     20
  OUT control,3     30  OUT control,&15REM change to &16 for EMR and DHCP     40
  FOR x0 TO 2READ dGOSUB 100NEXT     50  FOR x0 TO 5000NEXT     60  FOR x0 TO 2R
EAD dGOSUB 100NEXT     70  END     80  DATA &90,60,64,&80,60,0     100 WHILE (IN
P(status) AND 2)0WEND     110 OUT datawrite,d     120 RETURN         This month 
in Pro  $N$$$$$$$$$instruments     played on the same piece of MIDI equipment.  
     The status byte &90 would be a Note  On  event on channel 1, and &81 would 
    be a Note Off on channel 2.  The only exception in fact is &Fx, the system  
   messages, which affect all channels  at  once.  Here the "x" distinguishes   
  between different kinds of system message instead.       ONE MAN BAND     The 
next most useful MIDI  message  after  Note  On  and  Note Off is &Cx,     Progr
amme Change.  This is used to select what instrumen one we sent, that is another
 byte of &90.       Of course, you can put in those &90 bytes if you like, and i
f you are just     sending MIDI data you do not really need to know about runnin
g status.  If     you are receiving data from  the  keyboard  though,  you will 
have to cope     with it.  When I first  started  experimenting  with recording 
data from a     keyboard, I did not know  about  running  status,  so  I thought
 there was     something wrong with my interface!       You are also allowed to 
turt noise to use for     the notes on a channel.  It takes  one  data byte as a
 parameter, allowing     you  to  choose  from  128  different   instruments  nu
mbered  0  to  127.     Unfortunately different types of  MIDI  keyboard  use di
fferent numbers to     select a violin, say.  Some keyboards  follow  a code cal
led General MIDI,     and to select a violin on channel 1 you would do         S
END,&C0,41       I am guessing a bit  here,  as  it  might  not  be  a violin, b
ut it would     certainly be a stn  a  note  off  using  a  Note On event with a
     velocity of zero         SEND,&90,60,0       would turn off a Middle C  pla
ying  on  channel  1.  When you combine this     with running status, you  can  
play  long  pieces  on  one channel without     sending any status bytes apart f
rom the first Note On.       AFTER EFFECTS     Getting back to the status codes,
 if  you  want  to change the volume of a     note after it has started, you  ne
ed  the  services of &Ax, Polyphonic Key     Pressure (or afterring instrument. 
  If  your  keyboard does not conform to     General MIDI then there may be a li
st  of the numbers in your manual or on     the keyboard itself.       After tha
t, SEND,&90,69,64 would  play  the  A  above  Middle C (known as     Internation
al A) using the violin noise.  If you then did         SEND,&C1,57,&91,60,64    
   it would select a brass instrument  on  channel 2 and start playing Middle   
  C.  To turn the notes off, you would then do         SEND,&80,69,0 (for the vi
olin)       touch).  This takes two  data  bytes first the pitch of     the  not
e  concerned,  secondly  the   new  pressure  (or  volume)  value.     Obviously
 with some instruments, like piano,  you cannot change the volume     of a note 
once the  key  has  been  struck,  and  some keyboards will take     account of 
this.   Less  expensive  models  of  keyboard  do not implement     aftertouch a
t all.       Status byte &Dx, Overall Key Pressure, works in a similar way, but 
applies     to all notes on  the  channel. SEND,&81,60,0 (for the brass)       O
n a polyphonic keyboard you can have  several notes sounding at once even     on
 the same channel, so you  could  start  several violin notes at once on     cha
nnel 1         SEND,&90,60,40,&90,64,40,&90,67,40       and then turn them  off 
 one  by  one  with  the  appropriate &80 Note Off     events.       RUNNING COM
MENTARY     Before we look at the other status  codes,  it  seems like a good po
int to     mention "running status".  We have  just  turned  on  three n  It  on
ly  needs  one  data  byte, the new     pressure value.       URANIUM ORE     Pi
tch Bend, &Ex, is for varying the  pitch  of notes that are playing.  It     is 
followed by two data bytes which are put together to give a "modulation     valu
e", ranging from 0 to 16383.  If  the modulation value was m, then the     two d
ata bytes are calculated as follows         byte1m MOD 128       byte2m128      
 A modulation value of 8192  is  the  centre  setting, which means that the     
pitches of the  noteotes, each by     sending the status byte of &90  followed  
by  two bytes of data.  We could     have also done it like this         SEND,&9
0,60,40,64,40,67,40       After the volume byte of 40 for the  first note, inste
ad of the &90 status     byte we have gone  straight  on  to  the  pitch  data  
for  the next note.     Because data bytes are all less than 128,  the  pitch of
 64 must be a data     byte not a status byte, so MIDI  equipment assumes that t
he missing status     code is the same as the last  %N%%%%%%%%%220 DATA 9D28F621
319D18F14FCB01064D4   230 DATA 00DD0947DD2BDD2BDD7E00C555D   240 DATA CD229DC110
F2C90000000000418               LISTING 2       Send version 2.00, 11/5/1997    
 designed to be assembled with ZMAC       initialise RSXs by CALL &9D00         
              AORG 9D00h       initialise     LD BC,rsxtab                     L
D HL,wrksp                     JP 0BCD1h     rsxtab         DEFW names          
           JP send                     JP chout     names          DEFB "SEN","D
"+128                         LD A,(IX+0)                     PUSH BC           
          CALL jmpmidisend                     POP BC                     DJNZ s
endloop                     RET  8     PROGRAMMERS' PATCH 11     By Matthew Phil
lips       Continuing ou             LD HL,DHCPblocks                     JR cop
yblocks       send           LD C,A                     RLC C                   
  LD B,0                     ADD IX,BC                     LD B,A     sendloop  
     DEC IX                     DEC IX                 DEFB "CHOU","T"+128      
               DEFB 0     wrksp          DEFS 4         jumpblocks     jmpreset 
      JP ramreset     jmpmidisend    JP ramsend       RAMblocks      JP ramreset
                     JP ramsend     EMRblocks      JP emrreset                  
   JP emrsend     DHCPblocks     JP dhcpreset                     JP dhcpsend   
    ramreset       LD BC,0F8ECh                     LD A,3                     O
UT (C),A                     LD A,15h                     OUT s  will  not  be  
altered.   Giving  smaller or larger     modulation values slightly changes the 
pitch  of the notes playing on that     channel.  You would have to send  quite 
 a  lot  of pitch bend messages to     achieve any useful effect like vibrato.  
     HERE WE ARE AGAIN     Yes, we're drawing to the end of another article.  We
 have not yet covered     all the MIDI status codes, but the most important ones
 are out of the way.     If you are really  getting  into  this,  why  not  pop 
 down to your (C),A                     RET       emrreset       LD BC,0F8F2h   
  ehrcommon      LD A,3                     OUT (C),A                     LD A,1
6h                     OUT (C),A                     RET       dhcpreset      LD
 BC,0F8E0h                     JR ehrcommon       ramsend        LD BC,0F8EEh   
                  PUSH AF     ramslp         IN A,(C)                     AND 2 
                    JR Z,ramslp                     POP AF                     D
EC C                     OUT (C),A       local     library and see what books th
ey  have  on  MIDI   I will try to compile a     list of good ones to look out f
or to be printed with next month's article.         LISTING 1     10 SYMBOL AFTE
R 256MEMORY &9CFF   20 RESTORE 100er0addrHIMEM+1   30 FOR i%0 TO 14READ cod$chk%
0   40 FOR j%0 TO 11a%VAL("&"+MID$(cod$,j%*2+1,2))   50 POKE addr,a%chk%chk%+a%a
ddraddr+1NEXT   60 IF chk%VAL("&"+RIGHT$(cod$,3)) THEN PRINT"Error in line"i%*10
+100er-1   70 NEXTIF er THEN END   80 CALL HIMEM+              RET       emrsend
        LD BC,0F8F2h     ehscommon      PUSH AF     emrslp         IN A,(C)     
                AND 2                     JR Z,emrslp                     POP AF
                     INC C                     OUT (C),A                     RET
       dhcpsend       LD BC,0F8E0h                     JR ehscommon       chout 
         CP 1                     RET NZ     choutjp2       LD A,(IX+0)         
            LD DE,jumpblocks                     LD BC,EMRblocks-RAMblocks 1   9
0 PRINT"CHOUT and SEND installed."   100 DATA 01099D211B9DC3D1BC119DC3541   110 
DATA 989DC3779D53454EC443484F590   120 DATA 55D40000000000C3379DC3543D7   130 DA
TA 9DC3379DC3549DC3439DC3636B1   140 DATA 9DC34F9DC3729D01ECF83E03644   150 DATA
 ED793E15ED79C901F2F83E03614   160 DATA ED793E16ED79C901E0F818F26CC   170 DATA 0
1EEF8F5ED78E60228FAF10D749   180 DATA ED79C901F2F8F5ED78E60228784   190 DATA FAF
10CED79C901E0F818EFFE804   200 DATA 01C0DD7E00111F9D01060021311   210 DATA 259DB
72004EDB018923D212B46D                       LD HL,RAMblocks                    
 OR A                     JR NZ,notRAM     copyblocks     LDIR                  
   JR jmpreset     notRAM         DEC A                     LD HL,EMRblocks     
                JR Z,copyblocks                     LD HL,DHCPblocks            
         JR copyblocks       send           LD C,A                     RLC C    
                 LD B,0                     ADD IX,BC                     LD B,A
     sendloop       DEC IX                     DEC IX  &N&&&&&&&&&SEND    BASpLL
064D4" 00DD0947DD2BDD2BDD7E00C555D" CD229DC110F2C     d e addB$    coch4(   ("&"
(co,,))2  add,chch add addI ch("&"y(co,))  "Error in line" d eF  e  P B#Z"CHOUT 
and SEND installed.""d 01099D211B9DC3D1BC119DC3541"n 989DC3779D53X+0)  LD DE,jum
pblocks  LD BC,EMRblocks-RAMblocks  LD HL,RAMblocks  OR A  JR NZ,notRAM  copyblo
cksLDIR  JR jmpreset  notRAMDEC A  LD HL,EMRblocks  JR Z,copyblocks  LD HL,DHCPb
locks  JR copyblocks    sendLD C,A  RLC C  LD B,0  ADD IX,BC  LD B,A  sendloopDE
C IX  DEC IX  LD A,(IX+0)  PUSH BC  CALL jmpmidisend  POP BC  DJNZ sendloop  RET
      $$$00, 11/5/1997  designed to be assembled with ZMAC    initialise RSXs by
 CALL &9D00    AORG 9D00h    initiali454EC443484F590"x 55D40000000000C3379DC3543
D7" 9DC3379DC3549DC3439DC3636B1" 9DC34F9DC3729D01ECF83E03644" ED793E15ED79C901F2
F83E03614" ED793E16ED79C901E0F818F26CC" 01EEF8F5ED78E60228FAF10D749" ED79C901F2F
8F5ED78E60228784" FAF10CED79C901E0F818EFFE804" 01C0DD7E00111F9D01060021311" 259D
B72004EDB018923D212B46D" 9D28F621319D18F14FCB01064D4" 00DD0947DD2BDD2BDD7E00C555
D" CD229DC110F2C900000000004180 TO 14READ cod$chk%0  40 FOR j%0 TO 11a%VALcle 18
  SCAN464.BASRSX to scan for 464-unfriendly BASIC (see article 13)  SCAN464.BINb
inary file for the above  SCAN6128.BASversion of SCAN464 to run on BASIC 1.1 mac
hines  SCAN6128.BINbinary file for the above  TUNE.BASprogram to play a tune fro
m article 12    ----  * See "Blast from the Past", WACCI 118, Jan 1998, p. 27-29
.  nd Hilary Phillips    The Programmers' Patch don published in WACCI  AI7.LOGA
I in Logo - an improved version using property lists  LISTEX.BASexample linked l
ist from artiMIDI1   BASp--Wu)  )n  datawrit, x 20 OUT contr2  statu contro data
writ  contro,6  contro, change to &16 for EMR and DHCP (       d2            dFP
 &90,60,64,&80,60,0d (( statu)  )n  datawrit, x 20 OUT control,3  30 OUT control
,&15REM change to &16 for EMR and DHCP  40 FOR xSend version 2.00, 11/5/1997  de
signed to be assembled with ZMAC    initialise RSXs by CALL &9D00    AORG 9D00h 
   initialise LD BC,rsxtab  LD HL,wrksp  JP 0BCD1h  rsxtabDEFW names  JP send  J
P chout  namesDEFB "SEN","D"+128  DEFB "CHOU","T"+128  DEFB 0  wrkspDEFS 4      
jumpblocks  jmpresetJP ramreset  jmpmidisendJP ramsend    RAMblocksJP ramreset  
JP ramsend  EMRblocksJP emrreset  JP emrsend  DHCPblocksJP dhcpreset  JP dhcpsen
d    ramresetLD BC,0F8ECh  LD A,3  OUT (C),A  LD A,15h  OUT (C),A  RET    emrres
etLD BC,0F8F2h  ehrcommonLD A,3  OUT (C),A  LD A,16h  OUT (C),A  RET    dhcprese
tLD BC,0F8E0h  JR ehrcommon    ramsendLD BC,0F8EEh  PUSH AF  ramslpIN A,(C)  AND
 2  JR Z,ramslp  POP AF  DEC C  OUT (C),A  RET    emrsendLD BC,0F8F2h  ehscommon
PUSH AF  emrslpIN A,(C)  AND 2  JR Z,emrslp  POP AF  INC C  OUT (C),A  RET    dh
cpsendLD BC,0F8E0h  JR ehscommon    choutCP 1  RET NZ  choutjp2LD A,(I  'N''''''
'''
Tous droits réservés. Reproduction sans autorisation interdite. © Kukulcan