Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Yabause - A Saturn Emulator
This is my personal fork of Yabause with development updates.

[Documentation](http://wiki.yabause.org/index.php5?title=Documentations) | [Homepage](https://yabause.org/) | [Development Builds](https://yabause.org/download/)

Expand Down
2 changes: 1 addition & 1 deletion yabause/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 2.8)
set(YAB_PACKAGE yabause)
set(YAB_VERSION_MAJOR 0)
set(YAB_VERSION_MINOR 9)
set(YAB_VERSION_PATCH 15)
set(YAB_VERSION_PATCH 17)
set(YAB_VERSION "${YAB_VERSION_MAJOR}.${YAB_VERSION_MINOR}.${YAB_VERSION_PATCH}")

set(CPACK_SOURCE_GENERATOR TGZ)
Expand Down
12 changes: 12 additions & 0 deletions yabause/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
0.9.16 -> 0.9.17
general:
- Fixed DSP end termination handling (JIT still missing)
- Fixed DSP reset of V/E bits when acessing the control register
qt:
- Add experimental code debugging support with addr2line
0.9.15 -> 0.9.16
general:
- Fixed reading cdblock data transfer register as a word
qt:
- Keep last rendered image when paused
- vdp1 draw commands now highlight on framebuffer
0.9.14 -> 0.9.15
general:
- Added CCD (CloneCD) file format support (CyberWarriorX)
Expand Down
34 changes: 34 additions & 0 deletions yabause/generate_build_from_cmake.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
$qtPath = 'D:\Desenvolvimento\Qt\Qt5.7.1\5.7\msvc2015_64'
$scriptDir = $PSScriptRoot

$vars = @()
$vars += [System.Tuple]::Create("QT_QMAKE_EXECUTABLE", "${qtPath}\bin\qmake.exe")
$vars += [System.Tuple]::Create("Qt5Core_DIR", "${qtPath}\lib\cmake\Qt5Core")
$vars += [System.Tuple]::Create("Qt5Gui_DIR", "${qtPath}\lib\cmake\Qt5Gui")
$vars += [System.Tuple]::Create("Qt5Multimedia_DIR", "${qtPath}\lib\cmake\Qt5Multimedia")
$vars += [System.Tuple]::Create("Qt5Network_DIR", "${qtPath}\lib\cmake\Qt5Network")
$vars += [System.Tuple]::Create("Qt5OpenGL_DIR", "${qtPath}\lib\cmake\Qt5OpenGL")
$vars += [System.Tuple]::Create("Qt5Widgets_DIR", "${qtPath}\lib\cmake\Qt5Widgets")
$vars += [System.Tuple]::Create("Qt5_DIR", "${qtPath}\lib\cmake\Qt5")
$vars += [System.Tuple]::Create("CMAKE_INSTALL_PREFIX", "${scriptDir}\..\build_install")
$vars += [System.Tuple]::Create("OPENAL_LIBRARY", "${scriptDir}\..\dependencies\OpenAL\libs\Win64\OpenAL32.lib")
$vars += [System.Tuple]::Create("OPENAL_INCLUDE_DIR", "${scriptDir}\..\dependencies\OpenAL\include")
$vars += [System.Tuple]::Create("SH2_DYNAREC", "1")
$vars += [System.Tuple]::Create("SH2_TRACE", "1")
$vars += [System.Tuple]::Create("SH2_UBC", "1")
$vars += [System.Tuple]::Create("YAB_NETWORK", "1")

$cmd = "cmake"
$args = "${scriptDir}"
$args += ' -G "Visual Studio 17 2022"'
foreach ($var in $vars) {
$param = $var.Item1
$value = Resolve-Path $var.Item2 -ErrorAction Ignore
if (-not $value) {
$value = $var.Item2
}

$args += " -D${param}=${value}"
}

Start-Process $cmd -ArgumentList $args -Wait -NoNewWindow
25 changes: 14 additions & 11 deletions yabause/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -711,38 +711,41 @@ add_definitions(-DVERSION=\"${YAB_VERSION}\")
include(CheckCXXCompilerFlag)
if (MSVC)
if(NOT (MSVC_VERSION LESS 1800))
set(COMPILER_SUPPORTS_CXX11 ON)
set(COMPILER_SUPPORTS_CXX17 ON)
else()
message(STATUS "Not enough C++11 support for dynarecs.")
message(STATUS "Not enough C++17 support for dynarecs.")
endif()
elseif(ANDROID)
message(STATUS "CodeGen needs exceptions and rtti. Dynarecs disabled.")
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
message(STATUS "CodeGen doesn't build in Clang yet. Dynarecs disabled.")
else()
CHECK_CXX_COMPILER_FLAG(-std=c++11 COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG(-std=c++17 COMPILER_SUPPORTS_CXX17)

SET(CMAKE_REQUIRED_FLAGS "-std=c++17")
check_cxx_source_compiles("
#include <list>
#include <filesystem>
int main() {
std::list<int> list;
list.erase(list.cbegin());
std::filesystem::path myPath;
}
" CXX11_ERASE_CONST)
" CXX17_ERASE_CONST)

if(NOT CXX11_ERASE_CONST)
set(COMPILER_SUPPORTS_CXX11 OFF)
if(NOT CXX17_ERASE_CONST)
set(COMPILER_SUPPORTS_CXX17 OFF)
endif()

if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
if(COMPILER_SUPPORTS_CXX17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} doesn't have enough C++11 support. Dynarecs disabled.")
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} doesn't have enough C++17 support. Dynarecs disabled.")
endif()
endif()

option(YAB_USE_PLAY_JIT "Enable Play codegen and dynarecs." ON)
if (YAB_USE_PLAY_JIT AND COMPILER_SUPPORTS_CXX11)
if (YAB_USE_PLAY_JIT AND COMPILER_SUPPORTS_CXX17)
add_subdirectory(play)
add_definitions(-DHAVE_PLAY_JIT=1)
set(yabause_SOURCES ${yabause_SOURCES} scsp_dsp_jit.cpp scu_dsp_jit.cpp sh2_jit.cpp)
Expand All @@ -751,7 +754,7 @@ endif()

add_library(yabause ${yabause_SOURCES} ${yabause_HEADERS})

if (YAB_USE_PLAY_JIT AND COMPILER_SUPPORTS_CXX11)
if (YAB_USE_PLAY_JIT AND COMPILER_SUPPORTS_CXX17)
target_link_libraries(yabause CodeGen)
endif()

Expand Down
2 changes: 1 addition & 1 deletion yabause/src/Makefile.dc
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ all: yabause.bin

include $(KOS_BASE)/Makefile.rules

KOS_CFLAGS += -I. -DDEBUG -DNO_CLI -DVERSION="0.9.15"
KOS_CFLAGS += -I. -DDEBUG -DNO_CLI -DVERSION="0.9.17"
KOS_ASFLAGS += -g

OBJS = bios.o cdbase.o cheat.o cs0.o cs1.o cs2.o debug.o error.o m68kd.o \
Expand Down
2 changes: 1 addition & 1 deletion yabause/src/cocoa/Yabause-Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>0.9.15</string>
<string>0.9.17</string>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>CFBundleVersion</key>
Expand Down
4 changes: 2 additions & 2 deletions yabause/src/cocoa/Yabause.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -750,7 +750,7 @@
HAVE_STRCASECMP,
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_1)",
);
GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_1 = "VERSION=\\\"0.9.15\\\"";
GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_1 = "VERSION=\\\"0.9.17\\\"";
GCC_VERSION = "";
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
Expand Down Expand Up @@ -779,7 +779,7 @@
HAVE_STRCASECMP,
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_1)",
);
GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_1 = "VERSION=\\\"0.9.15\\\"";
GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_1 = "VERSION=\\\"0.9.17\\\"";
GCC_VERSION = "";
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
Expand Down
63 changes: 63 additions & 0 deletions yabause/src/cs2.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ void FASTCALL Cs2WriteByte(SH2_struct *sh, u32 addr, u8 val)
* \bug Mapping isn't quite correct(as noted in source)
*/
u16 FASTCALL Cs2ReadWord(SH2_struct *sh, u32 addr) {
s32 i;
u16 val = 0;
addr &= 0xFFFFF; // fix me(I should really have proper mapping)

Expand Down Expand Up @@ -187,6 +188,68 @@ u16 FASTCALL Cs2ReadWord(SH2_struct *sh, u32 addr) {
return Cs2Area->reg.CR4;
case 0x90028:
case 0x9002A: return Cs2Area->reg.MPEGRGB;
case 0x90000:
// transfer data
if (Cs2Area->datatranstype != CDB_DATATRANSTYPE_INVALID)
{
// get sector

// Make sure we still have sectors to transfer
if (Cs2Area->datanumsecttrans < Cs2Area->datasectstotrans)
{
// Transfer Data
const u8 *ptr = &Cs2Area->datatranspartition->block[Cs2Area->datanumsecttrans]->data[Cs2Area->datatransoffset];

if (Cs2Area->datatranspartition->block[Cs2Area->datanumsecttrans] == NULL)
{
CDLOG("cs2\t: datatranspartition->block[Cs2Area->datanumsecttrans] was NULL");
return 0;
}
#ifdef WORDS_BIGENDIAN
val = *((const u16 *) ptr);
#else
val = BSWAP16(*((const u16 *) ptr));
#endif

// increment datatransoffset/cdwnum
Cs2Area->cdwnum += 2;
Cs2Area->datatransoffset += 2;

// Make sure we're not beyond the sector size boundary
if (Cs2Area->datatransoffset >= Cs2Area->datatranspartition->block[Cs2Area->datanumsecttrans]->size)
{
Cs2Area->datatransoffset = 0;
Cs2Area->datanumsecttrans++;
}
}
else
{
if (Cs2Area->datatranstype == CDB_DATATRANSTYPE_GETDELSECTOR)
{
// Ok, so we don't have any more sectors to
// transfer, might as well delete them all.

Cs2Area->datatranstype = CDB_DATATRANSTYPE_INVALID;

// free blocks
for (i = Cs2Area->datatranssectpos; i < (Cs2Area->datatranssectpos+Cs2Area->datasectstotrans); i++)
{
Cs2FreeBlock(Cs2Area->datatranspartition->block[i]);
Cs2Area->datatranspartition->block[i] = NULL;
Cs2Area->datatranspartition->blocknum[i] = 0xFF;
}

// sort remaining blocks
Cs2SortBlocks(Cs2Area->datatranspartition);

Cs2Area->datatranspartition->size -= Cs2Area->cdwnum;
Cs2Area->datatranspartition->numblocks -= Cs2Area->datasectstotrans;

CDLOG("cs2\t: datatranspartition->size = %x\n", Cs2Area->datatranspartition->size);
}
}
}
break;
case 0x98000:
// transfer info
switch (Cs2Area->infotranstype) {
Expand Down
2 changes: 1 addition & 1 deletion yabause/src/gtk/doc/yabause.1
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.TH YABAUSE 1 "July 13, 2016" "yabause-0.9.15"
.TH YABAUSE 1 "Sep 18, 2021" "yabause-0.9.17"
.SH NAME
yabause \- Yet Another Buggy And Uncomplete Saturn Emulator
.SH SYNOPSIS
Expand Down
2 changes: 1 addition & 1 deletion yabause/src/play/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 2.8)
project(CodeGen CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_library(CodeGen
Expand Down
4 changes: 4 additions & 0 deletions yabause/src/qt/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ yab_port_start()

option(YAB_USE_QT5 "Use Qt 5 if available." ON)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_STANDARD_REQUIRED True)

if(YAB_USE_QT5)
find_package(Qt5 COMPONENTS Widgets QUIET)
endif()
Expand Down
75 changes: 74 additions & 1 deletion yabause/src/qt/YabauseGL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,33 @@
*/
#include "YabauseGL.h"
#include "QtYabause.h"
#include <cassert>

YabauseGL::YabauseGL( QWidget* p )
: QGLWidget( p )
: QGLWidget( p ),
lastRenderedScreen(nullptr),
overlayPauseImage(nullptr)
{
setFocusPolicy( Qt::StrongFocus );

if ( p ) {
p->setFocusPolicy( Qt::StrongFocus );
setFocusProxy( p );
}

constexpr size_t arraySizes = 704 * 512 * sizeof(uint32_t);
lastRenderedScreen = new uint32_t[ arraySizes ];
overlayPauseImage = new uint32_t[ arraySizes ];
memset(lastRenderedScreen, 0, arraySizes);
memset(overlayPauseImage, 0, arraySizes);

paused = false;
}

YabauseGL::~YabauseGL()
{
delete [] lastRenderedScreen;
delete [] overlayPauseImage;
}

void YabauseGL::showEvent( QShowEvent* e )
Expand All @@ -44,10 +61,66 @@ void YabauseGL::showEvent( QShowEvent* e )
void YabauseGL::resizeGL( int w, int h )
{ updateView( QSize( w, h ) ); }

void YabauseGL::snapshotView()
{
int width, height, interlace;
VIDCore->GetNativeResolution( &width, &height, &interlace );

const size_t totalSize = static_cast<size_t>(width) * static_cast<size_t>(height) *
sizeof(uint32_t);

memcpy( lastRenderedScreen, dispbuffer, totalSize );
memset( overlayPauseImage, 0, totalSize );
}

void YabauseGL::updatePausedView( const QSize& s )
{
// Paint static image
int width, height, interlace;
VIDCore->GetNativeResolution( &width, &height, &interlace );

glViewport( 0, 0, s.width(), s.height() );
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE,
lastRenderedScreen);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

QMutexLocker lock(&overlayMutex);

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE,
overlayPauseImage);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisable(GL_BLEND);

swapBuffers();
}

void YabauseGL::paintGL()
{
if (paused)
updatePausedView( size() );
}

void YabauseGL::setPaused( bool isPaused )
{ paused = isPaused; }

QPair<uint32_t*, QMutex*> YabauseGL::getOverlayPausedImage()
{
return QPair<uint32_t*, QMutex*>(overlayPauseImage, &overlayMutex);
}

void YabauseGL::updateView( const QSize& s )
{
const QSize size = s.isValid() ? s : this->size();
glViewport( 0, 0, size.width(), size.height() );
if ( VIDCore )
VIDCore->Resize( size.width(), size.height(), 0 );

if ( paused )
updatePausedView( s );
}
Loading