1541←TRI.DOC
FILE INFORMATION
FILENAME(S): 1541←TRI.DOC
FILE TYPE(S): PRG
FILE SIZE: 11.4K
FIRST SEEN: 2025-12-02 02:01:44
APPEARS ON: 1 disk(s)
FILE HASH
21c04f81897837824a35bb82f7955ea434d0c1615cb34c8b4b84cc6b2ed7cf71
FOUND ON DISKS (1 DISKS)
| DISK TITLE | FILENAME | FILE TYPE | COLLECTION | TRACK | SECTOR | ACTIONS |
|---|---|---|---|---|---|---|
| DISK | 1541←TRI.DOC | PRG | marcus | 16 | 0 | DOWNLOAD FILE |
FILE CONTENT & ANALYSIS
00000000: 46 72 6F 6D 3A 20 73 74 75 63 65 40 63 73 76 2E |From: stuce@csv.|
00000010: 77 61 72 77 69 63 6B 2E 61 63 2E 75 6B 20 28 50 |warwick.ac.uk (P|
00000020: 65 74 65 72 20 57 65 69 67 68 69 6C 6C 29 0A 4E |eter Weighill).N|
00000030: 65 77 73 67 72 6F 75 70 73 3A 20 63 6F 6D 70 2E |ewsgroups: comp.|
00000040: 73 79 73 2E 63 62 6D 0A 53 75 62 6A 65 63 74 3A |sys.cbm.Subject:|
00000050: 20 31 35 34 31 20 64 69 73 6B 20 64 72 69 76 65 | 1541 disk drive|
00000060: 20 63 6F 6D 6D 61 6E 64 73 2E 0A 44 61 74 65 3A | commands..Date:|
00000070: 20 32 35 20 53 65 70 20 31 39 39 33 20 31 39 3A | 25 Sep 1993 19:|
00000080: 32 30 3A 34 37 20 2B 30 31 30 30 0A 4F 72 67 61 |20:47 +0100.Orga|
00000090: 6E 69 7A 61 74 69 6F 6E 3A 20 43 6F 6D 6D 6F 64 |nization: Commod|
000000A0: 6F 72 65 20 36 34 20 53 65 72 76 69 63 65 73 2C |ore 64 Services,|
000000B0: 20 55 6E 69 76 65 72 73 69 74 79 20 6F 66 20 57 | University of W|
000000C0: 61 72 77 69 63 6B 2C 20 55 4B 0A 0A 0A 54 57 4F |arwick, UK...TWO|
000000D0: 20 52 41 52 45 4C 59 20 55 53 45 44 20 31 35 34 | RARELY USED 154|
000000E0: 31 20 44 49 53 4B 20 44 52 49 56 45 20 46 55 4E |1 DISK DRIVE FUN|
000000F0: 43 54 49 4F 4E 53 0A 0A 0A 31 2E 20 54 68 65 20 |CTIONS...1. The |
00000100: 55 74 69 6C 69 74 79 20 4C 6F 61 64 65 72 20 27 |Utility Loader '|
00000110: 26 27 20 63 6F 6D 6D 61 6E 64 2E 0A 0A 49 4E 54 |&' command...INT|
00000120: 52 4F 44 55 43 54 49 4F 4E 20 20 20 20 20 0A 0A |RODUCTION ..|
00000130: 20 20 20 20 20 41 20 6C 69 74 74 6C 65 20 6B 6E | A little kn|
00000140: 6F 77 6E 20 61 6E 64 20 6C 69 74 74 6C 65 20 75 |own and little u|
00000150: 73 65 64 20 63 6F 6D 6D 61 6E 64 20 6F 6E 20 74 |sed command on t|
00000160: 68 65 20 31 35 34 31 20 64 69 73 6B 20 64 72 69 |he 1541 disk dri|
00000170: 76 65 20 69 73 20 74 68 65 0A 22 26 22 20 63 6F |ve is the."&" co|
00000180: 6D 6D 61 6E 64 2E 20 54 68 69 73 20 69 73 20 70 |mmand. This is p|
00000190: 72 6F 62 61 62 6C 79 20 64 75 65 20 74 6F 20 74 |robably due to t|
000001A0: 68 65 20 66 61 63 74 20 74 68 61 74 20 74 68 65 |he fact that the|
000001B0: 72 65 20 69 73 20 6E 6F 20 6D 65 6E 74 69 6F 6E |re is no mention|
000001C0: 20 6F 66 20 69 74 0A 69 6E 20 74 68 65 20 22 31 | of it.in the "1|
000001D0: 35 34 31 20 44 49 53 4B 20 44 52 49 56 45 20 75 |541 DISK DRIVE u|
000001E0: 73 65 72 73 20 67 75 69 64 65 22 2E 20 4D 61 6E |sers guide". Man|
000001F0: 79 20 6F 74 68 65 72 20 62 6F 6F 6B 73 20 61 62 |y other books ab|
00000200: 6F 75 74 20 74 68 65 20 64 69 73 6B 20 64 72 69 |out the disk dri|
00000210: 76 65 0A 61 6C 73 6F 20 66 61 69 6C 20 74 6F 20 |ve.also fail to |
00000220: 6D 65 6E 74 69 6F 6E 20 69 74 2E 20 41 73 20 74 |mention it. As t|
00000230: 6F 20 61 20 75 73 65 20 66 6F 72 20 74 68 65 20 |o a use for the |
00000240: 63 6F 6D 6D 61 6E 64 2C 20 49 20 68 61 76 65 20 |command, I have |
00000250: 6E 6F 74 20 66 6F 75 6E 64 20 6F 6E 65 0A 79 65 |not found one.ye|
00000260: 74 2E 20 50 65 72 68 61 70 73 20 73 6F 6D 65 6F |t. Perhaps someo|
00000270: 6E 65 20 63 6F 75 6C 64 20 74 68 69 6E 6B 20 6F |ne could think o|
00000280: 66 20 6F 6E 65 2E 20 49 20 77 6F 75 6C 64 20 65 |f one. I would e|
00000290: 78 70 65 63 74 20 74 68 61 74 20 74 68 65 20 31 |xpect that the 1|
000002A0: 35 37 30 2F 31 35 37 31 0A 61 6E 64 20 31 35 38 |570/1571.and 158|
000002B0: 31 20 64 72 69 76 65 20 77 69 6C 6C 20 61 6C 73 |1 drive will als|
000002C0: 6F 20 63 6F 6E 74 61 69 6E 20 74 68 65 20 22 26 |o contain the "&|
000002D0: 22 20 63 6F 6D 6D 61 6E 64 20 61 73 20 77 65 6C |" command as wel|
000002E0: 6C 2C 20 73 69 6E 63 65 20 74 68 65 79 20 61 72 |l, since they ar|
000002F0: 65 0A 62 61 73 65 64 20 6F 6E 20 74 68 65 20 31 |e.based on the 1|
00000300: 35 34 31 2E 0A 0A 55 54 49 4C 49 54 59 20 4C 4F |541...UTILITY LO|
00000310: 41 44 45 52 20 20 28 22 26 22 20 63 6F 6D 6D 61 |ADER ("&" comma|
00000320: 6E 64 29 0A 0A 20 20 20 20 20 54 68 65 20 75 74 |nd).. The ut|
00000330: 69 6C 69 74 79 20 6C 6F 61 64 65 72 20 69 73 20 |ility loader is |
00000340: 74 68 65 20 63 6F 6D 6D 61 6E 64 20 77 68 69 63 |the command whic|
00000350: 68 20 77 69 6C 6C 20 6C 6F 61 64 20 61 20 55 53 |h will load a US|
00000360: 52 20 66 69 6C 65 20 66 72 6F 6D 0A 64 69 73 6B |R file from.disk|
00000370: 20 69 6E 74 6F 20 64 69 73 6B 20 64 72 69 76 65 | into disk drive|
00000380: 20 6D 65 6D 6F 72 79 20 77 68 65 72 65 20 69 74 | memory where it|
00000390: 20 77 69 6C 6C 20 74 68 65 6E 20 65 78 65 63 75 | will then execu|
000003A0: 74 65 2E 20 54 68 65 20 66 6F 72 6D 61 74 20 66 |te. The format f|
000003B0: 6F 72 0A 74 68 65 20 63 6F 6D 6D 61 6E 64 20 69 |or.the command i|
000003C0: 73 20 61 73 20 66 6F 6C 6C 6F 77 73 3A 0A 4F 50 |s as follows:.OP|
000003D0: 45 4E 31 35 2C 38 2C 31 35 3A 50 52 49 4E 54 23 |EN15,8,15:PRINT#|
000003E0: 31 35 2C 22 26 66 69 6C 65 6E 61 6D 65 22 3A 43 |15,"&filename":C|
000003F0: 4C 4F 53 45 31 35 0A 0A 55 53 52 20 46 49 4C 45 |LOSE15..USR FILE|
00000400: 53 0A 0A 20 20 20 20 20 41 20 75 73 65 72 20 66 |S.. A user f|
00000410: 69 6C 65 20 68 61 73 20 74 6F 20 66 6F 6C 6C 6F |ile has to follo|
00000420: 77 20 63 65 72 74 61 69 6E 20 67 75 69 64 6C 69 |w certain guidli|
00000430: 6E 65 73 2E 20 49 74 20 69 73 20 6C 69 6D 69 74 |nes. It is limit|
00000440: 65 64 20 74 6F 20 6A 75 73 74 0A 6F 6E 65 20 73 |ed to just.one s|
00000450: 65 63 74 6F 72 20 61 6E 64 20 74 68 69 73 20 73 |ector and this s|
00000460: 65 63 74 6F 72 20 69 73 20 63 6F 6E 73 74 72 75 |ector is constru|
00000470: 63 74 65 64 20 61 73 20 62 65 6C 6F 77 3B 0A 0A |cted as below;..|
00000480: 42 79 74 65 0A 30 20 20 20 20 20 20 53 74 61 72 |Byte.0 Star|
00000490: 74 20 61 64 64 72 65 73 73 20 6C 6F 77 20 20 6F |t address low o|
000004A0: 72 64 65 72 0A 31 20 20 20 20 20 20 53 74 61 72 |rder.1 Star|
000004B0: 74 20 61 64 64 72 65 73 73 20 68 69 67 68 20 6F |t address high o|
000004C0: 72 64 65 72 0A 32 20 20 20 20 20 20 4E 75 6D 62 |rder.2 Numb|
000004D0: 65 72 20 6F 66 20 62 79 74 65 73 20 69 6E 20 70 |er of bytes in p|
000004E0: 72 6F 67 72 61 6D 0A 33 2B 20 20 20 20 20 50 72 |rogram.3+ Pr|
000004F0: 6F 67 72 61 6D 20 63 6F 64 65 20 62 79 74 65 73 |ogram code bytes|
00000500: 0A 6C 61 73 74 20 20 20 43 68 65 63 6B 73 75 6D |.last Checksum|
00000510: 0A 0A 20 20 20 20 20 54 68 69 73 20 6D 65 61 6E |.. This mean|
00000520: 73 20 74 68 61 74 20 74 68 65 20 6D 61 78 69 6D |s that the maxim|
00000530: 75 6D 20 73 69 7A 65 20 6F 66 20 70 72 6F 67 72 |um size of progr|
00000540: 61 6D 20 63 6F 64 65 20 69 73 20 32 35 31 20 62 |am code is 251 b|
00000550: 79 74 65 73 2E 20 54 68 65 0A 63 68 65 63 6B 73 |ytes. The.checks|
00000560: 75 6D 20 62 79 74 65 20 69 73 20 63 61 6C 63 75 |um byte is calcu|
00000570: 6C 61 74 65 64 20 62 79 20 61 64 64 69 6E 67 20 |lated by adding |
00000580: 61 6C 6C 20 74 68 65 20 76 61 6C 75 65 73 20 6F |all the values o|
00000590: 66 20 74 68 65 20 62 79 74 65 73 2C 20 73 74 61 |f the bytes, sta|
000005A0: 72 74 69 6E 67 0A 61 74 20 74 68 65 20 6C 6F 77 |rting.at the low|
000005B0: 20 6F 72 64 65 72 20 73 74 61 72 74 20 61 64 64 | order start add|
000005C0: 72 65 73 73 20 28 62 79 74 65 20 30 29 2C 20 77 |ress (byte 0), w|
000005D0: 68 69 6C 65 20 61 64 64 69 6E 67 20 79 6F 75 20 |hile adding you |
000005E0: 73 75 62 74 72 61 63 74 20 32 35 35 20 66 72 6F |subtract 255 fro|
000005F0: 6D 0A 74 68 65 20 74 6F 74 61 6C 20 65 76 65 72 |m.the total ever|
00000600: 79 20 74 69 6D 65 20 69 74 20 65 78 63 65 65 64 |y time it exceed|
00000610: 73 20 32 35 35 2E 20 54 68 75 73 20 74 68 65 20 |s 255. Thus the |
00000620: 63 68 65 63 6B 73 75 6D 20 62 79 74 65 20 63 61 |checksum byte ca|
00000630: 6E 20 72 61 6E 67 65 20 66 72 6F 6D 0A 31 2D 32 |n range from.1-2|
00000640: 35 35 2E 0A 20 20 20 20 20 4F 6E 65 20 66 69 6E |55.. One fin|
00000650: 61 6C 20 63 6F 6E 73 74 72 61 69 6E 74 20 69 73 |al constraint is|
00000660: 20 74 68 61 74 20 74 68 65 20 66 69 6C 65 6E 61 | that the filena|
00000670: 6D 65 20 6D 75 73 74 20 62 65 67 69 6E 20 77 69 |me must begin wi|
00000680: 74 68 20 61 6E 20 22 26 22 2E 0A 20 20 20 20 20 |th an "&".. |
00000690: 42 65 6C 6F 77 20 69 73 20 61 20 70 72 6F 67 72 |Below is a progr|
000006A0: 61 6D 20 77 68 69 63 68 20 77 69 6C 6C 20 6D 61 |am which will ma|
000006B0: 6B 65 20 69 74 20 65 61 73 69 65 72 20 66 6F 72 |ke it easier for|
000006C0: 20 79 6F 75 20 74 6F 20 63 72 65 61 74 65 20 61 | you to create a|
000006D0: 20 55 53 52 0A 66 69 6C 65 20 69 6E 20 74 68 65 | USR.file in the|
000006E0: 20 72 65 71 75 69 72 65 64 20 66 6F 72 6D 61 74 | required format|
000006F0: 2C 20 73 6F 20 74 68 61 74 20 69 74 20 63 61 6E |, so that it can|
00000700: 20 62 65 20 65 78 65 63 75 74 65 64 20 62 79 20 | be executed by |
00000710: 74 68 65 20 75 74 69 6C 69 74 79 0A 6C 6F 61 64 |the utility.load|
00000720: 65 72 20 63 6F 6D 6D 61 6E 64 2E 20 54 68 65 20 |er command. The |
00000730: 70 72 6F 67 72 61 6D 20 61 75 74 6F 6D 61 74 69 |program automati|
00000740: 63 61 6C 6C 79 20 63 61 6C 63 75 6C 61 74 65 73 |cally calculates|
00000750: 20 74 68 65 20 6C 65 6E 67 74 68 20 6F 66 20 74 | the length of t|
00000760: 68 65 20 63 6F 64 65 0A 61 6E 64 20 61 6C 73 6F |he code.and also|
00000770: 20 74 68 65 20 63 68 65 63 6B 73 75 6D 20 61 74 | the checksum at|
00000780: 20 74 68 65 20 65 6E 64 2E 20 41 6C 6C 20 79 6F | the end. All yo|
00000790: 75 20 6E 65 65 64 20 74 6F 20 64 6F 20 69 73 20 |u need to do is |
000007A0: 61 64 64 20 79 6F 75 72 20 6F 77 6E 20 63 6F 64 |add your own cod|
000007B0: 65 0A 74 6F 20 74 68 65 20 64 61 74 61 20 73 74 |e.to the data st|
000007C0: 61 74 65 6D 65 6E 74 73 20 62 65 74 77 65 65 6E |atements between|
000007D0: 20 32 31 30 20 61 6E 64 20 33 30 30 20 61 6E 64 | 210 and 300 and|
000007E0: 20 73 70 65 63 69 66 79 20 61 20 66 69 6C 65 6E | specify a filen|
000007F0: 61 6D 65 20 69 6E 20 6C 69 6E 65 20 31 30 2E 0A |ame in line 10..|
00000800: 0A 31 30 20 20 4F 50 45 4E 32 2C 38 2C 32 2C 22 |.10 OPEN2,8,2,"|
00000810: 30 3A 26 66 69 6C 65 6E 61 6D 65 2C 55 2C 57 22 |0:&filename,U,W"|
00000820: 0A 32 30 20 20 52 45 41 44 4C 4F 2C 48 49 3A 43 |.20 READLO,HI:C|
00000830: 3D 4C 4F 2B 48 49 3A 49 46 43 3E 32 35 35 54 48 |=LO+HI:IFC>255TH|
00000840: 45 4E 43 3D 43 2D 32 35 35 0A 33 30 20 20 50 52 |ENC=C-255.30 PR|
00000850: 49 4E 54 23 32 2C 43 48 52 24 28 4C 4F 29 43 48 |INT#2,CHR$(LO)CH|
00000860: 52 24 28 48 49 29 3B 0A 34 30 20 20 54 24 3D 22 |R$(HI);.40 T$="|
00000870: 22 0A 35 30 20 20 52 45 41 44 44 3A 49 46 44 3D |".50 READD:IFD=|
00000880: 2D 31 54 48 45 4E 31 30 30 0A 36 30 20 20 43 3D |-1THEN100.60 C=|
00000890: 43 2B 44 3A 49 46 43 3E 32 35 35 54 48 45 4E 43 |C+D:IFC>255THENC|
000008A0: 3D 43 2D 32 35 35 0A 37 30 20 20 54 24 3D 54 24 |=C-255.70 T$=T$|
000008B0: 2B 43 48 52 24 28 44 29 0A 38 30 20 20 47 4F 54 |+CHR$(D).80 GOT|
000008C0: 4F 35 30 0A 31 30 30 20 4C 3D 4C 45 4E 28 54 24 |O50.100 L=LEN(T$|
000008D0: 29 0A 31 31 30 20 43 3D 43 2B 4C 3A 49 46 43 3E |).110 C=C+L:IFC>|
000008E0: 32 35 35 54 48 45 4E 43 3D 43 2D 32 35 35 0A 31 |255THENC=C-255.1|
000008F0: 32 30 20 50 52 49 4E 54 23 32 2C 43 48 52 24 28 |20 PRINT#2,CHR$(|
00000900: 4C 29 54 24 43 48 52 24 28 43 29 3B 0A 31 33 30 |L)T$CHR$(C);.130|
00000910: 20 43 4C 4F 53 45 32 0A 31 34 30 20 45 4E 44 0A | CLOSE2.140 END.|
00000920: 31 37 30 20 3A 0A 32 30 30 20 44 41 54 41 20 30 |170 :.200 DATA 0|
00000930: 2C 35 20 3A 52 45 4D 20 6C 6F 2F 68 69 20 73 74 |,5 :REM lo/hi st|
00000940: 61 72 74 20 61 64 64 72 65 73 73 0A 32 31 30 20 |art address.210 |
00000950: 3A 20 20 20 20 20 20 20 20 20 52 45 4D 20 70 72 |: REM pr|
00000960: 6F 67 72 61 6D 20 63 6F 64 65 0A 32 32 30 20 44 |ogram code.220 D|
00000970: 41 54 41 20 31 37 33 2C 30 2C 32 38 2C 34 31 2C |ATA 173,0,28,41,|
00000980: 31 36 2C 32 30 31 2C 31 36 2C 32 30 38 2C 31 31 |16,201,16,208,11|
00000990: 0A 32 33 30 20 44 41 54 41 20 31 36 39 2C 32 34 |.230 DATA 169,24|
000009A0: 37 2C 34 35 2C 30 2C 32 38 2C 31 34 31 2C 30 2C |7,45,0,28,141,0,|
000009B0: 32 38 2C 37 36 0A 32 34 30 20 44 41 54 41 20 30 |28,76.240 DATA 0|
000009C0: 2C 35 2C 33 32 2C 32 34 2C 31 39 33 2C 37 36 2C |,5,32,24,193,76,|
000009D0: 30 2C 35 0A 33 30 30 20 44 41 54 41 20 2D 31 20 |0,5.300 DATA -1 |
000009E0: 20 3A 52 45 4D 20 70 72 6F 67 72 61 6D 20 64 61 | :REM program da|
000009F0: 74 61 20 66 69 6E 69 73 68 65 64 0A 0A 20 20 20 |ta finished.. |
00000A00: 20 20 54 68 65 20 65 78 61 6D 70 6C 65 20 63 6F | The example co|
00000A10: 64 65 20 69 6E 20 74 68 65 20 70 72 6F 67 72 61 |de in the progra|
00000A20: 6D 20 69 73 20 6E 6F 74 20 74 68 61 74 20 75 73 |m is not that us|
00000A30: 65 66 75 6C 2C 20 69 74 20 69 73 20 6A 75 73 74 |eful, it is just|
00000A40: 20 74 68 65 72 65 0A 74 6F 20 73 68 6F 77 20 68 | there.to show h|
00000A50: 6F 77 20 74 68 65 20 75 74 69 6C 69 74 79 20 6C |ow the utility l|
00000A60: 6F 61 64 65 72 20 77 6F 72 6B 73 2E 20 49 74 20 |oader works. It |
00000A70: 6A 75 73 74 20 73 77 69 74 63 68 65 73 20 74 68 |just switches th|
00000A80: 65 20 64 72 69 76 65 73 20 6C 69 67 68 74 20 6F |e drives light o|
00000A90: 6E 0A 61 6E 64 20 6F 66 66 20 64 65 70 65 6E 64 |n.and off depend|
00000AA0: 69 6E 67 20 6F 6E 20 69 66 20 74 68 65 20 77 72 |ing on if the wr|
00000AB0: 69 74 65 20 70 72 6F 74 65 63 74 20 73 65 6E 73 |ite protect sens|
00000AC0: 6F 72 20 69 73 20 63 6F 76 65 72 65 64 20 6F 72 |or is covered or|
00000AD0: 20 6E 6F 74 2E 0A 20 20 20 20 20 49 66 20 79 6F | not.. If yo|
00000AE0: 75 20 63 61 6E 20 74 68 69 6E 6B 20 6F 66 20 73 |u can think of s|
00000AF0: 6F 6D 65 74 68 69 6E 67 20 77 68 69 63 68 20 63 |omething which c|
00000B00: 6F 75 6C 64 20 62 65 20 64 6F 6E 65 20 77 69 74 |ould be done wit|
00000B10: 68 20 74 68 65 20 75 74 69 6C 69 74 79 0A 6C 6F |h the utility.lo|
00000B20: 61 64 65 72 20 74 68 65 6E 20 49 20 77 6F 75 6C |ader then I woul|
00000B30: 64 20 6C 6F 76 65 20 74 6F 20 68 65 61 72 20 6F |d love to hear o|
00000B40: 66 20 69 74 2E 0A 0A 45 52 52 4F 52 53 20 54 48 |f it...ERRORS TH|
00000B50: 41 54 20 43 41 4E 20 4F 43 43 55 52 0A 0A 33 39 |AT CAN OCCUR..39|
00000B60: 2C 20 27 66 69 6C 65 20 6E 6F 74 20 66 6F 75 6E |, 'file not foun|
00000B70: 64 27 0A 20 20 20 20 20 20 20 20 54 68 69 73 20 |d'. This |
00000B80: 6F 63 63 75 72 73 20 69 66 20 74 68 65 20 66 69 |occurs if the fi|
00000B90: 6C 65 20 79 6F 75 20 73 70 65 63 69 66 69 65 64 |le you specified|
00000BA0: 20 75 73 69 6E 67 20 74 68 65 20 75 74 69 6C 69 | using the utili|
00000BB0: 74 79 20 6C 6F 61 64 65 72 0A 20 20 20 20 20 20 |ty loader. |
00000BC0: 20 20 63 6F 6D 6D 61 6E 64 20 64 6F 65 73 20 6E | command does n|
00000BD0: 6F 74 20 65 78 69 73 74 20 6F 72 20 69 73 20 6E |ot exist or is n|
00000BE0: 6F 74 20 61 20 55 53 52 20 66 69 6C 65 2E 0A 0A |ot a USR file...|
00000BF0: 35 30 2C 20 27 72 65 63 6F 72 64 20 6E 6F 74 20 |50, 'record not |
00000C00: 70 72 65 73 65 6E 74 27 20 20 0A 20 20 20 20 20 |present' . |
00000C10: 20 20 20 54 68 65 20 63 68 65 63 6B 73 75 6D 20 | The checksum |
00000C20: 63 61 6C 63 75 6C 61 74 65 64 20 62 79 20 74 68 |calculated by th|
00000C30: 65 20 64 69 73 6B 20 64 72 69 76 65 20 61 6E 64 |e disk drive and|
00000C40: 20 74 68 65 20 63 68 65 63 6B 73 75 6D 20 61 74 | the checksum at|
00000C50: 20 74 68 65 0A 20 20 20 20 20 20 20 20 65 6E 64 | the. end|
00000C60: 20 6F 66 20 74 68 65 20 66 69 6C 65 20 64 69 66 | of the file dif|
00000C70: 66 65 72 2E 0A 0A 35 31 2C 20 27 6F 76 65 72 66 |fer...51, 'overf|
00000C80: 6C 6F 77 20 69 6E 20 72 65 63 6F 72 64 27 0A 20 |low in record'. |
00000C90: 20 20 20 20 20 20 20 45 69 74 68 65 72 3A 20 31 | Either: 1|
00000CA0: 2E 20 54 68 65 20 65 6E 64 20 6F 66 20 74 68 65 |. The end of the|
00000CB0: 20 66 69 6C 65 20 77 61 73 20 72 65 61 63 68 65 | file was reache|
00000CC0: 64 20 62 65 66 6F 72 65 20 74 68 65 20 63 68 65 |d before the che|
00000CD0: 63 6B 73 75 6D 0A 20 20 20 20 20 20 20 20 20 20 |cksum. |
00000CE0: 20 20 20 20 20 20 20 20 20 62 79 74 65 20 77 61 | byte wa|
00000CF0: 73 20 72 65 61 64 2E 0A 20 20 20 20 20 20 20 20 |s read.. |
00000D00: 6F 72 20 20 20 20 20 20 32 2E 20 54 68 65 20 66 |or 2. The f|
00000D10: 69 6C 65 20 63 6F 6E 74 61 69 6E 73 20 65 78 74 |ile contains ext|
00000D20: 72 61 20 62 79 74 65 73 20 6F 66 20 64 61 74 61 |ra bytes of data|
00000D30: 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6B | after the check|
00000D40: 73 75 6D 0A 20 20 20 20 20 20 20 20 20 20 20 20 |sum. |
00000D50: 20 20 20 20 20 20 20 62 79 74 65 2E 0A 20 20 20 | byte.. |
00000D60: 20 20 20 20 20 43 68 65 63 6B 20 74 68 65 20 6C | Check the l|
00000D70: 65 6E 67 74 68 20 62 79 74 65 20 69 6E 20 74 68 |ength byte in th|
00000D80: 65 20 75 73 72 20 66 69 6C 65 20 28 70 6F 73 69 |e usr file (posi|
00000D90: 74 69 6F 6E 20 33 2C 20 61 66 74 65 72 20 6C 6F |tion 3, after lo|
00000DA0: 2F 68 69 2E 29 0A 0A 0A 0A 32 2E 20 43 68 65 63 |/hi.)....2. Chec|
00000DB0: 6B 69 6E 67 20 74 68 61 74 20 61 20 66 69 6C 65 |king that a file|
00000DC0: 20 69 73 20 6F 6E 20 74 68 65 20 64 69 73 6B 2E | is on the disk.|
00000DD0: 0A 0A 49 4E 54 52 4F 44 55 43 54 49 4F 4E 0A 0A |..INTRODUCTION..|
00000DE0: 20 20 20 20 20 49 66 20 79 6F 75 20 77 72 6F 74 | If you wrot|
00000DF0: 65 20 61 20 70 72 6F 67 72 61 6D 20 77 68 69 63 |e a program whic|
00000E00: 68 20 6E 65 65 64 65 64 20 74 6F 20 63 68 65 63 |h needed to chec|
00000E10: 6B 20 74 68 61 74 20 61 20 70 61 72 74 69 63 75 |k that a particu|
00000E20: 6C 61 72 20 66 69 6C 65 0A 65 78 69 73 74 65 64 |lar file.existed|
00000E30: 20 6F 6E 20 61 20 64 69 73 6B 20 74 68 65 6E 20 | on a disk then |
00000E40: 79 6F 75 20 77 6F 75 6C 64 20 70 72 6F 62 61 62 |you would probab|
00000E50: 6C 79 20 6F 70 65 6E 20 74 68 65 20 66 69 6C 65 |ly open the file|
00000E60: 20 66 6F 72 20 61 20 72 65 61 64 2C 20 74 68 65 | for a read, the|
00000E70: 6E 0A 63 68 65 63 6B 20 74 68 65 20 65 72 72 6F |n.check the erro|
00000E80: 72 20 63 68 61 6E 6E 65 6C 20 66 6F 72 20 36 32 |r channel for 62|
00000E90: 2C 20 46 49 4C 45 20 4E 4F 54 20 46 4F 55 4E 44 |, FILE NOT FOUND|
00000EA0: 2E 0A 0A 54 68 75 73 3A 0A 31 30 20 4F 50 45 4E |...Thus:.10 OPEN|
00000EB0: 31 35 2C 38 2C 31 35 0A 32 30 20 4F 50 45 4E 32 |15,8,15.20 OPEN2|
00000EC0: 2C 38 2C 32 2C 22 66 69 6C 65 6E 61 6D 65 2C 50 |,8,2,"filename,P|
00000ED0: 2C 52 22 0A 33 30 20 49 4E 50 55 54 23 31 35 2C |,R".30 INPUT#15,|
00000EE0: 45 2C 45 24 0A 34 30 20 49 46 45 3E 30 54 48 45 |E,E$.40 IFE>0THE|
00000EF0: 4E 50 52 49 4E 54 45 24 3A 47 4F 54 4F 36 30 0A |NPRINTE$:GOTO60.|
00000F00: 35 30 20 50 52 49 4E 54 22 46 49 4C 45 20 45 58 |50 PRINT"FILE EX|
00000F10: 49 53 54 53 22 0A 36 30 20 43 4C 4F 53 45 32 3A |ISTS".60 CLOSE2:|
00000F20: 43 4C 4F 53 45 31 35 0A 0A 20 20 20 20 20 41 6E |CLOSE15.. An|
00000F30: 6F 74 68 65 72 20 77 61 79 20 74 6F 20 63 68 65 |other way to che|
00000F40: 63 6B 20 69 66 20 61 20 66 69 6C 65 20 65 78 69 |ck if a file exi|
00000F50: 73 74 73 20 69 73 20 74 6F 20 74 72 79 20 74 6F |sts is to try to|
00000F60: 20 72 65 6E 61 6D 65 20 69 74 20 61 73 20 69 74 | rename it as it|
00000F70: 73 65 6C 66 2E 0A 0A 54 68 75 73 3A 0A 31 30 20 |self...Thus:.10 |
00000F80: 4F 50 45 4E 31 35 2C 38 2C 31 35 2C 22 52 3A 66 |OPEN15,8,15,"R:f|
00000F90: 69 6C 65 6E 61 6D 65 3D 66 69 6C 65 6E 61 6D 65 |ilename=filename|
00000FA0: 22 0A 32 30 20 49 4E 50 55 54 23 31 35 2C 45 2C |".20 INPUT#15,E,|
00000FB0: 45 24 0A 33 30 20 43 4C 4F 53 45 31 35 0A 34 30 |E$.30 CLOSE15.40|
00000FC0: 20 50 52 49 4E 54 45 24 0A 0A 20 20 20 20 20 49 | PRINTE$.. I|
00000FD0: 66 20 74 68 65 20 66 69 6C 65 20 65 78 69 73 74 |f the file exist|
00000FE0: 73 20 74 68 65 6E 20 74 68 65 20 65 72 72 6F 72 |s then the error|
00000FF0: 20 63 72 65 61 74 65 64 20 69 73 20 36 33 2C 20 | created is 63, |
00001000: 46 49 4C 45 20 45 58 49 53 54 53 2C 0A 6F 74 68 |FILE EXISTS,.oth|
00001010: 65 72 77 69 73 65 20 69 74 20 69 73 20 36 32 2C |erwise it is 62,|
00001020: 20 46 49 4C 45 20 4E 4F 54 20 46 4F 55 4E 44 2E | FILE NOT FOUND.|
00001030: 20 4A 75 64 67 65 20 66 6F 72 20 79 6F 75 72 73 | Judge for yours|
00001040: 65 6C 66 20 77 68 69 63 68 20 77 6F 72 6B 73 20 |elf which works |
00001050: 62 65 74 74 65 72 2E 0A 0A 0A 57 72 69 74 74 65 |better....Writte|
00001060: 6E 2C 20 53 65 70 74 65 6D 62 65 72 20 39 33 2C |n, September 93,|
00001070: 20 62 79 20 50 65 74 65 72 20 57 65 69 67 68 69 | by Peter Weighi|
00001080: 6C 6C 2E 20 20 20 65 6D 61 69 6C 3A 20 73 74 75 |ll. email: stu|
00001090: 63 65 40 77 61 72 77 69 63 6B 2E 63 73 76 2E 61 |ce@warwick.csv.a|
000010A0: 63 2E 75 6B 0A 0A 0A 0A 46 72 6F 6D 3A 20 4E 69 |c.uk....From: Ni|
000010B0: 63 68 6F 6C 61 73 2E 43 75 6C 6C 40 63 6F 6D 70 |cholas.Cull@comp|
000010C0: 2E 76 75 77 2E 61 63 2E 6E 7A 20 28 4E 69 63 68 |.vuw.ac.nz (Nich|
000010D0: 6F 6C 61 73 20 43 75 6C 6C 29 0A 4E 65 77 73 67 |olas Cull).Newsg|
000010E0: 72 6F 75 70 73 3A 20 63 6F 6D 70 2E 73 79 73 2E |roups: comp.sys.|
000010F0: 63 62 6D 0A 53 75 62 6A 65 63 74 3A 20 52 65 3A |cbm.Subject: Re:|
00001100: 20 31 35 34 31 20 64 69 73 6B 20 64 72 69 76 65 | 1541 disk drive|
00001110: 20 63 6F 6D 6D 61 6E 64 73 2E 0A 44 61 74 65 3A | commands..Date:|
00001120: 20 33 30 20 53 65 70 20 31 39 39 33 20 30 30 3A | 30 Sep 1993 00:|
00001130: 30 30 3A 32 30 20 47 4D 54 0A 4F 72 67 61 6E 69 |00:20 GMT.Organi|
00001140: 7A 61 74 69 6F 6E 3A 20 44 65 70 74 2E 20 6F 66 |zation: Dept. of|
00001150: 20 43 6F 6D 70 2E 20 53 63 69 2E 2C 20 56 69 63 | Comp. Sci., Vic|
00001160: 74 6F 72 69 61 20 55 6E 69 2E 20 6F 66 20 57 65 |toria Uni. of We|
00001170: 6C 6C 69 6E 67 74 6F 6E 2C 20 4E 65 77 20 5A 65 |llington, New Ze|
00001180: 61 6C 61 6E 64 2E 0A 4F 72 69 67 69 6E 61 74 6F |aland..Originato|
00001190: 72 3A 20 6E 63 75 6C 6C 40 63 6F 6D 70 2E 76 75 |r: ncull@comp.vu|
000011A0: 77 2E 61 63 2E 6E 7A 0A 0A 0A 49 6E 20 61 72 74 |w.ac.nz...In art|
000011B0: 69 63 6C 65 20 3C 32 38 32 32 35 76 24 31 73 33 |icle <28225v$1s3|
000011C0: 40 74 61 6E 73 79 2E 63 73 76 2E 77 61 72 77 69 |@tansy.csv.warwi|
000011D0: 63 6B 2E 61 63 2E 75 6B 3E 2C 20 73 74 75 63 65 |ck.ac.uk>, stuce|
000011E0: 40 63 73 76 2E 77 61 72 77 69 63 6B 2E 61 63 2E |@csv.warwick.ac.|
000011F0: 75 6B 0A 20 28 50 65 74 65 72 20 57 65 69 67 68 |uk. (Peter Weigh|
00001200: 69 6C 6C 29 20 77 72 69 74 65 73 3A 0A 7C 3E 20 |ill) writes:.|> |
00001210: 0A 7C 3E 20 31 2E 20 54 68 65 20 55 74 69 6C 69 |.|> 1. The Utili|
00001220: 74 79 20 4C 6F 61 64 65 72 20 27 26 27 20 63 6F |ty Loader '&' co|
00001230: 6D 6D 61 6E 64 2E 0A 0A 2E 2E 2E 0A 0A 7C 3E 20 |mmand........|> |
00001240: 20 20 20 20 20 41 20 75 73 65 72 20 66 69 6C 65 | A user file|
00001250: 20 68 61 73 20 74 6F 20 66 6F 6C 6C 6F 77 20 63 | has to follow c|
00001260: 65 72 74 61 69 6E 20 67 75 69 64 6C 69 6E 65 73 |ertain guidlines|
00001270: 2E 20 49 74 20 69 73 20 6C 69 6D 69 74 65 64 20 |. It is limited |
00001280: 74 6F 20 6A 75 73 74 0A 20 20 20 20 20 20 20 20 |to just. |
00001290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000012A0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000012B0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5E 5E 5E | ^^^|
000012C0: 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E |^^^^^^^^^^^^^^^^|
000012D0: 5E 5E 0A 7C 3E 20 6F 6E 65 20 73 65 63 74 6F 72 |^^.|> one sector|
000012E0: 20 61 6E 64 20 74 68 69 73 20 73 65 63 74 6F 72 | and this sector|
000012F0: 20 69 73 20 63 6F 6E 73 74 72 75 63 74 65 64 20 | is constructed |
00001300: 61 73 20 62 65 6C 6F 77 3B 0A 20 20 20 5E 5E 5E |as below;. ^^^|
00001310: 5E 5E 5E 5E 5E 5E 5E 0A 0A 54 68 69 73 20 69 73 |^^^^^^^..This is|
00001320: 20 69 6E 63 6F 72 72 65 63 74 2E 20 54 68 65 20 | incorrect. The |
00001330: 75 73 65 72 20 66 69 6C 65 20 6D 61 79 20 62 65 |user file may be|
00001340: 20 6D 6F 72 65 20 74 68 61 6E 20 6F 6E 65 20 73 | more than one s|
00001350: 65 63 74 6F 72 20 6C 6F 6E 67 2C 20 61 6C 74 68 |ector long, alth|
00001360: 6F 75 67 68 20 74 68 65 0A 6D 61 78 69 6D 75 6D |ough the.maximum|
00001370: 20 73 69 7A 65 20 6F 66 20 74 68 65 20 70 72 6F | size of the pro|
00001380: 67 72 61 6D 20 63 6F 64 65 20 69 73 20 6C 69 6D |gram code is lim|
00001390: 69 74 65 64 20 74 6F 20 32 35 36 20 62 79 74 65 |ited to 256 byte|
000013A0: 73 2E 20 54 6F 20 6F 62 74 61 69 6E 20 74 68 69 |s. To obtain thi|
000013B0: 73 2C 20 62 79 74 65 0A 32 20 28 74 68 65 20 6E |s, byte.2 (the n|
000013C0: 75 6D 62 65 72 20 6F 66 20 62 79 74 65 73 20 69 |umber of bytes i|
000013D0: 6E 20 70 72 6F 67 72 61 6D 29 20 73 68 6F 75 6C |n program) shoul|
000013E0: 64 20 62 65 20 73 65 74 20 74 6F 20 30 2E 20 41 |d be set to 0. A|
000013F0: 20 66 6F 72 6D 75 6C 61 20 66 6F 72 20 74 68 69 | formula for thi|
00001400: 73 0A 77 6F 75 6C 64 20 62 65 0A 0A 28 4E 42 20 |s.would be..(NB |
00001410: 41 4E 44 20 32 35 35 29 0A 0A 77 68 65 72 65 20 |AND 255)..where |
00001420: 4E 42 20 69 73 20 74 68 65 20 6E 75 6D 62 65 72 |NB is the number|
00001430: 20 6F 66 20 62 79 74 65 73 2E 20 52 65 6D 65 6D | of bytes. Remem|
00001440: 62 65 72 20 74 68 61 74 20 74 68 65 20 63 68 65 |ber that the che|
00001450: 63 6B 73 75 6D 20 68 61 73 20 74 6F 20 62 65 20 |cksum has to be |
00001460: 75 70 64 61 74 65 64 0A 69 6E 20 61 20 73 69 6D |updated.in a sim|
00001470: 69 6C 61 72 20 77 61 79 20 74 6F 6F 2C 20 65 67 |ilar way too, eg|
00001480: 0A 0A 20 43 20 3D 20 43 2B 28 4E 42 20 41 4E 44 |.. C = C+(NB AND|
00001490: 20 32 35 35 29 3A 20 49 46 20 43 3E 32 35 35 20 | 255): IF C>255 |
000014A0: 54 48 45 4E 20 43 3D 43 2D 32 35 35 0A 0A 54 68 |THEN C=C-255..Th|
000014B0: 65 20 6E 75 6D 62 65 72 20 6F 66 20 62 79 74 65 |e number of byte|
000014C0: 73 20 69 6E 20 61 20 42 6C 6F 63 6B 2D 45 78 65 |s in a Block-Exe|
000014D0: 63 75 74 65 20 63 6F 6D 6D 61 6E 64 20 69 73 20 |cute command is |
000014E0: 6C 69 6D 69 74 65 64 20 74 6F 20 61 20 73 69 6E |limited to a sin|
000014F0: 67 6C 65 20 73 65 63 74 6F 72 2C 0A 77 68 69 63 |gle sector,.whic|
00001500: 68 20 69 73 20 32 35 36 20 62 79 74 65 73 2C 20 |h is 256 bytes, |
00001510: 61 6C 74 68 6F 75 67 68 20 74 68 65 73 65 20 63 |although these c|
00001520: 61 6E 20 62 65 20 61 6C 6C 20 64 61 74 61 20 62 |an be all data b|
00001530: 79 74 65 73 2E 20 4D 61 79 62 65 20 79 6F 75 20 |ytes. Maybe you |
00001540: 77 65 72 65 0A 63 6F 6E 66 75 73 69 6E 67 20 74 |were.confusing t|
00001550: 68 65 20 74 77 6F 20 63 6F 6D 6D 61 6E 64 73 3F |he two commands?|
00001560: 0A 0A 7C 3E 20 0A 7C 3E 20 42 79 74 65 0A 7C 3E |..|> .|> Byte.|>|
00001570: 20 30 20 20 20 20 20 20 53 74 61 72 74 20 61 64 | 0 Start ad|
00001580: 64 72 65 73 73 20 6C 6F 77 20 20 6F 72 64 65 72 |dress low order|
00001590: 0A 7C 3E 20 31 20 20 20 20 20 20 53 74 61 72 74 |.|> 1 Start|
000015A0: 20 61 64 64 72 65 73 73 20 68 69 67 68 20 6F 72 | address high or|
000015B0: 64 65 72 0A 7C 3E 20 32 20 20 20 20 20 20 4E 75 |der.|> 2 Nu|
000015C0: 6D 62 65 72 20 6F 66 20 62 79 74 65 73 20 69 6E |mber of bytes in|
000015D0: 20 70 72 6F 67 72 61 6D 0A 7C 3E 20 33 2B 20 20 | program.|> 3+ |
000015E0: 20 20 20 50 72 6F 67 72 61 6D 20 63 6F 64 65 20 | Program code |
000015F0: 62 79 74 65 73 0A 7C 3E 20 6C 61 73 74 20 20 20 |bytes.|> last |
00001600: 43 68 65 63 6B 73 75 6D 0A 7C 3E 20 0A 0A 49 6E |Checksum.|> ..In|
00001610: 20 66 61 63 74 20 74 68 65 72 65 20 63 61 6E 20 | fact there can |
00001620: 62 65 20 6D 6F 72 65 20 74 68 61 6E 20 6F 6E 65 |be more than one|
00001630: 20 62 6C 6F 63 6B 20 6F 66 20 74 68 69 73 20 63 | block of this c|
00001640: 6F 6E 73 74 72 75 63 74 69 6F 6E 20 70 65 72 20 |onstruction per |
00001650: 66 69 6C 65 2E 20 54 6F 20 64 6F 0A 74 68 69 73 |file. To do.this|
00001660: 2C 20 73 69 6D 70 6C 79 20 72 65 70 65 61 74 20 |, simply repeat |
00001670: 74 68 65 20 63 6F 6E 73 74 72 75 63 74 69 6F 6E |the construction|
00001680: 2E 20 46 6F 72 20 65 78 61 6D 70 6C 65 2C 20 69 |. For example, i|
00001690: 66 20 79 6F 75 20 77 61 6E 74 65 64 20 74 6F 20 |f you wanted to |
000016A0: 68 61 76 65 20 61 0A 70 72 6F 67 72 61 6D 20 77 |have a.program w|
000016B0: 68 69 63 68 20 73 61 74 20 69 6E 20 64 72 69 76 |hich sat in driv|
000016C0: 65 20 6C 6F 63 61 74 69 6F 6E 73 20 24 30 33 30 |e locations $030|
000016D0: 30 20 74 6F 20 24 30 34 30 30 2C 20 61 6E 64 20 |0 to $0400, and |
000016E0: 24 30 34 38 30 20 74 6F 20 24 30 35 30 30 2C 20 |$0480 to $0500, |
000016F0: 74 68 65 0A 63 6F 6E 73 74 72 75 63 74 69 6F 6E |the.construction|
00001700: 20 77 6F 75 6C 64 20 62 65 20 61 73 20 66 6F 6C | would be as fol|
00001710: 6C 6F 77 73 3A 0A 0A 42 79 74 65 0A 30 20 20 20 |lows:..Byte.0 |
00001720: 20 20 20 20 20 20 20 20 20 20 4C 6F 77 20 62 79 | Low by|
00001730: 74 65 20 73 74 61 72 74 20 61 64 64 72 65 73 73 |te start address|
00001740: 20 6F 66 20 66 69 72 73 74 20 62 6C 6F 63 6B 20 | of first block |
00001750: 28 30 29 0A 31 20 20 20 20 20 20 20 20 20 20 20 |(0).1 |
00001760: 20 20 48 69 67 68 20 62 79 74 65 20 73 74 61 72 | High byte star|
00001770: 74 20 61 64 64 72 65 73 73 20 6F 66 20 66 69 72 |t address of fir|
00001780: 73 74 20 62 6C 6F 63 6B 20 28 33 29 0A 32 20 20 |st block (3).2 |
00001790: 20 20 20 20 20 20 20 20 20 20 20 4E 75 6D 62 65 | Numbe|
000017A0: 72 20 6F 66 20 62 79 74 65 73 20 69 6E 20 74 68 |r of bytes in th|
000017B0: 69 73 20 62 6C 6F 63 6B 20 28 30 29 20 20 20 20 |is block (0) |
000017C0: 20 20 20 20 5B 3D 20 32 35 36 20 41 4E 44 20 32 | [= 256 AND 2|
000017D0: 35 35 5D 0A 33 20 2D 20 32 35 39 20 20 20 20 20 |55].3 - 259 |
000017E0: 20 20 50 72 6F 67 72 61 6D 20 63 6F 64 65 20 66 | Program code f|
000017F0: 6F 72 20 66 69 72 73 74 20 62 6C 6F 63 6B 20 28 |or first block (|
00001800: 64 61 74 61 20 67 6F 65 73 20 69 6E 20 68 65 72 |data goes in her|
00001810: 65 2E 2E 2E 29 0A 32 36 30 20 20 20 20 20 20 20 |e...).260 |
00001820: 20 20 20 20 43 68 65 63 6B 73 75 6D 20 66 6F 72 | Checksum for|
00001830: 20 66 69 72 73 74 20 62 6C 6F 63 6B 20 28 77 68 | first block (wh|
00001840: 61 74 65 76 65 72 20 74 68 69 73 20 6D 61 79 20 |atever this may |
00001850: 62 65 29 0A 0A 32 36 31 20 20 20 20 20 20 20 20 |be)..261 |
00001860: 20 20 20 4C 6F 77 20 62 79 74 65 20 73 74 61 72 | Low byte star|
00001870: 74 20 61 64 64 72 65 73 73 20 6F 66 20 73 65 63 |t address of sec|
00001880: 6F 6E 64 20 62 6C 6F 63 6B 20 28 31 32 38 29 0A |ond block (128).|
00001890: 32 36 32 20 20 20 20 20 20 20 20 20 20 20 48 69 |262 Hi|
000018A0: 67 68 20 62 79 74 65 20 73 74 61 72 74 20 61 64 |gh byte start ad|
000018B0: 64 72 65 73 73 20 6F 66 20 73 65 63 6F 6E 64 20 |dress of second |
000018C0: 62 6C 6F 63 6B 20 28 34 29 0A 32 36 33 20 20 20 |block (4).263 |
000018D0: 20 20 20 20 20 20 20 20 4E 75 6D 62 65 72 20 6F | Number o|
000018E0: 66 20 62 79 74 65 73 20 69 6E 20 74 68 69 73 20 |f bytes in this |
000018F0: 62 6C 6F 63 6B 20 28 31 32 38 29 0A 32 36 34 20 |block (128).264 |
00001900: 2D 20 33 39 32 20 20 20 20 20 50 72 6F 67 72 61 |- 392 Progra|
00001910: 6D 20 63 6F 64 65 20 66 6F 72 20 73 65 63 6F 6E |m code for secon|
00001920: 64 20 62 6C 6F 63 6B 20 28 73 65 63 6F 6E 64 20 |d block (second |
00001930: 6C 6F 74 20 6F 66 20 64 61 74 61 20 68 65 72 65 |lot of data here|
00001940: 29 0A 33 39 33 20 20 20 20 20 20 20 20 20 20 20 |).393 |
00001950: 43 68 65 63 6B 73 75 6D 20 66 6F 72 20 73 65 63 |Checksum for sec|
00001960: 6F 6E 64 20 62 6C 6F 63 6B 20 28 77 68 61 74 65 |ond block (whate|
00001970: 76 65 72 29 0A 0A 4F 6B 61 79 2C 20 73 6F 20 74 |ver)..Okay, so t|
00001980: 68 69 73 20 6D 61 79 20 6E 6F 74 20 62 65 20 74 |his may not be t|
00001990: 68 65 20 62 65 73 74 20 64 65 73 63 72 69 70 74 |he best descript|
000019A0: 69 6F 6E 20 69 6E 20 74 68 65 20 77 6F 72 6C 64 |ion in the world|
000019B0: 2C 20 62 75 74 20 68 6F 70 65 66 75 6C 6C 79 20 |, but hopefully |
000019C0: 79 6F 75 0A 67 65 74 20 74 68 65 20 67 65 6E 65 |you.get the gene|
000019D0: 72 61 6C 20 69 64 65 61 2E 20 54 68 65 72 65 20 |ral idea. There |
000019E0: 6D 61 79 20 62 65 20 61 73 20 6D 61 6E 79 20 62 |may be as many b|
000019F0: 6C 6F 63 6B 73 20 6F 66 20 74 68 69 73 20 74 79 |locks of this ty|
00001A00: 70 65 20 61 73 20 79 6F 75 20 6E 65 65 64 2C 0A |pe as you need,.|
00001A10: 61 6E 64 20 74 68 65 79 63 61 6E 20 61 6C 6C 20 |and theycan all |
00001A20: 62 65 20 61 6E 79 20 73 69 7A 65 20 66 72 6F 6D |be any size from|
00001A30: 20 31 20 74 6F 20 32 35 36 20 62 79 74 65 73 20 | 1 to 256 bytes |
00001A40: 6C 6F 6E 67 2E 20 4F 6E 63 65 20 74 68 65 20 66 |long. Once the f|
00001A50: 69 6C 65 20 68 61 73 20 62 65 65 6E 0A 63 6F 6D |ile has been.com|
00001A60: 70 6C 65 74 65 6C 79 20 6C 6F 61 64 65 64 20 69 |pletely loaded i|
00001A70: 6E 74 6F 20 74 68 65 20 64 72 69 76 65 2C 20 65 |nto the drive, e|
00001A80: 78 65 63 75 74 69 6F 6E 20 73 74 61 72 74 73 20 |xecution starts |
00001A90: 66 72 6F 6D 20 74 68 65 20 73 74 61 72 74 20 61 |from the start a|
00001AA0: 64 64 72 65 73 73 20 6F 66 0A 74 68 65 20 46 49 |ddress of.the FI|
00001AB0: 52 53 54 20 62 6C 6F 63 6B 20 62 65 20 62 65 20 |RST block be be |
00001AC0: 74 72 61 6E 73 66 65 72 72 65 64 2E 0A 0A 7C 3E |transferred...|>|
00001AD0: 20 74 68 65 20 74 6F 74 61 6C 20 65 76 65 72 79 | the total every|
00001AE0: 20 74 69 6D 65 20 69 74 20 65 78 63 65 65 64 73 | time it exceeds|
00001AF0: 20 32 35 35 2E 20 54 68 75 73 20 74 68 65 20 63 | 255. Thus the c|
00001B00: 68 65 63 6B 73 75 6D 20 62 79 74 65 20 63 61 6E |hecksum byte can|
00001B10: 20 72 61 6E 67 65 20 66 72 6F 6D 0A 20 20 20 20 | range from. |
00001B20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00001B30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00001B40: 20 20 20 20 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E | ^^^^^^^^^^^^|
00001B50: 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E |^^^^^^^^^^^^^^^^|
00001B60: 5E 5E 5E 5E 5E 5E 5E 5E 5E 0A 7C 3E 20 31 2D 32 |^^^^^^^^^.|> 1-2|
00001B70: 35 35 2E 0A 20 20 20 5E 5E 5E 5E 5E 5E 0A 0A 54 |55.. ^^^^^^..T|
00001B80: 68 65 20 63 68 65 63 6B 73 75 6D 20 63 6F 75 6C |he checksum coul|
00001B90: 64 20 62 65 20 30 20 69 66 20 61 6C 6C 20 74 68 |d be 0 if all th|
00001BA0: 65 20 64 61 74 61 20 62 79 74 65 73 20 77 65 72 |e data bytes wer|
00001BB0: 65 20 30 20 3A 2D 29 0A 0A 53 65 72 69 6F 75 73 |e 0 :-)..Serious|
00001BC0: 6C 79 20 74 68 6F 75 67 68 2C 20 74 68 65 20 70 |ly though, the p|
00001BD0: 6F 69 6E 74 20 6F 66 20 68 61 76 69 6E 67 20 74 |oint of having t|
00001BE0: 68 65 20 63 68 65 63 6B 73 75 6D 20 63 61 6C 63 |he checksum calc|
00001BF0: 75 6C 61 74 65 64 20 69 6E 20 74 68 69 73 20 77 |ulated in this w|
00001C00: 61 79 20 69 73 20 74 6F 0A 6D 61 6B 65 20 75 73 |ay is to.make us|
00001C10: 65 20 6F 66 20 74 68 65 20 63 61 72 72 79 20 62 |e of the carry b|
00001C20: 69 74 20 69 6E 20 6D 61 63 68 69 6E 65 20 63 6F |it in machine co|
00001C30: 64 65 20 61 64 64 69 74 69 6F 6E 20 69 66 20 61 |de addition if a|
00001C40: 20 63 61 72 72 79 20 69 73 20 67 65 6E 65 72 61 | carry is genera|
00001C50: 74 65 64 2E 20 54 68 65 0A 70 6F 69 6E 74 20 63 |ted. The.point c|
00001C60: 61 6E 20 62 65 20 6D 61 64 65 20 6D 6F 72 65 20 |an be made more |
00001C70: 63 6C 65 61 72 6C 79 20 69 6E 20 74 68 65 20 66 |clearly in the f|
00001C80: 6F 6C 6C 6F 77 69 6E 67 20 63 6F 64 65 20 66 72 |ollowing code fr|
00001C90: 61 67 6D 65 6E 74 3A 0A 0A 20 20 20 20 20 20 20 |agment:.. |
00001CA0: 20 5B 61 63 63 75 6D 75 6C 61 74 6F 72 20 68 6F | [accumulator ho|
00001CB0: 6C 64 73 20 63 75 72 72 65 6E 74 20 64 61 74 61 |lds current data|
00001CC0: 20 62 79 74 65 5D 0A 20 20 20 20 20 20 20 20 63 | byte]. c|
00001CD0: 6C 63 20 20 20 20 20 20 20 20 3B 43 6C 65 61 72 |lc ;Clear|
00001CE0: 20 63 61 72 72 79 20 62 69 74 20 66 6F 72 20 66 | carry bit for f|
00001CF0: 69 72 73 74 20 61 64 64 0A 20 20 20 20 20 20 20 |irst add. |
00001D00: 20 61 64 63 20 24 38 37 20 20 20 20 3B 41 64 64 | adc $87 ;Add|
00001D10: 20 62 79 74 65 20 74 6F 20 63 75 72 72 65 6E 74 | byte to current|
00001D20: 20 63 68 65 63 6B 73 75 6D 0A 20 20 20 20 20 20 | checksum. |
00001D30: 20 20 61 64 63 20 23 24 30 30 20 20 20 3B 41 64 | adc #$00 ;Ad|
00001D40: 64 20 63 61 72 72 79 20 62 69 74 20 74 6F 20 63 |d carry bit to c|
00001D50: 68 65 63 6B 73 75 6D 0A 20 20 20 20 20 20 20 20 |hecksum. |
00001D60: 73 74 61 20 24 38 37 20 20 20 20 3B 53 61 76 65 |sta $87 ;Save|
00001D70: 20 63 68 65 63 6B 73 75 6D 20 74 6F 20 6D 65 6D | checksum to mem|
00001D80: 6F 72 79 0A 0A 49 66 20 74 68 65 20 73 75 6D 20 |ory..If the sum |
00001D90: 6F 66 20 74 68 65 20 61 63 63 75 6D 75 6C 61 74 |of the accumulat|
00001DA0: 6F 72 20 61 6E 64 20 74 68 65 20 63 6F 6E 74 65 |or and the conte|
00001DB0: 6E 74 73 20 6F 66 20 6C 6F 63 61 74 69 6F 6E 20 |nts of location |
00001DC0: 24 38 37 20 69 73 20 67 72 65 61 74 65 72 20 74 |$87 is greater t|
00001DD0: 68 61 6E 0A 23 24 46 46 20 74 68 65 6E 20 74 68 |han.#$FF then th|
00001DE0: 65 20 63 61 72 72 79 20 66 6C 61 67 20 77 69 6C |e carry flag wil|
00001DF0: 6C 20 62 65 20 73 65 74 2C 20 69 6E 20 6F 72 64 |l be set, in ord|
00001E00: 65 72 20 74 6F 20 64 6F 20 6D 75 6C 74 69 2D 62 |er to do multi-b|
00001E10: 79 74 65 20 61 64 64 69 74 69 6F 6E 0A 63 6F 72 |yte addition.cor|
00001E20: 72 65 63 74 6C 79 2E 20 49 6E 73 74 65 61 64 20 |rectly. Instead |
00001E30: 6F 66 20 61 64 64 69 6E 67 20 74 68 69 73 20 74 |of adding this t|
00001E40: 6F 20 61 20 73 65 63 6F 6E 64 20 62 79 74 65 20 |o a second byte |
00001E50: 68 6F 77 65 76 65 72 2C 20 69 74 20 69 73 20 61 |however, it is a|
00001E60: 64 64 65 64 20 74 6F 20 74 68 65 0A 73 61 6D 65 |dded to the.same|
00001E70: 20 62 79 74 65 20 77 68 69 63 68 20 67 65 6E 65 | byte which gene|
00001E80: 72 61 74 65 64 20 74 68 65 20 63 61 72 72 79 2E |rated the carry.|
00001E90: 20 54 68 69 73 20 63 61 75 73 65 73 20 74 68 65 | This causes the|
00001EA0: 20 76 61 6C 75 65 20 69 6E 20 74 68 65 20 61 63 | value in the ac|
00001EB0: 63 75 6D 75 6C 61 74 6F 72 0A 74 6F 20 62 65 20 |cumulator.to be |
00001EC0: 69 6E 63 72 65 6D 65 6E 74 65 64 20 62 79 20 31 |incremented by 1|
00001ED0: 20 2D 20 74 68 65 20 73 61 6D 65 20 61 73 20 69 | - the same as i|
00001EE0: 66 20 23 24 46 46 20 68 61 64 20 62 65 65 6E 20 |f #$FF had been |
00001EF0: 73 75 62 74 72 61 63 74 65 64 20 66 72 6F 6D 20 |subtracted from |
00001F00: 69 74 2E 0A 0A 49 66 20 74 68 65 20 73 75 6D 20 |it...If the sum |
00001F10: 69 73 20 6F 66 20 74 68 65 20 61 63 63 75 6D 75 |is of the accumu|
00001F20: 6C 61 74 6F 72 20 61 6E 64 20 74 68 65 20 63 6F |lator and the co|
00001F30: 6E 74 65 6E 74 73 20 6F 66 20 6C 6F 63 61 74 69 |ntents of locati|
00001F40: 6F 6E 20 24 38 37 20 69 73 20 6C 65 73 73 20 74 |on $87 is less t|
00001F50: 68 61 6E 0A 6F 72 20 65 71 75 61 6C 20 74 6F 20 |han.or equal to |
00001F60: 23 24 46 46 2C 20 74 68 65 6E 20 6E 6F 20 63 61 |#$FF, then no ca|
00001F70: 72 72 79 20 69 73 20 67 65 6E 65 72 61 74 65 64 |rry is generated|
00001F80: 20 61 6E 64 20 6E 6F 20 66 75 72 74 68 65 72 20 | and no further |
00001F90: 61 64 64 69 74 69 6F 6E 20 6F 72 0A 73 75 62 74 |addition or.subt|
00001FA0: 72 61 63 74 69 6F 6E 69 73 20 6E 65 65 64 65 64 |ractionis needed|
00001FB0: 2E 0A 0A 7C 3E 20 20 20 20 20 20 42 65 6C 6F 77 |...|> Below|
00001FC0: 20 69 73 20 61 20 70 72 6F 67 72 61 6D 20 77 68 | is a program wh|
00001FD0: 69 63 68 20 77 69 6C 6C 20 6D 61 6B 65 20 69 74 |ich will make it|
00001FE0: 20 65 61 73 69 65 72 20 66 6F 72 20 79 6F 75 20 | easier for you |
00001FF0: 74 6F 20 63 72 65 61 74 65 20 61 20 55 53 52 0A |to create a USR.|
00002000: 7C 3E 20 66 69 6C 65 20 69 6E 20 74 68 65 20 72 ||> file in the r|
00002010: 65 71 75 69 72 65 64 20 66 6F 72 6D 61 74 2C 20 |equired format, |
00002020: 73 6F 20 74 68 61 74 20 69 74 20 63 61 6E 20 62 |so that it can b|
00002030: 65 20 65 78 65 63 75 74 65 64 20 62 79 20 74 68 |e executed by th|
00002040: 65 20 75 74 69 6C 69 74 79 0A 7C 3E 20 6C 6F 61 |e utility.|> loa|
00002050: 64 65 72 20 63 6F 6D 6D 61 6E 64 2E 2E 2E 0A 0A |der command.....|
00002060: 48 65 72 65 20 69 73 20 61 20 6E 65 77 20 76 65 |Here is a new ve|
00002070: 72 73 69 6F 6E 20 74 68 65 20 74 68 65 20 70 72 |rsion the the pr|
00002080: 6F 67 72 61 6D 2C 20 6D 6F 64 69 66 69 65 64 20 |ogram, modified |
00002090: 74 6F 20 68 61 6E 64 6C 65 20 6D 75 6C 74 69 70 |to handle multip|
000020A0: 6C 65 20 64 61 74 61 20 62 6C 6F 63 6B 73 2C 0A |le data blocks,.|
000020B0: 61 6E 64 20 61 20 6D 61 78 69 6D 75 6D 20 70 72 |and a maximum pr|
000020C0: 6F 67 72 61 6D 20 73 69 7A 65 20 6F 66 20 32 35 |ogram size of 25|
000020D0: 36 20 62 79 74 65 73 20 70 65 72 20 62 6C 6F 63 |6 bytes per bloc|
000020E0: 6B 3A 0A 0A 20 20 20 20 20 20 20 20 31 30 20 20 |k:.. 10 |
000020F0: 4F 50 45 4E 32 2C 38 2C 32 2C 22 30 3A 26 66 69 |OPEN2,8,2,"0:&fi|
00002100: 6C 65 6E 61 6D 65 2C 55 2C 57 22 0A 20 20 20 20 |lename,U,W". |
00002110: 20 20 20 20 32 30 20 20 52 45 41 44 4E 42 0A 20 | 20 READNB. |
00002120: 20 20 20 20 20 20 20 33 30 20 20 52 45 41 44 4C | 30 READL|
00002130: 4F 2C 48 49 2C 4C 4E 3A 43 3D 4C 4F 2B 48 49 3A |O,HI,LN:C=LO+HI:|
00002140: 43 3D 43 2B 28 43 3E 32 35 35 29 2A 32 35 35 0A |C=C+(C>255)*255.|
00002150: 20 20 20 20 20 20 20 20 34 30 20 20 43 3D 43 2B | 40 C=C+|
00002160: 28 4C 4E 41 4E 44 32 35 35 29 3A 43 3D 43 2B 28 |(LNAND255):C=C+(|
00002170: 43 3E 32 35 35 29 2A 32 35 35 0A 20 20 20 20 20 |C>255)*255. |
00002180: 20 20 20 35 30 20 20 50 52 49 4E 54 23 32 2C 43 | 50 PRINT#2,C|
00002190: 48 52 24 28 4C 4F 29 3B 43 48 52 24 28 48 49 29 |HR$(LO);CHR$(HI)|
000021A0: 3B 43 48 52 24 28 4C 4E 41 4E 44 32 35 35 29 3B |;CHR$(LNAND255);|
000021B0: 0A 20 20 20 20 20 20 20 20 36 30 20 20 52 45 41 |. 60 REA|
000021C0: 44 44 3A 50 52 49 4E 54 23 32 2C 43 48 52 24 28 |DD:PRINT#2,CHR$(|
000021D0: 44 29 3B 0A 20 20 20 20 20 20 20 20 37 30 20 20 |D);. 70 |
000021E0: 43 3D 43 2B 44 3A 43 3D 43 2B 28 43 3E 32 35 35 |C=C+D:C=C+(C>255|
000021F0: 29 2A 32 35 35 0A 20 20 20 20 20 20 20 20 38 30 |)*255. 80|
00002200: 20 20 4C 4E 3D 4C 4E 2D 31 3A 49 46 4C 4E 3E 30 | LN=LN-1:IFLN>0|
00002210: 54 48 45 4E 36 30 0A 20 20 20 20 20 20 20 20 39 |THEN60. 9|
00002220: 30 20 20 50 52 49 4E 54 23 32 2C 43 48 52 24 28 |0 PRINT#2,CHR$(|
00002230: 43 29 3B 0A 20 20 20 20 20 20 20 20 31 30 30 20 |C);. 100 |
00002240: 4E 42 3D 4E 42 2D 31 3A 49 46 4E 42 3E 30 54 48 |NB=NB-1:IFNB>0TH|
00002250: 45 4E 33 30 0A 20 20 20 20 20 20 20 20 31 31 30 |EN30. 110|
00002260: 20 43 4C 4F 53 45 32 0A 20 20 20 20 20 20 20 20 | CLOSE2. |
00002270: 31 32 30 20 45 4E 44 0A 20 20 20 20 20 20 20 20 |120 END. |
00002280: 31 39 30 20 3A 0A 20 20 20 20 20 20 20 20 32 30 |190 :. 20|
00002290: 30 20 44 41 54 41 32 20 20 20 20 20 20 20 3A 52 |0 DATA2 :R|
000022A0: 45 4D 20 6E 75 6D 62 65 72 20 6F 66 20 64 61 74 |EM number of dat|
000022B0: 61 20 62 6C 6F 63 6B 73 0A 20 20 20 20 20 20 20 |a blocks. |
000022C0: 20 32 31 30 20 44 41 54 41 31 32 38 2C 33 20 20 | 210 DATA128,3 |
000022D0: 20 3A 52 45 4D 20 6C 6F 2F 68 69 20 73 74 61 72 | :REM lo/hi star|
000022E0: 74 20 61 64 64 72 65 73 73 20 6F 66 20 66 69 72 |t address of fir|
000022F0: 73 74 20 62 6C 6F 63 6B 0A 20 20 20 20 20 20 20 |st block. |
00002300: 20 32 32 30 20 44 41 54 41 36 20 20 20 20 20 20 | 220 DATA6 |
00002310: 20 3A 52 45 4D 20 6C 65 6E 67 74 68 20 6F 66 20 | :REM length of |
00002320: 66 69 72 73 74 20 62 6C 6F 63 6B 0A 20 20 20 20 |first block. |
00002330: 20 20 20 20 32 33 30 20 3A 20 20 20 20 20 20 20 | 230 : |
00002340: 20 20 20 20 20 52 45 4D 20 70 72 6F 67 72 61 6D | REM program|
00002350: 20 63 6F 64 65 0A 20 20 20 20 20 20 20 20 32 34 | code. 24|
00002360: 30 20 44 41 54 41 33 32 2C 37 31 2C 31 39 38 2C |0 DATA32,71,198,|
00002370: 37 36 2C 30 2C 33 0A 20 20 20 20 20 20 20 20 33 |76,0,3. 3|
00002380: 30 30 20 44 41 54 41 30 2C 33 20 20 20 20 20 3A |00 DATA0,3 :|
00002390: 52 45 4D 20 6C 6F 2F 68 69 20 73 74 61 72 74 20 |REM lo/hi start |
000023A0: 61 64 64 72 65 73 73 20 6F 66 20 73 65 63 6F 6E |address of secon|
000023B0: 64 20 62 6C 6F 63 6B 0A 20 20 20 20 20 20 20 20 |d block. |
000023C0: 33 31 30 20 44 41 54 41 32 36 20 20 20 20 20 20 |310 DATA26 |
000023D0: 3A 52 45 4D 20 6C 65 6E 67 74 68 20 6F 66 20 73 |:REM length of s|
000023E0: 65 63 6F 6E 64 20 62 6C 6F 63 6B 0A 20 20 20 20 |econd block. |
000023F0: 20 20 20 20 33 32 30 20 3A 20 20 20 20 20 20 20 | 320 : |
00002400: 20 20 20 20 20 52 45 4D 20 72 65 73 74 20 6F 66 | REM rest of|
00002410: 20 70 72 6F 67 72 61 6D 20 63 6F 64 65 0A 20 20 | program code. |
00002420: 20 20 20 20 20 20 33 33 30 20 44 41 54 41 31 37 | 330 DATA17|
00002430: 33 2C 30 2C 32 38 2C 34 31 2C 31 36 2C 32 30 31 |3,0,28,41,16,201|
00002440: 2C 31 36 2C 32 30 38 2C 31 31 0A 20 20 20 20 20 |,16,208,11. |
00002450: 20 20 20 33 34 30 20 44 41 54 41 31 36 39 2C 32 | 340 DATA169,2|
00002460: 34 37 2C 34 35 2C 30 2C 32 38 2C 31 34 31 2C 30 |47,45,0,28,141,0|
00002470: 2C 32 38 2C 37 36 0A 20 20 20 20 20 20 20 20 33 |,28,76. 3|
00002480: 35 30 20 44 41 54 41 30 2C 33 2C 33 32 2C 32 34 |50 DATA0,3,32,24|
00002490: 2C 31 39 33 2C 37 36 2C 30 2C 33 0A 0A 54 68 65 |,193,76,0,3..The|
000024A0: 20 65 78 61 6D 70 6C 65 20 63 6F 64 65 20 68 65 | example code he|
000024B0: 72 65 20 69 73 20 6A 75 73 74 20 61 20 6D 69 6E |re is just a min|
000024C0: 6F 72 20 65 78 74 65 6E 73 69 6F 6E 20 74 6F 20 |or extension to |
000024D0: 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 63 6F 64 |the original cod|
000024E0: 65 2E 20 49 74 0A 72 65 2D 69 6E 69 74 69 61 6C |e. It.re-initial|
000024F0: 69 7A 65 73 20 74 68 65 20 64 72 69 76 65 20 62 |izes the drive b|
00002500: 65 66 6F 72 65 20 6A 75 6D 70 69 6E 67 20 74 6F |efore jumping to|
00002510: 20 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 63 6F | the original co|
00002520: 64 65 2E 20 54 68 69 73 20 69 73 20 6A 75 73 74 |de. This is just|
00002530: 20 74 6F 0A 64 65 6D 6F 6E 73 74 72 61 74 65 20 | to.demonstrate |
00002540: 74 68 61 74 20 62 6F 74 68 20 70 61 72 74 73 20 |that both parts |
00002550: 6F 66 20 74 68 65 20 63 6F 64 65 20 61 72 65 20 |of the code are |
00002560: 62 65 69 6E 67 20 6C 6F 61 64 65 64 20 61 6E 64 |being loaded and|
00002570: 20 65 78 65 63 75 74 65 64 0A 63 6F 72 72 65 63 | executed.correc|
00002580: 74 6C 79 2E 20 0A 0A 7C 3E 20 45 52 52 4F 52 53 |tly. ..|> ERRORS|
00002590: 20 54 48 41 54 20 43 41 4E 20 4F 43 43 55 52 0A | THAT CAN OCCUR.|
000025A0: 7C 3E 20 0A 7C 3E 20 35 31 2C 20 27 6F 76 65 72 ||> .|> 51, 'over|
000025B0: 66 6C 6F 77 20 69 6E 20 72 65 63 6F 72 64 27 0A |flow in record'.|
000025C0: 7C 3E 20 20 20 20 20 20 20 20 20 45 69 74 68 65 ||> Eithe|
000025D0: 72 3A 20 31 2E 20 54 68 65 20 65 6E 64 20 6F 66 |r: 1. The end of|
000025E0: 20 74 68 65 20 66 69 6C 65 20 77 61 73 20 72 65 | the file was re|
000025F0: 61 63 68 65 64 20 62 65 66 6F 72 65 20 74 68 65 |ached before the|
00002600: 20 63 68 65 63 6B 73 75 6D 0A 7C 3E 20 20 20 20 | checksum.|> |
00002610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002620: 62 79 74 65 20 77 61 73 20 72 65 61 64 2E 0A 7C |byte was read..||
00002630: 3E 20 20 20 20 20 20 20 20 20 6F 72 20 20 20 20 |> or |
00002640: 20 20 32 2E 20 54 68 65 20 66 69 6C 65 20 63 6F | 2. The file co|
00002650: 6E 74 61 69 6E 73 20 65 78 74 72 61 20 62 79 74 |ntains extra byt|
00002660: 65 73 20 6F 66 20 64 61 74 61 20 61 66 74 65 72 |es of data after|
00002670: 20 74 68 65 20 63 68 65 63 6B 73 75 6D 0A 20 20 | the checksum. |
00002680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00002690: 20 20 20 20 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E | ^^^^^^^^^^^^|
000026A0: 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E |^^^^^^^^^^^^^^^^|
000026B0: 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E |^^^^^^^^^^^^^^^^|
000026C0: 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 5E 0A 7C 3E 20 |^^^^^^^^^^^^.|> |
000026D0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000026E0: 20 20 20 62 79 74 65 2E 0A 20 20 20 20 20 20 20 | byte.. |
000026F0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5E | ^|
00002700: 5E 5E 5E 5E 0A 7C 3E 20 20 20 20 20 20 20 20 20 |^^^^.|> |
00002710: 43 68 65 63 6B 20 74 68 65 20 6C 65 6E 67 74 68 |Check the length|
00002720: 20 62 79 74 65 20 69 6E 20 74 68 65 20 75 73 72 | byte in the usr|
00002730: 20 66 69 6C 65 20 28 70 6F 73 69 74 69 6F 6E 20 | file (position |
00002740: 33 2C 20 61 66 74 65 72 20 6C 6F 2F 68 69 2E 29 |3, after lo/hi.)|
00002750: 0A 0A 54 68 65 20 73 65 63 6F 6E 64 20 63 6F 6E |..The second con|
00002760: 64 69 74 69 6F 6E 20 69 73 20 6E 6F 74 20 71 75 |dition is not qu|
00002770: 69 74 65 20 61 63 63 75 72 61 74 65 2E 20 49 66 |ite accurate. If|
00002780: 20 65 6E 64 2D 6F 66 2D 66 69 6C 65 20 69 73 20 | end-of-file is |
00002790: 72 65 61 63 68 65 64 20 62 65 66 6F 72 65 0A 74 |reached before.t|
000027A0: 68 65 20 64 72 69 76 65 20 65 78 70 65 63 74 73 |he drive expects|
000027B0: 20 74 6F 20 72 65 61 64 20 74 68 65 20 63 68 65 | to read the che|
000027C0: 63 6B 73 75 6D 2C 20 74 68 65 6E 20 74 68 69 73 |cksum, then this|
000027D0: 20 65 72 72 6F 72 20 77 69 6C 6C 20 6F 63 63 75 | error will occu|
000027E0: 72 2E 20 49 66 20 65 78 74 72 61 0A 62 79 74 65 |r. If extra.byte|
000027F0: 73 20 61 70 70 65 61 72 20 61 66 74 65 72 20 74 |s appear after t|
00002800: 68 65 20 63 68 65 63 6B 73 75 6D 2C 20 74 68 65 |he checksum, the|
00002810: 20 64 72 69 76 65 20 61 73 73 75 6D 65 73 20 74 | drive assumes t|
00002820: 68 65 73 65 20 74 6F 20 62 65 20 74 68 65 20 73 |hese to be the s|
00002830: 74 61 72 74 20 6F 66 20 61 0A 6E 65 77 20 62 6C |tart of a.new bl|
00002840: 6F 63 6B 20 6F 66 20 64 61 74 61 20 61 6E 64 20 |ock of data and |
00002850: 77 69 6C 6C 20 74 72 79 20 74 6F 20 69 6E 74 65 |will try to inte|
00002860: 72 70 72 65 74 20 74 68 65 73 65 20 61 73 20 61 |rpret these as a|
00002870: 64 64 72 65 73 73 20 62 79 74 65 73 2C 20 6C 65 |ddress bytes, le|
00002880: 6E 67 74 68 0A 62 79 74 65 2C 20 64 61 74 61 20 |ngth.byte, data |
00002890: 62 79 74 65 73 20 65 74 63 20 61 73 20 61 62 6F |bytes etc as abo|
000028A0: 76 65 2E 20 57 68 65 6E 20 65 6E 64 2D 6F 66 2D |ve. When end-of-|
000028B0: 66 69 6C 65 20 61 70 70 65 61 72 73 2C 20 74 68 |file appears, th|
000028C0: 65 20 64 72 69 76 65 20 77 69 6C 6C 20 72 65 70 |e drive will rep|
000028D0: 6F 72 74 0A 74 68 69 73 20 65 72 72 6F 72 2C 20 |ort.this error, |
000028E0: 73 69 6E 63 65 20 69 74 20 69 73 20 65 78 70 65 |since it is expe|
000028F0: 63 74 69 6E 67 20 61 6E 6F 74 68 65 72 20 62 6C |cting another bl|
00002900: 6F 63 6B 20 6F 66 20 64 61 74 61 20 74 6F 20 61 |ock of data to a|
00002910: 70 70 65 61 72 20 61 6E 64 20 63 61 6E 6E 6F 74 |ppear and cannot|
00002920: 0A 63 6F 6D 70 6C 65 74 65 20 74 68 65 20 74 72 |.complete the tr|
00002930: 61 6E 73 66 65 72 20 6F 66 20 74 68 69 73 20 69 |ansfer of this i|
00002940: 6E 74 6F 20 6D 65 6D 6F 72 79 2E 20 48 65 6E 63 |nto memory. Henc|
00002950: 65 20 74 68 65 20 64 65 66 69 6E 69 74 69 6F 6E |e the definition|
00002960: 20 6F 66 20 74 68 69 73 20 65 72 72 6F 72 0A 73 | of this error.s|
00002970: 68 6F 75 6C 64 20 62 65 3A 0A 0A 20 20 20 20 20 |hould be:.. |
00002980: 20 20 20 54 68 65 20 65 6E 64 20 6F 66 20 74 68 | The end of th|
00002990: 65 20 66 69 6C 65 20 77 61 73 20 65 6E 63 6F 75 |e file was encou|
000029A0: 6E 74 65 72 65 64 20 75 6E 65 78 70 65 63 74 65 |ntered unexpecte|
000029B0: 64 6C 79 2E 20 4D 61 79 20 69 6E 64 69 63 61 74 |dly. May indicat|
000029C0: 65 20 61 6E 0A 20 20 20 20 20 20 20 20 69 6E 63 |e an. inc|
000029D0: 6F 72 72 65 63 74 20 6C 65 6E 67 74 68 20 62 79 |orrect length by|
000029E0: 74 65 2C 20 6F 72 20 61 64 64 69 74 69 6F 6E 61 |te, or additiona|
000029F0: 6C 20 64 61 74 61 20 77 72 69 74 74 65 6E 20 61 |l data written a|
00002A00: 66 74 65 72 20 74 68 65 20 65 6E 64 20 6F 66 20 |fter the end of |
00002A10: 74 68 65 0A 20 20 20 20 20 20 20 20 6C 61 73 74 |the. last|
00002A20: 20 64 61 74 61 20 62 6C 6F 63 6B 2E 0A 0A 4E 6F | data block...No|
00002A30: 74 65 20 74 68 65 20 73 65 6D 69 63 6F 6C 6F 6E |te the semicolon|
00002A40: 20 61 74 20 74 68 65 20 65 6E 64 20 6F 66 20 6C | at the end of l|
00002A50: 69 6E 65 20 39 30 20 6F 66 20 74 68 65 20 70 72 |ine 90 of the pr|
00002A60: 6F 67 72 61 6D 2E 20 49 66 20 74 68 69 73 20 77 |ogram. If this w|
00002A70: 65 72 65 20 6F 6D 69 74 74 65 64 2C 0A 61 20 63 |ere omitted,.a c|
00002A80: 61 72 72 69 61 67 65 20 72 65 74 75 72 6E 20 62 |arriage return b|
00002A90: 79 74 65 20 77 6F 75 6C 64 20 62 65 20 73 65 6E |yte would be sen|
00002AA0: 74 20 62 79 20 74 68 65 20 63 6F 6D 70 75 74 65 |t by the compute|
00002AB0: 72 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 |r after the chec|
00002AC0: 6B 73 75 6D 20 62 79 74 65 0A 61 6E 64 20 6D 61 |ksum byte.and ma|
00002AD0: 79 20 62 65 20 74 68 65 20 63 61 75 73 65 20 6F |y be the cause o|
00002AE0: 66 20 74 68 69 73 20 6D 65 73 73 61 67 65 2E 0A |f this message..|
00002AF0: 0A 4F 6E 65 20 63 61 75 74 69 6F 6E 20 73 68 6F |.One caution sho|
00002B00: 75 6C 64 20 62 65 20 61 64 64 65 64 20 61 74 20 |uld be added at |
00002B10: 74 68 69 73 20 70 6F 69 6E 74 2E 20 41 6C 74 68 |this point. Alth|
00002B20: 6F 75 67 68 20 64 61 74 61 20 6D 61 79 20 62 65 |ough data may be|
00002B30: 20 74 72 61 6E 73 66 65 72 72 65 64 20 74 6F 0A | transferred to.|
00002B40: 61 6E 79 20 61 64 64 72 65 73 73 20 69 6E 20 74 |any address in t|
00002B50: 68 65 20 52 41 4D 20 6F 66 20 74 68 65 20 64 72 |he RAM of the dr|
00002B60: 69 76 65 2C 20 69 74 20 73 68 6F 75 6C 64 20 62 |ive, it should b|
00002B70: 65 20 72 65 6D 65 6D 62 65 72 65 64 20 74 68 61 |e remembered tha|
00002B80: 74 20 70 61 72 74 20 6F 66 20 74 68 65 0A 6D 65 |t part of the.me|
00002B90: 6D 6F 72 79 20 77 69 6C 6C 20 62 65 20 61 6C 6C |mory will be all|
00002BA0: 6F 63 61 74 65 64 20 74 6F 20 62 75 66 66 65 72 |ocated to buffer|
00002BB0: 69 6E 67 20 74 68 65 20 66 69 6C 65 20 61 73 20 |ing the file as |
00002BC0: 69 74 20 63 6F 6D 65 73 20 6F 66 66 20 74 68 65 |it comes off the|
00002BD0: 20 64 69 73 6B 2E 20 54 68 75 73 0A 69 74 20 6D | disk. Thus.it m|
00002BE0: 61 79 20 62 65 20 70 6F 73 73 69 62 6C 65 20 74 |ay be possible t|
00002BF0: 6F 20 6F 76 65 72 77 72 69 74 65 20 69 6E 63 6F |o overwrite inco|
00002C00: 6D 69 6E 67 20 64 61 74 61 20 62 65 69 6E 67 20 |ming data being |
00002C10: 62 75 66 66 65 72 65 64 20 69 6E 20 6D 65 6D 6F |buffered in memo|
00002C20: 72 79 20 62 65 66 6F 72 65 0A 69 74 20 63 61 6E |ry before.it can|
00002C30: 20 62 65 20 74 72 61 6E 73 66 65 72 72 65 64 20 | be transferred |
00002C40: 63 6F 72 72 65 63 74 6C 79 20 74 6F 20 69 74 73 |correctly to its|
00002C50: 20 6E 65 77 20 6C 6F 63 61 74 69 6F 6E 2E 20 45 | new location. E|
00002C60: 78 70 65 72 69 6D 65 6E 74 61 74 69 6F 6E 20 6D |xperimentation m|
00002C70: 61 79 20 62 65 0A 74 68 65 20 62 65 73 74 20 77 |ay be.the best w|
00002C80: 61 79 20 6F 66 20 64 65 74 65 72 6D 69 6E 69 6E |ay of determinin|
00002C90: 67 20 77 68 69 63 68 20 61 72 65 61 73 20 61 72 |g which areas ar|
00002CA0: 65 20 22 73 61 66 65 22 20 61 6E 64 20 77 68 69 |e "safe" and whi|
00002CB0: 63 68 20 6F 6E 65 73 20 68 61 76 65 0A 70 72 6F |ch ones have.pro|
00002CC0: 62 6C 65 6D 73 2E 20 49 20 66 6F 75 6E 64 20 74 |blems. I found t|
00002CD0: 68 61 74 20 74 68 65 20 66 69 6C 65 20 73 65 65 |hat the file see|
00002CE0: 6D 65 64 20 74 6F 20 62 65 20 62 75 66 66 65 72 |med to be buffer|
00002CF0: 65 64 20 69 6E 20 6C 6F 63 61 74 69 6F 6E 73 20 |ed in locations |
00002D00: 24 30 36 30 30 20 74 6F 0A 24 30 37 30 30 2C 20 |$0600 to.$0700, |
00002D10: 62 75 74 20 74 68 69 73 20 77 6F 75 6C 64 20 64 |but this would d|
00002D20: 65 70 65 6E 64 20 6F 6E 20 68 6F 77 20 6D 61 79 |epend on how may|
00002D30: 20 66 69 6C 65 73 20 79 6F 75 20 68 61 64 20 6F | files you had o|
00002D40: 70 65 6E 2C 20 65 74 63 2E 0A 0A 4E 69 63 6B 2E |pen, etc...Nick.|
00002D50: 0A 0A 2D 2D 2D 2D 0A 20 65 6D 61 69 6C 3A 20 6E |..----. email: n|
00002D60: 63 75 6C 6C 40 63 6F 6D 70 2E 76 75 77 2E 61 63 |cull@comp.vuw.ac|
00002D70: 2E 6E 7A 20 20 20 20 56 69 63 74 6F 72 69 61 20 |.nz Victoria |
00002D80: 55 6E 69 76 65 72 73 69 74 79 20 6F 66 20 57 65 |University of We|
00002D90: 6C 6C 69 6E 67 74 6F 6E 2C 20 4E 65 77 20 5A 65 |llington, New Ze|
00002DA0: 61 6C 61 6E 64 2E 0A 0A |aland... |
FROM: STUCE@CSV.WARWICK.AC.UK (PETER WEI
GHILL).NEWSGROUPS: COMP.SYS.CBM.SUBJECT:
1541 DISK DRIVE COMMANDS..DATE: 25 SEP
1993 19:20:47 +0100.ORGANIZATION: COMMOD
ORE 64 SERVICES, UNIVERSITY OF WARWICK,
UK...TWO RARELY USED 1541 DISK DRIVE FUN
CTIONS...1. THE UTILITY LOADER '&' COMMA
ND...INTRODUCTION .. A LITTLE KN
OWN AND LITTLE USED COMMAND ON THE 1541
DISK DRIVE IS THE."&" COMMAND. THIS IS P
ROBABLY DUE TO THE FACT THAT THERE IS NO
MENTION OF IT.IN THE "1541 DISK DRIVE U
SERS GUIDE". MANY OTHER BOOKS ABOUT THE
DISK DRIVE.ALSO FAIL TO MENTION IT. AS T
O A USE FOR THE COMMAND, I HAVE NOT FOUN
D ONE.YET. PERHAPS SOMEONE COULD THINK O
F ONE. I WOULD EXPECT THAT THE 1570/1571
.AND 1581 DRIVE WILL ALSO CONTAIN THE "&
" COMMAND AS WELL, SINCE THEY ARE.BASED
ON THE 1541...UTILITY LOADER ("&" COMMA
ND).. THE UTILITY LOADER IS THE COMM
AND WHICH WILL LOAD A USR FILE FROM.DISK
INTO DISK DRIVE MEMORY WHERE IT WILL TH
EN EXECUTE. THE FORMAT FOR.THE COMMAND I
S AS FOLLOWS:.OPEN15,8,15:PRINT#15,"&FIL
ENAME":CLOSE15..USR FILES.. A USER F
ILE HAS TO FOLLOW CERTAIN GUIDLINES. IT
IS LIMITED TO JUST.ONE SECTOR AND THIS S
ECTOR IS CONSTRUCTED AS BELOW;..BYTE.0
START ADDRESS LOW ORDER.1 STAR
T ADDRESS HIGH ORDER.2 NUMBER OF BY
TES IN PROGRAM.3+ PROGRAM CODE BYTES
.LAST CHECKSUM.. THIS MEANS THAT T
HE MAXIMUM SIZE OF PROGRAM CODE IS 251 B
YTES. THE.CHECKSUM BYTE IS CALCULATED BY
ADDING ALL THE VALUES OF THE BYTES, STA
RTING.AT THE LOW ORDER START ADDRESS (BY
TE 0), WHILE ADDING YOU SUBTRACT 255 FRO
M.THE TOTAL EVERY TIME IT EXCEEDS 255. T
HUS THE CHECKSUM BYTE CAN RANGE FROM.1-2
55.. ONE FINAL CONSTRAINT IS THAT TH
E FILENAME MUST BEGIN WITH AN "&"..
BELOW IS A PROGRAM WHICH WILL MAKE IT EA
SIER FOR YOU TO CREATE A USR.FILE IN THE
REQUIRED FORMAT, SO THAT IT CAN BE EXEC
UTED BY THE UTILITY.LOADER COMMAND. THE
PROGRAM AUTOMATICALLY CALCULATES THE LEN
GTH OF THE CODE.AND ALSO THE CHECKSUM AT
THE END. ALL YOU NEED TO DO IS ADD YOUR
OWN CODE.TO THE DATA STATEMENTS BETWEEN
210 AND 300 AND SPECIFY A FILENAME IN L
INE 10...10 OPEN2,8,2,"0:&FILENAME,U,W"
.20 READLO,HI:C=LO+HI:IFC>255THENC=C-25
5.30 PRINT#2,CHR$(LO)CHR$(HI);.40 T$="
".50 READD:IFD=-1THEN100.60 C=C+D:IFC>
255THENC=C-255.70 T$=T$+CHR$(D).80 GOT
O50.100 L=LEN(T$).110 C=C+L:IFC>255THENC
=C-255.120 PRINT#2,CHR$(L)T$CHR$(C);.130
CLOSE2.140 END.170 :.200 DATA 0,5 :REM
LO/HI START ADDRESS.210 : REM PR
OGRAM CODE.220 DATA 173,0,28,41,16,201,1
6,208,11.230 DATA 169,247,45,0,28,141,0,
28,76.240 DATA 0,5,32,24,193,76,0,5.300
DATA -1 :REM PROGRAM DATA FINISHED..
THE EXAMPLE CODE IN THE PROGRAM IS NOT
THAT USEFUL, IT IS JUST THERE.TO SHOW H
OW THE UTILITY LOADER WORKS. IT JUST SWI
TCHES THE DRIVES LIGHT ON.AND OFF DEPEND
ING ON IF THE WRITE PROTECT SENSOR IS CO
VERED OR NOT.. IF YOU CAN THINK OF S
OMETHING WHICH COULD BE DONE WITH THE UT
ILITY.LOADER THEN I WOULD LOVE TO HEAR O
F IT...ERRORS THAT CAN OCCUR..39, 'FILE
NOT FOUND'. THIS OCCURS IF THE FI
LE YOU SPECIFIED USING THE UTILITY LOADE
R. COMMAND DOES NOT EXIST OR IS N
OT A USR FILE...50, 'RECORD NOT PRESENT'
. THE CHECKSUM CALCULATED BY TH
E DISK DRIVE AND THE CHECKSUM AT THE.
END OF THE FILE DIFFER...51, 'OVERF
LOW IN RECORD'. EITHER: 1. THE EN
D OF THE FILE WAS REACHED BEFORE THE CHE
CKSUM. BYTE WAS READ..
OR 2. THE FILE CONTAINS EXT
RA BYTES OF DATA AFTER THE CHECKSUM.
BYTE.. CHECK THE L
ENGTH BYTE IN THE USR FILE (POSITION 3,
AFTER LO/HI.)....2. CHECKING THAT A FILE
IS ON THE DISK...INTRODUCTION.. IF
YOU WROTE A PROGRAM WHICH NEEDED TO CHEC
K THAT A PARTICULAR FILE.EXISTED ON A DI
SK THEN YOU WOULD PROBABLY OPEN THE FILE
FOR A READ, THEN.CHECK THE ERROR CHANNE
L FOR 62, FILE NOT FOUND...THUS:.10 OPEN
15,8,15.20 OPEN2,8,2,"FILENAME,P,R".30 I
NPUT#15,E,E$.40 IFE>0THENPRINTE$:GOTO60.
50 PRINT"FILE EXISTS".60 CLOSE2:CLOSE15.
. ANOTHER WAY TO CHECK IF A FILE EXI
STS IS TO TRY TO RENAME IT AS ITSELF...T
HUS:.10 OPEN15,8,15,"R:FILENAME=FILENAME
".20 INPUT#15,E,E$.30 CLOSE15.40 PRINTE$
.. IF THE FILE EXISTS THEN THE ERROR
CREATED IS 63, FILE EXISTS,.OTHERWISE I
T IS 62, FILE NOT FOUND. JUDGE FOR YOURS
ELF WHICH WORKS BETTER....WRITTEN, SEPTE
MBER 93, BY PETER WEIGHILL. EMAIL: STU
CE@WARWICK.CSV.AC.UK....FROM: NICHOLAS.C
ULL@COMP.VUW.AC.NZ (NICHOLAS CULL).NEWSG
ROUPS: COMP.SYS.CBM.SUBJECT: RE: 1541 DI
SK DRIVE COMMANDS..DATE: 30 SEP 1993 00:
00:20 GMT.ORGANIZATION: DEPT. OF COMP. S
CI., VICTORIA UNI. OF WELLINGTON, NEW ZE
ALAND..ORIGINATOR: NCULL@COMP.VUW.AC.NZ.
..IN ARTICLE <28225V$1S3@TANSY.CSV.WARWI
CK.AC.UK>, STUCE@CSV.WARWICK.AC.UK. (PET
ER WEIGHILL) WRITES:.|> .|> 1. THE UTILI
TY LOADER '&' COMMAND........|> A U
SER FILE HAS TO FOLLOW CERTAIN GUIDLINES
. IT IS LIMITED TO JUST.
^^^
^^^^^^^^^^^^^^^^^^.|> ONE SECTOR AND THI
S SECTOR IS CONSTRUCTED AS BELOW;. ^^^
^^^^^^^..THIS IS INCORRECT. THE USER FIL
E MAY BE MORE THAN ONE SECTOR LONG, ALTH
OUGH THE.MAXIMUM SIZE OF THE PROGRAM COD
E IS LIMITED TO 256 BYTES. TO OBTAIN THI
S, BYTE.2 (THE NUMBER OF BYTES IN PROGRA
M) SHOULD BE SET TO 0. A FORMULA FOR THI
S.WOULD BE..(NB AND 255)..WHERE NB IS TH
E NUMBER OF BYTES. REMEMBER THAT THE CHE
CKSUM HAS TO BE UPDATED.IN A SIMILAR WAY
TOO, EG.. C = C+(NB AND 255): IF C>255
THEN C=C-255..THE NUMBER OF BYTES IN A B
LOCK-EXECUTE COMMAND IS LIMITED TO A SIN
GLE SECTOR,.WHICH IS 256 BYTES, ALTHOUGH
THESE CAN BE ALL DATA BYTES. MAYBE YOU
WERE.CONFUSING THE TWO COMMANDS?..|> .|>
BYTE.|> 0 START ADDRESS LOW ORDER
.|> 1 START ADDRESS HIGH ORDER.|> 2
NUMBER OF BYTES IN PROGRAM.|> 3+
PROGRAM CODE BYTES.|> LAST CHECKSUM
.|> ..IN FACT THERE CAN BE MORE THAN ONE
BLOCK OF THIS CONSTRUCTION PER FILE. TO
DO.THIS, SIMPLY REPEAT THE CONSTRUCTION
. FOR EXAMPLE, IF YOU WANTED TO HAVE A.P
ROGRAM WHICH SAT IN DRIVE LOCATIONS $030
0 TO $0400, AND $0480 TO $0500, THE.CONS
TRUCTION WOULD BE AS FOLLOWS:..BYTE.0
LOW BYTE START ADDRESS OF FIRS
T BLOCK (0).1 HIGH BYTE STAR
T ADDRESS OF FIRST BLOCK (3).2
NUMBER OF BYTES IN THIS BLOCK (0)
[= 256 AND 255].3 - 259 PROGRA
M CODE FOR FIRST BLOCK (DATA GOES IN HER
E...).260 CHECKSUM FOR FIRST B
LOCK (WHATEVER THIS MAY BE)..261
LOW BYTE START ADDRESS OF SECOND BLOC
K (128).262 HIGH BYTE START AD
DRESS OF SECOND BLOCK (4).263
NUMBER OF BYTES IN THIS BLOCK (128).264
- 392 PROGRAM CODE FOR SECOND BLOCK
(SECOND LOT OF DATA HERE).393
CHECKSUM FOR SECOND BLOCK (WHATEVER)..OK
AY, SO THIS MAY NOT BE THE BEST DESCRIPT
ION IN THE WORLD, BUT HOPEFULLY YOU.GET
THE GENERAL IDEA. THERE MAY BE AS MANY B
LOCKS OF THIS TYPE AS YOU NEED,.AND THEY
CAN ALL BE ANY SIZE FROM 1 TO 256 BYTES
LONG. ONCE THE FILE HAS BEEN.COMPLETELY
LOADED INTO THE DRIVE, EXECUTION STARTS
FROM THE START ADDRESS OF.THE FIRST BLOC
K BE BE TRANSFERRED...|> THE TOTAL EVERY
TIME IT EXCEEDS 255. THUS THE CHECKSUM
BYTE CAN RANGE FROM.
^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^.|> 1-255.. ^^^^^^..T
HE CHECKSUM COULD BE 0 IF ALL THE DATA B
YTES WERE 0 :-)..SERIOUSLY THOUGH, THE P
OINT OF HAVING THE CHECKSUM CALCULATED I
N THIS WAY IS TO.MAKE USE OF THE CARRY B
IT IN MACHINE CODE ADDITION IF A CARRY I
S GENERATED. THE.POINT CAN BE MADE MORE
CLEARLY IN THE FOLLOWING CODE FRAGMENT:.
. [ACCUMULATOR HOLDS CURRENT DATA
BYTE]. CLC ;CLEAR CARRY B
IT FOR FIRST ADD. ADC $87 ;ADD
BYTE TO CURRENT CHECKSUM. ADC #$
00 ;ADD CARRY BIT TO CHECKSUM.
STA $87 ;SAVE CHECKSUM TO MEMORY..IF
THE SUM OF THE ACCUMULATOR AND THE CONTE
NTS OF LOCATION $87 IS GREATER THAN.#$FF
THEN THE CARRY FLAG WILL BE SET, IN ORD
ER TO DO MULTI-BYTE ADDITION.CORRECTLY.
INSTEAD OF ADDING THIS TO A SECOND BYTE
HOWEVER, IT IS ADDED TO THE.SAME BYTE WH
ICH GENERATED THE CARRY. THIS CAUSES THE
VALUE IN THE ACCUMULATOR.TO BE INCREMEN
TED BY 1 - THE SAME AS IF #$FF HAD BEEN
SUBTRACTED FROM IT...IF THE SUM IS OF TH
E ACCUMULATOR AND THE CONTENTS OF LOCATI
ON $87 IS LESS THAN.OR EQUAL TO #$FF, TH
EN NO CARRY IS GENERATED AND NO FURTHER
ADDITION OR.SUBTRACTIONIS NEEDED...|>
BELOW IS A PROGRAM WHICH WILL MAKE IT
EASIER FOR YOU TO CREATE A USR.|> FILE
IN THE REQUIRED FORMAT, SO THAT IT CAN B
E EXECUTED BY THE UTILITY.|> LOADER COMM
AND.....HERE IS A NEW VERSION THE THE PR
OGRAM, MODIFIED TO HANDLE MULTIPLE DATA
BLOCKS,.AND A MAXIMUM PROGRAM SIZE OF 25
6 BYTES PER BLOCK:.. 10 OPEN2,8,
2,"0:&FILENAME,U,W". 20 READNB.
30 READLO,HI,LN:C=LO+HI:C=C+(C>2
55)*255. 40 C=C+(LNAND255):C=C+(
C>255)*255. 50 PRINT#2,CHR$(LO);
CHR$(HI);CHR$(LNAND255);. 60 REA
DD:PRINT#2,CHR$(D);. 70 C=C+D:C=
C+(C>255)*255. 80 LN=LN-1:IFLN>0
THEN60. 90 PRINT#2,CHR$(C);.
100 NB=NB-1:IFNB>0THEN30. 110
CLOSE2. 120 END. 190 :.
200 DATA2 :REM NUMBER OF DAT
A BLOCKS. 210 DATA128,3 :REM LO
/HI START ADDRESS OF FIRST BLOCK.
220 DATA6 :REM LENGTH OF FIRST BL
OCK. 230 : REM PROGRAM
CODE. 240 DATA32,71,198,76,0,3.
300 DATA0,3 :REM LO/HI START
ADDRESS OF SECOND BLOCK. 310 DATA
26 :REM LENGTH OF SECOND BLOCK.
320 : REM REST OF PROGRAM
CODE. 330 DATA173,0,28,41,16,201
,16,208,11. 340 DATA169,247,45,0,
28,141,0,28,76. 350 DATA0,3,32,24
,193,76,0,3..THE EXAMPLE CODE HERE IS JU
ST A MINOR EXTENSION TO THE ORIGINAL COD
E. IT.RE-INITIALIZES THE DRIVE BEFORE JU
MPING TO THE ORIGINAL CODE. THIS IS JUST
TO.DEMONSTRATE THAT BOTH PARTS OF THE C
ODE ARE BEING LOADED AND EXECUTED.CORREC
TLY. ..|> ERRORS THAT CAN OCCUR.|> .|> 5
1, 'OVERFLOW IN RECORD'.|> EITHE
R: 1. THE END OF THE FILE WAS REACHED BE
FORE THE CHECKSUM.|>
BYTE WAS READ..|> OR 2. THE
FILE CONTAINS EXTRA BYTES OF DATA AFTER
THE CHECKSUM. ^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^.|> BYTE.
. ^^^^^.|>
CHECK THE LENGTH BYTE IN THE USR FILE (P
OSITION 3, AFTER LO/HI.)..THE SECOND CON
DITION IS NOT QUITE ACCURATE. IF END-OF-
FILE IS REACHED BEFORE.THE DRIVE EXPECTS
TO READ THE CHECKSUM, THEN THIS ERROR W
ILL OCCUR. IF EXTRA.BYTES APPEAR AFTER T
HE CHECKSUM, THE DRIVE ASSUMES THESE TO
BE THE START OF A.NEW BLOCK OF DATA AND
WILL TRY TO INTERPRET THESE AS ADDRESS B
YTES, LENGTH.BYTE, DATA BYTES ETC AS ABO
VE. WHEN END-OF-FILE APPEARS, THE DRIVE
WILL REPORT.THIS ERROR, SINCE IT IS EXPE
CTING ANOTHER BLOCK OF DATA TO APPEAR AN
D CANNOT.COMPLETE THE TRANSFER OF THIS I
NTO MEMORY. HENCE THE DEFINITION OF THIS
ERROR.SHOULD BE:.. THE END OF TH
E FILE WAS ENCOUNTERED UNEXPECTEDLY. MAY
INDICATE AN. INCORRECT LENGTH BY
TE, OR ADDITIONAL DATA WRITTEN AFTER THE
END OF THE. LAST DATA BLOCK...NO
TE THE SEMICOLON AT THE END OF LINE 90 O
F THE PROGRAM. IF THIS WERE OMITTED,.A C
ARRIAGE RETURN BYTE WOULD BE SENT BY THE
COMPUTER AFTER THE CHECKSUM BYTE.AND MA
Y BE THE CAUSE OF THIS MESSAGE...ONE CAU
TION SHOULD BE ADDED AT THIS POINT. ALTH
OUGH DATA MAY BE TRANSFERRED TO.ANY ADDR
ESS IN THE RAM OF THE DRIVE, IT SHOULD B
E REMEMBERED THAT PART OF THE.MEMORY WIL
L BE ALLOCATED TO BUFFERING THE FILE AS
IT COMES OFF THE DISK. THUS.IT MAY BE PO
SSIBLE TO OVERWRITE INCOMING DATA BEING
BUFFERED IN MEMORY BEFORE.IT CAN BE TRAN
SFERRED CORRECTLY TO ITS NEW LOCATION. E
XPERIMENTATION MAY BE.THE BEST WAY OF DE
TERMINING WHICH AREAS ARE "SAFE" AND WHI
CH ONES HAVE.PROBLEMS. I FOUND THAT THE
FILE SEEMED TO BE BUFFERED IN LOCATIONS
$0600 TO.$0700, BUT THIS WOULD DEPEND ON
HOW MAY FILES YOU HAD OPEN, ETC...NICK.
..----. EMAIL: NCULL@COMP.VUW.AC.NZ V
ICTORIA UNIVERSITY OF WELLINGTON, NEW ZE
ALAND...
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL