Export Hoot memory dumps to VOPM instruments
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

README.md 3.0KB

5 years ago
5 years ago
5 years ago
1 year ago
5 years ago
5 years ago
5 years ago
5 years ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # hootvopm
  2. This script was initially made to convert a [Hoot](http://snesmusic.org/hoot/v2/) memory dump into an .opm instrument pack, suitable for the VOPM VST plugin. It's an extremely rudimentary way of extracting FM instruments from games, but it works.
  3. Over time, though, I've found myself slowly turning this into a general Yamaha 4op rip-o-tron.
  4. ## Usage
  5. `./hootvopm.py [-b] -t format input_file`
  6. Input file can also be `-` to read from stdin.
  7. Output is dumped straight to stdout; redirect it to a file if you want to save it.
  8. Pass -b to read straight binary data instead of comma-separated values.
  9. ### Currently-supported chip types and formats
  10. | ID | Description |
  11. |-----------------|----------------------------------------------------------------|
  12. | `raw` (Default) | Raw data in 32-byte groups; see table below |
  13. | `opm` | OPM register area |
  14. | `opn` | OPN register area |
  15. | `opna` | OPNA register area (similar to OPN but has 3 more instruments) |
  16. | `solfeace` | Format used in Sol-Feace for X68000 ("SOL.VCE") |
  17. #### Raw data format
  18. | Offset | Value |
  19. |--------|-------------|
  20. | 0x00 | DT/MUL* |
  21. | 0x04 | TL* |
  22. | 0x08 | KS/AR* |
  23. | 0x0C | AMS-EN/D1R* |
  24. | 0x10 | DT2/D2R* |
  25. | 0x14 | D1L/RR* |
  26. | 0x18 | FL/CON |
  27. | 0x19 | AMS/PMS |
  28. Rows marked with * are groups of 4 bytes, one per operator.
  29. If you're curious, this is the format found in the PC-88VA version of Sorcerian, plus some padding bytes.
  30. ## Capturing memory in hoot
  31. * Left- and right-clicking the "driver work" area flips between available memory pages. Scrolling the wheel in this area scrolls through the current page; you can also use Ctrl-(Up/Down/PgUp/PgDn) for this purpose.
  32. * When you see the area you need to capture, use Ctrl-C to copy it to the clipboard. This copies the entire page to the clipboard in a human-readable format, with 16 comma-separated hex bytes per line (plus a comma at the end for whatever reason, but this is ignored).
  33. * Paste this into a file, trimming it down to get the register area of the FM sound chip. Save it as whatever.
  34. ### Tips
  35. * Most chips (read: all of the ones currently supported by this script) have a 256-byte register area, meaning you'll need to trim it down to 16 lines.
  36. * From what I've seen, the chip's register area almost always resides on the first page, starting either at 0x0000 or 0x0100.
  37. * This should be obvious, but for the formats that don't involve capturing the register area, you should pass `-b`.
  38. ## Known issues
  39. * Since the script looks at a simple static memory dump, it has no way of capturing certain data, instead replacing it with placeholders. These include:
  40. * LFO data
  41. * Operator on/off state; all operators are considered to be in use (this *could* potentially be inferred, though)
  42. * Panning, though VOPM doesn't seem to use this