diff --git a/xa/src/xad.h b/xa/src/xad.h index 2c2a64c..244241f 100644 --- a/xa/src/xad.h +++ b/xa/src/xad.h @@ -39,4 +39,6 @@ t[i++] = f & 255; \ } while (0) +#define wval_len 5 /* number of bytes stored in wval() call */ + #endif /* __XA65_XAD_H__ */ diff --git a/xa/src/xat.c b/xa/src/xat.c index 4a71e11..cd03db0 100644 --- a/xa/src/xat.c +++ b/xa/src/xat.c @@ -834,12 +834,12 @@ printf("reloc: er=%d, l=%d, segment=%d, pc[%d]=%04x, pc[abs(%d)]=%04x, pc[text(% t[0]=Kdsb; i=1; bl=tmp=(tmp - (pc[segment] & (tmp-1))) & (tmp-1); - wval(i,tmp, 0); + wval(i,tmp, 0); // 5 byte t[i++]=','; tmp2= 0xea; - wval(i,tmp2, 0); /* nop opcode */ + wval(i,tmp2, 0); /* nop opcode, another 5 byte */ t[i++]=T_END; - *ll=9; + *ll=wval_len * 2 + 3; //13; //9; er=E_OKDEF; } else { *ll=0; /* ignore if aligned right */ diff --git a/xa/tests/align/Makefile b/xa/tests/align/Makefile new file mode 100644 index 0000000..206eb76 --- /dev/null +++ b/xa/tests/align/Makefile @@ -0,0 +1,100 @@ + +XA=../../xa + +default: all +all: t01 t02 t03 t11 t12 t13 t21 t22 t23 t31 t32 t33 t41 t42 t43 + +# BSD only has suffix rules + +.SUFFIXES: .o65 .hex .a65 + +#%.o65: %.s +.a65.o65: + ${XA} -R -c -o $@ $< + +#%.hex: %.o65 +.o65.hex: + ../hextool $< > $@ + +############################################### +# text segment correctly aligned + +t01: t01.o65 + cmp $@.o65 $@.ok + +t02: t02.o65 + cmp $@.o65 $@.ok + +t03: t03.o65 + cmp $@.o65 $@.ok + +############################################### +# data segment correctly aligned + +t11: t11.o65 + cmp $@.o65 $@.ok + +t12: t12.o65 + cmp $@.o65 $@.ok + +t13: t13.o65 + cmp $@.o65 $@.ok + +############################################### +# text segment incorrectly aligned + +t21: t01.a65 + ${XA} -R -c -bt 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +t22: t02.a65 + ${XA} -R -c -bt 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +t23: t03.a65 + ${XA} -R -c -bt 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +############################################### +# text segment correctly aligned, but data segment not (even if empty) + +t31: t01.a65 + ${XA} -R -c -bd 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +t32: t02.a65 + ${XA} -R -c -bd 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +t33: t03.a65 + ${XA} -R -c -bd 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +############################################### +# data segment incorrectly aligned + +t41: t11.a65 + ${XA} -R -c -bd 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +t42: t12.a65 + ${XA} -R -c -bd 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + +t43: t13.a65 + ${XA} -R -c -bd 1025 -o $@.o65 $< 2> $@.msg + cmp $@.msg $@.mok + cmp $@.o65 $@.ok + + +clean: + rm -f *.o65 *.hex + diff --git a/xa/tests/align/t01.a65 b/xa/tests/align/t01.a65 new file mode 100644 index 0000000..0cb893e --- /dev/null +++ b/xa/tests/align/t01.a65 @@ -0,0 +1,10 @@ + + .text + + tay + + .align 2 + + tay + + diff --git a/xa/tests/align/t01.ok b/xa/tests/align/t01.ok new file mode 100644 index 0000000..d985cf3 Binary files /dev/null and b/xa/tests/align/t01.ok differ diff --git a/xa/tests/align/t02.a65 b/xa/tests/align/t02.a65 new file mode 100644 index 0000000..21605cc --- /dev/null +++ b/xa/tests/align/t02.a65 @@ -0,0 +1,10 @@ + + .text + + tay + + .align 4 + + tay + + diff --git a/xa/tests/align/t02.ok b/xa/tests/align/t02.ok new file mode 100644 index 0000000..2838a66 Binary files /dev/null and b/xa/tests/align/t02.ok differ diff --git a/xa/tests/align/t03.a65 b/xa/tests/align/t03.a65 new file mode 100644 index 0000000..69e4fe1 --- /dev/null +++ b/xa/tests/align/t03.a65 @@ -0,0 +1,10 @@ + + .text + + tay + + .align 256 + + tay + + diff --git a/xa/tests/align/t03.ok b/xa/tests/align/t03.ok new file mode 100644 index 0000000..6eeab05 Binary files /dev/null and b/xa/tests/align/t03.ok differ diff --git a/xa/tests/align/t11.a65 b/xa/tests/align/t11.a65 new file mode 100644 index 0000000..81ecca1 --- /dev/null +++ b/xa/tests/align/t11.a65 @@ -0,0 +1,10 @@ + + .data + + tay + + .align 2 + + tay + + diff --git a/xa/tests/align/t11.ok b/xa/tests/align/t11.ok new file mode 100644 index 0000000..2e3002e Binary files /dev/null and b/xa/tests/align/t11.ok differ diff --git a/xa/tests/align/t12.a65 b/xa/tests/align/t12.a65 new file mode 100644 index 0000000..2c9b98e --- /dev/null +++ b/xa/tests/align/t12.a65 @@ -0,0 +1,10 @@ + + .data + + tay + + .align 4 + + tay + + diff --git a/xa/tests/align/t12.ok b/xa/tests/align/t12.ok new file mode 100644 index 0000000..51b7e80 Binary files /dev/null and b/xa/tests/align/t12.ok differ diff --git a/xa/tests/align/t13.a65 b/xa/tests/align/t13.a65 new file mode 100644 index 0000000..fc4a388 --- /dev/null +++ b/xa/tests/align/t13.a65 @@ -0,0 +1,10 @@ + + .data + + tay + + .align 256 + + tay + + diff --git a/xa/tests/align/t13.ok b/xa/tests/align/t13.ok new file mode 100644 index 0000000..01f0862 Binary files /dev/null and b/xa/tests/align/t13.ok differ diff --git a/xa/tests/align/t21.mok b/xa/tests/align/t21.mok new file mode 100644 index 0000000..7d5c4f8 --- /dev/null +++ b/xa/tests/align/t21.mok @@ -0,0 +1 @@ +Warning: text segment ($0401) start address doesn't align to 2! diff --git a/xa/tests/align/t21.msg b/xa/tests/align/t21.msg new file mode 100644 index 0000000..7d5c4f8 --- /dev/null +++ b/xa/tests/align/t21.msg @@ -0,0 +1 @@ +Warning: text segment ($0401) start address doesn't align to 2! diff --git a/xa/tests/align/t21.ok b/xa/tests/align/t21.ok new file mode 100644 index 0000000..8eb2587 Binary files /dev/null and b/xa/tests/align/t21.ok differ diff --git a/xa/tests/align/t22.mok b/xa/tests/align/t22.mok new file mode 100644 index 0000000..d00c961 --- /dev/null +++ b/xa/tests/align/t22.mok @@ -0,0 +1 @@ +Warning: text segment ($0401) start address doesn't align to 4! diff --git a/xa/tests/align/t22.msg b/xa/tests/align/t22.msg new file mode 100644 index 0000000..d00c961 --- /dev/null +++ b/xa/tests/align/t22.msg @@ -0,0 +1 @@ +Warning: text segment ($0401) start address doesn't align to 4! diff --git a/xa/tests/align/t22.ok b/xa/tests/align/t22.ok new file mode 100644 index 0000000..5cc8ec6 Binary files /dev/null and b/xa/tests/align/t22.ok differ diff --git a/xa/tests/align/t23.mok b/xa/tests/align/t23.mok new file mode 100644 index 0000000..1316717 --- /dev/null +++ b/xa/tests/align/t23.mok @@ -0,0 +1 @@ +Warning: text segment ($0401) start address doesn't align to 256! diff --git a/xa/tests/align/t23.msg b/xa/tests/align/t23.msg new file mode 100644 index 0000000..1316717 --- /dev/null +++ b/xa/tests/align/t23.msg @@ -0,0 +1 @@ +Warning: text segment ($0401) start address doesn't align to 256! diff --git a/xa/tests/align/t23.ok b/xa/tests/align/t23.ok new file mode 100644 index 0000000..f65a517 Binary files /dev/null and b/xa/tests/align/t23.ok differ diff --git a/xa/tests/align/t31.mok b/xa/tests/align/t31.mok new file mode 100644 index 0000000..27b0e24 --- /dev/null +++ b/xa/tests/align/t31.mok @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 2! diff --git a/xa/tests/align/t31.msg b/xa/tests/align/t31.msg new file mode 100644 index 0000000..27b0e24 --- /dev/null +++ b/xa/tests/align/t31.msg @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 2! diff --git a/xa/tests/align/t31.ok b/xa/tests/align/t31.ok new file mode 100644 index 0000000..8131eb0 Binary files /dev/null and b/xa/tests/align/t31.ok differ diff --git a/xa/tests/align/t32.mok b/xa/tests/align/t32.mok new file mode 100644 index 0000000..d91c7a2 --- /dev/null +++ b/xa/tests/align/t32.mok @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 4! diff --git a/xa/tests/align/t32.msg b/xa/tests/align/t32.msg new file mode 100644 index 0000000..d91c7a2 --- /dev/null +++ b/xa/tests/align/t32.msg @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 4! diff --git a/xa/tests/align/t32.ok b/xa/tests/align/t32.ok new file mode 100644 index 0000000..05890a9 Binary files /dev/null and b/xa/tests/align/t32.ok differ diff --git a/xa/tests/align/t33.mok b/xa/tests/align/t33.mok new file mode 100644 index 0000000..0ea3c00 --- /dev/null +++ b/xa/tests/align/t33.mok @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 256! diff --git a/xa/tests/align/t33.msg b/xa/tests/align/t33.msg new file mode 100644 index 0000000..0ea3c00 --- /dev/null +++ b/xa/tests/align/t33.msg @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 256! diff --git a/xa/tests/align/t33.ok b/xa/tests/align/t33.ok new file mode 100644 index 0000000..ededf66 Binary files /dev/null and b/xa/tests/align/t33.ok differ diff --git a/xa/tests/align/t41.mok b/xa/tests/align/t41.mok new file mode 100644 index 0000000..27b0e24 --- /dev/null +++ b/xa/tests/align/t41.mok @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 2! diff --git a/xa/tests/align/t41.msg b/xa/tests/align/t41.msg new file mode 100644 index 0000000..27b0e24 --- /dev/null +++ b/xa/tests/align/t41.msg @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 2! diff --git a/xa/tests/align/t41.ok b/xa/tests/align/t41.ok new file mode 100644 index 0000000..b834fbc Binary files /dev/null and b/xa/tests/align/t41.ok differ diff --git a/xa/tests/align/t42.mok b/xa/tests/align/t42.mok new file mode 100644 index 0000000..d91c7a2 --- /dev/null +++ b/xa/tests/align/t42.mok @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 4! diff --git a/xa/tests/align/t42.msg b/xa/tests/align/t42.msg new file mode 100644 index 0000000..d91c7a2 --- /dev/null +++ b/xa/tests/align/t42.msg @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 4! diff --git a/xa/tests/align/t42.ok b/xa/tests/align/t42.ok new file mode 100644 index 0000000..bdd3cc0 Binary files /dev/null and b/xa/tests/align/t42.ok differ diff --git a/xa/tests/align/t43.mok b/xa/tests/align/t43.mok new file mode 100644 index 0000000..0ea3c00 --- /dev/null +++ b/xa/tests/align/t43.mok @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 256! diff --git a/xa/tests/align/t43.msg b/xa/tests/align/t43.msg new file mode 100644 index 0000000..0ea3c00 --- /dev/null +++ b/xa/tests/align/t43.msg @@ -0,0 +1 @@ +Warning: data segment ($0401) start address doesn't align to 256! diff --git a/xa/tests/align/t43.ok b/xa/tests/align/t43.ok new file mode 100644 index 0000000..1384ef4 Binary files /dev/null and b/xa/tests/align/t43.ok differ