Ste*_*ini 56 c64 commodore retro-computing
好.我希望它不会被关闭,因为我有25年的好奇心,我很想理解这个伎俩.
在商品64中,6569 VIC无法解决边界问题.您所能做的就是在中心区域绘制像素,即光标移动的像素.边框总是均匀的,虽然你可以用捅53280改变它的颜色,如果我没记错的颜色.
尽管如此,我清楚地记得游戏介绍边框的特色是图形,就像完全可以寻址一样.我试图理解它是如何工作的,但从未达到过这一点.传说说这是一个聪明的精灵用途,在某些情况下,可能会被边界划出,但我不知道它是否是一个都市传说.
编辑:只需从提供的链接中读取此内容即可
精灵在垂直光栅线上复用(超过8个精灵,有时多达120个精灵).在Group Crest于2007年5月发布Krestage 3之前,人们普遍认为在一条栅格线上不会出现超过8个精灵,但是分配新的Y坐标会使其重新出现在屏幕下方.
这是邪恶的....你击败了栅格并重新定位精灵然后到达那里......
Joh*_*hnD 41
首先,只能在边框区域显示精灵,或者从视频库的最后一个字节读取重复的8位模式(8像素宽),通常为$ 3fff.请注意,当您将VIC芯片欺骗为"不显示"边框时,您只能看到这些精灵或8位模式.见下文.
边框的优先级高于精灵,因此通常在边框区域绘制精灵时,边框会覆盖精灵.有了一点VIC芯片技巧,你可以关闭边框.
您可以非常轻松地关闭顶部和底部边框(我将在下面解释),并且边界非常关键.
首先是关于VIC芯片如何在c64上运行的一些信息.
VIC芯片从左上角到右上角绘制屏幕,然后向下绘制一条线,再从左到右绘制屏幕,直到绘制整个屏幕.它每秒执行50次重绘(对于PAL单位)或每秒60次(NTSC单位).
有一个8位VIC寄存器,包含任何给定时间栅格的垂直位置.$ D012.实际上有超过255个可能的位置,因此第9位存储在第7位(最高位)或寄存器$ d011.因此,您可以随时读取这些寄存器并找出栅格的垂直位置.没有可用的寄存器来读取光栅的x位置.
使用硬件滚动时,VIC芯片的另一个很酷的功能用于解决问题.通过使用硬件寄存器垂直移动屏幕0-7像素来实现基本垂直滚动.一旦达到极限(0或7,取决于滚动的方向),您将垂直移动每个字符块(8x8像素)一个块,并绘制新数据以显示在顶部(或底部依赖方向).这非常有效,除了滚动的每8个像素,你会看到数据"弹出"到屏幕上.要解决这个问题,可以通过清除寄存器$ d011中的第3位使边框区域垂直增长8个像素.这称为24行模式.默认情况下,屏幕设置为25行8x8像素字符.在24行模式下,您仍然可以在底行绘制字符,它们只会被边框隐藏.
因此,关闭顶部和底部边框的技巧是:
1)将屏幕设置为25行模式
2)等待光栅到达$ f2和$ fa之间的垂直位置(在24行模式和25行模式下边界开始之间的8个像素).
3)将屏幕设置为24行模式...将边框的垂直开始移动到当前光栅位置上方
4)等到垂直光栅位置($ fa)之后
5)重复每一帧
步骤3)欺骗VIC芯片认为它已经开始绘制边框,因此它永远不会开始绘制它.Voila,顶部和底部边界是开放的.
关于侧边框,您可以使用不同的寄存器执行相同的操作,但由于光栅的水平移动要快得多,因此垂直移动时间需要更加紧凑.还有另一个需要考虑的问题叫做抖动.< - 我不会在这里解释.在网上搜索"Stable Raster C64",深入解释该问题.
请注意,Krestage 3所做的(如问题中所述)是不同的.
诀窍的一个层面是当"纸张"的底部(工作区矩形,边框内的东西)刚刚被绘制时弄乱边框.这使你可以在上边界和下边界有精灵.
更高的水平是在纸张的右边缘,在每个光栅线中弄乱它,所有这些都在JohnD的上面的答案中解释.这使你可以在左右边界有精灵.
这些都不能让你在一行中拥有超过8个精灵.这只是克雷斯特的魔力.
到目前为止,VIC芯片的最佳资源(我知道)是"MOS 6567/6569视频控制器(VIC-II)及其在Commodore 64中的应用",来自Christian Bauer和一个有用的附录是"内存访问MOS 6569 VIC-II和MOS 8566 VIC-IIe视频接口控制器"由MarkoMäkelä撰写.
警告:这些技术有点技术性,你可能会发现自己编写了一些VIC效果后更容易理解.
如果链接死了,只需按标题谷歌文章,它们就会无休止地复制.
小智 5
您可以使用简单的BASIC程序打开上下边框:
1 poke56334,0:poke53266,212:poke53265,27:poke16383,0
2 h=53265:i=53273:h1=19:h2=27:i1=1
3 pokei,i1:waiti,i1:pokeh,h1:pokeh,h2:goto3