#define REGx(x) csp->ram[REG_##x]
#define RAMx(x) csp->ram[x]
#define ROMx(x) csp->rom[x]
#define BIT(a) (RAMx((a) & 0xf8) & (1 << ((a) & 0x07)))
#define BIT_SET(a) RAMx((a) & 0xf8) |= (1 << ((a) & 0x07))
#define BIT_CLR(a) RAMx((a) & 0xf8) &= ~((uint8)(1 << ((a) & 0x07)))
#define ADDR_L(a) ((uint16)(a))
#define ADDR_H3(a) ((((uint16)(a)) & 0xe0) << 3)
#define ADDR_H8(a) (((uint16)(a)) << 0x08)
#define ACC REGx(ACC)
#define B REGx(B)
#define PSW REGx(PSW)
#define SP REGx(SP)
#define DPL REGx(DPL)
#define DPH REGx(DPH)
#define DPTR ((uint16)DPH << 0x08) | DPL
#define P0 REGx(P0)
#define P1 REGx(P1)
#define P2 REGx(P2)
#define P3 REGx(P3)
#define IP REGx(IP)
#define IE REGx(IE)
#define TMOD REGx(TMOD)
#define TCON REGx(TCON)
#define T2CON REGx(T2CON)
#define TH0 REGx(TH0)
#define TL0 REGx(TL0)
#define TH1 REGx(TH1)
#define TL1 REGx(TL1)
#define TH2 REGx(TH2)
#define TL2 REGx(TL2)
#define RCAP2H REGx(RCAP2H)
#define RCAP2L REGx(RCAP2L)
#define SCON REGx(SCON)
#define SBUF REGx(SBUF)
#define PCON REGx(PCON)
#define Rx(x) RAMx(((REGx(PSW) >> 0x03) & 0x03) * 0x08 + (x) & 0x07)
#define RN Rx(ROMx(CIP))
#define R0 Rx(0)
#define R1 Rx(1)
#define R2 Rx(2)
#define R3 Rx(3)
#define R4 Rx(4)
#define R5 Rx(5)
#define R6 Rx(6)
#define R7 Rx(7)
#define FLAG_CY REG_PSW ^ 7
#define FLAG_AC REG_PSW ^ 6
#define FLAG_F0 REG_PSW ^ 5
#define FLAG_R1 REG_PSW ^ 4
#define FLAG_R0 REG_PSW ^ 3
#define FLAG_OV REG_PSW ^ 2
#define STACK RAMx(SP)
#define CIP csp->sip
#define PC csp->ip
#define PC_LOW (PC & 0xff)
#define PC_HIGH ((PC >> 0x08) & 0xff)
#define SET_PC(h, l)PC = (uint16)((h) << 0x08) | ((l) & 0xff)
#define SET_PCW(n) PC = (uint16)(n)
#define SET_PCR(r) PC = (uint16)(PC + (r))
#define PUSH(n) REGx(SP) += 1; STACK = (n)
#define PUSH_PC() PUSH(PC_LOW); PUSH(PC_HIGH)
#define POP() STACK; REGx(SP) -= 1
#define POP_PC() PC = POP(); PC <<= 0x08; PC |= POP()
#define ADDR8U ROMx(CIP + 1) ///< 第一個8-bit絕對地址。
#define ADDR8S ((char)ROMx(CIP + 1)) ///< 第一個8-bit相對地址。
#define ADDR8U2 ROMx(CIP + 2) ///< 第二個8-bit絕對地址。
#define ADDR8S2 ((char)ROMx(CIP + 2)) ///< 第二個8-bit相對地址。
#define ADDR11 (ADDR_H3(ROMx(CIP)) | ADDR_L(ADDR8U))
#define ADDR16 (ADDR_H8(ADDR8U) | ADDR_L(ADDR8U2))
#define CODE8 ROMx(ACC + DPTR)
#define CODE16 (CODE8 << 0x08) | ROMx(ACC + DPTR + 1)
#define CODE8_REL ROMx(ACC + PC)
#define CODE16_REL (CODE8_REL << 0x08) | ROMx(ACC + PC + 1)
#define DATA8 RAMx(ADDR8U)
#define DATA8U2 RAMx(ADDR8U2)
#define DATA16 ((uint16)RAMx(ADDR8U) << 0x08) | RAMx(ADDR8U + 1)
#define DATAR0 RAMx(R0)
#define DATAR1 RAMx(R1)
#define DATARN RAMx(Rx(ROMx(CIP) & 0x01))
#define DATA_DPTR RAMx(DPTR)
#define IMM8U ADDR8U
#define IMM8S ADDR8S
#define IMM8U2 ADDR8U2
#define IMM8S2 ADDR8S2
#define IMM16 ADDR16
TINYC寫個8052虛擬機(4) 宏定義。 .
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.