掌機 - Game Boy Advance - Assembly - BG Mode 4(bitmap)



參考資訊:
https://devkitpro.org/index.php
https://wii.leseratte10.de/devkitPro/
https://patater.com/gbaguy/gbaasm.htm
http://www.coranac.com/tonc/text/toc.htm
https://github.com/devkitPro/devkitarm-crtls
https://gist.github.com/JShorthouse/bfe49cdfad126e9163d9cb30fd3bf3c2

BG Mode 4支援bitmap(每一個像素點的顏色,由使用者指定),固定使用BG2CNT


每一個像素點的顏色由1Byte表示(256種顏色的索引),像素填充的起始位址是0x6000000


2 frame buffers


BG Mode對應的解析度


main.s

    .equ DISPCNT,     0x4000000
    .equ BG2CNT,      0x400000c
    .equ PALETTE_RAM, 0x5000000
    .equ VRAM,        0x6000000

    .global main
       
    .arm
    .text
main:
    ldr r0, =DISPCNT
    ldr r1, =0x404
    strh r1, [r0]

    ldr r0, =BG2CNT
    ldr r1, =0x0000
    strh r1, [r0]

    ldr r0, =PALETTE_RAM
    ldr r1, =palette
    ldr r2, =4
1:
    ldrh r3, [r1], #2
    strh r3, [r0], #2
    subs r2, r2, #1
    bne 1b
     
    ldr r0, =VRAM
    ldr r1, =0x03020100
    str r1, [r0]
2:
    b 2b
   
palette:
    .2byte 0x0000, 0x001f, 0x03e0, 0x7c00

完成