Difference between revisions of "80186 Second Processor"

From BeebWiki
Jump to: navigation, search
m
 
(See also)
 
(7 intermediate revisions by the same user not shown)
Line 46: Line 46:
 
BX=>control block      control block updated
 
BX=>control block      control block updated
 
</pre>
 
</pre>
 +
In the standard version 1.00 80x86 CoProprocessor client the OSFILE code is broken. There is a version 1.01 patch that fixes this.<ref>[http://mdfs.net/Software/Tube/80x86/ 80x86 CoPro Client patch]</ref>
 +
 +
The error occurs when the code copies the offset into the control block of the address of the filename into the register that points to the control block. This results in the code trying to use a filename at address &0000, and storing the returned control block there - on top of the hardware vectors!
 +
 
=== INT &46 - OSRDCH ===
 
=== INT &46 - OSRDCH ===
 
<pre>On entry:              On exit:
 
<pre>On entry:              On exit:
 
                         AL=character
 
                         AL=character
 
                         CF=Carry
 
                         CF=Carry
 +
</pre>
  
 
=== INT &47 - OSASCI ===
 
=== INT &47 - OSASCI ===
Line 55: Line 60:
 
AL=character
 
AL=character
 
</pre>
 
</pre>
 +
 
=== INT &48 - OSNEWL ===
 
=== INT &48 - OSNEWL ===
  
Line 87: Line 93:
 
DB 0
 
DB 0
 
</pre>
 
</pre>
=== Error flag ===
+
=== Escape flag ===
 
<pre>0000:05F0 will have b7 set when an Escape state is pending.
 
<pre>0000:05F0 will have b7 set when an Escape state is pending.
 
</pre>
 
</pre>
 +
 
=== FAULT pointer ===
 
=== FAULT pointer ===
 
<pre>0000:05F4 points to the last error block.
 
<pre>0000:05F4 points to the last error block.
Line 101: Line 108:
  
 
== See also ==
 
== See also ==
* [[BBC BASIC (86)]]
+
* [[80x86 BBC BASIC]]
  
 
[[User:Jgharston|Jgharston]] 05:32, 8 October 2007 (BST)
 
[[User:Jgharston|Jgharston]] 05:32, 8 October 2007 (BST)
 +
 +
== References ==
 +
<references/>

Latest revision as of 23:20, 8 March 2015

A second processor for the BBC or Master containing an Intel 80186 processor (the ancestor of the x86 processors that power almost all modern PCs) clocked at 10MHz, with 512K of RAM. It can be modified to be clocked at 12MHz and the RAM increased to 1024K.

The internal 80186 Second Processor converts a Master 128 into a Master 512. It is reported that a "cheese wedge" version was available.

MOS API Calls

Programs communicate with the kernal and MOS via INT software interrupt instruction. Parameters are passed in registers AL onwards.

INT &40 - OSFIND

On entry:               On exit:
AL=function             AL=handle
BX=>filename or =handle

INT &41 - OSGBPB

On entry:               On exit:
AL=function             AL=result
BX=>control block       CF=Carry
                        control block updated

INT &42 - OSBPUT

On entry:
AL=byte of data
BH=handle

INT &43 - OSBGET

On entry:               On exit:
                        AL=byte of data
BH=handle               CF=Carry

INT &44 - OSARGS

On entry:               On exit:
AL=function             AL=result
AH=handle               AH=preserved
BX=>data word           data word updated

INT &45 - OSFILE

On entry:               On exit:
AL=function             AL=result
BX=>control block       control block updated

In the standard version 1.00 80x86 CoProprocessor client the OSFILE code is broken. There is a version 1.01 patch that fixes this.[1]

The error occurs when the code copies the offset into the control block of the address of the filename into the register that points to the control block. This results in the code trying to use a filename at address &0000, and storing the returned control block there - on top of the hardware vectors!

INT &46 - OSRDCH

On entry:               On exit:
                        AL=character
                        CF=Carry

INT &47 - OSASCI

On entry:
AL=character

INT &48 - OSNEWL

INT &49 - OSWRCH

On entry:               On exit:
AL=character            AL=preserved

INT &4A - OSWORD

On entry:               On exit
AL=function
BX=>control block       control block updated

INT &4B - OSBYTE

On entry:               On exit:
AL=function             AL=preserved
BL=first parameter      BL=b0-b7 of result (6502 X register)
BH=second parameter     BH=b8-b15 of result (6502 Y register)

INT &4C - OSCLI

On entry:
BX=>command string

INT &4D - unused

INT &4E - unused

INT &4F - ERROR

INT &4F is followed by an error block:
INT &4F
DB error
DS "error string"
DB 0

Escape flag

0000:05F0 will have b7 set when an Escape state is pending.

FAULT pointer

0000:05F4 points to the last error block.

Error handler

0000:05F8 is the address of the current error handler.

0000:05FC

0000:05FC

See also

Jgharston 05:32, 8 October 2007 (BST)

References