| const u16 sinus_data[256] = {
 128,  131,  134,  137,  140,  143,  146,  149,
 152,  155,  158,  161,  164,  167,  170,  173,
 176,  179,  182,  185,  187,  190,  193,  196,
 198,  201,  203,  206,  208,  211,  213,  215,
 217,  220,  222,  224,  226,  228,  230,  232,
 233,  235,  237,  238,  240,  241,  243,  244,
 245,  246,  247,  248,  249,  250,  251,  252,
 252,  253,  254,  254,  254,  255,  255,  255,
 255,  255,  255,  255,  254,  254,  254,  253,
 253,  252,  251,  251,  250,  249,  248,  247,
 246,  244,  243,  242,  240,  239,  237,  236,
 234,  232,  230,  228,  227,  225,  223,  220,
 218,  216,  214,  211,  209,  207,  204,  202,
 199,  196,  194,  191,  188,  186,  183,  180,
 177,  174,  171,  168,  165,  162,  159,  156,
 153,  150,  147,  144,  141,  138,  135,  132,
 129,  125,  122,  119,  116,  113,  110,  107,
 104,  101,  98,  95,  92,  89,  86,  83,
 80,  77,  74,  71,  69,  66,  63,  60,
 58,  55,  53,  50,  48,  45,  43,  41,
 38,  36,  34,  32,  30,  28,  26,  24,
 22,  21,  19,  17,  16,  14,  13,  12,
 10,  9,  8,  7,  6,  5,  4,  3,
 3,  2,  2,  1,  1,  0,  0,  0,
 0,  0,  0,  0,  0,  1,  1,  2,
 2,  3,  3,  4,  5,  6,  7,  8,
 9,  10,  11,  13,  14,  16,  17,  19,
 20,  22,  24,  26,  28,  30,  32,  34,
 36,  38,  40,  43,  45,  47,  50,  52,
 55,  58,  60,  63,  66,  68,  71,  74,
 77,  80,  83,  86,  88,  91,  94,  97,
 101,  104,  107,  110,  113,  116,  119,  122,
 
 };
 
 #define REG_DISPSTAT   *(u16*)0x4000004
 #define REG_VCOUNT     *(vu16*)0x4000006
 #define REG_BG0HOFS    *(u16*)0x4000010
 #define REG_IE         *(u16*)0x4000200
 #define REG_IF         *(u16*)0x4000202
 #define REG_IME        *(u16*)0x4000208
 
 #define INT_VBLANK 0x0001
 #define INT_HBLANK 0x0002
 
 u8 sinus_offset=0, sinus_count=0;
 
 void wave_effect()
 {
 REG_IME=0;
 REG_IE|=INT_HBLANK|INT_VBLANK;
 REG_DISPSTAT|=(1<<4) | (1<<3);
 REG_IME=1; //enable interrupt
 }
 
 void InterruptHandler(void)
 {
 u16 temp_reg_if=REG_IF;
 
 REG_IME=0;
 
 *((u16*)0x03007ff8) = REG_IF;
 
 if(temp_reg_if & INT_HBLANK)
 {
 REG_IF |= INT_HBLANK;
 
 REG_BG0HOFS = (sinus_data[REG_VCOUNT+sinus_offset+sinus_count]-128) >> 3; // bit shifting makes a smaller wave
 sinus_offset++;
 if(REG_VCOUNT>=160) sinus_offset=0;
 
 }
 
 if(temp_reg_if & INT_VBLANK)
 {
 REG_IF |= INT_VBLANK;
 
 sinus_count++;
 }
 
 REG_IME=1;
 }
 
 main()
 {
 REG_INTERUPT=(u32)&InterruptHandler;
 
 wave_effect();
 
 for(;;);
 }
 
 |