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