PokittoLib is the library needed for programming the Pokitto DIY game console (www.pokitto.com)
Fork of PokittoLib by
Diff: POKITTO_HW/HWLCD.cpp
- Revision:
- 12:811f1ed5e21d
- Parent:
- 7:72f87b7c7400
--- a/POKITTO_HW/HWLCD.cpp Thu Oct 12 10:42:51 2017 +0000 +++ b/POKITTO_HW/HWLCD.cpp Wed Oct 18 10:45:22 2017 +0000 @@ -327,46 +327,55 @@ } } +void Pokitto::setWindow(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2) { + write_command(0x37); write_data(x1); + write_command(0x36); write_data(x2); + write_command(0x39); write_data(y1); + write_command(0x38); write_data(y2); + write_command(0x20); write_data(x1); + write_command(0x21); write_data(y1); +} + +void Pokitto::lcdTile(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t* gfx){ + + int width=x1-x0; + int height=y1-y0; + + if (x0 > POK_LCD_W) return; + if (y0 > POK_LCD_H) return; + if (x0 < 0) x0=0; + if (y0 < 0) y0=0; + + setWindow(y0, x0, y1-1, x1-1); + + write_command(0x22); + + for (int x=0; x<=width*height-1;x++) { + write_data(gfx[x]); + } + setWindow(0, 0, 175, 219); +} + void Pokitto::lcdPixel(int16_t x, int16_t y, uint16_t color) { if ((x < 0) || (x >= POK_LCD_W) || (y < 0) || (y >= POK_LCD_H)) return; - write_command(0x20); // Horizontal DRAM Address - write_data(y); // 0 - write_command(0x21); // Vertical DRAM Address - write_data(x); - write_command(0x22); // write data to DRAM - CLR_CS_SET_CD_RD_WR; - setup_data_16(color); - CLR_WR;SET_WR; + write_command(0x20); write_data(y); + write_command(0x21); write_data(x); + write_command(0x22); write_data(color); + } void Pokitto::lcdRectangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color) { - int16_t temp; - if (x0>x1) {temp=x0;x0=x1;x1=temp;} - if (y0>y1) {temp=y0;y0=y1;y1=temp;} - if (x0 > POK_LCD_W) return; - if (y0 > POK_LCD_H) return; - if (x1 > POK_LCD_W) x1=POK_LCD_W; - if (y1 > POK_LCD_H) y1=POK_LCD_W; - if (x0 < 0) x0=0; - if (y0 < 0) y0=0; - - int16_t x,y; - for (x=x0; x<=x1;x++) { - write_command(0x20); // Horizontal DRAM Address (=y on pokitto screen) - write_data(y0); - write_command(0x21); // Vertical DRAM Address (=x on pokitto screen) - write_data(x); - write_command(0x22); // write data to DRAM - - CLR_CS_SET_CD_RD_WR; // go to vram write mode - - - for (y=y0; y<y1;y++) { - setup_data_16(color); // setup the data (flat color = no change between pixels) - CLR_WR;SET_WR; //CLR_WR;SET_WR;//toggle writeline, pokitto screen writes a column up to down - } - } + if(x1<=x0)x1=x0+1; + if(y1<=y0)y1=y0+1; + setWindow(y0, x0, y1-1, x1-1); + write_command(0x22); + int width=x1-x0; + int height=y1-y0; + int i=width*height; + while (i--) { + write_data(color); + } } void Pokitto::lcdRefreshMode1(uint8_t * scrbuf, uint16_t* paletteptr) {