From 1a57ab1e2687a5c3508a7c95a6582363ca5b3e14 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Sun, 8 May 2022 20:47:58 -0700 Subject: [PATCH] Cleaned the interrupt code a bit --- src/interrupts.c | 20 ++++++++++++++++++++ src/interrupts.h | 14 ++++++++++++++ src/main.c | 18 +++--------------- src/main.h | 4 +--- 4 files changed, 38 insertions(+), 18 deletions(-) create mode 100644 src/interrupts.c create mode 100644 src/interrupts.h diff --git a/src/interrupts.c b/src/interrupts.c new file mode 100644 index 0000000..b23626f --- /dev/null +++ b/src/interrupts.c @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2022 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +#include "interrupts.h" + +void interruptOnScanline() { + if(LYC_REG == 0) { + LCDC_REG |= LCDCF_BG8000; + if((TEXTBOX_STATE & TEXTBOX_STATE_VISIBLE) != 0) { + LYC_REG = INTERRUPT_TEXTBOX_VRAM; + } + } else if(LYC_REG == INTERRUPT_TEXTBOX_VRAM) { + LCDC_REG &= ~LCDCF_BG8000; + LYC_REG = 0; + } +} \ No newline at end of file diff --git a/src/interrupts.h b/src/interrupts.h new file mode 100644 index 0000000..0c589f2 --- /dev/null +++ b/src/interrupts.h @@ -0,0 +1,14 @@ +/** + * Copyright (c) 2022 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +#pragma once +#include "libs.h" +#include "conversation/textbox.h" + +#define INTERRUPT_TEXTBOX_VRAM ((TEXTBOX_WIN_Y * TILE_HEIGHT) - 1) + +void interruptOnScanline(); \ No newline at end of file diff --git a/src/main.c b/src/main.c index 023a1e9..22ae750 100644 --- a/src/main.c +++ b/src/main.c @@ -7,18 +7,6 @@ #include "main.h" -#define TEXTBOX_INTERRUPT_Y ((TEXTBOX_WIN_Y * TILE_HEIGHT) - 1) - -// TODO: cleanup -void scanline_isr() { - if(LYC_REG == 0) { - LYC_REG = TEXTBOX_INTERRUPT_Y; - LCDC_REG |= LCDCF_BG8000; - } else if(LYC_REG == TEXTBOX_INTERRUPT_Y) { - LYC_REG = 0; - LCDC_REG &= ~LCDCF_BG8000; - } -} void main() { int16_t j; @@ -27,14 +15,13 @@ void main() { // Set up the GAMEBOY's registers. disable_interrupts(); - // Create a critical section + // Create a critical section for some video stuff CRITICAL { DISPLAY_OFF; LCDC_REG = LCDCF_OFF | LCDCF_BG8000 | LCDCF_BG9800 | LCDCF_BGON; STAT_REG |= STATF_LYC; LYC_REG = 0; - - add_LCD(scanline_isr); + add_LCD(interruptOnScanline); } set_interrupts(VBL_IFLAG | LCD_IFLAG); @@ -98,5 +85,6 @@ void main() { // Update conversation fade effect conversationFadeUpdate(); // mainDebugDraw(); + LCDC_REG |= LCDCF_BG8000; } } \ No newline at end of file diff --git a/src/main.h b/src/main.h index 80b6fd8..2a10cd4 100644 --- a/src/main.h +++ b/src/main.h @@ -9,9 +9,7 @@ #include "libs.h" #include "time.h" - #include "SM.h" - #include "poker/poker.h" #include "poker/card.h" #include "conversation/fade.h" @@ -19,7 +17,7 @@ #include "conversation/queue.h" #include "conversation/textbox.h" #include "conversation/questionbox.h" - +#include "interrupts.h" #include "sprites/spritecards.h" #define GB_BACKGROUND_COLUMNS 0x20