+static inline void DrawSpriteBlock(uint32_t & sprnum, uint16_t x, uint16_t y, uint16_t xStart, uint16_t xEnd, int16_t xInc)
+{
+ extern uint8_t spr_rom[];
+// uint32_t sc_addr;
+
+ for(uint16_t sy=0; sy<16; sy++)
+ {
+// for(uint16_t sx=0; sx<16; sx+=2)
+ for(uint16_t sx=xStart; sx<xEnd; sx+=xInc)
+ {
+ uint8_t b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F;
+ uint16_t spy = y + sy, spx = x + sx; // Need to optimize this clipping! [eh?]
+
+ // This handles negative values, by casting as unsigned
+ uint32_t sc_addr = ((spy >= 224) || (spx >= 288) ? 0x13FFE : spx + (spy * 288));
+
+ if (b1 != 15)
+ my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it
+
+ sc_addr++;
+
+ if (b2 != 15)
+ my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it
+ }
+ }
+}
+
+
+static inline void DrawSpriteBlock2(uint32_t & sprnum, uint16_t x, uint16_t y, uint16_t xStart, uint16_t xEnd, int16_t xInc)
+{
+ extern uint8_t spr_rom[];
+// uint32_t sc_addr;
+
+ for(uint16_t sy=0; sy<16; sy++)
+ {
+// for(uint16_t sx=0; sx<16; sx+=2)
+ for(uint16_t sx=xStart; sx!=xEnd; sx+=xInc)
+ {
+ uint8_t b1 = spr_rom[sprnum] >> 4, b2 = spr_rom[sprnum++] & 0x0F;
+ uint16_t spy = y + sy, spx = x + sx; // Need to optimize this clipping! [eh?]
+
+ // This handles negative values, by casting as unsigned
+ uint32_t sc_addr = ((spy >= 224) || (spx >= 288) ? 0x13FFE : spx + (spy * 288));
+
+ if (b2 != 15)
+ my_scr[sc_addr] = scolor[spr_color_index][b2]; // Store it
+
+ sc_addr++;
+
+ if (b1 != 15)
+ my_scr[sc_addr] = scolor[spr_color_index][b1]; // Store it
+ }
+ }
+}
+
+