uvmac/src/HW/M68K/M68KITAB.h

275 lines
4.1 KiB
C

/*
M68KITAB.h
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.
*/
#ifndef M68KITAB_H
#define M68KITAB_H
enum {
// 68000
kIKindTst,
kIKindCmpB,
kIKindCmpW,
kIKindCmpL,
kIKindBccB,
kIKindBccW,
kIKindBraB,
kIKindBraW,
kIKindDBcc,
kIKindDBF,
kIKindSwap,
kIKindMoveL,
kIKindMoveW,
kIKindMoveB,
kIKindMoveAL,
kIKindMoveAW,
kIKindMoveQ,
kIKindAddB,
kIKindAddW,
kIKindAddL,
kIKindSubB,
kIKindSubW,
kIKindSubL,
kIKindLea,
kIKindPEA,
kIKindA,
kIKindBsrB,
kIKindBsrW,
kIKindJsr,
kIKindLinkA6,
kIKindMOVEMRmML,
kIKindMOVEMApRL,
kIKindUnlkA6,
kIKindRts,
kIKindJmp,
kIKindClr,
kIKindAddA,
kIKindAddQA,
kIKindSubA,
kIKindSubQA,
kIKindCmpA,
kIKindAddXB,
kIKindAddXW,
kIKindAddXL,
kIKindSubXB,
kIKindSubXW,
kIKindSubXL,
kIKindAslB,
kIKindAslW,
kIKindAslL,
kIKindAsrB,
kIKindAsrW,
kIKindAsrL,
kIKindLslB,
kIKindLslW,
kIKindLslL,
kIKindLsrB,
kIKindLsrW,
kIKindLsrL,
kIKindRxlB,
kIKindRxlW,
kIKindRxlL,
kIKindRxrB,
kIKindRxrW,
kIKindRxrL,
kIKindRolB,
kIKindRolW,
kIKindRolL,
kIKindRorB,
kIKindRorW,
kIKindRorL,
kIKindBTstB,
kIKindBChgB,
kIKindBClrB,
kIKindBSetB,
kIKindBTstL,
kIKindBChgL,
kIKindBClrL,
kIKindBSetL,
kIKindAndI,
kIKindAndEaD,
kIKindAndDEa,
kIKindOrI,
kIKindOrDEa,
kIKindOrEaD,
kIKindEor,
kIKindEorI,
kIKindNot,
kIKindScc,
kIKindNegXB,
kIKindNegXW,
kIKindNegXL,
kIKindNegB,
kIKindNegW,
kIKindNegL,
kIKindEXTW,
kIKindEXTL,
kIKindMulU,
kIKindMulS,
kIKindDivU,
kIKindDivS,
kIKindExg,
kIKindMoveEaCCR,
kIKindMoveSREa,
kIKindMoveEaSR,
kIKindOrISR,
kIKindAndISR,
kIKindEorISR,
kIKindOrICCR,
kIKindAndICCR,
kIKindEorICCR,
kIKindMOVEMApRW,
kIKindMOVEMRmMW,
kIKindMOVEMrmW,
kIKindMOVEMrmL,
kIKindMOVEMmrW,
kIKindMOVEMmrL,
kIKindAbcd,
kIKindSbcd,
kIKindNbcd,
kIKindRte,
kIKindNop,
kIKindMoveP0,
kIKindMoveP1,
kIKindMoveP2,
kIKindMoveP3,
kIKindIllegal,
kIKindChkW,
kIKindTrap,
kIKindTrapV,
kIKindRtr,
kIKindLink,
kIKindUnlk,
kIKindMoveRUSP,
kIKindMoveUSPR,
kIKindTas,
kIKindFdflt,
kIKindStop,
kIKindReset,
// 68020
kIKindCallMorRtm,
kIKindBraL,
kIKindBccL,
kIKindBsrL,
kIKindEXTBL,
kIKindTRAPcc,
kIKindChkL,
kIKindBkpt,
kIKindDivL,
kIKindMulL,
kIKindRtd,
kIKindMoveCCREa,
kIKindMoveCEa,
kIKindMoveEaC,
kIKindLinkL,
kIKindPack,
kIKindUnpk,
kIKindCHK2orCMP2,
kIKindCAS2,
kIKindCAS,
kIKindMoveS,
kIKindBitField,
// MMU
kIKindMMU,
// FPU
kIKindFPUmd60,
kIKindFPUDBcc,
kIKindFPUTrapcc,
kIKindFPUScc,
kIKindFPUFBccW,
kIKindFPUFBccL,
kIKindFPUSave,
kIKindFPURestore,
kIKindFPUdflt,
kNumIKinds
};
enum {
kAMdRegB,
kAMdRegW,
kAMdRegL,
kAMdIndirectB,
kAMdIndirectW,
kAMdIndirectL,
kAMdAPosIncB,
kAMdAPosIncW,
kAMdAPosIncL,
kAMdAPosInc7B,
kAMdAPreDecB,
kAMdAPreDecW,
kAMdAPreDecL,
kAMdAPreDec7B,
kAMdADispB,
kAMdADispW,
kAMdADispL,
kAMdAIndexB,
kAMdAIndexW,
kAMdAIndexL,
kAMdAbsWB,
kAMdAbsWW,
kAMdAbsWL,
kAMdAbsLB,
kAMdAbsLW,
kAMdAbsLL,
kAMdPCDispB,
kAMdPCDispW,
kAMdPCDispL,
kAMdPCIndexB,
kAMdPCIndexW,
kAMdPCIndexL,
kAMdImmedB,
kAMdImmedW,
kAMdImmedL,
kAMdDat4,
kNumAMds
};
struct DecOpXR {
/* expected size : 4 bytes */
uint16_t MainClas;
uint16_t Cycles;
};
typedef struct DecOpXR DecOpXR;
struct DecArgR {
/* expected size : 2 bytes */
uint8_t AMd;
uint8_t ArgDat;
};
typedef struct DecArgR DecArgR;
struct DecOpYR {
/* expected size : 4 bytes */
DecArgR v[2];
};
typedef struct DecOpYR DecOpYR;
struct DecOpR {
/* expected size : 8 bytes */
DecOpXR x;
DecOpYR y;
} align_8;
typedef struct DecOpR DecOpR;
#define GetDcoCycles(p) ((p)->x.Cycles)
#define SetDcoMainClas(p, xx) ((p)->x.MainClas = (xx))
#define SetDcoCycles(p, xx) ((p)->x.Cycles = (xx))
extern void M68KITAB_setup(DecOpR *p);
#endif