来自http://www.altdevblogaday.com/2011/08/06/demise-low-level-programmer/:
“当我开始编写许多我们现在认为理所当然的元素时,就不存在了。没有DirectX,并且当天的免费编译器没有很多兼容的库。所以我必须编写自己的代码大多数基本程序,键盘处理程序,鼠标处理程序,视频内存访问器,光栅化器,纹理映射器,blitters ......我编写的程序是100%我自己的代码,我必须能够处理任何事情。“
我正在寻找有关如何更多地了解低级编程的建议。例如,编写键盘/鼠标驱动程序,vga驱动程序或类似malloc的基本功能。
最好的方法是什么?我是一名本科CS学生,并开设了有关计算机体系结构/装配的课程,我们在DE0-nano FPGA上用VHDL编写了一个简单的流水线处理器。我有一个不错的C编程知识。
在我看来很难在现代x86计算机上学习这些东西。微控制器是否更好(如arduino板)?或FPGA(但我的DE0-nano似乎有限)?或者也许买一台像Commodore 64这样的旧电脑来像当时的人一样学习?
有没有关于这个主题的书籍?
答案 0 :(得分:3)
我会推荐一种微控制器方法,msp430,avr或众多武器之一。您可以从ti获得msp430或其中一个手臂启动板大约10-20美元,您也可以找到基于stm32的发现板10-20美元,stm32f0(cortex-m0)简单,基本。 stm32f4加载了缓存和fpu之类的东西,但仍然是一个微控制器。
我认为微控制器方法将带你回到根本,非常基本的东西,硬件通常没有视频或硬盘或任何东西,但你确实学习如何掌握工具(编译器,链接器等)以及如何阅读手册等。
你可以快速转向支持linux的硬件,如raspberry pi或beaglebone。除了视频芯片,usb芯片等手册之外,在所有级别,特别是Linux级别,您还需要使用linux源代码来学习。了解linux驱动程序通常非常通用,并且通常包含驱动整个系列的代码或来自一个供应商的整个硬件历史记录,因此一堆代码可能与手册中的任何内容都不匹配,但有些代码将会是您所在的位置克服了解手册所说的内容。并不意味着你必须重写linux才能使用这些信息。
从小开始一步一步,pcie和视频从头开始是一项重大任务,如果你从那里开始你很可能会失败,除非你已经拥有知识和经验(如果你做到了你不会在这里问)。
你可以采取的方法是bochs或模仿旧8086 DOS系统的东西,如果你能找到一些好的,旧的,基于dos / 8086的手册,你可以在注册表,cga模式,vga模式等等。光盘控制器可能仍然很难等......
有很多arm,avr,msp430,mips等(和x86但我不会去那里直到以后)指令集模拟器可以避免硬件成本并且还可以避免损坏硬件和拥有硬件的成本购买更多(即使有很多经验也会发生),甚至可以更好地编写自己的指令集模拟器... vba一些nds模拟器,一直到qemu工作。