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

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 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL