Cleaned the interrupt code a bit
This commit is contained in:
20
src/interrupts.c
Normal file
20
src/interrupts.c
Normal 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
14
src/interrupts.h
Normal 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();
|
18
src/main.c
18
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;
|
||||
}
|
||||
}
|
@@ -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
|
||||
|
Reference in New Issue
Block a user