_  __   _  _         _ _     _      _           _           
  __| |/ /_ | || |     __| (_)___| | __ (_)_ __   __| | _____  __
 / _` | '_ \| || |_   / _` | / __| |/ / | | '_ \ / _` |/ _ \ \/ /
| (_| | (_) |__   _| | (_| | \__ \   <  | | | | | (_| |  __/>  < 
 \__,_|\___/   |_|    \__,_|_|___/_|\_\ |_|_| |_|\__,_|\___/_/\_\
                                                                 
            

MODEM64

FILE INFORMATION

FILENAME(S): MODEM64

FILE TYPE(S): DEL

FILE SIZE: 14.8K

FIRST SEEN: 2025-11-30 21:28:29

APPEARS ON: 1 disk(s)

FILE HASH

f82f2e3cc214e82327a167dd9d06188b14893cdd6180d6f6a41e3a259dbc4561

FOUND ON DISKS (1 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
DDSC SOFT RUN MODEM64 DEL DuncanTwain 5 2 DOWNLOAD FILE

FILE CONTENT & ANALYSIS

00000000: 00 40 28 2A 20 D9 C1 CD  2D 43 4F 4D 50 41 54 49  |.@(* ...-COMPATI|
00000010: 42 4C 45 20 4D 4F 44 45  4D 20 43 4F 4D 4D 55 4E  |BLE MODEM COMMUN|
00000020: 49 43 41 54 49 4F 4E 20  50 52 4F 47 52 41 4D 0D  |ICATION PROGRAM.|
00000030: 0D 10 83 57 52 49 54 54  45 4E 20 49 4E 20 C7 2D  |...WRITTEN IN .-|
00000040: D0 41 53 43 41 4C 20 9A  54 48 45 20 C3 4F 4D 4D  |.ASCAL .THE .OMM|
00000050: 4F 44 4F 52 45 20 36 34  0D 0D 10 83 C1 55 54 48  |ODORE 64.....UTH|
00000060: 4F 52 3A 20 CE 49 43 4B  20 C7 41 4D 4D 4F 4E 2E  |OR: .ICK .AMMON.|
00000070: 10 84 D0 55 42 4C 49 43  20 C4 4F 4D 41 49 4E 20  |...UBLIC .OMAIN |
00000080: D0 52 4F 47 52 41 4D 2E  0D 0D 10 83 25 41 20 24  |.ROGRAM.....%A $|
00000090: 38 34 30 10 82 28 D0 2D  43 4F 44 45 53 20 53 54  |840..(.-CODES ST|
000000A0: 41 52 54 20 41 54 20 24  38 34 30 29 0D 2A 29 0D  |ART AT $840).*).|
000000B0: 0D 82 0D 10 86 42 53 20  3D 20 38 3B 0D 10 86 46  |.....BS = 8;...F|
000000C0: 46 20 3D 20 31 32 3B 0D  10 86 43 52 20 3D 20 31  |F = 12;...CR = 1|
000000D0: 33 3B 0D 10 86 46 53 20  3D 20 32 38 3B 0D 10 86  |3;...FS = 28;...|
000000E0: 43 54 52 4C 5A 20 3D 20  24 31 41 3B 0D 10 86 48  |CTRLZ = $1A;...H|
000000F0: 4F 4D 45 20 3D 20 31 34  37 3B 0D 10 86 54 52 55  |OME = 147;...TRU|
00000100: 45 20 3D 20 31 3B 0D 10  86 46 41 4C 53 45 20 3D  |E = 1;...FALSE =|
00000110: 20 30 3B 0D 0D 10 86 44  49 53 50 4C 41 59 5F 46  | 0;....DISPLAY_F|
00000120: 49 4C 45 20 3D 20 46 41  4C 53 45 3B 0D 10 86 52  |ILE = FALSE;...R|
00000130: 45 43 45 49 56 45 5F 57  49 54 48 5F 43 52 43 4B  |ECEIVE_WITH_CRCK|
00000140: 20 3D 20 54 52 55 45 3B  0D 10 86 4D 41 58 5F 52  | = TRUE;...MAX_R|
00000150: 45 54 52 49 45 53 20 3D  20 36 3B 0D 10 86 43 48  |ETRIES = 6;...CH|
00000160: 41 52 43 4F 4C 4F 55 52  20 3D 20 31 30 3B 0D 10  |ARCOLOUR = 10;..|
00000170: 86 57 48 49 54 45 20 3D  20 31 3B 0D 10 86 47 52  |.WHITE = 1;...GR|
00000180: 45 45 4E 20 3D 20 35 3B  0D 10 86 4C 49 47 48 54  |EEN = 5;...LIGHT|
00000190: 5F 52 45 44 20 3D 20 31  30 3B 0D 10 86 4C 49 47  |_RED = 10;...LIG|
000001A0: 48 54 5F 47 52 45 45 4E  20 3D 20 31 33 3B 0D 10  |HT_GREEN = 13;..|
000001B0: 86 4C 49 47 48 54 5F 42  4C 55 45 20 3D 20 31 34  |.LIGHT_BLUE = 14|
000001C0: 3B 0D 10 86 4C 49 47 48  54 5F 47 52 45 59 20 3D  |;...LIGHT_GREY =|
000001D0: 20 31 35 3B 0D 0D 10 86  53 54 41 52 54 5F 41 44  | 15;....START_AD|
000001E0: 44 52 45 53 53 20 3D 20  24 31 45 30 30 3B 0D 10  |DRESS = $1E00;..|
000001F0: 86 43 41 53 53 45 54 54  45 20 3D 20 31 3B 0D 10  |.CASSETTE = 1;..|
00000200: 86 44 49 53 4B 20 3D 20  38 3B 0D 10 86 41 52 45  |.DISK = 8;...ARE|
00000210: 47 20 3D 20 24 32 42 32  3B 0D 10 86 58 52 45 47  |G = $2B2;...XREG|
00000220: 20 3D 20 24 32 42 33 3B  0D 10 86 59 52 45 47 20  | = $2B3;...YREG |
00000230: 3D 20 24 32 42 34 3B 0D  10 86 43 43 20 3D 20 24  |= $2B4;...CC = $|
00000240: 32 42 31 3B 0D 10 86 53  45 54 4C 46 53 20 3D 20  |2B1;...SETLFS = |
00000250: 24 46 46 42 41 3B 0D 10  86 53 45 54 4E 41 4D 20  |$FFBA;...SETNAM |
00000260: 3D 20 24 46 46 42 44 3B  0D 0D 10 86 53 4F 48 20  |= $FFBD;....SOH |
00000270: 3D 20 24 31 3B 0D 10 86  45 4F 54 20 3D 20 24 34  |= $1;...EOT = $4|
00000280: 3B 0D 10 86 41 43 4B 20  3D 20 24 36 3B 0D 10 86  |;...ACK = $6;...|
00000290: 4E 41 4B 20 3D 20 24 31  35 3B 0D 10 86 43 41 4E  |NAK = $15;...CAN|
000002A0: 20 3D 20 24 31 38 3B 0D  10 86 52 53 32 33 32 5F  | = $18;...RS232_|
000002B0: 53 54 41 54 55 53 20 3D  20 24 32 39 37 3B 0D 10  |STATUS = $297;..|
000002C0: 86 45 4D 50 54 59 20 3D  20 38 3B 0D 0D 83 0D 10  |.EMPTY = 8;.....|
000002D0: 84 43 4F 4D 4D 41 4E 44  20 3A 20 A1 3B 0D 0D 10  |.COMMAND : .;...|
000002E0: 84 42 55 46 46 45 52 20  3A 20 84 5B 31 33 30 5D  |.BUFFER : .[130]|
000002F0: 20 85 A1 3B 0D 10 84 4E  41 4D 45 31 2C 20 4E 41  | ..;...NAME1, NA|
00000300: 4D 45 32 20 3A 20 84 5B  32 30 5D 20 85 A1 3B 0D  |ME2 : .[20] ..;.|
00000310: 10 84 4C 41 53 54 5F 54  45 52 4D 49 4E 41 4C 5F  |..LAST_TERMINAL_|
00000320: 4D 4F 44 45 2C 0D 10 84  4D 45 44 49 55 4D 2C 0D  |MODE,...MEDIUM,.|
00000330: 10 84 47 4F 54 5F 4D 45  44 49 55 4D 2C 0D 10 84  |..GOT_MEDIUM,...|
00000340: 4C 45 4E 47 54 48 2C 0D  10 84 42 41 44 5F 52 45  |LENGTH,...BAD_RE|
00000350: 53 55 4C 54 2C 0D 10 84  4E 45 58 54 5F 41 44 44  |SULT,...NEXT_ADD|
00000360: 52 45 53 53 2C 0D 10 84  46 49 4E 41 4C 5F 41 44  |RESS,...FINAL_AD|
00000370: 44 52 45 53 53 2C 0D 10  84 52 45 54 52 49 45 53  |DRESS,...RETRIES|
00000380: 2C 0D 10 84 45 4F 46 2C  0D 10 84 41 42 4F 52 54  |,...EOF,...ABORT|
00000390: 2C 0D 10 84 42 41 44 5F  42 4C 4F 43 4B 2C 0D 10  |,...BAD_BLOCK,..|
000003A0: 84 53 45 51 5F 45 52 52  4F 52 2C 0D 10 84 42 41  |.SEQ_ERROR,...BA|
000003B0: 44 5F 53 55 4D 5F 43 48  45 43 4B 2C 0D 10 84 54  |D_SUM_CHECK,...T|
000003C0: 49 4D 45 4F 55 54 2C 0D  10 84 42 4C 4F 43 4B 5F  |IMEOUT,...BLOCK_|
000003D0: 4E 4F 2C 0D 10 84 49 4E  56 45 52 53 45 5F 42 4C  |NO,...INVERSE_BL|
000003E0: 4F 43 4B 5F 4E 4F 2C 0D  10 84 45 58 50 45 43 54  |OCK_NO,...EXPECT|
000003F0: 45 44 5F 42 4C 4F 43 4B  2C 0D 10 84 4C 41 53 54  |ED_BLOCK,...LAST|
00000400: 5F 42 4C 4F 43 4B 2C 0D  10 84 57 41 4E 54 5F 43  |_BLOCK,...WANT_C|
00000410: 52 43 4B 2C 0D 10 84 53  55 4D 5F 43 48 45 43 4B  |RCK,...SUM_CHECK|
00000420: 5F 52 45 43 45 49 56 45  44 2C 0D 10 84 53 55 4D  |_RECEIVED,...SUM|
00000430: 5F 43 48 45 43 4B 5F 52  45 43 45 49 56 45 44 5F  |_CHECK_RECEIVED_|
00000440: 32 2C 0D 10 84 53 55 4D  5F 43 48 45 43 4B 2C 0D  |2,...SUM_CHECK,.|
00000450: 10 84 53 55 4D 5F 43 48  45 43 4B 5F 32 10 82 3A  |..SUM_CHECK_2..:|
00000460: 20 FE 3B 0D 10 84 52 4F  55 54 49 4E 45 20 3A 20  | .;...ROUTINE : |
00000470: 84 5B 33 35 5D 20 85 FE  3B 0D 0D 87 43 4F 4D 4D  |.[35] ..;...COMM|
00000480: 4F 44 4F 52 45 5F 4C 4F  47 4F 3B 0D 28 2A 2A 2A  |ODORE_LOGO;.(***|
00000490: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
000004A0: 2A 2A 2A 29 0D 88 0D 10  82 43 4F 4D 4D 4F 44 4F  |***).....COMMODO|
000004B0: 52 45 5F 4C 4F 47 4F 20  3A 3D 20 A2 5B 36 35 33  |RE_LOGO := .[653|
000004C0: 5D 20 8D 32 20 3C 3E 20  30 0D 89 3B 0D 0D 87 53  |] .2 <> 0..;...S|
000004D0: 48 49 46 54 5F 4B 45 59  5F 50 52 45 53 53 45 44  |HIFT_KEY_PRESSED|
000004E0: 3B 0D 28 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |;.(*************|
000004F0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 29 0D 88 0D  |************)...|
00000500: 10 82 53 48 49 46 54 5F  4B 45 59 5F 50 52 45 53  |..SHIFT_KEY_PRES|
00000510: 53 45 44 20 3A 3D 20 A2  5B 36 35 33 5D 20 8D 31  |SED := .[653] .1|
00000520: 20 3C 3E 20 30 0D 89 3B  0D 0D 86 4F 50 45 4E 5F  | <> 0..;...OPEN_|
00000530: 52 53 32 33 32 5F 46 49  4C 45 3B 0D 28 2A 2A 2A  |RS232_FILE;.(***|
00000540: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00000550: 2A 2A 2A 2A 2A 29 0D 82  0D 10 86 4F 50 45 4E 49  |*****).....OPENI|
00000560: 54 20 3D 20 24 46 46 43  30 3B 0D 83 4E 41 4D 45  |T = $FFC0;..NAME|
00000570: 20 3A 20 84 5B 31 5D 20  85 A1 3B 0D 88 0D 28 2A  | : .[1] ..;...(*|
00000580: 20 46 49 52 53 54 20 53  45 54 20 55 50 20 54 48  | FIRST SET UP TH|
00000590: 45 20 46 49 4C 45 20 4E  41 4D 45 0D 10 83 41 53  |E FILE NAME...AS|
000005A0: 20 50 45 52 20 54 48 45  20 D2 D3 32 33 32 20 50  | PER THE ..232 P|
000005B0: 41 52 41 4D 54 45 52 53  20 2A 29 0D 0D 10 82 4E  |ARAMTERS *)....N|
000005C0: 41 4D 45 20 5B 31 5D 20  3A 3D 20 36 3B 10 82 28  |AME [1] := 6;..(|
000005D0: 2A 10 82 33 30 30 20 42  41 55 44 10 82 2A 29 0D  |*..300 BAUD..*).|
000005E0: 10 82 4E 41 4D 45 20 5B  30 5D 20 3A 3D 20 30 3B  |..NAME [0] := 0;|
000005F0: 10 84 28 2A 10 82 33 2D  4C 49 4E 45 10 84 2A 29  |..(*..3-LINE..*)|
00000600: 0D 10 82 A2 5B 24 46 38  5D 20 3A 3D 20 24 43 31  |....[$F8] := $C1|
00000610: 3B 20 28 2A 20 42 55 46  46 45 52 20 2A 29 0D 10  |; (* BUFFER *)..|
00000620: 82 A2 5B 24 46 41 5D 20  3A 3D 20 24 43 32 3B 20  |..[$FA] := $C2; |
00000630: 28 2A 20 42 55 46 46 45  52 20 2A 29 0D 10 82 A2  |(* BUFFER *)....|
00000640: 5B 41 52 45 47 5D 20 3A  3D 20 32 3B 0D 10 82 A2  |[AREG] := 2;....|
00000650: 5B 58 52 45 47 5D 20 3A  3D 20 32 3B 20 28 2A 20  |[XREG] := 2; (* |
00000660: D2 D3 32 33 32 20 2A 29  0D 10 82 A2 5B 59 52 45  |..232 *)....[YRE|
00000670: 47 5D 20 3A 3D 20 32 3B  0D 10 82 9F 28 53 45 54  |G] := 2;....(SET|
00000680: 4C 46 53 29 3B 0D 10 82  A2 5B 41 52 45 47 5D 20  |LFS);....[AREG] |
00000690: 3A 3D 20 32 3B 0D 10 82  A2 5B 58 52 45 47 5D 20  |:= 2;....[XREG] |
000006A0: 3A 3D 20 A9 28 4E 41 4D  45 5B 31 5D 29 3B 0D 10  |:= .(NAME[1]);..|
000006B0: 82 A2 5B 59 52 45 47 5D  20 3A 3D 20 A9 28 4E 41  |..[YREG] := .(NA|
000006C0: 4D 45 5B 31 5D 29 20 8F  38 3B 0D 10 82 9F 28 53  |ME[1]) .8;....(S|
000006D0: 45 54 4E 41 4D 29 3B 0D  10 82 9F 28 4F 50 45 4E  |ETNAM);....(OPEN|
000006E0: 49 54 29 0D 89 3B 0D 0D  86 49 4E 49 54 3B 0D 28  |IT)..;...INIT;.(|
000006F0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 29 0D 82  |*************)..|
00000700: 43 4F 4C 4F 55 52 20 3D  20 31 3B 0D 10 86 50 4F  |COLOUR = 1;...PO|
00000710: 49 4E 54 20 3D 20 32 3B  0D 10 86 42 45 48 49 4E  |INT = 2;...BEHIN|
00000720: 44 42 4B 20 3D 20 36 3B  0D 0D 83 49 20 3A 20 FE  |DBK = 6;...I : .|
00000730: 3B 0D 0D 86 49 4E 53 45  52 54 28 58 2C 20 59 2C  |;...INSERT(X, Y,|
00000740: 20 5A 29 3B 0D 88 0D 10  82 52 4F 55 54 49 4E 45  | Z);.....ROUTINE|
00000750: 20 5B 49 5D 20 3A 3D 20  58 3B 0D 10 82 52 4F 55  | [I] := X;...ROU|
00000760: 54 49 4E 45 20 5B 49 20  2D 20 31 5D 20 3A 3D 20  |TINE [I - 1] := |
00000770: 59 3B 0D 10 82 52 4F 55  54 49 4E 45 20 5B 49 20  |Y;...ROUTINE [I |
00000780: 2D 20 32 5D 20 3A 3D 20  5A 3B 0D 10 82 49 20 3A  |- 2] := Z;...I :|
00000790: 3D 20 49 20 2D 20 33 0D  89 3B 0D 0D 88 28 2A 20  |= I - 3..;...(* |
000007A0: 49 4E 49 54 20 2A 29 0D  10 82 9D 28 AB 28 48 4F  |INIT *)....(.(HO|
000007B0: 4D 45 29 29 3B 0D 10 82  E2 28 43 48 41 52 43 4F  |ME));....(CHARCO|
000007C0: 4C 4F 55 52 2C 20 4C 49  47 48 54 5F 47 52 45 59  |LOUR, LIGHT_GREY|
000007D0: 29 3B 0D 10 82 A2 5B 36  35 30 5D 20 3A 3D 20 31  |);....[650] := 1|
000007E0: 32 38 3B 10 82 28 2A 20  41 4C 4C 20 4B 45 59 53  |28;..(* ALL KEYS|
000007F0: 20 41 55 54 4F 2D 98 2A  29 0D 10 82 FF 28 22 D9  | AUTO-.*)....(".|
00000800: C1 CD 2D 43 4F 4D 50 41  54 49 42 4C 45 20 CD 4F  |..-COMPATIBLE .O|
00000810: 44 45 4D 20 D0 52 4F 47  52 41 4D 20 46 4F 52 20  |DEM .ROGRAM FOR |
00000820: C3 36 34 2E 22 29 3B 0D  10 82 FF 28 22 D7 52 49  |.64.");....(".RI|
00000830: 54 54 45 4E 20 42 59 20  CE 49 43 4B 20 C7 41 4D  |TTEN BY .ICK .AM|
00000840: 4D 4F 4E 20 49 4E 20 C7  2D D0 41 53 43 41 4C 2E  |MON IN .-.ASCAL.|
00000850: 22 29 3B 0D 10 82 FF 28  22 D6 45 52 53 49 4F 4E  |");....(".ERSION|
00000860: 20 31 2E 32 20 20 2D 20  D0 D5 C2 CC C9 C3 20 C4  | 1.2  - ...... .|
00000870: CF CD C1 C9 CE 2E 22 29  3B 0D 10 82 FF 28 22 C7  |......");....(".|
00000880: 2D D0 41 53 43 41 4C 20  49 53 20 50 52 4F 44 55  |-.ASCAL IS PRODU|
00000890: 43 45 44 20 42 59 20 C7  41 4D 42 49 54 20 C7 41  |CED BY .AMBIT .A|
000008A0: 4D 45 53 20 2D 22 29 3B  0D 10 82 FF 28 22 20 45  |MES -");....(" E|
000008B0: 4E 51 55 49 52 49 45 53  3A 20 C7 41 4D 42 49 54  |NQUIRIES: .AMBIT|
000008C0: 20 C7 41 4D 45 53 2C 20  D0 2E CF 2E 20 C2 4F 58  | .AMES, .... .OX|
000008D0: 20 31 32 34 2C 22 29 3B  0D 10 82 FF 28 22 20 C9  | 124,");....(" .|
000008E0: 56 41 4E 48 4F 45 2C 20  D6 49 43 54 4F 52 49 41  |VANHOE, .ICTORIA|
000008F0: 20 33 30 37 39 2E 20 C1  55 53 54 52 41 4C 49 41  | 3079. .USTRALIA|
00000900: 2E 22 29 3B 0D 10 82 FF  3B 0D 10 82 49 20 3A 3D  |.");....;...I :=|
00000910: 20 33 35 3B 0D 10 82 28  2A 20 43 52 43 4B 20 52  | 35;...(* CRCK R|
00000920: 4F 55 54 49 4E 45 20 9A  54 52 41 4E 53 4D 49 53  |OUTINE .TRANSMIS|
00000930: 53 49 4F 4E 20 2A 29 0D  10 82 49 4E 53 45 52 54  |SION *)...INSERT|
00000940: 28 24 38 35 30 30 41 39  2C 24 35 46 38 35 35 45  |($8500A9,$5F855E|
00000950: 2C 24 38 35 34 42 42 31  29 3B 0D 10 82 49 4E 53  |,$854BB1);...INS|
00000960: 45 52 54 28 24 30 38 41  32 30 37 2C 24 32 36 30  |ERT($08A207,$260|
00000970: 37 32 36 2C 24 35 46 32  36 35 45 29 3B 0D 10 82  |726,$5F265E);...|
00000980: 49 4E 53 45 52 54 28 24  41 35 30 43 39 30 2C 24  |INSERT($A50C90,$|
00000990: 31 30 34 39 35 46 2C 24  41 35 35 46 38 35 29 3B  |10495F,$A55F85);|
000009A0: 0D 10 82 49 4E 53 45 52  54 28 24 32 31 34 39 35  |...INSERT($21495|
000009B0: 45 2C 24 43 41 35 45 38  35 2C 24 38 38 45 39 44  |E,$CA5E85,$88E9D|
000009C0: 30 29 3B 0D 10 82 49 4E  53 45 52 54 28 24 36 30  |0);...INSERT($60|
000009D0: 45 30 44 30 2C 30 2C 30  29 3B 0D 10 82 28 2A 20  |E0D0,0,0);...(* |
000009E0: 43 52 43 4B 20 52 4F 55  54 49 4E 45 20 9A 46 49  |CRCK ROUTINE .FI|
000009F0: 4C 45 20 2A 29 0D 10 82  49 4E 53 45 52 54 28 24  |LE *)...INSERT($|
00000A00: 38 35 30 30 41 39 2C 24  30 36 38 35 30 35 2C 24  |8500A9,$068505,$|
00000A10: 30 35 30 36 41 38 29 3B  0D 10 82 49 4E 53 45 52  |0506A8);...INSER|
00000A20: 54 28 24 30 38 30 36 32  36 2C 24 31 38 34 42 42  |T($080626,$184BB|
00000A30: 31 2C 24 38 35 30 35 36  35 29 3B 0D 10 82 49 4E  |1,$850565);...IN|
00000A40: 53 45 52 54 28 24 39 30  32 38 30 35 2C 24 39 37  |SERT($902805,$97|
00000A50: 34 39 30 41 2C 24 41 35  30 35 38 35 29 3B 0D 10  |490A,$A50585);..|
00000A60: 82 49 4E 53 45 52 54 28  24 41 30 34 39 30 36 2C  |.INSERT($A04906,|
00000A70: 24 45 36 30 36 38 35 2C  24 30 32 44 30 34 42 29  |$E60685,$02D04B)|
00000A80: 3B 0D 10 82 49 4E 53 45  52 54 28 24 41 35 34 43  |;...INSERT($A54C|
00000A90: 45 36 2C 24 35 45 43 35  34 42 2C 24 41 35 44 42  |E6,$5EC54B,$A5DB|
00000AA0: 44 30 29 3B 0D 10 82 49  4E 53 45 52 54 28 24 35  |D0);...INSERT($5|
00000AB0: 46 43 35 34 43 2C 24 41  35 44 35 44 30 2C 24 34  |FC54C,$A5D5D0,$4|
00000AC0: 42 38 35 30 35 29 3B 0D  10 82 49 4E 53 45 52 54  |B8505);...INSERT|
00000AD0: 28 24 38 35 30 36 41 35  2C 24 46 46 36 30 34 43  |($8506A5,$FF604C|
00000AE0: 2C 30 29 3B 0D 10 82 42  55 46 46 45 52 20 5B 31  |,0);...BUFFER [1|
00000AF0: 32 38 5D 20 3A 3D 20 30  3B 0D 10 82 42 55 46 46  |28] := 0;...BUFF|
00000B00: 45 52 20 5B 31 32 39 5D  20 3A 3D 20 30 3B 0D 10  |ER [129] := 0;..|
00000B10: 82 43 4F 4D 4D 41 4E 44  20 3A 3D 20 22 46 22 3B  |.COMMAND := "F";|
00000B20: 0D 10 82 A5 28 33 32 2C  0D 10 83 24 46 46 2C 24  |....(32,...$FF,$|
00000B30: 46 46 2C 24 46 46 2C 24  46 46 2C 24 46 46 2C 24  |FF,$FF,$FF,$FF,$|
00000B40: 46 46 2C 24 46 46 2C 24  46 46 29 3B 0D 10 82 DF  |FF,$FF,$FF);....|
00000B50: 28 31 2C 20 50 4F 49 4E  54 2C 20 33 32 2C 0D 10  |(1, POINT, 32,..|
00000B60: 8A 31 2C 20 43 4F 4C 4F  55 52 2C 20 4C 49 47 48  |.1, COLOUR, LIGH|
00000B70: 54 5F 47 52 45 59 2C 0D  10 8A 31 2C 20 42 45 48  |T_GREY,...1, BEH|
00000B80: 49 4E 44 42 4B 2C 20 54  52 55 45 29 3B 0D 10 82  |INDBK, TRUE);...|
00000B90: 47 4F 54 5F 4D 45 44 49  55 4D 20 3A 3D 20 46 41  |GOT_MEDIUM := FA|
00000BA0: 4C 53 45 3B 0D 10 82 46  49 4E 41 4C 5F 41 44 44  |LSE;...FINAL_ADD|
00000BB0: 52 45 53 53 20 3A 3D 20  53 54 41 52 54 5F 41 44  |RESS := START_AD|
00000BC0: 44 52 45 53 53 3B 0D 10  82 4F 50 45 4E 5F 52 53  |DRESS;...OPEN_RS|
00000BD0: 32 33 32 5F 46 49 4C 45  0D 89 3B 20 28 2A 20 85  |232_FILE..; (* .|
00000BE0: 49 4E 49 54 20 2A 29 0D  0D 86 53 54 41 52 54 5F  |INIT *)...START_|
00000BF0: 45 52 52 4F 52 3B 0D 28  2A 2A 2A 2A 2A 2A 2A 2A  |ERROR;.(********|
00000C00: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 29 0D 88 0D  |************)...|
00000C10: 10 82 E2 28 43 48 41 52  43 4F 4C 4F 55 52 2C 20  |...(CHARCOLOUR, |
00000C20: 4C 49 47 48 54 5F 52 45  44 29 3B 0D 10 82 FF 0D  |LIGHT_RED);.....|
00000C30: 89 3B 0D 0D 86 45 52 52  4F 52 3B 0D 28 2A 2A 2A  |.;...ERROR;.(***|
00000C40: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 29 0D 88 0D 92  |***********)....|
00000C50: 45 58 50 45 43 54 45 44  5F 42 4C 4F 43 4B 20 3C  |EXPECTED_BLOCK <|
00000C60: 3E 20 2D 31 20 93 0D 10  83 9D 28 22 20 4F 4E 20  |> -1 .....(" ON |
00000C70: 42 4C 4F 43 4B 20 22 2C  0D 10 8C 45 58 50 45 43  |BLOCK ",...EXPEC|
00000C80: 54 45 44 5F 42 4C 4F 43  4B 29 0D 94 0D 10 83 9D  |TED_BLOCK)......|
00000C90: 28 22 20 4F 4E 20 C5 CF  D4 22 29 3B 0D FF 28 22  |(" ON ...");..("|
00000CA0: 20 52 45 54 52 59 20 22  2C 20 52 45 54 52 49 45  | RETRY ", RETRIE|
00000CB0: 53 29 3B 0D 52 45 54 52  49 45 53 20 3A 3D 20 52  |S);.RETRIES := R|
00000CC0: 45 54 52 49 45 53 20 2B  20 31 3B 0D E2 28 43 48  |ETRIES + 1;..(CH|
00000CD0: 41 52 43 4F 4C 4F 55 52  2C 20 47 52 45 45 4E 29  |ARCOLOUR, GREEN)|
00000CE0: 3B 0D 92 52 45 54 52 49  45 53 20 3E 20 4D 41 58  |;..RETRIES > MAX|
00000CF0: 5F 52 45 54 52 49 45 53  20 93 0D 10 82 41 42 4F  |_RETRIES ....ABO|
00000D00: 52 54 20 3A 3D 20 54 52  55 45 0D 89 3B 0D 0D 86  |RT := TRUE..;...|
00000D10: 47 45 54 5F 46 49 4C 45  5F 4E 41 4D 45 3B 0D 28  |GET_FILE_NAME;.(|
00000D20: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00000D30: 2A 2A 2A 2A 2A 2A 29 0D  83 49 2C 20 47 4F 54 5F  |******)..I, GOT_|
00000D40: 43 52 20 3A 20 FE 3B 0D  10 84 43 48 20 3A 20 A1  |CR : .;...CH : .|
00000D50: 3B 0D 88 0D 92 90 47 4F  54 5F 4D 45 44 49 55 4D  |;.....GOT_MEDIUM|
00000D60: 20 93 0D 10 82 88 0D 10  82 FF 3B 0D 10 82 9D 28  | .........;....(|
00000D70: 22 3C C4 3E 49 53 4B 20  4F 52 20 3C C3 3E 41 53  |"<.>ISK OR <.>AS|
00000D80: 53 45 54 54 45 3F 20 22  29 3B 0D 10 82 E2 28 43  |SETTE? ");....(C|
00000D90: 48 41 52 43 4F 4C 4F 55  52 2C 20 4C 49 47 48 54  |HARCOLOUR, LIGHT|
00000DA0: 5F 42 4C 55 45 29 3B 0D  10 82 98 0D 10 84 9E 28  |_BLUE);........(|
00000DB0: 43 48 29 3B 0D 10 84 43  48 20 3A 3D 20 43 48 20  |CH);...CH := CH |
00000DC0: 8D 24 37 46 0D 10 82 99  28 43 48 20 3D 20 22 44  |.$7F....(CH = "D|
00000DD0: 22 29 0D 10 85 8A 28 43  48 20 3D 20 22 43 22 29  |")....(CH = "C")|
00000DE0: 3B 0D 10 82 FF 28 AB 28  43 48 29 29 3B 0D 10 82  |;....(.(CH));...|
00000DF0: E2 28 43 48 41 52 43 4F  4C 4F 55 52 2C 20 47 52  |.(CHARCOLOUR, GR|
00000E00: 45 45 4E 29 3B 0D 10 82  92 43 48 20 3D 20 22 44  |EEN);....CH = "D|
00000E10: 22 20 93 0D 10 84 88 0D  10 84 4D 45 44 49 55 4D  |" ........MEDIUM|
00000E20: 20 3A 3D 20 44 49 53 4B  3B 0D 10 84 FC 28 31 35  | := DISK;....(15|
00000E30: 2C 20 44 49 53 4B 2C 20  31 35 2C 20 22 49 22 29  |, DISK, 15, "I")|
00000E40: 0D 10 84 89 0D 10 82 94  0D 10 84 4D 45 44 49 55  |...........MEDIU|
00000E50: 4D 20 3A 3D 20 43 41 53  53 45 54 54 45 3B 0D 10  |M := CASSETTE;..|
00000E60: 82 47 4F 54 5F 4D 45 44  49 55 4D 20 3A 3D 20 54  |.GOT_MEDIUM := T|
00000E70: 52 55 45 0D 10 82 89 3B  0D 98 0D 10 82 FF 3B 0D  |RUE....;......;.|
00000E80: 10 82 9D 28 22 C6 49 4C  45 20 4E 41 4D 45 3F 20  |...(".ILE NAME? |
00000E90: 22 29 3B 0D 10 82 E2 28  43 48 41 52 43 4F 4C 4F  |");....(CHARCOLO|
00000EA0: 55 52 2C 20 4C 49 47 48  54 5F 42 4C 55 45 29 3B  |UR, LIGHT_BLUE);|
00000EB0: 0D 10 82 9E 28 4E 41 4D  45 31 29 3B 0D 10 82 E2  |....(NAME1);....|
00000EC0: 28 43 48 41 52 43 4F 4C  4F 55 52 2C 20 47 52 45  |(CHARCOLOUR, GRE|
00000ED0: 45 4E 29 3B 0D 10 82 47  4F 54 5F 43 52 20 3A 3D  |EN);...GOT_CR :=|
00000EE0: 20 46 41 4C 53 45 3B 0D  10 82 9A 49 20 3A 3D 20  | FALSE;....I := |
00000EF0: 30 20 9B 32 30 20 97 0D  10 84 92 90 47 4F 54 5F  |0 .20 ......GOT_|
00000F00: 43 52 20 93 0D 10 86 88  0D 10 86 4E 41 4D 45 32  |CR ........NAME2|
00000F10: 20 5B 32 30 20 2D 20 49  5D 20 3A 3D 20 4E 41 4D  | [20 - I] := NAM|
00000F20: 45 31 20 5B 49 5D 3B 0D  10 86 92 4E 41 4D 45 31  |E1 [I];....NAME1|
00000F30: 20 5B 49 5D 20 3D 20 43  52 20 93 0D 10 88 88 0D  | [I] = CR ......|
00000F40: 10 88 4C 45 4E 47 54 48  20 3A 3D 20 49 3B 0D 10  |..LENGTH := I;..|
00000F50: 88 47 4F 54 5F 43 52 20  3A 3D 20 54 52 55 45 0D  |.GOT_CR := TRUE.|
00000F60: 10 88 89 0D 10 86 89 0D  99 4C 45 4E 47 54 48 20  |.........LENGTH |
00000F70: 3C 3E 20 30 0D 89 3B 0D  0D 86 43 48 45 43 4B 5F  |<> 0..;...CHECK_|
00000F80: 52 45 53 55 4C 54 3B 0D  28 2A 2A 2A 2A 2A 2A 2A  |RESULT;.(*******|
00000F90: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 29 0D  |**************).|
00000FA0: 82 52 45 41 44 53 54 20  3D 20 24 46 46 42 37 3B  |.READST = $FFB7;|
00000FB0: 0D 0D 83 49 2C 20 45 52  52 4F 52 5F 43 4F 44 45  |...I, ERROR_CODE|
00000FC0: 20 3A 20 FE 3B 0D 10 84  52 45 53 55 4C 54 20 3A  | : .;...RESULT :|
00000FD0: 20 84 5B 38 30 5D 20 85  A1 3B 0D 88 0D 10 82 92  | .[80] ..;......|
00000FE0: A2 5B 43 43 5D 20 8D 31  20 93 0D 10 84 45 52 52  |.[CC] .1 ....ERR|
00000FF0: 4F 52 5F 43 4F 44 45 20  3A 3D 20 A2 5B 41 52 45  |OR_CODE := .[ARE|
00001000: 47 5D 10 82 28 2A 20 47  4F 54 20 45 52 52 4F 52  |G]..(* GOT ERROR|
00001010: 20 2A 29 0D 10 82 94 0D  10 84 88 0D 10 84 9F 28  | *)............(|
00001020: 52 45 41 44 53 54 29 3B  0D 10 84 45 52 52 4F 52  |READST);...ERROR|
00001030: 5F 43 4F 44 45 20 3A 3D  20 A2 5B 41 52 45 47 5D  |_CODE := .[AREG]|
00001040: 20 8D 24 42 46 0D 10 84  89 3B 0D 10 82 42 41 44  | .$BF....;...BAD|
00001050: 5F 52 45 53 55 4C 54 20  3A 3D 20 45 52 52 4F 52  |_RESULT := ERROR|
00001060: 5F 43 4F 44 45 3B 0D 10  82 92 4D 45 44 49 55 4D  |_CODE;....MEDIUM|
00001070: 20 3D 20 44 49 53 4B 20  93 0D 10 84 88 0D 10 84  | = DISK ........|
00001080: 81 28 31 35 29 3B 0D 10  84 9E 28 52 45 53 55 4C  |.(15);....(RESUL|
00001090: 54 29 3B 0D 10 84 81 28  30 29 3B 0D 10 84 52 45  |T);....(0);...RE|
000010A0: 53 55 4C 54 20 5B 38 30  5D 20 3A 3D 20 43 52 3B  |SULT [80] := CR;|
000010B0: 0D 10 84 92 28 52 45 53  55 4C 54 20 5B 30 5D 20  |....(RESULT [0] |
000010C0: 3C 3E 20 22 30 22 29 0D  10 84 8A 28 52 45 53 55  |<> "0")....(RESU|
000010D0: 4C 54 20 5B 31 5D 20 3C  3E 20 22 30 22 29 20 93  |LT [1] <> "0") .|
000010E0: 0D 10 86 88 0D 10 86 42  41 44 5F 52 45 53 55 4C  |.......BAD_RESUL|
000010F0: 54 20 3A 3D 20 54 52 55  45 3B 0D 10 86 49 20 3A  |T := TRUE;...I :|
00001100: 3D 20 2D 31 3B 0D 10 86  53 54 41 52 54 5F 45 52  |= -1;...START_ER|
00001110: 52 4F 52 3B 0D 10 86 98  0D 10 88 49 20 3A 3D 20  |ROR;.......I := |
00001120: 49 20 2B 20 31 3B 0D 10  88 9D 28 AB 28 52 45 53  |I + 1;....(.(RES|
00001130: 55 4C 54 20 5B 49 5D 29  29 0D 10 86 99 52 45 53  |ULT [I]))....RES|
00001140: 55 4C 54 20 5B 49 5D 20  3D 20 43 52 0D 10 86 89  |ULT [I] = CR....|
00001150: 0D 10 84 89 3B 0D 10 82  FF 3B 0D 10 82 92 45 52  |....;....;....ER|
00001160: 52 4F 52 5F 43 4F 44 45  20 93 0D 10 84 88 0D 10  |ROR_CODE .......|
00001170: 84 53 54 41 52 54 5F 45  52 52 4F 52 3B 0D 10 84  |.START_ERROR;...|
00001180: FF 28 22 C6 49 4C 45 20  45 52 52 4F 52 2C 20 43  |.(".ILE ERROR, C|
00001190: 4F 44 45 3A 20 22 2C 0D  10 8B 45 52 52 4F 52 5F  |ODE: ",...ERROR_|
000011A0: 43 4F 44 45 29 0D 10 84  89 3B 0D 10 82 E2 28 43  |CODE)....;....(C|
000011B0: 48 41 52 43 4F 4C 4F 55  52 2C 20 47 52 45 45 4E  |HARCOLOUR, GREEN|
000011C0: 29 3B 0D 10 82 92 90 42  41 44 5F 52 45 53 55 4C  |);.....BAD_RESUL|
000011D0: 54 20 93 0D 10 84 FF 28  22 CF 4B 2E 22 29 0D 89  |T .....(".K.")..|
000011E0: 3B 0D 0D 86 4C 4F 41 44  5F 4E 4F 4D 49 4E 41 54  |;...LOAD_NOMINAT|
000011F0: 45 44 5F 46 49 4C 45 20  28 46 4C 41 47 29 3B 0D  |ED_FILE (FLAG);.|
00001200: 28 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |(***************|
00001210: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00001220: 2A 2A 2A 2A 29 0D 0D 86  4C 4F 41 44 5F 46 49 4C  |****)...LOAD_FIL|
00001230: 45 3B 0D 28 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |E;.(************|
00001240: 2A 2A 2A 2A 2A 2A 29 0D  82 0D 10 85 4C 4F 41 44  |******).....LOAD|
00001250: 49 54 20 3D 20 24 46 46  44 35 3B 0D 0D 88 0D 10  |IT = $FFD5;.....|
00001260: 82 A2 5B 41 52 45 47 5D  20 3A 3D 20 31 3B 0D 10  |..[AREG] := 1;..|
00001270: 82 A2 5B 58 52 45 47 5D  20 3A 3D 20 4D 45 44 49  |..[XREG] := MEDI|
00001280: 55 4D 3B 0D 10 82 A2 5B  59 52 45 47 5D 20 3A 3D  |UM;....[YREG] :=|
00001290: 20 30 3B 20 28 2A 20 52  45 4C 4F 43 41 54 45 20  | 0; (* RELOCATE |
000012A0: 2A 29 0D 10 82 9F 28 53  45 54 4C 46 53 29 3B 0D  |*)....(SETLFS);.|
000012B0: 10 82 A2 5B 41 52 45 47  5D 20 3A 3D 20 4C 45 4E  |...[AREG] := LEN|
000012C0: 47 54 48 3B 0D 10 82 A2  5B 58 52 45 47 5D 20 3A  |GTH;....[XREG] :|
000012D0: 3D 20 A9 28 4E 41 4D 45  32 5B 32 30 5D 29 3B 0D  |= .(NAME2[20]);.|
000012E0: 10 82 A2 5B 59 52 45 47  5D 20 3A 3D 20 A9 28 4E  |...[YREG] := .(N|
000012F0: 41 4D 45 32 5B 32 30 5D  29 20 8F 38 3B 0D 10 82  |AME2[20]) .8;...|
00001300: 9F 28 53 45 54 4E 41 4D  29 3B 0D 10 82 A2 5B 41  |.(SETNAM);....[A|
00001310: 52 45 47 5D 20 3A 3D 20  46 4C 41 47 3B 10 82 28  |REG] := FLAG;..(|
00001320: 2A 20 FA 2F 56 45 52 49  46 59 20 2A 29 0D 10 82  |* ./VERIFY *)...|
00001330: A2 5B 58 52 45 47 5D 20  3A 3D 20 53 54 41 52 54  |.[XREG] := START|
00001340: 5F 41 44 44 52 45 53 53  3B 0D 10 82 A2 5B 59 52  |_ADDRESS;....[YR|
00001350: 45 47 5D 20 3A 3D 20 53  54 41 52 54 5F 41 44 44  |EG] := START_ADD|
00001360: 52 45 53 53 20 8F 38 3B  0D 10 82 9F 28 4C 4F 41  |RESS .8;....(LOA|
00001370: 44 49 54 29 3B 0D 10 82  43 48 45 43 4B 5F 52 45  |DIT);...CHECK_RE|
00001380: 53 55 4C 54 0D 89 3B 0D  0D 28 2A 2A 2A 2A 2A 20  |SULT..;..(***** |
00001390: 53 54 41 52 54 20 85 3A  20 4C 4F 41 44 5F 4E 4F  |START .: LOAD_NO|
000013A0: 4D 49 4E 41 54 45 44 5F  46 49 4C 45 20 2A 2A 2A  |MINATED_FILE ***|
000013B0: 29 0D 88 0D 98 0D 10 82  92 46 4C 41 47 20 3D 20  |)........FLAG = |
000013C0: 30 20 93 20 28 2A 20 FA  2A 29 0D 10 84 47 45 54  |0 . (* .*)...GET|
000013D0: 5F 46 49 4C 45 5F 4E 41  4D 45 3B 0D 10 82 4C 4F  |_FILE_NAME;...LO|
000013E0: 41 44 5F 46 49 4C 45 0D  99 28 42 41 44 5F 52 45  |AD_FILE..(BAD_RE|
000013F0: 53 55 4C 54 20 3D 20 30  29 0D 10 83 8A 28 46 4C  |SULT = 0)....(FL|
00001400: 41 47 20 3D 20 31 29 0D  89 3B 0D 0D 86 53 41 56  |AG = 1)..;...SAV|
00001410: 45 5F 4E 4F 4D 49 4E 41  54 45 44 5F 46 49 4C 45  |E_NOMINATED_FILE|
00001420: 3B 0D 28 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |;.(*************|
00001430: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 29  |***************)|
00001440: 0D 0D 86 53 41 56 45 5F  46 49 4C 45 3B 0D 28 2A  |...SAVE_FILE;.(*|
00001450: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00001460: 2A 2A 2A 29 0D 82 53 41  56 45 49 54 20 3D 20 24  |***)..SAVEIT = $|
00001470: 46 46 44 38 3B 0D 10 86  52 45 47 49 53 54 45 52  |FFD8;...REGISTER|
00001480: 20 3D 20 24 36 41 3B 0D  88 0D 10 82 A2 5B 41 52  | = $6A;......[AR|
00001490: 45 47 5D 20 3A 3D 20 31  3B 10 82 28 2A 20 46 49  |EG] := 1;..(* FI|
000014A0: 4C 45 20 4E 4F 20 2A 29  0D 10 82 A2 5B 58 52 45  |LE NO *)....[XRE|
000014B0: 47 5D 20 3A 3D 20 4D 45  44 49 55 4D 3B 0D 10 82  |G] := MEDIUM;...|
000014C0: A2 5B 59 52 45 47 5D 20  3A 3D 20 30 3B 0D 10 82  |.[YREG] := 0;...|
000014D0: 9F 28 53 45 54 4C 46 53  29 3B 0D 10 82 A2 5B 41  |.(SETLFS);....[A|
000014E0: 52 45 47 5D 20 3A 3D 20  4C 45 4E 47 54 48 3B 0D  |REG] := LENGTH;.|
000014F0: 10 82 A2 5B 58 52 45 47  5D 20 3A 3D 0D 10 87 A9  |...[XREG] :=....|
00001500: 28 4E 41 4D 45 32 20 5B  32 30 5D 29 3B 0D 10 82  |(NAME2 [20]);...|
00001510: A2 5B 59 52 45 47 5D 20  3A 3D 0D 10 87 A9 28 4E  |.[YREG] :=....(N|
00001520: 41 4D 45 32 20 5B 32 30  5D 29 20 8F 38 3B 0D 10  |AME2 [20]) .8;..|
00001530: 82 9F 28 53 45 54 4E 41  4D 29 3B 0D 10 82 A2 5B  |..(SETNAM);....[|
00001540: 52 45 47 49 53 54 45 52  5D 20 3A 3D 20 53 54 41  |REGISTER] := STA|
00001550: 52 54 5F 41 44 44 52 45  53 53 3B 0D 10 82 A2 5B  |RT_ADDRESS;....[|
00001560: 52 45 47 49 53 54 45 52  20 2B 20 31 5D 20 3A 3D  |REGISTER + 1] :=|
00001570: 0D 10 8E 53 54 41 52 54  5F 41 44 44 52 45 53 53  |...START_ADDRESS|
00001580: 20 8F 38 3B 0D 10 82 A2  5B 41 52 45 47 5D 20 3A  | .8;....[AREG] :|
00001590: 3D 20 52 45 47 49 53 54  45 52 3B 0D 10 82 A2 5B  |= REGISTER;....[|
000015A0: 58 52 45 47 5D 20 3A 3D  20 46 49 4E 41 4C 5F 41  |XREG] := FINAL_A|
000015B0: 44 44 52 45 53 53 3B 0D  10 82 A2 5B 59 52 45 47  |DDRESS;....[YREG|
000015C0: 5D 20 3A 3D 20 46 49 4E  41 4C 5F 41 44 44 52 45  |] := FINAL_ADDRE|
000015D0: 53 53 20 8F 38 3B 0D 10  82 9F 28 53 41 56 45 49  |SS .8;....(SAVEI|
000015E0: 54 29 3B 0D 10 82 43 48  45 43 4B 5F 52 45 53 55  |T);...CHECK_RESU|
000015F0: 4C 54 0D 89 3B 0D 0D 28  2A 2A 2A 2A 2A 20 53 54  |LT..;..(***** ST|
00001600: 41 52 54 20 85 3A 20 53  41 56 45 5F 4E 4F 4D 49  |ART .: SAVE_NOMI|
00001610: 4E 41 54 45 44 5F 46 49  4C 45 20 2A 2A 2A 29 0D  |NATED_FILE ***).|
00001620: 88 0D 98 0D 10 82 47 45  54 5F 46 49 4C 45 5F 4E  |......GET_FILE_N|
00001630: 41 4D 45 3B 0D 10 82 53  41 56 45 5F 46 49 4C 45  |AME;...SAVE_FILE|
00001640: 3B 0D 10 82 92 90 42 41  44 5F 52 45 53 55 4C 54  |;.....BAD_RESULT|
00001650: 20 93 0D 10 84 88 0D 10  84 92 4D 45 44 49 55 4D  | .........MEDIUM|
00001660: 20 3D 20 43 41 53 53 45  54 54 45 20 93 0D 10 86  | = CASSETTE ....|
00001670: 88 0D 10 86 FF 3B 0D 10  86 FF 28 22 D2 45 57 49  |.....;....(".EWI|
00001680: 4E 44 20 43 41 53 53 45  54 54 45 20 54 4F 20 53  |ND CASSETTE TO S|
00001690: 41 56 45 20 50 4F 49 4E  54 20 46 4F 52 22 29 3B  |AVE POINT FOR");|
000016A0: 0D 10 86 FF 28 22 56 45  52 49 46 49 43 41 54 49  |....("VERIFICATI|
000016B0: 4F 4E 20 2D 20 50 52 45  53 53 20 3C D3 C8 C9 C6  |ON - PRESS <....|
000016C0: D4 3E 20 57 48 45 4E 20  52 45 41 44 59 2E 22 29  |.> WHEN READY.")|
000016D0: 3B 0D 10 86 98 99 53 48  49 46 54 5F 4B 45 59 5F  |;.....SHIFT_KEY_|
000016E0: 50 52 45 53 53 45 44 0D  10 86 89 3B 0D 10 84 4C  |PRESSED....;...L|
000016F0: 4F 41 44 5F 4E 4F 4D 49  4E 41 54 45 44 5F 46 49  |OAD_NOMINATED_FI|
00001700: 4C 45 20 28 31 29 10 83  28 2A 20 56 45 52 49 46  |LE (1)..(* VERIF|
00001710: 59 20 FB 2A 29 0D 10 84  89 0D 99 90 42 41 44 5F  |Y .*).......BAD_|
00001720: 52 45 53 55 4C 54 0D 89  3B 0D 0D 87 46 52 4F 4D  |RESULT..;...FROM|
00001730: 5F 4D 4F 44 45 4D 3B 0D  28 2A 2A 2A 2A 2A 2A 2A  |_MODEM;.(*******|
00001740: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 29 0D 88 0D 10  |***********)....|
00001750: 82 81 28 32 29 3B 0D 10  82 46 52 4F 4D 5F 4D 4F  |..(2);...FROM_MO|
00001760: 44 45 4D 20 3A 3D 20 A7  3B 0D 10 82 81 28 30 29  |DEM := .;....(0)|
00001770: 0D 89 3B 0D 0D 86 44 49  53 50 4C 41 59 5F 43 48  |..;...DISPLAY_CH|
00001780: 41 52 20 28 58 29 3B 0D  28 2A 2A 2A 2A 2A 2A 2A  |AR (X);.(*******|
00001790: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
000017A0: 2A 2A 29 0D 88 0D 10 82  58 20 3A 3D 20 58 20 8D  |**).....X := X .|
000017B0: 24 37 46 3B 0D 0D 28 2A  20 D2 45 56 45 52 53 45  |$7F;..(* .EVERSE|
000017C0: 20 55 50 50 45 52 2F 4C  4F 57 45 52 20 95 2A 29  | UPPER/LOWER .*)|
000017D0: 0D 0D 10 82 92 28 58 20  3E 3D 20 24 36 31 29 20  |.....(X >= $61) |
000017E0: 8D 0D 10 85 28 58 20 3C  3D 20 24 37 41 29 20 93  |....(X <= $7A) .|
000017F0: 0D 10 85 58 20 3A 3D 20  58 20 2D 20 24 32 30 0D  |...X := X - $20.|
00001800: 10 82 94 0D 10 82 92 28  58 20 3E 3D 20 22 41 22  |.......(X >= "A"|
00001810: 29 20 8D 0D 10 85 28 58  20 3C 3D 20 22 5A 22 29  |) ....(X <= "Z")|
00001820: 20 93 0D 10 85 58 20 3A  3D 20 58 20 2B 20 24 32  | ....X := X + $2|
00001830: 30 3B 0D 0D 28 2A 20 CF  4E 4C 59 20 44 49 53 50  |0;..(* .NLY DISP|
00001840: 4C 41 59 20 92 50 52 49  4E 54 41 42 4C 45 20 2A  |LAY .PRINTABLE *|
00001850: 29 0D 0D 10 82 92 28 58  20 3E 3D 20 22 20 22 29  |).....(X >= " ")|
00001860: 0D 10 82 8A 28 58 20 3D  20 43 52 29 20 93 0D 10  |....(X = CR) ...|
00001870: 85 9D 28 AB 28 58 29 29  0D 10 82 94 0D 10 84 92  |..(.(X))........|
00001880: 58 20 3D 20 42 53 20 93  0D 10 86 9D 28 AB 28 31  |X = BS .....(.(1|
00001890: 35 37 29 29 0D 10 84 94  0D 10 86 92 58 20 3D 20  |57))........X = |
000018A0: 46 53 20 93 0D 10 88 9D  28 AB 28 32 39 29 29 0D  |FS .....(.(29)).|
000018B0: 10 86 94 0D 10 88 92 58  20 3D 20 46 46 20 93 0D  |.......X = FF ..|
000018C0: 10 8A 9D 28 AB 28 48 4F  4D 45 29 29 0D 89 3B 0D  |...(.(HOME))..;.|
000018D0: 0D 86 54 4F 5F 4D 4F 44  45 4D 20 28 58 29 3B 0D  |..TO_MODEM (X);.|
000018E0: 28 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |(***************|
000018F0: 2A 2A 2A 2A 2A 29 0D 88  0D 10 82 AF 28 32 29 3B  |*****)......(2);|
00001900: 0D 10 82 9D 28 AB 28 58  29 29 3B 0D 10 82 AF 28  |....(.(X));....(|
00001910: 30 29 0D 89 3B 0D 0D 87  43 41 4C 43 5F 43 52 43  |0)..;...CALC_CRC|
00001920: 4B 3B 0D 28 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |K;.(************|
00001930: 2A 2A 2A 2A 2A 29 0D 88  0D 10 82 A2 5B 24 34 42  |*****)......[$4B|
00001940: 5D 20 3A 3D 20 A9 28 42  55 46 46 45 52 20 5B 31  |] := .(BUFFER [1|
00001950: 33 30 5D 29 3B 0D 10 82  A2 5B 24 34 43 5D 20 3A  |30]);....[$4C] :|
00001960: 3D 20 A9 28 42 55 46 46  45 52 20 5B 31 33 30 5D  |= .(BUFFER [130]|
00001970: 29 20 8F 38 3B 0D 10 82  A2 5B 59 52 45 47 5D 20  |) .8;....[YREG] |
00001980: 3A 3D 20 31 33 30 3B 0D  10 82 9F 28 A9 28 52 4F  |:= 130;....(.(RO|
00001990: 55 54 49 4E 45 5B 33 35  5D 29 29 3B 0D 10 82 43  |UTINE[35]));...C|
000019A0: 41 4C 43 5F 43 52 43 4B  20 3A 3D 20 91 5B 24 35  |ALC_CRCK := .[$5|
000019B0: 45 5D 20 8D 24 46 46 46  46 0D 89 3B 0D 0D 86 43  |E] .$FFFF..;...C|
000019C0: 41 4C 43 5F 46 49 4C 45  5F 43 52 43 4B 3B 0D 28  |ALC_FILE_CRCK;.(|
000019D0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
000019E0: 2A 2A 2A 2A 2A 2A 2A 29  0D 88 0D 10 82 A2 5B 24  |*******)......[$|
000019F0: 34 42 5D 20 3A 3D 20 53  54 41 52 54 5F 41 44 44  |4B] := START_ADD|
00001A00: 52 45 53 53 3B 0D 10 82  A2 5B 24 34 43 5D 20 3A  |RESS;....[$4C] :|
00001A10: 3D 20 53 54 41 52 54 5F  41 44 44 52 45 53 53 20  |= START_ADDRESS |
00001A20: 8F 38 3B 0D 10 82 A2 5B  24 35 45 5D 20 3A 3D 20  |.8;....[$5E] := |
00001A30: 46 49 4E 41 4C 5F 41 44  44 52 45 53 53 3B 0D 10  |FINAL_ADDRESS;..|
00001A40: 82 A2 5B 24 35 46 5D 20  3A 3D 20 46 49 4E 41 4C  |..[$5F] := FINAL|
00001A50: 5F 41 44 44 52 45 53 53  20 8F 38 3B 0D 10 82 9F  |_ADDRESS .8;....|
00001A60: 28 A9 28 52 4F 55 54 49  4E 45 5B 32 30 5D 29 29  |(.(ROUTINE[20]))|
00001A70: 3B 0D 10 82 FF 28 22 C3  59 43 4C 49 43 20 52 45  |;....(".YCLIC RE|
00001A80: 44 55 4E 44 41 4E 43 59  20 43 48 45 43 4B 20 3D  |DUNDANCY CHECK =|
00001A90: 20 24 22 2C 0D 10 8B AC  28 91 5B 24 34 42 5D 20  | $",....(.[$4B] |
00001AA0: 8D 24 46 46 46 46 29 29  3B 0D 89 3B 0D 0D 87 4E  |.$FFFF));..;...N|
00001AB0: 45 58 54 5F 43 48 41 52  20 28 50 45 52 49 4F 44  |EXT_CHAR (PERIOD|
00001AC0: 29 3B 0D 28 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |);.(************|
00001AD0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 29 0D  |**************).|
00001AE0: 82 43 4F 55 4E 54 5F 50  45 52 5F 53 45 43 4F 4E  |.COUNT_PER_SECON|
00001AF0: 44 20 3D 20 31 34 35 3B  0D 83 43 48 20 3A 20 A1  |D = 145;..CH : .|
00001B00: 3B 0D 10 84 43 4F 55 4E  54 45 52 20 3A 20 FE 3B  |;...COUNTER : .;|
00001B10: 0D 88 0D 43 4F 55 4E 54  45 52 20 3A 3D 20 50 45  |...COUNTER := PE|
00001B20: 52 49 4F 44 20 2A 20 43  4F 55 4E 54 5F 50 45 52  |RIOD * COUNT_PER|
00001B30: 5F 53 45 43 4F 4E 44 3B  0D 98 0D 10 82 43 48 20  |_SECOND;.....CH |
00001B40: 3A 3D 20 46 52 4F 4D 5F  4D 4F 44 45 4D 3B 0D 10  |:= FROM_MODEM;..|
00001B50: 82 43 4F 55 4E 54 45 52  20 3A 3D 20 43 4F 55 4E  |.COUNTER := COUN|
00001B60: 54 45 52 20 2D 20 31 0D  99 28 90 28 A2 5B 52 53  |TER - 1..(.(.[RS|
00001B70: 32 33 32 5F 53 54 41 54  55 53 5D 20 8D 45 4D 50  |232_STATUS] .EMP|
00001B80: 54 59 29 29 0D 10 83 8A  28 43 4F 55 4E 54 45 52  |TY))....(COUNTER|
00001B90: 20 3C 3D 20 30 29 3B 0D  54 49 4D 45 4F 55 54 20  | <= 0);.TIMEOUT |
00001BA0: 3A 3D 20 A2 5B 52 53 32  33 32 5F 53 54 41 54 55  |:= .[RS232_STATU|
00001BB0: 53 5D 20 8D 45 4D 50 54  59 20 3C 3E 20 30 3B 0D  |S] .EMPTY <> 0;.|
00001BC0: 4E 45 58 54 5F 43 48 41  52 20 3A 3D 20 43 48 0D  |NEXT_CHAR := CH.|
00001BD0: 89 3B 0D 0D 86 50 55 52  47 45 3B 0D 28 2A 2A 2A  |.;...PURGE;.(***|
00001BE0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 29 0D 83 44 49  |***********)..DI|
00001BF0: 53 43 41 52 44 20 3A 20  A1 3B 0D 88 0D 98 0D 10  |SCARD : .;......|
00001C00: 82 44 49 53 43 41 52 44  20 3A 3D 20 4E 45 58 54  |.DISCARD := NEXT|
00001C10: 5F 43 48 41 52 20 28 31  29 0D 99 54 49 4D 45 4F  |_CHAR (1)..TIMEO|
00001C20: 55 54 0D 89 3B 0D 0D 86  53 45 4E 44 5F 4E 41 4B  |UT..;...SEND_NAK|
00001C30: 3B 0D 28 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |;.(*************|
00001C40: 2A 2A 2A 2A 29 0D 88 0D  10 82 50 55 52 47 45 3B  |****).....PURGE;|
00001C50: 0D 10 82 92 28 45 58 50  45 43 54 45 44 5F 42 4C  |....(EXPECTED_BL|
00001C60: 4F 43 4B 20 3D 20 31 29  0D 10 82 8D 57 41 4E 54  |OCK = 1)....WANT|
00001C70: 5F 43 52 43 4B 20 93 0D  10 84 54 4F 5F 4D 4F 44  |_CRCK ....TO_MOD|
00001C80: 45 4D 20 28 22 43 22 29  0D 10 82 94 0D 10 84 54  |EM ("C").......T|
00001C90: 4F 5F 4D 4F 44 45 4D 20  28 4E 41 4B 29 0D 89 3B  |O_MODEM (NAK)..;|
00001CA0: 0D 0D 86 43 41 4E 43 45  4C 5F 54 52 41 4E 53 3B  |...CANCEL_TRANS;|
00001CB0: 0D 28 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |.(**************|
00001CC0: 29 0D 88 0D 10 82 50 55  52 47 45 3B 0D 10 82 54  |).....PURGE;...T|
00001CD0: 4F 5F 4D 4F 44 45 4D 20  28 43 41 4E 29 3B 0D 10  |O_MODEM (CAN);..|
00001CE0: 82 54 4F 5F 4D 4F 44 45  4D 20 28 43 41 4E 29 3B  |.TO_MODEM (CAN);|
00001CF0: 0D 10 82 54 4F 5F 4D 4F  44 45 4D 20 28 43 41 4E  |...TO_MODEM (CAN|
00001D00: 29 3B 0D 10 82 53 54 41  52 54 5F 45 52 52 4F 52  |);...START_ERROR|
00001D10: 3B 0D 10 82 FF 28 22 D4  52 41 4E 53 4D 49 53 53  |;....(".RANSMISS|
00001D20: 49 4F 4E 20 41 42 4F 52  54 45 44 22 29 0D 89 3B  |ION ABORTED")..;|
00001D30: 0D 0D 86 52 45 43 45 49  56 45 5F 42 4C 4F 43 4B  |...RECEIVE_BLOCK|
00001D40: 3B 0D 28 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |;.(*************|
00001D50: 2A 2A 2A 2A 2A 2A 2A 2A  2A 29 0D 83 43 48 20 3A  |*********)..CH :|
00001D60: 20 A1 3B 0D 10 84 49 20  3A 20 FE 3B 0D 88 0D 42  | .;...I : .;...B|
00001D70: 41 44 5F 42 4C 4F 43 4B  20 3A 3D 20 46 41 4C 53  |AD_BLOCK := FALS|
00001D80: 45 3B 0D 42 4C 4F 43 4B  5F 4E 4F 20 3A 3D 20 4E  |E;.BLOCK_NO := N|
00001D90: 45 58 54 5F 43 48 41 52  20 28 31 29 3B 0D 92 90  |EXT_CHAR (1);...|
00001DA0: 54 49 4D 45 4F 55 54 20  93 0D 10 82 49 4E 56 45  |TIMEOUT ....INVE|
00001DB0: 52 53 45 5F 42 4C 4F 43  4B 5F 4E 4F 20 3A 3D 20  |RSE_BLOCK_NO := |
00001DC0: 4E 45 58 54 5F 43 48 41  52 20 28 31 29 3B 0D 92  |NEXT_CHAR (1);..|
00001DD0: 28 42 4C 4F 43 4B 5F 4E  4F 20 2B 20 49 4E 56 45  |(BLOCK_NO + INVE|
00001DE0: 52 53 45 5F 42 4C 4F 43  4B 5F 4E 4F 20 2B 20 31  |RSE_BLOCK_NO + 1|
00001DF0: 29 0D 10 83 8D 24 46 46  20 3C 3E 20 30 20 93 0D  |)....$FF <> 0 ..|
00001E00: 10 82 88 0D 10 82 53 54  41 52 54 5F 45 52 52 4F  |......START_ERRO|
00001E10: 52 3B 0D 10 82 9D 28 22  C2 41 44 20 42 4C 4F 43  |R;....(".AD BLOC|
00001E20: 4B 20 4E 4F 2E 22 29 3B  0D 10 82 45 52 52 4F 52  |K NO.");...ERROR|
00001E30: 3B 0D 10 82 53 45 4E 44  5F 4E 41 4B 3B 0D 10 82  |;...SEND_NAK;...|
00001E40: 42 41 44 5F 42 4C 4F 43  4B 20 3A 3D 20 54 52 55  |BAD_BLOCK := TRU|
00001E50: 45 0D 10 82 89 0D 94 0D  10 82 92 28 28 42 4C 4F  |E..........((BLO|
00001E60: 43 4B 5F 4E 4F 20 3D 20  4C 41 53 54 5F 42 4C 4F  |CK_NO = LAST_BLO|
00001E70: 43 4B 20 8D 24 46 46 29  0D 10 82 8D 28 45 58 50  |CK .$FF)....(EXP|
00001E80: 45 43 54 45 44 5F 42 4C  4F 43 4B 20 3C 3E 20 31  |ECTED_BLOCK <> 1|
00001E90: 29 29 0D 10 82 8A 28 42  4C 4F 43 4B 5F 4E 4F 20  |))....(BLOCK_NO |
00001EA0: 3D 20 45 58 50 45 43 54  45 44 5F 42 4C 4F 43 4B  |= EXPECTED_BLOCK|
00001EB0: 20 8D 24 46 46 29 20 93  0D 10 84 53 45 51 5F 45  | .$FF) ....SEQ_E|
00001EC0: 52 52 4F 52 20 3A 3D 20  46 41 4C 53 45 0D 10 82  |RROR := FALSE...|
00001ED0: 94 0D 10 84 88 0D 10 84  53 45 51 5F 45 52 52 4F  |........SEQ_ERRO|
00001EE0: 52 20 3A 3D 20 54 52 55  45 3B 0D 10 84 53 54 41  |R := TRUE;...STA|
00001EF0: 52 54 5F 45 52 52 4F 52  3B 0D 10 84 FF 28 22 C2  |RT_ERROR;....(".|
00001F00: 4C 4F 43 4B 20 4E 55 4D  42 45 52 20 53 45 51 55  |LOCK NUMBER SEQU|
00001F10: 45 4E 43 45 20 45 52 52  4F 52 22 29 0D 10 84 89  |ENCE ERROR")....|
00001F20: 3B 0D 92 90 28 42 41 44  5F 42 4C 4F 43 4B 20 8A  |;...(BAD_BLOCK .|
00001F30: 53 45 51 5F 45 52 52 4F  52 29 20 93 0D 10 82 88  |SEQ_ERROR) .....|
00001F40: 0D 10 82 53 55 4D 5F 43  48 45 43 4B 20 3A 3D 20  |...SUM_CHECK := |
00001F50: 30 3B 0D 10 82 9A 49 20  3A 3D 20 30 20 9B 31 32  |0;....I := 0 .12|
00001F60: 37 20 97 0D 10 84 92 90  54 49 4D 45 4F 55 54 20  |7 ......TIMEOUT |
00001F70: 93 0D 10 86 88 0D 10 86  43 48 20 3A 3D 20 4E 45  |........CH := NE|
00001F80: 58 54 5F 43 48 41 52 20  28 31 29 3B 0D 10 86 42  |XT_CHAR (1);...B|
00001F90: 55 46 46 45 52 20 5B 49  5D 20 3A 3D 20 43 48 3B  |UFFER [I] := CH;|
00001FA0: 0D 10 86 53 55 4D 5F 43  48 45 43 4B 20 3A 3D 20  |...SUM_CHECK := |
00001FB0: 53 55 4D 5F 43 48 45 43  4B 20 2B 20 43 48 0D 10  |SUM_CHECK + CH..|
00001FC0: 86 89 3B 0D 10 82 92 90  54 49 4D 45 4F 55 54 20  |..;.....TIMEOUT |
00001FD0: 93 0D 10 84 53 55 4D 5F  43 48 45 43 4B 5F 52 45  |....SUM_CHECK_RE|
00001FE0: 43 45 49 56 45 44 20 3A  3D 20 4E 45 58 54 5F 43  |CEIVED := NEXT_C|
00001FF0: 48 41 52 20 28 31 29 3B  0D 10 82 92 57 41 4E 54  |HAR (1);....WANT|
00002000: 5F 43 52 43 4B 20 93 0D  10 82 92 90 54 49 4D 45  |_CRCK ......TIME|
00002010: 4F 55 54 20 93 0D 10 84  53 55 4D 5F 43 48 45 43  |OUT ....SUM_CHEC|
00002020: 4B 5F 52 45 43 45 49 56  45 44 5F 32 20 3A 3D 20  |K_RECEIVED_2 := |
00002030: 4E 45 58 54 5F 43 48 41  52 20 28 31 29 3B 0D 10  |NEXT_CHAR (1);..|
00002040: 82 92 54 49 4D 45 4F 55  54 20 93 0D 10 82 88 0D  |..TIMEOUT ......|
00002050: 10 84 53 54 41 52 54 5F  45 52 52 4F 52 3B 0D 10  |..START_ERROR;..|
00002060: 84 9D 28 22 D4 49 4D 45  4F 55 54 20 4F 4E 20 52  |..(".IMEOUT ON R|
00002070: 45 43 45 49 56 45 22 29  3B 0D 10 84 45 52 52 4F  |ECEIVE");...ERRO|
00002080: 52 3B 0D 10 84 53 45 4E  44 5F 4E 41 4B 0D 10 84  |R;...SEND_NAK...|
00002090: 89 0D 10 82 94 0D 10 84  88 0D 10 84 42 41 44 5F  |............BAD_|
000020A0: 53 55 4D 5F 43 48 45 43  4B 20 3A 3D 20 54 52 55  |SUM_CHECK := TRU|
000020B0: 45 3B 0D 10 84 92 57 41  4E 54 5F 43 52 43 4B 20  |E;....WANT_CRCK |
000020C0: 93 0D 10 86 92 43 41 4C  43 5F 43 52 43 4B 20 3D  |.....CALC_CRCK =|
000020D0: 20 53 55 4D 5F 43 48 45  43 4B 5F 52 45 43 45 49  | SUM_CHECK_RECEI|
000020E0: 56 45 44 20 8E 38 0D 10  86 8A 53 55 4D 5F 43 48  |VED .8....SUM_CH|
000020F0: 45 43 4B 5F 52 45 43 45  49 56 45 44 5F 32 20 93  |ECK_RECEIVED_2 .|
00002100: 0D 10 88 42 41 44 5F 53  55 4D 5F 43 48 45 43 4B  |...BAD_SUM_CHECK|
00002110: 20 3A 3D 20 46 41 4C 53  45 0D 10 86 94 0D 10 84  | := FALSE.......|
00002120: 94 0D 10 86 92 53 55 4D  5F 43 48 45 43 4B 20 8D  |.....SUM_CHECK .|
00002130: 24 46 46 20 3D 0D 10 89  53 55 4D 5F 43 48 45 43  |$FF =...SUM_CHEC|
00002140: 4B 5F 52 45 43 45 49 56  45 44 20 93 0D 10 88 42  |K_RECEIVED ....B|
00002150: 41 44 5F 53 55 4D 5F 43  48 45 43 4B 20 3A 3D 20  |AD_SUM_CHECK := |
00002160: 46 41 4C 53 45 3B 0D 10  84 92 42 41 44 5F 53 55  |FALSE;....BAD_SU|
00002170: 4D 5F 43 48 45 43 4B 20  93 0D 10 86 88 0D 10 86  |M_CHECK ........|
00002180: 53 54 41 52 54 5F 45 52  52 4F 52 3B 0D 10 86 9D  |START_ERROR;....|
00002190: 28 22 D3 55 4D 20 43 48  45 43 4B 20 45 52 52 4F  |(".UM CHECK ERRO|
000021A0: 52 22 29 3B 0D 10 86 45  52 52 4F 52 3B 0D 10 86  |R");...ERROR;...|
000021B0: 53 45 4E 44 5F 4E 41 4B  0D 10 86 89 0D 10 84 94  |SEND_NAK........|
000021C0: 0D 10 86 88 0D 10 86 54  4F 5F 4D 4F 44 45 4D 20  |.......TO_MODEM |
000021D0: 28 41 43 4B 29 3B 0D 10  86 52 45 54 52 49 45 53  |(ACK);...RETRIES|
000021E0: 20 3A 3D 20 30 3B 0D 10  86 92 42 4C 4F 43 4B 5F  | := 0;....BLOCK_|
000021F0: 4E 4F 20 3D 20 45 58 50  45 43 54 45 44 5F 42 4C  |NO = EXPECTED_BL|
00002200: 4F 43 4B 20 8D 24 46 46  20 93 0D 10 88 88 0D 10  |OCK .$FF .......|
00002210: 88 4C 41 53 54 5F 42 4C  4F 43 4B 20 3A 3D 20 45  |.LAST_BLOCK := E|
00002220: 58 50 45 43 54 45 44 5F  42 4C 4F 43 4B 3B 0D 10  |XPECTED_BLOCK;..|
00002230: 88 45 58 50 45 43 54 45  44 5F 42 4C 4F 43 4B 20  |.EXPECTED_BLOCK |
00002240: 3A 3D 20 45 58 50 45 43  54 45 44 5F 42 4C 4F 43  |:= EXPECTED_BLOC|
00002250: 4B 20 2B 20 31 3B 0D 10  88 92 44 49 53 50 4C 41  |K + 1;....DISPLA|
00002260: 59 5F 46 49 4C 45 20 93  0D 10 8A 9A 49 20 3A 3D  |Y_FILE .....I :=|
00002270: 20 30 20 9B 31 32 37 20  97 0D 10 8C 44 49 53 50  | 0 .127 ....DISP|
00002280: 4C 41 59 5F 43 48 41 52  20 28 42 55 46 46 45 52  |LAY_CHAR (BUFFER|
00002290: 20 5B 49 5D 29 0D 10 88  94 0D 10 8A 9D 28 22 2A  | [I])........("*|
000022A0: 22 29 3B 0D 10 88 9A 49  20 3A 3D 20 30 20 9B 31  |");....I := 0 .1|
000022B0: 32 37 20 97 0D 10 8A 88  0D 10 8A A2 5B 4E 45 58  |27 .........[NEX|
000022C0: 54 5F 41 44 44 52 45 53  53 5D 20 3A 3D 0D 10 8E  |T_ADDRESS] :=...|
000022D0: 42 55 46 46 45 52 20 5B  49 5D 3B 0D 10 8A 4E 45  |BUFFER [I];...NE|
000022E0: 58 54 5F 41 44 44 52 45  53 53 20 3A 3D 20 4E 45  |XT_ADDRESS := NE|
000022F0: 58 54 5F 41 44 44 52 45  53 53 20 2B 20 31 0D 10  |XT_ADDRESS + 1..|
00002300: 8A 89 0D 10 88 89 0D 10  86 89 0D 10 84 89 0D 10  |................|
00002310: 82 89 0D 89 3B 0D 0D 86  52 45 43 45 49 56 45 5F  |....;...RECEIVE_|
00002320: 42 4C 4F 43 4B 5F 43 41  4E 5F 45 4F 54 3B 0D 28  |BLOCK_CAN_EOT;.(|
00002330: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00002340: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 29 0D  |**************).|
00002350: 83 43 48 20 3A 20 A1 3B  0D 88 0D 98 0D 10 82 43  |.CH : .;.......C|
00002360: 48 20 3A 3D 20 4E 45 58  54 5F 43 48 41 52 20 28  |H := NEXT_CHAR (|
00002370: 31 30 29 0D 99 28 43 48  20 3D 20 53 4F 48 29 0D  |10)..(CH = SOH).|
00002380: 10 83 8A 28 43 48 20 3D  20 45 4F 54 29 0D 10 83  |...(CH = EOT)...|
00002390: 8A 28 43 48 20 3D 20 43  41 4E 29 0D 10 83 8A 54  |.(CH = CAN)....T|
000023A0: 49 4D 45 4F 55 54 3B 0D  92 54 49 4D 45 4F 55 54  |IMEOUT;..TIMEOUT|
000023B0: 20 93 0D 10 82 88 0D 10  82 53 54 41 52 54 5F 45  | ........START_E|
000023C0: 52 52 4F 52 3B 0D 10 82  9D 28 22 D4 49 4D 45 4F  |RROR;....(".IMEO|
000023D0: 55 54 20 41 54 20 53 54  41 52 54 22 29 3B 0D 10  |UT AT START");..|
000023E0: 82 45 52 52 4F 52 3B 0D  10 82 53 45 4E 44 5F 4E  |.ERROR;...SEND_N|
000023F0: 41 4B 0D 10 82 89 0D 94  0D 10 82 95 43 48 20 85  |AK..........CH .|
00002400: 0D 10 84 53 4F 48 3A 20  52 45 43 45 49 56 45 5F  |...SOH: RECEIVE_|
00002410: 42 4C 4F 43 4B 3B 0D 10  84 43 41 4E 3A 20 88 0D  |BLOCK;...CAN: ..|
00002420: 10 89 53 54 41 52 54 5F  45 52 52 4F 52 3B 0D 10  |..START_ERROR;..|
00002430: 89 FF 28 22 D3 45 4E 44  45 52 20 C3 C1 CE 43 45  |..(".ENDER ...CE|
00002440: 4C 4C 45 44 20 54 52 41  4E 53 4D 49 53 53 49 4F  |LLED TRANSMISSIO|
00002450: 4E 22 29 3B 0D 10 89 41  42 4F 52 54 20 3A 3D 20  |N");...ABORT := |
00002460: 54 52 55 45 0D 10 89 89  3B 0D 10 84 45 4F 54 3A  |TRUE....;...EOT:|
00002470: 20 88 0D 10 89 45 4F 46  20 3A 3D 20 54 52 55 45  | ....EOF := TRUE|
00002480: 3B 0D 10 89 54 4F 5F 4D  4F 44 45 4D 20 28 41 43  |;...TO_MODEM (AC|
00002490: 4B 29 0D 10 89 89 0D 10  82 89 10 82 28 2A 20 85  |K)..........(* .|
000024A0: 95 2A 29 0D 89 3B 0D 0D  86 52 45 43 45 49 56 45  |.*)..;...RECEIVE|
000024B0: 5F 46 49 4C 45 3B 0D 28  2A 2A 2A 2A 2A 2A 2A 2A  |_FILE;.(********|
000024C0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 29 0D 88  |*************)..|
000024D0: 0D FF 3B 0D E2 28 43 48  41 52 43 4F 4C 4F 55 52  |..;..(CHARCOLOUR|
000024E0: 2C 20 4C 49 47 48 54 5F  47 52 45 45 4E 29 3B 0D  |, LIGHT_GREEN);.|
000024F0: FF 28 22 2D 2D 2D 2D 2D  20 D2 45 43 45 49 56 45  |.("----- .ECEIVE|
00002500: 20 41 20 C6 49 4C 45 20  2D 2D 2D 2D 2D 22 29 3B  | A .ILE -----");|
00002510: 0D E2 28 43 48 41 52 43  4F 4C 4F 55 52 2C 20 47  |..(CHARCOLOUR, G|
00002520: 52 45 45 4E 29 3B 0D FF  3B 0D 45 58 50 45 43 54  |REEN);..;.EXPECT|
00002530: 45 44 5F 42 4C 4F 43 4B  20 3A 3D 20 31 3B 0D 4C  |ED_BLOCK := 1;.L|
00002540: 41 53 54 5F 42 4C 4F 43  4B 20 3A 3D 20 30 3B 0D  |AST_BLOCK := 0;.|
00002550: 52 45 54 52 49 45 53 20  3A 3D 20 30 3B 0D 41 42  |RETRIES := 0;.AB|
00002560: 4F 52 54 20 3A 3D 20 46  41 4C 53 45 3B 0D 45 4F  |ORT := FALSE;.EO|
00002570: 46 20 3A 3D 20 46 41 4C  53 45 3B 0D 53 45 51 5F  |F := FALSE;.SEQ_|
00002580: 45 52 52 4F 52 20 3A 3D  20 46 41 4C 53 45 3B 0D  |ERROR := FALSE;.|
00002590: 4E 45 58 54 5F 41 44 44  52 45 53 53 20 3A 3D 20  |NEXT_ADDRESS := |
000025A0: 53 54 41 52 54 5F 41 44  44 52 45 53 53 3B 0D 57  |START_ADDRESS;.W|
000025B0: 41 4E 54 5F 43 52 43 4B  20 3A 3D 20 52 45 43 45  |ANT_CRCK := RECE|
000025C0: 49 56 45 5F 57 49 54 48  5F 43 52 43 4B 3B 0D 53  |IVE_WITH_CRCK;.S|
000025D0: 45 4E 44 5F 4E 41 4B 3B  10 82 28 2A 20 81 54 48  |END_NAK;..(* .TH|
000025E0: 49 4E 47 53 20 47 4F 49  4E 47 20 2A 29 0D 98 0D  |INGS GOING *)...|
000025F0: 10 82 52 45 43 45 49 56  45 5F 42 4C 4F 43 4B 5F  |..RECEIVE_BLOCK_|
00002600: 43 41 4E 5F 45 4F 54 0D  99 41 42 4F 52 54 20 8A  |CAN_EOT..ABORT .|
00002610: 45 4F 46 20 8A 53 45 51  5F 45 52 52 4F 52 3B 0D  |EOF .SEQ_ERROR;.|
00002620: FF 3B 0D 92 45 4F 46 20  93 0D 10 82 88 0D 10 82  |.;..EOF ........|
00002630: 46 49 4E 41 4C 5F 41 44  44 52 45 53 53 20 3A 3D  |FINAL_ADDRESS :=|
00002640: 20 4E 45 58 54 5F 41 44  44 52 45 53 53 3B 0D 10  | NEXT_ADDRESS;..|
00002650: 82 FF 3B 0D 10 82 FF 28  22 C6 49 4C 45 20 52 45  |..;....(".ILE RE|
00002660: 43 45 49 56 45 44 20 53  55 43 43 45 53 53 46 55  |CEIVED SUCCESSFU|
00002670: 4C 4C 59 22 29 3B 0D 10  82 43 41 4C 43 5F 46 49  |LLY");...CALC_FI|
00002680: 4C 45 5F 43 52 43 4B 3B  0D 10 82 53 41 56 45 5F  |LE_CRCK;...SAVE_|
00002690: 4E 4F 4D 49 4E 41 54 45  44 5F 46 49 4C 45 0D 10  |NOMINATED_FILE..|
000026A0: 82 89 0D 94 0D 10 82 88  0D 10 82 46 49 4E 41 4C  |...........FINAL|
000026B0: 5F 41 44 44 52 45 53 53  20 3A 3D 20 53 54 41 52  |_ADDRESS := STAR|
000026C0: 54 5F 41 44 44 52 45 53  53 3B 0D 10 82 43 41 4E  |T_ADDRESS;...CAN|
000026D0: 43 45 4C 5F 54 52 41 4E  53 10 82 28 2A 20 53 54  |CEL_TRANS..(* ST|
000026E0: 4F 50 20 4F 54 48 45 52  20 89 2A 29 0D 10 82 89  |OP OTHER .*)....|
000026F0: 0D 89 3B 0D 0D 86 41 4E  41 4C 59 53 45 5F 46 49  |..;...ANALYSE_FI|
00002700: 4C 45 3B 0D 28 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |LE;.(***********|
00002710: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 29 0D 83 0D 10 84  |**********).....|
00002720: 46 49 4C 45 5F 4C 45 4E  47 54 48 2C 20 42 4C 4F  |FILE_LENGTH, BLO|
00002730: 43 4B 53 2C 20 4D 49 4E  53 20 3A 20 FE 3B 0D 88  |CKS, MINS : .;..|
00002740: 0D FF 3B 0D 4C 4F 41 44  5F 4E 4F 4D 49 4E 41 54  |..;.LOAD_NOMINAT|
00002750: 45 44 5F 46 49 4C 45 20  28 30 29 3B 0D 46 49 4E  |ED_FILE (0);.FIN|
00002760: 41 4C 5F 41 44 44 52 45  53 53 20 3A 3D 20 A2 5B  |AL_ADDRESS := .[|
00002770: 58 52 45 47 5D 20 2B 20  A2 5B 59 52 45 47 5D 20  |XREG] + .[YREG] |
00002780: 8E 38 3B 0D 46 49 4C 45  5F 4C 45 4E 47 54 48 20  |.8;.FILE_LENGTH |
00002790: 3A 3D 20 46 49 4E 41 4C  5F 41 44 44 52 45 53 53  |:= FINAL_ADDRESS|
000027A0: 20 2D 20 53 54 41 52 54  5F 41 44 44 52 45 53 53  | - START_ADDRESS|
000027B0: 3B 0D 96 46 49 4C 45 5F  4C 45 4E 47 54 48 20 8D  |;..FILE_LENGTH .|
000027C0: 24 37 46 20 3C 3E 20 30  20 97 0D 10 82 88 0D 10  |$7F <> 0 .......|
000027D0: 82 46 49 4C 45 5F 4C 45  4E 47 54 48 20 3A 3D 20  |.FILE_LENGTH := |
000027E0: 46 49 4C 45 5F 4C 45 4E  47 54 48 20 2B 20 31 3B  |FILE_LENGTH + 1;|
000027F0: 0D 10 82 A2 5B 46 49 4E  41 4C 5F 41 44 44 52 45  |....[FINAL_ADDRE|
00002800: 53 53 5D 20 3A 3D 20 43  54 52 4C 5A 3B 0D 10 82  |SS] := CTRLZ;...|
00002810: 46 49 4E 41 4C 5F 41 44  44 52 45 53 53 20 3A 3D  |FINAL_ADDRESS :=|
00002820: 20 46 49 4E 41 4C 5F 41  44 44 52 45 53 53 20 2B  | FINAL_ADDRESS +|
00002830: 20 31 0D 10 82 89 3B 0D  42 4C 4F 43 4B 53 20 3A  | 1....;.BLOCKS :|
00002840: 3D 20 28 46 49 4E 41 4C  5F 41 44 44 52 45 53 53  |= (FINAL_ADDRESS|
00002850: 20 2D 20 53 54 41 52 54  5F 41 44 44 52 45 53 53  | - START_ADDRESS|
00002860: 29 0D 10 8A 2F 20 31 32  38 3B 0D 4D 49 4E 53 20  |).../ 128;.MINS |
00002870: 3A 3D 20 42 4C 4F 43 4B  53 20 2A 20 35 36 31 20  |:= BLOCKS * 561 |
00002880: 2F 20 36 30 30 3B 0D FF  28 42 4C 4F 43 4B 53 2C  |/ 600;..(BLOCKS,|
00002890: 20 22 20 42 4C 4F 43 4B  53 2C 20 20 22 2C 0D 10  | " BLOCKS,  ",..|
000028A0: 89 42 4C 4F 43 4B 53 20  2A 20 31 30 20 2F 20 38  |.BLOCKS * 10 / 8|
000028B0: 30 2C 0D 10 89 22 2E 22  2C 0D 10 89 42 4C 4F 43  |0,...".",...BLOC|
000028C0: 4B 53 20 2A 20 31 30 20  2F 20 38 20 8C 31 30 2C  |KS * 10 / 8 .10,|
000028D0: 0D 10 89 22 20 CB 22 29  3B 0D 43 41 4C 43 5F 46  |..." .");.CALC_F|
000028E0: 49 4C 45 5F 43 52 43 4B  3B 0D FF 28 22 D4 52 41  |ILE_CRCK;..(".RA|
000028F0: 4E 53 4D 49 53 53 49 4F  4E 20 54 49 4D 45 3A 20  |NSMISSION TIME: |
00002900: 22 2C 0D 10 89 4D 49 4E  53 20 2F 20 31 30 2C 20  |",...MINS / 10, |
00002910: 22 2E 22 2C 0D 10 89 4D  49 4E 53 20 8C 31 30 2C  |".",...MINS .10,|
00002920: 0D 10 89 22 20 4D 49 4E  55 54 45 53 2E 22 29 0D  |..." MINUTES.").|
00002930: 89 3B 0D 0D 86 50 52 4F  43 45 53 53 5F 43 41 4E  |.;...PROCESS_CAN|
00002940: 3B 0D 28 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |;.(*************|
00002950: 2A 2A 2A 2A 2A 2A 29 0D  88 0D 10 82 53 54 41 52  |******).....STAR|
00002960: 54 5F 45 52 52 4F 52 3B  0D 10 82 FF 28 22 D2 45  |T_ERROR;....(".E|
00002970: 43 45 49 56 45 52 20 C3  C1 CE 43 45 4C 4C 45 44  |CEIVER ...CELLED|
00002980: 20 54 52 41 4E 53 4D 49  53 53 49 4F 4E 22 29 3B  | TRANSMISSION");|
00002990: 0D 10 82 E2 28 43 48 41  52 43 4F 4C 4F 55 52 2C  |....(CHARCOLOUR,|
000029A0: 20 57 48 49 54 45 29 3B  0D 10 82 41 42 4F 52 54  | WHITE);...ABORT|
000029B0: 20 3A 3D 20 54 52 55 45  0D 89 3B 0D 0D 86 54 52  | := TRUE..;...TR|
000029C0: 41 4E 53 4D 49 54 5F 42  4C 4F 43 4B 3B 0D 28 2A  |ANSMIT_BLOCK;.(*|
000029D0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
000029E0: 2A 2A 2A 2A 2A 2A 29 0D  83 43 48 20 3A 20 A1 3B  |******)..CH : .;|
000029F0: 0D 10 84 44 49 53 43 41  52 44 2C 0D 10 84 49 20  |...DISCARD,...I |
00002A00: 3A 20 FE 3B 0D 0D 86 47  45 54 5F 41 43 4B 3B 0D  |: .;...GET_ACK;.|
00002A10: 28 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |(***************|
00002A20: 2A 29 0D 88 0D 10 82 43  48 20 3A 3D 20 4E 45 58  |*).....CH := NEX|
00002A30: 54 5F 43 48 41 52 20 28  31 30 29 3B 10 82 28 2A  |T_CHAR (10);..(*|
00002A40: 20 AA 9A 41 43 4B 20 2A  29 0D 10 82 92 54 49 4D  | ..ACK *)....TIM|
00002A50: 45 4F 55 54 20 93 0D 10  84 88 0D 10 84 53 54 41  |EOUT ........STA|
00002A60: 52 54 5F 45 52 52 4F 52  3B 0D 10 84 9D 28 22 D4  |RT_ERROR;....(".|
00002A70: 49 4D 45 4F 55 54 20 4F  4E 20 C1 C3 CB 22 29 3B  |IMEOUT ON ...");|
00002A80: 0D 10 84 45 52 52 4F 52  0D 10 84 89 0D 10 82 94  |...ERROR........|
00002A90: 0D 10 82 92 43 48 20 3D  20 43 41 4E 20 93 0D 10  |....CH = CAN ...|
00002AA0: 84 50 52 4F 43 45 53 53  5F 43 41 4E 0D 10 82 94  |.PROCESS_CAN....|
00002AB0: 0D 10 82 92 43 48 20 3C  3E 20 41 43 4B 20 93 0D  |....CH <> ACK ..|
00002AC0: 10 84 88 0D 10 84 53 54  41 52 54 5F 45 52 52 4F  |......START_ERRO|
00002AD0: 52 3B 0D 10 84 9D 28 22  C7 4F 54 20 22 2C 43 48  |R;....(".OT ",CH|
00002AE0: 2C 22 20 46 4F 52 20 C1  C3 CB 22 29 3B 0D 10 84  |," FOR ...");...|
00002AF0: 45 52 52 4F 52 0D 10 84  89 0D 89 3B 10 82 28 2A  |ERROR......;..(*|
00002B00: 20 85 47 45 54 5F 41 43  4B 20 2A 29 0D 0D 88 0D  | .GET_ACK *)....|
00002B10: 53 55 4D 5F 43 48 45 43  4B 20 3A 3D 20 30 3B 0D  |SUM_CHECK := 0;.|
00002B20: 9A 49 20 3A 3D 20 30 20  9B 31 32 37 20 97 0D 10  |.I := 0 .127 ...|
00002B30: 82 88 0D 10 82 43 48 20  3A 3D 20 A2 5B 4E 45 58  |.....CH := .[NEX|
00002B40: 54 5F 41 44 44 52 45 53  53 5D 3B 0D 10 82 4E 45  |T_ADDRESS];...NE|
00002B50: 58 54 5F 41 44 44 52 45  53 53 20 3A 3D 20 4E 45  |XT_ADDRESS := NE|
00002B60: 58 54 5F 41 44 44 52 45  53 53 20 2B 20 31 3B 0D  |XT_ADDRESS + 1;.|
00002B70: 10 82 53 55 4D 5F 43 48  45 43 4B 20 3A 3D 20 53  |..SUM_CHECK := S|
00002B80: 55 4D 5F 43 48 45 43 4B  20 2B 20 43 48 3B 0D 10  |UM_CHECK + CH;..|
00002B90: 82 42 55 46 46 45 52 20  5B 49 5D 20 3A 3D 20 43  |.BUFFER [I] := C|
00002BA0: 48 0D 10 82 89 3B 0D 92  44 49 53 50 4C 41 59 5F  |H....;..DISPLAY_|
00002BB0: 46 49 4C 45 20 93 0D 9A  49 20 3A 3D 20 30 20 9B  |FILE ...I := 0 .|
00002BC0: 31 32 37 20 97 0D 10 82  44 49 53 50 4C 41 59 5F  |127 ....DISPLAY_|
00002BD0: 43 48 41 52 20 28 42 55  46 46 45 52 20 5B 49 5D  |CHAR (BUFFER [I]|
00002BE0: 29 0D 94 0D 10 82 9D 28  22 2A 22 29 3B 0D 92 57  |)......("*");..W|
00002BF0: 41 4E 54 5F 43 52 43 4B  20 93 0D 10 82 88 0D 10  |ANT_CRCK .......|
00002C00: 82 53 55 4D 5F 43 48 45  43 4B 5F 32 20 3A 3D 20  |.SUM_CHECK_2 := |
00002C10: 43 41 4C 43 5F 43 52 43  4B 3B 0D 10 82 53 55 4D  |CALC_CRCK;...SUM|
00002C20: 5F 43 48 45 43 4B 20 3A  3D 20 53 55 4D 5F 43 48  |_CHECK := SUM_CH|
00002C30: 45 43 4B 5F 32 20 8F 38  3B 0D 10 82 53 55 4D 5F  |ECK_2 .8;...SUM_|
00002C40: 43 48 45 43 4B 5F 32 20  3A 3D 20 53 55 4D 5F 43  |CHECK_2 := SUM_C|
00002C50: 48 45 43 4B 5F 32 20 8D  24 46 46 0D 10 82 89 3B  |HECK_2 .$FF....;|
00002C60: 0D 52 45 54 52 49 45 53  20 3A 3D 20 30 3B 0D 49  |.RETRIES := 0;.I|
00002C70: 4E 56 45 52 53 45 5F 42  4C 4F 43 4B 5F 4E 4F 20  |NVERSE_BLOCK_NO |
00002C80: 3A 3D 20 42 4C 4F 43 4B  5F 4E 4F 20 A4 24 46 46  |:= BLOCK_NO .$FF|
00002C90: 3B 0D 45 58 50 45 43 54  45 44 5F 42 4C 4F 43 4B  |;.EXPECTED_BLOCK|
00002CA0: 20 3A 3D 20 42 4C 4F 43  4B 5F 4E 4F 3B 0D 98 0D  | := BLOCK_NO;...|
00002CB0: 10 82 54 4F 5F 4D 4F 44  45 4D 20 28 53 4F 48 29  |..TO_MODEM (SOH)|
00002CC0: 3B 10 82 28 2A 20 53 54  41 52 54 20 42 4C 4F 43  |;..(* START BLOC|
00002CD0: 4B 20 2A 29 0D 10 82 54  4F 5F 4D 4F 44 45 4D 20  |K *)...TO_MODEM |
00002CE0: 28 42 4C 4F 43 4B 5F 4E  4F 29 3B 0D 10 82 54 4F  |(BLOCK_NO);...TO|
00002CF0: 5F 4D 4F 44 45 4D 20 28  49 4E 56 45 52 53 45 5F  |_MODEM (INVERSE_|
00002D00: 42 4C 4F 43 4B 5F 4E 4F  29 3B 0D 10 82 9A 49 20  |BLOCK_NO);....I |
00002D10: 3A 3D 20 30 20 9B 31 32  37 20 97 0D 10 84 88 0D  |:= 0 .127 ......|
00002D20: 10 84 44 49 53 43 41 52  44 20 3A 3D 20 46 52 4F  |..DISCARD := FRO|
00002D30: 4D 5F 4D 4F 44 45 4D 3B  10 82 28 2A 20 49 47 4E  |M_MODEM;..(* IGN|
00002D40: 4F 52 45 20 41 4E 59 20  53 50 55 52 49 4F 55 53  |ORE ANY SPURIOUS|
00002D50: 20 47 4C 49 54 43 48 45  53 20 2A 29 0D 10 84 54  | GLITCHES *)...T|
00002D60: 4F 5F 4D 4F 44 45 4D 20  28 42 55 46 46 45 52 5B  |O_MODEM (BUFFER[|
00002D70: 49 5D 29 0D 10 84 89 3B  0D 10 82 54 4F 5F 4D 4F  |I])....;...TO_MO|
00002D80: 44 45 4D 20 28 53 55 4D  5F 43 48 45 43 4B 29 3B  |DEM (SUM_CHECK);|
00002D90: 0D 10 82 92 57 41 4E 54  5F 43 52 43 4B 20 93 0D  |....WANT_CRCK ..|
00002DA0: 10 84 54 4F 5F 4D 4F 44  45 4D 20 28 53 55 4D 5F  |..TO_MODEM (SUM_|
00002DB0: 43 48 45 43 4B 5F 32 29  3B 0D 10 82 47 45 54 5F  |CHECK_2);...GET_|
00002DC0: 41 43 4B 0D 99 41 42 4F  52 54 20 8A 28 28 90 54  |ACK..ABORT .((.T|
00002DD0: 49 4D 45 4F 55 54 29 20  8D 28 43 48 20 3D 20 41  |IMEOUT) .(CH = A|
00002DE0: 43 4B 29 29 3B 0D 92 4E  45 58 54 5F 41 44 44 52  |CK));..NEXT_ADDR|
00002DF0: 45 53 53 20 3E 3D 20 46  49 4E 41 4C 5F 41 44 44  |ESS >= FINAL_ADD|
00002E00: 52 45 53 53 20 93 0D 92  90 41 42 4F 52 54 20 93  |RESS ....ABORT .|
00002E10: 0D 10 82 88 0D 10 82 52  45 54 52 49 45 53 20 3A  |.......RETRIES :|
00002E20: 3D 20 30 3B 0D 10 82 45  58 50 45 43 54 45 44 5F  |= 0;...EXPECTED_|
00002E30: 42 4C 4F 43 4B 20 3A 3D  20 2D 31 3B 0D 10 82 98  |BLOCK := -1;....|
00002E40: 0D 10 84 54 4F 5F 4D 4F  44 45 4D 20 28 45 4F 54  |...TO_MODEM (EOT|
00002E50: 29 3B 0D 10 84 47 45 54  5F 41 43 4B 0D 10 82 99  |);...GET_ACK....|
00002E60: 41 42 4F 52 54 20 8A 28  28 90 54 49 4D 45 4F 55  |ABORT .((.TIMEOU|
00002E70: 54 29 20 8D 28 43 48 20  3D 20 41 43 4B 29 29 3B  |T) .(CH = ACK));|
00002E80: 0D 10 82 92 90 41 42 4F  52 54 20 93 0D 10 84 45  |.....ABORT ....E|
00002E90: 4F 46 20 3A 3D 20 54 52  55 45 0D 10 82 89 3B 0D  |OF := TRUE....;.|
00002EA0: 42 4C 4F 43 4B 5F 4E 4F  20 3A 3D 20 42 4C 4F 43  |BLOCK_NO := BLOC|
00002EB0: 4B 5F 4E 4F 20 2B 20 31  0D 89 3B 0D 0D 86 53 45  |K_NO + 1..;...SE|
00002EC0: 4E 44 5F 46 49 4C 45 3B  0D 28 2A 2A 2A 2A 2A 2A  |ND_FILE;.(******|
00002ED0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 29 0D 83 43  |************)..C|
00002EE0: 48 20 3A 20 A1 3B 0D 88  0D FF 3B 0D E2 28 43 48  |H : .;....;..(CH|
00002EF0: 41 52 43 4F 4C 4F 55 52  2C 20 4C 49 47 48 54 5F  |ARCOLOUR, LIGHT_|
00002F00: 47 52 45 45 4E 29 3B 0D  FF 28 22 2D 2D 2D 2D 2D  |GREEN);..("-----|
00002F10: 20 D3 45 4E 44 20 41 20  C6 49 4C 45 20 2D 2D 2D  | .END A .ILE ---|
00002F20: 2D 2D 22 29 3B 0D E2 28  43 48 41 52 43 4F 4C 4F  |--");..(CHARCOLO|
00002F30: 55 52 2C 20 47 52 45 45  4E 29 3B 0D 41 4E 41 4C  |UR, GREEN);.ANAL|
00002F40: 59 53 45 5F 46 49 4C 45  3B 0D 4E 45 58 54 5F 41  |YSE_FILE;.NEXT_A|
00002F50: 44 44 52 45 53 53 20 3A  3D 20 53 54 41 52 54 5F  |DDRESS := START_|
00002F60: 41 44 44 52 45 53 53 3B  0D 42 4C 4F 43 4B 5F 4E  |ADDRESS;.BLOCK_N|
00002F70: 4F 20 3A 3D 20 31 3B 0D  45 58 50 45 43 54 45 44  |O := 1;.EXPECTED|
00002F80: 5F 42 4C 4F 43 4B 20 3A  3D 20 31 3B 0D 41 42 4F  |_BLOCK := 1;.ABO|
00002F90: 52 54 20 3A 3D 20 46 41  4C 53 45 3B 0D 45 4F 46  |RT := FALSE;.EOF|
00002FA0: 20 3A 3D 20 46 41 4C 53  45 3B 0D 52 45 54 52 49  | := FALSE;.RETRI|
00002FB0: 45 53 20 3A 3D 20 30 3B  0D 50 55 52 47 45 3B 10  |ES := 0;.PURGE;.|
00002FC0: 82 28 2A 20 45 4D 50 54  59 20 42 55 46 46 45 52  |.(* EMPTY BUFFER|
00002FD0: 20 2A 29 0D FF 3B 20 FF  3B 0D FF 28 22 C1 57 41  | *)..; .;..(".WA|
00002FE0: 49 54 49 4E 47 20 49 4E  49 54 49 41 4C 20 CE C1  |ITING INITIAL ..|
00002FF0: CB 22 29 3B 0D 98 0D 10  82 43 48 20 3A 3D 20 4E  |.");.....CH := N|
00003000: 45 58 54 5F 43 48 41 52  20 28 36 30 29 3B 10 82  |EXT_CHAR (60);..|
00003010: 28 2A 20 AA 41 20 4D 49  4E 55 54 45 20 2A 29 0D  |(* .A MINUTE *).|
00003020: 10 82 92 54 49 4D 45 4F  55 54 20 93 0D 10 84 88  |...TIMEOUT .....|
00003030: 0D 10 84 53 54 41 52 54  5F 45 52 52 4F 52 3B 0D  |...START_ERROR;.|
00003040: 10 84 FF 28 22 CE 4F 20  52 45 53 50 4F 4E 53 45  |...(".O RESPONSE|
00003050: 20 46 52 4F 4D 20 4F 54  48 45 52 20 45 4E 44 22  | FROM OTHER END"|
00003060: 29 0D 10 84 89 0D 10 82  94 0D 10 84 88 0D 10 84  |)...............|
00003070: 92 43 48 20 3D 20 4E 41  4B 20 93 0D 10 86 57 41  |.CH = NAK ....WA|
00003080: 4E 54 5F 43 52 43 4B 20  3A 3D 20 46 41 4C 53 45  |NT_CRCK := FALSE|
00003090: 0D 10 84 94 0D 10 86 92  43 48 20 3D 20 22 43 22  |........CH = "C"|
000030A0: 20 93 0D 10 88 57 41 4E  54 5F 43 52 43 4B 20 3A  | ....WANT_CRCK :|
000030B0: 3D 20 54 52 55 45 0D 10  86 94 0D 10 88 92 43 48  |= TRUE........CH|
000030C0: 20 3D 20 43 41 4E 20 93  0D 10 8A 50 52 4F 43 45  | = CAN ....PROCE|
000030D0: 53 53 5F 43 41 4E 0D 10  88 94 0D 10 8A 88 0D 10  |SS_CAN..........|
000030E0: 8A 53 54 41 52 54 5F 45  52 52 4F 52 3B 0D 10 8A  |.START_ERROR;...|
000030F0: 9D 28 22 C7 4F 54 20 22  2C 43 48 2C 22 20 46 4F  |.(".OT ",CH," FO|
00003100: 52 20 CE C1 CB 22 29 3B  0D 10 8A 45 52 52 4F 52  |R ...");...ERROR|
00003110: 0D 10 8A 89 0D 10 84 89  0D 99 28 43 48 20 3D 20  |..........(CH = |
00003120: 4E 41 4B 29 20 8A 28 43  48 20 3D 20 22 43 22 29  |NAK) .(CH = "C")|
00003130: 0D 10 83 8A 54 49 4D 45  4F 55 54 20 8A 41 42 4F  |....TIMEOUT .ABO|
00003140: 52 54 3B 0D 92 90 28 54  49 4D 45 4F 55 54 20 8A  |RT;...(TIMEOUT .|
00003150: 41 42 4F 52 54 29 20 93  0D 10 82 98 0D 10 84 54  |ABORT) ........T|
00003160: 52 41 4E 53 4D 49 54 5F  42 4C 4F 43 4B 0D 10 82  |RANSMIT_BLOCK...|
00003170: 99 41 42 4F 52 54 20 8A  45 4F 46 3B 0D 92 45 4F  |.ABORT .EOF;..EO|
00003180: 46 20 93 0D 10 82 88 0D  10 82 FF 3B 0D 10 82 FF  |F .........;....|
00003190: 28 22 C6 49 4C 45 20 54  52 41 4E 53 4D 49 54 54  |(".ILE TRANSMITT|
000031A0: 45 44 20 53 55 43 43 45  53 53 46 55 4C 4C 59 22  |ED SUCCESSFULLY"|
000031B0: 29 0D 10 82 89 0D 94 0D  10 82 43 41 4E 43 45 4C  |).........CANCEL|
000031C0: 5F 54 52 41 4E 53 10 82  28 2A 20 53 54 4F 50 20  |_TRANS..(* STOP |
000031D0: 4F 54 48 45 52 20 89 2A  29 0D 89 3B 0D 0D 86 54  |OTHER .*)..;...T|
000031E0: 45 52 4D 49 4E 41 4C 5F  4D 4F 44 45 20 28 48 41  |ERMINAL_MODE (HA|
000031F0: 4C 46 5F 44 55 50 4C 45  58 29 3B 0D 28 2A 2A 2A  |LF_DUPLEX);.(***|
00003200: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00003210: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00003220: 2A 29 0D 82 41 43 54 49  56 45 20 3D 20 37 3B 0D  |*)..ACTIVE = 7;.|
00003230: 83 49 4E 50 55 54 20 3A  20 A1 3B 0D 10 84 58 20  |.INPUT : .;...X |
00003240: 3A 20 FE 3B 0D 88 0D 4C  41 53 54 5F 54 45 52 4D  |: .;...LAST_TERM|
00003250: 49 4E 41 4C 5F 4D 4F 44  45 20 3A 3D 20 43 4F 4D  |INAL_MODE := COM|
00003260: 4D 41 4E 44 3B 0D E2 28  43 48 41 52 43 4F 4C 4F  |MAND;..(CHARCOLO|
00003270: 55 52 2C 20 47 52 45 45  4E 29 3B 0D FF 3B 0D E2  |UR, GREEN);..;..|
00003280: 28 43 48 41 52 43 4F 4C  4F 55 52 2C 20 4C 49 47  |(CHARCOLOUR, LIG|
00003290: 48 54 5F 47 52 45 45 4E  29 3B 0D 9D 28 22 D4 45  |HT_GREEN);..(".E|
000032A0: 52 4D 49 4E 41 4C 20 CD  4F 44 45 20 2D 20 22 29  |RMINAL .ODE - ")|
000032B0: 3B 0D 92 48 41 4C 46 5F  44 55 50 4C 45 58 20 93  |;..HALF_DUPLEX .|
000032C0: 0D 10 82 9D 28 22 C8 41  4C 46 22 29 0D 94 0D 10  |....(".ALF")....|
000032D0: 82 9D 28 22 C6 55 4C 4C  22 29 3B 0D FF 28 22 20  |..(".ULL");..(" |
000032E0: 44 55 50 4C 45 58 22 29  3B 0D FF 28 22 D0 52 45  |DUPLEX");..(".RE|
000032F0: 53 53 20 3C C3 4F 4D 4D  4F 44 4F 52 45 3E 20 4B  |SS <.OMMODORE> K|
00003300: 45 59 20 46 4F 52 20 CD  41 49 4E 20 CD 45 4E 55  |EY FOR .AIN .ENU|
00003310: 22 29 3B 0D FF 3B 0D E2  28 43 48 41 52 43 4F 4C  |");..;..(CHARCOL|
00003320: 4F 55 52 2C 20 57 48 49  54 45 29 3B 0D DF 28 31  |OUR, WHITE);..(1|
00003330: 2C 20 41 43 54 49 56 45  2C 20 54 52 55 45 29 3B  |, ACTIVE, TRUE);|
00003340: 0D 98 0D 10 82 58 20 3A  3D 20 E8 3B 0D 10 82 92  |.....X := .;....|
00003350: 58 20 3E 20 34 30 20 93  0D 10 84 58 20 3A 3D 20  |X > 40 ....X := |
00003360: 58 20 2D 20 34 30 3B 0D  10 82 E0 28 31 2C 0D 10  |X - 40;....(1,..|
00003370: 84 58 20 2A 20 38 2C 0D  10 84 E9 2A 20 38 20 2B  |.X * 8,....* 8 +|
00003380: 20 34 32 29 3B 0D 10 82  49 4E 50 55 54 20 3A 3D  | 42);...INPUT :=|
00003390: 20 46 52 4F 4D 5F 4D 4F  44 45 4D 3B 0D 10 82 92  | FROM_MODEM;....|
000033A0: 49 4E 50 55 54 20 3C 3E  20 30 20 93 0D 10 84 44  |INPUT <> 0 ....D|
000033B0: 49 53 50 4C 41 59 5F 43  48 41 52 20 28 49 4E 50  |ISPLAY_CHAR (INP|
000033C0: 55 54 29 3B 0D 10 82 49  4E 50 55 54 20 3A 3D 20  |UT);...INPUT := |
000033D0: A7 3B 0D 10 82 92 49 4E  50 55 54 20 3C 3E 20 30  |.;....INPUT <> 0|
000033E0: 20 93 0D 10 84 88 0D 10  84 92 28 49 4E 50 55 54  | .........(INPUT|
000033F0: 20 3E 3D 20 24 43 31 29  20 8D 0D 10 87 28 49 4E  | >= $C1) ....(IN|
00003400: 50 55 54 20 3C 3D 20 24  44 41 29 20 93 0D 10 86  |PUT <= $DA) ....|
00003410: 49 4E 50 55 54 20 3A 3D  20 49 4E 50 55 54 20 2D  |INPUT := INPUT -|
00003420: 20 24 36 30 3B 0D 10 84  92 49 4E 50 55 54 20 3D  | $60;....INPUT =|
00003430: 20 24 38 44 20 93 0D 10  87 49 4E 50 55 54 20 3A  | $8D ....INPUT :|
00003440: 3D 20 43 52 0D 10 85 94  0D 10 87 92 28 49 4E 50  |= CR........(INP|
00003450: 55 54 20 3D 20 24 39 44  29 0D 10 87 8A 28 49 4E  |UT = $9D)....(IN|
00003460: 50 55 54 20 3D 20 24 31  34 29 20 93 0D 10 89 49  |PUT = $14) ....I|
00003470: 4E 50 55 54 20 3A 3D 20  42 53 0D 10 87 94 0D 10  |NPUT := BS......|
00003480: 89 92 49 4E 50 55 54 20  3D 20 32 39 20 93 0D 10  |..INPUT = 29 ...|
00003490: 8B 49 4E 50 55 54 20 3A  3D 20 46 53 0D 10 89 94  |.INPUT := FS....|
000034A0: 0D 10 8B 92 49 4E 50 55  54 20 3D 20 48 4F 4D 45  |....INPUT = HOME|
000034B0: 20 93 0D 10 8D 49 4E 50  55 54 20 3A 3D 20 46 46  | ....INPUT := FF|
000034C0: 3B 0D 0D 28 2A 20 D2 45  56 45 52 53 45 20 55 50  |;..(* .EVERSE UP|
000034D0: 50 45 52 2F 4C 4F 57 45  52 20 95 2A 29 0D 0D 10  |PER/LOWER .*)...|
000034E0: 84 92 28 49 4E 50 55 54  20 3E 3D 20 24 36 31 29  |..(INPUT >= $61)|
000034F0: 20 8D 0D 10 87 28 49 4E  50 55 54 20 3C 3D 20 24  | ....(INPUT <= $|
00003500: 37 41 29 20 93 0D 10 87  49 4E 50 55 54 20 3A 3D  |7A) ....INPUT :=|
00003510: 20 49 4E 50 55 54 20 2D  20 24 32 30 0D 10 84 94  | INPUT - $20....|
00003520: 0D 10 84 92 28 49 4E 50  55 54 20 3E 3D 20 22 41  |....(INPUT >= "A|
00003530: 22 29 20 8D 0D 10 87 28  49 4E 50 55 54 20 3C 3D  |") ....(INPUT <=|
00003540: 20 22 5A 22 29 20 93 0D  10 87 49 4E 50 55 54 20  | "Z") ....INPUT |
00003550: 3A 3D 20 49 4E 50 55 54  20 2B 20 24 32 30 3B 0D  |:= INPUT + $20;.|
00003560: 10 84 54 4F 5F 4D 4F 44  45 4D 20 28 49 4E 50 55  |..TO_MODEM (INPU|
00003570: 54 29 3B 0D 10 84 92 48  41 4C 46 5F 44 55 50 4C  |T);....HALF_DUPL|
00003580: 45 58 20 93 0D 10 86 88  0D 10 86 E2 28 43 48 41  |EX .........(CHA|
00003590: 52 43 4F 4C 4F 55 52 2C  20 4C 49 47 48 54 5F 42  |RCOLOUR, LIGHT_B|
000035A0: 4C 55 45 29 3B 0D 10 86  44 49 53 50 4C 41 59 5F  |LUE);...DISPLAY_|
000035B0: 43 48 41 52 20 28 49 4E  50 55 54 29 3B 0D 10 86  |CHAR (INPUT);...|
000035C0: E2 28 43 48 41 52 43 4F  4C 4F 55 52 2C 20 57 48  |.(CHARCOLOUR, WH|
000035D0: 49 54 45 29 0D 10 86 89  0D 10 84 89 0D 99 43 4F  |ITE)..........CO|
000035E0: 4D 4D 4F 44 4F 52 45 5F  4C 4F 47 4F 3B 0D DF 28  |MMODORE_LOGO;..(|
000035F0: 31 2C 20 41 43 54 49 56  45 2C 20 46 41 4C 53 45  |1, ACTIVE, FALSE|
00003600: 29 0D 89 3B 0D 0D 86 54  59 50 45 5F 46 49 4C 45  |)..;...TYPE_FILE|
00003610: 3B 0D 28 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |;.(*************|
00003620: 2A 2A 2A 2A 2A 29 0D 88  0D 4E 45 58 54 5F 41 44  |*****)...NEXT_AD|
00003630: 44 52 45 53 53 20 3A 3D  20 53 54 41 52 54 5F 41  |DRESS := START_A|
00003640: 44 44 52 45 53 53 3B 0D  FF 3B 0D FF 28 22 D0 52  |DDRESS;..;..(".R|
00003650: 45 53 53 20 3C C3 4F 4D  4D 4F 44 4F 52 45 3E 20  |ESS <.OMMODORE> |
00003660: 4B 45 59 20 54 4F 20 41  42 4F 52 54 20 4C 49 53  |KEY TO ABORT LIS|
00003670: 54 22 29 3B 0D FF 28 22  20 20 20 20 20 20 3C D3  |T");..("      <.|
00003680: C8 C9 C6 D4 3E 20 20 20  20 20 4B 45 59 20 54 4F  |....>     KEY TO|
00003690: 20 50 41 55 53 45 20 4C  49 53 54 22 29 3B 0D FF  | PAUSE LIST");..|
000036A0: 3B 0D E2 28 43 48 41 52  43 4F 4C 4F 55 52 2C 20  |;..(CHARCOLOUR, |
000036B0: 4C 49 47 48 54 5F 47 52  45 45 4E 29 3B 0D 96 28  |LIGHT_GREEN);..(|
000036C0: 4E 45 58 54 5F 41 44 44  52 45 53 53 20 3C 20 46  |NEXT_ADDRESS < F|
000036D0: 49 4E 41 4C 5F 41 44 44  52 45 53 53 29 0D 10 82  |INAL_ADDRESS)...|
000036E0: 8D 90 43 4F 4D 4D 4F 44  4F 52 45 5F 4C 4F 47 4F  |..COMMODORE_LOGO|
000036F0: 20 97 0D 10 82 88 0D 10  82 98 0D 10 82 99 90 53  | ..............S|
00003700: 48 49 46 54 5F 4B 45 59  5F 50 52 45 53 53 45 44  |HIFT_KEY_PRESSED|
00003710: 3B 0D 10 82 44 49 53 50  4C 41 59 5F 43 48 41 52  |;...DISPLAY_CHAR|
00003720: 20 28 A2 5B 4E 45 58 54  5F 41 44 44 52 45 53 53  | (.[NEXT_ADDRESS|
00003730: 5D 29 3B 0D 10 82 4E 45  58 54 5F 41 44 44 52 45  |]);...NEXT_ADDRE|
00003740: 53 53 20 3A 3D 20 4E 45  58 54 5F 41 44 44 52 45  |SS := NEXT_ADDRE|
00003750: 53 53 20 2B 20 31 0D 10  82 89 3B 0D FF 0D 89 3B  |SS + 1....;....;|
00003760: 0D 0D 28 2A 20 2D 2D 2D  2D 2D 2D 2D 2D 20 CD C1  |..(* -------- ..|
00003770: C9 CE 20 D0 D2 CF C7 D2  C1 CD 20 2D 2D 2D 2D 2D  |.. ....... -----|
00003780: 2D 2D 2D 20 2A 29 0D 88  0D 10 82 49 4E 49 54 3B  |--- *).....INIT;|
00003790: 10 82 28 2A 20 52 45 41  44 59 20 9A 43 52 43 4B  |..(* READY .CRCK|
000037A0: 20 2A 29 0D 10 82 98 0D  10 84 E2 28 43 48 41 52  | *)........(CHAR|
000037B0: 43 4F 4C 4F 55 52 2C 20  47 52 45 45 4E 29 3B 0D  |COLOUR, GREEN);.|
000037C0: 10 84 95 43 4F 4D 4D 41  4E 44 20 85 0D 10 85 22  |...COMMAND ...."|
000037D0: 41 22 3A 20 41 4E 41 4C  59 53 45 5F 46 49 4C 45  |A": ANALYSE_FILE|
000037E0: 3B 0D 10 85 22 43 22 3A  20 43 41 4E 43 45 4C 5F  |;..."C": CANCEL_|
000037F0: 54 52 41 4E 53 3B 0D 10  85 22 46 22 3A 20 54 45  |TRANS;..."F": TE|
00003800: 52 4D 49 4E 41 4C 5F 4D  4F 44 45 20 28 46 41 4C  |RMINAL_MODE (FAL|
00003810: 53 45 29 3B 0D 10 85 22  48 22 3A 20 54 45 52 4D  |SE);..."H": TERM|
00003820: 49 4E 41 4C 5F 4D 4F 44  45 20 28 54 52 55 45 29  |INAL_MODE (TRUE)|
00003830: 3B 0D 10 85 22 52 22 3A  20 52 45 43 45 49 56 45  |;..."R": RECEIVE|
00003840: 5F 46 49 4C 45 3B 0D 10  85 22 53 22 3A 20 53 45  |_FILE;..."S": SE|
00003850: 4E 44 5F 46 49 4C 45 3B  0D 10 85 22 54 22 3A 20  |ND_FILE;..."T": |
00003860: 54 59 50 45 5F 46 49 4C  45 0D 10 84 89 3B 10 82  |TYPE_FILE....;..|
00003870: 28 2A 20 85 95 2A 29 0D  10 84 92 28 43 4F 4D 4D  |(* ..*)....(COMM|
00003880: 41 4E 44 20 3D 20 22 53  22 29 0D 10 84 8A 28 43  |AND = "S")....(C|
00003890: 4F 4D 4D 41 4E 44 20 3D  20 22 52 22 29 20 93 0D  |OMMAND = "R") ..|
000038A0: 10 86 43 4F 4D 4D 41 4E  44 20 3A 3D 20 4C 41 53  |..COMMAND := LAS|
000038B0: 54 5F 54 45 52 4D 49 4E  41 4C 5F 4D 4F 44 45 0D  |T_TERMINAL_MODE.|
000038C0: 10 84 94 0D 10 86 88 0D  10 86 E2 28 43 48 41 52  |...........(CHAR|
000038D0: 43 4F 4C 4F 55 52 2C 20  47 52 45 45 4E 29 3B 0D  |COLOUR, GREEN);.|
000038E0: 10 86 FF 28 AB 28 31 34  29 29 3B 10 82 28 2A 20  |...(.(14));..(* |
000038F0: 4C 4F 57 45 52 20 95 2A  29 0D 10 86 FF 28 22 3C  |LOWER .*)....("<|
00003900: C1 3E 4E 41 4C 59 53 45  20 41 20 46 49 4C 45 22  |.>NALYSE A FILE"|
00003910: 29 3B 0D 10 86 FF 28 22  3C C3 3E 41 4E 43 45 4C  |);....("<.>ANCEL|
00003920: 20 54 52 41 4E 53 4D 49  53 53 49 4F 4E 22 29 3B  | TRANSMISSION");|
00003930: 0D 10 86 FF 28 22 3C C6  3E 55 4C 4C 20 44 55 50  |....("<.>ULL DUP|
00003940: 4C 45 58 20 54 45 52 4D  49 4E 41 4C 22 29 3B 0D  |LEX TERMINAL");.|
00003950: 10 86 FF 28 22 3C C8 3E  41 4C 46 20 44 55 50 4C  |...("<.>ALF DUPL|
00003960: 45 58 20 54 45 52 4D 49  4E 41 4C 22 29 3B 0D 10  |EX TERMINAL");..|
00003970: 86 FF 28 22 3C D2 3E 45  43 45 49 56 45 20 41 20  |..("<.>ECEIVE A |
00003980: 46 49 4C 45 22 29 3B 0D  10 86 FF 28 22 3C D3 3E  |FILE");....("<.>|
00003990: 45 4E 44 20 41 20 46 49  4C 45 22 29 3B 0D 10 86  |END A FILE");...|
000039A0: FF 28 22 3C D4 3E 59 50  45 20 4C 41 53 54 20 46  |.("<.>YPE LAST F|
000039B0: 49 4C 45 22 29 3B 0D 10  86 FF 28 22 3C D1 3E 55  |ILE");....("<.>U|
000039C0: 49 54 20 50 52 4F 47 52  41 4D 22 29 3B 0D 10 86  |IT PROGRAM");...|
000039D0: FF 3B 0D 10 86 9D 28 22  C3 4F 4D 4D 41 4E 44 3F  |.;....(".OMMAND?|
000039E0: 20 3C 20 3E 22 2C AB 28  31 35 37 29 2C AB 28 31  | < >",.(157),.(1|
000039F0: 35 37 29 29 3B 0D 10 86  E2 28 43 48 41 52 43 4F  |57));....(CHARCO|
00003A00: 4C 4F 55 52 2C 20 4C 49  47 48 54 5F 42 4C 55 45  |LOUR, LIGHT_BLUE|
00003A10: 29 3B 0D 10 86 98 0D 10  88 9E 28 43 4F 4D 4D 41  |);........(COMMA|
00003A20: 4E 44 29 3B 0D 10 88 43  4F 4D 4D 41 4E 44 20 3A  |ND);...COMMAND :|
00003A30: 3D 20 43 4F 4D 4D 41 4E  44 20 8D 24 37 46 0D 10  |= COMMAND .$7F..|
00003A40: 86 99 28 43 4F 4D 4D 41  4E 44 20 3D 20 22 46 22  |..(COMMAND = "F"|
00003A50: 29 0D 10 89 8A 28 43 4F  4D 4D 41 4E 44 20 3D 20  |)....(COMMAND = |
00003A60: 22 53 22 29 0D 10 89 8A  28 43 4F 4D 4D 41 4E 44  |"S")....(COMMAND|
00003A70: 20 3D 20 22 51 22 29 0D  10 89 8A 28 43 4F 4D 4D  | = "Q")....(COMM|
00003A80: 41 4E 44 20 3D 20 22 41  22 29 0D 10 89 8A 28 43  |AND = "A")....(C|
00003A90: 4F 4D 4D 41 4E 44 20 3D  20 22 43 22 29 0D 10 89  |OMMAND = "C")...|
00003AA0: 8A 28 43 4F 4D 4D 41 4E  44 20 3D 20 22 48 22 29  |.(COMMAND = "H")|
00003AB0: 0D 10 89 8A 28 43 4F 4D  4D 41 4E 44 20 3D 20 22  |....(COMMAND = "|
00003AC0: 54 22 29 0D 10 89 8A 28  43 4F 4D 4D 41 4E 44 20  |T")....(COMMAND |
00003AD0: 3D 20 22 52 22 29 3B 0D  10 86 FF 28 AB 28 43 4F  |= "R");....(.(CO|
00003AE0: 4D 4D 41 4E 44 29 29 0D  10 86 89 0D 10 82 99 43  |MMAND))........C|
00003AF0: 4F 4D 4D 41 4E 44 20 3D  20 22 51 22 3B 0D 10 82  |OMMAND = "Q";...|
00003B00: AE 28 32 29 0D 89 2E 0D  00                       |.(2).....       |
.@(* YAM-COMPATIBLE MODEM COMMUNICATION 
PROGRAM....WRITTEN IN G-PASCAL .THE COMM
ODORE 64....AUTHOR: NICK GAMMON...PUBLIC
 DOMAIN PROGRAM.....%A $840..(P-CODES ST
ART AT $840).*)......BS = 8;...FF = 12;.
..CR = 13;...FS = 28;...CTRLZ = $1A;...H
OME = 147;...TRUE = 1;...FALSE = 0;....D
ISPLAY_FILE = FALSE;...RECEIVE_WITH_CRCK
 = TRUE;...MAX_RETRIES = 6;...CHARCOLOUR
 = 10;...WHITE = 1;...GREEN = 5;...LIGHT
_RED = 10;...LIGHT_GREEN = 13;...LIGHT_B
LUE = 14;...LIGHT_GREY = 15;....START_AD
DRESS = $1E00;...CASSETTE = 1;...DISK = 
8;...AREG = $2B2;...XREG = $2B3;...YREG 
= $2B4;...CC = $2B1;...SETLFS = $FFBA;..
.SETNAM = $FFBD;....SOH = $1;...EOT = $4
;...ACK = $6;...NAK = $15;...CAN = $18;.
..RS232_STATUS = $297;...EMPTY = 8;.....
.COMMAND : .;....BUFFER : .[130] ..;...N
AME1, NAME2 : .[20] ..;...LAST_TERMINAL_
MODE,...MEDIUM,...GOT_MEDIUM,...LENGTH,.
..BAD_RESULT,...NEXT_ADDRESS,...FINAL_AD
DRESS,...RETRIES,...EOF,...ABORT,...BAD_
BLOCK,...SEQ_ERROR,...BAD_SUM_CHECK,...T
IMEOUT,...BLOCK_NO,...INVERSE_BLOCK_NO,.
..EXPECTED_BLOCK,...LAST_BLOCK,...WANT_C
RCK,...SUM_CHECK_RECEIVED,...SUM_CHECK_R
ECEIVED_2,...SUM_CHECK,...SUM_CHECK_2..:
 .;...ROUTINE : .[35] ..;...COMMODORE_LO
GO;.(**********************).....COMMODO
RE_LOGO := .[653] .2 <> 0..;...SHIFT_KEY
_PRESSED;.(*************************)...
..SHIFT_KEY_PRESSED := .[653] .1 <> 0..;
...OPEN_RS232_FILE;.(*******************
*****).....OPENIT = $FFC0;..NAME : .[1] 
..;...(* FIRST SET UP THE FILE NAME...AS
 PER THE RS232 PARAMTERS *)....NAME [1] 
:= 6;..(*..300 BAUD..*)...NAME [0] := 0;
..(*..3-LINE..*)....[$F8] := $C1; (* BUF
FER *)....[$FA] := $C2; (* BUFFER *)....
[AREG] := 2;....[XREG] := 2; (* RS232 *)
....[YREG] := 2;....(SETLFS);....[AREG] 
:= 2;....[XREG] := .(NAME[1]);....[YREG]
 := .(NAME[1]) .8;....(SETNAM);....(OPEN
IT)..;...INIT;.(*************)..COLOUR =
 1;...POINT = 2;...BEHINDBK = 6;...I : .
;...INSERT(X, Y, Z);.....ROUTINE [I] := 
X;...ROUTINE [I - 1] := Y;...ROUTINE [I 
- 2] := Z;...I := I - 3..;...(* INIT *).
...(.(HOME));....(CHARCOLOUR, LIGHT_GREY
);....[650] := 128;..(* ALL KEYS AUTO-.*
)....("YAM-COMPATIBLE MODEM PROGRAM FOR 
C64.");....("WRITTEN BY NICK GAMMON IN G
-PASCAL.");....("VERSION 1.2  - PUBLIC D
OMAIN.");....("G-PASCAL IS PRODUCED BY G
AMBIT GAMES -");....(" ENQUIRIES: GAMBIT
 GAMES, P.O. BOX 124,");....(" IVANHOE, 
VICTORIA 3079. AUSTRALIA.");....;...I :=
 35;...(* CRCK ROUTINE .TRANSMISSION *).
..INSERT($8500A9,$5F855E,$854BB1);...INS
ERT($08A207,$260726,$5F265E);...INSERT($
A50C90,$10495F,$A55F85);...INSERT($21495
E,$CA5E85,$88E9D0);...INSERT($60E0D0,0,0
);...(* CRCK ROUTINE .FILE *)...INSERT($
8500A9,$068505,$0506A8);...INSERT($08062
6,$184BB1,$850565);...INSERT($902805,$97
490A,$A50585);...INSERT($A04906,$E60685,
$02D04B);...INSERT($A54CE6,$5EC54B,$A5DB
D0);...INSERT($5FC54C,$A5D5D0,$4B8505);.
..INSERT($8506A5,$FF604C,0);...BUFFER [1
28] := 0;...BUFFER [129] := 0;...COMMAND
 := "F";....(32,...$FF,$FF,$FF,$FF,$FF,$
FF,$FF,$FF);....(1, POINT, 32,...1, COLO
UR, LIGHT_GREY,...1, BEHINDBK, TRUE);...
GOT_MEDIUM := FALSE;...FINAL_ADDRESS := 
START_ADDRESS;...OPEN_RS232_FILE..; (* .
INIT *)...START_ERROR;.(****************
****)......(CHARCOLOUR, LIGHT_RED);.....
.;...ERROR;.(**************)....EXPECTED
_BLOCK <> -1 .....(" ON BLOCK ",...EXPEC
TED_BLOCK)......(" ON EOT");..(" RETRY "
, RETRIES);.RETRIES := RETRIES + 1;..(CH
ARCOLOUR, GREEN);..RETRIES > MAX_RETRIES
 ....ABORT := TRUE..;...GET_FILE_NAME;.(
**********************)..I, GOT_CR : .;.
..CH : .;.....GOT_MEDIUM .........;....(
"<D>ISK OR <C>ASSETTE? ");....(CHARCOLOU
R, LIGHT_BLUE);........(CH);...CH := CH 
.$7F....(CH = "D")....(CH = "C");....(.(
CH));....(CHARCOLOUR, GREEN);....CH = "D
" ........MEDIUM := DISK;....(15, DISK, 
15, "I")...........MEDIUM := CASSETTE;..
.GOT_MEDIUM := TRUE....;......;....("FIL
E NAME? ");....(CHARCOLOUR, LIGHT_BLUE);
....(NAME1);....(CHARCOLOUR, GREEN);...G
OT_CR := FALSE;....I := 0 .20 ......GOT_
CR ........NAME2 [20 - I] := NAME1 [I];.
...NAME1 [I] = CR ........LENGTH := I;..
.GOT_CR := TRUE..........LENGTH <> 0..;.
..CHECK_RESULT;.(*********************).
.READST = $FFB7;...I, ERROR_CODE : .;...
RESULT : .[80] ..;.......[CC] .1 ....ERR
OR_CODE := .[AREG]..(* GOT ERROR *).....
.......(READST);...ERROR_CODE := .[AREG]
 .$BF....;...BAD_RESULT := ERROR_CODE;..
..MEDIUM = DISK .........(15);....(RESUL
T);....(0);...RESULT [80] := CR;....(RES
ULT [0] <> "0")....(RESULT [1] <> "0") .
.......BAD_RESULT := TRUE;...I := -1;...
START_ERROR;.......I := I + 1;....(.(RES
ULT [I]))....RESULT [I] = CR........;...
.;....ERROR_CODE ........START_ERROR;...
.("FILE ERROR, CODE: ",...ERROR_CODE)...
.;....(CHARCOLOUR, GREEN);.....BAD_RESUL
T .....("OK.")..;...LOAD_NOMINATED_FILE 
(FLAG);.(*******************************
****)...LOAD_FILE;.(******************).
....LOADIT = $FFD5;.......[AREG] := 1;..
..[XREG] := MEDIUM;....[YREG] := 0; (* R
ELOCATE *)....(SETLFS);....[AREG] := LEN
GTH;....[XREG] := .(NAME2[20]);....[YREG
] := .(NAME2[20]) .8;....(SETNAM);....[A
REG] := FLAG;..(* ./VERIFY *)....[XREG] 
:= START_ADDRESS;....[YREG] := START_ADD
RESS .8;....(LOADIT);...CHECK_RESULT..;.
.(***** START .: LOAD_NOMINATED_FILE ***
)........FLAG = 0 . (* .*)...GET_FILE_NA
ME;...LOAD_FILE..(BAD_RESULT = 0)....(FL
AG = 1)..;...SAVE_NOMINATED_FILE;.(*****
***********************)...SAVE_FILE;.(*
*******************)..SAVEIT = $FFD8;...
REGISTER = $6A;......[AREG] := 1;..(* FI
LE NO *)....[XREG] := MEDIUM;....[YREG] 
:= 0;....(SETLFS);....[AREG] := LENGTH;.
...[XREG] :=....(NAME2 [20]);....[YREG] 
:=....(NAME2 [20]) .8;....(SETNAM);....[
REGISTER] := START_ADDRESS;....[REGISTER
 + 1] :=...START_ADDRESS .8;....[AREG] :
= REGISTER;....[XREG] := FINAL_ADDRESS;.
...[YREG] := FINAL_ADDRESS .8;....(SAVEI
T);...CHECK_RESULT..;..(***** START .: S
AVE_NOMINATED_FILE ***).......GET_FILE_N
AME;...SAVE_FILE;.....BAD_RESULT .......
..MEDIUM = CASSETTE .........;....("REWI
ND CASSETTE TO SAVE POINT FOR");....("VE
RIFICATION - PRESS <SHIFT> WHEN READY.")
;.....SHIFT_KEY_PRESSED....;...LOAD_NOMI
NATED_FILE (1)..(* VERIFY .*).......BAD_
RESULT..;...FROM_MODEM;.(***************
***)......(2);...FROM_MODEM := .;....(0)
..;...DISPLAY_CHAR (X);.(***************
**********).....X := X .$7F;..(* REVERSE
 UPPER/LOWER .*).....(X >= $61) ....(X <
= $7A) ....X := X - $20........(X >= "A"
) ....(X <= "Z") ....X := X + $20;..(* O
NLY DISPLAY .PRINTABLE *).....(X >= " ")
....(X = CR) .....(.(X))........X = BS .
....(.(157))........X = FS .....(.(29)).
.......X = FF .....(.(HOME))..;...TO_MOD
EM (X);.(********************)......(2);
....(.(X));....(0)..;...CALC_CRCK;.(****
*************)......[$4B] := .(BUFFER [1
30]);....[$4C] := .(BUFFER [130]) .8;...
.[YREG] := 130;....(.(ROUTINE[35]));...C
ALC_CRCK := .[$5E] .$FFFF..;...CALC_FILE
_CRCK;.(***********************)......[$
4B] := START_ADDRESS;....[$4C] := START_
ADDRESS .8;....[$5E] := FINAL_ADDRESS;..
..[$5F] := FINAL_ADDRESS .8;....(.(ROUTI
NE[20]));....("CYCLIC REDUNDANCY CHECK =
 $",....(.[$4B] .$FFFF));..;...NEXT_CHAR
 (PERIOD);.(**************************).
.COUNT_PER_SECOND = 145;..CH : .;...COUN
TER : .;...COUNTER := PERIOD * COUNT_PER
_SECOND;.....CH := FROM_MODEM;...COUNTER
 := COUNTER - 1..(.(.[RS232_STATUS] .EMP
TY))....(COUNTER <= 0);.TIMEOUT := .[RS2
32_STATUS] .EMPTY <> 0;.NEXT_CHAR := CH.
.;...PURGE;.(**************)..DISCARD : 
.;.......DISCARD := NEXT_CHAR (1)..TIMEO
UT..;...SEND_NAK;.(*****************)...
..PURGE;....(EXPECTED_BLOCK = 1)....WANT
_CRCK ....TO_MODEM ("C").......TO_MODEM 
(NAK)..;...CANCEL_TRANS;.(**************
).....PURGE;...TO_MODEM (CAN);...TO_MODE
M (CAN);...TO_MODEM (CAN);...START_ERROR
;....("TRANSMISSION ABORTED")..;...RECEI
VE_BLOCK;.(**********************)..CH :
 .;...I : .;...BAD_BLOCK := FALSE;.BLOCK
_NO := NEXT_CHAR (1);...TIMEOUT ....INVE
RSE_BLOCK_NO := NEXT_CHAR (1);..(BLOCK_N
O + INVERSE_BLOCK_NO + 1)....$FF <> 0 ..
......START_ERROR;....("BAD BLOCK NO.");
...ERROR;...SEND_NAK;...BAD_BLOCK := TRU
E..........((BLOCK_NO = LAST_BLOCK .$FF)
....(EXPECTED_BLOCK <> 1))....(BLOCK_NO 
= EXPECTED_BLOCK .$FF) ....SEQ_ERROR := 
FALSE...........SEQ_ERROR := TRUE;...STA
RT_ERROR;....("BLOCK NUMBER SEQUENCE ERR
OR")....;...(BAD_BLOCK .SEQ_ERROR) .....
...SUM_CHECK := 0;....I := 0 .127 ......
TIMEOUT ........CH := NEXT_CHAR (1);...B
UFFER [I] := CH;...SUM_CHECK := SUM_CHEC
K + CH....;.....TIMEOUT ....SUM_CHECK_RE
CEIVED := NEXT_CHAR (1);....WANT_CRCK ..
....TIMEOUT ....SUM_CHECK_RECEIVED_2 := 
NEXT_CHAR (1);....TIMEOUT ........START_
ERROR;....("TIMEOUT ON RECEIVE");...ERRO
R;...SEND_NAK...............BAD_SUM_CHEC
K := TRUE;....WANT_CRCK .....CALC_CRCK =
 SUM_CHECK_RECEIVED .8....SUM_CHECK_RECE
IVED_2 ....BAD_SUM_CHECK := FALSE.......
.....SUM_CHECK .$FF =...SUM_CHECK_RECEIV
ED ....BAD_SUM_CHECK := FALSE;....BAD_SU
M_CHECK ........START_ERROR;....("SUM CH
ECK ERROR");...ERROR;...SEND_NAK........
.......TO_MODEM (ACK);...RETRIES := 0;..
..BLOCK_NO = EXPECTED_BLOCK .$FF .......
.LAST_BLOCK := EXPECTED_BLOCK;...EXPECTE
D_BLOCK := EXPECTED_BLOCK + 1;....DISPLA
Y_FILE .....I := 0 .127 ....DISPLAY_CHAR
 (BUFFER [I])........("*");....I := 0 .1
27 .........[NEXT_ADDRESS] :=...BUFFER [
I];...NEXT_ADDRESS := NEXT_ADDRESS + 1..
....................;...RECEIVE_BLOCK_CA
N_EOT;.(******************************).
.CH : .;.......CH := NEXT_CHAR (10)..(CH
 = SOH)....(CH = EOT)....(CH = CAN)....T
IMEOUT;..TIMEOUT ........START_ERROR;...
.("TIMEOUT AT START");...ERROR;...SEND_N
AK..........CH ....SOH: RECEIVE_BLOCK;..
.CAN: ....START_ERROR;....("SENDER CANCE
LLED TRANSMISSION");...ABORT := TRUE....
;...EOT: ....EOF := TRUE;...TO_MODEM (AC
K)..........(* ..*)..;...RECEIVE_FILE;.(
*********************)....;..(CHARCOLOUR
, LIGHT_GREEN);..("----- RECEIVE A FILE 
-----");..(CHARCOLOUR, GREEN);..;.EXPECT
ED_BLOCK := 1;.LAST_BLOCK := 0;.RETRIES 
:= 0;.ABORT := FALSE;.EOF := FALSE;.SEQ_
ERROR := FALSE;.NEXT_ADDRESS := START_AD
DRESS;.WANT_CRCK := RECEIVE_WITH_CRCK;.S
END_NAK;..(* .THINGS GOING *).....RECEIV
E_BLOCK_CAN_EOT..ABORT .EOF .SEQ_ERROR;.
.;..EOF ........FINAL_ADDRESS := NEXT_AD
DRESS;....;....("FILE RECEIVED SUCCESSFU
LLY");...CALC_FILE_CRCK;...SAVE_NOMINATE
D_FILE.............FINAL_ADDRESS := STAR
T_ADDRESS;...CANCEL_TRANS..(* STOP OTHER
 .*)......;...ANALYSE_FILE;.(***********
**********).....FILE_LENGTH, BLOCKS, MIN
S : .;....;.LOAD_NOMINATED_FILE (0);.FIN
AL_ADDRESS := .[XREG] + .[YREG] .8;.FILE
_LENGTH := FINAL_ADDRESS - START_ADDRESS
;..FILE_LENGTH .$7F <> 0 ........FILE_LE
NGTH := FILE_LENGTH + 1;....[FINAL_ADDRE
SS] := CTRLZ;...FINAL_ADDRESS := FINAL_A
DDRESS + 1....;.BLOCKS := (FINAL_ADDRESS
 - START_ADDRESS).../ 128;.MINS := BLOCK
S * 561 / 600;..(BLOCKS, " BLOCKS,  ",..
.BLOCKS * 10 / 80,...".",...BLOCKS * 10 
/ 8 .10,..." K");.CALC_FILE_CRCK;..("TRA
NSMISSION TIME: ",...MINS / 10, ".",...M
INS .10,..." MINUTES.")..;...PROCESS_CAN
;.(*******************).....START_ERROR;
....("RECEIVER CANCELLED TRANSMISSION");
....(CHARCOLOUR, WHITE);...ABORT := TRUE
..;...TRANSMIT_BLOCK;.(*****************
******)..CH : .;...DISCARD,...I : .;...G
ET_ACK;.(****************).....CH := NEX
T_CHAR (10);..(* ..ACK *)....TIMEOUT ...
.....START_ERROR;....("TIMEOUT ON ACK");
...ERROR............CH = CAN ....PROCESS
_CAN........CH <> ACK ........START_ERRO
R;....("GOT ",CH," FOR ACK");...ERROR...
...;..(* .GET_ACK *)....SUM_CHECK := 0;.
.I := 0 .127 ........CH := .[NEXT_ADDRES
S];...NEXT_ADDRESS := NEXT_ADDRESS + 1;.
..SUM_CHECK := SUM_CHECK + CH;...BUFFER 
[I] := CH....;..DISPLAY_FILE ...I := 0 .
127 ....DISPLAY_CHAR (BUFFER [I])......(
"*");..WANT_CRCK ........SUM_CHECK_2 := 
CALC_CRCK;...SUM_CHECK := SUM_CHECK_2 .8
;...SUM_CHECK_2 := SUM_CHECK_2 .$FF....;
.RETRIES := 0;.INVERSE_BLOCK_NO := BLOCK
_NO .$FF;.EXPECTED_BLOCK := BLOCK_NO;...
..TO_MODEM (SOH);..(* START BLOCK *)...T
O_MODEM (BLOCK_NO);...TO_MODEM (INVERSE_
BLOCK_NO);....I := 0 .127 ........DISCAR
D := FROM_MODEM;..(* IGNORE ANY SPURIOUS
 GLITCHES *)...TO_MODEM (BUFFER[I])....;
...TO_MODEM (SUM_CHECK);....WANT_CRCK ..
..TO_MODEM (SUM_CHECK_2);...GET_ACK..ABO
RT .((.TIMEOUT) .(CH = ACK));..NEXT_ADDR
ESS >= FINAL_ADDRESS ....ABORT ........R
ETRIES := 0;...EXPECTED_BLOCK := -1;....
...TO_MODEM (EOT);...GET_ACK....ABORT .(
(.TIMEOUT) .(CH = ACK));.....ABORT ....E
OF := TRUE....;.BLOCK_NO := BLOCK_NO + 1
..;...SEND_FILE;.(******************)..C
H : .;....;..(CHARCOLOUR, LIGHT_GREEN);.
.("----- SEND A FILE -----");..(CHARCOLO
UR, GREEN);.ANALYSE_FILE;.NEXT_ADDRESS :
= START_ADDRESS;.BLOCK_NO := 1;.EXPECTED
_BLOCK := 1;.ABORT := FALSE;.EOF := FALS
E;.RETRIES := 0;.PURGE;..(* EMPTY BUFFER
 *)..; .;..("AWAITING INITIAL NAK");....
.CH := NEXT_CHAR (60);..(* .A MINUTE *).
...TIMEOUT ........START_ERROR;....("NO 
RESPONSE FROM OTHER END")...............
.CH = NAK ....WANT_CRCK := FALSE........
CH = "C" ....WANT_CRCK := TRUE........CH
 = CAN ....PROCESS_CAN...........START_E
RROR;....("GOT ",CH," FOR NAK");...ERROR
..........(CH = NAK) .(CH = "C")....TIME
OUT .ABORT;...(TIMEOUT .ABORT) ........T
RANSMIT_BLOCK....ABORT .EOF;..EOF ......
...;....("FILE TRANSMITTED SUCCESSFULLY"
).........CANCEL_TRANS..(* STOP OTHER .*
)..;...TERMINAL_MODE (HALF_DUPLEX);.(***
*********************************)..ACTI
VE = 7;..INPUT : .;...X : .;...LAST_TERM
INAL_MODE := COMMAND;..(CHARCOLOUR, GREE
N);..;..(CHARCOLOUR, LIGHT_GREEN);..("TE
RMINAL MODE - ");..HALF_DUPLEX .....("HA
LF")......("FULL");..(" DUPLEX");..("PRE
SS <COMMODORE> KEY FOR MAIN MENU");..;..
(CHARCOLOUR, WHITE);..(1, ACTIVE, TRUE);
.....X := .;....X > 40 ....X := X - 40;.
...(1,...X * 8,....* 8 + 42);...INPUT :=
 FROM_MODEM;....INPUT <> 0 ....DISPLAY_C
HAR (INPUT);...INPUT := .;....INPUT <> 0
 .........(INPUT >= $C1) ....(INPUT <= $
DA) ....INPUT := INPUT - $60;....INPUT =
 $8D ....INPUT := CR........(INPUT = $9D
)....(INPUT = $14) ....INPUT := BS......
..INPUT = 29 ....INPUT := FS........INPU
T = HOME ....INPUT := FF;..(* REVERSE UP
PER/LOWER .*).....(INPUT >= $61) ....(IN
PUT <= $7A) ....INPUT := INPUT - $20....
....(INPUT >= "A") ....(INPUT <= "Z") ..
..INPUT := INPUT + $20;...TO_MODEM (INPU
T);....HALF_DUPLEX .........(CHARCOLOUR,
 LIGHT_BLUE);...DISPLAY_CHAR (INPUT);...
.(CHARCOLOUR, WHITE)..........COMMODORE_
LOGO;..(1, ACTIVE, FALSE)..;...TYPE_FILE
;.(******************)...NEXT_ADDRESS :=
 START_ADDRESS;..;..("PRESS <COMMODORE> 
KEY TO ABORT LIST");..("      <SHIFT>   
  KEY TO PAUSE LIST");..;..(CHARCOLOUR, 
LIGHT_GREEN);..(NEXT_ADDRESS < FINAL_ADD
RESS).....COMMODORE_LOGO ..............S
HIFT_KEY_PRESSED;...DISPLAY_CHAR (.[NEXT
_ADDRESS]);...NEXT_ADDRESS := NEXT_ADDRE
SS + 1....;....;..(* -------- MAIN PROGR
AM -------- *).....INIT;..(* READY .CRCK
 *)........(CHARCOLOUR, GREEN);....COMMA
ND ...."A": ANALYSE_FILE;..."C": CANCEL_
TRANS;..."F": TERMINAL_MODE (FALSE);..."
H": TERMINAL_MODE (TRUE);..."R": RECEIVE
_FILE;..."S": SEND_FILE;..."T": TYPE_FIL
E....;..(* ..*)....(COMMAND = "S")....(C
OMMAND = "R") ....COMMAND := LAST_TERMIN
AL_MODE............(CHARCOLOUR, GREEN);.
...(.(14));..(* LOWER .*)....("<A>NALYSE
 A FILE");....("<C>ANCEL TRANSMISSION");
....("<F>ULL DUPLEX TERMINAL");....("<H>
ALF DUPLEX TERMINAL");....("<R>ECEIVE A 
FILE");....("<S>END A FILE");....("<T>YP
E LAST FILE");....("<Q>UIT PROGRAM");...
.;....("COMMAND? < >",.(157),.(157));...
.(CHARCOLOUR, LIGHT_BLUE);........(COMMA
ND);...COMMAND := COMMAND .$7F....(COMMA
ND = "F")....(COMMAND = "S")....(COMMAND
 = "Q")....(COMMAND = "A")....(COMMAND =
 "C")....(COMMAND = "H")....(COMMAND = "
T")....(COMMAND = "R");....(.(COMMAND)).
.......COMMAND = "Q";....(2).....
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL