Mercurial > repos > simple16
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 } |