引用
引用第123楼hutianlu于2022-07-03 13:54发表的 :
还是花组方块,进灰姑娘模式之后开场有一段剧情,一图片形式存在于VDP2中
NBG1 信息:
8-bit(256 colors)
Tile(1H x 1V)
Plane Size = 1H x 1V
.......
恭喜你,开始接触到ss另外一种显示方式了
首先,因为ss是md的强化升级版,所以md那种为节约显存用编号显示的方式也继承下来了,下面我就用你这个图来简单讲讲
因为ss的显存也不是很大,所以很多游戏都会使用这种方法来达到节约显存的目的(忘记前面是否有讲过了,这里再重新说一次吧)
这种方法首先会以整个vdp2的内存(512kb,0x80000字节)为基础,划分成若干个8x8的小方块,每个方块的大小32字节,然后游戏按照一个信息表格开始把这些小方块组合成一个大图
比如你这个游戏:
8-bit(256 colors) 256个颜色
Tile(1H x 1V) 8x8方块
Plane Size = 1H x 1V 大小
Pattern Name data size = 2 words 2个words,就是指4个字节一组
Plane A Address = 00078000 表格地址
Plane B Address = 00078000
Plane C Address = 00078000
Plane D Address = 00078000
所以把上面信息综合起来就是,用8x8的小正方形方块组合成大图,表格位置在vdp2 内存的78000处
用模拟器整个内存dump下来,跳转到表格位置(vdp2地址+78000)
看图,从红框开始一直往下就是表格数据了,因为前面有写过Pattern Name data size = 2 words 那就是 2个words,4个字节一组来表示小方块的信息
所以我们可以算出第一组红框的实际方块一共是0xa0/4=0x28=40个小方块,因为每个小方块是8x8的,所以大图的宽度就是40x8=320,因为这种显示方式需要固定每行显示512个
像素,所冶Ρ﹁要丢弃320后面的表格数据,那就是512-320=192,192/8=24,也就是24个方块的信息需要填充,所以后面蓝框里面出现的就是24x4个00字节的填充数据
我们先看第一组的4字节 0010 2000
这里需要分成3部分来看
首先看2000,这里的2000是指在vdp2内存里面的小方块编号,就是第0x2000个小方块,那么因为前面已知一个小方块是32字节,所以这个方块实际地址是在VDP2里面的0x2000*0x20=0x40000这个位置
然后看0010中最低位的10,这里没说错的话,这个10是表示使用的颜色表编号起始位置,因为每个颜色表是0x20字节,所以就是0x10*0x20=0x200
最后看0010中的高位00,我没记错的话这里可以是表示方块的显示方式,可以是正常显示00,或者左右对调01 上下颠倒02,或者左右+上下颠倒03来显示,这里是00,所以表示正常显示
方块分析完了,因为这些小方块的显示位置是从左到右,从上到下,那么接下来的第2组方块也是用上面相同的方法就可以拼凑出一张完整的大图片了
分析完了,那么我们先跳到颜色表起始位置5f00000+0x200的位置,因为前面已经知道是这个图片是使用的256色颜色,又因为颜色表是2个字节表示一个颜色,所以我们需要复制256x2个数据,然后去我们sggg官网使用在线转换,选择bgr进行数据转换,转换完成以后,在通ct2导入颜色表,然后在跳到图片数据的实际位置5e00000+0x40000
然后就可以看见正常显示图片了,接下来根据vdp2里面的图片数据,去镜像里面搜索相同的数据,来定位是在哪个文件里面,然后就按照原来的方法修改图片导入即可
以上只是个人分析结果,如果哪里有说错,欢迎指出
[ 此帖被YZB在2022-07-04 09:18重新编辑 ]