From 7b8f7a2f13727201b2e6b6bcdbe60e31e56cfcd9 Mon Sep 17 00:00:00 2001 From: Neils Wagenaar Date: Sat, 16 Aug 2003 17:32:30 +0000 Subject: [PATCH] Changes mainly to support the removal of SDLptc.h --- src/jaguar.cpp | 39 ++++----- src/jerry.cpp | 34 ++++---- src/joystick.cpp | 59 +++++++++++--- src/tom.cpp | 58 ++++++++++---- src/vj.cpp | 203 +++++++++++++++++++++++++++++------------------ 5 files changed, 252 insertions(+), 141 deletions(-) diff --git a/src/jaguar.cpp b/src/jaguar.cpp index 6ac2d29..a658266 100644 --- a/src/jaguar.cpp +++ b/src/jaguar.cpp @@ -565,21 +565,16 @@ void jaguar_init(void) // cd_bios_boot("C:\\ftp\\jaguar\\cd\\primalrage.cdi"); // cd_bios_boot("C:\\ftp\\jaguar\\cd\\Dragons Lair.cdi"); -// NTSC PAL -// GPU/DSP/video clock rate 26.590906 26.593900 -// 68000 clock rate 13.295453 13.296950 -// (clock rates in MHz) - // Should these be hardwired or read from VP? jaguar_screen_scanlines = (hardwareTypeNTSC ? 524 : 624); //Should the divisor be 50 for PAL??? Let's try it! - m68k_cycles_per_scanline = (hardwareTypeNTSC ? 13295453 : 13296950) / (jaguar_screen_scanlines * (hardwareTypeNTSC ? 60 : 50)); + m68k_cycles_per_scanline = (hardwareTypeNTSC ? M68K_CLOCK_RATE_NTSC : M68K_CLOCK_RATE_PAL) / (jaguar_screen_scanlines * (hardwareTypeNTSC ? 60 : 50)); gpu_cycles_per_scanline = dsp_cycles_per_scanline - = (hardwareTypeNTSC ? 26590906 : 26593900) / (jaguar_screen_scanlines * (hardwareTypeNTSC ? 60 : 50)); + = (hardwareTypeNTSC ? RISC_CLOCK_RATE_NTSC : RISC_CLOCK_RATE_PAL) / (jaguar_screen_scanlines * (hardwareTypeNTSC ? 60 : 50)); -#ifdef SOUND_OUTPUT - ws_audio_init(); -#endif +//#ifdef SOUND_OUTPUT +// ws_audio_init(); +//#endif m68k_set_cpu_type(M68K_CPU_TYPE_68000); gpu_init(); @@ -619,9 +614,9 @@ void jaguar_done(void) WriteLog("Jaguar: VBL interrupt is %s\n", ((tom_irq_enabled(IRQ_VBLANK)) && (jaguar_interrupt_handler_is_valid(64))) ? "enabled" : "disabled"); M68K_show_context(); //#endif -#ifdef SOUND_OUTPUT - ws_audio_done(); -#endif +//#ifdef SOUND_OUTPUT +// ws_audio_done(); +//#endif cd_bios_done(); cdrom_done(); tom_done(); @@ -651,9 +646,9 @@ void jaguar_reset(void) } // WriteLog("jaguar_reset():\n"); -#ifdef SOUND_OUTPUT - ws_audio_reset(); -#endif +//#ifdef SOUND_OUTPUT +// ws_audio_reset(); +//#endif cd_bios_reset(); tom_reset(); jerry_reset(); @@ -721,9 +716,9 @@ void jaguar_exec(int16 * backbuffer, bool render) dsp_exec(dsp_cycles_per_scanline); backbuffer += tom_width; } -#ifdef SOUND_OUTPUT - system_sound_update(); -#endif +//#ifdef SOUND_OUTPUT +// system_sound_update(); +//#endif } // @@ -791,9 +786,9 @@ if (effect_start) } } -#ifdef SOUND_OUTPUT - system_sound_update(); -#endif +//#ifdef SOUND_OUTPUT +// system_sound_update(); +//#endif } // Temp debugging stuff diff --git a/src/jerry.cpp b/src/jerry.cpp index 1aff37f..73db728 100644 --- a/src/jerry.cpp +++ b/src/jerry.cpp @@ -160,24 +160,32 @@ static int32 jerry_timer_1_counter; static int32 jerry_timer_2_counter; static uint32 jerry_i2s_interrupt_divide = 8; -static int32 jerry_i2s_interrupt_timer = -1; -static int32 jerry_i2s_interrupt_cycles_per_scanline = 0; +static int32 jerry_i2s_interrupt_timer = -1; +static int32 jerry_i2s_interrupt_cycles_per_scanline = 0; void jerry_i2s_exec(uint32 cycles) { + // Why is it called this? Instead of SCLK? jerry_i2s_interrupt_divide &= 0xFF; if (jerry_i2s_interrupt_timer == -1) { uint32 jerry_i2s_int_freq = (26591000 / 64) / (jerry_i2s_interrupt_divide + 1); +//Note: The formula is system_clock_freq / (2 * (N + 1)), and to get 16 bits each of +// left & right channel, ... +// +//WriteLog("SCLK: Setting serial clock freqency to %u Hz...\n", jerry_i2s_int_freq); +//WriteLog("SCLK: Real serial clock freqency would be %u Hz (N=%u)...\n", 26590906 / (2 * (jerry_i2s_interrupt_divide + 1)), jerry_i2s_interrupt_divide); +//WTF is this??? jerry_i2s_interrupt_cycles_per_scanline = 13300000 / jerry_i2s_int_freq; jerry_i2s_interrupt_timer = jerry_i2s_interrupt_cycles_per_scanline; //WriteLog("jerry: i2s interrupt rate set to %i hz (every %i cpu clock cycles) jerry_i2s_interrupt_divide=%i\n",jerry_i2s_int_freq,jerry_i2s_interrupt_cycles_per_scanline,jerry_i2s_interrupt_divide); - pcm_set_sample_rate(jerry_i2s_int_freq); +//No need, we write it directly pcm_set_sample_rate(jerry_i2s_int_freq); } jerry_i2s_interrupt_timer -= cycles; // note : commented since the sound doesn't work properly else +// !!! FIX !!! if (1)//jerry_i2s_interrupt_timer<=0) { // i2s interrupt @@ -245,13 +253,11 @@ void jerry_init(void) clock_init(); anajoy_init(); joystick_init(); + DACInit(); //This should be handled with the cart initialization... // eeprom_init(); memory_malloc_secure((void **)&jerry_ram_8, 0x10000, "JERRY RAM/ROM"); memcpy(&jerry_ram_8[0xD000], wave_table, 0x1000); - -/*for(int i=0; i<0x1000; i++) - WriteLog("WT byte, JERRY byte: %02X, %02X\n", wave_table[i], jerry_ram_8[0xD000+i]);//*/ } void jerry_reset(void) @@ -262,6 +268,7 @@ void jerry_reset(void) joystick_reset(); eeprom_reset(); jerry_reset_i2s_timer(); + DACReset(); memset(jerry_ram_8, 0x00, 0xD000); // Don't clear out the Wavetable ROM...! jerry_ram_8[JERRY_CONFIG+1] |= 0x10; // NTSC (bit 4) @@ -271,7 +278,6 @@ void jerry_reset(void) jerry_timer_2_divider = 0xFFFF; jerry_timer_1_counter = 0; jerry_timer_2_counter = 0; - } void jerry_done(void) @@ -281,13 +287,13 @@ void jerry_done(void) clock_done(); anajoy_done(); joystick_done(); + DACDone(); eeprom_done(); } // // JERRY byte access (read) // - unsigned jerry_byte_read(unsigned int offset) { #ifdef JERRY_DEBUG @@ -336,7 +342,6 @@ unsigned jerry_byte_read(unsigned int offset) // // JERRY word access (read) // - unsigned jerry_word_read(unsigned int offset) { #ifdef JERRY_DEBUG @@ -393,7 +398,6 @@ unsigned jerry_word_read(unsigned int offset) // // JERRY byte access (write) // - void jerry_byte_write(unsigned offset, unsigned data) { #ifdef JERRY_DEBUG @@ -409,6 +413,7 @@ void jerry_byte_write(unsigned offset, unsigned data) dsp_byte_write(offset, data); return; } + // SCLK ($F1A150--8 bits wide) else if ((offset >= 0xF1A152) && (offset <= 0xF1A153)) { // WriteLog("i2s: writing 0x%.2x to SCLK\n",data); @@ -471,7 +476,6 @@ void jerry_byte_write(unsigned offset, unsigned data) // // JERRY word access (write) // - void jerry_word_write(unsigned offset, unsigned data) { #ifdef JERRY_DEBUG @@ -488,7 +492,7 @@ void jerry_word_write(unsigned offset, unsigned data) dsp_word_write(offset, data); return; } - else if (offset == 0xF1A152) + else if (offset == 0xF1A152) // Bottom half of SCLK ($F1A150) { // WriteLog("i2s: writing 0x%.4x to SCLK\n",data); jerry_i2s_interrupt_divide = data & 0xFF; @@ -518,9 +522,10 @@ void jerry_word_write(unsigned offset, unsigned data) // Need to handle (unaligned) cases??? return; } - else if ((offset >= 0xF1A148) && (offset < 0xF1A150)) + // LTXD/RTXD/SCLK/SMODE $F1A148/4C/50/54 (really 16-bit registers...) + else if (offset >= 0xF1A148 && offset <= 0xF1A156) { - pcm_word_write(offset - 0xF1A148, data); + DACWriteWord(offset, data); return; } else if ((offset >= 0xF10010) && (offset < 0xF10016)) @@ -530,6 +535,7 @@ void jerry_word_write(unsigned offset, unsigned data) } else if ((offset >= 0xF17C00) && (offset < 0xF17C02)) { +//I think this was removed from the Jaguar. If so, then we don't need this...! anajoy_word_write(offset, data); return; } diff --git a/src/joystick.cpp b/src/joystick.cpp index 07135cc..453c521 100644 --- a/src/joystick.cpp +++ b/src/joystick.cpp @@ -12,7 +12,7 @@ //#endif #include #include -#include "SDLptc.h" +//#include "SDLptc.h" #include "jaguar.h" void main_screen_switch(void); @@ -34,7 +34,6 @@ void main_screen_switch(void); #define BUTTON_6 14 #define BUTTON_3 15 - #define BUTTON_A 16 #define BUTTON_B 17 #define BUTTON_C 18 @@ -55,6 +54,38 @@ bool iLeft, iRight, iToggle = false; bool keyHeld1 = false, keyHeld2 = false, keyHeld3 = false; int objectPtr = 0; + +void main_screen_switch(void) +{ + extern SDL_Surface * mainSurface; + extern Uint32 mainSurfaceFlags; + extern bool fullscreen; + + fullscreen = !fullscreen; + mainSurfaceFlags &= ~SDL_FULLSCREEN; + if (fullscreen) + mainSurfaceFlags |= SDL_FULLSCREEN; + +//???Should we do this??? +// SDL_FreeSurface(mainSurface); + mainSurface = SDL_SetVideoMode(tom_width, tom_height, 16, mainSurfaceFlags); + + if (mainSurface == NULL) + { + WriteLog("Joystick: SDL is unable to set the video mode: %s\n", SDL_GetError()); + exit(1); + } + + SDL_WM_SetCaption("Virtual Jaguar", "Virtual Jaguar"); +/* if (fullscreen) + console.option("fullscreen output"); + else + console.option("windowed output");*/ + +// console.close(); +// console.open("Virtual Jaguar", tom_width, tom_height, format); +} + void joystick_init(void) { joystick_reset(); @@ -62,8 +93,10 @@ void joystick_init(void) void joystick_exec(void) { + extern SDL_Joystick * joystick; + extern bool useJoystick; uint8 * keystate = SDL_GetKeyState(NULL); - extern Console console; +// extern Console console; memset(joypad_0_buttons, 0, 21); memset(joypad_1_buttons, 0, 21); @@ -72,7 +105,7 @@ void joystick_exec(void) blit_start_log = 0; iLeft = iRight = false; - if ((keystate[SDLK_LALT]) & (keystate[SDLK_RETURN])) + if ((keystate[SDLK_LALT] || keystate[SDLK_RALT]) & keystate[SDLK_RETURN]) main_screen_switch(); /* Added/Changed by SDLEMU (http://sdlemu.ngemu.com) */ @@ -147,10 +180,13 @@ void joystick_exec(void) /* Added/Changed by SDLEMU (http://sdlemu.ngemu.com */ /* Joystick support */ - if (console.JoyEnabled() == 1) +// if (console.JoyEnabled() == 1) + if (useJoystick) { - int16 x = SDL_JoystickGetAxis(console.joystick, 0), - y = SDL_JoystickGetAxis(console.joystick, 1); +// int16 x = SDL_JoystickGetAxis(console.joystick, 0), +// y = SDL_JoystickGetAxis(console.joystick, 1); + int16 x = SDL_JoystickGetAxis(joystick, 0), + y = SDL_JoystickGetAxis(joystick, 1); if (x > 16384) joypad_0_buttons[BUTTON_R] = 0x01; @@ -161,11 +197,14 @@ void joystick_exec(void) if (y < -16384) joypad_0_buttons[BUTTON_U] = 0x01; - if (SDL_JoystickGetButton(console.joystick, 0) == SDL_PRESSED) +// if (SDL_JoystickGetButton(console.joystick, 0) == SDL_PRESSED) + if (SDL_JoystickGetButton(joystick, 0) == SDL_PRESSED) joypad_0_buttons[BUTTON_A] = 0x01; - if (SDL_JoystickGetButton(console.joystick, 1) == SDL_PRESSED) +// if (SDL_JoystickGetButton(console.joystick, 1) == SDL_PRESSED) + if (SDL_JoystickGetButton(joystick, 1) == SDL_PRESSED) joypad_0_buttons[BUTTON_B] = 0x01; - if (SDL_JoystickGetButton(console.joystick, 2) == SDL_PRESSED) +// if (SDL_JoystickGetButton(console.joystick, 2) == SDL_PRESSED) + if (SDL_JoystickGetButton(joystick, 2) == SDL_PRESSED) joypad_0_buttons[BUTTON_C] = 0x01; } diff --git a/src/tom.cpp b/src/tom.cpp index 8858481..f6d254a 100644 --- a/src/tom.cpp +++ b/src/tom.cpp @@ -245,7 +245,7 @@ // ------------------------------------------------------------ #include -#include "SDLptc.h" +//#include "SDLptc.h" #include "tom.h" #include "gpu.h" #include "objectp.h" @@ -278,12 +278,12 @@ #define BG 0x58 //This can be defined in the makefile as well... -//(It's easier to do it here...) +//(It's easier to do it here, though...) //#define TOM_DEBUG extern uint32 jaguar_mainRom_crc32; -extern Console console; -extern Surface * surface; +//extern Console console; +//extern Surface * surface; extern uint8 objectp_running; static uint8 * tom_ram_8; @@ -679,7 +679,9 @@ void tom_exec_scanline(int16 * backbuffer, int32 scanline, bool render) uint32 TOMGetSDLScreenPitch(void) { - return surface->pitch(); + extern SDL_Surface * surface; + + return surface->pitch; } // @@ -689,7 +691,7 @@ void tom_init(void) { op_init(); blitter_init(); - pcm_init(); +//This should be done by JERRY! pcm_init(); memory_malloc_secure((void **)&tom_ram_8, 0x4000, "TOM RAM"); tom_reset(); // Setup the non-stretchy scanline rendering... @@ -700,7 +702,7 @@ void tom_init(void) void tom_done(void) { op_done(); - pcm_done(); +//This should be done by JERRY! pcm_done(); blitter_done(); WriteLog("TOM: Resolution %i x %i %s\n", tom_getVideoModeWidth(), tom_getVideoModeHeight(), videoMode_to_str[tom_getVideoMode()]); @@ -802,7 +804,7 @@ void tom_reset(void) op_reset(); blitter_reset(); - pcm_reset(); +//This should be done by JERRY! pcm_reset(); memset(tom_ram_8, 0x00, 0x4000); @@ -1146,20 +1148,42 @@ if (offset == VMODE) if ((width != tom_width) || (height != tom_height)) { - ws_audio_done(); + extern SDL_Surface * surface, * mainSurface; + extern Uint32 mainSurfaceFlags; +// ws_audio_done(); static char window_title[256]; - delete surface; +// delete surface; tom_width = width, tom_height = height; - Format format(16, 0x007C00, 0x00003E0, 0x0000001F); - surface = new Surface(tom_width, tom_height, format); - console.close(); - sprintf(window_title, "Virtual Jaguar (%i x %i)", (int)tom_width, (int)tom_height); - console.open(window_title, width, tom_height, format); +// Format format(16, 0x007C00, 0x00003E0, 0x0000001F); +// surface = new Surface(tom_width, tom_height, format); + SDL_FreeSurface(surface); + surface = SDL_CreateRGBSurface(SDL_SWSURFACE, tom_width, tom_height, + 16, 0x7C00, 0x03E0, 0x001F, 0); + if (surface == NULL) + { + WriteLog("TOM: Could not create primary SDL surface: %s", SDL_GetError()); + exit(1); + } - ws_audio_init(); - ws_audio_reset(); + sprintf(window_title, "Virtual Jaguar (%i x %i)", (int)tom_width, (int)tom_height); +// console.close(); +// console.open(window_title, width, tom_height, format); +//???Should we do this??? +// SDL_FreeSurface(mainSurface); + mainSurface = SDL_SetVideoMode(tom_width, tom_height, 16, mainSurfaceFlags); + + if (mainSurface == NULL) + { + WriteLog("Joystick: SDL is unable to set the video mode: %s\n", SDL_GetError()); + exit(1); + } + + SDL_WM_SetCaption(window_title, window_title); + +// ws_audio_init(); +// ws_audio_reset(); } } } diff --git a/src/vj.cpp b/src/vj.cpp index 5c6fb61..376c3e2 100644 --- a/src/vj.cpp +++ b/src/vj.cpp @@ -6,15 +6,6 @@ // Cleanups/fixes by James L. Hammons // -// -// Important info: -// -// NTSC PAL -// GPU/DSP/video clock rate 26.590906 26.593900 -// 68000 clock rate 13.295453 13.296950 -// (clock rates in MHz) -// - // Added by SDLEMU (http://sdlemu.ngemu.com) // Added for GCC UNIX compatibility #ifdef __GCCUNIX__ @@ -23,7 +14,7 @@ #include #include -#include "SDLptc.h" +//#include "SDLptc.h" // Ick! Aargh! Bleah! #include "jaguar.h" #include "crc32.h" #include "unzip.h" @@ -31,57 +22,46 @@ // Uncomment this for speed control //#define SPEED_CONTROL -// // Private function prototypes -// uint32 JaguarLoadROM(uint8 *, char *); void JaguarLoadCart(uint8 *, char *); -// +// External variables + +//These two should be local! +extern bool jaguar_use_bios; +extern bool dsp_enabled; + +extern uint8 * jaguar_mainRam; +extern uint8 * jaguar_bootRom; +extern uint8 * jaguar_mainRom; + // Various paths -// -//static char *jaguar_bootRom_path="c:/jaguarEmu/newload.img"; static char * jaguar_bootRom_path = "./bios/jagboot.rom"; +//static char *jaguar_bootRom_path="c:/jaguarEmu/newload.img"; //static char *jaguar_bootRom_path="./bios/JagOS.bin"; char * jaguar_eeproms_path = "./eeproms/"; char jaguar_boot_dir[1024]; -//static char romLoadDialog_filePath[1024]; +SDL_Surface * surface, * mainSurface; +SDL_Joystick * joystick; +Uint32 mainSurfaceFlags = SDL_SWSURFACE; -Console console; -Surface * surface; -Format format(16, 0x007C00, 0x00003E0, 0x0000001F); +//Console console; +//Surface * surface; +//Format format(16, 0x007C00, 0x00003E0, 0x0000001F); bool finished = false; bool fullscreen = false; bool hardwareTypeNTSC = true; // Set to false for PAL -// -// External variables -// +bool useJoystick = false; -extern bool jaguar_use_bios; -extern bool dsp_enabled; -extern uint8 * jaguar_mainRam; -extern uint8 * jaguar_bootRom; -extern uint8 * jaguar_mainRom; - - -void main_screen_switch(void) -{ - fullscreen = !fullscreen; - if (fullscreen) - console.option("fullscreen output"); - else - console.option("windowed output"); - console.close(); - console.open("Virtual Jaguar", tom_width, tom_height, format); -} // Added/changed by SDLEMU http://sdlemu.ngemu.com -uint32 totalFrames;//so we can grab this from somewhere else... +uint32 totalFrames;//so we can grab this from elsewhere... int main(int argc, char * argv[]) { uint32 startTime;//, totalFrames;//, endTime;//, w, h; @@ -101,7 +81,7 @@ int main(int argc, char * argv[]) printf("Portions massaged by James L. Hammons (WIN32)\n"); printf("Contact: http://sdlemu.ngemu.com/ | sdlemu@ngemu.com\n"); - console.option("windowed output"); +// console.option("windowed output"); // BIOS is now ON by default--use the -nobios switch to turn it off! jaguar_use_bios = true; @@ -116,16 +96,19 @@ int main(int argc, char * argv[]) haveCart = true; // It looks like we have a cartridge! if (!strcmp(argv[i], "-fullscreen")) - { +// { fullscreen = true; - console.option("fullscreen output"); - } +// console.option("fullscreen output"); +// } - if (!strcmp(argv[i], "-window")) - console.option("windowed output"); +//We *don't* need this option! +/* if (!strcmp(argv[i], "-window")) +// console.option("windowed output"); + fullscreen = false;*/ if (!strcmp(argv[i], "-joystick")) - console.option("joystick enabled"); +// console.option("joystick enabled"); + useJoystick = true; if (!strcmp(argv[i], "-joyport")) { @@ -157,18 +140,17 @@ int main(int argc, char * argv[]) { printf("Usage: \n\n"); printf("vj [romfile] [switches]\n"); - printf(" -? or -help : Display usage and switches \n"); - printf(" -fullscreen : Enable fullscreen mode \n"); - printf(" -window : Enable windowed mode (default) \n"); - printf(" -frameskip 1-10 : Enable frameskip 1 (default) - 10 \n"); - printf(" -joystick : Enable joystick/gamepad \n"); - printf(" -joyport 0-3 : Select desired joystick port \n"); - printf(" -nobios : Boot cart without using Jaguar BIOS ROM \n"); - printf(" -dspon : Force VJ to use the DSP \n"); - printf(" -pal : Force VJ to PAL mode (default is NTSC) \n"); + printf(" -? or -help : Display usage and switches \n"); + printf(" -fullscreen : Enable fullscreen mode (windowed default)\n"); + printf(" -frameskip 1-10 : Enable frameskip 1 (default) - 10 \n"); + printf(" -joystick : Enable joystick/gamepad \n"); + printf(" -joyport 0-3 : Select desired joystick port \n"); + printf(" -nobios : Boot cart without using Jaguar BIOS ROM \n"); + printf(" -dspon : Force VJ to use the DSP \n"); + printf(" -pal : Force VJ to PAL mode (default is NTSC) \n"); printf("\nInvoking Virtual Jagaur with no ROM file will cause it to boot up\n"); printf("with the Jaguar BIOS.\n"); - return true; + return 1; } } @@ -187,33 +169,79 @@ int main(int argc, char * argv[]) // Get the cartridge ROM (if passed in) if (haveCart) - { JaguarLoadCart(jaguar_mainRom, argv[1]); - eeprom_init(); - } jaguar_reset(); - // Setting up the backbuffer + // Set up the backbuffer int16 * backbuffer = (int16 *)malloc(845 * 525 * sizeof(int16)); memset(backbuffer, 0xAA, tom_getVideoModeWidth() * tom_getVideoModeHeight() * sizeof(int16)); - // Setting up the primary SDL display - surface = new Surface(tom_getVideoModeWidth(), tom_getVideoModeHeight(), format); + // Set up SDL library + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_NOPARACHUTE) < 0) + { + WriteLog("VJ: Could not initialize the SDL library: %s", SDL_GetError()); + exit(1); + } + + // Let's get proper info about the platform we're running on. + const SDL_VideoInfo * info = SDL_GetVideoInfo(); + + if (!info) + { + WriteLog("VJ: SDL is unable to get the video query: %s\n", SDL_GetError()); + exit(1); + } + + if (info->hw_available) + mainSurfaceFlags = SDL_HWSURFACE | SDL_HWPALETTE | SDL_DOUBLEBUF; + + if (info->blit_hw) + mainSurfaceFlags |= SDL_HWACCEL; + + if (fullscreen) + mainSurfaceFlags |= SDL_FULLSCREEN; + + // Note: mainSurface is *never* used again! + //Not true--had to look at what's what here... + mainSurface = SDL_SetVideoMode(tom_getVideoModeWidth(), tom_getVideoModeHeight(), 16, mainSurfaceFlags); + + if (mainSurface == NULL) + { + WriteLog("VJ: SDL is unable to set the video mode: %s\n", SDL_GetError()); + exit(1); + } + + SDL_WM_SetCaption("Virtual Jaguar", "Virtual Jaguar"); + + // Create the primary SDL display (16 BPP, 5/5/5 RGB format) +// surface = new Surface(tom_getVideoModeWidth(), tom_getVideoModeHeight(), format); +//Format format(16, 0x007C00, 0x00003E0, 0x0000001F); + surface = SDL_CreateRGBSurface(SDL_SWSURFACE, tom_getVideoModeWidth(), + tom_getVideoModeHeight(), 16, 0x7C00, 0x03E0, 0x001F, 0); + if (surface == NULL) + { + WriteLog("VJ: Could not create primary SDL surface: %s", SDL_GetError()); + exit(1); + } // Initialize Joystick support under SDL - if (console.JoyEnabled() == 1) +// if (console.JoyEnabled() == 1) + if (useJoystick) { if (SDL_NumJoysticks() <= 0) { - console.option("joystick disabled"); +// console.option("joystick disabled"); + useJoystick = false; printf("No joystick(s) or joypad(s) detected on your system. Using keyboard...\n"); } else { - if ((console.joystick = SDL_JoystickOpen(nJoyport)) == 0) +// if ((console.joystick = SDL_JoystickOpen(nJoyport)) == 0) + if ((joystick = SDL_JoystickOpen(nJoyport)) == 0) { - console.option("joystick disabled"); +// console.option("joystick disabled"); + useJoystick = false; printf("Unable to open a Joystick on port: %d\n", (int)nJoyport); } else @@ -222,8 +250,8 @@ int main(int argc, char * argv[]) } // Open the display and start emulating some 3l337 Atari Jaguar games :P - console.open("Virtual Jaguar", tom_getVideoModeWidth(), tom_getVideoModeHeight(), format); - +// console.open("Virtual Jaguar", tom_getVideoModeWidth(), tom_getVideoModeHeight(), format); + totalFrames = 0; startTime = clock(); nNormalLast = 0; // Last value of timeGetTime() @@ -265,11 +293,27 @@ int main(int argc, char * argv[]) // Simple frameskip if (nFrame == nFrameskip) { - int32 * vs = (int32 *)surface->lock(); - memcpy(vs, backbuffer, tom_width * tom_height * 2); - surface->unlock(); - surface->copy(console); - console.update(); +// int32 * vs = (int32 *)surface->lock(); + if (SDL_MUSTLOCK(surface)) + while (SDL_LockSurface(surface) < 0) + SDL_Delay(10); +// uint8 * vs = (Uint8 *)surface->pixels; +// memcpy(vs, backbuffer, tom_width * tom_height * 2); + memcpy(surface->pixels, backbuffer, tom_width * tom_height * 2); +// surface->unlock(); + if (SDL_MUSTLOCK(surface)) + SDL_UnlockSurface(surface); +// surface->copy(console); + SDL_Rect srcrect, dstrect; + srcrect.x = srcrect.y = 0, srcrect.w = surface->w, srcrect.h = surface->h; + dstrect.x = dstrect.y = 0, dstrect.w = surface->w, dstrect.h = surface->h; +// SDL_LowerBlit(surface, &srcrect, dst.surface, &dstrect); + SDL_BlitSurface(surface, &srcrect, mainSurface, &dstrect); +// dst.updates[dst.nupdates++] = dstrect; +// console.update(); + SDL_Flip(mainSurface); +// nupdates = 0; + nFrame = 0; } else @@ -285,14 +329,16 @@ int main(int argc, char * argv[]) int elapsedTime = clock() - startTime; int fps = (1000 * totalFrames) / elapsedTime; fprintf(log_get(), "Statistics: %i FPS\n", fps); - - if (console.JoyEnabled() == 1) {} - + jaguar_done(); version_done(); memory_done(); log_done(); - console.close(); // Close SDL items as last! +// console.close(); // Close SDL items as last! + SDL_JoystickClose(joystick); + SDL_FreeSurface(surface); + SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO | SDL_INIT_TIMER); + SDL_Quit(); return 0; } @@ -349,4 +395,5 @@ void JaguarLoadCart(uint8 * mem, char * path) uint32 romsize = JaguarLoadROM(mem, path); jaguar_mainRom_crc32 = crc32_calcCheckSum(jaguar_mainRom, romsize); WriteLog( "CRC: %08X\n", (unsigned int)jaguar_mainRom_crc32); + eeprom_init(); } -- 2.37.2