void sp(uint8_t x, uint8_t y, uint8_t color)
{
- if (color==0) screen_buffer[(x/8) + (y*hres_bytes)] &= ~0x80 >> (x&7);
- else if (color==1) screen_buffer[(x/8) + (y*hres_bytes)] |= 0x80 >> (x&7);
- else screen_buffer[(x/8) + (y*hres_bytes)] ^= 0x80 >> (x&7);
+ if (color==0) screen_buffer[(x/8) + (y*hres_bytes)] &= ~0x80 >> (x&7);
+ else if (color==1) screen_buffer[(x/8) + (y*hres_bytes)] |= 0x80 >> (x&7);
+ else screen_buffer[(x/8) + (y*hres_bytes)] ^= 0x80 >> (x&7);
}
void set_pixel(uint8_t x, uint8_t y, uint8_t color)
{
- if (x >= hres_bytes*8 || y >= VRES)
- return;
- sp(x,y,color);
+ if (x >= hres_bytes*8 || y >= VRES)
+ return;
+ sp(x,y,color);
}
void fill(uint8_t color)
{
- switch(color) {
- case c_BLACK:
- for (int i = 0; i < (hres_bytes*VRES); i++)
- screen_buffer[i] = 0;
- break;
- case c_WHITE:
- for (int i = 0; i < (hres_bytes*VRES); i++)
- screen_buffer[i] = 0xFF;
- break;
- case c_INVERT:
- for (int i = 0; i < (hres_bytes*VRES); i++)
- screen_buffer[i] = ~screen_buffer[i];
- break;
- }
+ switch(color) {
+ case c_BLACK:
+ for (int i = 0; i < (hres_bytes*VRES); i++)
+ screen_buffer[i] = 0;
+ break;
+ case c_WHITE:
+ for (int i = 0; i < (hres_bytes*VRES); i++)
+ screen_buffer[i] = 0xFF;
+ break;
+ case c_INVERT:
+ for (int i = 0; i < (hres_bytes*VRES); i++)
+ screen_buffer[i] = ~screen_buffer[i];
+ break;
+ }
}
void draw_line(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t c)
{
- if (x0 > hres_bytes*8 || y0 > VRES || x1 > hres_bytes*8 || y1 > VRES)
- return;
+ if (x0 > hres_bytes*8 || y0 > VRES || x1 > hres_bytes*8 || y1 > VRES)
+ return;
int dx, dy, sx, sy, err, p;
while (1)
{
sp(x0, y0, c);
- if ( ( x0 == x1 ) && ( y0 == y1 ) ) return;
+ if ( ( x0 == x1 ) && ( y0 == y1 ) ) return;
p = 2 * err;
if ( p > -dy )
{
void _draw_circle(uint8_t x0, uint8_t y0, uint8_t radius, int8_t c, int8_t fc) {
- int f = 1 - radius;
- int ddF_x = 1;
- int ddF_y = -2 * radius;
- int x = 0;
- int y = radius;
- uint8_t pyy = y,pyx = x;
-
- //there is a fill color
- if (fc != -1)
- draw_row(y0,x0-radius,x0+radius,fc);
-
- sp(x0, y0 + radius,c);
- sp(x0, y0 - radius,c);
- sp(x0 + radius, y0,c);
- sp(x0 - radius, y0,c);
-
- while(x < y) {
- if(f >= 0) {
- y--;
- ddF_y += 2;
- f += ddF_y;
- }
- x++;
- ddF_x += 2;
+ int f = 1 - radius;
+ int ddF_x = 1;
+ int ddF_y = -2 * radius;
+ int x = 0;
+ int y = radius;
+ uint8_t pyy = y,pyx = x;
+
+ //there is a fill color
+ if (fc != -1)
+ draw_row(y0,x0-radius,x0+radius,fc);
+
+ sp(x0, y0 + radius,c);
+ sp(x0, y0 - radius,c);
+ sp(x0 + radius, y0,c);
+ sp(x0 - radius, y0,c);
+
+ while(x < y) {
+ if(f >= 0) {
+ y--;
+ ddF_y += 2;
+ f += ddF_y;
+ }
+ x++;
+ ddF_x += 2;
f += ddF_x;
//there is a fill color
if (fc > -1) {
sp(x0 + x, y0 - y,c);
sp(x0 - x, y0 - y,c);
sp(x0 + y, y0 + x,c);
- sp(x0 - y, y0 + x,c);
- sp(x0 + y, y0 - x,c);
- sp(x0 - y, y0 - x,c);
- }
+ sp(x0 - y, y0 + x,c);
+ sp(x0 + y, y0 - x,c);
+ sp(x0 - y, y0 - x,c);
+ }
}
void draw_rect(uint8_t x0, uint8_t y0, uint8_t w, uint8_t h, uint8_t c)