rs-asm6805 1.0.0

6805 Datalink Assembler in Rust
Documentation
use std::collections::HashMap;

pub const CAT_INH: u16 = 1 << 8;
pub const CAT_REL: u16 = 2 << 8;
pub const CAT_BSC: u16 = 3 << 8;
pub const CAT_BSCX: u16 = 4 << 8;
pub const CAT_BTB: u16 = 5 << 8;
pub const CAT_BTBX: u16 = 6 << 8;
pub const CAT_IMM_DIR_EXT_IX1_IX1_IX: u16 = 7 << 8;
pub const CAT_DIR_EXT_IX1_IX1_IX: u16 = 8 << 8;
pub const CAT_DIR_IX1_IX: u16 = 9 << 8;
pub const CAT_ALIGN: u16 = 10 << 8;
pub const CAT_DB: u16 = 11 << 8;
pub const CAT_DS: u16 = 12 << 8;
pub const CAT_DW: u16 = 13 << 8;
pub const CAT_EQU: u16 = 14 << 8;
pub const CAT_INCLUDE: u16 = 15 << 8;
pub const CAT_TIMEX: u16 = 16 << 8;
pub const CAT_TIMEX6: u16 = 17 << 8;
pub const CAT_IF: u16 = 18 << 8;
pub const CAT_ELSE: u16 = 19 << 8;
pub const CAT_ENDIF: u16 = 20 << 8;
pub const CAT_ORIGIN: u16 = 21 << 8;
pub const CAT_ASCII: u16 = 22 << 8;

#[derive(Debug, Clone)]
pub struct KeywordDefinition {
    pub name: &'static str,
    pub value: u16,
}

pub const KEYWORDS: &[KeywordDefinition] = &[
    KeywordDefinition { name: "ADC", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa9 },
    KeywordDefinition { name: "ADD", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xab },
    KeywordDefinition { name: "ALIGN", value: CAT_ALIGN | 0 },
    KeywordDefinition { name: "AND", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa4 },
    KeywordDefinition { name: "ASCII", value: CAT_ASCII | 0 },
    KeywordDefinition { name: "ASL", value: CAT_DIR_IX1_IX | 0x38 },
    KeywordDefinition { name: "ASLA", value: CAT_INH | 0x48 },
    KeywordDefinition { name: "ASLX", value: CAT_INH | 0x58 },
    KeywordDefinition { name: "ASR", value: CAT_DIR_IX1_IX | 0x37 },
    KeywordDefinition { name: "ASRA", value: CAT_INH | 0x47 },
    KeywordDefinition { name: "ASRX", value: CAT_INH | 0x57 },
    KeywordDefinition { name: "BCC", value: CAT_REL | 0x24 },
    KeywordDefinition { name: "BCLR", value: CAT_BSCX | 0x11 },
    KeywordDefinition { name: "BCLR0", value: CAT_BSC | 0x11 },
    KeywordDefinition { name: "BCLR1", value: CAT_BSC | 0x13 },
    KeywordDefinition { name: "BCLR2", value: CAT_BSC | 0x15 },
    KeywordDefinition { name: "BCLR3", value: CAT_BSC | 0x17 },
    KeywordDefinition { name: "BCLR4", value: CAT_BSC | 0x19 },
    KeywordDefinition { name: "BCLR5", value: CAT_BSC | 0x1b },
    KeywordDefinition { name: "BCLR6", value: CAT_BSC | 0x1d },
    KeywordDefinition { name: "BCLR7", value: CAT_BSC | 0x1f },
    KeywordDefinition { name: "BCS", value: CAT_REL | 0x25 },
    KeywordDefinition { name: "BEQ", value: CAT_REL | 0x27 },
    KeywordDefinition { name: "BHCC", value: CAT_REL | 0x28 },
    KeywordDefinition { name: "BHCS", value: CAT_REL | 0x29 },
    KeywordDefinition { name: "BHI", value: CAT_REL | 0x22 },
    KeywordDefinition { name: "BHS", value: CAT_REL | 0x24 },
    KeywordDefinition { name: "BIH", value: CAT_REL | 0x2f },
    KeywordDefinition { name: "BIL", value: CAT_REL | 0x2e },
    KeywordDefinition { name: "BIT", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa5 },
    KeywordDefinition { name: "BLO", value: CAT_REL | 0x25 },
    KeywordDefinition { name: "BLS", value: CAT_REL | 0x23 },
    KeywordDefinition { name: "BMC", value: CAT_REL | 0x2c },
    KeywordDefinition { name: "BMI", value: CAT_REL | 0x2b },
    KeywordDefinition { name: "BMS", value: CAT_REL | 0x2d },
    KeywordDefinition { name: "BNE", value: CAT_REL | 0x26 },
    KeywordDefinition { name: "BPL", value: CAT_REL | 0x2a },
    KeywordDefinition { name: "BRA", value: CAT_REL | 0x20 },
    KeywordDefinition { name: "BRSKIP", value: CAT_INH | 0x21 },
    KeywordDefinition { name: "BRSKIP2", value: CAT_INH | 0xc5 },
    KeywordDefinition { name: "BRCLR", value: CAT_BTBX | 0x01 },
    KeywordDefinition { name: "BRCLR0", value: CAT_BTB | 0x01 },
    KeywordDefinition { name: "BRCLR1", value: CAT_BTB | 0x03 },
    KeywordDefinition { name: "BRCLR2", value: CAT_BTB | 0x05 },
    KeywordDefinition { name: "BRCLR3", value: CAT_BTB | 0x07 },
    KeywordDefinition { name: "BRCLR4", value: CAT_BTB | 0x09 },
    KeywordDefinition { name: "BRCLR5", value: CAT_BTB | 0x0b },
    KeywordDefinition { name: "BRCLR6", value: CAT_BTB | 0x0d },
    KeywordDefinition { name: "BRCLR7", value: CAT_BTB | 0x0f },
    KeywordDefinition { name: "BRN", value: CAT_REL | 0x21 },
    KeywordDefinition { name: "BRSET", value: CAT_BTBX | 0x00 },
    KeywordDefinition { name: "BRSET0", value: CAT_BTB | 0x00 },
    KeywordDefinition { name: "BRSET1", value: CAT_BTB | 0x02 },
    KeywordDefinition { name: "BRSET2", value: CAT_BTB | 0x04 },
    KeywordDefinition { name: "BRSET3", value: CAT_BTB | 0x06 },
    KeywordDefinition { name: "BRSET4", value: CAT_BTB | 0x08 },
    KeywordDefinition { name: "BRSET5", value: CAT_BTB | 0x0a },
    KeywordDefinition { name: "BRSET6", value: CAT_BTB | 0x0c },
    KeywordDefinition { name: "BRSET7", value: CAT_BTB | 0x0e },
    KeywordDefinition { name: "BSET", value: CAT_BSCX | 0x10 },
    KeywordDefinition { name: "BSET0", value: CAT_BSC | 0x10 },
    KeywordDefinition { name: "BSET1", value: CAT_BSC | 0x12 },
    KeywordDefinition { name: "BSET2", value: CAT_BSC | 0x14 },
    KeywordDefinition { name: "BSET3", value: CAT_BSC | 0x16 },
    KeywordDefinition { name: "BSET4", value: CAT_BSC | 0x18 },
    KeywordDefinition { name: "BSET5", value: CAT_BSC | 0x1a },
    KeywordDefinition { name: "BSET6", value: CAT_BSC | 0x1c },
    KeywordDefinition { name: "BSET7", value: CAT_BSC | 0x1e },
    KeywordDefinition { name: "BSR", value: CAT_REL | 0xad },
    KeywordDefinition { name: "CLC", value: CAT_INH | 0x98 },
    KeywordDefinition { name: "CLI", value: CAT_INH | 0x9a },
    KeywordDefinition { name: "CLR", value: CAT_DIR_IX1_IX | 0x3f },
    KeywordDefinition { name: "CLRA", value: CAT_INH | 0x4f },
    KeywordDefinition { name: "CLRX", value: CAT_INH | 0x5f },
    KeywordDefinition { name: "CMP", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa1 },
    KeywordDefinition { name: "COM", value: CAT_DIR_IX1_IX | 0x33 },
    KeywordDefinition { name: "COMA", value: CAT_INH | 0x43 },
    KeywordDefinition { name: "COMX", value: CAT_INH | 0x53 },
    KeywordDefinition { name: "CPX", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa3 },
    KeywordDefinition { name: "DB", value: CAT_DB | 0 },
    KeywordDefinition { name: "DEC", value: CAT_DIR_IX1_IX | 0x3a },
    KeywordDefinition { name: "DECA", value: CAT_INH | 0x4a },
    KeywordDefinition { name: "DECX", value: CAT_INH | 0x5a },
    KeywordDefinition { name: "DS", value: CAT_DS | 0 },
    KeywordDefinition { name: "DW", value: CAT_DW | 0 },
    KeywordDefinition { name: "ELSE", value: CAT_ELSE | 0 },
    KeywordDefinition { name: "ENDIF", value: CAT_ENDIF | 0 },
    KeywordDefinition { name: "EOR", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa8 },
    KeywordDefinition { name: "EQU", value: CAT_EQU | 0 },
    KeywordDefinition { name: "IF", value: CAT_IF | 0 },
    KeywordDefinition { name: "INC", value: CAT_DIR_IX1_IX | 0x3c },
    KeywordDefinition { name: "INCA", value: CAT_INH | 0x4c },
    KeywordDefinition { name: "INCLUDE", value: CAT_INCLUDE | 0 },
    KeywordDefinition { name: "INCX", value: CAT_INH | 0x5c },
    KeywordDefinition { name: "JMP", value: CAT_DIR_EXT_IX1_IX1_IX | 0xac },
    KeywordDefinition { name: "JSR", value: CAT_DIR_EXT_IX1_IX1_IX | 0xad },
    KeywordDefinition { name: "LDA", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa6 },
    KeywordDefinition { name: "LDX", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xae },
    KeywordDefinition { name: "LSL", value: CAT_DIR_IX1_IX | 0x38 },
    KeywordDefinition { name: "LSLA", value: CAT_INH | 0x48 },
    KeywordDefinition { name: "LSLX", value: CAT_INH | 0x58 },
    KeywordDefinition { name: "LSR", value: CAT_DIR_IX1_IX | 0x34 },
    KeywordDefinition { name: "LSRA", value: CAT_INH | 0x44 },
    KeywordDefinition { name: "LSRX", value: CAT_INH | 0x54 },
    KeywordDefinition { name: "MUL", value: CAT_INH | 0x42 },
    KeywordDefinition { name: "NEG", value: CAT_DIR_IX1_IX | 0x30 },
    KeywordDefinition { name: "NEGA", value: CAT_INH | 0x40 },
    KeywordDefinition { name: "NEGX", value: CAT_INH | 0x50 },
    KeywordDefinition { name: "NOP", value: CAT_INH | 0x9d },
    KeywordDefinition { name: "ORIGIN", value: CAT_ORIGIN | 0 },
    KeywordDefinition { name: "ORA", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xaa },
    KeywordDefinition { name: "ROL", value: CAT_DIR_IX1_IX | 0x39 },
    KeywordDefinition { name: "ROLA", value: CAT_INH | 0x49 },
    KeywordDefinition { name: "ROLX", value: CAT_INH | 0x59 },
    KeywordDefinition { name: "ROR", value: CAT_DIR_IX1_IX | 0x36 },
    KeywordDefinition { name: "RORA", value: CAT_INH | 0x46 },
    KeywordDefinition { name: "RORX", value: CAT_INH | 0x56 },
    KeywordDefinition { name: "RSP", value: CAT_INH | 0x9c },
    KeywordDefinition { name: "RTI", value: CAT_INH | 0x80 },
    KeywordDefinition { name: "RTS", value: CAT_INH | 0x81 },
    KeywordDefinition { name: "SBC", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa2 },
    KeywordDefinition { name: "SEC", value: CAT_INH | 0x99 },
    KeywordDefinition { name: "SEI", value: CAT_INH | 0x9b },
    KeywordDefinition { name: "STA", value: CAT_DIR_EXT_IX1_IX1_IX | 0xa7 },
    KeywordDefinition { name: "STOP", value: CAT_INH | 0x8e },
    KeywordDefinition { name: "STX", value: CAT_DIR_EXT_IX1_IX1_IX | 0xaf },
    KeywordDefinition { name: "SUB", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa0 },
    KeywordDefinition { name: "SWI", value: CAT_INH | 0x83 },
    KeywordDefinition { name: "TAX", value: CAT_INH | 0x97 },
    KeywordDefinition { name: "TIMEX", value: CAT_TIMEX | 0 },
    KeywordDefinition { name: "TIMEX6", value: CAT_TIMEX6 | 0 },
    KeywordDefinition { name: "TST", value: CAT_DIR_IX1_IX | 0x3d },
    KeywordDefinition { name: "TSTA", value: CAT_INH | 0x4d },
    KeywordDefinition { name: "TSTX", value: CAT_INH | 0x5d },
    KeywordDefinition { name: "TXA", value: CAT_INH | 0x9f },
    KeywordDefinition { name: "WAIT", value: CAT_INH | 0x8f },
];

pub fn build_keyword_map() -> HashMap<String, u16> {
    let mut map = HashMap::new();
    for kw in KEYWORDS {
        map.insert(kw.name.to_uppercase(), kw.value);
    }
    map
}