我正在编写一款NES模拟器,并编写了一个代表6502 CPU的单个类:
class CCpu6502 {
public:
/*....*/
void fetch8();
void fetch16();
void ADC();
void AND();
/* Around 50+ cpu instruction types */
private:
/*register state, jump table definition*/
};
基本上,我有一张跳转表,它接受操作码并执行相应的成员函数-改变CPU的内部状态。还有一些其他任务确定正确的寻址类型。
我意识到类定义太大且很难解析和测试。但是,将类分成单独的类似乎有问题,因为几乎每个函数都会改变CPU的内部状态。
我考虑将指令类型分类如下:
class AInstructionHandler {/*...*/};
class CArithmeticInstHandler : public AInstructionHandler{/*...*/};
class CBranchInstHandler : public AInstructionHandler{/*...*/};
/*memory accessors, logical, etc. */
然而,我将不得不让每个指令处理类都可以访问CPU的内部状态,使每个类成为友元,这似乎是一个不好的想法。
我在思考,是否有一种首选的方法来重构一个几乎所有方法都会影响对象状态的大类,或者我的设计本来就有缺陷。
谢谢