Difference between revisions of "OSWORD &05"
(Added implementation details and single-byte code.) |
m (.) |
||
Line 1: | Line 1: | ||
− | [[Category:OSWORD]] | + | [[Category:OSWORD]][[Category:Second Processors]]__NOTOC__ |
− | OSWORD &05 (5) - Read I/O processor memory | + | ==OSWORD &05 (5) - Read I/O processor memory (Acorn MOS 1.00 and later)== |
− | Acorn MOS 1.00 and later | ||
− | + | On entry: | |
− | + | XY!0=address to read from | |
− | + | On exit: | |
− | + | XY?4=the byte read | |
− | Some systems recognise screen memory at &FFFExxxx and sideways ROMs at &FFrr8000-&FFrrBFFF. | + | Some systems recognise screen memory at &FFFExxxx and sideways ROMs at |
+ | &FFrr8000-&FFrrBFFF. | ||
==Coding== | ==Coding== | ||
Line 15: | Line 15: | ||
<code>X%</code>=>5-byte control block, <code>Y%=X%DIV256</code>. | <code>X%</code>=>5-byte control block, <code>Y%=X%DIV256</code>. | ||
− | + | DEFPROCmem_rd(io%,mem%,num%) | |
− | + | A%=5:REPEAT | |
− | + | !X%=io%:CALL&FFF1:?mem%=X%?4 | |
− | + | io%=io%+1:mem%=mem%+1:num%=num%-1 | |
− | + | UNTILnum%<1:ENDPROC | |
− | + | : | |
− | + | DEFPROCmem_wr(io%,mem%,num%) | |
− | + | A%=6:REPEAT | |
− | + | !X%=io%:X%?4=?mem%:CALL&FFF1 | |
− | + | io%=io%+1:mem%=mem%+1:num%=num%-1 | |
− | + | UNTILnum%<1:ENDPROC | |
− | + | ||
− | + | REM To read a single byte: | |
− | + | !X%=addr:A%=5:CALL&FFF1:byte=X%?4 | |
− | + | : | |
− | + | REM To write a single byte | |
− | + | X%?4=byte:!X%=addr:A%=6:CALL&FFF1 | |
==Implementations== | ==Implementations== | ||
All 8-bit Acorn systems read from whichever ROM is paged in. All except the | All 8-bit Acorn systems read from whichever ROM is paged in. All except the | ||
BBC B+ read from main memory. The B+ recognises &FFFExxxx to read from the | BBC B+ read from main memory. The B+ recognises &FFFExxxx to read from the | ||
− | shadow screen memory, otherwise it reads from main memory. | + | shadow screen memory, otherwise it reads from main memory. It is possible to |
+ | write a modified Tube Host that intercepts OSWORD 5 and 6 to access extended | ||
+ | memory, but most programs rely on adding an extra OSWORD call. | ||
==See Also== | ==See Also== | ||
* [[OSWORD &06]] | * [[OSWORD &06]] | ||
+ | * [[OSWORD &FA]] | ||
+ | * [[OSWORD &FF]] | ||
* http://mdfs.net/Docs/Comp/BBC/Oswords | * http://mdfs.net/Docs/Comp/BBC/Oswords | ||
* MemIO library at http://mdfs.net/blib | * MemIO library at http://mdfs.net/blib | ||
Line 45: | Line 49: | ||
[[User:Jgharston|Jgharston]] 23:56, 30 October 2011 (UTC) | [[User:Jgharston|Jgharston]] 23:56, 30 October 2011 (UTC) | ||
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 04:27, 29 March 2015 (UTC) | [[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 04:27, 29 March 2015 (UTC) | ||
+ | [[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 00:03, 31 January 2016 (UTC) |
Revision as of 01:03, 31 January 2016
OSWORD &05 (5) - Read I/O processor memory (Acorn MOS 1.00 and later)
On entry: XY!0=address to read from On exit: XY?4=the byte read
Some systems recognise screen memory at &FFFExxxx and sideways ROMs at &FFrr8000-&FFrrBFFF.
Coding
The following routines can be used to copy data to and from I/O memory
regardless of the location of the calling program. It requires
X%
=>5-byte control block, Y%=X%DIV256
.
DEFPROCmem_rd(io%,mem%,num%) A%=5:REPEAT !X%=io%:CALL&FFF1:?mem%=X%?4 io%=io%+1:mem%=mem%+1:num%=num%-1 UNTILnum%<1:ENDPROC : DEFPROCmem_wr(io%,mem%,num%) A%=6:REPEAT !X%=io%:X%?4=?mem%:CALL&FFF1 io%=io%+1:mem%=mem%+1:num%=num%-1 UNTILnum%<1:ENDPROC REM To read a single byte: !X%=addr:A%=5:CALL&FFF1:byte=X%?4 : REM To write a single byte X%?4=byte:!X%=addr:A%=6:CALL&FFF1
Implementations
All 8-bit Acorn systems read from whichever ROM is paged in. All except the BBC B+ read from main memory. The B+ recognises &FFFExxxx to read from the shadow screen memory, otherwise it reads from main memory. It is possible to write a modified Tube Host that intercepts OSWORD 5 and 6 to access extended memory, but most programs rely on adding an extra OSWORD call.
See Also
- OSWORD &06
- OSWORD &FA
- OSWORD &FF
- http://mdfs.net/Docs/Comp/BBC/Oswords
- MemIO library at http://mdfs.net/blib
Jgharston 23:56, 30 October 2011 (UTC) Jgharston (talk) 04:27, 29 March 2015 (UTC) Jgharston (talk) 00:03, 31 January 2016 (UTC)