当前位置:首页 » 编程软件 » 红白机rom反编译

红白机rom反编译

发布时间: 2025-03-19 11:37:00

‘壹’ apk反编译工具Apktool的安装与使用教程

APKTool是GOOGLE提供的APK编译工具,需要java运行环境,推荐使用JDK1.6或者JDK1.7。 下面就一起来看看详情了解一下该怎么安装使用吧软件名称:apktool(apk反编译工具) v1.41 中文绿色免费版软件大小:3.32MB更新时间:2014-01-04

如果你想对APK文件进行修改,那么就不可避免的要使用到APKTool。论坛里有很多关于ROM美化的帖子都需要自己动手修改APK文件,比如修改framework-res.apk、systemUI.apk等等。

相信各位有不少人看了后都想亲自来修改一番,但是结果却是遇到了各式各样的错误却无法进行改正,甚至都不知道自己错在哪里。

一.APKTOOL使用环境配置

1.安装JAVA并设置环境变量。

下载安装都很简单,关键是安装完后还需要亲自设置环境变量以方便其他程序能够条用JAVA。

以WIN7为例,在桌面上右键点击计算机——>属性——>高级系统设置——>环境变量——>在下边的系统变量里新建一个变量,变量名为JAVA_HOME,值为JAVA的安装路径,比如我的是H:\ProgramFiles\Java\jdk1.6.0_26

二.APKTool的安装

1.其实这个谈不上安装,不过如果你愿意的话可以把下载到的APKTOOL中的三个文件(aapt.exe、apktool.bat、apktool.jar)解压缩到你的Windows安装目录下,以方便使用Dos命令.

2.可能有些人下载的APKTOOL里有个安装的bat文件,并且有另外两个方便使用的bat文件,在这里我不推荐大家使用这些bat文件,虽然使用起来很方便(其实我并不觉得方便),但是如果出现错误不方便查看。

三.APKTool的使用

1.decode

该命令用于进行反编译apk文件,一般用法为

apktool d

代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayer.apk

代表了反编译后的文件的存储位置,比如C:\MusicPlayer

如果你给定的已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令

apktool d –f

这样就会强行覆盖已经存在的文件

2.build

该命令用于编译修改好的文件,一般用法为

apktool b

这里的就是刚才你反编译时输入的(如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。

3.install-framework

该命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。具体情况请看常见问题

四.常见问题

1.关于安装和管理framework文件

以下大部分其实是翻译自http://code.google.com/p/android-apktool/wiki/FrameworkFiles

一般来说,你在使用apktool进行反编译前不需要做其他的事情,然而由于有的厂商,如HTC,三星等,他们定制了framework文件并且在他们的系统应用中使用了这些文件,这时,为了能正常的反编译这些apk文件,你就必须从你的设备中拷贝出framework文件并且安装到apktool中。

举一个例子,比如你想反编译HTCHero这款手机中的HtcContacts.apk,当你尝试反编译的时候,你会得到以下错误信息。

1.$ apktool d HtcContacts.apk
2.I: Loading resource table...
3.I: Decoding resources...
4.I: Loading resource table from file: /home/brutall/apktool/framework/1.apk
5.W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x02020542
6....
7.W: Could not decode attr value, using undecoded value instead: ns=android, name=icon, value=0x02020520
8.Can't find framework resources for package of id: 2. You must install proper framework files, see project website for more info.
复制代码

这就是在通知你必须先安装HTC定制的framework文件,事实上在修改一些三星的系统应用时也是如此。

以三星的设备来举例,你需要复制两个framework文件来进行安装,framework-res.apk和tzframework-res.apk,一般来说,这两个文件在手机中的位置应该是system\framework\

使用以下代码进行安装

apktool if C:\framework-res.apk

apktool if C:\tzframework-res.apk

这里假设2个文件都放在C盘根目录

2.直接用build编译后在dist中找到的apk文件无法使用

其实这个问题我也不是特别理解,目前知道的就是,APK文件虽然本质是个zip文件,但是事实上zip包中的文件是按照两种方式压缩的,即XML文件进行deflate压缩,其他文件不进行压缩(使用store存储),而直接编译得到的APK文件对任何的文件都进行了deflate压缩,因此你会发现编译得到的文件比原文件小好多。

同样的,当你使用build文件夹中的文件替换原apk文件中的资源时,请务必确认是使用store存储还是deflate压缩

3.其他错误

其实在编译过程中会遇到很多其他的问题,大多数是由于删除、修改、添加了资源后,没有对应的修改res\values\public.xml文件而造成的,这里我给大家说下修改的原则:

第一,public.xml文件中的资源不能重复定义。

第二,public.xml文件中的任意两个资源的ID不能一样

第三,public.xml文件中定义的资源必须能找到该文件(如果你删除了一些文件,必须要对应的删除public.xml中的该行)

第四,public.xml文件中尽可能全面(如果你添加了某资源,最好确保在public.xml中也添加)

第五,public.xml文件中的资源的ID尽可能连续(当你为添加的文件添加声明时,赋予的ID尽可能是连续的)

‘贰’ 如何将ROM改为默认开启USB调试

默认开启USB调试模式
system/build.prop中添加或修改persist.service.adb.enable=1
修改未知源
1,反编译SettingsProvider.apk
2,修改res/values/bools.xml/《bool name=“def_install_non_market_apps”》false《/bool》,修改false为true
关闭重力感应
1,反编译SettingsProvider.apk
2,修改res/values/bools.xml 《bool name=“def_accelerometer_rotation”》true 《/bool》,修改true为false
关闭GPS
1,反编译SettingsProvider.apk
2,修改res/values/strings.xml/ 《string name=“def_location_providers_allowed”》gps《/string》,修改gps为null,null就是啥都没有的意思

‘叁’ 如何patchrom

本帖教程只是经验之谈,不过也有一些素材来自网络,本人对此不负任何责任
这个教程介于入门和进阶之间,也就是说比如简单一点的像:rom的大体结构啊、android的基本原理啊、linux的基本操作啊。这个教程都一概略过。而比较深入的像:apk的修改、开发,源代码的修改、编写,smali插桩,移植适配其他非官方机型。这也一概没有。
本教程仅介绍如何利用MIUI放出的patchrom资源完成编译MIUI的流程,适用于对自制rom以及linux有一定了解,喜欢miui,喜欢DIY,但不太熟悉如何使用patchrom以及其基本流程的发烧友
如果你对android、linux完全是一个门外汉的话,这个教程对你来说可能会有不少无法理解的地方。而如果你如果已经是大神了,希望多多指点,跟大家交流一下你的经验。

--------------------------------------------------------------------------------

第一部分:介绍一些基本概念
首先介绍几个比较基本教程的链接
MIUI官方提供的教程:http://www.miui.com/thread-402322-1-1.html
CM官方wiki上的CM编译教程:http://wiki.cyanogenmod.org/wiki/Category:Build_from_Source
android官方提供的AOSP编译教程:http://source.android.com/source/initializing.html
要学习利用开源源代码编译android rom的话,看完后面两个基本就够了,CM、PA这类的rom都可以根据CM的编译方法来编译,而AOKP这类的rom可以根据AOSP的编译方法来编译
大部分开源rom在他们的github上也会写上相关的编译流程以及主要的命令,比如PA除了用CM的编译方法手动输入每条命令来编译,也可以直接运行他们写好的build.sh来进行编译,基本上还是以实际文件和github上写明的流程为准
而MIUI当然跟这两种的编译方法都不一样,因为MIUI不是利用android源代码编译出来的,而是反编译现成的rom,修改相关smali来适配各种机型的,所以MIUI自己配置了一套编译平台,这也就是patchrom项目
都知道,android是基于linux内核的,而且谷歌也并没有提供适用于windows平台进行编译的相关代码和工具,所以要从源代码编译android是需要一个linux环境的
虽然谷歌同样也支持在苹果的mac系统上编译,但一方面mac的环境配置较为复杂,另一方面mac用户不如pc用户多,要装mac也远不如装linux方便,所以搞这个的,大部分人都是使用的linux
而基于linux内核的操作系统其实有很多,这些不同的linux系统也叫Linux发行版,最主流最常见最通用的一个版本,就是ubuntu(我个人是opensuse党,也在opensuse上编译过CM、MIUI,不过opensuse相对更复杂,而ubuntu现成的软件也更多更方便一点,所以这个教程里是使用的64位ubuntu 12.10来介绍的),而因此也有很多基于ubuntu修改的Linux发行版,比如深度的Linux Deepin和雨林木风的StartOS,所以相对来说,不论是原版ubuntu还是Linux Deepin和StartOS都比较适合刚接触linux的新手使用
以下所有输入命令的行为全是在“终端”程序中进行的,下文可能会有多处省略,所以你看到输命令可别问输在哪。

-----------------------------------------------------------------------
第二部分:编译环境的搭建

我本来是使用的12.04,64位桌面版,后来12.10出来了,就顺着更新上来了,因为我这里运营商强制上网得用他的拨号软件,所以我是在虚拟机里搭建的,其实我是推荐直接装在真机上,这样性能更好,编译速度也更快
ubuntu版本的选择、下载、安装、更换源、系统更新等等,我就不介绍了,网上教程一堆一堆的
在装好了ubuntu之后,我们就要开始android rom编译的环境配置了,大致的说一下,需要下载的文件总共有五步。

‘肆’ 如何反编译android应用以及重编译,签名和对齐优化

首先,了解一下我们为什么需要反编译apk
大部分情况下,是由于想本地化一款优秀的应用,才需要做这事儿;又或者进行少量的smali修改以达到想要的效果(如添加归属地,使3G版Nexus 7支持Wi-Fi热点)。

下面我们先准备运行环境和工具
建立工作目录,如.\workspace\apktoolbox (下面同样以此路径为例)
必不可少的JDK:Oracle Java下载,安装完成后把<jdk-inst-path>\bin添加到$PATH环境变量中
反编译和重编译工具apktool:Google Code下载,按平台下载(一个apktool-install-<platform>-<ver>-tar.bz2,一个apktool<ver>.tar.bz2,下载完成后解压至.\workspace\apktoolbox\bin
密钥文件,共4组。test/shared/media/platform,从android source中获取,分别对应不同共享用户ID时签名所需(查看应用AndroidManifest.xml第二行android:sharedUserId项 ),放到.\workspace\apktoolbox\bin下
test - 无android:sharedUserId项
shared - android:sharedUserId=android.uid.shared
media - android:sharedUserId=android.uid.media
platform - android:sharedUserId=android.uid.system
签名工具signapk.jar,放到.\workspace\apktoolbox\bin下
对齐优化工具zipalign(从android sdk中获取,在tools目录下),放到.\workspace\apktoolbox\bin下
准备工作完成

接下来我们就要开始工作了(以本地化工作为例)
把待反编译的apk放到.\workspace\apktoolbox\apks下
在命令行模式下进入.\workspace\apktoolbox\bin目录,输入以下命令进行解包(反编译)
apktool d ..\apks\<apkfile>.apk ..\apks\<outdir>
.\workspace\apktoolbox\apks\<outdir>\res下的values目录(英文原版)和values-r<locale>目录(本地化)就是我们需要的对象。
本地化工作完成后,在命令行中输入以下命令进行重新打包(重新编译)
apktool b ..\apks\<outdir>

.\workspace\apktoolbox\apks\<outdir>\dist目录下会生成重新打包后的apk(未签名,未对齐优化)
重新打包完成后,在命令行中输入以下命令进行签名(根据实际情况选用密钥,这里以test密钥为例)
java -jar signapk.jar testkey.x509.pem testkey.pk8 ..\apks\<outdir>\dist\<apkfile>.apk ..\apks\<apkfile>_signed.apk

签名完成后,在命令行中输入以下命令进行对齐优化
zipalign -f -v 4 ..\apks\<apkfile>_signed.apk ..\apks\<apkfile>_zipaligned.apk

<apkfile>_zipaligned.apk就是我们最终需要的apk了。
完成
部分apk需要系统框架资源,没有的话在重新打包时会报错,这种情况下我们只需要先安装一下对应系统框架即可(从你目标ROM中把/system/framework/framework-res.apk提取出,放到.\workspace\apktoolbox\apks下)。在命令行中输入以下命令进行安装
apktool if ..\apks\framework-res.apk

‘伍’ bios 存储在 rom中,只读存储器怎么可以修改的

BIOS的ROM是可编程ROM,就像CDRW一样。

现在的BIOS ROM都是用EEPROM(有的是用FLASH,FLASH也是EEPROM)
这种ROM在对一个管脚加特殊电压(25V)就可以分块擦除内容。

‘陆’ 当年的Fc《魂斗罗》《玛丽》是用什么工具做的。如何反编译。

汇编和c都可以,这里有个编程器http://pocket.92wy.com/fc_info_33534.html

任夭堂游戏编程探密(文字版)
第一章 任天堂游戏结构概论
长期以来,由于任天堂公司在技术上的封锁和国内游戏开发工具的久缺.任天堂游戏
蒙上了一层神密的面纱,中国人只能玩任天堂游戏.而不能象苹果机、中华学习机那样了解
游戏程序、自己动手编写游戏。近年来,随着任夭堂系列游戏机配套键盘的问世,逐步创造了
揭开这层面纱的条件.特别是配有打印机接口的“裕兴”、“金字塔”等高档游戏机键盘的陆续
推出,用户仅仅编写一个简单的反汇编程序就可打印出系统软件的源程序,从而为探索任天
堂游戏软件的奥秘提供了有效的手段。
有人疑问任夭堂游戏机的中央处理器同中华学习机一样也是八位的CPU.但为什么
它能够产生出如此绚丽多彩的动画、美妙动听的音响、栩栩如生的角色,其效果远远胜过美
国的“雅达利“,更强过中华学习机的游戏呢?究其原因,关键在于任天堂游戏机的设计者们
在传统的八位机上独具匠心、另辟蹊径,从硬件上进行了独创的改造,在软件上进行了大胆
的尝试,使一个CPU发挥了两个CPU的功效,产生了绝妙非凡的艺术效果.从而以物美价
廉的绝对优势迅速占领了游戏机市场,掀起了家庭娱乐领域的第三次浪潮。本文拟从分析任
天堂游戏的软、硬件特点出发,揭开任天堂游戏编程的秘密.以一与广大同好切磋。

1·1 任天堂游戏机的硬件特点

1·1·1电路原理框图
任天堂游戏机的硬件共分两部分:主要部分是游戏机.从属部分是游戏卡。游戏机提供
游戏的运行环境,游戏卡提供支持游戏的软件,其电路原理框图如图1一1。
上图中6527 CPU为中央处理器,田于它的任务是处理程序,所以一般把与它相连的部
件加以前缀"P".故CPU的地址总线表示为PADD,数据总线表示为PDATA,CPU管理的
存储器表示为PRAM,PROM等。同样.6528 PPU的任务是处理图像,所以凡与它相关的部
件均加以前缀“V”。

1·1·2 中央处理器6527 CPU
1.CPU的内部结构
6527 CPU是一个八位单片机,在它的内部除固化有6502系列的CPU外,还有一个
可编程音响发生器PSG(Programable Sound Generator)和24个八位只写寄存器,其地址空
间分配为$4000-$4017.主要用于CPU的I/O操作,PSG音响发生器的工作就是由这些
寄存器控制完成的.

1·1·4 游戏卡
1、游戏卡的基本组成
普通的单节目游戏卡一般由两片ROM或EPROM组成,ROM的容量由游戏程序量的
大小决定.最简单的任天堂游戏为24K,故这种卡内有块16K的ROM存放程序,一块
8K的ROM存图形字模(目前有软封装的IC,它把两块ROM封在一起)。典型的任天堂
游戏程序量为40K,它使用一块32K的ROM存程序、一块8K的ROM存字模。当程序量大
于40K时则要对ROM进行容量扩充.
2、游戏卡各脚的功能
游戏卡是一60脚的接插件,各脚功能见图1一4。
3、常用 ROM引脚功能简介
游戏卡中常用ROM或EPROM的型号有27C64(8 X 8K)、27C128(8X l6K)、27C256(8
X 32K), 27C512 (8 X 64 K ), 27C1000 (8 X 128K),或后缀数字相同而前缀不同的其它公
司产品,盒卡中还有2兆位(8 x 256K)至8兆位(8X 1000K)的芯片。其中27C64~27C512为28
脚的芯片,27C1000或更大容量的芯片为32脚(个别的27C1000仍为28脚,它使用了OE.
CE中的一个脚作为地址线).

1·2 任夭堂游戏软件的特点
目前流行的任夭堂游戏软件有数百种,内容已涉及及到政治、经济、军事、战争、教育、管
理、体育、娱乐等各个领域.可以说任天堂游戏已兼顾了男、女、老、中、青、少、幼各个年龄阶
层,深受世界各国人民所喜爱。也许这就是它迅速普及的主要原因。但是,任天堂游戏尽管
内容千变万化、情节各异,其软件结构和处理方法则是基本相同的,它们有着共同的特点。

1·2·1 任天堂游戏的软件结构
归纳起来,任天堂游戏软件结构可分为两大类:基本结构和扩展结构.
一、基本结构
基本的任夭堂游戏软件容分为40K字节(标准卡标注为LB)。典型游戏如,《1942》、《超
级玛丽》、《拆屋工》等.其中32k为游戏控制程序,供CPU执行;8K为图形字模,由PPU处
理。另外还有一种低配置结构,软件容量为24K{标注为LA),这是一种早期软件。其中控制
程序为16K;字模为8K。典型游戏有《火箭车》、《马戏团》、《金块Ⅰ、Ⅱ》等。
40K软件的控制程序存放地址在CPU管理的$8000一$FFFF空间;字模地址在PPU
管理的$0000-$1FFF空间。16K软件的控制程序存放地址为$C000-$FFFF;字模地
址也是$0000一$1FFF。
二、扩展结构
容量在40K以上的软件均为扩展结构。它们在基本结构的基础上或者扩展控制程序
区、或者扩展字模区。扩展方法是在某段地址范围进行空间存储体切换。一般程序区在
$8000-$BFFF空间切换;字模区在$0000-$1FFF空间切换。切换种类以软件容量的
大小略有不同:
对于48K卡(标注为LC〕,其程序部分为32K;宇模部分为16K,分两个8K存储体.
典型游戏有《七宝奇谋》、《影子传说》等。
通常把24k-48K容量的游戏卡称为低档卡或低档游戏。
对于64K卡(标注为LD)有两种结构:一种是其程序部分为32K;字模部分为32x,分
为四个8K存储体.典型游戏有《迷宫组曲》,《智慧城》、《沙罗曼蛇一代》、《北斗神拳一代》
等;第二种则是程序与字模共用64k,分为四个存储体.典型游戏有《米老鼠大冒险》、《冒险
岛》、《俄罗斯方块1、2》等。
80K的游戏不多(标注为LE),常见的有《中国拳》、《金牌玛丽》等。其程序部分为48K,
前32K分为两个16k存储体;字模部分为32k,分为四个8k存储体。
通常称64k、80K的游戏为中档卡。
对于128K卡(标注为LF),其程序部分与字模部分棍合共用128k,分为八个16K存储
体,其中前七个存储体地址映射于$8000-$BFFF:最后一个存储体(称为HOME BANK)
映射于$0000一$FFFF,典型游戏有《魔界村》、《怒》、《火之鸟方》、《未来战士》、《洛克人》、
《1943》 《1944 》《嵌特殊部队》、《冲撞霹雳机车》等。
这类游戏卡中一般都配有一块8K的RAM(动态随机存储器〕存储当前使用的字模。
对于160k卡(标注为LG),其程序部分为128K;字模部分为32K。典型游戏有《倚天屠
龙记》、《立体大赛车》、《欢乐叮当》等。
对于256K卡(标注为LH),其程序部分为128K;字模部分为128K。典型游戏有《柯拉
米世界》、《恶魔城》、《双截龙》、《松鼠历险记》《人间兵器》、《联合大作战)等。另外,还有《魂
斗罗》、《赤色要塞》、《绿色兵团》、《立体篮球》《荒野大镖客》等256K游戏被压缩为128K游
戏,目前这类游戏的256K版已不多见,常见的均为128K的压缩版;
通常称128K一256K容量的游戏为高档卡或强卡。
对于高于256K容是的游戏则称为特卡,如《不动明王传》,《战斧》、《孔雀王》,《大旋风》
等游戏容量已达2M-4M。但由于任天堂系列游戏机的CPU的处理速度、画面的分辨率、音
域音色等方面的限制,即使软件容量再增大,游戏效果也不会提高多少.总达不到街机的水
平,故目前单个游戏的容量大于256K的尚不多见。

1·3 任天堂游戏的图像处理方法
本节简要介绍任天堂游戏的图像处理方法。
1·3·1屏幕显示原理
任天堂游戏机中的CPU虽然仍属65系列的CPU,但它的显示方式与中华学习机截然
不同。其显示屏幕由三类四层显示页面钩成。三类显示页依次为:卡通(角色或动画)页、背
景页、底背景页。卡通页用于显示游戏中的角色,它有两个页面:卡通零页——使角色显示于
背景之前;卡通一页——使角色显示于背景之后。卡通员的显示分辨率为256x240点,卡通
可以点为单位移动。背景页主要用于游戏画面的显示,它共有四个显示页面,每页的两边互
相相连并排成“田”字,采取字符显示方式,显示分辨率为32列* 30行,每幅画面由$60个
图形块构成,游戏中可任取一个页面显示。底背景页主要用于大面积的单色显示,以衬托出
兰天、草地、沙漠、大海等效果,显示分辨率为1x1。 四层显示页的排列由前向后依次为:卡
通零页、背景页、卡通一页、底背景页(见图1一6)。系统默认的排列方式为背景00页与卡通
贾、底背景页四层页面重叠,前面显示页的内容可以遮住后面显示页的内容,因而很容易构
成具有一定景深次序的立体画面。

1·3·2背景处理技术
任天堂游戏中的背景画面显示采用字符方式,每个字符通常称为背景图形块。每个图
形块为8*8点阵,其字模数据存放在由PPU管理的一段内存中,称为背景字库,一般使用
$1000一$1FFF地址,共4K字节.每个字模由连续的16个单元组成,故一次最多可定义
256个字符,序号依次为0~255.显示字符时,只要把字符序号置入屏幕对应的显示单元中
即可。
任关堂游戏中的背景处理由PPU独立完成,每一个背景页面对应PPU的1024个单
元,为顺序对应关系。背景00页对应PPU地址为$2000--$23FF,其中$2000一$23BF
对应于960个图形显示单元,$23C0--23FF为该显示页的配色单元;背景10页对应的
PPU地址为$2400一$27FF;同样,后面的两页依次对应$2800---$2BFF、$2C00
$2FFF。由于游戏机中只有一块2K的VRAM(PPU使用的RAM),故一般只使用前两个
页面,通常称其为背景零页和背景一页。游戏中可通过设置软开关的方法控制画面的横、纵
向,以使两幅面面横向并列或纵向衔接。
在实际游戏中,要经常用到背景画面的横向卷动和纵向滚动。如(魂斗罗,游戏中的却
一、五、六、七、八关是横向卷动,第三关则是纵向滚动。这些画面位移效果是如何实现的呢?
我们知道,中华学习机中的画面位移是通过反复改写显示映射单元的内容而实现的,这种方
法处理速度慢、控制程序冗长。任天堂则采取了截然不同的方法。它通过硬件的待殊处理,
引入了显示窗口的概念。画面位移时,每个显示单元的内容不变,而令显示窗口向相反的方
向移动,从而实现了画面的横向卷动和纵向滚动。如《魂斗罗》中第一关横向卷动的控制方法
是.令两个背景页横向衔接,游戏开始时,背景零页绘满32列,而背景一页仅绘制12列,令
显示窗口对正零页,当游戏中的角色前进到画面右边的一定位置时,则令显示窗口右移一
格,同时绘制一页的第13列;这样,显示窗口每右移一格,画面绘制一列,从而使游戏画面连
绵不绝,每移出一页画面(32列)令页数计数器加一,当累计到一定页数时则令窗口不再移
动,进行关底处理。这一画面的位移控制极为简单,仅通过向位移软开关$2005置入移位数
据就可实现。F BASIC的控制程序为:
POKE &H2005,x:POKE &H2005,0
x为位移参数。其机器语言的控制程序为:
LDA x
STA $ 2005
LDA #$00
STA $ 2005
画面的纵向位移则更为简单,如《魂斗罗》的第三关——瀑布天险是一个纵版画面,角色要从
最底层跳升到最顶层与关底魔头决斗,游戏进程中画面随看角色的跳跃不停的上滚。实际--
这一位移过程是在一页面面中进行的,控制方法是,每当角色前进到画面上方某一位置时,
改写画面最底行的图形数据,使其为即将移入画面的一行.然后令显示窗口向上移一格,由
于窗口是在一个显示页上移动,故最底行即是最顶行(这时可把一页面面理解为上、下边连
接的圆筒,显示窗口是套在画面圆筒外面稍大的一个圆筒,窗口移动一格就是向上旋转一
格)。F BASIC控制程序为,
POKE &H2005,0:POKE &H2005,Y
Y为位移参数。相应的机器语言程序为,
LDA #$00
STA $2005
LDA Y
STA $2005
以上画面的送效、位移操作都是在CPU响应非屏蔽中断期间完成的(非屏蔽中断是在
电视机的场回扫期间发出和响应的,这时的电视屏是黑的),所以我们感觉布道位移的痕迹。
关于任天堂游戏中背景画面的绘制 移动及画面的分裂位移和扭曲等效果的实现,将在第六章详细讨论。

1·3·3动画处理技术
组成任天堂游戏中动画的最小单位是卡通块,每个卡通块为8X8点阵.与一个字符同
样大小。卡通块也有一个图形字库,对应的PPU地址为$0000-$OFFF。每个个卡通块的字
模数据也由连续的16个单元组成,故一次最多可定义256个卡通块,序号依次为0-255
6527CPU规定.在一幅画面上只允许同时显示64个8x8点阵的卡通块〔这是由PPU
内卡通定义区的RAM分配决定的〕,如《超级玛丽》中,玛丽在吃红蘑菇之前为16x16点
阵大小(即由4个卡通块组成),当吃了红蘑菇之后身体长大一倍,变为32X 32点阵(即由
16个卡通块组成〕的卡通。但实际游戏中要求显示的卡通块数往往远远超过这一限制,如目
前较流行的打斗游戏《街霸》中,一个卡通即为128*64点阵(由128个卡通块组成)有时还
更大,这是怎么实现的呢?
原来在实际游戏中,对卡通进行了分时控制。所谓分时控制就是在不同的时间里显示半
通的不同部分,依靠人眼的视觉惰性产生连续的感觉。如《魂斗罗》游戏中的卡通显示(两个
正面角色、敌人、发射的子弹、暗堡的闭合与开启都是卡通)就是每一次中断显示卡通的二分
之一实现的。
卡通的定义操作极其简单,系统规定一个卡通块由连续的四个内存单元定义,第一寸
单元指定卡通显示的Y坐标、第二个为卡通块在字库中的序号、第三个为卡通块的显示状
态〔配色组合、左右翻转、上下颠倒以及显示于那个卡通页面,,第四个为显示的X坐标。编
程中可任意指定定义卡通的内存页面(一般选二页或三页,即$200一$2FF, $300
$3FF)。
关于任天堂游戏中的卡通的定义及运动控制将在第七章讨论。

1·4 任天堂游戏的音响处理

在大部分任天堂游戏的过程始、终,一直伴奏着和谐动听的背景音乐;随岩游戏的进行
和角色的动作还不时发出逼真的效果音响,而且这些音响的发出与背景的移动、角色的运动
三者并行工作,互不干扰,许多朋友玩过中华机上的游戏,如《警察抓小偷》《富士山决战》
等,这些游戏中的音响发出与角色的动作是不能同时进行的,即角色动作时没有音响;发出
音响时角色的动作要停下来.任天堂游戏中的音响处理确有独到之处.由于在6527 CPU内
固化有可编程音响发生器,所以音响控制程序特别简洁,任天堂游戏的发声系统由五个声部
组成,对应于CPU管理的$40DO——$4013二十个单元,每个声部使用四个单元,它们的作
用依次为音色音量、音形包络、音调细调、音调粗调。第一、二、三声部可进行和声旋律演奏,
也可以选取任一声部发出效果音,如执行F BASIC程序
POKE &H4015,1:POKE &H4000. 255,255,255,255
就可发出长达三分钟的频率由低到高的警报声。第四声部可以模仿连续不断的噪声,如风
声 雨声 钟生 脚步声 火车声等等 第五声部则可模仿出人的讲话声。任天堂游戏中

背景音乐一般都是使用前三个声部演奏的,演奏程序也是放在中断中处理的.五个声部的发
声总开关由$4015控制,$4015的D0——D4位依次控制翻第一至第五声部的工作状态,置
0关闭、置1开启。

热点内容
keil的c51编译器 发布:2025-03-20 07:40:46 浏览:331
vpn韩国服务器地址 发布:2025-03-20 07:12:44 浏览:25
打码软件源码 发布:2025-03-20 07:08:06 浏览:109
前端android 发布:2025-03-20 06:50:42 浏览:93
进制转换栈c语言 发布:2025-03-20 06:50:31 浏览:339
myeclipse不自动编译了 发布:2025-03-20 06:41:38 浏览:777
led汽车大灯和卤素灯该选哪个配置 发布:2025-03-20 06:40:55 浏览:917
sql网校 发布:2025-03-20 06:16:42 浏览:279
安卓手机图标排列为什么会混乱 发布:2025-03-20 06:16:05 浏览:761
手机pin初始密码是多少 发布:2025-03-20 06:15:59 浏览:900