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"
|
#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() {
|
void main() {
|
||||||
int16_t j;
|
int16_t j;
|
||||||
@@ -27,14 +15,13 @@ void main() {
|
|||||||
// Set up the GAMEBOY's registers.
|
// Set up the GAMEBOY's registers.
|
||||||
disable_interrupts();
|
disable_interrupts();
|
||||||
|
|
||||||
// Create a critical section
|
// Create a critical section for some video stuff
|
||||||
CRITICAL {
|
CRITICAL {
|
||||||
DISPLAY_OFF;
|
DISPLAY_OFF;
|
||||||
LCDC_REG = LCDCF_OFF | LCDCF_BG8000 | LCDCF_BG9800 | LCDCF_BGON;
|
LCDC_REG = LCDCF_OFF | LCDCF_BG8000 | LCDCF_BG9800 | LCDCF_BGON;
|
||||||
STAT_REG |= STATF_LYC;
|
STAT_REG |= STATF_LYC;
|
||||||
LYC_REG = 0;
|
LYC_REG = 0;
|
||||||
|
add_LCD(interruptOnScanline);
|
||||||
add_LCD(scanline_isr);
|
|
||||||
}
|
}
|
||||||
set_interrupts(VBL_IFLAG | LCD_IFLAG);
|
set_interrupts(VBL_IFLAG | LCD_IFLAG);
|
||||||
|
|
||||||
@@ -98,5 +85,6 @@ void main() {
|
|||||||
// Update conversation fade effect
|
// Update conversation fade effect
|
||||||
conversationFadeUpdate();
|
conversationFadeUpdate();
|
||||||
// mainDebugDraw();
|
// mainDebugDraw();
|
||||||
|
LCDC_REG |= LCDCF_BG8000;
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -9,9 +9,7 @@
|
|||||||
|
|
||||||
#include "libs.h"
|
#include "libs.h"
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
|
|
||||||
#include "SM.h"
|
#include "SM.h"
|
||||||
|
|
||||||
#include "poker/poker.h"
|
#include "poker/poker.h"
|
||||||
#include "poker/card.h"
|
#include "poker/card.h"
|
||||||
#include "conversation/fade.h"
|
#include "conversation/fade.h"
|
||||||
@@ -19,7 +17,7 @@
|
|||||||
#include "conversation/queue.h"
|
#include "conversation/queue.h"
|
||||||
#include "conversation/textbox.h"
|
#include "conversation/textbox.h"
|
||||||
#include "conversation/questionbox.h"
|
#include "conversation/questionbox.h"
|
||||||
|
#include "interrupts.h"
|
||||||
#include "sprites/spritecards.h"
|
#include "sprites/spritecards.h"
|
||||||
|
|
||||||
#define GB_BACKGROUND_COLUMNS 0x20
|
#define GB_BACKGROUND_COLUMNS 0x20
|
||||||
|
Reference in New Issue
Block a user