Path: blob/master/libsnes/bsnes/target-libsnes/libsnes.hpp
2 views
#ifndef LIBSNES_HPP1#define LIBSNES_HPP23#include <stdint.h>4#include <stdlib.h>56#if defined(LIBSNES_IMPORT)7#define LIBSNES_IMPORTDECL __declspec(dllimport)8#elif defined(LIBSNES_EXPORT)9#define LIBSNES_IMPORTDECL __declspec(dllexport)10#else11#define LIBSNES_IMPORTDECL12#endif1314#ifdef __cplusplus15extern "C" {16#endif1718#define SNES_PORT_1 019#define SNES_PORT_2 12021#define SNES_DEVICE_NONE 022#define SNES_DEVICE_JOYPAD 123#define SNES_DEVICE_MULTITAP 224#define SNES_DEVICE_MOUSE 325#define SNES_DEVICE_SUPER_SCOPE 426#define SNES_DEVICE_JUSTIFIER 527#define SNES_DEVICE_JUSTIFIERS 628#define SNES_DEVICE_SERIAL_CABLE 72930#define SNES_DEVICE_ID_JOYPAD_B 031#define SNES_DEVICE_ID_JOYPAD_Y 132#define SNES_DEVICE_ID_JOYPAD_SELECT 233#define SNES_DEVICE_ID_JOYPAD_START 334#define SNES_DEVICE_ID_JOYPAD_UP 435#define SNES_DEVICE_ID_JOYPAD_DOWN 536#define SNES_DEVICE_ID_JOYPAD_LEFT 637#define SNES_DEVICE_ID_JOYPAD_RIGHT 738#define SNES_DEVICE_ID_JOYPAD_A 839#define SNES_DEVICE_ID_JOYPAD_X 940#define SNES_DEVICE_ID_JOYPAD_L 1041#define SNES_DEVICE_ID_JOYPAD_R 114243#define SNES_DEVICE_ID_MOUSE_X 044#define SNES_DEVICE_ID_MOUSE_Y 145#define SNES_DEVICE_ID_MOUSE_LEFT 246#define SNES_DEVICE_ID_MOUSE_RIGHT 34748#define SNES_DEVICE_ID_SUPER_SCOPE_X 049#define SNES_DEVICE_ID_SUPER_SCOPE_Y 150#define SNES_DEVICE_ID_SUPER_SCOPE_TRIGGER 251#define SNES_DEVICE_ID_SUPER_SCOPE_CURSOR 352#define SNES_DEVICE_ID_SUPER_SCOPE_TURBO 453#define SNES_DEVICE_ID_SUPER_SCOPE_PAUSE 55455#define SNES_DEVICE_ID_JUSTIFIER_X 056#define SNES_DEVICE_ID_JUSTIFIER_Y 157#define SNES_DEVICE_ID_JUSTIFIER_TRIGGER 258#define SNES_DEVICE_ID_JUSTIFIER_START 35960#define SNES_REGION_NTSC 061#define SNES_REGION_PAL 16263#define SNES_MEMORY_CARTRIDGE_RAM 064#define SNES_MEMORY_CARTRIDGE_RTC 165#define SNES_MEMORY_BSX_RAM 266#define SNES_MEMORY_BSX_PRAM 367#define SNES_MEMORY_SUFAMI_TURBO_A_RAM 468#define SNES_MEMORY_SUFAMI_TURBO_B_RAM 569#define SNES_MEMORY_GAME_BOY_CARTRAM 670#define SNES_MEMORY_GAME_BOY_RTC 771#define SNES_MEMORY_GAME_BOY_WRAM 872#define SNES_MEMORY_GAME_BOY_HRAM 97374#define SNES_MEMORY_WRAM 10075#define SNES_MEMORY_APURAM 10176#define SNES_MEMORY_VRAM 10277#define SNES_MEMORY_OAM 10378#define SNES_MEMORY_CGRAM 1047980#define SNES_MEMORY_CARTRIDGE_ROM 1058182#define SNES_MEMORY_SYSBUS 20083#define SNES_MEMORY_LOGICAL_REGS 2018485typedef void (*snes_video_refresh_t)(const uint32_t *data, unsigned width, unsigned height);86typedef void (*snes_audio_sample_t)(uint16_t left, uint16_t right);87typedef void (*snes_input_poll_t)(void);88typedef int16_t (*snes_input_state_t)(unsigned port, unsigned device, unsigned index, unsigned id);89typedef void (*snes_input_notify_t)(int index);90typedef void (*snes_trace_t)(const char *msg);91typedef void* (*snes_allocSharedMemory_t)(const char* memtype, size_t amt);92typedef void (*snes_freeSharedMemory_t)(void* ptr);9394const char* snes_library_id(void);95unsigned snes_library_revision_major(void);96unsigned snes_library_revision_minor(void);9798void snes_set_video_refresh(snes_video_refresh_t);99void snes_set_audio_sample(snes_audio_sample_t);100void snes_set_input_poll(snes_input_poll_t);101void snes_set_input_state(snes_input_state_t);102void snes_set_input_notify(snes_input_notify_t);103104void snes_set_allocSharedMemory(snes_allocSharedMemory_t);105void snes_set_freeSharedMemory(snes_freeSharedMemory_t);106107void snes_set_controller_port_device(bool port, unsigned device);108void snes_set_cartridge_basename(const char *basename);109110void snes_init(void);111void snes_term(void);112void snes_power(void);113void snes_reset(void);114void snes_run(void);115116unsigned snes_serialize_size(void);117bool snes_serialize(uint8_t *data, unsigned size);118bool snes_unserialize(const uint8_t *data, unsigned size);119120void snes_cheat_reset(void);121void snes_cheat_set(unsigned index, bool enable, const char *code);122123bool snes_load_cartridge_normal(124const char *rom_xml, const uint8_t *rom_data, unsigned rom_size125);126127bool snes_load_cartridge_bsx_slotted(128const char *rom_xml, const uint8_t *rom_data, unsigned rom_size,129const char *bsx_xml, const uint8_t *bsx_data, unsigned bsx_size130);131132bool snes_load_cartridge_bsx(133const char *rom_xml, const uint8_t *rom_data, unsigned rom_size,134const char *bsx_xml, const uint8_t *bsx_data, unsigned bsx_size135);136137bool snes_load_cartridge_sufami_turbo(138const char *rom_xml, const uint8_t *rom_data, unsigned rom_size,139const char *sta_xml, const uint8_t *sta_data, unsigned sta_size,140const char *stb_xml, const uint8_t *stb_data, unsigned stb_size141);142143bool snes_load_cartridge_super_game_boy(144const char *rom_xml, const uint8_t *rom_data, unsigned rom_size,145const char *dmg_xml, const uint8_t *dmg_data, unsigned dmg_size146);147148void snes_unload_cartridge(void);149150bool snes_get_region(void);151char snes_get_mapper(void);152uint8_t* snes_get_memory_data(unsigned id);153const char* snes_get_memory_id_name(unsigned id);154unsigned snes_get_memory_size(unsigned id);155156//zeromus additions157bool snes_check_cartridge(const uint8_t *rom_data, unsigned rom_size);158void snes_set_layer_enable(int layer, int priority, bool enable);159typedef void (*snes_scanlineStart_t)(int);160void snes_set_scanlineStart(snes_scanlineStart_t);161void snes_set_backdropColor(int color);162//returns -1 if no messages, messagelength if there is one163int snes_poll_message();164//give us a buffer of messagelength and we'll dequeue a message into it. you better take care of the null pointer165void snes_dequeue_message(char* buffer);166typedef const char* (*snes_path_request_t)(int slot, const char* hint);167void snes_set_path_request(snes_path_request_t path_request);168169void snes_set_color_lut(uint32_t * colors);170171void snes_set_trace_callback(void (*callback)(const char *));172173// system bus implementation174uint8_t bus_read(unsigned addr);175void bus_write(unsigned addr, uint8_t val);176177//$2105178#define SNES_REG_BG_MODE 0179#define SNES_REG_BG3_PRIORITY 1180#define SNES_REG_BG1_TILESIZE 2181#define SNES_REG_BG2_TILESIZE 3182#define SNES_REG_BG3_TILESIZE 4183#define SNES_REG_BG4_TILESIZE 5184//$2107185#define SNES_REG_BG1_SCADDR 10186#define SNES_REG_BG1_SCSIZE 11187//$2108188#define SNES_REG_BG2_SCADDR 12189#define SNES_REG_BG2_SCSIZE 13190//$2109191#define SNES_REG_BG3_SCADDR 14192#define SNES_REG_BG3_SCSIZE 15193//$210A194#define SNES_REG_BG4_SCADDR 16195#define SNES_REG_BG4_SCSIZE 17196//$210B197#define SNES_REG_BG1_TDADDR 20198#define SNES_REG_BG2_TDADDR 21199//$210C200#define SNES_REG_BG3_TDADDR 22201#define SNES_REG_BG4_TDADDR 23202//$2133 SETINI203#define SNES_REG_SETINI_MODE7_EXTBG 30204#define SNES_REG_SETINI_HIRES 31205#define SNES_REG_SETINI_OVERSCAN 32206#define SNES_REG_SETINI_OBJ_INTERLACE 33207#define SNES_REG_SETINI_SCREEN_INTERLACE 34208//$2130 CGWSEL209#define SNES_REG_CGWSEL_COLORMASK 40210#define SNES_REG_CGWSEL_COLORSUBMASK 41211#define SNES_REG_CGWSEL_ADDSUBMODE 42212#define SNES_REG_CGWSEL_DIRECTCOLOR 43213//$2101 OBSEL214#define SNES_REG_OBSEL_NAMEBASE 50215#define SNES_REG_OBSEL_NAMESEL 51216#define SNES_REG_OBSEL_SIZE 52217//$2131 CGADSUB218#define SNES_REG_CGADSUB_MODE 60219#define SNES_REG_CGADSUB_HALF 61220#define SNES_REG_CGADSUB_BG4 62221#define SNES_REG_CGADSUB_BG3 63222#define SNES_REG_CGADSUB_BG2 64223#define SNES_REG_CGADSUB_BG1 65224#define SNES_REG_CGADSUB_OBJ 66225#define SNES_REG_CGADSUB_BACKDROP 67226//$212C TM227#define SNES_REG_TM_BG1 70228#define SNES_REG_TM_BG2 71229#define SNES_REG_TM_BG3 72230#define SNES_REG_TM_BG4 73231#define SNES_REG_TM_OBJ 74232//$212D TM233#define SNES_REG_TS_BG1 80234#define SNES_REG_TS_BG2 81235#define SNES_REG_TS_BG3 82236#define SNES_REG_TS_BG4 83237#define SNES_REG_TS_OBJ 84238//Mode7 regs239#define SNES_REG_M7SEL_REPEAT 90240#define SNES_REG_M7SEL_HFLIP 91241#define SNES_REG_M7SEL_VFLIP 92242#define SNES_REG_M7A 93243#define SNES_REG_M7B 94244#define SNES_REG_M7C 95245#define SNES_REG_M7D 96246#define SNES_REG_M7X 97247#define SNES_REG_M7Y 98248//BG scroll regs249#define SNES_REG_BG1HOFS 100250#define SNES_REG_BG1VOFS 101251#define SNES_REG_BG2HOFS 102252#define SNES_REG_BG2VOFS 103253#define SNES_REG_BG3HOFS 104254#define SNES_REG_BG3VOFS 105255#define SNES_REG_BG4HOFS 106256#define SNES_REG_BG4VOFS 107257#define SNES_REG_M7HOFS 108258#define SNES_REG_M7VOFS 109259260261int snes_peek_logical_register(int reg);262263#ifdef __cplusplus264}265#endif266267#endif268269270