OpenCores
URL https://opencores.org/ocsvn/z3/z3/trunk

Subversion Repositories z3

[/] [z3/] [trunk/] [utils/] [screen.c] - Rev 2

Compare with Previous | Blame | View Log

#include "SDL.h"
#include <stdio.h>
 
unsigned short myPixels[320*240];
 
int hex2num(char c)
{
	if (c>='0' && c<='9')
		return c-'0';
	if (c>='a' && c<='f')
		return c-'a'+10;
	if (c>='A' && c<='F')
		return c-'A'+10;
	printf("Bad hex:%c\n", c);
	return 0;
}
 
int main(int argc, char* argv[])
{
	FILE *f;
    SDL_Window *window;
	SDL_Renderer *ren;
	SDL_Texture *tex;
	unsigned short curReg=0;
	unsigned short curData=0;
	int curRecv=0;
	int curX=0;
	int curY=0;
	int curIdx=0;
	if (argc!=2)
	{
		printf("Usage: screen.out simulation.log\n");
        return 1;
	}
	f=fopen(argv[1],"r");
	if (!f)
	{
		printf("Couldn't open %s\n", argv[1]);
        return 1;
	}
	while (1)
	{
		char line[1024];
		char *start;
		if (!fgets(line, sizeof(line)-1, f))
		{
			break;
		}
		start=strchr(line, 'P');
		if (start && start[1]=='E' && start[2]==':')
		{
			int lcdWR=start[3]-'0';
			int lcdCS=start[4]-'0';
			int lcdReset=start[6]-'0';
			if (lcdCS==0 && lcdReset==1 && lcdWR==0)
			{
				int lcdRS=start[5]-'0';
				char *data=strchr(start, 'D');
				unsigned char d;
				if (data && data[1]==':')
				{
					d=(hex2num(data[2])<<4)|hex2num(data[3]);
				}
				if (lcdRS==0)
				{
					if (curRecv>=2)
						curRecv=0;
					curRecv++;
					curReg<<=8;
					curReg|=d;
				}
				else
				{
					curRecv++;
					curData<<=8;
					curData|=d;
					if (curRecv>=4 && !(curRecv&1))
					{
						if (curReg==0x22)
						{
							myPixels[curIdx%(320*240)]=curData;
							curIdx++;
						}
						else if (curReg==0x20)
						{
							curX=curData;
							curIdx=curY*240+curX;
						}
						else if (curReg==0x21)
						{
							curY=curData;
							curIdx=curY*240+curX;
						}
					}
				}
			}
		}
	}
    SDL_Init(SDL_INIT_VIDEO);
    window = SDL_CreateWindow("TFTLCD",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,240,320,SDL_WINDOW_SHOWN);
    if (window == NULL)
	{
        printf("Could not create window: %s\n", SDL_GetError());
        return 1;
    }
	ren = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
	if (ren == NULL)
	{
        printf("Could not create renderer: %s\n", SDL_GetError());
		return 1;
	}
	tex = SDL_CreateTexture(ren, SDL_PIXELFORMAT_RGB565, SDL_TEXTUREACCESS_STREAMING, 240, 320);
	if (tex == NULL)
	{
        printf("Could not create texture: %s\n", SDL_GetError());
		return 1;
	}
	SDL_UpdateTexture(tex, NULL, myPixels, 240*sizeof(myPixels[0]));
	SDL_RenderClear(ren);
	SDL_RenderCopy(ren, tex, NULL, NULL);
	SDL_RenderPresent(ren);
    SDL_Delay(10000);
	SDL_DestroyTexture(tex);
	SDL_DestroyRenderer(ren);
	SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.