Exemplo n.º 1
0
void TraceInMemoryCallback(const wchar_t * Msg)
{
    if (IsTracing)
    {
        DoTrace(L"PAS", L"unk", ::GetCurrentThreadId(), Msg);
    }
}
Exemplo n.º 2
0
	void ExecuteLoop(void)  /* fetch and dispatch loop */
	{     
		register void           (**tab)(void);

		tab=table;

	rep: 
		while(--nInst>=0)    
		{

	#ifdef TRACE 
	    if (pc>tracelo) DoTrace();
	#endif
	    
	    tab[code=RW(pc++)]();
	  }
	
	if (doPoll) dosignal();

	if(extraFlag)
	  {
	    nInst=nInst2;
	    ExceptionProcessing();
	    if(nInst>0) goto rep;
	  }
}
Exemplo n.º 3
0
void DoAssert(const wchar_t * Message, const wchar_t * Filename, uintptr_t LineNumber)
{
    if (IsTracing)
    {
        DoTrace(Filename, L"assert", LineNumber, Message);
    }
    _wassert(Message, Filename, (unsigned int)LineNumber);
}
Exemplo n.º 4
0
void DoTraceFmt(const wchar_t * SourceFile, const wchar_t * Func,
                uintptr_t Line, const wchar_t * AFormat, va_list Args)
{
    DebugAssert(IsTracing);

    UnicodeString Message = FormatV(AFormat, Args);
    DoTrace(SourceFile, Func, Line, Message.c_str());
}
Exemplo n.º 5
0
int AsyncTrace( struct TDebug *obj, int ms )
{
    char    Instr[2] = {0, 0};
    int     ok = TRUE;
    void    *wait;

    if( obj->CurrentThread ) {
        BreakSel = obj->CurrentThread->Cs;
        BreakOffset = obj->CurrentThread->Eip;

        ReadMem( obj->CurrentThread, BreakSel, BreakOffset, Instr, 2 );

        if ( Instr[0] == 0xF && Instr[1] == 0xB ) {
            BreakOffset += 7;
            AddBreak( obj, BreakSel, BreakOffset, TRUE );
            ok = AsyncGo( obj, ms );
            if( ok ) {
                ClearBreak( obj, BreakSel, BreakOffset );
            } else {
                HasBreak = TRUE;
            }
            return( ok );
        } else {
            RdosResetSignal( obj->UserSignal );
            DoTrace( obj );

            wait = RdosWaitTimeout( obj->UserWait, ms );
            if( wait ) {
                return( TRUE );
            }
            else
                return( FALSE );
        }
    }
    return( TRUE );
}
Exemplo n.º 6
0
void Trace( struct TDebug *obj )
{
    char Instr[2] = {0, 0};
    int Sel;
    long Offset;

    if( obj->CurrentThread ) {
        Sel = obj->CurrentThread->Cs;
        Offset = obj->CurrentThread->Eip;

        ReadMem( obj->CurrentThread, Sel, Offset, Instr, 2 );

        if ( Instr[0] == 0xF && Instr[1] == 0xB ) {
            Offset += 7;
            AddBreak( obj, Sel, Offset, TRUE );
            Go( obj );
            ClearBreak( obj, Sel, Offset );
        } else {
            RdosResetSignal( obj->UserSignal );
            DoTrace( obj );
            RdosWaitForever( obj->UserWait );
        }
    }
}
Exemplo n.º 7
0
void DoTraceFmt(const wchar_t * SourceFile, const wchar_t * Func,
                uintptr_t Line, const wchar_t * AFormat, TVarRec * /*Args*/, const int /*Args_Size*/)
{
    DoTrace(SourceFile, Func, Line, AFormat);
}
Exemplo n.º 8
0
	void ExecuteLoop(void)
	{
		static void *instbl[65536];
		static syntab syntbl[65536];
		static char littab[][20]={"","#1","#2","#4","CCR","SR","USP","","D%1d","A%1d","(A%1d)","(A%1d)+","-(A%1d)",
						"$%04x(A%1d)","$%02x(A%1d,%1s%1d)", "$%04x.W", "$%08x.L","$%04x(PC)","$%02x(PC,%1s%1d)" };
	
		static char OpCode[]="\0Invalid\0a_line\0abcd\0add.b\0add.l\0add.w\0adda.l\0adda.w\0addi.b\0addi.l\0addi.w\0addq.b\0addq.l\0addq.w\0addx.b\0addx.l\0addx.w\0and.b\0and.l\0and.w\0andi\0andi.b\0andi.l\0andi.w\0asl\0asl.b\0asl.l\0asl.w\0asr\0asr.b\0asr.l\0asr.w\0bcc.l\0bcc.s\0bcc_BAD\0bccc.s\0bchg\0bchg.s\0bclr\0bclr.s\0bcs.s\0beq.l\0beq.s\0bge.s\0bgt.s\0bhi.s\0ble.s\0bls.s\0blt.s\0bmi.s\0bne.l\0bne.s\0bpl.s\0bra.l\0bra.s\0bset\0bset.s\0bsr\0btst\0btst.s\0bvc.s\0bvs.s\0chk.w\0clr.b\0clr.l\0clr.w\0cmp.b\0cmp.l\0cmp.w\0cmpa.l\0cmpa.w\0cmpi.b\0cmpi.l\0cmpi.w\0cmpm.b\0cmpm.l\0cmpm.w\0dbcc\0dbcs\0dbeq\0dbf\0dbge\0dbgt\0dbhi\0dble\0dbls\0dblt\0dbmi\0dbne\0dbpl\0dbt\0dbvc\0dbvs\0divs.w\0divu.w\0eor.b\0eor.l\0eor.w\0eori\0eori.b\0eori.l\0eori.w\0exg_a\0exg_ad\0exg_d\0ext.l\0ext.w\0f_line\0illegal\0jmp\0jsr\0lea\0link\0lsl\0lsl.b\0lsl.l\0lsl.w\0lsr\0lsr.b\0lsr.l\0lsr.w\0move\0move.b\0move.l\0move.w\0movea.l\0movea.w\0movem.l\0movem.w\0movep.l\0movep.w\0moveq\0muls.w\0mulu.w\0nbcd\0neg.b\0neg.l\0neg.w\0negx.b\0negx.l\0negx.w\0nop\0not.b\0not.l\0not.w\0or.b\0or.l\0or.w\0ori\0ori.b\0ori.l\0ori.w\0pea\0reset\0rol\0rol.b\0rol.l\0rol.w\0ror\0ror.b\0ror.l\0ror.w\0roxl\0roxl.b\0roxl.l\0roxl.w\0roxr\0roxr.b\0roxr.l\0roxr.w\0rte\0rtr\0rts\0sCC\0sbcd\0scc\0scs\0seq\0sf\0sge\0sgt\0shi\0sle\0sls\0slt\0smi\0sne\0spl\0st\0stop\0sub.b\0sub.l\0sub.w\0s ubi.b\0subi.l\0subi.w\0subq.b\0subq.l\0subq.w\0subx.b\0subx.l\0subx.w\0svc\0svs\0swap\0tas\0trap\0trap#0\0trap#1\0trap#2\0trap#3\0trap#4\0trapv\0tst.b\0tst.l\0tst.w\0unlk\0\0";


		register void **itab;


	#if  1 /*MANYREGS*/
		#ifndef G_reg
			#ifdef NEW_AREG
				w32*  reg=g_reg;
			#else
				w32 *aReg=reg+8;
				w32* reg=aReg-8;
			#endif
		#endif
		w32 (**GetEA)(ashort) /*REGP1*/ = iexl_GetEA;
		rw8  (**GetFromEA_b)(void) = iexl_GetFromEA_b;
		rw16 (**GetFromEA_w)(void) = iexl_GetFromEA_w;
		rw32 (**GetFromEA_l)(void) = iexl_GetFromEA_l;
		void (**PutToEA_b)(ashort,aw8) /*REGP2*/ = iexl_PutToEA_b;
		void (**PutToEA_w)(ashort,aw16) /*REGP2*/ = iexl_PutToEA_w;
		void (**PutToEA_l)(ashort,aw32) /*REGP2*/ = iexl_PutToEA_l;
		Cond (**ConditionTrue)(void) = ll_ConditionTrue;

		w32 *theROM=ll_theROM;
	#else
		#define GetFromEA_b iexl_GetFromEA_b
		#define GetFromEA_w iexl_GetFromEA_w
		#define GetFromEA_l iexl_GetFromEA_l
		#define PutToEA_b iexl_PutToEA_b
		#define PutToEA_w iexl_PutToEA_w
		#define PutToEA_l iexl_PutToEA_l
	#endif

	code=0;   /* loop possibly sets only 16 bits ! */

	itab=instbl;
	
	#define IE_XL

	goto run_it; 
	
	/*#include "iexl_general.h"*/

	#include "instructions_ao.c"    /* include instructions */
	#include "instructions_pz.c"
	/*#include "iexl_ug.h"*/

	run_it:
	if (unlikely(!instbl_valid))
	  {
	#define IE_XL_II 
	#include "Init.c"
	    /*XSetTable(instbl);*/
	    instbl_valid=1;
	  }
	theROM=ll_theROM;
	ENTER_IEXL;                  /* load vars into regs etc .*/

	nextI: 
	if (likely(--nInst>=0))
	  {
	#ifdef TRACE
	    if (pc>=tracelo) DoTrace();
	#endif
	    /*DbgInfo();*/
	    
	#if defined(ASSGN_486)
	    goto *itab[ASSGN_486()];
	#else
	    goto *itab[ASSGN_CODE(RW(pc++))];
	#endif
	  } 
	
	#if 0
	if (regEmux)
	  {
	    nInst= (extraFlag ? 0 : reInst);     
	    vm_regemu();
 
	    goto nextI;
	  }
	#endif 

	if (doPoll) dosignal();

	if(extraFlag)
	  {
	    nInst=nInst2;
	    ExceptionProcessing();
	    if(nInst>0) goto nextI;
	  }
}