All pastes #1422646 Raw Edit

無題

public cpp v1 · immutable
#1422646 ·published 2009-05-14 13:46 UTC
rendered paste body
#ifndef __CPU_H__#define __CPU_H__#include "definitions.h"#include "firmware.h"#include "thread.h"#include "timer.h"#include <hash_map.h>#include <hash_set.h>#include <queue.h>#include <map.h>#include <pthread.h>extern "C" void* ProcessPipe(void* arg);extern "C" void* Execute(void* arg);class CPU{public:    CPU();    ~CPU();    void start(char *filename);    //memory    void ld(DWORD offset,DWORD Rsrc,DWORD Rdest);    void st(DWORD offset,DWORD Rsrc1,DWORD Rsrc2);    void ldf(DWORD offset,DWORD Rsrc,DWORD Rfdest);    void stf(DWORD offset,DWORD Rsrc1,DWORD Rfsrc2);    void ldt(DWORD offset,DWORD Rsrc1,DWORD Rdest);    void stt(DWORD offset,DWORD Rsrc1,DWORD Rsrc2);    void movfrc(DWORD Rcpu,DWORD Rdest,DWORD Rsrc1);    void movtoc(DWORD Rcpu,DWORD Rsrc2,DWORD Rsrc1);    void aluc(DWORD Rcpu,DWORD Rsrc1);    void ls(DWORD Rsrc,DWORD Rdest,DWORD address);    void lsu(DWORD Rsrc,DWORD Rdest,DWORD address);    void lb(DWORD Rsrc,DWORD Rdest,DWORD address);    void lbu(DWORD Rsrc,DWORD Rdest,DWORD address);    void ss(DWORD offset,DWORD Rsrc1,DWORD Rsrc2);    void sb(DWORD offset,DWORD Rsrc1,DWORD Rsrc2);    //branch    void beq(DWORD Rsrc1, DWORD Rsrc2, DWORD addresse);    void beqsq(DWORD Rsrc1, DWORD Rsrc2, DWORD addresse);    void bge(DWORD Rsrc1, DWORD Rsrc2, DWORD addresse);    void bgesq(DWORD Rsrc1, DWORD Rsrc2, DWORD addresse);    void bhs(DWORD Rsrc1, DWORD Rsrc2, DWORD addresse);    void bhssq(DWORD Rsrc1, DWORD Rsrc2, DWORD addresse);    void blo(DWORD Rsrc1, DWORD Rsrc2, DWORD addresse);    void blosq(DWORD Rsrc1, DWORD Rsrc2, DWORD addresse);    void blt(DWORD Rsrc1, DWORD Rsrc2, DWORD addresse);    void bltsq(DWORD Rsrc1, DWORD Rsrc2, DWORD addresse);    void bne(DWORD Rsrc1, DWORD Rsrc2, DWORD addresse);    void bnesq(DWORD Rsrc1, DWORD Rsrc2, DWORD addresse);    //compute    void add(DWORD Rsrc1, DWORD Rsrc2, DWORD Rdest);    void mstart(DWORD Rsrc2,DWORD Rdest);    void mstep(DWORD Rsrc1, DWORD Rsrc2, DWORD Rdest);    void dstep(DWORD Rsrc1, DWORD Rsrc2, DWORD Rdest);    void sub(DWORD Rsrc1, DWORD Rsrc2, DWORD Rdest);    void subnc(DWORD Rsrc1, DWORD Rsrc2, DWORD Rdest);    void andX(DWORD Rsrc1, DWORD Rsrc2, DWORD Rdest);    void bic(DWORD Rsrc1, DWORD Rsrc2, DWORD Rdest);    void notX(DWORD Rsrc1, DWORD Rdest);    void orX(DWORD Rsrc1, DWORD Rsrc2, DWORD Rdest);    void xorX(DWORD Rsrc1, DWORD Rsrc2, DWORD Rdest);    void mov(DWORD Rsrc1, DWORD Rdest);    void asr(DWORD Rsrc1, DWORD Rdest, DWORD ammount);    void rtlb(DWORD Rsrc1, DWORD Rsrc2, DWORD Rdest);    void rtlcb(DWORD Rsrc1, DWORD Rsrc2, DWORD Rdest);    void sh(DWORD Rsrc1, DWORD Rsrc2, DWORD Rdest,DWORD ammount);    void nop(void);    //compute immediate    void addi(DWORD Rsrc1, DWORD Rdest, DWORD immed);    void jpc(void);    void jpcrs(void);    void jspci(DWORD Rsrc1, DWORD Rdest, DWORD immed);    void movfrs(DWORD Rspecial, DWORD Rdest);    //void movtos(DWORD Rsrc1, DWORD Rspecial);    void movtos(DWORD Rsrc,DWORD Rdest);    void movi(DWORD Rdest, DWORD immed);    void trap(BYTE vector);    void hsc(void);    void returnX(void);    void andi(DWORD,DWORD,DWORD);    //macros    void macro1(DWORD,DWORD,DWORD);    void macro2(DWORD,DWORD);    void macro3(DWORD);    void macro4(DWORD);    void macro5(DWORD);    void macro6(DWORD);    void macro7(DWORD);    void macro8(DWORD);    void macro9(DWORD);    void macroA(DWORD);    void macroB(DWORD);    void macroC(DWORD);    void macroD(void);    DWORD getDWORDAT(DWORD);    void setDWORDAT(DWORD value, DWORD address);    unsigned long  ZeroExtend8to32(unsigned char val8);    unsigned long  SignExtend8to32(unsigned char val8);    unsigned long  ZeroExtend16to32(unsigned short val16);    unsigned long  SignExtend16to32(unsigned short val16);    signed long CalculateValue16(DWORD);    signed long CalculateValue17(DWORD);    BYTE DecodeShiftAmount(WORD wShiftAmount);    type_of_instruction DecodeOpcode(DWORD);    void PrintFromToDWORD(DWORD from,DWORD to);    pipeline pipe;    pthread_t threadpipe,threadexecute;    pthread_mutex_t mutexIF,mutexRF,mutexMEM,mutexWB;    timer t;    DWORD actual,actual2,actual3;    queue<DWORD> func;    map<DWORD,BYTE> memory;    hash_map<DWORD,DWORD> reg;    type_of_instruction type;    struct rom_header Hrom;private:    //Private member properties    Firmware firm;    BYTE rom[SIZE_OF_ROM];    DWORD pointer2header;    //Private member functions    void ReadPos(DWORD*,unsigned char*,DWORD);    void ReadHeader(void);    void Run(void);    void CopyRom2Mem(void);};#endif