Merge pull request #2 from Emu-gators/QxD

Added Contributers and Fixed Spacing
This commit is contained in:
QDaily117 2022-11-02 23:13:48 -04:00 committed by GitHub
commit 9b1a903efc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 21 additions and 18 deletions

View File

@ -1,25 +1,28 @@
Contributers: Artur Bekker, Steven Phang, Quinlan Daily
Architectural Elements
External Interface
Realistic Loading of ROMs
Displaying ROM files as Cartridges
Users will be able to go from the Famicoms original loading screen to the Virtual Famicom Cartridge loading screen. This was shown visually in the prior design mockup
Before loading any of the Cartridges though, the user will be greeted by a browse for file dialog box which will allow the user to choose a folder on their computer that contains their ROM files. This path will be used later on
If there are ROM files in the file path on the computer, then cartridges will display on the Virtual loading sequence
Displaying ROM files as Cartridges
Users will be able to go from the Famicoms original loading screen to the Virtual Famicom Cartridge loading screen. This was shown visually in the prior design mockup
Before loading any of the Cartridges though, the user will be greeted by a browse for file dialog box which will allow the user to choose a folder on their computer that contains their ROM files. This path will be used later on
If there are ROM files in the file path on the computer, then cartridges will display on the Virtual loading sequence
Clicking and dragging Cartridges
Previously the user was able to specify the ROMs that would be used to display the Cartridges. Now the user will be able to interface with the displayed and loaded cartridges. This means that more functionality needs to be implemented into the project to allow users to interact with these objects
When not loaded into the Virtual Famicom, Cartridges need to be able to be clicked and then dragged, this will be described in more detail later, but essentially functions to register clicks from a mouse or gamepad need to be recognized and then while recognizing this input, when the cursor of the user moves, the cartridges should move too
In addition, when cartridges are inside of the virtual Famicom console, functionality to click and drag the “loaded” cartridge from the Famicom will need to be present in order to unload a cartridge. Afterwards, when let go, the cartridge should join the rest of the cartridges if they were loaded
Previously the user was able to specify the ROMs that would be used to display the Cartridges. Now the user will be able to interface with the displayed and loaded cartridges. This means that more functionality needs to be implemented into the project to allow users to interact with these objects
When not loaded into the Virtual Famicom, Cartridges need to be able to be clicked and then dragged, this will be described in more detail later, but essentially functions to register clicks from a mouse or gamepad need to be recognized and then while recognizing this input, when the cursor of the user moves, the cartridges should move too
In addition, when cartridges are inside of the virtual Famicom console, functionality to click and drag the “loaded” cartridge from the Famicom will need to be present in order to unload a cartridge. Afterwards, when let go, the cartridge should join the rest of the cartridges if they were loaded
PowerOn and PowerOff functions for Famicom
Switches need to be present on the Famicom. A Power switch needs to be present on the virtual console in order to emulate the realistic powering sequence of the Famicom. The user should be able to click the Power switch to turn on the Famicom and turn off the Famicom
This means functionality to recognize a click similar to the cartridge dragging needs to be implemented. When the power button is pressed it will act like it is pressed in and when power off it will need to be clicked again, exactly like the Famicom
Switches need to be present on the Famicom. A Power switch needs to be present on the virtual console in order to emulate the realistic powering sequence of the Famicom. The user should be able to click the Power switch to turn on the Famicom and turn off the Famicom
This means functionality to recognize a click similar to the cartridge dragging needs to be implemented. When the power button is pressed it will act like it is pressed in and when power off it will need to be clicked again, exactly like the Famicom
Empty Screen Interface
When no cartridge is inside of the virtual Famicom, and the Famicom is powered on, the empty screen interface needs to be displayed. It will seem like a game is loaded but instead this is just the defaulted screen the original Famicom uses when no cartridge is present.
Functionality in Internal Systems will need to be set up to consider the case that no ROMs are loaded when realistically loading ROMs is enabled.
When no cartridge is inside of the virtual Famicom, and the Famicom is powered on, the empty screen interface needs to be displayed. It will seem like a game is loaded but instead this is just the defaulted screen the original Famicom uses when no cartridge is present.
Functionality in Internal Systems will need to be set up to consider the case that no ROMs are loaded when realistically loading ROMs is enabled.
Persistent State
For displaying the ROM files as Cartridges, a couple of functions need to be called. One of the functions that needs to be called will be our own function called SearchForROMS(string filepath). This function is used when the user interacts with the loading of the ROMs and the realistic option setting is enabled.
Once a ROM is ejected from the Famicom on the GUI in the External System, a function ejectROM() will execute. This will call the LUA script in the Internal System which plays the “Set Disk Card” screen until a ROM is inserted back into the Famicom.
Once a ROM is inserted into the Famicom on the GUI in the External System, a function insertROM(string filepath) containing the file path to the ROM will execute. This will call the LUA script in the Internal System which plays the loading screen for a short period of time until the LUA script begins proper emulation.
For displaying the ROM files as Cartridges, a couple of functions need to be called. One of the functions that needs to be called will be our own function called SearchForROMS(string filepath). This function is used when the user interacts with the loading of the ROMs and the realistic option setting is enabled.
Once a ROM is ejected from the Famicom on the GUI in the External System, a function ejectROM() will execute. This will call the LUA script in the Internal System which plays the “Set Disk Card” screen until a ROM is inserted back into the Famicom.
Once a ROM is inserted into the Famicom on the GUI in the External System, a function insertROM(string filepath) containing the file path to the ROM will execute. This will call the LUA script in the Internal System which plays the loading screen for a short period of time until the LUA script begins proper emulation.
Internal Systems
For use case of having a Set Disk Card Screen and Loading Screen
@ -55,13 +58,13 @@ Information Handling
Communication
Truth Values for States
In order to appropriately consider the states that will be communicating with each other, boolean values that keep track of the states might be used in different functions in order to quickly check where the external interfaces are displaying
In order to appropriately consider the states that will be communicating with each other, boolean values that keep track of the states might be used in different functions in order to quickly check where the external interfaces are displaying
Strings for File Paths and ROMs
String data structures will be used in order to hold the specific file pathways that are used inside of the emulator to realize ROM files and their locations
String data structures will be used in order to hold the specific file pathways that are used inside of the emulator to realize ROM files and their locations
FCEUX API to Communicate with Scripts and GUI
The FCEUX API will be used to help communication to flow between the GUI components and the scripts in this project
The FCEUX API will be used to help communication to flow between the GUI components and the scripts in this project
The overall flow of communication is as follows:
GUI components ←→ FCEUX API ←→ LUA scripting
GUI components ←→ FCEUX API ←→ LUA scripting
Integrity & Resilience
On the GUI, if a game is inserted into the Famicom but the power button is not pressed, the ROM will be inserted into a buffer and emulation will be paused until the power button is pressed. This prevents errors of the game starting up before it should. In the reverse scenario, if the power button is pressed before a ROM is inserted, a LUA script will just play the Set Disk Card screen until the ROM is placed.