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 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL