commit dcb13199b1122210a423fa1e7db218ea7e05ab31
parent f930047fb00b66be7171661d6ddb12415e82b31a
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Sat, 16 Dec 2017 20:15:30 +0100
[as] Add align pseudo instruction
Diffstat:
2 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/as/ins.c b/as/ins.c
@@ -206,3 +206,22 @@ global(Op *op, Node **args)
sym->flags |= FGLOBAL;
}
+
+void
+align(Op *op, Node **args)
+{
+ Symbol *sym = args[0]->sym;
+ TUINT curpc, pc, al;
+
+ if ((sym->flags & FABS) == 0)
+ error("align expression is not an absolute expression");
+ if ((al = sym->value) == 0)
+ return;
+
+ al--;
+ curpc = cursec->curpc;
+ pc = curpc+al & ~al;
+
+ for (al = pc - curpc; al > 0; --al)
+ emit((char []) {0}, 1);
+}
diff --git a/as/target/x80/x80.dat b/as/target/x80/x80.dat
@@ -28,6 +28,7 @@
.EXTERN sym+ 0 none extrn Z80,R800,GB80
.STRING string+ 0 none string Z80,R800,GB80
.ASCII string+ 0 none ascii Z80,R800,GB80
+.ALIGN imm16+ 0 none align Z80,R800,GB80
NOP none 1 0x00 noargs Z80,R800,GB80
EI none 1 0xfb noargs Z80,R800,GB80