Skip to content

Instantly share code, notes, and snippets.

@BlockoS
Created May 19, 2011 21:21
Show Gist options
  • Save BlockoS/981777 to your computer and use it in GitHub Desktop.
Save BlockoS/981777 to your computer and use it in GitHub Desktop.
HuC6280 addressing mode
#define ARG1(a) (a)
#define ARG2(a,b) ( (a) | ((b) << 8) )
#define ARG3(a,b,c) ( (a) | ((b) << 8) | ((c) << 16) )
#define INDIRECT(c) ( (c) | 0x80 )
enum
{
ACCUMULATOR,
IMMEDIATE,
ZERO_PAGE,
RELATIVE,
INDEXED_X,
INDEXED_Y,
RELATIVE,
ABSOLUTE
};
enum AddressingModeHuC6280
{
ACCUMULATOR_MODE = ARG1( ACCUMULATOR ),
IMMEDIATE_MODE = ARG1( IMMEDIATE ),
IMMEDIATE_ZERO_PAGE_MODE = ARG3( IMMEDIATE, ZERO_PAGE, INDEXED_X ),
IMMEDIATE_ZERO_PAGE_INDEXED_X_MODE = ARG3( IMMEDIATE, ZERO_PAGE, INDEXED_Y ),
IMMEDIATE_ZERO_PAGE_RELATIVE_MODE = ARG3( IMMEDIATE, ZERO_PAGE, RELATIVE ),
IMMEDIATE_ABSOLUTE_MODE = ARG2( IMMEDIATE, ABSOLUTE ),
IMMEDIATE_ABSOLUTE_INDEXED_X_MODE = ARG2( IMMEDIATE, INDEXED_X ),
ZERO_PAGE_MODE = ARG1( ZERO_PAGE ),
ZERO_PAGE_INDEXED_X_MODE = ARG2( ZERO_PAGE, INDEXED_X ),
ZERO_PAGE_INDEXED_Y_MODE = ARG2( ZERO_PAGE, INDEXED_Y ),
ZERO_PAGE_RELATIVE_MODE = ARG2( ZERO_PAGE, RELATIVE ),
ZERO_PAGE_INDIRECT_MODE = ARG1( INDIRECT(ZERO_PAGE) ),
ZERO_PAGE_INDIRECT_PRE_INDEXED_X_MODE = ARG2( INDIRECT(ZERO_PAGE), INDEXED_X ),
ZERO_PAGE_INDIRECT_POST_INDEXED_Y_MODE = ARG2( INDIRECT(ZERO_PAGE), INDEXED_Y ),
RELATIVE_MODE = ARG1( RELATIVE ),
ABSOLUTE_MODE = ARG1( ABSOLUTE ),
ABSOLUTE_INDEXED_X_MODE = ARG2( ABSOLUTE, INDEXED_X ),
ABSOLUTE_INDEXED_Y_MODE = ARG2( ABSOLUTE, INDEXED_Y ),
ABSOLUTE_INDIRECT_MODE = ARG1( INDIRECT(ABSOLUTE) ),
ABSOLUTE_INDIRECT_PRE_INDEXED_X_MODE = ARG2( INDIRECT(ABSOLUTE), INDEXED_X ),
ABSOLUTE_INDIRECT_POST_INDEXED_Y_MODE = ARG2( INDIRECT(ABSOLUTE), INDEXED_X ),
SOURCE_DEST_LEN_MODE = ARG3(ABSOLUTE, ABSOLUTE, ABSOLUTE),
UNSUPORTED_MODE
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment