模拟器如何工作?当我看到NES/SNES或C64模拟器时,它让我震惊.

您是否必须通过解释其特定的装配说明来模拟这些机器的处理器?还有什么进入它?它们通常是如何设计的?
你能为有兴趣编写模拟器(特别是游戏系统)的人提供建议吗?
好.我希望它不会被关闭,因为我有25年的好奇心,我很想理解这个伎俩.
在商品64中,6569 VIC无法解决边界问题.您所能做的就是在中心区域绘制像素,即光标移动的像素.边框总是均匀的,虽然你可以用捅53280改变它的颜色,如果我没记错的颜色.
尽管如此,我清楚地记得游戏介绍边框的特色是图形,就像完全可以寻址一样.我试图理解它是如何工作的,但从未达到过这一点.传说说这是一个聪明的精灵用途,在某些情况下,可能会被边界划出,但我不知道它是否是一个都市传说.
编辑:只需从提供的链接中读取此内容即可
精灵在垂直光栅线上复用(超过8个精灵,有时多达120个精灵).在Group Crest于2007年5月发布Krestage 3之前,人们普遍认为在一条栅格线上不会出现超过8个精灵,但是分配新的Y坐标会使其重新出现在屏幕下方.
这是邪恶的....你击败了栅格并重新定位精灵然后到达那里......
我看过很酷的C64演示,在屏幕的边框区域显示精灵.这不应该是可能的; 我认为他们设法以某种方式欺骗了图形芯片.他们究竟是怎么做到的?
我拿了一本书10 PRINT CHR $(205.5 + RND(1)); :GOTO 10
本书讨论了Commodore 64 BASIC单行产生的艺术:
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
Run Code Online (Sandbox Code Playgroud)
这只是从PETSCII集中反复打印字符205或206到屏幕:
我不确定为什么原版使用字符205和206而不是相同的109和110.另外,我更喜欢在开头添加一个清晰.这就是我通常在C64中输入的内容:
1?CHR$(147)
2?CHR$(109.5+RND(1));:GOTO2
RUN
Run Code Online (Sandbox Code Playgroud)
您可以在模拟器中尝试这一切,例如使用Flash或JavaScript的模拟器:
http://www.kingsquare.nl/jsc64
将上述代码输入到列出的仿真器中时,您需要意识到这一点
我觉得写一个bash行来做类似的事很有趣.
我目前有:
clear; while :; do [ $(($RANDOM%2)) -eq 0 ] && (printf "\\") || (printf "/"); done;
Run Code Online (Sandbox Code Playgroud)
两个问题:
迄今为止最好的答案
bash最短(40个字符):
yes 'c=(? ?);printf ${c[RANDOM%2]}'|bash
Run Code Online (Sandbox Code Playgroud)
这是一个简短的zsh(53个字符):
c=(? ?);clear;while :;do printf ${c[RANDOM%2+1]};done
Run Code Online (Sandbox Code Playgroud)
这是我喜欢放在.bashrc或.profile中的别名
alias art='c=(? ?);while :;do printf "%s" ${c[RANDOM%2]};done'
Run Code Online (Sandbox Code Playgroud)
有趣的是将此与我可以为C64 BASIC(23个字符)做的最短时间进行比较:
1?C_(109.5+R_(1));:G_1
Run Code Online (Sandbox Code Playgroud)
下划线分别是shift + H,shift …
好消息,我的c64在我的阁楼花了很多年的时间后仍在运行..
但我一直想知道的是:
我怎么能自动加载运行及从程序软盘是已经插入
,当我打开了C64?
一些自动运行命令load "*",8,1就足够了......
关心
MoC
我知道这个问题是非常特殊的问题,但我知道这里有一些c64代码大师.所以,这是我的问题.
当我尝试使用$ d011技巧禁用屏幕时,上/下边框也会打开.我想这样做而不打开上/下边框.可能吗?
我做了一些自己的研究,发现SID芯片只有很少的硬件支持合成功能.包括三个带有四种可能波形(锯齿波,三角波,脉冲,噪声)的音频振荡器,带有ADSR包络和环形调制器.配有振荡器同步和环形调制器.另外还有一种方法可以播放单个PCM声音.
这一切都很少,但我仍然从电视机中听到很多不同的声音.它们如何组合以产生各种音频?
为了给出一些细节,我想知道如何将这些组件组合起来制作吉他,钢琴或鼓状音频?另一个有趣的事情是C64特有的不同的嗡嗡声和声音.
在Commodore 64 BASIC V2中,打印一个真正的布尔表达式输出-1:
READY.
A=(5=5)
READY.
PRINT A
-1
Run Code Online (Sandbox Code Playgroud)
为什么-1而不是1?

我在仿真C64机器上玩asm时遇到了一些问题.
我想要做的是检查键盘上的键"N"是否被按下,然后程序应该等待更改显示在地址$ D012上.现在我不明白的是我如何"等待"改变出现?任何人都可以告诉我它的全部意义吗?
检查键盘上的N按钮是否按下很简单 - 只需使用子程序FFE4(输入)和FFD2(输出).
我真的不想要为我做任何事情,但如果我能得到关于D012如何工作以及如何"等待"改变的快速信息,我将非常感激.
提前致谢!
我正在尝试学习6510汇编,因为我正在运行Debian xa65是我想要使用的汇编程序.
到目前为止,我写了一段看起来像这样的代码:
*=$0801
.byte $0c, $08, $0a, $00, $9e, $20
.byte $34, $30, $39, $36, $00, $00
.byte $00
*=$1000
INC 53280
INC 53281
JMP $1000
Run Code Online (Sandbox Code Playgroud)
现在,第一个.byte部分一旦加载就会被"自动启动"程序.这是我从教程中找到的东西,据我所知,它只会运行SYS 4096,使CPU开始执行地址$ 1000的代码
其余的代码应该只是开始闪烁C64的外边框和内边框,并永远重复.
组装时我只需运行以下命令:
xa test.s -o test.prg
Run Code Online (Sandbox Code Playgroud)
然后我尝试将test.prg加载到VICE中进行测试.使用LOAD"TEST.PRG",8,1:即使文件加载它也不会自动启动,如果我键入RUN则没有任何反应:如果我键入LIST则相同: - 唯一的结果是着名的READY.和光标一样快乐地闪烁着.
我试图删除自动启动的东西,只组装从*= $ 1000开始的代码,但我得到了相同的结果.尝试从SYS 4096开始也会导致READY,仅此而已.
我确信我没有正确使用xa汇编程序,但我无法弄清楚我是如何为C64创建一个合适的PRG文件来使用的.我究竟做错了什么?