Difference between revisions of "OSWORD &FF"

From BeebWiki
Jump to: navigation, search
m (Slight formatting changes.)
(Rewrote 80x86 transaction description.)
Line 1: Line 1:
 
[[Category:OSWORD]][[Category:Second Processors]]__NOTOC__
 
[[Category:OSWORD]][[Category:Second Processors]]__NOTOC__
{{PageTitle|OSWORD &FF (255) - Data transfer over Tube}}
+
{{PageTitle|OSWORD &FF (255) Data transfer over Tube}}
 
==Data transfer over Tube==
 
==Data transfer over Tube==
 
This OSWORD call is installed by the Z80 Tube client.
 
This OSWORD call is installed by the Z80 Tube client.
Line 11: Line 11:
 
     XY?12    =command, 0=write to I/O, 1=read from I/O
 
     XY?12    =command, 0=write to I/O, 1=read from I/O
 
     The control block is not updated on return.
 
     The control block is not updated on return.
 +
 +
The commands are the same as the Tube values:
 +
* 0 - write single bytes to I/O
 +
* 1 - read single bytes from I/O
  
 
The I/O address at XY!2 accesses the main I/O memory and whichever ROM
 
The I/O address at XY!2 accesses the main I/O memory and whichever ROM
Line 27: Line 31:
 
any second processor<ref name="code">[http://mdfs.net/Software/Tube/Z80/ Osword &FF code]</ref>.
 
any second processor<ref name="code">[http://mdfs.net/Software/Tube/Z80/ Osword &FF code]</ref>.
  
==DOS fast screen control==
+
The code installed by the Z80 Tube client v1.36 and later also implements
 +
2-byte data transfers, the data length must be even:
 +
* 0 - write single bytes to I/O
 +
* 1 - read single bytes from I/O
 +
* 2 - write byte pairs to I/O
 +
* 3 - read byte pairs from I/O
 +
 
 +
==DOS fast screen control (80x86 DOS)==
 
This OSWORD call is installed by the 80x86 DOS BIOS.
 
This OSWORD call is installed by the 80x86 DOS BIOS.
  On entry:
 
    XY?0    =&00 (send block length)
 
    XY?1    =&00 (receive block length)
 
 
The control block is ignored, so for speed, set XY?0=0 and XY?1=0.
 
 
Commands are sent from the 80x86 via Tube register 2. First, the address is sent,
 
high byte then low byte. This address is updated for the data sent and wraps round
 
from &7FFF to &4000. If the high byte is &00, no low byte is sent, and the routine
 
finishes.
 
 
After an address has been sent, a command loop is entered. The command is sent
 
through Tube register 2. Commands are:
 
  
* &FF - single byte read through Tube register 1 fills the following eight bytes of screen memory.
+
Commands are sent from the 80x86 via Tube Register 2 within the OSWORD protocol,
* &00 - eight bytes read though Tube register 1 fill following eight bytes of screen memory.
+
so cannot be called through the normal OSWORD mechanism. The transaction must be
* Other - loop back to wait for address or termination.
+
done manually by the client by sending through Tube Register 2:
 +
    &08 : Start OSWORD transaction
 +
    &FF : OSWORD call &FF
 +
    &00 : TxLen=0
 +
 
 +
  Then address/command pairs are sent. The address is sent, high byte then low byte. This
 +
  address is updated for the data sent and wraps round from &7FFF to &4000. If the high
 +
  byte is &00, no low byte is sent, and the routine finishes. Commands are:
 +
    &FF : Read a single byte from through Tube register 1 to fill the following eight
 +
          bytes of screen memory.
 +
    &00 : Read eight bytes from Tube register 1 fill the following eight bytes of
 +
          screen memory.
 +
  Other: Loop back to wait for address or termination.
 +
 
 +
  Then finish with:
 +
    &00 : RxLen=0, terminate the OSWORD call
  
 
==See also==
 
==See also==
 
* [[OSWORD &05]]
 
* [[OSWORD &05]]
 
* [[OSWORD &06]]
 
* [[OSWORD &06]]
 +
* [[OSWORD &72]]
 
* [[OSWORD &FA]]
 
* [[OSWORD &FA]]
 +
* [[OSWORD &FB]]
 +
* [[OSWORD &FC]]
 +
* [[OSWORD &FD]]
 +
* [[OSWORD &FE]]
 +
* [http://mdfs.net/Software/Tube/Utils/ OSWORD &FE source code]
 
* [http://mdfs.net/Docs/Comp/BBC/Oswords OSWORDs list at mdfs.net]
 
* [http://mdfs.net/Docs/Comp/BBC/Oswords OSWORDs list at mdfs.net]
* [http://mdfs.net/Software/Tube/Utils/ OSWORD &FF source code]
 
  
 
==References==
 
==References==
Line 58: Line 76:
  
 
[[User:Jgharston|Jgharston]] 14:30, 26 May 2009 (UTC)
 
[[User:Jgharston|Jgharston]] 14:30, 26 May 2009 (UTC)
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 00:06, 31 January 2016 (UTC)
+
[[User:Jgharston|Jgharston]] 00:06, 31 January 2016 (UTC)
 +
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 11:05, 17 December 2024 (CET)

Revision as of 11:05, 17 December 2024

OSWORD &FF (255) Data transfer over Tube

Data transfer over Tube

This OSWORD call is installed by the Z80 Tube client.

 On entry:
   XY?0     =&0D (send block length)
   XY?1     =&01 (receive block length)
   XY!2     =I/O address
   XY!6     =Z80 address
   XY+10..11=data length, &0000=nothing to transfer
   XY?12    =command, 0=write to I/O, 1=read from I/O
   The control block is not updated on return.

The commands are the same as the Tube values:

  • 0 - write single bytes to I/O
  • 1 - read single bytes from I/O

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. An updated version of the OSWORD &FF code uses the full I/O addressing range to access sideways ROMs and both banks of screen memory[1]:

 &FFFFxxxx - Main memory
 &FFFExxxx - Currently displayed screen memory
 &FFFDxxxx - Shadow screen memory
 &FFxRxxxx - Sideways ROM/RAM R
 &FF8xxxxx - VDU workspace RAM

The OSWORD &FF code is available as a *runnable file that can be used with any second processor[1].

The code installed by the Z80 Tube client v1.36 and later also implements 2-byte data transfers, the data length must be even:

  • 0 - write single bytes to I/O
  • 1 - read single bytes from I/O
  • 2 - write byte pairs to I/O
  • 3 - read byte pairs from I/O

DOS fast screen control (80x86 DOS)

This OSWORD call is installed by the 80x86 DOS BIOS.

Commands are sent from the 80x86 via Tube Register 2 within the OSWORD protocol, so cannot be called through the normal OSWORD mechanism. The transaction must be done manually by the client by sending through Tube Register 2:

   &08 : Start OSWORD transaction
   &FF : OSWORD call &FF
   &00 : TxLen=0
 
 Then address/command pairs are sent. The address is sent, high byte then low byte. This
 address is updated for the data sent and wraps round from &7FFF to &4000. If the high
 byte is &00, no low byte is sent, and the routine finishes. Commands are:
   &FF : Read a single byte from through Tube register 1 to fill the following eight
         bytes of screen memory.
   &00 : Read eight bytes from Tube register 1 fill the following eight bytes of
         screen memory.
  Other: Loop back to wait for address or termination.
 
 Then finish with:
   &00 : RxLen=0, terminate the OSWORD call

See also

References

Jgharston 14:30, 26 May 2009 (UTC) Jgharston 00:06, 31 January 2016 (UTC) Jgharston (talk) 11:05, 17 December 2024 (CET)