WD1770/2/3 data (disk controller chip) ====================================== This file contains essential data on programming the floppy disk controller chip used in BBC B+, Master, BBC B with Opus DDOS and some Archimedes computers. Please note that a lot of the information in the relevent data sheet has had to be cut out. You are advised to mail this file to yourself, as it is rather long (about 10 pages). Register summary ================ Address offset Contains on read on write ------------------------------------------------------ 0 Status Command 1 ------- Track -------- 2 ------- Sector ------- 3 ------- Data --------- Command summary =============== Command register bits Type Command 7 6 5 4 3 2 1 0 ------------------------------------------------------- I Restore 0 0 0 0 h v r1 r0 I Seek 0 0 0 1 h v r1 r0 I Step 0 0 1 u h v r1 r0 I Step in 0 1 0 u h v r1 r0 I Step out 0 1 1 u h v r1 r0 II Read sector 1 0 0 m h/s e 0/c 0 II Write sector 1 0 1 m h/s e p/c a III Read address 1 1 0 0 h/0 e 0 0 III Read track 1 1 1 0 h/0 e 0 0 III Write track 1 1 1 1 h/0 e p/0 0 IV Force interrupt 1 1 0 1 i3 i2 i1 i0 Where : h = motor spin-up sequence disable flag. (1770/2 only) = 0 Enable spin-up sequence if motor is currently not running. = 1 Disable spin-up sequence. v = verify on destination flag. (all) = 0 Do not verify = 1 Verify (adds a 30 msec head settling time onto command execution) r1,r0 = head track-to-track stepping rates. (all) r1 r0 1770/3 1772 0 0 6 ms 6 ms 0 1 12 ms 12 ms 1 0 20 ms 2 ms 1 1 30 ms 3 ms u = update track register. (all) = 0 Do not update track register = 1 Update track register. m = multiple sector read/write flag. (all) = 0 read/write 1 sector only. = 1 read/write sectors on current track until command is interrupted using the FORCE INTERRUPT command. s = side compare flag (1773 only) = 0 Compare for side 0. = 1 Compare for side 1. a0= data address mark type. (all) = 0 Write normal data mark. = 1 Write deleted data mark. e = Head settling delay. (all) = 0 No delay = 1 Add 30 ms delay (15 ms on 1772) c = Side compare flag. (1773 only) = 0 Disable side compare. = 1 Enable side compare. For all type III commands bit 1 must be 0 p = Write precompensation flag. (all) = 0 Enable write precompensation. = 1 Disable write precompensation. i3= 1, immediate interrupt. (all) i2= 1, interrupt on every index pulse. (all) i1= 1, Ready to not ready transition. (1773 only) i0= 1, Not ready to ready transition. (1773 only) Data formats: ============= Read address. Byte Contains --------------------------- 0 Track number 1 Side number 2 Sector number 3 Sector length 4 CRC check byte (1) 5 CRC check byte (2) Write track (format a track) Double density formats: ======================= Recommended | Acorn ADFS | format | (master 128) | No. of Hex value | No. of Hex value | bytes to write | bytes to write | Info -----------------------+----------------------+------------------------------- 60 4E | 60 4E | Post-index Gap (Gaps 1+2) / 12 00 | / 12 00 | Pll lock-up time | 3 F5 | | 3 F5 | 3 synchronisation bytes | 1 FE | | 1 FE | ID address mark | 1 | | 1 | Track number | 1 | | 1 | Side number | 1 | | 1 | Sector number | 1 | | 1 01 | Sector length | 1 F7 | | 1 F7 | Writes 2 CRC bytes | 22 4E | | 22 4E | Sector ID / Data Gap (Gap 3a) | 12 00 | | 12 00 | /Write splice time (Gap 3b) | | | | \Pll lock-up time | 3 F5 | | 3 F5 | 3 synchronisation bytes | 1 FB | | 1 FB | Data address mark | n | | 256 (5A on format)| Data (number of bytes depends | | | | on the sector length) | 1 F7 | | 1 F7 | Writes 2 CRC bytes \ 24 4E | \ 43 4E | Post Data Gap (Gap 4) 668 approx 4E | 4E | Runout Gap. Write until | | next index hole. Single density formats: ======================= Recommended | Acorn 1770 DFS 2.24 | format | (master 128) | No. of Hex value | No. of Hex value | bytes to write | bytes to write | Info ----------------------+----------------------+-------------------------------- 40 FF | 40 FF | Post index Gap (Gaps 1+2) / 6 00 | / 6 00 | Pll lock-up | | | 3 F5 | 3 synchronisation bytes | 1 FE | | 1 FE | ID address mark | 1 | | 1 | Track number | 1 | | 1 | Side number | 1 | | 1 | Sector number | 1 | | 1 01 | Sector length | 1 F7 | | 1 F7 | Writes 2 CRC bytes | 11 FF | | 10 4E | Sector ID / Data Gap (Gap 3a) | 6 00 | | 4 00 | Pll lock-up (Gap 3b) | | | 3 F5 | 3 synchronisation bytes | 1 FB | | 1 FB/F8 | Data address mark | n | | 256 (5A on format)| Data | 1 F7 | | 1 F7 | Writes 2 CRC bytes \ 10 FF | \ 10 FF | Post data Gap (Gap 4) 369 approx FF | FF | Runout Gap. Write until | | next index hole. Write the bracketed area the following times: Sector length Sector size (n) Number of times to write ------------------------------------------------------------- 00 128 ? 01 256 16 (ADFS 16, DFS 10) 02 512 ? 03 1024 5 Notes 1) The gaps can be altered to a minimum of: Single density Double density Gap 1 16 32 Gap 2 11 22 Gap 3a 10 24 Gap 3b 4 8 Gap 4 10 16 2) The reliability depends on the gaps. For highest reliability, use the recomended formats. 3) The 177X will not automatically detect which density it is use. There is usually a separate register or a hard link to set up the denstiy. This applies to all commands. Status register. ================ The meaning of the bits in the status register depends on which type of command is currently executing. Bit | Type I | Type II | Type III | Comments ----+------------------+---------------+---------------+------------------- 7 | Motor on | ---------- Motor on --------- | / If bit 3 is 6 | Not used. | -- Disk is write protected. - | | set then: 5 | Motor spin-up | Data type : 0 = normal. | | If bit 4 is | completed. | 1 = deleted. | | set, the error 4 | Record not found | ----- Record not found ------ | / is in the ID 3 | CRC error. | --------- CRC error --------- |< field. If bit 4 2 | Not track 0 | ------ Lost data / byte ----- | \ is clear, the 1 | Data Request | -------- Data request ------- | | error is in 0 | Busy | ------------ Busy ----------- | \ the data field. Note that after a reset, some 177X's say that they are busy, when they are idle. This happens when you reset the chip while a command is in progress. Read/Write delay times ====================== There are certain delay times that must be taken into account: Operation Next operation Delay required Single Double density ---------------------------------------------------------------- Write command / Read busy bit 48 usec 24 usec register \ Read status bits 1-7 64 usec 32 usec Write any reg Read same register 32 usec 16 usec Drive control register ====================== This controls various functions that the 177X is unable to: Master drive control: Bit Meaning ----------------- 7,6 Not used. 5 Double density select (0 = double, 1 = single). 4 Side select (0 = side 0, 1 = side 1). 3 Drive select 2. 2 Reset drive controller chip. 1 Drive select 1. 0 Drive select 0. B+ drive control: Bit Meaning ----------------- 7,6 Not used. 5 Reset drive controller chip. 4 Interrupt ? 3 Double density select (0 = double, 1 = single). 2 Side select (0 = side 0, 1 = side 1). 1 Drive select 1. 0 Drive select 0. Opus double density board on BBC: Bit Meaning ----------------- 7 Not used. 6 Density select (0 = single, 1 = double). 5-2 Not used. 1 Side select (0 = side 0, 1 = side 1). 0 Drive select (0 = drive 0, 1 = drive 1). Note that only 1 drive select bit line should be set at a time. Addresses of registers: ======================= Computer Location of disk chip & chip Location of drive control --------------------------------------------------------------------- BBC B with Opus &FE80 - &FE83 WD1770 &FE84 BBC B+ &FE84 - &FE87 WD1770 &FE80 BBC Master &FE28 - &FE2B WD1770 &FE24 Archimedes ? WD1772 ? I am aware that some archimedes used the WD1772 is used, but if anyone knows the addresses, I will be happy to put them in.