硬件初始化工作

当 Game Boy 通电时, 将执行从内存位置 0 开始的 256 字节程序. 该程序位于 Game Boy 的 ROM 中. 该程序要做的第一件事是读取 Cartridge 位置从 0x0104 到 0x0133 的内存空间. 此空间存储了任天堂的商标, 并将此商标的图形显示在屏幕顶部. 然后滚动此图像, 直到它位于屏幕中间. 然后在内置扬声器上播放两个音符. 再次读取 Cartridge 位置从 0x0104 到 0x0133, 但这一次将它们与内部 ROM 中的表格进行比较. 如果有任何字节不一致, 则 Game Boy 会停止继续比较字节并停下所有操作.

接下来, Game Boy 开始将 Cariridge 中位置从 0x0134 到 0x014d 的字节相加, 总计为 25 个数字. 如果结果的最低有效字节不是零, 则Game Boy 将停止执行任何操作.

如果以上检查均通过, 则禁用内部 ROM, 并且初始化寄存器的值, 并使 CPU 从位置 0x0100 开始执行 Cartridge 程序.

内存地址与其初始化的值:

AF=0x01b0-GB/SGB, 0xffb0-GBP, 0x11b0-GBC
BC=0x0013
DE=0x00d8
HL=0x014d
0xff05 = 0x00   ; TIMA
0xff06 = 0x00   ; TMA
0xff07 = 0x00   ; TAC
0xff10 = 0x80   ; NR10
0xff11 = 0xbf   ; NR11
0xff12 = 0xf3   ; NR12
0xff14 = 0xbf   ; NR14
0xff16 = 0x3f   ; NR21
0xff17 = 0x00   ; NR22
0xff19 = 0xbf   ; NR24
0xff1a = 0x7f   ; NR30
0xff1b = 0xff   ; NR31
0xff1c = 0x9f   ; NR32
0xff1e = 0xbf   ; NR33
0xff20 = 0xff   ; NR41
0xff21 = 0x00   ; NR42
0xff22 = 0x00   ; NR43
0xff23 = 0xbf   ; NR30
0xff24 = 0x77   ; NR50
0xff25 = 0xf3   ; NR51
0xff26 = 0xf1-GB, 0xf0-SGB ; NR52
0xff40 = 0x91   ; LCDC
0xff42 = 0x00   ; SCY
0xff43 = 0x00   ; SCX
0xff45 = 0x00   ; LYC
0xff47 = 0xfc   ; BGP
0xff48 = 0xff   ; OBP0
0xff49 = 0xff   ; OBP1
0xff4a = 0x00   ; WY
0xff4b = 0x00   ; WX
0xffff = 0x00   ; IE

请注意, 开机时 Game Boy 内部 RAM 包含随机数据. 所有的 Game Boy 仿真器都倾向于在进入时首先将所有 RAM 的值设置为 0x00.