Difference between revisions of "OSWORD &FA"
m (1 revision) |
m (.) |
||
Line 1: | Line 1: | ||
− | [[Category:OSWORD]] | + | [[Category:OSWORD]][[Category:Second Processors]]__NOTOC__ |
− | OSWORD &FA (250) - Data transfer over Tube | + | ==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== | ==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 01: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)