Exemplo n.º 1
0
void Sprites::Arm(ULO spriteNo)
{
    // Actually this is kind of wrong since each sprite serialises independently
    bool is16Color = Is16Color(spriteNo);
    if (is16Color && (spriteNo & 1) == 0) // Only arm the odd sprite
    {
        Arm(spriteNo + 1);
        SpriteState[spriteNo].armed = false;
        return;
    }
    SpriteState[spriteNo].armed = true;
    SpriteState[spriteNo].x_cylinder = SpriteState[spriteNo].x;
    SpriteState[spriteNo].pixels_output = 0;
    SpriteState[spriteNo].dat_hold[0].w = SpriteState[spriteNo].dat[0];
    SpriteState[spriteNo].dat_hold[1].w = SpriteState[spriteNo].dat[1];
    if (is16Color)
    {
        SpriteState[spriteNo].dat_hold[2].w = SpriteState[spriteNo - 1].dat[0];
        SpriteState[spriteNo].dat_hold[3].w = SpriteState[spriteNo - 1].dat[1];
        Decode16(spriteNo);
    }
    else
    {
        Decode4(spriteNo);
    }
}
Exemplo n.º 2
0
static int DecodeLength(void) {
	int length;
    length = Decode16(buf);
	if(debug>0)
		fprintf(stderr," -> markerlength = %d\n",length);
    SKIP(2);
	return length;
}
Exemplo n.º 3
0
void DecodeSOF(void) {
	int length; int i;
    length = DecodeLength();
    imgh = Decode16(buf+1);
    imgw = Decode16(buf+3);
    comp = buf[5];

	if(comp*3+8 != length) {
		if(debug>-1)
			fprintf(stderr,"SOF marker length mismatch\n");
	} else {
		for(i=0; i<__MIN(comp,4); i++) {
			compid[i] = *(buf+6+i*3); // -2 bytes for length field
		}
	}

    SKIP(length-2);
}