Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions include/apu.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef APU_H
#define APU_H

#include "config.h"

void apu_init(void);
void apu_cleanup(void);
void apu_tick(void); // CALLED ONCE PER M-CYCLE (4 T-CYCLES)
u8 apu_read(u16 addr);
void apu_write(u16 addr, u8 val);

#endif
3 changes: 3 additions & 0 deletions include/cart.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ bool load_bootrom(const char* bootrom);
bool save_battery(void);
bool load_battery(void);

// FREES ROM/RAM AND PERSISTS BATTERY-BACKED SAVE
void cart_cleanup(void);

// GETTERS/SETTERS
// get_cart_mode(void);

Expand Down
36 changes: 34 additions & 2 deletions include/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <SDL2/SDL_keycode.h>

// CORE TYPES
typedef uint8_t u8;
typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;
typedef uint64_t u64;
typedef int8_t i8;
typedef int8_t i8;
typedef int16_t i16;
typedef int32_t i32;

// EMULATOR SETTINGS
#define EMU_TITLE "GBEmu"
Expand All @@ -22,4 +25,33 @@ typedef int8_t i8;
#define EMU_WIDTH (SCREEN_WIDTH * WINDOW_MULTI)
#define EMU_HEIGHT (SCREEN_HEIGHT * WINDOW_MULTI)

// LOGGING
#define LOG_TO_FILE 0 // 1 = MIRROR LOGS INTO logs/<component>.log
#define LOG_TO_STDOUT 0 // 1 = ECHO LOGS TO STDOUT
// !VERY EXPENSIVE, FOR TEST-LOG DIFFING ONLY!
#define LOG_VERBOSE_CPU 0

// DEBUG VIEWS
#define DEBUG_WINDOW 0 // 1 = OPEN SECOND SDL WINDOW WITH TILE ATLAS

// INPUT BINDINGS
// NOTE: EDIT BINDS HERE, USE SDLK_UNKNOWN TO LEAVE SLOT UNASSIGNED
#define KEY_GB_RIGHT_PRI SDLK_RIGHT
#define KEY_GB_RIGHT_ALT SDLK_d
#define KEY_GB_LEFT_PRI SDLK_LEFT
#define KEY_GB_LEFT_ALT SDLK_a
#define KEY_GB_UP_PRI SDLK_UP
#define KEY_GB_UP_ALT SDLK_w
#define KEY_GB_DOWN_PRI SDLK_DOWN
#define KEY_GB_DOWN_ALT SDLK_s
#define KEY_GB_A_PRI SDLK_z
#define KEY_GB_A_ALT SDLK_j
#define KEY_GB_B_PRI SDLK_x
#define KEY_GB_B_ALT SDLK_k
#define KEY_GB_SELECT_PRI SDLK_RSHIFT
#define KEY_GB_SELECT_ALT SDLK_BACKSPACE
#define KEY_GB_START_PRI SDLK_RETURN
#define KEY_GB_START_ALT SDLK_UNKNOWN
#define KEY_GB_QUIT SDLK_ESCAPE

#endif
10 changes: 5 additions & 5 deletions include/graphics.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,6 @@
#include "gameboy.h"


// SCREEN CONSTANTS
#define SCREEN_WIDTH 160
#define SCREEN_HEIGHT 144
#define VRAM_BANK_SIZE 0x2000
#define OAM_SIZE 0xA0
#define TILES_PER_LINE 32
Expand Down Expand Up @@ -43,9 +40,9 @@ typedef struct {
bool auto_increment; // PALETTE AUTO INCREMENT
} cgb_graphics;

typedef struct {
typedef struct __attribute__((packed)) {
u8 y;
u8 x;
u8 x;
u8 tile;
u8 flags;
} sprite;
Expand Down Expand Up @@ -85,6 +82,9 @@ typedef struct {
u32 frame_buffer[SCREEN_WIDTH * SCREEN_HEIGHT];
u32 bg_colors[4];
u32 sprite_colors[2][4];

// PARALLEL BG INDEX BUFFER (LAYERING SPRITES)
u8 bg_index_line[SCREEN_WIDTH];

// SDL
SDL_Window* window;
Expand Down
2 changes: 1 addition & 1 deletion include/interrupt.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ typedef enum {

void interrupt_init();
void interrupt_req(interrupts i);
void handle_interrupts();
u8 handle_interrupts(); // RETURNS T-CYCLES CONSUMED BY ISR DISPATCH (0 OR 20)
u8 get_interrupt_flags();
void set_interrupt_flags(u8 flags);
u8 get_interrupt_enable();
Expand Down
26 changes: 26 additions & 0 deletions include/joypad.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#ifndef JOYPAD_H
#define JOYPAD_H

#include "config.h"

// LOGICAL BUTTON BITS
typedef enum {
BTN_RIGHT = 0x01,
BTN_LEFT = 0x02,
BTN_UP = 0x04,
BTN_DOWN = 0x08,
BTN_A = 0x10,
BTN_B = 0x20,
BTN_SELECT = 0x40,
BTN_START = 0x80,
} gb_button;

void joypad_init(void);
void joypad_press(gb_button b);
void joypad_release(gb_button b);

// P1 REGISTER (FF00) I/O FROM THE BUS
u8 joypad_read(void);
void joypad_write(u8 val);

#endif
13 changes: 13 additions & 0 deletions include/logger.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define LOGGER_H

#include <stdbool.h>
#include "config.h"

// EACH GETS ITS OWN FILE, FIRST ARG OF LOG MACROS IS ONE OF THESE
typedef enum {
Expand Down Expand Up @@ -32,12 +33,24 @@ void logger_init(LogLevel global_level);
void logger_cleanup(void);

// LOGGING MACROS - USE THESE
#if LOG_TO_FILE || LOG_TO_STDOUT
#define LOG_ERROR(component, ...) log_message(component, LOG_ERROR, __VA_ARGS__)
#define LOG_WARN(component, ...) log_message(component, LOG_WARN, __VA_ARGS__)
#define LOG_INFO(component, ...) log_message(component, LOG_INFO, __VA_ARGS__)
#define LOG_DEBUG(component, ...) log_message(component, LOG_DEBUG, __VA_ARGS__)
#define LOG_TRACE(component, ...) log_message(component, LOG_TRACE, __VA_ARGS__)
#else
#define LOG_ERROR(component, ...) ((void)0)
#define LOG_WARN(component, ...) ((void)0)
#define LOG_INFO(component, ...) ((void)0)
#define LOG_DEBUG(component, ...) ((void)0)
#define LOG_TRACE(component, ...) ((void)0)
#endif
#if LOG_VERBOSE_CPU
#define LOG_TEST(...) log_message(LOG_TESTS, LOG_TEST, __VA_ARGS__)
#else
#define LOG_TEST(...) ((void)0)
#endif

// DONT USE THIS
void log_message(LogComponent component, LogLevel level, const char* fmt, ...);
Expand Down
Loading
Loading