# Mistakes ## Don't design opcodes in your head You WILL screw up and your binary encodings WILL overlap. You definitely need some tool to design instruction opcodes for anything more complicated than just 1-byte instructions. Turned out this mistake propogates further when implementing assembler. ## Load/store instructions MUST be able to use register as address I have no idea how we didn't notice this mistake. I guess it is not too bad for a CPU with 16 bytes of memory, but for something bigger it is unacceptable. ## Jump instructions need more love Jumping 3 instructions back and 7 forward is too limiting. Seriously, that's stupid. Also, in my current design, jumping offset of 0 will move CPU to an infinite loop. ## Implementing assembler with regex is not fancy It is probably easier to implement than writing proper lexer/parser, but error reporting can be weird. ## Two registers are really not enough Just imagine, you are trying to write a loop, you use `R1` as your index variable and `R0` for your loop condition. Now you have already ran out of registers and you didn't even start writing loop body!