From eb6d7be2d0c2ca2ffb03f96e47eec25ba2bdb105 Mon Sep 17 00:00:00 2001 From: Ethan O'Brien <77750390+ethanaobrien@users.noreply.github.com> Date: Tue, 18 Jul 2023 10:56:27 -0500 Subject: [PATCH] Add repo docs --- .github/FUNDING.yml | 13 + .github/ISSUE_TEMPLATE/bug.md | 30 + .github/workflows/main.yml | 42 + .gitignore | 1 - CHANGES.md | 247 ++ CNAME | 1 + CODE_OF_CONDUCT.md | 128 + README.md | 193 + a.html | 28 - ads.txt | 1 + data/{css/main.css => emulator.css} | 0 data/emulator.js | 20 +- data/loader.js | 15 +- data/version.json | 1 + docs/Contributors.md | 109 + docs/Logo-light.png | Bin 0 -> 24096 bytes docs/Logo.png | Bin 0 -> 23317 bytes docs/Logo.svg | 4487 +++++++++++++++++++++ docs/Systems/3DO.md | 56 + docs/Systems/Arcade.md | 37 + docs/Systems/Atari 2600.md | 35 + docs/Systems/Atari 5200.md | 37 + docs/Systems/Atari 7800.md | 33 + docs/Systems/Atari Jaguar.md | 37 + docs/Systems/Atari Lynx.md | 32 + docs/Systems/MAME 2003.md | 35 + docs/Systems/NES-Famicom.md | 52 + docs/Systems/Nintendo 64.md | 42 + docs/Systems/Nintendo DS.md | 54 + docs/Systems/Nintendo Game Boy Advance.md | 50 + docs/Systems/Nintendo Game Boy.md | 49 + docs/Systems/PlayStation.md | 54 + docs/Systems/SNES.md | 57 + docs/Systems/Sega CD.md | 43 + docs/Systems/Sega Game Gear.md | 35 + docs/Systems/Sega Master System.md | 45 + docs/Systems/Sega Mega Drive.md | 32 + docs/Systems/Sega Saturn.md | 39 + docs/Systems/Virtual Boy.md | 38 + docs/favicon.ico | Bin 0 -> 128918 bytes 40 files changed, 6172 insertions(+), 36 deletions(-) create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug.md create mode 100644 .github/workflows/main.yml create mode 100644 CHANGES.md create mode 100644 CNAME create mode 100644 CODE_OF_CONDUCT.md create mode 100644 README.md delete mode 100644 a.html create mode 100644 ads.txt rename data/{css/main.css => emulator.css} (100%) create mode 100644 data/version.json create mode 100644 docs/Contributors.md create mode 100644 docs/Logo-light.png create mode 100644 docs/Logo.png create mode 100644 docs/Logo.svg create mode 100644 docs/Systems/3DO.md create mode 100644 docs/Systems/Arcade.md create mode 100644 docs/Systems/Atari 2600.md create mode 100644 docs/Systems/Atari 5200.md create mode 100644 docs/Systems/Atari 7800.md create mode 100644 docs/Systems/Atari Jaguar.md create mode 100644 docs/Systems/Atari Lynx.md create mode 100644 docs/Systems/MAME 2003.md create mode 100644 docs/Systems/NES-Famicom.md create mode 100644 docs/Systems/Nintendo 64.md create mode 100644 docs/Systems/Nintendo DS.md create mode 100644 docs/Systems/Nintendo Game Boy Advance.md create mode 100644 docs/Systems/Nintendo Game Boy.md create mode 100644 docs/Systems/PlayStation.md create mode 100644 docs/Systems/SNES.md create mode 100644 docs/Systems/Sega CD.md create mode 100644 docs/Systems/Sega Game Gear.md create mode 100644 docs/Systems/Sega Master System.md create mode 100644 docs/Systems/Sega Mega Drive.md create mode 100644 docs/Systems/Sega Saturn.md create mode 100644 docs/Systems/Virtual Boy.md create mode 100644 docs/favicon.ico diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..8692f15 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,13 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: EmulatorJS # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md new file mode 100644 index 0000000..432b5e5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -0,0 +1,30 @@ +--- +name: Bug +about: Something isn't functioning as intended +title: "[Bug]" +labels: '' +assignees: '' + +--- + + +#### Make sure your issue doesn't get closed! Make sure you have done the following items + +- [ ] I have collected a **FULL** log of the console, with `EJS_DEBUG_XX` set to true, and uploaded it straight to GitHub. +- [ ] I have not made any changes to the EmulatorJS instance I am running into this bug on. +- [ ] I am on the latest version of EmulatorJS +- [ ] I have not attached any images or logs via external sites. I have uploaded them straight to GitHub and acknowledge that external sites may pose a security issue. +- [ ] I have included, **IN DETAIL**, the steps to reproduce the bug. + + diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..0a35840 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,42 @@ +name: Minify Code + +on: [push, pull_request, workflow_dispatch] + +jobs: + paths-filter: + runs-on: ubuntu-latest + outputs: + output1: ${{ steps.filter.outputs.data }} + steps: + - uses: actions/checkout@v2 + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: | + data: + - 'data/**' + # run only if 'data' files were changed + - name: workflow tests + if: steps.filter.outputs.data == 'true' + run: echo "Data file" + + # run only if not 'data' files were changed + - name: not workflow tests + if: steps.filter.outputs.data != 'true' + run: echo "NOT Data file" + + next-job: + runs-on: ubuntu-latest + # Wait from the paths-filter to be completed before starting next-job + needs: paths-filter + if: needs.paths-filter.outputs.output1 == 'true' + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '12' + - run: cd data/minify && npm install + - run: cd data/minify && npm run build + - uses: EndBug/add-and-commit@v9 + with: + default_author: github_actions diff --git a/.gitignore b/.gitignore index 8e06e59..e8c826a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ **/node_modules/ data/minify/package-lock.json *.db -roms/ diff --git a/CHANGES.md b/CHANGES.md new file mode 100644 index 0000000..37b8cf9 --- /dev/null +++ b/CHANGES.md @@ -0,0 +1,247 @@ +# Changes + +# 4.0 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/f7fa5d41487a424233b40e903020455606d68fee) +- Fixed iOS bug for iPads +- Added netplay! (only working on new cores) + +# 3.1.5 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/f7fa5d41487a424233b40e903020455606d68fee) +- Fixed iOS bug for iPads +- Added netplay! (only working on new cores) + +# 3.1.0 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/614f5cb55e2768199ba05b756b47d0ab7ab283fd) +- Added ability to drag and drop save states. +- Fixed some "update" and "cancel" and "close" button confustion +- Removed save state retroarch messages +- Beta netplay cleanup (not yet working) +- (Theoretically) fixed a bug that did not allow iOS devices to work + +# 3.0.5 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/44c31371fb3c314cd8dea36ccbaad89fb3ab98e6) +- Fixed screen recording on devices that do not support getUserMedia api. +- Added C label buttons to nintendo 64 virtual gamepad. +- Fixed EJS_color bug. +- Savestates are pulled from the core itself, to always be correct. +- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x) +- D-pad for virtual gamepad. +- Updated translation files to include new menu options. +- Ability to add more than one zone object to virtual gamepads. +- Added ability to set custom menu options. +- Virtual gamepad left handed mode. +- Fixed Screen record svg. +- Updated svg icons. +- Cache "clear all" button. +- Cache button moved to menu bar. +- Added feature that will display the current downloaded size when the content length is not available. + +# 2.3.9 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/088942083e44510f07133f2074a2d63a8af477cd) +- Fixed incorrect variable referencing when update bios download data callback. +- Fixed rom storage size limits. +- Fixed download percent not showing with some files. + +# 2.3.8 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/5f176b963e4b2055983b82396378d1e3837a69c4) +- Remove broken shader. +- Add download percent message. +- Fixed UI "saving state" message not going away. + +# 2.3.7 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/8b9607becfe0aaad42b8b8486c7d379821b72125) +- Add more shaders. +- Add bold fontsize option to custom virtual gamepad settings. +- No longer set "normalOptions" from localization file. + +# 2.3.6 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/b2919bc2c3d2d4c9fe3ab4f4486790a376b7acfe) +- Remove default control mappings for gamepads. +- Upgraded invalid character regex to catch more characters. + +# 2.3.5 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/a5a9916aba041e75ee73815376ed4fd2e22701bd) +- Use regex to detect and replace invalid characters in filename/gamename settings. + +# 2.3.4 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/45d982b6362cfd29cb2eda9721066e03893ba0d8) +- Add new arcade core. +- Fix patch file game id set bug. + +# 2.3.4 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/45d982b6362cfd29cb2eda9721066e03893ba0d8) +- Add new arcade core. + +# 2.3.3 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/11bddd5a4277aa04f80b941f05cc024b3de58bfc) +- Make version in loader.js reasonable. +- Created function to return the game id to prevent unnecessary data stored. + +# 2.3.2 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/e9e017435f2c41c6c2b127024cc88ac51bdf04d9) +- Fix reference error. +- Fix bug in custom virtual gamepad processor where if value is set to 0 it will see that as the value being missing. + +# 2.3.1 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/0fd6d58e2011fa1a39bd2e11ba3d2f17773f0961) +- Use let instead of var. + +# 2.3.0 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/2fd0f545285151524262cc799efef6d996d7c6c1) +- Added ability to customize virtual gamepad UI. +- Fixed bug where shader is not set on start. + +# 2.2.9 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/018c39d4065b866487f8f18ca88c9488eab69a6d) +- Added feature to save save files to indexeddb every 5 minutes. + +# 2.2.8 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/9860d662d02b56417044cca11937448041d9cf43) +- Re-write gamepad handler. + +# 2.2.7 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/c03d18990b6536c1503bba2c640dbc13db982bb3) +- Removed un-needed FS proxy functions. + +# 2.2.6 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/fd71b5dfc2bd44d8e1f0e7c6c7b3ee1a1127a696) +- Added fps counter. +- Fixed gba core aspect. + +# 2.2.5 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/4b444ec23918149a6052807d778af82f79883c01) +- Added ability to set custom control mappings. +- Added ability to set custom default volume value. +- Fixed gamepad axis as button, gamepad varaible compared to incorrect value. +- Added ability to hide/show menu/context menu buttons. +- Added ability to set game url to other data types. + +# 2.2.3 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/41eed05677b4927bd114613040bfe4572c92c4b4) +- Fixed rar unarchiving function reference. +- Updated rar header detection. +- Removed netplay. + +# 2.2.1 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/19980deb12c3f0790176db6fc7b8b2de4069bf4e) +- Added core menu options for new cores. +- Added new mame2003 core. +- Added support for debug emscripten setting for new cores. + +# 2.0.1 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/a72222c39a793c4ff470ebb2b71c04829fee4b5e) +- Control mapping for beta cores. +- Updated beta cores. +- Beta cores now the default option! +- Added a5200 core. +- Fixed save state for new n64 core. + +# 1.2.2 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/8ab7bb3f49da373ed5d291c5f72039bbabf2fbc8) +- Moved virtual gamepad menu button to the top left as 3 lines. +- Added screen orientation lock. +- Added beta n64 core! + +# 1.2.1 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/638658e6202fd39cb5c94bedcfa00ccdf8b25840) +- Updated beta core files. + +# 1.1.6 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/fa153ba76791184d978f9fb8b69991b05b161bc8) +- Replaced axios module with custom script. +- Added pause/play for beta cores. +- Sepperated css into its own file. +- Renamed emu-min.js to emulator.min.js. + +# 1.1.5 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/2767c635b8a6e05c57e054d2f9d01ae0c4ff6d47) +- Cleaned up fetch error function. +- Cleaned up virtual gamepad event listeners. +- Add code of conduct. + +# 1.1.2 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/64731dd8219931155b4e698aa98dbf65c2120038) +- Fixed error where mame files were misnamed. +- Fixed bug where variable referenced was not defined in loader.js. +- Added .gitignore +- Added nodejs script to minify js files. +- Added audio to screen recording. +- Removed lots of dead code from emulator.js file. +- Update axios module. +- Added CORS error message +- Update nodejs buffer module. + +# 1.1.0 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/715ded4ae23c2135bc9a8b9b7599f12c905393b3) +- Added minify feature. +- Added emulatorjs logo. +- Added beta nds and gb core. +- Fixed bug where when wasm was supported on the beta cores and not the old cores, a network error would appear if not using beta. +- Added volume setting and cheats to beta cores. + +# 1.0 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/fde44b095bb89e299daaaa4c8d7deebc79019865) +- Official release of the beta cores. +- Ability to use beta cores in production. +- Ability to use the old emulatorjs netplay server. +- Set screen recording out file name to gamename if present. +- Set screenshot out file name to gamename if present. +- Fixed virtual gamepad bug where a function was referenced to as an array. + +# 0.4.26 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/0709829a11266b6ab4bbbf3e61d6dd6d3c372133) +- Sepperated emulator.js file into 2 files. +- Added support for a custom netplay server. +- Fixed netplay room password input bug. +- Fixed bug on iOS where virtual gamepad zone was un-responsive. +- Added save state location feature. +- Added mame core setting. +- Added beta cores! +- Added localization. +- Re-wrote virtual gamepad code. +- Added EJS_terminate function. +- Exposed simulate_input function to window. +- Update webrtc adapter. + +# 0.4.25 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/ef3200ef87bffe57241e05ae9646cc201142ec46) +- Moved load state on start from loader.js file to emulator.js file. +- Moved data path function from loader.js file to emulator.js file. +- Added ability to set custom path to data through `EJS_pathtodata` variable. +- Added support for custom paths. +- Expose the module and loader to window. +- Added `EJS_startOnLoaded` to start the emulator on load. +- Added quick save state slots. +- Added save state message. +- Only show save state slot in settings when save states are supported. +- Added ds pointer lock. +- Added menu button to virtual gamepad. Menu will only open when clicked on mobile. +- Created licenese +- Created official emulatorjs website. + +# 0.4.24 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/73ff641616bcd10f088a004002183760832a1afc) +- Deobsfocuted emulator.js and loader.js files to the most of my extent. +- Added quick save/load hotkeys. +- Added ability to use gamepad axis as button. +- Fixed typo in controls title. +- Only show needed inputs per system in control settings. +- Re-write the loader.js file. +- Exposed some variables to window. +- Cleaned up context menu code. +- Cleaned up some syntax in emulator.js file. +- Declared `EJS_AdUrl` through loader.js file. +- Fixed bug where mapping an axis as a button didn't work. +- Added missing legacy n64 core. +- Updated n64 core. + +# 0.4.23-07 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/83e148c82cbc8b4e835a808dcf84456975f82a7c) +- Removed not needed code. +- Added reset button to control settings. +- Added clear button to control settings. +- Added `EJS_AdUrl` option, the ability to add an ad to the emulator. +- Cleaned up some file fetching. +- Fixed RAR unarchiving. + +# 0.4.23-05 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/018c787ccf6daca58c863d38fff61910f33f98ec) +- No longer cache games with the protocols of `file:`, and `chrome-extension:`. +- Changed default keymappings. +- Added screen recording button. + +# 0.4.23-04 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/6464bbedc1cd58c023cd66656540fc174aedde8b) +- Added mame2003, snes2002, snes2005, snes2010, and vbanext cores. +- Added asmjs for all supported cores. + +# 0.4.23-03 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/c883f267e1e56ed6b6472b891f78704c6e4b4c17) +- Start loader.js deobsfocuting. +- Deobsfocute extractzip.js. +- Added `EJS_gameName`, the ability to change the file name of save states. + +# 0.4.23-02 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/5d97620b25a81e49c6ba313e586fb37a5ce66002) +- Start emulator.js deobsfocuting. + +# 0.4.23-01 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/42a7e129cfded266b72539e8d1b5978d5e4119d8) +- Added support for loading "blob:" urls. +- Added support for loading state on game start. + +# 0.4.23 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/5f5cf5cbba29cfd772d525a4c73a4bc5ea26654c) +- Added update available message. +- Fixed a bug where the 'x' from the ad iframe was still visible on game start. +- Added a2600 and mame cores. +- Remove visible 'x' +- Add rar extraction support. + +# 0.4.19 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/4fd22871663e5896bb5d0ce29a50ad508462387a) +- Added support for 32x, 3do, a7800, arcade, bluemsx, jaguar, lynx, ngp, pce, saturn, sega, segacd, and ws cores. + +# Initial release [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/be2db16cba8bd85bf901cd89ca6de51414cea792) +- Support for unzipping zip files. +- Support for unzipping 7zip files. +- Support for vb, snes, psx, nes, nds, n64, gba, and gb systems. Only support for WASM. diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..7032dd5 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +demo.emulatorjs.org \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..d026035 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +ethan.a.obrien@gmail.com. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a8e4bf0 --- /dev/null +++ b/README.md @@ -0,0 +1,193 @@ + +
+ + + + +
+
+ +[![Badge License]][License] + + +Self-hosted **Javascript** emulation for various system. + +
+ +Try out netplay [here](https://demo.emulatorjs.org/demos/netplay.html)! + +
+ +[![Button Website]][Website]  +[![Button Usage]][Usage]
+[![Button Configurator]][Configurator]
+[![Button Demo]][Demo]  +[![Button Legacy]][Legacy] + +[![Button Contributors]][Contributors] + +Join our Discord server: + +[![Join our Discord server!](https://invite.caspertheghost.me/?inviteCode=6akryGkETU&format=svg)](https://discord.gg/6akryGkETU) + +
+ +
+ +### Ads + +*This project has no ads.*
+*Although, the demo page currently has an ad to help fund this project.*
+*Ads on the demo page may come and go depending on how many people are*
+*funding this project.*
+ +*You can help fund this project on* ***[patreon]*** + +
+ + + +### Issues + +*If something doesn't work, please consider opening an* ***[Issue]***
+*with as many details as possible, as well as the console log.* + +
+ +### Extensions + + **[GameLibrary]** + +   *A library overview for your **ROM** folder.* + +
+ +**>> When reporting bugs, please specify that you are using the old version** + +
+
+
+ +

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]**   |  +**[CD][Sega CD]** + +
+
+ +### Atari + +**[2600][Atari 2600]**   |  +**[5200][Atari 5200]**   |  +**[7800][Atari 7800]**   |  +**[Lynx][Atari Lynx]**   |  +**[Jaguar][Atari Jaguar]** + + +
+
+ +### Other + +**[PlayStation]**   |  +**[Arcade]**   |  +**[3DO]**   |  +**[MAME 2003]** + +
+ +
+ + + + +[License]: LICENSE +[Issue]: https://github.com/ethanaobrien/emulatorjs/issues +[patreon]: https://patreon.com/EmulatorJS + + + + +[GameLibrary]: https://github.com/Ramaerel/emulatorjs-GameLibrary + + + + +[Configurator]: https://emulatorjs.org/editor.html +[Contributors]: docs/Contributors.md +[Website]: https://emulatorjs.org/ +[Legacy]: https://coldcast.org/games/1/Super-Mario-Bros +[Usage]: https://emulatorjs.org/docs/ +[Demo]: https://demo.emulatorjs.org/ + + + + +[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 + +[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 +[Atari 5200]: docs/Systems/Atari%205200.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 +[MAME 2003]: docs/Systems/MAME%202003.md + + + + +[Badge License]: https://img.shields.io/badge/License-GPLv3-blue.svg?style=for-the-badge + +[Button Configurator]: https://img.shields.io/badge/Configurator-992cb3?style=for-the-badge +[Button Contributors]: https://img.shields.io/badge/Contributors-54b7dd?style=for-the-badge +[Button Website]: https://img.shields.io/badge/Website-736e9b?style=for-the-badge +[Button Legacy]: https://img.shields.io/badge/Legacy-ab910b?style=for-the-badge +[Button Usage]: https://img.shields.io/badge/Usage-2478b5?style=for-the-badge +[Button Demo]: https://img.shields.io/badge/Demo-528116?style=for-the-badge +[Button Beta]: https://img.shields.io/badge/Beta-bb044f?style=for-the-badge diff --git a/a.html b/a.html deleted file mode 100644 index 0a09e71..0000000 --- a/a.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - -
-
-
- - - - - diff --git a/ads.txt b/ads.txt new file mode 100644 index 0000000..4cad853 --- /dev/null +++ b/ads.txt @@ -0,0 +1 @@ +google.com, pub-8832864985153925, DIRECT, f08c47fec0942fa0 \ No newline at end of file diff --git a/data/css/main.css b/data/emulator.css similarity index 100% rename from data/css/main.css rename to data/emulator.css diff --git a/data/emulator.js b/data/emulator.js index fa6d6e0..2122dd4 100644 --- a/data/emulator.js +++ b/data/emulator.js @@ -20,7 +20,6 @@ class EmulatorJS { 'mame2003': 'mame2003', 'fbalpha2012_cps1': 'arcade', 'fbalpha2012_cps2': 'arcade', - 'mednafen_psx': 'psx', 'mednafen_psx_hw': 'psx', 'melonds': 'nds', 'nestopia': 'nes', @@ -157,14 +156,27 @@ class EmulatorJS { })(); } } + checkForUpdates() { + fetch('https://raw.githack.com/EmulatorJS/EmulatorJS/main/data/version.json').then(response => { + if (response.ok) { + response.text().then(body => { + let version = JSON.parse(body); + if (this.ejs_num_version < version.current_version) { + console.log('Using emulatorjs version ' + this.ejs_num_version + ' but the newest version is ' + version.current_version + '\nopen https://github.com/EmulatorJS/EmulatorJS to update'); + } + }) + } + }) + } constructor(element, config) { - this.ejs_version = "4.0"; + this.ejs_version = "4.0.1"; + this.ejs_num_version = 40.1; + this.debug = (window.EJS_DEBUG_XX === true); + if (this.debug || (window.location && ['localhost', '127.0.0.1'].includes(location.hostname))) this.checkForUpdates(); this.netplay = false; //DO NOT ENABLE UNLESS YOU KNOW WHAT YOU'RE DOING this.config = config; - window.EJS_TESTING = this; this.currentPopup = null; this.touch = false; - this.debug = (window.EJS_DEBUG_XX === true); this.cheats = []; this.started = false; this.volume = (typeof this.config.volume === "number") ? this.config.volume : 0.5; diff --git a/data/loader.js b/data/loader.js index 7e883b8..e690be8 100644 --- a/data/loader.js +++ b/data/loader.js @@ -41,7 +41,7 @@ await loadScript('gamepad.js'); await loadScript('GameManager.js'); await loadScript('socket.io.min.js'); - await loadStyle('css/main.css'); + await loadStyle('emulator.css'); } const config = {}; config.gameUrl = window.EJS_gameUrl; @@ -51,7 +51,7 @@ config.gameName = window.EJS_gameName; config.color = window.EJS_color; config.adUrl = window.EJS_AdUrl; - config.adTimer = window.EJS_AdTimer + config.adTimer = window.EJS_AdTimer; config.VirtualGamepadSettings = window.EJS_VirtualGamepadSettings; config.buttonOpts = window.EJS_Buttons; config.volume = window.EJS_volume; @@ -83,6 +83,15 @@ } } - new EmulatorJS(EJS_player, config); + window.EJS_emulator = new EmulatorJS(EJS_player, config); + if (typeof window.EJS_onGameStart === "function") { + window.EJS_emulator.on("start", window.EJS_onGameStart); + } + if (typeof window.EJS_onLoadState === "function") { + window.EJS_emulator.on("load", window.EJS_onLoadState); + } + if (typeof window.EJS_onSaveState === "function") { + window.EJS_emulator.on("save", window.EJS_onSaveState); + } })(); \ No newline at end of file diff --git a/data/version.json b/data/version.json new file mode 100644 index 0000000..522e0c4 --- /dev/null +++ b/data/version.json @@ -0,0 +1 @@ +{ "current_version": 40.1 } diff --git a/docs/Contributors.md b/docs/Contributors.md new file mode 100644 index 0000000..3c7e218 --- /dev/null +++ b/docs/Contributors.md @@ -0,0 +1,109 @@ + +
+ +
+ +# Owner + +
+
+ +![Ethan Avatar] + +**[![Badge Ethan GitHub]][Ethan GitHub]**  + +
+
+
+
+ +# Contributors + +
+
+ +![Allan Avatar] + +### Co-Owner + +***Various Fixes & Additions*** + +**[![Badge Allan GitHub]][Allan GitHub]**  + +**[![Badge Allan Website]][Allan Website]**  + +
+
+
+ + +![Archiver Avatar] + +***Documentation Design*** + +**[![Badge Archiver GitHub]][Archiver GitHub]**  + +**[![Badge Archiver Marked]][Archiver Marked]**  + +
+
+
+ + +[![Avatar Nekro]][GitHub Nekro]    +[![Avatar Grey]][GitHub Grey]    +[![Avatar Kyle]][GitHub Kyle] +[![Avatar Protektor]][GitHub Protektor] +[![Avatar ericKuang]][GitHub ericKuang] +[![Avatar seedgou]][GitHub seedgou] + +
+ + + + +[Avatar Nekro]: https://github.com/imneckro.png?size=100 +[GitHub Nekro]: https://github.com/imneckro 'ImNekro - ck-oneman' + +[Avatar Grey]: https://github.com/Grey41.png?size=100 +[GitHub Grey]: https://github.com/Grey41 'Grey41 - Grey Hope' + +[Avatar Kyle]: https://github.com/cheesykyle.png?size=100 +[GitHub Kyle]: https://github.com/cheesykyle 'CheesyKyle - Kyle Steffel' + +[Avatar Protektor]: https://github.com/Protektor-Desura.png?size=100 +[GitHub Protektor]: https://github.com/Protektor-Desura 'Protektor-Desura - Protektor' + +[Avatar ericKuang]: https://github.com/eric183.png?size=100 +[GitHub ericKuang]: https://github.com/eric183 'eric183 - ericKuang' + +[Avatar seedgou]: https://github.com/rwv.png?size=100 +[GitHub seedgou]: https://github.com/rwv 'rwv - seedgou' + + + + +[Badge Ethan GitHub]: https://img.shields.io/badge/Ethan_O'_Brien-181717.svg?style=for-the-badge&logo=GitHub&logoColor=white + +[Ethan Avatar]: https://avatars.githubusercontent.com/u/77750390?s=90 'Ethan O\'Brien' +[Ethan GitHub]: https://github.com/ethanaobrien + + + + +[Badge Archiver GitHub]: https://img.shields.io/badge/ElectronicsArchiver-181717.svg?style=for-the-badge&logo=GitHub&logoColor=white +[Badge Archiver Marked]: https://img.shields.io/badge/MarkedDown-49a2d5.svg?style=for-the-badge&logo=GitHub&logoColor=white + +[Archiver Avatar]: https://avatars.githubusercontent.com/u/85485984?s=90 'ElectronicsArchiver - トトも' +[Archiver GitHub]: https://github.com/ElectronicsArchiver +[Archiver Marked]: https://github.com/MarkedDown + + + + +[Badge Allan GitHub]: https://img.shields.io/badge/allancoding-181717.svg?style=for-the-badge&logo=GitHub&logoColor=white +[Badge Allan Website]: https://img.shields.io/badge/AllanCoding.ga-lightgray.svg?style=for-the-badge&logo=GitHub&logoColor=white + +[Allan Avatar]: https://avatars.githubusercontent.com/u/74841470?s=90 'Allancoding - Allan Niles' +[Allan GitHub]: https://github.com/allancoding +[Allan Website]: https://allancoding.ga/ diff --git a/docs/Logo-light.png b/docs/Logo-light.png new file mode 100644 index 0000000000000000000000000000000000000000..988f433d3b4d971248ce46d3879e1621ff270941 GIT binary patch literal 24096 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 aMdu4w(a9Eu#e#gvfQq69v{c?S + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/Systems/3DO.md b/docs/Systems/3DO.md new file mode 100644 index 0000000..3eeba3d --- /dev/null +++ b/docs/Systems/3DO.md @@ -0,0 +1,56 @@ +# 3DO + +## Code example + +```html +
+
+
+ + + +``` + +## ROM Type + +Your **ROM** can have the following types: +- `iso` +- `bin` +- `chd` +- `cue` + +### BIOS + +| File Name | Description | md5sum | +| ----------- | ------------- | ----------- | +| panafz1.bin | Panasonic FZ-1 | `f47264dd47fe30f73ab3c010015c155b` +| panafz10.bin | Panasonic FZ-10 | `51f2f43ae2f3508a14d9f56597e2d3ce` +| panafz10-norsa.bin | Panasonic FZ-10 [RSA Patch] | `1477bda80dc33731a65468c1f5bcbee9` +| panafz10e-anvil.bin | Panasonic FZ-10-E [Anvil] | `a48e6746bd7edec0f40cff078f0bb19f` +| panafz10e-anvil-norsa.bin | Panasonic FZ-10-E [Anvil RSA Patch] | `cf11bbb5a16d7af9875cca9de9a15e09` +| panafz1j.bin | Panasonic FZ-1J | `a496cfdded3da562759be3561317b605` +| panafz1j-norsa.bin | Panasonic FZ-1J [RSA Patch] | `f6c71de7470d16abe4f71b1444883dc8` +| goldstar.bin | Goldstar GDO-101M | `8639fd5e549bd6238cfee79e3e749114` +| sanyotry.bin | Sanyo IMP-21J TRY | `35fa1a1ebaaeea286dc5cd15487c13ea` +| 3do_arcade_saot.bin | Shootout At Old Tucson | `8970fc987ab89a7f64da9f8a8c4333ff` + +### CORES + +The *nes* system supports 1 core +- `opera` + +If set to `3do`, emulator will use the `opera` core. diff --git a/docs/Systems/Arcade.md b/docs/Systems/Arcade.md new file mode 100644 index 0000000..6c4a450 --- /dev/null +++ b/docs/Systems/Arcade.md @@ -0,0 +1,37 @@ +# Arcade + +## Code Example + +```html +
+
+
+ + + +``` + +## ROM Type + +Your **ROM** can have the following extensions: +- `zip` + +### CORES + +The *arcade* system supports 2 cores +- `fbalpha2012_cps1` +- `fbalpha2012_cps2` + +If set to `arcade`, emulator will use the `fbalpha2012_cps1` core. + diff --git a/docs/Systems/Atari 2600.md b/docs/Systems/Atari 2600.md new file mode 100644 index 0000000..fea3feb --- /dev/null +++ b/docs/Systems/Atari 2600.md @@ -0,0 +1,35 @@ +# Atari 2600 + +I do not know the file extension limits for this system.
+There is no bios for this system. + +## Code example + +```html +
+
+
+ + + + +``` + + + diff --git a/docs/Systems/Atari 5200.md b/docs/Systems/Atari 5200.md new file mode 100644 index 0000000..901ae54 --- /dev/null +++ b/docs/Systems/Atari 5200.md @@ -0,0 +1,37 @@ +# Atari 5200 + +## Code Example + +```html +
+
+
+ + + +``` + +## ROM Type + +Your **ROM** can have the following extensions: +- `a52` +- `bin` + +### CORES + +The *atari5200* system supports 1 core +- `a5200` + +If set to `atari5200`, emulator will use the `a5200` core. + diff --git a/docs/Systems/Atari 7800.md b/docs/Systems/Atari 7800.md new file mode 100644 index 0000000..16b28e7 --- /dev/null +++ b/docs/Systems/Atari 7800.md @@ -0,0 +1,33 @@ +# Atari 7800 + +I do not know the file extension limits for this system.
+There is no bios for this system. + +## Code example + +```html +
+
+
+ + + + +``` + diff --git a/docs/Systems/Atari Jaguar.md b/docs/Systems/Atari Jaguar.md new file mode 100644 index 0000000..0a9a748 --- /dev/null +++ b/docs/Systems/Atari Jaguar.md @@ -0,0 +1,37 @@ +# Atari Jaguar + + +I do not know the file extension limits for this system.
+There is no bios for this system. + + +## Code example + +```html +
+
+
+ + + + +``` + + + diff --git a/docs/Systems/Atari Lynx.md b/docs/Systems/Atari Lynx.md new file mode 100644 index 0000000..5f4f50f --- /dev/null +++ b/docs/Systems/Atari Lynx.md @@ -0,0 +1,32 @@ +# Atari Lynx + +I do not know the file extension limits for this system.
+There is no bios for this system. + +## Code example + +```html +
+
+
+ + + + +``` \ No newline at end of file diff --git a/docs/Systems/MAME 2003.md b/docs/Systems/MAME 2003.md new file mode 100644 index 0000000..daea3b8 --- /dev/null +++ b/docs/Systems/MAME 2003.md @@ -0,0 +1,35 @@ +# MAME 2003 + +## Code Example + +```html +
+
+
+ + + +``` + +## ROM Type + +Your **ROM** can have the following extensions: +- `zip` + +### CORES + +The *mame2003* system supports 2 cores +- `mame2003` + +If set to `mame2003`, emulator will use the `mame2003` core. + diff --git a/docs/Systems/NES-Famicom.md b/docs/Systems/NES-Famicom.md new file mode 100644 index 0000000..4fc4799 --- /dev/null +++ b/docs/Systems/NES-Famicom.md @@ -0,0 +1,52 @@ +# NES / Famicom + +## Code Example + +```html +
+
+
+ + + +``` + +## ROM Type + +Your **ROM** can have the following extensions: +- `fds` +- `nes` +- `unif` +- `unf` + +### BIOS + +| File Name | Description | md5sum | +| ----------- | ------------- | ----------- | +| disksys.rom | Family Computer Disk System BIOS -
Required for Famicom Disk System emulation | ca30b50f880eb660a320674ed365ef7a | +| gamegenie.nes | Game Genie add-on cartridge -
Required for Game Genei Add-on emulation
(Only supported on the fceumm core) | 7f98d77d7a094ad7d069b74bd553ec98 | + +### CORES + +The *nes* system supports 2 cores +- `fceumm` +- `nestopia` + +If set to `nes`, emulator will use the `fceumm` core. + diff --git a/docs/Systems/Nintendo 64.md b/docs/Systems/Nintendo 64.md new file mode 100644 index 0000000..a490a10 --- /dev/null +++ b/docs/Systems/Nintendo 64.md @@ -0,0 +1,42 @@ +# Nintendo 64 + +## Code Example + +```html +
+
+
+ + + +``` + +## ROM Type + +Your **ROM** can have the following extensions: +- `n64` +- `v64` +- `z64` +- `bin` +- `u1` +- `ndd` +- `gb` + +### CORES + +The *n64* system supports 1 core +- `mupen64plus_next` + +If set to `n64`, emulator will use the `mupen64plus_next` core. + diff --git a/docs/Systems/Nintendo DS.md b/docs/Systems/Nintendo DS.md new file mode 100644 index 0000000..7c5ac13 --- /dev/null +++ b/docs/Systems/Nintendo DS.md @@ -0,0 +1,54 @@ +# Nintendo DS + +## Code Example + +```html +
+
+
+ + + +``` + +## ROM Type + +Your **ROM** can have the following extensions: +- `nds` +- `bin` (desmume2015 core only) + +### BIOS (melonds core only) + +| File Name | Description | md5sum | +| ----------- | ------------- | ----------- | +| bios7.bin | NDS ARM7 BIOS - Required | df692a80a5b1bc90728bc3dfc76cd948 | +| bios9.bin | NDS ARM9 BIOS - Required | a392174eb3e572fed6447e956bde4b25 | +| firmware.bin | NDS Firmware - Required | 145eaef5bd3037cbc247c213bb3da1b3 | +| dsi_bios7.bin | DSi ARM7 BIOS - Optional | | +| dsi_bios9.bin | DSi ARM9 BIOS - Optional | | +| dsi_firmware.bin | DSi Firmware - Optional | | +| dsi_nand.bin | DSi NAND - Optional | | +| dsi_sd_card.bin | DSi SD Card - Optional | | + +### CORES + +The *nds* system supports 2 cores +- `melonds` +- `desmume2015` + +If set to `nds`, emulator will use the `melonds` core. + diff --git a/docs/Systems/Nintendo Game Boy Advance.md b/docs/Systems/Nintendo Game Boy Advance.md new file mode 100644 index 0000000..af5f054 --- /dev/null +++ b/docs/Systems/Nintendo Game Boy Advance.md @@ -0,0 +1,50 @@ +# Nintendo GameBoy Advance + +## Code Example + +```html +
+
+
+ + + +``` + +## ROM Type + +Your **ROM** can have the following extensions: +- `gb` +- `gbc` +- `gba` + +### BIOS + +| File Name | Description | md5sum | +| ----------- | ------------- | ----------- | +| gb_bios.bin | Game Boy BIOS - Optional | 32fbbd84168d3482956eb3c5051637f5 | +| gbc_bios.bin | Game Boy Color BIOS - Optional | dbfce9db9deaa2567f6a84fde55f9680 | +| gba_bios.bin | Game Boy Advance BIOS - Optional | a860e8c0b6d573d191e4ec7db1b1e4f6 | +| sgb_bios.bin | Super Game Boy BIOS - Optional | d574d4f9c12f305074798f54c091a8b4 | + +### CORES + +The *gba* system supports 1 core +- `mgba` + +If set to `gba`, emulator will use the `mgba` core. + diff --git a/docs/Systems/Nintendo Game Boy.md b/docs/Systems/Nintendo Game Boy.md new file mode 100644 index 0000000..775dff3 --- /dev/null +++ b/docs/Systems/Nintendo Game Boy.md @@ -0,0 +1,49 @@ +# Nintendo GameBoy + +## Code Example + +```html +
+
+
+ + + +``` + +## ROM Type + +Your **ROM** can have the following extensions: +- `gb` +- `gbc` +- `dmg` + +### BIOS + +| File Name | Description | md5sum | +| ----------- | ------------- | ----------- | +| gb_bios.bin | Game Boy BIOS - Optional | 32fbbd84168d3482956eb3c5051637f5 | +| gbc_bios.bin | Game Boy Color BIOS - Optional | dbfce9db9deaa2567f6a84fde55f9680 | + +### CORES + +The *gb* system supports 2 cores +- `gambatte` +- `mgba` + +If set to `gb`, emulator will use the `gambatte` core. + diff --git a/docs/Systems/PlayStation.md b/docs/Systems/PlayStation.md new file mode 100644 index 0000000..e12d060 --- /dev/null +++ b/docs/Systems/PlayStation.md @@ -0,0 +1,54 @@ +# PlayStation + +## Code Example + +```html +
+
+
+ + + +``` + +## ROM Type + +Your **ROM** can have the following extensions: +- `cue` +- `toc` +- `m3u` +- `ccd` +- `exe` +- `pbp` +- `chd` + +### BIOS + +| File Name | Description | md5sum | +| ----------- | ------------- | ----------- | +| scph5500.bin | PS1 JP BIOS - Required for JP games | 8dd7d5296a650fac7319bce665a6a53c | +| scph5501.bin | PS1 US BIOS - Required for US games | 490f666e1afb15b7362b406ed1cea246 | +| scph5502.bin | PS1 EU BIOS - Required for EU games | 32736f17079d0b2b7024407c39bd3050 | + +### CORES + +The *psx* system supports 2 cores +- `mednafen_psx_hw` +- `mednafen_psx` + +If set to `psx`, emulator will use the `mednafen_psx_hw` core. + diff --git a/docs/Systems/SNES.md b/docs/Systems/SNES.md new file mode 100644 index 0000000..b3cb058 --- /dev/null +++ b/docs/Systems/SNES.md @@ -0,0 +1,57 @@ +# SNES + +## Code Example + +```html +
+
+
+ + + +``` + +## ROM Type + +Your **ROM** can have the following extensions: +- `smc` +- `sfc` +- `swc` +- `fig` +- `bs` +- `st` + +### BIOS + +| File Name | Description | md5sum | +| ----------- | ------------- | ----------- | +| BS-X.bin | BS-X - Sore wa Namae o Nusumareta Machi no
Monogatari (Japan) (Rev 1) - Optional | fed4d8242cfbed61343d53d48432aced | +| STBIOS.bin | Sufami Turbo (Japan) - Optional | d3a44ba7d42a74d3ac58cb9c14c6a5ca | + +### CORES + +The *snes* system supports 1 core +- `snes9x` + +If set to `snes`, emulator will use the `snes9x` core. + diff --git a/docs/Systems/Sega CD.md b/docs/Systems/Sega CD.md new file mode 100644 index 0000000..1619be5 --- /dev/null +++ b/docs/Systems/Sega CD.md @@ -0,0 +1,43 @@ +# Sega CD + +I do not know the file extension limits for this system. + +## Code example + +```html +
+
+
+ + + + +``` + +## 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` + + diff --git a/docs/Systems/Sega Game Gear.md b/docs/Systems/Sega Game Gear.md new file mode 100644 index 0000000..be9eb4c --- /dev/null +++ b/docs/Systems/Sega Game Gear.md @@ -0,0 +1,35 @@ +# Sega Game Gear + +I do not know the file extension limits for this system. + +## Code example + +```html +
+
+
+ + + + +``` + +## BIOS + +GameGear BIOS (bootrom) - Optional `672e104c3be3a238301aceffc3b23fd6` diff --git a/docs/Systems/Sega Master System.md b/docs/Systems/Sega Master System.md new file mode 100644 index 0000000..3c073a9 --- /dev/null +++ b/docs/Systems/Sega Master System.md @@ -0,0 +1,45 @@ +# Sega Master System + +I do not know the file extension limits for this system. + +## Code example + +```html +
+
+
+ + + + +``` + +## 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 + + \ No newline at end of file diff --git a/docs/Systems/Sega Mega Drive.md b/docs/Systems/Sega Mega Drive.md new file mode 100644 index 0000000..a2299ce --- /dev/null +++ b/docs/Systems/Sega Mega Drive.md @@ -0,0 +1,32 @@ +# Sega Mega Drive + +I do not know the file extension limits for this system.
+There is no bios for this system. + +## Code example + +```html +
+
+
+ + + + +``` diff --git a/docs/Systems/Sega Saturn.md b/docs/Systems/Sega Saturn.md new file mode 100644 index 0000000..587ff61 --- /dev/null +++ b/docs/Systems/Sega Saturn.md @@ -0,0 +1,39 @@ +# Sega Saturn + +I do not know the file extension limits for this system. + +## Code example + +```html +
+
+
+ + + + +``` + +## BIOS + +Saturn BIOS - Optional `af5828fdff51384f99b3c4926be27762` diff --git a/docs/Systems/Virtual Boy.md b/docs/Systems/Virtual Boy.md new file mode 100644 index 0000000..86c83f4 --- /dev/null +++ b/docs/Systems/Virtual Boy.md @@ -0,0 +1,38 @@ +# Virtual Boy + +## Code Example + +```html +
+
+
+ + + +``` + +## ROM Type + +Your **ROM** can have the following extensions: +- `vb` +- `vboy` +- `bin` + +### CORES + +The *vb* system supports 1 core +- `beetle_vb` + +If set to `vb`, emulator will use the `beetle_vb` core. + diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4af671c32f42122ef93e074ede8a7a2a213a37d7 GIT binary patch literal 128918 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 RMfi*<{)>kvY{mHg{{i2n@oWG9 literal 0 HcmV?d00001