vram bg initial version

This commit is contained in:
mtheall 2012-04-29 19:51:11 -05:00
parent 5f908d6fb1
commit 4aedd5162e
3 changed files with 1385 additions and 0 deletions

56
vram.css Normal file
View File

@ -0,0 +1,56 @@
body {
font-family: "Courier New";
font-size: 8pt;
background-color: #DFDFFF;
color: black;
padding: 0;
margin: 0;
}
table, td {
background: #E7E7FF;
border-color: black;
border-style: solid;
border-spacing: 0;
border-collapse: collapse;
border-width: 1px 1px 1px 1px;
text-align: right;
vertical-align: top;
font-size: 8pt;
}
table.main, td.main, tr.main {
background-color: #DFDFFF;
border-width: 4px;
border-style: none;
text-align: left;
}
td { padding: 2px 10px 2px 10px; }
.left { text-align: left; }
.center { text-align: center; }
td.g { background: #00FF00; }
td.r { background: #FF0000; }
td.dr { background: #804000; }
td.y { background: #FFFF00; }
td.x { background: #777777; }
td.black { background: #000000; }
#Content { margin: 8pt; }
#ShareLink {
background: #E7E7FF;
border-color: black;
border-style: solid;
border-width: 1px 1px 1px 1px;
padding: 2px;
}
#Report {
font-size: 12pt;
font-weight: bold;
}
#FunctionCall { background: #FFFFFF; }

683
vram.htm Normal file
View File

@ -0,0 +1,683 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="description" content="View conflicts in your VRAM BG allocation for your NDS homebrew. This is the worksheet you need to satisfy in order to ensure non-corrupted BG graphics." />
<meta name="keywords" content="nds, bg, background, vram, allocate, allocation, homebrew, nintendo ds" />
<link rel="stylesheet" href="vram.css">
<script type="text/javascript" src="vram.js"></script>
<title>NDS Homebrew VRAM BG Allocation Conflict Viewer</title>
</head>
<body onLoad="loadp()">
<div id="Content">
<h1>NDS Homebrew VRAM BG Allocation Conflict Viewer</h1>
<h4>For the VRAM Banks Selector tool <a href="banks.php">click here</a></h4>
<h4>Please contact mtheall in #dsdev on irc.blitzed.org regarding errors, discrepancies, suggestions, or bugs with this tool</h4>
<h4>Link for sharing: <span id='ShareLink'>Javascript must be enabled</span></h4>
<hr />
<form name='bgvram'>
<table class='main'>
<tr><td class='main' style='width:350px'>
<h2>Base select</h2>
<p>DISPCNT Map Base 64KB Step</p>
<select name="MS" onChange="upd()">
<option value="0" selected>0: 0x06000000-0x0600FFFF</option>
<option value="1" >1: 0x06010000-0x0601FFFF</option>
<option value="2" >2: 0x06020000-0x0602FFFF</option>
<option value="3" >3: 0x06030000-0x0603FFFF</option>
<option value="4" >4: 0x06040000-0x0604FFFF</option>
<option value="5" >5: 0x06050000-0x0605FFFF</option>
<option value="6" >6: 0x06060000-0x0606FFFF</option>
<option value="7" >7: 0x06070000-0x0607FFFF</option>
</select>
<p>DISPCNT Tile Base 64KB Step</p>
<select name="TS" onChange="upd()">
<option value="0" selected>0: 0x06000000-0x0600FFFF</option>
<option value="1" >1: 0x06010000-0x0601FFFF</option>
<option value="2" >2: 0x06020000-0x0602FFFF</option>
<option value="3" >3: 0x06030000-0x0603FFFF</option>
<option value="4" >4: 0x06040000-0x0604FFFF</option>
<option value="5" >5: 0x06050000-0x0605FFFF</option>
<option value="6" >6: 0x06060000-0x0606FFFF</option>
<option value="7" >7: 0x06070000-0x0607FFFF</option>
</select>
</td><td class='main'>
<h2>Results</h2>
<div id="Report"></div>
<br />
<div id="Mapping_Status"></div>
<div id="Recommended_Mode"></div>
<div id="Working_Engines"></div>
<br />
<div id="BG0_Usage"></div>
<div id="BG1_Usage"></div>
<div id="BG2_Usage"></div>
<div id="BG3_Usage"></div>
<br />
</td></tr><tr><td class='main'>
<h2>Options</h2>
<table>
<tr><td style='width:120px'><b>Background 0</b></td><td style='width:160px'>
<select name="T0" onChange="upd()">
<option value="NULL" selected>NULL</option>
<option value="Text8bpp" >BgType_Text8bpp</option>
<option value="Text4bpp" >BgType_Text4bpp</option>
</select>
</td></tr>
<tr id='BG_TS0' style='display:none'>
<td>Size</td><td>
<select name="TS0" onChange="upd()">
<option value="T_256x256" selected>BgSize_T_256x256</option>
<option value="T_512x256" >BgSize_T_512x256</option>
<option value="T_256x512" >BgSize_T_256x512</option>
<option value="T_512x512" >BgSize_T_512x512</option>
</select>
</td>
</tr>
<tr id='BG_NT0' style='display:none'>
<td>Maximum Tiles</td><td>
<select name="NT0" onChange="upd()">
<option value="32" selected>&lt;= 32 Tiles</option>
<option value="64" >&lt;= 64 Tiles</option>
<option value="96" >&lt;= 96 Tiles</option>
<option value="128" >&lt;= 128 Tiles</option>
<option value="160" >&lt;= 160 Tiles</option>
<option value="192" >&lt;= 192 Tiles</option>
<option value="224" >&lt;= 224 Tiles</option>
<option value="256" >&lt;= 256 Tiles</option>
<option value="288" >&lt;= 288 Tiles</option>
<option value="320" >&lt;= 320 Tiles</option>
<option value="352" >&lt;= 352 Tiles</option>
<option value="384" >&lt;= 384 Tiles</option>
<option value="416" >&lt;= 416 Tiles</option>
<option value="448" >&lt;= 448 Tiles</option>
<option value="480" >&lt;= 480 Tiles</option>
<option value="512" >&lt;= 512 Tiles</option>
<option value="544" >&lt;= 544 Tiles</option>
<option value="576" >&lt;= 576 Tiles</option>
<option value="608" >&lt;= 608 Tiles</option>
<option value="640" >&lt;= 640 Tiles</option>
<option value="672" >&lt;= 672 Tiles</option>
<option value="704" >&lt;= 704 Tiles</option>
<option value="736" >&lt;= 736 Tiles</option>
<option value="768" >&lt;= 768 Tiles</option>
<option value="800" >&lt;= 800 Tiles</option>
<option value="832" >&lt;= 832 Tiles</option>
<option value="864" >&lt;= 864 Tiles</option>
<option value="896" >&lt;= 896 Tiles</option>
<option value="928" >&lt;= 928 Tiles</option>
<option value="960" >&lt;= 960 Tiles</option>
<option value="992" >&lt;= 992 Tiles</option>
<option value="1024" >&lt;= 1024 Tiles</option>
</select>
</td>
</tr>
<tr id='BG_MB0' style='display:none'>
<td>Map Base</td><td>
<select name="MB0" onChange="upd()">
<option value="0" selected>Map Base 0</option>
<option value="1" >Map Base 1</option>
<option value="2" >Map Base 2</option>
<option value="3" >Map Base 3</option>
<option value="4" >Map Base 4</option>
<option value="5" >Map Base 5</option>
<option value="6" >Map Base 6</option>
<option value="7" >Map Base 7</option>
<option value="8" >Map Base 8</option>
<option value="9" >Map Base 9</option>
<option value="10" >Map Base 10</option>
<option value="11" >Map Base 11</option>
<option value="12" >Map Base 12</option>
<option value="13" >Map Base 13</option>
<option value="14" >Map Base 14</option>
<option value="15" >Map Base 15</option>
<option value="16" >Map Base 16</option>
<option value="17" >Map Base 17</option>
<option value="18" >Map Base 18</option>
<option value="19" >Map Base 19</option>
<option value="20" >Map Base 20</option>
<option value="21" >Map Base 21</option>
<option value="22" >Map Base 22</option>
<option value="23" >Map Base 23</option>
<option value="24" >Map Base 24</option>
<option value="25" >Map Base 25</option>
<option value="26" >Map Base 26</option>
<option value="27" >Map Base 27</option>
<option value="28" >Map Base 28</option>
<option value="29" >Map Base 29</option>
<option value="30" >Map Base 30</option>
<option value="31" >Map Base 31</option>
</select>
</td>
</tr>
<tr id='BG_TB0' style='display:none'>
<td>Tile Base</td><td>
<select name="TB0" onChange="upd()">
<option value="0" selected>Tile Base 0</option>
<option value="1" >Tile Base 1</option>
<option value="2" >Tile Base 2</option>
<option value="3" >Tile Base 3</option>
<option value="4" >Tile Base 4</option>
<option value="5" >Tile Base 5</option>
<option value="6" >Tile Base 6</option>
<option value="7" >Tile Base 7</option>
<option value="8" >Tile Base 8</option>
<option value="9" >Tile Base 9</option>
<option value="10" >Tile Base 10</option>
<option value="11" >Tile Base 11</option>
<option value="12" >Tile Base 12</option>
<option value="13" >Tile Base 13</option>
<option value="14" >Tile Base 14</option>
<option value="15" >Tile Base 15</option>
</select>
</td>
</tr>
<tr><td colspan="2"><div id="BG_DESC0" class="left"></div></td></tr>
<tr><td colspan="2" style="background:#777799"></td></tr>
<tr>
<td><b>Background 1</b></td><td>
<select name="T1" onChange="upd()">
<option value="NULL" selected>NULL</option>
<option value="Text8bpp" >BgType_Text8bpp</option>
<option value="Text4bpp" >BgType_Text4bpp</option>
</select>
</td></tr>
<tr id='BG_TS1' style='display:none'>
<td>Size</td><td>
<select name="TS1" onChange="upd()">
<option value="T_256x256" selected>BgSize_T_256x256</option>
<option value="T_512x256" >BgSize_T_512x256</option>
<option value="T_256x512" >BgSize_T_256x512</option>
<option value="T_512x512" >BgSize_T_512x512</option>
</select>
</td>
</tr>
<tr id='BG_NT1' style='display:none'>
<td>Maximum Tiles</td><td>
<select name="NT1" onChange="upd()">
<option value="32" selected>&lt;= 32 Tiles</option>
<option value="64" >&lt;= 64 Tiles</option>
<option value="96" >&lt;= 96 Tiles</option>
<option value="128" >&lt;= 128 Tiles</option>
<option value="160" >&lt;= 160 Tiles</option>
<option value="192" >&lt;= 192 Tiles</option>
<option value="224" >&lt;= 224 Tiles</option>
<option value="256" >&lt;= 256 Tiles</option>
<option value="288" >&lt;= 288 Tiles</option>
<option value="320" >&lt;= 320 Tiles</option>
<option value="352" >&lt;= 352 Tiles</option>
<option value="384" >&lt;= 384 Tiles</option>
<option value="416" >&lt;= 416 Tiles</option>
<option value="448" >&lt;= 448 Tiles</option>
<option value="480" >&lt;= 480 Tiles</option>
<option value="512" >&lt;= 512 Tiles</option>
<option value="544" >&lt;= 544 Tiles</option>
<option value="576" >&lt;= 576 Tiles</option>
<option value="608" >&lt;= 608 Tiles</option>
<option value="640" >&lt;= 640 Tiles</option>
<option value="672" >&lt;= 672 Tiles</option>
<option value="704" >&lt;= 704 Tiles</option>
<option value="736" >&lt;= 736 Tiles</option>
<option value="768" >&lt;= 768 Tiles</option>
<option value="800" >&lt;= 800 Tiles</option>
<option value="832" >&lt;= 832 Tiles</option>
<option value="864" >&lt;= 864 Tiles</option>
<option value="896" >&lt;= 896 Tiles</option>
<option value="928" >&lt;= 928 Tiles</option>
<option value="960" >&lt;= 960 Tiles</option>
<option value="992" >&lt;= 992 Tiles</option>
<option value="1024" >&lt;= 1024 Tiles</option>
</select>
</td>
</tr>
<tr id='BG_MB1' style='display:none'>
<td>Map Base</td><td>
<select name="MB1" onChange="upd()">
<option value="0" selected>Map Base 0</option>
<option value="1" >Map Base 1</option>
<option value="2" >Map Base 2</option>
<option value="3" >Map Base 3</option>
<option value="4" >Map Base 4</option>
<option value="5" >Map Base 5</option>
<option value="6" >Map Base 6</option>
<option value="7" >Map Base 7</option>
<option value="8" >Map Base 8</option>
<option value="9" >Map Base 9</option>
<option value="10" >Map Base 10</option>
<option value="11" >Map Base 11</option>
<option value="12" >Map Base 12</option>
<option value="13" >Map Base 13</option>
<option value="14" >Map Base 14</option>
<option value="15" >Map Base 15</option>
<option value="16" >Map Base 16</option>
<option value="17" >Map Base 17</option>
<option value="18" >Map Base 18</option>
<option value="19" >Map Base 19</option>
<option value="20" >Map Base 20</option>
<option value="21" >Map Base 21</option>
<option value="22" >Map Base 22</option>
<option value="23" >Map Base 23</option>
<option value="24" >Map Base 24</option>
<option value="25" >Map Base 25</option>
<option value="26" >Map Base 26</option>
<option value="27" >Map Base 27</option>
<option value="28" >Map Base 28</option>
<option value="29" >Map Base 29</option>
<option value="30" >Map Base 30</option>
<option value="31" >Map Base 31</option>
</select>
</td>
</tr>
<tr id='BG_TB1' style='display:none'>
<td>Tile Base</td><td>
<select name="TB1" onChange="upd()">
<option value="0" selected>Tile Base 0</option>
<option value="1" >Tile Base 1</option>
<option value="2" >Tile Base 2</option>
<option value="3" >Tile Base 3</option>
<option value="4" >Tile Base 4</option>
<option value="5" >Tile Base 5</option>
<option value="6" >Tile Base 6</option>
<option value="7" >Tile Base 7</option>
<option value="8" >Tile Base 8</option>
<option value="9" >Tile Base 9</option>
<option value="10" >Tile Base 10</option>
<option value="11" >Tile Base 11</option>
<option value="12" >Tile Base 12</option>
<option value="13" >Tile Base 13</option>
<option value="14" >Tile Base 14</option>
<option value="15" >Tile Base 15</option>
</select>
</td>
</tr>
<tr><td colspan="2"><div id="BG_DESC1" class="left"></div></td></tr>
<tr><td colspan="2" style="background:#777799"></td></tr>
<tr>
<td><b>Background 2</b></td><td>
<select name="T2" onChange="upd()">
<option value="NULL" selected>NULL</option>
<option value="Text8bpp" >BgType_Text8bpp</option>
<option value="Text4bpp" >BgType_Text4bpp</option>
<option value="Rotation" >BgType_Rotation</option>
<option value="ExRotation" >BgType_ExRotation</option>
<option value="Bmp8" >BgType_Bmp8</option>
<option value="Bmp16" >BgType_Bmp16</option>
</select>
</td></tr>
<tr id='BG_TS2' style='display:none'>
<td>Size</td><td>
<select name="TS2" onChange="upd()">
<option value="T_256x256" selected>BgSize_T_256x256</option>
<option value="T_512x256" >BgSize_T_512x256</option>
<option value="T_256x512" >BgSize_T_256x512</option>
<option value="T_512x512" >BgSize_T_512x512</option>
</select>
</td>
</tr>
<tr id='BG_RS2' style='display:none'>
<td>Size</td><td>
<select name="RS2" onChange="upd()">
<option value="R_128x128" selected>BgSize_R_128x128</option>
<option value="R_256x256" >BgSize_R_256x256</option>
<option value="R_512x512" >BgSize_R_512x512</option>
<option value="R_1024x1024" >BgSize_R_1024x1024</option>
</select>
</td>
</tr>
<tr id='BG_ERS2' style='display:none'>
<td>Size</td><td>
<select name="ERS2" onChange="upd()">
<option value="ER_128x128" selected>BgSize_ER_128x128</option>
<option value="ER_256x256" >BgSize_ER_256x256</option>
<option value="ER_512x512" >BgSize_ER_512x512</option>
<option value="ER_1024x1024" >BgSize_ER_1024x1024</option>
</select>
</td>
</tr>
<tr id='BG_B8S2' style='display:none'>
<td>Size</td><td>
<select name="B8S2" onChange="upd()">
<option value="B8_128x128" selected>BgSize_B8_128x128</option>
<option value="B8_256x192" >Note1: 256x192</option>
<option value="B8_256x256" >BgSize_B8_256x256</option>
<option value="B8_512x256" >BgSize_B8_512x256</option>
<option value="B8_512x512" >BgSize_B8_512x512</option>
</select>
</td>
</tr>
<tr id='BG_B16S2' style='display:none'>
<td>Size</td><td>
<select name="B16S2" onChange="upd()">
<option value="B16_128x128" selected>BgSize_B16_128x128</option>
<option value="B16_256x192" >Note1: 256x192</option>
<option value="B16_256x256" >BgSize_B16_256x256</option>
<option value="B16_512x256" >BgSize_B16_512x256</option>
<option value="B16_512x512" >BgSize_B16_512x512</option>
</select>
</td>
</tr>
<tr id='BG_NT2' style='display:none'>
<td>Maximum Tiles</td><td>
<select name="NT2" onChange="upd()">
<option value="32" selected>&lt;= 32 Tiles</option>
<option value="64" >&lt;= 64 Tiles</option>
<option value="96" >&lt;= 96 Tiles</option>
<option value="128" >&lt;= 128 Tiles</option>
<option value="160" >&lt;= 160 Tiles</option>
<option value="192" >&lt;= 192 Tiles</option>
<option value="224" >&lt;= 224 Tiles</option>
<option value="256" >&lt;= 256 Tiles</option>
<option value="288" >&lt;= 288 Tiles</option>
<option value="320" >&lt;= 320 Tiles</option>
<option value="352" >&lt;= 352 Tiles</option>
<option value="384" >&lt;= 384 Tiles</option>
<option value="416" >&lt;= 416 Tiles</option>
<option value="448" >&lt;= 448 Tiles</option>
<option value="480" >&lt;= 480 Tiles</option>
<option value="512" >&lt;= 512 Tiles</option>
<option value="544" >&lt;= 544 Tiles</option>
<option value="576" >&lt;= 576 Tiles</option>
<option value="608" >&lt;= 608 Tiles</option>
<option value="640" >&lt;= 640 Tiles</option>
<option value="672" >&lt;= 672 Tiles</option>
<option value="704" >&lt;= 704 Tiles</option>
<option value="736" >&lt;= 736 Tiles</option>
<option value="768" >&lt;= 768 Tiles</option>
<option value="800" >&lt;= 800 Tiles</option>
<option value="832" >&lt;= 832 Tiles</option>
<option value="864" >&lt;= 864 Tiles</option>
<option value="896" >&lt;= 896 Tiles</option>
<option value="928" >&lt;= 928 Tiles</option>
<option value="960" >&lt;= 960 Tiles</option>
<option value="992" >&lt;= 992 Tiles</option>
<option value="1024" >&lt;= 1024 Tiles</option>
</select>
</td>
</tr>
<tr id='BG_RNT2' style='display:none'>
<td>Maximum Tiles</td><td>
<select name="RNT2" onChange="upd()">
<option value="32" selected>&lt;= 32 Tiles</option>
<option value="64" >&lt;= 64 Tiles</option>
<option value="96" >&lt;= 96 Tiles</option>
<option value="128" >&lt;= 128 Tiles</option>
<option value="160" >&lt;= 160 Tiles</option>
<option value="192" >&lt;= 192 Tiles</option>
<option value="224" >&lt;= 224 Tiles</option>
<option value="256" >&lt;= 256 Tiles</option>
</select>
</td>
</tr>
<tr id='BG_MB2' style='display:none'>
<td>Map Base</td><td>
<select name="MB2" onChange="upd()">
<option value="0" selected>Map Base 0</option>
<option value="1" >Map Base 1</option>
<option value="2" >Map Base 2</option>
<option value="3" >Map Base 3</option>
<option value="4" >Map Base 4</option>
<option value="5" >Map Base 5</option>
<option value="6" >Map Base 6</option>
<option value="7" >Map Base 7</option>
<option value="8" >Map Base 8</option>
<option value="9" >Map Base 9</option>
<option value="10" >Map Base 10</option>
<option value="11" >Map Base 11</option>
<option value="12" >Map Base 12</option>
<option value="13" >Map Base 13</option>
<option value="14" >Map Base 14</option>
<option value="15" >Map Base 15</option>
<option value="16" >Map Base 16</option>
<option value="17" >Map Base 17</option>
<option value="18" >Map Base 18</option>
<option value="19" >Map Base 19</option>
<option value="20" >Map Base 20</option>
<option value="21" >Map Base 21</option>
<option value="22" >Map Base 22</option>
<option value="23" >Map Base 23</option>
<option value="24" >Map Base 24</option>
<option value="25" >Map Base 25</option>
<option value="26" >Map Base 26</option>
<option value="27" >Map Base 27</option>
<option value="28" >Map Base 28</option>
<option value="29" >Map Base 29</option>
<option value="30" >Map Base 30</option>
<option value="31" >Map Base 31</option>
</select>
</td>
</tr>
<tr id='BG_TB2' style='display:none'>
<td>Tile Base</td><td>
<select name="TB2" onChange="upd()">
<option value="0" selected>Tile Base 0</option>
<option value="1" >Tile Base 1</option>
<option value="2" >Tile Base 2</option>
<option value="3" >Tile Base 3</option>
<option value="4" >Tile Base 4</option>
<option value="5" >Tile Base 5</option>
<option value="6" >Tile Base 6</option>
<option value="7" >Tile Base 7</option>
<option value="8" >Tile Base 8</option>
<option value="9" >Tile Base 9</option>
<option value="10" >Tile Base 10</option>
<option value="11" >Tile Base 11</option>
<option value="12" >Tile Base 12</option>
<option value="13" >Tile Base 13</option>
<option value="14" >Tile Base 14</option>
<option value="15" >Tile Base 15</option>
</select>
</td>
</tr>
<tr><td colspan="2"><div id="BG_DESC2" class="left"></div></td></tr>
<tr><td colspan="2" style="background:#777799"></td></tr>
<tr>
<td><b>Background 3</b></td><td>
<select name="T3" onChange="upd()">
<option value="NULL" selected>NULL</option>
<option value="Text8bpp" >BgType_Text8bpp</option>
<option value="Text4bpp" >BgType_Text4bpp</option>
<option value="Rotation" >BgType_Rotation</option>
<option value="ExRotation" >BgType_ExRotation</option>
<option value="Bmp8" >BgType_Bmp8</option>
<option value="Bmp16" >BgType_Bmp16</option>
</select>
</td></tr>
<tr id='BG_TS3' style='display:none'>
<td>Size</td><td>
<select name="TS3" onChange="upd()">
<option value="T_256x256" selected>BgSize_T_256x256</option>
<option value="T_512x256" >BgSize_T_512x256</option>
<option value="T_256x512" >BgSize_T_256x512</option>
<option value="T_512x512" >BgSize_T_512x512</option>
</select>
</td>
</tr>
<tr id='BG_RS3' style='display:none'>
<td>Size</td><td>
<select name="RS3" onChange="upd()">
<option value="R_128x128" selected>BgSize_R_128x128</option>
<option value="R_256x256" >BgSize_R_256x256</option>
<option value="R_512x512" >BgSize_R_512x512</option>
<option value="R_1024x1024" >BgSize_R_1024x1024</option>
</select>
</td>
</tr>
<tr id='BG_ERS3' style='display:none'>
<td>Size</td><td>
<select name="ERS3" onChange="upd()">
<option value="ER_128x128" selected>BgSize_ER_128x128</option>
<option value="ER_256x256" >BgSize_ER_256x256</option>
<option value="ER_512x512" >BgSize_ER_512x512</option>
<option value="ER_1024x1024" >BgSize_ER_1024x1024</option>
</select>
</td>
</tr>
<tr id='BG_B8S3' style='display:none'>
<td>Size</td><td>
<select name="B8S3" onChange="upd()">
<option value="B8_128x128" selected>BgSize_B8_128x128</option>
<option value="B8_256x192" >Note1: 256x192</option>
<option value="B8_256x256" >BgSize_B8_256x256</option>
<option value="B8_512x256" >BgSize_B8_512x256</option>
<option value="B8_512x512" >BgSize_B8_512x512</option>
</select>
</td>
</tr>
<tr id='BG_B16S3' style='display:none'>
<td>Size</td><td>
<select name="B16S3" onChange="upd()">
<option value="B16_128x128" selected>BgSize_B16_128x128</option>
<option value="B16_256x192" >Note1: 256x192</option>
<option value="B16_256x256" >BgSize_B16_256x256</option>
<option value="B16_512x256" >BgSize_B16_512x256</option>
<option value="B16_512x512" >BgSize_B16_512x512</option>
</select>
</td>
</tr>
<tr id='BG_NT3' style='display:none'>
<td>Maximum Tiles</td><td>
<select name="NT3" onChange="upd()">
<option value="32" selected>&lt;= 32 Tiles</option>
<option value="64" >&lt;= 64 Tiles</option>
<option value="96" >&lt;= 96 Tiles</option>
<option value="128" >&lt;= 128 Tiles</option>
<option value="160" >&lt;= 160 Tiles</option>
<option value="192" >&lt;= 192 Tiles</option>
<option value="224" >&lt;= 224 Tiles</option>
<option value="256" >&lt;= 256 Tiles</option>
<option value="288" >&lt;= 288 Tiles</option>
<option value="320" >&lt;= 320 Tiles</option>
<option value="352" >&lt;= 352 Tiles</option>
<option value="384" >&lt;= 384 Tiles</option>
<option value="416" >&lt;= 416 Tiles</option>
<option value="448" >&lt;= 448 Tiles</option>
<option value="480" >&lt;= 480 Tiles</option>
<option value="512" >&lt;= 512 Tiles</option>
<option value="544" >&lt;= 544 Tiles</option>
<option value="576" >&lt;= 576 Tiles</option>
<option value="608" >&lt;= 608 Tiles</option>
<option value="640" >&lt;= 640 Tiles</option>
<option value="672" >&lt;= 672 Tiles</option>
<option value="704" >&lt;= 704 Tiles</option>
<option value="736" >&lt;= 736 Tiles</option>
<option value="768" >&lt;= 768 Tiles</option>
<option value="800" >&lt;= 800 Tiles</option>
<option value="832" >&lt;= 832 Tiles</option>
<option value="864" >&lt;= 864 Tiles</option>
<option value="896" >&lt;= 896 Tiles</option>
<option value="928" >&lt;= 928 Tiles</option>
<option value="960" >&lt;= 960 Tiles</option>
<option value="992" >&lt;= 992 Tiles</option>
<option value="1024" >&lt;= 1024 Tiles</option>
</select>
</td>
</tr>
<tr id='BG_RNT3' style='display:none'>
<td>Maximum Tiles</td><td>
<select name="RNT3" onChange="upd()">
<option value="32" selected>&lt;= 32 Tiles</option>
<option value="64" >&lt;= 64 Tiles</option>
<option value="96" >&lt;= 96 Tiles</option>
<option value="128" >&lt;= 128 Tiles</option>
<option value="160" >&lt;= 160 Tiles</option>
<option value="192" >&lt;= 192 Tiles</option>
<option value="224" >&lt;= 224 Tiles</option>
<option value="256" >&lt;= 256 Tiles</option>
</select>
</td>
</tr>
<tr id='BG_MB3' style='display:none'>
<td>Map Base</td><td>
<select name="MB3" onChange="upd()">
<option value="0" selected>Map Base 0</option>
<option value="1" >Map Base 1</option>
<option value="2" >Map Base 2</option>
<option value="3" >Map Base 3</option>
<option value="4" >Map Base 4</option>
<option value="5" >Map Base 5</option>
<option value="6" >Map Base 6</option>
<option value="7" >Map Base 7</option>
<option value="8" >Map Base 8</option>
<option value="9" >Map Base 9</option>
<option value="10" >Map Base 10</option>
<option value="11" >Map Base 11</option>
<option value="12" >Map Base 12</option>
<option value="13" >Map Base 13</option>
<option value="14" >Map Base 14</option>
<option value="15" >Map Base 15</option>
<option value="16" >Map Base 16</option>
<option value="17" >Map Base 17</option>
<option value="18" >Map Base 18</option>
<option value="19" >Map Base 19</option>
<option value="20" >Map Base 20</option>
<option value="21" >Map Base 21</option>
<option value="22" >Map Base 22</option>
<option value="23" >Map Base 23</option>
<option value="24" >Map Base 24</option>
<option value="25" >Map Base 25</option>
<option value="26" >Map Base 26</option>
<option value="27" >Map Base 27</option>
<option value="28" >Map Base 28</option>
<option value="29" >Map Base 29</option>
<option value="30" >Map Base 30</option>
<option value="31" >Map Base 31</option>
</select>
</td>
</tr>
<tr id='BG_TB3' style='display:none'>
<td>Tile Base</td><td>
<select name="TB3" onChange="upd()">
<option value="0" selected>Tile Base 0</option>
<option value="1" >Tile Base 1</option>
<option value="2" >Tile Base 2</option>
<option value="3" >Tile Base 3</option>
<option value="4" >Tile Base 4</option>
<option value="5" >Tile Base 5</option>
<option value="6" >Tile Base 6</option>
<option value="7" >Tile Base 7</option>
<option value="8" >Tile Base 8</option>
<option value="9" >Tile Base 9</option>
<option value="10" >Tile Base 10</option>
<option value="11" >Tile Base 11</option>
<option value="12" >Tile Base 12</option>
<option value="13" >Tile Base 13</option>
<option value="14" >Tile Base 14</option>
<option value="15" >Tile Base 15</option>
</select>
</td>
</tr>
<tr><td colspan="2"><div id="BG_DESC3" class="left"></div></td></tr>
<tr><td colspan="2" style="background:#777799"></td></tr>
</table>
<p>Default console font uses 128 tiles.<br />(Choose "&lt;= 128 Tiles")</p>
<p>Default keyboard uses 857 tiles.<br />(Choose "&lt;= 864 Tiles")</p>
<p>&nbsp;</p>
<h2>Function Call</h2>
<table style='width:320px'>
<thead>
<tr><td class='left'><input type="checkbox" name="FuncCallSub" value="yes" onClick="upd()">Generate for Sub Engine</td></tr>
</thead>
<tr><td class='left' id='FunctionCall'>Javascript must be enabled</td></tr>
</table>
<p>&nbsp;</p>
<table style='width:320px'>
<tr><td colspan=3 class="left">Legend</td></tr>
<tr><td class="g" style='width=32px'></td><td class="left">Okay!</td><td class="left"></td></tr>
<tr><td class="y" style='width=32px'></td><td class="left">Warning!</td><td class="left">Safe if shared tileset graphics</td></tr>
<tr><td class="r" style='width=32px'></td><td class="left">Error!</td><td class="left">You will definitely have corrupted graphics.<br>Additionally, zeromus will slap you.</td></tr>
<tr><td class="dr" style='width=32px'></td><td class="left">Outside<br />Range!</td><td class="left">Graphics falls outside the valid range.</td></tr>
<tr><td class="x" style='width=32px'></td><td class="left">Inaccessible</td><td class="left">Data here isn't accessed by the engine.</td></tr>
<tr><td class="" style='width=32px'></td><td class="left">Empty</td><td class="left"></td></tr>
</table>
</td><td class='main'>
<div id="VRAMBGAlloc">
<div id='BGAllocationTable'>Javascript must be enabled</div>
</div>
</td></tr>
</table>
</form>
<hr />
<p>Copyright 2011-2012, mtheall &amp; JustBurn</p>
</div>
</body>
</html>

646
vram.js Normal file
View File

@ -0,0 +1,646 @@
function getParameterByName(name)
{
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&]" + name + "=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.search);
if(results == null)
return "";
else
return decodeURIComponent(results[1].replace(/\+/g, " "));
}
function hasParameterByName(name)
{
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&]" + name + "=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.search);
if(results == null)
return false;
else
return true;
}
function V2Digits(size)
{
return Math.round(size * 100) / 100;
}
var DISPCNT_MapBase = 0;
var DISPCNT_TileBase = 0;
// &0 = Area valid
// &8 = Area invalid
// --
// +0 = Empty
// +1 = Valid (Tileset)
// +2 = Valid (Bitmap)
// +3 = Warning
// +4 = Error
var ColorCode = [
"#DFDFFF", "#00FF00", "#00FF00", "#FFFF00", "#FF0000", "black", "black", "black",
"#777777", "#408000", "#408000", "#808000", "#800000", "black", "black", "black"
];
var WorkModes = [
0, 0, 0, 1, 3, 3, 3, -1,
0, 0, 0, 1, 3, 3, 3, -1,
0, 0, 0, 1, 3, 3, 3, -1,
2, -1, -1, 2, 4, 4, 4, -1,
5, -1, -1, -1, 5, 5, 5, -1,
5, -1, -1, -1, 5, 5, 5, -1,
5, -1, -1, -1, 5, 5, 5, -1
];
var VRAM_BGMapping = Array();
var VRAM_BGError = Array();
var VRAM_BGSpace = Array();
var BGType_TSiz = [1, 2, 2, 4];
var BGType_RSiz = [0.125, 1, 2, 8];
var BGType_ERSiz = [0.25, 1, 4, 16];
var BGType_B8Siz = [8, 24, 32, 64, 128];
var BGType_B16Siz = [16, 48, 64, 128, 256];
var ShareLink;
var Function_Call;
var CPU_Access;
function loadp()
{
var i;
// Initialize 2D array
for (i=0; i<8; i++) VRAM_BGMapping[i] = Array();
// Setup options
if (hasParameterByName('MS')) document.forms['bgvram'].MS.options.selectedIndex = getParameterByName('MS');
if (hasParameterByName('TS')) document.forms['bgvram'].TS.options.selectedIndex = getParameterByName('TS');
if (hasParameterByName('T0')) document.forms['bgvram'].T0.options.selectedIndex = getParameterByName('T0');
if (hasParameterByName('NT0')) document.forms['bgvram'].NT0.options.selectedIndex = (getParameterByName('NT0') / 32) - 1;
if (hasParameterByName('MB0')) document.forms['bgvram'].MB0.options.selectedIndex = getParameterByName('MB0');
if (hasParameterByName('TB0')) document.forms['bgvram'].TB0.options.selectedIndex = getParameterByName('TB0');
if (hasParameterByName('S0')) document.forms['bgvram'].TS0.options.selectedIndex = getParameterByName('S0');
if (hasParameterByName('T1')) document.forms['bgvram'].T1.options.selectedIndex = getParameterByName('T1');
if (hasParameterByName('NT1')) document.forms['bgvram'].NT1.options.selectedIndex = (getParameterByName('NT1') / 32) - 1;
if (hasParameterByName('MB1')) document.forms['bgvram'].MB1.options.selectedIndex = getParameterByName('MB1');
if (hasParameterByName('TB1')) document.forms['bgvram'].TB1.options.selectedIndex = getParameterByName('TB1');
if (hasParameterByName('S1')) document.forms['bgvram'].TS1.options.selectedIndex = getParameterByName('S1');
if (hasParameterByName('T2')) document.forms['bgvram'].T2.options.selectedIndex = getParameterByName('T2');
if (hasParameterByName('NT2')) document.forms['bgvram'].NT2.options.selectedIndex = (getParameterByName('NT2') / 32) - 1;
if (hasParameterByName('MB2')) document.forms['bgvram'].MB2.options.selectedIndex = getParameterByName('MB2');
if (hasParameterByName('TB2')) document.forms['bgvram'].TB2.options.selectedIndex = getParameterByName('TB2');
if (hasParameterByName('S2')) {
document.forms['bgvram'].TS2.options.selectedIndex = getParameterByName('S2');
document.forms['bgvram'].RS2.options.selectedIndex = getParameterByName('S2');
document.forms['bgvram'].ERS2.options.selectedIndex = getParameterByName('S2');
document.forms['bgvram'].B8S2.options.selectedIndex = getParameterByName('S2');
document.forms['bgvram'].B16S2.options.selectedIndex = getParameterByName('S2');
}
if (hasParameterByName('T3')) document.forms['bgvram'].T3.options.selectedIndex = getParameterByName('T3');
if (hasParameterByName('NT3')) document.forms['bgvram'].NT3.options.selectedIndex = (getParameterByName('NT3') / 32) - 1;
if (hasParameterByName('MB3')) document.forms['bgvram'].MB3.options.selectedIndex = getParameterByName('MB3');
if (hasParameterByName('TB3')) document.forms['bgvram'].TB3.options.selectedIndex = getParameterByName('TB3');
if (hasParameterByName('S3')) {
document.forms['bgvram'].TS3.options.selectedIndex = getParameterByName('S3');
document.forms['bgvram'].RS3.options.selectedIndex = getParameterByName('S3');
document.forms['bgvram'].ERS3.options.selectedIndex = getParameterByName('S3');
document.forms['bgvram'].B8S3.options.selectedIndex = getParameterByName('S3');
document.forms['bgvram'].B16S3.options.selectedIndex = getParameterByName('S3');
}
// Update
upd();
}
function bg_alloc_from(bgnum, bgtype, size, maxtiles, mapbase, tilebase)
{
var i, j, sz, sz_t, sz_m, bgcstatus;
bgnum *= 2;
if (bgtype == 0) return;
if (bgtype == 1) {
sz_t = maxtiles / 32;
sz = Math.ceil(sz_t);
for (i=0; i<sz; i++) {
j = (DISPCNT_TileBase * 32) + (tilebase * 8) + i;
if ((j >= 0) && (j < 256)) VRAM_BGMapping[bgnum][j]++;
}
sz_m = BGType_TSiz[size];
sz = Math.ceil(sz_m);
for (i=0; i<sz; i++) {
j = (DISPCNT_MapBase * 32) + mapbase + i;
if ((j >= 0) && (j < 256)) VRAM_BGMapping[bgnum+1][j]++;
}
} else if (bgtype == 2) {
sz_t = maxtiles / 64;
sz = Math.ceil(sz_t);
for (i=0; i<sz; i++) {
j = (DISPCNT_TileBase * 32) + (tilebase * 8) + i;
if ((j >= 0) && (j < 256)) VRAM_BGMapping[bgnum][j]++;
}
sz_m = BGType_TSiz[size];
sz = Math.ceil(sz_m);
for (i=0; i<sz; i++) {
j = (DISPCNT_MapBase * 32) + mapbase + i;
if ((j >= 0) && (j < 256)) VRAM_BGMapping[bgnum+1][j]++;
}
} else if (bgtype == 3) {
sz_t = maxtiles / 32;
sz = Math.ceil(sz_t);
for (i=0; i<sz; i++) {
j = (DISPCNT_TileBase * 32) + (tilebase * 8) + i;
if ((j >= 0) && (j < 256)) VRAM_BGMapping[bgnum][j]++;
}
sz_m = BGType_RSiz[size];
sz = Math.ceil(sz_m);
for (i=0; i<sz; i++) {
j = (DISPCNT_MapBase * 32) + mapbase + i;
if ((j >= 0) && (j < 256)) VRAM_BGMapping[bgnum+1][j]++;
}
} else if (bgtype == 4) {
sz_t = maxtiles / 32;
sz = Math.ceil(sz_t);
for (i=0; i<sz; i++) {
j = (DISPCNT_TileBase * 32) + (tilebase * 8) + i;
if ((j >= 0) && (j < 256)) VRAM_BGMapping[bgnum][j]++;
}
sz_m = BGType_ERSiz[size];
sz = Math.ceil(sz_m);
for (i=0; i<sz; i++) {
j = (DISPCNT_MapBase * 32) + mapbase + i;
if ((j >= 0) && (j < 256)) VRAM_BGMapping[bgnum+1][j]++;
}
} else if (bgtype == 5) {
sz_t = BGType_B8Siz[size];
sz = Math.ceil(sz_t);
for (i=0; i<sz; i++) {
j = (DISPCNT_MapBase * 32) + (mapbase * 8) + i;
if ((j >= 0) && (j < 256)) VRAM_BGMapping[bgnum][j]+=2;
}
sz_m = 0;
} else if (bgtype == 6) {
sz_t = BGType_B16Siz[size];
sz = Math.ceil(sz_t);
for (i=0; i<sz; i++) {
j = (DISPCNT_MapBase * 32) + (mapbase * 8) + i;
if ((j >= 0) && (j < 256)) VRAM_BGMapping[bgnum][j]+=2;
}
sz_m = 0;
}
VRAM_BGSpace[bgnum] = sz_t * 2;
VRAM_BGSpace[bgnum+1] = sz_m * 2;
}
function bg_alloc_conflict()
{
var i, j, bg, numweight;
var ret = 1;
for (i=0; i<256; i++) {
VRAM_BGError[i] = 0;
numweight = 0;
for (bg=0; bg<8; bg+=2) {
// Mark weight
if ((VRAM_BGMapping[bg][i] & 7) == 1) numweight++;
if ((VRAM_BGMapping[bg][i] & 7) >= 2) numweight += numweight+1;
if ((VRAM_BGMapping[bg+1][i] & 7) != 0) numweight += 2;
if (VRAM_BGMapping[bg][i] > 8) numweight += 4;
if (VRAM_BGMapping[bg+1][i] > 8) numweight += 4;
}
if (numweight == 2) {
// Mark warnings
for (bg=0; bg<8; bg+=2) {
if ((VRAM_BGMapping[bg][i] & 7) > 0) {
VRAM_BGMapping[bg][i] = (VRAM_BGMapping[bg][i] & 8) + 3;
ret = 2;
}
}
}
if (numweight >= 3) {
// Mark errors
for (bg=0; bg<8; bg+=2) {
if ((VRAM_BGMapping[bg][i] & 7) > 0) VRAM_BGMapping[bg][i] = (VRAM_BGMapping[bg][i] & 8) + 4;
if ((VRAM_BGMapping[bg+1][i] & 7) > 0) VRAM_BGMapping[bg+1][i] = (VRAM_BGMapping[bg+1][i] & 8) + 4;
}
VRAM_BGError[i] = 1;
ret = 3;
}
}
return ret;
}
function bg_allocation()
{
var i, sz, szopt, maxtiles, mapbase, tilebase;
var bgtype0, bgtype1, bgtype2, bgtype3;
var wmode, funccallsub;
// Set DISPCNT offsets
DISPCNT_MapBase = document.forms['bgvram'].MS.options.selectedIndex;
if (DISPCNT_MapBase != 0) ShareLink += "&MS=" + DISPCNT_MapBase;
DISPCNT_TileBase = document.forms['bgvram'].TS.options.selectedIndex;
if (DISPCNT_TileBase != 0) ShareLink += "&TS=" + DISPCNT_TileBase;
funccallsub = document.forms['bgvram'].FuncCallSub.checked;
// Setup array
for (i=0; i<256; i++) {
a = -(DISPCNT_TileBase * 4) + (i / 8);
a = ((a >= 0) && (a < 16)) ? 0 : 8;
b = -(DISPCNT_MapBase * 32) + i;
b = ((b >= 0) && (b < 32)) ? 0 : 8;
VRAM_BGMapping[0][i] = a;
VRAM_BGMapping[1][i] = b;
VRAM_BGMapping[2][i] = a;
VRAM_BGMapping[3][i] = b;
VRAM_BGMapping[4][i] = a;
VRAM_BGMapping[5][i] = b;
VRAM_BGMapping[6][i] = a;
VRAM_BGMapping[7][i] = b;
}
for (i=0; i<8; i++) VRAM_BGSpace[i] = 0;
// Show/Hide controls
i = document.forms['bgvram'].T0.options.selectedIndex;
if (i > 0) {
document.getElementById('BG_TS0').style.display = "";
document.getElementById('BG_NT0').style.display = "";
document.getElementById('BG_MB0').style.display = "";
document.getElementById('BG_TB0').style.display = "";
} else {
document.getElementById('BG_TS0').style.display = "none";
document.getElementById('BG_NT0').style.display = "none";
document.getElementById('BG_MB0').style.display = "none";
document.getElementById('BG_TB0').style.display = "none";
}
i = document.forms['bgvram'].T1.options.selectedIndex;
if (i > 0) {
document.getElementById('BG_TS1').style.display = "";
document.getElementById('BG_NT1').style.display = "";
document.getElementById('BG_MB1').style.display = "";
document.getElementById('BG_TB1').style.display = "";
} else {
document.getElementById('BG_TS1').style.display = "none";
document.getElementById('BG_NT1').style.display = "none";
document.getElementById('BG_MB1').style.display = "none";
document.getElementById('BG_TB1').style.display = "none";
}
i = document.forms['bgvram'].T2.options.selectedIndex;
if (i > 0) {
document.getElementById('BG_TS2').style.display = (i < 3) ? "" : "none";
document.getElementById('BG_RS2').style.display = (i == 3) ? "" : "none";
document.getElementById('BG_ERS2').style.display = (i == 4) ? "" : "none";
document.getElementById('BG_B8S2').style.display = (i == 5) ? "" : "none";
document.getElementById('BG_B16S2').style.display = (i == 6) ? "" : "none";
document.getElementById('BG_NT2').style.display = ((i != 3) && (i < 5)) ? "" : "none";
document.getElementById('BG_RNT2').style.display = (i == 3) ? "" : "none";
document.getElementById('BG_MB2').style.display = "";
document.getElementById('BG_TB2').style.display = (i < 5) ? "" : "none";
} else {
document.getElementById('BG_TS2').style.display = "none";
document.getElementById('BG_RS2').style.display = "none";
document.getElementById('BG_ERS2').style.display = "none";
document.getElementById('BG_B8S2').style.display = "none";
document.getElementById('BG_B16S2').style.display = "none";
document.getElementById('BG_NT2').style.display = "none";
document.getElementById('BG_RNT2').style.display = "none";
document.getElementById('BG_MB2').style.display = "none";
document.getElementById('BG_TB2').style.display = "none";
}
i = document.forms['bgvram'].T3.options.selectedIndex;
if (i > 0) {
document.getElementById('BG_TS3').style.display = (i < 3) ? "" : "none";
document.getElementById('BG_RS3').style.display = (i == 3) ? "" : "none";
document.getElementById('BG_ERS3').style.display = (i == 4) ? "" : "none";
document.getElementById('BG_B8S3').style.display = (i == 5) ? "" : "none";
document.getElementById('BG_B16S3').style.display = (i == 6) ? "" : "none";
document.getElementById('BG_NT3').style.display = ((i != 3) && (i < 5)) ? "" : "none";
document.getElementById('BG_RNT3').style.display = (i == 3) ? "" : "none";
document.getElementById('BG_MB3').style.display = "";
document.getElementById('BG_TB3').style.display = (i < 5) ? "" : "none";
} else {
document.getElementById('BG_TS3').style.display = "none";
document.getElementById('BG_RS3').style.display = "none";
document.getElementById('BG_ERS3').style.display = "none";
document.getElementById('BG_B8S3').style.display = "none";
document.getElementById('BG_B16S3').style.display = "none";
document.getElementById('BG_NT3').style.display = "none";
document.getElementById('BG_RNT3').style.display = "none";
document.getElementById('BG_MB3').style.display = "none";
document.getElementById('BG_TB3').style.display = "none";
}
// Map BG 0
bgtype0 = document.forms['bgvram'].T0.options.selectedIndex;
maxtiles = document.forms['bgvram'].NT0.options[document.forms['bgvram'].NT0.options.selectedIndex].value;
mapbase = document.forms['bgvram'].MB0.options.selectedIndex;
tilebase = document.forms['bgvram'].TB0.options.selectedIndex;
if (bgtype0 > 0) {
ShareLink += "&T0=" + bgtype0 + "&NT0=" + maxtiles + "&MB0=" + mapbase + "&TB0=" + tilebase;
}
switch (bgtype0)
{
case 0: {
sz = 0;
document.getElementById('BG_DESC0').innerHTML = "* Background is unused";
} break;
case 1: {
sz = document.forms['bgvram'].TS0.options.selectedIndex;
szopt = document.forms['bgvram'].TS0.options;
document.getElementById('BG_DESC0').innerHTML = "* 256 colors tiles<br />* 16 Extended Palettes";
} break;
case 2: {
sz = document.forms['bgvram'].TS0.options.selectedIndex;
szopt = document.forms['bgvram'].TS0.options;
document.getElementById('BG_DESC0').innerHTML = "* 16 colors tiles<br />* 16 Palettes";
} break;
}
if (bgtype0 > 0) {
ShareLink += "&S0=" + sz;
if (funccallsub) Function_Call += "bgInitSub(0"; else Function_Call += "bgInit(0";
Function_Call += ", BgType_" + document.forms['bgvram'].T0.options[document.forms['bgvram'].T0.options.selectedIndex].value;
Function_Call += ", BgSize_" + szopt[szopt.selectedIndex].value + ", " + mapbase + ", " + tilebase + ");<br />";
}
bg_alloc_from(0, bgtype0, sz, maxtiles, mapbase, tilebase);
// Map BG 1
bgtype1 = document.forms['bgvram'].T1.options.selectedIndex;
maxtiles = document.forms['bgvram'].NT1.options[document.forms['bgvram'].NT1.options.selectedIndex].value;
mapbase = document.forms['bgvram'].MB1.options.selectedIndex;
tilebase = document.forms['bgvram'].TB1.options.selectedIndex;
if (bgtype1 > 0) {
ShareLink += "&T1=" + bgtype1 + "&NT1=" + maxtiles + "&MB1=" + mapbase + "&TB1=" + tilebase;
}
switch (bgtype1)
{
case 0: {
sz = 0;
document.getElementById('BG_DESC1').innerHTML = "* Background is unused";
} break;
case 1: {
sz = document.forms['bgvram'].TS1.options.selectedIndex;
szopt = document.forms['bgvram'].TS1.options;
document.getElementById('BG_DESC1').innerHTML = "* 256 colors tiles<br />* 16 Extended Palettes";
} break;
case 2: {
sz = document.forms['bgvram'].TS1.options.selectedIndex;
szopt = document.forms['bgvram'].TS1.options;
document.getElementById('BG_DESC1').innerHTML = "* 16 colors tiles<br />* 16 Palettes";
} break;
}
if (bgtype1 > 0) {
ShareLink += "&S1=" + sz;
if (funccallsub) Function_Call += "bgInitSub(1"; else Function_Call += "bgInit(1";
Function_Call += ", BgType_" + document.forms['bgvram'].T1.options[document.forms['bgvram'].T1.options.selectedIndex].value;
Function_Call += ", BgSize_" + szopt[szopt.selectedIndex].value + ", " + mapbase + ", " + tilebase + ");<br />";
}
bg_alloc_from(1, bgtype1, sz, maxtiles, mapbase, tilebase);
// Map BG 2
bgtype2 = document.forms['bgvram'].T2.options.selectedIndex;
if (bgtype2 == 3) maxtiles = document.forms['bgvram'].RNT2.options[document.forms['bgvram'].RNT2.options.selectedIndex].value;
else maxtiles = document.forms['bgvram'].NT2.options[document.forms['bgvram'].NT2.options.selectedIndex].value;
mapbase = document.forms['bgvram'].MB2.options.selectedIndex;
tilebase = document.forms['bgvram'].TB2.options.selectedIndex;
if (bgtype2 > 0) {
ShareLink += "&T2=" + bgtype2 + "&NT2=" + maxtiles + "&MB2=" + mapbase + "&TB2=" + tilebase;
}
switch (bgtype2)
{
case 0: {
sz = 0;
document.getElementById('BG_DESC2').innerHTML = "* Background is unused";
} break;
case 1: {
sz = document.forms['bgvram'].TS2.options.selectedIndex;
szopt = document.forms['bgvram'].TS2.options;
document.getElementById('BG_DESC2').innerHTML = "* 256 colors tiles<br />* 16 Extended Palettes";
} break;
case 2: {
sz = document.forms['bgvram'].TS2.options.selectedIndex;
szopt = document.forms['bgvram'].TS2.options;
document.getElementById('BG_DESC2').innerHTML = "* 16 colors tiles<br />* 16 Palettes";
} break;
case 3: {
sz = document.forms['bgvram'].RS2.options.selectedIndex;
szopt = document.forms['bgvram'].RS2.options;
document.getElementById('BG_DESC2').innerHTML = "* 256 colors tiles<br />* Can't flip tiles<br />* Maximum of 256 tiles";
} break;
case 4: {
sz = document.forms['bgvram'].ERS2.options.selectedIndex;
szopt = document.forms['bgvram'].ERS2.options;
document.getElementById('BG_DESC2').innerHTML = "* 256 colors tiles<br />* 16 Extended Palettes";
} break;
case 5: {
sz = document.forms['bgvram'].B8S2.options.selectedIndex;
szopt = document.forms['bgvram'].B8S2.options;
document.getElementById('BG_DESC2').innerHTML = "* 256 colors bitmap<br />Note1: Refer to BgSize_B8_256x256 but<br />only the top 256x192 is used.";
} break;
case 6: {
sz = document.forms['bgvram'].B16S2.options.selectedIndex;
szopt = document.forms['bgvram'].B16S2.options;
document.getElementById('BG_DESC2').innerHTML = "* 32768 colors bitmap (+ 1-Bit Alpha)<br />Note1: Refer to BgSize_B8_256x256 but<br />only the top 256x192 is used.";
} break;
}
if (bgtype2 > 0) {
ShareLink += "&S2=" + sz;
if (funccallsub) Function_Call += "bgInitSub(2"; else Function_Call += "bgInit(2";
Function_Call += ", BgType_" + document.forms['bgvram'].T2.options[document.forms['bgvram'].T2.options.selectedIndex].value;
Function_Call += ", BgSize_" + szopt[szopt.selectedIndex].value + ", " + mapbase + ", " + tilebase + ");<br />";
}
bg_alloc_from(2, bgtype2, sz, maxtiles, mapbase, tilebase);
// Map BG 3
bgtype3 = document.forms['bgvram'].T3.options.selectedIndex;
if (bgtype3 == 3) maxtiles = document.forms['bgvram'].RNT3.options[document.forms['bgvram'].RNT3.options.selectedIndex].value;
else maxtiles = document.forms['bgvram'].NT3.options[document.forms['bgvram'].NT3.options.selectedIndex].value;
mapbase = document.forms['bgvram'].MB3.options.selectedIndex;
tilebase = document.forms['bgvram'].TB3.options.selectedIndex;
if (bgtype3 > 0) {
ShareLink += "&T3=" + bgtype3 + "&NT3=" + maxtiles + "&MB3=" + mapbase + "&TB3=" + tilebase;
}
switch (bgtype3)
{
case 0: {
sz = 0;
document.getElementById('BG_DESC3').innerHTML = "* Background is unused";
} break;
case 1: {
sz = document.forms['bgvram'].TS3.options.selectedIndex;
szopt = document.forms['bgvram'].TS3.options;
document.getElementById('BG_DESC3').innerHTML = "* 256 colors tiles<br />* 16 Extended Palettes";
} break;
case 2: {
sz = document.forms['bgvram'].TS3.options.selectedIndex;
szopt = document.forms['bgvram'].TS3.options;
document.getElementById('BG_DESC3').innerHTML = "* 16 colors tiles<br />* 16 Palettes";
} break;
case 3: {
sz = document.forms['bgvram'].RS3.options.selectedIndex;
szopt = document.forms['bgvram'].RS3.options;
document.getElementById('BG_DESC3').innerHTML = "* 256 colors tiles<br />* Can't flip tiles<br />* Maximum of 256 tiles";
} break;
case 4: {
sz = document.forms['bgvram'].ERS3.options.selectedIndex;
szopt = document.forms['bgvram'].ERS3.options;
document.getElementById('BG_DESC3').innerHTML = "* 256 colors tiles<br />* 16 Extended Palettes";
} break;
case 5: {
sz = document.forms['bgvram'].B8S3.options.selectedIndex;
szopt = document.forms['bgvram'].B8S3.options;
document.getElementById('BG_DESC3').innerHTML = "* 256 colors bitmap<br />Note1: Refer to BgSize_B8_256x256 but<br />only the top 256x192 is used.";
} break;
case 6: {
sz = document.forms['bgvram'].B16S3.options.selectedIndex;
szopt = document.forms['bgvram'].B16S3.options;
document.getElementById('BG_DESC3').innerHTML = "* 32768 colors bitmap (+ 1-Bit Alpha)<br />Note1: Refer to BgSize_B8_256x256 but<br />only the top 256x192 is used.";
} break;
}
if (bgtype3 > 0) {
ShareLink += "&S3=" + sz;
if (funccallsub) Function_Call += "bgInitSub(3"; else Function_Call += "bgInit(3";
Function_Call += ", BgType_" + document.forms['bgvram'].T3.options[document.forms['bgvram'].T3.options.selectedIndex].value;
Function_Call += ", BgSize_" + szopt[szopt.selectedIndex].value + ", " + mapbase + ", " + tilebase + ");<br />";
}
bg_alloc_from(3, bgtype3, sz, maxtiles, mapbase, tilebase);
// Check for conflicts
bgcstatus = bg_alloc_conflict();
// Write results
if (bgtype0 > 0) {
document.getElementById('BG0_Usage').innerHTML = "Background 0: Using <b>" + V2Digits(VRAM_BGSpace[0]) + "KiB</b> for gfx and <b>" + V2Digits(VRAM_BGSpace[1]) + "KiB</b> for map.";
} else {
document.getElementById('BG0_Usage').innerHTML = "Background 0: Not being used.";
}
if (bgtype1 > 0) {
document.getElementById('BG1_Usage').innerHTML = "Background 1: Using <b>" + V2Digits(VRAM_BGSpace[2]) + "KiB</b> for gfx and <b>" + V2Digits(VRAM_BGSpace[3]) + "KiB</b> for map.";
} else {
document.getElementById('BG1_Usage').innerHTML = "Background 1: Not being used.";
}
if (bgtype2 > 0) {
document.getElementById('BG2_Usage').innerHTML = "Background 2: Using <b>" + V2Digits(VRAM_BGSpace[4]) + "KiB</b> for gfx and <b>" + V2Digits(VRAM_BGSpace[5]) + "KiB</b> for map.";
} else {
document.getElementById('BG2_Usage').innerHTML = "Background 2: Not being used.";
}
if (bgtype3 > 0) {
document.getElementById('BG3_Usage').innerHTML = "Background 3: Using <b>" + V2Digits(VRAM_BGSpace[6]) + "KiB</b> for gfx and <b>" + V2Digits(VRAM_BGSpace[7]) + "KiB</b> for map.";
} else {
document.getElementById('BG3_Usage').innerHTML = "Background 3: Not being used.";
}
switch (bgcstatus)
{
case 1: document.getElementById('Mapping_Status').innerHTML = "VRAM BG Allocation okay!"; break;
case 2: document.getElementById('Mapping_Status').innerHTML = "<i>Warning:</i> VRAM BG Allocation has some warnings, ignore if gfx has shared tileset graphics."; break;
case 3: document.getElementById('Mapping_Status').innerHTML = "<b>Error:</b> VRAM BG Allocation has errors."; break;
}
wmode = WorkModes[bgtype3 + bgtype2*8];
if (wmode < 0) {
document.getElementById('Recommended_Mode').innerHTML = "<b>Error:</b> Invalid background type combination!";
document.getElementById('Working_Engines').innerHTML = "<b>Error:</b> Combination won't work on hardware!";
} else {
document.getElementById('Recommended_Mode').innerHTML = "<b>Mode " + wmode + "</b> will support your options.";
if ((DISPCNT_MapBase == 0) && (DISPCNT_TileBase == 0)) {
document.getElementById('Working_Engines').innerHTML = "Works for Main Engine or Sub Engine.";
} else {
document.getElementById('Working_Engines').innerHTML = "Works for Main Engine only!<br />For Sub Engine map, use DISPCNT 64KB steps of 0.";
}
}
if ((wmode >= 0) && (bgcstatus != 3) ) {
document.getElementById('Report').innerHTML = "All options valid.";
document.getElementById('Report').style.color = "#00A000";
} else {
document.getElementById('Report').innerHTML = "Found errors/conflicts.";
document.getElementById('Report').style.color = "#C00000";
}
}
function bg_allocation_table()
{
var tableid, table, tr, td, i, j, k;
tableid = document.getElementById('BGAllocationTable');
tableid.innerHTML = "";
table = document.createElement('TABLE');
tr = document.createElement('TR');
tr.innerHTML = "<td rowspan=2>Tile Base<br />(16KB)</td><td rowspan=2>Map Base<br />(2KB)</td><td rowspan=2>Address</td><td colspan=2>BG0</td><td colspan=2>BG1</td><td colspan=2>BG2</td><td colspan=3>BG3</td>";
table.appendChild(tr);
tr = document.createElement('TR');
tr.innerHTML = "<td>Gfx</td><td>Map</td><td>Gfx</td><td>Map</td><td>Gfx</td><td>Map</td><td>Gfx</td><td>Map</td>";
table.appendChild(tr);
for (i=0; i<256; i++) {
tr = document.createElement('TR');
table.appendChild(tr);
// Tile Base
if ((i % 8) == 0) {
j = -(DISPCNT_TileBase * 4) + (i / 8);
td = document.createElement('TD');
for (k=0; k<8; k++) if (VRAM_BGError[i+k]) td.style.backgroundColor = "#DFAFAF";
if ((j >= 0) && (j < 16)) {
td.innerHTML = j;
} else {
td.innerHTML = "N/A";
}
td.rowSpan = 8;
tr.appendChild(td);
}
// Map Base
j = -(DISPCNT_MapBase * 32) + i;
td = document.createElement('TD');
if (VRAM_BGError[i]) td.style.backgroundColor = "#DFAFAF";
if ((j >= 0) && (j < 32)) {
td.innerHTML = j;
} else {
td.innerHTML = "N/A";
}
tr.appendChild(td);
// Address Base
td = document.createElement('TD');
if (VRAM_BGError[i]) td.style.backgroundColor = "#DFAFAF";
td.innerHTML = "0x0" + (0x06000000 + i * 0x800).toString(16).toUpperCase();
tr.appendChild(td);
// Mark cells
for (j=0; j<8; j++) {
td = document.createElement('TD');
td.style.backgroundColor = ColorCode[VRAM_BGMapping[j][i]];
tr.appendChild(td);
}
}
tableid.appendChild(table);
}
function upd()
{
var i, a, b;
// Clear globals
ShareLink = "";
Function_Call = "";
CPU_Access = "";
// Update BG allocation
bg_allocation();
// Generate BG allocation table
bg_allocation_table();
// Update globals
ShareLink = "?" + ShareLink.substring(1);
document.getElementById('ShareLink').innerHTML = "<a href=" + ShareLink + ">" + ShareLink + "</a>";
if (Function_Call.length == 0) {
document.getElementById('FunctionCall').innerHTML = "// Empty";
} else {
document.getElementById('FunctionCall').innerHTML = Function_Call;
}
}