Created
December 14, 2018 14:58
-
-
Save oktomus/22f014b5e6740a9d71dadc184987bfeb to your computer and use it in GitHub Desktop.
GameBoy Hello World
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; See https://eldred.fr/gb-asm-tutorial/hello-world.html | |
; https://github.com/ISSOtm/gb-asm-tutorial | |
INCLUDE "hardware.inc" | |
SECTION "Header", ROM0[$100] | |
EntryPoint: ; Where the code begins. | |
di ; Disable interrupts. | |
jp Start | |
; Fill the header. | |
REPT $150 - $104 | |
db 0 | |
ENDR | |
; END SECTION Header. | |
SECTION "Game code", ROM0 | |
Start: ; Main program. | |
; Turn off LCD. | |
.waitVBlank | |
ld a, [rLY] ; Really ? | |
cp 144 ; The screen is 144 px tall. After the LCD is past VBlank. | |
jr c, .waitVBlank | |
xor a ; The same as ld a, 0 ; We actually need to only reset the 7th bit. | |
ld [rLCDC], a | |
; Copy the font to VRAM. | |
ld hl, $9000 | |
ld de, FontTiles | |
ld bc, FontTilesEnd - FontTiles | |
.copyFont ; For loop FontTiles <= de <= FontilesEnd. | |
ld a, [de] ; Grab the 1st byte. | |
ld [hli], a ; Place it. Actual copy. | |
inc de ; Increment (will copy the next tile in the next iteration). | |
dec bc ; Decrement count. | |
ld a, b ; Check if count is 0 because dec does not update flags. | |
or c ; If bc == 0 then Z will be set. | |
jr nz, .copyFont | |
; Copy the string we want to display. | |
ld hl, $9800 ; Print it at the top left. | |
ld de, HelloWorldStr | |
.copyString | |
ld a, [de] | |
ld [hli], a | |
inc de | |
and a ; Check if the char is \0. | |
jr nz, .copyString | |
; To turn the screen on, we need to set bit 7 of LCDC | |
; Initialize display registers. | |
ld a, %11100100 ; Palette loading. | |
ld [rBGP], a | |
xor a ; ld a, 0 | |
ld [rSCY], A | |
ld [rSCX], A | |
; Disable sound. | |
ld [rNR52], a | |
; Turn the screen on. | |
ld a, %10000001 | |
ld [rLCDC], a | |
; Trap it in an infinite loop. | |
.lockup | |
jr .lockup | |
; END SECTION Game code. | |
SECTION "Font", ROM0 | |
FontTiles: | |
INCBIN "font.chr" | |
FontTilesEnd: | |
SECTION "Hello World string", ROM0 | |
HelloWorldStr: | |
db "Hello Prout!", 0 | |
; END SECTION Font |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
GB_NAME := hello_world | |
all: $(GB_NAME).gb | |
$(GB_NAME).gb: $(GB_NAME).o | |
rgblink -o $@ $< | |
rgbfix -v -p 0 $@ | |
$(GB_NAME).o: $(GB_NAME).ds | |
rgbasm -o $@ $< | |
clean: | |
rm -f *.o *.gb |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment