Difference between revisions of "PDP-11 Second Processor"

From BeebWiki
Jump to: navigation, search
(See also)
m (Typos in OSARGS.)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Category:Second_Processors]]
+
[[Category:Second_Processors]]__NOTOC__
__NOTOC__
 
 
An emulated [[Second Processor]] for the BBC/Master containing a DEC PDP-11.
 
An emulated [[Second Processor]] for the BBC/Master containing a DEC PDP-11.
  
Line 46: Line 45:
 
=== EMT &05 - OS_NEWL ===
 
=== EMT &05 - OS_NEWL ===
 
<pre>On entry:          On exit:
 
<pre>On entry:          On exit:
                     R1=13
+
                     R0=13
 
</pre>
 
</pre>
 +
 
=== EMT &06 - OS_RDCH ===
 
=== EMT &06 - OS_RDCH ===
 
<pre>On entry:          On exit:
 
<pre>On entry:          On exit:
Line 62: Line 62:
 
R0=function        R0=result
 
R0=function        R0=result
 
R1=handle          R1=preserved
 
R1=handle          R1=preserved
R2=>data            R2=data
+
R2=>data            R2=>data
 
</pre>
 
</pre>
 +
 
=== EMT &09 - OS_BGET ===
 
=== EMT &09 - OS_BGET ===
 
<pre>On entry:          On exit:
 
<pre>On entry:          On exit:
Line 90: Line 91:
 
   R0=0 - Loads and enters BASIC
 
   R0=0 - Loads and enters BASIC
 
         R1=0 or R1=>parameters
 
         R1=0 or R1=>parameters
   R0=1 - Reinitialises vectors, handlers and EMT dispatch table
+
   R0=1 - Set up new program environment - default environment handlers only.
   R0=2 - Reinitialises handlers and EMT dispatch table only
+
   R0=2 - Set up software environment - default environment handlers and EMTs.
 +
  R0=3 - Set up hardware environment - default environment handlers, EMTs,
 +
        hardware vectors
 
On exit:
 
On exit:
 
   All preserved
 
   All preserved
Line 105: Line 108:
  
 
If R0<0, the call sets and reads the following environment handlers:
 
If R0<0, the call sets and reads the following environment handlers:
   R0  R1                 R2
+
   R0  R1                   R2
   -1  Exit handler
+
   -1  Exit handler         Version
   -2  Escape handler     Escape flag
+
   -2  Escape handler       Escape flag
   -3  Error handler       Error buffer
+
   -3  Error handler       Error buffer
   -4  Event handler
+
   -4  Event handler       ignored
   -5  Unknown IRQ handler
+
   -5  Unknown IRQ handler ignored
   -6  ignored             EMT dispatch table
+
   -6  ignored             EMT dispatch table
 +
Internal handlers
 +
  -7  SPARE                LPTR
 +
  -8  MEMBOT              MEMTOP
 +
  -9  ADDRlo              ADDRhi
 +
-10  PROG                ESCFLG
 
</pre>
 
</pre>
 
=== EMT &0F - OS_ERROR ===
 
=== EMT &0F - OS_ERROR ===
Line 122: Line 130:
  
 
== See also ==
 
== See also ==
* [[PDP11 BBC BASIC|PDP-11 BBC BASIC]]
+
* [[PDP11 BBC BASIC]]
  
 
[[User:Jgharston|Jgharston]] 18:31, 11 September 2008 (BST)
 
[[User:Jgharston|Jgharston]] 18:31, 11 September 2008 (BST)
 +
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 00:07, 31 January 2016 (UTC)

Latest revision as of 05:19, 8 September 2023

An emulated Second Processor for the BBC/Master containing a DEC PDP-11.

The PDP-11 client MOS provides the basic system required to communicate with the host computer as well as a cut-down set of PDP-11 Unix functions.

Software and documentation for the PDP-11 CoProcessor are available at mdfs.net.

MOS API Calls

Programs communicate with the kernal and MOS via the EMT trap instruction. Parameters are passed in registers R0 onwards.

On entry, R0-R7 contain values to pass to EMT call
On exit,  R0-R7 contain returned data
          V=0 - no error occured
          V=1 - error occured, R0=>error block

EMT &00 - OS_QUIT

On entry:           On exit:
R0=Return value

EMT &01 - OS_CLI

On entry:           On exit:
R0=>command string  R0=Return value

EMT &02 - OS_BYTE

On entry:           On exit
R0=function         R0=preserved
R1=first parameter  R1=returned word
R2=second parameter R2=returned word DIV 256
                    Cy=returned carry flag

EMT &03 - OS_WORD

On entry:           On exit:
R0=function         Control block updated
R1=>control block   R1=returned line length for OSWORD 0

EMT &04 - OS_WRCH

On entry:           On exit:
R0=character        R0=preserved

EMT &05 - OS_NEWL

On entry:           On exit:
                    R0=13

EMT &06 - OS_RDCH

On entry:           On exit:
                    R0=character
                    Cy=carry flag

EMT &07 - OS_FILE

On entry:           On exit:
R0=function         R0=result
R1=>control block   R1=preserved

EMT &08 - OS_ARGS

On entry:           On exit:
R0=function         R0=result
R1=handle           R1=preserved
R2=>data            R2=>data

EMT &09 - OS_BGET

On entry:           On exit:
                    R0=byte
R1=handle           R1=preserved
                    Cy=carry flag

EMT &0A - OS_BPUT

On entry:           On exit:
R0=byte             R0=preserved
R1=handle           R1=preserved

EMT &0B - OS_GBPB

On entry:           On exit:
R0=function
R1=>control block   R1=preserved
                    Cy=carry flag

EMT &0C - OS_FIND

On entry:           On exit:
R0=function         R0=handle
R1=>string or handle

EMT &0D - OS_SYST

On entry:
  R0=0 - Loads and enters BASIC
         R1=0 or R1=>parameters
  R0=1 - Set up new program environment - default environment handlers only.
  R0=2 - Set up software environment - default environment handlers and EMTs.
  R0=3 - Set up hardware environment - default environment handlers, EMTs,
         hardware vectors
On exit:
  All preserved

EMT &0E - OS_HANDLER

On entry:                On exit:
R0=EMT or handler number R0=preserved
R1=handler or 0 to read  R1=previous handler
R2=buffer or 0 to read   R2=previous buffer

If R0>=0, the call redirects the specified EMT call, returning the previous handler

If R0<0, the call sets and reads the following environment handlers:
  R0  R1                   R2
  -1  Exit handler         Version
  -2  Escape handler       Escape flag
  -3  Error handler        Error buffer
  -4  Event handler        ignored
  -5  Unknown IRQ handler  ignored
  -6  ignored              EMT dispatch table
Internal handlers
  -7  SPARE                LPTR
  -8  MEMBOT               MEMTOP
  -9  ADDRlo               ADDRhi
 -10  PROG                 ESCFLG

EMT &0F - OS_ERROR

EMT &0F is followed by the error block in memory:
   EMT 15
   EQUB error
   EQUS "error string"
   EQUB 0

See also

Jgharston 18:31, 11 September 2008 (BST) Jgharston (talk) 00:07, 31 January 2016 (UTC)