zsyf - 2014/12/22 20:31:53
最近做的一个修改器需要修改多个静态文件,而这些文件需要处理的地址都类似于NDS、PSP等模拟器的压缩码,即:当前地址与下一个地址的偏移和对应的数值是固定的,但需要处理的地址却是大量的,少的有几百个,多的有上千个。简单来说,我想把CM当作一个16进制编辑器来使用。
举个实际例子:从地址00000004开始,往后偏移30H为下一个地址,每个地址的数值需要改动1个字节,数值改为63H(即10进制的99),地址共有100个。而第二个文件的地址可能是从00000008开始,偏移也变成了80H,每个地址需要改动4个字节,数值改为FF FF FF FF,地址共有200个,其它文件需要处理的地址大同小异。因此,像这种情况都有哪些方法可以使用(越多越好)?哪些方法又比较方便快捷呢?
银河漫步 - 2014/12/22 21:31:29
自己写批处理最快
这还用什么cm
要用cm的话
就把地址栏写上:地址1,地址2,地址3,....地址100
excel轻松完成这地址列表文本
zsyf - 2014/12/23 20:46:50
如果会编程或者会写批处理,自然就不会发这个求助帖了。正是由于这方面的不足,加上以前在查看CM相关资料时,依希记得CM的某个控件有类似的功能,自然而然会想到CM上来了。可是太长时间没有用过CM了,导致一些基本用法都想不起来了,重新翻看帮助文件也是一头雾水。目前只知道附加数据7好像能处理这样的数据,除此之外就是用CM自带的工具来自动生成偏移相同的地址了。
前者从没有用过,而后者生成的地址也需要用EXCEL等软件多次处理后才能使用,比较麻烦。因此,发这个帖子的主要目的就是想知道实现主帖要求的实例来做参考而已。
天枫十一郎 - 2014/12/24 20:43:10
使用脚本来设定7标识和数值属性.可以做到一键修改批量的数据.相似的规则越多脚本越简单.
zsyf - 2014/12/25 0:05:47
太好了,居然等到天枫兄的回复了。由于帮助文件看的不甚明了,同样希望能用个实例再详细说明一下附加数据7的用法。
天枫十一郎 - 2014/12/25 11:39:37
附加值: 7(2) 其中的2就是控制跳过多少位再写下个数据.
它只在处理多值(,逗号分隔时有效).如果你要批量写数据.如从0地址到0x10地址写值5.那你地址要设置0-10.值要设置为5.这是一般方式.
如果你要每隔2位再写5.那地址要设置为0,值要设置为5,5,5,5,5,5.....然后附加值设置7(2)就能实现.这样就是0位写5. 再跳到2位写5 再跳到4位写5....如此直到写到0x10位.
银河漫步 - 2014/12/25 13:13:44
附加值: 7(2) 其中的2就是控制跳过多少位再写下个数据.
它只在处理多值(,逗号分隔时有效).如果你要批量写数据.如从0地址到0x10地址写值5.那你地址要设置0-10.值要设置为5.这是一般方式. 如果你要每隔2位再写5.那地址...... 天枫十一郎 发表于 12/25/2014 11:39:37 AM |
这种方式很奇怪
如果是TextBox
就不好去定义数值:5,5,5,5,5....
这个附加数据好像是专门给CheckBox来用的
如果要我定义
我觉得附加数据7应该这么用
附加数据:7(10)
地址:0-100
数值:5
数值大小:1
这样写入时
地址0x00,写入5
地址0x01-0x0F,保持原数据不变
地址0x10,写入5
地址0x11-0x1F,保持原数据不变
...
地址0x100,写入5
执行结束
如果是以上这种方式
则可以支持TextBox自定义多地址的间隔写入
银河漫步 - 2014/12/25 13:20:11
不过目前这种附加数据7的用法也有一个好处
就是可以定义不同数值的连续写入
比如数值那里定义
1,2,3,4,5,6
可以做出相同间隔的不同数值的写入
或者我上述的那种应该变成附加数据8?
说道这里
附加数据 3,4,5,6,8 我都不知道干什么的
目前已经用到了10
感觉
3,4,5,6,8
应该都是有定义作用的
zsyf - 2014/12/25 16:19:40
经过一番探索,总算弄清了附加数据7的用法。不过还有是点小问题需要继续请教:我本来想用CM实现的功能就如银河大在7楼所说那样,附加数据的括号里写入需要跳转的偏移(目前所填入数值默认为10进制,不知是否支持直接填入16进制呢),地址则填入起始与结束地址,这中间需要改动数值的数量则由程序按偏移值自动完成,最后再设置一下需要改动的数值与字节大小即可。
而据现在所掌握的用法来看,用户需要自行先算出需要改动的数量,再生成用逗号分割的数值填入数值栏才行,而这两项恰恰是希望程序能自动处理的。而当前在数据量不大的时候还行,可本人需要处理的文件中,需要处理的地址数量少的有几百个,多的有几千个,就算自行来计算偏移数量,但却不知数值栏是否支持这么大量的数值写入呢?相关栏目的写入有上限吗?
天枫十一郎 - 2014/12/25 17:03:22
两种含义.一种以地址来进行跳址.一种以值来进行跳址.其实这是早期留下来的不好东西.都不应该有.这样的处理有多种需求.如果每个间隔一段地址,又要写入递增的值什么的要求各种各样无法全面满足的.只有以后加入变量后自己写脚本才行.
不过也可考虑写成一个附加值来兼容大多数循环格式.到时在系统插件中我想下看怎么写.
zsyf - 2014/12/25 23:08:31
原来如此,把CM当16进制编辑器来使用果然有点“强人所难”了,可是我实在找不到能批量处理16进制数据的软件了,加之不懂编程,只有把CM当作最后的希望了。这下无意中给天枫兄增添了许多不必要的麻烦,我只能说声抱歉了,期待CM后续的版本能解决此类问题吧。