diff --git a/banks.css b/banks.css index e725419..b3cf55c 100644 --- a/banks.css +++ b/banks.css @@ -40,6 +40,11 @@ td.y { background: #FFFF00; } td.x { background: #777777; } td.black { background: #000000; } +.comm { color: #444; } +.func { color: #630; } +.deff { color: #040; } +.numm { color: #008; } + #Content { margin: 8pt; } #ShareLink diff --git a/banks.js b/banks.js index fc957b6..7bf4cdc 100644 --- a/banks.js +++ b/banks.js @@ -1,14 +1,23 @@ function getParameterByName(name) { name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); - var regexS = "[\\?&]" + name + "=([^&#]*)"; - var regex = new RegExp(regexS); - var results = regex.exec(window.location.search); + var regex = new RegExp("[\\#&]" + name + "=([^&#]*)"); + var results = regex.exec(window.location.hash); if(results == null) return ""; else return decodeURIComponent(results[1].replace(/\+/g, " ")); } +function hasParameterByName(name) { + name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); + var regex = new RegExp("[\\#&]" + name + "=([^&#]*)"); + var results = regex.exec(window.location.hash); + if(results == null) + return false; + else + return true; +} + function OListSize(obj) { var size = 0; for (key in obj) { @@ -86,124 +95,124 @@ var BankingMap = { 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)', + '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)', + '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)', + '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)', + '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)', + '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)', + '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)', + '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)', + 'D_SOBJ':'ARM9 0x06600000 - 0x0661FFFF (128KB)', + 'I_SOBJ':'ARM9 0x06600000 - 0x06603FFF ( 16KB)', // Sub Background Extended Palette - 'H_SBGEPAL' :'LCD: 0x06898000 - 0x0689FFFF ( 32KB)', + 'H_SBGEPAL' :'LCD: 0x06898000 - 0x0689FFFF ( 32KB)', // Sub Sprite Extended Palette - 'I_SOBJEPAL':'LCD: 0x068A0000 - 0x068A3FFF ( 16KB)', + '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)', + '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)', + '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)', + '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)', + '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)', + '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':''}; @@ -213,15 +222,15 @@ function loadp() { var i, 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'); + if (hasParameterByName('A')) Sel['A'] = getParameterByName('A'); + if (hasParameterByName('B')) Sel['B'] = getParameterByName('B'); + if (hasParameterByName('C')) Sel['C'] = getParameterByName('C'); + if (hasParameterByName('D')) Sel['D'] = getParameterByName('D'); + if (hasParameterByName('E')) Sel['E'] = getParameterByName('E'); + if (hasParameterByName('F')) Sel['F'] = getParameterByName('F'); + if (hasParameterByName('G')) Sel['G'] = getParameterByName('G'); + if (hasParameterByName('H')) Sel['H'] = getParameterByName('H'); + if (hasParameterByName('I')) Sel['I'] = getParameterByName('I'); // Mark selected items for (var i=0; i < allElem.length; i++) { @@ -308,20 +317,20 @@ function upd() { // Generate the function call FCall = document.getElementById('FunctionCall'); if (numerr == 0) { - FCall.innerHTML = "vramSetBankA(VRAM_A_" + BankingMap['f'+Sel['A']] + ");
"; - FCall.innerHTML += "vramSetBankB(VRAM_B_" + BankingMap['f'+Sel['B']] + ");
"; - FCall.innerHTML += "vramSetBankC(VRAM_C_" + BankingMap['f'+Sel['C']] + ");
"; - FCall.innerHTML += "vramSetBankD(VRAM_D_" + BankingMap['f'+Sel['D']] + ");
"; - FCall.innerHTML += "vramSetBankE(VRAM_E_" + BankingMap['f'+Sel['E']] + ");
"; - FCall.innerHTML += "vramSetBankF(VRAM_F_" + BankingMap['f'+Sel['F']] + ");
"; - FCall.innerHTML += "vramSetBankG(VRAM_G_" + BankingMap['f'+Sel['G']] + ");
"; - FCall.innerHTML += "vramSetBankH(VRAM_H_" + BankingMap['f'+Sel['H']] + ");
"; - FCall.innerHTML += "vramSetBankI(VRAM_I_" + BankingMap['f'+Sel['I']] + ");
"; + FCall.innerHTML = "vramSetBankA(VRAM_A_" + BankingMap['f'+Sel['A']] + ");
"; + FCall.innerHTML += "vramSetBankB(VRAM_B_" + BankingMap['f'+Sel['B']] + ");
"; + FCall.innerHTML += "vramSetBankC(VRAM_C_" + BankingMap['f'+Sel['C']] + ");
"; + FCall.innerHTML += "vramSetBankD(VRAM_D_" + BankingMap['f'+Sel['D']] + ");
"; + FCall.innerHTML += "vramSetBankE(VRAM_E_" + BankingMap['f'+Sel['E']] + ");
"; + FCall.innerHTML += "vramSetBankF(VRAM_F_" + BankingMap['f'+Sel['F']] + ");
"; + FCall.innerHTML += "vramSetBankG(VRAM_G_" + BankingMap['f'+Sel['G']] + ");
"; + FCall.innerHTML += "vramSetBankH(VRAM_H_" + BankingMap['f'+Sel['H']] + ");
"; + FCall.innerHTML += "vramSetBankI(VRAM_I_" + BankingMap['f'+Sel['I']] + ");
"; } else FCall.innerHTML = "Error: Conflict found!"; - // Generate the function call + // Generate the cpu access CPUAcc = document.getElementById('CPUAccess'); if (numerr == 0) { CPUAcc.innerHTML = "A: " + CPUAccessMap['A_'+Sel['A']] + "
"; @@ -348,6 +357,7 @@ function upd() { if (Sel['G'] != "LCD") ShareLink += "&G=" + Sel['G']; if (Sel['H'] != "LCD") ShareLink += "&H=" + Sel['H']; if (Sel['I'] != "LCD") ShareLink += "&I=" + Sel['I']; - ShareLink = "?" + ShareLink.substring(1); + ShareLink = "#" + ShareLink.substring(1); document.getElementById('ShareLink').innerHTML = "" + ShareLink + ""; + window.location.hash = ShareLink; } diff --git a/vram.css b/vram.css index a61be96..18717b4 100644 --- a/vram.css +++ b/vram.css @@ -43,6 +43,16 @@ td.y { background: #FFFF00; } td.x { background: #777777; } td.black { background: #000000; } +p.sube +{ + font-size: 12pt; + font-weight: bold; +} +.comm { color: #444; } +.func { color: #630; } +.deff { color: #040; } +.numm { color: #008; } + #Content { margin: 8pt; } #ShareLink diff --git a/vram.html b/vram.html index f8d5db9..6762f10 100644 --- a/vram.html +++ b/vram.html @@ -13,11 +13,12 @@

NDS Homebrew VRAM BG Allocation Conflict Viewer

For the VRAM Banks Selector tool click here

Please contact mtheall in #dsdev on irc.blitzed.org regarding errors, discrepancies, suggestions, or bugs with this tool

-

Link for sharing: Javascript must be enabled

+

Link for sharing: Loading...


+

Sub Engine

Base select

DISPCNT Map Base 64KB Step

- - - - +
Generate for Sub Engine
Javascript must be enabled
Loading...

 

+ + - +
Legend
Empty
Empty
Okay!
Warning!Safe if shared tileset graphics
Error!You will definitely have corrupted graphics.
Additionally, zeromus will slap you.
Empty
Error!Graphics fall outside the valid range.
-
Javascript must be enabled
+
Loading...
diff --git a/vram.js b/vram.js index 42d92bf..4ff2f61 100644 --- a/vram.js +++ b/vram.js @@ -1,8 +1,7 @@ function getParameterByName(name) { name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); - var regexS = "[\\?&]" + name + "=([^&#]*)"; - var regex = new RegExp(regexS); - var results = regex.exec(window.location.search); + var regex = new RegExp("[\\#&]" + name + "=([^&#]*)"); + var results = regex.exec(window.location.hash); if(results == null) return ""; else @@ -11,9 +10,8 @@ function getParameterByName(name) { function hasParameterByName(name) { name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); - var regexS = "[\\?&]" + name + "=([^&#]*)"; - var regex = new RegExp(regexS); - var results = regex.exec(window.location.search); + var regex = new RegExp("[\\#&]" + name + "=([^&#]*)"); + var results = regex.exec(window.location.hash); if(results == null) return false; else @@ -24,6 +22,7 @@ function V2Digits(size) { return Math.round(size * 100) / 100; } +var SubEngine = 0; var DISPCNT_MapBase = 0; var DISPCNT_TileBase = 0; @@ -60,14 +59,16 @@ var BGType_B16Siz = [16, 48, 64, 128, 256]; var ShareLink; var Function_Call; var CPU_Access; +var MaxAllocated; function loadp() { - var i; + var i, j; // Initialize 2D array for (i=0; i<8; i++) VRAM_BGMapping[i] = Array(); // Setup options + if (hasParameterByName('SUB')) document.forms['bgvram'].SubEngine.checked = (getParameterByName('SUB') != 0) ? true : false; 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'); @@ -103,6 +104,12 @@ function loadp() { document.forms['bgvram'].B16S3.options.selectedIndex = getParameterByName('S3'); } + // Set all options to a valid state + for (i=0; i= 0) && (j < 257)) VRAM_BGMapping[bgnum][j] = 1; + if (j >= 256) j = 256; + if (j >= 0) VRAM_BGMapping[bgnum][j] = 1; } sz_m = BGType_TSiz[size]; sz = Math.ceil(sz_m); for (i=0; i= 0) && (j < 257)) VRAM_BGMapping[bgnum+1][j] = 1; + if (j >= 256) j = 256; + if (j >= 0) VRAM_BGMapping[bgnum+1][j] = 1; } } else if (bgtype == 2) { @@ -132,14 +141,16 @@ function bg_alloc_from(bgnum, bgtype, size, maxtiles, mapbase, tilebase) { sz = Math.ceil(sz_t); for (i=0; i= 0) && (j < 257)) VRAM_BGMapping[bgnum][j] = 1; + if (j >= 256) j = 256; + if (j >= 0) VRAM_BGMapping[bgnum][j] = 1; } sz_m = BGType_TSiz[size]; sz = Math.ceil(sz_m); for (i=0; i= 0) && (j < 257)) VRAM_BGMapping[bgnum+1][j] = 1; + if (j >= 256) j = 256; + if (j >= 0) VRAM_BGMapping[bgnum+1][j] = 1; } } else if (bgtype == 3) { @@ -147,14 +158,16 @@ function bg_alloc_from(bgnum, bgtype, size, maxtiles, mapbase, tilebase) { sz = Math.ceil(sz_t); for (i=0; i= 0) && (j < 257)) VRAM_BGMapping[bgnum][j] = 1; + if (j >= 256) j = 256; + if (j >= 0) VRAM_BGMapping[bgnum][j] = 1; } sz_m = BGType_RSiz[size]; sz = Math.ceil(sz_m); for (i=0; i= 0) && (j < 257)) VRAM_BGMapping[bgnum+1][j] = 1; + if (j >= 256) j = 256; + if (j >= 0) VRAM_BGMapping[bgnum+1][j] = 1; } } else if (bgtype == 4) { @@ -162,14 +175,16 @@ function bg_alloc_from(bgnum, bgtype, size, maxtiles, mapbase, tilebase) { sz = Math.ceil(sz_t); for (i=0; i= 0) && (j < 257)) VRAM_BGMapping[bgnum][j] = 1; + if (j >= 256) j = 256; + if (j >= 0) VRAM_BGMapping[bgnum][j] = 1; } sz_m = BGType_ERSiz[size]; sz = Math.ceil(sz_m); for (i=0; i= 0) && (j < 257)) VRAM_BGMapping[bgnum+1][j] = 1; + if (j >= 256) j = 256; + if (j >= 0) VRAM_BGMapping[bgnum+1][j] = 1; } } else if (bgtype == 5) { @@ -177,7 +192,8 @@ function bg_alloc_from(bgnum, bgtype, size, maxtiles, mapbase, tilebase) { sz = Math.ceil(sz_t); for (i=0; i= 0) && (j < 257)) VRAM_BGMapping[bgnum][j] = 2; + if (j >= 256) j = 256; + if (j >= 0) VRAM_BGMapping[bgnum][j] = 2; } sz_m = 0; @@ -187,7 +203,8 @@ function bg_alloc_from(bgnum, bgtype, size, maxtiles, mapbase, tilebase) { sz = Math.ceil(sz_t); for (i=0; i= 0) && (j < 257)) VRAM_BGMapping[bgnum][j] = 2; + if (j >= 256) j = 256; + if (j >= 0) VRAM_BGMapping[bgnum][j] = 2; } sz_m = 0; @@ -202,14 +219,29 @@ function bg_alloc_conflict() { for (i=0; i<256; i++) { VRAM_BGError[i] = 0; numweight = 0; + + // Mark weight for (bg=0; bg<8; bg+=2) { - // Mark weight + if (SubEngine && (i >= 64) && (VRAM_BGMapping[bg][i] != 0)) numweight += 4; + if (VRAM_BGMapping[bg+1][i] != 0) numweight += 4; if (VRAM_BGMapping[bg][i] == 1) numweight++; - if (VRAM_BGMapping[bg][i] >= 2) numweight += numweight+1; - if (VRAM_BGMapping[bg+1][i] != 0) numweight += 2; + if (VRAM_BGMapping[bg][i] >= 2) numweight += (numweight == 0) ? 1 : 4; } - if (numweight == 2) { - // Mark warnings + + // Mark valid + if (numweight <= 1) + { + if (SubEngine && (i >= 64)) + { + for (bg=0; bg<8; bg++) { + VRAM_BGMapping[bg][i] = 5; + } + } + } + + // Mark warnings + if ((numweight >= 2) && (numweight < 5)) + { for (bg=0; bg<8; bg+=2) { if (VRAM_BGMapping[bg][i] > 0) { VRAM_BGMapping[bg][i] = 3; @@ -217,11 +249,27 @@ function bg_alloc_conflict() { } } } - if (numweight >= 3) { - // Mark errors + + // Mark errors + if (numweight >= 5) + { for (bg=0; bg<8; bg+=2) { - if (VRAM_BGMapping[bg][i] > 0) VRAM_BGMapping[bg][i] = 4; - if (VRAM_BGMapping[bg+1][i] > 0) VRAM_BGMapping[bg+1][i] = 4; + if (SubEngine && (i >= 64)) + { + if (VRAM_BGMapping[bg][i] > 0) + VRAM_BGMapping[bg][i] = 6; + else + VRAM_BGMapping[bg][i] = 5; + if (VRAM_BGMapping[bg+1][i] > 0) + VRAM_BGMapping[bg+1][i] = 6; + else + VRAM_BGMapping[bg+1][i] = 5; + } + else + { + if (VRAM_BGMapping[bg][i] > 0) VRAM_BGMapping[bg][i] = 4; + if (VRAM_BGMapping[bg+1][i] > 0) VRAM_BGMapping[bg+1][i] = 4; + } } VRAM_BGError[i] = 1; ret = 3; @@ -241,16 +289,17 @@ function bg_alloc_conflict() { function bg_allocation() { var i, sz, szopt, maxtiles, mapbase, tilebase; var bgtype0, bgtype1, bgtype2, bgtype3; - var wmode, funccallsub, a, b; + var wmode, a, b; var bgcodesnippet = ""; var largebitmap = false; // Set DISPCNT offsets + SubEngine = document.forms['bgvram'].SubEngine.checked; + if (SubEngine) ShareLink += "&SUB=1"; 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<257; i++) { @@ -370,9 +419,10 @@ function bg_allocation() { } if (bgtype0 > 0) { ShareLink += "&S0=" + sz; - if (funccallsub) bgcodesnippet += "bgInitSub(0"; else bgcodesnippet += "bgInit(0"; - bgcodesnippet += ", BgType_" + document.forms['bgvram'].T0.options[document.forms['bgvram'].T0.options.selectedIndex].value; - bgcodesnippet += ", BgSize_" + szopt[szopt.selectedIndex].value + ", " + mapbase + ", " + tilebase + ");
"; + bgcodesnippet += "bgInit" + (SubEngine ? "Sub" : "") + "(0"; + bgcodesnippet += ", BgType_" + document.forms['bgvram'].T0.options[document.forms['bgvram'].T0.options.selectedIndex].value + ""; + bgcodesnippet += ", BgSize_" + szopt[szopt.selectedIndex].value + ""; + bgcodesnippet += ", " + mapbase + ", " + tilebase + ");
"; } bg_alloc_from(0, bgtype0, sz, maxtiles, mapbase, tilebase); @@ -403,9 +453,10 @@ function bg_allocation() { } if (bgtype1 > 0) { ShareLink += "&S1=" + sz; - if (funccallsub) bgcodesnippet += "bgInitSub(1"; else bgcodesnippet += "bgInit(1"; - bgcodesnippet += ", BgType_" + document.forms['bgvram'].T1.options[document.forms['bgvram'].T1.options.selectedIndex].value; - bgcodesnippet += ", BgSize_" + szopt[szopt.selectedIndex].value + ", " + mapbase + ", " + tilebase + ");
"; + bgcodesnippet += "bgInit" + (SubEngine ? "Sub" : "") + "(1"; + bgcodesnippet += ", BgType_" + document.forms['bgvram'].T1.options[document.forms['bgvram'].T1.options.selectedIndex].value + ""; + bgcodesnippet += ", BgSize_" + szopt[szopt.selectedIndex].value + ""; + bgcodesnippet += ", " + mapbase + ", " + tilebase + ");
"; } bg_alloc_from(1, bgtype1, sz, maxtiles, mapbase, tilebase); @@ -459,17 +510,17 @@ function bg_allocation() { } if (bgtype2 > 0) { ShareLink += "&S2=" + sz; - if (funccallsub) bgcodesnippet += "bgInitSub(2"; else bgcodesnippet += "bgInit(2"; - bgcodesnippet += ", BgType_" + document.forms['bgvram'].T2.options[document.forms['bgvram'].T2.options.selectedIndex].value; + bgcodesnippet += "bgInit" + (SubEngine ? "Sub" : "") + "(2"; + bgcodesnippet += ", BgType_" + document.forms['bgvram'].T2.options[document.forms['bgvram'].T2.options.selectedIndex].value + ""; if (szopt[szopt.selectedIndex].value == 'B8_256x192') - bgcodesnippet += ", BgSize_B8_256x256"; + bgcodesnippet += ", BgSize_B8_256x256"; else if (szopt[szopt.selectedIndex].value == 'B16_256x192') - bgcodesnippet += ", BgSize_B16_256x256"; + bgcodesnippet += ", BgSize_B16_256x256"; else - bgcodesnippet += ", BgSize_" + szopt[szopt.selectedIndex].value; + bgcodesnippet += ", BgSize_" + szopt[szopt.selectedIndex].value + ""; + bgcodesnippet += ", " + mapbase + ", " + tilebase + ");
"; if ((szopt[szopt.selectedIndex].value == 'B8_512x1024') || (szopt[szopt.selectedIndex].value == 'B8_1024x512')) largebitmap = true; - bgcodesnippet += ", " + mapbase + ", " + tilebase + ");
"; - if (funccallsub && largebitmap) bgcodesnippet += "// Error! Large bitmap isn't supported on Sub Engine"; + if (SubEngine && largebitmap) bgcodesnippet += "// Error! Large bitmap isn't supported on Sub Engine"; } bg_alloc_from(2, bgtype2, sz, maxtiles, mapbase, tilebase); @@ -523,15 +574,15 @@ function bg_allocation() { } if (bgtype3 > 0) { ShareLink += "&S3=" + sz; - if (funccallsub) bgcodesnippet += "bgInitSub(3"; else bgcodesnippet += "bgInit(3"; - bgcodesnippet += ", BgType_" + document.forms['bgvram'].T3.options[document.forms['bgvram'].T3.options.selectedIndex].value; + bgcodesnippet += "bgInit" + (SubEngine ? "Sub" : "") + "(3"; + bgcodesnippet += ", BgType_" + document.forms['bgvram'].T3.options[document.forms['bgvram'].T3.options.selectedIndex].value + ""; if (szopt[szopt.selectedIndex].value == 'B8_256x192') - bgcodesnippet += ", BgSize_B8_256x256"; + bgcodesnippet += ", BgSize_B8_256x256"; else if (szopt[szopt.selectedIndex].value == 'B16_256x192') - bgcodesnippet += ", BgSize_B16_256x256"; + bgcodesnippet += ", BgSize_B16_256x256"; else - bgcodesnippet += ", BgSize_" + szopt[szopt.selectedIndex].value; - bgcodesnippet += ", " + mapbase + ", " + tilebase + ");
"; + bgcodesnippet += ", BgSize_" + szopt[szopt.selectedIndex].value + ""; + bgcodesnippet += ", " + mapbase + ", " + tilebase + ");
"; } bg_alloc_from(3, bgtype3, sz, maxtiles, mapbase, tilebase); @@ -559,7 +610,7 @@ function bg_allocation() { switch (bgcstatus) { case 1: document.getElementById('Mapping_Status').innerHTML = "VRAM BG Allocation okay!"; break; - case 2: document.getElementById('Mapping_Status').innerHTML = "Warning: VRAM BG Allocation has some warnings, ignore if gfx has shared tileset graphics."; break; + case 2: document.getElementById('Mapping_Status').innerHTML = "Warning: VRAM BG Allocation has some warnings, ignore if gfx has shared tileset graphics."; break; case 3: document.getElementById('Mapping_Status').innerHTML = "Error: VRAM BG Allocation has errors."; break; case 4: document.getElementById('Mapping_Status').innerHTML = "Error: VRAM BG Allocation is outside the range."; break; } @@ -581,16 +632,21 @@ function bg_allocation() { else { document.getElementById('Recommended_Mode').innerHTML = "Mode " + wmode + " will support your options."; - if (funccallsub && largebitmap) + if (SubEngine && largebitmap) { document.getElementById('Recommended_Mode').innerHTML = "Error: Sub Engine don't support large bitmaps."; document.getElementById('Working_Engines').innerHTML = "Error: Combination won't work on hardware!"; wmode = -1; } - else if ((DISPCNT_MapBase == 0) && (DISPCNT_TileBase == 0)) + else if ((DISPCNT_MapBase == 0) && (DISPCNT_TileBase == 0) && (!largebitmap) && (MaxAllocated < 64)) document.getElementById('Working_Engines').innerHTML = "Works for Main Engine or Sub Engine."; else - document.getElementById('Working_Engines').innerHTML = "Works for Main Engine only!
For Sub Engine map, use DISPCNT 64KB steps of 0."; + if (MaxAllocated >= 64) + document.getElementById('Working_Engines').innerHTML = "Works for Main Engine only!
For Sub Engine map, don't use more than 128KB."; + else if (largebitmap) + document.getElementById('Working_Engines').innerHTML = "Works for Main Engine only!
For Sub Engine map, don't use large bitmap."; + else + document.getElementById('Working_Engines').innerHTML = "Works for Main Engine only!
For Sub Engine map, use DISPCNT 64KB steps of 0."; } if ((wmode >= 0) && (bgcstatus < 3)) { @@ -605,10 +661,10 @@ function bg_allocation() { // Generate function calls if ((wmode < 0) || (bgcstatus >= 3)) - Function_Call += "// Error(s) found
"; + Function_Call += "// Error(s) found
"; else { - Function_Call += "videoSetMode" + (funccallsub ? "Sub" : "") + "(MODE_" + wmode + "_2D);
"; + Function_Call += "videoSetMode" + (SubEngine ? "Sub" : "") + "(MODE_" + wmode + "_2D);
"; if (bgcodesnippet.length > 0) Function_Call += "
"; Function_Call += bgcodesnippet; } @@ -669,6 +725,7 @@ function bg_allocation_table() { for (j=0; j<8; j++) { td = document.createElement('TD'); td.style.backgroundColor = ColorCode[VRAM_BGMapping[j][i]]; + if (VRAM_BGMapping[j][i] != 0) MaxAllocated = i; tr.appendChild(td); } @@ -709,6 +766,7 @@ function upd() { ShareLink = ""; Function_Call = ""; CPU_Access = ""; + MaxAllocated = 0; // Update BG allocation bg_allocation(); @@ -717,11 +775,8 @@ function upd() { bg_allocation_table(); // Update globals - ShareLink = "?" + ShareLink.substring(1); + ShareLink = "#" + ShareLink.substring(1); document.getElementById('ShareLink').innerHTML = "" + ShareLink + ""; - if (Function_Call.length == 0) { - document.getElementById('FunctionCall').innerHTML = "// Empty"; - } - else - document.getElementById('FunctionCall').innerHTML = Function_Call; + document.getElementById('FunctionCall').innerHTML = Function_Call; + window.location.hash = ShareLink; }