3

来自http://www.altdevblogaday.com/2011/08/06/demise-low-level-programmer/

“当我开始编写许多我们现在认为理所当然的元素时,它们并不存在。当时没有 DirectX,而且没有多少兼容的库可用于当时的免费编译器。所以我不得不为大多数基本程序编写自己的代码、键盘处理程序、鼠标处理程序、视频内存访问器、光栅化器、纹理映射器、blitters……我当时编写的程序 100% 是我自己的代码,我必须能够处理任何事情。”

我正在寻找有关如何了解有关低级编程的更多信息的建议。例如,编写键盘/鼠标驱动程序、vga 驱动程序或 ma​​lloc 等基本函数。

解决这个问题的最佳方法是什么?我是一名本科 CS 学生,参加过有关计算机架构/组装的课程,我们在 DE0-nano FPGA 上用 VHDL 编写了一个简单的流水线处理器。我有不错的 C 编程知识。

在我看来,在现代 x86 计算机上学习这些东西似乎很困难。微控制器更好(如arduino板)吗?还是 FPGA(但我的 DE0-nano 似乎有限)?或者也许买一台像Commodore 64这样的旧电脑来像当时的人一样学习?

有没有关于这个主题的书之类的资源?

4

1 回答 1

3

我会推荐一种微控制器方法、msp430、avr 或众多分支之一。您可以花 10-20 美元从 ti 购买一个 msp430 或一个 arm 启动板,您也可以花 10-20 美元找到基于 stm32 的发现板,stm32f0 (cortex-m0) 简单、基本。stm32f4 加载了缓存和 fpu 之类的东西,但仍然是一个微控制器。

我认为微控制器方法将带你回到根源,非常基本的东西,硬件通常没有视频或硬盘驱动器或任何东西,但你确实学会了如何掌握工具(编译器、链接器等)以及如何阅读手册等

您可以快进到支持 linux 的硬件,如树莓派或 beaglebone。在所有级别,尤其是支持 linux 的级别,除了视频芯片、usb 芯片等的手册外,您还需要使用 linux 源代码来学习。了解 linux 驱动程序通常非常通用,并且通常包含驱动来自一个供应商的整个系列或整个硬件历史的代码,因此一堆代码可能与手册中的任何内容都不匹配,但有些会,这就是您将克服理解手册内容的困难。并不意味着您必须重新编写 linux 才能使用此信息。

从小处着手,一步一步,单独从头开始 pcie 和视频是一项重大任务,如果你从那里开始你很可能会失败,除非你已经拥有知识和经验(如果你这样做了,你就不会在这里问)。

您还可以采用 bochs 或模拟旧 8086 DOS 系统的方法,如果您能找到一些好的、旧的、基于 dos/8086 的手册,您可以查看注册器、cga 模式、vga 模式等。磁盘控制器可能仍然很困难,等等......

有很多 arm、avr、msp430、mips 等(以及 x86,但我要等到以后才去那里)指令集模拟器可以避免硬件成本,也可以避免损坏硬件和不得不购买更多的成本(即使有很多经验也会发生),甚至更好地编写自己的指令集模拟器...... vba 一些 nds 模拟器,逐步升级到 qemu。

于 2013-10-12T14:14:42.983 回答