Annotation of frontvm/as68k/output.h, revision 1.1.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.