summaryrefslogtreecommitdiff
path: root/home/lcd.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/lcd.asm')
-rw-r--r--home/lcd.asm81
1 files changed, 81 insertions, 0 deletions
diff --git a/home/lcd.asm b/home/lcd.asm
new file mode 100644
index 00000000..875043bc
--- /dev/null
+++ b/home/lcd.asm
@@ -0,0 +1,81 @@
+; LCD handling
+
+
+Function547:: ; 547
+; Unreferenced
+ ld a, [hFFC6]
+ cp rSCX - $ff00
+ ret nz
+ ld c, a
+ ld a, [LYOverrides]
+ ld [$ff00+c], a
+ ret
+; 552
+
+
+LCD:: ; 552
+ push af
+ ld a, [hFFC6]
+ and a
+ jr z, .done
+
+; At this point it's assumed we're in WRAM bank 5!
+ push bc
+ ld a, [rLY]
+ ld c, a
+ ld b, LYOverrides >> 8
+ ld a, [bc]
+ ld b, a
+ ld a, [hFFC6]
+ ld c, a
+ ld a, b
+ ld [$ff00+c], a
+ pop bc
+
+.done
+ pop af
+ reti
+; 568
+
+
+DisableLCD:: ; 568
+; Turn the LCD off
+
+; Don't need to do anything if the LCD is already off
+ ld a, [rLCDC]
+ bit 7, a ; lcd enable
+ ret z
+
+ xor a
+ ld [rIF], a
+ ld a, [rIE]
+ ld b, a
+
+; Disable VBlank
+ res 0, a ; vblank
+ ld [rIE], a
+
+.wait
+; Wait until VBlank would normally happen
+ ld a, [rLY]
+ cp 145
+ jr nz, .wait
+
+ ld a, [rLCDC]
+ and %01111111 ; lcd enable off
+ ld [rLCDC], a
+
+ xor a
+ ld [rIF], a
+ ld a, b
+ ld [rIE], a
+ ret
+; 58a
+
+
+EnableLCD:: ; 58a
+ ld a, [rLCDC]
+ set 7, a ; lcd enable
+ ld [rLCDC], a
+ ret
+; 591