Difference between revisions of "OSWORD &62"

From BeebWiki
Jump to: navigation, search
m
m (1 revision)
Line 1: Line 1:
 
[[Category:OSWORD]]
 
[[Category:OSWORD]]
OSWORD &62 (98 ) - Access LVROM controller  
+
OSWORD &62 (98 ) - Access LVROM controller VFS
__TOC__
+
==Specification==
+
    Same format as ADFS call &72 (114)
+
    On entry:
+
        XY?0  = 0, returned result
+
        XY!1  = data address
+
        XY?5  = command
+
        XY?6  = drive number in b5-b7, sector b16-b20 in b0-b4
+
        XY?7  = sector number b8-b15
+
        XY?8  = sector number b0-b7
+
        XY?9  = number of sectors or 0
+
        XY?10 = 0
+
        XY!11 = data length if X%?9=0
+
This is a standard SCSI command block. The drive number in XY?6 is ORed with
+
the current drive. If VFS is not selected when the call is made, VFS is
+
selected. Consequently, any code that calls OSWORD &62 must remember the
+
current filing system and restore it afterwards. In practice it is easier
+
to select VFS before calling OSWORD &62.
+
  
===Commands===
+
Same format as ADFS call &72 (114). Commands are:
    &00=Test drive ready
+
  &00=Test drive ready
    &01=Seek track 0
+
  &01=Seek track 0
    &03=Request status
+
  &03=Request status
    &08=Read data
+
  &08=Read sectors
    &0B=Seek track
+
  &1B=Stop/Start drive; stop if XY?9=0, start if XY?9=1
    &1B=Stop/Start drive; stop if XY?9=0, start if XY?9=1
+
  &C8=Read F-code result from LVDOS
    &C8=Read F-code result from LVDOS
+
  &CA=Transmit F-code to LVDOS
    &CA=Transmit F-code to LVDOS
+
Results are:
 
+
  &02=Drive door open
===Results===
+
  &03=Media error, eg disk dirty
    &00=Ok
+
  &05=Bad SCSI command
    &02=Drive door open
+
    &03=Media error, eg disk dirty
+
    &05=Bad SCSI command
+
    &04=Not ready
+
    &40=Write protected
+
    &48=CRC error
+
    &50=Sector not found
+
    &60=Bad command
+
    &61=Bad address
+
    &63=Volume error
+
    &65=Bad drive
+
    &6F=Abort
+
 
+
The result byte can be preloaded with a value to return if no OSWORD &62
+
routine exists. For instance, preloading the result with &00 makes all such
+
failed calls appear to succeed, preloading with &50 makes all calls appear
+
to return 'Sector not found'.
+
 
+
===Coding===
+
The following routine can be used to perform an OSWORD &62 call. It requires
+
X%=>15-byte control block, Y%=X%DIV256.
+
 
+
    DEFFNlvfs(cmd%,addr%,num%,sect%,drv%):LOCALfs%
+
    fs%=FNfs:IFfs%<>10:*FX143,18,10
+
    X%?0=0:X%!1=addr%:X%?5=cmd%:X%?6=drv%*32+((sect%AND&1F0000)DIV65536)
+
    X%?7=((sect%AND&FF00)DIV256):X%?8=sect%:X%!9=0:X%!11=num%
+
    A%=&62:CALL&FFF1:A%=?X%:IFfs%<>10:OSCLI"FX143,18,"+STR$fs%
+
    =A%
+
    DEFFNfs:LOCALA%,E%,Y%:=(USR&FFDA)AND&FF
+
  
 
==See Also==
 
==See Also==
* [[OSWORD &72]]
 
* http://mdfs.net/Docs/Comp/BBC/Osword/Osword62
 
 
* http://mdfs.net/Docs/Comp/BBC/Oswords
 
* http://mdfs.net/Docs/Comp/BBC/Oswords
  
 
[[User:Jgharston|Jgharston]] 14:00, 26 May 2009 (UTC)
 
[[User:Jgharston|Jgharston]] 14:00, 26 May 2009 (UTC)

Revision as of 01:13, 8 March 2015

OSWORD &62 (98 ) - Access LVROM controller VFS

Same format as ADFS call &72 (114). Commands are:
 &00=Test drive ready
 &01=Seek track 0
 &03=Request status
 &08=Read sectors
 &1B=Stop/Start drive; stop if XY?9=0, start if XY?9=1
 &C8=Read F-code result from LVDOS
 &CA=Transmit F-code to LVDOS
Results are:
 &02=Drive door open
 &03=Media error, eg disk dirty
 &05=Bad SCSI command

See Also

Jgharston 14:00, 26 May 2009 (UTC)