nds_test1
annotate src/main.c @ 0:ab2afb70001a
initial commit test1 without libnds
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 27 Jan 2018 23:38:00 +0200 |
parents | |
children |
rev | line source |
---|---|
nuclear@0 | 1 #include <stdint.h> |
nuclear@0 | 2 #include <math.h> |
nuclear@0 | 3 #include "dsregs.h" |
nuclear@0 | 4 |
nuclear@0 | 5 static void xorpat(void *addr, int xsz, int ysz); |
nuclear@0 | 6 |
nuclear@0 | 7 static void *vram = VRAM_LCDC_PTR; |
nuclear@0 | 8 static uint16_t *bgmem = VRAM_BGB_PTR; |
nuclear@0 | 9 |
nuclear@0 | 10 int main(void) |
nuclear@0 | 11 { |
nuclear@0 | 12 uint32_t frame; |
nuclear@0 | 13 |
nuclear@0 | 14 REG_POWCNT1 = POWCNT1_LCD | POWCNT1_2DA | POWCNT1_2DB | POWCNT1_DSWAP; |
nuclear@0 | 15 |
nuclear@0 | 16 REG_DISPCNT = DISPCNT_MODE(2); |
nuclear@0 | 17 REG_B_DISPCNT = DISPCNT_MODE(1) | DISPCNT_BG2 | 5; |
nuclear@0 | 18 |
nuclear@0 | 19 REG_B_BG2CNT = BGXCNT_BM_256X256 | BGXCNT_BM16 | BGXCNT_OVF_WRAP; |
nuclear@0 | 20 REG_B_BG2PA = 0x100; |
nuclear@0 | 21 REG_B_BG2PB = 0; |
nuclear@0 | 22 REG_B_BG2PC = 0; |
nuclear@0 | 23 REG_B_BG2PD = 0x100; |
nuclear@0 | 24 |
nuclear@0 | 25 REG_VRAMCNT_A = VRAM_ENABLE; |
nuclear@0 | 26 REG_VRAMCNT_C = VRAM_ENABLE | 4; |
nuclear@0 | 27 |
nuclear@0 | 28 xorpat(vram, 256, 192); |
nuclear@0 | 29 xorpat(bgmem, 256, 256); |
nuclear@0 | 30 |
nuclear@0 | 31 for(;;) { |
nuclear@0 | 32 float t = (float)frame * 0.00035; |
nuclear@0 | 33 float scale = 0.5 * sin(t * 0.8) + 0.8; |
nuclear@0 | 34 int32_t sa = (int16_t)(sin(t) * 256 * scale); |
nuclear@0 | 35 int32_t ca = (int16_t)(cos(t) * 256 * scale); |
nuclear@0 | 36 |
nuclear@0 | 37 int32_t x = ca * -128 + sa * -96 + (128 << 8); |
nuclear@0 | 38 int32_t y = -sa * -128 + ca * -96 + (96 << 8); |
nuclear@0 | 39 |
nuclear@0 | 40 while(REG_VCOUNT < 192); |
nuclear@0 | 41 |
nuclear@0 | 42 REG_B_BG2PA = ca; |
nuclear@0 | 43 REG_B_BG2PB = sa; |
nuclear@0 | 44 REG_B_BG2PC = -sa; |
nuclear@0 | 45 REG_B_BG2PD = ca; |
nuclear@0 | 46 REG_B_BG2X = x; |
nuclear@0 | 47 REG_B_BG2Y = y; |
nuclear@0 | 48 |
nuclear@0 | 49 ++frame; |
nuclear@0 | 50 } |
nuclear@0 | 51 return 0; |
nuclear@0 | 52 } |
nuclear@0 | 53 |
nuclear@0 | 54 static void xorpat(void *addr, int xsz, int ysz) |
nuclear@0 | 55 { |
nuclear@0 | 56 int i, j; |
nuclear@0 | 57 uint16_t *p = addr; |
nuclear@0 | 58 |
nuclear@0 | 59 for(i=0; i<ysz; i++) { |
nuclear@0 | 60 for(j=0; j<xsz; j++) { |
nuclear@0 | 61 int xor = i^j; |
nuclear@0 | 62 uint16_t red = xor >> 2; |
nuclear@0 | 63 uint16_t green = xor >> 1; |
nuclear@0 | 64 uint16_t blue = xor; |
nuclear@0 | 65 *p++ = 0x8000 | red | ((green & 0x1f) << 5) | ((blue & 0x1f) << 10); |
nuclear@0 | 66 } |
nuclear@0 | 67 } |
nuclear@0 | 68 } |