reworking define-opcode-macros