96 lines
2.1 KiB
NASM
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:
|
|
|