123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- /**
- Simple testing program for SAF.
- by drummyfish, released under CC0 1.0, public domain
- */
- #define SAF_PROGRAM_NAME "Test"
- #define SAF_SETTING_BACKGROUND_COLOR 0xe0
- #define SAF_SETTING_FORCE_1BIT 0
- #define SAF_SETTING_1BIT_DITHER 0
- #define SAF_SETTING_FASTER_1BIT 2
- #define SAF_SETTING_ENABLE_SOUND 1
- #include "../saf.h"
- uint8_t saveValue = 0;
- void screen1()
- {
- SAF_clearScreen(SAF_COLOR_BLACK);
- SAF_drawText("SAF test!",2,2,SAF_COLOR_WHITE,1);
- uint8_t index = 0;
- for (uint8_t y = 0; y < 16; ++y)
- for (uint8_t x = 0; x < 16; ++x)
- {
- uint8_t color = ((x % 8) << 5) | ((y % 8) << 2) | (x / 8 + 2 * (y / 8));
- int8_t x2 = 2 + 2 * x;
- int8_t y2 = 12 + 2 * y;
- for (int8_t j = 0; j < 2; ++j)
- for (int8_t i = 0; i < 2; ++i)
- SAF_drawPixel(x2 + i,y2 + j,color);
- index++;
- }
- char btnChars[SAF_BUTTONS + 1] = "UDLRABC";
- char btnString[2] = "x";
- for (int8_t i = 0; i < SAF_BUTTONS; ++i)
- {
- btnString[0] = btnChars[i];
- uint8_t pressed = SAF_buttonPressed(i);
- int8_t x = 2 + i * 8;
- SAF_drawRect(x,48,7,8,pressed ? SAF_COLOR_WHITE : SAF_COLOR_GRAY_DARK,1);
- SAF_drawText(btnString,x + 2,50,pressed ? SAF_COLOR_BLACK : SAF_COLOR_WHITE,1);
- for (int8_t j = 0; j < (pressed / 32); ++j)
- SAF_drawPixel(x + j,58,SAF_COLOR_WHITE);
- }
- SAF_drawCircle(48,28,12,SAF_COLOR_WHITE,0);
- SAF_drawLine(48,28,48 + (SAF_sin(SAF_frame()) * 12) / 128,28 + (SAF_cos(SAF_frame()) * 12) / 128,SAF_COLOR_YELLOW);
- }
- void screen2()
- {
- SAF_clearScreen(SAF_COLOR_WHITE);
-
- SAF_drawRect(43,46,SAF_sin(((SAF_frame() * 2) % 256)) / 2,SAF_cos((SAF_frame() % 256)) / 2,SAF_COLOR_RED,1);
- SAF_drawCircle(-10,-20,SAF_frame() % 128,SAF_COLOR_BLUE,0);
- SAF_drawCircle(31,31,(SAF_frame() >> 1) % 32,SAF_COLOR_GREEN,0);
- SAF_drawText("random:\n b",1,1,SAF_COLOR_BLACK,1);
-
- uint8_t bit = (SAF_frame() >> 4) % 8;
- char numberStr[2];
- SAF_intToStr(bit,numberStr);
-
- SAF_drawText(numberStr,11,6,SAF_COLOR_BLACK,1);
- bit = 0x01 << bit;
- for (int8_t y = 0; y < 16; ++y)
- for (int8_t x = 0; x < 16; ++x)
- {
- uint8_t value = SAF_random();
- SAF_drawPixel(44 + x,11 + y,value);
- SAF_drawPixel(23 + x,11 + y,value < 128 ? SAF_COLOR_BLACK : SAF_COLOR_GRAY);
- value = value & bit;
- value = value ? SAF_COLOR_BLACK : SAF_COLOR_GRAY;
- SAF_drawPixel(2 + x,11 + y,value);
- }
-
- SAF_drawText("frame\ntime\nplat.",1,30,SAF_COLOR_BLACK,1);
- char numberStr2[32];
- SAF_intToStr(SAF_frame(),numberStr2);
- SAF_drawText(numberStr2,34,30,SAF_COLOR_BLACK,1);
- SAF_floatToStr(SAF_time() / 1000.0,numberStr2,3);
- SAF_drawText(numberStr2,34,35,SAF_COLOR_BLACK,1);
-
- SAF_drawText(SAF_PLATFORM_NAME,34,40,SAF_COLOR_BLACK,1);
- char allChars[10][11] =
- {
- " !\"#$%&'()",
- "*+-./01234",
- "56789:;<=>",
- "?@ABCDEFGH",
- "IJKLMNOPQR",
- "STUVWXYZ[]",
- "^,_@`abcde",
- "fghijklmno",
- "pqrstuvwxy",
- "z{|}~ "
- };
- SAF_drawText(allChars[(SAF_frame() >> 5) % 10],1,50,SAF_COLOR_BLACK,1);
- char num[] = "xxx";
- SAF_drawText(SAF_intToStr(saveValue,num),
- SAF_drawText("saved:",1,58,SAF_COLOR_BLACK,1),58,SAF_COLOR_BLACK,1);
- }
- uint8_t img[44] = {
- 0x07,0x06,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0xed,0xed,0x00,0xed,0xe0,0x00,
- 0x00,0xed,0xe0,0xed,0xe0,0x60,0x00,0xff,0x00,0xe0,0xe0,0x60,0x00,0xff,0xff,0xff,
- 0x00,0x60,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff};
- uint8_t imgCompressed[227] = {
- 0x13,0x20,0xe0,0x00,0x28,0x7c,0x07,0xfe,0x4c,0xff,0x71,0x70,0x95,0x6d,0x92,0x24,
- 0x48,0x49,0x60,0x41,0xd0,0x01,0x2d,0x01,0xc0,0x01,0x0f,0x08,0x0a,0x1c,0x01,0xa0,
- 0x01,0x08,0x3a,0x15,0x01,0x90,0x01,0x59,0x06,0x01,0xa0,0x06,0x05,0x27,0x05,0x06,
- 0xa0,0x06,0x15,0x27,0x15,0x06,0x90,0x06,0x15,0x27,0x15,0x06,0x70,0x11,0x38,0x0e,
- 0x08,0x2a,0x11,0x30,0x11,0x0f,0x08,0x7a,0x08,0x1c,0x11,0x00,0x01,0x3f,0x3b,0x38,
- 0x1b,0x2c,0x11,0x3d,0xa2,0x06,0x02,0x01,0x00,0x11,0x0d,0x16,0x0e,0x12,0x0e,0x08,
- 0x09,0x1e,0x08,0x06,0x11,0x30,0x01,0x02,0x69,0x18,0x11,0x70,0x06,0x05,0x47,0x05,
- 0x06,0x90,0x06,0x15,0x27,0x15,0x06,0xa0,0x16,0x25,0x16,0xd0,0x02,0x03,0x02,0x80,
- 0x34,0x20,0x02,0x03,0x02,0x10,0x43,0x00,0x14,0x10,0x14,0x10,0x02,0x0a,0x02,0x10,
- 0x13,0x10,0x13,0x14,0x10,0x14,0x10,0x02,0x0e,0x02,0x10,0x13,0x10,0x13,0x14,0x10,
- 0x14,0x10,0x01,0x02,0x01,0x10,0x43,0x00,0x54,0x10,0x01,0x02,0x01,0x10,0x13,0x10,
- 0x13,0x14,0x10,0x14,0x00,0x01,0x1c,0x0a,0x01,0x00,0x13,0x10,0x13,0x14,0x10,0x14,
- 0x00,0x01,0x22,0x01,0x00,0x43,0x80,0x01,0x02,0x01,0xf0,0x01,0x02,0x01,0xf0,0x01,
- 0x02,0x01,0xe0,0x01,0x1b,0x0c,0x01,0xb0,0x11,0x3b,0x0c,0x11,0x80,0x01,0x82,0x01,
- 0x70,0xa1,0x30};
- uint8_t img1Bit[25] = {
- 0x0c,0x0f,0xe9,0x7c,0x03,0x40,0x20,0x00,0x80,0x11,0xf8,0x96,0x9d,0x69,0xcf,0x3a,
- 0x01,0x90,0x1c,0xeb,0xc1,0xbe,0x07,0xe3,0xf0};
- uint8_t img1BitMask[25] = {
- 0x0c,0x0f,0x16,0x83,0xfc,0xbf,0xdf,0xff,0x7f,0xef,0xff,0x7f,0xe3,0xfe,0x3f,0xc7,
- 0xfe,0x7f,0xe3,0xfc,0x3f,0xc1,0xf8,0x1c,0x00};
-
- uint8_t imgLogo[2 + 8 * 8];
- int8_t trianglePoints[6] = {1,2,3,4,5,6};
- void screen3()
- {
- SAF_clearScreen(SAF_COLOR_YELLOW);
- int8_t s = SAF_sin(SAF_frame());
- int8_t c = SAF_cos(SAF_frame());
- int8_t a = 32 - s / 2, b = 32 + s / 2;
- SAF_drawLine(a,32 - 64,b,32 + 64,SAF_COLOR_RED);
- SAF_drawLine(32 - 64,b,32 + 64,a,SAF_COLOR_RED);
- uint8_t transform = SAF_TRANSFORM_NONE + (SAF_frame() >> 4) % 4;
-
- if ((SAF_frame() >> 3) % 2)
- transform |= SAF_TRANSFORM_FLIP;
- SAF_drawImage(img,
- 32 + s / 4 - img[0] / 2,
- 32 + c / 4 - img[1] / 2,
- transform | SAF_TRANSFORM_SCALE_3 | ((SAF_frame() & 0x10) ? 0 : SAF_TRANSFORM_INVERT),SAF_COLOR_WHITE);
- SAF_drawImageCompressed(imgCompressed,1,1,transform,SAF_COLOR_RED);
- SAF_drawImage(img,40,1,transform,SAF_COLOR_WHITE);
- SAF_drawImage1Bit(img1Bit,40,20,img1BitMask,255,0,transform);
-
- SAF_drawImage1Bit(img1Bit,50,45,0,255,0,SAF_TRANSFORM_NONE);
-
- SAF_drawImage1Bit(imgLogo,2,40,imgLogo,SAF_COLOR_BLUE,255,SAF_TRANSFORM_NONE);
-
- for (int i = 0; i < 6; ++i)
- {
- int8_t add = SAF_random() > 127 ? 1 : -1;
- if ((add > 0 && trianglePoints[i] < 16) || (add < 0 && trianglePoints[i] > -16))
- trianglePoints[i] += add;
- }
- for (uint8_t i = 0; i < 3; ++i)
- {
- uint8_t i1 = 2 * i, i2 = 2 * (i + 1) % 6;
-
- SAF_drawLine(
- trianglePoints[i1] + 25,
- trianglePoints[i1 + 1] + 40,
- trianglePoints[i2] + 25,
- trianglePoints[i2 + 1] + 40,
- SAF_COLOR_BLACK);
- }
- }
- uint8_t phase = 0;
- void SAF_init(void)
- {
- saveValue = SAF_load(0);
- saveValue++;
- SAF_save(0,saveValue);
- imgLogo[0] = 8;
- imgLogo[1] = 8;
- imgLogo[2] = (SAF_LOGO_IMAGE >> 56) & 0xff;
- imgLogo[3] = (SAF_LOGO_IMAGE >> 48) & 0xff;
- imgLogo[4] = (SAF_LOGO_IMAGE >> 40) & 0xff;
- imgLogo[5] = (SAF_LOGO_IMAGE >> 32) & 0xff;
- imgLogo[6] = (SAF_LOGO_IMAGE >> 24) & 0xff;
- imgLogo[7] = (SAF_LOGO_IMAGE >> 16) & 0xff;
- imgLogo[8] = (SAF_LOGO_IMAGE >> 8) & 0xff;
- imgLogo[9] = SAF_LOGO_IMAGE & 0xff;
- }
- uint8_t SAF_loop(void)
- {
- #if 0
- screen2();
- #else
- switch (phase)
- {
- case 0: screen1(); break;
- case 1: screen2(); break;
- case 2: screen3(); break;
- default: break;
- }
- uint32_t f = SAF_frame() % 64;
- if (f >= 24 && f < 35)
- {
- SAF_drawRect(3,56,45,6,SAF_COLOR_GRAY_DARK,1);
- uint8_t i = (SAF_frame() / 64) % SAF_SOUNDS;
- char s[8] = "sound x";
- s[6] = '0' + i;
- SAF_drawText(s,4,57,SAF_COLOR_RED,1);
- if (f == 24)
- SAF_playSound(i);
- }
- if (SAF_frame() != 0 && SAF_frame() % 128 == 0)
- {
- phase++;
- phase %= 3;
- }
- return 1;
- #endif
- }
|