; ; group v, test 1 ; ; priv mode trap. We switch to user mode in this test, but should exit in supervisor mode. m4_include(..\tmacros.h) INIT_TEST(v,0x01) ; declare symbols here SYM(trap_addr) SYM(do_priv_mode) SYM(resume_addr) SYM(fail0) SUBTEST(1) ld.16 a,do_priv_mode ld.16 b,v_priv st.16 0(b),a ld.16 a,0x7000 copy sp,a ld.16 a,0x8000 add.16 a,a ld.16 a,0x1111 copy dp,a ld.16 b,0x2222 ld.16 c,0x3333 copy a,msw or.16 a,0x10 ; switch to user mode copy msw,a trap_addr: ; this should trap now copy msw,a halt fail0: FAIL do_priv_mode: ld.16 a,0(sp) cmpb.ne.16 a,0x1111,fail0 ld.16 a,2(sp) cmpb.ne.16 a,0x3333,fail0 ld.16 a,4(sp) cmpb.ne.16 a,0x2222,fail0 ld.16 a,8(sp) cmpb.ne.16 a,trap_addr,fail0 ld.16 a,10(sp) and.16 a,0x000f cmpb.ne.16 a,11,fail0 ld.16 a,12(sp) cmpb.ne.16 a,0x7000,fail0 ; switch to back to priv mode ld.16 a,10(sp) and.16 a,0xffef st.16 10(sp),a ld.16 a,8(sp) add.16 a,(resume_addr-trap_addr) st.16 8(sp),a reti FAIL resume_addr: ;clean up ld.16 a,_unhandled_trap ld.16 b,v_priv st.16 0(b),a ; now, make sure we're back in priv mode copy a,msw copy msw,a ; Finally, when done branch to pass END_TEST