comparison src/asm.c @ 25:fb14515266f4

Implemented timer and timer interrupts. Added get/setvbr instructions. Fixed assembler bug. Moved mnemonics into a separate source file
author Michael Pavone <pavone@retrodev.com>
date Thu, 31 Mar 2016 23:25:52 -0700
parents d4112095b93f
children 5a8b5f9fc50a
comparison
equal deleted inserted replaced
24:4c9dbfa30a66 25:fb14515266f4
118 } else { 118 } else {
119 ret.immed_min = ret.immed_max = 0; 119 ret.immed_min = ret.immed_max = 0;
120 } 120 }
121 return ret; 121 return ret;
122 } 122 }
123 index = find_string_arr(mnemonics_single_reg, mnemonic, SETENUM+1); 123 index = find_string_arr(mnemonics_single_reg, mnemonic, SETVBR+1);
124 if (index > SETENUM) { 124 if (index > SETVBR) {
125 ret.base = 0xFFFF; 125 ret.base = 0xFFFF;
126 return ret; 126 return ret;
127 } 127 }
128 ret.base = index << 8 | SINGLE_REG << 4 | SINGLE_SOURCE; 128 ret.base = index << 8 | SINGLE_REG << 4 | SINGLE_SOURCE;
129 ret.immed_min = ret.immed_max = 0; 129 ret.immed_min = ret.immed_max = 0;
308 return 1; 308 return 1;
309 } 309 }
310 } 310 }
311 if (!strcmp(arg, "pc")) { 311 if (!strcmp(arg, "pc")) {
312 *inst |= REG_PC << arg_shift; 312 *inst |= REG_PC << arg_shift;
313 return 1;
313 } 314 }
314 if (!strcmp(arg, "sr")) { 315 if (!strcmp(arg, "sr")) {
315 *inst |= REG_SR << arg_shift; 316 *inst |= REG_SR << arg_shift;
317 return 1;
316 } 318 }
317 if (immed_min == immed_max) { 319 if (immed_min == immed_max) {
318 fprintf(stderr, "ERROR: Non-register argument %s where a register is required\n", arg); 320 fprintf(stderr, "ERROR: Non-register argument %s where a register is required\n", arg);
319 return 0; 321 return 0;
320 } 322 }