Annotation of nono/m680x0/m68030ea.h, revision 1.1.1.3

1.1       root        1: //
                      2: // nono
1.1.1.2   root        3: // Copyright (C) 2020 nono project
                      4: // Licensed under nono-license.txt
1.1       root        5: //
1.1.1.2   root        6: 
1.1       root        7: // EA
                      8: 
                      9: #pragma once
                     10: 
1.1.1.3 ! root       11:        // 命令ワードの下位6ビット mmmrrr のうち mmm の部分を取り出す
        !            12:        static inline int eamode(uint x)        { return (x >> 3) & 7; }
        !            13:        // 命令ワードの下位6ビット mmmrrr のうち rrr の部分を取り出す
        !            14:        static inline int eanum(uint x)         { return x & 7; }
        !            15: 
        !            16:        // internal_ea_*() は EA を計算だけする部分。CYCLE はここでは加算しない。
        !            17:        // MOVE の DST 側からも呼ばれる。
        !            18: 
        !            19:        // (An)
        !            20:        inline uint32 internal_ea_anin(int n)
        !            21:        {
        !            22:                return reg.A[n];
        !            23:        }
        !            24: 
        !            25:        // (An)+ .B
        !            26:        inline uint32 internal_ea_anpi_8(int n)
        !            27:        {
        !            28:                save_reg_pi(n);
        !            29:                if (n == 7) {
        !            30:                        reg.A[n] += 2;
        !            31:                        return reg.A[n] - 2;
        !            32:                } else {
        !            33:                        reg.A[n] += 1;
        !            34:                        return reg.A[n] - 1;
        !            35:                }
        !            36:        }
        !            37: 
        !            38:        // (An)+ .W
        !            39:        inline uint32 internal_ea_anpi_16(int n)
        !            40:        {
        !            41:                save_reg_pi(n);
        !            42:                reg.A[n] += 2;
        !            43:                return reg.A[n] - 2;
        !            44:        }
        !            45: 
        !            46:        // (An)+ .L
        !            47:        inline uint32 internal_ea_anpi_32(int n)
        !            48:        {
        !            49:                save_reg_pi(n);
        !            50:                reg.A[n] += 4;
        !            51:                return reg.A[n] - 4;
        !            52:        }
        !            53: 
        !            54:        // -(An) .B
        !            55:        inline uint32 internal_ea_anpd_8(int n)
        !            56:        {
        !            57:                save_reg_pd(n);
        !            58:                if (n == 7) {
        !            59:                        reg.A[n] -= 2;
        !            60:                } else {
        !            61:                        reg.A[n] -= 1;
        !            62:                }
        !            63:                return reg.A[n];
        !            64:        }
        !            65: 
        !            66:        // -(An) .W
        !            67:        inline uint32 internal_ea_anpd_16(int n)
        !            68:        {
        !            69:                save_reg_pd(n);
        !            70:                reg.A[n] -= 2;
        !            71:                return reg.A[n];
        !            72:        }
        !            73: 
        !            74:        // -(An) .L
        !            75:        inline uint32 internal_ea_anpd_32(int n)
        !            76:        {
        !            77:                save_reg_pd(n);
        !            78:                reg.A[n] -= 4;
        !            79:                return reg.A[n];
        !            80:        }
        !            81: 
        !            82:        // d16(An)
        !            83:        inline uint32 internal_ea_andi(int n)
        !            84:        {
        !            85:                int32 disp = (int32)(int16)fetch_16();
        !            86:                return reg.A[n] + disp;
        !            87:        }
        !            88: 
        !            89:        // (An,IX)
        !            90:        inline uint32 internal_ea_anix(int n)
        !            91:        {
        !            92:                return internal_ea_ix(reg.A[n]);
        !            93:        }
        !            94: 
        !            95:        // Abs.W
        !            96:        inline uint32 internal_ea_absw()
        !            97:        {
        !            98:                return (int32)(int16)fetch_16();
        !            99:        }
        !           100: 
        !           101:        // Abs.L
        !           102:        inline uint32 internal_ea_absl()
        !           103:        {
        !           104:                return fetch_32();
        !           105:        }
        !           106: 
        !           107:        // d16(PC)
        !           108:        inline uint32 internal_ea_pcdi()
        !           109:        {
        !           110:                int32 origin = reg.pc;
        !           111:                int32 disp = (int32)(int16)fetch_16();
        !           112:                return origin + disp;
        !           113:        }
        !           114: 
        !           115:        // (PC,IX)
        !           116:        inline uint32 internal_ea_pcix()
        !           117:        {
        !           118:                return internal_ea_ix(reg.pc);
        !           119:        }
        !           120: 
        !           121:        uint32 internal_ea_ix(uint32);
        !           122: 
        !           123:        // CEA (個別)
        !           124:        uint32 cea_anin(int n);
        !           125:        uint32 cea_anpi_8(int n);
        !           126:        uint32 cea_anpi_16(int n);
        !           127:        uint32 cea_anpi_32(int n);
        !           128:        uint32 cea_anpd_8(int n);
        !           129:        uint32 cea_anpd_16(int n);
        !           130:        uint32 cea_anpd_32(int n);
        !           131:        uint32 cea_andi(int n);
        !           132:        uint32 cea_anix(int n);
        !           133:        uint32 cea_absw();
        !           134:        uint32 cea_absl();
        !           135:        uint32 cea_pcdi();
        !           136:        uint32 cea_pcix();
        !           137: 
        !           138:        // FEA (個別)
        !           139:        uint32 fea_anin();
        !           140:        uint32 fea_anpi_8();
        !           141:        uint32 fea_anpi_16();
        !           142:        uint32 fea_anpi_32();
        !           143:        uint32 fea_anpd_8();
        !           144:        uint32 fea_anpd_16();
        !           145:        uint32 fea_anpd_32();
        !           146:        uint32 fea_andi();
        !           147:        uint32 fea_anix();
        !           148:        uint32 fea_absw();
        !           149:        uint32 fea_absl();
        !           150:        uint32 fea_pcdi();
        !           151:        uint32 fea_pcix();
        !           152:        void   fea_imm_16();
        !           153:        void   fea_imm_32();
        !           154: 
        !           155:        // CEA (グループ)
        !           156:        uint32 cea_ctrl();
        !           157:        uint32 cea_data_8();
        !           158:        uint32 cea_data_16();
        !           159:        uint32 cea_data_32();
        !           160:        uint32 cea_copro();
        !           161: 
        !           162:        // FEA (グループ)
        !           163:        uint32 fea_data_8();
        !           164:        uint32 fea_data_16();
        !           165:        uint32 fea_data_32();
        !           166:        uint32 fea_all_8();
        !           167:        uint32 fea_all_16();
        !           168:        uint32 fea_all_32();

unix.superglobalmegacorp.com

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