Rearrange documentation and add new assets
6
.markdownlint.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"emphasis-style": false,
|
||||
"fenced-code-language": false,
|
||||
"first-line-heading": false,
|
||||
"no-inline-html": false
|
||||
}
|
114
README.md
@ -1,6 +1,6 @@
|
||||
|
||||
<p align="center">
|
||||
<img src="doc/assets/logo.png" alt="573in1 logo" />
|
||||
<img alt="573in1 logo" src="doc/assets/logo.png" width="512" height="336" />
|
||||
</p>
|
||||
|
||||
573in1 is a full-featured homebrew maintenance and troubleshooting tool, game
|
||||
@ -8,34 +8,83 @@ installer and BIOS ROM replacement for arcade games based on Konami's System 573
|
||||
PCB, such as earlier versions of Dance Dance Revolution and other Bemani rhythm
|
||||
games from the same era. It currently allows for:
|
||||
|
||||
- dumping, erasing and writing images to the onboard flash memory, PCMCIA flash
|
||||
cards and RTC RAM;
|
||||
- dumping, erasing and writing binary images to the onboard flash memory, PCMCIA
|
||||
flash cards and RTC RAM;
|
||||
- dumping security cartridge EEPROMs and editing the serial number stored in
|
||||
them in order to reinstall a game on a different system;
|
||||
- repurposing cartridges for use with any game that uses the same cartridge
|
||||
type;
|
||||
- browsing the CD-ROM, or any attached IDE hard drive or CF card, and launching
|
||||
- repurposing security cartridges for use with any game that uses the same
|
||||
cartridge type;
|
||||
- browsing the CD-ROM, or any connected IDE hard drive or CF card, and launching
|
||||
System 573 and PS1 executables.
|
||||
|
||||
A secondary - but no less important - purpose of this project is to serve as a
|
||||
testbed for System 573 reverse engineering and documentation efforts, by
|
||||
providing an extensive ready-to-go user interface and hardware abstraction
|
||||
library with (hopefully) easily readable code. The project may potentially be
|
||||
expanded to support other similar PS1-based arcade PCBs in the future.
|
||||
|
||||
## Download and usage
|
||||
|
||||
The latest version of 573in1 can be found on the releases page, accessible
|
||||
through the GitHub sidebar. The tool is available in three different formats:
|
||||
through the GitHub sidebar. Each release is available in three different
|
||||
formats:
|
||||
|
||||
- as a CD-ROM image, usable on any 573 equipped with a CD-ROM drive (including
|
||||
ones fitted with BIOS mod boards);
|
||||
- as a CD-ROM image bootable on any 573 equipped with a compatible IDE optical
|
||||
drive, including ones fitted with BIOS mod boards and similar modifications;
|
||||
- as a BIOS ROM image, allowing the system to boot directly into the 573in1 main
|
||||
menu (even with no IDE drives connected) and optionally launch a game or
|
||||
custom executable automatically;
|
||||
- as a standalone 573 executable for advanced users.
|
||||
menu (even with no drives connected) and optionally launch a game or custom
|
||||
executable automatically;
|
||||
- as a standalone 573 executable file for advanced users.
|
||||
|
||||
See the [documentation](doc/index.md) for more information and usage
|
||||
instructions. Reading the documentation before proceeding is highly recommended.
|
||||
instructions. **Reading the documentation before proceeding is highly**
|
||||
**recommended.**
|
||||
|
||||
## Screenshots
|
||||
|
||||
<p align="center">
|
||||
<img alt="Main menu" src="doc/assets/mainMenu.png" width="320" height="240" />
|
||||
<img alt="Cartridge information screen" src="doc/assets/cartInfo.png"
|
||||
width="320" height="240" />
|
||||
<img alt="Cartridge system ID editor" src="doc/assets/editSystemID.png"
|
||||
width="320" height="240" />
|
||||
<img alt="Storage device information screen" src="doc/assets/storageInfo.png"
|
||||
width="320" height="240" />
|
||||
<img alt="IDE drive file picker" src="doc/assets/ideDrivePicker.png"
|
||||
width="320" height="240" />
|
||||
<img alt="Monitor test pattern" src="doc/assets/monitorTestPattern.png"
|
||||
width="320" height="240" />
|
||||
</p>
|
||||
|
||||
## Project status
|
||||
|
||||
While 573in1 has reached a point where it is fully functional and usable, it is
|
||||
still a work-in-progress project with several features planned but not yet
|
||||
implemented. The following tasks are planned for future releases, from highest
|
||||
to lowest priority:
|
||||
|
||||
- Migrating the current game list format (`data/x76f041.db` and `data/zs01.db`)
|
||||
to a new single-file format, adding new fields and providing an updated Python
|
||||
script to generate it from `data/games.json`.
|
||||
- Adding support for installing games that write installation metadata and a
|
||||
hash of the system's ID to the internal flash memory. This will require adding
|
||||
new data to the game list (see above) and reverse engineering all flash header
|
||||
formats used by games.
|
||||
- Fixing a bunch of stability bugs, such as the executable loader occasionally
|
||||
crashing or the filesystem drivers not being thread safe (resulting in
|
||||
filesystem corruption if e.g. a screenshot is taken while dumping data to the
|
||||
hard drive).
|
||||
- Adding support for installing arbitrary executables directly to the internal
|
||||
flash or a PCMCIA card, allowing the 573 BIOS to boot them automatically even
|
||||
with no CD-ROM drive present.
|
||||
- Cleaning up the codebase, which currently contains *many* bad practices.
|
||||
- Adding UTF-8 support to the font and text rendering code. This is a rather low
|
||||
priority feature, but it would allow 573in1 to be translated to other
|
||||
languages.
|
||||
|
||||
## Contributing
|
||||
|
||||
Pull requests are welcome. If you wish to add functionality (e.g. game-specific
|
||||
menus to manipulate user data, extract assets and so on) feel free to do so,
|
||||
Pull requests are welcome. If you wish to add functionality feel free to do so,
|
||||
however please stick to the following guidelines:
|
||||
|
||||
- Do not include any code lifted as-is or minimally modified from a game
|
||||
@ -49,17 +98,38 @@ however please stick to the following guidelines:
|
||||
- Adding a section to the documentation covering usage of the newly added
|
||||
functionality is not required, but would be highly appreciated.
|
||||
|
||||
If you have any questions or doubts, or want to propose new features, feel free
|
||||
to reach out to the authors by opening an issue or through one of the Discord
|
||||
servers linked at the end of the page.
|
||||
|
||||
## License
|
||||
|
||||
The tool is licensed under the [GNU GPLv3](LICENSE). You may freely distribute
|
||||
modified versions as long as you also provide the full source code, attribution
|
||||
and a link back to this repository.
|
||||
573in1 is licensed under the [GNU GPLv3](LICENSE). You may freely distribute
|
||||
modified versions as long as you do not relicense them and provide the full
|
||||
source code, attribution and a link back to this repository.
|
||||
|
||||
Some files are adapted from other projects (namely,
|
||||
[ps1-bare-metal](https://github.com/spicyjpeg/ps1-bare-metal)) or third-party
|
||||
libraries and are more permissively licensed as a result. Refer to the license
|
||||
information at the top of each file for more details.
|
||||
|
||||
## See also
|
||||
|
||||
- Naoki Saito's 573 resources:
|
||||
If you are not already familiar with the inner workings of the PS1 and System
|
||||
573, you may find the following links useful:
|
||||
|
||||
- [Konami's System 573 - Everything you wanted to know about it!](https://youtube.com/watch?v=Cm6ycmTbwIU)
|
||||
- [System 573 repo](https://github.com/NaokiS28/KSystem-573)
|
||||
- [System 573 specifications](https://psx-spx.consoledev.net/konamisystem573)
|
||||
- [ps1-bare-metal](https://github.com/spicyjpeg/ps1-bare-metal)
|
||||
(video)
|
||||
- [PlayStation Architecture](https://copetti.org/writings/consoles/playstation)
|
||||
|
||||
More in-depth technical documentation can be found here:
|
||||
|
||||
- [PlayStation specifications](https://psx-spx.consoledev.net/) (also includes a
|
||||
[573 section](https://psx-spx.consoledev.net/konamisystem573))
|
||||
- [Naoki Saito's System 573 repo](https://github.com/NaokiS28/KSystem-573)
|
||||
|
||||
Discuss about 573in1, PS1 homebrew development, Konami arcade hardware and
|
||||
related topics on:
|
||||
|
||||
- [PSX.Dev Discord server](https://discord.gg/QByKPpH)
|
||||
- [Rhythm Game Cabs Discord server](https://discord.gg/MNcMGCE8sk)
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"AboutScreen": {
|
||||
"title": "{RIGHT_ARROW} About this tool",
|
||||
"title": "{RIGHT_ARROW} About 573in1",
|
||||
"prompt": "{RIGHT_ARROW} Use {LEFT_BUTTON}{RIGHT_BUTTON} to scroll. Press {START_BUTTON} to go back."
|
||||
},
|
||||
|
||||
@ -52,7 +52,7 @@
|
||||
},
|
||||
"cartDumpWorker": {
|
||||
"save": "Saving cartridge dump...\nDo not turn off the 573 or unplug drives.",
|
||||
"success": "A dump of the cartridge and all its identifiers has been saved as %s in the root of the drive. The dump can be decoded and viewed using the decodeDump.py script provided with this tool.",
|
||||
"success": "A dump of the cartridge and all its identifiers has been saved as %s in the root of the drive. The dump can be decoded and viewed using the decodeDump.py script provided with 573in1.",
|
||||
"error": "An error occurred while saving the dump. Turn off the system and make sure the drive is connected to the IDE bus properly, set as secondary (if a CD-ROM drive is also present) and formatted with a single FAT16, FAT32 or exFAT partition.\n\nFile: %s\nPress the Test button to view debug logs."
|
||||
},
|
||||
"executableWorker": {
|
||||
@ -62,11 +62,18 @@
|
||||
"addressError": "The executable cannot be loaded as it overlaps the memory region reserved for use by the executable launcher.\n\nRegion:\t%08X-%08X\nStack top:\t%08X",
|
||||
"fragmentError": "The executable cannot be loaded as it is fragmented across too many non-contiguous areas on the filesystem. Try defragging or reformatting the drive.\n\nFile:\t\t\t%s\nTotal fragments:\t%d\nOverflow:\t\t%d"
|
||||
},
|
||||
"flashExecutableWriteWorker": {
|
||||
"init": "Validating executable file...\nDo not turn off the 573 or unplug drives.",
|
||||
"write": "Writing new executable file...\nDo not turn off the 573 or unplug drives.",
|
||||
"success": "The executable has been successfully installed. The system will skip CD-ROM drive initialization and launch it automatically on startup if DIP switch 4 is turned on.\n\nBytes written: %d",
|
||||
"fileError": "The selected file could not be accessed or is not a valid System 573 executable. Make sure the file has been copied properly.\n\nFile: %s",
|
||||
"flashError": "An error occurred while writing data to one of the chips.\n\nError code:\t%s\nBytes written:\t%d\nPress the Test button to view debug logs."
|
||||
},
|
||||
"flashHeaderWriteWorker": {
|
||||
"erase": "Erasing existing header...\nDo not turn off the 573.",
|
||||
"write": "Writing new header...\nDo not turn off the 573.",
|
||||
"flashError": "An error occurred while erasing and rewriting the first sector of the internal flash memory.\n\nError code: %s\nPress the Test button to view debug logs.",
|
||||
"unsupported": "This system's onboard flash memory chips are not currently supported.\n\nSee the documentation for more information on supported flash chips."
|
||||
"unsupported": "The flash memory chips on this device are unresponsive to commands or are currently unsupported. If you are trying to erase a PCMCIA card with a write protect switch, make sure the switch is off.\n\nSee the documentation for more information on supported flash chips."
|
||||
},
|
||||
"qrCodeWorker": {
|
||||
"compress": "Compressing cartridge dump...",
|
||||
@ -102,13 +109,12 @@
|
||||
"success": "All data has been successfully restored.\n\nBytes written: %d",
|
||||
"overflow": "The selected file was larger than the target device's capacity, so all data past the limit was ignored. All other data has been successfully restored.\n\nBytes written: %d",
|
||||
"fileError": "An error occurred while reading data from the file. Ensure the filesystem is not damaged.\n\nFile: %s\nPress the Test button to view debug logs.",
|
||||
"flashError": "An error occurred while erasing sectors on or writing data to one of the chips.\n\nError code:\t%s\nBytes written:\t%d\nPress the Test button to view debug logs.",
|
||||
"unsupported": "The flash memory chips on this device are unresponsive to commands or are currently unsupported. If you are trying to write to a PCMCIA card with a write protect switch, make sure the switch is off.\n\nSee the documentation for more information on supported flash chips."
|
||||
"flashError": "An error occurred while writing data to one of the chips.\n\nError code:\t%s\nBytes written:\t%d\nPress the Test button to view debug logs."
|
||||
},
|
||||
"atapiEjectWorker": {
|
||||
"eject": "Sending eject command...",
|
||||
"noDrive": "No ATAPI CD-ROM drive has been found on the IDE bus or could be successfully initialized. Your drive may be incompatible with the ATAPI driver used by this tool.\n\nPress the Test button to view debug logs.",
|
||||
"ejectError": "Failed to open the drive's tray. Make sure the drive's front panel is not blocked off by the 573's case. Your drive may also be incompatible with the ATAPI driver used by this tool.\n\nError code: %s\nPress the Test button to view debug logs."
|
||||
"noDrive": "No ATAPI CD-ROM drive has been found on the IDE bus or could be successfully initialized. Your drive may be incompatible with the ATAPI driver used by 573in1.\n\nPress the Test button to view debug logs.",
|
||||
"ejectError": "Failed to open the drive's tray. Make sure the drive's front panel is not blocked off by the 573's case. Your drive may also be incompatible with the ATAPI driver used by 573in1.\n\nError code: %s\nPress the Test button to view debug logs."
|
||||
},
|
||||
"rebootWorker": {
|
||||
"reboot": "Rebooting system..."
|
||||
@ -117,7 +123,7 @@
|
||||
|
||||
"AudioTestScreen": {
|
||||
"title": "{RIGHT_ARROW} Audio output test",
|
||||
"prompt": "Note that the speaker amplifier and analog audio passthrough are disabled by this tool by default.",
|
||||
"prompt": "Note that the speaker amplifier and analog audio passthrough are disabled by default.",
|
||||
"itemPrompt": "{RIGHT_ARROW} Press {START_BUTTON} to select, hold {LEFT_BUTTON}{RIGHT_BUTTON} + {START_BUTTON} to go back",
|
||||
|
||||
"playLeft": "Play sound on left channel",
|
||||
@ -188,7 +194,7 @@
|
||||
},
|
||||
"erase": {
|
||||
"name": "Erase cartridge",
|
||||
"prompt": "Wipe all data including game identifiers. Erased cartridges can be flashed for use with games unsupported by this tool using a master calendar.",
|
||||
"prompt": "Wipe all data including game identifiers. Erased cartridges can be flashed for use with games unsupported by 573in1 using a master calendar.",
|
||||
"confirm": "The contents of the cartridge's EEPROM will be erased, making it unusable until reflashed and resetting the unlocking key to 00-00-00-00-00-00-00-00. The cartridge ID will not be altered.\n\nDo you wish to proceed?"
|
||||
},
|
||||
"resetSystemID": {
|
||||
@ -314,7 +320,7 @@
|
||||
"noFS": "no disc or unsupported FS",
|
||||
|
||||
"noDeviceError": "No drives have been found and successfully initialized on the IDE bus. Make sure the drives are appropriately configured as primary or secondary and are receiving power.\n\nPress the Test button to view debug logs.",
|
||||
"atapiError": "Failed to initialize the CD-ROM drive or access the filesystem on it. Ensure a disc is inserted and formatted with a valid ISO9660 filesystem. Your drive may also be incompatible with the ATAPI driver used by this tool.\n\nPress the Test button to view debug logs.",
|
||||
"atapiError": "Failed to initialize the CD-ROM drive or access the filesystem on it. Ensure a disc is inserted and formatted with a valid ISO9660 filesystem. Your drive may also be incompatible with the ATAPI driver used by 573in1.\n\nPress the Test button to view debug logs.",
|
||||
"ideError": "Failed to initialize the drive or access the filesystem on it. Turn off the system and make sure the drive is connected to the IDE bus properly, set as secondary (if a CD-ROM drive is also present) and formatted with a single FAT16, FAT32 or exFAT partition.\n\nPress the Test button to view debug logs.",
|
||||
"noFilesError": "No files or directories have been found in the root of the selected drive's filesystem."
|
||||
},
|
||||
@ -413,7 +419,7 @@
|
||||
},
|
||||
|
||||
"MainMenuScreen": {
|
||||
"title": "{RIGHT_ARROW} Main menu",
|
||||
"title": "{RIGHT_ARROW} 573in1",
|
||||
"itemPrompt": "{RIGHT_ARROW} Use {LEFT_BUTTON}{RIGHT_BUTTON} to move, select by pressing {START_BUTTON}",
|
||||
|
||||
"cartInfo": {
|
||||
@ -446,7 +452,7 @@
|
||||
"prompt": "Switch to a different screen resolution and aspect ratio. Some monitors and upscalers may not support all resolutions."
|
||||
},
|
||||
"about": {
|
||||
"name": "About this tool",
|
||||
"name": "About 573in1",
|
||||
"prompt": "View information about this tool, including open source licenses."
|
||||
},
|
||||
"ejectCD": {
|
||||
@ -455,7 +461,7 @@
|
||||
},
|
||||
"reboot": {
|
||||
"name": "Reboot system",
|
||||
"prompt": "Restart the system. Swap out the CD-ROM and toggle DIP switch 4 before selecting this option to boot the game installed on this system."
|
||||
"prompt": "Restart the system. Turn on DIP switch 4 before selecting this option to reboot into the game installed on the internal flash memory (if any)."
|
||||
}
|
||||
},
|
||||
|
||||
@ -471,7 +477,7 @@
|
||||
|
||||
"QRCodeScreen": {
|
||||
"title": "{RIGHT_ARROW} Cartridge dump",
|
||||
"prompt": "Scan this code and paste the resulting string into the decodeDump.py script provided alongside this tool to obtain a dump of the cartridge. Press {START_BUTTON} to go back."
|
||||
"prompt": "Scan this code and paste the resulting string into the decodeDump.py script provided alongside 573in1 to obtain a dump of the cartridge. Press {START_BUTTON} to go back."
|
||||
},
|
||||
|
||||
"ReflashGameScreen": {
|
||||
@ -574,6 +580,23 @@
|
||||
"prompt": "Wipe all data stored in the PCMCIA flash card, including any currently installed game and its assets."
|
||||
}
|
||||
},
|
||||
"installExecutable": {
|
||||
"filePrompt": "Note that PlayStation executables built without proper System 573 support will not run unless the watchdog is manually disabled.",
|
||||
"confirm": "The selected boot executable will be copied to the target device, permanently overwriting any other data currently stored on it. The device will be fully erased prior to writing the executable.\n\nDo you wish to proceed?",
|
||||
|
||||
"flash": {
|
||||
"name": "Install executable on internal flash",
|
||||
"prompt": "Replace the contents of the system's flash memory with a custom boot executable from the CD-ROM, IDE hard drive or CF card (if connected)."
|
||||
},
|
||||
"pcmcia1": {
|
||||
"name": "Install executable on PCMCIA card in slot 1",
|
||||
"prompt": "Replace the contents of the flash card with a custom boot executable from the CD-ROM, IDE hard drive or CF card (if connected)."
|
||||
},
|
||||
"pcmcia2": {
|
||||
"name": "Install executable on PCMCIA card in slot 2",
|
||||
"prompt": "Replace the contents of the flash card with a custom boot executable from the CD-ROM, IDE hard drive or CF card (if connected)."
|
||||
}
|
||||
},
|
||||
"resetFlashHeader": {
|
||||
"name": "Clear internal flash header",
|
||||
"prompt": "Erase any metadata about the currently installed game from the system's flash memory. All other data will be left as-is.",
|
||||
@ -643,7 +666,7 @@
|
||||
|
||||
"SystemIDEntryScreen": {
|
||||
"title": "Edit system identifier",
|
||||
"body": "Enter the new digital I/O board's identifier. To obtain the ID of another board, run this tool on its respective system.\n\nUse {LEFT_BUTTON}{RIGHT_BUTTON} to move the cursor, hold {START_BUTTON} and use {LEFT_BUTTON}{RIGHT_BUTTON} to edit the highlighted digit.",
|
||||
"body": "Enter the new digital I/O board's identifier. To obtain the ID of another board, run 573in1 on its respective system.\n\nUse {LEFT_BUTTON}{RIGHT_BUTTON} to move the cursor, hold {START_BUTTON} and use {LEFT_BUTTON}{RIGHT_BUTTON} to edit the highlighted digit.",
|
||||
"cancel": "Cancel",
|
||||
"ok": "Confirm"
|
||||
},
|
||||
@ -683,7 +706,7 @@
|
||||
|
||||
"WarningScreen": {
|
||||
"title": "Warning",
|
||||
"body": "This tool is experimental and provided with no warranty whatsoever. It is not guaranteed to work and improper usage may PERMANENTLY BRICK your System 573 security cartridges.\n\nUse this tool at your own risk. Do not proceed if you do not know what you are doing.",
|
||||
"body": "573in1 is an experimental tool provided with no warranty whatsoever. It is not guaranteed to work and improper usage may PERMANENTLY BRICK your System 573 security cartridges.\n\nUse this tool at your own risk. Do not proceed if you do not know what you are doing.",
|
||||
|
||||
"cooldown": "Wait... (%ds)",
|
||||
"ok": "{START_BUTTON} Continue"
|
||||
|
@ -1,6 +1,11 @@
|
||||
|
||||
573in1: Konami System 573 maintenance tool
|
||||
==========================================
|
||||
###### ###### #####. .##
|
||||
## ## ## .###
|
||||
'####. ##' ###' ##
|
||||
## ##' ## | |\ | ##
|
||||
#####' ## #####. | | \| ######
|
||||
|
||||
- Konami System 573 maintenance tool -
|
||||
|
||||
Version ${PROJECT_VERSION}
|
||||
(C) 2022-2024 spicyjpeg
|
||||
@ -17,7 +22,7 @@ drive on the same IDE bus as the CD-ROM drive, prior to turning on the system.
|
||||
For more information, full documentation and source code, see:
|
||||
<${PROJECT_HOMEPAGE_URL}>
|
||||
|
||||
WARNING: this tool is experimental and provided with no warranty whatsoever. It
|
||||
WARNING: 573in1 is an experimental tool provided with no warranty whatsoever. It
|
||||
is not guaranteed to work and improper usage can PERMANENTLY BRICK your System
|
||||
573 security cartridges. Use this tool at your own risk.
|
||||
|
||||
@ -39,5 +44,5 @@ this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
[ Credits and third-party licenses ]
|
||||
|
||||
See the "About this tool" page, accessible from the main menu, for more
|
||||
See the "About 573in1" page, accessible from the main menu, for more
|
||||
information.
|
||||
|
BIN
assets/textures/logo.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
assets/textures/splash.png
Normal file
After Width: | Height: | Size: 625 B |
BIN
doc/assets/banner.png
Normal file
After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 13 KiB |
BIN
doc/assets/cartInfo.png
Normal file
After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 21 KiB |
BIN
doc/assets/ideDrivePicker.png
Normal file
After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 6.2 KiB |
BIN
doc/assets/mainMenu.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
doc/assets/monitorTestPattern.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 9.0 KiB |
BIN
doc/assets/storageInfo.png
Normal file
After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 15 KiB |
19
doc/fpga.md
@ -115,7 +115,7 @@ manually invoking the Java-based extractor included in the installer as follows:
|
||||
|
||||
```bash
|
||||
# Replace /opt/xilinx with a suitable target location and run from the
|
||||
# installation package's root
|
||||
# installation package's root (with sudo/elevated permissions if necessary)
|
||||
find car -iname '*.car' -exec \
|
||||
java -cp ce/CarExpand.jar:ce/marimba.zip:ce/tuner.zip \
|
||||
com.xilinx.carexp.CarExp '{}' /opt/xilinx \;
|
||||
@ -146,9 +146,24 @@ yosys fpga.ys
|
||||
wine runISE.bat
|
||||
```
|
||||
|
||||
The bitstream can then be visually inspected using the ISE FPGA editor:
|
||||
The netlist synthesized by Yosys and passed to ISE can be visually inspected by
|
||||
rendering the generated `build/synth.dot` file using
|
||||
[Graphviz](https://graphviz.org/), for instance with the `dot` command:
|
||||
|
||||
```bash
|
||||
dot -T svg -o build/synth.svg build/synth.dot
|
||||
```
|
||||
|
||||
Note that generating the graph may take several minutes for large designs. The
|
||||
netlist is also exported to a Verilog file (`build/synth.v`) which can be
|
||||
simulated in a testbench. You may additionally inspect the FPGA's internal
|
||||
layout by launching the ISE FPGA editor:
|
||||
|
||||
```bash
|
||||
"%XILINX%\bin\nt\fpga_editor.exe" build\fpga.ncd # Windows
|
||||
wine "$XILINX/bit/nt/fpga_editor.exe" build/fpga.ncd # Linux (using Wine)
|
||||
```
|
||||
|
||||
Remember to copy `build/fpga.bit` to the `data` directory (and check it into
|
||||
the repository if submitting a pull request) in order to embed the newly built
|
||||
bitstream into 573in1.
|
||||
|
28
doc/index.md
Normal file
@ -0,0 +1,28 @@
|
||||
|
||||
# 573in1 documentation
|
||||
|
||||
## User's manual
|
||||
|
||||
- TODO: ~~[Getting started](starting.md)~~ (read this before first using 573in1)
|
||||
- TODO: ~~[Working with security cartridges](cartridges.md)~~
|
||||
- TODO: ~~[Installing games and working with flash memory devices](flash.md)~~
|
||||
- TODO: ~~[Connecting an IDE hard drive](hdd.md)~~
|
||||
- TODO: ~~[Installing 573in1 as a BIOS ROM](bios.md)~~
|
||||
- TODO: ~~[FAQ and troubleshooting](faq.md)~~
|
||||
|
||||
## Development resources
|
||||
|
||||
The following pages cover more advanced topics and are mainly intended for
|
||||
developers.
|
||||
|
||||
- TODO: ~~[Development information](development.md)~~
|
||||
- [File and data formats](formats.md)
|
||||
- [Digital I/O board FPGA bitstream](fpga.md)
|
||||
|
||||
## Contributing
|
||||
|
||||
This manual is currently *very* incomplete and missing most of its content, so
|
||||
any contribution is appreciated. If you wish to add information (and are
|
||||
confident about its accuracy) or otherwise help laying out the manual, feel free
|
||||
to open a pull request with your additions. See the project's README in the root
|
||||
of the repository for more details.
|
312
doc/manual.md
@ -1,312 +0,0 @@
|
||||
|
||||
# User's manual
|
||||
|
||||
## Contents
|
||||
|
||||
- [Introduction](#introduction)
|
||||
- [Getting started](#getting-started)
|
||||
- [Unlocking and dumping cartridges](#unlocking-and-dumping-cartridges)
|
||||
- [Editing the system identifier](#editing-the-system-identifier)
|
||||
- [Converting cartridges](#converting-cartridges)
|
||||
- [Connecting a hard drive](#connecting-a-hard-drive)
|
||||
- [FAQ and troubleshooting](#faq-and-troubleshooting)
|
||||
|
||||
## Introduction
|
||||
|
||||
This tool will let you:
|
||||
|
||||
- inspect and dump the serial numbers and EEPROM contents of any System 573
|
||||
security cartridge;
|
||||
- reset cartridges that have been paired to a 573's digital I/O board during
|
||||
installation, so that they can be reused on a different system;
|
||||
- erase cartridges and convert them for use with any game that uses the same
|
||||
cartridge type;
|
||||
- dump your 573's internal flash memory, RTC RAM, BIOS ROM as well as any PCMCIA
|
||||
flash cards inserted into it.
|
||||
|
||||
It will *not* let you:
|
||||
|
||||
- run System 573 games that require a security cartridge without owning one of
|
||||
the correct type;
|
||||
- change your digital I/O board's serial number (it is stored in a read-only
|
||||
chip);
|
||||
- get around a game's I/O board, PCMCIA card or other hardware requirements.
|
||||
|
||||
This guide assumes you already have some basic knowledge of System 573 hardware
|
||||
(games, I/O board types and so on) and arcade hardware more in general. If not,
|
||||
you may want to familiarize yourself with the basics before proceeding. Reading
|
||||
this guide in its entirety before using the tool for the first time is highly
|
||||
recommended as well.
|
||||
|
||||
### Disclaimer
|
||||
|
||||
This tool is provided with *no warranty whatsoever* and is not guaranteed to
|
||||
work with your specific 573 setup or security cartridges. Additionally, it is
|
||||
possible to **permanently brick** your cartridges by using it improperly. The
|
||||
authors take no responsibility for cartridges bricked or otherwise damaged,
|
||||
*even if accidentally or due to bugs*, by this tool.
|
||||
|
||||
## Getting started
|
||||
|
||||
In order to use the tool you will need the following:
|
||||
|
||||
- **A System 573** (`GX700-PWB(A)` PCB) equipped with a compatible ATAPI CD-ROM
|
||||
or DVD-ROM drive.
|
||||
- **A JAMMA setup** consisting of an appropriate power supply, a monitor or
|
||||
upscaler capable of displaying 15kHz signals and *at least* the player 1 left,
|
||||
right and start buttons. If your 573 is installed in a DDR, DDR Solo,
|
||||
DrumMania or Dance Maniax cabinet you may leave it in there as the tool has
|
||||
mappings for the wiring of those cabinets' buttons. Note that JVS input
|
||||
devices connected to the JVS port of the 573 are currently not supported.
|
||||
- **A blank CD-R to burn the tool to**. Depending on the drive installed in your
|
||||
573, a DVD-R, DVD+R or a rewritable disc (CD-RW, DVD-RW, DVD+RW) may also
|
||||
work.
|
||||
|
||||
You may additionally want the following optional items:
|
||||
|
||||
- **A digital I/O board** (`GX894-PWB(B)` PCB, also known as "MP3 board" or
|
||||
"digital sound PCB") mounted on top of the 573 motherboard. If one is
|
||||
installed, the tool will display its serial number and offer the ability to
|
||||
pair cartridges to it. If not, the serial number of any digital I/O board can
|
||||
still be entered manually.
|
||||
- **An IDE hard drive, CF card, SD card adapter or IDE-to-SATA adapter**
|
||||
connected to the same IDE bus as the CD-ROM drive, for dumping cartridges or
|
||||
the 573's internal storage. See
|
||||
[Connecting a hard drive](#connecting-a-hard-drive) for more details.
|
||||
|
||||
To get started, burn the provided CD-ROM image to a disc using your burning tool
|
||||
of choice, then remove any game disc from your 573 and replace it with your
|
||||
burned disc. Make sure DIP switch 4 (the rightmost one) is off, turn on or power
|
||||
cycle your 573 and, if everything goes well, it should boot into a warning about
|
||||
security cartridges. Press the start button and you will get to this screen:
|
||||
|
||||
<p align="center">
|
||||
<img src="assets/buttonMapping.png" alt="Button mapping selection" />
|
||||
</p>
|
||||
|
||||
Press the start button repeatedly until the button mapping that most closely
|
||||
matches your setup is highlighted, then hold it down for about a second to
|
||||
confirm your selection. From now on you will be able to navigate the tool using
|
||||
the left and right (or up and down) buttons on your cabinet or JAMMA setup.
|
||||
|
||||
**NOTE**: the tool is also available as a self-contained executable (`.psexe`)
|
||||
file in case you have another means of running arbitrary software on your
|
||||
system. That said, if that is the case then you will likely not need to read
|
||||
most of this guide.
|
||||
|
||||
## Unlocking and dumping cartridges
|
||||
|
||||
### Cartridge types
|
||||
|
||||
There are several different kinds of cartridges, most of which are equipped with
|
||||
additional game-specific hardware such as serial ports, however all of them fall
|
||||
into one of three categories depending on the actual security-related hardware
|
||||
they feature:
|
||||
|
||||
- **X76F041**: the earliest and simplest cartridge type, consisting only of a
|
||||
512-byte password protected EEPROM. Used by early non-Bemani games.
|
||||
- **X76F041 + DS2401**: similar to X76F041 cartridges but with an additional
|
||||
unique serial number (DS2401 chip), a copy of which is stored in the EEPROM
|
||||
and validated by the game. Used by most non-Bemani games, some early Bemani
|
||||
titles and as an installation cartridge for games with dual installation and
|
||||
game cartridges.
|
||||
- **ZS01 + DS2401**: introduced with later Bemani games such as DDR 4thMIX,
|
||||
these were supposed to be more "secure" than their X76F041 counterparts. They
|
||||
offer 112 bytes of storage, support for identification without a password and
|
||||
*two* unique identifiers (only one of which is normally used).
|
||||
|
||||
There are actually two more cartridge types, based on the X76F100 EEPROM chip.
|
||||
Even though support for these cartridges is present in virtually all 573 games,
|
||||
there is no evidence whatsoever of them having ever been manufactured by Konami
|
||||
and the tool does not support them currently.
|
||||
|
||||
### Unlocking a cartridge
|
||||
|
||||
All cartridges must be unlocked using an 8-byte key prior to reading or writing
|
||||
their contents. This key is different for each game; the tool includes a list of
|
||||
the most common 573 games with their respective keys. When first selecting
|
||||
*Manage security cartridge* from the main menu, you will get to a screen
|
||||
displaying basic information about your digital I/O board (if any) and the
|
||||
cartridge:
|
||||
|
||||
<p align="center">
|
||||
<img src="assets/cartInfoLocked.png" alt="Cartridge information (locked)" />
|
||||
</p>
|
||||
|
||||
You will then have to unlock the cartridge by either selecting which game it
|
||||
belongs to from the built-in list or entering a custom key manually.
|
||||
|
||||
**NOTE**: cartridges that have been previously erased and converted to another
|
||||
game will require the new game's key, so the label on the cartridge may not
|
||||
match the actual key required to unlock it. If the cartridge has been previously
|
||||
erased but not converted, its key will be `00-00-00-00-00-00-00-00` by default.
|
||||
|
||||
As ZS01 cartridges allow for the first 32 bytes of data to be read without
|
||||
providing a key, the tool will automatically read them and attempt to determine
|
||||
which game the cartridge belongs to from those. If a match is found, an
|
||||
appropriate unlocking key will be suggested and an option to use it will appear
|
||||
at the top of the key list:
|
||||
|
||||
<p align="center">
|
||||
<img src="assets/zs01RecommendedKey.png" alt="ZS01 key selection" />
|
||||
</p>
|
||||
|
||||
Once a key is selected, if unlocking succeeds, the contents of the cartridge
|
||||
will be read and the screen will be updated with information about them:
|
||||
|
||||
<p align="center">
|
||||
<img src="assets/cartInfoUnlocked.png" alt="Cartridge information (unlocked)" />
|
||||
</p>
|
||||
|
||||
If unlocking fails you may want to try using another key, however keep in mind
|
||||
that all types of cartridges have lockout mechanisms to deter attempts to guess
|
||||
the key:
|
||||
|
||||
- X76F041 and X76F041 + DS2401 cartridges will allow for up to (usually) either
|
||||
3 or 9 attempts depending on the game. If this number is exceeded without a
|
||||
successful unlock, **the chip will lock out any further access** and the
|
||||
cartridge will thus become **permanently bricked** with no way to restore
|
||||
access.
|
||||
- ZS01 cartridges will similarly only allow for a limited number of unlock
|
||||
attempts, but exceeding it will only result in the contents of the EEPROM
|
||||
being erased and the key being reset to `00-00-00-00-00-00-00-00`, without
|
||||
bricking the chip.
|
||||
|
||||
### Saving cartridge dumps
|
||||
|
||||
After unlocking a cartridge, it is recommended to save a backup of its original
|
||||
state before modifying its contents. The tool offers two different ways to dump
|
||||
cartridges, either to a `.573` file on the currently connected IDE drive (see
|
||||
[Connecting a hard drive](#connecting-a-hard-drive) for more details) or as a QR
|
||||
code that can be scanned and converted to a dump file with the help of the
|
||||
`decodeDump.py` Python script provided alongside the tool. A QR code dump will
|
||||
look like this:
|
||||
|
||||
<p align="center">
|
||||
<img src="assets/qrDump.png" alt="QR code dump" />
|
||||
</p>
|
||||
|
||||
When scanned, the code will yield the dump encoded as a string beginning with
|
||||
`573::`. The dump can be decoded into readable data by invoking `decodeDump.py`
|
||||
followed by the string enclosed in quotes in a terminal:
|
||||
|
||||
```
|
||||
$ ./decodeDump.py "573::OGI8AP ... 8K2000::"
|
||||
Digital I/O ID: 01-12-34-56-78-9a-bc-3d
|
||||
Digital I/O SN: 2990-0818
|
||||
|
||||
Cartridge type: Konami ZS01 (PIC16CE625)
|
||||
DS2401 identifier: 01-07-06-05-04-03-02-d2
|
||||
...
|
||||
```
|
||||
|
||||
`decodeDump.py -i` can also be used to display the contents of a dump file:
|
||||
|
||||
```
|
||||
$ ./decodeDump.py -i path/to/dump.573
|
||||
Digital I/O ID: 01-12-34-56-78-9a-bc-3d
|
||||
Digital I/O SN: 2990-0818
|
||||
|
||||
Cartridge type: Konami ZS01 (PIC16CE625)
|
||||
DS2401 identifier: 01-07-06-05-04-03-02-d2
|
||||
...
|
||||
```
|
||||
|
||||
See [Data formats](formats.md) for a technical breakdown of the dump format.
|
||||
|
||||
## Editing the system identifier
|
||||
|
||||
TODO: add this section
|
||||
|
||||
## Converting cartridges
|
||||
|
||||
TODO: add this section
|
||||
|
||||
## Connecting a hard drive
|
||||
|
||||
The 573 supports up to two devices being connected to the IDE bus.
|
||||
Typically, only a CD-ROM drive will be connected as a master device.
|
||||
This tool supports using an optional harddrive if it is connected to the IDE bus
|
||||
as a slave device. It *should* be fine to leave this hard drive permenantly
|
||||
connected, but this setup is not garenteed to work with every game.
|
||||
|
||||
With the Harddrive, you will be able to:
|
||||
|
||||
- Dump a security cart EEPROM to disk.
|
||||
- Dump the internal flash ROM chips, BIOS, RTC and any inserted PCMCIA cards to
|
||||
disk.
|
||||
- Restore a security cart from a file on the disk.
|
||||
- Restore either or all of the internal flash ROM chips, RTC and PCMCIA cards.
|
||||
- Load any 573 executables from disk.
|
||||
- Take screenshots whilst in the tool.
|
||||
|
||||
To connect a hard drive to the 573, you will need the following:
|
||||
|
||||
- A HDD, SSD or CompactFlash card. Size should not matter but it must be formatted
|
||||
to FAT12/16/32 or ExFAT. *Note: Some CF cards may have compatibility issues.*
|
||||
- An IDE cable with three connectors on it. Both 40-core and 80-core UDMA cables
|
||||
work fine for this. The stock Konami cable is a 40-core single device cable.
|
||||
*Note: Konami's cables and the 573 **do not** have provisions for connectors
|
||||
with key-ing blank pins. You either need to modify your 573 to cut this pin (not
|
||||
recommended) or drill a small hole in the blanking pin to fit it.*
|
||||
- An appropriate adaptor if you are using CF Cards or SSDs. For using a SATA SSD,
|
||||
it is recomended to use a good qaulity adaptor, such as a StarTech IDE to SATA
|
||||
adaptor. Lower qaulity adaptors based on a JMicron chipset or similar may work
|
||||
but might have compatibility issues. Any CF card adaptor should work fine as CF
|
||||
cards support being directly connected to an IDE bus.
|
||||
|
||||
1. Remove the security cart and any PCMCIA devices from the 573. Remove all the
|
||||
screws from the left, right and top sides and then remove the lid.
|
||||
2. Remove the stock 40-core IDE cable and install the motherboard side of your
|
||||
new cable into the 573. If you are using an 80-core cable, this should be the
|
||||
blue connector of the cable.
|
||||
3. Depedning on how you may want to mount your HDD/SSD/CF card, you may want to
|
||||
connect the CD drive to the middle connector of the cable. Make sure the
|
||||
HDD/SSD/CF card is set as a SLAVE device using the jumper settings on the drive.
|
||||
4. Use a Molex splitter cable to split the power from the CD drive to power your
|
||||
new drive. If you have a Bemani 573 with a slimeline CD drive, you may need to
|
||||
make a custom cable to connect directly to the 573's JST-VL connector.
|
||||
5. Test the drive is connected by booting the tool CD and then on the main menu,
|
||||
selecting "View IDE device and filesystem information". If you only see your
|
||||
CD drive listed, you should check your work and the file system of your drive.
|
||||
If you still cannot get the hard drive to show up, press the test button to
|
||||
view any error logs.
|
||||
|
||||
## FAQ and troubleshooting
|
||||
|
||||
### I cannot get past the BIOS "hardware error" screen and into the tool
|
||||
|
||||
- Make sure the disc image has been burned correctly (and not by e.g. dragging
|
||||
the image file onto the disc). The disc should contain a bunch of files named
|
||||
`README.TXT`, `PSX.EXE` and so on.
|
||||
- Try using a different disc and/or another CD-ROM drive. A list of drives known
|
||||
to be compatible with the 573 BIOS can be found
|
||||
[here](https://psx-spx.consoledev.net/konamisystem573/#known-working-replacement-drives).
|
||||
- Ensure the BIOS is not reporting an actual hardware error with the 573. A
|
||||
CD-ROM error will result in `CDR BAD` being displayed, while other errors will
|
||||
be reported with the chip that failed. A list of chips checked by the BIOS can
|
||||
be found [here](https://psx-spx.consoledev.net/konamisystem573/#boot-sequence).
|
||||
|
||||
### I get an error about the CD-ROM being incorrect
|
||||
|
||||
- You have booted into the game installed on the 573's flash rather than from
|
||||
the disc. Turn off DIP switch 4 (the rightmost one) and power cycle the 573.
|
||||
|
||||
### My cartridge does not get recognized
|
||||
|
||||
- Try scraping off any oxidation layer from the cartridge's contacts by rubbing
|
||||
them gently using an eraser and cleaning them.
|
||||
- Ensure the security cartridge connector on the 573 is not worn out, corroded
|
||||
or otherwise damaged.
|
||||
|
||||
### My IDE drive, CF card or adapter does not get recognized
|
||||
|
||||
- Try using a different drive or adapter. Some CF cards, SD card adapters and
|
||||
IDE-to-SATA converters are known to be problematic.
|
||||
- Ensure the drive is formatted with a single FAT32 or exFAT partition. Other
|
||||
file systems such as NTFS are not supported.
|
||||
|
||||
### How do I obtain more information about an error that happened?
|
||||
|
||||
- You may press the test button on your 573 or cabinet at any time to toggle the
|
||||
log window, which will contain detailed information about errors.
|
@ -35,6 +35,14 @@
|
||||
"imagePos": { "x": 984, "y": 0 },
|
||||
"clutPos": { "x": 1008, "y": 1 }
|
||||
},
|
||||
{
|
||||
"type": "tim",
|
||||
"name": "assets/textures/splash.tim",
|
||||
"source": "${PROJECT_SOURCE_DIR}/assets/textures/splash.png",
|
||||
"quantize": 16,
|
||||
"imagePos": { "x": 960, "y": 96 },
|
||||
"clutPos": { "x": 1008, "y": 2 }
|
||||
},
|
||||
{
|
||||
"type": "metrics",
|
||||
"name": "assets/textures/font.metrics",
|
||||
|
@ -35,6 +35,14 @@
|
||||
"imagePos": { "x": 984, "y": 0 },
|
||||
"clutPos": { "x": 1008, "y": 1 }
|
||||
},
|
||||
{
|
||||
"type": "tim",
|
||||
"name": "assets/textures/splash.tim",
|
||||
"source": "${PROJECT_SOURCE_DIR}/assets/textures/splash.png",
|
||||
"quantize": 16,
|
||||
"imagePos": { "x": 960, "y": 96 },
|
||||
"clutPos": { "x": 1008, "y": 2 }
|
||||
},
|
||||
{
|
||||
"type": "metrics",
|
||||
"name": "assets/textures/font.metrics",
|
||||
|