Changes

Jump to: navigation, search

765 FDC

1,923 bytes removed, 3 July
/* FDC Command Table (15 commands) */
| command byte 0 || colspan="3" style="text-align: center;" | x || 0 || 1 || 1 || 1 || 1
|-
| command byte 1 || colspan="5" style="text-align: center;" | x || HD || colspan="2" style="text-align: center;" | US
|-
| command byte 2 || colspan="8" | NCN: new cylinder number
|-
| result byte 0 || colspan="8" | ST3: status register 3
|}
 
{| class="wikitable"
|+ Specify (03h)
|-
! !! D7 !! D6 !! D5 !! D4 !! D3 !! D2 !! D1 !! D0
|-
| command byte 0 || colspan="3" style="text-align: center;" | x || 0 || 0 || 0 || 1 || 1
|-
| command byte 1 || colspan="4" style="text-align: center;" | SRT || colspan="4" style="text-align: center;" | HUT
|-
| command byte 2 || colspan="7" style="text-align: center;" | HLT || ND
|}
*US = Unit select (drive select)
*HLT = Head Load Time = : 2 to 254ms in 2ms increments*HUT = Head Unload Time = : 16 to 240ms in 16ms increments*SRT = Step Rate Time = : 1 to 16ms in 1ms increments (F = 1ms, E = 2ms, etc.)
*ND = Non-DMA mode
  Command Parameters Exm Result Description 02+MF+SK HU TR HD ?? SZ NM GP SL <R> S0 S1 S2 TR HD NM SZ read track 03 XX YY - specify spd/dma 04 HU - S3 sense drive state 05+MT+MF HU TR HD SC SZ LS GP SL <W> S0 S1 S2 TR HD LS SZ write sector(s) 06+MT+MF+SK HU TR HD SC SZ LS GP SL <R> S0 S1 S2 TR HD LS SZ read sector(s) 07 HU - recalib.seek TP=0 08 - - S0 TP sense interrupt state 09+MT+MF HU TR HD SC SZ LS GP SL <W> S0 S1 S2 TR HD LS SZ write deleted sector(s) 0A+MF HU - S0 S1 S2 TR HD LS SZ read ID 0C+MT+MF+SK HU TR HD SC SZ LS GP SL <R> S0 S1 S2 TR HD LS SZ read deleted sector(s) 0D+MF HU SZ NM GP FB <W> S0 S1 S2 TR HD LS SZ format track 0F HU TP - seek track n 11+MT+MF+SK HU TR HD SC SZ LS GP SL <W> S0 S1 S2 TR HD LS SZ scan equal 19+MT+MF+SK HU TR HD SC SZ LS GP SL <W> S0 S1 S2 TR HD LS SZ scan low or equal 1D+MT+MF+SK HU TR HD SC SZ LS GP SL <W> S0 S1 S2 TR HD LS SZ scan high or equal Parameter bits that can be specified in some Command Bytes areNotes MT Bit7 Multi * Format Track (continue multi-sector-function on other head) MF Bit6 MFM-Mode-Bit (Default 1=Double Density) SK Bit5 Skip-Bit (set if secs with deleted DAM shall be skipped) Parameter/Result bytes are HU b0The processor must supply C,1=Unit/Drive NumberH, b2=Physical Head NumberR, other bits zero TP Physical Track Number TR Track-ID (usually same value as TP) HD Head-ID SC First Sector-ID (sector you want N to read) SZ Sector Size (80h shl n) (default=02h for 200h bytes) LS Last Sector-ID (should be same as SC when reading a single sector) GP Gap (default=2Ah except command 0D: default=52h) SL Sectorlen if SZ=0 (default=FFh) Sn Status Register 0..3 FB Fillbyte (for the sector data areas) (default=E5h) NM Number of Sectors (default=09h) XX b0..3=headunload n*32ms (8" only), b4..7=steprate (16-n)*2ms YY b0=DMA_disable, b1-7=headload n*4ms (8" only) * Format Track: output TR,HD,SC,SZ FDC for each sector during execution phase* Read Track: reads NM sectors (starting with first sec past index hole)* Read ID: read ID bytes for current sec, repeated/undelayed read lists all IDs* RecalibRecalibrate: walks Walks up to 77 tracks, 80tr-drives may need second recalib if failed* Seek/RecalibRecalibrate: All read/write commands will be disabled until succesful senseintsense interrupt* SenseintSpecify: Set's IC if unsuccesful (no int has occured) (until IC=0)All timings will be doubled on CPC because the FDC runs at 4MHz instead of 8MHz for the datasheet
<br>
*[http://quasar.cpcscene.net/doku.php?id=assem:fdc Quasar FDC documentation (in french)]
*[https://64nops.wordpress.com/2021/07/04/a-la-decouverte-du-fdc/ FDC blog articles (in french)]
*[https://info-coach.fr/atari/hardware/FD-Hard.php Atari ST Floppy Disk Drive hardware analysis]
[[Category:CPC Internal Components]][[Category:Programming]][[Category:DATA Storage]][[Category:Electronic Component]]
6,129
edits