1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<HTML> 3<HEAD> 4<META http-equiv="Content-Type" content="text/html; charset=windows-1252"> 5<META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 6.5.0.0 for Windows"> 6<META http-equiv="Content-Style-Type" content="text/css"> 7<LINK rel="stylesheet" type="text/css" href="../CSS/revolution.css"> 8<TITLE>CARD API Introduction</TITLE> 9</HEAD> 10<BODY> 11<H1>CARD API Introduction</H1> 12<H2>Introduction</H2> 13<P>The Revolution supports GameCube Memory Cards (4 Mb, 16 Mb, and 64 Mb). This API has nearly the same specifications as the CARD API for the GameCube.</P> 14 15<P>The CARD API provides file level access to these Memory Cards. A 4-Mb Memory Card can have up to 59 files. Larger capacity Memory Cards can hold up to 127 files. The file size must be a multiple of the Memory Card sector size obtained with the <CODE><a href="CARDGetSectorSize.html">CARDGetSectorSize</a></CODE> function. The file size is fixed at the time the file is created and does not change.</P> 16<p>With the Revolution, Memory Cards can be used for loading data--for example, handing over game software data used by past GameCubes. For this reason, be sure to only use read related APIs in applications. Although write related APIs are also prepared for debugging, they should not be used in an application. (Contact Nintendo if write processing is required in the application.)</p> 17<P><STRONG>Note:</STRONG> 18The APIs that you cannot use in applications are described in the API Reference Manual.</P> 19<P><STRONG>Note:</STRONG> 20 21Be sure to use the flash memory built into the system to save Revolution programs.</P> 22<H2>Initialization</H2> 23<P>The <CODE><A href="CARDInit.html">CARDInit</A></CODE> function must be called only once before using any other CARD API functions.</P> 24<H2>Detecting Memory Cards</H2> 25<P>The <A href="CARDProbeEx.html"><CODE>CARDProbeEx</CODE></A> function checks whether a memory card (of any type) is inserted in the specified Memory Card slot.</P> 26<P><STRONG>Note:</STRONG> 27After a card is detected in a Memory Card Slot, it is recommended that the program should wait for the player's input response before proceeding to the next process (e.g., the <A href="CARDMount.html"><CODE>CARDMount</CODE></A> function).</P> 28<H2>Mounting and Unmounting</H2> 29<P>Before a Memory Card is accessed, the card must be mounted using the <CODE><a href="CARDMount.html">CARDMount</a></CODE> or <CODE><a href="CARDMountAsync.html">CARDMountAsync</a></CODE> function. As a best practice, if the game program does not use the Memory Card, it should be unmounted. This best practice is to ensure that the Memory Card is removed safely from the Memory Card slot. The <tt><a href="CARDUnmount.html">CARDUnmount</a></tt> function unmounts the Memory Card.</P> 30<P><B>Note:</B> 31 32Memory Cards must be probed before mounting.</P> 33<H2>Verifying and Repairing Memory Cards</H2> 34<P>The CARD API is carefully designed to maintain the consistency of the file system during normal processing. However, the file system may remain inconsistent because of a power supply problem or under unusual circumstances (for example, when the Memory Card is removed from the slot intentionally).</P> 35<P><CODE><a href="CARDCheck.html">CARDCheck</a></CODE> or <CODE><a href="CARDCheckAsync.html">CARDCheckAsync</a></CODE> checks the consistency of the file system and repairs it if possible. Although these functions are unable to repair all data damage, one of the them must be called just after mounting a Memory Card (regardless of whether the return value of the mount operation returned <tt>CARD_RESULT_READY</tt> or <tt>CARD_RESULT_BROKEN</tt>). The game program can call other CARD functions after the <CODE><a href="CARDCheck.html">CARDCheck</a></CODE> function completes processing.</P> 36<P><B>Note:</B> The <CODE><a href="CARDCheck.html">CARDCheck</a></CODE> and <CODE><a href="CARDCheckAsync.html">CARDCheckAsync</a></CODE> functions only checks the consistency of the file system. These function can't verify the contents of each user file in the file system. Each game program is responsible for verifying the contents of a file. For example, if a power failure occurred while saving game data to a file, the data would be lost, but the file system may remain consistent.</P> 37 38<P><strong>Note:</strong> 39 After mounting a Memory Card, the <code><a href="CARDCheck.html">CARDCheck</a><a href="CARDCheckAsync.html">[Async]</a></code> function must be used for verification.</P> 40 41<H2>Format Processing</H2> 42<P>The <CODE><A href="CARDFormat.html">CARDFormat</a></CODE> or <CODE><a href="CARDFormatAsync.html">CARDFormatAsync</a></CODE> function can format a Memory Card for access. If the Memory Card is not formatted or the system blocks of a Memory Card are broken, the <CODE><a href="CARDMount.html">CARDMount</a></CODE> function will return <tt>CARD_RESULT_BROKEN</tt> (the same way other functions do). In these cases, be sure to display an error message on the screen.</P> 43<P><B>Note:</B> For programs that perform write processing, if <CODE>CARD_RESULT_BROKEN</CODE> has been returned, be sure to reformat after checking game players on the screen.</P> 44<P><STRONG>Note:</STRONG> 45 46Memory Cards must be mounted before they can be formatted.</P> 47<H2>Text Character Sets</H2> 48<P>Memory Cards use one of the two text character set encoding standards that depend on the type of console used for formatting. Japanese version consoles format Memory Cards to use the Japanese Shift-JIS text character set. Other versions of the console format Memory Cards to use the ANSI 8-bit text character set. The <tt><a href="CARDGetEncoding.html">CARDGetEncoding</a></tt> function returns the text character set of the current Memory Card.</P> 49<P><STRONG>Note:</STRONG> For programs that perform write processes, if the text character set of the Memory Card and the system do not match, the <CODE><a href="CARDMount.html">CARDMount</a></CODE> and <CODE><a href="CARDMountAsync.html">CARDMountAsync</a></CODE> functions return <CODE>CARD_RESULT_ENCODING</CODE>. In these cases, after the player reconfirms on screen, the Memory Card should be reformatted.</P> 50<H2>Synchronous and Asynchronous Functions</H2> 51<P>Several CARD API functions provide both synchronous and asynchronous access to the Memory Card. Synchronous functions block the current thread until the process is completed and control is transferred to other executable threads. In contrast, asynchronous functions return immediately and call the specified callback when the process is completed. Asynchronous functions have the suffix <b><CODE>Async</CODE></b>, as shown in the table below. 52</P> 53<TABLE> 54 <TBODY> 55 <TR> 56<TD bgcolor="#C0C0C0">Synchronous Functions</TD> 57<TD bgcolor="#C0C0C0">Asynchronous Functions</TD> 58 </TR> 59 <TR> 60<TD><A href="CARDCheck.html"><CODE>CARDCheck</CODE></A></TD> 61<TD><CODE><A href="CARDCheckAsync.html">CARDCheckAsync</A></CODE></TD> 62 </TR> 63 <TR> 64<TD><A href="CARDCreate.html"><CODE>CARDCreate</CODE></A></TD> 65<TD><A href="CARDCreateAsync.html"><CODE>CARDCreateAsync</CODE></A></TD> 66 </TR> 67 <TR> 68<TD><A href="CARDDelete.html"><CODE>CARDDelete</CODE></A></TD> 69<TD><A href="CARDDeleteAsync.html"><CODE>CARDDeleteAsync</CODE></A></TD> 70 </TR> 71 <TR> 72<TD><A href="CARDFastDelete.html"><CODE>CARDFastDelete</CODE></A></TD> 73<TD><A href="CARDFastDeleteAsync.html"><CODE>CARDFastDeleteAsync</CODE></A></TD> 74 </TR> 75 <TR> 76<TD><A href="CARDFormat.html"><CODE>CARDFormat</CODE></A></TD> 77<TD><A href="CARDFormatAsync.html"><CODE>CARDFormatAsync</CODE></A></TD> 78 </TR> 79 <TR> 80<TD><A href="CARDMount.html"><CODE>CARDMount</CODE></A></TD> 81<TD><A href="CARDMountAsync.html"><CODE>CARDMountAsync</CODE></A></TD> 82 </TR> 83 <TR> 84<TD><A href="CARDRead.html"><CODE>CARDRead</CODE></A></TD> 85<TD><A href="CARDReadAsync.html"><CODE>CARDReadAsync</CODE></A></TD> 86 </TR> 87 <TR> 88<TD><A href="CARDRename.html"><CODE>CARDRename</CODE></A></TD> 89<TD><A href="CARDRenameAsync.html"><CODE>CARDRenameAsync</CODE></A></TD> 90 </TR> 91 <TR> 92<TD><A href="CARDSetAttributes.html"><CODE>CARDSetAttributes</CODE></A></TD> 93<TD><A href="CARDSetAttributesAsync.html"><CODE>CARDSetAttributesAsync</CODE></A></TD> 94 </TR> 95 <TR> 96<TD><A href="CARDSetStatus.html"><CODE>CARDSetStatus</CODE></A></TD> 97<TD><A href="CARDSetStatusAsync.html"><CODE>CARDSetStatusAsync</CODE></A></TD> 98 </TR> 99 <TR> 100<TD><A href="CARDWrite.html"><CODE>CARDWrite</CODE></A></TD> 101<TD><A href="CARDWriteAsync.html"><CODE>CARDWriteAsync</CODE></A></TD> 102 </TR> 103 </TBODY> 104</TABLE> 105<P><STRONG>Note:</STRONG> 106While accessing the Memory Card using the functions in the above table, specific errors that can occur related to missing data (for example, the Memory Card is removed from the system) must be displayed on screen until the function completes its task.</P> 107<P><STRONG>Note:</STRONG> 108A call to an asynchronous function returns <tt>CARD_RESULT_READY</tt> if the specified process has been initiated successfully. Otherwise, the function returns an error code and the specified callback function is not called.</P> 109<P><STRONG>Note:</STRONG> 110If there are no corresponding asynchronous functions, the API completes immediately after the call (for example, as with the functions <CODE><a href="CARDOpen.html">CARDOpen</a></CODE>, <CODE><a href="CARDClose.html">CARDClose</a></CODE>).</P> 111<P><STRONG>Note:</STRONG> 112 Unlike the Optical Disc (DVD) API, the CARD API can issue only one process at a time per Memory Card slot (for example, while the process of a synchronous/asynchronous function is in progress, a call to another CARD API function simply returns <tt>CARD_RESULT_BUSY</tt>). A game program should wait for the previous CARD function to complete processing before invoking the next one. The <CODE><a href="CARDProbeEx.html">CARDProbeEx</a></CODE>, <CODE><a href="CARDProbe.html">CARDProbe</a></CODE>, and <code><a href="CARDGetXferredBytes.html">CARDGetXferredBytes</a></code> functions are exceptions and can be called while the current memory card process is in progress.</P> 113<H2>Polling Access</H2> 114<P>Instead of using a callback function with an asynchronous function, you can specify a <CODE>NULL</CODE> function as a callback and inspect the process completion by repeatedly calling <CODE><a href="CARDGetResultCode.html">CARDGetResultCode</a></CODE> function. This function returns <CODE>CARD_RESULT_BUSY</CODE> until the process completes.</P> 115<P>Even while a memory card read/write process is in progress, you can check the total number of read/write bytes by calling the <CODE><a href="CARDGetXferredBytes.html">CARDGetXferredBytes</a></CODE> function. The <CODE><a href="CARDGetXferredBytes.html">CARDGetXferredBytes()</a></CODE> function can be used to implement a progress bar, etc. to show on screen while data saves.</P> 116<H2>Memory Card Life Span</H2> 117<P>Each Memory Card has a life span like any type of flash memory device. If a CARD API function returns <tt>CARD_RESULT_IOERROR</tt>, the Memory Card may have reached the end of its life span. Alternatively, the Memory Card connector may be dirty. For this case, cleaning the connector may help.</P> 118<P><STRONG>Note:</STRONG> Once the <CODE>CARD_RESULT_IOERROR</CODE> error is returned, the current Memory Card must be unmounted. <strong>Do not retry</strong> the CARD function that returned the <tt>CARD_RESULT_IOERROR</tt> error. Otherwise, an unexpected error may occur. Because the CARD API returns the <CODE>CARD_RESULT_IOERROR</CODE> error after several internal retries, there is no doubt that the Memory Card that generated this error is defective.</P> 119<H2>Directory</H2> 120<P>The CARD API does not support hierarchical directories. Only 127 flat file entries are supported. Call the <CODE><a href="CARDGetStatus.html">CARDGetStatus</a></CODE> function to check each file entry by specifying the file entry number (from 0 to 126). Files can be opened/deleted by specifying either a file entry number or a file name. Functions that take a file entry number have the prefix <CODE>CARDFast</CODE> (for example, <CODE><a href="CARDFastOpen.html">CARDFastOpen</a></CODE> and <CODE><a href="CARDFastDelete.html">CARDFastDelete</a></CODE>).</P> 121<P>The <CODE><a href="CARDCreate.html">CARDCreate</a></CODE> and <CODE><a href="CARDCreateAsync.html">CARDCreateAsync</a></CODE> functions create new files.</P> 122<P>The <CODE><a href="CARDDelete.html">CARDDelete</a></CODE>, <CODE><a href="CARDDeleteAsync.html">CARDDeleteAsync</a>, <a href="CARDFastDelete.html">CARDFastDelete</a></CODE>, and <CODE><a href="CARDFastDeleteAsync.html">CARDFastDeleteAsync</a></CODE> functions delete files.</P> 123<P>The <CODE><a href="CARDRename.html">CARDRename</a></CODE> and <CODE><a href="CARDRenameAsync.html">CARDRenameAsync</a></CODE> functions rename an existing file.</P> 124 125<h2>File Attributes</h2> 126 127<p>Each file can set the following file attributes.</p> 128 129<table border="0" width="100%"> 130 <tr> 131<td bgcolor="#C0C0C0"><b>Define Name</b></td> 132<td bgcolor="#C0C0C0"><b>Value</b></td> 133<td bgcolor="#C0C0C0"><b>Description</b></td> 134 </tr> 135 <tr> 136<td><code><CODE>CARD_ATTR_PUBLIC</CODE></code></td> 137<td>0x04</td> 138<td>Any program can read the file.</td> 139 </tr> 140 <tr> 141<td><code><CODE>CARD_ATTR_NO_COPY</CODE></code></td> 142<td>0x08</td> 143<td>IPL can't copy the file.</td> 144 </tr> 145 <tr> 146<td><code><CODE>CARD_ATTR_NO_MOVE</CODE></code></td> 147<td>0x10</td> 148<td>Cannot move the file using IPL.</td> 149 </tr> 150 <tr> 151<td><code><CODE>CARD_ATTR_GLOBAL</CODE></code></td> 152<td>0x20</td> 153<td>No program can read the file.</td> 154 </tr> 155</table> 156 157<P>By default, only the <code>CARD_ATTR_PUBLIC</code> bit is set to a Memory Card file created by the <code><a href="CARDCreate.html">CARDCreate</a></code> or <code><a href="CARDCreateAsync.html">CARDCreateAsync</a></code> functions. <strong>The <code>CARD_ATTR_PUBLIC</code> must not be cleared by a game program.</strong></P> 158<P>A game program can set a <code>CARD_ATTR_NO_COPY</code> bit and/or <code>CARD_ATTR_NO_MOVE</code> bit if required. <strong>A game program must not modify any other bits.</strong></P> 159<P><code>CARD_ATTR_GLOBAL</code> is set to a file created by a utility program (for example, network setup program) that all games share.</P> 160<P><b>Note:</b> <code>CARD_ATTR_GLOBAL</code> is a reserved bit: <code>cardedit.elf</code> will display error messages.</P> 161<P><b>Note:</b> Both <code><em><strong>gameName</strong></em></code> and <code><em><strong>company</strong></em></code> are zero in the file with the <code>CARD_ATTR_GLOBAL</code> bit enabled: <code>cardedit.elf</code> will not display game code (<code><em><strong>gameName</strong></em></code>) and company code (<code><em><strong>company</strong></em></code>) for the file.</P> 162<p>The <CODE><a href="CARDGetAttributes.html">CARDGetAttributes</a></CODE> function gets the file attributes.<br>The <CODE><a href="CARDSetAttributes.html">CARDSetAttributes</a></CODE> and <CODE><a href="CARDSetAttributesAsync.html">CARDSetAttributesAsync</a></CODE> functions set file attributes.</p> 163 164<H2>Filename Space for Each Game</H2> 165<P>Each game has its own separate filename space on a Memory Card. Each filename space is stored in the boot block of a Game Disc and separated by <b><i><CODE>gameName</CODE></i></b> and <b><i><CODE>company</CODE></i></b>. A game program can make a file name identical to files created by other games.</P> 166<P><b>Note:</b> A game program can't write or delete files that are not in its own filename space.</P> 167<H2>Read/Write</H2> 168<P>Before performing read/write processes, the file must be opened with the <CODE><a href="CARDOpen.html">CARDOpen</a></CODE> or <CODE><A href="CARDFastOpen.html">CARDFastOpen</a></CODE> function (the <CODE><a href="CARDCreate.html">CARDCreate</a></CODE> and <CODE><a href="CARDCreateAsync.html">CARDCreateAsync</a></CODE> function open newly created file). The <CODE><a href="CARDOpen.html">CARDOpen</a></CODE> function can open only the current game files because of the filename space for each game. The <CODE><a href="CARDFastOpen.html">CARDFastOpen</a></CODE> function can also open other game files that have the <code>CARD_ATTR_PUBLIC</code> attribute.</P> 169 170<P><strong>Note:</strong> When using the <CODE><a href="CARDFastOpen.html">CARDFastOpen</a></CODE> function, the game program should check the <code><b><i><font face="Courier New">gameName</font></i></b>, <b><i><font face="Courier New">company</font></i></b>, and <em><strong><code>fileName</code></strong></em> members of the <a href="CARDStat.html">CARDStat</a></code> structure using the <CODE><a href="CARDGetStatus.html">CARDGetStatus</a></CODE>.</P> 171 172<P>The <CODE><a href="CARDRead.html">CARDRead</a></CODE> and <CODE><a href="CARDReadAsync.html">CARDReadAsync</a></CODE> functions read data from the file. <CODE><a href="CARDWrite.html">CARDWrite</a></CODE> and <CODE><a href="CARDWriteAsync.html">CARDWriteAsync</a></CODE> functions write data to the file. The read process to a file must be performed in multiples of <tt>CARD_READ_SIZE</tt> (512 bytes). The write process to a file must be performed in multiples of the card sector size that the <CODE><a href="CARDGetSectorSize.html">CARDGetSectorSize</a></CODE> function returns. The main memory data buffer to read/write data must be on a 32-byte boundary.</P> 173<P>The current read/write process can be canceled using the <CODE><a href="CARDCancel.html">CARDCancel</a></CODE> function.</P> 174 175<P>Files should be closed using the <CODE><a href="CARDClose.html">CARDClose</a></CODE> function before unmounting the Memory Card.</P> 176 177<P><B>Note:</B> 178 Memory Cards must be mounted before read/write to files.</P> 179<P><B>Note:</B> 180 Memory Card files must be opened before read/write.</P> 181<h2>Memory Card 1019 Fast Mode</h2> 182<P>Memory Card 1019 meets the needs of games that must save a large volume of data. Using fast mode reduces the wait time during large file saves; Memory Card 1019 has a fast mode, which saves files much faster than Memory Card 59 and Memory Card 251.<br>For backward compatibility, because potential programming errors related to latent timing may surface, the high-speed mode is disabled by default. To enable fast mode, call <code>CARDSetFastMode(TRUE)</code> before mounting a Memory Card. Use the <code>CARDGetFastMode</code> function to retrieve the current operation mode. To check the current mode of a Memory Card inserted in a Memory Card slot, call the <code>CARDGetCurrentMode</code> function.<br>Note that fast mode doesn't do anything for Memory Card 59 and Memory Card 251.</P> 183<H2>Error Code List</H2> 184<TABLE> 185 <TBODY> 186 <TR> 187<TD bgcolor="#C0C0C0">Result Code</TD> 188<TD bgcolor="#C0C0C0">Value</TD> 189<TD bgcolor="#C0C0C0">Description</TD> 190 </TR> 191 <TR> 192<TD><CODE><CODE>CARD_RESULT_READY</CODE></CODE></TD> 193 <TD><CODE>0</CODE></TD> 194<TD>Ready to start the next process.</TD> 195 </TR> 196 <TR> 197<TD><CODE><CODE>CARD_RESULT_BUSY</CODE></CODE></TD> 198 <TD><CODE>-1</CODE></TD> 199<TD>Busy.</TD> 200 </TR> 201 <TR> 202<TD><CODE><CODE>CARD_RESULT_WRONGDEVICE</CODE></CODE></TD> 203 <TD><CODE>-2</CODE></TD> 204<TD>A device is detected but it is not a Memory Card.</TD> 205 </TR> 206 <TR> 207<TD><CODE><CODE>CARD_RESULT_NOCARD</CODE></CODE></TD> 208 <TD><CODE>-3</CODE></TD> 209<TD>Memory Card is not detected (or not yet mounted).</TD> 210 </TR> 211 <TR> 212<TD><CODE><CODE>CARD_RESULT_NOFILE</CODE></CODE></TD> 213 <TD><CODE>-4</CODE></TD> 214<TD>Specified file was not found.</TD> 215 </TR> 216 <TR> 217<TD><CODE><CODE>CARD_RESULT_IOERROR</CODE></CODE></TD> 218 <TD><CODE>-5</CODE></TD> 219<TD>Memory Card has reached the end of its life span.</TD> 220 </TR> 221 <TR> 222<TD><CODE><CODE>CARD_RESULT_BROKEN</CODE></CODE></TD> 223 <TD><CODE>-6</CODE></TD> 224<TD>File system is broken.</TD> 225 </TR> 226 <TR> 227<TD><CODE><CODE>CARD_RESULT_EXIST</CODE></CODE></TD> 228 <TD><CODE>-7</CODE></TD> 229<TD>The filename that is going to be created or renamed already exists.</TD> 230 </TR> 231 <TR> 232<TD><CODE><CODE>CARD_RESULT_NOENT</CODE></CODE></TD> 233 <TD><CODE>-8</CODE></TD> 234<TD>No free directory entries.</TD> 235 </TR> 236 <TR> 237<TD><CODE><CODE>CARD_RESULT_INSSPACE</CODE></CODE></TD> 238 <TD><CODE>-9</CODE></TD> 239<TD>Insufficient free space in data block.</TD> 240 </TR> 241 <TR> 242<TD><CODE><CODE>CARD_RESULT_NOPERM</CODE></CODE></TD> 243 <TD><CODE>-10</CODE></TD> 244<TD>No file access permission.</TD> 245 </TR> 246 <TR> 247<TD><CODE><CODE>CARD_RESULT_LIMIT</CODE></CODE></TD> 248 <TD><CODE>-11</CODE></TD> 249<TD>Tried to read/write over the file size limit.</TD> 250 </TR> 251 <TR> 252<TD><CODE><CODE>CARD_RESULT_NAMETOOLONG</CODE></CODE></TD> 253 <TD><CODE>-12</CODE></TD> 254<TD>The filename that is going to be created or renamed is too long.</TD> 255 </TR> 256 <TR> 257<TD><CODE><CODE>CARD_RESULT_ENCODING</CODE></CODE></TD> 258 <TD><CODE>-13</CODE></TD> 259<TD>Text character set encoding is mismatched.</TD> 260 </TR> 261 <TR> 262<TD><CODE><CODE>CARD_RESULT_CANCELED</CODE></CODE></TD> 263 <TD><CODE>-14</CODE></TD> 264<TD>The read/write process is canceled.</TD> 265 </TR> 266 <TR> 267<TD><CODE><CODE>CARD_RESULT_FATAL_ERROR</CODE></CODE></TD> 268 <TD><CODE>-128</CODE></TD> 269<TD>Error caused by program design (for example, parameter range error, etc.).</TD> 270 </TR> 271 </TBODY> 272</TABLE> 273<H2>Appendix: Memory Card Size and Sector Size</H2> 274<P>Although the CARD API supports 4, 8, 16, 32, 64, and 128 Mb Memory Cards and 8, 16, 32, 64, 128, and 256 KB sector sizes, only Memory Cards with 8 KB sectors are sold. The Memory Card size and sector size can be checked at runtime by calling the <CODE><a href="CARDGetMemSize.html">CARDGetMemSize</a></CODE> and <CODE><a href="CARDGetSectorSize.html">CARDGetSectorSize</a></CODE> functions, respectively. <b>All game programs must support Memory Cards that have a sector size of 8 KB.</b></P> 275<P> 276<B> 277Note: 278</B> 279Nintendo officially discourages the current development of game programs that support Memory Cards that are not 8 KB sector memory cards. A game program should call the <CODE><a href="CARDProbeEx.html">CARDProbeEx</a></CODE> or <CODE><a href="CARDGetSectorSize.html">CARDGetSectorSize</a></CODE> function to verify whether the Memory Card is an 8 KB sector Memory Card before proceeding. [as of 5/30/2001]</P> 280<H2><b>Appendix: Icons, Banners, and Comments</b></H2> 281<P>The Revolution system menu includes a Memory Card screen that displays memory card files. Please refer to the <a href="icons.html">Icons and Banners</a> page for more details about creating icons, banners, and comments.</P> 282<H2>Revision History</H2> 283<P>2006/03/01 Initial version.</P> 284<hr> 285<P>CONFIDENTIAL</p> 286</BODY> 287</HTML>