Mercurial > repos > blastem
diff 68kinst.h @ 2:5df303bf72e6
Improve 68K instruction decoding. Add simple disassembler.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 03 Nov 2012 21:38:28 -0700 |
parents | 2432d177e1ac |
children | 23b83d94c633 |
line wrap: on
line diff
--- a/68kinst.h Sat Nov 03 21:37:38 2012 -0700 +++ b/68kinst.h Sat Nov 03 21:38:28 2012 -0700 @@ -49,7 +49,7 @@ M68K_JMP, M68K_JSR, M68K_LEA, - M68K_LINK + M68K_LINK, M68K_LSL, M68K_LSR, M68K_MOVE, @@ -86,23 +86,29 @@ M68K_SWAP, M68K_TAS, M68K_TRAP, - M68k_TRAPV + M68K_TRAPV, M68K_TST, - M68K_UNLNK + M68K_UNLNK, + M68K_INVALID } m68K_op; typedef enum { VAR_NORMAL, - VAR_QUICK + VAR_QUICK, + VAR_BYTE, + VAR_WORD, + VAR_LONG } m68K_variant; typedef enum { OPSIZE_BYTE=0, OPSIZE_WORD, - OPSIZE_LONG + OPSIZE_LONG, + OPSIZE_INVALID } m68K_opsizes; typedef enum { +//actual addressing mode field values MODE_REG = 0, MODE_AREG, MODE_AREG_INDIRECT, @@ -110,15 +116,34 @@ MODE_AREG_PREDEC, MODE_AREG_DISPLACE, MODE_AREG_INDEX_MEM, //bunch of relatively complicated modes - MODE_PC_INDIRECT_ABS_IMMED //Modes that use the program counter, an absolute address or immediate value + MODE_PC_INDIRECT_ABS_IMMED, //Modes that use the program counter, an absolute address or immediate value +//expanded values + MODE_ABSOLUTE_SHORT, + MODE_ABSOLUTE, + MODE_PC_DISPLACE, + MODE_PC_INDEX, + MODE_IMMEDIATE, + MODE_UNUSED } m68k_addr_modes; typedef enum { - MODE_ABSOLUTE=0, - MODE_PC_DISPLACE, - MODE_PC_INDEX, - MODE_IMMEDIATE -} m68k_addr_extended; + COND_TRUE, + COND_FALSE, + COND_HIGH, + COND_LOW_SAME, + COND_CARRY_CLR, + COND_CARRY_SET, + COND_NOT_EQ, + COND_EQ, + COND_OVERF_CLR, + COND_OVERF_SET, + COND_PLUS, + COND_MINUS, + COND_GREATER_EQ, + COND_LESS, + COND_GREATER, + COND_LESS_EQ +} m68K_condition; typedef struct { uint8_t addr_mode; @@ -147,4 +172,5 @@ uint16_t * m68K_decode(uint16_t * istream, m68kinst * dst); uint32_t m68k_cycles(m68kinst * inst); +int m68K_disasm(m68kinst * decoded, char * dst);