Annotation of frontvm/as68k/output.h, revision 1.1

1.1     ! root        1: #ifndef _OUTPUT_H
        !             2: #define _OUTPUT_H
        !             3: 
        !             4: /*
        !             5:  * The C outputted 68k program behaves in a not entirely 68k compatible manner.
        !             6:  * The exception table of the 68k does not exist and exceptions must be set by
        !             7:  * host call. Pending exceptions are only tested on *conditional* branch instructions,
        !             8:  * so a tight 'jmp' or 'bra' loop will not permit exceptions to be handled.
        !             9:  *
        !            10:  * There is no distinction between user and supervisor mode. No instructions to
        !            11:  * access the condition codes have been implemented.
        !            12:  * 
        !            13:  * Not implemented:
        !            14:  *     abcd, andi to ccr, andi to sr, bkpt, chk, cmpm, eori to ccr, eori to sr,
        !            15:  *     move to/from ccr, move to/from sr, move usp, movec, movep, moves, nbcd,
        !            16:  *     ori to ccr, ori to sr, reset, rtd, rtr, sbcd, stop, tas, trap, trapv
        !            17:  * These are mostly a load of crap.
        !            18:  */
        !            19: 
        !            20: #define COMPILE_C      0
        !            21: #define COMPILE_i386   1
        !            22: #define COMPILE_MAX    2
        !            23: 
        !            24: enum M68K_OPS {
        !            25:        OP_NONE, OP_JMP, OP_BCHG, OP_BCLR, OP_BSET, OP_BTST, OP_MULS, OP_MULU,
        !            26:        OP_AND, OP_OR, OP_XOR, OP_NOT, OP_NEGX, OP_NEG, OP_DIVU, OP_DIVS, OP_ASL,
        !            27:        OP_LSL, OP_ROXR, OP_ROXL, OP_ROL, OP_ROR, OP_ASR, OP_LSR,
        !            28:        OP_MOVEM, OP_SUBX, OP_ADDX, OP_ADD, OP_CMPA, OP_CMP, OP_SUB,
        !            29:        OP_ADDA, OP_SUBA, OP_SWAP, OP_JSR, OP_BCC, OP_DBCC, OP_CLR,
        !            30:        OP_EXG, OP_EXT, OP_RTE, OP_RTS, OP_ILLEGAL, OP_HCALL, OP_LINK,
        !            31:        OP_UNLK, OP_MOVE, OP_MOVEA, OP_TST, OP_PEA, OP_LEA, OP_SCC, OP_MAX
        !            32: };
        !            33: 
        !            34: typedef struct Operation {
        !            35:        enum M68K_OPS optype;
        !            36:        int size;
        !            37:        Opcode opcode;
        !            38:        ea_t src;
        !            39:        ea_t dest;
        !            40: } op_t;
        !            41: 
        !            42: struct Compiler {
        !            43:        void (*push_op) (enum M68K_OPS type, ea_t *src, ea_t *dest, int size);
        !            44:        void (*push_op2) (enum M68K_OPS type, ea_t *src, ea_t *dest, int size, int opcode);
        !            45:        void (*push_op_basic) (enum M68K_OPS type);
        !            46: 
        !            47:        void (*label) (const char *lab);
        !            48:        void (*addr_label) (int labelled);
        !            49:        
        !            50:        void (*begin) (const char *src_filename, const char *bin_filename);
        !            51:        void (*end) (const char *src_filename);
        !            52: };
        !            53: 
        !            54: extern struct Compiler compiler[COMPILE_MAX];
        !            55: 
        !            56: extern void c_push_op (enum M68K_OPS type, ea_t *src, ea_t *dest, int size);
        !            57: extern void c_push_op2 (enum M68K_OPS type, ea_t *src, ea_t *dest, int size, int opcode);
        !            58: extern void c_push_op_basic (enum M68K_OPS type);
        !            59: extern void c_begin (const char *src_filename, const char *bin_filename);
        !            60: extern void c_end (const char *src_filename);
        !            61: extern void c_label (const char *lab);
        !            62: extern void c_addr_label ();
        !            63: 
        !            64: extern void i386_push_op (enum M68K_OPS type, ea_t *src, ea_t *dest, int size);
        !            65: extern void i386_push_op2 (enum M68K_OPS type, ea_t *src, ea_t *dest, int size, int opcode);
        !            66: extern void i386_push_op_basic (enum M68K_OPS type);
        !            67: extern void i386_begin (const char *src_filename, const char *bin_filename);
        !            68: extern void i386_end (const char *src_filename);
        !            69: extern void i386_label (const char *lab);
        !            70: extern void i386_addr_label ();
        !            71: 
        !            72: #endif /* _OUTPUT_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.