1
0
Fork 0

Allow negative x and y, no longer draws by block, but by pixel

This commit is contained in:
Pedro de Oliveira 2017-03-25 20:58:09 +00:00
parent fbb34c1b5a
commit 2731ddfe14
2 changed files with 23 additions and 21 deletions

View File

@ -63,6 +63,7 @@ AS = arm-none-eabi-gcc -x assembler-with-cpp
CP = arm-none-eabi-objcopy
AR = arm-none-eabi-ar
SZ = arm-none-eabi-size
GDB = arm-none-eabi-gdb
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
@ -138,7 +139,10 @@ clean:
flash: all
st-flash write $(BUILD_DIR)/$(TARGET).bin 0x8000000
debug: all
$(GDB) --eval-command="tar extended-remote :4242" $(BUILD_DIR)/$(TARGET).elf
#######################################
# dependencies
#######################################

View File

@ -58,38 +58,34 @@ void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1)
}
static int anim = 1;
static int x = 0;
static int x = -64;
void ssd1306_LoadImage(void) {
//memcpy(SSD1306_Buffer, image, 1024);
fastlz_decompress(image, 1024, SSD1306_Buffer, 1024);
}
void ssd1306_DrawSprite(SpriteDef *sprite, int x, int y, int mode) {
void ssd1306_DrawSprite(SpriteDef *sprite, int x, int y) {
int spriteAddr = 0;
int currX, currY = y;
for(int bank = y / 8; bank < sprite->height / 8; bank++) {
int start = (bank * sprite->width) + (bank * sprite->height) + (x);
for(int bank = currY / 8; bank < sprite->height / 8; bank++) {
currX = x;
int start = (bank * sprite->width) + (bank * sprite->height) + (x);
int end = start + sprite->width;
for(int addr = start; addr < end; addr++) {
if (currX >= 0 && currY >= 0 && currX < SSD1306_WIDTH && currY < SSD1306_HEIGHT) {
switch(mode) {
case 0:
SSD1306_Buffer[addr] = sprite->buffer[spriteAddr];
break;
case 1:
SSD1306_Buffer[addr] |= sprite->buffer[spriteAddr];
break;
case 2:
SSD1306_Buffer[addr] &= sprite->buffer[spriteAddr];
break;
case 3:
SSD1306_Buffer[addr] ^= sprite->buffer[spriteAddr];
break;
if (spriteAddr < (sprite->height * sprite->width / 8) ) {
for(int bit = 0; bit < 8; bit++) {
if ((sprite->buffer[spriteAddr] >> bit) & 0x01) {
int16_t newY = bit + currY;
if (currX >= 0 && newY >= 0 && currX < SSD1306_WIDTH && newY < SSD1306_HEIGHT) {
ssd1306_DrawPixel(currX, newY, White);
}
}
}
}
spriteAddr++;
currX++;
}
@ -118,10 +114,12 @@ void ssd1306_Anim(void) {
break;
}
ssd1306_DrawSprite(sprite, x, 0, 1);
ssd1306_DrawSprite(sprite, x, 0);
//ssd1306_DrawSprite(sprite, x, -50, 1);
anim++;
x += 15;
//x += 15;
x += 1;
if (anim == 5) {
anim = 1;