Пример #1
0
void convertSave2n64(int savetype,const BYTE*data_in,membuf&data_out,int&size)
{
    if(savetype==st_n64eep4k)
    {
        data_out.resize(st_n64eep4k);
        memset(data_out,0,st_n64eep4k);
        size=Min(size,st_n64eep4k*16);
        neo2n64(data_in,data_out,size);
        size=st_n64eep4k;
    }
    if(savetype==st_n64eep16k)
    {
        data_out.resize(st_n64eep16k);
        memset(data_out,0,st_n64eep16k);
        size=Min(size,st_n64eep16k*16);
        neo2n64(data_in,data_out,size);
        size=st_n64eep16k;
    }
    if(savetype==st_n64sram)
    {
        data_out.resize(st_n64sram);
        memset(data_out,0,st_n64sram);
        size=Min(size,st_n64sram);
        memcpy(data_out,data_in,size);
        wswap((BYTE*)(char*)data_out,size);
        size=st_n64sram;
    }
    if(savetype==st_n64flash)
    {
        data_out.resize(st_n64flash);
        memset(data_out,0,st_n64flash);
        size=Min(size,st_n64flash);
        memcpy(data_out,data_in,size);
        wswap((BYTE*)(char*)data_out,size);
        size=st_n64flash;
    }
}
Пример #2
0
/* create .bmp file from framebuffer data*/
int
GdCaptureScreen(char *path)
{
#if defined(HAVE_FILEIO)
	int	ifd, i, j;
	FILE *	ofp;
	int	cx, cy, extra, bpp, bytespp, ncolors, sizecolortable;
	unsigned long rmask, gmask, bmask;
	unsigned char *cptr;
	unsigned short *sptr;
	unsigned long *lptr;
	BMPHEAD	bmp;
	unsigned char buf[2048*4];

	ofp = fopen(path, "wb");
	if (!ofp)
		return 1;
	ifd = open("/dev/fb0", 0);

	cx = scrdev.xvirtres;
	cy = scrdev.yvirtres;
	bpp = scrdev.bpp;
	bytespp = (bpp+7)/8;

	/* dword right padded*/
	extra = (cx*bytespp) & 3;
	if (extra)
		extra = 4 - extra;
	ncolors = (bpp <= 8)? (1<<bpp): 0;
	/* color table is either palette or 3 longword r/g/b masks*/
	sizecolortable = ncolors? ncolors*4: 3*4;
	if (bpp == 24)
		sizecolortable = 0;	/* special case 24bpp has no table*/

	/* fill out bmp header*/
	memset(&bmp, 0, sizeof(bmp));
	bmp.bfType[0] = 'B';
	bmp.bfType[1] = 'M';
	bmp.bfSize = dwswap(sizeof(bmp) + sizecolortable + (long)(cx+extra)*cy*bytespp);
	bmp.bfOffBits = dwswap(sizeof(bmp) + sizecolortable);
	bmp.BiSize = dwswap(40);
	bmp.BiWidth = dwswap(cx);
	bmp.BiHeight = dwswap(cy);
	bmp.BiPlanes = wswap(1);
	bmp.BiBitCount = wswap(bpp);
	bmp.BiCompression = dwswap((bpp==16 || bpp==32)? BI_BITFIELDS: BI_RGB);
	bmp.BiSizeImage = dwswap((long)(cx+extra)*cy*bytespp);
	bmp.BiClrUsed = dwswap((bpp <= 8)? ncolors: 0);
	/*bmp.BiClrImportant = 0;*/

	/* write header*/
	fwrite(&bmp, sizeof(bmp), 1, ofp);

	/* write colortable*/
	if (sizecolortable) {
		if(bpp <= 8) {
			/* write palette*/
			for(i=0; i<ncolors; i++) {
				putc(gr_palette[i].b, ofp);
				putc(gr_palette[i].g, ofp);
				putc(gr_palette[i].r, ofp);
				putc(0, ofp);
			}
		} else {
			/* write 3 r/g/b masks*/
			switch (gr_pixtype) {
			case MWPF_TRUECOLOR0888:
			default:
				rmask = RMASK888;
				gmask = GMASK888;
				bmask = BMASK888;
				break;
			case MWPF_TRUECOLOR565:
				rmask = RMASK565;
				gmask = GMASK565;
				bmask = BMASK565;
				break;
			case MWPF_TRUECOLOR555:
				rmask = RMASK555;
				gmask = GMASK555;
				bmask = BMASK555;
				break;
			case MWPF_TRUECOLOR332:
				rmask = RMASK332;
				gmask = GMASK332;
				bmask = BMASK332;
				break;
			}
			putdw(rmask, ofp);
			putdw(gmask, ofp);
			putdw(bmask, ofp);
		}
	}

	/* write image data, upside down ;)*/
	for(i=cy-1; i>=0; --i) {
		long base = sizeof(bmp) + sizecolortable + (long)i*cx*bytespp;
		fseek(ofp, base, SEEK_SET);
		read(ifd, buf, cx*bytespp);
		switch (bpp) {
		case 32:
			lptr = (unsigned long *)buf;
			for(j=0; j<cx; ++j)
				putdw(*lptr++, ofp);
			break;
		case 24:
			cptr = (unsigned char *)buf;
			for(j=0; j<cx; ++j) {
				putc(*cptr++, ofp);
				putc(*cptr++, ofp);
				putc(*cptr++, ofp);
			}
			break;
		case 16:
			sptr = (unsigned short *)buf;
			for(j=0; j<cx; ++j)
				putsw(*sptr++, ofp);
			break;
		default:
			cptr = (unsigned char *)buf;
			for(j=0; j<cx; ++j)
				putc(*cptr++, ofp);
			break;
		}
		for(j=0; j<extra; ++j)
			putc(0, ofp);		/* DWORD pad each line*/
	}

	fclose(ofp);
	close(ifd);
#endif /* HAVE_FILEIO*/
	return 0;
}
Пример #3
0
void emac3_write(u32 addr)
{
	u32 value=wswap(dev9Ru32(addr));
	switch(addr)
	{
	case SMAP_R_EMAC3_MODE0_L:
		DEV9_LOG("SMAP: SMAP_R_EMAC3_MODE0 write %x\n", value);
		value = (value & (~SMAP_E3_SOFT_RESET)) | SMAP_E3_TXMAC_IDLE | SMAP_E3_RXMAC_IDLE;
		dev9Ru16(SMAP_R_EMAC3_STA_CTRL_H)|= SMAP_E3_PHY_OP_COMP;
		break;
	case SMAP_R_EMAC3_TxMODE0_L:
		DEV9_LOG("SMAP: SMAP_R_EMAC3_TxMODE0_L write %x\n", value);
		//spams// emu_printf("SMAP: SMAP_R_EMAC3_TxMODE0_L write %x\n", value);
		//Process TX  here ?
		if (!value&SMAP_E3_TX_GNP_0)
			emu_printf("SMAP_R_EMAC3_TxMODE0_L: SMAP_E3_TX_GNP_0 not set\n");

		tx_process();
		value = value& ~SMAP_E3_TX_GNP_0;
		if (value)
			emu_printf("SMAP_R_EMAC3_TxMODE0_L: extra bits set !\n");
		break;

	case SMAP_R_EMAC3_TxMODE1_L:
		emu_printf("SMAP_R_EMAC3_TxMODE1_L 32bit write %x\n", value);
		break;


	case SMAP_R_EMAC3_STA_CTRL_L:
		DEV9_LOG("SMAP: SMAP_R_EMAC3_STA_CTRL write %x\n", value);
		{
			if (value & (SMAP_E3_PHY_READ)) 
			{
				value|= SMAP_E3_PHY_OP_COMP;
				int reg = value & (SMAP_E3_PHY_REG_ADDR_MSK);
				u16 val = dev9.phyregs[reg];
				switch (reg) 
				{
				case SMAP_DsPHYTER_BMSR:
					if (has_link)
						val|= SMAP_PHY_BMSR_LINK | SMAP_PHY_BMSR_ANCP;
					break;
				case SMAP_DsPHYTER_PHYSTS:
					if (has_link)
						val|= SMAP_PHY_STS_LINK |SMAP_PHY_STS_100M | SMAP_PHY_STS_FDX | SMAP_PHY_STS_ANCP;
					break;
				}
				DEV9_LOG("phy_read %d: %x\n", reg, val);
				value=(value&0xFFFF)|(val<<16);
			} 
			if (value & (SMAP_E3_PHY_WRITE)) 
			{
				value|= SMAP_E3_PHY_OP_COMP;
				int reg = value & (SMAP_E3_PHY_REG_ADDR_MSK);
				u16 val = value>>16;
				switch (reg) 
				{
				case SMAP_DsPHYTER_BMCR:
					val&= ~SMAP_PHY_BMCR_RST;
					val|= 0x1;
					break;
				}
				DEV9_LOG("phy_write %d: %x\n", reg, val);
				dev9.phyregs[reg] = val;
			}
		}
		break;
	default:
		DEV9_LOG("SMAP: emac3 write  %x=%x\n",addr, value);
	}
Пример #4
0
				switch (reg) 
				{
				case SMAP_DsPHYTER_BMCR:
					val&= ~SMAP_PHY_BMCR_RST;
					val|= 0x1;
					break;
				}
				DEV9_LOG("phy_write %d: %x\n", reg, val);
				dev9.phyregs[reg] = val;
			}
		}
		break;
	default:
		DEV9_LOG("SMAP: emac3 write  %x=%x\n",addr, value);
	}
	dev9Ru32(addr)=wswap(value);
}
u8 CALLBACK smap_read8(u32 addr)
{
	switch(addr)
	{
	case SMAP_R_TXFIFO_FRAME_CNT:
		printf("SMAP_R_TXFIFO_FRAME_CNT read 8\n");
		break;
	case SMAP_R_RXFIFO_FRAME_CNT:
		printf("SMAP_R_RXFIFO_FRAME_CNT read 8\n");
		break;

	case SMAP_R_BD_MODE:
		return dev9.bd_swap;