Game Gear Micro

Linux系統刷機、解說細項


參考資料:
1. releases

目前司徒已經完成Game Gear Micro掌機的第一版Linux系統,雖然改機難度有點偏高,不過,司徒還是相當推薦喜歡改機的愛好者可以動手試試,那種樂趣只有自己體驗過才懂得,而基於開源精神,司徒目前已經把所有源代碼發布在GitHub,分享給有興趣研究的開源愛好者,雖然開源並沒有強制的法律約束力,不過,司徒還是建議大家可以多多分享修改後的源代碼,這種東西或許就是我們可以傳承給下一代的好東西!司徒接著說明刷機過程和源代碼修改的部份,如果對於源代碼沒興趣的玩家,只要看前半部份的說明就可以。

刷機步驟:
1. 下載ggm_linux_sd_20220618.img.7z
2. 解壓縮ggm_linux_sd_20220618.img.7z
3. 將ggm_linux_sd_20220618.img刷到MicroSD
4. 插入MicroSD後,開機就可以看到如下畫面:

按鍵1:官方系統(NAND Flash)
按鍵2:Linux系統(MicroSD)

按下按鍵1就會進入官方系統(NAND Flash)


按下按鍵2就會進入Linux系統(MicroSD)


為了致敬SEGA,司徒將桌面拆成四個字母使用:





S:設定(Setting)
進入S後,有兩個設定可以使用,分別是亮度調整以及超頻,使用十字按鍵操作,按下藍色START按鍵會返回桌面


E:實驗(Experiment)
目前尚未完成,這部份之後會用來跑虛擬GPU實驗項目,目前司徒先放閃屏測試程式,按下藍色START按鍵會返回桌面


G:GBA模擬器(GBA Emulator)
司徒使用gpsp模擬器進行修改,為了配合GGM的屏幕特性,司徒修改很多東西,而進入GBA模擬器後,如果沒有遊戲檔案(/roms/gba/),則提示如下畫面


司徒重新改寫了載入遊戲選單,支援中文顯示,字型大小做了適當調整,每次啟動該選單時,會自動停在上次載入遊戲的位置,選單效能也進行優化,不會因為大量遊戲而造成卡頓(如PSP上面那樣),支援LR快速選單跳躍功能


GGM的屏幕顯示區域是240x195,但是,GBA解析度是240x160,因此,多餘的35像素部份,司徒使用GAME BOY ADVANCE字眼顯示


按下藍色START按鍵進入選單(按鍵1退出菜單),司徒也對菜單進行大改寫,只保留司徒覺得想要的部份


司徒也花了相當大量的時間在改善閃屏問題,司徒覺得目前狀態算是相當不錯,畫面顯示也相當柔順,如果玩家還是不滿意,建議超頻使用


A:Arduboy模擬器(Arduboy Emulator)
目前尚未完成,目前司徒先放聲音以及按鍵測試,按下藍色START按鍵會返回桌面


源代碼修改說明:
UBOOT修改部份如下


在reset時,就先跳轉到boot_menu,為何要在reset一開始就先跳轉呢?因為這是唯一一個可以轉從SPI啟動的時機

    .globl  reset
    .globl  save_boot_params_ret
    .type   save_boot_params_ret,%function

reset:
    bl boot_menu

    /* Allow the board to save important registers */
    b   save_boot_params

boot_menu一開始就會判斷是否從RAM執行(UBOOT Relocate後),如果是,代表UBOOT正在啟動Linux Kernel

boot_menu:
    push {lr}
    tst pc, #0x80000000
    bne boot_linux

如果不是正在啟動Linux Kernel,則顯示開機選單,圖片位於MicroSD 2MB偏移位置

    bl ccu_module_init
    bl dram_module_init
    bl sd_module_init

    ldr r0, =IMG_BASE / 512
    ldr r1, =0x80000000
    ldr r2, =(2 * 1024 * 1024) / 512
    bl load_image
    bl lcd_init

    ldr r4, =PIO_BASE + PE
0:
    ldr r0, [r4, #PIO_DATA]
    tst r0, #(1 << 9)
    beq boot_stock
    tst r0, #(1 << 10)
    beq boot_linux
    b 0b

如果是需要從SPI啟動,則直接呼叫BROM的SPI啟動位址,反之則直接返回原本UBOOT,繼續啟動Linux Kernel的步驟

boot_stock:
    bl lcd_off
    ldr pc, =0xffff4110

boot_linux:
    pop {pc}

GBA模擬器修改部份,菜單源代碼替換成gui4ggm.c,原本舊的gui.c保留不動,SDL部份都改成Double Buffer

rl_screen = SDL_SetVideoMode(240, 240, 16, SDL_SWSURFACE | SDL_DOUBLEBUF);
screen = SDL_CreateRGBSurface(SDL_SWSURFACE, 240 * video_scale, 240 * video_scale, 16, 0, 0, 0, 0);

像素搬移的部份

int x=0, y=0;
uint32_t *s = (uint32_t*)screen->pixels + (30 * 120);
uint32_t *d = (uint32_t*)rl_screen->pixels + (30 * 120);
for(y=0; y<195; y++){
    for(x=0; x<120; x++){
        *d++ = *s++;
    }
}

VSYNC改使用IOCTL方式(司徒已經實作在Framebuffer顯示驅動中)

//delay_us((u64)virtual_frame_count * 50000 / 3 - new_ticks + 2);
if(fbdev > 0){
    int zero=0;
    ioctl(fbdev, FBIO_WAITFORVSYNC, &zero);
}

編譯步驟:
Miyoo編譯開發工具

$ cd
$ wget https://github.com/steward-fu/miyoo/releases/download/v1.0/toolchain.7z
$ 7za x toolchain.7z
$ sudo mv miyoo /opt/
$ export PATH=$PATH:/opt/miyoo/bin

編譯Kernel

$ cd
$ wget https://github.com/steward-fu/ggm/releases/download/src/kernel_20220618.tar.gz
$ tar xvf kernel_20220618.tar.gz
$ cd kernel
$ ./run.sh ggm

編譯UBOOT

$ cd
$ wget https://github.com/steward-fu/ggm/releases/download/src/uboot.tar.gz
$ tar xvf uboot.tar.gz
$ cd uboot
$ ./run.sh /dev/sdX ggm

編譯GBA模擬器

$ cd
$ wget https://github.com/steward-fu/ggm/releases/download/src/gpsp_20220618.tar.gz
$ tar xvf gpsp_20220618.tar.gz
$ cd gpsp/ggm
$ make -j

MicroSD佈局如下

ui:主界面顯示App
app_s:設定App(run.sh)
app_e:實驗App(run.sh)
app_g:GBA模擬器(run.sh)
app_a:Arduboy模擬器(run.sh)
rootfs:系統
mininit:由Kernel呼叫用來掛載rootfs(squashfs系統)
swap.img:虛擬內存(128MB)

司徒幫Miyoo Mini(SSD202)上了一顆虛擬GPU(Google SwiftShader),用來跑PPSSPP模擬器,原本打算再次移植給F1C200S使用,讓它跑OpenGL ES 2.0程式,可惜司徒錯估SwiftShader需要至少ARMv7才可以支援,於是司徒再度修改項目,將原本app_e(OpenGL ES)改成跑GB模擬器,而app_a(Arduboy模擬器)改成跑GBC模擬器,而司徒最後再度挖掘,才發現GGM音量轉輪是接到PA0,透過TouchPanel方式輸入,利用其電壓做音量控制,修改後的Kernel位於:Kernel,目前已經可以控制音量大小~

app_e(GB模擬器)
編譯後:app_e
源代碼:gambatte
玩家只要將編譯後的檔案解壓縮到app_e資料夾就可以,接著執行如下程式


司徒將GBA的選單拿來重複使用,因此,字型大小算是相當剛好(遊戲請放在roms/gb資料夾)


司徒保留GB的BIOS開機畫面,每次看到這個畫面總是相當懷念~


司徒打包了很多調色盤以供使用,因此,有相當多調色盤使用好好試試~


別有一番風味~


app_a(GBC模擬器)
編譯後:app_a
源代碼:gambatte
玩家只要將編譯後的檔案解壓縮到app_a資料夾就可以,接著執行如下程式


字型大小算是相當剛好(遊戲請放在roms/gbc資料夾)


保留GBC的BIOS開機畫面,是不是相當懷念~哈~


如果玩家有注意到,司徒將GB的外框往上移動,GBC則是往下移動,這樣看起來是不是更有感覺呢~哈~


菜單都是使用藍色按鍵做設定~


返回上一頁