vram banks initial version

This commit is contained in:
mtheall 2012-04-29 19:23:16 -05:00
commit 5f908d6fb1
3 changed files with 841 additions and 0 deletions

51
banks.css Normal file
View File

@ -0,0 +1,51 @@
body {
font-family: "Courier New";
font-size: 8pt;
background-color: #DFDFFF;
color: black;
padding: 0;
margin: 0;
}
h1 {
font-size: 12pt;
margin: 8pt;
}
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;
}
td {
padding: 2px 10px 2px 10px;
}
.left { text-align: left; }
td.g { background: #00FF00; }
td.r { background: #FF0000; }
td.y { background: #FFFF00; }
td.x { background: #777777; }
td.black { background: #000000; }
#FunctionCall {
background: #FFFFFF;
}
#CPUAccess {
background: #FFFFFF;
}

441
banks.htm Normal file
View File

@ -0,0 +1,441 @@
<html>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<head>
<title>VRAM Banks</title>
<link rel="stylesheet" href="banks.css">
<script type="text/javascript" src="banks.js"></script>
</head>
<body onload="loadp()">
<h1 id='Notify'>None</h1>
<table class='main'>
<tr>
<td class='main' width='500px'>
<form name='banks'>
<table width='720px'>
<thead>
<tr>
<td rowspan='2' colspan='4' class='left'>Function</td>
<td colspan='9' class='left'>VRAM Bank</td>
</tr>
<tr>
<td>A 128KB</td>
<td>B 128KB</td>
<td>C 128KB</td>
<td>D 128KB</td>
<td>E 64KB</td>
<td>F 16KB</td>
<td>G 16KB</td>
<td>H 32KB</td>
<td>I 16KB</td>
</tr>
</thead>
<!-- LCD Mode - ARM9 Memory Mapped -->
<tr><td colspan='13' class='black' /></tr>
<tr>
<td colspan='4'>LCD</td>
<td id='A_LCD'><input type='radio' name='A' value='LCD' onClick="upd()" checked /></td>
<td id='B_LCD'><input type='radio' name='B' value='LCD' onClick="upd()" checked /></td>
<td id='C_LCD'><input type='radio' name='C' value='LCD' onClick="upd()" checked /></td>
<td id='D_LCD'><input type='radio' name='D' value='LCD' onClick="upd()" checked /></td>
<td id='E_LCD'><input type='radio' name='E' value='LCD' onClick="upd()" checked /></td>
<td id='F_LCD'><input type='radio' name='F' value='LCD' onClick="upd()" checked /></td>
<td id='G_LCD'><input type='radio' name='G' value='LCD' onClick="upd()" checked /></td>
<td id='H_LCD'><input type='radio' name='H' value='LCD' onClick="upd()" checked /></td>
<td id='I_LCD'><input type='radio' name='I' value='LCD' onClick="upd()" checked /></td>
</tr>
<!-- ARM7 Mode - ARM7 Memory Mapped -->
<tr><td colspan='13' class='black' /></tr>
<tr>
<td colspan='4'>ARM7 Extra RAM (1st 128KB)</td>
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
<td id='C_ARM70'><input type='radio' name='C' value='ARM70' onClick="upd()" /></td>
<td id='D_ARM70'><input type='radio' name='D' value='ARM70' onClick="upd()" /></td>
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
</tr>
<tr>
<td colspan='4'>ARM7 Extra RAM (2nd 128KB)</td>
<td id='C_ARM71'><input type='radio' name='C' value='ARM71' onClick="upd()" /></td>
<td id='D_ARM71'><input type='radio' name='D' value='ARM71' onClick="upd()" /></td>
</tr>
<!-- Main 2D Engine -->
<tr><td colspan='13' class='black' /></tr>
<tr>
<td rowspan='25'>Main 2D Engine</td>
<td rowspan='11'>BG VRAM</td>
<td rowspan='8'>1st 128KB</td>
<td>1st 16KB</td>
<td rowspan='8' id='A_MBG0'><input type='radio' name='A' value='MBG0' onClick="upd()" /></td>
<td rowspan='8' id='B_MBG0'><input type='radio' name='B' value='MBG0' onClick="upd()" /></td>
<td rowspan='8' id='C_MBG0'><input type='radio' name='C' value='MBG0' onClick="upd()" /></td>
<td rowspan='8' id='D_MBG0'><input type='radio' name='D' value='MBG0' onClick="upd()" /></td>
<td rowspan='4' id='E_MBG'><input type='radio' name='E' value='MBG' onClick="upd()" /></td>
<td id='F_MBG00'><input type='radio' name='F' value='MBG00' onClick="upd()" /></td>
<td id='G_MBG00'><input type='radio' name='G' value='MBG00' onClick="upd()" /></td>
<td rowspan='11' class='x' />
<td rowspan='11' class='x' />
</tr>
<tr>
<td>2nd 16KB</td>
<td id='F_MBG01'><input type='radio' name='F' value='MBG01' onClick="upd()" /></td>
<td id='G_MBG01'><input type='radio' name='G' value='MBG01' onClick="upd()" /></td>
</tr>
<tr>
<td>3rd 16KB</td>
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
</tr>
<tr>
<td>4th 16KB</td>
</tr>
<tr>
<td>5th 16KB</td>
<td rowspan='7' class='x'/>
<td id='F_MBG02'><input type='radio' name='F' value='MBG02' onClick="upd()" /></td>
<td id='G_MBG02'><input type='radio' name='G' value='MBG02' onClick="upd()" /></td>
</tr>
<tr>
<td>6th 16KB</td>
<td id='F_MBG03'><input type='radio' name='F' value='MBG03' onClick="upd()" /></td>
<td id='G_MBG03'><input type='radio' name='G' value='MBG03' onClick="upd()" /></td>
</tr>
<tr>
<td>7th 16KB</td>
<td rowspan='5' class='x' />
<td rowspan='5' class='x' />
</tr>
<tr>
<td>8th 16KB</td>
</tr>
<tr>
<td>2nd 128KB</td>
<td>All 128KB</td>
<td id='A_MBG1'><input type='radio' name='A' value='MBG1' onClick="upd()" /></td>
<td id='B_MBG1'><input type='radio' name='B' value='MBG1' onClick="upd()" /></td>
<td id='C_MBG1'><input type='radio' name='C' value='MBG1' onClick="upd()" /></td>
<td id='D_MBG1'><input type='radio' name='D' value='MBG1' onClick="upd()" /></td>
</tr>
<tr>
<td>3rd 128KB</td>
<td>All 128KB</td>
<td id='A_MBG2'><input type='radio' name='A' value='MBG2' onClick="upd()" /></td>
<td id='B_MBG2'><input type='radio' name='B' value='MBG2' onClick="upd()" /></td>
<td id='C_MBG2'><input type='radio' name='C' value='MBG2' onClick="upd()" /></td>
<td id='D_MBG2'><input type='radio' name='D' value='MBG2' onClick="upd()" /></td>
</tr>
<tr>
<td>4th 128KB</td>
<td>All 128KB</td>
<td id='A_MBG3'><input type='radio' name='A' value='MBG3' onClick="upd()" /></td>
<td id='B_MBG3'><input type='radio' name='B' value='MBG3' onClick="upd()" /></td>
<td id='C_MBG3'><input type='radio' name='C' value='MBG3' onClick="upd()" /></td>
<td id='D_MBG3'><input type='radio' name='D' value='MBG3' onClick="upd()" /></td>
</tr>
<tr>
<td rowspan='9'>OBJ VRAM</td>
<td rowspan='8'>1st 128KB</td>
<td>1st 16KB</td>
<td rowspan='8' id='A_MOBJ0'><input type='radio' name='A' value='MOBJ0' onClick="upd()" /></td>
<td rowspan='8' id='B_MOBJ0'><input type='radio' name='B' value='MOBJ0' onClick="upd()" /></td>
<td rowspan='9' class='x' />
<td rowspan='9' class='x' />
<td rowspan='4' id='E_MOBJ'><input type='radio' name='E' value='MOBJ' onClick="upd()" /></td>
<td id='F_MOBJ00'><input type='radio' name='F' value='MOBJ00' onClick="upd()" /></td>
<td id='G_MOBJ00'><input type='radio' name='G' value='MOBJ00' onClick="upd()" /></td>
<td rowspan='9' class='x' />
<td rowspan='9' class='x' />
</tr>
<tr>
<td>2nd 16KB</td>
<td id='F_MOBJ01'><input type='radio' name='F' value='MOBJ01' onClick="upd()" /></td>
<td id='G_MOBJ01'><input type='radio' name='G' value='MOBJ01' onClick="upd()" /></td>
</tr>
<tr>
<td>3rd 16KB</td>
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
</tr>
<tr>
<td>4th 16KB</td>
</tr>
<tr>
<td>5th 16KB</td>
<td rowspan='5' class='x' />
<td id='F_MOBJ02'><input type='radio' name='F' value='MOBJ02' onClick="upd()" /></td>
<td id='G_MOBJ02'><input type='radio' name='G' value='MOBJ02' onClick="upd()" /></td>
</tr>
<tr>
<td>6th 16KB</td>
<td id='F_MOBJ03'><input type='radio' name='F' value='MOBJ03' onClick="upd()" /></td>
<td id='G_MOBJ03'><input type='radio' name='G' value='MOBJ03' onClick="upd()" /></td>
</tr>
<tr>
<td>7th 16KB</td>
<td rowspan='3' class='x' />
<td rowspan='3' class='x' />
</tr>
<tr>
<td>8th 16KB</td>
</tr>
<tr>
<td>2nd 128KB</td>
<td>All 128KB</td>
<td id='A_MOBJ1'><input type='radio' name='A' value='MOBJ1' onClick="upd()" /></td>
<td id='B_MOBJ1'><input type='radio' name='B' value='MOBJ1' onClick="upd()" /></td>
</tr>
<tr>
<td rowspan='4'>BG Ext Palette</td>
<td>Slot 0</td>
<td>8KB</td>
<td rowspan='4' class='x' />
<td rowspan='4' class='x' />
<td rowspan='4' class='x' />
<td rowspan='4' class='x' />
<td rowspan='4' id='E_BGEPAL'><input type='radio' name='E' value='BGEPAL' onClick="upd()" /></td>
<td rowspan='2' id='F_BGEPAL01'><input type='radio' name='F' value='BGEPAL01' onClick="upd()" /></td>
<td rowspan='2' id='G_BGEPAL01'><input type='radio' name='G' value='BGEPAL01' onClick="upd()" /></td>
<td rowspan='4' class='x' />
<td rowspan='4' class='x' />
</tr>
<tr>
<td>Slot 1</td>
<td>8KB</td>
</tr>
<tr>
<td>Slot 2</td>
<td>8KB</td>
<td rowspan='2' id='F_BGEPAL23'><input type='radio' name='F' value='BGEPAL23' onClick="upd()" /></td>
<td rowspan='2' id='G_BGEPAL23'><input type='radio' name='G' value='BGEPAL23' onClick="upd()" /></td>
</tr>
<tr>
<td>Slot 3</td>
<td>8KB</td>
</tr>
<tr>
<td>OBJ Ext Palette</td>
<td colspan='2'>8KB</td>
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td id='F_OBJEPAL'><input type='radio' name='F' value='OBJEPAL' onClick="upd()" /></td>
<td id='G_OBJEPAL'><input type='radio' name='G' value='OBJEPAL' onClick="upd()" /></td>
<td class='x' />
<td class='x' />
</tr>
<!-- Sub 2D Engine -->
<tr><td colspan='13' class='black' /></tr>
<tr>
<td rowspan='12'>Sub 2D Engine</td>
<td rowspan='8'>BG VRAM</td>
<td rowspan='8'>128KB</td>
<td>1st 16KB</td>
<td rowspan='8' class='x' />
<td rowspan='8' class='x' />
<td rowspan='8' id='C_SBG'><input type='radio' name='C' value='SBG' onClick="upd()" /></td>
<td rowspan='8' class='x' />
<td rowspan='8' class='x' />
<td rowspan='8' class='x' />
<td rowspan='8' class='x' />
<td rowspan='2' id='H_SBG0'><input type='radio' name='H' value='SBG0' onClick="upd()" /></td>
<td rowspan='2' class='x' />
</tr>
<tr>
<td>2nd 16KB</td>
</tr>
<tr>
<td>3rd 16KB</td>
<td rowspan='6' class='x' />
<td id='I_SBG1'><input type='radio' name='I' value='SBG1' onClick="upd()" /></td>
</tr>
<tr>
<td>4th 16KB</td>
<td rowspan='5' class='x' />
</tr>
<tr>
<td>5th 16KB</td>
</tr>
<tr>
<td>6th 16KB</td>
</tr>
<tr>
<td>7th 16KB</td>
</tr>
<tr>
<td>8th 16KB</td>
</tr>
<tr>
<td rowspan='2'>OBJ VRAM</td>
<td rowspan='2'>128KB</td>
<td>1st 16KB</td>
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
<td rowspan='2' id='D_SOBJ'><input type='radio' name='D' value='SOBJ' onClick="upd()" /></td>
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
<td id='I_SOBJ'><input type='radio' name='I' value='SOBJ' onClick="upd()" /></td>
</tr>
<tr>
<td>Final 112KB</td>
<td class='x' />
</tr>
<tr>
<td>BG Ext Palette</td>
<td colspan='2'>32KB</td>
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td id='H_SBGEPAL'><input type='radio' name='H' value='SBGEPAL' onClick="upd()" /></td>
<td class='x' />
</tr>
<tr>
<td>OBJ Ext Palette</td>
<td colspan='2'>8KB</td>
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td id='I_SOBJEPAL'><input type='radio' name='I' value='SOBJEPAL' onClick="upd()" /></td>
</tr>
<!-- 3D Engine -->
<tr><td colspan='13' class='black'></td></tr>
<tr>
<td rowspan='10'>3D Engine</td>
<td rowspan='4'>Texture</td>
<td>Slot 0</td>
<td>128KB</td>
<td id='A_TS0'><input type='radio' name='A' value='TS0' onClick="upd()" /></td>
<td id='B_TS0'><input type='radio' name='B' value='TS0' onClick="upd()" /></td>
<td id='C_TS0'><input type='radio' name='C' value='TS0' onClick="upd()" /></td>
<td id='D_TS0'><input type='radio' name='D' value='TS0' onClick="upd()" /></td>
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
</tr>
<tr>
<td>Slot 1</td>
<td>128KB</td>
<td id='A_TS1'><input type='radio' name='A' value='TS1' onClick="upd()" /></td>
<td id='B_TS1'><input type='radio' name='B' value='TS1' onClick="upd()" /></td>
<td id='C_TS1'><input type='radio' name='C' value='TS1' onClick="upd()" /></td>
<td id='D_TS1'><input type='radio' name='D' value='TS1' onClick="upd()" /></td>
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
</tr>
<tr>
<td>Slot 2</td>
<td>128KB</td>
<td id='A_TS2'><input type='radio' name='A' value='TS2' onClick="upd()" /></td>
<td id='B_TS2'><input type='radio' name='B' value='TS2' onClick="upd()" /></td>
<td id='C_TS2'><input type='radio' name='C' value='TS2' onClick="upd()" /></td>
<td id='D_TS2'><input type='radio' name='D' value='TS2' onClick="upd()" /></td>
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
</tr>
<tr>
<td>Slot 3</td>
<td>128KB</td>
<td id='A_TS3'><input type='radio' name='A' value='TS3' onClick="upd()" /></td>
<td id='B_TS3'><input type='radio' name='B' value='TS3' onClick="upd()" /></td>
<td id='C_TS3'><input type='radio' name='C' value='TS3' onClick="upd()" /></td>
<td id='D_TS3'><input type='radio' name='D' value='TS3' onClick="upd()" /></td>
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
<td class='x' />
</tr>
<tr>
<td rowspan='6'>Texture Palette</td>
<td>Slot 0</td>
<td>16KB</td>
<td rowspan='6' class='x' />
<td rowspan='6' class='x' />
<td rowspan='6' class='x' />
<td rowspan='6' class='x' />
<td rowspan='4' id='E_TPAL'><input type='radio' name='E' value='TPAL' onClick="upd()" /></td>
<td id='F_TPAL0'><input type='radio' name='F' value='TPAL0' onClick="upd()" /></td>
<td id='G_TPAL0'><input type='radio' name='G' value='TPAL0' onClick="upd()" /></td>
<td rowspan='6' class='x' />
<td rowspan='6' class='x' />
</tr>
<tr>
<td>Slot 1</td>
<td>16KB</td>
<td id='F_TPAL1'><input type='radio' name='F' value='TPAL1' onClick="upd()" /></td>
<td id='G_TPAL1'><input type='radio' name='G' value='TPAL1' onClick="upd()" /></td>
</tr>
<tr>
<td>Slot 2</td>
<td>16KB</td>
<td rowspan='2' class='x' />
<td rowspan='2' class='x' />
</tr>
<tr>
<td>Slot 3</td>
<td>16KB</td>
</tr>
<tr>
<td>Slot 4</td>
<td>16KB</td>
<td rowspan='2' class='x' />
<td id='F_TPAL4'><input type='radio' name='F' value='TPAL4' onClick="upd()" /></td>
<td id='G_TPAL4'><input type='radio' name='G' value='TPAL4' onClick="upd()" /></td>
</tr>
<tr>
<td>Slot 5</td>
<td>16KB</td>
<td id='F_TPAL5'><input type='radio' name='F' value='TPAL5' onClick="upd()" /></td>
<td id='G_TPAL5'><input type='radio' name='G' value='TPAL5' onClick="upd()" /></td>
</tr>
</table>
</form>
</td>
<td class='main'>
<table>
<thead>
<tr><td class='left'>Function call</td></tr>
</thead>
<tr><td class='left' id='FunctionCall'>Javascript must be enabled</td></tr>
</table>
<p>&nbsp;</p>
<table>
<thead>
<tr><td class='left'>CPU Access</td></tr>
</thead>
<tr><td class='left' id='CPUAccess'>Javascript must be enabled</td></tr>
</table>
<p>Copyright © 2011-2012, mtheall &amp; JustBurn</p>
</td>
</tr></table>
</body>
</html>

349
banks.js Normal file
View File

@ -0,0 +1,349 @@
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 OListSize(obj) {
var size = 0;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
}
function OListGet(obj, idx) {
var off = 0;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
if (idx == off) return obj[key];
off++;
}
}
return null;
}
function OListSet(obj, idx, val) {
var off = 0;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
if (idx == off) {
obj[key] = val;
return;
}
off++;
}
}
}
// m = Conflict map
// f = Function call
var BankingMap = {
'mLCD' :'', 'fLCD' :'LCD',
'mARM70' :'a', 'fARM70' :'ARM7_0x06000000',
'mARM71' :'b', 'fARM71' :'ARM7_0x06020000',
'mMBG0' :'cdef', 'fMBG0' :'MAIN_BG_0x06000000',
'mMBG' :'cd', 'fMBG' :'BG',
'mMBG00' :'c', 'fMBG00' :'MAIN_BG_0x06000000',
'mMBG01' :'d', 'fMBG01' :'MAIN_BG_0x06004000',
'mMBG02' :'e', 'fMBG02' :'MAIN_BG_0x06010000',
'mMBG03' :'f', 'fMBG03' :'MAIN_BG_0x06014000',
'mMBG1' :'g', 'fMBG1' :'MAIN_BG_0x06020000',
'mMBG2' :'h', 'fMBG2' :'MAIN_BG_0x06040000',
'mMBG3' :'i', 'fMBG3' :'MAIN_BG_0x06060000',
'mMOBJ0' :'jklm', 'fMOBJ0' :'MAIN_SPRITE_0x06400000',
'mMOBJ' :'jk', 'fMOBJ' :'MAIN_SPRITE',
'mMOBJ00' :'j', 'fMOBJ00' :'MAIN_SPRITE_0x06400000',
'mMOBJ01' :'k', 'fMOBJ01' :'MAIN_SPRITE_0x06404000',
'mMOBJ02' :'l', 'fMOBJ02' :'MAIN_SPRITE_0x06410000',
'mMOBJ03' :'m', 'fMOBJ03' :'MAIN_SPRITE_0x06414000',
'mMOBJ1' :'n', 'fMOBJ1' :'MAIN_SPRITE_0x06420000',
'mBGEPAL' :'op', 'fBGEPAL' :'BG_EXT_PALETTE',
'mBGEPAL01':'o', 'fBGEPAL01':'BG_EXT_PALETTE_SLOT01',
'mBGEPAL23':'p', 'fBGEPAL23':'BG_EXT_PALETTE_SLOT23',
'mOBJEPAL' :'q', 'fOBJEPAL' :'SPRITE_EXT_PALETTE',
'mSBG' :'rs', 'fSBG' :'SUB_BG_0x06200000',
'mSBG0' :'r', 'fSBG0' :'SUB_BG',
'mSBG1' :'s', 'fSBG1' :'SUB_BG_0x06208000',
'mSOBJ' :'t', 'fSOBJ' :'SUB_SPRITE',
'mSBGEPAL' :'u', 'fSBGEPAL' :'SUB_BG_EXT_PALETTE',
'mSOBJEPAL':'v', 'fSOBJEPAL':'SUB_SPRITE_EXT_PALETTE',
'mTS0' :'w', 'fTS0' :'TEXTURE_SLOT0',
'mTS1' :'x', 'fTS1' :'TEXTURE_SLOT1',
'mTS2' :'y', 'fTS2' :'TEXTURE_SLOT2',
'mTS3' :'z', 'fTS3' :'TEXTURE_SLOT3',
'mTPAL' :'01', 'fTPAL' :'TEX_PALETTE',
'mTPAL0' :'0', 'fTPAL0' :'TEX_PALETTE_SLOT0',
'mTPAL1' :'1', 'fTPAL1' :'TEX_PALETTE_SLOT1',
'mTPAL4' :'2', 'fTPAL4' :'TEX_PALETTE_SLOT4',
'mTPAL5' :'3', 'fTPAL5' :'TEX_PALETTE_SLOT5',
};
var CPUAccessMap = {
// LCD
'A_LCD' :'ARM9 0x06800000 - 0x0681FFFF (128KB)',
'B_LCD' :'ARM9 0x06820000 - 0x0683FFFF (128KB)',
'C_LCD' :'ARM9 0x06840000 - 0x0685FFFF (128KB)',
'D_LCD' :'ARM9 0x06860000 - 0x0687FFFF (128KB)',
'E_LCD' :'ARM9 0x06880000 - 0x0688FFFF ( 64KB)',
'F_LCD' :'ARM9 0x06890000 - 0x06893FFF ( 16KB)',
'G_LCD' :'ARM9 0x06894000 - 0x06897FFF ( 16KB)',
'H_LCD' :'ARM9 0x06898000 - 0x0689FFFF ( 32KB)',
'I_LCD' :'ARM9 0x068A0000 - 0x068A3FFF ( 16KB)',
// ARM7
'C_ARM70' :'ARM7 0x06000000 - 0x0601FFFF (128KB)',
'D_ARM70' :'ARM7 0x06000000 - 0x0601FFFF (128KB)',
'C_ARM71' :'ARM7 0x06020000 - 0x0603FFFF (128KB)',
'D_ARM71' :'ARM7 0x06020000 - 0x0603FFFF (128KB)',
// Main Background
'A_MBG0' :'ARM9 0x06000000 - 0x0601FFFF (128KB)',
'A_MBG1' :'ARM9 0x06020000 - 0x0603FFFF (128KB)',
'A_MBG2' :'ARM9 0x06040000 - 0x0605FFFF (128KB)',
'A_MBG3' :'ARM9 0x06060000 - 0x0607FFFF (128KB)',
'B_MBG0' :'ARM9 0x06000000 - 0x0601FFFF (128KB)',
'B_MBG1' :'ARM9 0x06020000 - 0x0603FFFF (128KB)',
'B_MBG2' :'ARM9 0x06040000 - 0x0605FFFF (128KB)',
'B_MBG3' :'ARM9 0x06060000 - 0x0607FFFF (128KB)',
'C_MBG0' :'ARM9 0x06000000 - 0x0601FFFF (128KB)',
'C_MBG1' :'ARM9 0x06020000 - 0x0603FFFF (128KB)',
'C_MBG2' :'ARM9 0x06040000 - 0x0605FFFF (128KB)',
'C_MBG3' :'ARM9 0x06060000 - 0x0607FFFF (128KB)',
'D_MBG0' :'ARM9 0x06000000 - 0x0601FFFF (128KB)',
'D_MBG1' :'ARM9 0x06020000 - 0x0603FFFF (128KB)',
'D_MBG2' :'ARM9 0x06040000 - 0x0605FFFF (128KB)',
'D_MBG3' :'ARM9 0x06060000 - 0x0607FFFF (128KB)',
'E_MBG' :'ARM9 0x06000000 - 0x0600FFFF ( 64KB)',
'F_MBG00' :'ARM9 0x06000000 - 0x06003FFF ( 16KB)',
'F_MBG01' :'ARM9 0x06004000 - 0x06007FFF ( 16KB)',
'F_MBG02' :'ARM9 0x06008000 - 0x0600BFFF ( 16KB)',
'F_MBG03' :'ARM9 0x0600C000 - 0x0600FFFF ( 16KB)',
'G_MBG00' :'ARM9 0x06000000 - 0x06003FFF ( 16KB)',
'G_MBG01' :'ARM9 0x06004000 - 0x06007FFF ( 16KB)',
'G_MBG02' :'ARM9 0x06008000 - 0x0600BFFF ( 16KB)',
'G_MBG03' :'ARM9 0x0600C000 - 0x0600FFFF ( 16KB)',
// Main Sprite
'A_MOBJ0' :'ARM9 0x06400000 - 0x0641FFFF (128KB)',
'A_MOBJ1' :'ARM9 0x06420000 - 0x0643FFFF (128KB)',
'B_MOBJ0' :'ARM9 0x06400000 - 0x0641FFFF (128KB)',
'B_MOBJ1' :'ARM9 0x06420000 - 0x0643FFFF (128KB)',
'E_MOBJ' :'ARM9 0x06400000 - 0x0640FFFF ( 64KB)',
'F_MOBJ00':'ARM9 0x06400000 - 0x06403FFF ( 16KB)',
'F_MOBJ01':'ARM9 0x06404000 - 0x06407FFF ( 16KB)',
'F_MOBJ02':'ARM9 0x06880000 - 0x0688FFFF ( 64KB)',
'F_MOBJ03':'ARM9 0x06410000 - 0x06413FFF ( 16KB)',
'G_MOBJ00':'ARM9 0x06400000 - 0x06403FFF ( 16KB)',
'G_MOBJ01':'ARM9 0x06404000 - 0x06407FFF ( 16KB)',
'G_MOBJ02':'ARM9 0x06880000 - 0x0688FFFF ( 64KB)',
'G_MOBJ03':'ARM9 0x06410000 - 0x06413FFF ( 16KB)',
// Main Background Extended Palette
'E_BGEPAL' :'LCD: 0x06880000 - 0x06887FFF ( 32KB)',
'F_BGEPAL01':'LCD: 0x06890000 - 0x06893FFF ( 16KB)',
'F_BGEPAL23':'LCD: 0x06894000 - 0x06897FFF ( 16KB)',
'G_BGEPAL01':'LCD: 0x06890000 - 0x06893FFF ( 16KB)',
'G_BGEPAL23':'LCD: 0x06894000 - 0x06897FFF ( 16KB)',
// Main Sprite Extended Palette
'F_OBJEPAL' :'LCD: 0x06890000 - 0x06891FFF ( 8KB)',
'G_OBJEPAL' :'LCD: 0x06890000 - 0x06891FFF ( 8KB)',
// Sub Background
'C_SBG' :'ARM9 0x06200000 - 0x0621FFFF (128KB)',
'H_SBG0':'ARM9 0x06200000 - 0x06207FFF ( 32KB)',
'I_SBG1':'ARM9 0x06208000 - 0x0620BFFF ( 16KB)',
// Sub Sprite
'D_SOBJ':'ARM9 0x06600000 - 0x0661FFFF (128KB)',
'I_SOBJ':'ARM9 0x06600000 - 0x06603FFF ( 16KB)',
// Sub Background Extended Palette
'H_SBGEPAL' :'LCD: 0x06898000 - 0x0689FFFF ( 32KB)',
// Sub Sprite Extended Palette
'I_SOBJEPAL':'LCD: 0x068A0000 - 0x068A3FFF ( 16KB)',
// Texture Slot 0
'A_TS0':'LCD: 0x06800000 - 0x0681FFFF (128KB)',
'B_TS0':'LCD: 0x06800000 - 0x0681FFFF (128KB)',
'C_TS0':'LCD: 0x06800000 - 0x0681FFFF (128KB)',
'D_TS0':'LCD: 0x06800000 - 0x0681FFFF (128KB)',
// Texture Slot 1
'A_TS1':'LCD: 0x06820000 - 0x0683FFFF (128KB)',
'B_TS1':'LCD: 0x06820000 - 0x0683FFFF (128KB)',
'C_TS1':'LCD: 0x06820000 - 0x0683FFFF (128KB)',
'D_TS1':'LCD: 0x06820000 - 0x0683FFFF (128KB)',
// Texture Slot 2
'A_TS2':'LCD: 0x06840000 - 0x0685FFFF (128KB)',
'B_TS2':'LCD: 0x06840000 - 0x0685FFFF (128KB)',
'C_TS2':'LCD: 0x06840000 - 0x0685FFFF (128KB)',
'D_TS2':'LCD: 0x06840000 - 0x0685FFFF (128KB)',
// Texture Slot 3
'A_TS3':'LCD: 0x06860000 - 0x0687FFFF (128KB)',
'B_TS3':'LCD: 0x06860000 - 0x0687FFFF (128KB)',
'C_TS3':'LCD: 0x06860000 - 0x0687FFFF (128KB)',
'D_TS3':'LCD: 0x06860000 - 0x0687FFFF (128KB)',
// Texture Palette
'E_TPAL' :'LCD: 0x06880000 - 0x0688FFFF ( 64KB)',
'F_TPAL0':'LCD: 0x06890000 - 0x06893FFF ( 16KB)',
'G_TPAL0':'LCD: 0x06890000 - 0x06893FFF ( 16KB)',
'F_TPAL1':'LCD: 0x06894000 - 0x06897FFF ( 16KB)',
'G_TPAL1':'LCD: 0x06894000 - 0x06897FFF ( 16KB)',
'F_TPAL4':'LCD: 0x06890000 - 0x06893FFF ( 16KB)',
'G_TPAL4':'LCD: 0x06890000 - 0x06893FFF ( 16KB)',
'F_TPAL5':'LCD: 0x06894000 - 0x06897FFF ( 16KB)',
'G_TPAL5':'LCD: 0x06894000 - 0x06897FFF ( 16KB)',
};
var Sel = {'A':'', 'B':'', 'C':'', 'D':'', 'E':'', 'F':'', 'G':'', 'H':'', 'I':''};
var Err = {'A':'', 'B':'', 'C':'', 'D':'', 'E':'', 'F':'', 'G':'', 'H':'', 'I':''};
function loadp() {
var allElem = document.forms["banks"].elements;
// Load parameters
Sel['A'] = getParameterByName('A');
Sel['B'] = getParameterByName('B');
Sel['C'] = getParameterByName('C');
Sel['D'] = getParameterByName('D');
Sel['E'] = getParameterByName('E');
Sel['F'] = getParameterByName('F');
Sel['G'] = getParameterByName('G');
Sel['H'] = getParameterByName('H');
Sel['I'] = getParameterByName('I');
// Mark selected items
for (var el = 0; el < allElem.length; el++) {
Elem = allElem[el];
if (Sel[Elem.name] == Elem.value)
Elem.checked = true;
}
upd();
}
function upd() {
var allElem = document.forms["banks"].elements;
var numerr = 0;
// Find selected items
for (var el = 0; el < allElem.length; el++) {
Elem = allElem[el];
ElemName = Elem.name + "_" + Elem.value;
if (Elem.checked)
Sel[Elem.name] = Elem.value;
}
// Detect errors
for (var a = 0; a < 9; a++)
OListSet(Err, a, 0);
for (var a = 0; a < 9; a++) {
for (var b = a+1; b < 9; b++) {
cma = BankingMap['m'+OListGet(Sel, a)];
cmb = BankingMap['m'+OListGet(Sel, b)];
for (c = 0; c < OListSize(cma); c++) {
if (cmb.indexOf(cma.charAt(c)) != -1) {
if (OListGet(Err, a) == 0) {
numerr++;
OListSet(Err, a, 1);
}
if (OListGet(Err, b) == 0) {
numerr++;
OListSet(Err, b, 1);
}
}
}
}
}
// Mark valid/conflicts on the table
for (var el = 0; el < allElem.length; el++) {
Elem = allElem[el];
ElemName = Elem.name + "_" + Elem.value;
if (Elem.checked) {
if (Err[Elem.name] == 0)
document.getElementById(ElemName).className = 'g';
else
document.getElementById(ElemName).className = 'r';
}
else
document.getElementById(ElemName).className = '';
}
// Write result
linkcode = "A="+Sel['A'];
linkcode += "&B="+Sel['B'];
linkcode += "&C="+Sel['C'];
linkcode += "&D="+Sel['D'];
linkcode += "&E="+Sel['E'];
linkcode += "&F="+Sel['F'];
linkcode += "&G="+Sel['G'];
linkcode += "&H="+Sel['H'];
linkcode += "&I="+Sel['I'];
Notify = document.getElementById('Notify');
Notify.innerHTML = "<a href='?" + linkcode + "'>(Share Link)</a> - ";
if (numerr == 0) {
Notify.style.color = "#008000";
Notify.innerHTML += "No conflict found ";
}
else {
Notify.style.color = "#C00000";
Notify.innerHTML += "Found " + numerr + " conflicts at banks: ";
if (Err['A']) Notify.innerHTML += "VRAM_A ";
if (Err['B']) Notify.innerHTML += "VRAM_B ";
if (Err['C']) Notify.innerHTML += "VRAM_C ";
if (Err['D']) Notify.innerHTML += "VRAM_D ";
if (Err['E']) Notify.innerHTML += "VRAM_E ";
if (Err['F']) Notify.innerHTML += "VRAM_F ";
if (Err['G']) Notify.innerHTML += "VRAM_G ";
if (Err['H']) Notify.innerHTML += "VRAM_H ";
if (Err['I']) Notify.innerHTML += "VRAM_I ";
}
// Generate the function call
FCall = document.getElementById('FunctionCall');
if (numerr == 0) {
FCall.innerHTML = "vramSetBankA(VRAM_A_" + BankingMap['f'+Sel['A']] + ");<br />";
FCall.innerHTML += "vramSetBankB(VRAM_B_" + BankingMap['f'+Sel['B']] + ");<br />";
FCall.innerHTML += "vramSetBankC(VRAM_C_" + BankingMap['f'+Sel['C']] + ");<br />";
FCall.innerHTML += "vramSetBankD(VRAM_D_" + BankingMap['f'+Sel['D']] + ");<br />";
FCall.innerHTML += "vramSetBankE(VRAM_E_" + BankingMap['f'+Sel['E']] + ");<br />";
FCall.innerHTML += "vramSetBankF(VRAM_F_" + BankingMap['f'+Sel['F']] + ");<br />";
FCall.innerHTML += "vramSetBankG(VRAM_G_" + BankingMap['f'+Sel['G']] + ");<br />";
FCall.innerHTML += "vramSetBankH(VRAM_H_" + BankingMap['f'+Sel['H']] + ");<br />";
FCall.innerHTML += "vramSetBankI(VRAM_I_" + BankingMap['f'+Sel['I']] + ");<br />";
}
else
FCall.innerHTML = "Error: Conflict found!";
// Generate the function call
CPUAcc = document.getElementById('CPUAccess');
if (numerr == 0) {
CPUAcc.innerHTML = "<b>A:</b> " + CPUAccessMap['A_'+Sel['A']] + "<br />";
CPUAcc.innerHTML += "<b>B:</b> " + CPUAccessMap['B_'+Sel['B']] + "<br />";
CPUAcc.innerHTML += "<b>C:</b> " + CPUAccessMap['C_'+Sel['C']] + "<br />";
CPUAcc.innerHTML += "<b>D:</b> " + CPUAccessMap['D_'+Sel['D']] + "<br />";
CPUAcc.innerHTML += "<b>E:</b> " + CPUAccessMap['E_'+Sel['E']] + "<br />";
CPUAcc.innerHTML += "<b>F:</b> " + CPUAccessMap['F_'+Sel['F']] + "<br />";
CPUAcc.innerHTML += "<b>G:</b> " + CPUAccessMap['G_'+Sel['G']] + "<br />";
CPUAcc.innerHTML += "<b>H:</b> " + CPUAccessMap['H_'+Sel['H']] + "<br />";
CPUAcc.innerHTML += "<b>I:</b> " + CPUAccessMap['I_'+Sel['I']] + "<br />";
}
else
CPUAcc.innerHTML = "Error: Conflict found!";
}