大约十年前,我从286 ... 486台用于倾销的计算机上获得了ISA视频卡。 视频卡已经过测试,并且此后一直在抽屉中收集灰尘。 几年前,我有一个想法,但是我应该将这样的视频卡连接到微控制器吗? 这就是我将在本文中讨论的内容。
要连接旧的ISA视频卡,一条8位数据总线和一条20位地址总线就足够了。 微控制器我喜欢AVR系列产品的简单性,所以我选择了Atmega16。 但是您可以为您带来任何方便-在这种情况下,相同的stm32支脚肯定就足够了,而无需外部捆绑。 但是Atmega16没有足够的支脚来容纳所有这些总线,因此地址总线被组装在另外三个苏联并行寄存器(我有大量)K588IR1中。 微控制器依次在这三个寄存器中设置地址部分。 不需要更多。

在ISA连接器上,此电路的输出必须按以下方式连接:
+5,
+12,
地线
REFRESH(通过电阻上拉至+ 5V),
A0-A19,
D0-D7,
重设
Memw,
成员,
OW
IOR
麦酒
RDY,
AEN(连接到GND)。
在红色图片中,我标记了需要连接的ISA连接器引脚。
对于某些视频卡,您需要连接-5 V和-12 V(您必须将它们连接到某个地方-例如,从TracoPower电源获得)和OSC信号(14.318 MHz)-它可以由K155LN1上最简单的发生器生成。 其他图形卡不需要这些行。 这真幸运。 通常,如果ISA的相应脚悬在视频卡的空中,则绝对不能连接它。 请记住,视频卡在+ 5V线路上的功耗相当大-如果使用LM7805之类的电源,请确保将其放在散热器上(最好使用风扇)。
就我个人而言,我的组装设计如下所示:

剩下的唯一事情就是以某种方式初始化视频卡并开始使用它。 互联网上有类似的项目-我找到了一个(
链接 ),在那里我获得了Trident 9000i视频卡的初始化代码。 在来自Internet的同一程序中,存在Trident9000C的初始化代码,但注释表明该代码无效。 我查了一下 它确实不起作用-屏幕上的垃圾和视频卡都没有响应将数据写入RAM。
工作视频(图片通过计算机的LPT端口通过SPI传输到了Atmega16(如右图所示,这些行在图中没有显示)):
(我在视频中进行了预定-320x200模式,而不是320x240)
通过将此模块与光电鼠标结合(
有关使用鼠标传感器的文章 ),我得到了以下信息:
如果您希望运行任何现有的ISA图形卡,则应该在Internet上找到所需图形卡的BIOS(例如,
此处 ),然后使用IDA对其进行拆卸。 有一个常规的X86代码。 它只是不从地址0开始-有一个签名(2个字节)和一个校验和(1个字节)。 总计,您需要从第3个字节开始。 并始终如一地找出您需要记录哪些端口以使卡工作。 坦白说,我没有耐心来了解Trident9000C出了什么问题。
为了使用ISA总线,编写了一个模块:
Trident 9000i图形卡的初始化如下:
我还启动了OAK OTI077视频卡(直到我不小心对其施加了12 V电压,然后烧坏了):
顺便说一下,这里有VGA适配器寄存器方面的专家吗? 初始化视频卡时,我在视频模式更改代码中看到奇怪的事情:
通常,这里没有什么特别的。 写入属性控制器的寄存器分两个步骤:首先写入寄存器号,然后写入数据。 要始终从记录数字开始,请阅读ISR1(从0x03DA开始)-就是这样。
但这是奇怪的事情。 属性控制器没有0x20寄存器! 他的最后一个寄存器为0x14。 即使会有这样的寄存器,为什么没有价值记录呢? 端口中应该有两个条目。 在这里,她一个人。 我搜索了互联网,发现由于某种原因(在书中我没有找到这个),您可以简单地通过组合以下位,一次在0x10寄存器中写入值0x20:System_Out8(ATTRCON_ADDR,0x10 | 0x20); 然后,指定的记录将0x20写入寄存器0x00? 但是为什么这样做呢? 是这样吗? 这对我来说很有趣,这就是为什么-整个问题是,初始化后有时候颜色会掉下来。 调色板没有设置。 可以看出它正在变化,但是颜色根本不应该是它们应该的颜色。 如果再次进行初始化,则将恢复所有内容。 目前尚不清楚在什么阶段发生。 通过实验,我发现很有可能这只是视频模式的安装。 但是我不明白到底是什么。
→通过印刷电路板
链接到档案
→使用固件
链接到档案