diff options
Diffstat (limited to 'main.asm')
-rw-r--r-- | main.asm | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/main.asm b/main.asm new file mode 100644 index 0000000..ba5069b --- /dev/null +++ b/main.asm @@ -0,0 +1,76 @@ +INCLUDE "hardware.inc" + +SECTION "Header", ROM0[$100] + +EntryPoint: ; This is where execution begins + di ; Disable interrupts. That way we can avoid dealing with them. + jp Start ; Leave this tiny space + +REPT $150 - $104 + db 0 +ENDR + +SECTION "Game Code", ROM0 + +Start: + ; Turn off the LCD +.waitVBlank + ld a, [rLY] + cp 144 ; Check if the LCD is past VBlank + jr c, .waitVBlank + + xor a ; ld a, 0 ; We only need to reset a value with bit 7 reset, but 0 does the job + ld [rLCDC], a ; We will have to write to LCDC again later + + ld hl, $9000 + ld de, FontTiles + ld bc, FontTilesEnd - FontTiles +.copyFont + ld a, [de] ; Grab 1 byte from the source + ld [hli], a ; Place it at the destination, incrementing hl + inc de ; Move to next byte + dec bc ; Decrement count + ld a, b ; Check if count is 0, since `dec bc` doesn't update flags + or c + jr nz, .copyFont + + ld hl, $9800 ; This will print the string at the top-left corner of the screen + ld de, HelloWorldStr +.copyString + ld a, [de] + ld [hli], a + inc de + and a ; Check if the byte we just copied is zero + jr nz, .copyString ; Continue if it's not + + ; Init display registers + ld a, %11100100 + ld [rBGP], a + + xor a ; ld a, 0 + ld [rSCY], a + ld [rSCX], a + + ; Shut sound down + ld [rNR52], a + + ; Turn Screen on, display background + ld a, %10000001 + ld [rLCDC], a + + ; Lock up +.lockup + jr .lockup + + +SECTION "Font", ROM0 + +FontTiles: +INCBIN "font.chr" +FontTilesEnd: + + +SECTION "Hello World string", ROM0 + +HelloWorldStr: + db "Hello World!", 0 \ No newline at end of file |