OSWORD &FF
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
- OSWORD &05
- OSWORD &06
- OSWORD &72
- OSWORD &FA
- OSWORD &FB
- OSWORD &FC
- OSWORD &FD
- OSWORD &FE
- OSWORD &FE source code
- OSWORDs list at mdfs.net
References
Jgharston 14:30, 26 May 2009 (UTC) Jgharston 00:06, 31 January 2016 (UTC) Jgharston (talk) 11:05, 17 December 2024 (CET)