diff options
author | mrb0nk500 <b0nk@b0nk.xyz> | 2020-08-08 18:11:35 -0400 |
---|---|---|
committer | mrb0nk500 <b0nk@b0nk.xyz> | 2020-08-08 18:11:35 -0400 |
commit | f16af793a58a9f398fc598a0c129e3bb90eb61f6 (patch) | |
tree | 2f674574f2955a1bc52ee3a6818516226833ea9b /sux.h | |
parent | 1ec19679b3db209429b0897f6ccda6d09d018a70 (diff) |
- Refactored the opcode table, in order to make the
instruction formatting simpler.
- Refactored the instruction table of the emulator's
assembler, it now has two parts, the addressing mode
bits, and the base value.
The base value is what's used to generate the actual
opcode, with the addressing mode bits telling the
assembler what addressing modes this instruction
supports.
The reason for doing this was to use less space. For
comparison, the previous version used 870 bytes for
the instruction table, while the new version uses
only 222 bytes. The new version is nearly 4 times
smaller than the pervious version.
- The B register based ALU instructions now use their
own addressing mode, and are specified by using 'b'
as the operand for those instructions.
For example, to add the Accumulator with the B
register, you now use "ADC B" instead of "AAB".
Diffstat (limited to 'sux.h')
-rw-r--r-- | sux.h | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -50,6 +50,7 @@ static inline uint64_t get_addr(struct sux *cpu, uint64_t *tmpaddr, uint8_t opco address.u64 = 0; value.u64 = 0; switch (optype[opcode]) { + case BREG: case IMPL: break; case IMM: @@ -125,6 +126,7 @@ static inline uint64_t get_addr(struct sux *cpu, uint64_t *tmpaddr, uint8_t opco iclk++; #endif } + /* Falls Through. */ case IND: setreg(value.u8, +, 0, addr, +, address.u64, 7); #if getclk @@ -293,7 +295,7 @@ static inline void mul(struct sux *cpu, uint64_t value, uint8_t thread) { static inline void divd(struct sux *cpu, uint64_t value, uint8_t opcode, uint8_t thread) { uint64_t sum = cpu->a/value; - if (opcode != DAB_IMP) { + if (opcode != DIV_B) { cpu->b = cpu->a % value; } else { value = cpu->b; @@ -364,4 +366,3 @@ static inline void store(struct sux *cpu, uint64_t address, uint64_t reg, uint8_ #endif #endif } - |