/***************************************************************************
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 ®,char *name=NULL);
void traceReg4(REG_4 ®,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. |