smxdasm 0.2.0

A library for disassembling SMX
Documentation
use std::fmt::{Display, Formatter, Result};
use num_enum::TryFromPrimitive;

#[allow(non_camel_case_types)]
#[derive(Debug, Clone, PartialEq, TryFromPrimitive)]
#[repr(u8)]
pub enum V1OPCode {
    NONE,
    LOAD_PRI, 
    LOAD_ALT, 
    LOAD_S_PRI,
    LOAD_S_ALT,
    UNGEN_LREF_PRI,
    UNGEN_LREF_ALT,
    LREF_S_PRI,
    LREF_S_ALT,
    LOAD_I,   
    LODB_I,   
    CONST_PRI,
    CONST_ALT,
    ADDR_PRI, 
    ADDR_ALT, 
    STOR_PRI, 
    STOR_ALT, 
    STOR_S_PRI,
    STOR_S_ALT,
    UNGEN_SREF_PRI,
    UNGEN_SREF_ALT,
    SREF_S_PRI,
    SREF_S_ALT,
    STOR_I,   
    STRB_I,   
    LIDX,     
    LIDX_B,   
    IDXADDR,  
    IDXADDR_B,
    UNGEN_ALIGN_PRI,
    UNGEN_ALIGN_ALT,
    UNGEN_LCTRL,
    UNGEN_SCTRL,
    MOVE_PRI, 
    MOVE_ALT, 
    XCHG,     
    PUSH_PRI, 
    PUSH_ALT, 
    UNGEN_PUSH_R,
    PUSH_C,   
    PUSH,     
    PUSH_S,   
    POP_PRI,  
    POP_ALT,  
    STACK,    
    HEAP,     
    PROC,     
    UNGEN_RET,
    RETN,     
    CALL,     
    UNGEN_CALL_PRI,
    JUMP,     
    UNGEN_JREL,
    JZER,     
    JNZ,      
    JEQ,      
    JNEQ,     
    UNGEN_JLESS,
    UNGEN_JLEQ,
    UNGEN_JGRTR,
    UNGEN_JGEQ,
    JSLESS,   
    JSLEQ,    
    JSGRTR,   
    JSGEQ,    
    SHL,      
    SHR,      
    SSHR,     
    SHL_C_PRI,
    SHL_C_ALT,
    SHR_C_PRI,
    SHR_C_ALT,
    SMUL,     
    SDIV,     
    SDIV_ALT, 
    UNGEN_UMUL,
    UNGEN_UDIV,
    UNGEN_UDIV_ALT,
    ADD,      
    SUB,      
    SUB_ALT,  
    AND,      
    OR,
    XOR,      
    NOT,      
    NEG,      
    INVERT,   
    ADD_C,    
    SMUL_C,   
    ZERO_PRI, 
    ZERO_ALT, 
    ZERO,     
    ZERO_S,   
    UNGEN_SIGN_PRI,
    UNGEN_SIGN_ALT,
    EQ,
    NEQ,      
    UNGEN_LESS,
    UNGEN_LEQ,
    UNGEN_GRTR,
    UNGEN_GEQ,
    SLESS,    
    SLEQ,     
    SGRTR,    
    SGEQ,     
    EQ_C_PRI, 
    EQ_C_ALT, 
    INC_PRI,  
    INC_ALT,  
    INC,      
    INC_S,    
    INC_I,    
    DEC_PRI,  
    DEC_ALT,  
    DEC,      
    DEC_S,    
    DEC_I,    
    MOVS,     
    UNGEN_CMPS,
    FILL,     
    HALT,     
    BOUNDS,   
    UNGEN_SYSREQ_PRI,
    SYSREQ_C, 
    UNGEN_FILE,
    UNGEN_LINE,
    UNGEN_SYMBOL,
    UNGEN_SRANGE,
    UNGEN_JUMP_PRI,
    SWITCH,   
    CASETBL,  
    SWAP_PRI, 
    SWAP_ALT, 
    PUSH_ADR, 
    NOP,      
    SYSREQ_N, 
    UNGEN_SYMTAG,
    BREAK,    
    PUSH2_C,  
    PUSH2,    
    PUSH2_S,  
    PUSH2_ADR,
    PUSH3_C,  
    PUSH3,    
    PUSH3_S,  
    PUSH3_ADR,
    PUSH4_C,  
    PUSH4,    
    PUSH4_S,  
    PUSH4_ADR,
    PUSH5_C,  
    PUSH5,    
    PUSH5_S,  
    PUSH5_ADR,
    LOAD_BOTH,
    LOAD_S_BOTH,
    CONST,    
    CONST_S,  
    UNGEN_SYSREQ_D,
    UNGEB_SYSREQ_ND,
    TRACKER_PUSH_C,
    TRACKER_POP_SETHEAP,
    GENARRAY, 
    GENARRAY_Z,
    STRADJUST_PRI,
    UNGEN_STKADJUST,
    ENDPROC,  
    LDGFN_PRI,
    REBASE,
    FABS,     
    FLOAT,    
    FLOATADD, 
    FLOATSUB, 
    FLOATMUL, 
    FLOATDIV, 
    RND_TO_NEAREST,
    RND_TO_FLOOR,
    RND_TO_CEIL,
    RND_TO_ZERO,
    FLOATCMP, 
    FLOAT_GT, 
    FLOAT_GE, 
    FLOAT_LT, 
    FLOAT_LE, 
    FLOAT_NE, 
    FLOAT_EQ, 
    FLOAT_NOT,
    TOTAL_OPCODES
}

impl Default for V1OPCode {
    fn default() -> Self { V1OPCode::TOTAL_OPCODES }
}

impl Display for V1OPCode {
    fn fmt(&self, f: &mut Formatter) -> Result {
        write!(f, "{:?}", self)
    }
}