This repository has been archived on 2025-12-12. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
gb-helloworld/main.asm
2023-03-24 23:59:36 +01:00

96 lines
2.1 KiB
NASM

include "hardware.inc"
section "Start",rom0[$100] ; hier startet der Gameboy
di ; Interrupts ausschalten
jp Program ; Springe zum eigentlichen Programm
section "Programm",rom0[$150] ; hier läuft das Programm
Program:
call LCDOff
ld a, %11111100 ; Hintergrund Farbpallette definieren
ld [rBGP], a ; Hintergrund Farbpallette laden
;;; Font in VRAM kopieren
ld de, font ; Font Quelle
ld bc, font_end-font ; Font Länge
ld hl, _VRAM+$200 ; Ziel
call TileCopy
;;; Text schreiben
ld a, $3
ld [$C000], a
ld a, $99
ld [$C001], a
ld hl, _SCRN0
.bgfill
ld de, text
ld bc, text_end-text
.charcopy
ld a, [de]
ld [hli], a
inc de
dec bc
ld a, b
or a, c
jr nz, .skip
ld de, text
ld bc, text_end-text
.skip
ld a, [$C001]
dec a
ld [$C001], a
or a, 0
jr nz, .charcopy
ld a, $FF
ld [$C001], a
ld a, [$C000]
dec a
ld [$C000], a
or a, 0
jr nz, .bgfill
;;; LCD einschalten
ld a, 0
ld [rSCX], a
ld [rSCY], a
ld a, LCDCF_ON ; LCD Einschaltbit nach a Laden
or a, LCDCF_BG8000
or a, LCDCF_BGON
ld [rLCDC], a ; LCD einschalten
.loop
halt
jr .loop
LCDOff:
.turn_of_LCD ; Bildschirm auschalten
ld a, [rLY] ; Y Koordinate vom LCD nach a
cp a, $90 ; Vergleich ob LCD in Zeile 144
jr nz, .turn_of_LCD ; Wiederholen bis LCD in Zeile 144 ist
ld a, LCDCF_OFF ; LCD Ausschaltbit nach a Laden
ld [rLCDC], a ; LCD ausschalten
ret
TileCopy:
.copy
ld a, [de]
inc de
ld [hli], a
dec bc
ld a, b
or a, c
jr nz, .copy
ret
section "assets",rom0[$300]
text: db "Hello World! "
text_end:
font: incbin "font_8x8.chr"
font_end: