Game Boy Architecture 计算机体系结构课程报告 --刘继元
Nintendo Game Boy 1989年任天堂第一台便携式游戏机 全球销量1.2亿台 畅销游戏 特性 俄罗斯方块 3026万套 俄罗斯方块 3026万套 精灵宝可梦红蓝 2364万套 特性 使用游戏卡储存游戏 使用反射式四灰阶液晶屏幕 可以通过连线进行通讯
GB技术参数 处理器:Z80- 改良型 (8Bit) 主频:4.194304 MHz 内存:8 KByte RAM Game Boy Color 则拥有双CPU 内存:8 KByte RAM 游戏卡带容量:256 KBit,512 KBit, 1 MBit,2 MBit, 4 MBit, 8 MBit, 16 MBit 声音:4 声道(矩形波2音 任意波1音 杂波1音) 立体声,带耳机 图形:反射式点阵式 液晶屏幕,2.45”英寸,最大分辨率 160×144 Pixel,四灰阶 Game Boy Color型:56原始色调色盘可同时显示 32.786种颜色 电源:4颗AA型(3号)电池(也可使用外接交流电源)
CPU - Sharp LR35902 (4MHz) Intel 8080 + Zilog Z80 + … 8-bit legend – Intel 8080(2MHz) – The first truly usable microprocessor 8位数据线,16位地址线,可访问64K的内存 寄存器8位累加器、8位状态寄存器、6个8位通用寄存器、16位栈指针、16位程序计数器 通用寄存器可以成对使用以适应一些16位的指令(运算)或者寻址 有些特性没有使用(IN/OUT指令) Zilog Z80 (2.5MHz)– 兼容 Intel 8080 增加了很多新的特性(虽然绝大多数并没有被采用) 增加了256条新的指令空间(0xCB),位处理被引入 并没有增加Z80的寄存器 the 8080 had a separate address space for input/output; it accessed this space using the IN and OUT instructions. For example, writing to memory address 0xFF40 would access the LCD Control register that is part of the LCD display device. In fact, the addresses 0xFF00 to 0xFF7F were reserved for this kind of device mapping. IY+IX 寄存器用于基址+变址没有采用
Memory(16位地址,64KB寻址空间) Memory banking 其余地址空间 游戏ROM被分成16KB大小的“bank”,然后空间复用 0x0000-0x3fff(第一个bank)保持不变,0x4000-0x7fff可替换,最大4MB(255块) bank的替换由游戏负责,手动 Memory Bank Controller(MBC) 其余地址空间 0x8000-0x9fff 视频 RAM,0xfe00-0xfeff - Sprite Attribute Table 0xa000-0xbfff 可替换外置 RAM bank(8K),最大32KB 0xc000-0xcfff,0xd000-0xdfff,两个内部RAM 0xff00-0xff7f 设备映射,0xff80-0xfffe内部RAM,0xffff中断开关寄存器
Memory Bank Controller(MBC) MBC控制bank的切换(MBC1-5) 通过写入特定的地址空间来访问MBC内部的寄存器 0x0000-0x1fff – RAM控制寄存器 0x2000-0x3fff – ROM Bank 编号 0x4000-0x5fff – RAM Bank 编号或ROM Bank 编号高位 0x6000-0x7fff – ROM/RAM模式切换 以上为 MBC1,其余同理 0x0000-0x7fff为ROM地址空间,所以不存在些操作,所以所有的写操作都会被重定 向到寄存器
中断系统 中断处理由ROM上的程序完成。 中断告知LCD屏幕完成内存扫描、计时结束等。 中断到来时,CPU不再接受新的中断(实际上中断处理程序可以手动允许中断), 指令压栈,调用中断处理程。中断结束时,恢复现场。 两个内存映射寄存器 FFFF – IE – Intertupt Enable(0:V-Blank、1:LCD、2:Timer、3:Serial、4:Joypad) FF0F – IF – Interrupt Flag 低位的中断优先级更高
Boot 过程 PC设置为0x00,执行内部 ROM 的 boot 程序 内部 boot 的地址空间为0x0000-0x00ff 初始化堆栈 校验卡带的头,并打印logo(失败锁死) 播放开机音 写一个特殊的寄存器禁用内部ROM 执行0x0100的指令
后继者 Game Boy Advanced Nintendo DS Nintendo 3DS CPU: ARM7tdmi -16.78MHZ RISC 指令集 同时支持32位与16位指令(兼容GB) Nintendo DS CPU:ARM946E-S(66MHz) Nintendo 3DS CPU:Dual ARM11(266MHz) GPU:PICA200,133MHz
参考网站 https://zh.wikipedia.org/wiki/Game_Boy https://realboyemulator.wordpress.com/2013/01/01/the-nintendo-game- boy-1/ http://meseec.ce.rit.edu/551-projects/spring2014/4-1.pdf http://meseec.ce.rit.edu/551-projects/fall2013/1-1.pdf http://meseec.ce.rit.edu/551-projects/winter2011/1-2.pdf