summaryrefslogtreecommitdiff
path: root/user/apple.c
blob: d0a5cc4ffddf0c56fb34d55712953f15c40ec5b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <incbin.h>
#include <stdio.h>
#include <unistd.h>

INCBIN(APPLE, "data/apple.bin");

#define APPLE_WIDTH 256
#define APPLE_HEIGHT 144
#define APPLE_FPS 12
#define APPLE_FRAMES 5259

#define MIN(a, b) (((a) < (b)) ? (a) : (b))

// returned from drm
static uint32_t *fb;
static int width, height, bpp, scale;

// meta
static size_t frame = 0;
static size_t frame_size;
static size_t ticks_off;

static void draw_frame(void)
{
	size_t offset = frame_size * frame;

	for (int y = 0; y < APPLE_HEIGHT * scale; y++) {
		for (int x = 0; x < APPLE_WIDTH * scale; x++) {
			uint8_t color =
				gAPPLEData[offset + ((x / scale) + (y / scale) * APPLE_WIDTH)];
			fb[x + y * width] = (color << 16) | (color << 8) | (color << 0);
		}
	}

	frame = ((ticks() - ticks_off) / (1000 / APPLE_FPS)) % APPLE_FRAMES;
}

int main(void)
{
	printf("all your apple belong to bad\n");

	if (drm((void **)&fb, &width, &height, &bpp)) {
		printf("failure!\n");
		return 1;
	}

	ticks_off = ticks();
	frame_size = APPLE_WIDTH * APPLE_HEIGHT;
	scale = MIN(width / APPLE_WIDTH, height / APPLE_HEIGHT);

	while (1)
		draw_frame();

	return 0;
}