#include #include "basic/basic.h" #include "lcd/print.h" #include "lcd/render.h" #include "lcd/display.h" #include "basic/config.h" #include "usetable.h" #define BITSET_X (RESX+2) #define BITSET_Y (RESY+2) #define BITSET_SIZE (BITSET_X*BITSET_Y) #define BITSETCHUNKSIZE 32 #define one ((uint32_t)1) struct bitset { uint16_t size; uint32_t bits[BITSET_SIZE/BITSETCHUNKSIZE+1]; }; typedef uint8_t uchar; int pattern=0; #define PATTERNCOUNT 3 uchar stepmode=0; uchar randdensity=0; static unsigned long iter=0; struct bitset _life; #define life (&_life) static void draw_area(); static void calc_area(); static void random_area(struct bitset *area, uchar x0, uchar y0, uchar x1, uchar y1,uchar value); static void reset_area(); void ram(void) { getInputWaitRelease(); reset_area(); random_area(life,1,1,RESX,RESY,40); static int nickx=2,nicky=10; signed char movy=1; static int nickwidth,nickheight; static int nickoff=10; static char delay=10; static char speedmode=0; static char LCDSHIFTX_EVERY_N=2; static char LCDSHIFTY_EVERY_N=2; static char ITER_EVERY_N=1; lcdClear(); setExtFont(GLOBAL(nickfont)); nickwidth=DoString(nickx,nicky,GLOBAL(nickname)); if(nickwidth<50)nickoff=30; nickheight=getFontHeight(); char stepmode=0; while (1) { draw_area(); // xor life pattern over display content lcdDisplay(); lcdClear(); // draw_area(); // xor life pattern again to restore original display content // Old shift code. Can't handle longer Nicks... // if(iter%LCDSHIFT_EVERY_N==0) lcdShift(1,-2,1); // if(iter%LCDSHIFT_EVERY_N==0) { nickx=(nickx+1)%100-nickwidth; nicky=(nicky+1)%50;} if(iter%LCDSHIFTX_EVERY_N==0) { nickx--; if(nickx<(-1*nickwidth-nickoff))nickx=0; } if(iter%LCDSHIFTY_EVERY_N==0) { nicky+=movy; if(nicky<1 || nicky>RESY-nickheight) movy*=-1; } DoString(nickx,nicky,GLOBAL(nickname)); DoString(nickx+nickwidth+nickoff,nicky,GLOBAL(nickname)); if(nickwidthbits[base]|=(one<bits[base]&=~(one<bits[base]^=(one<bits[base]&(one<>24)