1

所以我试图设置我的精灵指针,但我似乎无法找到如何去做。

我知道如果我想将指针设置为$2000,我应该将指针 ( $07F8 ) 设置为#$80,因为 40 * 80 = 2000。但是如果我的精灵二进制文件在上部 ram:$C000,我不能这样做,因为那将是#$300,而且太大了。

4

2 回答 2

2

VIC-II 只能寻址 16KB 的内存。这可能是因为 C-64 (VIC-40) 首先设计了 16KB RAM,后来 Jack Tramiel 规定它将是 64K。

所以主存分为4个bank:

0000-3FFF (0)
4000-7FFF (1)
8000-BFFF (2)
C000-FFFF (3)

因此,当您将 VIC-II 设置为 3rd bank(即C000-FFFF)时,$C000就会变成0thsprite。

于 2020-07-16T07:51:44.067 回答
0

请参阅映射 Commodore 64中 2040-2047 ($07f8-$07ff) 和 53248 ($d000) 的条目

它是 C64 编程的宝贵资源。

正如另一个答案所述,您需要控制 VIC-II 芯片的图形库。Mapping the C64 for $DD00 中的条目解释了这一切:

CIA #2 端口 A 的位 0 和 1 具有极其重要的功能。如 VIC-II 芯片(53248,$D000)部分所述,视频芯片一次只能寻址 16K 内存,所有图形数据必须存储在该 16K 块中才能显示。在该区域内,精灵图形数据可以放置在 256 组中的任何一组中,每组 64 字节。字符数据可以存储在八个 2K 块中的任何一个中。文本屏幕内存可以在 16 个 IK 区域中的任何一个中,而位图屏幕内存可以在两个 8K 区域中的任何一个中。当您打开电源时,VIC-II 将底部 16K 的内存用于图形。不幸的是,这块内存也被广泛用于其他重要目的。尽管上面讨论了一些消除这些冲突的方法,在许多情况下,您会希望从内存低端的默认 16K 库进行更改。位 0 和 1 使用以下位模式从四个可能的选项中选择视频内存的当前 16K 库: 00(位值为 0) 库 3(49152-65535,$C000-$FFFF) 01(位值为 1) Bank 2 (32768-49151, $8000-$BFFF) 10 (bit value of 2) Bank 1 (16384-32767, $4000-$7FFF) 11 (bit value of 3) Bank 0 (0-16383, $0-$3FFF)

于 2021-12-19T20:52:35.417 回答