Annotation of frontvm/as68k/as68k.h, revision 1.1.1.1

1.1       root        1: #ifndef _AS68K_H
                      2: #define _AS68K_H
                      3: 
                      4: #ifdef WIN32
                      5: typedef unsigned int uint;
                      6: #endif /* WIN32 */
                      7: 
                      8: #define LAB_LEN        64
                      9: /* atari .prg binaries have header then code at 0x1c */
                     10: #define BASE   0x1c
                     11: 
                     12: /* ea modes as encoded in the 68k instructions */
                     13: #define MODE_DREG      0
                     14: 
                     15: /* and ea modes as flags, used in various assembler funcs */
                     16: #define F_DREG         (1<<0)
                     17: #define F_AREG         (1<<1)
                     18: #define F_IND          (1<<2)
                     19: #define F_POST         (1<<3)
                     20: #define F_PRE          (1<<4)
                     21: #define F_OFFSET       (1<<5)
                     22: #define F_INDEX                (1<<6)
                     23: #define F_MEM_W                (1<<7)
                     24: #define F_MEM_L                (1<<8)
                     25: #define F_IMM          (1<<9)
                     26: #define F_PC_OFFSET    (1<<10)
                     27: #define F_PC_INDEX     (1<<11)
                     28: 
                     29: #define F_NOLABELS     (1<<12)
                     30: 
                     31: #define F_NOIMM_NOPC_NOAREG    (F_DREG | F_IND | F_POST | F_PRE | \
                     32:                F_OFFSET | F_INDEX | F_MEM_W | F_MEM_L)
                     33: #define F_ALL (0xffffffff & (~(F_NOLABELS)))
                     34: #define F_ALL_NOAREG   (F_ALL & (~F_AREG))
                     35: 
                     36: enum SIZE { BYTE, WORD, LONG, LONG_FIXUP, C_ADDR, C_FUNC };
                     37: extern const int size2len[];
                     38: 
                     39: struct ImmVal {
                     40:        int has_label;
                     41:        char label[LAB_LEN];
                     42:        int val;
                     43: };
                     44: 
                     45: typedef struct ea_t {
                     46:        int mode;
                     47:        int reg;
                     48:        int op_size;
                     49:        struct ImmVal imm;
                     50:        union Ext {
                     51:                short ext;
                     52:                struct {
                     53:                        int displacement : 8;
                     54:                        int ZERO : 3;
                     55:                        uint size : 1;
                     56:                        uint reg : 3;
                     57:                        uint d_or_a : 1;
                     58:                } _;
                     59:        } ext;
                     60:        /* used by the ->i386 compiler. set by x_readea, and will
                     61:         * be (for example) eax, or some immediate value in string
                     62:         * form */
                     63:        char identifier[32];
                     64:        int x86_reg;
                     65:        /* used to keep the writeback address for complex addressing
                     66:         * modes. reused at the end of the instruction... */
                     67:        int x86_reg_writeback;
                     68:        int do_writeback;
                     69: } ea_t;
                     70: 
                     71: typedef union Opcode {
                     72:        unsigned short code;
                     73:        struct move {
                     74:                uint src_reg : 3;
                     75:                uint src_mode : 3;
                     76:                uint dest_mode : 3;
                     77:                uint dest_reg : 3;
                     78:                uint size : 2;
                     79:                uint op : 2;
                     80:        } move;
                     81:        struct adr_index {
                     82:                int displacement : 8;
                     83:                uint zeros : 3;
                     84:                uint ind_size : 1;
                     85:                uint reg : 3;
                     86:                uint reg_type : 1;
                     87:        } adr_index;
                     88:        struct addq {
                     89:                uint dest_reg : 3;
                     90:                uint dest_mode : 3;
                     91:                uint size : 2;
                     92:                uint issub : 1;
                     93:                uint data : 3;
                     94:                uint op : 4;
                     95:        } addq;
                     96:        struct jmp {
                     97:                uint dest_reg : 3;
                     98:                uint dest_mode : 3;
                     99:                uint op : 10;
                    100:        } jmp;
                    101:        struct addi {
                    102:                uint dest_reg : 3;
                    103:                uint dest_mode : 3;
                    104:                uint size : 2;
                    105:                uint OP6 : 8;
                    106:        } addi;
                    107:        /* size and effective address */
                    108:        struct type1 {
                    109:                uint ea_reg : 3;
                    110:                uint ea_mode : 3;
                    111:                uint size : 2;
                    112:                uint op : 8;
                    113:        } type1;
                    114:        /* reg, opmode, ea */
                    115:        struct type2 {
                    116:                uint ea_reg : 3;
                    117:                uint ea_mode : 3;
                    118:                uint op_mode : 3;
                    119:                uint reg : 3;
                    120:                uint op : 4;
                    121:        } type2;
                    122:        struct MemShift {
                    123:                uint ea_reg : 3;
                    124:                uint ea_mode : 3;
                    125:                uint OP3 : 2;
                    126:                uint dr : 1;
                    127:                uint type : 2;
                    128:                uint OP0x1c : 5;
                    129:        } MemShift;
                    130:        struct ASx {
                    131:                uint reg : 3;
                    132:                uint OP0 : 2;
                    133:                uint ir : 1;
                    134:                uint size : 2;
                    135:                uint dr : 1;
                    136:                uint count_reg : 3;
                    137:                uint OP0xe : 4;
                    138:        } ASx;
                    139:        struct abcd {
                    140:                uint src_reg : 3;
                    141:                uint rm : 1;
                    142:                uint OP16 : 5;
                    143:                uint dest_reg : 3;
                    144:                uint OP12 : 4;
                    145:        } abcd;
                    146:        struct addx {
                    147:                uint src_reg : 3;
                    148:                uint rm : 1;
                    149:                uint OP0 : 2;
                    150:                uint size : 2;
                    151:                uint OP1 : 1;
                    152:                uint dest_reg : 3;
                    153:                uint op : 4;
                    154:        } addx;
                    155:        struct cmpm {
                    156:                uint src_reg : 3;
                    157:                uint OP1_1 : 3;
                    158:                uint size : 2;
                    159:                uint OP2_1 : 1;
                    160:                uint dest_reg : 3;
                    161:                uint OP0xb : 4;
                    162:        } cmpm;
                    163:        /* branches */
                    164:        struct DBcc {
                    165:                uint reg : 3;
                    166:                uint OP25 : 5;
                    167:                uint cond : 4;
                    168:                uint OP5 : 4;
                    169:        } DBcc;
                    170:        struct Bcc {
                    171:                int displacement : 8;
                    172:                uint cond : 4;
                    173:                uint op : 4;
                    174:        } Bcc;
                    175:        struct bra {
                    176:                int displacement : 8;
                    177:                uint op : 8;
                    178:        } bra;
                    179:        struct movem {
                    180:                uint dest_reg : 3;
                    181:                uint dest_mode : 3;
                    182:                uint sz : 1;
                    183:                uint ONE : 3;
                    184:                uint dr : 1;
                    185:                uint NINE : 5;
                    186:        } movem;
                    187:        struct lea {
                    188:                uint dest_reg : 3;
                    189:                uint dest_mode : 3;
                    190:                uint SEVEN : 3;
                    191:                uint reg : 3;
                    192:                uint FOUR : 4;
                    193:        } lea;
                    194:        struct moveq {
                    195:                int data : 8;
                    196:                uint ZERO : 1;
                    197:                uint reg : 3;
                    198:                uint SEVEN : 4;
                    199:        } moveq;
                    200:        struct exg {
                    201:                uint dest_reg : 3;
                    202:                uint op_mode : 5;
                    203:                uint OP1 : 1;
                    204:                uint src_reg : 3;
                    205:                uint OP0xc : 4;
                    206:        } exg;
                    207: } Opcode;
                    208: 
                    209: struct Fixup {
                    210:        int rel_to;
                    211:        int line_no;
                    212:        int size;
                    213:        int adr;
                    214:        char label[LAB_LEN];
                    215:        struct Fixup *next;
                    216: };
                    217: 
                    218: struct Label {
                    219:        const char *name;
                    220:        int val;
                    221:        enum LAB_TYPE {
                    222:                L_ADDR,
                    223:                L_CONST
                    224:        } type;
                    225: };
                    226: 
                    227: /* label lookup */
                    228: struct Label *get_label (const char *name);
                    229: void add_label (const char *name, int type, int val);
                    230: void add_fixup (int adr, int size, const char *label);
                    231: void error (const char *format, ...);
                    232: void bug_error (const char *format, ...);
                    233: int get_bitpos ();
                    234: 
                    235: /* fixups linked list */
                    236: extern struct Fixup *fix_first;
                    237: extern struct Fixup *fix_last;
                    238: extern int line_no;
                    239: 
                    240: #endif /* _AS68K_H */

unix.superglobalmegacorp.com

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