27得票7回答
CPU仿真和锁定到特定的时钟速度

如果您阅读过我其他的问题,就会知道这个周末我花了很多时间编写了一个6502 CPU模拟器作为一个编程练习。CPU模拟器大部分完成,根据我的有限测试来看,它似乎相当准确,但是其运行速度非常快,我想将其降到实际机器的时钟速度。我当前的测试循环是这样的: // Just loop infini...

21得票7回答
6502 CPU仿真

周末到了,所以我会写一个业余项目来放松一下,这样就可以从整个星期的编程中得到解脱。 昨天我编写了MOS 6502 CPU模拟器的框架,实现了寄存器、堆栈、内存和所有操作码。(源代码链接如下) 我可以在我编写的调试器中手动运行一系列操作,但我想加载一个NES rom并将程序计数器指向它的指令...

14得票3回答
快速对6502进行带符号16位除以7的计算方法

我正在为6502 cpu编写汇编语言程序,发现需要一个尽可能快的除以7例程,特别是可以处理16位被除数的例程。 我熟悉这里找到的例程,但是通用除以7例程的推广非常复杂,并且对一般算法(使用整数除法) x/7 ~= (x + x/8 + x/64 ... )/8 的粗略检查表明,要处理16...

13得票4回答
6502仿真实现ADC和SBC的正确方法

我一直在开发MOS 6502模拟器,但是ADC和SBC似乎无法正常工作。 我正在将AllSuiteA程序加载到模拟内存的0x4000中测试我的模拟器,在test09中,我的当前ADC和SBC实现没有获得正确的标志位。 我尝试了无数次更改它们的算法,但每次都会导致进位标志位和溢出标志位略有差异,...

12得票6回答
了解指令如何被翻译(计算机体系结构)

这位用户正在寻找学习低级编程的资源,希望了解指令(如十六进制或汇编代码)如何在简单的计算机中执行,并想写一个模拟器。他们已经学习了计算机体系结构、逻辑门、时序逻辑等内容,并且对使用汇编语言的6502有一些兴趣。他们寻求推荐书籍和资源来帮助他们理解这些概念并实践低级编程。

12得票3回答
对8位系统上lisp类语言的虚拟机感兴趣

我正在寻找适用于8位微处理器且支持动态语言的虚拟机软件。我希望使用虚拟机解决方案,因为从代码密度、可移植性以及可以留更多空间给更大的程序等方面,我看到了优势。 我的目标是在类似6502微处理器上运行完整的LOGO解释器,遵循“LOGO for the Apple II”语法。 我已经看到过...

11得票3回答
如何定义“VALUE”和“TO”

我希望在一个RPC/8上(这是一个Minecraft mod中的模拟计算机),实现Forth单词VALUE和TO。我的最佳尝试得到了一组单词,只要我不在编译时使用它们就可以正常工作。更具体地说,VALUE有效,但TO无效。 : VALUE CREATE , DOES> @ ; : TO...

11得票1回答
6502轻量级压缩算法

我正在为我编写的Forth在Commodore PET上实现虚拟内存,使用双卡带机,并计划使用PET本地的192字节卡带数据文件格式。由于只有32K的RAM可用于“一切”,因此我在语言中嵌入了Woz的优秀且非常节省内存的Sweet-16解释器。一个Forth块(通常)是1024字节。将块ID的...

11得票2回答
等待$D012的变化(C64汇编)

我在模拟C64机器上尝试汇编时遇到了一些问题。 我想要做的是检查键盘上的“N”键是否被按下,程序应该等待地址$D012上出现变化。现在我不明白的是如何“等待”出现变化?有人能告诉我这是怎么回事吗? 检查键盘上的N按键是否按下很简单-只需使用子程序FFE4(输入)和FFD2(输出)。 我并...

10得票2回答
如何在Commodore 64中改变内核SCNKEY例程行为

我正在尝试使用Commodore 64的内核例程实现游戏控制。下面的代码可以工作,但有一个例外。每个按键都被计为单个输入,例如:如果您一直按住按钮,则没有效果。您必须松开并再次按下才能进行移动。如何更改此行为?简单地说,我想重复按键操作,只要按键保持按下状态即可。 GETIN = ...