.globl enaslt
.globl _mapslot_bank1
.globl _mapslot_bank2
- .globl _kernel_flag
+ .globl _need_resched
; video driver
.globl _vtinit
; -----------------------------------------------------------------------------
.area _COMMONMEM
-trapmsg: .ascii "Trapdoor: SP="
- .db 0
-trapmsg2: .ascii ", PC="
- .db 0
-tm_user_sp: .dw 0
-
-tm_stack:
- .db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-tm_stack_top:
-
; Ideally return to any debugger/monitor
_trap_monitor:
di
di
halt
-_kernel_flag:
- .db 1
+_need_resched:
+ .db 0
; -----------------------------------------------------------------------------
; KERNEL MEMORY BANK (below 0xF000, only accessible when the kernel is mapped)
.globl _getproc
.globl _trap_monitor
.globl trap_illegal
- .globl _inint
.globl _switchout
.globl _switchin
.globl _doexec
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