Concurrent DOS + QEMU 通过并口仿真丢失数据

Concurrent DOS + QEMU losing data through parallel port emulation

我有一个软件 运行 在并发 DOS 3.1 上,我用 QEMU 5.1 模拟它。

在这个程序中,有几个打印数据的选项。问题是到达我的主机的数据与发送的数据不对应。

启动qemu的命令:

qemu-system-i386 -chardev file,id=imp0,path=/path/to/file -parallel chardev:imp0 -hda DISK.Raw

因此在我的客户机并行端口上发送的输出被重定向到 /path/to/file。 当我从 CDOS 发送字符 'é' 时:

echo é>>PRN

CDOS 上使用的代码页是代码页 437,在这个字符集中,字符 é 由 0x82 表示,但在我的主机上,我收到以下内容:

cp437 é -> 0x82     ---------> host -> x1b52 x017b x1b52 x00

所以我尝试了其他方法。我在文件中写了字符 'é',并使用 nc.exe(来自 brutman 和 libmtcp)发送文件,使用 nc 时,值保持为 0x82。

所以我的问题是,当我将数据发送到虚拟并行端口时会发生什么?我的数据何时转换?它是 Concurrent DOS 上的并行端口吗?是 QEMU 吗?我不知道如何通过 LPT1 正确发送我的数据。

我也试过这个:

qemu-system-i386 -chardev socket,id=imp0,host=127.0.0.1,port=2222,server,nowait -parallel chardev:imp0 -hda DISK.Raw

我可以很好地读取套接字,但输出与我在文件中写入时相同,é 被转换为 x1b52 x017b x1b52 x00。

字节序列“1B 52 01 7B 1B 52 00”正在使用 Epson FX 样式打印机转义序列 (there's a reference here)。具体来说,“1B 52 nn”是ESC R n,select是国际字符集,字符集0是美国,1是法国。所以整个序列是“Select French character set; print byte 0x7b; select US character set”。在此打印机标准的法语字符集中,0x7B 是 e-acute é。

这几乎可以肯定是 CDOS 打印机驱动程序假设 PRN: 末尾的东西是 Epson 打印机并发出适当的转义序列以在那种打印机上输出您的文本。

好的,所以我终于弄明白了...经过几个小时搜索这个 printer.sys 驱动程序可能在哪里,或者如何删除它,没有并发 DOS,安装命令是“n”。当然,它没有列在“帮助”命令中...

无论如何,您可以在那里设置您的打印机,select您想要的端口“无转换”。它实际上是在爱普生 MX-80/MX-100.

感谢 Peter 的回答,你让我走上了正确的道路!