/*
M68KITAB.c
Copyright (C) 2007 Paul C. Pratt
You can redistribute this file and/or modify it under the terms
of version 2 of the GNU General Public License as published by
the Free Software Foundation. You should have received a copy
of the license along with this file; see the file COPYING.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
license for more details.
*//*
Motorola 68K Instructions TABle
*/#ifndef AllFiles#include"SYSDEPNS.h"#endif#include"MYOSGLUE.h"#include"EMCONFIG.h"#include"GLOBGLUE.h"#include"M68KITAB.h"structWorkR{/* expected size : 8 bytes */ui5bopcode;ui5bopsize;ui4rMainClass;#if WantCycByPriOpui4rCycles;#endifDecOpRDecOp;};typedefstructWorkRWorkR;#define b76(p) ((p->opcode >> 6) & 3)#define b8(p) ((p->opcode >> 8) & 1)#define mode(p) ((p->opcode >> 3) & 7)#define reg(p) (p->opcode & 7)#define md6(p) ((p->opcode >> 6) & 7)#define rg9(p) ((p->opcode >> 9) & 7)enum{kAddrValidAny,kAddrValidData,kAddrValidDataAlt,kAddrValidControl,kAddrValidControlAlt,kAddrValidAltMem,kAddrValidDataNoCn,/* no constants (immediate data) */kNumAddrValids};#define kAddrValidMaskAny (1 << kAddrValidAny)#define kAddrValidMaskData (1 << kAddrValidData)#define kAddrValidMaskDataAlt (1 << kAddrValidDataAlt)#define kAddrValidMaskControl (1 << kAddrValidControl)#define kAddrValidMaskControlAlt (1 << kAddrValidControlAlt)#define kAddrValidMaskAltMem (1 << kAddrValidAltMem)#define kAddrValidMaskDataNoCn (1 << kAddrValidDataNoCn)#define CheckInSet(v, m) (0 != ((1 << (v)) & (m)))#define kMyAvgCycPerInstr (10 * kCycleScale + (40 * kCycleScale / 64))LOCALFUNCui3rGetAMdRegSz(WorkR*p){ui3rCurAMd;switch(p->opsize){case1:CurAMd=kAMdRegB;break;case2:default:/* keep compiler happy */CurAMd=kAMdRegW;break;case4:CurAMd=kAMdRegL;break;}returnCurAMd;}LOCALFUNCui3rGetAMdIndirectSz(WorkR*p){ui3rCurAMd;switch(p->opsize){case1:CurAMd=kAMdIndirectB;break;case2:default:/* keep compiler happy */CurAMd=kAMdIndirectW;break;case4:CurAMd=kAMdIndirectL;break;}returnCurAMd;}#if WantCycByPriOpLOCALFUNCui4rOpEACalcCyc(WorkR*p,ui3rm,ui3rr){ui4rv;switch(m){case0:case1:v=0;break;case2:v=((4==p->opsize)?(8*kCycleScale+2*RdAvgXtraCyc):(4*kCycleScale+RdAvgXtraCyc));break;case3:v=((4==p->opsize)?(8*kCycleScale+2*RdAvgXtraCyc):(4*kCycleScale+RdAvgXtraCyc));break;case4:v=((4==p->opsize)?(10*kCycleScale+2*RdAvgXtraCyc):(6*kCycleScale+RdAvgXtraCyc));break;case5:v=((4==p->opsize)?(12*kCycleScale+3*RdAvgXtraCyc):(8*kCycleScale+2*RdAvgXtraCyc));break;case6:v=((4==p->opsize)?(14*kCycleScale+3*RdAvgXtraCyc):(10*kCycleScale+2*RdAvgXtraCyc));break;case7:switch(r){case0:v=((4==p->opsize)?(12*kCycleScale+3*RdAvgXtraCyc):(8*kCycleScale+2*RdAvgXtraCyc));break;case1:v=((4==p->opsize)?(16*kCycleScale+4*RdAvgXtraCyc):(12*kCycleScale+3*RdAvgXtraCyc));break;case2:v=((4==p->opsize)?(12*kCycleScale+3*RdAvgXtraCyc):(8*kCycleScale+2*RdAvgXtraCyc));break;case3:v=((4==p->opsize)?(14*kCycleScale+3*RdAvgXtraCyc):(10*kCycleScale+2*RdAvgXtraCyc));break;case4:v=((4==p->opsize)?(8*kCycleScale+2*RdAvgXtraCyc):(4*kCycleScale+RdAvgXtraCyc));break;default:v=0;break;}break;default:/* keep compiler happy */v=0;break;}returnv;}#endif#if WantCycByPriOpLOCALFUNCui4rOpEADestCalcCyc(