Monorepo for Aesthetic.Computer aesthetic.computer
at main 68 lines 2.4 kB view raw
1#include <gb/gb.h> 2#include <stdio.h> 3#include <gbdk/console.h> 4 5// Sine table: 256 entries, values from -64 to +64 6const int8_t sine_table[256] = { 7 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 8 48, 51, 54, 57, 59, 62, 65, 67, 70, 73, 75, 78, 80, 82, 85, 87, 9 89, 91, 94, 96, 98, 100, 102, 103, 105, 107, 108, 110, 112, 113, 114, 116, 10 117, 118, 119, 120, 121, 122, 123, 124, 124, 125, 126, 126, 127, 127, 127, 127, 11 127, 127, 127, 127, 127, 126, 126, 125, 124, 124, 123, 122, 121, 120, 119, 118, 12 117, 116, 114, 113, 112, 110, 108, 107, 105, 103, 102, 100, 98, 96, 94, 91, 13 89, 87, 85, 82, 80, 78, 75, 73, 70, 67, 65, 62, 59, 57, 54, 51, 14 48, 45, 42, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 15 0, -3, -6, -9, -12, -15, -18, -21, -24, -27, -30, -33, -36, -39, -42, -45, 16 -48, -51, -54, -57, -59, -62, -65, -67, -70, -73, -75, -78, -80, -82, -85, -87, 17 -89, -91, -94, -96, -98, -100, -102, -103, -105, -107, -108, -110, -112, -113, -114, -116, 18 -117, -118, -119, -120, -121, -122, -123, -124, -124, -125, -126, -126, -127, -127, -127, -127, 19 -127, -127, -127, -127, -127, -126, -126, -125, -124, -124, -123, -122, -121, -120, -119, -118, 20 -117, -116, -114, -113, -112, -110, -108, -107, -105, -103, -102, -100, -98, -96, -94, -91, 21 -89, -87, -85, -82, -80, -78, -75, -73, -70, -67, -65, -62, -59, -57, -54, -51, 22 -48, -45, -42, -39, -36, -33, -30, -27, -24, -21, -18, -15, -12, -9, -6, -3 23}; 24 25int8_t sin_lookup(uint8_t angle) { 26 return sine_table[angle]; 27} 28 29int8_t cos_lookup(uint8_t angle) { 30 return sine_table[(angle + 64) & 0xFF]; 31} 32 33void main(void) { 34 uint16_t angle = 64 << 8; // 90 degrees in 8.8 fixed point 35 uint8_t step; 36 uint8_t angle_byte; 37 int8_t s, c; 38 39 DISPLAY_ON; 40 41 printf("ANGLE TEST\n"); 42 printf("Start: %d\n", (uint8_t)(angle >> 8)); 43 44 // Test key angles 45 for(step = 0; step < 16; step++) { 46 angle_byte = (uint8_t)(angle >> 8); 47 s = sin_lookup(angle_byte); 48 c = cos_lookup(angle_byte); 49 50 gotoxy(0, 3 + step); 51 printf("%d:A%d S%d C%d", step * 90, angle_byte, s, c); 52 53 angle += 182 * 90; // Jump by 90 steps worth 54 } 55 56 // Show what happens at each step 57 angle = 64 << 8; 58 printf("\n\nPER-STEP:\n"); 59 for(step = 0; step < 8; step++) { 60 angle_byte = (uint8_t)(angle >> 8); 61 printf("S%d:A%d\n", step, angle_byte); 62 angle += 182; 63 } 64 65 while(1) { 66 wait_vbl_done(); 67 } 68}