}
tb->buf[tb->len] = tok;
- return tb->len++;
+ return (int)tb->len++;
}
void ulas_tokfree(struct ulas_tok *t) {
}
eb->buf[eb->len] = expr;
- return eb->len++;
+ return (int)eb->len++;
}
void ulas_exprbufclear(struct ulas_exprbuf *eb) { eb->len = 0; }
}
sb->buf[sb->len] = sym;
- return sb->len++;
+ return (int)sb->len++;
}
struct ulas_sym *ulas_symbufget(struct ulas_symbuf *sb, int i) {
*/
int ulas_istokend(struct ulas_str *tok) {
- long len = strnlen(tok->buf, tok->maxlen);
+ long len = (int)strnlen(tok->buf, tok->maxlen);
// skip comments though, they are not trailing tokens!
if (len > 0 && tok->buf[0] != ULAS_TOK_COMMENT) {
return 0;
switch ((int)e->type) {
case ULAS_EXPBIN: {
- struct ulas_tok *op = ulas_tokbufget(&ulas.toks, e->val.bin.op);
+ struct ulas_tok *op = ulas_tokbufget(&ulas.toks, (int)e->val.bin.op);
if (!op) {
ULASPANIC("Binary operator was NULL\n");
}
- int left = ulas_intexpreval(e->val.bin.left, rc);
- int right = ulas_intexpreval(e->val.bin.right, rc);
+ int left = ulas_intexpreval((int)e->val.bin.left, rc);
+ int right = ulas_intexpreval((int)e->val.bin.right, rc);
switch ((int)op->type) {
case ULAS_EQ:
return left == right;
break;
}
case ULAS_EXPUN: {
- struct ulas_tok *op = ulas_tokbufget(&ulas.toks, e->val.un.op);
+ struct ulas_tok *op = ulas_tokbufget(&ulas.toks, (int)e->val.un.op);
if (!op) {
ULASPANIC("Unary operator was NULL\n");
}
- int right = ulas_intexpreval(e->val.un.right, rc);
+ int right = ulas_intexpreval((int)e->val.un.right, rc);
switch ((int)op->type) {
case '!':
return !right;
break;
}
case ULAS_EXPGRP: {
- return ulas_intexpreval(e->val.grp.head, rc);
+ return ulas_intexpreval((int)e->val.grp.head, rc);
}
case ULAS_EXPPRIM: {
- struct ulas_tok *t = ulas_tokbufget(&ulas.toks, e->val.prim.tok);
+ struct ulas_tok *t = ulas_tokbufget(&ulas.toks, (int)e->val.prim.tok);
return ulas_valint(t, 0, rc);
}
}
return -1;
}
- int expr = -1;
- if ((expr = ulas_parseexpr()) == -1) {
+ int expr = ulas_parseexpr();
+ if (expr == -1) {
*rc = -1;
return -1;
}
#define ULAS_INSTR_R8R8D(name, base_op, reg_left) \
ULAS_INSTR_R8R8(name, base_op, reg_left, ULAS_REG_B), \
- ULAS_INSTR_R8R8(name, base_op + 1, reg_left, ULAS_REG_C), \
- ULAS_INSTR_R8R8(name, base_op + 2, reg_left, ULAS_REG_D), \
- ULAS_INSTR_R8R8(name, base_op + 3, reg_left, ULAS_REG_E), \
- ULAS_INSTR_R8R8(name, base_op + 4, reg_left, ULAS_REG_H), \
- ULAS_INSTR_R8R8(name, base_op + 5, reg_left, ULAS_REG_L), \
- {(name), {(reg_left), ',', '[', ULAS_REG_HL, ']', 0}, {base_op + 6, 0}}, \
- ULAS_INSTR_R8R8(name, base_op + 7, reg_left, ULAS_REG_A)
+ ULAS_INSTR_R8R8(name, (base_op) + 1, reg_left, ULAS_REG_C), \
+ ULAS_INSTR_R8R8(name, (base_op) + 2, reg_left, ULAS_REG_D), \
+ ULAS_INSTR_R8R8(name, (base_op) + 3, reg_left, ULAS_REG_E), \
+ ULAS_INSTR_R8R8(name, (base_op) + 4, reg_left, ULAS_REG_H), \
+ ULAS_INSTR_R8R8(name, (base_op) + 5, reg_left, ULAS_REG_L), \
+ {(name), \
+ {(reg_left), ',', '[', ULAS_REG_HL, ']', 0}, \
+ {(base_op) + 6, 0}}, \
+ ULAS_INSTR_R8R8(name, (base_op) + 7, reg_left, ULAS_REG_A)
// <name> a, r8
#define ULAS_INSTR_ALUR8D(name, base_op) \
}
#define ULAS_INSTR_PRER8D(name, base_op) \
- ULAS_INSTR_PRER8(name, base_op, ULAS_REG_B), \
- ULAS_INSTR_PRER8(name, base_op + 1, ULAS_REG_C), \
- ULAS_INSTR_PRER8(name, base_op + 2, ULAS_REG_D), \
- ULAS_INSTR_PRER8(name, base_op + 3, ULAS_REG_E), \
- ULAS_INSTR_PRER8(name, base_op + 4, ULAS_REG_H), \
- ULAS_INSTR_PRER8(name, base_op + 5, ULAS_REG_L), \
- {(name), {'[', ULAS_REG_HL, ']', 0}, {0xCB, base_op + 6, 0}}, \
- ULAS_INSTR_PRER8(name, base_op + 7, ULAS_REG_A)
+ ULAS_INSTR_PRER8(name, (base_op), ULAS_REG_B), \
+ ULAS_INSTR_PRER8(name, (base_op) + 1, ULAS_REG_C), \
+ ULAS_INSTR_PRER8(name, (base_op) + 2, ULAS_REG_D), \
+ ULAS_INSTR_PRER8(name, (base_op) + 3, ULAS_REG_E), \
+ ULAS_INSTR_PRER8(name, (base_op) + 4, ULAS_REG_H), \
+ ULAS_INSTR_PRER8(name, (base_op) + 5, ULAS_REG_L), \
+ {(name), {'[', ULAS_REG_HL, ']', 0}, {0xCB, (base_op) + 6, 0}}, \
+ ULAS_INSTR_PRER8(name, (base_op) + 7, ULAS_REG_A)
// prefixed <name> <bit>, reg
#define ULAS_INSTR_PREBITR8(name, base_op, bit, reg_right) \
#define ULAS_INSTR_PREBITR8D(name, base_op, bit) \
ULAS_INSTR_PREBITR8(name, base_op, bit, ULAS_REG_B), \
- ULAS_INSTR_PREBITR8(name, base_op + 1, bit, ULAS_REG_C), \
- ULAS_INSTR_PREBITR8(name, base_op + 2, bit, ULAS_REG_D), \
- ULAS_INSTR_PREBITR8(name, base_op + 3, bit, ULAS_REG_E), \
- ULAS_INSTR_PREBITR8(name, base_op + 4, bit, ULAS_REG_H), \
- ULAS_INSTR_PREBITR8(name, base_op + 5, bit, ULAS_REG_L), \
+ ULAS_INSTR_PREBITR8(name, (base_op) + 1, bit, ULAS_REG_C), \
+ ULAS_INSTR_PREBITR8(name, (base_op) + 2, bit, ULAS_REG_D), \
+ ULAS_INSTR_PREBITR8(name, (base_op) + 3, bit, ULAS_REG_E), \
+ ULAS_INSTR_PREBITR8(name, (base_op) + 4, bit, ULAS_REG_H), \
+ ULAS_INSTR_PREBITR8(name, (base_op) + 5, bit, ULAS_REG_L), \
{(name), \
{(bit), ',', '[', ULAS_REG_HL, ']', 0}, \
- {0xCB, base_op + 6, 0}}, \
- ULAS_INSTR_PREBITR8(name, base_op + 7, bit, ULAS_REG_A)
+ {0xCB, (base_op) + 6, 0}}, \
+ ULAS_INSTR_PREBITR8(name, (base_op) + 7, bit, ULAS_REG_A)
// all instructions
// when name is NULL list ended
int i = 0;
while (tok[i]) {
assert(i < ULAS_INSTRTOKMAX);
- const char *regstr = NULL;
- if ((regstr = ulas_asmregstr(tok[i]))) {
+ const char *regstr = ulas_asmregstr(tok[i]);
+ if (regstr) {
if (ulas_tok(&ulas.tok, line, n) == -1) {
goto skip;
}
goto skip;
}
- char c[2] = {tok[i], '\0'};
+ char c[2] = {(char)tok[i], '\0'};
if (strncmp(ulas.tok.buf, c, ulas.tok.maxlen) != 0) {
goto skip;
}
dst[written] = (char)exprres[expridx++];
} else if (dat[datread] == ULAS_E16) {
// write 16-bit le values
- short val = exprres[expridx++];
- dst[written++] = val & 0xFF;
- dst[written] = val >> 8;
+ short val = (short)exprres[expridx++];
+ dst[written++] = (char)(val & 0xFF);
+ dst[written] = (char)(val >> 8);
} else {
- dst[written] = dat[datread];
+ dst[written] = (char)dat[datread];
}
written++;
datread++;
return written;
}
-void ulas_asmlst(const char *line, char *outbuf, unsigned long n) {
+void ulas_asmlst(const char *line, const char *outbuf, unsigned long n) {
if (ulaslstout) {
fprintf(ulaslstout, "%08X", ulas.address);
// start over for the next step...
line = start;
// is regular line in form of [label:] instruction ; comment
- if ((towrite += ulas_asminstr(outbuf, ULAS_OUTBUFMAX, &line, n)) == -1) {
+ int nextwrite = ulas_asminstr(outbuf, ULAS_OUTBUFMAX, &line, n);
+ if (nextwrite == -1) {
ULASERR("Unable to assemble instruction\n");
rc = -1;
goto fail;
}
+ towrite += nextwrite;
// TODO:
// place marker when a label was unresolved