@@ 392,18 392,27 @@ parseline(char *l)
} else if(strcmp(t, "JSRR") == 0) {
inst = newinst(OP_JSR);
pos++;
- } else if(strcmp(t, "BRn") == 0) {
+ } else if(strncmp(t, "BR", 2) == 0){
+ int i = 2;
inst = newinst(OP_BR);
- inst->mode = FL_NEG;
- pos++;
- } else if(strcmp(t, "BRz") == 0) {
- inst = newinst(OP_BR);
- inst->mode = FL_ZRO;
- pos++;
- } else if(strcmp(t, "BRp") == 0) {
- inst = newinst(OP_BR);
- inst->mode = FL_POS;
- pos++;
+ while(t[i]){
+ print("%c\n", t[i]);
+ switch(t[i]){
+ case 'n':
+ inst->mode |= FL_NEG;
+ break;
+ case 'z':
+ inst->mode |= FL_ZRO;
+ break;
+ case 'p':
+ inst->mode |= FL_POS;
+ break;
+ default:
+ syntaxerr(smprint("%s is not a valid opcode", t));
+ }
+ i++;
+ }
+ pos++;
} else {
int op = matchopcode(t);
if(op == -1){
@@ 22,6 22,12 @@ O .FILL x6f
.BLKW x5
LEA R0,WRLD
PUTSP
+ BRnzp x0
+ BRnz x0
+ BRzp x0
+ BRpzn x0
+ BRnp x0
+ BR x0
HALT
WRLD .STRINGZ x20776f726c64210a
.END