» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 18 12
发新话题
打印

[老游杂谈] 前无古人的遭遇:刚玩了一把MD的12人街霸,结果....忽然出蓝屏debug了(又出新状况)

赢了两局之后,当RYU摆出胜利姿势并且出现记分画面,不知道随便按了哪个键,忽然画面一闪,蓝屏了!!!


仔细看上面居然有EMULATOR字样,可我玩的是实机不是模拟器!方向键上下可以控制滚动下面的地址字符,按start键可以回到游戏画面,但已经定格在记分画面,再按又回到蓝屏,除了方向上下键和start键,其他键均无效....

玩了这么多年MD,第一次遇到这种事情。

机器是日版I型机,卡也是24M的原版卡带,刺猬能解释下么...

复位之后,一切正常,重新用RYU开打,然后全胜结束,蓝屏再也没出现了。



[ 本帖最后由 hkt3010 于 2013-12-13 13:17 编辑 ]
附件: 您所在的用户组无法下载或查看附件


TOP

以前碰到过 代码调试画面吧,这里的模拟器应该指的是内部指令的模拟  这个画面应该是内存调用的调试画面  非专业解释   请3D做专业点评



TOP

posted by wap, platform: iPad

我记得md16人街霸打警察2个prefect会有特殊结局


TOP

1111 Emulater是68000的一个软件中断,留给程序员作自定义指令集指令模拟的。和1111类似的还有1010 Emulater。
上面这句话估计不是程序员都看不懂,总之,屏幕上的Emulator指的不是你在用模拟器玩游戏,觉得人生烦恼太少的话可以继续往下看。。。。



详细点说,68000的指令都是16bit长的,也就是2个字节,比如nop的对应字节码字节就是4E 75(换算成二进制就是0100 1110 0111 0101),其中红色字标出来的是高4bit,68000的指令集对应的字节码中不存在高4bit为1010或1111的指令,换算成16进制就是A和F

也就是说某个指令对应的2个字节如果是十六进制A? ??或者F? ??,那这条指令肯定不属于68000的指令集里的,很多字节码都不属于68000的指令集,通常CPU遇到这些字节就会触发Illegal Instruction异常进而死机,但是对于A? ??或者F? ??这两种情况,68000不会触发,而是将程序执行流程跳转到2个特殊的中断函数中(如果没有接触过汇编,只知道高级编程的,就把中断程序想象成一个回调函数吧。。。),这两个特殊的中断函数由程序员自己编写,常用来模拟68000的所不存在的指令或功能(所以称作line 1010/1111 Emulator,模拟的是指令),当然也可以用来编写特定扩展的功能

这里,Capcom的程序员就用它来写了一个扩展功能,把内存dump功能用了一个特殊的自定义指令来触发,这个指令的对应字节码是F? ??(问号具体是多少我不知道,我没去跟过代码也没兴趣跟了。。),然后68000遇到了这样一个指令,就去ROM的头部开始的0x2C偏移处确定line 1111的中断程序的起始位置(为什么是0x2C?没有为什么,这是一个固定位置,属于68000中断描述表,具体可以查http://clarkson.me.uk/academic/Lecture_notes/aldm8.htm)。确定了这个中断程序的起始位置,CPU就会转去这个中断程序,而这个程序会把当前的所有寄存器值、部分内存值显示在屏幕上,也就是你看到的。。。

你看到的屏幕上方的A1-A7,D1-D7,PC,SR都是68k的寄存器,下方是某块内存区域的内存数据,至于是哪个区域,只有卡婊的程序员知道了,如果不出意外,那应该是栈顶指针所指向的一段内存。希望语文老师看完不会内牛满面

[ 本帖最后由 SONIC3D 于 2013-12-7 13:56 编辑 ]
本帖最近评分记录
  • 十夜春树 激骚 +1 疯狂厨房 2013-12-7 22:14
  • yzb 激骚 +6 威武! 2013-12-7 21:54
  • segachzh 激骚 +5 版务处理 2013-12-7 21:11
  • md2 激骚 +6 太骚了 2013-12-7 08:27
  • hkt3010 激骚 +6 精品文章 2013-12-6 02:53

TOP

补充一下,因为图上有PC寄存器的信息,这个地址实际上应该正是中断发生前的程序执行地址,显示是0xE02C824E,这个是MD内存中的地址,而非卡带中的地址
有可能内存的偶发故障导致某一个字节错误,导致代码执行跳转到了本不应所处的内存区域中
或是这部分代码的确是先解压到内存再执行,只是内存的偶发故障导致了某个字节的高4bit正好变成了1111
这两种可能性的存在都会导致有几率触发1111 Emulator代码。

所以出现这个屏幕的另一种原因就是Capcom程序员留了那么一段异常捕获程序在1111 Emulator中断表中,以捕捉未知的错误(他们在错误发生时,可以通过查看打印在屏幕上的PC寄存器的值确定程序执行到哪里,以及此时其他寄存器的上下文情况),而正巧遇到hkt3010你机器内存出现偶发故障,偶然触发到了这段异常部或程序,所以出现了这个屏幕。Youtube上有人在SSF II上也遇到了一次。

[ 本帖最后由 SONIC3D 于 2013-12-6 03:03 编辑 ]

TOP

刺猬真乃技术百科全书

TOP

posted by wap, platform: BlackBerry (BOLD 9000)

佩服3d的解释,你怎么就那么专业?佩服佩服。

TOP

引用:
原帖由 SONIC3D 于 2013-12-6 02:06 发表
1111 Emulater是68000的一个软件中断,留给程序员作自定义指令集指令模拟的。和1111类似的还有1010 Emulater。
上面这句话估计不是程序员都看不懂,总之,屏幕上的Emulator指的不是你在用模拟器玩游戏,觉得人生烦恼 ...
谁给翻译一下这段黑话

TOP

3D专业人士

TOP

我来解释吧。
我修改过游戏。


A0-A7是地址寄存器。
D0-D7是数据寄存器
不过A7用于堆栈

PC是程序计数器,当时游戏程序执行到了E02C824E这个地址。

下面一堆是内存。

1111和EMULATOR不知道,毕竟我老本行是修改MVS和CPS1的,对MD了解不多。不过都是68000的CPU,应该差不多。

不过这种东西的产生一般都是不明原因导致程序出错,比如数据位溢出之类造成。
对于普通玩家来说没有什么作用。也起不到什么debug的作用。顶多算bug。
本帖最近评分记录
  • SONIC3D 激骚 +2 太骚了 2013-12-10 03:26
  • hkt3010 激骚 +2 我很赞同 2013-12-8 03:01

TOP

posted by wap, platform: Galaxy Nexus

马克一下,慢慢看

TOP

这是RGB输出?

TOP

引用:
原帖由 SONIC3D 于 2013-12-6 02:06 发表
1111 Emulater是68000的一个软件中断,留给程序员作自定义指令集指令模拟的。和1111类似的还有1010 Emulater。
上面这句话估计不是程序员都看不懂,总之,屏幕上的Emulator指的不是你在用模拟器玩游戏,觉得人生烦恼 ...
好吧,虽然我的人生烦恼很多,但我还是看完了,并且完全不记得看了些啥。这就是张无忌的境界……
本帖最近评分记录
  • SONIC3D 激骚 +1 求这种境界的修炼方法 2013-12-10 03:28

TOP

又出来一个新的画面 233
附件: 您所在的用户组无法下载或查看附件

TOP

3010,我开始怀疑是你机器的状态寄存器(就是图里的SR)有老化故障了,也就是我5楼说的情况。。。
然后触发了Capcom留在代码里的异常处理代码。。。

状态寄存器的第15bit和第13bit(左数第1位和第3位)分别是trace和supervisor位,这两个bit位在制品游戏中应该是不会有代码将它们置成1的,可能是程序代码出错,也可能是SR寄存器老化故障的可能性较大,但是你第二次发生和第一次发生时代码分别在ROM和RAM中执行,不太可能ROM和RAM都坏了,所以估计SR寄存器坏的可能性比较大。建议另外换一盘原版的街霸12人或16人,然后再玩玩,如果还是会偶尔出现,甚至出现频率不断上升,那就应该确定了。没办法的,换CPU吧。。。。

TOP

 18 12
发新话题
     
官方公众号及微博