从 Arduino 到 PCI SVGA 视频卡的图形输出

问题描述 投票:0回答:0

我正在从事一个复古计算机项目,该项目需要一定程度的高分辨率视频输出(至少 800x600 16 位颜色)。我知道所有复古计算机(我指的是 80286 之前的任何计算机)都使用低得多的分辨率和颜色模式,因此不能将其视频子系统的示意图用作起点。我的目标是显示相对静态的员工图片并不时更新它。

我认为连接一个旧的 PCI 视频卡是个好主意,配置它,将数据加载到帧缓冲区,并专注于主要的计算活动,将整个视频输出工作留给视频卡。问题是我没有低级视频编程的经验,所以请各位有经验的成员指导。

作为测试台,我有一块 Arduino Mega 2560 板和 Stealth Video 2500 PCI 视频卡。该视频卡具有 2Mb 的 DRAM,并且符合 PCI 2.1 和 VBE 2.0 标准。使用的视频处理器是 Alliance Semiconductor ProMotion-AT24。

我能够获得的关于视频处理器的唯一技术文档是https://vgamuseum.info/index.php/cpu/item/download/45_fd02fb1278fd0ce4b988fffec470428a这是针对高级芯片ProMotion-AT3D的(我假设基本的 2D 功能是相同的。)这个文档非常简洁,几乎没有解释。如果有人为这些旧芯片找到了更多信息化的编程指南,请在这里或私信中告诉我。

到目前为止,我已经实现了基本的 PCI 通信(标准可在此处找到:https://w3edu.cs.vsu.ru/EDK/DOCs/PCI21.PDF)以使用端口在 Arduino 中读写 PCI 配置空间标头A、C、K、L 用于 32 位 AD 线,端口 B - 用于 C/BE#,以及其他几个用于 PCI 通信控制的引脚。 PCI Configuration Space Header 的信息很少,因此需要更深入地研究视频卡的 I/O 空间。

>! PCI Configuration Space Header
>! Words requested: 64 Words read: 64
>! Received Data (HEX):
>! 64241142
>! 4200000
>! 3000000
>! 0
>! 0
>! BB22231
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! C0000
>! 0
>! 0
>! 80
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0
>! 0

我看到的进一步算法是通过为特定寄存器设置特定值,然后将像素数据写入帧缓冲区,将视频卡置于所需模式。我想,视频卡会完成剩下的工作(显示特定分辨率和颜色模式的图片。)如果我太天真,请纠正我。如我所见,使用 VESA BIOS 扩展(标准可在此处找到:http://www.phatcode.net/res/221/files/vbe20.pdf)可能会简化流程并使其与硬件无关。

这是我需要处理视频寄存器编程的老派程序员的指导的地方。一个关于将什么内容放入哪个寄存器以设置具有 800x600 分辨率和 32 位颜色的 115h VESA 模式以及如何将像素数据放入帧缓冲区的最小分步说明将是一个真正的宝藏。

arduino pci vbe svga
© www.soinside.com 2019 - 2024. All rights reserved.