C64HDBIO.SRC
FILE INFORMATION
FILENAME(S): C64HDBIO.SRC
FILE TYPE(S): SEQ
FILE SIZE: 16.3K
FIRST SEEN: 2025-11-30 16:59:23
APPEARS ON: 1 disk(s)
FILE HASH
9cc6e84fd791098c78b4b80f07856262b97d687e6e0189f1df1a36303d5ecaa1
FOUND ON DISKS (1 DISKS)
| DISK TITLE | FILENAME | FILE TYPE | COLLECTION | TRACK | SECTOR | ACTIONS |
|---|---|---|---|---|---|---|
| 64HDPROJ | C64HDBIO.SRC | SEQ | High Voltage Complete C64 Collection | 19 | 0 | DOWNLOAD FILE |
FILE CONTENT & ANALYSIS
00000000: 3B 42 50 55 54 22 48 41 52 44 49 53 4B 42 49 4F |;BPUT"HARDISKBIO| 00000010: 53 2E 53 52 43 0D 3B 52 50 55 54 22 48 41 52 44 |S.SRC.;RPUT"HARD| 00000020: 49 53 4B 42 49 4F 53 2E 53 52 43 0D 3B 0D 3B 2B |ISKBIOS.SRC.;.;+| 00000030: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00000040: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00000050: 0D 3B 2B 20 54 48 45 20 44 52 49 56 45 20 43 4F |.;+ THE DRIVE CO| 00000060: 4D 4D 41 4E 44 20 42 4C 4F 43 4B 20 28 44 43 42 |MMAND BLOCK (DCB| 00000070: 29 20 2B 0D 3B 2B 20 49 53 20 55 53 45 44 20 54 |) +.;+ IS USED T| 00000080: 4F 20 50 41 53 53 20 54 48 45 20 43 4F 4D 4D 41 |O PASS THE COMMA| 00000090: 4E 44 2C 20 20 2B 0D 3B 2B 20 43 59 4C 49 4E 44 |ND, +.;+ CYLIND| 000000A0: 45 52 2C 20 53 45 43 54 4F 52 2C 20 48 45 41 44 |ER, SECTOR, HEAD| 000000B0: 2C 20 42 4C 4F 43 4B 20 2B 0D 3B 2B 20 43 4F 55 |, BLOCK +.;+ COU| 000000C0: 4E 54 2C 20 41 4E 44 20 53 54 45 50 20 52 41 54 |NT, AND STEP RAT| 000000D0: 45 20 54 4F 20 54 48 45 20 20 20 2B 0D 3B 2B 20 |E TO THE +.;+ | 000000E0: 43 4F 4E 54 52 4F 4C 4C 45 52 2E 20 20 54 48 45 |CONTROLLER. THE| 000000F0: 20 4C 41 59 4F 55 54 20 4F 46 20 54 48 45 2B 0D | LAYOUT OF THE+.| 00000100: 3B 2B 20 44 43 42 20 46 4F 4C 4C 4F 57 53 3A 20 |;+ DCB FOLLOWS: | 00000110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000120: 20 2B 0D 3B 2B 20 20 20 20 20 20 20 20 20 20 20 | +.;+ | 00000130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000140: 20 20 20 20 2B 0D 3B 2B 20 42 59 54 45 20 20 20 | +.;+ BYTE | 00000150: 20 20 20 20 20 44 45 53 43 52 49 50 54 49 4F 4E | DESCRIPTION| 00000160: 20 20 20 20 20 20 20 2B 0D 3B 2B 20 20 30 20 20 | +.;+ 0 | 00000170: 20 20 4F 50 45 52 41 54 49 4F 4E 20 43 4F 44 45 | OPERATION CODE| 00000180: 20 20 20 20 20 20 20 20 20 20 2B 0D 3B 2B 20 20 | +.;+ | 00000190: 31 20 20 20 42 49 54 53 20 34 2C 36 2C 37 20 4E |1 BITS 4,6,7 N| 000001A0: 4F 54 20 55 53 45 44 2C 20 30 20 20 20 2B 0D 3B |OT USED, 0 +.;| 000001B0: 2B 20 20 20 20 20 20 42 49 54 20 35 20 44 52 49 |+ BIT 5 DRI| 000001C0: 56 45 20 4E 55 4D 42 45 52 20 30 20 4F 52 20 31 |VE NUMBER 0 OR 1| 000001D0: 2B 0D 3B 2B 20 20 20 20 20 20 42 49 54 53 20 30 |+.;+ BITS 0| 000001E0: 2D 33 20 48 45 41 44 20 4E 55 4D 42 45 52 20 20 |-3 HEAD NUMBER | 000001F0: 20 20 20 2B 0D 3B 2B 20 20 32 20 20 20 42 49 54 | +.;+ 2 BIT| 00000200: 53 20 36 2C 37 20 43 4C 49 4E 44 45 52 20 23 20 |S 6,7 CLINDER # | 00000210: 4D 53 42 20 20 20 2B 0D 3B 2B 20 20 20 20 20 20 |MSB +.;+ | 00000220: 42 49 54 20 35 20 4E 4F 54 20 55 53 45 44 20 30 |BIT 5 NOT USED 0| 00000230: 20 20 20 20 20 20 20 20 20 2B 0D 3B 2B 20 20 20 | +.;+ | 00000240: 20 20 20 42 49 54 53 20 30 2D 34 20 53 45 43 54 | BITS 0-4 SECT| 00000250: 4F 52 20 4E 55 4D 42 45 52 20 20 20 2B 0D 3B 2B |OR NUMBER +.;+| 00000260: 20 20 33 20 20 20 43 59 4C 49 4E 44 45 52 20 4E | 3 CYLINDER N| 00000270: 55 4D 42 45 52 20 4C 53 42 20 20 20 20 20 20 2B |UMBER LSB +| 00000280: 0D 3B 2B 20 20 34 20 20 20 42 4C 4F 43 4B 20 43 |.;+ 4 BLOCK C| 00000290: 4F 55 4E 54 20 4F 52 20 49 4E 54 45 52 4C 45 41 |OUNT OR INTERLEA| 000002A0: 56 45 2B 0D 3B 2B 20 20 35 20 20 20 42 49 54 53 |VE+.;+ 5 BITS| 000002B0: 20 36 2C 37 20 55 53 45 44 20 46 4F 52 20 45 52 | 6,7 USED FOR ER| 000002C0: 52 4F 52 20 20 2B 0D 3B 2B 20 20 20 20 20 20 52 |ROR +.;+ R| 000002D0: 45 43 4F 56 45 52 59 20 4F 50 54 49 4F 4E 53 2C |ECOVERY OPTIONS,| 000002E0: 20 42 45 53 54 20 54 4F 2B 0D 3B 2B 20 20 20 20 | BEST TO+.;+ | 000002F0: 20 20 54 4F 20 4B 45 45 50 20 54 48 45 4D 20 42 | TO KEEP THEM B| 00000300: 4F 54 48 20 30 2E 20 20 20 20 20 2B 0D 3B 2B 20 |OTH 0. +.;+ | 00000310: 20 20 20 20 20 42 49 54 53 20 33 2C 34 2C 35 20 | BITS 3,4,5 | 00000320: 4E 4F 54 20 55 53 45 44 20 30 20 20 20 20 2B 0D |NOT USED 0 +.| 00000330: 3B 2B 20 20 20 20 20 20 42 49 54 53 20 30 2D 32 |;+ BITS 0-2| 00000340: 20 53 54 45 50 20 52 41 54 45 2E 20 20 53 45 45 | STEP RATE. SEE| 00000350: 20 2B 0D 3B 2B 20 20 20 20 20 20 43 4F 4E 54 52 | +.;+ CONTR| 00000360: 4F 4C 4C 45 52 20 44 4F 43 20 46 4F 52 20 56 41 |OLLER DOC FOR VA| 00000370: 4C 55 45 53 2B 0D 3B 2B 20 20 20 20 20 20 20 20 |LUES+.;+ | 00000380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000390: 20 20 20 20 20 20 20 2B 0D 3B 2B 20 43 4F 4D 4D | +.;+ COMM| 000003A0: 41 4E 44 20 43 4F 44 45 53 20 41 52 45 20 41 53 |AND CODES ARE AS| 000003B0: 20 46 4F 4C 4C 4F 57 53 3A 20 2B 0D 3B 2B 20 20 | FOLLOWS: +.;+ | 000003C0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000003D0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2B 0D 3B | +.;| 000003E0: 2B 20 30 30 20 2D 20 54 45 53 54 20 44 52 49 56 |+ 00 - TEST DRIV| 000003F0: 45 20 52 45 41 44 59 20 20 20 20 20 20 20 20 20 |E READY | 00000400: 2B 0D 3B 2B 20 30 31 20 2D 20 52 45 43 41 4C 49 |+.;+ 01 - RECALI| 00000410: 42 52 41 54 45 20 20 20 20 20 20 20 20 20 20 20 |BRATE | 00000420: 20 20 20 2B 0D 3B 2B 20 30 33 20 2D 20 52 45 41 | +.;+ 03 - REA| 00000430: 44 20 53 54 41 54 55 53 20 4F 46 20 4C 41 53 54 |D STATUS OF LAST| 00000440: 20 4F 50 20 20 20 2B 0D 3B 2B 20 30 34 20 2D 20 | OP +.;+ 04 - | 00000450: 46 4F 52 4D 41 54 20 44 52 49 56 45 20 20 20 20 |FORMAT DRIVE | 00000460: 20 20 20 20 20 20 20 20 20 2B 0D 3B 2B 20 30 35 | +.;+ 05| 00000470: 20 2D 20 56 45 52 49 46 59 20 53 45 43 54 4F 52 | - VERIFY SECTOR| 00000480: 53 20 20 20 20 20 20 20 20 20 20 20 2B 0D 3B 2B |S +.;+| 00000490: 20 30 36 20 2D 20 46 4F 52 4D 41 54 20 41 20 54 | 06 - FORMAT A T| 000004A0: 52 41 43 4B 20 20 20 20 20 20 20 20 20 20 20 2B |RACK +| 000004B0: 0D 3B 2B 20 30 37 20 2D 20 46 4F 52 4D 41 54 20 |.;+ 07 - FORMAT | 000004C0: 41 20 42 41 44 20 54 52 41 43 4B 20 28 46 4C 41 |A BAD TRACK (FLA| 000004D0: 47 29 2B 0D 3B 2B 20 30 38 20 2D 20 52 45 41 44 |G)+.;+ 08 - READ| 000004E0: 20 53 45 43 54 4F 52 53 20 20 20 20 20 20 20 20 | SECTORS | 000004F0: 20 20 20 20 20 2B 0D 3B 2B 20 30 41 20 2D 20 57 | +.;+ 0A - W| 00000500: 52 49 54 45 20 53 45 43 54 4F 52 53 20 20 20 20 |RITE SECTORS | 00000510: 20 20 20 20 20 20 20 20 2B 0D 3B 2B 20 30 42 20 | +.;+ 0B | 00000520: 2D 20 53 45 45 4B 20 20 20 20 20 20 20 20 20 20 |- SEEK | 00000530: 20 20 20 20 20 20 20 20 20 20 20 2B 0D 3B 2B 20 | +.;+ | 00000540: 30 43 20 2D 20 49 4E 49 54 49 41 4C 49 5A 45 20 |0C - INITIALIZE | 00000550: 44 52 49 56 45 20 50 41 52 4D 53 20 20 20 2B 0D |DRIVE PARMS +.| 00000560: 3B 2B 20 30 44 20 2D 20 52 45 41 44 20 45 43 43 |;+ 0D - READ ECC| 00000570: 20 42 55 52 53 54 20 45 52 52 4F 52 20 4C 45 4E | BURST ERROR LEN| 00000580: 20 2B 0D 3B 2B 20 30 45 20 2D 20 52 45 41 44 20 | +.;+ 0E - READ | 00000590: 53 45 43 54 4F 52 20 42 55 46 46 45 52 20 20 20 |SECTOR BUFFER | 000005A0: 20 20 20 20 2B 0D 3B 2B 20 30 46 20 2D 20 57 52 | +.;+ 0F - WR| 000005B0: 49 54 45 20 53 45 43 54 4F 52 20 42 55 46 46 45 |ITE SECTOR BUFFE| 000005C0: 52 20 20 20 20 20 20 2B 0D 3B 2B 20 45 30 20 2D |R +.;+ E0 -| 000005D0: 20 52 55 4E 20 53 45 43 54 4F 52 20 42 55 46 46 | RUN SECTOR BUFF| 000005E0: 45 52 20 44 49 41 47 53 20 20 2B 0D 3B 2B 20 45 |ER DIAGS +.;+ E| 000005F0: 33 20 2D 20 52 55 4E 20 44 52 49 56 45 20 44 49 |3 - RUN DRIVE DI| 00000600: 41 47 4E 4F 53 54 49 43 53 20 20 20 20 2B 0D 3B |AGNOSTICS +.;| 00000610: 2B 20 45 34 20 2D 20 52 55 4E 20 43 4F 4E 54 52 |+ E4 - RUN CONTR| 00000620: 4F 4C 4C 45 52 20 44 49 41 47 53 20 20 20 20 20 |OLLER DIAGS | 00000630: 2B 0D 3B 2B 20 45 35 20 2D 20 52 45 41 44 20 4C |+.;+ E5 - READ L| 00000640: 4F 4E 47 20 20 20 20 20 20 20 20 20 20 20 20 20 |ONG | 00000650: 20 20 20 2B 0D 3B 2B 20 45 36 20 2D 20 57 52 49 | +.;+ E6 - WRI| 00000660: 54 45 20 4C 4F 4E 47 20 20 20 20 20 20 20 20 20 |TE LONG | 00000670: 20 20 20 20 20 20 2B 0D 3B 2B 2B 2B 2B 2B 2B 2B | +.;+++++++| 00000680: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00000690: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 0D 3B 2A 20 |++++++++++.;.;* | 000006A0: 3D 20 24 37 30 30 30 0D 3B 2B 2B 2B 2B 2B 2B 2B |= $7000.;+++++++| 000006B0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 000006C0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 2B 20 54 48 |++++++++++.;+ TH| 000006D0: 49 53 20 43 4F 44 45 20 49 53 20 54 41 52 47 45 |IS CODE IS TARGE| 000006E0: 54 45 44 20 46 4F 52 20 55 53 45 20 2B 0D 3B 2B |TED FOR USE +.;+| 000006F0: 20 57 49 54 48 20 41 20 48 41 52 44 20 44 49 53 | WITH A HARD DIS| 00000700: 4B 20 44 52 49 56 45 20 41 4E 44 20 41 20 20 2B |K DRIVE AND A +| 00000710: 0D 3B 2B 20 57 45 53 54 45 52 4E 20 44 49 47 49 |.;+ WESTERN DIGI| 00000720: 54 41 4C 20 50 43 20 43 4F 4E 54 4F 4C 4C 45 52 |TAL PC CONTOLLER| 00000730: 20 20 2B 0D 3B 2B 20 43 41 52 44 2E 20 20 20 20 | +.;+ CARD. | 00000740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000750: 20 20 20 20 20 2B 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B | +.;++++++++| 00000760: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00000770: 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 0D 3B 2B 2B 2B |+++++++++.;.;+++| 00000780: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00000790: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B |++++++++++++++.;| 000007A0: 2B 20 20 20 20 20 20 20 20 20 20 45 51 55 41 54 |+ EQUAT| 000007B0: 45 53 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |ES | 000007C0: 2B 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |+.;+++++++++++++| 000007D0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 000007E0: 2B 2B 2B 2B 0D 3B 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B |++++.;.;++++++++| 000007F0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00000800: 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 2B 20 54 48 45 |+++++++++.;+ THE| 00000810: 20 46 4F 4C 4C 4F 57 49 4E 47 20 44 45 46 49 4E | FOLLOWING DEFIN| 00000820: 45 20 54 48 45 20 57 44 20 20 20 2B 0D 3B 2B 20 |E THE WD +.;+ | 00000830: 43 4F 4E 54 52 4F 4C 4C 45 52 20 50 4F 52 54 53 |CONTROLLER PORTS| 00000840: 2E 20 20 54 48 45 52 45 20 41 52 45 20 20 2B 0D |. THERE ARE +.| 00000850: 3B 2B 20 46 4F 55 52 20 50 4F 52 54 53 20 30 20 |;+ FOUR PORTS 0 | 00000860: 54 48 52 55 20 33 2E 20 20 54 48 45 20 20 20 20 |THRU 3. THE | 00000870: 20 2B 0D 3B 2B 20 46 55 4E 43 54 49 4F 4E 20 4F | +.;+ FUNCTION O| 00000880: 46 20 45 41 43 48 20 49 53 3A 20 20 20 20 20 20 |F EACH IS: | 00000890: 20 20 20 20 2B 0D 3B 2B 20 50 4F 52 54 30 20 2D | +.;+ PORT0 -| 000008A0: 20 44 41 54 41 20 49 4E 20 41 4E 44 20 4F 55 54 | DATA IN AND OUT| 000008B0: 20 20 20 20 20 20 20 2B 0D 3B 2B 20 50 4F 52 54 | +.;+ PORT| 000008C0: 31 20 2D 20 52 45 41 44 20 2D 20 53 54 41 54 55 |1 - READ - STATU| 000008D0: 53 20 20 20 20 20 20 20 20 20 2B 0D 3B 2B 20 20 |S +.;+ | 000008E0: 20 20 20 20 20 20 20 57 52 49 54 45 20 2D 20 52 | WRITE - R| 000008F0: 45 53 45 54 20 43 4F 4E 54 52 4F 4C 20 2B 0D 3B |ESET CONTROL +.;| 00000900: 2B 20 50 4F 52 54 32 20 2D 20 52 45 41 44 20 2D |+ PORT2 - READ -| 00000910: 20 52 45 41 44 20 4A 55 4D 50 45 52 53 20 20 20 | READ JUMPERS | 00000920: 2B 0D 3B 2B 20 50 4F 52 54 32 20 2D 20 52 45 41 |+.;+ PORT2 - REA| 00000930: 44 20 2D 20 52 45 41 44 20 4A 55 4D 50 45 52 53 |D - READ JUMPERS| 00000940: 20 20 20 2B 0D 3B 2B 20 20 20 20 20 20 20 2D 20 | +.;+ - | 00000950: 57 52 49 54 45 20 2D 20 50 52 45 50 41 52 45 20 |WRITE - PREPARE | 00000960: 46 4F 52 20 20 20 2B 0D 3B 2B 20 20 20 20 20 20 |FOR +.;+ | 00000970: 20 20 20 43 4F 4E 54 52 4F 4C 45 52 20 43 4F 4D | CONTROLER COM| 00000980: 4D 41 4E 44 2E 20 20 20 20 2B 0D 3B 2B 20 50 4F |MAND. +.;+ PO| 00000990: 52 54 33 20 2D 20 52 45 41 44 20 2D 20 4E 4F 20 |RT3 - READ - NO | 000009A0: 46 55 4E 43 54 49 4F 4E 20 20 20 20 2B 0D 3B 2B |FUNCTION +.;+| 000009B0: 20 20 20 20 20 20 20 20 20 57 52 49 54 45 20 2D | WRITE -| 000009C0: 20 53 45 54 20 44 4D 41 20 46 4C 41 47 53 20 2B | SET DMA FLAGS +| 000009D0: 0D 3B 2B 20 20 20 20 20 20 20 20 20 28 53 45 54 |.;+ (SET| 000009E0: 20 54 4F 20 30 30 2C 20 41 4C 57 41 59 53 29 20 | TO 00, ALWAYS) | 000009F0: 20 20 2B 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B | +.;+++++++++++| 00000A00: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00000A10: 2B 2B 2B 2B 2B 2B 0D 3B 0D 50 4F 52 54 30 20 3D |++++++.;.PORT0 =| 00000A20: 20 24 44 45 32 30 20 3B 55 53 49 4E 47 20 49 2F | $DE20 ;USING I/| 00000A30: 4F 31 20 41 44 44 52 45 53 53 0D 50 4F 52 54 31 |O1 ADDRESS.PORT1| 00000A40: 20 3D 20 24 44 45 32 31 20 3B 52 45 53 45 54 20 | = $DE21 ;RESET | 00000A50: 41 4E 44 20 53 54 41 54 55 53 20 52 45 47 0D 3B |AND STATUS REG.;| 00000A60: 2B 20 42 49 54 20 44 45 46 49 4E 49 54 4F 4E 53 |+ BIT DEFINITONS| 00000A70: 20 46 4F 52 20 52 45 41 44 20 50 4F 52 54 31 20 | FOR READ PORT1 | 00000A80: 2B 0D 3B 0D 3B 2B 20 42 49 54 20 20 20 20 20 20 |+.;.;+ BIT | 00000A90: 20 20 44 45 46 49 4E 49 54 49 4F 4E 20 20 20 20 | DEFINITION | 00000AA0: 20 20 20 20 20 2B 0D 3B 2B 20 20 37 20 20 20 20 | +.;+ 7 | 00000AB0: 20 55 4E 44 45 46 49 4E 45 44 2C 20 49 47 4E 4F | UNDEFINED, IGNO| 00000AC0: 52 45 20 20 20 20 20 20 2B 0D 3B 2B 20 20 36 20 |RE +.;+ 6 | 00000AD0: 20 20 20 20 55 4E 44 45 46 49 4E 45 44 2C 20 49 | UNDEFINED, I| 00000AE0: 47 4E 4F 52 45 20 20 20 20 20 20 2B 0D 3B 2B 20 |GNORE +.;+ | 00000AF0: 20 35 20 20 49 52 51 20 2D 20 4E 4F 54 20 55 53 | 5 IRQ - NOT US| 00000B00: 45 44 20 4F 4E 20 43 36 34 20 20 20 20 20 2B 0D |ED ON C64 +.| 00000B10: 3B 2B 20 20 34 20 20 44 52 51 20 2D 20 4E 4F 54 |;+ 4 DRQ - NOT| 00000B20: 20 55 53 45 44 20 4F 4E 20 43 36 34 20 20 20 20 | USED ON C64 | 00000B30: 20 2B 0D 3B 2B 20 20 33 20 20 42 55 53 59 20 42 | +.;+ 3 BUSY B| 00000B40: 49 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |IT | 00000B50: 20 20 20 20 2B 0D 3B 2B 20 20 32 20 20 43 2F 44 | +.;+ 2 C/D| 00000B60: 20 2D 20 43 4F 4D 4D 41 4E 44 2F 44 41 54 41 20 | - COMMAND/DATA | 00000B70: 42 49 54 20 20 20 20 2B 0D 3B 2B 20 20 20 20 20 |BIT +.;+ | 00000B80: 20 20 20 20 20 20 30 20 2D 20 44 41 54 41 20 20 | 0 - DATA | 00000B90: 20 20 20 20 20 20 20 20 20 20 2B 0D 3B 2B 20 20 | +.;+ | 00000BA0: 20 20 20 20 20 20 20 20 20 31 20 2D 20 43 4F 4D | 1 - COM| 00000BB0: 4D 41 4E 44 20 20 20 20 20 20 20 20 20 2B 0D 3B |MAND +.;| 00000BC0: 2B 20 20 31 20 20 49 2F 4F 20 2D 20 44 49 52 45 |+ 1 I/O - DIRE| 00000BD0: 43 54 49 4F 4E 20 4F 46 20 44 41 54 41 20 20 20 |CTION OF DATA | 00000BE0: 2B 0D 3B 2B 20 20 20 20 20 20 20 20 20 20 20 31 |+.;+ 1| 00000BF0: 20 2D 20 49 4E 50 55 54 20 54 4F 20 48 4F 53 54 | - INPUT TO HOST| 00000C00: 20 20 20 2B 0D 3B 2B 20 20 20 20 20 20 20 20 20 | +.;+ | 00000C10: 20 20 30 20 2D 20 4F 55 54 50 55 54 20 46 52 4F | 0 - OUTPUT FRO| 00000C20: 4D 20 48 4F 53 54 2B 0D 3B 2B 20 20 30 20 20 52 |M HOST+.;+ 0 R| 00000C30: 45 51 20 2D 20 52 45 51 55 45 53 54 20 42 49 54 |EQ - REQUEST BIT| 00000C40: 2C 20 4D 55 53 54 20 42 45 2B 0D 3B 2B 20 20 20 |, MUST BE+.;+ | 00000C50: 20 20 20 20 20 20 20 20 31 20 46 4F 52 20 44 41 | 1 FOR DA| 00000C60: 54 41 20 54 52 41 4E 53 46 45 52 53 2B 0D 3B 0D |TA TRANSFERS+.;.| 00000C70: 50 4F 52 54 32 20 3D 20 24 44 45 32 32 20 3B 53 |PORT2 = $DE22 ;S| 00000C80: 45 54 20 43 4F 4D 4D 41 4E 44 20 4D 4F 44 45 20 |ET COMMAND MODE | 00000C90: 41 4E 44 20 4A 55 4D 50 45 52 53 0D 3B 0D 3B 2B |AND JUMPERS.;.;+| 00000CA0: 20 20 54 48 45 52 45 20 41 52 45 20 45 49 47 48 | THERE ARE EIGH| 00000CB0: 54 20 4A 55 4D 50 45 52 53 20 57 48 49 43 48 2B |T JUMPERS WHICH+| 00000CC0: 0D 3B 2B 20 20 43 41 4E 20 42 45 20 52 45 41 44 |.;+ CAN BE READ| 00000CD0: 20 46 52 4F 4D 20 54 48 49 53 20 50 4F 52 54 2E | FROM THIS PORT.| 00000CE0: 20 20 2B 0D 3B 2B 20 20 44 52 49 56 45 20 4F 50 | +.;+ DRIVE OP| 00000CF0: 54 49 4F 4E 53 20 43 41 4E 20 42 45 20 4D 41 44 |TIONS CAN BE MAD| 00000D00: 45 20 42 59 20 2B 0D 3B 2B 20 20 44 45 46 49 4E |E BY +.;+ DEFIN| 00000D10: 49 4E 47 20 54 48 45 53 45 20 42 49 54 53 20 54 |ING THESE BITS T| 00000D20: 4F 20 52 45 50 52 45 2D 2B 0D 3B 2B 20 20 53 45 |O REPRE-+.;+ SE| 00000D30: 4E 54 20 41 20 54 41 42 4C 45 20 45 4E 54 52 59 |NT A TABLE ENTRY| 00000D40: 2C 20 45 54 43 2E 20 20 20 20 20 2B 0D 3B 2B 20 |, ETC. +.;+ | 00000D50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000D60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2B 0D | +.| 00000D70: 3B 2B 20 20 57 52 49 54 49 4E 47 20 54 4F 20 54 |;+ WRITING TO T| 00000D80: 48 49 53 20 50 4F 52 54 20 53 45 54 53 20 54 48 |HIS PORT SETS TH| 00000D90: 45 2B 0D 3B 2B 20 20 43 4F 4E 54 4F 52 4C 45 52 |E+.;+ CONTORLER| 00000DA0: 20 49 4E 20 43 4F 4D 4D 41 4E 44 20 4D 4F 44 45 | IN COMMAND MODE| 00000DB0: 2E 20 20 20 2B 0D 3B 0D 50 4F 52 54 33 20 3D 20 |. +.;.PORT3 = | 00000DC0: 24 44 45 32 33 20 3B 45 4E 53 55 52 45 20 41 4C |$DE23 ;ENSURE AL| 00000DD0: 4C 57 41 59 53 20 5A 45 52 4F 0D 3B 0D 5A 45 52 |LWAYS ZERO.;.ZER| 00000DE0: 4F 20 3D 20 30 0D 54 57 4F 20 3D 20 32 0D 3B 0D |O = 0.TWO = 2.;.| 00000DF0: 3B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |;+++++++++++++++| 00000E00: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00000E10: 2B 2B 0D 3B 2B 20 20 20 20 20 20 43 4F 4D 4D 41 |++.;+ COMMA| 00000E20: 4E 44 20 45 51 55 54 41 54 45 53 20 20 20 20 20 |ND EQUTATES | 00000E30: 20 20 20 20 2B 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B 2B | +.;+++++++++| 00000E40: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00000E50: 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 0D 54 44 52 43 4D |++++++++.;.TDRCM| 00000E60: 44 20 3D 20 24 30 30 20 3B 54 45 53 54 20 44 52 |D = $00 ;TEST DR| 00000E70: 49 56 45 20 52 45 41 44 59 0D 52 43 41 43 4D 44 |IVE READY.RCACMD| 00000E80: 20 3D 20 24 30 31 20 3B 52 45 43 41 4C 49 42 52 | = $01 ;RECALIBR| 00000E90: 41 54 45 20 43 4F 4D 4D 41 4E 44 0D 53 54 43 4D |ATE COMMAND.STCM| 00000EA0: 44 20 3D 20 24 30 33 20 3B 53 45 4E 53 45 20 53 |D = $03 ;SENSE S| 00000EB0: 54 41 54 55 53 20 43 4F 4D 4D 41 4E 44 0D 46 4F |TATUS COMMAND.FO| 00000EC0: 52 43 4D 44 20 3D 20 24 30 34 20 3B 46 4F 52 4D |RCMD = $04 ;FORM| 00000ED0: 41 54 20 44 52 49 56 45 20 43 4F 4D 4D 41 4E 44 |AT DRIVE COMMAND| 00000EE0: 0D 56 45 52 43 4D 44 20 3D 20 24 30 35 20 3B 56 |.VERCMD = $05 ;V| 00000EF0: 45 52 49 46 59 20 53 45 43 54 4F 52 53 20 43 4F |ERIFY SECTORS CO| 00000F00: 4D 4D 41 4E 44 0D 52 44 43 4D 44 20 3D 20 24 30 |MMAND.RDCMD = $0| 00000F10: 38 20 3B 52 45 41 44 20 43 4F 4D 4D 41 4E 44 0D |8 ;READ COMMAND.| 00000F20: 46 52 54 43 4D 44 20 3D 20 24 30 36 20 3B 46 4F |FRTCMD = $06 ;FO| 00000F30: 52 4D 41 54 20 54 52 41 43 4B 20 43 4F 4D 4D 41 |RMAT TRACK COMMA| 00000F40: 4E 44 0D 46 42 54 43 4D 44 20 3D 20 24 30 37 20 |ND.FBTCMD = $07 | 00000F50: 3B 46 4F 52 4D 41 54 20 42 41 44 20 54 52 41 43 |;FORMAT BAD TRAC| 00000F60: 4B 20 43 4F 4D 4D 41 4E 44 0D 57 52 54 43 4D 44 |K COMMAND.WRTCMD| 00000F70: 20 3D 20 24 30 41 20 3B 57 52 49 54 45 20 43 4F | = $0A ;WRITE CO| 00000F80: 4D 4D 41 4E 44 0D 53 4B 43 4D 44 20 3D 20 24 30 |MMAND.SKCMD = $0| 00000F90: 42 20 3B 53 45 45 4B 20 43 4F 4D 4D 41 4E 44 0D |B ;SEEK COMMAND.| 00000FA0: 50 52 4D 43 4D 44 20 3D 20 24 30 43 20 3B 53 45 |PRMCMD = $0C ;SE| 00000FB0: 4E 44 20 50 41 52 4D 20 43 4F 4D 4D 41 4E 44 0D |ND PARM COMMAND.| 00000FC0: 45 43 43 43 4D 44 20 3D 20 24 30 44 20 3B 52 45 |ECCCMD = $0D ;RE| 00000FD0: 41 44 20 45 43 43 20 42 55 52 53 54 20 4C 45 4E |AD ECC BURST LEN| 00000FE0: 47 54 48 20 43 4F 4D 4D 41 4E 44 0D 52 53 42 43 |GTH COMMAND.RSBC| 00000FF0: 4D 44 20 3D 20 24 30 45 20 3B 52 45 41 44 20 53 |MD = $0E ;READ S| 00001000: 45 43 54 4F 52 20 42 55 46 46 45 52 20 43 4F 4D |ECTOR BUFFER COM| 00001010: 4D 41 4E 44 0D 57 53 42 43 4D 44 20 3D 20 24 30 |MAND.WSBCMD = $0| 00001020: 46 20 3B 57 52 49 54 45 20 53 45 43 54 4F 52 20 |F ;WRITE SECTOR | 00001030: 42 55 46 46 45 52 20 43 4F 4D 4D 41 4E 44 0D 42 |BUFFER COMMAND.B| 00001040: 44 47 43 4D 44 20 3D 20 24 45 30 20 3B 42 55 46 |DGCMD = $E0 ;BUF| 00001050: 46 45 52 20 44 49 41 47 20 43 4F 4D 4D 41 4E 44 |FER DIAG COMMAND| 00001060: 0D 44 44 47 43 4D 44 20 3D 20 24 45 33 20 3B 44 |.DDGCMD = $E3 ;D| 00001070: 52 49 56 45 20 44 49 41 47 20 43 4F 4D 4D 41 4E |RIVE DIAG COMMAN| 00001080: 44 0D 43 44 47 43 4D 44 20 3D 20 24 45 34 20 3B |D.CDGCMD = $E4 ;| 00001090: 43 4F 4E 54 52 4F 4C 4C 45 52 20 44 49 41 47 20 |CONTROLLER DIAG | 000010A0: 43 4F 4D 4D 41 4E 44 0D 52 44 4C 43 4D 44 20 3D |COMMAND.RDLCMD =| 000010B0: 20 24 45 35 20 3B 52 45 41 44 20 4C 4F 4E 47 20 | $E5 ;READ LONG | 000010C0: 43 4F 4D 4D 41 4E 44 0D 57 52 4C 43 4D 44 20 3D |COMMAND.WRLCMD =| 000010D0: 20 24 45 36 20 3B 57 52 49 54 45 20 4C 4F 4E 47 | $E6 ;WRITE LONG| 000010E0: 20 43 4F 4D 4D 41 4E 44 0D 3B 0D 52 44 43 48 4B | COMMAND.;.RDCHK| 000010F0: 20 3D 20 24 30 42 20 3B 53 54 41 54 55 53 20 46 | = $0B ;STATUS F| 00001100: 4F 52 20 4F 4B 20 52 45 41 44 0D 57 52 54 43 48 |OR OK READ.WRTCH| 00001110: 4B 20 3D 20 24 30 39 20 3B 53 54 41 54 55 53 20 |K = $09 ;STATUS | 00001120: 46 4F 52 20 57 52 49 54 45 20 4F 4B 0D 3B 0D 3B |FOR WRITE OK.;.;| 00001130: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00001140: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00001150: 2B 0D 3B 2B 20 56 45 43 54 4F 52 53 20 54 4F 20 |+.;+ VECTORS TO | 00001160: 52 4F 55 54 49 4E 45 53 20 20 20 20 20 20 20 20 |ROUTINES | 00001170: 20 20 20 2B 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B | +.;++++++++++| 00001180: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00001190: 2B 2B 2B 2B 2B 2B 2B 0D 3B 0D 2A 20 3D 20 24 46 |+++++++.;.* = $F| 000011A0: 37 32 43 0D 52 45 41 44 58 20 4A 4D 50 20 52 45 |72C.READX JMP RE| 000011B0: 41 44 0D 57 52 49 54 45 58 20 4A 4D 50 20 57 52 |AD.WRITEX JMP WR| 000011C0: 49 54 45 0D 52 45 53 45 54 58 20 4A 4D 50 20 52 |ITE.RESETX JMP R| 000011D0: 45 53 45 54 0D 53 45 54 50 52 58 20 4A 4D 50 20 |ESET.SETPRX JMP | 000011E0: 53 45 54 50 52 4D 0D 52 45 43 41 4C 58 20 4A 4D |SETPRM.RECALX JM| 000011F0: 50 20 52 45 43 41 4C 20 3B 47 4F 20 52 45 43 41 |P RECAL ;GO RECA| 00001200: 4C 49 42 52 41 54 45 0D 53 45 45 4B 58 20 4A 4D |LIBRATE.SEEKX JM| 00001210: 50 20 53 45 45 4B 20 3B 47 4F 20 44 4F 20 53 45 |P SEEK ;GO DO SE| 00001220: 45 4B 0D 54 44 52 45 44 58 20 4A 4D 50 20 54 44 |EK.TDREDX JMP TD| 00001230: 52 45 44 59 20 3B 54 45 53 54 20 44 52 49 56 45 |REDY ;TEST DRIVE| 00001240: 20 52 45 41 44 59 0D 3B 53 42 44 49 41 58 20 4A | READY.;SBDIAX J| 00001250: 4D 50 20 53 42 44 49 41 47 20 3B 53 45 43 54 4F |MP SBDIAG ;SECTO| 00001260: 52 20 42 55 46 46 45 52 20 44 49 41 47 53 0D 3B |R BUFFER DIAGS.;| 00001270: 44 52 44 49 41 58 20 4A 4D 50 20 44 52 44 49 41 |DRDIAX JMP DRDIA| 00001280: 47 20 3B 44 52 49 56 45 20 44 49 41 47 53 0D 43 |G ;DRIVE DIAGS.C| 00001290: 54 44 49 41 58 20 4A 4D 50 20 43 54 44 49 41 47 |TDIAX JMP CTDIAG| 000012A0: 20 3B 43 4F 4E 54 52 4F 4C 4C 45 52 20 44 49 41 | ;CONTROLLER DIA| 000012B0: 47 0D 3B 46 4F 52 42 54 58 20 4A 4D 50 20 46 4F |G.;FORBTX JMP FO| 000012C0: 52 42 54 4B 20 3B 46 4F 52 4D 41 54 20 42 41 44 |RBTK ;FORMAT BAD| 000012D0: 20 54 52 41 43 4B 0D 3B 46 4F 52 54 52 58 20 4A | TRACK.;FORTRX J| 000012E0: 4D 50 20 46 4F 52 54 52 4B 20 3B 46 4F 52 4D 41 |MP FORTRK ;FORMA| 000012F0: 54 20 54 52 41 43 4B 0D 3B 46 4F 52 4D 41 58 20 |T TRACK.;FORMAX | 00001300: 4A 4D 50 20 46 4F 52 4D 41 54 20 3B 46 4F 52 4D |JMP FORMAT ;FORM| 00001310: 41 54 20 44 52 49 56 45 0D 52 45 54 50 52 58 20 |AT DRIVE.RETPRX | 00001320: 4A 4D 50 20 52 45 54 50 52 4D 20 3B 52 45 54 55 |JMP RETPRM ;RETU| 00001330: 52 4E 20 44 52 49 56 45 20 50 41 52 4D 53 0D 3B |RN DRIVE PARMS.;| 00001340: 52 44 4C 4F 4E 58 20 4A 4D 50 20 52 44 4C 4F 4E |RDLONX JMP RDLON| 00001350: 47 20 3B 52 45 41 44 20 4C 4F 4E 47 0D 3B 52 45 |G ;READ LONG.;RE| 00001360: 41 44 53 58 20 4A 4D 50 20 52 45 41 44 53 42 20 |ADSX JMP READSB | 00001370: 3B 52 45 41 44 20 53 45 43 54 4F 52 20 42 55 46 |;READ SECTOR BUF| 00001380: 46 45 52 0D 3B 57 52 4C 4F 4E 58 20 4A 4D 50 20 |FER.;WRLONX JMP | 00001390: 57 52 4C 4F 4E 47 20 3B 57 52 49 54 45 20 4C 4F |WRLONG ;WRITE LO| 000013A0: 4E 47 0D 3B 57 52 54 53 42 58 20 4A 4D 50 20 57 |NG.;WRTSBX JMP W| 000013B0: 52 49 54 53 42 20 3B 57 52 49 54 45 20 53 45 43 |RITSB ;WRITE SEC| 000013C0: 54 4F 52 20 42 55 46 46 45 52 0D 56 45 52 49 46 |TOR BUFFER.VERIF| 000013D0: 58 20 4A 4D 50 20 56 45 52 49 46 59 20 3B 56 45 |X JMP VERIFY ;VE| 000013E0: 52 49 46 59 20 53 45 43 54 4F 52 0D 3B 0D 3B 2B |RIFY SECTOR.;.;+| 000013F0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00001400: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00001410: 0D 3B 2B 20 20 20 20 20 20 20 53 55 42 52 4F 55 |.;+ SUBROU| 00001420: 54 49 4E 45 53 20 20 20 20 20 20 20 20 20 20 20 |TINES | 00001430: 20 20 2B 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B | +.;+++++++++++| 00001440: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00001450: 2B 2B 2B 2B 2B 2B 0D 3B 0D 3B 2B 2B 2B 2B 2B 2B |++++++.;.;++++++| 00001460: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00001470: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 2B 20 52 |+++++++++++.;+ R| 00001480: 45 41 44 20 42 4C 4F 43 4B 53 20 20 20 20 20 20 |EAD BLOCKS | 00001490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2B 0D 3B | +.;| 000014A0: 2B 20 52 45 41 44 20 54 48 45 20 4E 55 4D 42 45 |+ READ THE NUMBE| 000014B0: 52 20 4F 46 20 42 4C 4F 43 4B 53 20 49 4E 20 20 |R OF BLOCKS IN | 000014C0: 2B 0D 3B 2B 20 54 48 45 20 44 43 42 20 49 4E 54 |+.;+ THE DCB INT| 000014D0: 4F 20 54 48 45 20 42 55 46 46 45 52 2E 20 54 48 |O THE BUFFER. TH| 000014E0: 49 53 20 2B 0D 3B 2B 20 52 4F 55 54 49 4E 45 20 |IS +.;+ ROUTINE | 000014F0: 48 41 4E 44 4C 45 53 20 54 48 45 20 52 45 41 44 |HANDLES THE READ| 00001500: 20 4C 4F 4E 47 20 2B 0D 3B 2B 20 41 4E 44 20 52 | LONG +.;+ AND R| 00001510: 45 41 44 20 53 45 43 54 4F 52 20 42 55 46 46 45 |EAD SECTOR BUFFE| 00001520: 52 20 41 4C 53 4F 2E 20 20 2B 0D 3B 2B 20 20 20 |R ALSO. +.;+ | 00001530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001540: 20 20 20 20 20 20 20 20 20 20 20 20 2B 0D 3B 2B | +.;+| 00001550: 20 49 4E 50 55 54 3A 20 44 43 42 20 20 20 20 20 | INPUT: DCB | 00001560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2B | +| 00001570: 0D 3B 2B 20 4F 55 54 50 55 54 3A 20 44 41 54 41 |.;+ OUTPUT: DATA| 00001580: 20 52 45 41 44 20 49 4E 54 4F 20 42 55 46 46 45 | READ INTO BUFFE| 00001590: 52 20 2B 0D 3B 2B 20 20 52 45 47 53 20 41 4C 4C |R +.;+ REGS ALL| 000015A0: 20 44 45 53 54 52 4F 59 45 44 2E 20 20 20 20 20 | DESTROYED. | 000015B0: 20 20 20 20 20 2B 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B | +.;++++++++| 000015C0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 000015D0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 0D 52 45 41 44 |+++++++++.;.READ| 000015E0: 53 42 20 4C 44 41 20 23 52 53 42 43 4D 44 20 3B |SB LDA #RSBCMD ;| 000015F0: 52 45 41 44 20 53 45 43 54 4F 52 20 42 55 46 46 |READ SECTOR BUFF| 00001600: 45 52 0D 20 2E 42 59 54 20 24 32 43 20 3B 4A 55 |ER. .BYT $2C ;JU| 00001610: 53 54 20 41 20 42 49 54 0D 52 44 4C 4F 4E 47 20 |ST A BIT.RDLONG | 00001620: 4C 44 41 20 23 52 44 4C 43 4D 44 20 3B 52 45 41 |LDA #RDLCMD ;REA| 00001630: 44 20 4C 4F 4E 47 20 44 49 41 47 4E 4F 53 54 49 |D LONG DIAGNOSTI| 00001640: 43 0D 20 2E 42 59 54 20 24 32 43 20 3B 41 4E 44 |C. .BYT $2C ;AND| 00001650: 20 41 20 42 49 54 0D 52 45 41 44 20 3D 20 2A 20 | A BIT.READ = * | 00001660: 3B 52 45 41 44 20 42 4C 4F 43 4B 53 0D 20 4C 44 |;READ BLOCKS. LD| 00001670: 41 20 23 52 44 43 4D 44 20 3B 47 45 54 20 43 4F |A #RDCMD ;GET CO| 00001680: 4D 4D 41 4E 44 0D 20 4A 53 52 20 53 45 54 55 50 |MMAND. JSR SETUP| 00001690: 20 3B 47 4F 20 44 4F 20 48 4F 55 53 45 4B 45 45 | ;GO DO HOUSEKEE| 000016A0: 50 49 4E 47 0D 20 42 43 43 20 52 43 4D 44 4F 4B |PING. BCC RCMDOK| 000016B0: 20 3B 47 4F 20 49 46 20 57 45 4C 4C 0D 45 52 4A | ;GO IF WELL.ERJ| 000016C0: 4D 50 31 20 53 45 43 0D 20 4A 4D 50 20 54 43 4F |MP1 SEC. JMP TCO| 000016D0: 4D 50 0D 52 43 4D 44 4F 4B 20 4A 53 52 20 52 44 |MP.RCMDOK JSR RD| 000016E0: 52 45 44 59 20 3B 52 45 41 44 59 20 54 4F 20 52 |REDY ;READY TO R| 000016F0: 45 41 44 0D 20 42 43 53 20 45 52 4A 4D 50 31 20 |EAD. BCS ERJMP1 | 00001700: 3B 47 4F 20 49 46 20 42 41 44 0D 20 4C 44 59 20 |;GO IF BAD. LDY | 00001710: 23 5A 45 52 4F 0D 20 4C 44 58 20 23 54 57 4F 20 |#ZERO. LDX #TWO | 00001720: 3B 23 20 50 41 47 45 53 20 50 45 52 20 53 45 43 |;# PAGES PER SEC| 00001730: 54 4F 52 0D 20 53 45 49 20 3B 44 49 53 41 42 4C |TOR. SEI ;DISABL| 00001740: 45 20 46 4F 52 20 41 20 42 49 54 0D 52 44 4C 4F |E FOR A BIT.RDLO| 00001750: 4F 50 20 4C 44 41 20 50 4F 52 54 30 20 3B 52 45 |OP LDA PORT0 ;RE| 00001760: 41 44 20 41 20 42 59 54 45 0D 20 53 54 41 20 28 |AD A BYTE. STA (| 00001770: 42 55 46 50 54 52 29 2C 59 20 3B 50 55 54 20 49 |BUFPTR),Y ;PUT I| 00001780: 4E 20 42 55 46 46 45 52 0D 20 49 4E 59 0D 20 42 |N BUFFER. INY. B| 00001790: 4E 45 20 52 44 4C 4F 4F 50 0D 20 49 4E 43 20 42 |NE RDLOOP. INC B| 000017A0: 55 46 50 54 52 2B 31 20 3B 42 55 4D 50 20 50 41 |UFPTR+1 ;BUMP PA| 000017B0: 47 45 20 50 4F 49 4E 54 45 52 0D 20 44 45 58 0D |GE POINTER. DEX.| 000017C0: 20 42 4E 45 20 52 44 4C 4F 4F 50 20 3B 43 4F 4E | BNE RDLOOP ;CON| 000017D0: 54 49 4E 55 45 20 52 45 41 44 49 4E 47 0D 20 4C |TINUE READING. L| 000017E0: 44 41 20 43 4D 44 42 59 54 20 3B 43 48 45 43 4B |DA CMDBYT ;CHECK| 000017F0: 20 43 4F 4D 4D 41 4E 44 0D 20 43 4D 50 20 23 52 | COMMAND. CMP #R| 00001800: 44 4C 43 4D 44 20 3B 52 45 41 44 20 4C 4F 4E 47 |DLCMD ;READ LONG| 00001810: 3F 0D 20 42 4E 45 20 52 45 41 44 4F 4E 0D 20 4A |?. BNE READON. J| 00001820: 53 52 20 52 44 52 45 44 59 20 3B 43 48 45 43 4B |SR RDREDY ;CHECK| 00001830: 20 49 46 20 52 45 41 44 59 20 54 4F 20 52 45 41 | IF READY TO REA| 00001840: 44 0D 20 42 43 53 20 45 52 4A 4D 50 31 0D 52 44 |D. BCS ERJMP1.RD| 00001850: 4C 4C 55 50 20 4C 44 41 20 50 4F 52 54 30 20 3B |LLUP LDA PORT0 ;| 00001860: 47 45 54 20 45 43 43 20 46 4F 52 20 4C 4F 4E 47 |GET ECC FOR LONG| 00001870: 0D 20 53 54 41 20 28 42 55 46 50 54 52 29 2C 59 |. STA (BUFPTR),Y| 00001880: 0D 20 49 4E 43 20 42 55 46 50 54 52 20 3B 42 55 |. INC BUFPTR ;BU| 00001890: 4D 50 20 50 54 52 0D 20 42 4E 45 20 52 44 4C 58 |MP PTR. BNE RDLX| 000018A0: 31 0D 20 49 4E 43 20 42 55 46 50 54 52 2B 31 0D |1. INC BUFPTR+1.| 000018B0: 52 44 4C 58 31 20 49 4E 58 0D 20 43 50 58 20 23 |RDLX1 INX. CPX #| 000018C0: 34 0D 20 42 4E 45 20 52 44 4C 4C 55 50 0D 52 45 |4. BNE RDLLUP.RE| 000018D0: 41 44 4F 4E 20 44 45 43 20 42 4C 4B 43 54 52 20 |ADON DEC BLKCTR | 000018E0: 3B 53 45 45 20 49 46 20 4D 4F 52 45 20 42 4C 4F |;SEE IF MORE BLO| 000018F0: 43 4B 53 0D 20 42 4E 45 20 52 43 4D 44 4F 4B 0D |CKS. BNE RCMDOK.| 00001900: 20 43 4C 49 20 3B 45 4E 41 42 4C 45 0D 3B 0D 54 | CLI ;ENABLE.;.T| 00001910: 43 4F 4D 50 20 3D 20 2A 20 3B 43 48 45 43 4B 20 |COMP = * ;CHECK | 00001920: 43 4F 4D 50 4C 45 54 49 4F 4E 0D 20 4C 44 41 20 |COMPLETION. LDA | 00001930: 50 4F 52 54 31 20 3B 4F 46 20 4F 50 45 52 41 54 |PORT1 ;OF OPERAT| 00001940: 49 4F 4E 0D 20 41 4E 44 20 23 24 30 46 20 3B 43 |ION. AND #$0F ;C| 00001950: 4C 45 41 52 20 55 4E 55 53 45 44 0D 20 43 4D 50 |LEAR UNUSED. CMP| 00001960: 20 23 24 30 46 20 3B 57 48 41 54 20 57 45 20 57 | #$0F ;WHAT WE W| 00001970: 41 49 54 49 4E 47 20 46 4F 52 3F 0D 20 42 45 51 |AITING FOR?. BEQ| 00001980: 20 54 43 4F 4D 50 31 20 3B 47 4F 20 46 4F 52 57 | TCOMP1 ;GO FORW| 00001990: 41 52 44 0D 20 44 45 43 20 54 49 4D 45 52 30 20 |ARD. DEC TIMER0 | 000019A0: 3B 53 54 45 50 20 44 4F 57 4E 20 4F 4E 45 0D 20 |;STEP DOWN ONE. | 000019B0: 42 4E 45 20 54 43 4F 4D 50 20 3B 47 4F 20 49 46 |BNE TCOMP ;GO IF| 000019C0: 20 4E 4F 54 20 5A 45 52 4F 0D 20 44 45 43 20 54 | NOT ZERO. DEC T| 000019D0: 49 4D 45 52 31 20 3B 4B 4E 4F 43 4B 20 4F 46 46 |IMER1 ;KNOCK OFF| 000019E0: 20 41 4E 4F 54 48 45 52 20 42 49 54 0D 20 42 4E | ANOTHER BIT. BN| 000019F0: 45 20 54 43 4F 4D 50 0D 20 44 45 43 20 54 49 4D |E TCOMP. DEC TIM| 00001A00: 45 52 32 20 3B 54 48 49 53 20 49 53 20 54 48 45 |ER2 ;THIS IS THE| 00001A10: 20 42 49 47 20 4F 4E 45 0D 20 42 4E 45 20 54 43 | BIG ONE. BNE TC| 00001A20: 4F 4D 50 20 3B 44 4F 4E 27 54 20 51 55 49 54 20 |OMP ;DON'T QUIT | 00001A30: 59 45 54 3F 0D 20 4C 44 41 20 23 54 49 4D 4F 54 |YET?. LDA #TIMOT| 00001A40: 55 20 3B 53 45 54 20 54 49 4D 45 4F 55 54 20 53 |U ;SET TIMEOUT S| 00001A50: 54 41 54 55 53 0D 20 53 45 43 0D 20 52 54 53 20 |TATUS. SEC. RTS | 00001A60: 3B 47 4F 20 42 41 43 4B 20 57 49 54 48 20 45 52 |;GO BACK WITH ER| 00001A70: 52 4F 52 0D 3B 0D 54 43 4F 4D 50 31 20 3D 20 2A |ROR.;.TCOMP1 = *| 00001A80: 20 3B 52 45 41 44 20 45 52 52 4F 52 20 53 54 41 | ;READ ERROR STA| 00001A90: 54 55 53 0D 20 4C 44 41 20 50 4F 52 54 30 20 3B |TUS. LDA PORT0 ;| 00001AA0: 43 48 45 43 4B 20 46 4F 52 20 45 52 52 4F 52 0D |CHECK FOR ERROR.| 00001AB0: 20 41 4E 44 20 23 24 30 32 20 3B 42 49 54 20 4F | AND #$02 ;BIT O| 00001AC0: 4E 0D 20 42 45 51 20 54 43 4F 4D 50 34 0D 20 4C |N. BEQ TCOMP4. L| 00001AD0: 44 41 20 43 4D 44 42 59 54 20 3B 43 48 45 43 4B |DA CMDBYT ;CHECK| 00001AE0: 20 49 46 20 54 48 49 53 20 49 53 20 53 45 4E 53 | IF THIS IS SENS| 00001AF0: 45 0D 20 43 4D 50 20 23 53 54 43 4D 44 20 3B 49 |E. CMP #STCMD ;I| 00001B00: 46 20 53 4F 20 46 41 49 4C 20 53 45 4E 53 45 0D |F SO FAIL SENSE.| 00001B10: 20 42 45 51 20 53 46 41 49 4C 0D 20 53 54 41 20 | BEQ SFAIL. STA | 00001B20: 45 52 52 43 4D 44 20 3B 53 41 56 45 20 54 48 45 |ERRCMD ;SAVE THE| 00001B30: 20 46 41 49 4C 49 4E 47 20 43 4D 44 0D 20 4C 44 | FAILING CMD. LD| 00001B40: 41 20 23 53 54 43 4D 44 20 3B 49 53 53 55 45 20 |A #STCMD ;ISSUE | 00001B50: 53 45 4E 53 45 20 43 4F 4D 4D 41 4E 44 0D 20 53 |SENSE COMMAND. S| 00001B60: 54 41 20 43 4D 44 42 59 54 20 3B 50 55 54 20 49 |TA CMDBYT ;PUT I| 00001B70: 4E 20 44 43 42 0D 20 4A 53 52 20 53 4E 44 43 4D |N DCB. JSR SNDCM| 00001B80: 44 20 3B 0D 20 42 43 43 20 54 43 4F 4D 50 32 20 |D ;. BCC TCOMP2 | 00001B90: 3B 47 4F 20 4F 4E 20 49 46 20 4F 4B 0D 53 46 41 |;GO ON IF OK.SFA| 00001BA0: 49 4C 20 4C 44 41 20 23 53 4E 46 41 49 4C 20 3B |IL LDA #SNFAIL ;| 00001BB0: 53 45 54 20 53 45 4E 53 45 20 46 41 49 4C 45 44 |SET SENSE FAILED| 00001BC0: 0D 20 42 4E 45 20 52 45 54 45 52 58 0D 52 45 54 |. BNE RETERX.RET| 00001BD0: 45 52 52 20 4C 44 41 20 45 52 52 43 4D 44 20 3B |ERR LDA ERRCMD ;| 00001BE0: 47 45 54 20 46 41 49 4C 49 4E 47 20 43 4D 44 0D |GET FAILING CMD.| 00001BF0: 52 45 54 45 52 58 20 53 45 43 0D 20 52 54 53 0D |RETERX SEC. RTS.| 00001C00: 54 43 4F 4D 50 32 20 4A 53 52 20 52 44 52 45 44 |TCOMP2 JSR RDRED| 00001C10: 59 20 3B 53 45 45 20 49 46 20 52 45 41 44 59 0D |Y ;SEE IF READY.| 00001C20: 20 42 43 53 20 53 46 41 49 4C 0D 20 4C 44 59 20 | BCS SFAIL. LDY | 00001C30: 23 30 0D 54 43 4F 4D 50 33 20 4C 44 41 20 50 4F |#0.TCOMP3 LDA PO| 00001C40: 52 54 30 20 3B 52 45 41 44 20 53 45 4E 53 45 0D |RT0 ;READ SENSE.| 00001C50: 20 53 54 41 20 53 45 4E 53 45 2C 59 0D 20 49 4E | STA SENSE,Y. IN| 00001C60: 59 0D 20 43 50 59 20 23 34 20 3B 47 4F 54 20 49 |Y. CPY #4 ;GOT I| 00001C70: 54 20 41 4C 4C 3F 0D 20 42 4E 45 20 54 43 4F 4D |T ALL?. BNE TCOM| 00001C80: 50 33 0D 20 4C 44 41 20 53 45 4E 53 45 20 3B 43 |P3. LDA SENSE ;C| 00001C90: 48 45 43 4B 20 53 45 4E 53 45 0D 20 43 4D 50 20 |HECK SENSE. CMP | 00001CA0: 23 24 39 38 20 3B 43 4F 52 52 45 43 54 41 42 4C |#$98 ;CORRECTABL| 00001CB0: 45 20 45 43 43 3F 0D 20 42 4E 45 20 54 43 4F 4D |E ECC?. BNE TCOM| 00001CC0: 50 42 0D 20 4C 44 41 20 23 24 30 44 20 3B 52 45 |PB. LDA #$0D ;RE| 00001CD0: 41 44 20 54 48 45 20 45 43 43 20 49 4E 46 4F 0D |AD THE ECC INFO.| 00001CE0: 20 4A 53 52 20 53 4E 44 43 4D 44 0D 20 42 43 53 | JSR SNDCMD. BCS| 00001CF0: 20 53 46 41 49 4C 0D 20 4A 53 52 20 52 44 52 45 | SFAIL. JSR RDRE| 00001D00: 44 59 0D 20 42 43 53 20 53 46 41 49 4C 0D 20 4C |DY. BCS SFAIL. L| 00001D10: 44 41 20 50 4F 52 54 30 20 3B 47 45 54 20 45 43 |DA PORT0 ;GET EC| 00001D20: 43 20 49 4E 46 4F 0D 20 53 54 41 20 45 43 43 49 |C INFO. STA ECCI| 00001D30: 4E 46 0D 54 43 4F 4D 50 42 20 4A 4D 50 20 54 43 |NF.TCOMPB JMP TC| 00001D40: 4F 4D 50 20 3B 54 45 53 54 20 43 4F 4D 50 4C 45 |OMP ;TEST COMPLE| 00001D50: 54 49 4F 4E 0D 54 43 4F 4D 50 34 20 4C 44 41 20 |TION.TCOMP4 LDA | 00001D60: 43 4D 44 42 59 54 20 3B 43 48 45 43 4B 20 49 46 |CMDBYT ;CHECK IF| 00001D70: 20 53 45 4E 53 45 0D 20 43 4D 50 20 23 53 54 43 | SENSE. CMP #STC| 00001D80: 4D 44 0D 20 42 45 51 20 52 45 54 45 52 52 0D 20 |MD. BEQ RETERR. | 00001D90: 43 4C 43 0D 20 52 54 53 0D 3B 0D 3B 2B 2B 2B 2B |CLC. RTS.;.;++++| 00001DA0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00001DB0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 2B |+++++++++++++.;+| 00001DC0: 20 54 48 45 20 57 52 49 54 45 20 52 4F 55 54 49 | THE WRITE ROUTI| 00001DD0: 4E 45 20 53 45 4E 44 53 20 54 48 45 20 20 20 2B |NE SENDS THE +| 00001DE0: 0D 3B 2B 20 4E 55 4D 42 45 52 20 4F 46 20 42 4C |.;+ NUMBER OF BL| 00001DF0: 4F 43 4B 53 20 53 50 45 43 49 46 49 45 44 20 49 |OCKS SPECIFIED I| 00001E00: 4E 20 2B 0D 3B 2B 20 54 48 45 20 44 43 42 20 54 |N +.;+ THE DCB T| 00001E10: 4F 20 54 48 45 20 44 49 53 4B 20 43 4F 4E 54 52 |O THE DISK CONTR| 00001E20: 4F 4C 45 52 2E 2B 0D 3B 2B 20 57 52 49 54 45 20 |OLER.+.;+ WRITE | 00001E30: 53 45 43 54 4F 52 20 42 55 46 46 45 52 20 41 4E |SECTOR BUFFER AN| 00001E40: 44 20 57 52 49 54 45 20 2B 0D 3B 2B 20 4C 4F 4E |D WRITE +.;+ LON| 00001E50: 47 20 41 52 45 20 42 4F 54 48 20 48 41 4E 44 4C |G ARE BOTH HANDL| 00001E60: 45 44 20 48 45 52 45 2E 20 20 20 2B 0D 3B 2B 20 |ED HERE. +.;+ | 00001E70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001E80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2B 0D | +.| 00001E90: 3B 2B 20 49 4E 50 55 54 3A 20 44 43 42 20 20 20 |;+ INPUT: DCB | 00001EA0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001EB0: 20 2B 0D 3B 2B 20 4F 55 54 50 55 54 3A 20 44 41 | +.;+ OUTPUT: DA| 00001EC0: 54 41 20 57 52 49 54 54 45 4E 20 20 20 20 20 20 |TA WRITTEN | 00001ED0: 20 20 20 20 2B 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B 2B | +.;+++++++++| 00001EE0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00001EF0: 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 0D 57 52 4C 4F 4E |++++++++.;.WRLON| 00001F00: 47 20 4C 44 41 20 23 57 52 4C 43 4D 44 20 3B 57 |G LDA #WRLCMD ;W| 00001F10: 52 49 54 45 20 4C 4F 4E 47 20 44 49 41 47 4E 4F |RITE LONG DIAGNO| 00001F20: 53 54 49 43 0D 20 2E 42 59 54 20 24 32 43 20 3B |STIC. .BYT $2C ;| 00001F30: 42 49 54 20 20 49 54 0D 57 52 49 54 53 42 20 4C |BIT IT.WRITSB L| 00001F40: 44 41 20 23 57 53 42 43 4D 44 20 3B 57 52 49 54 |DA #WSBCMD ;WRIT| 00001F50: 45 20 53 45 43 54 4F 52 20 42 55 46 46 45 52 0D |E SECTOR BUFFER.| 00001F60: 20 2E 42 59 54 20 24 32 43 20 3B 42 49 54 20 41 | .BYT $2C ;BIT A| 00001F70: 47 41 49 4E 0D 57 52 49 54 45 20 3D 20 2A 20 3B |GAIN.WRITE = * ;| 00001F80: 57 52 49 54 45 20 42 4C 4F 43 4B 53 0D 20 4C 44 |WRITE BLOCKS. LD| 00001F90: 41 20 23 57 52 54 43 4D 44 20 3B 47 45 54 20 43 |A #WRTCMD ;GET C| 00001FA0: 4F 4D 4D 41 4E 44 0D 20 4A 53 52 20 53 45 54 55 |OMMAND. JSR SETU| 00001FB0: 50 20 3B 47 4F 20 44 4F 20 48 4F 55 53 45 4B 45 |P ;GO DO HOUSEKE| 00001FC0: 45 50 49 4E 47 0D 20 42 43 43 20 57 43 4D 44 4F |EPING. BCC WCMDO| 00001FD0: 4B 20 3B 47 4F 20 49 46 20 57 45 4C 4C 0D 45 52 |K ;GO IF WELL.ER| 00001FE0: 4A 4D 50 32 20 4A 4D 50 20 45 52 4A 4D 50 31 0D |JMP2 JMP ERJMP1.| 00001FF0: 57 43 4D 44 4F 4B 20 4A 53 52 20 57 52 52 45 44 |WCMDOK JSR WRRED| 00002000: 59 20 3B 52 45 41 44 59 20 54 4F 20 57 52 49 54 |Y ;READY TO WRIT| 00002010: 45 0D 20 42 43 53 20 45 52 4A 4D 50 32 20 3B 47 |E. BCS ERJMP2 ;G| 00002020: 4F 20 49 46 20 42 41 44 0D 20 4C 44 59 20 23 5A |O IF BAD. LDY #Z| 00002030: 45 52 4F 0D 20 4C 44 58 20 23 54 57 4F 20 3B 23 |ERO. LDX #TWO ;#| 00002040: 20 50 41 47 45 53 20 50 45 52 20 53 45 43 54 4F | PAGES PER SECTO| 00002050: 52 0D 20 53 45 49 20 3B 44 49 53 41 42 4C 45 0D |R. SEI ;DISABLE.| 00002060: 57 52 4C 4F 4F 50 20 4C 44 41 20 28 42 55 46 50 |WRLOOP LDA (BUFP| 00002070: 54 52 29 2C 59 20 3B 47 45 54 20 41 20 42 59 54 |TR),Y ;GET A BYT| 00002080: 45 0D 20 53 54 41 20 50 4F 52 54 30 20 3B 57 52 |E. STA PORT0 ;WR| 00002090: 49 54 45 20 54 4F 20 43 4F 4E 54 52 4F 4C 4C 45 |ITE TO CONTROLLE| 000020A0: 52 0D 20 49 4E 59 0D 20 42 4E 45 20 57 52 4C 4F |R. INY. BNE WRLO| 000020B0: 4F 50 0D 20 49 4E 43 20 42 55 46 50 54 52 2B 31 |OP. INC BUFPTR+1| 000020C0: 20 3B 42 55 4D 50 20 50 41 47 45 20 50 4F 49 4E | ;BUMP PAGE POIN| 000020D0: 54 45 52 0D 20 44 45 58 0D 20 42 4E 45 20 57 52 |TER. DEX. BNE WR| 000020E0: 4C 4F 4F 50 20 3B 43 4F 4E 54 49 4E 55 45 20 52 |LOOP ;CONTINUE R| 000020F0: 45 41 44 49 4E 47 0D 20 4C 44 41 20 43 4D 44 42 |EADING. LDA CMDB| 00002100: 59 54 20 3B 43 48 45 43 4B 20 46 4F 52 20 57 52 |YT ;CHECK FOR WR| 00002110: 49 54 45 20 4C 4F 4E 47 0D 20 43 4D 50 20 23 57 |ITE LONG. CMP #W| 00002120: 52 4C 43 4D 44 0D 20 42 4E 45 20 57 52 4F 4E 20 |RLCMD. BNE WRON | 00002130: 3B 47 4F 20 4F 4E 20 49 46 20 4E 4F 54 0D 20 4A |;GO ON IF NOT. J| 00002140: 53 52 20 57 52 52 45 44 59 20 3B 52 45 41 44 59 |SR WRREDY ;READY| 00002150: 20 54 4F 20 57 52 49 54 45 3F 0D 20 42 43 53 20 | TO WRITE?. BCS | 00002160: 45 52 4A 4D 50 32 0D 57 52 4C 4C 55 50 20 4C 44 |ERJMP2.WRLLUP LD| 00002170: 41 20 28 42 55 46 50 54 52 29 2C 59 0D 20 53 54 |A (BUFPTR),Y. ST| 00002180: 41 20 50 4F 52 54 30 0D 20 49 4E 43 20 42 55 46 |A PORT0. INC BUF| 00002190: 50 54 52 0D 20 42 4E 45 20 57 52 4C 58 31 0D 20 |PTR. BNE WRLX1. | 000021A0: 49 4E 43 20 42 55 46 50 54 52 2B 31 0D 57 52 4C |INC BUFPTR+1.WRL| 000021B0: 58 31 20 49 4E 58 0D 20 43 50 58 20 23 34 0D 20 |X1 INX. CPX #4. | 000021C0: 42 4E 45 20 57 52 4C 4C 55 50 0D 57 52 4F 4E 20 |BNE WRLLUP.WRON | 000021D0: 44 45 43 20 42 4C 4B 43 54 52 20 3B 41 4E 59 20 |DEC BLKCTR ;ANY | 000021E0: 4D 4F 52 45 20 42 4C 4F 43 4B 53 3F 0D 20 42 4E |MORE BLOCKS?. BN| 000021F0: 45 20 57 43 4D 44 4F 4B 20 3B 59 45 53 20 54 48 |E WCMDOK ;YES TH| 00002200: 45 4E 20 47 45 54 45 4D 0D 20 43 4C 49 20 3B 45 |EN GETEM. CLI ;E| 00002210: 4E 41 42 4C 45 0D 4A 4D 50 20 54 43 4F 4D 50 20 |NABLE.JMP TCOMP | 00002220: 3B 47 4F 20 43 48 45 43 4B 20 46 4F 52 20 43 4F |;GO CHECK FOR CO| 00002230: 4D 50 4C 45 54 49 4F 4E 0D 3B 0D 3B 2B 2B 2B 2B |MPLETION.;.;++++| 00002240: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00002250: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 2B |+++++++++++++.;+| 00002260: 20 4D 49 53 43 45 4C 4C 41 4E 45 4F 55 53 20 43 | MISCELLANEOUS C| 00002270: 4F 4D 4D 41 4E 44 53 20 20 20 20 20 20 20 20 2B |OMMANDS +| 00002280: 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |.;++++++++++++++| 00002290: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 000022A0: 2B 2B 2B 0D 3B 0D 46 4F 52 42 54 4B 20 4C 44 41 |+++.;.FORBTK LDA| 000022B0: 20 23 46 42 54 43 4D 44 20 3B 46 4F 52 4D 41 54 | #FBTCMD ;FORMAT| 000022C0: 20 42 41 44 20 54 52 41 43 4B 0D 20 2E 42 59 54 | BAD TRACK. .BYT| 000022D0: 20 24 32 43 20 3B 42 49 54 0D 46 4F 52 54 52 4B | $2C ;BIT.FORTRK| 000022E0: 20 4C 44 41 20 23 46 52 54 43 4D 44 20 3B 46 4F | LDA #FRTCMD ;FO| 000022F0: 52 4D 41 54 20 54 52 41 43 4B 0D 20 2E 42 59 54 |RMAT TRACK. .BYT| 00002300: 20 24 32 43 20 3B 42 49 54 0D 46 4F 52 4D 41 54 | $2C ;BIT.FORMAT| 00002310: 20 4C 44 41 20 23 46 4F 52 43 4D 44 20 3B 46 4F | LDA #FORCMD ;FO| 00002320: 52 4D 41 54 20 44 52 49 56 45 0D 20 43 50 58 20 |RMAT DRIVE. CPX | 00002330: 23 27 36 27 20 3B 43 48 45 43 4B 20 43 4F 44 45 |#'6' ;CHECK CODE| 00002340: 20 49 4E 20 58 0D 20 42 4E 45 20 4E 4F 46 52 4D | IN X. BNE NOFRM| 00002350: 54 20 3B 42 59 50 41 53 53 20 49 46 20 4E 4F 54 |T ;BYPASS IF NOT| 00002360: 0D 20 43 50 59 20 23 27 34 27 20 3B 41 4E 44 20 |. CPY #'4' ;AND | 00002370: 43 48 45 43 4B 20 59 0D 20 42 4E 45 20 4E 4F 46 |CHECK Y. BNE NOF| 00002380: 52 4D 54 20 3B 42 59 50 41 53 53 20 4E 4F 54 20 |RMT ;BYPASS NOT | 00002390: 34 0D 20 50 48 41 0D 20 4C 44 41 20 53 45 43 41 |4. PHA. LDA SECA| 000023A0: 44 52 20 3B 43 4C 45 41 52 20 53 45 43 54 4F 52 |DR ;CLEAR SECTOR| 000023B0: 20 4E 55 4D 42 45 52 0D 20 41 4E 44 20 23 24 43 | NUMBER. AND #$C| 000023C0: 30 20 3B 53 41 56 45 20 43 59 4C 20 4D 53 42 0D |0 ;SAVE CYL MSB.| 000023D0: 20 53 54 41 20 53 45 43 41 44 52 0D 20 50 4C 41 | STA SECADR. PLA| 000023E0: 0D 20 2E 42 59 54 20 24 32 43 20 3B 42 49 54 0D |. .BYT $2C ;BIT.| 000023F0: 56 45 52 49 46 59 20 4C 44 41 20 23 56 45 52 43 |VERIFY LDA #VERC| 00002400: 4D 44 20 3B 56 45 52 49 46 59 0D 20 2E 42 59 54 |MD ;VERIFY. .BYT| 00002410: 20 24 32 43 20 3B 42 49 54 0D 52 45 43 41 4C 20 | $2C ;BIT.RECAL | 00002420: 3D 20 2A 20 3B 52 45 43 41 4C 49 42 52 41 54 45 |= * ;RECALIBRATE| 00002430: 20 54 48 45 20 44 52 49 56 45 0D 20 4C 44 41 20 | THE DRIVE. LDA | 00002440: 23 52 43 41 43 4D 44 20 3B 47 45 54 20 43 4F 4D |#RCACMD ;GET COM| 00002450: 4D 41 4E 44 20 42 59 54 45 0D 20 2E 42 59 54 20 |MAND BYTE. .BYT | 00002460: 24 32 43 20 3B 42 49 54 0D 53 45 45 4B 20 4C 44 |$2C ;BIT.SEEK LD| 00002470: 41 20 23 53 4B 43 4D 44 0D 20 2E 42 59 54 20 24 |A #SKCMD. .BYT $| 00002480: 32 43 20 3B 42 49 54 0D 54 44 52 45 44 59 20 4C |2C ;BIT.TDREDY L| 00002490: 44 41 20 23 54 44 52 43 4D 44 20 3B 54 45 53 54 |DA #TDRCMD ;TEST| 000024A0: 20 44 52 49 56 45 20 52 45 41 44 59 0D 20 2E 42 | DRIVE READY. .B| 000024B0: 59 54 20 24 32 43 20 3B 42 49 54 0D 53 42 44 49 |YT $2C ;BIT.SBDI| 000024C0: 41 47 20 4C 44 41 20 23 42 44 47 43 4D 44 20 3B |AG LDA #BDGCMD ;| 000024D0: 53 45 43 54 4F 52 20 42 55 46 46 45 52 20 44 49 |SECTOR BUFFER DI| 000024E0: 41 47 0D 20 2E 42 59 54 20 24 32 43 20 3B 42 49 |AG. .BYT $2C ;BI| 000024F0: 54 0D 44 52 44 49 41 47 20 4C 44 41 20 23 44 44 |T.DRDIAG LDA #DD| 00002500: 47 43 4D 44 20 3B 44 52 49 56 45 20 44 49 41 47 |GCMD ;DRIVE DIAG| 00002510: 0D 20 2E 42 59 54 20 24 32 43 20 3B 42 49 54 0D |. .BYT $2C ;BIT.| 00002520: 43 54 44 49 41 47 20 4C 44 41 20 23 43 44 47 43 |CTDIAG LDA #CDGC| 00002530: 4D 44 20 3B 43 4F 4E 54 4F 4C 4C 45 52 20 44 49 |MD ;CONTOLLER DI| 00002540: 41 47 0D 43 4D 44 4F 55 54 20 53 54 41 20 43 4D |AG.CMDOUT STA CM| 00002550: 44 42 59 54 20 3B 50 55 54 20 49 4E 20 43 4F 4D |DBYT ;PUT IN COM| 00002560: 4D 41 4E 44 0D 20 43 4D 50 20 23 46 4F 52 43 4D |MAND. CMP #FORCM| 00002570: 44 20 3B 49 53 20 49 54 20 46 4F 52 4D 41 54 3F |D ;IS IT FORMAT?| 00002580: 0D 20 42 4E 45 20 43 4D 44 4F 55 31 0D 20 4A 53 |. BNE CMDOU1. JS| 00002590: 52 20 50 52 49 4D 45 46 20 3B 50 52 49 4D 45 20 |R PRIMEF ;PRIME | 000025A0: 54 48 45 20 54 49 4D 45 52 46 0D 20 4A 4D 50 20 |THE TIMERF. JMP | 000025B0: 43 4D 44 4F 55 33 0D 43 4D 44 4F 55 31 20 43 4D |CMDOU3.CMDOU1 CM| 000025C0: 50 20 23 44 44 47 43 4D 44 20 3B 44 52 49 56 45 |P #DDGCMD ;DRIVE| 000025D0: 20 44 49 41 47 3F 0D 20 42 4E 45 20 43 4D 44 4F | DIAG?. BNE CMDO| 000025E0: 55 32 0D 20 4A 53 52 20 50 52 49 4D 45 43 20 3B |U2. JSR PRIMEC ;| 000025F0: 50 52 49 4D 45 20 54 49 4D 45 52 20 46 4F 52 20 |PRIME TIMER FOR | 00002600: 44 49 41 47 0D 20 4A 4D 50 20 43 4D 44 4F 55 33 |DIAG. JMP CMDOU3| 00002610: 0D 43 4D 44 4F 55 32 20 4A 53 52 20 50 52 49 4D |.CMDOU2 JSR PRIM| 00002620: 45 4E 20 3B 53 45 54 20 4E 4F 52 4D 41 4C 20 54 |EN ;SET NORMAL T| 00002630: 49 4D 45 52 0D 43 4D 44 4F 55 33 20 4A 53 52 20 |IMER.CMDOU3 JSR | 00002640: 53 4E 44 43 4D 44 20 3B 53 45 4E 44 20 54 48 45 |SNDCMD ;SEND THE| 00002650: 20 43 4F 4D 4D 41 4E 44 0D 20 42 43 43 20 43 4D | COMMAND. BCC CM| 00002660: 44 4F 55 34 20 3B 47 4F 20 49 46 20 4E 4F 20 45 |DOU4 ;GO IF NO E| 00002670: 52 52 4F 52 0D 4E 4F 46 52 4D 54 20 53 45 43 20 |RROR.NOFRMT SEC | 00002680: 3B 45 4E 53 55 52 45 20 43 41 52 52 59 20 53 45 |;ENSURE CARRY SE| 00002690: 54 0D 20 52 54 53 20 3B 52 45 54 55 52 4E 20 49 |T. RTS ;RETURN I| 000026A0: 46 20 45 52 52 4F 52 0D 43 4D 44 4F 55 34 20 4A |F ERROR.CMDOU4 J| 000026B0: 4D 50 20 54 43 4F 4D 50 20 3B 47 4F 20 54 45 53 |MP TCOMP ;GO TES| 000026C0: 54 20 46 4F 52 20 43 4F 4D 50 4C 45 54 49 4F 4E |T FOR COMPLETION| 000026D0: 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |.;++++++++++++++| 000026E0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 000026F0: 2B 2B 2B 0D 3B 2B 20 53 45 54 55 50 20 54 48 45 |+++.;+ SETUP THE| 00002700: 20 44 43 42 2C 20 54 49 4D 45 52 53 2C 20 45 54 | DCB, TIMERS, ET| 00002710: 43 2E 20 20 20 2B 0D 3B 2B 20 46 4F 52 20 54 48 |C. +.;+ FOR TH| 00002720: 45 20 52 45 41 44 20 41 4E 44 20 57 52 49 54 45 |E READ AND WRITE| 00002730: 20 20 20 20 20 20 20 20 2B 0D 3B 2B 20 52 4F 55 | +.;+ ROU| 00002740: 54 49 4E 45 53 2E 20 20 20 20 20 20 20 20 20 20 |TINES. | 00002750: 20 20 20 20 20 20 20 20 20 20 20 2B 0D 3B 2B 2B | +.;++| 00002760: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00002770: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D |+++++++++++++++.| 00002780: 3B 0D 53 45 54 55 50 20 3D 20 2A 20 3B 53 45 54 |;.SETUP = * ;SET| 00002790: 20 55 50 20 50 41 52 4D 53 20 46 4F 52 20 52 45 | UP PARMS FOR RE| 000027A0: 41 44 20 41 4E 44 20 57 52 49 54 45 0D 20 53 54 |AD AND WRITE. ST| 000027B0: 41 20 43 4D 44 42 59 54 20 3B 50 55 54 20 43 4F |A CMDBYT ;PUT CO| 000027C0: 4D 4D 41 4E 44 20 49 4E 20 44 43 42 0D 20 4C 44 |MMAND IN DCB. LD| 000027D0: 41 20 42 55 46 41 44 52 20 3B 47 45 54 20 42 55 |A BUFADR ;GET BU| 000027E0: 46 46 45 52 20 41 44 44 52 45 53 53 0D 20 53 54 |FFER ADDRESS. ST| 000027F0: 41 20 42 55 46 50 54 52 20 3B 53 45 54 20 55 50 |A BUFPTR ;SET UP| 00002800: 20 4C 4F 57 20 4D 45 4D 4F 52 59 0D 20 4C 44 41 | LOW MEMORY. LDA| 00002810: 20 42 55 46 41 44 52 2B 31 0D 20 53 54 41 20 42 | BUFADR+1. STA B| 00002820: 55 46 50 54 52 2B 31 0D 20 4C 44 41 20 42 4C 4B |UFPTR+1. LDA BLK| 00002830: 43 4E 54 20 3B 47 45 54 20 4E 55 4D 42 45 52 20 |CNT ;GET NUMBER | 00002840: 4F 46 20 42 4C 4F 43 4B 53 0D 20 53 54 41 20 42 |OF BLOCKS. STA B| 00002850: 4C 4B 43 54 52 20 3B 50 55 54 20 49 4E 20 57 4F |LKCTR ;PUT IN WO| 00002860: 52 4B 20 41 52 45 41 0D 20 4A 53 52 20 44 45 46 |RK AREA. JSR DEF| 00002870: 53 45 54 20 3B 53 45 54 20 53 54 45 50 20 52 41 |SET ;SET STEP RA| 00002880: 54 45 20 49 4E 20 44 43 42 0D 53 4E 44 43 4D 44 |TE IN DCB.SNDCMD| 00002890: 20 3D 20 2A 20 3B 53 45 4E 44 20 43 4F 4D 4D 41 | = * ;SEND COMMA| 000028A0: 4E 44 0D 20 4C 44 59 20 23 30 30 20 3B 50 52 49 |ND. LDY #00 ;PRI| 000028B0: 4D 45 20 50 4F 49 4E 54 45 52 20 54 4F 20 42 45 |ME POINTER TO BE| 000028C0: 47 49 4E 0D 20 53 54 41 20 50 4F 52 54 32 20 3B |GIN. STA PORT2 ;| 000028D0: 53 45 54 20 43 4F 4D 4D 41 4E 44 20 4D 4F 44 45 |SET COMMAND MODE| 000028E0: 0D 20 53 54 59 20 50 4F 52 54 33 20 3B 45 4E 53 |. STY PORT3 ;ENS| 000028F0: 55 52 45 20 44 4D 41 20 53 54 55 46 46 20 4F 46 |URE DMA STUFF OF| 00002900: 46 0D 20 4A 53 52 20 43 4D 44 52 44 59 20 3B 47 |F. JSR CMDRDY ;G| 00002910: 4F 20 43 48 45 43 4B 20 46 4F 52 20 52 45 41 44 |O CHECK FOR READ| 00002920: 59 0D 20 42 43 43 20 53 4E 44 43 4F 4B 20 3B 47 |Y. BCC SNDCOK ;G| 00002930: 4F 20 49 46 20 57 45 4C 4C 0D 20 4C 44 41 20 23 |O IF WELL. LDA #| 00002940: 53 4E 44 45 52 52 20 3B 53 45 54 20 45 52 52 4F |SNDERR ;SET ERRO| 00002950: 52 20 43 4F 44 45 0D 20 53 45 43 0D 20 52 54 53 |R CODE. SEC. RTS| 00002960: 0D 53 4E 44 43 4F 4B 20 3D 20 2A 20 3B 52 45 41 |.SNDCOK = * ;REA| 00002970: 44 59 20 54 4F 20 53 45 4E 44 20 44 43 42 20 4E |DY TO SEND DCB N| 00002980: 4F 57 0D 20 4C 44 41 20 44 43 42 2C 59 0D 20 53 |OW. LDA DCB,Y. S| 00002990: 54 41 20 50 4F 52 54 30 0D 20 49 4E 59 0D 20 43 |TA PORT0. INY. C| 000029A0: 50 59 20 23 36 20 3B 41 4C 4C 20 4F 46 20 49 54 |PY #6 ;ALL OF IT| 000029B0: 3F 0D 20 42 4E 45 20 53 4E 44 43 4F 4B 0D 43 48 |?. BNE SNDCOK.CH| 000029C0: 4B 53 4F 4B 20 43 4C 43 20 3B 43 4C 45 41 52 20 |KSOK CLC ;CLEAR | 000029D0: 43 4F 44 45 20 46 4F 52 20 4E 4F 57 0D 20 52 54 |CODE FOR NOW. RT| 000029E0: 53 0D 3B 0D 3B 2B 20 43 48 45 43 4B 20 46 4F 52 |S.;.;+ CHECK FOR| 000029F0: 20 52 45 41 44 59 20 54 4F 20 52 45 41 44 20 4F | READY TO READ O| 00002A00: 52 20 57 52 49 54 45 0D 43 4D 44 52 44 59 20 4C |R WRITE.CMDRDY L| 00002A10: 44 41 20 23 24 30 44 20 3B 43 4F 44 45 20 46 4F |DA #$0D ;CODE FO| 00002A20: 52 20 43 4D 44 20 52 45 41 44 59 0D 20 2E 42 59 |R CMD READY. .BY| 00002A30: 54 20 24 32 43 0D 52 44 52 45 44 59 20 4C 44 41 |T $2C.RDREDY LDA| 00002A40: 20 23 52 44 43 48 4B 20 3B 47 45 54 20 43 48 45 | #RDCHK ;GET CHE| 00002A50: 43 4B 20 42 59 54 45 0D 20 2E 42 59 54 20 24 32 |CK BYTE. .BYT $2| 00002A60: 43 20 3B 41 44 44 20 41 20 42 49 54 0D 57 52 52 |C ;ADD A BIT.WRR| 00002A70: 45 44 59 20 4C 44 41 20 23 57 52 54 43 48 4B 20 |EDY LDA #WRTCHK | 00002A80: 3B 47 45 54 20 43 48 45 43 4B 20 42 59 54 45 0D |;GET CHECK BYTE.| 00002A90: 20 53 54 41 20 43 48 4B 42 59 54 20 3B 53 41 56 | STA CHKBYT ;SAV| 00002AA0: 45 20 42 59 54 45 20 54 4F 20 43 4F 4D 50 41 52 |E BYTE TO COMPAR| 00002AB0: 45 0D 20 4C 44 59 20 23 30 20 3B 43 4C 45 41 52 |E. LDY #0 ;CLEAR| 00002AC0: 20 43 4F 55 4E 54 45 52 53 0D 20 53 54 59 20 54 | COUNTERS. STY T| 00002AD0: 49 4D 45 52 30 0D 20 53 54 59 20 54 49 4D 45 52 |IMER0. STY TIMER| 00002AE0: 31 0D 57 44 4C 4F 4F 50 20 4C 44 41 20 50 4F 52 |1.WDLOOP LDA POR| 00002AF0: 54 31 20 3B 47 45 54 20 53 54 41 54 55 53 20 42 |T1 ;GET STATUS B| 00002B00: 59 54 45 0D 20 41 4E 44 20 23 24 30 46 20 3B 43 |YTE. AND #$0F ;C| 00002B10: 4C 45 41 52 20 47 41 52 42 41 47 45 0D 20 43 4D |LEAR GARBAGE. CM| 00002B20: 50 20 43 48 4B 42 59 54 20 3B 49 53 20 57 48 41 |P CHKBYT ;IS WHA| 00002B30: 54 20 57 45 20 57 41 4E 54 3F 0D 20 42 45 51 20 |T WE WANT?. BEQ | 00002B40: 43 48 4B 53 4F 4B 20 3B 47 4F 20 4F 4E 20 49 46 |CHKSOK ;GO ON IF| 00002B50: 20 53 4F 0D 20 44 45 43 20 54 49 4D 45 52 30 20 | SO. DEC TIMER0 | 00002B60: 3B 57 41 49 54 20 53 4F 4D 45 0D 20 42 4E 45 20 |;WAIT SOME. BNE | 00002B70: 57 44 4C 4F 4F 50 0D 20 44 45 43 20 54 49 4D 45 |WDLOOP. DEC TIME| 00002B80: 52 31 20 3B 41 4E 44 20 53 4F 4D 45 20 4D 4F 52 |R1 ;AND SOME MOR| 00002B90: 45 20 44 45 4C 41 59 0D 20 42 4E 45 20 57 44 4C |E DELAY. BNE WDL| 00002BA0: 4F 4F 50 0D 20 4C 44 41 20 23 57 41 54 45 52 52 |OOP. LDA #WATERR| 00002BB0: 20 3B 4C 4F 41 44 20 45 52 52 4F 52 20 43 4F 44 | ;LOAD ERROR COD| 00002BC0: 45 0D 20 53 45 43 20 3B 53 45 54 20 45 52 52 4F |E. SEC ;SET ERRO| 00002BD0: 52 0D 20 52 54 53 20 3B 52 45 54 55 52 4E 20 57 |R. RTS ;RETURN W| 00002BE0: 49 54 48 20 45 52 52 4F 52 0D 3B 0D 3B 2B 2B 2B |ITH ERROR.;.;+++| 00002BF0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00002C00: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B |++++++++++++++.;| 00002C10: 2B 20 47 45 54 20 54 48 45 20 44 52 49 56 45 20 |+ GET THE DRIVE | 00002C20: 50 41 52 4D 53 20 42 59 20 52 45 41 44 2D 20 20 |PARMS BY READ- | 00002C30: 2B 0D 3B 2B 20 49 4E 47 20 53 45 43 54 4F 52 20 |+.;+ ING SECTOR | 00002C40: 30 20 41 4E 44 20 45 58 54 52 41 43 54 49 4E 47 |0 AND EXTRACTING| 00002C50: 20 20 20 2B 0D 3B 2B 20 54 48 45 20 50 41 52 4D | +.;+ THE PARM| 00002C60: 53 20 46 52 4F 4D 20 41 20 46 4F 52 4D 41 54 45 |S FROM A FORMATE| 00002C70: 44 20 20 20 20 20 2B 0D 3B 2B 20 44 52 49 56 45 |D +.;+ DRIVE| 00002C80: 20 20 20 20 49 4E 54 4F 20 54 48 45 20 50 41 52 | INTO THE PAR| 00002C90: 4D 20 54 41 42 4C 45 20 20 2B 0D 3B 2B 20 4F 46 |M TABLE +.;+ OF| 00002CA0: 20 44 52 49 56 45 20 43 48 41 52 41 43 54 45 52 | DRIVE CHARACTER| 00002CB0: 49 53 54 49 43 53 2E 20 20 20 20 20 2B 0D 3B 2B |ISTICS. +.;+| 00002CC0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00002CD0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00002CE0: 0D 3B 0D 47 45 54 50 52 4D 20 3D 20 2A 20 3B 53 |.;.GETPRM = * ;S| 00002CF0: 45 54 20 55 50 20 50 54 52 20 54 4F 20 50 41 52 |ET UP PTR TO PAR| 00002D00: 4D 20 54 41 42 0D 20 4C 44 41 20 50 54 46 4F 52 |M TAB. LDA PTFOR| 00002D10: 4D 0D 20 42 4E 45 20 44 45 46 53 45 54 20 3B 45 |M. BNE DEFSET ;E| 00002D20: 58 49 54 20 49 46 20 46 4F 52 4D 41 54 54 49 4E |XIT IF FORMATTIN| 00002D30: 47 0D 20 4C 44 41 20 23 31 0D 20 53 54 41 20 42 |G. LDA #1. STA B| 00002D40: 4C 4B 43 4E 54 0D 20 4C 44 41 20 48 44 4E 55 4D |LKCNT. LDA HDNUM| 00002D50: 0D 20 41 4E 44 20 23 24 32 30 20 3B 43 4C 45 41 |. AND #$20 ;CLEA| 00002D60: 52 20 41 4C 4C 20 42 55 54 20 44 52 49 56 45 0D |R ALL BUT DRIVE.| 00002D70: 20 53 54 41 20 48 44 4E 55 4D 0D 20 4C 44 41 20 | STA HDNUM. LDA | 00002D80: 23 30 20 3B 53 45 43 20 30 2C 20 43 59 4C 20 30 |#0 ;SEC 0, CYL 0| 00002D90: 20 41 4C 53 4F 0D 20 53 54 41 20 43 59 4C 4E 55 | ALSO. STA CYLNU| 00002DA0: 4D 0D 20 53 54 41 20 53 45 43 41 44 52 0D 20 4A |M. STA SECADR. J| 00002DB0: 53 52 20 44 45 46 53 45 54 20 3B 44 45 46 41 55 |SR DEFSET ;DEFAU| 00002DC0: 4C 54 20 53 54 45 50 20 52 41 54 45 0D 20 4A 53 |LT STEP RATE. JS| 00002DD0: 52 20 54 44 52 45 44 59 20 3B 43 48 45 43 4B 20 |R TDREDY ;CHECK | 00002DE0: 49 46 20 45 58 49 53 54 53 0D 20 42 43 53 20 44 |IF EXISTS. BCS D| 00002DF0: 45 58 49 54 54 20 3B 47 4F 20 49 46 20 4E 4F 54 |EXITT ;GO IF NOT| 00002E00: 20 48 45 52 45 0D 20 4C 44 41 20 23 52 44 43 4D | HERE. LDA #RDCM| 00002E10: 44 20 3B 53 45 54 20 55 50 20 46 4F 52 20 52 45 |D ;SET UP FOR RE| 00002E20: 41 44 0D 20 4A 53 52 20 53 45 54 55 50 20 3B 47 |AD. JSR SETUP ;G| 00002E30: 45 54 20 52 45 41 44 59 20 54 4F 20 52 45 41 44 |ET READY TO READ| 00002E40: 0D 20 42 43 53 20 44 45 46 53 45 54 20 3B 52 45 |. BCS DEFSET ;RE| 00002E50: 54 55 52 4E 20 49 46 20 42 41 44 0D 20 4A 53 52 |TURN IF BAD. JSR| 00002E60: 20 52 44 52 45 44 59 0D 20 42 43 53 20 44 45 46 | RDREDY. BCS DEF| 00002E70: 53 45 54 0D 20 4C 44 59 20 23 30 20 3B 50 52 49 |SET. LDY #0 ;PRI| 00002E80: 4D 45 20 43 4F 55 4E 54 45 52 0D 20 4C 44 58 20 |ME COUNTER. LDX | 00002E90: 48 44 4E 55 4D 20 3B 47 45 54 20 44 52 49 56 45 |HDNUM ;GET DRIVE| 00002EA0: 20 54 41 42 4C 45 20 4F 46 46 53 45 54 0D 20 4C | TABLE OFFSET. L| 00002EB0: 44 41 20 50 4F 52 54 30 20 3B 43 48 45 43 4B 20 |DA PORT0 ;CHECK | 00002EC0: 49 46 20 46 4F 52 4D 41 54 45 44 0D 20 43 4D 50 |IF FORMATED. CMP| 00002ED0: 20 23 27 43 27 20 3B 49 53 20 49 54 20 43 3F 0D | #'C' ;IS IT C?.| 00002EE0: 20 42 4E 45 20 4E 4F 49 4E 49 54 0D 20 49 4E 59 | BNE NOINIT. INY| 00002EF0: 0D 20 4C 44 41 20 50 4F 52 54 30 0D 20 43 4D 50 |. LDA PORT0. CMP| 00002F00: 20 23 27 36 27 20 3B 49 53 20 49 54 20 53 49 58 | #'6' ;IS IT SIX| 00002F10: 0D 20 42 4E 45 20 4E 4F 49 4E 49 54 0D 20 49 4E |. BNE NOINIT. IN| 00002F20: 59 0D 20 4C 44 41 20 50 4F 52 54 30 0D 20 43 4D |Y. LDA PORT0. CM| 00002F30: 50 20 23 27 34 27 20 3B 49 53 20 49 54 20 46 4F |P #'4' ;IS IT FO| 00002F40: 55 52 20 46 4F 52 20 43 36 34 3F 0D 20 42 4E 45 |UR FOR C64?. BNE| 00002F50: 20 4E 4F 49 4E 49 54 0D 4D 56 45 50 52 4D 20 4C | NOINIT.MVEPRM L| 00002F60: 44 41 20 50 4F 52 54 30 0D 20 53 54 41 20 50 54 |DA PORT0. STA PT| 00002F70: 31 2C 58 0D 20 49 4E 58 0D 20 49 4E 59 0D 20 43 |1,X. INX. INY. C| 00002F80: 50 59 20 23 33 34 20 3B 47 4F 54 20 45 4D 20 41 |PY #34 ;GOT EM A| 00002F90: 4C 4C 3F 0D 20 42 4E 45 20 4D 56 45 50 52 4D 0D |LL?. BNE MVEPRM.| 00002FA0: 4E 4F 49 4E 49 54 20 4C 44 58 20 23 32 20 3B 46 |NOINIT LDX #2 ;F| 00002FB0: 4C 55 53 48 20 54 48 45 20 52 45 53 54 0D 4E 4F |LUSH THE REST.NO| 00002FC0: 49 4E 49 4C 20 4C 44 41 20 50 4F 52 54 30 0D 20 |INIL LDA PORT0. | 00002FD0: 49 4E 59 0D 20 42 4E 45 20 4E 4F 49 4E 49 4C 0D |INY. BNE NOINIL.| 00002FE0: 20 44 45 58 0D 20 42 4E 45 20 4E 4F 49 4E 49 4C | DEX. BNE NOINIL| 00002FF0: 0D 20 4A 53 52 20 54 43 4F 4D 50 20 3B 43 4C 45 |. JSR TCOMP ;CLE| 00003000: 41 52 20 53 54 41 54 55 53 0D 44 45 46 53 45 54 |AR STATUS.DEFSET| 00003010: 20 3D 20 2A 0D 20 4C 44 41 20 48 44 4E 55 4D 0D | = *. LDA HDNUM.| 00003020: 47 45 54 50 52 41 20 3D 20 2A 0D 20 41 4E 44 20 |GETPRA = *. AND | 00003030: 23 24 32 30 20 3B 53 45 45 20 49 46 20 30 20 4F |#$20 ;SEE IF 0 O| 00003040: 52 20 31 0D 20 54 41 58 0D 44 5A 45 52 4F 58 20 |R 1. TAX.DZEROX | 00003050: 3D 20 2A 0D 20 4C 44 41 20 50 54 53 54 45 50 2C |= *. LDA PTSTEP,| 00003060: 58 20 3B 47 45 54 20 53 54 45 50 20 52 41 54 45 |X ;GET STEP RATE| 00003070: 0D 20 53 54 41 20 53 52 41 54 45 20 3B 49 4E 20 |. STA SRATE ;IN | 00003080: 44 43 42 0D 20 43 4C 43 0D 44 45 58 49 54 54 20 |DCB. CLC.DEXITT | 00003090: 3D 20 2A 20 3B 52 45 54 55 52 4E 20 4E 4F 20 44 |= * ;RETURN NO D| 000030A0: 52 49 56 45 0D 20 52 54 53 20 3B 52 45 54 55 52 |RIVE. RTS ;RETUR| 000030B0: 4E 20 4F 46 46 53 45 54 20 49 4E 20 58 0D 3B 0D |N OFFSET IN X.;.| 000030C0: 3B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |;+++++++++++++++| 000030D0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 000030E0: 2B 2B 0D 3B 2B 20 50 45 52 46 4F 52 4D 20 54 48 |++.;+ PERFORM TH| 000030F0: 45 20 52 45 53 45 54 20 46 55 4E 43 54 49 4F 4E |E RESET FUNCTION| 00003100: 2E 20 20 20 2B 0D 3B 2B 20 46 41 4C 4C 20 54 48 |. +.;+ FALL TH| 00003110: 52 55 20 41 4E 44 20 53 45 54 20 44 52 49 56 45 |RU AND SET DRIVE| 00003120: 20 50 41 52 4D 53 2E 2B 0D 3B 2B 2B 2B 2B 2B 2B | PARMS.+.;++++++| 00003130: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00003140: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 0D 52 45 |+++++++++++.;.RE| 00003150: 53 45 54 20 3D 20 2A 20 3B 52 45 53 45 54 20 54 |SET = * ;RESET T| 00003160: 48 45 20 43 4F 4E 54 52 4F 4C 4C 45 52 0D 20 53 |HE CONTROLLER. S| 00003170: 54 41 20 50 4F 52 54 31 20 3B 49 53 53 55 45 20 |TA PORT1 ;ISSUE | 00003180: 52 45 53 45 54 0D 20 4C 44 59 20 23 30 0D 20 4C |RESET. LDY #0. L| 00003190: 44 58 20 23 30 0D 52 45 53 45 54 31 20 44 45 59 |DX #0.RESET1 DEY| 000031A0: 0D 20 42 4E 45 20 52 45 53 45 54 31 0D 52 45 53 |. BNE RESET1.RES| 000031B0: 45 54 32 20 44 45 58 0D 20 42 4E 45 20 52 45 53 |ET2 DEX. BNE RES| 000031C0: 45 54 32 0D 20 4C 44 41 20 50 4F 52 54 31 20 3B |ET2. LDA PORT1 ;| 000031D0: 43 48 45 43 4B 20 49 46 20 52 45 53 45 54 20 4F |CHECK IF RESET O| 000031E0: 4B 0D 20 41 4E 44 20 23 24 33 46 20 3B 4D 55 53 |K. AND #$3F ;MUS| 000031F0: 54 20 41 4C 4C 20 42 45 20 4F 46 46 20 46 4F 52 |T ALL BE OFF FOR| 00003200: 20 4F 4B 0D 20 42 45 51 20 52 45 53 45 54 33 0D | OK. BEQ RESET3.| 00003210: 20 4C 44 41 20 23 24 46 45 20 3B 53 45 54 20 52 | LDA #$FE ;SET R| 00003220: 45 53 45 54 20 45 52 52 4F 52 0D 20 53 45 43 0D |ESET ERROR. SEC.| 00003230: 20 52 54 53 0D 52 45 53 45 54 33 20 3D 20 2A 20 | RTS.RESET3 = * | 00003240: 3B 46 41 4C 4C 20 54 48 52 55 20 54 4F 20 53 45 |;FALL THRU TO SE| 00003250: 54 20 50 41 52 4D 53 0D 3B 2B 2B 2B 2B 2B 2B 2B |T PARMS.;+++++++| 00003260: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00003270: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 2B 20 53 45 |++++++++++.;+ SE| 00003280: 54 20 44 52 49 56 45 20 50 41 52 4D 53 20 46 52 |T DRIVE PARMS FR| 00003290: 4F 4D 20 54 41 42 4C 45 20 20 20 20 2B 0D 3B 2B |OM TABLE +.;+| 000032A0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 000032B0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 000032C0: 0D 3B 0D 53 45 54 50 52 4D 20 3D 20 2A 20 3B 53 |.;.SETPRM = * ;S| 000032D0: 45 54 20 44 52 49 56 45 20 50 41 52 4D 53 0D 20 |ET DRIVE PARMS. | 000032E0: 4C 44 41 20 23 5A 45 52 4F 20 3B 53 45 54 20 44 |LDA #ZERO ;SET D| 000032F0: 52 49 56 45 20 30 20 50 41 52 4D 53 0D 20 53 54 |RIVE 0 PARMS. ST| 00003300: 41 20 48 44 4E 55 4D 20 3B 44 52 49 56 45 20 4E |A HDNUM ;DRIVE N| 00003310: 55 4D 42 45 52 20 49 4E 20 44 43 42 0D 20 4A 53 |UMBER IN DCB. JS| 00003320: 52 20 53 45 54 50 52 31 20 3B 47 4F 20 44 4F 49 |R SETPR1 ;GO DOI| 00003330: 54 0D 20 4C 44 41 20 23 24 32 30 20 3B 44 52 49 |T. LDA #$20 ;DRI| 00003340: 56 45 20 31 20 50 41 52 4D 0D 53 45 54 50 52 31 |VE 1 PARM.SETPR1| 00003350: 20 53 54 41 20 48 44 4E 55 4D 20 3B 50 55 54 20 | STA HDNUM ;PUT | 00003360: 49 4E 20 44 43 42 0D 20 4A 53 52 20 47 45 54 50 |IN DCB. JSR GETP| 00003370: 52 4D 20 3B 47 45 54 20 50 54 20 50 4F 49 4E 54 |RM ;GET PT POINT| 00003380: 45 52 0D 20 4C 44 41 20 23 50 52 4D 43 4D 44 20 |ER. LDA #PRMCMD | 00003390: 3B 47 45 54 20 50 41 52 4D 20 43 4F 4D 4D 41 4E |;GET PARM COMMAN| 000033A0: 44 20 28 30 43 29 0D 20 53 54 41 20 43 4D 44 42 |D (0C). STA CMDB| 000033B0: 59 54 20 3B 50 55 54 20 49 4E 20 44 43 42 0D 20 |YT ;PUT IN DCB. | 000033C0: 4A 53 52 20 53 4E 44 43 4D 44 20 3B 47 4F 20 53 |JSR SNDCMD ;GO S| 000033D0: 45 4E 44 20 54 48 45 20 43 4F 4D 4D 41 4E 44 0D |END THE COMMAND.| 000033E0: 20 4A 53 52 20 57 52 52 45 44 59 20 3B 47 4F 20 | JSR WRREDY ;GO | 000033F0: 43 48 45 43 4B 20 46 4F 52 20 52 45 41 44 59 0D |CHECK FOR READY.| 00003400: 20 42 43 43 20 53 45 54 50 52 32 20 3B 49 46 20 | BCC SETPR2 ;IF | 00003410: 4E 4F 20 45 52 52 4F 52 20 47 4F 0D 4E 4F 44 52 |NO ERROR GO.NODR| 00003420: 49 56 20 4C 44 41 20 23 24 46 46 0D 20 52 54 53 |IV LDA #$FF. RTS| 00003430: 0D 53 45 54 50 52 32 20 4C 44 59 20 23 38 0D 20 |.SETPR2 LDY #8. | 00003440: 4A 53 52 20 44 45 46 53 45 54 20 3B 53 45 54 20 |JSR DEFSET ;SET | 00003450: 50 4F 49 4E 54 45 52 20 54 4F 20 54 41 42 4C 45 |POINTER TO TABLE| 00003460: 0D 53 45 54 50 52 33 20 4C 44 41 20 50 54 31 2C |.SETPR3 LDA PT1,| 00003470: 58 20 3B 53 45 4E 44 20 4F 55 54 20 54 48 45 20 |X ;SEND OUT THE | 00003480: 50 41 52 4D 53 0D 20 53 54 41 20 50 4F 52 54 30 |PARMS. STA PORT0| 00003490: 0D 20 49 4E 58 0D 20 44 45 59 0D 20 42 4E 45 20 |. INX. DEY. BNE | 000034A0: 53 45 54 50 52 33 0D 20 4A 4D 50 20 54 43 4F 4D |SETPR3. JMP TCOM| 000034B0: 50 20 3B 52 45 54 55 52 4E 20 54 48 52 55 20 43 |P ;RETURN THRU C| 000034C0: 48 45 43 4B 45 52 0D 3B 0D 3B 2B 2B 2B 2B 2B 2B |HECKER.;.;++++++| 000034D0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 000034E0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 2B 20 52 |+++++++++++.;+ R| 000034F0: 45 54 55 52 4E 20 54 48 45 20 50 41 52 4D 53 20 |ETURN THE PARMS | 00003500: 54 4F 20 54 48 45 20 43 41 4C 4C 45 52 2B 0D 3B |TO THE CALLER+.;| 00003510: 2B 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |+ | 00003520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003530: 2B 0D 3B 2B 20 49 4E 50 55 54 3A 20 20 41 20 2D |+.;+ INPUT: A -| 00003540: 20 44 52 49 56 45 20 23 20 28 30 20 4F 52 20 31 | DRIVE # (0 OR 1| 00003550: 29 20 20 2B 0D 3B 2B 20 20 20 20 20 20 20 20 20 |) +.;+ | 00003560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003570: 20 20 20 20 20 20 2B 0D 3B 2B 20 4F 55 54 50 55 | +.;+ OUTPU| 00003580: 54 3A 20 41 20 2D 20 4E 55 4D 42 45 52 20 4F 46 |T: A - NUMBER OF| 00003590: 20 48 45 41 44 53 20 20 20 2B 0D 3B 2B 20 20 20 | HEADS +.;+ | 000035A0: 20 20 20 20 20 20 58 20 2D 20 4D 53 42 20 4F 46 | X - MSB OF| 000035B0: 20 23 43 59 4C 49 4E 44 45 52 53 20 2B 0D 3B 2B | #CYLINDERS +.;+| 000035C0: 20 20 20 20 20 20 20 20 20 59 20 2D 20 4C 53 42 | Y - LSB| 000035D0: 20 4F 46 20 23 43 59 4C 49 4E 44 45 52 53 20 2B | OF #CYLINDERS +| 000035E0: 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |.;++++++++++++++| 000035F0: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00003600: 2B 2B 2B 0D 3B 0D 52 45 54 50 52 4D 20 41 53 4C |+++.;.RETPRM ASL| 00003610: 20 41 20 3B 53 48 49 46 54 20 44 52 49 56 45 20 | A ;SHIFT DRIVE | 00003620: 4E 55 4D 42 45 52 0D 20 41 53 4C 20 41 0D 20 41 |NUMBER. ASL A. A| 00003630: 53 4C 20 41 0D 20 41 53 4C 20 41 0D 20 41 53 4C |SL A. ASL A. ASL| 00003640: 20 41 20 3B 54 4F 20 42 49 54 20 35 0D 20 4A 53 | A ;TO BIT 5. JS| 00003650: 52 20 47 45 54 50 52 41 20 3B 47 45 54 20 50 41 |R GETPRA ;GET PA| 00003660: 52 4D 53 0D 20 4C 44 41 20 50 54 48 45 41 44 2C |RMS. LDA PTHEAD,| 00003670: 58 20 3B 47 45 54 20 4E 55 4D 42 45 52 20 4F 46 |X ;GET NUMBER OF| 00003680: 20 48 45 41 44 53 0D 20 50 48 41 20 3B 53 41 56 | HEADS. PHA ;SAV| 00003690: 45 20 49 54 0D 20 4C 44 41 20 50 54 43 59 4C 53 |E IT. LDA PTCYLS| 000036A0: 2B 31 2C 58 20 3B 47 45 54 20 4C 53 42 20 4F 46 |+1,X ;GET LSB OF| 000036B0: 20 43 59 4C 49 4E 44 45 52 53 0D 20 54 41 59 0D | CYLINDERS. TAY.| 000036C0: 20 4C 44 41 20 50 54 43 59 4C 53 2C 58 20 3B 47 | LDA PTCYLS,X ;G| 000036D0: 45 54 20 4D 53 42 20 4F 46 20 43 59 4C 49 4E 44 |ET MSB OF CYLIND| 000036E0: 45 52 53 0D 20 54 41 58 0D 20 50 4C 41 20 3B 52 |ERS. TAX. PLA ;R| 000036F0: 45 53 54 4F 52 45 20 4E 55 4D 42 45 52 20 48 45 |ESTORE NUMBER HE| 00003700: 41 44 53 0D 20 52 54 53 20 3B 52 45 54 55 52 4E |ADS. RTS ;RETURN| 00003710: 20 54 4F 20 43 41 4C 4C 45 52 0D 3B 0D 3B 0D 3B | TO CALLER.;.;.;| 00003720: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00003730: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00003740: 2B 0D 3B 2B 20 50 52 49 4D 45 20 54 48 45 20 43 |+.;+ PRIME THE C| 00003750: 4F 55 4E 54 44 4F 57 4E 20 54 49 4D 45 52 20 20 |OUNTDOWN TIMER | 00003760: 20 20 20 2B 0D 3B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B | +.;++++++++++| 00003770: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00003780: 2B 2B 2B 2B 2B 2B 2B 0D 3B 0D 50 52 49 4D 45 4E |+++++++.;.PRIMEN| 00003790: 20 4C 44 41 20 31 20 3B 4E 4F 52 4D 41 4C 20 54 | LDA 1 ;NORMAL T| 000037A0: 49 4D 45 4F 55 54 0D 20 42 4E 45 20 50 52 49 4D |IMEOUT. BNE PRIM| 000037B0: 45 54 0D 50 52 49 4D 45 46 20 4C 44 41 20 32 35 |ET.PRIMEF LDA 25| 000037C0: 35 20 3B 46 4F 52 4D 41 54 20 57 41 49 54 0D 20 |5 ;FORMAT WAIT. | 000037D0: 42 4E 45 20 50 52 49 4D 45 54 0D 50 52 49 4D 45 |BNE PRIMET.PRIME| 000037E0: 43 20 4C 44 41 20 31 30 20 3B 44 49 41 47 20 54 |C LDA 10 ;DIAG T| 000037F0: 49 4D 45 0D 50 52 49 4D 45 54 20 53 54 41 20 54 |IME.PRIMET STA T| 00003800: 49 4D 45 52 32 20 3B 54 55 43 4B 20 41 57 41 59 |IMER2 ;TUCK AWAY| 00003810: 0D 20 4C 44 41 20 23 30 20 3B 43 4C 45 41 52 20 |. LDA #0 ;CLEAR | 00003820: 54 48 45 20 4F 54 48 45 52 53 0D 20 53 54 41 20 |THE OTHERS. STA | 00003830: 54 49 4D 45 52 30 0D 20 53 54 41 20 54 49 4D 45 |TIMER0. STA TIME| 00003840: 52 31 0D 20 52 54 53 0D 3B 0D 48 44 49 4E 49 54 |R1. RTS.;.HDINIT| 00003850: 20 4C 44 59 20 23 35 38 20 3B 49 4E 49 54 20 50 | LDY #58 ;INIT P| 00003860: 54 41 42 53 20 41 4E 44 20 44 43 42 0D 20 4C 44 |TABS AND DCB. LD| 00003870: 41 20 23 30 20 3B 5A 45 52 4F 20 54 48 45 20 41 |A #0 ;ZERO THE A| 00003880: 52 45 41 53 0D 48 44 49 4C 55 50 20 53 54 41 20 |REAS.HDILUP STA | 00003890: 50 54 46 4F 52 4D 2C 59 0D 20 44 45 59 0D 20 42 |PTFORM,Y. DEY. B| 000038A0: 50 4C 20 48 44 49 4C 55 50 20 3B 5A 45 52 4F 20 |PL HDILUP ;ZERO | 000038B0: 41 4C 4C 0D 20 4C 44 59 20 23 32 31 20 3B 4C 45 |ALL. LDY #21 ;LE| 000038C0: 4E 47 54 48 20 4F 46 20 44 45 46 41 55 4C 54 20 |NGTH OF DEFAULT | 000038D0: 50 54 41 42 0D 48 44 50 4C 55 50 20 4C 44 41 20 |PTAB.HDPLUP LDA | 000038E0: 44 45 46 50 54 2C 59 20 3B 47 45 54 20 41 20 42 |DEFPT,Y ;GET A B| 000038F0: 59 54 45 0D 20 53 54 41 20 50 54 31 2C 59 0D 20 |YTE. STA PT1,Y. | 00003900: 53 54 41 20 50 54 32 2C 59 0D 20 44 45 59 0D 20 |STA PT2,Y. DEY. | 00003910: 42 50 4C 20 48 44 50 4C 55 50 20 3B 4D 4F 56 45 |BPL HDPLUP ;MOVE| 00003920: 20 41 4C 4C 0D 20 52 54 53 20 3B 45 4E 44 20 49 | ALL. RTS ;END I| 00003930: 4E 49 54 0D 3B 0D 3B 2B 2D 2D 2D 2D 2D 2D 2D 2D |NIT.;.;+--------| 00003940: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |----------------| 00003950: 2D 2D 2D 2D 2D 2D 2D 2B 0D 3B 2B 20 54 48 45 20 |-------+.;+ THE | 00003960: 44 52 49 56 45 20 50 41 52 41 4D 45 54 45 52 20 |DRIVE PARAMETER | 00003970: 54 41 42 4C 45 20 49 53 20 20 2B 0D 3B 2B 20 46 |TABLE IS +.;+ F| 00003980: 4F 4C 4C 4F 57 53 3A 20 20 20 20 20 20 20 20 20 |OLLOWS: | 00003990: 20 20 20 20 20 20 20 20 20 20 20 20 20 2B 0D 3B | +.;| 000039A0: 2B 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |+ | 000039B0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000039C0: 2B 0D 3B 2B 20 4C 45 4E 47 54 48 20 20 20 20 44 |+.;+ LENGTH D| 000039D0: 45 53 43 52 49 50 54 49 4F 4E 20 20 20 20 20 20 |ESCRIPTION | 000039E0: 20 20 20 2B 0D 3B 2B 20 20 57 4F 52 44 20 20 4D | +.;+ WORD M| 000039F0: 41 58 49 4D 55 4D 20 4E 55 4D 42 45 52 20 4F 46 |AXIMUM NUMBER OF| 00003A00: 20 43 59 4C 53 20 2B 0D 3B 2B 20 20 42 59 54 45 | CYLS +.;+ BYTE| 00003A10: 20 20 4E 55 4D 42 45 52 20 4F 46 20 48 45 41 44 | NUMBER OF HEAD| 00003A20: 53 20 20 20 20 20 20 20 20 2B 0D 3B 2B 20 20 57 |S +.;+ W| 00003A30: 4F 52 44 20 20 43 59 4C 20 46 4F 52 20 53 54 41 |ORD CYL FOR STA| 00003A40: 52 54 20 52 45 44 55 43 45 44 20 20 2B 0D 3B 2B |RT REDUCED +.;+| 00003A50: 20 20 20 20 20 20 20 20 57 52 49 54 45 20 43 55 | WRITE CU| 00003A60: 52 52 45 4E 54 20 20 20 20 20 20 20 20 20 20 2B |RRENT +| 00003A70: 0D 3B 2B 20 20 57 4F 52 44 20 20 43 59 4C 20 46 |.;+ WORD CYL F| 00003A80: 4F 20 52 53 54 41 52 54 20 50 52 43 4F 4D 50 20 |O RSTART PRCOMP | 00003A90: 20 20 2B 0D 3B 2B 20 20 42 59 54 45 20 20 45 43 | +.;+ BYTE EC| 00003AA0: 43 20 4C 45 4E 47 54 48 20 20 20 20 20 20 20 20 |C LENGTH | 00003AB0: 20 20 20 20 20 2B 0D 3B 2B 20 20 42 59 54 45 20 | +.;+ BYTE | 00003AC0: 20 53 54 45 50 20 52 41 54 45 20 20 20 20 20 20 | STEP RATE | 00003AD0: 20 20 20 20 20 20 20 20 2B 0D 3B 2B 33 20 42 59 | +.;+3 BY| 00003AE0: 54 45 53 20 54 4F 54 41 4C 20 4E 55 4D 42 45 52 |TES TOTAL NUMBER| 00003AF0: 20 53 45 43 54 4F 52 53 20 20 20 2B 0D 3B 2B 20 | SECTORS +.;+ | 00003B00: 20 42 59 54 45 20 20 31 53 54 20 42 41 44 20 53 | BYTE 1ST BAD S| 00003B10: 45 43 54 4F 52 20 53 45 43 54 4F 52 20 20 2B 0D |ECTOR SECTOR +.| 00003B20: 3B 2B 20 20 42 59 54 45 20 20 31 53 54 20 53 41 |;+ BYTE 1ST SA| 00003B30: 54 20 53 45 43 54 4F 52 20 20 20 20 20 20 20 20 |T SECTOR | 00003B40: 20 2B 0D 3B 2B 20 20 42 59 54 45 20 20 31 53 54 | +.;+ BYTE 1ST| 00003B50: 20 44 49 52 45 43 54 4F 52 59 20 53 45 43 54 4F | DIRECTORY SECTO| 00003B60: 52 20 20 20 2B 0D 3B 2B 20 20 42 59 54 45 20 20 |R +.;+ BYTE | 00003B70: 31 53 54 20 44 41 54 41 20 53 45 43 54 4F 52 20 |1ST DATA SECTOR | 00003B80: 20 20 20 20 20 20 20 2B 0D 3B 2B 20 20 57 4F 52 | +.;+ WOR| 00003B90: 44 20 20 4C 41 53 54 20 53 41 54 20 42 59 54 45 |D LAST SAT BYTE| 00003BA0: 20 20 20 20 20 20 20 20 20 20 2B 0D 3B 2B 20 20 | +.;+ | 00003BB0: 42 59 54 45 20 20 4C 41 53 54 20 53 41 54 20 42 |BYTE LAST SAT B| 00003BC0: 49 54 20 20 20 20 20 20 20 20 20 20 20 2B 0D 3B |IT +.;| 00003BD0: 2B 20 20 57 4F 52 44 20 20 53 45 43 54 4F 52 53 |+ WORD SECTORS| 00003BE0: 20 50 45 52 20 43 59 4C 49 4E 44 45 52 20 20 20 | PER CYLINDER | 00003BF0: 2B 0D 3B 2B 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |+.;+------------| 00003C00: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |----------------| 00003C10: 2D 2D 2D 2B 0D 3B 2B 20 54 48 45 20 54 41 42 4C |---+.;+ THE TABL| 00003C20: 45 20 57 49 4C 4C 20 43 4F 4E 54 41 49 4E 20 54 |E WILL CONTAIN T| 00003C30: 57 4F 20 20 20 20 2B 0D 3B 2B 20 45 4E 54 52 49 |WO +.;+ ENTRI| 00003C40: 45 53 20 57 48 49 43 48 20 57 49 4C 4C 20 42 45 |ES WHICH WILL BE| 00003C50: 20 46 49 4C 4C 45 44 20 20 2B 0D 3B 2B 20 46 52 | FILLED +.;+ FR| 00003C60: 4F 4D 20 53 45 43 54 4F 52 20 30 20 4F 46 20 54 |OM SECTOR 0 OF T| 00003C70: 48 45 20 44 52 49 56 45 2E 20 20 20 2B 0D 3B 2B |HE DRIVE. +.;+| 00003C80: 20 43 4F 4E 54 52 4F 4C 4C 45 52 20 43 41 52 44 | CONTROLLER CARD| 00003C90: 2E 20 20 54 48 49 53 20 54 41 42 4C 45 20 20 2B |. THIS TABLE +| 00003CA0: 0D 3B 2B 20 57 49 4C 4C 20 48 41 56 45 20 44 45 |.;+ WILL HAVE DE| 00003CB0: 46 41 55 4C 54 20 50 41 52 4D 53 20 49 4E 20 20 |FAULT PARMS IN | 00003CC0: 20 20 2B 0D 3B 2B 20 43 41 53 45 20 44 52 49 56 | +.;+ CASE DRIV| 00003CD0: 45 20 49 53 4E 27 54 20 50 52 4F 50 45 52 4C 59 |E ISN'T PROPERLY| 00003CE0: 20 20 20 20 20 2B 0D 3B 2B 20 46 4F 52 4D 41 54 | +.;+ FORMAT| 00003CF0: 45 44 2E 20 20 20 20 20 20 20 20 20 20 20 20 20 |ED. | 00003D00: 20 20 20 20 20 20 20 20 2B 0D 3B 2B 2B 2B 2B 2B | +.;+++++| 00003D10: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B |++++++++++++++++| 00003D20: 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 0D 3B 0D 3B |++++++++++++.;.;| 00003D30: 2A 2A 2A 2A 20 4E 4F 54 45 3A 20 20 4F 42 53 45 |**** NOTE: OBSE| 00003D40: 52 56 45 20 54 48 45 20 44 42 59 20 20 2A 2A 2A |RVE THE DBY ***| 00003D50: 2A 0D 3B 2B 20 4F 50 53 2E 20 20 54 48 45 59 20 |*.;+ OPS. THEY | 00003D60: 44 45 46 49 4E 45 20 54 57 4F 20 42 59 54 45 53 |DEFINE TWO BYTES| 00003D70: 20 20 20 2B 0D 3B 2B 20 57 49 54 48 20 54 48 45 | +.;+ WITH THE| 00003D80: 20 4D 53 42 20 46 49 52 53 54 20 41 4E 44 20 4C | MSB FIRST AND L| 00003D90: 53 42 20 20 20 20 2B 0D 3B 2B 20 4C 41 53 54 2E |SB +.;+ LAST.| 00003DA0: 20 20 4F 50 50 4F 53 49 54 45 20 4F 46 20 54 48 | OPPOSITE OF TH| 00003DB0: 45 20 57 4F 52 20 4F 50 2E 2B 0D 3B 2B 20 43 41 |E WOR OP.+.;+ CA| 00003DC0: 52 45 20 53 48 4F 55 4C 44 20 42 45 20 55 53 45 |RE SHOULD BE USE| 00003DD0: 44 20 49 46 20 43 4F 4E 56 45 52 54 2B 0D 3B 2B |D IF CONVERT+.;+| 00003DE0: 20 49 4E 54 20 54 4F 20 41 4E 4F 54 48 45 52 20 | INT TO ANOTHER | 00003DF0: 41 53 53 45 4D 42 4C 45 52 20 46 4F 52 2D 20 2B |ASSEMBLER FOR- +| 00003E00: 0D 3B 2B 20 4D 41 54 2E 20 20 20 20 20 20 20 20 |.;+ MAT. | 00003E10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003E20: 20 20 2B 0D 3B 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 20 | +.;********** | 00003E30: 20 2A 2A 2A 2A 2A 2A 2A 2A 2A 20 2A 2A 2A 2A 2A | ********* *****| 00003E40: 2A 2A 2A 2A 2A 2A 0D 3B 0D 3B 2B 20 44 52 49 56 |******.;.;+ DRIV| 00003E50: 45 20 30 20 50 41 52 4D 20 54 41 42 4C 45 20 45 |E 0 PARM TABLE E| 00003E60: 4E 54 52 59 20 20 20 20 20 20 2B 0D 44 45 46 50 |NTRY +.DEFP| 00003E70: 54 20 3D 20 2A 20 3B 44 45 46 41 55 4C 54 20 54 |T = * ;DEFAULT T| 00003E80: 41 42 4C 45 0D 44 46 43 59 4C 53 20 2E 44 42 59 |ABLE.DFCYLS .DBY| 00003E90: 20 33 30 36 20 3B 33 30 36 20 43 59 4C 49 4E 44 | 306 ;306 CYLIND| 00003EA0: 45 52 53 0D 44 46 48 45 41 44 20 2E 42 59 54 20 |ERS.DFHEAD .BYT | 00003EB0: 32 20 3B 20 34 20 48 45 41 44 53 0D 44 46 52 45 |2 ; 4 HEADS.DFRE| 00003EC0: 44 55 20 2E 44 42 59 20 32 30 30 20 3B 52 45 44 |DU .DBY 200 ;RED| 00003ED0: 55 43 45 44 20 57 52 49 54 45 20 43 55 52 52 45 |UCED WRITE CURRE| 00003EE0: 4E 54 20 42 45 47 49 4E 0D 44 46 50 52 45 43 20 |NT BEGIN.DFPREC | 00003EF0: 2E 44 42 59 20 32 30 30 20 3B 53 54 41 52 54 20 |.DBY 200 ;START | 00003F00: 50 52 45 43 4F 4D 50 20 57 52 49 54 45 0D 44 46 |PRECOMP WRITE.DF| 00003F10: 45 43 43 4C 20 2E 42 59 54 20 31 31 20 3B 45 43 |ECCL .BYT 11 ;EC| 00003F20: 43 20 4C 45 4E 47 54 48 0D 44 46 53 54 45 50 20 |C LENGTH.DFSTEP | 00003F30: 2E 42 59 54 20 35 20 3B 53 54 45 50 20 52 41 54 |.BYT 5 ;STEP RAT| 00003F40: 45 0D 44 46 54 4F 54 53 20 2E 42 59 54 20 30 2C |E.DFTOTS .BYT 0,| 00003F50: 30 2C 31 30 30 20 3B 4E 55 4D 42 45 52 20 53 45 |0,100 ;NUMBER SE| 00003F60: 43 54 4F 52 53 0D 44 46 42 41 44 53 20 2E 42 59 |CTORS.DFBADS .BY| 00003F70: 54 20 31 20 3B 46 49 52 53 54 20 42 41 44 20 53 |T 1 ;FIRST BAD S| 00003F80: 45 43 54 4F 52 20 53 45 43 54 4F 52 0D 44 46 46 |ECTOR SECTOR.DFF| 00003F90: 53 41 54 20 2E 42 59 54 20 35 20 3B 46 49 52 53 |SAT .BYT 5 ;FIRS| 00003FA0: 54 20 53 41 54 20 53 45 43 54 4F 52 0D 44 46 4C |T SAT SECTOR.DFL| 00003FB0: 53 41 54 20 2E 42 59 54 20 36 20 3B 4C 41 53 54 |SAT .BYT 6 ;LAST| 00003FC0: 20 53 41 54 20 53 45 43 54 4F 52 0D 44 46 46 44 | SAT SECTOR.DFFD| 00003FD0: 49 52 20 2E 42 59 54 20 37 20 3B 46 49 52 53 54 |IR .BYT 7 ;FIRST| 00003FE0: 20 44 49 52 45 43 54 4F 52 59 20 53 45 43 54 4F | DIRECTORY SECTO| 00003FF0: 52 0D 44 46 46 41 56 41 20 2E 42 59 54 20 34 38 |R.DFFAVA .BYT 48| 00004000: 20 3B 46 49 52 53 54 20 41 56 41 49 4C 41 42 4C | ;FIRST AVAILABL| 00004010: 45 20 53 45 43 54 4F 52 0D 44 46 53 42 59 54 20 |E SECTOR.DFSBYT | 00004020: 2E 44 42 59 20 35 30 20 3B 4C 41 53 54 20 53 41 |.DBY 50 ;LAST SA| 00004030: 54 20 42 59 54 45 0D 44 46 53 42 49 54 20 2E 42 |T BYTE.DFSBIT .B| 00004040: 59 54 20 31 20 3B 4C 41 53 54 20 53 41 54 20 42 |YT 1 ;LAST SAT B| 00004050: 49 54 0D 44 46 53 43 59 4C 20 2E 57 4F 52 20 33 |IT.DFSCYL .WOR 3| 00004060: 34 20 3B 53 45 43 54 4F 52 53 20 50 45 52 20 43 |4 ;SECTORS PER C| 00004070: 59 4C 49 4E 44 45 52 0D 3B 54 45 4E 20 42 59 54 |YLINDER.;TEN BYT| 00004080: 45 20 56 4F 4C 55 4D 45 20 4C 41 42 45 4C 20 41 |E VOLUME LABEL A| 00004090: 52 45 41 0D 3B 0D 2E 45 4E 44 20 48 41 52 44 49 |REA.;..END HARDI| 000040A0: 53 4B 5A 2E 42 49 4F 53 00 00 00 00 00 00 00 00 |SKZ.BIOS........| 000040B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000040C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000040D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000040E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000040F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
;BPUT"HARDISKBIOS.SRC.;RPUT"HARDISKBIOS.
SRC.;.;+++++++++++++++++++++++++++++++++
.;+ THE DRIVE COMMAND BLOCK (DCB) +.;+ I
S USED TO PASS THE COMMAND, +.;+ CYLIND
ER, SECTOR, HEAD, BLOCK +.;+ COUNT, AND
STEP RATE TO THE +.;+ CONTROLLER. THE
LAYOUT OF THE+.;+ DCB FOLLOWS:
+.;+
+.;+ BYTE DESCRIPTION +
.;+ 0 OPERATION CODE +.;+
1 BITS 4,6,7 NOT USED, 0 +.;+ B
IT 5 DRIVE NUMBER 0 OR 1+.;+ BITS 0
-3 HEAD NUMBER +.;+ 2 BITS 6,7 CL
INDER # MSB +.;+ BIT 5 NOT USED 0
+.;+ BITS 0-4 SECTOR NUMBE
R +.;+ 3 CYLINDER NUMBER LSB +
.;+ 4 BLOCK COUNT OR INTERLEAVE+.;+
5 BITS 6,7 USED FOR ERROR +.;+ R
ECOVERY OPTIONS, BEST TO+.;+ TO KEE
P THEM BOTH 0. +.;+ BITS 3,4,5
NOT USED 0 +.;+ BITS 0-2 STEP RA
TE. SEE +.;+ CONTROLLER DOC FOR VA
LUES+.;+ +
.;+ COMMAND CODES ARE AS FOLLOWS: +.;+
+.;+ 00 - T
EST DRIVE READY +.;+ 01 - RECALI
BRATE +.;+ 03 - READ STATUS
OF LAST OP +.;+ 04 - FORMAT DRIVE
+.;+ 05 - VERIFY SECTORS
+.;+ 06 - FORMAT A TRACK +
.;+ 07 - FORMAT A BAD TRACK (FLAG)+.;+ 0
8 - READ SECTORS +.;+ 0A - W
RITE SECTORS +.;+ 0B - SEEK
+.;+ 0C - INITIALIZE
DRIVE PARMS +.;+ 0D - READ ECC BURST E
RROR LEN +.;+ 0E - READ SECTOR BUFFER
+.;+ 0F - WRITE SECTOR BUFFER +
.;+ E0 - RUN SECTOR BUFFER DIAGS +.;+ E
3 - RUN DRIVE DIAGNOSTICS +.;+ E4 - R
UN CONTROLLER DIAGS +.;+ E5 - READ L
ONG +.;+ E6 - WRITE LONG
+.;+++++++++++++++++++++++
++++++++++.;.;* = $7000.;+++++++++++++++
++++++++++++++++++.;+ THIS CODE IS TARGE
TED FOR USE +.;+ WITH A HARD DISK DRIVE
AND A +.;+ WESTERN DIGITAL PC CONTOLLER
+.;+ CARD. +.;
+++++++++++++++++++++++++++++++++.;.;+++
++++++++++++++++++++++++++++++.;+
EQUATES +.;+++++++++++++
++++++++++++++++++++.;.;++++++++++++++++
+++++++++++++++++.;+ THE FOLLOWING DEFIN
E THE WD +.;+ CONTROLLER PORTS. THERE
ARE +.;+ FOUR PORTS 0 THRU 3. THE
+.;+ FUNCTION OF EACH IS: +.;+
PORT0 - DATA IN AND OUT +.;+ PORT
1 - READ - STATUS +.;+ W
RITE - RESET CONTROL +.;+ PORT2 - READ -
READ JUMPERS +.;+ PORT2 - READ - READ
JUMPERS +.;+ - WRITE - PREPARE
FOR +.;+ CONTROLER COMMAND.
+.;+ PORT3 - READ - NO FUNCTION +.;+
WRITE - SET DMA FLAGS +.;+
(SET TO 00, ALWAYS) +.;+++++++++++
++++++++++++++++++++++.;.PORT0 = $DE20 ;
USING I/O1 ADDRESS.PORT1 = $DE21 ;RESET
AND STATUS REG.;+ BIT DEFINITONS FOR REA
D PORT1 +.;.;+ BIT DEFINITION
+.;+ 7 UNDEFINED, IGNORE
+.;+ 6 UNDEFINED, IGNORE +.;+
5 IRQ - NOT USED ON C64 +.;+ 4 D
RQ - NOT USED ON C64 +.;+ 3 BUSY B
IT +.;+ 2 C/D - COMMA
ND/DATA BIT +.;+ 0 - DATA
+.;+ 1 - COMMAND
+.;+ 1 I/O - DIRECTION OF DATA
+.;+ 1 - INPUT TO HOST +.;+
0 - OUTPUT FROM HOST+.;+ 0 R
EQ - REQUEST BIT, MUST BE+.;+
1 FOR DATA TRANSFERS+.;.PORT2 = $DE22 ;S
ET COMMAND MODE AND JUMPERS.;.;+ THERE
ARE EIGHT JUMPERS WHICH+.;+ CAN BE READ
FROM THIS PORT. +.;+ DRIVE OPTIONS CA
N BE MADE BY +.;+ DEFINING THESE BITS T
O REPRE-+.;+ SENT A TABLE ENTRY, ETC.
+.;+ +.
;+ WRITING TO THIS PORT SETS THE+.;+ C
ONTORLER IN COMMAND MODE. +.;.PORT3 =
$DE23 ;ENSURE ALLWAYS ZERO.;.ZERO = 0.TW
O = 2.;.;+++++++++++++++++++++++++++++++
++.;+ COMMAND EQUTATES +.;+
++++++++++++++++++++++++++++++++.;.TDRCM
D = $00 ;TEST DRIVE READY.RCACMD = $01 ;
RECALIBRATE COMMAND.STCMD = $03 ;SENSE S
TATUS COMMAND.FORCMD = $04 ;FORMAT DRIVE
COMMAND.VERCMD = $05 ;VERIFY SECTORS CO
MMAND.RDCMD = $08 ;READ COMMAND.FRTCMD =
$06 ;FORMAT TRACK COMMAND.FBTCMD = $07
;FORMAT BAD TRACK COMMAND.WRTCMD = $0A ;
WRITE COMMAND.SKCMD = $0B ;SEEK COMMAND.
PRMCMD = $0C ;SEND PARM COMMAND.ECCCMD =
$0D ;READ ECC BURST LENGTH COMMAND.RSBC
MD = $0E ;READ SECTOR BUFFER COMMAND.WSB
CMD = $0F ;WRITE SECTOR BUFFER COMMAND.B
DGCMD = $E0 ;BUFFER DIAG COMMAND.DDGCMD
= $E3 ;DRIVE DIAG COMMAND.CDGCMD = $E4 ;
CONTROLLER DIAG COMMAND.RDLCMD = $E5 ;RE
AD LONG COMMAND.WRLCMD = $E6 ;WRITE LONG
COMMAND.;.RDCHK = $0B ;STATUS FOR OK RE
AD.WRTCHK = $09 ;STATUS FOR WRITE OK.;.;
+++++++++++++++++++++++++++++++++.;+ VEC
TORS TO ROUTINES +.;++++++++++
+++++++++++++++++++++++.;.* = $F72C.READ
X JMP READ.WRITEX JMP WRITE.RESETX JMP R
ESET.SETPRX JMP SETPRM.RECALX JMP RECAL
;GO RECALIBRATE.SEEKX JMP SEEK ;GO DO SE
EK.TDREDX JMP TDREDY ;TEST DRIVE READY.;
SBDIAX JMP SBDIAG ;SECTOR BUFFER DIAGS.;
DRDIAX JMP DRDIAG ;DRIVE DIAGS.CTDIAX JM
P CTDIAG ;CONTROLLER DIAG.;FORBTX JMP FO
RBTK ;FORMAT BAD TRACK.;FORTRX JMP FORTR
K ;FORMAT TRACK.;FORMAX JMP FORMAT ;FORM
AT DRIVE.RETPRX JMP RETPRM ;RETURN DRIVE
PARMS.;RDLONX JMP RDLONG ;READ LONG.;RE
ADSX JMP READSB ;READ SECTOR BUFFER.;WRL
ONX JMP WRLONG ;WRITE LONG.;WRTSBX JMP W
RITSB ;WRITE SECTOR BUFFER.VERIFX JMP VE
RIFY ;VERIFY SECTOR.;.;+++++++++++++++++
++++++++++++++++.;+ SUBROUTINES
+.;+++++++++++++++++++++++++++
++++++.;.;++++++++++++++++++++++++++++++
+++.;+ READ BLOCKS +.;
+ READ THE NUMBER OF BLOCKS IN +.;+ THE
DCB INTO THE BUFFER. THIS +.;+ ROUTINE
HANDLES THE READ LONG +.;+ AND READ SECT
OR BUFFER ALSO. +.;+
+.;+ INPUT: DCB
+.;+ OUTPUT: DATA READ INTO BUFFE
R +.;+ REGS ALL DESTROYED. +.;
+++++++++++++++++++++++++++++++++.;.READ
SB LDA #RSBCMD ;READ SECTOR BUFFER. .BYT
$2C ;JUST A BIT.RDLONG LDA #RDLCMD ;REA
D LONG DIAGNOSTIC. .BYT $2C ;AND A BIT.R
EAD = * ;READ BLOCKS. LDA #RDCMD ;GET CO
MMAND. JSR SETUP ;GO DO HOUSEKEEPING. BC
C RCMDOK ;GO IF WELL.ERJMP1 SEC. JMP TCO
MP.RCMDOK JSR RDREDY ;READY TO READ. BCS
ERJMP1 ;GO IF BAD. LDY #ZERO. LDX #TWO
;# PAGES PER SECTOR. SEI ;DISABLE FOR A
BIT.RDLOOP LDA PORT0 ;READ A BYTE. STA (
BUFPTR),Y ;PUT IN BUFFER. INY. BNE RDLOO
P. INC BUFPTR+1 ;BUMP PAGE POINTER. DEX.
BNE RDLOOP ;CONTINUE READING. LDA CMDBY
T ;CHECK COMMAND. CMP #RDLCMD ;READ LONG
?. BNE READON. JSR RDREDY ;CHECK IF READ
Y TO READ. BCS ERJMP1.RDLLUP LDA PORT0 ;
GET ECC FOR LONG. STA (BUFPTR),Y. INC BU
FPTR ;BUMP PTR. BNE RDLX1. INC BUFPTR+1.
RDLX1 INX. CPX #4. BNE RDLLUP.READON DEC
BLKCTR ;SEE IF MORE BLOCKS. BNE RCMDOK.
CLI ;ENABLE.;.TCOMP = * ;CHECK COMPLETI
ON. LDA PORT1 ;OF OPERATION. AND #$0F ;C
LEAR UNUSED. CMP #$0F ;WHAT WE WAITING F
OR?. BEQ TCOMP1 ;GO FORWARD. DEC TIMER0
;STEP DOWN ONE. BNE TCOMP ;GO IF NOT ZER
O. DEC TIMER1 ;KNOCK OFF ANOTHER BIT. BN
E TCOMP. DEC TIMER2 ;THIS IS THE BIG ONE
. BNE TCOMP ;DON'T QUIT YET?. LDA #TIMOT
U ;SET TIMEOUT STATUS. SEC. RTS ;GO BACK
WITH ERROR.;.TCOMP1 = * ;READ ERROR STA
TUS. LDA PORT0 ;CHECK FOR ERROR. AND #$0
2 ;BIT ON. BEQ TCOMP4. LDA CMDBYT ;CHECK
IF THIS IS SENSE. CMP #STCMD ;IF SO FAI
L SENSE. BEQ SFAIL. STA ERRCMD ;SAVE THE
FAILING CMD. LDA #STCMD ;ISSUE SENSE CO
MMAND. STA CMDBYT ;PUT IN DCB. JSR SNDCM
D ;. BCC TCOMP2 ;GO ON IF OK.SFAIL LDA #
SNFAIL ;SET SENSE FAILED. BNE RETERX.RET
ERR LDA ERRCMD ;GET FAILING CMD.RETERX S
EC. RTS.TCOMP2 JSR RDREDY ;SEE IF READY.
BCS SFAIL. LDY #0.TCOMP3 LDA PORT0 ;REA
D SENSE. STA SENSE,Y. INY. CPY #4 ;GOT I
T ALL?. BNE TCOMP3. LDA SENSE ;CHECK SEN
SE. CMP #$98 ;CORRECTABLE ECC?. BNE TCOM
PB. LDA #$0D ;READ THE ECC INFO. JSR SND
CMD. BCS SFAIL. JSR RDREDY. BCS SFAIL. L
DA PORT0 ;GET ECC INFO. STA ECCINF.TCOMP
B JMP TCOMP ;TEST COMPLETION.TCOMP4 LDA
CMDBYT ;CHECK IF SENSE. CMP #STCMD. BEQ
RETERR. CLC. RTS.;.;++++++++++++++++++++
+++++++++++++.;+ THE WRITE ROUTINE SENDS
THE +.;+ NUMBER OF BLOCKS SPECIFIED I
N +.;+ THE DCB TO THE DISK CONTROLER.+.;
+ WRITE SECTOR BUFFER AND WRITE +.;+ LON
G ARE BOTH HANDLED HERE. +.;+
+.;+ INPUT: DCB
+.;+ OUTPUT: DATA WRITT
EN +.;+++++++++++++++++++++++++
++++++++.;.WRLONG LDA #WRLCMD ;WRITE LON
G DIAGNOSTIC. .BYT $2C ;BIT IT.WRITSB L
DA #WSBCMD ;WRITE SECTOR BUFFER. .BYT $2
C ;BIT AGAIN.WRITE = * ;WRITE BLOCKS. LD
A #WRTCMD ;GET COMMAND. JSR SETUP ;GO DO
HOUSEKEEPING. BCC WCMDOK ;GO IF WELL.ER
JMP2 JMP ERJMP1.WCMDOK JSR WRREDY ;READY
TO WRITE. BCS ERJMP2 ;GO IF BAD. LDY #Z
ERO. LDX #TWO ;# PAGES PER SECTOR. SEI ;
DISABLE.WRLOOP LDA (BUFPTR),Y ;GET A BYT
E. STA PORT0 ;WRITE TO CONTROLLER. INY.
BNE WRLOOP. INC BUFPTR+1 ;BUMP PAGE POIN
TER. DEX. BNE WRLOOP ;CONTINUE READING.
LDA CMDBYT ;CHECK FOR WRITE LONG. CMP #W
RLCMD. BNE WRON ;GO ON IF NOT. JSR WRRED
Y ;READY TO WRITE?. BCS ERJMP2.WRLLUP LD
A (BUFPTR),Y. STA PORT0. INC BUFPTR. BNE
WRLX1. INC BUFPTR+1.WRLX1 INX. CPX #4.
BNE WRLLUP.WRON DEC BLKCTR ;ANY MORE BLO
CKS?. BNE WCMDOK ;YES THEN GETEM. CLI ;E
NABLE.JMP TCOMP ;GO CHECK FOR COMPLETION
.;.;+++++++++++++++++++++++++++++++++.;+
MISCELLANEOUS COMMANDS +.;++++++
+++++++++++++++++++++++++++.;.FORBTK LDA
#FBTCMD ;FORMAT BAD TRACK. .BYT $2C ;BI
T.FORTRK LDA #FRTCMD ;FORMAT TRACK. .BYT
$2C ;BIT.FORMAT LDA #FORCMD ;FORMAT DRI
VE. CPX #'6' ;CHECK CODE IN X. BNE NOFRM
T ;BYPASS IF NOT. CPY #'4' ;AND CHECK Y.
BNE NOFRMT ;BYPASS NOT 4. PHA. LDA SECA
DR ;CLEAR SECTOR NUMBER. AND #$C0 ;SAVE
CYL MSB. STA SECADR. PLA. .BYT $2C ;BIT.
VERIFY LDA #VERCMD ;VERIFY. .BYT $2C ;BI
T.RECAL = * ;RECALIBRATE THE DRIVE. LDA
#RCACMD ;GET COMMAND BYTE. .BYT $2C ;BIT
.SEEK LDA #SKCMD. .BYT $2C ;BIT.TDREDY L
DA #TDRCMD ;TEST DRIVE READY. .BYT $2C ;
BIT.SBDIAG LDA #BDGCMD ;SECTOR BUFFER DI
AG. .BYT $2C ;BIT.DRDIAG LDA #DDGCMD ;DR
IVE DIAG. .BYT $2C ;BIT.CTDIAG LDA #CDGC
MD ;CONTOLLER DIAG.CMDOUT STA CMDBYT ;PU
T IN COMMAND. CMP #FORCMD ;IS IT FORMAT?
. BNE CMDOU1. JSR PRIMEF ;PRIME THE TIME
RF. JMP CMDOU3.CMDOU1 CMP #DDGCMD ;DRIVE
DIAG?. BNE CMDOU2. JSR PRIMEC ;PRIME TI
MER FOR DIAG. JMP CMDOU3.CMDOU2 JSR PRIM
EN ;SET NORMAL TIMER.CMDOU3 JSR SNDCMD ;
SEND THE COMMAND. BCC CMDOU4 ;GO IF NO E
RROR.NOFRMT SEC ;ENSURE CARRY SET. RTS ;
RETURN IF ERROR.CMDOU4 JMP TCOMP ;GO TES
T FOR COMPLETION.;++++++++++++++++++++++
+++++++++++.;+ SETUP THE DCB, TIMERS, ET
C. +.;+ FOR THE READ AND WRITE
+.;+ ROUTINES. +.;++
+++++++++++++++++++++++++++++++.;.SETUP
= * ;SET UP PARMS FOR READ AND WRITE. ST
A CMDBYT ;PUT COMMAND IN DCB. LDA BUFADR
;GET BUFFER ADDRESS. STA BUFPTR ;SET UP
LOW MEMORY. LDA BUFADR+1. STA BUFPTR+1.
LDA BLKCNT ;GET NUMBER OF BLOCKS. STA B
LKCTR ;PUT IN WORK AREA. JSR DEFSET ;SET
STEP RATE IN DCB.SNDCMD = * ;SEND COMMA
ND. LDY #00 ;PRIME POINTER TO BEGIN. STA
PORT2 ;SET COMMAND MODE. STY PORT3 ;ENS
URE DMA STUFF OFF. JSR CMDRDY ;GO CHECK
FOR READY. BCC SNDCOK ;GO IF WELL. LDA #
SNDERR ;SET ERROR CODE. SEC. RTS.SNDCOK
= * ;READY TO SEND DCB NOW. LDA DCB,Y. S
TA PORT0. INY. CPY #6 ;ALL OF IT?. BNE S
NDCOK.CHKSOK CLC ;CLEAR CODE FOR NOW. RT
S.;.;+ CHECK FOR READY TO READ OR WRITE.
CMDRDY LDA #$0D ;CODE FOR CMD READY. .BY
T $2C.RDREDY LDA #RDCHK ;GET CHECK BYTE.
.BYT $2C ;ADD A BIT.WRREDY LDA #WRTCHK
;GET CHECK BYTE. STA CHKBYT ;SAVE BYTE T
O COMPARE. LDY #0 ;CLEAR COUNTERS. STY T
IMER0. STY TIMER1.WDLOOP LDA PORT1 ;GET
STATUS BYTE. AND #$0F ;CLEAR GARBAGE. CM
P CHKBYT ;IS WHAT WE WANT?. BEQ CHKSOK ;
GO ON IF SO. DEC TIMER0 ;WAIT SOME. BNE
WDLOOP. DEC TIMER1 ;AND SOME MORE DELAY.
BNE WDLOOP. LDA #WATERR ;LOAD ERROR COD
E. SEC ;SET ERROR. RTS ;RETURN WITH ERRO
R.;.;+++++++++++++++++++++++++++++++++.;
+ GET THE DRIVE PARMS BY READ- +.;+ ING
SECTOR 0 AND EXTRACTING +.;+ THE PARM
S FROM A FORMATED +.;+ DRIVE INTO
THE PARM TABLE +.;+ OF DRIVE CHARACTER
ISTICS. +.;+++++++++++++++++++++++++
++++++++.;.GETPRM = * ;SET UP PTR TO PAR
M TAB. LDA PTFORM. BNE DEFSET ;EXIT IF F
ORMATTING. LDA #1. STA BLKCNT. LDA HDNUM
. AND #$20 ;CLEAR ALL BUT DRIVE. STA HDN
UM. LDA #0 ;SEC 0, CYL 0 ALSO. STA CYLNU
M. STA SECADR. JSR DEFSET ;DEFAULT STEP
RATE. JSR TDREDY ;CHECK IF EXISTS. BCS D
EXITT ;GO IF NOT HERE. LDA #RDCMD ;SET U
P FOR READ. JSR SETUP ;GET READY TO READ
. BCS DEFSET ;RETURN IF BAD. JSR RDREDY.
BCS DEFSET. LDY #0 ;PRIME COUNTER. LDX
HDNUM ;GET DRIVE TABLE OFFSET. LDA PORT0
;CHECK IF FORMATED. CMP #'C' ;IS IT C?.
BNE NOINIT. INY. LDA PORT0. CMP #'6' ;I
S IT SIX. BNE NOINIT. INY. LDA PORT0. CM
P #'4' ;IS IT FOUR FOR C64?. BNE NOINIT.
MVEPRM LDA PORT0. STA PT1,X. INX. INY. C
PY #34 ;GOT EM ALL?. BNE MVEPRM.NOINIT L
DX #2 ;FLUSH THE REST.NOINIL LDA PORT0.
INY. BNE NOINIL. DEX. BNE NOINIL. JSR TC
OMP ;CLEAR STATUS.DEFSET = *. LDA HDNUM.
GETPRA = *. AND #$20 ;SEE IF 0 OR 1. TAX
.DZEROX = *. LDA PTSTEP,X ;GET STEP RATE
. STA SRATE ;IN DCB. CLC.DEXITT = * ;RET
URN NO DRIVE. RTS ;RETURN OFFSET IN X.;.
;+++++++++++++++++++++++++++++++++.;+ PE
RFORM THE RESET FUNCTION. +.;+ FALL TH
RU AND SET DRIVE PARMS.+.;++++++++++++++
+++++++++++++++++++.;.RESET = * ;RESET T
HE CONTROLLER. STA PORT1 ;ISSUE RESET. L
DY #0. LDX #0.RESET1 DEY. BNE RESET1.RES
ET2 DEX. BNE RESET2. LDA PORT1 ;CHECK IF
RESET OK. AND #$3F ;MUST ALL BE OFF FOR
OK. BEQ RESET3. LDA #$FE ;SET RESET ERR
OR. SEC. RTS.RESET3 = * ;FALL THRU TO SE
T PARMS.;+++++++++++++++++++++++++++++++
++.;+ SET DRIVE PARMS FROM TABLE +.;+
++++++++++++++++++++++++++++++++.;.SETPR
M = * ;SET DRIVE PARMS. LDA #ZERO ;SET D
RIVE 0 PARMS. STA HDNUM ;DRIVE NUMBER IN
DCB. JSR SETPR1 ;GO DOIT. LDA #$20 ;DRI
VE 1 PARM.SETPR1 STA HDNUM ;PUT IN DCB.
JSR GETPRM ;GET PT POINTER. LDA #PRMCMD
;GET PARM COMMAND (0C). STA CMDBYT ;PUT
IN DCB. JSR SNDCMD ;GO SEND THE COMMAND.
JSR WRREDY ;GO CHECK FOR READY. BCC SET
PR2 ;IF NO ERROR GO.NODRIV LDA #$FF. RTS
.SETPR2 LDY #8. JSR DEFSET ;SET POINTER
TO TABLE.SETPR3 LDA PT1,X ;SEND OUT THE
PARMS. STA PORT0. INX. DEY. BNE SETPR3.
JMP TCOMP ;RETURN THRU CHECKER.;.;++++++
+++++++++++++++++++++++++++.;+ RETURN TH
E PARMS TO THE CALLER+.;+
+.;+ INPUT: A - DRIVE #
(0 OR 1) +.;+
+.;+ OUTPUT: A - NUMBER OF HEADS
+.;+ X - MSB OF #CYLINDERS +.;+
Y - LSB OF #CYLINDERS +.;++++++
+++++++++++++++++++++++++++.;.RETPRM ASL
A ;SHIFT DRIVE NUMBER. ASL A. ASL A. AS
L A. ASL A ;TO BIT 5. JSR GETPRA ;GET PA
RMS. LDA PTHEAD,X ;GET NUMBER OF HEADS.
PHA ;SAVE IT. LDA PTCYLS+1,X ;GET LSB OF
CYLINDERS. TAY. LDA PTCYLS,X ;GET MSB O
F CYLINDERS. TAX. PLA ;RESTORE NUMBER HE
ADS. RTS ;RETURN TO CALLER.;.;.;++++++++
+++++++++++++++++++++++++.;+ PRIME THE C
OUNTDOWN TIMER +.;++++++++++++++++++
+++++++++++++++.;.PRIMEN LDA 1 ;NORMAL T
IMEOUT. BNE PRIMET.PRIMEF LDA 255 ;FORMA
T WAIT. BNE PRIMET.PRIMEC LDA 10 ;DIAG T
IME.PRIMET STA TIMER2 ;TUCK AWAY. LDA #0
;CLEAR THE OTHERS. STA TIMER0. STA TIME
R1. RTS.;.HDINIT LDY #58 ;INIT PTABS AND
DCB. LDA #0 ;ZERO THE AREAS.HDILUP STA
PTFORM,Y. DEY. BPL HDILUP ;ZERO ALL. LDY
#21 ;LENGTH OF DEFAULT PTAB.HDPLUP LDA
DEFPT,Y ;GET A BYTE. STA PT1,Y. STA PT2,
Y. DEY. BPL HDPLUP ;MOVE ALL. RTS ;END I
NIT.;.;+-------------------------------+
.;+ THE DRIVE PARAMETER TABLE IS +.;+ F
OLLOWS: +.;+
+.;+ LENGTH D
ESCRIPTION +.;+ WORD MAXIMUM N
UMBER OF CYLS +.;+ BYTE NUMBER OF HEAD
S +.;+ WORD CYL FOR START REDUC
ED +.;+ WRITE CURRENT +
.;+ WORD CYL FO RSTART PRCOMP +.;+
BYTE ECC LENGTH +.;+ BYTE
STEP RATE +.;+3 BYTES TOTA
L NUMBER SECTORS +.;+ BYTE 1ST BAD S
ECTOR SECTOR +.;+ BYTE 1ST SAT SECTOR
+.;+ BYTE 1ST DIRECTORY SECTO
R +.;+ BYTE 1ST DATA SECTOR +
.;+ WORD LAST SAT BYTE +.;+
BYTE LAST SAT BIT +.;+ WORD
SECTORS PER CYLINDER +.;+------------
-------------------+.;+ THE TABLE WILL C
ONTAIN TWO +.;+ ENTRIES WHICH WILL BE
FILLED +.;+ FROM SECTOR 0 OF THE DRIVE
. +.;+ CONTROLLER CARD. THIS TABLE +
.;+ WILL HAVE DEFAULT PARMS IN +.;+ C
ASE DRIVE ISN'T PROPERLY +.;+ FORMAT
ED. +.;+++++++++++++
++++++++++++++++++++.;.;**** NOTE: OBSE
RVE THE DBY ****.;+ OPS. THEY DEFINE T
WO BYTES +.;+ WITH THE MSB FIRST AND L
SB +.;+ LAST. OPPOSITE OF THE WOR OP
.+.;+ CARE SHOULD BE USED IF CONVERT+.;+
INT TO ANOTHER ASSEMBLER FOR- +.;+ MAT.
+.;**********
********* ***********.;.;+ DRIVE 0 PARM
TABLE ENTRY +.DEFPT = * ;DEFAULT T
ABLE.DFCYLS .DBY 306 ;306 CYLINDERS.DFHE
AD .BYT 2 ; 4 HEADS.DFREDU .DBY 200 ;RED
UCED WRITE CURRENT BEGIN.DFPREC .DBY 200
;START PRECOMP WRITE.DFECCL .BYT 11 ;EC
C LENGTH.DFSTEP .BYT 5 ;STEP RATE.DFTOTS
.BYT 0,0,100 ;NUMBER SECTORS.DFBADS .BY
T 1 ;FIRST BAD SECTOR SECTOR.DFFSAT .BYT
5 ;FIRST SAT SECTOR.DFLSAT .BYT 6 ;LAST
SAT SECTOR.DFFDIR .BYT 7 ;FIRST DIRECTO
RY SECTOR.DFFAVA .BYT 48 ;FIRST AVAILABL
E SECTOR.DFSBYT .DBY 50 ;LAST SAT BYTE.D
FSBIT .BYT 1 ;LAST SAT BIT.DFSCYL .WOR 3
4 ;SECTORS PER CYLINDER.;TEN BYTE VOLUME
LABEL AREA.;..END HARDISKZ.BIOS........
........................................
........................................
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL