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

MODEM64

FILE INFORMATION

FILENAME(S): MODEM64

FILE TYPE(S): DEL

FILE SIZE: 15.5K

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

APPEARS ON: 1 disk(s)

FILE HASH

2cc721d48c68e92e010aeea3281c8e19cac02ec949756fe1ca4f8f79654a2156

FOUND ON DISKS (1 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
NAAM MODEM64 DEL DuncanTwain 13 10 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 50  52 49 4E 54 45 52 5F 43  | 0;....PRINTER_C|
00000120: 48 41 4E 4E 45 4C 20 3D  20 34 3B 0D 10 86 50 52  |HANNEL = 4;...PR|
00000130: 49 4E 54 45 52 5F 53 45  43 5F 41 44 44 52 20 3D  |INTER_SEC_ADDR =|
00000140: 20 30 3B 0D 10 86 44 49  53 50 4C 41 59 5F 46 49  | 0;...DISPLAY_FI|
00000150: 4C 45 20 3D 20 46 41 4C  53 45 3B 0D 10 86 52 45  |LE = FALSE;...RE|
00000160: 43 45 49 56 45 5F 57 49  54 48 5F 43 52 43 4B 20  |CEIVE_WITH_CRCK |
00000170: 3D 20 54 52 55 45 3B 0D  10 86 4D 41 58 5F 52 45  |= TRUE;...MAX_RE|
00000180: 54 52 49 45 53 20 3D 20  36 3B 0D 10 86 43 48 41  |TRIES = 6;...CHA|
00000190: 52 43 4F 4C 4F 55 52 20  3D 20 31 30 3B 0D 10 86  |RCOLOUR = 10;...|
000001A0: 57 48 49 54 45 20 3D 20  31 3B 0D 10 86 47 52 45  |WHITE = 1;...GRE|
000001B0: 45 4E 20 3D 20 35 3B 0D  10 86 4C 49 47 48 54 5F  |EN = 5;...LIGHT_|
000001C0: 52 45 44 20 3D 20 31 30  3B 0D 10 86 4C 49 47 48  |RED = 10;...LIGH|
000001D0: 54 5F 47 52 45 45 4E 20  3D 20 31 33 3B 0D 10 86  |T_GREEN = 13;...|
000001E0: 4C 49 47 48 54 5F 42 4C  55 45 20 3D 20 31 34 3B  |LIGHT_BLUE = 14;|
000001F0: 0D 10 86 4C 49 47 48 54  5F 47 52 45 59 20 3D 20  |...LIGHT_GREY = |
00000200: 31 35 3B 0D 0D 10 86 53  54 41 52 54 5F 41 44 44  |15;....START_ADD|
00000210: 52 45 53 53 20 3D 20 24  31 46 30 30 3B 0D 10 86  |RESS = $1F00;...|
00000220: 43 41 53 53 45 54 54 45  20 3D 20 31 3B 0D 10 86  |CASSETTE = 1;...|
00000230: 44 49 53 4B 20 3D 20 38  3B 0D 10 86 41 52 45 47  |DISK = 8;...AREG|
00000240: 20 3D 20 24 32 42 32 3B  0D 10 86 58 52 45 47 20  | = $2B2;...XREG |
00000250: 3D 20 24 32 42 33 3B 0D  10 86 59 52 45 47 20 3D  |= $2B3;...YREG =|
00000260: 20 24 32 42 34 3B 0D 10  86 43 43 20 3D 20 24 32  | $2B4;...CC = $2|
00000270: 42 31 3B 0D 10 86 53 45  54 4C 46 53 20 3D 20 24  |B1;...SETLFS = $|
00000280: 46 46 42 41 3B 0D 10 86  53 45 54 4E 41 4D 20 3D  |FFBA;...SETNAM =|
00000290: 20 24 46 46 42 44 3B 0D  0D 10 86 53 4F 48 20 3D  | $FFBD;....SOH =|
000002A0: 20 24 31 3B 0D 10 86 45  4F 54 20 3D 20 24 34 3B  | $1;...EOT = $4;|
000002B0: 0D 10 86 41 43 4B 20 3D  20 24 36 3B 0D 10 86 4E  |...ACK = $6;...N|
000002C0: 41 4B 20 3D 20 24 31 35  3B 0D 10 86 43 41 4E 20  |AK = $15;...CAN |
000002D0: 3D 20 24 31 38 3B 0D 10  86 52 53 32 33 32 5F 53  |= $18;...RS232_S|
000002E0: 54 41 54 55 53 20 3D 20  24 32 39 37 3B 0D 10 86  |TATUS = $297;...|
000002F0: 45 4D 50 54 59 20 3D 20  38 3B 0D 0D 83 0D 10 84  |EMPTY = 8;......|
00000300: 43 4F 4D 4D 41 4E 44 20  3A 20 A1 3B 0D 0D 10 84  |COMMAND : .;....|
00000310: 42 55 46 46 45 52 20 3A  20 84 5B 31 33 30 5D 20  |BUFFER : .[130] |
00000320: 85 A1 3B 0D 10 84 4E 41  4D 45 31 2C 20 4E 41 4D  |..;...NAME1, NAM|
00000330: 45 32 20 3A 20 84 5B 32  30 5D 20 85 A1 3B 0D 10  |E2 : .[20] ..;..|
00000340: 84 4C 41 53 54 5F 54 45  52 4D 49 4E 41 4C 5F 4D  |.LAST_TERMINAL_M|
00000350: 4F 44 45 2C 0D 10 84 4D  45 44 49 55 4D 2C 0D 10  |ODE,...MEDIUM,..|
00000360: 84 47 4F 54 5F 4D 45 44  49 55 4D 2C 0D 10 84 4C  |.GOT_MEDIUM,...L|
00000370: 45 4E 47 54 48 2C 0D 10  84 42 41 44 5F 52 45 53  |ENGTH,...BAD_RES|
00000380: 55 4C 54 2C 0D 10 84 4E  45 58 54 5F 41 44 44 52  |ULT,...NEXT_ADDR|
00000390: 45 53 53 2C 0D 10 84 46  49 4E 41 4C 5F 41 44 44  |ESS,...FINAL_ADD|
000003A0: 52 45 53 53 2C 0D 10 84  52 45 54 52 49 45 53 2C  |RESS,...RETRIES,|
000003B0: 0D 10 84 45 4F 46 2C 0D  10 84 41 42 4F 52 54 2C  |...EOF,...ABORT,|
000003C0: 0D 10 84 42 41 44 5F 42  4C 4F 43 4B 2C 0D 10 84  |...BAD_BLOCK,...|
000003D0: 53 45 51 5F 45 52 52 4F  52 2C 0D 10 84 42 41 44  |SEQ_ERROR,...BAD|
000003E0: 5F 53 55 4D 5F 43 48 45  43 4B 2C 0D 10 84 54 49  |_SUM_CHECK,...TI|
000003F0: 4D 45 4F 55 54 2C 0D 10  84 42 4C 4F 43 4B 5F 4E  |MEOUT,...BLOCK_N|
00000400: 4F 2C 0D 10 84 49 4E 56  45 52 53 45 5F 42 4C 4F  |O,...INVERSE_BLO|
00000410: 43 4B 5F 4E 4F 2C 0D 10  84 45 58 50 45 43 54 45  |CK_NO,...EXPECTE|
00000420: 44 5F 42 4C 4F 43 4B 2C  0D 10 84 4C 41 53 54 5F  |D_BLOCK,...LAST_|
00000430: 42 4C 4F 43 4B 2C 0D 10  84 57 41 4E 54 5F 43 52  |BLOCK,...WANT_CR|
00000440: 43 4B 2C 0D 10 84 53 55  4D 5F 43 48 45 43 4B 5F  |CK,...SUM_CHECK_|
00000450: 52 45 43 45 49 56 45 44  2C 0D 10 84 53 55 4D 5F  |RECEIVED,...SUM_|
00000460: 43 48 45 43 4B 5F 52 45  43 45 49 56 45 44 5F 32  |CHECK_RECEIVED_2|
00000470: 2C 0D 10 84 53 55 4D 5F  43 48 45 43 4B 2C 0D 10  |,...SUM_CHECK,..|
00000480: 84 53 55 4D 5F 43 48 45  43 4B 5F 32 10 82 3A 20  |.SUM_CHECK_2..: |
00000490: FE 3B 0D 10 84 52 4F 55  54 49 4E 45 20 3A 20 84  |.;...ROUTINE : .|
000004A0: 5B 33 35 5D 20 85 FE 3B  0D 0D 87 43 4F 4D 4D 4F  |[35] ..;...COMMO|
000004B0: 44 4F 52 45 5F 4C 4F 47  4F 3B 0D 28 2A 2A 2A 2A  |DORE_LOGO;.(****|
000004C0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
000004D0: 2A 2A 29 0D 88 0D 10 82  43 4F 4D 4D 4F 44 4F 52  |**).....COMMODOR|
000004E0: 45 5F 4C 4F 47 4F 20 3A  3D 20 A2 5B 36 35 33 5D  |E_LOGO := .[653]|
000004F0: 20 8D 32 20 3C 3E 20 30  0D 89 3B 0D 0D 87 53 48  | .2 <> 0..;...SH|
00000500: 49 46 54 5F 4B 45 59 5F  50 52 45 53 53 45 44 3B  |IFT_KEY_PRESSED;|
00000510: 0D 28 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |.(**************|
00000520: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 29 0D 88 0D 10  |***********)....|
00000530: 82 53 48 49 46 54 5F 4B  45 59 5F 50 52 45 53 53  |.SHIFT_KEY_PRESS|
00000540: 45 44 20 3A 3D 20 A2 5B  36 35 33 5D 20 8D 31 20  |ED := .[653] .1 |
00000550: 3C 3E 20 30 0D 89 3B 0D  0D 86 4F 50 45 4E 5F 52  |<> 0..;...OPEN_R|
00000560: 53 32 33 32 5F 46 49 4C  45 3B 0D 28 2A 2A 2A 2A  |S232_FILE;.(****|
00000570: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00000580: 2A 2A 2A 2A 29 0D 82 0D  10 86 4F 50 45 4E 49 54  |****).....OPENIT|
00000590: 20 3D 20 24 46 46 43 30  3B 0D 83 4E 41 4D 45 20  | = $FFC0;..NAME |
000005A0: 3A 20 84 5B 31 5D 20 85  A1 3B 0D 88 0D 28 2A 20  |: .[1] ..;...(* |
000005B0: 46 49 52 53 54 20 53 45  54 20 55 50 20 54 48 45  |FIRST SET UP THE|
000005C0: 20 46 49 4C 45 20 4E 41  4D 45 0D 10 83 41 53 20  | FILE NAME...AS |
000005D0: 50 45 52 20 54 48 45 20  D2 D3 32 33 32 20 50 41  |PER THE ..232 PA|
000005E0: 52 41 4D 54 45 52 53 20  2A 29 0D 0D 10 82 4E 41  |RAMTERS *)....NA|
000005F0: 4D 45 20 5B 31 5D 20 3A  3D 20 36 3B 10 82 28 2A  |ME [1] := 6;..(*|
00000600: 10 82 33 30 30 20 42 41  55 44 10 82 2A 29 0D 10  |..300 BAUD..*)..|
00000610: 82 4E 41 4D 45 20 5B 30  5D 20 3A 3D 20 30 3B 10  |.NAME [0] := 0;.|
00000620: 84 28 2A 10 82 33 2D 4C  49 4E 45 10 84 2A 29 0D  |.(*..3-LINE..*).|
00000630: 10 82 A2 5B 24 46 38 5D  20 3A 3D 20 24 43 31 3B  |...[$F8] := $C1;|
00000640: 20 28 2A 20 42 55 46 46  45 52 20 2A 29 0D 10 82  | (* BUFFER *)...|
00000650: A2 5B 24 46 41 5D 20 3A  3D 20 24 43 32 3B 20 28  |.[$FA] := $C2; (|
00000660: 2A 20 42 55 46 46 45 52  20 2A 29 0D 10 82 A2 5B  |* BUFFER *)....[|
00000670: 41 52 45 47 5D 20 3A 3D  20 32 3B 0D 10 82 A2 5B  |AREG] := 2;....[|
00000680: 58 52 45 47 5D 20 3A 3D  20 32 3B 20 28 2A 20 D2  |XREG] := 2; (* .|
00000690: D3 32 33 32 20 2A 29 0D  10 82 A2 5B 59 52 45 47  |.232 *)....[YREG|
000006A0: 5D 20 3A 3D 20 32 3B 0D  10 82 9F 28 53 45 54 4C  |] := 2;....(SETL|
000006B0: 46 53 29 3B 0D 10 82 A2  5B 41 52 45 47 5D 20 3A  |FS);....[AREG] :|
000006C0: 3D 20 32 3B 0D 10 82 A2  5B 58 52 45 47 5D 20 3A  |= 2;....[XREG] :|
000006D0: 3D 20 A9 28 4E 41 4D 45  5B 31 5D 29 3B 0D 10 82  |= .(NAME[1]);...|
000006E0: A2 5B 59 52 45 47 5D 20  3A 3D 20 A9 28 4E 41 4D  |.[YREG] := .(NAM|
000006F0: 45 5B 31 5D 29 20 8F 38  3B 0D 10 82 9F 28 53 45  |E[1]) .8;....(SE|
00000700: 54 4E 41 4D 29 3B 0D 10  82 9F 28 4F 50 45 4E 49  |TNAM);....(OPENI|
00000710: 54 29 0D 89 3B 0D 0D 86  49 4E 49 54 3B 0D 28 2A  |T)..;...INIT;.(*|
00000720: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 29 0D 82 43  |************)..C|
00000730: 4F 4C 4F 55 52 20 3D 20  31 3B 0D 10 86 50 4F 49  |OLOUR = 1;...POI|
00000740: 4E 54 20 3D 20 32 3B 0D  10 86 42 45 48 49 4E 44  |NT = 2;...BEHIND|
00000750: 42 4B 20 3D 20 36 3B 0D  0D 83 49 20 3A 20 FE 3B  |BK = 6;...I : .;|
00000760: 0D 0D 86 49 4E 53 45 52  54 28 58 2C 20 59 2C 20  |...INSERT(X, Y, |
00000770: 5A 29 3B 0D 88 0D 10 82  52 4F 55 54 49 4E 45 20  |Z);.....ROUTINE |
00000780: 5B 49 5D 20 3A 3D 20 58  3B 0D 10 82 52 4F 55 54  |[I] := X;...ROUT|
00000790: 49 4E 45 20 5B 49 20 2D  20 31 5D 20 3A 3D 20 59  |INE [I - 1] := Y|
000007A0: 3B 0D 10 82 52 4F 55 54  49 4E 45 20 5B 49 20 2D  |;...ROUTINE [I -|
000007B0: 20 32 5D 20 3A 3D 20 5A  3B 0D 10 82 49 20 3A 3D  | 2] := Z;...I :=|
000007C0: 20 49 20 2D 20 33 0D 89  3B 0D 0D 88 28 2A 20 49  | I - 3..;...(* I|
000007D0: 4E 49 54 20 2A 29 0D 10  82 9D 28 AB 28 48 4F 4D  |NIT *)....(.(HOM|
000007E0: 45 29 29 3B 0D 10 82 E2  28 43 48 41 52 43 4F 4C  |E));....(CHARCOL|
000007F0: 4F 55 52 2C 20 4C 49 47  48 54 5F 47 52 45 59 29  |OUR, LIGHT_GREY)|
00000800: 3B 0D 10 82 A2 5B 36 35  30 5D 20 3A 3D 20 31 32  |;....[650] := 12|
00000810: 38 3B 10 82 28 2A 20 41  4C 4C 20 4B 45 59 53 20  |8;..(* ALL KEYS |
00000820: 41 55 54 4F 2D 98 2A 29  0D 10 82 FF 28 22 D9 C1  |AUTO-.*)....("..|
00000830: CD 2D 43 4F 4D 50 41 54  49 42 4C 45 20 CD 4F 44  |.-COMPATIBLE .OD|
00000840: 45 4D 20 D0 52 4F 47 52  41 4D 20 46 4F 52 20 C3  |EM .ROGRAM FOR .|
00000850: 36 34 2E 22 29 3B 0D 10  82 FF 28 22 D7 52 49 54  |64.");....(".RIT|
00000860: 54 45 4E 20 42 59 20 CE  49 43 4B 20 C7 41 4D 4D  |TEN BY .ICK .AMM|
00000870: 4F 4E 20 49 4E 20 C7 2D  D0 41 53 43 41 4C 2E 22  |ON IN .-.ASCAL."|
00000880: 29 3B 0D 10 82 FF 28 22  D6 45 52 53 49 4F 4E 20  |);....(".ERSION |
00000890: 31 2E 33 20 20 2D 20 D0  D5 C2 CC C9 C3 20 C4 CF  |1.3  - ...... ..|
000008A0: CD C1 C9 CE 2E 22 29 3B  0D 10 82 FF 28 22 C7 2D  |.....");....(".-|
000008B0: D0 41 53 43 41 4C 20 49  53 20 50 52 4F 44 55 43  |.ASCAL IS PRODUC|
000008C0: 45 44 20 42 59 20 C7 41  4D 42 49 54 20 C7 41 4D  |ED BY .AMBIT .AM|
000008D0: 45 53 20 2D 22 29 3B 0D  10 82 FF 28 22 20 45 4E  |ES -");....(" EN|
000008E0: 51 55 49 52 49 45 53 3A  20 C7 41 4D 42 49 54 20  |QUIRIES: .AMBIT |
000008F0: C7 41 4D 45 53 2C 20 D0  2E CF 2E 20 C2 4F 58 20  |.AMES, .... .OX |
00000900: 31 32 34 2C 22 29 3B 0D  10 82 FF 28 22 20 C9 56  |124,");....(" .V|
00000910: 41 4E 48 4F 45 2C 20 D6  49 43 54 4F 52 49 41 20  |ANHOE, .ICTORIA |
00000920: 33 30 37 39 2E 20 C1 55  53 54 52 41 4C 49 41 2E  |3079. .USTRALIA.|
00000930: 22 29 3B 0D 10 82 FF 3B  0D 10 82 49 20 3A 3D 20  |");....;...I := |
00000940: 33 35 3B 0D 10 82 28 2A  20 43 52 43 4B 20 52 4F  |35;...(* CRCK RO|
00000950: 55 54 49 4E 45 20 9A 54  52 41 4E 53 4D 49 53 53  |UTINE .TRANSMISS|
00000960: 49 4F 4E 20 2A 29 0D 10  82 49 4E 53 45 52 54 28  |ION *)...INSERT(|
00000970: 24 38 35 30 30 41 39 2C  24 35 46 38 35 35 45 2C  |$8500A9,$5F855E,|
00000980: 24 38 35 34 42 42 31 29  3B 0D 10 82 49 4E 53 45  |$854BB1);...INSE|
00000990: 52 54 28 24 30 38 41 32  30 37 2C 24 32 36 30 37  |RT($08A207,$2607|
000009A0: 32 36 2C 24 35 46 32 36  35 45 29 3B 0D 10 82 49  |26,$5F265E);...I|
000009B0: 4E 53 45 52 54 28 24 41  35 30 43 39 30 2C 24 31  |NSERT($A50C90,$1|
000009C0: 30 34 39 35 46 2C 24 41  35 35 46 38 35 29 3B 0D  |0495F,$A55F85);.|
000009D0: 10 82 49 4E 53 45 52 54  28 24 32 31 34 39 35 45  |..INSERT($21495E|
000009E0: 2C 24 43 41 35 45 38 35  2C 24 38 38 45 39 44 30  |,$CA5E85,$88E9D0|
000009F0: 29 3B 0D 10 82 49 4E 53  45 52 54 28 24 36 30 45  |);...INSERT($60E|
00000A00: 30 44 30 2C 30 2C 30 29  3B 0D 10 82 28 2A 20 43  |0D0,0,0);...(* C|
00000A10: 52 43 4B 20 52 4F 55 54  49 4E 45 20 9A 46 49 4C  |RCK ROUTINE .FIL|
00000A20: 45 20 2A 29 0D 10 82 49  4E 53 45 52 54 28 24 38  |E *)...INSERT($8|
00000A30: 35 30 30 41 39 2C 24 30  36 38 35 30 35 2C 24 30  |500A9,$068505,$0|
00000A40: 35 30 36 41 38 29 3B 0D  10 82 49 4E 53 45 52 54  |506A8);...INSERT|
00000A50: 28 24 30 38 30 36 32 36  2C 24 31 38 34 42 42 31  |($080626,$184BB1|
00000A60: 2C 24 38 35 30 35 36 35  29 3B 0D 10 82 49 4E 53  |,$850565);...INS|
00000A70: 45 52 54 28 24 39 30 32  38 30 35 2C 24 39 37 34  |ERT($902805,$974|
00000A80: 39 30 41 2C 24 41 35 30  35 38 35 29 3B 0D 10 82  |90A,$A50585);...|
00000A90: 49 4E 53 45 52 54 28 24  41 30 34 39 30 36 2C 24  |INSERT($A04906,$|
00000AA0: 45 36 30 36 38 35 2C 24  30 32 44 30 34 42 29 3B  |E60685,$02D04B);|
00000AB0: 0D 10 82 49 4E 53 45 52  54 28 24 41 35 34 43 45  |...INSERT($A54CE|
00000AC0: 36 2C 24 35 45 43 35 34  42 2C 24 41 35 44 42 44  |6,$5EC54B,$A5DBD|
00000AD0: 30 29 3B 0D 10 82 49 4E  53 45 52 54 28 24 35 46  |0);...INSERT($5F|
00000AE0: 43 35 34 43 2C 24 41 35  44 35 44 30 2C 24 34 42  |C54C,$A5D5D0,$4B|
00000AF0: 38 35 30 35 29 3B 0D 10  82 49 4E 53 45 52 54 28  |8505);...INSERT(|
00000B00: 24 38 35 30 36 41 35 2C  24 46 46 36 30 34 43 2C  |$8506A5,$FF604C,|
00000B10: 30 29 3B 0D 10 82 42 55  46 46 45 52 20 5B 31 32  |0);...BUFFER [12|
00000B20: 38 5D 20 3A 3D 20 30 3B  0D 10 82 42 55 46 46 45  |8] := 0;...BUFFE|
00000B30: 52 20 5B 31 32 39 5D 20  3A 3D 20 30 3B 0D 10 82  |R [129] := 0;...|
00000B40: 43 4F 4D 4D 41 4E 44 20  3A 3D 20 22 46 22 3B 0D  |COMMAND := "F";.|
00000B50: 10 82 A5 28 33 32 2C 0D  10 83 24 46 46 2C 24 46  |...(32,...$FF,$F|
00000B60: 46 2C 24 46 46 2C 24 46  46 2C 24 46 46 2C 24 46  |F,$FF,$FF,$FF,$F|
00000B70: 46 2C 24 46 46 2C 24 46  46 29 3B 0D 10 82 DF 28  |F,$FF,$FF);....(|
00000B80: 31 2C 20 50 4F 49 4E 54  2C 20 33 32 2C 0D 10 8A  |1, POINT, 32,...|
00000B90: 31 2C 20 43 4F 4C 4F 55  52 2C 20 4C 49 47 48 54  |1, COLOUR, LIGHT|
00000BA0: 5F 47 52 45 59 2C 0D 10  8A 31 2C 20 42 45 48 49  |_GREY,...1, BEHI|
00000BB0: 4E 44 42 4B 2C 20 54 52  55 45 29 3B 0D 10 82 47  |NDBK, TRUE);...G|
00000BC0: 4F 54 5F 4D 45 44 49 55  4D 20 3A 3D 20 46 41 4C  |OT_MEDIUM := FAL|
00000BD0: 53 45 3B 0D 10 82 46 49  4E 41 4C 5F 41 44 44 52  |SE;...FINAL_ADDR|
00000BE0: 45 53 53 20 3A 3D 20 53  54 41 52 54 5F 41 44 44  |ESS := START_ADD|
00000BF0: 52 45 53 53 3B 0D 10 82  4F 50 45 4E 5F 52 53 32  |RESS;...OPEN_RS2|
00000C00: 33 32 5F 46 49 4C 45 0D  89 3B 20 28 2A 20 85 49  |32_FILE..; (* .I|
00000C10: 4E 49 54 20 2A 29 0D 0D  86 53 54 41 52 54 5F 45  |NIT *)...START_E|
00000C20: 52 52 4F 52 3B 0D 28 2A  2A 2A 2A 2A 2A 2A 2A 2A  |RROR;.(*********|
00000C30: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 29 0D 88 0D 10  |***********)....|
00000C40: 82 E2 28 43 48 41 52 43  4F 4C 4F 55 52 2C 20 4C  |..(CHARCOLOUR, L|
00000C50: 49 47 48 54 5F 52 45 44  29 3B 0D 10 82 FF 0D 89  |IGHT_RED);......|
00000C60: 3B 0D 0D 86 45 52 52 4F  52 3B 0D 28 2A 2A 2A 2A  |;...ERROR;.(****|
00000C70: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 29 0D 88 0D 92 45  |**********)....E|
00000C80: 58 50 45 43 54 45 44 5F  42 4C 4F 43 4B 20 3C 3E  |XPECTED_BLOCK <>|
00000C90: 20 2D 31 20 93 0D 10 83  9D 28 22 20 4F 4E 20 42  | -1 .....(" ON B|
00000CA0: 4C 4F 43 4B 20 22 2C 0D  10 8C 45 58 50 45 43 54  |LOCK ",...EXPECT|
00000CB0: 45 44 5F 42 4C 4F 43 4B  29 0D 94 0D 10 83 9D 28  |ED_BLOCK)......(|
00000CC0: 22 20 4F 4E 20 C5 CF D4  22 29 3B 0D FF 28 22 20  |" ON ...");..(" |
00000CD0: 52 45 54 52 59 20 22 2C  20 52 45 54 52 49 45 53  |RETRY ", RETRIES|
00000CE0: 29 3B 0D 52 45 54 52 49  45 53 20 3A 3D 20 52 45  |);.RETRIES := RE|
00000CF0: 54 52 49 45 53 20 2B 20  31 3B 0D E2 28 43 48 41  |TRIES + 1;..(CHA|
00000D00: 52 43 4F 4C 4F 55 52 2C  20 47 52 45 45 4E 29 3B  |RCOLOUR, GREEN);|
00000D10: 0D 92 52 45 54 52 49 45  53 20 3E 20 4D 41 58 5F  |..RETRIES > MAX_|
00000D20: 52 45 54 52 49 45 53 20  93 0D 10 82 41 42 4F 52  |RETRIES ....ABOR|
00000D30: 54 20 3A 3D 20 54 52 55  45 0D 89 3B 0D 0D 86 47  |T := TRUE..;...G|
00000D40: 45 54 5F 46 49 4C 45 5F  4E 41 4D 45 3B 0D 28 2A  |ET_FILE_NAME;.(*|
00000D50: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00000D60: 2A 2A 2A 2A 2A 29 0D 83  49 2C 20 47 4F 54 5F 43  |*****)..I, GOT_C|
00000D70: 52 20 3A 20 FE 3B 0D 10  84 43 48 20 3A 20 A1 3B  |R : .;...CH : .;|
00000D80: 0D 88 0D 92 90 47 4F 54  5F 4D 45 44 49 55 4D 20  |.....GOT_MEDIUM |
00000D90: 93 0D 10 82 88 0D 10 82  FF 3B 0D 10 82 9D 28 22  |.........;....("|
00000DA0: 3C C4 3E 49 53 4B 20 4F  52 20 3C C3 3E 41 53 53  |<.>ISK OR <.>ASS|
00000DB0: 45 54 54 45 3F 20 22 29  3B 0D 10 82 E2 28 43 48  |ETTE? ");....(CH|
00000DC0: 41 52 43 4F 4C 4F 55 52  2C 20 4C 49 47 48 54 5F  |ARCOLOUR, LIGHT_|
00000DD0: 42 4C 55 45 29 3B 0D 10  82 98 0D 10 84 9E 28 43  |BLUE);........(C|
00000DE0: 48 29 3B 0D 10 84 43 48  20 3A 3D 20 43 48 20 8D  |H);...CH := CH .|
00000DF0: 24 37 46 0D 10 82 99 28  43 48 20 3D 20 22 44 22  |$7F....(CH = "D"|
00000E00: 29 0D 10 85 8A 28 43 48  20 3D 20 22 43 22 29 3B  |)....(CH = "C");|
00000E10: 0D 10 82 FF 28 AB 28 43  48 29 29 3B 0D 10 82 E2  |....(.(CH));....|
00000E20: 28 43 48 41 52 43 4F 4C  4F 55 52 2C 20 47 52 45  |(CHARCOLOUR, GRE|
00000E30: 45 4E 29 3B 0D 10 82 92  43 48 20 3D 20 22 44 22  |EN);....CH = "D"|
00000E40: 20 93 0D 10 84 88 0D 10  84 4D 45 44 49 55 4D 20  | ........MEDIUM |
00000E50: 3A 3D 20 44 49 53 4B 3B  0D 10 84 FC 28 31 35 2C  |:= DISK;....(15,|
00000E60: 20 44 49 53 4B 2C 20 31  35 2C 20 22 49 22 29 0D  | DISK, 15, "I").|
00000E70: 10 84 89 0D 10 82 94 0D  10 84 4D 45 44 49 55 4D  |..........MEDIUM|
00000E80: 20 3A 3D 20 43 41 53 53  45 54 54 45 3B 0D 10 82  | := CASSETTE;...|
00000E90: 47 4F 54 5F 4D 45 44 49  55 4D 20 3A 3D 20 54 52  |GOT_MEDIUM := TR|
00000EA0: 55 45 0D 10 82 89 3B 0D  98 0D 10 82 FF 3B 0D 10  |UE....;......;..|
00000EB0: 82 9D 28 22 C6 49 4C 45  20 4E 41 4D 45 3F 20 22  |..(".ILE NAME? "|
00000EC0: 29 3B 0D 10 82 E2 28 43  48 41 52 43 4F 4C 4F 55  |);....(CHARCOLOU|
00000ED0: 52 2C 20 4C 49 47 48 54  5F 42 4C 55 45 29 3B 0D  |R, LIGHT_BLUE);.|
00000EE0: 10 82 9E 28 4E 41 4D 45  31 29 3B 0D 10 82 E2 28  |...(NAME1);....(|
00000EF0: 43 48 41 52 43 4F 4C 4F  55 52 2C 20 47 52 45 45  |CHARCOLOUR, GREE|
00000F00: 4E 29 3B 0D 10 82 47 4F  54 5F 43 52 20 3A 3D 20  |N);...GOT_CR := |
00000F10: 46 41 4C 53 45 3B 0D 10  82 9A 49 20 3A 3D 20 30  |FALSE;....I := 0|
00000F20: 20 9B 32 30 20 97 0D 10  84 92 90 47 4F 54 5F 43  | .20 ......GOT_C|
00000F30: 52 20 93 0D 10 86 88 0D  10 86 4E 41 4D 45 32 20  |R ........NAME2 |
00000F40: 5B 32 30 20 2D 20 49 5D  20 3A 3D 20 4E 41 4D 45  |[20 - I] := NAME|
00000F50: 31 20 5B 49 5D 3B 0D 10  86 92 4E 41 4D 45 31 20  |1 [I];....NAME1 |
00000F60: 5B 49 5D 20 3D 20 43 52  20 93 0D 10 88 88 0D 10  |[I] = CR .......|
00000F70: 88 4C 45 4E 47 54 48 20  3A 3D 20 49 3B 0D 10 88  |.LENGTH := I;...|
00000F80: 47 4F 54 5F 43 52 20 3A  3D 20 54 52 55 45 0D 10  |GOT_CR := TRUE..|
00000F90: 88 89 0D 10 86 89 0D 99  4C 45 4E 47 54 48 20 3C  |........LENGTH <|
00000FA0: 3E 20 30 0D 89 3B 0D 0D  86 43 48 45 43 4B 5F 52  |> 0..;...CHECK_R|
00000FB0: 45 53 55 4C 54 3B 0D 28  2A 2A 2A 2A 2A 2A 2A 2A  |ESULT;.(********|
00000FC0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 29 0D 82  |*************)..|
00000FD0: 52 45 41 44 53 54 20 3D  20 24 46 46 42 37 3B 0D  |READST = $FFB7;.|
00000FE0: 0D 83 49 2C 20 45 52 52  4F 52 5F 43 4F 44 45 20  |..I, ERROR_CODE |
00000FF0: 3A 20 FE 3B 0D 10 84 52  45 53 55 4C 54 20 3A 20  |: .;...RESULT : |
00001000: 84 5B 38 30 5D 20 85 A1  3B 0D 88 0D 10 82 92 A2  |.[80] ..;.......|
00001010: 5B 43 43 5D 20 8D 31 20  93 0D 10 84 45 52 52 4F  |[CC] .1 ....ERRO|
00001020: 52 5F 43 4F 44 45 20 3A  3D 20 A2 5B 41 52 45 47  |R_CODE := .[AREG|
00001030: 5D 10 82 28 2A 20 47 4F  54 20 45 52 52 4F 52 20  |]..(* GOT ERROR |
00001040: 2A 29 0D 10 82 94 0D 10  84 88 0D 10 84 9F 28 52  |*)............(R|
00001050: 45 41 44 53 54 29 3B 0D  10 84 45 52 52 4F 52 5F  |EADST);...ERROR_|
00001060: 43 4F 44 45 20 3A 3D 20  A2 5B 41 52 45 47 5D 20  |CODE := .[AREG] |
00001070: 8D 24 42 46 0D 10 84 89  3B 0D 10 82 42 41 44 5F  |.$BF....;...BAD_|
00001080: 52 45 53 55 4C 54 20 3A  3D 20 45 52 52 4F 52 5F  |RESULT := ERROR_|
00001090: 43 4F 44 45 3B 0D 10 82  92 4D 45 44 49 55 4D 20  |CODE;....MEDIUM |
000010A0: 3D 20 44 49 53 4B 20 93  0D 10 84 88 0D 10 84 81  |= DISK .........|
000010B0: 28 31 35 29 3B 0D 10 84  9E 28 52 45 53 55 4C 54  |(15);....(RESULT|
000010C0: 29 3B 0D 10 84 81 28 30  29 3B 0D 10 84 52 45 53  |);....(0);...RES|
000010D0: 55 4C 54 20 5B 38 30 5D  20 3A 3D 20 43 52 3B 0D  |ULT [80] := CR;.|
000010E0: 10 84 92 28 52 45 53 55  4C 54 20 5B 30 5D 20 3C  |...(RESULT [0] <|
000010F0: 3E 20 22 30 22 29 0D 10  84 8A 28 52 45 53 55 4C  |> "0")....(RESUL|
00001100: 54 20 5B 31 5D 20 3C 3E  20 22 30 22 29 20 93 0D  |T [1] <> "0") ..|
00001110: 10 86 88 0D 10 86 42 41  44 5F 52 45 53 55 4C 54  |......BAD_RESULT|
00001120: 20 3A 3D 20 54 52 55 45  3B 0D 10 86 49 20 3A 3D  | := TRUE;...I :=|
00001130: 20 2D 31 3B 0D 10 86 53  54 41 52 54 5F 45 52 52  | -1;...START_ERR|
00001140: 4F 52 3B 0D 10 86 98 0D  10 88 49 20 3A 3D 20 49  |OR;.......I := I|
00001150: 20 2B 20 31 3B 0D 10 88  9D 28 AB 28 52 45 53 55  | + 1;....(.(RESU|
00001160: 4C 54 20 5B 49 5D 29 29  0D 10 86 99 52 45 53 55  |LT [I]))....RESU|
00001170: 4C 54 20 5B 49 5D 20 3D  20 43 52 0D 10 86 89 0D  |LT [I] = CR.....|
00001180: 10 84 89 3B 0D 10 82 FF  3B 0D 10 82 92 45 52 52  |...;....;....ERR|
00001190: 4F 52 5F 43 4F 44 45 20  93 0D 10 84 88 0D 10 84  |OR_CODE ........|
000011A0: 53 54 41 52 54 5F 45 52  52 4F 52 3B 0D 10 84 FF  |START_ERROR;....|
000011B0: 28 22 C6 49 4C 45 20 45  52 52 4F 52 2C 20 43 4F  |(".ILE ERROR, CO|
000011C0: 44 45 3A 20 22 2C 0D 10  8B 45 52 52 4F 52 5F 43  |DE: ",...ERROR_C|
000011D0: 4F 44 45 29 0D 10 84 89  3B 0D 10 82 E2 28 43 48  |ODE)....;....(CH|
000011E0: 41 52 43 4F 4C 4F 55 52  2C 20 47 52 45 45 4E 29  |ARCOLOUR, GREEN)|
000011F0: 3B 0D 10 82 92 90 42 41  44 5F 52 45 53 55 4C 54  |;.....BAD_RESULT|
00001200: 20 93 0D 10 84 FF 28 22  CF 4B 2E 22 29 0D 89 3B  | .....(".K.")..;|
00001210: 0D 0D 86 4C 4F 41 44 5F  4E 4F 4D 49 4E 41 54 45  |...LOAD_NOMINATE|
00001220: 44 5F 46 49 4C 45 20 28  46 4C 41 47 29 3B 0D 28  |D_FILE (FLAG);.(|
00001230: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00001240: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00001250: 2A 2A 2A 29 0D 0D 86 4C  4F 41 44 5F 46 49 4C 45  |***)...LOAD_FILE|
00001260: 3B 0D 28 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |;.(*************|
00001270: 2A 2A 2A 2A 2A 29 0D 82  0D 10 85 4C 4F 41 44 49  |*****).....LOADI|
00001280: 54 20 3D 20 24 46 46 44  35 3B 0D 0D 88 0D 10 82  |T = $FFD5;......|
00001290: A2 5B 41 52 45 47 5D 20  3A 3D 20 31 3B 0D 10 82  |.[AREG] := 1;...|
000012A0: A2 5B 58 52 45 47 5D 20  3A 3D 20 4D 45 44 49 55  |.[XREG] := MEDIU|
000012B0: 4D 3B 0D 10 82 A2 5B 59  52 45 47 5D 20 3A 3D 20  |M;....[YREG] := |
000012C0: 30 3B 20 28 2A 20 52 45  4C 4F 43 41 54 45 20 2A  |0; (* RELOCATE *|
000012D0: 29 0D 10 82 9F 28 53 45  54 4C 46 53 29 3B 0D 10  |)....(SETLFS);..|
000012E0: 82 A2 5B 41 52 45 47 5D  20 3A 3D 20 4C 45 4E 47  |..[AREG] := LENG|
000012F0: 54 48 3B 0D 10 82 A2 5B  58 52 45 47 5D 20 3A 3D  |TH;....[XREG] :=|
00001300: 20 A9 28 4E 41 4D 45 32  5B 32 30 5D 29 3B 0D 10  | .(NAME2[20]);..|
00001310: 82 A2 5B 59 52 45 47 5D  20 3A 3D 20 A9 28 4E 41  |..[YREG] := .(NA|
00001320: 4D 45 32 5B 32 30 5D 29  20 8F 38 3B 0D 10 82 9F  |ME2[20]) .8;....|
00001330: 28 53 45 54 4E 41 4D 29  3B 0D 10 82 A2 5B 41 52  |(SETNAM);....[AR|
00001340: 45 47 5D 20 3A 3D 20 46  4C 41 47 3B 10 82 28 2A  |EG] := FLAG;..(*|
00001350: 20 FA 2F 56 45 52 49 46  59 20 2A 29 0D 10 82 A2  | ./VERIFY *)....|
00001360: 5B 58 52 45 47 5D 20 3A  3D 20 53 54 41 52 54 5F  |[XREG] := START_|
00001370: 41 44 44 52 45 53 53 3B  0D 10 82 A2 5B 59 52 45  |ADDRESS;....[YRE|
00001380: 47 5D 20 3A 3D 20 53 54  41 52 54 5F 41 44 44 52  |G] := START_ADDR|
00001390: 45 53 53 20 8F 38 3B 0D  10 82 9F 28 4C 4F 41 44  |ESS .8;....(LOAD|
000013A0: 49 54 29 3B 0D 10 82 43  48 45 43 4B 5F 52 45 53  |IT);...CHECK_RES|
000013B0: 55 4C 54 0D 89 3B 0D 0D  28 2A 2A 2A 2A 2A 20 53  |ULT..;..(***** S|
000013C0: 54 41 52 54 20 85 3A 20  4C 4F 41 44 5F 4E 4F 4D  |TART .: LOAD_NOM|
000013D0: 49 4E 41 54 45 44 5F 46  49 4C 45 20 2A 2A 2A 29  |INATED_FILE ***)|
000013E0: 0D 88 0D 98 0D 10 82 92  46 4C 41 47 20 3D 20 30  |........FLAG = 0|
000013F0: 20 93 20 28 2A 20 FA 2A  29 0D 10 84 47 45 54 5F  | . (* .*)...GET_|
00001400: 46 49 4C 45 5F 4E 41 4D  45 3B 0D 10 82 4C 4F 41  |FILE_NAME;...LOA|
00001410: 44 5F 46 49 4C 45 0D 99  28 42 41 44 5F 52 45 53  |D_FILE..(BAD_RES|
00001420: 55 4C 54 20 3D 20 30 29  0D 10 83 8A 28 46 4C 41  |ULT = 0)....(FLA|
00001430: 47 20 3D 20 31 29 0D 89  3B 0D 0D 86 53 41 56 45  |G = 1)..;...SAVE|
00001440: 5F 4E 4F 4D 49 4E 41 54  45 44 5F 46 49 4C 45 3B  |_NOMINATED_FILE;|
00001450: 0D 28 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |.(**************|
00001460: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 29 0D  |**************).|
00001470: 0D 86 53 41 56 45 5F 46  49 4C 45 3B 0D 28 2A 2A  |..SAVE_FILE;.(**|
00001480: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00001490: 2A 2A 29 0D 82 53 41 56  45 49 54 20 3D 20 24 46  |**)..SAVEIT = $F|
000014A0: 46 44 38 3B 0D 10 86 52  45 47 49 53 54 45 52 20  |FD8;...REGISTER |
000014B0: 3D 20 24 36 41 3B 0D 88  0D 10 82 A2 5B 41 52 45  |= $6A;......[ARE|
000014C0: 47 5D 20 3A 3D 20 31 3B  10 82 28 2A 20 46 49 4C  |G] := 1;..(* FIL|
000014D0: 45 20 4E 4F 20 2A 29 0D  10 82 A2 5B 58 52 45 47  |E NO *)....[XREG|
000014E0: 5D 20 3A 3D 20 4D 45 44  49 55 4D 3B 0D 10 82 A2  |] := MEDIUM;....|
000014F0: 5B 59 52 45 47 5D 20 3A  3D 20 30 3B 0D 10 82 9F  |[YREG] := 0;....|
00001500: 28 53 45 54 4C 46 53 29  3B 0D 10 82 A2 5B 41 52  |(SETLFS);....[AR|
00001510: 45 47 5D 20 3A 3D 20 4C  45 4E 47 54 48 3B 0D 10  |EG] := LENGTH;..|
00001520: 82 A2 5B 58 52 45 47 5D  20 3A 3D 0D 10 87 A9 28  |..[XREG] :=....(|
00001530: 4E 41 4D 45 32 20 5B 32  30 5D 29 3B 0D 10 82 A2  |NAME2 [20]);....|
00001540: 5B 59 52 45 47 5D 20 3A  3D 0D 10 87 A9 28 4E 41  |[YREG] :=....(NA|
00001550: 4D 45 32 20 5B 32 30 5D  29 20 8F 38 3B 0D 10 82  |ME2 [20]) .8;...|
00001560: 9F 28 53 45 54 4E 41 4D  29 3B 0D 10 82 A2 5B 52  |.(SETNAM);....[R|
00001570: 45 47 49 53 54 45 52 5D  20 3A 3D 20 53 54 41 52  |EGISTER] := STAR|
00001580: 54 5F 41 44 44 52 45 53  53 3B 0D 10 82 A2 5B 52  |T_ADDRESS;....[R|
00001590: 45 47 49 53 54 45 52 20  2B 20 31 5D 20 3A 3D 0D  |EGISTER + 1] :=.|
000015A0: 10 8E 53 54 41 52 54 5F  41 44 44 52 45 53 53 20  |..START_ADDRESS |
000015B0: 8F 38 3B 0D 10 82 A2 5B  41 52 45 47 5D 20 3A 3D  |.8;....[AREG] :=|
000015C0: 20 52 45 47 49 53 54 45  52 3B 0D 10 82 A2 5B 58  | REGISTER;....[X|
000015D0: 52 45 47 5D 20 3A 3D 20  46 49 4E 41 4C 5F 41 44  |REG] := FINAL_AD|
000015E0: 44 52 45 53 53 3B 0D 10  82 A2 5B 59 52 45 47 5D  |DRESS;....[YREG]|
000015F0: 20 3A 3D 20 46 49 4E 41  4C 5F 41 44 44 52 45 53  | := FINAL_ADDRES|
00001600: 53 20 8F 38 3B 0D 10 82  9F 28 53 41 56 45 49 54  |S .8;....(SAVEIT|
00001610: 29 3B 0D 10 82 43 48 45  43 4B 5F 52 45 53 55 4C  |);...CHECK_RESUL|
00001620: 54 0D 89 3B 0D 0D 28 2A  2A 2A 2A 2A 20 53 54 41  |T..;..(***** STA|
00001630: 52 54 20 85 3A 20 53 41  56 45 5F 4E 4F 4D 49 4E  |RT .: SAVE_NOMIN|
00001640: 41 54 45 44 5F 46 49 4C  45 20 2A 2A 2A 29 0D 88  |ATED_FILE ***)..|
00001650: 0D 98 0D 10 82 47 45 54  5F 46 49 4C 45 5F 4E 41  |.....GET_FILE_NA|
00001660: 4D 45 3B 0D 10 82 53 41  56 45 5F 46 49 4C 45 3B  |ME;...SAVE_FILE;|
00001670: 0D 10 82 92 90 42 41 44  5F 52 45 53 55 4C 54 20  |.....BAD_RESULT |
00001680: 93 0D 10 84 88 0D 10 84  92 4D 45 44 49 55 4D 20  |.........MEDIUM |
00001690: 3D 20 43 41 53 53 45 54  54 45 20 93 0D 10 86 88  |= CASSETTE .....|
000016A0: 0D 10 86 FF 3B 0D 10 86  FF 28 22 D2 45 57 49 4E  |....;....(".EWIN|
000016B0: 44 20 43 41 53 53 45 54  54 45 20 54 4F 20 53 41  |D CASSETTE TO SA|
000016C0: 56 45 20 50 4F 49 4E 54  20 46 4F 52 22 29 3B 0D  |VE POINT FOR");.|
000016D0: 10 86 FF 28 22 56 45 52  49 46 49 43 41 54 49 4F  |...("VERIFICATIO|
000016E0: 4E 20 2D 20 50 52 45 53  53 20 3C D3 C8 C9 C6 D4  |N - PRESS <.....|
000016F0: 3E 20 57 48 45 4E 20 52  45 41 44 59 2E 22 29 3B  |> WHEN READY.");|
00001700: 0D 10 86 98 99 53 48 49  46 54 5F 4B 45 59 5F 50  |.....SHIFT_KEY_P|
00001710: 52 45 53 53 45 44 0D 10  86 89 3B 0D 10 84 4C 4F  |RESSED....;...LO|
00001720: 41 44 5F 4E 4F 4D 49 4E  41 54 45 44 5F 46 49 4C  |AD_NOMINATED_FIL|
00001730: 45 20 28 31 29 10 83 28  2A 20 56 45 52 49 46 59  |E (1)..(* VERIFY|
00001740: 20 FB 2A 29 0D 10 84 89  0D 99 90 42 41 44 5F 52  | .*).......BAD_R|
00001750: 45 53 55 4C 54 0D 89 3B  0D 0D 87 46 52 4F 4D 5F  |ESULT..;...FROM_|
00001760: 4D 4F 44 45 4D 3B 0D 28  2A 2A 2A 2A 2A 2A 2A 2A  |MODEM;.(********|
00001770: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 29 0D 88 0D 10 82  |**********).....|
00001780: 81 28 32 29 3B 0D 10 82  46 52 4F 4D 5F 4D 4F 44  |.(2);...FROM_MOD|
00001790: 45 4D 20 3A 3D 20 A7 3B  0D 10 82 81 28 30 29 0D  |EM := .;....(0).|
000017A0: 89 3B 0D 0D 86 44 49 53  50 4C 41 59 5F 43 48 41  |.;...DISPLAY_CHA|
000017B0: 52 20 28 58 29 3B 0D 28  2A 2A 2A 2A 2A 2A 2A 2A  |R (X);.(********|
000017C0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
000017D0: 2A 29 0D 88 0D 10 82 58  20 3A 3D 20 58 20 8D 24  |*).....X := X .$|
000017E0: 37 46 3B 0D 0D 28 2A 20  D2 45 56 45 52 53 45 20  |7F;..(* .EVERSE |
000017F0: 55 50 50 45 52 2F 4C 4F  57 45 52 20 95 2A 29 0D  |UPPER/LOWER .*).|
00001800: 0D 10 82 92 28 58 20 3E  3D 20 24 36 31 29 20 8D  |....(X >= $61) .|
00001810: 0D 10 85 28 58 20 3C 3D  20 24 37 41 29 20 93 0D  |...(X <= $7A) ..|
00001820: 10 85 58 20 3A 3D 20 58  20 2D 20 24 32 30 0D 10  |..X := X - $20..|
00001830: 82 94 0D 10 82 92 28 58  20 3E 3D 20 22 41 22 29  |......(X >= "A")|
00001840: 20 8D 0D 10 85 28 58 20  3C 3D 20 22 5A 22 29 20  | ....(X <= "Z") |
00001850: 93 0D 10 85 58 20 3A 3D  20 58 20 2B 20 24 38 30  |....X := X + $80|
00001860: 3B 0D 0D 28 2A 20 CF 4E  4C 59 20 44 49 53 50 4C  |;..(* .NLY DISPL|
00001870: 41 59 20 92 50 52 49 4E  54 41 42 4C 45 20 2A 29  |AY .PRINTABLE *)|
00001880: 0D 0D 10 82 92 28 58 20  3E 3D 20 22 20 22 29 0D  |.....(X >= " ").|
00001890: 10 82 8A 28 58 20 3D 20  43 52 29 20 93 0D 10 85  |...(X = CR) ....|
000018A0: 9D 28 AB 28 58 29 29 0D  10 82 94 0D 10 84 92 58  |.(.(X))........X|
000018B0: 20 3D 20 42 53 20 93 0D  10 86 9D 28 AB 28 31 35  | = BS .....(.(15|
000018C0: 37 29 29 0D 10 84 94 0D  10 86 92 58 20 3D 20 46  |7))........X = F|
000018D0: 53 20 93 0D 10 88 9D 28  AB 28 32 39 29 29 0D 10  |S .....(.(29))..|
000018E0: 86 94 0D 10 88 92 58 20  3D 20 46 46 20 93 0D 10  |......X = FF ...|
000018F0: 8A 9D 28 AB 28 48 4F 4D  45 29 29 0D 89 3B 0D 0D  |..(.(HOME))..;..|
00001900: 86 54 4F 5F 4D 4F 44 45  4D 20 28 58 29 3B 0D 28  |.TO_MODEM (X);.(|
00001910: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00001920: 2A 2A 2A 2A 29 0D 88 0D  10 82 AF 28 32 29 3B 0D  |****)......(2);.|
00001930: 10 82 9D 28 AB 28 58 29  29 3B 0D 10 82 AF 28 30  |...(.(X));....(0|
00001940: 29 0D 89 3B 0D 0D 87 43  41 4C 43 5F 43 52 43 4B  |)..;...CALC_CRCK|
00001950: 3B 0D 28 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |;.(*************|
00001960: 2A 2A 2A 2A 29 0D 88 0D  10 82 A2 5B 24 34 42 5D  |****)......[$4B]|
00001970: 20 3A 3D 20 A9 28 42 55  46 46 45 52 20 5B 31 33  | := .(BUFFER [13|
00001980: 30 5D 29 3B 0D 10 82 A2  5B 24 34 43 5D 20 3A 3D  |0]);....[$4C] :=|
00001990: 20 A9 28 42 55 46 46 45  52 20 5B 31 33 30 5D 29  | .(BUFFER [130])|
000019A0: 20 8F 38 3B 0D 10 82 A2  5B 59 52 45 47 5D 20 3A  | .8;....[YREG] :|
000019B0: 3D 20 31 33 30 3B 0D 10  82 9F 28 A9 28 52 4F 55  |= 130;....(.(ROU|
000019C0: 54 49 4E 45 5B 33 35 5D  29 29 3B 0D 10 82 43 41  |TINE[35]));...CA|
000019D0: 4C 43 5F 43 52 43 4B 20  3A 3D 20 91 5B 24 35 45  |LC_CRCK := .[$5E|
000019E0: 5D 20 8D 24 46 46 46 46  0D 89 3B 0D 0D 86 43 41  |] .$FFFF..;...CA|
000019F0: 4C 43 5F 46 49 4C 45 5F  43 52 43 4B 3B 0D 28 2A  |LC_FILE_CRCK;.(*|
00001A00: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00001A10: 2A 2A 2A 2A 2A 2A 29 0D  88 0D 10 82 A2 5B 24 34  |******)......[$4|
00001A20: 42 5D 20 3A 3D 20 53 54  41 52 54 5F 41 44 44 52  |B] := START_ADDR|
00001A30: 45 53 53 3B 0D 10 82 A2  5B 24 34 43 5D 20 3A 3D  |ESS;....[$4C] :=|
00001A40: 20 53 54 41 52 54 5F 41  44 44 52 45 53 53 20 8F  | START_ADDRESS .|
00001A50: 38 3B 0D 10 82 A2 5B 24  35 45 5D 20 3A 3D 20 46  |8;....[$5E] := F|
00001A60: 49 4E 41 4C 5F 41 44 44  52 45 53 53 3B 0D 10 82  |INAL_ADDRESS;...|
00001A70: A2 5B 24 35 46 5D 20 3A  3D 20 46 49 4E 41 4C 5F  |.[$5F] := FINAL_|
00001A80: 41 44 44 52 45 53 53 20  8F 38 3B 0D 10 82 9F 28  |ADDRESS .8;....(|
00001A90: A9 28 52 4F 55 54 49 4E  45 5B 32 30 5D 29 29 3B  |.(ROUTINE[20]));|
00001AA0: 0D 10 82 FF 28 22 C3 59  43 4C 49 43 20 52 45 44  |....(".YCLIC RED|
00001AB0: 55 4E 44 41 4E 43 59 20  43 48 45 43 4B 20 3D 20  |UNDANCY CHECK = |
00001AC0: 24 22 2C 0D 10 8B AC 28  91 5B 24 34 42 5D 20 8D  |$",....(.[$4B] .|
00001AD0: 24 46 46 46 46 29 29 3B  0D 89 3B 0D 0D 87 4E 45  |$FFFF));..;...NE|
00001AE0: 58 54 5F 43 48 41 52 20  28 50 45 52 49 4F 44 29  |XT_CHAR (PERIOD)|
00001AF0: 3B 0D 28 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |;.(*************|
00001B00: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 29 0D 82  |*************)..|
00001B10: 43 4F 55 4E 54 5F 50 45  52 5F 53 45 43 4F 4E 44  |COUNT_PER_SECOND|
00001B20: 20 3D 20 31 34 35 3B 0D  83 43 48 20 3A 20 A1 3B  | = 145;..CH : .;|
00001B30: 0D 10 84 43 4F 55 4E 54  45 52 20 3A 20 FE 3B 0D  |...COUNTER : .;.|
00001B40: 88 0D 43 4F 55 4E 54 45  52 20 3A 3D 20 50 45 52  |..COUNTER := PER|
00001B50: 49 4F 44 20 2A 20 43 4F  55 4E 54 5F 50 45 52 5F  |IOD * COUNT_PER_|
00001B60: 53 45 43 4F 4E 44 3B 0D  98 0D 10 82 43 48 20 3A  |SECOND;.....CH :|
00001B70: 3D 20 46 52 4F 4D 5F 4D  4F 44 45 4D 3B 0D 10 82  |= FROM_MODEM;...|
00001B80: 43 4F 55 4E 54 45 52 20  3A 3D 20 43 4F 55 4E 54  |COUNTER := COUNT|
00001B90: 45 52 20 2D 20 31 0D 99  28 90 28 A2 5B 52 53 32  |ER - 1..(.(.[RS2|
00001BA0: 33 32 5F 53 54 41 54 55  53 5D 20 8D 45 4D 50 54  |32_STATUS] .EMPT|
00001BB0: 59 29 29 0D 10 83 8A 28  43 4F 55 4E 54 45 52 20  |Y))....(COUNTER |
00001BC0: 3C 3D 20 30 29 3B 0D 54  49 4D 45 4F 55 54 20 3A  |<= 0);.TIMEOUT :|
00001BD0: 3D 20 A2 5B 52 53 32 33  32 5F 53 54 41 54 55 53  |= .[RS232_STATUS|
00001BE0: 5D 20 8D 45 4D 50 54 59  20 3C 3E 20 30 3B 0D 4E  |] .EMPTY <> 0;.N|
00001BF0: 45 58 54 5F 43 48 41 52  20 3A 3D 20 43 48 0D 89  |EXT_CHAR := CH..|
00001C00: 3B 0D 0D 86 50 55 52 47  45 3B 0D 28 2A 2A 2A 2A  |;...PURGE;.(****|
00001C10: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 29 0D 83 44 49 53  |**********)..DIS|
00001C20: 43 41 52 44 20 3A 20 A1  3B 0D 88 0D 98 0D 10 82  |CARD : .;.......|
00001C30: 44 49 53 43 41 52 44 20  3A 3D 20 4E 45 58 54 5F  |DISCARD := NEXT_|
00001C40: 43 48 41 52 20 28 31 29  0D 99 54 49 4D 45 4F 55  |CHAR (1)..TIMEOU|
00001C50: 54 0D 89 3B 0D 0D 86 53  45 4E 44 5F 4E 41 4B 3B  |T..;...SEND_NAK;|
00001C60: 0D 28 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |.(**************|
00001C70: 2A 2A 2A 29 0D 88 0D 10  82 50 55 52 47 45 3B 0D  |***).....PURGE;.|
00001C80: 10 82 92 28 45 58 50 45  43 54 45 44 5F 42 4C 4F  |...(EXPECTED_BLO|
00001C90: 43 4B 20 3D 20 31 29 0D  10 82 8D 57 41 4E 54 5F  |CK = 1)....WANT_|
00001CA0: 43 52 43 4B 20 93 0D 10  84 54 4F 5F 4D 4F 44 45  |CRCK ....TO_MODE|
00001CB0: 4D 20 28 22 43 22 29 0D  10 82 94 0D 10 84 54 4F  |M ("C").......TO|
00001CC0: 5F 4D 4F 44 45 4D 20 28  4E 41 4B 29 0D 89 3B 0D  |_MODEM (NAK)..;.|
00001CD0: 0D 86 43 41 4E 43 45 4C  5F 54 52 41 4E 53 3B 0D  |..CANCEL_TRANS;.|
00001CE0: 28 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 29  |(**************)|
00001CF0: 0D 88 0D 10 82 50 55 52  47 45 3B 0D 10 82 54 4F  |.....PURGE;...TO|
00001D00: 5F 4D 4F 44 45 4D 20 28  43 41 4E 29 3B 0D 10 82  |_MODEM (CAN);...|
00001D10: 54 4F 5F 4D 4F 44 45 4D  20 28 43 41 4E 29 3B 0D  |TO_MODEM (CAN);.|
00001D20: 10 82 54 4F 5F 4D 4F 44  45 4D 20 28 43 41 4E 29  |..TO_MODEM (CAN)|
00001D30: 3B 0D 10 82 53 54 41 52  54 5F 45 52 52 4F 52 3B  |;...START_ERROR;|
00001D40: 0D 10 82 FF 28 22 D4 52  41 4E 53 4D 49 53 53 49  |....(".RANSMISSI|
00001D50: 4F 4E 20 41 42 4F 52 54  45 44 22 29 0D 89 3B 0D  |ON ABORTED")..;.|
00001D60: 0D 86 52 45 43 45 49 56  45 5F 42 4C 4F 43 4B 3B  |..RECEIVE_BLOCK;|
00001D70: 0D 28 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |.(**************|
00001D80: 2A 2A 2A 2A 2A 2A 2A 2A  29 0D 83 43 48 20 3A 20  |********)..CH : |
00001D90: A1 3B 0D 10 84 49 20 3A  20 FE 3B 0D 88 0D 42 41  |.;...I : .;...BA|
00001DA0: 44 5F 42 4C 4F 43 4B 20  3A 3D 20 46 41 4C 53 45  |D_BLOCK := FALSE|
00001DB0: 3B 0D 42 4C 4F 43 4B 5F  4E 4F 20 3A 3D 20 4E 45  |;.BLOCK_NO := NE|
00001DC0: 58 54 5F 43 48 41 52 20  28 31 29 3B 0D 92 90 54  |XT_CHAR (1);...T|
00001DD0: 49 4D 45 4F 55 54 20 93  0D 10 82 49 4E 56 45 52  |IMEOUT ....INVER|
00001DE0: 53 45 5F 42 4C 4F 43 4B  5F 4E 4F 20 3A 3D 20 4E  |SE_BLOCK_NO := N|
00001DF0: 45 58 54 5F 43 48 41 52  20 28 31 29 3B 0D 92 28  |EXT_CHAR (1);..(|
00001E00: 42 4C 4F 43 4B 5F 4E 4F  20 2B 20 49 4E 56 45 52  |BLOCK_NO + INVER|
00001E10: 53 45 5F 42 4C 4F 43 4B  5F 4E 4F 20 2B 20 31 29  |SE_BLOCK_NO + 1)|
00001E20: 0D 10 83 8D 24 46 46 20  3C 3E 20 30 20 93 0D 10  |....$FF <> 0 ...|
00001E30: 82 88 0D 10 82 53 54 41  52 54 5F 45 52 52 4F 52  |.....START_ERROR|
00001E40: 3B 0D 10 82 9D 28 22 C2  41 44 20 42 4C 4F 43 4B  |;....(".AD BLOCK|
00001E50: 20 4E 4F 2E 22 29 3B 0D  10 82 45 52 52 4F 52 3B  | NO.");...ERROR;|
00001E60: 0D 10 82 53 45 4E 44 5F  4E 41 4B 3B 0D 10 82 42  |...SEND_NAK;...B|
00001E70: 41 44 5F 42 4C 4F 43 4B  20 3A 3D 20 54 52 55 45  |AD_BLOCK := TRUE|
00001E80: 0D 10 82 89 0D 94 0D 10  82 92 28 28 42 4C 4F 43  |..........((BLOC|
00001E90: 4B 5F 4E 4F 20 3D 20 4C  41 53 54 5F 42 4C 4F 43  |K_NO = LAST_BLOC|
00001EA0: 4B 20 8D 24 46 46 29 0D  10 82 8D 28 45 58 50 45  |K .$FF)....(EXPE|
00001EB0: 43 54 45 44 5F 42 4C 4F  43 4B 20 3C 3E 20 31 29  |CTED_BLOCK <> 1)|
00001EC0: 29 0D 10 82 8A 28 42 4C  4F 43 4B 5F 4E 4F 20 3D  |)....(BLOCK_NO =|
00001ED0: 20 45 58 50 45 43 54 45  44 5F 42 4C 4F 43 4B 20  | EXPECTED_BLOCK |
00001EE0: 8D 24 46 46 29 20 93 0D  10 84 53 45 51 5F 45 52  |.$FF) ....SEQ_ER|
00001EF0: 52 4F 52 20 3A 3D 20 46  41 4C 53 45 0D 10 82 94  |ROR := FALSE....|
00001F00: 0D 10 84 88 0D 10 84 53  45 51 5F 45 52 52 4F 52  |.......SEQ_ERROR|
00001F10: 20 3A 3D 20 54 52 55 45  3B 0D 10 84 53 54 41 52  | := TRUE;...STAR|
00001F20: 54 5F 45 52 52 4F 52 3B  0D 10 84 FF 28 22 C2 4C  |T_ERROR;....(".L|
00001F30: 4F 43 4B 20 4E 55 4D 42  45 52 20 53 45 51 55 45  |OCK NUMBER SEQUE|
00001F40: 4E 43 45 20 45 52 52 4F  52 22 29 0D 10 84 89 3B  |NCE ERROR")....;|
00001F50: 0D 92 90 28 42 41 44 5F  42 4C 4F 43 4B 20 8A 53  |...(BAD_BLOCK .S|
00001F60: 45 51 5F 45 52 52 4F 52  29 20 93 0D 10 82 88 0D  |EQ_ERROR) ......|
00001F70: 10 82 53 55 4D 5F 43 48  45 43 4B 20 3A 3D 20 30  |..SUM_CHECK := 0|
00001F80: 3B 0D 10 82 9A 49 20 3A  3D 20 30 20 9B 31 32 37  |;....I := 0 .127|
00001F90: 20 97 0D 10 84 92 90 54  49 4D 45 4F 55 54 20 93  | ......TIMEOUT .|
00001FA0: 0D 10 86 88 0D 10 86 43  48 20 3A 3D 20 4E 45 58  |.......CH := NEX|
00001FB0: 54 5F 43 48 41 52 20 28  31 29 3B 0D 10 86 42 55  |T_CHAR (1);...BU|
00001FC0: 46 46 45 52 20 5B 49 5D  20 3A 3D 20 43 48 3B 0D  |FFER [I] := CH;.|
00001FD0: 10 86 53 55 4D 5F 43 48  45 43 4B 20 3A 3D 20 53  |..SUM_CHECK := S|
00001FE0: 55 4D 5F 43 48 45 43 4B  20 2B 20 43 48 0D 10 86  |UM_CHECK + CH...|
00001FF0: 89 3B 0D 10 82 92 90 54  49 4D 45 4F 55 54 20 93  |.;.....TIMEOUT .|
00002000: 0D 10 84 53 55 4D 5F 43  48 45 43 4B 5F 52 45 43  |...SUM_CHECK_REC|
00002010: 45 49 56 45 44 20 3A 3D  20 4E 45 58 54 5F 43 48  |EIVED := NEXT_CH|
00002020: 41 52 20 28 31 29 3B 0D  10 82 92 57 41 4E 54 5F  |AR (1);....WANT_|
00002030: 43 52 43 4B 20 93 0D 10  82 92 90 54 49 4D 45 4F  |CRCK ......TIMEO|
00002040: 55 54 20 93 0D 10 84 53  55 4D 5F 43 48 45 43 4B  |UT ....SUM_CHECK|
00002050: 5F 52 45 43 45 49 56 45  44 5F 32 20 3A 3D 20 4E  |_RECEIVED_2 := N|
00002060: 45 58 54 5F 43 48 41 52  20 28 31 29 3B 0D 10 82  |EXT_CHAR (1);...|
00002070: 92 54 49 4D 45 4F 55 54  20 93 0D 10 82 88 0D 10  |.TIMEOUT .......|
00002080: 84 53 54 41 52 54 5F 45  52 52 4F 52 3B 0D 10 84  |.START_ERROR;...|
00002090: 9D 28 22 D4 49 4D 45 4F  55 54 20 4F 4E 20 52 45  |.(".IMEOUT ON RE|
000020A0: 43 45 49 56 45 22 29 3B  0D 10 84 45 52 52 4F 52  |CEIVE");...ERROR|
000020B0: 3B 0D 10 84 53 45 4E 44  5F 4E 41 4B 0D 10 84 89  |;...SEND_NAK....|
000020C0: 0D 10 82 94 0D 10 84 88  0D 10 84 42 41 44 5F 53  |...........BAD_S|
000020D0: 55 4D 5F 43 48 45 43 4B  20 3A 3D 20 54 52 55 45  |UM_CHECK := TRUE|
000020E0: 3B 0D 10 84 92 57 41 4E  54 5F 43 52 43 4B 20 93  |;....WANT_CRCK .|
000020F0: 0D 10 86 92 43 41 4C 43  5F 43 52 43 4B 20 3D 20  |....CALC_CRCK = |
00002100: 53 55 4D 5F 43 48 45 43  4B 5F 52 45 43 45 49 56  |SUM_CHECK_RECEIV|
00002110: 45 44 20 8E 38 0D 10 86  8A 53 55 4D 5F 43 48 45  |ED .8....SUM_CHE|
00002120: 43 4B 5F 52 45 43 45 49  56 45 44 5F 32 20 93 0D  |CK_RECEIVED_2 ..|
00002130: 10 88 42 41 44 5F 53 55  4D 5F 43 48 45 43 4B 20  |..BAD_SUM_CHECK |
00002140: 3A 3D 20 46 41 4C 53 45  0D 10 86 94 0D 10 84 94  |:= FALSE........|
00002150: 0D 10 86 92 53 55 4D 5F  43 48 45 43 4B 20 8D 24  |....SUM_CHECK .$|
00002160: 46 46 20 3D 0D 10 89 53  55 4D 5F 43 48 45 43 4B  |FF =...SUM_CHECK|
00002170: 5F 52 45 43 45 49 56 45  44 20 93 0D 10 88 42 41  |_RECEIVED ....BA|
00002180: 44 5F 53 55 4D 5F 43 48  45 43 4B 20 3A 3D 20 46  |D_SUM_CHECK := F|
00002190: 41 4C 53 45 3B 0D 10 84  92 42 41 44 5F 53 55 4D  |ALSE;....BAD_SUM|
000021A0: 5F 43 48 45 43 4B 20 93  0D 10 86 88 0D 10 86 53  |_CHECK ........S|
000021B0: 54 41 52 54 5F 45 52 52  4F 52 3B 0D 10 86 9D 28  |TART_ERROR;....(|
000021C0: 22 D3 55 4D 20 43 48 45  43 4B 20 45 52 52 4F 52  |".UM CHECK ERROR|
000021D0: 22 29 3B 0D 10 86 45 52  52 4F 52 3B 0D 10 86 53  |");...ERROR;...S|
000021E0: 45 4E 44 5F 4E 41 4B 0D  10 86 89 0D 10 84 94 0D  |END_NAK.........|
000021F0: 10 86 88 0D 10 86 54 4F  5F 4D 4F 44 45 4D 20 28  |......TO_MODEM (|
00002200: 41 43 4B 29 3B 0D 10 86  52 45 54 52 49 45 53 20  |ACK);...RETRIES |
00002210: 3A 3D 20 30 3B 0D 10 86  92 42 4C 4F 43 4B 5F 4E  |:= 0;....BLOCK_N|
00002220: 4F 20 3D 20 45 58 50 45  43 54 45 44 5F 42 4C 4F  |O = EXPECTED_BLO|
00002230: 43 4B 20 8D 24 46 46 20  93 0D 10 88 88 0D 10 88  |CK .$FF ........|
00002240: 4C 41 53 54 5F 42 4C 4F  43 4B 20 3A 3D 20 45 58  |LAST_BLOCK := EX|
00002250: 50 45 43 54 45 44 5F 42  4C 4F 43 4B 3B 0D 10 88  |PECTED_BLOCK;...|
00002260: 45 58 50 45 43 54 45 44  5F 42 4C 4F 43 4B 20 3A  |EXPECTED_BLOCK :|
00002270: 3D 20 45 58 50 45 43 54  45 44 5F 42 4C 4F 43 4B  |= EXPECTED_BLOCK|
00002280: 20 2B 20 31 3B 0D 10 88  92 44 49 53 50 4C 41 59  | + 1;....DISPLAY|
00002290: 5F 46 49 4C 45 20 93 0D  10 8A 9A 49 20 3A 3D 20  |_FILE .....I := |
000022A0: 30 20 9B 31 32 37 20 97  0D 10 8C 44 49 53 50 4C  |0 .127 ....DISPL|
000022B0: 41 59 5F 43 48 41 52 20  28 42 55 46 46 45 52 20  |AY_CHAR (BUFFER |
000022C0: 5B 49 5D 29 0D 10 88 94  0D 10 8A 9D 28 22 2A 22  |[I])........("*"|
000022D0: 29 3B 0D 10 88 9A 49 20  3A 3D 20 30 20 9B 31 32  |);....I := 0 .12|
000022E0: 37 20 97 0D 10 8A 88 0D  10 8A A2 5B 4E 45 58 54  |7 .........[NEXT|
000022F0: 5F 41 44 44 52 45 53 53  5D 20 3A 3D 0D 10 8E 42  |_ADDRESS] :=...B|
00002300: 55 46 46 45 52 20 5B 49  5D 3B 0D 10 8A 4E 45 58  |UFFER [I];...NEX|
00002310: 54 5F 41 44 44 52 45 53  53 20 3A 3D 20 4E 45 58  |T_ADDRESS := NEX|
00002320: 54 5F 41 44 44 52 45 53  53 20 2B 20 31 0D 10 8A  |T_ADDRESS + 1...|
00002330: 89 0D 10 88 89 0D 10 86  89 0D 10 84 89 0D 10 82  |................|
00002340: 89 0D 89 3B 0D 0D 86 52  45 43 45 49 56 45 5F 42  |...;...RECEIVE_B|
00002350: 4C 4F 43 4B 5F 43 41 4E  5F 45 4F 54 3B 0D 28 2A  |LOCK_CAN_EOT;.(*|
00002360: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00002370: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 29 0D 83  |*************)..|
00002380: 43 48 20 3A 20 A1 3B 0D  88 0D 98 0D 10 82 43 48  |CH : .;.......CH|
00002390: 20 3A 3D 20 4E 45 58 54  5F 43 48 41 52 20 28 31  | := NEXT_CHAR (1|
000023A0: 30 29 0D 99 28 43 48 20  3D 20 53 4F 48 29 0D 10  |0)..(CH = SOH)..|
000023B0: 83 8A 28 43 48 20 3D 20  45 4F 54 29 0D 10 83 8A  |..(CH = EOT)....|
000023C0: 28 43 48 20 3D 20 43 41  4E 29 0D 10 83 8A 54 49  |(CH = CAN)....TI|
000023D0: 4D 45 4F 55 54 3B 0D 92  54 49 4D 45 4F 55 54 20  |MEOUT;..TIMEOUT |
000023E0: 93 0D 10 82 88 0D 10 82  53 54 41 52 54 5F 45 52  |........START_ER|
000023F0: 52 4F 52 3B 0D 10 82 9D  28 22 D4 49 4D 45 4F 55  |ROR;....(".IMEOU|
00002400: 54 20 41 54 20 53 54 41  52 54 22 29 3B 0D 10 82  |T AT START");...|
00002410: 45 52 52 4F 52 3B 0D 10  82 53 45 4E 44 5F 4E 41  |ERROR;...SEND_NA|
00002420: 4B 0D 10 82 89 0D 94 0D  10 82 95 43 48 20 85 0D  |K..........CH ..|
00002430: 10 84 53 4F 48 3A 20 52  45 43 45 49 56 45 5F 42  |..SOH: RECEIVE_B|
00002440: 4C 4F 43 4B 3B 0D 10 84  43 41 4E 3A 20 88 0D 10  |LOCK;...CAN: ...|
00002450: 89 53 54 41 52 54 5F 45  52 52 4F 52 3B 0D 10 89  |.START_ERROR;...|
00002460: FF 28 22 D3 45 4E 44 45  52 20 C3 C1 CE 43 45 4C  |.(".ENDER ...CEL|
00002470: 4C 45 44 20 54 52 41 4E  53 4D 49 53 53 49 4F 4E  |LED TRANSMISSION|
00002480: 22 29 3B 0D 10 89 41 42  4F 52 54 20 3A 3D 20 54  |");...ABORT := T|
00002490: 52 55 45 0D 10 89 89 3B  0D 10 84 45 4F 54 3A 20  |RUE....;...EOT: |
000024A0: 88 0D 10 89 45 4F 46 20  3A 3D 20 54 52 55 45 3B  |....EOF := TRUE;|
000024B0: 0D 10 89 54 4F 5F 4D 4F  44 45 4D 20 28 41 43 4B  |...TO_MODEM (ACK|
000024C0: 29 0D 10 89 89 0D 10 82  89 10 82 28 2A 20 85 95  |)..........(* ..|
000024D0: 2A 29 0D 89 3B 0D 0D 86  52 45 43 45 49 56 45 5F  |*)..;...RECEIVE_|
000024E0: 46 49 4C 45 3B 0D 28 2A  2A 2A 2A 2A 2A 2A 2A 2A  |FILE;.(*********|
000024F0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 29 0D 88 0D  |************)...|
00002500: FF 3B 0D E2 28 43 48 41  52 43 4F 4C 4F 55 52 2C  |.;..(CHARCOLOUR,|
00002510: 20 4C 49 47 48 54 5F 47  52 45 45 4E 29 3B 0D FF  | LIGHT_GREEN);..|
00002520: 28 22 2D 2D 2D 2D 2D 20  D2 45 43 45 49 56 45 20  |("----- .ECEIVE |
00002530: 41 20 C6 49 4C 45 20 2D  2D 2D 2D 2D 22 29 3B 0D  |A .ILE -----");.|
00002540: E2 28 43 48 41 52 43 4F  4C 4F 55 52 2C 20 47 52  |.(CHARCOLOUR, GR|
00002550: 45 45 4E 29 3B 0D FF 3B  0D 45 58 50 45 43 54 45  |EEN);..;.EXPECTE|
00002560: 44 5F 42 4C 4F 43 4B 20  3A 3D 20 31 3B 0D 4C 41  |D_BLOCK := 1;.LA|
00002570: 53 54 5F 42 4C 4F 43 4B  20 3A 3D 20 30 3B 0D 52  |ST_BLOCK := 0;.R|
00002580: 45 54 52 49 45 53 20 3A  3D 20 30 3B 0D 41 42 4F  |ETRIES := 0;.ABO|
00002590: 52 54 20 3A 3D 20 46 41  4C 53 45 3B 0D 45 4F 46  |RT := FALSE;.EOF|
000025A0: 20 3A 3D 20 46 41 4C 53  45 3B 0D 53 45 51 5F 45  | := FALSE;.SEQ_E|
000025B0: 52 52 4F 52 20 3A 3D 20  46 41 4C 53 45 3B 0D 4E  |RROR := FALSE;.N|
000025C0: 45 58 54 5F 41 44 44 52  45 53 53 20 3A 3D 20 53  |EXT_ADDRESS := S|
000025D0: 54 41 52 54 5F 41 44 44  52 45 53 53 3B 0D 57 41  |TART_ADDRESS;.WA|
000025E0: 4E 54 5F 43 52 43 4B 20  3A 3D 20 52 45 43 45 49  |NT_CRCK := RECEI|
000025F0: 56 45 5F 57 49 54 48 5F  43 52 43 4B 3B 0D 53 45  |VE_WITH_CRCK;.SE|
00002600: 4E 44 5F 4E 41 4B 3B 10  82 28 2A 20 81 54 48 49  |ND_NAK;..(* .THI|
00002610: 4E 47 53 20 47 4F 49 4E  47 20 2A 29 0D 98 0D 10  |NGS GOING *)....|
00002620: 82 52 45 43 45 49 56 45  5F 42 4C 4F 43 4B 5F 43  |.RECEIVE_BLOCK_C|
00002630: 41 4E 5F 45 4F 54 0D 99  41 42 4F 52 54 20 8A 45  |AN_EOT..ABORT .E|
00002640: 4F 46 20 8A 53 45 51 5F  45 52 52 4F 52 3B 0D FF  |OF .SEQ_ERROR;..|
00002650: 3B 0D 92 45 4F 46 20 93  0D 10 82 88 0D 10 82 46  |;..EOF ........F|
00002660: 49 4E 41 4C 5F 41 44 44  52 45 53 53 20 3A 3D 20  |INAL_ADDRESS := |
00002670: 4E 45 58 54 5F 41 44 44  52 45 53 53 3B 0D 10 82  |NEXT_ADDRESS;...|
00002680: FF 3B 0D 10 82 FF 28 22  C6 49 4C 45 20 52 45 43  |.;....(".ILE REC|
00002690: 45 49 56 45 44 20 53 55  43 43 45 53 53 46 55 4C  |EIVED SUCCESSFUL|
000026A0: 4C 59 22 29 3B 0D 10 82  43 41 4C 43 5F 46 49 4C  |LY");...CALC_FIL|
000026B0: 45 5F 43 52 43 4B 3B 0D  10 82 53 41 56 45 5F 4E  |E_CRCK;...SAVE_N|
000026C0: 4F 4D 49 4E 41 54 45 44  5F 46 49 4C 45 0D 10 82  |OMINATED_FILE...|
000026D0: 89 0D 94 0D 10 82 88 0D  10 82 46 49 4E 41 4C 5F  |..........FINAL_|
000026E0: 41 44 44 52 45 53 53 20  3A 3D 20 53 54 41 52 54  |ADDRESS := START|
000026F0: 5F 41 44 44 52 45 53 53  3B 0D 10 82 43 41 4E 43  |_ADDRESS;...CANC|
00002700: 45 4C 5F 54 52 41 4E 53  10 82 28 2A 20 53 54 4F  |EL_TRANS..(* STO|
00002710: 50 20 4F 54 48 45 52 20  89 2A 29 0D 10 82 89 0D  |P OTHER .*).....|
00002720: 89 3B 0D 0D 86 41 4E 41  4C 59 53 45 5F 46 49 4C  |.;...ANALYSE_FIL|
00002730: 45 3B 0D 28 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |E;.(************|
00002740: 2A 2A 2A 2A 2A 2A 2A 2A  2A 29 0D 83 0D 10 84 46  |*********).....F|
00002750: 49 4C 45 5F 4C 45 4E 47  54 48 2C 20 42 4C 4F 43  |ILE_LENGTH, BLOC|
00002760: 4B 53 2C 20 4D 49 4E 53  20 3A 20 FE 3B 0D 88 0D  |KS, MINS : .;...|
00002770: FF 3B 0D 4C 4F 41 44 5F  4E 4F 4D 49 4E 41 54 45  |.;.LOAD_NOMINATE|
00002780: 44 5F 46 49 4C 45 20 28  30 29 3B 0D 46 49 4E 41  |D_FILE (0);.FINA|
00002790: 4C 5F 41 44 44 52 45 53  53 20 3A 3D 20 A2 5B 58  |L_ADDRESS := .[X|
000027A0: 52 45 47 5D 20 2B 20 A2  5B 59 52 45 47 5D 20 8E  |REG] + .[YREG] .|
000027B0: 38 3B 0D 46 49 4C 45 5F  4C 45 4E 47 54 48 20 3A  |8;.FILE_LENGTH :|
000027C0: 3D 20 46 49 4E 41 4C 5F  41 44 44 52 45 53 53 20  |= FINAL_ADDRESS |
000027D0: 2D 20 53 54 41 52 54 5F  41 44 44 52 45 53 53 3B  |- START_ADDRESS;|
000027E0: 0D 96 46 49 4C 45 5F 4C  45 4E 47 54 48 20 8D 24  |..FILE_LENGTH .$|
000027F0: 37 46 20 3C 3E 20 30 20  97 0D 10 82 88 0D 10 82  |7F <> 0 ........|
00002800: 46 49 4C 45 5F 4C 45 4E  47 54 48 20 3A 3D 20 46  |FILE_LENGTH := F|
00002810: 49 4C 45 5F 4C 45 4E 47  54 48 20 2B 20 31 3B 0D  |ILE_LENGTH + 1;.|
00002820: 10 82 A2 5B 46 49 4E 41  4C 5F 41 44 44 52 45 53  |...[FINAL_ADDRES|
00002830: 53 5D 20 3A 3D 20 43 54  52 4C 5A 3B 0D 10 82 46  |S] := CTRLZ;...F|
00002840: 49 4E 41 4C 5F 41 44 44  52 45 53 53 20 3A 3D 20  |INAL_ADDRESS := |
00002850: 46 49 4E 41 4C 5F 41 44  44 52 45 53 53 20 2B 20  |FINAL_ADDRESS + |
00002860: 31 0D 10 82 89 3B 0D 42  4C 4F 43 4B 53 20 3A 3D  |1....;.BLOCKS :=|
00002870: 20 28 46 49 4E 41 4C 5F  41 44 44 52 45 53 53 20  | (FINAL_ADDRESS |
00002880: 2D 20 53 54 41 52 54 5F  41 44 44 52 45 53 53 29  |- START_ADDRESS)|
00002890: 0D 10 8A 2F 20 31 32 38  3B 0D 4D 49 4E 53 20 3A  |.../ 128;.MINS :|
000028A0: 3D 20 42 4C 4F 43 4B 53  20 2A 20 35 36 31 20 2F  |= BLOCKS * 561 /|
000028B0: 20 36 30 30 3B 0D FF 28  42 4C 4F 43 4B 53 2C 20  | 600;..(BLOCKS, |
000028C0: 22 20 42 4C 4F 43 4B 53  2C 20 20 22 2C 0D 10 89  |" BLOCKS,  ",...|
000028D0: 42 4C 4F 43 4B 53 20 2A  20 31 30 20 2F 20 38 30  |BLOCKS * 10 / 80|
000028E0: 2C 0D 10 89 22 2E 22 2C  0D 10 89 42 4C 4F 43 4B  |,...".",...BLOCK|
000028F0: 53 20 2A 20 31 30 20 2F  20 38 20 8C 31 30 2C 0D  |S * 10 / 8 .10,.|
00002900: 10 89 22 20 CB 22 29 3B  0D 43 41 4C 43 5F 46 49  |.." .");.CALC_FI|
00002910: 4C 45 5F 43 52 43 4B 3B  0D FF 28 22 D4 52 41 4E  |LE_CRCK;..(".RAN|
00002920: 53 4D 49 53 53 49 4F 4E  20 54 49 4D 45 3A 20 22  |SMISSION TIME: "|
00002930: 2C 0D 10 89 4D 49 4E 53  20 2F 20 31 30 2C 20 22  |,...MINS / 10, "|
00002940: 2E 22 2C 0D 10 89 4D 49  4E 53 20 8C 31 30 2C 0D  |.",...MINS .10,.|
00002950: 10 89 22 20 4D 49 4E 55  54 45 53 2E 22 29 0D 89  |.." MINUTES.")..|
00002960: 3B 0D 0D 86 50 52 4F 43  45 53 53 5F 43 41 4E 3B  |;...PROCESS_CAN;|
00002970: 0D 28 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |.(**************|
00002980: 2A 2A 2A 2A 2A 29 0D 88  0D 10 82 53 54 41 52 54  |*****).....START|
00002990: 5F 45 52 52 4F 52 3B 0D  10 82 FF 28 22 D2 45 43  |_ERROR;....(".EC|
000029A0: 45 49 56 45 52 20 C3 C1  CE 43 45 4C 4C 45 44 20  |EIVER ...CELLED |
000029B0: 54 52 41 4E 53 4D 49 53  53 49 4F 4E 22 29 3B 0D  |TRANSMISSION");.|
000029C0: 10 82 E2 28 43 48 41 52  43 4F 4C 4F 55 52 2C 20  |...(CHARCOLOUR, |
000029D0: 57 48 49 54 45 29 3B 0D  10 82 41 42 4F 52 54 20  |WHITE);...ABORT |
000029E0: 3A 3D 20 54 52 55 45 0D  89 3B 0D 0D 86 54 52 41  |:= TRUE..;...TRA|
000029F0: 4E 53 4D 49 54 5F 42 4C  4F 43 4B 3B 0D 28 2A 2A  |NSMIT_BLOCK;.(**|
00002A00: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00002A10: 2A 2A 2A 2A 2A 29 0D 83  43 48 20 3A 20 A1 3B 0D  |*****)..CH : .;.|
00002A20: 10 84 44 49 53 43 41 52  44 2C 0D 10 84 49 20 3A  |..DISCARD,...I :|
00002A30: 20 FE 3B 0D 0D 86 47 45  54 5F 41 43 4B 3B 0D 28  | .;...GET_ACK;.(|
00002A40: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00002A50: 29 0D 88 0D 10 82 43 48  20 3A 3D 20 4E 45 58 54  |).....CH := NEXT|
00002A60: 5F 43 48 41 52 20 28 31  30 29 3B 10 82 28 2A 20  |_CHAR (10);..(* |
00002A70: AA 9A 41 43 4B 20 2A 29  0D 10 82 92 54 49 4D 45  |..ACK *)....TIME|
00002A80: 4F 55 54 20 93 0D 10 84  88 0D 10 84 53 54 41 52  |OUT ........STAR|
00002A90: 54 5F 45 52 52 4F 52 3B  0D 10 84 9D 28 22 D4 49  |T_ERROR;....(".I|
00002AA0: 4D 45 4F 55 54 20 4F 4E  20 C1 C3 CB 22 29 3B 0D  |MEOUT ON ...");.|
00002AB0: 10 84 45 52 52 4F 52 0D  10 84 89 0D 10 82 94 0D  |..ERROR.........|
00002AC0: 10 82 92 43 48 20 3D 20  43 41 4E 20 93 0D 10 84  |...CH = CAN ....|
00002AD0: 50 52 4F 43 45 53 53 5F  43 41 4E 0D 10 82 94 0D  |PROCESS_CAN.....|
00002AE0: 10 82 92 43 48 20 3C 3E  20 41 43 4B 20 93 0D 10  |...CH <> ACK ...|
00002AF0: 84 88 0D 10 84 53 54 41  52 54 5F 45 52 52 4F 52  |.....START_ERROR|
00002B00: 3B 0D 10 84 9D 28 22 C7  4F 54 20 22 2C 43 48 2C  |;....(".OT ",CH,|
00002B10: 22 20 46 4F 52 20 C1 C3  CB 22 29 3B 0D 10 84 45  |" FOR ...");...E|
00002B20: 52 52 4F 52 0D 10 84 89  0D 89 3B 10 82 28 2A 20  |RROR......;..(* |
00002B30: 85 47 45 54 5F 41 43 4B  20 2A 29 0D 0D 88 0D 53  |.GET_ACK *)....S|
00002B40: 55 4D 5F 43 48 45 43 4B  20 3A 3D 20 30 3B 0D 9A  |UM_CHECK := 0;..|
00002B50: 49 20 3A 3D 20 30 20 9B  31 32 37 20 97 0D 10 82  |I := 0 .127 ....|
00002B60: 88 0D 10 82 43 48 20 3A  3D 20 A2 5B 4E 45 58 54  |....CH := .[NEXT|
00002B70: 5F 41 44 44 52 45 53 53  5D 3B 0D 10 82 4E 45 58  |_ADDRESS];...NEX|
00002B80: 54 5F 41 44 44 52 45 53  53 20 3A 3D 20 4E 45 58  |T_ADDRESS := NEX|
00002B90: 54 5F 41 44 44 52 45 53  53 20 2B 20 31 3B 0D 10  |T_ADDRESS + 1;..|
00002BA0: 82 53 55 4D 5F 43 48 45  43 4B 20 3A 3D 20 53 55  |.SUM_CHECK := SU|
00002BB0: 4D 5F 43 48 45 43 4B 20  2B 20 43 48 3B 0D 10 82  |M_CHECK + CH;...|
00002BC0: 42 55 46 46 45 52 20 5B  49 5D 20 3A 3D 20 43 48  |BUFFER [I] := CH|
00002BD0: 0D 10 82 89 3B 0D 92 44  49 53 50 4C 41 59 5F 46  |....;..DISPLAY_F|
00002BE0: 49 4C 45 20 93 0D 9A 49  20 3A 3D 20 30 20 9B 31  |ILE ...I := 0 .1|
00002BF0: 32 37 20 97 0D 10 82 44  49 53 50 4C 41 59 5F 43  |27 ....DISPLAY_C|
00002C00: 48 41 52 20 28 42 55 46  46 45 52 20 5B 49 5D 29  |HAR (BUFFER [I])|
00002C10: 0D 94 0D 10 82 9D 28 22  2A 22 29 3B 0D 92 57 41  |......("*");..WA|
00002C20: 4E 54 5F 43 52 43 4B 20  93 0D 10 82 88 0D 10 82  |NT_CRCK ........|
00002C30: 53 55 4D 5F 43 48 45 43  4B 5F 32 20 3A 3D 20 43  |SUM_CHECK_2 := C|
00002C40: 41 4C 43 5F 43 52 43 4B  3B 0D 10 82 53 55 4D 5F  |ALC_CRCK;...SUM_|
00002C50: 43 48 45 43 4B 20 3A 3D  20 53 55 4D 5F 43 48 45  |CHECK := SUM_CHE|
00002C60: 43 4B 5F 32 20 8F 38 3B  0D 10 82 53 55 4D 5F 43  |CK_2 .8;...SUM_C|
00002C70: 48 45 43 4B 5F 32 20 3A  3D 20 53 55 4D 5F 43 48  |HECK_2 := SUM_CH|
00002C80: 45 43 4B 5F 32 20 8D 24  46 46 0D 10 82 89 3B 0D  |ECK_2 .$FF....;.|
00002C90: 52 45 54 52 49 45 53 20  3A 3D 20 30 3B 0D 49 4E  |RETRIES := 0;.IN|
00002CA0: 56 45 52 53 45 5F 42 4C  4F 43 4B 5F 4E 4F 20 3A  |VERSE_BLOCK_NO :|
00002CB0: 3D 20 42 4C 4F 43 4B 5F  4E 4F 20 A4 24 46 46 3B  |= BLOCK_NO .$FF;|
00002CC0: 0D 45 58 50 45 43 54 45  44 5F 42 4C 4F 43 4B 20  |.EXPECTED_BLOCK |
00002CD0: 3A 3D 20 42 4C 4F 43 4B  5F 4E 4F 3B 0D 98 0D 10  |:= BLOCK_NO;....|
00002CE0: 82 54 4F 5F 4D 4F 44 45  4D 20 28 53 4F 48 29 3B  |.TO_MODEM (SOH);|
00002CF0: 10 82 28 2A 20 53 54 41  52 54 20 42 4C 4F 43 4B  |..(* START BLOCK|
00002D00: 20 2A 29 0D 10 82 54 4F  5F 4D 4F 44 45 4D 20 28  | *)...TO_MODEM (|
00002D10: 42 4C 4F 43 4B 5F 4E 4F  29 3B 0D 10 82 54 4F 5F  |BLOCK_NO);...TO_|
00002D20: 4D 4F 44 45 4D 20 28 49  4E 56 45 52 53 45 5F 42  |MODEM (INVERSE_B|
00002D30: 4C 4F 43 4B 5F 4E 4F 29  3B 0D 10 82 9A 49 20 3A  |LOCK_NO);....I :|
00002D40: 3D 20 30 20 9B 31 32 37  20 97 0D 10 84 88 0D 10  |= 0 .127 .......|
00002D50: 84 44 49 53 43 41 52 44  20 3A 3D 20 46 52 4F 4D  |.DISCARD := FROM|
00002D60: 5F 4D 4F 44 45 4D 3B 10  82 28 2A 20 49 47 4E 4F  |_MODEM;..(* IGNO|
00002D70: 52 45 20 41 4E 59 20 53  50 55 52 49 4F 55 53 20  |RE ANY SPURIOUS |
00002D80: 47 4C 49 54 43 48 45 53  20 2A 29 0D 10 84 54 4F  |GLITCHES *)...TO|
00002D90: 5F 4D 4F 44 45 4D 20 28  42 55 46 46 45 52 5B 49  |_MODEM (BUFFER[I|
00002DA0: 5D 29 0D 10 84 89 3B 0D  10 82 54 4F 5F 4D 4F 44  |])....;...TO_MOD|
00002DB0: 45 4D 20 28 53 55 4D 5F  43 48 45 43 4B 29 3B 0D  |EM (SUM_CHECK);.|
00002DC0: 10 82 92 57 41 4E 54 5F  43 52 43 4B 20 93 0D 10  |...WANT_CRCK ...|
00002DD0: 84 54 4F 5F 4D 4F 44 45  4D 20 28 53 55 4D 5F 43  |.TO_MODEM (SUM_C|
00002DE0: 48 45 43 4B 5F 32 29 3B  0D 10 82 47 45 54 5F 41  |HECK_2);...GET_A|
00002DF0: 43 4B 0D 99 41 42 4F 52  54 20 8A 28 28 90 54 49  |CK..ABORT .((.TI|
00002E00: 4D 45 4F 55 54 29 20 8D  28 43 48 20 3D 20 41 43  |MEOUT) .(CH = AC|
00002E10: 4B 29 29 3B 0D 92 4E 45  58 54 5F 41 44 44 52 45  |K));..NEXT_ADDRE|
00002E20: 53 53 20 3E 3D 20 46 49  4E 41 4C 5F 41 44 44 52  |SS >= FINAL_ADDR|
00002E30: 45 53 53 20 93 0D 92 90  41 42 4F 52 54 20 93 0D  |ESS ....ABORT ..|
00002E40: 10 82 88 0D 10 82 52 45  54 52 49 45 53 20 3A 3D  |......RETRIES :=|
00002E50: 20 30 3B 0D 10 82 45 58  50 45 43 54 45 44 5F 42  | 0;...EXPECTED_B|
00002E60: 4C 4F 43 4B 20 3A 3D 20  2D 31 3B 0D 10 82 98 0D  |LOCK := -1;.....|
00002E70: 10 84 54 4F 5F 4D 4F 44  45 4D 20 28 45 4F 54 29  |..TO_MODEM (EOT)|
00002E80: 3B 0D 10 84 47 45 54 5F  41 43 4B 0D 10 82 99 41  |;...GET_ACK....A|
00002E90: 42 4F 52 54 20 8A 28 28  90 54 49 4D 45 4F 55 54  |BORT .((.TIMEOUT|
00002EA0: 29 20 8D 28 43 48 20 3D  20 41 43 4B 29 29 3B 0D  |) .(CH = ACK));.|
00002EB0: 10 82 92 90 41 42 4F 52  54 20 93 0D 10 84 45 4F  |....ABORT ....EO|
00002EC0: 46 20 3A 3D 20 54 52 55  45 0D 10 82 89 3B 0D 42  |F := TRUE....;.B|
00002ED0: 4C 4F 43 4B 5F 4E 4F 20  3A 3D 20 42 4C 4F 43 4B  |LOCK_NO := BLOCK|
00002EE0: 5F 4E 4F 20 2B 20 31 0D  89 3B 0D 0D 86 53 45 4E  |_NO + 1..;...SEN|
00002EF0: 44 5F 46 49 4C 45 3B 0D  28 2A 2A 2A 2A 2A 2A 2A  |D_FILE;.(*******|
00002F00: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 29 0D 83 43 48  |***********)..CH|
00002F10: 20 3A 20 A1 3B 0D 88 0D  FF 3B 0D E2 28 43 48 41  | : .;....;..(CHA|
00002F20: 52 43 4F 4C 4F 55 52 2C  20 4C 49 47 48 54 5F 47  |RCOLOUR, LIGHT_G|
00002F30: 52 45 45 4E 29 3B 0D FF  28 22 2D 2D 2D 2D 2D 20  |REEN);..("----- |
00002F40: D3 45 4E 44 20 41 20 C6  49 4C 45 20 2D 2D 2D 2D  |.END A .ILE ----|
00002F50: 2D 22 29 3B 0D E2 28 43  48 41 52 43 4F 4C 4F 55  |-");..(CHARCOLOU|
00002F60: 52 2C 20 47 52 45 45 4E  29 3B 0D 41 4E 41 4C 59  |R, GREEN);.ANALY|
00002F70: 53 45 5F 46 49 4C 45 3B  0D 4E 45 58 54 5F 41 44  |SE_FILE;.NEXT_AD|
00002F80: 44 52 45 53 53 20 3A 3D  20 53 54 41 52 54 5F 41  |DRESS := START_A|
00002F90: 44 44 52 45 53 53 3B 0D  42 4C 4F 43 4B 5F 4E 4F  |DDRESS;.BLOCK_NO|
00002FA0: 20 3A 3D 20 31 3B 0D 45  58 50 45 43 54 45 44 5F  | := 1;.EXPECTED_|
00002FB0: 42 4C 4F 43 4B 20 3A 3D  20 31 3B 0D 41 42 4F 52  |BLOCK := 1;.ABOR|
00002FC0: 54 20 3A 3D 20 46 41 4C  53 45 3B 0D 45 4F 46 20  |T := FALSE;.EOF |
00002FD0: 3A 3D 20 46 41 4C 53 45  3B 0D 52 45 54 52 49 45  |:= FALSE;.RETRIE|
00002FE0: 53 20 3A 3D 20 30 3B 0D  50 55 52 47 45 3B 10 82  |S := 0;.PURGE;..|
00002FF0: 28 2A 20 45 4D 50 54 59  20 42 55 46 46 45 52 20  |(* EMPTY BUFFER |
00003000: 2A 29 0D FF 3B 20 FF 3B  0D FF 28 22 C1 57 41 49  |*)..; .;..(".WAI|
00003010: 54 49 4E 47 20 49 4E 49  54 49 41 4C 20 CE C1 CB  |TING INITIAL ...|
00003020: 22 29 3B 0D 98 0D 10 82  43 48 20 3A 3D 20 4E 45  |");.....CH := NE|
00003030: 58 54 5F 43 48 41 52 20  28 36 30 29 3B 10 82 28  |XT_CHAR (60);..(|
00003040: 2A 20 AA 41 20 4D 49 4E  55 54 45 20 2A 29 0D 10  |* .A MINUTE *)..|
00003050: 82 92 54 49 4D 45 4F 55  54 20 93 0D 10 84 88 0D  |..TIMEOUT ......|
00003060: 10 84 53 54 41 52 54 5F  45 52 52 4F 52 3B 0D 10  |..START_ERROR;..|
00003070: 84 FF 28 22 CE 4F 20 52  45 53 50 4F 4E 53 45 20  |..(".O RESPONSE |
00003080: 46 52 4F 4D 20 4F 54 48  45 52 20 45 4E 44 22 29  |FROM OTHER END")|
00003090: 0D 10 84 89 0D 10 82 94  0D 10 84 88 0D 10 84 92  |................|
000030A0: 43 48 20 3D 20 4E 41 4B  20 93 0D 10 86 57 41 4E  |CH = NAK ....WAN|
000030B0: 54 5F 43 52 43 4B 20 3A  3D 20 46 41 4C 53 45 0D  |T_CRCK := FALSE.|
000030C0: 10 84 94 0D 10 86 92 43  48 20 3D 20 22 43 22 20  |.......CH = "C" |
000030D0: 93 0D 10 88 57 41 4E 54  5F 43 52 43 4B 20 3A 3D  |....WANT_CRCK :=|
000030E0: 20 54 52 55 45 0D 10 86  94 0D 10 88 92 43 48 20  | TRUE........CH |
000030F0: 3D 20 43 41 4E 20 93 0D  10 8A 50 52 4F 43 45 53  |= CAN ....PROCES|
00003100: 53 5F 43 41 4E 0D 10 88  94 0D 10 8A 88 0D 10 8A  |S_CAN...........|
00003110: 53 54 41 52 54 5F 45 52  52 4F 52 3B 0D 10 8A 9D  |START_ERROR;....|
00003120: 28 22 C7 4F 54 20 22 2C  43 48 2C 22 20 46 4F 52  |(".OT ",CH," FOR|
00003130: 20 CE C1 CB 22 29 3B 0D  10 8A 45 52 52 4F 52 0D  | ...");...ERROR.|
00003140: 10 8A 89 0D 10 84 89 0D  99 28 43 48 20 3D 20 4E  |.........(CH = N|
00003150: 41 4B 29 20 8A 28 43 48  20 3D 20 22 43 22 29 0D  |AK) .(CH = "C").|
00003160: 10 83 8A 54 49 4D 45 4F  55 54 20 8A 41 42 4F 52  |...TIMEOUT .ABOR|
00003170: 54 3B 0D 92 90 28 54 49  4D 45 4F 55 54 20 8A 41  |T;...(TIMEOUT .A|
00003180: 42 4F 52 54 29 20 93 0D  10 82 98 0D 10 84 54 52  |BORT) ........TR|
00003190: 41 4E 53 4D 49 54 5F 42  4C 4F 43 4B 0D 10 82 99  |ANSMIT_BLOCK....|
000031A0: 41 42 4F 52 54 20 8A 45  4F 46 3B 0D 92 45 4F 46  |ABORT .EOF;..EOF|
000031B0: 20 93 0D 10 82 88 0D 10  82 FF 3B 0D 10 82 FF 28  | .........;....(|
000031C0: 22 C6 49 4C 45 20 54 52  41 4E 53 4D 49 54 54 45  |".ILE TRANSMITTE|
000031D0: 44 20 53 55 43 43 45 53  53 46 55 4C 4C 59 22 29  |D SUCCESSFULLY")|
000031E0: 0D 10 82 89 0D 94 0D 10  82 43 41 4E 43 45 4C 5F  |.........CANCEL_|
000031F0: 54 52 41 4E 53 10 82 28  2A 20 53 54 4F 50 20 4F  |TRANS..(* STOP O|
00003200: 54 48 45 52 20 89 2A 29  0D 89 3B 0D 86 53 41 56  |THER .*)..;..SAV|
00003210: 45 5F 49 4E 5F 4D 45 4D  4F 52 59 20 28 58 29 3B  |E_IN_MEMORY (X);|
00003220: 0D 28 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |.(**************|
00003230: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 29 0D 88  |*************)..|
00003240: 0D 92 46 49 4E 41 4C 5F  41 44 44 52 45 53 53 20  |..FINAL_ADDRESS |
00003250: 3D 20 24 37 43 30 30 20  93 0D 10 82 88 0D 10 82  |= $7C00 ........|
00003260: FF 3B 0D 10 82 FF 3B 0D  10 82 53 54 41 52 54 5F  |.;....;...START_|
00003270: 45 52 52 4F 52 3B 0D 10  82 FF 28 22 2A 2A 2A 2A  |ERROR;....("****|
00003280: 2A 2A 20 CD 45 4D 4F 52  59 20 C2 55 46 46 45 52  |** .EMORY .UFFER|
00003290: 20 C1 4C 4D 4F 53 54 20  C6 55 4C 4C 20 2A 2A 2A  | .LMOST .ULL ***|
000032A0: 2A 2A 2A 22 29 3B 0D 10  82 FF 3B 0D 10 82 FF 3B  |***");....;....;|
000032B0: 0D 10 82 E2 28 43 48 41  52 43 4F 4C 4F 55 52 2C  |....(CHARCOLOUR,|
000032C0: 20 57 48 49 54 45 29 0D  10 82 89 3B 0D 92 46 49  | WHITE)....;..FI|
000032D0: 4E 41 4C 5F 41 44 44 52  45 53 53 20 3C 20 24 38  |NAL_ADDRESS < $8|
000032E0: 30 30 30 20 93 0D 10 82  88 0D 10 82 A2 5B 46 49  |000 .........[FI|
000032F0: 4E 41 4C 5F 41 44 44 52  45 53 53 5D 20 3A 3D 20  |NAL_ADDRESS] := |
00003300: 58 3B 0D 10 82 46 49 4E  41 4C 5F 41 44 44 52 45  |X;...FINAL_ADDRE|
00003310: 53 53 20 3A 3D 20 46 49  4E 41 4C 5F 41 44 44 52  |SS := FINAL_ADDR|
00003320: 45 53 53 20 2B 20 31 0D  10 82 89 3B 0D 89 3B 0D  |ESS + 1....;..;.|
00003330: 0D 86 54 45 52 4D 49 4E  41 4C 5F 4D 4F 44 45 20  |..TERMINAL_MODE |
00003340: 28 48 41 4C 46 5F 44 55  50 4C 45 58 29 3B 0D 28  |(HALF_DUPLEX);.(|
00003350: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00003360: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
00003370: 2A 2A 2A 2A 29 0D 82 41  43 54 49 56 45 20 3D 20  |****)..ACTIVE = |
00003380: 37 3B 0D 83 49 4E 50 55  54 20 3A 20 A1 3B 0D 10  |7;..INPUT : .;..|
00003390: 84 58 20 3A 20 FE 3B 0D  88 0D 4C 41 53 54 5F 54  |.X : .;...LAST_T|
000033A0: 45 52 4D 49 4E 41 4C 5F  4D 4F 44 45 20 3A 3D 20  |ERMINAL_MODE := |
000033B0: 43 4F 4D 4D 41 4E 44 3B  0D E2 28 43 48 41 52 43  |COMMAND;..(CHARC|
000033C0: 4F 4C 4F 55 52 2C 20 47  52 45 45 4E 29 3B 0D FF  |OLOUR, GREEN);..|
000033D0: 3B 0D E2 28 43 48 41 52  43 4F 4C 4F 55 52 2C 20  |;..(CHARCOLOUR, |
000033E0: 4C 49 47 48 54 5F 47 52  45 45 4E 29 3B 0D 9D 28  |LIGHT_GREEN);..(|
000033F0: 22 D4 45 52 4D 49 4E 41  4C 20 CD 4F 44 45 20 2D  |".ERMINAL .ODE -|
00003400: 20 22 29 3B 0D 92 48 41  4C 46 5F 44 55 50 4C 45  | ");..HALF_DUPLE|
00003410: 58 20 93 0D 10 82 9D 28  22 C8 41 4C 46 22 29 0D  |X .....(".ALF").|
00003420: 94 0D 10 82 9D 28 22 C6  55 4C 4C 22 29 3B 0D FF  |.....(".ULL");..|
00003430: 28 22 20 44 55 50 4C 45  58 22 29 3B 0D FF 28 22  |(" DUPLEX");..("|
00003440: D0 52 45 53 53 20 3C C3  4F 4D 4D 4F 44 4F 52 45  |.RESS <.OMMODORE|
00003450: 3E 20 4B 45 59 20 46 4F  52 20 CD 41 49 4E 20 CD  |> KEY FOR .AIN .|
00003460: 45 4E 55 22 29 3B 0D FF  3B 0D E2 28 43 48 41 52  |ENU");..;..(CHAR|
00003470: 43 4F 4C 4F 55 52 2C 20  57 48 49 54 45 29 3B 0D  |COLOUR, WHITE);.|
00003480: DF 28 31 2C 20 41 43 54  49 56 45 2C 20 54 52 55  |.(1, ACTIVE, TRU|
00003490: 45 29 3B 0D 98 0D 10 82  58 20 3A 3D 20 E8 3B 0D  |E);.....X := .;.|
000034A0: 10 82 92 58 20 3E 20 34  30 20 93 0D 10 84 58 20  |...X > 40 ....X |
000034B0: 3A 3D 20 58 20 2D 20 34  30 3B 0D 10 82 E0 28 31  |:= X - 40;....(1|
000034C0: 2C 0D 10 84 58 20 2A 20  38 2C 0D 10 84 E9 2A 20  |,...X * 8,....* |
000034D0: 38 20 2B 20 34 32 29 3B  0D 10 82 49 4E 50 55 54  |8 + 42);...INPUT|
000034E0: 20 3A 3D 20 46 52 4F 4D  5F 4D 4F 44 45 4D 3B 0D  | := FROM_MODEM;.|
000034F0: 10 82 92 49 4E 50 55 54  20 3C 3E 20 30 20 93 0D  |...INPUT <> 0 ..|
00003500: 10 84 88 0D 10 84 44 49  53 50 4C 41 59 5F 43 48  |......DISPLAY_CH|
00003510: 41 52 20 28 49 4E 50 55  54 29 3B 0D 10 84 53 41  |AR (INPUT);...SA|
00003520: 56 45 5F 49 4E 5F 4D 45  4D 4F 52 59 20 28 49 4E  |VE_IN_MEMORY (IN|
00003530: 50 55 54 29 3B 0D 10 84  89 3B 0D 10 82 49 4E 50  |PUT);....;...INP|
00003540: 55 54 20 3A 3D 20 A7 3B  0D 10 82 92 49 4E 50 55  |UT := .;....INPU|
00003550: 54 20 3C 3E 20 30 20 93  0D 10 84 88 0D 10 84 92  |T <> 0 .........|
00003560: 28 49 4E 50 55 54 20 3E  3D 20 24 43 31 29 20 8D  |(INPUT >= $C1) .|
00003570: 0D 10 87 28 49 4E 50 55  54 20 3C 3D 20 24 44 41  |...(INPUT <= $DA|
00003580: 29 20 93 0D 10 86 49 4E  50 55 54 20 3A 3D 20 49  |) ....INPUT := I|
00003590: 4E 50 55 54 20 2D 20 24  36 30 3B 0D 10 84 92 49  |NPUT - $60;....I|
000035A0: 4E 50 55 54 20 3D 20 24  38 44 20 93 0D 10 87 49  |NPUT = $8D ....I|
000035B0: 4E 50 55 54 20 3A 3D 20  43 52 0D 10 85 94 0D 10  |NPUT := CR......|
000035C0: 87 92 28 49 4E 50 55 54  20 3D 20 24 39 44 29 0D  |..(INPUT = $9D).|
000035D0: 10 87 8A 28 49 4E 50 55  54 20 3D 20 24 31 34 29  |...(INPUT = $14)|
000035E0: 20 93 0D 10 89 49 4E 50  55 54 20 3A 3D 20 42 53  | ....INPUT := BS|
000035F0: 0D 10 87 94 0D 10 89 92  49 4E 50 55 54 20 3D 20  |........INPUT = |
00003600: 32 39 20 93 0D 10 8B 49  4E 50 55 54 20 3A 3D 20  |29 ....INPUT := |
00003610: 46 53 0D 10 89 94 0D 10  8B 92 49 4E 50 55 54 20  |FS........INPUT |
00003620: 3D 20 48 4F 4D 45 20 93  0D 10 8D 49 4E 50 55 54  |= HOME ....INPUT|
00003630: 20 3A 3D 20 46 46 3B 0D  0D 28 2A 20 D2 45 56 45  | := FF;..(* .EVE|
00003640: 52 53 45 20 55 50 50 45  52 2F 4C 4F 57 45 52 20  |RSE UPPER/LOWER |
00003650: 95 2A 29 0D 0D 10 84 92  28 49 4E 50 55 54 20 3E  |.*).....(INPUT >|
00003660: 3D 20 24 36 31 29 20 8D  0D 10 87 28 49 4E 50 55  |= $61) ....(INPU|
00003670: 54 20 3C 3D 20 24 37 41  29 20 93 0D 10 87 49 4E  |T <= $7A) ....IN|
00003680: 50 55 54 20 3A 3D 20 49  4E 50 55 54 20 2D 20 24  |PUT := INPUT - $|
00003690: 32 30 0D 10 84 94 0D 10  84 92 28 49 4E 50 55 54  |20........(INPUT|
000036A0: 20 3E 3D 20 22 41 22 29  20 8D 0D 10 87 28 49 4E  | >= "A") ....(IN|
000036B0: 50 55 54 20 3C 3D 20 22  5A 22 29 20 93 0D 10 87  |PUT <= "Z") ....|
000036C0: 49 4E 50 55 54 20 3A 3D  20 49 4E 50 55 54 20 2B  |INPUT := INPUT +|
000036D0: 20 24 32 30 3B 0D 10 84  54 4F 5F 4D 4F 44 45 4D  | $20;...TO_MODEM|
000036E0: 20 28 49 4E 50 55 54 29  3B 0D 10 84 92 48 41 4C  | (INPUT);....HAL|
000036F0: 46 5F 44 55 50 4C 45 58  20 93 0D 10 86 88 0D 10  |F_DUPLEX .......|
00003700: 86 53 41 56 45 5F 49 4E  5F 4D 45 4D 4F 52 59 20  |.SAVE_IN_MEMORY |
00003710: 28 49 4E 50 55 54 29 3B  0D 10 86 E2 28 43 48 41  |(INPUT);....(CHA|
00003720: 52 43 4F 4C 4F 55 52 2C  20 4C 49 47 48 54 5F 42  |RCOLOUR, LIGHT_B|
00003730: 4C 55 45 29 3B 0D 10 86  44 49 53 50 4C 41 59 5F  |LUE);...DISPLAY_|
00003740: 43 48 41 52 20 28 49 4E  50 55 54 29 3B 0D 10 86  |CHAR (INPUT);...|
00003750: E2 28 43 48 41 52 43 4F  4C 4F 55 52 2C 20 57 48  |.(CHARCOLOUR, WH|
00003760: 49 54 45 29 0D 10 86 89  0D 10 84 89 0D 99 43 4F  |ITE)..........CO|
00003770: 4D 4D 4F 44 4F 52 45 5F  4C 4F 47 4F 3B 0D DF 28  |MMODORE_LOGO;..(|
00003780: 31 2C 20 41 43 54 49 56  45 2C 20 46 41 4C 53 45  |1, ACTIVE, FALSE|
00003790: 29 0D 89 3B 0D 0D 86 54  59 50 45 5F 46 49 4C 45  |)..;...TYPE_FILE|
000037A0: 20 28 50 52 49 4E 54 49  54 29 3B 0D 28 2A 2A 2A  | (PRINTIT);.(***|
000037B0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 2A 2A 2A 2A 2A 2A 2A  |****************|
000037C0: 2A 2A 2A 2A 2A 2A 2A 2A  2A 29 0D 88 0D 4E 45 58  |*********)...NEX|
000037D0: 54 5F 41 44 44 52 45 53  53 20 3A 3D 20 53 54 41  |T_ADDRESS := STA|
000037E0: 52 54 5F 41 44 44 52 45  53 53 3B 0D FF 3B 0D FF  |RT_ADDRESS;..;..|
000037F0: 28 22 D0 52 45 53 53 20  3C C3 4F 4D 4D 4F 44 4F  |(".RESS <.OMMODO|
00003800: 52 45 3E 20 4B 45 59 20  54 4F 20 41 42 4F 52 54  |RE> KEY TO ABORT|
00003810: 20 4C 49 53 54 22 29 3B  0D FF 28 22 20 20 20 20  | LIST");..("    |
00003820: 20 20 3C D3 C8 C9 C6 D4  3E 20 20 20 20 20 4B 45  |  <.....>     KE|
00003830: 59 20 54 4F 20 50 41 55  53 45 20 4C 49 53 54 22  |Y TO PAUSE LIST"|
00003840: 29 3B 0D FF 3B 0D 92 50  52 49 4E 54 49 54 20 93  |);..;..PRINTIT .|
00003850: 0D 10 82 88 0D 10 82 FC  28 34 2C 20 50 52 49 4E  |........(4, PRIN|
00003860: 54 45 52 5F 43 48 41 4E  4E 45 4C 2C 0D 10 8B 50  |TER_CHANNEL,...P|
00003870: 52 49 4E 54 45 52 5F 53  45 43 5F 41 44 44 52 2C  |RINTER_SEC_ADDR,|
00003880: 0D 10 8B 22 20 22 29 3B  0D 28 2A 20 2A 2A 2A 20  |..." ");.(* *** |
00003890: 53 50 45 43 49 41 4C 20  50 52 49 4E 54 45 52 20  |SPECIAL PRINTER |
000038A0: 53 54 55 46 46 0D 10 87  47 4F 45 53 20 48 45 52  |STUFF...GOES HER|
000038B0: 45 20 2A 2A 2A 2A 10 83  2A 29 0D 10 82 AF 28 34  |E ****..*)....(4|
000038C0: 29 0D 10 82 89 3B 0D E2  28 43 48 41 52 43 4F 4C  |)....;..(CHARCOL|
000038D0: 4F 55 52 2C 20 4C 49 47  48 54 5F 47 52 45 45 4E  |OUR, LIGHT_GREEN|
000038E0: 29 3B 0D 96 28 4E 45 58  54 5F 41 44 44 52 45 53  |);..(NEXT_ADDRES|
000038F0: 53 20 3C 20 46 49 4E 41  4C 5F 41 44 44 52 45 53  |S < FINAL_ADDRES|
00003900: 53 29 0D 10 82 8D 90 43  4F 4D 4D 4F 44 4F 52 45  |S).....COMMODORE|
00003910: 5F 4C 4F 47 4F 20 97 0D  10 82 88 0D 10 82 98 0D  |_LOGO ..........|
00003920: 10 82 99 90 53 48 49 46  54 5F 4B 45 59 5F 50 52  |....SHIFT_KEY_PR|
00003930: 45 53 53 45 44 3B 0D 10  82 44 49 53 50 4C 41 59  |ESSED;...DISPLAY|
00003940: 5F 43 48 41 52 20 28 A2  5B 4E 45 58 54 5F 41 44  |_CHAR (.[NEXT_AD|
00003950: 44 52 45 53 53 5D 29 3B  0D 10 82 4E 45 58 54 5F  |DRESS]);...NEXT_|
00003960: 41 44 44 52 45 53 53 20  3A 3D 20 4E 45 58 54 5F  |ADDRESS := NEXT_|
00003970: 41 44 44 52 45 53 53 20  2B 20 31 0D 10 82 89 3B  |ADDRESS + 1....;|
00003980: 0D 92 50 52 49 4E 54 49  54 20 93 0D 10 82 88 0D  |..PRINTIT ......|
00003990: 10 82 AF 28 30 29 3B 0D  10 82 AE 28 34 29 0D 10  |...(0);....(4)..|
000039A0: 82 89 3B 0D FF 0D 89 3B  0D 0D 28 2A 20 2D 2D 2D  |..;....;..(* ---|
000039B0: 2D 2D 2D 2D 2D 20 CD C1  C9 CE 20 D0 D2 CF C7 D2  |----- .... .....|
000039C0: C1 CD 20 2D 2D 2D 2D 2D  2D 2D 2D 20 2A 29 0D 88  |.. -------- *)..|
000039D0: 0D 10 82 49 4E 49 54 3B  10 82 28 2A 20 52 45 41  |...INIT;..(* REA|
000039E0: 44 59 20 9A 43 52 43 4B  20 2A 29 0D 10 82 98 0D  |DY .CRCK *).....|
000039F0: 10 84 E2 28 43 48 41 52  43 4F 4C 4F 55 52 2C 20  |...(CHARCOLOUR, |
00003A00: 47 52 45 45 4E 29 3B 0D  10 84 95 43 4F 4D 4D 41  |GREEN);....COMMA|
00003A10: 4E 44 20 85 0D 10 85 22  41 22 3A 20 41 4E 41 4C  |ND ...."A": ANAL|
00003A20: 59 53 45 5F 46 49 4C 45  3B 0D 10 85 22 43 22 3A  |YSE_FILE;..."C":|
00003A30: 20 43 41 4E 43 45 4C 5F  54 52 41 4E 53 3B 0D 10  | CANCEL_TRANS;..|
00003A40: 85 22 45 22 3A 20 46 49  4E 41 4C 5F 41 44 44 52  |."E": FINAL_ADDR|
00003A50: 45 53 53 20 3A 3D 20 53  54 41 52 54 5F 41 44 44  |ESS := START_ADD|
00003A60: 52 45 53 53 3B 0D 10 85  22 46 22 3A 20 54 45 52  |RESS;..."F": TER|
00003A70: 4D 49 4E 41 4C 5F 4D 4F  44 45 20 28 46 41 4C 53  |MINAL_MODE (FALS|
00003A80: 45 29 3B 0D 10 85 22 48  22 3A 20 54 45 52 4D 49  |E);..."H": TERMI|
00003A90: 4E 41 4C 5F 4D 4F 44 45  20 28 54 52 55 45 29 3B  |NAL_MODE (TRUE);|
00003AA0: 0D 10 85 22 52 22 3A 20  52 45 43 45 49 56 45 5F  |..."R": RECEIVE_|
00003AB0: 46 49 4C 45 3B 0D 10 85  22 53 22 3A 20 53 45 4E  |FILE;..."S": SEN|
00003AC0: 44 5F 46 49 4C 45 3B 0D  10 85 22 50 22 3A 20 54  |D_FILE;..."P": T|
00003AD0: 59 50 45 5F 46 49 4C 45  20 28 54 52 55 45 29 3B  |YPE_FILE (TRUE);|
00003AE0: 0D 10 85 22 54 22 3A 20  54 59 50 45 5F 46 49 4C  |..."T": TYPE_FIL|
00003AF0: 45 20 28 46 41 4C 53 45  29 0D 10 84 89 3B 10 82  |E (FALSE)....;..|
00003B00: 28 2A 20 85 95 2A 29 0D  10 84 92 28 43 4F 4D 4D  |(* ..*)....(COMM|
00003B10: 41 4E 44 20 3D 20 22 53  22 29 0D 10 84 8A 28 43  |AND = "S")....(C|
00003B20: 4F 4D 4D 41 4E 44 20 3D  20 22 52 22 29 20 93 0D  |OMMAND = "R") ..|
00003B30: 10 86 43 4F 4D 4D 41 4E  44 20 3A 3D 20 4C 41 53  |..COMMAND := LAS|
00003B40: 54 5F 54 45 52 4D 49 4E  41 4C 5F 4D 4F 44 45 0D  |T_TERMINAL_MODE.|
00003B50: 10 84 94 0D 10 86 88 0D  10 86 E2 28 43 48 41 52  |...........(CHAR|
00003B60: 43 4F 4C 4F 55 52 2C 20  47 52 45 45 4E 29 3B 0D  |COLOUR, GREEN);.|
00003B70: 10 86 FF 28 AB 28 31 34  29 29 3B 10 82 28 2A 20  |...(.(14));..(* |
00003B80: 4C 4F 57 45 52 20 95 2A  29 0D 10 86 FF 28 22 3C  |LOWER .*)....("<|
00003B90: C1 3E 4E 41 4C 59 53 45  20 41 20 46 49 4C 45 22  |.>NALYSE A FILE"|
00003BA0: 29 3B 0D 10 86 FF 28 22  3C C3 3E 41 4E 43 45 4C  |);....("<.>ANCEL|
00003BB0: 20 54 52 41 4E 53 4D 49  53 53 49 4F 4E 22 29 3B  | TRANSMISSION");|
00003BC0: 0D 10 86 FF 28 22 3C C5  3E 52 41 53 45 20 4C 41  |....("<.>RASE LA|
00003BD0: 53 54 20 43 4F 4E 56 45  52 53 41 54 49 4F 4E 22  |ST CONVERSATION"|
00003BE0: 29 3B 0D 10 86 FF 28 22  3C C6 3E 55 4C 4C 20 44  |);....("<.>ULL D|
00003BF0: 55 50 4C 45 58 20 54 45  52 4D 49 4E 41 4C 22 29  |UPLEX TERMINAL")|
00003C00: 3B 0D 10 86 FF 28 22 3C  C8 3E 41 4C 46 20 44 55  |;....("<.>ALF DU|
00003C10: 50 4C 45 58 20 54 45 52  4D 49 4E 41 4C 22 29 3B  |PLEX TERMINAL");|
00003C20: 0D 10 86 FF 28 22 3C D0  3E 52 49 4E 54 20 4C 41  |....("<.>RINT LA|
00003C30: 53 54 20 46 49 4C 45 22  29 3B 0D 10 86 FF 28 22  |ST FILE");....("|
00003C40: 3C D2 3E 45 43 45 49 56  45 20 41 20 46 49 4C 45  |<.>ECEIVE A FILE|
00003C50: 22 29 3B 0D 10 86 FF 28  22 3C D3 3E 45 4E 44 20  |");....("<.>END |
00003C60: 41 20 46 49 4C 45 22 29  3B 0D 10 86 FF 28 22 3C  |A FILE");....("<|
00003C70: D4 3E 59 50 45 20 4C 41  53 54 20 46 49 4C 45 22  |.>YPE LAST FILE"|
00003C80: 29 3B 0D 10 86 FF 28 22  3C D1 3E 55 49 54 20 50  |);....("<.>UIT P|
00003C90: 52 4F 47 52 41 4D 22 29  3B 0D 10 86 FF 3B 0D 10  |ROGRAM");....;..|
00003CA0: 86 9D 28 22 C3 4F 4D 4D  41 4E 44 3F 20 3C 20 3E  |..(".OMMAND? < >|
00003CB0: 22 2C AB 28 31 35 37 29  2C AB 28 31 35 37 29 29  |",.(157),.(157))|
00003CC0: 3B 0D 10 86 E2 28 43 48  41 52 43 4F 4C 4F 55 52  |;....(CHARCOLOUR|
00003CD0: 2C 20 4C 49 47 48 54 5F  42 4C 55 45 29 3B 0D 10  |, LIGHT_BLUE);..|
00003CE0: 86 98 0D 10 88 9E 28 43  4F 4D 4D 41 4E 44 29 3B  |......(COMMAND);|
00003CF0: 0D 10 88 43 4F 4D 4D 41  4E 44 20 3A 3D 20 43 4F  |...COMMAND := CO|
00003D00: 4D 4D 41 4E 44 20 8D 24  37 46 0D 10 86 99 28 43  |MMAND .$7F....(C|
00003D10: 4F 4D 4D 41 4E 44 20 3D  20 22 46 22 29 0D 10 89  |OMMAND = "F")...|
00003D20: 8A 28 43 4F 4D 4D 41 4E  44 20 3D 20 22 53 22 29  |.(COMMAND = "S")|
00003D30: 0D 10 89 8A 28 43 4F 4D  4D 41 4E 44 20 3D 20 22  |....(COMMAND = "|
00003D40: 51 22 29 0D 10 89 8A 28  43 4F 4D 4D 41 4E 44 20  |Q")....(COMMAND |
00003D50: 3D 20 22 41 22 29 0D 10  89 8A 28 43 4F 4D 4D 41  |= "A")....(COMMA|
00003D60: 4E 44 20 3D 20 22 45 22  29 0D 10 89 8A 28 43 4F  |ND = "E")....(CO|
00003D70: 4D 4D 41 4E 44 20 3D 20  22 43 22 29 0D 10 89 8A  |MMAND = "C")....|
00003D80: 28 43 4F 4D 4D 41 4E 44  20 3D 20 22 48 22 29 0D  |(COMMAND = "H").|
00003D90: 10 89 8A 28 43 4F 4D 4D  41 4E 44 20 3D 20 22 54  |...(COMMAND = "T|
00003DA0: 22 29 0D 10 89 8A 28 43  4F 4D 4D 41 4E 44 20 3D  |")....(COMMAND =|
00003DB0: 20 22 50 22 29 0D 10 89  8A 28 43 4F 4D 4D 41 4E  | "P")....(COMMAN|
00003DC0: 44 20 3D 20 22 52 22 29  3B 0D 10 86 FF 28 AB 28  |D = "R");....(.(|
00003DD0: 43 4F 4D 4D 41 4E 44 29  29 0D 10 86 89 0D 10 82  |COMMAND)).......|
00003DE0: 99 43 4F 4D 4D 41 4E 44  20 3D 20 22 51 22 3B 0D  |.COMMAND = "Q";.|
00003DF0: 10 82 AE 28 32 29 0D 89  2E 0D 00 48 91           |...(2).....H.   |
.@(* 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;....P
RINTER_CHANNEL = 4;...PRINTER_SEC_ADDR =
 0;...DISPLAY_FILE = FALSE;...RECEIVE_WI
TH_CRCK = TRUE;...MAX_RETRIES = 6;...CHA
RCOLOUR = 10;...WHITE = 1;...GREEN = 5;.
..LIGHT_RED = 10;...LIGHT_GREEN = 13;...
LIGHT_BLUE = 14;...LIGHT_GREY = 15;....S
TART_ADDRESS = $1F00;...CASSETTE = 1;...
DISK = 8;...AREG = $2B2;...XREG = $2B3;.
..YREG = $2B4;...CC = $2B1;...SETLFS = $
FFBA;...SETNAM = $FFBD;....SOH = $1;...E
OT = $4;...ACK = $6;...NAK = $15;...CAN 
= $18;...RS232_STATUS = $297;...EMPTY = 
8;......COMMAND : .;....BUFFER : .[130] 
..;...NAME1, NAME2 : .[20] ..;...LAST_TE
RMINAL_MODE,...MEDIUM,...GOT_MEDIUM,...L
ENGTH,...BAD_RESULT,...NEXT_ADDRESS,...F
INAL_ADDRESS,...RETRIES,...EOF,...ABORT,
...BAD_BLOCK,...SEQ_ERROR,...BAD_SUM_CHE
CK,...TIMEOUT,...BLOCK_NO,...INVERSE_BLO
CK_NO,...EXPECTED_BLOCK,...LAST_BLOCK,..
.WANT_CRCK,...SUM_CHECK_RECEIVED,...SUM_
CHECK_RECEIVED_2,...SUM_CHECK,...SUM_CHE
CK_2..: .;...ROUTINE : .[35] ..;...COMMO
DORE_LOGO;.(**********************).....
COMMODORE_LOGO := .[653] .2 <> 0..;...SH
IFT_KEY_PRESSED;.(**********************
***).....SHIFT_KEY_PRESSED := .[653] .1 
<> 0..;...OPEN_RS232_FILE;.(************
************).....OPENIT = $FFC0;..NAME 
: .[1] ..;...(* FIRST SET UP THE FILE NA
ME...AS PER THE RS232 PARAMTERS *)....NA
ME [1] := 6;..(*..300 BAUD..*)...NAME [0
] := 0;..(*..3-LINE..*)....[$F8] := $C1;
 (* BUFFER *)....[$FA] := $C2; (* BUFFER
 *)....[AREG] := 2;....[XREG] := 2; (* R
S232 *)....[YREG] := 2;....(SETLFS);....
[AREG] := 2;....[XREG] := .(NAME[1]);...
.[YREG] := .(NAME[1]) .8;....(SETNAM);..
..(OPENIT)..;...INIT;.(*************)..C
OLOUR = 1;...POINT = 2;...BEHINDBK = 6;.
..I : .;...INSERT(X, Y, Z);.....ROUTINE 
[I] := X;...ROUTINE [I - 1] := Y;...ROUT
INE [I - 2] := Z;...I := I - 3..;...(* I
NIT *)....(.(HOME));....(CHARCOLOUR, LIG
HT_GREY);....[650] := 128;..(* ALL KEYS 
AUTO-.*)....("YAM-COMPATIBLE MODEM PROGR
AM FOR C64.");....("WRITTEN BY NICK GAMM
ON IN G-PASCAL.");....("VERSION 1.3  - P
UBLIC DOMAIN.");....("G-PASCAL IS PRODUC
ED BY GAMBIT GAMES -");....(" ENQUIRIES:
 GAMBIT GAMES, P.O. BOX 124,");....(" IV
ANHOE, VICTORIA 3079. AUSTRALIA.");....;
...I := 35;...(* CRCK ROUTINE .TRANSMISS
ION *)...INSERT($8500A9,$5F855E,$854BB1)
;...INSERT($08A207,$260726,$5F265E);...I
NSERT($A50C90,$10495F,$A55F85);...INSERT
($21495E,$CA5E85,$88E9D0);...INSERT($60E
0D0,0,0);...(* CRCK ROUTINE .FILE *)...I
NSERT($8500A9,$068505,$0506A8);...INSERT
($080626,$184BB1,$850565);...INSERT($902
805,$97490A,$A50585);...INSERT($A04906,$
E60685,$02D04B);...INSERT($A54CE6,$5EC54
B,$A5DBD0);...INSERT($5FC54C,$A5D5D0,$4B
8505);...INSERT($8506A5,$FF604C,0);...BU
FFER [128] := 0;...BUFFER [129] := 0;...
COMMAND := "F";....(32,...$FF,$FF,$FF,$F
F,$FF,$FF,$FF,$FF);....(1, POINT, 32,...
1, COLOUR, LIGHT_GREY,...1, BEHINDBK, TR
UE);...GOT_MEDIUM := FALSE;...FINAL_ADDR
ESS := START_ADDRESS;...OPEN_RS232_FILE.
.; (* .INIT *)...START_ERROR;.(*********
***********)......(CHARCOLOUR, LIGHT_RED
);......;...ERROR;.(**************)....E
XPECTED_BLOCK <> -1 .....(" ON BLOCK ",.
..EXPECTED_BLOCK)......(" ON EOT");..(" 
RETRY ", RETRIES);.RETRIES := RETRIES + 
1;..(CHARCOLOUR, GREEN);..RETRIES > MAX_
RETRIES ....ABORT := TRUE..;...GET_FILE_
NAME;.(**********************)..I, GOT_C
R : .;...CH : .;.....GOT_MEDIUM ........
.;....("<D>ISK OR <C>ASSETTE? ");....(CH
ARCOLOUR, LIGHT_BLUE);........(CH);...CH
 := CH .$7F....(CH = "D")....(CH = "C");
....(.(CH));....(CHARCOLOUR, GREEN);....
CH = "D" ........MEDIUM := DISK;....(15,
 DISK, 15, "I")...........MEDIUM := CASS
ETTE;...GOT_MEDIUM := TRUE....;......;..
..("FILE NAME? ");....(CHARCOLOUR, LIGHT
_BLUE);....(NAME1);....(CHARCOLOUR, GREE
N);...GOT_CR := FALSE;....I := 0 .20 ...
...GOT_CR ........NAME2 [20 - I] := NAME
1 [I];....NAME1 [I] = CR ........LENGTH 
:= I;...GOT_CR := TRUE..........LENGTH <
> 0..;...CHECK_RESULT;.(****************
*****)..READST = $FFB7;...I, ERROR_CODE 
: .;...RESULT : .[80] ..;.......[CC] .1 
....ERROR_CODE := .[AREG]..(* GOT ERROR 
*)............(READST);...ERROR_CODE := 
.[AREG] .$BF....;...BAD_RESULT := ERROR_
CODE;....MEDIUM = DISK .........(15);...
.(RESULT);....(0);...RESULT [80] := CR;.
...(RESULT [0] <> "0")....(RESULT [1] <>
 "0") ........BAD_RESULT := TRUE;...I :=
 -1;...START_ERROR;.......I := I + 1;...
.(.(RESULT [I]))....RESULT [I] = CR.....
...;....;....ERROR_CODE ........START_ER
ROR;....("FILE ERROR, CODE: ",...ERROR_C
ODE)....;....(CHARCOLOUR, GREEN);.....BA
D_RESULT .....("OK.")..;...LOAD_NOMINATE
D_FILE (FLAG);.(************************
***********)...LOAD_FILE;.(*************
*****).....LOADIT = $FFD5;.......[AREG] 
:= 1;....[XREG] := MEDIUM;....[YREG] := 
0; (* RELOCATE *)....(SETLFS);....[AREG]
 := LENGTH;....[XREG] := .(NAME2[20]);..
..[YREG] := .(NAME2[20]) .8;....(SETNAM)
;....[AREG] := FLAG;..(* ./VERIFY *)....
[XREG] := START_ADDRESS;....[YREG] := ST
ART_ADDRESS .8;....(LOADIT);...CHECK_RES
ULT..;..(***** START .: LOAD_NOMINATED_F
ILE ***)........FLAG = 0 . (* .*)...GET_
FILE_NAME;...LOAD_FILE..(BAD_RESULT = 0)
....(FLAG = 1)..;...SAVE_NOMINATED_FILE;
.(****************************)...SAVE_F
ILE;.(********************)..SAVEIT = $F
FD8;...REGISTER = $6A;......[AREG] := 1;
..(* FILE NO *)....[XREG] := MEDIUM;....
[YREG] := 0;....(SETLFS);....[AREG] := L
ENGTH;....[XREG] :=....(NAME2 [20]);....
[YREG] :=....(NAME2 [20]) .8;....(SETNAM
);....[REGISTER] := START_ADDRESS;....[R
EGISTER + 1] :=...START_ADDRESS .8;....[
AREG] := REGISTER;....[XREG] := FINAL_AD
DRESS;....[YREG] := FINAL_ADDRESS .8;...
.(SAVEIT);...CHECK_RESULT..;..(***** STA
RT .: SAVE_NOMINATED_FILE ***).......GET
_FILE_NAME;...SAVE_FILE;.....BAD_RESULT 
.........MEDIUM = CASSETTE .........;...
.("REWIND CASSETTE TO SAVE POINT FOR");.
...("VERIFICATION - PRESS <SHIFT> WHEN R
EADY.");.....SHIFT_KEY_PRESSED....;...LO
AD_NOMINATED_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 + $80
;..(* ONLY DISPLAY .PRINTABLE *).....(X 
>= " ")....(X = CR) .....(.(X))........X
 = BS .....(.(157))........X = FS .....(
.(29))........X = FF .....(.(HOME))..;..
.TO_MODEM (X);.(********************)...
...(2);....(.(X));....(0)..;...CALC_CRCK
;.(*****************)......[$4B] := .(BU
FFER [130]);....[$4C] := .(BUFFER [130])
 .8;....[YREG] := 130;....(.(ROUTINE[35]
));...CALC_CRCK := .[$5E] .$FFFF..;...CA
LC_FILE_CRCK;.(***********************).
.....[$4B] := START_ADDRESS;....[$4C] :=
 START_ADDRESS .8;....[$5E] := FINAL_ADD
RESS;....[$5F] := FINAL_ADDRESS .8;....(
.(ROUTINE[20]));....("CYCLIC REDUNDANCY 
CHECK = $",....(.[$4B] .$FFFF));..;...NE
XT_CHAR (PERIOD);.(*********************
*****)..COUNT_PER_SECOND = 145;..CH : .;
...COUNTER : .;...COUNTER := PERIOD * CO
UNT_PER_SECOND;.....CH := FROM_MODEM;...
COUNTER := COUNTER - 1..(.(.[RS232_STATU
S] .EMPTY))....(COUNTER <= 0);.TIMEOUT :
= .[RS232_STATUS] .EMPTY <> 0;.NEXT_CHAR
 := CH..;...PURGE;.(**************)..DIS
CARD : .;.......DISCARD := NEXT_CHAR (1)
..TIMEOUT..;...SEND_NAK;.(**************
***).....PURGE;....(EXPECTED_BLOCK = 1).
...WANT_CRCK ....TO_MODEM ("C").......TO
_MODEM (NAK)..;...CANCEL_TRANS;.(*******
*******).....PURGE;...TO_MODEM (CAN);...
TO_MODEM (CAN);...TO_MODEM (CAN);...STAR
T_ERROR;....("TRANSMISSION ABORTED")..;.
..RECEIVE_BLOCK;.(**********************
)..CH : .;...I : .;...BAD_BLOCK := FALSE
;.BLOCK_NO := NEXT_CHAR (1);...TIMEOUT .
...INVERSE_BLOCK_NO := NEXT_CHAR (1);..(
BLOCK_NO + INVERSE_BLOCK_NO + 1)....$FF 
<> 0 ........START_ERROR;....("BAD BLOCK
 NO.");...ERROR;...SEND_NAK;...BAD_BLOCK
 := TRUE..........((BLOCK_NO = LAST_BLOC
K .$FF)....(EXPECTED_BLOCK <> 1))....(BL
OCK_NO = EXPECTED_BLOCK .$FF) ....SEQ_ER
ROR := FALSE...........SEQ_ERROR := TRUE
;...START_ERROR;....("BLOCK NUMBER SEQUE
NCE ERROR")....;...(BAD_BLOCK .SEQ_ERROR
) ........SUM_CHECK := 0;....I := 0 .127
 ......TIMEOUT ........CH := NEXT_CHAR (
1);...BUFFER [I] := CH;...SUM_CHECK := S
UM_CHECK + CH....;.....TIMEOUT ....SUM_C
HECK_RECEIVED := NEXT_CHAR (1);....WANT_
CRCK ......TIMEOUT ....SUM_CHECK_RECEIVE
D_2 := NEXT_CHAR (1);....TIMEOUT .......
.START_ERROR;....("TIMEOUT ON RECEIVE");
...ERROR;...SEND_NAK...............BAD_S
UM_CHECK := TRUE;....WANT_CRCK .....CALC
_CRCK = SUM_CHECK_RECEIVED .8....SUM_CHE
CK_RECEIVED_2 ....BAD_SUM_CHECK := FALSE
............SUM_CHECK .$FF =...SUM_CHECK
_RECEIVED ....BAD_SUM_CHECK := FALSE;...
.BAD_SUM_CHECK ........START_ERROR;....(
"SUM CHECK ERROR");...ERROR;...SEND_NAK.
..............TO_MODEM (ACK);...RETRIES 
:= 0;....BLOCK_NO = EXPECTED_BLOCK .$FF 
........LAST_BLOCK := EXPECTED_BLOCK;...
EXPECTED_BLOCK := EXPECTED_BLOCK + 1;...
.DISPLAY_FILE .....I := 0 .127 ....DISPL
AY_CHAR (BUFFER [I])........("*");....I 
:= 0 .127 .........[NEXT_ADDRESS] :=...B
UFFER [I];...NEXT_ADDRESS := NEXT_ADDRES
S + 1......................;...RECEIVE_B
LOCK_CAN_EOT;.(*************************
*****)..CH : .;.......CH := NEXT_CHAR (1
0)..(CH = SOH)....(CH = EOT)....(CH = CA
N)....TIMEOUT;..TIMEOUT ........START_ER
ROR;....("TIMEOUT AT START");...ERROR;..
.SEND_NAK..........CH ....SOH: RECEIVE_B
LOCK;...CAN: ....START_ERROR;....("SENDE
R CANCELLED TRANSMISSION");...ABORT := T
RUE....;...EOT: ....EOF := TRUE;...TO_MO
DEM (ACK)..........(* ..*)..;...RECEIVE_
FILE;.(*********************)....;..(CHA
RCOLOUR, LIGHT_GREEN);..("----- RECEIVE 
A FILE -----");..(CHARCOLOUR, GREEN);..;
.EXPECTED_BLOCK := 1;.LAST_BLOCK := 0;.R
ETRIES := 0;.ABORT := FALSE;.EOF := FALS
E;.SEQ_ERROR := FALSE;.NEXT_ADDRESS := S
TART_ADDRESS;.WANT_CRCK := RECEIVE_WITH_
CRCK;.SEND_NAK;..(* .THINGS GOING *)....
.RECEIVE_BLOCK_CAN_EOT..ABORT .EOF .SEQ_
ERROR;..;..EOF ........FINAL_ADDRESS := 
NEXT_ADDRESS;....;....("FILE RECEIVED SU
CCESSFULLY");...CALC_FILE_CRCK;...SAVE_N
OMINATED_FILE.............FINAL_ADDRESS 
:= START_ADDRESS;...CANCEL_TRANS..(* STO
P OTHER .*)......;...ANALYSE_FILE;.(****
*****************).....FILE_LENGTH, BLOC
KS, MINS : .;....;.LOAD_NOMINATED_FILE (
0);.FINAL_ADDRESS := .[XREG] + .[YREG] .
8;.FILE_LENGTH := FINAL_ADDRESS - START_
ADDRESS;..FILE_LENGTH .$7F <> 0 ........
FILE_LENGTH := FILE_LENGTH + 1;....[FINA
L_ADDRESS] := CTRLZ;...FINAL_ADDRESS := 
FINAL_ADDRESS + 1....;.BLOCKS := (FINAL_
ADDRESS - START_ADDRESS).../ 128;.MINS :
= BLOCKS * 561 / 600;..(BLOCKS, " BLOCKS
,  ",...BLOCKS * 10 / 80,...".",...BLOCK
S * 10 / 8 .10,..." K");.CALC_FILE_CRCK;
..("TRANSMISSION TIME: ",...MINS / 10, "
.",...MINS .10,..." MINUTES.")..;...PROC
ESS_CAN;.(*******************).....START
_ERROR;....("RECEIVER CANCELLED TRANSMIS
SION");....(CHARCOLOUR, WHITE);...ABORT 
:= TRUE..;...TRANSMIT_BLOCK;.(**********
*************)..CH : .;...DISCARD,...I :
 .;...GET_ACK;.(****************).....CH
 := NEXT_CHAR (10);..(* ..ACK *)....TIME
OUT ........START_ERROR;....("TIMEOUT ON
 ACK");...ERROR............CH = CAN ....
PROCESS_CAN........CH <> ACK ........STA
RT_ERROR;....("GOT ",CH," FOR ACK");...E
RROR......;..(* .GET_ACK *)....SUM_CHECK
 := 0;..I := 0 .127 ........CH := .[NEXT
_ADDRESS];...NEXT_ADDRESS := NEXT_ADDRES
S + 1;...SUM_CHECK := SUM_CHECK + CH;...
BUFFER [I] := CH....;..DISPLAY_FILE ...I
 := 0 .127 ....DISPLAY_CHAR (BUFFER [I])
......("*");..WANT_CRCK ........SUM_CHEC
K_2 := CALC_CRCK;...SUM_CHECK := SUM_CHE
CK_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
 *)...TO_MODEM (BLOCK_NO);...TO_MODEM (I
NVERSE_BLOCK_NO);....I := 0 .127 .......
.DISCARD := FROM_MODEM;..(* IGNORE ANY S
PURIOUS GLITCHES *)...TO_MODEM (BUFFER[I
])....;...TO_MODEM (SUM_CHECK);....WANT_
CRCK ....TO_MODEM (SUM_CHECK_2);...GET_A
CK..ABORT .((.TIMEOUT) .(CH = ACK));..NE
XT_ADDRESS >= FINAL_ADDRESS ....ABORT ..
......RETRIES := 0;...EXPECTED_BLOCK := 
-1;.......TO_MODEM (EOT);...GET_ACK....A
BORT .((.TIMEOUT) .(CH = ACK));.....ABOR
T ....EOF := TRUE....;.BLOCK_NO := BLOCK
_NO + 1..;...SEND_FILE;.(***************
***)..CH : .;....;..(CHARCOLOUR, LIGHT_G
REEN);..("----- SEND A FILE -----");..(C
HARCOLOUR, GREEN);.ANALYSE_FILE;.NEXT_AD
DRESS := START_ADDRESS;.BLOCK_NO := 1;.E
XPECTED_BLOCK := 1;.ABORT := FALSE;.EOF 
:= FALSE;.RETRIES := 0;.PURGE;..(* EMPTY
 BUFFER *)..; .;..("AWAITING INITIAL NAK
");.....CH := NEXT_CHAR (60);..(* .A MIN
UTE *)....TIMEOUT ........START_ERROR;..
..("NO RESPONSE FROM OTHER END")........
........CH = NAK ....WANT_CRCK := FALSE.
.......CH = "C" ....WANT_CRCK := TRUE...
.....CH = CAN ....PROCESS_CAN...........
START_ERROR;....("GOT ",CH," FOR NAK");.
..ERROR..........(CH = NAK) .(CH = "C").
...TIMEOUT .ABORT;...(TIMEOUT .ABORT) ..
......TRANSMIT_BLOCK....ABORT .EOF;..EOF
 .........;....("FILE TRANSMITTED SUCCES
SFULLY").........CANCEL_TRANS..(* STOP O
THER .*)..;..SAVE_IN_MEMORY (X);.(******
*********************)....FINAL_ADDRESS 
= $7C00 .........;....;...START_ERROR;..
..("****** MEMORY BUFFER ALMOST FULL ***
***");....;....;....(CHARCOLOUR, WHITE).
...;..FINAL_ADDRESS < $8000 .........[FI
NAL_ADDRESS] := X;...FINAL_ADDRESS := FI
NAL_ADDRESS + 1....;..;...TERMINAL_MODE 
(HALF_DUPLEX);.(************************
************)..ACTIVE = 7;..INPUT : .;..
.X : .;...LAST_TERMINAL_MODE := COMMAND;
..(CHARCOLOUR, GREEN);..;..(CHARCOLOUR, 
LIGHT_GREEN);..("TERMINAL MODE - ");..HA
LF_DUPLEX .....("HALF")......("FULL");..
(" DUPLEX");..("PRESS <COMMODORE> KEY FO
R MAIN MENU");..;..(CHARCOLOUR, WHITE);.
.(1, ACTIVE, TRUE);.....X := .;....X > 4
0 ....X := X - 40;....(1,...X * 8,....* 
8 + 42);...INPUT := FROM_MODEM;....INPUT
 <> 0 ........DISPLAY_CHAR (INPUT);...SA
VE_IN_MEMORY (INPUT);....;...INPUT := .;
....INPUT <> 0 .........(INPUT >= $C1) .
...(INPUT <= $DA) ....INPUT := INPUT - $
60;....INPUT = $8D ....INPUT := CR......
..(INPUT = $9D)....(INPUT = $14) ....INP
UT := BS........INPUT = 29 ....INPUT := 
FS........INPUT = HOME ....INPUT := FF;.
.(* REVERSE UPPER/LOWER .*).....(INPUT >
= $61) ....(INPUT <= $7A) ....INPUT := I
NPUT - $20........(INPUT >= "A") ....(IN
PUT <= "Z") ....INPUT := INPUT + $20;...
TO_MODEM (INPUT);....HALF_DUPLEX .......
.SAVE_IN_MEMORY (INPUT);....(CHARCOLOUR,
 LIGHT_BLUE);...DISPLAY_CHAR (INPUT);...
.(CHARCOLOUR, WHITE)..........COMMODORE_
LOGO;..(1, ACTIVE, FALSE)..;...TYPE_FILE
 (PRINTIT);.(***************************
*)...NEXT_ADDRESS := START_ADDRESS;..;..
("PRESS <COMMODORE> KEY TO ABORT LIST");
..("      <SHIFT>     KEY TO PAUSE LIST"
);..;..PRINTIT .........(4, PRINTER_CHAN
NEL,...PRINTER_SEC_ADDR,..." ");.(* *** 
SPECIAL PRINTER STUFF...GOES HERE ****..
*)....(4)....;..(CHARCOLOUR, LIGHT_GREEN
);..(NEXT_ADDRESS < FINAL_ADDRESS).....C
OMMODORE_LOGO ..............SHIFT_KEY_PR
ESSED;...DISPLAY_CHAR (.[NEXT_ADDRESS]);
...NEXT_ADDRESS := NEXT_ADDRESS + 1....;
..PRINTIT .........(0);....(4)....;....;
..(* -------- MAIN PROGRAM -------- *)..
...INIT;..(* READY .CRCK *)........(CHAR
COLOUR, GREEN);....COMMAND ...."A": ANAL
YSE_FILE;..."C": CANCEL_TRANS;..."E": FI
NAL_ADDRESS := START_ADDRESS;..."F": TER
MINAL_MODE (FALSE);..."H": TERMINAL_MODE
 (TRUE);..."R": RECEIVE_FILE;..."S": SEN
D_FILE;..."P": TYPE_FILE (TRUE);..."T": 
TYPE_FILE (FALSE)....;..(* ..*)....(COMM
AND = "S")....(COMMAND = "R") ....COMMAN
D := LAST_TERMINAL_MODE............(CHAR
COLOUR, GREEN);....(.(14));..(* LOWER .*
)....("<A>NALYSE A FILE");....("<C>ANCEL
 TRANSMISSION");....("<E>RASE LAST CONVE
RSATION");....("<F>ULL DUPLEX TERMINAL")
;....("<H>ALF DUPLEX TERMINAL");....("<P
>RINT LAST FILE");....("<R>ECEIVE A FILE
");....("<S>END A FILE");....("<T>YPE LA
ST FILE");....("<Q>UIT PROGRAM");....;..
..("COMMAND? < >",.(157),.(157));....(CH
ARCOLOUR, LIGHT_BLUE);........(COMMAND);
...COMMAND := COMMAND .$7F....(COMMAND =
 "F")....(COMMAND = "S")....(COMMAND = "
Q")....(COMMAND = "A")....(COMMAND = "E"
)....(COMMAND = "C")....(COMMAND = "H").
...(COMMAND = "T")....(COMMAND = "P")...
.(COMMAND = "R");....(.(COMMAND)).......
.COMMAND = "Q";....(2).....H.
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL