<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>tag:www.local-guru.net,2005:/blog/tag/nintendo</id>
  <link type="text/html" href="http://www.local-guru.net" rel="alternate"/>
  <link type="application/atom+xml" href="http://www.local-guru.net/blog/tag/nintendo.atom" rel="self"/>
  <title>GuruBlog : Articles about nintendo</title>
  <subtitle>local-guru.net</subtitle>
  <updated>2009-04-21T04:47:00+02:00</updated>
  <generator>GuruBlog engine</generator>
  <entry>
    <id>tag:www.local-guru.net,2005:Article/161</id>
    <published>2009-04-21T04:47:00+02:00</published>
    <updated>2009-04-21T04:47:00+02:00</updated>
    <link type="text/html" href="http://www.local-guru.net//blog/2009/4/21/happy-birthday-gameboy" rel="alternate"/>
    <author>
      <name>Nikolaus Gradwohl</name>
    </author>
    <title type="html">Happy Birthday Gameboy</title>
    <category term="nintendo" scheme="http://www.local-guru.net/blog/tag/nintendo"/>
    <category term="gameboy" scheme="http://www.local-guru.net/blog/tag/gameboy"/>
    <content type="html">&lt;p&gt;&lt;img src="http://www.local-guru.net/img/guru/gameboy.jpg" alt="gameboy" /&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:www.local-guru.net,2005:Article/76</id>
    <published>2008-10-09T20:49:00+02:00</published>
    <updated>2008-10-09T20:49:00+02:00</updated>
    <link type="text/html" href="http://www.local-guru.net//blog/2008/10/9/nds-line-demo" rel="alternate"/>
    <author>
      <name>Nikolaus Gradwohl</name>
    </author>
    <title type="html">nds line-demo</title>
    <category term="nintendo" scheme="http://www.local-guru.net/blog/tag/nintendo"/>
    <category term="cpp" scheme="http://www.local-guru.net/blog/tag/cpp"/>
    <category term="DS" scheme="http://www.local-guru.net/blog/tag/ds"/>
    <content type="html">&lt;p&gt;Since my first demo for the Nintendo DS used the bresenham circle algorith, i had
to write another starring its famouse brother - the bresenhaml line-algorithm.
Which is a bit trickier than it seems when you first look at it. it took me 4 tries
to make it work in all quadrants.&lt;/p&gt;

&lt;p&gt;For those of you who don't own a nds i included a screenshot this time made
using a emulator. imagine the upper part of the screenshot beeing displayed on
the upper screen of the DS.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.local-guru.net/img/guru/nds-linedemo.png" alt="linedemo" /&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#include &amp;lt;nds.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;

void setPixel( int x, int y, int color ) {
    VRAM_A[x + y * 256] = color;
}

void line( int x1, int y1, int x2, int y2, int c ) {
    bool swap = abs( y2 - y1 ) &amp;gt; abs ( x2 - x1 );
    int x1t =  swap ? y1 : x1;
    int y1t =  swap ? x1 : y1;
    int x2t =  swap ? y2 : x2;
    int y2t =  swap ? x2 : y2;

    int xs =  x1t &amp;lt; x2t ? x1t : x2t;
    int ys =  x1t &amp;lt; x2t ? y1t : y2t;
    int xt =  x1t &amp;lt; x2t ? x2t : x1t;
    int yt =  x1t &amp;lt; x2t ? y2t : y1t;

    int dx = xt - xs;
    int dy = abs(yt - ys);

    int dT = 2 * ( dy - dx );
    int dS = 2 * dy;
    int d = 2 * dy - dx;
    int x = xs;
    int y = ys;

    if ( swap )  {
        setPixel( y, x, c );
    } else {
        setPixel( x, y, c );
    }

    while ( x &amp;lt; xt ) {
        x++;
        if ( d &amp;lt; 0 ) {
            d = d + dS;
        } else {
            if ( ys &amp;lt; yt ) {
                y++;
            } else {
                y--;
            }
            d = d + dT;
        }
        if ( swap )  {
            setPixel( y, x, c );
        } else {
            setPixel( x, y, c );
        }
    }
}

int main(void) {
    touchPosition touch;
    // set lower screen to FB
    videoSetMode(MODE_FB0);
    vramSetBankA(VRAM_A_LCD);

    // set upper stcreen to textmode
    videoSetModeSub(MODE_0_2D | DISPLAY_BG0_ACTIVE);
    vramSetBankC(VRAM_C_SUB_BG);
    SUB_BG0_CR = BG_MAP_BASE(31);
    BG_PALETTE_SUB[255] = RGB15(31,31,31);
    consoleInitDefault((u16*)SCREEN_BASE_BLOCK_SUB(31), (u16*)CHAR_BASE_BLOCK_SUB(0), 16);

    iprintf("coded by guru
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;");&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    // make sure main screen is on bottom
    lcdMainOnBottom();

    while(1) {
        scanKeys();

        if(keysHeld() &amp;amp; KEY_TOUCH) {
            touch=touchReadXY();
            line( 128, 96, touch.px, touch.py, RGB15( 
                31 * abs(touch.px - 128) / 128, 
                31 * abs(touch.py-96) / 96,
                0
            ));
        }

        // clear screen if key A is pressed
        if (keysHeld() &amp;amp; KEY_A) {
            for ( int y = 0; y &amp;lt; 192; y ++ ) {
                for ( int x = 0; x &amp;lt; 256; x ++ ) {
                    setPixel( x, y, 0);
                }
            }
        }
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <id>tag:www.local-guru.net,2005:Article/61</id>
    <published>2008-08-11T07:13:00+02:00</published>
    <updated>2008-08-11T07:13:00+02:00</updated>
    <link type="text/html" href="http://www.local-guru.net//blog/2008/8/11/first-nds-demo" rel="alternate"/>
    <author>
      <name>Nikolaus Gradwohl</name>
    </author>
    <title type="html">first nds demo</title>
    <category term="nintendo" scheme="http://www.local-guru.net/blog/tag/nintendo"/>
    <category term="cpp" scheme="http://www.local-guru.net/blog/tag/cpp"/>
    <category term="DS" scheme="http://www.local-guru.net/blog/tag/ds"/>
    <content type="html">&lt;p&gt;I got a nintendo DS 2 weeks ago and have hacked my first demo
using the arm compilers from &lt;a href="http://www.devkitpro.org/"&gt;devkitPro&lt;/a&gt;. To
compile the code follow the &lt;a href="http://www.drunkencoders.com/"&gt;drunkencoders-Tutorial&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;the program initializes the lower screen in a 2d graphics mode, and draws a circle (using the bresenham-algorithm for circles)
wherever the screen is touched by the stylus. if the A button is pressed the screen is cleared. No sophisticated doublebuffering, 3d or
sound stuff this time - but hey! it's the first program for a nds! and it works! :-)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#include &amp;lt;nds.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;

void setPixel( int x, int y, int color ) {
    VRAM_A[x + y * 256] = color;
}

void circle( int mx, int my, int r, int color ) {
    int x = 0;
    int y = r;
    int d = 3 - 2 * r;

    while (x &amp;lt;= y) {
        setPixel( mx  + x, my + y, color );
        setPixel( mx  - x, my + y, color );
        setPixel( mx  - x, my - y, color );
        setPixel( mx  + x, my - y, color );
        setPixel( mx  + y, my + x, color );
        setPixel( mx  - y, my + x, color );
        setPixel( mx  - y, my - x, color );
        setPixel( mx  + y, my - x, color );

        if (d &amp;lt; 0) {
            d = d + 4 * x + 6;
        } else {
            d = d + 4 * ( x - y ) + 10;
            y --;
        }
        x++;
    }
}

int main(void) {
    touchPosition touch;

    videoSetMode(MODE_FB0);
    vramSetBankA(VRAM_A_LCD);

    lcdMainOnBottom();

    while(1) {
        scanKeys();

        if(keysHeld() &amp;amp; KEY_TOUCH) {
            touch=touchReadXY();
            circle( touch.px, touch.py, 20, rand());
        }

        if (keysHeld() &amp;amp; KEY_A) {
            for ( int y = 0; y &amp;lt; 192; y ++ ) {
                for ( int x = 0; x &amp;lt; 256; x ++ ) {
                    setPixel( x, y, 0);
                }
            }
        }
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
</feed>

