Cleaned the interrupt code a bit

This commit is contained in:
2022-05-08 20:47:58 -07:00
parent a6dbca6a90
commit 1a57ab1e26
4 changed files with 38 additions and 18 deletions

20
src/interrupts.c Normal file
View File

@@ -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;
}
}

14
src/interrupts.h Normal file
View File

@@ -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();

View File

@@ -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;
}
}

View File

@@ -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