lvhaian 发表于 2007-12-7 18:42:01

讨论在 ARM7 上面跑 FC 模拟器的可行方案。

最近玩了玩 PDA 上面的 FC 模拟器。就是小时候的红白机,小霸王其乐无穷!

我想在这里讨论一下使用一块 ARM7 或者 ARM9 芯片直接作一个跑 FC 模拟器的难度有多大,不建立在高端操作系统上面的那种。

毕竟现在很多 MP4 的机器都带了 FC模拟器。

如果大家了解 GBA 的人都知道,GBA 的内核就是一个 ARM7。

GBA 为了更好的节约资源,没有使用任何操作系统,在 GBA 上面的 FC 模拟器就是网上的一些高手自己编写的,从 PC 上的模拟器移植过去的。


大家觉得这工作有多大难度呢,有多少人感兴趣呢。我昨天下载了几个 PC 上面 FC 模拟器的源代码,感觉移植难度还是不小的。

大家谈谈自己的看法啦。晚上我上一些我搜集的一些资料。

gingin 发表于 2007-12-7 18:48:21

GBA的arm7处理器频率虽然不高(大概16M),但是它有几个dma通道,而且液晶驱动芯片功能不错,专门针对游戏设计的,图层、卷轴、缩放、精灵都是硬件完成的。用通用的arm7来模拟fc代价可能比gba高。

lvhaian 发表于 2007-12-7 18:54:51

对的,没有错,我也了解到他是一个专门争对游戏和 2D 引擎加速的专门硬件模块,代价肯定比 GBA 高的。

因为毕竟我们是跑模拟器,不是跑游戏机拉。

关键是对这个东西比较感兴趣,不考虑成本。

KuJJ 发表于 2007-12-7 19:30:32

我有兴趣,可是才转入ARM,希望能行吧。

ppa2001 发表于 2007-12-7 19:48:40

应该可以的,现在TFT的2.4寸屏也很便宜~90左右~可以作个小游戏机~DX有资料吗?

sufeila 发表于 2007-12-7 20:36:13

lvhaian 安哥 的这个想法我也曾有过,不过没有实施.
模拟PC跑个DOS应该可行吧.

PC的模拟器,没有找过这个方面的资料,不过很有兴趣.顶顶!!!

lvhaian 发表于 2007-12-7 21:18:04

第一份资料:

virtuanes 模拟器源代码
点击此处下载ourdev_186301.rar(文件大小:541K)

另外一个 C++ 的 NES 模拟器源代码
点击此处下载ourdev_186303.rar(文件大小:144K)

NEStreme 模拟器源代码
点击此处下载ourdev_186304.zip(文件大小:297K)

第二份资料:

lvhaian 发表于 2007-12-7 22:03:14

怎样写 NES 模拟器.txt
点击此处下载ourdev_186320.rar(文件大小:9K)

usbfish 发表于 2007-12-7 22:12:16

对FC很有兴趣却又完全不懂ARM的汉子飘过。。。。。

liyangbbs 发表于 2007-12-7 23:01:47

说真的,对FC很有感觉。烂就烂在自己才开始接触ARM。先把资料下来看一下。

lvhaian 发表于 2007-12-7 23:10:50

研究过了,有难度,估计要200M 的ARM 和 100M 的DSP 才能解决.

cddyy 发表于 2007-12-7 23:12:00

上个GBA的资料,还没去仔细看的,是内部的硬件详细说明
点击此处打开ourdev_186340.pdf(文件大小:542K)

at90s 发表于 2007-12-8 00:35:10

【10楼】 lvhaian 安哥

积分:476
派别:
等级:------
来自:上海
        研究过了,有难度,估计要200M 的ARM 和 100M 的DSP 才能解决.



//===========================================================================
应该不需要这么快吧,我记得好多年前的486时代就有不少FC模拟器了,那时候的486才几十兆呢

ppa2001 发表于 2007-12-8 02:06:30

我见过这样的游戏机~可以查FC卡~象个GBA,带个液晶屏,装电池的~新的也只要200~300左右~所以说ARM7应该可以的~

apple2 发表于 2007-12-8 03:42:27

>我见过这样的游戏机~可以查FC卡~象个GBA,带个液晶屏,装电池的~新的也只要200~300左右~所以说ARM7应该可以的~

那个用的是集成的6502+PPU吧。有现成的单芯片封装的,把NES所有的片子都集成进去了。

ATmega32 发表于 2007-12-8 10:35:14

关注中。

如果在ARM上跑MAME模拟器更好了。

icefire 发表于 2007-12-8 11:53:56

苹果ipod的芯是arm7 国外有在ipod上2次开发做的gameboy模拟器,包括linux操作系统

johnnyqyun 发表于 2007-12-10 20:54:06

想得到,做得到。NCE

win2kddk 发表于 2007-12-10 21:58:22

刚看了看6楼的程序,大多数程序是在做指令的译码转换。推荐个芯片,或许有希望成功。LPC2148,最高可以跑60M,集成DA,连声音都有了,再想办法驱动一块合适的液晶。等一下,44B0是不是就很好啊?关注中。。。。。

bozai 发表于 2007-12-11 00:27:55

关注

apple2 发表于 2007-12-11 01:25:17

刚才在taobao上面查了一下,最低花20多块钱就能买一个新的FC兼容机……

买回来hack一下也不错。

awsoft 发表于 2008-2-6 12:39:03

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=741901&bbs_id=9999
看看这个 大家一起讨论啊

顶顶顶

awsoft 发表于 2008-2-6 12:48:31

要开发游戏机,首先要有一个游戏机的硬件平台,然后去找游戏开发商合作,如果你找到一家肯支持你的公司,你就可以迈出第一步了。现在ARM的系统非常流行,而且开发难度不大,价格比较便宜,大可以考虑从ARM9统入手,要注重的不是选主CPU的问题,而是选GPU的问题,通过GPU来提高图形质量和支持硬件3D,游戏机才有市场。最重要的,还是要有软件公司帮你的游戏机做软件 , 哈哈 软件咱们自己可以写 啊哈哈

tomtom 发表于 2008-2-6 18:40:15

很多游戏MP4不都是支持游戏机模拟的么。要不先基于win mobile平台的pda开发(就是抄一个)一个模拟器先,然后再关心什么自制硬件平台。

hillsea 发表于 2008-2-7 23:21:37

我看ARM行,只是图形部分可能需要好好用点心重新编写一下
硬件平台我看用44B就可以了

wanghm35 发表于 2008-2-7 23:30:08

期待...

fengpc 发表于 2008-2-9 00:33:05

去旧货市场淘个原装的FC,上面的6502,6264,PPU之类的都是独立的芯片,做开发更好

lovemay 发表于 2008-2-13 02:42:09

已经在arm7上实现fc模拟器,市面常见的rom都能玩,不开声音,速度基本过得去

JAMESKING 发表于 2008-2-13 10:40:52

哎,想当时MC68000+Z80+27512+62256都能做出“拳皇97-2002”、“侍魂1-5”等大作,真不知道现在的程序员是怎么啦。

awsoft 发表于 2008-2-14 08:09:03

定上去 , 密切关注

liao-ljj 发表于 2008-3-1 22:04:10

有没有人挑战PS2啊?那玩也不错啊!国内怎么没有人搞搞游戏机啊?

gingin 发表于 2008-3-1 22:30:02

30楼,游戏机最重要的是软件而不是硬件。微软和sony都赔本卖硬件,就是靠软件方面的授权来挣钱的,否则硬件价格太高了,市场接受不了的。以国内的版权意识,开发单机的游戏机根本就是亏本的活(即使避开了游戏机方面的限制政策)。

gba上有几个开源的fc模拟器,其中一个的官网是:
http://www.pocketnes.org/
画面、声音、速度都较完美:

What features does PocketNES have?
PocketNES version 9 is loaded with the following goodies:

Emulates the NES in full speed
Emulates all sound channels
Emulates some of the NES mappers (more info)
Link play support for up to 4 players, single cart and multi cart (more info)
Scaled mode: shrinks the NES display down to fit in the GBA screen, sprite scaling optional (more info)
Unscaled mode: the NES display is in full size cut off by the GBA screen (more info)
State and SRAM saving support, up to 56kbyte, about 10-20 compressed states
Sleep mode, auto sleep after 5 minutes, start+select to wake up
Autofire
Accelerated mode and slow motion
1P/2P Controller switchable
Sprite following in unscaled mode. (creator) (more info)
Optional splash screen (creator) (more info)

wq_780805 发表于 2008-3-5 20:48:03

27楼 的高手 用的哪个芯片啊

5QYLYqR0Y7 发表于 2008-3-11 21:26:20

27楼的高手,能详细说一下吗?最近正好对这个感兴趣

awsoft 发表于 2008-5-29 09:13:40

顶上去 , arm7 觉得应该可以 , 也不用操作系统 就直接运行 ,game 和 多媒体 用dsp实现也是不错的选择

weiyongwill 发表于 2008-6-4 21:14:36

也想过要用ARM7做个游戏机,最初的想法还是源于我的步步高电子词典,它的官网提供很多游戏下载,也有很多RPG游戏,只是不知怎样读取游戏文件内容。

xuhai777 发表于 2008-6-5 00:02:38

一定可行,但没市场

watercat 发表于 2008-6-5 00:14:11

【28楼】 JAMESKING
        哎,想当时MC68000+Z80+27512+62256都能做出“拳皇97-2002”、“侍魂1-5”等大作,真不知道现在的程序员是怎么啦。
=======================

如今的“程序员”就像农贸市场里的番茄大白菜,化肥浇的,长得快出得多,就是没味道,得论堆撮着卖……

不过另一方面说,任天堂自己也是用集成了全部功能的【单片机】才能做到在GBA上跑GB游戏的,投入和产出的简单对比罢了,各地都一样……

lovemay 发表于 2008-6-18 14:30:18

arm7 102m

jast 发表于 2008-6-28 09:06:46

不要市场,单凭兴趣,密切关注中

ldqmoon 发表于 2008-6-29 17:47:45

MAME有现成的源码, 从那里下手看看如何移植到44b0上就应该可以实现. psp上有mame的模拟器, 据说也是拿pc上mame的源码改的.

我觉得可以先不考虑cpu的速度, 先实现再说. 自己做着玩可以, 想卖就难了~

adidas 发表于 2008-7-3 15:10:17

我只是一个路过的,不懂这些.能问问,现在有ARM7或ARM9的手机GBA模拟器么? 跪求!

accpzkk 发表于 2008-7-8 09:28:57

顶!关注中

redriver 发表于 2008-8-1 18:52:51

公司里有移植过NES,32位的处理器,50M够了。

yjgyiysbcc 发表于 2009-5-21 15:30:58

非常的感兴趣

ksniper 发表于 2009-5-21 15:53:28

很有 想法纯支持下

bg6agf 发表于 2009-10-19 11:49:53

很有 想法纯支持下

楼上的有人说开发出来了。。可是一点图啊资料啊都没放。。这个。。。

qlb1234 发表于 2009-10-19 13:08:08

FC需要用32位处理器来搞吗?用AVR可行不?

binghe167 发表于 2009-10-19 13:26:10

MARK

bg6agf 发表于 2009-10-20 09:46:36

http://cache.amobbs.com/bbs_upload782111/files_20/ourdev_493688.gif
(原文件名:FC手柄图.gif)

CD4021 的手柄。。。。

bg6agf 发表于 2009-10-20 10:13:08

关于FC游戏开发、6502资料集中链接

【本文将不断更新!!!】(链接看下划线)

{2008-10-23}

1 模拟MAX论坛-FC研发区 :网上唯一能搜到的国内FC开发_论坛(模拟MAX论坛 » FC游戏讨论区 » FC研发区)有大量资源供下载,不过要积分。众多高手座阵,但缺少技术讨论。适合菜鸟。


2 NESdev(英文) :NES开发。有极多极全的英文资料。工具是好用的,但说明书除了是英文以外,文字格式也是极乱的。知识跳跃性极大,不好理解。


3 Bob Rost(98-026) :网上唯一找到的,较易学的FC编程工具:Nbasic&Nesasm。

      Development tools and resources :开发工具及资源。专指Nbasic&Nesasm。

      Assignments from the class :助理,实际是几个进阶例程,适合菜鸟。


4 外星论坛-曹老师工作室 :少量资源下载,有较多技术讨论,彼有参考价值。如有具体问题欢迎发问。适合菜鸟。


5 天空联盟论坛 :较专业的FC论坛。

      编程专版 :高手们聚首之所。论题深奥,极高阅读权限。菜鸟慎入。

   C老师工作室 :游戏业相关话题,历史、潮流、行业、传闻。。。就是没技术资料。


6 周哥工作室 :FC行家。学习教程的入。友情链接也不可放过!


7 惊风工作室_FC专栏 :FC行家。Dump!烧录游戏


8 金明山庄 (KAMMING'S GARDEN) :ROM HACK,改游戏的进。

bg6agf 发表于 2009-10-20 10:14:30

6502汇编指令集!
-------------------------------addr:代表8位地址    addr16:代表16位地址   data:立即数-------------------------------
数据传送指令
LDA--由存储器取数送入累加器 M→A

符号码格式         指令操作码       寻址方式
LDA ($addr,X)            A1                     先变址X后间址
LDA $addr                   A5                        零页寻址
LDA #$data               A9                        立即寻址
LDA $addr16               AD                        绝对寻址
LDA ($addr),Y            B1                        后变址Y间址
LDA $addr,X               B5                        零页X变址
LDA $addr16,Y             B9                        绝对Y变址
LDA $addr16,X             BD                        绝对X变址

//LDX--由存储器取数送入累加器 M→X

符号码格式    指令操作码      寻址方式
LDX #$data         A2                     立即寻址
LDX $addr         A6                     零页寻址
LDX $addr16       AE                     绝对寻址
LDX $addr,Y      B6                     零页Y变址
LDX $addr16,Y    BE                     绝对Y变址

//LDY--由存储器取数送入累加器 M→Y

符号码格式       指令操作码   寻址方式
LDY #$data            A0                     立即寻址
LDY $addr            A4                     零页寻址
LDY $addr16          AC                  绝对寻址
LDY $addr,X         B4                  零页X变址
LDY $addr16,X       BC                  绝对X变址

//STA--将累加器的内容送入存储器 A--M

符号码格式         指令操作码       寻址方式
STA ($addr,X)            81                  先变址X后间址
STA $addr                   85                  零页寻址
STA $addr16               8D                  绝对寻址
STA ($addr),Y             91                  后变址Y间址
STA $addr,X                95                  零页X变址
STA $addr16,Y            99                  绝对Y变址
STA $addr16,X            9D                   绝对X变址

//STX--将寄存器X的内容送入存储器 X--M

符号码格式   指令操作码   寻址方式
STX $addr            86                  零页寻址
STX $addr16      8E                  绝对寻址
STX $addr,Y         96                  零页Y变址

//STY--将寄存器Y的内容送入存储器 Y--M

符号码格式          指令操作码          寻址方式
STY $addr                   84                              零页寻址
STY $addr16               8C                           绝对寻址
STY $addr,X                94                           零页X变址

//寄存器和寄存器之间的传送

符号码格式 操作码   寻址方式       指令作用
TAX            AA            寄存器寻址   将累加器A的内容送入变址寄存器X
TXA            8A            寄存器寻址   将变址寄存器X的内容送入累加器A
TAY            A8            寄存器寻址   将累加器A的内容送入变址寄存器Y
TYA            98            寄存器寻址   将变址寄存器Y的内容送入累加器A
TSX            BA            寄存器寻址   将堆栈指针S的内容送入变址寄存器X
TXS            9A            寄存器寻址   将变址寄存器X的内容送入堆栈指针S

算术运算指令

1. ADC--累加器,存储器,进位标志C相加,结果送累加器AA+M+C→A

符号码格式      指令操作码      寻址方式
ADC ($addr,X)       61                     先变址X后间址         
ADC $addr            65                     零页寻址
ADC #$data          69                     立即寻址
ADC $addr16      6D                  绝对寻址
ADC ($addr),Y      71                     后变址Y间址
ADC $addr,X         75                     零页X变址
ADC $addr16,Y   79                     绝对Y变址
ADC $addr16,X   7D                  绝对X变址

注意:由于进位标志C页会参加运算,所以在做加法运算时,一般要在前面加指令 CLC,清除进位标志

2. SBC--从累加器减去存储器和进位标志C,结果送累加器A-M-C→A

符号码格式      指令操作码      寻址方式
SBC ($addr,X)      E1                         先变址X后间址
SBC $addr            E5                        零页寻址
SBC #$data          E9                        立即寻址
SBC $addr16      ED                     绝对寻址
SBC ($addr),Y      F1                        后变址Y间址
SBC $addr,X         F5                        零页X变址
SBC $addr16,Y   F9                        绝对Y变址
SBC $addr16,X   FD                        绝对X变址

注意:由于在做减法运算时,进位标志C会参与运算,所以在做减法前要先加指令 SEC,置进位标志

3. INC--存储器单元内容增1M+1→M

符号码格式    指令操作码寻址方式
INC $addr            E6             零页寻址
INC $addr16      EE             绝对寻址
INC $addr,X         F6             零页X变址
INC $addr16,X   FE             绝对X变址

4. DEC--存储器单元内容减1M-1→M

符号码格式   指令操作码   寻址方式
DEC $addr         C6                   零页寻址
DEC $addr16       CE                   绝对寻址
DEC $addr,X      D6                   零页X变址
DEC $addr16,X    DE                   绝对X变址

5. 寄存器X,Y加1减1

符号码格式 指令操作码 寻址方式
INX            E8               隐含寻址
DEX            CA            隐含寻址
INY            C8            隐含寻址
DEY            88            隐含寻址

逻辑运算指令

1.AND--寄存器与累加器相与,结果送累加器A∧M→A

符号码格式         指令操作码         寻址方式
AND ($addr,X)                21                        先变址X后间址
AND $addr                     25                        零页寻址
AND #$data                  29                     立即寻址
AND $addr16               2D                     绝对寻址
AND ($addr),Y               31                        后变址Y间址
AND $addr,X                  35                     零页X变址
AND $addr16,Y            39                     绝对Y变址
AND $addr16,X               3D                      绝对X变址

2.ORA--寄存器与累加器相或,结果送累加器A∨M→A

符号码格式          指令操作码   寻址方式
ORA ($addr,X)                01               先变址X后间址
ORA $addr                      05               零页寻址
ORA #$data                  09               立即寻址
ORA $addr16                  0D               绝对寻址
ORA ($addr),Y               11               后变址Y间址
ORA $addr,X                  15               零页X变址
ORA $addr16,Y                19               绝对Y变址
ORA $addr16,X                1D               绝对X变址

3.EOR--寄存器与累加器相异或,结果送累加器A≮M→A

符号码格式      指令操作码   寻址方式
EOR ($addr,X)         41                     先变址X后间址
EOR $addr                45                     零页寻址
EOR #$data            49                     立即寻址
EOR $addr16            4D                     绝对寻址
EOR ($addr),Y          51                     后变址Y间址
EOR $addr,X             55                     零页X变址
EOR $addr16,Y         59                     绝对Y变址
EOR $addr16,X          5D                     绝对X变址

置标志位指令
1. CLC--清除进位标志         0→C   机器码 18   
2. SEC--置进位标志C                1→C   机器码 38   
3. CLD--清除十进制运算标志D0→D   机器码 D8   
4. SED--置十进制运算标志D   1→D   机器码 F8   
5. CLV--清除溢出标志V             0→V   机器码 B8
6. CLI--清除中断禁止指令I         0→I    机器码 58   
7. SEI--置位中断禁止标志I         1→I    机器码 78

bg6agf 发表于 2009-10-20 10:14:45

比较指令
1. CMP--累加器和存储器比较
符号码格式       指令操作码      寻址方式
CMP ($addr,X)          C1                   先变址X后间址
CMP $addr               C5                   零页寻址
CMP #$data             C9                   立即寻址
CMP $addr16          CD                   绝对寻址
CMP ($addr),Y         D1                   后变址Y间址
CMP $addr,X         D5                   零页X变址
CMP $addr16,Y       D9                   绝对Y变址
CMP $addr16,X       DD                   绝对X变址

2. CPX--寄存器X的内容和存储器比较
符号码格式   指令操作码 寻址方式
CPX #$data       E0            立即寻址
CPX $addr         E4            零页寻址
CPX $addr16   EC            绝对寻址

3. CPY--寄存器Y的内容和存储器比较
符号码格式      指令操作码    寻址方式
CPY #$data             C0                   立即寻址
CPY $addr               C4                  零页寻址
CPY $addr16         CC                  绝对寻址

移位指令
1. 算术左移指令ASL
符号码格式      指令操作码 寻址方式
ASL                      0A               累加器寻址
ASL $data            06               零页寻址
ASL $addr16      0E            绝对寻址
ASL $addr,X      16               零页X变址
ASL $addr16,X    1E               绝对X变址

2. 逻辑右移指令LSR

符号码格式   指令操作码   寻址方式
LSR                   4A            累加器寻址
LSR $data         46               零页寻址
LSR $addr16   4E               绝对寻址
LSR $addr,X      56               零页X变址
LSR $addr16,X5E               绝对X变址

3. 循环左移指令ROL

符号码格式      指令操作码   寻址方式
ROL                        2A                      累加器寻址
ROL $data            26                     零页寻址
ROL $addr16          2E                     绝对寻址
ROL $addr,X         36                     零页X变址
ROL $addr16,X       3E                     绝对X变址
ROL的移位功能是将字节内容连同进位C一起依次向左移1位

4. 循环右移指令ROR
符号码格式      指令操作码         寻址方式
ROR                      6A                           累加器寻址
ROR $data            66                            零页寻址
ROR $addr16      6E                            绝对寻址
ROR $addr,X         76                            零页X变址
ROR $addr16,X   7E                            绝对X变址
ROR的移位功能是将字节内容连同进位C一起依次向右移1位

堆栈操作指令
1. 累加器进栈指令 PHA    机器码 48
2. 累加器出栈指令 PLA    机器码 68

跳转指令
1. JMP--无条件转移指令
符号码格式   指令操作码   寻址方式
JMP$data16       4C                   绝对寻址
JMP ($data16)   5C                   间接寻址
2. 条件转移指令
符号码格式    操作码          寻址方式               指令功能
BEQ $data16    F0            相对寻址             如果标志位Z=1则转移,否则继续
BNE $data16    D0               相对寻址             如果标志位Z=0则转移,否则继续
BCS $data16    B0               相对寻址             如果标志位C=1则转移,否则继续
BCC $data16    90               相对寻址             如果标志位C=0则转移,否则继续
BMI$data16   30               相对寻址             如果标志位N=1则转移,否则继续
BPL $data16    10               相对寻址            如果标志位N=0则转移,否则继续
BVS $data16    70               相对寻址            如果标志位V=1则转移,否则继续
BVC $data16    50               相对寻址            如果标志位V=0则转移,否则继续

3. 转移到子程序指令JSR和从主程序返回指令RTS

JSR指令仅仅是 绝对寻址,它的操作码是 20
RTS指令是   隐含寻址,它的操作码是 60

bg6agf 发表于 2009-10-20 10:30:24

http://blog.donews.com/sailor/archive/2005/04/30/358325.aspx

任天堂红白机 ( NES ) 文档 |
| 版本.2.00

bg6agf 发表于 2009-10-20 10:42:35

http://blog.csdn.net/silvasaga/archive/2008/11/04/3220731.aspx
任天堂产品系统文件
目录
·1、系统简介
·2、缩写表
·3、中央处理器
·4、图形处理器
·5、声音处理器
·6、手柄、控制器和扩展口
·7、内存映像硬件
·8、I/O端口
·9、NES文件格式
·10、任天堂磁碟机系统
_____________________________________________________________________

1、系统简介
任天堂主机由6502处理器和一个特制的图形处理器组成。CPU是6502,而不是传言中的65C02(CMOS)。PPU的显存是和CPU的内存是分离的,可以通过对特殊端口的读/写来操作。卡带可能包含的内容有位于处理器地址$8000-$FFFF的ROM,和位于PPU地址$0000-$1FFF的 VROM。由于NES只有2K的RAM,因此变量的可用的变量空间只有从$0000到$07FF共8个页面。在开机之后RAM和VRAM中的内容是0,但是注意:复位并不改变其中的内容。在更小的卡带,比如只有16KB的ROM,它占有$C000-$FFFF,而$8000-$BFFF的空间是不用的。那些大于32KB的卡带,它被特殊的电路分页到一定的地址空间。一些卡带在$6000-$7FFF有SRAM,那是电池存储的位置。卡带VROM被用来做图案表(例如 Tile 表, 角色发生器等等)。通常的数量是8KB,包含两个图案表。大于8KB 的VROM被特殊的电路分页到一定的地址空间。内部的VRAM在 PPU 内存里定位于$2000-$3FFF,它用来存储命名表(例如屏幕缓冲)。虽然PPU 支持4个命名表,但只能支持两个的存放空间。另外的两个是开始两个的镜像。NES共有154条指令。
在本文本里,你将遇到如下形式的符号:“Dn" (5 位,3 位,等等)。位是按从最低位(0 位)到最高位(7 位)。所有的十六进制都在前面加上一个美圆符号($)($2002,$4026,等等)是在6502处理器汇编里常用的符号,二进制前面加上一个百分号%。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/silvasaga/archive/2008/11/04/3220731.aspx
http://www.uushare.com/user/lzwcsj/file

FC开发环境及工具    FC相关书籍 这里主要是开发方面的,没有游戏攻略. 包括于春的三本书,f-basic语言与编程技巧,电脑游戏机硬件与编程特技,任天堂游戏编程探密   NES模拟器设计详细资料
邦谷小PC 在我看来,邦谷小PC和步步高多媒体学生电脑的系统就是一样的,包括DOS,BIOS,很有可能出自一人之手,应该是清华大学教授唐瑞春.没有步步高系统的源程序,那么,研究邦谷小PC的也一样.   步步高多媒体学生电脑 我此后的一个重要事件,鼓动我的好朋友买了一台步步高多媒体学生电脑,又邮购了步步高汇编语言,可惜的是,我又有许多地方不懂, 给作者赵福海去信请教,没有给我回信,显然他很忙,但给我寄来两本资料和一张盘 ...

bg6agf 发表于 2009-10-20 10:55:19

http://cache.amobbs.com/bbs_upload782111/files_20/ourdev_493704.jpg
(原文件名:FC主板.jpg)


FC电路图

bg6agf 发表于 2009-10-20 11:11:20

http://down2.uushare.com:8001/download/get?id=94BF33333835C1D14C761C8722E2C192
电脑游戏机硬件与编程特技_清淅版.pdf

bg6agf 发表于 2009-10-20 11:11:34

点击此处下载 ourdev_493706.rar(文件大小:2.78M) (原文件名:游戏机_电脑学习机原理、使用和维修_11127813.rar)

xinyou 发表于 2009-10-26 23:55:44

mark

9509238 发表于 2009-10-27 13:20:05

喜欢模拟器的人还真是不少,组织到处都是啊.幸会幸会!
用ARM7做FC模拟器,如果把图形全部交给其他硬件,比如说用VNC实现,那就不成问题了.如果一定要自带显示屏,得找一块集成LCD控制器的ARM.

tarchen 发表于 2009-10-28 20:10:44

打个标签,有空慢慢爽!

sleep12 发表于 2009-11-3 15:33:48

有意思,我也来学学。

bg6agf 发表于 2009-11-3 16:16:37

直接视频输出行不?用ARM模拟CPU 用AVR模拟PPU
这样可以不?

xiaowei061 发表于 2010-1-13 21:13:24

没下文啦?...

scat-01 发表于 2010-1-15 23:20:54

if{只是练习下编程,熟悉arm硬件,完全的出于兴趣}
else
{
fc用的是早期的摩托骡拉6502的8bit单片机做主cpu,控制 卡带rom,ppu,psg及控制器,这些是硬件平台。fc不过就是个便宜的硬件,任天堂写的程序都是面向fc硬件的,如果用arm就是纯粹的去仿fc,不用OS,个人觉得可以,但是就算行,大家不要忘了一个概念啊,模拟器就是基于一个OS而言所写的一个软件,没有OS咋编译读取?mp4不也是搭建的linux框架移植nes模拟器的。是,我就用纯arm硬件啊,我就拿arm写个程序实现fc,别的不干,能用现成便宜的8bit的,非用32bit的,不觉得是高射炮打蚊子么?
}

bg6agf 发表于 2010-1-28 09:48:46

楼上的。。语法不对啊。

RockmanZero 发表于 2010-1-28 15:41:07

我写过可运行在arm7上的fc模拟器。
但是最少要200M的cpu才能跑全速。
后来我移植到windows mobile 上了。

可以看看
http://www.yueyuesoft.com/moonnes/moonnes.html

aleyn 发表于 2010-3-3 10:41:00

mark

xinyou 发表于 2010-3-17 09:14:26

mark

tonydh 发表于 2010-3-17 16:23:43

关注中。

youki1234 发表于 2010-3-17 16:47:11

mark一下

elecfun 发表于 2010-3-17 18:25:09

不得不顶了

cycy123 发表于 2010-6-9 10:42:51

lovemay 山鬼的情人在吗?

最近也在弄这个东西,可否留下你的QQ跟你讨论讨论。

zengyi703 发表于 2010-6-10 17:28:40

mark

avrwoo 发表于 2010-6-10 20:08:50

mark

komahe 发表于 2010-6-21 21:37:37

太强大了!朝鲜刚0:7输给了葡萄牙,汗~

BenjaminSH 发表于 2010-8-2 15:04:01

还有人在弄这个嘛?我之前移植了一个,跑在208MHZ的ARM926EJS上,运行情况良好,声音输出44K的PCM也OK,但是现在想在104MHz的ARM7EJS上跑,速度很慢,优化的很累额,有经验的一起来讨论下这个东西。

liujun6037 发表于 2010-9-15 16:37:55

回复【76楼】BenjaminSH
-----------------------------------------------------------------------

你需要多大的ram,来做模拟器?
我移植到STM32上,用了1.2M的SRAM,不太合适啊.

lvhaian 发表于 2010-9-18 23:51:39

音频输出不要 应该可以完成. RAM 肯定需要大一点, ROM 可以弄到 Nor Flash 上.

cqsgcqsg 发表于 2010-11-10 17:43:09

顶一个

BenjaminSH 发表于 2010-12-9 23:50:32

搞定罗,全部代码45K ROM,占用200KB RAM左右,ARM7运行良好,不过我得承认这个ARM7有点变态.... 现在努力支持mapper163中...

liujun6037 发表于 2010-12-10 01:01:33

回复【80楼】BenjaminSH
-----------------------------------------------------------------------

楼上是FC高手,变态的ARM7,应该是东芯那款吧。呵呵...
我也找了个简单的FC,不是通用的,虽然支持的游戏少,但是对我来说足够了,有时间再移植到STM32上。

obit 发表于 2010-12-10 04:40:34

四五年前就作过,关键是效率

chenwei1919 发表于 2010-12-10 07:06:48

关注

liuweiele 发表于 2010-12-10 09:23:15

我在ARM9上实现过,包括声音和按键功能,帧速可以轻松达到25fps

snoopyzz 发表于 2010-12-10 10:30:01

回复【84楼】liuweieleLiuwei
-----------------------------------------------------------------------

LS,我朋友在联想i50(MTK的手机,应该是arm7吧)上移植实现了FC,SFC,GBA,CPS1模拟器,
其中Fc支持蓝牙联机.....


帧率在不联机时,有50/60fps(没玩过,可能跳过帧)....

liuweiele 发表于 2010-12-10 10:40:20

LS,你如何知道有50/60fps,凭感觉?

snoopyzz 发表于 2010-12-10 10:44:51

我朋友说的是全速....我只有相信了-_-

有另外的朋友玩过....我没买,不能确定....

还说是模拟GBA,有声也很流畅,他说是直接跑GBA的代码,只有中断,IO,PPU等是模拟的,但兼容性就不是很好....


你可以搜下联想i50的评测....这个是做为i50的内置功能的,他是做手机软件的...联想i50的软件解决方案是他们公司弄的,
另外i50内置的iava虚拟机(据说比java虚拟机效率高,还支持java->iava字节码转换-_-)也是我朋友主持开发的....

liuweiele 发表于 2010-12-10 10:47:33

在ARM平台上,SFC的效率远远高于FC

snoopyzz 发表于 2010-12-10 10:53:28

我那朋友,以前在文曲星CC800/PC1000/NC1020/NC2000/PC2000/NC2600/NC3000等各经典机型上移植了FC版 的super mario....
当然,画面缩水成单色还小了一半(屏幕只有160*80),这些机器的MCU也是6502指令集的...所以只是重写了io,ppu部分


帧速有60fps(其实由于他个人嫌慢,跑的比FC要快些,应该超过了60fps,我当时玩了这个后来再玩FC就觉得FC上的super mario太慢了-_-)

liuweiele 发表于 2010-12-10 10:55:57

回复【87楼】snoopyzz
我朋友说的是全速....我只有相信了-_-
有另外的朋友玩过....我没买,不能确定....
还说是模拟gba,有声也很流畅,他说是直接跑gba的代码,只有中断,io,ppu等是模拟的,但兼容性就不是很好....
-----------------------------------------------------------------------
这个帖子中有FC运行视频,帧速为20fps,已经相当快了:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4388367&bbs_page_no=1&search_mode=4&search_text=liuweiele&bbs_id=9999

snoopyzz 发表于 2010-12-10 10:57:16

回复【88楼】liuweieleLiuwei
-----------------------------------------------------------------------

事实上是,WM手机(400MHz以下)上有声全速的FC模拟器(133MHz都有声全速了)满天都是,有声全速的SFC至今没有....

snoopyzz 发表于 2010-12-10 10:58:04

回复【90楼】liuweieleLiuwei
-----------------------------------------------------------------------

如果帧速为20fps就很快了,只能说明跳帧了....

liuweiele 发表于 2010-12-10 11:03:04

回复【92楼】snoopyzz
回复【90楼】liuweieleliuwei
-----------------------------------------------------------------------
如果帧速为20fps就很快了,只能说明跳帧了....
-----------------------------------------------------------------------

我测试一下,看是否跳帧了....

liuweiele 发表于 2010-12-10 11:20:04

在20fps下,使用自动跳帧模式,每秒钟跳 2-3 帧,已经很低了;如果不用操作系统,应该会更快.

snoopyzz 发表于 2010-12-10 11:32:51

FC全速
PAL制式是50fps
NTSC制式是60fps....

只有20fps,说明跳帧为2,也就是显示1帧后跳2帧...

我个人而言,对跳帧很敏感....50fps以下就能感觉出来....(铁拳打多了的后遗症)

跳帧不会产生不流畅和拖慢的感觉...很多WM上的模拟器都 是跳帧的,但是玩过全速,再玩跳帧,就知道区别了....

本来整屏移动时,一次移一个像素...变成一次移3个.....从点移变成块移了....仔细观察还是挺明显的....

liuweiele 发表于 2010-12-10 12:30:00

回复【95楼】snoopyzz
fc全速
pal制式是50fps
ntsc制式是60fps....
只有20fps,说明跳帧为2,也就是显示1帧后跳2帧...
我个人而言,对跳帧很敏感....50fps以下就能感觉出来....(铁拳打多了的后遗症)
跳帧不会产生不流畅和拖慢的感觉...很多wm上的模拟器都 是跳帧的,但是玩过全速,再玩跳帧,就知道区别了....
本来整屏移动时,一次移一个像素...变成一次移3个.....从点移变成块移了....仔细观察还是挺明显的....
-----------------------------------------------------------------------

是的.
真正玩游戏的时候,绝大数人无心在意这些细微的差别,除非跳变成"瞬移"了.

pingf0 发表于 2010-12-10 12:40:28

如果搞出来的能在proteus仿就好了...

BenjaminSH 发表于 2010-12-10 14:44:03

我跳了4帧... 过几天试试在ARM9上全速是不是可行,其实模拟系统,总线速度很总要,低速存储器会比较麻烦
另外那个虚拟机,如果有同学有兴趣的话,可以一起研究伐,其实我也做了一个,不过没有商用...
feature phone上的所谓虚拟机,要不就是位置无关跑在RAM里的代码,跟boot有点类似,要不就是解释性的引擎,LUA或者类似的机制。

国内只是没有人好好做而已,其实也不难的玩意。

by the way, iava的东西还是不错的,呵呵,他那个ARM7,是MTK的片子,ARM7EJ-S,不过联想的那款机器是ARM926EJ-S,208MHZ

我2011下半年考虑做其他的模拟器,暂时日程表排满了... 可怜:(

BenjaminSH 发表于 2010-12-10 14:58:25

可以ARM7上不跳帧也可以,但是声音就成大问题了,我送PCM数据的速度比DSP处理的速度还快,系统根本忙不过来,现在只能强制延时-_-
页: [1] 2
查看完整版本: 讨论在 ARM7 上面跑 FC 模拟器的可行方案。