gpt4 book ai didi

c++ - 在 Turbo C++ 3.0 的 16 位 Dos 5 上使用 inp()

转载 作者:行者123 更新时间:2023-11-28 01:05:14 25 4
gpt4 key购买 nike

首先我想说我知道这是一个非常过时的问题。这可能就是为什么我无法通过谷歌找到任何信息的原因。 (或者我只是在搜索方面比我愿意承认的要差!哈哈。)所有结果几乎都告诉我 inp()outp() 是在现代系统上无用,因为内核处理所有输入和输出而不是程序。我在一台 486 机器上运行 16 位 Dos,我已经能够完美地将 outp() 与我的并行端口一起使用。我喜欢 16 位 Dos,我对学习在 NT 时代及更高版本的系统上执行此操作的“新的和改进的”方法不感兴趣(至少现在不是)。

随着清理——

我的问题是关于 inp() 的。我有一本旧的硬拷贝手册,上面说您将一个变量(端口地址)传递给 inp()。在这种情况下,我假设因为我使用 0x378 作为 outp() 的端口,所以我也会将它用于 inp() .因为我之前没有编程接受外部输入,所以我不确定我会从一个简单的开/关开关中获得什么类型的值,所以我写了这个快速代码来获取所有新值-

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <dos.h>

int main(void){
clrscr();

int input;
int buff = 0;

restart:

input = inp(0x378);

if(input != buff){
cout<<input;
buff = input;
}

goto restart;

}

我只是使用了“buff”,这样它就不会一遍又一遍地吐出“255”,并可能在输入引脚通电时掩盖不同的值。不用说,打印的唯一值是“255”。

当我编写一个程序将数据输出到并行端口上的“D”引脚时,我将一个十六进制代码发送到与所需输出相对应的端口......现在我正在处理“S”引脚在并行端口上输入。我应该将十六进制代码返回到程序中吗?

此外,我进入 BIOS 并确保并行端口的模式是 in/out,而不仅仅是 out。在发现我有两种模式后,我兴奋的浪潮很快被同样糟糕的“255”输出压垮了。

任何能为我指明正确方向的信息都会有所帮助。

谢谢!

最佳答案

这看起来很彻底:http://www.beyondlogic.org/spp/parallel.htm

此外,确保在 BIOS 中将并行端口配置为双向模式。其他可能性是仅输出、EPP 和 ECP 模式,但双向将最适合您尝试做的事情。您需要 0x37a 中的位 5 来控制端口的方向。此外,您使用的端口的基地址可能不是 0x378...内存中有一些位置可以获取 LPT1-LPT4 的基地址(BIOS 设置页面可能也会告诉您。)

关于c++ - 在 Turbo C++ 3.0 的 16 位 Dos 5 上使用 inp(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6539345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com