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. 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.