SameBoy/Core/sgb.h

62 lines
1.5 KiB
C
Raw Normal View History

#ifndef sgb_h
#define sgb_h
2018-11-15 23:53:01 +00:00
#include "gb_struct_def.h"
#include <stdint.h>
#include <stdbool.h>
2018-11-16 15:41:23 +00:00
typedef struct GB_sgb_s GB_sgb_t;
2018-11-24 11:21:00 +00:00
#ifdef GB_INTERNAL
2018-11-16 15:41:23 +00:00
struct GB_sgb_s {
2018-11-15 23:53:01 +00:00
uint8_t command[16 * 7];
uint16_t command_write_index;
bool ready_for_pulse;
bool ready_for_write;
bool ready_for_stop;
bool disable_commands;
/* Screen buffer */
2018-11-16 10:42:52 +00:00
uint8_t screen_buffer[160 * 144]; // Live image from the Game Boy
uint8_t effective_screen_buffer[160 * 144]; // Image actually rendered to the screen
2018-11-15 23:53:01 +00:00
/* Multiplayer Input */
uint8_t player_count, current_player;
2018-11-16 10:42:52 +00:00
/* Mask */
uint8_t mask_mode;
2018-11-16 14:04:40 +00:00
2018-11-16 17:11:21 +00:00
/* Data Transfer */
2018-11-16 22:44:18 +00:00
uint8_t vram_transfer_countdown, transfer_dest;
2018-11-16 17:11:21 +00:00
/* Border */
2018-11-16 15:36:21 +00:00
struct {
uint8_t tiles[0x100 * 8 * 8]; /* High nibble not used*/
union {
struct {
uint16_t map[32 * 32];
uint16_t palette[16 * 4];
};
uint16_t raw_data[0x440];
2018-11-16 14:04:40 +00:00
};
2018-11-16 15:36:21 +00:00
} border, pending_border;
uint8_t border_animation;
2018-11-16 17:11:21 +00:00
/* Colorization */
uint16_t effective_palettes[4 * 4];
uint16_t ram_palettes[4 * 512];
2018-11-16 20:05:35 +00:00
uint8_t attribute_map[20 * 18];
2018-11-16 22:44:18 +00:00
uint8_t attribute_files[0xFE0];
2018-11-24 11:21:00 +00:00
/* Intro */
2018-12-01 11:39:43 +00:00
int16_t intro_animation;
2018-11-16 15:41:23 +00:00
};
2018-11-15 23:53:01 +00:00
void GB_sgb_write(GB_gameboy_t *gb, uint8_t value);
void GB_sgb_render(GB_gameboy_t *gb);
2018-11-16 17:11:21 +00:00
void GB_sgb_load_default_data(GB_gameboy_t *gb);
2018-11-24 11:21:00 +00:00
bool GB_sgb_render_jingle(GB_gameboy_t *gb, GB_sample_t *dest, size_t count);
2018-11-15 23:53:01 +00:00
#endif
#endif