Exemple #1
0
int PicoCdLoadStateGfx(void *file)
{
	int ver, len, found = 0;
	char buff[8];

	g_read_offs = 0;
	CHECKED_READ(8, buff);
	if (strncmp(buff, "PicoSMCD", 8)) R_ERROR_RETURN("bad header");
	CHECKED_READ(4, &ver);

	while (!areaEof(file) && found < 4)
	{
		CHECKED_READ(1, buff);
		CHECKED_READ(4, &len);
		if (len < 0 || len > 1024*512) R_ERROR_RETURN("bad length");
		if (buff[0] > CHUNK_FM && !(PicoMCD & 1)) R_ERROR_RETURN("cd chunk in non CD state?");

		switch (buff[0])
		{
			case CHUNK_VRAM:  CHECKED_READ_BUFF(Pico.vram);  found++; break;
			case CHUNK_CRAM:  CHECKED_READ_BUFF(Pico.cram);  found++; break;
			case CHUNK_VSRAM: CHECKED_READ_BUFF(Pico.vsram); found++; break;
			case CHUNK_VIDEO: CHECKED_READ_BUFF(Pico.video); found++; break;
			default:
				areaSeek(file, len, SEEK_CUR);
				break;
		}
	}

	return 0;
}
Exemple #2
0
static int read_security_type(tSDL_vnc *vnc) {
    if (vnc->versionMinor < 7) {
        // Read security type (simple)
        CHECKED_READ(vnc, vnc->buffer, 4, "security type");
        vnc->security_type=vnc->buffer[3];
        DBMESSAGE("Security type (read): %i\n", vnc->security_type);
        return 1;
    }

    // Addition for RFB 003 008

    CHECKED_READ(vnc, vnc->buffer, 1, "security type");

    // Security Type List! Receive number of supported Security Types
    int nSecTypes = vnc->buffer[0];
    if (nSecTypes == 0) {
        DBERROR("Server offered an empty list of security types.\n");
        return 0;
    }
        
    // Receive Security Type List (Buffer overflow possible!)
    int result = Recv(vnc->socket,vnc->buffer,nSecTypes,0);
        
    // Find supported one...
    vnc->security_type = 0;
    int i;
    for (i = 0; i < result; i++) {
        vnc->security_type = vnc->buffer[i];
        // Break if supported type (currently 1 or 2) found
        if ((vnc->security_type == 1) || (vnc->security_type == 2)) break;
    }
    
    // Select it
    DBMESSAGE("Security type (select): %i\n", vnc->security_type);
    vnc->buffer[0] = vnc->security_type;
        
    result = send(vnc->socket,vnc->buffer,1,0);
    if (result != 1) {
        DBERROR("Write error on security type selection.\n");
        return 0;
    }

    return 1;
}
Exemple #3
0
/* FIXME: Is this valid when we never request a non-truecolor display? */
static int HandleServerMessage_colormap(tSDL_vnc * vnc)
{
	tSDL_vnc_serverColormap serverColormap;
    DBMESSAGE("Message: colormap\n");
    // Read data, but ignore it
    CHECKED_READ(vnc, &serverColormap, 5, "server colormap");

    serverColormap.first=swap_16(serverColormap.first);
    serverColormap.number=swap_16(serverColormap.number);

    DBMESSAGE("Server colormap first color: %u\n",serverColormap.first);
    DBMESSAGE("Server colormap number: %u\n",serverColormap.number);

    while (serverColormap.number>0) {
        CHECKED_READ(vnc, &vnc->buffer, 6, "server colormap color");
        DBMESSAGE("Got color %u.\n",serverColormap.first);
        serverColormap.first++;
        serverColormap.number--;
    }
    return 1;
}
Exemple #4
0
int read_raw(tSDL_vnc * vnc, tSDL_vnc_rect rect) {
    SDL_Rect trec;
    vnc_to_sdl_rect(&rect, &trec);
    SDL_LockMutex(vnc->mutex);
    SDL_LockSurface(vnc->framebuffer);
    
    uint32_t pitch = vnc->framebuffer->pitch/4;
    uint32_t * dest = (uint32_t *)vnc->framebuffer->pixels + (rect.y * pitch) + rect.x;
    uint32_t len = rect.width * rect.height * 4;

    DBMESSAGE("Reading %ld bytes straight into buffer", len);
    CHECKED_READ(vnc, dest, len, "framebuffer");

    GrowUpdateRegion(vnc,&trec);
    SDL_UnlockSurface(vnc->framebuffer);
    SDL_UnlockMutex(vnc->mutex);
    return 1;
}
Exemple #5
0
PICO_INTERNAL int PicoCdLoadState(void *file)
{
	unsigned char buff[0x60];
	int ver, len;

	g_read_offs = 0;
	CHECKED_READ(8, buff);
	if (strncmp((char *)buff, "PicoSMCD", 8)) R_ERROR_RETURN("bad header");
	CHECKED_READ(4, &ver);

	while (!areaEof(file))
	{
		CHECKED_READ(1, buff);
		CHECKED_READ(4, &len);
		if (len < 0 || len > 1024*512) R_ERROR_RETURN("bad length");
		if (buff[0] > CHUNK_FM && !(PicoMCD & 1)) R_ERROR_RETURN("cd chunk in non CD state?");

		switch (buff[0])
		{
			case CHUNK_M68K:
				CHECKED_READ_BUFF(buff);
				PicoAreaUnpackCpu(buff, 0);
				break;

			case CHUNK_Z80:
				CHECKED_READ_BUFF(buff);
				/*z80_unpack(buff);*/
				break;

			case CHUNK_RAM:   CHECKED_READ_BUFF(Pico.ram); break;
			case CHUNK_VRAM:  CHECKED_READ_BUFF(Pico.vram); break;
			case CHUNK_ZRAM:  CHECKED_READ_BUFF(Pico.zram); break;
			case CHUNK_CRAM:  CHECKED_READ_BUFF(Pico.cram); break;
			case CHUNK_VSRAM: CHECKED_READ_BUFF(Pico.vsram); break;
			case CHUNK_MISC:  CHECKED_READ_BUFF(Pico.m); break;
			case CHUNK_VIDEO: CHECKED_READ_BUFF(Pico.video); break;

			// cd stuff
			case CHUNK_S68K:
				CHECKED_READ_BUFF(buff);
				PicoAreaUnpackCpu(buff, 1);
				break;

			case CHUNK_PRG_RAM:	CHECKED_READ_BUFF(Pico_mcd->prg_ram); break;
			case CHUNK_WORD_RAM:	CHECKED_READ_BUFF(Pico_mcd->word_ram2M); break;
			case CHUNK_PCM_RAM:	CHECKED_READ_BUFF(Pico_mcd->pcm_ram); break;
			case CHUNK_BRAM:	CHECKED_READ_BUFF(Pico_mcd->bram); break;
			case CHUNK_GA_REGS:	CHECKED_READ_BUFF(Pico_mcd->s68k_regs); break;
			case CHUNK_PCM:		CHECKED_READ_BUFF(Pico_mcd->pcm); break;
			case CHUNK_CDD:		CHECKED_READ_BUFF(Pico_mcd->cdd); break;
			case CHUNK_CDC:		CHECKED_READ_BUFF(Pico_mcd->cdc); break;
			case CHUNK_SCD:		CHECKED_READ_BUFF(Pico_mcd->scd); break;
			case CHUNK_RC:		CHECKED_READ_BUFF(Pico_mcd->rot_comp); break;
			case CHUNK_MISC_CD:	CHECKED_READ_BUFF(Pico_mcd->m); break;

			default:
				elprintf(EL_STATUS, "PicoCdLoadState: skipping unknown chunk %i of size %i\n", buff[0], len);
				areaSeek(file, len, SEEK_CUR);
				break;
		}
	}

	/* after load events */
	if (Pico_mcd->s68k_regs[3]&4) // 1M mode?
		wram_2M_to_1M(Pico_mcd->word_ram2M);
	PicoMemResetCD(Pico_mcd->s68k_regs[3]);
#ifdef _ASM_CD_MEMORY_C
	if (Pico_mcd->s68k_regs[3]&4)
		PicoMemResetCDdecode(Pico_mcd->s68k_regs[3]);
#endif
	/*if (Pico_mcd->m.audio_track > 0 && Pico_mcd->m.audio_track < Pico_mcd->TOC.Last_Track)
		mp3_start_play(Pico_mcd->TOC.Tracks[Pico_mcd->m.audio_track].F, Pico_mcd->m.audio_offset);*/
	// restore hint vector
        *(unsigned short *)(Pico_mcd->bios + 0x72) = Pico_mcd->m.hint_vector;

	return 0;
}
void BinaryFile::ReadRawData(void* const data, const unsigned length)
{
    CHECKED_READ(libendian::read((char*)data, length, file));
}
unsigned char BinaryFile::ReadUnsignedChar()
{
    unsigned char i;
    CHECKED_READ(libendian::read(&i, 1, file));
    return i;
}
unsigned short BinaryFile::ReadUnsignedShort()
{
    uint16_t i;
    CHECKED_READ(libendian::le_read_us(&i, file));
    return i;
}
unsigned BinaryFile::ReadUnsignedInt()
{
    uint32_t i;
    CHECKED_READ(libendian::le_read_ui(&i, file));
    return i;
}
int BinaryFile::ReadSignedInt()
{
    int32_t i;
    CHECKED_READ(libendian::le_read_i(&i, file));
    return i;
}