MONITOR DYNAMICS, INC SPECIFICATION HDC-1013 SERIES HARD DISK CONTROLLER FOR IEEE-696 MICROCOMPUTERS THE MONITOR DYNAMICS, INC. HDC-1013 SERIES HARD DISK CONTROLLER IS DESIGNED TO INTERFACE MOST WINCHESTER TECHNOLOGY HARD DISK DRIVES TO THE IEEE-696 (S-100) MICROCOMPUTER BUS. THE CONTROLLER SUPPORTS THREE COMMON DRIVE INTERFACES, ST506, SA1000, AND SA4000. FOR THE ST506 AND SA1000 INTERFACES THE CONTROLLER UTILIZES A PLUG-ON DATA SEPARATOR. THE CONTROLLER OCCUPIES TWO SLOTS OF AN S-100 MOTHERBOARD (.75 INCH SPACING) IF THE PLUG-ON DATA SEPARATOR IS BEING USED. THE CONTROLLER WILL SUPPORT 4096 CYLINDERS AND 16 HEADS. IT IS SOFT SECTORED WITH SECTOR SIZES OF 256, 512, & 1024 BYTES/SECTOR. THE CONTROLLER IS A COMMAND AND RESPONSE PORT I/O DEVICE. I/O: THE CONTROLLER USES 4 CONSECUTIVE PORT ADDRESSES FOR I/O: READ COMMANDS WRITE COMMANDS PORT 0 READ STATUS REG WRITE COMMAND REG PORT 1 NOT USED WRITE DATA BUFFER REG PORT 2 READ DATA BUFFER REG RESET BUFFER ADDRESS COUNTER/ SET OR CLEAR INTERRUPT MASK/ ENABLE CONTOLLER PORT 3 READ BUSY/READY FLAGS RESET CONTROLLER COMMANDS: THE CONTROLLER WILL RESPOND TO THE FOLLOWING COMMANDS: COMMAND CODES (BINARY) ACTION RESPONSE ------------- ------ -------- 01SSSSSS SETS SECTOR 1-63 NONE MUST BE FOLLOWED (AFTER BUSY IS FALSE) BY CCCCCCCC CYLINDER LSB (BITS 0-7) NONE AND HHHHCCCC HEAD AND CYL MSB (BITS 8-11) NONE 00010000 DESELECTS ALL DRIVES STATUS BYTE 00010001 SELECTS DRIVE 1 STATUS BYTE 00010010 SELECTS DRIVE 2 STATUS BYTE 00100000 RESTORE DRIVE STATUS BYTE 00100001 SEEK CYLINDER STATUS BYTE 00100010 WRITE SECTOR(W/IMPLIED SEEK) STATUS BYTE 00100011 READ SECTOR(W/IMPLIED SEEK) STATUS BYTE 00100100 FORMAT TRACK(W/IMPLIED SEEK) STATUS BYTE 00100101 RE-INITIALIZE CONTROLLER STATUS BYTE 00000000 THRU 00001111 RESERVED 00010011 THRU 00011111 RESERVED 00110000 THRU 00111111 RESERVED -1- THE CONTROLLER WILL RETURN A STATUS BYTE AT THE COMPLETION OF THE COMMAND OR DRIVE SELECT. AN INTERRUPT WILL BE GENERATED AND PLACED ON THE BUS ON THE SELECTED INTERRUPT LINE IF INTERRUPTS HAVE BEEN ENABLED. THE STATUS REGISTER BYTE INCLUDES THE FOLLOWING INFORMATION: BIT 0 = DRIVE NOT READY BIT 1 = SECTOR BUFFER COUNTER/TRANSFER ERROR BIT 2 = CRC ERROR BIT 3 = WRITE FAULT ERROR, FROM DRIVE BIT 4 = RECORD NOT FOUND BIT 5 = SEEK ERROR, NO SEEK COMPLETE FROM DRIVE BIT 6 = RESERVED BIT 7 = CONTROLLER TIMEOUT THE FLAG REGISTER PORT CONTAINS THE FOLLOWING INFORMATION: BIT 0 0 = NOT BUSY, COMMAND REGISTER EMPTY 1 = BUSY, COMMAND REGISTER FULL BIT 6 0 = DATA BUFFER TRANSFER ERROR 1 = DATA BUFFER TRANSFER CORRECT BIT 7 0 = COMMAND COMPLETE, STATUS BYTE READY. READING THE STATUS PORT CLEARS THIS FLAG 1 = NO STATUS BYTE PENDING JUMPER OPTIONS: THE FOLLOWING JUMPER OPTIONS CAN BE SELECTED BY THE USER; BASE NUMBER OF THE CONTROLLER BOARD PORT ADDRESS (10H-F0H) VECTORED INTERRUPT LINE (VI0-VI7) SECTOR SIZE (256, 512 1024 BYTES/SECTOR) POC, SLV/CLR, OR RESET FOR CONTROLLER INITIALIZATION SECTOR FORMAT: THE CONTROLLER USE THE FOLLOWING SECTOR FORMAT. 14 BYTES 00 PLL SYNC 1 BYTE A6 HEADER SYNC 1 BYTE FE HEADER MARK 3 BYTES SURFACE, CYLINDER, AND SECTOR NO. 2 BYTES HEADER CRC 2 BYTES 00 HEADER DATA FIELD SPLICE GAP 14 BYTES 00 PLL SYNC 1 BYTE AC DATA SYNC N BYTES 256, 512, OR 1024 BYTES OF DATA 2 BYTES DATA CRC 2 BYTES 00 DATA FIELD SPLICE GAP 16 BYTES 4E INTER-RECORD GAP TOTAL = 314, 570, OR 1082 BYTES/SECTOR PHYSICAL DIMENSIONS: THE CONTROLLER CONFORMS TO THE IEEE-696 SPECIFICATIONS. HOWEVER WITH THE DATA SEPARATOR THE DEPTH OF THE PACKAGE BECOMES 1 INCH. -2- INTERFACES: THE FOLLOWING TABLE SHOWS THE CONNECTOR CONFIGURATION FOR INTERFACING TO VARIOUS DRIVE INTERFACE TYPES: ST506 SA1000 SA4000(MEMOREX) P2 20 PIN 20 PIN NOT USED DRIVE 0 RADIAL DRIVE 0 RADIAL P3 20 PIN 20 PIN NOT USED DRIVE 1 RADIAL DRIVE 1 RADIAL P4 34 PIN 50 PIN NOT USED CONTROL/DATA CONTROL/DATA P5 NOT USED NOT USED 50 PIN CONTROL/DATA CONNECTORS: THE 50-PIN CONTROL CABLE FOR 8 & 14 INCH DRIVES REQUIRES A MATING CONNECTOR SIMILAR TO: AMP 1-499566-2 SPECTRA-STRIP 812-050 THE 34-PIN CONTROL CABLE CONNECTOR FOR 5.25 INCH DRIVES REQUIRES A MATING CONNECTOR SIMILAR TO: AMP 499566-9 SPECTRA-STRIP 812-034 THE 20-PIN RADIAL CABLE CONNECTOR REQUIRES A MATING CONNECTOR SIMILAR TO: AMP 499568-4 SPECTRA-STRIP 812-020 POWER REQUIREMENT: THE CONTROLLER WITHOUT DATA SEPARATOR: 1.3A @ 8VDC WITH DATA SEPARATOR: 1.9A -3- HDC-1013 SERIES WINCHESTER DISK CONTROLLER CONTROLLER COMMANDS AND RESPONSES TERMS: AAAA :4 BIT CONTROLLER ADDRESS SET BY JUMPERS HHH :3 BIT HEAD NUMBER (0-7) SSSSSS :6 BIT SECTOR NUMBER (1-MAX) DD :2 BIT DRIVE NUMBER (0-2) MMMM :4 BIT COMMAND CODE PPP :3 BIT RECORD NUMBER I :INTERRUPT MASK PORT ADDRESSES: AAAA0000 :WRITE CONTROLLER COMMAND PORT READ CONTROLLER STATUS PORT AAAA0001 :WRITE SECTOR BUFFER DATA PORT RESERVED AAAA0010 :WRITE RECORD NUMBER/INTERRUPT MASK/ENABLE CONTROLLER READ SECTOR BUFFER DATA PORT AAAA0011 :WRITE DATA WORD=00H TO RESET CONTROLLER READ CONTROLLER FLAGS PORT FLAG PORT: BIT 0 0=NOT BUSY,COMMAND REGISTER EMPTY 1=BUSY, COMMAND REGISTER FULL BIT 6 1=BUFFER TRANSFER ERROR 0=BUFFER TRANSFER CORRECT (USED TO INDICATE PROPER BUFFER TRANSFERS BETWEEN SECTOR BUFFER AND HOST.) BIT 7 0=COMMAND COMPLETE (STATUS BYTE READY, READING STATUS PORT CLEARS THIS FLAG) 1=NO STATUS BYTE PENDING BUFFER POINTER: IXXXXPPP :PPP = RECORD NUMBER REQUESTED. (PPP = 0-1 FOR 256 BYTES/SECTOR) (PPP = 0-3 FOR 512 BYTES/SECTOR) (PPP = 0-7 FOR 1024 BYTES/SECTOR) I = 1 INTERRUPTS ENABLED I = 0 INTERRUPTS DISABLED (SET INTERRUPT MASK PRIOR TO ANY COMMAND IN WHICH AN INTERRUPT RESPONSE IS DESIRED. WHEN THE CONTROLLER COMPLETES THE COMMMAND THE INTERRUPT WILL BE SET - THE SELECTED VECTOR WILL BE ACTIVE LOW. THE INTERRUPT WILL BE CLEARED WHEN THE STATUS PORT IS READ OR THE MASK IS RESET.) -4- CONTROLLER COMMANDS: 41-7F 01SSSSSS SETS SECTOR (1 THRU MAX) NONE 00-FF CCCCCCCC SET 6 LSB'S OF CYLINDER NONE 00-FF HHHHCCCC SET HEAD & 4 MSB'S OF CYLINDER NONE (THE CONTROLLER REQUIRES THE SECTOR, CYLINDER, & HEAD PARAMETERS TO BE HANDSHAKED CONSECUTIVELY WITH THE BUSY SIGNAL.) 00-0F RESERVED 10 00010000 DESELECT ALL DRIVES STATUS BYTE 11 00010001 SELECT DRIVE 1 STATUS BYTE 12 00010010 SELECT DRIVE 2 STATUS BYTE 13-1F RESERVED 20 00100000 RESTORE DRIVE STATUS BYTE 21 00100001 SEEK CYLINDER STATUS BYTE 22 00100010 WRITE SECTOR (W/IMPLIED SEEK) STATUS BYTE 23 00100011 READ SECTOR (W/IMPLIED SEEK) STATUS BYTE 24 00100100 FORMAT HEADERS (IMPLIED SEEK) STATUS BYTE 25 00100101 INITIALIZE CONTROLLER STATUS BYTE 30-3F RESERVED STATUS BYTE DECODED (1=ERROR CONDITION) BIT 0 :DRIVE NOT READY 1 :SECTOR BUFFER COUNTER/TRANSFER ERROR 2 :CRC ERROR 3 :WRITE FAULT(DRIVE PROBLEM) 4 :RECORD NOT FOUND 5 :SEEK ERROR (DRIVE PROBLEM) 6 :RESERVED 7 :CONTROLLER TIMEOUT (USUALLY NO CLOCK TO CONTROLLER BECAUSE OF INCORRECT RADIAL CABLE) NORMAL SEQUENCE OF CONTROLLER OPERATION: 1)USE UTILITY TO FORMAT A NEW DRIVE. 2)PLACE CONTROLLER IN RESET BY OUTPUTTING 00H TO PORT AAAA0011. 3)ENABLE THE CONTROLLER BY OUTPUTTING 00H TO PORT AAAA0010. 4)THE CONTROLLER WILL RESPOND UPON INITIALIZATION WITH STATUS BYTE = 00H.(DRIVE MUST BE READY) 5)TO WRITE A SECTOR; A)SET RECORD POINTER, INCLUDING INTERRUPT MASK AS REQUIRED. (OUTPUT I0000PPP TO PORT AAAA0010) B)MOVE DATA FROM HOST MEMORY TO SECTOR BUFFER WITH OUTPUT INSTRUCTIONS TO PORT AAAA0001. (OTIR'S IN Z-80 MNEMONICS) C)ENCODE AND OUTPUT HEAD, CYL, & SECTOR NUMBERS USING SET COMMANDS. D)OUTPUT A WRITE COMMAND (22H) TO PORT AAAA0000 E)WAIT FOR BIT 7 (ACTIVE LOW) ON FLAG PORT OR WAIT FOR INTERRUPT. F)INPUT STATUS FROM PORT AAAA0000. G)IF STATUS =00, THEN NO ERRORS, OTHERWISE DO AN OPTIONAL RETRY BY REPEATING E THRU G. -5- 6)TO READ A SECTOR; A)ENCODE & OUTPUT HEAD, CYL, & SECTOR NUMBERS TO PORT AAA0000. B)OUTPUT A READ COMMAND (23H) TO PORT AAAA0000. C)WAIT FOR BIT 7 (ACTIVE LOW) ON FLAG PORT, OR WAIT FOR INTERRUPT. D)INPUT STATUS FROM PORT AAAA0000. E)IF STATUS =00, THEN NO ERRORS, OTHERWISE TRY AN OPTIONAL RETRY BY REPEATING B THRU D. F)SET RECORD POINTER AND INTERRUPT MASK AS DESIRED. (OUTPUT I0000PPP TO PORT AAAA0010) G)MOVE DATA FROM SECTOR BUFFER TO MEMORY WITH INPUT INSTRUCTIONS FROM PORT AAAA0010. (INIR'S IN Z-80 CODE) AN EXAMPLE METHOD OF ENCODING HEAD/CYLINDER/SECTOR/RECORD IN CP/M 2.2 1)DEFINE OPERATING SYSTEM SECTORS AS RECORDS SO THAT LSB OF SECTOR IS A RECORD NUMBER. EXAMPLE: WITH 256 BYTES/SECTOR AND 32 SECTORS/TRACK THERE WOULD BE 64 X 128 RECORDS. 256 X 32 = 8192 BYTES 128 X 64 = 8192 BYTES THE 64 RECORDS WOULD BE LABELLED 00 THRU 3F IN HEX. THE LSB DEFINES RECORD 0 OR 1, AND THE 5 MSB WOULD DEFINE THE SECTOR NUMBERS, LABELLED 00 THRU 1F IN HEX. 2)DEFINE THE OPERATING SYSTEM TRACKS AS: (CYLINDERS X NO.OF HEADS) + THE HEAD NUMBER EXAMPLE: FOR 256 CYLINDERS AND 4 HEADS, THERE WOULD BE 256 X 4 = 1024 CYLINDERS, LABELLED 000 THRU 3FF IN HEX. THE TWO LSB'S DEFINE THE HEAD NUMBER (0-3), AND THE 8 MSB'S WOULD DEFINE THE REQUIRED CYLINDER. 3)COMPUTE ACTUAL SECTOR BY SHIFTING HOST SECTOR LEFT BY 1 FOR 256, 2 FOR 512, OR 3 FOR 1024 BYTE SECTORS. 4)USE BLOCKING/DEBLOCKING TO DETERMINE PRE-READ OR BUFFER WRITE REQUIREMENTS. 5)USE DRIVERS GIVEN TO OPERATE CONTROLLER -6- HDC-1013 SERIES WINCHESTER DISK CONTROLLER CONNECTOR AND JUMPER CONFIGURATION P2 :RADIAL CONNECTOR FOR DRIVE 1 P3 :RADIAL CONNECTOR FOR DRIVE 2 P4 :CONTROL CONNECTOR FOR ST-506 & SA-1000 TYPE DRIVES P5 :CONTROL CONNECTOR FOR MEMOREX/FUJITSU TYPE DRIVES (NOTE: JUMPER THE M101 DRIVES TO SUPPLY DATA ON THE CONTROL CABLE) TERM :TERMINATORS FOR 8 INCH DRIVES (INSTALL VERTICAL) M,M- :FAULT CLEAR JUMPER (M FOR MEMOREX) E1-E8 :I/O FOR DATA SEPARATOR E9-E16 :SIGNALS FOR DATA SEPARATOR ONLY NOTE: WHEN THE DATA SEPARATOR IS NOT USED AND THE SEPARATOR CIRCUITRY ON-BOARD THE DRIVE IS IMPLEMENTED THE CONTROLLER MUST HAVE THE FOLLOWING JUMPERS INSTALLED: JUMPER E1 - E2 E3 - E4 E5 - E6 E7 - E8 M/M- (MEMOREX OR NOT MEMOREX) S :JUMPER FOR CONTROLLER RESET ON SLAVE CLEAR (SLAVE CLEAR = BUS PIN 54) R :JUMPER FOR CONTROLLER RESET ON RESET SWITCH (RESET = BUS PIN 75) POC :JUMPER FOR CONTROLLER RESET ON POWER-ON-CLEAR (POC = BUS PIN 99) VI0-7 VECTORED INTERRUPT 0-7 JUMPER AS REQUIRED -7- BOARD ADDRESS :SELECTS THE BASE ADDRESS OF THE FOUR I/O PORTS BIT NUMBER ADDRESS (IN HEX) (7654) (J=JUMPER, 0=NO JUMPER) JJJJ 00H THRU 03H JJJ0 10H THRU 13H JJ0J 20H THRU 23H JJ00 30H THRU 33H J0JJ 40H THRU 43H J0J0 50H THRU 53H J00J 60H THRU 63H J000 70H THRU 73H 0JJJ 80H THRU 83H 0JJ0 90H THRU 93H 0J0J A0H THRU A3H 0J00 B0H THRU B3H 00JJ C0H THRU C3H 00J0 D0H THRU D3H 000J E0H THRU E3H 0000 F0H THRU F3H SECTOR SIZE ------ ---- 256 O-O BYTES PER O-O SECTOR O O | O O O O ------- ---- 512 O-O BYTES PER O O SECTOR | O O O-O O O ----- ---- 1024 O O------ BYTES | PER O O |B SECTOR |C | O O------ JUMPER B OR C DEPENDING ON BOARD REVISION LEVEL O O JUMPER B = BOARD REV B | | JUMPER C = BOARD REV C OR GREATER O O -8- NOTE: DRIVE TYPES NORMALLY THE CONTROLLER AND THE DATA SEPARATOR ARE CONFIGURED FOR A DESIRED DRIVE TYPE AT THE FACTORY. THE SEPARATOR IS CONFIGURED VIA 4 TYPE JUMPERS SELECTING THE DRIVE TYPE AND SECTOR SIZES. THE TYPE OF DRIVE SELECTED INDICATES TO THE CONTROLLER WHICH STEP TIMING AND MODE TO USE AND WELL AS WHAT SECTOR SIZE THE USER DESIRES. IF THE USER DECIDES TO CHANGE DRIVE TYPES OR SECTOR SIZE THE TYPE CODE NECESSARY CAN BE FOUND IN THE FOLLOWING TABLE. JUMPER TABLE AND PARAMETERS J=JUMPERED 0=NOT JUMPERED TYPE NUMBER 3 2 1 0 J J J J BUFFERED STEP; 32 SECTORS/TRACK 256 BYTE/SECTOR J J J 0 BUFFERED STEP; 38 SECTORS/TRACK 256 BYTE/SECTOR J J 0 J ST506 HALFSTEP; 32 SECTORS/TRACK 256 BYTE/SECTOR J J 0 0 UNBUFFERED STEP; 32 SECTORS/TRACK 256 BYTE/SECTOR J 0 J J BUFFERED STEP; 17 SECTORS/TRACK 512 BYTE/SECTOR J 0 J 0 BUFFERED STEP; 21 SECTORS/TRACK 512 BYTE/SECTOR J 0 0 J ST506 HALFSTEP; 07 SECTORS/TRACK 512 BYTE/SECTOR J 0 0 0 UNBUFFERED STEP; 17 SECTORS/TRACK 512 BYTE/SECTOR 0 J J J BUFFERED STEP; 9 SECTORS/TRACK 1024 BYTE/SECTOR 0 J J 0 BUFFERED STEP; 11 SECTORS/TRACK 1024 BYTE/SECTOR 0 J 0 J ST506 HALF STEP; 9 SECTORS/TRACK 1024 BYTE/SECTOR 0 J 0 0 UNBUFFERED STEP; 9 SECTORS/TRACK 1024 BYTE/SECTOR 0 0 J J BUFFERED STEP MODE,RRC/EPC*; 32 SECTORS/TRACK 256 BYTE/SECTOR 0 0 J 0 BUFFERED STEP MODE,RRC/EPC*; 17 SECTORS/TRACK 512 BYTE/SECTOR 0 0 0 J BUFFERED STEP MODE,RRC/EPC*; 9 SECTORS/TRACK 1024 BYTE/SECTOR 0 0 0 0 DMA CARTRIDGE OPTION, BUFFERED STEP, 33 SECTORS 256 BYTE/SECTOR * NOTE: REDUCED WRITE CURRENT/ENABLE PRE-COMPENSATION (RRC/EPC) IS NORMALLY ASSERTED ABOVE CYLINDER NUMBER 127(7F HEX). WHEN USING DRIVES WITH 512 OR GREATER CYLINDERS THE USER CAN SELECT RRC/EPC TO BE ASSERTED AT CYLINDER NUMBER 256 (FF HEX) USING THESE TYPE CODES. AT THE PRESENT TIME, THE QUANTUM 2000 SERIES IS SUPPORTED WITH THESE JUMPERS. THE HDC-1016 CONTROLLER DOES NOT HAVE AN RRC/EPC OUTPUT, AND ASSUMES THE DRIVE IS RESPONSIBLE FOR THIS FUNCTION. RAT110784 -9-