This list is closed, nobody may subscribe to it.
2004 |
Jan
(53) |
Feb
(78) |
Mar
(34) |
Apr
(26) |
May
(25) |
Jun
(34) |
Jul
(16) |
Aug
(16) |
Sep
(2) |
Oct
(58) |
Nov
(13) |
Dec
(32) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(62) |
Feb
(4) |
Mar
(40) |
Apr
(9) |
May
(13) |
Jun
(26) |
Jul
(32) |
Aug
(24) |
Sep
(18) |
Oct
(18) |
Nov
(14) |
Dec
|
2006 |
Jan
(15) |
Feb
(2) |
Mar
(23) |
Apr
(2) |
May
(2) |
Jun
(13) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2007 |
Jan
(1) |
Feb
(45) |
Mar
|
Apr
(13) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(31) |
Dec
(5) |
2008 |
Jan
(6) |
Feb
(34) |
Mar
(113) |
Apr
(40) |
May
(19) |
Jun
(5) |
Jul
(41) |
Aug
(13) |
Sep
(53) |
Oct
(4) |
Nov
(53) |
Dec
|
2009 |
Jan
(1) |
Feb
(29) |
Mar
(66) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(163) |
Nov
|
Dec
(91) |
From: <mi...@us...> - 2004-02-03 03:12:56
|
Update of /cvsroot/gc-linux/linux/drivers/video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27659/drivers/video Modified Files: gamecubefb.c Log Message: sharper picture Index: gamecubefb.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/video/gamecubefb.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- gamecubefb.c 2 Feb 2004 09:51:04 -0000 1.6 +++ gamecubefb.c 3 Feb 2004 03:10:48 -0000 1.7 @@ -139,9 +139,13 @@ pb = GC_Video_RGBToYCbCrFixed (r, g, b); - fb_writel_real((pa & 0xFF000000) | (pb & 0x0000FF00) | - (((pa & 0x00FF0000) + (pb & 0x00FF0000)) >> 1) | - (((pa & 0x000000FF) + (pb & 0x000000FF)) >> 1), address); + fb_writel_real((pa & 0xFF000000) | (pb & 0x0000FF00) | + ((((pa & 0x00FF0000) + (pb & 0x00FF0000)) >> 1) & 0x00FF0000) | + ((((pa & 0x000000FF) + (pb & 0x000000FF)) >> 1) & 0x000000FF), address); + + //fb_writel_real((pa & 0xFF000000) | (pb & 0x0000FF00) | + // (((pa & 0x00FF0000) + (pb & 0x00FF0000)) >> 1) | + // (((pa & 0x000000FF) + (pb & 0x000000FF)) >> 1), address); } /* --------------------------------------------------------------------- */ @@ -348,7 +352,7 @@ unsigned int *VIDEO_Mode; - printk("tv_encoding = %i\n", tv_encoding); +// printk("tv_encoding = %i\n", tv_encoding); if (tv_encoding == TV_ENC_NTSC) VIDEO_Mode = VIDEO_Mode640X480NtscYUV16; |
From: <mi...@us...> - 2004-02-03 02:55:41
|
Update of /cvsroot/gc-linux/htdocs/xml/en In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13337/xml/en Modified Files: download.xml faq.xml news.xml screenshots.xml status.xml Log Message: GameCube Linux Alpha released. Index: download.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/download.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- download.xml 29 Jan 2004 01:21:11 -0000 1.4 +++ download.xml 3 Feb 2004 02:53:33 -0000 1.5 @@ -4,21 +4,22 @@ <info> <title>Download</title> <author>Michael Steil</author> - <date>27 January 2004</date> + <date>2 February 2004</date> </info> - <p>There is no working Linux for the GameCube yet - but there is the "linuxpreview" application.</p> + <p>Linux on the GameCube can't do much yet. It is only suited to demonstraltional purposed right now.</p> - <h2>Current kernel</h2> + <h2>GameCube Linux Alpha</h2> - <p>This link always points to the latest kernel .DOL. It should at least show the kernel messages on the GameCube screen.</p> + <p>This Linux image shows a screen with kernel messages, and, if your computer's network settings are correct, allows telnet connections to 192.168.0.47 and serves a webpage (<a href="http://192.168.0.47/">http://192.168.0.47/</a>).</p> - <p><a href="../down/zImage.dol">zImage.dol</a></p> - <h2>Linux prealpha</h2> + <p><a href="http://prdownloads.sourceforge.net/gc-linux/gc-linux-alpha.zip?download">gc-linux-alpha.zip</a> (1.1 MB)</p> - <p>This Linux 2.6.0 kernel boots up to "Decompressing the kernel...done\nNow booting the kernel", and has screen output. It works on the real GameCube, as well as in the dolwin emulator.</p> - <p><a href="http://prdownloads.sourceforge.net/gc-linux/linux-2.6.0-gc-prealpha.diff.gz?download">Linux 2.6.0 patch</a> (40 KB)</p> - <p><a href="http://prdownloads.sourceforge.net/gc-linux/zImage-prealpha.dol?download">Binary (.DOL)</a> (436 KB)</p> + <h2>GameCube Linux Kernel Patches</h2> + + <p>This is the kernel used in the "GameCube Linux Alpha".</p> + + <p><a href="http://prdownloads.sourceforge.net/gc-linux/linux-2.6.1-gc-2004-02-02.patch?download">linux-2.6.1-gc-2004-02-02.patch</a> (67 KB)</p> <h2>Linuxpreview</h2> Index: faq.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/faq.xml,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- faq.xml 23 Jan 2004 11:50:39 -0000 1.1.1.1 +++ faq.xml 3 Feb 2004 02:53:33 -0000 1.2 @@ -7,7 +7,7 @@ <faq> <category>1 General</category> <question>Can I already run Linux on the GameCube?</question> - <answer>No.</answer> + <answer>Yes. It is not much use yet, but you can see something on the screen and telnet into it.</answer> </faq> <faq> <category>1 General</category> Index: news.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/news.xml,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- news.xml 3 Feb 2004 01:23:37 -0000 1.10 +++ news.xml 3 Feb 2004 02:53:33 -0000 1.11 @@ -2,6 +2,11 @@ <?xml-stylesheet href="news.xsl" type="text/xsl"?> <news> <item> + <date>2 February 2004</date> + <title><font color="red">GameCube Linux Alpha</font></title> + <text>We have released a 1 MB busybox-based Linux system that contains screen output, network code, a telnet server and a webserver. We also provide a kernel patch. (<a href="docs/screenshots.html">Screenshots</a>/<a href="docs/download.html">Download</a>)</text> + </item> + <item> <date>1 February 2004</date> <title>TCP/IP works completely!</title> <text>ionic and tmbinc finished the network driver. We can now telnet into a busybox-based ramdisk.</text> Index: screenshots.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/screenshots.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- screenshots.xml 25 Jan 2004 16:30:54 -0000 1.2 +++ screenshots.xml 3 Feb 2004 02:53:33 -0000 1.3 @@ -4,10 +4,16 @@ <info> <title>Screenshots</title> <author>Michael Steil</author> - <date>22 January 2004</date> + <date>2 February 2004</date> </info> - <p>There is no "working" Linux for the GameCube yet - but the kernel boots already.</p> + <h2>GameCube Linux Alpha (2 Feb 2004)</h2> + + <p>This is what can be seen if you point your web browser to your GameCube's IP:</p> + <p> + <a href="../pic/website.jpg"><img src="../pic/small-website.jpg"/></a> + <a href="../down/dmesg.txt">kernel messages</a> + </p> <h2>Linux kernel messages (22 Jan 2004, tmbinc)</h2> Index: status.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/status.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- status.xml 25 Jan 2004 16:30:54 -0000 1.3 +++ status.xml 3 Feb 2004 02:53:33 -0000 1.4 @@ -4,10 +4,10 @@ <info> <title>Status/Contribute</title> <author>Michael Steil</author> - <date>23 January 2004</date> + <date>2 February 2004</date> </info> - <p>We are not very far yet. The kernel initializes correctly and shows a full screen of kernel messages, but we lack IRQ code, which is needed for drivers. Various people have started working on different drivers.</p> + <p>Linux has a working framebuffer for PAL and NTSC, a driver that intercepts the reset button, and a working network driver.</p> <p>If you are interested in helping, please join the <a href="mailinglist.html">Mailing List</a> or email <a href="mailto:mi...@c6...?Subject=GameCube Linux Development">Michael</a>.</p> |
From: <mi...@us...> - 2004-02-03 01:25:45
|
Update of /cvsroot/gc-linux/htdocs/xml/en In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv679/xml/en Modified Files: news.xml yagcd.xml Log Message: ... Index: news.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/news.xml,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- news.xml 31 Jan 2004 03:15:20 -0000 1.9 +++ news.xml 3 Feb 2004 01:23:37 -0000 1.10 @@ -2,6 +2,16 @@ <?xml-stylesheet href="news.xsl" type="text/xsl"?> <news> <item> + <date>1 February 2004</date> + <title>TCP/IP works completely!</title> + <text>ionic and tmbinc finished the network driver. We can now telnet into a busybox-based ramdisk.</text> + </item> + <item> + <date>31 January 2004</date> + <title>Ping works!</title> + <text>The network driver is capable to reply to pings. The code can be found in the CVS.</text> + </item> + <item> <date>30 January 2004</date> <title>Preliminary network driver</title> <text>Busybox is running in the initrd (thanks to hubb), interrupts are stable (mist, ionic et al.) and ionic put together a network driver (based on tmbinc's code) that prints debug messages when the GameCube is pinged. All this code is in the CVS.</text> Index: yagcd.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/yagcd.xml,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- yagcd.xml 31 Jan 2004 03:15:20 -0000 1.5 +++ yagcd.xml 3 Feb 2004 01:23:37 -0000 1.6 @@ -9,7 +9,7 @@ <a href="../../down/yet_another_gamecube_doc.pdf.tar.gz">pdf</a> (primary document, recommended for printing)<br /> <hr /> -<small><b>last modified: Sat, 31 Jan 2004 02:58:52 </b></small><br /> +<small><b>last modified: Sat, 31 Jan 2004 22:46:41 </b></small><br /> <h1 align="center">Yet Another Gamecube Documentation<br /> <font size="-1">(but one that's worth printing)</font> </h1> @@ -106,7 +106,7 @@ host and read/write data</li> <li> anything related to playing/booting/copying pirated games (as you may have noticed, -we do not support piracy!)</li> +<b>we do not support piracy!</b>)</li> <li> details on the copy-protection used with gamecube discs (read the respective patent if you are interested)</li> @@ -132,7 +132,10 @@ <li> if known (from patents or other freely available sources) we use the same terminology as Nintendo (or Macronix respectively) does, in particular we try to use the same names and abbreviations for hardware registers, signals and the like as a weak attempt -for providing consistency with other existing documentation.</li> +of providing consistency with other existing documentation.</li> + +<li> absolute memory addresses are shown as if the gamecube had been initialized by the +original IPL and address translation had not been changed.</li> </ul> <div class="p"><!----></div> @@ -8963,7 +8966,8 @@ <table> <tr><td> <table border="1" cellspacing="0" cellpadding="3"> -<tr><td align="center"><tt>0xee</tt></td><td align="center">4</td><td align="center">w</td><td align="center">TEV_FOG_PARAM_0</td></tr> +<tr><td align="center"><tt>0xee</tt></td><td align="center">4</td><td align="center">w</td><td align="center">TEV_FOG_PARAM_0 - "a" parameter of the screen to eye space +conversion function</td></tr> </table> </td></tr> @@ -8989,7 +8993,7 @@ <tr><td align="center">11</td><td align="center"></td><td>TEV_FOG_PARAM_0_A_EXPN</td></tr> -<tr><td align="center">0</td><td align="center"></td><td>TEV_FOG_PARAM_0_A_MANT</td></tr> +<tr><td align="center">0</td><td align="center"></td><td>TEV_FOG_PARAM_0_A_MANT (signed 11e8)</td></tr> </table> </td></tr> @@ -9001,7 +9005,8 @@ <table> <tr><td> <table border="1" cellspacing="0" cellpadding="3"> -<tr><td align="center"><tt>0xef</tt></td><td align="center">4</td><td align="center">w</td><td align="center">TEV_FOG_PARAM_1</td></tr> +<tr><td align="center"><tt>0xef</tt></td><td align="center">4</td><td align="center">w</td><td align="center">TEV_FOG_PARAM_1 - the "b" parameter of the z screen to eye +space conversion function</td></tr> </table> </td></tr> @@ -9023,7 +9028,7 @@ <tr><td align="center">24</td><td align="center"></td><td>TEV_FOG_PARAM_1_RID</td></tr> -<tr><td align="center">0</td><td align="center"></td><td>TEV_FOG_PARAM_1_B_MAG</td></tr> +<tr><td align="center">0</td><td align="center"></td><td>TEV_FOG_PARAM_1_B_MAG (unsigned 0.24)</td></tr> </table> </td></tr> @@ -9035,7 +9040,7 @@ <table> <tr><td> <table border="1" cellspacing="0" cellpadding="3"> -<tr><td align="center"><tt>0xf0</tt></td><td align="center">4</td><td align="center">w</td><td align="center">TEV_FOG_PARAM_2</td></tr> +<tr><td align="center"><tt>0xf0</tt></td><td align="center">4</td><td align="center">w</td><td align="center">TEV_FOG_PARAM_2 - amount to pre-shift screen z</td></tr> </table> </td></tr> @@ -9057,7 +9062,8 @@ <tr><td align="center">24</td><td align="center"></td><td>TEV_FOG_PARAM_2_RID</td></tr> -<tr><td align="center">0</td><td align="center"></td><td>TEV_FOG_PARAM_2_B_SHF</td></tr> +<tr><td align="center">0-4</td><td align="center"></td><td>TEV_FOG_PARAM_2_B_SHF - equivalent to the value of "b" parameter's +exponent + 1</td></tr> </table> </td></tr> @@ -9069,7 +9075,7 @@ <table> <tr><td> <table border="1" cellspacing="0" cellpadding="3"> -<tr><td align="center"><tt>0xf1</tt></td><td align="center">4</td><td align="center">w</td><td align="center">TEV_FOG_PARAM_3</td></tr> +<tr><td align="center"><tt>0xf1</tt></td><td align="center">4</td><td align="center">w</td><td align="center">TEV_FOG_PARAM_3 - fog type</td></tr> </table> </td></tr> @@ -9091,15 +9097,43 @@ <tr><td align="center">24</td><td align="center"></td><td>TEV_FOG_PARAM_3_RID</td></tr> -<tr><td align="center">21</td><td align="center"></td><td>TEV_FOG_PARAM_3_FSEL</td></tr> +<tr><td align="center">21-23</td><td align="center"></td><td>TEV_FOG_PARAM_3_FSEL</td></tr> + +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">0</td><td>TEV_FSEL_OFF; No fog</td></tr> + +<tr><td align="center">1</td><td>reserved</td></tr> + +<tr><td align="center">2</td><td>TEV_FSEL_LIN; linear Fog</td></tr> + +<tr><td align="center">3</td><td>reserved</td></tr> + +<tr><td align="center">4</td><td>TEV_FSEL_EXP; Exponential Fog</td></tr> + +<tr><td align="center">5</td><td>TEV_FSEL_EX2; Exponential Squared Fog</td></tr> + +<tr><td align="center">6</td><td>TEV_FSEL_BXP; Backward Exp Fog</td></tr> + +<tr><td align="center">7</td><td>TEV_FSEL_BX2 Backward Exp Squared Fog</td></tr> +</table> +</td></tr> <tr><td align="center">20</td><td align="center"></td><td>TEV_FOG_PARAM_3_PROJ</td></tr> -<tr><td align="center">19</td><td align="center"></td><td>TEV_FOG_PARAM_3_C_SIGN</td></tr> +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">0</td><td>TEV_FOG_PERSP; Perspective projection</td></tr> -<tr><td align="center">11</td><td align="center"></td><td>TEV_FOG_PARAM_3_C_EXPN</td></tr> +<tr><td align="center">1</td><td>TEV_FOG_ORTHO; Orthographic projection</td></tr> +</table> +</td></tr> -<tr><td align="center">0</td><td align="center"></td><td>TEV_FOG_PARAM_3_C_MANT</td></tr> +<tr><td align="center">19</td><td align="center"></td><td>TEV_FOG_PARAM_3_C_SIGN (*)</td></tr> + +<tr><td align="center">11</td><td align="center"></td><td>TEV_FOG_PARAM_3_C_EXPN (*)</td></tr> + +<tr><td align="center">0-10</td><td align="center"></td><td>TEV_FOG_PARAM_3_C_MANT (*)</td></tr> </table> </td></tr> @@ -9107,6 +9141,8 @@ </table> <br /> <br /> +(*) Specifies the amount to subtract from eye-space Z after range adjustment.<br /> +<br /> <table> <tr><td> @@ -10084,11 +10120,43 @@ <table border="1" cellspacing="0" cellpadding="3"> <tr><td align="center"><b>bit(s)</b></td><td align="center"></td><td><b>description</b></td></tr> -<tr><td align="center">4</td><td align="center"></td><td><tt>XF_INVTXSPEC_HOST_TEXTURES</tt></td></tr> +<tr><td align="center">4-7</td><td align="center"></td><td><tt>XF_INVTXSPEC_HOST_TEXTURES - number of host supplied texture coordinates</tt></td></tr> -<tr><td align="center">2</td><td align="center"></td><td><tt>XF_INVTXSPEC_HOST_NORMAL</tt></td></tr> +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">0</td><td>no host supplied textures</td></tr> -<tr><td align="center">0</td><td align="center"></td><td><tt>XF_INVTXSPEC_HOST_COLORS</tt></td></tr> +<tr><td align="center">1</td><td>1 host supplied texture pair (S0, T0)</td></tr> + +<tr><td align="center">2-8</td><td>2-8 host supplied texturepairs</td></tr> + +<tr><td align="center">9-15</td><td>reserved/unused</td></tr> +</table> +</td></tr> + +<tr><td align="center">2-3</td><td align="center"></td><td><tt>XF_INVTXSPEC_HOST_NORMAL - host supplied normal</tt></td></tr> + +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">0</td><td>no host supplied normal</td></tr> + +<tr><td align="center">1</td><td>host supplied normal</td></tr> + +<tr><td align="center">2</td><td>host supplied normal and binormals</td></tr> +</table> +</td></tr> + +<tr><td align="center">0-1</td><td align="center"></td><td><tt>XF_INVTXSPEC_HOST_COLORS - host supplied color0 usage</tt></td></tr> + +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">0</td><td>no host supplied color information</td></tr> + +<tr><td align="center">1</td><td>host supplied color 0</td></tr> + +<tr><td align="center">2</td><td>host supplied color 0 and color 1</td></tr> +</table> +</td></tr> </table> </td></tr> @@ -10810,7 +10878,7 @@ <table> <tr><td> <table border="1" cellspacing="0" cellpadding="3"> -<tr><td align="center"><tt>0x1010</tt></td><td align="center">4</td><td align="center">w</td><td align="center"><tt>ALPHA1CNTRL</tt></td></tr> +<tr><td align="center"><tt>0x1011</tt></td><td align="center">4</td><td align="center">w</td><td align="center"><tt>ALPHA1CNTRL</tt></td></tr> </table> </td></tr> @@ -11044,9 +11112,15 @@ <table border="1" cellspacing="0" cellpadding="3"> <tr><td align="center"><b>bit(s)</b></td><td align="center"></td><td><b>description</b></td></tr> -<tr><td align="center"></td><td align="center"></td><td></td></tr> +<tr><td align="center">24-29</td><td align="center"></td><td>Tex3 matrix index</td></tr> -<tr><td align="center"></td><td align="center"></td><td></td></tr> +<tr><td align="center">23-18</td><td align="center"></td><td>Tex2 matrix index</td></tr> + +<tr><td align="center">12-17</td><td align="center"></td><td>Tex1 matrix index</td></tr> + +<tr><td align="center">6-11</td><td align="center"></td><td>Tex0 matrix index</td></tr> + +<tr><td align="center">0-5</td><td align="center"></td><td>Geometry matrix index</td></tr> </table> </td></tr> @@ -11078,9 +11152,13 @@ <table border="1" cellspacing="0" cellpadding="3"> <tr><td align="center"><b>bit(s)</b></td><td align="center"></td><td><b>description</b></td></tr> -<tr><td align="center"></td><td align="center"></td><td></td></tr> +<tr><td align="center">18-23</td><td align="center"></td><td>Tex7 matrix index</td></tr> -<tr><td align="center"></td><td align="center"></td><td></td></tr> +<tr><td align="center">12-17</td><td align="center"></td><td>Tex6 matrix index</td></tr> + +<tr><td align="center">6-11</td><td align="center"></td><td>Tex5 matrix index</td></tr> + +<tr><td align="center">0-5</td><td align="center"></td><td>Tex4 matrix index</td></tr> </table> </td></tr> @@ -11146,17 +11224,49 @@ <table border="1" cellspacing="0" cellpadding="3"> <tr><td align="center"><b>bit(s)</b></td><td align="center"></td><td><b>description</b></td></tr> -<tr><td align="center">15</td><td align="center"></td><td><tt>XF_TEX_EMBOSS_LIGHT</tt></td></tr> +<tr><td align="center">15-17</td><td align="center"></td><td><tt>XF_TEX_EMBOSS_LIGHT - Bump mapping source light (*1)</tt></td></tr> -<tr><td align="center">12</td><td align="center"></td><td><tt>XF_TEX_EMBOSS_SOURCE</tt></td></tr> +<tr><td align="center">12-14</td><td align="center"></td><td><tt>XF_TEX_EMBOSS_SOURCE - bump mapping source texture (*2)</tt></td></tr> -<tr><td align="center">7</td><td align="center"></td><td><tt>XF_TEX_SOURCE_ROW</tt></td></tr> +<tr><td align="center">7-11</td><td align="center"></td><td><tt>XF_TEX_SOURCE_ROW - regular texture source row (*3)</tt></td></tr> -<tr><td align="center">4</td><td align="center"></td><td><tt>XF_TEX_TEXGEN_TYPE</tt></td></tr> +<tr><td align="center">4-6</td><td align="center"></td><td><tt>XF_TEX_TEXGEN_TYPE</tt></td></tr> -<tr><td align="center">2</td><td align="center"></td><td><tt>XF_TEX_INPUT_FORM</tt></td></tr> +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">0</td><td>Regular transformation (transform incoming data)</td></tr> + +<tr><td align="center">1</td><td>texgen bump mapping</td></tr> + +<tr><td align="center">2</td><td>Color texgen: (s,t)=(r,g:b) (g and b are concatenated), color 0</td></tr> + +<tr><td align="center">3</td><td>Color texgen: (s,t)=(r,g:b) (g and b are concatenated), color 1</td></tr> +</table> +</td></tr> + +<tr><td align="center">3</td><td align="center"></td><td>reserved/unused</td></tr> + +<tr><td align="center">2</td><td align="center"></td><td><tt>XF_TEX_INPUT_FORM - format of source input data for regular textures</tt></td></tr> + +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">0</td><td>(A, B, 1.0, 1.0) (used for regular texture source)</td></tr> + +<tr><td align="center">1</td><td>(A, B, C, 1.0) (used for geometry or normal source)</td></tr> +</table> +</td></tr> <tr><td align="center">1</td><td align="center"></td><td><tt>XF_TEX_PROJECTION</tt></td></tr> + +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">0</td><td>(s,t): texmul is 2x4</td></tr> + +<tr><td align="center">1</td><td>(s,t,q): texmul is 3x4</td></tr> +</table> +</td></tr> + +<tr><td align="center">0</td><td align="center"></td><td>reseved/unused</td></tr> </table> </td></tr> @@ -11164,6 +11274,11 @@ </table> <tt></tt> <br /> <tt></tt> <br /> +<tt>(*1) n: use light #n for bump map direction source (10 to 17)</tt> <br /> +<tt>(*2) n: use regular transformed tex(n) for bump mapping source</tt> <br /> +<tt>(*3) Specifies location of incoming textures in vertex (row specific) +(i.e.: geometry is row0, normal is row1, etc . . . ) for regular transformations</tt> <br /> +<tt></tt> <br /> <table> <tr><td> @@ -12179,10 +12294,8 @@ 8.2</a>  standard Controller</h3> <div class="p"><!----></div> - -<b>8.2.0.1<a name="tth_sEc8.2.0.1"> -   Init</a> - </b> + <h4><a name="tth_sEc8.2.1"> +8.2.1</a>  Init</h4> <div class="p"><!----></div> @@ -12197,10 +12310,8 @@ </ul> <div class="p"><!----></div> - -<b>8.2.0.2<a name="tth_sEc8.2.0.2"> -   Read Controller Status</a> - </b> + <h4><a name="tth_sEc8.2.2"> +8.2.2</a>  Read Controller Status</h4> <div class="p"><!----></div> @@ -12278,8 +12389,8 @@ <div class="p"><!----></div> - <h4><a name="tth_sEc8.2.1"> -8.2.1</a>  rumble Motor On</h4> + <h4><a name="tth_sEc8.2.3"> +8.2.3</a>  rumble Motor On</h4> <div class="p"><!----></div> *(volatile unsigned long*)0xCC006400 = 0x00400001; @@ -12288,8 +12399,8 @@ *(volatile unsigned long*)0xCC006438 = 0x80000000; <div class="p"><!----></div> - <h4><a name="tth_sEc8.2.2"> -8.2.2</a>  rumble Motor Off</h4> + <h4><a name="tth_sEc8.2.4"> +8.2.4</a>  rumble Motor Off</h4> <div class="p"><!----></div> *(volatile unsigned long*)0xCC006400 = 0x00400000; @@ -12298,6 +12409,20 @@ *(volatile unsigned long*)0xCC006438 = 0x80000000; <div class="p"><!----></div> + <h3><a name="tth_sEc8.3"> +8.3</a>  Keyboard</h3> + +<div class="p"><!----></div> +to do + +<div class="p"><!----></div> + <h3><a name="tth_sEc8.4"> +8.4</a>  GBA</h3> + +<div class="p"><!----></div> +to do + +<div class="p"><!----></div> <h2><a name="tth_sEc9"> 9</a>  EXI Devices</h2> @@ -12318,7 +12443,7 @@ <tr><td align="center"><tt>0</tt></td><td align="center"><tt>1</tt></td><td align="center"><tt>3</tt></td><td align="center"><tt>0x00000000</tt></td><td>Mask ROM</td></tr> -<tr><td align="center"><tt>0</tt></td><td align="center"><tt>1</tt></td><td align="center"></td><td align="center"><tt>0x20000000</tt></td><td>Real-Time Clock (RTC)</td></tr> +<tr><td align="center"><tt>0</tt></td><td align="center"><tt>1</tt></td><td align="center">3</td><td align="center"><tt>0x20000000</tt></td><td>Real-Time Clock (RTC)</td></tr> <tr><td align="center"><tt>0</tt></td><td align="center"><tt>1</tt></td><td align="center"><tt>3</tt></td><td align="center"><tt>0x20000100</tt></td><td>SRAM</td></tr> @@ -12425,10 +12550,12 @@ <div class="p"><!----></div> <h3><a name="tth_sEc9.4"> -9.4</a>  Real-Time Clock</h3> +9.4</a>  RTC (Real-Time Clock)</h3> <div class="p"><!----></div> -Real-Time Clock (RTC) is 32-bit value, counting time intervals. +Real-Time Clock (RTC) is 32-bit value, counting time intervals in seconds. To get +the real time (seconds since January 1st, 2000 12am) add the counter bias saved +in SRAM. <div class="p"><!----></div> <h4><a name="tth_sEc9.4.1"> @@ -12443,10 +12570,13 @@ <div class="p"><!----></div> <ul> -<li> IMM write 32 : 0x20000000</li> +<li> IMM write 32 : <tt>0x20000000</tt> (RTC offset)</li> <li> IMM read 32-bit RTC value</li> </ul> +Since it is uncertain if the hardware prevents fragmented reads of the time interval +(eg byte 1 from tick n and byte 2-4 from tick n+1) it is recommended to repeatedly +retrieve the value until there is no difference between two consecutive reads. <div class="p"><!----></div> @@ -12457,7 +12587,8 @@ <div class="p"><!----></div> <ul> -<li> IMM write 32 : 0x20000000 (RTC offset) - 0x80000000 (write flag)</li> +<li> IMM write 32 : <tt>0xA0000000</tt> (== <tt>0x20000000</tt> (RTC offset) - <tt>0x80000000</tt> +(write flag))</li> <li> IMM write 32-bit RTC value</li> </ul> @@ -12487,7 +12618,7 @@ <tr><td align="center"><tt>0x08</tt></td><td align="center"></td><td align="center"><tt>4</tt></td><td>ead 1</td></tr> -<tr><td align="center"><tt>0x0c</tt></td><td align="center"></td><td align="center"><tt>4</tt></td><td>counter Bias</td></tr> +<tr><td align="center"><tt>0x0c</tt></td><td align="center"></td><td align="center"><tt>4</tt></td><td>counter Bias (add to RTC value to get actual time)</td></tr> <tr><td align="center"><tt>0x10</tt></td><td align="center"></td><td align="center"><tt>1</tt></td><td>display offset H (signed value)</td></tr> @@ -14876,6 +15007,8 @@ libraries, probably earlier than 1.0. __start.c seems to be same as usual, except that there is no OSInit() call (old versions must call OSInit() in main, instead of __start). <br /> +<br /> +note: this has been reversed from a PAL gamecube and looks different on a NTSC one.<br /> <div class="p"><!----></div> @@ -16482,6 +16615,9 @@ <li> If you have 4 controllers (and 5 hands) this one will work: Before you turn the Gamecube on hold down Z on each controller, then turn the system on (with your 5th hand of course). You will be greeted by a ninja yell.</li> + +<li> holding B on first controller, then powering on will let you switch a pal gamecube +into 60Hz mode</li> </ul> <div class="p"><!----></div> |
From: <mi...@us...> - 2004-02-03 01:25:44
|
Update of /cvsroot/gc-linux/htdocs/include/en In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv679/include/en Modified Files: contents.php Log Message: ... Index: contents.php =================================================================== RCS file: /cvsroot/gc-linux/htdocs/include/en/contents.php,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- contents.php 30 Jan 2004 10:49:20 -0000 1.3 +++ contents.php 3 Feb 2004 01:23:36 -0000 1.4 @@ -73,7 +73,7 @@ <!-- part2--></b></font></td></tr></table></td></tr><tr><td background="/pic/web/box_bg.gif"><table width="100%" border="0"><tr><td><!-- /part2--> <p><a href="/docs/howtodevelop.html">How to Develop/Run</a></p> -<p><a href="http://cvs.sourceforge.net/viewcvs.py/gc-linux" onMouseOver="tip('cvs');" onMouseOut="untip();">CVS</a></p> +<p><a href="http://sourceforge.net/cvs/?group_id=98581" onMouseOver="tip('cvs');" onMouseOut="untip();">CVS</a></p> <p><a href="/docs/contact.html" onMouseOver="tip('contact');" onMouseOut="untip();">Contact</a></p> <hr> <table bgcolor="#e0e0e0" border="0"><tr><td><a href="http://www.sourceforge.net/projects/gc-linux/" onMouseOver="tip('sf');" onMouseOut="untip();">Sourceforge Project Page</a></td></tr></table> |
From: <mi...@us...> - 2004-02-02 23:24:55
|
Update of /cvsroot/gc-linux/linux/arch/ppc/platforms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30067/arch/ppc/platforms Modified Files: gamecube.c Log Message: we can now use up to about 23 MB or RAM Index: gamecube.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gamecube.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- gamecube.c 30 Jan 2004 14:03:07 -0000 1.8 +++ gamecube.c 2 Feb 2004 23:22:47 -0000 1.9 @@ -16,7 +16,7 @@ unsigned long gamecube_find_end_of_memory(void) { - return 8*1024*1024; + return 24*1024*1024 - (640*576*2); /* 24 MB minus max. framebuffer */ } void __init |
From: <mi...@us...> - 2004-02-02 23:24:08
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29314/drivers/net Modified Files: gc-net.c Log Message: disabled some more debug messages. looks a lot cleaner now. Index: gc-net.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gc-net.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- gc-net.c 2 Feb 2004 09:58:53 -0000 1.7 +++ gc-net.c 2 Feb 2004 23:22:01 -0000 1.8 @@ -405,7 +405,7 @@ static int gc_bba_open(struct net_device *dev) { unsigned long flags; - printk("gc_bba_open\n"); + //printk("gc_bba_open\n"); int ret = request_irq(BBA_IRQ, gc_bba_interrupt, 0, dev->name, dev); if (ret) { @@ -766,8 +766,6 @@ SET_MODULE_OWNER(dev); - printk(KERN_INFO "%s: Nintendo GameCube broadband adapter", dev->name); - /* probe for adapter */ rx_page = 0; //select_nic(); @@ -777,14 +775,14 @@ exi_imm_ex(0, &l, 4, EXI_READ); exi_deselect(0); - printk(": %u\n", l); +// printk(": %u\n", l); if (l != 0x4020200) { - printk("BBA not found"); + printk("GameCube broadband adapter not found"); return -ENODEV; } - printk("initializing BBA...\n"); + //printk("initializing BBA...\n"); eth_outb(0x60, 0); // unknown udelay(10000); @@ -797,9 +795,9 @@ eth_exi_outs(4, "\xd1\x07\x75\x75", 2); eth_exi_outb(5, 0x4e); - printk("BBA %02x %02x %02x %02x %02x %02x %02x %02x\n", - eth_exi_inb(0), eth_exi_inb(1), eth_exi_inb(2), eth_exi_inb(3), - eth_exi_inb(4), eth_exi_inb(5), eth_exi_inb(6), eth_exi_inb(7)); +// printk("BBA %02x %02x %02x %02x %02x %02x %02x %02x\n", +// eth_exi_inb(0), eth_exi_inb(1), eth_exi_inb(2), eth_exi_inb(3), +// eth_exi_inb(4), eth_exi_inb(5), eth_exi_inb(6), eth_exi_inb(7)); eth_outb(0x5b, eth_inb(0x5b)&~(1<<7)); eth_outb(0x5e, 1); @@ -827,7 +825,9 @@ eth_outb(0x32, 8); eth_ins(0x20, dev->dev_addr, ETH_LEN); - printk("MAC ADDRESS %02x:%02x:%02x:%02x:%02x:%02x\n", + + printk(KERN_INFO "%s: Nintendo GameCube broadband adapter", dev->name); + printk(", %02x:%02x:%02x:%02x:%02x:%02x.\n", dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); @@ -842,7 +842,7 @@ eth_outb(8, 0xFF); // enable all IRQs eth_outb(9, 0xFF); // clear all irqs - printk("after all: irq mask %x %x\n", eth_inb(8), eth_inb(9)); +// printk("after all: irq mask %x %x\n", eth_inb(8), eth_inb(9)); /* Initialize the device structure. */ dev->priv = &gc_bba_netstats; |
From: <mi...@pr...> - 2004-02-02 11:01:52
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30059/drivers/net Modified Files: gc-net.c Log Message: disabled some debug messages Index: gc-net.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gc-net.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- gc-net.c 1 Feb 2004 22:24:22 -0000 1.6 +++ gc-net.c 2 Feb 2004 09:58:53 -0000 1.7 @@ -184,7 +184,7 @@ { if (exi_handler[channel * 3 + event]) { - printk("EXI: irq %d:%d already used!\n", channel, event); + //printk("EXI: irq %d:%d already used!\n", channel, event); return -1; } exi_handler[channel * 3 + event] = handler; @@ -652,7 +652,7 @@ if (!status) { eth_outb(9, 0xff); - printk("?? GC irq but no irq ??\n"); + //printk("?? GC irq but no irq ??\n"); } if (status & 4) @@ -762,7 +762,7 @@ short s=0; long l; /*dev->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL);*/ - printk("gc_bba_probe\n"); + //printk("gc_bba_probe\n"); SET_MODULE_OWNER(dev); @@ -945,7 +945,7 @@ static int __init gc_bba_init(void) { - printk("gc_bba_init\n"); + //printk("gc_bba_init\n"); spin_lock_init(&gc_bba_lock); // exi_init(); |
From: <mi...@pr...> - 2004-02-02 09:53:04
|
Update of /cvsroot/gc-linux/linux/drivers/video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21766/drivers/video Modified Files: gamecubefb.c Log Message: video standard detection, NTSC setup and command line override implemented. detection needs testing (only PAL tested), NTSC setup is okay, command line parser never gets called; needs more work. Index: gamecubefb.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/video/gamecubefb.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- gamecubefb.c 1 Feb 2004 20:49:19 -0000 1.5 +++ gamecubefb.c 2 Feb 2004 09:51:04 -0000 1.6 @@ -21,6 +21,25 @@ #include <asm/io.h> /* --------------------------------------------------------------------- */ +volatile static unsigned int *gamecube_video = (unsigned int*) 0xCC002000; +static const unsigned int VIDEO_Mode640X480NtscYUV16[32] = { +0x0F060001, 0x476901AD, 0x02EA5140, 0x00030018, +0x00020019, 0x410C410C, 0x40ED40ED, 0x00435A4E, +0x00000000, 0x00435A4E, 0x00000000, 0x00000000, +0x110701AE, 0x10010001, 0x00010001, 0x00010001, +0x00000000, 0x00000000, 0x28500100, 0x1AE771F0, +0x0DB4A574, 0x00C1188E, 0xC4C0CBE2, 0xFCECDECF, +0x13130F08, 0x00080C0F, 0x00FF0000, 0x00000000, +0x02800000, 0x000000FF, 0x00FF00FF, 0x00FF00FF}; +static const unsigned int VIDEO_Mode640X480Pal50YUV16[32] = { +0x11F50101, 0x4B6A01B0, 0x02F85640, 0x00010023, +0x00000024, 0x4D2B4D6D, 0x4D8A4D4C, 0x00435A4E, +0x00000000, 0x00435A4E, 0x00000000, 0x013C0144, +0x113901B1, 0x10010001, 0x00010001, 0x00010001, +0x00000000, 0x00000000, 0x28500100, 0x1AE771F0, +0x0DB4A574, 0x00C1188E, 0xC4C0CBE2, 0xFCECDECF, +0x13130F08, 0x00080C0F, 0x00FF0000, 0x00000000, +0x02800000, 0x000000FF, 0x00FF00FF, 0x00FF00FF}; static struct fb_var_screeninfo gamecubefb_defined __initdata = { .activate = FB_ACTIVATE_NOW, @@ -39,6 +58,11 @@ .accel = FB_ACCEL_NONE, }; +#define TV_ENC_DETECT 0 +#define TV_ENC_NTSC 1 +#define TV_ENC_PAL 2 +static int tv_encoding __initdata = TV_ENC_DETECT; + static struct fb_info fb_info; static u32 pseudo_palette[17]; @@ -215,10 +239,12 @@ { char *this_opt; + printk("options = %s\n", options); if (!options || !*options) return 0; while ((this_opt = strsep(&options, ",")) != NULL) { + printk("this_opt = %s\n", this_opt); if (!*this_opt) continue; if (! strcmp(this_opt, "redraw")) @@ -227,6 +253,14 @@ ypan=1; else if (! strcmp(this_opt, "ywrap")) ypan=2; + else if (!strncmp(this_opt, "tv=", 3)) { + printk("detected \"tv=\"\n"); + printk("cmd line: %s\n", this_opt); + if(!strncmp(this_opt + 3, "PAL", 3)) + tv_encoding = TV_ENC_PAL; + else if(!strncmp(this_opt + 3, "NTSC", 4)) + tv_encoding = TV_ENC_NTSC; + } } return 0; } @@ -236,12 +270,17 @@ int video_cmap_len; int i; + // detect current video mode + if (tv_encoding == TV_ENC_DETECT) { + tv_encoding = ((gamecube_video[0] >> 8) & 3) + 1; + } + gamecubefb_defined.bits_per_pixel = 16; gamecubefb_defined.xres = 640; - gamecubefb_defined.yres = 576; - gamecubefb_fix.line_length = 640*2; - gamecubefb_fix.smem_len = 640*576*2; - gamecubefb_fix.smem_start = (24*1024*1024)-gamecubefb_fix.smem_len; + gamecubefb_defined.yres = (tv_encoding == TV_ENC_NTSC) ? 480 : 576; + gamecubefb_fix.line_length = gamecubefb_defined.xres * (gamecubefb_defined.bits_per_pixel/8); + gamecubefb_fix.smem_len = gamecubefb_fix.line_length * gamecubefb_defined.yres; + gamecubefb_fix.smem_start = (24*1024*1024)-gamecubefb_fix.smem_len; /* end of RAM */ gamecubefb_fix.visual = (gamecubefb_defined.bits_per_pixel == 8) ? FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR; @@ -262,16 +301,13 @@ return -EIO; } - //MISTFIX - //fb_info.screen_base = gamecubefb_fix.smem_start; - printk(KERN_INFO "gamecubefb: framebuffer at 0x%lx, mapped to 0x%p, size %dk\n", gamecubefb_fix.smem_start, fb_info.screen_base, gamecubefb_fix.smem_len/1024); printk(KERN_INFO "gamecubefb: mode is %dx%dx%d, linelength=%d, pages=%d\n", gamecubefb_defined.xres, gamecubefb_defined.yres, gamecubefb_defined.bits_per_pixel, gamecubefb_fix.line_length, 0); //screen_info.pages); - gamecubefb_defined.xres_virtual = 640; - gamecubefb_defined.yres_virtual = 576; + gamecubefb_defined.xres_virtual = gamecubefb_defined.xres; + gamecubefb_defined.yres_virtual = gamecubefb_defined.yres; ypan = 0; /* some dummy values for timing to make fbset happy */ @@ -310,39 +346,24 @@ if (register_framebuffer(&fb_info)<0) return -EINVAL; -volatile static unsigned int *gamecube_video = (unsigned int*) 0xCC002000; -static const unsigned int VIDEO_Mode640X480Pal50YUV16[32] = { -0x11F50101, 0x4B6A01B0, 0x02F85640, 0x00010023, -0x00000024, 0x4D2B4D6D, 0x4D8A4D4C, 0x00435A4E, -0x00000000, 0x00435A4E, 0x00000000, 0x013C0144, -0x113901B1, 0x10010001, 0x00010001, 0x00010001, -0x00000000, 0x00000000, 0x28500100, 0x1AE771F0, -0x0DB4A574, 0x00C1188E, 0xC4C0CBE2, 0xFCECDECF, -0x13130F08, 0x00080C0F, 0x00FF0000, 0x00000000, -0x02800000, 0x000000FF, 0x00FF00FF, 0x00FF00FF}; + unsigned int *VIDEO_Mode; + + printk("tv_encoding = %i\n", tv_encoding); + + if (tv_encoding == TV_ENC_NTSC) + VIDEO_Mode = VIDEO_Mode640X480NtscYUV16; + else + VIDEO_Mode = VIDEO_Mode640X480Pal50YUV16; // initialize screen for(i=0; i<32; i++) { - gamecube_video[i] = VIDEO_Mode640X480Pal50YUV16[i]; + gamecube_video[i] = VIDEO_Mode[i]; } gamecube_video[7] = 0x10000000 | (gamecubefb_fix.smem_start>>5); - printk("POKE(%x,%x)\n", &gamecube_video[7], 0x10000000 | (gamecubefb_fix.smem_start>>5)); gamecube_video[9] = 0x10000000 | ((gamecubefb_fix.smem_start+gamecubefb_fix.line_length)>>5); - printk("POKE(%x,%x)\n", &gamecube_video[9], (gamecubefb_fix.smem_start+gamecubefb_fix.line_length)>>5); - -#if 1 - /* clear screen */ - int c = 640*576/2; - //unsigned long *p = (unsigned long*)fb_info.screen_base; - unsigned long *p = (unsigned long*)fb_info.screen_base; - while (c--) - *p++ = 0x00800080; -#endif - printk("Clearing screen at %x\n",fb_info.screen_base); printk(KERN_INFO "fb%d: %s frame buffer device\n", fb_info.node, fb_info.fix.id); - return 0; } |
From: <se...@pr...> - 2004-02-01 22:26:18
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15773 Modified Files: gc-net.c Log Message: Removed some debug messages. Index: gc-net.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gc-net.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- gc-net.c 1 Feb 2004 21:44:47 -0000 1.5 +++ gc-net.c 1 Feb 2004 22:24:22 -0000 1.6 @@ -870,7 +870,7 @@ //select_nic(); rx_page = 0; /* used by RESET */ - printk("initializing BBA...\n"); +// printk("initializing BBA...\n"); eth_outb(0x60, 0); // unknown udelay(10000); @@ -883,9 +883,9 @@ eth_exi_outs(4, "\xd1\x07\x75\x75", 2); eth_exi_outb(5, 0x4e); - printk("BBA %02x %02x %02x %02x %02x %02x %02x %02x\n", - eth_exi_inb(0), eth_exi_inb(1), eth_exi_inb(2), eth_exi_inb(3), - eth_exi_inb(4), eth_exi_inb(5), eth_exi_inb(6), eth_exi_inb(7)); +// printk("BBA %02x %02x %02x %02x %02x %02x %02x %02x\n", +// eth_exi_inb(0), eth_exi_inb(1), eth_exi_inb(2), eth_exi_inb(3), +// eth_exi_inb(4), eth_exi_inb(5), eth_exi_inb(6), eth_exi_inb(7)); eth_outb(0x5b, eth_inb(0x5b)&~(1<<7)); eth_outb(0x5e, 1); eth_outb(0x5c, eth_inb(0x5c)|4); @@ -912,9 +912,9 @@ eth_outb(0x32, 8); eth_ins(0x20, dev->dev_addr, ETH_LEN); - printk("MAC ADDRESS %02x:%02x:%02x:%02x:%02x:%02x\n", - dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], - dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); +// printk("MAC ADDRESS %02x:%02x:%02x:%02x:%02x:%02x\n", +// dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], +// dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); /* Get the adapter ethernet address from the ROM */ for (i = 0; i < ETH_ALEN; i++) { @@ -934,7 +934,7 @@ eth_outb(8, 0xFF); // enable all IRQs eth_outb(9, 0xFF); // clear all irqs - printk("after all: irq mask %x %x\n", eth_inb(8), eth_inb(9)); +// printk("after all: irq mask %x %x\n", eth_inb(8), eth_inb(9)); // netif_start_queue(dev); @@ -983,7 +983,7 @@ { eth_exi_outb(3, 0x40); eth_exi_outb(2, 0xF8); - printk("GCIF - EXI - 0x40!\n"); +// printk("GCIF - EXI - 0x40!\n"); adapter_init(dev); return; @@ -1010,7 +1010,7 @@ eth_exi_outb(2, 0xF8); return; } - printk("GCIF - EXI - ?? %02x\n", s); +// printk("GCIF - EXI - ?? %02x\n", s); eth_exi_outb(2, 0xF8); } |
From: <se...@pr...> - 2004-02-01 22:15:15
|
Update of /cvsroot/gc-linux/htdocs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6230 Modified Files: .htaccess Added Files: com2org.php Log Message: Added auto redirection to .org --- NEW FILE: com2org.php --- <?php $host = $_SERVER['HTTP_HOST']; if (strcasecmp($host, "www.gc-linux.org") != 0) { header("Location: http://www.gc-linux.org".$_SERVER['REQUEST_URI']); exit; } ?> Index: .htaccess =================================================================== RCS file: /cvsroot/gc-linux/htdocs/.htaccess,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- .htaccess 23 Jan 2004 11:50:35 -0000 1.1.1.1 +++ .htaccess 1 Feb 2004 22:13:20 -0000 1.2 @@ -1,5 +1,7 @@ AddType image/x-icon .ico +php_value auto_prepend_file com2org.php + <Files docs> ForceType application/x-httpd-php </Files> |
From: <se...@pr...> - 2004-02-01 21:46:43
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14146 Modified Files: gc-net.c Log Message: Once in a while unknown 0x40 happens. As a hotfix we reset the BBA everytime that happens... Index: gc-net.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gc-net.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- gc-net.c 1 Feb 2004 21:18:18 -0000 1.4 +++ gc-net.c 1 Feb 2004 21:44:47 -0000 1.5 @@ -981,10 +981,13 @@ } if (s & 0x40) { - printk("GCIF - EXI - 0x40!\n"); eth_exi_outb(3, 0x40); eth_exi_outb(2, 0xF8); + printk("GCIF - EXI - 0x40!\n"); + adapter_init(dev); return; + +// return; } if (s & 0x20) { |
From: <se...@pr...> - 2004-02-01 21:45:22
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22645 Modified Files: gc-net.c Log Message: tmbinc fixed some things here and there. like acking before handling and not after... and now this beast seems to work nice... Index: gc-net.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gc-net.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gc-net.c 1 Feb 2004 12:42:51 -0000 1.3 +++ gc-net.c 1 Feb 2004 21:18:18 -0000 1.4 @@ -49,9 +49,14 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// /* exi_select: enable chip select, set speed */ + +int selected = 0; void exi_select(int channel, int device, int freq) { volatile unsigned long *exi = (volatile unsigned long *)0xCC006800; + selected ++; + if (selected != 1) + panic("-------- select while selected!\n"); long d; // exi_select d = exi[channel * 5]; @@ -64,6 +69,9 @@ void exi_deselect(int channel) { volatile unsigned long *exi = (volatile unsigned long *)0xCC006800; + selected--; + if (selected) + panic("deselect broken!"); exi[channel * 5] &= 0x405; } @@ -97,7 +105,7 @@ while (exi[channel * 5 + 3] & 1); if (exi_last_addr) - { + { int i; unsigned long d; d = exi[channel * 5 + 4]; @@ -137,7 +145,6 @@ { if (exi_handler[t]) { - printk("CALL HANDLER\n"); exi_handler[t](t/3, t%3, exi_handler_context[t]); return 1; } else @@ -164,34 +171,12 @@ } } -void exi_interrupt_debug_handler(int irq, void *c) -{ - int ch; - for (ch = 0; ch < 3; ++ch) - { - unsigned long v = (*(unsigned long*)(0xcc006800 + ch * 0x14)); // & 0xC0F; - v &= v<<1; - printk("ch %d c %08x\n", ch, (unsigned int)v); - if (v & 0x800) - if (!have_irq(ch * 3 + EXI_EVENT_INSERT)) - ; // v &= ~0x800; - if (v & 8) - if (!have_irq(ch * 3 + EXI_EVENT_TC)) - ; // v &= ~8; - if (v & 2) - if (!have_irq(ch * 3 + EXI_EVENT_IRQ)) - ; /// v &= ~2; - *(unsigned long*)(0xcc006800 + ch * 0x14) |= v; - } -} - - void exi_init() { printk("EXI: init interrupts\n"); //request_irq(IRQ_EXI, exi_interrupt_handler, 0); //request_debug_irq(IRQ_EXI, exi_interrupt_debug_handler, 0); - + *(unsigned long*)(0xcc006814) |= 3<<10; // enable&clear irq for insertion } @@ -204,7 +189,7 @@ } exi_handler[channel * 3 + event] = handler; exi_handler_context[channel * 3 + event] = context; - + switch (event) { case EXI_EVENT_TC: @@ -346,7 +331,6 @@ exi_imm(0, &val, 4, EXI_WRITE, 0); exi_sync(0); exi_imm_ex(0, res, len, EXI_READ); - exi_sync(0); exi_deselect(0); } @@ -400,7 +384,7 @@ static inline u8 de600_read_byte(unsigned char type, struct net_device *dev) { - // dev used by macros + // dev used by macros u8 lo; outb_p((type), DATA_PORT); lo = ((unsigned char)inb(STATUS_PORT)) >> 4; @@ -422,7 +406,7 @@ { unsigned long flags; printk("gc_bba_open\n"); - + int ret = request_irq(BBA_IRQ, gc_bba_interrupt, 0, dev->name, dev); if (ret) { printk(KERN_ERR "%s: unable to get IRQ %d\n", dev->name, BBA_IRQ); @@ -472,7 +456,7 @@ * Copy a buffer to the adapter transmit page memory. * Start sending. */ - + static int gc_bba_start_xmit(struct sk_buff *skb, struct net_device *dev) { unsigned long flags; @@ -482,8 +466,6 @@ u8 *buffer = skb->data; int i; - printk("xmit\n"); - if (free_tx_pages <= 0) { /* Do timeouts, to avoid hangs. */ tickssofar = jiffies - dev->trans_start; if (tickssofar < 5) @@ -502,68 +484,64 @@ // netif_stop_queue(dev); /* Start real output */ - printk("gc_bba_start_xmit:len=%d, page %d/%d\n", skb->len, tx_fifo_in, free_tx_pages); +// printk("gc_bba_start_xmit:len=%d, page %d/%d\n", skb->len, tx_fifo_in, free_tx_pages); if ((len = skb->len) < RUNT) len = RUNT; spin_lock_irqsave(&gc_bba_lock, flags); - + dev->trans_start = jiffies; unsigned int val=0xC0004800; // register 0x48 is the output queue - + struct pbuf *q; - + exi_select(0, 2, 5); exi_imm(0, &val, 4, EXI_WRITE, 0); exi_sync(0); - + exi_imm_ex(0, buffer, skb->len, EXI_WRITE); - + char buf0[1024]; memset(buf0, 0, 1024); - + if (len != skb->len) - exi_imm_ex(0, buf0, len-skb->len, EXI_WRITE); + exi_imm_ex(0, buf0, len-skb->len, EXI_WRITE); exi_deselect(0); - -// netif_start_queue(dev); +// netif_start_queue(dev); val = eth_inb(0); if (val & 4) { printk("err USE!\n"); - spin_unlock_irqrestore(&gc_bba_lock, flags); - dev_kfree_skb(skb); + spin_unlock_irqrestore(&gc_bba_lock, flags); + dev_kfree_skb(skb); return 1; } val|=4; eth_outb(0, val); - + // printk("DEBUG: waiting for tx done!\n"); -/* int counter = 1000; - while ((!(eth_inb(9)&0x14)) && counter--); - + while (!(eth_inb(9)&0x14)); + if (eth_inb(9) & 0x10) { printk("TRANSMIT ERROR!\n"); - eth_outb(9, 0x10); +// eth_outb(9, 0x10); } - - if (eth_inb(9) & 0x4) - eth_outb(9, 0x4); -*/ + +// if (eth_inb(9) & 0x4) +// eth_outb(9, 0x4); // while (!(eth_inb(0)&0x02)); - + // int s = eth_inb(4); // if (s) // printk("tx error %02x\n", s); - spin_unlock_irqrestore(&gc_bba_lock, flags); dev_kfree_skb(skb); @@ -587,7 +565,7 @@ p_read = eth_inb(0x18); p_read |= eth_inb(0x19) << 8; // printk("w %x r %x\n", p_write, p_read); - + if (p_read == p_write) { printk("nothing left.\n"); @@ -601,16 +579,13 @@ printk("NO DATA AVAILABLE!\n"); return 0; } - + len=0; - - descr[0] = eth_inb((p_read<<8) + 0); - descr[1] = eth_inb((p_read<<8) + 1); - descr[2] = eth_inb((p_read<<8) + 2); - descr[3] = eth_inb((p_read<<8) + 3); - + + eth_ins(p_read << 8, descr, 4); + len = (descr[1] >> 4) | (descr[2]<<4); - + len-=4; //??? if ((len < 32) || (len > 1535)) { @@ -632,17 +607,19 @@ /* 'skb->data' points to the start of sk_buff data area. */ buffer = skb_put(skb,len); - - printk("There are %u bytes data\n", len); - + +// printk("There are %u bytes data\n", len); + ptr = (p_read << 8) + 4; - for (i=0; i<len; ++i) + + if (ptr + len > 0x1000) { - if (ptr == 0x1000) // wrap around - ptr = 0x100; - buffer[i]=eth_inb(ptr++); // skip descriptor - } - + int len1 = 0x1000 - ptr - len; + eth_ins(ptr, buffer, len1); + eth_ins(ptr, buffer + len1, len - len1); + } else + eth_ins(ptr, buffer, len); + eth_outb(0x18, descr[0] & 0xFF); eth_outb(0x19, descr[1] & 0xFF); @@ -655,24 +632,7 @@ ((struct net_device_stats *)(dev->priv))->rx_packets++; /* count all receives */ ((struct net_device_stats *)(dev->priv))->rx_bytes += len; /* count all received bytes */ - -// i=0; -// p = pbuf_alloc(PBUF_LINK, len, PBUF_POOL); -// if(p != NULL) { - /* We iterate over the pbuf chain until we have read the entire - packet into the pbuf. */ -// for(q = p; q != NULL; q = q->next) { - /* Read enough bytes to fill this pbuf in the chain. The - avaliable data in the pbuf is given by the q->len - variable. */ - /* read data into(q->payload, q->len); */ -// memcpy(q->payload, buffer+i, q->len); -// i+=q->len; - // exi_imm_ex(0, q->payload, q->len, EXI_READ); -// } -// } - - return p; + return p; } @@ -680,33 +640,33 @@ { // struct gcif *gcif; // gcif = netif->state; - + unsigned short p_read, p_write; int inb9 = eth_inb(9); int inb8 = eth_inb(8); - + int status = inb9 & inb8; - - printk("gcif_service: %08x %08x status %08x\n", inb8, inb9, status); - + +// printk("gcif_service: %08x %08x status %08x\n", inb8, inb9, status); + if (!status) { + eth_outb(9, 0xff); printk("?? GC irq but no irq ??\n"); -// eth_outb(9, 0xff); } - - if (status & 4) - { -// eth_outb(9, status); - int s = eth_inb(4); - if (s) - printk("tx error %02x\n", s); + if (status & 4) + { + eth_outb(9, 4); + int s = eth_inb(4); + if (s) // should not occur, since 4 == TX OK + printk("tx error %02x\n", s); } - + if (status & 2) { + eth_outb(9, 2); while (1) { p_write = eth_inb(0x16); @@ -718,22 +678,36 @@ if (p_write == p_read) break; gc_input(dev); -printk("Break\n"); - break; } -// eth_outb(9, status); } if (status & 8) { + eth_outb(9, 8); printk("receive error :(\n"); -// eth_outb(9, 8); } - if (status & ~(8|2)) + + if (status & 0x10) { - printk("status %02x\n", status); -// eth_outb(9, ~(8|2)); + eth_outb(9, 0x10); + printk("tx error\n"); } - eth_outb(9, status); + if (status & 0x20) + { + eth_outb(9, 0x20); + printk("rx fifo error\n"); + } + if (status & 0x80) + { + eth_outb(9, 0x80); + printk("rx overflow!\n"); + } + + if (status & ~(0xBE)) + { + eth_outb(9, status & ~0xBE); + printk("status %02x\n", status & ~0xBE); + } +// eth_outb(9, status); } @@ -763,7 +737,7 @@ { unsigned long v = (*(unsigned long*)(0xcc006800 + ch * 0x14)); // & 0xC0F; v &= v<<1; -// *(unsigned long*)(0xcc006800 + ch * 0x14) |= v; + *(unsigned long*)(0xcc006800 + ch * 0x14) |= v; exi_handler_context[ch * 3 + EXI_EVENT_IRQ] = dev; if (v & 0x800) have_irq(ch * 3 + EXI_EVENT_INSERT); @@ -771,7 +745,6 @@ have_irq(ch * 3 + EXI_EVENT_TC); if (v & 2) have_irq(ch * 3 + EXI_EVENT_IRQ); - *(unsigned long*)(0xcc006800 + ch * 0x14) |= v; } if (retrig) @@ -798,18 +771,18 @@ /* probe for adapter */ rx_page = 0; //select_nic(); - + exi_select(0, 2, 5); exi_imm_ex(0, &s, 2, EXI_WRITE); exi_imm_ex(0, &l, 4, EXI_READ); exi_deselect(0); - + printk(": %u\n", l); if (l != 0x4020200) { printk("BBA not found"); return -ENODEV; } - + printk("initializing BBA...\n"); @@ -823,9 +796,9 @@ eth_exi_outs(4, "\xd1\x07\x75\x75", 2); eth_exi_outb(5, 0x4e); - + printk("BBA %02x %02x %02x %02x %02x %02x %02x %02x\n", - eth_exi_inb(0), eth_exi_inb(1), eth_exi_inb(2), eth_exi_inb(3), + eth_exi_inb(0), eth_exi_inb(1), eth_exi_inb(2), eth_exi_inb(3), eth_exi_inb(4), eth_exi_inb(5), eth_exi_inb(6), eth_exi_inb(7)); eth_outb(0x5b, eth_inb(0x5b)&~(1<<7)); @@ -836,7 +809,7 @@ eth_outb(0x50, 0x80); udelay(10000); - + // recvinit eth_outb(0xA, 0x1); eth_outb(0xB, 0x0); @@ -844,18 +817,18 @@ eth_outb(0x17, 0x0); eth_outb(0x18, 0x1); eth_outb(0x19, 0x0); - + eth_outb(0x1a, 0xF); eth_outb(0x1b, 0); - + eth_outb(1, (eth_inb(1) & 0xFE) | 0x12); - + eth_outb(0, 8); eth_outb(0x32, 8); - - eth_ins(0x20, dev->dev_addr, ETH_LEN); - printk("MAC ADDRESS %02x:%02x:%02x:%02x:%02x:%02x\n", - dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], + + eth_ins(0x20, dev->dev_addr, ETH_LEN); + printk("MAC ADDRESS %02x:%02x:%02x:%02x:%02x:%02x\n", + dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); /* Get the adapter ethernet address from the ROM */ @@ -865,7 +838,7 @@ eth_exi_outb(0x2, 0xFF); eth_exi_outb(0x3, 0xFF); - + eth_outb(8, 0xFF); // enable all IRQs eth_outb(9, 0xFF); // clear all irqs @@ -909,9 +882,9 @@ eth_exi_outs(4, "\xd1\x07\x75\x75", 2); eth_exi_outb(5, 0x4e); - + printk("BBA %02x %02x %02x %02x %02x %02x %02x %02x\n", - eth_exi_inb(0), eth_exi_inb(1), eth_exi_inb(2), eth_exi_inb(3), + eth_exi_inb(0), eth_exi_inb(1), eth_exi_inb(2), eth_exi_inb(3), eth_exi_inb(4), eth_exi_inb(5), eth_exi_inb(6), eth_exi_inb(7)); eth_outb(0x5b, eth_inb(0x5b)&~(1<<7)); eth_outb(0x5e, 1); @@ -921,7 +894,7 @@ eth_outb(0x50, 0x80); udelay(10000); - + // recvinit eth_outb(0xA, 0x1); eth_outb(0xB, 0x0); @@ -929,35 +902,35 @@ eth_outb(0x17, 0x0); eth_outb(0x18, 0x1); eth_outb(0x19, 0x0); - + eth_outb(0x1a, 0xF); eth_outb(0x1b, 0); - + eth_outb(1, (eth_inb(1) & 0xFE) | 0x12); - + eth_outb(0, 8); eth_outb(0x32, 8); - eth_ins(0x20, dev->dev_addr, ETH_LEN); - printk("MAC ADDRESS %02x:%02x:%02x:%02x:%02x:%02x\n", - dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], + eth_ins(0x20, dev->dev_addr, ETH_LEN); + printk("MAC ADDRESS %02x:%02x:%02x:%02x:%02x:%02x\n", + dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); /* Get the adapter ethernet address from the ROM */ for (i = 0; i < ETH_ALEN; i++) { dev->broadcast[i] = 0xff; } - -// eth_ins(0x20, dev->ethaddr->addr, 6); -// printk("MAC ADDRESS %02x:%02x:%02x:%02x:%02x:%02x\n", -// gcif->ethaddr->addr[0], gcif->ethaddr->addr[1], gcif->ethaddr->addr[2], + +// eth_ins(0x20, dev->ethaddr->addr, 6); +// printk("MAC ADDRESS %02x:%02x:%02x:%02x:%02x:%02x\n", +// gcif->ethaddr->addr[0], gcif->ethaddr->addr[1], gcif->ethaddr->addr[2], // gcif->ethaddr->addr[3], gcif->ethaddr->addr[4], gcif->ethaddr->addr[5]); exi_request_irq(2, EXI_EVENT_IRQ, gcif_irq_handler, NULL); eth_exi_outb(0x2, 0xFF); eth_exi_outb(0x3, 0xFF); - + eth_outb(8, 0xFF); // enable all IRQs eth_outb(9, 0xFF); // clear all irqs @@ -974,9 +947,9 @@ { printk("gc_bba_init\n"); spin_lock_init(&gc_bba_lock); - + // exi_init(); - + gc_bba_dev.init = gc_bba_probe; if (register_netdev(&gc_bba_dev) != 0) return -EIO; @@ -994,12 +967,13 @@ // struct netif *netif = (struct netif*)ct; int s; struct net_device *dev = (struct net_device *)ct; - + eth_exi_outb(2, 0); s = eth_exi_inb(3); - + if (s & 0x80) { +// printk("GC_IRQ service.\n"); eth_exi_outb(3, 0x80); gcif_service(dev); eth_exi_outb(2, 0xF8); |
From: <mi...@pr...> - 2004-02-01 20:51:16
|
Update of /cvsroot/gc-linux/linux/drivers/video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30151/drivers/video Modified Files: gamecubefb.c Log Message: framebuffer now located at the very top of RAM Index: gamecubefb.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/video/gamecubefb.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- gamecubefb.c 29 Jan 2004 23:45:48 -0000 1.4 +++ gamecubefb.c 1 Feb 2004 20:49:19 -0000 1.5 @@ -236,12 +236,12 @@ int video_cmap_len; int i; - gamecubefb_fix.smem_start = 0xd0c00000; gamecubefb_defined.bits_per_pixel = 16; gamecubefb_defined.xres = 640; gamecubefb_defined.yres = 576; gamecubefb_fix.line_length = 640*2; gamecubefb_fix.smem_len = 640*576*2; + gamecubefb_fix.smem_start = (24*1024*1024)-gamecubefb_fix.smem_len; gamecubefb_fix.visual = (gamecubefb_defined.bits_per_pixel == 8) ? FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR; @@ -263,7 +263,7 @@ } //MISTFIX - fb_info.screen_base = gamecubefb_fix.smem_start; + //fb_info.screen_base = gamecubefb_fix.smem_start; printk(KERN_INFO "gamecubefb: framebuffer at 0x%lx, mapped to 0x%p, size %dk\n", gamecubefb_fix.smem_start, fb_info.screen_base, gamecubefb_fix.smem_len/1024); @@ -300,7 +300,6 @@ gamecubefb_fix.ywrapstep = (ypan>1) ? 1 : 0; fb_info.fbops = &gamecubefb_ops; - printk("ops set\n"); fb_info.var = gamecubefb_defined; fb_info.fix = gamecubefb_fix; fb_info.pseudo_palette = pseudo_palette; @@ -311,14 +310,35 @@ if (register_framebuffer(&fb_info)<0) return -EINVAL; -#if 0 +volatile static unsigned int *gamecube_video = (unsigned int*) 0xCC002000; +static const unsigned int VIDEO_Mode640X480Pal50YUV16[32] = { +0x11F50101, 0x4B6A01B0, 0x02F85640, 0x00010023, +0x00000024, 0x4D2B4D6D, 0x4D8A4D4C, 0x00435A4E, +0x00000000, 0x00435A4E, 0x00000000, 0x013C0144, +0x113901B1, 0x10010001, 0x00010001, 0x00010001, +0x00000000, 0x00000000, 0x28500100, 0x1AE771F0, +0x0DB4A574, 0x00C1188E, 0xC4C0CBE2, 0xFCECDECF, +0x13130F08, 0x00080C0F, 0x00FF0000, 0x00000000, +0x02800000, 0x000000FF, 0x00FF00FF, 0x00FF00FF}; + + // initialize screen + for(i=0; i<32; i++) { + gamecube_video[i] = VIDEO_Mode640X480Pal50YUV16[i]; + } + gamecube_video[7] = 0x10000000 | (gamecubefb_fix.smem_start>>5); + printk("POKE(%x,%x)\n", &gamecube_video[7], 0x10000000 | (gamecubefb_fix.smem_start>>5)); + gamecube_video[9] = 0x10000000 | ((gamecubefb_fix.smem_start+gamecubefb_fix.line_length)>>5); + printk("POKE(%x,%x)\n", &gamecube_video[9], (gamecubefb_fix.smem_start+gamecubefb_fix.line_length)>>5); + +#if 1 /* clear screen */ int c = 640*576/2; //unsigned long *p = (unsigned long*)fb_info.screen_base; - unsigned long *p = (unsigned long*)gamecubefb_fix.smem_start; + unsigned long *p = (unsigned long*)fb_info.screen_base; while (c--) *p++ = 0x00800080; #endif + printk("Clearing screen at %x\n",fb_info.screen_base); printk(KERN_INFO "fb%d: %s frame buffer device\n", fb_info.node, fb_info.fix.id); |
From: <se...@pr...> - 2004-02-01 12:44:43
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30129/drivers/net Modified Files: gc-net.c Log Message: I need more understanding of both BBA and linux net drivers. reaction still gets slower telnet logins are possible if you are fast enough but not really useable because BBA drops in speed like 1 packet all 10 seconds... Index: gc-net.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gc-net.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gc-net.c 31 Jan 2004 12:09:12 -0000 1.2 +++ gc-net.c 1 Feb 2004 12:42:51 -0000 1.3 @@ -154,13 +154,13 @@ { unsigned long v = (*(unsigned long*)(0xcc006800 + ch * 0x14)); // & 0xC0F; v &= v<<1; + *(unsigned long*)(0xcc006800 + ch * 0x14) |= v; if (v & 0x800) have_irq(ch * 3 + EXI_EVENT_INSERT); if (v & 8) have_irq(ch * 3 + EXI_EVENT_TC); if (v & 2) have_irq(ch * 3 + EXI_EVENT_IRQ); - *(unsigned long*)(0xcc006800 + ch * 0x14) |= v; } } @@ -482,6 +482,8 @@ u8 *buffer = skb->data; int i; + printk("xmit\n"); + if (free_tx_pages <= 0) { /* Do timeouts, to avoid hangs. */ tickssofar = jiffies - dev->trans_start; if (tickssofar < 5) @@ -497,6 +499,8 @@ spin_unlock_irqrestore(&gc_bba_lock, flags); } +// netif_stop_queue(dev); + /* Start real output */ printk("gc_bba_start_xmit:len=%d, page %d/%d\n", skb->len, tx_fifo_in, free_tx_pages); @@ -504,6 +508,8 @@ len = RUNT; spin_lock_irqsave(&gc_bba_lock, flags); + + dev->trans_start = jiffies; unsigned int val=0xC0004800; // register 0x48 is the output queue @@ -514,8 +520,17 @@ exi_sync(0); exi_imm_ex(0, buffer, skb->len, EXI_WRITE); + + char buf0[1024]; + memset(buf0, 0, 1024); + + if (len != skb->len) + exi_imm_ex(0, buf0, len-skb->len, EXI_WRITE); exi_deselect(0); + +// netif_start_queue(dev); + val = eth_inb(0); if (val & 4) @@ -530,7 +545,8 @@ // printk("DEBUG: waiting for tx done!\n"); - while (!(eth_inb(9)&0x14)); +/* int counter = 1000; + while ((!(eth_inb(9)&0x14)) && counter--); if (eth_inb(9) & 0x10) { @@ -540,10 +556,13 @@ if (eth_inb(9) & 0x4) eth_outb(9, 0x4); +*/ + +// while (!(eth_inb(0)&0x02)); - int s = eth_inb(4); - if (s) - printk("tx error %02x\n", s); +// int s = eth_inb(4); +// if (s) +// printk("tx error %02x\n", s); spin_unlock_irqrestore(&gc_bba_lock, flags); @@ -664,13 +683,27 @@ unsigned short p_read, p_write; + int inb9 = eth_inb(9); + int inb8 = eth_inb(8); - int status = eth_inb(9) & eth_inb(8); + int status = inb9 & inb8; - printk("gcif_service: status %08x\n", status); + printk("gcif_service: %08x %08x status %08x\n", inb8, inb9, status); - if (!status) + if (!status) { printk("?? GC irq but no irq ??\n"); +// eth_outb(9, 0xff); + } + + if (status & 4) + { +// eth_outb(9, status); + int s = eth_inb(4); + if (s) + printk("tx error %02x\n", s); + + + } if (status & 2) { @@ -688,18 +721,19 @@ printk("Break\n"); break; } - eth_outb(9, 2); +// eth_outb(9, status); } if (status & 8) { printk("receive error :(\n"); - eth_outb(9, 8); +// eth_outb(9, 8); } if (status & ~(8|2)) { printk("status %02x\n", status); - eth_outb(9, ~(8|2)); +// eth_outb(9, ~(8|2)); } + eth_outb(9, status); } @@ -729,6 +763,7 @@ { unsigned long v = (*(unsigned long*)(0xcc006800 + ch * 0x14)); // & 0xC0F; v &= v<<1; +// *(unsigned long*)(0xcc006800 + ch * 0x14) |= v; exi_handler_context[ch * 3 + EXI_EVENT_IRQ] = dev; if (v & 0x800) have_irq(ch * 3 + EXI_EVENT_INSERT); @@ -744,56 +779,6 @@ spin_unlock(&gc_bba_lock); return IRQ_HANDLED; - - -// struct netif *netif = (struct netif*)ct; - int s; - - eth_exi_outb(2, 0); - s = eth_exi_inb(3); - - if (s & 0x80) - { - eth_exi_outb(3, 0x80); - gcif_service(dev); - eth_exi_outb(2, 0xF8); - return; - } - if (s & 0x40) - { - printk("GCIF - EXI - 0x40!\n"); - eth_exi_outb(3, 0x40); - eth_exi_outb(2, 0xF8); - return; - } - if (s & 0x20) - { - printk("GCIF - EXI - CMDERR!\n"); - eth_exi_outb(3, 0x20); - eth_exi_outb(2, 0xF8); - return; - } - if (s & 0x10) - { - printk("GCIF - EXI - patchtru!\n"); - eth_exi_outb(3, 0x10); - eth_exi_outb(2, 0xF8); - return; - } - if (s & 0x08) - { - printk("GCIF - EXI - HASH function\n"); - eth_exi_outb(3, 0x08); - eth_exi_outb(2, 0xF8); - return; - } - printk("GCIF - EXI - ?? %02x\n", s); - eth_exi_outb(2, 0xF8); - - if (retrig) - trigger_interrupt(dev); - spin_unlock(&gc_bba_lock); - return IRQ_HANDLED; } @@ -978,7 +963,7 @@ printk("after all: irq mask %x %x\n", eth_inb(8), eth_inb(9)); - netif_start_queue(dev); +// netif_start_queue(dev); return 0; /* OK */ } @@ -989,6 +974,9 @@ { printk("gc_bba_init\n"); spin_lock_init(&gc_bba_lock); + +// exi_init(); + gc_bba_dev.init = gc_bba_probe; if (register_netdev(&gc_bba_dev) != 0) return -EIO; |
From: <se...@pr...> - 2004-01-31 12:10:53
|
Update of /cvsroot/gc-linux/linux/drivers/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14911/drivers/net Modified Files: gc-net.c Log Message: Driver should now answer packets. Needs debugging: 1) gets slower with the time 2) stops working (maybe EXI problem, different EXI irq?) Index: gc-net.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/net/gc-net.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gc-net.c 31 Jan 2004 02:47:01 -0000 1.1 +++ gc-net.c 31 Jan 2004 12:09:12 -0000 1.2 @@ -1,5 +1,5 @@ /* ------------------------------------------------------------------------- */ -/* gc-bba.c GameCube BroadBand Adaptor Driver */ +/* gc-net.c GameCube BroadBand Adaptor Driver */ /* ------------------------------------------------------------------------- */ /* Copyright (C) 2004 Stefan Esser @@ -505,17 +505,59 @@ spin_lock_irqsave(&gc_bba_lock, flags); + unsigned int val=0xC0004800; // register 0x48 is the output queue + + struct pbuf *q; + + exi_select(0, 2, 5); + exi_imm(0, &val, 4, EXI_WRITE, 0); + exi_sync(0); + + exi_imm_ex(0, buffer, skb->len, EXI_WRITE); + + exi_deselect(0); + + val = eth_inb(0); + if (val & 4) + { + printk("err USE!\n"); + spin_unlock_irqrestore(&gc_bba_lock, flags); + dev_kfree_skb(skb); + return 1; + } + val|=4; + eth_outb(0, val); + +// printk("DEBUG: waiting for tx done!\n"); + + while (!(eth_inb(9)&0x14)); + + if (eth_inb(9) & 0x10) + { + printk("TRANSMIT ERROR!\n"); + eth_outb(9, 0x10); + } + + if (eth_inb(9) & 0x4) + eth_outb(9, 0x4); + + int s = eth_inb(4); + if (s) + printk("tx error %02x\n", s); + spin_unlock_irqrestore(&gc_bba_lock, flags); dev_kfree_skb(skb); return 0; } -char buffer[3500]; -static char *gc_input(void *v) + +static char *gc_input(struct net_device *dev) { // struct gcif *gcif=(struct gcif*)netif->state; + struct sk_buff *skb; char *p, *q; + unsigned char *buffer; unsigned short len, p_read, p_write; int i; int ptr; @@ -550,6 +592,30 @@ len = (descr[1] >> 4) | (descr[2]<<4); + len-=4; //??? + + if ((len < 32) || (len > 1535)) { + printk(KERN_WARNING "%s: Bogus packet size %d.\n", dev->name, len); + if (len > 10000) + adapter_init(dev); + return; + } + + skb = dev_alloc_skb(len+2); + if (skb == NULL) { + printk("%s: Couldn't allocate a sk_buff of size %d.\n", dev->name, len); + return; + } + /* else */ + + skb->dev = dev; + skb_reserve(skb,2); /* Align */ + + /* 'skb->data' points to the start of sk_buff data area. */ + buffer = skb_put(skb,len); + + printk("There are %u bytes data\n", len); + ptr = (p_read << 8) + 4; for (i=0; i<len; ++i) { @@ -560,6 +626,16 @@ eth_outb(0x18, descr[0] & 0xFF); eth_outb(0x19, descr[1] & 0xFF); + + skb->protocol=eth_type_trans(skb,dev); + + netif_rx(skb); + + /* update stats */ + dev->last_rx = jiffies; + ((struct net_device_stats *)(dev->priv))->rx_packets++; /* count all receives */ + ((struct net_device_stats *)(dev->priv))->rx_bytes += len; /* count all received bytes */ + // i=0; // p = pbuf_alloc(PBUF_LINK, len, PBUF_POOL); @@ -581,7 +657,7 @@ } -static void inline gcif_service(void *netif) +static void inline gcif_service(struct net_device *dev) { // struct gcif *gcif; // gcif = netif->state; @@ -608,7 +684,7 @@ if (p_write == p_read) break; - gc_input(NULL); + gc_input(dev); printk("Break\n"); break; } @@ -653,6 +729,7 @@ { unsigned long v = (*(unsigned long*)(0xcc006800 + ch * 0x14)); // & 0xC0F; v &= v<<1; + exi_handler_context[ch * 3 + EXI_EVENT_IRQ] = dev; if (v & 0x800) have_irq(ch * 3 + EXI_EVENT_INSERT); if (v & 8) @@ -678,7 +755,7 @@ if (s & 0x80) { eth_exi_outb(3, 0x80); - gcif_service(NULL); + gcif_service(dev); eth_exi_outb(2, 0xF8); return; } @@ -928,6 +1005,7 @@ { // struct netif *netif = (struct netif*)ct; int s; + struct net_device *dev = (struct net_device *)ct; eth_exi_outb(2, 0); s = eth_exi_inb(3); @@ -935,7 +1013,7 @@ if (s & 0x80) { eth_exi_outb(3, 0x80); - gcif_service(NULL); + gcif_service(dev); eth_exi_outb(2, 0xF8); return; } |
From: <mi...@pr...> - 2004-01-31 06:55:51
|
Update of /cvsroot/gc-linux/htdocs/xml/en In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4452/xml/en Modified Files: news.xml Log Message: fb colors fixed, initrd support Index: news.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/news.xml,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- news.xml 29 Jan 2004 01:21:13 -0000 1.6 +++ news.xml 30 Jan 2004 00:21:47 -0000 1.7 @@ -2,6 +2,11 @@ <?xml-stylesheet href="news.xsl" type="text/xsl"?> <news> <item> + <date>29 January 2004</date> + <title>Initrd support</title> + <text>The framebuffer colors are okay now, and the kernel supports an initial ramdisk. (<a href="pic/hellogamecube.jpg">Screenshot</a>).</text> + </item> + <item> <date>28 January 2004</date> <title>Working framebuffer code</title> <text>The framebuffer code in CVS is now functional. Tux sits on the upper left, and kernel messages are scrolling on the screen. Because of the missing color space conversion, colors are wrong at the moment.</text> |
From: <mi...@pr...> - 2004-01-31 05:59:18
|
Update of /cvsroot/gc-linux/linux/drivers/video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9974/drivers/video Modified Files: gamecubefb.c Log Message: changed driver name to "GameCube" Index: gamecubefb.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/video/gamecubefb.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gamecubefb.c 29 Jan 2004 22:13:24 -0000 1.3 +++ gamecubefb.c 29 Jan 2004 23:45:48 -0000 1.4 @@ -34,7 +34,7 @@ }; static struct fb_fix_screeninfo gamecubefb_fix __initdata = { - .id = "VESA VGA", + .id = "GameCube", .type = FB_TYPE_PACKED_PIXELS, .accel = FB_ACCEL_NONE, }; |
From: <se...@pr...> - 2004-01-31 04:32:59
|
Update of /cvsroot/gc-linux/linux/arch/ppc/platforms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22949 Modified Files: gc-rsw.c Log Message: Fixed little cut and paste error. Index: gc-rsw.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gc-rsw.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gc-rsw.c 30 Jan 2004 02:09:35 -0000 1.1 +++ gc-rsw.c 30 Jan 2004 10:08:22 -0000 1.2 @@ -41,7 +41,7 @@ static int gc_rsw_init(void) { if (request_irq(RSW_IRQ, gc_rsw_handler, 0, "GameCube Reset Switch", 0) < 0) { - printk(KERN_ERR "i2c-elektor: Request irq%d failed\n", RSW_IRQ); + printk(KERN_ERR "gc_rsw: Request irq%d failed\n", RSW_IRQ); } else { enable_irq(RSW_IRQ); } |
From: <mi...@pr...> - 2004-01-31 04:09:02
|
Update of /cvsroot/gc-linux/htdocs/include/en In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27084/include/en Modified Files: contents.php Log Message: ... Index: contents.php =================================================================== RCS file: /cvsroot/gc-linux/htdocs/include/en/contents.php,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- contents.php 23 Jan 2004 14:36:19 -0000 1.2 +++ contents.php 30 Jan 2004 10:49:20 -0000 1.3 @@ -6,7 +6,7 @@ maketip('roadmap','','Where we are going...'); maketip('faq','','Frequently Asked Questions'); maketip('status','','The current status of the project as well as information on how to contribute'); -maketip('docs','','<b>All</b> official GameCube-Linux documentation'); +maketip('docs','','140 pages of GameCube documentation'); maketip('mailinglist','','There are two mailing lists:<br>Developer and CVS'); maketip('link','','Other projects related to GameCube-Linux.'); maketip('screenshots','','Screenshots and other media'); @@ -40,7 +40,7 @@ <p><a href="/docs/roadmap.html" onMouseOver="tip('roadmap');" onMouseOut="untip();">Roadmap</a></p> <p><a href="/docs/faq.html" onMouseOver="tip('faq');" onMouseOut="untip();"><b>FAQ</b></a></p> <p><a href="/docs/status.html" onMouseOver="tip('status');" onMouseOut="untip();">Status/Contribute</a></p> -<!--<p><a href="/docs/" onMouseOver="tip('docs');" onMouseOut="untip();"><b>Documentation</b></a></p> --> +<p><a href="/docs/yagcd.html" onMouseOver="tip('docs');" onMouseOut="untip();"><b>Documentation</b></a></p> <p><a href="/docs/mailinglist.html" onMouseOver="tip('mailinglist');" onMouseOut="untip();">Mailing Lists</a></p> <p><a href="/docs/links.html" onMouseOver="tip('link');" onMouseOut="untip();">Links</a></p> |
From: <mi...@pr...> - 2004-01-31 03:55:43
|
Update of /cvsroot/gc-linux/linux/include/linux In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32365/include/linux Log Message: Directory /cvsroot/gc-linux/linux/include/linux added to the repository |
From: <mi...@pr...> - 2004-01-31 03:29:08
|
Update of /cvsroot/gc-linux/linux/arch/ppc/platforms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19114/arch/ppc/platforms Modified Files: gamecube.c Log Message: bugfx: used to detect the first interrupt reason, even if not unmasked Index: gamecube.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gamecube.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- gamecube.c 30 Jan 2004 10:52:46 -0000 1.6 +++ gamecube.c 30 Jan 2004 12:35:07 -0000 1.7 @@ -29,8 +29,19 @@ static void gamecube_unmask_irq(unsigned int irq) { +printk("U%x",irq); + if (irq == 3) { + printk("X"); + while(1); + } + printk("\n"); + printk("GAMECUBE_PIIM = %x\n", GAMECUBE_IN(GAMECUBE_PIIM)); + printk("GAMECUBE_PIIC = %x\n", GAMECUBE_IN(GAMECUBE_PIIC)); + printk("out |= %x\n", (1 << irq)); if (irq < GAMECUBE_IRQS) { GAMECUBE_OUT(GAMECUBE_PIIM, GAMECUBE_IN(GAMECUBE_PIIM) | (1 << irq)); + printk("GAMECUBE_PIIM = %x\n", GAMECUBE_IN(GAMECUBE_PIIM)); + printk("GAMECUBE_PIIC = %x\n", GAMECUBE_IN(GAMECUBE_PIIC)); } } @@ -45,6 +56,7 @@ static void gamecube_mask_and_ack_irq(unsigned int irq) { +printk("A%x\n", irq); if (irq < GAMECUBE_IRQS) { GAMECUBE_OUT(GAMECUBE_PIIM, GAMECUBE_IN(GAMECUBE_PIIM) & ~(1 << irq)); /* mask */ GAMECUBE_OUT(GAMECUBE_PIIC, 1 << irq); /* ack */ @@ -84,8 +96,15 @@ int irq = 0; u_int irq_status, irq_test = 1; - irq_status = GAMECUBE_IN(GAMECUBE_PIIC); + printk("GAMECUBE_PIIM = %x\n", GAMECUBE_IN(GAMECUBE_PIIM)); + printk("GAMECUBE_PIIC = %x\n", GAMECUBE_IN(GAMECUBE_PIIC)); + irq_status = GAMECUBE_IN(GAMECUBE_PIIC) & GAMECUBE_IN(GAMECUBE_PIIM); + printk("irq_status = %x\n", irq_status); + if(irq_status==0) { + printk("\nPanic: IRQ for no reason!\n\n\n\n\n\n"); + while(1); + } do { if (irq_status & irq_test) @@ -94,6 +113,7 @@ irq_test <<= 1; } while (irq < GAMECUBE_IRQS); +printk("f%x: \"%x\"",irq,irq_status); return irq; } |
From: <mi...@pr...> - 2004-01-31 03:17:00
|
Update of /cvsroot/gc-linux/htdocs/xml/en In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14376/xml/en Modified Files: news.xml yagcd.xml Log Message: ... Index: news.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/news.xml,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- news.xml 30 Jan 2004 10:49:21 -0000 1.8 +++ news.xml 31 Jan 2004 03:15:20 -0000 1.9 @@ -2,6 +2,11 @@ <?xml-stylesheet href="news.xsl" type="text/xsl"?> <news> <item> + <date>30 January 2004</date> + <title>Preliminary network driver</title> + <text>Busybox is running in the initrd (thanks to hubb), interrupts are stable (mist, ionic et al.) and ionic put together a network driver (based on tmbinc's code) that prints debug messages when the GameCube is pinged. All this code is in the CVS.</text> + </item> + <item> <date>29 January 2004</date> <title>Initrd support</title> <text>The framebuffer colors are okay now (thanks to Costis), and the kernel supports an initial ramdisk (thanks to kirin). (<a href="pic/hellogamecube.jpg">Screenshot</a>)</text> Index: yagcd.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/en/yagcd.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- yagcd.xml 29 Jan 2004 01:21:13 -0000 1.4 +++ yagcd.xml 31 Jan 2004 03:15:20 -0000 1.5 @@ -9,7 +9,7 @@ <a href="../../down/yet_another_gamecube_doc.pdf.tar.gz">pdf</a> (primary document, recommended for printing)<br /> <hr /> -<small><b>last modified: Wed, 28 Jan 2004 18:35:33 </b></small><br /> +<small><b>last modified: Sat, 31 Jan 2004 02:58:52 </b></small><br /> <h1 align="center">Yet Another Gamecube Documentation<br /> <font size="-1">(but one that's worth printing)</font> </h1> @@ -688,9 +688,9 @@ <tr><td align="center">11</td><td></td></tr> -<tr><td align="center">12</td><td></td></tr> +<tr><td align="center">12</td><td>osc - xtal2</td></tr> -<tr><td align="center">13</td><td></td></tr> +<tr><td align="center">13</td><td>osc - xtal1</td></tr> <tr><td align="center">14</td><td></td></tr> </table> @@ -5954,35 +5954,33 @@ <table border="1" cellspacing="0" cellpadding="3"> <tr><td align="center"><b>bit(s)</b></td><td align="center"></td><td><b>Description</b></td></tr> -<tr><td align="center">31</td><td align="center"></td><td>ERRSTAT - Error Status</td></tr> - -<tr><td align="center">30</td><td align="center"></td><td>ERRLATCH - Error Latch</td></tr> - -<tr><td align="center">28</td><td align="center">s</td><td>Start Button</td></tr> - -<tr><td align="center">27</td><td align="center">y</td><td>Y Button</td></tr> - -<tr><td align="center">26</td><td align="center">x</td><td>X Button</td></tr> - -<tr><td align="center">25</td><td align="center">b</td><td>B Button</td></tr> +<tr><td align="center">31</td><td align="center"></td><td>ERRSTAT - Error Status (*1)</td></tr> -<tr><td align="center">24</td><td align="center">a</td><td>A Button</td></tr> +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">0</td><td>no error on last transfer</td></tr> -<tr><td align="center">21</td><td align="center">L</td><td>L Trigger</td></tr> +<tr><td align="center">1</td><td>error on last transfer</td></tr> +</table> +</td></tr> -<tr><td align="center">20</td><td align="center">R</td><td>R Trigger</td></tr> +<tr><td align="center">30</td><td align="center"></td><td>ERRLATCH - Error Latch (*2)</td></tr> -<tr><td align="center">19</td><td align="center">u</td><td>D-Pad Up</td></tr> +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">0</td><td>no error latched</td></tr> -<tr><td align="center">18</td><td align="center">d</td><td>D-Pad Down</td></tr> +<tr><td align="center">1</td><td>error latched (check SISR)</td></tr> +</table> +</td></tr> -<tr><td align="center">17</td><td align="center">r</td><td>D-Pad Right</td></tr> +<tr><td align="center">24-29</td><td align="center"></td><td>bit 0-5 of input byte 0 (bit 6 and 7 are assumed to be 0)</td></tr> -<tr><td align="center">16</td><td align="center">l</td><td>D-Pad Left</td></tr> +<tr><td align="center">16-23</td><td align="center"></td><td>input byte 1</td></tr> -<tr><td align="center">8-15</td><td align="center">x</td><td>Analog Stick X (8bit signed)</td></tr> +<tr><td align="center">8-15</td><td align="center"></td><td>input byte 2</td></tr> -<tr><td align="center">0-7</td><td align="center">y</td><td>Analog Stick Y (8bit signed)</td></tr> +<tr><td align="center">0-7</td><td align="center"></td><td>input byte 3</td></tr> </table> </td></tr> @@ -5990,6 +5988,15 @@ </table> <tt></tt> <br /> <br /> +(*1) This bit represents the current error status for the last SI polling transfer +on this channel. This register is updated after each polling transfer on this channel.<br /> +(*2) This bit is an error status summary of the SISR error bits for this channel. +If an error has occurred on a past SI transfer (polling or Com transfer), this bit +will be set. To determine the exact error, read the SISR register. This bit is actually +an `or` of the latched error status bits for this channel in the SISR. The bit is +cleared by clearing the appropriate error status bits latched in the SISR. The no +response error indicates that a controller is not present on thischannel.<br /> +<br /> <table> <tr><td><tt></tt> @@ -6032,13 +6039,13 @@ <table border="1" cellspacing="0" cellpadding="3"> <tr><td align="center"><b>bit(s)</b></td><td align="center"></td><td><b>Description</b></td></tr> -<tr><td align="center">24-31</td><td align="center">x</td><td>Analog C Stick X (8bit signed)</td></tr> +<tr><td align="center">24-31</td><td align="center">x</td><td>input byte 4</td></tr> -<tr><td align="center">16-23</td><td align="center">y</td><td>Analog C Stick Y (8bit signed)</td></tr> +<tr><td align="center">16-23</td><td align="center">y</td><td>input byte 5</td></tr> -<tr><td align="center">8-15</td><td align="center">l</td><td>L Trigger Analog (8bit signed)</td></tr> +<tr><td align="center">8-15</td><td align="center">l</td><td>input byte 6</td></tr> -<tr><td align="center">0-7</td><td align="center">r</td><td>R Trigger Analog (8bit signed)</td></tr> +<tr><td align="center">0-7</td><td align="center">r</td><td>input byte 7</td></tr> </table> </td></tr> @@ -6046,33 +6053,19 @@ </table> <tt></tt> <br /> <tt></tt> <br /> -<tt>SIC0INBUFH and SIC0INBUFL are double buffered to prevent inconsistent data -reads due to main </tt> - -<div class="p"><!----></div> -<tt>processor conflicting with incoming serial interface data. To insure data -read from SIC0INBUFH </tt> - -<div class="p"><!----></div> -<tt>and SIC0INFUBL are consistent, a locking mechanism prevents the double buffer -from copying new data </tt> - -<div class="p"><!----></div> -<tt>to these registers. Once SIC0INBUFH is read, both SIC0INBUFH and SIC0INBUFL -are `locked` until </tt> - -<div class="p"><!----></div> -<tt>SIC0INBUFL is read. While the buffers are `locked`, new data is not copied -into the buffers. </tt> - -<div class="p"><!----></div> -<tt>When SIC0INBUFL is read, the buffers become unlocked again.</tt> <br /> +SIC0INBUFH and SIC0INBUFL are double buffered to prevent inconsistent data reads +due to main processor conflicting with incoming serial interface data. To insure +data read from SIC0INBUFH and SIC0INFUBL are consistent, a locking mechanism prevents +the double buffer from copying new data to these registers. Once SIC0INBUFH is read, +both SIC0INBUFH and SIC0INBUFL are `locked` until SIC0INBUFL is read. While the +buffers are `locked`, new data is not copied into the buffers. When SIC0INBUFL is +read, the buffers become unlocked again.<tt></tt> <br /> <br /> <table> <tr><td><tt></tt> <table border="1" cellspacing="0" cellpadding="3"> -<tr><td align="center"><tt>0xCC006430</tt></td><td align="center">4</td><td align="center">r/w</td><td align="center">Joy-channel Control (?) (Calibration gun ?)</td></tr> +<tr><td align="center"><tt>0xCC006430</tt></td><td align="center">4</td><td align="center">r/w</td><td align="center">SIPOLL - SI Poll Register (Joy-channel Control (?) (Calibration gun ?))</td></tr> </table> </td></tr> @@ -6092,7 +6085,23 @@ <table border="1" cellspacing="0" cellpadding="3"> <tr><td align="center"><b>bit(s)</b></td><td align="center"></td><td><b>description</b></td></tr> -<tr><td align="center"></td><td align="center">e</td><td>controller port enable (1 bit per port, 1: enabled)</td></tr> +<tr><td align="center">26-31</td><td align="center"></td><td>unused/reserved</td></tr> + +<tr><td align="center">16-25</td><td align="center"></td><td>X - 7 X lines register (*1)</td></tr> + +<tr><td align="center">8-15</td><td align="center"></td><td>Y - y times register (*2)</td></tr> + +<tr><td align="center">4-7</td><td align="center">e</td><td>EN - controller port enable (1 bit per port, 1: enabled) (*3)</td></tr> + +<tr><td align="center">0-3</td><td align="center"></td><td>VBCPY - Vblank copy output channel (1 bit per port) (*4)</td></tr> + +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">0</td><td>copy SICOUTBUF to output buffer after writing</td></tr> + +<tr><td align="center">1</td><td>copy SICOUTBUF to output buffer only on vblank</td></tr> +</table> +</td></tr> </table> </td></tr> @@ -6100,11 +6109,28 @@ </table> <tt></tt> <br /> <br /> +(*1) 7 X lines register: determines the number of horizontal video lines between +polling (the polling interval). The polling begins at vsync. 7 is the minimum setting +(determined by the time required to complete a single polling of the controller). +The maximum setting depends on the current video mode (number of lines per vsync) +and the SIPOLL[Y] register. This register takes affect after vsync.<br /> +(*2) This register determines the number of times the SI controllers are polled +in a single frame. This register takes affect after vsync.<br /> +(*3) Enable polling of channel. When the channel is enabled, polling begins at +the next vblank. When the channel is disabled, polling is stopped immediately after +the current transaction. The status of this bit does not affect communication RAM +transfers on this channel.<br /> +(*4) Normally main processor writes to the SIC0OUTBUF register are copied immediately +to the channel 0 output buffer if a transfer is not currently in progress. When +this bit is asserted, main processor writes to channel 0's SIC0OUTBUF will only +be copied to the outbuffer on vblank. This is used to control the timing of commands +to 3D LCD shutter glasses connected to the VI.<br /> +<br /> <table> <tr><td><tt></tt> <table border="1" cellspacing="0" cellpadding="3"> -<tr><td align="center"><tt>0xCC006434</tt></td><td align="center">4</td><td align="center">r/w</td><td align="center">command</td></tr> +<tr><td align="center"><tt>0xCC006434</tt></td><td align="center">4</td><td align="center">r/w</td><td align="center">SICOMCSR - SI Communication Control Status Register (command)</td></tr> </table> </td></tr> @@ -6124,10 +6150,34 @@ <table border="1" cellspacing="0" cellpadding="3"> <tr><td align="center"><b>bit(s)</b></td><td align="center"></td><td><b>description</b></td></tr> -<tr><td align="center">31</td><td align="center">r</td><td>reset (?)</td></tr> +<tr><td align="center">31</td><td align="center">r</td><td>TCINT - Transfer Complete Interrupt Status</td></tr> + +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">read</td><td align="center">0</td><td>transfer complete interrupt not requested</td></tr> + +<tr><td align="center"></td><td align="center">1</td><td>transfer complete interrupt has been requested</td></tr> + +<tr><td align="center">write</td><td align="center">0</td><td>no effect</td></tr> + +<tr><td align="center"></td><td align="center">1</td><td>clear transfer complete interrupt</td></tr> +</table> +</td></tr> + +<tr><td align="center">30</td><td align="center"></td><td>TCINTMSK - Transfer Complete Interrupt Mask (*1)</td></tr> + +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">0</td><td>interrupt masked</td></tr> + +<tr><td align="center">1</td><td>interrupt enabled</td></tr> +</table> +</td></tr> <tr><td align="center">25-26</td><td align="center">c</td><td>Channel Number</td></tr> +<tr><td align="center"></td><td align="center"></td><td></td></tr> + <tr><td align="center"></td><td align="center">s</td><td>Channel Enable (?)</td></tr> <tr><td align="center">16-22</td><td align="center">m</td><td>number of bytes we want in return, AND 0x7f</td></tr> @@ -6154,11 +6204,23 @@ </table> <tt></tt> <br /> <tt></tt> <br /> +(*1) Interrupt masking prevents the interrupt from being sent to the main processor, +but does not affect the assertion of SICOMCSR[TCINT]<tt></tt> <br /> +<tt></tt> <br /> +When programming the SICOMCSR after a SICOM transfers has already started (e.g., +SICOMCSR[TSTART] is set), the software should read the current value first, +then and/or in the proper data and then write the new data back. The software should +not modify any of the transfer parameters (OUTLNGTH, INLNGTH, CHANNEL) until the +current transfer is complete. This is done to prevent a SICOM transfer already in +progress from being disturbed. When writing the data back, the software should not +set the TSTART bit again unless the current transfer is complete and another transfer +is required.<tt></tt> <br /> +<tt></tt> <br /> <table> <tr><td><tt></tt> <table border="1" cellspacing="0" cellpadding="3"> -<tr><td align="center"><tt>0xCC006438</tt></td><td align="center">4</td><td align="center">r/w</td><td align="center">channel select & status2</td></tr> +<tr><td align="center"><tt>0xCC006438</tt></td><td align="center">4</td><td align="center">r/w</td><td align="center">SISI - SI Status Register (channel select & status2)</td></tr> </table> </td></tr> @@ -6178,15 +6240,45 @@ <table border="1" cellspacing="0" cellpadding="3"> <tr><td align="center"><b>bit(s)</b></td><td align="center"></td><td><b>description</b></td></tr> -<tr><td align="center"></td><td align="center">r</td><td>reset (?)</td></tr> +<tr><td align="center">31</td><td align="center">r</td><td>WR - Write SICnOUTBUF Register (*1)</td></tr> -<tr><td align="center"></td><td align="center">a</td><td>Joy-channel 0 bits (?)</td></tr> +<tr><td align="center"></td><td align="center"></td><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center">read</td><td align="center">0</td><td>buffer copied</td></tr> -<tr><td align="center"></td><td align="center">b</td><td>Joy-channel 1 bits (?)</td></tr> +<tr><td align="center"></td><td align="center">1</td><td>buffer not copied</td></tr> -<tr><td align="center"></td><td align="center">c</td><td>Joy-channel 2 bits (?)</td></tr> +<tr><td align="center">write</td><td align="center">0</td><td>no effect</td></tr> -<tr><td align="center"></td><td align="center">d</td><td>Joy-channel 3 bits (?)</td></tr> +<tr><td align="center"></td><td align="center">1</td><td>copy all buffers</td></tr> +</table> +</td></tr> + +<tr><td align="center">30</td><td align="center"></td><td>reserved/unused</td></tr> + +<tr><td align="center">29</td><td align="center"></td><td></td></tr> + +<tr><td align="center">28</td><td align="center"></td><td></td></tr> + +<tr><td align="center">27</td><td align="center"></td><td></td></tr> + +<tr><td align="center">26</td><td align="center"></td><td></td></tr> + +<tr><td align="center">25</td><td align="center"></td><td></td></tr> + +<tr><td align="center">24</td><td align="center"></td><td></td></tr> + +<tr><td align="center">22-23</td><td align="center"></td><td>reserved/unused</td></tr> + +<tr><td align="center">16-21</td><td align="center">b</td><td>Joy-channel 1 bits</td></tr> + +<tr><td align="center">14-15</td><td align="center"></td><td>reserved/unused</td></tr> + +<tr><td align="center">8-13</td><td align="center">c</td><td>Joy-channel 2 bits</td></tr> + +<tr><td align="center">6-7</td><td align="center"></td><td>reserved/unused</td></tr> + +<tr><td align="center">0-5</td><td align="center">d</td><td>Joy-channel 3 bits</td></tr> </table> </td></tr> @@ -6194,6 +6286,10 @@ </table> <tt></tt> <br /> <tt></tt> <br /> +(*1) Write SICnOUTBUF Register: This register controls and indicates whether the +SICnOUTBUFs have been copied to the double buffered output buffers. This bit is +cleared after the buffers have been copied.<tt></tt> <br /> +<tt></tt> <br /> <tt></tt> <table> <tr><td> @@ -6246,7 +6342,7 @@ <tr><td></td></tr> </table> - +<br /> <div class="p"><!----></div> <h4><a name="tth_sEc5.8.1"> @@ -6255,36 +6351,6 @@ <div class="p"><!----></div> <b>5.8.1.1<a name="tth_sEc5.8.1.1"> -   Init</a> - </b> - -<div class="p"><!----></div> - -<ul> -<li> enable all controllers in 0xcc006430</li> - -<li> set Joy-channel 1-3 Command Register to 0x00400300</li> - -<li> clear SI i/o buffer</li> - -<li> wait until bit 31 of 0xCC006434 is 0, then set it to 1</li> -</ul> - -<div class="p"><!----></div> - -<b>5.8.1.2<a name="tth_sEc5.8.1.2"> -   Read Controller Status</a> - </b> - -<div class="p"><!----></div> - -<ul> -<li> simply read all Joy-channel registers and extract the info you want</li> -</ul> - -<div class="p"><!----></div> - -<b>5.8.1.3<a name="tth_sEc5.8.1.3">   Serial Send Buffer</a>  </b> @@ -6302,7 +6368,7 @@ <div class="p"><!----></div> -<b>5.8.1.4<a name="tth_sEc5.8.1.4"> +<b>5.8.1.2<a name="tth_sEc5.8.1.2">   Serial Get Result</a>  </b> @@ -12113,6 +12179,105 @@ 8.2</a>  standard Controller</h3> <div class="p"><!----></div> + +<b>8.2.0.1<a name="tth_sEc8.2.0.1"> +   Init</a> + </b> + +<div class="p"><!----></div> + +<ul> +<li> enable all controllers in 0xcc006430</li> + +<li> set Joy-channel 1-3 Command Register to 0x00400300</li> + +<li> clear SI i/o buffer</li> + +<li> wait until bit 31 of 0xCC006434 is 0, then set it to 1</li> +</ul> + +<div class="p"><!----></div> + +<b>8.2.0.2<a name="tth_sEc8.2.0.2"> +   Read Controller Status</a> + </b> + +<div class="p"><!----></div> + +<ul> +<li> simply read all Joy-channel registers and extract the info you want</li> +</ul> + +<table> +<tr><td><b>first input word</b></td></tr> + +<tr><td></td></tr> + +<tr><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center"><b>bit(s)</b></td><td align="center"></td><td><b>Description</b></td></tr> + +<tr><td align="center">31</td><td align="center"></td><td>ERRSTAT - (assumed 0)</td></tr> + +<tr><td align="center">30</td><td align="center"></td><td>ERRLATCH - (assumed 0)</td></tr> + +<tr><td align="center">28</td><td align="center">s</td><td>Start Button</td></tr> + +<tr><td align="center">27</td><td align="center">y</td><td>Y Button</td></tr> + +<tr><td align="center">26</td><td align="center">x</td><td>X Button</td></tr> + +<tr><td align="center">25</td><td align="center">b</td><td>B Button</td></tr> + +<tr><td align="center">24</td><td align="center">a</td><td>A Button</td></tr> + +<tr><td align="center">21</td><td align="center">L</td><td>L Trigger</td></tr> + +<tr><td align="center">20</td><td align="center">R</td><td>R Trigger</td></tr> + +<tr><td align="center">19</td><td align="center">u</td><td>D-Pad Up</td></tr> + +<tr><td align="center">18</td><td align="center">d</td><td>D-Pad Down</td></tr> + +<tr><td align="center">17</td><td align="center">r</td><td>D-Pad Right</td></tr> + +<tr><td align="center">16</td><td align="center">l</td><td>D-Pad Left</td></tr> + +<tr><td align="center">8-15</td><td align="center">x</td><td>Analog Stick X (8bit signed)</td></tr> + +<tr><td align="center">0-7</td><td align="center">y</td><td>Analog Stick Y (8bit signed)</td></tr> +</table> +</td></tr> + +<tr><td></td></tr> +</table> +<br /> +<br /> + +<table> +<tr><td><b>second input word</b></td></tr> + +<tr><td></td></tr> + +<tr><td> +<table border="1" cellspacing="0" cellpadding="3"> +<tr><td align="center"><b>bit(s)</b></td><td align="center"></td><td><b>Description</b></td></tr> + +<tr><td align="center">24-31</td><td align="center">x</td><td>Analog C Stick X (8bit signed)</td></tr> + +<tr><td align="center">16-23</td><td align="center">y</td><td>Analog C Stick Y (8bit signed)</td></tr> + +<tr><td align="center">8-15</td><td align="center">l</td><td>L Trigger Analog (8bit signed)</td></tr> + +<tr><td align="center">0-7</td><td align="center">r</td><td>R Trigger Analog (8bit signed)</td></tr> +</table> +</td></tr> + +<tr><td></td></tr> +</table> + + +<div class="p"><!----></div> <h4><a name="tth_sEc8.2.1"> 8.2.1</a>  rumble Motor On</h4> @@ -12185,31 +12350,31 @@ <br /> <table border="1" cellspacing="0" cellpadding="3"> -<tr><td align="center"><b>ID</b></td><td><b>Device</b></td></tr> +<tr><td><b>ID</b></td><td><b>Device</b></td></tr> -<tr><td align="center"><tt>0x00000004</tt></td><td>Memory Card 59</td></tr> +<tr><td><tt>0x00000004</tt></td><td>Memory Card 59</td></tr> -<tr><td align="center"><tt>0x00000008</tt></td><td>Memory Card 123</td></tr> +<tr><td><tt>0x00000008</tt></td><td>Memory Card 123</td></tr> -<tr><td align="center"><tt>0x00000010</tt></td><td>Memory Card 251</td></tr> +<tr><td><tt>0x00000010</tt></td><td>Memory Card 251</td></tr> -<tr><td align="center"><tt>0x00000020</tt></td><td>Memory Card 507</td></tr> +<tr><td><tt>0x00000020</tt></td><td>Memory Card 507</td></tr> -<tr><td align="center"><tt>0x00000040</tt></td><td>Memory Card 1019</td></tr> +<tr><td><tt>0x00000040</tt></td><td>Memory Card 1019</td></tr> -<tr><td align="center"><tt>0x00000080</tt></td><td>Memory Card 2043</td></tr> +<tr><td><tt>0x00000080</tt></td><td>Memory Card 2043</td></tr> -<tr><td align="center"><tt>0x01010000</tt></td><td>USB Adapter</td></tr> +<tr><td><tt>0x01010000</tt></td><td>USB Adapter</td></tr> -<tr><td align="center"><tt>0x01020000</tt></td><td>NPDP GDEV</td></tr> +<tr><td><tt>0x01020000</tt></td><td>NPDP GDEV</td></tr> -<tr><td align="center"><tt>0x05070000</tt></td><td>IS Viewer</td></tr> +<tr><td><tt>0x05070000</tt></td><td>IS Viewer</td></tr> -<tr><td align="center"><tt>0x03010000</tt></td><td>Marlin (?)</td></tr> +<tr><td><tt>0x03010000</tt></td><td>Marlin (?)</td></tr> -<tr><td align="center"><tt>0x02020000</tt></td><td>Modem</td></tr> +<tr><td><tt>0x02020000</tt></td><td>Modem</td></tr> -<tr><td align="center"><tt>0x04020200</tt></td><td>Ethernet Adapter</td></tr> +<tr><td><tt>0x04020200</tt></td><td>Ethernet Adapter</td></tr> </table> @@ -16462,6 +16627,10 @@ <tr><td align="center"></td><td align="right">some image format info</td></tr> +<tr><td align="center"><b>Aktnot</b></td><td align="right">http://cube.iu.hio.no/s104086/</td></tr> + +<tr><td align="center"></td><td align="right">additional rtc/ipl pinout info</td></tr> + <tr><td align="center"></td></tr></table> </center> <div class="p"><!----></div> |
From: <mi...@pr...> - 2004-01-31 03:16:59
|
Update of /cvsroot/gc-linux/htdocs/xml/es In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14376/xml/es Modified Files: faq.xml Log Message: ... Index: faq.xml =================================================================== RCS file: /cvsroot/gc-linux/htdocs/xml/es/faq.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- faq.xml 30 Jan 2004 20:37:59 -0000 1.1 +++ faq.xml 31 Jan 2004 03:15:21 -0000 1.2 @@ -13,7 +13,7 @@ <category>1 General</category> <question>¿Por qué Linux? ¿Por qué no Windows? ¿Por qué no MacOS?</question> <answer> - No hay Windows para la arquitectura de la PowerPC, y no tenemos tiene el código fuente de Windows. Tenemos el código fuente de algunos de Mac OS X, y lo usa la PowerPC, pero la GameCube no tiene mucho memoria. Linux es Open Source, y hay una versión para la arquitectura de la PowerPC. + No hay Windows para la arquitectura de la PowerPC, y no tenemos el código fuente de Windows. Tenemos el código fuente de algunos de Mac OS X, y lo usa la PowerPC, pero la GameCube no tiene mucho memoria. Linux es Open Source, y hay una versión para la arquitectura de la PowerPC. </answer> </faq> <faq> |
From: <mi...@pr...> - 2004-01-31 03:07:49
|
Update of /cvsroot/gc-linux/linux/drivers/video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6902/drivers/video Modified Files: gamecubefb.c Log Message: Framebuffer colors are correct now. Thanks to Costis for his fixpoint conversion code. The framebuffer console text is still yellow - is that normal? Because Tux' colors are perfect... Index: gamecubefb.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/video/gamecubefb.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gamecubefb.c 29 Jan 2004 01:02:49 -0000 1.2 +++ gamecubefb.c 29 Jan 2004 22:13:24 -0000 1.3 @@ -47,6 +47,79 @@ static void (*pmi_start)(void); static void (*pmi_pal)(void); + +/* --------------------------------------------------------------------- */ +// This is Costis' RGB to YCbYCr conversion code. This looks like a bad +// hack, because we make the original cfbimgblit.c encode RGB 5:5:5 pixel +// data and convert it into YCbYCr on every write of an int into the +// framebuffer. But this is also quite good implementation, because YCbYCr +// means that two pixels are always encoded together and, while each one +// has its own luminance, they share the chrominance, so a putpixel() is +// not possible, and just hooking into settwopixels() solves all problems. +// +// What doesn't work correctly right now, is setting a single pixel, because +// the cfbimgblit.c code reads two pixels, assumes that it is RGB, changes +// one pixel, and we'll convert it into YCbYCr. This breaks the encoding. +// So we need to implement a 32 bit read from the framebuffer as well and +// return RGB encoded data. +#define CLAMP(x,l,h) ((x > h) ? h : ((x < l) ? l : x)) + +// 16:16 fixed point... hopefully not much accuracy is lost! +#define Ya 16843 // 0.257 +#define Yb 33030 // 0.504 +#define Yc 6423 // 0.098 +#define Yd 1048576 // 16.0 +#define Ye 32768 // 0.5 + +#define Cba -9699 // 0.148 +#define Cbb -19071 // 0.291 +#define Cbc 28770 // 0.439 +#define Cbd 8388608 // 128.0 +#define Cbe 32768 // 0.5 + +#define Cra 28770 // 0.439 +#define Crb -24117 // 0.368 +#define Crc -4653 // 0.071 +#define Crd 8388608 // 128.0 +#define Cre 32768 // 0.5 + +unsigned long GC_Video_RGBToYCbCrFixed (unsigned char r, unsigned char g, unsigned char b) +{ + unsigned long Y, Cb, Cr; + + Y = ((Ya * r) + (Yb * g) + (Yc * b) + Yd + Ye) >> 16; + Cb = ((Cba * r) + (Cbb * g) + (Cbc * b) + Cbd + Cre) >> 16; + Cr = ((Cra * r) + (Crb * g) + (Crc * b) + Crd + Cre) >> 16; + + Y = CLAMP(Y , 16, 235); + Cb = CLAMP(Cb, 16, 240); + Cr = CLAMP(Cr, 16, 240); + + return (unsigned long)(((unsigned char)Y << 24) | ((unsigned char)Cb << 16) | ((unsigned char)Y << 8) | (unsigned char)Cr); +} + +void gamecubefb_writel(unsigned long color, int *address) +{ + unsigned char r, g, b; + unsigned long pa, pb; + + r = ((color >> 27) & 31) << 3; + g = ((color >> 22) & 31) << 3; + b = ((color >> 17) & 31) << 3; + + pa = GC_Video_RGBToYCbCrFixed (r, g, b); + + r = ((color >> 11) & 31) << 3; + g = ((color >> 6) & 31) << 3; + b = ((color >> 1) & 31) << 3; + + pb = GC_Video_RGBToYCbCrFixed (r, g, b); + + fb_writel_real((pa & 0xFF000000) | (pb & 0x0000FF00) | + (((pa & 0x00FF0000) + (pb & 0x00FF0000)) >> 1) | + (((pa & 0x000000FF) + (pb & 0x000000FF)) >> 1), address); +} + /* --------------------------------------------------------------------- */ static int gamecubefb_pan_display(struct fb_var_screeninfo *var, @@ -207,11 +280,11 @@ gamecubefb_defined.hsync_len = (gamecubefb_defined.xres / 8) & 0xf8; if (gamecubefb_defined.bits_per_pixel > 8) { - gamecubefb_defined.red.offset = 0; + gamecubefb_defined.red.offset = 11; gamecubefb_defined.red.length = 5; - gamecubefb_defined.green.offset = 5; + gamecubefb_defined.green.offset = 6; gamecubefb_defined.green.length = 5; - gamecubefb_defined.blue.offset = 10; + gamecubefb_defined.blue.offset = 1; gamecubefb_defined.blue.length = 5; gamecubefb_defined.transp.offset = 15; gamecubefb_defined.transp.length = 1; |
From: <mi...@pr...> - 2004-01-31 03:03:25
|
Update of /cvsroot/gc-linux/linux/arch/ppc/platforms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14248/arch/ppc/platforms Modified Files: gamecube.c Log Message: added initrd suport (by Anders "kirin" Haugen) You need to make zImage.initrd now, and it creates zImage.initrd.elf Index: gamecube.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gamecube.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gamecube.c 29 Jan 2004 01:02:48 -0000 1.3 +++ gamecube.c 29 Jan 2004 23:08:15 -0000 1.4 @@ -3,6 +3,7 @@ #include <linux/pagemap.h> #include <linux/irq.h> #include <linux/console.h> +#include <linux/initrd.h> #include <asm/time.h> #include <asm/io.h> #include <asm/machdep.h> @@ -133,6 +134,16 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5, unsigned long r6, unsigned long r7) { + parse_bootinfo(find_bootinfo()); + +#ifdef CONFIG_BLK_DEV_INITRD + if ( r4 ) + { + initrd_start = r4 + KERNELBASE; + initrd_end = r5 + KERNELBASE; + } +#endif + ppc_md.setup_arch = gamecube_setup_arch; ppc_md.setup_io_mappings = gamecube_map_io; ppc_md.find_end_of_memory = gamecube_find_end_of_memory; |