Source: mipsim.h


Annotated List
Files
Globals
Hierarchy
Index
/***************************************************************************
                          mipsim.h  -  description
                             -------------------
    begin                : mié nov 22 06:36:10 CET 2000
    copyright            : (C) 2000 by Jose Maria Requena Lopez
    email                : jmrequena@larural.es
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef MIPSIM_H
#define MIPSIM_H

//////// Includes de la libreria QT

#include <qstring.h>
#include <qpopupmenu.h>
#include <qmainwindow.h>
#include <qaccel.h>
#include <qmenubar.h>
#include <qtoolbar.h>
#include <qpixmap.h>
#include <qtoolbutton.h>
#include <qapp.h>
#include <qstatusbar.h>
#include <qwhatsthis.h>
#include <qmsgbox.h>
#include <qfiledialog.h>
#include <qprinter.h>
#include <qpainter.h>

//Includes del proyecto


#include <string.h>
#include "mipsimview.h"
#include "mipsimdoc.h"
#include "resource.h"
#include "dlg.h"
#include "mipscpu.h"


//Macros

#define RAM_DELAY 8					//Retardo de la RAM
#define REG_DELAY 10					//Retardo del archivo de registros

#define TRACE_DATA_MEM	0		//"Tracear" la memoria de datos
#define TRACE_INS_MEM		1   //"Tracear" la memoria de instrucciones
#define WHOLE_MEM			 64   //"Tracear" toda la memoria			
#define CICLE						6		//Tiempo de ciclo


class Mipsim : public QMainWindow
{
  Q_OBJECT
  
  public:

    Mipsim(int);										//Constructor
    ~Mipsim();                  //Destructor
    void initMenuBar();					//Iniciar la barra de menus
    void initStatusBar();				//Iniciar la barra de estado
    void initDoc();							//Iniciar el documento actual
    void initView();						//Iniciar la vista principal
    bool queryExit();						//Comprobaciones de cierre de ventana
    void connectDlgWidgets();		//Conectar los widgets a sus event handler
		Dlg  *dlg;									//Dialogo principal de la aplicacion
		bool running;								//Cierto si la simulacion completa ha comenzado
    bool runningStep;						//Cierto si la simulacion paso a paso ha comenzado
		double time;								//Tiempo que duro la simulacion
		WIRE codeLines[6];					//Direccion de la instruccion de escape
		int nIter;									//Numero de iteraciones
		bool logging;								//Indica si se esta creano un registro
  
  public slots:
  

    void statusCallback(int id_);  //Manejador del mensaje de la barra de estado
    void slotFileOpen();					 //Manejador de la opcion de menu "Abrir"
    void slotFileClose();          //Manejador de la opcion de menu "Cerrar"
    void slotFileQuit();					 //Manejador de la opcion de menu "Salir"
    void slotHelpAbout();					 //Manejador de la opcion de menu "Acerca de.."
		void slotLog();								 //Manejador de la opcion crear registro
    void slotStatusHelpMsg(const QString &text);
    void init();                	 //Manejador del evento iniciar simulacion
    void terminate();							 //Manejador del evento terminar simulacion
    void reinitiate();						 //Manejador del evento reiniciar simulacion
    void nextOp();								 //Manejador del evento siguiente instruccion	

  private:

     MipsimView *view;					//La vista(ventana) principal
     MipsimDoc *doc;						//Documento actual
     QPopupMenu *fileMenu;			//Menu "Archivo"
		 QPopupMenu *helpMenu;			//Menu "Ayuda"	
		 QPopupMenu	*optionsMenu;   //Menu opciones

     MipsCPU     *cpu;							//Clase del simulador de la CPU		
		 SRAM_64x32  insMem;  	//Memoria de instrucciones
     SRAM_64x32	 dataMem; 	//Memoria de datos	
		 WIRE 			 clock;	

		 void  loadProgram();				  //Carga en memoria el programa
		 void  loadMemory();					//Carga la memoria de datos
                                  //Transforma una direccion en decimal a binario en WIRE[6]
		 void  getBinAddr(WIRE binaddr[6],WIRE & bin);
		 void  getBinData(WIRE *bindata,int num,int size);	

     void  reset();							  //Reseta la memoria(instrucciones , datos y registros)
		 void  resetInsMem();			    //Restea la memoria de instrucciones
		 void  resetDataMem();				//Resetea la memoria de datos	
     void  resetRegs();					  //Resetea el archivo de registros
		 void  resetSegRegs();			  //Resetea los registros de segmentacion incluyendo las extensiones
																	//de segmentacion
		 void  setSegRegs();

     void  print();               //Imprime la memoria de instrucciones,de datos y el archivo de registros
		 void  printInsMem();        	//Imprime el contenido de la memoria de instrucciones
		 void  printDataMem();				//Imprime el contenido de la memoria de datos	
		 void  printRegs();						//Imprime el archivo de registros
	   void  printSegRegs();			  //Imprime el PC y las extensiones de los registros de segmentacion
			
		
		
		 void  doCompleteSimulation();//Realiza la simulacion completa,todas las instrucciones
		 void  doStepSimulation();		//Realiza la simulacion paso a paso	

		 ///Funciones de	depuracion

		 void  traceBus(WIRE *bus,int size=32,char *name=NULL);
		 void  traceBus(FILE* flog,WIRE *bus,int size=32,char *name=NULL); 	
		 void  traceMem(int,int);
		 void  traceRegsFile(char *name=NULL);
		 void  traceReg32(REG_32 & reg,char *name=NULL);
 		 void  traceReg16(REG_16 & reg,char *name=NULL);
		 void  traceReg8(REG_8 &reg,char *name=NULL);
		 void  traceReg4(REG_4 &reg,char *name=NULL);
		
		 void  traceControlSignal(WIRE &,int *);	//Presenta el diagrama de cambios por ciclo
																			  //de las señales de control,de sus buses asociados
																				//y de las extensiones de los registros
																				//de segmentacion que las guardan

		 void log(WIRE,WIRE,int,FILE *);

};
#endif 


Generated by: root@localhost.localdomain on Sat Dec 2 02:26:22 200.