📄 fxinst.cpp
字号:
GSU.bCacheActive = FALSE; fx_cache(); R15--;static void fx_ljmp_r8() { FX_LJMP(8); }static void fx_ljmp_r9() { FX_LJMP(9); }static void fx_ljmp_r10() { FX_LJMP(10); }static void fx_ljmp_r11() { FX_LJMP(11); }static void fx_ljmp_r12() { FX_LJMP(12); }static void fx_ljmp_r13() { FX_LJMP(13); }/* 9e - lob - set upper byte to zero (keep low byte) */static void fx_lob(){ uint32 v = USEX8(SREG); R15++; DREG = v; GSU.vSign = v<<8; GSU.vZero = v<<8; TESTR14; CLRFLAGS;}/* 9f - fmult - 16 bit to 32 bit signed multiplication, upper 16 bits only */static void fx_fmult(){ uint32 v; uint32 c = (uint32) (SEX16(SREG) * SEX16(R6)); v = c >> 16; R15++; DREG = v; GSU.vSign = v; GSU.vZero = v; GSU.vCarry = (c >> 15) & 1; TESTR14; CLRFLAGS;}/* 9f(ALT1) - lmult - 16 bit to 32 bit signed multiplication */static void fx_lmult(){ uint32 v; uint32 c = (uint32) (SEX16(SREG) * SEX16(R6)); R4 = c; v = c >> 16; R15++; DREG = v; GSU.vSign = v; GSU.vZero = v; /* XXX R6 or R4? */ GSU.vCarry = (R4 >> 15) & 1; /* should it be bit 15 of R4 instead? */ TESTR14; CLRFLAGS;}/* a0-af - ibt rn,#pp - immediate byte transfer */#define FX_IBT(reg) \uint8 v = PIPE; R15++; \FETCHPIPE; R15++; \GSU.avReg[reg] = SEX8(v); \CLRFLAGS;static void fx_ibt_r0() { FX_IBT(0); }static void fx_ibt_r1() { FX_IBT(1); }static void fx_ibt_r2() { FX_IBT(2); }static void fx_ibt_r3() { FX_IBT(3); }static void fx_ibt_r4() { FX_IBT(4); }static void fx_ibt_r5() { FX_IBT(5); }static void fx_ibt_r6() { FX_IBT(6); }static void fx_ibt_r7() { FX_IBT(7); }static void fx_ibt_r8() { FX_IBT(8); }static void fx_ibt_r9() { FX_IBT(9); }static void fx_ibt_r10() { FX_IBT(10); }static void fx_ibt_r11() { FX_IBT(11); }static void fx_ibt_r12() { FX_IBT(12); }static void fx_ibt_r13() { FX_IBT(13); }static void fx_ibt_r14() { FX_IBT(14); READR14; }static void fx_ibt_r15() { FX_IBT(15); }/* a0-af(ALT1) - lms rn,(yy) - load word from RAM (short address) */#define FX_LMS(reg) \GSU.vLastRamAdr = ((uint32)PIPE) << 1; \R15++; FETCHPIPE; R15++; \GSU.avReg[reg] = (uint32)RAM(GSU.vLastRamAdr); \GSU.avReg[reg] |= ((uint32)RAM(GSU.vLastRamAdr+1))<<8; \CLRFLAGS;static void fx_lms_r0() { FX_LMS(0); }static void fx_lms_r1() { FX_LMS(1); }static void fx_lms_r2() { FX_LMS(2); }static void fx_lms_r3() { FX_LMS(3); }static void fx_lms_r4() { FX_LMS(4); }static void fx_lms_r5() { FX_LMS(5); }static void fx_lms_r6() { FX_LMS(6); }static void fx_lms_r7() { FX_LMS(7); }static void fx_lms_r8() { FX_LMS(8); }static void fx_lms_r9() { FX_LMS(9); }static void fx_lms_r10() { FX_LMS(10); }static void fx_lms_r11() { FX_LMS(11); }static void fx_lms_r12() { FX_LMS(12); }static void fx_lms_r13() { FX_LMS(13); }static void fx_lms_r14() { FX_LMS(14); READR14; }static void fx_lms_r15() { FX_LMS(15); }/* a0-af(ALT2) - sms (yy),rn - store word in RAM (short address) *//* If rn == r15, is the value of r15 before or after the extra byte is read? */#define FX_SMS(reg) \uint32 v = GSU.avReg[reg]; \GSU.vLastRamAdr = ((uint32)PIPE) << 1; \R15++; FETCHPIPE; \RAM(GSU.vLastRamAdr) = (uint8)v; \RAM(GSU.vLastRamAdr+1) = (uint8)(v>>8); \CLRFLAGS; R15++;static void fx_sms_r0() { FX_SMS(0); }static void fx_sms_r1() { FX_SMS(1); }static void fx_sms_r2() { FX_SMS(2); }static void fx_sms_r3() { FX_SMS(3); }static void fx_sms_r4() { FX_SMS(4); }static void fx_sms_r5() { FX_SMS(5); }static void fx_sms_r6() { FX_SMS(6); }static void fx_sms_r7() { FX_SMS(7); }static void fx_sms_r8() { FX_SMS(8); }static void fx_sms_r9() { FX_SMS(9); }static void fx_sms_r10() { FX_SMS(10); }static void fx_sms_r11() { FX_SMS(11); }static void fx_sms_r12() { FX_SMS(12); }static void fx_sms_r13() { FX_SMS(13); }static void fx_sms_r14() { FX_SMS(14); }static void fx_sms_r15() { FX_SMS(15); }/* b0-bf - from rn - set source register *//* b0-bf(B) - moves rn - move register to register, and set flags, (if B flag is set) */#define FX_FROM(reg) \if(TF(B)) { uint32 v = GSU.avReg[reg]; R15++; DREG = v; \GSU.vOverflow = (v&0x80) << 16; GSU.vSign = v; GSU.vZero = v; TESTR14; CLRFLAGS; } \else { GSU.pvSreg = &GSU.avReg[reg]; R15++; }static void fx_from_r0() { FX_FROM(0); }static void fx_from_r1() { FX_FROM(1); }static void fx_from_r2() { FX_FROM(2); }static void fx_from_r3() { FX_FROM(3); }static void fx_from_r4() { FX_FROM(4); }static void fx_from_r5() { FX_FROM(5); }static void fx_from_r6() { FX_FROM(6); }static void fx_from_r7() { FX_FROM(7); }static void fx_from_r8() { FX_FROM(8); }static void fx_from_r9() { FX_FROM(9); }static void fx_from_r10() { FX_FROM(10); }static void fx_from_r11() { FX_FROM(11); }static void fx_from_r12() { FX_FROM(12); }static void fx_from_r13() { FX_FROM(13); }static void fx_from_r14() { FX_FROM(14); }static void fx_from_r15() { FX_FROM(15); }/* c0 - hib - move high-byte to low-byte */static void fx_hib(){ uint32 v = USEX8(SREG>>8); R15++; DREG = v; GSU.vSign = v<<8; GSU.vZero = v<<8; TESTR14; CLRFLAGS;}/* c1-cf - or rn */#define FX_OR(reg) \uint32 v = SREG | GSU.avReg[reg]; R15++; DREG = v; \GSU.vSign = v; \GSU.vZero = v; \TESTR14; \CLRFLAGS;static void fx_or_r1() { FX_OR(1); }static void fx_or_r2() { FX_OR(2); }static void fx_or_r3() { FX_OR(3); }static void fx_or_r4() { FX_OR(4); }static void fx_or_r5() { FX_OR(5); }static void fx_or_r6() { FX_OR(6); }static void fx_or_r7() { FX_OR(7); }static void fx_or_r8() { FX_OR(8); }static void fx_or_r9() { FX_OR(9); }static void fx_or_r10() { FX_OR(10); }static void fx_or_r11() { FX_OR(11); }static void fx_or_r12() { FX_OR(12); }static void fx_or_r13() { FX_OR(13); }static void fx_or_r14() { FX_OR(14); }static void fx_or_r15() { FX_OR(15); }/* c1-cf(ALT1) - xor rn */#define FX_XOR(reg) \uint32 v = SREG ^ GSU.avReg[reg]; R15++; DREG = v; \GSU.vSign = v; \GSU.vZero = v; \TESTR14; \CLRFLAGS;static void fx_xor_r1() { FX_XOR(1); }static void fx_xor_r2() { FX_XOR(2); }static void fx_xor_r3() { FX_XOR(3); }static void fx_xor_r4() { FX_XOR(4); }static void fx_xor_r5() { FX_XOR(5); }static void fx_xor_r6() { FX_XOR(6); }static void fx_xor_r7() { FX_XOR(7); }static void fx_xor_r8() { FX_XOR(8); }static void fx_xor_r9() { FX_XOR(9); }static void fx_xor_r10() { FX_XOR(10); }static void fx_xor_r11() { FX_XOR(11); }static void fx_xor_r12() { FX_XOR(12); }static void fx_xor_r13() { FX_XOR(13); }static void fx_xor_r14() { FX_XOR(14); }static void fx_xor_r15() { FX_XOR(15); }/* c1-cf(ALT2) - or #n */#define FX_OR_I(imm) \uint32 v = SREG | imm; R15++; DREG = v; \GSU.vSign = v; \GSU.vZero = v; \TESTR14; \CLRFLAGS;static void fx_or_i1() { FX_OR_I(1); }static void fx_or_i2() { FX_OR_I(2); }static void fx_or_i3() { FX_OR_I(3); }static void fx_or_i4() { FX_OR_I(4); }static void fx_or_i5() { FX_OR_I(5); }static void fx_or_i6() { FX_OR_I(6); }static void fx_or_i7() { FX_OR_I(7); }static void fx_or_i8() { FX_OR_I(8); }static void fx_or_i9() { FX_OR_I(9); }static void fx_or_i10() { FX_OR_I(10); }static void fx_or_i11() { FX_OR_I(11); }static void fx_or_i12() { FX_OR_I(12); }static void fx_or_i13() { FX_OR_I(13); }static void fx_or_i14() { FX_OR_I(14); }static void fx_or_i15() { FX_OR_I(15); }/* c1-cf(ALT3) - xor #n */#define FX_XOR_I(imm) \uint32 v = SREG ^ imm; R15++; DREG = v; \GSU.vSign = v; \GSU.vZero = v; \TESTR14; \CLRFLAGS;static void fx_xor_i1() { FX_XOR_I(1); }static void fx_xor_i2() { FX_XOR_I(2); }static void fx_xor_i3() { FX_XOR_I(3); }static void fx_xor_i4() { FX_XOR_I(4); }static void fx_xor_i5() { FX_XOR_I(5); }static void fx_xor_i6() { FX_XOR_I(6); }static void fx_xor_i7() { FX_XOR_I(7); }static void fx_xor_i8() { FX_XOR_I(8); }static void fx_xor_i9() { FX_XOR_I(9); }static void fx_xor_i10() { FX_XOR_I(10); }static void fx_xor_i11() { FX_XOR_I(11); }static void fx_xor_i12() { FX_XOR_I(12); }static void fx_xor_i13() { FX_XOR_I(13); }static void fx_xor_i14() { FX_XOR_I(14); }static void fx_xor_i15() { FX_XOR_I(15); }/* d0-de - inc rn - increase by one */#define FX_INC(reg) \GSU.avReg[reg] += 1; \GSU.vSign = GSU.avReg[reg]; \GSU.vZero = GSU.avReg[reg]; \CLRFLAGS; R15++;static void fx_inc_r0() { FX_INC(0); }static void fx_inc_r1() { FX_INC(1); }static void fx_inc_r2() { FX_INC(2); }static void fx_inc_r3() { FX_INC(3); }static void fx_inc_r4() { FX_INC(4); }static void fx_inc_r5() { FX_INC(5); }static void fx_inc_r6() { FX_INC(6); }static void fx_inc_r7() { FX_INC(7); }static void fx_inc_r8() { FX_INC(8); }static void fx_inc_r9() { FX_INC(9); }static void fx_inc_r10() { FX_INC(10); }static void fx_inc_r11() { FX_INC(11); }static void fx_inc_r12() { FX_INC(12); }static void fx_inc_r13() { FX_INC(13); }static void fx_inc_r14() { FX_INC(14); READR14; }/* df - getc - transfer ROM buffer to color register */static void fx_getc(){#ifndef FX_DO_ROMBUFFER uint8 c; c = ROM(R14);#else uint8 c = GSU.vRomBuffer;#endif if(GSU.vPlotOptionReg & 0x04) c = (c&0xf0) | (c>>4); if(GSU.vPlotOptionReg & 0x08) { GSU.vColorReg &= 0xf0; GSU.vColorReg |= c & 0x0f; } else GSU.vColorReg = USEX8(c); CLRFLAGS; R15++;}/* df(ALT2) - ramb - set current RAM bank */static void fx_ramb(){ GSU.vRamBankReg = SREG & (FX_RAM_BANKS-1); GSU.pvRamBank = GSU.apvRamBank[GSU.vRamBankReg & 0x3]; CLRFLAGS; R15++;}/* df(ALT3) - romb - set current ROM bank */static void fx_romb(){ GSU.vRomBankReg = USEX8(SREG) & 0x7f; GSU.pvRomBank = GSU.apvRomBank[GSU.vRomBankReg]; CLRFLAGS; R15++;}/* e0-ee - dec rn - decrement by one */#define FX_DEC(reg) \GSU.avReg[reg] -= 1; \GSU.vSign = GSU.avReg[reg]; \GSU.vZero = GSU.avReg[reg]; \CLRFLAGS; R15++;static void fx_dec_r0() { FX_DEC(0); }static void fx_dec_r1() { FX_DEC(1); }static void fx_dec_r2() { FX_DEC(2); }static void fx_dec_r3() { FX_DEC(3); }static void fx_dec_r4() { FX_DEC(4); }static void fx_dec_r5() { FX_DEC(5); }static void fx_dec_r6() { FX_DEC(6); }static void fx_dec_r7() { FX_DEC(7); }static void fx_dec_r8() { FX_DEC(8); }static void fx_dec_r9() { FX_DEC(9); }static void fx_dec_r10() { FX_DEC(10); }static void fx_dec_r11() { FX_DEC(11); }static void fx_dec_r12() { FX_DEC(12); }static void fx_dec_r13() { FX_DEC(13); }static void fx_dec_r14() { FX_DEC(14); READR14; }/* ef - getb - get byte from ROM at address R14 */static void fx_getb(){ uint32 v;#ifndef FX_DO_ROMBUFFER v = (uint32)ROM(R14);#else v = (uint32)GSU.vRomBuffer;#endif R15++; DREG = v; TESTR14; CLRFLAGS;}/* ef(ALT1) - getbh - get high-byte from ROM at address R14 */static void fx_getbh(){ uint32 v;#ifndef FX_DO_ROMBUFFER uint32 c; c = (uint32)ROM(R14);#else uint32 c = USEX8(GSU.vRomBuffer);#endif v = USEX8(SREG) | (c<<8); R15++; DREG = v; TESTR14; CLRFLAGS;}/* ef(ALT2) - getbl - get low-byte from ROM at address R14 */static void fx_getbl(){ uint32 v;#ifndef FX_DO_ROMBUFFER uint32 c; c = (uint32)ROM(R14);#else uint32 c = USEX8(GSU.vRomBuffer);#endif v = (SREG & 0xff00) | c; R15++; DREG = v; TESTR14; CLRFLAGS;}/* ef(ALT3) - getbs - get sign extended byte from ROM at address R14 */static void fx_getbs(){ uint32 v;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -