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); } }
static int DecodeLength(void) { int length; length = Decode16(buf); if(debug>0) fprintf(stderr," -> markerlength = %d\n",length); SKIP(2); return length; }
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); }