Zim*_*Zim 5 cpu assembly pixel 6502
我知道这是一个令人难以置信的模糊问题,对于程序员来说这可能不是一个好问题,因为这实际上是与硬件有关的事情,但我想一些程序集/机器代码会起到适合本网站的作用.
所以我想知道的是; 想象一下6502处理器.它有一些寄存器,一个指令集和对一定数量内存的访问.然后想象你有一些任意分辨率的液晶屏.如何确定此屏幕上显示的内容?如何确定哪个位置的像素被赋予哪种颜色?例如,屏幕是否始终显示6502累加器中的值的像素,x位置存储在寄存器x中,y位置存储在y中?或者它是否被每台机器解释不同?
有人写了一个JavaScript 6502仿真器,设备显示一个像素,其值在某个内存位置,起价为200美元.例如:
LDA #$08
STA $200
Run Code Online (Sandbox Code Playgroud)
将在位置x:0,y:0处显示粉红色像素.
LDA #$01
STA $205
Run Code Online (Sandbox Code Playgroud)
将在位置x:5,y:0处显示白色像素.
但是,如果您查看NES,它会有一个专用的PPU,它会在屏幕的某个区域显示某些具有特定值的像素.
那么它是怎样工作的?它是由每台机器(即Apple II,C64,NES)进行不同的解释,还是它的解释方式有某种一致性?
事实上,如果为Apple II编译的程序以某种方式在C64上执行会发生什么?机器应该能够阅读说明书,对吗?
处理器本身并不直接处理显示事物.如何使用显示器(如果有的话)取决于不同机器之间可能不同的其他硬件组件.正如你所说NES有一个PPU,C64有一个VIC,而一个模拟器可能还有别的东西.
是的,如果cpu是相同的,指令将是相同的,但诸如可执行文件格式,硬件外围设备,内存布局和任何OS/ROM服务之类的东西将是不同的,因此程序可能不会运行.
图形的显示方式取决于机器,因此这不是绝对的答案。例如,在C64上,图形硬件被映射到普通的地址空间中。因此,您必须写入内存的特定部分才能在屏幕上打印字符。如果要显示图形,则必须通过写入显示硬件的寄存器来切换模式,并且映射的内存也可能更改。因此,C64的正常可访问内存低于64KB。但是,您可以关闭内存映射,从而可以访问图形内存下方的完整内存,因此它变成了没有显示的计算机。
但是,在PC上,您有VGA,EGA,Hercules卡等,这些卡是通过访问特定端口并通过这些端口向其发送命令来写入的。完全不同的方法。但这是系统设计决定,并不取决于CPU。
事实上,如果为Apple II编译的程序以某种方式在C64上执行会怎样?机器应该能够阅读说明,对吗?
好吧,答案很明确。这很可能会崩溃,因为即使指令集可能相同(我不知道苹果使用的是哪个CPU),硬件细节也会有所不同。