Пример #1
0
void DebugStep(void)
{
	int cnt = 4;

	do
	{
		if (cpuClk < MAX_FRAME_TACTS)
		{
			CpuStep();
			if (cpuClk < INT_LENGTH) CpuInt();
		}
		else
		{
			lastDevClk = devClk;
			cpuClk -= MAX_FRAME_TACTS;
			devClk = cpuClk;

			InitActClk();
		}

		cnt--;
	} while (z80ex_last_op_type(cpu) && cnt>0);
}
Пример #2
0
// main debugger loop
int bf_debugger( Emulator_t *em )
{
    Emulator_t *dem = em;

    char buf[256];
    int lret = 0;
    int broke;
    int i;

    bfid_brkp_t *temp;
    bfid_cmd_hook_t *hook;

    if ( !bfid_initialized )
        bfid_init( );

    dem->Debugging = 1;
    interrupted = 1;
    signal( SIGINT, (__sighandler_t)debug_signal );

    printf( "[>] Unnamed NES debugger v0.01\n" );
    while ( dem->Debugging ) {
        if ( interrupted ) {
            if ( lret )
                printf( "[%x] ", lret & 0xff );
            else
                printf( "[ ] " );

            printf( "> " );

            fgets( buf, 256, stdin );
            if ( strlen( buf ) < 2 )
                continue;

            if (( lret = bfid_execcmd( dem, buf )) < 0 ) {
                printf( "Unknown command.\n" );
                continue;
            }

            sprintf( buf, "%u\0", dem->Cpus[0].pCounter );
            set_variable( "ip", buf );

            sprintf( buf, "%u\0", dem->Cpus[0].sPointer );
            set_variable( "ptr", buf );

        } else {

            for ( i = 0; i < dem->cpuNo; i++ ) {
                CpuStep( &dem->Cpus[i] );

                // Check for breakpoints on the cpu
                for ( temp = brkp_list; temp; temp = temp->next ) {
                    broke = 0;
                    if ( temp->type == BRK_IP && temp->val == dem->Cpus[i].pCounter ) {
                        interrupted = broke = 1;

                    } else if ( temp->type == BRK_MEM && temp->val == dem->Cpus[i].sPointer ) {
                        interrupted = broke = 1;

                    } else if ( 	temp->type == BRK_INSTR &&
                                    //temp->val == dem->Cpus[i].memory[ dem->Cpus[i].pCounter ]){
                                    temp->val == ReadByte( dem->Cpus[i].memory, dem->Cpus[i].pCounter )) {

                        interrupted = broke = 1;
                    }

                    if ( broke ) {
                        sprintf( buf, "%u\0", dem->Cpus[i].pCounter );
                        set_variable( "ip", buf );

                        sprintf( buf, "%u\0", dem->Cpus[i].sPointer );
                        set_variable( "ptr", buf );

                        if ( 	get_variable( "quiet" ) &&
                                strcmp( get_variable( "quiet" ), "true" )) {
                            printf( "[ ] cpu%d: breakpoint %d\n", i, temp->i );
                        }

                        for ( hook = temp->hooks; hook; hook = hook->next ) {
                            if ( bfid_execcmd( dem, hook->cmd ) < 0 )
                                printf( "[ ] Unknown hook command: \"%s\"\n", hook->cmd );
                        }
                    }
                }
            }
        }
    }

    return 0;
}
Пример #3
0
void Render(void)
{
	static int sn = 0;

	if (params.antiFlicker)
	{
		renderSurf = scrSurf[sn];
		sn = 1 - sn;
	} else renderSurf = screen;

	if ((drawFrame || isAvgImageWrited /* isLongImageWrited */) && SDL_MUSTLOCK(renderSurf))
	{
		if (SDL_LockSurface(renderSurf) < 0)
		{
			printf("Can't lock surface\n");
			return;
		}
	}

	renderPitch = renderSurf->pitch / 4;

	if (dev_extport.Is16Colors()) renderPtr = Render16c;
	else if (dev_extport.IsMulticolor()) renderPtr = RenderMulticolor;
//	else if (dev_extport.Is512x192()) renderPtr = Render512x192;
//	else if (dev_extport.Is384x304()) renderPtr = Render384x304;
	else renderPtr = RenderSpeccy;

	InitActClk();
	prevRenderClk = 0;

	while (cpuClk < INT_LENGTH)
	{
		CpuStep();
		CpuInt();
	}

	if (drawFrame || isAvgImageWrited /* isLongImageWrited */)
	{
		while (cpuClk < MAX_FRAME_TACTS)
		{
			CpuStep();
			renderPtr(cpuClk);
		}
	}
	else
	{
		while (cpuClk < MAX_FRAME_TACTS) {
			CpuStep();
		}
	}

	renderPtr = NULL;
	lastDevClk = devClk;
	cpuClk -= MAX_FRAME_TACTS;
	devClk = cpuClk;

	if ((drawFrame || isAvgImageWrited /* isLongImageWrited */) && SDL_MUSTLOCK(renderSurf)) SDL_UnlockSurface(renderSurf);
	if (params.antiFlicker && (drawFrame || isAvgImageWrited /* isLongImageWrited */)) AntiFlicker(renderSurf, scrSurf[sn]);

	// if (isLongImageWrited)
	// {
	//	int * src = (int *)screen->pixels + (PITCH * (32 + longImagePos)) + 32;
	//
	//	for (int i = 256; i--;)
	//	{
	//		unsigned int c = *src;
	//		int r = GETR(c);
	//		int g = GETG(c);
	//		int b = GETB(c);
	//
	//		longImageFile.PutBYTE(r);
	//		longImageFile.PutBYTE(g);
	//		longImageFile.PutBYTE(b);
	//
	//		*(src++) = DRGB(255 - r, 255 - g, 255 - b);
	//	}
	//
	//	longImageHeight++;
	//	longImagePos = (longImagePos + 1) % 192;
	// }

	if (isAvgImageWrited)
	{
		int * src = (int *)screen->pixels;
		long * dst = avgImageBuffer;

		for (int i = HEIGHT; i--;)
		{
			int * line = src;

			for (int j = WIDTH; j--;)
			{
				unsigned int c = *(line++);

				*(dst++) += (long)GETR(c);
				*(dst++) += (long)GETG(c);
				*(dst++) += (long)GETB(c);
			}

			src += PITCH;
		}

		// avgImageFrames++;
	}
}