#vga #微控制器 #控制台 #输出 #帧缓冲区 #像素 #显示

无需 std vga帧缓冲区

通过VGA兼容信号输出的文本控制台

14个版本 (7个破坏性更新)

使用旧Rust 2015

0.9.0 2019年8月30日
0.8.1 2019年7月13日
0.8.0 2019年6月29日
0.7.4 2018年10月22日
0.4.0 2018年7月27日

#565 in 嵌入式开发

每月 40 次下载
2 软件包 中使用

MIT/Apache

1MB
26K SLoC

VGA Framebuffer

此软件包实现了在嵌入式微控制器上执行基本的VGA文本输出,无需使用任何其他定时器外设和几个GPIO引脚。

此软件包编写为硬件无关。

  • 您需要提供一个实现 Hardware 特性的对象。
  • 必须在每行扫描的开始处调用函数 isr_sol(),例如使用定时器中断。
  • 然后这将调用给定的 Hardware 对象的 write_pixels() 函数,为该扫描行中的每个八位(或8像素块)提供RGB值。
  • 这些像素值应在适当的时候(例如当 line_start 定时器触发时)缓冲(例如在SPI FIFO中)并发送到屏幕。
  • configure() 回调为您提供了所有这些适当的时序。

示例代码使用ANSI转义序列渲染到控制台,以设置颜色并打印适当颜色的 '█' 字符。显然,在具有真实VGA输出的系统上,您需要将像素以0V到0.7V之间的模拟值发送到显示,并带有适当的水平和垂直同步信号。这留给读者作为特定平台的练习,但 Monotron 是一个特定嵌入式平台的示例。

规格

  • 800 x 600 @ 60 Hz 输出信号,带有40 MHz像素时钟
  • 文本模式下的有效分辨率 400 x 600(以半速运行像素时钟)
  • 8色RGB输出(红色、绿色、蓝色、青色、品红色、黄色、黑色和白色)
  • 8像素 x 16像素位图字体,来源于FreeBSD
  • MS-DOS CodePage 850字符集
  • 48列 x 36行文本输出
  • 支持双高度文本
  • 每个字符单元存储一个前景/背景对
  • 单缓冲
    • 通过指针修改共享内存,但最坏情况是轻微的屏幕闪烁,在下一帧中修复
  • 可选的Mono 384x288帧缓冲区,使用文本模式属性着色。
    • 将每行水平线翻倍以降低内存使用
    • 比文本模式多使用13,824字节
    • 会遭受严重的属性冲突,就像ZX Spectrum :)
    • 可以为图形模式设置起始和结束扫描线,以允许具有降低内存消耗的混合文本/图形分屏

由于没有足够的CPU处理能力在40 MHz下渲染彩色像素,像素是双宽的。我在一个分支中有一个实验性的40 MHz支持,但只有黑白。

在搭载80 MHz Cortex-M4F核心的德州仪器Tiva-C TM4C123上测试过Monotron

即将推出...

  • 可选的3位/像素RGB 192x288帧缓冲区模式。
    • 比文本模式多使用20,736字节。
    • 没有属性冲突,但分辨率减半。
  • 8像素 x 8像素字体,更适合图形模式
  • 无边框80列 x 25行单色文本模式(使用10x24位图字体)

贡献

我很乐意接受补丁以启用其他分辨率和/或其他文本分辨率。

依赖项