Difference between revisions of "OSWORD &FA"

From BeebWiki
Jump to: navigation, search
m (1 revision)
m (.)
 
Line 1: Line 1:
[[Category:OSWORD]]
+
[[Category:OSWORD]][[Category:Second Processors]]__NOTOC__
OSWORD &FA (250) - Data transfer over Tube 80x86 Tube OS
+
==OSWORD &FA (250) - Data transfer over Tube (80x86 Tube OS)==
  
On entry:
+
  On entry:
  XY?0    =&0D or &0E (send block length)
+
    XY?0    =&0D or &0E (send block length)
  XY?1    =&10 (receive block length)
+
    XY?1    =&10 (receive block length)
  XY!2    =I/O processor address
+
    XY!2    =I/O processor address
  XY+6..7  =80x86 offset address
+
    XY+6..7  =80x86 offset address
  XY+8..9  =80x86 segment address
+
    XY+8..9  =80x86 segment address
  XY+10..11=data length
+
    XY+10..11=data length
  XY?12    =function
+
    XY?12    =function
  XY?13    =memory access control if XY?0=&0E.
+
    XY?13    =memory access control if XY?0=&0E.
  
The functions are the same as the Tube values:
+
The functions are the same as the Tube values:
  0 - write to I/O as single bytes
+
0 - write to I/O as single bytes
  1 - read from I/O as single bytes
+
1 - read from I/O as single bytes
  2 - write to I/O as byte pairs
+
2 - write to I/O as byte pairs
  3 - read from I/O as byte pairs
+
3 - read from I/O as byte pairs
  6 - write to I/O as groups of 256 bytes
+
6 - write to I/O as groups of 256 bytes
  7 - read from I/O as groups of 256 bytes
+
7 - read from I/O as groups of 256 bytes
  
If the memory access control byte is used, its format is:
+
If the memory access control byte is not used the I/O address at XY!2
  b0-b3=ROM number
+
accesses the main I/O memory and whichever ROM happens to be paged in when
  b4  =0 use specified ROM, b4=1 use current ROM
+
the call is made - usually the current language. If the memory access
  b5  =0 use main memory, b5=1 use screen memory
+
control byte is used, its format is:
  b6  =1 ignore b5 and use shadow memory
+
b0-b3=ROM number
  b7  unused.
+
b4  =0 use specified ROM, b4=1 use current ROM
 +
b5  =0 use main memory, b5=1 use screen memory
 +
b6  =1 ignore b5 and use shadow memory
 +
b7  unused.
  
 
==See Also==
 
==See Also==
 +
* [[OSWORD &05]]
 +
* [[OSWORD &06]]
 +
* [[OSWORD &FF]]
 
* http://mdfs.net/Docs/Comp/BBC/Oswords
 
* http://mdfs.net/Docs/Comp/BBC/Oswords
  
 
[[User:Jgharston|Jgharston]] 14:26, 26 May 2009 (UTC)
 
[[User:Jgharston|Jgharston]] 14:26, 26 May 2009 (UTC)
 +
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 00:05, 31 January 2016 (UTC)

Latest revision as of 02:05, 31 January 2016

OSWORD &FA (250) - Data transfer over Tube (80x86 Tube OS)

 On entry:
   XY?0     =&0D or &0E (send block length)
   XY?1     =&10 (receive block length)
   XY!2     =I/O processor address
   XY+6..7  =80x86 offset address
   XY+8..9  =80x86 segment address
   XY+10..11=data length
   XY?12    =function
   XY?13    =memory access control if XY?0=&0E.

The functions are the same as the Tube values:

  • 0 - write to I/O as single bytes
  • 1 - read from I/O as single bytes
  • 2 - write to I/O as byte pairs
  • 3 - read from I/O as byte pairs
  • 6 - write to I/O as groups of 256 bytes
  • 7 - read from I/O as groups of 256 bytes

If the memory access control byte is not used the I/O address at XY!2 accesses the main I/O memory and whichever ROM happens to be paged in when the call is made - usually the current language. If the memory access control byte is used, its format is:

  • b0-b3=ROM number
  • b4 =0 use specified ROM, b4=1 use current ROM
  • b5 =0 use main memory, b5=1 use screen memory
  • b6 =1 ignore b5 and use shadow memory
  • b7 unused.

See Also

Jgharston 14:26, 26 May 2009 (UTC) Jgharston (talk) 00:05, 31 January 2016 (UTC)