#ifndef PLAY96_H
#define PLAY96_H
#include <stddef.h>
#include <stdint.h>
#ifdef _WIN32
#ifdef PLAY96_BUILD
#define PLAY96_API __declspec(dllexport)
#else
#define PLAY96_API __declspec(dllimport)
#endif
#else
#define PLAY96_API
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct play96_session play96_session;
typedef struct play96_color {
uint8_t red;
uint8_t green;
uint8_t blue;
uint8_t alpha;
} play96_color;
PLAY96_API const char* play96_create(const char* core_path, const char* cartridge_path, play96_session** out_session);
PLAY96_API void play96_destroy(play96_session* session);
PLAY96_API const char* play96_run_frame(play96_session* session);
PLAY96_API const char* play96_run_frames(play96_session* session, size_t frames);
PLAY96_API const char* play96_set_button(play96_session* session, unsigned port, unsigned button, int pressed);
PLAY96_API const char* play96_clear_buttons(play96_session* session, unsigned port);
PLAY96_API unsigned play96_framebuffer_width(const play96_session* session);
PLAY96_API unsigned play96_framebuffer_height(const play96_session* session);
PLAY96_API uint32_t play96_pixel_xrgb(const play96_session* session, unsigned x, unsigned y);
PLAY96_API const char* play96_assert_pixel(const play96_session* session, unsigned x, unsigned y, play96_color expected);
PLAY96_API const char* play96_assert_pixel_xrgb(const play96_session* session, unsigned x, unsigned y, uint32_t expected);
PLAY96_API const char* play96_save_state(play96_session* session, const char* path);
PLAY96_API const char* play96_load_state(play96_session* session, const char* path);
PLAY96_API const char* play96_write_png(const play96_session* session, const char* path);
PLAY96_API const char* play96_last_error(const play96_session* session);
#ifdef __cplusplus
}
#endif
#endif