├── ad.html ├── bios ├── arcade.7z ├── gba.zip ├── shader.zip └── zc210.zip ├── content.html ├── cores ├── 32x-wasm.7z ├── 3do-wasm.7z ├── 3do.json ├── a2600-wasm.7z ├── a5200-wasm.7z ├── a7800-wasm.7z ├── amiga-wasm.7z ├── amiga.json ├── arcade-wasm.7z ├── arcade.json ├── atari2600.json ├── atari5200.json ├── atari7800.json ├── beetle-psx-wasm.7z ├── beetle-psx.json ├── bsnes-wasm.7z ├── bsnes.json ├── fbneo-wasm.7z ├── fbneo.json ├── gb-wasm.7z ├── gb.json ├── gba-wasm.7z ├── gba.json ├── gbc.json ├── jaguar-wasm.7z ├── jaguar.json ├── lynx-wasm.7z ├── lynx.json ├── mame-1-wasm.7z ├── mame-2-wasm.7z ├── mame-3-wasm.7z ├── mame-4-wasm.7z ├── mame-5-wasm.7z ├── mame-6-wasm.7z ├── mame0.193.json ├── mame0.243-1-wasm.7z ├── mame0.243-2-wasm.7z ├── mame0.243-3-wasm.7z ├── mame0.243-4-wasm.7z ├── mame0.243-5-wasm.7z ├── mame0.243-6-wasm.7z ├── mame0.243-7-wasm.7z ├── mame0.243.json ├── mame2003-wasm.7z ├── mame2003.json ├── mesen-wasm.7z ├── mesen.json ├── msx-wasm.7z ├── msx.json ├── n64-wasm.7z ├── n64.json ├── nds-wasm.7z ├── nds.json ├── nes-wasm.7z ├── nes.json ├── ngp-wasm.7z ├── ngp.json ├── openbor-wasm.7z ├── openbor.json ├── pce-wasm.7z ├── pce.json ├── pcfx-wasm.7z ├── pcfx.json ├── psx-wasm.7z ├── psx.json ├── sega-wasm.7z ├── sega32x.json ├── segaCD.json ├── segaGG.json ├── segaMD.json ├── segaMS.json ├── segaSaturn.json ├── segacd-wasm.7z ├── snes-wasm.7z ├── snes.json ├── snes2002-wasm.7z ├── snes2002.json ├── snes2005-wasm.7z ├── snes2005.json ├── snes2010-wasm.7z ├── snes2010.json ├── vb-wasm.7z ├── vb.json ├── vbanext-wasm.7z ├── vbanext.json ├── ws-wasm.7z ├── ws.json ├── zc210-wasm.7z └── zc210.json ├── emulator.js ├── emulatorjs.css ├── extractor-new.js ├── extractor-new.wasm ├── game.html ├── index.html ├── load.html ├── old ├── NengeDisk.js ├── arcade.html ├── common.js ├── emu_058.js ├── emu_decode_058.js ├── gamepad.js ├── gb.html ├── gba.html ├── lib │ ├── extract7z.zip │ ├── extractzip.zip │ ├── libunrar.min.zip │ ├── spark-md5.min.zip │ └── zip.min.js ├── nipplejs.js ├── psx.html ├── run │ ├── arcade.js │ ├── gb-test.zip │ ├── gb.js │ ├── gba.js │ ├── other.js │ └── psx.js └── test_5_8_0.html ├── readme.md ├── readme.txt └── shaders ├── 2xScaleHQ.glsl ├── 2xScaleHQ.glslp ├── 4xScaleHQ.glsl ├── 4xScaleHQ.glslp ├── 5xbrz.glsl ├── 5xbrz.glslp ├── 6xbrz.glsl ├── 6xbrz.glslp ├── crt-aperture.glsl ├── crt-aperture.glslp ├── crt-easymode.glsl ├── crt-easymode.glslp ├── crt-geom.glsl ├── crt-geom.glslp ├── crt-mattias.glsl ├── crt-mattias.glslp ├── sgenpt-mix.glsl └── sgenpt-mix.glslp /ad.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/ad.html -------------------------------------------------------------------------------- /bios/arcade.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/bios/arcade.7z -------------------------------------------------------------------------------- /bios/gba.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/bios/gba.zip -------------------------------------------------------------------------------- /bios/shader.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/bios/shader.zip -------------------------------------------------------------------------------- /bios/zc210.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/bios/zc210.zip -------------------------------------------------------------------------------- /content.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | EmulatorJS 9 | 10 | 11 | 80 | 81 | 82 | 83 |
84 | 86 |
87 | 89 | 90 |
91 |
93 | 100 |
101 | 220 | 221 | 222 | -------------------------------------------------------------------------------- /cores/32x-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/32x-wasm.7z -------------------------------------------------------------------------------- /cores/3do-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/3do-wasm.7z -------------------------------------------------------------------------------- /cores/3do.json: -------------------------------------------------------------------------------- 1 | {"3do":["2","1","1","1","1"],"extensions":["iso","bin","cue"],"buttons":[{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"}],"options":[{"key":"opera_cpu_overclock","label":"CPU Overclock","options":["1.0x (12.50Mhz)","1.1x (13.75Mhz)","1.2x (15.00Mhz)","1.5x (18.75Mhz)","1.6x (20.00Mhz)","1.8x (22.50Mhz)","2.0x (25.00Mhz)"],"default":"1.0x (12.50Mhz)","netplay":true},{"key":"opera_region","label":"Mode","options":{"ntsc":"NTSC 320x240@60","pal1":"PAL1 320x288@50","pal2":"PAL2 352x288@50"},"default":"NTSC 320x240@60","netplay":true},{"key":"opera_vdlp_bypass_clut","label":"VDLP Bypass CLUT","options":["disabled","enabled"],"default":"disabled","netplay":true},{"key":"opera_high_resolution","label":"HiRes CEL Rendering","options":["disabled","enabled"],"default":"disabled","netplay":true},{"key":"opera_madam_matrix_engine","label":"MADAM Matrix Engine","options":["hardware","software"],"default":"hardware","netplay":true},{"key":"opera_hack_timing_1","label":"Timing Hack 1 (Crash 'n Burn)","options":["disabled","enabled"],"default":"disabled","netplay":true},{"key":"opera_hack_timing_3","label":"Timing Hack 3 (Dinopark Tycoon)","options":["disabled","enabled"],"default":"disabled","netplay":true},{"key":"opera_hack_timing_5","label":"Timing Hack 5 (Microcosm)","options":["disabled","enabled"],"default":"disabled","netplay":true},{"key":"opera_hack_timing_6","label":"Timing Hack 6 (Alone in the Dark)","options":["disabled","enabled"],"default":"disabled","netplay":true},{"key":"opera_hack_graphics_step_y","label":"Graphics Step Y Hack (Samurai Showdown)","options":["disabled","enabled"],"default":"disabled","netplay":true}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/a2600-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/a2600-wasm.7z -------------------------------------------------------------------------------- /cores/a5200-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/a5200-wasm.7z -------------------------------------------------------------------------------- /cores/a7800-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/a7800-wasm.7z -------------------------------------------------------------------------------- /cores/amiga-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/amiga-wasm.7z -------------------------------------------------------------------------------- /cores/amiga.json: -------------------------------------------------------------------------------- 1 | {"amiga":[2,1,0,1,0],"pointerlock":true,"extensions":["adf","adz","dms","fdi","ipf","hdf","hdz","lha","slave","info","cue","ccd","nrg","mds","iso","chd","uae","m3u"],"buttons":[{"0":"B","1":"Y","2":"Select","3":"Start","4":"Up","5":"Down","6":"Left","7":"Right","8":"A","9":"X","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"Select","3":"Start","4":"Up","5":"Down","6":"Left","7":"Right","8":"A","9":"X","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"Select","3":"Start","4":"Up","5":"Down","6":"Left","7":"Right","8":"A","9":"X","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"Select","3":"Start","4":"Up","5":"Down","6":"Left","7":"Right","8":"A","9":"X","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"}],"restart":false,"keyboard":true,"disk-control":false,"options":[{"key":"puae_model","label":"Model (Need to refresh page)","options":{"auto":"Automatic (defaults to 'A500' with floppy disks)","A500OG":"A500 (v1.2, 0.5M Chip)","A500":"A500 (v1.3, 0.5M Chip + 0.5M Slow)","A500PLUS":"A500+ (v2.04, 1M Chip)","A600":"A600 (v3.1, 2M Chip + 8M Fast)","A1200OG":"A1200 (v3.1, 2M Chip)","A1200":"A1200 (v3.1, 2M Chip + 8M Fast)","A2000OG":"A2000 (v1.2, 0.5M Chip + 0.5M Slow)","A2000":"A2000 (v3.1, 1M Chip)","A4030":"A4000\/030 (v3.1, 2M Chip + 8M Fast)","A4040":"A4000\/040 (v3.1, 2M Chip + 8M Fast)","CDTV":"CDTV (1M Chip)","CD32":"CD32 (2M Chip)"},"default":"auto"},{"key":"puae_model_fd","label":"Automatic Floppy (Need to refresh page)","options":{"A500OG":"A500 (v1.2, 0.5M Chip)","A500":"A500 (v1.3, 0.5M Chip + 0.5M Slow)","A500PLUS":"A500+ (v2.04, 1M Chip)","A600":"A600 (v3.1, 2M Chip + 8M Fast)","A1200OG":"A1200 (v3.1, 2M Chip)","A1200":"A1200 (v3.1, 2M Chip + 8M Fast)","A2000OG":"A2000 (v1.2, 0.5M Chip + 0.5M Slow)","A2000":"A2000 (v3.1, 1M Chip)","A4030":"A4000\/030 (v3.1, 2M Chip + 8M Fast)","A4040":"A4000\/040 (v3.1, 2M Chip + 8M Fast)"},"default":"A500"},{"key":"puae_model_hd","label":"Automatic HD (Need to refresh page)","options":{"A600":"A600 (v3.1, 2M Chip + 8M Fast)","A1200OG":"A1200 (v3.1, 2M Chip)","A1200":"A1200 (v3.1, 2M Chip + 8M Fast)","A2000":"A2000 (v3.1, 1M Chip)","A4030":"A4000\/030 (v3.1, 2M Chip + 8M Fast)","A4040":"A4000\/040 (v3.1, 2M Chip + 8M Fast)"},"default":"A1200"},{"key":"puae_model_cd","label":"Automatic CD (Need to refresh page)","options":{"CDTV":"CDTV (1M Chip)","CD32":"CD32 (2M Chip)","CD32FR":"CD32 (2M Chip + 8M Fast)"},"default":"CD32"},{"key":"puae_kickstart","label":"Kickstart ROM (Need to refresh page)","options":{"auto":"Automatic (most compatible version)","aros":"AROS","kick33180.A500":"v1.2 rev 33.180 (A500-A2000)","kick34005.A500":"v1.3 rev 34.005 (A500-A1000-A2000-CDTV)","kick37175.A500":"v2.04 rev 37.175 (A500+)","kick37350.A600":"v2.05 rev 37.350 (A600)","kick40063.A600":"v3.1 rev 40.063 (A500-A600-A2000)","kick39106.A1200":"v3.0 rev 39.106 (A1200)","kick40068.A1200":"v3.1 rev 40.068 (A1200)","kick39106.A4000":"v3.0 rev 39.106 (A4000)","kick40068.A4000":"v3.1 rev 40.068 (A4000)"},"default":"auto"},{"key":"puae_cpu_compatibility","label":"CPU Compatibility","options":{"normal":"Normal","compatible":"More compatible"},"default":"normal"},{"key":"puae_cpu_throttle","label":"CPU Speed","options":{"-900.0":"-90%","-800.0":"-80%","-700.0":"-70%","-600.0":"-60%","-500.0":"-50%","-400.0":"-40%","-300.0":"-30%","-200.0":"-20%","-100.0":"-10%","0.0":"Default","1000.0":"+100%","2000.0":"+200%","3000.0":"+300%","4000.0":"+400%","5000.0":"+500%","6000.0":"+600%","7000.0":"+700%","8000.0":"+800%","9000.0":"+900%","10000.0":"+1000%"},"default":"0.0"},{"key":"puae_autoloadfastforward","label":"Automatic Load Fast-Forward","options":{"disabled":"Disabled","enabled":"Enabled","fd":"Floppy disks only","hd":"Hard drives only","cd":"Compact discs only"},"default":"disabled"},{"key":"puae_floppy_speed","label":"Floppy Speed","options":{"100":"Default","200":"2x","400":"4x","800":"8x","0":"Turbo"},"default":"100"},{"key":"puae_cd_speed","label":"CD Speed","options":{"100":"Default","0":"Turbo"},"default":"100"},{"key":"puae_shared_nvram","label":"CD32\/CDTV Shared NVRAM","options":{"disabled":"disabled","enabled":"enabled"},"default":"disabled"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/arcade-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/arcade-wasm.7z -------------------------------------------------------------------------------- /cores/arcade.json: -------------------------------------------------------------------------------- 1 | {"arcade":[21,1,1,1,0],"extensions":["zip"],"buttons":[{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/atari2600.json: -------------------------------------------------------------------------------- 1 | {"atari2600":["2","1","1","1","0"],"extensions":["a26","bin"],"buttons":[["Fire","Booster","SELECT","START","UP","DOWN","LEFT","RIGHT","Trigger"],{"0":"Fire","1":"Booster","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"Trigger"},{"0":"Fire","6":"LEFT","7":"RIGHT"},{"0":"Fire","6":"LEFT","7":"RIGHT"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/atari5200.json: -------------------------------------------------------------------------------- 1 | {"atari5200":[1,1,1,1,0],"extensions":["a52","bin"],"buttons":[{"0":"Fire 2","2":"Pause","3":"Start","4":"Joystick Up","5":"Joystick Down","6":"Joystick Left","7":"Joystick Right","8":"Fire 1","10":"Show\/Hide OSK","11":"NumPad 0"},{"4":"Joystick Up","5":"Joystick Down","6":"Joystick Left","7":"Joystick Right","8":"Fire 1"}],"options":[],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/atari7800.json: -------------------------------------------------------------------------------- 1 | {"atari7800":["4","1","1","0","0"],"extensions":["a78","bin"],"buttons":[{"0":"1","2":"Select","3":"Pause","4":"Up","5":"Down","6":"Left","7":"Right","8":"2"},{"0":"1","4":"Up","5":"Down","6":"Left","7":"Right","8":"2"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/beetle-psx-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/beetle-psx-wasm.7z -------------------------------------------------------------------------------- /cores/beetle-psx.json: -------------------------------------------------------------------------------- 1 | {"beetle-psx":[3,1,0,1,1],"extensions":["chd","pbp","exe","ccd","toc","cue","m3u"],"options":[{"key":"beetle_psx_hw_enable_multitap_port1","label":"Port 1: Multitap Enable","options":["disabled","enabled"],"default":"disabled"},{"key":"beetle_psx_hw_enable_multitap_port2","label":"Port 2: Multitap Enable","options":["disabled","enabled"],"default":"disabled"}],"savepath":"psx","buttons":[{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/bsnes-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/bsnes-wasm.7z -------------------------------------------------------------------------------- /cores/bsnes.json: -------------------------------------------------------------------------------- 1 | {"bsnes":[1,1,0,1,1],"extensions":["smc","fig","bs","st","sfc"],"options":[],"savepath":"snes","servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/fbneo-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/fbneo-wasm.7z -------------------------------------------------------------------------------- /cores/fbneo.json: -------------------------------------------------------------------------------- 1 | {"fbneo":[3,1,0,1,0],"extensions":["zip"],"options":[{"key":"fbneo-cpu-speed-adjust","label":"CPU clock","options":["50%","100%","150%","200%","250%","300%","350%","400%"],"default":"100%","netplay":true},{"key":"fbneo-vertical-mode","label":"Vertical mode","options":["disabled","enabled","alternate","TATE","TATE alternate"],"default":"disabled","netplay":true},{"key":"fbneo-neogeo-mode","label":"Neo-Geo mode","options":{"DIPSWITCH":"Use bios set in BIOS dipswitch","MVS_EUR":"MVS Europe\/Asia (English)","MVS_USA":"MVS USA (English - Censored)","MVS_JAP":"MVS Japan (Japanese)","AES_EUR":"AES Europe\/Asia (English)","AES_JAP":"AES Japan (Japanese)","UNIBIOS":"UNIBIOS"},"default":"DIPSWITCH","netplay":true},{"key":"fbneo-diagnostic-input","label":"Diagnostic Input","options":["None","Hold Start","Start + A + B","Hold Start + A + B","Start + L + R","Hold Start + L + R","Hold Select","Select + A + B","Hold Select + A + B","Select + L + R","Hold Select + L + R"],"default":"Hold Start","netplay":true}],"buttons":[{"0":"B","1":"Y","2":"INSERT COIN","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"INSERT COIN","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"INSERT COIN","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"INSERT COIN","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/gb-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/gb-wasm.7z -------------------------------------------------------------------------------- /cores/gb.json: -------------------------------------------------------------------------------- 1 | {"gb":[7,1,1,1,1],"extensions":["gb","gbc","dmg"],"options":[{"key":"gambatte_gb_colorization","label":"GB Colorization","options":{"disabled":"Disabled","auto":"auto","internal":"internal"},"default":"disabled"},{"key":"gambatte_gb_internal_palette","label":"Internal Palette","options":{"GBC - Blue":"GBC - Blue","GBC - Brown":"GBC - Brown","GBC - Dark Blue":"GBC - Dark Blue","GBC - Dark Brown":"GBC - Dark Brown","GBC - Dark Green":"GBC - Dark Green","GBC - Grayscale":"GBC - Grayscale","GBC - Green":"GBC - Green","GBC - Inverted":"GBC - Inverted","GBC - Orange":"GBC - Orange","GBC - Pastel Mix":"GBC - Pastel Mix","GBC - Red":"GBC - Red","GBC - Yellow":"GBC - Yellow"},"default":"GBC - Blue"}],"buttons":[["B","Turbo B","Select","Start","UP","DOWN","LEFT","RIGHT","A","Turbo A"]],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/gba-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/gba-wasm.7z -------------------------------------------------------------------------------- /cores/gba.json: -------------------------------------------------------------------------------- 1 | {"gba":[7,1,1,1,1],"gba-legacy":[2,1,1,1,1],"extensions":["gba","gb","gbc","sgb"],"options":[{"key":"mgba_solar_sensor_level","label":"Solar sensor level","options":["0","1","2","3","4","5","6","7","8","9","10"],"default":"0"},{"key":"mgba_frameskip","label":"Frameskip","options":["0","1","2","3","4","5","6","7","8","9","10"],"default":"0"}],"buttons":[["B","Turbo B","Select","Start","UP","DOWN","LEFT","RIGHT","A","Turbo A","L","R","Turbo L","Turbo R","Darken Solar Sensor","Brighten Solar Sensor"]],"savepath":"gba","servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/gbc.json: -------------------------------------------------------------------------------- 1 | {"gbc":[7,1,1,1,1],"extensions":["gb","gbc","dmg"],"options":[{"key":"gambatte_gb_colorization","label":"GB Colorization","options":{"disabled":"Disabled","auto":"auto","internal":"internal"},"default":"disabled"},{"key":"gambatte_gb_internal_palette","label":"Internal Palette","options":{"GBC - Blue":"GBC - Blue","GBC - Brown":"GBC - Brown","GBC - Dark Blue":"GBC - Dark Blue","GBC - Dark Brown":"GBC - Dark Brown","GBC - Dark Green":"GBC - Dark Green","GBC - Grayscale":"GBC - Grayscale","GBC - Green":"GBC - Green","GBC - Inverted":"GBC - Inverted","GBC - Orange":"GBC - Orange","GBC - Pastel Mix":"GBC - Pastel Mix","GBC - Red":"GBC - Red","GBC - Yellow":"GBC - Yellow"},"default":"GBC - Blue"}],"buttons":[["B","Turbo B","Select","Start","UP","DOWN","LEFT","RIGHT","A","Turbo A"]],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/jaguar-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/jaguar-wasm.7z -------------------------------------------------------------------------------- /cores/jaguar.json: -------------------------------------------------------------------------------- 1 | {"jaguar":["1","0","1","1","0"],"extensions":["j64","jag","rom","abs","cof","bin","prg"],"options":[{"key":"virtualjaguar_usefastblitter","label":"Fast Blitter","options":["disabled","enabled"],"default":"disabled"},{"key":"virtualjaguar_bios","label":"Bios","options":["disabled","enabled"],"default":"disabled"}],"buttons":[{"0":"B","1":"C","2":"Pause","3":"Option","4":"D-Pad Up","5":"D-Pad Down","6":"D-Pad Left","7":"D-Pad Right","8":"A","9":"Numpad 0","10":"Numpad 1","11":"Numpad 2","12":"Numpad 3","13":"Numpad 4","14":"Numpad 5","15":"Numpad 6","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"C","2":"Pause","3":"Option","4":"D-Pad Up","5":"D-Pad Down","6":"D-Pad Left","7":"D-Pad Right","8":"A","9":"Numpad 0","10":"Numpad 1","11":"Numpad 2","12":"Numpad 3","13":"Numpad 4","14":"Numpad 5","15":"Numpad 6","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/lynx-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/lynx-wasm.7z -------------------------------------------------------------------------------- /cores/lynx.json: -------------------------------------------------------------------------------- 1 | {"lynx":["2","1","0","1","0"],"extensions":["lnx"],"buttons":[{"0":"B","2":"Rotate screen","3":"Pause","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","10":"Option 1","11":"Option 2"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/mame-1-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame-1-wasm.7z -------------------------------------------------------------------------------- /cores/mame-2-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame-2-wasm.7z -------------------------------------------------------------------------------- /cores/mame-3-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame-3-wasm.7z -------------------------------------------------------------------------------- /cores/mame-4-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame-4-wasm.7z -------------------------------------------------------------------------------- /cores/mame-5-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame-5-wasm.7z -------------------------------------------------------------------------------- /cores/mame-6-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame-6-wasm.7z -------------------------------------------------------------------------------- /cores/mame0.193.json: -------------------------------------------------------------------------------- 1 | {"mame0.193":[1,1,0,1,0],"extensions":["zip"],"options":[],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/mame0.243-1-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame0.243-1-wasm.7z -------------------------------------------------------------------------------- /cores/mame0.243-2-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame0.243-2-wasm.7z -------------------------------------------------------------------------------- /cores/mame0.243-3-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame0.243-3-wasm.7z -------------------------------------------------------------------------------- /cores/mame0.243-4-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame0.243-4-wasm.7z -------------------------------------------------------------------------------- /cores/mame0.243-5-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame0.243-5-wasm.7z -------------------------------------------------------------------------------- /cores/mame0.243-6-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame0.243-6-wasm.7z -------------------------------------------------------------------------------- /cores/mame0.243-7-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame0.243-7-wasm.7z -------------------------------------------------------------------------------- /cores/mame0.243.json: -------------------------------------------------------------------------------- 1 | {"mame0.243":[9,1,0,1,0],"extensions":["zip"],"options":[],"buttons":[{"0":"B","1":"Y","2":"INSERT COIN","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"INSERT COIN","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"INSERT COIN","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"INSERT COIN","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/mame2003-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mame2003-wasm.7z -------------------------------------------------------------------------------- /cores/mame2003.json: -------------------------------------------------------------------------------- 1 | {"mame2003":["3","0","1","1","0"],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/mesen-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/mesen-wasm.7z -------------------------------------------------------------------------------- /cores/mesen.json: -------------------------------------------------------------------------------- 1 | {"mesen":["6","1","0","1","1"],"extensions":["nes","fds","unf","unif"],"options":[{"key":"mesen_overclock","label":"Overclock","options":["None","Low","Medium","High","Very High"],"default":"None","netplay":true},{"key":"mesen_palette","label":"Palette","options":["Default","Composite Direct (by FirebrandX)","Nes Classic","Nestopia (RGB)","Original Hardware (by FirebrandX)","PVM Style (by FirebrandX)","Sony CXA2025AS","Unsaturated v6 (by FirebrandX)","YUV v3 (by FirebrandX)","Wavebeam (by nakedarthur)","Raw"],"default":"Default","netplay":true},{"key":"mesen_controllerturbospeed","label":"Controller Turbo Speed","options":["Fast","Very Fast","Disabled","Slow","Normal"],"default":"Fast","netplay":true},{"key":"mesen_nospritelimit","label":"Remove sprite limit","options":["disabled","enabled"],"default":"disabled","netplay":true}],"savepath":"nes","servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/msx-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/msx-wasm.7z -------------------------------------------------------------------------------- /cores/msx.json: -------------------------------------------------------------------------------- 1 | {"msx":["2","1","1","1","0"],"extensions":["rom","ri","mx1","mx2","col","dsk","cas","sg","sc","m3u"],"options":[{"key":"bluemsx_nospritelimits","label":"No Sprite Limit","options":["OFF","ON"],"default":"OFF"}],"buttons":[["B","Y","SELECT","START","Joy Up","Joy Down","Joy Left","Joy Right","A","X"],{"0":"B","4":"Joy Up","5":"Joy Down","6":"Joy Left","7":"Joy Right","8":"A"}],"keyboard":true,"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/n64-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/n64-wasm.7z -------------------------------------------------------------------------------- /cores/n64.json: -------------------------------------------------------------------------------- 1 | {"n64":["18","1","1","1","1"],"extensions":["n64","v64","z64","bin","u1"],"options":[{"key":"glupen64-pak1","label":"Player 1 Pak","options":["memory","rumble","none"],"default":"none"},{"key":"glupen64-pak2","label":"Player 2 Pak","options":["none","memory","rumble"],"default":"none"},{"key":"glupen64-pak3","label":"Player 3 Pak","options":["none","memory","rumble"],"default":"none"},{"key":"glupen64-pak4","label":"Player 4 Pak","options":["none","memory","rumble"],"default":"none"}],"buttons":[{"0":"B","3":"START","4":"Up","5":"Down","6":"Left","7":"Right","8":"A","10":"L-Trigger","11":"R-Trigger","12":"Z-Trigger","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"C-UP","22":"C-DOWN","21":"C-LEFT","20":"C-RIGHT"},{"0":"B","3":"START","4":"Up","5":"Down","6":"Left","7":"Right","8":"A","10":"L-Trigger","11":"R-Trigger","12":"Z-Trigger","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"C-UP","22":"C-DOWN","21":"C-LEFT","20":"C-RIGHT"},{"0":"B","3":"START","4":"Up","5":"Down","6":"Left","7":"Right","8":"A","10":"L-Trigger","11":"R-Trigger","12":"Z-Trigger","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"C-UP","22":"C-DOWN","21":"C-LEFT","20":"C-RIGHT"},{"0":"B","3":"START","4":"Up","5":"Down","6":"Left","7":"Right","8":"A","10":"L-Trigger","11":"R-Trigger","12":"Z-Trigger","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"C-UP","22":"C-DOWN","21":"C-LEFT","20":"C-RIGHT"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/nds-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/nds-wasm.7z -------------------------------------------------------------------------------- /cores/nds.json: -------------------------------------------------------------------------------- 1 | {"nds":[5,1,1,1,1],"extensions":["bin","nds"],"options":[{"key":"desmume_screens_layout","label":"Screen layout","options":["top\/bottom","bottom\/top","left\/right","right\/left","top only","bottom only"],"default":"top\/bottom"},{"key":"screen_rotation","label":"Screen Rotation","options":{"0":"0\u00b0","90":"90\u00b0","180":"180\u00b0","270":"270\u00b0"},"default":"0"},{"key":"desmume_frameskip","label":"Frameskip","options":["0","1","2","3","4","5","6","7","8","9"],"default":"0"}],"savepath":"nds","buttons":[["B","Y","SELECT","START","UP","DOWN","LEFT","RIGHT","A","X","L","R","L2","R2","Microphone","R3"]],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/nes-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/nes-wasm.7z -------------------------------------------------------------------------------- /cores/nes.json: -------------------------------------------------------------------------------- 1 | {"nes":["23","1","1","1","1"],"extensions":["nes","fds","unf","unif"],"options":[{"key":"fceumm_region","label":"Region","options":["Auto","NTSC","PAL","Dendy"],"default":"Auto","netplay":true},{"key":"fceumm_aspect","label":"Aspect Ratio","options":{"8:7 PAR":"8:7 PAR","4:3":"4:3","PP":"Pixel Perfect"},"default":"8:7 PAR","netplay":true},{"key":"fceumm_palette","label":"Color Palette","options":{"default":"Default","asqrealc":"AspiringSquire's Real","nintendo-vc":"Nintendo Virtual Console","rgb":"Nintendo RGB PPU","yuv-v3":"FBX's YUV-V3","unsaturated-final":"FBX's Unsaturated-Final","sony-cxa2025as-us":"Sony CXA2025AS US","pal":"PAL","bmf-final2":"BMF's Final 2","bmf-final3":"BMF's Final 3","smooth-fbx":"FBX's Smooth","composite-direct-fbx":"FBX's Composite Direct","pvm-style-d93-fbx":"FBX's PVM Style D93","ntsc-hardware-fbx":"FBX's NTSC Hardware","nes-classic-fbx-fs":"FBX's NES-Classic FS","nescap":"RGBSource's NESCAP","wavebeam":"nakedarthur's Wavebeam","raw":"Raw"},"default":"default","netplay":true},{"key":"fceumm_nospritelimit","label":"No Sprite Limit","options":{"enabled":"Enabled","disabled":"Disabled"},"default":"disabled","netplay":true},{"key":"fceumm_sndquality","label":"Sound Quality","options":{"Low":"Low","High":"High","Very High":"Very High"},"default":"Low","netplay":true},{"key":"fceumm_turbo_enable","label":"Turbo Enable","options":["None","Player 1","Player 2","Both"],"default":"None","netplay":true},{"key":"fceumm_turbo_delay","label":"Turbo Delay (in frames)","options":["1","2","3","5","10","15","30","60"],"default":"3","netplay":true}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/ngp-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/ngp-wasm.7z -------------------------------------------------------------------------------- /cores/ngp.json: -------------------------------------------------------------------------------- 1 | {"ngp":["4","1","1","1","0"],"extensions":["ngp","ngc"],"buttons":[{"0":"B","3":"Option","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/openbor-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/openbor-wasm.7z -------------------------------------------------------------------------------- /cores/openbor.json: -------------------------------------------------------------------------------- 1 | {"openbor":[3,0,0,1,0],"extensions":["pak"],"buttons":[["JUMP","ATTACK 3","ESC","START","UP","DOWN","LEFT","RIGHT","ATTACK","ATTACK 2","SPECIAL","ATTACK 4"],["JUMP","ATTACK 3","ESC","START","UP","DOWN","LEFT","RIGHT","ATTACK","ATTACK 2","SPECIAL","ATTACK 4"],["JUMP","ATTACK 3","ESC","START","UP","DOWN","LEFT","RIGHT","ATTACK","ATTACK 2","SPECIAL","ATTACK 4"],["JUMP","ATTACK 3","ESC","START","UP","DOWN","LEFT","RIGHT","ATTACK","ATTACK 2","SPECIAL","ATTACK 4"]],"restart":false,"pause":false,"screenshot":false,"settings":false,"volume":false,"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/pce-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/pce-wasm.7z -------------------------------------------------------------------------------- /cores/pce.json: -------------------------------------------------------------------------------- 1 | {"pce":[1,1,1,1,0],"extensions":["toc","pce","ccd","chd","cue","m3u"],"options":[{"key":"pce_nospritelimit","label":"No Sprite Limit","options":["disabled","enabled"],"default":"disabled","netplay":true}],"buttons":[["II","III","Select","Run","Up","Down","Left","Right","I","IV","V","VI","Mode Switch"],["II","III","Select","Run","Up","Down","Left","Right","I","IV","V","VI","Mode Switch"],["II","III","Select","Run","Up","Down","Left","Right","I","IV","V","VI","Mode Switch"],["II","III","Select","Run","Up","Down","Left","Right","I","IV","V","VI","Mode Switch"]],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/pcfx-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/pcfx-wasm.7z -------------------------------------------------------------------------------- /cores/pcfx.json: -------------------------------------------------------------------------------- 1 | {"pcfx":["3","1","0","1","0"],"extensions":["ccd","toc","chd","cue"],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/psx-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/psx-wasm.7z -------------------------------------------------------------------------------- /cores/psx.json: -------------------------------------------------------------------------------- 1 | {"psx":["17","1","0","1","1"],"extensions":["bin","iso","cue","img","mdf","pbp","toc","cbn","m3u"],"options":[{"key":"controller-device","label":"Input Device Type","options":{"1":"Standard","261":"Analog","517":"DualShock","773":"NeGcon"},"default":"1"},{"key":"pcsx_rearmed_vibration","label":"Enable Vibration","options":["enabled","disabled"],"default":"enabled"},{"key":"pcsx_rearmed_region","label":"Region","options":["auto","NTSC","PAL"],"default":"auto"},{"key":"pcsx_rearmed_bios","label":"BIOS Selection","options":["auto","HLE"],"default":"auto"},{"key":"pcsx_rearmed_pe2_fix","label":"Parasite Eve 2\/Vandal Hearts 1\/2 Fix","options":["disabled","enabled"],"default":"disabled"},{"key":"pcsx_rearmed_inuyasha_fix","label":"InuYasha Sengoku Battle Fix","options":["disabled","enabled"],"default":"disabled"}],"buttons":[{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/sega-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/sega-wasm.7z -------------------------------------------------------------------------------- /cores/sega32x.json: -------------------------------------------------------------------------------- 1 | {"sega32x":["6","1","1","1","1"],"extensions":["32x","bin","gen","smd","md","cue","iso","sms"],"options":[{"key":"picodrive_sprlim","label":"No sprite limit","options":["disabled","enabled"],"default":"disabled","netplay":true}],"buttons":[["B","Y","MODE","START","UP","DOWN","LEFT","RIGHT","A","X","C","Z","L2","R2"],["B","Y","MODE","START","UP","DOWN","LEFT","RIGHT","A","X","C","Z","L2","R2"],["B","Y","MODE","START","UP","DOWN","LEFT","RIGHT","A","X","C","Z","L2","R2"],["B","Y","MODE","START","UP","DOWN","LEFT","RIGHT","A","X","C","Z","L2","R2"]],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/segaCD.json: -------------------------------------------------------------------------------- 1 | {"segaCD":["15","1","1","0","1"],"extensions":["mdx","md","smd","gen","bin","iso","cue","sms","gg","sg","68k","chd"],"buttons":[["B","Y","MODE","START","UP","DOWN","LEFT","RIGHT","A","X","C","Z","L2","R2"],["B","Y","MODE","START","UP","DOWN","LEFT","RIGHT","A","X","C","Z","L2","R2"],["B","Y","MODE","START","UP","DOWN","LEFT","RIGHT","A","X","C","Z","L2","R2"],["B","Y","MODE","START","UP","DOWN","LEFT","RIGHT","A","X","C","Z","L2","R2"]],"options":[{"key":"genesis_plus_gx_region_detect","label":"System Region","options":{"auto":"Auto","ntsc-u":"NTSC-U","pal":"PAL","ntsc-j":"NTSC-J"},"default":"auto","netplay":true},{"key":"genesis_plus_gx_overclock","label":"CPU speed","options":["100%","125%","150%","175%","200%"],"default":"100%","netplay":true},{"key":"genesis_plus_gx_no_sprite_limit","label":"No Sprite Limit","options":["disabled","enabled"],"default":"disabled","netplay":true},{"key":"genesis_plus_gx_sound_output","label":"Sound output","options":["stereo","mono"],"default":"stereo","netplay":true}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/segaGG.json: -------------------------------------------------------------------------------- 1 | {"segaGG":["14","1","1","1","1"],"options":[{"key":"genesis_plus_gx_region_detect","label":"System Region","options":{"auto":"Auto","ntsc-u":"NTSC-U","pal":"PAL","ntsc-j":"NTSC-J"},"default":"auto","netplay":true},{"key":"genesis_plus_gx_overclock","label":"CPU speed","options":["100%","125%","150%","175%","200%"],"default":"100%","netplay":true},{"key":"genesis_plus_gx_no_sprite_limit","label":"No Sprite Limit","options":["disabled","enabled"],"default":"disabled","netplay":true},{"key":"genesis_plus_gx_sound_output","label":"Sound output","options":["stereo","mono"],"default":"stereo","netplay":true},{"key":"genesis_plus_gx_gg_extra","label":"Extended screen","options":["disabled","enabled"],"default":"disabled"}],"extensions":["mdx","smd","gen","bin","gg","sg","68k"],"buttons":[{"0":"B","2":"Mode","3":"Start","4":"D-Pad UP","5":"D-Pad DOWN","6":"D-Pad LEFT","7":"D-Pad RIGHT","8":"A"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/segaMD.json: -------------------------------------------------------------------------------- 1 | {"segaMD":["14","1","1","1","1"],"options":[{"key":"genesis_plus_gx_region_detect","label":"System Region","options":{"auto":"Auto","ntsc-u":"NTSC-U","pal":"PAL","ntsc-j":"NTSC-J"},"default":"auto","netplay":true},{"key":"genesis_plus_gx_overclock","label":"CPU speed","options":["100%","125%","150%","175%","200%"],"default":"100%","netplay":true},{"key":"genesis_plus_gx_no_sprite_limit","label":"No Sprite Limit","options":["disabled","enabled"],"default":"disabled","netplay":true},{"key":"genesis_plus_gx_sound_output","label":"Sound output","options":["stereo","mono"],"default":"stereo","netplay":true}],"extensions":["mdx","md","smd","gen","bin","iso","cue","sms","gg","sg","68k","chd","m3u"],"buttons":[["B","Y","MODE","START","D-Pad Up","D-Pad Down","D-Pad Left","D-Pad Right","A","X","C","Z","L2","R2"],["B","Y","MODE","START","D-Pad Up","D-Pad Down","D-Pad Left","D-Pad Right","A","X","C","Z","L2","R2"],["B","Y","MODE","START","D-Pad Up","D-Pad Down","D-Pad Left","D-Pad Right","A","X","C","Z","L2","R2"],["B","Y","MODE","START","D-Pad Up","D-Pad Down","D-Pad Left","D-Pad Right","A","X","C","Z","L2","R2"]],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/segaMS.json: -------------------------------------------------------------------------------- 1 | {"segaMS":["14","1","1","1","1"],"options":[{"key":"genesis_plus_gx_region_detect","label":"System Region","options":{"auto":"Auto","ntsc-u":"NTSC-U","pal":"PAL","ntsc-j":"NTSC-J"},"default":"auto","netplay":true},{"key":"genesis_plus_gx_overclock","label":"CPU speed","options":["100%","125%","150%","175%","200%"],"default":"100%","netplay":true},{"key":"genesis_plus_gx_no_sprite_limit","label":"No Sprite Limit","options":["disabled","enabled"],"default":"disabled","netplay":true},{"key":"genesis_plus_gx_sound_output","label":"Sound output","options":["stereo","mono"],"default":"stereo","netplay":true}],"extensions":["mdx","md","smd","gen","bin","sms","gg","sg","68k"],"buttons":[{"0":"B","2":"Mode","3":"Start","4":"D-Pad UP","5":"D-Pad DOWN","6":"D-Pad LEFT","7":"D-Pad RIGHT","8":"A"},{"0":"B","2":"Mode","3":"Start","4":"D-Pad UP","5":"D-Pad DOWN","6":"D-Pad LEFT","7":"D-Pad RIGHT","8":"A"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/segaSaturn.json: -------------------------------------------------------------------------------- 1 | {"segaSaturn":["4","1","0","1","0"],"extensions":["bin","cue","iso"],"threads":1,"options":[{"key":"yabause_frameskip","label":"Frameskip","options":["disabled","enabled"],"default":"disabled"}],"buttons":[{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"},{"0":"B","1":"Y","2":"SELECT","3":"START","4":"UP","5":"DOWN","6":"LEFT","7":"RIGHT","8":"A","9":"X","10":"L","11":"R","12":"L2","13":"R2","14":"L3","15":"R3","19":"L STICK UP","18":"L STICK DOWN","17":"L STICK LEFT","16":"L STICK RIGHT","23":"R STICK UP","22":"R STICK DOWN","21":"R STICK LEFT","20":"R STICK RIGHT"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/segacd-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/segacd-wasm.7z -------------------------------------------------------------------------------- /cores/snes-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/snes-wasm.7z -------------------------------------------------------------------------------- /cores/snes.json: -------------------------------------------------------------------------------- 1 | {"snes":[19,1,0,1,1],"extensions":["smc","fig","sfc","gd3","gd7","dx2","bsx","swc"],"options":[{"key":"snes9x_aspect","label":"Preferred Aspect Ratio","options":{"4:3":"4:3","4:3 scaled":"4:3 (Preserved)","uncorrected":"Uncorrected","auto":"Auto","ntsc":"NTSC","pal":"PAL"},"default":"4:3","netplay":true},{"key":"snes9x_overclock_superfx","label":"SuperFX Frequency","options":["50%","60%","70%","80%","90%","100%","150%","200%","250%","300%","350%","400%","450%","500%"],"default":"100%","netplay":true},{"key":"snes9x_up_down_allowed","label":"Allow Opposing Directions","options":["disabled","enabled"],"default":"disabled","netplay":true},{"key":"snes9x_audio_interpolation","label":"Audio Interpolation","options":{"gaussian":"Gaussian","cubic":"Cubic","sinc":"Sinc","none":"None","linear":"Linear"},"default":"gaussian","netplay":true}],"savepath":"snes","servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/snes2002-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/snes2002-wasm.7z -------------------------------------------------------------------------------- /cores/snes2002.json: -------------------------------------------------------------------------------- 1 | {"snes2002":["3","1","1","1","1"],"extensions":["smc","fig","sfc","gd3","gd7","dx2","bsx","swc"],"savepath":"snes","servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/snes2005-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/snes2005-wasm.7z -------------------------------------------------------------------------------- /cores/snes2005.json: -------------------------------------------------------------------------------- 1 | {"snes2005":["3","1","1","1","1"],"extensions":["smc","fig","sfc","gd3","gd7","dx2","bsx","swc"],"options":[{"key":"snes9x_2005_reduce_sprite_flicker","label":"Reduce Flickering (Hack, Unsafe)","options":["disabled","enabled"],"default":"disabled","netplay":true}],"savepath":"snes","servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/snes2010-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/snes2010-wasm.7z -------------------------------------------------------------------------------- /cores/snes2010.json: -------------------------------------------------------------------------------- 1 | {"snes2010":["3","1","1","1","1"],"extensions":["smc","fig","sfc","gd3","gd7","dx2","bsx","swc"],"options":[{"key":"snes9x_next_overclock","label":"SuperFX Overclock","options":{"disabled":"Disabled(10MHz)","40MHz":"40MHz","60MHz":"60MHz","80MHz":"80MHz","100MHz":"100MHz"},"default":"disabled","netplay":true},{"key":"snes9x_next_overclock_cycles","label":"Reduce Slowdown (Hack, Unsafe)","options":["disabled","compatible","max"],"default":"disabled","netplay":true},{"key":"snes9x_next_reduce_sprite_flicker","label":"Reduce Flickering (Hack, Unsafe)","options":["disabled","enabled"],"default":"disabled","netplay":true}],"savepath":"snes","servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/vb-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/vb-wasm.7z -------------------------------------------------------------------------------- /cores/vb.json: -------------------------------------------------------------------------------- 1 | {"vb":["1","1","1","1","0"],"extensions":["vb","vboy","bin"],"buttons":[{"0":"B","2":"Select","3":"Start","4":"Left D-Pad Up","5":"Left D-Pad Down","6":"Left D-Pad Left","7":"Left D-Pad Right","8":"A","10":"L","11":"R","12":"Right D-Pad Up","13":"Right D-Pad Left","14":"Right D-Pad Down","15":"Right D-Pad Right"}],"options":[{"key":"vb_3dmode","label":"3D mode","options":["anaglyph","cyberscope","side-by-side","vli","hli"],"default":"anaglyph"},{"key":"vb_anaglyph_preset","label":"Anaglyph preset","options":["disabled","red & blue","red & cyan","red & electric cyan","green & magenta","yellow & blue"],"default":"disabled"},{"key":"vb_color_mode","label":"Palette","options":["black & red","black & white","black & blue","black & cyan","black & electric cyan","black & green","black & magenta","black & yellow"],"default":"black & red"},{"key":"vb_right_analog_to_digital","label":"Right analog to digital","options":["disabled","enabled","invert x","invert y","invert both"],"default":"disabled"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/vbanext-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/vbanext-wasm.7z -------------------------------------------------------------------------------- /cores/vbanext.json: -------------------------------------------------------------------------------- 1 | {"vbanext":["1","1","1","1","1"],"savepath":"gba","extensions":["gba"],"options":[{"key":"vbanext_bios","label":"Use BIOS if available (Need to refresh page)","options":["disabled","enabled"],"default":"enabled"},{"key":"vbanext_rtc","label":"Force Enable RTC (Need to refresh page)","options":["auto","enabled"],"default":"auto"},{"key":"vbanext_turboenable","label":"Enable Turbo Buttons","options":["disabled","enabled"],"default":"disabled"},{"key":"vbanext_turbodelay","label":"Turbo Delay in frames","options":["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"],"default":"2"}],"buttons":[["B","Turbo B","Select","Start","UP","DOWN","LEFT","RIGHT","A","Turbo A","L","R"]],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/ws-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/ws-wasm.7z -------------------------------------------------------------------------------- /cores/ws.json: -------------------------------------------------------------------------------- 1 | {"ws":["3","1","1","1","0"],"extensions":["ws","wsc"],"options":[{"key":"wswan_rotate_display","label":"Display Rotation","options":["manual","landscape","portrait"],"default":"manual"},{"key":"wswan_rotate_keymap","label":"Rotate Button Mappings","options":{"auto":"Auto","disabled":"Landscape","enabled":"Portrait"},"default":"auto"},{"key":"wswan_mono_palette","label":"Color Palette","options":{"default":"Grayscale","wonderswan":"WS - WonderSwan","wondeswan_color":"WS - WonderSwan Color","swancrystal":"WS - SwanCrystal","gb_dmg":"Game Boy DMG","gb_pocket":"Game Boy Pocket","gb_light":"Game Boy Light","blossom_pink":"Blossom Pink","bubbles_blue":"Bubbles Blue","buttercup_green":"Buttercup Green","digivice":"Digivice","game_com":"Game.com","gameking":"GameKing","game_master":"Game Master","golden_wild":"Golden Wild","greenscale":"Greenscale","hokage_orange":"Hokage Orange","labo_fawn":"Labo Fawn","legendary_super_saiyan":"Legendary Super Saiyan","microvision":"Microvision","million_live_gold":"Million Live Gold","odyssey_gold":"Odyssey Gold","shiny_sky_blue":"Shiny Sky Blue","slime_blue":"Slime Blue","ti_83":"TI-83","travel_wood":"Travel Wood","virtual_boy":"Virtual Boy"},"default":"default"}],"buttons":[{"0":"B","2":"Rotate","3":"Start","4":"X Cursor Up","5":"X Cursor Down","6":"X Cursor Left","7":"X Cursor Right","8":"A","10":"Y Cursor Left","11":"Y Cursor Right","12":"Y Cursor Down","13":"Y Cursor Up"}],"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /cores/zc210-wasm.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/cores/zc210-wasm.7z -------------------------------------------------------------------------------- /cores/zc210.json: -------------------------------------------------------------------------------- 1 | {"zc210":[1,0,0,1,0],"extensions":["qst"],"options":[{"key":"zc_heart_beep","label":"Enable Low Health Beep","options":["true","false"],"default":"true"},{"key":"zc_allow_cheats","label":"Allow cheats (press 'Cheat' and L, R, Map, Select, or Start)","options":["true","false"],"default":"false"}],"buttons":[["B","Cheat","Select","Start","Up","Down","Left","Right","A","Map","L","R"]],"restart":false,"servers":{"us3":{"name":"Los Angeles, USA","url":"wss:\/\/la-us-server.emulatorjs.com\/"},"us2":{"name":"New York, USA","url":"wss:\/\/nyc-us-server.emulatorjs.com\/"},"us":{"name":"Chicago, USA","url":"wss:\/\/us-server.emulatorjs.com\/"},"uk":{"name":"London, United Kingdom","url":"wss:\/\/uk-server.emulatorjs.com\/"},"nl":{"name":"Amsterdam, Netherlands","url":"wss:\/\/nl-server.emulatorjs.com\/"},"de":{"name":"Frankfurt, Germany","url":"wss:\/\/de-server.emulatorjs.com\/"},"es":{"name":"Madrid, Spain","url":"wss:\/\/es-server.emulatorjs.com\/"},"au":{"name":"Sydney, Australia","url":"wss:\/\/au-server.emulatorjs.com\/"},"br":{"name":"Sao Paulo, Brazil","url":"wss:\/\/br-server.emulatorjs.com\/"},"jp":{"name":"Tokyo, Japan","url":"wss:\/\/jp-server.emulatorjs.com\/"}},"shaders":{"2xScaleHQ":["2xScaleHQ.glslp","2xScaleHQ.glsl"],"4xScaleHQ":["4xScaleHQ.glslp","4xScaleHQ.glsl"],"5xbrz":["5xbrz.glslp","5xbrz.glsl"],"6xbrz":["6xbrz.glslp","6xbrz.glsl"],"crt-easymode":["crt-easymode.glslp","crt-easymode.glsl"],"crt-aperture":["crt-aperture.glslp","crt-aperture.glsl"],"crt-geom":["crt-geom.glslp","crt-geom.glsl"],"crt-mattias":["crt-mattias.glslp","crt-mattias.glsl"],"sgenpt-mix":["sgenpt-mix.glslp","sgenpt-mix.glsl"]}} -------------------------------------------------------------------------------- /extractor-new.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/extractor-new.wasm -------------------------------------------------------------------------------- /game.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | EmulatorJS 9 | 20 | 21 | 22 | 23 |
24 |
25 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Test 9 | 10 | 11 |
12 |
13 |
14 | 15 | 26 | 27 | -------------------------------------------------------------------------------- /load.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | EmulatorJS 7 | 8 | 9 | 10 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /old/arcade.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 |
11 |
12 | 13 |
14 | 15 |
16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /old/gb.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 |
11 |
12 | 13 |
14 | 15 |
16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /old/gba.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 |
11 |
12 | 13 |
14 | 15 |
16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /old/lib/extract7z.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/old/lib/extract7z.zip -------------------------------------------------------------------------------- /old/lib/extractzip.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/old/lib/extractzip.zip -------------------------------------------------------------------------------- /old/lib/libunrar.min.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/old/lib/libunrar.min.zip -------------------------------------------------------------------------------- /old/lib/spark-md5.min.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/old/lib/spark-md5.min.zip -------------------------------------------------------------------------------- /old/psx.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 |
11 |
12 | 13 |
14 | 15 |
16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /old/run/arcade.js: -------------------------------------------------------------------------------- 1 | var T= Nenge,I=T.I,F=T.F; 2 | var Module = {}; 3 | (async function(){ 4 | 5 | let files = await T.FetchItem({ 6 | url:'cores/arcade-wasm.7z?'+T.time, 7 | unpack:!0 8 | }); 9 | let games = await T.FetchItem({ 10 | url:'/xiunoII/game/kof97.zip', 11 | }); 12 | let bios = await T.FetchItem({ 13 | url:'bios/arcade.7z', 14 | unpack:!0 15 | }); 16 | console.log(files,games,game); 17 | files['retroarch.js'] = I.decode(files['retroarch.js']).replace(/function\s*_gettimeofday\(ptr\)\s*\{\n?\s*?var\s*now\s*=\s*/,'function _gettimeofday(ptr) {var now = 1690674045574;').replace(/function\s*callMain\(args\)\s*{/,'function callMain(args) {if(typeof args==="string"){args = ["-v",args,"c37f5e84f377fb892c851b364c55251132d57c66d2f3ea56d2af90bef14773f0"];}console.log(args);'); 18 | await T.addJS(files['retroarch.js']); 19 | //await T.addJS('./gb.js?'+T.time); 20 | Module = { 21 | wasmBinary : files['retroarch.wasm'], 22 | canvas:T.$('canvas'), 23 | hash:'2b35cacf70aef5cbb3f38c0bb20e488cc8ad0c350400499a0', 24 | onRuntimeInitialized(){ 25 | let args = 'kof97.zip'; 26 | I.toArr(bios,v=>this.writeFile(v[0],v[1])); 27 | this.writeFile(args,games); 28 | if(this.specialHTMLTargets){ 29 | I[1].assign(this.specialHTMLTargets,{ 30 | '#canvas':this.canvas, 31 | '#canvas-input':T.$('#ejs-input'), 32 | '#canvas-mouse':T.$('#game') 33 | }); 34 | } 35 | /* 36 | if(this._get_content_crc){ 37 | T.$('iframe').src = 'https://www.emulatorjs.com/embed/load.html'; 38 | T.once(window,'message',e=>{ 39 | console.log(e.data); 40 | if(e.data.key)args[2] = e.data.key; 41 | }); 42 | } 43 | */ 44 | this.mkdir('/etc'); 45 | this.mkdir('/home'); 46 | this.mkdir('/shader'); 47 | this.mkdir('/saves'); 48 | this.mkdir('/home/web_user/.config'); 49 | this.mkdir('/home/web_user/retroarch/userdata'); 50 | //this.mkdir('/home/web_user/retroarch/userdata/config/remaps/mGBA'); 51 | //this.writeFile('/etc/Gambatte/Gambatte.cfg','gambatte_gb_bootloader = "enabled"\ngambatte_gb_colorization = GBA\ngambatte_gb_hwmode = GBA') 52 | this.writeFile('/etc/retroarch.cfg', 'savefile_directory = "/saves"' + 53 | '\nsystem_directory = "/"\n' + 54 | '\nsavestate_directory = "/saves"' + 55 | '\nvideo_vsync = true' + 56 | '\nscreenshot_directory = "/"' + 57 | '\nvideo_shader = "/shader/shader.glslp"' + 58 | '\nvideo_shader_enable = true' + 59 | '\nvideo_font_enable = false' + 60 | '\nvideo_scale = 1.0' + 61 | '\nvideo_gpu_screenshot = false' + 62 | '\ncamera_allow = "false"' + 63 | '\ncamera_driver = "null"' + 64 | '\ncamera_device = "null"'+ 65 | '\n'); 66 | T.once(T.$('canvas'),'click',async e=>{ 67 | //let headers = (await T.FetchItem({url:'https://www.emulatorjs.com/api/v?name=gb',type:'head'})); 68 | //a75d7994cbfc3bfd7f61c328e42a064d7d4c43e0f2069d6c85ff2c6517f6403f 69 | //console.log(headers); 70 | //if(headers.key)args[2] = headers.key; 71 | if(Module._get_content_crc){ 72 | args[2] = 'c8b683b2e3b8417696ca6026b160c7a332d57c66d2f3ea56d2af90bef14773f0'; 73 | //54f99f60901cd32e55c5ef323c27d0e2 32d57c66d2f3ea56d2af90bef14773f0 74 | //54f99f60901cd32e55c5ef323c27d0e232d57c66d2f3ea56d2af90bef14773f0 75 | } 76 | Module.callMain(args); 77 | console.log('click',args,Module.getCore()); 78 | 79 | }) 80 | console.log('ok'); 81 | }, 82 | 'TOTAL_MEMORY': 0x10000000, 83 | 'noInitialRun': !0x0, 84 | 'arguments': [], 85 | 'preRun': [], 86 | 'postRun': [], 87 | 'totalDependencies': 0x0, 88 | print(e){ 89 | console.log(e); 90 | }, 91 | printErr(e){ 92 | console.log(e); 93 | }, 94 | inputValue(...a){ 95 | return this['cwrap']('simulate_input', 'null', ['number', 'number', 'number'])(...a); 96 | }, 97 | setVariable(...a){ 98 | return this['cwrap']('set_variable', 'null', ['string', 'string']).apply(this,a); 99 | }, 100 | getCore(){ 101 | let data = this['cwrap']('get_core_options', 'string', [])(); 102 | if(data){ 103 | let list = data.split('\n'); 104 | return Object.fromEntries( 105 | list.map(v=>{ 106 | let s = v.split(';'); 107 | return [s[0],s[1]&&s[1].trim().split('|').map(v=>v.trim())]; 108 | })); 109 | } 110 | }, 111 | readFile(name){ 112 | return I.decode(this.FS.readFile(name)) 113 | }, 114 | mkdir(path){ 115 | let FS = this.FS; 116 | if(!FS.analyzePath(path).exists){ 117 | let p = path.split('/'); 118 | let name = p.pop(); 119 | let newpath = p.join('/'); 120 | this.mkdir(newpath); 121 | FS.createPath(newpath, name, !0x0, !0x0); 122 | } 123 | }, 124 | writeFile(path,data){ 125 | let newpath = path.split('/').slice(0,-1).join('/'); 126 | newpath&&this.mkdir(newpath); 127 | this.FS.writeFile(path,data); 128 | 129 | 130 | }, 131 | }; 132 | EmulatorJS_(Module); 133 | })() -------------------------------------------------------------------------------- /old/run/gb-test.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nenge123/emulatorjs/bfca5cbbd7f8009ef61d71746e410f5a3641c8e8/old/run/gb-test.zip -------------------------------------------------------------------------------- /old/run/gb.js: -------------------------------------------------------------------------------- 1 | var T= Nenge,I=T.I,F=T.F; 2 | var Module = {}; 3 | (async function(){ 4 | 5 | let files = await T.FetchItem({ 6 | url:'cores/gb-wasm.7z?'+T.time, 7 | unpack:!0 8 | }); 9 | let games = await T.FetchItem({ 10 | url:'run/gb-test.zip', 11 | unpack:!0 12 | }); 13 | /* 14 | let bios = await T.FetchItem({ 15 | url:'bios/gba.zip', 16 | unpack:!0 17 | }); 18 | */ 19 | console.log(files,games,game); 20 | 21 | files['retroarch.js'] = I.decode(files['retroarch.js']).replace(/function\s*_gettimeofday\(ptr\)\s*\{\n?\s*?var\s*now\s*=\s*/,'function _gettimeofday(ptr) {var now = 1690674045574;').replace(/function\s*callMain\(args\)\s*{/,'function callMain(args) {if(typeof args==="string"){args = ["-v",args,"c37f5e84f377fb892c851b364c55251132d57c66d2f3ea56d2af90bef14773f0"];}console.log(args);'); 22 | await T.addJS(files['retroarch.js']); 23 | //await T.addJS('./gb.js?'+T.time); 24 | Module = { 25 | wasmBinary : files['retroarch.wasm'], 26 | canvas:T.$('canvas'), 27 | hash:'2b35cacf70aef5cbb3f38c0bb20e488cc8ad0c350400499a0', 28 | onRuntimeInitialized(){ 29 | let args = 'test.gbc'; 30 | this.writeFile(args,games['test.gb']); 31 | if(this.specialHTMLTargets){ 32 | I[1].assign(this.specialHTMLTargets,{ 33 | '#canvas':this.canvas, 34 | '#canvas-input':T.$('#ejs-input'), 35 | '#canvas-mouse':T.$('#game') 36 | }); 37 | } 38 | /* 39 | if(this._get_content_crc){ 40 | T.$('iframe').src = 'https://www.emulatorjs.com/embed/load.html'; 41 | T.once(window,'message',e=>{ 42 | console.log(e.data); 43 | if(e.data.key)args[2] = e.data.key; 44 | }); 45 | } 46 | */ 47 | this.mkdir('/etc'); 48 | this.mkdir('/home'); 49 | this.mkdir('/shader'); 50 | this.mkdir('/saves'); 51 | this.mkdir('/home/web_user/.config'); 52 | this.mkdir('/home/web_user/retroarch/userdata'); 53 | //this.mkdir('/home/web_user/retroarch/userdata/config/remaps/mGBA'); 54 | this.writeFile('/etc/Gambatte/Gambatte.cfg','gambatte_gb_bootloader = "enabled"\ngambatte_gb_colorization = GBA\ngambatte_gb_hwmode = GBA') 55 | this.writeFile('/etc/retroarch.cfg', 'savefile_directory = "/saves"' + 56 | '\nsystem_directory = "/"\n' + 57 | '\nsavestate_directory = "/saves"' + 58 | '\nvideo_vsync = true' + 59 | '\nscreenshot_directory = "/"' + 60 | '\nvideo_shader = "/shader/shader.glslp"' + 61 | '\nvideo_shader_enable = true' + 62 | '\nvideo_font_enable = false' + 63 | '\nvideo_scale = 1.0' + 64 | '\nvideo_gpu_screenshot = false' + 65 | '\ncamera_allow = "false"' + 66 | '\ncamera_driver = "null"' + 67 | '\ncamera_device = "null"'+ 68 | '\n'); 69 | T.once(T.$('canvas'),'click',async e=>{ 70 | //let headers = (await T.FetchItem({url:'https://www.emulatorjs.com/api/v?name=gb',type:'head'})); 71 | //a75d7994cbfc3bfd7f61c328e42a064d7d4c43e0f2069d6c85ff2c6517f6403f 72 | //console.log(headers); 73 | //if(headers.key)args[2] = headers.key; 74 | await T.loadLibjs('spark-md5.min.zip'); 75 | if(Module._get_content_crc){ 76 | let k = SparkMD5.hash((T.time/100000).toFixed(0)); 77 | args[2] = SparkMD5.hash(k)+'32d57c66d2f3ea56d2af90bef14773f0'; 78 | //args[2] = '961a64459508e2435a5ef45e1fc816d232d57c66d2f3ea56d2af90bef14773f0'; 79 | } 80 | Module.callMain(args); 81 | console.log('click',args,Module.getCore()); 82 | 83 | }) 84 | console.log('ok'); 85 | }, 86 | 'TOTAL_MEMORY': 0x10000000, 87 | 'noInitialRun': !0x0, 88 | 'arguments': [], 89 | 'preRun': [], 90 | 'postRun': [], 91 | 'totalDependencies': 0x0, 92 | print(e){ 93 | console.log(e); 94 | }, 95 | printErr(e){ 96 | console.log(e); 97 | }, 98 | inputValue(...a){ 99 | return this['cwrap']('simulate_input', 'null', ['number', 'number', 'number'])(...a); 100 | }, 101 | setVariable(...a){ 102 | return this['cwrap']('set_variable', 'null', ['string', 'string'])(...a); 103 | }, 104 | getCore(){ 105 | let data = this['cwrap']('get_core_options', 'string', [])(); 106 | if(data){ 107 | let list = data.split('\n'); 108 | return Object.fromEntries( 109 | list.map(v=>{ 110 | let s = v.split(';'); 111 | return [s[0],s[1]&&s[1].trim().split('|').map(v=>v.trim())]; 112 | })); 113 | } 114 | }, 115 | readFile(name){ 116 | return I.decode(this.FS.readFile(name)) 117 | }, 118 | mkdir(path){ 119 | let FS = this.FS; 120 | if(!FS.analyzePath(path).exists){ 121 | let p = path.split('/'); 122 | let name = p.pop(); 123 | let newpath = p.join('/'); 124 | this.mkdir(newpath); 125 | FS.createPath(newpath, name, !0x0, !0x0); 126 | } 127 | }, 128 | writeFile(path,data){ 129 | let newpath = path.split('/').slice(0,-1).join('/'); 130 | newpath&&this.mkdir(newpath); 131 | this.FS.writeFile(path,data); 132 | 133 | 134 | }, 135 | }; 136 | EmulatorJS_(Module); 137 | })() -------------------------------------------------------------------------------- /old/run/gba.js: -------------------------------------------------------------------------------- 1 | var T= Nenge,I=T.I,F=T.F; 2 | var Module = {}; 3 | (async function(){ 4 | 5 | let files = await T.FetchItem({ 6 | url:'cores/gba-wasm.7z', 7 | unpack:!0 8 | }); 9 | let games = await T.FetchItem({ 10 | url:'run/gb-test.zip', 11 | unpack:!0 12 | }); 13 | let bios = await T.FetchItem({ 14 | url:'bios/gba.zip', 15 | unpack:!0 16 | }); 17 | console.log(files,games);files['retroarch.js'] = I.decode(files['retroarch.js']).replace(/function\s*_gettimeofday\(ptr\)\s*\{\n?\s*?var\s*now\s*=\s*/,'function _gettimeofday(ptr) {var now = 1690674045574;').replace(/function\s*callMain\(args\)\s*{/,'function callMain(args) {if(typeof args==="string"){args = ["-v",args,"c37f5e84f377fb892c851b364c55251132d57c66d2f3ea56d2af90bef14773f0"];}console.log(args);'); 18 | await T.addJS(files['retroarch.js']); 19 | //await T.addJS('./emu_gba.js?'+T.time); 20 | Module = { 21 | wasmBinary : files['retroarch.wasm'], 22 | canvas:T.$('canvas'), 23 | hash:'2b35cacf70aef5cbb3f38c0bb20e488cc8ad0c350400499a0', 24 | 'TOTAL_MEMORY': 0x10000000, 25 | 'noInitialRun': !0x0, 26 | 'arguments': [], 27 | 'preRun': [], 28 | 'postRun': [], 29 | 'totalDependencies': 0x0, 30 | onRuntimeInitialized(){ 31 | let args = 'test.gb'; 32 | if(Module.specialHTMLTargets){ 33 | I[1].assign(Module.specialHTMLTargets,{ 34 | '#canvas':Module.canvas, 35 | '#canvas-input':T.$('#ejs-input'), 36 | '#canvas-mouse':T.$('#game') 37 | }); 38 | } 39 | let FS = Module.FS; 40 | this.mkdir('/home/web_user/.config'); 41 | this.mkdir('/home/web_user/retroarch/userdata/config/remaps/mGBA'); 42 | this.mkdir('/etc/mGBA'); 43 | this.mkdir('/shader'); 44 | this.mkdir('/saves'); 45 | FS.writeFile(args,games['test.gb']); 46 | I.toArr(bios,v=>Module.writeFile(v[0],v[1])); 47 | this.writeFile('/etc/retroarch-core-options.cfg', 'mgba_gb_model = "Game Boy Advance";\nmgba_use_bios = "ON";\nmgba_skip_bios = "OFF"\nmgba_gb_colors = "Grayscale"\nmgba_gb_colors_preset = "3"\nmgba_sgb_borders = "OFF"\nmgba_color_correction = "OFF"\nmgba_interframe_blending = "OFF"\nmgba_audio_low_pass_filter = "enabled"\nmgba_audio_low_pass_range = "60"\nmgba_allow_opposing_directions = "no"\nmgba_solar_sensor_level = "0"\nmgba_force_gbp = "OFF"\nmgba_idle_optimization = ""\nmgba_frameskip = "disabled"\nmgba_frameskip_threshold = ""\nmgba_frameskip_interval = "0"\n'); 48 | this.writeFile('/etc/retroarch.cfg', 'savefile_directory = "/saves"' + 49 | '\nsystem_directory = "/"\n' + 50 | '\nsavestate_directory = "/saves"' + 51 | '\nvideo_vsync = true' + 52 | '\nscreenshot_directory = "/"' + 53 | '\nvideo_shader = "/shader/shader.glslp"' + 54 | '\nvideo_shader_enable = true' + 55 | '\nvideo_font_enable = false' + 56 | '\nvideo_scale = 1.0' + 57 | '\nvideo_gpu_screenshot = false' + 58 | '\ncamera_allow = "false"' + 59 | '\ncamera_driver = "null"' + 60 | '\ncamera_device = "null"'+ 61 | '\nvideo_smooth = false'+ 62 | '\n'); 63 | //savefile_directory = /data/saves/gba\nsystem_directory = /\nvideo_vsync = true\nscreenshot_directory = /\nvideo_shader = /shader/shader.glslp\nvideo_shader_enable = true\nvideo_font_enable = false\nvideo_scale = 1.0\nvideo_gpu_screenshot = false\nvideo_smooth = false\n 64 | T.once(T.$('canvas'),'click',async e=>{ 65 | Module.callMain(args); 66 | console.log('click',args,Module.getCore()); 67 | 68 | }) 69 | console.log('ok'); 70 | }, 71 | print(e){ 72 | console.log(e); 73 | }, 74 | printErr(e){ 75 | console.log(e); 76 | }, 77 | inputValue(...a){ 78 | return this['cwrap']('simulate_input', 'null', ['number', 'number', 'number'])(...a); 79 | }, 80 | setVariable(...a){ 81 | return this['cwrap']('set_variable', 'null', ['string', 'string']).apply(this,a); 82 | }, 83 | getCore(){ 84 | let data = this['cwrap']('get_core_options', 'string', [])(); 85 | if(data){ 86 | let list = data.split('\n'); 87 | return Object.fromEntries( 88 | list.map(v=>{ 89 | let s = v.split(';'); 90 | return [s[0],s[1]&&s[1].trim().split('|').map(v=>v.trim())]; 91 | })); 92 | } 93 | }, 94 | readFile(name){ 95 | return I.decode(this.FS.readFile(name)) 96 | }, 97 | mkdir(path){ 98 | let FS = this.FS; 99 | if(!FS.analyzePath(path).exists){ 100 | let p = path.split('/'); 101 | let name = p.pop(); 102 | let newpath = p.join('/'); 103 | this.mkdir(newpath); 104 | FS.createPath(newpath, name, !0x0, !0x0); 105 | } 106 | }, 107 | writeFile(path,data){ 108 | let newpath = path.split('/').slice(0,-1).join('/'); 109 | newpath&&this.mkdir(newpath); 110 | this.FS.writeFile(path,data); 111 | 112 | 113 | }, 114 | }; 115 | EmulatorJS_(Module); 116 | })() -------------------------------------------------------------------------------- /old/run/other.js: -------------------------------------------------------------------------------- 1 | (function (){})() -------------------------------------------------------------------------------- /old/run/psx.js: -------------------------------------------------------------------------------- 1 | var T= Nenge,I=T.I,F=T.F; 2 | var Module = {}; 3 | (async function(){ 4 | 5 | let files = await T.FetchItem({ 6 | url:'cores/psx-wasm.7z?'+T.time, 7 | unpack:!0 8 | }); 9 | let games = await T.FetchItem({ 10 | url:'/xiunoII/game/Dragon Quest Monsters 1 & 2.img', 11 | }); 12 | /* 13 | let bios = await T.FetchItem({ 14 | url:'bios/gba.zip', 15 | unpack:!0 16 | }); 17 | */ 18 | console.log(files,games,game); 19 | files['retroarch.js'] = I.decode(files['retroarch.js']).replace(/function\s*_gettimeofday\(ptr\)\s*\{\n?\s*?var\s*now\s*=\s*/,'function _gettimeofday(ptr) {var now = 1690674045574;').replace(/function\s*callMain\(args\)\s*{/,'function callMain(args) {if(typeof args==="string"){args = ["-v",args,"c37f5e84f377fb892c851b364c55251132d57c66d2f3ea56d2af90bef14773f0"];}console.log(args);'); 20 | await T.addJS(files['retroarch.js']); 21 | //await T.addJS('./gb.js?'+T.time); 22 | Module = { 23 | wasmBinary : files['retroarch.wasm'], 24 | canvas:T.$('canvas'), 25 | hash:'2b35cacf70aef5cbb3f38c0bb20e488cc8ad0c350400499a0', 26 | onRuntimeInitialized(){ 27 | let args = 'test.img'; 28 | this.writeFile(args,games); 29 | if(this.specialHTMLTargets){ 30 | I[1].assign(this.specialHTMLTargets,{ 31 | '#canvas':this.canvas, 32 | '#canvas-input':T.$('#ejs-input'), 33 | '#canvas-mouse':T.$('#game') 34 | }); 35 | } 36 | /* 37 | if(this._get_content_crc){ 38 | T.$('iframe').src = 'https://www.emulatorjs.com/embed/load.html'; 39 | T.once(window,'message',e=>{ 40 | console.log(e.data); 41 | if(e.data.key)args[2] = e.data.key; 42 | }); 43 | } 44 | */ 45 | this.mkdir('/etc'); 46 | this.mkdir('/home'); 47 | this.mkdir('/shader'); 48 | this.mkdir('/saves'); 49 | this.mkdir('/home/web_user/.config'); 50 | this.mkdir('/home/web_user/retroarch/userdata'); 51 | //this.mkdir('/home/web_user/retroarch/userdata/config/remaps/mGBA'); 52 | this.writeFile('/etc/Gambatte/Gambatte.cfg','gambatte_gb_bootloader = "enabled"\ngambatte_gb_colorization = GBA\ngambatte_gb_hwmode = GBA') 53 | this.writeFile('/etc/retroarch.cfg', 'savefile_directory = "/saves"' + 54 | '\nsystem_directory = "/"\n' + 55 | '\nsavestate_directory = "/saves"' + 56 | '\nvideo_vsync = true' + 57 | '\nscreenshot_directory = "/"' + 58 | '\nvideo_shader = "/shader/shader.glslp"' + 59 | '\nvideo_shader_enable = true' + 60 | '\nvideo_font_enable = false' + 61 | '\nvideo_scale = 1.0' + 62 | '\nvideo_gpu_screenshot = false' + 63 | '\ncamera_allow = "false"' + 64 | '\ncamera_driver = "null"' + 65 | '\ncamera_device = "null"'+ 66 | '\n'); 67 | T.once(T.$('canvas'),'click',async e=>{ 68 | //let headers = (await T.FetchItem({url:'https://www.emulatorjs.com/api/v?name=gb',type:'head'})); 69 | //a75d7994cbfc3bfd7f61c328e42a064d7d4c43e0f2069d6c85ff2c6517f6403f 70 | //console.log(headers); 71 | //if(headers.key)args[2] = headers.key; 72 | if(Module._get_content_crc){ 73 | args[2] = 'c8b683b2e3b8417696ca6026b160c7a332d57c66d2f3ea56d2af90bef14773f0'; 74 | //f9b93b6662691698b27adbe3b3b6443cf9c6ad468509a5ad8c7b12fd16e65984 75 | } 76 | Module.callMain(args); 77 | console.log('click',args,Module.getCore()); 78 | 79 | }) 80 | console.log('ok'); 81 | }, 82 | 'TOTAL_MEMORY': 0x10000000, 83 | 'noInitialRun': !0x0, 84 | 'arguments': [], 85 | 'preRun': [], 86 | 'postRun': [], 87 | 'totalDependencies': 0x0, 88 | print(e){ 89 | console.log(e); 90 | }, 91 | printErr(e){ 92 | console.log(e); 93 | }, 94 | inputValue(...a){ 95 | return this['cwrap']('simulate_input', 'null', ['number', 'number', 'number'])(...a); 96 | }, 97 | setVariable(...a){ 98 | return this['cwrap']('set_variable', 'null', ['string', 'string']).apply(this,a); 99 | }, 100 | getCore(){ 101 | let data = this['cwrap']('get_core_options', 'string', [])(); 102 | if(data){ 103 | let list = data.split('\n'); 104 | return Object.fromEntries( 105 | list.map(v=>{ 106 | let s = v.split(';'); 107 | return [s[0],s[1]&&s[1].trim().split('|').map(v=>v.trim())]; 108 | })); 109 | } 110 | }, 111 | readFile(name){ 112 | return I.decode(this.FS.readFile(name)) 113 | }, 114 | mkdir(path){ 115 | let FS = this.FS; 116 | if(!FS.analyzePath(path).exists){ 117 | let p = path.split('/'); 118 | let name = p.pop(); 119 | let newpath = p.join('/'); 120 | this.mkdir(newpath); 121 | FS.createPath(newpath, name, !0x0, !0x0); 122 | } 123 | }, 124 | writeFile(path,data){ 125 | let newpath = path.split('/').slice(0,-1).join('/'); 126 | newpath&&this.mkdir(newpath); 127 | this.FS.writeFile(path,data); 128 | 129 | 130 | }, 131 | }; 132 | EmulatorJS_(Module); 133 | })() -------------------------------------------------------------------------------- /old/test_5_8_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Test 9 | 10 | 11 |
12 |
13 |
14 | 15 | 16 | 17 | 18 | 19 | 30 | 31 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | 2 | - [x] no longer fetch new version form emulatorjs.com,I love steamdeck 3 | 4 | - how to work 5 | ```html 6 |
7 |
8 |
9 | 10 | 21 | ``` 22 | - hash key fix 23 | - retroarch.js 24 | ```javascript 25 | function _gettimeofday(ptr) { 26 | var now = Date.now(); 27 | HEAP32[ptr >> 2] = now / 1e3 | 0; 28 | HEAP32[ptr + 4 >> 2] = now % 1e3 * 1e3 | 0; 29 | return 0 30 | } 31 | //make the now = 1690674045574 32 | //c37f5e84f377fb892c851b364c55251132d57c66d2f3ea56d2af90bef14773f0 33 | //demo fix 34 | files['retroarch.js'] = I.decode( 35 | files['retroarch.js'] 36 | ).replace( 37 | /function\s*_gettimeofday\(ptr\)\s*\{\n?\s*?var\s*now\s*=\s*/, 38 | 'function _gettimeofday(ptr) {var now = 1690674045574;' 39 | ); 40 | /* ... */ 41 | Module.callMain(['test.gb','c37f5e84f377fb892c851b364c55251132d57c66d2f3ea56d2af90bef14773f0']); 42 | ``` -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- 1 | cores and bios folder in 2 | 3 | branches tag: 0.5.8 ! -------------------------------------------------------------------------------- /shaders/2xScaleHQ.glsl: -------------------------------------------------------------------------------- 1 | /* 2 | 2xGLSLHqFilter shader 3 | 4 | Copyright (C) 2005 guest(r) - guest.r@gmail.com 5 | 6 | This program is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU General Public License 8 | as published by the Free Software Foundation; either version 2 9 | of the License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program; if not, write to the Free Software 18 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 | */ 20 | 21 | #if defined(VERTEX) 22 | 23 | #if __VERSION__ >= 130 24 | #define COMPAT_VARYING out 25 | #define COMPAT_ATTRIBUTE in 26 | #define COMPAT_TEXTURE texture 27 | #else 28 | #define COMPAT_VARYING varying 29 | #define COMPAT_ATTRIBUTE attribute 30 | #define COMPAT_TEXTURE texture2D 31 | #endif 32 | 33 | #ifdef GL_ES 34 | #define COMPAT_PRECISION mediump 35 | #else 36 | #define COMPAT_PRECISION 37 | #endif 38 | 39 | COMPAT_ATTRIBUTE vec4 VertexCoord; 40 | COMPAT_ATTRIBUTE vec4 COLOR; 41 | COMPAT_ATTRIBUTE vec4 TexCoord; 42 | COMPAT_VARYING vec4 COL0; 43 | COMPAT_VARYING vec4 TEX0; 44 | COMPAT_VARYING vec4 t1; 45 | COMPAT_VARYING vec4 t2; 46 | COMPAT_VARYING vec4 t3; 47 | COMPAT_VARYING vec4 t4; 48 | 49 | vec4 _oPosition1; 50 | uniform mat4 MVPMatrix; 51 | uniform COMPAT_PRECISION int FrameDirection; 52 | uniform COMPAT_PRECISION int FrameCount; 53 | uniform COMPAT_PRECISION vec2 OutputSize; 54 | uniform COMPAT_PRECISION vec2 TextureSize; 55 | uniform COMPAT_PRECISION vec2 InputSize; 56 | 57 | // compatibility #defines 58 | #define vTexCoord TEX0.xy 59 | #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize 60 | #define OutSize vec4(OutputSize, 1.0 / OutputSize) 61 | 62 | void main() 63 | { 64 | gl_Position = MVPMatrix * VertexCoord; 65 | TEX0.xy = TexCoord.xy; 66 | float x = 0.5 * SourceSize.z; 67 | float y = 0.5 * SourceSize.w; 68 | vec2 dg1 = vec2( x, y); 69 | vec2 dg2 = vec2(-x, y); 70 | vec2 dx = vec2(x, 0.0); 71 | vec2 dy = vec2(0.0, y); 72 | t1 = vec4(vTexCoord - dg1, vTexCoord - dy); 73 | t2 = vec4(vTexCoord - dg2, vTexCoord + dx); 74 | t3 = vec4(vTexCoord + dg1, vTexCoord + dy); 75 | t4 = vec4(vTexCoord + dg2, vTexCoord - dx); 76 | } 77 | 78 | #elif defined(FRAGMENT) 79 | 80 | #if __VERSION__ >= 130 81 | #define COMPAT_VARYING in 82 | #define COMPAT_TEXTURE texture 83 | out vec4 FragColor; 84 | #else 85 | #define COMPAT_VARYING varying 86 | #define FragColor gl_FragColor 87 | #define COMPAT_TEXTURE texture2D 88 | #endif 89 | 90 | #ifdef GL_ES 91 | #ifdef GL_FRAGMENT_PRECISION_HIGH 92 | precision highp float; 93 | #else 94 | precision mediump float; 95 | #endif 96 | #define COMPAT_PRECISION mediump 97 | #else 98 | #define COMPAT_PRECISION 99 | #endif 100 | 101 | uniform COMPAT_PRECISION int FrameDirection; 102 | uniform COMPAT_PRECISION int FrameCount; 103 | uniform COMPAT_PRECISION vec2 OutputSize; 104 | uniform COMPAT_PRECISION vec2 TextureSize; 105 | uniform COMPAT_PRECISION vec2 InputSize; 106 | uniform sampler2D Texture; 107 | COMPAT_VARYING vec4 TEX0; 108 | COMPAT_VARYING vec4 t1; 109 | COMPAT_VARYING vec4 t2; 110 | COMPAT_VARYING vec4 t3; 111 | COMPAT_VARYING vec4 t4; 112 | 113 | // compatibility #defines 114 | #define Source Texture 115 | #define vTexCoord TEX0.xy 116 | 117 | #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize 118 | #define OutSize vec4(OutputSize, 1.0 / OutputSize) 119 | 120 | float mx = 0.325; // start smoothing wt. 121 | float k = -0.250; // wt. decrease factor 122 | float max_w = 0.25; // max filter weight 123 | float min_w =-0.05; // min filter weight 124 | float lum_add = 0.25; // affects smoothing 125 | vec3 dt = vec3(1.0); 126 | 127 | void main() 128 | { 129 | vec3 c00 = COMPAT_TEXTURE(Source, t1.xy).xyz; 130 | vec3 c10 = COMPAT_TEXTURE(Source, t1.zw).xyz; 131 | vec3 c20 = COMPAT_TEXTURE(Source, t2.xy).xyz; 132 | vec3 c01 = COMPAT_TEXTURE(Source, t4.zw).xyz; 133 | vec3 c11 = COMPAT_TEXTURE(Source, vTexCoord).xyz; 134 | vec3 c21 = COMPAT_TEXTURE(Source, t2.zw).xyz; 135 | vec3 c02 = COMPAT_TEXTURE(Source, t4.xy).xyz; 136 | vec3 c12 = COMPAT_TEXTURE(Source, t3.zw).xyz; 137 | vec3 c22 = COMPAT_TEXTURE(Source, t3.xy).xyz; 138 | 139 | float md1 = dot(abs(c00 - c22), dt); 140 | float md2 = dot(abs(c02 - c20), dt); 141 | 142 | float w1 = dot(abs(c22 - c11), dt) * md2; 143 | float w2 = dot(abs(c02 - c11), dt) * md1; 144 | float w3 = dot(abs(c00 - c11), dt) * md2; 145 | float w4 = dot(abs(c20 - c11), dt) * md1; 146 | 147 | float t1 = w1 + w3; 148 | float t2 = w2 + w4; 149 | float ww = max(t1, t2) + 0.0001; 150 | 151 | c11 = (w1 * c00 + w2 * c20 + w3 * c22 + w4 * c02 + ww * c11) / (t1 + t2 + ww); 152 | 153 | float lc1 = k / (0.12 * dot(c10 + c12 + c11, dt) + lum_add); 154 | float lc2 = k / (0.12 * dot(c01 + c21 + c11, dt) + lum_add); 155 | 156 | w1 = clamp(lc1 * dot(abs(c11 - c10), dt) + mx, min_w, max_w); 157 | w2 = clamp(lc2 * dot(abs(c11 - c21), dt) + mx, min_w, max_w); 158 | w3 = clamp(lc1 * dot(abs(c11 - c12), dt) + mx, min_w, max_w); 159 | w4 = clamp(lc2 * dot(abs(c11 - c01), dt) + mx, min_w, max_w); 160 | FragColor = vec4(w1 * c10 + w2 * c21 + w3 * c12 + w4 * c01 + (1.0 - w1 - w2 - w3 - w4) * c11, 1.0); 161 | } 162 | #endif 163 | -------------------------------------------------------------------------------- /shaders/2xScaleHQ.glslp: -------------------------------------------------------------------------------- 1 | shaders = 1 2 | 3 | shader0 = "2xScaleHQ.glsl" 4 | filter_linear0 = false 5 | scale_type_0 = source 6 | -------------------------------------------------------------------------------- /shaders/4xScaleHQ.glsl: -------------------------------------------------------------------------------- 1 | /* 2 | 4xGLSLHqFilter shader 3 | 4 | Copyright (C) 2005 guest(r) - guest.r@gmail.com 5 | 6 | This program is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU General Public License 8 | as published by the Free Software Foundation; either version 2 9 | of the License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program; if not, write to the Free Software 18 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 | */ 20 | 21 | #if defined(VERTEX) 22 | 23 | #if __VERSION__ >= 130 24 | #define COMPAT_VARYING out 25 | #define COMPAT_ATTRIBUTE in 26 | #define COMPAT_TEXTURE texture 27 | #else 28 | #define COMPAT_VARYING varying 29 | #define COMPAT_ATTRIBUTE attribute 30 | #define COMPAT_TEXTURE texture2D 31 | #endif 32 | 33 | #ifdef GL_ES 34 | #define COMPAT_PRECISION mediump 35 | #else 36 | #define COMPAT_PRECISION 37 | #endif 38 | 39 | COMPAT_ATTRIBUTE vec4 VertexCoord; 40 | COMPAT_ATTRIBUTE vec4 COLOR; 41 | COMPAT_ATTRIBUTE vec4 TexCoord; 42 | COMPAT_VARYING vec4 COL0; 43 | COMPAT_VARYING vec4 TEX0; 44 | COMPAT_VARYING vec4 t1; 45 | COMPAT_VARYING vec4 t2; 46 | COMPAT_VARYING vec4 t3; 47 | COMPAT_VARYING vec4 t4; 48 | COMPAT_VARYING vec4 t5; 49 | COMPAT_VARYING vec4 t6; 50 | 51 | vec4 _oPosition1; 52 | uniform mat4 MVPMatrix; 53 | uniform COMPAT_PRECISION int FrameDirection; 54 | uniform COMPAT_PRECISION int FrameCount; 55 | uniform COMPAT_PRECISION vec2 OutputSize; 56 | uniform COMPAT_PRECISION vec2 TextureSize; 57 | uniform COMPAT_PRECISION vec2 InputSize; 58 | 59 | // compatibility #defines 60 | #define vTexCoord TEX0.xy 61 | #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize 62 | #define OutSize vec4(OutputSize, 1.0 / OutputSize) 63 | 64 | void main() 65 | { 66 | gl_Position = MVPMatrix * VertexCoord; 67 | TEX0.xy = TexCoord.xy; 68 | float x = 0.5 * SourceSize.z; 69 | float y = 0.5 * SourceSize.w; 70 | vec2 dg1 = vec2( x, y); 71 | vec2 dg2 = vec2(-x, y); 72 | vec2 sd1 = dg1 * 0.5; 73 | vec2 sd2 = dg2 * 0.5; 74 | vec2 ddx = vec2(x, 0.0); 75 | vec2 ddy = vec2(0.0, y); 76 | t1 = vec4(vTexCoord - sd1, vTexCoord - ddy); 77 | t2 = vec4(vTexCoord - sd2, vTexCoord + ddx); 78 | t3 = vec4(vTexCoord + sd1, vTexCoord + ddy); 79 | t4 = vec4(vTexCoord + sd2, vTexCoord - ddx); 80 | t5 = vec4(vTexCoord - dg1, vTexCoord - dg2); 81 | t6 = vec4(vTexCoord + dg1, vTexCoord + dg2); 82 | } 83 | 84 | #elif defined(FRAGMENT) 85 | 86 | #if __VERSION__ >= 130 87 | #define COMPAT_VARYING in 88 | #define COMPAT_TEXTURE texture 89 | out vec4 FragColor; 90 | #else 91 | #define COMPAT_VARYING varying 92 | #define FragColor gl_FragColor 93 | #define COMPAT_TEXTURE texture2D 94 | #endif 95 | 96 | #ifdef GL_ES 97 | #ifdef GL_FRAGMENT_PRECISION_HIGH 98 | precision highp float; 99 | #else 100 | precision mediump float; 101 | #endif 102 | #define COMPAT_PRECISION mediump 103 | #else 104 | #define COMPAT_PRECISION 105 | #endif 106 | 107 | uniform COMPAT_PRECISION int FrameDirection; 108 | uniform COMPAT_PRECISION int FrameCount; 109 | uniform COMPAT_PRECISION vec2 OutputSize; 110 | uniform COMPAT_PRECISION vec2 TextureSize; 111 | uniform COMPAT_PRECISION vec2 InputSize; 112 | uniform sampler2D Texture; 113 | COMPAT_VARYING vec4 TEX0; 114 | COMPAT_VARYING vec4 t1; 115 | COMPAT_VARYING vec4 t2; 116 | COMPAT_VARYING vec4 t3; 117 | COMPAT_VARYING vec4 t4; 118 | COMPAT_VARYING vec4 t5; 119 | COMPAT_VARYING vec4 t6; 120 | 121 | // compatibility #defines 122 | #define Source Texture 123 | #define vTexCoord TEX0.xy 124 | 125 | #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize 126 | #define OutSize vec4(OutputSize, 1.0 / OutputSize) 127 | 128 | float mx = 1.0; // start smoothing wt. 129 | float k = -1.10; // wt. decrease factor 130 | float max_w = 0.75; // max filter weight 131 | float min_w = 0.03; // min filter weight 132 | float lum_add = 0.33; // affects smoothing 133 | vec3 dt = vec3(1.0); 134 | 135 | void main() 136 | { 137 | vec3 c = COMPAT_TEXTURE(Source, vTexCoord).xyz; 138 | vec3 i1 = COMPAT_TEXTURE(Source, t1.xy).xyz; 139 | vec3 i2 = COMPAT_TEXTURE(Source, t2.xy).xyz; 140 | vec3 i3 = COMPAT_TEXTURE(Source, t3.xy).xyz; 141 | vec3 i4 = COMPAT_TEXTURE(Source, t4.xy).xyz; 142 | vec3 o1 = COMPAT_TEXTURE(Source, t5.xy).xyz; 143 | vec3 o3 = COMPAT_TEXTURE(Source, t6.xy).xyz; 144 | vec3 o2 = COMPAT_TEXTURE(Source, t5.zw).xyz; 145 | vec3 o4 = COMPAT_TEXTURE(Source, t6.zw).xyz; 146 | vec3 s1 = COMPAT_TEXTURE(Source, t1.zw).xyz; 147 | vec3 s2 = COMPAT_TEXTURE(Source, t2.zw).xyz; 148 | vec3 s3 = COMPAT_TEXTURE(Source, t3.zw).xyz; 149 | vec3 s4 = COMPAT_TEXTURE(Source, t4.zw).xyz; 150 | 151 | float ko1=dot(abs(o1-c),dt); 152 | float ko2=dot(abs(o2-c),dt); 153 | float ko3=dot(abs(o3-c),dt); 154 | float ko4=dot(abs(o4-c),dt); 155 | 156 | float k1=min(dot(abs(i1-i3),dt),max(ko1,ko3)); 157 | float k2=min(dot(abs(i2-i4),dt),max(ko2,ko4)); 158 | 159 | float w1 = k2; if(ko3= 130 28 | #define OUT out 29 | #define IN in 30 | #define tex2D texture 31 | #else 32 | #define OUT varying 33 | #define IN attribute 34 | #define tex2D texture2D 35 | #endif 36 | 37 | #ifdef GL_ES 38 | #define PRECISION mediump 39 | #else 40 | #define PRECISION 41 | #endif 42 | 43 | IN vec4 VertexCoord; 44 | IN vec4 Color; 45 | IN vec2 TexCoord; 46 | OUT vec4 color; 47 | OUT vec2 Coord; 48 | 49 | uniform mat4 MVPMatrix; 50 | uniform PRECISION int FrameDirection; 51 | uniform PRECISION int FrameCount; 52 | uniform PRECISION vec2 OutputSize; 53 | uniform PRECISION vec2 TextureSize; 54 | uniform PRECISION vec2 InputSize; 55 | 56 | void main() 57 | { 58 | gl_Position = MVPMatrix * VertexCoord; 59 | color = Color; 60 | Coord = TexCoord; 61 | } 62 | 63 | #elif defined(FRAGMENT) 64 | 65 | #if __VERSION__ >= 130 66 | #define IN in 67 | #define tex2D texture 68 | out vec4 FragColor; 69 | #else 70 | #define IN varying 71 | #define FragColor gl_FragColor 72 | #define tex2D texture2D 73 | #endif 74 | 75 | #ifdef GL_ES 76 | #ifdef GL_FRAGMENT_PRECISION_HIGH 77 | precision highp float; 78 | #else 79 | precision mediump float; 80 | #endif 81 | #define PRECISION mediump 82 | #else 83 | #define PRECISION 84 | #endif 85 | 86 | uniform PRECISION int FrameDirection; 87 | uniform PRECISION int FrameCount; 88 | uniform PRECISION vec2 OutputSize; 89 | uniform PRECISION vec2 TextureSize; 90 | uniform PRECISION vec2 InputSize; 91 | uniform sampler2D Texture; 92 | IN vec2 Coord; 93 | 94 | #ifdef PARAMETER_UNIFORM 95 | uniform PRECISION float SHARPNESS_IMAGE; 96 | uniform PRECISION float SHARPNESS_EDGES; 97 | uniform PRECISION float GLOW_WIDTH; 98 | uniform PRECISION float GLOW_HEIGHT; 99 | uniform PRECISION float GLOW_HALATION; 100 | uniform PRECISION float GLOW_DIFFUSION; 101 | uniform PRECISION float MASK_COLORS; 102 | uniform PRECISION float MASK_STRENGTH; 103 | uniform PRECISION float MASK_SIZE; 104 | uniform PRECISION float SCANLINE_SIZE_MIN; 105 | uniform PRECISION float SCANLINE_SIZE_MAX; 106 | uniform PRECISION float GAMMA_INPUT; 107 | uniform PRECISION float GAMMA_OUTPUT; 108 | uniform PRECISION float BRIGHTNESS; 109 | #else 110 | #define SHARPNESS_IMAGE 1.0 111 | #define SHARPNESS_EDGES 3.0 112 | #define GLOW_WIDTH 0.5 113 | #define GLOW_HEIGHT 0.5 114 | #define GLOW_HALATION 0.1 115 | #define GLOW_DIFFUSION 0.05 116 | #define MASK_COLORS 2.0 117 | #define MASK_STRENGTH 0.3 118 | #define MASK_SIZE 1.0 119 | #define SCANLINE_SIZE_MIN 0.5 120 | #define SCANLINE_SIZE_MAX 1.5 121 | #define GAMMA_INPUT 2.4 122 | #define GAMMA_OUTPUT 2.4 123 | #define BRIGHTNESS 1.5 124 | #endif 125 | 126 | #define FIX(c) max(abs(c), 1e-5) 127 | #define PI 3.141592653589 128 | #define saturate(c) clamp(c, 0.0, 1.0) 129 | #define TEX2D(c) pow(tex2D(tex, c).rgb, vec3(GAMMA_INPUT)) 130 | 131 | mat3 get_color_matrix(sampler2D tex, vec2 co, vec2 dx) 132 | { 133 | return mat3(TEX2D(co - dx), TEX2D(co), TEX2D(co + dx)); 134 | } 135 | 136 | vec3 blur(mat3 m, float dist, float rad) 137 | { 138 | vec3 x = vec3(dist - 1.0, dist, dist + 1.0) / rad; 139 | vec3 w = exp2(x * x * -1.0); 140 | 141 | return (m[0] * w.x + m[1] * w.y + m[2] * w.z) / (w.x + w.y + w.z); 142 | } 143 | 144 | vec3 filter_gaussian(sampler2D tex, vec2 co, vec2 tex_size) 145 | { 146 | vec2 dx = vec2(1.0 / tex_size.x, 0.0); 147 | vec2 dy = vec2(0.0, 1.0 / tex_size.y); 148 | vec2 pix_co = co * tex_size; 149 | vec2 tex_co = (floor(pix_co) + 0.5) / tex_size; 150 | vec2 dist = (fract(pix_co) - 0.5) * -1.0; 151 | 152 | mat3 line0 = get_color_matrix(tex, tex_co - dy, dx); 153 | mat3 line1 = get_color_matrix(tex, tex_co, dx); 154 | mat3 line2 = get_color_matrix(tex, tex_co + dy, dx); 155 | mat3 column = mat3(blur(line0, dist.x, GLOW_WIDTH), 156 | blur(line1, dist.x, GLOW_WIDTH), 157 | blur(line2, dist.x, GLOW_WIDTH)); 158 | 159 | return blur(column, dist.y, GLOW_HEIGHT); 160 | } 161 | 162 | vec3 filter_lanczos(sampler2D tex, vec2 co, vec2 tex_size, float sharp) 163 | { 164 | tex_size.x *= sharp; 165 | 166 | vec2 dx = vec2(1.0 / tex_size.x, 0.0); 167 | vec2 pix_co = co * tex_size - vec2(0.5, 0.0); 168 | vec2 tex_co = (floor(pix_co) + vec2(0.5, 0.0)) / tex_size; 169 | vec2 dist = fract(pix_co); 170 | vec4 coef = PI * vec4(dist.x + 1.0, dist.x, dist.x - 1.0, dist.x - 2.0); 171 | 172 | coef = FIX(coef); 173 | coef = 2.0 * sin(coef) * sin(coef / 2.0) / (coef * coef); 174 | coef /= dot(coef, vec4(1.0)); 175 | 176 | vec4 col1 = vec4(TEX2D(tex_co), 1.0); 177 | vec4 col2 = vec4(TEX2D(tex_co + dx), 1.0); 178 | 179 | return (mat4(col1, col1, col2, col2) * coef).rgb; 180 | } 181 | 182 | vec3 get_scanline_weight(float x, vec3 col) 183 | { 184 | vec3 beam = mix(vec3(SCANLINE_SIZE_MIN), vec3(SCANLINE_SIZE_MAX), col); 185 | vec3 x_mul = 2.0 / beam; 186 | vec3 x_offset = x_mul * 0.5; 187 | 188 | return smoothstep(0.0, 1.0, 1.0 - abs(x * x_mul - x_offset)) * x_offset; 189 | } 190 | 191 | vec3 get_mask_weight(float x) 192 | { 193 | float i = mod(floor(x * OutputSize.x * TextureSize.x / (InputSize.x * MASK_SIZE)), MASK_COLORS); 194 | 195 | if (i == 0.0) return mix(vec3(1.0, 0.0, 1.0), vec3(1.0, 0.0, 0.0), MASK_COLORS - 2.0); 196 | else if (i == 1.0) return vec3(0.0, 1.0, 0.0); 197 | else return vec3(0.0, 0.0, 1.0); 198 | } 199 | 200 | void main() 201 | { 202 | vec3 col_glow = filter_gaussian(Texture, Coord, TextureSize); 203 | vec3 col_soft = filter_lanczos(Texture, Coord, TextureSize, SHARPNESS_IMAGE); 204 | vec3 col_sharp = filter_lanczos(Texture, Coord, TextureSize, SHARPNESS_EDGES); 205 | vec3 col = sqrt(col_sharp * col_soft); 206 | 207 | col *= get_scanline_weight(fract(Coord.y * TextureSize.y), col_soft); 208 | col_glow = saturate(col_glow - col); 209 | col += col_glow * col_glow * GLOW_HALATION; 210 | col = mix(col, col * get_mask_weight(Coord.x) * MASK_COLORS, MASK_STRENGTH); 211 | col += col_glow * GLOW_DIFFUSION; 212 | col = pow(col * BRIGHTNESS, vec3(1.0 / GAMMA_OUTPUT)); 213 | 214 | FragColor = vec4(col, 1.0); 215 | } 216 | 217 | #endif 218 | -------------------------------------------------------------------------------- /shaders/crt-aperture.glslp: -------------------------------------------------------------------------------- 1 | shaders = 1 2 | 3 | shader0 = crt-aperture.glsl 4 | filter_linear0 = false 5 | -------------------------------------------------------------------------------- /shaders/crt-easymode.glsl: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) 2 | 3 | #if __VERSION__ >= 130 4 | #define COMPAT_VARYING out 5 | #define COMPAT_ATTRIBUTE in 6 | #define COMPAT_TEXTURE texture 7 | #else 8 | #define COMPAT_VARYING varying 9 | #define COMPAT_ATTRIBUTE attribute 10 | #define COMPAT_TEXTURE texture2D 11 | #endif 12 | 13 | #ifdef GL_ES 14 | #define COMPAT_PRECISION mediump 15 | #else 16 | #define COMPAT_PRECISION 17 | #endif 18 | COMPAT_VARYING float _frame_rotation; 19 | struct input_dummy { 20 | vec2 _video_size; 21 | vec2 _texture_size; 22 | vec2 _output_dummy_size; 23 | float _frame_count; 24 | float _frame_direction; 25 | float _frame_rotation; 26 | }; 27 | vec4 _oPosition1; 28 | vec4 _r0005; 29 | COMPAT_ATTRIBUTE vec4 VertexCoord; 30 | COMPAT_ATTRIBUTE vec4 TexCoord; 31 | COMPAT_VARYING vec4 TEX0; 32 | 33 | uniform mat4 MVPMatrix; 34 | uniform int FrameDirection; 35 | uniform int FrameCount; 36 | uniform COMPAT_PRECISION vec2 OutputSize; 37 | uniform COMPAT_PRECISION vec2 TextureSize; 38 | uniform COMPAT_PRECISION vec2 InputSize; 39 | void main() 40 | { 41 | vec2 _oTex; 42 | _r0005 = VertexCoord.x*MVPMatrix[0]; 43 | _r0005 = _r0005 + VertexCoord.y*MVPMatrix[1]; 44 | _r0005 = _r0005 + VertexCoord.z*MVPMatrix[2]; 45 | _r0005 = _r0005 + VertexCoord.w*MVPMatrix[3]; 46 | _oPosition1 = _r0005; 47 | _oTex = TexCoord.xy; 48 | gl_Position = _r0005; 49 | TEX0.xy = TexCoord.xy; 50 | } 51 | #elif defined(FRAGMENT) 52 | 53 | #if __VERSION__ >= 130 54 | #define COMPAT_VARYING in 55 | #define COMPAT_TEXTURE texture 56 | out vec4 FragColor; 57 | #else 58 | #define COMPAT_VARYING varying 59 | #define FragColor gl_FragColor 60 | #define COMPAT_TEXTURE texture2D 61 | #endif 62 | 63 | #ifdef GL_ES 64 | #ifdef GL_FRAGMENT_PRECISION_HIGH 65 | precision highp float; 66 | #else 67 | precision mediump float; 68 | #endif 69 | #define COMPAT_PRECISION mediump 70 | #else 71 | #define COMPAT_PRECISION 72 | #endif 73 | COMPAT_VARYING float _frame_rotation; 74 | struct input_dummy { 75 | vec2 _video_size; 76 | vec2 _texture_size; 77 | vec2 _output_dummy_size; 78 | float _frame_count; 79 | float _frame_direction; 80 | float _frame_rotation; 81 | }; 82 | vec4 _ret_0; 83 | float _TMP30; 84 | float _TMP29; 85 | float _TMP28; 86 | float _TMP13; 87 | float _TMP32; 88 | float _TMP11; 89 | float _TMP10; 90 | float _TMP31; 91 | float _TMP9; 92 | float _TMP8; 93 | float _TMP15; 94 | float _TMP14; 95 | float _TMP33; 96 | vec4 _TMP34; 97 | vec4 _TMP27; 98 | vec4 _TMP25; 99 | vec4 _TMP23; 100 | vec4 _TMP21; 101 | vec4 _TMP26; 102 | vec4 _TMP24; 103 | vec4 _TMP22; 104 | vec4 _TMP20; 105 | float _TMP4; 106 | vec4 _TMP3; 107 | vec4 _TMP2; 108 | float _TMP19; 109 | float _TMP18; 110 | float _TMP17; 111 | float _TMP16; 112 | vec4 _TMP1; 113 | vec2 _TMP0; 114 | uniform sampler2D Texture; 115 | input_dummy _IN1; 116 | float _TMP43; 117 | float _x_step0044; 118 | float _curve0044; 119 | float _a0048; 120 | float _val0052; 121 | float _a0052; 122 | vec4 _TMP57; 123 | vec4 _x0072; 124 | vec2 _c0086; 125 | vec4 _x0088; 126 | vec4 _x0094; 127 | vec2 _c0098; 128 | vec4 _x0100; 129 | vec2 _c0104; 130 | vec4 _x0106; 131 | vec4 _sample_min0110; 132 | vec4 _sample_max0110; 133 | vec4 _r0112; 134 | vec4 _TMP117; 135 | vec2 _co0124; 136 | vec2 _c0126; 137 | vec4 _x0128; 138 | vec4 _x0134; 139 | vec2 _c0138; 140 | vec4 _x0140; 141 | vec2 _c0144; 142 | vec4 _x0146; 143 | vec4 _sample_min0150; 144 | vec4 _sample_max0150; 145 | vec4 _r0152; 146 | vec4 _TMP157; 147 | float _TMP163; 148 | float _x_step0164; 149 | float _curve0164; 150 | float _a0168; 151 | float _val0172; 152 | float _a0172; 153 | float _TMP183; 154 | float _TMP189; 155 | float _x0190; 156 | float _a0196; 157 | float _x0198; 158 | vec2 _x0200; 159 | float _x0208; 160 | COMPAT_VARYING vec4 TEX0; 161 | 162 | uniform COMPAT_PRECISION vec2 OutputSize; 163 | uniform COMPAT_PRECISION vec2 TextureSize; 164 | uniform COMPAT_PRECISION vec2 InputSize; 165 | void main() 166 | { 167 | vec2 _dx1; 168 | vec2 _dy; 169 | vec2 _pix_co; 170 | vec2 _tex_co; 171 | vec2 _dist; 172 | vec3 _col2; 173 | vec3 _col21; 174 | vec4 _coeffs1; 175 | float _luma; 176 | float _bright; 177 | float _scan_weight; 178 | vec2 _mod_fac; 179 | int _dot_no; 180 | vec3 _mask_weight; 181 | vec3 _TMP37; 182 | _dx1 = vec2(1.00000000E+00/TextureSize.x, 0.00000000E+00); 183 | _dy = vec2(0.00000000E+00, 1.00000000E+00/TextureSize.y); 184 | _pix_co = TEX0.xy*TextureSize - vec2( 5.00000000E-01, 5.00000000E-01); 185 | _TMP0 = floor(_pix_co); 186 | _tex_co = (_TMP0 + vec2( 5.00000000E-01, 5.00000000E-01))/TextureSize; 187 | _dist = fract(_pix_co); 188 | _x_step0044 = float((_dist.x >= 5.00000000E-01)); 189 | _a0048 = 2.50000000E-01 - (_dist.x - _x_step0044)*(_dist.x - _x_step0044); 190 | _TMP33 = inversesqrt(_a0048); 191 | _TMP14 = 1.00000000E+00/_TMP33; 192 | _a0052 = 5.00000000E-01 - _dist.x; 193 | _val0052 = float((_a0052 > 0.00000000E+00)); 194 | _TMP15 = _val0052 - float((_a0052 < 0.00000000E+00)); 195 | _curve0044 = 5.00000000E-01 - _TMP14*_TMP15; 196 | _TMP43 = _dist.x + 2.50000000E-01*(_curve0044 - _dist.x); 197 | _coeffs1 = 3.14159274E+00*vec4(1.00000000E+00 + _TMP43, _TMP43, 1.00000000E+00 - _TMP43, 2.00000000E+00 - _TMP43); 198 | _TMP1 = abs(_coeffs1); 199 | _TMP57 = max(_TMP1, vec4( 9.99999975E-06, 9.99999975E-06, 9.99999975E-06, 9.99999975E-06)); 200 | _TMP16 = sin(_TMP57.x); 201 | _TMP17 = sin(_TMP57.y); 202 | _TMP18 = sin(_TMP57.z); 203 | _TMP19 = sin(_TMP57.w); 204 | _TMP2 = vec4(_TMP16, _TMP17, _TMP18, _TMP19); 205 | _x0072 = _TMP57/2.00000000E+00; 206 | _TMP16 = sin(_x0072.x); 207 | _TMP17 = sin(_x0072.y); 208 | _TMP18 = sin(_x0072.z); 209 | _TMP19 = sin(_x0072.w); 210 | _TMP3 = vec4(_TMP16, _TMP17, _TMP18, _TMP19); 211 | _coeffs1 = ((2.00000000E+00*_TMP2)*_TMP3)/(_TMP57*_TMP57); 212 | _TMP4 = dot(_coeffs1, vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00)); 213 | _coeffs1 = _coeffs1/_TMP4; 214 | _c0086 = _tex_co - _dx1; 215 | _TMP20 = COMPAT_TEXTURE(Texture, _c0086); 216 | _x0088 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP20 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00)); 217 | _TMP21 = _TMP20*_x0088; 218 | _TMP22 = COMPAT_TEXTURE(Texture, _tex_co); 219 | _x0094 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP22 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00)); 220 | _TMP23 = _TMP22*_x0094; 221 | _c0098 = _tex_co + _dx1; 222 | _TMP24 = COMPAT_TEXTURE(Texture, _c0098); 223 | _x0100 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP24 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00)); 224 | _TMP25 = _TMP24*_x0100; 225 | _c0104 = _tex_co + 2.00000000E+00*_dx1; 226 | _TMP26 = COMPAT_TEXTURE(Texture, _c0104); 227 | _x0106 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP26 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00)); 228 | _TMP27 = _TMP26*_x0106; 229 | _r0112 = _coeffs1.x*_TMP21; 230 | _r0112 = _r0112 + _coeffs1.y*_TMP23; 231 | _r0112 = _r0112 + _coeffs1.z*_TMP25; 232 | _r0112 = _r0112 + _coeffs1.w*_TMP27; 233 | _sample_min0110 = min(_TMP23, _TMP25); 234 | _sample_max0110 = max(_TMP23, _TMP25); 235 | _TMP34 = min(_sample_max0110, _r0112); 236 | _TMP117 = max(_sample_min0110, _TMP34); 237 | _co0124 = _tex_co + _dy; 238 | _c0126 = _co0124 - _dx1; 239 | _TMP20 = COMPAT_TEXTURE(Texture, _c0126); 240 | _x0128 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP20 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00)); 241 | _TMP21 = _TMP20*_x0128; 242 | _TMP22 = COMPAT_TEXTURE(Texture, _co0124); 243 | _x0134 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP22 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00)); 244 | _TMP23 = _TMP22*_x0134; 245 | _c0138 = _co0124 + _dx1; 246 | _TMP24 = COMPAT_TEXTURE(Texture, _c0138); 247 | _x0140 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP24 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00)); 248 | _TMP25 = _TMP24*_x0140; 249 | _c0144 = _co0124 + 2.00000000E+00*_dx1; 250 | _TMP26 = COMPAT_TEXTURE(Texture, _c0144); 251 | _x0146 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP26 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00)); 252 | _TMP27 = _TMP26*_x0146; 253 | _r0152 = _coeffs1.x*_TMP21; 254 | _r0152 = _r0152 + _coeffs1.y*_TMP23; 255 | _r0152 = _r0152 + _coeffs1.z*_TMP25; 256 | _r0152 = _r0152 + _coeffs1.w*_TMP27; 257 | _sample_min0150 = min(_TMP23, _TMP25); 258 | _sample_max0150 = max(_TMP23, _TMP25); 259 | _TMP34 = min(_sample_max0150, _r0152); 260 | _TMP157 = max(_sample_min0150, _TMP34); 261 | _x_step0164 = float((_dist.y >= 5.00000000E-01)); 262 | _a0168 = 2.50000000E-01 - (_dist.y - _x_step0164)*(_dist.y - _x_step0164); 263 | _TMP33 = inversesqrt(_a0168); 264 | _TMP14 = 1.00000000E+00/_TMP33; 265 | _a0172 = 5.00000000E-01 - _dist.y; 266 | _val0172 = float((_a0172 > 0.00000000E+00)); 267 | _TMP15 = _val0172 - float((_a0172 < 0.00000000E+00)); 268 | _curve0164 = 5.00000000E-01 - _TMP14*_TMP15; 269 | _TMP163 = _dist.y + (_curve0164 - _dist.y); 270 | _col2 = _TMP117.xyz + _TMP163*(_TMP157.xyz - _TMP117.xyz); 271 | _luma = dot(vec3( 2.12599993E-01, 7.15200007E-01, 7.22000003E-02), _col2); 272 | _TMP8 = max(_col2.y, _col2.z); 273 | _TMP9 = max(_col2.x, _TMP8); 274 | _bright = (_TMP9 + _luma)/2.00000000E+00; 275 | _TMP31 = min(6.49999976E-01, _bright); 276 | _TMP183 = max(3.49999994E-01, _TMP31); 277 | _x0190 = _bright*1.50000000E+00; 278 | _TMP31 = min(1.50000000E+00, _x0190); 279 | _TMP189 = max(1.50000000E+00, _TMP31); 280 | _a0196 = TEX0.y*2.00000000E+00*3.14159274E+00*TextureSize.y; 281 | _TMP10 = cos(_a0196); 282 | _x0198 = _TMP10*5.00000000E-01 + 5.00000000E-01; 283 | _TMP11 = pow(_x0198, _TMP189); 284 | _scan_weight = 1.00000000E+00 - _TMP11; 285 | _x0200 = (TEX0.xy*OutputSize*TextureSize)/InputSize; 286 | _mod_fac = floor(_x0200); 287 | _x0208 = _mod_fac.x/3.00000000E+00; 288 | _TMP32 = floor(_x0208); 289 | _TMP13 = _mod_fac.x - 3.00000000E+00*_TMP32; 290 | _dot_no = int(_TMP13); 291 | if (_dot_no == 0) { 292 | _mask_weight = vec3( 1.00000000E+00, 6.99999988E-01, 6.99999988E-01); 293 | } else { 294 | if (_dot_no == 1) { 295 | _mask_weight = vec3( 6.99999988E-01, 1.00000000E+00, 6.99999988E-01); 296 | } else { 297 | _mask_weight = vec3( 6.99999988E-01, 6.99999988E-01, 1.00000000E+00); 298 | } 299 | } 300 | if (InputSize.y >= 4.00000000E+02) { 301 | _scan_weight = 1.00000000E+00; 302 | } 303 | _col21 = _col2.xyz; 304 | _col2 = _col2*vec3(_scan_weight, _scan_weight, _scan_weight); 305 | _col2 = _col2 + _TMP183*(_col21 - _col2); 306 | _col2 = _col2*_mask_weight; 307 | _TMP28 = pow(_col2.x, 5.55555582E-01); 308 | _TMP29 = pow(_col2.y, 5.55555582E-01); 309 | _TMP30 = pow(_col2.z, 5.55555582E-01); 310 | _col2 = vec3(_TMP28, _TMP29, _TMP30); 311 | _TMP37 = _col2*1.20000005E+00; 312 | _ret_0 = vec4(_TMP37.x, _TMP37.y, _TMP37.z, 1.00000000E+00); 313 | FragColor = _ret_0; 314 | return; 315 | } 316 | #endif 317 | -------------------------------------------------------------------------------- /shaders/crt-easymode.glslp: -------------------------------------------------------------------------------- 1 | shaders = 1 2 | 3 | shader0 = crt-easymode.glsl 4 | filter_linear0 = false 5 | scale_type_0 = source 6 | -------------------------------------------------------------------------------- /shaders/crt-geom.glsl: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | CRT-interlaced 4 | 5 | Copyright (C) 2010-2012 cgwg, Themaister and DOLLS 6 | 7 | This program is free software; you can redistribute it and/or modify it 8 | under the terms of the GNU General Public License as published by the Free 9 | Software Foundation; either version 2 of the License, or (at your option) 10 | any later version. 11 | 12 | (cgwg gave their consent to have the original version of this shader 13 | distributed under the GPL in this message: 14 | 15 | http://board.byuu.org/viewtopic.php?p=26075#p26075 16 | 17 | "Feel free to distribute my shaders under the GPL. After all, the 18 | barrel distortion code was taken from the Curvature shader, which is 19 | under the GPL." 20 | ) 21 | This shader variant is pre-configured with screen curvature 22 | */ 23 | /* 24 | #pragma parameter CRTgamma "CRTGeom Target Gamma" 2.4 0.1 5.0 0.1 25 | #pragma parameter monitorgamma "CRTGeom Monitor Gamma" 2.2 0.1 5.0 0.1 26 | #pragma parameter d "CRTGeom Distance" 1.6 0.1 3.0 0.1 27 | #pragma parameter CURVATURE "CRTGeom Curvature Toggle" 1.0 0.0 1.0 1.0 28 | #pragma parameter R "CRTGeom Curvature Radius" 2.0 0.1 10.0 0.1 29 | #pragma parameter cornersize "CRTGeom Corner Size" 0.03 0.001 1.0 0.005 30 | #pragma parameter cornersmooth "CRTGeom Corner Smoothness" 1000.0 80.0 2000.0 100.0 31 | #pragma parameter x_tilt "CRTGeom Horizontal Tilt" 0.0 -0.5 0.5 0.05 32 | #pragma parameter y_tilt "CRTGeom Vertical Tilt" 0.0 -0.5 0.5 0.05 33 | #pragma parameter overscan_x "CRTGeom Horiz. Overscan %" 100.0 -125.0 125.0 1.0 34 | #pragma parameter overscan_y "CRTGeom Vert. Overscan %" 100.0 -125.0 125.0 1.0 35 | #pragma parameter DOTMASK "CRTGeom Dot Mask Toggle" 0.3 0.0 0.3 0.3 36 | #pragma parameter SHARPER "CRTGeom Sharpness" 1.0 1.0 3.0 1.0 37 | #pragma parameter scanline_weight "CRTGeom Scanline Weight" 0.3 0.1 0.5 0.05 38 | */ 39 | 40 | #ifndef PARAMETER_UNIFORM 41 | #define CRTgamma 2.4 42 | #define monitorgamma 2.2 43 | #define d 1.6 44 | #define CURVATURE 1.0 45 | #define R 2.0 46 | #define cornersize 0.03 47 | #define cornersmooth 1000.0 48 | #define x_tilt 0.0 49 | #define y_tilt 0.0 50 | #define overscan_x 100.0 51 | #define overscan_y 100.0 52 | #define DOTMASK 0.3 53 | #define SHARPER 1.0 54 | #define scanline_weight 0.3 55 | #endif 56 | 57 | #if defined(VERTEX) 58 | 59 | #if __VERSION__ >= 130 60 | #define COMPAT_VARYING out 61 | #define COMPAT_ATTRIBUTE in 62 | #define COMPAT_TEXTURE texture 63 | #else 64 | #define COMPAT_VARYING varying 65 | #define COMPAT_ATTRIBUTE attribute 66 | #define COMPAT_TEXTURE texture2D 67 | #endif 68 | 69 | #ifdef GL_ES 70 | #define COMPAT_PRECISION mediump 71 | #else 72 | #define COMPAT_PRECISION 73 | #endif 74 | 75 | COMPAT_ATTRIBUTE vec4 VertexCoord; 76 | COMPAT_ATTRIBUTE vec4 COLOR; 77 | COMPAT_ATTRIBUTE vec4 TexCoord; 78 | COMPAT_VARYING vec4 COL0; 79 | COMPAT_VARYING vec4 TEX0; 80 | 81 | vec4 _oPosition1; 82 | uniform mat4 MVPMatrix; 83 | uniform COMPAT_PRECISION int FrameDirection; 84 | uniform COMPAT_PRECISION int FrameCount; 85 | uniform COMPAT_PRECISION vec2 OutputSize; 86 | uniform COMPAT_PRECISION vec2 TextureSize; 87 | uniform COMPAT_PRECISION vec2 InputSize; 88 | 89 | COMPAT_VARYING vec2 overscan; 90 | COMPAT_VARYING vec2 aspect; 91 | COMPAT_VARYING vec3 stretch; 92 | COMPAT_VARYING vec2 sinangle; 93 | COMPAT_VARYING vec2 cosangle; 94 | COMPAT_VARYING vec2 one; 95 | COMPAT_VARYING float mod_factor; 96 | COMPAT_VARYING vec2 ilfac; 97 | 98 | #ifdef PARAMETER_UNIFORM 99 | uniform COMPAT_PRECISION float CRTgamma; 100 | uniform COMPAT_PRECISION float monitorgamma; 101 | uniform COMPAT_PRECISION float d; 102 | uniform COMPAT_PRECISION float CURVATURE; 103 | uniform COMPAT_PRECISION float R; 104 | uniform COMPAT_PRECISION float cornersize; 105 | uniform COMPAT_PRECISION float cornersmooth; 106 | uniform COMPAT_PRECISION float x_tilt; 107 | uniform COMPAT_PRECISION float y_tilt; 108 | uniform COMPAT_PRECISION float overscan_x; 109 | uniform COMPAT_PRECISION float overscan_y; 110 | uniform COMPAT_PRECISION float DOTMASK; 111 | uniform COMPAT_PRECISION float SHARPER; 112 | uniform COMPAT_PRECISION float scanline_weight; 113 | #endif 114 | 115 | #define FIX(c) max(abs(c), 1e-5); 116 | 117 | float intersect(vec2 xy) 118 | { 119 | float A = dot(xy,xy)+d*d; 120 | float B = 2.0*(R*(dot(xy,sinangle)-d*cosangle.x*cosangle.y)-d*d); 121 | float C = d*d + 2.0*R*d*cosangle.x*cosangle.y; 122 | return (-B-sqrt(B*B-4.0*A*C))/(2.0*A); 123 | } 124 | 125 | vec2 bkwtrans(vec2 xy) 126 | { 127 | float c = intersect(xy); 128 | vec2 point = vec2(c)*xy; 129 | point -= vec2(-R)*sinangle; 130 | point /= vec2(R); 131 | vec2 tang = sinangle/cosangle; 132 | vec2 poc = point/cosangle; 133 | float A = dot(tang,tang)+1.0; 134 | float B = -2.0*dot(poc,tang); 135 | float C = dot(poc,poc)-1.0; 136 | float a = (-B+sqrt(B*B-4.0*A*C))/(2.0*A); 137 | vec2 uv = (point-a*sinangle)/cosangle; 138 | float r = R*acos(a); 139 | return uv*r/sin(r/R); 140 | } 141 | 142 | vec2 fwtrans(vec2 uv) 143 | { 144 | float r = FIX(sqrt(dot(uv,uv))); 145 | uv *= sin(r/R)/r; 146 | float x = 1.0-cos(r/R); 147 | float D = d/R + x*cosangle.x*cosangle.y+dot(uv,sinangle); 148 | return d*(uv*cosangle-x*sinangle)/D; 149 | } 150 | 151 | vec3 maxscale() 152 | { 153 | vec2 c = bkwtrans(-R * sinangle / (1.0 + R/d*cosangle.x*cosangle.y)); 154 | vec2 a = vec2(0.5,0.5)*aspect; 155 | vec2 lo = vec2(fwtrans(vec2(-a.x,c.y)).x, fwtrans(vec2(c.x,-a.y)).y)/aspect; 156 | vec2 hi = vec2(fwtrans(vec2(+a.x,c.y)).x, fwtrans(vec2(c.x,+a.y)).y)/aspect; 157 | return vec3((hi+lo)*aspect*0.5,max(hi.x-lo.x,hi.y-lo.y)); 158 | } 159 | 160 | void main() 161 | { 162 | // START of parameters 163 | 164 | // gamma of simulated CRT 165 | // CRTgamma = 1.8; 166 | // gamma of display monitor (typically 2.2 is correct) 167 | // monitorgamma = 2.2; 168 | // overscan (e.g. 1.02 for 2% overscan) 169 | overscan = vec2(1.00,1.00); 170 | // aspect ratio 171 | aspect = vec2(1.0, 0.75); 172 | // lengths are measured in units of (approximately) the width 173 | // of the monitor simulated distance from viewer to monitor 174 | // d = 2.0; 175 | // radius of curvature 176 | // R = 1.5; 177 | // tilt angle in radians 178 | // (behavior might be a bit wrong if both components are 179 | // nonzero) 180 | const vec2 angle = vec2(0.0,0.0); 181 | // size of curved corners 182 | // cornersize = 0.03; 183 | // border smoothness parameter 184 | // decrease if borders are too aliased 185 | // cornersmooth = 1000.0; 186 | 187 | // END of parameters 188 | 189 | vec4 _oColor; 190 | vec2 _otexCoord; 191 | gl_Position = VertexCoord.x * MVPMatrix[0] + VertexCoord.y * MVPMatrix[1] + VertexCoord.z * MVPMatrix[2] + VertexCoord.w * MVPMatrix[3]; 192 | _oPosition1 = gl_Position; 193 | _oColor = COLOR; 194 | _otexCoord = TexCoord.xy; 195 | COL0 = COLOR; 196 | TEX0.xy = TexCoord.xy; 197 | 198 | // Precalculate a bunch of useful values we'll need in the fragment 199 | // shader. 200 | sinangle = sin(vec2(x_tilt, y_tilt)) + vec2(0.001);//sin(vec2(max(abs(x_tilt), 1e-3), max(abs(y_tilt), 1e-3))); 201 | cosangle = cos(vec2(x_tilt, y_tilt)) + vec2(0.001);//cos(vec2(max(abs(x_tilt), 1e-3), max(abs(y_tilt), 1e-3))); 202 | stretch = maxscale(); 203 | 204 | ilfac = vec2(1.0,clamp(floor(InputSize.y/200.0), 1.0, 2.0)); 205 | 206 | // The size of one texel, in texture-coordinates. 207 | vec2 sharpTextureSize = vec2(SHARPER * TextureSize.x, TextureSize.y); 208 | one = ilfac / sharpTextureSize; 209 | 210 | // Resulting X pixel-coordinate of the pixel we're drawing. 211 | mod_factor = TexCoord.x * TextureSize.x * OutputSize.x / InputSize.x; 212 | 213 | } 214 | 215 | #elif defined(FRAGMENT) 216 | 217 | #if __VERSION__ >= 130 218 | #define COMPAT_VARYING in 219 | #define COMPAT_TEXTURE texture 220 | out vec4 FragColor; 221 | #else 222 | #define COMPAT_VARYING varying 223 | #define FragColor gl_FragColor 224 | #define COMPAT_TEXTURE texture2D 225 | #endif 226 | 227 | #ifdef GL_ES 228 | #ifdef GL_FRAGMENT_PRECISION_HIGH 229 | precision highp float; 230 | #else 231 | precision mediump float; 232 | #endif 233 | #define COMPAT_PRECISION mediump 234 | #else 235 | #define COMPAT_PRECISION 236 | #endif 237 | 238 | struct output_dummy { 239 | vec4 _color; 240 | }; 241 | 242 | uniform COMPAT_PRECISION int FrameDirection; 243 | uniform COMPAT_PRECISION int FrameCount; 244 | uniform COMPAT_PRECISION vec2 OutputSize; 245 | uniform COMPAT_PRECISION vec2 TextureSize; 246 | uniform COMPAT_PRECISION vec2 InputSize; 247 | uniform sampler2D Texture; 248 | COMPAT_VARYING vec4 TEX0; 249 | 250 | // Comment the next line to disable interpolation in linear gamma (and 251 | // gain speed). 252 | #define LINEAR_PROCESSING 253 | 254 | // Enable screen curvature. 255 | // #define CURVATURE 256 | 257 | // Enable 3x oversampling of the beam profile 258 | #define OVERSAMPLE 259 | 260 | // Use the older, purely gaussian beam profile 261 | //#define USEGAUSSIAN 262 | 263 | // Macros. 264 | #define FIX(c) max(abs(c), 1e-5); 265 | #define PI 3.141592653589 266 | 267 | #ifdef LINEAR_PROCESSING 268 | # define TEX2D(c) pow(COMPAT_TEXTURE(Texture, (c)), vec4(CRTgamma)) 269 | #else 270 | # define TEX2D(c) COMPAT_TEXTURE(Texture, (c)) 271 | #endif 272 | 273 | COMPAT_VARYING vec2 one; 274 | COMPAT_VARYING float mod_factor; 275 | COMPAT_VARYING vec2 ilfac; 276 | COMPAT_VARYING vec2 overscan; 277 | COMPAT_VARYING vec2 aspect; 278 | COMPAT_VARYING vec3 stretch; 279 | COMPAT_VARYING vec2 sinangle; 280 | COMPAT_VARYING vec2 cosangle; 281 | 282 | #ifdef PARAMETER_UNIFORM 283 | uniform COMPAT_PRECISION float CRTgamma; 284 | uniform COMPAT_PRECISION float monitorgamma; 285 | uniform COMPAT_PRECISION float d; 286 | uniform COMPAT_PRECISION float CURVATURE; 287 | uniform COMPAT_PRECISION float R; 288 | uniform COMPAT_PRECISION float cornersize; 289 | uniform COMPAT_PRECISION float cornersmooth; 290 | uniform COMPAT_PRECISION float x_tilt; 291 | uniform COMPAT_PRECISION float y_tilt; 292 | uniform COMPAT_PRECISION float overscan_x; 293 | uniform COMPAT_PRECISION float overscan_y; 294 | uniform COMPAT_PRECISION float DOTMASK; 295 | uniform COMPAT_PRECISION float SHARPER; 296 | uniform COMPAT_PRECISION float scanline_weight; 297 | #endif 298 | 299 | float intersect(vec2 xy) 300 | { 301 | float A = dot(xy,xy)+d*d; 302 | float B = 2.0*(R*(dot(xy,sinangle)-d*cosangle.x*cosangle.y)-d*d); 303 | float C = d*d + 2.0*R*d*cosangle.x*cosangle.y; 304 | return (-B-sqrt(B*B-4.0*A*C))/(2.0*A); 305 | } 306 | 307 | vec2 bkwtrans(vec2 xy) 308 | { 309 | float c = intersect(xy); 310 | vec2 point = vec2(c)*xy; 311 | point -= vec2(-R)*sinangle; 312 | point /= vec2(R); 313 | vec2 tang = sinangle/cosangle; 314 | vec2 poc = point/cosangle; 315 | float A = dot(tang,tang)+1.0; 316 | float B = -2.0*dot(poc,tang); 317 | float C = dot(poc,poc)-1.0; 318 | float a = (-B+sqrt(B*B-4.0*A*C))/(2.0*A); 319 | vec2 uv = (point-a*sinangle)/cosangle; 320 | float r = FIX(R*acos(a)); 321 | return uv*r/sin(r/R); 322 | } 323 | 324 | vec2 transform(vec2 coord) 325 | { 326 | coord *= TextureSize / InputSize; 327 | coord = (coord-vec2(0.5))*aspect*stretch.z+stretch.xy; 328 | return (bkwtrans(coord)/vec2(overscan_x / 100.0, overscan_y / 100.0)/aspect+vec2(0.5)) * InputSize / TextureSize; 329 | } 330 | 331 | float corner(vec2 coord) 332 | { 333 | coord *= TextureSize / InputSize; 334 | coord = (coord - vec2(0.5)) * vec2(overscan_x / 100.0, overscan_y / 100.0) + vec2(0.5); 335 | coord = min(coord, vec2(1.0)-coord) * aspect; 336 | vec2 cdist = vec2(cornersize); 337 | coord = (cdist - min(coord,cdist)); 338 | float dist = sqrt(dot(coord,coord)); 339 | return clamp((cdist.x-dist)*cornersmooth,0.0, 1.0); 340 | } 341 | 342 | // Calculate the influence of a scanline on the current pixel. 343 | // 344 | // 'distance' is the distance in texture coordinates from the current 345 | // pixel to the scanline in question. 346 | // 'color' is the colour of the scanline at the horizontal location of 347 | // the current pixel. 348 | vec4 scanlineWeights(float distance, vec4 color) 349 | { 350 | // "wid" controls the width of the scanline beam, for each RGB 351 | // channel The "weights" lines basically specify the formula 352 | // that gives you the profile of the beam, i.e. the intensity as 353 | // a function of distance from the vertical center of the 354 | // scanline. In this case, it is gaussian if width=2, and 355 | // becomes nongaussian for larger widths. Ideally this should 356 | // be normalized so that the integral across the beam is 357 | // independent of its width. That is, for a narrower beam 358 | // "weights" should have a higher peak at the center of the 359 | // scanline than for a wider beam. 360 | #ifdef USEGAUSSIAN 361 | vec4 wid = 0.3 + 0.1 * pow(color, vec4(3.0)); 362 | vec4 weights = vec4(distance / wid); 363 | return 0.4 * exp(-weights * weights) / wid; 364 | #else 365 | vec4 wid = 2.0 + 2.0 * pow(color, vec4(4.0)); 366 | vec4 weights = vec4(distance / scanline_weight); 367 | return 1.4 * exp(-pow(weights * inversesqrt(0.5 * wid), wid)) / (0.6 + 0.2 * wid); 368 | #endif 369 | } 370 | 371 | void main() 372 | { 373 | // Here's a helpful diagram to keep in mind while trying to 374 | // understand the code: 375 | // 376 | // | | | | | 377 | // ------------------------------- 378 | // | | | | | 379 | // | 01 | 11 | 21 | 31 | <-- current scanline 380 | // | | @ | | | 381 | // ------------------------------- 382 | // | | | | | 383 | // | 02 | 12 | 22 | 32 | <-- next scanline 384 | // | | | | | 385 | // ------------------------------- 386 | // | | | | | 387 | // 388 | // Each character-cell represents a pixel on the output 389 | // surface, "@" represents the current pixel (always somewhere 390 | // in the bottom half of the current scan-line, or the top-half 391 | // of the next scanline). The grid of lines represents the 392 | // edges of the texels of the underlying texture. 393 | 394 | // Texture coordinates of the texel containing the active pixel. 395 | vec2 xy = (CURVATURE > 0.5) ? transform(TEX0.xy) : TEX0.xy; 396 | 397 | float cval = corner(xy); 398 | 399 | // Of all the pixels that are mapped onto the texel we are 400 | // currently rendering, which pixel are we currently rendering? 401 | vec2 ilvec = vec2(0.0,ilfac.y > 1.5 ? mod(float(FrameCount),2.0) : 0.0); 402 | vec2 ratio_scale = (xy * TextureSize - vec2(0.5) + ilvec)/ilfac; 403 | #ifdef OVERSAMPLE 404 | float filter_ = InputSize.y/OutputSize.y;//fwidth(ratio_scale.y); 405 | #endif 406 | vec2 uv_ratio = fract(ratio_scale); 407 | 408 | // Snap to the center of the underlying texel. 409 | xy = (floor(ratio_scale)*ilfac + vec2(0.5) - ilvec) / TextureSize; 410 | 411 | // Calculate Lanczos scaling coefficients describing the effect 412 | // of various neighbour texels in a scanline on the current 413 | // pixel. 414 | vec4 coeffs = PI * vec4(1.0 + uv_ratio.x, uv_ratio.x, 1.0 - uv_ratio.x, 2.0 - uv_ratio.x); 415 | 416 | // Prevent division by zero. 417 | coeffs = FIX(coeffs); 418 | 419 | // Lanczos2 kernel. 420 | coeffs = 2.0 * sin(coeffs) * sin(coeffs / 2.0) / (coeffs * coeffs); 421 | 422 | // Normalize. 423 | coeffs /= dot(coeffs, vec4(1.0)); 424 | 425 | // Calculate the effective colour of the current and next 426 | // scanlines at the horizontal location of the current pixel, 427 | // using the Lanczos coefficients above. 428 | vec4 col = clamp(mat4( 429 | TEX2D(xy + vec2(-one.x, 0.0)), 430 | TEX2D(xy), 431 | TEX2D(xy + vec2(one.x, 0.0)), 432 | TEX2D(xy + vec2(2.0 * one.x, 0.0))) * coeffs, 433 | 0.0, 1.0); 434 | vec4 col2 = clamp(mat4( 435 | TEX2D(xy + vec2(-one.x, one.y)), 436 | TEX2D(xy + vec2(0.0, one.y)), 437 | TEX2D(xy + one), 438 | TEX2D(xy + vec2(2.0 * one.x, one.y))) * coeffs, 439 | 0.0, 1.0); 440 | 441 | #ifndef LINEAR_PROCESSING 442 | col = pow(col , vec4(CRTgamma)); 443 | col2 = pow(col2, vec4(CRTgamma)); 444 | #endif 445 | 446 | // Calculate the influence of the current and next scanlines on 447 | // the current pixel. 448 | vec4 weights = scanlineWeights(uv_ratio.y, col); 449 | vec4 weights2 = scanlineWeights(1.0 - uv_ratio.y, col2); 450 | #ifdef OVERSAMPLE 451 | uv_ratio.y =uv_ratio.y+1.0/3.0*filter_; 452 | weights = (weights+scanlineWeights(uv_ratio.y, col))/3.0; 453 | weights2=(weights2+scanlineWeights(abs(1.0-uv_ratio.y), col2))/3.0; 454 | uv_ratio.y =uv_ratio.y-2.0/3.0*filter_; 455 | weights=weights+scanlineWeights(abs(uv_ratio.y), col)/3.0; 456 | weights2=weights2+scanlineWeights(abs(1.0-uv_ratio.y), col2)/3.0; 457 | #endif 458 | 459 | vec3 mul_res = (col * weights + col2 * weights2).rgb * vec3(cval); 460 | 461 | // dot-mask emulation: 462 | // Output pixels are alternately tinted green and magenta. 463 | vec3 dotMaskWeights = mix( 464 | vec3(1.0, 1.0 - DOTMASK, 1.0), 465 | vec3(1.0 - DOTMASK, 1.0, 1.0 - DOTMASK), 466 | floor(mod(mod_factor, 2.0)) 467 | ); 468 | 469 | mul_res *= dotMaskWeights; 470 | 471 | // Convert the image gamma for display on our output device. 472 | mul_res = pow(mul_res, vec3(1.0 / monitorgamma)); 473 | 474 | // Color the texel. 475 | output_dummy _OUT; 476 | _OUT._color = vec4(mul_res, 1.0); 477 | FragColor = _OUT._color; 478 | return; 479 | } 480 | #endif 481 | 482 | -------------------------------------------------------------------------------- /shaders/crt-geom.glslp: -------------------------------------------------------------------------------- 1 | shaders = 1 2 | 3 | shader0 = crt-geom.glsl 4 | filter_linear0 = false 5 | scale_type_0 = source 6 | -------------------------------------------------------------------------------- /shaders/crt-mattias.glsl: -------------------------------------------------------------------------------- 1 | 2 | #pragma parameter CURVATURE "Curvature" 0.5 0.0 1.0 0.05 3 | #pragma parameter SCANSPEED "Scanline Crawl Speed" 1.0 0.0 10.0 0.5 4 | #if defined(VERTEX) 5 | #if __VERSION__ >= 130 6 | #define COMPAT_VARYING out 7 | #define COMPAT_ATTRIBUTE in 8 | #define COMPAT_TEXTURE texture 9 | #else 10 | #define COMPAT_VARYING varying 11 | #define COMPAT_ATTRIBUTE attribute 12 | #define COMPAT_TEXTURE texture2D 13 | #endif 14 | 15 | #ifdef GL_ES 16 | #define COMPAT_PRECISION mediump 17 | #else 18 | #define COMPAT_PRECISION 19 | #endif 20 | 21 | COMPAT_ATTRIBUTE vec4 VertexCoord; 22 | COMPAT_ATTRIBUTE vec4 COLOR; 23 | COMPAT_ATTRIBUTE vec4 TexCoord; 24 | COMPAT_VARYING vec4 COL0; 25 | COMPAT_VARYING vec4 TEX0; 26 | 27 | vec4 _oPosition1; 28 | uniform mat4 MVPMatrix; 29 | uniform COMPAT_PRECISION int FrameDirection; 30 | uniform COMPAT_PRECISION int FrameCount; 31 | uniform COMPAT_PRECISION vec2 OutputSize; 32 | uniform COMPAT_PRECISION vec2 TextureSize; 33 | uniform COMPAT_PRECISION vec2 InputSize; 34 | 35 | #define vTexCoord TEX0.xy 36 | #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize 37 | #define OutSize vec4(OutputSize, 1.0 / OutputSize) 38 | 39 | void main() 40 | { 41 | gl_Position = MVPMatrix * VertexCoord; 42 | TEX0.xy = TexCoord.xy; 43 | } 44 | 45 | #elif defined(FRAGMENT) 46 | 47 | #ifdef GL_ES 48 | #ifdef GL_FRAGMENT_PRECISION_HIGH 49 | precision highp float; 50 | #else 51 | precision mediump float; 52 | #endif 53 | #define COMPAT_PRECISION mediump 54 | #else 55 | #define COMPAT_PRECISION 56 | #endif 57 | 58 | #if __VERSION__ >= 130 59 | #define COMPAT_VARYING in 60 | #define COMPAT_TEXTURE texture 61 | out COMPAT_PRECISION vec4 FragColor; 62 | #else 63 | #define COMPAT_VARYING varying 64 | #define FragColor gl_FragColor 65 | #define COMPAT_TEXTURE texture2D 66 | #endif 67 | 68 | uniform COMPAT_PRECISION int FrameDirection; 69 | uniform COMPAT_PRECISION int FrameCount; 70 | uniform COMPAT_PRECISION vec2 OutputSize; 71 | uniform COMPAT_PRECISION vec2 TextureSize; 72 | uniform COMPAT_PRECISION vec2 InputSize; 73 | uniform sampler2D Texture; 74 | COMPAT_VARYING vec4 TEX0; 75 | 76 | // compatibility #defines 77 | #define Source Texture 78 | #define vTexCoord TEX0.xy 79 | 80 | #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize 81 | #define OutSize vec4(OutputSize, 1.0 / OutputSize) 82 | 83 | #ifdef PARAMETER_UNIFORM 84 | uniform COMPAT_PRECISION float CURVATURE, SCANSPEED; 85 | #else 86 | #define CURVATURE 0.5 87 | #define SCANSPEED 1.0 88 | #endif 89 | 90 | #define iChannel0 Texture 91 | #define iTime (float(FrameCount) / 60.0) 92 | #define iResolution OutputSize.xy 93 | #define fragCoord gl_FragCoord.xy 94 | 95 | vec3 sample_( sampler2D tex, vec2 tc ) 96 | { 97 | vec3 s = pow(COMPAT_TEXTURE(tex,tc).rgb, vec3(2.2)); 98 | return s; 99 | } 100 | 101 | vec3 blur(sampler2D tex, vec2 tc, float offs) 102 | { 103 | vec4 xoffs = offs * vec4(-2.0, -1.0, 1.0, 2.0) / (iResolution.x * TextureSize.x / InputSize.x); 104 | vec4 yoffs = offs * vec4(-2.0, -1.0, 1.0, 2.0) / (iResolution.y * TextureSize.y / InputSize.y); 105 | tc = tc * InputSize / TextureSize; 106 | 107 | vec3 color = vec3(0.0, 0.0, 0.0); 108 | color += sample_(tex,tc + vec2(xoffs.x, yoffs.x)) * 0.00366; 109 | color += sample_(tex,tc + vec2(xoffs.y, yoffs.x)) * 0.01465; 110 | color += sample_(tex,tc + vec2( 0.0, yoffs.x)) * 0.02564; 111 | color += sample_(tex,tc + vec2(xoffs.z, yoffs.x)) * 0.01465; 112 | color += sample_(tex,tc + vec2(xoffs.w, yoffs.x)) * 0.00366; 113 | 114 | color += sample_(tex,tc + vec2(xoffs.x, yoffs.y)) * 0.01465; 115 | color += sample_(tex,tc + vec2(xoffs.y, yoffs.y)) * 0.05861; 116 | color += sample_(tex,tc + vec2( 0.0, yoffs.y)) * 0.09524; 117 | color += sample_(tex,tc + vec2(xoffs.z, yoffs.y)) * 0.05861; 118 | color += sample_(tex,tc + vec2(xoffs.w, yoffs.y)) * 0.01465; 119 | 120 | color += sample_(tex,tc + vec2(xoffs.x, 0.0)) * 0.02564; 121 | color += sample_(tex,tc + vec2(xoffs.y, 0.0)) * 0.09524; 122 | color += sample_(tex,tc + vec2( 0.0, 0.0)) * 0.15018; 123 | color += sample_(tex,tc + vec2(xoffs.z, 0.0)) * 0.09524; 124 | color += sample_(tex,tc + vec2(xoffs.w, 0.0)) * 0.02564; 125 | 126 | color += sample_(tex,tc + vec2(xoffs.x, yoffs.z)) * 0.01465; 127 | color += sample_(tex,tc + vec2(xoffs.y, yoffs.z)) * 0.05861; 128 | color += sample_(tex,tc + vec2( 0.0, yoffs.z)) * 0.09524; 129 | color += sample_(tex,tc + vec2(xoffs.z, yoffs.z)) * 0.05861; 130 | color += sample_(tex,tc + vec2(xoffs.w, yoffs.z)) * 0.01465; 131 | 132 | color += sample_(tex,tc + vec2(xoffs.x, yoffs.w)) * 0.00366; 133 | color += sample_(tex,tc + vec2(xoffs.y, yoffs.w)) * 0.01465; 134 | color += sample_(tex,tc + vec2( 0.0, yoffs.w)) * 0.02564; 135 | color += sample_(tex,tc + vec2(xoffs.z, yoffs.w)) * 0.01465; 136 | color += sample_(tex,tc + vec2(xoffs.w, yoffs.w)) * 0.00366; 137 | 138 | return color; 139 | } 140 | 141 | float rand(vec2 co) 142 | { 143 | float a = 12.9898; 144 | float b = 78.233; 145 | float c = 43758.5453; 146 | float dt= dot(co.xy ,vec2(a,b)); 147 | float sn= mod(dt,3.14); 148 | return fract(sin(sn) * c); 149 | } 150 | 151 | vec2 curve(vec2 uv) 152 | { 153 | uv = (uv - 0.5) * 2.0; 154 | uv *= 1.1; 155 | uv.x *= 1.0 + pow((abs(uv.y) / 5.0), 2.0); 156 | uv.y *= 1.0 + pow((abs(uv.x) / 4.0), 2.0); 157 | uv = (uv / 2.0) + 0.5; 158 | uv = uv *0.92 + 0.04; 159 | return uv; 160 | } 161 | 162 | void main() 163 | { 164 | vec2 q = (vTexCoord.xy * TextureSize.xy / InputSize.xy);//fragCoord.xy / iResolution.xy; 165 | vec2 uv = q; 166 | uv = mix( uv, curve( uv ), CURVATURE ) * InputSize.xy / TextureSize.xy; 167 | vec3 col; 168 | float x = sin(0.1*iTime+uv.y*21.0)*sin(0.23*iTime+uv.y*29.0)*sin(0.3+0.11*iTime+uv.y*31.0)*0.0017; 169 | float o =2.0*mod(fragCoord.y,2.0)/iResolution.x; 170 | x+=o; 171 | uv = uv * TextureSize / InputSize; 172 | col.r = 1.0*blur(iChannel0,vec2(uv.x+0.0009,uv.y+0.0009),1.2).x+0.005; 173 | col.g = 1.0*blur(iChannel0,vec2(uv.x+0.000,uv.y-0.0015),1.2).y+0.005; 174 | col.b = 1.0*blur(iChannel0,vec2(uv.x-0.0015,uv.y+0.000),1.2).z+0.005; 175 | col.r += 0.2*blur(iChannel0,vec2(uv.x+0.0009,uv.y+0.0009),2.25).x-0.005; 176 | col.g += 0.2*blur(iChannel0,vec2(uv.x+0.000,uv.y-0.0015),1.75).y-0.005; 177 | col.b += 0.2*blur(iChannel0,vec2(uv.x-0.0015,uv.y+0.000),1.25).z-0.005; 178 | float ghs = 0.05; 179 | col.r += ghs*(1.0-0.299)*blur(iChannel0,0.75*vec2(0.01, -0.027)+vec2(uv.x+0.001,uv.y+0.001),7.0).x; 180 | col.g += ghs*(1.0-0.587)*blur(iChannel0,0.75*vec2(-0.022, -0.02)+vec2(uv.x+0.000,uv.y-0.002),5.0).y; 181 | col.b += ghs*(1.0-0.114)*blur(iChannel0,0.75*vec2(-0.02, -0.0)+vec2(uv.x-0.002,uv.y+0.000),3.0).z; 182 | 183 | 184 | 185 | col = clamp(col*0.4+0.6*col*col*1.0,0.0,1.0); 186 | float vig = (0.0 + 1.0*16.0*uv.x*uv.y*(1.0-uv.x)*(1.0-uv.y)); 187 | vig = pow(vig,0.3); 188 | col *= vec3(vig); 189 | 190 | col *= vec3(0.95,1.05,0.95); 191 | col = mix( col, col * col, 0.3) * 3.8; 192 | 193 | float scans = clamp( 0.35+0.15*sin(3.5*(iTime * SCANSPEED)+uv.y*iResolution.y*1.5), 0.0, 1.0); 194 | 195 | float s = pow(scans,0.9); 196 | col = col*vec3( s) ; 197 | 198 | col *= 1.0+0.0015*sin(300.0*iTime); 199 | 200 | col*=1.0-0.15*vec3(clamp((mod(fragCoord.x+o, 2.0)-1.0)*2.0,0.0,1.0)); 201 | col *= vec3( 1.0 ) - 0.25*vec3( rand( uv+0.0001*iTime), rand( uv+0.0001*iTime + 0.3 ), rand( uv+0.0001*iTime+ 0.5 ) ); 202 | col = pow(col, vec3(0.45)); 203 | 204 | if (uv.x < 0.0 || uv.x > 1.0) 205 | col *= 0.0; 206 | if (uv.y < 0.0 || uv.y > 1.0) 207 | col *= 0.0; 208 | 209 | 210 | float comp = smoothstep( 0.1, 0.9, sin(iTime) ); 211 | 212 | FragColor = vec4(col,1.0); 213 | } 214 | #endif 215 | -------------------------------------------------------------------------------- /shaders/crt-mattias.glslp: -------------------------------------------------------------------------------- 1 | 2 | shaders = 1 3 | shader0 = crt-mattias.glsl 4 | filter_linear0 = false 5 | -------------------------------------------------------------------------------- /shaders/sgenpt-mix.glsl: -------------------------------------------------------------------------------- 1 | /* 2 | SGENPT-MIX - Sega Genesis Pseudo Transparency Mixer Shader - v8b 3 | 4 | 2011-2020 Hyllian - sergiogdb@gmail.com 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | 24 | */ 25 | 26 | #pragma parameter SGPT_BLEND_OPTION "0.OFF | 1.VL | 2.CB | 3.CB-S | 4.Both | 5.Both2 | 6.Both-S" 4.0 0.0 6.0 1.0 27 | #pragma parameter SGPT_BLEND_LEVEL "SGENPT-MIX Both Blend Level" 1.0 0.0 1.0 0.1 28 | #pragma parameter SGPT_ADJUST_VIEW "SGENPT-MIX Adjust View" 0.0 0.0 1.0 1.0 29 | #pragma parameter SGPT_LINEAR_GAMMA "SGENPT-MIX Use Linear Gamma" 1.0 0.0 1.0 1.0 30 | 31 | 32 | #define texCoord TEX0 33 | 34 | #if defined(VERTEX) 35 | 36 | #if __VERSION__ >= 130 37 | #define OUT out 38 | #define IN in 39 | #define tex2D texture 40 | #else 41 | #define OUT varying 42 | #define IN attribute 43 | #define tex2D texture2D 44 | #endif 45 | 46 | #ifdef GL_ES 47 | #define COMPAT_PRECISION mediump 48 | #else 49 | #define COMPAT_PRECISION 50 | #endif 51 | 52 | 53 | IN vec4 VertexCoord; 54 | IN vec4 Color; 55 | IN vec2 TexCoord; 56 | OUT vec4 color; 57 | OUT vec2 texCoord; 58 | 59 | uniform mat4 MVPMatrix; 60 | uniform COMPAT_PRECISION int FrameDirection; 61 | uniform COMPAT_PRECISION int FrameCount; 62 | uniform COMPAT_PRECISION vec2 OutputSize; 63 | uniform COMPAT_PRECISION vec2 TextureSize; 64 | uniform COMPAT_PRECISION vec2 InputSize; 65 | 66 | void main() 67 | { 68 | gl_Position = MVPMatrix * VertexCoord; 69 | color = Color; 70 | texCoord = TexCoord; 71 | } 72 | 73 | #elif defined(FRAGMENT) 74 | 75 | #if __VERSION__ >= 130 76 | #define IN in 77 | #define tex2D texture 78 | out vec4 FragColor; 79 | #else 80 | #define IN varying 81 | #define FragColor gl_FragColor 82 | #define tex2D texture2D 83 | #endif 84 | 85 | #ifdef GL_ES 86 | #ifdef GL_FRAGMENT_PRECISION_HIGH 87 | precision highp float; 88 | #else 89 | precision mediump float; 90 | #endif 91 | #define COMPAT_PRECISION mediump 92 | #else 93 | #define COMPAT_PRECISION 94 | #endif 95 | 96 | uniform COMPAT_PRECISION int FrameDirection; 97 | uniform COMPAT_PRECISION int FrameCount; 98 | uniform COMPAT_PRECISION vec2 OutputSize; 99 | uniform COMPAT_PRECISION vec2 TextureSize; 100 | uniform COMPAT_PRECISION vec2 InputSize; 101 | uniform sampler2D s_p; 102 | IN vec2 texCoord; 103 | 104 | #ifdef PARAMETER_UNIFORM 105 | uniform COMPAT_PRECISION float SGPT_BLEND_OPTION; 106 | uniform COMPAT_PRECISION float SGPT_BLEND_LEVEL; 107 | uniform COMPAT_PRECISION float SGPT_ADJUST_VIEW; 108 | uniform COMPAT_PRECISION float SGPT_LINEAR_GAMMA; 109 | #else 110 | #define SGPT_BLEND_OPTION 4.0 111 | #define SGPT_BLEND_LEVEL 1.0 112 | #define SGPT_ADJUST_VIEW 0.0 113 | #define SGPT_LINEAR_GAMMA 1.0 114 | #endif 115 | 116 | 117 | #define GAMMA_EXP (SGPT_LINEAR_GAMMA+1.0) 118 | #define GAMMA_IN(color) pow(color, vec3(GAMMA_EXP, GAMMA_EXP, GAMMA_EXP)) 119 | #define GAMMA_OUT(color) pow(color, vec3(1.0 / GAMMA_EXP, 1.0 / GAMMA_EXP, 1.0 / GAMMA_EXP)) 120 | 121 | 122 | const vec3 Y = vec3(.2126, .7152, .0722); 123 | 124 | vec3 min_s(vec3 central, vec3 adj1, vec3 adj2) {return min(central, max(adj1, adj2));} 125 | vec3 max_s(vec3 central, vec3 adj1, vec3 adj2) {return max(central, min(adj1, adj2));} 126 | 127 | 128 | void main() 129 | { 130 | vec2 dx = vec2(1.0, 0.0)/TextureSize; 131 | vec2 dy = vec2(0.0, 1.0)/TextureSize; 132 | 133 | // Reading the texels. 134 | vec3 C = GAMMA_IN(tex2D(s_p, texCoord ).xyz); 135 | vec3 L = GAMMA_IN(tex2D(s_p, texCoord -dx).xyz); 136 | vec3 R = GAMMA_IN(tex2D(s_p, texCoord +dx).xyz); 137 | vec3 U = GAMMA_IN(tex2D(s_p, texCoord -dy).xyz); 138 | vec3 D = GAMMA_IN(tex2D(s_p, texCoord +dy).xyz); 139 | vec3 UL = GAMMA_IN(tex2D(s_p, texCoord -dx -dy).xyz); 140 | vec3 UR = GAMMA_IN(tex2D(s_p, texCoord +dx -dy).xyz); 141 | vec3 DL = GAMMA_IN(tex2D(s_p, texCoord -dx +dy).xyz); 142 | vec3 DR = GAMMA_IN(tex2D(s_p, texCoord +dx +dy).xyz); 143 | 144 | vec3 color = C; 145 | 146 | // Get min/max samples 147 | vec3 min_sample = min_s(C, L, R); 148 | vec3 max_sample = max_s(C, L, R); 149 | 150 | float diff = dot(max(max(C, L), max(C, R)) - min(min(C, L), min(C, R)), Y); 151 | 152 | if (int(SGPT_BLEND_OPTION) == 1) // Only Vertical Lines 153 | { 154 | min_sample = max_s(min_sample, min_s(C, DL, DR), min_s(C, UL, UR)); 155 | max_sample = min_s(max_sample, max_s(C, DL, DR), max_s(C, UL, UR)); 156 | 157 | diff *= (1.0 - SGPT_BLEND_LEVEL); 158 | 159 | color = 0.5*( 1.0 + diff )*C + 0.25*( 1.0 - diff )*(L + R); 160 | } 161 | else if (int(SGPT_BLEND_OPTION) == 2) // Only Checkerboard 162 | { 163 | min_sample = max(min_sample, min_s(C, U, D)); 164 | max_sample = min(max_sample, max_s(C, U, D)); 165 | 166 | diff *= (1.0 - SGPT_BLEND_LEVEL); 167 | 168 | color = 0.5*( 1.0 + diff )*C + 0.125*( 1.0 - diff )*(L + R + U + D); 169 | } 170 | else if (int(SGPT_BLEND_OPTION) == 3) // Only Checkerboard - Soft 171 | { 172 | min_sample = min_s(min_sample, U, D); 173 | max_sample = max_s(max_sample, U, D); 174 | 175 | diff *= (1.0 - SGPT_BLEND_LEVEL); 176 | 177 | color = 0.5*( 1.0 + diff )*C + 0.125*( 1.0 - diff )*(L + R + U + D); 178 | } 179 | else if (int(SGPT_BLEND_OPTION) == 4) // VL-CB 180 | { 181 | diff *= (1.0 - SGPT_BLEND_LEVEL); 182 | 183 | color = 0.5*( 1.0 + diff )*C + 0.25*( 1.0 - diff )*(L + R); 184 | } 185 | else if (int(SGPT_BLEND_OPTION) == 5) // VL-CB-2 186 | { 187 | min_sample = min_s(min_sample, U, D); 188 | max_sample = max_s(max_sample, U, D); 189 | 190 | diff *= (1.0 - SGPT_BLEND_LEVEL); 191 | 192 | color = 0.5*( 1.0 + diff )*C + 0.25*( 1.0 - diff )*(L + R); 193 | } 194 | else if (int(SGPT_BLEND_OPTION) == 6) // VL-CB-Soft 195 | { 196 | min_sample = min(min_sample, min(min_s(D, DL, DR), min_s(U, UL, UR))); 197 | max_sample = max(max_sample, max(max_s(D, DL, DR), max_s(U, UL, UR))); 198 | 199 | diff *= (1.0 - SGPT_BLEND_LEVEL); 200 | 201 | color = 0.5*( 1.0 + diff )*C + 0.25*( 1.0 - diff )*(L + R); 202 | } 203 | 204 | color = clamp(color, min_sample, max_sample); 205 | 206 | color = mix(color, vec3(dot(abs(C-color), vec3(1.0, 1.0, 1.0))), SGPT_ADJUST_VIEW); 207 | 208 | FragColor.xyz = GAMMA_OUT(color); 209 | } 210 | #endif 211 | -------------------------------------------------------------------------------- /shaders/sgenpt-mix.glslp: -------------------------------------------------------------------------------- 1 | shaders = 1 2 | 3 | shader0 = sgenpt-mix.glsl 4 | filter_linear0 = false 5 | scale_type0 = source 6 | wrap_mode0 = "clamp_to_border" 7 | scale0 = 1.0 8 | --------------------------------------------------------------------------------