GBC遊戲掌機 一

2021-06-02 22:35:21 字數 3095 閱讀 8499

最近在學習gbc(or cgb),閒著沒事,翻譯了一下乙個英文的文件。暫時是初稿,也還沒有翻譯完。不一定會修改,也不一定會翻譯完。英文原文可以在這裡找到

前言game boy 技術引數

cpu               - 8位(與z80處理器相似)

主頻- 4.194304mhz (

工作記憶體8 kb ( cgb是32kb)

螢幕尺寸2.6寸

解析度160×144 (20×18塊圖案)

最大精靈數每屏最多16個,每行最多10個

精靈尺寸8×8或8×16

調色盤顏色4個灰度層(cgb是32768種顏色)

水平同步9198 khz (9420 khz for sgb)

垂直同步59.73 hz (61.17 hz for sgb)

聲音4聲道立體音

電源直流6v 0.7w

記憶體分配圖

gameboy有16位的位址匯流排,用於定址rom, ram和i/o暫存器。

基本分配圖

0000-3fff   16kb rom bank 00    (in cartridge, fixed at bank 00)

4000-7fff   16kb rom bank 01..nn (in cartridge, switchable bank number)

8000-9fff   8kb video ram (vram) (switchable bank 0-1 in cgb mode)

a000-bfff   8kb external ram     (in cartridge, switchable bank, if any)

c000-cfff   4kb work ram bank 0 (wram)

d000-dfff   4kb work ram bank 1 (wram) (switchable bank 1-7 in cgb mode)

e000-fdff   same as c000-ddff (echo)    (typically not used)

fe00-fe9f   sprite attribute table (oam)

fea0-feff   not usable

ff00-ff7f   i/o ports

ff80-fffe   high ram (hram)

ffff        interrupt enable register

位於rom bank 0的跳轉向量

0000,0008,0010,0018,0020,0028,0030,0038    用於rst控制

0040,0048,0050,0058,0060                  用於中斷

但是,假如你的程式沒有使用rst控制或中斷,這些位址的記憶體可能用於其它用途。rst命令是乙個位元組長的操作碼,除了目的位址是固定的外,它類似於call指令。

rom bank 0中的卡帶頭

0100-014f的記憶體是卡帶的頭資訊。這個區域包含了程式**,入口點,校驗和,關於記憶體控制器(mbc)晶元使用狀況的資訊,rom和ram的尺寸等等。其中的大多數位元組都必需正確的設定。請參閱卡帶頭這一節以了解更詳細的資訊。

外部的記憶體和硬體

0000-7fff和a000-bfff範圍的記憶體空間可以用於連線外部的硬體。第乙個區域一般是作為rom的位址空間,帶有記憶體控制器的卡帶也可以使用這個區域來產生資料(只寫)到記憶體控制器晶元。第二個區域經常作為外部ram或者其它硬體(如實時時鐘等)的位址空間。外部的記憶體一般連線到浮衝電池,即使在遊戲機關閉或者卡帶被移除的情況下也能儲存遊戲進度和分數紀錄等。請參閱記憶體控制器這一節以了解更詳細的資訊。

lcd控制暫存器

ff40 – lcdc – lcd 控制(r/w)

bit 7 - lcd display enable                            (0=off, 1=on)

bit 6 - window tile map display select          (0=9800-9bff, 1=9c00-9fff)

bit 5 - window display enable                       (0=off, 1=on)

bit 4 - bg & window tile data select                 (0=8800-97ff, 1=8000-8fff)

bit 3 - bg tile map display select              (0=9800-9bff, 1=9c00-9fff)

bit 2 - obj (sprite) size                      (0=8x8, 1=8x16)

bit 1 - obj (sprite) display enable              (0=off, 1=on)

bit 0 - bg display (for cgb see below)          (0=off, 1=on)

lcdc.7 – lcd 顯示使能

注意:停止lcd的操作(bit7從1到0)只能在垂直消隱(v-blank)期間進行,如果在這之外操作,有可能對硬體造成破壞。這個問題似乎比較嚴重,據說任天堂拒絕任何不遵守此條規則的遊戲。

當ly的值大於或等於144時意味著垂直消隱期間。當lcd顯示被禁止的時候,螢幕是空白的(白色),vram和oam在這時都可以自由的訪問。

--對於不同的gameboy型別,lcdc.0有不同的含義--

lcdc.0 – 1) 單色的gameboy和sgb:背景顯示

當bit0被清除時,背景變成空白(白色)。視窗和精靈仍然可以顯示(如果bit1和/或bit5允許的話)。

lcdc.0 – 2) cgb 在cgb狀態:背景和視窗優先順序控制

當bit0被清除時,背景和視窗丟失了它們的優先順序,精靈將總是顯示在背景和視窗之上,而不受oam和背景屬性圖的優先標誌位的影響。

lcdc.0 – 3) cgb 在非cgb狀態:背景和視窗顯示控制

當bit0被清除時,背景和視窗都變成空白(白色)。在該情況下,視窗顯示控制位(bit 5)被忽略。只有精靈可以在這種情況下顯示(如果bit1置1)。

這可能造成乙個相容性問題-任何禁止背景顯示,但又希望顯示視窗的單色遊戲(如果有的話),在cgb上將不會正常執行。

(未完,待續)

GBC遊戲掌機 二

接上 lcd狀態暫存器 ff41 stat lcdc 狀態 r w bit 6 lyc ly coincidence interrupt 1 enable read write bit 5 mode 2 oam interrupt 1 enable read write bit 4 mode 1 v...

Valve掌機可執行所有PC遊戲

開發者聲稱,採用新銳梵谷 架構的steam掌機應對近幾年來的遊戲毫無問題,最大的考驗來自去年發行的新作,迄今尚未發現steam平台有任何一款遊戲拿到這台掌機上跑不動。這位開發者表示,次世代大作的追求是高解析度與高幀率,這很好,將解析度縮至1umugoev280x800等於大幅降低硬體需求,steam...

用html5 js實現掌機遊戲賽車demo

最近無聊,用html5 js做了乙個以前玩過的掌機賽車遊戲,順便學習一下畫布的api以及鞏固一下js基礎。遊戲介面,沒做什麼美化。遊戲規則 遊戲介面分為三列,黑色方塊隨機落下,紅色方塊可以在三列自由移動 用方向鍵,長按下方向鍵黑色方塊加速下滑 紅色方塊碰到黑色方塊即為輸。得分 每正常通過一次黑色方塊...