From 42a4c1d60ee4987582c6ba4b045d2f8dd621efb8 Mon Sep 17 00:00:00 2001 From: byuu Date: Mon, 19 Apr 2010 17:37:14 +0000 Subject: [PATCH] Update to bsnes v064r03 release. Some changes to libsnes. Really hoping the API will be stable from this point out ... --- src/snes/libsnes/libsnes.cpp | 46 ++------ src/snes/libsnes/libsnes.hpp | 31 +++--- src/snes/snes.hpp | 2 +- src/ui_python/bsnes-gtk.py | 200 ----------------------------------- src/ui_python/bsnes-qt.py | 135 ----------------------- src/ui_python/libsnes.py | 157 --------------------------- src/ui_python/libsnes.pyc | Bin 5867 -> 0 bytes 7 files changed, 26 insertions(+), 545 deletions(-) delete mode 100644 src/ui_python/bsnes-gtk.py delete mode 100644 src/ui_python/bsnes-qt.py delete mode 100644 src/ui_python/libsnes.py delete mode 100644 src/ui_python/libsnes.pyc diff --git a/src/snes/libsnes/libsnes.cpp b/src/snes/libsnes/libsnes.cpp index 229c3132..3292a908 100644 --- a/src/snes/libsnes/libsnes.cpp +++ b/src/snes/libsnes/libsnes.cpp @@ -33,10 +33,14 @@ struct Interface : public SNES::Interface { static Interface interface; -unsigned snes_library_revision(void) { +unsigned snes_library_revision_major(void) { return 1; } +unsigned snes_library_revision_minor(void) { + return 0; +} + void snes_set_video_refresh(snes_video_refresh_t video_refresh) { interface.pvideo_refresh = video_refresh; } @@ -79,10 +83,6 @@ void snes_run(void) { SNES::system.run(); } -void snes_unload(void) { - SNES::cartridge.unload(); -} - unsigned snes_serialize_size(void) { return SNES::system.serialize_size(); } @@ -116,7 +116,7 @@ void snes_load_cartridge_normal( ) { snes_cheat_reset(); SNES::memory::cartrom.copy(rom_data, rom_size); - string xmlrom = rom_xml ? string(rom_xml) : snes_information(rom_data, rom_size).xml_memory_map; + string xmlrom = (rom_xml && *rom_xml) ? string(rom_xml) : snes_information(rom_data, rom_size).xml_memory_map; SNES::cartridge.load(SNES::Cartridge::Mode::Normal, { xmlrom }); SNES::system.power(); } @@ -176,6 +176,10 @@ void snes_load_cartridge_super_game_boy( SNES::system.power(); } +void snes_unload_cartridge(void) { + SNES::cartridge.unload(); +} + bool snes_get_region(void) { return SNES::system.region() == SNES::System::Region::NTSC ? 0 : 1; } @@ -207,33 +211,3 @@ unsigned snes_get_memory_size(unsigned id) { } return 0; } - -static uint32_t colortable[32768]; - -void snes_blit_set_colortable(const uint32_t *new_colortable) { - memcpy(colortable, new_colortable, 32768 * sizeof(uint32_t)); -} - -void snes_blit( - uint32_t *output, unsigned output_pitch, unsigned output_width, unsigned output_height, - const uint16_t *input, unsigned input_pitch, unsigned input_width, unsigned input_height -) { - output_pitch >>= 2; - input_pitch >>= 1; - - double step_x = (double)input_width / (double)output_width; - double step_y = (double)input_height / (double)output_height; - - double pos_y = 0; - for(unsigned y = 0; y < output_height; y++) { - uint32_t *o = output + y * output_pitch; - const uint16_t *i = input + (unsigned)(pos_y + 0.5) * input_pitch; - double pos_x = 0; - for(unsigned x = 0; x < output_width; x++) { - unsigned pixel = i[(unsigned)(pos_x + 0.5)]; - *o++ = colortable[pixel]; - pos_x += step_x; - } - pos_y += step_y; - } -} diff --git a/src/snes/libsnes/libsnes.hpp b/src/snes/libsnes/libsnes.hpp index 7666e184..edc90c69 100644 --- a/src/snes/libsnes/libsnes.hpp +++ b/src/snes/libsnes/libsnes.hpp @@ -7,14 +7,8 @@ extern "C" { #endif -#define SNES_MEMORY_CARTRIDGE_RAM 0 -#define SNES_MEMORY_CARTRIDGE_RTC 1 -#define SNES_MEMORY_BSX_RAM 2 -#define SNES_MEMORY_BSX_PRAM 3 -#define SNES_MEMORY_SUFAMI_TURBO_A_RAM 4 -#define SNES_MEMORY_SUFAMI_TURBO_B_RAM 5 -#define SNES_MEMORY_GAME_BOY_RAM 6 -#define SNES_MEMORY_GAME_BOY_RTC 7 +#define SNES_PORT_1 0 +#define SNES_PORT_2 1 #define SNES_DEVICE_NONE 0 #define SNES_DEVICE_JOYPAD 1 @@ -54,12 +48,22 @@ extern "C" { #define SNES_DEVICE_ID_JUSTIFIER_TRIGGER 2 #define SNES_DEVICE_ID_JUSTIFIER_START 3 +#define SNES_MEMORY_CARTRIDGE_RAM 0 +#define SNES_MEMORY_CARTRIDGE_RTC 1 +#define SNES_MEMORY_BSX_RAM 2 +#define SNES_MEMORY_BSX_PRAM 3 +#define SNES_MEMORY_SUFAMI_TURBO_A_RAM 4 +#define SNES_MEMORY_SUFAMI_TURBO_B_RAM 5 +#define SNES_MEMORY_GAME_BOY_RAM 6 +#define SNES_MEMORY_GAME_BOY_RTC 7 + typedef void (*snes_video_refresh_t)(const uint16_t *data, unsigned width, unsigned height); typedef void (*snes_audio_sample_t)(uint16_t left, uint16_t right); typedef void (*snes_input_poll_t)(void); typedef int16_t (*snes_input_state_t)(bool port, unsigned device, unsigned index, unsigned id); -unsigned snes_library_revision(void); +unsigned snes_library_revision_major(void); +unsigned snes_library_revision_minor(void); void snes_set_video_refresh(snes_video_refresh_t); void snes_set_audio_sample(snes_audio_sample_t); @@ -73,7 +77,6 @@ void snes_term(void); void snes_power(void); void snes_reset(void); void snes_run(void); -void snes_unload(void); unsigned snes_serialize_size(void); bool snes_serialize(uint8_t *data, unsigned size); @@ -107,16 +110,12 @@ void snes_load_cartridge_super_game_boy( const char *dmg_xml, const uint8_t *dmg_data, unsigned dmg_size ); +void snes_unload_cartridge(void); + bool snes_get_region(void); uint8_t* snes_get_memory_data(unsigned id); unsigned snes_get_memory_size(unsigned id); -void snes_blit_set_colortable(const uint32_t *colortable); -void snes_blit( - uint32_t *output, unsigned output_pitch, unsigned output_width, unsigned output_height, - const uint16_t *input, unsigned input_pitch, unsigned input_width, unsigned input_height -); - #ifdef __cplusplus } #endif diff --git a/src/snes/snes.hpp b/src/snes/snes.hpp index c2c88391..2d255c3c 100644 --- a/src/snes/snes.hpp +++ b/src/snes/snes.hpp @@ -1,4 +1,4 @@ -static const char bsnesVersion[] = "064.02"; +static const char bsnesVersion[] = "064.03"; static const char bsnesTitle[] = "bsnes"; static const unsigned bsnesSerializerVersion = 10; diff --git a/src/ui_python/bsnes-gtk.py b/src/ui_python/bsnes-gtk.py deleted file mode 100644 index 98c9e553..00000000 --- a/src/ui_python/bsnes-gtk.py +++ /dev/null @@ -1,200 +0,0 @@ -#!/usr/bin/python -import sys, time, array, ctypes, os, ao -import pygtk -pygtk.require("2.0") -import gtk, gobject -from libsnes import SNES - -snes = SNES() - -class MainWindow(gtk.Window): - def __init__(self): - gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) - - self.keystate_up = 0 - self.keystate_down = 0 - self.keystate_left = 0 - self.keystate_right = 0 - self.keystate_a = 0 - self.keystate_b = 0 - self.keystate_x = 0 - self.keystate_y = 0 - self.keystate_l = 0 - self.keystate_r = 0 - self.keystate_select = 0 - self.keystate_start = 0 - - self.set_title("bsnes/PyGTK") - self.set_position(gtk.WIN_POS_CENTER) - self.set_resizable(False) - self.connect("key-press-event", self.key_press) - self.connect("key-release-event", self.key_release) - self.connect("destroy", self.destroy) - - self.box = gtk.VBox() - self.add(self.box) - - self.menu = gtk.MenuBar() - - self.system_menu = gtk.Menu() - self.system_menuitem = gtk.MenuItem("System") - self.system_menuitem.set_submenu(self.system_menu) - - self.system_load = gtk.MenuItem("Load Cartridge") - self.system_load.connect("activate", self.load_cartridge) - self.system_menu.append(self.system_load) - - self.system_quit = gtk.MenuItem("Quit") - self.system_quit.connect("activate", gtk.main_quit) - self.system_menu.append(self.system_quit) - - self.settings_menu = gtk.Menu() - self.settings_menuitem = gtk.MenuItem("Settings") - self.settings_menuitem.set_submenu(self.settings_menu) - - self.tools_menu = gtk.Menu() - self.tools_menuitem = gtk.MenuItem("Tools") - self.tools_menuitem.set_submenu(self.tools_menu) - - self.help_menu = gtk.Menu() - self.help_menuitem = gtk.MenuItem("Help") - self.help_menuitem.set_submenu(self.help_menu) - - self.menu.append(self.system_menuitem) - self.menu.append(self.settings_menuitem) - self.menu.append(self.tools_menuitem) - self.menu.append(self.help_menuitem) - self.box.pack_start(self.menu, False, False, 0) - - self.canvas = gtk.DrawingArea() - self.canvas.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(0, 0, 0)) - self.canvas.set_size_request(512, 448) - self.box.pack_start(self.canvas) - - self.videobuffer = array.array('B', [0] * 512 * 448 * 4) - self.audiobuffer = array.array('H', [0] * 256 * 2) - self.audiolength = 0 - self.audio = ao.AudioDevice("alsa", bits = 16, rate = 32000, channels = 2) - - self.show_all() - - snes.init() - snes.set_video_refresh(self.video_refresh) - snes.set_audio_sample(self.audio_sample) - snes.set_input_poll(self.input_poll) - snes.set_input_state(self.input_state) - - colortable = array.array('I', [0] * 32 * 32 * 32) - offset = 0 - for r in xrange(32): - for g in xrange(32): - for b in xrange(32): - colortable[offset] = (r << 19) + (g << 11) + (b << 3) - offset += 1 - snes.set_colortable(colortable) - - if len(sys.argv) == 2: - snes.load_cartridge_normal(sys.argv[1]) - - def key_press(self, widget, event): - if event.keyval == 65362: self.keystate_up = 1 - if event.keyval == 65364: self.keystate_down = 1 - if event.keyval == 65361: self.keystate_left = 1 - if event.keyval == 65363: self.keystate_right = 1 - if event.keyval == 122: self.keystate_b = 1 - if event.keyval == 120: self.keystate_a = 1 - if event.keyval == 97: self.keystate_y = 1 - if event.keyval == 115: self.keystate_x = 1 - if event.keyval == 100: self.keystate_l = 1 - if event.keyval == 99: self.keystate_r = 1 - if event.keyval == 39: self.keystate_select = 1 - if event.keyval == 65293: self.keystate_start = 1 - - def key_release(self, widget, event): - if event.keyval == 65362: self.keystate_up = 0 - if event.keyval == 65364: self.keystate_down = 0 - if event.keyval == 65361: self.keystate_left = 0 - if event.keyval == 65363: self.keystate_right = 0 - if event.keyval == 122: self.keystate_b = 0 - if event.keyval == 120: self.keystate_a = 0 - if event.keyval == 97: self.keystate_y = 0 - if event.keyval == 115: self.keystate_x = 0 - if event.keyval == 100: self.keystate_l = 0 - if event.keyval == 99: self.keystate_r = 0 - if event.keyval == 39: self.keystate_select = 0 - if event.keyval == 65293: self.keystate_start = 0 - - def destroy(self, widget, data=None): - snes.term() - gtk.main_quit() - - def load_cartridge(self, widget): - dialog = gtk.FileChooserDialog("Load Cartridge", None, gtk.FILE_CHOOSER_ACTION_OPEN, - (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) - dialog.set_default_response(gtk.RESPONSE_OK) - - filter = gtk.FileFilter() - filter.set_name("SNES cartridges") - filter.add_pattern("*.sfc") - filter.add_pattern("*.smc") - filter.add_pattern("*.swc") - filter.add_pattern("*.fig") - dialog.add_filter(filter) - - response = dialog.run() - if response == gtk.RESPONSE_OK: - snes.unload() - snes.load_cartridge_normal(dialog.get_filename()) - - dialog.destroy() - - def run(self): - if snes.loaded == True: - snes.run() - - def video_refresh(self, data, width, height): - # ignore overscan region to guarantee 1:1 pixel scaling - if height == 239: height = 224 - if height == 478: height = 448 - pitch = 2048 - if height >= 448: pitch = 1024 - - drawable = self.canvas.window - gc = self.canvas.get_style().fg_gc[gtk.STATE_NORMAL] - snes.blit(self.videobuffer, 2048, 512, 448, data, pitch, width, height) - drawable.draw_rgb_32_image(gc, 0, 0, 512, 448, gtk.gdk.RGB_DITHER_NONE, self.videobuffer, -1) - - def audio_sample(self, left, right): - self.audiobuffer[self.audiolength] = left; self.audiolength += 1 - self.audiobuffer[self.audiolength] = right; self.audiolength += 1 - if self.audiolength == 256 * 2: - self.audio.play(self.audiobuffer, 256 * 2 * 2) - self.audiolength = 0 - - def input_poll(self): - pass - - def input_state(self, port, device, index, identifier): - if port == 1: return 0 - - if self.keystate_up == 1 and self.keystate_down == 1: self.keystate_down = 0 - if self.keystate_left == 1 and self.keystate_right == 1: self.keystate_right = 0 - - if identifier == 0: return self.keystate_b - if identifier == 1: return self.keystate_y - if identifier == 2: return self.keystate_select - if identifier == 3: return self.keystate_start - if identifier == 4: return self.keystate_up - if identifier == 5: return self.keystate_down - if identifier == 6: return self.keystate_left - if identifier == 7: return self.keystate_right - if identifier == 8: return self.keystate_a - if identifier == 9: return self.keystate_x - if identifier == 10: return self.keystate_l - if identifier == 11: return self.keystate_r - - return 0 - -mainWindow = MainWindow() -timer = gobject.timeout_add(10, lambda: mainWindow.run() or True) -gtk.main() diff --git a/src/ui_python/bsnes-qt.py b/src/ui_python/bsnes-qt.py deleted file mode 100644 index bfb08928..00000000 --- a/src/ui_python/bsnes-qt.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/python -import sys, time, array, ctypes, os, ao -from PyQt4 import QtCore -from PyQt4 import QtGui -from PyQt4 import QtOpenGL -from OpenGL.GL import * -from libsnes import SNES - -snes = SNES() - -class Canvas(QtOpenGL.QGLWidget): - def __init__(self, parent = None): - self.videobuffer = array.array('I', [0] * 512 * 512) - self.colortable = array.array('I', [0] * 32 * 32 * 32) - offset = 0 - for r in xrange(32): - for g in xrange(32): - for b in xrange(32): - self.colortable[offset] = (b << 19) + (g << 11) + (r << 3) - offset += 1 - snes.set_colortable(self.colortable) - - self.rasterWidth = 256 - self.rasterHeight = 224 - - QtOpenGL.QGLWidget.__init__(self, parent) - self.setMinimumSize(512, 448) - - def videoRefresh(self, data, width, height): - pitch = 2048 - if height >= 448: pitch = 1024 - if height == 239: height = 224 - if height == 478: height = 448 - - self.rasterWidth = width - self.rasterHeight = height - - snes.blit(self.videobuffer, 2048, width, height, data, pitch, width, height) - self.update() - - def paintGL(self): - outputWidth = self.width() - outputHeight = self.height() - - textureWidth = 512 - textureHeight = 512 - - glMatrixMode(GL_PROJECTION) - glLoadIdentity() - glOrtho(0, outputWidth, 0, outputHeight, -1.0, 1.0) - glViewport(0, 0, outputWidth, outputHeight) - - glMatrixMode(GL_MODELVIEW) - glLoadIdentity() - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, self.rasterWidth, self.rasterHeight, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, self.videobuffer.tostring()) - - w = 1.0 * self.rasterWidth / textureWidth - h = 1.0 * self.rasterHeight / textureHeight - u = outputWidth - v = outputHeight - - glBegin(GL_TRIANGLE_STRIP) - glTexCoord2f(0, 0); glVertex3i(0, v, 0) - glTexCoord2f(w, 0); glVertex3i(u, v, 0) - glTexCoord2f(0, h); glVertex3i(0, 0, 0) - glTexCoord2f(w, h); glVertex3i(u, 0, 0) - glEnd() - - def initializeGL(self): - glDisable(GL_ALPHA_TEST) - glDisable(GL_BLEND) - glDisable(GL_DEPTH_TEST) - glDisable(GL_POLYGON_SMOOTH) - glDisable(GL_STENCIL_TEST) - glEnable(GL_DITHER) - glEnable(GL_TEXTURE_2D) - glClearColor(0.0, 0.0, 0.0, 0.0) - - glBindTexture(GL_TEXTURE_2D, glGenTextures(1)) - glPixelStorei(GL_UNPACK_ROW_LENGTH, 512) - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER) - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER) - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 512, 512, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, self.videobuffer.tostring()) - -class MainWindow(QtGui.QMainWindow): - def __init__(self, parent = None): - QtGui.QMainWindow.__init__(self, parent) - self.setWindowTitle("bsnes/PyQt") - - self.menu_system = self.menuBar().addMenu("&System") - - self.menu_system_loadCartridge = QtGui.QAction("Load Cartridge ...", self) - self.connect(self.menu_system_loadCartridge, QtCore.SIGNAL('triggered()'), self.loadCartridgeEvent) - self.menu_system.addAction(self.menu_system_loadCartridge) - - self.menu_system_quit = QtGui.QAction("Quit", self) - self.connect(self.menu_system_quit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()')) - self.menu_system.addAction(self.menu_system_quit) - - self.menu_settings = self.menuBar().addMenu("S&ettings") - self.menu_tools = self.menuBar().addMenu("&Tools") - self.menu_help = self.menuBar().addMenu("&Help") - - self.canvas = Canvas() - self.setCentralWidget(self.canvas) - - self.resize(0, 0) - self.show() - - self.audio = ao.AudioDevice("alsa", bits = 16, rate = 32000, channels = 2) - - snes.init() - snes.set_video_refresh(self.canvas.videoRefresh) - snes.set_audio_sample(self.audioSample) - - if len(sys.argv) == 2: - snes.load_cartridge_normal(sys.argv[1]) - - def audioSample(self, left, right): - self.audio.play(array.array('H', [left, right]), 4) - - def loadCartridgeEvent(self): - filename = QtGui.QFileDialog.getOpenFileName(self, "Load SNES Cartridge", "", "SNES cartridges (*.sfc)") - if len(filename) > 0: - snes.load_cartridge_normal(filename) - -app = QtGui.QApplication(sys.argv) -mainWindow = MainWindow() -while mainWindow.isVisible() == True: - app.processEvents() - if snes.loaded == True: - snes.run() diff --git a/src/ui_python/libsnes.py b/src/ui_python/libsnes.py deleted file mode 100644 index 73d4233f..00000000 --- a/src/ui_python/libsnes.py +++ /dev/null @@ -1,157 +0,0 @@ -import sys, time, array, ctypes, os - -libsnes = ctypes.cdll.LoadLibrary("/usr/local/lib/libsnes.so") - -snes_video_refresh_t = ctypes.CFUNCTYPE(None, ctypes.POINTER(ctypes.c_uint16), ctypes.c_uint, ctypes.c_uint) -snes_set_video_refresh = libsnes.snes_set_video_refresh -snes_set_video_refresh.restype = None -snes_set_video_refresh.argtypes = [snes_video_refresh_t] - -snes_audio_sample_t = ctypes.CFUNCTYPE(None, ctypes.c_uint16, ctypes.c_uint16) -snes_set_audio_sample = libsnes.snes_set_audio_sample -snes_set_audio_sample.restype = None -snes_set_audio_sample.argtypes = [snes_audio_sample_t] - -snes_input_poll_t = ctypes.CFUNCTYPE(None) -snes_set_input_poll = libsnes.snes_set_input_poll -snes_set_input_poll.restype = None -snes_set_input_poll.argtypes = [snes_input_poll_t] - -snes_input_state_t = ctypes.CFUNCTYPE(ctypes.c_int16, ctypes.c_bool, ctypes.c_uint, ctypes.c_uint, ctypes.c_uint) -snes_set_input_state = libsnes.snes_set_input_state -snes_set_input_state.restype = ctypes.c_int16 -snes_set_input_state.argtypes = [snes_input_state_t] - -snes_library_revision = libsnes.snes_library_revision -snes_library_revision.restype = ctypes.c_uint -snes_library_revision.argtypes = [] - -snes_init = libsnes.snes_init -snes_init.restype = None -snes_init.argtypes = [] - -snes_term = libsnes.snes_term -snes_term.restype = None -snes_term.argtypes = [] - -snes_power = libsnes.snes_power -snes_power.restype = None -snes_power.argtypes = [] - -snes_reset = libsnes.snes_reset -snes_reset.restype = None -snes_reset.argtypes = [] - -snes_run = libsnes.snes_run -snes_run.restype = None -snes_run.argtypes = [] - -snes_unload = libsnes.snes_unload -snes_unload.restype = None -snes_unload.argtypes = [] - -snes_serialize_size = libsnes.snes_serialize_size -snes_serialize_size.restype = ctypes.c_uint -snes_serialize_size.argtypes = [] - -snes_serialize = libsnes.snes_serialize -snes_serialize.restype = ctypes.c_bool -snes_serialize.argtypes = [ctypes.POINTER(ctypes.c_uint8), ctypes.c_uint] - -snes_unserialize = libsnes.snes_unserialize -snes_unserialize.restype = ctypes.c_bool -snes_unserialize.argtypes = [ctypes.POINTER(ctypes.c_uint8), ctypes.c_uint] - -snes_cheat_reset = libsnes.snes_cheat_reset -snes_cheat_reset.restype = None -snes_cheat_reset.argtypes = [] - -snes_cheat_set = libsnes.snes_cheat_set -snes_cheat_set.restype = None -snes_cheat_set.argtypes = [ctypes.c_uint, ctypes.c_bool, ctypes.POINTER(ctypes.c_char)] - -snes_load_cartridge_normal = libsnes.snes_load_cartridge_normal -snes_load_cartridge_normal.restype = None -snes_load_cartridge_normal.argtypes = [ctypes.POINTER(ctypes.c_char), ctypes.POINTER(ctypes.c_uint8), ctypes.c_uint] - -snes_get_region = libsnes.snes_get_region -snes_get_region.restype = ctypes.c_bool -snes_get_region.argtypes = [] - -snes_get_memory_data = libsnes.snes_get_memory_data -snes_get_memory_data.restype = ctypes.POINTER(ctypes.c_uint8) -snes_get_memory_data.argtypes = [ctypes.c_uint] - -snes_get_memory_size = libsnes.snes_get_memory_size -snes_get_memory_size.restype = ctypes.c_uint -snes_get_memory_size.argtypes = [ctypes.c_uint] - -snes_blit_set_colortable = libsnes.snes_blit_set_colortable -snes_blit_set_colortable.restype = None -snes_blit_set_colortable.argtypes = [ctypes.POINTER(ctypes.c_uint32)] - -snes_blit = libsnes.snes_blit -snes_blit.restype = None -snes_blit.argtypes = [ctypes.POINTER(ctypes.c_uint32), ctypes.c_uint, ctypes.c_uint, ctypes.c_uint, ctypes.POINTER(ctypes.c_uint16), ctypes.c_uint, ctypes.c_uint, ctypes.c_uint] - -class SNES: - def __init__(self): - self.loaded = False - - def library_revision(self): - return snes_library_revision() - - def set_video_refresh(self, callback): - self.video_refresh = snes_video_refresh_t(callback) - snes_set_video_refresh(self.video_refresh) - - def set_audio_sample(self, callback): - self.audio_sample = snes_audio_sample_t(callback) - snes_set_audio_sample(self.audio_sample) - - def set_input_poll(self, callback): - self.input_poll = snes_input_poll_t(callback) - snes_set_input_poll(self.input_poll) - - def set_input_state(self, callback): - self.input_state = snes_input_state_t(callback) - snes_set_input_state(self.input_state) - - def init(self): - snes_init() - - def term(self): - snes_term() - - def power(self): - snes_power() - - def reset(self): - snes_reset() - - def run(self): - snes_run() - - def unload(self): - snes_unload() - self.loaded = False - - def serialize_size(self): - return snes_serialize_size() - - def load_cartridge_normal(self, filename): - size = os.path.getsize(filename) - fp = open(filename, "rb") - data = fp.read() - snes_load_cartridge_normal(None, ctypes.cast(data, ctypes.POINTER(ctypes.c_uint8)), size) - fp.close() - self.loaded = True - - def get_region(self): - return snes_get_region() - - def set_colortable(self, colortable): - snes_blit_set_colortable(ctypes.cast(colortable.buffer_info()[0], ctypes.POINTER(ctypes.c_uint32))) - - def blit(self, outbuffer, outpitch, outwidth, outheight, inbuffer, inpitch, width, height): - snes_blit(ctypes.cast(outbuffer.buffer_info()[0], ctypes.POINTER(ctypes.c_uint32)), outpitch, outwidth, outheight, inbuffer, inpitch, width, height) diff --git a/src/ui_python/libsnes.pyc b/src/ui_python/libsnes.pyc deleted file mode 100644 index 8d3b79b3db3db8861bb4f17db3dac044da8faad7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5867 zcmb_gUvJyi6+e_@Tef98ah%4E6US+sMM>&t*?^(jvaMK<0!0h2xXvER7lIOLi6|`! zB-PHHGhlFmJq#H3G+@A9_G$Lqud*+&{eI_?qMW!}5X%Y=5AXTI^Y5N}nD73*vh>Y& z|N68i#or3uKN_R=EQv80E;(kr3 zR^*V*AeQ=2+=p+(;bHlrmX-$|E%PIBA1O1;esrD(kCx}L zxR2G^$0dWc_5<|`y94W%b6?zj<=nr3bGm>l+^TwGKU#)Wz;EE#aVh-C^VP%gt^Qz%`jw@r+%tcN`JT?EYP4YpT z4EY?u$9|lJIinOOeh>yq*I;B}eALFeD9Ad%I>%uU`JF82KJBDQl6N$Eohq@jA>(<`Fv>lz3q0d%#hI8%Thz=2ATSe&D-9$mzYf6sc*s-grzc(-eida= zGE^%~9pp<|cm*n6SB_jyETzHarIzkufdO?`+BU3tjYy;`PEff(^YRSXWh2opGP zl!n>B%X4Pt+*W#a8@5@X2&Wd^CRRbC>bm1+-E&MINH-mabV*1q|i zyKE`trNvA;ZP%IJw%U0XDQP{6@|krT78$$Y@2H)7>Y`rwHdf_fdOTCBsPOmiXcbFa zV>L>?4%3;L#nVYO{^7EAq2q?LOCs%3jemScyPA|^ZKdPc9b`OgpzqrYY??H0o<&8y z=l1Z@kEHU*)$@wgr^bzk90&||gQ13*<(0FBRsJWw%QoJHw;u|oT4x&har8~-WdJj? z&vwme)qkd)#dhV56+kbviSYD5P;vZ6m;-bOcvX|UP8?(6SxsI6$H!WOgG>9HRx-$638Ghr`38HHAJ&(Ctz z{P}M_Ie7WPDBknN(J=o|C&^x%V4E?WFVk^oYle}k=9Z%<4u}4+Wm4xr**hz>f1{m@3C;!Hcrk=p zXg>skLc`9rg%;IW94N6ZE}@VB=ZX?SA=x918V(`=(J!HV6PPBy8)GQvdE86lB+dP9 z9GWK}8qWE8f_KM9M`4QL71O-%jtrgHs!4OJ%O4G01Q+W8S@Np)Nq(z0Be)Y7C5nFoZG1B zn2x7Wl=lYZ!`D%O%~|jb!l*yUl@tvNA?{nuYAVCDTLE?&%YDh%a%<9?f8bt3w9RI! zMtB}~rsruoJ?}UP#u(H+Lm@*G3{M8byR3+H4ctCb&azm*5`3eS!}Oen#*s zf=>V{KNNeHPfG(e;^WHR2bgyj>-aT_A94F@;NB!|U#YcSr__mUYI%fi#8CTb>Yvy& zKft4Qq+Srmx)VM_qx{T%foj(){?|ZL`TXPG9z1{f#pf@~KIC5CC{KT)pVoHQ80Ob7 z|EdKu1iPz7-%tD6X$_l{;U+NrQZXE`i$;q+JJHrnlGtpJf!~aV4jAri!`^Og5$q7` z5->n!4x%pM4L_qS9a&xy0J&dA)(3nh$`QpHd@j zQ;qCx$Ki2;Z+ABM3kf_4%+D#yEoD9;z%`39(cnI_#r#W-GTC1Np4HZCkDNvPTD9%s szE<41-oiTJA|QVM7h2Aiv!hakrPQ9{`?^j&*PS)R2^XDBg`d{`3oCq*L;wH)