#define PIXEL_C #include "config.h" #include "pixel.h" #include "borg_hw/borg_hw.h" unsigned char shl_table[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void clear_screen(unsigned char value){ unsigned char p,*pix,v=0xff; unsigned int i; for(p=0;pNUMPLANE) value=NUMPLANE; unsigned char pos = (p.y%NUM_ROWS)*LINEBYTES + (p.x/8); unsigned char mask = shl_table[p.x%8]; unsigned char plane; for(plane=0;plane>= 1; pixmap[plane][row][byte] |= (pixmap[plane][row][byte+1] & 0x01) * 0x80;; } pixmap[plane][row][LINEBYTES-1] >>= 1; } } } unsigned char get_pixel(pixel p){ if( (p.x >= NUM_COLS) || (p.y >= NUM_ROWS) ){ return 0xff; }else{ return 0!= (pixmap[0][p.y][p.x/8] & shl_table[p.x%8]); } } unsigned char get_next_pixel(pixel p, direction dir){ pixel tmp; switch (dir){ case right: tmp = (pixel){p.x-1, p.y}; break; case left: tmp = (pixel){p.x+1, p.y}; break; case down: tmp = (pixel){p.x, p.y+1}; break; case up: tmp = (pixel){p.x, p.y-1}; break; default: tmp = p; break; } return get_pixel(tmp); } direction direction_r(direction dir){ switch (dir){ case right: return(down); case down: return(left); case left: return(up); case up: return (right); } return(0); } void set_cursor(cursor* cur, pixel p){ cur->pos = p; switch (cur->mode){ case clear: clearpixel(p); break; case set: setpixel(p,3); break; } } pixel next_pixel(pixel pix, direction dir){ switch (dir){ case right: return((pixel){pix.x-1, pix.y}); break; case left: return((pixel){pix.x+1, pix.y}); break; case down: return((pixel){pix.x, pix.y+1}); break; case up: return((pixel){pix.x, pix.y-1}); break; } return (pixel){0,0}; }