Changes

765 FDC

2,065 bytes added, Sunday at 03:09
/* Other Variants */
µPD765 - Floppy Disc Controller (used in CPC 664, CPC 6128, 6128 Plus and [[DDI-1]] expansion).
 
Besides the Amstrad CPC, this chip equipped the [[PCW|Amstrad PCW]], the [[ZX Spectrum|ZX Spectrum +3]] and the [[PC|IBM PC]] (including [[Amstrad PC]]).
The recommended ports used by Amstrad and compatible interfaces are:
|}
Note: Bit b10 of the address port is reset as the FDC is seen as an expansion, even if it is an internal chip. Bit b7 is reset to select the FDC. Bits b8 and b0 are used to select the specific mode of operation. All other bits should be set to 1 to avoid conflict. [https://www.cpc-power.com/cpcarchives/index.php?page=articles&num=48 Source]
Note2: The [[Vortex Disc Drives|Vortex disc interface]] uses other ports. See its dedicated wiki page.
<br>
== IC Models used in CPC Motor On/Off Flip-Flop ==Writing 00h to Port &FA7E turns all disk drive motors off, writing 01h turns all motors on. It is not possible to turn on/off the motor of a specific drive separately.
More than one manufacturer made 765 compatible ICs. These An exception are the ones known to be used in the CPC by looking at pictures of CPC mainboardsVortex F1-S, F1-D, M1-S and M1-D drives.(How are they different?)
All should operate almost identicallyAnother exception is the Gotek drives.They don't take the motor flip-flop into account and are always on. [https://64nops.wordpress.com/2021/07/04/a-la-decouverte-du-fdc/ Source]
* NEC D765AC [https://wwwSome FDC commands don't require the motor to be on.cpcwikiFor example, the seek or recalibrate commands, that move the floppy drive head, work fine with the motor off.euAnd seek/imgs/3/3c/CPC664_Z70205_MC0005B_PCB_Toprecalibrate also work with an empty drive (ie.jpg Source]* NEC D765AC-2 [https://www.cpcwiki.eu/imgs/4/45/CPC6128_PCB_Top_%28Z70210_MC0009A%29.jpg Source]* UMC UM8272A [[Media:Amstrad cpc 6128 azerty (fwithout a floppy disk inserted) placa2.jpg|Source]]* Zilog Z765APS [https://www64nops.cpcwikiwordpress.eucom/imgs2021/f07/fb10/CPC6128_Z70290_MC0020C_PCB_Top.jpg Source]* [[Zilog]] Z0765A08PSC [https:a-la-decouverte-du-fdc-episode-2//www.cpcwiki.eu/imgs/6/67/CPC6128_PCB_Top_%28Z70290_MC0020F%29.jpg Source]
The following data seperators are usedfloppy disk rotates at a nominal speed of 300rpm, with some tolerance. This tolerance of the FDC has been measured by [[Roudoudou]] to be ±12% (it worked from 220 kbits/s to 283 kbits/s for a reference of 250 kbits/s). [https://64nops.wordpress.com/2021/09/02/a-la-decouverte-du-fdc-episode-4/ Source]
* FDC9216 [https:The FDC speed is more impressive when you realize the Amstrad CPC’s tape loads at only 2 kbits//wwws in fast mode.cpcwiki.eu/imgs/4/45/CPC6128_PCB_Top_%28Z70210_MC0009A%29.jpg Source]* SED9420C [httpsNote://www.cpcwiki.eu/imgs/3/3c/CPC6128_PCB_Top_%28Z70290_MC0020A%29.jpg Source] The CPC464tape loading can be way faster than that if an MP3 player is used instead of a real physical tape, CPC472, 464 Plus and GX4000 are not equipped with a FDC chip. All the floppy disk drive models used by Amstrad are referenced as it has been demonstrated here: [https://wwwyoutu.cpcwiki.eube/index.php/Amstrad_FDD_part Amstrad FDD part]MAIsOIwgJWA
<br>
== Accessing the FDC 765 ==
The Main Status Register (Port &FB7E) signalizes when the FDC is ready to send/receive the next byte through the Data Register.
The Data Register (Port &FB7F) is used to write Commands and Parameters, to read/write data bytes, and to receive result bytes. These 3 operations are called Command-, Execution-, and Result-Phase.:
<br> === * Command Phase === : A command consists of a command byte (eventually including the MT, MF, SK bits), and up to 8 parameter bytes. <br> === Execution Phase === During this phase, the actual data is transferred (if any). Usually that are the data bytes for the read/written sector(s), except for the Format Track Command, in that case 4 bytes for each sector are transferred. During data transfers between the FDC and the processor, the FDC must be serviced every 26µs (for MFM mode with CPC timings) or the FDC terminates the FDC command. <br>
=== Result * Execution Phase ===: During this phase, the actual data is transferred (if any). Usually that are the data bytes for the read/written sector(s), except for the Format Track Command, in that case 4 bytes for each sector are transferred. During data transfers between the FDC and the processor, the FDC must be serviced every 26µs (for MFM mode with CPC timings) or the FDC terminates the FDC command.
* Result Phase: Returns up to 7 result bytes (depending on the command) that are containing status information. The Recalibrate and Seek Track commands do not return During the result bytes directlyphase, instead all the program result bytes must wait until the Main Status Register signalizes that the command has been completed, and then it must (!) send be read. The FDC will not accept a Sense Interrupt State new command to 'terminate' until all the Seek/Recalibrate commandresult bytes are read.
During the Note: The Recalibrate and Seek Track commands do not return result phasebytes directly. Instead, all the result bytes program must be readwait until the Main Status Register signalizes that the command has been completed. The FDC will not accept And then it must (!) send a new Sense Interrupt State command until all to 'terminate' the result bytes are readSeek/Recalibrate command.
<br>
=== The 15 FDC Commands ===
{|
<br>
=== FDC Status Registers ===
The Main Status register can always be read through Port &FB7E. The other 4 Status Registers cannot be read directly, instead they are returned through the data register as result bytes in response to specific commands.
<br>
=== C, H, R, N values at result phase ===
If the processor terminates a read (or write) operation in the FDC, then the ID information in the Result phase is dependent upon the state of the MT bit and EOT byte:
<br>
== Motor On/Off Flip-Flop =Notes =Writing 00h to Port &FA7E turns all disk drive motors off, writing 01h turns all motors on. It is not possible to turn on/off the motor of a specific drive separately. An exception are the Vortex F1-S, F1-D, M1-S and M1-D drives. (How are they different?) Another exception is the Gotek drives. They don't take the motor flip-flop into account and are always on. [https://64nops.wordpress.com/2021/07/04/a-la-decouverte-du-fdc/ Source] Some FDC commands don't require the motor to be on. For example, the seek or recalibrate commands, that move the floppy drive head, work fine with the motor off. And seek/recalibrate also work with an empty drive (ie. without a floppy disk inserted). [https://64nops.wordpress.com/2021/07/10/a-la-decouverte-du-fdc-episode-2/ Source] The floppy disk rotates at a nominal speed of 300rpm, with some tolerance. This tolerance of the FDC has been measured by [[Roudoudou]] to be ±12% (it worked from 220 kbits/s to 283 kbits/s for a reference of 250 kbits/s). [https://64nops.wordpress.com/2021/09/02/a-la-decouverte-du-fdc-episode-4/ Source] The FDC speed is more impressive when you realize the Amstrad CPC’s tape loads at only 2 kbits/s in fast mode. Note: tape loading can be way faster than that if an MP3 player is used instead of a real physical tape, as it has been demonstrated here: https://youtu.be/MAIsOIwgJWA <br> == Notes ==
Before accessing a disk you should issue a ''recalibrate'' command to the drive to move the head backwards until the ''track zero'' signal from the drive is sensed by the FDC. The FDC will also set its track counter for that drive to zero.
AMSDOS files are usually stored with a 128-byte [[AMSDOS Header]] (based on cassette header) but can also be headerless, depending on the contents of the file. Unprotected ASCII files do not have header.
CP/M files do not have AMSDOS headers. <br> === Random File Access === One of the major computing flaws of the Amstrad CPC machines has been the inability to handle simple Random Access Filing even when equipped with disc drives. The only way random access data handling was possible was if the program was written entirely in CP/M. [https://cpcrulez.fr/applications_bureau-random_accesss_database.htm Source] Nowadays, files can be random accessed in SymbOS, so you can always set the current file pointer to any position in a file and load any amount of data in one step from this position (in CP/M this is at least possible in 128byte steps, in Unidos also byte-based). [https://www.cpcwiki.eu/forum/games/micro-machine-for-symbos-g9k/msg248806/#msg248806 Source]
<br>
* In MFM encoding, IDAM and DAM are always preceded by three A1 bytes to help the FDC lock onto the data stream after a gap and accurately read the following datas. This is needed because MFM is more compact and harder to read than earlier encoding methods.
* Gaps are necessary to accommodate variations in rotation speed between different drives and avoid overlapping.
 
The main competitor of the µPD765 FDC chip on the market was the WD179x FDC chip family. The primary difference between 765 and 179x controllers is that the 765 only does standard track formats (preamble, marks and data fields), while the 179x will write anything you tell it in the write track (formatting a track) mode.
<br>
The IBM PC supports 3 standard diskette formats on a 5.25 inch drive:
* The earliest IBM PCs used single-sided, double density, 40 cylinders, 300 RPM, floppy drives which yield a capacity of 160 KB per side. And MS-DOS 1.0 only supported single-sided floppy drives.
* Double-sided floppy drives were introduced in the IBM PC in 1982 and are supported in MS-DOS 1.1. They originally had a capacity of 320 KB per diskette. MS-DOS 2.0 extended the capacity to 360 KB with a new disk format(9 sectors per track instead of 8). [https://minuszerodegrees.net/5150/early/5150_early.htm Source]
* A new floppy drive was introduced with the PC/AT in 1984. It is double sided, quad density, 80 cylinders, with a total capacity of 1.2 MB. The high density drive rotates at '''360 RPM''', so only 15 sectors can be written on a track instead of 18.
== Chip Variants ==
 
=== IC Models used in CPC ===
 
More than one manufacturer made 765 compatible ICs. These are the ones known to be used in the CPC by looking at pictures of CPC mainboards. All should operate almost identically.
 
* NEC D765AC [https://www.cpcwiki.eu/imgs/3/3c/CPC664_Z70205_MC0005B_PCB_Top.jpg Source]
* NEC D765AC-2 [https://www.cpcwiki.eu/imgs/4/45/CPC6128_PCB_Top_%28Z70210_MC0009A%29.jpg Source]
* UMC UM8272A [[Media:Amstrad cpc 6128 azerty (f) placa2.jpg|Source]]
* Zilog Z765APS [https://www.cpcwiki.eu/imgs/f/fb/CPC6128_Z70290_MC0020C_PCB_Top.jpg Source]
* [[Zilog]] Z0765A08PSC [https://www.cpcwiki.eu/imgs/6/67/CPC6128_PCB_Top_%28Z70290_MC0020F%29.jpg Source]
 
The following data seperators are used:
 
* FDC9216 [https://www.cpcwiki.eu/imgs/4/45/CPC6128_PCB_Top_%28Z70210_MC0009A%29.jpg Source]
* SED9420C [https://www.cpcwiki.eu/imgs/3/3c/CPC6128_PCB_Top_%28Z70290_MC0020A%29.jpg Source]
 
The CPC464, CPC472, 464 Plus and GX4000 are not equipped with a FDC chip.
 
All the floppy disk drive models used by Amstrad are referenced here: [https://www.cpcwiki.eu/index.php/Amstrad_FDD_part Amstrad FDD part]
 
=== Other Variants ===
NEC has developed various successors to the original uPD765, such as the uPD72065, uPD72067, and uPD72069.
The КР1810ВГ72А is a Soviet clone of the Intel i8272. It is used in the [[Aleste 520EX]] clone of the Amstrad CPC computer.
 
=== Competitors ===
 
The main competitor of the µPD765 FDC chip on the market was the WD179x FDC chip family. Its main differences are:
* the 765 has 3 scan commands, while the 179x has none.
* the 765 has 5 status registers, while the 179x only has one.
* the 765 has multi-byte "command phase", while commands are issued to the 179x by writing a single byte to the Command Register, after having set parameters in its dedicated registers.
* the 765 has multi-byte "result phase", while the 179x has none. After a command completes, all the status information is contained in the Status Register as a single byte.
* the 765 has drive select pins to directly select one of four floppy drives, while the 179x has none. Instead, external logic must be used to handle multiple drives.
* the 765 only does standard track formats (preamble, marks and data fields), while the 179x will write anything you tell it in the write track (formatting a track) mode.
 
Note: While the [[Oric-1/Atmos|Oric]] uses the same 3inch floppy disks as the Amstrad CPC, it uses the WD1773 (Jasmin) or WD1793 (Microdisc) FDC chip.
<br>
*[https://64nops.wordpress.com/2021/07/04/a-la-decouverte-du-fdc/ FDC blog articles (in french)]
*[https://www.cpc-power.com/cpcarchives/index.php?page=articles&num=92 Floppy disk formats (in french)]
*[https://www.fvempel.nl/3bible.html The 3inch bible]
*[https://info-coach.fr/atari/hardware/FD-Hard.php Atari ST Floppy Drive hardware analysis]
*[https://map.grauw.nl/articles/low-level-disk/ MSX low-level disk storage article]
*[https://youtu.be/aoXr7Anr5DY Réparation de lecteurs Amstrad CPC] by [[Rodrik Studio]]
*[https://youtu.be/-A-USMg9xvE Un Gotek dans un CPC 6128 et du 5.25 aussi] by [[Rodrik Studio]]
*[https://youtu.be/QPFVfgaMv68 Les disquettes : Le fonctionnement] by [[Rodrik Studio]]
*[https://youtu.be/RMTYevdGH6I Les protections et bien plus] by [[Rodrik Studio]]
 
<br>
[[Category:CPC Internal Components]][[Category:Programming]][[Category:DATA Storage]][[Category:Electronic Component]]
12,552
edits