#cas #file #binary-file #basic #file-content #mcp #msx

已删除 msx-mcp

MSX CAS打包器,一个用于管理MSX CAS文件的命令行工具

0.4.1 2023年3月15日

#21 in #cas

MPL-2.0 许可证

66KB
1.5K SLoC

Build Status

MSX CAS打包器

MSX CAS Packager是一个命令行界面(CLI)工具,用于管理MSX CAS文件。CAS文件是一种非常常见的文件格式,用于表示MSX卡带的内容。

使用MCP,您可以对CAS文件执行以下操作。

  • 列出CAS文件。您可以获取CAS文件中包含的文件列表。
  • 将文件添加到新的或现有的CAS文件中。这是MCP最强大的功能之一。您可以使用自己的文件创建自己的CAS文件。基本程序、汇编程序、数据等可以存储到CAS文件中。
  • 从现有的CAS文件中提取内容。您是否曾想要逆向工程您最喜欢的MSX游戏?现在这已经成为可能,多亏了MCP!您可以从CAS文件中提取文件,阅读它们的Basic程序,研究其二进制代码等。
  • 将CAS文件导出为WAV格式。此功能与创建新CAS文件的能力相结合,可以将CAS文件转换为可在MSX硬件卡带接口上播放的WAV格式。编写自己的游戏并在真实的MSX上播放它们!

顺便说一句,MCP是免费和开源的。您只需遵守Mozilla公共许可证的条款,基本上

  • 您可以使用软件做任何您想做的事情,只要您想,无论在哪里。
  • 如果您想修改软件,请仔细阅读条款。

下载二进制文件

MCP的最新版本是0.3.0。您可以在GitHub发行版部分找到安装二进制文件。

如果您的操作系统和架构没有相应的包,请尝试按以下说明从源代码构建。

从源代码构建

MCP是用Rust编程语言编写的。您需要在系统中安装Rust才能构建MCP。最简单的方法是访问项目网站并下载您平台上的最新发行版安装程序。

安装Rust后,只需转到您MCP工作副本的顶级目录,并键入

$ cargo build --release

MCP将在target/release目录中构建。

它的工作原理

MCP是一个命令行实用程序(CLI),因此必须从控制台使用。如果您不知道如何使用控制台,请查看网络上可用的成千上万的教程,稍后再回来。

如果您已从二进制文件安装,请注意。

  • 在Windows平台上,您会找到一个名为MCP Console的应用程序启动器。这只是一个带有适当的%PATH%定义的Windows外壳,用于查找mcp程序。运行此启动器,通过输入mcp --help来测试它。
  • 在Mac OS X中,安装程序会将mcp命令放在/usr/local/bin。在一个典型的安装中,这个目录应该列在PATH环境变量中,这样您就可以在终端中执行mcp。请打开Terminal并输入mcp --help来检查它是否正常工作。

如果您是从源代码安装的,您负责将mcp程序放在您的硬盘上的某个地方,并(建议)将其目录包含在您的PATH环境变量中。如果您这样做,您就可以轻松地执行mcp

如上所述,执行mcp --help将让您知道mcp是否正常运行。但它也向您展示了熟悉命令选项所需的信息。

$ mcp --help
Usage: mcp -l <cas-file>
       mcp -a <cas-file> <file>...
       mcp -x <cas-file>
       mcp -e <cas-file> <wav-file>
       mcp --help
       mcp --version

Options:
    -h, --help                  Print this message
    -v, --version               Print the mcp version
    -l, --list                  Lists the contents of the given CAS file
    -a, --add                   Add new files to a given CAS file. If the CAS
                                file does not exist, it is created.
    -x, --extract               Extracts the contents from the given CAS file
    -e, --export                Exports the CAS file into a WAV file

让我们看看每个命令的工作方式。

列出包内容

使用mcp -l arkanoid.cas(或更长的版本mcp --list arkanoid.cas),我们可以看到arkanoid.cas文件的内容。

$ mcp -l arkanoid.cas
ascii  | ark    |   256 bytes |
bin    | ARK    |    96 bytes | [0xc000,0xc057]:0xc000
custom |        | 32768 bytes |

如您所见,文件内容被显示出来。在这个例子中,我们有三个文件在CAS磁带上。第一列指示文件类型,可以是以下之一

  • binary:二进制文件,可能包含二进制代码和数据混合。它通常通过Basic解释器的BLOAD命令加载。
  • ascii:ASCII文件,可能包含非标记化的Basic程序。它通常通过Basic解释器的LOAD命令加载。
  • basic:Basic文件,包含标记化的Basic程序。它通常通过Basic解释器的CLOAD命令加载。
  • custom:自定义数据,旨在以自定义方式由某些程序加载。

第二列显示文件名。第三列显示文件的字节数。第四列仅对二进制文件显示,它包含二进制数据将放置的内存地址:起始地址、结束地址和开始地址。

向包中添加内容

使用mcp -a myprogram.cas myprog.bin,您可以创建一个新的CAS文件myprogram.cas,其中包含文件myprog.bin

$ mcp -a myprogram.cas myprog.bin
Adding myprog.bin... Done

您可以使用mcp -l检查新CAS文件的内容。

$ mcp -l myprogram.cas
bin    | myprog |   100 bytes | [0x8000,0x803e]:0x8000

bin文件名有意缩短,比CAS文件短。磁带文件名限制为六个字节。如果您的bin文件是myprogram.bin,其名称将被截断。

$ mcp -a myprogram.cas myprogram.bin
Adding myprogram.bin... Warning: filename myprogram.bin is too long, truncating
Done

$ mcp -l myprogram.cas
bin    | myprog |   100 bytes | [0x8000,0x803e]:0x8000

MCP能够根据以下标准通过文件扩展名确定文件类型

  • file.bin 被解释并存储为二进制文件。当导出到 CAS 文件时,自动删除二进制文件 ID 字节(0xfe)。请记住,盒式磁带中的二进制文件不包括它。
  • file.asc 被解释并存储为 ASCII 文件。其内容由 MCP 自动用 EOF(文件结束)字节填充,以满足 MSX 系统成功加载文件所需的 256 字节对齐块。
  • file.bas 被解释并存储为 Basic 文件
  • 任何其他文件扩展名都被解释并存储为自定义文件

可以将新文件添加到现有的 CAS 文件中。

$ mcp -l myprogram.cas
bin    | myprog |   100 bytes | [0x8000,0x803e]:0x8000

$ mcp -a myprogram.cas foobar.dat
Adding foobar.dat... Done

$ mcp -l myprogram.cas
bin    | myprog |   100 bytes | [0x8000,0x803e]:0x8000
custom |        |  6920 bytes |

尽管如此,您不必一个接一个地添加文件。您可以指定多个文件,并将它们全部添加到 CAS 文件中。

$ mcp -l myprogram.cas
bin    | myprog |   100 bytes | [0x8000,0x803e]:0x8000
custom |        |  6920 bytes |

$ mcp -a myprogram.cas foobar2.dat foobar3.dat
Adding foobar2.dat... Done
Adding foobar3.dat... Done

$ mcp -l myprogram.cas
bin    | myprog |   100 bytes | [0x8000,0x803e]:0x8000
custom |        |  6920 bytes |
custom |        | 29648 bytes |
custom |        | 49272 bytes |

提取包内容

使用 mcp -x arkanoid.cas,您可以提取 arkanoid.cas 的内容到工作目录。

$ mcp -x arkanoid.cas
Extracting ark.asc... Done
Extracting ARK.bin... Done
Extracting custom.001... Done

$ ls
ARK.bin		ark.asc		arkanoid.cas	custom.001

文件根据以下标准提取

  • 二进制文件以原始名称加上 .bin 扩展名提取。
  • ASCII 文件以原始名称加上 .asc 扩展名提取。
  • Basic 文件以原始名称加上 .bas 扩展名提取。
  • 自定义文件以 custom.XXX 的形式提取,其中 XXX 是表示自定义文件在磁带中相对位置的序列号。

对于 ASCII 文件,末尾的 EOF 字节不会复制到目标文件,因此您可以以文本形式读取 Basic 源代码。

对于二进制文件,自动将前导 ID 字节(0xfe)添加到目标文件。

$ file ark.asc
ark.asc: ASCII text, with CRLF line terminators

$ cat ark.asc
10 BLOAD"cas:",R

将包导出为 WAV 格式

使用 mcp -e myprogram.cas myprogram.wav,您可以导出磁带的全部内容到一个 WAV 文件中。该 WAV 文件可以用您的声卡播放,并通过盒式磁带接口将数据加载到真实的 MSX 硬件中。

$ mcp -e myprogram.cas myprogram.wav
Encoding block 0... 371 KiB
Encoding block 1... 151 KiB
Encoding block 2... 2788 KiB
Encoding block 3... 11577 KiB
Encoding block 4... 19166 KiB

$ file myprogram.wav
myprogram.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 8 bit, mono 43200 Hz

生成的文件可以播放,并使您的自制程序在您的 MSX 计算机中可加载。

致谢

MCP 是通过从 CAS Tools 端口迁移几个代码片段编写的。非常感谢 Vincent van Dam 的软件。

MCP 导出功能已在 OpenMSX 模拟器中与几个游戏进行了测试。非常感谢其作者,并祝贺他们制作了如此优秀的软件。

依赖关系

~3.5–5.5MB
~94K SLoC