mirror of
https://github.com/open-simh/simtools.git
synced 2026-04-26 12:07:11 +00:00
@@ -1468,7 +1468,7 @@ static int assemble(
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case OC_JSR:
|
case OC_JSR:
|
||||||
/* First op is register, second is gen. */ {
|
/* For JSR and XOR, first op is register, second is gen. */ {
|
||||||
ADDR_MODE mode;
|
ADDR_MODE mode;
|
||||||
EX_TREE *value;
|
EX_TREE *value;
|
||||||
unsigned reg;
|
unsigned reg;
|
||||||
@@ -1496,7 +1496,7 @@ static int assemble(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((mode.type & 070) == 0) {
|
if (op->value == I_JSR && (mode.type & 070) == 0) {
|
||||||
report(stack->top, "JSR Rn,Rm is illegal\n");
|
report(stack->top, "JSR Rn,Rm is illegal\n");
|
||||||
/* But encode it anyway... */
|
/* But encode it anyway... */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,47 +3,80 @@
|
|||||||
3 ; Tests the addressing modes for JMP.
|
3 ; Tests the addressing modes for JMP.
|
||||||
4 ; JMP Rx is not allowed, all other modes are.
|
4 ; JMP Rx is not allowed, all other modes are.
|
||||||
5 ;
|
5 ;
|
||||||
6
|
6 ; XOR shares the instruction format with JSR
|
||||||
7 000000 000167 000104 start: jmp label ; rel(pc) jumps to label
|
7 ; (their source operand can only be a register),
|
||||||
8 000004 000177 000100 jmp @label ; @rel(pc) does something else!
|
8 ; but XOR Rx,Ry is allowed whereas JSR Rx,Ry is not.
|
||||||
9 000010 000127 000110' jmp #label ; (pc)+ does something else!
|
9 ;
|
||||||
10 000014 000137 000110' jmp @#label ; @(pc)+ jumps to label
|
10
|
||||||
11
|
11 000000 000167 000150 start: jmp label ; rel(pc) jumps to label
|
||||||
test-jmp.mac:12: ***ERROR JMP Rn is illegal
|
12 000004 000177 000144 jmp @label ; @rel(pc) does something else!
|
||||||
12 000020 000101 jmp r1 ; must fail
|
13 000010 000127 000154' jmp #label ; (pc)+ does something else!
|
||||||
13 000022 000112 jmp (r2)
|
14 000014 000137 000154' jmp @#label ; @(pc)+ jumps to label
|
||||||
14 000024 000121 jmp (r1)+
|
15
|
||||||
15 000026 000131 jmp @(r1)+
|
test-jmp.mac:16: ***ERROR JMP Rn is illegal
|
||||||
16 000030 000141 jmp -(r1)
|
16 000020 000101 jmp r1 ; must fail
|
||||||
17 000032 000151 jmp @-(r1)
|
17 000022 000112 jmp (r2)
|
||||||
18 000034 000161 001234 jmp 1234(r1)
|
18 000024 000121 jmp (r1)+
|
||||||
19 000040 000171 001234 jmp @1234(r1)
|
19 000026 000131 jmp @(r1)+
|
||||||
20
|
20 000030 000141 jmp -(r1)
|
||||||
21 000044 004067 000040 secnd: jsr r0,label ; rel(pc) jumps to label
|
21 000032 000151 jmp @-(r1)
|
||||||
22 000050 004077 000034 jsr r0,@label ; @rel(pc) does something else!
|
22 000034 000161 001234 jmp 1234(r1)
|
||||||
23 000054 004027 000110' jsr r0,#label ; (pc)+ does something else!
|
23 000040 000171 001234 jmp @1234(r1)
|
||||||
24 000060 004037 000110' jsr r0,@#label ; @(pc)+ jumps to label
|
24
|
||||||
25
|
25 000044 004067 000104 secnd: jsr r0,label ; rel(pc) jumps to label
|
||||||
test-jmp.mac:26: ***ERROR JSR Rn,Rm is illegal
|
26 000050 004077 000100 jsr r0,@label ; @rel(pc) does something else!
|
||||||
26 000064 004201 jsr r2,r1 ; must fail
|
27 000054 004027 000154' jsr r0,#label ; (pc)+ does something else!
|
||||||
27 000066 004312 jsr r3,(r2)
|
28 000060 004037 000154' jsr r0,@#label ; @(pc)+ jumps to label
|
||||||
28 000070 004421 jsr r4,(r1)+
|
29
|
||||||
29 000072 004531 jsr r5,@(r1)+
|
test-jmp.mac:30: ***ERROR JSR Rn,Rm is illegal
|
||||||
30 000074 004241 jsr r2,-(r1)
|
30 000064 004201 jsr r2,r1 ; must fail
|
||||||
31 000076 004351 jsr r3,@-(r1)
|
31 000066 004312 jsr r3,(r2)
|
||||||
32 000100 004461 001234 jsr r4,1234(r1)
|
32 000070 004421 jsr r4,(r1)+
|
||||||
33 000104 004571 001234 jsr r5,@1234(r1)
|
33 000072 004531 jsr r5,@(r1)+
|
||||||
34
|
34 000074 004241 jsr r2,-(r1)
|
||||||
35 000110 000207 label: rts pc
|
35 000076 004351 jsr r3,@-(r1)
|
||||||
35
|
36 000100 004461 001234 jsr r4,1234(r1)
|
||||||
|
37 000104 004571 001234 jsr r5,@1234(r1)
|
||||||
|
38
|
||||||
|
39 000110 074067 000040 third: xor r0,label ; rel(pc)
|
||||||
|
40 000114 074077 000034 xor r0,@label ; @rel(pc)
|
||||||
|
41 000120 074027 000154' xor r0,#label ; (pc)+
|
||||||
|
42 000124 074037 000154' xor r0,@#label ; @(pc)+
|
||||||
|
43
|
||||||
|
44 000130 074201 xor r2,r1 ; must succeed
|
||||||
|
45 000132 074312 xor r3,(r2) ; must succeed
|
||||||
|
46 000134 074421 xor r4,(r1)+ ; must succeed
|
||||||
|
47 000136 074531 xor r5,@(r1)+ ; must succeed
|
||||||
|
48 000140 074241 xor r2,-(r1) ; must succeed
|
||||||
|
49 000142 074351 xor r3,@-(r1) ; must succeed
|
||||||
|
50 000144 074461 001234 xor r4,1234(r1) ; must succeed
|
||||||
|
51 000150 074571 001234 xor r5,@1234(r1) ; must succeed
|
||||||
|
52
|
||||||
|
test-jmp.mac:53: ***ERROR Illegal addressing mode
|
||||||
|
53 xor (r2),r1 ; must fail
|
||||||
|
test-jmp.mac:54: ***ERROR Illegal addressing mode
|
||||||
|
54 xor (r2)+,r1 ; must fail
|
||||||
|
test-jmp.mac:55: ***ERROR Illegal addressing mode
|
||||||
|
55 xor @(r2)+,r1 ; must fail
|
||||||
|
test-jmp.mac:56: ***ERROR Illegal addressing mode
|
||||||
|
56 xor -(r2),r1 ; must fail
|
||||||
|
test-jmp.mac:57: ***ERROR Illegal addressing mode
|
||||||
|
57 xor @-(r2),r1 ; must fail
|
||||||
|
test-jmp.mac:58: ***ERROR Illegal addressing mode
|
||||||
|
58 xor 1234(r2),r1 ; must fail
|
||||||
|
test-jmp.mac:59: ***ERROR Illegal addressing mode
|
||||||
|
59 xor @1234(r2),r1 ; must fail
|
||||||
|
60
|
||||||
|
61 000154 000207 label: rts pc
|
||||||
|
61
|
||||||
|
|
||||||
|
|
||||||
Symbol table
|
Symbol table
|
||||||
|
|
||||||
. ******R 001 LABEL 000110R 001 SECND 000044R 001 START 000000R 001
|
. ******R 001 LABEL 000154R 001 SECND 000044R 001 START 000000R 001 THIRD 000110R 001
|
||||||
|
|
||||||
|
|
||||||
Program sections:
|
Program sections:
|
||||||
|
|
||||||
. ABS. 000000 000 (RW,I,GBL,ABS,OVR,NOSAV)
|
. ABS. 000000 000 (RW,I,GBL,ABS,OVR,NOSAV)
|
||||||
000112 001 (RW,I,LCL,REL,CON,NOSAV)
|
000156 001 (RW,I,LCL,REL,CON,NOSAV)
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
; Tests the addressing modes for JMP.
|
; Tests the addressing modes for JMP.
|
||||||
; JMP Rx is not allowed, all other modes are.
|
; JMP Rx is not allowed, all other modes are.
|
||||||
;
|
;
|
||||||
|
; XOR shares the instruction format with JSR
|
||||||
|
; (their source operand can only be a register),
|
||||||
|
; but XOR Rx,Ry is allowed whereas JSR Rx,Ry is not.
|
||||||
|
;
|
||||||
|
|
||||||
start: jmp label ; rel(pc) jumps to label
|
start: jmp label ; rel(pc) jumps to label
|
||||||
jmp @label ; @rel(pc) does something else!
|
jmp @label ; @rel(pc) does something else!
|
||||||
@@ -32,4 +36,26 @@ secnd: jsr r0,label ; rel(pc) jumps to label
|
|||||||
jsr r4,1234(r1)
|
jsr r4,1234(r1)
|
||||||
jsr r5,@1234(r1)
|
jsr r5,@1234(r1)
|
||||||
|
|
||||||
|
third: xor r0,label ; rel(pc)
|
||||||
|
xor r0,@label ; @rel(pc)
|
||||||
|
xor r0,#label ; (pc)+
|
||||||
|
xor r0,@#label ; @(pc)+
|
||||||
|
|
||||||
|
xor r2,r1 ; must succeed
|
||||||
|
xor r3,(r2) ; must succeed
|
||||||
|
xor r4,(r1)+ ; must succeed
|
||||||
|
xor r5,@(r1)+ ; must succeed
|
||||||
|
xor r2,-(r1) ; must succeed
|
||||||
|
xor r3,@-(r1) ; must succeed
|
||||||
|
xor r4,1234(r1) ; must succeed
|
||||||
|
xor r5,@1234(r1) ; must succeed
|
||||||
|
|
||||||
|
xor (r2),r1 ; must fail
|
||||||
|
xor (r2)+,r1 ; must fail
|
||||||
|
xor @(r2)+,r1 ; must fail
|
||||||
|
xor -(r2),r1 ; must fail
|
||||||
|
xor @-(r2),r1 ; must fail
|
||||||
|
xor 1234(r2),r1 ; must fail
|
||||||
|
xor @1234(r2),r1 ; must fail
|
||||||
|
|
||||||
label: rts pc
|
label: rts pc
|
||||||
|
|||||||
Reference in New Issue
Block a user