FAT-16在现代操作系统上

时间:2020-03-06 14:50:40  来源:igfitidea点击:

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

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

有谁知道如何通过某种代码更改(更改为BASIC代码)或者FAT-16"仿真器"(如果存在)来使这样的应用程序在XP / Vista中运行?

解决方案

在本身运行在现代OS中的VMWare虚拟机中运行Windows的较早版本。

我们可以尝试通过DOSBOX运行它:

DOSBox emulates an Intel x86 PC,
  complete with sound, graphics, mouse,
  joystick, modem, etc., necessary for
  running many old MS-DOS applications that
  simply cannot be run on modern PCs and
  operating systems, such as Microsoft
  Windows XP, Windows Vista, Linux and
  FreeBSD

(来自他们的Wiki)

我已经使用了几年了。它是好的,稳定的并且非常健壮。同时具有多个第三方GUI,使生活更轻松

正如已经建议的那样,除了使应用程序在虚拟环境中保持活动之外,要做的第一件事就是弄清楚为什么该代码似乎需要FAT-16.

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

无论如何,如果应用程序或者运行时都在尝试直接磁盘I / O,我们将会迷失方向:如果没有大量的,类似于重写的代码更改,要使事情在现代OS上运行几乎是不可能的。

如果应用程序使用常规的BASIC设施进行输入和输出(例如,对于AS#1,则为OPEN"文件"),并且运行时也使用常规的OS接口,则最有可能仅在FAT-16上工作的原因是:长文件名使它完全混乱。

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

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

取决于环境:在现代OS上仍然可以创建Fat-16文件系统,我们可能只需要其他工具,例如甚至某些Linux fdisk Variant的Acronis DiskDirector。

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

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

从闪存,zip驱动器或者任何可用的可移动媒体中运行它。
Windows XP将1GB USB闪存驱动器格式化为FAT,没有问题,不需要其他工具。
此外,如果应用程序确实是邪恶的,那么我们希望通过驱动器的边界来限制它的邪恶。

我第二次@ eugensk00的建议,我们有一些古怪的乐器软件,它不会保存到NTFS硬盘上,但会保存到一个小记忆棒(1GB)中。

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

还要注意,某些老式程序在写入文件之前会先检查是否有足够的磁盘空间,如果驱动器太大而导致显然使用的16位计数器溢出,则会导致古怪的问题。 (如果是这样,则根据溢出的性质,它会起作用还是不起作用)。