29 changed files with 101894 additions and 37 deletions
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,372 @@
|
||||
'use strict';let wasmboyMemorySize=9109504,wasmByteMemory=new Uint8ClampedArray(wasmboyMemorySize),memory={size:()=>wasmboyMemorySize,grow:()=>{},wasmByteMemory},load=a=>wasmByteMemory[a],store=(a,b)=>{wasmByteMemory[a]=b},abs=a=>Math.abs(a),ceil=a=>Math.ceil(a); |
||||
var ASSEMBLYSCRIPT_MEMORY_LOCATION=0,ASSEMBLYSCRIPT_MEMORY_SIZE=1024,WASMBOY_STATE_LOCATION=ASSEMBLYSCRIPT_MEMORY_LOCATION+ASSEMBLYSCRIPT_MEMORY_SIZE,WASMBOY_STATE_SIZE=1024,VIDEO_RAM_LOCATION=WASMBOY_STATE_LOCATION+WASMBOY_STATE_SIZE,VIDEO_RAM_SIZE=16384,WORK_RAM_LOCATION=VIDEO_RAM_LOCATION+VIDEO_RAM_SIZE,WORK_RAM_SIZE=32768,OTHER_GAMEBOY_INTERNAL_MEMORY_LOCATION=WORK_RAM_LOCATION+WORK_RAM_SIZE,OTHER_GAMEBOY_INTERNAL_MEMORY_SIZE=16384,GAMEBOY_INTERNAL_MEMORY_LOCATION=VIDEO_RAM_LOCATION,GAMEBOY_INTERNAL_MEMORY_SIZE= |
||||
OTHER_GAMEBOY_INTERNAL_MEMORY_LOCATION-VIDEO_RAM_LOCATION+OTHER_GAMEBOY_INTERNAL_MEMORY_SIZE,GBC_PALETTE_LOCATION=OTHER_GAMEBOY_INTERNAL_MEMORY_LOCATION+OTHER_GAMEBOY_INTERNAL_MEMORY_SIZE,GBC_PALETTE_SIZE=128,BG_PRIORITY_MAP_LOCATION=GBC_PALETTE_LOCATION+GBC_PALETTE_SIZE,BG_PRIORITY_MAP_SIZE=23552,FRAME_LOCATION=BG_PRIORITY_MAP_LOCATION+BG_PRIORITY_MAP_SIZE,FRAME_SIZE=93184,BACKGROUND_MAP_LOCATION=FRAME_LOCATION+FRAME_SIZE,BACKGROUND_MAP_SIZE=196608,TILE_DATA_LOCATION=BACKGROUND_MAP_LOCATION+BACKGROUND_MAP_SIZE, |
||||
TILE_DATA_SIZE=147456,OAM_TILES_LOCATION=TILE_DATA_LOCATION+TILE_DATA_SIZE,OAM_TILES_SIZE=15360,GRAPHICS_OUTPUT_LOCATION=GBC_PALETTE_LOCATION,GRAPHICS_OUTPUT_SIZE=OAM_TILES_LOCATION-GBC_PALETTE_LOCATION+OAM_TILES_SIZE,CHANNEL_1_BUFFER_LOCATION=OAM_TILES_LOCATION+OAM_TILES_SIZE,CHANNEL_1_BUFFER_SIZE=131072,CHANNEL_2_BUFFER_LOCATION=CHANNEL_1_BUFFER_LOCATION+CHANNEL_1_BUFFER_SIZE,CHANNEL_2_BUFFER_SIZE=131072,CHANNEL_3_BUFFER_LOCATION=CHANNEL_2_BUFFER_LOCATION+CHANNEL_2_BUFFER_SIZE,CHANNEL_3_BUFFER_SIZE= |
||||
131072,CHANNEL_4_BUFFER_LOCATION=CHANNEL_3_BUFFER_LOCATION+CHANNEL_3_BUFFER_SIZE,CHANNEL_4_BUFFER_SIZE=131072,AUDIO_BUFFER_LOCATION=CHANNEL_4_BUFFER_LOCATION+CHANNEL_4_BUFFER_SIZE,AUDIO_BUFFER_SIZE=131072,CARTRIDGE_RAM_LOCATION=AUDIO_BUFFER_LOCATION+AUDIO_BUFFER_SIZE,CARTRIDGE_RAM_SIZE=131072,BOOT_ROM_LOCATION=CARTRIDGE_RAM_LOCATION+CARTRIDGE_RAM_SIZE,BOOT_ROM_SIZE=2560,CARTRIDGE_ROM_LOCATION=BOOT_ROM_LOCATION+BOOT_ROM_SIZE,CARTRIDGE_ROM_SIZE=8258560,DEBUG_GAMEBOY_MEMORY_LOCATION=CARTRIDGE_ROM_LOCATION+ |
||||
CARTRIDGE_ROM_SIZE,DEBUG_GAMEBOY_MEMORY_SIZE=65535,WASMBOY_MEMORY_LOCATION=0,WASMBOY_MEMORY_SIZE=DEBUG_GAMEBOY_MEMORY_LOCATION+DEBUG_GAMEBOY_MEMORY_SIZE+1,WASMBOY_WASM_PAGES=ceil(WASMBOY_MEMORY_SIZE/1024/64)+1,Config=function(){function a(){}a.enableBootRom=!1;a.useGbcWhenAvailable=!0;a.audioBatchProcessing=!1;a.graphicsBatchProcessing=!1;a.timersBatchProcessing=!1;a.graphicsDisableScanlineRendering=!1;a.audioAccumulateSamples=!1;a.tileRendering=!1;a.tileCaching=!1;a.enableAudioDebugging=!1;return a}(); |
||||
function u8Portable(a){return a&255}function u16Portable(a){return a&65535}function i8Portable(a){return a<<24>>24}function i32Portable(a){return a|0}function setFlagBit(a,b){a=u8Portable(1<<a);Cpu.registerF=0<b?Cpu.registerF|a:Cpu.registerF&(255^a);return Cpu.registerF}function setZeroFlag$$1(a){setFlagBit(7,a)}function setSubtractFlag(a){setFlagBit(6,a)}function setHalfCarryFlag(a){setFlagBit(5,a)}function setCarryFlag(a){setFlagBit(4,a)}function getZeroFlag$$1(){return Cpu.registerF>>7&1} |
||||
function getSubtractFlag(){return Cpu.registerF>>6&1}function getHalfCarryFlag(){return Cpu.registerF>>5&1}function getCarryFlag$$1(){return Cpu.registerF>>4&1}function checkAndSetEightBitHalfCarryFlag(a,b){0<=b?(a=u8Portable((a&15)+(b&15))&16,setHalfCarryFlag(0!==a)):setHalfCarryFlag((abs(b)&15)>(a&15))}function checkAndSetEightBitCarryFlag(a,b){0<=b?(b=u8Portable(a+b),setCarryFlag(a>b)):setCarryFlag(abs(b)>a)} |
||||
function checkAndSetSixteenBitFlagsAddOverflow(a,b,c){c?(a=a^b^a+b,setHalfCarryFlag(0!==(a&16)),setCarryFlag(0!==(a&256))):(c=u16Portable(a+b),setCarryFlag(c<a),a=u16Portable((a^b^c)&4096),setHalfCarryFlag(0!==a))} |
||||
var WasmBoyGBColors=function(){function a(){}a.bgWhite=15921906;a.bgLightGrey=10526880;a.bgDarkGrey=5789784;a.bgBlack=526344;a.obj0White=15921906;a.obj0LightGrey=10526880;a.obj0DarkGrey=5789784;a.obj0Black=526344;a.obj1White=15921906;a.obj1LightGrey=10526880;a.obj1DarkGrey=5789784;a.obj1Black=526344;return a}(),GreenColors=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=5439232;a.bgDarkGrey=16728576;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=5439232;a.obj0DarkGrey=16728576;a.obj0Black= |
||||
0;a.obj1White=16777215;a.obj1LightGrey=5439232;a.obj1DarkGrey=16728576;a.obj1Black=0;return a}(),OrangeColors=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16776960;a.bgDarkGrey=16711680;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16776960;a.obj0DarkGrey=16711680;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16776960;a.obj1DarkGrey=16711680;a.obj1Black=0;return a}(),BrownColors=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16756067;a.bgDarkGrey=8663296;a.bgBlack= |
||||
0;a.obj0White=16777215;a.obj0LightGrey=16756067;a.obj0DarkGrey=8663296;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),InvertedColors=function(){function a(){}a.bgWhite=0;a.bgLightGrey=33924;a.bgDarkGrey=16768512;a.bgBlack=16777215;a.obj0White=0;a.obj0LightGrey=33924;a.obj0DarkGrey=16768512;a.obj0Black=16777215;a.obj1White=0;a.obj1LightGrey=33924;a.obj1DarkGrey=16768512;a.obj1Black=16777215;return a}(),GrayscaleColors=function(){function a(){} |
||||
a.bgWhite=16777215;a.bgLightGrey=10855845;a.bgDarkGrey=5395026;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=10855845;a.obj0DarkGrey=5395026;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=10855845;a.obj1DarkGrey=5395026;a.obj1Black=0;return a}(),PastelMixColors=function(){function a(){}a.bgWhite=16777125;a.bgLightGrey=16749716;a.bgDarkGrey=9737471;a.bgBlack=0;a.obj0White=16777125;a.obj0LightGrey=16749716;a.obj0DarkGrey=9737471;a.obj0Black=0;a.obj1White=16777125;a.obj1LightGrey=16749716;a.obj1DarkGrey= |
||||
9737471;a.obj1Black=0;return a}(),DarkBrownColors=function(){function a(){}a.bgWhite=16770757;a.bgLightGrey=13540484;a.bgDarkGrey=8678185;a.bgBlack=5910792;a.obj0White=16777215;a.obj0LightGrey=16756067;a.obj0DarkGrey=8663296;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),DarkGreenColors=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=8126257;a.bgDarkGrey=25541;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey= |
||||
9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black=0;return a}(),DarkBlueColors=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=9211102;a.bgDarkGrey=5395084;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),RedColors=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234; |
||||
a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=8126257;a.obj0DarkGrey=33792;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),BlueColors=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),YellowColors=function(){function a(){} |
||||
a.bgWhite=16777215;a.bgLightGrey=16776960;a.bgDarkGrey=8079872;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=6530559;a.obj0DarkGrey=255;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),Table00Entry08Colors=function(){function a(){}a.bgWhite=10853631;a.bgLightGrey=16776960;a.bgDarkGrey=25344;a.bgBlack=0;a.obj0White=10853631;a.obj0LightGrey=16776960;a.obj0DarkGrey=25344;a.obj0Black=0;a.obj1White=10853631;a.obj1LightGrey=16776960;a.obj1DarkGrey= |
||||
25344;a.obj1Black=0;return a}(),Table01Entry0BColors=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),Table01Entry10Colors=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=8126257;a.obj0DarkGrey= |
||||
33792;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black=0;return a}(),Table03Entry0AColors=function(){function a(){}a.bgWhite=11908607;a.bgLightGrey=16777108;a.bgDarkGrey=11360834;a.bgBlack=0;a.obj0White=0;a.obj0LightGrey=16777215;a.obj0DarkGrey=16745604;a.obj0Black=9714234;a.obj1White=0;a.obj1LightGrey=16777215;a.obj1DarkGrey=16745604;a.obj1Black=9714234;return a}(),Table05Entry00Colors=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=11382148; |
||||
a.bgDarkGrey=4354939;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16741120;a.obj0DarkGrey=9716224;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=5946879;a.obj1DarkGrey=16711680;a.obj1Black=255;return a}(),Table05Entry01Colors=function(){function a(){}a.bgWhite=16777116;a.bgLightGrey=9745919;a.bgDarkGrey=6526067;a.bgBlack=14906;a.obj0White=16762178;a.obj0LightGrey=16766464;a.obj0DarkGrey=9714176;a.obj0Black=4849664;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black= |
||||
0;return a}(),Table05Entry02Colors=function(){function a(){}a.bgWhite=7077632;a.bgLightGrey=16777215;a.bgDarkGrey=16732746;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16777215;a.obj0DarkGrey=6530559;a.obj0Black=255;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),Table05Entry08Colors=function(){function a(){}a.bgWhite=10853631;a.bgLightGrey=16776960;a.bgDarkGrey=25344;a.bgBlack=0;a.obj0White=16737106;a.obj0LightGrey=14024704;a.obj0DarkGrey=6488064; |
||||
a.obj0Black=0;a.obj1White=255;a.obj1LightGrey=16777215;a.obj1DarkGrey=16777083;a.obj1Black=34047;return a}(),Table05Entry09Colors=function(){function a(){}a.bgWhite=16777166;a.bgLightGrey=6549487;a.bgDarkGrey=10257457;a.bgBlack=5921370;a.obj0White=16777215;a.obj0LightGrey=16741120;a.obj0DarkGrey=9716224;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),Table05Entry11Colors=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey= |
||||
9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=65280;a.obj0DarkGrey=3245056;a.obj0Black=18944;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),Table05Entry14Colors=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16776960;a.obj0LightGrey=16711680;a.obj0DarkGrey=6488064;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),Table05Entry15Colors= |
||||
function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=11382148;a.bgDarkGrey=4354939;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16756067;a.obj0DarkGrey=16756067;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),Colors=function(){function a(){}a.bgWhite=WasmBoyGBColors.bgWhite;a.bgLightGrey=WasmBoyGBColors.bgLightGrey;a.bgDarkGrey=WasmBoyGBColors.bgDarkGrey;a.bgBlack=WasmBoyGBColors.bgBlack;a.obj0White=WasmBoyGBColors.obj0White;a.obj0LightGrey= |
||||
WasmBoyGBColors.obj0LightGrey;a.obj0DarkGrey=WasmBoyGBColors.obj0DarkGrey;a.obj0Black=WasmBoyGBColors.obj0Black;a.obj1White=WasmBoyGBColors.obj1White;a.obj1LightGrey=WasmBoyGBColors.obj1LightGrey;a.obj1DarkGrey=WasmBoyGBColors.obj1DarkGrey;a.obj1Black=WasmBoyGBColors.obj1Black;return a}(); |
||||
function initializeColors(){setManualColorizationPalette(0);if(!Cpu.GBCEnabled&&(!Cpu.BootROMEnabled||Cpu.GBCEnabled)){for(var a=0,b=308;323>=b;b++)a+=eightBitLoadFromGBMemory(b);setHashColorizationPalette(a&255)}}function getRedFromHexColor(a){return(a&16711680)>>16}function getGreenFromHexColor(a){return(a&65280)>>8}function getBlueFromHexColor(a){return a&255} |
||||
function setManualColorizationPalette(a){switch(a){case 0:Colors.bgWhite=WasmBoyGBColors.bgWhite;Colors.bgLightGrey=WasmBoyGBColors.bgLightGrey;Colors.bgDarkGrey=WasmBoyGBColors.bgDarkGrey;Colors.bgBlack=WasmBoyGBColors.bgBlack;Colors.obj0White=WasmBoyGBColors.obj0White;Colors.obj0LightGrey=WasmBoyGBColors.obj0LightGrey;Colors.obj0DarkGrey=WasmBoyGBColors.obj0DarkGrey;Colors.obj0Black=WasmBoyGBColors.obj0Black;Colors.obj1White=WasmBoyGBColors.obj1White;Colors.obj1LightGrey=WasmBoyGBColors.obj1LightGrey; |
||||
Colors.obj1DarkGrey=WasmBoyGBColors.obj1DarkGrey;Colors.obj1Black=WasmBoyGBColors.obj1Black;break;case 1:Colors.bgWhite=BrownColors.bgWhite;Colors.bgLightGrey=BrownColors.bgLightGrey;Colors.bgDarkGrey=BrownColors.bgDarkGrey;Colors.bgBlack=BrownColors.bgBlack;Colors.obj0White=BrownColors.obj0White;Colors.obj0LightGrey=BrownColors.obj0LightGrey;Colors.obj0DarkGrey=BrownColors.obj0DarkGrey;Colors.obj0Black=BrownColors.obj0Black;Colors.obj1White=BrownColors.obj1White;Colors.obj1LightGrey=BrownColors.obj1LightGrey; |
||||
Colors.obj1DarkGrey=BrownColors.obj1DarkGrey;Colors.obj1Black=BrownColors.obj1Black;break;case 2:Colors.bgWhite=RedColors.bgWhite;Colors.bgLightGrey=RedColors.bgLightGrey;Colors.bgDarkGrey=RedColors.bgDarkGrey;Colors.bgBlack=RedColors.bgBlack;Colors.obj0White=RedColors.obj0White;Colors.obj0LightGrey=RedColors.obj0LightGrey;Colors.obj0DarkGrey=RedColors.obj0DarkGrey;Colors.obj0Black=RedColors.obj0Black;Colors.obj1White=RedColors.obj1White;Colors.obj1LightGrey=RedColors.obj1LightGrey;Colors.obj1DarkGrey= |
||||
RedColors.obj1DarkGrey;Colors.obj1Black=RedColors.obj1Black;break;case 3:Colors.bgWhite=DarkBrownColors.bgWhite;Colors.bgLightGrey=DarkBrownColors.bgLightGrey;Colors.bgDarkGrey=DarkBrownColors.bgDarkGrey;Colors.bgBlack=DarkBrownColors.bgBlack;Colors.obj0White=DarkBrownColors.obj0White;Colors.obj0LightGrey=DarkBrownColors.obj0LightGrey;Colors.obj0DarkGrey=DarkBrownColors.obj0DarkGrey;Colors.obj0Black=DarkBrownColors.obj0Black;Colors.obj1White=DarkBrownColors.obj1White;Colors.obj1LightGrey=DarkBrownColors.obj1LightGrey; |
||||
Colors.obj1DarkGrey=DarkBrownColors.obj1DarkGrey;Colors.obj1Black=DarkBrownColors.obj1Black;break;case 4:Colors.bgWhite=GreenColors.bgWhite;Colors.bgLightGrey=GreenColors.bgLightGrey;Colors.bgDarkGrey=GreenColors.bgDarkGrey;Colors.bgBlack=GreenColors.bgBlack;Colors.obj0White=GreenColors.obj0White;Colors.obj0LightGrey=GreenColors.obj0LightGrey;Colors.obj0DarkGrey=GreenColors.obj0DarkGrey;Colors.obj0Black=GreenColors.obj0Black;Colors.obj1White=GreenColors.obj1White;Colors.obj1LightGrey=GreenColors.obj1LightGrey; |
||||
Colors.obj1DarkGrey=GreenColors.obj1DarkGrey;Colors.obj1Black=GreenColors.obj1Black;break;case 5:Colors.bgWhite=DarkGreenColors.bgWhite;Colors.bgLightGrey=DarkGreenColors.bgLightGrey;Colors.bgDarkGrey=DarkGreenColors.bgDarkGrey;Colors.bgBlack=DarkGreenColors.bgBlack;Colors.obj0White=DarkGreenColors.obj0White;Colors.obj0LightGrey=DarkGreenColors.obj0LightGrey;Colors.obj0DarkGrey=DarkGreenColors.obj0DarkGrey;Colors.obj0Black=DarkGreenColors.obj0Black;Colors.obj1White=DarkGreenColors.obj1White;Colors.obj1LightGrey= |
||||
DarkGreenColors.obj1LightGrey;Colors.obj1DarkGrey=DarkGreenColors.obj1DarkGrey;Colors.obj1Black=DarkGreenColors.obj1Black;break;case 6:Colors.bgWhite=InvertedColors.bgWhite;Colors.bgLightGrey=InvertedColors.bgLightGrey;Colors.bgDarkGrey=InvertedColors.bgDarkGrey;Colors.bgBlack=InvertedColors.bgBlack;Colors.obj0White=InvertedColors.obj0White;Colors.obj0LightGrey=InvertedColors.obj0LightGrey;Colors.obj0DarkGrey=InvertedColors.obj0DarkGrey;Colors.obj0Black=InvertedColors.obj0Black;Colors.obj1White=InvertedColors.obj1White; |
||||
Colors.obj1LightGrey=InvertedColors.obj1LightGrey;Colors.obj1DarkGrey=InvertedColors.obj1DarkGrey;Colors.obj1Black=InvertedColors.obj1Black;break;case 7:Colors.bgWhite=PastelMixColors.bgWhite;Colors.bgLightGrey=PastelMixColors.bgLightGrey;Colors.bgDarkGrey=PastelMixColors.bgDarkGrey;Colors.bgBlack=PastelMixColors.bgBlack;Colors.obj0White=PastelMixColors.obj0White;Colors.obj0LightGrey=PastelMixColors.obj0LightGrey;Colors.obj0DarkGrey=PastelMixColors.obj0DarkGrey;Colors.obj0Black=PastelMixColors.obj0Black; |
||||
Colors.obj1White=PastelMixColors.obj1White;Colors.obj1LightGrey=PastelMixColors.obj1LightGrey;Colors.obj1DarkGrey=PastelMixColors.obj1DarkGrey;Colors.obj1Black=PastelMixColors.obj1Black;break;case 8:Colors.bgWhite=OrangeColors.bgWhite;Colors.bgLightGrey=OrangeColors.bgLightGrey;Colors.bgDarkGrey=OrangeColors.bgDarkGrey;Colors.bgBlack=OrangeColors.bgBlack;Colors.obj0White=OrangeColors.obj0White;Colors.obj0LightGrey=OrangeColors.obj0LightGrey;Colors.obj0DarkGrey=OrangeColors.obj0DarkGrey;Colors.obj0Black= |
||||
OrangeColors.obj0Black;Colors.obj1White=OrangeColors.obj1White;Colors.obj1LightGrey=OrangeColors.obj1LightGrey;Colors.obj1DarkGrey=OrangeColors.obj1DarkGrey;Colors.obj1Black=OrangeColors.obj1Black;break;case 9:Colors.bgWhite=YellowColors.bgWhite;Colors.bgLightGrey=YellowColors.bgLightGrey;Colors.bgDarkGrey=YellowColors.bgDarkGrey;Colors.bgBlack=YellowColors.bgBlack;Colors.obj0White=YellowColors.obj0White;Colors.obj0LightGrey=YellowColors.obj0LightGrey;Colors.obj0DarkGrey=YellowColors.obj0DarkGrey; |
||||
Colors.obj0Black=YellowColors.obj0Black;Colors.obj1White=YellowColors.obj1White;Colors.obj1LightGrey=YellowColors.obj1LightGrey;Colors.obj1DarkGrey=YellowColors.obj1DarkGrey;Colors.obj1Black=YellowColors.obj1Black;break;case 10:Colors.bgWhite=BlueColors.bgWhite;Colors.bgLightGrey=BlueColors.bgLightGrey;Colors.bgDarkGrey=BlueColors.bgDarkGrey;Colors.bgBlack=BlueColors.bgBlack;Colors.obj0White=BlueColors.obj0White;Colors.obj0LightGrey=BlueColors.obj0LightGrey;Colors.obj0DarkGrey=BlueColors.obj0DarkGrey; |
||||
Colors.obj0Black=BlueColors.obj0Black;Colors.obj1White=BlueColors.obj1White;Colors.obj1LightGrey=BlueColors.obj1LightGrey;Colors.obj1DarkGrey=BlueColors.obj1DarkGrey;Colors.obj1Black=BlueColors.obj1Black;break;case 11:Colors.bgWhite=DarkBlueColors.bgWhite;Colors.bgLightGrey=DarkBlueColors.bgLightGrey;Colors.bgDarkGrey=DarkBlueColors.bgDarkGrey;Colors.bgBlack=DarkBlueColors.bgBlack;Colors.obj0White=DarkBlueColors.obj0White;Colors.obj0LightGrey=DarkBlueColors.obj0LightGrey;Colors.obj0DarkGrey=DarkBlueColors.obj0DarkGrey; |
||||
Colors.obj0Black=DarkBlueColors.obj0Black;Colors.obj1White=DarkBlueColors.obj1White;Colors.obj1LightGrey=DarkBlueColors.obj1LightGrey;Colors.obj1DarkGrey=DarkBlueColors.obj1DarkGrey;Colors.obj1Black=DarkBlueColors.obj1Black;break;case 12:Colors.bgWhite=GrayscaleColors.bgWhite,Colors.bgLightGrey=GrayscaleColors.bgLightGrey,Colors.bgDarkGrey=GrayscaleColors.bgDarkGrey,Colors.bgBlack=GrayscaleColors.bgBlack,Colors.obj0White=GrayscaleColors.obj0White,Colors.obj0LightGrey=GrayscaleColors.obj0LightGrey, |
||||
Colors.obj0DarkGrey=GrayscaleColors.obj0DarkGrey,Colors.obj0Black=GrayscaleColors.obj0Black,Colors.obj1White=GrayscaleColors.obj1White,Colors.obj1LightGrey=GrayscaleColors.obj1LightGrey,Colors.obj1DarkGrey=GrayscaleColors.obj1DarkGrey,Colors.obj1Black=GrayscaleColors.obj1Black}} |
||||
function setHashColorizationPalette(a){switch(a){case 136:Colors.bgWhite=Table00Entry08Colors.bgWhite;Colors.bgLightGrey=Table00Entry08Colors.bgLightGrey;Colors.bgDarkGrey=Table00Entry08Colors.bgDarkGrey;Colors.bgBlack=Table00Entry08Colors.bgBlack;Colors.obj0White=Table00Entry08Colors.obj0White;Colors.obj0LightGrey=Table00Entry08Colors.obj0LightGrey;Colors.obj0DarkGrey=Table00Entry08Colors.obj0DarkGrey;Colors.obj0Black=Table00Entry08Colors.obj0Black;Colors.obj1White=Table00Entry08Colors.obj1White; |
||||
Colors.obj1LightGrey=Table00Entry08Colors.obj1LightGrey;Colors.obj1DarkGrey=Table00Entry08Colors.obj1DarkGrey;Colors.obj1Black=Table00Entry08Colors.obj1Black;break;case 97:Colors.bgWhite=Table01Entry0BColors.bgWhite;Colors.bgLightGrey=Table01Entry0BColors.bgLightGrey;Colors.bgDarkGrey=Table01Entry0BColors.bgDarkGrey;Colors.bgBlack=Table01Entry0BColors.bgBlack;Colors.obj0White=Table01Entry0BColors.obj0White;Colors.obj0LightGrey=Table01Entry0BColors.obj0LightGrey;Colors.obj0DarkGrey=Table01Entry0BColors.obj0DarkGrey; |
||||
Colors.obj0Black=Table01Entry0BColors.obj0Black;Colors.obj1White=Table01Entry0BColors.obj1White;Colors.obj1LightGrey=Table01Entry0BColors.obj1LightGrey;Colors.obj1DarkGrey=Table01Entry0BColors.obj1DarkGrey;Colors.obj1Black=Table01Entry0BColors.obj1Black;break;case 20:Colors.bgWhite=Table01Entry10Colors.bgWhite;Colors.bgLightGrey=Table01Entry10Colors.bgLightGrey;Colors.bgDarkGrey=Table01Entry10Colors.bgDarkGrey;Colors.bgBlack=Table01Entry10Colors.bgBlack;Colors.obj0White=Table01Entry10Colors.obj0White; |
||||
Colors.obj0LightGrey=Table01Entry10Colors.obj0LightGrey;Colors.obj0DarkGrey=Table01Entry10Colors.obj0DarkGrey;Colors.obj0Black=Table01Entry10Colors.obj0Black;Colors.obj1White=Table01Entry10Colors.obj1White;Colors.obj1LightGrey=Table01Entry10Colors.obj1LightGrey;Colors.obj1DarkGrey=Table01Entry10Colors.obj1DarkGrey;Colors.obj1Black=Table01Entry10Colors.obj1Black;break;case 70:Colors.bgWhite=Table03Entry0AColors.bgWhite;Colors.bgLightGrey=Table03Entry0AColors.bgLightGrey;Colors.bgDarkGrey=Table03Entry0AColors.bgDarkGrey; |
||||
Colors.bgBlack=Table03Entry0AColors.bgBlack;Colors.obj0White=Table03Entry0AColors.obj0White;Colors.obj0LightGrey=Table03Entry0AColors.obj0LightGrey;Colors.obj0DarkGrey=Table03Entry0AColors.obj0DarkGrey;Colors.obj0Black=Table03Entry0AColors.obj0Black;Colors.obj1White=Table03Entry0AColors.obj1White;Colors.obj1LightGrey=Table03Entry0AColors.obj1LightGrey;Colors.obj1DarkGrey=Table03Entry0AColors.obj1DarkGrey;Colors.obj1Black=Table03Entry0AColors.obj1Black;break;case 89:case 198:Colors.bgWhite=Table05Entry00Colors.bgWhite; |
||||
Colors.bgLightGrey=Table05Entry00Colors.bgLightGrey;Colors.bgDarkGrey=Table05Entry00Colors.bgDarkGrey;Colors.bgBlack=Table05Entry00Colors.bgBlack;Colors.obj0White=Table05Entry00Colors.obj0White;Colors.obj0LightGrey=Table05Entry00Colors.obj0LightGrey;Colors.obj0DarkGrey=Table05Entry00Colors.obj0DarkGrey;Colors.obj0Black=Table05Entry00Colors.obj0Black;Colors.obj1White=Table05Entry00Colors.obj1White;Colors.obj1LightGrey=Table05Entry00Colors.obj1LightGrey;Colors.obj1DarkGrey=Table05Entry00Colors.obj1DarkGrey; |
||||
Colors.obj1Black=Table05Entry00Colors.obj1Black;break;case 134:case 168:Colors.bgWhite=Table05Entry01Colors.bgWhite;Colors.bgLightGrey=Table05Entry01Colors.bgLightGrey;Colors.bgDarkGrey=Table05Entry01Colors.bgDarkGrey;Colors.bgBlack=Table05Entry01Colors.bgBlack;Colors.obj0White=Table05Entry01Colors.obj0White;Colors.obj0LightGrey=Table05Entry01Colors.obj0LightGrey;Colors.obj0DarkGrey=Table05Entry01Colors.obj0DarkGrey;Colors.obj0Black=Table05Entry01Colors.obj0Black;Colors.obj1White=Table05Entry01Colors.obj1White; |
||||
Colors.obj1LightGrey=Table05Entry01Colors.obj1LightGrey;Colors.obj1DarkGrey=Table05Entry01Colors.obj1DarkGrey;Colors.obj1Black=Table05Entry01Colors.obj1Black;break;case 191:case 206:case 209:case 240:Colors.bgWhite=Table05Entry02Colors.bgWhite;Colors.bgLightGrey=Table05Entry02Colors.bgLightGrey;Colors.bgDarkGrey=Table05Entry02Colors.bgDarkGrey;Colors.bgBlack=Table05Entry02Colors.bgBlack;Colors.obj0White=Table05Entry02Colors.obj0White;Colors.obj0LightGrey=Table05Entry02Colors.obj0LightGrey;Colors.obj0DarkGrey= |
||||
Table05Entry02Colors.obj0DarkGrey;Colors.obj0Black=Table05Entry02Colors.obj0Black;Colors.obj1White=Table05Entry02Colors.obj1White;Colors.obj1LightGrey=Table05Entry02Colors.obj1LightGrey;Colors.obj1DarkGrey=Table05Entry02Colors.obj1DarkGrey;Colors.obj1Black=Table05Entry02Colors.obj1Black;break;case 39:case 73:case 92:case 179:Colors.bgWhite=Table05Entry08Colors.bgWhite;Colors.bgLightGrey=Table05Entry08Colors.bgLightGrey;Colors.bgDarkGrey=Table05Entry08Colors.bgDarkGrey;Colors.bgBlack=Table05Entry08Colors.bgBlack; |
||||
Colors.obj0White=Table05Entry08Colors.obj0White;Colors.obj0LightGrey=Table05Entry08Colors.obj0LightGrey;Colors.obj0DarkGrey=Table05Entry08Colors.obj0DarkGrey;Colors.obj0Black=Table05Entry08Colors.obj0Black;Colors.obj1White=Table05Entry08Colors.obj1White;Colors.obj1LightGrey=Table05Entry08Colors.obj1LightGrey;Colors.obj1DarkGrey=Table05Entry08Colors.obj1DarkGrey;Colors.obj1Black=Table05Entry08Colors.obj1Black;break;case 201:Colors.bgWhite=Table05Entry09Colors.bgWhite;Colors.bgLightGrey=Table05Entry09Colors.bgLightGrey; |
||||
Colors.bgDarkGrey=Table05Entry09Colors.bgDarkGrey;Colors.bgBlack=Table05Entry09Colors.bgBlack;Colors.obj0White=Table05Entry09Colors.obj0White;Colors.obj0LightGrey=Table05Entry09Colors.obj0LightGrey;Colors.obj0DarkGrey=Table05Entry09Colors.obj0DarkGrey;Colors.obj0Black=Table05Entry09Colors.obj0Black;Colors.obj1White=Table05Entry09Colors.obj1White;Colors.obj1LightGrey=Table05Entry09Colors.obj1LightGrey;Colors.obj1DarkGrey=Table05Entry09Colors.obj1DarkGrey;Colors.obj1Black=Table05Entry09Colors.obj1Black; |
||||
break;case 112:Colors.bgWhite=Table05Entry11Colors.bgWhite;Colors.bgLightGrey=Table05Entry11Colors.bgLightGrey;Colors.bgDarkGrey=Table05Entry11Colors.bgDarkGrey;Colors.bgBlack=Table05Entry11Colors.bgBlack;Colors.obj0White=Table05Entry11Colors.obj0White;Colors.obj0LightGrey=Table05Entry11Colors.obj0LightGrey;Colors.obj0DarkGrey=Table05Entry11Colors.obj0DarkGrey;Colors.obj0Black=Table05Entry11Colors.obj0Black;Colors.obj1White=Table05Entry11Colors.obj1White;Colors.obj1LightGrey=Table05Entry11Colors.obj1LightGrey; |
||||
Colors.obj1DarkGrey=Table05Entry11Colors.obj1DarkGrey;Colors.obj1Black=Table05Entry11Colors.obj1Black;break;case 70:Colors.bgWhite=Table05Entry14Colors.bgWhite;Colors.bgLightGrey=Table05Entry14Colors.bgLightGrey;Colors.bgDarkGrey=Table05Entry14Colors.bgDarkGrey;Colors.bgBlack=Table05Entry14Colors.bgBlack;Colors.obj0White=Table05Entry14Colors.obj0White;Colors.obj0LightGrey=Table05Entry14Colors.obj0LightGrey;Colors.obj0DarkGrey=Table05Entry14Colors.obj0DarkGrey;Colors.obj0Black=Table05Entry14Colors.obj0Black; |
||||
Colors.obj1White=Table05Entry14Colors.obj1White;Colors.obj1LightGrey=Table05Entry14Colors.obj1LightGrey;Colors.obj1DarkGrey=Table05Entry14Colors.obj1DarkGrey;Colors.obj1Black=Table05Entry14Colors.obj1Black;break;case 211:Colors.bgWhite=Table05Entry15Colors.bgWhite,Colors.bgLightGrey=Table05Entry15Colors.bgLightGrey,Colors.bgDarkGrey=Table05Entry15Colors.bgDarkGrey,Colors.bgBlack=Table05Entry15Colors.bgBlack,Colors.obj0White=Table05Entry15Colors.obj0White,Colors.obj0LightGrey=Table05Entry15Colors.obj0LightGrey, |
||||
Colors.obj0DarkGrey=Table05Entry15Colors.obj0DarkGrey,Colors.obj0Black=Table05Entry15Colors.obj0Black,Colors.obj1White=Table05Entry15Colors.obj1White,Colors.obj1LightGrey=Table05Entry15Colors.obj1LightGrey,Colors.obj1DarkGrey=Table05Entry15Colors.obj1DarkGrey,Colors.obj1Black=Table05Entry15Colors.obj1Black}}function concatenateBytes(a,b){return(a&255)<<8|b&255}function splitHighByte(a){return(a&65280)>>8}function splitLowByte(a){return a&255} |
||||
function rotateByteLeft(a){return u8Portable(a<<1|a>>7)}function rotateByteLeftThroughCarry(a){return u8Portable(a<<1|getCarryFlag$$1())}function rotateByteRight(a){return u8Portable(a>>1|a<<7)}function rotateByteRightThroughCarry(a){return u8Portable(a>>1|getCarryFlag$$1()<<7)}function setBitOnByte(a,b){return b|1<<a}function resetBitOnByte(a,b){return b&~(1<<a)}function checkBitOnByte(a,b){return 0!=(b&1<<a)} |
||||
var Palette=function(){function a(){}a.memoryLocationBackgroundPaletteIndex=65384;a.memoryLocationBackgroundPaletteData=65385;a.memoryLocationSpritePaletteIndex=65386;a.memoryLocationSpritePaletteData=65387;a.memoryLocationBackgroundPalette=65351;a.memoryLocationSpritePaletteOne=65352;a.memoryLocationSpritePaletteTwo=65353;return a}(); |
||||
function initializePalette(){Cpu.GBCEnabled?(eightBitStoreIntoGBMemory(65384,192),eightBitStoreIntoGBMemory(65385,255),eightBitStoreIntoGBMemory(65386,193),eightBitStoreIntoGBMemory(65387,13)):(eightBitStoreIntoGBMemory(65384,255),eightBitStoreIntoGBMemory(65385,255),eightBitStoreIntoGBMemory(65386,255),eightBitStoreIntoGBMemory(65387,255));Cpu.BootROMEnabled&&Cpu.GBCEnabled&&(eightBitStoreIntoGBMemory(65385,32),eightBitStoreIntoGBMemory(65387,138))} |
||||
function getMonochromeColorFromPalette(a,b,c){void 0===c&&(c=!1);var d=a;c||(d=eightBitLoadFromGBMemory(b)>>(a<<1)&3);a=242;switch(d){case 1:a=160;break;case 2:a=88;break;case 3:a=8}return a} |
||||
function getColorizedGbHexColorFromPalette(a,b){a=eightBitLoadFromGBMemory(b)>>2*a&3;if(b===Palette.memoryLocationSpritePaletteOne)switch(b=Colors.obj0White,a){case 1:b=Colors.obj0LightGrey;break;case 2:b=Colors.obj0DarkGrey;break;case 3:b=Colors.obj0Black}else if(b===Palette.memoryLocationSpritePaletteTwo)switch(b=Colors.obj1White,a){case 1:b=Colors.obj1LightGrey;break;case 2:b=Colors.obj1DarkGrey;break;case 3:b=Colors.obj1Black}else switch(b=Colors.bgWhite,a){case 1:b=Colors.bgLightGrey;break;case 2:b= |
||||
Colors.bgDarkGrey;break;case 3:b=Colors.bgBlack}return b}function writeColorPaletteToMemory(a,b){var c=Palette.memoryLocationSpritePaletteData;if(a===Palette.memoryLocationBackgroundPaletteData||a===c){var d=eightBitLoadFromGBMemory(a-1);d=resetBitOnByte(6,d);storePaletteByteInWasmMemory(d,b,a===c);incrementPaletteIndexIfSet(d,a-1)}}function incrementPaletteIndexIfSet(a,b){checkBitOnByte(7,a)&&(a=setBitOnByte(7,a+1),eightBitStoreIntoGBMemory(b,a))} |
||||
function getRgbColorFromPalette(a,b,c){b=8*a+2*b;a=loadPaletteByteFromWasmMemory(b+1,c);c=loadPaletteByteFromWasmMemory(b,c);return concatenateBytes(a,c)}function getColorComponentFromRgb(a,b){a*=5;return 8*((b&31<<a)>>a)}function loadPaletteByteFromWasmMemory(a,b){a&=63;b&&(a+=64);return load(GBC_PALETTE_LOCATION+a)}function storePaletteByteInWasmMemory(a,b,c){a&=63;c&&(a+=64);store(GBC_PALETTE_LOCATION+a,b)} |
||||
function addPriorityforPixel(a,b,c,d){void 0===c&&(c=0);void 0===d&&(d=!1);c&=3;d&&(c=setBitOnByte(2,c));store(BG_PRIORITY_MAP_LOCATION+getPixelStart(a,b),c)}function getPriorityforPixel(a,b){return load(BG_PRIORITY_MAP_LOCATION+getPixelStart(a,b))}function clearPriorityMap(){for(var a=0;144>a;++a)for(var b=0;160>b;++b)store(BG_PRIORITY_MAP_LOCATION+getPixelStart(b,a),0)}function getPixelStart(a,b){return 160*b+a} |
||||
var TileCache=function(){function a(){}a.tileId=-1;a.horizontalFlip=!1;a.nextXIndexToPerformCacheCheck=-1;return a}();function resetTileCache(){TileCache.tileId=-1;TileCache.nextXIndexToPerformCacheCheck=-1} |
||||
function drawPixelsFromLineOfTile(a,b,c,d,e,f,g,k,h,l,n,m,p,r){var w=0;b=getTileDataAddress(b,a);a=loadFromVramBank(b+2*f,c);c=loadFromVramBank(b+2*f+1,c);for(f=d;f<=e;++f)if(b=g+(f-d),b<h){var q=f;if(0>p||!checkBitOnByte(5,p))q=7-q;var u=0;checkBitOnByte(q,c)&&(u+=1,u<<=1);checkBitOnByte(q,a)&&(u+=1);if(Cpu.GBCEnabled&&(0<=p||0<=r)){q=0<=r;var v=p&7;q&&(v=r&7);var t=getRgbColorFromPalette(v,u,q);q=getColorComponentFromRgb(0,t);v=getColorComponentFromRgb(1,t);t=getColorComponentFromRgb(2,t)}else 0>= |
||||
m&&(m=Graphics.memoryLocationBackgroundPalette),n?v=q=t=getMonochromeColorFromPalette(u,m,n):(t=getColorizedGbHexColorFromPalette(u,m),q=getRedFromHexColor(t),v=getGreenFromHexColor(t),t=getBlueFromHexColor(t));var x=getTilePixelStart(b,k,h);store(l+x+0,q);store(l+x+1,v);store(l+x+2,t);q=!1;0<=p&&(q=checkBitOnByte(7,p));addPriorityforPixel(b,k,u,q);w++}return w}function getTilePixelStart(a,b,c){return 3*(b*c+a)} |
||||
function getTileDataAddress(a,b){a===Graphics.memoryLocationTileDataSelectZeroStart&&(b=checkBitOnByte(7,b)?b-128:b+128);return a+16*b}function isDutyCycleClockPositiveOrNegativeForWaveform(a,b){switch(a){case 1:return checkBitOnByte(b,129);case 2:return checkBitOnByte(b,135);case 3:return checkBitOnByte(b,126);default:return checkBitOnByte(b,1)}} |
||||
var Channel1=function(){function a(){}a.updateNRx0=function(b){var c=a.NRx0Negate;a.NRx0SweepPeriod=(b&112)>>4;a.NRx0Negate=checkBitOnByte(3,b);a.NRx0SweepShift=b&7;c&&!a.NRx0Negate&&a.sweepNegateShouldDisableChannelOnClear&&(a.isEnabled=!1)};a.updateNRx1=function(b){a.NRx1Duty=b>>6&3;a.NRx1LengthLoad=b&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==checkBitOnByte(3, |
||||
b)&&(a.volume=16-a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=checkBitOnByte(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled=b;b||(a.isEnabled=!1)};a.updateNRx3=function(b){a.NRx3FrequencyLSB=b;a.frequency=a.NRx4FrequencyMSB<<8|b};a.updateNRx4=function(b){var c=b&7;a.NRx4FrequencyMSB=c;a.frequency=c<<8|a.NRx3FrequencyLSB;c=1===(Sound.frameSequencer&1);var d=!a.NRx4LengthEnabled&&checkBitOnByte(6,b);!c&&0<a.lengthCounter&&d&&(--a.lengthCounter,checkBitOnByte(7,b)||0!== |
||||
a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=checkBitOnByte(6,b);checkBitOnByte(7,b)&&(a.trigger(),!c&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){store(getSaveStateMemoryOffset(0,a.saveStateSlot),a.cycleCounter);store(getSaveStateMemoryOffset(4,a.saveStateSlot),a.NRx0SweepPeriod);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(5,a.saveStateSlot),a.NRx0Negate);store(getSaveStateMemoryOffset(6,a.saveStateSlot),a.NRx0SweepShift); |
||||
store(getSaveStateMemoryOffset(7,a.saveStateSlot),a.NRx1Duty);store(getSaveStateMemoryOffset(9,a.saveStateSlot),a.NRx1LengthLoad);store(getSaveStateMemoryOffset(10,a.saveStateSlot),a.NRx2StartingVolume);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(11,a.saveStateSlot),a.NRx2EnvelopeAddMode);store(getSaveStateMemoryOffset(12,a.saveStateSlot),a.NRx2EnvelopePeriod);store(getSaveStateMemoryOffset(13,a.saveStateSlot),a.NRx3FrequencyLSB);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(14, |
||||
a.saveStateSlot),a.NRx4LengthEnabled);store(getSaveStateMemoryOffset(15,a.saveStateSlot),a.NRx4FrequencyMSB);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(16,a.saveStateSlot),a.isEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(17,a.saveStateSlot),a.isDacEnabled);store(getSaveStateMemoryOffset(18,a.saveStateSlot),a.frequency);store(getSaveStateMemoryOffset(22,a.saveStateSlot),a.frequencyTimer);store(getSaveStateMemoryOffset(26,a.saveStateSlot),a.envelopeCounter);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(30, |
||||
a.saveStateSlot),a.isEnvelopeAutomaticUpdating);store(getSaveStateMemoryOffset(31,a.saveStateSlot),a.lengthCounter);store(getSaveStateMemoryOffset(35,a.saveStateSlot),a.volume);store(getSaveStateMemoryOffset(39,a.saveStateSlot),a.dutyCycle);store(getSaveStateMemoryOffset(40,a.saveStateSlot),a.waveFormPositionOnDuty);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(41,a.saveStateSlot),a.isSweepEnabled);store(getSaveStateMemoryOffset(42,a.saveStateSlot),a.sweepCounter);store(getSaveStateMemoryOffset(46, |
||||
a.saveStateSlot),a.sweepShadowFrequency);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(49,a.saveStateSlot),a.sweepNegateShouldDisableChannelOnClear)};a.loadState=function(){a.cycleCounter=load(getSaveStateMemoryOffset(0,a.cycleCounter));a.NRx0SweepPeriod=load(getSaveStateMemoryOffset(4,a.saveStateSlot));a.NRx0Negate=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(5,a.saveStateSlot));a.NRx0SweepShift=load(getSaveStateMemoryOffset(6,a.saveStateSlot));a.NRx1Duty=load(getSaveStateMemoryOffset(7, |
||||
a.saveStateSlot));a.NRx1LengthLoad=load(getSaveStateMemoryOffset(9,a.saveStateSlot));a.NRx2StartingVolume=load(getSaveStateMemoryOffset(10,a.saveStateSlot));a.NRx2EnvelopeAddMode=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(11,a.saveStateSlot));a.NRx2EnvelopePeriod=load(getSaveStateMemoryOffset(12,a.saveStateSlot));a.NRx3FrequencyLSB=load(getSaveStateMemoryOffset(13,a.saveStateSlot));a.NRx4LengthEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(14,a.saveStateSlot)); |
||||
a.NRx4FrequencyMSB=load(getSaveStateMemoryOffset(15,a.saveStateSlot));a.isEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(16,a.saveStateSlot));a.isDacEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(17,a.saveStateSlot));a.frequency=load(getSaveStateMemoryOffset(18,a.saveStateSlot));a.frequencyTimer=load(getSaveStateMemoryOffset(22,a.saveStateSlot));a.envelopeCounter=load(getSaveStateMemoryOffset(26,a.saveStateSlot));a.isEnvelopeAutomaticUpdating=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(30, |
||||
a.saveStateSlot));a.lengthCounter=load(getSaveStateMemoryOffset(31,a.saveStateSlot));a.volume=load(getSaveStateMemoryOffset(35,a.saveStateSlot));a.dutyCycle=load(getSaveStateMemoryOffset(39,a.saveStateSlot));a.waveFormPositionOnDuty=load(getSaveStateMemoryOffset(40,a.saveStateSlot));a.isSweepEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(41,a.saveStateSlot));a.sweepCounter=load(getSaveStateMemoryOffset(42,a.saveStateSlot));a.sweepShadowFrequency=load(getSaveStateMemoryOffset(46, |
||||
a.saveStateSlot));a.sweepNegateShouldDisableChannelOnClear=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(49,a.saveStateSlot))};a.initialize=function(){eightBitStoreIntoGBMemory(a.memoryLocationNRx0,128);eightBitStoreIntoGBMemory(a.memoryLocationNRx1,191);eightBitStoreIntoGBMemory(a.memoryLocationNRx2,243);eightBitStoreIntoGBMemory(a.memoryLocationNRx3,193);eightBitStoreIntoGBMemory(a.memoryLocationNRx4,191);Cpu.BootROMEnabled&&(eightBitStoreIntoGBMemory(a.memoryLocationNRx1,63),eightBitStoreIntoGBMemory(a.memoryLocationNRx2, |
||||
0),eightBitStoreIntoGBMemory(a.memoryLocationNRx3,0),eightBitStoreIntoGBMemory(a.memoryLocationNRx4,184))};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.resetTimer=function(){var b=2048-a.frequency<<2;Cpu.GBCDoubleSpeed&&(b<<=2);a.frequencyTimer=b};a.getSample=function(b){var c=a.frequencyTimer;for(c-=b;0>=c;)b=abs(c),a.resetTimer(),c=a.frequencyTimer,c-=b,a.waveFormPositionOnDuty=a.waveFormPositionOnDuty+1&7;a.frequencyTimer=c;if(a.isEnabled&& |
||||
a.isDacEnabled)c=a.volume&15;else return 15;b=1;isDutyCycleClockPositiveOrNegativeForWaveform(a.NRx1Duty,a.waveFormPositionOnDuty)||(b=-b);return b*c+15};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.sweepShadowFrequency=a.frequency;a.sweepCounter=0===a.NRx0SweepPeriod?8:a.NRx0SweepPeriod;a.isSweepEnabled=0<a.NRx0SweepPeriod|| |
||||
0<a.NRx0SweepShift;a.sweepNegateShouldDisableChannelOnClear=!1;0<a.NRx0SweepShift&&didCalculatedSweepOverflow(calculateSweep())&&(a.isEnabled=!1);a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){b=a.cycleCounter+b;a.cycleCounter=b;return!(0<a.frequencyTimer-b)};a.updateSweep=function(){if(a.isEnabled&&a.isSweepEnabled){var b=a.sweepCounter-1;0>=b?0===a.NRx0SweepPeriod?a.sweepCounter=8:(a.sweepCounter=a.NRx0SweepPeriod,b=calculateSweep(),didCalculatedSweepOverflow(b)&&(a.isEnabled= |
||||
!1),0<a.NRx0SweepShift&&(a.setFrequency(b),didCalculatedSweepOverflow(calculateSweep())&&(a.isEnabled=!1))):a.sweepCounter=b}};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&(--b,0===b&&(a.isEnabled=!1));a.lengthCounter=b};a.updateEnvelope=function(){var b=a.envelopeCounter-1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var c=a.volume;c=a.NRx2EnvelopeAddMode?c+1:c-1;c&=15;15>c?a.volume=c:a.isEnvelopeAutomaticUpdating= |
||||
!1}a.envelopeCounter=b};a.setFrequency=function(b){a.sweepShadowFrequency=b;var c=b>>8&7;b&=255;var d=eightBitLoadFromGBMemory(a.memoryLocationNRx4)&248|c;eightBitStoreIntoGBMemory(a.memoryLocationNRx3,b);eightBitStoreIntoGBMemory(a.memoryLocationNRx4,d);a.NRx3FrequencyLSB=b;a.NRx4FrequencyMSB=c;a.frequency=a.NRx4FrequencyMSB<<8|a.NRx3FrequencyLSB};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65296;a.NRx0SweepPeriod=0;a.NRx0Negate=!1;a.NRx0SweepShift=0;a.memoryLocationNRx1=65297;a.NRx1Duty= |
||||
0;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65298;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65299;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65300;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.channelNumber=1;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.dutyCycle=0;a.waveFormPositionOnDuty=0;a.isSweepEnabled=!1;a.sweepCounter=0;a.sweepShadowFrequency= |
||||
0;a.sweepNegateShouldDisableChannelOnClear=!1;a.saveStateSlot=7;return a}();function calculateSweep(){var a=Channel1.sweepShadowFrequency,b=a>>Channel1.NRx0SweepShift;Channel1.NRx0Negate?(Channel1.sweepNegateShouldDisableChannelOnClear=!0,b=a-b):b=a+b;return b}function didCalculatedSweepOverflow(a){return 2047<a?!0:!1} |
||||
var Channel2=function(){function a(){}a.updateNRx1=function(b){a.NRx1Duty=b>>6&3;a.NRx1LengthLoad=b&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==checkBitOnByte(3,b)&&(a.volume=16-a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=checkBitOnByte(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled=b;b||(a.isEnabled=b)};a.updateNRx3= |
||||
function(b){a.NRx3FrequencyLSB=b;a.frequency=a.NRx4FrequencyMSB<<8|b};a.updateNRx4=function(b){var c=b&7;a.NRx4FrequencyMSB=c;a.frequency=c<<8|a.NRx3FrequencyLSB;c=1===(Sound.frameSequencer&1);var d=!a.NRx4LengthEnabled&&checkBitOnByte(6,b);!c&&0<a.lengthCounter&&d&&(--a.lengthCounter,checkBitOnByte(7,b)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=checkBitOnByte(6,b);checkBitOnByte(7,b)&&(a.trigger(),!c&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState= |
||||
function(){store(getSaveStateMemoryOffset(0,a.saveStateSlot),a.cycleCounter);store(getSaveStateMemoryOffset(7,a.saveStateSlot),a.NRx1Duty);store(getSaveStateMemoryOffset(8,a.saveStateSlot),a.NRx1LengthLoad);store(getSaveStateMemoryOffset(10,a.saveStateSlot),a.NRx2StartingVolume);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(11,a.saveStateSlot),a.NRx2EnvelopeAddMode);store(getSaveStateMemoryOffset(12,a.saveStateSlot),a.NRx2EnvelopePeriod);store(getSaveStateMemoryOffset(13,a.saveStateSlot), |
||||
a.NRx3FrequencyLSB);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(14,a.saveStateSlot),a.NRx4LengthEnabled);store(getSaveStateMemoryOffset(15,a.saveStateSlot),a.NRx4FrequencyMSB);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(16,a.saveStateSlot),a.isEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(17,a.saveStateSlot),a.isDacEnabled);store(getSaveStateMemoryOffset(18,a.saveStateSlot),a.frequency);store(getSaveStateMemoryOffset(22,a.saveStateSlot),a.frequencyTimer); |
||||
store(getSaveStateMemoryOffset(26,a.saveStateSlot),a.envelopeCounter);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(30,a.saveStateSlot),a.isEnvelopeAutomaticUpdating);store(getSaveStateMemoryOffset(31,a.saveStateSlot),a.lengthCounter);store(getSaveStateMemoryOffset(35,a.saveStateSlot),a.volume);store(getSaveStateMemoryOffset(39,a.saveStateSlot),a.dutyCycle);store(getSaveStateMemoryOffset(40,a.saveStateSlot),a.waveFormPositionOnDuty)};a.loadState=function(){a.cycleCounter=load(getSaveStateMemoryOffset(0, |
||||
a.cycleCounter));a.NRx1Duty=load(getSaveStateMemoryOffset(7,a.saveStateSlot));a.NRx1LengthLoad=load(getSaveStateMemoryOffset(8,a.saveStateSlot));a.NRx2StartingVolume=load(getSaveStateMemoryOffset(10,a.saveStateSlot));a.NRx2EnvelopeAddMode=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(11,a.saveStateSlot));a.NRx2EnvelopePeriod=load(getSaveStateMemoryOffset(12,a.saveStateSlot));a.NRx3FrequencyLSB=load(getSaveStateMemoryOffset(13,a.saveStateSlot));a.NRx4LengthEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(14, |
||||
a.saveStateSlot));a.NRx4FrequencyMSB=load(getSaveStateMemoryOffset(15,a.saveStateSlot));a.isEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(16,a.saveStateSlot));a.isDacEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(17,a.saveStateSlot));a.frequency=load(getSaveStateMemoryOffset(18,a.saveStateSlot));a.frequencyTimer=load(getSaveStateMemoryOffset(22,a.saveStateSlot));a.envelopeCounter=load(getSaveStateMemoryOffset(26,a.saveStateSlot));a.isEnvelopeAutomaticUpdating= |
||||
loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(30,a.saveStateSlot));a.lengthCounter=load(getSaveStateMemoryOffset(31,a.saveStateSlot));a.volume=load(getSaveStateMemoryOffset(35,a.saveStateSlot));a.dutyCycle=load(getSaveStateMemoryOffset(39,a.saveStateSlot));a.waveFormPositionOnDuty=load(getSaveStateMemoryOffset(40,a.saveStateSlot))};a.initialize=function(){eightBitStoreIntoGBMemory(a.memoryLocationNRx1-1,255);eightBitStoreIntoGBMemory(a.memoryLocationNRx1,63);eightBitStoreIntoGBMemory(a.memoryLocationNRx2, |
||||
0);eightBitStoreIntoGBMemory(a.memoryLocationNRx3,0);eightBitStoreIntoGBMemory(a.memoryLocationNRx4,184)};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.resetTimer=function(){a.frequencyTimer=2048-a.frequency<<2<<Cpu.GBCDoubleSpeed};a.getSample=function(b){var c=a.frequencyTimer;for(c-=b;0>=c;)b=abs(c),a.resetTimer(),c=a.frequencyTimer,c-=b,a.waveFormPositionOnDuty=a.waveFormPositionOnDuty+1&7;a.frequencyTimer=c;if(a.isEnabled&&a.isDacEnabled)c= |
||||
a.volume&15;else return 15;b=1;isDutyCycleClockPositiveOrNegativeForWaveform(a.NRx1Duty,a.waveFormPositionOnDuty)||(b=-b);return b*c+15};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){b=a.cycleCounter+b;a.cycleCounter=b;return!(0<a.frequencyTimer-b)}; |
||||
a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.updateEnvelope=function(){var b=a.envelopeCounter-1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var c=a.volume;c=a.NRx2EnvelopeAddMode?c+1:c-1;c&=15;15>c?a.volume=c:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter=b};a.setFrequency=function(b){var c=b>>8;b&=255;var d=eightBitLoadFromGBMemory(a.memoryLocationNRx4)& |
||||
248|c;eightBitStoreIntoGBMemory(a.memoryLocationNRx3,b);eightBitStoreIntoGBMemory(a.memoryLocationNRx4,d);a.NRx3FrequencyLSB=b;a.NRx4FrequencyMSB=c;a.frequency=c<<8|b};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65301;a.memoryLocationNRx1=65302;a.NRx1Duty=0;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65303;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65304;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65305;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB= |
||||
0;a.channelNumber=2;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.dutyCycle=0;a.waveFormPositionOnDuty=0;a.saveStateSlot=8;return a}(),Channel3=function(){function a(){}a.updateNRx0=function(b){b=checkBitOnByte(7,b);!a.isDacEnabled&&b&&(a.sampleBuffer=0);a.isDacEnabled=b;b||(a.isEnabled=b)};a.updateNRx1=function(b){a.NRx1LengthLoad=b;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.NRx2VolumeCode= |
||||
b>>5&15};a.updateNRx3=function(b){a.NRx3FrequencyLSB=b;a.frequency=a.NRx4FrequencyMSB<<8|b};a.updateNRx4=function(b){var c=b&7;a.NRx4FrequencyMSB=c;a.frequency=c<<8|a.NRx3FrequencyLSB;c=1===(Sound.frameSequencer&1);if(!c){var d=!a.NRx4LengthEnabled&&checkBitOnByte(6,b);0<a.lengthCounter&&d&&(--a.lengthCounter,checkBitOnByte(7,b)||0!==a.lengthCounter||(a.isEnabled=!1))}a.NRx4LengthEnabled=checkBitOnByte(6,b);checkBitOnByte(7,b)&&(a.trigger(),!c&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&& |
||||
--a.lengthCounter)};a.saveState=function(){store(getSaveStateMemoryOffset(0,a.saveStateSlot),a.cycleCounter);store(getSaveStateMemoryOffset(8,a.saveStateSlot),a.NRx1LengthLoad);store(getSaveStateMemoryOffset(10,a.saveStateSlot),a.NRx2VolumeCode);store(getSaveStateMemoryOffset(12,a.saveStateSlot),a.NRx3FrequencyLSB);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(13,a.saveStateSlot),a.NRx4LengthEnabled);store(getSaveStateMemoryOffset(14,a.saveStateSlot),a.NRx4FrequencyMSB);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(15, |
||||
a.saveStateSlot),a.isEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(16,a.saveStateSlot),a.isDacEnabled);store(getSaveStateMemoryOffset(17,a.saveStateSlot),a.frequency);store(getSaveStateMemoryOffset(21,a.saveStateSlot),a.frequencyTimer);store(getSaveStateMemoryOffset(25,a.saveStateSlot),a.lengthCounter);store(getSaveStateMemoryOffset(33,a.saveStateSlot),a.waveTablePosition);store(getSaveStateMemoryOffset(37,a.saveStateSlot),a.volumeCode);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(38, |
||||
a.saveStateSlot),a.volumeCodeChanged);store(getSaveStateMemoryOffset(39,a.saveStateSlot),a.sampleBuffer)};a.loadState=function(){a.cycleCounter=load(getSaveStateMemoryOffset(0,a.cycleCounter));a.NRx1LengthLoad=load(getSaveStateMemoryOffset(8,a.saveStateSlot));a.NRx2VolumeCode=load(getSaveStateMemoryOffset(10,a.saveStateSlot));a.NRx3FrequencyLSB=load(getSaveStateMemoryOffset(12,a.saveStateSlot));a.NRx4LengthEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(13,a.saveStateSlot));a.NRx4FrequencyMSB= |
||||
load(getSaveStateMemoryOffset(14,a.saveStateSlot));a.isEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(15,a.saveStateSlot));a.isDacEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(16,a.saveStateSlot));a.frequency=load(getSaveStateMemoryOffset(17,a.saveStateSlot));a.frequencyTimer=load(getSaveStateMemoryOffset(21,a.saveStateSlot));a.lengthCounter=load(getSaveStateMemoryOffset(25,a.saveStateSlot));a.waveTablePosition=load(getSaveStateMemoryOffset(33,a.saveStateSlot)); |
||||
a.volumeCode=load(getSaveStateMemoryOffset(37,a.saveStateSlot));a.volumeCodeChanged=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(38,a.saveStateSlot));a.sampleBuffer=load(getSaveStateMemoryOffset(39,a.saveStateSlot))};a.handleWaveRamRead=function(){return readCurrentSampleByteFromWaveRam()};a.handleWaveRamWrite=function(b){var c=i32Portable(a.waveTablePosition>>1);eightBitStoreIntoGBMemory(a.memoryLocationWaveTable+c,b)};a.initialize=function(){eightBitStoreIntoGBMemory(a.memoryLocationNRx0, |
||||
127);eightBitStoreIntoGBMemory(a.memoryLocationNRx1,255);eightBitStoreIntoGBMemory(a.memoryLocationNRx2,159);eightBitStoreIntoGBMemory(a.memoryLocationNRx3,0);eightBitStoreIntoGBMemory(a.memoryLocationNRx4,184);a.volumeCodeChanged=!0};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.resetTimer=function(){a.frequencyTimer=2048-a.frequency<<1<<Cpu.GBCDoubleSpeed};a.getSample=function(b){if(!a.isEnabled||!a.isDacEnabled)return 15;var c=a.volumeCode; |
||||
a.volumeCodeChanged&&(c=eightBitLoadFromGBMemory(a.memoryLocationNRx2),c=c>>5&15,a.volumeCode=c,a.volumeCodeChanged=!1);var d=getSampleFromSampleBufferForWaveTablePosition(),e=0;switch(c){case 0:d>>=4;break;case 1:e=1;break;case 2:d>>=1;e=2;break;default:d>>=2,e=4}d=(0<e?d/e:0)+15;c=a.frequencyTimer;for(c-=b;0>=c;)b=abs(c),a.resetTimer(),c=a.frequencyTimer,c-=b,advanceWavePositionAndSampleBuffer();a.frequencyTimer=c;return d};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter= |
||||
a.MAX_LENGTH);a.resetTimer();a.frequencyTimer+=6;a.waveTablePosition=0;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){a.cycleCounter+=b;return!(!a.volumeCodeChanged&&0<a.frequencyTimer-a.cycleCounter)};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.cycleCounter=0;a.MAX_LENGTH=256;a.memoryLocationNRx0=65306;a.memoryLocationNRx1=65307;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65308;a.NRx2VolumeCode=0;a.memoryLocationNRx3= |
||||
65309;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65310;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.memoryLocationWaveTable=65328;a.channelNumber=3;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.lengthCounter=0;a.waveTablePosition=0;a.volumeCode=0;a.volumeCodeChanged=!1;a.sampleBuffer=0;a.saveStateSlot=9;return a}(); |
||||
function advanceWavePositionAndSampleBuffer(){var a=Channel3.waveTablePosition;for(a+=1;32<=a;)a-=32;Channel3.waveTablePosition=a;Channel3.sampleBuffer=readCurrentSampleByteFromWaveRam()}function readCurrentSampleByteFromWaveRam(){var a=i32Portable(Channel3.waveTablePosition>>1);return eightBitLoadFromGBMemory(Channel3.memoryLocationWaveTable+a)}function getSampleFromSampleBufferForWaveTablePosition(){var a=Channel3.sampleBuffer;a>>=(0===(Channel3.waveTablePosition&1))<<2;return a&15} |
||||
var Channel4=function(){function a(){}a.updateNRx1=function(b){a.NRx1LengthLoad=b&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==checkBitOnByte(3,b)&&(a.volume=16-a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=checkBitOnByte(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled=b;b||(a.isEnabled=b)};a.updateNRx3=function(b){var c= |
||||
b&7;a.NRx3ClockShift=b>>4;a.NRx3WidthMode=checkBitOnByte(3,b);a.NRx3DivisorCode=c;c<<=1;1>c&&(c=1);a.divisor=c<<3};a.updateNRx4=function(b){var c=1===(Sound.frameSequencer&1),d=!a.NRx4LengthEnabled&&checkBitOnByte(6,b);!c&&0<a.lengthCounter&&d&&(--a.lengthCounter,checkBitOnByte(7,b)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=checkBitOnByte(6,b);checkBitOnByte(7,b)&&(a.trigger(),!c&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){store(getSaveStateMemoryOffset(0, |
||||
a.saveStateSlot),a.cycleCounter);store(getSaveStateMemoryOffset(4,a.saveStateSlot),a.NRx1LengthLoad);store(getSaveStateMemoryOffset(6,a.saveStateSlot),a.NRx2StartingVolume);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(7,a.saveStateSlot),a.NRx2EnvelopeAddMode);store(getSaveStateMemoryOffset(8,a.saveStateSlot),a.NRx2EnvelopePeriod);store(getSaveStateMemoryOffset(9,a.saveStateSlot),a.NRx3ClockShift);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(10,a.saveStateSlot),a.NRx3WidthMode); |
||||
store(getSaveStateMemoryOffset(11,a.saveStateSlot),a.NRx3DivisorCode);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(13,a.saveStateSlot),a.NRx4LengthEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(15,a.saveStateSlot),a.isEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(16,a.saveStateSlot),a.isDacEnabled);store(getSaveStateMemoryOffset(21,a.saveStateSlot),a.frequencyTimer);store(getSaveStateMemoryOffset(25,a.saveStateSlot),a.envelopeCounter);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(29, |
||||
a.saveStateSlot),a.isEnvelopeAutomaticUpdating);store(getSaveStateMemoryOffset(30,a.saveStateSlot),a.lengthCounter);store(getSaveStateMemoryOffset(34,a.saveStateSlot),a.volume);store(getSaveStateMemoryOffset(38,a.saveStateSlot),a.linearFeedbackShiftRegister)};a.loadState=function(){a.cycleCounter=load(getSaveStateMemoryOffset(0,a.cycleCounter));a.NRx1LengthLoad=load(getSaveStateMemoryOffset(4,a.saveStateSlot));a.NRx2StartingVolume=load(getSaveStateMemoryOffset(6,a.saveStateSlot));a.NRx2EnvelopeAddMode= |
||||
loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(7,a.saveStateSlot));a.NRx2EnvelopePeriod=load(getSaveStateMemoryOffset(8,a.saveStateSlot));a.NRx3ClockShift=load(getSaveStateMemoryOffset(9,a.saveStateSlot));a.NRx3WidthMode=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(10,a.saveStateSlot));a.NRx3DivisorCode=load(getSaveStateMemoryOffset(11,a.saveStateSlot));a.NRx4LengthEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(13,a.saveStateSlot));a.isEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(15, |
||||
a.saveStateSlot));a.isDacEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(16,a.saveStateSlot));a.frequencyTimer=load(getSaveStateMemoryOffset(21,a.saveStateSlot));a.envelopeCounter=load(getSaveStateMemoryOffset(25,a.saveStateSlot));a.isEnvelopeAutomaticUpdating=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(29,a.saveStateSlot));a.lengthCounter=load(getSaveStateMemoryOffset(30,a.saveStateSlot));a.volume=load(getSaveStateMemoryOffset(34,a.saveStateSlot));a.linearFeedbackShiftRegister= |
||||
load(getSaveStateMemoryOffset(38,a.saveStateSlot))};a.initialize=function(){eightBitStoreIntoGBMemory(a.memoryLocationNRx1-1,255);eightBitStoreIntoGBMemory(a.memoryLocationNRx1,255);eightBitStoreIntoGBMemory(a.memoryLocationNRx2,0);eightBitStoreIntoGBMemory(a.memoryLocationNRx3,0);eightBitStoreIntoGBMemory(a.memoryLocationNRx4,191)};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.getSample=function(b){var c=a.frequencyTimer;c-=b;if(0>=c){b=abs(c); |
||||
c=a.getNoiseChannelFrequencyPeriod();c-=b;b=a.linearFeedbackShiftRegister;var d=b&1^b>>1&1;b=b>>1|d<<14;a.NRx3WidthMode&&(b=b&-65|d<<6);a.linearFeedbackShiftRegister=b}0>c&&(c=0);a.frequencyTimer=c;if(a.isEnabled&&a.isDacEnabled)c=a.volume&15;else return 15;b=checkBitOnByte(0,a.linearFeedbackShiftRegister)?-1:1;return b*c+15};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.frequencyTimer=a.getNoiseChannelFrequencyPeriod();a.envelopeCounter=0===a.NRx2EnvelopePeriod? |
||||
8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.linearFeedbackShiftRegister=32767;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){a.cycleCounter+=b;return!(0<a.frequencyTimer-a.cycleCounter)};a.getNoiseChannelFrequencyPeriod=function(){return a.divisor<<a.NRx3ClockShift<<Cpu.GBCDoubleSpeed};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.updateEnvelope=function(){var b= |
||||
a.envelopeCounter-1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var c=a.volume;c=a.NRx2EnvelopeAddMode?c+1:c-1;c&=15;15>c?a.volume=c:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter=b};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65311;a.memoryLocationNRx1=65312;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65313;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65314;a.NRx3ClockShift=0; |
||||
a.NRx3WidthMode=!1;a.NRx3DivisorCode=0;a.memoryLocationNRx4=65315;a.NRx4LengthEnabled=!1;a.channelNumber=4;a.isEnabled=!1;a.isDacEnabled=!1;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.divisor=0;a.linearFeedbackShiftRegister=0;a.saveStateSlot=10;return a}(),SoundAccumulator=function(){function a(){}a.channel1Sample=15;a.channel2Sample=15;a.channel3Sample=15;a.channel4Sample=15;a.channel1DacEnabled=!1;a.channel2DacEnabled=!1;a.channel3DacEnabled= |
||||
!1;a.channel4DacEnabled=!1;a.leftChannelSampleUnsignedByte=127;a.rightChannelSampleUnsignedByte=127;a.mixerVolumeChanged=!1;a.mixerEnabledChanged=!1;a.needToRemixSamples=!1;return a}(); |
||||
function initializeSoundAccumulator(){SoundAccumulator.channel1Sample=15;SoundAccumulator.channel2Sample=15;SoundAccumulator.channel3Sample=15;SoundAccumulator.channel4Sample=15;SoundAccumulator.channel1DacEnabled=!1;SoundAccumulator.channel2DacEnabled=!1;SoundAccumulator.channel3DacEnabled=!1;SoundAccumulator.channel4DacEnabled=!1;SoundAccumulator.leftChannelSampleUnsignedByte=127;SoundAccumulator.rightChannelSampleUnsignedByte=127;SoundAccumulator.mixerVolumeChanged=!0;SoundAccumulator.mixerEnabledChanged= |
||||
!0;SoundAccumulator.needToRemixSamples=!1} |
||||
function accumulateSound(a){var b=Channel1.willChannelUpdate(a)||didChannelDacChange(Channel1.channelNumber),c=Channel2.willChannelUpdate(a)||didChannelDacChange(Channel2.channelNumber),d=Channel3.willChannelUpdate(a)||didChannelDacChange(Channel3.channelNumber),e=Channel4.willChannelUpdate(a)||didChannelDacChange(Channel4.channelNumber);b&&(SoundAccumulator.channel1Sample=Channel1.getSampleFromCycleCounter());c&&(SoundAccumulator.channel2Sample=Channel2.getSampleFromCycleCounter());d&&(SoundAccumulator.channel3Sample= |
||||
Channel3.getSampleFromCycleCounter());e&&(SoundAccumulator.channel4Sample=Channel4.getSampleFromCycleCounter());if(b||c||d||e)SoundAccumulator.needToRemixSamples=!0;b=Sound.downSampleCycleCounter;b+=a;a=Sound.maxDownSampleCycles();b>=a&&(b-=a,SoundAccumulator.needToRemixSamples||SoundAccumulator.mixerVolumeChanged||SoundAccumulator.mixerEnabledChanged?mixChannelSamples(SoundAccumulator.channel1Sample,SoundAccumulator.channel2Sample,SoundAccumulator.channel3Sample,SoundAccumulator.channel4Sample): |
||||
Sound.downSampleCycleCounter=b,setLeftAndRightOutputForAudioQueue(SoundAccumulator.leftChannelSampleUnsignedByte+1,SoundAccumulator.rightChannelSampleUnsignedByte+1,AUDIO_BUFFER_LOCATION),a=Sound.audioQueueIndex+1,c=i32Portable(Sound.wasmBoyMemoryMaxBufferSize>>1)-1,a>=c&&--a,Sound.audioQueueIndex=a);Sound.downSampleCycleCounter=b} |
||||
function didChannelDacChange(a){switch(a){case Channel1.channelNumber:a=Channel1.isDacEnabled;var b=SoundAccumulator.channel1DacEnabled!==a;SoundAccumulator.channel1DacEnabled=a;return b;case Channel2.channelNumber:return a=Channel2.isDacEnabled,b=SoundAccumulator.channel2DacEnabled!==a,SoundAccumulator.channel2DacEnabled=a,b;case Channel3.channelNumber:return a=Channel3.isDacEnabled,b=SoundAccumulator.channel3DacEnabled!==a,SoundAccumulator.channel3DacEnabled=a,b;case Channel4.channelNumber:return a= |
||||
Channel4.isDacEnabled,b=SoundAccumulator.channel4DacEnabled!==a,SoundAccumulator.channel4DacEnabled=a,b}return!1} |
||||
var Sound=function(){function a(){}a.batchProcessCycles=function(){return 87<<Cpu.GBCDoubleSpeed};a.updateNR50=function(b){a.NR50LeftMixerVolume=b>>4&7;a.NR50RightMixerVolume=b&7};a.updateNR51=function(b){a.NR51IsChannel4EnabledOnLeftOutput=checkBitOnByte(7,b);a.NR51IsChannel3EnabledOnLeftOutput=checkBitOnByte(6,b);a.NR51IsChannel2EnabledOnLeftOutput=checkBitOnByte(5,b);a.NR51IsChannel1EnabledOnLeftOutput=checkBitOnByte(4,b);a.NR51IsChannel4EnabledOnRightOutput=checkBitOnByte(3,b);a.NR51IsChannel3EnabledOnRightOutput= |
||||
checkBitOnByte(2,b);a.NR51IsChannel2EnabledOnRightOutput=checkBitOnByte(1,b);a.NR51IsChannel1EnabledOnRightOutput=checkBitOnByte(0,b)};a.updateNR52=function(b){a.NR52IsSoundEnabled=checkBitOnByte(7,b)};a.maxFrameSequenceCycles=function(){return 8192<<Cpu.GBCDoubleSpeed};a.maxDownSampleCycles=function(){return Cpu.CLOCK_SPEED()/a.sampleRate};a.saveState=function(){store(getSaveStateMemoryOffset(0,a.saveStateSlot),a.NR50LeftMixerVolume);store(getSaveStateMemoryOffset(4,a.saveStateSlot),a.NR50RightMixerVolume); |
||||
storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(8,a.saveStateSlot),a.NR51IsChannel1EnabledOnLeftOutput);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(9,a.saveStateSlot),a.NR51IsChannel2EnabledOnLeftOutput);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(10,a.saveStateSlot),a.NR51IsChannel3EnabledOnLeftOutput);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(11,a.saveStateSlot),a.NR51IsChannel4EnabledOnLeftOutput);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(12, |
||||
a.saveStateSlot),a.NR51IsChannel1EnabledOnRightOutput);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(13,a.saveStateSlot),a.NR51IsChannel2EnabledOnRightOutput);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(14,a.saveStateSlot),a.NR51IsChannel3EnabledOnRightOutput);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(15,a.saveStateSlot),a.NR51IsChannel4EnabledOnRightOutput);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(16,a.saveStateSlot),a.NR52IsSoundEnabled); |
||||
store(getSaveStateMemoryOffset(17,a.saveStateSlot),a.frameSequenceCycleCounter);store(getSaveStateMemoryOffset(22,a.saveStateSlot),a.frameSequencer);store(getSaveStateMemoryOffset(23,a.saveStateSlot),a.downSampleCycleCounter);store(getSaveStateMemoryOffset(24,a.saveStateSlot),SoundAccumulator.channel1Sample);store(getSaveStateMemoryOffset(25,a.saveStateSlot),SoundAccumulator.channel2Sample);store(getSaveStateMemoryOffset(26,a.saveStateSlot),SoundAccumulator.channel3Sample);store(getSaveStateMemoryOffset(27, |
||||
a.saveStateSlot),SoundAccumulator.channel4Sample);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(28,a.saveStateSlot),SoundAccumulator.channel1DacEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(29,a.saveStateSlot),SoundAccumulator.channel2DacEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(30,a.saveStateSlot),SoundAccumulator.channel3DacEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(31,a.saveStateSlot),SoundAccumulator.channel4DacEnabled); |
||||
store(getSaveStateMemoryOffset(32,a.saveStateSlot),SoundAccumulator.leftChannelSampleUnsignedByte);store(getSaveStateMemoryOffset(33,a.saveStateSlot),SoundAccumulator.rightChannelSampleUnsignedByte);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(34,a.saveStateSlot),SoundAccumulator.mixerVolumeChanged);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(35,a.saveStateSlot),SoundAccumulator.mixerEnabledChanged)};a.loadState=function(){a.NR50LeftMixerVolume=load(getSaveStateMemoryOffset(0, |
||||
a.saveStateSlot));a.NR50RightMixerVolume=load(getSaveStateMemoryOffset(4,a.saveStateSlot));a.NR51IsChannel1EnabledOnLeftOutput=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(8,a.saveStateSlot));a.NR51IsChannel2EnabledOnLeftOutput=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(9,a.saveStateSlot));a.NR51IsChannel3EnabledOnLeftOutput=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(10,a.saveStateSlot));a.NR51IsChannel4EnabledOnLeftOutput=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(11, |
||||
a.saveStateSlot));a.NR51IsChannel1EnabledOnRightOutput=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(12,a.saveStateSlot));a.NR51IsChannel2EnabledOnRightOutput=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(13,a.saveStateSlot));a.NR51IsChannel3EnabledOnRightOutput=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(14,a.saveStateSlot));a.NR51IsChannel4EnabledOnRightOutput=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(15,a.saveStateSlot));a.NR52IsSoundEnabled= |
||||
loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(16,a.saveStateSlot));a.frameSequenceCycleCounter=load(getSaveStateMemoryOffset(17,a.saveStateSlot));a.frameSequencer=load(getSaveStateMemoryOffset(22,a.saveStateSlot));a.downSampleCycleCounter=load(getSaveStateMemoryOffset(23,a.saveStateSlot));SoundAccumulator.channel1Sample=load(getSaveStateMemoryOffset(24,a.saveStateSlot));SoundAccumulator.channel2Sample=load(getSaveStateMemoryOffset(25,a.saveStateSlot));SoundAccumulator.channel3Sample= |
||||
load(getSaveStateMemoryOffset(26,a.saveStateSlot));SoundAccumulator.channel4Sample=load(getSaveStateMemoryOffset(27,a.saveStateSlot));SoundAccumulator.channel1DacEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(28,a.saveStateSlot));SoundAccumulator.channel2DacEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(29,a.saveStateSlot));SoundAccumulator.channel3DacEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(30,a.saveStateSlot));SoundAccumulator.channel4DacEnabled= |
||||
loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(31,a.saveStateSlot));SoundAccumulator.leftChannelSampleUnsignedByte=load(getSaveStateMemoryOffset(32,a.saveStateSlot));SoundAccumulator.rightChannelSampleUnsignedByte=load(getSaveStateMemoryOffset(33,a.saveStateSlot));SoundAccumulator.mixerVolumeChanged=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(34,a.saveStateSlot));SoundAccumulator.mixerEnabledChanged=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(35,a.saveStateSlot)); |
||||
clearAudioBuffer()};a.currentCycles=0;a.memoryLocationNR50=65316;a.NR50LeftMixerVolume=0;a.NR50RightMixerVolume=0;a.memoryLocationNR51=65317;a.NR51IsChannel1EnabledOnLeftOutput=!0;a.NR51IsChannel2EnabledOnLeftOutput=!0;a.NR51IsChannel3EnabledOnLeftOutput=!0;a.NR51IsChannel4EnabledOnLeftOutput=!0;a.NR51IsChannel1EnabledOnRightOutput=!0;a.NR51IsChannel2EnabledOnRightOutput=!0;a.NR51IsChannel3EnabledOnRightOutput=!0;a.NR51IsChannel4EnabledOnRightOutput=!0;a.memoryLocationNR52=65318;a.NR52IsSoundEnabled= |
||||
!0;a.memoryLocationChannel3LoadRegisterStart=65328;a.frameSequenceCycleCounter=0;a.frameSequencer=0;a.downSampleCycleCounter=0;a.sampleRate=44100;a.audioQueueIndex=0;a.wasmBoyMemoryMaxBufferSize=131072;a.saveStateSlot=6;return a}(); |
||||
function initializeSound(){Sound.currentCycles=0;Sound.NR50LeftMixerVolume=0;Sound.NR50RightMixerVolume=0;Sound.NR51IsChannel1EnabledOnLeftOutput=!0;Sound.NR51IsChannel2EnabledOnLeftOutput=!0;Sound.NR51IsChannel3EnabledOnLeftOutput=!0;Sound.NR51IsChannel4EnabledOnLeftOutput=!0;Sound.NR51IsChannel1EnabledOnRightOutput=!0;Sound.NR51IsChannel2EnabledOnRightOutput=!0;Sound.NR51IsChannel3EnabledOnRightOutput=!0;Sound.NR51IsChannel4EnabledOnRightOutput=!0;Sound.NR52IsSoundEnabled=!0;Sound.frameSequenceCycleCounter= |
||||
0;Sound.downSampleCycleCounter=0;Sound.frameSequencer=0;Sound.audioQueueIndex=0;Channel1.initialize();Channel2.initialize();Channel3.initialize();Channel4.initialize();eightBitStoreIntoGBMemory(Sound.memoryLocationNR50,119);Sound.updateNR50(119);eightBitStoreIntoGBMemory(Sound.memoryLocationNR51,243);Sound.updateNR51(243);eightBitStoreIntoGBMemory(Sound.memoryLocationNR52,241);Sound.updateNR52(241);Cpu.BootROMEnabled&&(eightBitStoreIntoGBMemory(Sound.memoryLocationNR50,0),Sound.updateNR50(0),eightBitStoreIntoGBMemory(Sound.memoryLocationNR51, |
||||
0),Sound.updateNR51(0),eightBitStoreIntoGBMemory(Sound.memoryLocationNR52,112),Sound.updateNR52(112));initializeSoundAccumulator()}function batchProcessAudio(){for(var a=Sound.batchProcessCycles(),b=Sound.currentCycles;b>=a;)updateSound(a),b-=a;Sound.currentCycles=b}function updateSound(a){var b=updateFrameSequencer(a);Config.audioAccumulateSamples&&!b?accumulateSound(a):calculateSound(a)}function getNumberOfSamplesInAudioBuffer(){return Sound.audioQueueIndex} |
||||
function clearAudioBuffer(){Sound.audioQueueIndex=0} |
||||
function calculateSound(a){var b=i32Portable(Channel1.getSample(a)),c=i32Portable(Channel2.getSample(a)),d=i32Portable(Channel3.getSample(a)),e=i32Portable(Channel4.getSample(a));SoundAccumulator.channel1Sample=b;SoundAccumulator.channel2Sample=c;SoundAccumulator.channel3Sample=d;SoundAccumulator.channel4Sample=e;a=Sound.downSampleCycleCounter+a;if(a>=Sound.maxDownSampleCycles()){a-=Sound.maxDownSampleCycles();var f=mixChannelSamples(b,c,d,e),g=splitHighByte(f);f=splitLowByte(f);setLeftAndRightOutputForAudioQueue(g+ |
||||
1,f+1,AUDIO_BUFFER_LOCATION);Config.enableAudioDebugging&&(f=mixChannelSamples(b,15,15,15),g=splitHighByte(f),f=splitLowByte(f),setLeftAndRightOutputForAudioQueue(g+1,f+1,CHANNEL_1_BUFFER_LOCATION),f=mixChannelSamples(15,c,15,15),g=splitHighByte(f),f=splitLowByte(f),setLeftAndRightOutputForAudioQueue(g+1,f+1,CHANNEL_2_BUFFER_LOCATION),f=mixChannelSamples(15,15,d,15),g=splitHighByte(f),f=splitLowByte(f),setLeftAndRightOutputForAudioQueue(g+1,f+1,CHANNEL_3_BUFFER_LOCATION),f=mixChannelSamples(15,15, |
||||
15,e),g=splitHighByte(f),f=splitLowByte(f),setLeftAndRightOutputForAudioQueue(g+1,f+1,CHANNEL_4_BUFFER_LOCATION));b=Sound.audioQueueIndex+1;c=i32Portable(Sound.wasmBoyMemoryMaxBufferSize>>1)-1;b>=c&&--b;Sound.audioQueueIndex=b}Sound.downSampleCycleCounter=a} |
||||
function updateFrameSequencer(a){var b=Sound.maxFrameSequenceCycles();a=Sound.frameSequenceCycleCounter+a;if(a>=b){Sound.frameSequenceCycleCounter=a-b;b=Sound.frameSequencer+1&7;switch(b){case 0:Channel1.updateLength();Channel2.updateLength();Channel3.updateLength();Channel4.updateLength();break;case 2:Channel1.updateLength();Channel2.updateLength();Channel3.updateLength();Channel4.updateLength();Channel1.updateSweep();break;case 4:Channel1.updateLength();Channel2.updateLength();Channel3.updateLength(); |
||||
Channel4.updateLength();break;case 6:Channel1.updateLength();Channel2.updateLength();Channel3.updateLength();Channel4.updateLength();Channel1.updateSweep();break;case 7:Channel1.updateEnvelope(),Channel2.updateEnvelope(),Channel4.updateEnvelope()}Sound.frameSequencer=b;return!0}Sound.frameSequenceCycleCounter=a;return!1} |
||||
function mixChannelSamples(a,b,c,d){void 0===a&&(a=15);void 0===b&&(b=15);void 0===c&&(c=15);void 0===d&&(d=15);SoundAccumulator.mixerVolumeChanged=!1;var e=0+(Sound.NR51IsChannel1EnabledOnLeftOutput?a:15);e+=Sound.NR51IsChannel2EnabledOnLeftOutput?b:15;e+=Sound.NR51IsChannel3EnabledOnLeftOutput?c:15;e+=Sound.NR51IsChannel4EnabledOnLeftOutput?d:15;a=0+(Sound.NR51IsChannel1EnabledOnRightOutput?a:15);a+=Sound.NR51IsChannel2EnabledOnRightOutput?b:15;a+=Sound.NR51IsChannel3EnabledOnRightOutput?c:15;a+= |
||||
Sound.NR51IsChannel4EnabledOnRightOutput?d:15;SoundAccumulator.mixerEnabledChanged=!1;SoundAccumulator.needToRemixSamples=!1;b=getSampleAsUnsignedByte(e,Sound.NR50LeftMixerVolume+1);c=getSampleAsUnsignedByte(a,Sound.NR50RightMixerVolume+1);SoundAccumulator.leftChannelSampleUnsignedByte=b;SoundAccumulator.rightChannelSampleUnsignedByte=c;return concatenateBytes(b,c)} |
||||
function getSampleAsUnsignedByte(a,b){if(60===a)return 127;a=1E5*(a-60)*b>>3;a=i32Portable(a/1E5)+60;b=i32Portable(12E6/254);a=i32Portable(1E5*a/b);return a=i32Portable(a)}function setLeftAndRightOutputForAudioQueue(a,b,c){c+=Sound.audioQueueIndex<<1;store(c+0,a+1);store(c+1,b+1)} |
||||
function SoundRegisterWriteTraps(a,b){if(a!==Sound.memoryLocationNR52&&!Sound.NR52IsSoundEnabled)return!1;switch(a){case Channel1.memoryLocationNRx0:Channel1.updateNRx0(b);break;case Channel3.memoryLocationNRx0:Channel3.updateNRx0(b);break;case Channel1.memoryLocationNRx1:Channel1.updateNRx1(b);break;case Channel2.memoryLocationNRx1:Channel2.updateNRx1(b);break;case Channel3.memoryLocationNRx1:Channel3.updateNRx1(b);break;case Channel4.memoryLocationNRx1:Channel4.updateNRx1(b);break;case Channel1.memoryLocationNRx2:Channel1.updateNRx2(b); |
||||
break;case Channel2.memoryLocationNRx2:Channel2.updateNRx2(b);break;case Channel3.memoryLocationNRx2:Channel3.volumeCodeChanged=!0;Channel3.updateNRx2(b);break;case Channel4.memoryLocationNRx2:Channel4.updateNRx2(b);break;case Channel1.memoryLocationNRx3:Channel1.updateNRx3(b);break;case Channel2.memoryLocationNRx3:Channel2.updateNRx3(b);break;case Channel3.memoryLocationNRx3:Channel3.updateNRx3(b);break;case Channel4.memoryLocationNRx3:Channel4.updateNRx3(b);break;case Channel1.memoryLocationNRx4:Channel1.updateNRx4(b); |
||||
break;case Channel2.memoryLocationNRx4:Channel2.updateNRx4(b);break;case Channel3.memoryLocationNRx4:Channel3.updateNRx4(b);break;case Channel4.memoryLocationNRx4:Channel4.updateNRx4(b);break;case Sound.memoryLocationNR50:Sound.updateNR50(b);SoundAccumulator.mixerVolumeChanged=!0;break;case Sound.memoryLocationNR51:Sound.updateNR51(b);SoundAccumulator.mixerEnabledChanged=!0;break;case Sound.memoryLocationNR52:a=Sound.NR52IsSoundEnabled;!a&&checkBitOnByte(7,b)&&(Sound.frameSequencer=7,Channel1.waveFormPositionOnDuty= |
||||
0,Channel2.waveFormPositionOnDuty=0);if(a&&!checkBitOnByte(7,b))for(a=65296;65318>a;++a)eightBitStoreIntoGBMemoryWithTraps(a,0);Sound.updateNR52(b)}return!0} |
||||
function SoundRegisterReadTraps(a){switch(a){case Channel1.memoryLocationNRx0:return a=eightBitLoadFromGBMemory(Channel1.memoryLocationNRx0),a|128;case Channel2.memoryLocationNRx0:return a=eightBitLoadFromGBMemory(Channel2.memoryLocationNRx0),a|255;case Channel3.memoryLocationNRx0:return a=eightBitLoadFromGBMemory(Channel3.memoryLocationNRx0),a|127;case Channel4.memoryLocationNRx0:return a=eightBitLoadFromGBMemory(Channel4.memoryLocationNRx0),a|255;case Sound.memoryLocationNR50:return a=eightBitLoadFromGBMemory(Sound.memoryLocationNR50), |
||||
a|0;case Channel1.memoryLocationNRx1:return a=eightBitLoadFromGBMemory(Channel1.memoryLocationNRx1),a|63;case Channel2.memoryLocationNRx1:return a=eightBitLoadFromGBMemory(Channel2.memoryLocationNRx1),a|63;case Channel3.memoryLocationNRx1:return a=eightBitLoadFromGBMemory(Channel3.memoryLocationNRx1),a|255;case Channel4.memoryLocationNRx1:return a=eightBitLoadFromGBMemory(Channel4.memoryLocationNRx1),a|255;case Sound.memoryLocationNR51:return a=eightBitLoadFromGBMemory(Sound.memoryLocationNR51),a| |
||||
0;case Channel1.memoryLocationNRx2:return a=eightBitLoadFromGBMemory(Channel1.memoryLocationNRx2),a|0;case Channel2.memoryLocationNRx2:return a=eightBitLoadFromGBMemory(Channel2.memoryLocationNRx2),a|0;case Channel3.memoryLocationNRx2:return a=eightBitLoadFromGBMemory(Channel3.memoryLocationNRx2),a|159;case Channel4.memoryLocationNRx2:return a=eightBitLoadFromGBMemory(Channel4.memoryLocationNRx2),a|0;case Sound.memoryLocationNR52:return a=0,a=Sound.NR52IsSoundEnabled?setBitOnByte(7,a):resetBitOnByte(7, |
||||
a),a=Channel1.isEnabled?setBitOnByte(0,a):resetBitOnByte(0,a),a=Channel2.isEnabled?setBitOnByte(1,a):resetBitOnByte(1,a),a=Channel3.isEnabled?setBitOnByte(2,a):resetBitOnByte(2,a),a=Channel4.isEnabled?setBitOnByte(3,a):resetBitOnByte(3,a),a|112;case Channel1.memoryLocationNRx3:return a=eightBitLoadFromGBMemory(Channel1.memoryLocationNRx3),a|255;case Channel2.memoryLocationNRx3:return a=eightBitLoadFromGBMemory(Channel2.memoryLocationNRx3),a|255;case Channel3.memoryLocationNRx3:return a=eightBitLoadFromGBMemory(Channel3.memoryLocationNRx3), |
||||
a|255;case Channel4.memoryLocationNRx3:return a=eightBitLoadFromGBMemory(Channel4.memoryLocationNRx3),a|0;case Channel1.memoryLocationNRx4:return a=eightBitLoadFromGBMemory(Channel1.memoryLocationNRx4),a|191;case Channel2.memoryLocationNRx4:return a=eightBitLoadFromGBMemory(Channel2.memoryLocationNRx4),a|191;case Channel3.memoryLocationNRx4:return a=eightBitLoadFromGBMemory(Channel3.memoryLocationNRx4),a|191;case Channel4.memoryLocationNRx4:return a=eightBitLoadFromGBMemory(Channel4.memoryLocationNRx4), |
||||
a|191}return-1} |
||||
var Interrupts=function(){function a(){}a.updateInterruptEnabled=function(b){a.isVBlankInterruptEnabled=checkBitOnByte(a.bitPositionVBlankInterrupt,b);a.isLcdInterruptEnabled=checkBitOnByte(a.bitPositionLcdInterrupt,b);a.isTimerInterruptEnabled=checkBitOnByte(a.bitPositionTimerInterrupt,b);a.isSerialInterruptEnabled=checkBitOnByte(a.bitPositionSerialInterrupt,b);a.isJoypadInterruptEnabled=checkBitOnByte(a.bitPositionJoypadInterrupt,b);a.interruptsEnabledValue=b};a.updateInterruptRequested=function(b){a.isVBlankInterruptRequested= |
||||
checkBitOnByte(a.bitPositionVBlankInterrupt,b);a.isLcdInterruptRequested=checkBitOnByte(a.bitPositionLcdInterrupt,b);a.isTimerInterruptRequested=checkBitOnByte(a.bitPositionTimerInterrupt,b);a.isSerialInterruptRequested=checkBitOnByte(a.bitPositionSerialInterrupt,b);a.isJoypadInterruptRequested=checkBitOnByte(a.bitPositionJoypadInterrupt,b);a.interruptsRequestedValue=b};a.areInterruptsPending=function(){return 0<(a.interruptsRequestedValue&a.interruptsEnabledValue&31)};a.saveState=function(){storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(0, |
||||
a.saveStateSlot),a.masterInterruptSwitch);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(1,a.saveStateSlot),a.masterInterruptSwitchDelay);store(getSaveStateMemoryOffset(16,a.saveStateSlot),a.interruptsEnabledValue);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(17,a.saveStateSlot),a.isVBlankInterruptEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(18,a.saveStateSlot),a.isLcdInterruptEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(19,a.saveStateSlot), |
||||
a.isTimerInterruptEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(20,a.saveStateSlot),a.isSerialInterruptEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(21,a.saveStateSlot),a.isJoypadInterruptEnabled);store(getSaveStateMemoryOffset(32,a.saveStateSlot),a.interruptsRequestedValue);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(33,a.saveStateSlot),a.isVBlankInterruptRequested);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(34,a.saveStateSlot), |
||||
a.isLcdInterruptRequested);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(35,a.saveStateSlot),a.isTimerInterruptRequested);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(36,a.saveStateSlot),a.isSerialInterruptRequested);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(37,a.saveStateSlot),a.isJoypadInterruptRequested)};a.loadState=function(){a.masterInterruptSwitch=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(0,a.saveStateSlot));a.masterInterruptSwitchDelay= |
||||
loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(1,a.saveStateSlot));a.interruptsEnabledValue=load(getSaveStateMemoryOffset(16,a.saveStateSlot));a.isVBlankInterruptEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(17,a.saveStateSlot));a.isLcdInterruptEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(18,a.saveStateSlot));a.isTimerInterruptEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(19,a.saveStateSlot));a.isSerialInterruptEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(20, |
||||
a.saveStateSlot));a.isJoypadInterruptEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(21,a.saveStateSlot));a.interruptsRequestedValue=load(getSaveStateMemoryOffset(32,a.saveStateSlot));a.isVBlankInterruptRequested=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(33,a.saveStateSlot));a.isLcdInterruptRequested=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(34,a.saveStateSlot));a.isTimerInterruptRequested=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(35, |
||||
a.saveStateSlot));a.isSerialInterruptRequested=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(36,a.saveStateSlot));a.isJoypadInterruptRequested=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(37,a.saveStateSlot))};a.masterInterruptSwitch=!1;a.masterInterruptSwitchDelay=!1;a.bitPositionVBlankInterrupt=0;a.bitPositionLcdInterrupt=1;a.bitPositionTimerInterrupt=2;a.bitPositionSerialInterrupt=3;a.bitPositionJoypadInterrupt=4;a.memoryLocationInterruptEnabled=65535;a.interruptsEnabledValue= |
||||
0;a.isVBlankInterruptEnabled=!1;a.isLcdInterruptEnabled=!1;a.isTimerInterruptEnabled=!1;a.isSerialInterruptEnabled=!1;a.isJoypadInterruptEnabled=!1;a.memoryLocationInterruptRequest=65295;a.interruptsRequestedValue=0;a.isVBlankInterruptRequested=!1;a.isLcdInterruptRequested=!1;a.isTimerInterruptRequested=!1;a.isSerialInterruptRequested=!1;a.isJoypadInterruptRequested=!1;a.saveStateSlot=2;return a}(); |
||||
function initializeInterrupts(){Interrupts.updateInterruptEnabled(0);eightBitStoreIntoGBMemory(Interrupts.memoryLocationInterruptEnabled,Interrupts.interruptsEnabledValue);Interrupts.updateInterruptRequested(225);eightBitStoreIntoGBMemory(Interrupts.memoryLocationInterruptRequest,Interrupts.interruptsRequestedValue)} |
||||
function checkInterrupts(){Interrupts.masterInterruptSwitchDelay&&(Interrupts.masterInterruptSwitch=!0,Interrupts.masterInterruptSwitchDelay=!1);if(0<(Interrupts.interruptsEnabledValue&Interrupts.interruptsRequestedValue&31)){var a=!1;Interrupts.masterInterruptSwitch&&!Cpu.isHaltNoJump&&(Interrupts.isVBlankInterruptEnabled&&Interrupts.isVBlankInterruptRequested?(_handleInterrupt(Interrupts.bitPositionVBlankInterrupt),a=!0):Interrupts.isLcdInterruptEnabled&&Interrupts.isLcdInterruptRequested?(_handleInterrupt(Interrupts.bitPositionLcdInterrupt), |
||||
a=!0):Interrupts.isTimerInterruptEnabled&&Interrupts.isTimerInterruptRequested?(_handleInterrupt(Interrupts.bitPositionTimerInterrupt),a=!0):Interrupts.isSerialInterruptEnabled&&Interrupts.isSerialInterruptRequested?(_handleInterrupt(Interrupts.bitPositionSerialInterrupt),a=!0):Interrupts.isJoypadInterruptEnabled&&Interrupts.isJoypadInterruptRequested&&(_handleInterrupt(Interrupts.bitPositionJoypadInterrupt),a=!0));var b=0;a&&(b=20,Cpu.isHalted()&&(Cpu.exitHaltAndStop(),b+=4));Cpu.isHalted()&&Cpu.exitHaltAndStop(); |
||||
return b}return 0} |
||||
function _handleInterrupt(a){setInterrupts(!1);var b=eightBitLoadFromGBMemory(Interrupts.memoryLocationInterruptRequest);b=resetBitOnByte(a,b);Interrupts.interruptsRequestedValue=b;eightBitStoreIntoGBMemory(Interrupts.memoryLocationInterruptRequest,b);Cpu.stackPointer-=2;Cpu.isHalted();sixteenBitStoreIntoGBMemory(Cpu.stackPointer,Cpu.programCounter);switch(a){case Interrupts.bitPositionVBlankInterrupt:Interrupts.isVBlankInterruptRequested=!1;Cpu.programCounter=64;break;case Interrupts.bitPositionLcdInterrupt:Interrupts.isLcdInterruptRequested=!1; |
||||
Cpu.programCounter=72;break;case Interrupts.bitPositionTimerInterrupt:Interrupts.isTimerInterruptRequested=!1;Cpu.programCounter=80;break;case Interrupts.bitPositionSerialInterrupt:Interrupts.isSerialInterruptRequested=!1;Cpu.programCounter=88;break;case Interrupts.bitPositionJoypadInterrupt:Interrupts.isJoypadInterruptRequested=!1,Cpu.programCounter=96}} |
||||
function _requestInterrupt(a){var b=eightBitLoadFromGBMemory(Interrupts.memoryLocationInterruptRequest);b=setBitOnByte(a,b);Interrupts.interruptsRequestedValue=b;eightBitStoreIntoGBMemory(Interrupts.memoryLocationInterruptRequest,b)}function setInterrupts(a){a?Interrupts.masterInterruptSwitchDelay=!0:Interrupts.masterInterruptSwitch=!1}function requestVBlankInterrupt(){Interrupts.isVBlankInterruptRequested=!0;_requestInterrupt(Interrupts.bitPositionVBlankInterrupt)} |
||||
function requestLcdInterrupt(){Interrupts.isLcdInterruptRequested=!0;_requestInterrupt(Interrupts.bitPositionLcdInterrupt)}function requestTimerInterrupt(){Interrupts.isTimerInterruptRequested=!0;_requestInterrupt(Interrupts.bitPositionTimerInterrupt)}function requestJoypadInterrupt(){Interrupts.isJoypadInterruptRequested=!0;_requestInterrupt(Interrupts.bitPositionJoypadInterrupt)} |
||||
function requestSerialInterrupt(){Interrupts.isSerialInterruptRequested=!0;_requestInterrupt(Interrupts.bitPositionSerialInterrupt)} |
||||
var Timers=function(){function a(){}a.batchProcessCycles=function(){return 256};a.updateDividerRegister=function(){var b=a.dividerRegister;a.dividerRegister=0;eightBitStoreIntoGBMemory(a.memoryLocationDividerRegister,0);a.timerEnabled&&_checkDividerRegisterFallingEdgeDetector(b,0)&&_incrementTimerCounter()};a.updateTimerCounter=function(b){if(a.timerEnabled){if(a.timerCounterWasReset)return;a.timerCounterOverflowDelay&&(a.timerCounterOverflowDelay=!1)}a.timerCounter=b};a.updateTimerModulo=function(b){a.timerModulo= |
||||
b;a.timerEnabled&&a.timerCounterWasReset&&(a.timerCounter=b,a.timerCounterWasReset=!1)};a.updateTimerControl=function(b){var c=a.timerEnabled;a.timerEnabled=checkBitOnByte(2,b);b&=3;if(!c){c=_getTimerCounterMaskBit(a.timerInputClock);var d=_getTimerCounterMaskBit(b),e=a.dividerRegister;(a.timerEnabled?checkBitOnByte(c,e):checkBitOnByte(c,e)&&checkBitOnByte(d,e))&&_incrementTimerCounter()}a.timerInputClock=b};a.saveState=function(){store(getSaveStateMemoryOffset(0,a.saveStateSlot),a.currentCycles); |
||||
store(getSaveStateMemoryOffset(4,a.saveStateSlot),a.dividerRegister);store(getSaveStateMemoryOffset(8,a.saveStateSlot),a.timerCounter);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(12,a.saveStateSlot),a.timerCounterOverflowDelay);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(13,a.saveStateSlot),a.timerCounterWasReset);store(getSaveStateMemoryOffset(14,a.saveStateSlot),a.timerCounterMask);store(getSaveStateMemoryOffset(18,a.saveStateSlot),a.timerModulo);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(22, |
||||
a.saveStateSlot),a.timerEnabled);store(getSaveStateMemoryOffset(23,a.saveStateSlot),a.timerInputClock)};a.loadState=function(){a.currentCycles=load(getSaveStateMemoryOffset(0,a.saveStateSlot));a.dividerRegister=load(getSaveStateMemoryOffset(4,a.saveStateSlot));a.timerCounter=load(getSaveStateMemoryOffset(8,a.saveStateSlot));a.timerCounterOverflowDelay=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(12,a.saveStateSlot));a.timerCounterWasReset=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(13, |
||||
a.saveStateSlot));a.timerCounterMask=load(getSaveStateMemoryOffset(14,a.saveStateSlot));a.timerModulo=load(getSaveStateMemoryOffset(18,a.saveStateSlot));a.timerEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(22,a.saveStateSlot));a.timerInputClock=load(getSaveStateMemoryOffset(23,a.saveStateSlot))};a.currentCycles=0;a.memoryLocationDividerRegister=65284;a.dividerRegister=0;a.memoryLocationTimerCounter=65285;a.timerCounter=0;a.timerCounterOverflowDelay=!1;a.timerCounterWasReset=!1; |
||||
a.timerCounterMask=0;a.memoryLocationTimerModulo=65286;a.timerModulo=0;a.memoryLocationTimerControl=65287;a.timerEnabled=!1;a.timerInputClock=0;a.saveStateSlot=5;return a}(); |
||||
function initializeTimers(){Timers.currentCycles=0;Timers.dividerRegister=0;Timers.timerCounter=0;Timers.timerModulo=0;Timers.timerEnabled=!1;Timers.timerInputClock=0;Timers.timerCounterOverflowDelay=!1;Timers.timerCounterWasReset=!1;Cpu.GBCEnabled?(eightBitStoreIntoGBMemory(65284,30),Timers.dividerRegister=7840):(eightBitStoreIntoGBMemory(65284,171),Timers.dividerRegister=43980);eightBitStoreIntoGBMemory(65287,248);Timers.timerInputClock=248;Cpu.BootROMEnabled&&!Cpu.GBCEnabled&&(eightBitStoreIntoGBMemory(65284, |
||||
0),Timers.dividerRegister=4)}function batchProcessTimers(){updateTimers(Timers.currentCycles);Timers.currentCycles=0} |
||||
function updateTimers(a){for(var b=0;b<a;){var c=Timers.dividerRegister,d=c;b+=4;d+=4;d&=65535;Timers.dividerRegister=d;if(Timers.timerEnabled){var e=Timers.timerCounterWasReset;Timers.timerCounterOverflowDelay?(Timers.timerCounter=Timers.timerModulo,requestTimerInterrupt(),Timers.timerCounterOverflowDelay=!1,Timers.timerCounterWasReset=!0):e&&(Timers.timerCounterWasReset=!1);_checkDividerRegisterFallingEdgeDetector(c,d)&&_incrementTimerCounter()}}} |
||||
function _incrementTimerCounter(){var a=Timers.timerCounter;255<++a&&(Timers.timerCounterOverflowDelay=!0,a=0);Timers.timerCounter=a}function _checkDividerRegisterFallingEdgeDetector(a,b){var c=_getTimerCounterMaskBit(Timers.timerInputClock);return checkBitOnByte(c,a)&&!checkBitOnByte(c,b)}function _getTimerCounterMaskBit(a){switch(a){case 0:return 9;case 1:return 3;case 2:return 5;case 3:return 7}return 0} |
||||
var Serial=function(){function a(){}a.updateTransferControl=function(b){a.isShiftClockInternal=checkBitOnByte(0,b);a.isClockSpeedFast=checkBitOnByte(1,b);a.transferStartFlag=checkBitOnByte(7,b);return!0};a.currentCycles=0;a.memoryLocationSerialTransferData=65281;a.memoryLocationSerialTransferControl=65282;a.numberOfBitsTransferred=0;a.isShiftClockInternal=!1;a.isClockSpeedFast=!1;a.transferStartFlag=!1;return a}(); |
||||
function initializeSerial(){Serial.currentCycles=0;Serial.numberOfBitsTransferred=0;Cpu.GBCEnabled?(eightBitStoreIntoGBMemory(65282,124),Serial.updateTransferControl(124)):(eightBitStoreIntoGBMemory(65282,126),Serial.updateTransferControl(126))} |
||||
function updateSerial(a){if(Serial.transferStartFlag)for(var b=0;b<a;){var c=Serial.currentCycles,d=c;b+=4;d+=4;65535<d&&(d-=65536);Serial.currentCycles=d;_checkFallingEdgeDetector(c,d)&&(c=Serial.memoryLocationSerialTransferData,d=eightBitLoadFromGBMemory(c),d=(d<<1)+1,d&=255,eightBitStoreIntoGBMemory(c,d),c=Serial.numberOfBitsTransferred,8===++c?(Serial.numberOfBitsTransferred=0,requestSerialInterrupt(),c=Serial.memoryLocationSerialTransferControl,d=eightBitLoadFromGBMemory(c),eightBitStoreIntoGBMemory(c, |
||||
resetBitOnByte(7,d)),Serial.transferStartFlag=!1):Serial.numberOfBitsTransferred=c)}}function _checkFallingEdgeDetector(a,b){var c=_getFallingEdgeMaskBit();return checkBitOnByte(c,a)&&!checkBitOnByte(c,b)}function _getFallingEdgeMaskBit(){return Serial.isClockSpeedFast?2:7} |
||||
var Joypad=function(){function a(){}a.updateJoypad=function(b){a.joypadRegisterFlipped=b^255;a.isDpadType=checkBitOnByte(4,a.joypadRegisterFlipped);a.isButtonType=checkBitOnByte(5,a.joypadRegisterFlipped)};a.saveState=function(){store(getSaveStateMemoryOffset(0,a.saveStateSlot),a.joypadRegisterFlipped);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(1,a.saveStateSlot),a.isDpadType);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(2,a.saveStateSlot),a.isButtonType)};a.loadState= |
||||
function(){a.joypadRegisterFlipped=load(getSaveStateMemoryOffset(0,a.saveStateSlot));a.isDpadType=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(1,a.saveStateSlot));a.isButtonType=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(2,a.saveStateSlot))};a.up=!1;a.down=!1;a.left=!1;a.right=!1;a.a=!1;a.b=!1;a.select=!1;a.start=!1;a.memoryLocationJoypadRegister=65280;a.joypadRegisterFlipped=0;a.isDpadType=!1;a.isButtonType=!1;a.saveStateSlot=3;return a}(); |
||||
function getJoypadState(){var a=Joypad.joypadRegisterFlipped;Joypad.isDpadType?(a=Joypad.up?resetBitOnByte(2,a):setBitOnByte(2,a),a=Joypad.right?resetBitOnByte(0,a):setBitOnByte(0,a),a=Joypad.down?resetBitOnByte(3,a):setBitOnByte(3,a),a=Joypad.left?resetBitOnByte(1,a):setBitOnByte(1,a)):Joypad.isButtonType&&(a=Joypad.a?resetBitOnByte(0,a):setBitOnByte(0,a),a=Joypad.b?resetBitOnByte(1,a):setBitOnByte(1,a),a=Joypad.select?resetBitOnByte(2,a):setBitOnByte(2,a),a=Joypad.start?resetBitOnByte(3,a):setBitOnByte(3, |
||||
a));return a|240}function setJoypadState(a,b,c,d,e,f,g,k){0<a?_pressJoypadButton(0):_releaseJoypadButton(0);0<b?_pressJoypadButton(1):_releaseJoypadButton(1);0<c?_pressJoypadButton(2):_releaseJoypadButton(2);0<d?_pressJoypadButton(3):_releaseJoypadButton(3);0<e?_pressJoypadButton(4):_releaseJoypadButton(4);0<f?_pressJoypadButton(5):_releaseJoypadButton(5);0<g?_pressJoypadButton(6):_releaseJoypadButton(6);0<k?_pressJoypadButton(7):_releaseJoypadButton(7)} |
||||
function _pressJoypadButton(a){var b=Cpu.isStopped=!1;_getJoypadButtonStateFromButtonId(a)||(b=!0);_setJoypadButtonStateFromButtonId(a,!0);b&&(b=!1,3>=a&&(b=!0),a=!1,Joypad.isDpadType&&b&&(a=!0),Joypad.isButtonType&&!b&&(a=!0),a&&requestJoypadInterrupt())}function _releaseJoypadButton(a){_setJoypadButtonStateFromButtonId(a,!1)} |
||||
function _getJoypadButtonStateFromButtonId(a){switch(a){case 0:return Joypad.up;case 1:return Joypad.right;case 2:return Joypad.down;case 3:return Joypad.left;case 4:return Joypad.a;case 5:return Joypad.b;case 6:return Joypad.select;case 7:return Joypad.start;default:return!1}} |
||||
function _setJoypadButtonStateFromButtonId(a,b){switch(a){case 0:Joypad.up=b;break;case 1:Joypad.right=b;break;case 2:Joypad.down=b;break;case 3:Joypad.left=b;break;case 4:Joypad.a=b;break;case 5:Joypad.b=b;break;case 6:Joypad.select=b;break;case 7:Joypad.start=b}} |
||||
function handleBanking(a,b){if(!Memory.isRomOnly){var c=Memory.isMBC1,d=Memory.isMBC2;if(8191>=a){if(!d||checkBitOnByte(4,b))b&=15,0===b?Memory.isRamBankingEnabled=!1:10===b&&(Memory.isRamBankingEnabled=!0)}else if(16383>=a){var e=Memory.isMBC5;!e||12287>=a?(a=Memory.currentRomBank,d&&(a=b&15),c?(b&=31,a&=224):Memory.isMBC3?(b&=127,a&=128):e&&(a&=0),Memory.currentRomBank=a|b):(c=splitLowByte(Memory.currentRomBank),Memory.currentRomBank=concatenateBytes(0<b,c))}else!d&&24575>=a?c&&Memory.isMBC1RomModeEnabled? |
||||
(a=Memory.currentRomBank&31,Memory.currentRomBank=a|b&224):(b=Memory.isMBC5?b&15:b&3,Memory.currentRamBank=b):!d&&32767>=a&&c&&(Memory.isMBC1RomModeEnabled=checkBitOnByte(0,b))}}function getRomBankAddress(a){var b=Memory.currentRomBank;Memory.isMBC5||0!==b||(b=1);return 16384*b+(a-Memory.switchableCartridgeRomLocation)}function getRamBankAddress(a){return 8192*Memory.currentRamBank+(a-Memory.cartridgeRamLocation)} |
||||
function initializeDma(){eightBitStoreIntoGBMemory(65361,255);eightBitStoreIntoGBMemory(65362,255);eightBitStoreIntoGBMemory(65363,255);eightBitStoreIntoGBMemory(65364,255);eightBitStoreIntoGBMemory(65365,255)}function startDmaTransfer(a){a<<=8;for(var b=0;159>=b;++b){var c=eightBitLoadFromGBMemory(a+b);eightBitStoreIntoGBMemory(Memory.spriteInformationTableLocation+b,c)}Memory.DMACycles=644} |
||||
function startHdmaTransfer(a){if(Cpu.GBCEnabled)if(Memory.isHblankHdmaActive&&!checkBitOnByte(7,a))Memory.isHblankHdmaActive=!1,a=eightBitLoadFromGBMemory(Memory.memoryLocationHdmaTrigger),eightBitStoreIntoGBMemory(Memory.memoryLocationHdmaTrigger,setBitOnByte(7,a));else{var b=getHdmaSourceFromMemory(),c=getHdmaDestinationFromMemory(),d=resetBitOnByte(7,a);d=d+1<<4;checkBitOnByte(7,a)?(Memory.isHblankHdmaActive=!0,Memory.hblankHdmaTransferLengthRemaining=d,Memory.hblankHdmaSource=b,Memory.hblankHdmaDestination= |
||||
c,eightBitStoreIntoGBMemory(Memory.memoryLocationHdmaTrigger,resetBitOnByte(7,a))):(hdmaTransfer(b,c,d),eightBitStoreIntoGBMemory(Memory.memoryLocationHdmaTrigger,255))}} |
||||
function updateHblankHdma(){if(Memory.isHblankHdmaActive){var a=16,b=Memory.hblankHdmaTransferLengthRemaining;b<a&&(a=b);hdmaTransfer(Memory.hblankHdmaSource,Memory.hblankHdmaDestination,a);Memory.hblankHdmaSource+=a;Memory.hblankHdmaDestination+=a;b-=a;Memory.hblankHdmaTransferLengthRemaining=b;a=Memory.memoryLocationHdmaTrigger;0>=b?(Memory.isHblankHdmaActive=!1,eightBitStoreIntoGBMemory(a,255)):eightBitStoreIntoGBMemory(a,resetBitOnByte(7,(b>>4)-1))}} |
||||
function hdmaTransfer(a,b,c){for(var d=0;d<c;++d){for(var e=eightBitLoadFromGBMemoryWithTraps(a+d),f=b+d;40959<f;)f-=8192;eightBitStoreIntoGBMemoryWithTraps(f,e)}Memory.DMACycles+=(32<<Cpu.GBCDoubleSpeed)*(c>>4)}function getHdmaSourceFromMemory(){var a=eightBitLoadFromGBMemory(Memory.memoryLocationHdmaSourceHigh),b=eightBitLoadFromGBMemory(Memory.memoryLocationHdmaSourceLow);return concatenateBytes(a,b)&65520} |
||||
function getHdmaDestinationFromMemory(){var a=eightBitLoadFromGBMemory(Memory.memoryLocationHdmaDestinationHigh),b=eightBitLoadFromGBMemory(Memory.memoryLocationHdmaDestinationLow);a=concatenateBytes(a,b);return a=(a&8176)+Memory.videoRamLocation} |
||||
function checkWriteTraps(a,b){if(a===Cpu.memoryLocationSpeedSwitch)return eightBitStoreIntoGBMemory(Cpu.memoryLocationSpeedSwitch,b&1),!1;if(Cpu.BootROMEnabled&&a===Cpu.memoryLocationBootROMSwitch)return Cpu.BootROMEnabled=!1,Cpu.programCounter=255,!0;var c=Memory.videoRamLocation,d=Memory.spriteInformationTableLocation;if(a<c)return handleBanking(a,b),!1;if(a>=c&&a<Memory.cartridgeRamLocation)return!0;if(a>=Memory.echoRamLocation&&a<d)return eightBitStoreIntoGBMemory(a-8192,b),!0;if(a>=d&&a<=Memory.spriteInformationTableLocationEnd)return 2<= |
||||
Lcd.currentLcdMode;if(a>=Memory.unusableMemoryLocation&&a<=Memory.unusableMemoryEndLocation)return!1;if(a===Serial.memoryLocationSerialTransferControl)return Serial.updateTransferControl(b);if(65296<=a&&65318>=a)return batchProcessAudio(),SoundRegisterWriteTraps(a,b);if(65328<=a&&65343>=a)return batchProcessAudio(),Channel3.isEnabled?(Channel3.handleWaveRamWrite(b),!1):!0;if(a>=Lcd.memoryLocationLcdControl&&a<=Graphics.memoryLocationWindowX){if(a===Lcd.memoryLocationLcdControl)return Lcd.updateLcdControl(b), |
||||
!0;if(a===Lcd.memoryLocationLcdStatus)return Lcd.updateLcdStatus(b),!1;if(a===Graphics.memoryLocationScanlineRegister)return Graphics.scanlineRegister=0,eightBitStoreIntoGBMemory(a,0),!1;if(a===Lcd.memoryLocationCoincidenceCompare)return Lcd.coincidenceCompare=b,!0;if(a===Graphics.memoryLocationDmaTransfer)return startDmaTransfer(b),!0;switch(a){case Graphics.memoryLocationScrollX:Graphics.scrollX=b;break;case Graphics.memoryLocationScrollY:Graphics.scrollY=b;break;case Graphics.memoryLocationWindowX:Graphics.windowX= |
||||
b;break;case Graphics.memoryLocationWindowY:Graphics.windowY=b}return!0}if(a===Memory.memoryLocationHdmaTrigger)return startHdmaTransfer(b),!1;if((a===Memory.memoryLocationGBCWRAMBank||a===Memory.memoryLocationGBCVRAMBank)&&Memory.isHblankHdmaActive&&(c=Memory.hblankHdmaSource,16384<=c&&32767>=c||53248<=c&&57343>=c))return!1;if(a>=Palette.memoryLocationBackgroundPaletteIndex&&a<=Palette.memoryLocationSpritePaletteData)return writeColorPaletteToMemory(a,b),!0;if(a>=Timers.memoryLocationDividerRegister&& |
||||
a<=Timers.memoryLocationTimerControl){batchProcessTimers();switch(a){case Timers.memoryLocationDividerRegister:return Timers.updateDividerRegister(),!1;case Timers.memoryLocationTimerCounter:Timers.updateTimerCounter(b);break;case Timers.memoryLocationTimerModulo:Timers.updateTimerModulo(b);break;case Timers.memoryLocationTimerControl:Timers.updateTimerControl(b)}return!0}a===Joypad.memoryLocationJoypadRegister&&Joypad.updateJoypad(b);if(a===Interrupts.memoryLocationInterruptRequest)return Interrupts.updateInterruptRequested(b), |
||||
!0;a===Interrupts.memoryLocationInterruptEnabled&&Interrupts.updateInterruptEnabled(b);return!0} |
||||
function getWasmBoyOffsetFromGameBoyOffset(a){switch(a>>12){case 0:if(Cpu.BootROMEnabled)if(Cpu.GBCEnabled){if(256>a||511<a&&2304>a)return a+BOOT_ROM_LOCATION}else if(!Cpu.GBCEnabled&&256>a)return a+BOOT_ROM_LOCATION;case 1:case 2:case 3:return a+CARTRIDGE_ROM_LOCATION;case 4:case 5:case 6:case 7:return getRomBankAddress(a)+CARTRIDGE_ROM_LOCATION;case 8:case 9:var b=0;Cpu.GBCEnabled&&(b=eightBitLoadFromGBMemory(Memory.memoryLocationGBCVRAMBank)&1);return a-Memory.videoRamLocation+VIDEO_RAM_LOCATION+ |
||||
8192*b;case 10:case 11:return getRamBankAddress(a)+CARTRIDGE_RAM_LOCATION;case 12:return a-Memory.internalRamBankZeroLocation+WORK_RAM_LOCATION;case 13:return b=0,Cpu.GBCEnabled&&(b=eightBitLoadFromGBMemory(Memory.memoryLocationGBCWRAMBank)&7),a-Memory.internalRamBankZeroLocation+WORK_RAM_LOCATION+4096*((1>b?1:b)-1);default:return a-Memory.echoRamLocation+OTHER_GAMEBOY_INTERNAL_MEMORY_LOCATION}} |
||||
var Breakpoints=function(){function a(){}a.programCounter=-1;a.readGbMemory=-1;a.writeGbMemory=-1;a.reachedBreakpoint=!1;return a}();function setProgramCounterBreakpoint(a){Breakpoints.programCounter=a}function resetProgramCounterBreakpoint(){Breakpoints.programCounter=-1}function setReadGbMemoryBreakpoint(a){Breakpoints.readGbMemory=a}function resetReadGbMemoryBreakpoint(){Breakpoints.readGbMemory=-1}function setWriteGbMemoryBreakpoint(a){Breakpoints.writeGbMemory=a} |
||||
function resetWriteGbMemoryBreakpoint(){Breakpoints.writeGbMemory=-1}function eightBitStoreIntoGBMemory(a,b){store(getWasmBoyOffsetFromGameBoyOffset(a),b)}function eightBitStoreIntoGBMemoryWithTraps(a,b){a===Breakpoints.writeGbMemory&&(Breakpoints.reachedBreakpoint=!0);checkWriteTraps(a,b)&&eightBitStoreIntoGBMemory(a,b)} |
||||
function sixteenBitStoreIntoGBMemoryWithTraps(a,b){var c=splitHighByte(b);b=splitLowByte(b);checkWriteTraps(a,b)&&eightBitStoreIntoGBMemory(a,b);a+=1;checkWriteTraps(a,c)&&eightBitStoreIntoGBMemory(a,c)}function sixteenBitStoreIntoGBMemory(a,b){var c=splitHighByte(b);b=splitLowByte(b);eightBitStoreIntoGBMemory(a+0,b);eightBitStoreIntoGBMemory(a+1,c)}function storeBooleanDirectlyToWasmMemory(a,b){store(a,b)} |
||||
var Lcd=function(){function a(){}a.updateLcdStatus=function(b){var c=eightBitLoadFromGBMemory(a.memoryLocationLcdStatus);b=setBitOnByte(7,b&248|c&7);eightBitStoreIntoGBMemory(a.memoryLocationLcdStatus,b)};a.updateLcdControl=function(b){var c=a.enabled;a.enabled=checkBitOnByte(7,b);a.windowTileMapDisplaySelect=checkBitOnByte(6,b);a.windowDisplayEnabled=checkBitOnByte(5,b);a.bgWindowTileDataSelect=checkBitOnByte(4,b);a.bgTileMapDisplaySelect=checkBitOnByte(3,b);a.tallSpriteSize=checkBitOnByte(2,b); |
||||
a.spriteDisplayEnable=checkBitOnByte(1,b);a.bgDisplayEnabled=checkBitOnByte(0,b);c&&!a.enabled&&resetLcd(!0);!c&&a.enabled&&resetLcd(!1)};a.memoryLocationLcdStatus=65345;a.currentLcdMode=0;a.memoryLocationCoincidenceCompare=65349;a.coincidenceCompare=0;a.memoryLocationLcdControl=65344;a.enabled=!0;a.windowTileMapDisplaySelect=!1;a.windowDisplayEnabled=!1;a.bgWindowTileDataSelect=!1;a.bgTileMapDisplaySelect=!1;a.tallSpriteSize=!1;a.spriteDisplayEnable=!1;a.bgDisplayEnabled=!1;return a}(); |
||||
function resetLcd(a){Graphics.scanlineCycleCounter=0;Graphics.scanlineRegister=0;eightBitStoreIntoGBMemory(Graphics.memoryLocationScanlineRegister,0);var b=eightBitLoadFromGBMemory(Lcd.memoryLocationLcdStatus);b=resetBitOnByte(1,b);b=resetBitOnByte(0,b);Lcd.currentLcdMode=0;eightBitStoreIntoGBMemory(Lcd.memoryLocationLcdStatus,b);if(a)for(a=0;a<FRAME_SIZE;++a)store(FRAME_LOCATION+a,255)} |
||||
function setLcdStatus(){if(Lcd.enabled){var a=Graphics.scanlineRegister,b=Lcd.currentLcdMode,c=0;if(144<=a)c=1;else{var d=Graphics.scanlineCycleCounter,e=Graphics.MIN_CYCLES_SPRITES_LCD_MODE();d>=e?c=2:d>=e&&(c=3)}if(b!==c){a=eightBitLoadFromGBMemory(Lcd.memoryLocationLcdStatus);Lcd.currentLcdMode=c;b=!1;switch(c){case 0:a=resetBitOnByte(0,a);a=resetBitOnByte(1,a);b=checkBitOnByte(3,a);break;case 1:a=resetBitOnByte(1,a);a=setBitOnByte(0,a);b=checkBitOnByte(4,a);break;case 2:a=resetBitOnByte(0,a); |
||||
a=setBitOnByte(1,a);b=checkBitOnByte(5,a);break;case 3:a=setBitOnByte(0,a),a=setBitOnByte(1,a)}b&&requestLcdInterrupt();0===c&&updateHblankHdma();1===c&&requestVBlankInterrupt();a=checkCoincidence(c,a);eightBitStoreIntoGBMemory(Lcd.memoryLocationLcdStatus,a)}else 153===a&&(a=eightBitLoadFromGBMemory(Lcd.memoryLocationLcdStatus),a=checkCoincidence(c,a),eightBitStoreIntoGBMemory(Lcd.memoryLocationLcdStatus,a))}} |
||||
function checkCoincidence(a,b){0!==a&&1!==a||Graphics.scanlineRegister!==Lcd.coincidenceCompare?b=resetBitOnByte(2,b):(b=setBitOnByte(2,b),checkBitOnByte(6,b)&&requestLcdInterrupt());return b}function renderBackground(a,b,c){drawBackgroundWindowScanline(a,b,c,a+Graphics.scrollY&255,0,Graphics.scrollX)}function renderWindow(a,b,c){var d=Graphics.windowX,e=Graphics.windowY;if(!(a<e)){d-=7;e=a-e;var f=i32Portable(-d);drawBackgroundWindowScanline(a,b,c,e,d,f)}} |
||||
function drawBackgroundWindowScanline(a,b,c,d,e,f){for(var g=d>>3;160>e;++e){var k=e+f;256<=k&&(k-=256);var h=c+(g<<5)+(k>>3),l=loadFromVramBank(h,0),n=!1;if(Config.tileCaching){var m=drawLineOfTileFromTileCache(e,a,k,d,h,b,l);0<m&&(e+=m-1,n=!0)}Config.tileRendering&&!n?(m=drawLineOfTileFromTileId(e,a,k,d,h,b,l),0<m&&(e+=m-1)):n||(Cpu.GBCEnabled?drawColorPixelFromTileId(e,a,k,d,h,b,l):drawMonochromePixelFromTileId(e,a,k,d,b,l))}} |
||||
function drawMonochromePixelFromTileId(a,b,c,d,e,f){e=getTileDataAddress(e,f);f=i32Portable(d&7);d=loadFromVramBank(e+2*f,0);e=loadFromVramBank(e+2*f+1,0);f=i32Portable(c&7);f=7-f;c=0;checkBitOnByte(f,e)&&(c=c+1<<1);checkBitOnByte(f,d)&&(c+=1);d=getColorizedGbHexColorFromPalette(c,Graphics.memoryLocationBackgroundPalette);setPixelOnFrame(a,b,0,getRedFromHexColor(d));setPixelOnFrame(a,b,1,getGreenFromHexColor(d));setPixelOnFrame(a,b,2,getBlueFromHexColor(d));addPriorityforPixel(a,b,c)} |
||||
function drawColorPixelFromTileId(a,b,c,d,e,f,g){f=getTileDataAddress(f,g);e=loadFromVramBank(e,1);g=i32Portable(d&7);checkBitOnByte(6,e)&&(g=7-g);var k=i32Portable(checkBitOnByte(3,e));d=loadFromVramBank(f+2*g,k);f=loadFromVramBank(f+2*g+1,k);g=i32Portable(c&7);checkBitOnByte(5,e)||(g=7-g);c=0;checkBitOnByte(g,f)&&(c=c+1<<1);checkBitOnByte(g,d)&&(c+=1);g=getRgbColorFromPalette(e&7,c,!1);d=getColorComponentFromRgb(0,g);f=getColorComponentFromRgb(1,g);g=getColorComponentFromRgb(2,g);setPixelOnFrame(a, |
||||
b,0,d);setPixelOnFrame(a,b,1,f);setPixelOnFrame(a,b,2,g);addPriorityforPixel(a,b,c,checkBitOnByte(7,e))} |
||||
function drawLineOfTileFromTileCache(a,b,c,d,e,f,g){d=0;f=TileCache.nextXIndexToPerformCacheCheck;if(0<b&&8<a&&g===TileCache.tileId&&a===f){g=checkBitOnByte(5,eightBitLoadFromGBMemory(e-1));e=checkBitOnByte(5,eightBitLoadFromGBMemory(e));for(var k=0;8>k;++k){g!==e&&(k=7-k);var h=a+k;if(160>=h){var l=a-(8-k),n=FRAME_LOCATION+getRgbPixelStart(h,b);setPixelOnFrame(h,b,0,load(n,0));setPixelOnFrame(h,b,1,load(n,1));setPixelOnFrame(h,b,2,load(n,2));l=getPriorityforPixel(l,b);addPriorityforPixel(h,b,resetBitOnByte(2, |
||||
l),checkBitOnByte(2,l));d++}}}else TileCache.tileId=g;a>=f&&(f=a+8,b=i32Portable(c&7),a<b&&(f+=b));TileCache.nextXIndexToPerformCacheCheck=f;return d}function drawLineOfTileFromTileId(a,b,c,d,e,f,g){d=i32Portable(d&7);var k=0;0==a&&(k=c-(c>>3<<3));c=7;160<a+8&&(c=160-a);var h=-1,l=0;Cpu.GBCEnabled&&(h=loadFromVramBank(e,1),l=i32Portable(checkBitOnByte(3,h)),checkBitOnByte(6,h)&&(d=7-d));return drawPixelsFromLineOfTile(g,f,l,k,c,d,a,b,160,FRAME_LOCATION,!1,0,h,-1)} |
||||
function renderSprites(a,b){for(var c=39;0<=c;--c){var d=4*c,e=Graphics.memoryLocationSpriteAttributesTable+d,f=eightBitLoadFromGBMemory(e+0),g=eightBitLoadFromGBMemory(e+1),k=eightBitLoadFromGBMemory(e+2);f-=16;g-=8;var h=8;b&&(h=16,k-=k&1);if(a>=f&&a<f+h){d=eightBitLoadFromGBMemory(Graphics.memoryLocationSpriteAttributesTable+d+3);e=checkBitOnByte(7,d);var l=checkBitOnByte(6,d),n=checkBitOnByte(5,d);f=a-f;l&&(f=h-f,--f);f<<=1;k=getTileDataAddress(Graphics.memoryLocationTileDataSelectOneStart,k); |
||||
k+=f;h=Cpu.GBCEnabled&&checkBitOnByte(3,d);f=loadFromVramBank(k+0,h);k=loadFromVramBank(k+1,h);for(h=7;0<=h;--h){l=h;n&&(l-=7,l=-l);var m=0;checkBitOnByte(l,k)&&(m=m+1<<1);checkBitOnByte(l,f)&&(m+=1);if(0!==m&&(l=g+(7-h),0<=l&&160>=l)){var p=Cpu.GBCEnabled&&!Lcd.bgDisplayEnabled,r=!1,w=!1;if(!p){var q=getPriorityforPixel(l,a),u=q&3;e&&0<u?r=!0:Cpu.GBCEnabled&&checkBitOnByte(2,q)&&0<u&&(w=!0)}if(p||!r&&!w)Cpu.GBCEnabled?(r=getRgbColorFromPalette(d&7,m,!0),m=getColorComponentFromRgb(0,r),p=getColorComponentFromRgb(1, |
||||
r),r=getColorComponentFromRgb(2,r),setPixelOnFrame(l,a,0,m),setPixelOnFrame(l,a,1,p),setPixelOnFrame(l,a,2,r)):(p=Graphics.memoryLocationSpritePaletteOne,checkBitOnByte(4,d)&&(p=Graphics.memoryLocationSpritePaletteTwo),m=getColorizedGbHexColorFromPalette(m,p),setPixelOnFrame(l,a,0,getRedFromHexColor(m)),setPixelOnFrame(l,a,1,getGreenFromHexColor(m)),setPixelOnFrame(l,a,2,getBlueFromHexColor(m)))}}}}} |
||||
var Graphics=function(){function a(){}a.batchProcessCycles=function(){return a.MAX_CYCLES_PER_SCANLINE()};a.MAX_CYCLES_PER_SCANLINE=function(){return 153===a.scanlineRegister?4<<Cpu.GBCDoubleSpeed:456<<Cpu.GBCDoubleSpeed};a.MIN_CYCLES_SPRITES_LCD_MODE=function(){return 376<<Cpu.GBCDoubleSpeed};a.MIN_CYCLES_TRANSFER_DATA_LCD_MODE=function(){return 249<<Cpu.GBCDoubleSpeed};a.saveState=function(){store(getSaveStateMemoryOffset(0,a.saveStateSlot),a.scanlineCycleCounter);store(getSaveStateMemoryOffset(4, |
||||
a.saveStateSlot),a.scanlineRegister);store(getSaveStateMemoryOffset(5,a.saveStateSlot),a.scrollX);store(getSaveStateMemoryOffset(6,a.saveStateSlot),a.scrollY);store(getSaveStateMemoryOffset(7,a.saveStateSlot),a.windowX);store(getSaveStateMemoryOffset(8,a.saveStateSlot),a.windowY);store(getSaveStateMemoryOffset(9,a.saveStateSlot),Lcd.currentLcdMode);store(getSaveStateMemoryOffset(10,a.saveStateSlot),Lcd.coincidenceCompare);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(11,a.saveStateSlot), |
||||
Lcd.enabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(12,a.saveStateSlot),Lcd.windowTileMapDisplaySelect);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(13,a.saveStateSlot),Lcd.windowDisplayEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(14,a.saveStateSlot),Lcd.bgWindowTileDataSelect);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(15,a.saveStateSlot),Lcd.bgTileMapDisplaySelect);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(16,a.saveStateSlot), |
||||
Lcd.tallSpriteSize);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(17,a.saveStateSlot),Lcd.spriteDisplayEnable);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(18,a.saveStateSlot),Lcd.bgDisplayEnabled)};a.loadState=function(){a.scanlineCycleCounter=load(getSaveStateMemoryOffset(0,a.saveStateSlot));a.scanlineRegister=load(getSaveStateMemoryOffset(4,a.scanlineRegister));a.scrollX=load(getSaveStateMemoryOffset(5,a.saveStateSlot));a.scrollY=load(getSaveStateMemoryOffset(6,a.saveStateSlot)); |
||||
a.windowX=load(getSaveStateMemoryOffset(7,a.saveStateSlot));a.windowY=load(getSaveStateMemoryOffset(8,a.saveStateSlot));Lcd.currentLcdMode=load(getSaveStateMemoryOffset(9,a.saveStateSlot));Lcd.coincidenceCompare=load(getSaveStateMemoryOffset(10,a.saveStateSlot));Lcd.enabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(11,a.saveStateSlot));Lcd.windowTileMapDisplaySelect=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(12,a.saveStateSlot));Lcd.windowDisplayEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(13, |
||||
a.saveStateSlot));Lcd.bgWindowTileDataSelect=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(14,a.saveStateSlot));Lcd.bgTileMapDisplaySelect=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(15,a.saveStateSlot));Lcd.tallSpriteSize=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(16,a.saveStateSlot));Lcd.spriteDisplayEnable=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(17,a.saveStateSlot));Lcd.bgDisplayEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(18, |
||||
a.saveStateSlot))};a.currentCycles=0;a.scanlineCycleCounter=0;a.memoryLocationScanlineRegister=65348;a.scanlineRegister=0;a.memoryLocationDmaTransfer=65350;a.memoryLocationScrollX=65347;a.scrollX=0;a.memoryLocationScrollY=65346;a.scrollY=0;a.memoryLocationWindowX=65355;a.windowX=0;a.memoryLocationWindowY=65354;a.windowY=0;a.memoryLocationTileMapSelectZeroStart=38912;a.memoryLocationTileMapSelectOneStart=39936;a.memoryLocationTileDataSelectZeroStart=34816;a.memoryLocationTileDataSelectOneStart=32768; |
||||
a.memoryLocationSpriteAttributesTable=65024;a.memoryLocationBackgroundPalette=65351;a.memoryLocationSpritePaletteOne=65352;a.memoryLocationSpritePaletteTwo=65353;a.saveStateSlot=1;return a}();function batchProcessGraphics(){for(var a=Graphics.batchProcessCycles();Graphics.currentCycles>=a;)updateGraphics(a),Graphics.currentCycles-=a} |
||||
function initializeGraphics(){Graphics.currentCycles=0;Graphics.scanlineCycleCounter=0;Graphics.scanlineRegister=0;Graphics.scrollX=0;Graphics.scrollY=0;Graphics.windowX=0;Graphics.windowY=0;Graphics.scanlineRegister=144;Cpu.GBCEnabled?(eightBitStoreIntoGBMemory(65345,129),eightBitStoreIntoGBMemory(65348,144),eightBitStoreIntoGBMemory(65351,252)):(eightBitStoreIntoGBMemory(65345,133),eightBitStoreIntoGBMemory(65350,255),eightBitStoreIntoGBMemory(65351,252),eightBitStoreIntoGBMemory(65352,255),eightBitStoreIntoGBMemory(65353, |
||||
255));Graphics.scanlineRegister=144;eightBitStoreIntoGBMemory(65344,145);eightBitStoreIntoGBMemory(65359,0);eightBitStoreIntoGBMemory(65392,1);Cpu.BootROMEnabled&&(Cpu.GBCEnabled?(Graphics.scanlineRegister=0,eightBitStoreIntoGBMemory(65344,0),eightBitStoreIntoGBMemory(65345,128),eightBitStoreIntoGBMemory(65348,0)):(Graphics.scanlineRegister=0,eightBitStoreIntoGBMemory(65344,0),eightBitStoreIntoGBMemory(65345,132)));initializeColors()} |
||||
function updateGraphics(a){if(Lcd.enabled)for(Graphics.scanlineCycleCounter+=a,a=Config.graphicsDisableScanlineRendering;Graphics.scanlineCycleCounter>=Graphics.MAX_CYCLES_PER_SCANLINE();){Graphics.scanlineCycleCounter-=Graphics.MAX_CYCLES_PER_SCANLINE();var b=Graphics.scanlineRegister;144===b?(a?_renderEntireFrame():_drawScanline(b),clearPriorityMap(),resetTileCache()):144>b&&(a||_drawScanline(b));b=153<b?0:b+1;Graphics.scanlineRegister=b}setLcdStatus()} |
||||
function _drawScanline(a){var b=Graphics.memoryLocationTileDataSelectZeroStart;Lcd.bgWindowTileDataSelect&&(b=Graphics.memoryLocationTileDataSelectOneStart);if(Cpu.GBCEnabled||Lcd.bgDisplayEnabled){var c=Graphics.memoryLocationTileMapSelectZeroStart;Lcd.bgTileMapDisplaySelect&&(c=Graphics.memoryLocationTileMapSelectOneStart);renderBackground(a,b,c)}Lcd.windowDisplayEnabled&&(c=Graphics.memoryLocationTileMapSelectZeroStart,Lcd.windowTileMapDisplaySelect&&(c=Graphics.memoryLocationTileMapSelectOneStart), |
||||
renderWindow(a,b,c));Lcd.spriteDisplayEnable&&renderSprites(a,Lcd.tallSpriteSize)}function _renderEntireFrame(){for(var a=0;144>=a;++a)_drawScanline(a)}function getRgbPixelStart(a,b){return 3*(160*b+a)}function setPixelOnFrame(a,b,c,d){store(FRAME_LOCATION+getRgbPixelStart(a,b)+c,d)}function loadFromVramBank(a,b){return load(a-Memory.videoRamLocation+GAMEBOY_INTERNAL_MEMORY_LOCATION+8192*(b&1))} |
||||
function checkReadTraps(a){var b=Memory.videoRamLocation;return a<b||a>=b&&a<Memory.cartridgeRamLocation?-1:a>=Memory.echoRamLocation&&a<Memory.spriteInformationTableLocation?eightBitLoadFromGBMemory(a-8192):a>=Memory.spriteInformationTableLocation&&a<=Memory.spriteInformationTableLocationEnd?2>Lcd.currentLcdMode?255:-1:a===Cpu.memoryLocationSpeedSwitch?(a=255,b=eightBitLoadFromGBMemory(Cpu.memoryLocationSpeedSwitch),checkBitOnByte(0,b)||(a=resetBitOnByte(0,a)),Cpu.GBCDoubleSpeed||(a=resetBitOnByte(7, |
||||
a)),a):a===Graphics.memoryLocationScanlineRegister?(eightBitStoreIntoGBMemory(a,Graphics.scanlineRegister),Graphics.scanlineRegister):65296<=a&&65318>=a?(batchProcessAudio(),SoundRegisterReadTraps(a)):65319<=a&&65327>=a?255:65328<=a&&65343>=a?(batchProcessAudio(),Channel3.isEnabled?Channel3.handleWaveRamRead():-1):a===Timers.memoryLocationDividerRegister?(b=splitHighByte(Timers.dividerRegister),eightBitStoreIntoGBMemory(a,b),b):a===Timers.memoryLocationTimerCounter?(eightBitStoreIntoGBMemory(a,Timers.timerCounter), |
||||
Timers.timerCounter):a===Interrupts.memoryLocationInterruptRequest?224|Interrupts.interruptsRequestedValue:a===Joypad.memoryLocationJoypadRegister?getJoypadState():-1}function eightBitLoadFromGBMemory(a){return load(getWasmBoyOffsetFromGameBoyOffset(a))}function eightBitLoadFromGBMemoryWithTraps(a){a===Breakpoints.readGbMemory&&(Breakpoints.reachedBreakpoint=!0);var b=checkReadTraps(a);return-1===b?eightBitLoadFromGBMemory(a):b} |
||||
function sixteenBitLoadFromGBMemory(a){var b=checkReadTraps(a);b=-1===b?eightBitLoadFromGBMemory(a):b;a+=1;var c=checkReadTraps(a);a=-1===c?eightBitLoadFromGBMemory(a):c;return concatenateBytes(a,b)}function loadBooleanDirectlyFromWasmMemory(a){return 0<load(a)} |
||||
var Memory=function(){function a(){}a.saveState=function(){store(getSaveStateMemoryOffset(0,a.saveStateSlot),a.currentRomBank);store(getSaveStateMemoryOffset(2,a.saveStateSlot),a.currentRamBank);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(4,a.saveStateSlot),a.isRamBankingEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(5,a.saveStateSlot),a.isMBC1RomModeEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(6,a.saveStateSlot),a.isRomOnly);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(7, |
||||
a.saveStateSlot),a.isMBC1);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(8,a.saveStateSlot),a.isMBC2);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(9,a.saveStateSlot),a.isMBC3);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(10,a.saveStateSlot),a.isMBC5);store(getSaveStateMemoryOffset(11,a.saveStateSlot),a.DMACycles);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(15,a.saveStateSlot),a.isHblankHdmaActive);store(getSaveStateMemoryOffset(16,a.saveStateSlot), |
||||
a.hblankHdmaTransferLengthRemaining);store(getSaveStateMemoryOffset(20,a.saveStateSlot),a.hblankHdmaSource);store(getSaveStateMemoryOffset(24,a.saveStateSlot),a.hblankHdmaDestination)};a.loadState=function(){a.currentRomBank=load(getSaveStateMemoryOffset(0,a.saveStateSlot));a.currentRamBank=load(getSaveStateMemoryOffset(2,a.saveStateSlot));a.isRamBankingEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(4,a.saveStateSlot));a.isMBC1RomModeEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(5, |
||||
a.saveStateSlot));a.isRomOnly=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(6,a.saveStateSlot));a.isMBC1=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(7,a.saveStateSlot));a.isMBC2=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(8,a.saveStateSlot));a.isMBC3=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(9,a.saveStateSlot));a.isMBC5=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(10,a.saveStateSlot));a.DMACycles=load(getSaveStateMemoryOffset(11, |
||||
a.saveStateSlot));a.isHblankHdmaActive=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(15,a.saveStateSlot));a.hblankHdmaTransferLengthRemaining=load(getSaveStateMemoryOffset(16,a.saveStateSlot));a.hblankHdmaSource=load(getSaveStateMemoryOffset(20,a.saveStateSlot));a.hblankHdmaDestination=load(getSaveStateMemoryOffset(24,a.saveStateSlot))};a.cartridgeRomLocation=0;a.switchableCartridgeRomLocation=16384;a.videoRamLocation=32768;a.cartridgeRamLocation=40960;a.internalRamBankZeroLocation=49152; |
||||
a.internalRamBankOneLocation=53248;a.echoRamLocation=57344;a.spriteInformationTableLocation=65024;a.spriteInformationTableLocationEnd=65183;a.unusableMemoryLocation=65184;a.unusableMemoryEndLocation=65279;a.currentRomBank=0;a.currentRamBank=0;a.isRamBankingEnabled=!1;a.isMBC1RomModeEnabled=!0;a.isRomOnly=!0;a.isMBC1=!1;a.isMBC2=!1;a.isMBC3=!1;a.isMBC5=!1;a.memoryLocationHdmaSourceHigh=65361;a.memoryLocationHdmaSourceLow=65362;a.memoryLocationHdmaDestinationHigh=65363;a.memoryLocationHdmaDestinationLow= |
||||
65364;a.memoryLocationHdmaTrigger=65365;a.DMACycles=0;a.isHblankHdmaActive=!1;a.hblankHdmaTransferLengthRemaining=0;a.hblankHdmaSource=0;a.hblankHdmaDestination=0;a.memoryLocationGBCVRAMBank=65359;a.memoryLocationGBCWRAMBank=65392;a.saveStateSlot=4;return a}(); |
||||
function initializeCartridge(){Memory.isRamBankingEnabled=!1;Memory.isMBC1RomModeEnabled=!0;var a=eightBitLoadFromGBMemory(327);Memory.isRomOnly=0===a;Memory.isMBC1=1<=a&&3>=a;Memory.isMBC2=5<=a&&6>=a;Memory.isMBC3=15<=a&&19>=a;Memory.isMBC5=25<=a&&30>=a;Memory.currentRomBank=1;Memory.currentRamBank=0;eightBitStoreIntoGBMemory(Memory.memoryLocationGBCVRAMBank,0);eightBitStoreIntoGBMemory(Memory.memoryLocationGBCWRAMBank,1)} |
||||
var Cpu=function(){function a(){}a.CLOCK_SPEED=function(){return 4194304<<a.GBCDoubleSpeed};a.MAX_CYCLES_PER_FRAME=function(){return 70224<<a.GBCDoubleSpeed};a.enableHalt=function(){Interrupts.masterInterruptSwitch?a.isHaltNormal=!0:0===(Interrupts.interruptsEnabledValue&Interrupts.interruptsRequestedValue&31)?a.isHaltNoJump=!0:a.isHaltBug=!0};a.exitHaltAndStop=function(){a.isHaltNoJump=!1;a.isHaltNormal=!1;a.isHaltBug=!1;a.isStopped=!1};a.isHalted=function(){return a.isHaltNormal||a.isHaltNoJump}; |
||||
a.saveState=function(){store(getSaveStateMemoryOffset(0,a.saveStateSlot),a.registerA);store(getSaveStateMemoryOffset(1,a.saveStateSlot),a.registerB);store(getSaveStateMemoryOffset(2,a.saveStateSlot),a.registerC);store(getSaveStateMemoryOffset(3,a.saveStateSlot),a.registerD);store(getSaveStateMemoryOffset(4,a.saveStateSlot),a.registerE);store(getSaveStateMemoryOffset(5,a.saveStateSlot),a.registerH);store(getSaveStateMemoryOffset(6,a.saveStateSlot),a.registerL);store(getSaveStateMemoryOffset(7,a.saveStateSlot), |
||||
a.registerF);store(getSaveStateMemoryOffset(8,a.saveStateSlot),a.stackPointer);store(getSaveStateMemoryOffset(10,a.saveStateSlot),a.programCounter);store(getSaveStateMemoryOffset(12,a.saveStateSlot),a.currentCycles);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(17,a.saveStateSlot),a.isHaltNormal);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(18,a.saveStateSlot),a.isHaltNoJump);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(19,a.saveStateSlot),a.isHaltBug);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(20, |
||||
a.saveStateSlot),a.isStopped);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(21,a.saveStateSlot),a.BootROMEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(22,a.saveStateSlot),a.GBCEnabled);storeBooleanDirectlyToWasmMemory(getSaveStateMemoryOffset(23,a.saveStateSlot),a.GBCDoubleSpeed)};a.loadState=function(){a.registerA=load(getSaveStateMemoryOffset(0,a.saveStateSlot));a.registerB=load(getSaveStateMemoryOffset(1,a.saveStateSlot));a.registerC=load(getSaveStateMemoryOffset(2, |
||||
a.saveStateSlot));a.registerD=load(getSaveStateMemoryOffset(3,a.saveStateSlot));a.registerE=load(getSaveStateMemoryOffset(4,a.saveStateSlot));a.registerH=load(getSaveStateMemoryOffset(5,a.saveStateSlot));a.registerL=load(getSaveStateMemoryOffset(6,a.saveStateSlot));a.registerF=load(getSaveStateMemoryOffset(7,a.saveStateSlot));a.stackPointer=load(getSaveStateMemoryOffset(8,a.saveStateSlot));a.programCounter=load(getSaveStateMemoryOffset(10,a.saveStateSlot));a.currentCycles=load(getSaveStateMemoryOffset(12, |
||||
a.saveStateSlot));a.isHaltNormal=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(17,a.saveStateSlot));a.isHaltNoJump=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(18,a.saveStateSlot));a.isHaltBug=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(19,a.saveStateSlot));a.isStopped=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(20,a.saveStateSlot));a.BootROMEnabled=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(21,a.saveStateSlot));a.GBCEnabled= |
||||
loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(22,a.saveStateSlot));a.GBCDoubleSpeed=loadBooleanDirectlyFromWasmMemory(getSaveStateMemoryOffset(23,a.saveStateSlot))};a.memoryLocationBootROMSwitch=65360;a.BootROMEnabled=!1;a.GBCEnabled=!1;a.memoryLocationSpeedSwitch=65357;a.GBCDoubleSpeed=!1;a.registerA=0;a.registerB=0;a.registerC=0;a.registerD=0;a.registerE=0;a.registerH=0;a.registerL=0;a.registerF=0;a.stackPointer=0;a.programCounter=0;a.currentCycles=0;a.isHaltNormal=!1;a.isHaltNoJump= |
||||
!1;a.isHaltBug=!1;a.isStopped=!1;a.saveStateSlot=0;return a}(); |
||||
function initializeCpu(){Cpu.GBCDoubleSpeed=!1;Cpu.registerA=0;Cpu.registerB=0;Cpu.registerC=0;Cpu.registerD=0;Cpu.registerE=0;Cpu.registerH=0;Cpu.registerL=0;Cpu.registerF=0;Cpu.stackPointer=0;Cpu.programCounter=0;Cpu.currentCycles=0;Cpu.isHaltNormal=!1;Cpu.isHaltNoJump=!1;Cpu.isHaltBug=!1;Cpu.isStopped=!1;Cpu.BootROMEnabled||(Cpu.GBCEnabled?(Cpu.registerA=17,Cpu.registerF=128,Cpu.registerB=0,Cpu.registerC=0,Cpu.registerD=255,Cpu.registerE=86,Cpu.registerH=0,Cpu.registerL=13):(Cpu.registerA=1,Cpu.registerF= |
||||
176,Cpu.registerB=0,Cpu.registerC=19,Cpu.registerD=0,Cpu.registerE=216,Cpu.registerH=1,Cpu.registerL=77),Cpu.programCounter=256,Cpu.stackPointer=65534)}function addARegister(a){var b=Cpu.registerA;checkAndSetEightBitHalfCarryFlag(b,a);checkAndSetEightBitCarryFlag(b,a);b=u8Portable(b+a);Cpu.registerA=b;setZeroFlag$$1(0===b);setSubtractFlag(0)} |
||||
function addAThroughCarryRegister(a){var b=Cpu.registerA,c=u8Portable(b+a+getCarryFlag$$1());setHalfCarryFlag(0!=(u8Portable(b^a^c)&16));a=u16Portable(b+a+getCarryFlag$$1());setCarryFlag(0<(a&256));Cpu.registerA=c;setZeroFlag$$1(0===c);setSubtractFlag(0)}function subARegister(a){var b=-1*a;var c=Cpu.registerA;checkAndSetEightBitHalfCarryFlag(c,b);checkAndSetEightBitCarryFlag(c,b);c=u8Portable(c-a);Cpu.registerA=c;setZeroFlag$$1(0===c);setSubtractFlag(1)} |
||||
function subAThroughCarryRegister(a){var b=Cpu.registerA,c=u8Portable(b-a-getCarryFlag$$1()),d=u8Portable((b^a^c)&16);setHalfCarryFlag(0!=d);a=u16Portable(b-a-getCarryFlag$$1());setCarryFlag(0<(a&256));Cpu.registerA=c;setZeroFlag$$1(0===c);setSubtractFlag(1)}function andARegister(a){a&=Cpu.registerA;Cpu.registerA=a;setZeroFlag$$1(0===a);setSubtractFlag(0);setHalfCarryFlag(1);setCarryFlag(0)} |
||||
function xorARegister(a){a=u8Portable(Cpu.registerA^a);Cpu.registerA=a;setZeroFlag$$1(0===a);setSubtractFlag(0);setHalfCarryFlag(0);setCarryFlag(0)}function orARegister(a){a|=Cpu.registerA;Cpu.registerA=a;setZeroFlag$$1(0===a);setSubtractFlag(0);setHalfCarryFlag(0);setCarryFlag(0)}function cpARegister(a){var b=Cpu.registerA;a*=-1;checkAndSetEightBitHalfCarryFlag(b,a);checkAndSetEightBitCarryFlag(b,a);setZeroFlag$$1(0===b+a);setSubtractFlag(1)} |
||||
function rotateRegisterLeft(a){setCarryFlag(128===(a&128));a=rotateByteLeft(a);setZeroFlag$$1(0===a);setSubtractFlag(0);setHalfCarryFlag(0);return a}function rotateRegisterRight(a){setCarryFlag(0<(a&1));a=rotateByteRight(a);setZeroFlag$$1(0===a);setSubtractFlag(0);setHalfCarryFlag(0);return a}function rotateRegisterLeftThroughCarry(a){var b=128===(a&128);a=rotateByteLeftThroughCarry(a);setCarryFlag(b);setZeroFlag$$1(0===a);setSubtractFlag(0);setHalfCarryFlag(0);return a} |
||||
function rotateRegisterRightThroughCarry(a){var b=1===(a&1);a=rotateByteRightThroughCarry(a);setCarryFlag(b);setZeroFlag$$1(0===a);setSubtractFlag(0);setHalfCarryFlag(0);return a}function shiftLeftRegister(a){var b=128===(a&128);a=u8Portable(a<<1);setCarryFlag(b);setZeroFlag$$1(0===a);setSubtractFlag(0);setHalfCarryFlag(0);return a} |
||||
function shiftRightArithmeticRegister(a){var b=128===(a&128),c=1===(a&1);a=u8Portable(a>>1);b&&(a|=128);setZeroFlag$$1(0===a);setSubtractFlag(0);setHalfCarryFlag(0);setCarryFlag(c);return a}function swapNibblesOnRegister(a){a=u8Portable((a&15)<<4|(a&240)>>4);setZeroFlag$$1(0===a);setSubtractFlag(0);setHalfCarryFlag(0);setCarryFlag(0);return a} |
||||
function shiftRightLogicalRegister(a){var b=1===(a&1);a=u8Portable(a>>1);setZeroFlag$$1(0===a);setSubtractFlag(0);setHalfCarryFlag(0);setCarryFlag(b);return a}function testBitOnRegister(a,b){setZeroFlag$$1(0===(b&1<<a));setSubtractFlag(0);setHalfCarryFlag(1);return b}function setBitOnRegister(a,b,c){return 0<b?c|1<<a:c&~(1<<a)}function relativeJump(a){a=i8Portable(a);var b=Cpu.programCounter;b=u16Portable(b+a);b=u16Portable(b+1);Cpu.programCounter=b} |
||||
function handleCbOpcode(a){var b=-1,c=!1,d=0,e=0,f=a&7;switch(f){case 0:d=Cpu.registerB;break;case 1:d=Cpu.registerC;break;case 2:d=Cpu.registerD;break;case 3:d=Cpu.registerE;break;case 4:d=Cpu.registerH;break;case 5:d=Cpu.registerL;break;case 6:d=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL));break;case 7:d=Cpu.registerA}var g=(a&240)>>4;switch(g){case 0:7>=a?(e=rotateRegisterLeft(d),c=!0):15>=a&&(e=rotateRegisterRight(d),c=!0);break;case 1:23>=a?(e=rotateRegisterLeftThroughCarry(d), |
||||
c=!0):31>=a&&(e=rotateRegisterRightThroughCarry(d),c=!0);break;case 2:39>=a?(e=shiftLeftRegister(d),c=!0):47>=a&&(e=shiftRightArithmeticRegister(d),c=!0);break;case 3:55>=a?(e=swapNibblesOnRegister(d),c=!0):63>=a&&(e=shiftRightLogicalRegister(d),c=!0);break;case 4:71>=a?(e=testBitOnRegister(0,d),c=!0):79>=a&&(e=testBitOnRegister(1,d),c=!0);break;case 5:87>=a?(e=testBitOnRegister(2,d),c=!0):95>=a&&(e=testBitOnRegister(3,d),c=!0);break;case 6:103>=a?(e=testBitOnRegister(4,d),c=!0):111>=a&&(e=testBitOnRegister(5, |
||||
d),c=!0);break;case 7:119>=a?(e=testBitOnRegister(6,d),c=!0):127>=a&&(e=testBitOnRegister(7,d),c=!0);break;case 8:135>=a?(e=setBitOnRegister(0,0,d),c=!0):143>=a&&(e=setBitOnRegister(1,0,d),c=!0);break;case 9:151>=a?(e=setBitOnRegister(2,0,d),c=!0):159>=a&&(e=setBitOnRegister(3,0,d),c=!0);break;case 10:167>=a?(e=setBitOnRegister(4,0,d),c=!0):175>=a&&(e=setBitOnRegister(5,0,d),c=!0);break;case 11:183>=a?(e=setBitOnRegister(6,0,d),c=!0):191>=a&&(e=setBitOnRegister(7,0,d),c=!0);break;case 12:199>=a?(e= |
||||
setBitOnRegister(0,1,d),c=!0):207>=a&&(e=setBitOnRegister(1,1,d),c=!0);break;case 13:215>=a?(e=setBitOnRegister(2,1,d),c=!0):223>=a&&(e=setBitOnRegister(3,1,d),c=!0);break;case 14:231>=a?(e=setBitOnRegister(4,1,d),c=!0):239>=a&&(e=setBitOnRegister(5,1,d),c=!0);break;case 15:247>=a?(e=setBitOnRegister(6,1,d),c=!0):255>=a&&(e=setBitOnRegister(7,1,d),c=!0)}switch(f){case 0:Cpu.registerB=e;break;case 1:Cpu.registerC=e;break;case 2:Cpu.registerD=e;break;case 3:Cpu.registerE=e;break;case 4:Cpu.registerH= |
||||
e;break;case 5:Cpu.registerL=e;break;case 6:(4>g||7<g)&&eightBitStoreSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL),e);break;case 7:Cpu.registerA=e}c&&(b=4);return b} |
||||
function executeOpcode$$1(a){var b=Cpu.programCounter;b=u16Portable(b+1);Cpu.isHaltBug&&(b=u16Portable(b-1));Cpu.programCounter=b;switch((a&240)>>4){case 0:return handleOpcode0x(a);case 1:return handleOpcode1x(a);case 2:return handleOpcode2x(a);case 3:return handleOpcode3x(a);case 4:return handleOpcode4x(a);case 5:return handleOpcode5x(a);case 6:return handleOpcode6x(a);case 7:return handleOpcode7x(a);case 8:return handleOpcode8x(a);case 9:return handleOpcode9x(a);case 10:return handleOpcodeAx(a); |
||||
case 11:return handleOpcodeBx(a);case 12:return handleOpcodeCx(a);case 13:return handleOpcodeDx(a);case 14:return handleOpcodeEx(a);default:return handleOpcodeFx(a)}}function eightBitLoadSyncCycles(a){syncCycles(4);return eightBitLoadFromGBMemoryWithTraps(a)}function eightBitStoreSyncCycles(a,b){syncCycles(4);eightBitStoreIntoGBMemoryWithTraps(a,b)}function sixteenBitLoadSyncCycles(a){syncCycles(8);return sixteenBitLoadFromGBMemory(a)} |
||||
function sixteenBitStoreSyncCycles(a,b){syncCycles(8);sixteenBitStoreIntoGBMemoryWithTraps(a,b)}function getDataByteOne(){syncCycles(4);return eightBitLoadFromGBMemory(Cpu.programCounter)}function getDataByteTwo(){syncCycles(4);return eightBitLoadFromGBMemory(u16Portable(Cpu.programCounter+1))}function getConcatenatedDataByte(){return concatenateBytes(getDataByteTwo(),getDataByteOne())} |
||||
function handleOpcode0x(a){switch(a){case 0:return 4;case 1:return a=getConcatenatedDataByte(),Cpu.registerB=splitHighByte(a),Cpu.registerC=splitLowByte(a),Cpu.programCounter=u16Portable(Cpu.programCounter+2),4;case 2:return eightBitStoreSyncCycles(concatenateBytes(Cpu.registerB,Cpu.registerC),Cpu.registerA),4;case 3:return a=concatenateBytes(Cpu.registerB,Cpu.registerC),a++,Cpu.registerB=splitHighByte(a),Cpu.registerC=splitLowByte(a),8;case 4:return a=Cpu.registerB,checkAndSetEightBitHalfCarryFlag(a, |
||||
1),a=u8Portable(a+1),Cpu.registerB=a,setZeroFlag$$1(0===a),setSubtractFlag(0),4;case 5:return a=Cpu.registerB,checkAndSetEightBitHalfCarryFlag(a,-1),a=u8Portable(a-1),Cpu.registerB=a,setZeroFlag$$1(0===a),setSubtractFlag(1),4;case 6:return Cpu.registerB=getDataByteOne(),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 7:return a=Cpu.registerA,setCarryFlag(128===(a&128)),Cpu.registerA=rotateByteLeft(a),setZeroFlag$$1(0),setSubtractFlag(0),setHalfCarryFlag(0),4;case 8:return sixteenBitStoreSyncCycles(getConcatenatedDataByte(), |
||||
Cpu.stackPointer),Cpu.programCounter=u16Portable(Cpu.programCounter+2),4;case 9:a=concatenateBytes(Cpu.registerH,Cpu.registerL);var b=concatenateBytes(Cpu.registerB,Cpu.registerC);checkAndSetSixteenBitFlagsAddOverflow(a,b,!1);a=u16Portable(a+b);Cpu.registerH=splitHighByte(a);Cpu.registerL=splitLowByte(a);setSubtractFlag(0);return 8;case 10:return Cpu.registerA=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerB,Cpu.registerC)),4;case 11:return a=concatenateBytes(Cpu.registerB,Cpu.registerC),a=u16Portable(a- |
||||
1),Cpu.registerB=splitHighByte(a),Cpu.registerC=splitLowByte(a),8;case 12:return a=Cpu.registerC,checkAndSetEightBitHalfCarryFlag(a,1),a=u8Portable(a+1),Cpu.registerC=a,setZeroFlag$$1(0===a),setSubtractFlag(0),4;case 13:return a=Cpu.registerC,checkAndSetEightBitHalfCarryFlag(a,-1),a=u8Portable(a-1),Cpu.registerC=a,setZeroFlag$$1(0===a),setSubtractFlag(1),4;case 14:return Cpu.registerC=getDataByteOne(),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 15:return a=Cpu.registerA,setCarryFlag(0< |
||||
(a&1)),Cpu.registerA=rotateByteRight(a),setZeroFlag$$1(0),setSubtractFlag(0),setHalfCarryFlag(0),4}return-1} |
||||
function handleOpcode1x(a){switch(a){case 16:if(Cpu.GBCEnabled&&(a=eightBitLoadSyncCycles(Cpu.memoryLocationSpeedSwitch),checkBitOnByte(0,a)))return a=resetBitOnByte(0,a),checkBitOnByte(7,a)?(Cpu.GBCDoubleSpeed=!1,a=resetBitOnByte(7,a)):(Cpu.GBCDoubleSpeed=!0,a=setBitOnByte(7,a)),eightBitStoreSyncCycles(Cpu.memoryLocationSpeedSwitch,a),68;Cpu.isStopped=!0;Cpu.programCounter=u16Portable(Cpu.programCounter+1);return 4;case 17:return a=getConcatenatedDataByte(),Cpu.registerD=splitHighByte(a),Cpu.registerE= |
||||
splitLowByte(a),Cpu.programCounter=u16Portable(Cpu.programCounter+2),4;case 18:return eightBitStoreSyncCycles(concatenateBytes(Cpu.registerD,Cpu.registerE),Cpu.registerA),4;case 19:return a=concatenateBytes(Cpu.registerD,Cpu.registerE),a=u16Portable(a+1),Cpu.registerD=splitHighByte(a),Cpu.registerE=splitLowByte(a),8;case 20:return a=Cpu.registerD,checkAndSetEightBitHalfCarryFlag(a,1),a=u8Portable(a+1),Cpu.registerD=a,setZeroFlag$$1(0===Cpu.registerD),setSubtractFlag(0),4;case 21:return a=Cpu.registerD, |
||||
checkAndSetEightBitHalfCarryFlag(a,-1),a=u8Portable(a-1),Cpu.registerD=a,setZeroFlag$$1(0===Cpu.registerD),setSubtractFlag(1),4;case 22:return Cpu.registerD=getDataByteOne(),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 23:return a=128===(Cpu.registerA&128),Cpu.registerA=rotateByteLeftThroughCarry(Cpu.registerA),setCarryFlag(a),setZeroFlag$$1(0),setSubtractFlag(0),setHalfCarryFlag(0),4;case 24:return relativeJump(getDataByteOne()),8;case 25:a=concatenateBytes(Cpu.registerH,Cpu.registerL); |
||||
var b=concatenateBytes(Cpu.registerD,Cpu.registerE);checkAndSetSixteenBitFlagsAddOverflow(a,b,!1);a=u16Portable(a+b);Cpu.registerH=splitHighByte(a);Cpu.registerL=splitLowByte(a);setSubtractFlag(0);return 8;case 26:return a=concatenateBytes(Cpu.registerD,Cpu.registerE),Cpu.registerA=eightBitLoadSyncCycles(a),4;case 27:return a=concatenateBytes(Cpu.registerD,Cpu.registerE),a=u16Portable(a-1),Cpu.registerD=splitHighByte(a),Cpu.registerE=splitLowByte(a),8;case 28:return a=Cpu.registerE,checkAndSetEightBitHalfCarryFlag(a, |
||||
1),a=u8Portable(a+1),Cpu.registerE=a,setZeroFlag$$1(0===a),setSubtractFlag(0),4;case 29:return a=Cpu.registerE,checkAndSetEightBitHalfCarryFlag(a,-1),a=u8Portable(a-1),Cpu.registerE=a,setZeroFlag$$1(0===a),setSubtractFlag(1),4;case 30:return Cpu.registerE=getDataByteOne(),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 31:return a=1===(Cpu.registerA&1),Cpu.registerA=rotateByteRightThroughCarry(Cpu.registerA),setCarryFlag(a),setZeroFlag$$1(0),setSubtractFlag(0),setHalfCarryFlag(0),4}return-1} |
||||
function handleOpcode2x(a){switch(a){case 32:return 0===getZeroFlag$$1()?relativeJump(getDataByteOne()):Cpu.programCounter=u16Portable(Cpu.programCounter+1),8;case 33:return a=getConcatenatedDataByte(),Cpu.registerH=splitHighByte(a),Cpu.registerL=splitLowByte(a),Cpu.programCounter=u16Portable(Cpu.programCounter+2),4;case 34:return a=concatenateBytes(Cpu.registerH,Cpu.registerL),eightBitStoreSyncCycles(a,Cpu.registerA),a=u16Portable(a+1),Cpu.registerH=splitHighByte(a),Cpu.registerL=splitLowByte(a), |
||||
4;case 35:return a=concatenateBytes(Cpu.registerH,Cpu.registerL),a=u16Portable(a+1),Cpu.registerH=splitHighByte(a),Cpu.registerL=splitLowByte(a),8;case 36:return a=Cpu.registerH,checkAndSetEightBitHalfCarryFlag(a,1),a=u8Portable(a+1),Cpu.registerH=a,setZeroFlag$$1(0===a),setSubtractFlag(0),4;case 37:return a=Cpu.registerH,checkAndSetEightBitHalfCarryFlag(a,-1),a=u8Portable(a-1),Cpu.registerH=a,setZeroFlag$$1(0===a),setSubtractFlag(1),4;case 38:return Cpu.registerH=getDataByteOne(),Cpu.programCounter= |
||||
u16Portable(Cpu.programCounter+1),4;case 39:a=0;0<getHalfCarryFlag()&&(a|=6);0<getCarryFlag$$1()&&(a|=96);var b=Cpu.registerA;0<getSubtractFlag()?b=u8Portable(b-a):(9<(b&15)&&(a|=6),153<b&&(a|=96),b=u8Portable(b+a));setZeroFlag$$1(0===b);setCarryFlag(0!==(a&96));setHalfCarryFlag(0);Cpu.registerA=b;return 4;case 40:return 0<getZeroFlag$$1()?relativeJump(getDataByteOne()):Cpu.programCounter=u16Portable(Cpu.programCounter+1),8;case 41:return a=concatenateBytes(Cpu.registerH,Cpu.registerL),checkAndSetSixteenBitFlagsAddOverflow(a, |
||||
a,!1),a=u16Portable(2*a),Cpu.registerH=splitHighByte(a),Cpu.registerL=splitLowByte(a),setSubtractFlag(0),8;case 42:return a=concatenateBytes(Cpu.registerH,Cpu.registerL),Cpu.registerA=eightBitLoadSyncCycles(a),a=u16Portable(a+1),Cpu.registerH=splitHighByte(a),Cpu.registerL=splitLowByte(a),4;case 43:return a=concatenateBytes(Cpu.registerH,Cpu.registerL),a=u16Portable(a-1),Cpu.registerH=splitHighByte(a),Cpu.registerL=splitLowByte(a),8;case 44:return a=Cpu.registerL,checkAndSetEightBitHalfCarryFlag(a, |
||||
1),a=u8Portable(a+1),Cpu.registerL=a,setZeroFlag$$1(0===a),setSubtractFlag(0),4;case 45:return a=Cpu.registerL,checkAndSetEightBitHalfCarryFlag(a,-1),a=u8Portable(a-1),Cpu.registerL=a,setZeroFlag$$1(0===a),setSubtractFlag(1),4;case 46:return Cpu.registerL=getDataByteOne(),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 47:return Cpu.registerA=~Cpu.registerA,setSubtractFlag(1),setHalfCarryFlag(1),4}return-1} |
||||
function handleOpcode3x(a){switch(a){case 48:return 0===getCarryFlag$$1()?relativeJump(getDataByteOne()):Cpu.programCounter=u16Portable(Cpu.programCounter+1),8;case 49:return Cpu.stackPointer=getConcatenatedDataByte(),Cpu.programCounter=u16Portable(Cpu.programCounter+2),4;case 50:return a=concatenateBytes(Cpu.registerH,Cpu.registerL),eightBitStoreSyncCycles(a,Cpu.registerA),a=u16Portable(a-1),Cpu.registerH=splitHighByte(a),Cpu.registerL=splitLowByte(a),4;case 51:return Cpu.stackPointer=u16Portable(Cpu.stackPointer+ |
||||
1),8;case 52:a=concatenateBytes(Cpu.registerH,Cpu.registerL);var b=eightBitLoadSyncCycles(a);checkAndSetEightBitHalfCarryFlag(b,1);b=u8Portable(b+1);setZeroFlag$$1(0===b);setSubtractFlag(0);eightBitStoreSyncCycles(a,b);return 4;case 53:return a=concatenateBytes(Cpu.registerH,Cpu.registerL),b=eightBitLoadSyncCycles(a),checkAndSetEightBitHalfCarryFlag(b,-1),b=u8Portable(b-1),setZeroFlag$$1(0===b),setSubtractFlag(1),eightBitStoreSyncCycles(a,b),4;case 54:return eightBitStoreSyncCycles(concatenateBytes(Cpu.registerH, |
||||
Cpu.registerL),getDataByteOne()),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 55:return setSubtractFlag(0),setHalfCarryFlag(0),setCarryFlag(1),4;case 56:return 1===getCarryFlag$$1()?relativeJump(getDataByteOne()):Cpu.programCounter=u16Portable(Cpu.programCounter+1),8;case 57:return a=concatenateBytes(Cpu.registerH,Cpu.registerL),checkAndSetSixteenBitFlagsAddOverflow(a,Cpu.stackPointer,!1),a=u16Portable(a+Cpu.stackPointer),Cpu.registerH=splitHighByte(a),Cpu.registerL=splitLowByte(a), |
||||
setSubtractFlag(0),8;case 58:return a=concatenateBytes(Cpu.registerH,Cpu.registerL),Cpu.registerA=eightBitLoadSyncCycles(a),a=u16Portable(a-1),Cpu.registerH=splitHighByte(a),Cpu.registerL=splitLowByte(a),4;case 59:return Cpu.stackPointer=u16Portable(Cpu.stackPointer-1),8;case 60:return a=Cpu.registerA,checkAndSetEightBitHalfCarryFlag(a,1),a=u8Portable(a+1),Cpu.registerA=a,setZeroFlag$$1(0===a),setSubtractFlag(0),4;case 61:return a=Cpu.registerA,checkAndSetEightBitHalfCarryFlag(a,-1),a=u8Portable(a- |
||||
1),Cpu.registerA=a,setZeroFlag$$1(0===a),setSubtractFlag(1),4;case 62:return Cpu.registerA=getDataByteOne(),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 63:return setSubtractFlag(0),setHalfCarryFlag(0),setCarryFlag(0>=getCarryFlag$$1()),4}return-1} |
||||
function handleOpcode4x(a){switch(a){case 64:return 4;case 65:return Cpu.registerB=Cpu.registerC,4;case 66:return Cpu.registerB=Cpu.registerD,4;case 67:return Cpu.registerB=Cpu.registerE,4;case 68:return Cpu.registerB=Cpu.registerH,4;case 69:return Cpu.registerB=Cpu.registerL,4;case 70:return Cpu.registerB=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),4;case 71:return Cpu.registerB=Cpu.registerA,4;case 72:return Cpu.registerC=Cpu.registerB,4;case 73:return 4;case 74:return Cpu.registerC= |
||||
Cpu.registerD,4;case 75:return Cpu.registerC=Cpu.registerE,4;case 76:return Cpu.registerC=Cpu.registerH,4;case 77:return Cpu.registerC=Cpu.registerL,4;case 78:return Cpu.registerC=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),4;case 79:return Cpu.registerC=Cpu.registerA,4}return-1} |
||||
function handleOpcode5x(a){switch(a){case 80:return Cpu.registerD=Cpu.registerB,4;case 81:return Cpu.registerD=Cpu.registerC,4;case 82:return 4;case 83:return Cpu.registerD=Cpu.registerE,4;case 84:return Cpu.registerD=Cpu.registerH,4;case 85:return Cpu.registerD=Cpu.registerL,4;case 86:return Cpu.registerD=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),4;case 87:return Cpu.registerD=Cpu.registerA,4;case 88:return Cpu.registerE=Cpu.registerB,4;case 89:return Cpu.registerE=Cpu.registerC, |
||||
4;case 90:return Cpu.registerE=Cpu.registerD,4;case 91:return 4;case 92:return Cpu.registerE=Cpu.registerH,4;case 93:return Cpu.registerE=Cpu.registerL,4;case 94:return Cpu.registerE=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),4;case 95:return Cpu.registerE=Cpu.registerA,4}return-1} |
||||
function handleOpcode6x(a){switch(a){case 96:return Cpu.registerH=Cpu.registerB,4;case 97:return Cpu.registerH=Cpu.registerC,4;case 98:return Cpu.registerH=Cpu.registerD,4;case 99:return Cpu.registerH=Cpu.registerE,4;case 100:return Cpu.registerH=Cpu.registerH,4;case 101:return Cpu.registerH=Cpu.registerL,4;case 102:return Cpu.registerH=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),4;case 103:return Cpu.registerH=Cpu.registerA,4;case 104:return Cpu.registerL=Cpu.registerB, |
||||
4;case 105:return Cpu.registerL=Cpu.registerC,4;case 106:return Cpu.registerL=Cpu.registerD,4;case 107:return Cpu.registerL=Cpu.registerE,4;case 108:return Cpu.registerL=Cpu.registerH,4;case 109:return Cpu.registerL=Cpu.registerL,4;case 110:return Cpu.registerL=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),4;case 111:return Cpu.registerL=Cpu.registerA,4}return-1} |
||||
function handleOpcode7x(a){switch(a){case 112:return eightBitStoreSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL),Cpu.registerB),4;case 113:return eightBitStoreSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL),Cpu.registerC),4;case 114:return eightBitStoreSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL),Cpu.registerD),4;case 115:return eightBitStoreSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL),Cpu.registerE),4;case 116:return eightBitStoreSyncCycles(concatenateBytes(Cpu.registerH, |
||||
Cpu.registerL),Cpu.registerH),4;case 117:return eightBitStoreSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL),Cpu.registerL),4;case 118:return Memory.isHblankHdmaActive||Cpu.enableHalt(),4;case 119:return eightBitStoreSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL),Cpu.registerA),4;case 120:return Cpu.registerA=Cpu.registerB,4;case 121:return Cpu.registerA=Cpu.registerC,4;case 122:return Cpu.registerA=Cpu.registerD,4;case 123:return Cpu.registerA=Cpu.registerE,4;case 124:return Cpu.registerA= |
||||
Cpu.registerH,4;case 125:return Cpu.registerA=Cpu.registerL,4;case 126:return Cpu.registerA=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),4;case 127:return 4}return-1} |
||||
function handleOpcode8x(a){switch(a){case 128:return addARegister(Cpu.registerB),4;case 129:return addARegister(Cpu.registerC),4;case 130:return addARegister(Cpu.registerD),4;case 131:return addARegister(Cpu.registerE),4;case 132:return addARegister(Cpu.registerH),4;case 133:return addARegister(Cpu.registerL),4;case 134:return a=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),addARegister(a),4;case 135:return addARegister(Cpu.registerA),4;case 136:return addAThroughCarryRegister(Cpu.registerB), |
||||
4;case 137:return addAThroughCarryRegister(Cpu.registerC),4;case 138:return addAThroughCarryRegister(Cpu.registerD),4;case 139:return addAThroughCarryRegister(Cpu.registerE),4;case 140:return addAThroughCarryRegister(Cpu.registerH),4;case 141:return addAThroughCarryRegister(Cpu.registerL),4;case 142:return a=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),addAThroughCarryRegister(a),4;case 143:return addAThroughCarryRegister(Cpu.registerA),4}return-1} |
||||
function handleOpcode9x(a){switch(a){case 144:return subARegister(Cpu.registerB),4;case 145:return subARegister(Cpu.registerC),4;case 146:return subARegister(Cpu.registerD),4;case 147:return subARegister(Cpu.registerE),4;case 148:return subARegister(Cpu.registerH),4;case 149:return subARegister(Cpu.registerL),4;case 150:return a=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),subARegister(a),4;case 151:return subARegister(Cpu.registerA),4;case 152:return subAThroughCarryRegister(Cpu.registerB), |
||||
4;case 153:return subAThroughCarryRegister(Cpu.registerC),4;case 154:return subAThroughCarryRegister(Cpu.registerD),4;case 155:return subAThroughCarryRegister(Cpu.registerE),4;case 156:return subAThroughCarryRegister(Cpu.registerH),4;case 157:return subAThroughCarryRegister(Cpu.registerL),4;case 158:return a=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),subAThroughCarryRegister(a),4;case 159:return subAThroughCarryRegister(Cpu.registerA),4}return-1} |
||||
function handleOpcodeAx(a){switch(a){case 160:return andARegister(Cpu.registerB),4;case 161:return andARegister(Cpu.registerC),4;case 162:return andARegister(Cpu.registerD),4;case 163:return andARegister(Cpu.registerE),4;case 164:return andARegister(Cpu.registerH),4;case 165:return andARegister(Cpu.registerL),4;case 166:return a=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),andARegister(a),4;case 167:return andARegister(Cpu.registerA),4;case 168:return xorARegister(Cpu.registerB), |
||||
4;case 169:return xorARegister(Cpu.registerC),4;case 170:return xorARegister(Cpu.registerD),4;case 171:return xorARegister(Cpu.registerE),4;case 172:return xorARegister(Cpu.registerH),4;case 173:return xorARegister(Cpu.registerL),4;case 174:return a=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),xorARegister(a),4;case 175:return xorARegister(Cpu.registerA),4}return-1} |
||||
function handleOpcodeBx(a){switch(a){case 176:return orARegister(Cpu.registerB),4;case 177:return orARegister(Cpu.registerC),4;case 178:return orARegister(Cpu.registerD),4;case 179:return orARegister(Cpu.registerE),4;case 180:return orARegister(Cpu.registerH),4;case 181:return orARegister(Cpu.registerL),4;case 182:return a=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),orARegister(a),4;case 183:return orARegister(Cpu.registerA),4;case 184:return cpARegister(Cpu.registerB),4; |
||||
case 185:return cpARegister(Cpu.registerC),4;case 186:return cpARegister(Cpu.registerD),4;case 187:return cpARegister(Cpu.registerE),4;case 188:return cpARegister(Cpu.registerH),4;case 189:return cpARegister(Cpu.registerL),4;case 190:return a=eightBitLoadSyncCycles(concatenateBytes(Cpu.registerH,Cpu.registerL)),cpARegister(a),4;case 191:return cpARegister(Cpu.registerA),4}return-1} |
||||
function handleOpcodeCx(a){switch(a){case 192:return 0===getZeroFlag$$1()?(a=Cpu.stackPointer,Cpu.programCounter=sixteenBitLoadSyncCycles(a),Cpu.stackPointer=u16Portable(a+2),12):8;case 193:return a=sixteenBitLoadSyncCycles(Cpu.stackPointer),Cpu.stackPointer=u16Portable(Cpu.stackPointer+2),Cpu.registerB=splitHighByte(a),Cpu.registerC=splitLowByte(a),4;case 194:if(0===getZeroFlag$$1())return Cpu.programCounter=getConcatenatedDataByte(),8;Cpu.programCounter=u16Portable(Cpu.programCounter+2);return 12; |
||||
case 195:return Cpu.programCounter=getConcatenatedDataByte(),8;case 196:if(0===getZeroFlag$$1())return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,u16Portable(Cpu.programCounter+2)),Cpu.programCounter=getConcatenatedDataByte(),8;Cpu.programCounter=u16Portable(Cpu.programCounter+2);return 12;case 197:return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,concatenateBytes(Cpu.registerB,Cpu.registerC)),8;case 198:return addARegister(getDataByteOne()), |
||||
Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 199:return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,Cpu.programCounter),Cpu.programCounter=0,8;case 200:return 1===getZeroFlag$$1()?(a=Cpu.stackPointer,Cpu.programCounter=sixteenBitLoadSyncCycles(a),Cpu.stackPointer=u16Portable(a+2),12):8;case 201:return a=Cpu.stackPointer,Cpu.programCounter=sixteenBitLoadSyncCycles(a),Cpu.stackPointer=u16Portable(a+2),8;case 202:if(1===getZeroFlag$$1())return Cpu.programCounter= |
||||
getConcatenatedDataByte(),8;Cpu.programCounter=u16Portable(Cpu.programCounter+2);return 12;case 203:return a=handleCbOpcode(getDataByteOne()),Cpu.programCounter=u16Portable(Cpu.programCounter+1),a;case 204:if(1===getZeroFlag$$1())return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,Cpu.programCounter+2),Cpu.programCounter=getConcatenatedDataByte(),8;Cpu.programCounter=u16Portable(Cpu.programCounter+2);return 12;case 205:return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer= |
||||
a,sixteenBitStoreSyncCycles(a,u16Portable(Cpu.programCounter+2)),Cpu.programCounter=getConcatenatedDataByte(),8;case 206:return addAThroughCarryRegister(getDataByteOne()),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 207:return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,Cpu.programCounter),Cpu.programCounter=8}return-1} |
||||
function handleOpcodeDx(a){switch(a){case 208:return 0===getCarryFlag$$1()?(a=Cpu.stackPointer,Cpu.programCounter=sixteenBitLoadSyncCycles(a),Cpu.stackPointer=u16Portable(a+2),12):8;case 209:a=Cpu.stackPointer;var b=sixteenBitLoadSyncCycles(a);Cpu.stackPointer=u16Portable(a+2);Cpu.registerD=splitHighByte(b);Cpu.registerE=splitLowByte(b);return 4;case 210:if(0===getCarryFlag$$1())return Cpu.programCounter=getConcatenatedDataByte(),8;Cpu.programCounter=u16Portable(Cpu.programCounter+2);return 12;case 212:if(0=== |
||||
getCarryFlag$$1())return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,Cpu.programCounter+2),Cpu.programCounter=getConcatenatedDataByte(),8;Cpu.programCounter=u16Portable(Cpu.programCounter+2);return 12;case 213:return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,concatenateBytes(Cpu.registerD,Cpu.registerE)),8;case 214:return subARegister(getDataByteOne()),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 215:return a= |
||||
u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,Cpu.programCounter),Cpu.programCounter=16,8;case 216:return 1===getCarryFlag$$1()?(a=Cpu.stackPointer,Cpu.programCounter=sixteenBitLoadSyncCycles(a),Cpu.stackPointer=u16Portable(a+2),12):8;case 217:return a=Cpu.stackPointer,Cpu.programCounter=sixteenBitLoadSyncCycles(a),setInterrupts(!0),Cpu.stackPointer=u16Portable(a+2),8;case 218:if(1===getCarryFlag$$1())return Cpu.programCounter=getConcatenatedDataByte(),8;Cpu.programCounter= |
||||
u16Portable(Cpu.programCounter+2);return 12;case 220:if(1===getCarryFlag$$1())return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,u16Portable(Cpu.programCounter+2)),Cpu.programCounter=getConcatenatedDataByte(),8;Cpu.programCounter=u16Portable(Cpu.programCounter+2);return 12;case 222:return subAThroughCarryRegister(getDataByteOne()),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 223:return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a, |
||||
Cpu.programCounter),Cpu.programCounter=24,8}return-1} |
||||
function handleOpcodeEx(a){switch(a){case 224:return a=getDataByteOne(),eightBitStoreSyncCycles(65280+a,Cpu.registerA),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 225:a=Cpu.stackPointer;var b=sixteenBitLoadSyncCycles(a);Cpu.stackPointer=u16Portable(a+2);Cpu.registerH=splitHighByte(b);Cpu.registerL=splitLowByte(b);return 4;case 226:return eightBitStoreSyncCycles(65280+Cpu.registerC,Cpu.registerA),4;case 229:return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a, |
||||
concatenateBytes(Cpu.registerH,Cpu.registerL)),8;case 230:return andARegister(getDataByteOne()),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 231:return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,Cpu.programCounter),Cpu.programCounter=32,8;case 232:return a=i8Portable(getDataByteOne()),checkAndSetSixteenBitFlagsAddOverflow(Cpu.stackPointer,a,!0),Cpu.stackPointer=u16Portable(Cpu.stackPointer+a),setZeroFlag$$1(0),setSubtractFlag(0),Cpu.programCounter= |
||||
u16Portable(Cpu.programCounter+1),12;case 233:return Cpu.programCounter=concatenateBytes(Cpu.registerH,Cpu.registerL),4;case 234:return eightBitStoreSyncCycles(getConcatenatedDataByte(),Cpu.registerA),Cpu.programCounter=u16Portable(Cpu.programCounter+2),4;case 238:return xorARegister(getDataByteOne()),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 239:return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,Cpu.programCounter),Cpu.programCounter=40,8}return-1} |
||||
function handleOpcodeFx(a){switch(a){case 240:return a=getDataByteOne(),Cpu.registerA=u8Portable(eightBitLoadSyncCycles(65280+a)),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 241:a=Cpu.stackPointer;var b=sixteenBitLoadSyncCycles(a);Cpu.stackPointer=u16Portable(a+2);Cpu.registerA=splitHighByte(b);Cpu.registerF=splitLowByte(b);return 4;case 242:return Cpu.registerA=u8Portable(eightBitLoadSyncCycles(65280+Cpu.registerC)),4;case 243:return setInterrupts(!1),4;case 245:return a=u16Portable(Cpu.stackPointer- |
||||
2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,concatenateBytes(Cpu.registerA,Cpu.registerF)),8;case 246:return orARegister(getDataByteOne()),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 247:return a=u16Portable(Cpu.stackPointer-2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,Cpu.programCounter),Cpu.programCounter=48,8;case 248:return b=i8Portable(getDataByteOne()),a=Cpu.stackPointer,setZeroFlag$$1(0),setSubtractFlag(0),checkAndSetSixteenBitFlagsAddOverflow(a,b,!0),a=u16Portable(a+ |
||||
b),Cpu.registerH=splitHighByte(a),Cpu.registerL=splitLowByte(a),Cpu.programCounter=u16Portable(Cpu.programCounter+1),8;case 249:return Cpu.stackPointer=concatenateBytes(Cpu.registerH,Cpu.registerL),8;case 250:return Cpu.registerA=eightBitLoadSyncCycles(getConcatenatedDataByte()),Cpu.programCounter=u16Portable(Cpu.programCounter+2),4;case 251:return setInterrupts(!0),4;case 254:return cpARegister(getDataByteOne()),Cpu.programCounter=u16Portable(Cpu.programCounter+1),4;case 255:return a=u16Portable(Cpu.stackPointer- |
||||
2),Cpu.stackPointer=a,sixteenBitStoreSyncCycles(a,Cpu.programCounter),Cpu.programCounter=56,8}return-1}var Cycles=function(){function a(){}a.cyclesPerCycleSet=2E9;a.cycleSets=0;a.cycles=0;return a}();function getCyclesPerCycleSet(){return Cycles.cyclesPerCycleSet}function getCycleSets(){return Cycles.cycleSets}function getCycles(){return Cycles.cycles} |
||||
function trackCyclesRan(a){var b=Cycles.cycles;b+=a;b>=Cycles.cyclesPerCycleSet&&(Cycles.cycleSets+=1,b-=Cycles.cyclesPerCycleSet);Cycles.cycles=b}function resetCycles(){Cycles.cyclesPerCycleSet=2E9;Cycles.cycleSets=0;Cycles.cycles=0} |
||||
function syncCycles(a){0<Memory.DMACycles&&(a+=Memory.DMACycles,Memory.DMACycles=0);Cpu.currentCycles+=a;Cpu.isStopped||(Config.graphicsBatchProcessing?(Graphics.currentCycles+=a,batchProcessGraphics()):updateGraphics(a),Config.audioBatchProcessing?(Sound.currentCycles+=a,batchProcessAudio()):updateSound(a),updateSerial(a));Config.timersBatchProcessing?(Timers.currentCycles+=a,batchProcessTimers()):updateTimers(a);trackCyclesRan(a)} |
||||
var Execute=function(){function a(){}a.stepsPerStepSet=2E9;a.stepSets=0;a.steps=0;a.RESPONSE_CONDITION_ERROR=-1;a.RESPONSE_CONDITION_FRAME=0;a.RESPONSE_CONDITION_AUDIO=1;a.RESPONSE_CONDITION_BREAKPOINT=2;return a}();function getStepsPerStepSet(){return Execute.stepsPerStepSet}function getStepSets(){return Execute.stepSets}function getSteps(){return Execute.steps} |
||||
function trackStepsRan(a){var b=Execute.steps;b+=a;b>=Execute.stepsPerStepSet&&(Execute.stepSets+=1,b-=Execute.stepsPerStepSet);Execute.steps=b}function resetSteps(){Execute.stepsPerStepSet=2E9;Execute.stepSets=0;Execute.steps=0}function executeMultipleFrames(a){for(var b=0,c=0;c<a&&0<=b;)b=executeFrame(),c+=1;return 0>b?b:0}function executeFrame(){return executeUntilCondition(!0,-1)}function executeFrameAndCheckAudio(a){void 0===a&&(a=0);return executeUntilCondition(!0,a)} |
||||
function executeUntilCondition(a,b){void 0===b&&(b=-1);a=1024;0<b?a=b:0>b&&(a=-1);for(var c=!1,d=!1,e=!1;!(c||d||e||Breakpoints.reachedBreakpoint);)b=executeStep(),0>b?c=!0:Cpu.currentCycles>=Cpu.MAX_CYCLES_PER_FRAME()?d=!0:-1<a&&getNumberOfSamplesInAudioBuffer()>=a&&(e=!0);if(d)return Cpu.currentCycles-=Cpu.MAX_CYCLES_PER_FRAME(),Execute.RESPONSE_CONDITION_FRAME;if(e)return Execute.RESPONSE_CONDITION_AUDIO;if(Breakpoints.reachedBreakpoint)return Breakpoints.reachedBreakpoint=!1,Execute.RESPONSE_CONDITION_BREAKPOINT; |
||||
Cpu.programCounter=u16Portable(Cpu.programCounter-1);return-1} |
||||
function executeStep(){setHasCoreStarted(!0);if(Cpu.isHaltBug){var a=eightBitLoadFromGBMemory(Cpu.programCounter);a=executeOpcode$$1(a);syncCycles(a);Cpu.exitHaltAndStop()}a=checkInterrupts();0<a&&syncCycles(a);a=4;Cpu.isHalted()||Cpu.isStopped||(a=eightBitLoadFromGBMemory(Cpu.programCounter),a=executeOpcode$$1(a));Cpu.registerF&=240;if(0>=a)return a;syncCycles(a);trackStepsRan(1);Cpu.programCounter===Breakpoints.programCounter&&(Breakpoints.reachedBreakpoint=!0);return a} |
||||
memory.size()<WASMBOY_WASM_PAGES&&memory.grow(WASMBOY_WASM_PAGES-memory.size());var hasStarted=!1;function setHasCoreStarted(a){hasStarted=a}function hasCoreStarted(){return hasStarted} |
||||
function config(a,b,c,d,e,f,g,k,h,l){Config.enableBootRom=0<a;Config.useGbcWhenAvailable=0<b;Config.audioBatchProcessing=0<c;Config.graphicsBatchProcessing=0<d;Config.timersBatchProcessing=0<e;Config.graphicsDisableScanlineRendering=0<f;Config.audioAccumulateSamples=0<g;Config.tileRendering=0<k;Config.tileCaching=0<h;Config.enableAudioDebugging=0<l;initialize()} |
||||
function initialize(){var a=eightBitLoadFromGBMemory(323);Cpu.GBCEnabled=192===a||Config.useGbcWhenAvailable&&128===a?!0:!1;setHasCoreStarted(!1);resetCycles();resetSteps();Cpu.BootROMEnabled=Config.enableBootRom?!0:!1;initializeCpu();initializeCartridge();initializeDma();initializeGraphics();initializePalette();initializeSound();initializeInterrupts();initializeTimers();initializeSerial();initializeVarious()} |
||||
function initializeVarious(){Cpu.GBCEnabled?(eightBitStoreIntoGBMemory(65392,248),eightBitStoreIntoGBMemory(65359,254),eightBitStoreIntoGBMemory(65357,126),eightBitStoreIntoGBMemory(65280,207),eightBitStoreIntoGBMemory(65295,225),eightBitStoreIntoGBMemory(65388,254),eightBitStoreIntoGBMemory(65397,143)):(eightBitStoreIntoGBMemory(65392,255),eightBitStoreIntoGBMemory(65359,255),eightBitStoreIntoGBMemory(65357,255),eightBitStoreIntoGBMemory(65280,207),eightBitStoreIntoGBMemory(65295,225))} |
||||
function isGBC(){return Cpu.GBCEnabled}function getSaveStateMemoryOffset(a,b){return WASMBOY_STATE_LOCATION+a+50*b}function saveState(){Cpu.saveState();Graphics.saveState();Interrupts.saveState();Joypad.saveState();Memory.saveState();Timers.saveState();Sound.saveState();Channel1.saveState();Channel2.saveState();Channel3.saveState();Channel4.saveState();setHasCoreStarted(!1)} |
||||
function loadState(){Cpu.loadState();Graphics.loadState();Interrupts.loadState();Joypad.loadState();Memory.loadState();Timers.loadState();Sound.loadState();Channel1.loadState();Channel2.loadState();Channel3.loadState();Channel4.loadState();setHasCoreStarted(!1);resetCycles();resetSteps()}function getRegisterA(){return Cpu.registerA}function getRegisterB(){return Cpu.registerB}function getRegisterC(){return Cpu.registerC}function getRegisterD(){return Cpu.registerD} |
||||
function getRegisterE(){return Cpu.registerE}function getRegisterH(){return Cpu.registerH}function getRegisterL(){return Cpu.registerL}function getRegisterF(){return Cpu.registerF}function getProgramCounter(){return Cpu.programCounter}function getStackPointer(){return Cpu.stackPointer}function getOpcodeAtProgramCounter(){return eightBitLoadFromGBMemory(Cpu.programCounter)}function getLY(){return Graphics.scanlineRegister}function getScrollX(){return Graphics.scrollX} |
||||
function getScrollY(){return Graphics.scrollY}function getWindowX(){return Graphics.windowX}function getWindowY(){return Graphics.windowY} |
||||
function drawBackgroundMapToWasmMemory(a){var b=Graphics.memoryLocationTileDataSelectZeroStart;Lcd.bgWindowTileDataSelect&&(b=Graphics.memoryLocationTileDataSelectOneStart);var c=Graphics.memoryLocationTileMapSelectZeroStart;Lcd.bgTileMapDisplaySelect&&(c=Graphics.memoryLocationTileMapSelectOneStart);for(var d=0;256>d;d++)for(var e=0;256>e;e++){var f=d,g=e,k=c+32*(f>>3)+(g>>3),h=loadFromVramBank(k,0);h=getTileDataAddress(b,h);var l=f%8;f=g%8;f=7-f;g=0;Cpu.GBCEnabled&&0<a&&(g=loadFromVramBank(k,1)); |
||||
checkBitOnByte(6,g)&&(l=7-l);var n=0;checkBitOnByte(3,g)&&(n=1);k=loadFromVramBank(h+2*l,n);h=loadFromVramBank(h+2*l+1,n);l=0;checkBitOnByte(f,h)&&(l+=1,l<<=1);checkBitOnByte(f,k)&&(l+=1);h=3*(256*d+e);Cpu.GBCEnabled&&0<a?(k=getRgbColorFromPalette(g&7,l,!1),g=getColorComponentFromRgb(0,k),f=getColorComponentFromRgb(1,k),k=getColorComponentFromRgb(2,k),h=BACKGROUND_MAP_LOCATION+h,store(h,g),store(h+1,f),store(h+2,k)):(g=getColorizedGbHexColorFromPalette(l,Graphics.memoryLocationBackgroundPalette), |
||||
h=BACKGROUND_MAP_LOCATION+h,store(h+0,getRedFromHexColor(g)),store(h+1,getGreenFromHexColor(g)),store(h+2,getBlueFromHexColor(g)))}} |
||||
function drawTileDataToWasmMemory(){for(var a=0;23>a;a++)for(var b=0;31>b;b++){var c=0;15<b&&(c=1);var d=a;15<a&&(d-=15);d<<=4;d=15<b?d+(b-15):d+b;var e=Graphics.memoryLocationTileDataSelectOneStart;15<a&&(e=Graphics.memoryLocationTileDataSelectZeroStart);for(var f=Graphics.memoryLocationBackgroundPalette,g=-1,k=-1,h=0;8>h;h++)for(var l=0;5>l;l++){var n=4*(8*l+h),m=eightBitLoadFromGBMemory(Graphics.memoryLocationSpriteAttributesTable+n+2);d===m&&(n=eightBitLoadFromGBMemory(Graphics.memoryLocationSpriteAttributesTable+ |
||||
n+3),m=0,Cpu.GBCEnabled&&checkBitOnByte(3,n)&&(m=1),m===c&&(k=n,h=8,l=5,f=Graphics.memoryLocationSpritePaletteOne,checkBitOnByte(4,k)&&(f=Graphics.memoryLocationSpritePaletteTwo)))}if(Cpu.GBCEnabled&&0>k){h=Graphics.memoryLocationTileMapSelectZeroStart;Lcd.bgTileMapDisplaySelect&&(h=Graphics.memoryLocationTileMapSelectOneStart);l=-1;for(n=0;32>n;n++)for(m=0;32>m;m++){var p=h+32*m+n,r=loadFromVramBank(p,0);d===r&&(l=p,m=n=32)}0<=l&&(g=loadFromVramBank(l,1))}for(h=0;8>h;h++)drawPixelsFromLineOfTile(d, |
||||
e,c,0,7,h,8*b,8*a+h,248,TILE_DATA_LOCATION,!1,f,g,k)}} |
||||
function drawOamToWasmMemory(){for(var a=0;8>a;a++)for(var b=0;5>b;b++){var c=4*(8*b+a);eightBitLoadFromGBMemory(Graphics.memoryLocationSpriteAttributesTable+c);eightBitLoadFromGBMemory(Graphics.memoryLocationSpriteAttributesTable+c+1);var d=eightBitLoadFromGBMemory(Graphics.memoryLocationSpriteAttributesTable+c+2),e=1;Lcd.tallSpriteSize&&(1===d%2&&--d,e+=1);c=eightBitLoadFromGBMemory(Graphics.memoryLocationSpriteAttributesTable+c+3);var f=0;Cpu.GBCEnabled&&checkBitOnByte(3,c)&&(f=1);var g=Graphics.memoryLocationSpritePaletteOne; |
||||
checkBitOnByte(4,c)&&(g=Graphics.memoryLocationSpritePaletteTwo);for(var k=0;k<e;k++)for(var h=0;8>h;h++)drawPixelsFromLineOfTile(d+k,Graphics.memoryLocationTileDataSelectOneStart,f,0,7,h,8*a,16*b+h+8*k,64,OAM_TILES_LOCATION,!1,g,-1,c)}}function getDIV(){return Timers.dividerRegister}function getTIMA(){return Timers.timerCounter}function getTMA(){return Timers.timerModulo}function getTAC(){var a=Timers.timerInputClock;Timers.timerEnabled&&(a=setBitOnByte(2,a));return a} |
||||
function updateDebugGBMemory(){for(var a=0;a<DEBUG_GAMEBOY_MEMORY_SIZE;a++)store(DEBUG_GAMEBOY_MEMORY_LOCATION+a,eightBitLoadFromGBMemoryWithTraps(a));Breakpoints.reachedBreakpoint=!1} |
||||
var WasmBoyCore=Object.freeze({memory,config,hasCoreStarted,saveState,loadState,isGBC,getStepsPerStepSet,getStepSets,getSteps,executeMultipleFrames,executeFrame,executeFrameAndCheckAudio,executeUntilCondition,executeStep,getCyclesPerCycleSet,getCycleSets,getCycles,setJoypadState,getNumberOfSamplesInAudioBuffer,clearAudioBuffer,setManualColorizationPalette,WASMBOY_MEMORY_LOCATION,WASMBOY_MEMORY_SIZE,WASMBOY_WASM_PAGES,ASSEMBLYSCRIPT_MEMORY_LOCATION,ASSEMBLYSCRIPT_MEMORY_SIZE,WASMBOY_STATE_LOCATION, |
||||
WASMBOY_STATE_SIZE,GAMEBOY_INTERNAL_MEMORY_LOCATION,GAMEBOY_INTERNAL_MEMORY_SIZE,VIDEO_RAM_LOCATION,VIDEO_RAM_SIZE,WORK_RAM_LOCATION,WORK_RAM_SIZE,OTHER_GAMEBOY_INTERNAL_MEMORY_LOCATION,OTHER_GAMEBOY_INTERNAL_MEMORY_SIZE,GRAPHICS_OUTPUT_LOCATION,GRAPHICS_OUTPUT_SIZE,GBC_PALETTE_LOCATION,GBC_PALETTE_SIZE,BG_PRIORITY_MAP_LOCATION,BG_PRIORITY_MAP_SIZE,FRAME_LOCATION,FRAME_SIZE,BACKGROUND_MAP_LOCATION,BACKGROUND_MAP_SIZE,TILE_DATA_LOCATION,TILE_DATA_SIZE,OAM_TILES_LOCATION,OAM_TILES_SIZE,AUDIO_BUFFER_LOCATION, |
||||
AUDIO_BUFFER_SIZE,CHANNEL_1_BUFFER_LOCATION,CHANNEL_1_BUFFER_SIZE,CHANNEL_2_BUFFER_LOCATION,CHANNEL_2_BUFFER_SIZE,CHANNEL_3_BUFFER_LOCATION,CHANNEL_3_BUFFER_SIZE,CHANNEL_4_BUFFER_LOCATION,CHANNEL_4_BUFFER_SIZE,CARTRIDGE_RAM_LOCATION,CARTRIDGE_RAM_SIZE,BOOT_ROM_LOCATION,BOOT_ROM_SIZE,CARTRIDGE_ROM_LOCATION,CARTRIDGE_ROM_SIZE,DEBUG_GAMEBOY_MEMORY_LOCATION,DEBUG_GAMEBOY_MEMORY_SIZE,getWasmBoyOffsetFromGameBoyOffset,setProgramCounterBreakpoint,resetProgramCounterBreakpoint,setReadGbMemoryBreakpoint,resetReadGbMemoryBreakpoint, |
||||
setWriteGbMemoryBreakpoint,resetWriteGbMemoryBreakpoint,getRegisterA,getRegisterB,getRegisterC,getRegisterD,getRegisterE,getRegisterH,getRegisterL,getRegisterF,getProgramCounter,getStackPointer,getOpcodeAtProgramCounter,getLY,getScrollX,getScrollY,getWindowX,getWindowY,drawBackgroundMapToWasmMemory,drawTileDataToWasmMemory,drawOamToWasmMemory,getDIV,getTIMA,getTMA,getTAC,updateDebugGBMemory});let getWasmBoyTsCore=async()=>({instance:{exports:WasmBoyCore},byteMemory:memory.wasmByteMemory,type:"TypeScript"}); |
||||
module.exports=getWasmBoyTsCore |
||||
//# sourceMappingURL=getWasmBoyTsCore.closure.cjs.js.map
|
||||
@ -0,0 +1,243 @@
|
||||
let c=new Uint8ClampedArray(9109504),aa={size:()=>9109504,grow:()=>{},wasmByteMemory:c}; |
||||
var ba=65536,ca=67584,da=ca+128,ea=da+23552,fa=ea+93184,ha=fa+196608,ia=ha+147456,ja=ia-ca+15360,ka=ia+15360,la=ka+131072,ma=la+131072,na=ma+131072,oa=na+131072,pa=oa+131072,qa=pa+131072,ra=qa+2560,sa=ra+8258560,ta=sa+65535+1,ua=Math.ceil(ta/1024/64)+1,e=function(){function a(){}a.enableBootRom=!1;a.useGbcWhenAvailable=!0;a.audioBatchProcessing=!1;a.graphicsBatchProcessing=!1;a.timersBatchProcessing=!1;a.graphicsDisableScanlineRendering=!1;a.audioAccumulateSamples=!1;a.tileRendering=!1;a.tileCaching= |
||||
!1;a.enableAudioDebugging=!1;return a}();function va(a,b){a=1<<a&255;f.registerF=0<b?f.registerF|a:f.registerF&(255^a);return f.registerF}function k(a){va(7,a)}function l(a){va(6,a)}function m(a){va(5,a)}function n(a){va(4,a)}function wa(){return f.registerF>>7&1}function xa(){return f.registerF>>4&1}function ya(a,b){0<=b?m(0!==((a&15)+(b&15)&16)):m((Math.abs(b)&15)>(a&15))}function za(a,b){0<=b?n(a>(a+b&255)):n(Math.abs(b)>a)} |
||||
function Aa(a,b,d){d?(a=a^b^a+b,m(0!==(a&16)),n(0!==(a&256))):(d=a+b&65535,n(d<a),m(0!==((a^b^d)&4096)))} |
||||
var p=function(){function a(){}a.bgWhite=15921906;a.bgLightGrey=10526880;a.bgDarkGrey=5789784;a.bgBlack=526344;a.obj0White=15921906;a.obj0LightGrey=10526880;a.obj0DarkGrey=5789784;a.obj0Black=526344;a.obj1White=15921906;a.obj1LightGrey=10526880;a.obj1DarkGrey=5789784;a.obj1Black=526344;return a}(),Ba=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=5439232;a.bgDarkGrey=16728576;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=5439232;a.obj0DarkGrey=16728576;a.obj0Black=0;a.obj1White=16777215; |
||||
a.obj1LightGrey=5439232;a.obj1DarkGrey=16728576;a.obj1Black=0;return a}(),Ca=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16776960;a.bgDarkGrey=16711680;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16776960;a.obj0DarkGrey=16711680;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16776960;a.obj1DarkGrey=16711680;a.obj1Black=0;return a}(),Da=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16756067;a.bgDarkGrey=8663296;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16756067; |
||||
a.obj0DarkGrey=8663296;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),Ea=function(){function a(){}a.bgWhite=0;a.bgLightGrey=33924;a.bgDarkGrey=16768512;a.bgBlack=16777215;a.obj0White=0;a.obj0LightGrey=33924;a.obj0DarkGrey=16768512;a.obj0Black=16777215;a.obj1White=0;a.obj1LightGrey=33924;a.obj1DarkGrey=16768512;a.obj1Black=16777215;return a}(),Fa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=10855845;a.bgDarkGrey=5395026;a.bgBlack= |
||||
0;a.obj0White=16777215;a.obj0LightGrey=10855845;a.obj0DarkGrey=5395026;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=10855845;a.obj1DarkGrey=5395026;a.obj1Black=0;return a}(),Ga=function(){function a(){}a.bgWhite=16777125;a.bgLightGrey=16749716;a.bgDarkGrey=9737471;a.bgBlack=0;a.obj0White=16777125;a.obj0LightGrey=16749716;a.obj0DarkGrey=9737471;a.obj0Black=0;a.obj1White=16777125;a.obj1LightGrey=16749716;a.obj1DarkGrey=9737471;a.obj1Black=0;return a}(),Ha=function(){function a(){}a.bgWhite=16770757; |
||||
a.bgLightGrey=13540484;a.bgDarkGrey=8678185;a.bgBlack=5910792;a.obj0White=16777215;a.obj0LightGrey=16756067;a.obj0DarkGrey=8663296;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),Ia=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=8126257;a.bgDarkGrey=25541;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black= |
||||
0;return a}(),Ja=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=9211102;a.bgDarkGrey=5395084;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),Ka=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=8126257;a.obj0DarkGrey=33792;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey= |
||||
6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),La=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),Oa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16776960;a.bgDarkGrey=8079872;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=6530559;a.obj0DarkGrey=255;a.obj0Black= |
||||
0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),Pa=function(){function a(){}a.bgWhite=10853631;a.bgLightGrey=16776960;a.bgDarkGrey=25344;a.bgBlack=0;a.obj0White=10853631;a.obj0LightGrey=16776960;a.obj0DarkGrey=25344;a.obj0Black=0;a.obj1White=10853631;a.obj1LightGrey=16776960;a.obj1DarkGrey=25344;a.obj1Black=0;return a}(),Qa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey= |
||||
16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),Ra=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=8126257;a.obj0DarkGrey=33792;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black=0;return a}(),Sa=function(){function a(){}a.bgWhite=11908607;a.bgLightGrey=16777108;a.bgDarkGrey=11360834; |
||||
a.bgBlack=0;a.obj0White=0;a.obj0LightGrey=16777215;a.obj0DarkGrey=16745604;a.obj0Black=9714234;a.obj1White=0;a.obj1LightGrey=16777215;a.obj1DarkGrey=16745604;a.obj1Black=9714234;return a}(),Ta=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=11382148;a.bgDarkGrey=4354939;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16741120;a.obj0DarkGrey=9716224;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=5946879;a.obj1DarkGrey=16711680;a.obj1Black=255;return a}(),Ua=function(){function a(){} |
||||
a.bgWhite=16777116;a.bgLightGrey=9745919;a.bgDarkGrey=6526067;a.bgBlack=14906;a.obj0White=16762178;a.obj0LightGrey=16766464;a.obj0DarkGrey=9714176;a.obj0Black=4849664;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black=0;return a}(),Va=function(){function a(){}a.bgWhite=7077632;a.bgLightGrey=16777215;a.bgDarkGrey=16732746;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16777215;a.obj0DarkGrey=6530559;a.obj0Black=255;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey= |
||||
8663296;a.obj1Black=0;return a}(),Wa=function(){function a(){}a.bgWhite=10853631;a.bgLightGrey=16776960;a.bgDarkGrey=25344;a.bgBlack=0;a.obj0White=16737106;a.obj0LightGrey=14024704;a.obj0DarkGrey=6488064;a.obj0Black=0;a.obj1White=255;a.obj1LightGrey=16777215;a.obj1DarkGrey=16777083;a.obj1Black=34047;return a}(),Xa=function(){function a(){}a.bgWhite=16777166;a.bgLightGrey=6549487;a.bgDarkGrey=10257457;a.bgBlack=5921370;a.obj0White=16777215;a.obj0LightGrey=16741120;a.obj0DarkGrey=9716224;a.obj0Black= |
||||
0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),Ya=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=65280;a.obj0DarkGrey=3245056;a.obj0Black=18944;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),Za=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16776960;a.obj0LightGrey= |
||||
16711680;a.obj0DarkGrey=6488064;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),$a=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=11382148;a.bgDarkGrey=4354939;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16756067;a.obj0DarkGrey=16756067;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),q=function(){function a(){}a.bgWhite=p.bgWhite;a.bgLightGrey=p.bgLightGrey;a.bgDarkGrey= |
||||
p.bgDarkGrey;a.bgBlack=p.bgBlack;a.obj0White=p.obj0White;a.obj0LightGrey=p.obj0LightGrey;a.obj0DarkGrey=p.obj0DarkGrey;a.obj0Black=p.obj0Black;a.obj1White=p.obj1White;a.obj1LightGrey=p.obj1LightGrey;a.obj1DarkGrey=p.obj1DarkGrey;a.obj1Black=p.obj1Black;return a}(); |
||||
function ab(a){switch(a){case 0:q.bgWhite=p.bgWhite;q.bgLightGrey=p.bgLightGrey;q.bgDarkGrey=p.bgDarkGrey;q.bgBlack=p.bgBlack;q.obj0White=p.obj0White;q.obj0LightGrey=p.obj0LightGrey;q.obj0DarkGrey=p.obj0DarkGrey;q.obj0Black=p.obj0Black;q.obj1White=p.obj1White;q.obj1LightGrey=p.obj1LightGrey;q.obj1DarkGrey=p.obj1DarkGrey;q.obj1Black=p.obj1Black;break;case 1:q.bgWhite=Da.bgWhite;q.bgLightGrey=Da.bgLightGrey;q.bgDarkGrey=Da.bgDarkGrey;q.bgBlack=Da.bgBlack;q.obj0White=Da.obj0White;q.obj0LightGrey=Da.obj0LightGrey; |
||||
q.obj0DarkGrey=Da.obj0DarkGrey;q.obj0Black=Da.obj0Black;q.obj1White=Da.obj1White;q.obj1LightGrey=Da.obj1LightGrey;q.obj1DarkGrey=Da.obj1DarkGrey;q.obj1Black=Da.obj1Black;break;case 2:q.bgWhite=Ka.bgWhite;q.bgLightGrey=Ka.bgLightGrey;q.bgDarkGrey=Ka.bgDarkGrey;q.bgBlack=Ka.bgBlack;q.obj0White=Ka.obj0White;q.obj0LightGrey=Ka.obj0LightGrey;q.obj0DarkGrey=Ka.obj0DarkGrey;q.obj0Black=Ka.obj0Black;q.obj1White=Ka.obj1White;q.obj1LightGrey=Ka.obj1LightGrey;q.obj1DarkGrey=Ka.obj1DarkGrey;q.obj1Black=Ka.obj1Black; |
||||
break;case 3:q.bgWhite=Ha.bgWhite;q.bgLightGrey=Ha.bgLightGrey;q.bgDarkGrey=Ha.bgDarkGrey;q.bgBlack=Ha.bgBlack;q.obj0White=Ha.obj0White;q.obj0LightGrey=Ha.obj0LightGrey;q.obj0DarkGrey=Ha.obj0DarkGrey;q.obj0Black=Ha.obj0Black;q.obj1White=Ha.obj1White;q.obj1LightGrey=Ha.obj1LightGrey;q.obj1DarkGrey=Ha.obj1DarkGrey;q.obj1Black=Ha.obj1Black;break;case 4:q.bgWhite=Ba.bgWhite;q.bgLightGrey=Ba.bgLightGrey;q.bgDarkGrey=Ba.bgDarkGrey;q.bgBlack=Ba.bgBlack;q.obj0White=Ba.obj0White;q.obj0LightGrey=Ba.obj0LightGrey; |
||||
q.obj0DarkGrey=Ba.obj0DarkGrey;q.obj0Black=Ba.obj0Black;q.obj1White=Ba.obj1White;q.obj1LightGrey=Ba.obj1LightGrey;q.obj1DarkGrey=Ba.obj1DarkGrey;q.obj1Black=Ba.obj1Black;break;case 5:q.bgWhite=Ia.bgWhite;q.bgLightGrey=Ia.bgLightGrey;q.bgDarkGrey=Ia.bgDarkGrey;q.bgBlack=Ia.bgBlack;q.obj0White=Ia.obj0White;q.obj0LightGrey=Ia.obj0LightGrey;q.obj0DarkGrey=Ia.obj0DarkGrey;q.obj0Black=Ia.obj0Black;q.obj1White=Ia.obj1White;q.obj1LightGrey=Ia.obj1LightGrey;q.obj1DarkGrey=Ia.obj1DarkGrey;q.obj1Black=Ia.obj1Black; |
||||
break;case 6:q.bgWhite=Ea.bgWhite;q.bgLightGrey=Ea.bgLightGrey;q.bgDarkGrey=Ea.bgDarkGrey;q.bgBlack=Ea.bgBlack;q.obj0White=Ea.obj0White;q.obj0LightGrey=Ea.obj0LightGrey;q.obj0DarkGrey=Ea.obj0DarkGrey;q.obj0Black=Ea.obj0Black;q.obj1White=Ea.obj1White;q.obj1LightGrey=Ea.obj1LightGrey;q.obj1DarkGrey=Ea.obj1DarkGrey;q.obj1Black=Ea.obj1Black;break;case 7:q.bgWhite=Ga.bgWhite;q.bgLightGrey=Ga.bgLightGrey;q.bgDarkGrey=Ga.bgDarkGrey;q.bgBlack=Ga.bgBlack;q.obj0White=Ga.obj0White;q.obj0LightGrey=Ga.obj0LightGrey; |
||||
q.obj0DarkGrey=Ga.obj0DarkGrey;q.obj0Black=Ga.obj0Black;q.obj1White=Ga.obj1White;q.obj1LightGrey=Ga.obj1LightGrey;q.obj1DarkGrey=Ga.obj1DarkGrey;q.obj1Black=Ga.obj1Black;break;case 8:q.bgWhite=Ca.bgWhite;q.bgLightGrey=Ca.bgLightGrey;q.bgDarkGrey=Ca.bgDarkGrey;q.bgBlack=Ca.bgBlack;q.obj0White=Ca.obj0White;q.obj0LightGrey=Ca.obj0LightGrey;q.obj0DarkGrey=Ca.obj0DarkGrey;q.obj0Black=Ca.obj0Black;q.obj1White=Ca.obj1White;q.obj1LightGrey=Ca.obj1LightGrey;q.obj1DarkGrey=Ca.obj1DarkGrey;q.obj1Black=Ca.obj1Black; |
||||
break;case 9:q.bgWhite=Oa.bgWhite;q.bgLightGrey=Oa.bgLightGrey;q.bgDarkGrey=Oa.bgDarkGrey;q.bgBlack=Oa.bgBlack;q.obj0White=Oa.obj0White;q.obj0LightGrey=Oa.obj0LightGrey;q.obj0DarkGrey=Oa.obj0DarkGrey;q.obj0Black=Oa.obj0Black;q.obj1White=Oa.obj1White;q.obj1LightGrey=Oa.obj1LightGrey;q.obj1DarkGrey=Oa.obj1DarkGrey;q.obj1Black=Oa.obj1Black;break;case 10:q.bgWhite=La.bgWhite;q.bgLightGrey=La.bgLightGrey;q.bgDarkGrey=La.bgDarkGrey;q.bgBlack=La.bgBlack;q.obj0White=La.obj0White;q.obj0LightGrey=La.obj0LightGrey; |
||||
q.obj0DarkGrey=La.obj0DarkGrey;q.obj0Black=La.obj0Black;q.obj1White=La.obj1White;q.obj1LightGrey=La.obj1LightGrey;q.obj1DarkGrey=La.obj1DarkGrey;q.obj1Black=La.obj1Black;break;case 11:q.bgWhite=Ja.bgWhite;q.bgLightGrey=Ja.bgLightGrey;q.bgDarkGrey=Ja.bgDarkGrey;q.bgBlack=Ja.bgBlack;q.obj0White=Ja.obj0White;q.obj0LightGrey=Ja.obj0LightGrey;q.obj0DarkGrey=Ja.obj0DarkGrey;q.obj0Black=Ja.obj0Black;q.obj1White=Ja.obj1White;q.obj1LightGrey=Ja.obj1LightGrey;q.obj1DarkGrey=Ja.obj1DarkGrey;q.obj1Black=Ja.obj1Black; |
||||
break;case 12:q.bgWhite=Fa.bgWhite,q.bgLightGrey=Fa.bgLightGrey,q.bgDarkGrey=Fa.bgDarkGrey,q.bgBlack=Fa.bgBlack,q.obj0White=Fa.obj0White,q.obj0LightGrey=Fa.obj0LightGrey,q.obj0DarkGrey=Fa.obj0DarkGrey,q.obj0Black=Fa.obj0Black,q.obj1White=Fa.obj1White,q.obj1LightGrey=Fa.obj1LightGrey,q.obj1DarkGrey=Fa.obj1DarkGrey,q.obj1Black=Fa.obj1Black}}function r(a,b){return(a&255)<<8|b&255}function t(a){return(a&65280)>>8}function u(a,b){return b&~(1<<a)}function x(a,b){return 0!=(b&1<<a)} |
||||
var bb=function(){function a(){}a.memoryLocationBackgroundPaletteIndex=65384;a.memoryLocationBackgroundPaletteData=65385;a.memoryLocationSpritePaletteIndex=65386;a.memoryLocationSpritePaletteData=65387;a.memoryLocationBackgroundPalette=65351;a.memoryLocationSpritePaletteOne=65352;a.memoryLocationSpritePaletteTwo=65353;return a}(); |
||||
function cb(a,b){a=B(b)>>2*a&3;if(b===bb.memoryLocationSpritePaletteOne)switch(b=q.obj0White,a){case 1:b=q.obj0LightGrey;break;case 2:b=q.obj0DarkGrey;break;case 3:b=q.obj0Black}else if(b===bb.memoryLocationSpritePaletteTwo)switch(b=q.obj1White,a){case 1:b=q.obj1LightGrey;break;case 2:b=q.obj1DarkGrey;break;case 3:b=q.obj1Black}else switch(b=q.bgWhite,a){case 1:b=q.bgLightGrey;break;case 2:b=q.bgDarkGrey;break;case 3:b=q.bgBlack}return b} |
||||
function db(a,b,d){b=8*a+2*b;a=eb(b+1,d);d=eb(b,d);return r(a,d)}function fb(a,b){a*=5;return 8*((b&31<<a)>>a)}function eb(a,b){a&=63;b&&(a+=64);return c[ca+a]}function gb(a,b,d,g){void 0===d&&(d=0);void 0===g&&(g=!1);d&=3;g&&(d|=4);c[da+(160*b+a)]=d}var hb=function(){function a(){}a.tileId=-1;a.horizontalFlip=!1;a.nextXIndexToPerformCacheCheck=-1;return a}(); |
||||
function ib(a,b,d,g,h,w,A,z,v,y,J,C,K,X){var Ma=0;b=jb(b,a);a=kb(b+2*w,d);d=kb(b+2*w+1,d);for(w=g;w<=h;++w)if(b=A+(w-g),b<v){var R=w;if(0>K||!x(5,K))R=7-R;var L=0;x(R,d)&&(L+=1,L<<=1);x(R,a)&&(L+=1);if(f.GBCEnabled&&(0<=K||0<=X)){R=0<=X;var H=K&7;R&&(H=X&7);var Y=db(H,L,R);R=fb(0,Y);H=fb(1,Y);Y=fb(2,Y)}else if(0>=C&&(C=D.memoryLocationBackgroundPalette),J){H=L;Y=J;void 0===Y&&(Y=!1);R=H;Y||(R=B(C)>>(H<<1)&3);H=242;switch(R){case 1:H=160;break;case 2:H=88;break;case 3:H=8}H=R=Y=H}else Y=cb(L,C),R= |
||||
(Y&16711680)>>16,H=(Y&65280)>>8,Y&=255;var Na=3*(z*v+b);c[y+Na+0]=R;c[y+Na+1]=H;c[y+Na+2]=Y;R=!1;0<=K&&(R=x(7,K));gb(b,z,L,R);Ma++}return Ma}function jb(a,b){a===D.memoryLocationTileDataSelectZeroStart&&(b=x(7,b)?b-128:b+128);return a+16*b}function lb(a,b){switch(a){case 1:return x(b,129);case 2:return x(b,135);case 3:return x(b,126);default:return x(b,1)}} |
||||
var I=function(){function a(){}a.updateNRx0=function(b){var d=a.NRx0Negate;a.NRx0SweepPeriod=(b&112)>>4;a.NRx0Negate=x(3,b);a.NRx0SweepShift=b&7;d&&!a.NRx0Negate&&a.sweepNegateShouldDisableChannelOnClear&&(a.isEnabled=!1)};a.updateNRx1=function(b){a.NRx1Duty=b>>6&3;a.NRx1LengthLoad=b&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==x(3,b)&&(a.volume=16- |
||||
a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=x(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled=b;b||(a.isEnabled=!1)};a.updateNRx3=function(b){a.NRx3FrequencyLSB=b;a.frequency=a.NRx4FrequencyMSB<<8|b};a.updateNRx4=function(b){var d=b&7;a.NRx4FrequencyMSB=d;a.frequency=d<<8|a.NRx3FrequencyLSB;d=1===(E.frameSequencer&1);var g=!a.NRx4LengthEnabled&&x(6,b);!d&&0<a.lengthCounter&&g&&(--a.lengthCounter,x(7,b)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=x(6,b); |
||||
x(7,b)&&(a.trigger(),!d&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){c[1024+50*a.saveStateSlot]=a.cycleCounter;c[1028+50*a.saveStateSlot]=a.NRx0SweepPeriod;c[1029+50*a.saveStateSlot]=a.NRx0Negate;c[1030+50*a.saveStateSlot]=a.NRx0SweepShift;c[1031+50*a.saveStateSlot]=a.NRx1Duty;c[1033+50*a.saveStateSlot]=a.NRx1LengthLoad;c[1034+50*a.saveStateSlot]=a.NRx2StartingVolume;c[1035+50*a.saveStateSlot]=a.NRx2EnvelopeAddMode;c[1036+50*a.saveStateSlot]=a.NRx2EnvelopePeriod; |
||||
c[1037+50*a.saveStateSlot]=a.NRx3FrequencyLSB;c[1038+50*a.saveStateSlot]=a.NRx4LengthEnabled;c[1039+50*a.saveStateSlot]=a.NRx4FrequencyMSB;c[1040+50*a.saveStateSlot]=a.isEnabled;c[1041+50*a.saveStateSlot]=a.isDacEnabled;c[1042+50*a.saveStateSlot]=a.frequency;c[1046+50*a.saveStateSlot]=a.frequencyTimer;c[1050+50*a.saveStateSlot]=a.envelopeCounter;c[1054+50*a.saveStateSlot]=a.isEnvelopeAutomaticUpdating;c[1055+50*a.saveStateSlot]=a.lengthCounter;c[1059+50*a.saveStateSlot]=a.volume;c[1063+50*a.saveStateSlot]= |
||||
a.dutyCycle;c[1064+50*a.saveStateSlot]=a.waveFormPositionOnDuty;c[1065+50*a.saveStateSlot]=a.isSweepEnabled;c[1066+50*a.saveStateSlot]=a.sweepCounter;c[1070+50*a.saveStateSlot]=a.sweepShadowFrequency;c[1073+50*a.saveStateSlot]=a.sweepNegateShouldDisableChannelOnClear};a.loadState=function(){a.cycleCounter=c[1024+50*a.cycleCounter];a.NRx0SweepPeriod=c[1028+50*a.saveStateSlot];a.NRx0Negate=F(1029+50*a.saveStateSlot);a.NRx0SweepShift=c[1030+50*a.saveStateSlot];a.NRx1Duty=c[1031+50*a.saveStateSlot];a.NRx1LengthLoad= |
||||
c[1033+50*a.saveStateSlot];a.NRx2StartingVolume=c[1034+50*a.saveStateSlot];a.NRx2EnvelopeAddMode=F(1035+50*a.saveStateSlot);a.NRx2EnvelopePeriod=c[1036+50*a.saveStateSlot];a.NRx3FrequencyLSB=c[1037+50*a.saveStateSlot];a.NRx4LengthEnabled=F(1038+50*a.saveStateSlot);a.NRx4FrequencyMSB=c[1039+50*a.saveStateSlot];a.isEnabled=F(1040+50*a.saveStateSlot);a.isDacEnabled=F(1041+50*a.saveStateSlot);a.frequency=c[1042+50*a.saveStateSlot];a.frequencyTimer=c[1046+50*a.saveStateSlot];a.envelopeCounter=c[1050+50* |
||||
a.saveStateSlot];a.isEnvelopeAutomaticUpdating=F(1054+50*a.saveStateSlot);a.lengthCounter=c[1055+50*a.saveStateSlot];a.volume=c[1059+50*a.saveStateSlot];a.dutyCycle=c[1063+50*a.saveStateSlot];a.waveFormPositionOnDuty=c[1064+50*a.saveStateSlot];a.isSweepEnabled=F(1065+50*a.saveStateSlot);a.sweepCounter=c[1066+50*a.saveStateSlot];a.sweepShadowFrequency=c[1070+50*a.saveStateSlot];a.sweepNegateShouldDisableChannelOnClear=F(1073+50*a.saveStateSlot)};a.initialize=function(){G(a.memoryLocationNRx0,128); |
||||
G(a.memoryLocationNRx1,191);G(a.memoryLocationNRx2,243);G(a.memoryLocationNRx3,193);G(a.memoryLocationNRx4,191);f.BootROMEnabled&&(G(a.memoryLocationNRx1,63),G(a.memoryLocationNRx2,0),G(a.memoryLocationNRx3,0),G(a.memoryLocationNRx4,184))};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.resetTimer=function(){var b=2048-a.frequency<<2;f.GBCDoubleSpeed&&(b<<=2);a.frequencyTimer=b};a.getSample=function(b){var d=a.frequencyTimer;for(d-=b;0>=d;)b=Math.abs(d), |
||||
a.resetTimer(),d=a.frequencyTimer,d-=b,a.waveFormPositionOnDuty=a.waveFormPositionOnDuty+1&7;a.frequencyTimer=d;if(a.isEnabled&&a.isDacEnabled)d=a.volume&15;else return 15;b=1;lb(a.NRx1Duty,a.waveFormPositionOnDuty)||(b=-b);return b*d+15};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.sweepShadowFrequency=a.frequency; |
||||
a.sweepCounter=0===a.NRx0SweepPeriod?8:a.NRx0SweepPeriod;a.isSweepEnabled=0<a.NRx0SweepPeriod||0<a.NRx0SweepShift;a.sweepNegateShouldDisableChannelOnClear=!1;var b;if(b=0<a.NRx0SweepShift)b=2047<mb()?!0:!1;b&&(a.isEnabled=!1);a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){b=a.cycleCounter+b;a.cycleCounter=b;return!(0<a.frequencyTimer-b)};a.updateSweep=function(){if(a.isEnabled&&a.isSweepEnabled){var b=a.sweepCounter-1;0>=b?0===a.NRx0SweepPeriod?a.sweepCounter=8:(a.sweepCounter= |
||||
a.NRx0SweepPeriod,b=mb(),2047<b&&(a.isEnabled=!1),0<a.NRx0SweepShift&&(a.setFrequency(b),2047<mb()&&(a.isEnabled=!1))):a.sweepCounter=b}};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&(--b,0===b&&(a.isEnabled=!1));a.lengthCounter=b};a.updateEnvelope=function(){var b=a.envelopeCounter-1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var d=a.volume;d=a.NRx2EnvelopeAddMode?d+1:d-1;d&=15;15>d?a.volume=d:a.isEnvelopeAutomaticUpdating= |
||||
!1}a.envelopeCounter=b};a.setFrequency=function(b){a.sweepShadowFrequency=b;var d=b>>8&7;b&=255;var g=B(a.memoryLocationNRx4)&248|d;G(a.memoryLocationNRx3,b);G(a.memoryLocationNRx4,g);a.NRx3FrequencyLSB=b;a.NRx4FrequencyMSB=d;a.frequency=a.NRx4FrequencyMSB<<8|a.NRx3FrequencyLSB};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65296;a.NRx0SweepPeriod=0;a.NRx0Negate=!1;a.NRx0SweepShift=0;a.memoryLocationNRx1=65297;a.NRx1Duty=0;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65298;a.NRx2StartingVolume= |
||||
0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65299;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65300;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.channelNumber=1;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.dutyCycle=0;a.waveFormPositionOnDuty=0;a.isSweepEnabled=!1;a.sweepCounter=0;a.sweepShadowFrequency=0;a.sweepNegateShouldDisableChannelOnClear=!1;a.saveStateSlot=7;return a}(); |
||||
function mb(){var a=I.sweepShadowFrequency,b=a>>I.NRx0SweepShift;I.NRx0Negate?(I.sweepNegateShouldDisableChannelOnClear=!0,b=a-b):b=a+b;return b} |
||||
var M=function(){function a(){}a.updateNRx1=function(b){a.NRx1Duty=b>>6&3;a.NRx1LengthLoad=b&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==x(3,b)&&(a.volume=16-a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=x(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled=b;b||(a.isEnabled=b)};a.updateNRx3=function(b){a.NRx3FrequencyLSB=b; |
||||
a.frequency=a.NRx4FrequencyMSB<<8|b};a.updateNRx4=function(b){var d=b&7;a.NRx4FrequencyMSB=d;a.frequency=d<<8|a.NRx3FrequencyLSB;d=1===(E.frameSequencer&1);var g=!a.NRx4LengthEnabled&&x(6,b);!d&&0<a.lengthCounter&&g&&(--a.lengthCounter,x(7,b)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=x(6,b);x(7,b)&&(a.trigger(),!d&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){c[1024+50*a.saveStateSlot]=a.cycleCounter;c[1031+50*a.saveStateSlot]=a.NRx1Duty; |
||||
c[1032+50*a.saveStateSlot]=a.NRx1LengthLoad;c[1034+50*a.saveStateSlot]=a.NRx2StartingVolume;c[1035+50*a.saveStateSlot]=a.NRx2EnvelopeAddMode;c[1036+50*a.saveStateSlot]=a.NRx2EnvelopePeriod;c[1037+50*a.saveStateSlot]=a.NRx3FrequencyLSB;c[1038+50*a.saveStateSlot]=a.NRx4LengthEnabled;c[1039+50*a.saveStateSlot]=a.NRx4FrequencyMSB;c[1040+50*a.saveStateSlot]=a.isEnabled;c[1041+50*a.saveStateSlot]=a.isDacEnabled;c[1042+50*a.saveStateSlot]=a.frequency;c[1046+50*a.saveStateSlot]=a.frequencyTimer;c[1050+50* |
||||
a.saveStateSlot]=a.envelopeCounter;c[1054+50*a.saveStateSlot]=a.isEnvelopeAutomaticUpdating;c[1055+50*a.saveStateSlot]=a.lengthCounter;c[1059+50*a.saveStateSlot]=a.volume;c[1063+50*a.saveStateSlot]=a.dutyCycle;c[1064+50*a.saveStateSlot]=a.waveFormPositionOnDuty};a.loadState=function(){a.cycleCounter=c[1024+50*a.cycleCounter];a.NRx1Duty=c[1031+50*a.saveStateSlot];a.NRx1LengthLoad=c[1032+50*a.saveStateSlot];a.NRx2StartingVolume=c[1034+50*a.saveStateSlot];a.NRx2EnvelopeAddMode=F(1035+50*a.saveStateSlot); |
||||
a.NRx2EnvelopePeriod=c[1036+50*a.saveStateSlot];a.NRx3FrequencyLSB=c[1037+50*a.saveStateSlot];a.NRx4LengthEnabled=F(1038+50*a.saveStateSlot);a.NRx4FrequencyMSB=c[1039+50*a.saveStateSlot];a.isEnabled=F(1040+50*a.saveStateSlot);a.isDacEnabled=F(1041+50*a.saveStateSlot);a.frequency=c[1042+50*a.saveStateSlot];a.frequencyTimer=c[1046+50*a.saveStateSlot];a.envelopeCounter=c[1050+50*a.saveStateSlot];a.isEnvelopeAutomaticUpdating=F(1054+50*a.saveStateSlot);a.lengthCounter=c[1055+50*a.saveStateSlot];a.volume= |
||||
c[1059+50*a.saveStateSlot];a.dutyCycle=c[1063+50*a.saveStateSlot];a.waveFormPositionOnDuty=c[1064+50*a.saveStateSlot]};a.initialize=function(){G(a.memoryLocationNRx1-1,255);G(a.memoryLocationNRx1,63);G(a.memoryLocationNRx2,0);G(a.memoryLocationNRx3,0);G(a.memoryLocationNRx4,184)};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.resetTimer=function(){a.frequencyTimer=2048-a.frequency<<2<<f.GBCDoubleSpeed};a.getSample=function(b){var d=a.frequencyTimer; |
||||
for(d-=b;0>=d;)b=Math.abs(d),a.resetTimer(),d=a.frequencyTimer,d-=b,a.waveFormPositionOnDuty=a.waveFormPositionOnDuty+1&7;a.frequencyTimer=d;if(a.isEnabled&&a.isDacEnabled)d=a.volume&15;else return 15;b=1;lb(a.NRx1Duty,a.waveFormPositionOnDuty)||(b=-b);return b*d+15};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.isDacEnabled|| |
||||
(a.isEnabled=!1)};a.willChannelUpdate=function(b){b=a.cycleCounter+b;a.cycleCounter=b;return!(0<a.frequencyTimer-b)};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.updateEnvelope=function(){var b=a.envelopeCounter-1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var d=a.volume;d=a.NRx2EnvelopeAddMode?d+1:d-1;d&=15;15>d?a.volume=d:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter= |
||||
b};a.setFrequency=function(b){var d=b>>8;b&=255;var g=B(a.memoryLocationNRx4)&248|d;G(a.memoryLocationNRx3,b);G(a.memoryLocationNRx4,g);a.NRx3FrequencyLSB=b;a.NRx4FrequencyMSB=d;a.frequency=d<<8|b};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65301;a.memoryLocationNRx1=65302;a.NRx1Duty=0;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65303;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65304;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65305;a.NRx4LengthEnabled= |
||||
!1;a.NRx4FrequencyMSB=0;a.channelNumber=2;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.dutyCycle=0;a.waveFormPositionOnDuty=0;a.saveStateSlot=8;return a}(),N=function(){function a(){}a.updateNRx0=function(b){b=x(7,b);!a.isDacEnabled&&b&&(a.sampleBuffer=0);a.isDacEnabled=b;b||(a.isEnabled=b)};a.updateNRx1=function(b){a.NRx1LengthLoad=b;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2= |
||||
function(b){a.NRx2VolumeCode=b>>5&15};a.updateNRx3=function(b){a.NRx3FrequencyLSB=b;a.frequency=a.NRx4FrequencyMSB<<8|b};a.updateNRx4=function(b){var d=b&7;a.NRx4FrequencyMSB=d;a.frequency=d<<8|a.NRx3FrequencyLSB;d=1===(E.frameSequencer&1);if(!d){var g=!a.NRx4LengthEnabled&&x(6,b);0<a.lengthCounter&&g&&(--a.lengthCounter,x(7,b)||0!==a.lengthCounter||(a.isEnabled=!1))}a.NRx4LengthEnabled=x(6,b);x(7,b)&&(a.trigger(),!d&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState= |
||||
function(){c[1024+50*a.saveStateSlot]=a.cycleCounter;c[1032+50*a.saveStateSlot]=a.NRx1LengthLoad;c[1034+50*a.saveStateSlot]=a.NRx2VolumeCode;c[1036+50*a.saveStateSlot]=a.NRx3FrequencyLSB;c[1037+50*a.saveStateSlot]=a.NRx4LengthEnabled;c[1038+50*a.saveStateSlot]=a.NRx4FrequencyMSB;c[1039+50*a.saveStateSlot]=a.isEnabled;c[1040+50*a.saveStateSlot]=a.isDacEnabled;c[1041+50*a.saveStateSlot]=a.frequency;c[1045+50*a.saveStateSlot]=a.frequencyTimer;c[1049+50*a.saveStateSlot]=a.lengthCounter;c[1057+50*a.saveStateSlot]= |
||||
a.waveTablePosition;c[1061+50*a.saveStateSlot]=a.volumeCode;c[1062+50*a.saveStateSlot]=a.volumeCodeChanged;c[1063+50*a.saveStateSlot]=a.sampleBuffer};a.loadState=function(){a.cycleCounter=c[1024+50*a.cycleCounter];a.NRx1LengthLoad=c[1032+50*a.saveStateSlot];a.NRx2VolumeCode=c[1034+50*a.saveStateSlot];a.NRx3FrequencyLSB=c[1036+50*a.saveStateSlot];a.NRx4LengthEnabled=F(1037+50*a.saveStateSlot);a.NRx4FrequencyMSB=c[1038+50*a.saveStateSlot];a.isEnabled=F(1039+50*a.saveStateSlot);a.isDacEnabled=F(1040+ |
||||
50*a.saveStateSlot);a.frequency=c[1041+50*a.saveStateSlot];a.frequencyTimer=c[1045+50*a.saveStateSlot];a.lengthCounter=c[1049+50*a.saveStateSlot];a.waveTablePosition=c[1057+50*a.saveStateSlot];a.volumeCode=c[1061+50*a.saveStateSlot];a.volumeCodeChanged=F(1062+50*a.saveStateSlot);a.sampleBuffer=c[1063+50*a.saveStateSlot]};a.handleWaveRamRead=function(){return B(N.memoryLocationWaveTable+(N.waveTablePosition>>1|0))};a.handleWaveRamWrite=function(b){G(a.memoryLocationWaveTable+(a.waveTablePosition>> |
||||
1|0),b)};a.initialize=function(){G(a.memoryLocationNRx0,127);G(a.memoryLocationNRx1,255);G(a.memoryLocationNRx2,159);G(a.memoryLocationNRx3,0);G(a.memoryLocationNRx4,184);a.volumeCodeChanged=!0};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.resetTimer=function(){a.frequencyTimer=2048-a.frequency<<1<<f.GBCDoubleSpeed};a.getSample=function(b){if(!a.isEnabled||!a.isDacEnabled)return 15;var d=a.volumeCode;a.volumeCodeChanged&&(d=B(a.memoryLocationNRx2), |
||||
d=d>>5&15,a.volumeCode=d,a.volumeCodeChanged=!1);var g=N.sampleBuffer;g>>=(0===(N.waveTablePosition&1))<<2;g&=15;var h=0;switch(d){case 0:g>>=4;break;case 1:h=1;break;case 2:g>>=1;h=2;break;default:g>>=2,h=4}g=(0<h?g/h:0)+15;d=a.frequencyTimer;for(d-=b;0>=d;){b=Math.abs(d);a.resetTimer();d=a.frequencyTimer;d-=b;b=N.waveTablePosition;for(b+=1;32<=b;)b-=32;N.waveTablePosition=b;N.sampleBuffer=B(N.memoryLocationWaveTable+(N.waveTablePosition>>1|0))}a.frequencyTimer=d;return g};a.trigger=function(){a.isEnabled= |
||||
!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.frequencyTimer+=6;a.waveTablePosition=0;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){a.cycleCounter+=b;return!(!a.volumeCodeChanged&&0<a.frequencyTimer-a.cycleCounter)};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.cycleCounter=0;a.MAX_LENGTH=256;a.memoryLocationNRx0=65306;a.memoryLocationNRx1=65307;a.NRx1LengthLoad=0;a.memoryLocationNRx2= |
||||
65308;a.NRx2VolumeCode=0;a.memoryLocationNRx3=65309;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65310;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.memoryLocationWaveTable=65328;a.channelNumber=3;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.lengthCounter=0;a.waveTablePosition=0;a.volumeCode=0;a.volumeCodeChanged=!1;a.sampleBuffer=0;a.saveStateSlot=9;return a}(),O=function(){function a(){}a.updateNRx1=function(b){a.NRx1LengthLoad=b&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad}; |
||||
a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==x(3,b)&&(a.volume=16-a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=x(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled=b;b||(a.isEnabled=b)};a.updateNRx3=function(b){var d=b&7;a.NRx3ClockShift=b>>4;a.NRx3WidthMode=x(3,b);a.NRx3DivisorCode=d;d<<=1;1>d&&(d=1);a.divisor=d<<3};a.updateNRx4=function(b){var d=1===(E.frameSequencer&1), |
||||
g=!a.NRx4LengthEnabled&&x(6,b);!d&&0<a.lengthCounter&&g&&(--a.lengthCounter,x(7,b)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=x(6,b);x(7,b)&&(a.trigger(),!d&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){c[1024+50*a.saveStateSlot]=a.cycleCounter;c[1028+50*a.saveStateSlot]=a.NRx1LengthLoad;c[1030+50*a.saveStateSlot]=a.NRx2StartingVolume;c[1031+50*a.saveStateSlot]=a.NRx2EnvelopeAddMode;c[1032+50*a.saveStateSlot]=a.NRx2EnvelopePeriod; |
||||
c[1033+50*a.saveStateSlot]=a.NRx3ClockShift;c[1034+50*a.saveStateSlot]=a.NRx3WidthMode;c[1035+50*a.saveStateSlot]=a.NRx3DivisorCode;c[1037+50*a.saveStateSlot]=a.NRx4LengthEnabled;c[1039+50*a.saveStateSlot]=a.isEnabled;c[1040+50*a.saveStateSlot]=a.isDacEnabled;c[1045+50*a.saveStateSlot]=a.frequencyTimer;c[1049+50*a.saveStateSlot]=a.envelopeCounter;c[1053+50*a.saveStateSlot]=a.isEnvelopeAutomaticUpdating;c[1054+50*a.saveStateSlot]=a.lengthCounter;c[1058+50*a.saveStateSlot]=a.volume;c[1062+50*a.saveStateSlot]= |
||||
a.linearFeedbackShiftRegister};a.loadState=function(){a.cycleCounter=c[1024+50*a.cycleCounter];a.NRx1LengthLoad=c[1028+50*a.saveStateSlot];a.NRx2StartingVolume=c[1030+50*a.saveStateSlot];a.NRx2EnvelopeAddMode=F(1031+50*a.saveStateSlot);a.NRx2EnvelopePeriod=c[1032+50*a.saveStateSlot];a.NRx3ClockShift=c[1033+50*a.saveStateSlot];a.NRx3WidthMode=F(1034+50*a.saveStateSlot);a.NRx3DivisorCode=c[1035+50*a.saveStateSlot];a.NRx4LengthEnabled=F(1037+50*a.saveStateSlot);a.isEnabled=F(1039+50*a.saveStateSlot); |
||||
a.isDacEnabled=F(1040+50*a.saveStateSlot);a.frequencyTimer=c[1045+50*a.saveStateSlot];a.envelopeCounter=c[1049+50*a.saveStateSlot];a.isEnvelopeAutomaticUpdating=F(1053+50*a.saveStateSlot);a.lengthCounter=c[1054+50*a.saveStateSlot];a.volume=c[1058+50*a.saveStateSlot];a.linearFeedbackShiftRegister=c[1062+50*a.saveStateSlot]};a.initialize=function(){G(a.memoryLocationNRx1-1,255);G(a.memoryLocationNRx1,255);G(a.memoryLocationNRx2,0);G(a.memoryLocationNRx3,0);G(a.memoryLocationNRx4,191)};a.getSampleFromCycleCounter= |
||||
function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.getSample=function(b){var d=a.frequencyTimer;d-=b;if(0>=d){b=Math.abs(d);d=a.getNoiseChannelFrequencyPeriod();d-=b;b=a.linearFeedbackShiftRegister;var g=b&1^b>>1&1;b=b>>1|g<<14;a.NRx3WidthMode&&(b=b&-65|g<<6);a.linearFeedbackShiftRegister=b}0>d&&(d=0);a.frequencyTimer=d;if(a.isEnabled&&a.isDacEnabled)d=a.volume&15;else return 15;b=x(0,a.linearFeedbackShiftRegister)?-1:1;return b*d+15};a.trigger=function(){a.isEnabled=!0;0=== |
||||
a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.frequencyTimer=a.getNoiseChannelFrequencyPeriod();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.linearFeedbackShiftRegister=32767;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){a.cycleCounter+=b;return!(0<a.frequencyTimer-a.cycleCounter)};a.getNoiseChannelFrequencyPeriod=function(){return a.divisor<<a.NRx3ClockShift<<f.GBCDoubleSpeed};a.updateLength= |
||||
function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.updateEnvelope=function(){var b=a.envelopeCounter-1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var d=a.volume;d=a.NRx2EnvelopeAddMode?d+1:d-1;d&=15;15>d?a.volume=d:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter=b};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65311;a.memoryLocationNRx1=65312;a.NRx1LengthLoad=0;a.memoryLocationNRx2= |
||||
65313;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65314;a.NRx3ClockShift=0;a.NRx3WidthMode=!1;a.NRx3DivisorCode=0;a.memoryLocationNRx4=65315;a.NRx4LengthEnabled=!1;a.channelNumber=4;a.isEnabled=!1;a.isDacEnabled=!1;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.divisor=0;a.linearFeedbackShiftRegister=0;a.saveStateSlot=10;return a}(),P=function(){function a(){}a.channel1Sample=15;a.channel2Sample= |
||||
15;a.channel3Sample=15;a.channel4Sample=15;a.channel1DacEnabled=!1;a.channel2DacEnabled=!1;a.channel3DacEnabled=!1;a.channel4DacEnabled=!1;a.leftChannelSampleUnsignedByte=127;a.rightChannelSampleUnsignedByte=127;a.mixerVolumeChanged=!1;a.mixerEnabledChanged=!1;a.needToRemixSamples=!1;return a}(); |
||||
function nb(a){switch(a){case I.channelNumber:a=I.isDacEnabled;var b=P.channel1DacEnabled!==a;P.channel1DacEnabled=a;return b;case M.channelNumber:return a=M.isDacEnabled,b=P.channel2DacEnabled!==a,P.channel2DacEnabled=a,b;case N.channelNumber:return a=N.isDacEnabled,b=P.channel3DacEnabled!==a,P.channel3DacEnabled=a,b;case O.channelNumber:return a=O.isDacEnabled,b=P.channel4DacEnabled!==a,P.channel4DacEnabled=a,b}return!1} |
||||
var E=function(){function a(){}a.batchProcessCycles=function(){return 87<<f.GBCDoubleSpeed};a.updateNR50=function(b){a.NR50LeftMixerVolume=b>>4&7;a.NR50RightMixerVolume=b&7};a.updateNR51=function(b){a.NR51IsChannel4EnabledOnLeftOutput=x(7,b);a.NR51IsChannel3EnabledOnLeftOutput=x(6,b);a.NR51IsChannel2EnabledOnLeftOutput=x(5,b);a.NR51IsChannel1EnabledOnLeftOutput=x(4,b);a.NR51IsChannel4EnabledOnRightOutput=x(3,b);a.NR51IsChannel3EnabledOnRightOutput=x(2,b);a.NR51IsChannel2EnabledOnRightOutput=x(1,b); |
||||
a.NR51IsChannel1EnabledOnRightOutput=x(0,b)};a.updateNR52=function(b){a.NR52IsSoundEnabled=x(7,b)};a.maxFrameSequenceCycles=function(){return 8192<<f.GBCDoubleSpeed};a.maxDownSampleCycles=function(){return f.CLOCK_SPEED()/a.sampleRate};a.saveState=function(){c[1024+50*a.saveStateSlot]=a.NR50LeftMixerVolume;c[1028+50*a.saveStateSlot]=a.NR50RightMixerVolume;c[1032+50*a.saveStateSlot]=a.NR51IsChannel1EnabledOnLeftOutput;c[1033+50*a.saveStateSlot]=a.NR51IsChannel2EnabledOnLeftOutput;c[1034+50*a.saveStateSlot]= |
||||
a.NR51IsChannel3EnabledOnLeftOutput;c[1035+50*a.saveStateSlot]=a.NR51IsChannel4EnabledOnLeftOutput;c[1036+50*a.saveStateSlot]=a.NR51IsChannel1EnabledOnRightOutput;c[1037+50*a.saveStateSlot]=a.NR51IsChannel2EnabledOnRightOutput;c[1038+50*a.saveStateSlot]=a.NR51IsChannel3EnabledOnRightOutput;c[1039+50*a.saveStateSlot]=a.NR51IsChannel4EnabledOnRightOutput;c[1040+50*a.saveStateSlot]=a.NR52IsSoundEnabled;c[1041+50*a.saveStateSlot]=a.frameSequenceCycleCounter;c[1046+50*a.saveStateSlot]=a.frameSequencer; |
||||
c[1047+50*a.saveStateSlot]=a.downSampleCycleCounter;c[1048+50*a.saveStateSlot]=P.channel1Sample;c[1049+50*a.saveStateSlot]=P.channel2Sample;c[1050+50*a.saveStateSlot]=P.channel3Sample;c[1051+50*a.saveStateSlot]=P.channel4Sample;c[1052+50*a.saveStateSlot]=P.channel1DacEnabled;c[1053+50*a.saveStateSlot]=P.channel2DacEnabled;c[1054+50*a.saveStateSlot]=P.channel3DacEnabled;c[1055+50*a.saveStateSlot]=P.channel4DacEnabled;c[1056+50*a.saveStateSlot]=P.leftChannelSampleUnsignedByte;c[1057+50*a.saveStateSlot]= |
||||
P.rightChannelSampleUnsignedByte;c[1058+50*a.saveStateSlot]=P.mixerVolumeChanged;c[1059+50*a.saveStateSlot]=P.mixerEnabledChanged};a.loadState=function(){a.NR50LeftMixerVolume=c[1024+50*a.saveStateSlot];a.NR50RightMixerVolume=c[1028+50*a.saveStateSlot];a.NR51IsChannel1EnabledOnLeftOutput=F(1032+50*a.saveStateSlot);a.NR51IsChannel2EnabledOnLeftOutput=F(1033+50*a.saveStateSlot);a.NR51IsChannel3EnabledOnLeftOutput=F(1034+50*a.saveStateSlot);a.NR51IsChannel4EnabledOnLeftOutput=F(1035+50*a.saveStateSlot); |
||||
a.NR51IsChannel1EnabledOnRightOutput=F(1036+50*a.saveStateSlot);a.NR51IsChannel2EnabledOnRightOutput=F(1037+50*a.saveStateSlot);a.NR51IsChannel3EnabledOnRightOutput=F(1038+50*a.saveStateSlot);a.NR51IsChannel4EnabledOnRightOutput=F(1039+50*a.saveStateSlot);a.NR52IsSoundEnabled=F(1040+50*a.saveStateSlot);a.frameSequenceCycleCounter=c[1041+50*a.saveStateSlot];a.frameSequencer=c[1046+50*a.saveStateSlot];a.downSampleCycleCounter=c[1047+50*a.saveStateSlot];P.channel1Sample=c[1048+50*a.saveStateSlot];P.channel2Sample= |
||||
c[1049+50*a.saveStateSlot];P.channel3Sample=c[1050+50*a.saveStateSlot];P.channel4Sample=c[1051+50*a.saveStateSlot];P.channel1DacEnabled=F(1052+50*a.saveStateSlot);P.channel2DacEnabled=F(1053+50*a.saveStateSlot);P.channel3DacEnabled=F(1054+50*a.saveStateSlot);P.channel4DacEnabled=F(1055+50*a.saveStateSlot);P.leftChannelSampleUnsignedByte=c[1056+50*a.saveStateSlot];P.rightChannelSampleUnsignedByte=c[1057+50*a.saveStateSlot];P.mixerVolumeChanged=F(1058+50*a.saveStateSlot);P.mixerEnabledChanged=F(1059+ |
||||
50*a.saveStateSlot);ob()};a.currentCycles=0;a.memoryLocationNR50=65316;a.NR50LeftMixerVolume=0;a.NR50RightMixerVolume=0;a.memoryLocationNR51=65317;a.NR51IsChannel1EnabledOnLeftOutput=!0;a.NR51IsChannel2EnabledOnLeftOutput=!0;a.NR51IsChannel3EnabledOnLeftOutput=!0;a.NR51IsChannel4EnabledOnLeftOutput=!0;a.NR51IsChannel1EnabledOnRightOutput=!0;a.NR51IsChannel2EnabledOnRightOutput=!0;a.NR51IsChannel3EnabledOnRightOutput=!0;a.NR51IsChannel4EnabledOnRightOutput=!0;a.memoryLocationNR52=65318;a.NR52IsSoundEnabled= |
||||
!0;a.memoryLocationChannel3LoadRegisterStart=65328;a.frameSequenceCycleCounter=0;a.frameSequencer=0;a.downSampleCycleCounter=0;a.sampleRate=44100;a.audioQueueIndex=0;a.wasmBoyMemoryMaxBufferSize=131072;a.saveStateSlot=6;return a}();function pb(){for(var a=E.batchProcessCycles(),b=E.currentCycles;b>=a;)qb(a),b-=a;E.currentCycles=b} |
||||
function qb(a){var b=E.maxFrameSequenceCycles();var d=E.frameSequenceCycleCounter+a;if(d>=b){E.frameSequenceCycleCounter=d-b;b=E.frameSequencer+1&7;switch(b){case 0:I.updateLength();M.updateLength();N.updateLength();O.updateLength();break;case 2:I.updateLength();M.updateLength();N.updateLength();O.updateLength();I.updateSweep();break;case 4:I.updateLength();M.updateLength();N.updateLength();O.updateLength();break;case 6:I.updateLength();M.updateLength();N.updateLength();O.updateLength();I.updateSweep(); |
||||
break;case 7:I.updateEnvelope(),M.updateEnvelope(),O.updateEnvelope()}E.frameSequencer=b;b=!0}else E.frameSequenceCycleCounter=d,b=!1;if(e.audioAccumulateSamples&&!b){b=I.willChannelUpdate(a)||nb(I.channelNumber);d=M.willChannelUpdate(a)||nb(M.channelNumber);var g=N.willChannelUpdate(a)||nb(N.channelNumber),h=O.willChannelUpdate(a)||nb(O.channelNumber);b&&(P.channel1Sample=I.getSampleFromCycleCounter());d&&(P.channel2Sample=M.getSampleFromCycleCounter());g&&(P.channel3Sample=N.getSampleFromCycleCounter()); |
||||
h&&(P.channel4Sample=O.getSampleFromCycleCounter());if(b||d||g||h)P.needToRemixSamples=!0;b=E.downSampleCycleCounter;b+=a;a=E.maxDownSampleCycles();b>=a&&(b-=a,P.needToRemixSamples||P.mixerVolumeChanged||P.mixerEnabledChanged?rb(P.channel1Sample,P.channel2Sample,P.channel3Sample,P.channel4Sample):E.downSampleCycleCounter=b,sb(P.leftChannelSampleUnsignedByte+1,P.rightChannelSampleUnsignedByte+1,oa),a=E.audioQueueIndex+1,a>=(E.wasmBoyMemoryMaxBufferSize>>1|0)-1&&--a,E.audioQueueIndex=a);E.downSampleCycleCounter= |
||||
b}else{b=I.getSample(a)|0;d=M.getSample(a)|0;g=N.getSample(a)|0;h=O.getSample(a)|0;P.channel1Sample=b;P.channel2Sample=d;P.channel3Sample=g;P.channel4Sample=h;a=E.downSampleCycleCounter+a;if(a>=E.maxDownSampleCycles()){a-=E.maxDownSampleCycles();var w=rb(b,d,g,h),A=t(w);sb(A+1,(w&255)+1,oa);e.enableAudioDebugging&&(w=rb(b,15,15,15),A=t(w),sb(A+1,(w&255)+1,ka),w=rb(15,d,15,15),A=t(w),sb(A+1,(w&255)+1,la),w=rb(15,15,g,15),A=t(w),sb(A+1,(w&255)+1,ma),w=rb(15,15,15,h),A=t(w),sb(A+1,(w&255)+1,na));b=E.audioQueueIndex+ |
||||
1;b>=(E.wasmBoyMemoryMaxBufferSize>>1|0)-1&&--b;E.audioQueueIndex=b}E.downSampleCycleCounter=a}}function tb(){return E.audioQueueIndex}function ob(){E.audioQueueIndex=0} |
||||
function rb(a,b,d,g){void 0===a&&(a=15);void 0===b&&(b=15);void 0===d&&(d=15);void 0===g&&(g=15);P.mixerVolumeChanged=!1;var h=0+(E.NR51IsChannel1EnabledOnLeftOutput?a:15);h+=E.NR51IsChannel2EnabledOnLeftOutput?b:15;h+=E.NR51IsChannel3EnabledOnLeftOutput?d:15;h+=E.NR51IsChannel4EnabledOnLeftOutput?g:15;a=0+(E.NR51IsChannel1EnabledOnRightOutput?a:15);a+=E.NR51IsChannel2EnabledOnRightOutput?b:15;a+=E.NR51IsChannel3EnabledOnRightOutput?d:15;a+=E.NR51IsChannel4EnabledOnRightOutput?g:15;P.mixerEnabledChanged= |
||||
!1;P.needToRemixSamples=!1;b=ub(h,E.NR50LeftMixerVolume+1);d=ub(a,E.NR50RightMixerVolume+1);P.leftChannelSampleUnsignedByte=b;P.rightChannelSampleUnsignedByte=d;return r(b,d)}function ub(a,b){if(60===a)return 127;a=1E5*(a-60)*b>>3;a=(a/1E5|0)+60;a=1E5*a/(12E6/254|0)|0;return a|=0}function sb(a,b,d){d+=E.audioQueueIndex<<1;c[d+0]=a+1;c[d+1]=b+1} |
||||
function vb(a){switch(a){case I.memoryLocationNRx0:return a=B(I.memoryLocationNRx0),a|128;case M.memoryLocationNRx0:return a=B(M.memoryLocationNRx0),a|255;case N.memoryLocationNRx0:return a=B(N.memoryLocationNRx0),a|127;case O.memoryLocationNRx0:return a=B(O.memoryLocationNRx0),a|255;case E.memoryLocationNR50:return a=B(E.memoryLocationNR50),a|0;case I.memoryLocationNRx1:return a=B(I.memoryLocationNRx1),a|63;case M.memoryLocationNRx1:return a=B(M.memoryLocationNRx1),a|63;case N.memoryLocationNRx1:return a= |
||||
B(N.memoryLocationNRx1),a|255;case O.memoryLocationNRx1:return a=B(O.memoryLocationNRx1),a|255;case E.memoryLocationNR51:return a=B(E.memoryLocationNR51),a|0;case I.memoryLocationNRx2:return a=B(I.memoryLocationNRx2),a|0;case M.memoryLocationNRx2:return a=B(M.memoryLocationNRx2),a|0;case N.memoryLocationNRx2:return a=B(N.memoryLocationNRx2),a|159;case O.memoryLocationNRx2:return a=B(O.memoryLocationNRx2),a|0;case E.memoryLocationNR52:return a=0,a=E.NR52IsSoundEnabled?a|128:u(7,a),a=I.isEnabled?a| |
||||
1:u(0,a),a=M.isEnabled?a|2:u(1,a),a=N.isEnabled?a|4:u(2,a),a=O.isEnabled?a|8:u(3,a),a|112;case I.memoryLocationNRx3:return a=B(I.memoryLocationNRx3),a|255;case M.memoryLocationNRx3:return a=B(M.memoryLocationNRx3),a|255;case N.memoryLocationNRx3:return a=B(N.memoryLocationNRx3),a|255;case O.memoryLocationNRx3:return a=B(O.memoryLocationNRx3),a|0;case I.memoryLocationNRx4:return a=B(I.memoryLocationNRx4),a|191;case M.memoryLocationNRx4:return a=B(M.memoryLocationNRx4),a|191;case N.memoryLocationNRx4:return a= |
||||
B(N.memoryLocationNRx4),a|191;case O.memoryLocationNRx4:return a=B(O.memoryLocationNRx4),a|191}return-1} |
||||
var Q=function(){function a(){}a.updateInterruptEnabled=function(b){a.isVBlankInterruptEnabled=x(a.bitPositionVBlankInterrupt,b);a.isLcdInterruptEnabled=x(a.bitPositionLcdInterrupt,b);a.isTimerInterruptEnabled=x(a.bitPositionTimerInterrupt,b);a.isSerialInterruptEnabled=x(a.bitPositionSerialInterrupt,b);a.isJoypadInterruptEnabled=x(a.bitPositionJoypadInterrupt,b);a.interruptsEnabledValue=b};a.updateInterruptRequested=function(b){a.isVBlankInterruptRequested=x(a.bitPositionVBlankInterrupt,b);a.isLcdInterruptRequested= |
||||
x(a.bitPositionLcdInterrupt,b);a.isTimerInterruptRequested=x(a.bitPositionTimerInterrupt,b);a.isSerialInterruptRequested=x(a.bitPositionSerialInterrupt,b);a.isJoypadInterruptRequested=x(a.bitPositionJoypadInterrupt,b);a.interruptsRequestedValue=b};a.areInterruptsPending=function(){return 0<(a.interruptsRequestedValue&a.interruptsEnabledValue&31)};a.saveState=function(){c[1024+50*a.saveStateSlot]=a.masterInterruptSwitch;c[1025+50*a.saveStateSlot]=a.masterInterruptSwitchDelay;c[1040+50*a.saveStateSlot]= |
||||
a.interruptsEnabledValue;c[1041+50*a.saveStateSlot]=a.isVBlankInterruptEnabled;c[1042+50*a.saveStateSlot]=a.isLcdInterruptEnabled;c[1043+50*a.saveStateSlot]=a.isTimerInterruptEnabled;c[1044+50*a.saveStateSlot]=a.isSerialInterruptEnabled;c[1045+50*a.saveStateSlot]=a.isJoypadInterruptEnabled;c[1056+50*a.saveStateSlot]=a.interruptsRequestedValue;c[1057+50*a.saveStateSlot]=a.isVBlankInterruptRequested;c[1058+50*a.saveStateSlot]=a.isLcdInterruptRequested;c[1059+50*a.saveStateSlot]=a.isTimerInterruptRequested; |
||||
c[1060+50*a.saveStateSlot]=a.isSerialInterruptRequested;c[1061+50*a.saveStateSlot]=a.isJoypadInterruptRequested};a.loadState=function(){a.masterInterruptSwitch=F(1024+50*a.saveStateSlot);a.masterInterruptSwitchDelay=F(1025+50*a.saveStateSlot);a.interruptsEnabledValue=c[1040+50*a.saveStateSlot];a.isVBlankInterruptEnabled=F(1041+50*a.saveStateSlot);a.isLcdInterruptEnabled=F(1042+50*a.saveStateSlot);a.isTimerInterruptEnabled=F(1043+50*a.saveStateSlot);a.isSerialInterruptEnabled=F(1044+50*a.saveStateSlot); |
||||
a.isJoypadInterruptEnabled=F(1045+50*a.saveStateSlot);a.interruptsRequestedValue=c[1056+50*a.saveStateSlot];a.isVBlankInterruptRequested=F(1057+50*a.saveStateSlot);a.isLcdInterruptRequested=F(1058+50*a.saveStateSlot);a.isTimerInterruptRequested=F(1059+50*a.saveStateSlot);a.isSerialInterruptRequested=F(1060+50*a.saveStateSlot);a.isJoypadInterruptRequested=F(1061+50*a.saveStateSlot)};a.masterInterruptSwitch=!1;a.masterInterruptSwitchDelay=!1;a.bitPositionVBlankInterrupt=0;a.bitPositionLcdInterrupt= |
||||
1;a.bitPositionTimerInterrupt=2;a.bitPositionSerialInterrupt=3;a.bitPositionJoypadInterrupt=4;a.memoryLocationInterruptEnabled=65535;a.interruptsEnabledValue=0;a.isVBlankInterruptEnabled=!1;a.isLcdInterruptEnabled=!1;a.isTimerInterruptEnabled=!1;a.isSerialInterruptEnabled=!1;a.isJoypadInterruptEnabled=!1;a.memoryLocationInterruptRequest=65295;a.interruptsRequestedValue=0;a.isVBlankInterruptRequested=!1;a.isLcdInterruptRequested=!1;a.isTimerInterruptRequested=!1;a.isSerialInterruptRequested=!1;a.isJoypadInterruptRequested= |
||||
!1;a.saveStateSlot=2;return a}(); |
||||
function wb(a){xb(!1);var b=B(Q.memoryLocationInterruptRequest);b=u(a,b);Q.interruptsRequestedValue=b;G(Q.memoryLocationInterruptRequest,b);f.stackPointer-=2;f.isHalted();b=f.stackPointer;var d=f.programCounter,g=t(d);G(b+0,d&255);G(b+1,g);switch(a){case Q.bitPositionVBlankInterrupt:Q.isVBlankInterruptRequested=!1;f.programCounter=64;break;case Q.bitPositionLcdInterrupt:Q.isLcdInterruptRequested=!1;f.programCounter=72;break;case Q.bitPositionTimerInterrupt:Q.isTimerInterruptRequested=!1;f.programCounter= |
||||
80;break;case Q.bitPositionSerialInterrupt:Q.isSerialInterruptRequested=!1;f.programCounter=88;break;case Q.bitPositionJoypadInterrupt:Q.isJoypadInterruptRequested=!1,f.programCounter=96}}function yb(a){var b=B(Q.memoryLocationInterruptRequest);b|=1<<a;Q.interruptsRequestedValue=b;G(Q.memoryLocationInterruptRequest,b)}function xb(a){a?Q.masterInterruptSwitchDelay=!0:Q.masterInterruptSwitch=!1} |
||||
var S=function(){function a(){}a.batchProcessCycles=function(){return 256};a.updateDividerRegister=function(){var b=a.dividerRegister;a.dividerRegister=0;G(a.memoryLocationDividerRegister,0);a.timerEnabled&&zb(b,0)&&Ab()};a.updateTimerCounter=function(b){if(a.timerEnabled){if(a.timerCounterWasReset)return;a.timerCounterOverflowDelay&&(a.timerCounterOverflowDelay=!1)}a.timerCounter=b};a.updateTimerModulo=function(b){a.timerModulo=b;a.timerEnabled&&a.timerCounterWasReset&&(a.timerCounter=b,a.timerCounterWasReset= |
||||
!1)};a.updateTimerControl=function(b){var d=a.timerEnabled;a.timerEnabled=x(2,b);b&=3;if(!d){d=Cb(a.timerInputClock);var g=Cb(b),h=a.dividerRegister;(a.timerEnabled?x(d,h):x(d,h)&&x(g,h))&&Ab()}a.timerInputClock=b};a.saveState=function(){c[1024+50*a.saveStateSlot]=a.currentCycles;c[1028+50*a.saveStateSlot]=a.dividerRegister;c[1032+50*a.saveStateSlot]=a.timerCounter;c[1036+50*a.saveStateSlot]=a.timerCounterOverflowDelay;c[1037+50*a.saveStateSlot]=a.timerCounterWasReset;c[1038+50*a.saveStateSlot]=a.timerCounterMask; |
||||
c[1042+50*a.saveStateSlot]=a.timerModulo;c[1046+50*a.saveStateSlot]=a.timerEnabled;c[1047+50*a.saveStateSlot]=a.timerInputClock};a.loadState=function(){a.currentCycles=c[1024+50*a.saveStateSlot];a.dividerRegister=c[1028+50*a.saveStateSlot];a.timerCounter=c[1032+50*a.saveStateSlot];a.timerCounterOverflowDelay=F(1036+50*a.saveStateSlot);a.timerCounterWasReset=F(1037+50*a.saveStateSlot);a.timerCounterMask=c[1038+50*a.saveStateSlot];a.timerModulo=c[1042+50*a.saveStateSlot];a.timerEnabled=F(1046+50*a.saveStateSlot); |
||||
a.timerInputClock=c[1047+50*a.saveStateSlot]};a.currentCycles=0;a.memoryLocationDividerRegister=65284;a.dividerRegister=0;a.memoryLocationTimerCounter=65285;a.timerCounter=0;a.timerCounterOverflowDelay=!1;a.timerCounterWasReset=!1;a.timerCounterMask=0;a.memoryLocationTimerModulo=65286;a.timerModulo=0;a.memoryLocationTimerControl=65287;a.timerEnabled=!1;a.timerInputClock=0;a.saveStateSlot=5;return a}(); |
||||
function Db(a){for(var b=0;b<a;){var d=S.dividerRegister,g=d;b+=4;g+=4;g&=65535;S.dividerRegister=g;if(S.timerEnabled){var h=S.timerCounterWasReset;S.timerCounterOverflowDelay?(S.timerCounter=S.timerModulo,Q.isTimerInterruptRequested=!0,yb(Q.bitPositionTimerInterrupt),S.timerCounterOverflowDelay=!1,S.timerCounterWasReset=!0):h&&(S.timerCounterWasReset=!1);zb(d,g)&&Ab()}}}function Ab(){var a=S.timerCounter;255<++a&&(S.timerCounterOverflowDelay=!0,a=0);S.timerCounter=a} |
||||
function zb(a,b){var d=Cb(S.timerInputClock);return x(d,a)&&!x(d,b)}function Cb(a){switch(a){case 0:return 9;case 1:return 3;case 2:return 5;case 3:return 7}return 0} |
||||
var Eb=function(){function a(){}a.updateTransferControl=function(b){a.isShiftClockInternal=x(0,b);a.isClockSpeedFast=x(1,b);a.transferStartFlag=x(7,b);return!0};a.currentCycles=0;a.memoryLocationSerialTransferData=65281;a.memoryLocationSerialTransferControl=65282;a.numberOfBitsTransferred=0;a.isShiftClockInternal=!1;a.isClockSpeedFast=!1;a.transferStartFlag=!1;return a}(),T=function(){function a(){}a.updateJoypad=function(b){a.joypadRegisterFlipped=b^255;a.isDpadType=x(4,a.joypadRegisterFlipped); |
||||
a.isButtonType=x(5,a.joypadRegisterFlipped)};a.saveState=function(){c[1024+50*a.saveStateSlot]=a.joypadRegisterFlipped;c[1025+50*a.saveStateSlot]=a.isDpadType;c[1026+50*a.saveStateSlot]=a.isButtonType};a.loadState=function(){a.joypadRegisterFlipped=c[1024+50*a.saveStateSlot];a.isDpadType=F(1025+50*a.saveStateSlot);a.isButtonType=F(1026+50*a.saveStateSlot)};a.up=!1;a.down=!1;a.left=!1;a.right=!1;a.a=!1;a.b=!1;a.select=!1;a.start=!1;a.memoryLocationJoypadRegister=65280;a.joypadRegisterFlipped=0;a.isDpadType= |
||||
!1;a.isButtonType=!1;a.saveStateSlot=3;return a}();function Fb(a){var b=f.isStopped=!1;Gb(a)||(b=!0);Hb(a,!0);b&&(b=!1,3>=a&&(b=!0),a=!1,T.isDpadType&&b&&(a=!0),T.isButtonType&&!b&&(a=!0),a&&(Q.isJoypadInterruptRequested=!0,yb(Q.bitPositionJoypadInterrupt)))}function Gb(a){switch(a){case 0:return T.up;case 1:return T.right;case 2:return T.down;case 3:return T.left;case 4:return T.a;case 5:return T.b;case 6:return T.select;case 7:return T.start;default:return!1}} |
||||
function Hb(a,b){switch(a){case 0:T.up=b;break;case 1:T.right=b;break;case 2:T.down=b;break;case 3:T.left=b;break;case 4:T.a=b;break;case 5:T.b=b;break;case 6:T.select=b;break;case 7:T.start=b}}function Ib(a,b,d){for(var g=0;g<d;++g){for(var h=Jb(a+g),w=b+g;40959<w;)w-=8192;Kb(w,h)}U.DMACycles+=(32<<f.GBCDoubleSpeed)*(d>>4)} |
||||
function Lb(a,b){if(a===f.memoryLocationSpeedSwitch)return G(f.memoryLocationSpeedSwitch,b&1),!1;if(f.BootROMEnabled&&a===f.memoryLocationBootROMSwitch)return f.BootROMEnabled=!1,f.programCounter=255,!0;var d=U.videoRamLocation,g=U.spriteInformationTableLocation;if(a<d){if(!U.isRomOnly){d=U.isMBC1;var h=U.isMBC2;if(8191>=a){if(!h||x(4,b))b&=15,0===b?U.isRamBankingEnabled=!1:10===b&&(U.isRamBankingEnabled=!0)}else 16383>=a?(g=U.isMBC5,!g||12287>=a?(a=U.currentRomBank,h&&(a=b&15),d?(b&=31,a&=224):U.isMBC3? |
||||
(b&=127,a&=128):g&&(a&=0),U.currentRomBank=a|b):U.currentRomBank=r(0<b,U.currentRomBank&255)):!h&&24575>=a?d&&U.isMBC1RomModeEnabled?(a=U.currentRomBank&31,U.currentRomBank=a|b&224):(b=U.isMBC5?b&15:b&3,U.currentRamBank=b):!h&&32767>=a&&d&&(U.isMBC1RomModeEnabled=x(0,b))}return!1}if(a>=d&&a<U.cartridgeRamLocation)return!0;if(a>=U.echoRamLocation&&a<g)return G(a-8192,b),!0;if(a>=g&&a<=U.spriteInformationTableLocationEnd)return 2<=V.currentLcdMode;if(a>=U.unusableMemoryLocation&&a<=U.unusableMemoryEndLocation)return!1; |
||||
if(a===Eb.memoryLocationSerialTransferControl)return Eb.updateTransferControl(b);if(65296<=a&&65318>=a){pb();if(a===E.memoryLocationNR52||E.NR52IsSoundEnabled){switch(a){case I.memoryLocationNRx0:I.updateNRx0(b);break;case N.memoryLocationNRx0:N.updateNRx0(b);break;case I.memoryLocationNRx1:I.updateNRx1(b);break;case M.memoryLocationNRx1:M.updateNRx1(b);break;case N.memoryLocationNRx1:N.updateNRx1(b);break;case O.memoryLocationNRx1:O.updateNRx1(b);break;case I.memoryLocationNRx2:I.updateNRx2(b);break; |
||||
case M.memoryLocationNRx2:M.updateNRx2(b);break;case N.memoryLocationNRx2:N.volumeCodeChanged=!0;N.updateNRx2(b);break;case O.memoryLocationNRx2:O.updateNRx2(b);break;case I.memoryLocationNRx3:I.updateNRx3(b);break;case M.memoryLocationNRx3:M.updateNRx3(b);break;case N.memoryLocationNRx3:N.updateNRx3(b);break;case O.memoryLocationNRx3:O.updateNRx3(b);break;case I.memoryLocationNRx4:I.updateNRx4(b);break;case M.memoryLocationNRx4:M.updateNRx4(b);break;case N.memoryLocationNRx4:N.updateNRx4(b);break; |
||||
case O.memoryLocationNRx4:O.updateNRx4(b);break;case E.memoryLocationNR50:E.updateNR50(b);P.mixerVolumeChanged=!0;break;case E.memoryLocationNR51:E.updateNR51(b);P.mixerEnabledChanged=!0;break;case E.memoryLocationNR52:a=E.NR52IsSoundEnabled;!a&&x(7,b)&&(E.frameSequencer=7,I.waveFormPositionOnDuty=0,M.waveFormPositionOnDuty=0);if(a&&!x(7,b))for(a=65296;65318>a;++a)Kb(a,0);E.updateNR52(b)}b=!0}else b=!1;return b}if(65328<=a&&65343>=a)return pb(),N.isEnabled?(N.handleWaveRamWrite(b),!1):!0;if(a>=V.memoryLocationLcdControl&& |
||||
a<=D.memoryLocationWindowX){if(a===V.memoryLocationLcdControl)return V.updateLcdControl(b),!0;if(a===V.memoryLocationLcdStatus)return V.updateLcdStatus(b),!1;if(a===D.memoryLocationScanlineRegister)return D.scanlineRegister=0,G(a,0),!1;if(a===V.memoryLocationCoincidenceCompare)return V.coincidenceCompare=b,!0;if(a===D.memoryLocationDmaTransfer){b<<=8;for(a=0;159>=a;++a)d=B(b+a),G(U.spriteInformationTableLocation+a,d);U.DMACycles=644;return!0}switch(a){case D.memoryLocationScrollX:D.scrollX=b;break; |
||||
case D.memoryLocationScrollY:D.scrollY=b;break;case D.memoryLocationWindowX:D.windowX=b;break;case D.memoryLocationWindowY:D.windowY=b}return!0}if(a===U.memoryLocationHdmaTrigger)return f.GBCEnabled&&(U.isHblankHdmaActive&&!x(7,b)?(U.isHblankHdmaActive=!1,b=B(U.memoryLocationHdmaTrigger),G(U.memoryLocationHdmaTrigger,b|128)):(a=B(U.memoryLocationHdmaSourceHigh),d=B(U.memoryLocationHdmaSourceLow),a=r(a,d)&65520,d=B(U.memoryLocationHdmaDestinationHigh),g=B(U.memoryLocationHdmaDestinationLow),d=r(d, |
||||
g),d=(d&8176)+U.videoRamLocation,g=u(7,b),g=g+1<<4,x(7,b)?(U.isHblankHdmaActive=!0,U.hblankHdmaTransferLengthRemaining=g,U.hblankHdmaSource=a,U.hblankHdmaDestination=d,G(U.memoryLocationHdmaTrigger,u(7,b))):(Ib(a,d,g),G(U.memoryLocationHdmaTrigger,255)))),!1;if((a===U.memoryLocationGBCWRAMBank||a===U.memoryLocationGBCVRAMBank)&&U.isHblankHdmaActive&&(d=U.hblankHdmaSource,16384<=d&&32767>=d||53248<=d&&57343>=d))return!1;if(a>=bb.memoryLocationBackgroundPaletteIndex&&a<=bb.memoryLocationSpritePaletteData){d= |
||||
bb.memoryLocationSpritePaletteData;if(a===bb.memoryLocationBackgroundPaletteData||a===d)g=B(a-1),g=u(6,g),h=g&63,a===d&&(h+=64),c[ca+h]=b,b=g,--a,x(7,b)&&G(a,b+1|128);return!0}if(a>=S.memoryLocationDividerRegister&&a<=S.memoryLocationTimerControl){Db(S.currentCycles);S.currentCycles=0;switch(a){case S.memoryLocationDividerRegister:return S.updateDividerRegister(),!1;case S.memoryLocationTimerCounter:S.updateTimerCounter(b);break;case S.memoryLocationTimerModulo:S.updateTimerModulo(b);break;case S.memoryLocationTimerControl:S.updateTimerControl(b)}return!0}a=== |
||||
T.memoryLocationJoypadRegister&&T.updateJoypad(b);if(a===Q.memoryLocationInterruptRequest)return Q.updateInterruptRequested(b),!0;a===Q.memoryLocationInterruptEnabled&&Q.updateInterruptEnabled(b);return!0} |
||||
function Mb(a){switch(a>>12){case 0:if(f.BootROMEnabled)if(f.GBCEnabled){if(256>a||511<a&&2304>a)return a+qa}else if(!f.GBCEnabled&&256>a)return a+qa;case 1:case 2:case 3:return a+ra;case 4:case 5:case 6:case 7:var b=U.currentRomBank;U.isMBC5||0!==b||(b=1);return 16384*b+(a-U.switchableCartridgeRomLocation)+ra;case 8:case 9:return b=0,f.GBCEnabled&&(b=B(U.memoryLocationGBCVRAMBank)&1),a-U.videoRamLocation+2048+8192*b;case 10:case 11:return 8192*U.currentRamBank+(a-U.cartridgeRamLocation)+pa;case 12:return a- |
||||
U.internalRamBankZeroLocation+18432;case 13:return b=0,f.GBCEnabled&&(b=B(U.memoryLocationGBCWRAMBank)&7),a-U.internalRamBankZeroLocation+18432+4096*((1>b?1:b)-1);default:return a-U.echoRamLocation+51200}}var Nb=function(){function a(){}a.programCounter=-1;a.readGbMemory=-1;a.writeGbMemory=-1;a.reachedBreakpoint=!1;return a}();function G(a,b){a=Mb(a);c[a]=b}function Kb(a,b){a===Nb.writeGbMemory&&(Nb.reachedBreakpoint=!0);Lb(a,b)&&G(a,b)} |
||||
var V=function(){function a(){}a.updateLcdStatus=function(b){var d=B(a.memoryLocationLcdStatus);b=b&248|d&7|128;G(a.memoryLocationLcdStatus,b)};a.updateLcdControl=function(b){var d=a.enabled;a.enabled=x(7,b);a.windowTileMapDisplaySelect=x(6,b);a.windowDisplayEnabled=x(5,b);a.bgWindowTileDataSelect=x(4,b);a.bgTileMapDisplaySelect=x(3,b);a.tallSpriteSize=x(2,b);a.spriteDisplayEnable=x(1,b);a.bgDisplayEnabled=x(0,b);d&&!a.enabled&&Ob(!0);!d&&a.enabled&&Ob(!1)};a.memoryLocationLcdStatus=65345;a.currentLcdMode= |
||||
0;a.memoryLocationCoincidenceCompare=65349;a.coincidenceCompare=0;a.memoryLocationLcdControl=65344;a.enabled=!0;a.windowTileMapDisplaySelect=!1;a.windowDisplayEnabled=!1;a.bgWindowTileDataSelect=!1;a.bgTileMapDisplaySelect=!1;a.tallSpriteSize=!1;a.spriteDisplayEnable=!1;a.bgDisplayEnabled=!1;return a}(); |
||||
function Ob(a){D.scanlineCycleCounter=0;D.scanlineRegister=0;G(D.memoryLocationScanlineRegister,0);var b=B(V.memoryLocationLcdStatus);b=u(1,b);b=u(0,b);V.currentLcdMode=0;G(V.memoryLocationLcdStatus,b);if(a)for(a=0;93184>a;++a)c[ea+a]=255}function Pb(a,b){0!==a&&1!==a||D.scanlineRegister!==V.coincidenceCompare?b=u(2,b):(b|=4,x(6,b)&&(Q.isLcdInterruptRequested=!0,yb(Q.bitPositionLcdInterrupt)));return b} |
||||
function Qb(a,b,d,g,h,w){for(var A=g>>3;160>h;++h){var z=h+w;256<=z&&(z-=256);var v=d+(A<<5)+(z>>3),y=kb(v,0),J=!1;if(e.tileCaching){var C=h;var K=a,X=z,Ma=v,R=y,L=0,H=hb.nextXIndexToPerformCacheCheck;if(0<K&&8<C&&R===hb.tileId&&C===H){R=x(5,B(Ma-1));Ma=x(5,B(Ma));for(var Y=0;8>Y;++Y){R!==Ma&&(Y=7-Y);var Na=C+Y;if(160>=Na){var Bb=C-(8-Y),Ub=ea+3*(160*K+Na);Rb(Na,K,0,c[Ub]);Rb(Na,K,1,c[Ub]);Rb(Na,K,2,c[Ub]);Bb=c[da+(160*K+Bb)];gb(Na,K,u(2,Bb),x(2,Bb));L++}}}else hb.tileId=R;C>=H&&(H=C+8,K=X&7|0,C< |
||||
K&&(H+=K));hb.nextXIndexToPerformCacheCheck=H;C=L;0<C&&(h+=C-1,J=!0)}e.tileRendering&&!J?(J=h,C=a,K=z,z=b,L=g&7|0,H=0,0==J&&(H=K-(K>>3<<3)),K=7,160<J+8&&(K=160-J),X=-1,R=0,f.GBCEnabled&&(X=kb(v,1),R=x(3,X)|0,x(6,X)&&(L=7-L)),C=ib(y,z,R,H,K,L,J,C,160,ea,!1,0,X,-1),0<C&&(h+=C-1)):J||(f.GBCEnabled?(J=h,C=a,H=g,L=jb(b,y),y=kb(v,1),H=H&7|0,x(6,y)&&(H=7-H),K=x(3,y)|0,v=kb(L+2*H,K),L=kb(L+2*H+1,K),H=z&7|0,x(5,y)||(H=7-H),z=0,x(H,L)&&(z=z+1<<1),x(H,v)&&(z+=1),H=db(y&7,z,!1),v=fb(0,H),L=fb(1,H),H=fb(2,H), |
||||
Rb(J,C,0,v),Rb(J,C,1,L),Rb(J,C,2,H),gb(J,C,z,x(7,y))):(v=h,J=a,L=g,C=jb(b,y),L=L&7|0,y=kb(C+2*L,0),C=kb(C+2*L+1,0),L=z&7|0,L=7-L,z=0,x(L,C)&&(z=z+1<<1),x(L,y)&&(z+=1),y=cb(z,D.memoryLocationBackgroundPalette),Rb(v,J,0,(y&16711680)>>16),Rb(v,J,1,(y&65280)>>8),Rb(v,J,2,y&255),gb(v,J,z)))}} |
||||
var D=function(){function a(){}a.batchProcessCycles=function(){return a.MAX_CYCLES_PER_SCANLINE()};a.MAX_CYCLES_PER_SCANLINE=function(){return 153===a.scanlineRegister?4<<f.GBCDoubleSpeed:456<<f.GBCDoubleSpeed};a.MIN_CYCLES_SPRITES_LCD_MODE=function(){return 376<<f.GBCDoubleSpeed};a.MIN_CYCLES_TRANSFER_DATA_LCD_MODE=function(){return 249<<f.GBCDoubleSpeed};a.saveState=function(){c[1024+50*a.saveStateSlot]=a.scanlineCycleCounter;c[1028+50*a.saveStateSlot]=a.scanlineRegister;c[1029+50*a.saveStateSlot]= |
||||
a.scrollX;c[1030+50*a.saveStateSlot]=a.scrollY;c[1031+50*a.saveStateSlot]=a.windowX;c[1032+50*a.saveStateSlot]=a.windowY;c[1033+50*a.saveStateSlot]=V.currentLcdMode;c[1034+50*a.saveStateSlot]=V.coincidenceCompare;c[1035+50*a.saveStateSlot]=V.enabled;c[1036+50*a.saveStateSlot]=V.windowTileMapDisplaySelect;c[1037+50*a.saveStateSlot]=V.windowDisplayEnabled;c[1038+50*a.saveStateSlot]=V.bgWindowTileDataSelect;c[1039+50*a.saveStateSlot]=V.bgTileMapDisplaySelect;c[1040+50*a.saveStateSlot]=V.tallSpriteSize; |
||||
c[1041+50*a.saveStateSlot]=V.spriteDisplayEnable;c[1042+50*a.saveStateSlot]=V.bgDisplayEnabled};a.loadState=function(){a.scanlineCycleCounter=c[1024+50*a.saveStateSlot];a.scanlineRegister=c[1028+50*a.scanlineRegister];a.scrollX=c[1029+50*a.saveStateSlot];a.scrollY=c[1030+50*a.saveStateSlot];a.windowX=c[1031+50*a.saveStateSlot];a.windowY=c[1032+50*a.saveStateSlot];V.currentLcdMode=c[1033+50*a.saveStateSlot];V.coincidenceCompare=c[1034+50*a.saveStateSlot];V.enabled=F(1035+50*a.saveStateSlot);V.windowTileMapDisplaySelect= |
||||
F(1036+50*a.saveStateSlot);V.windowDisplayEnabled=F(1037+50*a.saveStateSlot);V.bgWindowTileDataSelect=F(1038+50*a.saveStateSlot);V.bgTileMapDisplaySelect=F(1039+50*a.saveStateSlot);V.tallSpriteSize=F(1040+50*a.saveStateSlot);V.spriteDisplayEnable=F(1041+50*a.saveStateSlot);V.bgDisplayEnabled=F(1042+50*a.saveStateSlot)};a.currentCycles=0;a.scanlineCycleCounter=0;a.memoryLocationScanlineRegister=65348;a.scanlineRegister=0;a.memoryLocationDmaTransfer=65350;a.memoryLocationScrollX=65347;a.scrollX=0;a.memoryLocationScrollY= |
||||
65346;a.scrollY=0;a.memoryLocationWindowX=65355;a.windowX=0;a.memoryLocationWindowY=65354;a.windowY=0;a.memoryLocationTileMapSelectZeroStart=38912;a.memoryLocationTileMapSelectOneStart=39936;a.memoryLocationTileDataSelectZeroStart=34816;a.memoryLocationTileDataSelectOneStart=32768;a.memoryLocationSpriteAttributesTable=65024;a.memoryLocationBackgroundPalette=65351;a.memoryLocationSpritePaletteOne=65352;a.memoryLocationSpritePaletteTwo=65353;a.saveStateSlot=1;return a}(); |
||||
function Sb(a){if(V.enabled)for(D.scanlineCycleCounter+=a,a=e.graphicsDisableScanlineRendering;D.scanlineCycleCounter>=D.MAX_CYCLES_PER_SCANLINE();){D.scanlineCycleCounter-=D.MAX_CYCLES_PER_SCANLINE();var b=D.scanlineRegister;if(144===b){if(a)for(var d=0;144>=d;++d)Tb(d);else Tb(b);for(d=0;144>d;++d)for(var g=0;160>g;++g)c[da+(160*d+g)]=0;hb.tileId=-1;hb.nextXIndexToPerformCacheCheck=-1}else 144>b&&(a||Tb(b));b=153<b?0:b+1;D.scanlineRegister=b}if(V.enabled){b=D.scanlineRegister;d=V.currentLcdMode; |
||||
a=0;if(144<=b)a=1;else{g=D.scanlineCycleCounter;var h=D.MIN_CYCLES_SPRITES_LCD_MODE();g>=h?a=2:g>=h&&(a=3)}if(d!==a){b=B(V.memoryLocationLcdStatus);V.currentLcdMode=a;d=!1;switch(a){case 0:b=u(0,b);b=u(1,b);d=x(3,b);break;case 1:b=u(1,b);b|=1;d=x(4,b);break;case 2:b=u(0,b);b|=2;d=x(5,b);break;case 3:b|=3}d&&(Q.isLcdInterruptRequested=!0,yb(Q.bitPositionLcdInterrupt));0===a&&U.isHblankHdmaActive&&(g=16,d=U.hblankHdmaTransferLengthRemaining,d<g&&(g=d),Ib(U.hblankHdmaSource,U.hblankHdmaDestination,g), |
||||
U.hblankHdmaSource+=g,U.hblankHdmaDestination+=g,d-=g,U.hblankHdmaTransferLengthRemaining=d,g=U.memoryLocationHdmaTrigger,0>=d?(U.isHblankHdmaActive=!1,G(g,255)):G(g,u(7,(d>>4)-1)));1===a&&(Q.isVBlankInterruptRequested=!0,yb(Q.bitPositionVBlankInterrupt));b=Pb(a,b);G(V.memoryLocationLcdStatus,b)}else 153===b&&(b=B(V.memoryLocationLcdStatus),b=Pb(a,b),G(V.memoryLocationLcdStatus,b))}} |
||||
function Tb(a){var b=D.memoryLocationTileDataSelectZeroStart;V.bgWindowTileDataSelect&&(b=D.memoryLocationTileDataSelectOneStart);if(f.GBCEnabled||V.bgDisplayEnabled){var d=D.memoryLocationTileMapSelectZeroStart;V.bgTileMapDisplaySelect&&(d=D.memoryLocationTileMapSelectOneStart);Qb(a,b,d,a+D.scrollY&255,0,D.scrollX)}if(V.windowDisplayEnabled){d=D.memoryLocationTileMapSelectZeroStart;V.windowTileMapDisplaySelect&&(d=D.memoryLocationTileMapSelectOneStart);var g=D.windowX,h=D.windowY;a<h||(g-=7,Qb(a, |
||||
b,d,a-h,g,-g|0))}if(V.spriteDisplayEnable)for(b=V.tallSpriteSize,d=39;0<=d;--d){h=4*d;var w=D.memoryLocationSpriteAttributesTable+h,A=B(w+0);g=B(w+1);var z=B(w+2);A-=16;g-=8;var v=8;b&&(v=16,z-=z&1);if(a>=A&&a<A+v){h=B(D.memoryLocationSpriteAttributesTable+h+3);w=x(7,h);var y=x(6,h),J=x(5,h);A=a-A;y&&(A=v-A,--A);A<<=1;z=jb(D.memoryLocationTileDataSelectOneStart,z);z+=A;v=f.GBCEnabled&&x(3,h);A=kb(z+0,v);z=kb(z+1,v);for(v=7;0<=v;--v){y=v;J&&(y-=7,y=-y);var C=0;x(y,z)&&(C=C+1<<1);x(y,A)&&(C+=1);if(0!== |
||||
C&&(y=g+(7-v),0<=y&&160>=y)){var K=f.GBCEnabled&&!V.bgDisplayEnabled,X=!1,Ma=!1;if(!K){var R=c[da+(160*a+y)],L=R&3;w&&0<L?X=!0:f.GBCEnabled&&x(2,R)&&0<L&&(Ma=!0)}if(K||!X&&!Ma)f.GBCEnabled?(X=db(h&7,C,!0),C=fb(0,X),K=fb(1,X),X=fb(2,X),Rb(y,a,0,C),Rb(y,a,1,K),Rb(y,a,2,X)):(K=D.memoryLocationSpritePaletteOne,x(4,h)&&(K=D.memoryLocationSpritePaletteTwo),C=cb(C,K),Rb(y,a,0,(C&16711680)>>16),Rb(y,a,1,(C&65280)>>8),Rb(y,a,2,C&255))}}}}}function Rb(a,b,d,g){c[ea+3*(160*b+a)+d]=g} |
||||
function kb(a,b){return c[a-U.videoRamLocation+2048+8192*(b&1)]} |
||||
function Vb(a){var b=U.videoRamLocation;return a<b||a>=b&&a<U.cartridgeRamLocation?-1:a>=U.echoRamLocation&&a<U.spriteInformationTableLocation?B(a-8192):a>=U.spriteInformationTableLocation&&a<=U.spriteInformationTableLocationEnd?2>V.currentLcdMode?255:-1:a===f.memoryLocationSpeedSwitch?(a=255,b=B(f.memoryLocationSpeedSwitch),x(0,b)||(a=u(0,a)),f.GBCDoubleSpeed||(a=u(7,a)),a):a===D.memoryLocationScanlineRegister?(G(a,D.scanlineRegister),D.scanlineRegister):65296<=a&&65318>=a?(pb(),vb(a)):65319<=a&& |
||||
65327>=a?255:65328<=a&&65343>=a?(pb(),N.isEnabled?N.handleWaveRamRead():-1):a===S.memoryLocationDividerRegister?(b=t(S.dividerRegister),G(a,b),b):a===S.memoryLocationTimerCounter?(G(a,S.timerCounter),S.timerCounter):a===Q.memoryLocationInterruptRequest?224|Q.interruptsRequestedValue:a===T.memoryLocationJoypadRegister?(a=T.joypadRegisterFlipped,T.isDpadType?(a=T.up?u(2,a):a|4,a=T.right?u(0,a):a|1,a=T.down?u(3,a):a|8,a=T.left?u(1,a):a|2):T.isButtonType&&(a=T.a?u(0,a):a|1,a=T.b?u(1,a):a|2,a=T.select? |
||||
u(2,a):a|4,a=T.start?u(3,a):a|8),a|240):-1}function B(a){return c[Mb(a)]}function Jb(a){a===Nb.readGbMemory&&(Nb.reachedBreakpoint=!0);var b=Vb(a);return-1===b?B(a):b}function F(a){return 0<c[a]} |
||||
var U=function(){function a(){}a.saveState=function(){c[1024+50*a.saveStateSlot]=a.currentRomBank;c[1026+50*a.saveStateSlot]=a.currentRamBank;c[1028+50*a.saveStateSlot]=a.isRamBankingEnabled;c[1029+50*a.saveStateSlot]=a.isMBC1RomModeEnabled;c[1030+50*a.saveStateSlot]=a.isRomOnly;c[1031+50*a.saveStateSlot]=a.isMBC1;c[1032+50*a.saveStateSlot]=a.isMBC2;c[1033+50*a.saveStateSlot]=a.isMBC3;c[1034+50*a.saveStateSlot]=a.isMBC5;c[1035+50*a.saveStateSlot]=a.DMACycles;c[1039+50*a.saveStateSlot]=a.isHblankHdmaActive; |
||||
c[1040+50*a.saveStateSlot]=a.hblankHdmaTransferLengthRemaining;c[1044+50*a.saveStateSlot]=a.hblankHdmaSource;c[1048+50*a.saveStateSlot]=a.hblankHdmaDestination};a.loadState=function(){a.currentRomBank=c[1024+50*a.saveStateSlot];a.currentRamBank=c[1026+50*a.saveStateSlot];a.isRamBankingEnabled=F(1028+50*a.saveStateSlot);a.isMBC1RomModeEnabled=F(1029+50*a.saveStateSlot);a.isRomOnly=F(1030+50*a.saveStateSlot);a.isMBC1=F(1031+50*a.saveStateSlot);a.isMBC2=F(1032+50*a.saveStateSlot);a.isMBC3=F(1033+50* |
||||
a.saveStateSlot);a.isMBC5=F(1034+50*a.saveStateSlot);a.DMACycles=c[1035+50*a.saveStateSlot];a.isHblankHdmaActive=F(1039+50*a.saveStateSlot);a.hblankHdmaTransferLengthRemaining=c[1040+50*a.saveStateSlot];a.hblankHdmaSource=c[1044+50*a.saveStateSlot];a.hblankHdmaDestination=c[1048+50*a.saveStateSlot]};a.cartridgeRomLocation=0;a.switchableCartridgeRomLocation=16384;a.videoRamLocation=32768;a.cartridgeRamLocation=40960;a.internalRamBankZeroLocation=49152;a.internalRamBankOneLocation=53248;a.echoRamLocation= |
||||
57344;a.spriteInformationTableLocation=65024;a.spriteInformationTableLocationEnd=65183;a.unusableMemoryLocation=65184;a.unusableMemoryEndLocation=65279;a.currentRomBank=0;a.currentRamBank=0;a.isRamBankingEnabled=!1;a.isMBC1RomModeEnabled=!0;a.isRomOnly=!0;a.isMBC1=!1;a.isMBC2=!1;a.isMBC3=!1;a.isMBC5=!1;a.memoryLocationHdmaSourceHigh=65361;a.memoryLocationHdmaSourceLow=65362;a.memoryLocationHdmaDestinationHigh=65363;a.memoryLocationHdmaDestinationLow=65364;a.memoryLocationHdmaTrigger=65365;a.DMACycles= |
||||
0;a.isHblankHdmaActive=!1;a.hblankHdmaTransferLengthRemaining=0;a.hblankHdmaSource=0;a.hblankHdmaDestination=0;a.memoryLocationGBCVRAMBank=65359;a.memoryLocationGBCWRAMBank=65392;a.saveStateSlot=4;return a}(),f=function(){function a(){}a.CLOCK_SPEED=function(){return 4194304<<a.GBCDoubleSpeed};a.MAX_CYCLES_PER_FRAME=function(){return 70224<<a.GBCDoubleSpeed};a.enableHalt=function(){Q.masterInterruptSwitch?a.isHaltNormal=!0:0===(Q.interruptsEnabledValue&Q.interruptsRequestedValue&31)?a.isHaltNoJump= |
||||
!0:a.isHaltBug=!0};a.exitHaltAndStop=function(){a.isHaltNoJump=!1;a.isHaltNormal=!1;a.isHaltBug=!1;a.isStopped=!1};a.isHalted=function(){return a.isHaltNormal||a.isHaltNoJump};a.saveState=function(){c[1024+50*a.saveStateSlot]=a.registerA;c[1025+50*a.saveStateSlot]=a.registerB;c[1026+50*a.saveStateSlot]=a.registerC;c[1027+50*a.saveStateSlot]=a.registerD;c[1028+50*a.saveStateSlot]=a.registerE;c[1029+50*a.saveStateSlot]=a.registerH;c[1030+50*a.saveStateSlot]=a.registerL;c[1031+50*a.saveStateSlot]=a.registerF; |
||||
c[1032+50*a.saveStateSlot]=a.stackPointer;c[1034+50*a.saveStateSlot]=a.programCounter;c[1036+50*a.saveStateSlot]=a.currentCycles;c[1041+50*a.saveStateSlot]=a.isHaltNormal;c[1042+50*a.saveStateSlot]=a.isHaltNoJump;c[1043+50*a.saveStateSlot]=a.isHaltBug;c[1044+50*a.saveStateSlot]=a.isStopped;c[1045+50*a.saveStateSlot]=a.BootROMEnabled;c[1046+50*a.saveStateSlot]=a.GBCEnabled;c[1047+50*a.saveStateSlot]=a.GBCDoubleSpeed};a.loadState=function(){a.registerA=c[1024+50*a.saveStateSlot];a.registerB=c[1025+ |
||||
50*a.saveStateSlot];a.registerC=c[1026+50*a.saveStateSlot];a.registerD=c[1027+50*a.saveStateSlot];a.registerE=c[1028+50*a.saveStateSlot];a.registerH=c[1029+50*a.saveStateSlot];a.registerL=c[1030+50*a.saveStateSlot];a.registerF=c[1031+50*a.saveStateSlot];a.stackPointer=c[1032+50*a.saveStateSlot];a.programCounter=c[1034+50*a.saveStateSlot];a.currentCycles=c[1036+50*a.saveStateSlot];a.isHaltNormal=F(1041+50*a.saveStateSlot);a.isHaltNoJump=F(1042+50*a.saveStateSlot);a.isHaltBug=F(1043+50*a.saveStateSlot); |
||||
a.isStopped=F(1044+50*a.saveStateSlot);a.BootROMEnabled=F(1045+50*a.saveStateSlot);a.GBCEnabled=F(1046+50*a.saveStateSlot);a.GBCDoubleSpeed=F(1047+50*a.saveStateSlot)};a.memoryLocationBootROMSwitch=65360;a.BootROMEnabled=!1;a.GBCEnabled=!1;a.memoryLocationSpeedSwitch=65357;a.GBCDoubleSpeed=!1;a.registerA=0;a.registerB=0;a.registerC=0;a.registerD=0;a.registerE=0;a.registerH=0;a.registerL=0;a.registerF=0;a.stackPointer=0;a.programCounter=0;a.currentCycles=0;a.isHaltNormal=!1;a.isHaltNoJump=!1;a.isHaltBug= |
||||
!1;a.isStopped=!1;a.saveStateSlot=0;return a}();function Wb(a){var b=f.registerA;ya(b,a);za(b,a);b=b+a&255;f.registerA=b;k(0===b);l(0)}function Xb(a){var b=f.registerA,d=b+a+xa()&255;m(0!=((b^a^d)&16));a=b+a+xa()&65535;n(0<(a&256));f.registerA=d;k(0===d);l(0)}function Yb(a){var b=-1*a;var d=f.registerA;ya(d,b);za(d,b);d=d-a&255;f.registerA=d;k(0===d);l(1)}function Zb(a){var b=f.registerA,d=b-a-xa()&255;m(0!=((b^a^d)&16));a=b-a-xa()&65535;n(0<(a&256));f.registerA=d;k(0===d);l(1)} |
||||
function $b(a){a&=f.registerA;f.registerA=a;k(0===a);l(0);m(1);n(0)}function ac(a){a=(f.registerA^a)&255;f.registerA=a;k(0===a);l(0);m(0);n(0)}function bc(a){a|=f.registerA;f.registerA=a;k(0===a);l(0);m(0);n(0)}function cc(a){var b=f.registerA;a*=-1;ya(b,a);za(b,a);k(0===b+a);l(1)}function dc(a,b){k(0===(b&1<<a));l(0);m(1);return b}function ec(a,b,d){return 0<b?d|1<<a:d&~(1<<a)}function fc(a){var b=f.programCounter;b=(b+(a<<24>>24)&65535)+1&65535;f.programCounter=b} |
||||
function gc(a){var b=f.programCounter;b=b+1&65535;f.isHaltBug&&(b=b-1&65535);f.programCounter=b;switch((a&240)>>4){case 0:return hc(a);case 1:return ic(a);case 2:return jc(a);case 3:return kc(a);case 4:return lc(a);case 5:return mc(a);case 6:return nc(a);case 7:return oc(a);case 8:return pc(a);case 9:return qc(a);case 10:return rc(a);case 11:return sc(a);case 12:return tc(a);case 13:return uc(a);case 14:return vc(a);default:return wc(a)}}function W(a){xc(4);return Jb(a)} |
||||
function yc(a,b){xc(4);Kb(a,b)}function zc(a){xc(8);var b=Vb(a);b=-1===b?B(a):b;a+=1;var d=Vb(a);a=-1===d?B(a):d;return r(a,b)}function Ac(a,b){xc(8);var d=t(b);b&=255;Lb(a,b)&&G(a,b);a+=1;Lb(a,d)&&G(a,d)}function Z(){xc(4);return B(f.programCounter)}function Bc(){xc(4);var a=B(f.programCounter+1&65535);return r(a,Z())} |
||||
function hc(a){switch(a){case 0:return 4;case 1:return a=Bc(),f.registerB=t(a),f.registerC=a&255,f.programCounter=f.programCounter+2&65535,4;case 2:return yc(r(f.registerB,f.registerC),f.registerA),4;case 3:return a=r(f.registerB,f.registerC),a++,f.registerB=t(a),f.registerC=a&255,8;case 4:return a=f.registerB,ya(a,1),a=a+1&255,f.registerB=a,k(0===a),l(0),4;case 5:return a=f.registerB,ya(a,-1),a=a-1&255,f.registerB=a,k(0===a),l(1),4;case 6:return f.registerB=Z(),f.programCounter=f.programCounter+ |
||||
1&65535,4;case 7:return a=f.registerA,n(128===(a&128)),f.registerA=(a<<1|a>>7)&255,k(0),l(0),m(0),4;case 8:return Ac(Bc(),f.stackPointer),f.programCounter=f.programCounter+2&65535,4;case 9:a=r(f.registerH,f.registerL);var b=r(f.registerB,f.registerC);Aa(a,b,!1);a=a+b&65535;f.registerH=t(a);f.registerL=a&255;l(0);return 8;case 10:return f.registerA=W(r(f.registerB,f.registerC)),4;case 11:return a=r(f.registerB,f.registerC),a=a-1&65535,f.registerB=t(a),f.registerC=a&255,8;case 12:return a=f.registerC, |
||||
ya(a,1),a=a+1&255,f.registerC=a,k(0===a),l(0),4;case 13:return a=f.registerC,ya(a,-1),a=a-1&255,f.registerC=a,k(0===a),l(1),4;case 14:return f.registerC=Z(),f.programCounter=f.programCounter+1&65535,4;case 15:return a=f.registerA,n(0<(a&1)),f.registerA=(a>>1|a<<7)&255,k(0),l(0),m(0),4}return-1} |
||||
function ic(a){switch(a){case 16:if(f.GBCEnabled&&(a=W(f.memoryLocationSpeedSwitch),x(0,a)))return a=u(0,a),x(7,a)?(f.GBCDoubleSpeed=!1,a=u(7,a)):(f.GBCDoubleSpeed=!0,a|=128),yc(f.memoryLocationSpeedSwitch,a),68;f.isStopped=!0;f.programCounter=f.programCounter+1&65535;return 4;case 17:return a=Bc(),f.registerD=t(a),f.registerE=a&255,f.programCounter=f.programCounter+2&65535,4;case 18:return yc(r(f.registerD,f.registerE),f.registerA),4;case 19:return a=r(f.registerD,f.registerE),a=a+1&65535,f.registerD= |
||||
t(a),f.registerE=a&255,8;case 20:return a=f.registerD,ya(a,1),f.registerD=a+1&255,k(0===f.registerD),l(0),4;case 21:return a=f.registerD,ya(a,-1),f.registerD=a-1&255,k(0===f.registerD),l(1),4;case 22:return f.registerD=Z(),f.programCounter=f.programCounter+1&65535,4;case 23:return a=128===(f.registerA&128),f.registerA=(f.registerA<<1|xa())&255,n(a),k(0),l(0),m(0),4;case 24:return fc(Z()),8;case 25:a=r(f.registerH,f.registerL);var b=r(f.registerD,f.registerE);Aa(a,b,!1);a=a+b&65535;f.registerH=t(a); |
||||
f.registerL=a&255;l(0);return 8;case 26:return a=r(f.registerD,f.registerE),f.registerA=W(a),4;case 27:return a=r(f.registerD,f.registerE),a=a-1&65535,f.registerD=t(a),f.registerE=a&255,8;case 28:return a=f.registerE,ya(a,1),a=a+1&255,f.registerE=a,k(0===a),l(0),4;case 29:return a=f.registerE,ya(a,-1),a=a-1&255,f.registerE=a,k(0===a),l(1),4;case 30:return f.registerE=Z(),f.programCounter=f.programCounter+1&65535,4;case 31:return a=1===(f.registerA&1),f.registerA=(f.registerA>>1|xa()<<7)&255,n(a), |
||||
k(0),l(0),m(0),4}return-1} |
||||
function jc(a){switch(a){case 32:return 0===wa()?fc(Z()):f.programCounter=f.programCounter+1&65535,8;case 33:return a=Bc(),f.registerH=t(a),f.registerL=a&255,f.programCounter=f.programCounter+2&65535,4;case 34:return a=r(f.registerH,f.registerL),yc(a,f.registerA),a=a+1&65535,f.registerH=t(a),f.registerL=a&255,4;case 35:return a=r(f.registerH,f.registerL),a=a+1&65535,f.registerH=t(a),f.registerL=a&255,8;case 36:return a=f.registerH,ya(a,1),a=a+1&255,f.registerH=a,k(0===a),l(0),4;case 37:return a=f.registerH, |
||||
ya(a,-1),a=a-1&255,f.registerH=a,k(0===a),l(1),4;case 38:return f.registerH=Z(),f.programCounter=f.programCounter+1&65535,4;case 39:a=0;0<(f.registerF>>5&1)&&(a|=6);0<xa()&&(a|=96);var b=f.registerA;0<(f.registerF>>6&1)?b=b-a&255:(9<(b&15)&&(a|=6),153<b&&(a|=96),b=b+a&255);k(0===b);n(0!==(a&96));m(0);f.registerA=b;return 4;case 40:return 0<wa()?fc(Z()):f.programCounter=f.programCounter+1&65535,8;case 41:return a=r(f.registerH,f.registerL),Aa(a,a,!1),a=2*a&65535,f.registerH=t(a),f.registerL=a&255, |
||||
l(0),8;case 42:return a=r(f.registerH,f.registerL),f.registerA=W(a),a=a+1&65535,f.registerH=t(a),f.registerL=a&255,4;case 43:return a=r(f.registerH,f.registerL),a=a-1&65535,f.registerH=t(a),f.registerL=a&255,8;case 44:return a=f.registerL,ya(a,1),a=a+1&255,f.registerL=a,k(0===a),l(0),4;case 45:return a=f.registerL,ya(a,-1),a=a-1&255,f.registerL=a,k(0===a),l(1),4;case 46:return f.registerL=Z(),f.programCounter=f.programCounter+1&65535,4;case 47:return f.registerA=~f.registerA,l(1),m(1),4}return-1} |
||||
function kc(a){switch(a){case 48:return 0===xa()?fc(Z()):f.programCounter=f.programCounter+1&65535,8;case 49:return f.stackPointer=Bc(),f.programCounter=f.programCounter+2&65535,4;case 50:return a=r(f.registerH,f.registerL),yc(a,f.registerA),a=a-1&65535,f.registerH=t(a),f.registerL=a&255,4;case 51:return f.stackPointer=f.stackPointer+1&65535,8;case 52:a=r(f.registerH,f.registerL);var b=W(a);ya(b,1);b=b+1&255;k(0===b);l(0);yc(a,b);return 4;case 53:return a=r(f.registerH,f.registerL),b=W(a),ya(b,-1), |
||||
b=b-1&255,k(0===b),l(1),yc(a,b),4;case 54:return yc(r(f.registerH,f.registerL),Z()),f.programCounter=f.programCounter+1&65535,4;case 55:return l(0),m(0),n(1),4;case 56:return 1===xa()?fc(Z()):f.programCounter=f.programCounter+1&65535,8;case 57:return a=r(f.registerH,f.registerL),Aa(a,f.stackPointer,!1),a=a+f.stackPointer&65535,f.registerH=t(a),f.registerL=a&255,l(0),8;case 58:return a=r(f.registerH,f.registerL),f.registerA=W(a),a=a-1&65535,f.registerH=t(a),f.registerL=a&255,4;case 59:return f.stackPointer= |
||||
f.stackPointer-1&65535,8;case 60:return a=f.registerA,ya(a,1),a=a+1&255,f.registerA=a,k(0===a),l(0),4;case 61:return a=f.registerA,ya(a,-1),a=a-1&255,f.registerA=a,k(0===a),l(1),4;case 62:return f.registerA=Z(),f.programCounter=f.programCounter+1&65535,4;case 63:return l(0),m(0),n(0>=xa()),4}return-1} |
||||
function lc(a){switch(a){case 64:return 4;case 65:return f.registerB=f.registerC,4;case 66:return f.registerB=f.registerD,4;case 67:return f.registerB=f.registerE,4;case 68:return f.registerB=f.registerH,4;case 69:return f.registerB=f.registerL,4;case 70:return f.registerB=W(r(f.registerH,f.registerL)),4;case 71:return f.registerB=f.registerA,4;case 72:return f.registerC=f.registerB,4;case 73:return 4;case 74:return f.registerC=f.registerD,4;case 75:return f.registerC=f.registerE,4;case 76:return f.registerC= |
||||
f.registerH,4;case 77:return f.registerC=f.registerL,4;case 78:return f.registerC=W(r(f.registerH,f.registerL)),4;case 79:return f.registerC=f.registerA,4}return-1} |
||||
function mc(a){switch(a){case 80:return f.registerD=f.registerB,4;case 81:return f.registerD=f.registerC,4;case 82:return 4;case 83:return f.registerD=f.registerE,4;case 84:return f.registerD=f.registerH,4;case 85:return f.registerD=f.registerL,4;case 86:return f.registerD=W(r(f.registerH,f.registerL)),4;case 87:return f.registerD=f.registerA,4;case 88:return f.registerE=f.registerB,4;case 89:return f.registerE=f.registerC,4;case 90:return f.registerE=f.registerD,4;case 91:return 4;case 92:return f.registerE= |
||||
f.registerH,4;case 93:return f.registerE=f.registerL,4;case 94:return f.registerE=W(r(f.registerH,f.registerL)),4;case 95:return f.registerE=f.registerA,4}return-1} |
||||
function nc(a){switch(a){case 96:return f.registerH=f.registerB,4;case 97:return f.registerH=f.registerC,4;case 98:return f.registerH=f.registerD,4;case 99:return f.registerH=f.registerE,4;case 100:return f.registerH=f.registerH,4;case 101:return f.registerH=f.registerL,4;case 102:return f.registerH=W(r(f.registerH,f.registerL)),4;case 103:return f.registerH=f.registerA,4;case 104:return f.registerL=f.registerB,4;case 105:return f.registerL=f.registerC,4;case 106:return f.registerL=f.registerD,4; |
||||
case 107:return f.registerL=f.registerE,4;case 108:return f.registerL=f.registerH,4;case 109:return f.registerL=f.registerL,4;case 110:return f.registerL=W(r(f.registerH,f.registerL)),4;case 111:return f.registerL=f.registerA,4}return-1} |
||||
function oc(a){switch(a){case 112:return yc(r(f.registerH,f.registerL),f.registerB),4;case 113:return yc(r(f.registerH,f.registerL),f.registerC),4;case 114:return yc(r(f.registerH,f.registerL),f.registerD),4;case 115:return yc(r(f.registerH,f.registerL),f.registerE),4;case 116:return yc(r(f.registerH,f.registerL),f.registerH),4;case 117:return yc(r(f.registerH,f.registerL),f.registerL),4;case 118:return U.isHblankHdmaActive||f.enableHalt(),4;case 119:return yc(r(f.registerH,f.registerL),f.registerA), |
||||
4;case 120:return f.registerA=f.registerB,4;case 121:return f.registerA=f.registerC,4;case 122:return f.registerA=f.registerD,4;case 123:return f.registerA=f.registerE,4;case 124:return f.registerA=f.registerH,4;case 125:return f.registerA=f.registerL,4;case 126:return f.registerA=W(r(f.registerH,f.registerL)),4;case 127:return 4}return-1} |
||||
function pc(a){switch(a){case 128:return Wb(f.registerB),4;case 129:return Wb(f.registerC),4;case 130:return Wb(f.registerD),4;case 131:return Wb(f.registerE),4;case 132:return Wb(f.registerH),4;case 133:return Wb(f.registerL),4;case 134:return a=W(r(f.registerH,f.registerL)),Wb(a),4;case 135:return Wb(f.registerA),4;case 136:return Xb(f.registerB),4;case 137:return Xb(f.registerC),4;case 138:return Xb(f.registerD),4;case 139:return Xb(f.registerE),4;case 140:return Xb(f.registerH),4;case 141:return Xb(f.registerL), |
||||
4;case 142:return a=W(r(f.registerH,f.registerL)),Xb(a),4;case 143:return Xb(f.registerA),4}return-1} |
||||
function qc(a){switch(a){case 144:return Yb(f.registerB),4;case 145:return Yb(f.registerC),4;case 146:return Yb(f.registerD),4;case 147:return Yb(f.registerE),4;case 148:return Yb(f.registerH),4;case 149:return Yb(f.registerL),4;case 150:return a=W(r(f.registerH,f.registerL)),Yb(a),4;case 151:return Yb(f.registerA),4;case 152:return Zb(f.registerB),4;case 153:return Zb(f.registerC),4;case 154:return Zb(f.registerD),4;case 155:return Zb(f.registerE),4;case 156:return Zb(f.registerH),4;case 157:return Zb(f.registerL), |
||||
4;case 158:return a=W(r(f.registerH,f.registerL)),Zb(a),4;case 159:return Zb(f.registerA),4}return-1} |
||||
function rc(a){switch(a){case 160:return $b(f.registerB),4;case 161:return $b(f.registerC),4;case 162:return $b(f.registerD),4;case 163:return $b(f.registerE),4;case 164:return $b(f.registerH),4;case 165:return $b(f.registerL),4;case 166:return a=W(r(f.registerH,f.registerL)),$b(a),4;case 167:return $b(f.registerA),4;case 168:return ac(f.registerB),4;case 169:return ac(f.registerC),4;case 170:return ac(f.registerD),4;case 171:return ac(f.registerE),4;case 172:return ac(f.registerH),4;case 173:return ac(f.registerL), |
||||
4;case 174:return a=W(r(f.registerH,f.registerL)),ac(a),4;case 175:return ac(f.registerA),4}return-1} |
||||
function sc(a){switch(a){case 176:return bc(f.registerB),4;case 177:return bc(f.registerC),4;case 178:return bc(f.registerD),4;case 179:return bc(f.registerE),4;case 180:return bc(f.registerH),4;case 181:return bc(f.registerL),4;case 182:return a=W(r(f.registerH,f.registerL)),bc(a),4;case 183:return bc(f.registerA),4;case 184:return cc(f.registerB),4;case 185:return cc(f.registerC),4;case 186:return cc(f.registerD),4;case 187:return cc(f.registerE),4;case 188:return cc(f.registerH),4;case 189:return cc(f.registerL), |
||||
4;case 190:return a=W(r(f.registerH,f.registerL)),cc(a),4;case 191:return cc(f.registerA),4}return-1} |
||||
function tc(a){switch(a){case 192:return 0===wa()?(a=f.stackPointer,f.programCounter=zc(a),f.stackPointer=a+2&65535,12):8;case 193:return a=zc(f.stackPointer),f.stackPointer=f.stackPointer+2&65535,f.registerB=t(a),f.registerC=a&255,4;case 194:if(0===wa())return f.programCounter=Bc(),8;f.programCounter=f.programCounter+2&65535;return 12;case 195:return f.programCounter=Bc(),8;case 196:if(0===wa())return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,f.programCounter+2&65535),f.programCounter=Bc(), |
||||
8;f.programCounter=f.programCounter+2&65535;return 12;case 197:return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,r(f.registerB,f.registerC)),8;case 198:return Wb(Z()),f.programCounter=f.programCounter+1&65535,4;case 199:return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,f.programCounter),f.programCounter=0,8;case 200:return 1===wa()?(a=f.stackPointer,f.programCounter=zc(a),f.stackPointer=a+2&65535,12):8;case 201:return a=f.stackPointer,f.programCounter=zc(a),f.stackPointer=a+2&65535,8;case 202:if(1=== |
||||
wa())return f.programCounter=Bc(),8;f.programCounter=f.programCounter+2&65535;return 12;case 203:var b=Z();a=-1;var d=!1,g=0,h=0,w=b&7;switch(w){case 0:g=f.registerB;break;case 1:g=f.registerC;break;case 2:g=f.registerD;break;case 3:g=f.registerE;break;case 4:g=f.registerH;break;case 5:g=f.registerL;break;case 6:g=W(r(f.registerH,f.registerL));break;case 7:g=f.registerA}var A=(b&240)>>4;switch(A){case 0:7>=b?(b=g,n(128===(b&128)),b=(b<<1|b>>7)&255,k(0===b),l(0),m(0),h=b,d=!0):15>=b&&(b=g,n(0<(b&1)), |
||||
b=(b>>1|b<<7)&255,k(0===b),l(0),m(0),h=b,d=!0);break;case 1:23>=b?(b=g,d=128===(b&128),b=(b<<1|xa())&255,n(d),k(0===b),l(0),m(0),h=b,d=!0):31>=b&&(b=g,d=1===(b&1),b=(b>>1|xa()<<7)&255,n(d),k(0===b),l(0),m(0),h=b,d=!0);break;case 2:39>=b?(b=g,d=128===(b&128),b=b<<1&255,n(d),k(0===b),l(0),m(0),h=b,d=!0):47>=b&&(b=g,d=128===(b&128),g=1===(b&1),b=b>>1&255,d&&(b|=128),k(0===b),l(0),m(0),n(g),h=b,d=!0);break;case 3:55>=b?(b=g,b=((b&15)<<4|(b&240)>>4)&255,k(0===b),l(0),m(0),n(0),h=b,d=!0):63>=b&&(b=g,d= |
||||
1===(b&1),b=b>>1&255,k(0===b),l(0),m(0),n(d),h=b,d=!0);break;case 4:71>=b?(h=dc(0,g),d=!0):79>=b&&(h=dc(1,g),d=!0);break;case 5:87>=b?(h=dc(2,g),d=!0):95>=b&&(h=dc(3,g),d=!0);break;case 6:103>=b?(h=dc(4,g),d=!0):111>=b&&(h=dc(5,g),d=!0);break;case 7:119>=b?(h=dc(6,g),d=!0):127>=b&&(h=dc(7,g),d=!0);break;case 8:135>=b?(h=ec(0,0,g),d=!0):143>=b&&(h=ec(1,0,g),d=!0);break;case 9:151>=b?(h=ec(2,0,g),d=!0):159>=b&&(h=ec(3,0,g),d=!0);break;case 10:167>=b?(h=ec(4,0,g),d=!0):175>=b&&(h=ec(5,0,g),d=!0);break; |
||||
case 11:183>=b?(h=ec(6,0,g),d=!0):191>=b&&(h=ec(7,0,g),d=!0);break;case 12:199>=b?(h=ec(0,1,g),d=!0):207>=b&&(h=ec(1,1,g),d=!0);break;case 13:215>=b?(h=ec(2,1,g),d=!0):223>=b&&(h=ec(3,1,g),d=!0);break;case 14:231>=b?(h=ec(4,1,g),d=!0):239>=b&&(h=ec(5,1,g),d=!0);break;case 15:247>=b?(h=ec(6,1,g),d=!0):255>=b&&(h=ec(7,1,g),d=!0)}switch(w){case 0:f.registerB=h;break;case 1:f.registerC=h;break;case 2:f.registerD=h;break;case 3:f.registerE=h;break;case 4:f.registerH=h;break;case 5:f.registerL=h;break; |
||||
case 6:(4>A||7<A)&&yc(r(f.registerH,f.registerL),h);break;case 7:f.registerA=h}d&&(a=4);f.programCounter=f.programCounter+1&65535;return a;case 204:if(1===wa())return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,f.programCounter+2),f.programCounter=Bc(),8;f.programCounter=f.programCounter+2&65535;return 12;case 205:return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,f.programCounter+2&65535),f.programCounter=Bc(),8;case 206:return Xb(Z()),f.programCounter=f.programCounter+1&65535,4;case 207:return a= |
||||
f.stackPointer-2&65535,f.stackPointer=a,Ac(a,f.programCounter),f.programCounter=8}return-1} |
||||
function uc(a){switch(a){case 208:return 0===xa()?(a=f.stackPointer,f.programCounter=zc(a),f.stackPointer=a+2&65535,12):8;case 209:a=f.stackPointer;var b=zc(a);f.stackPointer=a+2&65535;f.registerD=t(b);f.registerE=b&255;return 4;case 210:if(0===xa())return f.programCounter=Bc(),8;f.programCounter=f.programCounter+2&65535;return 12;case 212:if(0===xa())return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,f.programCounter+2),f.programCounter=Bc(),8;f.programCounter=f.programCounter+2&65535;return 12; |
||||
case 213:return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,r(f.registerD,f.registerE)),8;case 214:return Yb(Z()),f.programCounter=f.programCounter+1&65535,4;case 215:return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,f.programCounter),f.programCounter=16,8;case 216:return 1===xa()?(a=f.stackPointer,f.programCounter=zc(a),f.stackPointer=a+2&65535,12):8;case 217:return a=f.stackPointer,f.programCounter=zc(a),xb(!0),f.stackPointer=a+2&65535,8;case 218:if(1===xa())return f.programCounter=Bc(), |
||||
8;f.programCounter=f.programCounter+2&65535;return 12;case 220:if(1===xa())return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,f.programCounter+2&65535),f.programCounter=Bc(),8;f.programCounter=f.programCounter+2&65535;return 12;case 222:return Zb(Z()),f.programCounter=f.programCounter+1&65535,4;case 223:return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,f.programCounter),f.programCounter=24,8}return-1} |
||||
function vc(a){switch(a){case 224:return a=Z(),yc(65280+a,f.registerA),f.programCounter=f.programCounter+1&65535,4;case 225:a=f.stackPointer;var b=zc(a);f.stackPointer=a+2&65535;f.registerH=t(b);f.registerL=b&255;return 4;case 226:return yc(65280+f.registerC,f.registerA),4;case 229:return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,r(f.registerH,f.registerL)),8;case 230:return $b(Z()),f.programCounter=f.programCounter+1&65535,4;case 231:return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,f.programCounter), |
||||
f.programCounter=32,8;case 232:return a=Z()<<24>>24,Aa(f.stackPointer,a,!0),f.stackPointer=f.stackPointer+a&65535,k(0),l(0),f.programCounter=f.programCounter+1&65535,12;case 233:return f.programCounter=r(f.registerH,f.registerL),4;case 234:return yc(Bc(),f.registerA),f.programCounter=f.programCounter+2&65535,4;case 238:return ac(Z()),f.programCounter=f.programCounter+1&65535,4;case 239:return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,f.programCounter),f.programCounter=40,8}return-1} |
||||
function wc(a){switch(a){case 240:return a=Z(),f.registerA=W(65280+a)&255,f.programCounter=f.programCounter+1&65535,4;case 241:a=f.stackPointer;var b=zc(a);f.stackPointer=a+2&65535;f.registerA=t(b);f.registerF=b&255;return 4;case 242:return f.registerA=W(65280+f.registerC)&255,4;case 243:return xb(!1),4;case 245:return a=f.stackPointer-2&65535,f.stackPointer=a,Ac(a,r(f.registerA,f.registerF)),8;case 246:return bc(Z()),f.programCounter=f.programCounter+1&65535,4;case 247:return a=f.stackPointer-2& |
||||
65535,f.stackPointer=a,Ac(a,f.programCounter),f.programCounter=48,8;case 248:return b=Z()<<24>>24,a=f.stackPointer,k(0),l(0),Aa(a,b,!0),a=a+b&65535,f.registerH=t(a),f.registerL=a&255,f.programCounter=f.programCounter+1&65535,8;case 249:return f.stackPointer=r(f.registerH,f.registerL),8;case 250:return f.registerA=W(Bc()),f.programCounter=f.programCounter+2&65535,4;case 251:return xb(!0),4;case 254:return cc(Z()),f.programCounter=f.programCounter+1&65535,4;case 255:return a=f.stackPointer-2&65535, |
||||
f.stackPointer=a,Ac(a,f.programCounter),f.programCounter=56,8}return-1}var Cc=function(){function a(){}a.cyclesPerCycleSet=2E9;a.cycleSets=0;a.cycles=0;return a}(); |
||||
function xc(a){0<U.DMACycles&&(a+=U.DMACycles,U.DMACycles=0);f.currentCycles+=a;if(!f.isStopped){if(e.graphicsBatchProcessing){D.currentCycles+=a;for(var b=D.batchProcessCycles();D.currentCycles>=b;)Sb(b),D.currentCycles-=b}else Sb(a);e.audioBatchProcessing?(E.currentCycles+=a,pb()):qb(a);b=a;if(Eb.transferStartFlag)for(var d=0;d<b;){var g=Eb.currentCycles,h=g;d+=4;h+=4;65535<h&&(h-=65536);Eb.currentCycles=h;var w=Eb.isClockSpeedFast?2:7;x(w,g)&&!x(w,h)&&(g=Eb.memoryLocationSerialTransferData,h=B(g), |
||||
h=(h<<1)+1,h&=255,G(g,h),g=Eb.numberOfBitsTransferred,8===++g?(Eb.numberOfBitsTransferred=0,Q.isSerialInterruptRequested=!0,yb(Q.bitPositionSerialInterrupt),g=Eb.memoryLocationSerialTransferControl,h=B(g),G(g,u(7,h)),Eb.transferStartFlag=!1):Eb.numberOfBitsTransferred=g)}}e.timersBatchProcessing?(S.currentCycles+=a,Db(S.currentCycles),S.currentCycles=0):Db(a);b=Cc.cycles;b+=a;b>=Cc.cyclesPerCycleSet&&(Cc.cycleSets+=1,b-=Cc.cyclesPerCycleSet);Cc.cycles=b} |
||||
var Dc=function(){function a(){}a.stepsPerStepSet=2E9;a.stepSets=0;a.steps=0;a.RESPONSE_CONDITION_ERROR=-1;a.RESPONSE_CONDITION_FRAME=0;a.RESPONSE_CONDITION_AUDIO=1;a.RESPONSE_CONDITION_BREAKPOINT=2;return a}();function Ec(){return Fc(!0,-1)} |
||||
function Fc(a,b){void 0===b&&(b=-1);a=1024;0<b?a=b:0>b&&(a=-1);for(var d=!1,g=!1,h=!1;!(d||g||h||Nb.reachedBreakpoint);)b=Gc(),0>b?d=!0:f.currentCycles>=f.MAX_CYCLES_PER_FRAME()?g=!0:-1<a&&tb()>=a&&(h=!0);if(g)return f.currentCycles-=f.MAX_CYCLES_PER_FRAME(),Dc.RESPONSE_CONDITION_FRAME;if(h)return Dc.RESPONSE_CONDITION_AUDIO;if(Nb.reachedBreakpoint)return Nb.reachedBreakpoint=!1,Dc.RESPONSE_CONDITION_BREAKPOINT;f.programCounter=f.programCounter-1&65535;return-1} |
||||
function Gc(){Hc=!0;if(f.isHaltBug){var a=B(f.programCounter);a=gc(a);xc(a);f.exitHaltAndStop()}Q.masterInterruptSwitchDelay&&(Q.masterInterruptSwitch=!0,Q.masterInterruptSwitchDelay=!1);if(0<(Q.interruptsEnabledValue&Q.interruptsRequestedValue&31)){a=!1;Q.masterInterruptSwitch&&!f.isHaltNoJump&&(Q.isVBlankInterruptEnabled&&Q.isVBlankInterruptRequested?(wb(Q.bitPositionVBlankInterrupt),a=!0):Q.isLcdInterruptEnabled&&Q.isLcdInterruptRequested?(wb(Q.bitPositionLcdInterrupt),a=!0):Q.isTimerInterruptEnabled&& |
||||
Q.isTimerInterruptRequested?(wb(Q.bitPositionTimerInterrupt),a=!0):Q.isSerialInterruptEnabled&&Q.isSerialInterruptRequested?(wb(Q.bitPositionSerialInterrupt),a=!0):Q.isJoypadInterruptEnabled&&Q.isJoypadInterruptRequested&&(wb(Q.bitPositionJoypadInterrupt),a=!0));var b=0;a&&(b=20,f.isHalted()&&(f.exitHaltAndStop(),b+=4));f.isHalted()&&f.exitHaltAndStop();a=b}else a=0;0<a&&xc(a);a=4;f.isHalted()||f.isStopped||(a=B(f.programCounter),a=gc(a));f.registerF&=240;if(0>=a)return a;xc(a);b=Dc.steps;b+=1;b>= |
||||
Dc.stepsPerStepSet&&(Dc.stepSets+=1,b-=Dc.stepsPerStepSet);Dc.steps=b;f.programCounter===Nb.programCounter&&(Nb.reachedBreakpoint=!0);return a}aa.size()<ua&&aa.grow(ua-aa.size()); |
||||
var Hc=!1,Ic=Object.freeze({memory:aa,config:function(a,b,d,g,h,w,A,z,v,y){e.enableBootRom=0<a;e.useGbcWhenAvailable=0<b;e.audioBatchProcessing=0<d;e.graphicsBatchProcessing=0<g;e.timersBatchProcessing=0<h;e.graphicsDisableScanlineRendering=0<w;e.audioAccumulateSamples=0<A;e.tileRendering=0<z;e.tileCaching=0<v;e.enableAudioDebugging=0<y;a=B(323);f.GBCEnabled=192===a||e.useGbcWhenAvailable&&128===a?!0:!1;Hc=!1;Cc.cyclesPerCycleSet=2E9;Cc.cycleSets=0;Cc.cycles=0;Dc.stepsPerStepSet=2E9;Dc.stepSets=0; |
||||
Dc.steps=0;f.BootROMEnabled=e.enableBootRom?!0:!1;f.GBCDoubleSpeed=!1;f.registerA=0;f.registerB=0;f.registerC=0;f.registerD=0;f.registerE=0;f.registerH=0;f.registerL=0;f.registerF=0;f.stackPointer=0;f.programCounter=0;f.currentCycles=0;f.isHaltNormal=!1;f.isHaltNoJump=!1;f.isHaltBug=!1;f.isStopped=!1;f.BootROMEnabled||(f.GBCEnabled?(f.registerA=17,f.registerF=128,f.registerB=0,f.registerC=0,f.registerD=255,f.registerE=86,f.registerH=0,f.registerL=13):(f.registerA=1,f.registerF=176,f.registerB=0,f.registerC= |
||||
19,f.registerD=0,f.registerE=216,f.registerH=1,f.registerL=77),f.programCounter=256,f.stackPointer=65534);U.isRamBankingEnabled=!1;U.isMBC1RomModeEnabled=!0;a=B(327);U.isRomOnly=0===a;U.isMBC1=1<=a&&3>=a;U.isMBC2=5<=a&&6>=a;U.isMBC3=15<=a&&19>=a;U.isMBC5=25<=a&&30>=a;U.currentRomBank=1;U.currentRamBank=0;G(U.memoryLocationGBCVRAMBank,0);G(U.memoryLocationGBCWRAMBank,1);G(65361,255);G(65362,255);G(65363,255);G(65364,255);G(65365,255);D.currentCycles=0;D.scanlineCycleCounter=0;D.scanlineRegister=0; |
||||
D.scrollX=0;D.scrollY=0;D.windowX=0;D.windowY=0;D.scanlineRegister=144;f.GBCEnabled?(G(65345,129),G(65348,144),G(65351,252)):(G(65345,133),G(65350,255),G(65351,252),G(65352,255),G(65353,255));D.scanlineRegister=144;G(65344,145);G(65359,0);G(65392,1);f.BootROMEnabled&&(f.GBCEnabled?(D.scanlineRegister=0,G(65344,0),G(65345,128),G(65348,0)):(D.scanlineRegister=0,G(65344,0),G(65345,132)));ab(0);if(!f.GBCEnabled&&(!f.BootROMEnabled||f.GBCEnabled)){a=0;for(b=308;323>=b;b++)a+=B(b);switch(a&255){case 136:q.bgWhite= |
||||
Pa.bgWhite;q.bgLightGrey=Pa.bgLightGrey;q.bgDarkGrey=Pa.bgDarkGrey;q.bgBlack=Pa.bgBlack;q.obj0White=Pa.obj0White;q.obj0LightGrey=Pa.obj0LightGrey;q.obj0DarkGrey=Pa.obj0DarkGrey;q.obj0Black=Pa.obj0Black;q.obj1White=Pa.obj1White;q.obj1LightGrey=Pa.obj1LightGrey;q.obj1DarkGrey=Pa.obj1DarkGrey;q.obj1Black=Pa.obj1Black;break;case 97:q.bgWhite=Qa.bgWhite;q.bgLightGrey=Qa.bgLightGrey;q.bgDarkGrey=Qa.bgDarkGrey;q.bgBlack=Qa.bgBlack;q.obj0White=Qa.obj0White;q.obj0LightGrey=Qa.obj0LightGrey;q.obj0DarkGrey= |
||||
Qa.obj0DarkGrey;q.obj0Black=Qa.obj0Black;q.obj1White=Qa.obj1White;q.obj1LightGrey=Qa.obj1LightGrey;q.obj1DarkGrey=Qa.obj1DarkGrey;q.obj1Black=Qa.obj1Black;break;case 20:q.bgWhite=Ra.bgWhite;q.bgLightGrey=Ra.bgLightGrey;q.bgDarkGrey=Ra.bgDarkGrey;q.bgBlack=Ra.bgBlack;q.obj0White=Ra.obj0White;q.obj0LightGrey=Ra.obj0LightGrey;q.obj0DarkGrey=Ra.obj0DarkGrey;q.obj0Black=Ra.obj0Black;q.obj1White=Ra.obj1White;q.obj1LightGrey=Ra.obj1LightGrey;q.obj1DarkGrey=Ra.obj1DarkGrey;q.obj1Black=Ra.obj1Black;break; |
||||
case 70:q.bgWhite=Sa.bgWhite;q.bgLightGrey=Sa.bgLightGrey;q.bgDarkGrey=Sa.bgDarkGrey;q.bgBlack=Sa.bgBlack;q.obj0White=Sa.obj0White;q.obj0LightGrey=Sa.obj0LightGrey;q.obj0DarkGrey=Sa.obj0DarkGrey;q.obj0Black=Sa.obj0Black;q.obj1White=Sa.obj1White;q.obj1LightGrey=Sa.obj1LightGrey;q.obj1DarkGrey=Sa.obj1DarkGrey;q.obj1Black=Sa.obj1Black;break;case 89:case 198:q.bgWhite=Ta.bgWhite;q.bgLightGrey=Ta.bgLightGrey;q.bgDarkGrey=Ta.bgDarkGrey;q.bgBlack=Ta.bgBlack;q.obj0White=Ta.obj0White;q.obj0LightGrey=Ta.obj0LightGrey; |
||||
q.obj0DarkGrey=Ta.obj0DarkGrey;q.obj0Black=Ta.obj0Black;q.obj1White=Ta.obj1White;q.obj1LightGrey=Ta.obj1LightGrey;q.obj1DarkGrey=Ta.obj1DarkGrey;q.obj1Black=Ta.obj1Black;break;case 134:case 168:q.bgWhite=Ua.bgWhite;q.bgLightGrey=Ua.bgLightGrey;q.bgDarkGrey=Ua.bgDarkGrey;q.bgBlack=Ua.bgBlack;q.obj0White=Ua.obj0White;q.obj0LightGrey=Ua.obj0LightGrey;q.obj0DarkGrey=Ua.obj0DarkGrey;q.obj0Black=Ua.obj0Black;q.obj1White=Ua.obj1White;q.obj1LightGrey=Ua.obj1LightGrey;q.obj1DarkGrey=Ua.obj1DarkGrey;q.obj1Black= |
||||
Ua.obj1Black;break;case 191:case 206:case 209:case 240:q.bgWhite=Va.bgWhite;q.bgLightGrey=Va.bgLightGrey;q.bgDarkGrey=Va.bgDarkGrey;q.bgBlack=Va.bgBlack;q.obj0White=Va.obj0White;q.obj0LightGrey=Va.obj0LightGrey;q.obj0DarkGrey=Va.obj0DarkGrey;q.obj0Black=Va.obj0Black;q.obj1White=Va.obj1White;q.obj1LightGrey=Va.obj1LightGrey;q.obj1DarkGrey=Va.obj1DarkGrey;q.obj1Black=Va.obj1Black;break;case 39:case 73:case 92:case 179:q.bgWhite=Wa.bgWhite;q.bgLightGrey=Wa.bgLightGrey;q.bgDarkGrey=Wa.bgDarkGrey;q.bgBlack= |
||||
Wa.bgBlack;q.obj0White=Wa.obj0White;q.obj0LightGrey=Wa.obj0LightGrey;q.obj0DarkGrey=Wa.obj0DarkGrey;q.obj0Black=Wa.obj0Black;q.obj1White=Wa.obj1White;q.obj1LightGrey=Wa.obj1LightGrey;q.obj1DarkGrey=Wa.obj1DarkGrey;q.obj1Black=Wa.obj1Black;break;case 201:q.bgWhite=Xa.bgWhite;q.bgLightGrey=Xa.bgLightGrey;q.bgDarkGrey=Xa.bgDarkGrey;q.bgBlack=Xa.bgBlack;q.obj0White=Xa.obj0White;q.obj0LightGrey=Xa.obj0LightGrey;q.obj0DarkGrey=Xa.obj0DarkGrey;q.obj0Black=Xa.obj0Black;q.obj1White=Xa.obj1White;q.obj1LightGrey= |
||||
Xa.obj1LightGrey;q.obj1DarkGrey=Xa.obj1DarkGrey;q.obj1Black=Xa.obj1Black;break;case 112:q.bgWhite=Ya.bgWhite;q.bgLightGrey=Ya.bgLightGrey;q.bgDarkGrey=Ya.bgDarkGrey;q.bgBlack=Ya.bgBlack;q.obj0White=Ya.obj0White;q.obj0LightGrey=Ya.obj0LightGrey;q.obj0DarkGrey=Ya.obj0DarkGrey;q.obj0Black=Ya.obj0Black;q.obj1White=Ya.obj1White;q.obj1LightGrey=Ya.obj1LightGrey;q.obj1DarkGrey=Ya.obj1DarkGrey;q.obj1Black=Ya.obj1Black;break;case 70:q.bgWhite=Za.bgWhite;q.bgLightGrey=Za.bgLightGrey;q.bgDarkGrey=Za.bgDarkGrey; |
||||
q.bgBlack=Za.bgBlack;q.obj0White=Za.obj0White;q.obj0LightGrey=Za.obj0LightGrey;q.obj0DarkGrey=Za.obj0DarkGrey;q.obj0Black=Za.obj0Black;q.obj1White=Za.obj1White;q.obj1LightGrey=Za.obj1LightGrey;q.obj1DarkGrey=Za.obj1DarkGrey;q.obj1Black=Za.obj1Black;break;case 211:q.bgWhite=$a.bgWhite,q.bgLightGrey=$a.bgLightGrey,q.bgDarkGrey=$a.bgDarkGrey,q.bgBlack=$a.bgBlack,q.obj0White=$a.obj0White,q.obj0LightGrey=$a.obj0LightGrey,q.obj0DarkGrey=$a.obj0DarkGrey,q.obj0Black=$a.obj0Black,q.obj1White=$a.obj1White, |
||||
q.obj1LightGrey=$a.obj1LightGrey,q.obj1DarkGrey=$a.obj1DarkGrey,q.obj1Black=$a.obj1Black}}f.GBCEnabled?(G(65384,192),G(65385,255),G(65386,193),G(65387,13)):(G(65384,255),G(65385,255),G(65386,255),G(65387,255));f.BootROMEnabled&&f.GBCEnabled&&(G(65385,32),G(65387,138));E.currentCycles=0;E.NR50LeftMixerVolume=0;E.NR50RightMixerVolume=0;E.NR51IsChannel1EnabledOnLeftOutput=!0;E.NR51IsChannel2EnabledOnLeftOutput=!0;E.NR51IsChannel3EnabledOnLeftOutput=!0;E.NR51IsChannel4EnabledOnLeftOutput=!0;E.NR51IsChannel1EnabledOnRightOutput= |
||||
!0;E.NR51IsChannel2EnabledOnRightOutput=!0;E.NR51IsChannel3EnabledOnRightOutput=!0;E.NR51IsChannel4EnabledOnRightOutput=!0;E.NR52IsSoundEnabled=!0;E.frameSequenceCycleCounter=0;E.downSampleCycleCounter=0;E.frameSequencer=0;E.audioQueueIndex=0;I.initialize();M.initialize();N.initialize();O.initialize();G(E.memoryLocationNR50,119);E.updateNR50(119);G(E.memoryLocationNR51,243);E.updateNR51(243);G(E.memoryLocationNR52,241);E.updateNR52(241);f.BootROMEnabled&&(G(E.memoryLocationNR50,0),E.updateNR50(0), |
||||
G(E.memoryLocationNR51,0),E.updateNR51(0),G(E.memoryLocationNR52,112),E.updateNR52(112));P.channel1Sample=15;P.channel2Sample=15;P.channel3Sample=15;P.channel4Sample=15;P.channel1DacEnabled=!1;P.channel2DacEnabled=!1;P.channel3DacEnabled=!1;P.channel4DacEnabled=!1;P.leftChannelSampleUnsignedByte=127;P.rightChannelSampleUnsignedByte=127;P.mixerVolumeChanged=!0;P.mixerEnabledChanged=!0;P.needToRemixSamples=!1;Q.updateInterruptEnabled(0);G(Q.memoryLocationInterruptEnabled,Q.interruptsEnabledValue);Q.updateInterruptRequested(225); |
||||
G(Q.memoryLocationInterruptRequest,Q.interruptsRequestedValue);S.currentCycles=0;S.dividerRegister=0;S.timerCounter=0;S.timerModulo=0;S.timerEnabled=!1;S.timerInputClock=0;S.timerCounterOverflowDelay=!1;S.timerCounterWasReset=!1;f.GBCEnabled?(G(65284,30),S.dividerRegister=7840):(G(65284,171),S.dividerRegister=43980);G(65287,248);S.timerInputClock=248;f.BootROMEnabled&&!f.GBCEnabled&&(G(65284,0),S.dividerRegister=4);Eb.currentCycles=0;Eb.numberOfBitsTransferred=0;f.GBCEnabled?(G(65282,124),Eb.updateTransferControl(124)): |
||||
(G(65282,126),Eb.updateTransferControl(126));f.GBCEnabled?(G(65392,248),G(65359,254),G(65357,126),G(65280,207),G(65295,225),G(65388,254),G(65397,143)):(G(65392,255),G(65359,255),G(65357,255),G(65280,207),G(65295,225))},hasCoreStarted:function(){return Hc},saveState:function(){f.saveState();D.saveState();Q.saveState();T.saveState();U.saveState();S.saveState();E.saveState();I.saveState();M.saveState();N.saveState();O.saveState();Hc=!1},loadState:function(){f.loadState();D.loadState();Q.loadState(); |
||||
T.loadState();U.loadState();S.loadState();E.loadState();I.loadState();M.loadState();N.loadState();O.loadState();Hc=!1;Cc.cyclesPerCycleSet=2E9;Cc.cycleSets=0;Cc.cycles=0;Dc.stepsPerStepSet=2E9;Dc.stepSets=0;Dc.steps=0},isGBC:function(){return f.GBCEnabled},getStepsPerStepSet:function(){return Dc.stepsPerStepSet},getStepSets:function(){return Dc.stepSets},getSteps:function(){return Dc.steps},executeMultipleFrames:function(a){for(var b=0,d=0;d<a&&0<=b;)b=Ec(),d+=1;return 0>b?b:0},executeFrame:Ec,executeFrameAndCheckAudio:function(a){void 0=== |
||||
a&&(a=0);return Fc(!0,a)},executeUntilCondition:Fc,executeStep:Gc,getCyclesPerCycleSet:function(){return Cc.cyclesPerCycleSet},getCycleSets:function(){return Cc.cycleSets},getCycles:function(){return Cc.cycles},setJoypadState:function(a,b,d,g,h,w,A,z){0<a?Fb(0):Hb(0,!1);0<b?Fb(1):Hb(1,!1);0<d?Fb(2):Hb(2,!1);0<g?Fb(3):Hb(3,!1);0<h?Fb(4):Hb(4,!1);0<w?Fb(5):Hb(5,!1);0<A?Fb(6):Hb(6,!1);0<z?Fb(7):Hb(7,!1)},getNumberOfSamplesInAudioBuffer:tb,clearAudioBuffer:ob,setManualColorizationPalette:ab,WASMBOY_MEMORY_LOCATION:0, |
||||
WASMBOY_MEMORY_SIZE:ta,WASMBOY_WASM_PAGES:ua,ASSEMBLYSCRIPT_MEMORY_LOCATION:0,ASSEMBLYSCRIPT_MEMORY_SIZE:1024,WASMBOY_STATE_LOCATION:1024,WASMBOY_STATE_SIZE:1024,GAMEBOY_INTERNAL_MEMORY_LOCATION:2048,GAMEBOY_INTERNAL_MEMORY_SIZE:ba,VIDEO_RAM_LOCATION:2048,VIDEO_RAM_SIZE:16384,WORK_RAM_LOCATION:18432,WORK_RAM_SIZE:32768,OTHER_GAMEBOY_INTERNAL_MEMORY_LOCATION:51200,OTHER_GAMEBOY_INTERNAL_MEMORY_SIZE:16384,GRAPHICS_OUTPUT_LOCATION:ca,GRAPHICS_OUTPUT_SIZE:ja,GBC_PALETTE_LOCATION:ca,GBC_PALETTE_SIZE:128, |
||||
BG_PRIORITY_MAP_LOCATION:da,BG_PRIORITY_MAP_SIZE:23552,FRAME_LOCATION:ea,FRAME_SIZE:93184,BACKGROUND_MAP_LOCATION:fa,BACKGROUND_MAP_SIZE:196608,TILE_DATA_LOCATION:ha,TILE_DATA_SIZE:147456,OAM_TILES_LOCATION:ia,OAM_TILES_SIZE:15360,AUDIO_BUFFER_LOCATION:oa,AUDIO_BUFFER_SIZE:131072,CHANNEL_1_BUFFER_LOCATION:ka,CHANNEL_1_BUFFER_SIZE:131072,CHANNEL_2_BUFFER_LOCATION:la,CHANNEL_2_BUFFER_SIZE:131072,CHANNEL_3_BUFFER_LOCATION:ma,CHANNEL_3_BUFFER_SIZE:131072,CHANNEL_4_BUFFER_LOCATION:na,CHANNEL_4_BUFFER_SIZE:131072, |
||||
CARTRIDGE_RAM_LOCATION:pa,CARTRIDGE_RAM_SIZE:131072,BOOT_ROM_LOCATION:qa,BOOT_ROM_SIZE:2560,CARTRIDGE_ROM_LOCATION:ra,CARTRIDGE_ROM_SIZE:8258560,DEBUG_GAMEBOY_MEMORY_LOCATION:sa,DEBUG_GAMEBOY_MEMORY_SIZE:65535,getWasmBoyOffsetFromGameBoyOffset:Mb,setProgramCounterBreakpoint:function(a){Nb.programCounter=a},resetProgramCounterBreakpoint:function(){Nb.programCounter=-1},setReadGbMemoryBreakpoint:function(a){Nb.readGbMemory=a},resetReadGbMemoryBreakpoint:function(){Nb.readGbMemory=-1},setWriteGbMemoryBreakpoint:function(a){Nb.writeGbMemory= |
||||
a},resetWriteGbMemoryBreakpoint:function(){Nb.writeGbMemory=-1},getRegisterA:function(){return f.registerA},getRegisterB:function(){return f.registerB},getRegisterC:function(){return f.registerC},getRegisterD:function(){return f.registerD},getRegisterE:function(){return f.registerE},getRegisterH:function(){return f.registerH},getRegisterL:function(){return f.registerL},getRegisterF:function(){return f.registerF},getProgramCounter:function(){return f.programCounter},getStackPointer:function(){return f.stackPointer}, |
||||
getOpcodeAtProgramCounter:function(){return B(f.programCounter)},getLY:function(){return D.scanlineRegister},getScrollX:function(){return D.scrollX},getScrollY:function(){return D.scrollY},getWindowX:function(){return D.windowX},getWindowY:function(){return D.windowY},drawBackgroundMapToWasmMemory:function(a){var b=D.memoryLocationTileDataSelectZeroStart;V.bgWindowTileDataSelect&&(b=D.memoryLocationTileDataSelectOneStart);var d=D.memoryLocationTileMapSelectZeroStart;V.bgTileMapDisplaySelect&&(d=D.memoryLocationTileMapSelectOneStart); |
||||
for(var g=0;256>g;g++)for(var h=0;256>h;h++){var w=g,A=h,z=d+32*(w>>3)+(A>>3),v=kb(z,0);v=jb(b,v);var y=w%8;w=A%8;w=7-w;A=0;f.GBCEnabled&&0<a&&(A=kb(z,1));x(6,A)&&(y=7-y);var J=0;x(3,A)&&(J=1);z=kb(v+2*y,J);v=kb(v+2*y+1,J);y=0;x(w,v)&&(y+=1,y<<=1);x(w,z)&&(y+=1);v=3*(256*g+h);f.GBCEnabled&&0<a?(z=db(A&7,y,!1),A=fb(0,z),w=fb(1,z),z=fb(2,z),v=fa+v,c[v]=A,c[v+1]=w,c[v+2]=z):(A=cb(y,D.memoryLocationBackgroundPalette),v=fa+v,c[v+0]=(A&16711680)>>16,c[v+1]=(A&65280)>>8,c[v+2]=A&255)}},drawTileDataToWasmMemory:function(){for(var a= |
||||
0;23>a;a++)for(var b=0;31>b;b++){var d=0;15<b&&(d=1);var g=a;15<a&&(g-=15);g<<=4;g=15<b?g+(b-15):g+b;var h=D.memoryLocationTileDataSelectOneStart;15<a&&(h=D.memoryLocationTileDataSelectZeroStart);for(var w=D.memoryLocationBackgroundPalette,A=-1,z=-1,v=0;8>v;v++)for(var y=0;5>y;y++){var J=4*(8*y+v),C=B(D.memoryLocationSpriteAttributesTable+J+2);g===C&&(J=B(D.memoryLocationSpriteAttributesTable+J+3),C=0,f.GBCEnabled&&x(3,J)&&(C=1),C===d&&(z=J,v=8,y=5,w=D.memoryLocationSpritePaletteOne,x(4,z)&&(w=D.memoryLocationSpritePaletteTwo)))}if(f.GBCEnabled&& |
||||
0>z){v=D.memoryLocationTileMapSelectZeroStart;V.bgTileMapDisplaySelect&&(v=D.memoryLocationTileMapSelectOneStart);y=-1;for(J=0;32>J;J++)for(C=0;32>C;C++){var K=v+32*C+J,X=kb(K,0);g===X&&(y=K,C=J=32)}0<=y&&(A=kb(y,1))}for(v=0;8>v;v++)ib(g,h,d,0,7,v,8*b,8*a+v,248,ha,!1,w,A,z)}},drawOamToWasmMemory:function(){for(var a=0;8>a;a++)for(var b=0;5>b;b++){var d=4*(8*b+a);B(D.memoryLocationSpriteAttributesTable+d);B(D.memoryLocationSpriteAttributesTable+d+1);var g=B(D.memoryLocationSpriteAttributesTable+d+ |
||||
2),h=1;V.tallSpriteSize&&(1===g%2&&--g,h+=1);d=B(D.memoryLocationSpriteAttributesTable+d+3);var w=0;f.GBCEnabled&&x(3,d)&&(w=1);var A=D.memoryLocationSpritePaletteOne;x(4,d)&&(A=D.memoryLocationSpritePaletteTwo);for(var z=0;z<h;z++)for(var v=0;8>v;v++)ib(g+z,D.memoryLocationTileDataSelectOneStart,w,0,7,v,8*a,16*b+v+8*z,64,ia,!1,A,-1,d)}},getDIV:function(){return S.dividerRegister},getTIMA:function(){return S.timerCounter},getTMA:function(){return S.timerModulo},getTAC:function(){var a=S.timerInputClock; |
||||
S.timerEnabled&&(a|=4);return a},updateDebugGBMemory:function(){for(var a=0;65535>a;a++){var b=Jb(a);c[sa+a]=b}Nb.reachedBreakpoint=!1}});export default async()=>({instance:{exports:Ic},byteMemory:aa.wasmByteMemory,type:"TypeScript"}) |
||||
//# sourceMappingURL=getWasmBoyTsCore.closure.esm.js.map
|
||||
@ -0,0 +1,219 @@
|
||||
'use strict';var WasmBoyTsCore=function(){function fb(a,c){a=1<<a&255;b.registerF=0<c?b.registerF|a:b.registerF&(255^a);return b.registerF}function x(a){fb(7,a)}function q(a){fb(6,a)}function H(a){fb(5,a)}function K(a){fb(4,a)}function Ma(){return b.registerF>>7&1}function Q(){return b.registerF>>4&1}function N(a,c){0<=c?H(0!==((a&15)+(c&15)&16)):H((Math.abs(c)&15)>(a&15))}function qb(a,c){0<=c?K(a>(a+c&255)):K(Math.abs(c)>a)}function Qa(a,c,b){b?(a=a^c^a+c,H(0!==(a&16)),K(0!==(a&256))):(b=a+c&65535, |
||||
K(b<a),H(0!==((a^c^b)&4096)))}function Mb(a){switch(a){case 0:d.bgWhite=L.bgWhite;d.bgLightGrey=L.bgLightGrey;d.bgDarkGrey=L.bgDarkGrey;d.bgBlack=L.bgBlack;d.obj0White=L.obj0White;d.obj0LightGrey=L.obj0LightGrey;d.obj0DarkGrey=L.obj0DarkGrey;d.obj0Black=L.obj0Black;d.obj1White=L.obj1White;d.obj1LightGrey=L.obj1LightGrey;d.obj1DarkGrey=L.obj1DarkGrey;d.obj1Black=L.obj1Black;break;case 1:d.bgWhite=ba.bgWhite;d.bgLightGrey=ba.bgLightGrey;d.bgDarkGrey=ba.bgDarkGrey;d.bgBlack=ba.bgBlack;d.obj0White=ba.obj0White; |
||||
d.obj0LightGrey=ba.obj0LightGrey;d.obj0DarkGrey=ba.obj0DarkGrey;d.obj0Black=ba.obj0Black;d.obj1White=ba.obj1White;d.obj1LightGrey=ba.obj1LightGrey;d.obj1DarkGrey=ba.obj1DarkGrey;d.obj1Black=ba.obj1Black;break;case 2:d.bgWhite=ca.bgWhite;d.bgLightGrey=ca.bgLightGrey;d.bgDarkGrey=ca.bgDarkGrey;d.bgBlack=ca.bgBlack;d.obj0White=ca.obj0White;d.obj0LightGrey=ca.obj0LightGrey;d.obj0DarkGrey=ca.obj0DarkGrey;d.obj0Black=ca.obj0Black;d.obj1White=ca.obj1White;d.obj1LightGrey=ca.obj1LightGrey;d.obj1DarkGrey= |
||||
ca.obj1DarkGrey;d.obj1Black=ca.obj1Black;break;case 3:d.bgWhite=da.bgWhite;d.bgLightGrey=da.bgLightGrey;d.bgDarkGrey=da.bgDarkGrey;d.bgBlack=da.bgBlack;d.obj0White=da.obj0White;d.obj0LightGrey=da.obj0LightGrey;d.obj0DarkGrey=da.obj0DarkGrey;d.obj0Black=da.obj0Black;d.obj1White=da.obj1White;d.obj1LightGrey=da.obj1LightGrey;d.obj1DarkGrey=da.obj1DarkGrey;d.obj1Black=da.obj1Black;break;case 4:d.bgWhite=ea.bgWhite;d.bgLightGrey=ea.bgLightGrey;d.bgDarkGrey=ea.bgDarkGrey;d.bgBlack=ea.bgBlack;d.obj0White= |
||||
ea.obj0White;d.obj0LightGrey=ea.obj0LightGrey;d.obj0DarkGrey=ea.obj0DarkGrey;d.obj0Black=ea.obj0Black;d.obj1White=ea.obj1White;d.obj1LightGrey=ea.obj1LightGrey;d.obj1DarkGrey=ea.obj1DarkGrey;d.obj1Black=ea.obj1Black;break;case 5:d.bgWhite=fa.bgWhite;d.bgLightGrey=fa.bgLightGrey;d.bgDarkGrey=fa.bgDarkGrey;d.bgBlack=fa.bgBlack;d.obj0White=fa.obj0White;d.obj0LightGrey=fa.obj0LightGrey;d.obj0DarkGrey=fa.obj0DarkGrey;d.obj0Black=fa.obj0Black;d.obj1White=fa.obj1White;d.obj1LightGrey=fa.obj1LightGrey;d.obj1DarkGrey= |
||||
fa.obj1DarkGrey;d.obj1Black=fa.obj1Black;break;case 6:d.bgWhite=ha.bgWhite;d.bgLightGrey=ha.bgLightGrey;d.bgDarkGrey=ha.bgDarkGrey;d.bgBlack=ha.bgBlack;d.obj0White=ha.obj0White;d.obj0LightGrey=ha.obj0LightGrey;d.obj0DarkGrey=ha.obj0DarkGrey;d.obj0Black=ha.obj0Black;d.obj1White=ha.obj1White;d.obj1LightGrey=ha.obj1LightGrey;d.obj1DarkGrey=ha.obj1DarkGrey;d.obj1Black=ha.obj1Black;break;case 7:d.bgWhite=ia.bgWhite;d.bgLightGrey=ia.bgLightGrey;d.bgDarkGrey=ia.bgDarkGrey;d.bgBlack=ia.bgBlack;d.obj0White= |
||||
ia.obj0White;d.obj0LightGrey=ia.obj0LightGrey;d.obj0DarkGrey=ia.obj0DarkGrey;d.obj0Black=ia.obj0Black;d.obj1White=ia.obj1White;d.obj1LightGrey=ia.obj1LightGrey;d.obj1DarkGrey=ia.obj1DarkGrey;d.obj1Black=ia.obj1Black;break;case 8:d.bgWhite=ja.bgWhite;d.bgLightGrey=ja.bgLightGrey;d.bgDarkGrey=ja.bgDarkGrey;d.bgBlack=ja.bgBlack;d.obj0White=ja.obj0White;d.obj0LightGrey=ja.obj0LightGrey;d.obj0DarkGrey=ja.obj0DarkGrey;d.obj0Black=ja.obj0Black;d.obj1White=ja.obj1White;d.obj1LightGrey=ja.obj1LightGrey;d.obj1DarkGrey= |
||||
ja.obj1DarkGrey;d.obj1Black=ja.obj1Black;break;case 9:d.bgWhite=ka.bgWhite;d.bgLightGrey=ka.bgLightGrey;d.bgDarkGrey=ka.bgDarkGrey;d.bgBlack=ka.bgBlack;d.obj0White=ka.obj0White;d.obj0LightGrey=ka.obj0LightGrey;d.obj0DarkGrey=ka.obj0DarkGrey;d.obj0Black=ka.obj0Black;d.obj1White=ka.obj1White;d.obj1LightGrey=ka.obj1LightGrey;d.obj1DarkGrey=ka.obj1DarkGrey;d.obj1Black=ka.obj1Black;break;case 10:d.bgWhite=la.bgWhite;d.bgLightGrey=la.bgLightGrey;d.bgDarkGrey=la.bgDarkGrey;d.bgBlack=la.bgBlack;d.obj0White= |
||||
la.obj0White;d.obj0LightGrey=la.obj0LightGrey;d.obj0DarkGrey=la.obj0DarkGrey;d.obj0Black=la.obj0Black;d.obj1White=la.obj1White;d.obj1LightGrey=la.obj1LightGrey;d.obj1DarkGrey=la.obj1DarkGrey;d.obj1Black=la.obj1Black;break;case 11:d.bgWhite=ma.bgWhite;d.bgLightGrey=ma.bgLightGrey;d.bgDarkGrey=ma.bgDarkGrey;d.bgBlack=ma.bgBlack;d.obj0White=ma.obj0White;d.obj0LightGrey=ma.obj0LightGrey;d.obj0DarkGrey=ma.obj0DarkGrey;d.obj0Black=ma.obj0Black;d.obj1White=ma.obj1White;d.obj1LightGrey=ma.obj1LightGrey;d.obj1DarkGrey= |
||||
ma.obj1DarkGrey;d.obj1Black=ma.obj1Black;break;case 12:d.bgWhite=na.bgWhite,d.bgLightGrey=na.bgLightGrey,d.bgDarkGrey=na.bgDarkGrey,d.bgBlack=na.bgBlack,d.obj0White=na.obj0White,d.obj0LightGrey=na.obj0LightGrey,d.obj0DarkGrey=na.obj0DarkGrey,d.obj0Black=na.obj0Black,d.obj1White=na.obj1White,d.obj1LightGrey=na.obj1LightGrey,d.obj1DarkGrey=na.obj1DarkGrey,d.obj1Black=na.obj1Black}}function p(a,c){return(a&255)<<8|c&255}function F(a){return(a&65280)>>8}function E(a,c){return c&~(1<<a)}function l(a,c){return 0!= |
||||
(c&1<<a)}function gb(a,c){a=u(c)>>2*a&3;if(c===Sa.memoryLocationSpritePaletteOne)switch(c=d.obj0White,a){case 1:c=d.obj0LightGrey;break;case 2:c=d.obj0DarkGrey;break;case 3:c=d.obj0Black}else if(c===Sa.memoryLocationSpritePaletteTwo)switch(c=d.obj1White,a){case 1:c=d.obj1LightGrey;break;case 2:c=d.obj1DarkGrey;break;case 3:c=d.obj1Black}else switch(c=d.bgWhite,a){case 1:c=d.bgLightGrey;break;case 2:c=d.bgDarkGrey;break;case 3:c=d.bgBlack}return c}function hb(a,c,b){c=8*a+2*c;a=Nb(c+1,b);b=Nb(c,b); |
||||
return p(a,b)}function oa(a,c){a*=5;return 8*((c&31<<a)>>a)}function Nb(a,c){a&=63;c&&(a+=64);return e[Ta+a]}function ib(a,c,b,d){void 0===b&&(b=0);void 0===d&&(d=!1);b&=3;d&&(b|=4);e[Ua+(160*c+a)]=b}function rb(a,c,d,J,z,f,k,m,h,g,n,p,t,w){var Ra=0;c=$a(c,a);a=T(c+2*f,d);d=T(c+2*f+1,d);for(f=J;f<=z;++f)if(c=k+(f-J),c<h){var O=f;if(0>t||!l(5,t))O=7-O;var Pa=0;l(O,d)&&(Pa+=1,Pa<<=1);l(O,a)&&(Pa+=1);if(b.GBCEnabled&&(0<=t||0<=w)){O=0<=w;var aa=t&7;O&&(aa=w&7);var B=hb(aa,Pa,O);O=oa(0,B);aa=oa(1,B); |
||||
B=oa(2,B)}else if(0>=p&&(p=r.memoryLocationBackgroundPalette),n){aa=Pa;B=n;void 0===B&&(B=!1);O=aa;B||(O=u(p)>>(aa<<1)&3);aa=242;switch(O){case 1:aa=160;break;case 2:aa=88;break;case 3:aa=8}aa=O=B=aa}else B=gb(Pa,p),O=(B&16711680)>>16,aa=(B&65280)>>8,B&=255;var sb=3*(m*h+c);e[g+sb+0]=O;e[g+sb+1]=aa;e[g+sb+2]=B;O=!1;0<=t&&(O=l(7,t));ib(c,m,Pa,O);Ra++}return Ra}function $a(a,c){a===r.memoryLocationTileDataSelectZeroStart&&(c=l(7,c)?c-128:c+128);return a+16*c}function Ob(a,c){switch(a){case 1:return l(c, |
||||
129);case 2:return l(c,135);case 3:return l(c,126);default:return l(c,1)}}function tb(){var a=y.sweepShadowFrequency,c=a>>y.NRx0SweepShift;y.NRx0Negate?(y.sweepNegateShouldDisableChannelOnClear=!0,c=a-c):c=a+c;return c}function jb(a){switch(a){case y.channelNumber:a=y.isDacEnabled;var c=g.channel1DacEnabled!==a;g.channel1DacEnabled=a;return c;case A.channelNumber:return a=A.isDacEnabled,c=g.channel2DacEnabled!==a,g.channel2DacEnabled=a,c;case v.channelNumber:return a=v.isDacEnabled,c=g.channel3DacEnabled!== |
||||
a,g.channel3DacEnabled=a,c;case D.channelNumber:return a=D.isDacEnabled,c=g.channel4DacEnabled!==a,g.channel4DacEnabled=a,c}return!1}function ab(){for(var a=m.batchProcessCycles(),c=m.currentCycles;c>=a;)Pb(a),c-=a;m.currentCycles=c}function Pb(a){var c=m.maxFrameSequenceCycles();var b=m.frameSequenceCycleCounter+a;if(b>=c){m.frameSequenceCycleCounter=b-c;c=m.frameSequencer+1&7;switch(c){case 0:y.updateLength();A.updateLength();v.updateLength();D.updateLength();break;case 2:y.updateLength();A.updateLength(); |
||||
v.updateLength();D.updateLength();y.updateSweep();break;case 4:y.updateLength();A.updateLength();v.updateLength();D.updateLength();break;case 6:y.updateLength();A.updateLength();v.updateLength();D.updateLength();y.updateSweep();break;case 7:y.updateEnvelope(),A.updateEnvelope(),D.updateEnvelope()}m.frameSequencer=c;c=!0}else m.frameSequenceCycleCounter=b,c=!1;if(M.audioAccumulateSamples&&!c){c=y.willChannelUpdate(a)||jb(y.channelNumber);b=A.willChannelUpdate(a)||jb(A.channelNumber);var d=v.willChannelUpdate(a)|| |
||||
jb(v.channelNumber),e=D.willChannelUpdate(a)||jb(D.channelNumber);c&&(g.channel1Sample=y.getSampleFromCycleCounter());b&&(g.channel2Sample=A.getSampleFromCycleCounter());d&&(g.channel3Sample=v.getSampleFromCycleCounter());e&&(g.channel4Sample=D.getSampleFromCycleCounter());if(c||b||d||e)g.needToRemixSamples=!0;c=m.downSampleCycleCounter;c+=a;a=m.maxDownSampleCycles();c>=a&&(c-=a,g.needToRemixSamples||g.mixerVolumeChanged||g.mixerEnabledChanged?Va(g.channel1Sample,g.channel2Sample,g.channel3Sample, |
||||
g.channel4Sample):m.downSampleCycleCounter=c,Wa(g.leftChannelSampleUnsignedByte+1,g.rightChannelSampleUnsignedByte+1,kb),a=m.audioQueueIndex+1,a>=(m.wasmBoyMemoryMaxBufferSize>>1|0)-1&&--a,m.audioQueueIndex=a);m.downSampleCycleCounter=c}else{c=y.getSample(a)|0;b=A.getSample(a)|0;d=v.getSample(a)|0;e=D.getSample(a)|0;g.channel1Sample=c;g.channel2Sample=b;g.channel3Sample=d;g.channel4Sample=e;a=m.downSampleCycleCounter+a;if(a>=m.maxDownSampleCycles()){a-=m.maxDownSampleCycles();var f=Va(c,b,d,e),l= |
||||
F(f);Wa(l+1,(f&255)+1,kb);M.enableAudioDebugging&&(f=Va(c,15,15,15),l=F(f),Wa(l+1,(f&255)+1,ub),f=Va(15,b,15,15),l=F(f),Wa(l+1,(f&255)+1,vb),f=Va(15,15,d,15),l=F(f),Wa(l+1,(f&255)+1,wb),f=Va(15,15,15,e),l=F(f),Wa(l+1,(f&255)+1,xb));c=m.audioQueueIndex+1;c>=(m.wasmBoyMemoryMaxBufferSize>>1|0)-1&&--c;m.audioQueueIndex=c}m.downSampleCycleCounter=a}}function Qb(){return m.audioQueueIndex}function Rb(){m.audioQueueIndex=0}function Va(a,c,b,d){void 0===a&&(a=15);void 0===c&&(c=15);void 0===b&&(b=15);void 0=== |
||||
d&&(d=15);g.mixerVolumeChanged=!1;var e=0+(m.NR51IsChannel1EnabledOnLeftOutput?a:15);e+=m.NR51IsChannel2EnabledOnLeftOutput?c:15;e+=m.NR51IsChannel3EnabledOnLeftOutput?b:15;e+=m.NR51IsChannel4EnabledOnLeftOutput?d:15;a=0+(m.NR51IsChannel1EnabledOnRightOutput?a:15);a+=m.NR51IsChannel2EnabledOnRightOutput?c:15;a+=m.NR51IsChannel3EnabledOnRightOutput?b:15;a+=m.NR51IsChannel4EnabledOnRightOutput?d:15;g.mixerEnabledChanged=!1;g.needToRemixSamples=!1;c=Sb(e,m.NR50LeftMixerVolume+1);b=Sb(a,m.NR50RightMixerVolume+ |
||||
1);g.leftChannelSampleUnsignedByte=c;g.rightChannelSampleUnsignedByte=b;return p(c,b)}function Sb(a,c){if(60===a)return 127;a=1E5*(a-60)*c>>3;a=(a/1E5|0)+60;a=1E5*a/(12E6/254|0)|0;return a|=0}function Wa(a,c,b){b+=m.audioQueueIndex<<1;e[b+0]=a+1;e[b+1]=c+1}function cc(a){switch(a){case y.memoryLocationNRx0:return a=u(y.memoryLocationNRx0),a|128;case A.memoryLocationNRx0:return a=u(A.memoryLocationNRx0),a|255;case v.memoryLocationNRx0:return a=u(v.memoryLocationNRx0),a|127;case D.memoryLocationNRx0:return a= |
||||
u(D.memoryLocationNRx0),a|255;case m.memoryLocationNR50:return a=u(m.memoryLocationNR50),a|0;case y.memoryLocationNRx1:return a=u(y.memoryLocationNRx1),a|63;case A.memoryLocationNRx1:return a=u(A.memoryLocationNRx1),a|63;case v.memoryLocationNRx1:return a=u(v.memoryLocationNRx1),a|255;case D.memoryLocationNRx1:return a=u(D.memoryLocationNRx1),a|255;case m.memoryLocationNR51:return a=u(m.memoryLocationNR51),a|0;case y.memoryLocationNRx2:return a=u(y.memoryLocationNRx2),a|0;case A.memoryLocationNRx2:return a= |
||||
u(A.memoryLocationNRx2),a|0;case v.memoryLocationNRx2:return a=u(v.memoryLocationNRx2),a|159;case D.memoryLocationNRx2:return a=u(D.memoryLocationNRx2),a|0;case m.memoryLocationNR52:return a=0,a=m.NR52IsSoundEnabled?a|128:E(7,a),a=y.isEnabled?a|1:E(0,a),a=A.isEnabled?a|2:E(1,a),a=v.isEnabled?a|4:E(2,a),a=D.isEnabled?a|8:E(3,a),a|112;case y.memoryLocationNRx3:return a=u(y.memoryLocationNRx3),a|255;case A.memoryLocationNRx3:return a=u(A.memoryLocationNRx3),a|255;case v.memoryLocationNRx3:return a=u(v.memoryLocationNRx3), |
||||
a|255;case D.memoryLocationNRx3:return a=u(D.memoryLocationNRx3),a|0;case y.memoryLocationNRx4:return a=u(y.memoryLocationNRx4),a|191;case A.memoryLocationNRx4:return a=u(A.memoryLocationNRx4),a|191;case v.memoryLocationNRx4:return a=u(v.memoryLocationNRx4),a|191;case D.memoryLocationNRx4:return a=u(D.memoryLocationNRx4),a|191}return-1}function bb(a){lb(!1);var c=u(n.memoryLocationInterruptRequest);c=E(a,c);n.interruptsRequestedValue=c;f(n.memoryLocationInterruptRequest,c);b.stackPointer-=2;b.isHalted(); |
||||
c=b.stackPointer;var d=b.programCounter,e=F(d);f(c+0,d&255);f(c+1,e);switch(a){case n.bitPositionVBlankInterrupt:n.isVBlankInterruptRequested=!1;b.programCounter=64;break;case n.bitPositionLcdInterrupt:n.isLcdInterruptRequested=!1;b.programCounter=72;break;case n.bitPositionTimerInterrupt:n.isTimerInterruptRequested=!1;b.programCounter=80;break;case n.bitPositionSerialInterrupt:n.isSerialInterruptRequested=!1;b.programCounter=88;break;case n.bitPositionJoypadInterrupt:n.isJoypadInterruptRequested= |
||||
!1,b.programCounter=96}}function Xa(a){var c=u(n.memoryLocationInterruptRequest);c|=1<<a;n.interruptsRequestedValue=c;f(n.memoryLocationInterruptRequest,c)}function lb(a){a?n.masterInterruptSwitchDelay=!0:n.masterInterruptSwitch=!1}function yb(a){for(var c=0;c<a;){var b=t.dividerRegister,d=b;c+=4;d+=4;d&=65535;t.dividerRegister=d;if(t.timerEnabled){var e=t.timerCounterWasReset;t.timerCounterOverflowDelay?(t.timerCounter=t.timerModulo,n.isTimerInterruptRequested=!0,Xa(n.bitPositionTimerInterrupt), |
||||
t.timerCounterOverflowDelay=!1,t.timerCounterWasReset=!0):e&&(t.timerCounterWasReset=!1);Tb(b,d)&&zb()}}}function zb(){var a=t.timerCounter;255<++a&&(t.timerCounterOverflowDelay=!0,a=0);t.timerCounter=a}function Tb(a,c){var b=Ab(t.timerInputClock);return l(b,a)&&!l(b,c)}function Ab(a){switch(a){case 0:return 9;case 1:return 3;case 2:return 5;case 3:return 7}return 0}function Na(a){var c=b.isStopped=!1;dc(a)||(c=!0);Ca(a,!0);c&&(c=!1,3>=a&&(c=!0),a=!1,C.isDpadType&&c&&(a=!0),C.isButtonType&&!c&&(a= |
||||
!0),a&&(n.isJoypadInterruptRequested=!0,Xa(n.bitPositionJoypadInterrupt)))}function dc(a){switch(a){case 0:return C.up;case 1:return C.right;case 2:return C.down;case 3:return C.left;case 4:return C.a;case 5:return C.b;case 6:return C.select;case 7:return C.start;default:return!1}}function Ca(a,c){switch(a){case 0:C.up=c;break;case 1:C.right=c;break;case 2:C.down=c;break;case 3:C.left=c;break;case 4:C.a=c;break;case 5:C.b=c;break;case 6:C.select=c;break;case 7:C.start=c}}function Ub(a,c,d){for(var e= |
||||
0;e<d;++e){for(var Ra=Bb(a+e),f=c+e;40959<f;)f-=8192;Cb(f,Ra)}k.DMACycles+=(32<<b.GBCDoubleSpeed)*(d>>4)}function Db(a,c){if(a===b.memoryLocationSpeedSwitch)return f(b.memoryLocationSpeedSwitch,c&1),!1;if(b.BootROMEnabled&&a===b.memoryLocationBootROMSwitch)return b.BootROMEnabled=!1,b.programCounter=255,!0;var d=k.videoRamLocation,J=k.spriteInformationTableLocation;if(a<d){if(!k.isRomOnly){d=k.isMBC1;var z=k.isMBC2;if(8191>=a){if(!z||l(4,c))c&=15,0===c?k.isRamBankingEnabled=!1:10===c&&(k.isRamBankingEnabled= |
||||
!0)}else 16383>=a?(J=k.isMBC5,!J||12287>=a?(a=k.currentRomBank,z&&(a=c&15),d?(c&=31,a&=224):k.isMBC3?(c&=127,a&=128):J&&(a&=0),k.currentRomBank=a|c):k.currentRomBank=p(0<c,k.currentRomBank&255)):!z&&24575>=a?d&&k.isMBC1RomModeEnabled?(a=k.currentRomBank&31,k.currentRomBank=a|c&224):(c=k.isMBC5?c&15:c&3,k.currentRamBank=c):!z&&32767>=a&&d&&(k.isMBC1RomModeEnabled=l(0,c))}return!1}if(a>=d&&a<k.cartridgeRamLocation)return!0;if(a>=k.echoRamLocation&&a<J)return f(a-8192,c),!0;if(a>=J&&a<=k.spriteInformationTableLocationEnd)return 2<= |
||||
w.currentLcdMode;if(a>=k.unusableMemoryLocation&&a<=k.unusableMemoryEndLocation)return!1;if(a===V.memoryLocationSerialTransferControl)return V.updateTransferControl(c);if(65296<=a&&65318>=a){ab();if(a===m.memoryLocationNR52||m.NR52IsSoundEnabled){switch(a){case y.memoryLocationNRx0:y.updateNRx0(c);break;case v.memoryLocationNRx0:v.updateNRx0(c);break;case y.memoryLocationNRx1:y.updateNRx1(c);break;case A.memoryLocationNRx1:A.updateNRx1(c);break;case v.memoryLocationNRx1:v.updateNRx1(c);break;case D.memoryLocationNRx1:D.updateNRx1(c); |
||||
break;case y.memoryLocationNRx2:y.updateNRx2(c);break;case A.memoryLocationNRx2:A.updateNRx2(c);break;case v.memoryLocationNRx2:v.volumeCodeChanged=!0;v.updateNRx2(c);break;case D.memoryLocationNRx2:D.updateNRx2(c);break;case y.memoryLocationNRx3:y.updateNRx3(c);break;case A.memoryLocationNRx3:A.updateNRx3(c);break;case v.memoryLocationNRx3:v.updateNRx3(c);break;case D.memoryLocationNRx3:D.updateNRx3(c);break;case y.memoryLocationNRx4:y.updateNRx4(c);break;case A.memoryLocationNRx4:A.updateNRx4(c); |
||||
break;case v.memoryLocationNRx4:v.updateNRx4(c);break;case D.memoryLocationNRx4:D.updateNRx4(c);break;case m.memoryLocationNR50:m.updateNR50(c);g.mixerVolumeChanged=!0;break;case m.memoryLocationNR51:m.updateNR51(c);g.mixerEnabledChanged=!0;break;case m.memoryLocationNR52:a=m.NR52IsSoundEnabled;!a&&l(7,c)&&(m.frameSequencer=7,y.waveFormPositionOnDuty=0,A.waveFormPositionOnDuty=0);if(a&&!l(7,c))for(a=65296;65318>a;++a)Cb(a,0);m.updateNR52(c)}c=!0}else c=!1;return c}if(65328<=a&&65343>=a)return ab(), |
||||
v.isEnabled?(v.handleWaveRamWrite(c),!1):!0;if(a>=w.memoryLocationLcdControl&&a<=r.memoryLocationWindowX){if(a===w.memoryLocationLcdControl)return w.updateLcdControl(c),!0;if(a===w.memoryLocationLcdStatus)return w.updateLcdStatus(c),!1;if(a===r.memoryLocationScanlineRegister)return r.scanlineRegister=0,f(a,0),!1;if(a===w.memoryLocationCoincidenceCompare)return w.coincidenceCompare=c,!0;if(a===r.memoryLocationDmaTransfer){c<<=8;for(a=0;159>=a;++a)d=u(c+a),f(k.spriteInformationTableLocation+a,d);k.DMACycles= |
||||
644;return!0}switch(a){case r.memoryLocationScrollX:r.scrollX=c;break;case r.memoryLocationScrollY:r.scrollY=c;break;case r.memoryLocationWindowX:r.windowX=c;break;case r.memoryLocationWindowY:r.windowY=c}return!0}if(a===k.memoryLocationHdmaTrigger)return b.GBCEnabled&&(k.isHblankHdmaActive&&!l(7,c)?(k.isHblankHdmaActive=!1,c=u(k.memoryLocationHdmaTrigger),f(k.memoryLocationHdmaTrigger,c|128)):(a=u(k.memoryLocationHdmaSourceHigh),d=u(k.memoryLocationHdmaSourceLow),a=p(a,d)&65520,d=u(k.memoryLocationHdmaDestinationHigh), |
||||
J=u(k.memoryLocationHdmaDestinationLow),d=p(d,J),d=(d&8176)+k.videoRamLocation,J=E(7,c),J=J+1<<4,l(7,c)?(k.isHblankHdmaActive=!0,k.hblankHdmaTransferLengthRemaining=J,k.hblankHdmaSource=a,k.hblankHdmaDestination=d,f(k.memoryLocationHdmaTrigger,E(7,c))):(Ub(a,d,J),f(k.memoryLocationHdmaTrigger,255)))),!1;if((a===k.memoryLocationGBCWRAMBank||a===k.memoryLocationGBCVRAMBank)&&k.isHblankHdmaActive&&(d=k.hblankHdmaSource,16384<=d&&32767>=d||53248<=d&&57343>=d))return!1;if(a>=Sa.memoryLocationBackgroundPaletteIndex&& |
||||
a<=Sa.memoryLocationSpritePaletteData){d=Sa.memoryLocationSpritePaletteData;if(a===Sa.memoryLocationBackgroundPaletteData||a===d)J=u(a-1),J=E(6,J),z=J&63,a===d&&(z+=64),e[Ta+z]=c,c=J,--a,l(7,c)&&f(a,c+1|128);return!0}if(a>=t.memoryLocationDividerRegister&&a<=t.memoryLocationTimerControl){yb(t.currentCycles);t.currentCycles=0;switch(a){case t.memoryLocationDividerRegister:return t.updateDividerRegister(),!1;case t.memoryLocationTimerCounter:t.updateTimerCounter(c);break;case t.memoryLocationTimerModulo:t.updateTimerModulo(c); |
||||
break;case t.memoryLocationTimerControl:t.updateTimerControl(c)}return!0}a===C.memoryLocationJoypadRegister&&C.updateJoypad(c);if(a===n.memoryLocationInterruptRequest)return n.updateInterruptRequested(c),!0;a===n.memoryLocationInterruptEnabled&&n.updateInterruptEnabled(c);return!0}function Eb(a){switch(a>>12){case 0:if(b.BootROMEnabled)if(b.GBCEnabled){if(256>a||511<a&&2304>a)return a+mb}else if(!b.GBCEnabled&&256>a)return a+mb;case 1:case 2:case 3:return a+nb;case 4:case 5:case 6:case 7:var c=k.currentRomBank; |
||||
k.isMBC5||0!==c||(c=1);return 16384*c+(a-k.switchableCartridgeRomLocation)+nb;case 8:case 9:return c=0,b.GBCEnabled&&(c=u(k.memoryLocationGBCVRAMBank)&1),a-k.videoRamLocation+2048+8192*c;case 10:case 11:return 8192*k.currentRamBank+(a-k.cartridgeRamLocation)+Fb;case 12:return a-k.internalRamBankZeroLocation+18432;case 13:return c=0,b.GBCEnabled&&(c=u(k.memoryLocationGBCWRAMBank)&7),a-k.internalRamBankZeroLocation+18432+4096*((1>c?1:c)-1);default:return a-k.echoRamLocation+51200}}function f(a,c){a= |
||||
Eb(a);e[a]=c}function Cb(a,c){a===W.writeGbMemory&&(W.reachedBreakpoint=!0);Db(a,c)&&f(a,c)}function Vb(a){r.scanlineCycleCounter=0;r.scanlineRegister=0;f(r.memoryLocationScanlineRegister,0);var c=u(w.memoryLocationLcdStatus);c=E(1,c);c=E(0,c);w.currentLcdMode=0;f(w.memoryLocationLcdStatus,c);if(a)for(a=0;93184>a;++a)e[Ya+a]=255}function Wb(a,c){0!==a&&1!==a||r.scanlineRegister!==w.coincidenceCompare?c=E(2,c):(c|=4,l(6,c)&&(n.isLcdInterruptRequested=!0,Xa(n.bitPositionLcdInterrupt)));return c}function Xb(a, |
||||
c,d,J,f,k){for(var Ra=J>>3;160>f;++f){var z=f+k;256<=z&&(z-=256);var m=d+(Ra<<5)+(z>>3),h=T(m,0),g=!1;if(M.tileCaching){var n=f;var p=a,t=z,w=m,v=h,B=0,q=Za.nextXIndexToPerformCacheCheck;if(0<p&&8<n&&v===Za.tileId&&n===q){v=l(5,u(w-1));w=l(5,u(w));for(var y=0;8>y;++y){v!==w&&(y=7-y);var x=n+y;if(160>=x){var A=n-(8-y),C=Ya+3*(160*p+x);Y(x,p,0,e[C]);Y(x,p,1,e[C]);Y(x,p,2,e[C]);A=e[Ua+(160*p+A)];ib(x,p,E(2,A),l(2,A));B++}}}else Za.tileId=v;n>=q&&(q=n+8,p=t&7|0,n<p&&(q+=p));Za.nextXIndexToPerformCacheCheck= |
||||
q;n=B;0<n&&(f+=n-1,g=!0)}M.tileRendering&&!g?(g=f,n=a,p=z,z=c,B=J&7|0,q=0,0==g&&(q=p-(p>>3<<3)),p=7,160<g+8&&(p=160-g),t=-1,v=0,b.GBCEnabled&&(t=T(m,1),v=l(3,t)|0,l(6,t)&&(B=7-B)),n=rb(h,z,v,q,p,B,g,n,160,Ya,!1,0,t,-1),0<n&&(f+=n-1)):g||(b.GBCEnabled?(g=f,n=a,q=J,B=$a(c,h),h=T(m,1),q=q&7|0,l(6,h)&&(q=7-q),p=l(3,h)|0,m=T(B+2*q,p),B=T(B+2*q+1,p),q=z&7|0,l(5,h)||(q=7-q),z=0,l(q,B)&&(z=z+1<<1),l(q,m)&&(z+=1),q=hb(h&7,z,!1),m=oa(0,q),B=oa(1,q),q=oa(2,q),Y(g,n,0,m),Y(g,n,1,B),Y(g,n,2,q),ib(g,n,z,l(7,h))): |
||||
(m=f,g=a,B=J,n=$a(c,h),B=B&7|0,h=T(n+2*B,0),n=T(n+2*B+1,0),B=z&7|0,B=7-B,z=0,l(B,n)&&(z=z+1<<1),l(B,h)&&(z+=1),h=gb(z,r.memoryLocationBackgroundPalette),Y(m,g,0,(h&16711680)>>16),Y(m,g,1,(h&65280)>>8),Y(m,g,2,h&255),ib(m,g,z)))}}function Yb(a){if(w.enabled)for(r.scanlineCycleCounter+=a,a=M.graphicsDisableScanlineRendering;r.scanlineCycleCounter>=r.MAX_CYCLES_PER_SCANLINE();){r.scanlineCycleCounter-=r.MAX_CYCLES_PER_SCANLINE();var c=r.scanlineRegister;if(144===c){if(a)for(var b=0;144>=b;++b)Gb(b); |
||||
else Gb(c);for(b=0;144>b;++b)for(var d=0;160>d;++d)e[Ua+(160*b+d)]=0;Za.tileId=-1;Za.nextXIndexToPerformCacheCheck=-1}else 144>c&&(a||Gb(c));c=153<c?0:c+1;r.scanlineRegister=c}if(w.enabled){c=r.scanlineRegister;b=w.currentLcdMode;a=0;if(144<=c)a=1;else{d=r.scanlineCycleCounter;var z=r.MIN_CYCLES_SPRITES_LCD_MODE();d>=z?a=2:d>=z&&(a=3)}if(b!==a){c=u(w.memoryLocationLcdStatus);w.currentLcdMode=a;b=!1;switch(a){case 0:c=E(0,c);c=E(1,c);b=l(3,c);break;case 1:c=E(1,c);c|=1;b=l(4,c);break;case 2:c=E(0, |
||||
c);c|=2;b=l(5,c);break;case 3:c|=3}b&&(n.isLcdInterruptRequested=!0,Xa(n.bitPositionLcdInterrupt));0===a&&k.isHblankHdmaActive&&(d=16,b=k.hblankHdmaTransferLengthRemaining,b<d&&(d=b),Ub(k.hblankHdmaSource,k.hblankHdmaDestination,d),k.hblankHdmaSource+=d,k.hblankHdmaDestination+=d,b-=d,k.hblankHdmaTransferLengthRemaining=b,d=k.memoryLocationHdmaTrigger,0>=b?(k.isHblankHdmaActive=!1,f(d,255)):f(d,E(7,(b>>4)-1)));1===a&&(n.isVBlankInterruptRequested=!0,Xa(n.bitPositionVBlankInterrupt));c=Wb(a,c);f(w.memoryLocationLcdStatus, |
||||
c)}else 153===c&&(c=u(w.memoryLocationLcdStatus),c=Wb(a,c),f(w.memoryLocationLcdStatus,c))}}function Gb(a){var c=r.memoryLocationTileDataSelectZeroStart;w.bgWindowTileDataSelect&&(c=r.memoryLocationTileDataSelectOneStart);if(b.GBCEnabled||w.bgDisplayEnabled){var d=r.memoryLocationTileMapSelectZeroStart;w.bgTileMapDisplaySelect&&(d=r.memoryLocationTileMapSelectOneStart);Xb(a,c,d,a+r.scrollY&255,0,r.scrollX)}if(w.windowDisplayEnabled){d=r.memoryLocationTileMapSelectZeroStart;w.windowTileMapDisplaySelect&& |
||||
(d=r.memoryLocationTileMapSelectOneStart);var f=r.windowX,z=r.windowY;a<z||(f-=7,Xb(a,c,d,a-z,f,-f|0))}if(w.spriteDisplayEnable)for(c=w.tallSpriteSize,d=39;0<=d;--d){z=4*d;var m=r.memoryLocationSpriteAttributesTable+z,k=u(m+0);f=u(m+1);var h=u(m+2);k-=16;f-=8;var n=8;c&&(n=16,h-=h&1);if(a>=k&&a<k+n){z=u(r.memoryLocationSpriteAttributesTable+z+3);m=l(7,z);var g=l(6,z),p=l(5,z);k=a-k;g&&(k=n-k,--k);k<<=1;h=$a(r.memoryLocationTileDataSelectOneStart,h);h+=k;n=b.GBCEnabled&&l(3,z);k=T(h+0,n);h=T(h+1,n); |
||||
for(n=7;0<=n;--n){g=n;p&&(g-=7,g=-g);var q=0;l(g,h)&&(q=q+1<<1);l(g,k)&&(q+=1);if(0!==q&&(g=f+(7-n),0<=g&&160>=g)){var t=b.GBCEnabled&&!w.bgDisplayEnabled,v=!1,y=!1;if(!t){var x=e[Ua+(160*a+g)],A=x&3;m&&0<A?v=!0:b.GBCEnabled&&l(2,x)&&0<A&&(y=!0)}if(t||!v&&!y)b.GBCEnabled?(v=hb(z&7,q,!0),q=oa(0,v),t=oa(1,v),v=oa(2,v),Y(g,a,0,q),Y(g,a,1,t),Y(g,a,2,v)):(t=r.memoryLocationSpritePaletteOne,l(4,z)&&(t=r.memoryLocationSpritePaletteTwo),q=gb(q,t),Y(g,a,0,(q&16711680)>>16),Y(g,a,1,(q&65280)>>8),Y(g,a,2,q& |
||||
255))}}}}}function Y(a,b,d,f){e[Ya+3*(160*b+a)+d]=f}function T(a,b){return e[a-k.videoRamLocation+2048+8192*(b&1)]}function Hb(a){var c=k.videoRamLocation;return a<c||a>=c&&a<k.cartridgeRamLocation?-1:a>=k.echoRamLocation&&a<k.spriteInformationTableLocation?u(a-8192):a>=k.spriteInformationTableLocation&&a<=k.spriteInformationTableLocationEnd?2>w.currentLcdMode?255:-1:a===b.memoryLocationSpeedSwitch?(a=255,c=u(b.memoryLocationSpeedSwitch),l(0,c)||(a=E(0,a)),b.GBCDoubleSpeed||(a=E(7,a)),a):a===r.memoryLocationScanlineRegister? |
||||
(f(a,r.scanlineRegister),r.scanlineRegister):65296<=a&&65318>=a?(ab(),cc(a)):65319<=a&&65327>=a?255:65328<=a&&65343>=a?(ab(),v.isEnabled?v.handleWaveRamRead():-1):a===t.memoryLocationDividerRegister?(c=F(t.dividerRegister),f(a,c),c):a===t.memoryLocationTimerCounter?(f(a,t.timerCounter),t.timerCounter):a===n.memoryLocationInterruptRequest?224|n.interruptsRequestedValue:a===C.memoryLocationJoypadRegister?(a=C.joypadRegisterFlipped,C.isDpadType?(a=C.up?E(2,a):a|4,a=C.right?E(0,a):a|1,a=C.down?E(3,a): |
||||
a|8,a=C.left?E(1,a):a|2):C.isButtonType&&(a=C.a?E(0,a):a|1,a=C.b?E(1,a):a|2,a=C.select?E(2,a):a|4,a=C.start?E(3,a):a|8),a|240):-1}function u(a){return e[Eb(a)]}function Bb(a){a===W.readGbMemory&&(W.reachedBreakpoint=!0);var b=Hb(a);return-1===b?u(a):b}function h(a){return 0<e[a]}function Da(a){var c=b.registerA;N(c,a);qb(c,a);c=c+a&255;b.registerA=c;x(0===c);q(0)}function Ea(a){var c=b.registerA,d=c+a+Q()&255;H(0!=((c^a^d)&16));a=c+a+Q()&65535;K(0<(a&256));b.registerA=d;x(0===d);q(0)}function Fa(a){var c= |
||||
-1*a;var d=b.registerA;N(d,c);qb(d,c);d=d-a&255;b.registerA=d;x(0===d);q(1)}function Ga(a){var c=b.registerA,d=c-a-Q()&255;H(0!=((c^a^d)&16));a=c-a-Q()&65535;K(0<(a&256));b.registerA=d;x(0===d);q(1)}function Ha(a){a&=b.registerA;b.registerA=a;x(0===a);q(0);H(1);K(0)}function Ia(a){a=(b.registerA^a)&255;b.registerA=a;x(0===a);q(0);H(0);K(0)}function Ja(a){a|=b.registerA;b.registerA=a;x(0===a);q(0);H(0);K(0)}function Ka(a){var c=b.registerA;a*=-1;N(c,a);qb(c,a);x(0===c+a);q(1)}function Oa(a,b){x(0=== |
||||
(b&1<<a));q(0);H(1);return b}function X(a,b,d){return 0<b?d|1<<a:d&~(1<<a)}function cb(a){var c=b.programCounter;c=(c+(a<<24>>24)&65535)+1&65535;b.programCounter=c}function Zb(a){var c=b.programCounter;c=c+1&65535;b.isHaltBug&&(c=c-1&65535);b.programCounter=c;switch((a&240)>>4){case 0:return ec(a);case 1:return fc(a);case 2:return gc(a);case 3:return hc(a);case 4:return ic(a);case 5:return jc(a);case 6:return kc(a);case 7:return lc(a);case 8:return mc(a);case 9:return nc(a);case 10:return oc(a);case 11:return pc(a); |
||||
case 12:return qc(a);case 13:return rc(a);case 14:return sc(a);default:return tc(a)}}function I(a){La(4);return Bb(a)}function P(a,b){La(4);Cb(a,b)}function Ba(a){La(8);var b=Hb(a);b=-1===b?u(a):b;a+=1;var d=Hb(a);a=-1===d?u(a):d;return p(a,b)}function R(a,b){La(8);var c=F(b);b&=255;Db(a,b)&&f(a,b);a+=1;Db(a,c)&&f(a,c)}function G(){La(4);return u(b.programCounter)}function U(){La(4);var a=u(b.programCounter+1&65535);return p(a,G())}function ec(a){switch(a){case 0:return 4;case 1:return a=U(),b.registerB= |
||||
F(a),b.registerC=a&255,b.programCounter=b.programCounter+2&65535,4;case 2:return P(p(b.registerB,b.registerC),b.registerA),4;case 3:return a=p(b.registerB,b.registerC),a++,b.registerB=F(a),b.registerC=a&255,8;case 4:return a=b.registerB,N(a,1),a=a+1&255,b.registerB=a,x(0===a),q(0),4;case 5:return a=b.registerB,N(a,-1),a=a-1&255,b.registerB=a,x(0===a),q(1),4;case 6:return b.registerB=G(),b.programCounter=b.programCounter+1&65535,4;case 7:return a=b.registerA,K(128===(a&128)),b.registerA=(a<<1|a>>7)& |
||||
255,x(0),q(0),H(0),4;case 8:return R(U(),b.stackPointer),b.programCounter=b.programCounter+2&65535,4;case 9:a=p(b.registerH,b.registerL);var c=p(b.registerB,b.registerC);Qa(a,c,!1);a=a+c&65535;b.registerH=F(a);b.registerL=a&255;q(0);return 8;case 10:return b.registerA=I(p(b.registerB,b.registerC)),4;case 11:return a=p(b.registerB,b.registerC),a=a-1&65535,b.registerB=F(a),b.registerC=a&255,8;case 12:return a=b.registerC,N(a,1),a=a+1&255,b.registerC=a,x(0===a),q(0),4;case 13:return a=b.registerC,N(a, |
||||
-1),a=a-1&255,b.registerC=a,x(0===a),q(1),4;case 14:return b.registerC=G(),b.programCounter=b.programCounter+1&65535,4;case 15:return a=b.registerA,K(0<(a&1)),b.registerA=(a>>1|a<<7)&255,x(0),q(0),H(0),4}return-1}function fc(a){switch(a){case 16:if(b.GBCEnabled&&(a=I(b.memoryLocationSpeedSwitch),l(0,a)))return a=E(0,a),l(7,a)?(b.GBCDoubleSpeed=!1,a=E(7,a)):(b.GBCDoubleSpeed=!0,a|=128),P(b.memoryLocationSpeedSwitch,a),68;b.isStopped=!0;b.programCounter=b.programCounter+1&65535;return 4;case 17:return a= |
||||
U(),b.registerD=F(a),b.registerE=a&255,b.programCounter=b.programCounter+2&65535,4;case 18:return P(p(b.registerD,b.registerE),b.registerA),4;case 19:return a=p(b.registerD,b.registerE),a=a+1&65535,b.registerD=F(a),b.registerE=a&255,8;case 20:return a=b.registerD,N(a,1),b.registerD=a+1&255,x(0===b.registerD),q(0),4;case 21:return a=b.registerD,N(a,-1),b.registerD=a-1&255,x(0===b.registerD),q(1),4;case 22:return b.registerD=G(),b.programCounter=b.programCounter+1&65535,4;case 23:return a=128===(b.registerA& |
||||
128),b.registerA=(b.registerA<<1|Q())&255,K(a),x(0),q(0),H(0),4;case 24:return cb(G()),8;case 25:a=p(b.registerH,b.registerL);var c=p(b.registerD,b.registerE);Qa(a,c,!1);a=a+c&65535;b.registerH=F(a);b.registerL=a&255;q(0);return 8;case 26:return a=p(b.registerD,b.registerE),b.registerA=I(a),4;case 27:return a=p(b.registerD,b.registerE),a=a-1&65535,b.registerD=F(a),b.registerE=a&255,8;case 28:return a=b.registerE,N(a,1),a=a+1&255,b.registerE=a,x(0===a),q(0),4;case 29:return a=b.registerE,N(a,-1),a= |
||||
a-1&255,b.registerE=a,x(0===a),q(1),4;case 30:return b.registerE=G(),b.programCounter=b.programCounter+1&65535,4;case 31:return a=1===(b.registerA&1),b.registerA=(b.registerA>>1|Q()<<7)&255,K(a),x(0),q(0),H(0),4}return-1}function gc(a){switch(a){case 32:return 0===Ma()?cb(G()):b.programCounter=b.programCounter+1&65535,8;case 33:return a=U(),b.registerH=F(a),b.registerL=a&255,b.programCounter=b.programCounter+2&65535,4;case 34:return a=p(b.registerH,b.registerL),P(a,b.registerA),a=a+1&65535,b.registerH= |
||||
F(a),b.registerL=a&255,4;case 35:return a=p(b.registerH,b.registerL),a=a+1&65535,b.registerH=F(a),b.registerL=a&255,8;case 36:return a=b.registerH,N(a,1),a=a+1&255,b.registerH=a,x(0===a),q(0),4;case 37:return a=b.registerH,N(a,-1),a=a-1&255,b.registerH=a,x(0===a),q(1),4;case 38:return b.registerH=G(),b.programCounter=b.programCounter+1&65535,4;case 39:a=0;0<(b.registerF>>5&1)&&(a|=6);0<Q()&&(a|=96);var c=b.registerA;0<(b.registerF>>6&1)?c=c-a&255:(9<(c&15)&&(a|=6),153<c&&(a|=96),c=c+a&255);x(0=== |
||||
c);K(0!==(a&96));H(0);b.registerA=c;return 4;case 40:return 0<Ma()?cb(G()):b.programCounter=b.programCounter+1&65535,8;case 41:return a=p(b.registerH,b.registerL),Qa(a,a,!1),a=2*a&65535,b.registerH=F(a),b.registerL=a&255,q(0),8;case 42:return a=p(b.registerH,b.registerL),b.registerA=I(a),a=a+1&65535,b.registerH=F(a),b.registerL=a&255,4;case 43:return a=p(b.registerH,b.registerL),a=a-1&65535,b.registerH=F(a),b.registerL=a&255,8;case 44:return a=b.registerL,N(a,1),a=a+1&255,b.registerL=a,x(0===a),q(0), |
||||
4;case 45:return a=b.registerL,N(a,-1),a=a-1&255,b.registerL=a,x(0===a),q(1),4;case 46:return b.registerL=G(),b.programCounter=b.programCounter+1&65535,4;case 47:return b.registerA=~b.registerA,q(1),H(1),4}return-1}function hc(a){switch(a){case 48:return 0===Q()?cb(G()):b.programCounter=b.programCounter+1&65535,8;case 49:return b.stackPointer=U(),b.programCounter=b.programCounter+2&65535,4;case 50:return a=p(b.registerH,b.registerL),P(a,b.registerA),a=a-1&65535,b.registerH=F(a),b.registerL=a&255, |
||||
4;case 51:return b.stackPointer=b.stackPointer+1&65535,8;case 52:a=p(b.registerH,b.registerL);var c=I(a);N(c,1);c=c+1&255;x(0===c);q(0);P(a,c);return 4;case 53:return a=p(b.registerH,b.registerL),c=I(a),N(c,-1),c=c-1&255,x(0===c),q(1),P(a,c),4;case 54:return P(p(b.registerH,b.registerL),G()),b.programCounter=b.programCounter+1&65535,4;case 55:return q(0),H(0),K(1),4;case 56:return 1===Q()?cb(G()):b.programCounter=b.programCounter+1&65535,8;case 57:return a=p(b.registerH,b.registerL),Qa(a,b.stackPointer, |
||||
!1),a=a+b.stackPointer&65535,b.registerH=F(a),b.registerL=a&255,q(0),8;case 58:return a=p(b.registerH,b.registerL),b.registerA=I(a),a=a-1&65535,b.registerH=F(a),b.registerL=a&255,4;case 59:return b.stackPointer=b.stackPointer-1&65535,8;case 60:return a=b.registerA,N(a,1),a=a+1&255,b.registerA=a,x(0===a),q(0),4;case 61:return a=b.registerA,N(a,-1),a=a-1&255,b.registerA=a,x(0===a),q(1),4;case 62:return b.registerA=G(),b.programCounter=b.programCounter+1&65535,4;case 63:return q(0),H(0),K(0>=Q()),4}return-1} |
||||
function ic(a){switch(a){case 64:return 4;case 65:return b.registerB=b.registerC,4;case 66:return b.registerB=b.registerD,4;case 67:return b.registerB=b.registerE,4;case 68:return b.registerB=b.registerH,4;case 69:return b.registerB=b.registerL,4;case 70:return b.registerB=I(p(b.registerH,b.registerL)),4;case 71:return b.registerB=b.registerA,4;case 72:return b.registerC=b.registerB,4;case 73:return 4;case 74:return b.registerC=b.registerD,4;case 75:return b.registerC=b.registerE,4;case 76:return b.registerC= |
||||
b.registerH,4;case 77:return b.registerC=b.registerL,4;case 78:return b.registerC=I(p(b.registerH,b.registerL)),4;case 79:return b.registerC=b.registerA,4}return-1}function jc(a){switch(a){case 80:return b.registerD=b.registerB,4;case 81:return b.registerD=b.registerC,4;case 82:return 4;case 83:return b.registerD=b.registerE,4;case 84:return b.registerD=b.registerH,4;case 85:return b.registerD=b.registerL,4;case 86:return b.registerD=I(p(b.registerH,b.registerL)),4;case 87:return b.registerD=b.registerA, |
||||
4;case 88:return b.registerE=b.registerB,4;case 89:return b.registerE=b.registerC,4;case 90:return b.registerE=b.registerD,4;case 91:return 4;case 92:return b.registerE=b.registerH,4;case 93:return b.registerE=b.registerL,4;case 94:return b.registerE=I(p(b.registerH,b.registerL)),4;case 95:return b.registerE=b.registerA,4}return-1}function kc(a){switch(a){case 96:return b.registerH=b.registerB,4;case 97:return b.registerH=b.registerC,4;case 98:return b.registerH=b.registerD,4;case 99:return b.registerH= |
||||
b.registerE,4;case 100:return b.registerH=b.registerH,4;case 101:return b.registerH=b.registerL,4;case 102:return b.registerH=I(p(b.registerH,b.registerL)),4;case 103:return b.registerH=b.registerA,4;case 104:return b.registerL=b.registerB,4;case 105:return b.registerL=b.registerC,4;case 106:return b.registerL=b.registerD,4;case 107:return b.registerL=b.registerE,4;case 108:return b.registerL=b.registerH,4;case 109:return b.registerL=b.registerL,4;case 110:return b.registerL=I(p(b.registerH,b.registerL)), |
||||
4;case 111:return b.registerL=b.registerA,4}return-1}function lc(a){switch(a){case 112:return P(p(b.registerH,b.registerL),b.registerB),4;case 113:return P(p(b.registerH,b.registerL),b.registerC),4;case 114:return P(p(b.registerH,b.registerL),b.registerD),4;case 115:return P(p(b.registerH,b.registerL),b.registerE),4;case 116:return P(p(b.registerH,b.registerL),b.registerH),4;case 117:return P(p(b.registerH,b.registerL),b.registerL),4;case 118:return k.isHblankHdmaActive||b.enableHalt(),4;case 119:return P(p(b.registerH, |
||||
b.registerL),b.registerA),4;case 120:return b.registerA=b.registerB,4;case 121:return b.registerA=b.registerC,4;case 122:return b.registerA=b.registerD,4;case 123:return b.registerA=b.registerE,4;case 124:return b.registerA=b.registerH,4;case 125:return b.registerA=b.registerL,4;case 126:return b.registerA=I(p(b.registerH,b.registerL)),4;case 127:return 4}return-1}function mc(a){switch(a){case 128:return Da(b.registerB),4;case 129:return Da(b.registerC),4;case 130:return Da(b.registerD),4;case 131:return Da(b.registerE), |
||||
4;case 132:return Da(b.registerH),4;case 133:return Da(b.registerL),4;case 134:return a=I(p(b.registerH,b.registerL)),Da(a),4;case 135:return Da(b.registerA),4;case 136:return Ea(b.registerB),4;case 137:return Ea(b.registerC),4;case 138:return Ea(b.registerD),4;case 139:return Ea(b.registerE),4;case 140:return Ea(b.registerH),4;case 141:return Ea(b.registerL),4;case 142:return a=I(p(b.registerH,b.registerL)),Ea(a),4;case 143:return Ea(b.registerA),4}return-1}function nc(a){switch(a){case 144:return Fa(b.registerB), |
||||
4;case 145:return Fa(b.registerC),4;case 146:return Fa(b.registerD),4;case 147:return Fa(b.registerE),4;case 148:return Fa(b.registerH),4;case 149:return Fa(b.registerL),4;case 150:return a=I(p(b.registerH,b.registerL)),Fa(a),4;case 151:return Fa(b.registerA),4;case 152:return Ga(b.registerB),4;case 153:return Ga(b.registerC),4;case 154:return Ga(b.registerD),4;case 155:return Ga(b.registerE),4;case 156:return Ga(b.registerH),4;case 157:return Ga(b.registerL),4;case 158:return a=I(p(b.registerH,b.registerL)), |
||||
Ga(a),4;case 159:return Ga(b.registerA),4}return-1}function oc(a){switch(a){case 160:return Ha(b.registerB),4;case 161:return Ha(b.registerC),4;case 162:return Ha(b.registerD),4;case 163:return Ha(b.registerE),4;case 164:return Ha(b.registerH),4;case 165:return Ha(b.registerL),4;case 166:return a=I(p(b.registerH,b.registerL)),Ha(a),4;case 167:return Ha(b.registerA),4;case 168:return Ia(b.registerB),4;case 169:return Ia(b.registerC),4;case 170:return Ia(b.registerD),4;case 171:return Ia(b.registerE), |
||||
4;case 172:return Ia(b.registerH),4;case 173:return Ia(b.registerL),4;case 174:return a=I(p(b.registerH,b.registerL)),Ia(a),4;case 175:return Ia(b.registerA),4}return-1}function pc(a){switch(a){case 176:return Ja(b.registerB),4;case 177:return Ja(b.registerC),4;case 178:return Ja(b.registerD),4;case 179:return Ja(b.registerE),4;case 180:return Ja(b.registerH),4;case 181:return Ja(b.registerL),4;case 182:return a=I(p(b.registerH,b.registerL)),Ja(a),4;case 183:return Ja(b.registerA),4;case 184:return Ka(b.registerB), |
||||
4;case 185:return Ka(b.registerC),4;case 186:return Ka(b.registerD),4;case 187:return Ka(b.registerE),4;case 188:return Ka(b.registerH),4;case 189:return Ka(b.registerL),4;case 190:return a=I(p(b.registerH,b.registerL)),Ka(a),4;case 191:return Ka(b.registerA),4}return-1}function qc(a){switch(a){case 192:return 0===Ma()?(a=b.stackPointer,b.programCounter=Ba(a),b.stackPointer=a+2&65535,12):8;case 193:return a=Ba(b.stackPointer),b.stackPointer=b.stackPointer+2&65535,b.registerB=F(a),b.registerC=a&255, |
||||
4;case 194:if(0===Ma())return b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 195:return b.programCounter=U(),8;case 196:if(0===Ma())return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter+2&65535),b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 197:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,p(b.registerB,b.registerC)),8;case 198:return Da(G()),b.programCounter=b.programCounter+1&65535,4;case 199:return a=b.stackPointer- |
||||
2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=0,8;case 200:return 1===Ma()?(a=b.stackPointer,b.programCounter=Ba(a),b.stackPointer=a+2&65535,12):8;case 201:return a=b.stackPointer,b.programCounter=Ba(a),b.stackPointer=a+2&65535,8;case 202:if(1===Ma())return b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 203:var c=G();a=-1;var d=!1,e=0,f=0,l=c&7;switch(l){case 0:e=b.registerB;break;case 1:e=b.registerC;break;case 2:e=b.registerD;break;case 3:e=b.registerE; |
||||
break;case 4:e=b.registerH;break;case 5:e=b.registerL;break;case 6:e=I(p(b.registerH,b.registerL));break;case 7:e=b.registerA}var g=(c&240)>>4;switch(g){case 0:7>=c?(c=e,K(128===(c&128)),c=(c<<1|c>>7)&255,x(0===c),q(0),H(0),f=c,d=!0):15>=c&&(c=e,K(0<(c&1)),c=(c>>1|c<<7)&255,x(0===c),q(0),H(0),f=c,d=!0);break;case 1:23>=c?(c=e,d=128===(c&128),c=(c<<1|Q())&255,K(d),x(0===c),q(0),H(0),f=c,d=!0):31>=c&&(c=e,d=1===(c&1),c=(c>>1|Q()<<7)&255,K(d),x(0===c),q(0),H(0),f=c,d=!0);break;case 2:39>=c?(c=e,d=128=== |
||||
(c&128),c=c<<1&255,K(d),x(0===c),q(0),H(0),f=c,d=!0):47>=c&&(c=e,d=128===(c&128),e=1===(c&1),c=c>>1&255,d&&(c|=128),x(0===c),q(0),H(0),K(e),f=c,d=!0);break;case 3:55>=c?(c=e,c=((c&15)<<4|(c&240)>>4)&255,x(0===c),q(0),H(0),K(0),f=c,d=!0):63>=c&&(c=e,d=1===(c&1),c=c>>1&255,x(0===c),q(0),H(0),K(d),f=c,d=!0);break;case 4:71>=c?(f=Oa(0,e),d=!0):79>=c&&(f=Oa(1,e),d=!0);break;case 5:87>=c?(f=Oa(2,e),d=!0):95>=c&&(f=Oa(3,e),d=!0);break;case 6:103>=c?(f=Oa(4,e),d=!0):111>=c&&(f=Oa(5,e),d=!0);break;case 7:119>= |
||||
c?(f=Oa(6,e),d=!0):127>=c&&(f=Oa(7,e),d=!0);break;case 8:135>=c?(f=X(0,0,e),d=!0):143>=c&&(f=X(1,0,e),d=!0);break;case 9:151>=c?(f=X(2,0,e),d=!0):159>=c&&(f=X(3,0,e),d=!0);break;case 10:167>=c?(f=X(4,0,e),d=!0):175>=c&&(f=X(5,0,e),d=!0);break;case 11:183>=c?(f=X(6,0,e),d=!0):191>=c&&(f=X(7,0,e),d=!0);break;case 12:199>=c?(f=X(0,1,e),d=!0):207>=c&&(f=X(1,1,e),d=!0);break;case 13:215>=c?(f=X(2,1,e),d=!0):223>=c&&(f=X(3,1,e),d=!0);break;case 14:231>=c?(f=X(4,1,e),d=!0):239>=c&&(f=X(5,1,e),d=!0);break; |
||||
case 15:247>=c?(f=X(6,1,e),d=!0):255>=c&&(f=X(7,1,e),d=!0)}switch(l){case 0:b.registerB=f;break;case 1:b.registerC=f;break;case 2:b.registerD=f;break;case 3:b.registerE=f;break;case 4:b.registerH=f;break;case 5:b.registerL=f;break;case 6:(4>g||7<g)&&P(p(b.registerH,b.registerL),f);break;case 7:b.registerA=f}d&&(a=4);b.programCounter=b.programCounter+1&65535;return a;case 204:if(1===Ma())return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter+2),b.programCounter=U(),8;b.programCounter= |
||||
b.programCounter+2&65535;return 12;case 205:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter+2&65535),b.programCounter=U(),8;case 206:return Ea(G()),b.programCounter=b.programCounter+1&65535,4;case 207:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=8}return-1}function rc(a){switch(a){case 208:return 0===Q()?(a=b.stackPointer,b.programCounter=Ba(a),b.stackPointer=a+2&65535,12):8;case 209:a=b.stackPointer;var c=Ba(a);b.stackPointer=a+2&65535; |
||||
b.registerD=F(c);b.registerE=c&255;return 4;case 210:if(0===Q())return b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 212:if(0===Q())return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter+2),b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 213:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,p(b.registerD,b.registerE)),8;case 214:return Fa(G()),b.programCounter=b.programCounter+1&65535,4;case 215:return a=b.stackPointer- |
||||
2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=16,8;case 216:return 1===Q()?(a=b.stackPointer,b.programCounter=Ba(a),b.stackPointer=a+2&65535,12):8;case 217:return a=b.stackPointer,b.programCounter=Ba(a),lb(!0),b.stackPointer=a+2&65535,8;case 218:if(1===Q())return b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 220:if(1===Q())return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter+2&65535),b.programCounter=U(),8;b.programCounter=b.programCounter+ |
||||
2&65535;return 12;case 222:return Ga(G()),b.programCounter=b.programCounter+1&65535,4;case 223:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=24,8}return-1}function sc(a){switch(a){case 224:return a=G(),P(65280+a,b.registerA),b.programCounter=b.programCounter+1&65535,4;case 225:a=b.stackPointer;var c=Ba(a);b.stackPointer=a+2&65535;b.registerH=F(c);b.registerL=c&255;return 4;case 226:return P(65280+b.registerC,b.registerA),4;case 229:return a=b.stackPointer- |
||||
2&65535,b.stackPointer=a,R(a,p(b.registerH,b.registerL)),8;case 230:return Ha(G()),b.programCounter=b.programCounter+1&65535,4;case 231:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=32,8;case 232:return a=G()<<24>>24,Qa(b.stackPointer,a,!0),b.stackPointer=b.stackPointer+a&65535,x(0),q(0),b.programCounter=b.programCounter+1&65535,12;case 233:return b.programCounter=p(b.registerH,b.registerL),4;case 234:return P(U(),b.registerA),b.programCounter=b.programCounter+ |
||||
2&65535,4;case 238:return Ia(G()),b.programCounter=b.programCounter+1&65535,4;case 239:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=40,8}return-1}function tc(a){switch(a){case 240:return a=G(),b.registerA=I(65280+a)&255,b.programCounter=b.programCounter+1&65535,4;case 241:a=b.stackPointer;var c=Ba(a);b.stackPointer=a+2&65535;b.registerA=F(c);b.registerF=c&255;return 4;case 242:return b.registerA=I(65280+b.registerC)&255,4;case 243:return lb(!1),4;case 245:return a= |
||||
b.stackPointer-2&65535,b.stackPointer=a,R(a,p(b.registerA,b.registerF)),8;case 246:return Ja(G()),b.programCounter=b.programCounter+1&65535,4;case 247:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=48,8;case 248:return c=G()<<24>>24,a=b.stackPointer,x(0),q(0),Qa(a,c,!0),a=a+c&65535,b.registerH=F(a),b.registerL=a&255,b.programCounter=b.programCounter+1&65535,8;case 249:return b.stackPointer=p(b.registerH,b.registerL),8;case 250:return b.registerA=I(U()),b.programCounter= |
||||
b.programCounter+2&65535,4;case 251:return lb(!0),4;case 254:return Ka(G()),b.programCounter=b.programCounter+1&65535,4;case 255:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=56,8}return-1}function La(a){0<k.DMACycles&&(a+=k.DMACycles,k.DMACycles=0);b.currentCycles+=a;if(!b.isStopped){if(M.graphicsBatchProcessing){r.currentCycles+=a;for(var c=r.batchProcessCycles();r.currentCycles>=c;)Yb(c),r.currentCycles-=c}else Yb(a);M.audioBatchProcessing?(m.currentCycles+= |
||||
a,ab()):Pb(a);c=a;if(V.transferStartFlag)for(var d=0;d<c;){var e=V.currentCycles,g=e;d+=4;g+=4;65535<g&&(g-=65536);V.currentCycles=g;var h=V.isClockSpeedFast?2:7;l(h,e)&&!l(h,g)&&(e=V.memoryLocationSerialTransferData,g=u(e),g=(g<<1)+1,g&=255,f(e,g),e=V.numberOfBitsTransferred,8===++e?(V.numberOfBitsTransferred=0,n.isSerialInterruptRequested=!0,Xa(n.bitPositionSerialInterrupt),e=V.memoryLocationSerialTransferControl,g=u(e),f(e,E(7,g)),V.transferStartFlag=!1):V.numberOfBitsTransferred=e)}}M.timersBatchProcessing? |
||||
(t.currentCycles+=a,yb(t.currentCycles),t.currentCycles=0):yb(a);c=Z.cycles;c+=a;c>=Z.cyclesPerCycleSet&&(Z.cycleSets+=1,c-=Z.cyclesPerCycleSet);Z.cycles=c}function $b(){return Ib(!0,-1)}function Ib(a,c){void 0===c&&(c=-1);a=1024;0<c?a=c:0>c&&(a=-1);for(var d=!1,e=!1,f=!1;!(d||e||f||W.reachedBreakpoint);)c=ac(),0>c?d=!0:b.currentCycles>=b.MAX_CYCLES_PER_FRAME()?e=!0:-1<a&&Qb()>=a&&(f=!0);if(e)return b.currentCycles-=b.MAX_CYCLES_PER_FRAME(),S.RESPONSE_CONDITION_FRAME;if(f)return S.RESPONSE_CONDITION_AUDIO; |
||||
if(W.reachedBreakpoint)return W.reachedBreakpoint=!1,S.RESPONSE_CONDITION_BREAKPOINT;b.programCounter=b.programCounter-1&65535;return-1}function ac(){db=!0;if(b.isHaltBug){var a=u(b.programCounter);a=Zb(a);La(a);b.exitHaltAndStop()}n.masterInterruptSwitchDelay&&(n.masterInterruptSwitch=!0,n.masterInterruptSwitchDelay=!1);if(0<(n.interruptsEnabledValue&n.interruptsRequestedValue&31)){a=!1;n.masterInterruptSwitch&&!b.isHaltNoJump&&(n.isVBlankInterruptEnabled&&n.isVBlankInterruptRequested?(bb(n.bitPositionVBlankInterrupt), |
||||
a=!0):n.isLcdInterruptEnabled&&n.isLcdInterruptRequested?(bb(n.bitPositionLcdInterrupt),a=!0):n.isTimerInterruptEnabled&&n.isTimerInterruptRequested?(bb(n.bitPositionTimerInterrupt),a=!0):n.isSerialInterruptEnabled&&n.isSerialInterruptRequested?(bb(n.bitPositionSerialInterrupt),a=!0):n.isJoypadInterruptEnabled&&n.isJoypadInterruptRequested&&(bb(n.bitPositionJoypadInterrupt),a=!0));var c=0;a&&(c=20,b.isHalted()&&(b.exitHaltAndStop(),c+=4));b.isHalted()&&b.exitHaltAndStop();a=c}else a=0;0<a&&La(a); |
||||
a=4;b.isHalted()||b.isStopped||(a=u(b.programCounter),a=Zb(a));b.registerF&=240;if(0>=a)return a;La(a);c=S.steps;c+=1;c>=S.stepsPerStepSet&&(S.stepSets+=1,c-=S.stepsPerStepSet);S.steps=c;b.programCounter===W.programCounter&&(W.reachedBreakpoint=!0);return a}let e=new Uint8ClampedArray(9109504),eb={size:()=>9109504,grow:()=>{},wasmByteMemory:e};var uc=65536,Ta=67584,Ua=Ta+128,Ya=Ua+23552,ob=Ya+93184,Jb=ob+196608,pb=Jb+147456,vc=Ta,wc=pb-Ta+15360,ub=pb+15360,vb=ub+131072,wb=vb+131072,xb=wb+131072,kb= |
||||
xb+131072,Fb=kb+131072,mb=Fb+131072,nb=mb+2560,Kb=nb+8258560,bc=Kb+65535+1,Lb=Math.ceil(bc/1024/64)+1,M=function(){function a(){}a.enableBootRom=!1;a.useGbcWhenAvailable=!0;a.audioBatchProcessing=!1;a.graphicsBatchProcessing=!1;a.timersBatchProcessing=!1;a.graphicsDisableScanlineRendering=!1;a.audioAccumulateSamples=!1;a.tileRendering=!1;a.tileCaching=!1;a.enableAudioDebugging=!1;return a}(),L=function(){function a(){}a.bgWhite=15921906;a.bgLightGrey=10526880;a.bgDarkGrey=5789784;a.bgBlack=526344; |
||||
a.obj0White=15921906;a.obj0LightGrey=10526880;a.obj0DarkGrey=5789784;a.obj0Black=526344;a.obj1White=15921906;a.obj1LightGrey=10526880;a.obj1DarkGrey=5789784;a.obj1Black=526344;return a}(),ea=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=5439232;a.bgDarkGrey=16728576;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=5439232;a.obj0DarkGrey=16728576;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=5439232;a.obj1DarkGrey=16728576;a.obj1Black=0;return a}(),ja=function(){function a(){}a.bgWhite= |
||||
16777215;a.bgLightGrey=16776960;a.bgDarkGrey=16711680;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16776960;a.obj0DarkGrey=16711680;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16776960;a.obj1DarkGrey=16711680;a.obj1Black=0;return a}(),ba=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16756067;a.bgDarkGrey=8663296;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16756067;a.obj0DarkGrey=8663296;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296; |
||||
a.obj1Black=0;return a}(),ha=function(){function a(){}a.bgWhite=0;a.bgLightGrey=33924;a.bgDarkGrey=16768512;a.bgBlack=16777215;a.obj0White=0;a.obj0LightGrey=33924;a.obj0DarkGrey=16768512;a.obj0Black=16777215;a.obj1White=0;a.obj1LightGrey=33924;a.obj1DarkGrey=16768512;a.obj1Black=16777215;return a}(),na=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=10855845;a.bgDarkGrey=5395026;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=10855845;a.obj0DarkGrey=5395026;a.obj0Black=0;a.obj1White=16777215; |
||||
a.obj1LightGrey=10855845;a.obj1DarkGrey=5395026;a.obj1Black=0;return a}(),ia=function(){function a(){}a.bgWhite=16777125;a.bgLightGrey=16749716;a.bgDarkGrey=9737471;a.bgBlack=0;a.obj0White=16777125;a.obj0LightGrey=16749716;a.obj0DarkGrey=9737471;a.obj0Black=0;a.obj1White=16777125;a.obj1LightGrey=16749716;a.obj1DarkGrey=9737471;a.obj1Black=0;return a}(),da=function(){function a(){}a.bgWhite=16770757;a.bgLightGrey=13540484;a.bgDarkGrey=8678185;a.bgBlack=5910792;a.obj0White=16777215;a.obj0LightGrey= |
||||
16756067;a.obj0DarkGrey=8663296;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),fa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=8126257;a.bgDarkGrey=25541;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black=0;return a}(),ma=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=9211102;a.bgDarkGrey= |
||||
5395084;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),ca=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=8126257;a.obj0DarkGrey=33792;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),la=function(){function a(){}a.bgWhite= |
||||
16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),ka=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16776960;a.bgDarkGrey=8079872;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=6530559;a.obj0DarkGrey=255;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(), |
||||
pa=function(){function a(){}a.bgWhite=10853631;a.bgLightGrey=16776960;a.bgDarkGrey=25344;a.bgBlack=0;a.obj0White=10853631;a.obj0LightGrey=16776960;a.obj0DarkGrey=25344;a.obj0Black=0;a.obj1White=10853631;a.obj1LightGrey=16776960;a.obj1DarkGrey=25344;a.obj1Black=0;return a}(),qa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559; |
||||
a.obj1DarkGrey=255;a.obj1Black=0;return a}(),ra=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=8126257;a.obj0DarkGrey=33792;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black=0;return a}(),sa=function(){function a(){}a.bgWhite=11908607;a.bgLightGrey=16777108;a.bgDarkGrey=11360834;a.bgBlack=0;a.obj0White=0;a.obj0LightGrey=16777215;a.obj0DarkGrey=16745604;a.obj0Black= |
||||
9714234;a.obj1White=0;a.obj1LightGrey=16777215;a.obj1DarkGrey=16745604;a.obj1Black=9714234;return a}(),ta=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=11382148;a.bgDarkGrey=4354939;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16741120;a.obj0DarkGrey=9716224;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=5946879;a.obj1DarkGrey=16711680;a.obj1Black=255;return a}(),ua=function(){function a(){}a.bgWhite=16777116;a.bgLightGrey=9745919;a.bgDarkGrey=6526067;a.bgBlack=14906;a.obj0White= |
||||
16762178;a.obj0LightGrey=16766464;a.obj0DarkGrey=9714176;a.obj0Black=4849664;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black=0;return a}(),va=function(){function a(){}a.bgWhite=7077632;a.bgLightGrey=16777215;a.bgDarkGrey=16732746;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16777215;a.obj0DarkGrey=6530559;a.obj0Black=255;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),wa=function(){function a(){}a.bgWhite=10853631; |
||||
a.bgLightGrey=16776960;a.bgDarkGrey=25344;a.bgBlack=0;a.obj0White=16737106;a.obj0LightGrey=14024704;a.obj0DarkGrey=6488064;a.obj0Black=0;a.obj1White=255;a.obj1LightGrey=16777215;a.obj1DarkGrey=16777083;a.obj1Black=34047;return a}(),xa=function(){function a(){}a.bgWhite=16777166;a.bgLightGrey=6549487;a.bgDarkGrey=10257457;a.bgBlack=5921370;a.obj0White=16777215;a.obj0LightGrey=16741120;a.obj0DarkGrey=9716224;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0; |
||||
return a}(),ya=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=65280;a.obj0DarkGrey=3245056;a.obj0Black=18944;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),za=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16776960;a.obj0LightGrey=16711680;a.obj0DarkGrey=6488064;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey= |
||||
8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),Aa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=11382148;a.bgDarkGrey=4354939;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16756067;a.obj0DarkGrey=16756067;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),d=function(){function a(){}a.bgWhite=L.bgWhite;a.bgLightGrey=L.bgLightGrey;a.bgDarkGrey=L.bgDarkGrey;a.bgBlack=L.bgBlack;a.obj0White=L.obj0White;a.obj0LightGrey=L.obj0LightGrey; |
||||
a.obj0DarkGrey=L.obj0DarkGrey;a.obj0Black=L.obj0Black;a.obj1White=L.obj1White;a.obj1LightGrey=L.obj1LightGrey;a.obj1DarkGrey=L.obj1DarkGrey;a.obj1Black=L.obj1Black;return a}(),Sa=function(){function a(){}a.memoryLocationBackgroundPaletteIndex=65384;a.memoryLocationBackgroundPaletteData=65385;a.memoryLocationSpritePaletteIndex=65386;a.memoryLocationSpritePaletteData=65387;a.memoryLocationBackgroundPalette=65351;a.memoryLocationSpritePaletteOne=65352;a.memoryLocationSpritePaletteTwo=65353;return a}(), |
||||
Za=function(){function a(){}a.tileId=-1;a.horizontalFlip=!1;a.nextXIndexToPerformCacheCheck=-1;return a}(),y=function(){function a(){}a.updateNRx0=function(b){var c=a.NRx0Negate;a.NRx0SweepPeriod=(b&112)>>4;a.NRx0Negate=l(3,b);a.NRx0SweepShift=b&7;c&&!a.NRx0Negate&&a.sweepNegateShouldDisableChannelOnClear&&(a.isEnabled=!1)};a.updateNRx1=function(b){a.NRx1Duty=b>>6&3;a.NRx1LengthLoad=b&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&& |
||||
a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==l(3,b)&&(a.volume=16-a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=l(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled=b;b||(a.isEnabled=!1)};a.updateNRx3=function(b){a.NRx3FrequencyLSB=b;a.frequency=a.NRx4FrequencyMSB<<8|b};a.updateNRx4=function(b){var c=b&7;a.NRx4FrequencyMSB=c;a.frequency=c<<8|a.NRx3FrequencyLSB;c=1===(m.frameSequencer&1);var d=!a.NRx4LengthEnabled&&l(6,b);!c&&0<a.lengthCounter&& |
||||
d&&(--a.lengthCounter,l(7,b)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=l(6,b);l(7,b)&&(a.trigger(),!c&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.cycleCounter;e[1028+50*a.saveStateSlot]=a.NRx0SweepPeriod;e[1029+50*a.saveStateSlot]=a.NRx0Negate;e[1030+50*a.saveStateSlot]=a.NRx0SweepShift;e[1031+50*a.saveStateSlot]=a.NRx1Duty;e[1033+50*a.saveStateSlot]=a.NRx1LengthLoad;e[1034+50*a.saveStateSlot]=a.NRx2StartingVolume; |
||||
e[1035+50*a.saveStateSlot]=a.NRx2EnvelopeAddMode;e[1036+50*a.saveStateSlot]=a.NRx2EnvelopePeriod;e[1037+50*a.saveStateSlot]=a.NRx3FrequencyLSB;e[1038+50*a.saveStateSlot]=a.NRx4LengthEnabled;e[1039+50*a.saveStateSlot]=a.NRx4FrequencyMSB;e[1040+50*a.saveStateSlot]=a.isEnabled;e[1041+50*a.saveStateSlot]=a.isDacEnabled;e[1042+50*a.saveStateSlot]=a.frequency;e[1046+50*a.saveStateSlot]=a.frequencyTimer;e[1050+50*a.saveStateSlot]=a.envelopeCounter;e[1054+50*a.saveStateSlot]=a.isEnvelopeAutomaticUpdating; |
||||
e[1055+50*a.saveStateSlot]=a.lengthCounter;e[1059+50*a.saveStateSlot]=a.volume;e[1063+50*a.saveStateSlot]=a.dutyCycle;e[1064+50*a.saveStateSlot]=a.waveFormPositionOnDuty;e[1065+50*a.saveStateSlot]=a.isSweepEnabled;e[1066+50*a.saveStateSlot]=a.sweepCounter;e[1070+50*a.saveStateSlot]=a.sweepShadowFrequency;e[1073+50*a.saveStateSlot]=a.sweepNegateShouldDisableChannelOnClear};a.loadState=function(){a.cycleCounter=e[1024+50*a.cycleCounter];a.NRx0SweepPeriod=e[1028+50*a.saveStateSlot];a.NRx0Negate=h(1029+ |
||||
50*a.saveStateSlot);a.NRx0SweepShift=e[1030+50*a.saveStateSlot];a.NRx1Duty=e[1031+50*a.saveStateSlot];a.NRx1LengthLoad=e[1033+50*a.saveStateSlot];a.NRx2StartingVolume=e[1034+50*a.saveStateSlot];a.NRx2EnvelopeAddMode=h(1035+50*a.saveStateSlot);a.NRx2EnvelopePeriod=e[1036+50*a.saveStateSlot];a.NRx3FrequencyLSB=e[1037+50*a.saveStateSlot];a.NRx4LengthEnabled=h(1038+50*a.saveStateSlot);a.NRx4FrequencyMSB=e[1039+50*a.saveStateSlot];a.isEnabled=h(1040+50*a.saveStateSlot);a.isDacEnabled=h(1041+50*a.saveStateSlot); |
||||
a.frequency=e[1042+50*a.saveStateSlot];a.frequencyTimer=e[1046+50*a.saveStateSlot];a.envelopeCounter=e[1050+50*a.saveStateSlot];a.isEnvelopeAutomaticUpdating=h(1054+50*a.saveStateSlot);a.lengthCounter=e[1055+50*a.saveStateSlot];a.volume=e[1059+50*a.saveStateSlot];a.dutyCycle=e[1063+50*a.saveStateSlot];a.waveFormPositionOnDuty=e[1064+50*a.saveStateSlot];a.isSweepEnabled=h(1065+50*a.saveStateSlot);a.sweepCounter=e[1066+50*a.saveStateSlot];a.sweepShadowFrequency=e[1070+50*a.saveStateSlot];a.sweepNegateShouldDisableChannelOnClear= |
||||
h(1073+50*a.saveStateSlot)};a.initialize=function(){f(a.memoryLocationNRx0,128);f(a.memoryLocationNRx1,191);f(a.memoryLocationNRx2,243);f(a.memoryLocationNRx3,193);f(a.memoryLocationNRx4,191);b.BootROMEnabled&&(f(a.memoryLocationNRx1,63),f(a.memoryLocationNRx2,0),f(a.memoryLocationNRx3,0),f(a.memoryLocationNRx4,184))};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.resetTimer=function(){var c=2048-a.frequency<<2;b.GBCDoubleSpeed&&(c<<=2);a.frequencyTimer= |
||||
c};a.getSample=function(b){var c=a.frequencyTimer;for(c-=b;0>=c;)b=Math.abs(c),a.resetTimer(),c=a.frequencyTimer,c-=b,a.waveFormPositionOnDuty=a.waveFormPositionOnDuty+1&7;a.frequencyTimer=c;if(a.isEnabled&&a.isDacEnabled)c=a.volume&15;else return 15;b=1;Ob(a.NRx1Duty,a.waveFormPositionOnDuty)||(b=-b);return b*c+15};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating= |
||||
!0;a.volume=a.NRx2StartingVolume;a.sweepShadowFrequency=a.frequency;a.sweepCounter=0===a.NRx0SweepPeriod?8:a.NRx0SweepPeriod;a.isSweepEnabled=0<a.NRx0SweepPeriod||0<a.NRx0SweepShift;a.sweepNegateShouldDisableChannelOnClear=!1;var b;if(b=0<a.NRx0SweepShift)b=2047<tb()?!0:!1;b&&(a.isEnabled=!1);a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){b=a.cycleCounter+b;a.cycleCounter=b;return!(0<a.frequencyTimer-b)};a.updateSweep=function(){if(a.isEnabled&&a.isSweepEnabled){var b=a.sweepCounter- |
||||
1;0>=b?0===a.NRx0SweepPeriod?a.sweepCounter=8:(a.sweepCounter=a.NRx0SweepPeriod,b=tb(),2047<b&&(a.isEnabled=!1),0<a.NRx0SweepShift&&(a.setFrequency(b),2047<tb()&&(a.isEnabled=!1))):a.sweepCounter=b}};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&(--b,0===b&&(a.isEnabled=!1));a.lengthCounter=b};a.updateEnvelope=function(){var b=a.envelopeCounter-1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var d=a.volume; |
||||
d=a.NRx2EnvelopeAddMode?d+1:d-1;d&=15;15>d?a.volume=d:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter=b};a.setFrequency=function(b){a.sweepShadowFrequency=b;var c=b>>8&7;b&=255;var d=u(a.memoryLocationNRx4)&248|c;f(a.memoryLocationNRx3,b);f(a.memoryLocationNRx4,d);a.NRx3FrequencyLSB=b;a.NRx4FrequencyMSB=c;a.frequency=a.NRx4FrequencyMSB<<8|a.NRx3FrequencyLSB};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65296;a.NRx0SweepPeriod=0;a.NRx0Negate=!1;a.NRx0SweepShift=0;a.memoryLocationNRx1=65297; |
||||
a.NRx1Duty=0;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65298;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65299;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65300;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.channelNumber=1;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.dutyCycle=0;a.waveFormPositionOnDuty=0;a.isSweepEnabled=!1;a.sweepCounter=0;a.sweepShadowFrequency= |
||||
0;a.sweepNegateShouldDisableChannelOnClear=!1;a.saveStateSlot=7;return a}(),A=function(){function a(){}a.updateNRx1=function(b){a.NRx1Duty=b>>6&3;a.NRx1LengthLoad=b&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==l(3,b)&&(a.volume=16-a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=l(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled= |
||||
b;b||(a.isEnabled=b)};a.updateNRx3=function(b){a.NRx3FrequencyLSB=b;a.frequency=a.NRx4FrequencyMSB<<8|b};a.updateNRx4=function(b){var c=b&7;a.NRx4FrequencyMSB=c;a.frequency=c<<8|a.NRx3FrequencyLSB;c=1===(m.frameSequencer&1);var d=!a.NRx4LengthEnabled&&l(6,b);!c&&0<a.lengthCounter&&d&&(--a.lengthCounter,l(7,b)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=l(6,b);l(7,b)&&(a.trigger(),!c&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){e[1024+ |
||||
50*a.saveStateSlot]=a.cycleCounter;e[1031+50*a.saveStateSlot]=a.NRx1Duty;e[1032+50*a.saveStateSlot]=a.NRx1LengthLoad;e[1034+50*a.saveStateSlot]=a.NRx2StartingVolume;e[1035+50*a.saveStateSlot]=a.NRx2EnvelopeAddMode;e[1036+50*a.saveStateSlot]=a.NRx2EnvelopePeriod;e[1037+50*a.saveStateSlot]=a.NRx3FrequencyLSB;e[1038+50*a.saveStateSlot]=a.NRx4LengthEnabled;e[1039+50*a.saveStateSlot]=a.NRx4FrequencyMSB;e[1040+50*a.saveStateSlot]=a.isEnabled;e[1041+50*a.saveStateSlot]=a.isDacEnabled;e[1042+50*a.saveStateSlot]= |
||||
a.frequency;e[1046+50*a.saveStateSlot]=a.frequencyTimer;e[1050+50*a.saveStateSlot]=a.envelopeCounter;e[1054+50*a.saveStateSlot]=a.isEnvelopeAutomaticUpdating;e[1055+50*a.saveStateSlot]=a.lengthCounter;e[1059+50*a.saveStateSlot]=a.volume;e[1063+50*a.saveStateSlot]=a.dutyCycle;e[1064+50*a.saveStateSlot]=a.waveFormPositionOnDuty};a.loadState=function(){a.cycleCounter=e[1024+50*a.cycleCounter];a.NRx1Duty=e[1031+50*a.saveStateSlot];a.NRx1LengthLoad=e[1032+50*a.saveStateSlot];a.NRx2StartingVolume=e[1034+ |
||||
50*a.saveStateSlot];a.NRx2EnvelopeAddMode=h(1035+50*a.saveStateSlot);a.NRx2EnvelopePeriod=e[1036+50*a.saveStateSlot];a.NRx3FrequencyLSB=e[1037+50*a.saveStateSlot];a.NRx4LengthEnabled=h(1038+50*a.saveStateSlot);a.NRx4FrequencyMSB=e[1039+50*a.saveStateSlot];a.isEnabled=h(1040+50*a.saveStateSlot);a.isDacEnabled=h(1041+50*a.saveStateSlot);a.frequency=e[1042+50*a.saveStateSlot];a.frequencyTimer=e[1046+50*a.saveStateSlot];a.envelopeCounter=e[1050+50*a.saveStateSlot];a.isEnvelopeAutomaticUpdating=h(1054+ |
||||
50*a.saveStateSlot);a.lengthCounter=e[1055+50*a.saveStateSlot];a.volume=e[1059+50*a.saveStateSlot];a.dutyCycle=e[1063+50*a.saveStateSlot];a.waveFormPositionOnDuty=e[1064+50*a.saveStateSlot]};a.initialize=function(){f(a.memoryLocationNRx1-1,255);f(a.memoryLocationNRx1,63);f(a.memoryLocationNRx2,0);f(a.memoryLocationNRx3,0);f(a.memoryLocationNRx4,184)};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.resetTimer=function(){a.frequencyTimer=2048-a.frequency<< |
||||
2<<b.GBCDoubleSpeed};a.getSample=function(b){var c=a.frequencyTimer;for(c-=b;0>=c;)b=Math.abs(c),a.resetTimer(),c=a.frequencyTimer,c-=b,a.waveFormPositionOnDuty=a.waveFormPositionOnDuty+1&7;a.frequencyTimer=c;if(a.isEnabled&&a.isDacEnabled)c=a.volume&15;else return 15;b=1;Ob(a.NRx1Duty,a.waveFormPositionOnDuty)||(b=-b);return b*c+15};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod; |
||||
a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){b=a.cycleCounter+b;a.cycleCounter=b;return!(0<a.frequencyTimer-b)};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.updateEnvelope=function(){var b=a.envelopeCounter-1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var d=a.volume;d=a.NRx2EnvelopeAddMode? |
||||
d+1:d-1;d&=15;15>d?a.volume=d:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter=b};a.setFrequency=function(b){var c=b>>8;b&=255;var d=u(a.memoryLocationNRx4)&248|c;f(a.memoryLocationNRx3,b);f(a.memoryLocationNRx4,d);a.NRx3FrequencyLSB=b;a.NRx4FrequencyMSB=c;a.frequency=c<<8|b};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65301;a.memoryLocationNRx1=65302;a.NRx1Duty=0;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65303;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3= |
||||
65304;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65305;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.channelNumber=2;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.dutyCycle=0;a.waveFormPositionOnDuty=0;a.saveStateSlot=8;return a}(),v=function(){function a(){}a.updateNRx0=function(b){b=l(7,b);!a.isDacEnabled&&b&&(a.sampleBuffer=0);a.isDacEnabled=b;b||(a.isEnabled=b)};a.updateNRx1=function(b){a.NRx1LengthLoad= |
||||
b;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.NRx2VolumeCode=b>>5&15};a.updateNRx3=function(b){a.NRx3FrequencyLSB=b;a.frequency=a.NRx4FrequencyMSB<<8|b};a.updateNRx4=function(b){var c=b&7;a.NRx4FrequencyMSB=c;a.frequency=c<<8|a.NRx3FrequencyLSB;c=1===(m.frameSequencer&1);if(!c){var d=!a.NRx4LengthEnabled&&l(6,b);0<a.lengthCounter&&d&&(--a.lengthCounter,l(7,b)||0!==a.lengthCounter||(a.isEnabled=!1))}a.NRx4LengthEnabled=l(6,b);l(7,b)&&(a.trigger(),!c&&a.lengthCounter=== |
||||
a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.cycleCounter;e[1032+50*a.saveStateSlot]=a.NRx1LengthLoad;e[1034+50*a.saveStateSlot]=a.NRx2VolumeCode;e[1036+50*a.saveStateSlot]=a.NRx3FrequencyLSB;e[1037+50*a.saveStateSlot]=a.NRx4LengthEnabled;e[1038+50*a.saveStateSlot]=a.NRx4FrequencyMSB;e[1039+50*a.saveStateSlot]=a.isEnabled;e[1040+50*a.saveStateSlot]=a.isDacEnabled;e[1041+50*a.saveStateSlot]=a.frequency;e[1045+50*a.saveStateSlot]=a.frequencyTimer; |
||||
e[1049+50*a.saveStateSlot]=a.lengthCounter;e[1057+50*a.saveStateSlot]=a.waveTablePosition;e[1061+50*a.saveStateSlot]=a.volumeCode;e[1062+50*a.saveStateSlot]=a.volumeCodeChanged;e[1063+50*a.saveStateSlot]=a.sampleBuffer};a.loadState=function(){a.cycleCounter=e[1024+50*a.cycleCounter];a.NRx1LengthLoad=e[1032+50*a.saveStateSlot];a.NRx2VolumeCode=e[1034+50*a.saveStateSlot];a.NRx3FrequencyLSB=e[1036+50*a.saveStateSlot];a.NRx4LengthEnabled=h(1037+50*a.saveStateSlot);a.NRx4FrequencyMSB=e[1038+50*a.saveStateSlot]; |
||||
a.isEnabled=h(1039+50*a.saveStateSlot);a.isDacEnabled=h(1040+50*a.saveStateSlot);a.frequency=e[1041+50*a.saveStateSlot];a.frequencyTimer=e[1045+50*a.saveStateSlot];a.lengthCounter=e[1049+50*a.saveStateSlot];a.waveTablePosition=e[1057+50*a.saveStateSlot];a.volumeCode=e[1061+50*a.saveStateSlot];a.volumeCodeChanged=h(1062+50*a.saveStateSlot);a.sampleBuffer=e[1063+50*a.saveStateSlot]};a.handleWaveRamRead=function(){return u(v.memoryLocationWaveTable+(v.waveTablePosition>>1|0))};a.handleWaveRamWrite=function(b){f(a.memoryLocationWaveTable+ |
||||
(a.waveTablePosition>>1|0),b)};a.initialize=function(){f(a.memoryLocationNRx0,127);f(a.memoryLocationNRx1,255);f(a.memoryLocationNRx2,159);f(a.memoryLocationNRx3,0);f(a.memoryLocationNRx4,184);a.volumeCodeChanged=!0};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.resetTimer=function(){a.frequencyTimer=2048-a.frequency<<1<<b.GBCDoubleSpeed};a.getSample=function(b){if(!a.isEnabled||!a.isDacEnabled)return 15;var c=a.volumeCode;a.volumeCodeChanged&& |
||||
(c=u(a.memoryLocationNRx2),c=c>>5&15,a.volumeCode=c,a.volumeCodeChanged=!1);var d=v.sampleBuffer;d>>=(0===(v.waveTablePosition&1))<<2;d&=15;var e=0;switch(c){case 0:d>>=4;break;case 1:e=1;break;case 2:d>>=1;e=2;break;default:d>>=2,e=4}d=(0<e?d/e:0)+15;c=a.frequencyTimer;for(c-=b;0>=c;){b=Math.abs(c);a.resetTimer();c=a.frequencyTimer;c-=b;b=v.waveTablePosition;for(b+=1;32<=b;)b-=32;v.waveTablePosition=b;v.sampleBuffer=u(v.memoryLocationWaveTable+(v.waveTablePosition>>1|0))}a.frequencyTimer=c;return d}; |
||||
a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.frequencyTimer+=6;a.waveTablePosition=0;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){a.cycleCounter+=b;return!(!a.volumeCodeChanged&&0<a.frequencyTimer-a.cycleCounter)};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.cycleCounter=0;a.MAX_LENGTH=256;a.memoryLocationNRx0=65306;a.memoryLocationNRx1=65307; |
||||
a.NRx1LengthLoad=0;a.memoryLocationNRx2=65308;a.NRx2VolumeCode=0;a.memoryLocationNRx3=65309;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65310;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.memoryLocationWaveTable=65328;a.channelNumber=3;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.lengthCounter=0;a.waveTablePosition=0;a.volumeCode=0;a.volumeCodeChanged=!1;a.sampleBuffer=0;a.saveStateSlot=9;return a}(),D=function(){function a(){}a.updateNRx1=function(b){a.NRx1LengthLoad=b&63;a.lengthCounter= |
||||
a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==l(3,b)&&(a.volume=16-a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=l(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled=b;b||(a.isEnabled=b)};a.updateNRx3=function(b){var c=b&7;a.NRx3ClockShift=b>>4;a.NRx3WidthMode=l(3,b);a.NRx3DivisorCode=c;c<<=1;1>c&&(c=1);a.divisor=c<<3};a.updateNRx4=function(b){var c= |
||||
1===(m.frameSequencer&1),d=!a.NRx4LengthEnabled&&l(6,b);!c&&0<a.lengthCounter&&d&&(--a.lengthCounter,l(7,b)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=l(6,b);l(7,b)&&(a.trigger(),!c&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.cycleCounter;e[1028+50*a.saveStateSlot]=a.NRx1LengthLoad;e[1030+50*a.saveStateSlot]=a.NRx2StartingVolume;e[1031+50*a.saveStateSlot]=a.NRx2EnvelopeAddMode;e[1032+50*a.saveStateSlot]= |
||||
a.NRx2EnvelopePeriod;e[1033+50*a.saveStateSlot]=a.NRx3ClockShift;e[1034+50*a.saveStateSlot]=a.NRx3WidthMode;e[1035+50*a.saveStateSlot]=a.NRx3DivisorCode;e[1037+50*a.saveStateSlot]=a.NRx4LengthEnabled;e[1039+50*a.saveStateSlot]=a.isEnabled;e[1040+50*a.saveStateSlot]=a.isDacEnabled;e[1045+50*a.saveStateSlot]=a.frequencyTimer;e[1049+50*a.saveStateSlot]=a.envelopeCounter;e[1053+50*a.saveStateSlot]=a.isEnvelopeAutomaticUpdating;e[1054+50*a.saveStateSlot]=a.lengthCounter;e[1058+50*a.saveStateSlot]=a.volume; |
||||
e[1062+50*a.saveStateSlot]=a.linearFeedbackShiftRegister};a.loadState=function(){a.cycleCounter=e[1024+50*a.cycleCounter];a.NRx1LengthLoad=e[1028+50*a.saveStateSlot];a.NRx2StartingVolume=e[1030+50*a.saveStateSlot];a.NRx2EnvelopeAddMode=h(1031+50*a.saveStateSlot);a.NRx2EnvelopePeriod=e[1032+50*a.saveStateSlot];a.NRx3ClockShift=e[1033+50*a.saveStateSlot];a.NRx3WidthMode=h(1034+50*a.saveStateSlot);a.NRx3DivisorCode=e[1035+50*a.saveStateSlot];a.NRx4LengthEnabled=h(1037+50*a.saveStateSlot);a.isEnabled= |
||||
h(1039+50*a.saveStateSlot);a.isDacEnabled=h(1040+50*a.saveStateSlot);a.frequencyTimer=e[1045+50*a.saveStateSlot];a.envelopeCounter=e[1049+50*a.saveStateSlot];a.isEnvelopeAutomaticUpdating=h(1053+50*a.saveStateSlot);a.lengthCounter=e[1054+50*a.saveStateSlot];a.volume=e[1058+50*a.saveStateSlot];a.linearFeedbackShiftRegister=e[1062+50*a.saveStateSlot]};a.initialize=function(){f(a.memoryLocationNRx1-1,255);f(a.memoryLocationNRx1,255);f(a.memoryLocationNRx2,0);f(a.memoryLocationNRx3,0);f(a.memoryLocationNRx4, |
||||
191)};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.getSample=function(b){var c=a.frequencyTimer;c-=b;if(0>=c){b=Math.abs(c);c=a.getNoiseChannelFrequencyPeriod();c-=b;b=a.linearFeedbackShiftRegister;var d=b&1^b>>1&1;b=b>>1|d<<14;a.NRx3WidthMode&&(b=b&-65|d<<6);a.linearFeedbackShiftRegister=b}0>c&&(c=0);a.frequencyTimer=c;if(a.isEnabled&&a.isDacEnabled)c=a.volume&15;else return 15;b=l(0,a.linearFeedbackShiftRegister)?-1:1;return b*c+15};a.trigger= |
||||
function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.frequencyTimer=a.getNoiseChannelFrequencyPeriod();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.linearFeedbackShiftRegister=32767;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){a.cycleCounter+=b;return!(0<a.frequencyTimer-a.cycleCounter)};a.getNoiseChannelFrequencyPeriod=function(){return a.divisor<<a.NRx3ClockShift<< |
||||
b.GBCDoubleSpeed};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.updateEnvelope=function(){var b=a.envelopeCounter-1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var d=a.volume;d=a.NRx2EnvelopeAddMode?d+1:d-1;d&=15;15>d?a.volume=d:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter=b};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65311;a.memoryLocationNRx1= |
||||
65312;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65313;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65314;a.NRx3ClockShift=0;a.NRx3WidthMode=!1;a.NRx3DivisorCode=0;a.memoryLocationNRx4=65315;a.NRx4LengthEnabled=!1;a.channelNumber=4;a.isEnabled=!1;a.isDacEnabled=!1;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.divisor=0;a.linearFeedbackShiftRegister=0;a.saveStateSlot=10;return a}(),g=function(){function a(){} |
||||
a.channel1Sample=15;a.channel2Sample=15;a.channel3Sample=15;a.channel4Sample=15;a.channel1DacEnabled=!1;a.channel2DacEnabled=!1;a.channel3DacEnabled=!1;a.channel4DacEnabled=!1;a.leftChannelSampleUnsignedByte=127;a.rightChannelSampleUnsignedByte=127;a.mixerVolumeChanged=!1;a.mixerEnabledChanged=!1;a.needToRemixSamples=!1;return a}(),m=function(){function a(){}a.batchProcessCycles=function(){return 87<<b.GBCDoubleSpeed};a.updateNR50=function(b){a.NR50LeftMixerVolume=b>>4&7;a.NR50RightMixerVolume=b& |
||||
7};a.updateNR51=function(b){a.NR51IsChannel4EnabledOnLeftOutput=l(7,b);a.NR51IsChannel3EnabledOnLeftOutput=l(6,b);a.NR51IsChannel2EnabledOnLeftOutput=l(5,b);a.NR51IsChannel1EnabledOnLeftOutput=l(4,b);a.NR51IsChannel4EnabledOnRightOutput=l(3,b);a.NR51IsChannel3EnabledOnRightOutput=l(2,b);a.NR51IsChannel2EnabledOnRightOutput=l(1,b);a.NR51IsChannel1EnabledOnRightOutput=l(0,b)};a.updateNR52=function(b){a.NR52IsSoundEnabled=l(7,b)};a.maxFrameSequenceCycles=function(){return 8192<<b.GBCDoubleSpeed};a.maxDownSampleCycles= |
||||
function(){return b.CLOCK_SPEED()/a.sampleRate};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.NR50LeftMixerVolume;e[1028+50*a.saveStateSlot]=a.NR50RightMixerVolume;e[1032+50*a.saveStateSlot]=a.NR51IsChannel1EnabledOnLeftOutput;e[1033+50*a.saveStateSlot]=a.NR51IsChannel2EnabledOnLeftOutput;e[1034+50*a.saveStateSlot]=a.NR51IsChannel3EnabledOnLeftOutput;e[1035+50*a.saveStateSlot]=a.NR51IsChannel4EnabledOnLeftOutput;e[1036+50*a.saveStateSlot]=a.NR51IsChannel1EnabledOnRightOutput;e[1037+50*a.saveStateSlot]= |
||||
a.NR51IsChannel2EnabledOnRightOutput;e[1038+50*a.saveStateSlot]=a.NR51IsChannel3EnabledOnRightOutput;e[1039+50*a.saveStateSlot]=a.NR51IsChannel4EnabledOnRightOutput;e[1040+50*a.saveStateSlot]=a.NR52IsSoundEnabled;e[1041+50*a.saveStateSlot]=a.frameSequenceCycleCounter;e[1046+50*a.saveStateSlot]=a.frameSequencer;e[1047+50*a.saveStateSlot]=a.downSampleCycleCounter;e[1048+50*a.saveStateSlot]=g.channel1Sample;e[1049+50*a.saveStateSlot]=g.channel2Sample;e[1050+50*a.saveStateSlot]=g.channel3Sample;e[1051+ |
||||
50*a.saveStateSlot]=g.channel4Sample;e[1052+50*a.saveStateSlot]=g.channel1DacEnabled;e[1053+50*a.saveStateSlot]=g.channel2DacEnabled;e[1054+50*a.saveStateSlot]=g.channel3DacEnabled;e[1055+50*a.saveStateSlot]=g.channel4DacEnabled;e[1056+50*a.saveStateSlot]=g.leftChannelSampleUnsignedByte;e[1057+50*a.saveStateSlot]=g.rightChannelSampleUnsignedByte;e[1058+50*a.saveStateSlot]=g.mixerVolumeChanged;e[1059+50*a.saveStateSlot]=g.mixerEnabledChanged};a.loadState=function(){a.NR50LeftMixerVolume=e[1024+50* |
||||
a.saveStateSlot];a.NR50RightMixerVolume=e[1028+50*a.saveStateSlot];a.NR51IsChannel1EnabledOnLeftOutput=h(1032+50*a.saveStateSlot);a.NR51IsChannel2EnabledOnLeftOutput=h(1033+50*a.saveStateSlot);a.NR51IsChannel3EnabledOnLeftOutput=h(1034+50*a.saveStateSlot);a.NR51IsChannel4EnabledOnLeftOutput=h(1035+50*a.saveStateSlot);a.NR51IsChannel1EnabledOnRightOutput=h(1036+50*a.saveStateSlot);a.NR51IsChannel2EnabledOnRightOutput=h(1037+50*a.saveStateSlot);a.NR51IsChannel3EnabledOnRightOutput=h(1038+50*a.saveStateSlot); |
||||
a.NR51IsChannel4EnabledOnRightOutput=h(1039+50*a.saveStateSlot);a.NR52IsSoundEnabled=h(1040+50*a.saveStateSlot);a.frameSequenceCycleCounter=e[1041+50*a.saveStateSlot];a.frameSequencer=e[1046+50*a.saveStateSlot];a.downSampleCycleCounter=e[1047+50*a.saveStateSlot];g.channel1Sample=e[1048+50*a.saveStateSlot];g.channel2Sample=e[1049+50*a.saveStateSlot];g.channel3Sample=e[1050+50*a.saveStateSlot];g.channel4Sample=e[1051+50*a.saveStateSlot];g.channel1DacEnabled=h(1052+50*a.saveStateSlot);g.channel2DacEnabled= |
||||
h(1053+50*a.saveStateSlot);g.channel3DacEnabled=h(1054+50*a.saveStateSlot);g.channel4DacEnabled=h(1055+50*a.saveStateSlot);g.leftChannelSampleUnsignedByte=e[1056+50*a.saveStateSlot];g.rightChannelSampleUnsignedByte=e[1057+50*a.saveStateSlot];g.mixerVolumeChanged=h(1058+50*a.saveStateSlot);g.mixerEnabledChanged=h(1059+50*a.saveStateSlot);Rb()};a.currentCycles=0;a.memoryLocationNR50=65316;a.NR50LeftMixerVolume=0;a.NR50RightMixerVolume=0;a.memoryLocationNR51=65317;a.NR51IsChannel1EnabledOnLeftOutput= |
||||
!0;a.NR51IsChannel2EnabledOnLeftOutput=!0;a.NR51IsChannel3EnabledOnLeftOutput=!0;a.NR51IsChannel4EnabledOnLeftOutput=!0;a.NR51IsChannel1EnabledOnRightOutput=!0;a.NR51IsChannel2EnabledOnRightOutput=!0;a.NR51IsChannel3EnabledOnRightOutput=!0;a.NR51IsChannel4EnabledOnRightOutput=!0;a.memoryLocationNR52=65318;a.NR52IsSoundEnabled=!0;a.memoryLocationChannel3LoadRegisterStart=65328;a.frameSequenceCycleCounter=0;a.frameSequencer=0;a.downSampleCycleCounter=0;a.sampleRate=44100;a.audioQueueIndex=0;a.wasmBoyMemoryMaxBufferSize= |
||||
131072;a.saveStateSlot=6;return a}(),n=function(){function a(){}a.updateInterruptEnabled=function(b){a.isVBlankInterruptEnabled=l(a.bitPositionVBlankInterrupt,b);a.isLcdInterruptEnabled=l(a.bitPositionLcdInterrupt,b);a.isTimerInterruptEnabled=l(a.bitPositionTimerInterrupt,b);a.isSerialInterruptEnabled=l(a.bitPositionSerialInterrupt,b);a.isJoypadInterruptEnabled=l(a.bitPositionJoypadInterrupt,b);a.interruptsEnabledValue=b};a.updateInterruptRequested=function(b){a.isVBlankInterruptRequested=l(a.bitPositionVBlankInterrupt, |
||||
b);a.isLcdInterruptRequested=l(a.bitPositionLcdInterrupt,b);a.isTimerInterruptRequested=l(a.bitPositionTimerInterrupt,b);a.isSerialInterruptRequested=l(a.bitPositionSerialInterrupt,b);a.isJoypadInterruptRequested=l(a.bitPositionJoypadInterrupt,b);a.interruptsRequestedValue=b};a.areInterruptsPending=function(){return 0<(a.interruptsRequestedValue&a.interruptsEnabledValue&31)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.masterInterruptSwitch;e[1025+50*a.saveStateSlot]=a.masterInterruptSwitchDelay; |
||||
e[1040+50*a.saveStateSlot]=a.interruptsEnabledValue;e[1041+50*a.saveStateSlot]=a.isVBlankInterruptEnabled;e[1042+50*a.saveStateSlot]=a.isLcdInterruptEnabled;e[1043+50*a.saveStateSlot]=a.isTimerInterruptEnabled;e[1044+50*a.saveStateSlot]=a.isSerialInterruptEnabled;e[1045+50*a.saveStateSlot]=a.isJoypadInterruptEnabled;e[1056+50*a.saveStateSlot]=a.interruptsRequestedValue;e[1057+50*a.saveStateSlot]=a.isVBlankInterruptRequested;e[1058+50*a.saveStateSlot]=a.isLcdInterruptRequested;e[1059+50*a.saveStateSlot]= |
||||
a.isTimerInterruptRequested;e[1060+50*a.saveStateSlot]=a.isSerialInterruptRequested;e[1061+50*a.saveStateSlot]=a.isJoypadInterruptRequested};a.loadState=function(){a.masterInterruptSwitch=h(1024+50*a.saveStateSlot);a.masterInterruptSwitchDelay=h(1025+50*a.saveStateSlot);a.interruptsEnabledValue=e[1040+50*a.saveStateSlot];a.isVBlankInterruptEnabled=h(1041+50*a.saveStateSlot);a.isLcdInterruptEnabled=h(1042+50*a.saveStateSlot);a.isTimerInterruptEnabled=h(1043+50*a.saveStateSlot);a.isSerialInterruptEnabled= |
||||
h(1044+50*a.saveStateSlot);a.isJoypadInterruptEnabled=h(1045+50*a.saveStateSlot);a.interruptsRequestedValue=e[1056+50*a.saveStateSlot];a.isVBlankInterruptRequested=h(1057+50*a.saveStateSlot);a.isLcdInterruptRequested=h(1058+50*a.saveStateSlot);a.isTimerInterruptRequested=h(1059+50*a.saveStateSlot);a.isSerialInterruptRequested=h(1060+50*a.saveStateSlot);a.isJoypadInterruptRequested=h(1061+50*a.saveStateSlot)};a.masterInterruptSwitch=!1;a.masterInterruptSwitchDelay=!1;a.bitPositionVBlankInterrupt=0; |
||||
a.bitPositionLcdInterrupt=1;a.bitPositionTimerInterrupt=2;a.bitPositionSerialInterrupt=3;a.bitPositionJoypadInterrupt=4;a.memoryLocationInterruptEnabled=65535;a.interruptsEnabledValue=0;a.isVBlankInterruptEnabled=!1;a.isLcdInterruptEnabled=!1;a.isTimerInterruptEnabled=!1;a.isSerialInterruptEnabled=!1;a.isJoypadInterruptEnabled=!1;a.memoryLocationInterruptRequest=65295;a.interruptsRequestedValue=0;a.isVBlankInterruptRequested=!1;a.isLcdInterruptRequested=!1;a.isTimerInterruptRequested=!1;a.isSerialInterruptRequested= |
||||
!1;a.isJoypadInterruptRequested=!1;a.saveStateSlot=2;return a}(),t=function(){function a(){}a.batchProcessCycles=function(){return 256};a.updateDividerRegister=function(){var b=a.dividerRegister;a.dividerRegister=0;f(a.memoryLocationDividerRegister,0);a.timerEnabled&&Tb(b,0)&&zb()};a.updateTimerCounter=function(b){if(a.timerEnabled){if(a.timerCounterWasReset)return;a.timerCounterOverflowDelay&&(a.timerCounterOverflowDelay=!1)}a.timerCounter=b};a.updateTimerModulo=function(b){a.timerModulo=b;a.timerEnabled&& |
||||
a.timerCounterWasReset&&(a.timerCounter=b,a.timerCounterWasReset=!1)};a.updateTimerControl=function(b){var c=a.timerEnabled;a.timerEnabled=l(2,b);b&=3;if(!c){c=Ab(a.timerInputClock);var d=Ab(b),e=a.dividerRegister;(a.timerEnabled?l(c,e):l(c,e)&&l(d,e))&&zb()}a.timerInputClock=b};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.currentCycles;e[1028+50*a.saveStateSlot]=a.dividerRegister;e[1032+50*a.saveStateSlot]=a.timerCounter;e[1036+50*a.saveStateSlot]=a.timerCounterOverflowDelay;e[1037+50*a.saveStateSlot]= |
||||
a.timerCounterWasReset;e[1038+50*a.saveStateSlot]=a.timerCounterMask;e[1042+50*a.saveStateSlot]=a.timerModulo;e[1046+50*a.saveStateSlot]=a.timerEnabled;e[1047+50*a.saveStateSlot]=a.timerInputClock};a.loadState=function(){a.currentCycles=e[1024+50*a.saveStateSlot];a.dividerRegister=e[1028+50*a.saveStateSlot];a.timerCounter=e[1032+50*a.saveStateSlot];a.timerCounterOverflowDelay=h(1036+50*a.saveStateSlot);a.timerCounterWasReset=h(1037+50*a.saveStateSlot);a.timerCounterMask=e[1038+50*a.saveStateSlot]; |
||||
a.timerModulo=e[1042+50*a.saveStateSlot];a.timerEnabled=h(1046+50*a.saveStateSlot);a.timerInputClock=e[1047+50*a.saveStateSlot]};a.currentCycles=0;a.memoryLocationDividerRegister=65284;a.dividerRegister=0;a.memoryLocationTimerCounter=65285;a.timerCounter=0;a.timerCounterOverflowDelay=!1;a.timerCounterWasReset=!1;a.timerCounterMask=0;a.memoryLocationTimerModulo=65286;a.timerModulo=0;a.memoryLocationTimerControl=65287;a.timerEnabled=!1;a.timerInputClock=0;a.saveStateSlot=5;return a}(),V=function(){function a(){} |
||||
a.updateTransferControl=function(b){a.isShiftClockInternal=l(0,b);a.isClockSpeedFast=l(1,b);a.transferStartFlag=l(7,b);return!0};a.currentCycles=0;a.memoryLocationSerialTransferData=65281;a.memoryLocationSerialTransferControl=65282;a.numberOfBitsTransferred=0;a.isShiftClockInternal=!1;a.isClockSpeedFast=!1;a.transferStartFlag=!1;return a}(),C=function(){function a(){}a.updateJoypad=function(b){a.joypadRegisterFlipped=b^255;a.isDpadType=l(4,a.joypadRegisterFlipped);a.isButtonType=l(5,a.joypadRegisterFlipped)}; |
||||
a.saveState=function(){e[1024+50*a.saveStateSlot]=a.joypadRegisterFlipped;e[1025+50*a.saveStateSlot]=a.isDpadType;e[1026+50*a.saveStateSlot]=a.isButtonType};a.loadState=function(){a.joypadRegisterFlipped=e[1024+50*a.saveStateSlot];a.isDpadType=h(1025+50*a.saveStateSlot);a.isButtonType=h(1026+50*a.saveStateSlot)};a.up=!1;a.down=!1;a.left=!1;a.right=!1;a.a=!1;a.b=!1;a.select=!1;a.start=!1;a.memoryLocationJoypadRegister=65280;a.joypadRegisterFlipped=0;a.isDpadType=!1;a.isButtonType=!1;a.saveStateSlot= |
||||
3;return a}(),W=function(){function a(){}a.programCounter=-1;a.readGbMemory=-1;a.writeGbMemory=-1;a.reachedBreakpoint=!1;return a}(),w=function(){function a(){}a.updateLcdStatus=function(b){var c=u(a.memoryLocationLcdStatus);b=b&248|c&7|128;f(a.memoryLocationLcdStatus,b)};a.updateLcdControl=function(b){var c=a.enabled;a.enabled=l(7,b);a.windowTileMapDisplaySelect=l(6,b);a.windowDisplayEnabled=l(5,b);a.bgWindowTileDataSelect=l(4,b);a.bgTileMapDisplaySelect=l(3,b);a.tallSpriteSize=l(2,b);a.spriteDisplayEnable= |
||||
l(1,b);a.bgDisplayEnabled=l(0,b);c&&!a.enabled&&Vb(!0);!c&&a.enabled&&Vb(!1)};a.memoryLocationLcdStatus=65345;a.currentLcdMode=0;a.memoryLocationCoincidenceCompare=65349;a.coincidenceCompare=0;a.memoryLocationLcdControl=65344;a.enabled=!0;a.windowTileMapDisplaySelect=!1;a.windowDisplayEnabled=!1;a.bgWindowTileDataSelect=!1;a.bgTileMapDisplaySelect=!1;a.tallSpriteSize=!1;a.spriteDisplayEnable=!1;a.bgDisplayEnabled=!1;return a}(),r=function(){function a(){}a.batchProcessCycles=function(){return a.MAX_CYCLES_PER_SCANLINE()}; |
||||
a.MAX_CYCLES_PER_SCANLINE=function(){return 153===a.scanlineRegister?4<<b.GBCDoubleSpeed:456<<b.GBCDoubleSpeed};a.MIN_CYCLES_SPRITES_LCD_MODE=function(){return 376<<b.GBCDoubleSpeed};a.MIN_CYCLES_TRANSFER_DATA_LCD_MODE=function(){return 249<<b.GBCDoubleSpeed};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.scanlineCycleCounter;e[1028+50*a.saveStateSlot]=a.scanlineRegister;e[1029+50*a.saveStateSlot]=a.scrollX;e[1030+50*a.saveStateSlot]=a.scrollY;e[1031+50*a.saveStateSlot]=a.windowX;e[1032+50*a.saveStateSlot]= |
||||
a.windowY;e[1033+50*a.saveStateSlot]=w.currentLcdMode;e[1034+50*a.saveStateSlot]=w.coincidenceCompare;e[1035+50*a.saveStateSlot]=w.enabled;e[1036+50*a.saveStateSlot]=w.windowTileMapDisplaySelect;e[1037+50*a.saveStateSlot]=w.windowDisplayEnabled;e[1038+50*a.saveStateSlot]=w.bgWindowTileDataSelect;e[1039+50*a.saveStateSlot]=w.bgTileMapDisplaySelect;e[1040+50*a.saveStateSlot]=w.tallSpriteSize;e[1041+50*a.saveStateSlot]=w.spriteDisplayEnable;e[1042+50*a.saveStateSlot]=w.bgDisplayEnabled};a.loadState= |
||||
function(){a.scanlineCycleCounter=e[1024+50*a.saveStateSlot];a.scanlineRegister=e[1028+50*a.scanlineRegister];a.scrollX=e[1029+50*a.saveStateSlot];a.scrollY=e[1030+50*a.saveStateSlot];a.windowX=e[1031+50*a.saveStateSlot];a.windowY=e[1032+50*a.saveStateSlot];w.currentLcdMode=e[1033+50*a.saveStateSlot];w.coincidenceCompare=e[1034+50*a.saveStateSlot];w.enabled=h(1035+50*a.saveStateSlot);w.windowTileMapDisplaySelect=h(1036+50*a.saveStateSlot);w.windowDisplayEnabled=h(1037+50*a.saveStateSlot);w.bgWindowTileDataSelect= |
||||
h(1038+50*a.saveStateSlot);w.bgTileMapDisplaySelect=h(1039+50*a.saveStateSlot);w.tallSpriteSize=h(1040+50*a.saveStateSlot);w.spriteDisplayEnable=h(1041+50*a.saveStateSlot);w.bgDisplayEnabled=h(1042+50*a.saveStateSlot)};a.currentCycles=0;a.scanlineCycleCounter=0;a.memoryLocationScanlineRegister=65348;a.scanlineRegister=0;a.memoryLocationDmaTransfer=65350;a.memoryLocationScrollX=65347;a.scrollX=0;a.memoryLocationScrollY=65346;a.scrollY=0;a.memoryLocationWindowX=65355;a.windowX=0;a.memoryLocationWindowY= |
||||
65354;a.windowY=0;a.memoryLocationTileMapSelectZeroStart=38912;a.memoryLocationTileMapSelectOneStart=39936;a.memoryLocationTileDataSelectZeroStart=34816;a.memoryLocationTileDataSelectOneStart=32768;a.memoryLocationSpriteAttributesTable=65024;a.memoryLocationBackgroundPalette=65351;a.memoryLocationSpritePaletteOne=65352;a.memoryLocationSpritePaletteTwo=65353;a.saveStateSlot=1;return a}(),k=function(){function a(){}a.saveState=function(){e[1024+50*a.saveStateSlot]=a.currentRomBank;e[1026+50*a.saveStateSlot]= |
||||
a.currentRamBank;e[1028+50*a.saveStateSlot]=a.isRamBankingEnabled;e[1029+50*a.saveStateSlot]=a.isMBC1RomModeEnabled;e[1030+50*a.saveStateSlot]=a.isRomOnly;e[1031+50*a.saveStateSlot]=a.isMBC1;e[1032+50*a.saveStateSlot]=a.isMBC2;e[1033+50*a.saveStateSlot]=a.isMBC3;e[1034+50*a.saveStateSlot]=a.isMBC5;e[1035+50*a.saveStateSlot]=a.DMACycles;e[1039+50*a.saveStateSlot]=a.isHblankHdmaActive;e[1040+50*a.saveStateSlot]=a.hblankHdmaTransferLengthRemaining;e[1044+50*a.saveStateSlot]=a.hblankHdmaSource;e[1048+ |
||||
50*a.saveStateSlot]=a.hblankHdmaDestination};a.loadState=function(){a.currentRomBank=e[1024+50*a.saveStateSlot];a.currentRamBank=e[1026+50*a.saveStateSlot];a.isRamBankingEnabled=h(1028+50*a.saveStateSlot);a.isMBC1RomModeEnabled=h(1029+50*a.saveStateSlot);a.isRomOnly=h(1030+50*a.saveStateSlot);a.isMBC1=h(1031+50*a.saveStateSlot);a.isMBC2=h(1032+50*a.saveStateSlot);a.isMBC3=h(1033+50*a.saveStateSlot);a.isMBC5=h(1034+50*a.saveStateSlot);a.DMACycles=e[1035+50*a.saveStateSlot];a.isHblankHdmaActive=h(1039+ |
||||
50*a.saveStateSlot);a.hblankHdmaTransferLengthRemaining=e[1040+50*a.saveStateSlot];a.hblankHdmaSource=e[1044+50*a.saveStateSlot];a.hblankHdmaDestination=e[1048+50*a.saveStateSlot]};a.cartridgeRomLocation=0;a.switchableCartridgeRomLocation=16384;a.videoRamLocation=32768;a.cartridgeRamLocation=40960;a.internalRamBankZeroLocation=49152;a.internalRamBankOneLocation=53248;a.echoRamLocation=57344;a.spriteInformationTableLocation=65024;a.spriteInformationTableLocationEnd=65183;a.unusableMemoryLocation=65184; |
||||
a.unusableMemoryEndLocation=65279;a.currentRomBank=0;a.currentRamBank=0;a.isRamBankingEnabled=!1;a.isMBC1RomModeEnabled=!0;a.isRomOnly=!0;a.isMBC1=!1;a.isMBC2=!1;a.isMBC3=!1;a.isMBC5=!1;a.memoryLocationHdmaSourceHigh=65361;a.memoryLocationHdmaSourceLow=65362;a.memoryLocationHdmaDestinationHigh=65363;a.memoryLocationHdmaDestinationLow=65364;a.memoryLocationHdmaTrigger=65365;a.DMACycles=0;a.isHblankHdmaActive=!1;a.hblankHdmaTransferLengthRemaining=0;a.hblankHdmaSource=0;a.hblankHdmaDestination=0;a.memoryLocationGBCVRAMBank= |
||||
65359;a.memoryLocationGBCWRAMBank=65392;a.saveStateSlot=4;return a}(),b=function(){function a(){}a.CLOCK_SPEED=function(){return 4194304<<a.GBCDoubleSpeed};a.MAX_CYCLES_PER_FRAME=function(){return 70224<<a.GBCDoubleSpeed};a.enableHalt=function(){n.masterInterruptSwitch?a.isHaltNormal=!0:0===(n.interruptsEnabledValue&n.interruptsRequestedValue&31)?a.isHaltNoJump=!0:a.isHaltBug=!0};a.exitHaltAndStop=function(){a.isHaltNoJump=!1;a.isHaltNormal=!1;a.isHaltBug=!1;a.isStopped=!1};a.isHalted=function(){return a.isHaltNormal|| |
||||
a.isHaltNoJump};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.registerA;e[1025+50*a.saveStateSlot]=a.registerB;e[1026+50*a.saveStateSlot]=a.registerC;e[1027+50*a.saveStateSlot]=a.registerD;e[1028+50*a.saveStateSlot]=a.registerE;e[1029+50*a.saveStateSlot]=a.registerH;e[1030+50*a.saveStateSlot]=a.registerL;e[1031+50*a.saveStateSlot]=a.registerF;e[1032+50*a.saveStateSlot]=a.stackPointer;e[1034+50*a.saveStateSlot]=a.programCounter;e[1036+50*a.saveStateSlot]=a.currentCycles;e[1041+50*a.saveStateSlot]= |
||||
a.isHaltNormal;e[1042+50*a.saveStateSlot]=a.isHaltNoJump;e[1043+50*a.saveStateSlot]=a.isHaltBug;e[1044+50*a.saveStateSlot]=a.isStopped;e[1045+50*a.saveStateSlot]=a.BootROMEnabled;e[1046+50*a.saveStateSlot]=a.GBCEnabled;e[1047+50*a.saveStateSlot]=a.GBCDoubleSpeed};a.loadState=function(){a.registerA=e[1024+50*a.saveStateSlot];a.registerB=e[1025+50*a.saveStateSlot];a.registerC=e[1026+50*a.saveStateSlot];a.registerD=e[1027+50*a.saveStateSlot];a.registerE=e[1028+50*a.saveStateSlot];a.registerH=e[1029+ |
||||
50*a.saveStateSlot];a.registerL=e[1030+50*a.saveStateSlot];a.registerF=e[1031+50*a.saveStateSlot];a.stackPointer=e[1032+50*a.saveStateSlot];a.programCounter=e[1034+50*a.saveStateSlot];a.currentCycles=e[1036+50*a.saveStateSlot];a.isHaltNormal=h(1041+50*a.saveStateSlot);a.isHaltNoJump=h(1042+50*a.saveStateSlot);a.isHaltBug=h(1043+50*a.saveStateSlot);a.isStopped=h(1044+50*a.saveStateSlot);a.BootROMEnabled=h(1045+50*a.saveStateSlot);a.GBCEnabled=h(1046+50*a.saveStateSlot);a.GBCDoubleSpeed=h(1047+50*a.saveStateSlot)}; |
||||
a.memoryLocationBootROMSwitch=65360;a.BootROMEnabled=!1;a.GBCEnabled=!1;a.memoryLocationSpeedSwitch=65357;a.GBCDoubleSpeed=!1;a.registerA=0;a.registerB=0;a.registerC=0;a.registerD=0;a.registerE=0;a.registerH=0;a.registerL=0;a.registerF=0;a.stackPointer=0;a.programCounter=0;a.currentCycles=0;a.isHaltNormal=!1;a.isHaltNoJump=!1;a.isHaltBug=!1;a.isStopped=!1;a.saveStateSlot=0;return a}(),Z=function(){function a(){}a.cyclesPerCycleSet=2E9;a.cycleSets=0;a.cycles=0;return a}(),S=function(){function a(){} |
||||
a.stepsPerStepSet=2E9;a.stepSets=0;a.steps=0;a.RESPONSE_CONDITION_ERROR=-1;a.RESPONSE_CONDITION_FRAME=0;a.RESPONSE_CONDITION_AUDIO=1;a.RESPONSE_CONDITION_BREAKPOINT=2;return a}();eb.size()<Lb&&eb.grow(Lb-eb.size());var db=!1,xc=Object.freeze({memory:eb,config:function(a,c,e,l,h,p,q,w,O,x){M.enableBootRom=0<a;M.useGbcWhenAvailable=0<c;M.audioBatchProcessing=0<e;M.graphicsBatchProcessing=0<l;M.timersBatchProcessing=0<h;M.graphicsDisableScanlineRendering=0<p;M.audioAccumulateSamples=0<q;M.tileRendering= |
||||
0<w;M.tileCaching=0<O;M.enableAudioDebugging=0<x;a=u(323);b.GBCEnabled=192===a||M.useGbcWhenAvailable&&128===a?!0:!1;db=!1;Z.cyclesPerCycleSet=2E9;Z.cycleSets=0;Z.cycles=0;S.stepsPerStepSet=2E9;S.stepSets=0;S.steps=0;b.BootROMEnabled=M.enableBootRom?!0:!1;b.GBCDoubleSpeed=!1;b.registerA=0;b.registerB=0;b.registerC=0;b.registerD=0;b.registerE=0;b.registerH=0;b.registerL=0;b.registerF=0;b.stackPointer=0;b.programCounter=0;b.currentCycles=0;b.isHaltNormal=!1;b.isHaltNoJump=!1;b.isHaltBug=!1;b.isStopped= |
||||
!1;b.BootROMEnabled||(b.GBCEnabled?(b.registerA=17,b.registerF=128,b.registerB=0,b.registerC=0,b.registerD=255,b.registerE=86,b.registerH=0,b.registerL=13):(b.registerA=1,b.registerF=176,b.registerB=0,b.registerC=19,b.registerD=0,b.registerE=216,b.registerH=1,b.registerL=77),b.programCounter=256,b.stackPointer=65534);k.isRamBankingEnabled=!1;k.isMBC1RomModeEnabled=!0;a=u(327);k.isRomOnly=0===a;k.isMBC1=1<=a&&3>=a;k.isMBC2=5<=a&&6>=a;k.isMBC3=15<=a&&19>=a;k.isMBC5=25<=a&&30>=a;k.currentRomBank=1;k.currentRamBank= |
||||
0;f(k.memoryLocationGBCVRAMBank,0);f(k.memoryLocationGBCWRAMBank,1);f(65361,255);f(65362,255);f(65363,255);f(65364,255);f(65365,255);r.currentCycles=0;r.scanlineCycleCounter=0;r.scanlineRegister=0;r.scrollX=0;r.scrollY=0;r.windowX=0;r.windowY=0;r.scanlineRegister=144;b.GBCEnabled?(f(65345,129),f(65348,144),f(65351,252)):(f(65345,133),f(65350,255),f(65351,252),f(65352,255),f(65353,255));r.scanlineRegister=144;f(65344,145);f(65359,0);f(65392,1);b.BootROMEnabled&&(b.GBCEnabled?(r.scanlineRegister=0, |
||||
f(65344,0),f(65345,128),f(65348,0)):(r.scanlineRegister=0,f(65344,0),f(65345,132)));Mb(0);if(!b.GBCEnabled&&(!b.BootROMEnabled||b.GBCEnabled)){a=0;for(c=308;323>=c;c++)a+=u(c);switch(a&255){case 136:d.bgWhite=pa.bgWhite;d.bgLightGrey=pa.bgLightGrey;d.bgDarkGrey=pa.bgDarkGrey;d.bgBlack=pa.bgBlack;d.obj0White=pa.obj0White;d.obj0LightGrey=pa.obj0LightGrey;d.obj0DarkGrey=pa.obj0DarkGrey;d.obj0Black=pa.obj0Black;d.obj1White=pa.obj1White;d.obj1LightGrey=pa.obj1LightGrey;d.obj1DarkGrey=pa.obj1DarkGrey;d.obj1Black= |
||||
pa.obj1Black;break;case 97:d.bgWhite=qa.bgWhite;d.bgLightGrey=qa.bgLightGrey;d.bgDarkGrey=qa.bgDarkGrey;d.bgBlack=qa.bgBlack;d.obj0White=qa.obj0White;d.obj0LightGrey=qa.obj0LightGrey;d.obj0DarkGrey=qa.obj0DarkGrey;d.obj0Black=qa.obj0Black;d.obj1White=qa.obj1White;d.obj1LightGrey=qa.obj1LightGrey;d.obj1DarkGrey=qa.obj1DarkGrey;d.obj1Black=qa.obj1Black;break;case 20:d.bgWhite=ra.bgWhite;d.bgLightGrey=ra.bgLightGrey;d.bgDarkGrey=ra.bgDarkGrey;d.bgBlack=ra.bgBlack;d.obj0White=ra.obj0White;d.obj0LightGrey= |
||||
ra.obj0LightGrey;d.obj0DarkGrey=ra.obj0DarkGrey;d.obj0Black=ra.obj0Black;d.obj1White=ra.obj1White;d.obj1LightGrey=ra.obj1LightGrey;d.obj1DarkGrey=ra.obj1DarkGrey;d.obj1Black=ra.obj1Black;break;case 70:d.bgWhite=sa.bgWhite;d.bgLightGrey=sa.bgLightGrey;d.bgDarkGrey=sa.bgDarkGrey;d.bgBlack=sa.bgBlack;d.obj0White=sa.obj0White;d.obj0LightGrey=sa.obj0LightGrey;d.obj0DarkGrey=sa.obj0DarkGrey;d.obj0Black=sa.obj0Black;d.obj1White=sa.obj1White;d.obj1LightGrey=sa.obj1LightGrey;d.obj1DarkGrey=sa.obj1DarkGrey; |
||||
d.obj1Black=sa.obj1Black;break;case 89:case 198:d.bgWhite=ta.bgWhite;d.bgLightGrey=ta.bgLightGrey;d.bgDarkGrey=ta.bgDarkGrey;d.bgBlack=ta.bgBlack;d.obj0White=ta.obj0White;d.obj0LightGrey=ta.obj0LightGrey;d.obj0DarkGrey=ta.obj0DarkGrey;d.obj0Black=ta.obj0Black;d.obj1White=ta.obj1White;d.obj1LightGrey=ta.obj1LightGrey;d.obj1DarkGrey=ta.obj1DarkGrey;d.obj1Black=ta.obj1Black;break;case 134:case 168:d.bgWhite=ua.bgWhite;d.bgLightGrey=ua.bgLightGrey;d.bgDarkGrey=ua.bgDarkGrey;d.bgBlack=ua.bgBlack;d.obj0White= |
||||
ua.obj0White;d.obj0LightGrey=ua.obj0LightGrey;d.obj0DarkGrey=ua.obj0DarkGrey;d.obj0Black=ua.obj0Black;d.obj1White=ua.obj1White;d.obj1LightGrey=ua.obj1LightGrey;d.obj1DarkGrey=ua.obj1DarkGrey;d.obj1Black=ua.obj1Black;break;case 191:case 206:case 209:case 240:d.bgWhite=va.bgWhite;d.bgLightGrey=va.bgLightGrey;d.bgDarkGrey=va.bgDarkGrey;d.bgBlack=va.bgBlack;d.obj0White=va.obj0White;d.obj0LightGrey=va.obj0LightGrey;d.obj0DarkGrey=va.obj0DarkGrey;d.obj0Black=va.obj0Black;d.obj1White=va.obj1White;d.obj1LightGrey= |
||||
va.obj1LightGrey;d.obj1DarkGrey=va.obj1DarkGrey;d.obj1Black=va.obj1Black;break;case 39:case 73:case 92:case 179:d.bgWhite=wa.bgWhite;d.bgLightGrey=wa.bgLightGrey;d.bgDarkGrey=wa.bgDarkGrey;d.bgBlack=wa.bgBlack;d.obj0White=wa.obj0White;d.obj0LightGrey=wa.obj0LightGrey;d.obj0DarkGrey=wa.obj0DarkGrey;d.obj0Black=wa.obj0Black;d.obj1White=wa.obj1White;d.obj1LightGrey=wa.obj1LightGrey;d.obj1DarkGrey=wa.obj1DarkGrey;d.obj1Black=wa.obj1Black;break;case 201:d.bgWhite=xa.bgWhite;d.bgLightGrey=xa.bgLightGrey; |
||||
d.bgDarkGrey=xa.bgDarkGrey;d.bgBlack=xa.bgBlack;d.obj0White=xa.obj0White;d.obj0LightGrey=xa.obj0LightGrey;d.obj0DarkGrey=xa.obj0DarkGrey;d.obj0Black=xa.obj0Black;d.obj1White=xa.obj1White;d.obj1LightGrey=xa.obj1LightGrey;d.obj1DarkGrey=xa.obj1DarkGrey;d.obj1Black=xa.obj1Black;break;case 112:d.bgWhite=ya.bgWhite;d.bgLightGrey=ya.bgLightGrey;d.bgDarkGrey=ya.bgDarkGrey;d.bgBlack=ya.bgBlack;d.obj0White=ya.obj0White;d.obj0LightGrey=ya.obj0LightGrey;d.obj0DarkGrey=ya.obj0DarkGrey;d.obj0Black=ya.obj0Black; |
||||
d.obj1White=ya.obj1White;d.obj1LightGrey=ya.obj1LightGrey;d.obj1DarkGrey=ya.obj1DarkGrey;d.obj1Black=ya.obj1Black;break;case 70:d.bgWhite=za.bgWhite;d.bgLightGrey=za.bgLightGrey;d.bgDarkGrey=za.bgDarkGrey;d.bgBlack=za.bgBlack;d.obj0White=za.obj0White;d.obj0LightGrey=za.obj0LightGrey;d.obj0DarkGrey=za.obj0DarkGrey;d.obj0Black=za.obj0Black;d.obj1White=za.obj1White;d.obj1LightGrey=za.obj1LightGrey;d.obj1DarkGrey=za.obj1DarkGrey;d.obj1Black=za.obj1Black;break;case 211:d.bgWhite=Aa.bgWhite,d.bgLightGrey= |
||||
Aa.bgLightGrey,d.bgDarkGrey=Aa.bgDarkGrey,d.bgBlack=Aa.bgBlack,d.obj0White=Aa.obj0White,d.obj0LightGrey=Aa.obj0LightGrey,d.obj0DarkGrey=Aa.obj0DarkGrey,d.obj0Black=Aa.obj0Black,d.obj1White=Aa.obj1White,d.obj1LightGrey=Aa.obj1LightGrey,d.obj1DarkGrey=Aa.obj1DarkGrey,d.obj1Black=Aa.obj1Black}}b.GBCEnabled?(f(65384,192),f(65385,255),f(65386,193),f(65387,13)):(f(65384,255),f(65385,255),f(65386,255),f(65387,255));b.BootROMEnabled&&b.GBCEnabled&&(f(65385,32),f(65387,138));m.currentCycles=0;m.NR50LeftMixerVolume= |
||||
0;m.NR50RightMixerVolume=0;m.NR51IsChannel1EnabledOnLeftOutput=!0;m.NR51IsChannel2EnabledOnLeftOutput=!0;m.NR51IsChannel3EnabledOnLeftOutput=!0;m.NR51IsChannel4EnabledOnLeftOutput=!0;m.NR51IsChannel1EnabledOnRightOutput=!0;m.NR51IsChannel2EnabledOnRightOutput=!0;m.NR51IsChannel3EnabledOnRightOutput=!0;m.NR51IsChannel4EnabledOnRightOutput=!0;m.NR52IsSoundEnabled=!0;m.frameSequenceCycleCounter=0;m.downSampleCycleCounter=0;m.frameSequencer=0;m.audioQueueIndex=0;y.initialize();A.initialize();v.initialize(); |
||||
D.initialize();f(m.memoryLocationNR50,119);m.updateNR50(119);f(m.memoryLocationNR51,243);m.updateNR51(243);f(m.memoryLocationNR52,241);m.updateNR52(241);b.BootROMEnabled&&(f(m.memoryLocationNR50,0),m.updateNR50(0),f(m.memoryLocationNR51,0),m.updateNR51(0),f(m.memoryLocationNR52,112),m.updateNR52(112));g.channel1Sample=15;g.channel2Sample=15;g.channel3Sample=15;g.channel4Sample=15;g.channel1DacEnabled=!1;g.channel2DacEnabled=!1;g.channel3DacEnabled=!1;g.channel4DacEnabled=!1;g.leftChannelSampleUnsignedByte= |
||||
127;g.rightChannelSampleUnsignedByte=127;g.mixerVolumeChanged=!0;g.mixerEnabledChanged=!0;g.needToRemixSamples=!1;n.updateInterruptEnabled(0);f(n.memoryLocationInterruptEnabled,n.interruptsEnabledValue);n.updateInterruptRequested(225);f(n.memoryLocationInterruptRequest,n.interruptsRequestedValue);t.currentCycles=0;t.dividerRegister=0;t.timerCounter=0;t.timerModulo=0;t.timerEnabled=!1;t.timerInputClock=0;t.timerCounterOverflowDelay=!1;t.timerCounterWasReset=!1;b.GBCEnabled?(f(65284,30),t.dividerRegister= |
||||
7840):(f(65284,171),t.dividerRegister=43980);f(65287,248);t.timerInputClock=248;b.BootROMEnabled&&!b.GBCEnabled&&(f(65284,0),t.dividerRegister=4);V.currentCycles=0;V.numberOfBitsTransferred=0;b.GBCEnabled?(f(65282,124),V.updateTransferControl(124)):(f(65282,126),V.updateTransferControl(126));b.GBCEnabled?(f(65392,248),f(65359,254),f(65357,126),f(65280,207),f(65295,225),f(65388,254),f(65397,143)):(f(65392,255),f(65359,255),f(65357,255),f(65280,207),f(65295,225))},hasCoreStarted:function(){return db}, |
||||
saveState:function(){b.saveState();r.saveState();n.saveState();C.saveState();k.saveState();t.saveState();m.saveState();y.saveState();A.saveState();v.saveState();D.saveState();db=!1},loadState:function(){b.loadState();r.loadState();n.loadState();C.loadState();k.loadState();t.loadState();m.loadState();y.loadState();A.loadState();v.loadState();D.loadState();db=!1;Z.cyclesPerCycleSet=2E9;Z.cycleSets=0;Z.cycles=0;S.stepsPerStepSet=2E9;S.stepSets=0;S.steps=0},isGBC:function(){return b.GBCEnabled},getStepsPerStepSet:function(){return S.stepsPerStepSet}, |
||||
getStepSets:function(){return S.stepSets},getSteps:function(){return S.steps},executeMultipleFrames:function(a){for(var b=0,d=0;d<a&&0<=b;)b=$b(),d+=1;return 0>b?b:0},executeFrame:$b,executeFrameAndCheckAudio:function(a){void 0===a&&(a=0);return Ib(!0,a)},executeUntilCondition:Ib,executeStep:ac,getCyclesPerCycleSet:function(){return Z.cyclesPerCycleSet},getCycleSets:function(){return Z.cycleSets},getCycles:function(){return Z.cycles},setJoypadState:function(a,b,d,e,f,l,g,h){0<a?Na(0):Ca(0,!1);0<b? |
||||
Na(1):Ca(1,!1);0<d?Na(2):Ca(2,!1);0<e?Na(3):Ca(3,!1);0<f?Na(4):Ca(4,!1);0<l?Na(5):Ca(5,!1);0<g?Na(6):Ca(6,!1);0<h?Na(7):Ca(7,!1)},getNumberOfSamplesInAudioBuffer:Qb,clearAudioBuffer:Rb,setManualColorizationPalette:Mb,WASMBOY_MEMORY_LOCATION:0,WASMBOY_MEMORY_SIZE:bc,WASMBOY_WASM_PAGES:Lb,ASSEMBLYSCRIPT_MEMORY_LOCATION:0,ASSEMBLYSCRIPT_MEMORY_SIZE:1024,WASMBOY_STATE_LOCATION:1024,WASMBOY_STATE_SIZE:1024,GAMEBOY_INTERNAL_MEMORY_LOCATION:2048,GAMEBOY_INTERNAL_MEMORY_SIZE:uc,VIDEO_RAM_LOCATION:2048,VIDEO_RAM_SIZE:16384, |
||||
WORK_RAM_LOCATION:18432,WORK_RAM_SIZE:32768,OTHER_GAMEBOY_INTERNAL_MEMORY_LOCATION:51200,OTHER_GAMEBOY_INTERNAL_MEMORY_SIZE:16384,GRAPHICS_OUTPUT_LOCATION:vc,GRAPHICS_OUTPUT_SIZE:wc,GBC_PALETTE_LOCATION:Ta,GBC_PALETTE_SIZE:128,BG_PRIORITY_MAP_LOCATION:Ua,BG_PRIORITY_MAP_SIZE:23552,FRAME_LOCATION:Ya,FRAME_SIZE:93184,BACKGROUND_MAP_LOCATION:ob,BACKGROUND_MAP_SIZE:196608,TILE_DATA_LOCATION:Jb,TILE_DATA_SIZE:147456,OAM_TILES_LOCATION:pb,OAM_TILES_SIZE:15360,AUDIO_BUFFER_LOCATION:kb,AUDIO_BUFFER_SIZE:131072, |
||||
CHANNEL_1_BUFFER_LOCATION:ub,CHANNEL_1_BUFFER_SIZE:131072,CHANNEL_2_BUFFER_LOCATION:vb,CHANNEL_2_BUFFER_SIZE:131072,CHANNEL_3_BUFFER_LOCATION:wb,CHANNEL_3_BUFFER_SIZE:131072,CHANNEL_4_BUFFER_LOCATION:xb,CHANNEL_4_BUFFER_SIZE:131072,CARTRIDGE_RAM_LOCATION:Fb,CARTRIDGE_RAM_SIZE:131072,BOOT_ROM_LOCATION:mb,BOOT_ROM_SIZE:2560,CARTRIDGE_ROM_LOCATION:nb,CARTRIDGE_ROM_SIZE:8258560,DEBUG_GAMEBOY_MEMORY_LOCATION:Kb,DEBUG_GAMEBOY_MEMORY_SIZE:65535,getWasmBoyOffsetFromGameBoyOffset:Eb,setProgramCounterBreakpoint:function(a){W.programCounter= |
||||
a},resetProgramCounterBreakpoint:function(){W.programCounter=-1},setReadGbMemoryBreakpoint:function(a){W.readGbMemory=a},resetReadGbMemoryBreakpoint:function(){W.readGbMemory=-1},setWriteGbMemoryBreakpoint:function(a){W.writeGbMemory=a},resetWriteGbMemoryBreakpoint:function(){W.writeGbMemory=-1},getRegisterA:function(){return b.registerA},getRegisterB:function(){return b.registerB},getRegisterC:function(){return b.registerC},getRegisterD:function(){return b.registerD},getRegisterE:function(){return b.registerE}, |
||||
getRegisterH:function(){return b.registerH},getRegisterL:function(){return b.registerL},getRegisterF:function(){return b.registerF},getProgramCounter:function(){return b.programCounter},getStackPointer:function(){return b.stackPointer},getOpcodeAtProgramCounter:function(){return u(b.programCounter)},getLY:function(){return r.scanlineRegister},getScrollX:function(){return r.scrollX},getScrollY:function(){return r.scrollY},getWindowX:function(){return r.windowX},getWindowY:function(){return r.windowY}, |
||||
drawBackgroundMapToWasmMemory:function(a){var c=r.memoryLocationTileDataSelectZeroStart;w.bgWindowTileDataSelect&&(c=r.memoryLocationTileDataSelectOneStart);var d=r.memoryLocationTileMapSelectZeroStart;w.bgTileMapDisplaySelect&&(d=r.memoryLocationTileMapSelectOneStart);for(var f=0;256>f;f++)for(var g=0;256>g;g++){var h=f,m=g,k=d+32*(h>>3)+(m>>3),n=T(k,0);n=$a(c,n);var p=h%8;h=m%8;h=7-h;m=0;b.GBCEnabled&&0<a&&(m=T(k,1));l(6,m)&&(p=7-p);var q=0;l(3,m)&&(q=1);k=T(n+2*p,q);n=T(n+2*p+1,q);p=0;l(h,n)&& |
||||
(p+=1,p<<=1);l(h,k)&&(p+=1);n=3*(256*f+g);b.GBCEnabled&&0<a?(k=hb(m&7,p,!1),m=oa(0,k),h=oa(1,k),k=oa(2,k),n=ob+n,e[n]=m,e[n+1]=h,e[n+2]=k):(m=gb(p,r.memoryLocationBackgroundPalette),n=ob+n,e[n+0]=(m&16711680)>>16,e[n+1]=(m&65280)>>8,e[n+2]=m&255)}},drawTileDataToWasmMemory:function(){for(var a=0;23>a;a++)for(var c=0;31>c;c++){var d=0;15<c&&(d=1);var e=a;15<a&&(e-=15);e<<=4;e=15<c?e+(c-15):e+c;var f=r.memoryLocationTileDataSelectOneStart;15<a&&(f=r.memoryLocationTileDataSelectZeroStart);for(var g= |
||||
r.memoryLocationBackgroundPalette,n=-1,m=-1,h=0;8>h;h++)for(var k=0;5>k;k++){var p=4*(8*k+h),q=u(r.memoryLocationSpriteAttributesTable+p+2);e===q&&(p=u(r.memoryLocationSpriteAttributesTable+p+3),q=0,b.GBCEnabled&&l(3,p)&&(q=1),q===d&&(m=p,h=8,k=5,g=r.memoryLocationSpritePaletteOne,l(4,m)&&(g=r.memoryLocationSpritePaletteTwo)))}if(b.GBCEnabled&&0>m){h=r.memoryLocationTileMapSelectZeroStart;w.bgTileMapDisplaySelect&&(h=r.memoryLocationTileMapSelectOneStart);k=-1;for(p=0;32>p;p++)for(q=0;32>q;q++){var t= |
||||
h+32*q+p,v=T(t,0);e===v&&(k=t,q=p=32)}0<=k&&(n=T(k,1))}for(h=0;8>h;h++)rb(e,f,d,0,7,h,8*c,8*a+h,248,Jb,!1,g,n,m)}},drawOamToWasmMemory:function(){for(var a=0;8>a;a++)for(var c=0;5>c;c++){var d=4*(8*c+a);u(r.memoryLocationSpriteAttributesTable+d);u(r.memoryLocationSpriteAttributesTable+d+1);var e=u(r.memoryLocationSpriteAttributesTable+d+2),f=1;w.tallSpriteSize&&(1===e%2&&--e,f+=1);d=u(r.memoryLocationSpriteAttributesTable+d+3);var g=0;b.GBCEnabled&&l(3,d)&&(g=1);var h=r.memoryLocationSpritePaletteOne; |
||||
l(4,d)&&(h=r.memoryLocationSpritePaletteTwo);for(var k=0;k<f;k++)for(var m=0;8>m;m++)rb(e+k,r.memoryLocationTileDataSelectOneStart,g,0,7,m,8*a,16*c+m+8*k,64,pb,!1,h,-1,d)}},getDIV:function(){return t.dividerRegister},getTIMA:function(){return t.timerCounter},getTMA:function(){return t.timerModulo},getTAC:function(){var a=t.timerInputClock;t.timerEnabled&&(a|=4);return a},updateDebugGBMemory:function(){for(var a=0;65535>a;a++){var b=Bb(a);e[Kb+a]=b}W.reachedBreakpoint=!1}});return async()=>({instance:{exports:xc}, |
||||
byteMemory:eb.wasmByteMemory,type:"TypeScript"})}() |
||||
//# sourceMappingURL=getWasmBoyTsCore.closure.iife.js.map
|
||||
@ -0,0 +1,219 @@
|
||||
'use strict';(function(Qa,x){"object"===typeof exports&&"undefined"!==typeof module?module.exports=x():"function"===typeof define&&define.amd?define(x):Qa.WasmBoyTsCore=x()})(this,function(){function Qa(a,c){a=1<<a&255;b.registerF=0<c?b.registerF|a:b.registerF&(255^a);return b.registerF}function x(a){Qa(7,a)}function q(a){Qa(6,a)}function H(a){Qa(5,a)}function K(a){Qa(4,a)}function Ma(){return b.registerF>>7&1}function Q(){return b.registerF>>4&1}function N(a,c){0<=c?H(0!==((a&15)+(c&15)&16)):H((Math.abs(c)& |
||||
15)>(a&15))}function qb(a,c){0<=c?K(a>(a+c&255)):K(Math.abs(c)>a)}function Ra(a,c,b){b?(a=a^c^a+c,H(0!==(a&16)),K(0!==(a&256))):(b=a+c&65535,K(b<a),H(0!==((a^c^b)&4096)))}function Mb(a){switch(a){case 0:d.bgWhite=L.bgWhite;d.bgLightGrey=L.bgLightGrey;d.bgDarkGrey=L.bgDarkGrey;d.bgBlack=L.bgBlack;d.obj0White=L.obj0White;d.obj0LightGrey=L.obj0LightGrey;d.obj0DarkGrey=L.obj0DarkGrey;d.obj0Black=L.obj0Black;d.obj1White=L.obj1White;d.obj1LightGrey=L.obj1LightGrey;d.obj1DarkGrey=L.obj1DarkGrey;d.obj1Black= |
||||
L.obj1Black;break;case 1:d.bgWhite=ba.bgWhite;d.bgLightGrey=ba.bgLightGrey;d.bgDarkGrey=ba.bgDarkGrey;d.bgBlack=ba.bgBlack;d.obj0White=ba.obj0White;d.obj0LightGrey=ba.obj0LightGrey;d.obj0DarkGrey=ba.obj0DarkGrey;d.obj0Black=ba.obj0Black;d.obj1White=ba.obj1White;d.obj1LightGrey=ba.obj1LightGrey;d.obj1DarkGrey=ba.obj1DarkGrey;d.obj1Black=ba.obj1Black;break;case 2:d.bgWhite=ca.bgWhite;d.bgLightGrey=ca.bgLightGrey;d.bgDarkGrey=ca.bgDarkGrey;d.bgBlack=ca.bgBlack;d.obj0White=ca.obj0White;d.obj0LightGrey= |
||||
ca.obj0LightGrey;d.obj0DarkGrey=ca.obj0DarkGrey;d.obj0Black=ca.obj0Black;d.obj1White=ca.obj1White;d.obj1LightGrey=ca.obj1LightGrey;d.obj1DarkGrey=ca.obj1DarkGrey;d.obj1Black=ca.obj1Black;break;case 3:d.bgWhite=da.bgWhite;d.bgLightGrey=da.bgLightGrey;d.bgDarkGrey=da.bgDarkGrey;d.bgBlack=da.bgBlack;d.obj0White=da.obj0White;d.obj0LightGrey=da.obj0LightGrey;d.obj0DarkGrey=da.obj0DarkGrey;d.obj0Black=da.obj0Black;d.obj1White=da.obj1White;d.obj1LightGrey=da.obj1LightGrey;d.obj1DarkGrey=da.obj1DarkGrey; |
||||
d.obj1Black=da.obj1Black;break;case 4:d.bgWhite=ea.bgWhite;d.bgLightGrey=ea.bgLightGrey;d.bgDarkGrey=ea.bgDarkGrey;d.bgBlack=ea.bgBlack;d.obj0White=ea.obj0White;d.obj0LightGrey=ea.obj0LightGrey;d.obj0DarkGrey=ea.obj0DarkGrey;d.obj0Black=ea.obj0Black;d.obj1White=ea.obj1White;d.obj1LightGrey=ea.obj1LightGrey;d.obj1DarkGrey=ea.obj1DarkGrey;d.obj1Black=ea.obj1Black;break;case 5:d.bgWhite=fa.bgWhite;d.bgLightGrey=fa.bgLightGrey;d.bgDarkGrey=fa.bgDarkGrey;d.bgBlack=fa.bgBlack;d.obj0White=fa.obj0White;d.obj0LightGrey= |
||||
fa.obj0LightGrey;d.obj0DarkGrey=fa.obj0DarkGrey;d.obj0Black=fa.obj0Black;d.obj1White=fa.obj1White;d.obj1LightGrey=fa.obj1LightGrey;d.obj1DarkGrey=fa.obj1DarkGrey;d.obj1Black=fa.obj1Black;break;case 6:d.bgWhite=ha.bgWhite;d.bgLightGrey=ha.bgLightGrey;d.bgDarkGrey=ha.bgDarkGrey;d.bgBlack=ha.bgBlack;d.obj0White=ha.obj0White;d.obj0LightGrey=ha.obj0LightGrey;d.obj0DarkGrey=ha.obj0DarkGrey;d.obj0Black=ha.obj0Black;d.obj1White=ha.obj1White;d.obj1LightGrey=ha.obj1LightGrey;d.obj1DarkGrey=ha.obj1DarkGrey; |
||||
d.obj1Black=ha.obj1Black;break;case 7:d.bgWhite=ia.bgWhite;d.bgLightGrey=ia.bgLightGrey;d.bgDarkGrey=ia.bgDarkGrey;d.bgBlack=ia.bgBlack;d.obj0White=ia.obj0White;d.obj0LightGrey=ia.obj0LightGrey;d.obj0DarkGrey=ia.obj0DarkGrey;d.obj0Black=ia.obj0Black;d.obj1White=ia.obj1White;d.obj1LightGrey=ia.obj1LightGrey;d.obj1DarkGrey=ia.obj1DarkGrey;d.obj1Black=ia.obj1Black;break;case 8:d.bgWhite=ja.bgWhite;d.bgLightGrey=ja.bgLightGrey;d.bgDarkGrey=ja.bgDarkGrey;d.bgBlack=ja.bgBlack;d.obj0White=ja.obj0White;d.obj0LightGrey= |
||||
ja.obj0LightGrey;d.obj0DarkGrey=ja.obj0DarkGrey;d.obj0Black=ja.obj0Black;d.obj1White=ja.obj1White;d.obj1LightGrey=ja.obj1LightGrey;d.obj1DarkGrey=ja.obj1DarkGrey;d.obj1Black=ja.obj1Black;break;case 9:d.bgWhite=ka.bgWhite;d.bgLightGrey=ka.bgLightGrey;d.bgDarkGrey=ka.bgDarkGrey;d.bgBlack=ka.bgBlack;d.obj0White=ka.obj0White;d.obj0LightGrey=ka.obj0LightGrey;d.obj0DarkGrey=ka.obj0DarkGrey;d.obj0Black=ka.obj0Black;d.obj1White=ka.obj1White;d.obj1LightGrey=ka.obj1LightGrey;d.obj1DarkGrey=ka.obj1DarkGrey; |
||||
d.obj1Black=ka.obj1Black;break;case 10:d.bgWhite=la.bgWhite;d.bgLightGrey=la.bgLightGrey;d.bgDarkGrey=la.bgDarkGrey;d.bgBlack=la.bgBlack;d.obj0White=la.obj0White;d.obj0LightGrey=la.obj0LightGrey;d.obj0DarkGrey=la.obj0DarkGrey;d.obj0Black=la.obj0Black;d.obj1White=la.obj1White;d.obj1LightGrey=la.obj1LightGrey;d.obj1DarkGrey=la.obj1DarkGrey;d.obj1Black=la.obj1Black;break;case 11:d.bgWhite=ma.bgWhite;d.bgLightGrey=ma.bgLightGrey;d.bgDarkGrey=ma.bgDarkGrey;d.bgBlack=ma.bgBlack;d.obj0White=ma.obj0White; |
||||
d.obj0LightGrey=ma.obj0LightGrey;d.obj0DarkGrey=ma.obj0DarkGrey;d.obj0Black=ma.obj0Black;d.obj1White=ma.obj1White;d.obj1LightGrey=ma.obj1LightGrey;d.obj1DarkGrey=ma.obj1DarkGrey;d.obj1Black=ma.obj1Black;break;case 12:d.bgWhite=na.bgWhite,d.bgLightGrey=na.bgLightGrey,d.bgDarkGrey=na.bgDarkGrey,d.bgBlack=na.bgBlack,d.obj0White=na.obj0White,d.obj0LightGrey=na.obj0LightGrey,d.obj0DarkGrey=na.obj0DarkGrey,d.obj0Black=na.obj0Black,d.obj1White=na.obj1White,d.obj1LightGrey=na.obj1LightGrey,d.obj1DarkGrey= |
||||
na.obj1DarkGrey,d.obj1Black=na.obj1Black}}function p(a,c){return(a&255)<<8|c&255}function F(a){return(a&65280)>>8}function E(a,c){return c&~(1<<a)}function l(a,c){return 0!=(c&1<<a)}function gb(a,c){a=u(c)>>2*a&3;if(c===Ta.memoryLocationSpritePaletteOne)switch(c=d.obj0White,a){case 1:c=d.obj0LightGrey;break;case 2:c=d.obj0DarkGrey;break;case 3:c=d.obj0Black}else if(c===Ta.memoryLocationSpritePaletteTwo)switch(c=d.obj1White,a){case 1:c=d.obj1LightGrey;break;case 2:c=d.obj1DarkGrey;break;case 3:c=d.obj1Black}else switch(c= |
||||
d.bgWhite,a){case 1:c=d.bgLightGrey;break;case 2:c=d.bgDarkGrey;break;case 3:c=d.bgBlack}return c}function hb(a,c,b){c=8*a+2*c;a=Nb(c+1,b);b=Nb(c,b);return p(a,b)}function oa(a,c){a*=5;return 8*((c&31<<a)>>a)}function Nb(a,c){a&=63;c&&(a+=64);return e[Ua+a]}function ib(a,c,b,d){void 0===b&&(b=0);void 0===d&&(d=!1);b&=3;d&&(b|=4);e[Va+(160*c+a)]=b}function rb(a,c,d,J,z,f,k,m,h,g,n,p,t,w){var Sa=0;c=ab(c,a);a=T(c+2*f,d);d=T(c+2*f+1,d);for(f=J;f<=z;++f)if(c=k+(f-J),c<h){var O=f;if(0>t||!l(5,t))O=7-O; |
||||
var Pa=0;l(O,d)&&(Pa+=1,Pa<<=1);l(O,a)&&(Pa+=1);if(b.GBCEnabled&&(0<=t||0<=w)){O=0<=w;var aa=t&7;O&&(aa=w&7);var B=hb(aa,Pa,O);O=oa(0,B);aa=oa(1,B);B=oa(2,B)}else if(0>=p&&(p=r.memoryLocationBackgroundPalette),n){aa=Pa;B=n;void 0===B&&(B=!1);O=aa;B||(O=u(p)>>(aa<<1)&3);aa=242;switch(O){case 1:aa=160;break;case 2:aa=88;break;case 3:aa=8}aa=O=B=aa}else B=gb(Pa,p),O=(B&16711680)>>16,aa=(B&65280)>>8,B&=255;var sb=3*(m*h+c);e[g+sb+0]=O;e[g+sb+1]=aa;e[g+sb+2]=B;O=!1;0<=t&&(O=l(7,t));ib(c,m,Pa,O);Sa++}return Sa} |
||||
function ab(a,c){a===r.memoryLocationTileDataSelectZeroStart&&(c=l(7,c)?c-128:c+128);return a+16*c}function Ob(a,c){switch(a){case 1:return l(c,129);case 2:return l(c,135);case 3:return l(c,126);default:return l(c,1)}}function tb(){var a=y.sweepShadowFrequency,c=a>>y.NRx0SweepShift;y.NRx0Negate?(y.sweepNegateShouldDisableChannelOnClear=!0,c=a-c):c=a+c;return c}function jb(a){switch(a){case y.channelNumber:a=y.isDacEnabled;var c=g.channel1DacEnabled!==a;g.channel1DacEnabled=a;return c;case A.channelNumber:return a= |
||||
A.isDacEnabled,c=g.channel2DacEnabled!==a,g.channel2DacEnabled=a,c;case v.channelNumber:return a=v.isDacEnabled,c=g.channel3DacEnabled!==a,g.channel3DacEnabled=a,c;case D.channelNumber:return a=D.isDacEnabled,c=g.channel4DacEnabled!==a,g.channel4DacEnabled=a,c}return!1}function bb(){for(var a=m.batchProcessCycles(),c=m.currentCycles;c>=a;)Pb(a),c-=a;m.currentCycles=c}function Pb(a){var c=m.maxFrameSequenceCycles();var b=m.frameSequenceCycleCounter+a;if(b>=c){m.frameSequenceCycleCounter=b-c;c=m.frameSequencer+ |
||||
1&7;switch(c){case 0:y.updateLength();A.updateLength();v.updateLength();D.updateLength();break;case 2:y.updateLength();A.updateLength();v.updateLength();D.updateLength();y.updateSweep();break;case 4:y.updateLength();A.updateLength();v.updateLength();D.updateLength();break;case 6:y.updateLength();A.updateLength();v.updateLength();D.updateLength();y.updateSweep();break;case 7:y.updateEnvelope(),A.updateEnvelope(),D.updateEnvelope()}m.frameSequencer=c;c=!0}else m.frameSequenceCycleCounter=b,c=!1;if(M.audioAccumulateSamples&& |
||||
!c){c=y.willChannelUpdate(a)||jb(y.channelNumber);b=A.willChannelUpdate(a)||jb(A.channelNumber);var d=v.willChannelUpdate(a)||jb(v.channelNumber),e=D.willChannelUpdate(a)||jb(D.channelNumber);c&&(g.channel1Sample=y.getSampleFromCycleCounter());b&&(g.channel2Sample=A.getSampleFromCycleCounter());d&&(g.channel3Sample=v.getSampleFromCycleCounter());e&&(g.channel4Sample=D.getSampleFromCycleCounter());if(c||b||d||e)g.needToRemixSamples=!0;c=m.downSampleCycleCounter;c+=a;a=m.maxDownSampleCycles();c>=a&& |
||||
(c-=a,g.needToRemixSamples||g.mixerVolumeChanged||g.mixerEnabledChanged?Wa(g.channel1Sample,g.channel2Sample,g.channel3Sample,g.channel4Sample):m.downSampleCycleCounter=c,Xa(g.leftChannelSampleUnsignedByte+1,g.rightChannelSampleUnsignedByte+1,kb),a=m.audioQueueIndex+1,a>=(m.wasmBoyMemoryMaxBufferSize>>1|0)-1&&--a,m.audioQueueIndex=a);m.downSampleCycleCounter=c}else{c=y.getSample(a)|0;b=A.getSample(a)|0;d=v.getSample(a)|0;e=D.getSample(a)|0;g.channel1Sample=c;g.channel2Sample=b;g.channel3Sample=d; |
||||
g.channel4Sample=e;a=m.downSampleCycleCounter+a;if(a>=m.maxDownSampleCycles()){a-=m.maxDownSampleCycles();var f=Wa(c,b,d,e),l=F(f);Xa(l+1,(f&255)+1,kb);M.enableAudioDebugging&&(f=Wa(c,15,15,15),l=F(f),Xa(l+1,(f&255)+1,ub),f=Wa(15,b,15,15),l=F(f),Xa(l+1,(f&255)+1,vb),f=Wa(15,15,d,15),l=F(f),Xa(l+1,(f&255)+1,wb),f=Wa(15,15,15,e),l=F(f),Xa(l+1,(f&255)+1,xb));c=m.audioQueueIndex+1;c>=(m.wasmBoyMemoryMaxBufferSize>>1|0)-1&&--c;m.audioQueueIndex=c}m.downSampleCycleCounter=a}}function Qb(){return m.audioQueueIndex} |
||||
function Rb(){m.audioQueueIndex=0}function Wa(a,c,b,d){void 0===a&&(a=15);void 0===c&&(c=15);void 0===b&&(b=15);void 0===d&&(d=15);g.mixerVolumeChanged=!1;var e=0+(m.NR51IsChannel1EnabledOnLeftOutput?a:15);e+=m.NR51IsChannel2EnabledOnLeftOutput?c:15;e+=m.NR51IsChannel3EnabledOnLeftOutput?b:15;e+=m.NR51IsChannel4EnabledOnLeftOutput?d:15;a=0+(m.NR51IsChannel1EnabledOnRightOutput?a:15);a+=m.NR51IsChannel2EnabledOnRightOutput?c:15;a+=m.NR51IsChannel3EnabledOnRightOutput?b:15;a+=m.NR51IsChannel4EnabledOnRightOutput? |
||||
d:15;g.mixerEnabledChanged=!1;g.needToRemixSamples=!1;c=Sb(e,m.NR50LeftMixerVolume+1);b=Sb(a,m.NR50RightMixerVolume+1);g.leftChannelSampleUnsignedByte=c;g.rightChannelSampleUnsignedByte=b;return p(c,b)}function Sb(a,c){if(60===a)return 127;a=1E5*(a-60)*c>>3;a=(a/1E5|0)+60;a=1E5*a/(12E6/254|0)|0;return a|=0}function Xa(a,c,b){b+=m.audioQueueIndex<<1;e[b+0]=a+1;e[b+1]=c+1}function cc(a){switch(a){case y.memoryLocationNRx0:return a=u(y.memoryLocationNRx0),a|128;case A.memoryLocationNRx0:return a=u(A.memoryLocationNRx0), |
||||
a|255;case v.memoryLocationNRx0:return a=u(v.memoryLocationNRx0),a|127;case D.memoryLocationNRx0:return a=u(D.memoryLocationNRx0),a|255;case m.memoryLocationNR50:return a=u(m.memoryLocationNR50),a|0;case y.memoryLocationNRx1:return a=u(y.memoryLocationNRx1),a|63;case A.memoryLocationNRx1:return a=u(A.memoryLocationNRx1),a|63;case v.memoryLocationNRx1:return a=u(v.memoryLocationNRx1),a|255;case D.memoryLocationNRx1:return a=u(D.memoryLocationNRx1),a|255;case m.memoryLocationNR51:return a=u(m.memoryLocationNR51), |
||||
a|0;case y.memoryLocationNRx2:return a=u(y.memoryLocationNRx2),a|0;case A.memoryLocationNRx2:return a=u(A.memoryLocationNRx2),a|0;case v.memoryLocationNRx2:return a=u(v.memoryLocationNRx2),a|159;case D.memoryLocationNRx2:return a=u(D.memoryLocationNRx2),a|0;case m.memoryLocationNR52:return a=0,a=m.NR52IsSoundEnabled?a|128:E(7,a),a=y.isEnabled?a|1:E(0,a),a=A.isEnabled?a|2:E(1,a),a=v.isEnabled?a|4:E(2,a),a=D.isEnabled?a|8:E(3,a),a|112;case y.memoryLocationNRx3:return a=u(y.memoryLocationNRx3),a|255; |
||||
case A.memoryLocationNRx3:return a=u(A.memoryLocationNRx3),a|255;case v.memoryLocationNRx3:return a=u(v.memoryLocationNRx3),a|255;case D.memoryLocationNRx3:return a=u(D.memoryLocationNRx3),a|0;case y.memoryLocationNRx4:return a=u(y.memoryLocationNRx4),a|191;case A.memoryLocationNRx4:return a=u(A.memoryLocationNRx4),a|191;case v.memoryLocationNRx4:return a=u(v.memoryLocationNRx4),a|191;case D.memoryLocationNRx4:return a=u(D.memoryLocationNRx4),a|191}return-1}function cb(a){lb(!1);var c=u(n.memoryLocationInterruptRequest); |
||||
c=E(a,c);n.interruptsRequestedValue=c;f(n.memoryLocationInterruptRequest,c);b.stackPointer-=2;b.isHalted();c=b.stackPointer;var d=b.programCounter,e=F(d);f(c+0,d&255);f(c+1,e);switch(a){case n.bitPositionVBlankInterrupt:n.isVBlankInterruptRequested=!1;b.programCounter=64;break;case n.bitPositionLcdInterrupt:n.isLcdInterruptRequested=!1;b.programCounter=72;break;case n.bitPositionTimerInterrupt:n.isTimerInterruptRequested=!1;b.programCounter=80;break;case n.bitPositionSerialInterrupt:n.isSerialInterruptRequested= |
||||
!1;b.programCounter=88;break;case n.bitPositionJoypadInterrupt:n.isJoypadInterruptRequested=!1,b.programCounter=96}}function Ya(a){var c=u(n.memoryLocationInterruptRequest);c|=1<<a;n.interruptsRequestedValue=c;f(n.memoryLocationInterruptRequest,c)}function lb(a){a?n.masterInterruptSwitchDelay=!0:n.masterInterruptSwitch=!1}function yb(a){for(var c=0;c<a;){var b=t.dividerRegister,d=b;c+=4;d+=4;d&=65535;t.dividerRegister=d;if(t.timerEnabled){var e=t.timerCounterWasReset;t.timerCounterOverflowDelay?(t.timerCounter= |
||||
t.timerModulo,n.isTimerInterruptRequested=!0,Ya(n.bitPositionTimerInterrupt),t.timerCounterOverflowDelay=!1,t.timerCounterWasReset=!0):e&&(t.timerCounterWasReset=!1);Tb(b,d)&&zb()}}}function zb(){var a=t.timerCounter;255<++a&&(t.timerCounterOverflowDelay=!0,a=0);t.timerCounter=a}function Tb(a,c){var b=Ab(t.timerInputClock);return l(b,a)&&!l(b,c)}function Ab(a){switch(a){case 0:return 9;case 1:return 3;case 2:return 5;case 3:return 7}return 0}function Na(a){var c=b.isStopped=!1;dc(a)||(c=!0);Ca(a, |
||||
!0);c&&(c=!1,3>=a&&(c=!0),a=!1,C.isDpadType&&c&&(a=!0),C.isButtonType&&!c&&(a=!0),a&&(n.isJoypadInterruptRequested=!0,Ya(n.bitPositionJoypadInterrupt)))}function dc(a){switch(a){case 0:return C.up;case 1:return C.right;case 2:return C.down;case 3:return C.left;case 4:return C.a;case 5:return C.b;case 6:return C.select;case 7:return C.start;default:return!1}}function Ca(a,c){switch(a){case 0:C.up=c;break;case 1:C.right=c;break;case 2:C.down=c;break;case 3:C.left=c;break;case 4:C.a=c;break;case 5:C.b= |
||||
c;break;case 6:C.select=c;break;case 7:C.start=c}}function Ub(a,c,d){for(var e=0;e<d;++e){for(var Sa=Bb(a+e),f=c+e;40959<f;)f-=8192;Cb(f,Sa)}k.DMACycles+=(32<<b.GBCDoubleSpeed)*(d>>4)}function Db(a,c){if(a===b.memoryLocationSpeedSwitch)return f(b.memoryLocationSpeedSwitch,c&1),!1;if(b.BootROMEnabled&&a===b.memoryLocationBootROMSwitch)return b.BootROMEnabled=!1,b.programCounter=255,!0;var d=k.videoRamLocation,J=k.spriteInformationTableLocation;if(a<d){if(!k.isRomOnly){d=k.isMBC1;var z=k.isMBC2;if(8191>= |
||||
a){if(!z||l(4,c))c&=15,0===c?k.isRamBankingEnabled=!1:10===c&&(k.isRamBankingEnabled=!0)}else 16383>=a?(J=k.isMBC5,!J||12287>=a?(a=k.currentRomBank,z&&(a=c&15),d?(c&=31,a&=224):k.isMBC3?(c&=127,a&=128):J&&(a&=0),k.currentRomBank=a|c):k.currentRomBank=p(0<c,k.currentRomBank&255)):!z&&24575>=a?d&&k.isMBC1RomModeEnabled?(a=k.currentRomBank&31,k.currentRomBank=a|c&224):(c=k.isMBC5?c&15:c&3,k.currentRamBank=c):!z&&32767>=a&&d&&(k.isMBC1RomModeEnabled=l(0,c))}return!1}if(a>=d&&a<k.cartridgeRamLocation)return!0; |
||||
if(a>=k.echoRamLocation&&a<J)return f(a-8192,c),!0;if(a>=J&&a<=k.spriteInformationTableLocationEnd)return 2<=w.currentLcdMode;if(a>=k.unusableMemoryLocation&&a<=k.unusableMemoryEndLocation)return!1;if(a===V.memoryLocationSerialTransferControl)return V.updateTransferControl(c);if(65296<=a&&65318>=a){bb();if(a===m.memoryLocationNR52||m.NR52IsSoundEnabled){switch(a){case y.memoryLocationNRx0:y.updateNRx0(c);break;case v.memoryLocationNRx0:v.updateNRx0(c);break;case y.memoryLocationNRx1:y.updateNRx1(c); |
||||
break;case A.memoryLocationNRx1:A.updateNRx1(c);break;case v.memoryLocationNRx1:v.updateNRx1(c);break;case D.memoryLocationNRx1:D.updateNRx1(c);break;case y.memoryLocationNRx2:y.updateNRx2(c);break;case A.memoryLocationNRx2:A.updateNRx2(c);break;case v.memoryLocationNRx2:v.volumeCodeChanged=!0;v.updateNRx2(c);break;case D.memoryLocationNRx2:D.updateNRx2(c);break;case y.memoryLocationNRx3:y.updateNRx3(c);break;case A.memoryLocationNRx3:A.updateNRx3(c);break;case v.memoryLocationNRx3:v.updateNRx3(c); |
||||
break;case D.memoryLocationNRx3:D.updateNRx3(c);break;case y.memoryLocationNRx4:y.updateNRx4(c);break;case A.memoryLocationNRx4:A.updateNRx4(c);break;case v.memoryLocationNRx4:v.updateNRx4(c);break;case D.memoryLocationNRx4:D.updateNRx4(c);break;case m.memoryLocationNR50:m.updateNR50(c);g.mixerVolumeChanged=!0;break;case m.memoryLocationNR51:m.updateNR51(c);g.mixerEnabledChanged=!0;break;case m.memoryLocationNR52:a=m.NR52IsSoundEnabled;!a&&l(7,c)&&(m.frameSequencer=7,y.waveFormPositionOnDuty=0,A.waveFormPositionOnDuty= |
||||
0);if(a&&!l(7,c))for(a=65296;65318>a;++a)Cb(a,0);m.updateNR52(c)}c=!0}else c=!1;return c}if(65328<=a&&65343>=a)return bb(),v.isEnabled?(v.handleWaveRamWrite(c),!1):!0;if(a>=w.memoryLocationLcdControl&&a<=r.memoryLocationWindowX){if(a===w.memoryLocationLcdControl)return w.updateLcdControl(c),!0;if(a===w.memoryLocationLcdStatus)return w.updateLcdStatus(c),!1;if(a===r.memoryLocationScanlineRegister)return r.scanlineRegister=0,f(a,0),!1;if(a===w.memoryLocationCoincidenceCompare)return w.coincidenceCompare= |
||||
c,!0;if(a===r.memoryLocationDmaTransfer){c<<=8;for(a=0;159>=a;++a)d=u(c+a),f(k.spriteInformationTableLocation+a,d);k.DMACycles=644;return!0}switch(a){case r.memoryLocationScrollX:r.scrollX=c;break;case r.memoryLocationScrollY:r.scrollY=c;break;case r.memoryLocationWindowX:r.windowX=c;break;case r.memoryLocationWindowY:r.windowY=c}return!0}if(a===k.memoryLocationHdmaTrigger)return b.GBCEnabled&&(k.isHblankHdmaActive&&!l(7,c)?(k.isHblankHdmaActive=!1,c=u(k.memoryLocationHdmaTrigger),f(k.memoryLocationHdmaTrigger, |
||||
c|128)):(a=u(k.memoryLocationHdmaSourceHigh),d=u(k.memoryLocationHdmaSourceLow),a=p(a,d)&65520,d=u(k.memoryLocationHdmaDestinationHigh),J=u(k.memoryLocationHdmaDestinationLow),d=p(d,J),d=(d&8176)+k.videoRamLocation,J=E(7,c),J=J+1<<4,l(7,c)?(k.isHblankHdmaActive=!0,k.hblankHdmaTransferLengthRemaining=J,k.hblankHdmaSource=a,k.hblankHdmaDestination=d,f(k.memoryLocationHdmaTrigger,E(7,c))):(Ub(a,d,J),f(k.memoryLocationHdmaTrigger,255)))),!1;if((a===k.memoryLocationGBCWRAMBank||a===k.memoryLocationGBCVRAMBank)&& |
||||
k.isHblankHdmaActive&&(d=k.hblankHdmaSource,16384<=d&&32767>=d||53248<=d&&57343>=d))return!1;if(a>=Ta.memoryLocationBackgroundPaletteIndex&&a<=Ta.memoryLocationSpritePaletteData){d=Ta.memoryLocationSpritePaletteData;if(a===Ta.memoryLocationBackgroundPaletteData||a===d)J=u(a-1),J=E(6,J),z=J&63,a===d&&(z+=64),e[Ua+z]=c,c=J,--a,l(7,c)&&f(a,c+1|128);return!0}if(a>=t.memoryLocationDividerRegister&&a<=t.memoryLocationTimerControl){yb(t.currentCycles);t.currentCycles=0;switch(a){case t.memoryLocationDividerRegister:return t.updateDividerRegister(), |
||||
!1;case t.memoryLocationTimerCounter:t.updateTimerCounter(c);break;case t.memoryLocationTimerModulo:t.updateTimerModulo(c);break;case t.memoryLocationTimerControl:t.updateTimerControl(c)}return!0}a===C.memoryLocationJoypadRegister&&C.updateJoypad(c);if(a===n.memoryLocationInterruptRequest)return n.updateInterruptRequested(c),!0;a===n.memoryLocationInterruptEnabled&&n.updateInterruptEnabled(c);return!0}function Eb(a){switch(a>>12){case 0:if(b.BootROMEnabled)if(b.GBCEnabled){if(256>a||511<a&&2304>a)return a+ |
||||
mb}else if(!b.GBCEnabled&&256>a)return a+mb;case 1:case 2:case 3:return a+nb;case 4:case 5:case 6:case 7:var c=k.currentRomBank;k.isMBC5||0!==c||(c=1);return 16384*c+(a-k.switchableCartridgeRomLocation)+nb;case 8:case 9:return c=0,b.GBCEnabled&&(c=u(k.memoryLocationGBCVRAMBank)&1),a-k.videoRamLocation+2048+8192*c;case 10:case 11:return 8192*k.currentRamBank+(a-k.cartridgeRamLocation)+Fb;case 12:return a-k.internalRamBankZeroLocation+18432;case 13:return c=0,b.GBCEnabled&&(c=u(k.memoryLocationGBCWRAMBank)& |
||||
7),a-k.internalRamBankZeroLocation+18432+4096*((1>c?1:c)-1);default:return a-k.echoRamLocation+51200}}function f(a,c){a=Eb(a);e[a]=c}function Cb(a,c){a===W.writeGbMemory&&(W.reachedBreakpoint=!0);Db(a,c)&&f(a,c)}function Vb(a){r.scanlineCycleCounter=0;r.scanlineRegister=0;f(r.memoryLocationScanlineRegister,0);var c=u(w.memoryLocationLcdStatus);c=E(1,c);c=E(0,c);w.currentLcdMode=0;f(w.memoryLocationLcdStatus,c);if(a)for(a=0;93184>a;++a)e[Za+a]=255}function Wb(a,c){0!==a&&1!==a||r.scanlineRegister!== |
||||
w.coincidenceCompare?c=E(2,c):(c|=4,l(6,c)&&(n.isLcdInterruptRequested=!0,Ya(n.bitPositionLcdInterrupt)));return c}function Xb(a,c,d,J,f,k){for(var Sa=J>>3;160>f;++f){var z=f+k;256<=z&&(z-=256);var m=d+(Sa<<5)+(z>>3),h=T(m,0),g=!1;if(M.tileCaching){var n=f;var p=a,t=z,w=m,v=h,B=0,q=$a.nextXIndexToPerformCacheCheck;if(0<p&&8<n&&v===$a.tileId&&n===q){v=l(5,u(w-1));w=l(5,u(w));for(var x=0;8>x;++x){v!==w&&(x=7-x);var y=n+x;if(160>=y){var A=n-(8-x),C=Za+3*(160*p+y);Y(y,p,0,e[C]);Y(y,p,1,e[C]);Y(y,p,2, |
||||
e[C]);A=e[Va+(160*p+A)];ib(y,p,E(2,A),l(2,A));B++}}}else $a.tileId=v;n>=q&&(q=n+8,p=t&7|0,n<p&&(q+=p));$a.nextXIndexToPerformCacheCheck=q;n=B;0<n&&(f+=n-1,g=!0)}M.tileRendering&&!g?(g=f,n=a,p=z,z=c,B=J&7|0,q=0,0==g&&(q=p-(p>>3<<3)),p=7,160<g+8&&(p=160-g),t=-1,v=0,b.GBCEnabled&&(t=T(m,1),v=l(3,t)|0,l(6,t)&&(B=7-B)),n=rb(h,z,v,q,p,B,g,n,160,Za,!1,0,t,-1),0<n&&(f+=n-1)):g||(b.GBCEnabled?(g=f,n=a,q=J,B=ab(c,h),h=T(m,1),q=q&7|0,l(6,h)&&(q=7-q),p=l(3,h)|0,m=T(B+2*q,p),B=T(B+2*q+1,p),q=z&7|0,l(5,h)||(q= |
||||
7-q),z=0,l(q,B)&&(z=z+1<<1),l(q,m)&&(z+=1),q=hb(h&7,z,!1),m=oa(0,q),B=oa(1,q),q=oa(2,q),Y(g,n,0,m),Y(g,n,1,B),Y(g,n,2,q),ib(g,n,z,l(7,h))):(m=f,g=a,B=J,n=ab(c,h),B=B&7|0,h=T(n+2*B,0),n=T(n+2*B+1,0),B=z&7|0,B=7-B,z=0,l(B,n)&&(z=z+1<<1),l(B,h)&&(z+=1),h=gb(z,r.memoryLocationBackgroundPalette),Y(m,g,0,(h&16711680)>>16),Y(m,g,1,(h&65280)>>8),Y(m,g,2,h&255),ib(m,g,z)))}}function Yb(a){if(w.enabled)for(r.scanlineCycleCounter+=a,a=M.graphicsDisableScanlineRendering;r.scanlineCycleCounter>=r.MAX_CYCLES_PER_SCANLINE();){r.scanlineCycleCounter-= |
||||
r.MAX_CYCLES_PER_SCANLINE();var c=r.scanlineRegister;if(144===c){if(a)for(var b=0;144>=b;++b)Gb(b);else Gb(c);for(b=0;144>b;++b)for(var d=0;160>d;++d)e[Va+(160*b+d)]=0;$a.tileId=-1;$a.nextXIndexToPerformCacheCheck=-1}else 144>c&&(a||Gb(c));c=153<c?0:c+1;r.scanlineRegister=c}if(w.enabled){c=r.scanlineRegister;b=w.currentLcdMode;a=0;if(144<=c)a=1;else{d=r.scanlineCycleCounter;var z=r.MIN_CYCLES_SPRITES_LCD_MODE();d>=z?a=2:d>=z&&(a=3)}if(b!==a){c=u(w.memoryLocationLcdStatus);w.currentLcdMode=a;b=!1; |
||||
switch(a){case 0:c=E(0,c);c=E(1,c);b=l(3,c);break;case 1:c=E(1,c);c|=1;b=l(4,c);break;case 2:c=E(0,c);c|=2;b=l(5,c);break;case 3:c|=3}b&&(n.isLcdInterruptRequested=!0,Ya(n.bitPositionLcdInterrupt));0===a&&k.isHblankHdmaActive&&(d=16,b=k.hblankHdmaTransferLengthRemaining,b<d&&(d=b),Ub(k.hblankHdmaSource,k.hblankHdmaDestination,d),k.hblankHdmaSource+=d,k.hblankHdmaDestination+=d,b-=d,k.hblankHdmaTransferLengthRemaining=b,d=k.memoryLocationHdmaTrigger,0>=b?(k.isHblankHdmaActive=!1,f(d,255)):f(d,E(7, |
||||
(b>>4)-1)));1===a&&(n.isVBlankInterruptRequested=!0,Ya(n.bitPositionVBlankInterrupt));c=Wb(a,c);f(w.memoryLocationLcdStatus,c)}else 153===c&&(c=u(w.memoryLocationLcdStatus),c=Wb(a,c),f(w.memoryLocationLcdStatus,c))}}function Gb(a){var c=r.memoryLocationTileDataSelectZeroStart;w.bgWindowTileDataSelect&&(c=r.memoryLocationTileDataSelectOneStart);if(b.GBCEnabled||w.bgDisplayEnabled){var d=r.memoryLocationTileMapSelectZeroStart;w.bgTileMapDisplaySelect&&(d=r.memoryLocationTileMapSelectOneStart);Xb(a, |
||||
c,d,a+r.scrollY&255,0,r.scrollX)}if(w.windowDisplayEnabled){d=r.memoryLocationTileMapSelectZeroStart;w.windowTileMapDisplaySelect&&(d=r.memoryLocationTileMapSelectOneStart);var f=r.windowX,z=r.windowY;a<z||(f-=7,Xb(a,c,d,a-z,f,-f|0))}if(w.spriteDisplayEnable)for(c=w.tallSpriteSize,d=39;0<=d;--d){z=4*d;var m=r.memoryLocationSpriteAttributesTable+z,k=u(m+0);f=u(m+1);var h=u(m+2);k-=16;f-=8;var n=8;c&&(n=16,h-=h&1);if(a>=k&&a<k+n){z=u(r.memoryLocationSpriteAttributesTable+z+3);m=l(7,z);var g=l(6,z), |
||||
p=l(5,z);k=a-k;g&&(k=n-k,--k);k<<=1;h=ab(r.memoryLocationTileDataSelectOneStart,h);h+=k;n=b.GBCEnabled&&l(3,z);k=T(h+0,n);h=T(h+1,n);for(n=7;0<=n;--n){g=n;p&&(g-=7,g=-g);var q=0;l(g,h)&&(q=q+1<<1);l(g,k)&&(q+=1);if(0!==q&&(g=f+(7-n),0<=g&&160>=g)){var t=b.GBCEnabled&&!w.bgDisplayEnabled,v=!1,x=!1;if(!t){var y=e[Va+(160*a+g)],A=y&3;m&&0<A?v=!0:b.GBCEnabled&&l(2,y)&&0<A&&(x=!0)}if(t||!v&&!x)b.GBCEnabled?(v=hb(z&7,q,!0),q=oa(0,v),t=oa(1,v),v=oa(2,v),Y(g,a,0,q),Y(g,a,1,t),Y(g,a,2,v)):(t=r.memoryLocationSpritePaletteOne, |
||||
l(4,z)&&(t=r.memoryLocationSpritePaletteTwo),q=gb(q,t),Y(g,a,0,(q&16711680)>>16),Y(g,a,1,(q&65280)>>8),Y(g,a,2,q&255))}}}}}function Y(a,b,d,f){e[Za+3*(160*b+a)+d]=f}function T(a,b){return e[a-k.videoRamLocation+2048+8192*(b&1)]}function Hb(a){var c=k.videoRamLocation;return a<c||a>=c&&a<k.cartridgeRamLocation?-1:a>=k.echoRamLocation&&a<k.spriteInformationTableLocation?u(a-8192):a>=k.spriteInformationTableLocation&&a<=k.spriteInformationTableLocationEnd?2>w.currentLcdMode?255:-1:a===b.memoryLocationSpeedSwitch? |
||||
(a=255,c=u(b.memoryLocationSpeedSwitch),l(0,c)||(a=E(0,a)),b.GBCDoubleSpeed||(a=E(7,a)),a):a===r.memoryLocationScanlineRegister?(f(a,r.scanlineRegister),r.scanlineRegister):65296<=a&&65318>=a?(bb(),cc(a)):65319<=a&&65327>=a?255:65328<=a&&65343>=a?(bb(),v.isEnabled?v.handleWaveRamRead():-1):a===t.memoryLocationDividerRegister?(c=F(t.dividerRegister),f(a,c),c):a===t.memoryLocationTimerCounter?(f(a,t.timerCounter),t.timerCounter):a===n.memoryLocationInterruptRequest?224|n.interruptsRequestedValue:a=== |
||||
C.memoryLocationJoypadRegister?(a=C.joypadRegisterFlipped,C.isDpadType?(a=C.up?E(2,a):a|4,a=C.right?E(0,a):a|1,a=C.down?E(3,a):a|8,a=C.left?E(1,a):a|2):C.isButtonType&&(a=C.a?E(0,a):a|1,a=C.b?E(1,a):a|2,a=C.select?E(2,a):a|4,a=C.start?E(3,a):a|8),a|240):-1}function u(a){return e[Eb(a)]}function Bb(a){a===W.readGbMemory&&(W.reachedBreakpoint=!0);var b=Hb(a);return-1===b?u(a):b}function h(a){return 0<e[a]}function Da(a){var c=b.registerA;N(c,a);qb(c,a);c=c+a&255;b.registerA=c;x(0===c);q(0)}function Ea(a){var c= |
||||
b.registerA,d=c+a+Q()&255;H(0!=((c^a^d)&16));a=c+a+Q()&65535;K(0<(a&256));b.registerA=d;x(0===d);q(0)}function Fa(a){var c=-1*a;var d=b.registerA;N(d,c);qb(d,c);d=d-a&255;b.registerA=d;x(0===d);q(1)}function Ga(a){var c=b.registerA,d=c-a-Q()&255;H(0!=((c^a^d)&16));a=c-a-Q()&65535;K(0<(a&256));b.registerA=d;x(0===d);q(1)}function Ha(a){a&=b.registerA;b.registerA=a;x(0===a);q(0);H(1);K(0)}function Ia(a){a=(b.registerA^a)&255;b.registerA=a;x(0===a);q(0);H(0);K(0)}function Ja(a){a|=b.registerA;b.registerA= |
||||
a;x(0===a);q(0);H(0);K(0)}function Ka(a){var c=b.registerA;a*=-1;N(c,a);qb(c,a);x(0===c+a);q(1)}function Oa(a,b){x(0===(b&1<<a));q(0);H(1);return b}function X(a,b,d){return 0<b?d|1<<a:d&~(1<<a)}function db(a){var c=b.programCounter;c=(c+(a<<24>>24)&65535)+1&65535;b.programCounter=c}function Zb(a){var c=b.programCounter;c=c+1&65535;b.isHaltBug&&(c=c-1&65535);b.programCounter=c;switch((a&240)>>4){case 0:return ec(a);case 1:return fc(a);case 2:return gc(a);case 3:return hc(a);case 4:return ic(a);case 5:return jc(a); |
||||
case 6:return kc(a);case 7:return lc(a);case 8:return mc(a);case 9:return nc(a);case 10:return oc(a);case 11:return pc(a);case 12:return qc(a);case 13:return rc(a);case 14:return sc(a);default:return tc(a)}}function I(a){La(4);return Bb(a)}function P(a,b){La(4);Cb(a,b)}function Ba(a){La(8);var b=Hb(a);b=-1===b?u(a):b;a+=1;var d=Hb(a);a=-1===d?u(a):d;return p(a,b)}function R(a,b){La(8);var c=F(b);b&=255;Db(a,b)&&f(a,b);a+=1;Db(a,c)&&f(a,c)}function G(){La(4);return u(b.programCounter)}function U(){La(4); |
||||
var a=u(b.programCounter+1&65535);return p(a,G())}function ec(a){switch(a){case 0:return 4;case 1:return a=U(),b.registerB=F(a),b.registerC=a&255,b.programCounter=b.programCounter+2&65535,4;case 2:return P(p(b.registerB,b.registerC),b.registerA),4;case 3:return a=p(b.registerB,b.registerC),a++,b.registerB=F(a),b.registerC=a&255,8;case 4:return a=b.registerB,N(a,1),a=a+1&255,b.registerB=a,x(0===a),q(0),4;case 5:return a=b.registerB,N(a,-1),a=a-1&255,b.registerB=a,x(0===a),q(1),4;case 6:return b.registerB= |
||||
G(),b.programCounter=b.programCounter+1&65535,4;case 7:return a=b.registerA,K(128===(a&128)),b.registerA=(a<<1|a>>7)&255,x(0),q(0),H(0),4;case 8:return R(U(),b.stackPointer),b.programCounter=b.programCounter+2&65535,4;case 9:a=p(b.registerH,b.registerL);var c=p(b.registerB,b.registerC);Ra(a,c,!1);a=a+c&65535;b.registerH=F(a);b.registerL=a&255;q(0);return 8;case 10:return b.registerA=I(p(b.registerB,b.registerC)),4;case 11:return a=p(b.registerB,b.registerC),a=a-1&65535,b.registerB=F(a),b.registerC= |
||||
a&255,8;case 12:return a=b.registerC,N(a,1),a=a+1&255,b.registerC=a,x(0===a),q(0),4;case 13:return a=b.registerC,N(a,-1),a=a-1&255,b.registerC=a,x(0===a),q(1),4;case 14:return b.registerC=G(),b.programCounter=b.programCounter+1&65535,4;case 15:return a=b.registerA,K(0<(a&1)),b.registerA=(a>>1|a<<7)&255,x(0),q(0),H(0),4}return-1}function fc(a){switch(a){case 16:if(b.GBCEnabled&&(a=I(b.memoryLocationSpeedSwitch),l(0,a)))return a=E(0,a),l(7,a)?(b.GBCDoubleSpeed=!1,a=E(7,a)):(b.GBCDoubleSpeed=!0,a|=128), |
||||
P(b.memoryLocationSpeedSwitch,a),68;b.isStopped=!0;b.programCounter=b.programCounter+1&65535;return 4;case 17:return a=U(),b.registerD=F(a),b.registerE=a&255,b.programCounter=b.programCounter+2&65535,4;case 18:return P(p(b.registerD,b.registerE),b.registerA),4;case 19:return a=p(b.registerD,b.registerE),a=a+1&65535,b.registerD=F(a),b.registerE=a&255,8;case 20:return a=b.registerD,N(a,1),b.registerD=a+1&255,x(0===b.registerD),q(0),4;case 21:return a=b.registerD,N(a,-1),b.registerD=a-1&255,x(0===b.registerD), |
||||
q(1),4;case 22:return b.registerD=G(),b.programCounter=b.programCounter+1&65535,4;case 23:return a=128===(b.registerA&128),b.registerA=(b.registerA<<1|Q())&255,K(a),x(0),q(0),H(0),4;case 24:return db(G()),8;case 25:a=p(b.registerH,b.registerL);var c=p(b.registerD,b.registerE);Ra(a,c,!1);a=a+c&65535;b.registerH=F(a);b.registerL=a&255;q(0);return 8;case 26:return a=p(b.registerD,b.registerE),b.registerA=I(a),4;case 27:return a=p(b.registerD,b.registerE),a=a-1&65535,b.registerD=F(a),b.registerE=a&255, |
||||
8;case 28:return a=b.registerE,N(a,1),a=a+1&255,b.registerE=a,x(0===a),q(0),4;case 29:return a=b.registerE,N(a,-1),a=a-1&255,b.registerE=a,x(0===a),q(1),4;case 30:return b.registerE=G(),b.programCounter=b.programCounter+1&65535,4;case 31:return a=1===(b.registerA&1),b.registerA=(b.registerA>>1|Q()<<7)&255,K(a),x(0),q(0),H(0),4}return-1}function gc(a){switch(a){case 32:return 0===Ma()?db(G()):b.programCounter=b.programCounter+1&65535,8;case 33:return a=U(),b.registerH=F(a),b.registerL=a&255,b.programCounter= |
||||
b.programCounter+2&65535,4;case 34:return a=p(b.registerH,b.registerL),P(a,b.registerA),a=a+1&65535,b.registerH=F(a),b.registerL=a&255,4;case 35:return a=p(b.registerH,b.registerL),a=a+1&65535,b.registerH=F(a),b.registerL=a&255,8;case 36:return a=b.registerH,N(a,1),a=a+1&255,b.registerH=a,x(0===a),q(0),4;case 37:return a=b.registerH,N(a,-1),a=a-1&255,b.registerH=a,x(0===a),q(1),4;case 38:return b.registerH=G(),b.programCounter=b.programCounter+1&65535,4;case 39:a=0;0<(b.registerF>>5&1)&&(a|=6);0< |
||||
Q()&&(a|=96);var c=b.registerA;0<(b.registerF>>6&1)?c=c-a&255:(9<(c&15)&&(a|=6),153<c&&(a|=96),c=c+a&255);x(0===c);K(0!==(a&96));H(0);b.registerA=c;return 4;case 40:return 0<Ma()?db(G()):b.programCounter=b.programCounter+1&65535,8;case 41:return a=p(b.registerH,b.registerL),Ra(a,a,!1),a=2*a&65535,b.registerH=F(a),b.registerL=a&255,q(0),8;case 42:return a=p(b.registerH,b.registerL),b.registerA=I(a),a=a+1&65535,b.registerH=F(a),b.registerL=a&255,4;case 43:return a=p(b.registerH,b.registerL),a=a-1&65535, |
||||
b.registerH=F(a),b.registerL=a&255,8;case 44:return a=b.registerL,N(a,1),a=a+1&255,b.registerL=a,x(0===a),q(0),4;case 45:return a=b.registerL,N(a,-1),a=a-1&255,b.registerL=a,x(0===a),q(1),4;case 46:return b.registerL=G(),b.programCounter=b.programCounter+1&65535,4;case 47:return b.registerA=~b.registerA,q(1),H(1),4}return-1}function hc(a){switch(a){case 48:return 0===Q()?db(G()):b.programCounter=b.programCounter+1&65535,8;case 49:return b.stackPointer=U(),b.programCounter=b.programCounter+2&65535, |
||||
4;case 50:return a=p(b.registerH,b.registerL),P(a,b.registerA),a=a-1&65535,b.registerH=F(a),b.registerL=a&255,4;case 51:return b.stackPointer=b.stackPointer+1&65535,8;case 52:a=p(b.registerH,b.registerL);var c=I(a);N(c,1);c=c+1&255;x(0===c);q(0);P(a,c);return 4;case 53:return a=p(b.registerH,b.registerL),c=I(a),N(c,-1),c=c-1&255,x(0===c),q(1),P(a,c),4;case 54:return P(p(b.registerH,b.registerL),G()),b.programCounter=b.programCounter+1&65535,4;case 55:return q(0),H(0),K(1),4;case 56:return 1===Q()? |
||||
db(G()):b.programCounter=b.programCounter+1&65535,8;case 57:return a=p(b.registerH,b.registerL),Ra(a,b.stackPointer,!1),a=a+b.stackPointer&65535,b.registerH=F(a),b.registerL=a&255,q(0),8;case 58:return a=p(b.registerH,b.registerL),b.registerA=I(a),a=a-1&65535,b.registerH=F(a),b.registerL=a&255,4;case 59:return b.stackPointer=b.stackPointer-1&65535,8;case 60:return a=b.registerA,N(a,1),a=a+1&255,b.registerA=a,x(0===a),q(0),4;case 61:return a=b.registerA,N(a,-1),a=a-1&255,b.registerA=a,x(0===a),q(1), |
||||
4;case 62:return b.registerA=G(),b.programCounter=b.programCounter+1&65535,4;case 63:return q(0),H(0),K(0>=Q()),4}return-1}function ic(a){switch(a){case 64:return 4;case 65:return b.registerB=b.registerC,4;case 66:return b.registerB=b.registerD,4;case 67:return b.registerB=b.registerE,4;case 68:return b.registerB=b.registerH,4;case 69:return b.registerB=b.registerL,4;case 70:return b.registerB=I(p(b.registerH,b.registerL)),4;case 71:return b.registerB=b.registerA,4;case 72:return b.registerC=b.registerB, |
||||
4;case 73:return 4;case 74:return b.registerC=b.registerD,4;case 75:return b.registerC=b.registerE,4;case 76:return b.registerC=b.registerH,4;case 77:return b.registerC=b.registerL,4;case 78:return b.registerC=I(p(b.registerH,b.registerL)),4;case 79:return b.registerC=b.registerA,4}return-1}function jc(a){switch(a){case 80:return b.registerD=b.registerB,4;case 81:return b.registerD=b.registerC,4;case 82:return 4;case 83:return b.registerD=b.registerE,4;case 84:return b.registerD=b.registerH,4;case 85:return b.registerD= |
||||
b.registerL,4;case 86:return b.registerD=I(p(b.registerH,b.registerL)),4;case 87:return b.registerD=b.registerA,4;case 88:return b.registerE=b.registerB,4;case 89:return b.registerE=b.registerC,4;case 90:return b.registerE=b.registerD,4;case 91:return 4;case 92:return b.registerE=b.registerH,4;case 93:return b.registerE=b.registerL,4;case 94:return b.registerE=I(p(b.registerH,b.registerL)),4;case 95:return b.registerE=b.registerA,4}return-1}function kc(a){switch(a){case 96:return b.registerH=b.registerB, |
||||
4;case 97:return b.registerH=b.registerC,4;case 98:return b.registerH=b.registerD,4;case 99:return b.registerH=b.registerE,4;case 100:return b.registerH=b.registerH,4;case 101:return b.registerH=b.registerL,4;case 102:return b.registerH=I(p(b.registerH,b.registerL)),4;case 103:return b.registerH=b.registerA,4;case 104:return b.registerL=b.registerB,4;case 105:return b.registerL=b.registerC,4;case 106:return b.registerL=b.registerD,4;case 107:return b.registerL=b.registerE,4;case 108:return b.registerL= |
||||
b.registerH,4;case 109:return b.registerL=b.registerL,4;case 110:return b.registerL=I(p(b.registerH,b.registerL)),4;case 111:return b.registerL=b.registerA,4}return-1}function lc(a){switch(a){case 112:return P(p(b.registerH,b.registerL),b.registerB),4;case 113:return P(p(b.registerH,b.registerL),b.registerC),4;case 114:return P(p(b.registerH,b.registerL),b.registerD),4;case 115:return P(p(b.registerH,b.registerL),b.registerE),4;case 116:return P(p(b.registerH,b.registerL),b.registerH),4;case 117:return P(p(b.registerH, |
||||
b.registerL),b.registerL),4;case 118:return k.isHblankHdmaActive||b.enableHalt(),4;case 119:return P(p(b.registerH,b.registerL),b.registerA),4;case 120:return b.registerA=b.registerB,4;case 121:return b.registerA=b.registerC,4;case 122:return b.registerA=b.registerD,4;case 123:return b.registerA=b.registerE,4;case 124:return b.registerA=b.registerH,4;case 125:return b.registerA=b.registerL,4;case 126:return b.registerA=I(p(b.registerH,b.registerL)),4;case 127:return 4}return-1}function mc(a){switch(a){case 128:return Da(b.registerB), |
||||
4;case 129:return Da(b.registerC),4;case 130:return Da(b.registerD),4;case 131:return Da(b.registerE),4;case 132:return Da(b.registerH),4;case 133:return Da(b.registerL),4;case 134:return a=I(p(b.registerH,b.registerL)),Da(a),4;case 135:return Da(b.registerA),4;case 136:return Ea(b.registerB),4;case 137:return Ea(b.registerC),4;case 138:return Ea(b.registerD),4;case 139:return Ea(b.registerE),4;case 140:return Ea(b.registerH),4;case 141:return Ea(b.registerL),4;case 142:return a=I(p(b.registerH,b.registerL)), |
||||
Ea(a),4;case 143:return Ea(b.registerA),4}return-1}function nc(a){switch(a){case 144:return Fa(b.registerB),4;case 145:return Fa(b.registerC),4;case 146:return Fa(b.registerD),4;case 147:return Fa(b.registerE),4;case 148:return Fa(b.registerH),4;case 149:return Fa(b.registerL),4;case 150:return a=I(p(b.registerH,b.registerL)),Fa(a),4;case 151:return Fa(b.registerA),4;case 152:return Ga(b.registerB),4;case 153:return Ga(b.registerC),4;case 154:return Ga(b.registerD),4;case 155:return Ga(b.registerE), |
||||
4;case 156:return Ga(b.registerH),4;case 157:return Ga(b.registerL),4;case 158:return a=I(p(b.registerH,b.registerL)),Ga(a),4;case 159:return Ga(b.registerA),4}return-1}function oc(a){switch(a){case 160:return Ha(b.registerB),4;case 161:return Ha(b.registerC),4;case 162:return Ha(b.registerD),4;case 163:return Ha(b.registerE),4;case 164:return Ha(b.registerH),4;case 165:return Ha(b.registerL),4;case 166:return a=I(p(b.registerH,b.registerL)),Ha(a),4;case 167:return Ha(b.registerA),4;case 168:return Ia(b.registerB), |
||||
4;case 169:return Ia(b.registerC),4;case 170:return Ia(b.registerD),4;case 171:return Ia(b.registerE),4;case 172:return Ia(b.registerH),4;case 173:return Ia(b.registerL),4;case 174:return a=I(p(b.registerH,b.registerL)),Ia(a),4;case 175:return Ia(b.registerA),4}return-1}function pc(a){switch(a){case 176:return Ja(b.registerB),4;case 177:return Ja(b.registerC),4;case 178:return Ja(b.registerD),4;case 179:return Ja(b.registerE),4;case 180:return Ja(b.registerH),4;case 181:return Ja(b.registerL),4;case 182:return a= |
||||
I(p(b.registerH,b.registerL)),Ja(a),4;case 183:return Ja(b.registerA),4;case 184:return Ka(b.registerB),4;case 185:return Ka(b.registerC),4;case 186:return Ka(b.registerD),4;case 187:return Ka(b.registerE),4;case 188:return Ka(b.registerH),4;case 189:return Ka(b.registerL),4;case 190:return a=I(p(b.registerH,b.registerL)),Ka(a),4;case 191:return Ka(b.registerA),4}return-1}function qc(a){switch(a){case 192:return 0===Ma()?(a=b.stackPointer,b.programCounter=Ba(a),b.stackPointer=a+2&65535,12):8;case 193:return a= |
||||
Ba(b.stackPointer),b.stackPointer=b.stackPointer+2&65535,b.registerB=F(a),b.registerC=a&255,4;case 194:if(0===Ma())return b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 195:return b.programCounter=U(),8;case 196:if(0===Ma())return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter+2&65535),b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 197:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,p(b.registerB,b.registerC)), |
||||
8;case 198:return Da(G()),b.programCounter=b.programCounter+1&65535,4;case 199:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=0,8;case 200:return 1===Ma()?(a=b.stackPointer,b.programCounter=Ba(a),b.stackPointer=a+2&65535,12):8;case 201:return a=b.stackPointer,b.programCounter=Ba(a),b.stackPointer=a+2&65535,8;case 202:if(1===Ma())return b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 203:var c=G();a=-1;var d=!1,e=0,f=0,l=c&7; |
||||
switch(l){case 0:e=b.registerB;break;case 1:e=b.registerC;break;case 2:e=b.registerD;break;case 3:e=b.registerE;break;case 4:e=b.registerH;break;case 5:e=b.registerL;break;case 6:e=I(p(b.registerH,b.registerL));break;case 7:e=b.registerA}var g=(c&240)>>4;switch(g){case 0:7>=c?(c=e,K(128===(c&128)),c=(c<<1|c>>7)&255,x(0===c),q(0),H(0),f=c,d=!0):15>=c&&(c=e,K(0<(c&1)),c=(c>>1|c<<7)&255,x(0===c),q(0),H(0),f=c,d=!0);break;case 1:23>=c?(c=e,d=128===(c&128),c=(c<<1|Q())&255,K(d),x(0===c),q(0),H(0),f=c, |
||||
d=!0):31>=c&&(c=e,d=1===(c&1),c=(c>>1|Q()<<7)&255,K(d),x(0===c),q(0),H(0),f=c,d=!0);break;case 2:39>=c?(c=e,d=128===(c&128),c=c<<1&255,K(d),x(0===c),q(0),H(0),f=c,d=!0):47>=c&&(c=e,d=128===(c&128),e=1===(c&1),c=c>>1&255,d&&(c|=128),x(0===c),q(0),H(0),K(e),f=c,d=!0);break;case 3:55>=c?(c=e,c=((c&15)<<4|(c&240)>>4)&255,x(0===c),q(0),H(0),K(0),f=c,d=!0):63>=c&&(c=e,d=1===(c&1),c=c>>1&255,x(0===c),q(0),H(0),K(d),f=c,d=!0);break;case 4:71>=c?(f=Oa(0,e),d=!0):79>=c&&(f=Oa(1,e),d=!0);break;case 5:87>=c? |
||||
(f=Oa(2,e),d=!0):95>=c&&(f=Oa(3,e),d=!0);break;case 6:103>=c?(f=Oa(4,e),d=!0):111>=c&&(f=Oa(5,e),d=!0);break;case 7:119>=c?(f=Oa(6,e),d=!0):127>=c&&(f=Oa(7,e),d=!0);break;case 8:135>=c?(f=X(0,0,e),d=!0):143>=c&&(f=X(1,0,e),d=!0);break;case 9:151>=c?(f=X(2,0,e),d=!0):159>=c&&(f=X(3,0,e),d=!0);break;case 10:167>=c?(f=X(4,0,e),d=!0):175>=c&&(f=X(5,0,e),d=!0);break;case 11:183>=c?(f=X(6,0,e),d=!0):191>=c&&(f=X(7,0,e),d=!0);break;case 12:199>=c?(f=X(0,1,e),d=!0):207>=c&&(f=X(1,1,e),d=!0);break;case 13:215>= |
||||
c?(f=X(2,1,e),d=!0):223>=c&&(f=X(3,1,e),d=!0);break;case 14:231>=c?(f=X(4,1,e),d=!0):239>=c&&(f=X(5,1,e),d=!0);break;case 15:247>=c?(f=X(6,1,e),d=!0):255>=c&&(f=X(7,1,e),d=!0)}switch(l){case 0:b.registerB=f;break;case 1:b.registerC=f;break;case 2:b.registerD=f;break;case 3:b.registerE=f;break;case 4:b.registerH=f;break;case 5:b.registerL=f;break;case 6:(4>g||7<g)&&P(p(b.registerH,b.registerL),f);break;case 7:b.registerA=f}d&&(a=4);b.programCounter=b.programCounter+1&65535;return a;case 204:if(1=== |
||||
Ma())return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter+2),b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 205:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter+2&65535),b.programCounter=U(),8;case 206:return Ea(G()),b.programCounter=b.programCounter+1&65535,4;case 207:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=8}return-1}function rc(a){switch(a){case 208:return 0===Q()?(a=b.stackPointer, |
||||
b.programCounter=Ba(a),b.stackPointer=a+2&65535,12):8;case 209:a=b.stackPointer;var c=Ba(a);b.stackPointer=a+2&65535;b.registerD=F(c);b.registerE=c&255;return 4;case 210:if(0===Q())return b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 212:if(0===Q())return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter+2),b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 213:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,p(b.registerD, |
||||
b.registerE)),8;case 214:return Fa(G()),b.programCounter=b.programCounter+1&65535,4;case 215:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=16,8;case 216:return 1===Q()?(a=b.stackPointer,b.programCounter=Ba(a),b.stackPointer=a+2&65535,12):8;case 217:return a=b.stackPointer,b.programCounter=Ba(a),lb(!0),b.stackPointer=a+2&65535,8;case 218:if(1===Q())return b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 220:if(1===Q())return a= |
||||
b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter+2&65535),b.programCounter=U(),8;b.programCounter=b.programCounter+2&65535;return 12;case 222:return Ga(G()),b.programCounter=b.programCounter+1&65535,4;case 223:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=24,8}return-1}function sc(a){switch(a){case 224:return a=G(),P(65280+a,b.registerA),b.programCounter=b.programCounter+1&65535,4;case 225:a=b.stackPointer;var c=Ba(a);b.stackPointer=a+2&65535; |
||||
b.registerH=F(c);b.registerL=c&255;return 4;case 226:return P(65280+b.registerC,b.registerA),4;case 229:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,p(b.registerH,b.registerL)),8;case 230:return Ha(G()),b.programCounter=b.programCounter+1&65535,4;case 231:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=32,8;case 232:return a=G()<<24>>24,Ra(b.stackPointer,a,!0),b.stackPointer=b.stackPointer+a&65535,x(0),q(0),b.programCounter=b.programCounter+1&65535, |
||||
12;case 233:return b.programCounter=p(b.registerH,b.registerL),4;case 234:return P(U(),b.registerA),b.programCounter=b.programCounter+2&65535,4;case 238:return Ia(G()),b.programCounter=b.programCounter+1&65535,4;case 239:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=40,8}return-1}function tc(a){switch(a){case 240:return a=G(),b.registerA=I(65280+a)&255,b.programCounter=b.programCounter+1&65535,4;case 241:a=b.stackPointer;var c=Ba(a);b.stackPointer=a+2&65535; |
||||
b.registerA=F(c);b.registerF=c&255;return 4;case 242:return b.registerA=I(65280+b.registerC)&255,4;case 243:return lb(!1),4;case 245:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,p(b.registerA,b.registerF)),8;case 246:return Ja(G()),b.programCounter=b.programCounter+1&65535,4;case 247:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=48,8;case 248:return c=G()<<24>>24,a=b.stackPointer,x(0),q(0),Ra(a,c,!0),a=a+c&65535,b.registerH=F(a),b.registerL=a&255, |
||||
b.programCounter=b.programCounter+1&65535,8;case 249:return b.stackPointer=p(b.registerH,b.registerL),8;case 250:return b.registerA=I(U()),b.programCounter=b.programCounter+2&65535,4;case 251:return lb(!0),4;case 254:return Ka(G()),b.programCounter=b.programCounter+1&65535,4;case 255:return a=b.stackPointer-2&65535,b.stackPointer=a,R(a,b.programCounter),b.programCounter=56,8}return-1}function La(a){0<k.DMACycles&&(a+=k.DMACycles,k.DMACycles=0);b.currentCycles+=a;if(!b.isStopped){if(M.graphicsBatchProcessing){r.currentCycles+= |
||||
a;for(var c=r.batchProcessCycles();r.currentCycles>=c;)Yb(c),r.currentCycles-=c}else Yb(a);M.audioBatchProcessing?(m.currentCycles+=a,bb()):Pb(a);c=a;if(V.transferStartFlag)for(var d=0;d<c;){var e=V.currentCycles,g=e;d+=4;g+=4;65535<g&&(g-=65536);V.currentCycles=g;var h=V.isClockSpeedFast?2:7;l(h,e)&&!l(h,g)&&(e=V.memoryLocationSerialTransferData,g=u(e),g=(g<<1)+1,g&=255,f(e,g),e=V.numberOfBitsTransferred,8===++e?(V.numberOfBitsTransferred=0,n.isSerialInterruptRequested=!0,Ya(n.bitPositionSerialInterrupt), |
||||
e=V.memoryLocationSerialTransferControl,g=u(e),f(e,E(7,g)),V.transferStartFlag=!1):V.numberOfBitsTransferred=e)}}M.timersBatchProcessing?(t.currentCycles+=a,yb(t.currentCycles),t.currentCycles=0):yb(a);c=Z.cycles;c+=a;c>=Z.cyclesPerCycleSet&&(Z.cycleSets+=1,c-=Z.cyclesPerCycleSet);Z.cycles=c}function $b(){return Ib(!0,-1)}function Ib(a,c){void 0===c&&(c=-1);a=1024;0<c?a=c:0>c&&(a=-1);for(var d=!1,e=!1,f=!1;!(d||e||f||W.reachedBreakpoint);)c=ac(),0>c?d=!0:b.currentCycles>=b.MAX_CYCLES_PER_FRAME()? |
||||
e=!0:-1<a&&Qb()>=a&&(f=!0);if(e)return b.currentCycles-=b.MAX_CYCLES_PER_FRAME(),S.RESPONSE_CONDITION_FRAME;if(f)return S.RESPONSE_CONDITION_AUDIO;if(W.reachedBreakpoint)return W.reachedBreakpoint=!1,S.RESPONSE_CONDITION_BREAKPOINT;b.programCounter=b.programCounter-1&65535;return-1}function ac(){eb=!0;if(b.isHaltBug){var a=u(b.programCounter);a=Zb(a);La(a);b.exitHaltAndStop()}n.masterInterruptSwitchDelay&&(n.masterInterruptSwitch=!0,n.masterInterruptSwitchDelay=!1);if(0<(n.interruptsEnabledValue& |
||||
n.interruptsRequestedValue&31)){a=!1;n.masterInterruptSwitch&&!b.isHaltNoJump&&(n.isVBlankInterruptEnabled&&n.isVBlankInterruptRequested?(cb(n.bitPositionVBlankInterrupt),a=!0):n.isLcdInterruptEnabled&&n.isLcdInterruptRequested?(cb(n.bitPositionLcdInterrupt),a=!0):n.isTimerInterruptEnabled&&n.isTimerInterruptRequested?(cb(n.bitPositionTimerInterrupt),a=!0):n.isSerialInterruptEnabled&&n.isSerialInterruptRequested?(cb(n.bitPositionSerialInterrupt),a=!0):n.isJoypadInterruptEnabled&&n.isJoypadInterruptRequested&& |
||||
(cb(n.bitPositionJoypadInterrupt),a=!0));var c=0;a&&(c=20,b.isHalted()&&(b.exitHaltAndStop(),c+=4));b.isHalted()&&b.exitHaltAndStop();a=c}else a=0;0<a&&La(a);a=4;b.isHalted()||b.isStopped||(a=u(b.programCounter),a=Zb(a));b.registerF&=240;if(0>=a)return a;La(a);c=S.steps;c+=1;c>=S.stepsPerStepSet&&(S.stepSets+=1,c-=S.stepsPerStepSet);S.steps=c;b.programCounter===W.programCounter&&(W.reachedBreakpoint=!0);return a}let e=new Uint8ClampedArray(9109504),fb={size:()=>9109504,grow:()=>{},wasmByteMemory:e}; |
||||
var uc=65536,Ua=67584,Va=Ua+128,Za=Va+23552,ob=Za+93184,Jb=ob+196608,pb=Jb+147456,vc=Ua,wc=pb-Ua+15360,ub=pb+15360,vb=ub+131072,wb=vb+131072,xb=wb+131072,kb=xb+131072,Fb=kb+131072,mb=Fb+131072,nb=mb+2560,Kb=nb+8258560,bc=Kb+65535+1,Lb=Math.ceil(bc/1024/64)+1,M=function(){function a(){}a.enableBootRom=!1;a.useGbcWhenAvailable=!0;a.audioBatchProcessing=!1;a.graphicsBatchProcessing=!1;a.timersBatchProcessing=!1;a.graphicsDisableScanlineRendering=!1;a.audioAccumulateSamples=!1;a.tileRendering=!1;a.tileCaching= |
||||
!1;a.enableAudioDebugging=!1;return a}(),L=function(){function a(){}a.bgWhite=15921906;a.bgLightGrey=10526880;a.bgDarkGrey=5789784;a.bgBlack=526344;a.obj0White=15921906;a.obj0LightGrey=10526880;a.obj0DarkGrey=5789784;a.obj0Black=526344;a.obj1White=15921906;a.obj1LightGrey=10526880;a.obj1DarkGrey=5789784;a.obj1Black=526344;return a}(),ea=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=5439232;a.bgDarkGrey=16728576;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=5439232;a.obj0DarkGrey=16728576; |
||||
a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=5439232;a.obj1DarkGrey=16728576;a.obj1Black=0;return a}(),ja=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16776960;a.bgDarkGrey=16711680;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16776960;a.obj0DarkGrey=16711680;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16776960;a.obj1DarkGrey=16711680;a.obj1Black=0;return a}(),ba=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16756067;a.bgDarkGrey=8663296;a.bgBlack=0;a.obj0White= |
||||
16777215;a.obj0LightGrey=16756067;a.obj0DarkGrey=8663296;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),ha=function(){function a(){}a.bgWhite=0;a.bgLightGrey=33924;a.bgDarkGrey=16768512;a.bgBlack=16777215;a.obj0White=0;a.obj0LightGrey=33924;a.obj0DarkGrey=16768512;a.obj0Black=16777215;a.obj1White=0;a.obj1LightGrey=33924;a.obj1DarkGrey=16768512;a.obj1Black=16777215;return a}(),na=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey= |
||||
10855845;a.bgDarkGrey=5395026;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=10855845;a.obj0DarkGrey=5395026;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=10855845;a.obj1DarkGrey=5395026;a.obj1Black=0;return a}(),ia=function(){function a(){}a.bgWhite=16777125;a.bgLightGrey=16749716;a.bgDarkGrey=9737471;a.bgBlack=0;a.obj0White=16777125;a.obj0LightGrey=16749716;a.obj0DarkGrey=9737471;a.obj0Black=0;a.obj1White=16777125;a.obj1LightGrey=16749716;a.obj1DarkGrey=9737471;a.obj1Black=0;return a}(), |
||||
da=function(){function a(){}a.bgWhite=16770757;a.bgLightGrey=13540484;a.bgDarkGrey=8678185;a.bgBlack=5910792;a.obj0White=16777215;a.obj0LightGrey=16756067;a.obj0DarkGrey=8663296;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),fa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=8126257;a.bgDarkGrey=25541;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey= |
||||
16745604;a.obj1DarkGrey=9714234;a.obj1Black=0;return a}(),ma=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=9211102;a.bgDarkGrey=5395084;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),ca=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=8126257;a.obj0DarkGrey= |
||||
33792;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),la=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),ka=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16776960;a.bgDarkGrey=8079872;a.bgBlack=0;a.obj0White=16777215; |
||||
a.obj0LightGrey=6530559;a.obj0DarkGrey=255;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),pa=function(){function a(){}a.bgWhite=10853631;a.bgLightGrey=16776960;a.bgDarkGrey=25344;a.bgBlack=0;a.obj0White=10853631;a.obj0LightGrey=16776960;a.obj0DarkGrey=25344;a.obj0Black=0;a.obj1White=10853631;a.obj1LightGrey=16776960;a.obj1DarkGrey=25344;a.obj1Black=0;return a}(),qa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey= |
||||
255;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),ra=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=8126257;a.obj0DarkGrey=33792;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black=0;return a}(),sa=function(){function a(){}a.bgWhite= |
||||
11908607;a.bgLightGrey=16777108;a.bgDarkGrey=11360834;a.bgBlack=0;a.obj0White=0;a.obj0LightGrey=16777215;a.obj0DarkGrey=16745604;a.obj0Black=9714234;a.obj1White=0;a.obj1LightGrey=16777215;a.obj1DarkGrey=16745604;a.obj1Black=9714234;return a}(),ta=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=11382148;a.bgDarkGrey=4354939;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16741120;a.obj0DarkGrey=9716224;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=5946879;a.obj1DarkGrey=16711680;a.obj1Black= |
||||
255;return a}(),ua=function(){function a(){}a.bgWhite=16777116;a.bgLightGrey=9745919;a.bgDarkGrey=6526067;a.bgBlack=14906;a.obj0White=16762178;a.obj0LightGrey=16766464;a.obj0DarkGrey=9714176;a.obj0Black=4849664;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black=0;return a}(),va=function(){function a(){}a.bgWhite=7077632;a.bgLightGrey=16777215;a.bgDarkGrey=16732746;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16777215;a.obj0DarkGrey=6530559;a.obj0Black=255;a.obj1White= |
||||
16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),wa=function(){function a(){}a.bgWhite=10853631;a.bgLightGrey=16776960;a.bgDarkGrey=25344;a.bgBlack=0;a.obj0White=16737106;a.obj0LightGrey=14024704;a.obj0DarkGrey=6488064;a.obj0Black=0;a.obj1White=255;a.obj1LightGrey=16777215;a.obj1DarkGrey=16777083;a.obj1Black=34047;return a}(),xa=function(){function a(){}a.bgWhite=16777166;a.bgLightGrey=6549487;a.bgDarkGrey=10257457;a.bgBlack=5921370;a.obj0White=16777215;a.obj0LightGrey= |
||||
16741120;a.obj0DarkGrey=9716224;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),ya=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=65280;a.obj0DarkGrey=3245056;a.obj0Black=18944;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),za=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack= |
||||
0;a.obj0White=16776960;a.obj0LightGrey=16711680;a.obj0DarkGrey=6488064;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),Aa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=11382148;a.bgDarkGrey=4354939;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16756067;a.obj0DarkGrey=16756067;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),d=function(){function a(){}a.bgWhite=L.bgWhite; |
||||
a.bgLightGrey=L.bgLightGrey;a.bgDarkGrey=L.bgDarkGrey;a.bgBlack=L.bgBlack;a.obj0White=L.obj0White;a.obj0LightGrey=L.obj0LightGrey;a.obj0DarkGrey=L.obj0DarkGrey;a.obj0Black=L.obj0Black;a.obj1White=L.obj1White;a.obj1LightGrey=L.obj1LightGrey;a.obj1DarkGrey=L.obj1DarkGrey;a.obj1Black=L.obj1Black;return a}(),Ta=function(){function a(){}a.memoryLocationBackgroundPaletteIndex=65384;a.memoryLocationBackgroundPaletteData=65385;a.memoryLocationSpritePaletteIndex=65386;a.memoryLocationSpritePaletteData=65387; |
||||
a.memoryLocationBackgroundPalette=65351;a.memoryLocationSpritePaletteOne=65352;a.memoryLocationSpritePaletteTwo=65353;return a}(),$a=function(){function a(){}a.tileId=-1;a.horizontalFlip=!1;a.nextXIndexToPerformCacheCheck=-1;return a}(),y=function(){function a(){}a.updateNRx0=function(b){var c=a.NRx0Negate;a.NRx0SweepPeriod=(b&112)>>4;a.NRx0Negate=l(3,b);a.NRx0SweepShift=b&7;c&&!a.NRx0Negate&&a.sweepNegateShouldDisableChannelOnClear&&(a.isEnabled=!1)};a.updateNRx1=function(b){a.NRx1Duty=b>>6&3;a.NRx1LengthLoad= |
||||
b&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==l(3,b)&&(a.volume=16-a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=l(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled=b;b||(a.isEnabled=!1)};a.updateNRx3=function(b){a.NRx3FrequencyLSB=b;a.frequency=a.NRx4FrequencyMSB<<8|b};a.updateNRx4=function(b){var c=b&7;a.NRx4FrequencyMSB= |
||||
c;a.frequency=c<<8|a.NRx3FrequencyLSB;c=1===(m.frameSequencer&1);var d=!a.NRx4LengthEnabled&&l(6,b);!c&&0<a.lengthCounter&&d&&(--a.lengthCounter,l(7,b)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=l(6,b);l(7,b)&&(a.trigger(),!c&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.cycleCounter;e[1028+50*a.saveStateSlot]=a.NRx0SweepPeriod;e[1029+50*a.saveStateSlot]=a.NRx0Negate;e[1030+50*a.saveStateSlot]=a.NRx0SweepShift; |
||||
e[1031+50*a.saveStateSlot]=a.NRx1Duty;e[1033+50*a.saveStateSlot]=a.NRx1LengthLoad;e[1034+50*a.saveStateSlot]=a.NRx2StartingVolume;e[1035+50*a.saveStateSlot]=a.NRx2EnvelopeAddMode;e[1036+50*a.saveStateSlot]=a.NRx2EnvelopePeriod;e[1037+50*a.saveStateSlot]=a.NRx3FrequencyLSB;e[1038+50*a.saveStateSlot]=a.NRx4LengthEnabled;e[1039+50*a.saveStateSlot]=a.NRx4FrequencyMSB;e[1040+50*a.saveStateSlot]=a.isEnabled;e[1041+50*a.saveStateSlot]=a.isDacEnabled;e[1042+50*a.saveStateSlot]=a.frequency;e[1046+50*a.saveStateSlot]= |
||||
a.frequencyTimer;e[1050+50*a.saveStateSlot]=a.envelopeCounter;e[1054+50*a.saveStateSlot]=a.isEnvelopeAutomaticUpdating;e[1055+50*a.saveStateSlot]=a.lengthCounter;e[1059+50*a.saveStateSlot]=a.volume;e[1063+50*a.saveStateSlot]=a.dutyCycle;e[1064+50*a.saveStateSlot]=a.waveFormPositionOnDuty;e[1065+50*a.saveStateSlot]=a.isSweepEnabled;e[1066+50*a.saveStateSlot]=a.sweepCounter;e[1070+50*a.saveStateSlot]=a.sweepShadowFrequency;e[1073+50*a.saveStateSlot]=a.sweepNegateShouldDisableChannelOnClear};a.loadState= |
||||
function(){a.cycleCounter=e[1024+50*a.cycleCounter];a.NRx0SweepPeriod=e[1028+50*a.saveStateSlot];a.NRx0Negate=h(1029+50*a.saveStateSlot);a.NRx0SweepShift=e[1030+50*a.saveStateSlot];a.NRx1Duty=e[1031+50*a.saveStateSlot];a.NRx1LengthLoad=e[1033+50*a.saveStateSlot];a.NRx2StartingVolume=e[1034+50*a.saveStateSlot];a.NRx2EnvelopeAddMode=h(1035+50*a.saveStateSlot);a.NRx2EnvelopePeriod=e[1036+50*a.saveStateSlot];a.NRx3FrequencyLSB=e[1037+50*a.saveStateSlot];a.NRx4LengthEnabled=h(1038+50*a.saveStateSlot); |
||||
a.NRx4FrequencyMSB=e[1039+50*a.saveStateSlot];a.isEnabled=h(1040+50*a.saveStateSlot);a.isDacEnabled=h(1041+50*a.saveStateSlot);a.frequency=e[1042+50*a.saveStateSlot];a.frequencyTimer=e[1046+50*a.saveStateSlot];a.envelopeCounter=e[1050+50*a.saveStateSlot];a.isEnvelopeAutomaticUpdating=h(1054+50*a.saveStateSlot);a.lengthCounter=e[1055+50*a.saveStateSlot];a.volume=e[1059+50*a.saveStateSlot];a.dutyCycle=e[1063+50*a.saveStateSlot];a.waveFormPositionOnDuty=e[1064+50*a.saveStateSlot];a.isSweepEnabled=h(1065+ |
||||
50*a.saveStateSlot);a.sweepCounter=e[1066+50*a.saveStateSlot];a.sweepShadowFrequency=e[1070+50*a.saveStateSlot];a.sweepNegateShouldDisableChannelOnClear=h(1073+50*a.saveStateSlot)};a.initialize=function(){f(a.memoryLocationNRx0,128);f(a.memoryLocationNRx1,191);f(a.memoryLocationNRx2,243);f(a.memoryLocationNRx3,193);f(a.memoryLocationNRx4,191);b.BootROMEnabled&&(f(a.memoryLocationNRx1,63),f(a.memoryLocationNRx2,0),f(a.memoryLocationNRx3,0),f(a.memoryLocationNRx4,184))};a.getSampleFromCycleCounter= |
||||
function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.resetTimer=function(){var c=2048-a.frequency<<2;b.GBCDoubleSpeed&&(c<<=2);a.frequencyTimer=c};a.getSample=function(b){var c=a.frequencyTimer;for(c-=b;0>=c;)b=Math.abs(c),a.resetTimer(),c=a.frequencyTimer,c-=b,a.waveFormPositionOnDuty=a.waveFormPositionOnDuty+1&7;a.frequencyTimer=c;if(a.isEnabled&&a.isDacEnabled)c=a.volume&15;else return 15;b=1;Ob(a.NRx1Duty,a.waveFormPositionOnDuty)||(b=-b);return b*c+15};a.trigger=function(){a.isEnabled= |
||||
!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.sweepShadowFrequency=a.frequency;a.sweepCounter=0===a.NRx0SweepPeriod?8:a.NRx0SweepPeriod;a.isSweepEnabled=0<a.NRx0SweepPeriod||0<a.NRx0SweepShift;a.sweepNegateShouldDisableChannelOnClear=!1;var b;if(b=0<a.NRx0SweepShift)b=2047<tb()?!0:!1;b&&(a.isEnabled=!1);a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate= |
||||
function(b){b=a.cycleCounter+b;a.cycleCounter=b;return!(0<a.frequencyTimer-b)};a.updateSweep=function(){if(a.isEnabled&&a.isSweepEnabled){var b=a.sweepCounter-1;0>=b?0===a.NRx0SweepPeriod?a.sweepCounter=8:(a.sweepCounter=a.NRx0SweepPeriod,b=tb(),2047<b&&(a.isEnabled=!1),0<a.NRx0SweepShift&&(a.setFrequency(b),2047<tb()&&(a.isEnabled=!1))):a.sweepCounter=b}};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&(--b,0===b&&(a.isEnabled=!1));a.lengthCounter=b};a.updateEnvelope=function(){var b= |
||||
a.envelopeCounter-1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var d=a.volume;d=a.NRx2EnvelopeAddMode?d+1:d-1;d&=15;15>d?a.volume=d:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter=b};a.setFrequency=function(b){a.sweepShadowFrequency=b;var c=b>>8&7;b&=255;var d=u(a.memoryLocationNRx4)&248|c;f(a.memoryLocationNRx3,b);f(a.memoryLocationNRx4,d);a.NRx3FrequencyLSB=b;a.NRx4FrequencyMSB=c;a.frequency=a.NRx4FrequencyMSB<<8|a.NRx3FrequencyLSB}; |
||||
a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65296;a.NRx0SweepPeriod=0;a.NRx0Negate=!1;a.NRx0SweepShift=0;a.memoryLocationNRx1=65297;a.NRx1Duty=0;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65298;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65299;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65300;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.channelNumber=1;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating= |
||||
!1;a.lengthCounter=0;a.volume=0;a.dutyCycle=0;a.waveFormPositionOnDuty=0;a.isSweepEnabled=!1;a.sweepCounter=0;a.sweepShadowFrequency=0;a.sweepNegateShouldDisableChannelOnClear=!1;a.saveStateSlot=7;return a}(),A=function(){function a(){}a.updateNRx1=function(b){a.NRx1Duty=b>>6&3;a.NRx1LengthLoad=b&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==l(3,b)&& |
||||
(a.volume=16-a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=l(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled=b;b||(a.isEnabled=b)};a.updateNRx3=function(b){a.NRx3FrequencyLSB=b;a.frequency=a.NRx4FrequencyMSB<<8|b};a.updateNRx4=function(b){var c=b&7;a.NRx4FrequencyMSB=c;a.frequency=c<<8|a.NRx3FrequencyLSB;c=1===(m.frameSequencer&1);var d=!a.NRx4LengthEnabled&&l(6,b);!c&&0<a.lengthCounter&&d&&(--a.lengthCounter,l(7,b)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled= |
||||
l(6,b);l(7,b)&&(a.trigger(),!c&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.cycleCounter;e[1031+50*a.saveStateSlot]=a.NRx1Duty;e[1032+50*a.saveStateSlot]=a.NRx1LengthLoad;e[1034+50*a.saveStateSlot]=a.NRx2StartingVolume;e[1035+50*a.saveStateSlot]=a.NRx2EnvelopeAddMode;e[1036+50*a.saveStateSlot]=a.NRx2EnvelopePeriod;e[1037+50*a.saveStateSlot]=a.NRx3FrequencyLSB;e[1038+50*a.saveStateSlot]=a.NRx4LengthEnabled;e[1039+50*a.saveStateSlot]= |
||||
a.NRx4FrequencyMSB;e[1040+50*a.saveStateSlot]=a.isEnabled;e[1041+50*a.saveStateSlot]=a.isDacEnabled;e[1042+50*a.saveStateSlot]=a.frequency;e[1046+50*a.saveStateSlot]=a.frequencyTimer;e[1050+50*a.saveStateSlot]=a.envelopeCounter;e[1054+50*a.saveStateSlot]=a.isEnvelopeAutomaticUpdating;e[1055+50*a.saveStateSlot]=a.lengthCounter;e[1059+50*a.saveStateSlot]=a.volume;e[1063+50*a.saveStateSlot]=a.dutyCycle;e[1064+50*a.saveStateSlot]=a.waveFormPositionOnDuty};a.loadState=function(){a.cycleCounter=e[1024+ |
||||
50*a.cycleCounter];a.NRx1Duty=e[1031+50*a.saveStateSlot];a.NRx1LengthLoad=e[1032+50*a.saveStateSlot];a.NRx2StartingVolume=e[1034+50*a.saveStateSlot];a.NRx2EnvelopeAddMode=h(1035+50*a.saveStateSlot);a.NRx2EnvelopePeriod=e[1036+50*a.saveStateSlot];a.NRx3FrequencyLSB=e[1037+50*a.saveStateSlot];a.NRx4LengthEnabled=h(1038+50*a.saveStateSlot);a.NRx4FrequencyMSB=e[1039+50*a.saveStateSlot];a.isEnabled=h(1040+50*a.saveStateSlot);a.isDacEnabled=h(1041+50*a.saveStateSlot);a.frequency=e[1042+50*a.saveStateSlot]; |
||||
a.frequencyTimer=e[1046+50*a.saveStateSlot];a.envelopeCounter=e[1050+50*a.saveStateSlot];a.isEnvelopeAutomaticUpdating=h(1054+50*a.saveStateSlot);a.lengthCounter=e[1055+50*a.saveStateSlot];a.volume=e[1059+50*a.saveStateSlot];a.dutyCycle=e[1063+50*a.saveStateSlot];a.waveFormPositionOnDuty=e[1064+50*a.saveStateSlot]};a.initialize=function(){f(a.memoryLocationNRx1-1,255);f(a.memoryLocationNRx1,63);f(a.memoryLocationNRx2,0);f(a.memoryLocationNRx3,0);f(a.memoryLocationNRx4,184)};a.getSampleFromCycleCounter= |
||||
function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.resetTimer=function(){a.frequencyTimer=2048-a.frequency<<2<<b.GBCDoubleSpeed};a.getSample=function(b){var c=a.frequencyTimer;for(c-=b;0>=c;)b=Math.abs(c),a.resetTimer(),c=a.frequencyTimer,c-=b,a.waveFormPositionOnDuty=a.waveFormPositionOnDuty+1&7;a.frequencyTimer=c;if(a.isEnabled&&a.isDacEnabled)c=a.volume&15;else return 15;b=1;Ob(a.NRx1Duty,a.waveFormPositionOnDuty)||(b=-b);return b*c+15};a.trigger=function(){a.isEnabled=!0; |
||||
0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){b=a.cycleCounter+b;a.cycleCounter=b;return!(0<a.frequencyTimer-b)};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.updateEnvelope=function(){var b=a.envelopeCounter- |
||||
1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var d=a.volume;d=a.NRx2EnvelopeAddMode?d+1:d-1;d&=15;15>d?a.volume=d:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter=b};a.setFrequency=function(b){var c=b>>8;b&=255;var d=u(a.memoryLocationNRx4)&248|c;f(a.memoryLocationNRx3,b);f(a.memoryLocationNRx4,d);a.NRx3FrequencyLSB=b;a.NRx4FrequencyMSB=c;a.frequency=c<<8|b};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65301;a.memoryLocationNRx1= |
||||
65302;a.NRx1Duty=0;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65303;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65304;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65305;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.channelNumber=2;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.dutyCycle=0;a.waveFormPositionOnDuty=0;a.saveStateSlot=8;return a}(),v=function(){function a(){} |
||||
a.updateNRx0=function(b){b=l(7,b);!a.isDacEnabled&&b&&(a.sampleBuffer=0);a.isDacEnabled=b;b||(a.isEnabled=b)};a.updateNRx1=function(b){a.NRx1LengthLoad=b;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.NRx2VolumeCode=b>>5&15};a.updateNRx3=function(b){a.NRx3FrequencyLSB=b;a.frequency=a.NRx4FrequencyMSB<<8|b};a.updateNRx4=function(b){var c=b&7;a.NRx4FrequencyMSB=c;a.frequency=c<<8|a.NRx3FrequencyLSB;c=1===(m.frameSequencer&1);if(!c){var d=!a.NRx4LengthEnabled&&l(6,b);0<a.lengthCounter&& |
||||
d&&(--a.lengthCounter,l(7,b)||0!==a.lengthCounter||(a.isEnabled=!1))}a.NRx4LengthEnabled=l(6,b);l(7,b)&&(a.trigger(),!c&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.cycleCounter;e[1032+50*a.saveStateSlot]=a.NRx1LengthLoad;e[1034+50*a.saveStateSlot]=a.NRx2VolumeCode;e[1036+50*a.saveStateSlot]=a.NRx3FrequencyLSB;e[1037+50*a.saveStateSlot]=a.NRx4LengthEnabled;e[1038+50*a.saveStateSlot]=a.NRx4FrequencyMSB;e[1039+50*a.saveStateSlot]= |
||||
a.isEnabled;e[1040+50*a.saveStateSlot]=a.isDacEnabled;e[1041+50*a.saveStateSlot]=a.frequency;e[1045+50*a.saveStateSlot]=a.frequencyTimer;e[1049+50*a.saveStateSlot]=a.lengthCounter;e[1057+50*a.saveStateSlot]=a.waveTablePosition;e[1061+50*a.saveStateSlot]=a.volumeCode;e[1062+50*a.saveStateSlot]=a.volumeCodeChanged;e[1063+50*a.saveStateSlot]=a.sampleBuffer};a.loadState=function(){a.cycleCounter=e[1024+50*a.cycleCounter];a.NRx1LengthLoad=e[1032+50*a.saveStateSlot];a.NRx2VolumeCode=e[1034+50*a.saveStateSlot]; |
||||
a.NRx3FrequencyLSB=e[1036+50*a.saveStateSlot];a.NRx4LengthEnabled=h(1037+50*a.saveStateSlot);a.NRx4FrequencyMSB=e[1038+50*a.saveStateSlot];a.isEnabled=h(1039+50*a.saveStateSlot);a.isDacEnabled=h(1040+50*a.saveStateSlot);a.frequency=e[1041+50*a.saveStateSlot];a.frequencyTimer=e[1045+50*a.saveStateSlot];a.lengthCounter=e[1049+50*a.saveStateSlot];a.waveTablePosition=e[1057+50*a.saveStateSlot];a.volumeCode=e[1061+50*a.saveStateSlot];a.volumeCodeChanged=h(1062+50*a.saveStateSlot);a.sampleBuffer=e[1063+ |
||||
50*a.saveStateSlot]};a.handleWaveRamRead=function(){return u(v.memoryLocationWaveTable+(v.waveTablePosition>>1|0))};a.handleWaveRamWrite=function(b){f(a.memoryLocationWaveTable+(a.waveTablePosition>>1|0),b)};a.initialize=function(){f(a.memoryLocationNRx0,127);f(a.memoryLocationNRx1,255);f(a.memoryLocationNRx2,159);f(a.memoryLocationNRx3,0);f(a.memoryLocationNRx4,184);a.volumeCodeChanged=!0};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.resetTimer= |
||||
function(){a.frequencyTimer=2048-a.frequency<<1<<b.GBCDoubleSpeed};a.getSample=function(b){if(!a.isEnabled||!a.isDacEnabled)return 15;var c=a.volumeCode;a.volumeCodeChanged&&(c=u(a.memoryLocationNRx2),c=c>>5&15,a.volumeCode=c,a.volumeCodeChanged=!1);var d=v.sampleBuffer;d>>=(0===(v.waveTablePosition&1))<<2;d&=15;var e=0;switch(c){case 0:d>>=4;break;case 1:e=1;break;case 2:d>>=1;e=2;break;default:d>>=2,e=4}d=(0<e?d/e:0)+15;c=a.frequencyTimer;for(c-=b;0>=c;){b=Math.abs(c);a.resetTimer();c=a.frequencyTimer; |
||||
c-=b;b=v.waveTablePosition;for(b+=1;32<=b;)b-=32;v.waveTablePosition=b;v.sampleBuffer=u(v.memoryLocationWaveTable+(v.waveTablePosition>>1|0))}a.frequencyTimer=c;return d};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.frequencyTimer+=6;a.waveTablePosition=0;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){a.cycleCounter+=b;return!(!a.volumeCodeChanged&&0<a.frequencyTimer-a.cycleCounter)};a.updateLength=function(){var b=a.lengthCounter; |
||||
0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.cycleCounter=0;a.MAX_LENGTH=256;a.memoryLocationNRx0=65306;a.memoryLocationNRx1=65307;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65308;a.NRx2VolumeCode=0;a.memoryLocationNRx3=65309;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65310;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.memoryLocationWaveTable=65328;a.channelNumber=3;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.lengthCounter=0;a.waveTablePosition=0; |
||||
a.volumeCode=0;a.volumeCodeChanged=!1;a.sampleBuffer=0;a.saveStateSlot=9;return a}(),D=function(){function a(){}a.updateNRx1=function(b){a.NRx1LengthLoad=b&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==l(3,b)&&(a.volume=16-a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=l(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled=b;b|| |
||||
(a.isEnabled=b)};a.updateNRx3=function(b){var c=b&7;a.NRx3ClockShift=b>>4;a.NRx3WidthMode=l(3,b);a.NRx3DivisorCode=c;c<<=1;1>c&&(c=1);a.divisor=c<<3};a.updateNRx4=function(b){var c=1===(m.frameSequencer&1),d=!a.NRx4LengthEnabled&&l(6,b);!c&&0<a.lengthCounter&&d&&(--a.lengthCounter,l(7,b)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=l(6,b);l(7,b)&&(a.trigger(),!c&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){e[1024+50*a.saveStateSlot]= |
||||
a.cycleCounter;e[1028+50*a.saveStateSlot]=a.NRx1LengthLoad;e[1030+50*a.saveStateSlot]=a.NRx2StartingVolume;e[1031+50*a.saveStateSlot]=a.NRx2EnvelopeAddMode;e[1032+50*a.saveStateSlot]=a.NRx2EnvelopePeriod;e[1033+50*a.saveStateSlot]=a.NRx3ClockShift;e[1034+50*a.saveStateSlot]=a.NRx3WidthMode;e[1035+50*a.saveStateSlot]=a.NRx3DivisorCode;e[1037+50*a.saveStateSlot]=a.NRx4LengthEnabled;e[1039+50*a.saveStateSlot]=a.isEnabled;e[1040+50*a.saveStateSlot]=a.isDacEnabled;e[1045+50*a.saveStateSlot]=a.frequencyTimer; |
||||
e[1049+50*a.saveStateSlot]=a.envelopeCounter;e[1053+50*a.saveStateSlot]=a.isEnvelopeAutomaticUpdating;e[1054+50*a.saveStateSlot]=a.lengthCounter;e[1058+50*a.saveStateSlot]=a.volume;e[1062+50*a.saveStateSlot]=a.linearFeedbackShiftRegister};a.loadState=function(){a.cycleCounter=e[1024+50*a.cycleCounter];a.NRx1LengthLoad=e[1028+50*a.saveStateSlot];a.NRx2StartingVolume=e[1030+50*a.saveStateSlot];a.NRx2EnvelopeAddMode=h(1031+50*a.saveStateSlot);a.NRx2EnvelopePeriod=e[1032+50*a.saveStateSlot];a.NRx3ClockShift= |
||||
e[1033+50*a.saveStateSlot];a.NRx3WidthMode=h(1034+50*a.saveStateSlot);a.NRx3DivisorCode=e[1035+50*a.saveStateSlot];a.NRx4LengthEnabled=h(1037+50*a.saveStateSlot);a.isEnabled=h(1039+50*a.saveStateSlot);a.isDacEnabled=h(1040+50*a.saveStateSlot);a.frequencyTimer=e[1045+50*a.saveStateSlot];a.envelopeCounter=e[1049+50*a.saveStateSlot];a.isEnvelopeAutomaticUpdating=h(1053+50*a.saveStateSlot);a.lengthCounter=e[1054+50*a.saveStateSlot];a.volume=e[1058+50*a.saveStateSlot];a.linearFeedbackShiftRegister=e[1062+ |
||||
50*a.saveStateSlot]};a.initialize=function(){f(a.memoryLocationNRx1-1,255);f(a.memoryLocationNRx1,255);f(a.memoryLocationNRx2,0);f(a.memoryLocationNRx3,0);f(a.memoryLocationNRx4,191)};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.getSample=function(b){var c=a.frequencyTimer;c-=b;if(0>=c){b=Math.abs(c);c=a.getNoiseChannelFrequencyPeriod();c-=b;b=a.linearFeedbackShiftRegister;var d=b&1^b>>1&1;b=b>>1|d<<14;a.NRx3WidthMode&&(b=b&-65|d<<6);a.linearFeedbackShiftRegister= |
||||
b}0>c&&(c=0);a.frequencyTimer=c;if(a.isEnabled&&a.isDacEnabled)c=a.volume&15;else return 15;b=l(0,a.linearFeedbackShiftRegister)?-1:1;return b*c+15};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.frequencyTimer=a.getNoiseChannelFrequencyPeriod();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.linearFeedbackShiftRegister=32767;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate= |
||||
function(b){a.cycleCounter+=b;return!(0<a.frequencyTimer-a.cycleCounter)};a.getNoiseChannelFrequencyPeriod=function(){return a.divisor<<a.NRx3ClockShift<<b.GBCDoubleSpeed};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.updateEnvelope=function(){var b=a.envelopeCounter-1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var d=a.volume;d=a.NRx2EnvelopeAddMode?d+1:d- |
||||
1;d&=15;15>d?a.volume=d:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter=b};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65311;a.memoryLocationNRx1=65312;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65313;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65314;a.NRx3ClockShift=0;a.NRx3WidthMode=!1;a.NRx3DivisorCode=0;a.memoryLocationNRx4=65315;a.NRx4LengthEnabled=!1;a.channelNumber=4;a.isEnabled=!1;a.isDacEnabled=!1;a.frequencyTimer=0;a.envelopeCounter= |
||||
0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.divisor=0;a.linearFeedbackShiftRegister=0;a.saveStateSlot=10;return a}(),g=function(){function a(){}a.channel1Sample=15;a.channel2Sample=15;a.channel3Sample=15;a.channel4Sample=15;a.channel1DacEnabled=!1;a.channel2DacEnabled=!1;a.channel3DacEnabled=!1;a.channel4DacEnabled=!1;a.leftChannelSampleUnsignedByte=127;a.rightChannelSampleUnsignedByte=127;a.mixerVolumeChanged=!1;a.mixerEnabledChanged=!1;a.needToRemixSamples=!1;return a}(),m= |
||||
function(){function a(){}a.batchProcessCycles=function(){return 87<<b.GBCDoubleSpeed};a.updateNR50=function(b){a.NR50LeftMixerVolume=b>>4&7;a.NR50RightMixerVolume=b&7};a.updateNR51=function(b){a.NR51IsChannel4EnabledOnLeftOutput=l(7,b);a.NR51IsChannel3EnabledOnLeftOutput=l(6,b);a.NR51IsChannel2EnabledOnLeftOutput=l(5,b);a.NR51IsChannel1EnabledOnLeftOutput=l(4,b);a.NR51IsChannel4EnabledOnRightOutput=l(3,b);a.NR51IsChannel3EnabledOnRightOutput=l(2,b);a.NR51IsChannel2EnabledOnRightOutput=l(1,b);a.NR51IsChannel1EnabledOnRightOutput= |
||||
l(0,b)};a.updateNR52=function(b){a.NR52IsSoundEnabled=l(7,b)};a.maxFrameSequenceCycles=function(){return 8192<<b.GBCDoubleSpeed};a.maxDownSampleCycles=function(){return b.CLOCK_SPEED()/a.sampleRate};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.NR50LeftMixerVolume;e[1028+50*a.saveStateSlot]=a.NR50RightMixerVolume;e[1032+50*a.saveStateSlot]=a.NR51IsChannel1EnabledOnLeftOutput;e[1033+50*a.saveStateSlot]=a.NR51IsChannel2EnabledOnLeftOutput;e[1034+50*a.saveStateSlot]=a.NR51IsChannel3EnabledOnLeftOutput; |
||||
e[1035+50*a.saveStateSlot]=a.NR51IsChannel4EnabledOnLeftOutput;e[1036+50*a.saveStateSlot]=a.NR51IsChannel1EnabledOnRightOutput;e[1037+50*a.saveStateSlot]=a.NR51IsChannel2EnabledOnRightOutput;e[1038+50*a.saveStateSlot]=a.NR51IsChannel3EnabledOnRightOutput;e[1039+50*a.saveStateSlot]=a.NR51IsChannel4EnabledOnRightOutput;e[1040+50*a.saveStateSlot]=a.NR52IsSoundEnabled;e[1041+50*a.saveStateSlot]=a.frameSequenceCycleCounter;e[1046+50*a.saveStateSlot]=a.frameSequencer;e[1047+50*a.saveStateSlot]=a.downSampleCycleCounter; |
||||
e[1048+50*a.saveStateSlot]=g.channel1Sample;e[1049+50*a.saveStateSlot]=g.channel2Sample;e[1050+50*a.saveStateSlot]=g.channel3Sample;e[1051+50*a.saveStateSlot]=g.channel4Sample;e[1052+50*a.saveStateSlot]=g.channel1DacEnabled;e[1053+50*a.saveStateSlot]=g.channel2DacEnabled;e[1054+50*a.saveStateSlot]=g.channel3DacEnabled;e[1055+50*a.saveStateSlot]=g.channel4DacEnabled;e[1056+50*a.saveStateSlot]=g.leftChannelSampleUnsignedByte;e[1057+50*a.saveStateSlot]=g.rightChannelSampleUnsignedByte;e[1058+50*a.saveStateSlot]= |
||||
g.mixerVolumeChanged;e[1059+50*a.saveStateSlot]=g.mixerEnabledChanged};a.loadState=function(){a.NR50LeftMixerVolume=e[1024+50*a.saveStateSlot];a.NR50RightMixerVolume=e[1028+50*a.saveStateSlot];a.NR51IsChannel1EnabledOnLeftOutput=h(1032+50*a.saveStateSlot);a.NR51IsChannel2EnabledOnLeftOutput=h(1033+50*a.saveStateSlot);a.NR51IsChannel3EnabledOnLeftOutput=h(1034+50*a.saveStateSlot);a.NR51IsChannel4EnabledOnLeftOutput=h(1035+50*a.saveStateSlot);a.NR51IsChannel1EnabledOnRightOutput=h(1036+50*a.saveStateSlot); |
||||
a.NR51IsChannel2EnabledOnRightOutput=h(1037+50*a.saveStateSlot);a.NR51IsChannel3EnabledOnRightOutput=h(1038+50*a.saveStateSlot);a.NR51IsChannel4EnabledOnRightOutput=h(1039+50*a.saveStateSlot);a.NR52IsSoundEnabled=h(1040+50*a.saveStateSlot);a.frameSequenceCycleCounter=e[1041+50*a.saveStateSlot];a.frameSequencer=e[1046+50*a.saveStateSlot];a.downSampleCycleCounter=e[1047+50*a.saveStateSlot];g.channel1Sample=e[1048+50*a.saveStateSlot];g.channel2Sample=e[1049+50*a.saveStateSlot];g.channel3Sample=e[1050+ |
||||
50*a.saveStateSlot];g.channel4Sample=e[1051+50*a.saveStateSlot];g.channel1DacEnabled=h(1052+50*a.saveStateSlot);g.channel2DacEnabled=h(1053+50*a.saveStateSlot);g.channel3DacEnabled=h(1054+50*a.saveStateSlot);g.channel4DacEnabled=h(1055+50*a.saveStateSlot);g.leftChannelSampleUnsignedByte=e[1056+50*a.saveStateSlot];g.rightChannelSampleUnsignedByte=e[1057+50*a.saveStateSlot];g.mixerVolumeChanged=h(1058+50*a.saveStateSlot);g.mixerEnabledChanged=h(1059+50*a.saveStateSlot);Rb()};a.currentCycles=0;a.memoryLocationNR50= |
||||
65316;a.NR50LeftMixerVolume=0;a.NR50RightMixerVolume=0;a.memoryLocationNR51=65317;a.NR51IsChannel1EnabledOnLeftOutput=!0;a.NR51IsChannel2EnabledOnLeftOutput=!0;a.NR51IsChannel3EnabledOnLeftOutput=!0;a.NR51IsChannel4EnabledOnLeftOutput=!0;a.NR51IsChannel1EnabledOnRightOutput=!0;a.NR51IsChannel2EnabledOnRightOutput=!0;a.NR51IsChannel3EnabledOnRightOutput=!0;a.NR51IsChannel4EnabledOnRightOutput=!0;a.memoryLocationNR52=65318;a.NR52IsSoundEnabled=!0;a.memoryLocationChannel3LoadRegisterStart=65328;a.frameSequenceCycleCounter= |
||||
0;a.frameSequencer=0;a.downSampleCycleCounter=0;a.sampleRate=44100;a.audioQueueIndex=0;a.wasmBoyMemoryMaxBufferSize=131072;a.saveStateSlot=6;return a}(),n=function(){function a(){}a.updateInterruptEnabled=function(b){a.isVBlankInterruptEnabled=l(a.bitPositionVBlankInterrupt,b);a.isLcdInterruptEnabled=l(a.bitPositionLcdInterrupt,b);a.isTimerInterruptEnabled=l(a.bitPositionTimerInterrupt,b);a.isSerialInterruptEnabled=l(a.bitPositionSerialInterrupt,b);a.isJoypadInterruptEnabled=l(a.bitPositionJoypadInterrupt, |
||||
b);a.interruptsEnabledValue=b};a.updateInterruptRequested=function(b){a.isVBlankInterruptRequested=l(a.bitPositionVBlankInterrupt,b);a.isLcdInterruptRequested=l(a.bitPositionLcdInterrupt,b);a.isTimerInterruptRequested=l(a.bitPositionTimerInterrupt,b);a.isSerialInterruptRequested=l(a.bitPositionSerialInterrupt,b);a.isJoypadInterruptRequested=l(a.bitPositionJoypadInterrupt,b);a.interruptsRequestedValue=b};a.areInterruptsPending=function(){return 0<(a.interruptsRequestedValue&a.interruptsEnabledValue& |
||||
31)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.masterInterruptSwitch;e[1025+50*a.saveStateSlot]=a.masterInterruptSwitchDelay;e[1040+50*a.saveStateSlot]=a.interruptsEnabledValue;e[1041+50*a.saveStateSlot]=a.isVBlankInterruptEnabled;e[1042+50*a.saveStateSlot]=a.isLcdInterruptEnabled;e[1043+50*a.saveStateSlot]=a.isTimerInterruptEnabled;e[1044+50*a.saveStateSlot]=a.isSerialInterruptEnabled;e[1045+50*a.saveStateSlot]=a.isJoypadInterruptEnabled;e[1056+50*a.saveStateSlot]=a.interruptsRequestedValue; |
||||
e[1057+50*a.saveStateSlot]=a.isVBlankInterruptRequested;e[1058+50*a.saveStateSlot]=a.isLcdInterruptRequested;e[1059+50*a.saveStateSlot]=a.isTimerInterruptRequested;e[1060+50*a.saveStateSlot]=a.isSerialInterruptRequested;e[1061+50*a.saveStateSlot]=a.isJoypadInterruptRequested};a.loadState=function(){a.masterInterruptSwitch=h(1024+50*a.saveStateSlot);a.masterInterruptSwitchDelay=h(1025+50*a.saveStateSlot);a.interruptsEnabledValue=e[1040+50*a.saveStateSlot];a.isVBlankInterruptEnabled=h(1041+50*a.saveStateSlot); |
||||
a.isLcdInterruptEnabled=h(1042+50*a.saveStateSlot);a.isTimerInterruptEnabled=h(1043+50*a.saveStateSlot);a.isSerialInterruptEnabled=h(1044+50*a.saveStateSlot);a.isJoypadInterruptEnabled=h(1045+50*a.saveStateSlot);a.interruptsRequestedValue=e[1056+50*a.saveStateSlot];a.isVBlankInterruptRequested=h(1057+50*a.saveStateSlot);a.isLcdInterruptRequested=h(1058+50*a.saveStateSlot);a.isTimerInterruptRequested=h(1059+50*a.saveStateSlot);a.isSerialInterruptRequested=h(1060+50*a.saveStateSlot);a.isJoypadInterruptRequested= |
||||
h(1061+50*a.saveStateSlot)};a.masterInterruptSwitch=!1;a.masterInterruptSwitchDelay=!1;a.bitPositionVBlankInterrupt=0;a.bitPositionLcdInterrupt=1;a.bitPositionTimerInterrupt=2;a.bitPositionSerialInterrupt=3;a.bitPositionJoypadInterrupt=4;a.memoryLocationInterruptEnabled=65535;a.interruptsEnabledValue=0;a.isVBlankInterruptEnabled=!1;a.isLcdInterruptEnabled=!1;a.isTimerInterruptEnabled=!1;a.isSerialInterruptEnabled=!1;a.isJoypadInterruptEnabled=!1;a.memoryLocationInterruptRequest=65295;a.interruptsRequestedValue= |
||||
0;a.isVBlankInterruptRequested=!1;a.isLcdInterruptRequested=!1;a.isTimerInterruptRequested=!1;a.isSerialInterruptRequested=!1;a.isJoypadInterruptRequested=!1;a.saveStateSlot=2;return a}(),t=function(){function a(){}a.batchProcessCycles=function(){return 256};a.updateDividerRegister=function(){var b=a.dividerRegister;a.dividerRegister=0;f(a.memoryLocationDividerRegister,0);a.timerEnabled&&Tb(b,0)&&zb()};a.updateTimerCounter=function(b){if(a.timerEnabled){if(a.timerCounterWasReset)return;a.timerCounterOverflowDelay&& |
||||
(a.timerCounterOverflowDelay=!1)}a.timerCounter=b};a.updateTimerModulo=function(b){a.timerModulo=b;a.timerEnabled&&a.timerCounterWasReset&&(a.timerCounter=b,a.timerCounterWasReset=!1)};a.updateTimerControl=function(b){var c=a.timerEnabled;a.timerEnabled=l(2,b);b&=3;if(!c){c=Ab(a.timerInputClock);var d=Ab(b),e=a.dividerRegister;(a.timerEnabled?l(c,e):l(c,e)&&l(d,e))&&zb()}a.timerInputClock=b};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.currentCycles;e[1028+50*a.saveStateSlot]=a.dividerRegister; |
||||
e[1032+50*a.saveStateSlot]=a.timerCounter;e[1036+50*a.saveStateSlot]=a.timerCounterOverflowDelay;e[1037+50*a.saveStateSlot]=a.timerCounterWasReset;e[1038+50*a.saveStateSlot]=a.timerCounterMask;e[1042+50*a.saveStateSlot]=a.timerModulo;e[1046+50*a.saveStateSlot]=a.timerEnabled;e[1047+50*a.saveStateSlot]=a.timerInputClock};a.loadState=function(){a.currentCycles=e[1024+50*a.saveStateSlot];a.dividerRegister=e[1028+50*a.saveStateSlot];a.timerCounter=e[1032+50*a.saveStateSlot];a.timerCounterOverflowDelay= |
||||
h(1036+50*a.saveStateSlot);a.timerCounterWasReset=h(1037+50*a.saveStateSlot);a.timerCounterMask=e[1038+50*a.saveStateSlot];a.timerModulo=e[1042+50*a.saveStateSlot];a.timerEnabled=h(1046+50*a.saveStateSlot);a.timerInputClock=e[1047+50*a.saveStateSlot]};a.currentCycles=0;a.memoryLocationDividerRegister=65284;a.dividerRegister=0;a.memoryLocationTimerCounter=65285;a.timerCounter=0;a.timerCounterOverflowDelay=!1;a.timerCounterWasReset=!1;a.timerCounterMask=0;a.memoryLocationTimerModulo=65286;a.timerModulo= |
||||
0;a.memoryLocationTimerControl=65287;a.timerEnabled=!1;a.timerInputClock=0;a.saveStateSlot=5;return a}(),V=function(){function a(){}a.updateTransferControl=function(b){a.isShiftClockInternal=l(0,b);a.isClockSpeedFast=l(1,b);a.transferStartFlag=l(7,b);return!0};a.currentCycles=0;a.memoryLocationSerialTransferData=65281;a.memoryLocationSerialTransferControl=65282;a.numberOfBitsTransferred=0;a.isShiftClockInternal=!1;a.isClockSpeedFast=!1;a.transferStartFlag=!1;return a}(),C=function(){function a(){} |
||||
a.updateJoypad=function(b){a.joypadRegisterFlipped=b^255;a.isDpadType=l(4,a.joypadRegisterFlipped);a.isButtonType=l(5,a.joypadRegisterFlipped)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.joypadRegisterFlipped;e[1025+50*a.saveStateSlot]=a.isDpadType;e[1026+50*a.saveStateSlot]=a.isButtonType};a.loadState=function(){a.joypadRegisterFlipped=e[1024+50*a.saveStateSlot];a.isDpadType=h(1025+50*a.saveStateSlot);a.isButtonType=h(1026+50*a.saveStateSlot)};a.up=!1;a.down=!1;a.left=!1;a.right=!1;a.a= |
||||
!1;a.b=!1;a.select=!1;a.start=!1;a.memoryLocationJoypadRegister=65280;a.joypadRegisterFlipped=0;a.isDpadType=!1;a.isButtonType=!1;a.saveStateSlot=3;return a}(),W=function(){function a(){}a.programCounter=-1;a.readGbMemory=-1;a.writeGbMemory=-1;a.reachedBreakpoint=!1;return a}(),w=function(){function a(){}a.updateLcdStatus=function(b){var c=u(a.memoryLocationLcdStatus);b=b&248|c&7|128;f(a.memoryLocationLcdStatus,b)};a.updateLcdControl=function(b){var c=a.enabled;a.enabled=l(7,b);a.windowTileMapDisplaySelect= |
||||
l(6,b);a.windowDisplayEnabled=l(5,b);a.bgWindowTileDataSelect=l(4,b);a.bgTileMapDisplaySelect=l(3,b);a.tallSpriteSize=l(2,b);a.spriteDisplayEnable=l(1,b);a.bgDisplayEnabled=l(0,b);c&&!a.enabled&&Vb(!0);!c&&a.enabled&&Vb(!1)};a.memoryLocationLcdStatus=65345;a.currentLcdMode=0;a.memoryLocationCoincidenceCompare=65349;a.coincidenceCompare=0;a.memoryLocationLcdControl=65344;a.enabled=!0;a.windowTileMapDisplaySelect=!1;a.windowDisplayEnabled=!1;a.bgWindowTileDataSelect=!1;a.bgTileMapDisplaySelect=!1;a.tallSpriteSize= |
||||
!1;a.spriteDisplayEnable=!1;a.bgDisplayEnabled=!1;return a}(),r=function(){function a(){}a.batchProcessCycles=function(){return a.MAX_CYCLES_PER_SCANLINE()};a.MAX_CYCLES_PER_SCANLINE=function(){return 153===a.scanlineRegister?4<<b.GBCDoubleSpeed:456<<b.GBCDoubleSpeed};a.MIN_CYCLES_SPRITES_LCD_MODE=function(){return 376<<b.GBCDoubleSpeed};a.MIN_CYCLES_TRANSFER_DATA_LCD_MODE=function(){return 249<<b.GBCDoubleSpeed};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.scanlineCycleCounter;e[1028+50*a.saveStateSlot]= |
||||
a.scanlineRegister;e[1029+50*a.saveStateSlot]=a.scrollX;e[1030+50*a.saveStateSlot]=a.scrollY;e[1031+50*a.saveStateSlot]=a.windowX;e[1032+50*a.saveStateSlot]=a.windowY;e[1033+50*a.saveStateSlot]=w.currentLcdMode;e[1034+50*a.saveStateSlot]=w.coincidenceCompare;e[1035+50*a.saveStateSlot]=w.enabled;e[1036+50*a.saveStateSlot]=w.windowTileMapDisplaySelect;e[1037+50*a.saveStateSlot]=w.windowDisplayEnabled;e[1038+50*a.saveStateSlot]=w.bgWindowTileDataSelect;e[1039+50*a.saveStateSlot]=w.bgTileMapDisplaySelect; |
||||
e[1040+50*a.saveStateSlot]=w.tallSpriteSize;e[1041+50*a.saveStateSlot]=w.spriteDisplayEnable;e[1042+50*a.saveStateSlot]=w.bgDisplayEnabled};a.loadState=function(){a.scanlineCycleCounter=e[1024+50*a.saveStateSlot];a.scanlineRegister=e[1028+50*a.scanlineRegister];a.scrollX=e[1029+50*a.saveStateSlot];a.scrollY=e[1030+50*a.saveStateSlot];a.windowX=e[1031+50*a.saveStateSlot];a.windowY=e[1032+50*a.saveStateSlot];w.currentLcdMode=e[1033+50*a.saveStateSlot];w.coincidenceCompare=e[1034+50*a.saveStateSlot]; |
||||
w.enabled=h(1035+50*a.saveStateSlot);w.windowTileMapDisplaySelect=h(1036+50*a.saveStateSlot);w.windowDisplayEnabled=h(1037+50*a.saveStateSlot);w.bgWindowTileDataSelect=h(1038+50*a.saveStateSlot);w.bgTileMapDisplaySelect=h(1039+50*a.saveStateSlot);w.tallSpriteSize=h(1040+50*a.saveStateSlot);w.spriteDisplayEnable=h(1041+50*a.saveStateSlot);w.bgDisplayEnabled=h(1042+50*a.saveStateSlot)};a.currentCycles=0;a.scanlineCycleCounter=0;a.memoryLocationScanlineRegister=65348;a.scanlineRegister=0;a.memoryLocationDmaTransfer= |
||||
65350;a.memoryLocationScrollX=65347;a.scrollX=0;a.memoryLocationScrollY=65346;a.scrollY=0;a.memoryLocationWindowX=65355;a.windowX=0;a.memoryLocationWindowY=65354;a.windowY=0;a.memoryLocationTileMapSelectZeroStart=38912;a.memoryLocationTileMapSelectOneStart=39936;a.memoryLocationTileDataSelectZeroStart=34816;a.memoryLocationTileDataSelectOneStart=32768;a.memoryLocationSpriteAttributesTable=65024;a.memoryLocationBackgroundPalette=65351;a.memoryLocationSpritePaletteOne=65352;a.memoryLocationSpritePaletteTwo= |
||||
65353;a.saveStateSlot=1;return a}(),k=function(){function a(){}a.saveState=function(){e[1024+50*a.saveStateSlot]=a.currentRomBank;e[1026+50*a.saveStateSlot]=a.currentRamBank;e[1028+50*a.saveStateSlot]=a.isRamBankingEnabled;e[1029+50*a.saveStateSlot]=a.isMBC1RomModeEnabled;e[1030+50*a.saveStateSlot]=a.isRomOnly;e[1031+50*a.saveStateSlot]=a.isMBC1;e[1032+50*a.saveStateSlot]=a.isMBC2;e[1033+50*a.saveStateSlot]=a.isMBC3;e[1034+50*a.saveStateSlot]=a.isMBC5;e[1035+50*a.saveStateSlot]=a.DMACycles;e[1039+ |
||||
50*a.saveStateSlot]=a.isHblankHdmaActive;e[1040+50*a.saveStateSlot]=a.hblankHdmaTransferLengthRemaining;e[1044+50*a.saveStateSlot]=a.hblankHdmaSource;e[1048+50*a.saveStateSlot]=a.hblankHdmaDestination};a.loadState=function(){a.currentRomBank=e[1024+50*a.saveStateSlot];a.currentRamBank=e[1026+50*a.saveStateSlot];a.isRamBankingEnabled=h(1028+50*a.saveStateSlot);a.isMBC1RomModeEnabled=h(1029+50*a.saveStateSlot);a.isRomOnly=h(1030+50*a.saveStateSlot);a.isMBC1=h(1031+50*a.saveStateSlot);a.isMBC2=h(1032+ |
||||
50*a.saveStateSlot);a.isMBC3=h(1033+50*a.saveStateSlot);a.isMBC5=h(1034+50*a.saveStateSlot);a.DMACycles=e[1035+50*a.saveStateSlot];a.isHblankHdmaActive=h(1039+50*a.saveStateSlot);a.hblankHdmaTransferLengthRemaining=e[1040+50*a.saveStateSlot];a.hblankHdmaSource=e[1044+50*a.saveStateSlot];a.hblankHdmaDestination=e[1048+50*a.saveStateSlot]};a.cartridgeRomLocation=0;a.switchableCartridgeRomLocation=16384;a.videoRamLocation=32768;a.cartridgeRamLocation=40960;a.internalRamBankZeroLocation=49152;a.internalRamBankOneLocation= |
||||
53248;a.echoRamLocation=57344;a.spriteInformationTableLocation=65024;a.spriteInformationTableLocationEnd=65183;a.unusableMemoryLocation=65184;a.unusableMemoryEndLocation=65279;a.currentRomBank=0;a.currentRamBank=0;a.isRamBankingEnabled=!1;a.isMBC1RomModeEnabled=!0;a.isRomOnly=!0;a.isMBC1=!1;a.isMBC2=!1;a.isMBC3=!1;a.isMBC5=!1;a.memoryLocationHdmaSourceHigh=65361;a.memoryLocationHdmaSourceLow=65362;a.memoryLocationHdmaDestinationHigh=65363;a.memoryLocationHdmaDestinationLow=65364;a.memoryLocationHdmaTrigger= |
||||
65365;a.DMACycles=0;a.isHblankHdmaActive=!1;a.hblankHdmaTransferLengthRemaining=0;a.hblankHdmaSource=0;a.hblankHdmaDestination=0;a.memoryLocationGBCVRAMBank=65359;a.memoryLocationGBCWRAMBank=65392;a.saveStateSlot=4;return a}(),b=function(){function a(){}a.CLOCK_SPEED=function(){return 4194304<<a.GBCDoubleSpeed};a.MAX_CYCLES_PER_FRAME=function(){return 70224<<a.GBCDoubleSpeed};a.enableHalt=function(){n.masterInterruptSwitch?a.isHaltNormal=!0:0===(n.interruptsEnabledValue&n.interruptsRequestedValue& |
||||
31)?a.isHaltNoJump=!0:a.isHaltBug=!0};a.exitHaltAndStop=function(){a.isHaltNoJump=!1;a.isHaltNormal=!1;a.isHaltBug=!1;a.isStopped=!1};a.isHalted=function(){return a.isHaltNormal||a.isHaltNoJump};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.registerA;e[1025+50*a.saveStateSlot]=a.registerB;e[1026+50*a.saveStateSlot]=a.registerC;e[1027+50*a.saveStateSlot]=a.registerD;e[1028+50*a.saveStateSlot]=a.registerE;e[1029+50*a.saveStateSlot]=a.registerH;e[1030+50*a.saveStateSlot]=a.registerL;e[1031+50* |
||||
a.saveStateSlot]=a.registerF;e[1032+50*a.saveStateSlot]=a.stackPointer;e[1034+50*a.saveStateSlot]=a.programCounter;e[1036+50*a.saveStateSlot]=a.currentCycles;e[1041+50*a.saveStateSlot]=a.isHaltNormal;e[1042+50*a.saveStateSlot]=a.isHaltNoJump;e[1043+50*a.saveStateSlot]=a.isHaltBug;e[1044+50*a.saveStateSlot]=a.isStopped;e[1045+50*a.saveStateSlot]=a.BootROMEnabled;e[1046+50*a.saveStateSlot]=a.GBCEnabled;e[1047+50*a.saveStateSlot]=a.GBCDoubleSpeed};a.loadState=function(){a.registerA=e[1024+50*a.saveStateSlot]; |
||||
a.registerB=e[1025+50*a.saveStateSlot];a.registerC=e[1026+50*a.saveStateSlot];a.registerD=e[1027+50*a.saveStateSlot];a.registerE=e[1028+50*a.saveStateSlot];a.registerH=e[1029+50*a.saveStateSlot];a.registerL=e[1030+50*a.saveStateSlot];a.registerF=e[1031+50*a.saveStateSlot];a.stackPointer=e[1032+50*a.saveStateSlot];a.programCounter=e[1034+50*a.saveStateSlot];a.currentCycles=e[1036+50*a.saveStateSlot];a.isHaltNormal=h(1041+50*a.saveStateSlot);a.isHaltNoJump=h(1042+50*a.saveStateSlot);a.isHaltBug=h(1043+ |
||||
50*a.saveStateSlot);a.isStopped=h(1044+50*a.saveStateSlot);a.BootROMEnabled=h(1045+50*a.saveStateSlot);a.GBCEnabled=h(1046+50*a.saveStateSlot);a.GBCDoubleSpeed=h(1047+50*a.saveStateSlot)};a.memoryLocationBootROMSwitch=65360;a.BootROMEnabled=!1;a.GBCEnabled=!1;a.memoryLocationSpeedSwitch=65357;a.GBCDoubleSpeed=!1;a.registerA=0;a.registerB=0;a.registerC=0;a.registerD=0;a.registerE=0;a.registerH=0;a.registerL=0;a.registerF=0;a.stackPointer=0;a.programCounter=0;a.currentCycles=0;a.isHaltNormal=!1;a.isHaltNoJump= |
||||
!1;a.isHaltBug=!1;a.isStopped=!1;a.saveStateSlot=0;return a}(),Z=function(){function a(){}a.cyclesPerCycleSet=2E9;a.cycleSets=0;a.cycles=0;return a}(),S=function(){function a(){}a.stepsPerStepSet=2E9;a.stepSets=0;a.steps=0;a.RESPONSE_CONDITION_ERROR=-1;a.RESPONSE_CONDITION_FRAME=0;a.RESPONSE_CONDITION_AUDIO=1;a.RESPONSE_CONDITION_BREAKPOINT=2;return a}();fb.size()<Lb&&fb.grow(Lb-fb.size());var eb=!1,xc=Object.freeze({memory:fb,config:function(a,c,e,l,h,p,q,w,O,x){M.enableBootRom=0<a;M.useGbcWhenAvailable= |
||||
0<c;M.audioBatchProcessing=0<e;M.graphicsBatchProcessing=0<l;M.timersBatchProcessing=0<h;M.graphicsDisableScanlineRendering=0<p;M.audioAccumulateSamples=0<q;M.tileRendering=0<w;M.tileCaching=0<O;M.enableAudioDebugging=0<x;a=u(323);b.GBCEnabled=192===a||M.useGbcWhenAvailable&&128===a?!0:!1;eb=!1;Z.cyclesPerCycleSet=2E9;Z.cycleSets=0;Z.cycles=0;S.stepsPerStepSet=2E9;S.stepSets=0;S.steps=0;b.BootROMEnabled=M.enableBootRom?!0:!1;b.GBCDoubleSpeed=!1;b.registerA=0;b.registerB=0;b.registerC=0;b.registerD= |
||||
0;b.registerE=0;b.registerH=0;b.registerL=0;b.registerF=0;b.stackPointer=0;b.programCounter=0;b.currentCycles=0;b.isHaltNormal=!1;b.isHaltNoJump=!1;b.isHaltBug=!1;b.isStopped=!1;b.BootROMEnabled||(b.GBCEnabled?(b.registerA=17,b.registerF=128,b.registerB=0,b.registerC=0,b.registerD=255,b.registerE=86,b.registerH=0,b.registerL=13):(b.registerA=1,b.registerF=176,b.registerB=0,b.registerC=19,b.registerD=0,b.registerE=216,b.registerH=1,b.registerL=77),b.programCounter=256,b.stackPointer=65534);k.isRamBankingEnabled= |
||||
!1;k.isMBC1RomModeEnabled=!0;a=u(327);k.isRomOnly=0===a;k.isMBC1=1<=a&&3>=a;k.isMBC2=5<=a&&6>=a;k.isMBC3=15<=a&&19>=a;k.isMBC5=25<=a&&30>=a;k.currentRomBank=1;k.currentRamBank=0;f(k.memoryLocationGBCVRAMBank,0);f(k.memoryLocationGBCWRAMBank,1);f(65361,255);f(65362,255);f(65363,255);f(65364,255);f(65365,255);r.currentCycles=0;r.scanlineCycleCounter=0;r.scanlineRegister=0;r.scrollX=0;r.scrollY=0;r.windowX=0;r.windowY=0;r.scanlineRegister=144;b.GBCEnabled?(f(65345,129),f(65348,144),f(65351,252)):(f(65345, |
||||
133),f(65350,255),f(65351,252),f(65352,255),f(65353,255));r.scanlineRegister=144;f(65344,145);f(65359,0);f(65392,1);b.BootROMEnabled&&(b.GBCEnabled?(r.scanlineRegister=0,f(65344,0),f(65345,128),f(65348,0)):(r.scanlineRegister=0,f(65344,0),f(65345,132)));Mb(0);if(!b.GBCEnabled&&(!b.BootROMEnabled||b.GBCEnabled)){a=0;for(c=308;323>=c;c++)a+=u(c);switch(a&255){case 136:d.bgWhite=pa.bgWhite;d.bgLightGrey=pa.bgLightGrey;d.bgDarkGrey=pa.bgDarkGrey;d.bgBlack=pa.bgBlack;d.obj0White=pa.obj0White;d.obj0LightGrey= |
||||
pa.obj0LightGrey;d.obj0DarkGrey=pa.obj0DarkGrey;d.obj0Black=pa.obj0Black;d.obj1White=pa.obj1White;d.obj1LightGrey=pa.obj1LightGrey;d.obj1DarkGrey=pa.obj1DarkGrey;d.obj1Black=pa.obj1Black;break;case 97:d.bgWhite=qa.bgWhite;d.bgLightGrey=qa.bgLightGrey;d.bgDarkGrey=qa.bgDarkGrey;d.bgBlack=qa.bgBlack;d.obj0White=qa.obj0White;d.obj0LightGrey=qa.obj0LightGrey;d.obj0DarkGrey=qa.obj0DarkGrey;d.obj0Black=qa.obj0Black;d.obj1White=qa.obj1White;d.obj1LightGrey=qa.obj1LightGrey;d.obj1DarkGrey=qa.obj1DarkGrey; |
||||
d.obj1Black=qa.obj1Black;break;case 20:d.bgWhite=ra.bgWhite;d.bgLightGrey=ra.bgLightGrey;d.bgDarkGrey=ra.bgDarkGrey;d.bgBlack=ra.bgBlack;d.obj0White=ra.obj0White;d.obj0LightGrey=ra.obj0LightGrey;d.obj0DarkGrey=ra.obj0DarkGrey;d.obj0Black=ra.obj0Black;d.obj1White=ra.obj1White;d.obj1LightGrey=ra.obj1LightGrey;d.obj1DarkGrey=ra.obj1DarkGrey;d.obj1Black=ra.obj1Black;break;case 70:d.bgWhite=sa.bgWhite;d.bgLightGrey=sa.bgLightGrey;d.bgDarkGrey=sa.bgDarkGrey;d.bgBlack=sa.bgBlack;d.obj0White=sa.obj0White; |
||||
d.obj0LightGrey=sa.obj0LightGrey;d.obj0DarkGrey=sa.obj0DarkGrey;d.obj0Black=sa.obj0Black;d.obj1White=sa.obj1White;d.obj1LightGrey=sa.obj1LightGrey;d.obj1DarkGrey=sa.obj1DarkGrey;d.obj1Black=sa.obj1Black;break;case 89:case 198:d.bgWhite=ta.bgWhite;d.bgLightGrey=ta.bgLightGrey;d.bgDarkGrey=ta.bgDarkGrey;d.bgBlack=ta.bgBlack;d.obj0White=ta.obj0White;d.obj0LightGrey=ta.obj0LightGrey;d.obj0DarkGrey=ta.obj0DarkGrey;d.obj0Black=ta.obj0Black;d.obj1White=ta.obj1White;d.obj1LightGrey=ta.obj1LightGrey;d.obj1DarkGrey= |
||||
ta.obj1DarkGrey;d.obj1Black=ta.obj1Black;break;case 134:case 168:d.bgWhite=ua.bgWhite;d.bgLightGrey=ua.bgLightGrey;d.bgDarkGrey=ua.bgDarkGrey;d.bgBlack=ua.bgBlack;d.obj0White=ua.obj0White;d.obj0LightGrey=ua.obj0LightGrey;d.obj0DarkGrey=ua.obj0DarkGrey;d.obj0Black=ua.obj0Black;d.obj1White=ua.obj1White;d.obj1LightGrey=ua.obj1LightGrey;d.obj1DarkGrey=ua.obj1DarkGrey;d.obj1Black=ua.obj1Black;break;case 191:case 206:case 209:case 240:d.bgWhite=va.bgWhite;d.bgLightGrey=va.bgLightGrey;d.bgDarkGrey=va.bgDarkGrey; |
||||
d.bgBlack=va.bgBlack;d.obj0White=va.obj0White;d.obj0LightGrey=va.obj0LightGrey;d.obj0DarkGrey=va.obj0DarkGrey;d.obj0Black=va.obj0Black;d.obj1White=va.obj1White;d.obj1LightGrey=va.obj1LightGrey;d.obj1DarkGrey=va.obj1DarkGrey;d.obj1Black=va.obj1Black;break;case 39:case 73:case 92:case 179:d.bgWhite=wa.bgWhite;d.bgLightGrey=wa.bgLightGrey;d.bgDarkGrey=wa.bgDarkGrey;d.bgBlack=wa.bgBlack;d.obj0White=wa.obj0White;d.obj0LightGrey=wa.obj0LightGrey;d.obj0DarkGrey=wa.obj0DarkGrey;d.obj0Black=wa.obj0Black;d.obj1White= |
||||
wa.obj1White;d.obj1LightGrey=wa.obj1LightGrey;d.obj1DarkGrey=wa.obj1DarkGrey;d.obj1Black=wa.obj1Black;break;case 201:d.bgWhite=xa.bgWhite;d.bgLightGrey=xa.bgLightGrey;d.bgDarkGrey=xa.bgDarkGrey;d.bgBlack=xa.bgBlack;d.obj0White=xa.obj0White;d.obj0LightGrey=xa.obj0LightGrey;d.obj0DarkGrey=xa.obj0DarkGrey;d.obj0Black=xa.obj0Black;d.obj1White=xa.obj1White;d.obj1LightGrey=xa.obj1LightGrey;d.obj1DarkGrey=xa.obj1DarkGrey;d.obj1Black=xa.obj1Black;break;case 112:d.bgWhite=ya.bgWhite;d.bgLightGrey=ya.bgLightGrey; |
||||
d.bgDarkGrey=ya.bgDarkGrey;d.bgBlack=ya.bgBlack;d.obj0White=ya.obj0White;d.obj0LightGrey=ya.obj0LightGrey;d.obj0DarkGrey=ya.obj0DarkGrey;d.obj0Black=ya.obj0Black;d.obj1White=ya.obj1White;d.obj1LightGrey=ya.obj1LightGrey;d.obj1DarkGrey=ya.obj1DarkGrey;d.obj1Black=ya.obj1Black;break;case 70:d.bgWhite=za.bgWhite;d.bgLightGrey=za.bgLightGrey;d.bgDarkGrey=za.bgDarkGrey;d.bgBlack=za.bgBlack;d.obj0White=za.obj0White;d.obj0LightGrey=za.obj0LightGrey;d.obj0DarkGrey=za.obj0DarkGrey;d.obj0Black=za.obj0Black; |
||||
d.obj1White=za.obj1White;d.obj1LightGrey=za.obj1LightGrey;d.obj1DarkGrey=za.obj1DarkGrey;d.obj1Black=za.obj1Black;break;case 211:d.bgWhite=Aa.bgWhite,d.bgLightGrey=Aa.bgLightGrey,d.bgDarkGrey=Aa.bgDarkGrey,d.bgBlack=Aa.bgBlack,d.obj0White=Aa.obj0White,d.obj0LightGrey=Aa.obj0LightGrey,d.obj0DarkGrey=Aa.obj0DarkGrey,d.obj0Black=Aa.obj0Black,d.obj1White=Aa.obj1White,d.obj1LightGrey=Aa.obj1LightGrey,d.obj1DarkGrey=Aa.obj1DarkGrey,d.obj1Black=Aa.obj1Black}}b.GBCEnabled?(f(65384,192),f(65385,255),f(65386, |
||||
193),f(65387,13)):(f(65384,255),f(65385,255),f(65386,255),f(65387,255));b.BootROMEnabled&&b.GBCEnabled&&(f(65385,32),f(65387,138));m.currentCycles=0;m.NR50LeftMixerVolume=0;m.NR50RightMixerVolume=0;m.NR51IsChannel1EnabledOnLeftOutput=!0;m.NR51IsChannel2EnabledOnLeftOutput=!0;m.NR51IsChannel3EnabledOnLeftOutput=!0;m.NR51IsChannel4EnabledOnLeftOutput=!0;m.NR51IsChannel1EnabledOnRightOutput=!0;m.NR51IsChannel2EnabledOnRightOutput=!0;m.NR51IsChannel3EnabledOnRightOutput=!0;m.NR51IsChannel4EnabledOnRightOutput= |
||||
!0;m.NR52IsSoundEnabled=!0;m.frameSequenceCycleCounter=0;m.downSampleCycleCounter=0;m.frameSequencer=0;m.audioQueueIndex=0;y.initialize();A.initialize();v.initialize();D.initialize();f(m.memoryLocationNR50,119);m.updateNR50(119);f(m.memoryLocationNR51,243);m.updateNR51(243);f(m.memoryLocationNR52,241);m.updateNR52(241);b.BootROMEnabled&&(f(m.memoryLocationNR50,0),m.updateNR50(0),f(m.memoryLocationNR51,0),m.updateNR51(0),f(m.memoryLocationNR52,112),m.updateNR52(112));g.channel1Sample=15;g.channel2Sample= |
||||
15;g.channel3Sample=15;g.channel4Sample=15;g.channel1DacEnabled=!1;g.channel2DacEnabled=!1;g.channel3DacEnabled=!1;g.channel4DacEnabled=!1;g.leftChannelSampleUnsignedByte=127;g.rightChannelSampleUnsignedByte=127;g.mixerVolumeChanged=!0;g.mixerEnabledChanged=!0;g.needToRemixSamples=!1;n.updateInterruptEnabled(0);f(n.memoryLocationInterruptEnabled,n.interruptsEnabledValue);n.updateInterruptRequested(225);f(n.memoryLocationInterruptRequest,n.interruptsRequestedValue);t.currentCycles=0;t.dividerRegister= |
||||
0;t.timerCounter=0;t.timerModulo=0;t.timerEnabled=!1;t.timerInputClock=0;t.timerCounterOverflowDelay=!1;t.timerCounterWasReset=!1;b.GBCEnabled?(f(65284,30),t.dividerRegister=7840):(f(65284,171),t.dividerRegister=43980);f(65287,248);t.timerInputClock=248;b.BootROMEnabled&&!b.GBCEnabled&&(f(65284,0),t.dividerRegister=4);V.currentCycles=0;V.numberOfBitsTransferred=0;b.GBCEnabled?(f(65282,124),V.updateTransferControl(124)):(f(65282,126),V.updateTransferControl(126));b.GBCEnabled?(f(65392,248),f(65359, |
||||
254),f(65357,126),f(65280,207),f(65295,225),f(65388,254),f(65397,143)):(f(65392,255),f(65359,255),f(65357,255),f(65280,207),f(65295,225))},hasCoreStarted:function(){return eb},saveState:function(){b.saveState();r.saveState();n.saveState();C.saveState();k.saveState();t.saveState();m.saveState();y.saveState();A.saveState();v.saveState();D.saveState();eb=!1},loadState:function(){b.loadState();r.loadState();n.loadState();C.loadState();k.loadState();t.loadState();m.loadState();y.loadState();A.loadState(); |
||||
v.loadState();D.loadState();eb=!1;Z.cyclesPerCycleSet=2E9;Z.cycleSets=0;Z.cycles=0;S.stepsPerStepSet=2E9;S.stepSets=0;S.steps=0},isGBC:function(){return b.GBCEnabled},getStepsPerStepSet:function(){return S.stepsPerStepSet},getStepSets:function(){return S.stepSets},getSteps:function(){return S.steps},executeMultipleFrames:function(a){for(var b=0,d=0;d<a&&0<=b;)b=$b(),d+=1;return 0>b?b:0},executeFrame:$b,executeFrameAndCheckAudio:function(a){void 0===a&&(a=0);return Ib(!0,a)},executeUntilCondition:Ib, |
||||
executeStep:ac,getCyclesPerCycleSet:function(){return Z.cyclesPerCycleSet},getCycleSets:function(){return Z.cycleSets},getCycles:function(){return Z.cycles},setJoypadState:function(a,b,d,e,f,l,g,h){0<a?Na(0):Ca(0,!1);0<b?Na(1):Ca(1,!1);0<d?Na(2):Ca(2,!1);0<e?Na(3):Ca(3,!1);0<f?Na(4):Ca(4,!1);0<l?Na(5):Ca(5,!1);0<g?Na(6):Ca(6,!1);0<h?Na(7):Ca(7,!1)},getNumberOfSamplesInAudioBuffer:Qb,clearAudioBuffer:Rb,setManualColorizationPalette:Mb,WASMBOY_MEMORY_LOCATION:0,WASMBOY_MEMORY_SIZE:bc,WASMBOY_WASM_PAGES:Lb, |
||||
ASSEMBLYSCRIPT_MEMORY_LOCATION:0,ASSEMBLYSCRIPT_MEMORY_SIZE:1024,WASMBOY_STATE_LOCATION:1024,WASMBOY_STATE_SIZE:1024,GAMEBOY_INTERNAL_MEMORY_LOCATION:2048,GAMEBOY_INTERNAL_MEMORY_SIZE:uc,VIDEO_RAM_LOCATION:2048,VIDEO_RAM_SIZE:16384,WORK_RAM_LOCATION:18432,WORK_RAM_SIZE:32768,OTHER_GAMEBOY_INTERNAL_MEMORY_LOCATION:51200,OTHER_GAMEBOY_INTERNAL_MEMORY_SIZE:16384,GRAPHICS_OUTPUT_LOCATION:vc,GRAPHICS_OUTPUT_SIZE:wc,GBC_PALETTE_LOCATION:Ua,GBC_PALETTE_SIZE:128,BG_PRIORITY_MAP_LOCATION:Va,BG_PRIORITY_MAP_SIZE:23552, |
||||
FRAME_LOCATION:Za,FRAME_SIZE:93184,BACKGROUND_MAP_LOCATION:ob,BACKGROUND_MAP_SIZE:196608,TILE_DATA_LOCATION:Jb,TILE_DATA_SIZE:147456,OAM_TILES_LOCATION:pb,OAM_TILES_SIZE:15360,AUDIO_BUFFER_LOCATION:kb,AUDIO_BUFFER_SIZE:131072,CHANNEL_1_BUFFER_LOCATION:ub,CHANNEL_1_BUFFER_SIZE:131072,CHANNEL_2_BUFFER_LOCATION:vb,CHANNEL_2_BUFFER_SIZE:131072,CHANNEL_3_BUFFER_LOCATION:wb,CHANNEL_3_BUFFER_SIZE:131072,CHANNEL_4_BUFFER_LOCATION:xb,CHANNEL_4_BUFFER_SIZE:131072,CARTRIDGE_RAM_LOCATION:Fb,CARTRIDGE_RAM_SIZE:131072, |
||||
BOOT_ROM_LOCATION:mb,BOOT_ROM_SIZE:2560,CARTRIDGE_ROM_LOCATION:nb,CARTRIDGE_ROM_SIZE:8258560,DEBUG_GAMEBOY_MEMORY_LOCATION:Kb,DEBUG_GAMEBOY_MEMORY_SIZE:65535,getWasmBoyOffsetFromGameBoyOffset:Eb,setProgramCounterBreakpoint:function(a){W.programCounter=a},resetProgramCounterBreakpoint:function(){W.programCounter=-1},setReadGbMemoryBreakpoint:function(a){W.readGbMemory=a},resetReadGbMemoryBreakpoint:function(){W.readGbMemory=-1},setWriteGbMemoryBreakpoint:function(a){W.writeGbMemory=a},resetWriteGbMemoryBreakpoint:function(){W.writeGbMemory= |
||||
-1},getRegisterA:function(){return b.registerA},getRegisterB:function(){return b.registerB},getRegisterC:function(){return b.registerC},getRegisterD:function(){return b.registerD},getRegisterE:function(){return b.registerE},getRegisterH:function(){return b.registerH},getRegisterL:function(){return b.registerL},getRegisterF:function(){return b.registerF},getProgramCounter:function(){return b.programCounter},getStackPointer:function(){return b.stackPointer},getOpcodeAtProgramCounter:function(){return u(b.programCounter)}, |
||||
getLY:function(){return r.scanlineRegister},getScrollX:function(){return r.scrollX},getScrollY:function(){return r.scrollY},getWindowX:function(){return r.windowX},getWindowY:function(){return r.windowY},drawBackgroundMapToWasmMemory:function(a){var c=r.memoryLocationTileDataSelectZeroStart;w.bgWindowTileDataSelect&&(c=r.memoryLocationTileDataSelectOneStart);var d=r.memoryLocationTileMapSelectZeroStart;w.bgTileMapDisplaySelect&&(d=r.memoryLocationTileMapSelectOneStart);for(var f=0;256>f;f++)for(var g= |
||||
0;256>g;g++){var h=f,m=g,k=d+32*(h>>3)+(m>>3),n=T(k,0);n=ab(c,n);var p=h%8;h=m%8;h=7-h;m=0;b.GBCEnabled&&0<a&&(m=T(k,1));l(6,m)&&(p=7-p);var q=0;l(3,m)&&(q=1);k=T(n+2*p,q);n=T(n+2*p+1,q);p=0;l(h,n)&&(p+=1,p<<=1);l(h,k)&&(p+=1);n=3*(256*f+g);b.GBCEnabled&&0<a?(k=hb(m&7,p,!1),m=oa(0,k),h=oa(1,k),k=oa(2,k),n=ob+n,e[n]=m,e[n+1]=h,e[n+2]=k):(m=gb(p,r.memoryLocationBackgroundPalette),n=ob+n,e[n+0]=(m&16711680)>>16,e[n+1]=(m&65280)>>8,e[n+2]=m&255)}},drawTileDataToWasmMemory:function(){for(var a=0;23>a;a++)for(var c= |
||||
0;31>c;c++){var d=0;15<c&&(d=1);var e=a;15<a&&(e-=15);e<<=4;e=15<c?e+(c-15):e+c;var f=r.memoryLocationTileDataSelectOneStart;15<a&&(f=r.memoryLocationTileDataSelectZeroStart);for(var g=r.memoryLocationBackgroundPalette,n=-1,m=-1,h=0;8>h;h++)for(var k=0;5>k;k++){var p=4*(8*k+h),q=u(r.memoryLocationSpriteAttributesTable+p+2);e===q&&(p=u(r.memoryLocationSpriteAttributesTable+p+3),q=0,b.GBCEnabled&&l(3,p)&&(q=1),q===d&&(m=p,h=8,k=5,g=r.memoryLocationSpritePaletteOne,l(4,m)&&(g=r.memoryLocationSpritePaletteTwo)))}if(b.GBCEnabled&& |
||||
0>m){h=r.memoryLocationTileMapSelectZeroStart;w.bgTileMapDisplaySelect&&(h=r.memoryLocationTileMapSelectOneStart);k=-1;for(p=0;32>p;p++)for(q=0;32>q;q++){var t=h+32*q+p,v=T(t,0);e===v&&(k=t,q=p=32)}0<=k&&(n=T(k,1))}for(h=0;8>h;h++)rb(e,f,d,0,7,h,8*c,8*a+h,248,Jb,!1,g,n,m)}},drawOamToWasmMemory:function(){for(var a=0;8>a;a++)for(var c=0;5>c;c++){var d=4*(8*c+a);u(r.memoryLocationSpriteAttributesTable+d);u(r.memoryLocationSpriteAttributesTable+d+1);var e=u(r.memoryLocationSpriteAttributesTable+d+2), |
||||
f=1;w.tallSpriteSize&&(1===e%2&&--e,f+=1);d=u(r.memoryLocationSpriteAttributesTable+d+3);var g=0;b.GBCEnabled&&l(3,d)&&(g=1);var h=r.memoryLocationSpritePaletteOne;l(4,d)&&(h=r.memoryLocationSpritePaletteTwo);for(var k=0;k<f;k++)for(var m=0;8>m;m++)rb(e+k,r.memoryLocationTileDataSelectOneStart,g,0,7,m,8*a,16*c+m+8*k,64,pb,!1,h,-1,d)}},getDIV:function(){return t.dividerRegister},getTIMA:function(){return t.timerCounter},getTMA:function(){return t.timerModulo},getTAC:function(){var a=t.timerInputClock; |
||||
t.timerEnabled&&(a|=4);return a},updateDebugGBMemory:function(){for(var a=0;65535>a;a++){var b=Bb(a);e[Kb+a]=b}W.reachedBreakpoint=!1}});return async()=>({instance:{exports:xc},byteMemory:fb.wasmByteMemory,type:"TypeScript"})}) |
||||
//# sourceMappingURL=getWasmBoyTsCore.closure.umd.js.map
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 262 B |
@ -0,0 +1,295 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="it"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
<title>Mice! (WebAssembly GameBoy)</title> |
||||
<link rel="icon" type="image/png" href="favicon.png"> |
||||
<style> |
||||
body { |
||||
background-color: #121212; |
||||
color: #eee; |
||||
font-family: Arial, sans-serif; |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
justify-content: center; |
||||
height: 100vh; |
||||
margin: 0; |
||||
} |
||||
canvas { |
||||
background-color: #000; |
||||
image-rendering: pixelated; |
||||
width: 320px; |
||||
height: 288px; |
||||
border: 5px solid #444; |
||||
border-radius: 5px; |
||||
box-shadow: 0 4px 20px rgba(0,0,0,0.6); |
||||
} |
||||
.controls { |
||||
margin-top: 20px; |
||||
background: #222; |
||||
padding: 15px; |
||||
border-radius: 8px; |
||||
font-size: 14px; |
||||
text-align: center; |
||||
} |
||||
.key { |
||||
background: #444; |
||||
padding: 3px 6px; |
||||
border-radius: 4px; |
||||
font-family: monospace; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
/* Controlli Mobile */ |
||||
#mobile-controls { |
||||
display: none; |
||||
margin-top: 20px; |
||||
gap: 20px; |
||||
} |
||||
@media (max-width: 600px) { |
||||
#mobile-controls { |
||||
display: flex; |
||||
} |
||||
.controls { |
||||
display: none; /* Nasconde istruzioni testuali su mobile */ |
||||
} |
||||
} |
||||
.btn { |
||||
background: #555; |
||||
color: white; |
||||
border: none; |
||||
font-weight: bold; |
||||
font-size: 16px; |
||||
touch-action: manipulation; |
||||
user-select: none; |
||||
} |
||||
.dpad { |
||||
display: grid; |
||||
grid-template-columns: 50px 50px 50px; |
||||
grid-template-rows: 50px 50px 50px; |
||||
gap: 5px; |
||||
} |
||||
.dpad .btn { border-radius: 8px; } |
||||
.d-up { grid-column: 2; grid-row: 1; } |
||||
.d-left { grid-column: 1; grid-row: 2; } |
||||
.d-right { grid-column: 3; grid-row: 2; } |
||||
.d-down { grid-column: 2; grid-row: 3; } |
||||
|
||||
.action-btns { |
||||
display: flex; |
||||
align-items: center; |
||||
gap: 15px; |
||||
} |
||||
.btn-round { |
||||
width: 50px; |
||||
height: 50px; |
||||
border-radius: 50%; |
||||
} |
||||
.btn-pill { |
||||
padding: 10px 15px; |
||||
border-radius: 20px; |
||||
font-size: 12px; |
||||
} |
||||
.start-select { |
||||
display: flex; |
||||
flex-direction: column; |
||||
gap: 10px; |
||||
} |
||||
|
||||
/* Fullscreen Container & Button */ |
||||
#game-container { |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
justify-content: center; |
||||
position: relative; |
||||
} |
||||
#game-container:fullscreen { |
||||
width: 100vw; |
||||
height: 100vh; |
||||
background-color: #121212; |
||||
padding: 20px; |
||||
box-sizing: border-box; |
||||
gap: 20px; |
||||
} |
||||
#game-container:fullscreen canvas { |
||||
width: 80vmin; |
||||
height: 72vmin; |
||||
max-width: 100%; |
||||
max-height: 75vh; |
||||
border-color: #666; |
||||
} |
||||
.btn-fs { |
||||
margin-top: 15px; |
||||
background: #2a2a2a; |
||||
color: #eee; |
||||
border: 1px solid #444; |
||||
padding: 8px 16px; |
||||
border-radius: 20px; |
||||
cursor: pointer; |
||||
font-size: 14px; |
||||
font-weight: bold; |
||||
display: flex; |
||||
align-items: center; |
||||
gap: 8px; |
||||
transition: background 0.2s, border-color 0.2s; |
||||
} |
||||
.btn-fs:hover { |
||||
background: #3a3a3a; |
||||
border-color: #666; |
||||
color: #fff; |
||||
} |
||||
</style> |
||||
</head> |
||||
<body> |
||||
|
||||
<h1>Mice!</h1> |
||||
|
||||
<div id="game-container"> |
||||
<canvas id="gameboy"></canvas> |
||||
|
||||
<button class="btn-fs" id="btn-fullscreen"> |
||||
Schermo Intero ⛶ |
||||
</button> |
||||
|
||||
<!-- Controlli Mobile a Schermo (dentro il container per mantenerli visibili in fullscreen) --> |
||||
<div id="mobile-controls"> |
||||
<div class="dpad"> |
||||
<button class="btn d-up" id="btn-up">U</button> |
||||
<button class="btn d-left" id="btn-left">L</button> |
||||
<button class="btn d-right" id="btn-right">R</button> |
||||
<button class="btn d-down" id="btn-down">D</button> |
||||
</div> |
||||
<div class="start-select"> |
||||
<button class="btn btn-pill" id="btn-select">SELECT</button> |
||||
<button class="btn btn-pill" id="btn-start">START</button> |
||||
</div> |
||||
<div class="action-btns"> |
||||
<button class="btn btn-round" id="btn-b">B</button> |
||||
<button class="btn btn-round" id="btn-a">A</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="controls" id="keyboard-controls"> |
||||
<strong>Comandi Tastiera:</strong><br><br> |
||||
<span class="key">Frecce</span> Muovi Cursore<br> |
||||
<span class="key">A</span> Bottone A (Conferma)<br> |
||||
<span class="key">S</span> Bottone B (Spara)<br> |
||||
<span class="key">Invio</span> Start<br> |
||||
<span class="key">Backspace</span> Select |
||||
</div> |
||||
|
||||
<!-- WasmBoy: emulatore Game Boy in WebAssembly --> |
||||
<script src="wasmboy.wasm.iife.js"></script> |
||||
<script> |
||||
const canvas = document.getElementById('gameboy'); |
||||
// Il bundle IIFE espone la libreria sotto WasmBoy.WasmBoy |
||||
const wasmBoyObj = WasmBoy.WasmBoy || WasmBoy; |
||||
|
||||
// WasmBoy v0.7 API: setCanvas → loadROM → play |
||||
wasmBoyObj.setCanvas(canvas); |
||||
|
||||
fetch('mice.gb') |
||||
.then(res => res.arrayBuffer()) |
||||
.then(romBuffer => { |
||||
console.log("ROM caricata, avvio emulatore..."); |
||||
return wasmBoyObj.loadROM(new Uint8Array(romBuffer)); |
||||
}) |
||||
.then(() => { |
||||
console.log("Avvio..."); |
||||
return wasmBoyObj.play(); |
||||
}) |
||||
.catch(err => { |
||||
console.error("Errore:", err); |
||||
}); |
||||
|
||||
// WasmBoy usa Z=A, X=B, Enter=Start, Space=Select. |
||||
// Mappiamo i tasti richiesti per forzare l'evento corretto. |
||||
const keyMap = { |
||||
'a': { key: 'z', code: 'KeyZ' }, |
||||
'A': { key: 'z', code: 'KeyZ' }, |
||||
's': { key: 'x', code: 'KeyX' }, |
||||
'S': { key: 'x', code: 'KeyX' }, |
||||
'Backspace': { key: ' ', code: 'Space' } |
||||
}; |
||||
|
||||
const simulateKeyEvent = (type, keyDef) => { |
||||
let ev; |
||||
try { |
||||
ev = new KeyboardEvent(type, { key: keyDef.key, code: keyDef.code, bubbles: true, cancelable: true }); |
||||
} catch (e) { |
||||
// Fallback for older browsers |
||||
ev = document.createEvent('KeyboardEvent'); |
||||
ev.initKeyboardEvent(type, true, true, window, keyDef.key, 0, false, false, false, false); |
||||
} |
||||
document.dispatchEvent(ev); |
||||
}; |
||||
|
||||
window.addEventListener('keydown', (e) => { |
||||
if (keyMap[e.key]) { |
||||
e.preventDefault(); |
||||
simulateKeyEvent('keydown', keyMap[e.key]); |
||||
} |
||||
}); |
||||
window.addEventListener('keyup', (e) => { |
||||
if (keyMap[e.key]) { |
||||
e.preventDefault(); |
||||
simulateKeyEvent('keyup', keyMap[e.key]); |
||||
} |
||||
}); |
||||
|
||||
// Binding dei bottoni su schermo (Touch / Mouse) |
||||
const bindButton = (id, keyDef) => { |
||||
const btn = document.getElementById(id); |
||||
const trigger = (type) => (e) => { |
||||
e.preventDefault(); |
||||
simulateKeyEvent(type, keyDef); |
||||
}; |
||||
btn.addEventListener('touchstart', trigger('keydown'), { passive: false }); |
||||
btn.addEventListener('touchend', trigger('keyup'), { passive: false }); |
||||
btn.addEventListener('mousedown', trigger('keydown')); |
||||
btn.addEventListener('mouseup', trigger('keyup')); |
||||
btn.addEventListener('mouseleave', trigger('keyup')); |
||||
}; |
||||
|
||||
bindButton('btn-up', { key: 'ArrowUp', code: 'ArrowUp' }); |
||||
bindButton('btn-down', { key: 'ArrowDown', code: 'ArrowDown' }); |
||||
bindButton('btn-left', { key: 'ArrowLeft', code: 'ArrowLeft' }); |
||||
bindButton('btn-right', { key: 'ArrowRight', code: 'ArrowRight' }); |
||||
bindButton('btn-a', { key: 'z', code: 'KeyZ' }); |
||||
bindButton('btn-b', { key: 'x', code: 'KeyX' }); |
||||
bindButton('btn-start', { key: 'Enter', code: 'Enter' }); |
||||
bindButton('btn-select', { key: ' ', code: 'Space' }); |
||||
|
||||
// Gestione Fullscreen |
||||
const gameContainer = document.getElementById('game-container'); |
||||
const fsButton = document.getElementById('btn-fullscreen'); |
||||
|
||||
fsButton.addEventListener('click', () => { |
||||
if (!document.fullscreenElement) { |
||||
gameContainer.requestFullscreen().then(() => { |
||||
fsButton.innerHTML = 'Esci Fullscreen ⛶'; |
||||
}).catch(err => { |
||||
console.error(`Errore fullscreen: ${err.message}`); |
||||
}); |
||||
} else { |
||||
document.exitFullscreen().then(() => { |
||||
fsButton.innerHTML = 'Schermo Intero ⛶'; |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
// Ascolta il cambio di fullscreen esterno (tasto ESC, etc.) per aggiornare il testo del bottone |
||||
document.addEventListener('fullscreenchange', () => { |
||||
if (!document.fullscreenElement) { |
||||
fsButton.innerHTML = 'Schermo Intero ⛶'; |
||||
} else { |
||||
fsButton.innerHTML = 'Esci Fullscreen ⛶'; |
||||
} |
||||
}); |
||||
</script> |
||||
</body> |
||||
</html> |
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,4 @@
|
||||
'use strict';(function(){function m(a,b){c?self.postMessage(a,b):n.postMessage(a,b)}function p(a,b){a||console.error("workerapi: No callback was provided to onMessage!");if(b)if(c)b.onmessage=a;else b.on("message",a);else if(c)self.onmessage=a;else n.on("message",a)}function d(a,b,r){b||(b=Math.random().toString(36).replace(/[^a-z]+/g,"").substr(2,10),k++,b=`${b}-${k}`,1E5<k&&(k=0));return{workerId:r,messageId:b,message:a}}let c="undefined"!==typeof self,n;c||(n=require("worker_threads").parentPort); |
||||
let k=0,q=a=>{a=(a-1)/127-1;.008>Math.abs(a)&&(a=0);return a/2.5},l,t=a=>{const b=a.data?a.data:a;if(b.message)switch(b.message.type){case "GET_CONSTANTS_DONE":m(d(b.message,b.messageId));break;case "UPDATED":{const a={type:"UPDATED",numberOfSamples:b.message.numberOfSamples,fps:b.message.fps,allowFastSpeedStretching:b.message.allowFastSpeedStretching},c=[];["audioBuffer","channel1Buffer","channel2Buffer","channel3Buffer","channel4Buffer"].forEach(d=>{if(b.message[d]){{var f=new Uint8Array(b.message[d]); |
||||
var g=b.message.numberOfSamples;const a=new Float32Array(g);var h=new Float32Array(g);let c=0;g*=2;for(var e=0;e<g;e+=2)a[c]=q(f[e]),c++;c=0;for(e=1;e<g;e+=2)h[c]=q(f[e]),c++;f=a.buffer;h=h.buffer}a[d]={};a[d].left=f;a[d].right=h;c.push(f);c.push(h)}});m(d(a),c)}}};p(a=>{a=a.data?a.data:a;switch(a.message.type){case "CONNECT":l=a.message.ports[0];p(t,l);m(d(void 0,a.messageId));break;case "GET_CONSTANTS":l.postMessage(d(a.message,a.messageId));break;case "AUDIO_LATENCY":l.postMessage(d(a.message, |
||||
a.messageId));break;default:console.log(a)}})})() |
||||
@ -0,0 +1,2 @@
|
||||
'use strict';(function(){function g(a,b){a||console.error("workerapi: No callback was provided to onMessage!");if(b)if(c)b.onmessage=a;else b.on("message",a);else if(c)self.onmessage=a;else e.on("message",a)}function h(a,b,c){b||(b=Math.random().toString(36).replace(/[^a-z]+/g,"").substr(2,10),d++,b=`${b}-${d}`,1E5<d&&(d=0));return{workerId:c,messageId:b,message:a}}let c="undefined"!==typeof self,e;c||(e=require("worker_threads").parentPort);let d=0,f,k=a=>{};g(a=>{a=a.data?a.data:a;switch(a.message.type){case "CONNECT":f= |
||||
a.message.ports[0];g(k,f);a=h(void 0,a.messageId);c?self.postMessage(a,void 0):e.postMessage(a,void 0);break;case "SET_JOYPAD_STATE":f.postMessage(h(a.message,a.messageId));break;default:console.log(a)}})})() |
||||
@ -0,0 +1,3 @@
|
||||
'use strict';(function(){function h(a,b){e?self.postMessage(a,b):k.postMessage(a,b)}function m(a,b){a||console.error("workerapi: No callback was provided to onMessage!");if(b)if(e)b.onmessage=a;else b.on("message",a);else if(e)self.onmessage=a;else k.on("message",a)}function f(a,b,c){b||(b=Math.random().toString(36).replace(/[^a-z]+/g,"").substr(2,10),d++,b=`${b}-${d}`,1E5<d&&(d=0));return{workerId:c,messageId:b,message:a}}let e="undefined"!==typeof self,k;e||(k=require("worker_threads").parentPort); |
||||
let d=0,l,n=a=>{a=a.data?a.data:a;switch(a.message.type){case "GET_CONSTANTS_DONE":h(f(a.message,a.messageId));break;case "UPDATED":{a=new Uint8ClampedArray(a.message.graphicsFrameBuffer);let b=new Uint8ClampedArray(92160);for(let c=0;144>c;++c){let e=480*c,f=640*c;for(let c=0;160>c;++c){let d=e+3*c,g=f+(c<<2);b[g+0]=a[d+0];b[g+1]=a[d+1];b[g+2]=a[d+2];b[g+3]=255}}a=b}h(f({type:"UPDATED",imageDataArrayBuffer:a.buffer}),[a.buffer])}};m(a=>{a=a.data?a.data:a;switch(a.message.type){case "CONNECT":l=a.message.ports[0]; |
||||
m(n,l);h(f(void 0,a.messageId));break;case "GET_CONSTANTS":l.postMessage(f({type:"GET_CONSTANTS"},a.messageId));break;default:console.log(a)}})})() |
||||
@ -0,0 +1,3 @@
|
||||
'use strict';(function(){function g(a,b){d?self.postMessage(a,b):h.postMessage(a,b)}function l(a,b){a||console.error("workerapi: No callback was provided to onMessage!");if(b)if(d)b.onmessage=a;else b.on("message",a);else if(d)self.onmessage=a;else h.on("message",a)}function c(a,b,c){b||(b=Math.random().toString(36).replace(/[^a-z]+/g,"").substr(2,10),e++,b=`${b}-${e}`,1E5<e&&(e=0));return{workerId:c,messageId:b,message:a}}let d="undefined"!==typeof self,h;d||(h=require("worker_threads").parentPort); |
||||
let e=0,f,k=(a,b)=>{const d=[];Object.keys(b.message).forEach(a=>{"type"!==a&&d.push(b.message[a])});const e=c(b.message,b.messageId);a?f.postMessage(e,d):g(e,d)},m=a=>{a=a.data?a.data:a;if(a.message)switch(a.message.type){case "CLEAR_MEMORY_DONE":g(c(a.message,a.messageId),[a.message.wasmByteMemory]);break;case "GET_CONSTANTS_DONE":g(c(a.message,a.messageId));break;case "SET_MEMORY_DONE":g(c(a.message,a.messageId));break;case "GET_MEMORY":k(!1,a);break;case "UPDATED":k(!1,a)}};l(a=>{a=a.data?a.data: |
||||
a;switch(a.message.type){case "CONNECT":f=a.message.ports[0];l(m,f);g(c(void 0,a.messageId));break;case "CLEAR_MEMORY":f.postMessage(c({type:"CLEAR_MEMORY"},a.messageId));break;case "GET_CONSTANTS":f.postMessage(c({type:"GET_CONSTANTS"},a.messageId));break;case "GET_MEMORY":f.postMessage(c(a.message,a.messageId));break;case "SET_MEMORY":k(!0,a);break;default:console.log(a)}})})() |
||||
@ -0,0 +1,246 @@
|
||||
'use strict';(function(){function eb(a){return a.data?a.data:a}function ea(a,c){nb?self.postMessage(a,c):Bb.postMessage(a,c)}function fb(a,c){a||console.error("workerapi: No callback was provided to onMessage!");if(c)if(nb)c.onmessage=a;else c.on("message",a);else if(nb)self.onmessage=a;else Bb.on("message",a)}function O(a,c,b){c||(c=Math.random().toString(36).replace(/[^a-z]+/g,"").substr(2,10),ob++,c=`${c}-${ob}`,1E5<ob&&(ob=0));return{workerId:b,messageId:c,message:a}}function xc(a,c){c=eb(c); |
||||
switch(c.message.type){case B.GET_CONSTANTS:a.WASMBOY_CURRENT_FRAME_OUTPUT_LOCATION=a.wasmInstance.exports.FRAME_LOCATION.valueOf(),a.WASMBOY_CURRENT_FRAME_SIZE=a.wasmInstance.exports.FRAME_SIZE.valueOf(),a.graphicsWorkerPort.postMessage(O({type:B.GET_CONSTANTS_DONE,WASMBOY_CURRENT_FRAME_OUTPUT_LOCATION:a.wasmInstance.exports.FRAME_LOCATION.valueOf()},c.messageId))}}function yc(a,c){c=eb(c);switch(c.message.type){case B.GET_CONSTANTS:a.WASMBOY_SOUND_OUTPUT_LOCATION=a.wasmInstance.exports.AUDIO_BUFFER_LOCATION.valueOf(); |
||||
a.WASMBOY_CHANNEL_1_OUTPUT_LOCATION=a.wasmInstance.exports.CHANNEL_1_BUFFER_LOCATION.valueOf();a.WASMBOY_CHANNEL_2_OUTPUT_LOCATION=a.wasmInstance.exports.CHANNEL_2_BUFFER_LOCATION.valueOf();a.WASMBOY_CHANNEL_3_OUTPUT_LOCATION=a.wasmInstance.exports.CHANNEL_3_BUFFER_LOCATION.valueOf();a.WASMBOY_CHANNEL_4_OUTPUT_LOCATION=a.wasmInstance.exports.CHANNEL_4_BUFFER_LOCATION.valueOf();a.audioWorkerPort.postMessage(O({type:B.GET_CONSTANTS_DONE,WASMBOY_SOUND_OUTPUT_LOCATION:a.wasmInstance.exports.AUDIO_BUFFER_LOCATION.valueOf()}, |
||||
c.messageId));break;case B.AUDIO_LATENCY:a.currentAudioLatencyInSeconds=c.message.latency}}function zc(a,c){c=eb(c);switch(c.message.type){case B.SET_JOYPAD_STATE:a.wasmInstance.exports.setJoypadState.apply(a,c.message.setJoypadStateParamsAsArray)}}function $b(a){if(!a.wasmByteMemory)return new Uint8Array;let c=a.wasmByteMemory[a.WASMBOY_GAME_BYTES_LOCATION+327],b=void 0;if(0===c)return new Uint8Array;1<=c&&3>=c?b=32768:5<=c&&6>=c?b=2048:15<=c&&19>=c?b=32768:25<=c&&30>=c&&(b=131072);return b?a.wasmByteMemory.slice(a.WASMBOY_GAME_RAM_BANKS_LOCATION, |
||||
a.WASMBOY_GAME_RAM_BANKS_LOCATION+b):new Uint8Array}function ac(a){a.wasmInstance.exports.saveState();return a.wasmByteMemory.slice(a.WASMBOY_INTERNAL_STATE_LOCATION,a.WASMBOY_INTERNAL_STATE_LOCATION+a.WASMBOY_INTERNAL_STATE_SIZE)}function Ac(a,c){c=eb(c);switch(c.message.type){case B.CLEAR_MEMORY:for(var b=0;b<=a.wasmByteMemory.length;b++)a.wasmByteMemory[b]=0;b=a.wasmByteMemory.slice(0);a.memoryWorkerPort.postMessage(O({type:B.CLEAR_MEMORY_DONE,wasmByteMemory:b.buffer},c.messageId),[b.buffer]); |
||||
break;case B.GET_CONSTANTS:a.WASMBOY_BOOT_ROM_LOCATION=a.wasmInstance.exports.BOOT_ROM_LOCATION.valueOf();a.WASMBOY_GAME_BYTES_LOCATION=a.wasmInstance.exports.CARTRIDGE_ROM_LOCATION.valueOf();a.WASMBOY_GAME_RAM_BANKS_LOCATION=a.wasmInstance.exports.CARTRIDGE_RAM_LOCATION.valueOf();a.WASMBOY_INTERNAL_STATE_SIZE=a.wasmInstance.exports.WASMBOY_STATE_SIZE.valueOf();a.WASMBOY_INTERNAL_STATE_LOCATION=a.wasmInstance.exports.WASMBOY_STATE_LOCATION.valueOf();a.WASMBOY_INTERNAL_MEMORY_SIZE=a.wasmInstance.exports.GAMEBOY_INTERNAL_MEMORY_SIZE.valueOf(); |
||||
a.WASMBOY_INTERNAL_MEMORY_LOCATION=a.wasmInstance.exports.GAMEBOY_INTERNAL_MEMORY_LOCATION.valueOf();a.WASMBOY_PALETTE_MEMORY_SIZE=a.wasmInstance.exports.GBC_PALETTE_SIZE.valueOf();a.WASMBOY_PALETTE_MEMORY_LOCATION=a.wasmInstance.exports.GBC_PALETTE_LOCATION.valueOf();a.memoryWorkerPort.postMessage(O({type:B.GET_CONSTANTS_DONE,WASMBOY_BOOT_ROM_LOCATION:a.wasmInstance.exports.BOOT_ROM_LOCATION.valueOf(),WASMBOY_GAME_BYTES_LOCATION:a.wasmInstance.exports.CARTRIDGE_ROM_LOCATION.valueOf(),WASMBOY_GAME_RAM_BANKS_LOCATION:a.wasmInstance.exports.CARTRIDGE_RAM_LOCATION.valueOf(), |
||||
WASMBOY_INTERNAL_STATE_SIZE:a.wasmInstance.exports.WASMBOY_STATE_SIZE.valueOf(),WASMBOY_INTERNAL_STATE_LOCATION:a.wasmInstance.exports.WASMBOY_STATE_LOCATION.valueOf(),WASMBOY_INTERNAL_MEMORY_SIZE:a.wasmInstance.exports.GAMEBOY_INTERNAL_MEMORY_SIZE.valueOf(),WASMBOY_INTERNAL_MEMORY_LOCATION:a.wasmInstance.exports.GAMEBOY_INTERNAL_MEMORY_LOCATION.valueOf(),WASMBOY_PALETTE_MEMORY_SIZE:a.wasmInstance.exports.GBC_PALETTE_SIZE.valueOf(),WASMBOY_PALETTE_MEMORY_LOCATION:a.wasmInstance.exports.GBC_PALETTE_LOCATION.valueOf()}, |
||||
c.messageId));break;case B.SET_MEMORY:b=Object.keys(c.message);b.includes(C.BOOT_ROM)&&a.wasmByteMemory.set(new Uint8Array(c.message[C.BOOT_ROM]),a.WASMBOY_BOOT_ROM_LOCATION);b.includes(C.CARTRIDGE_ROM)&&a.wasmByteMemory.set(new Uint8Array(c.message[C.CARTRIDGE_ROM]),a.WASMBOY_GAME_BYTES_LOCATION);b.includes(C.CARTRIDGE_RAM)&&a.wasmByteMemory.set(new Uint8Array(c.message[C.CARTRIDGE_RAM]),a.WASMBOY_GAME_RAM_BANKS_LOCATION);b.includes(C.GAMEBOY_MEMORY)&&a.wasmByteMemory.set(new Uint8Array(c.message[C.GAMEBOY_MEMORY]), |
||||
a.WASMBOY_INTERNAL_MEMORY_LOCATION);b.includes(C.PALETTE_MEMORY)&&a.wasmByteMemory.set(new Uint8Array(c.message[C.PALETTE_MEMORY]),a.WASMBOY_PALETTE_MEMORY_LOCATION);b.includes(C.INTERNAL_STATE)&&(a.wasmByteMemory.set(new Uint8Array(c.message[C.INTERNAL_STATE]),a.WASMBOY_INTERNAL_STATE_LOCATION),a.wasmInstance.exports.loadState());a.memoryWorkerPort.postMessage(O({type:B.SET_MEMORY_DONE},c.messageId));break;case B.GET_MEMORY:{b={type:B.GET_MEMORY};let W=[];var d=c.message.memoryTypes;if(d.includes(C.BOOT_ROM)){if(a.wasmByteMemory){var e= |
||||
a.wasmInstance.exports.BOOT_ROM_LOCATION.valueOf();e=a.wasmByteMemory.slice(e,e+a.wasmInstance.exports.BOOT_ROM_SIZE.valueOf())}else e=new Uint8Array;e=e.buffer;b[C.BOOT_ROM]=e;W.push(e)}if(d.includes(C.CARTRIDGE_ROM)){if(a.wasmByteMemory){e=a.wasmByteMemory[a.WASMBOY_GAME_BYTES_LOCATION+327];var g=void 0;0===e?g=32768:1<=e&&3>=e?g=2097152:5<=e&&6>=e?g=262144:15<=e&&19>=e?g=2097152:25<=e&&30>=e&&(g=8388608);e=g?a.wasmByteMemory.slice(a.WASMBOY_GAME_BYTES_LOCATION,a.WASMBOY_GAME_BYTES_LOCATION+g): |
||||
new Uint8Array}else e=new Uint8Array;e=e.buffer;b[C.CARTRIDGE_ROM]=e;W.push(e)}d.includes(C.CARTRIDGE_RAM)&&(e=$b(a).buffer,b[C.CARTRIDGE_RAM]=e,W.push(e));d.includes(C.CARTRIDGE_HEADER)&&(a.wasmByteMemory?(e=a.WASMBOY_GAME_BYTES_LOCATION+308,e=a.wasmByteMemory.slice(e,e+27)):e=new Uint8Array,e=e.buffer,b[C.CARTRIDGE_HEADER]=e,W.push(e));d.includes(C.GAMEBOY_MEMORY)&&(e=a.wasmByteMemory.slice(a.WASMBOY_INTERNAL_MEMORY_LOCATION,a.WASMBOY_INTERNAL_MEMORY_LOCATION+a.WASMBOY_INTERNAL_MEMORY_SIZE).buffer, |
||||
b[C.GAMEBOY_MEMORY]=e,W.push(e));d.includes(C.PALETTE_MEMORY)&&(e=a.wasmByteMemory.slice(a.WASMBOY_PALETTE_MEMORY_LOCATION,a.WASMBOY_PALETTE_MEMORY_LOCATION+a.WASMBOY_PALETTE_MEMORY_SIZE).buffer,b[C.PALETTE_MEMORY]=e,W.push(e));d.includes(C.INTERNAL_STATE)&&(a.wasmInstance.exports.saveState(),d=ac(a).buffer,b[C.INTERNAL_STATE]=d,W.push(d));a.memoryWorkerPort.postMessage(O(b,c.messageId),W)}}}function pb(a,c){a=1<<a&255;b.registerF=0<c?b.registerF|a:b.registerF&(255^a);return b.registerF}function A(a){pb(7, |
||||
a)}function x(a){pb(6,a)}function K(a){pb(5,a)}function M(a){pb(4,a)}function Sa(){return b.registerF>>7&1}function T(){return b.registerF>>4&1}function R(a,c){0<=c?K(0!==((a&15)+(c&15)&16)):K((Math.abs(c)&15)>(a&15))}function Db(a,c){0<=c?M(a>(a+c&255)):M(Math.abs(c)>a)}function Wa(a,c,b){b?(a=a^c^a+c,K(0!==(a&16)),M(0!==(a&256))):(b=a+c&65535,M(b<a),K(0!==((a^c^b)&4096)))}function bc(a){switch(a){case 0:d.bgWhite=N.bgWhite;d.bgLightGrey=N.bgLightGrey;d.bgDarkGrey=N.bgDarkGrey;d.bgBlack=N.bgBlack; |
||||
d.obj0White=N.obj0White;d.obj0LightGrey=N.obj0LightGrey;d.obj0DarkGrey=N.obj0DarkGrey;d.obj0Black=N.obj0Black;d.obj1White=N.obj1White;d.obj1LightGrey=N.obj1LightGrey;d.obj1DarkGrey=N.obj1DarkGrey;d.obj1Black=N.obj1Black;break;case 1:d.bgWhite=ia.bgWhite;d.bgLightGrey=ia.bgLightGrey;d.bgDarkGrey=ia.bgDarkGrey;d.bgBlack=ia.bgBlack;d.obj0White=ia.obj0White;d.obj0LightGrey=ia.obj0LightGrey;d.obj0DarkGrey=ia.obj0DarkGrey;d.obj0Black=ia.obj0Black;d.obj1White=ia.obj1White;d.obj1LightGrey=ia.obj1LightGrey; |
||||
d.obj1DarkGrey=ia.obj1DarkGrey;d.obj1Black=ia.obj1Black;break;case 2:d.bgWhite=ja.bgWhite;d.bgLightGrey=ja.bgLightGrey;d.bgDarkGrey=ja.bgDarkGrey;d.bgBlack=ja.bgBlack;d.obj0White=ja.obj0White;d.obj0LightGrey=ja.obj0LightGrey;d.obj0DarkGrey=ja.obj0DarkGrey;d.obj0Black=ja.obj0Black;d.obj1White=ja.obj1White;d.obj1LightGrey=ja.obj1LightGrey;d.obj1DarkGrey=ja.obj1DarkGrey;d.obj1Black=ja.obj1Black;break;case 3:d.bgWhite=ka.bgWhite;d.bgLightGrey=ka.bgLightGrey;d.bgDarkGrey=ka.bgDarkGrey;d.bgBlack=ka.bgBlack; |
||||
d.obj0White=ka.obj0White;d.obj0LightGrey=ka.obj0LightGrey;d.obj0DarkGrey=ka.obj0DarkGrey;d.obj0Black=ka.obj0Black;d.obj1White=ka.obj1White;d.obj1LightGrey=ka.obj1LightGrey;d.obj1DarkGrey=ka.obj1DarkGrey;d.obj1Black=ka.obj1Black;break;case 4:d.bgWhite=la.bgWhite;d.bgLightGrey=la.bgLightGrey;d.bgDarkGrey=la.bgDarkGrey;d.bgBlack=la.bgBlack;d.obj0White=la.obj0White;d.obj0LightGrey=la.obj0LightGrey;d.obj0DarkGrey=la.obj0DarkGrey;d.obj0Black=la.obj0Black;d.obj1White=la.obj1White;d.obj1LightGrey=la.obj1LightGrey; |
||||
d.obj1DarkGrey=la.obj1DarkGrey;d.obj1Black=la.obj1Black;break;case 5:d.bgWhite=ma.bgWhite;d.bgLightGrey=ma.bgLightGrey;d.bgDarkGrey=ma.bgDarkGrey;d.bgBlack=ma.bgBlack;d.obj0White=ma.obj0White;d.obj0LightGrey=ma.obj0LightGrey;d.obj0DarkGrey=ma.obj0DarkGrey;d.obj0Black=ma.obj0Black;d.obj1White=ma.obj1White;d.obj1LightGrey=ma.obj1LightGrey;d.obj1DarkGrey=ma.obj1DarkGrey;d.obj1Black=ma.obj1Black;break;case 6:d.bgWhite=na.bgWhite;d.bgLightGrey=na.bgLightGrey;d.bgDarkGrey=na.bgDarkGrey;d.bgBlack=na.bgBlack; |
||||
d.obj0White=na.obj0White;d.obj0LightGrey=na.obj0LightGrey;d.obj0DarkGrey=na.obj0DarkGrey;d.obj0Black=na.obj0Black;d.obj1White=na.obj1White;d.obj1LightGrey=na.obj1LightGrey;d.obj1DarkGrey=na.obj1DarkGrey;d.obj1Black=na.obj1Black;break;case 7:d.bgWhite=oa.bgWhite;d.bgLightGrey=oa.bgLightGrey;d.bgDarkGrey=oa.bgDarkGrey;d.bgBlack=oa.bgBlack;d.obj0White=oa.obj0White;d.obj0LightGrey=oa.obj0LightGrey;d.obj0DarkGrey=oa.obj0DarkGrey;d.obj0Black=oa.obj0Black;d.obj1White=oa.obj1White;d.obj1LightGrey=oa.obj1LightGrey; |
||||
d.obj1DarkGrey=oa.obj1DarkGrey;d.obj1Black=oa.obj1Black;break;case 8:d.bgWhite=pa.bgWhite;d.bgLightGrey=pa.bgLightGrey;d.bgDarkGrey=pa.bgDarkGrey;d.bgBlack=pa.bgBlack;d.obj0White=pa.obj0White;d.obj0LightGrey=pa.obj0LightGrey;d.obj0DarkGrey=pa.obj0DarkGrey;d.obj0Black=pa.obj0Black;d.obj1White=pa.obj1White;d.obj1LightGrey=pa.obj1LightGrey;d.obj1DarkGrey=pa.obj1DarkGrey;d.obj1Black=pa.obj1Black;break;case 9:d.bgWhite=qa.bgWhite;d.bgLightGrey=qa.bgLightGrey;d.bgDarkGrey=qa.bgDarkGrey;d.bgBlack=qa.bgBlack; |
||||
d.obj0White=qa.obj0White;d.obj0LightGrey=qa.obj0LightGrey;d.obj0DarkGrey=qa.obj0DarkGrey;d.obj0Black=qa.obj0Black;d.obj1White=qa.obj1White;d.obj1LightGrey=qa.obj1LightGrey;d.obj1DarkGrey=qa.obj1DarkGrey;d.obj1Black=qa.obj1Black;break;case 10:d.bgWhite=ra.bgWhite;d.bgLightGrey=ra.bgLightGrey;d.bgDarkGrey=ra.bgDarkGrey;d.bgBlack=ra.bgBlack;d.obj0White=ra.obj0White;d.obj0LightGrey=ra.obj0LightGrey;d.obj0DarkGrey=ra.obj0DarkGrey;d.obj0Black=ra.obj0Black;d.obj1White=ra.obj1White;d.obj1LightGrey=ra.obj1LightGrey; |
||||
d.obj1DarkGrey=ra.obj1DarkGrey;d.obj1Black=ra.obj1Black;break;case 11:d.bgWhite=sa.bgWhite;d.bgLightGrey=sa.bgLightGrey;d.bgDarkGrey=sa.bgDarkGrey;d.bgBlack=sa.bgBlack;d.obj0White=sa.obj0White;d.obj0LightGrey=sa.obj0LightGrey;d.obj0DarkGrey=sa.obj0DarkGrey;d.obj0Black=sa.obj0Black;d.obj1White=sa.obj1White;d.obj1LightGrey=sa.obj1LightGrey;d.obj1DarkGrey=sa.obj1DarkGrey;d.obj1Black=sa.obj1Black;break;case 12:d.bgWhite=ta.bgWhite,d.bgLightGrey=ta.bgLightGrey,d.bgDarkGrey=ta.bgDarkGrey,d.bgBlack=ta.bgBlack, |
||||
d.obj0White=ta.obj0White,d.obj0LightGrey=ta.obj0LightGrey,d.obj0DarkGrey=ta.obj0DarkGrey,d.obj0Black=ta.obj0Black,d.obj1White=ta.obj1White,d.obj1LightGrey=ta.obj1LightGrey,d.obj1DarkGrey=ta.obj1DarkGrey,d.obj1Black=ta.obj1Black}}function l(a,c){return(a&255)<<8|c&255}function I(a){return(a&65280)>>8}function H(a,c){return c&~(1<<a)}function g(a,c){return 0!=(c&1<<a)}function qb(a,c){a=v(c)>>2*a&3;if(c===Xa.memoryLocationSpritePaletteOne)switch(c=d.obj0White,a){case 1:c=d.obj0LightGrey;break;case 2:c= |
||||
d.obj0DarkGrey;break;case 3:c=d.obj0Black}else if(c===Xa.memoryLocationSpritePaletteTwo)switch(c=d.obj1White,a){case 1:c=d.obj1LightGrey;break;case 2:c=d.obj1DarkGrey;break;case 3:c=d.obj1Black}else switch(c=d.bgWhite,a){case 1:c=d.bgLightGrey;break;case 2:c=d.bgDarkGrey;break;case 3:c=d.bgBlack}return c}function rb(a,c,b){c=8*a+2*c;a=cc(c+1,b);b=cc(c,b);return l(a,b)}function ua(a,c){a*=5;return 8*((c&31<<a)>>a)}function cc(a,c){a&=63;c&&(a+=64);return e[Ya+a]}function sb(a,c,b,d){void 0===b&&(b= |
||||
0);void 0===d&&(d=!1);b&=3;d&&(b|=4);e[Za+(160*c+a)]=b}function Eb(a,c,W,d,z,f,n,h,k,p,m,q,l,w){var G=0;c=gb(c,a);a=X(c+2*f,W);W=X(c+2*f+1,W);for(f=d;f<=z;++f)if(c=n+(f-d),c<k){var P=f;if(0>l||!g(5,l))P=7-P;var Va=0;g(P,W)&&(Va+=1,Va<<=1);g(P,a)&&(Va+=1);if(b.GBCEnabled&&(0<=l||0<=w)){P=0<=w;var fa=l&7;P&&(fa=w&7);var ha=rb(fa,Va,P);P=ua(0,ha);fa=ua(1,ha);ha=ua(2,ha)}else if(0>=q&&(q=r.memoryLocationBackgroundPalette),m){fa=Va;ha=m;void 0===ha&&(ha=!1);P=fa;ha||(P=v(q)>>(fa<<1)&3);fa=242;switch(P){case 1:fa= |
||||
160;break;case 2:fa=88;break;case 3:fa=8}fa=P=ha=fa}else ha=qb(Va,q),P=(ha&16711680)>>16,fa=(ha&65280)>>8,ha&=255;var Cb=3*(h*k+c);e[p+Cb+0]=P;e[p+Cb+1]=fa;e[p+Cb+2]=ha;P=!1;0<=l&&(P=g(7,l));sb(c,h,Va,P);G++}return G}function gb(a,c){a===r.memoryLocationTileDataSelectZeroStart&&(c=g(7,c)?c-128:c+128);return a+16*c}function dc(a,c){switch(a){case 1:return g(c,129);case 2:return g(c,135);case 3:return g(c,126);default:return g(c,1)}}function Fb(){var a=y.sweepShadowFrequency,c=a>>y.NRx0SweepShift;y.NRx0Negate? |
||||
(y.sweepNegateShouldDisableChannelOnClear=!0,c=a-c):c=a+c;return c}function tb(a){switch(a){case y.channelNumber:a=y.isDacEnabled;var c=p.channel1DacEnabled!==a;p.channel1DacEnabled=a;return c;case D.channelNumber:return a=D.isDacEnabled,c=p.channel2DacEnabled!==a,p.channel2DacEnabled=a,c;case t.channelNumber:return a=t.isDacEnabled,c=p.channel3DacEnabled!==a,p.channel3DacEnabled=a,c;case F.channelNumber:return a=F.isDacEnabled,c=p.channel4DacEnabled!==a,p.channel4DacEnabled=a,c}return!1}function hb(){for(var a= |
||||
h.batchProcessCycles(),c=h.currentCycles;c>=a;)ec(a),c-=a;h.currentCycles=c}function ec(a){var c=h.maxFrameSequenceCycles();var b=h.frameSequenceCycleCounter+a;if(b>=c){h.frameSequenceCycleCounter=b-c;c=h.frameSequencer+1&7;switch(c){case 0:y.updateLength();D.updateLength();t.updateLength();F.updateLength();break;case 2:y.updateLength();D.updateLength();t.updateLength();F.updateLength();y.updateSweep();break;case 4:y.updateLength();D.updateLength();t.updateLength();F.updateLength();break;case 6:y.updateLength(); |
||||
D.updateLength();t.updateLength();F.updateLength();y.updateSweep();break;case 7:y.updateEnvelope(),D.updateEnvelope(),F.updateEnvelope()}h.frameSequencer=c;c=!0}else h.frameSequenceCycleCounter=b,c=!1;if(Q.audioAccumulateSamples&&!c){c=y.willChannelUpdate(a)||tb(y.channelNumber);b=D.willChannelUpdate(a)||tb(D.channelNumber);var e=t.willChannelUpdate(a)||tb(t.channelNumber),d=F.willChannelUpdate(a)||tb(F.channelNumber);c&&(p.channel1Sample=y.getSampleFromCycleCounter());b&&(p.channel2Sample=D.getSampleFromCycleCounter()); |
||||
e&&(p.channel3Sample=t.getSampleFromCycleCounter());d&&(p.channel4Sample=F.getSampleFromCycleCounter());if(c||b||e||d)p.needToRemixSamples=!0;c=h.downSampleCycleCounter;c+=a;a=h.maxDownSampleCycles();c>=a&&(c-=a,p.needToRemixSamples||p.mixerVolumeChanged||p.mixerEnabledChanged?$a(p.channel1Sample,p.channel2Sample,p.channel3Sample,p.channel4Sample):h.downSampleCycleCounter=c,ab(p.leftChannelSampleUnsignedByte+1,p.rightChannelSampleUnsignedByte+1,ub),a=h.audioQueueIndex+1,a>=(h.wasmBoyMemoryMaxBufferSize>> |
||||
1|0)-1&&--a,h.audioQueueIndex=a);h.downSampleCycleCounter=c}else{c=y.getSample(a)|0;b=D.getSample(a)|0;e=t.getSample(a)|0;d=F.getSample(a)|0;p.channel1Sample=c;p.channel2Sample=b;p.channel3Sample=e;p.channel4Sample=d;a=h.downSampleCycleCounter+a;if(a>=h.maxDownSampleCycles()){a-=h.maxDownSampleCycles();var g=$a(c,b,e,d),f=I(g);ab(f+1,(g&255)+1,ub);Q.enableAudioDebugging&&(g=$a(c,15,15,15),f=I(g),ab(f+1,(g&255)+1,Gb),g=$a(15,b,15,15),f=I(g),ab(f+1,(g&255)+1,Hb),g=$a(15,15,e,15),f=I(g),ab(f+1,(g&255)+ |
||||
1,Ib),g=$a(15,15,15,d),f=I(g),ab(f+1,(g&255)+1,Jb));c=h.audioQueueIndex+1;c>=(h.wasmBoyMemoryMaxBufferSize>>1|0)-1&&--c;h.audioQueueIndex=c}h.downSampleCycleCounter=a}}function fc(){return h.audioQueueIndex}function gc(){h.audioQueueIndex=0}function $a(a,c,b,e){void 0===a&&(a=15);void 0===c&&(c=15);void 0===b&&(b=15);void 0===e&&(e=15);p.mixerVolumeChanged=!1;var d=0+(h.NR51IsChannel1EnabledOnLeftOutput?a:15);d+=h.NR51IsChannel2EnabledOnLeftOutput?c:15;d+=h.NR51IsChannel3EnabledOnLeftOutput?b:15; |
||||
d+=h.NR51IsChannel4EnabledOnLeftOutput?e:15;a=0+(h.NR51IsChannel1EnabledOnRightOutput?a:15);a+=h.NR51IsChannel2EnabledOnRightOutput?c:15;a+=h.NR51IsChannel3EnabledOnRightOutput?b:15;a+=h.NR51IsChannel4EnabledOnRightOutput?e:15;p.mixerEnabledChanged=!1;p.needToRemixSamples=!1;c=hc(d,h.NR50LeftMixerVolume+1);b=hc(a,h.NR50RightMixerVolume+1);p.leftChannelSampleUnsignedByte=c;p.rightChannelSampleUnsignedByte=b;return l(c,b)}function hc(a,c){if(60===a)return 127;a=1E5*(a-60)*c>>3;a=(a/1E5|0)+60;a=1E5* |
||||
a/(12E6/254|0)|0;return a|=0}function ab(a,c,b){b+=h.audioQueueIndex<<1;e[b+0]=a+1;e[b+1]=c+1}function Bc(a){switch(a){case y.memoryLocationNRx0:return a=v(y.memoryLocationNRx0),a|128;case D.memoryLocationNRx0:return a=v(D.memoryLocationNRx0),a|255;case t.memoryLocationNRx0:return a=v(t.memoryLocationNRx0),a|127;case F.memoryLocationNRx0:return a=v(F.memoryLocationNRx0),a|255;case h.memoryLocationNR50:return a=v(h.memoryLocationNR50),a|0;case y.memoryLocationNRx1:return a=v(y.memoryLocationNRx1), |
||||
a|63;case D.memoryLocationNRx1:return a=v(D.memoryLocationNRx1),a|63;case t.memoryLocationNRx1:return a=v(t.memoryLocationNRx1),a|255;case F.memoryLocationNRx1:return a=v(F.memoryLocationNRx1),a|255;case h.memoryLocationNR51:return a=v(h.memoryLocationNR51),a|0;case y.memoryLocationNRx2:return a=v(y.memoryLocationNRx2),a|0;case D.memoryLocationNRx2:return a=v(D.memoryLocationNRx2),a|0;case t.memoryLocationNRx2:return a=v(t.memoryLocationNRx2),a|159;case F.memoryLocationNRx2:return a=v(F.memoryLocationNRx2), |
||||
a|0;case h.memoryLocationNR52:return a=0,a=h.NR52IsSoundEnabled?a|128:H(7,a),a=y.isEnabled?a|1:H(0,a),a=D.isEnabled?a|2:H(1,a),a=t.isEnabled?a|4:H(2,a),a=F.isEnabled?a|8:H(3,a),a|112;case y.memoryLocationNRx3:return a=v(y.memoryLocationNRx3),a|255;case D.memoryLocationNRx3:return a=v(D.memoryLocationNRx3),a|255;case t.memoryLocationNRx3:return a=v(t.memoryLocationNRx3),a|255;case F.memoryLocationNRx3:return a=v(F.memoryLocationNRx3),a|0;case y.memoryLocationNRx4:return a=v(y.memoryLocationNRx4),a| |
||||
191;case D.memoryLocationNRx4:return a=v(D.memoryLocationNRx4),a|191;case t.memoryLocationNRx4:return a=v(t.memoryLocationNRx4),a|191;case F.memoryLocationNRx4:return a=v(F.memoryLocationNRx4),a|191}return-1}function ib(a){vb(!1);var c=v(m.memoryLocationInterruptRequest);c=H(a,c);m.interruptsRequestedValue=c;f(m.memoryLocationInterruptRequest,c);b.stackPointer-=2;b.isHalted();c=b.stackPointer;var e=b.programCounter,d=I(e);f(c+0,e&255);f(c+1,d);switch(a){case m.bitPositionVBlankInterrupt:m.isVBlankInterruptRequested= |
||||
!1;b.programCounter=64;break;case m.bitPositionLcdInterrupt:m.isLcdInterruptRequested=!1;b.programCounter=72;break;case m.bitPositionTimerInterrupt:m.isTimerInterruptRequested=!1;b.programCounter=80;break;case m.bitPositionSerialInterrupt:m.isSerialInterruptRequested=!1;b.programCounter=88;break;case m.bitPositionJoypadInterrupt:m.isJoypadInterruptRequested=!1,b.programCounter=96}}function bb(a){var c=v(m.memoryLocationInterruptRequest);c|=1<<a;m.interruptsRequestedValue=c;f(m.memoryLocationInterruptRequest, |
||||
c)}function vb(a){a?m.masterInterruptSwitchDelay=!0:m.masterInterruptSwitch=!1}function Kb(a){for(var c=0;c<a;){var b=w.dividerRegister,e=b;c+=4;e+=4;e&=65535;w.dividerRegister=e;if(w.timerEnabled){var d=w.timerCounterWasReset;w.timerCounterOverflowDelay?(w.timerCounter=w.timerModulo,m.isTimerInterruptRequested=!0,bb(m.bitPositionTimerInterrupt),w.timerCounterOverflowDelay=!1,w.timerCounterWasReset=!0):d&&(w.timerCounterWasReset=!1);ic(b,e)&&Lb()}}}function Lb(){var a=w.timerCounter;255<++a&&(w.timerCounterOverflowDelay= |
||||
!0,a=0);w.timerCounter=a}function ic(a,c){var b=Mb(w.timerInputClock);return g(b,a)&&!g(b,c)}function Mb(a){switch(a){case 0:return 9;case 1:return 3;case 2:return 5;case 3:return 7}return 0}function Ta(a){var c=b.isStopped=!1;Cc(a)||(c=!0);Ia(a,!0);c&&(c=!1,3>=a&&(c=!0),a=!1,E.isDpadType&&c&&(a=!0),E.isButtonType&&!c&&(a=!0),a&&(m.isJoypadInterruptRequested=!0,bb(m.bitPositionJoypadInterrupt)))}function Cc(a){switch(a){case 0:return E.up;case 1:return E.right;case 2:return E.down;case 3:return E.left; |
||||
case 4:return E.a;case 5:return E.b;case 6:return E.select;case 7:return E.start;default:return!1}}function Ia(a,c){switch(a){case 0:E.up=c;break;case 1:E.right=c;break;case 2:E.down=c;break;case 3:E.left=c;break;case 4:E.a=c;break;case 5:E.b=c;break;case 6:E.select=c;break;case 7:E.start=c}}function jc(a,c,e){for(var d=0;d<e;++d){for(var W=Nb(a+d),g=c+d;40959<g;)g-=8192;Ob(g,W)}n.DMACycles+=(32<<b.GBCDoubleSpeed)*(e>>4)}function Pb(a,c){if(a===b.memoryLocationSpeedSwitch)return f(b.memoryLocationSpeedSwitch, |
||||
c&1),!1;if(b.BootROMEnabled&&a===b.memoryLocationBootROMSwitch)return b.BootROMEnabled=!1,b.programCounter=255,!0;var d=n.videoRamLocation,G=n.spriteInformationTableLocation;if(a<d){if(!n.isRomOnly){d=n.isMBC1;var z=n.isMBC2;if(8191>=a){if(!z||g(4,c))c&=15,0===c?n.isRamBankingEnabled=!1:10===c&&(n.isRamBankingEnabled=!0)}else 16383>=a?(G=n.isMBC5,!G||12287>=a?(a=n.currentRomBank,z&&(a=c&15),d?(c&=31,a&=224):n.isMBC3?(c&=127,a&=128):G&&(a&=0),n.currentRomBank=a|c):n.currentRomBank=l(0<c,n.currentRomBank& |
||||
255)):!z&&24575>=a?d&&n.isMBC1RomModeEnabled?(a=n.currentRomBank&31,n.currentRomBank=a|c&224):(c=n.isMBC5?c&15:c&3,n.currentRamBank=c):!z&&32767>=a&&d&&(n.isMBC1RomModeEnabled=g(0,c))}return!1}if(a>=d&&a<n.cartridgeRamLocation)return!0;if(a>=n.echoRamLocation&&a<G)return f(a-8192,c),!0;if(a>=G&&a<=n.spriteInformationTableLocationEnd)return 2<=u.currentLcdMode;if(a>=n.unusableMemoryLocation&&a<=n.unusableMemoryEndLocation)return!1;if(a===Z.memoryLocationSerialTransferControl)return Z.updateTransferControl(c); |
||||
if(65296<=a&&65318>=a){hb();if(a===h.memoryLocationNR52||h.NR52IsSoundEnabled){switch(a){case y.memoryLocationNRx0:y.updateNRx0(c);break;case t.memoryLocationNRx0:t.updateNRx0(c);break;case y.memoryLocationNRx1:y.updateNRx1(c);break;case D.memoryLocationNRx1:D.updateNRx1(c);break;case t.memoryLocationNRx1:t.updateNRx1(c);break;case F.memoryLocationNRx1:F.updateNRx1(c);break;case y.memoryLocationNRx2:y.updateNRx2(c);break;case D.memoryLocationNRx2:D.updateNRx2(c);break;case t.memoryLocationNRx2:t.volumeCodeChanged= |
||||
!0;t.updateNRx2(c);break;case F.memoryLocationNRx2:F.updateNRx2(c);break;case y.memoryLocationNRx3:y.updateNRx3(c);break;case D.memoryLocationNRx3:D.updateNRx3(c);break;case t.memoryLocationNRx3:t.updateNRx3(c);break;case F.memoryLocationNRx3:F.updateNRx3(c);break;case y.memoryLocationNRx4:y.updateNRx4(c);break;case D.memoryLocationNRx4:D.updateNRx4(c);break;case t.memoryLocationNRx4:t.updateNRx4(c);break;case F.memoryLocationNRx4:F.updateNRx4(c);break;case h.memoryLocationNR50:h.updateNR50(c);p.mixerVolumeChanged= |
||||
!0;break;case h.memoryLocationNR51:h.updateNR51(c);p.mixerEnabledChanged=!0;break;case h.memoryLocationNR52:a=h.NR52IsSoundEnabled;!a&&g(7,c)&&(h.frameSequencer=7,y.waveFormPositionOnDuty=0,D.waveFormPositionOnDuty=0);if(a&&!g(7,c))for(a=65296;65318>a;++a)Ob(a,0);h.updateNR52(c)}c=!0}else c=!1;return c}if(65328<=a&&65343>=a)return hb(),t.isEnabled?(t.handleWaveRamWrite(c),!1):!0;if(a>=u.memoryLocationLcdControl&&a<=r.memoryLocationWindowX){if(a===u.memoryLocationLcdControl)return u.updateLcdControl(c), |
||||
!0;if(a===u.memoryLocationLcdStatus)return u.updateLcdStatus(c),!1;if(a===r.memoryLocationScanlineRegister)return r.scanlineRegister=0,f(a,0),!1;if(a===u.memoryLocationCoincidenceCompare)return u.coincidenceCompare=c,!0;if(a===r.memoryLocationDmaTransfer){c<<=8;for(a=0;159>=a;++a)d=v(c+a),f(n.spriteInformationTableLocation+a,d);n.DMACycles=644;return!0}switch(a){case r.memoryLocationScrollX:r.scrollX=c;break;case r.memoryLocationScrollY:r.scrollY=c;break;case r.memoryLocationWindowX:r.windowX=c;break; |
||||
case r.memoryLocationWindowY:r.windowY=c}return!0}if(a===n.memoryLocationHdmaTrigger)return b.GBCEnabled&&(n.isHblankHdmaActive&&!g(7,c)?(n.isHblankHdmaActive=!1,c=v(n.memoryLocationHdmaTrigger),f(n.memoryLocationHdmaTrigger,c|128)):(a=v(n.memoryLocationHdmaSourceHigh),d=v(n.memoryLocationHdmaSourceLow),a=l(a,d)&65520,d=v(n.memoryLocationHdmaDestinationHigh),G=v(n.memoryLocationHdmaDestinationLow),d=l(d,G),d=(d&8176)+n.videoRamLocation,G=H(7,c),G=G+1<<4,g(7,c)?(n.isHblankHdmaActive=!0,n.hblankHdmaTransferLengthRemaining= |
||||
G,n.hblankHdmaSource=a,n.hblankHdmaDestination=d,f(n.memoryLocationHdmaTrigger,H(7,c))):(jc(a,d,G),f(n.memoryLocationHdmaTrigger,255)))),!1;if((a===n.memoryLocationGBCWRAMBank||a===n.memoryLocationGBCVRAMBank)&&n.isHblankHdmaActive&&(d=n.hblankHdmaSource,16384<=d&&32767>=d||53248<=d&&57343>=d))return!1;if(a>=Xa.memoryLocationBackgroundPaletteIndex&&a<=Xa.memoryLocationSpritePaletteData){d=Xa.memoryLocationSpritePaletteData;if(a===Xa.memoryLocationBackgroundPaletteData||a===d)G=v(a-1),G=H(6,G),z=G& |
||||
63,a===d&&(z+=64),e[Ya+z]=c,c=G,--a,g(7,c)&&f(a,c+1|128);return!0}if(a>=w.memoryLocationDividerRegister&&a<=w.memoryLocationTimerControl){Kb(w.currentCycles);w.currentCycles=0;switch(a){case w.memoryLocationDividerRegister:return w.updateDividerRegister(),!1;case w.memoryLocationTimerCounter:w.updateTimerCounter(c);break;case w.memoryLocationTimerModulo:w.updateTimerModulo(c);break;case w.memoryLocationTimerControl:w.updateTimerControl(c)}return!0}a===E.memoryLocationJoypadRegister&&E.updateJoypad(c); |
||||
if(a===m.memoryLocationInterruptRequest)return m.updateInterruptRequested(c),!0;a===m.memoryLocationInterruptEnabled&&m.updateInterruptEnabled(c);return!0}function Qb(a){switch(a>>12){case 0:if(b.BootROMEnabled)if(b.GBCEnabled){if(256>a||511<a&&2304>a)return a+wb}else if(!b.GBCEnabled&&256>a)return a+wb;case 1:case 2:case 3:return a+xb;case 4:case 5:case 6:case 7:var c=n.currentRomBank;n.isMBC5||0!==c||(c=1);return 16384*c+(a-n.switchableCartridgeRomLocation)+xb;case 8:case 9:return c=0,b.GBCEnabled&& |
||||
(c=v(n.memoryLocationGBCVRAMBank)&1),a-n.videoRamLocation+2048+8192*c;case 10:case 11:return 8192*n.currentRamBank+(a-n.cartridgeRamLocation)+Rb;case 12:return a-n.internalRamBankZeroLocation+18432;case 13:return c=0,b.GBCEnabled&&(c=v(n.memoryLocationGBCWRAMBank)&7),a-n.internalRamBankZeroLocation+18432+4096*((1>c?1:c)-1);default:return a-n.echoRamLocation+51200}}function f(a,c){a=Qb(a);e[a]=c}function Ob(a,c){a===aa.writeGbMemory&&(aa.reachedBreakpoint=!0);Pb(a,c)&&f(a,c)}function kc(a){r.scanlineCycleCounter= |
||||
0;r.scanlineRegister=0;f(r.memoryLocationScanlineRegister,0);var c=v(u.memoryLocationLcdStatus);c=H(1,c);c=H(0,c);u.currentLcdMode=0;f(u.memoryLocationLcdStatus,c);if(a)for(a=0;93184>a;++a)e[cb+a]=255}function lc(a,c){0!==a&&1!==a||r.scanlineRegister!==u.coincidenceCompare?c=H(2,c):(c|=4,g(6,c)&&(m.isLcdInterruptRequested=!0,bb(m.bitPositionLcdInterrupt)));return c}function mc(a,c,d,G,f,n){for(var W=G>>3;160>f;++f){var z=f+n;256<=z&&(z-=256);var h=d+(W<<5)+(z>>3),k=X(h,0),p=!1;if(Q.tileCaching){var m= |
||||
f;var l=a,q=z,P=h,w=k,u=0,t=db.nextXIndexToPerformCacheCheck;if(0<l&&8<m&&w===db.tileId&&m===t){w=g(5,v(P-1));P=g(5,v(P));for(var x=0;8>x;++x){w!==P&&(x=7-x);var y=m+x;if(160>=y){var A=m-(8-x),B=cb+3*(160*l+y);ca(y,l,0,e[B]);ca(y,l,1,e[B]);ca(y,l,2,e[B]);A=e[Za+(160*l+A)];sb(y,l,H(2,A),g(2,A));u++}}}else db.tileId=w;m>=t&&(t=m+8,l=q&7|0,m<l&&(t+=l));db.nextXIndexToPerformCacheCheck=t;m=u;0<m&&(f+=m-1,p=!0)}Q.tileRendering&&!p?(p=f,m=a,l=z,z=c,u=G&7|0,t=0,0==p&&(t=l-(l>>3<<3)),l=7,160<p+8&&(l=160- |
||||
p),q=-1,w=0,b.GBCEnabled&&(q=X(h,1),w=g(3,q)|0,g(6,q)&&(u=7-u)),m=Eb(k,z,w,t,l,u,p,m,160,cb,!1,0,q,-1),0<m&&(f+=m-1)):p||(b.GBCEnabled?(p=f,m=a,t=G,u=gb(c,k),k=X(h,1),t=t&7|0,g(6,k)&&(t=7-t),l=g(3,k)|0,h=X(u+2*t,l),u=X(u+2*t+1,l),t=z&7|0,g(5,k)||(t=7-t),z=0,g(t,u)&&(z=z+1<<1),g(t,h)&&(z+=1),t=rb(k&7,z,!1),h=ua(0,t),u=ua(1,t),t=ua(2,t),ca(p,m,0,h),ca(p,m,1,u),ca(p,m,2,t),sb(p,m,z,g(7,k))):(h=f,p=a,u=G,m=gb(c,k),u=u&7|0,k=X(m+2*u,0),m=X(m+2*u+1,0),u=z&7|0,u=7-u,z=0,g(u,m)&&(z=z+1<<1),g(u,k)&&(z+=1), |
||||
k=qb(z,r.memoryLocationBackgroundPalette),ca(h,p,0,(k&16711680)>>16),ca(h,p,1,(k&65280)>>8),ca(h,p,2,k&255),sb(h,p,z)))}}function nc(a){if(u.enabled)for(r.scanlineCycleCounter+=a,a=Q.graphicsDisableScanlineRendering;r.scanlineCycleCounter>=r.MAX_CYCLES_PER_SCANLINE();){r.scanlineCycleCounter-=r.MAX_CYCLES_PER_SCANLINE();var c=r.scanlineRegister;if(144===c){if(a)for(var b=0;144>=b;++b)Sb(b);else Sb(c);for(b=0;144>b;++b)for(var d=0;160>d;++d)e[Za+(160*b+d)]=0;db.tileId=-1;db.nextXIndexToPerformCacheCheck= |
||||
-1}else 144>c&&(a||Sb(c));c=153<c?0:c+1;r.scanlineRegister=c}if(u.enabled){c=r.scanlineRegister;b=u.currentLcdMode;a=0;if(144<=c)a=1;else{d=r.scanlineCycleCounter;var z=r.MIN_CYCLES_SPRITES_LCD_MODE();d>=z?a=2:d>=z&&(a=3)}if(b!==a){c=v(u.memoryLocationLcdStatus);u.currentLcdMode=a;b=!1;switch(a){case 0:c=H(0,c);c=H(1,c);b=g(3,c);break;case 1:c=H(1,c);c|=1;b=g(4,c);break;case 2:c=H(0,c);c|=2;b=g(5,c);break;case 3:c|=3}b&&(m.isLcdInterruptRequested=!0,bb(m.bitPositionLcdInterrupt));0===a&&n.isHblankHdmaActive&& |
||||
(d=16,b=n.hblankHdmaTransferLengthRemaining,b<d&&(d=b),jc(n.hblankHdmaSource,n.hblankHdmaDestination,d),n.hblankHdmaSource+=d,n.hblankHdmaDestination+=d,b-=d,n.hblankHdmaTransferLengthRemaining=b,d=n.memoryLocationHdmaTrigger,0>=b?(n.isHblankHdmaActive=!1,f(d,255)):f(d,H(7,(b>>4)-1)));1===a&&(m.isVBlankInterruptRequested=!0,bb(m.bitPositionVBlankInterrupt));c=lc(a,c);f(u.memoryLocationLcdStatus,c)}else 153===c&&(c=v(u.memoryLocationLcdStatus),c=lc(a,c),f(u.memoryLocationLcdStatus,c))}}function Sb(a){var c= |
||||
r.memoryLocationTileDataSelectZeroStart;u.bgWindowTileDataSelect&&(c=r.memoryLocationTileDataSelectOneStart);if(b.GBCEnabled||u.bgDisplayEnabled){var d=r.memoryLocationTileMapSelectZeroStart;u.bgTileMapDisplaySelect&&(d=r.memoryLocationTileMapSelectOneStart);mc(a,c,d,a+r.scrollY&255,0,r.scrollX)}if(u.windowDisplayEnabled){d=r.memoryLocationTileMapSelectZeroStart;u.windowTileMapDisplaySelect&&(d=r.memoryLocationTileMapSelectOneStart);var G=r.windowX,z=r.windowY;a<z||(G-=7,mc(a,c,d,a-z,G,-G|0))}if(u.spriteDisplayEnable)for(c= |
||||
u.tallSpriteSize,d=39;0<=d;--d){z=4*d;var f=r.memoryLocationSpriteAttributesTable+z,h=v(f+0);G=v(f+1);var n=v(f+2);h-=16;G-=8;var k=8;c&&(k=16,n-=n&1);if(a>=h&&a<h+k){z=v(r.memoryLocationSpriteAttributesTable+z+3);f=g(7,z);var m=g(6,z),p=g(5,z);h=a-h;m&&(h=k-h,--h);h<<=1;n=gb(r.memoryLocationTileDataSelectOneStart,n);n+=h;k=b.GBCEnabled&&g(3,z);h=X(n+0,k);n=X(n+1,k);for(k=7;0<=k;--k){m=k;p&&(m-=7,m=-m);var l=0;g(m,n)&&(l=l+1<<1);g(m,h)&&(l+=1);if(0!==l&&(m=G+(7-k),0<=m&&160>=m)){var t=b.GBCEnabled&& |
||||
!u.bgDisplayEnabled,q=!1,w=!1;if(!t){var x=e[Za+(160*a+m)],y=x&3;f&&0<y?q=!0:b.GBCEnabled&&g(2,x)&&0<y&&(w=!0)}if(t||!q&&!w)b.GBCEnabled?(q=rb(z&7,l,!0),l=ua(0,q),t=ua(1,q),q=ua(2,q),ca(m,a,0,l),ca(m,a,1,t),ca(m,a,2,q)):(t=r.memoryLocationSpritePaletteOne,g(4,z)&&(t=r.memoryLocationSpritePaletteTwo),l=qb(l,t),ca(m,a,0,(l&16711680)>>16),ca(m,a,1,(l&65280)>>8),ca(m,a,2,l&255))}}}}}function ca(a,c,b,d){e[cb+3*(160*c+a)+b]=d}function X(a,c){return e[a-n.videoRamLocation+2048+8192*(c&1)]}function Tb(a){var c= |
||||
n.videoRamLocation;return a<c||a>=c&&a<n.cartridgeRamLocation?-1:a>=n.echoRamLocation&&a<n.spriteInformationTableLocation?v(a-8192):a>=n.spriteInformationTableLocation&&a<=n.spriteInformationTableLocationEnd?2>u.currentLcdMode?255:-1:a===b.memoryLocationSpeedSwitch?(a=255,c=v(b.memoryLocationSpeedSwitch),g(0,c)||(a=H(0,a)),b.GBCDoubleSpeed||(a=H(7,a)),a):a===r.memoryLocationScanlineRegister?(f(a,r.scanlineRegister),r.scanlineRegister):65296<=a&&65318>=a?(hb(),Bc(a)):65319<=a&&65327>=a?255:65328<= |
||||
a&&65343>=a?(hb(),t.isEnabled?t.handleWaveRamRead():-1):a===w.memoryLocationDividerRegister?(c=I(w.dividerRegister),f(a,c),c):a===w.memoryLocationTimerCounter?(f(a,w.timerCounter),w.timerCounter):a===m.memoryLocationInterruptRequest?224|m.interruptsRequestedValue:a===E.memoryLocationJoypadRegister?(a=E.joypadRegisterFlipped,E.isDpadType?(a=E.up?H(2,a):a|4,a=E.right?H(0,a):a|1,a=E.down?H(3,a):a|8,a=E.left?H(1,a):a|2):E.isButtonType&&(a=E.a?H(0,a):a|1,a=E.b?H(1,a):a|2,a=E.select?H(2,a):a|4,a=E.start? |
||||
H(3,a):a|8),a|240):-1}function v(a){return e[Qb(a)]}function Nb(a){a===aa.readGbMemory&&(aa.reachedBreakpoint=!0);var c=Tb(a);return-1===c?v(a):c}function k(a){return 0<e[a]}function Ja(a){var c=b.registerA;R(c,a);Db(c,a);c=c+a&255;b.registerA=c;A(0===c);x(0)}function Ka(a){var c=b.registerA,d=c+a+T()&255;K(0!=((c^a^d)&16));a=c+a+T()&65535;M(0<(a&256));b.registerA=d;A(0===d);x(0)}function La(a){var c=-1*a;var d=b.registerA;R(d,c);Db(d,c);d=d-a&255;b.registerA=d;A(0===d);x(1)}function Ma(a){var c= |
||||
b.registerA,d=c-a-T()&255;K(0!=((c^a^d)&16));a=c-a-T()&65535;M(0<(a&256));b.registerA=d;A(0===d);x(1)}function Na(a){a&=b.registerA;b.registerA=a;A(0===a);x(0);K(1);M(0)}function Oa(a){a=(b.registerA^a)&255;b.registerA=a;A(0===a);x(0);K(0);M(0)}function Pa(a){a|=b.registerA;b.registerA=a;A(0===a);x(0);K(0);M(0)}function Qa(a){var c=b.registerA;a*=-1;R(c,a);Db(c,a);A(0===c+a);x(1)}function Ua(a,c){A(0===(c&1<<a));x(0);K(1);return c}function ba(a,c,b){return 0<c?b|1<<a:b&~(1<<a)}function jb(a){var c= |
||||
b.programCounter;c=(c+(a<<24>>24)&65535)+1&65535;b.programCounter=c}function oc(a){var c=b.programCounter;c=c+1&65535;b.isHaltBug&&(c=c-1&65535);b.programCounter=c;switch((a&240)>>4){case 0:return Dc(a);case 1:return Ec(a);case 2:return Fc(a);case 3:return Gc(a);case 4:return Hc(a);case 5:return Ic(a);case 6:return Jc(a);case 7:return Kc(a);case 8:return Lc(a);case 9:return Mc(a);case 10:return Nc(a);case 11:return Oc(a);case 12:return Pc(a);case 13:return Qc(a);case 14:return Rc(a);default:return Sc(a)}} |
||||
function L(a){Ra(4);return Nb(a)}function S(a,c){Ra(4);Ob(a,c)}function Ha(a){Ra(8);var c=Tb(a);c=-1===c?v(a):c;a+=1;var b=Tb(a);a=-1===b?v(a):b;return l(a,c)}function U(a,c){Ra(8);var b=I(c);c&=255;Pb(a,c)&&f(a,c);a+=1;Pb(a,b)&&f(a,b)}function J(){Ra(4);return v(b.programCounter)}function Y(){Ra(4);var a=v(b.programCounter+1&65535);return l(a,J())}function Dc(a){switch(a){case 0:return 4;case 1:return a=Y(),b.registerB=I(a),b.registerC=a&255,b.programCounter=b.programCounter+2&65535,4;case 2:return S(l(b.registerB, |
||||
b.registerC),b.registerA),4;case 3:return a=l(b.registerB,b.registerC),a++,b.registerB=I(a),b.registerC=a&255,8;case 4:return a=b.registerB,R(a,1),a=a+1&255,b.registerB=a,A(0===a),x(0),4;case 5:return a=b.registerB,R(a,-1),a=a-1&255,b.registerB=a,A(0===a),x(1),4;case 6:return b.registerB=J(),b.programCounter=b.programCounter+1&65535,4;case 7:return a=b.registerA,M(128===(a&128)),b.registerA=(a<<1|a>>7)&255,A(0),x(0),K(0),4;case 8:return U(Y(),b.stackPointer),b.programCounter=b.programCounter+2&65535, |
||||
4;case 9:a=l(b.registerH,b.registerL);var c=l(b.registerB,b.registerC);Wa(a,c,!1);a=a+c&65535;b.registerH=I(a);b.registerL=a&255;x(0);return 8;case 10:return b.registerA=L(l(b.registerB,b.registerC)),4;case 11:return a=l(b.registerB,b.registerC),a=a-1&65535,b.registerB=I(a),b.registerC=a&255,8;case 12:return a=b.registerC,R(a,1),a=a+1&255,b.registerC=a,A(0===a),x(0),4;case 13:return a=b.registerC,R(a,-1),a=a-1&255,b.registerC=a,A(0===a),x(1),4;case 14:return b.registerC=J(),b.programCounter=b.programCounter+ |
||||
1&65535,4;case 15:return a=b.registerA,M(0<(a&1)),b.registerA=(a>>1|a<<7)&255,A(0),x(0),K(0),4}return-1}function Ec(a){switch(a){case 16:if(b.GBCEnabled&&(a=L(b.memoryLocationSpeedSwitch),g(0,a)))return a=H(0,a),g(7,a)?(b.GBCDoubleSpeed=!1,a=H(7,a)):(b.GBCDoubleSpeed=!0,a|=128),S(b.memoryLocationSpeedSwitch,a),68;b.isStopped=!0;b.programCounter=b.programCounter+1&65535;return 4;case 17:return a=Y(),b.registerD=I(a),b.registerE=a&255,b.programCounter=b.programCounter+2&65535,4;case 18:return S(l(b.registerD, |
||||
b.registerE),b.registerA),4;case 19:return a=l(b.registerD,b.registerE),a=a+1&65535,b.registerD=I(a),b.registerE=a&255,8;case 20:return a=b.registerD,R(a,1),b.registerD=a+1&255,A(0===b.registerD),x(0),4;case 21:return a=b.registerD,R(a,-1),b.registerD=a-1&255,A(0===b.registerD),x(1),4;case 22:return b.registerD=J(),b.programCounter=b.programCounter+1&65535,4;case 23:return a=128===(b.registerA&128),b.registerA=(b.registerA<<1|T())&255,M(a),A(0),x(0),K(0),4;case 24:return jb(J()),8;case 25:a=l(b.registerH, |
||||
b.registerL);var c=l(b.registerD,b.registerE);Wa(a,c,!1);a=a+c&65535;b.registerH=I(a);b.registerL=a&255;x(0);return 8;case 26:return a=l(b.registerD,b.registerE),b.registerA=L(a),4;case 27:return a=l(b.registerD,b.registerE),a=a-1&65535,b.registerD=I(a),b.registerE=a&255,8;case 28:return a=b.registerE,R(a,1),a=a+1&255,b.registerE=a,A(0===a),x(0),4;case 29:return a=b.registerE,R(a,-1),a=a-1&255,b.registerE=a,A(0===a),x(1),4;case 30:return b.registerE=J(),b.programCounter=b.programCounter+1&65535,4; |
||||
case 31:return a=1===(b.registerA&1),b.registerA=(b.registerA>>1|T()<<7)&255,M(a),A(0),x(0),K(0),4}return-1}function Fc(a){switch(a){case 32:return 0===Sa()?jb(J()):b.programCounter=b.programCounter+1&65535,8;case 33:return a=Y(),b.registerH=I(a),b.registerL=a&255,b.programCounter=b.programCounter+2&65535,4;case 34:return a=l(b.registerH,b.registerL),S(a,b.registerA),a=a+1&65535,b.registerH=I(a),b.registerL=a&255,4;case 35:return a=l(b.registerH,b.registerL),a=a+1&65535,b.registerH=I(a),b.registerL= |
||||
a&255,8;case 36:return a=b.registerH,R(a,1),a=a+1&255,b.registerH=a,A(0===a),x(0),4;case 37:return a=b.registerH,R(a,-1),a=a-1&255,b.registerH=a,A(0===a),x(1),4;case 38:return b.registerH=J(),b.programCounter=b.programCounter+1&65535,4;case 39:a=0;0<(b.registerF>>5&1)&&(a|=6);0<T()&&(a|=96);var c=b.registerA;0<(b.registerF>>6&1)?c=c-a&255:(9<(c&15)&&(a|=6),153<c&&(a|=96),c=c+a&255);A(0===c);M(0!==(a&96));K(0);b.registerA=c;return 4;case 40:return 0<Sa()?jb(J()):b.programCounter=b.programCounter+1& |
||||
65535,8;case 41:return a=l(b.registerH,b.registerL),Wa(a,a,!1),a=2*a&65535,b.registerH=I(a),b.registerL=a&255,x(0),8;case 42:return a=l(b.registerH,b.registerL),b.registerA=L(a),a=a+1&65535,b.registerH=I(a),b.registerL=a&255,4;case 43:return a=l(b.registerH,b.registerL),a=a-1&65535,b.registerH=I(a),b.registerL=a&255,8;case 44:return a=b.registerL,R(a,1),a=a+1&255,b.registerL=a,A(0===a),x(0),4;case 45:return a=b.registerL,R(a,-1),a=a-1&255,b.registerL=a,A(0===a),x(1),4;case 46:return b.registerL=J(), |
||||
b.programCounter=b.programCounter+1&65535,4;case 47:return b.registerA=~b.registerA,x(1),K(1),4}return-1}function Gc(a){switch(a){case 48:return 0===T()?jb(J()):b.programCounter=b.programCounter+1&65535,8;case 49:return b.stackPointer=Y(),b.programCounter=b.programCounter+2&65535,4;case 50:return a=l(b.registerH,b.registerL),S(a,b.registerA),a=a-1&65535,b.registerH=I(a),b.registerL=a&255,4;case 51:return b.stackPointer=b.stackPointer+1&65535,8;case 52:a=l(b.registerH,b.registerL);var c=L(a);R(c,1); |
||||
c=c+1&255;A(0===c);x(0);S(a,c);return 4;case 53:return a=l(b.registerH,b.registerL),c=L(a),R(c,-1),c=c-1&255,A(0===c),x(1),S(a,c),4;case 54:return S(l(b.registerH,b.registerL),J()),b.programCounter=b.programCounter+1&65535,4;case 55:return x(0),K(0),M(1),4;case 56:return 1===T()?jb(J()):b.programCounter=b.programCounter+1&65535,8;case 57:return a=l(b.registerH,b.registerL),Wa(a,b.stackPointer,!1),a=a+b.stackPointer&65535,b.registerH=I(a),b.registerL=a&255,x(0),8;case 58:return a=l(b.registerH,b.registerL), |
||||
b.registerA=L(a),a=a-1&65535,b.registerH=I(a),b.registerL=a&255,4;case 59:return b.stackPointer=b.stackPointer-1&65535,8;case 60:return a=b.registerA,R(a,1),a=a+1&255,b.registerA=a,A(0===a),x(0),4;case 61:return a=b.registerA,R(a,-1),a=a-1&255,b.registerA=a,A(0===a),x(1),4;case 62:return b.registerA=J(),b.programCounter=b.programCounter+1&65535,4;case 63:return x(0),K(0),M(0>=T()),4}return-1}function Hc(a){switch(a){case 64:return 4;case 65:return b.registerB=b.registerC,4;case 66:return b.registerB= |
||||
b.registerD,4;case 67:return b.registerB=b.registerE,4;case 68:return b.registerB=b.registerH,4;case 69:return b.registerB=b.registerL,4;case 70:return b.registerB=L(l(b.registerH,b.registerL)),4;case 71:return b.registerB=b.registerA,4;case 72:return b.registerC=b.registerB,4;case 73:return 4;case 74:return b.registerC=b.registerD,4;case 75:return b.registerC=b.registerE,4;case 76:return b.registerC=b.registerH,4;case 77:return b.registerC=b.registerL,4;case 78:return b.registerC=L(l(b.registerH, |
||||
b.registerL)),4;case 79:return b.registerC=b.registerA,4}return-1}function Ic(a){switch(a){case 80:return b.registerD=b.registerB,4;case 81:return b.registerD=b.registerC,4;case 82:return 4;case 83:return b.registerD=b.registerE,4;case 84:return b.registerD=b.registerH,4;case 85:return b.registerD=b.registerL,4;case 86:return b.registerD=L(l(b.registerH,b.registerL)),4;case 87:return b.registerD=b.registerA,4;case 88:return b.registerE=b.registerB,4;case 89:return b.registerE=b.registerC,4;case 90:return b.registerE= |
||||
b.registerD,4;case 91:return 4;case 92:return b.registerE=b.registerH,4;case 93:return b.registerE=b.registerL,4;case 94:return b.registerE=L(l(b.registerH,b.registerL)),4;case 95:return b.registerE=b.registerA,4}return-1}function Jc(a){switch(a){case 96:return b.registerH=b.registerB,4;case 97:return b.registerH=b.registerC,4;case 98:return b.registerH=b.registerD,4;case 99:return b.registerH=b.registerE,4;case 100:return b.registerH=b.registerH,4;case 101:return b.registerH=b.registerL,4;case 102:return b.registerH= |
||||
L(l(b.registerH,b.registerL)),4;case 103:return b.registerH=b.registerA,4;case 104:return b.registerL=b.registerB,4;case 105:return b.registerL=b.registerC,4;case 106:return b.registerL=b.registerD,4;case 107:return b.registerL=b.registerE,4;case 108:return b.registerL=b.registerH,4;case 109:return b.registerL=b.registerL,4;case 110:return b.registerL=L(l(b.registerH,b.registerL)),4;case 111:return b.registerL=b.registerA,4}return-1}function Kc(a){switch(a){case 112:return S(l(b.registerH,b.registerL), |
||||
b.registerB),4;case 113:return S(l(b.registerH,b.registerL),b.registerC),4;case 114:return S(l(b.registerH,b.registerL),b.registerD),4;case 115:return S(l(b.registerH,b.registerL),b.registerE),4;case 116:return S(l(b.registerH,b.registerL),b.registerH),4;case 117:return S(l(b.registerH,b.registerL),b.registerL),4;case 118:return n.isHblankHdmaActive||b.enableHalt(),4;case 119:return S(l(b.registerH,b.registerL),b.registerA),4;case 120:return b.registerA=b.registerB,4;case 121:return b.registerA=b.registerC, |
||||
4;case 122:return b.registerA=b.registerD,4;case 123:return b.registerA=b.registerE,4;case 124:return b.registerA=b.registerH,4;case 125:return b.registerA=b.registerL,4;case 126:return b.registerA=L(l(b.registerH,b.registerL)),4;case 127:return 4}return-1}function Lc(a){switch(a){case 128:return Ja(b.registerB),4;case 129:return Ja(b.registerC),4;case 130:return Ja(b.registerD),4;case 131:return Ja(b.registerE),4;case 132:return Ja(b.registerH),4;case 133:return Ja(b.registerL),4;case 134:return a= |
||||
L(l(b.registerH,b.registerL)),Ja(a),4;case 135:return Ja(b.registerA),4;case 136:return Ka(b.registerB),4;case 137:return Ka(b.registerC),4;case 138:return Ka(b.registerD),4;case 139:return Ka(b.registerE),4;case 140:return Ka(b.registerH),4;case 141:return Ka(b.registerL),4;case 142:return a=L(l(b.registerH,b.registerL)),Ka(a),4;case 143:return Ka(b.registerA),4}return-1}function Mc(a){switch(a){case 144:return La(b.registerB),4;case 145:return La(b.registerC),4;case 146:return La(b.registerD),4; |
||||
case 147:return La(b.registerE),4;case 148:return La(b.registerH),4;case 149:return La(b.registerL),4;case 150:return a=L(l(b.registerH,b.registerL)),La(a),4;case 151:return La(b.registerA),4;case 152:return Ma(b.registerB),4;case 153:return Ma(b.registerC),4;case 154:return Ma(b.registerD),4;case 155:return Ma(b.registerE),4;case 156:return Ma(b.registerH),4;case 157:return Ma(b.registerL),4;case 158:return a=L(l(b.registerH,b.registerL)),Ma(a),4;case 159:return Ma(b.registerA),4}return-1}function Nc(a){switch(a){case 160:return Na(b.registerB), |
||||
4;case 161:return Na(b.registerC),4;case 162:return Na(b.registerD),4;case 163:return Na(b.registerE),4;case 164:return Na(b.registerH),4;case 165:return Na(b.registerL),4;case 166:return a=L(l(b.registerH,b.registerL)),Na(a),4;case 167:return Na(b.registerA),4;case 168:return Oa(b.registerB),4;case 169:return Oa(b.registerC),4;case 170:return Oa(b.registerD),4;case 171:return Oa(b.registerE),4;case 172:return Oa(b.registerH),4;case 173:return Oa(b.registerL),4;case 174:return a=L(l(b.registerH,b.registerL)), |
||||
Oa(a),4;case 175:return Oa(b.registerA),4}return-1}function Oc(a){switch(a){case 176:return Pa(b.registerB),4;case 177:return Pa(b.registerC),4;case 178:return Pa(b.registerD),4;case 179:return Pa(b.registerE),4;case 180:return Pa(b.registerH),4;case 181:return Pa(b.registerL),4;case 182:return a=L(l(b.registerH,b.registerL)),Pa(a),4;case 183:return Pa(b.registerA),4;case 184:return Qa(b.registerB),4;case 185:return Qa(b.registerC),4;case 186:return Qa(b.registerD),4;case 187:return Qa(b.registerE), |
||||
4;case 188:return Qa(b.registerH),4;case 189:return Qa(b.registerL),4;case 190:return a=L(l(b.registerH,b.registerL)),Qa(a),4;case 191:return Qa(b.registerA),4}return-1}function Pc(a){switch(a){case 192:return 0===Sa()?(a=b.stackPointer,b.programCounter=Ha(a),b.stackPointer=a+2&65535,12):8;case 193:return a=Ha(b.stackPointer),b.stackPointer=b.stackPointer+2&65535,b.registerB=I(a),b.registerC=a&255,4;case 194:if(0===Sa())return b.programCounter=Y(),8;b.programCounter=b.programCounter+2&65535;return 12; |
||||
case 195:return b.programCounter=Y(),8;case 196:if(0===Sa())return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,b.programCounter+2&65535),b.programCounter=Y(),8;b.programCounter=b.programCounter+2&65535;return 12;case 197:return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,l(b.registerB,b.registerC)),8;case 198:return Ja(J()),b.programCounter=b.programCounter+1&65535,4;case 199:return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,b.programCounter),b.programCounter=0,8;case 200:return 1===Sa()?(a= |
||||
b.stackPointer,b.programCounter=Ha(a),b.stackPointer=a+2&65535,12):8;case 201:return a=b.stackPointer,b.programCounter=Ha(a),b.stackPointer=a+2&65535,8;case 202:if(1===Sa())return b.programCounter=Y(),8;b.programCounter=b.programCounter+2&65535;return 12;case 203:var c=J();a=-1;var d=!1,e=0,f=0,g=c&7;switch(g){case 0:e=b.registerB;break;case 1:e=b.registerC;break;case 2:e=b.registerD;break;case 3:e=b.registerE;break;case 4:e=b.registerH;break;case 5:e=b.registerL;break;case 6:e=L(l(b.registerH,b.registerL)); |
||||
break;case 7:e=b.registerA}var h=(c&240)>>4;switch(h){case 0:7>=c?(c=e,M(128===(c&128)),c=(c<<1|c>>7)&255,A(0===c),x(0),K(0),f=c,d=!0):15>=c&&(c=e,M(0<(c&1)),c=(c>>1|c<<7)&255,A(0===c),x(0),K(0),f=c,d=!0);break;case 1:23>=c?(c=e,d=128===(c&128),c=(c<<1|T())&255,M(d),A(0===c),x(0),K(0),f=c,d=!0):31>=c&&(c=e,d=1===(c&1),c=(c>>1|T()<<7)&255,M(d),A(0===c),x(0),K(0),f=c,d=!0);break;case 2:39>=c?(c=e,d=128===(c&128),c=c<<1&255,M(d),A(0===c),x(0),K(0),f=c,d=!0):47>=c&&(c=e,d=128===(c&128),e=1===(c&1),c= |
||||
c>>1&255,d&&(c|=128),A(0===c),x(0),K(0),M(e),f=c,d=!0);break;case 3:55>=c?(c=e,c=((c&15)<<4|(c&240)>>4)&255,A(0===c),x(0),K(0),M(0),f=c,d=!0):63>=c&&(c=e,d=1===(c&1),c=c>>1&255,A(0===c),x(0),K(0),M(d),f=c,d=!0);break;case 4:71>=c?(f=Ua(0,e),d=!0):79>=c&&(f=Ua(1,e),d=!0);break;case 5:87>=c?(f=Ua(2,e),d=!0):95>=c&&(f=Ua(3,e),d=!0);break;case 6:103>=c?(f=Ua(4,e),d=!0):111>=c&&(f=Ua(5,e),d=!0);break;case 7:119>=c?(f=Ua(6,e),d=!0):127>=c&&(f=Ua(7,e),d=!0);break;case 8:135>=c?(f=ba(0,0,e),d=!0):143>=c&& |
||||
(f=ba(1,0,e),d=!0);break;case 9:151>=c?(f=ba(2,0,e),d=!0):159>=c&&(f=ba(3,0,e),d=!0);break;case 10:167>=c?(f=ba(4,0,e),d=!0):175>=c&&(f=ba(5,0,e),d=!0);break;case 11:183>=c?(f=ba(6,0,e),d=!0):191>=c&&(f=ba(7,0,e),d=!0);break;case 12:199>=c?(f=ba(0,1,e),d=!0):207>=c&&(f=ba(1,1,e),d=!0);break;case 13:215>=c?(f=ba(2,1,e),d=!0):223>=c&&(f=ba(3,1,e),d=!0);break;case 14:231>=c?(f=ba(4,1,e),d=!0):239>=c&&(f=ba(5,1,e),d=!0);break;case 15:247>=c?(f=ba(6,1,e),d=!0):255>=c&&(f=ba(7,1,e),d=!0)}switch(g){case 0:b.registerB= |
||||
f;break;case 1:b.registerC=f;break;case 2:b.registerD=f;break;case 3:b.registerE=f;break;case 4:b.registerH=f;break;case 5:b.registerL=f;break;case 6:(4>h||7<h)&&S(l(b.registerH,b.registerL),f);break;case 7:b.registerA=f}d&&(a=4);b.programCounter=b.programCounter+1&65535;return a;case 204:if(1===Sa())return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,b.programCounter+2),b.programCounter=Y(),8;b.programCounter=b.programCounter+2&65535;return 12;case 205:return a=b.stackPointer-2&65535,b.stackPointer= |
||||
a,U(a,b.programCounter+2&65535),b.programCounter=Y(),8;case 206:return Ka(J()),b.programCounter=b.programCounter+1&65535,4;case 207:return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,b.programCounter),b.programCounter=8}return-1}function Qc(a){switch(a){case 208:return 0===T()?(a=b.stackPointer,b.programCounter=Ha(a),b.stackPointer=a+2&65535,12):8;case 209:a=b.stackPointer;var c=Ha(a);b.stackPointer=a+2&65535;b.registerD=I(c);b.registerE=c&255;return 4;case 210:if(0===T())return b.programCounter= |
||||
Y(),8;b.programCounter=b.programCounter+2&65535;return 12;case 212:if(0===T())return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,b.programCounter+2),b.programCounter=Y(),8;b.programCounter=b.programCounter+2&65535;return 12;case 213:return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,l(b.registerD,b.registerE)),8;case 214:return La(J()),b.programCounter=b.programCounter+1&65535,4;case 215:return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,b.programCounter),b.programCounter=16,8;case 216:return 1=== |
||||
T()?(a=b.stackPointer,b.programCounter=Ha(a),b.stackPointer=a+2&65535,12):8;case 217:return a=b.stackPointer,b.programCounter=Ha(a),vb(!0),b.stackPointer=a+2&65535,8;case 218:if(1===T())return b.programCounter=Y(),8;b.programCounter=b.programCounter+2&65535;return 12;case 220:if(1===T())return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,b.programCounter+2&65535),b.programCounter=Y(),8;b.programCounter=b.programCounter+2&65535;return 12;case 222:return Ma(J()),b.programCounter=b.programCounter+1& |
||||
65535,4;case 223:return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,b.programCounter),b.programCounter=24,8}return-1}function Rc(a){switch(a){case 224:return a=J(),S(65280+a,b.registerA),b.programCounter=b.programCounter+1&65535,4;case 225:a=b.stackPointer;var c=Ha(a);b.stackPointer=a+2&65535;b.registerH=I(c);b.registerL=c&255;return 4;case 226:return S(65280+b.registerC,b.registerA),4;case 229:return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,l(b.registerH,b.registerL)),8;case 230:return Na(J()), |
||||
b.programCounter=b.programCounter+1&65535,4;case 231:return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,b.programCounter),b.programCounter=32,8;case 232:return a=J()<<24>>24,Wa(b.stackPointer,a,!0),b.stackPointer=b.stackPointer+a&65535,A(0),x(0),b.programCounter=b.programCounter+1&65535,12;case 233:return b.programCounter=l(b.registerH,b.registerL),4;case 234:return S(Y(),b.registerA),b.programCounter=b.programCounter+2&65535,4;case 238:return Oa(J()),b.programCounter=b.programCounter+1&65535,4; |
||||
case 239:return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,b.programCounter),b.programCounter=40,8}return-1}function Sc(a){switch(a){case 240:return a=J(),b.registerA=L(65280+a)&255,b.programCounter=b.programCounter+1&65535,4;case 241:a=b.stackPointer;var c=Ha(a);b.stackPointer=a+2&65535;b.registerA=I(c);b.registerF=c&255;return 4;case 242:return b.registerA=L(65280+b.registerC)&255,4;case 243:return vb(!1),4;case 245:return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,l(b.registerA,b.registerF)), |
||||
8;case 246:return Pa(J()),b.programCounter=b.programCounter+1&65535,4;case 247:return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,b.programCounter),b.programCounter=48,8;case 248:return c=J()<<24>>24,a=b.stackPointer,A(0),x(0),Wa(a,c,!0),a=a+c&65535,b.registerH=I(a),b.registerL=a&255,b.programCounter=b.programCounter+1&65535,8;case 249:return b.stackPointer=l(b.registerH,b.registerL),8;case 250:return b.registerA=L(Y()),b.programCounter=b.programCounter+2&65535,4;case 251:return vb(!0),4;case 254:return Qa(J()), |
||||
b.programCounter=b.programCounter+1&65535,4;case 255:return a=b.stackPointer-2&65535,b.stackPointer=a,U(a,b.programCounter),b.programCounter=56,8}return-1}function Ra(a){0<n.DMACycles&&(a+=n.DMACycles,n.DMACycles=0);b.currentCycles+=a;if(!b.isStopped){if(Q.graphicsBatchProcessing){r.currentCycles+=a;for(var c=r.batchProcessCycles();r.currentCycles>=c;)nc(c),r.currentCycles-=c}else nc(a);Q.audioBatchProcessing?(h.currentCycles+=a,hb()):ec(a);c=a;if(Z.transferStartFlag)for(var d=0;d<c;){var e=Z.currentCycles, |
||||
k=e;d+=4;k+=4;65535<k&&(k-=65536);Z.currentCycles=k;var l=Z.isClockSpeedFast?2:7;g(l,e)&&!g(l,k)&&(e=Z.memoryLocationSerialTransferData,k=v(e),k=(k<<1)+1,k&=255,f(e,k),e=Z.numberOfBitsTransferred,8===++e?(Z.numberOfBitsTransferred=0,m.isSerialInterruptRequested=!0,bb(m.bitPositionSerialInterrupt),e=Z.memoryLocationSerialTransferControl,k=v(e),f(e,H(7,k)),Z.transferStartFlag=!1):Z.numberOfBitsTransferred=e)}}Q.timersBatchProcessing?(w.currentCycles+=a,Kb(w.currentCycles),w.currentCycles=0):Kb(a);c= |
||||
da.cycles;c+=a;c>=da.cyclesPerCycleSet&&(da.cycleSets+=1,c-=da.cyclesPerCycleSet);da.cycles=c}function pc(){return Ub(!0,-1)}function Ub(a,c){void 0===c&&(c=-1);a=1024;0<c?a=c:0>c&&(a=-1);for(var d=!1,e=!1,f=!1;!(d||e||f||aa.reachedBreakpoint);)c=qc(),0>c?d=!0:b.currentCycles>=b.MAX_CYCLES_PER_FRAME()?e=!0:-1<a&&fc()>=a&&(f=!0);if(e)return b.currentCycles-=b.MAX_CYCLES_PER_FRAME(),V.RESPONSE_CONDITION_FRAME;if(f)return V.RESPONSE_CONDITION_AUDIO;if(aa.reachedBreakpoint)return aa.reachedBreakpoint= |
||||
!1,V.RESPONSE_CONDITION_BREAKPOINT;b.programCounter=b.programCounter-1&65535;return-1}function qc(){kb=!0;if(b.isHaltBug){var a=v(b.programCounter);a=oc(a);Ra(a);b.exitHaltAndStop()}m.masterInterruptSwitchDelay&&(m.masterInterruptSwitch=!0,m.masterInterruptSwitchDelay=!1);if(0<(m.interruptsEnabledValue&m.interruptsRequestedValue&31)){a=!1;m.masterInterruptSwitch&&!b.isHaltNoJump&&(m.isVBlankInterruptEnabled&&m.isVBlankInterruptRequested?(ib(m.bitPositionVBlankInterrupt),a=!0):m.isLcdInterruptEnabled&& |
||||
m.isLcdInterruptRequested?(ib(m.bitPositionLcdInterrupt),a=!0):m.isTimerInterruptEnabled&&m.isTimerInterruptRequested?(ib(m.bitPositionTimerInterrupt),a=!0):m.isSerialInterruptEnabled&&m.isSerialInterruptRequested?(ib(m.bitPositionSerialInterrupt),a=!0):m.isJoypadInterruptEnabled&&m.isJoypadInterruptRequested&&(ib(m.bitPositionJoypadInterrupt),a=!0));var c=0;a&&(c=20,b.isHalted()&&(b.exitHaltAndStop(),c+=4));b.isHalted()&&b.exitHaltAndStop();a=c}else a=0;0<a&&Ra(a);a=4;b.isHalted()||b.isStopped|| |
||||
(a=v(b.programCounter),a=oc(a));b.registerF&=240;if(0>=a)return a;Ra(a);c=V.steps;c+=1;c>=V.stepsPerStepSet&&(V.stepSets+=1,c-=V.stepsPerStepSet);V.steps=c;b.programCounter===aa.programCounter&&(aa.reachedBreakpoint=!0);return a}function Tc(a){let c="undefined"!==typeof window?performance.now():Date.now();for(;a.fpsTimeStamps[0]<c-1E3;)a.fpsTimeStamps.shift();a.fpsTimeStamps.push(c);a.timeStampsUntilReady--;0>a.timeStampsUntilReady&&(a.timeStampsUntilReady=0);return c}function Vb(a){a.timeStampsUntilReady= |
||||
90>=a.options.gameboyFrameRate?1.25*Math.floor(a.options.gameboyFrameRate):120}function rc(a){let c=a.wasmByteMemory.slice(a.WASMBOY_CURRENT_FRAME_OUTPUT_LOCATION,a.WASMBOY_CURRENT_FRAME_OUTPUT_LOCATION+a.WASMBOY_CURRENT_FRAME_SIZE).buffer;a.graphicsWorkerPort.postMessage(O({type:B.UPDATED,graphicsFrameBuffer:c}),[c])}function sc(a){var c=("undefined"!==typeof window?performance.now():Date.now())-a.fpsTimeStamps[a.fpsTimeStamps.length-1];c=tc-c;0>c&&(c=0);a.speed&&0<a.speed&&(c/=a.speed);a.updateId= |
||||
setTimeout(()=>{uc(a)},Math.floor(c))}function uc(a,c){if(a.paused)return!0;void 0!==c&&(tc=c);lb=a.getFPS();yb=a.options.gameboyFrameRate+1;a.speed&&0<a.speed&&(yb*=a.speed);if(lb>yb)return a.fpsTimeStamps.shift(),sc(a),!0;Tc(a);let b=!a.options.headless&&!a.pauseFpsThrottle&&a.options.isAudioEnabled;(new Promise(c=>{let d;b?Wb(a,c):(d=a.wasmInstance.exports.executeFrame(),c(d))})).then(c=>{if(0<=c){ea(O({type:B.UPDATED,fps:lb}));let b=!1;a.options.frameSkip&&0<a.options.frameSkip&&(a.frameSkipCounter++, |
||||
a.frameSkipCounter<=a.options.frameSkip?b=!0:a.frameSkipCounter=0);b||rc(a);let d={type:B.UPDATED};d[C.CARTRIDGE_RAM]=$b(a).buffer;d[C.GAMEBOY_MEMORY]=a.wasmByteMemory.slice(a.WASMBOY_INTERNAL_MEMORY_LOCATION,a.WASMBOY_INTERNAL_MEMORY_LOCATION+a.WASMBOY_INTERNAL_MEMORY_SIZE).buffer;d[C.PALETTE_MEMORY]=a.wasmByteMemory.slice(a.WASMBOY_PALETTE_MEMORY_LOCATION,a.WASMBOY_PALETTE_MEMORY_LOCATION+a.WASMBOY_PALETTE_MEMORY_SIZE).buffer;d[C.INTERNAL_STATE]=ac(a).buffer;Object.keys(d).forEach(a=>{void 0=== |
||||
d[a]&&(d[a]=(new Uint8Array).buffer)});a.memoryWorkerPort.postMessage(O(d),[d[C.CARTRIDGE_RAM],d[C.GAMEBOY_MEMORY],d[C.PALETTE_MEMORY],d[C.INTERNAL_STATE]]);2===c?ea(O({type:B.BREAKPOINT})):sc(a)}else ea(O({type:B.CRASHED})),a.paused=!0})}function Wb(a,c){var b=-1;b=a.wasmInstance.exports.executeFrameAndCheckAudio(1024);1!==b&&c(b);if(1===b){b=a.wasmInstance.exports.getNumberOfSamplesInAudioBuffer();let d=lb>=yb;.25<a.currentAudioLatencyInSeconds&&d?(vc(a,b),setTimeout(()=>{Vb(a);Wb(a,c)},Math.floor(Math.floor(1E3* |
||||
(a.currentAudioLatencyInSeconds-.25))/10))):(vc(a,b),Wb(a,c))}}function vc(a,c){var b=a.wasmByteMemory.slice(a.WASMBOY_SOUND_OUTPUT_LOCATION,a.WASMBOY_SOUND_OUTPUT_LOCATION+2*c).buffer;let d={type:B.UPDATED,audioBuffer:b,numberOfSamples:c,fps:lb,allowFastSpeedStretching:60<a.options.gameboyFrameRate};b=[b];if(a.options&&a.options.enableAudioDebugging){var e=a.wasmByteMemory.slice(a.WASMBOY_CHANNEL_1_OUTPUT_LOCATION,a.WASMBOY_CHANNEL_1_OUTPUT_LOCATION+2*c).buffer;d.channel1Buffer=e;b.push(e);e=a.wasmByteMemory.slice(a.WASMBOY_CHANNEL_2_OUTPUT_LOCATION, |
||||
a.WASMBOY_CHANNEL_2_OUTPUT_LOCATION+2*c).buffer;d.channel2Buffer=e;b.push(e);e=a.wasmByteMemory.slice(a.WASMBOY_CHANNEL_3_OUTPUT_LOCATION,a.WASMBOY_CHANNEL_3_OUTPUT_LOCATION+2*c).buffer;d.channel3Buffer=e;b.push(e);c=a.wasmByteMemory.slice(a.WASMBOY_CHANNEL_4_OUTPUT_LOCATION,a.WASMBOY_CHANNEL_4_OUTPUT_LOCATION+2*c).buffer;d.channel4Buffer=c;b.push(c)}a.audioWorkerPort.postMessage(O(d),b);a.wasmInstance.exports.clearAudioBuffer()}let nb="undefined"!==typeof self,Bb;nb||(Bb=require("worker_threads").parentPort); |
||||
let B={CONNECT:"CONNECT",INSTANTIATE_WASM:"INSTANTIATE_WASM",CLEAR_MEMORY:"CLEAR_MEMORY",CLEAR_MEMORY_DONE:"CLEAR_MEMORY_DONE",GET_MEMORY:"GET_MEMORY",SET_MEMORY:"SET_MEMORY",SET_MEMORY_DONE:"SET_MEMORY_DONE",GET_CONSTANTS:"GET_CONSTANTS",GET_CONSTANTS_DONE:"GET_CONSTANTS_DONE",CONFIG:"CONFIG",RESET_AUDIO_QUEUE:"RESET_AUDIO_QUEUE",PLAY:"PLAY",BREAKPOINT:"BREAKPOINT",PAUSE:"PAUSE",UPDATED:"UPDATED",CRASHED:"CRASHED",SET_JOYPAD_STATE:"SET_JOYPAD_STATE",AUDIO_LATENCY:"AUDIO_LATENCY",RUN_WASM_EXPORT:"RUN_WASM_EXPORT", |
||||
GET_WASM_MEMORY_SECTION:"GET_WASM_MEMORY_SECTION",GET_WASM_CONSTANT:"GET_WASM_CONSTANT",FORCE_OUTPUT_FRAME:"FORCE_OUTPUT_FRAME",SET_SPEED:"SET_SPEED",IS_GBC:"IS_GBC"},C={BOOT_ROM:"BOOT_ROM",CARTRIDGE_RAM:"CARTRIDGE_RAM",CARTRIDGE_ROM:"CARTRIDGE_ROM",CARTRIDGE_HEADER:"CARTRIDGE_HEADER",GAMEBOY_MEMORY:"GAMEBOY_MEMORY",PALETTE_MEMORY:"PALETTE_MEMORY",INTERNAL_STATE:"INTERNAL_STATE"},ob=0,e=new Uint8ClampedArray(9109504),mb={size:()=>9109504,grow:()=>{},wasmByteMemory:e};var Uc=65536,Ya=67584,Za=Ya+128, |
||||
cb=Za+23552,zb=cb+93184,Xb=zb+196608,Ab=Xb+147456,Vc=Ya,Wc=Ab-Ya+15360,Gb=Ab+15360,Hb=Gb+131072,Ib=Hb+131072,Jb=Ib+131072,ub=Jb+131072,Rb=ub+131072,wb=Rb+131072,xb=wb+2560,Yb=xb+8258560,wc=Yb+65535+1,Zb=Math.ceil(wc/1024/64)+1,Q=function(){function a(){}a.enableBootRom=!1;a.useGbcWhenAvailable=!0;a.audioBatchProcessing=!1;a.graphicsBatchProcessing=!1;a.timersBatchProcessing=!1;a.graphicsDisableScanlineRendering=!1;a.audioAccumulateSamples=!1;a.tileRendering=!1;a.tileCaching=!1;a.enableAudioDebugging= |
||||
!1;return a}(),N=function(){function a(){}a.bgWhite=15921906;a.bgLightGrey=10526880;a.bgDarkGrey=5789784;a.bgBlack=526344;a.obj0White=15921906;a.obj0LightGrey=10526880;a.obj0DarkGrey=5789784;a.obj0Black=526344;a.obj1White=15921906;a.obj1LightGrey=10526880;a.obj1DarkGrey=5789784;a.obj1Black=526344;return a}(),la=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=5439232;a.bgDarkGrey=16728576;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=5439232;a.obj0DarkGrey=16728576;a.obj0Black=0;a.obj1White= |
||||
16777215;a.obj1LightGrey=5439232;a.obj1DarkGrey=16728576;a.obj1Black=0;return a}(),pa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16776960;a.bgDarkGrey=16711680;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16776960;a.obj0DarkGrey=16711680;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16776960;a.obj1DarkGrey=16711680;a.obj1Black=0;return a}(),ia=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16756067;a.bgDarkGrey=8663296;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey= |
||||
16756067;a.obj0DarkGrey=8663296;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),na=function(){function a(){}a.bgWhite=0;a.bgLightGrey=33924;a.bgDarkGrey=16768512;a.bgBlack=16777215;a.obj0White=0;a.obj0LightGrey=33924;a.obj0DarkGrey=16768512;a.obj0Black=16777215;a.obj1White=0;a.obj1LightGrey=33924;a.obj1DarkGrey=16768512;a.obj1Black=16777215;return a}(),ta=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=10855845;a.bgDarkGrey=5395026; |
||||
a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=10855845;a.obj0DarkGrey=5395026;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=10855845;a.obj1DarkGrey=5395026;a.obj1Black=0;return a}(),oa=function(){function a(){}a.bgWhite=16777125;a.bgLightGrey=16749716;a.bgDarkGrey=9737471;a.bgBlack=0;a.obj0White=16777125;a.obj0LightGrey=16749716;a.obj0DarkGrey=9737471;a.obj0Black=0;a.obj1White=16777125;a.obj1LightGrey=16749716;a.obj1DarkGrey=9737471;a.obj1Black=0;return a}(),ka=function(){function a(){}a.bgWhite= |
||||
16770757;a.bgLightGrey=13540484;a.bgDarkGrey=8678185;a.bgBlack=5910792;a.obj0White=16777215;a.obj0LightGrey=16756067;a.obj0DarkGrey=8663296;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),ma=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=8126257;a.bgDarkGrey=25541;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234; |
||||
a.obj1Black=0;return a}(),sa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=9211102;a.bgDarkGrey=5395084;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey=8663296;a.obj1Black=0;return a}(),ja=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=8126257;a.obj0DarkGrey=33792;a.obj0Black=0;a.obj1White= |
||||
16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),ra=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),qa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16776960;a.bgDarkGrey=8079872;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=6530559;a.obj0DarkGrey= |
||||
255;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),va=function(){function a(){}a.bgWhite=10853631;a.bgLightGrey=16776960;a.bgDarkGrey=25344;a.bgBlack=0;a.obj0White=10853631;a.obj0LightGrey=16776960;a.obj0DarkGrey=25344;a.obj0Black=0;a.obj1White=10853631;a.obj1LightGrey=16776960;a.obj1DarkGrey=25344;a.obj1Black=0;return a}(),wa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16777215; |
||||
a.obj0LightGrey=16745604;a.obj0DarkGrey=9714234;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),xa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=8126257;a.obj0DarkGrey=33792;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black=0;return a}(),ya=function(){function a(){}a.bgWhite=11908607;a.bgLightGrey=16777108;a.bgDarkGrey= |
||||
11360834;a.bgBlack=0;a.obj0White=0;a.obj0LightGrey=16777215;a.obj0DarkGrey=16745604;a.obj0Black=9714234;a.obj1White=0;a.obj1LightGrey=16777215;a.obj1DarkGrey=16745604;a.obj1Black=9714234;return a}(),za=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=11382148;a.bgDarkGrey=4354939;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16741120;a.obj0DarkGrey=9716224;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=5946879;a.obj1DarkGrey=16711680;a.obj1Black=255;return a}(),Aa=function(){function a(){} |
||||
a.bgWhite=16777116;a.bgLightGrey=9745919;a.bgDarkGrey=6526067;a.bgBlack=14906;a.obj0White=16762178;a.obj0LightGrey=16766464;a.obj0DarkGrey=9714176;a.obj0Black=4849664;a.obj1White=16777215;a.obj1LightGrey=16745604;a.obj1DarkGrey=9714234;a.obj1Black=0;return a}(),Ba=function(){function a(){}a.bgWhite=7077632;a.bgLightGrey=16777215;a.bgDarkGrey=16732746;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16777215;a.obj0DarkGrey=6530559;a.obj0Black=255;a.obj1White=16777215;a.obj1LightGrey=16756067;a.obj1DarkGrey= |
||||
8663296;a.obj1Black=0;return a}(),Ca=function(){function a(){}a.bgWhite=10853631;a.bgLightGrey=16776960;a.bgDarkGrey=25344;a.bgBlack=0;a.obj0White=16737106;a.obj0LightGrey=14024704;a.obj0DarkGrey=6488064;a.obj0Black=0;a.obj1White=255;a.obj1LightGrey=16777215;a.obj1DarkGrey=16777083;a.obj1Black=34047;return a}(),Da=function(){function a(){}a.bgWhite=16777166;a.bgLightGrey=6549487;a.bgDarkGrey=10257457;a.bgBlack=5921370;a.obj0White=16777215;a.obj0LightGrey=16741120;a.obj0DarkGrey=9716224;a.obj0Black= |
||||
0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),Ea=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=16745604;a.bgDarkGrey=9714234;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=65280;a.obj0DarkGrey=3245056;a.obj0Black=18944;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),Fa=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=6530559;a.bgDarkGrey=255;a.bgBlack=0;a.obj0White=16776960;a.obj0LightGrey= |
||||
16711680;a.obj0DarkGrey=6488064;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=8126257;a.obj1DarkGrey=33792;a.obj1Black=0;return a}(),Ga=function(){function a(){}a.bgWhite=16777215;a.bgLightGrey=11382148;a.bgDarkGrey=4354939;a.bgBlack=0;a.obj0White=16777215;a.obj0LightGrey=16756067;a.obj0DarkGrey=16756067;a.obj0Black=0;a.obj1White=16777215;a.obj1LightGrey=6530559;a.obj1DarkGrey=255;a.obj1Black=0;return a}(),d=function(){function a(){}a.bgWhite=N.bgWhite;a.bgLightGrey=N.bgLightGrey;a.bgDarkGrey= |
||||
N.bgDarkGrey;a.bgBlack=N.bgBlack;a.obj0White=N.obj0White;a.obj0LightGrey=N.obj0LightGrey;a.obj0DarkGrey=N.obj0DarkGrey;a.obj0Black=N.obj0Black;a.obj1White=N.obj1White;a.obj1LightGrey=N.obj1LightGrey;a.obj1DarkGrey=N.obj1DarkGrey;a.obj1Black=N.obj1Black;return a}(),Xa=function(){function a(){}a.memoryLocationBackgroundPaletteIndex=65384;a.memoryLocationBackgroundPaletteData=65385;a.memoryLocationSpritePaletteIndex=65386;a.memoryLocationSpritePaletteData=65387;a.memoryLocationBackgroundPalette=65351; |
||||
a.memoryLocationSpritePaletteOne=65352;a.memoryLocationSpritePaletteTwo=65353;return a}(),db=function(){function a(){}a.tileId=-1;a.horizontalFlip=!1;a.nextXIndexToPerformCacheCheck=-1;return a}(),y=function(){function a(){}a.updateNRx0=function(c){var b=a.NRx0Negate;a.NRx0SweepPeriod=(c&112)>>4;a.NRx0Negate=g(3,c);a.NRx0SweepShift=c&7;b&&!a.NRx0Negate&&a.sweepNegateShouldDisableChannelOnClear&&(a.isEnabled=!1)};a.updateNRx1=function(c){a.NRx1Duty=c>>6&3;a.NRx1LengthLoad=c&63;a.lengthCounter=a.MAX_LENGTH- |
||||
a.NRx1LengthLoad};a.updateNRx2=function(c){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==g(3,c)&&(a.volume=16-a.volume&15));a.NRx2StartingVolume=c>>4&15;a.NRx2EnvelopeAddMode=g(3,c);a.NRx2EnvelopePeriod=c&7;c=0<(c&248);a.isDacEnabled=c;c||(a.isEnabled=!1)};a.updateNRx3=function(c){a.NRx3FrequencyLSB=c;a.frequency=a.NRx4FrequencyMSB<<8|c};a.updateNRx4=function(c){var b=c&7;a.NRx4FrequencyMSB=b;a.frequency=b<<8|a.NRx3FrequencyLSB; |
||||
b=1===(h.frameSequencer&1);var d=!a.NRx4LengthEnabled&&g(6,c);!b&&0<a.lengthCounter&&d&&(--a.lengthCounter,g(7,c)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=g(6,c);g(7,c)&&(a.trigger(),!b&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.cycleCounter;e[1028+50*a.saveStateSlot]=a.NRx0SweepPeriod;e[1029+50*a.saveStateSlot]=a.NRx0Negate;e[1030+50*a.saveStateSlot]=a.NRx0SweepShift;e[1031+50*a.saveStateSlot]=a.NRx1Duty; |
||||
e[1033+50*a.saveStateSlot]=a.NRx1LengthLoad;e[1034+50*a.saveStateSlot]=a.NRx2StartingVolume;e[1035+50*a.saveStateSlot]=a.NRx2EnvelopeAddMode;e[1036+50*a.saveStateSlot]=a.NRx2EnvelopePeriod;e[1037+50*a.saveStateSlot]=a.NRx3FrequencyLSB;e[1038+50*a.saveStateSlot]=a.NRx4LengthEnabled;e[1039+50*a.saveStateSlot]=a.NRx4FrequencyMSB;e[1040+50*a.saveStateSlot]=a.isEnabled;e[1041+50*a.saveStateSlot]=a.isDacEnabled;e[1042+50*a.saveStateSlot]=a.frequency;e[1046+50*a.saveStateSlot]=a.frequencyTimer;e[1050+50* |
||||
a.saveStateSlot]=a.envelopeCounter;e[1054+50*a.saveStateSlot]=a.isEnvelopeAutomaticUpdating;e[1055+50*a.saveStateSlot]=a.lengthCounter;e[1059+50*a.saveStateSlot]=a.volume;e[1063+50*a.saveStateSlot]=a.dutyCycle;e[1064+50*a.saveStateSlot]=a.waveFormPositionOnDuty;e[1065+50*a.saveStateSlot]=a.isSweepEnabled;e[1066+50*a.saveStateSlot]=a.sweepCounter;e[1070+50*a.saveStateSlot]=a.sweepShadowFrequency;e[1073+50*a.saveStateSlot]=a.sweepNegateShouldDisableChannelOnClear};a.loadState=function(){a.cycleCounter= |
||||
e[1024+50*a.cycleCounter];a.NRx0SweepPeriod=e[1028+50*a.saveStateSlot];a.NRx0Negate=k(1029+50*a.saveStateSlot);a.NRx0SweepShift=e[1030+50*a.saveStateSlot];a.NRx1Duty=e[1031+50*a.saveStateSlot];a.NRx1LengthLoad=e[1033+50*a.saveStateSlot];a.NRx2StartingVolume=e[1034+50*a.saveStateSlot];a.NRx2EnvelopeAddMode=k(1035+50*a.saveStateSlot);a.NRx2EnvelopePeriod=e[1036+50*a.saveStateSlot];a.NRx3FrequencyLSB=e[1037+50*a.saveStateSlot];a.NRx4LengthEnabled=k(1038+50*a.saveStateSlot);a.NRx4FrequencyMSB=e[1039+ |
||||
50*a.saveStateSlot];a.isEnabled=k(1040+50*a.saveStateSlot);a.isDacEnabled=k(1041+50*a.saveStateSlot);a.frequency=e[1042+50*a.saveStateSlot];a.frequencyTimer=e[1046+50*a.saveStateSlot];a.envelopeCounter=e[1050+50*a.saveStateSlot];a.isEnvelopeAutomaticUpdating=k(1054+50*a.saveStateSlot);a.lengthCounter=e[1055+50*a.saveStateSlot];a.volume=e[1059+50*a.saveStateSlot];a.dutyCycle=e[1063+50*a.saveStateSlot];a.waveFormPositionOnDuty=e[1064+50*a.saveStateSlot];a.isSweepEnabled=k(1065+50*a.saveStateSlot);a.sweepCounter= |
||||
e[1066+50*a.saveStateSlot];a.sweepShadowFrequency=e[1070+50*a.saveStateSlot];a.sweepNegateShouldDisableChannelOnClear=k(1073+50*a.saveStateSlot)};a.initialize=function(){f(a.memoryLocationNRx0,128);f(a.memoryLocationNRx1,191);f(a.memoryLocationNRx2,243);f(a.memoryLocationNRx3,193);f(a.memoryLocationNRx4,191);b.BootROMEnabled&&(f(a.memoryLocationNRx1,63),f(a.memoryLocationNRx2,0),f(a.memoryLocationNRx3,0),f(a.memoryLocationNRx4,184))};a.getSampleFromCycleCounter=function(){var c=a.cycleCounter;a.cycleCounter= |
||||
0;return a.getSample(c)};a.resetTimer=function(){var c=2048-a.frequency<<2;b.GBCDoubleSpeed&&(c<<=2);a.frequencyTimer=c};a.getSample=function(c){var b=a.frequencyTimer;for(b-=c;0>=b;)c=Math.abs(b),a.resetTimer(),b=a.frequencyTimer,b-=c,a.waveFormPositionOnDuty=a.waveFormPositionOnDuty+1&7;a.frequencyTimer=b;if(a.isEnabled&&a.isDacEnabled)b=a.volume&15;else return 15;c=1;dc(a.NRx1Duty,a.waveFormPositionOnDuty)||(c=-c);return c*b+15};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter= |
||||
a.MAX_LENGTH);a.resetTimer();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.sweepShadowFrequency=a.frequency;a.sweepCounter=0===a.NRx0SweepPeriod?8:a.NRx0SweepPeriod;a.isSweepEnabled=0<a.NRx0SweepPeriod||0<a.NRx0SweepShift;a.sweepNegateShouldDisableChannelOnClear=!1;var c;if(c=0<a.NRx0SweepShift)c=2047<Fb()?!0:!1;c&&(a.isEnabled=!1);a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(c){c=a.cycleCounter+ |
||||
c;a.cycleCounter=c;return!(0<a.frequencyTimer-c)};a.updateSweep=function(){if(a.isEnabled&&a.isSweepEnabled){var c=a.sweepCounter-1;0>=c?0===a.NRx0SweepPeriod?a.sweepCounter=8:(a.sweepCounter=a.NRx0SweepPeriod,c=Fb(),2047<c&&(a.isEnabled=!1),0<a.NRx0SweepShift&&(a.setFrequency(c),2047<Fb()&&(a.isEnabled=!1))):a.sweepCounter=c}};a.updateLength=function(){var c=a.lengthCounter;0<c&&a.NRx4LengthEnabled&&(--c,0===c&&(a.isEnabled=!1));a.lengthCounter=c};a.updateEnvelope=function(){var c=a.envelopeCounter- |
||||
1;if(0>=c)if(0===a.NRx2EnvelopePeriod)c=8;else if(c=a.NRx2EnvelopePeriod,0!==c&&a.isEnvelopeAutomaticUpdating){var b=a.volume;b=a.NRx2EnvelopeAddMode?b+1:b-1;b&=15;15>b?a.volume=b:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter=c};a.setFrequency=function(c){a.sweepShadowFrequency=c;var b=c>>8&7;c&=255;var d=v(a.memoryLocationNRx4)&248|b;f(a.memoryLocationNRx3,c);f(a.memoryLocationNRx4,d);a.NRx3FrequencyLSB=c;a.NRx4FrequencyMSB=b;a.frequency=a.NRx4FrequencyMSB<<8|a.NRx3FrequencyLSB};a.cycleCounter= |
||||
0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65296;a.NRx0SweepPeriod=0;a.NRx0Negate=!1;a.NRx0SweepShift=0;a.memoryLocationNRx1=65297;a.NRx1Duty=0;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65298;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65299;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65300;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.channelNumber=1;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating= |
||||
!1;a.lengthCounter=0;a.volume=0;a.dutyCycle=0;a.waveFormPositionOnDuty=0;a.isSweepEnabled=!1;a.sweepCounter=0;a.sweepShadowFrequency=0;a.sweepNegateShouldDisableChannelOnClear=!1;a.saveStateSlot=7;return a}(),D=function(){function a(){}a.updateNRx1=function(c){a.NRx1Duty=c>>6&3;a.NRx1LengthLoad=c&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(c){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==g(3,c)&& |
||||
(a.volume=16-a.volume&15));a.NRx2StartingVolume=c>>4&15;a.NRx2EnvelopeAddMode=g(3,c);a.NRx2EnvelopePeriod=c&7;c=0<(c&248);a.isDacEnabled=c;c||(a.isEnabled=c)};a.updateNRx3=function(c){a.NRx3FrequencyLSB=c;a.frequency=a.NRx4FrequencyMSB<<8|c};a.updateNRx4=function(c){var b=c&7;a.NRx4FrequencyMSB=b;a.frequency=b<<8|a.NRx3FrequencyLSB;b=1===(h.frameSequencer&1);var d=!a.NRx4LengthEnabled&&g(6,c);!b&&0<a.lengthCounter&&d&&(--a.lengthCounter,g(7,c)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled= |
||||
g(6,c);g(7,c)&&(a.trigger(),!b&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.cycleCounter;e[1031+50*a.saveStateSlot]=a.NRx1Duty;e[1032+50*a.saveStateSlot]=a.NRx1LengthLoad;e[1034+50*a.saveStateSlot]=a.NRx2StartingVolume;e[1035+50*a.saveStateSlot]=a.NRx2EnvelopeAddMode;e[1036+50*a.saveStateSlot]=a.NRx2EnvelopePeriod;e[1037+50*a.saveStateSlot]=a.NRx3FrequencyLSB;e[1038+50*a.saveStateSlot]=a.NRx4LengthEnabled;e[1039+50*a.saveStateSlot]= |
||||
a.NRx4FrequencyMSB;e[1040+50*a.saveStateSlot]=a.isEnabled;e[1041+50*a.saveStateSlot]=a.isDacEnabled;e[1042+50*a.saveStateSlot]=a.frequency;e[1046+50*a.saveStateSlot]=a.frequencyTimer;e[1050+50*a.saveStateSlot]=a.envelopeCounter;e[1054+50*a.saveStateSlot]=a.isEnvelopeAutomaticUpdating;e[1055+50*a.saveStateSlot]=a.lengthCounter;e[1059+50*a.saveStateSlot]=a.volume;e[1063+50*a.saveStateSlot]=a.dutyCycle;e[1064+50*a.saveStateSlot]=a.waveFormPositionOnDuty};a.loadState=function(){a.cycleCounter=e[1024+ |
||||
50*a.cycleCounter];a.NRx1Duty=e[1031+50*a.saveStateSlot];a.NRx1LengthLoad=e[1032+50*a.saveStateSlot];a.NRx2StartingVolume=e[1034+50*a.saveStateSlot];a.NRx2EnvelopeAddMode=k(1035+50*a.saveStateSlot);a.NRx2EnvelopePeriod=e[1036+50*a.saveStateSlot];a.NRx3FrequencyLSB=e[1037+50*a.saveStateSlot];a.NRx4LengthEnabled=k(1038+50*a.saveStateSlot);a.NRx4FrequencyMSB=e[1039+50*a.saveStateSlot];a.isEnabled=k(1040+50*a.saveStateSlot);a.isDacEnabled=k(1041+50*a.saveStateSlot);a.frequency=e[1042+50*a.saveStateSlot]; |
||||
a.frequencyTimer=e[1046+50*a.saveStateSlot];a.envelopeCounter=e[1050+50*a.saveStateSlot];a.isEnvelopeAutomaticUpdating=k(1054+50*a.saveStateSlot);a.lengthCounter=e[1055+50*a.saveStateSlot];a.volume=e[1059+50*a.saveStateSlot];a.dutyCycle=e[1063+50*a.saveStateSlot];a.waveFormPositionOnDuty=e[1064+50*a.saveStateSlot]};a.initialize=function(){f(a.memoryLocationNRx1-1,255);f(a.memoryLocationNRx1,63);f(a.memoryLocationNRx2,0);f(a.memoryLocationNRx3,0);f(a.memoryLocationNRx4,184)};a.getSampleFromCycleCounter= |
||||
function(){var c=a.cycleCounter;a.cycleCounter=0;return a.getSample(c)};a.resetTimer=function(){a.frequencyTimer=2048-a.frequency<<2<<b.GBCDoubleSpeed};a.getSample=function(c){var b=a.frequencyTimer;for(b-=c;0>=b;)c=Math.abs(b),a.resetTimer(),b=a.frequencyTimer,b-=c,a.waveFormPositionOnDuty=a.waveFormPositionOnDuty+1&7;a.frequencyTimer=b;if(a.isEnabled&&a.isDacEnabled)b=a.volume&15;else return 15;c=1;dc(a.NRx1Duty,a.waveFormPositionOnDuty)||(c=-c);return c*b+15};a.trigger=function(){a.isEnabled=!0; |
||||
0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(c){c=a.cycleCounter+c;a.cycleCounter=c;return!(0<a.frequencyTimer-c)};a.updateLength=function(){var c=a.lengthCounter;0<c&&a.NRx4LengthEnabled&&--c;0===c&&(a.isEnabled=!1);a.lengthCounter=c};a.updateEnvelope=function(){var c=a.envelopeCounter- |
||||
1;if(0>=c)if(0===a.NRx2EnvelopePeriod)c=8;else if(c=a.NRx2EnvelopePeriod,0!==c&&a.isEnvelopeAutomaticUpdating){var b=a.volume;b=a.NRx2EnvelopeAddMode?b+1:b-1;b&=15;15>b?a.volume=b:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter=c};a.setFrequency=function(c){var b=c>>8;c&=255;var d=v(a.memoryLocationNRx4)&248|b;f(a.memoryLocationNRx3,c);f(a.memoryLocationNRx4,d);a.NRx3FrequencyLSB=c;a.NRx4FrequencyMSB=b;a.frequency=b<<8|c};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65301;a.memoryLocationNRx1= |
||||
65302;a.NRx1Duty=0;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65303;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65304;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65305;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.channelNumber=2;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.envelopeCounter=0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.dutyCycle=0;a.waveFormPositionOnDuty=0;a.saveStateSlot=8;return a}(),t=function(){function a(){} |
||||
a.updateNRx0=function(c){c=g(7,c);!a.isDacEnabled&&c&&(a.sampleBuffer=0);a.isDacEnabled=c;c||(a.isEnabled=c)};a.updateNRx1=function(c){a.NRx1LengthLoad=c;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(c){a.NRx2VolumeCode=c>>5&15};a.updateNRx3=function(c){a.NRx3FrequencyLSB=c;a.frequency=a.NRx4FrequencyMSB<<8|c};a.updateNRx4=function(c){var b=c&7;a.NRx4FrequencyMSB=b;a.frequency=b<<8|a.NRx3FrequencyLSB;b=1===(h.frameSequencer&1);if(!b){var d=!a.NRx4LengthEnabled&&g(6,c);0<a.lengthCounter&& |
||||
d&&(--a.lengthCounter,g(7,c)||0!==a.lengthCounter||(a.isEnabled=!1))}a.NRx4LengthEnabled=g(6,c);g(7,c)&&(a.trigger(),!b&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.cycleCounter;e[1032+50*a.saveStateSlot]=a.NRx1LengthLoad;e[1034+50*a.saveStateSlot]=a.NRx2VolumeCode;e[1036+50*a.saveStateSlot]=a.NRx3FrequencyLSB;e[1037+50*a.saveStateSlot]=a.NRx4LengthEnabled;e[1038+50*a.saveStateSlot]=a.NRx4FrequencyMSB;e[1039+50*a.saveStateSlot]= |
||||
a.isEnabled;e[1040+50*a.saveStateSlot]=a.isDacEnabled;e[1041+50*a.saveStateSlot]=a.frequency;e[1045+50*a.saveStateSlot]=a.frequencyTimer;e[1049+50*a.saveStateSlot]=a.lengthCounter;e[1057+50*a.saveStateSlot]=a.waveTablePosition;e[1061+50*a.saveStateSlot]=a.volumeCode;e[1062+50*a.saveStateSlot]=a.volumeCodeChanged;e[1063+50*a.saveStateSlot]=a.sampleBuffer};a.loadState=function(){a.cycleCounter=e[1024+50*a.cycleCounter];a.NRx1LengthLoad=e[1032+50*a.saveStateSlot];a.NRx2VolumeCode=e[1034+50*a.saveStateSlot]; |
||||
a.NRx3FrequencyLSB=e[1036+50*a.saveStateSlot];a.NRx4LengthEnabled=k(1037+50*a.saveStateSlot);a.NRx4FrequencyMSB=e[1038+50*a.saveStateSlot];a.isEnabled=k(1039+50*a.saveStateSlot);a.isDacEnabled=k(1040+50*a.saveStateSlot);a.frequency=e[1041+50*a.saveStateSlot];a.frequencyTimer=e[1045+50*a.saveStateSlot];a.lengthCounter=e[1049+50*a.saveStateSlot];a.waveTablePosition=e[1057+50*a.saveStateSlot];a.volumeCode=e[1061+50*a.saveStateSlot];a.volumeCodeChanged=k(1062+50*a.saveStateSlot);a.sampleBuffer=e[1063+ |
||||
50*a.saveStateSlot]};a.handleWaveRamRead=function(){return v(t.memoryLocationWaveTable+(t.waveTablePosition>>1|0))};a.handleWaveRamWrite=function(c){f(a.memoryLocationWaveTable+(a.waveTablePosition>>1|0),c)};a.initialize=function(){f(a.memoryLocationNRx0,127);f(a.memoryLocationNRx1,255);f(a.memoryLocationNRx2,159);f(a.memoryLocationNRx3,0);f(a.memoryLocationNRx4,184);a.volumeCodeChanged=!0};a.getSampleFromCycleCounter=function(){var c=a.cycleCounter;a.cycleCounter=0;return a.getSample(c)};a.resetTimer= |
||||
function(){a.frequencyTimer=2048-a.frequency<<1<<b.GBCDoubleSpeed};a.getSample=function(c){if(!a.isEnabled||!a.isDacEnabled)return 15;var b=a.volumeCode;a.volumeCodeChanged&&(b=v(a.memoryLocationNRx2),b=b>>5&15,a.volumeCode=b,a.volumeCodeChanged=!1);var d=t.sampleBuffer;d>>=(0===(t.waveTablePosition&1))<<2;d&=15;var e=0;switch(b){case 0:d>>=4;break;case 1:e=1;break;case 2:d>>=1;e=2;break;default:d>>=2,e=4}d=(0<e?d/e:0)+15;b=a.frequencyTimer;for(b-=c;0>=b;){c=Math.abs(b);a.resetTimer();b=a.frequencyTimer; |
||||
b-=c;c=t.waveTablePosition;for(c+=1;32<=c;)c-=32;t.waveTablePosition=c;t.sampleBuffer=v(t.memoryLocationWaveTable+(t.waveTablePosition>>1|0))}a.frequencyTimer=b;return d};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.resetTimer();a.frequencyTimer+=6;a.waveTablePosition=0;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate=function(b){a.cycleCounter+=b;return!(!a.volumeCodeChanged&&0<a.frequencyTimer-a.cycleCounter)};a.updateLength=function(){var b=a.lengthCounter; |
||||
0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.cycleCounter=0;a.MAX_LENGTH=256;a.memoryLocationNRx0=65306;a.memoryLocationNRx1=65307;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65308;a.NRx2VolumeCode=0;a.memoryLocationNRx3=65309;a.NRx3FrequencyLSB=0;a.memoryLocationNRx4=65310;a.NRx4LengthEnabled=!1;a.NRx4FrequencyMSB=0;a.memoryLocationWaveTable=65328;a.channelNumber=3;a.isEnabled=!1;a.isDacEnabled=!1;a.frequency=0;a.frequencyTimer=0;a.lengthCounter=0;a.waveTablePosition=0; |
||||
a.volumeCode=0;a.volumeCodeChanged=!1;a.sampleBuffer=0;a.saveStateSlot=9;return a}(),F=function(){function a(){}a.updateNRx1=function(b){a.NRx1LengthLoad=b&63;a.lengthCounter=a.MAX_LENGTH-a.NRx1LengthLoad};a.updateNRx2=function(b){a.isEnabled&&(0===a.NRx2EnvelopePeriod&&a.isEnvelopeAutomaticUpdating&&(a.volume=a.volume+1&15),a.NRx2EnvelopeAddMode!==g(3,b)&&(a.volume=16-a.volume&15));a.NRx2StartingVolume=b>>4&15;a.NRx2EnvelopeAddMode=g(3,b);a.NRx2EnvelopePeriod=b&7;b=0<(b&248);a.isDacEnabled=b;b|| |
||||
(a.isEnabled=b)};a.updateNRx3=function(b){var c=b&7;a.NRx3ClockShift=b>>4;a.NRx3WidthMode=g(3,b);a.NRx3DivisorCode=c;c<<=1;1>c&&(c=1);a.divisor=c<<3};a.updateNRx4=function(b){var c=1===(h.frameSequencer&1),d=!a.NRx4LengthEnabled&&g(6,b);!c&&0<a.lengthCounter&&d&&(--a.lengthCounter,g(7,b)||0!==a.lengthCounter||(a.isEnabled=!1));a.NRx4LengthEnabled=g(6,b);g(7,b)&&(a.trigger(),!c&&a.lengthCounter===a.MAX_LENGTH&&a.NRx4LengthEnabled&&--a.lengthCounter)};a.saveState=function(){e[1024+50*a.saveStateSlot]= |
||||
a.cycleCounter;e[1028+50*a.saveStateSlot]=a.NRx1LengthLoad;e[1030+50*a.saveStateSlot]=a.NRx2StartingVolume;e[1031+50*a.saveStateSlot]=a.NRx2EnvelopeAddMode;e[1032+50*a.saveStateSlot]=a.NRx2EnvelopePeriod;e[1033+50*a.saveStateSlot]=a.NRx3ClockShift;e[1034+50*a.saveStateSlot]=a.NRx3WidthMode;e[1035+50*a.saveStateSlot]=a.NRx3DivisorCode;e[1037+50*a.saveStateSlot]=a.NRx4LengthEnabled;e[1039+50*a.saveStateSlot]=a.isEnabled;e[1040+50*a.saveStateSlot]=a.isDacEnabled;e[1045+50*a.saveStateSlot]=a.frequencyTimer; |
||||
e[1049+50*a.saveStateSlot]=a.envelopeCounter;e[1053+50*a.saveStateSlot]=a.isEnvelopeAutomaticUpdating;e[1054+50*a.saveStateSlot]=a.lengthCounter;e[1058+50*a.saveStateSlot]=a.volume;e[1062+50*a.saveStateSlot]=a.linearFeedbackShiftRegister};a.loadState=function(){a.cycleCounter=e[1024+50*a.cycleCounter];a.NRx1LengthLoad=e[1028+50*a.saveStateSlot];a.NRx2StartingVolume=e[1030+50*a.saveStateSlot];a.NRx2EnvelopeAddMode=k(1031+50*a.saveStateSlot);a.NRx2EnvelopePeriod=e[1032+50*a.saveStateSlot];a.NRx3ClockShift= |
||||
e[1033+50*a.saveStateSlot];a.NRx3WidthMode=k(1034+50*a.saveStateSlot);a.NRx3DivisorCode=e[1035+50*a.saveStateSlot];a.NRx4LengthEnabled=k(1037+50*a.saveStateSlot);a.isEnabled=k(1039+50*a.saveStateSlot);a.isDacEnabled=k(1040+50*a.saveStateSlot);a.frequencyTimer=e[1045+50*a.saveStateSlot];a.envelopeCounter=e[1049+50*a.saveStateSlot];a.isEnvelopeAutomaticUpdating=k(1053+50*a.saveStateSlot);a.lengthCounter=e[1054+50*a.saveStateSlot];a.volume=e[1058+50*a.saveStateSlot];a.linearFeedbackShiftRegister=e[1062+ |
||||
50*a.saveStateSlot]};a.initialize=function(){f(a.memoryLocationNRx1-1,255);f(a.memoryLocationNRx1,255);f(a.memoryLocationNRx2,0);f(a.memoryLocationNRx3,0);f(a.memoryLocationNRx4,191)};a.getSampleFromCycleCounter=function(){var b=a.cycleCounter;a.cycleCounter=0;return a.getSample(b)};a.getSample=function(b){var c=a.frequencyTimer;c-=b;if(0>=c){b=Math.abs(c);c=a.getNoiseChannelFrequencyPeriod();c-=b;b=a.linearFeedbackShiftRegister;var d=b&1^b>>1&1;b=b>>1|d<<14;a.NRx3WidthMode&&(b=b&-65|d<<6);a.linearFeedbackShiftRegister= |
||||
b}0>c&&(c=0);a.frequencyTimer=c;if(a.isEnabled&&a.isDacEnabled)c=a.volume&15;else return 15;b=g(0,a.linearFeedbackShiftRegister)?-1:1;return b*c+15};a.trigger=function(){a.isEnabled=!0;0===a.lengthCounter&&(a.lengthCounter=a.MAX_LENGTH);a.frequencyTimer=a.getNoiseChannelFrequencyPeriod();a.envelopeCounter=0===a.NRx2EnvelopePeriod?8:a.NRx2EnvelopePeriod;a.isEnvelopeAutomaticUpdating=!0;a.volume=a.NRx2StartingVolume;a.linearFeedbackShiftRegister=32767;a.isDacEnabled||(a.isEnabled=!1)};a.willChannelUpdate= |
||||
function(b){a.cycleCounter+=b;return!(0<a.frequencyTimer-a.cycleCounter)};a.getNoiseChannelFrequencyPeriod=function(){return a.divisor<<a.NRx3ClockShift<<b.GBCDoubleSpeed};a.updateLength=function(){var b=a.lengthCounter;0<b&&a.NRx4LengthEnabled&&--b;0===b&&(a.isEnabled=!1);a.lengthCounter=b};a.updateEnvelope=function(){var b=a.envelopeCounter-1;if(0>=b)if(0===a.NRx2EnvelopePeriod)b=8;else if(b=a.NRx2EnvelopePeriod,0!==b&&a.isEnvelopeAutomaticUpdating){var d=a.volume;d=a.NRx2EnvelopeAddMode?d+1:d- |
||||
1;d&=15;15>d?a.volume=d:a.isEnvelopeAutomaticUpdating=!1}a.envelopeCounter=b};a.cycleCounter=0;a.MAX_LENGTH=64;a.memoryLocationNRx0=65311;a.memoryLocationNRx1=65312;a.NRx1LengthLoad=0;a.memoryLocationNRx2=65313;a.NRx2StartingVolume=0;a.NRx2EnvelopeAddMode=!1;a.NRx2EnvelopePeriod=0;a.memoryLocationNRx3=65314;a.NRx3ClockShift=0;a.NRx3WidthMode=!1;a.NRx3DivisorCode=0;a.memoryLocationNRx4=65315;a.NRx4LengthEnabled=!1;a.channelNumber=4;a.isEnabled=!1;a.isDacEnabled=!1;a.frequencyTimer=0;a.envelopeCounter= |
||||
0;a.isEnvelopeAutomaticUpdating=!1;a.lengthCounter=0;a.volume=0;a.divisor=0;a.linearFeedbackShiftRegister=0;a.saveStateSlot=10;return a}(),p=function(){function a(){}a.channel1Sample=15;a.channel2Sample=15;a.channel3Sample=15;a.channel4Sample=15;a.channel1DacEnabled=!1;a.channel2DacEnabled=!1;a.channel3DacEnabled=!1;a.channel4DacEnabled=!1;a.leftChannelSampleUnsignedByte=127;a.rightChannelSampleUnsignedByte=127;a.mixerVolumeChanged=!1;a.mixerEnabledChanged=!1;a.needToRemixSamples=!1;return a}(),h= |
||||
function(){function a(){}a.batchProcessCycles=function(){return 87<<b.GBCDoubleSpeed};a.updateNR50=function(b){a.NR50LeftMixerVolume=b>>4&7;a.NR50RightMixerVolume=b&7};a.updateNR51=function(b){a.NR51IsChannel4EnabledOnLeftOutput=g(7,b);a.NR51IsChannel3EnabledOnLeftOutput=g(6,b);a.NR51IsChannel2EnabledOnLeftOutput=g(5,b);a.NR51IsChannel1EnabledOnLeftOutput=g(4,b);a.NR51IsChannel4EnabledOnRightOutput=g(3,b);a.NR51IsChannel3EnabledOnRightOutput=g(2,b);a.NR51IsChannel2EnabledOnRightOutput=g(1,b);a.NR51IsChannel1EnabledOnRightOutput= |
||||
g(0,b)};a.updateNR52=function(b){a.NR52IsSoundEnabled=g(7,b)};a.maxFrameSequenceCycles=function(){return 8192<<b.GBCDoubleSpeed};a.maxDownSampleCycles=function(){return b.CLOCK_SPEED()/a.sampleRate};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.NR50LeftMixerVolume;e[1028+50*a.saveStateSlot]=a.NR50RightMixerVolume;e[1032+50*a.saveStateSlot]=a.NR51IsChannel1EnabledOnLeftOutput;e[1033+50*a.saveStateSlot]=a.NR51IsChannel2EnabledOnLeftOutput;e[1034+50*a.saveStateSlot]=a.NR51IsChannel3EnabledOnLeftOutput; |
||||
e[1035+50*a.saveStateSlot]=a.NR51IsChannel4EnabledOnLeftOutput;e[1036+50*a.saveStateSlot]=a.NR51IsChannel1EnabledOnRightOutput;e[1037+50*a.saveStateSlot]=a.NR51IsChannel2EnabledOnRightOutput;e[1038+50*a.saveStateSlot]=a.NR51IsChannel3EnabledOnRightOutput;e[1039+50*a.saveStateSlot]=a.NR51IsChannel4EnabledOnRightOutput;e[1040+50*a.saveStateSlot]=a.NR52IsSoundEnabled;e[1041+50*a.saveStateSlot]=a.frameSequenceCycleCounter;e[1046+50*a.saveStateSlot]=a.frameSequencer;e[1047+50*a.saveStateSlot]=a.downSampleCycleCounter; |
||||
e[1048+50*a.saveStateSlot]=p.channel1Sample;e[1049+50*a.saveStateSlot]=p.channel2Sample;e[1050+50*a.saveStateSlot]=p.channel3Sample;e[1051+50*a.saveStateSlot]=p.channel4Sample;e[1052+50*a.saveStateSlot]=p.channel1DacEnabled;e[1053+50*a.saveStateSlot]=p.channel2DacEnabled;e[1054+50*a.saveStateSlot]=p.channel3DacEnabled;e[1055+50*a.saveStateSlot]=p.channel4DacEnabled;e[1056+50*a.saveStateSlot]=p.leftChannelSampleUnsignedByte;e[1057+50*a.saveStateSlot]=p.rightChannelSampleUnsignedByte;e[1058+50*a.saveStateSlot]= |
||||
p.mixerVolumeChanged;e[1059+50*a.saveStateSlot]=p.mixerEnabledChanged};a.loadState=function(){a.NR50LeftMixerVolume=e[1024+50*a.saveStateSlot];a.NR50RightMixerVolume=e[1028+50*a.saveStateSlot];a.NR51IsChannel1EnabledOnLeftOutput=k(1032+50*a.saveStateSlot);a.NR51IsChannel2EnabledOnLeftOutput=k(1033+50*a.saveStateSlot);a.NR51IsChannel3EnabledOnLeftOutput=k(1034+50*a.saveStateSlot);a.NR51IsChannel4EnabledOnLeftOutput=k(1035+50*a.saveStateSlot);a.NR51IsChannel1EnabledOnRightOutput=k(1036+50*a.saveStateSlot); |
||||
a.NR51IsChannel2EnabledOnRightOutput=k(1037+50*a.saveStateSlot);a.NR51IsChannel3EnabledOnRightOutput=k(1038+50*a.saveStateSlot);a.NR51IsChannel4EnabledOnRightOutput=k(1039+50*a.saveStateSlot);a.NR52IsSoundEnabled=k(1040+50*a.saveStateSlot);a.frameSequenceCycleCounter=e[1041+50*a.saveStateSlot];a.frameSequencer=e[1046+50*a.saveStateSlot];a.downSampleCycleCounter=e[1047+50*a.saveStateSlot];p.channel1Sample=e[1048+50*a.saveStateSlot];p.channel2Sample=e[1049+50*a.saveStateSlot];p.channel3Sample=e[1050+ |
||||
50*a.saveStateSlot];p.channel4Sample=e[1051+50*a.saveStateSlot];p.channel1DacEnabled=k(1052+50*a.saveStateSlot);p.channel2DacEnabled=k(1053+50*a.saveStateSlot);p.channel3DacEnabled=k(1054+50*a.saveStateSlot);p.channel4DacEnabled=k(1055+50*a.saveStateSlot);p.leftChannelSampleUnsignedByte=e[1056+50*a.saveStateSlot];p.rightChannelSampleUnsignedByte=e[1057+50*a.saveStateSlot];p.mixerVolumeChanged=k(1058+50*a.saveStateSlot);p.mixerEnabledChanged=k(1059+50*a.saveStateSlot);gc()};a.currentCycles=0;a.memoryLocationNR50= |
||||
65316;a.NR50LeftMixerVolume=0;a.NR50RightMixerVolume=0;a.memoryLocationNR51=65317;a.NR51IsChannel1EnabledOnLeftOutput=!0;a.NR51IsChannel2EnabledOnLeftOutput=!0;a.NR51IsChannel3EnabledOnLeftOutput=!0;a.NR51IsChannel4EnabledOnLeftOutput=!0;a.NR51IsChannel1EnabledOnRightOutput=!0;a.NR51IsChannel2EnabledOnRightOutput=!0;a.NR51IsChannel3EnabledOnRightOutput=!0;a.NR51IsChannel4EnabledOnRightOutput=!0;a.memoryLocationNR52=65318;a.NR52IsSoundEnabled=!0;a.memoryLocationChannel3LoadRegisterStart=65328;a.frameSequenceCycleCounter= |
||||
0;a.frameSequencer=0;a.downSampleCycleCounter=0;a.sampleRate=44100;a.audioQueueIndex=0;a.wasmBoyMemoryMaxBufferSize=131072;a.saveStateSlot=6;return a}(),m=function(){function a(){}a.updateInterruptEnabled=function(b){a.isVBlankInterruptEnabled=g(a.bitPositionVBlankInterrupt,b);a.isLcdInterruptEnabled=g(a.bitPositionLcdInterrupt,b);a.isTimerInterruptEnabled=g(a.bitPositionTimerInterrupt,b);a.isSerialInterruptEnabled=g(a.bitPositionSerialInterrupt,b);a.isJoypadInterruptEnabled=g(a.bitPositionJoypadInterrupt, |
||||
b);a.interruptsEnabledValue=b};a.updateInterruptRequested=function(b){a.isVBlankInterruptRequested=g(a.bitPositionVBlankInterrupt,b);a.isLcdInterruptRequested=g(a.bitPositionLcdInterrupt,b);a.isTimerInterruptRequested=g(a.bitPositionTimerInterrupt,b);a.isSerialInterruptRequested=g(a.bitPositionSerialInterrupt,b);a.isJoypadInterruptRequested=g(a.bitPositionJoypadInterrupt,b);a.interruptsRequestedValue=b};a.areInterruptsPending=function(){return 0<(a.interruptsRequestedValue&a.interruptsEnabledValue& |
||||
31)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.masterInterruptSwitch;e[1025+50*a.saveStateSlot]=a.masterInterruptSwitchDelay;e[1040+50*a.saveStateSlot]=a.interruptsEnabledValue;e[1041+50*a.saveStateSlot]=a.isVBlankInterruptEnabled;e[1042+50*a.saveStateSlot]=a.isLcdInterruptEnabled;e[1043+50*a.saveStateSlot]=a.isTimerInterruptEnabled;e[1044+50*a.saveStateSlot]=a.isSerialInterruptEnabled;e[1045+50*a.saveStateSlot]=a.isJoypadInterruptEnabled;e[1056+50*a.saveStateSlot]=a.interruptsRequestedValue; |
||||
e[1057+50*a.saveStateSlot]=a.isVBlankInterruptRequested;e[1058+50*a.saveStateSlot]=a.isLcdInterruptRequested;e[1059+50*a.saveStateSlot]=a.isTimerInterruptRequested;e[1060+50*a.saveStateSlot]=a.isSerialInterruptRequested;e[1061+50*a.saveStateSlot]=a.isJoypadInterruptRequested};a.loadState=function(){a.masterInterruptSwitch=k(1024+50*a.saveStateSlot);a.masterInterruptSwitchDelay=k(1025+50*a.saveStateSlot);a.interruptsEnabledValue=e[1040+50*a.saveStateSlot];a.isVBlankInterruptEnabled=k(1041+50*a.saveStateSlot); |
||||
a.isLcdInterruptEnabled=k(1042+50*a.saveStateSlot);a.isTimerInterruptEnabled=k(1043+50*a.saveStateSlot);a.isSerialInterruptEnabled=k(1044+50*a.saveStateSlot);a.isJoypadInterruptEnabled=k(1045+50*a.saveStateSlot);a.interruptsRequestedValue=e[1056+50*a.saveStateSlot];a.isVBlankInterruptRequested=k(1057+50*a.saveStateSlot);a.isLcdInterruptRequested=k(1058+50*a.saveStateSlot);a.isTimerInterruptRequested=k(1059+50*a.saveStateSlot);a.isSerialInterruptRequested=k(1060+50*a.saveStateSlot);a.isJoypadInterruptRequested= |
||||
k(1061+50*a.saveStateSlot)};a.masterInterruptSwitch=!1;a.masterInterruptSwitchDelay=!1;a.bitPositionVBlankInterrupt=0;a.bitPositionLcdInterrupt=1;a.bitPositionTimerInterrupt=2;a.bitPositionSerialInterrupt=3;a.bitPositionJoypadInterrupt=4;a.memoryLocationInterruptEnabled=65535;a.interruptsEnabledValue=0;a.isVBlankInterruptEnabled=!1;a.isLcdInterruptEnabled=!1;a.isTimerInterruptEnabled=!1;a.isSerialInterruptEnabled=!1;a.isJoypadInterruptEnabled=!1;a.memoryLocationInterruptRequest=65295;a.interruptsRequestedValue= |
||||
0;a.isVBlankInterruptRequested=!1;a.isLcdInterruptRequested=!1;a.isTimerInterruptRequested=!1;a.isSerialInterruptRequested=!1;a.isJoypadInterruptRequested=!1;a.saveStateSlot=2;return a}(),w=function(){function a(){}a.batchProcessCycles=function(){return 256};a.updateDividerRegister=function(){var b=a.dividerRegister;a.dividerRegister=0;f(a.memoryLocationDividerRegister,0);a.timerEnabled&&ic(b,0)&&Lb()};a.updateTimerCounter=function(b){if(a.timerEnabled){if(a.timerCounterWasReset)return;a.timerCounterOverflowDelay&& |
||||
(a.timerCounterOverflowDelay=!1)}a.timerCounter=b};a.updateTimerModulo=function(b){a.timerModulo=b;a.timerEnabled&&a.timerCounterWasReset&&(a.timerCounter=b,a.timerCounterWasReset=!1)};a.updateTimerControl=function(b){var c=a.timerEnabled;a.timerEnabled=g(2,b);b&=3;if(!c){c=Mb(a.timerInputClock);var d=Mb(b),e=a.dividerRegister;(a.timerEnabled?g(c,e):g(c,e)&&g(d,e))&&Lb()}a.timerInputClock=b};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.currentCycles;e[1028+50*a.saveStateSlot]=a.dividerRegister; |
||||
e[1032+50*a.saveStateSlot]=a.timerCounter;e[1036+50*a.saveStateSlot]=a.timerCounterOverflowDelay;e[1037+50*a.saveStateSlot]=a.timerCounterWasReset;e[1038+50*a.saveStateSlot]=a.timerCounterMask;e[1042+50*a.saveStateSlot]=a.timerModulo;e[1046+50*a.saveStateSlot]=a.timerEnabled;e[1047+50*a.saveStateSlot]=a.timerInputClock};a.loadState=function(){a.currentCycles=e[1024+50*a.saveStateSlot];a.dividerRegister=e[1028+50*a.saveStateSlot];a.timerCounter=e[1032+50*a.saveStateSlot];a.timerCounterOverflowDelay= |
||||
k(1036+50*a.saveStateSlot);a.timerCounterWasReset=k(1037+50*a.saveStateSlot);a.timerCounterMask=e[1038+50*a.saveStateSlot];a.timerModulo=e[1042+50*a.saveStateSlot];a.timerEnabled=k(1046+50*a.saveStateSlot);a.timerInputClock=e[1047+50*a.saveStateSlot]};a.currentCycles=0;a.memoryLocationDividerRegister=65284;a.dividerRegister=0;a.memoryLocationTimerCounter=65285;a.timerCounter=0;a.timerCounterOverflowDelay=!1;a.timerCounterWasReset=!1;a.timerCounterMask=0;a.memoryLocationTimerModulo=65286;a.timerModulo= |
||||
0;a.memoryLocationTimerControl=65287;a.timerEnabled=!1;a.timerInputClock=0;a.saveStateSlot=5;return a}(),Z=function(){function a(){}a.updateTransferControl=function(b){a.isShiftClockInternal=g(0,b);a.isClockSpeedFast=g(1,b);a.transferStartFlag=g(7,b);return!0};a.currentCycles=0;a.memoryLocationSerialTransferData=65281;a.memoryLocationSerialTransferControl=65282;a.numberOfBitsTransferred=0;a.isShiftClockInternal=!1;a.isClockSpeedFast=!1;a.transferStartFlag=!1;return a}(),E=function(){function a(){} |
||||
a.updateJoypad=function(b){a.joypadRegisterFlipped=b^255;a.isDpadType=g(4,a.joypadRegisterFlipped);a.isButtonType=g(5,a.joypadRegisterFlipped)};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.joypadRegisterFlipped;e[1025+50*a.saveStateSlot]=a.isDpadType;e[1026+50*a.saveStateSlot]=a.isButtonType};a.loadState=function(){a.joypadRegisterFlipped=e[1024+50*a.saveStateSlot];a.isDpadType=k(1025+50*a.saveStateSlot);a.isButtonType=k(1026+50*a.saveStateSlot)};a.up=!1;a.down=!1;a.left=!1;a.right=!1;a.a= |
||||
!1;a.b=!1;a.select=!1;a.start=!1;a.memoryLocationJoypadRegister=65280;a.joypadRegisterFlipped=0;a.isDpadType=!1;a.isButtonType=!1;a.saveStateSlot=3;return a}(),aa=function(){function a(){}a.programCounter=-1;a.readGbMemory=-1;a.writeGbMemory=-1;a.reachedBreakpoint=!1;return a}(),u=function(){function a(){}a.updateLcdStatus=function(b){var c=v(a.memoryLocationLcdStatus);b=b&248|c&7|128;f(a.memoryLocationLcdStatus,b)};a.updateLcdControl=function(b){var c=a.enabled;a.enabled=g(7,b);a.windowTileMapDisplaySelect= |
||||
g(6,b);a.windowDisplayEnabled=g(5,b);a.bgWindowTileDataSelect=g(4,b);a.bgTileMapDisplaySelect=g(3,b);a.tallSpriteSize=g(2,b);a.spriteDisplayEnable=g(1,b);a.bgDisplayEnabled=g(0,b);c&&!a.enabled&&kc(!0);!c&&a.enabled&&kc(!1)};a.memoryLocationLcdStatus=65345;a.currentLcdMode=0;a.memoryLocationCoincidenceCompare=65349;a.coincidenceCompare=0;a.memoryLocationLcdControl=65344;a.enabled=!0;a.windowTileMapDisplaySelect=!1;a.windowDisplayEnabled=!1;a.bgWindowTileDataSelect=!1;a.bgTileMapDisplaySelect=!1;a.tallSpriteSize= |
||||
!1;a.spriteDisplayEnable=!1;a.bgDisplayEnabled=!1;return a}(),r=function(){function a(){}a.batchProcessCycles=function(){return a.MAX_CYCLES_PER_SCANLINE()};a.MAX_CYCLES_PER_SCANLINE=function(){return 153===a.scanlineRegister?4<<b.GBCDoubleSpeed:456<<b.GBCDoubleSpeed};a.MIN_CYCLES_SPRITES_LCD_MODE=function(){return 376<<b.GBCDoubleSpeed};a.MIN_CYCLES_TRANSFER_DATA_LCD_MODE=function(){return 249<<b.GBCDoubleSpeed};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.scanlineCycleCounter;e[1028+50*a.saveStateSlot]= |
||||
a.scanlineRegister;e[1029+50*a.saveStateSlot]=a.scrollX;e[1030+50*a.saveStateSlot]=a.scrollY;e[1031+50*a.saveStateSlot]=a.windowX;e[1032+50*a.saveStateSlot]=a.windowY;e[1033+50*a.saveStateSlot]=u.currentLcdMode;e[1034+50*a.saveStateSlot]=u.coincidenceCompare;e[1035+50*a.saveStateSlot]=u.enabled;e[1036+50*a.saveStateSlot]=u.windowTileMapDisplaySelect;e[1037+50*a.saveStateSlot]=u.windowDisplayEnabled;e[1038+50*a.saveStateSlot]=u.bgWindowTileDataSelect;e[1039+50*a.saveStateSlot]=u.bgTileMapDisplaySelect; |
||||
e[1040+50*a.saveStateSlot]=u.tallSpriteSize;e[1041+50*a.saveStateSlot]=u.spriteDisplayEnable;e[1042+50*a.saveStateSlot]=u.bgDisplayEnabled};a.loadState=function(){a.scanlineCycleCounter=e[1024+50*a.saveStateSlot];a.scanlineRegister=e[1028+50*a.scanlineRegister];a.scrollX=e[1029+50*a.saveStateSlot];a.scrollY=e[1030+50*a.saveStateSlot];a.windowX=e[1031+50*a.saveStateSlot];a.windowY=e[1032+50*a.saveStateSlot];u.currentLcdMode=e[1033+50*a.saveStateSlot];u.coincidenceCompare=e[1034+50*a.saveStateSlot]; |
||||
u.enabled=k(1035+50*a.saveStateSlot);u.windowTileMapDisplaySelect=k(1036+50*a.saveStateSlot);u.windowDisplayEnabled=k(1037+50*a.saveStateSlot);u.bgWindowTileDataSelect=k(1038+50*a.saveStateSlot);u.bgTileMapDisplaySelect=k(1039+50*a.saveStateSlot);u.tallSpriteSize=k(1040+50*a.saveStateSlot);u.spriteDisplayEnable=k(1041+50*a.saveStateSlot);u.bgDisplayEnabled=k(1042+50*a.saveStateSlot)};a.currentCycles=0;a.scanlineCycleCounter=0;a.memoryLocationScanlineRegister=65348;a.scanlineRegister=0;a.memoryLocationDmaTransfer= |
||||
65350;a.memoryLocationScrollX=65347;a.scrollX=0;a.memoryLocationScrollY=65346;a.scrollY=0;a.memoryLocationWindowX=65355;a.windowX=0;a.memoryLocationWindowY=65354;a.windowY=0;a.memoryLocationTileMapSelectZeroStart=38912;a.memoryLocationTileMapSelectOneStart=39936;a.memoryLocationTileDataSelectZeroStart=34816;a.memoryLocationTileDataSelectOneStart=32768;a.memoryLocationSpriteAttributesTable=65024;a.memoryLocationBackgroundPalette=65351;a.memoryLocationSpritePaletteOne=65352;a.memoryLocationSpritePaletteTwo= |
||||
65353;a.saveStateSlot=1;return a}(),n=function(){function a(){}a.saveState=function(){e[1024+50*a.saveStateSlot]=a.currentRomBank;e[1026+50*a.saveStateSlot]=a.currentRamBank;e[1028+50*a.saveStateSlot]=a.isRamBankingEnabled;e[1029+50*a.saveStateSlot]=a.isMBC1RomModeEnabled;e[1030+50*a.saveStateSlot]=a.isRomOnly;e[1031+50*a.saveStateSlot]=a.isMBC1;e[1032+50*a.saveStateSlot]=a.isMBC2;e[1033+50*a.saveStateSlot]=a.isMBC3;e[1034+50*a.saveStateSlot]=a.isMBC5;e[1035+50*a.saveStateSlot]=a.DMACycles;e[1039+ |
||||
50*a.saveStateSlot]=a.isHblankHdmaActive;e[1040+50*a.saveStateSlot]=a.hblankHdmaTransferLengthRemaining;e[1044+50*a.saveStateSlot]=a.hblankHdmaSource;e[1048+50*a.saveStateSlot]=a.hblankHdmaDestination};a.loadState=function(){a.currentRomBank=e[1024+50*a.saveStateSlot];a.currentRamBank=e[1026+50*a.saveStateSlot];a.isRamBankingEnabled=k(1028+50*a.saveStateSlot);a.isMBC1RomModeEnabled=k(1029+50*a.saveStateSlot);a.isRomOnly=k(1030+50*a.saveStateSlot);a.isMBC1=k(1031+50*a.saveStateSlot);a.isMBC2=k(1032+ |
||||
50*a.saveStateSlot);a.isMBC3=k(1033+50*a.saveStateSlot);a.isMBC5=k(1034+50*a.saveStateSlot);a.DMACycles=e[1035+50*a.saveStateSlot];a.isHblankHdmaActive=k(1039+50*a.saveStateSlot);a.hblankHdmaTransferLengthRemaining=e[1040+50*a.saveStateSlot];a.hblankHdmaSource=e[1044+50*a.saveStateSlot];a.hblankHdmaDestination=e[1048+50*a.saveStateSlot]};a.cartridgeRomLocation=0;a.switchableCartridgeRomLocation=16384;a.videoRamLocation=32768;a.cartridgeRamLocation=40960;a.internalRamBankZeroLocation=49152;a.internalRamBankOneLocation= |
||||
53248;a.echoRamLocation=57344;a.spriteInformationTableLocation=65024;a.spriteInformationTableLocationEnd=65183;a.unusableMemoryLocation=65184;a.unusableMemoryEndLocation=65279;a.currentRomBank=0;a.currentRamBank=0;a.isRamBankingEnabled=!1;a.isMBC1RomModeEnabled=!0;a.isRomOnly=!0;a.isMBC1=!1;a.isMBC2=!1;a.isMBC3=!1;a.isMBC5=!1;a.memoryLocationHdmaSourceHigh=65361;a.memoryLocationHdmaSourceLow=65362;a.memoryLocationHdmaDestinationHigh=65363;a.memoryLocationHdmaDestinationLow=65364;a.memoryLocationHdmaTrigger= |
||||
65365;a.DMACycles=0;a.isHblankHdmaActive=!1;a.hblankHdmaTransferLengthRemaining=0;a.hblankHdmaSource=0;a.hblankHdmaDestination=0;a.memoryLocationGBCVRAMBank=65359;a.memoryLocationGBCWRAMBank=65392;a.saveStateSlot=4;return a}(),b=function(){function a(){}a.CLOCK_SPEED=function(){return 4194304<<a.GBCDoubleSpeed};a.MAX_CYCLES_PER_FRAME=function(){return 70224<<a.GBCDoubleSpeed};a.enableHalt=function(){m.masterInterruptSwitch?a.isHaltNormal=!0:0===(m.interruptsEnabledValue&m.interruptsRequestedValue& |
||||
31)?a.isHaltNoJump=!0:a.isHaltBug=!0};a.exitHaltAndStop=function(){a.isHaltNoJump=!1;a.isHaltNormal=!1;a.isHaltBug=!1;a.isStopped=!1};a.isHalted=function(){return a.isHaltNormal||a.isHaltNoJump};a.saveState=function(){e[1024+50*a.saveStateSlot]=a.registerA;e[1025+50*a.saveStateSlot]=a.registerB;e[1026+50*a.saveStateSlot]=a.registerC;e[1027+50*a.saveStateSlot]=a.registerD;e[1028+50*a.saveStateSlot]=a.registerE;e[1029+50*a.saveStateSlot]=a.registerH;e[1030+50*a.saveStateSlot]=a.registerL;e[1031+50* |
||||
a.saveStateSlot]=a.registerF;e[1032+50*a.saveStateSlot]=a.stackPointer;e[1034+50*a.saveStateSlot]=a.programCounter;e[1036+50*a.saveStateSlot]=a.currentCycles;e[1041+50*a.saveStateSlot]=a.isHaltNormal;e[1042+50*a.saveStateSlot]=a.isHaltNoJump;e[1043+50*a.saveStateSlot]=a.isHaltBug;e[1044+50*a.saveStateSlot]=a.isStopped;e[1045+50*a.saveStateSlot]=a.BootROMEnabled;e[1046+50*a.saveStateSlot]=a.GBCEnabled;e[1047+50*a.saveStateSlot]=a.GBCDoubleSpeed};a.loadState=function(){a.registerA=e[1024+50*a.saveStateSlot]; |
||||
a.registerB=e[1025+50*a.saveStateSlot];a.registerC=e[1026+50*a.saveStateSlot];a.registerD=e[1027+50*a.saveStateSlot];a.registerE=e[1028+50*a.saveStateSlot];a.registerH=e[1029+50*a.saveStateSlot];a.registerL=e[1030+50*a.saveStateSlot];a.registerF=e[1031+50*a.saveStateSlot];a.stackPointer=e[1032+50*a.saveStateSlot];a.programCounter=e[1034+50*a.saveStateSlot];a.currentCycles=e[1036+50*a.saveStateSlot];a.isHaltNormal=k(1041+50*a.saveStateSlot);a.isHaltNoJump=k(1042+50*a.saveStateSlot);a.isHaltBug=k(1043+ |
||||
50*a.saveStateSlot);a.isStopped=k(1044+50*a.saveStateSlot);a.BootROMEnabled=k(1045+50*a.saveStateSlot);a.GBCEnabled=k(1046+50*a.saveStateSlot);a.GBCDoubleSpeed=k(1047+50*a.saveStateSlot)};a.memoryLocationBootROMSwitch=65360;a.BootROMEnabled=!1;a.GBCEnabled=!1;a.memoryLocationSpeedSwitch=65357;a.GBCDoubleSpeed=!1;a.registerA=0;a.registerB=0;a.registerC=0;a.registerD=0;a.registerE=0;a.registerH=0;a.registerL=0;a.registerF=0;a.stackPointer=0;a.programCounter=0;a.currentCycles=0;a.isHaltNormal=!1;a.isHaltNoJump= |
||||
!1;a.isHaltBug=!1;a.isStopped=!1;a.saveStateSlot=0;return a}(),da=function(){function a(){}a.cyclesPerCycleSet=2E9;a.cycleSets=0;a.cycles=0;return a}(),V=function(){function a(){}a.stepsPerStepSet=2E9;a.stepSets=0;a.steps=0;a.RESPONSE_CONDITION_ERROR=-1;a.RESPONSE_CONDITION_FRAME=0;a.RESPONSE_CONDITION_AUDIO=1;a.RESPONSE_CONDITION_BREAKPOINT=2;return a}();mb.size()<Zb&&mb.grow(Zb-mb.size());var kb=!1,Xc=Object.freeze({memory:mb,config:function(a,c,e,g,k,l,q,u,x,A){Q.enableBootRom=0<a;Q.useGbcWhenAvailable= |
||||
0<c;Q.audioBatchProcessing=0<e;Q.graphicsBatchProcessing=0<g;Q.timersBatchProcessing=0<k;Q.graphicsDisableScanlineRendering=0<l;Q.audioAccumulateSamples=0<q;Q.tileRendering=0<u;Q.tileCaching=0<x;Q.enableAudioDebugging=0<A;a=v(323);b.GBCEnabled=192===a||Q.useGbcWhenAvailable&&128===a?!0:!1;kb=!1;da.cyclesPerCycleSet=2E9;da.cycleSets=0;da.cycles=0;V.stepsPerStepSet=2E9;V.stepSets=0;V.steps=0;b.BootROMEnabled=Q.enableBootRom?!0:!1;b.GBCDoubleSpeed=!1;b.registerA=0;b.registerB=0;b.registerC=0;b.registerD= |
||||
0;b.registerE=0;b.registerH=0;b.registerL=0;b.registerF=0;b.stackPointer=0;b.programCounter=0;b.currentCycles=0;b.isHaltNormal=!1;b.isHaltNoJump=!1;b.isHaltBug=!1;b.isStopped=!1;b.BootROMEnabled||(b.GBCEnabled?(b.registerA=17,b.registerF=128,b.registerB=0,b.registerC=0,b.registerD=255,b.registerE=86,b.registerH=0,b.registerL=13):(b.registerA=1,b.registerF=176,b.registerB=0,b.registerC=19,b.registerD=0,b.registerE=216,b.registerH=1,b.registerL=77),b.programCounter=256,b.stackPointer=65534);n.isRamBankingEnabled= |
||||
!1;n.isMBC1RomModeEnabled=!0;a=v(327);n.isRomOnly=0===a;n.isMBC1=1<=a&&3>=a;n.isMBC2=5<=a&&6>=a;n.isMBC3=15<=a&&19>=a;n.isMBC5=25<=a&&30>=a;n.currentRomBank=1;n.currentRamBank=0;f(n.memoryLocationGBCVRAMBank,0);f(n.memoryLocationGBCWRAMBank,1);f(65361,255);f(65362,255);f(65363,255);f(65364,255);f(65365,255);r.currentCycles=0;r.scanlineCycleCounter=0;r.scanlineRegister=0;r.scrollX=0;r.scrollY=0;r.windowX=0;r.windowY=0;r.scanlineRegister=144;b.GBCEnabled?(f(65345,129),f(65348,144),f(65351,252)):(f(65345, |
||||
133),f(65350,255),f(65351,252),f(65352,255),f(65353,255));r.scanlineRegister=144;f(65344,145);f(65359,0);f(65392,1);b.BootROMEnabled&&(b.GBCEnabled?(r.scanlineRegister=0,f(65344,0),f(65345,128),f(65348,0)):(r.scanlineRegister=0,f(65344,0),f(65345,132)));bc(0);if(!b.GBCEnabled&&(!b.BootROMEnabled||b.GBCEnabled)){a=0;for(c=308;323>=c;c++)a+=v(c);switch(a&255){case 136:d.bgWhite=va.bgWhite;d.bgLightGrey=va.bgLightGrey;d.bgDarkGrey=va.bgDarkGrey;d.bgBlack=va.bgBlack;d.obj0White=va.obj0White;d.obj0LightGrey= |
||||
va.obj0LightGrey;d.obj0DarkGrey=va.obj0DarkGrey;d.obj0Black=va.obj0Black;d.obj1White=va.obj1White;d.obj1LightGrey=va.obj1LightGrey;d.obj1DarkGrey=va.obj1DarkGrey;d.obj1Black=va.obj1Black;break;case 97:d.bgWhite=wa.bgWhite;d.bgLightGrey=wa.bgLightGrey;d.bgDarkGrey=wa.bgDarkGrey;d.bgBlack=wa.bgBlack;d.obj0White=wa.obj0White;d.obj0LightGrey=wa.obj0LightGrey;d.obj0DarkGrey=wa.obj0DarkGrey;d.obj0Black=wa.obj0Black;d.obj1White=wa.obj1White;d.obj1LightGrey=wa.obj1LightGrey;d.obj1DarkGrey=wa.obj1DarkGrey; |
||||
d.obj1Black=wa.obj1Black;break;case 20:d.bgWhite=xa.bgWhite;d.bgLightGrey=xa.bgLightGrey;d.bgDarkGrey=xa.bgDarkGrey;d.bgBlack=xa.bgBlack;d.obj0White=xa.obj0White;d.obj0LightGrey=xa.obj0LightGrey;d.obj0DarkGrey=xa.obj0DarkGrey;d.obj0Black=xa.obj0Black;d.obj1White=xa.obj1White;d.obj1LightGrey=xa.obj1LightGrey;d.obj1DarkGrey=xa.obj1DarkGrey;d.obj1Black=xa.obj1Black;break;case 70:d.bgWhite=ya.bgWhite;d.bgLightGrey=ya.bgLightGrey;d.bgDarkGrey=ya.bgDarkGrey;d.bgBlack=ya.bgBlack;d.obj0White=ya.obj0White; |
||||
d.obj0LightGrey=ya.obj0LightGrey;d.obj0DarkGrey=ya.obj0DarkGrey;d.obj0Black=ya.obj0Black;d.obj1White=ya.obj1White;d.obj1LightGrey=ya.obj1LightGrey;d.obj1DarkGrey=ya.obj1DarkGrey;d.obj1Black=ya.obj1Black;break;case 89:case 198:d.bgWhite=za.bgWhite;d.bgLightGrey=za.bgLightGrey;d.bgDarkGrey=za.bgDarkGrey;d.bgBlack=za.bgBlack;d.obj0White=za.obj0White;d.obj0LightGrey=za.obj0LightGrey;d.obj0DarkGrey=za.obj0DarkGrey;d.obj0Black=za.obj0Black;d.obj1White=za.obj1White;d.obj1LightGrey=za.obj1LightGrey;d.obj1DarkGrey= |
||||
za.obj1DarkGrey;d.obj1Black=za.obj1Black;break;case 134:case 168:d.bgWhite=Aa.bgWhite;d.bgLightGrey=Aa.bgLightGrey;d.bgDarkGrey=Aa.bgDarkGrey;d.bgBlack=Aa.bgBlack;d.obj0White=Aa.obj0White;d.obj0LightGrey=Aa.obj0LightGrey;d.obj0DarkGrey=Aa.obj0DarkGrey;d.obj0Black=Aa.obj0Black;d.obj1White=Aa.obj1White;d.obj1LightGrey=Aa.obj1LightGrey;d.obj1DarkGrey=Aa.obj1DarkGrey;d.obj1Black=Aa.obj1Black;break;case 191:case 206:case 209:case 240:d.bgWhite=Ba.bgWhite;d.bgLightGrey=Ba.bgLightGrey;d.bgDarkGrey=Ba.bgDarkGrey; |
||||
d.bgBlack=Ba.bgBlack;d.obj0White=Ba.obj0White;d.obj0LightGrey=Ba.obj0LightGrey;d.obj0DarkGrey=Ba.obj0DarkGrey;d.obj0Black=Ba.obj0Black;d.obj1White=Ba.obj1White;d.obj1LightGrey=Ba.obj1LightGrey;d.obj1DarkGrey=Ba.obj1DarkGrey;d.obj1Black=Ba.obj1Black;break;case 39:case 73:case 92:case 179:d.bgWhite=Ca.bgWhite;d.bgLightGrey=Ca.bgLightGrey;d.bgDarkGrey=Ca.bgDarkGrey;d.bgBlack=Ca.bgBlack;d.obj0White=Ca.obj0White;d.obj0LightGrey=Ca.obj0LightGrey;d.obj0DarkGrey=Ca.obj0DarkGrey;d.obj0Black=Ca.obj0Black;d.obj1White= |
||||
Ca.obj1White;d.obj1LightGrey=Ca.obj1LightGrey;d.obj1DarkGrey=Ca.obj1DarkGrey;d.obj1Black=Ca.obj1Black;break;case 201:d.bgWhite=Da.bgWhite;d.bgLightGrey=Da.bgLightGrey;d.bgDarkGrey=Da.bgDarkGrey;d.bgBlack=Da.bgBlack;d.obj0White=Da.obj0White;d.obj0LightGrey=Da.obj0LightGrey;d.obj0DarkGrey=Da.obj0DarkGrey;d.obj0Black=Da.obj0Black;d.obj1White=Da.obj1White;d.obj1LightGrey=Da.obj1LightGrey;d.obj1DarkGrey=Da.obj1DarkGrey;d.obj1Black=Da.obj1Black;break;case 112:d.bgWhite=Ea.bgWhite;d.bgLightGrey=Ea.bgLightGrey; |
||||
d.bgDarkGrey=Ea.bgDarkGrey;d.bgBlack=Ea.bgBlack;d.obj0White=Ea.obj0White;d.obj0LightGrey=Ea.obj0LightGrey;d.obj0DarkGrey=Ea.obj0DarkGrey;d.obj0Black=Ea.obj0Black;d.obj1White=Ea.obj1White;d.obj1LightGrey=Ea.obj1LightGrey;d.obj1DarkGrey=Ea.obj1DarkGrey;d.obj1Black=Ea.obj1Black;break;case 70:d.bgWhite=Fa.bgWhite;d.bgLightGrey=Fa.bgLightGrey;d.bgDarkGrey=Fa.bgDarkGrey;d.bgBlack=Fa.bgBlack;d.obj0White=Fa.obj0White;d.obj0LightGrey=Fa.obj0LightGrey;d.obj0DarkGrey=Fa.obj0DarkGrey;d.obj0Black=Fa.obj0Black; |
||||
d.obj1White=Fa.obj1White;d.obj1LightGrey=Fa.obj1LightGrey;d.obj1DarkGrey=Fa.obj1DarkGrey;d.obj1Black=Fa.obj1Black;break;case 211:d.bgWhite=Ga.bgWhite,d.bgLightGrey=Ga.bgLightGrey,d.bgDarkGrey=Ga.bgDarkGrey,d.bgBlack=Ga.bgBlack,d.obj0White=Ga.obj0White,d.obj0LightGrey=Ga.obj0LightGrey,d.obj0DarkGrey=Ga.obj0DarkGrey,d.obj0Black=Ga.obj0Black,d.obj1White=Ga.obj1White,d.obj1LightGrey=Ga.obj1LightGrey,d.obj1DarkGrey=Ga.obj1DarkGrey,d.obj1Black=Ga.obj1Black}}b.GBCEnabled?(f(65384,192),f(65385,255),f(65386, |
||||
193),f(65387,13)):(f(65384,255),f(65385,255),f(65386,255),f(65387,255));b.BootROMEnabled&&b.GBCEnabled&&(f(65385,32),f(65387,138));h.currentCycles=0;h.NR50LeftMixerVolume=0;h.NR50RightMixerVolume=0;h.NR51IsChannel1EnabledOnLeftOutput=!0;h.NR51IsChannel2EnabledOnLeftOutput=!0;h.NR51IsChannel3EnabledOnLeftOutput=!0;h.NR51IsChannel4EnabledOnLeftOutput=!0;h.NR51IsChannel1EnabledOnRightOutput=!0;h.NR51IsChannel2EnabledOnRightOutput=!0;h.NR51IsChannel3EnabledOnRightOutput=!0;h.NR51IsChannel4EnabledOnRightOutput= |
||||
!0;h.NR52IsSoundEnabled=!0;h.frameSequenceCycleCounter=0;h.downSampleCycleCounter=0;h.frameSequencer=0;h.audioQueueIndex=0;y.initialize();D.initialize();t.initialize();F.initialize();f(h.memoryLocationNR50,119);h.updateNR50(119);f(h.memoryLocationNR51,243);h.updateNR51(243);f(h.memoryLocationNR52,241);h.updateNR52(241);b.BootROMEnabled&&(f(h.memoryLocationNR50,0),h.updateNR50(0),f(h.memoryLocationNR51,0),h.updateNR51(0),f(h.memoryLocationNR52,112),h.updateNR52(112));p.channel1Sample=15;p.channel2Sample= |
||||
15;p.channel3Sample=15;p.channel4Sample=15;p.channel1DacEnabled=!1;p.channel2DacEnabled=!1;p.channel3DacEnabled=!1;p.channel4DacEnabled=!1;p.leftChannelSampleUnsignedByte=127;p.rightChannelSampleUnsignedByte=127;p.mixerVolumeChanged=!0;p.mixerEnabledChanged=!0;p.needToRemixSamples=!1;m.updateInterruptEnabled(0);f(m.memoryLocationInterruptEnabled,m.interruptsEnabledValue);m.updateInterruptRequested(225);f(m.memoryLocationInterruptRequest,m.interruptsRequestedValue);w.currentCycles=0;w.dividerRegister= |
||||
0;w.timerCounter=0;w.timerModulo=0;w.timerEnabled=!1;w.timerInputClock=0;w.timerCounterOverflowDelay=!1;w.timerCounterWasReset=!1;b.GBCEnabled?(f(65284,30),w.dividerRegister=7840):(f(65284,171),w.dividerRegister=43980);f(65287,248);w.timerInputClock=248;b.BootROMEnabled&&!b.GBCEnabled&&(f(65284,0),w.dividerRegister=4);Z.currentCycles=0;Z.numberOfBitsTransferred=0;b.GBCEnabled?(f(65282,124),Z.updateTransferControl(124)):(f(65282,126),Z.updateTransferControl(126));b.GBCEnabled?(f(65392,248),f(65359, |
||||
254),f(65357,126),f(65280,207),f(65295,225),f(65388,254),f(65397,143)):(f(65392,255),f(65359,255),f(65357,255),f(65280,207),f(65295,225))},hasCoreStarted:function(){return kb},saveState:function(){b.saveState();r.saveState();m.saveState();E.saveState();n.saveState();w.saveState();h.saveState();y.saveState();D.saveState();t.saveState();F.saveState();kb=!1},loadState:function(){b.loadState();r.loadState();m.loadState();E.loadState();n.loadState();w.loadState();h.loadState();y.loadState();D.loadState(); |
||||
t.loadState();F.loadState();kb=!1;da.cyclesPerCycleSet=2E9;da.cycleSets=0;da.cycles=0;V.stepsPerStepSet=2E9;V.stepSets=0;V.steps=0},isGBC:function(){return b.GBCEnabled},getStepsPerStepSet:function(){return V.stepsPerStepSet},getStepSets:function(){return V.stepSets},getSteps:function(){return V.steps},executeMultipleFrames:function(a){for(var b=0,d=0;d<a&&0<=b;)b=pc(),d+=1;return 0>b?b:0},executeFrame:pc,executeFrameAndCheckAudio:function(a){void 0===a&&(a=0);return Ub(!0,a)},executeUntilCondition:Ub, |
||||
executeStep:qc,getCyclesPerCycleSet:function(){return da.cyclesPerCycleSet},getCycleSets:function(){return da.cycleSets},getCycles:function(){return da.cycles},setJoypadState:function(a,b,d,e,f,g,k,h){0<a?Ta(0):Ia(0,!1);0<b?Ta(1):Ia(1,!1);0<d?Ta(2):Ia(2,!1);0<e?Ta(3):Ia(3,!1);0<f?Ta(4):Ia(4,!1);0<g?Ta(5):Ia(5,!1);0<k?Ta(6):Ia(6,!1);0<h?Ta(7):Ia(7,!1)},getNumberOfSamplesInAudioBuffer:fc,clearAudioBuffer:gc,setManualColorizationPalette:bc,WASMBOY_MEMORY_LOCATION:0,WASMBOY_MEMORY_SIZE:wc,WASMBOY_WASM_PAGES:Zb, |
||||
ASSEMBLYSCRIPT_MEMORY_LOCATION:0,ASSEMBLYSCRIPT_MEMORY_SIZE:1024,WASMBOY_STATE_LOCATION:1024,WASMBOY_STATE_SIZE:1024,GAMEBOY_INTERNAL_MEMORY_LOCATION:2048,GAMEBOY_INTERNAL_MEMORY_SIZE:Uc,VIDEO_RAM_LOCATION:2048,VIDEO_RAM_SIZE:16384,WORK_RAM_LOCATION:18432,WORK_RAM_SIZE:32768,OTHER_GAMEBOY_INTERNAL_MEMORY_LOCATION:51200,OTHER_GAMEBOY_INTERNAL_MEMORY_SIZE:16384,GRAPHICS_OUTPUT_LOCATION:Vc,GRAPHICS_OUTPUT_SIZE:Wc,GBC_PALETTE_LOCATION:Ya,GBC_PALETTE_SIZE:128,BG_PRIORITY_MAP_LOCATION:Za,BG_PRIORITY_MAP_SIZE:23552, |
||||
FRAME_LOCATION:cb,FRAME_SIZE:93184,BACKGROUND_MAP_LOCATION:zb,BACKGROUND_MAP_SIZE:196608,TILE_DATA_LOCATION:Xb,TILE_DATA_SIZE:147456,OAM_TILES_LOCATION:Ab,OAM_TILES_SIZE:15360,AUDIO_BUFFER_LOCATION:ub,AUDIO_BUFFER_SIZE:131072,CHANNEL_1_BUFFER_LOCATION:Gb,CHANNEL_1_BUFFER_SIZE:131072,CHANNEL_2_BUFFER_LOCATION:Hb,CHANNEL_2_BUFFER_SIZE:131072,CHANNEL_3_BUFFER_LOCATION:Ib,CHANNEL_3_BUFFER_SIZE:131072,CHANNEL_4_BUFFER_LOCATION:Jb,CHANNEL_4_BUFFER_SIZE:131072,CARTRIDGE_RAM_LOCATION:Rb,CARTRIDGE_RAM_SIZE:131072, |
||||
BOOT_ROM_LOCATION:wb,BOOT_ROM_SIZE:2560,CARTRIDGE_ROM_LOCATION:xb,CARTRIDGE_ROM_SIZE:8258560,DEBUG_GAMEBOY_MEMORY_LOCATION:Yb,DEBUG_GAMEBOY_MEMORY_SIZE:65535,getWasmBoyOffsetFromGameBoyOffset:Qb,setProgramCounterBreakpoint:function(a){aa.programCounter=a},resetProgramCounterBreakpoint:function(){aa.programCounter=-1},setReadGbMemoryBreakpoint:function(a){aa.readGbMemory=a},resetReadGbMemoryBreakpoint:function(){aa.readGbMemory=-1},setWriteGbMemoryBreakpoint:function(a){aa.writeGbMemory=a},resetWriteGbMemoryBreakpoint:function(){aa.writeGbMemory= |
||||
-1},getRegisterA:function(){return b.registerA},getRegisterB:function(){return b.registerB},getRegisterC:function(){return b.registerC},getRegisterD:function(){return b.registerD},getRegisterE:function(){return b.registerE},getRegisterH:function(){return b.registerH},getRegisterL:function(){return b.registerL},getRegisterF:function(){return b.registerF},getProgramCounter:function(){return b.programCounter},getStackPointer:function(){return b.stackPointer},getOpcodeAtProgramCounter:function(){return v(b.programCounter)}, |
||||
getLY:function(){return r.scanlineRegister},getScrollX:function(){return r.scrollX},getScrollY:function(){return r.scrollY},getWindowX:function(){return r.windowX},getWindowY:function(){return r.windowY},drawBackgroundMapToWasmMemory:function(a){var c=r.memoryLocationTileDataSelectZeroStart;u.bgWindowTileDataSelect&&(c=r.memoryLocationTileDataSelectOneStart);var d=r.memoryLocationTileMapSelectZeroStart;u.bgTileMapDisplaySelect&&(d=r.memoryLocationTileMapSelectOneStart);for(var f=0;256>f;f++)for(var k= |
||||
0;256>k;k++){var h=f,m=k,n=d+32*(h>>3)+(m>>3),l=X(n,0);l=gb(c,l);var p=h%8;h=m%8;h=7-h;m=0;b.GBCEnabled&&0<a&&(m=X(n,1));g(6,m)&&(p=7-p);var q=0;g(3,m)&&(q=1);n=X(l+2*p,q);l=X(l+2*p+1,q);p=0;g(h,l)&&(p+=1,p<<=1);g(h,n)&&(p+=1);l=3*(256*f+k);b.GBCEnabled&&0<a?(n=rb(m&7,p,!1),m=ua(0,n),h=ua(1,n),n=ua(2,n),l=zb+l,e[l]=m,e[l+1]=h,e[l+2]=n):(m=qb(p,r.memoryLocationBackgroundPalette),l=zb+l,e[l+0]=(m&16711680)>>16,e[l+1]=(m&65280)>>8,e[l+2]=m&255)}},drawTileDataToWasmMemory:function(){for(var a=0;23>a;a++)for(var c= |
||||
0;31>c;c++){var d=0;15<c&&(d=1);var e=a;15<a&&(e-=15);e<<=4;e=15<c?e+(c-15):e+c;var f=r.memoryLocationTileDataSelectOneStart;15<a&&(f=r.memoryLocationTileDataSelectZeroStart);for(var h=r.memoryLocationBackgroundPalette,k=-1,m=-1,l=0;8>l;l++)for(var n=0;5>n;n++){var p=4*(8*n+l),q=v(r.memoryLocationSpriteAttributesTable+p+2);e===q&&(p=v(r.memoryLocationSpriteAttributesTable+p+3),q=0,b.GBCEnabled&&g(3,p)&&(q=1),q===d&&(m=p,l=8,n=5,h=r.memoryLocationSpritePaletteOne,g(4,m)&&(h=r.memoryLocationSpritePaletteTwo)))}if(b.GBCEnabled&& |
||||
0>m){l=r.memoryLocationTileMapSelectZeroStart;u.bgTileMapDisplaySelect&&(l=r.memoryLocationTileMapSelectOneStart);n=-1;for(p=0;32>p;p++)for(q=0;32>q;q++){var t=l+32*q+p,w=X(t,0);e===w&&(n=t,q=p=32)}0<=n&&(k=X(n,1))}for(l=0;8>l;l++)Eb(e,f,d,0,7,l,8*c,8*a+l,248,Xb,!1,h,k,m)}},drawOamToWasmMemory:function(){for(var a=0;8>a;a++)for(var c=0;5>c;c++){var d=4*(8*c+a);v(r.memoryLocationSpriteAttributesTable+d);v(r.memoryLocationSpriteAttributesTable+d+1);var e=v(r.memoryLocationSpriteAttributesTable+d+2), |
||||
f=1;u.tallSpriteSize&&(1===e%2&&--e,f+=1);d=v(r.memoryLocationSpriteAttributesTable+d+3);var h=0;b.GBCEnabled&&g(3,d)&&(h=1);var l=r.memoryLocationSpritePaletteOne;g(4,d)&&(l=r.memoryLocationSpritePaletteTwo);for(var k=0;k<f;k++)for(var m=0;8>m;m++)Eb(e+k,r.memoryLocationTileDataSelectOneStart,h,0,7,m,8*a,16*c+m+8*k,64,Ab,!1,l,-1,d)}},getDIV:function(){return w.dividerRegister},getTIMA:function(){return w.timerCounter},getTMA:function(){return w.timerModulo},getTAC:function(){var a=w.timerInputClock; |
||||
w.timerEnabled&&(a|=4);return a},updateDebugGBMemory:function(){for(var a=0;65535>a;a++){var b=Nb(a);e[Yb+a]=b}aa.reachedBreakpoint=!1}});let Yc=async()=>({instance:{exports:Xc},byteMemory:mb.wasmByteMemory,type:"TypeScript"}),lb,yb,tc,q;q={graphicsWorkerPort:void 0,memoryWorkerPort:void 0,controllerWorkerPort:void 0,audioWorkerPort:void 0,wasmInstance:void 0,wasmByteMemory:void 0,options:void 0,WASMBOY_BOOT_ROM_LOCATION:0,WASMBOY_GAME_BYTES_LOCATION:0,WASMBOY_GAME_RAM_BANKS_LOCATION:0,WASMBOY_INTERNAL_STATE_SIZE:0, |
||||
WASMBOY_INTERNAL_STATE_LOCATION:0,WASMBOY_INTERNAL_MEMORY_SIZE:0,WASMBOY_INTERNAL_MEMORY_LOCATION:0,WASMBOY_PALETTE_MEMORY_SIZE:0,WASMBOY_PALETTE_MEMORY_LOCATION:0,WASMBOY_CURRENT_FRAME_OUTPUT_LOCATION:0,WASMBOY_CURRENT_FRAME_SIZE:0,WASMBOY_SOUND_OUTPUT_LOCATION:0,WASMBOY_CHANNEL_1_OUTPUT_LOCATION:0,WASMBOY_CHANNEL_2_OUTPUT_LOCATION:0,WASMBOY_CHANNEL_3_OUTPUT_LOCATION:0,WASMBOY_CHANNEL_4_OUTPUT_LOCATION:0,paused:!0,updateId:void 0,timeStampsUntilReady:0,fpsTimeStamps:[],speed:0,frameSkipCounter:0, |
||||
currentAudioLatencyInSeconds:0,messageHandler:a=>{let b=eb(a);switch(b.message.type){case B.CONNECT:"GRAPHICS"===b.message.workerId?(q.graphicsWorkerPort=b.message.ports[0],fb(xc.bind(void 0,q),q.graphicsWorkerPort)):"MEMORY"===b.message.workerId?(q.memoryWorkerPort=b.message.ports[0],fb(Ac.bind(void 0,q),q.memoryWorkerPort)):"CONTROLLER"===b.message.workerId?(q.controllerWorkerPort=b.message.ports[0],fb(zc.bind(void 0,q),q.controllerWorkerPort)):"AUDIO"===b.message.workerId&&(q.audioWorkerPort=b.message.ports[0], |
||||
fb(yc.bind(void 0,q),q.audioWorkerPort));ea(O(void 0,b.messageId));break;case B.INSTANTIATE_WASM:(async()=>{let a;a=await Yc();q.wasmInstance=a.instance;q.wasmByteMemory=a.byteMemory;ea(O({type:a.type},b.messageId))})();break;case B.CONFIG:q.wasmInstance.exports.config.apply(q,b.message.config);q.options=b.message.options;ea(O(void 0,b.messageId));break;case B.RESET_AUDIO_QUEUE:q.wasmInstance.exports.clearAudioBuffer();ea(O(void 0,b.messageId));break;case B.PLAY:if(!q.paused||!q.wasmInstance||!q.wasmByteMemory){ea(O({error:!0}, |
||||
b.messageId));break}q.paused=!1;q.fpsTimeStamps=[];Vb(q);q.frameSkipCounter=0;q.currentAudioLatencyInSeconds=0;q.options.isGbcColorizationEnabled?q.options.gbcColorizationPalette&&q.wasmInstance.exports.setManualColorizationPalette("wasmboygb brown red darkbrown green darkgreen inverted pastelmix orange yellow blue darkblue grayscale".split(" ").indexOf(q.options.gbcColorizationPalette.toLowerCase())):q.wasmInstance.exports.setManualColorizationPalette(0);uc(q,1E3/q.options.gameboyFrameRate);ea(O(void 0, |
||||
b.messageId));break;case B.PAUSE:q.paused=!0;q.updateId&&(clearTimeout(q.updateId),q.updateId=void 0);ea(O(void 0,b.messageId));break;case B.RUN_WASM_EXPORT:a=b.message.parameters?q.wasmInstance.exports[b.message.export].apply(void 0,b.message.parameters):q.wasmInstance.exports[b.message.export]();ea(O({type:B.RUN_WASM_EXPORT,response:a},b.messageId));break;case B.GET_WASM_MEMORY_SECTION:{a=0;let c=q.wasmByteMemory.length;b.message.start&&(a=b.message.start);b.message.end&&(c=b.message.end);a=q.wasmByteMemory.slice(a, |
||||
c).buffer;ea(O({type:B.RUN_WASM_EXPORT,response:a},b.messageId),[a]);break}case B.GET_WASM_CONSTANT:ea(O({type:B.GET_WASM_CONSTANT,response:q.wasmInstance.exports[b.message.constant].valueOf()},b.messageId));break;case B.FORCE_OUTPUT_FRAME:rc(q);break;case B.SET_SPEED:q.speed=b.message.speed;q.fpsTimeStamps=[];q.timeStampsUntilReady=60;Vb(q);q.frameSkipCounter=0;q.currentAudioLatencyInSeconds=0;q.wasmInstance.exports.clearAudioBuffer();break;case B.IS_GBC:a=0<q.wasmInstance.exports.isGBC();ea(O({type:B.IS_GBC, |
||||
response:a},b.messageId));break;default:console.log("Unknown WasmBoy Worker message:",b)}},getFPS:()=>0<q.timeStampsUntilReady?q.speed&&0<q.speed?q.options.gameboyFrameRate*q.speed:q.options.gameboyFrameRate:q.fpsTimeStamps?q.fpsTimeStamps.length:0};fb(q.messageHandler)})() |
||||
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue