80186 Second Processor

From BeebWiki
Jump to: navigation, search

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