Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
back2root:ibm-pc-ms-dos:hardware:8272-pd765 [2023/02/23 22:15] – [Floppy Diskette Controller Operations (15 commands)] frater | back2root:ibm-pc-ms-dos:hardware:8272-pd765 [2023/02/23 22:30] (Version actuelle) – [Key to Abbreviations] frater | ||
---|---|---|---|
Ligne 182: | Ligne 182: | ||
| result byte 5: | sector number | | result byte 5: | sector number | ||
| result byte 6: | bytes per sector | | result byte 6: | bytes per sector | ||
+ | {{tablelayout? | ||
+ | ^ Read Deleted Data ^ D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 | ||
+ | | command byte 0: | MT | MF | SK | 0 | ||
+ | | command byte 1: | ? | ||
+ | | command byte 2: | cylinder number | ||
+ | | command byte 3: | head number | ||
+ | | command byte 4: | sector number | ||
+ | | command byte 5: | bytes per sector | ||
+ | | command byte 6: | end of track (last sector in track) | ||
+ | | command byte 7: | gap 3 length | ||
+ | | command byte 8: | data length (if cmd byte 5==0) | ||
+ | | result byte 0: | status register 0 |||||||| | ||
+ | | result byte 1: | status register 1 |||||||| | ||
+ | | result byte 2: | status register 2 |||||||| | ||
+ | | result byte 3: | cylinder number | ||
+ | | result byte 4: | head number | ||
+ | | result byte 5: | sector number | ||
+ | | result byte 6: | bytes per sector | ||
+ | {{tablelayout? | ||
+ | ^ Write Data | ||
+ | | command byte 0: | MT | MF | 0 | ||
+ | | command byte 1: | ? | ||
+ | | command byte 2: | cylinder number | ||
+ | | command byte 3: | head number | ||
+ | | command byte 4: | sector number | ||
+ | | command byte 5: | bytes per sector | ||
+ | | command byte 6: | end of track (last sector in track) | ||
+ | | command byte 7: | gap 3 length | ||
+ | | command byte 8: | data length (if cmd byte 5==0) | ||
+ | | result byte 0: | status register 0 |||||||| | ||
+ | | result byte 1: | status register 1 |||||||| | ||
+ | | result byte 2: | status register 2 |||||||| | ||
+ | | result byte 3: | cylinder number | ||
+ | | result byte 4: | head number | ||
+ | | result byte 5: | sector number | ||
+ | | result byte 6: | bytes per sector | ||
+ | {{tablelayout? | ||
+ | ^ Write Deleted Data ^ D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 | ||
+ | | command byte 0: | ||
+ | | command byte 1: | ||
+ | | command byte 2: | cylinder number | ||
+ | | command byte 3: | head number | ||
+ | | command byte 4: | sector number | ||
+ | | command byte 5: | bytes per sector | ||
+ | | command byte 6: | end of track (last sector in track) | ||
+ | | command byte 7: | gap 3 length | ||
+ | | command byte 8: | data length (if cmd byte 5==0) | ||
+ | | result byte 0: | status register 0 |||||||| | ||
+ | | result byte 1: | status register 1 |||||||| | ||
+ | | result byte 2: | status register 2 |||||||| | ||
+ | | result byte 3: | cylinder number | ||
+ | | result byte 4: | head number | ||
+ | | result byte 5: | sector number | ||
+ | | result byte 6: | bytes per sector | ||
+ | {{tablelayout? | ||
+ | ^ Read a Track\\ (Diagnostic) | ||
+ | | command byte 0: | 0 | ||
+ | | command byte 1: | ? | ||
+ | | command byte 2: | cylinder number | ||
+ | | command byte 3: | head number | ||
+ | | command byte 4: | sector number | ||
+ | | command byte 5: | bytes per sector | ||
+ | | command byte 6: | end of track (last sector in track) | ||
+ | | command byte 7: | gap 3 length | ||
+ | | command byte 8: | data length (if cmd byte 5==0) | ||
+ | | result byte 0: | status register 0 |||||||| | ||
+ | | result byte 1: | status register 1 |||||||| | ||
+ | | result byte 2: | status register 2 |||||||| | ||
+ | | result byte 3: | cylinder number | ||
+ | | result byte 4: | head number | ||
+ | | result byte 5: | sector number | ||
+ | | result byte 6: | bytes per sector | ||
+ | {{tablelayout? | ||
+ | ^ Read ID ^ D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 | ||
+ | | command byte 0: | 0 | ||
+ | | command byte 1: | ? | ||
+ | | result byte 0: | status register 0 |||||||| | ||
+ | | result byte 1: | status register 1 |||||||| | ||
+ | | result byte 2: | status register 2 |||||||| | ||
+ | | result byte 3: | cylinder number | ||
+ | | result byte 4: | head number | ||
+ | | result byte 5: | sector number | ||
+ | | result byte 6: | bytes per sector | ||
+ | {{tablelayout? | ||
+ | ^ Format a Track\\ (Write Sector IDs) ^ D7 | ||
+ | | command byte 0: | 0 | MF | 0 | ||
+ | | command byte 1: | ? | ? | ||
+ | | command byte 2: | bytes per sector | ||
+ | | command byte 3: | sectors per track | ||
+ | | command byte 4: | gap 3 length | ||
+ | | command byte 5: | filler pattern to write in each byte |||||||| | ||
+ | | result byte 0: | status register 0 | ||
+ | | result byte 1: | status register 1 | ||
+ | | result byte 2: | status register 2 | ||
+ | | result byte 3: | cylinder number | ||
+ | | result byte 4: | head number | ||
+ | | result byte 5: | sector number | ||
+ | | result byte 6: | bytes per sector | ||
+ | {{tablelayout? | ||
+ | ^ Scan Equal | ||
+ | | command byte 0: | MT | MF | SK | 1 | ||
+ | | command byte 1: | ? | ||
+ | | command byte 2: | cylinder number | ||
+ | | command byte 3: | head number | ||
+ | | command byte 4: | sector number | ||
+ | | command byte 5: | bytes per sector | ||
+ | | command byte 6: | end of track (last sector in track) | ||
+ | | command byte 7: | gap 3 length | ||
+ | | command byte 8: | scan test (1=scan contiguous, 2=scan alternate) | ||
+ | | result byte 0: | status register 0 |||||||| | ||
+ | | result byte 1: | status register 1 |||||||| | ||
+ | | result byte 2: | status register 2 |||||||| | ||
+ | | result byte 3: | cylinder number | ||
+ | | result byte 4: | head number | ||
+ | | result byte 5: | sector number | ||
+ | | result byte 6: | bytes per sector | ||
+ | {{tablelayout? | ||
+ | ^ Scan Low or Equal ^ D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 | ||
+ | | command byte 0: | MT | MF | SK | 1 | ||
+ | | command byte 1: | ? | ||
+ | | command byte 2: | cylinder number | ||
+ | | command byte 3: | head number | ||
+ | | command byte 4: | sector number | ||
+ | | command byte 5: | bytes per sector | ||
+ | | command byte 6: | end of track (last sector in track) | ||
+ | | command byte 7: | gap 3 length | ||
+ | | command byte 8: | scan test (1=scan contiguous, 2=scan alternate) | ||
+ | | result byte 0: | status register 0 |||||||| | ||
+ | | result byte 1: | status register 1 |||||||| | ||
+ | | result byte 2: | status register 2 |||||||| | ||
+ | | result byte 3: | cylinder number | ||
+ | | result byte 4: | head number | ||
+ | | result byte 5: | sector number | ||
+ | | result byte 6: | bytes per sector | ||
+ | {{tablelayout? | ||
+ | ^ Scan High or Equal ^ D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 | ||
+ | | command byte 0: | ||
+ | | command byte 1: | ||
+ | | command byte 2: | cylinder number | ||
+ | | command byte 3: | head number | ||
+ | | command byte 4: | sector number | ||
+ | | command byte 5: | bytes per sector | ||
+ | | command byte 6: | end of track (last sector in track) | ||
+ | | command byte 7: | gap 3 length | ||
+ | | command byte 8: | scan test (1=scan contiguous, 2=scan alternate) | ||
+ | | result byte 0: | status register 0 |||||||| | ||
+ | | result byte 1: | status register 1 |||||||| | ||
+ | | result byte 2: | status register 2 |||||||| | ||
+ | | result byte 3: | cylinder number | ||
+ | | result byte 4: | head number | ||
+ | | result byte 5: | sector number | ||
+ | | result byte 6: | bytes per sector | ||
+ | {{tablelayout? | ||
+ | ^ Recalibrate | ||
+ | | command byte 0: | 0 | ||
+ | | command byte 1: | ? | ||
+ | | returns nothing | ||
+ | {{tablelayout? | ||
+ | ^ Sense Interrupt\\ Status | ||
+ | | command byte 0: | ||
+ | | result byte 0: | status register 0 |||||||| | ||
+ | | result byte 1: | present cylinder number | ||
+ | {{tablelayout? | ||
+ | ^ Specify Step & \\ Head Load ^ D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 ^ D0 ^ | ||
+ | | command byte 0: | 0 | ||
+ | | command byte 1: | step rate time - head unload time |||||||| | ||
+ | | command byte 2: | ------head load time------ ND | ||
+ | | returns nothing | ||
+ | {{tablelayout? | ||
+ | ^ Sense Drive\\ Status | ||
+ | | command byte 0: | ||
+ | | command byte 1: | ||
+ | | result byte 0: | status register 3 |||||||| | ||
+ | {{tablelayout? | ||
+ | ^ Seek | ||
+ | | command byte 0: | 0 | ||
+ | | command byte 1: | ? | ||
+ | | command byte 2: | new cylinder number | ||
+ | | returns nothing | ||
+ | {{tablelayout? | ||
+ | ^ µPD765 Version | ||
+ | | command byte 0: | ? | ? | ||
+ | | result byte 0: | status register 0 | ||
+ | | | 90h = µPD765B; | ||
- | |Read Deleted Data | D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 | + | |Invalid Command |
- | |command byte 0: |MT | MF | SK |0 | 1 |1 | 0 |0 | | + | |result byte 0: |
- | |command byte 1: | ? |? | ? |? | ? | HD | US1 |US0 | | + | |
- | |command byte 2: |cylinder number | + | |
- | |command byte 3: |head number | + | |
- | |command byte 4: |sector number | + | |
- | |command byte 5: |bytes per sector | + | |
- | |command byte 6: |end of track (last sector in track) | + | |
- | |command byte 7: |gap 3 length | + | |
- | |command byte 8: |data length (if cmd byte 5==0) | + | |
- | |result byte 0: | + | |
- | |result byte 1: | + | |
- | |result byte 2: | + | |
- | |result byte 3: | + | |
- | |result byte 4: |head number | + | |
- | |result byte 5: | + | |
- | |result byte 6: | + | |
- | |Write Data | D7 | + | === Key to Abbreviations === |
- | |command byte 0: |MT | MF | 0 |0 | 0 |1 | 0 |1 | | + | {{tablelayout? |
- | |command byte 1: | ? |? | ? |? | ? | HD | US1 | US0 | | + | ^ |
- | |command byte 2: |cylinder number | + | ^ |
- | |command byte 3: |head number | + | ^ MF | MFM mode | |
- | |command byte 4: |sector number | + | ^ ND | Non-DMA mode |
- | |command byte 5: |bytes per sector | + | ^ SK | SKip Deleted-data address mark |
- | |command byte 6: |end of track (last sector in track) | + | ^ US0 |
- | |command byte 7: |gap 3 length | + | ^ US1 |
- | |command byte 8: |data length (if cmd byte 5==0) | + | |
- | |result byte 0: | + | |
- | |result byte 1: | + | |
- | |result byte 2: | + | |
- | |result byte 3: | + | |
- | |result byte 4: |head number | + | |
- | |result byte 5: | + | |
- | |result byte 6: | + | |
- | |Write Deleted Data | D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 | + | |
- | |command byte 0: |MT | MF | 0| 0 | 1 |0 | 0 |1 | | + | |
- | |command byte 1: | ? |? | ? |? | ? | HD | US1 |US0 | | + | |
- | |command byte 2: |cylinder number | + | |
- | |command byte 3: |head number | + | |
- | |command byte 4: |sector number | + | |
- | |command byte 5: |bytes per sector | + | |
- | |command byte 6: |end of track (last sector in track) | + | |
- | |command byte 7: |gap 3 length | + | |
- | |command byte 8: |data length (if cmd byte 5==0) | + | |
- | |result byte 0: | + | |
- | |result byte 1: | + | |
- | |result byte 2: | + | |
- | |result byte 3: | + | |
- | |result byte 4: |head number | + | |
- | |result byte 5: | + | |
- | |result byte 6: | + | |
- | |Read a Track\\ (Diagnostic)| D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 | ||
- | |command byte 0: | 0 | MF | SK |0 | 0 |0 | 1 |0 | | ||
- | |command byte 1: | ? |? | ? |? | ?| HD | US1| US0 | | ||
- | |command byte 2: |cylinder number | ||
- | |command byte 3: |head number | ||
- | |command byte 4: |sector number | ||
- | |command byte 5: |bytes per sector | ||
- | |command byte 6: |end of track (last sector in track) | ||
- | |command byte 7: |gap 3 length | ||
- | |command byte 8: |data length (if cmd byte 5==0) | ||
- | |result byte 0: | ||
- | |result byte 1: | ||
- | |result byte 2: | ||
- | |result byte 3: | ||
- | |result byte 4: |head number | ||
- | |result byte 5: | ||
- | |result byte 6: | ||
- | |||
- | |Read ID | D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 | ||
- | |command byte 0: | 0 | MF | 0 |0 | 1 |0 | 1 |0 | | ||
- | |command byte 1: | ?| ? | ?| ? | ? | HD | US1 |US0 | | ||
- | |result byte 0: | ||
- | |result byte 1: | ||
- | |result byte 2: | ||
- | |result byte 3: | ||
- | |result byte 4: |head number | ||
- | |result byte 5: | ||
- | |result byte 6: | ||
- | |||
- | |Format a Track\\ (Write Sector IDs) | D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 | ||
- | |command byte 0: | 0 | MF | 0 |0 | 1 |1 | 0| 1 | | ||
- | |command byte 1: | ? |? | ? |? | ? | HD | US1 |US0 | | ||
- | |command byte 2: |bytes per sector | ||
- | |command byte 3: |sectors per track |||||||| | ||
- | |command byte 4: |gap 3 length | ||
- | |command byte 5: |filler pattern to write in each byte | ||
- | |result byte 0: | ||
- | |result byte 1: | ||
- | |result byte 2: | ||
- | |result byte 3: | ||
- | |result byte 4: |head number | ||
- | |result byte 5: | ||
- | |result byte 6: | ||
- | |||
- | |Scan Equal | ||
- | |command byte 0: |MT | MF | SK 1 | 0 |0 | 0 |1 | | ||
- | |command byte 1: | ? |? | ? |? | ? |HD | US1 |US0 | | ||
- | |command byte 2: |cylinder number | ||
- | |command byte 3: |head number | ||
- | |command byte 4: |sector number | ||
- | |command byte 5: |bytes per sector | ||
- | |command byte 6: |end of track (last sector in track) | ||
- | |command byte 7: |gap 3 length | ||
- | |command byte 8: |scan test (1=scan contiguous, 2=scan alternate) | ||
- | |result byte 0: | ||
- | |result byte 1: | ||
- | |result byte 2: | ||
- | |result byte 3: | ||
- | |result byte 4: |head number | ||
- | |result byte 5: | ||
- | |result byte 6: | ||
- | |||
- | |Scan Low or Equal | D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 | ||
- | |command byte 0: |MT | MF | SK |1 | 1 |0 | 0 |1 | | ||
- | |command byte 1: | ?| ? | ? | ? | ? | HD | US1 |US0 | | ||
- | |command byte 2: |cylinder number | ||
- | |command byte 3: |head number | ||
- | |command byte 4: |sector number | ||
- | |command byte 5: |bytes per sector | ||
- | |command byte 6: |end of track (last sector in track) | ||
- | |command byte 7: |gap 3 length | ||
- | |command byte 8: |scan test (1=scan contiguous, 2=scan alternate) | ||
- | |result byte 0: | ||
- | |result byte 1: | ||
- | |result byte 2: | ||
- | |result byte 3: | ||
- | |result byte 4: |head number | ||
- | |result byte 5: | ||
- | |result byte 6: | ||
- | |||
- | |Scan High or Equal | D7 ^ D6 ^ D5 ^ D4 ^ D3 ^ D2 ^ D1 | ||
- | |command byte 0: |MT | MF | SK |1 | 1| 1 | 0 |1 | | ||
- | |command byte 1: | ? |? | ? |? | ? | HD | US1 | US0 | | ||
- | |command byte 2: |cylinder number | ||
- | |command byte 3: |head number | ||
- | |command byte 4: |sector number | ||
- | |command byte 5: |bytes per sector | ||
- | |command byte 6: |end of track (last sector in track) | ||
- | |command byte 7: |gap 3 length | ||
- | |command byte 8: |scan test (1=scan contiguous, 2=scan alternate) | ||
- | |result byte 0: | ||
- | |result byte 1: | ||
- | |result byte 2: | ||
- | |result byte 3: | ||
- | |result byte 4: |head number | ||
- | |result byte 5: | ||
- | |result byte 6: | ||
- | |||
- | |Recalibrate | ||
- | |command byte 0: | 0| 0 | 0 |0 | 0| 1| | ||
- | |command byte 1: | ? |? | ? |? | ? |0 | US1| US0 | | ||
- | |returns nothing | ||
- | |||
- | |Sense Interrupt\\ Status | ||
- | |command byte 0: | 0 |0 | 0| 0 | 1 |0 | 0| 0 | | ||
- | |result byte 0: | ||
- | |result byte 1: | ||
- | |||
- | |Specify Step & \\ Head Load | D7 | ||
- | |command byte 0: | 0 | 0 | 0 |0 | 0 |0 | 1| 1 | | ||
- | |command byte 1: |step rate time - head unload time |||||||| | ||
- | |command byte 2: |------head load time------ ND | ||
- | |returns nothing | ||
- | |||
- | |Sense Drive\\ Status | ||
- | |command byte 0: | 0 |0 | 0 |0 | 0 |1 | 0 | 0 | | ||
- | |command byte 1: | ? |? | ?| ? | ? | HD | US1| US0 | | ||
- | |result byte 0: | ||
- | |||
- | |Seek | ||
- | |command byte 0: | 0 |0 | 0| 0 | 1| 1 | ||
- | |command byte 1: | ? |?| ? |? | ? |HD | US1 |US0 | | ||
- | |command byte 2: |new cylinder number | ||
- | |returns nothing | ||
- | |||
- | |µPD765 Version | ||
- | |command byte 0: | ? |? | ? |1 | 0| 0 | 0| 0 | | ||
- | |result byte 0: | ||
- | | |90h = µPD765B; | ||
- | |||
- | |Invalid Command | ||
- | |result byte 0: | ||
<WRAP round box> | <WRAP round box> | ||
* PS/2 systems use the 8272A diskette controller which is software and port compatible with the NEC µPD765 | * PS/2 systems use the 8272A diskette controller which is software and port compatible with the NEC µPD765 | ||
- | * accessed through ports 3F0h-3F7h; NEC µPD765 is accessed through ports 3F2h, 3F4h and 3F5h; the 8272A uses ports 3F0h, 3F1h, 3F2h, 3F4h, 3F5h and 3F7h | + | * accessed through ports 3F0h-3F7h;\\ NEC µPD765 is accessed through ports 3F2h, 3F4h and 3F5h;\\ the 8272A uses ports 3F0h, 3F1h, 3F2h, 3F4h, 3F5h and 3F7h |
* data, command and status registers are all accessed through port 3F5h a register stack with one address presented to the bus | * data, command and status registers are all accessed through port 3F5h a register stack with one address presented to the bus | ||
* bit 7 of BIOS Data Area byte 40:3E can be polled to determine if a disk operation has completed; this bit is set by the interrupt handler when the operation has completed; it should be reset before continuing on with the next FDC operation | * bit 7 of BIOS Data Area byte 40:3E can be polled to determine if a disk operation has completed; this bit is set by the interrupt handler when the operation has completed; it should be reset before continuing on with the next FDC operation | ||
Ligne 378: | Ligne 393: | ||
* see [[back2root: | * see [[back2root: | ||
- | * see [[back2root: | + | * see [[back2root: |