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

FORMAT.SRC

FILE INFORMATION

FILENAME(S): FORMAT.SRC

FILE TYPE(S): SEQ

FILE SIZE: 10.4K

FIRST SEEN: 2025-11-30 16:59:23

APPEARS ON: 1 disk(s)

FILE HASH

4de9f235a8b4d32313078476a76ff961dba50ab4d1a021dce0c90f55268f06f7

FOUND ON DISKS (1 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
64HDPROJ FORMAT.SRC SEQ High Voltage Complete C64 Collection 15 2 DOWNLOAD FILE

FILE CONTENT & ANALYSIS

00000000: 3B 42 50 55 54 22 46 4F  52 4D 41 54 2E 53 52 43  |;BPUT"FORMAT.SRC|
00000010: 22 0D 3B 52 50 55 54 22  46 4F 52 4D 41 54 2E 53  |".;RPUT"FORMAT.S|
00000020: 52 43 22 0D 3B 2B 2B 2B  2B 2B 2B 2B 2B 2B 2B 2B  |RC".;+++++++++++|
00000030: 2B 2B 2B 2B 2B 2B 2B 2B  2B 2B 2B 2B 2B 2B 2B 2B  |++++++++++++++++|
00000040: 2B 2B 2B 2B 2B 2B 0D 3B  2B 20 20 49 4E 49 54 49  |++++++.;+  INITI|
00000050: 41 4C 49 5A 45 20 54 48  45 20 48 41 52 44 20 44  |ALIZE THE HARD D|
00000060: 49 53 4B 20 20 20 20 20  2B 0D 3B 2B 20 20 20 20  |ISK     +.;+    |
00000070: 20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000080: 20 20 20 20 20 20 20 20  20 20 20 2B 0D 3B 2B 20  |           +.;+ |
00000090: 49 4E 54 45 52 46 41 43  45 53 20 57 49 54 48 20  |INTERFACES WITH |
000000A0: 54 48 45 20 42 49 4F 53  20 46 4F 52 20 20 2B 0D  |THE BIOS FOR  +.|
000000B0: 3B 2B 20 48 41 52 44 20  44 52 49 56 45 2E 2E 2E  |;+ HARD DRIVE...|
000000C0: 2E 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
000000D0: 20 2B 0D 3B 2B 2B 2B 2B  2B 2B 2B 2B 2B 2B 2B 2B  | +.;++++++++++++|
000000E0: 2B 2B 2B 2B 2B 2B 2B 2B  2B 2B 2B 2B 2B 2B 2B 2B  |++++++++++++++++|
000000F0: 2B 2B 2B 2B 2B 0D 3B 0D  52 45 41 44 20 3D 20 24  |+++++.;.READ = $|
00000100: 37 30 30 30 20 3B 45 51  55 41 54 45 53 20 46 4F  |7000 ;EQUATES FO|
00000110: 52 20 42 49 4F 53 0D 57  52 49 54 45 20 3D 20 52  |R BIOS.WRITE = R|
00000120: 45 41 44 2B 33 0D 52 45  53 45 54 20 3D 20 52 45  |EAD+3.RESET = RE|
00000130: 41 44 2B 36 0D 53 45 54  50 52 4D 20 3D 20 52 45  |AD+6.SETPRM = RE|
00000140: 41 44 2B 39 0D 52 45 43  41 4C 20 3D 20 52 45 41  |AD+9.RECAL = REA|
00000150: 44 2B 31 32 0D 53 45 45  4B 20 3D 20 52 45 41 44  |D+12.SEEK = READ|
00000160: 2B 31 35 0D 54 44 52 45  44 59 20 3D 20 52 45 41  |+15.TDREDY = REA|
00000170: 44 2B 31 38 20 3B 54 45  53 54 20 44 52 49 56 45  |D+18 ;TEST DRIVE|
00000180: 20 52 45 41 44 59 0D 53  42 44 49 41 47 20 3D 20  | READY.SBDIAG = |
00000190: 52 45 41 44 2B 32 31 20  3B 53 45 43 54 4F 52 20  |READ+21 ;SECTOR |
000001A0: 42 55 46 20 44 49 41 47  0D 44 52 44 49 41 47 20  |BUF DIAG.DRDIAG |
000001B0: 3D 20 52 45 41 44 2B 32  34 20 3B 44 52 49 56 45  |= READ+24 ;DRIVE|
000001C0: 20 44 49 41 47 53 0D 43  54 44 49 41 47 20 3D 20  | DIAGS.CTDIAG = |
000001D0: 52 45 41 44 2B 32 37 20  3B 43 4F 4E 54 52 4F 4C  |READ+27 ;CONTROL|
000001E0: 4C 45 52 20 44 49 41 47  53 0D 46 42 41 44 54 4B  |LER DIAGS.FBADTK|
000001F0: 20 3D 20 52 45 41 44 2B  33 30 20 3B 46 4F 52 4D  | = READ+30 ;FORM|
00000200: 41 54 20 42 41 44 20 54  52 4B 0D 46 4D 54 54 52  |AT BAD TRK.FMTTR|
00000210: 4B 20 3D 20 52 45 41 44  2B 33 33 20 3B 46 4F 52  |K = READ+33 ;FOR|
00000220: 4D 41 54 20 54 52 41 43  4B 0D 46 4D 54 44 52 56  |MAT TRACK.FMTDRV|
00000230: 20 3D 20 52 45 41 44 2B  33 36 20 3B 46 4F 52 4D  | = READ+36 ;FORM|
00000240: 41 54 20 44 52 49 56 45  0D 52 45 54 50 52 4D 20  |AT DRIVE.RETPRM |
00000250: 3D 20 52 45 41 44 2B 33  39 20 3B 52 45 54 55 52  |= READ+39 ;RETUR|
00000260: 4E 20 50 41 52 4D 53 0D  20 3B 49 4E 50 55 54 20  |N PARMS. ;INPUT |
00000270: 2D 20 41 20 3D 20 44 52  49 56 45 20 4E 55 4D 42  |- A = DRIVE NUMB|
00000280: 45 52 0D 20 3B 4F 55 54  50 55 54 20 2D 20 41 20  |ER. ;OUTPUT - A |
00000290: 3D 20 23 20 48 45 41 44  53 0D 20 3B 20 20 20 20  |= # HEADS. ;    |
000002A0: 20 20 20 20 20 58 20 3D  20 4D 53 42 20 23 43 59  |     X = MSB #CY|
000002B0: 4C 53 0D 20 3B 20 20 20  20 20 20 20 20 20 59 20  |LS. ;         Y |
000002C0: 3D 20 4C 53 42 20 23 43  59 4C 53 0D 52 44 4C 4F  |= LSB #CYLS.RDLO|
000002D0: 4E 47 20 3D 20 52 45 41  44 2B 34 32 0D 52 45 41  |NG = READ+42.REA|
000002E0: 44 53 42 20 3D 20 52 45  41 44 2B 34 35 0D 57 52  |DSB = READ+45.WR|
000002F0: 4C 4F 4E 47 20 3D 20 52  45 41 44 2B 34 38 0D 57  |LONG = READ+48.W|
00000300: 52 49 54 53 42 20 3D 20  52 45 41 44 2B 35 31 0D  |RITSB = READ+51.|
00000310: 56 45 52 49 46 59 20 3D  20 52 45 41 44 2B 35 34  |VERIFY = READ+54|
00000320: 0D 44 43 42 50 54 52 20  3D 20 52 45 41 44 2B 35  |.DCBPTR = READ+5|
00000330: 37 20 3B 50 4F 49 4E 54  45 52 20 54 4F 20 44 43  |7 ;POINTER TO DC|
00000340: 42 0D 2A 20 3D 20 24 36  30 30 30 0D 53 54 41 52  |B.* = $6000.STAR|
00000350: 54 20 3D 20 2A 20 3B 42  45 47 49 4E 20 46 4F 52  |T = * ;BEGIN FOR|
00000360: 4D 41 54 0D 20 4C 44 41  20 23 30 20 3B 43 4C 45  |MAT. LDA #0 ;CLE|
00000370: 41 52 20 54 48 45 20 42  55 46 46 45 52 53 0D 20  |AR THE BUFFERS. |
00000380: 54 41 59 0D 43 4C 45 41  52 42 41 44 53 45 43 54  |TAY.CLEARBADSECT|
00000390: 4F 52 20 53 54 41 20 42  41 44 53 45 43 54 4F 52  |OR STA BADSECTOR|
000003A0: 53 2C 59 0D 20 53 54 41  20 42 41 44 53 45 43 54  |S,Y. STA BADSECT|
000003B0: 4F 52 53 2B 32 35 36 2C  59 0D 20 53 54 41 20 42  |ORS+256,Y. STA B|
000003C0: 41 44 53 45 43 54 4F 52  53 2B 35 31 32 2C 59 0D  |ADSECTORS+512,Y.|
000003D0: 20 53 54 41 20 42 41 44  53 45 43 54 4F 52 53 2B  | STA BADSECTORS+|
000003E0: 37 36 38 2C 59 0D 20 53  54 41 20 52 44 42 55 46  |768,Y. STA RDBUF|
000003F0: 2C 59 0D 20 53 54 41 20  52 44 42 55 46 2B 32 35  |,Y. STA RDBUF+25|
00000400: 36 2C 59 0D 20 53 54 41  20 57 52 54 42 55 46 2C  |6,Y. STA WRTBUF,|
00000410: 59 0D 20 53 54 41 20 57  52 54 42 55 46 2B 32 35  |Y. STA WRTBUF+25|
00000420: 36 2C 59 0D 20 49 4E 59  0D 20 42 4E 45 20 43 4C  |6,Y. INY. BNE CL|
00000430: 45 41 52 42 41 44 53 45  43 54 4F 52 0D 20 4C 44  |EARBADSECTOR. LD|
00000440: 41 20 23 34 20 3B 32 20  54 49 4D 45 53 20 23 20  |A #4 ;2 TIMES # |
00000450: 53 45 43 54 4F 52 53 20  46 4F 52 20 42 41 44 20  |SECTORS FOR BAD |
00000460: 53 45 43 54 4F 52 53 0D  20 53 54 41 20 42 41 44  |SECTORS. STA BAD|
00000470: 53 45 43 54 4F 52 43 54  52 0D 20 4C 44 41 20 23  |SECTORCTR. LDA #|
00000480: 3C 48 45 41 44 49 4E 47  4D 53 47 20 3B 43 4C 45  |<HEADINGMSG ;CLE|
00000490: 41 52 20 53 43 52 45 45  4E 2C 45 54 43 0D 20 4A  |AR SCREEN,ETC. J|
000004A0: 53 52 20 57 52 49 54 45  4F 55 54 41 4D 53 47 0D  |SR WRITEOUTAMSG.|
000004B0: 20 4C 44 41 20 44 43 42  50 54 52 0D 20 53 54 41  | LDA DCBPTR. STA|
000004C0: 20 50 54 52 31 0D 20 53  54 41 20 50 54 52 58 0D  | PTR1. STA PTRX.|
000004D0: 20 53 54 41 20 44 43 42  50 54 52 46 4F 52 47 45  | STA DCBPTRFORGE|
000004E0: 54 0D 20 4C 44 41 20 44  43 42 50 54 52 2B 31 0D  |T. LDA DCBPTR+1.|
000004F0: 20 53 54 41 20 50 54 52  32 20 3B 41 44 44 52 45  | STA PTR2 ;ADDRE|
00000500: 53 53 20 54 48 45 20 44  43 42 0D 20 53 54 41 20  |SS THE DCB. STA |
00000510: 50 54 52 58 2B 31 0D 20  53 54 41 20 44 43 42 50  |PTRX+1. STA DCBP|
00000520: 54 52 46 4F 52 47 45 54  2B 31 0D 20 4C 44 41 20  |TRFORGET+1. LDA |
00000530: 23 30 20 3B 53 45 54 20  55 50 20 46 4F 52 20 44  |#0 ;SET UP FOR D|
00000540: 52 49 56 45 20 30 0D 20  4A 53 52 20 50 55 54 44  |RIVE 0. JSR PUTD|
00000550: 43 42 44 52 49 56 45 20  3B 53 45 54 20 55 50 20  |CBDRIVE ;SET UP |
00000560: 44 52 49 56 45 20 30 0D  20 4A 53 52 20 52 45 53  |DRIVE 0. JSR RES|
00000570: 45 54 0D 20 42 43 43 20  52 45 53 45 54 49 53 4F  |ET. BCC RESETISO|
00000580: 4B 20 3B 47 4F 20 49 46  20 4E 4F 20 45 52 52 4F  |K ;GO IF NO ERRO|
00000590: 52 0D 20 4C 44 41 20 23  3C 52 45 53 45 54 45 52  |R. LDA #<RESETER|
000005A0: 52 4F 52 4D 53 47 20 3B  49 53 53 55 45 20 4D 53  |RORMSG ;ISSUE MS|
000005B0: 47 0D 20 4A 53 52 20 57  52 49 54 45 4F 55 54 41  |G. JSR WRITEOUTA|
000005C0: 4D 53 47 0D 20 42 52 4B  0D 52 45 53 45 54 49 53  |MSG. BRK.RESETIS|
000005D0: 4F 4B 20 4C 44 41 20 23  30 20 3B 52 45 53 54 4F  |OK LDA #0 ;RESTO|
000005E0: 52 45 20 44 52 49 56 45  20 30 0D 20 4A 53 52 20  |RE DRIVE 0. JSR |
000005F0: 50 55 54 44 43 42 44 52  49 56 45 0D 20 4A 53 52  |PUTDCBDRIVE. JSR|
00000600: 20 50 55 54 44 43 42 4D  53 42 53 45 43 54 52 20  | PUTDCBMSBSECTR |
00000610: 3B 53 45 54 20 53 45 43  54 4F 52 0D 20 4A 53 52  |;SET SECTOR. JSR|
00000620: 20 50 55 54 44 43 42 43  59 4C 4C 53 42 20 3B 41  | PUTDCBCYLLSB ;A|
00000630: 4E 44 20 43 59 4C 0D 20  4C 44 41 20 23 31 31 20  |ND CYL. LDA #11 |
00000640: 3B 49 4E 54 45 52 4C 45  41 56 45 2C 20 54 45 53  |;INTERLEAVE, TES|
00000650: 54 20 53 48 4F 57 53 20  31 31 20 47 4F 4F 44 0D  |T SHOWS 11 GOOD.|
00000660: 20 4A 53 52 20 50 55 54  44 43 42 4E 55 4D 53 45  | JSR PUTDCBNUMSE|
00000670: 43 53 0D 20 4C 44 41 20  23 3C 42 55 46 46 45 52  |CS. LDA #<BUFFER|
00000680: 0D 20 4A 53 52 20 50 55  54 44 43 42 4C 4F 42 55  |. JSR PUTDCBLOBU|
00000690: 46 50 54 52 0D 20 4C 44  41 20 23 3E 42 55 46 46  |FPTR. LDA #>BUFF|
000006A0: 45 52 0D 20 4A 53 52 20  50 55 54 44 43 42 48 49  |ER. JSR PUTDCBHI|
000006B0: 42 55 46 50 54 52 0D 20  4A 53 52 20 52 45 54 50  |BUFPTR. JSR RETP|
000006C0: 52 4D 20 3B 47 45 54 20  54 48 45 20 50 41 52 4D  |RM ;GET THE PARM|
000006D0: 53 0D 20 44 45 59 20 3B  42 41 43 4B 20 44 4F 57  |S. DEY ;BACK DOW|
000006E0: 4E 20 43 59 4C 49 4E 44  45 52 53 20 42 59 20 31  |N CYLINDERS BY 1|
000006F0: 0D 20 42 4E 45 20 53 41  56 45 54 48 45 50 41 52  |. BNE SAVETHEPAR|
00000700: 4D 53 0D 20 44 45 58 0D  53 41 56 45 54 48 45 50  |MS. DEX.SAVETHEP|
00000710: 41 52 4D 53 20 53 54 58  20 43 59 4C 4D 53 42 0D  |ARMS STX CYLMSB.|
00000720: 20 53 54 58 20 4E 55 4D  43 59 4C 49 4E 44 45 52  | STX NUMCYLINDER|
00000730: 53 20 3B 53 41 56 45 0D  20 53 54 59 20 4E 55 4D  |S ;SAVE. STY NUM|
00000740: 43 59 4C 49 4E 44 45 52  53 2B 31 0D 20 53 54 41  |CYLINDERS+1. STA|
00000750: 20 4E 55 4D 42 45 52 4F  46 48 45 41 44 53 0D 20  | NUMBEROFHEADS. |
00000760: 53 54 59 20 43 59 4C 4C  53 42 0D 20 4C 44 41 20  |STY CYLLSB. LDA |
00000770: 23 31 36 20 3B 53 45 54  20 53 45 43 54 4F 52 20  |#16 ;SET SECTOR |
00000780: 4E 55 4D 42 45 52 20 54  4F 20 4D 41 58 0D 20 53  |NUMBER TO MAX. S|
00000790: 54 41 20 53 45 43 54 4F  52 0D 20 4A 53 52 20 43  |TA SECTOR. JSR C|
000007A0: 59 4C 49 4E 44 45 52 32  53 45 43 54 52 20 3B 43  |YLINDER2SECTR ;C|
000007B0: 4F 4E 56 45 52 54 0D 20  4C 44 58 20 53 45 43 4E  |ONVERT. LDX SECN|
000007C0: 55 4D 20 3B 4D 4F 56 45  20 41 4E 44 20 50 52 49  |UM ;MOVE AND PRI|
000007D0: 4D 45 0D 20 4C 44 41 20  53 45 43 4E 55 4D 2B 31  |ME. LDA SECNUM+1|
000007E0: 20 3B 46 4F 52 20 53 45  43 54 4F 52 20 54 4F 20  | ;FOR SECTOR TO |
000007F0: 53 41 54 0D 20 4C 44 59  20 53 45 43 4E 55 4D 2B  |SAT. LDY SECNUM+|
00000800: 32 20 3B 43 4F 4E 56 45  52 53 49 4F 4E 0D 20 53  |2 ;CONVERSION. S|
00000810: 54 58 20 54 4F 54 41 4C  53 45 43 54 4F 52 53 0D  |TX TOTALSECTORS.|
00000820: 20 53 54 41 20 54 4F 54  41 4C 53 45 43 54 4F 52  | STA TOTALSECTOR|
00000830: 53 2B 31 0D 20 53 54 59  20 54 4F 54 41 4C 53 45  |S+1. STY TOTALSE|
00000840: 43 54 4F 52 53 2B 32 0D  20 4A 53 52 20 53 45 43  |CTORS+2. JSR SEC|
00000850: 54 4F 52 32 53 41 54 20  3B 47 4F 20 43 4F 4E 56  |TOR2SAT ;GO CONV|
00000860: 45 52 54 0D 20 4C 44 41  20 53 41 54 53 45 43 20  |ERT. LDA SATSEC |
00000870: 3B 53 41 56 45 20 46 4F  52 20 4C 41 54 45 52 0D  |;SAVE FOR LATER.|
00000880: 20 53 54 41 20 4C 41 53  54 53 41 54 53 45 43 54  | STA LASTSATSECT|
00000890: 4F 52 0D 20 4C 44 41 20  53 41 54 42 59 54 0D 20  |OR. LDA SATBYT. |
000008A0: 53 54 41 20 4C 41 53 54  53 41 54 42 59 54 45 0D  |STA LASTSATBYTE.|
000008B0: 20 4C 44 41 20 53 41 54  42 59 54 2B 31 0D 20 53  | LDA SATBYT+1. S|
000008C0: 54 41 20 4C 41 53 54 53  41 54 42 59 54 45 2B 31  |TA LASTSATBYTE+1|
000008D0: 0D 20 4C 44 41 20 53 41  54 42 49 54 0D 20 53 54  |. LDA SATBIT. ST|
000008E0: 41 20 4C 41 53 54 53 41  54 42 49 54 0D 43 48 45  |A LASTSATBIT.CHE|
000008F0: 43 4B 4C 4F 57 4C 45 56  45 4C 20 4C 44 41 20 23  |CKLOWLEVEL LDA #|
00000900: 3C 4C 4F 57 4C 45 56 45  4C 4D 53 47 20 3B 41 53  |<LOWLEVELMSG ;AS|
00000910: 4B 20 41 42 4F 55 54 20  4C 4F 4C 45 56 45 4C 0D  |K ABOUT LOLEVEL.|
00000920: 20 4A 53 52 20 57 52 49  54 45 4F 55 54 41 4D 53  | JSR WRITEOUTAMS|
00000930: 47 0D 4C 4F 57 4C 45 56  45 4C 41 4E 53 57 45 52  |G.LOWLEVELANSWER|
00000940: 20 4A 53 52 20 24 46 46  45 34 0D 20 4A 53 52 20  | JSR $FFE4. JSR |
00000950: 24 46 46 44 32 0D 20 43  4D 50 20 23 27 4E 27 20  |$FFD2. CMP #'N' |
00000960: 3B 4E 4F 20 4C 4F 57 20  4C 45 56 45 4C 0D 20 42  |;NO LOW LEVEL. B|
00000970: 45 51 20 53 45 54 55 50  43 4F 55 4E 54 45 52 53  |EQ SETUPCOUNTERS|
00000980: 0D 20 43 4D 50 20 23 27  59 27 20 3B 44 4F 20 49  |. CMP #'Y' ;DO I|
00000990: 54 3F 0D 20 42 4E 45 20  4C 4F 57 4C 45 56 45 4C  |T?. BNE LOWLEVEL|
000009A0: 41 4E 53 57 45 52 0D 20  4A 53 52 20 46 4D 54 44  |ANSWER. JSR FMTD|
000009B0: 52 56 20 3B 4C 4F 57 20  4C 45 56 45 4C 20 49 54  |RV ;LOW LEVEL IT|
000009C0: 0D 20 42 43 43 20 53 45  54 55 50 43 4F 55 4E 54  |. BCC SETUPCOUNT|
000009D0: 45 52 53 0D 20 4C 44 41  20 23 3C 4C 4F 57 4C 45  |ERS. LDA #<LOWLE|
000009E0: 56 45 4C 45 52 52 4D 53  47 20 3B 45 52 52 4F 52  |VELERRMSG ;ERROR|
000009F0: 20 4D 53 47 0D 20 4A 53  52 20 57 52 49 54 45 4F  | MSG. JSR WRITEO|
00000A00: 55 54 41 4D 53 47 0D 20  42 52 4B 0D 53 45 54 55  |UTAMSG. BRK.SETU|
00000A10: 50 43 4F 55 4E 54 45 52  53 20 3D 20 2A 0D 20 4C  |PCOUNTERS = *. L|
00000A20: 44 41 20 23 30 0D 20 53  54 41 20 43 59 4C 49 4E  |DA #0. STA CYLIN|
00000A30: 44 45 52 43 4F 55 4E 54  52 20 3B 43 4C 45 41 52  |DERCOUNTR ;CLEAR|
00000A40: 20 43 4F 55 4E 54 45 52  53 0D 20 53 54 41 20 43  | COUNTERS. STA C|
00000A50: 59 4C 49 4E 44 45 52 43  4F 55 4E 54 52 2B 31 0D  |YLINDERCOUNTR+1.|
00000A60: 20 53 54 41 20 48 45 41  44 43 4F 55 4E 54 45 52  | STA HEADCOUNTER|
00000A70: 0D 20 53 54 41 20 53 45  43 54 4F 52 43 4F 55 4E  |. STA SECTORCOUN|
00000A80: 54 45 52 0D 20 4C 44 58  20 23 30 0D 46 49 4C 4C  |TER. LDX #0.FILL|
00000A90: 42 55 46 46 45 52 20 54  58 41 0D 20 53 54 41 20  |BUFFER TXA. STA |
00000AA0: 57 52 54 42 55 46 2C 58  0D 20 53 54 41 20 57 52  |WRTBUF,X. STA WR|
00000AB0: 54 42 55 46 2B 32 35 36  2C 58 0D 20 49 4E 58 0D  |TBUF+256,X. INX.|
00000AC0: 20 42 4E 45 20 46 49 4C  4C 42 55 46 46 45 52 0D  | BNE FILLBUFFER.|
00000AD0: 20 4C 44 41 20 23 31 34  37 0D 20 4A 53 52 20 24  | LDA #147. JSR $|
00000AE0: 46 46 44 32 0D 20 4C 44  41 20 23 3C 49 4E 54 45  |FFD2. LDA #<INTE|
00000AF0: 4E 53 49 56 45 4D 53 47  20 3B 57 48 41 54 20 4B  |NSIVEMSG ;WHAT K|
00000B00: 49 4E 44 3F 0D 20 4A 53  52 20 57 52 49 54 45 4F  |IND?. JSR WRITEO|
00000B10: 55 54 41 4D 53 47 0D 49  4E 54 45 4E 53 45 41 4E  |UTAMSG.INTENSEAN|
00000B20: 53 57 45 52 20 4A 53 52  20 24 46 46 45 34 20 3B  |SWER JSR $FFE4 ;|
00000B30: 47 45 54 20 41 4E 53 57  45 52 0D 20 43 4D 50 20  |GET ANSWER. CMP |
00000B40: 23 27 4E 27 20 3B 4E 4F  54 20 49 4E 54 45 4E 53  |#'N' ;NOT INTENS|
00000B50: 49 56 45 0D 20 42 45 51  20 4E 4F 54 49 4E 54 45  |IVE. BEQ NOTINTE|
00000B60: 4E 53 49 56 45 0D 20 43  4D 50 20 23 27 59 27 20  |NSIVE. CMP #'Y' |
00000B70: 3B 59 45 53 3F 0D 20 42  4E 45 20 49 4E 54 45 4E  |;YES?. BNE INTEN|
00000B80: 53 45 41 4E 53 57 45 52  0D 20 4C 44 58 20 23 30  |SEANSWER. LDX #0|
00000B90: 0D 20 2E 42 59 54 20 24  32 43 0D 4E 4F 54 49 4E  |. .BYT $2C.NOTIN|
00000BA0: 54 45 4E 53 49 56 45 20  4C 44 58 20 23 24 46 46  |TENSIVE LDX #$FF|
00000BB0: 0D 20 53 54 58 20 49 4E  54 45 4E 53 49 56 45 46  |. STX INTENSIVEF|
00000BC0: 4C 41 47 20 3B 53 45 54  20 4D 4F 44 45 20 46 4C  |LAG ;SET MODE FL|
00000BD0: 41 47 0D 20 4A 53 52 20  24 46 46 44 32 0D 46 4F  |AG. JSR $FFD2.FO|
00000BE0: 52 4D 41 54 44 52 49 56  45 20 4C 44 41 20 23 35  |RMATDRIVE LDA #5|
00000BF0: 20 3B 43 4C 45 41 52 20  52 45 54 52 59 20 43 4F  | ;CLEAR RETRY CO|
00000C00: 55 4E 54 45 52 0D 20 53  54 41 20 57 52 54 52 45  |UNTER. STA WRTRE|
00000C10: 54 52 59 43 4F 55 4E 54  52 0D 20 53 54 41 20 52  |TRYCOUNTR. STA R|
00000C20: 44 52 45 54 52 59 43 4F  55 4E 54 45 52 0D 20 4C  |DRETRYCOUNTER. L|
00000C30: 44 41 20 43 59 4C 49 4E  44 45 52 43 4F 55 4E 54  |DA CYLINDERCOUNT|
00000C40: 52 2B 31 0D 20 4A 53 52  20 48 45 58 54 4F 41 53  |R+1. JSR HEXTOAS|
00000C50: 43 49 49 20 3B 4D 41 4B  45 20 50 52 49 4E 54 41  |CII ;MAKE PRINTA|
00000C60: 42 4C 45 0D 20 53 54 41  20 24 30 34 31 45 0D 20  |BLE. STA $041E. |
00000C70: 53 54 58 20 24 30 34 31  46 0D 20 4C 44 41 20 43  |STX $041F. LDA C|
00000C80: 59 4C 49 4E 44 45 52 43  4F 55 4E 54 52 0D 20 4A  |YLINDERCOUNTR. J|
00000C90: 53 52 20 48 45 58 54 4F  41 53 43 49 49 0D 20 53  |SR HEXTOASCII. S|
00000CA0: 54 41 20 24 30 34 32 30  0D 20 53 54 58 20 24 30  |TA $0420. STX $0|
00000CB0: 34 32 31 0D 20 4C 44 41  20 23 33 32 0D 20 53 54  |421. LDA #32. ST|
00000CC0: 41 20 24 30 34 32 32 0D  20 4C 44 41 20 48 45 41  |A $0422. LDA HEA|
00000CD0: 44 43 4F 55 4E 54 45 52  0D 20 4A 53 52 20 48 45  |DCOUNTER. JSR HE|
00000CE0: 58 54 4F 41 53 43 49 49  0D 20 53 54 41 20 24 30  |XTOASCII. STA $0|
00000CF0: 34 32 33 0D 20 53 54 58  20 24 30 34 32 34 0D 20  |423. STX $0424. |
00000D00: 4C 44 41 20 23 33 32 0D  20 53 54 41 20 24 30 34  |LDA #32. STA $04|
00000D10: 32 35 0D 20 4C 44 41 20  53 45 43 54 4F 52 43 4F  |25. LDA SECTORCO|
00000D20: 55 4E 54 45 52 0D 20 4A  53 52 20 48 45 58 54 4F  |UNTER. JSR HEXTO|
00000D30: 41 53 43 49 49 0D 20 53  54 41 20 24 30 34 32 36  |ASCII. STA $0426|
00000D40: 0D 20 53 54 58 20 24 30  34 32 37 0D 20 4A 53 52  |. STX $0427. JSR|
00000D50: 20 53 45 54 55 50 44 43  42 20 3B 53 45 54 20 55  | SETUPDCB ;SET U|
00000D60: 50 20 44 43 42 0D 20 4C  44 41 20 49 4E 54 45 4E  |P DCB. LDA INTEN|
00000D70: 53 49 56 45 46 4C 41 47  20 3B 43 48 45 43 4B 20  |SIVEFLAG ;CHECK |
00000D80: 46 4F 52 20 49 4E 54 45  4E 53 45 20 46 4F 52 4D  |FOR INTENSE FORM|
00000D90: 41 54 0D 20 42 4E 45 20  42 59 50 41 53 53 57 52  |AT. BNE BYPASSWR|
00000DA0: 49 54 45 20 3B 42 59 50  41 53 53 20 57 52 49 54  |ITE ;BYPASS WRIT|
00000DB0: 45 0D 20 4C 44 41 20 23  3C 57 52 54 42 55 46 0D  |E. LDA #<WRTBUF.|
00000DC0: 20 4A 53 52 20 50 55 54  44 43 42 4C 4F 42 55 46  | JSR PUTDCBLOBUF|
00000DD0: 50 54 52 0D 20 4C 44 41  20 23 3E 57 52 54 42 55  |PTR. LDA #>WRTBU|
00000DE0: 46 0D 20 4A 53 52 20 50  55 54 44 43 42 48 49 42  |F. JSR PUTDCBHIB|
00000DF0: 55 46 50 54 52 0D 57 52  49 54 45 41 53 45 43 54  |UFPTR.WRITEASECT|
00000E00: 4F 52 20 4A 53 52 20 57  52 49 54 45 20 3B 47 4F  |OR JSR WRITE ;GO|
00000E10: 20 57 52 49 54 45 20 41  20 42 4C 4F 43 4B 0D 20  | WRITE A BLOCK. |
00000E20: 42 43 43 20 42 59 50 41  53 53 57 52 49 54 45 0D  |BCC BYPASSWRITE.|
00000E30: 20 4A 53 52 20 52 45 41  44 54 48 45 53 45 4E 53  | JSR READTHESENS|
00000E40: 45 20 3B 52 45 54 52 49  45 56 45 20 53 45 4E 53  |E ;RETRIEVE SENS|
00000E50: 45 0D 20 4A 53 52 20 57  52 49 54 45 4F 55 54 53  |E. JSR WRITEOUTS|
00000E60: 45 4E 53 45 0D 20 4A 53  52 20 52 45 53 45 54 46  |ENSE. JSR RESETF|
00000E70: 4F 52 52 45 54 52 59 20  3B 20 53 45 54 20 55 50  |ORRETRY ; SET UP|
00000E80: 20 46 4F 52 20 52 45 54  52 59 0D 20 44 45 43 20  | FOR RETRY. DEC |
00000E90: 57 52 54 52 45 54 52 59  43 4F 55 4E 54 52 0D 20  |WRTRETRYCOUNTR. |
00000EA0: 42 4E 45 20 57 52 49 54  45 41 53 45 43 54 4F 52  |BNE WRITEASECTOR|
00000EB0: 0D 20 4C 44 41 20 23 3C  57 52 49 54 45 45 52 52  |. LDA #<WRITEERR|
00000EC0: 4F 52 4D 53 47 20 3B 57  52 49 54 45 20 45 52 52  |ORMSG ;WRITE ERR|
00000ED0: 4F 52 0D 20 4A 53 52 20  57 52 49 54 45 4F 55 54  |OR. JSR WRITEOUT|
00000EE0: 41 4D 53 47 0D 20 4A 53  52 20 4D 41 52 4B 42 41  |AMSG. JSR MARKBA|
00000EF0: 44 53 45 43 54 4F 52 20  3B 4D 41 52 4B 20 41 53  |DSECTOR ;MARK AS|
00000F00: 20 42 41 44 0D 20 4A 4D  50 20 4F 4E 54 4F 4E 45  | BAD. JMP ONTONE|
00000F10: 58 54 53 45 43 54 4F 52  20 3B 47 4F 20 54 4F 20  |XTSECTOR ;GO TO |
00000F20: 4E 45 58 54 20 53 45 43  54 4F 52 0D 42 59 50 41  |NEXT SECTOR.BYPA|
00000F30: 53 53 57 52 49 54 45 20  4C 44 41 20 23 3C 52 44  |SSWRITE LDA #<RD|
00000F40: 42 55 46 0D 20 4A 53 52  20 50 55 54 44 43 42 4C  |BUF. JSR PUTDCBL|
00000F50: 4F 42 55 46 50 54 52 0D  20 4C 44 41 20 23 3E 52  |OBUFPTR. LDA #>R|
00000F60: 44 42 55 46 0D 20 4A 53  52 20 50 55 54 44 43 42  |DBUF. JSR PUTDCB|
00000F70: 48 49 42 55 46 50 54 52  0D 52 45 41 44 41 53 45  |HIBUFPTR.READASE|
00000F80: 43 54 4F 52 20 4A 53 52  20 52 45 41 44 0D 20 42  |CTOR JSR READ. B|
00000F90: 43 43 20 49 53 49 54 49  4E 54 45 4E 53 49 56 45  |CC ISITINTENSIVE|
00000FA0: 0D 20 4A 53 52 20 52 45  41 44 54 48 45 53 45 4E  |. JSR READTHESEN|
00000FB0: 53 45 20 3B 52 45 54 52  49 45 56 45 20 53 45 4E  |SE ;RETRIEVE SEN|
00000FC0: 53 45 0D 20 4A 53 52 20  57 52 49 54 45 4F 55 54  |SE. JSR WRITEOUT|
00000FD0: 53 45 4E 53 45 0D 20 4C  44 41 20 23 3C 52 44 45  |SENSE. LDA #<RDE|
00000FE0: 52 52 4F 52 4D 53 47 20  3B 52 45 41 44 20 45 52  |RRORMSG ;READ ER|
00000FF0: 52 4F 52 0D 52 45 41 44  52 45 54 52 59 20 50 48  |ROR.READRETRY PH|
00001000: 41 20 3B 53 41 56 45 20  4D 53 47 20 4E 55 4D 42  |A ;SAVE MSG NUMB|
00001010: 45 52 0D 20 4A 53 52 20  52 45 53 45 54 46 4F 52  |ER. JSR RESETFOR|
00001020: 52 45 54 52 59 20 3B 53  45 54 20 55 50 20 46 4F  |RETRY ;SET UP FO|
00001030: 52 20 52 45 54 52 59 0D  20 50 4C 41 20 3B 52 45  |R RETRY. PLA ;RE|
00001040: 54 52 49 45 56 45 20 4D  53 47 20 4E 55 4D 42 45  |TRIEVE MSG NUMBE|
00001050: 52 0D 20 44 45 43 20 52  44 52 45 54 52 59 43 4F  |R. DEC RDRETRYCO|
00001060: 55 4E 54 45 52 20 3B 43  48 45 43 4B 20 46 4F 52  |UNTER ;CHECK FOR|
00001070: 20 4D 41 58 20 4E 55 4D  0D 20 42 4E 45 20 52 45  | MAX NUM. BNE RE|
00001080: 41 44 41 53 45 43 54 4F  52 0D 20 4A 53 52 20 57  |ADASECTOR. JSR W|
00001090: 52 49 54 45 4F 55 54 41  4D 53 47 0D 20 4A 53 52  |RITEOUTAMSG. JSR|
000010A0: 20 4D 41 52 4B 42 41 44  53 45 43 54 4F 52 0D 20  | MARKBADSECTOR. |
000010B0: 4A 4D 50 20 4F 4E 54 4F  4E 45 58 54 53 45 43 54  |JMP ONTONEXTSECT|
000010C0: 4F 52 0D 49 53 49 54 49  4E 54 45 4E 53 49 56 45  |OR.ISITINTENSIVE|
000010D0: 20 4C 44 41 20 49 4E 54  45 4E 53 49 56 45 46 4C  | LDA INTENSIVEFL|
000010E0: 41 47 20 3B 43 48 45 43  4B 20 46 4F 52 20 49 4E  |AG ;CHECK FOR IN|
000010F0: 53 54 45 4E 53 45 0D 20  42 4E 45 20 4F 4E 54 4F  |STENSE. BNE ONTO|
00001100: 4E 45 58 54 53 45 43 54  4F 52 20 3B 42 59 50 41  |NEXTSECTOR ;BYPA|
00001110: 53 53 20 43 4F 4D 50 41  52 45 0D 20 4C 44 59 20  |SS COMPARE. LDY |
00001120: 23 30 20 3B 53 45 54 20  55 50 20 46 4F 52 20 43  |#0 ;SET UP FOR C|
00001130: 4F 4D 50 41 52 45 0D 43  4F 4D 50 41 52 45 53 45  |OMPARE.COMPARESE|
00001140: 43 54 4F 52 53 20 4C 44  41 20 57 52 54 42 55 46  |CTORS LDA WRTBUF|
00001150: 2C 59 0D 20 43 4D 50 20  52 44 42 55 46 2C 59 0D  |,Y. CMP RDBUF,Y.|
00001160: 20 42 4E 45 20 42 41 44  43 4F 4D 50 41 52 45 0D  | BNE BADCOMPARE.|
00001170: 20 4C 44 41 20 57 52 54  42 55 46 2B 32 35 36 2C  | LDA WRTBUF+256,|
00001180: 59 0D 20 43 4D 50 20 52  44 42 55 46 2B 32 35 36  |Y. CMP RDBUF+256|
00001190: 2C 59 0D 20 42 45 51 20  43 4F 4D 50 41 52 45 4E  |,Y. BEQ COMPAREN|
000011A0: 45 58 54 0D 42 41 44 43  4F 4D 50 41 52 45 20 4C  |EXT.BADCOMPARE L|
000011B0: 44 41 20 23 3C 43 4F 4D  50 41 52 45 45 52 52 4D  |DA #<COMPAREERRM|
000011C0: 53 47 0D 20 42 4E 45 20  52 45 41 44 52 45 54 52  |SG. BNE READRETR|
000011D0: 59 0D 43 4F 4D 50 41 52  45 4E 45 58 54 20 49 4E  |Y.COMPARENEXT IN|
000011E0: 59 0D 20 42 4E 45 20 43  4F 4D 50 41 52 45 53 45  |Y. BNE COMPARESE|
000011F0: 43 54 4F 52 53 0D 4F 4E  54 4F 4E 45 58 54 53 45  |CTORS.ONTONEXTSE|
00001200: 43 54 4F 52 20 4C 44 58  20 53 45 43 54 4F 52 43  |CTOR LDX SECTORC|
00001210: 4F 55 4E 54 45 52 20 3B  43 48 45 43 4B 20 53 45  |OUNTER ;CHECK SE|
00001220: 43 54 4F 52 0D 20 49 4E  58 0D 20 43 50 58 20 23  |CTOR. INX. CPX #|
00001230: 31 37 0D 20 42 4E 45 20  42 55 4D 50 54 48 45 48  |17. BNE BUMPTHEH|
00001240: 45 41 44 0D 20 4C 44 58  20 23 30 0D 42 55 4D 50  |EAD. LDX #0.BUMP|
00001250: 54 48 45 48 45 41 44 20  53 54 58 20 53 45 43 54  |THEHEAD STX SECT|
00001260: 4F 52 43 4F 55 4E 54 45  52 20 3B 53 41 56 45 20  |ORCOUNTER ;SAVE |
00001270: 53 45 43 54 4F 52 0D 20  42 4E 45 20 47 4F 54 4E  |SECTOR. BNE GOTN|
00001280: 45 57 41 44 44 52 45 53  53 20 3B 47 4F 20 4F 4E  |EWADDRESS ;GO ON|
00001290: 20 49 46 20 42 45 4C 4F  57 0D 20 4C 44 58 20 48  | IF BELOW. LDX H|
000012A0: 45 41 44 43 4F 55 4E 54  45 52 20 3B 42 55 4D 50  |EADCOUNTER ;BUMP|
000012B0: 20 54 4F 20 4E 45 58 54  20 48 45 41 44 0D 20 49  | TO NEXT HEAD. I|
000012C0: 4E 58 0D 20 43 50 58 20  4E 55 4D 42 45 52 4F 46  |NX. CPX NUMBEROF|
000012D0: 48 45 41 44 53 20 3B 41  54 20 4D 41 58 3F 0D 20  |HEADS ;AT MAX?. |
000012E0: 42 4E 45 20 53 41 56 45  48 45 41 44 43 4F 55 4E  |BNE SAVEHEADCOUN|
000012F0: 54 0D 20 4C 44 58 20 23  30 0D 53 41 56 45 48 45  |T. LDX #0.SAVEHE|
00001300: 41 44 43 4F 55 4E 54 20  53 54 58 20 48 45 41 44  |ADCOUNT STX HEAD|
00001310: 43 4F 55 4E 54 45 52 0D  20 42 4E 45 20 47 4F 54  |COUNTER. BNE GOT|
00001320: 4E 45 57 41 44 44 52 45  53 53 0D 20 4C 44 41 20  |NEWADDRESS. LDA |
00001330: 24 44 43 30 42 20 3B 47  45 54 20 48 52 53 20 53  |$DC0B ;GET HRS S|
00001340: 54 4F 50 20 43 4C 4F 43  4B 0D 20 4C 44 41 20 24  |TOP CLOCK. LDA $|
00001350: 44 43 30 39 20 3B 47 45  54 20 53 45 43 4F 4E 44  |DC09 ;GET SECOND|
00001360: 53 0D 20 4A 53 52 20 48  45 58 54 4F 41 53 43 49  |S. JSR HEXTOASCI|
00001370: 49 0D 20 53 54 41 20 24  34 31 30 0D 20 53 54 58  |I. STA $410. STX|
00001380: 20 24 34 31 31 0D 20 4C  44 41 20 23 27 3A 27 0D  | $411. LDA #':'.|
00001390: 20 53 54 41 20 24 34 31  32 0D 20 4C 44 41 20 24  | STA $412. LDA $|
000013A0: 44 43 30 38 0D 20 4A 53  52 20 48 45 58 54 4F 41  |DC08. JSR HEXTOA|
000013B0: 53 43 49 49 0D 20 53 54  58 20 24 30 34 31 33 0D  |SCII. STX $0413.|
000013C0: 20 53 54 41 20 24 30 34  31 34 0D 20 4C 44 41 20  | STA $0414. LDA |
000013D0: 24 44 43 30 46 0D 20 41  4E 44 20 23 24 37 46 0D  |$DC0F. AND #$7F.|
000013E0: 20 53 54 41 20 24 44 43  30 46 0D 20 4C 44 41 20  | STA $DC0F. LDA |
000013F0: 23 24 30 30 0D 20 4C 44  58 20 23 34 0D 53 45 54  |#$00. LDX #4.SET|
00001400: 54 49 4D 45 54 4F 5A 45  52 4F 20 53 54 41 20 24  |TIMETOZERO STA $|
00001410: 44 43 30 38 2C 58 0D 20  44 45 58 0D 20 42 50 4C  |DC08,X. DEX. BPL|
00001420: 20 53 45 54 54 49 4D 45  54 4F 5A 45 52 4F 0D 20  | SETTIMETOZERO. |
00001430: 4C 44 58 20 43 59 4C 49  4E 44 45 52 43 4F 55 4E  |LDX CYLINDERCOUN|
00001440: 54 52 20 3B 43 48 45 43  4B 20 46 4F 52 20 45 4E  |TR ;CHECK FOR EN|
00001450: 44 0D 20 43 50 58 20 4E  55 4D 43 59 4C 49 4E 44  |D. CPX NUMCYLIND|
00001460: 45 52 53 0D 20 42 4E 45  20 42 55 4D 50 43 59 4C  |ERS. BNE BUMPCYL|
00001470: 49 4E 44 45 52 4C 4F 0D  20 4C 44 58 20 43 59 4C  |INDERLO. LDX CYL|
00001480: 49 4E 44 45 52 43 4F 55  4E 54 52 2B 31 0D 20 43  |INDERCOUNTR+1. C|
00001490: 50 58 20 4E 55 4D 43 59  4C 49 4E 44 45 52 53 2B  |PX NUMCYLINDERS+|
000014A0: 31 0D 20 42 45 51 20 45  4E 44 4F 46 46 4F 52 4D  |1. BEQ ENDOFFORM|
000014B0: 41 54 0D 42 55 4D 50 43  59 4C 49 4E 44 45 52 4C  |AT.BUMPCYLINDERL|
000014C0: 4F 20 49 4E 43 20 43 59  4C 49 4E 44 45 52 43 4F  |O INC CYLINDERCO|
000014D0: 55 4E 54 52 20 3B 42 55  4D 50 20 42 59 20 4F 4E  |UNTR ;BUMP BY ON|
000014E0: 45 0D 20 42 45 51 20 42  55 4D 50 43 59 4C 49 4E  |E. BEQ BUMPCYLIN|
000014F0: 44 45 52 48 49 0D 47 4F  54 4E 45 57 41 44 44 52  |DERHI.GOTNEWADDR|
00001500: 45 53 53 20 4A 4D 50 20  46 4F 52 4D 41 54 44 52  |ESS JMP FORMATDR|
00001510: 49 56 45 0D 42 55 4D 50  43 59 4C 49 4E 44 45 52  |IVE.BUMPCYLINDER|
00001520: 48 49 20 49 4E 43 20 43  59 4C 49 4E 44 45 52 43  |HI INC CYLINDERC|
00001530: 4F 55 4E 54 52 2B 31 0D  20 4A 4D 50 20 46 4F 52  |OUNTR+1. JMP FOR|
00001540: 4D 41 54 44 52 49 56 45  0D 45 4E 44 4F 46 46 4F  |MATDRIVE.ENDOFFO|
00001550: 52 4D 41 54 20 4C 44 41  20 23 3C 45 4E 44 4F 46  |RMAT LDA #<ENDOF|
00001560: 4A 4F 42 4D 53 47 0D 20  4A 53 52 20 57 52 49 54  |JOBMSG. JSR WRIT|
00001570: 45 4F 55 54 41 4D 53 47  0D 20 42 52 4B 0D 3B 0D  |EOUTAMSG. BRK.;.|
00001580: 3B 2B 2B 2B 2B 2B 2B 2B  2B 2B 2B 2B 2B 2B 2B 2B  |;+++++++++++++++|
00001590: 2B 2B 2B 2B 2B 2B 2B 2B  2B 2B 2B 2B 2B 2B 2B 2B  |++++++++++++++++|
000015A0: 2B 2B 0D 3B 2B 20 20 20  20 20 53 45 54 20 44 43  |++.;+     SET DC|
000015B0: 42 20 46 49 45 4C 44 20  20 20 20 20 20 20 20 20  |B FIELD         |
000015C0: 20 20 20 20 2B 0D 3B 2B  20 20 20 20 20 20 20 20  |    +.;+        |
000015D0: 20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000015E0: 20 20 20 20 20 20 20 2B  0D 3B 2B 20 49 4E 50 55  |       +.;+ INPU|
000015F0: 54 20 20 2D 20 41 20 3D  20 42 59 54 45 20 54 4F  |T  - A = BYTE TO|
00001600: 20 50 55 54 20 20 20 20  20 20 2B 0D 3B 2B 20 20  | PUT      +.;+  |
00001610: 20 20 20 20 20 20 20 20  58 20 3D 20 4F 46 46 53  |        X = OFFS|
00001620: 45 54 20 49 4E 20 44 43  42 20 20 20 20 2B 0D 3B  |ET IN DCB    +.;|
00001630: 2B 2B 2B 2B 2B 2B 2B 2B  2B 2B 2B 2B 2B 2B 2B 2B  |++++++++++++++++|
00001640: 2B 2B 2B 2B 2B 2B 2B 2B  2B 2B 2B 2B 2B 2B 2B 2B  |++++++++++++++++|
00001650: 2B 0D 3B 0D 50 55 54 44  43 42 43 4F 4D 4D 41 4E  |+.;.PUTDCBCOMMAN|
00001660: 44 20 4C 44 58 20 23 30  20 3B 4F 46 46 53 45 54  |D LDX #0 ;OFFSET|
00001670: 20 30 0D 20 2E 42 59 54  20 24 32 43 20 3B 42 49  | 0. .BYT $2C ;BI|
00001680: 54 0D 50 55 54 44 43 42  48 45 41 44 20 3D 20 2A  |T.PUTDCBHEAD = *|
00001690: 20 3B 53 41 4D 45 20 41  53 20 50 55 54 20 44 52  | ;SAME AS PUT DR|
000016A0: 49 56 45 0D 50 55 54 44  43 42 44 52 49 56 45 20  |IVE.PUTDCBDRIVE |
000016B0: 4C 44 58 20 23 31 20 3B  4F 46 46 53 45 54 20 31  |LDX #1 ;OFFSET 1|
000016C0: 0D 20 2E 42 59 54 20 24  32 43 20 3B 42 49 54 0D  |. .BYT $2C ;BIT.|
000016D0: 50 55 54 44 43 42 4D 53  42 53 45 43 54 52 20 4C  |PUTDCBMSBSECTR L|
000016E0: 44 58 20 23 32 20 3B 4F  46 46 53 45 54 20 32 0D  |DX #2 ;OFFSET 2.|
000016F0: 20 2E 42 59 54 20 24 32  43 20 3B 42 49 54 0D 50  | .BYT $2C ;BIT.P|
00001700: 55 54 44 43 42 43 59 4C  4C 53 42 20 4C 44 58 20  |UTDCBCYLLSB LDX |
00001710: 23 33 20 3B 4F 46 46 53  45 54 20 33 0D 20 2E 42  |#3 ;OFFSET 3. .B|
00001720: 59 54 20 24 32 43 20 3B  42 49 54 0D 50 55 54 44  |YT $2C ;BIT.PUTD|
00001730: 43 42 4E 55 4D 53 45 43  53 20 4C 44 58 20 23 34  |CBNUMSECS LDX #4|
00001740: 20 3B 4F 46 46 53 45 54  20 34 0D 20 2E 42 59 54  | ;OFFSET 4. .BYT|
00001750: 20 24 32 43 20 3B 42 49  54 0D 50 55 54 44 43 42  | $2C ;BIT.PUTDCB|
00001760: 53 54 45 50 20 4C 44 58  20 23 35 20 3B 4F 46 46  |STEP LDX #5 ;OFF|
00001770: 53 45 54 20 35 0D 20 2E  42 59 54 20 24 32 43 20  |SET 5. .BYT $2C |
00001780: 3B 42 49 54 0D 50 55 54  44 43 42 4C 4F 42 55 46  |;BIT.PUTDCBLOBUF|
00001790: 50 54 52 20 4C 44 58 20  23 36 20 3B 4F 46 46 53  |PTR LDX #6 ;OFFS|
000017A0: 45 54 20 36 0D 20 2E 42  59 54 20 24 32 43 20 3B  |ET 6. .BYT $2C ;|
000017B0: 42 49 54 0D 50 55 54 44  43 42 48 49 42 55 46 50  |BIT.PUTDCBHIBUFP|
000017C0: 54 52 20 4C 44 58 20 23  37 20 3B 4F 46 46 53 45  |TR LDX #7 ;OFFSE|
000017D0: 54 20 37 0D 50 55 54 44  43 42 20 53 54 41 20 50  |T 7.PUTDCB STA P|
000017E0: 55 54 44 43 42 2C 58 0D  50 54 52 31 20 3D 20 50  |UTDCB,X.PTR1 = P|
000017F0: 55 54 44 43 42 2B 31 0D  50 54 52 32 20 3D 20 50  |UTDCB+1.PTR2 = P|
00001800: 55 54 44 43 42 2B 32 0D  20 52 54 53 20 3B 20 53  |UTDCB+2. RTS ; S|
00001810: 48 4F 52 54 20 41 4E 44  20 53 57 45 45 54 3F 3F  |HORT AND SWEET??|
00001820: 0D 3B 0D 52 45 41 44 54  48 45 53 45 4E 53 45 20  |.;.READTHESENSE |
00001830: 4C 44 59 20 23 31 32 20  3B 4F 46 46 53 45 54 20  |LDY #12 ;OFFSET |
00001840: 54 4F 20 53 45 4E 53 45  0D 20 53 54 41 20 45 52  |TO SENSE. STA ER|
00001850: 52 4F 52 43 4F 44 45 20  3B 53 41 56 45 20 45 52  |RORCODE ;SAVE ER|
00001860: 52 4F 52 20 43 4F 44 45  0D 20 4C 44 58 20 23 30  |ROR CODE. LDX #0|
00001870: 0D 47 45 54 41 4C 4C 54  48 45 53 45 4E 53 45 20  |.GETALLTHESENSE |
00001880: 4C 44 41 20 47 45 54 41  4C 4C 54 48 45 53 45 4E  |LDA GETALLTHESEN|
00001890: 53 45 2C 59 0D 50 54 52  58 20 3D 20 47 45 54 41  |SE,Y.PTRX = GETA|
000018A0: 4C 4C 54 48 45 53 45 4E  53 45 2B 31 0D 20 53 54  |LLTHESENSE+1. ST|
000018B0: 41 20 43 55 52 52 45 4E  54 53 45 4E 53 45 2C 58  |A CURRENTSENSE,X|
000018C0: 20 3B 50 55 54 20 49 4E  20 42 55 46 46 45 52 0D  | ;PUT IN BUFFER.|
000018D0: 20 49 4E 58 0D 20 49 4E  59 0D 20 43 50 58 20 23  | INX. INY. CPX #|
000018E0: 34 0D 20 42 4E 45 20 47  45 54 41 4C 4C 54 48 45  |4. BNE GETALLTHE|
000018F0: 53 45 4E 53 45 0D 20 52  54 53 0D 3B 0D 47 45 54  |SENSE. RTS.;.GET|
00001900: 44 43 42 43 4F 4D 4D 41  4E 44 20 4C 44 59 20 23  |DCBCOMMAND LDY #|
00001910: 30 0D 20 2E 42 59 54 20  24 32 43 0D 47 45 54 44  |0. .BYT $2C.GETD|
00001920: 43 42 48 45 41 44 20 4C  44 59 20 23 31 0D 20 2E  |CBHEAD LDY #1. .|
00001930: 42 59 54 20 24 32 43 0D  47 45 54 44 43 42 53 45  |BYT $2C.GETDCBSE|
00001940: 43 54 4F 52 20 4C 44 59  20 23 32 0D 20 2E 42 59  |CTOR LDY #2. .BY|
00001950: 54 20 24 32 43 0D 47 45  54 44 43 42 43 59 4C 4C  |T $2C.GETDCBCYLL|
00001960: 53 42 20 4C 44 59 20 23  33 0D 3B 0D 47 45 54 44  |SB LDY #3.;.GETD|
00001970: 43 42 49 4E 46 4F 20 4C  44 41 20 47 45 54 44 43  |CBINFO LDA GETDC|
00001980: 42 49 4E 46 4F 2C 59 20  3B 59 20 48 41 53 20 4F  |BINFO,Y ;Y HAS O|
00001990: 46 46 53 45 54 0D 44 43  42 50 54 52 46 4F 52 47  |FFSET.DCBPTRFORG|
000019A0: 45 54 20 3D 20 47 45 54  44 43 42 49 4E 46 4F 2B  |ET = GETDCBINFO+|
000019B0: 31 0D 20 52 54 53 0D 3B  0D 3B 0D 57 52 49 54 45  |1. RTS.;.;.WRITE|
000019C0: 4F 55 54 48 45 58 20 50  48 41 0D 20 41 4E 44 20  |OUTHEX PHA. AND |
000019D0: 23 24 46 30 20 3B 48 49  47 48 20 4E 59 42 4C 45  |#$F0 ;HIGH NYBLE|
000019E0: 20 46 49 52 53 54 0D 20  4C 53 52 20 41 0D 20 4C  | FIRST. LSR A. L|
000019F0: 53 52 20 41 0D 20 4C 53  52 20 41 0D 20 4C 53 52  |SR A. LSR A. LSR|
00001A00: 20 41 0D 20 4A 53 52 20  49 53 49 54 41 54 48 52  | A. JSR ISITATHR|
00001A10: 55 46 0D 20 50 4C 41 0D  20 41 4E 44 20 23 24 30  |UF. PLA. AND #$0|
00001A20: 46 0D 49 53 49 54 41 54  48 52 55 46 20 43 4D 50  |F.ISITATHRUF CMP|
00001A30: 20 23 24 30 41 0D 20 42  43 43 20 41 44 44 41 53  | #$0A. BCC ADDAS|
00001A40: 43 49 49 5A 45 52 4F 0D  20 41 44 43 20 23 36 20  |CIIZERO. ADC #6 |
00001A50: 3B 41 44 44 20 53 45 56  45 4E 0D 41 44 44 41 53  |;ADD SEVEN.ADDAS|
00001A60: 43 49 49 5A 45 52 4F 20  41 44 43 20 23 24 33 30  |CIIZERO ADC #$30|
00001A70: 0D 20 4A 4D 50 20 24 46  46 44 32 0D 48 45 58 54  |. JMP $FFD2.HEXT|
00001A80: 4F 41 53 43 49 49 20 50  48 41 0D 20 41 4E 44 20  |OASCII PHA. AND |
00001A90: 23 24 30 46 20 3B 47 45  54 20 4C 4F 57 20 4E 59  |#$0F ;GET LOW NY|
00001AA0: 42 4C 45 0D 20 4A 53 52  20 42 49 47 47 45 52 54  |BLE. JSR BIGGERT|
00001AB0: 48 41 4E 39 0D 20 54 41  58 0D 20 50 4C 41 0D 20  |HAN9. TAX. PLA. |
00001AC0: 41 4E 44 20 23 24 46 30  20 3B 4E 4F 57 20 48 49  |AND #$F0 ;NOW HI|
00001AD0: 20 4E 59 42 4C 45 0D 20  4C 53 52 20 41 0D 20 4C  | NYBLE. LSR A. L|
00001AE0: 53 52 20 41 0D 20 4C 53  52 20 41 0D 20 4C 53 52  |SR A. LSR A. LSR|
00001AF0: 20 41 0D 42 49 47 47 45  52 54 48 41 4E 39 20 43  | A.BIGGERTHAN9 C|
00001B00: 4D 50 20 23 24 30 41 0D  20 42 43 43 20 41 44 44  |MP #$0A. BCC ADD|
00001B10: 41 5A 45 52 4F 0D 20 53  42 43 20 23 39 0D 20 52  |AZERO. SBC #9. R|
00001B20: 54 53 0D 20 41 44 43 20  23 36 20 3B 41 44 44 20  |TS. ADC #6 ;ADD |
00001B30: 53 45 56 45 4E 0D 41 44  44 41 5A 45 52 4F 20 41  |SEVEN.ADDAZERO A|
00001B40: 44 43 20 23 24 33 30 0D  20 52 54 53 0D 3B 0D 57  |DC #$30. RTS.;.W|
00001B50: 52 49 54 45 4F 55 54 53  45 4E 53 45 20 4C 44 59  |RITEOUTSENSE LDY|
00001B60: 20 23 30 0D 57 52 49 54  45 41 4C 4C 53 45 4E 53  | #0.WRITEALLSENS|
00001B70: 45 20 4C 44 41 20 45 52  52 4F 52 43 4F 44 45 2C  |E LDA ERRORCODE,|
00001B80: 59 20 3B 47 45 54 20 45  52 52 4F 52 43 4F 44 45  |Y ;GET ERRORCODE|
00001B90: 20 41 4E 44 20 53 45 4E  53 45 0D 20 4A 53 52 20  | AND SENSE. JSR |
00001BA0: 57 52 49 54 45 4F 55 54  48 45 58 20 3B 57 52 49  |WRITEOUTHEX ;WRI|
00001BB0: 54 45 20 49 54 0D 20 4C  44 41 20 23 33 32 0D 20  |TE IT. LDA #32. |
00001BC0: 4A 53 52 20 24 46 46 44  32 0D 20 49 4E 59 0D 20  |JSR $FFD2. INY. |
00001BD0: 43 50 59 20 23 35 20 3B  47 4F 54 20 45 4D 20 41  |CPY #5 ;GOT EM A|
00001BE0: 4C 4C 3F 0D 20 42 4E 45  20 57 52 49 54 45 41 4C  |LL?. BNE WRITEAL|
00001BF0: 4C 53 45 4E 53 45 0D 20  4C 44 41 20 23 31 33 0D  |LSENSE. LDA #13.|
00001C00: 20 4A 4D 50 20 24 46 46  44 32 0D 3B 0D 57 52 49  | JMP $FFD2.;.WRI|
00001C10: 54 45 4F 55 54 41 4D 53  47 20 54 41 58 20 3B 47  |TEOUTAMSG TAX ;G|
00001C20: 45 54 20 49 4E 44 45 58  20 49 4E 54 4F 20 54 41  |ET INDEX INTO TA|
00001C30: 42 4C 45 0D 20 4C 44 41  20 4D 54 41 42 2C 58 0D  |BLE. LDA MTAB,X.|
00001C40: 20 53 54 41 20 4D 50 54  52 0D 20 4C 44 41 20 4D  | STA MPTR. LDA M|
00001C50: 54 41 42 2B 31 2C 58 0D  20 53 54 41 20 4D 50 54  |TAB+1,X. STA MPT|
00001C60: 52 2B 31 0D 20 4C 44 59  20 23 30 0D 57 52 49 54  |R+1. LDY #0.WRIT|
00001C70: 45 4D 53 47 4C 4F 4F 50  20 4C 44 41 20 57 52 49  |EMSGLOOP LDA WRI|
00001C80: 54 45 4D 53 47 4C 4F 4F  50 2C 59 0D 4D 50 54 52  |TEMSGLOOP,Y.MPTR|
00001C90: 20 3D 20 57 52 49 54 45  4D 53 47 4C 4F 4F 50 2B  | = WRITEMSGLOOP+|
00001CA0: 31 0D 20 42 45 51 20 45  4E 44 4F 46 4D 45 53 53  |1. BEQ ENDOFMESS|
00001CB0: 41 47 45 0D 20 4A 53 52  20 24 46 46 44 32 0D 20  |AGE. JSR $FFD2. |
00001CC0: 49 4E 59 0D 20 42 4E 45  20 57 52 49 54 45 4D 53  |INY. BNE WRITEMS|
00001CD0: 47 4C 4F 4F 50 0D 45 4E  44 4F 46 4D 45 53 53 41  |GLOOP.ENDOFMESSA|
00001CE0: 47 45 20 52 54 53 0D 3B  0D 52 45 53 45 54 46 4F  |GE RTS.;.RESETFO|
00001CF0: 52 52 45 54 52 59 20 4A  53 52 20 52 45 53 45 54  |RRETRY JSR RESET|
00001D00: 0D 53 45 54 55 50 44 43  42 20 4C 44 41 20 48 45  |.SETUPDCB LDA HE|
00001D10: 41 44 43 4F 55 4E 54 45  52 20 3B 53 45 54 20 48  |ADCOUNTER ;SET H|
00001D20: 45 41 44 20 4E 55 4D 42  45 52 0D 20 4A 53 52 20  |EAD NUMBER. JSR |
00001D30: 50 55 54 44 43 42 48 45  41 44 20 3B 50 55 54 20  |PUTDCBHEAD ;PUT |
00001D40: 48 45 41 44 20 23 20 49  4E 20 44 43 42 0D 20 4C  |HEAD # IN DCB. L|
00001D50: 44 41 20 43 59 4C 49 4E  44 45 52 43 4F 55 4E 54  |DA CYLINDERCOUNT|
00001D60: 52 2B 31 20 3B 47 45 54  20 43 59 4C 20 23 48 49  |R+1 ;GET CYL #HI|
00001D70: 0D 20 41 53 4C 20 41 20  3B 4D 4F 56 45 20 54 4F  |. ASL A ;MOVE TO|
00001D80: 20 48 49 47 48 20 42 49  54 53 0D 20 41 53 4C 20  | HIGH BITS. ASL |
00001D90: 41 0D 20 41 53 4C 20 41  0D 20 41 53 4C 20 41 0D  |A. ASL A. ASL A.|
00001DA0: 20 41 53 4C 20 41 0D 20  41 53 4C 20 41 0D 20 4F  | ASL A. ASL A. O|
00001DB0: 52 41 20 53 45 43 54 4F  52 43 4F 55 4E 54 45 52  |RA SECTORCOUNTER|
00001DC0: 0D 20 4A 53 52 20 50 55  54 44 43 42 4D 53 42 53  |. JSR PUTDCBMSBS|
00001DD0: 45 43 54 52 20 3B 4D 53  42 20 43 59 4C 20 41 4E  |ECTR ;MSB CYL AN|
00001DE0: 44 20 53 45 43 54 4F 52  0D 20 4C 44 41 20 43 59  |D SECTOR. LDA CY|
00001DF0: 4C 49 4E 44 45 52 43 4F  55 4E 54 52 20 3B 4C 53  |LINDERCOUNTR ;LS|
00001E00: 42 20 43 59 4C 0D 20 4A  53 52 20 50 55 54 44 43  |B CYL. JSR PUTDC|
00001E10: 42 43 59 4C 4C 53 42 0D  20 4C 44 41 20 23 31 20  |BCYLLSB. LDA #1 |
00001E20: 3B 53 45 54 20 4E 55 4D  20 42 4C 4F 43 4B 53 0D  |;SET NUM BLOCKS.|
00001E30: 20 4A 4D 50 20 50 55 54  44 43 42 4E 55 4D 53 45  | JMP PUTDCBNUMSE|
00001E40: 43 53 0D 3B 0D 4D 41 52  4B 42 41 44 53 45 43 54  |CS.;.MARKBADSECT|
00001E50: 4F 52 20 4A 53 52 20 47  45 54 44 43 42 48 45 41  |OR JSR GETDCBHEA|
00001E60: 44 0D 20 41 4E 44 20 23  24 30 46 20 3B 43 4C 45  |D. AND #$0F ;CLE|
00001E70: 41 52 20 44 52 49 56 45  20 4E 55 4D 42 45 52 0D  |AR DRIVE NUMBER.|
00001E80: 20 4A 53 52 20 50 55 54  42 41 44 53 45 43 54 4F  | JSR PUTBADSECTO|
00001E90: 52 0D 20 4A 53 52 20 47  45 54 44 43 42 53 45 43  |R. JSR GETDCBSEC|
00001EA0: 54 4F 52 0D 20 4A 53 52  20 50 55 54 42 41 44 53  |TOR. JSR PUTBADS|
00001EB0: 45 43 54 4F 52 0D 20 4A  53 52 20 47 45 54 44 43  |ECTOR. JSR GETDC|
00001EC0: 42 43 59 4C 4C 53 42 0D  20 4A 53 52 20 50 55 54  |BCYLLSB. JSR PUT|
00001ED0: 42 41 44 53 45 43 54 4F  52 0D 20 52 54 53 0D 50  |BADSECTOR. RTS.P|
00001EE0: 55 54 42 41 44 53 45 43  54 4F 52 20 53 54 41 20  |UTBADSECTOR STA |
00001EF0: 42 41 44 53 45 43 54 4F  52 53 0D 20 49 4E 43 20  |BADSECTORS. INC |
00001F00: 50 55 54 42 41 44 53 45  43 54 4F 52 2B 31 0D 20  |PUTBADSECTOR+1. |
00001F10: 42 4E 45 20 50 55 54 42  41 44 53 45 43 45 4E 44  |BNE PUTBADSECEND|
00001F20: 0D 20 49 4E 43 20 50 55  54 42 41 44 53 45 43 54  |. INC PUTBADSECT|
00001F30: 4F 52 2B 32 0D 20 44 45  43 20 42 41 44 53 45 43  |OR+2. DEC BADSEC|
00001F40: 54 4F 52 43 54 52 20 3B  42 41 43 4B 20 4F 46 46  |TORCTR ;BACK OFF|
00001F50: 20 55 53 45 44 20 53 50  41 43 45 0D 20 42 4E 45  | USED SPACE. BNE|
00001F60: 20 50 55 54 42 41 44 53  45 43 45 4E 44 0D 20 4C  | PUTBADSECEND. L|
00001F70: 44 41 20 23 3C 54 4F 4F  4D 41 4E 59 42 41 44 20  |DA #<TOOMANYBAD |
00001F80: 3B 54 4F 4F 20 4D 41 4E  59 20 42 41 44 20 53 45  |;TOO MANY BAD SE|
00001F90: 43 54 4F 52 53 0D 20 4A  53 52 20 57 52 49 54 45  |CTORS. JSR WRITE|
00001FA0: 4F 55 54 41 4D 53 47 0D  20 50 4C 41 20 3B 54 45  |OUTAMSG. PLA ;TE|
00001FB0: 52 4D 49 4E 41 54 45 20  4E 4F 57 21 0D 20 50 4C  |RMINATE NOW!. PL|
00001FC0: 41 20 3B 42 59 20 50 55  4C 4C 49 4E 47 20 4F 46  |A ;BY PULLING OF|
00001FD0: 46 20 54 48 45 20 52 45  54 55 52 4E 0D 20 50 4C  |F THE RETURN. PL|
00001FE0: 41 20 3B 54 57 49 43 45  0D 20 50 4C 41 0D 50 55  |A ;TWICE. PLA.PU|
00001FF0: 54 42 41 44 53 45 43 45  4E 44 20 52 54 53 0D 3B  |TBADSECEND RTS.;|
00002000: 0D 2E 4C 49 42 20 43 32  53 45 43 31 34 2E 53 52  |..LIB C2SEC14.SR|
00002010: 43 0D 3B 0D 3B 2B 2B 2B  20 4D 45 53 53 41 47 45  |C.;.;+++ MESSAGE|
00002020: 20 54 41 42 4C 45 20 2B  2B 2B 0D 4D 54 41 42 20  | TABLE +++.MTAB |
00002030: 3D 20 2A 0D 48 45 41 44  49 4E 47 4D 53 47 20 3D  |= *.HEADINGMSG =|
00002040: 20 2A 2D 4D 54 41 42 0D  20 2E 57 4F 52 20 48 45  | *-MTAB. .WOR HE|
00002050: 41 44 45 52 0D 52 45 53  45 54 45 52 52 4F 52 4D  |ADER.RESETERRORM|
00002060: 53 47 20 3D 20 2A 2D 4D  54 41 42 0D 20 2E 57 4F  |SG = *-MTAB. .WO|
00002070: 52 20 52 45 53 45 54 45  20 3B 45 52 52 4F 52 20  |R RESETE ;ERROR |
00002080: 4F 4E 20 52 45 53 45 54  0D 54 4F 4F 4D 41 4E 59  |ON RESET.TOOMANY|
00002090: 42 41 44 20 3D 20 2A 2D  4D 54 41 42 0D 20 2E 57  |BAD = *-MTAB. .W|
000020A0: 4F 52 20 54 4F 4F 4D 41  4E 59 42 41 44 4D 53 47  |OR TOOMANYBADMSG|
000020B0: 0D 4C 4F 57 4C 45 56 45  4C 4D 53 47 20 3D 20 2A  |.LOWLEVELMSG = *|
000020C0: 2D 4D 54 41 42 0D 20 2E  57 4F 52 20 4C 4F 57 4C  |-MTAB. .WOR LOWL|
000020D0: 56 4C 0D 4C 4F 57 4C 45  56 45 4C 45 52 52 4D 53  |VL.LOWLEVELERRMS|
000020E0: 47 20 3D 20 2A 2D 4D 54  41 42 0D 20 2E 57 4F 52  |G = *-MTAB. .WOR|
000020F0: 20 4C 4F 57 45 52 52 20  3B 45 52 52 4F 52 20 4F  | LOWERR ;ERROR O|
00002100: 4E 20 4C 4F 57 20 4C 45  56 45 4C 0D 57 52 49 54  |N LOW LEVEL.WRIT|
00002110: 45 45 52 52 4F 52 4D 53  47 20 3D 20 2A 2D 4D 54  |EERRORMSG = *-MT|
00002120: 41 42 0D 20 2E 57 4F 52  20 57 52 54 45 52 52 20  |AB. .WOR WRTERR |
00002130: 3B 57 52 49 54 45 20 45  52 52 4F 52 0D 52 44 45  |;WRITE ERROR.RDE|
00002140: 52 52 4F 52 4D 53 47 20  3D 20 2A 2D 4D 54 41 42  |RRORMSG = *-MTAB|
00002150: 0D 20 2E 57 4F 52 20 52  45 41 44 45 52 20 3B 52  |. .WOR READER ;R|
00002160: 45 41 44 20 45 52 52 4F  52 0D 45 4E 44 4F 46 4A  |EAD ERROR.ENDOFJ|
00002170: 4F 42 4D 53 47 20 3D 20  2A 2D 4D 54 41 42 0D 20  |OBMSG = *-MTAB. |
00002180: 2E 57 4F 52 20 46 49 4E  49 53 48 20 3B 45 4E 44  |.WOR FINISH ;END|
00002190: 20 4F 46 20 4A 4F 42 20  4D 53 47 0D 43 4F 4D 50  | OF JOB MSG.COMP|
000021A0: 41 52 45 45 52 52 4D 53  47 20 3D 20 2A 2D 4D 54  |AREERRMSG = *-MT|
000021B0: 41 42 0D 20 2E 57 4F 52  20 43 4F 4D 45 52 52 20  |AB. .WOR COMERR |
000021C0: 3B 43 4F 4D 50 41 52 45  20 45 52 52 4F 52 20 4D  |;COMPARE ERROR M|
000021D0: 53 47 0D 49 4E 54 45 4E  53 49 56 45 4D 53 47 20  |SG.INTENSIVEMSG |
000021E0: 3D 20 2A 2D 4D 54 41 42  0D 20 2E 57 4F 52 20 48  |= *-MTAB. .WOR H|
000021F0: 4F 57 4D 53 47 20 3B 57  48 41 54 20 4B 49 4E 44  |OWMSG ;WHAT KIND|
00002200: 20 4F 46 20 46 4F 52 4D  41 54 0D 4E 55 4D 43 59  | OF FORMAT.NUMCY|
00002210: 4C 53 4D 53 47 20 3D 20  2A 2D 4D 54 41 42 0D 20  |LSMSG = *-MTAB. |
00002220: 2E 57 4F 52 20 49 4E 50  55 54 4E 55 4D 43 59 4C  |.WOR INPUTNUMCYL|
00002230: 53 20 3B 54 4F 54 41 4C  20 4E 55 4D 42 45 52 20  |S ;TOTAL NUMBER |
00002240: 4F 46 20 43 59 4C 53 20  4D 53 47 0D 4E 55 4D 48  |OF CYLS MSG.NUMH|
00002250: 45 41 44 53 4D 53 47 20  3D 20 2A 2D 4D 54 41 42  |EADSMSG = *-MTAB|
00002260: 0D 20 2E 57 4F 52 20 49  4E 50 55 54 4E 55 4D 48  |. .WOR INPUTNUMH|
00002270: 45 41 44 53 0D 52 45 44  55 43 45 44 57 52 54 4D  |EADS.REDUCEDWRTM|
00002280: 53 47 20 3D 20 2A 2D 4D  54 41 42 0D 20 2E 57 4F  |SG = *-MTAB. .WO|
00002290: 52 20 49 4E 50 55 54 52  45 44 55 43 45 44 0D 50  |R INPUTREDUCED.P|
000022A0: 52 45 43 4F 4D 50 4D 53  47 20 3D 20 2A 2D 4D 54  |RECOMPMSG = *-MT|
000022B0: 41 42 0D 20 2E 57 4F 52  20 49 4E 50 55 54 50 52  |AB. .WOR INPUTPR|
000022C0: 45 43 4F 4D 50 0D 42 55  52 53 54 4C 45 4E 4D 53  |ECOMP.BURSTLENMS|
000022D0: 47 20 3D 20 2A 2D 4D 54  41 42 0D 20 2E 57 4F 52  |G = *-MTAB. .WOR|
000022E0: 20 49 4E 50 55 54 42 55  52 53 54 4C 45 4E 0D 53  | INPUTBURSTLEN.S|
000022F0: 54 45 50 52 41 54 45 4D  53 47 20 3D 20 2A 2D 4D  |TEPRATEMSG = *-M|
00002300: 54 41 42 0D 20 2E 57 4F  52 20 49 4E 50 55 54 53  |TAB. .WOR INPUTS|
00002310: 54 45 50 52 41 54 45 0D  3B 0D 48 45 41 44 45 52  |TEPRATE.;.HEADER|
00002320: 20 2E 42 59 54 20 31 34  37 2C 27 48 41 52 44 20  | .BYT 147,'HARD |
00002330: 44 49 53 4B 20 46 4F 52  4D 41 54 45 52 27 2C 31  |DISK FORMATER',1|
00002340: 33 2C 31 33 2C 30 0D 52  45 53 45 54 45 20 2E 42  |3,13,0.RESETE .B|
00002350: 59 54 20 31 33 2C 27 45  20 52 20 52 20 4F 20 52  |YT 13,'E R R O R|
00002360: 20 4F 4E 20 52 45 53 45  54 20 43 4F 4D 4D 41 4E  | ON RESET COMMAN|
00002370: 44 27 2C 31 33 2C 30 0D  4C 4F 57 4C 56 4C 20 2E  |D',13,0.LOWLVL .|
00002380: 42 59 54 20 31 33 2C 27  44 4F 20 4C 4F 57 20 4C  |BYT 13,'DO LOW L|
00002390: 45 56 45 4C 20 46 4F 52  4D 41 54 3F 20 27 0D 20  |EVEL FORMAT? '. |
000023A0: 2E 42 59 54 20 27 28 59  20 4F 52 20 4E 29 27 2C  |.BYT '(Y OR N)',|
000023B0: 31 33 2C 30 0D 4C 4F 57  45 52 52 20 2E 42 59 54  |13,0.LOWERR .BYT|
000023C0: 20 31 33 2C 27 45 20 52  20 52 20 4F 20 52 20 4F  | 13,'E R R O R O|
000023D0: 4E 20 4C 4F 57 20 4C 45  56 45 4C 27 2C 31 33 2C  |N LOW LEVEL',13,|
000023E0: 30 0D 57 52 54 45 52 52  20 2E 42 59 54 20 31 33  |0.WRTERR .BYT 13|
000023F0: 2C 27 57 52 49 54 45 20  45 52 52 4F 52 27 2C 31  |,'WRITE ERROR',1|
00002400: 33 2C 30 0D 54 4F 4F 4D  41 4E 59 42 41 44 4D 53  |3,0.TOOMANYBADMS|
00002410: 47 20 2E 42 59 54 20 31  33 2C 27 54 4F 4F 20 4D  |G .BYT 13,'TOO M|
00002420: 41 4E 59 20 42 41 44 20  53 45 43 54 4F 52 53 20  |ANY BAD SECTORS |
00002430: 27 0D 20 2E 42 59 54 20  27 46 4F 52 4D 41 54 20  |'. .BYT 'FORMAT |
00002440: 54 45 52 4D 49 4E 41 54  45 44 21 21 21 27 2C 31  |TERMINATED!!!',1|
00002450: 33 2C 30 0D 52 45 41 44  45 52 20 2E 42 59 54 20  |3,0.READER .BYT |
00002460: 31 33 2C 27 52 45 41 44  20 45 52 52 4F 52 27 2C  |13,'READ ERROR',|
00002470: 31 33 2C 30 0D 46 49 4E  49 53 48 20 2E 42 59 54  |13,0.FINISH .BYT|
00002480: 20 31 33 2C 27 45 4E 44  20 4F 46 20 46 4F 52 4D  | 13,'END OF FORM|
00002490: 41 54 27 2C 31 33 2C 30  0D 43 4F 4D 45 52 52 20  |AT',13,0.COMERR |
000024A0: 2E 42 59 54 20 31 33 2C  27 42 4C 4F 43 4B 20 43  |.BYT 13,'BLOCK C|
000024B0: 4F 4D 50 41 52 45 20 45  52 52 4F 52 27 2C 31 33  |OMPARE ERROR',13|
000024C0: 2C 30 0D 48 4F 57 4D 53  47 20 2E 42 59 54 20 31  |,0.HOWMSG .BYT 1|
000024D0: 33 2C 31 33 2C 27 44 4F  20 49 4E 54 45 4E 53 49  |3,13,'DO INTENSI|
000024E0: 56 45 20 46 4F 52 4D 41  54 3F 27 0D 20 2E 42 59  |VE FORMAT?'. .BY|
000024F0: 54 20 27 20 3C 59 20 4F  52 20 4E 3E 20 27 2C 30  |T ' <Y OR N> ',0|
00002500: 0D 49 4E 50 55 54 4E 55  4D 43 59 4C 53 20 2E 42  |.INPUTNUMCYLS .B|
00002510: 59 54 20 31 33 2C 27 45  4E 54 45 52 20 54 4F 54  |YT 13,'ENTER TOT|
00002520: 41 4C 20 4E 55 4D 42 45  52 20 4F 46 27 0D 20 2E  |AL NUMBER OF'. .|
00002530: 42 59 54 20 27 20 43 59  4C 49 4E 44 45 52 53 20  |BYT ' CYLINDERS |
00002540: 27 2C 30 0D 49 4E 50 55  54 4E 55 4D 48 45 41 44  |',0.INPUTNUMHEAD|
00002550: 53 20 2E 42 59 54 20 31  33 2C 27 45 4E 54 45 52  |S .BYT 13,'ENTER|
00002560: 20 4E 55 4D 42 45 52 20  4F 46 20 48 45 41 44 53  | NUMBER OF HEADS|
00002570: 20 27 2C 30 0D 49 4E 50  55 54 50 52 45 43 4F 4D  | ',0.INPUTPRECOM|
00002580: 50 20 2E 42 59 54 20 31  33 2C 27 43 59 4C 49 4E  |P .BYT 13,'CYLIN|
00002590: 44 45 52 20 4E 55 4D 42  45 52 20 27 0D 20 2E 42  |DER NUMBER '. .B|
000025A0: 59 54 20 27 46 4F 52 20  53 54 41 52 54 20 50 52  |YT 'FOR START PR|
000025B0: 45 43 4F 4D 50 20 27 2C  30 0D 49 4E 50 55 54 52  |ECOMP ',0.INPUTR|
000025C0: 45 44 55 43 45 44 20 2E  42 59 54 20 31 33 2C 27  |EDUCED .BYT 13,'|
000025D0: 43 59 4C 49 4E 44 45 52  20 4E 55 4D 42 45 52 20  |CYLINDER NUMBER |
000025E0: 27 0D 20 2E 42 59 54 20  27 46 4F 52 20 52 45 44  |'. .BYT 'FOR RED|
000025F0: 55 43 45 44 20 57 52 49  54 45 20 43 55 52 52 45  |UCED WRITE CURRE|
00002600: 4E 54 20 27 2C 30 0D 49  4E 50 55 54 42 55 52 53  |NT ',0.INPUTBURS|
00002610: 54 4C 45 4E 20 2E 42 59  54 20 31 33 2C 27 4D 41  |TLEN .BYT 13,'MA|
00002620: 58 20 43 4F 52 52 45 43  54 41 42 4C 45 20 45 52  |X CORRECTABLE ER|
00002630: 52 4F 52 20 27 0D 20 2E  42 59 54 20 27 42 55 52  |ROR '. .BYT 'BUR|
00002640: 53 54 20 4C 45 4E 47 54  48 20 28 35 20 2D 20 31  |ST LENGTH (5 - 1|
00002650: 31 29 20 27 2C 30 0D 49  4E 50 55 54 53 54 45 50  |1) ',0.INPUTSTEP|
00002660: 52 41 54 45 20 2E 42 59  54 20 31 33 2C 27 53 54  |RATE .BYT 13,'ST|
00002670: 45 50 20 52 41 54 45 20  27 2C 30 0D 49 4E 54 45  |EP RATE ',0.INTE|
00002680: 4E 53 49 56 45 46 4C 41  47 20 2E 42 59 54 20 30  |NSIVEFLAG .BYT 0|
00002690: 20 3B 49 4E 54 45 4E 53  45 20 46 4C 41 47 0D 48  | ;INTENSE FLAG.H|
000026A0: 45 41 44 43 4F 55 4E 54  45 52 20 2E 42 59 54 20  |EADCOUNTER .BYT |
000026B0: 30 20 3B 43 4F 55 4E 54  20 55 50 20 48 45 41 44  |0 ;COUNT UP HEAD|
000026C0: 0D 43 59 4C 49 4E 44 45  52 43 4F 55 4E 54 52 20  |.CYLINDERCOUNTR |
000026D0: 2E 57 4F 52 20 30 20 3B  43 4F 55 4E 54 20 55 50  |.WOR 0 ;COUNT UP|
000026E0: 20 43 59 4C 49 4E 44 45  52 53 0D 53 45 43 54 4F  | CYLINDERS.SECTO|
000026F0: 52 43 4F 55 4E 54 45 52  20 2E 42 59 54 20 30 20  |RCOUNTER .BYT 0 |
00002700: 3B 53 45 43 54 4F 52 20  43 4F 55 4E 54 45 52 0D  |;SECTOR COUNTER.|
00002710: 52 44 52 45 54 52 59 43  4F 55 4E 54 45 52 20 2E  |RDRETRYCOUNTER .|
00002720: 42 59 54 20 30 0D 57 52  54 52 45 54 52 59 43 4F  |BYT 0.WRTRETRYCO|
00002730: 55 4E 54 52 20 2E 42 59  54 20 30 0D 42 41 44 53  |UNTR .BYT 0.BADS|
00002740: 45 43 54 4F 52 43 54 52  20 2E 42 59 54 20 30 20  |ECTORCTR .BYT 0 |
00002750: 3B 43 4F 55 4E 54 45 52  20 46 4F 52 20 53 45 43  |;COUNTER FOR SEC|
00002760: 54 4F 52 53 20 53 45 43  54 4F 52 0D 45 52 52 4F  |TORS SECTOR.ERRO|
00002770: 52 43 4F 44 45 20 2E 42  59 54 20 30 0D 43 55 52  |RCODE .BYT 0.CUR|
00002780: 52 45 4E 54 53 45 4E 53  45 20 2E 42 59 54 20 30  |RENTSENSE .BYT 0|
00002790: 2C 30 2C 30 2C 30 0D 3B  2B 20 53 54 4F 52 41 47  |,0,0,0.;+ STORAG|
000027A0: 45 20 41 52 45 41 0D 42  55 46 46 45 52 20 2E 57  |E AREA.BUFFER .W|
000027B0: 4F 52 20 30 0D 20 2E 42  59 54 20 27 43 41 4C 43  |OR 0. .BYT 'CALC|
000027C0: 55 4C 41 54 45 44 20 56  41 4C 55 45 53 27 0D 54  |ULATED VALUES'.T|
000027D0: 4F 54 41 4C 53 45 43 54  4F 52 53 20 2E 42 59 54  |OTALSECTORS .BYT|
000027E0: 20 30 2C 30 2C 30 20 3B  54 4F 54 41 4C 20 53 45  | 0,0,0 ;TOTAL SE|
000027F0: 43 54 4F 52 53 0D 4C 41  53 54 53 41 54 53 45 43  |CTORS.LASTSATSEC|
00002800: 54 4F 52 20 2E 42 59 54  20 30 20 3B 4C 41 53 54  |TOR .BYT 0 ;LAST|
00002810: 20 53 41 54 20 53 45 43  54 4F 52 20 4E 55 4D 42  | SAT SECTOR NUMB|
00002820: 45 52 0D 4C 41 53 54 53  41 54 42 59 54 45 20 2E  |ER.LASTSATBYTE .|
00002830: 57 4F 52 20 30 20 3B 42  59 54 45 20 4F 46 46 53  |WOR 0 ;BYTE OFFS|
00002840: 45 54 20 4F 46 20 4C 41  53 54 20 53 41 54 20 42  |ET OF LAST SAT B|
00002850: 59 54 45 0D 4C 41 53 54  53 41 54 42 49 54 20 2E  |YTE.LASTSATBIT .|
00002860: 42 59 54 20 30 20 3B 42  49 54 20 4F 46 20 4C 41  |BYT 0 ;BIT OF LA|
00002870: 53 54 20 42 59 54 45 0D  53 45 43 54 4F 52 50 45  |ST BYTE.SECTORPE|
00002880: 52 43 59 4C 20 2E 57 4F  52 20 30 20 3B 4E 55 4D  |RCYL .WOR 0 ;NUM|
00002890: 42 45 52 20 53 45 43 54  4F 52 53 2F 43 59 4C 0D  |BER SECTORS/CYL.|
000028A0: 4E 55 4D 42 45 52 4F 46  48 45 41 44 53 20 2E 42  |NUMBEROFHEADS .B|
000028B0: 59 54 20 30 20 3B 4E 55  4D 42 45 52 20 48 45 41  |YT 0 ;NUMBER HEA|
000028C0: 44 53 0D 4E 55 4D 43 59  4C 49 4E 44 45 52 53 20  |DS.NUMCYLINDERS |
000028D0: 2E 57 4F 52 20 30 20 3B  4E 55 4D 42 45 52 20 43  |.WOR 0 ;NUMBER C|
000028E0: 59 4C 49 4E 44 45 52 53  0D 2A 20 3D 20 42 55 46  |YLINDERS.* = BUF|
000028F0: 46 45 52 2B 35 31 32 0D  52 44 42 55 46 20 3D 20  |FER+512.RDBUF = |
00002900: 2A 0D 2A 20 3D 20 52 44  42 55 46 2B 35 31 32 0D  |*.* = RDBUF+512.|
00002910: 57 52 54 42 55 46 20 3D  20 2A 0D 2A 20 3D 20 57  |WRTBUF = *.* = W|
00002920: 52 54 42 55 46 2B 35 31  32 0D 42 41 44 53 45 43  |RTBUF+512.BADSEC|
00002930: 54 4F 52 53 20 3D 20 2A  0D 2A 20 3D 20 42 41 44  |TORS = *.* = BAD|
00002940: 53 45 43 54 4F 52 53 2B  31 30 32 34 0D 2E 45 4E  |SECTORS+1024..EN|
00002950: 44 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |D...............|
00002960: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00002970: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
;BPUT"FORMAT.SRC".;RPUT"FORMAT.SRC".;+++
++++++++++++++++++++++++++++++.;+  INITI
ALIZE THE HARD DISK     +.;+            
                   +.;+ INTERFACES WITH 
THE BIOS FOR  +.;+ HARD DRIVE....       
         +.;++++++++++++++++++++++++++++
+++++.;.READ = $7000 ;EQUATES FOR BIOS.W
RITE = READ+3.RESET = READ+6.SETPRM = RE
AD+9.RECAL = READ+12.SEEK = READ+15.TDRE
DY = READ+18 ;TEST DRIVE READY.SBDIAG = 
READ+21 ;SECTOR BUF DIAG.DRDIAG = READ+2
4 ;DRIVE DIAGS.CTDIAG = READ+27 ;CONTROL
LER DIAGS.FBADTK = READ+30 ;FORMAT BAD T
RK.FMTTRK = READ+33 ;FORMAT TRACK.FMTDRV
 = READ+36 ;FORMAT DRIVE.RETPRM = READ+3
9 ;RETURN PARMS. ;INPUT - A = DRIVE NUMB
ER. ;OUTPUT - A = # HEADS. ;         X =
 MSB #CYLS. ;         Y = LSB #CYLS.RDLO
NG = READ+42.READSB = READ+45.WRLONG = R
EAD+48.WRITSB = READ+51.VERIFY = READ+54
.DCBPTR = READ+57 ;POINTER TO DCB.* = $6
000.START = * ;BEGIN FORMAT. LDA #0 ;CLE
AR THE BUFFERS. TAY.CLEARBADSECTOR STA B
ADSECTORS,Y. STA BADSECTORS+256,Y. STA B
ADSECTORS+512,Y. STA BADSECTORS+768,Y. S
TA RDBUF,Y. STA RDBUF+256,Y. STA WRTBUF,
Y. STA WRTBUF+256,Y. INY. BNE CLEARBADSE
CTOR. LDA #4 ;2 TIMES # SECTORS FOR BAD 
SECTORS. STA BADSECTORCTR. LDA #<HEADING
MSG ;CLEAR SCREEN,ETC. JSR WRITEOUTAMSG.
 LDA DCBPTR. STA PTR1. STA PTRX. STA DCB
PTRFORGET. LDA DCBPTR+1. STA PTR2 ;ADDRE
SS THE DCB. STA PTRX+1. STA DCBPTRFORGET
+1. LDA #0 ;SET UP FOR DRIVE 0. JSR PUTD
CBDRIVE ;SET UP DRIVE 0. JSR RESET. BCC 
RESETISOK ;GO IF NO ERROR. LDA #<RESETER
RORMSG ;ISSUE MSG. JSR WRITEOUTAMSG. BRK
.RESETISOK LDA #0 ;RESTORE DRIVE 0. JSR 
PUTDCBDRIVE. JSR PUTDCBMSBSECTR ;SET SEC
TOR. JSR PUTDCBCYLLSB ;AND CYL. LDA #11 
;INTERLEAVE, TEST SHOWS 11 GOOD. JSR PUT
DCBNUMSECS. LDA #<BUFFER. JSR PUTDCBLOBU
FPTR. LDA #>BUFFER. JSR PUTDCBHIBUFPTR. 
JSR RETPRM ;GET THE PARMS. DEY ;BACK DOW
N CYLINDERS BY 1. BNE SAVETHEPARMS. DEX.
SAVETHEPARMS STX CYLMSB. STX NUMCYLINDER
S ;SAVE. STY NUMCYLINDERS+1. STA NUMBERO
FHEADS. STY CYLLSB. LDA #16 ;SET SECTOR 
NUMBER TO MAX. STA SECTOR. JSR CYLINDER2
SECTR ;CONVERT. LDX SECNUM ;MOVE AND PRI
ME. LDA SECNUM+1 ;FOR SECTOR TO SAT. LDY
 SECNUM+2 ;CONVERSION. STX TOTALSECTORS.
 STA TOTALSECTORS+1. STY TOTALSECTORS+2.
 JSR SECTOR2SAT ;GO CONVERT. LDA SATSEC 
;SAVE FOR LATER. STA LASTSATSECTOR. LDA 
SATBYT. STA LASTSATBYTE. LDA SATBYT+1. S
TA LASTSATBYTE+1. LDA SATBIT. STA LASTSA
TBIT.CHECKLOWLEVEL LDA #<LOWLEVELMSG ;AS
K ABOUT LOLEVEL. JSR WRITEOUTAMSG.LOWLEV
ELANSWER JSR $FFE4. JSR $FFD2. CMP #'N' 
;NO LOW LEVEL. BEQ SETUPCOUNTERS. CMP #'
Y' ;DO IT?. BNE LOWLEVELANSWER. JSR FMTD
RV ;LOW LEVEL IT. BCC SETUPCOUNTERS. LDA
 #<LOWLEVELERRMSG ;ERROR MSG. JSR WRITEO
UTAMSG. BRK.SETUPCOUNTERS = *. LDA #0. S
TA CYLINDERCOUNTR ;CLEAR COUNTERS. STA C
YLINDERCOUNTR+1. STA HEADCOUNTER. STA SE
CTORCOUNTER. LDX #0.FILLBUFFER TXA. STA 
WRTBUF,X. STA WRTBUF+256,X. INX. BNE FIL
LBUFFER. LDA #147. JSR $FFD2. LDA #<INTE
NSIVEMSG ;WHAT KIND?. JSR WRITEOUTAMSG.I
NTENSEANSWER JSR $FFE4 ;GET ANSWER. CMP 
#'N' ;NOT INTENSIVE. BEQ NOTINTENSIVE. C
MP #'Y' ;YES?. BNE INTENSEANSWER. LDX #0
. .BYT $2C.NOTINTENSIVE LDX #$FF. STX IN
TENSIVEFLAG ;SET MODE FLAG. JSR $FFD2.FO
RMATDRIVE LDA #5 ;CLEAR RETRY COUNTER. S
TA WRTRETRYCOUNTR. STA RDRETRYCOUNTER. L
DA CYLINDERCOUNTR+1. JSR HEXTOASCII ;MAK
E PRINTABLE. STA $041E. STX $041F. LDA C
YLINDERCOUNTR. JSR HEXTOASCII. STA $0420
. STX $0421. LDA #32. STA $0422. LDA HEA
DCOUNTER. JSR HEXTOASCII. STA $0423. STX
 $0424. LDA #32. STA $0425. LDA SECTORCO
UNTER. JSR HEXTOASCII. STA $0426. STX $0
427. JSR SETUPDCB ;SET UP DCB. LDA INTEN
SIVEFLAG ;CHECK FOR INTENSE FORMAT. BNE 
BYPASSWRITE ;BYPASS WRITE. LDA #<WRTBUF.
 JSR PUTDCBLOBUFPTR. LDA #>WRTBUF. JSR P
UTDCBHIBUFPTR.WRITEASECTOR JSR WRITE ;GO
 WRITE A BLOCK. BCC BYPASSWRITE. JSR REA
DTHESENSE ;RETRIEVE SENSE. JSR WRITEOUTS
ENSE. JSR RESETFORRETRY ; SET UP FOR RET
RY. DEC WRTRETRYCOUNTR. BNE WRITEASECTOR
. LDA #<WRITEERRORMSG ;WRITE ERROR. JSR 
WRITEOUTAMSG. JSR MARKBADSECTOR ;MARK AS
 BAD. JMP ONTONEXTSECTOR ;GO TO NEXT SEC
TOR.BYPASSWRITE LDA #<RDBUF. JSR PUTDCBL
OBUFPTR. LDA #>RDBUF. JSR PUTDCBHIBUFPTR
.READASECTOR JSR READ. BCC ISITINTENSIVE
. JSR READTHESENSE ;RETRIEVE SENSE. JSR 
WRITEOUTSENSE. LDA #<RDERRORMSG ;READ ER
ROR.READRETRY PHA ;SAVE MSG NUMBER. JSR 
RESETFORRETRY ;SET UP FOR RETRY. PLA ;RE
TRIEVE MSG NUMBER. DEC RDRETRYCOUNTER ;C
HECK FOR MAX NUM. BNE READASECTOR. JSR W
RITEOUTAMSG. JSR MARKBADSECTOR. JMP ONTO
NEXTSECTOR.ISITINTENSIVE LDA INTENSIVEFL
AG ;CHECK FOR INSTENSE. BNE ONTONEXTSECT
OR ;BYPASS COMPARE. LDY #0 ;SET UP FOR C
OMPARE.COMPARESECTORS LDA WRTBUF,Y. CMP 
RDBUF,Y. BNE BADCOMPARE. LDA WRTBUF+256,
Y. CMP RDBUF+256,Y. BEQ COMPARENEXT.BADC
OMPARE LDA #<COMPAREERRMSG. BNE READRETR
Y.COMPARENEXT INY. BNE COMPARESECTORS.ON
TONEXTSECTOR LDX SECTORCOUNTER ;CHECK SE
CTOR. INX. CPX #17. BNE BUMPTHEHEAD. LDX
 #0.BUMPTHEHEAD STX SECTORCOUNTER ;SAVE 
SECTOR. BNE GOTNEWADDRESS ;GO ON IF BELO
W. LDX HEADCOUNTER ;BUMP TO NEXT HEAD. I
NX. CPX NUMBEROFHEADS ;AT MAX?. BNE SAVE
HEADCOUNT. LDX #0.SAVEHEADCOUNT STX HEAD
COUNTER. BNE GOTNEWADDRESS. LDA $DC0B ;G
ET HRS STOP CLOCK. LDA $DC09 ;GET SECOND
S. JSR HEXTOASCII. STA $410. STX $411. L
DA #':'. STA $412. LDA $DC08. JSR HEXTOA
SCII. STX $0413. STA $0414. LDA $DC0F. A
ND #$7F. STA $DC0F. LDA #$00. LDX #4.SET
TIMETOZERO STA $DC08,X. DEX. BPL SETTIME
TOZERO. LDX CYLINDERCOUNTR ;CHECK FOR EN
D. CPX NUMCYLINDERS. BNE BUMPCYLINDERLO.
 LDX CYLINDERCOUNTR+1. CPX NUMCYLINDERS+
1. BEQ ENDOFFORMAT.BUMPCYLINDERLO INC CY
LINDERCOUNTR ;BUMP BY ONE. BEQ BUMPCYLIN
DERHI.GOTNEWADDRESS JMP FORMATDRIVE.BUMP
CYLINDERHI INC CYLINDERCOUNTR+1. JMP FOR
MATDRIVE.ENDOFFORMAT LDA #<ENDOFJOBMSG. 
JSR WRITEOUTAMSG. BRK.;.;+++++++++++++++
++++++++++++++++++.;+     SET DCB FIELD 
            +.;+                        
       +.;+ INPUT  - A = BYTE TO PUT    
  +.;+          X = OFFSET IN DCB    +.;
+++++++++++++++++++++++++++++++++.;.PUTD
CBCOMMAND LDX #0 ;OFFSET 0. .BYT $2C ;BI
T.PUTDCBHEAD = * ;SAME AS PUT DRIVE.PUTD
CBDRIVE LDX #1 ;OFFSET 1. .BYT $2C ;BIT.
PUTDCBMSBSECTR LDX #2 ;OFFSET 2. .BYT $2
C ;BIT.PUTDCBCYLLSB LDX #3 ;OFFSET 3. .B
YT $2C ;BIT.PUTDCBNUMSECS LDX #4 ;OFFSET
 4. .BYT $2C ;BIT.PUTDCBSTEP LDX #5 ;OFF
SET 5. .BYT $2C ;BIT.PUTDCBLOBUFPTR LDX 
#6 ;OFFSET 6. .BYT $2C ;BIT.PUTDCBHIBUFP
TR LDX #7 ;OFFSET 7.PUTDCB STA PUTDCB,X.
PTR1 = PUTDCB+1.PTR2 = PUTDCB+2. RTS ; S
HORT AND SWEET??.;.READTHESENSE LDY #12 
;OFFSET TO SENSE. STA ERRORCODE ;SAVE ER
ROR CODE. LDX #0.GETALLTHESENSE LDA GETA
LLTHESENSE,Y.PTRX = GETALLTHESENSE+1. ST
A CURRENTSENSE,X ;PUT IN BUFFER. INX. IN
Y. CPX #4. BNE GETALLTHESENSE. RTS.;.GET
DCBCOMMAND LDY #0. .BYT $2C.GETDCBHEAD L
DY #1. .BYT $2C.GETDCBSECTOR LDY #2. .BY
T $2C.GETDCBCYLLSB LDY #3.;.GETDCBINFO L
DA GETDCBINFO,Y ;Y HAS OFFSET.DCBPTRFORG
ET = GETDCBINFO+1. RTS.;.;.WRITEOUTHEX P
HA. AND #$F0 ;HIGH NYBLE FIRST. LSR A. L
SR A. LSR A. LSR A. JSR ISITATHRUF. PLA.
 AND #$0F.ISITATHRUF CMP #$0A. BCC ADDAS
CIIZERO. ADC #6 ;ADD SEVEN.ADDASCIIZERO 
ADC #$30. JMP $FFD2.HEXTOASCII PHA. AND 
#$0F ;GET LOW NYBLE. JSR BIGGERTHAN9. TA
X. PLA. AND #$F0 ;NOW HI NYBLE. LSR A. L
SR A. LSR A. LSR A.BIGGERTHAN9 CMP #$0A.
 BCC ADDAZERO. SBC #9. RTS. ADC #6 ;ADD 
SEVEN.ADDAZERO ADC #$30. RTS.;.WRITEOUTS
ENSE LDY #0.WRITEALLSENSE LDA ERRORCODE,
Y ;GET ERRORCODE AND SENSE. JSR WRITEOUT
HEX ;WRITE IT. LDA #32. JSR $FFD2. INY. 
CPY #5 ;GOT EM ALL?. BNE WRITEALLSENSE. 
LDA #13. JMP $FFD2.;.WRITEOUTAMSG TAX ;G
ET INDEX INTO TABLE. LDA MTAB,X. STA MPT
R. LDA MTAB+1,X. STA MPTR+1. LDY #0.WRIT
EMSGLOOP LDA WRITEMSGLOOP,Y.MPTR = WRITE
MSGLOOP+1. BEQ ENDOFMESSAGE. JSR $FFD2. 
INY. BNE WRITEMSGLOOP.ENDOFMESSAGE RTS.;
.RESETFORRETRY JSR RESET.SETUPDCB LDA HE
ADCOUNTER ;SET HEAD NUMBER. JSR PUTDCBHE
AD ;PUT HEAD # IN DCB. LDA CYLINDERCOUNT
R+1 ;GET CYL #HI. ASL A ;MOVE TO HIGH BI
TS. ASL A. ASL A. ASL A. ASL A. ASL A. O
RA SECTORCOUNTER. JSR PUTDCBMSBSECTR ;MS
B CYL AND SECTOR. LDA CYLINDERCOUNTR ;LS
B CYL. JSR PUTDCBCYLLSB. LDA #1 ;SET NUM
 BLOCKS. JMP PUTDCBNUMSECS.;.MARKBADSECT
OR JSR GETDCBHEAD. AND #$0F ;CLEAR DRIVE
 NUMBER. JSR PUTBADSECTOR. JSR GETDCBSEC
TOR. JSR PUTBADSECTOR. JSR GETDCBCYLLSB.
 JSR PUTBADSECTOR. RTS.PUTBADSECTOR STA 
BADSECTORS. INC PUTBADSECTOR+1. BNE PUTB
ADSECEND. INC PUTBADSECTOR+2. DEC BADSEC
TORCTR ;BACK OFF USED SPACE. BNE PUTBADS
ECEND. LDA #<TOOMANYBAD ;TOO MANY BAD SE
CTORS. JSR WRITEOUTAMSG. PLA ;TERMINATE 
NOW!. PLA ;BY PULLING OFF THE RETURN. PL
A ;TWICE. PLA.PUTBADSECEND RTS.;..LIB C2
SEC14.SRC.;.;+++ MESSAGE TABLE +++.MTAB 
= *.HEADINGMSG = *-MTAB. .WOR HEADER.RES
ETERRORMSG = *-MTAB. .WOR RESETE ;ERROR 
ON RESET.TOOMANYBAD = *-MTAB. .WOR TOOMA
NYBADMSG.LOWLEVELMSG = *-MTAB. .WOR LOWL
VL.LOWLEVELERRMSG = *-MTAB. .WOR LOWERR 
;ERROR ON LOW LEVEL.WRITEERRORMSG = *-MT
AB. .WOR WRTERR ;WRITE ERROR.RDERRORMSG 
= *-MTAB. .WOR READER ;READ ERROR.ENDOFJ
OBMSG = *-MTAB. .WOR FINISH ;END OF JOB 
MSG.COMPAREERRMSG = *-MTAB. .WOR COMERR 
;COMPARE ERROR MSG.INTENSIVEMSG = *-MTAB
. .WOR HOWMSG ;WHAT KIND OF FORMAT.NUMCY
LSMSG = *-MTAB. .WOR INPUTNUMCYLS ;TOTAL
 NUMBER OF CYLS MSG.NUMHEADSMSG = *-MTAB
. .WOR INPUTNUMHEADS.REDUCEDWRTMSG = *-M
TAB. .WOR INPUTREDUCED.PRECOMPMSG = *-MT
AB. .WOR INPUTPRECOMP.BURSTLENMSG = *-MT
AB. .WOR INPUTBURSTLEN.STEPRATEMSG = *-M
TAB. .WOR INPUTSTEPRATE.;.HEADER .BYT 14
7,'HARD DISK FORMATER',13,13,0.RESETE .B
YT 13,'E R R O R ON RESET COMMAND',13,0.
LOWLVL .BYT 13,'DO LOW LEVEL FORMAT? '. 
.BYT '(Y OR N)',13,0.LOWERR .BYT 13,'E R
 R O R ON LOW LEVEL',13,0.WRTERR .BYT 13
,'WRITE ERROR',13,0.TOOMANYBADMSG .BYT 1
3,'TOO MANY BAD SECTORS '. .BYT 'FORMAT 
TERMINATED!!!',13,0.READER .BYT 13,'READ
 ERROR',13,0.FINISH .BYT 13,'END OF FORM
AT',13,0.COMERR .BYT 13,'BLOCK COMPARE E
RROR',13,0.HOWMSG .BYT 13,13,'DO INTENSI
VE FORMAT?'. .BYT ' <Y OR N> ',0.INPUTNU
MCYLS .BYT 13,'ENTER TOTAL NUMBER OF'. .
BYT ' CYLINDERS ',0.INPUTNUMHEADS .BYT 1
3,'ENTER NUMBER OF HEADS ',0.INPUTPRECOM
P .BYT 13,'CYLINDER NUMBER '. .BYT 'FOR 
START PRECOMP ',0.INPUTREDUCED .BYT 13,'
CYLINDER NUMBER '. .BYT 'FOR REDUCED WRI
TE CURRENT ',0.INPUTBURSTLEN .BYT 13,'MA
X CORRECTABLE ERROR '. .BYT 'BURST LENGT
H (5 - 11) ',0.INPUTSTEPRATE .BYT 13,'ST
EP RATE ',0.INTENSIVEFLAG .BYT 0 ;INTENS
E FLAG.HEADCOUNTER .BYT 0 ;COUNT UP HEAD
.CYLINDERCOUNTR .WOR 0 ;COUNT UP CYLINDE
RS.SECTORCOUNTER .BYT 0 ;SECTOR COUNTER.
RDRETRYCOUNTER .BYT 0.WRTRETRYCOUNTR .BY
T 0.BADSECTORCTR .BYT 0 ;COUNTER FOR SEC
TORS SECTOR.ERRORCODE .BYT 0.CURRENTSENS
E .BYT 0,0,0,0.;+ STORAGE AREA.BUFFER .W
OR 0. .BYT 'CALCULATED VALUES'.TOTALSECT
ORS .BYT 0,0,0 ;TOTAL SECTORS.LASTSATSEC
TOR .BYT 0 ;LAST SAT SECTOR NUMBER.LASTS
ATBYTE .WOR 0 ;BYTE OFFSET OF LAST SAT B
YTE.LASTSATBIT .BYT 0 ;BIT OF LAST BYTE.
SECTORPERCYL .WOR 0 ;NUMBER SECTORS/CYL.
NUMBEROFHEADS .BYT 0 ;NUMBER HEADS.NUMCY
LINDERS .WOR 0 ;NUMBER CYLINDERS.* = BUF
FER+512.RDBUF = *.* = RDBUF+512.WRTBUF =
 *.* = WRTBUF+512.BADSECTORS = *.* = BAD
SECTORS+1024..END.......................
........................
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL