3

我有一个用 BASIC 编写的项目。我不确定确切的原因,但除非从 FAT-16 文件系统运行,否则该应用程序将无法运行。

我宁愿尝试在现代操作系统(Vista/XP)中设置和支持该应用程序的环境,而不是重写它。

有谁知道如何通过某种代码更改(到 BASIC 代码)或 FAT-16“模拟器”(如果存在这样的东西)让这样的应用程序在 XP/Vista 中运行?

4

8 回答 8

7

您可以尝试通过DOSBOX运行它:

DOSBox 模拟 Intel x86 PC,配有声音、图形、鼠标、操纵杆、调制解调器等,这是运行许多无法在现代 PC 和操作系统(例如 Microsoft Windows XP、Windows)上运行的许多旧 MS-DOS 应用程序所必需的Vista、Linux 和 FreeBSD

(来自他们的维基

我现在用了好几年了。它很好,稳定且非常强大。有几个第三方图形用户界面,让您的生活更轻松

于 2008-09-28T12:32:43.290 回答
5

正如已经建议的那样,除了让应用程序在虚拟化环境中保持活跃之外,首先要做的是弄清楚为什么代码似乎需要 FAT-16。

如果应用程序(或其运行时)特别邪恶,FAT-16 要求可能源于它试图绕过操作系统进行直接磁盘 I/O 的事实。如果 BASIC 代码本身试图实现该特技,您应该会在 I/O 例程中看到大量的 CALL、PEEK、POKE 甚至偶尔的 IN 和 OUT 语句。确定运行时的用途更加困难:如果它来自 Microsoft、基于 DOS 且不太古老(例如 GWBASIC 或 QuickBASIC/PDS),或者基于 Windows,它应该没问题。

无论如何,如果应用程序或运行时尝试直接磁盘 I/O,你就会失败:如果没有大量的、类似重写的代码更改,几乎不可能让事情在现代操作系统上运行。

如果应用程序使用普通的 BASIC 工具进行输入和输出(例如 OPEN "file" FOR 不管 AS #1),并且运行时也使用普通的操作系统接口,那么它仅适用于 FAT-16 的最可能原因是它被长文件名彻底弄糊涂了。

首先要尝试将应用程序放在一个具有短名称的目录中(例如 c:\myapp),然后看看接下来会发生什么。可能它只是工作:否则,您应该能够通过单步执行 BASIC 代码来弄清楚发生了什么(假设调试器是其运行时环境的一部分)。

如果没有有关您的应用程序运行的确切解释器/编译器的更多信息,就不可能更详细地回答您的问题。如果到目前为止的答案没有帮助,您可能需要编辑您的问题以包含此信息。

于 2008-09-28T12:35:14.920 回答
1

在 VMWare 虚拟机中运行旧版本的 Windows,该虚拟机本身在现代操作系统中运行。

于 2008-09-28T12:17:16.667 回答
1

从闪存、压缩驱动器或您获得的任何可移动媒体运行它。
Windows XP 将 1GB USB 闪存驱动器格式化为 FAT 没有问题,不需要额外的工具。
此外,如果应用程序真的很邪恶,那么您希望通过驱动器的边界来限制它的邪恶。

于 2008-09-28T14:11:17.453 回答
0

取决于环境:在现代操作系统上创建 Fat-16 文件系统仍然是可能的,您可能只需要额外的工具,例如 Acronis DiskDirector 甚至一些 Linux 的 fdisk 变体。

请记住,FAT-16 的分区大小限制为 2 GB。

但如前所述:最好找出原因。听起来像是某种 WTF-Copy-Protection。

于 2008-09-28T12:43:49.177 回答
0

我同意@eugensk00 的建议,我们有一些有点古怪的仪器软件,它不会保存到 NTFS 硬盘,但会保存到一个小记忆棒(1GB)......

于 2008-09-28T14:16:33.290 回答
0

您也许可以将代码直接导入 VB.NET(尽管几乎可以肯定它需要一些修改)。然后,您可以用 VB.NET 调用替换原始应用程序的文件 IO 调用(几乎可以肯定是您的问题),从而摆脱 FAT16 问题。

于 2008-09-28T14:17:47.750 回答
0

另请注意,一些老式程序在写入文件之前首先检查是否有足够的磁盘空间,如果驱动器太大以至于溢出它显然正在使用的 16 位计数器,则会导致古怪的问题。(如果是这种情况,那么它要么工作,要么不工作,这取决于溢出的性质)。

于 2010-08-30T05:46:38.580 回答