
 sttl Context Switching
 pag
*
* Context switching code
*

* Process an interrupt as special

process inc >kernal bump the interrupt level
 bne jvectr if non zero - system is mapped in

*
* Enter UniFLEX code to process interrupt
*

entersys clra set dp to 0
 tfr a,dp
* Map in User Block (System Stack)
 ldb usrtop get user block page
 clra
 lslb
 rola
 std datbox+((usrseg*2)+0)*2
 addd #1
 std datbox+((usrseg*2)+1)*2
* Setup the system stack and invoke the interrupt routine
 sts usp save users stack
 lds #sysstk set up system stack
jvectr cmpx #nmivec can we reset TSR?
 beq jvectr1 no if this is a "fault"
 lda #$08 allow interrupts/write enable TOD clock
 sta TSR
jvectr1 jsr [0,x] invoke the interrupt routine
 seti mask ints
 tst kernal check int level
 beq userti
 dec kernal dec the interrupt level
 rti return from int
