⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcodecontrolunit.java

📁 熟悉非常简单CPU模拟器 1、将所给模拟器的源程序编译成执行程序。 2、运行并观察非常简单CPU模拟器
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
         COND_1 | BT_JUMP | OPER_MDR | 0x01,                    // STAC5
         -1,
         COND_1 | BT_JUMP | OPER_ZALU | OPER_MINU | 0x01,       // SUB1
         -1,
         -1,
         -1,
         COND_1 | BT_JUMP | OPER_ZALU | OPER_ACIN | 0x01,       // INAC1
         COND_1 | BT_JUMP | OPER_PCIN | 0x2a,                   // JMPZN1
         COND_1 | BT_JUMP | OPER_PCIN | 0x01,                   // JMPZN2
         -1,
         COND_1 | BT_JUMP | OPER_ZALU | OPER_ACZO | 0x01,       // CLAC1
         COND_1 | BT_JUMP | OPER_PCIN | 0x2e,                   // JPNZN1
         COND_1 | BT_JUMP | OPER_PCIN | 0x01,                   // JPNZN2
         -1,
         COND_1 | BT_JUMP | OPER_ZALU | OPER_AND | 0x01,        // AND1
         -1,
         -1,
         -1,
         COND_1 | BT_JUMP | OPER_ZALU | OPER_OR | 0x01,         // OR1
         -1,
         -1,
         -1,
         COND_1 | BT_JUMP | OPER_ZALU | OPER_XOR | 0x01,        // XOR1
         -1,
         -1,
         -1,
         COND_1 | BT_JUMP | OPER_ZALU | OPER_NOT | 0x01,        // NOT1
         -1,
         -1
      };
*/
   private int[] microcode =
      {
         COND_1 | OPER_ARPC | 0x01,                    // FETCH1
         COND_1 | OPER_PCIN | OPER_DRM | 0x02,         // FETCH2
         COND_X | OPER_ARDR | OPER_IRDR | ADDR_X,      // FETCH3
         -1,
         -1,
         -1,
         -1,
         -1,
         COND_1 | OPER_DRM | 0x09,                      // ADD1
         COND_1 | OPER_PLUS | 0x00,                     // ADD2
         COND_1 | OPER_DRM | 0x0b,                      // AND1
         COND_1 | OPER_AND | 0x00,                      // AND2
         COND_1 | OPER_PCDR | 0x00,                     // JMP1
         -1,
         COND_1 | OPER_ACIN | 0x00,                     // INC1
         COND_1 | 0x00                        // null
      };



   private Menu fileMenu;
   private MenuItem closeWindowMenuItem;

   private ScrollPane mcuCanvasScrollPane;

   private Canvas mcuCanvas =

      new Canvas()
      {

         public Dimension getPreferredSize()
         {
            return ( getMinimumSize() );
         }

         public Dimension getMinimumSize()
         {
            return ( new Dimension( 285, 410 ) );
         }

         public void invalidate()
         {
            super.invalidate();
            offScreenImage = null;
         }

         public void update( Graphics g )
         {
            paint( g );
         }

         public void paint( Graphics g )
         {

            if ( offScreenImage == null )
            {
               offScreenImage = createImage( 285, 410 );
            }

            Graphics offScreenGraphics = offScreenImage.getGraphics();

            offScreenGraphics.setClip( g.getClip() );

            offScreenGraphics.setColor( getBackground() );
            offScreenGraphics.fillRect( 0, 0, 285, 450 );

            Font bld = new Font( "SansSerif", Font.BOLD, 12 );
            Font bits = new Font( "SansSerif", Font.PLAIN, 11 );
            Font f3 = new Font( "SansSerif", Font.PLAIN, 9 );

            offScreenGraphics.setFont( f3 );

            offScreenGraphics.setColor( Color.black );

            offScreenGraphics.drawRect(80,95,120,50);          // Mux

            offScreenGraphics.drawRect(85,30,50,30);          //IR map
           // offScreenGraphics.drawString("MAP",98,45);          // Map

            offScreenGraphics.drawRect(80,180,120,35);        //Register

            offScreenGraphics.drawRect(75,255,125,60);        //Microcode Memory

           // offScreenGraphics.drawRect(125,100,140,50);        //Addr_MUX

           // offScreenGraphics.drawRect(285,152,30,30);         //INC

           // offScreenGraphics.drawRect(125,35,50,30);          //MAP

            offScreenGraphics.drawLine(110,60,110,95);       // MAP to Addr_MUX
            offScreenGraphics.drawLine(110,95,115,90);       // Arrow
            offScreenGraphics.drawLine(110,95,105,90);       // Arrow

            offScreenGraphics.drawLine(143,145,143,180);       // Addr_MUX to Register
            offScreenGraphics.drawLine(143,180,148,175);       // Arrow
            offScreenGraphics.drawLine(143,180,138,175);       // Arrow

            offScreenGraphics.drawLine(143,215,143,255);       // Register to Micro Memory
           // offScreenGraphics.fillOval(194,240,4,4);
            offScreenGraphics.drawLine(143,255,148,250);       // Arrow
            offScreenGraphics.drawLine(143,255,138,250);       // Arrow

           // offScreenGraphics.drawLine(194,242,300,242);       // Register_out to INC
           // offScreenGraphics.drawLine(300,242,300,182);
           // offScreenGraphics.drawLine(300,182,295,187);       // Arrow
           // offScreenGraphics.drawLine(300,182,305,187);       // Arrow

           // offScreenGraphics.drawLine(300,152,300,85);       // INC to Addr_MUX
           // offScreenGraphics.drawLine(300,85,240,85);       // INC to Addr_MUX
           // offScreenGraphics.drawLine(240,85,240,100);       // INC to Addr_MUX
           // offScreenGraphics.drawLine(240,100,235,95);       // Arrow
           // offScreenGraphics.drawLine(240,100,245,95);       // Arrow

           // offScreenGraphics.drawLine(75,155,75,210);         // Logic to Z_MUX
           // offScreenGraphics.drawLine(75,155,70,160);         // Arrow
           // offScreenGraphics.drawLine(75,155,80,160);         // Arrow

            offScreenGraphics.drawString("SEL",100,313);
           // offScreenGraphics.drawString("BT",170,313);
            offScreenGraphics.drawString("mOPs",130,313);
            offScreenGraphics.drawString("ADDR",165,313);

            offScreenGraphics.drawLine(111,315,111,360);    //Microde to MUX sel 
            offScreenGraphics.drawLine(111,360,40,360);     //Microde to MUX sel
            offScreenGraphics.drawLine(40,360,40,120);      //Microde to MUX sel
            offScreenGraphics.drawLine(40,120,80,120);      //Microde to MUX sel
            offScreenGraphics.drawLine(80,120,75,125);      // Arrow
            offScreenGraphics.drawLine(80,120,75,115);      // Arrow

            offScreenGraphics.drawLine(178,315,178,360);        // Microde addr to MUX
            offScreenGraphics.drawLine(178,360,240,360);        // Microde addr to MUX
            offScreenGraphics.drawLine(240,360,240,80);         // Microde addr to MUX
            offScreenGraphics.drawLine(240,80,170,80);          // Microde addr to MUX
            offScreenGraphics.drawLine(170,80,170,95);          // Microde addr to MUX
            offScreenGraphics.drawLine(170,95,165,90);         // Arrow
            offScreenGraphics.drawLine(170,95,175,90);         // Arrow

            offScreenGraphics.drawLine(140,315,140,370);       // mOPs to functions
            offScreenGraphics.drawLine(140,370,145,365);       // Arrow
            offScreenGraphics.drawLine(140,370,135,365);       // Arrow

           // offScreenGraphics.drawLine(105,140,125,140);       // Logic to Addr_MUX S1
           // offScreenGraphics.drawLine(125,140,120,135);       // Arrow
           // offScreenGraphics.drawLine(125,140,120,145);       // Arrow

           // offScreenGraphics.drawLine(208,320,208,375);       // Micro-ops
           // offScreenGraphics.drawLine(208,375,203,370);       // Arrow
           // offScreenGraphics.drawLine(208,375,213,370);       // Arrow

           // offScreenGraphics.drawLine(242,365,242,320);       // Micro Memory to Addr_MUX
           // offScreenGraphics.drawLine(242,365,325,365);       // Micro Memory to Addr_MUX
           // offScreenGraphics.drawLine(325,365,325,65);       // Micro Memory to Addr_MUX
           // offScreenGraphics.drawLine(325,65,195,65);       // Micro Memory to Addr_MUX
           // offScreenGraphics.drawLine(195,65,195,100);       // Micro Memory to Addr_MUX
           // offScreenGraphics.drawLine(195,100,190,95);       // Arrow
           // offScreenGraphics.drawLine(195,100,200,95);       // Arrow

            offScreenGraphics.drawString("S",85,124);                // S on Addr_MUX
           // offScreenGraphics.drawString("S0",129,144);                // S1 on Addr_MUX

            paintIRPath( offScreenGraphics );
            paintAddressMuxSignals( offScreenGraphics );
            paintClock( offScreenGraphics );
           // paintConditionMuxSignals( offScreenGraphics );
            paintCurrentSignals( offScreenGraphics );

            offScreenGraphics.setFont( bld );

            offScreenGraphics.setColor( Color.black );
           // offScreenGraphics.drawString("+1",292,172);
            offScreenGraphics.drawString("MAP",99,45);
            offScreenGraphics.drawString("REGISTER",112,197);
            offScreenGraphics.drawString("Microcode",114,269);
            offScreenGraphics.drawString("Memory",120,283);
           // offScreenGraphics.drawString("MUX",67,243);                // Z_Mux label
            offScreenGraphics.drawString("MUX",130,124);       // Addr_Mux label
           // offScreenGraphics.drawString("Logic",60,130);      // Logic label

            offScreenGraphics.setFont( bits );

            paintIRMapValue( offScreenGraphics );
            paintAddressRegisterValue( offScreenGraphics );
            paintCurrentConditionValue( offScreenGraphics );
           // paintCurrentBTValue( offScreenGraphics );
            paintCurrentNextAddressValue( offScreenGraphics );
            paintAddressMuxValue( offScreenGraphics );
           // paintUpperLogicSelectValue( offScreenGraphics );
           // paintLowerLogicSelectValue( offScreenGraphics );

            paintDots( offScreenGraphics );

            g.drawImage( offScreenImage, 0, 0, this );   // used for double buffering

            offScreenGraphics.dispose();
         }

         public void paintIRPath( Graphics g )
         {
            g.setColor( irPathEnabled ? Color.red : Color.black );
            g.drawString( "IR[1..0]", 90, 10 );

            g.drawLine(110,15,110,30);         // IR_Input to MAP
            g.drawLine(110,30,115,25);         // Arrow
            g.drawLine(110,30,105,25);         // Arrow
         }

         public void paintAddressMuxValue( Graphics g )
         {
            g.drawString( AssemblyInstruction.toNumberString( addressMux, 2,
               4 ), 132, 140 );
         }

/*         public void paintUpperLogicSelectValue( Graphics g )
         {
            g.drawString( AssemblyInstruction.toNumberString( ( 
               logicSelect & 0x2 ) >> 1, 2, 1 ), 97, 120 );
         }
*/
/*         public void paintLowerLogicSelectValue( Graphics g )
         {
            g.drawString( AssemblyInstruction.toNumberString( 
               logicSelect & 0x1, 2, 1 ), 97, 144 );
         }
*/
         public void paintAddressRegisterValue( Graphics g )
         {
            g.drawString( AssemblyInstruction.toNumberString(
               addressRegister, 2, 4 ), 132, 211 );
         }

         public void paintCurrentNextAddressValue( Graphics g )
         {
            int currentMC = microcode[ currentAddress ];
            int currentNextAddress = currentMC & ADDR_MASK;

            if ( currentNextAddress == ADDR_X )
            {
               g.drawString( "XXXX", 165, 303 );
            }
            else
            {
               g.drawString( AssemblyInstruction.toNumberString(
                  currentNextAddress, 2, 4 ), 167, 303 );
            }

         }

/*         public void paintCurrentBTValue( Graphics g )
         {
            int currentMC = microcode[ currentAddress ];
            int currentBT = currentMC & BT_MASK;

            g.drawString( AssemblyInstruction.toNumberString(
               currentBT >> 28, 2, 1 ), 173, 308 );
         }
*/
         public void paintCurrentConditionValue( Graphics g )
         {
            int currentMC = microcode[ currentAddress ];
            int currentCondition = currentMC & COND_MASK;

            if ( currentCondition == COND_X )
            {
               g.drawString( "1", 107, 303 );
            }
            else
            {
               g.drawString( AssemblyInstruction.toNumberString(
                  currentCondition >> 29, 2, 1 ), 107, 303 );
            }

         }

         public void paintIRMapValue( Graphics g )
         {
            g.drawString( AssemblyInstruction.toNumberString(
               irMap, 2, 4 ), 100, 58 );
         }

         public void paintCurrentSignals( Graphics g )
         {
            g.setColor( currentARPC ? Color.red : Color.black );
            g.drawString( "ARPC", 100, 380);      //Micro-OPs

            g.setColor( currentPCDR ? Color.red : Color.black );
            g.drawString("PCDR",135,380);

//            g.setColor( currentARDT ? Color.red : Color.black );
//            g.drawString("ARDT",140,405);

            g.setColor( currentPCIN ? Color.red : Color.black );
            g.drawString("PCIN",100,390);

//            g.setColor( currentPCDT ? Color.red : Color.black );
//            g.drawString("PCDT",140,425);

            g.setColor( currentDRM ? Color.red : Color.black );
            g.drawString("DRM",135,390);

//            g.setColor( currentDRAC ? Color.red : Color.black );
//            g.drawString("DRAC",175,395);

            g.setColor( currentIRDR ? Color.red : Color.black );
            g.drawString("AIDR",135,400);

//            g.setColor( currentRAC ? Color.red : Color.black );
//            g.drawString("RAC",175,415);

//            g.setColor( currentZALU ? Color.red : Color.black );
//            g.drawString("ZALU",175,425);

//            g.setColor( currentTRDR ? Color.red : Color.black );
//            g.drawString("TRDR",175,435);

 //           g.setColor( currentACDR ? Color.red : Color.black );
//            g.drawString("ACDR",100,390);

//            g.setColor( currentACR ? Color.red : Color.black );
//            g.drawString("ACR",216,395);

            g.setColor( currentPLUS ? Color.red : Color.black );
            g.drawString("PLUS",170,380);

//            g.setColor( currentMINU ? Color.red : Color.black );
//            g.drawString("MINU",216,415);

            g.setColor( currentACIN ? Color.red : Color.black );
            g.drawString("ACIN",170,400);

//            g.setColor( currentACZO ? Color.red : Color.black );
//            g.drawString("ACZO",216,435);

            g.setColor( currentAND ? Color.red : Color.black );
            g.drawString("AND",170,390);

//            g.setColor( currentOR ? Color.red : Color.black );
//            g.drawString("OR",252,395);

//            g.setColor( currentXOR ? Color.red : Color.black );
//            g.drawString("XOR",252,405);

//            g.setColor( currentNOT ? Color.red : Color.black );
//            g.drawString("NOT",252,415);

//            g.setColor( currentMDR ? Color.red : Color.black );
//            g.drawString("MDR",252,425);
         }

/*         public void paintConditionMuxSignals( Graphics g )
         {
            g.setColor( hw1Enabled ? Color.red : Color.black );
            g.drawString( "0", 49, 225 );          // 0 on Z_Mux
            g.drawLine( 45, 221, 31, 221 );         // Input 0 on Z_MUX
            g.drawString( "1", 24, 225 );          // 1 on Z_Mux

            g.setColor( zEnabled ? Color.red : Color.black );
            g.drawString( "1", 49, 245 );          // 1 on Z_Mux
            g.drawLine( 45, 241, 31, 241 );         // Input 1 on Z_MUX
            g.drawString( "Z", 24, 245 );          // Z on Z_Mux

            g.setColor( notZEnabled ? Color.red : Color.black );
            g.drawString( "2", 49, 265 );          // 2 on Z_Mux
            g.drawLine( 45, 262, 31, 262 );         // Input 2 on Z_MUX
            g.drawString( "Z", 24, 265 );          // /Z on Z_Mux
            g.drawString( "/", 20, 265 );          // /Z on Z_Mux
         }
*/
         public void paintAddressMuxSignals( Graphics g )
         {
           // g.setColor( currAddrP1Enabled ? Color.red : Color.black );
           // g.drawString( "0", 170, 107 );         // 0 on Addr_MUX

            g.setColor( nextAddrEnabled ? Color.red : Color.black );
            g.drawString( "0", 170, 107 );         // 1 on Addr_MUX

            g.setColor( irMapEnabled ? Color.red : Color.black );
            g.drawString( "1", 110, 107 );         // 2 on Addr_MUX
         }

         public void paintClock( Graphics g )
         {
            g.setColor( clkEnabled ? Color.red : Color.black );
            g.drawString("CLK",93,235);
            g.drawLine(100,225,100,215);       // Clock
            g.drawLine(100,210,97,215);       // Clock
            g.drawLine(100,210,103,215);       // Clock
         }

         public void paintDots( Graphics g )
         {
            g.setColor( Color.red );

            for ( int index = 0; index < currentDotLocation.length;
               index++ )
            {

               if ( currentDotEnabled[ index ] )
               {
                  g.fillRect( currentDotLocation[ index ].x - 3,
                     currentDotLocation[ index ].y - 3, 7, 7 );
               }

            }

         }

         private Image offScreenImage = null;
      };

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -