From 5fab9ca10e70d70ff83ed3f910a0e0d9b22e9100 Mon Sep 17 00:00:00 2001 From: wfjm Date: Sun, 24 Jul 2022 08:27:17 +0200 Subject: [PATCH] tcode cpu_basics.mac: add F3: trap instructions --- tools/tcode/cpu_basics.mac | 135 ++++++++++++++++++++++++++++++++----- 1 file changed, 118 insertions(+), 17 deletions(-) diff --git a/tools/tcode/cpu_basics.mac b/tools/tcode/cpu_basics.mac index ec6f3ea8..ddfede0c 100644 --- a/tools/tcode/cpu_basics.mac +++ b/tools/tcode/cpu_basics.mac @@ -1,4 +1,4 @@ -; $Id: cpu_basics.mac 1259 2022-07-18 17:39:40Z mueller $ +; $Id: cpu_basics.mac 1261 2022-07-23 16:15:03Z mueller $ ; SPDX-License-Identifier: GPL-3.0-or-later ; Copyright 2015-2022 by Walter F.J. Mueller ; @@ -13,7 +13,7 @@ ; Section C: binary instructions (word) ; Section D: unary instructions (byte) ; Section E: binary instructions (byte) -; Section F: miscellaneous (spl, reset) +; Section F: miscellaneous (spl, reset, bpt,...) ; .include |lib/tcode_std_base.mac| .include |lib/defs_kwl.mac| @@ -1043,7 +1043,7 @@ ta0501: mov #123456,r5 ; token mov #101,-(sp) ; push 1st parameter mov #102,-(sp) ; push 2nd parameter mov #103,-(sp) ; push 3rd parameter - mov #,-(sp) ; push MARK 3 + mov #,-(sp) ; push MARK 3 mov sp,r5 ; push address of MARK 3 jsr pc,100$ ; call procedure cmp r5,#123456 ; check token @@ -3007,56 +3007,56 @@ tf0101: mov #cp.psw,r0 ccc sen spl 1 - cmp (r0),# + cmp (r0),# beq .+4 halt ; ccc sez spl 2 - cmp (r0),# + cmp (r0),# beq .+4 halt ; ccc sev spl 3 - cmp (r0),# + cmp (r0),# beq .+4 halt ; ccc sec spl 4 - cmp (r0),# + cmp (r0),# beq .+4 halt ; scc cln spl 5 - cmp (r0),# + cmp (r0),# beq .+4 halt ; scc clz spl 6 - cmp (r0),# + cmp (r0),# beq .+4 halt ; scc clv spl 7 - cmp (r0),# + cmp (r0),# beq .+4 halt ; scc clc spl 0 - cmp (r0),# + cmp (r0),# beq .+4 halt ; @@ -3070,14 +3070,14 @@ tf0102: mov #cp.psw,r0 mov #cp.cms,(r0) ; to supervisor mode ccc spl 4 - cmp (r0),# + cmp (r0),# beq .+4 halt ; mov #cp.cmu,(r0) ; to user mode scc spl 5 - cmp (r0),# + cmp (r0),# beq .+4 halt ; @@ -3095,7 +3095,7 @@ tf0102: mov #cp.psw,r0 ; - KW11-L line clock csr is cleared (representing all devices) ; - PIRQ is cleared ; - STKLIM is cleared -; Effect on MMR0 and MMR3 is tested in MMU test +; Effect on MMR0 and MMR3 is tested in MMU test cpu_mmu.mac ; tf0201: mov #cp.psw,r0 mov #cp.pr7,(r0) ; lock-out interrupts @@ -3138,13 +3138,13 @@ tf0202: mov #cp.psw,r0 mov #cp.pr7,(r0) ; lock-out interrupts mov #kl.ie,kl.csr ; enable KW11-L interrupt ; - mov #,(r0) ; supervisor mode, keep pr7 ! + mov #,(r0) ; supervisor mode, keep pr7 ! reset ; and RESET bit #kl.ie,kl.csr ; check that bit is set bne .+4 halt ; - mov #,(r0) ; user mode, keep pr7 ! + mov #,(r0) ; user mode, keep pr7 ! reset ; and RESET bit #kl.ie,kl.csr ; check that bit is set bne .+4 @@ -3156,10 +3156,111 @@ tf0202: mov #cp.psw,r0 ; 9999$: iot ; end of test F2.2 ; +; Test F3: trap instructions: bpt,iot,emt,trap +++++++++++++++++++++++++++++++ +; This sub-section verifies +; x xxx xxx xxx xxx xxx NZVC Instruction / Remark +; 0 000 000 000 000 011 NZVC BPT +; 0 000 000 000 000 100 NZVC IOT +; 1 000 100 0ii iii iii NZVC EMT +; 1 000 100 1ii iii iii NZVC TRAP +; 0 000 000 000 000 010 NZVC RTI +; +; Test F3.1 trap instructions: bpt,iot,emt,trap ++++++++++++++++++++++ +; +tf0301: mov #v..iot+2,v..iot ; block iot handler + clr v..iot+2 + clr cp.psw ; clear psw + mov #3000$,r5 ; setup expect buffer +; +; test bpt +; + mov #2000$,v..bpt ; setup bpt handler: nzvc = 0011 + mov #cp.pr7!cp00vc,v..bpt+2 + spl 1 + ccc + sec + bpt ; bpt with pr1 + nzvc = 0001 + mov #v..bpt+2,v..bpt ; block bpt again + clr v..bpt+2 +; +; test iot +; + mov #2000$,v..iot ; setup bpt handler: nzvc = 0100 + mov #cp.pr7!cp0z00,v..iot+2 + spl 2 + ccc + sev + iot ; iot with pr2 + nzvc = 0010 + mov #v..iot+2,v..iot ; block iot again + clr v..iot+2 +; +; test emt 123 +; + mov #2000$,v..emt ; setup emt handler: nzvc = 0101 + mov #cp.pr7!cp0z0c,v..emt+2 + spl 3 + ccc + sez + emt 123 ; emt with pr3 + nzvc = 0100 +; test emt 234 + spl 4 + ccc + sez + emt 234 ; emt with pr4 + nzvc = 0100 + mov #v..emt+2,v..emt ; block emt again + clr v..emt+2 +; +; test trap 321 +; + mov #2000$,v..trp ; setup trap handler: nzvc = 0110 + mov #cp.pr7!cp0zv0,v..trp+2 + spl 5 + ccc + sen + trap 321 ; trap with pr5 + nzvc = 1000 +; test trap 135 + spl 6 + ccc + sen + trap 135 ; trap with pr6 + nzvc = 1000 + mov #v..trp+2,v..trp ; block trap again + clr v..trp+2 +; +; end of trap instruction tests +; + cmp r5,#3001$ + mov #vh.iot,v..iot ; restore iot handler + mov #cp.pr7,v..iot+2 + jmp 9999$ +; +; vector handler (used for all trap type instructions) +2000$: cmp cp.psw,(r5)+ ; check new psw + beq .+4 + halt + cmp 2(sp),(r5)+ ; check saved saved psw + beq .+4 + halt + mov (sp),r0 ; get return address + cmp -2(r0),(r5)+ ; check instruction + beq .+4 + halt + rti + +; expect: new psw saved psw instruction +3000$: .word cp.pr7!cp00vc, cp.pr1!cp000c, + .word cp.pr7!cp0z00, cp.pr2!cp00v0, + .word cp.pr7!cp0z0c, cp.pr3!cp0z00, + .word cp.pr7!cp0z0c, cp.pr4!cp0z00, + .word cp.pr7!cp0zv0, cp.pr5!cpn000, + .word cp.pr7!cp0zv0, cp.pr6!cpn000, +3001$: +; +9999$: iot ; end of test F3.1 +; ; END OF ALL TESTS - loop closure ============================================ ; mov tstno,r0 ; hack, for easy monitoring ... - cmp tstno,#51. ; all tests done ? + cmp tstno,#52. ; all tests done ? beq .+4 halt ;