Version 1.1.2

Co-authored-by: Allan Niles <74841470+allancoding@users.noreply.github.com>
Co-authored-by: ElectronicsArchiver <85485984+ElectronicsArchiver@users.noreply.github.com>
Co-authored-by: GreyHope <hello@greyhope.uk>
Co-authored-by: Kyle Steffel <cheesykyle@users.noreply.github.com>
This commit is contained in:
Ethan O'Brien 2022-05-05 14:45:00 -05:00
parent 729d138a98
commit 4da87d0e6b
60 changed files with 1656 additions and 7566 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
**/node_modules/
data/minify/package-lock.json

356
README.md
View file

@ -1,241 +1,187 @@
<p align="center">
<img src="https://user-images.githubusercontent.com/74841470/155255251-0a0840ee-51d7-4f9e-878b-1be287d9a984.png" width="250">
</p>
# EmulatorJS
<div align = center>
<img src = docs/Logo.png width = 300>
<br>
<br>
[![Badge License]][License]
<br>
Self-hosted **Javascript** emulation for various system.
<br>
[![Badge Website]][Website]
[![Badge Usage]][Usage]<br>
[![Badge Configurator]][Configurator]<br>
[![Badge Demo]][Demo]
[![Badge Legacy]][Legacy]
[![Badge Beta]][Beta]
</div>
<br>
### Issues
*If something doesn't work, please consider opening an* ***[Issue]*** <br>
*with as many details as possible, as well as the console log.*
*The* ***Screen Recording*** *option currently doesn't support* ***Audio*** *.*
<br>
The **beta** version of the emulator core files are now avaliable. (For limited systems) <br>
If you would like to use it, please add the following line to your code.
### Audio
*The **Screen Recording** option currently doesn't support **Audio** .*
<br>
### Extensions
**[GameLibrary]**
*A library overview for your **ROM** folder.*
<br>
### Beta
The **beta** of the emulator core is now available for *some* systems. <br>
To use it, please add the following line to your code.
```js
EJS_BETA = true;
```
When reporting bugs, please specify that you are using the beta version
<br>
---
**>>When reporting bugs, please specify that you are using the beta version**
**⸢ [EmulatorJS Website] ⸥ ⸢ [Example Use] ⸥ ⸢ [Emulator Demo] ⸥ ⸢ [Beta] ⸥**
<br>
<br>
<br>
---
## Supported Systems
#### Nintendo
**[Game Boy Advance][Nintendo Game Boy Advance]**|**[Famicom / NES][NES / Famicom]**|**[Virtual Boy][Virtual Boy]**|**[Game Boy][Nintendo Game Boy]**|**[SNES]**|**[DS][Nintendo DS]**|**[64][Nintendo 64]**
#### Sega
**[Master System][Sega Master System]**|**[Mega Drive][Sega Mega Drive]**|**[Game Gear][Sega Game Gear]**|**[Saturn][Sega Saturn]**|**[32X][Sega 32X]**|**[CD][Sega CD]**
#### Atari
**[Jaguar][Atari Jaguar]**|**[Lynx][Atari Lynx]**|**[7800][Atari 7800]**|**[2600][Atari 2600]**
#### Other
**[TurboGrafs 16 PC Engine][TurboGrafs-16 / PC Engine]**|**[WanderSwan Color][WanderSwan / Color]**|**[Neo Geo Poket][Neo Geo Poket]**|**[PlayStation]**|**[Arcade]**|**[MSX]**|**[3DO]**
---
## Usage
*For questions please use the* ***[Issue]*** *tab.*
<h1 align = center>Supported Systems</h1>
<br>
##### Setup
<div align = center>
1. Download this repository.<br>
*`Code ➞ Download As Zip`*
### Nintendo
2. Use a **WebServer** to host the emulator.
**[Game Boy Advance][Nintendo Game Boy Advance]**|
**[Famicom / NES][NES / Famicom]**|
**[Virtual Boy][Virtual Boy]**
**[Game Boy][Nintendo Game Boy]**|
**[SNES]**|
**[DS][Nintendo DS]**|
**[64][Nintendo 64]**
3. Use your **Browser** to navigate to `localhost`
<br>
<br>
### Sega
**[Master System][Sega Master System]**|
**[Mega Drive][Sega Mega Drive]**|
**[Game Gear][Sega Game Gear]**
**[Saturn][Sega Saturn]**|
**[32X][Sega 32X]**|
**[CD][Sega CD]**
<br>
<br>
### Atari
**[Jaguar][Atari Jaguar]**|
**[Lynx][Atari Lynx]**|
**[7800][Atari 7800]**|
**[2600][Atari 2600]**
<br>
<br>
### Other
**[TurboGrafs 16 PC Engine][TurboGrafs-16 / PC Engine]**|
**[WanderSwan Color][WanderSwan / Color]**|
**[Neo Geo Poket][Neo Geo Poket]**
**[PlayStation]**|
**[Arcade]**|
**[MSX]**|
**[3DO]**
</div>
<br>
##### ROMs
**ROMs** can be used as `zip` / `rar` / `7z` archives.
<!-- 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 --->
<br>
##### Netplay
By default **Netplay** is ***disabled***, <br>
to enable it, add the following:
```js
// ID in your website, required for netplay. Each game in your site should have a different ID
EJS_gameID = 1;
```
<br>
by default, the netplay server url will be `emuserver.emulatorjs.ga`, but to default to the default `ws.emulatorjs.com` server add the following line
```js
EJS_oldEJSNetplayServer = true;
```
<br>
*To self host:*
1. Download the **[Server]**.
2. Specify the servers address with:
```js
EJS_netplayUrl = 'http://localhost:3000/'; // Absolute Url To Your Netplay Server
```
<br>
##### Custom Save Filename
To customize the filename of save states <br>
simply add the following lines of code.
```js
EJS_gameName = 'Game Name';
```
**➞ Save Filename:** `Game Name.state`
<br>
##### AD
To place an advertisement in front of the <br>
`play now` screen, include the following line:
```js
EJS_AdUrl = 'URL';
```
<br>
##### Interface Color
To use a different color for the emulator interface, use:
```js
EJS_color = '#FF0000'; // Hex Color Code
```
<br>
##### Direct Start
To start the emulator immediately, add this line:
```js
EJS_startOnLoaded = true;
```
*For audio to play the user still* <br>
*needs to interact with the page.*
<br>
##### Custom Paths
Paths to emulator files can be customized with:
```js
EJS_paths = {
'fileName' : '/somepath',
'emulator.js' : 'https://example.com/emulator.js',
'n64-asmjs.data' : '/asdfds.data'
};
```
*If a file is not defined, the default is used.*
<br>
##### Localization
please see [the localization readme]
<br>
##### USING MAME SYSTEM
you must add the line
```js
EJS_core = 'mame';
```
and the line
```js
EJS_mameCore = '' // mame core options (example: '4|0')
```
set the mame core value to the mame core number (`1` - `6`) + `|` + save states supported (`0` or `1`)
<br>
# LICENSE
Licenced under the GNU General Public License v3.0
Please state changes and the licence when re-distributing
[Read the whole license here]
If I find a repository that does not follow the licence, I will report it.
[License]: LICENSE
[Issue]: https://github.com/ethanaobrien/emulatorjs/issues
<!----------------------------------------------------------------------------->
<!-- 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 Extensions 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 --->
[EmulatorJS Website]: https://emulatorjs.ga/
[Example Use]: https://coldcast.org/games/1/Super-Mario-Bros
[Emulator Demo]: https://emulatorjs.ga/demo/
[GameLibrary]: https://github.com/Ramaerel/emulatorjs-GameLibrary
<!-- 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 Quicklinks 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 --->
[Configurator]: https://emulatorjs.ga/codehelper
[Website]: https://emulatorjs.ga/
[Legacy]: https://coldcast.org/games/1/Super-Mario-Bros
[Usage]: docs/Usage.md
[Demo]: https://emulatorjs.ga/demo/
[Beta]: https://emulatorjs.ga/beta/
[Issue]: https://github.com/ethanaobrien/emulatorjs/issues
[This repository]: https://github.com/linuxserver/emulatorjs
[Server]: https://github.com/ethanaobrien/emuserver/releases
<!-- 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 Systems 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 -->
[the localization readme]: data/localization/
[Read the whole license here]: LICENSE
[Nintendo Game Boy Advance]: docs/Systems/Nintendo%20Game%20Boy%20Advance.md
[Nintendo Game Boy]: docs/Systems/Nintendo%20Game%20Boy.md
[Nintendo 64]: docs/Systems/Nintendo%2064.md
[Nintendo DS]: docs/Systems/Nintendo%20DS.md
[NES / Famicom]: docs/NES-Famicom.md
[SNES]: docs/SNES.md
[Nintendo 64]: docs/Nintendo%2064.md
[Nintendo Game Boy]: docs/Nintendo%20Game%20Boy.md
[Nintendo Game Boy Advance]: docs/Nintendo%20Game%20Boy%20Advance.md
[Nintendo DS]: docs/Nintendo%20DS.md
[PlayStation]: docs/PlayStation.md
[Virtual Boy]: docs/Virtual%20Boy.md
[Sega Mega Drive]: docs/Sega%20Mega%20Drive.md
[Sega Master System]: docs/Sega%20Master%20System.md
[Sega CD]: docs/Sega%20CD.md
[Atari Lynx]: docs/Atari%20Lynx.md
[MSX]: docs/MSX.md
[3DO]: docs/3DO.md
[Sega 32X]: docs/Sega%2032X.md
[Atari Jaguar]: docs/Atari%20Jaguar.md
[Neo Geo Poket]: docs/Neo%20Geo%20Poket.md
[Sega Game Gear]: docs/Sega%20Game%20Gear.md
[Sega Saturn]: docs/Sega%20Saturn.md
[Atari 7800]: docs/Atari%207800.md
[WanderSwan / Color]: docs/WanderSwan-Color.md
[TurboGrafs-16 / PC Engine]: docs/TurboGrafs%2016-PC%20Engine.md
[Arcade]: docs/Arcade.md
[Atari 2600]: docs/Atari%202600.md
[Sega Master System]: docs/Systems/Sega%20Master%20System.md
[Sega Mega Drive]: docs/Systems/Sega%20Mega%20Drive.md
[Sega Game Gear]: docs/Systems/Sega%20Game%20Gear.md
[Sega Saturn]: docs/Systems/Sega%20Saturn.md
[Sega 32X]: docs/Systems/Sega%2032X.md
[Sega CD]: docs/Systems/Sega%20CD.md
[Atari Jaguar]: docs/Systems/Atari%20Jaguar.md
[Atari Lynx]: docs/Systems/Atari%20Lynx.md
[Atari 7800]: docs/Systems/Atari%207800.md
[Atari 2600]: docs/Systems/Atari%202600.md
[NES / Famicom]: docs/Systems/NES-Famicom.md
[SNES]: docs/Systems/SNES.md
[TurboGrafs-16 / PC Engine]: docs/Systems/TurboGrafs%2016-PC%20Engine.md
[WanderSwan / Color]: docs/Systems/WanderSwan-Color.md
[Neo Geo Poket]: docs/Systems/Neo%20Geo%20Poket.md
[PlayStation]: docs/Systems/PlayStation.md
[Virtual Boy]: docs/Systems/Virtual%20Boy.md
[Arcade]: docs/Systems/Arcade.md
[MSX]: docs/Systems/MSX.md
[3DO]: docs/Systems/3DO.md
<!-- 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 Badges 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 --->
[Badge License]: https://img.shields.io/badge/License-GPLv3-blue.svg?style=for-the-badge
[Badge Configurator]: https://img.shields.io/badge/Configurator-992cb3?style=for-the-badge
[Badge Website]: https://img.shields.io/badge/Website-736e9b?style=for-the-badge
[Badge Legacy]: https://img.shields.io/badge/Legacy-ab910b?style=for-the-badge
[Badge Usage]: https://img.shields.io/badge/Usage-2478b5?style=for-the-badge
[Badge Demo]: https://img.shields.io/badge/Demo-528116?style=for-the-badge
[Badge Beta]: https://img.shields.io/badge/Beta-bb044f?style=for-the-badge

View file

@ -5,7 +5,6 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
window.EJS_RESET_VARS.push(k);
}
_0x2c1832.r(_0x17edbf);
_0x2c1832(0xa2), _0x2c1832(0x16c), _0x2c1832(0x16d);
var _0x39ca5e = {
'volume': 0.5,
'muted': false,
@ -99,7 +98,6 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'tabFocus': 'ejs__tab-focus'
}
},
_0x3d61f9 = _0x2c1832(0x38),
_0x5127f4 = _0x2c1832(0x9d),
_0x48e5ff = _0x2c1832.n(_0x5127f4),
_0x406e79 = function(_0x2aa74f) {
@ -584,10 +582,10 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
}]) && _0x4c97b0(_0x17edbf.prototype, _0x2c1832), _0x4496fc && _0x4c97b0(_0x17edbf, _0x4496fc), _0x566dbe;
}();
var _0x13fb79, _0x569918 = _0x2c1832(0x6c),
var _0x13fb79, _0x569918 = _0x2c1832(108),
_0x4e4ca6 = _0x2c1832.n(_0x569918),
_0x4ad1c6 = _0x2c1832(0x6),
_0x4704b1 = _0x2c1832(0x9f),
_0x4ad1c6 = _0x2c1832(6),
_0x4704b1 = _0x2c1832(159),
_0x3a58c8 = _0x2c1832.n(_0x4704b1),
_0x5032e6 = {
'2xScaleHQ.glslp': 'shaders = 1\n\nshader0 = "2xScaleHQ.glsl"\nfilter_linear0 = false\nscale_type_0 = source\n',
@ -604,7 +602,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x5bb4c9 = _0x2c1832(0x39),
_0x50f370 = _0x2c1832.n(_0x5bb4c9),
_0x246d02 = _0x2c1832(0xb),
_0x550f17 = _0x2c1832.n(_0x246d02),
_0x550f17 = _0x2c1832.n(_0x246d02).a,
_0x5ab74d = {
'addStyleHook': function() {
_0x3a8e2f(this.elements.container, this.config.selectors.container.replace('.', ''), true), _0x3a8e2f(this.elements.container, this.config.classNames.uiSupported, true), _0x3a8e2f(this.elements.container, this.config.classNames.hideControls, true);
@ -1563,27 +1561,45 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x139f1c = _0x154dc5[_0x154dc5.length - 0x1];
_0x139f1c.indexOf('?') > -0x1 && (_0x139f1c = _0x139f1c.substr(0x0, _0x139f1c.indexOf('?')));
_0x139f1c.split('.').pop();
_0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data'), ['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x17edbf.system) && _0x17edbf.config.gameParentUrl && (_0x2c1832.innerHTML += ' (2/2)'), _0x17edbf.config.gamePatchUrl && (_0x2c1832.innerHTML += ' (2/2)');
new Promise(async function(resolve, reject) {
_0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data');
if (['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x17edbf.system) && _0x17edbf.config.gameParentUrl) {
_0x2c1832.innerHTML += ' (2/2)';
}
if (_0x17edbf.config.gamePatchUrl) {
_0x2c1832.innerHTML += ' (2/2)';
}
(function() {
if (! _0x3cf3cf.startsWith('blob:')) {
resolve(await _0x550f17.a.head(_0x3cf3cf, {}))
return _0x550f17.a.head(_0x3cf3cf, {});
} else {
var a = await fetch(_0x3cf3cf)
var a = await a.blob()
resolve({headers:{'content-length': a.size, 'content-type': 'text/plain'}})
return new Promise(async function(resolve, reject) {
var a = await fetch(_0x3cf3cf);
a = await a.blob();
resolve({headers:{'content-length': a.size, 'content-type': 'text/plain'}});
})
}
}).then(function(_0x3d703e) {
})().then(function(_0x3d703e) {
var _0x21b526 = _0x3d703e.headers['content-length'],
_0x7e8d4c = _0x3d703e.headers['content-type'],
_0x107e8a = (_0x3d703e.headers['last-modified'], '' .concat(_0x594488, '-').concat(_0x139f1c)),
_0x43a689 = function() {
_0x550f17.a.get(_0x3cf3cf, {
'onDownloadProgress': function(_0x4e7133) {
var _0x13b999 = _0x4e7133.total ? '' .concat(Math.floor(_0x4e7133.loaded / _0x4e7133.total * 0x64), '%') : '';
['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x17edbf.system) && _0x17edbf.config.gameParentUrl ? _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (2/2) ' .concat(_0x13b999) : _0x17edbf.config.gamePatchUrl ? _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (2/2) ' .concat(_0x13b999) : _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' ' .concat(_0x13b999);
},
'responseType': 'arraybuffer'
}).then(function(_0x22a1f4) {
(function() {
if (_0x3cf3cf.startsWith('blob:')) {
return new Promise(async function(resolve, reject) {
var a = await fetch(_0x3cf3cf);
a = await a.arrayBuffer();
resolve({data:a});
})
} else {
return _0x550f17.a.get(_0x3cf3cf, {
'onDownloadProgress': function(_0x4e7133) {
var _0x13b999 = _0x4e7133.total ? '' .concat(Math.floor(_0x4e7133.loaded / _0x4e7133.total * 0x64), '%') : '';
['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x17edbf.system) && _0x17edbf.config.gameParentUrl ? _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (2/2) ' .concat(_0x13b999) : _0x17edbf.config.gamePatchUrl ? _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (2/2) ' .concat(_0x13b999) : _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' ' .concat(_0x13b999);
},
'responseType': 'arraybuffer'
})
}
})().then(function(_0x22a1f4) {
var _0x17edbf = new Uint8Array(_0x22a1f4.data);
if (_0xa88a13.config.gameUrl.startsWith('blob:') || _0xa88a13.config.gameUrl.startsWith('file:') || _0xa88a13.config.gameUrl.startsWith('chrome-extension:') || ((window.location.protocol == 'file:' || window.location.protocol == 'chrome-extension:') && _0xa88a13.config.gameUrl.split(':').length == 1)) {_0x3512e9(_0x139f1c, _0x17edbf);return;};
if (_0x107e8a && _0x4e171c.db)
@ -1620,7 +1636,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
_0x3512e9(_0x139f1c, _0x17edbf);
}).catch(function(_0x2e4d62) {
console.log(_0x2e4d62), _0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
void 0 === _0x2e4d62.response ? _0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;"><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors">'+_0xa88a13.localization('CORS Error')+'</a></strong>' : _0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
});
};
_0x1ffb98.db ? _0x1ffb98.get(_0x107e8a, function(_0x5afc4a) {
@ -1644,7 +1660,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
else _0x43a689();
}) : _0x43a689();
}).catch(function(_0x5ec6be) {
_0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
void 0 === _0x5ec6be.response ? _0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;"><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors">'+_0xa88a13.localization('CORS Error')+'</a></strong>' : _0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
});
},
_0x139f68 = function() {
@ -1655,7 +1671,8 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x179b43 = _0x227b23[_0x227b23.length - 0x1];
_0x179b43.indexOf('?') > -0x1 && (_0x179b43 = _0x179b43.substr(0x0, _0x179b43.indexOf('?')));
_0x179b43.split('.').pop();
_0x2591d9.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/2)', _0x550f17.a.get(_0x5c896f, {
_0x2591d9.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/2)';
_0x550f17.a.get(_0x5c896f, {
'onDownloadProgress': function(_0x3da9ab) {
_0x2591d9.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/2) ';
var _0x17edbf = _0x3da9ab.total ? '' .concat(Math.floor(_0x3da9ab.loaded / _0x3da9ab.total * 0x64), '%') : '';
@ -1693,7 +1710,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}), _0x4c332a = true), _0x4c332a || (_0x468801 += _0x1097ca.length, _0x4d7024.gamePatch = '/' .concat(_0xe531f0), _0x4d7024._FS.createDataFile('/', _0xe531f0, _0x1097ca, true, !0x1), _0x5048db());
}(_0x179b43, _0x39a81f);
}).catch(function(_0x314293) {
console.log(_0x314293), _0x2591d9.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
void 0 === _0x314293.response ? _0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;"><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors">'+_0xa88a13.localization('CORS Error')+'</a></strong>' : _0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
});
} else _0x5048db();
},
@ -1758,7 +1775,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
console.log(_0x125736);
}
}).catch(function(_0x516cc3) {
console.log(_0x516cc3), _0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
void 0 === _0x516cc3.response ? _0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;"><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors">'+_0xa88a13.localization('CORS Error')+'</a></strong>' : _0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
});
};
_0x1ffb98.db ? _0x1ffb98.get(_0x316472, function(_0x3e612b) {
@ -1778,7 +1795,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
else _0x31f098();
}) : _0x31f098();
}).catch(function(_0x20f2e3) {
_0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
void 0 === _0x20f2e3.response ? _0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;"><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors">'+_0xa88a13.localization('CORS Error')+'</a></strong>' : _0x2c1832.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
});
} else _0x139f68();
},
@ -1887,14 +1904,14 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'data': _0x17edbf
}), _0x57d85d(_0x103241, _0x17edbf);
}).catch(function(_0x58e374) {
_0x1f8424.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
void 0 === _0x58e374.response ? _0x1f8424.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;"><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors">'+_0xa88a13.localization('CORS Error')+'</a></strong>' : _0x1f8424.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
});
};
_0xa884ea.db ? _0xa884ea.get(_0x51bfef, function(_0x5cac21) {
_0x5cac21 && _0x5cac21.filename === _0x103241 && _0x5cac21.filesize - _0x8e30bf == 0x0 && _0x5cac21.filetype === _0x14309b ? _0x57d85d(_0x5cac21.filename, _0x5cac21.data) : _0x574747();
}) : _0x574747();
}).catch(function(_0x4f39c1) {
_0x1f8424.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
void 0 === _0x4f39c1.response ? _0x1f8424.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;"><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors">'+_0xa88a13.localization('CORS Error')+'</a></strong>' : _0x1f8424.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xa88a13.localization('Network Error')+'</strong>';
});
} else _0x452592();
},
@ -2026,7 +2043,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
}).catch(function(_0x2e06c8) {
_0x3787ba.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0x2c1832.localization('Network Error')+'</strong>';
void 0 === _0x2e06c8.response ? _0x3787ba.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;"><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors">'+_0xc6823.localization('CORS Error')+'</a></strong>' : _0x3787ba.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xc6823.localization('Network Error')+'</strong>';
});
};
_0x550f17.a.get(_0xa88a13, {}).then(function(_0x578a2b) {
@ -2135,7 +2152,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x254bc2 || _0x1e2c68.element(_0x2c1832.elements.buttons.netplay) && _0x132da7(_0x2c1832.elements.buttons.netplay, true), _0x1e2c68.element(_0x2c1832.elements.buttons.saveState) && _0x132da7(_0x2c1832.elements.buttons.saveState, !_0x5b1dcd), _0x1e2c68.element(_0x2c1832.elements.buttons.loadState) && _0x132da7(_0x2c1832.elements.buttons.loadState, !_0x5b1dcd), _0x132da7(_0x2593da.contextMenu.querySelectorAll('ul li').item(0x2), !_0x5b1dcd), _0x132da7(_0x2593da.contextMenu.querySelectorAll('ul li').item(0x3), !_0x5b1dcd);
_0xc6823.setStatesSupported(_0x5b1dcd);
}).catch(function(_0x2d06a9) {
_0x3787ba.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0x2c1832.localization('Network Error')+'</strong>';
void 0 === _0x2d06a9.response ? _0x3787ba.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;"><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors">'+_0xc6823.localization('CORS Error')+'</a></strong>' : _0x3787ba.innerHTML = '<strong style="color:#f00;text-shadow: 0px 0px 3px;">'+_0xc6823.localization('Network Error')+'</strong>';
}), clearInterval(_0x1c9c57), _0x4d7024.romdb = _0x4e171c;
}
}, 0x1f4);
@ -3452,7 +3469,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
var _0xa88a13 = this,
_0x17edbf = this,
_0x2c1832 = this.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames.overlay)),
_0x181250 = new _0x4ad1c6[('Gamepad')]();
_0x181250 = new _0x4ad1c6.Gamepad();
_0x378b5c.gamepad = _0x181250, _0x181250.init() && (_0x181250.bind(_0x4ad1c6.Gamepad.Event.TICK, function(_0x2fe35d) {
_0x2fe35d.forEach(function(_0x2b21f8) {
var _0x17edbf;
@ -4052,7 +4069,6 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0xa88a13.recordData = {started:false, data:[], stopped: false}
}
if (! _0xa88a13.recordData.started) { //start recording
_0xa88a13.elements.buttons.screenRecord.getElementsByClassName('ejs--74c6d4176d27e37a19d2e9e61de8f4')[0].innerHTML = _0xa88a13.localization('Stop Screen Recording');
if (MediaRecorder.isTypeSupported('video/webm; codecs=h264')) {
var options = {mimeType: 'video/webm; codecs=h264'}; // video/webm; codecs=h264,opus
} else if (MediaRecorder.isTypeSupported('video/webm; codecs=H264')) {
@ -4070,28 +4086,53 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
} else {
var options = {};
}
_0xa88a13.recordData.stream = _0x27f4c4.Module.canvas.captureStream(30);
//_0xa88a13.recordData.stream.addTrack(); // TODO - find audio element
_0xa88a13.recordData.recorder = new MediaRecorder(_0xa88a13.recordData.stream, options);
_0xa88a13.recordData.recorder.ondataavailable = function(e) {
if (e.data.size > 0) {
_0xa88a13.recordData.data.push(e.data)
}
if (_0xa88a13.recordData.stopped) {
var a = document.createElement("a")
a.href = window.URL.createObjectURL(new Blob(_0xa88a13.recordData.data, {type: "video/webm"}))
if (typeof _0xa88a13.gameName == 'string') {
var aname = _0xa88a13.gameName
function gotStreams(stream) {
_0xa88a13.elements.buttons.screenRecord.getElementsByClassName('ejs--74c6d4176d27e37a19d2e9e61de8f4')[0].innerHTML = _0xa88a13.localization('Stop Screen Recording');
_0xa88a13.recordData.stream = stream;
_0xa88a13.recordData.recorder = new MediaRecorder(_0xa88a13.recordData.stream, options);
_0xa88a13.recordData.recorder.ondataavailable = function(e) {
if (e.data.size > 0) {
_0xa88a13.recordData.data.push(e.data)
}
if (_0xa88a13.recordData.stopped) {
var a = document.createElement("a")
a.href = window.URL.createObjectURL(new Blob(_0xa88a13.recordData.data, {type: "video/webm"}))
if (typeof _0xa88a13.gameName == 'string') {
var aname = _0xa88a13.gameName
}
a.download = aname ? '' .concat(aname, '-recording.webm') : 'record.webm';
a.click()
window.URL.revokeObjectURL(a.href)
delete _0xa88a13.recordData
_0xa88a13.elements.buttons.screenRecord.getElementsByClassName('ejs--74c6d4176d27e37a19d2e9e61de8f4')[0].innerHTML = _0xa88a13.localization('Start Screen Recording');
}
a.download = aname ? '' .concat(aname, '-recording.webm') : 'record.webm';
a.click()
window.URL.revokeObjectURL(a.href)
delete _0xa88a13.recordData
_0xa88a13.elements.buttons.screenRecord.getElementsByClassName('ejs--74c6d4176d27e37a19d2e9e61de8f4')[0].innerHTML = _0xa88a13.localization('Start Screen Recording');
}
_0xa88a13.recordData.recorder.start()
_0xa88a13.recordData.started = true
}
_0xa88a13.recordData.recorder.start()
_0xa88a13.recordData.started = true
_0x27f4c4.Module.pauseMainLoop();
_0xa88a13.playing = false;
alert('please check "share system audio" to have audio in the recording. We only need the audio stream so your entire screen will not be recorded');
var canvasStream = _0x27f4c4.Module.canvas.captureStream(30);
var time = setTimeout(function() {
_0xa88a13.playing = true;
_0x27f4c4.Module.resumeMainLoop();
}, 20000);
navigator.mediaDevices.getDisplayMedia({
audio: true, //we only need the audio, we dont use the video stream at all
video: {mediaSource: "screen"}
}).then(function(stream) {
try {
clearTimeout(time);
}catch(e){}
var audio = stream.getAudioTracks();
for (var i=0; i<audio.length; i++) {
canvasStream.addTrack(audio[i]);
}
gotStreams(canvasStream);
_0xa88a13.playing = true;
_0x27f4c4.Module.resumeMainLoop();
})
} else if (_0xa88a13.recordData.started) { //stop recording
_0xa88a13.recordData.recorder.stop()
_0xa88a13.recordData.stopped = true
@ -6239,19 +6280,16 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
split1.push(split3[i])
}
}
if (! path.startsWith('/') && path.split('://').length == 1 && path.split('http:').length == 1 && path.split('https:').length == 1 && path.split('file:').length == 1 && path.split('blob:').length == 1) {
if (! path.startsWith('/') && !path.includes('://') && !path.includes('http:') && !path.includes('https:') && !path.includes('file:') && !path.includes('blob:')) {
for (var w=0; w<split2.length; w++) {
if (split2[w] == '' || split2[w] == '.') {
} else if (split2[w] == '..') {
if (split1.length > 0) {
var split1 = function(origpath) {
var fullrequestpath = origpath
var finpath = fullrequestpath.split('/').pop()
var finalpath = fullrequestpath.substring(0, fullrequestpath.length - finpath.length)
if (origpath == '/') {
if (origpath === '/') {
return '/'
} else {
return finalpath
return origpath.substring(0, origpath.length - origpath.split('/').pop().length);
}
}(split1.join('/')).split('/');
}
@ -6276,7 +6314,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
var a = function(_0x154660, _0x15626f) {
if (!(_0x154660 instanceof _0x15626f)) throw new TypeError('Cannot call a class as a function');
}(this, _0x6954aa);
this.version = '1.1.0';
this.version = '1.1.2';
this.system = '';
this.adUrl = null;
this.gameName = null;
@ -6556,4 +6594,3 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x3dbc76.defaults = {};
_0x17edbf.default = _0x3dbc76;
}

9
data/emu-min.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,12 +1,12 @@
(async function() {
var VERSION = 1.1;
var VERSION = 1.2;
if (window.location && ['localhost', '127.0.0.1'].includes(location.hostname)) {
fetch('https://raw.githack.com/ethanaobrien/emulatorjs/main/data/version.json').then(response => {
if (response.ok) {
response.text().then(body => {
var version = JSON.parse(body);
if (VERSION < version.current_version) {
console.log('Using emulatorjs version ' + usingVersion + ' but the newest version is ' + version.current_version + '\nopen https://github.com/ethanaobrien/emulatorjs to update');
console.log('Using emulatorjs version ' + VERSION + ' but the newest version is ' + version.current_version + '\nopen https://github.com/ethanaobrien/emulatorjs to update');
}
})
}

21
data/minify/index.js Normal file
View file

@ -0,0 +1,21 @@
const UglifyJS = require("uglify-js");
const fs = require('fs');
if (!String.prototype.replaceAll) {
String.prototype.replaceAll = function(a, b) {
return this.split(a).join(b);
}
}
var a = fs.readFileSync('../emu-main.js', 'utf8').substring(18);
var code = fs.readFileSync('../emulator.js', 'utf8').replaceAll('window.EJS_main', a);
function minify(source){
var ast = UglifyJS.parse(source);
return UglifyJS.minify(ast).code;
}
console.log('minifying')
var min = minify(code);
console.log('done!')
fs.writeFileSync('../emu-min.js', min);

22
data/minify/package.json Normal file
View file

@ -0,0 +1,22 @@
{
"name": "emulatorjs-minify",
"version": "1.0.0",
"description": "Minify the emulatorjs javascript files",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "node index.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/ethanaobrien/youtube-downloader.git"
},
"author": "Ethan O'Brien",
"bugs": {
"url": "https://github.com/ethanaobrien/emulatorjs/issues"
},
"homepage": "https://github.com/ethanaobrien/emulatorjs#readme",
"dependencies": {
"uglify-js": "^3.15.3"
}
}

View file

@ -1 +1 @@
{ "current_version": 1.1 }
{ "current_version": 1.2 }

View file

@ -1,47 +0,0 @@
<h2>3DO</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_biosUrl = ''; // Url to Bios file
EJS_gameUrl = ''; // Url to Game rom
EJS_core = '3do';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
Your rom MUST have one of the following extensions
```
.bin
.cue
.iso
```
Panasonic FZ-1 `f47264dd47fe30f73ab3c010015c155b`
Panasonic FZ-10 `51f2f43ae2f3508a14d9f56597e2d3ce`
Panasonic FZ-10 `1477bda80dc33731a65468c1f5bcbee9`
Panasonic FZ-10-E `a48e6746bd7edec0f40cff078f0bb19f`
Panasonic FZ-10-E `cf11bbb5a16d7af9875cca9de9a15e09`
Goldstar GDO-101M `8639fd5e549bd6238cfee79e3e749114`
Sanyo IMP-21J TRY `35fa1a1ebaaeea286dc5cd15487c13ea`
Shootout At Old Tucson `8970fc987ab89a7f64da9f8a8c4333ff`
Panasonic FZ-1 Kanji ROM `b8dc97f778a6245c58e064b0312e8281`
Panasonic FZ-10JA Kanji ROM `428577250f43edc902ea239c50d2240d`
Panasonic FZ-1J Kanji ROM `c23fb5d5e6bb1c240d02cf968972be37`

View file

@ -1,26 +0,0 @@
<h2>Arcade</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_biosUrl = ''; // Url to Bios file
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'arcade';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
Use only FBA v0.2.97.42 ROMs set
Important! all roms must use the same name at support list with extension .zip
neogeo.zip Required for Neo Geo Games `410c65b2debdf4f2dac9ea2b23aa496e`
pgm.zip Required for IGS Games `653e991a39e867354d090c3394157d1c`
isgsm.zip ISG Selection Master Type 2006 BIOS `4a56d56e2219c5e2b006b66a4263c01c`

View file

@ -1,20 +0,0 @@
<h2>Atari 2600</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'atari2600';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
There is no bios for this system

View file

@ -1,20 +0,0 @@
<h2>Atari 7800</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'atari7800';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
There is no bios for this system

View file

@ -1,20 +0,0 @@
<h2>Atari Jaguar</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'jaguar';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
There is no bios for this system

View file

@ -1,20 +0,0 @@
<h2>Atari Lynx</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'lynx';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
There is no bios for this system

View file

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View file

@ -1,22 +0,0 @@
<h2>MSX</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_biosUrl = ''; // Url to Bios file
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'msx';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
<p>You can download the 'Databases' and 'Machines' folders from an <a href='http://bluemsx.msxblue.com/download.html'>official full standalone blueMSX emulator installation.</a> Get blueMSXv282full.zip near the bottom of the page.</p>
Compress the 'Databases' and 'Machines' Folders to 7z or zip archive.

View file

@ -1,27 +0,0 @@
<h2>NES / Famicom</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_biosUrl = ''; // Url to Famicom Disk System bios
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'nes';
EJS_lightgun = false; // Lightgun
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
Your rom MUST have one of the following extensions
```
.fds
.nes
.unif
.unf
```
You can find the famicon BIOS by looking up the md5 sum which is `ca30b50f880eb660a320674ed365ef7a`

View file

@ -1,20 +0,0 @@
<h2>Neo Geo Poket</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'ngp';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
There is no bios for this system

View file

@ -1,19 +0,0 @@
<h2>Nintendo 64</h2>
Code Example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'n64';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system. I know the `.z64` roms work.
There is no bios for this system

View file

@ -1,20 +0,0 @@
<h2>Nintendo DS</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'nds';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
There is no bios for this system

View file

@ -1,27 +0,0 @@
<h2>Nintendo Game Boy Advance</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_biosUrl = '';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'gba';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
You can find the Game Boy Advance BIOS by looking up the md5 sum which is ` a860e8c0b6d573d191e4ec7db1b1e4f6`
You can find the Game Boy BIOS by looking up the md5 sum which is ` 32fbbd84168d3482956eb3c5051637f5`
You can find the Game Boy Color BIOS by looking up the md5 sum which is `dbfce9db9deaa2567f6a84fde55f9680`
You can find the Super Game Boy BIOS by looking up the md5 sum which is `d574d4f9c12f305074798f54c091a8b4`

View file

@ -1,23 +0,0 @@
<h2>Nintendo Game Boy</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_biosUrl = '';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'gb';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
You can find the Game Boy BIOS by looking up the md5 sum which is `32fbbd84168d3482956eb3c5051637f5`
You can find the Game Boy Color BIOS by looking up the md5 sum which is `dbfce9db9deaa2567f6a84fde55f9680`

View file

@ -1,35 +0,0 @@
<h2>PlayStation</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_biosUrl = ''; // Url to Bios file
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'psx';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
Your rom MUST have one of the following extensions
```
.bin
.cue
.img
.mdf
.pbp
.toc
.cbn
.m3u
.ccd
```
You can find the PlayStation 1 JP BIOS by looking up the md5 sum which is `8dd7d5296a650fac7319bce665a6a53c`
You can find the PlayStation 1 US BIOS by looking up the md5 sum which is `490f666e1afb15b7362b406ed1cea246`
You can find the PlayStation 1 EU BIOS by looking up the md5 sum which is `32736f17079d0b2b7024407c39bd3050`

View file

@ -1,31 +0,0 @@
<h2>SNES</h2>
Code Example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'snes';
EJS_mouse = false; // SNES Mouse
EJS_multitap = false; // SNES Multitap
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
Your rom MUST have one of the following extensions
```
.smc
.fig
.sfc
.gd3
.gd7
.dx2
.bsx
.swc
```
There is no bios for this system

View file

@ -1,20 +0,0 @@
<h2>Sega 32X</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'sega32x';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
There is no bios for this system

View file

@ -1,24 +0,0 @@
<h2>Sega CD</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'segaCD';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
You can find the MegaCD EU BIOS by looking up the md5 sum which is `e66fa1dc5820d254611fdcdba0662372`
You can find the SegaCD US BIOS by looking up the md5 sum which is `854b9150240a198070150e4566ae1290`
You can find the MegaCD EU BIOS by looking up the md5 sum which is `278a9397d192149e84e820ac621a8edd`

View file

@ -1,20 +0,0 @@
<h2>Sega Game Gear</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'segaGG';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
GameGear BIOS (bootrom) - Optional `672e104c3be3a238301aceffc3b23fd6`

View file

@ -1,24 +0,0 @@
<h2>Sega Master System</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'segaMS';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
bios_E.sms : MasterSystem EU BIOS (bootrom) - Optional 840481177270d5642a14ca71ee72844c
bios_U.sms : MasterSystem US BIOS (bootrom) - Optional 840481177270d5642a14ca71ee72844c
bios_J.sms : MasterSystem JP BIOS (bootrom) - Optional 24a519c53f67b00640d0048ef7089105

View file

@ -1,20 +0,0 @@
<h2>Sega Mega Drive</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'segaMD';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
There is no bios for this system

View file

@ -1,21 +0,0 @@
<h2>Sega Saturn</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_biosUrl = ''; // Url to Bios file
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'segaSaturn';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
Saturn BIOS - Optional `af5828fdff51384f99b3c4926be27762`

56
docs/Systems/3DO.md Normal file
View file

@ -0,0 +1,56 @@
# 3DO
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = '3do';
// URL to Bios file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following types:
- `bin`
- `cue`
- `iso`
## ROM List
| Name | MD5 Checksum |
|------|--------------|
| Panasonic FZ-1 | `f47264dd47fe30f73ab3c010015c155b`
| Panasonic FZ-10 | `51f2f43ae2f3508a14d9f56597e2d3ce`
| Panasonic FZ-10 | `1477bda80dc33731a65468c1f5bcbee9`
| Panasonic FZ-10-E | `a48e6746bd7edec0f40cff078f0bb19f`
| Panasonic FZ-10-E | `cf11bbb5a16d7af9875cca9de9a15e09`
| Goldstar GDO-101M | `8639fd5e549bd6238cfee79e3e749114`
| Sanyo IMP-21J TRY | `35fa1a1ebaaeea286dc5cd15487c13ea`
| Shootout At Old Tucson | `8970fc987ab89a7f64da9f8a8c4333ff`
| Panasonic FZ-1 Kanji ROM | `b8dc97f778a6245c58e064b0312e8281`
| Panasonic FZ-10JA Kanji ROM | `428577250f43edc902ea239c50d2240d`
| Panasonic FZ-1J Kanji ROM | `c23fb5d5e6bb1c240d02cf968972be37`

48
docs/Systems/Arcade.md Normal file
View file

@ -0,0 +1,48 @@
# Arcade
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'arcade';
// URL to Bios file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROMS
Only use **FBA ROMs** of version`0.2.97.42`
### ROM List
The following **ROMs** must use the listed name.
| Name | MD5 Checksum | Description |
|------|--------------|-------------|
| `neogeo.zip` | `410c65b2debdf4f2dac9ea2b23aa496e` | Required for **Neo Geo Games**
| `pgm.zip` | `653e991a39e867354d090c3394157d1c` | Required for **IGS Games**
| `isgsm.zip` | `4a56d56e2219c5e2b006b66a4263c01c` | **ISG Selection Master Type 2006 BIOS**

View file

@ -0,0 +1,35 @@
# Atari 2600
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'atari2600';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View file

@ -0,0 +1,33 @@
# Atari 7800
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'atari7800';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View file

@ -0,0 +1,37 @@
# Atari Jaguar
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'jaguar';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View file

@ -0,0 +1,32 @@
# Atari Lynx
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'lynx';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

51
docs/Systems/MSX.md Normal file
View file

@ -0,0 +1,51 @@
# MSX
I do not know the file extension limits for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'msx';
// URL to Bios file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## Downloads
You cand download the `Databases` & `Machines` <br>
folders from the **[BlueMSX Emulator]** installation.
Download the `blueMSXv282full.zip` file, <br>
located near the bottom of the page.
Compress the `Databases` and `Machines` <br>
folders to `7z` or `zip` archives.
<!----------------------------------------------------------------------------->
[BlueMSX Emulator]: http://bluemsx.msxblue.com/download.html

View file

@ -0,0 +1,50 @@
# NES / Famicom
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'nes';
// Lightgun
EJS_lightgun = false;
// URL to Famicom Disk System bios
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following types:
- `fds`
- `nes`
- `unif`
- `unf`
### BIOS
You can find the **Famicon BIOS** by looking up the **MD5** checksum: <br>
`ca30b50f880eb660a320674ed365ef7a`

View file

@ -0,0 +1,35 @@
# Neo Geo Pocket
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'ngp';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View file

@ -0,0 +1,35 @@
# Nintendo 64
I do not know the file extension limits for this system. <br>
I know the `.z64` roms work. <br>
There is no bios for this system
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'n64';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View file

@ -0,0 +1,34 @@
# Nintendo DS
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'nds';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View file

@ -0,0 +1,47 @@
# Nintendo Game Boy Advance
I do not know the file extension limits for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'gba';
// URL to Bios file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## BIOS
You can search for the BIOS you need by utilizing the **MD5** checksum.
| Type | MD5 Checksum |
|------|--------------|
| Game Boy Advance | `a860e8c0b6d573d191e4ec7db1b1e4f6`
| Game Boy | `32fbbd84168d3482956eb3c5051637f5`
| Game Boy Color | `dbfce9db9deaa2567f6a84fde55f9680`
| Super Game Boy | `d574d4f9c12f305074798f54c091a8b4`

View file

@ -0,0 +1,45 @@
# Nintendo Game Boy
I do not know the file extension limits for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'gb';
// URL to Bios file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## BIOS
You can search for the BIOS you need by utilizing the **MD5** checksum.
| Type | MD5 Checksum |
|------|--------------|
| Game Boy | `32fbbd84168d3482956eb3c5051637f5`
| Game Boy Color | `dbfce9db9deaa2567f6a84fde55f9680`

View file

@ -0,0 +1,57 @@
# PlayStation
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'psx';
// URL to Bios file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following types:
- `bin`
- `cue`
- `img`
- `mdf`
- `pbp`
- `toc`
- `cbn`
- `m3u`
- `ccd`
## BIOS
You can search for the BIOS you need by utilizing the **MD5** checksum.
| Type | MD5 Checksum |
|------|--------------|
| PlayStation 1 JP | `8dd7d5296a650fac7319bce665a6a53c`
| PlayStation 1 US | `490f666e1afb15b7362b406ed1cea246`
| PlayStation 1 EU | `32736f17079d0b2b7024407c39bd3050`

52
docs/Systems/SNES.md Normal file
View file

@ -0,0 +1,52 @@
# SNES
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'snes';
// SNES Mouse
EJS_mouse = false;
// SNES Multitap
EJS_multitap = false;
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following types:
- `smc`
- `fig`
- `sfc`
- `gd3`
- `gd7`
- `dx2`
- `bsx`
- `swc`

35
docs/Systems/Sega 32X.md Normal file
View file

@ -0,0 +1,35 @@
# Sega 32X
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'sega32x';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

43
docs/Systems/Sega CD.md Normal file
View file

@ -0,0 +1,43 @@
# Sega CD
I do not know the file extension limits for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'segaCD';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## BIOS
You can search for the BIOS you need by utilizing the **MD5** checksum.
| Type | MD5 Checksum |
|------|--------------|
| MegaCD EU | `e66fa1dc5820d254611fdcdba0662372`
| SegaCD US | `854b9150240a198070150e4566ae1290`
| MegaCD EU | `278a9397d192149e84e820ac621a8edd`
<!-- Are those names correct / intended? -->

View file

@ -0,0 +1,35 @@
# Sega Game Gear
I do not know the file extension limits for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'segaGG';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## BIOS
GameGear BIOS (bootrom) - Optional `672e104c3be3a238301aceffc3b23fd6`

View file

@ -0,0 +1,45 @@
# Sega Master System
I do not know the file extension limits for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'segaMS';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## BIOS
You can search for the BIOS you need by utilizing the **MD5** checksum.
(bootrom) - Optional
| Name | MD5 Checksum | Description |
|------|--------------|-------------|
| `bios_E.sms` | `840481177270d5642a14ca71ee72844c` | MasterSystem EU BIOS
| `bios_U.sms` | `840481177270d5642a14ca71ee72844c` | MasterSystem US BIOS
| `bios_J.sms` | `24a519c53f67b00640d0048ef7089105` | MasterSystem JP BIOS
<!-- EU & US have the same checksum? -->

View file

@ -0,0 +1,32 @@
# Sega Mega Drive
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'segaMD';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View file

@ -0,0 +1,39 @@
# Sega Saturn
I do not know the file extension limits for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'segaSaturn';
// URL to Bios file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## BIOS
Saturn BIOS - Optional `af5828fdff51384f99b3c4926be27762`

View file

@ -0,0 +1,39 @@
# TurboGrafs-16 | PC Engine
I do not know the file extension limits for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'pce';
// URL to Bios file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## BIOS
syscard3.pce Super CD-ROM2 System V3.xx - Required `38179df8f4ac870017db21ebcbf53114`

View file

@ -0,0 +1,35 @@
# Virtual Boy
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'vb';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View file

@ -0,0 +1,35 @@
# Wanderswan | Color
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'ws';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View file

@ -1,21 +0,0 @@
<h2>TurboGrafs-16 | PC Engine</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_biosUrl = ''; // Url to Bios file
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'pce';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
syscard3.pce Super CD-ROM2 System V3.xx - Required `38179df8f4ac870017db21ebcbf53114`

143
docs/Usage.md Normal file
View file

@ -0,0 +1,143 @@
# Usage
*For questions please use the* ***[Issue]*** *tab.*
<br>
## Setup
1. Download this repository.<br>
*`Code ➞ Download As Zip`*
2. Use a **WebServer** to host the emulator.
3. Use your **Browser** to navigate to `localhost`
<br>
## ROMs
**ROMs** can be used as `zip` / `rar` / `7z` archives.
<br>
## Netplay
By default **Netplay** is ***disabled***, <br>
to enable it, add the following:
```js
// ID in your website, required for netplay. Each game in your site should have a different ID
EJS_gameID = 1;
```
<br>
by default, the netplay server url will be `emuserver.emulatorjs.ga`, but to default to the default `ws.emulatorjs.com` server add the following line
```js
EJS_oldEJSNetplayServer = true;
```
<br>
*To self host:*
1. Download the **[Server]**.
2. Specify the servers address with:
```js
EJS_netplayUrl = 'http://localhost:3000/'; // Absolute Url To Your Netplay Server
```
<br>
## Custom Save Filename
To customize the filename of save states <br>
simply add the following lines of code.
```js
EJS_gameName = 'Game Name';
```
**➞ Save Filename:** `Game Name.state`
<br>
## AD
To place an advertisement in front of the <br>
`play now` screen, include the following line:
```js
EJS_AdUrl = 'URL';
```
<br>
## Interface Color
To use a different color for the emulator interface, use:
```js
EJS_color = '#FF0000'; // Hex Color Code
```
<br>
## Direct Start
To start the emulator immediately, add this line:
```js
EJS_startOnLoaded = true;
```
*For audio to play the user still* <br>
*needs to interact with the page.*
<br>
## Custom Paths
Paths to emulator files can be customized with:
```js
EJS_paths = {
'fileName' : '/somepath',
'emulator.js' : 'https://example.com/emulator.js',
'n64-asmjs.data' : '/asdfds.data'
};
```
*If a file is not defined, the default is used.*
<br>
## Localization
Please see [the localization README].
<br>
## Using MAME
To use the **MAME** system you will have to add:
```js
EJS_core = 'mame';
EJS_mameCore = '' // mame core options (example: '4|0')
```
to your code.
Set the mame core value to the mame core number ( `1` - `6` ) + `|` + save states supported ( `0` or `1` )
<!----------------------------------------------------------------------------->
[Issue]: https://github.com/ethanaobrien/emulatorjs/issues
[Server]: https://github.com/ethanaobrien/emuserver/releases
[the localization readme]: data/localization/

View file

@ -1,20 +0,0 @@
<h2>Virtual Boy</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'vb';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
There is no bios for this system

View file

@ -1,20 +0,0 @@
<h2>Wanderswan | Color</h2>
Code example
```
<div style="width:640px;height:480px;max-width:100%">
<div id="game"></div>
</div>
<script type="text/javascript">
EJS_player = '#game';
EJS_gameUrl = ''; // Url to Game rom
EJS_core = 'ws';
EJS_pathtodata = 'data/'; //path to all of the wasm and js files. MUST all be in the same directory!!
</script>
<script src="data/loader.js"></script>
```
I do not know the file extension limits for this system.
There is no bios for this system

View file

@ -1,157 +1,179 @@
<!DOCTYPE html>
<html>
<head>
<title>Emulatorjs | Select Game Rom</title>
<link rel="icon" type="image/png" href="docs/Emulatorjs Logo.png">
</head>
<head>
<title>EmulatorJS</title>
<link rel = icon href = docs/Logo.png>
<meta name = viewport content = "width = device-width, initial-scale = 1">
<style>
body, html {
height: 100%;
}
body {
font-family: monospace;
font-weight: bold;
font-size: 20px;
margin: 0;
overflow: hidden;
background-color: #222
}
body, #box {
display: flex;
align-items: center;
justify-content: center;
}
#box {
color: #aaa;
height: 20em;
width: 30em;
max-width: 80%;
max-height: 80%;
background-color: #333;
border-radius: 0.4em;
border: 2px solid #555;
position: relative;
flex-direction: column;
transition-duration: 0.2s;
overflow: hidden
}
#box:hover, #box[drag] {
border-color: #38f;
color: #ddd
}
#input {
cursor: pointer;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
opacity: 0
}
#display {
width: 100%;
height: 100%
}
select, button {
padding: 0.6em 0.4em;
margin: 0.5em;
width: 15em;
max-width: 100%;
font-family: monospace;
font-weight: bold;
font-size: 16px;
background-color: #444;
color: #aaa;
border-radius: 0.4em;
border: 1px solid #555;
cursor: pointer;
transition-duration: 0.2s
}
select:hover, button:hover {
background-color: #666;
color: #ddd
}
</style>
</head>
<body>
<style>
body{
background: #c4bdff;
margin: 0;
padding: 0;
}
.form{
position: absolute;
top: 450px;
left: 50%;
margin-top: -150px;
margin-left: -250px;
width: 500px;
height: 200px;
border: 4px dashed #111;
}
.form p{
width: 100%;
height: 100%;
text-align: center;
line-height: 170px;
color: #111;
font-family: Arial;
}
.form input{
position: absolute;
margin: 0;
padding: 0;
width: 100%;
height: 100%;
outline: none;
opacity: 0;
}
.eimg{
width: 250px;
}
#uploadf, #uploadf1{
display: block;
}
</style>
<div id = box>
<input type = file id = input>
Drag ROM file or click here
</div>
<script>
window.addEventListener('load', function() {
document.getElementById('file').onchange = async function(e) {
var ce = function(e) {return document.createElement(e);};
var br = function(e) {e.appendChild(ce('br'))};
var gameUrl = URL.createObjectURL(new Blob([e.target.files[0]]))
var extension = e.target.files[0].name.split('.').pop()
var gameName = e.target.files[0].name.replaceAll("'", "\\'")
var gameName = gameName.substr(0, gameName.length - extension.length - 1)
e.target.remove();
document.getElementById('uploadf').style.display = "none"; document.getElementById('uploadf1').style.display = "none";
if (['fds', 'nes', 'unif', 'unf'].includes(extension)) {
var core = 'nes';
} else if (['z64'].includes(extension)) {
var core = 'n64';
} else if (['smc', 'fig', 'sfc', 'gd3', 'gd7', 'dx2', 'bsx', 'swc'].includes(extension)) {
var core = 'snes';
} else if (['nds'].includes(extension)) {
var core = 'nds';
} else if (['gba'].includes(extension)) {
var core = 'gba';
} else if (['gb'].includes(extension)) {
var core = 'gb';
} else {
var core = await function() {
return new Promise(function(resolve, reject) {
var cores = {"NES / Nintendo Entertainment System / Famicon": "nes",
"SNES / Super Nintendo Entertainment System": "snes",
"Nintendo 64": "n64",
"Nintendo Game Boy": "gb",
"Nintendo Game Boy Advance": "gba",
"Nintendo DS": "nds",
"PlayStation": "psx",
"Virtual Boy": "vb",
"Sega Mega Drive": "segaMD",
"Sega Master System": "segaMS",
"Sega CD": "segaCD",
"Atari Lynx": "lynx",
"Sega 32X": "sega32x",
"Atari Jaguar": "jaguar",
"Sega Game Gear": "segaGG",
"Sega Saturn": "segaSaturn",
"Atari 7800": "atari7800",
"Atari 2600": "atari2600"};
var a = ce('div');
a.style = 'padding: 50px;';
var p = ce('h2');
p.innerHTML = 'Unable to auto-detect system. Please select the desired system.';
a.appendChild(p);
br(a);
for (var k in cores) {
var input = ce('input');
input.type = 'radio';
input.id = 'game-' + cores[k];
input.name = 'game';
input.value = cores[k];
a.appendChild(input);
var label = ce('label');
label.for = 'game-' + cores[k];
label.innerHTML = k;
a.appendChild(label);
br(a);
};
br(a);
var submit = ce('input');
submit.type = 'submit';
submit.value = 'Load Game';
submit.onclick = function(e) {
var q = false;
var radios = document.getElementsByName('game');
for (var i=0; i<radios.length; i++) {
if (radios[i].checked) {
var q = radios[i].value;
break;
};
};
if (! q) {
return;
};
a.remove();
resolve(q);
};
a.appendChild(submit);
document.body.appendChild(a);
});
}();
};
var a = document.createElement('div');
a.style = "width:65%;height:100%;max-width:100%";
var b = document.createElement('div');
b.id = 'game';
a.appendChild(b);
document.getElementById("cont").appendChild(a);
var script = document.createElement('script');
script.innerHTML = "EJS_player = '#game'; EJS_gameName = '" + gameName + "'; EJS_biosUrl = ''; EJS_gameUrl = '" + gameUrl + "'; EJS_core = '" + core + "'; EJS_pathtodata = 'data/';";
document.body.appendChild(script);
var script = document.createElement('script');
script.src = 'data/loader.js';
document.body.appendChild(script);
}
})
input.onchange = async () => {
const url = URL.createObjectURL(new Blob([input.files[0]]))
const parts = input.files[0].name.split(".")
const core = await (async (ext) => {
if (["fds", "nes", "unif", "unf"].includes(ext))
return "nes"
if (["smc", "fig", "sfc", "gd3", "gd7", "dx2", "bsx", "swc"].includes(ext))
return "snes"
if (["z64", "n64"].includes(ext))
return "n64"
if (["nds", "gba", "gb", "z64", "n64"].includes(ext))
return ext
return await new Promise(resolve => {
const cores = {
"Nintendo 64": "n64",
"Nintendo Game Boy": "gb",
"Nintendo Game Boy Advance": "gba",
"Nintendo DS": "nds",
"Nintendo Entertainment System": "nes",
"Super Nintendo Entertainment System": "snes",
"PlayStation": "psx",
"Virtual Boy": "vb",
"Sega Mega Drive": "segaMD",
"Sega Master System": "segaMS",
"Sega CD": "segaCD",
"Atari Lynx": "lynx",
"Sega 32X": "sega32x",
"Atari Jaguar": "jaguar",
"Sega Game Gear": "segaGG",
"Sega Saturn": "segaSaturn",
"Atari 7800": "atari7800",
"Atari 2600": "atari2600"
}
const button = document.createElement("button")
const select = document.createElement("select")
for (const type in cores) {
const option = document.createElement("option")
option.value = cores[type]
option.textContent = type
select.appendChild(option)
}
button.onclick = () => resolve(select[select.selectedIndex].value)
button.textContent = "Load game"
box.innerHTML = ""
box.appendChild(select)
box.appendChild(button)
})
})(parts.pop())
const div = document.createElement("div")
const sub = document.createElement("div")
const script = document.createElement("script")
sub.id = "game"
div.id = "display"
box.remove()
div.appendChild(sub)
document.body.appendChild(div)
window.EJS_player = "#game"
window.EJS_gameName = parts.shift()
window.EJS_biosUrl = ""
window.EJS_gameUrl = url
window.EJS_core = core
window.EJS_pathtodata = "data/"
script.src = "data/loader.js"
document.body.appendChild(script)
}
box.ondragover = () => box.setAttribute("drag", true)
box.ondragleave = () => box.removeAttribute("drag")
</script>
<center id="cont">
<img id="uploadf1" class="eimg" src="docs/Emulatorjs Logo.png">
</center>
<div id="uploadf" class="form">
<input type="file" id="file">
<b><p>Select Game Rom: Drag your files here or click in this area.</p></b>
</div>
</body>
</html>