oscar64/oscar64/Assembler.h

61 lines
1.5 KiB
C

#pragma once
#include "Ident.h"
enum AsmInsType
{
ASMIT_ADC, ASMIT_AND, ASMIT_ASL, ASMIT_BCC, ASMIT_BCS, ASMIT_BEQ, ASMIT_BIT, ASMIT_BMI, ASMIT_BNE, ASMIT_BPL, ASMIT_BRK, ASMIT_BVC, ASMIT_BVS, ASMIT_CLC,
ASMIT_CLD, ASMIT_CLI, ASMIT_CLV, ASMIT_CMP, ASMIT_CPX, ASMIT_CPY, ASMIT_DEC, ASMIT_DEX, ASMIT_DEY, ASMIT_EOR, ASMIT_INC, ASMIT_INX, ASMIT_INY, ASMIT_JMP,
ASMIT_JSR, ASMIT_LDA, ASMIT_LDX, ASMIT_LDY, ASMIT_LSR, ASMIT_NOP, ASMIT_ORA, ASMIT_PHA, ASMIT_PHP, ASMIT_PLA, ASMIT_PLP, ASMIT_ROL, ASMIT_ROR, ASMIT_RTI,
ASMIT_RTS, ASMIT_SBC, ASMIT_SEC, ASMIT_SED, ASMIT_SEI, ASMIT_STA, ASMIT_STX, ASMIT_STY, ASMIT_TAX, ASMIT_TAY, ASMIT_TSX, ASMIT_TXA, ASMIT_TXS, ASMIT_TYA,
ASMIT_INV, ASMIT_BYTE,
NUM_ASM_INS_TYPES
};
enum AsmInsMode
{
ASMIM_IMPLIED,
ASMIM_IMMEDIATE,
ASMIM_ZERO_PAGE,
ASMIM_ZERO_PAGE_X,
ASMIM_ZERO_PAGE_Y,
ASMIM_ABSOLUTE,
ASMIM_ABSOLUTE_X,
ASMIM_ABSOLUTE_Y,
ASMIM_INDIRECT,
ASMIM_INDIRECT_X,
ASMIM_INDIRECT_Y,
ASMIM_RELATIVE,
NUM_ASM_INS_MODES,
ASMIM_IMMEDIATE_ADDRESS,
NUM_ASM_INS_MODES_X,
};
struct AsmInsData
{
AsmInsType mType;
AsmInsMode mMode;
};
extern AsmInsData DecInsData[256];
extern short AsmInsOpcodes[NUM_ASM_INS_TYPES][NUM_ASM_INS_MODES];
extern int AsmInsModeSize[NUM_ASM_INS_MODES_X];
extern const char* AsmInstructionNames[NUM_ASM_INS_TYPES];
AsmInsType FindAsmInstruction(const char * ins);
bool HasAsmInstructionMode(AsmInsType type, AsmInsMode mode);
int AsmInsSize(AsmInsType type, AsmInsMode mode);
void InitAssembler(void);