Difference between revisions of "OSWORD &FE"
m (1 revision) |
m (Added template.) |
||
(7 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | [[Category:OSWORD]] | + | [[Category:OSWORD]][[Category:Second Processors]]__NOTOC__ |
− | OSWORD &FE (254) - | + | {{PageTitle|OSWORD &FE (254) Z80 Tube FM disk access}} |
+ | ==Single density disk access (Z80 Tube OS)== | ||
+ | This OSWORD call is installed by the Z80 v2 Tube client. | ||
+ | On entry: | ||
+ | XY?0 = &10 (send block length) | ||
+ | XY?1 = &03 (receive block length) | ||
+ | The rest of the block is a SCSI command block similar to OSWORD &72 | ||
+ | XY?2 = returned result, 0=ok, &00+n=HDD error, &40+n=FDD error | ||
+ | XY!3 = data address | ||
+ | XY?7 = command | ||
+ | XY?8 = drive number in b5-b7, sector b16-b20 in b0-b4 | ||
+ | XY?9 = sector number b8-b15 | ||
+ | XY?10 = sector number b0-b7 | ||
+ | XY?11 = number of sectors (what does &00 mean?) | ||
+ | XY?12 = drive flags, b7=drive 0, b6=drive 1, etc. | ||
+ | XY?13 = drive 0 settings | ||
+ | XY?14 = drive 1 settings | ||
+ | XY?15 = etc. | ||
+ | XY?20 = drive 7 settings | ||
− | + | This is loaded by the Z80 Tube v2 client code from $.CPM.X (for BBC B/B+) or $.CPM.Y | |
+ | (for Master) from ADFS. It provides FM (single-density) disk access when DFS OSWORD &7F | ||
+ | is not available. MFM (double-density) disk access is provided by OSWORD &72 on the | ||
+ | assumption that if ADFS is present, which is implied by being able to load $.CPM.X from | ||
+ | ADFS, then ADFS's OSWORD &72 is available. | ||
+ | The floppy disk layout used is 2 sides x 80 tracks x 10 sectors x 256 bytes FM. | ||
− | + | ===Commands=== | |
+ | &08 Read data | ||
+ | &09 Read Verify | ||
+ | &0A Write data | ||
+ | &0B Seek track | ||
+ | If the drive flag is set in XY?12, the drive setting in XY+13 onwards is used, and the drive | ||
+ | seeks for track 0 before the operation. | ||
+ | Known code only implements command &08, &0A and &0B. | ||
− | == | + | ===Results=== |
− | + | &00 Ok &40 FDD Write protected | |
+ | &08 CRC error in data (FDC status &08) | ||
+ | &10 Sector not found (FDC status &10) | ||
+ | &18 CRC error in ID (FDC status &18) | ||
+ | &20 Invalid command to controller &60 Bad SCSI command | ||
+ | &21 Illegal disc address - beyond end of disk &61 Bad disc address | ||
+ | &22 unused &62 unused | ||
+ | &23 Volume error &63 Volume error | ||
+ | &24 Invalid parameter to controller &64 Bad arguments | ||
+ | &25 Illegal drive number &65 Bad drive | ||
+ | &26 Invalid field in parameter list/Timeout &66 Drive timed out | ||
+ | &27 Unsupported controller command &67 Unsupported SCSI command | ||
+ | &2F Abort &6F Abort | ||
+ | Bit 6 of the result is used to indicate if the error is from the hard drive | ||
+ | controller or the floppy controller. Floppy errors are the same as hard drive | ||
+ | errors, ORed with &40. Floppy errors are also the 1770 status byte ORed with &40. | ||
+ | |||
+ | However, the known OSWORD &FE driver omits setting &40 when returning the result. | ||
+ | |||
+ | ===Notes=== | ||
+ | * The default code fails if called from the I/O processor with the control block at &xxFE or &xxFF due to incrementing X without carrying the overflow into Y. | ||
+ | |||
+ | ==DOS Hard disk control (80x86 DOS)== | ||
+ | The 6502 host support code in 6502.SYS installed by the 80x86 DOS just returns | ||
+ | from OSWORD &FE. | ||
+ | |||
+ | ==See also== | ||
+ | * [[OSWORD &72]] | ||
+ | * [http://mdfs.net/Software/Tube/Utils/ OSWORD &FE source code] | ||
+ | * [http://mdfs.net/Docs/Comp/BBC/Oswords OSWORDs list at mdfs.net] | ||
+ | {{TubeOSWORD}} | ||
[[User:Jgharston|Jgharston]] 14:29, 26 May 2009 (UTC) | [[User:Jgharston|Jgharston]] 14:29, 26 May 2009 (UTC) | ||
+ | [[User:Jgharston|Jgharston]] 03:29, 20 July 2020 (CEST) | ||
+ | [[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) |
Latest revision as of 11:46, 17 December 2024
Single density disk access (Z80 Tube OS)
This OSWORD call is installed by the Z80 v2 Tube client.
On entry: XY?0 = &10 (send block length) XY?1 = &03 (receive block length) The rest of the block is a SCSI command block similar to OSWORD &72 XY?2 = returned result, 0=ok, &00+n=HDD error, &40+n=FDD error XY!3 = data address XY?7 = command XY?8 = drive number in b5-b7, sector b16-b20 in b0-b4 XY?9 = sector number b8-b15 XY?10 = sector number b0-b7 XY?11 = number of sectors (what does &00 mean?) XY?12 = drive flags, b7=drive 0, b6=drive 1, etc. XY?13 = drive 0 settings XY?14 = drive 1 settings XY?15 = etc. XY?20 = drive 7 settings
This is loaded by the Z80 Tube v2 client code from $.CPM.X (for BBC B/B+) or $.CPM.Y (for Master) from ADFS. It provides FM (single-density) disk access when DFS OSWORD &7F is not available. MFM (double-density) disk access is provided by OSWORD &72 on the assumption that if ADFS is present, which is implied by being able to load $.CPM.X from ADFS, then ADFS's OSWORD &72 is available.
The floppy disk layout used is 2 sides x 80 tracks x 10 sectors x 256 bytes FM.
Commands
&08 Read data &09 Read Verify &0A Write data &0B Seek track
If the drive flag is set in XY?12, the drive setting in XY+13 onwards is used, and the drive seeks for track 0 before the operation.
Known code only implements command &08, &0A and &0B.
Results
&00 Ok &40 FDD Write protected &08 CRC error in data (FDC status &08) &10 Sector not found (FDC status &10) &18 CRC error in ID (FDC status &18) &20 Invalid command to controller &60 Bad SCSI command &21 Illegal disc address - beyond end of disk &61 Bad disc address &22 unused &62 unused &23 Volume error &63 Volume error &24 Invalid parameter to controller &64 Bad arguments &25 Illegal drive number &65 Bad drive &26 Invalid field in parameter list/Timeout &66 Drive timed out &27 Unsupported controller command &67 Unsupported SCSI command &2F Abort &6F Abort
Bit 6 of the result is used to indicate if the error is from the hard drive controller or the floppy controller. Floppy errors are the same as hard drive errors, ORed with &40. Floppy errors are also the 1770 status byte ORed with &40.
However, the known OSWORD &FE driver omits setting &40 when returning the result.
Notes
- The default code fails if called from the I/O processor with the control block at &xxFE or &xxFF due to incrementing X without carrying the overflow into Y.
DOS Hard disk control (80x86 DOS)
The 6502 host support code in 6502.SYS installed by the 80x86 DOS just returns from OSWORD &FE.
See also
Tube OSWORD calls | |
---|---|
|
|
Jgharston 14:29, 26 May 2009 (UTC) Jgharston 03:29, 20 July 2020 (CEST) Jgharston (talk)