由于水平有限,分析的过程和文章可能会存在漏洞已经错误的地方,欢迎大家对有疑问的位置提出问题,共同讨论,一起成长 :)

一、启动过程

当gameboy通电后,机子会从内存地址为0的地方开始运行一段长度为256字节的程序,这段程序是固化在gameboy内部的ROM(只读存储器)上的。

这段程序的作用是,把卡带中从104H到133H地址的任天堂的LOGO读取出来并显示在屏幕的最上方。这个LOGO会滚动到屏幕中间,然后会播放两个提示音。然后会把从这个地址段读出来的数据和内部数据进行比较,如果比较失败,则停止运行。如果比较通过,则把地址从134H到14DH的数据逐个相加,再把相加的结果加25,如果最后得到的结果的最低有效位不为0,则停止运行。否则,内部程序运行结束,机子会从卡带地址100H处开始执行实际的游戏指令,同时设置寄存器为以下值: 

AF=$01B0

   BC=$0013

   DE=$00D8

   HL=$014D

   Stack Pointer=$FFFE

   [$FF05] = $00   ; TIMA

   [$FF06] = $00   ; TMA

   [$FF07] = $00   ; TAC

   [$FF10] = $80   ; NR10

   [$FF11] = $BF   ; NR11

   [$FF12] = $F3   ; NR12

   [$FF14] = $BF   ; NR14

   [$FF16] = $3F   ; NR21

   [$FF17] = $00   ; NR22

   [$FF19] = $BF   ; NR24

   [$FF1A] = $7F   ; NR30

   [$FF1B] = $FF   ; NR31

   [$FF1C] = $9F   ; NR32

   [$FF1E] = $BF   ; NR33

   [$FF20] = $FF   ; NR41

   [$FF21] = $00   ; NR42

   [$FF22] = $00   ; NR43

   [$FF23] = $BF   ; NR30

   [$FF24] = $77   ; NR50

   [$FF25] = $F3   ; NR51

   [$FF26] = $F1-GB, $F0-SGB ; NR52

   [$FF40] = $91   ; LCDC

   [$FF42] = $00   ; SCY

   [$FF43] = $00   ; SCX

   [$FF45] = $00   ; LYC

   [$FF47] = $FC   ; BGP

   [$FF48] = $FF   ; OBP0

   [$FF49] = $FF   ; OBP1

   [$FF4A] = $00   ; WY

   [$FF4B] = $00   ; WX

   [$FFFF] = $00   ; IE 
View Code

相关文章: