.globl _getproc
.globl _trap_monitor
.globl trap_illegal
- .globl _inint
.globl _switchout
.globl _switchin
.globl _doexec
; restarted after calling switchout, it thinks it has just returned
; from switchout().
;
-; FIXME: make sure we optimise the switch to self case higher up the stack!
-;
; This function can have no arguments or auto variables.
_switchout:
di
push iy
ld (U_DATA__U_SP), sp ; this is where the SP is restored in _switchin
- ; set inint to false
- xor a
- ld (_inint), a
-
; find another process to run (may select this one again)
call _getproc
pop hl ; return code
; enable interrupts, if the ISR isn't already running
- ld a, (_inint)
+ ld a, (U_DATA__U_ININTERRUPT)
or a
- ret z ; in ISR, leave interrupts off
+ ret nz ; in ISR, leave interrupts off
ei
ret ; return with interrupts on