mirror of
https://github.com/wfjm/w11.git
synced 2026-03-05 03:05:52 +00:00
asm-11 .list update; tcode updates
- tools/bin
- asm-11
- add minimal .list,.nlist (cnd,me,meb) directive support
- add -(n)list options
- tools/asm-11
- tests(-err): some tuneups
- mlib: some macros added, some tuneups
- tools/tcode/cpu_(details|mmu).mac: use rt?jmp, hta??? macros
This commit is contained in:
@@ -36,7 +36,9 @@ The full set of tests is only run for tagged releases.
|
||||
- add .if, .if(f|t|tf), .endc, .rept, .endr, .mexit directives
|
||||
- add .error, .print, .mcall, .mdelete directives
|
||||
- add .narg, .nchr, .ntype directives
|
||||
- add minimal .list,.nlist support for cnd, me and meb
|
||||
- rewrite macro definition and call argument parsing & handling
|
||||
- add -list and -nlist options
|
||||
- add -L option (to set .mcall pathlist)
|
||||
- add auto-generated ...top label
|
||||
- add flag (MRmrd) column in output format
|
||||
@@ -47,6 +49,8 @@ The full set of tests is only run for tagged releases.
|
||||
- tests(-err): many tests added
|
||||
- tests(-err)/Makefile: distclean target added
|
||||
- mlib: macro library, accessed by .mcall
|
||||
- tools/tcode
|
||||
- use .mcall and mlib
|
||||
### Bug Fixes
|
||||
- tools/bin/asm-11:
|
||||
- BUGFIX: support @(R) modifier with omitted offset
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
; $Id: hbiteq.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: hbiteq.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; bit on eq
|
||||
; halt check: bit on eq
|
||||
;
|
||||
.macro hbiteq,src,dst
|
||||
bit src,dst
|
||||
beq .+4
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
; $Id: hbitne.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: hbitne.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; bit on ne
|
||||
; halt check: bit on ne
|
||||
;
|
||||
.macro hbitne,src,dst
|
||||
bit src,dst
|
||||
bne .+4
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
; $Id: hcmbeq.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: hcmbeq.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; cmpb on eq
|
||||
; halt check: cmpb on eq
|
||||
;
|
||||
.macro hcmbeq,src,dst
|
||||
cmpb src,dst
|
||||
beq .+4
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
; $Id: hcmpeq.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: hcmpeq.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; cmp on eq
|
||||
; halt check: cmp on eq
|
||||
;
|
||||
.macro hcmpeq,src,dst
|
||||
cmp src,dst
|
||||
beq .+4
|
||||
|
||||
11
tools/asm-11/mlib/htaadd.mac
Normal file
11
tools/asm-11/mlib/htaadd.mac
Normal file
@@ -0,0 +1,11 @@
|
||||
; $Id: htaadd.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; macro for trace area add entry
|
||||
; usage: htaadd #v..bpt
|
||||
;
|
||||
.macro htaadd,tvec,tadr=(sp)
|
||||
mov tvec,(r5)+
|
||||
mov tadr,(r5)+
|
||||
.endm
|
||||
13
tools/asm-11/mlib/htabuf.mac
Normal file
13
tools/asm-11/mlib/htabuf.mac
Normal file
@@ -0,0 +1,13 @@
|
||||
; $Id: htabuf.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; macro for trace area buffer allocation
|
||||
; usage: 200$: htabuf 2.
|
||||
;
|
||||
.macro htabuf,nent
|
||||
.rept nent
|
||||
.word 0,0
|
||||
.endr
|
||||
.word -1,-1
|
||||
.endm
|
||||
11
tools/asm-11/mlib/htacmp.mac
Normal file
11
tools/asm-11/mlib/htacmp.mac
Normal file
@@ -0,0 +1,11 @@
|
||||
; $Id: htacmp.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; macro for trace area check entry
|
||||
; usage: htacmp #v..bpt,#100$
|
||||
;
|
||||
.macro htacmp,tvec,tadr
|
||||
hcmpeq tvec,(r5)+
|
||||
hcmpeq tadr,(r5)+
|
||||
.endm
|
||||
11
tools/asm-11/mlib/htaini.mac
Normal file
11
tools/asm-11/mlib/htaini.mac
Normal file
@@ -0,0 +1,11 @@
|
||||
; $Id: htaini.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; macro for trace area check setup
|
||||
; usage: htaini 200$,2.
|
||||
;
|
||||
.macro htaini,buf,nent
|
||||
hcmpeq #buf+<4*nent>,r5
|
||||
mov #buf,r5
|
||||
.endm
|
||||
@@ -1,8 +1,9 @@
|
||||
; $Id: htsbeq.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: htsbeq.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; tstb on eq
|
||||
; halt check: tstb on eq
|
||||
;
|
||||
.macro htsbeq,src
|
||||
tstb src
|
||||
beq .+4
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
; $Id: htsbne.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: htsbne.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; tstb on ne
|
||||
; halt check: tstb on ne
|
||||
;
|
||||
.macro htsbne,src
|
||||
tstb src
|
||||
bne .+4
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
; $Id: htsteq.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: htsteq.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; tst on eq
|
||||
; halt check: tst on eq
|
||||
;
|
||||
.macro htsteq,src
|
||||
tst src
|
||||
beq .+4
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
; $Id: htstge.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: htstge.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; tst on ge
|
||||
; halt check: tst on ge
|
||||
;
|
||||
.macro htstge,src
|
||||
tst src
|
||||
bge .+4
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
; $Id: htstne.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: htstne.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; tst on ne
|
||||
; halt check: tst on ne
|
||||
;
|
||||
.macro htstne,src
|
||||
tst src
|
||||
bne .+4
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
; $Id: pop.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: pop.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; pop a word of the stack
|
||||
;
|
||||
.macro pop,dst
|
||||
mov (sp)+,dst
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
; $Id: popb.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: popb.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; pop a byte of the stack
|
||||
;
|
||||
.macro popb,dst
|
||||
movb (sp)+,dst
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
; $Id: push.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: push.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; push a word to the stack
|
||||
;
|
||||
.macro push,src
|
||||
mov src,-(sp)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
; $Id: push2.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: push2.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; push two words to the stack
|
||||
;
|
||||
.macro push2,src1,src2
|
||||
mov src1,-(sp)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
; $Id: pushb.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: pushb.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; push a byte to the stack
|
||||
;
|
||||
.macro pushb,src
|
||||
movb src,-(sp)
|
||||
|
||||
12
tools/asm-11/mlib/rtijmp.mac
Normal file
12
tools/asm-11/mlib/rtijmp.mac
Normal file
@@ -0,0 +1,12 @@
|
||||
; $Id: rtijmp.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; macro for JMP via RTI with new PS,PC
|
||||
; usage: rtijmp #cp.cmu+cp.t,#5100$
|
||||
;
|
||||
.macro rtijmp,newps,newpc
|
||||
push2 newps,newpc
|
||||
rti
|
||||
halt
|
||||
.endm
|
||||
12
tools/asm-11/mlib/rttjmp.mac
Normal file
12
tools/asm-11/mlib/rttjmp.mac
Normal file
@@ -0,0 +1,12 @@
|
||||
; $Id: rttjmp.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; macro for JMP via RTT with new PS,PC
|
||||
; usage: rtijmp #cp.cmu+cp.t,#5100$
|
||||
;
|
||||
.macro rttjmp,newps,newpc
|
||||
push2 newps,newpc
|
||||
rtt
|
||||
halt
|
||||
.endm
|
||||
@@ -1,6 +1,8 @@
|
||||
; $Id: vecclr.mac 1357 2023-01-26 19:24:10Z mueller $
|
||||
; $Id: vecclr.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; reset vector to catcher
|
||||
;
|
||||
.macro vecclr,name
|
||||
mov #name+2,@#name
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
; $Id: vecini.mac 1357 2023-01-26 19:24:10Z mueller $
|
||||
; $Id: vecini.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; allocate and initialize vector, set up as catcher
|
||||
;
|
||||
.macro vecini,addr,name
|
||||
. = addr
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
; $Id: vecset.mac 1357 2023-01-26 19:24:10Z mueller $
|
||||
; $Id: vecset.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; set vector to handler and PS (default pr0 kernel)
|
||||
;
|
||||
.macro vecset,name,hdl,pri
|
||||
mov #hdl,@#name
|
||||
@@ -8,4 +10,5 @@
|
||||
clr @#name+2
|
||||
.iff
|
||||
mov #pri,@#name+2
|
||||
.endc
|
||||
.endm
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: testerr_0220_Aerror_if.mac 1355 2023-01-25 21:14:24Z mueller $
|
||||
; $Id: testerr_0220_Aerror_if.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -7,7 +7,9 @@
|
||||
;
|
||||
.asect
|
||||
. = 1000
|
||||
|
||||
;
|
||||
.list cnd
|
||||
;
|
||||
; invalid .if statements
|
||||
.if ;;!! A
|
||||
.endc
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: testerr_0300_Oerror.mac 1355 2023-01-25 21:14:24Z mueller $
|
||||
; $Id: testerr_0300_Oerror.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -6,6 +6,8 @@
|
||||
;
|
||||
.asect
|
||||
. = 1000
|
||||
;
|
||||
.list cnd
|
||||
;
|
||||
; misplaced .end*
|
||||
.endr ;;!! O
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: testerr_0310_Oerror_mdel.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: testerr_0310_Oerror_mdel.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -7,6 +7,8 @@
|
||||
;
|
||||
.asect
|
||||
. = 1000
|
||||
;
|
||||
.list cnd
|
||||
;
|
||||
.if df,...top ; asm-11 only
|
||||
;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: testerr_0503_end_if.mac 1356 2023-01-26 15:10:23Z mueller $
|
||||
; $Id: testerr_0503_end_if.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -7,6 +7,8 @@
|
||||
;
|
||||
.asect
|
||||
. = 1000
|
||||
;
|
||||
.list cnd
|
||||
;
|
||||
.if eq,0
|
||||
.end ;;!! O
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
; $Id: testerr_0513_end_if_open.mac 1356 2023-01-26 15:10:23Z mueller $
|
||||
; $Id: testerr_0513_end_if_open.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; test .end
|
||||
; case: missing .endc causes to E error
|
||||
;
|
||||
.list cnd
|
||||
;
|
||||
.asect
|
||||
. = 1000
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: test_0350_macro_concat.mac 1355 2023-01-25 21:14:24Z mueller $
|
||||
; $Id: test_0350_macro_concat.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
; list macro expansion
|
||||
.list me
|
||||
.list cnd
|
||||
;
|
||||
; define and use macro with a concatinated label
|
||||
; check label creation with .if df
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: test_0360_macro_mexit.mac 1355 2023-01-25 21:14:24Z mueller $
|
||||
; $Id: test_0360_macro_mexit.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
; list macro expansion
|
||||
.list me
|
||||
.list cnd
|
||||
;
|
||||
; nested macro calls, ensure that .mexit individually
|
||||
.macro mtop,src
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: test_0400_if_eq.mac 1353 2023-01-23 18:13:53Z mueller $
|
||||
; $Id: test_0400_if_eq.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -6,11 +6,12 @@
|
||||
;
|
||||
.asect
|
||||
. = 1000
|
||||
;
|
||||
.list cnd
|
||||
;
|
||||
a = 1
|
||||
b = 2
|
||||
c = a + b
|
||||
;
|
||||
;
|
||||
.if eq,-1 ; eq -1 ---------
|
||||
.word 001001 ; not assembled
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: test_0410_if_df.mac 1355 2023-01-25 21:14:24Z mueller $
|
||||
; $Id: test_0410_if_df.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -6,6 +6,8 @@
|
||||
;
|
||||
.asect
|
||||
. = 1000
|
||||
;
|
||||
.list cnd
|
||||
;
|
||||
a = 1
|
||||
b = 2
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: test_0420_if_b.mac 1353 2023-01-23 18:13:53Z mueller $
|
||||
; $Id: test_0420_if_b.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -6,6 +6,8 @@
|
||||
;
|
||||
.asect
|
||||
. = 1000
|
||||
;
|
||||
.list cnd
|
||||
;
|
||||
a = 1
|
||||
b = 2
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: test_0430_if_idn.mac 1355 2023-01-25 21:14:24Z mueller $
|
||||
; $Id: test_0430_if_idn.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -8,6 +8,7 @@
|
||||
. = 1000
|
||||
;
|
||||
.list me
|
||||
.list cnd
|
||||
;
|
||||
; Note: if idn/dif seems to be broken in RT-11 MACRO-11
|
||||
;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: test_0440_iff.mac 1353 2023-01-23 18:13:53Z mueller $
|
||||
; $Id: test_0440_iff.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -6,6 +6,8 @@
|
||||
;
|
||||
.asect
|
||||
. = 1000
|
||||
;
|
||||
.list cnd
|
||||
;
|
||||
a = 1
|
||||
b = 2
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: test_0450_if_macro.mac 1353 2023-01-23 18:13:53Z mueller $
|
||||
; $Id: test_0450_if_macro.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
; list macro expansion
|
||||
.list me
|
||||
.list cnd
|
||||
;
|
||||
.macro movclr,dst,src
|
||||
.if b,dst
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: test_0510_rept_mexit.mac 1353 2023-01-23 18:13:53Z mueller $
|
||||
; $Id: test_0510_rept_mexit.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
; list macro expansion
|
||||
.list me
|
||||
.list cnd
|
||||
;
|
||||
; single .rept with an .mexit abort
|
||||
a = 1020 ; write limit
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; $Id: test_0600_mcall.mac 1354 2023-01-24 16:29:10Z mueller $
|
||||
; $Id: test_0600_mcall.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
; list macro expansion
|
||||
.list me
|
||||
.list cnd
|
||||
;
|
||||
.mcall push,pop
|
||||
;
|
||||
|
||||
123
tools/bin/asm-11
123
tools/bin/asm-11
@@ -1,10 +1,11 @@
|
||||
#!/usr/bin/perl -w
|
||||
# $Id: asm-11 1357 2023-01-26 19:24:10Z mueller $
|
||||
# $Id: asm-11 1359 2023-01-27 20:58:50Z mueller $
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# Copyright 2013-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
#
|
||||
# Revision History:
|
||||
# Date Rev Version Comment
|
||||
# 2023-01-27 1359 1.2.4 add minimal .list,.nlist (cnd,me,meb); add -(n)list
|
||||
# 2023-01-26 1357 1.2.3 skip redundant loads in .mcall
|
||||
# 2023-01-25 1355 1.2.2 rewrite macro args handling; add .narg,.nchr,.ntype
|
||||
# 2023-01-24 1354 1.2.1 add .error,.print,.mcall,.mdelete; add -L; add ...top
|
||||
@@ -15,7 +16,7 @@
|
||||
# 2022-07-28 1264 1.1.3 add -E and -M options
|
||||
# 2022-07-23 1262 1.1.2 BUGFIX: '100(pc)' was compiled as '100'
|
||||
# 2019-07-13 1189 1.1.1 drop superfluous exists for $opts
|
||||
# 2019-05-25 1152 1.1 add .macro,.endm,.list,.nlist
|
||||
# 2019-05-25 1152 1.1 add .macro,.endm; dummy .list,.nlist
|
||||
# 2019-04-25 1138 1.0.7 print lines with errors to stderr unless -lst seen
|
||||
# 2019-04-19 1133 1.0.6 .end directive autocreates '...end' label
|
||||
# 2018-11-03 1065 1.0.5 add and use bailout
|
||||
@@ -47,6 +48,7 @@ GetOptions(\%opts, "help", "E", "M",
|
||||
"ttoken", "tparse", "temit", "tout",
|
||||
"I=s@",
|
||||
"L=s@",
|
||||
"list=s@", "nlist=s@",
|
||||
"lst", "olst=s",
|
||||
"lda", "olda=s",
|
||||
"cof", "ocof=s",
|
||||
@@ -58,6 +60,26 @@ unshift @{$opts{I}}, "."; # ./ is first in include path
|
||||
push @{$opts{I}}, "$ENV{RETROBASE}/tools/asm-11" if defined $ENV{RETROBASE};
|
||||
push @{$opts{L}}, "$ENV{RETROBASE}/tools/asm-11/mlib" if defined $ENV{RETROBASE};
|
||||
|
||||
# .list/.nlist status
|
||||
my %list = (cnd => 0, # unsatisfied conditional code off
|
||||
me => 0, # macro&repeat expansions off
|
||||
meb => 1); # macro&repeat expansions binary on
|
||||
# --list and --nlist
|
||||
foreach my $arg (@{$opts{list}}) {
|
||||
if (exists $list{$arg}) {
|
||||
$list{$arg} = 1;
|
||||
} else {
|
||||
bailout("bad -list option '$arg'");
|
||||
}
|
||||
}
|
||||
foreach my $arg (@{$opts{nlist}}) {
|
||||
if (exists $list{$arg}) {
|
||||
$list{$arg} = 0;
|
||||
} else {
|
||||
bailout("bad -nlist option '$arg'");
|
||||
}
|
||||
}
|
||||
|
||||
# Permanant symbol table
|
||||
my %pst = (
|
||||
# directives
|
||||
@@ -356,7 +378,7 @@ foreach my $fname (@ARGV) {
|
||||
}
|
||||
if ($end == 0 && ($mdeflvl + $reptlvl + # no .end but .macro or .rept open
|
||||
scalar(@ifstk) != 0)) { # or .endc open
|
||||
pass1_line(1, 0, '', ' '); # add dummy line
|
||||
pass1_line(1, 0, ''); # add dummy line
|
||||
add_err($src[-1], 'E'); # and signal E error
|
||||
}
|
||||
exit 0 if $opts{E} || $opts{M}; # stop after pass1 for -E -M
|
||||
@@ -437,7 +459,7 @@ sub read_file {
|
||||
printf "$line\n"; # write to stdout
|
||||
}
|
||||
$lineno += 1;
|
||||
pass1_line($fileno, $lineno, $line, ' ');
|
||||
pass1_line($fileno, $lineno, $line);
|
||||
last if $end;
|
||||
}
|
||||
|
||||
@@ -467,7 +489,7 @@ sub exec_macro {
|
||||
}
|
||||
$line .= $lrest;
|
||||
$mexit = 0;
|
||||
pass1_line($fileno, $lineno, $line, 'm');
|
||||
pass1_line($fileno, $lineno, $line);
|
||||
last if $mexit;
|
||||
}
|
||||
$mexit = 0;
|
||||
@@ -487,9 +509,9 @@ sub delete_macro {
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
sub pass1_line {
|
||||
my ($fileno,$lineno,$line,$flag) = @_;
|
||||
my ($fileno,$lineno,$line) = @_;
|
||||
|
||||
my $rl = parse_line($fileno, $lineno, $line, $flag);
|
||||
my $rl = parse_line($fileno, $lineno, $line);
|
||||
dump_rl($rl) if $opts{tpass1};
|
||||
push @src, $rl;
|
||||
|
||||
@@ -536,7 +558,7 @@ sub pass1_line {
|
||||
$lineno += 1;
|
||||
$mseen = 1 if $line =~m/^\s*\.macro/; # .macro seen ?
|
||||
next unless $mseen;
|
||||
pass1_line($fileno, $lineno, $line, ' ');
|
||||
pass1_line($fileno, $lineno, $line);
|
||||
printf "$line\n" if $opts{E}; # if -E write to stdout
|
||||
last if $mdeflvl == 0; # final .endm seen ?
|
||||
}
|
||||
@@ -554,7 +576,7 @@ sub pass1_line {
|
||||
for (my $i=0; $i<$cnt; $i++) { # repeat body cnt times
|
||||
foreach my $rline (@{$reptstk[-1]{body}}) {
|
||||
$mexit = 0;
|
||||
pass1_line($rline->{fileno}, $rline->{lineno}, $rline->{line}, 'r');
|
||||
pass1_line($rline->{fileno}, $rline->{lineno}, $rline->{line});
|
||||
last if $mexit;
|
||||
}
|
||||
last if $mexit;
|
||||
@@ -567,6 +589,7 @@ sub pass1_line {
|
||||
|
||||
# handle macro expansions --------------------------------
|
||||
if (defined $$rl{oper} && defined $$rl{mexec}) {
|
||||
$$rl{lstdot} = 1 unless $list{me} || $list{meb};
|
||||
exec_macro($$rl{mexec});
|
||||
}
|
||||
return;
|
||||
@@ -575,7 +598,7 @@ sub pass1_line {
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
sub parse_line {
|
||||
my ($fileno,$lineno,$line,$flag) = @_;
|
||||
my ($fileno,$lineno,$line) = @_;
|
||||
|
||||
my %l = ( fileno => $fileno, # file number
|
||||
lineno => $lineno, # line number
|
||||
@@ -583,7 +606,7 @@ sub parse_line {
|
||||
cl => [split '',$line], # char list
|
||||
tl => [], # token list
|
||||
err => '', # error tags
|
||||
flag => $flag, # line flag
|
||||
flag => '', # line flags
|
||||
psect => $cur_psect, # current psect
|
||||
dot => getdot(), # current dot
|
||||
outw => [], # output: words
|
||||
@@ -625,6 +648,10 @@ sub parse_line {
|
||||
|
||||
printf "-- parse: '$line'\n" if $opts{tparse} || $opts{ttoken};
|
||||
|
||||
# basics flags
|
||||
add_flag(\%l, 'm') if scalar(@mexecstk); # in macro execution
|
||||
add_flag(\%l, 'r') if scalar(@reptstk); # in .rept expansion
|
||||
|
||||
# quit if invalid character found (non 7 bit ascii in asm-11)
|
||||
foreach my $c (@{$l{cl}}) {
|
||||
if (ord($c) > 127) {
|
||||
@@ -644,9 +671,10 @@ sub parse_line {
|
||||
}
|
||||
|
||||
if (scalar(@ifstk)) { # is .if conditional block active ?
|
||||
add_flag(\%l,'c'); # flag conditional block
|
||||
unless ($dnam =~ m/^\.(iff|ift|iftf|endc)$/) { # and not sub-cond or end
|
||||
unless ($ifstk[-1]{cur}) { # if (sub-)cond false
|
||||
$l{flag} = 'd'; # mark condition drop
|
||||
add_flag(\%l,'d'); # flag condition drop
|
||||
return \%l; # ignore line
|
||||
}
|
||||
}
|
||||
@@ -656,7 +684,7 @@ sub parse_line {
|
||||
$reptlvl += 1 if $dnam eq '.rept'; # nested .rept found ?
|
||||
$reptlvl -= 1 if $dnam eq '.endr'; # .endr found ?
|
||||
if ($reptlvl > 0) { # final .endr not yet seen
|
||||
$l{flag} = 'R';
|
||||
add_flag(\%l,'R'); # flag .rept definition
|
||||
push @{$reptstk[-1]{body}}, {line => $l{line},
|
||||
fileno => $l{fileno},
|
||||
lineno => $l{lineno}
|
||||
@@ -669,7 +697,7 @@ sub parse_line {
|
||||
$mdeflvl += 1 if $dnam eq '.macro'; # nested .macro found ?
|
||||
$mdeflvl -= 1 if $dnam eq '.endm'; # .endm found ?
|
||||
if ($mdeflvl > 0) {
|
||||
$l{flag} = 'M';
|
||||
add_flag(\%l,'M'); # flag .macro definition
|
||||
push @{$mst{$mdefnam}{body}}, {line => $l{line},
|
||||
fileno => $l{fileno},
|
||||
lineno => $l{lineno}
|
||||
@@ -891,6 +919,7 @@ sub parse_line {
|
||||
} else { # no conditiion -> A error
|
||||
add_err(\%l, 'A');
|
||||
}
|
||||
add_flag(\%l,'c'); # flag conditional block
|
||||
push @ifstk, {tst => $tst, cur => $tst};
|
||||
$state = 'end';
|
||||
|
||||
@@ -917,7 +946,7 @@ sub parse_line {
|
||||
} elsif ($op eq '.macro') { # .macro ---------------
|
||||
$rt = get_token(\%l, $tmask);
|
||||
if ($$rt{tag} eq 'SYM') {
|
||||
$l{flag} = 'M';
|
||||
add_flag(\%l,'M'); # flag .macro definition
|
||||
$mdeflvl = 1;
|
||||
$mdefnam = $$rt{val};
|
||||
$mst{$mdefnam} = {name => $mdefnam,
|
||||
@@ -980,7 +1009,7 @@ sub parse_line {
|
||||
if (not defined $mdefnam) { # .macro not active ?
|
||||
add_err(\%l, 'O'); # quit with O error
|
||||
} else {
|
||||
$l{flag} = "M";
|
||||
add_flag(\%l,'M'); # flag .macro definition
|
||||
$rt = get_token(\%l, $tmask);
|
||||
if ($$rt{tag} eq 'SYM') { # if non-matching name -> A error
|
||||
add_err(\%l, 'A') if $$rt{val} ne $mdefnam;
|
||||
@@ -1115,14 +1144,14 @@ sub parse_line {
|
||||
$state = 'end';
|
||||
|
||||
} elsif ($op eq '.rept') { # .rept ----------------
|
||||
$l{flag} = 'R';
|
||||
add_flag(\%l,'R'); # flag .rept definition
|
||||
$state = 'dl_beg';
|
||||
|
||||
} elsif ($op eq '.endr') { # .endr ----------------
|
||||
if (scalar(@reptstk) == 0) { # .rept block not active ?
|
||||
add_err(\%l, 'O'); # quit with O error
|
||||
} else {
|
||||
$l{flag} = "R";
|
||||
add_flag(\%l,'R'); # flag .rept definition
|
||||
}
|
||||
$state = 'end';
|
||||
|
||||
@@ -1138,8 +1167,12 @@ sub parse_line {
|
||||
while (1) { # loop over options
|
||||
$rt = get_token(\%l, $tmask);
|
||||
last if $$rt{tag} eq 'EOL';
|
||||
next if $$rt{tag} eq 'DEL'; # FIXME_code: check delimiter
|
||||
# FIXME_code: handle .list/.nlist
|
||||
next if check_token($rt, 'DEL', ',');
|
||||
if ($$rt{tag} eq 'SYM') {
|
||||
$list{$$rt{val}} = $op eq '.list' if exists $list{$$rt{val}};
|
||||
} else {
|
||||
add_err(\%l, 'A'); # non-symbol as arg -> O error
|
||||
}
|
||||
}
|
||||
$state = 'end';
|
||||
} elsif ($op eq '.end') { # .end -----------------
|
||||
@@ -1777,13 +1810,21 @@ sub walign {
|
||||
sub add_err {
|
||||
my ($rl,$errlist) = @_;
|
||||
foreach my $err (split '',$errlist) {
|
||||
next if index($$rl{err}, $err) >= 0; # prevent multiple error tags
|
||||
$$rl{err} .= $err; # set error tag
|
||||
$errcnt{$err} += 1; # and count them
|
||||
next if index($$rl{err}, $err) >= 0; # prevent multiple error tags
|
||||
$$rl{err} .= $err; # set error tag
|
||||
$errcnt{$err} += 1; # and count them
|
||||
$errcnt_tot += 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
sub add_flag {
|
||||
my ($rl,$flag) = @_;
|
||||
next if index($$rl{flag}, $flag) >= 0; # prevent multiple flags
|
||||
$$rl{flag} .= $flag; # set flag
|
||||
return;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
@@ -2612,9 +2653,30 @@ sub pass2_lst_line {
|
||||
my @ow = @{$$rl{outw}};
|
||||
my @ob = @{$$rl{outb}};
|
||||
my $str = '';
|
||||
my $flag = ' ';
|
||||
|
||||
# check active .list and skip if not selected
|
||||
if ($$rl{flag} =~ m/d/) {
|
||||
return unless $list{cnd};
|
||||
}
|
||||
if ($$rl{flag} =~ m/[mr]/) {
|
||||
if (scalar(@ow)+scalar(@ob) == 0) {
|
||||
return unless $list{me};
|
||||
} else {
|
||||
return unless $list{me} || $list{meb};
|
||||
}
|
||||
}
|
||||
|
||||
# print err,fileno,flag,lineno
|
||||
# flag priority list lowest first
|
||||
$flag = 'm' if $$rl{flag} =~ m/m/;
|
||||
$flag = 'r' if $$rl{flag} =~ m/r/;
|
||||
$flag = 'd' if $$rl{flag} =~ m/d/;
|
||||
$flag = 'M' if $$rl{flag} =~ m/M/;
|
||||
$flag = 'R' if $$rl{flag} =~ m/R/;
|
||||
$str .= sprintf("%-2s", prt_err($rl));
|
||||
$str .= sprintf(" %2d", $$rl{fileno});
|
||||
$str .= $$rl{flag};
|
||||
$str .= $flag;
|
||||
$str .= sprintf(" %4d", $$rl{lineno});
|
||||
|
||||
# print dot if data is generated for this line, or label
|
||||
@@ -3049,9 +3111,12 @@ sub dump_rl {
|
||||
my ($rl) = @_;
|
||||
|
||||
printf "-- line: '%s'\n", $$rl{line};
|
||||
printf " err=%-3s, typ=%-4s, oper=%-6s, lineno=%3d, psect=%-6s, .=%6.6o\n",
|
||||
prt_err($rl), savestr($$rl{typ}), savestr($$rl{oper}), $$rl{lineno},
|
||||
$$rl{psect}, $$rl{dot};
|
||||
printf " e=%-3s f=%-3s t=%-6s o=%-8s l=%4d p=%-6s .=%6.6o",
|
||||
prt_err($rl), (join '', sort split '', $$rl{flag}),
|
||||
savestr($$rl{typ}), savestr($$rl{oper}), $$rl{lineno},
|
||||
$$rl{psect}, $$rl{dot};
|
||||
printf " MRmri=%d %d %d %d %d\n",
|
||||
$mdeflvl, $reptlvl, scalar(@mexecstk), scalar(@reptstk), scalar(@ifstk);
|
||||
my $i = 0;
|
||||
foreach my $rt (@{$$rl{tl}}) {
|
||||
printf " tl[%2d]: tag=%-4s, typ=%-2s, om=%-2s, em=%-2s, val='%s'",
|
||||
@@ -3120,7 +3185,7 @@ sub dump_rl {
|
||||
printf "\n";
|
||||
}
|
||||
foreach my $key (sort keys %{$rl}) {
|
||||
next if $key =~ m/^(line|err|typ|oper|lineno|psect|dot|opcode|opfmt|o[12](mod|reg|ebeg|eend)|ebeg|eend|tl|delist|outw|outb|cl|mexec)$/;
|
||||
next if $key =~ m/^(line|err|typ|oper|lineno|psect|dot|opcode|opfmt|o[12](mod|reg|ebeg|eend)|ebeg|eend|tl|delist|outw|outb|cl|mexec|flag|mcall)$/;
|
||||
printf " %-6s: %s\n", $key, savestr($$rl{$key});
|
||||
}
|
||||
return;
|
||||
@@ -3236,6 +3301,8 @@ sub print_help {
|
||||
print " --ocof=fnam create compound output (concrete file name)\n";
|
||||
print " --lsm create lsmem style memory dump (default file name)\n";
|
||||
print " --olsm=fnam create lsmem style memory dump (concrete file name)\n";
|
||||
print " --list=opt enable .list option\n";
|
||||
print " --nlist=opt disable .list option\n";
|
||||
print " --tpass1 trace line context in pass 1\n";
|
||||
print " --tpass2 trace line context in pass 2\n";
|
||||
print " --dsym1 dump psect and ust tables after pass 1\n";
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
.\" -*- nroff -*-
|
||||
.\" $Id: asm-11.1 1356 2023-01-26 15:10:23Z mueller $
|
||||
.\" $Id: asm-11.1 1359 2023-01-27 20:58:50Z mueller $
|
||||
.\" SPDX-License-Identifier: GPL-3.0-or-later
|
||||
.\" Copyright 2013-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
.\" Copyright 2013-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
.\"
|
||||
.\" ------------------------------------------------------------------
|
||||
.
|
||||
.TH ASM-11 1 2023-01-25 "Retro Project" "Retro Project Manual"
|
||||
.TH ASM-11 1 2023-01-27 "Retro Project" "Retro Project Manual"
|
||||
.\" ------------------------------------------------------------------
|
||||
.SH NAME
|
||||
asm-11 \- simple assembler for MACRO-11 style PDP-11 code
|
||||
@@ -71,8 +71,8 @@ Activated with the \fB\-\-lst\fP or \fB\-\-olst\fP options.
|
||||
.iff assembles block if condition tests false
|
||||
.ift assembles block if condition tests true
|
||||
.iftf assembles block regardless of condition
|
||||
.list parsed but otherwise ignored; me always enabled
|
||||
.nlist parsed but otherwise ignored
|
||||
.list minimal support for cnd,me,meb
|
||||
.nlist minimal support for cnd,me,meb
|
||||
.macro starts macro defintion (subset)
|
||||
.mcall load macro definitions
|
||||
.mdelete delete macro definitions
|
||||
@@ -113,6 +113,10 @@ a \.if df/ndf sees opcodes as defined (MACRO-11 doesn't)
|
||||
a \.if df/ndf sees register names as undefined (MACRO-11 doesn't)
|
||||
.IP "-"
|
||||
error codes on invail statements differ, especially A and Q
|
||||
.IP "-"
|
||||
the \.(n)list acts only on cnd, me and meb, ignores other values
|
||||
.IP "-"
|
||||
the \.(n)list default is cnd=0,me=0,meb=1 (MACRO-11 cnd=1,meb=0)
|
||||
.PD
|
||||
.RE
|
||||
.PP
|
||||
@@ -207,6 +211,19 @@ file \fIfnam\fR.
|
||||
If \fIfnam\fP is '-' the compound output is written to \fIstdout\fP.
|
||||
.
|
||||
.\" ----------------------------------------------
|
||||
.IP "\fB\-list\fI opt\fR"
|
||||
is equivalent to a '.list \fIopt\fP' directive at the beginning of the code.
|
||||
Supported values for \fIopt\fP are 'cnd', 'me' and 'meb'. Startup
|
||||
default is 'cnd' and 'me' disabled and 'meb' enabled.
|
||||
\fB\-list\fP can be given multiple times.
|
||||
.
|
||||
.\" ----------------------------------------------
|
||||
.IP "\fB\-nlist\fI opt\fR"
|
||||
is equivalent to a '.nlist \fIopt\fP' directive at the beginning of the code.
|
||||
\fB\-nlist\fP can be given multiple times.
|
||||
\fB\-nlist\fP options are processed after \fB\-list\fP options.
|
||||
.
|
||||
.\" ----------------------------------------------
|
||||
.IP "\fB\-help\fR"
|
||||
print full help text and exit.
|
||||
.
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
; $Id: cpu_details.mac 1358 2023-01-27 10:37:36Z mueller $
|
||||
; $Id: cpu_details.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; Revision History:
|
||||
; Date Rev Version Comment
|
||||
; 2023-01-27 1358 1.1 use .mcall and mlib
|
||||
; 2023-01-27 1359 1.1 use .mcall and mlib; use rt?jmp, hta??? macros
|
||||
; 2023-01-11 1349 1.0 Initial version
|
||||
; 2022-07-18 1259 0.1 First draft
|
||||
;
|
||||
@@ -19,6 +19,8 @@
|
||||
.mcall push,pop,push2
|
||||
.mcall hcmpeq,htsteq,htstne,htstge,hbiteq,hbitne
|
||||
.mcall vecset,vecclr
|
||||
.mcall rtijmp,rttjmp
|
||||
.mcall htabuf,htaadd,htaini,htacmp
|
||||
;
|
||||
; Preface: set up MMU for kernel mode (for some tests) =======================
|
||||
;
|
||||
@@ -880,32 +882,6 @@ ta0305: cmpb systyp,#sy.sih ; skip in SimH (different stklim logic)
|
||||
; Test A4: PSW + tbit traps +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
; This sub-section verifies operation of PSW register and tbit traps.
|
||||
;
|
||||
; helper macro for JMP via RTI with new PS,PC
|
||||
.macro rtijmp,newps,newpc
|
||||
push2 newps,newpc
|
||||
rti
|
||||
halt
|
||||
.endm
|
||||
;
|
||||
; helper macro for JMP via RTT with new PS,PC
|
||||
.macro rttjmp,newps,newpc
|
||||
push2 newps,newpc
|
||||
rtt
|
||||
halt
|
||||
.endm
|
||||
;
|
||||
; helper macro for trace area check setup
|
||||
.macro htinit,buf,nent
|
||||
hcmpeq #buf+<4*nent>,r5
|
||||
mov #buf,r5
|
||||
.endm
|
||||
;
|
||||
; helper macro for trace area check entry
|
||||
.macro htitem,tvec,tadr
|
||||
hcmpeq tvec,(r5)+
|
||||
hcmpeq tadr,(r5)+
|
||||
.endm
|
||||
;
|
||||
; Test A4.1 -- PSW direct write/read test ++++++++++++++++++++++++++++
|
||||
;
|
||||
ta0401:
|
||||
@@ -1191,13 +1167,11 @@ ta0404: vecset v..bpt,vhtbpt,cp.pr7 ; BPT handler, PR7 (lockout PIRQ)
|
||||
100$: trap 100
|
||||
110$:
|
||||
;
|
||||
200$: .word 0,0
|
||||
.word 0,0
|
||||
.word -1,-1
|
||||
200$: htabuf 2.
|
||||
;
|
||||
300$: htinit 200$,2. ; expect 2 items
|
||||
htitem #014,#100$ ; bpt before trap (none after !)
|
||||
htitem #036,#110$ ; final trap
|
||||
300$: htaini 200$,2. ; expect 2 items
|
||||
htacmp #v..bpt,#100$ ; bpt before trap (none after !)
|
||||
htacmp #v..trp,#110$ ; final trap
|
||||
;
|
||||
; part 1: simple instruction sequence -------------------------------
|
||||
; Checks that trace traps are taken instructions which allow prefetch
|
||||
@@ -1221,29 +1195,19 @@ ta0404: vecset v..bpt,vhtbpt,cp.pr7 ; BPT handler, PR7 (lockout PIRQ)
|
||||
1180$: trap 100 ; 9th inst
|
||||
1190$:
|
||||
;
|
||||
1200$: .word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word -1,-1
|
||||
1200$: htabuf 10.
|
||||
;
|
||||
1300$: htinit 1200$,10. ; expect 10 items
|
||||
htitem #014,#1100$ ; bpt before inc
|
||||
htitem #014,#1110$ ; bpt after inc
|
||||
htitem #014,#1120$ ; bpt after dec
|
||||
htitem #014,#1130$ ; bpt after cmp
|
||||
htitem #014,#1160$ ; bpt after bne (PC is bne target)
|
||||
htitem #014,#1140$ ; bpt after jsr (PC is jsr target)
|
||||
htitem #014,#1170$ ; bpt after rts (PC is rts target)
|
||||
htitem #014,#1150$ ; bpt after br (PC is br target)
|
||||
htitem #014,#1180$ ; bpt after jmp (PC is jmp target)
|
||||
htitem #036,#1190$ ; final trap
|
||||
1300$: htaini 1200$,10. ; expect 10 items
|
||||
htacmp #v..bpt,#1100$ ; bpt before inc
|
||||
htacmp #v..bpt,#1110$ ; bpt after inc
|
||||
htacmp #v..bpt,#1120$ ; bpt after dec
|
||||
htacmp #v..bpt,#1130$ ; bpt after cmp
|
||||
htacmp #v..bpt,#1160$ ; bpt after bne (PC is bne target)
|
||||
htacmp #v..bpt,#1140$ ; bpt after jsr (PC is jsr target)
|
||||
htacmp #v..bpt,#1170$ ; bpt after rts (PC is rts target)
|
||||
htacmp #v..bpt,#1150$ ; bpt after br (PC is br target)
|
||||
htacmp #v..bpt,#1180$ ; bpt after jmp (PC is jmp target)
|
||||
htacmp #v..trp,#1190$ ; final trap
|
||||
;
|
||||
; part 2: tracing of trap instructions (EMT tested) -----------------
|
||||
;
|
||||
@@ -1257,19 +1221,14 @@ ta0404: vecset v..bpt,vhtbpt,cp.pr7 ; BPT handler, PR7 (lockout PIRQ)
|
||||
2130$: trap 100
|
||||
2140$:
|
||||
;
|
||||
2200$: .word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word -1,-1
|
||||
2200$: htabuf 5.
|
||||
;
|
||||
2300$: htinit 2200$,5. ; expect 5 items
|
||||
htitem #014,#2110$ ; bpt after dec
|
||||
htitem #032,#2120$ ; emt (with return address)
|
||||
htitem #014,#2120$ ; bpt after emt (taken after emt)
|
||||
htitem #014,#2130$ ; bpt after nop
|
||||
htitem #036,#2140$ ; final trap
|
||||
2300$: htaini 2200$,5. ; expect 5 items
|
||||
htacmp #v..bpt,#2110$ ; bpt after dec
|
||||
htacmp #v..emt,#2120$ ; emt (with return address)
|
||||
htacmp #v..bpt,#2120$ ; bpt after emt (taken after emt)
|
||||
htacmp #v..bpt,#2130$ ; bpt after nop
|
||||
htacmp #v..trp,#2140$ ; final trap
|
||||
;
|
||||
; part 3: tbit vs interrupt precedence (via PIRQ) -------------------
|
||||
; Checks that interrupt has precedence over tbit traps.
|
||||
@@ -1295,23 +1254,20 @@ ta0404: vecset v..bpt,vhtbpt,cp.pr7 ; BPT handler, PR7 (lockout PIRQ)
|
||||
3110$: trap 100
|
||||
3120$:
|
||||
;
|
||||
3200$: .word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word -1,-1
|
||||
3200$: htabuf 3.
|
||||
;
|
||||
3300$: htinit 3200$,3. ; expect 3 items
|
||||
3300$: htaini 3200$,3. ; expect 3 items
|
||||
cmpb systyp,#sy.sih ; different checks for SimH service order
|
||||
beq 3310$
|
||||
; checks for w11
|
||||
htitem #240,#3110$ ; pirq (with return address)
|
||||
htitem #014,#3110$ ; bpt after movb
|
||||
htitem #036,#3120$ ; final trap
|
||||
htacmp #v..pir,#3110$ ; pirq (with return address)
|
||||
htacmp #v..bpt,#3110$ ; bpt after movb
|
||||
htacmp #v..trp,#3120$ ; final trap
|
||||
br 4000$
|
||||
; checks for SimH
|
||||
3310$: htitem #014,#3110$ ; bpt after movb first
|
||||
htitem #240,#vhtbpe ; pirq from bpt handler
|
||||
htitem #036,#3120$ ; final trap
|
||||
3310$: htacmp #v..bpt,#3110$ ; bpt after movb first
|
||||
htacmp #v..pir,#vhtbpe ; pirq from bpt handler
|
||||
htacmp #v..trp,#3120$ ; final trap
|
||||
;
|
||||
; part 4: traced WAIT and tbit --------------------------------------
|
||||
; Checks that traced WAIT does not produce tbit trap.
|
||||
@@ -1334,17 +1290,13 @@ ta0404: vecset v..bpt,vhtbpt,cp.pr7 ; BPT handler, PR7 (lockout PIRQ)
|
||||
4120$: trap 100
|
||||
4130$:
|
||||
;
|
||||
4200$: .word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word -1,-1
|
||||
4200$: htabuf 4.
|
||||
;
|
||||
4300$: htinit 4200$,4. ; expect 4 items
|
||||
htitem #014,#4110$ ; bpt after movb
|
||||
htitem #240,#4120$ ; pirq (with return address)
|
||||
htitem #014,#4120$ ; bpt after wait
|
||||
htitem #036,#4130$ ; final trap
|
||||
4300$: htaini 4200$,4. ; expect 4 items
|
||||
htacmp #v..bpt,#4110$ ; bpt after movb
|
||||
htacmp #v..pir,#4120$ ; pirq (with return address)
|
||||
htacmp #v..bpt,#4120$ ; bpt after wait
|
||||
htacmp #v..trp,#4130$ ; final trap
|
||||
;
|
||||
; part 5: WAIT and SPL in user mode ---------------------------------
|
||||
; Checks that WAIT and SPL in user mode are traced (are nop)
|
||||
@@ -1358,15 +1310,12 @@ ta0404: vecset v..bpt,vhtbpt,cp.pr7 ; BPT handler, PR7 (lockout PIRQ)
|
||||
5120$: trap 100
|
||||
5130$:
|
||||
;
|
||||
5200$: .word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word -1,-1
|
||||
5200$: htabuf 3.
|
||||
;
|
||||
5300$: htinit 5200$,3. ; expect 3 items
|
||||
htitem #014,#5110$ ; bpt after wait
|
||||
htitem #014,#5120$ ; bpt after spl
|
||||
htitem #036,#5130$ ; final trap
|
||||
5300$: htaini 5200$,3. ; expect 3 items
|
||||
htacmp #v..bpt,#5110$ ; bpt after wait
|
||||
htacmp #v..bpt,#5120$ ; bpt after spl
|
||||
htacmp #v..trp,#5130$ ; final trap
|
||||
;
|
||||
; part 6: tbit trap after continuation over s_idle ------------------
|
||||
; Checks instructions that complete via s_idle are properly traced
|
||||
@@ -1390,19 +1339,14 @@ ta0404: vecset v..bpt,vhtbpt,cp.pr7 ; BPT handler, PR7 (lockout PIRQ)
|
||||
6130$: trap 100
|
||||
6140$:
|
||||
;
|
||||
6200$: .word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word -1,-1
|
||||
6200$: htabuf 5.
|
||||
;
|
||||
6300$: htinit 6200$,5. ; expect 5 items
|
||||
htitem #014,#6110$ ; bpt after reset
|
||||
htitem #014,#6120$ ; bpt after mov
|
||||
htitem #014,#0 ; bpt after clr
|
||||
htitem #014,#6130$ ; bpt after jmp
|
||||
htitem #036,#6140$ ; final trap
|
||||
6300$: htaini 6200$,5. ; expect 5 items
|
||||
htacmp #v..bpt,#6110$ ; bpt after reset
|
||||
htacmp #v..bpt,#6120$ ; bpt after mov
|
||||
htacmp #v..bpt,#0 ; bpt after clr
|
||||
htacmp #v..bpt,#6130$ ; bpt after jmp
|
||||
htacmp #v..trp,#6140$ ; final trap
|
||||
;
|
||||
clr @#0
|
||||
clr @#2
|
||||
@@ -1419,13 +1363,12 @@ ta0404: vecset v..bpt,vhtbpt,cp.pr7 ; BPT handler, PR7 (lockout PIRQ)
|
||||
7110$: clr @#160000 ; will fail
|
||||
halt
|
||||
;
|
||||
7200$: .word 0,0
|
||||
.word -1,-1
|
||||
7200$: htabuf 1.
|
||||
;
|
||||
7300$: mov #stack,sp ; discard frame
|
||||
hcmpeq #cp.ito,cp.err ; check CPUERR
|
||||
htinit 7200$,1. ; expect 1 item
|
||||
htitem #014,#7110$ ; bpt after 1st clr
|
||||
htaini 7200$,1. ; expect 1 item
|
||||
htacmp #v..bpt,#7110$ ; bpt after 1st clr
|
||||
;
|
||||
vecclr v..iit ; restore
|
||||
;
|
||||
@@ -1443,11 +1386,10 @@ ta0404: vecset v..bpt,vhtbpt,cp.pr7 ; BPT handler, PR7 (lockout PIRQ)
|
||||
8100$: nop ; will tbit trap
|
||||
8110$: rti ; will not tbit trap (new PS tbit=0)
|
||||
;
|
||||
8200$: .word 0,0
|
||||
.word -1,-1
|
||||
8200$: htabuf 1.
|
||||
;
|
||||
8300$: htinit 8200$,1. ; expect 1 item
|
||||
htitem #014,#8110$ ; bpt after nop
|
||||
8300$: htaini 8200$,1. ; expect 1 item
|
||||
htacmp #v..bpt,#8110$ ; bpt after nop
|
||||
;
|
||||
; part 9: EMT that sets tbit ----------------------------------------
|
||||
; Checks that a vector flow loading a PS with tbit=1 does trap.
|
||||
@@ -1466,13 +1408,11 @@ ta0404: vecset v..bpt,vhtbpt,cp.pr7 ; BPT handler, PR7 (lockout PIRQ)
|
||||
9100$: nop ; will tbit trap
|
||||
9110$: rti ; will not tbit trap (new PS tbit=0)
|
||||
;
|
||||
9200$: .word 0,0
|
||||
.word 0,0
|
||||
.word -1,-1
|
||||
9200$: htabuf 2.
|
||||
;
|
||||
9300$: htinit 9200$,2. ; expect 2 items
|
||||
htitem #014,#9100$ ; bpt at entry of EMT handler
|
||||
htitem #014,#9110$ ; bpt after nop
|
||||
9300$: htaini 9200$,2. ; expect 2 items
|
||||
htacmp #v..bpt,#9100$ ; bpt at entry of EMT handler
|
||||
htacmp #v..bpt,#9110$ ; bpt after nop
|
||||
;
|
||||
; part 10: PIRQ that sets tbit ---------------------------------------
|
||||
; Checks that a vector flow loading a PS with tbit=1 does trap.
|
||||
@@ -1491,13 +1431,11 @@ ta0404: vecset v..bpt,vhtbpt,cp.pr7 ; BPT handler, PR7 (lockout PIRQ)
|
||||
10100$: clr cp.pir ; will tbit trap
|
||||
10110$: rti ; will not tbit trap (new PS tbit=0)
|
||||
;
|
||||
10200$: .word 0,0
|
||||
.word 0,0
|
||||
.word -1,-1
|
||||
10200$: htabuf 2.
|
||||
;
|
||||
10300$: htinit 10200$,2. ; expect 2 items
|
||||
htitem #014,#10100$ ; bpt at entry of PIRQ handler
|
||||
htitem #014,#10110$ ; bpt after movb
|
||||
10300$: htaini 10200$,2. ; expect 2 items
|
||||
htacmp #v..bpt,#10100$ ; bpt at entry of PIRQ handler
|
||||
htacmp #v..bpt,#10110$ ; bpt after movb
|
||||
;
|
||||
; restore ------------------------------------------------------------
|
||||
;
|
||||
@@ -2148,8 +2086,7 @@ vhuhlt: halt
|
||||
; If vhtbp0 is non-zero, the handler lowers priority to PRI=0 before RTT.
|
||||
;
|
||||
vhtbpt: htstge (r5) ; r5 at fence ?
|
||||
mov #014,(r5)+ ; track BPT vector
|
||||
mov (sp),(r5)+ ; track PC
|
||||
htaadd #v..bpt ; track BPT vector, track return PC
|
||||
tst vhtbp0 ; should PRI be lowered ?
|
||||
beq vhtbpe
|
||||
clr vhtbp0 ; and clear flag
|
||||
@@ -2162,8 +2099,7 @@ vhtbp0: .word 0
|
||||
; Signature is vector address + return PC (PC to test proper context).
|
||||
;
|
||||
vhtemt: htstge (r5) ; r5 at fence ?
|
||||
mov #032,(r5)+ ; track EMT vector
|
||||
mov (sp),(r5)+ ; track PC
|
||||
htaadd #v..emt ; track EMT vector, track return PC
|
||||
rti
|
||||
;
|
||||
; vhtpir - handler for PIRQ interrupt tracing ++++++++++++++++++++++++++++++++
|
||||
@@ -2173,8 +2109,7 @@ vhtemt: htstge (r5) ; r5 at fence ?
|
||||
;
|
||||
vhtpir: htstge (r5) ; r5 at fence ?
|
||||
clr cp.pir ; clear all PIRQ interrupts
|
||||
mov #240,(r5)+ ; track PIRQ vector
|
||||
mov (sp),(r5)+ ; track PC
|
||||
htaadd #v..pir ; track PIRQ vector, track return PC
|
||||
rti
|
||||
;
|
||||
; vhttrp - handler for TRAP, ends tracing ++++++++++++++++++++++++++++++++++++
|
||||
@@ -2183,8 +2118,7 @@ vhtpir: htstge (r5) ; r5 at fence ?
|
||||
; vhtend must be set for each execution
|
||||
;
|
||||
vhttrp: htstge (r5) ; r5 at fence ?
|
||||
mov #036,(r5)+ ; track TRAP vector
|
||||
mov (sp),(r5)+ ; track PC
|
||||
htaadd #v..trp ; track TRAP vector, track return PC
|
||||
mov vhtend,100$ ; remember vhtend
|
||||
mov #200$,vhtend ; restore blocker
|
||||
mov #stack,sp ; restore stack
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
; $Id: cpu_mmu.mac 1358 2023-01-27 10:37:36Z mueller $
|
||||
; $Id: cpu_mmu.mac 1359 2023-01-27 20:58:50Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2022-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; Revision History:
|
||||
; Date Rev Version Comment
|
||||
; 2023-01-27 1358 1.1 use .mcall and mlib
|
||||
; 2023-01-27 1358 1.1 use .mcall and mlib; use hta??? macros
|
||||
; 2023-01-05 1346 1.0 Initial version
|
||||
; 2022-07-24 1262 0.1 First draft
|
||||
;
|
||||
@@ -32,6 +32,7 @@
|
||||
.mcall push,pop
|
||||
.mcall hcmpeq,hcmbeq,htsteq,htstge,hbiteq,hbitne
|
||||
.mcall vecset,vecclr
|
||||
.mcall htabuf,htaadd,htaini,htacmp
|
||||
;
|
||||
; some useful definitions
|
||||
uipdr0 = uipdr+ 0
|
||||
@@ -89,18 +90,6 @@
|
||||
p6p1p2 = p6base+<1*100>+2 ; page 6, +1 click, +2
|
||||
p7base = <7*20000> ; page 7
|
||||
;
|
||||
; helper macro for trace area check setup (from cpu_details A4)
|
||||
.macro htinit,buf,nent
|
||||
hcmpeq #buf+<4*nent>,r5
|
||||
mov #buf,r5
|
||||
.endm
|
||||
;
|
||||
; helper macro for trace area check entry (from cpu_details A4)
|
||||
.macro htitem,tvec,tadr
|
||||
hcmpeq tvec,(r5)+
|
||||
hcmpeq tadr,(r5)+
|
||||
.endm
|
||||
;
|
||||
; Section A: pdr,par registers ===============================================
|
||||
; A1.1 test that pdr/par are 16 bit write/readable
|
||||
; A1.2 set up MMU default configuration
|
||||
@@ -1887,21 +1876,16 @@ td0201: tstb systyp ; skip if not on w11
|
||||
clr cp.psw ; PSW to default
|
||||
hcmpeq #<127.*md.plf>!md.aia!md.aiw!md.att,sipdr7 ; check sipdr7
|
||||
;
|
||||
htinit 2000$,5. ; expect 5 items
|
||||
htitem #250,#200$ ; mmu(ico=1) after movb to cp.pir+1
|
||||
htitem #250,#p2base+2 ; mmu(ico=1) after 1st instruction fetch
|
||||
htitem #240,#200$ ; PIRQ, sees PC after movb to cp.pir+1
|
||||
htitem #250,#p2base+<vc3l1-vc3> ; mmu(trap) after clr of cp.pir
|
||||
htitem #032,#p2base+<vc3l2-vc3> ; EMT after emt 100
|
||||
htaini 2000$,5. ; expect 5 items
|
||||
htacmp #250,#200$ ; mmu(ico=1) after movb to cp.pir+1
|
||||
htacmp #250,#p2base+2 ; mmu(ico=1) after 1st instruction fetch
|
||||
htacmp #240,#200$ ; PIRQ, sees PC after movb to cp.pir+1
|
||||
htacmp #250,#p2base+<vc3l1-vc3> ; mmu(trap) after clr of cp.pir
|
||||
htacmp #032,#p2base+<vc3l2-vc3> ; EMT after emt 100
|
||||
;
|
||||
jmp 9000$
|
||||
;
|
||||
2000$: .word 0,0 ; trace data area
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word 0,0
|
||||
.word -1,-1
|
||||
2000$: htabuf 5. ; trace area
|
||||
;
|
||||
; MMU handler ----------------------------------------------
|
||||
; It expects an abort with ico=1, an abort with ico=0 and a trap.
|
||||
@@ -2452,15 +2436,12 @@ te0201: mov #m0.ent!m0.ena,mmr0 ; enable mmu with traps ;! MMU 18
|
||||
call p5ce21 ; start probe code in page 5
|
||||
1000$: br 2000$ ; rts will land here
|
||||
;
|
||||
1500$: .word 0,0 ; 1st marker (MMU for movb)
|
||||
.word 0,0 ; 2nd marker (PIRQ)
|
||||
.word 0,0 ; 3rd marker (MMU for rts)
|
||||
.word -1,-1 ; fence
|
||||
1500$: htabuf 3. ; trace area
|
||||
;
|
||||
2000$: htinit 1500$,3. ; expect 3 items
|
||||
htitem #250,#p5ce21+6 ; mmu for movb
|
||||
htitem #240,#p5ce21+6 ; PIRQ, sees PC after movb
|
||||
htitem #250,#1000$ ; mmu for rts, PC is return address
|
||||
2000$: htaini 1500$,3. ; expect 3 items
|
||||
htacmp #250,#p5ce21+6 ; mmu for movb
|
||||
htacmp #240,#p5ce21+6 ; PIRQ, sees PC after movb
|
||||
htacmp #250,#1000$ ; mmu for rts, PC is return address
|
||||
;
|
||||
reset ; mmu off ;! MMU off
|
||||
;
|
||||
@@ -2739,8 +2720,7 @@ vhuhlt: halt
|
||||
;
|
||||
vhtmmu: htstge (r5) ; r5 at fence ?
|
||||
bic #m0.trp,mmr0 ; allow further MMU traps
|
||||
mov #250,(r5)+ ; track MMU vector
|
||||
mov (sp),(r5)+ ; track PC
|
||||
htaadd #v..mmu ; track MMU vector, track return PC
|
||||
rti
|
||||
;
|
||||
; vhtpir - handler for PIRQ interrupt tracing ++++++++++++++++++++++++++++++++
|
||||
@@ -2750,8 +2730,7 @@ vhtmmu: htstge (r5) ; r5 at fence ?
|
||||
;
|
||||
vhtpir: htstge (r5) ; r5 at fence ?
|
||||
clr cp.pir ; clear all PIRQ interrupts
|
||||
mov #240,(r5)+ ; track PIRQ vector
|
||||
mov (sp),(r5)+ ; track PC
|
||||
htaadd #v..pir ; track PIRQ vector, track return PC
|
||||
rti
|
||||
;
|
||||
; Test codes that will be mapped in user or supervisor mode ==================
|
||||
@@ -2831,8 +2810,7 @@ vc2dat: .word 010111
|
||||
;
|
||||
. = 105000 ; I space ------------------------------------
|
||||
vc3: htstge (r5) ; r5 at fence ?
|
||||
mov #240,(r5)+ ; trace
|
||||
mov (sp),(r5)+
|
||||
htaadd #v..pir ; track PIRQ vector, track return PC
|
||||
clr @#cp.pir ; cancel PIRQ (use absolute mode!)
|
||||
vc3l1: emt 100 ; delegate RTI to system service
|
||||
vc3l2: halt ; label after emt
|
||||
|
||||
Reference in New Issue
Block a user