home *** CD-ROM | disk | FTP | other *** search
- #ifndef _MIC_CONTROL_
- #define _MIC_CONTROL_
-
- #include "mic_main.h"
-
- //extern class Mic_1_Class;
- class MMUXClass;
- class ControlStoreClass;
- class MPCClass;
- class IncrementerClass;
- class MIRClass;
- class MicroSeqClass;
-
- // the microprogram multiplexer; determines jump location in the microprogram
- class MMUXClass
- {
- private:
- short Jump;
- unsigned short Incrementer_word;
- unsigned short Address_word;
- public:
- MMUXClass() {Jump = 0; Incrementer_word = 0; Address_word = 0;}
- void input_MicroSeq(Mic_1_Class& Mic, short newJump) {Jump = newJump; output(Mic);}
- void input_Incrementer(Mic_1_Class& Mic, unsigned short new_Inc_word)
- {
- Incrementer_word = new_Inc_word;
- if (!Jump)
- output(Mic);
- }
- void input_MIR(Mic_1_Class& Mic, unsigned short new_Addr_word)
- {
- Address_word = new_Addr_word;
- if (Jump)
- output(Mic);
- }
- void output(Mic_1_Class& Mic);
- friend ostream& operator << (ostream& s, MMUXClass& m);
- };
-
- // The microprogram counter
- class MPCClass
- {
- private:
- unsigned short word;
- public:
- MPCClass() {word = 0;}
- void input_MMUX (unsigned short newWord) {word = newWord;}
- void output (Mic_1_Class& Mic);
- friend ostream& operator << (ostream& s, MPCClass& m);
- };
-
- class IncrementerClass
- {
- private:
- unsigned short word;
- public:
- IncrementerClass() {word = 0;}
- void input_MPC (Mic_1_Class& Mic, unsigned short newWord) {word = newWord; output(Mic);}
- void output(Mic_1_Class& Mic);
- };
-
- class ControlStoreClass
- {
- private:
- short Index;
- unsigned long store[256];
- public:
- ControlStoreClass() {Index = 0; for (int i=0; i<256; i++) store[i]=0;}
- unsigned long getNthWord (short n);
- Boolean putNthWord (short n, unsigned long newWord);
- void input_MPC (Mic_1_Class& Mic, short which)
- {
- Index = which;
- output(Mic);
- }
- void output(Mic_1_Class& Mic);
- friend ostream& operator << (ostream& s, ControlStoreClass& c);
- friend istream& operator >> (istream& s, ControlStoreClass& c);
- };
- short InitMicControl (Mic_1_Class& Mic);
-
- class MIRClass
- {
- private:
- unsigned long MIR;
- public:
- MIRClass () {MIR = 0;}
- unsigned long getMIR (void) {return MIR;}
- void putMIR (unsigned long newMIR) {MIR = newMIR;}
- void input_ControlStore (unsigned long newMIR) {MIR = newMIR;}
- void output (Mic_1_Class& Mic);
- friend ostream& operator << (ostream& s, MIRClass& m);
- };
-
- class MicroSeqClass
- {
- private:
- short zero;
- short negative;
- short jump_cond;
- public:
- MicroSeqClass() {zero = negative = false; jump_cond = 0;}
- void input_negative(short newNegative) {negative = newNegative;}
- // input_negative must be called before input_zero
- void input_zero (Mic_1_Class& Mic, short newZero) {zero = newZero; output(Mic);}
- void input_MIR (short new_jump_cond) {jump_cond = new_jump_cond;}
- void output(Mic_1_Class& Mic);
- friend ostream& operator << (ostream& s, MicroSeqClass& m);
- };
-
- #endif