Merge remote-tracking branch 'origin/master' into dev
# Conflicts: # core/hw/holly/sb_mem.cpp # core/hw/naomi/naomi.cpp # core/hw/naomi/naomi_flashrom.cpp # core/hw/pvr/ta_ctx.h # core/rend/gui.cpp
This commit is contained in:
commit
99d5266aa0
|
@ -22,6 +22,12 @@
|
|||
CORE_ARGS: -DLIBRETRO=ON -G Xcode -DCMAKE_BUILD_TYPE=Release
|
||||
EXTRA_PATH: Release
|
||||
|
||||
.core-defs-osx-arm64:
|
||||
extends: .core-defs
|
||||
variables:
|
||||
CORE_ARGS: -DLIBRETRO=ON -G Xcode -DCMAKE_BUILD_TYPE=Release
|
||||
EXTRA_PATH: Release
|
||||
|
||||
.core-defs-android:
|
||||
extends: .core-defs
|
||||
script:
|
||||
|
@ -43,6 +49,10 @@ include:
|
|||
- project: 'libretro-infrastructure/ci-templates'
|
||||
file: 'osx-cmake-x86.yml'
|
||||
|
||||
# MacOS arm64
|
||||
- project: 'libretro-infrastructure/ci-templates'
|
||||
file: 'osx-cmake-arm64.yml'
|
||||
|
||||
# Linux
|
||||
- project: 'libretro-infrastructure/ci-templates'
|
||||
file: '/linux-cmake.yml'
|
||||
|
@ -98,6 +108,12 @@ libretro-build-osx-x64:
|
|||
- .libretro-osx-cmake-x86
|
||||
- .core-defs-osx-x64
|
||||
|
||||
# MacOS arm 64-bit
|
||||
libretro-build-osx-arm64:
|
||||
extends:
|
||||
- .libretro-osx-cmake-arm64
|
||||
- .core-defs-osx-arm64
|
||||
|
||||
################################### CELLULAR #################################
|
||||
# Android ARMv7a
|
||||
android-armeabi-v7a:
|
||||
|
|
|
@ -168,7 +168,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES
|
|||
CXX_EXTENSIONS OFF
|
||||
LINK_FLAGS_RELEASE -s)
|
||||
if(MSVC)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE /GR- /GS-)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE /GR /GS-)
|
||||
if(WINDOWS_STORE)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE /ZW)
|
||||
endif()
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "reios/reios.h"
|
||||
#include "cfg/cfg.h"
|
||||
#include "cfg/ini.h"
|
||||
#include "cfg/option.h"
|
||||
#include "emulator.h"
|
||||
|
||||
const WidescreenCheat CheatManager::widescreen_cheats[] =
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit d2657e1267d2ce9399bcc6b9c5b01b465db057b1
|
||||
Subproject commit 4c3d5fce1a4fef4decfbfeaf20f3746ecd209775
|
|
@ -24,6 +24,7 @@
|
|||
#include "imgread/common.h"
|
||||
#include "hw/naomi/naomi_cart.h"
|
||||
#include "reios/reios.h"
|
||||
#include "hw/sh4/modules/mmu.h"
|
||||
#include "hw/sh4/sh4_if.h"
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "hw/sh4/sh4_sched.h"
|
||||
|
@ -32,7 +33,6 @@
|
|||
#include "oslib/audiostream.h"
|
||||
#include "debug/gdb_server.h"
|
||||
#include "hw/pvr/Renderer_if.h"
|
||||
#include "rend/CustomTexture.h"
|
||||
#include "hw/arm7/arm7_rec.h"
|
||||
#include "network/ggpo.h"
|
||||
#include "hw/mem/mem_watch.h"
|
||||
|
@ -209,7 +209,8 @@ static void loadSpecialSettings()
|
|||
|| prod_id == "T40505D 50" // Railroad Tycoon 2 (EU)
|
||||
|| prod_id == "T18702M" // Miss Moonlight
|
||||
|| prod_id == "T0019M" // KenJu Atomiswave DC Conversion
|
||||
|| prod_id == "T0020M") // Force Five Atomiswave DC Conversion
|
||||
|| prod_id == "T0020M" // Force Five Atomiswave DC Conversion
|
||||
|| prod_id == "HDR-0187") // Fushigi no Dungeon - Fuurai no Shiren Gaiden - Onna Kenshi Asuka Kenzan!
|
||||
{
|
||||
NOTICE_LOG(BOOT, "Forcing real BIOS");
|
||||
config::UseReios.override(false);
|
||||
|
|
|
@ -20,14 +20,13 @@
|
|||
*/
|
||||
#pragma once
|
||||
#include "types.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <future>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
#include <map>
|
||||
#include <mutex>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
void loadGameSpecificSettings();
|
||||
void SaveSettings();
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include "profiler/dc_profiler.h"
|
||||
#include "hw/sh4/dyna/blockmanager.h"
|
||||
#include "hw/arm7/arm7.h"
|
||||
#include "cfg/option.h"
|
||||
|
||||
#include <ctime>
|
||||
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#include "hw/gdrom/gdrom_if.h"
|
||||
#include "cfg/option.h"
|
||||
#include "serialize.h"
|
||||
#include "hw/hwreg.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
|
|
|
@ -340,7 +340,7 @@ static ArmOp decodeArmOp(u32 opcode, u32 arm_pc)
|
|||
{
|
||||
// LDR/STR w pc-based offset and write-back
|
||||
op.flags |= ArmOp::OP_SETS_PC;
|
||||
// TODO not supported
|
||||
// Invalid: Write-back must not be specified if R15 is used as the base register
|
||||
op.op_type = ArmOp::FALLBACK;
|
||||
op.arg[0] = ArmOp::Operand(opcode);
|
||||
op.arg[1] = ArmOp::Operand();
|
||||
|
@ -368,8 +368,13 @@ static ArmOp decodeArmOp(u32 opcode, u32 arm_pc)
|
|||
op.arg[1].shift_value = bits.shift_imm;
|
||||
if (op.arg[1].getReg().armreg == RN_PC)
|
||||
{
|
||||
verify(op.arg[1].shift_value == 0 && op.arg[1].shift_type == ArmOp::LSL);
|
||||
op.arg[1] = ArmOp::Operand(arm_pc + 8);
|
||||
// Invalid: r15 cannot be used as the offset register
|
||||
op.op_type = ArmOp::FALLBACK;
|
||||
op.arg[0] = ArmOp::Operand(opcode);
|
||||
op.arg[1] = ArmOp::Operand();
|
||||
op.arg[2] = ArmOp::Operand();
|
||||
op.cycles = 0;
|
||||
return op;
|
||||
}
|
||||
if (op.arg[1].shift_type == ArmOp::RRX && op.arg[1].shift_value == 0)
|
||||
op.flags |= ArmOp::OP_READS_FLAGS;
|
||||
|
|
|
@ -17,10 +17,10 @@
|
|||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
#include "types.h"
|
||||
|
||||
#include <climits>
|
||||
#include <cinttypes>
|
||||
#include "types.h"
|
||||
#include "hw/sh4/sh4_sched.h"
|
||||
|
||||
typedef u8 uint8_t;
|
||||
typedef u16 uint16_t;
|
||||
|
|
|
@ -5,11 +5,13 @@
|
|||
|
||||
#include "gdromv3.h"
|
||||
#include "gdrom_if.h"
|
||||
#include "cfg/option.h"
|
||||
#include "hw/holly/holly_intc.h"
|
||||
#include "hw/holly/sb.h"
|
||||
#include "hw/sh4/modules/dmac.h"
|
||||
#include "hw/sh4/sh4_interpreter.h"
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "hw/sh4/sh4_mmr.h"
|
||||
#include "hw/sh4/sh4_sched.h"
|
||||
#include "imgread/common.h"
|
||||
#include "serialize.h"
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
#include "hw/pvr/spg.h"
|
||||
#include "oslib/audiostream.h"
|
||||
#include "oslib/oslib.h"
|
||||
#include "cfg/option.h"
|
||||
#include "hw/aica/sgc_if.h"
|
||||
#include <zlib.h>
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "hw/sh4/sh4_sched.h"
|
||||
#include "network/ggpo.h"
|
||||
#include "input/gamepad_device.h"
|
||||
|
||||
enum MaplePattern
|
||||
{
|
||||
|
@ -162,12 +161,9 @@ static void maple_DoDma()
|
|||
#else
|
||||
if (GetMemPtr(header_2, 1) == nullptr)
|
||||
{
|
||||
WARN_LOG(MAPLE, "DMA Error: destination not in system ram: %x", header_2);
|
||||
INFO_LOG(MAPLE, "DMA Error: destination not in system ram: %x", header_2);
|
||||
#endif
|
||||
asic_RaiseInterrupt(holly_MAPLE_OVERRUN);
|
||||
SB_MDST = 0;
|
||||
mapleDmaOut.clear();
|
||||
return;
|
||||
header_2 = 0;
|
||||
}
|
||||
|
||||
u32* p_data = (u32 *)GetMemPtr(addr + 8, plen * sizeof(u32));
|
||||
|
@ -274,6 +270,11 @@ static int maple_schd(int tag, int c, int j)
|
|||
{
|
||||
for (const auto& pair : mapleDmaOut)
|
||||
{
|
||||
if (pair.first == 0)
|
||||
{
|
||||
asic_RaiseInterrupt(holly_MAPLE_OVERRUN);
|
||||
continue;
|
||||
}
|
||||
size_t size = pair.second.size() * sizeof(u32);
|
||||
u32 *p = (u32 *)GetMemPtr(pair.first, size);
|
||||
memcpy(p, pair.second.data(), size);
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <array>
|
||||
#include <memory>
|
||||
#include "maple_devs.h"
|
||||
#include "hw/naomi/naomi_cart.h"
|
||||
#include <xxhash.h>
|
||||
|
@ -26,6 +24,10 @@
|
|||
#include "cfg/option.h"
|
||||
#include "network/output.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <memory>
|
||||
|
||||
#define LOGJVS(...) DEBUG_LOG(JVS, __VA_ARGS__)
|
||||
|
||||
u8 *EEPROM;
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
#include "hw/pvr/pvr_mem.h"
|
||||
#include "hw/pvr/elan.h"
|
||||
#include "rend/TexCache.h"
|
||||
#include <array>
|
||||
#include <unordered_map>
|
||||
|
||||
namespace memwatch
|
||||
|
|
|
@ -25,10 +25,13 @@
|
|||
#include "modem_regs.h"
|
||||
#include "hw/holly/holly_intc.h"
|
||||
#include "hw/sh4/sh4_sched.h"
|
||||
#include "oslib/oslib.h"
|
||||
#include "network/picoppp.h"
|
||||
#include "serialize.h"
|
||||
|
||||
#ifndef NDEBUG
|
||||
#include "oslib/oslib.h"
|
||||
#endif
|
||||
|
||||
#define MODEM_COUNTRY_RES 0
|
||||
#define MODEM_COUNTRY_JAP 1
|
||||
#define MODEM_COUNTRY_USA 2
|
||||
|
@ -532,7 +535,6 @@ static void ModemNormalWrite(u32 reg, u32 data)
|
|||
|
||||
case 0x11:
|
||||
LOG("PARSL = %d", modem_regs.reg11.PARSL);
|
||||
die("PARSL");
|
||||
break;
|
||||
|
||||
case 0x14: // ABCODE
|
||||
|
|
|
@ -50,12 +50,19 @@ void M4Cartridge::device_start()
|
|||
{
|
||||
if (m4id == 0)
|
||||
{
|
||||
INFO_LOG(COMMON, "Warning: M4 ID not provided\n");
|
||||
INFO_LOG(NAOMI, "Warning: M4 ID not provided\n");
|
||||
m4id = 0x5504;
|
||||
}
|
||||
|
||||
subkey1 = (m_key_data[0x5e2] << 8) | m_key_data[0x5e0];
|
||||
subkey2 = (m_key_data[0x5e6] << 8) | m_key_data[0x5e4];
|
||||
if (m_key_data != nullptr)
|
||||
{
|
||||
subkey1 = (m_key_data[0x5e2] << 8) | m_key_data[0x5e0];
|
||||
subkey2 = (m_key_data[0x5e6] << 8) | m_key_data[0x5e4];
|
||||
}
|
||||
else
|
||||
{
|
||||
WARN_LOG(NAOMI, "Missing M4 key");
|
||||
}
|
||||
|
||||
enc_init();
|
||||
}
|
||||
|
|
|
@ -62,8 +62,9 @@ private:
|
|||
static const u8 k_sboxes[4][16];
|
||||
|
||||
u16 m4id;
|
||||
u8 *m_key_data = NULL; // 2048 bytes
|
||||
u16 subkey1, subkey2;
|
||||
u8 *m_key_data = nullptr; // 2048 bytes
|
||||
u16 subkey1 = 0;
|
||||
u16 subkey2 = 0;
|
||||
u16 one_round[0x10000];
|
||||
|
||||
u8 buffer[32768];
|
||||
|
|
|
@ -2,14 +2,13 @@
|
|||
This file is a mix of my code, Zezu's, and duno wtf-else (most likely ElSemi's ?)
|
||||
*/
|
||||
#include "types.h"
|
||||
#include "cfg/cfg.h"
|
||||
#include "hw/holly/sb.h"
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "hw/holly/holly_intc.h"
|
||||
#include "hw/maple/maple_cfg.h"
|
||||
#include "hw/sh4/sh4_sched.h"
|
||||
#include "hw/sh4/modules/dmac.h"
|
||||
#include "hw/aica/aica_if.h"
|
||||
#include "hw/hwreg.h"
|
||||
|
||||
#include "naomi.h"
|
||||
#include "naomi_cart.h"
|
||||
|
@ -18,6 +17,8 @@
|
|||
#include "serialize.h"
|
||||
#include "network/output.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
static NaomiM3Comm m3comm;
|
||||
Multiboard *multiboard;
|
||||
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
#include "types.h"
|
||||
#include "emulator.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
struct RomBootID
|
||||
{
|
||||
char boardName[16];
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "network/naomi_network.h"
|
||||
#include "emulator.h"
|
||||
#include "rend/gui.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <memory>
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
#include "Renderer_if.h"
|
||||
#include "spg.h"
|
||||
#include "hw/pvr/pvr_mem.h"
|
||||
#include "rend/TexCache.h"
|
||||
#include "rend/transform_matrix.h"
|
||||
#include "cfg/option.h"
|
||||
#include "emulator.h"
|
||||
#include "serialize.h"
|
||||
#include "hw/holly/holly_intc.h"
|
||||
#include "hw/sh4/sh4_if.h"
|
||||
#include "profiler/fc_profiler.h"
|
||||
|
||||
#include <mutex>
|
||||
|
|
|
@ -55,16 +55,14 @@
|
|||
#include "ta_ctx.h"
|
||||
#include "hw/holly/holly_intc.h"
|
||||
#include "hw/holly/sb.h"
|
||||
#include "hw/pvr/Renderer_if.h"
|
||||
#include "hw/sh4/sh4_sched.h"
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "emulator.h"
|
||||
#include "hw/sh4/sh4_mmr.h"
|
||||
#include "serialize.h"
|
||||
#include "elan_struct.h"
|
||||
#include "network/ggpo.h"
|
||||
#include "cfg/option.h"
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtx/transform.hpp>
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
|
||||
namespace elan {
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "hw/holly/sb.h"
|
||||
#include "hw/sh4/modules/dmac.h"
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "hw/sh4/sh4_mmr.h"
|
||||
|
||||
static void RegWrite_SB_C2DST(u32 addr, u32 data)
|
||||
{
|
||||
|
|
|
@ -3,12 +3,15 @@
|
|||
#include "hw/holly/holly_intc.h"
|
||||
#include "hw/holly/sb.h"
|
||||
#include "hw/sh4/sh4_sched.h"
|
||||
#include "input/gamepad_device.h"
|
||||
#include "oslib/oslib.h"
|
||||
#include "rend/TexCache.h"
|
||||
#include "hw/maple/maple_if.h"
|
||||
#include "serialize.h"
|
||||
#include "network/ggpo.h"
|
||||
#include "hw/pvr/Renderer_if.h"
|
||||
|
||||
#ifdef TEST_AUTOMATION
|
||||
#include "input/gamepad_device.h"
|
||||
#endif
|
||||
|
||||
//SPG emulation; Scanline/Raster beam registers & interrupts
|
||||
|
||||
|
@ -273,9 +276,9 @@ void spg_Reset(bool hard)
|
|||
|
||||
void scheduleRenderDone(TA_context *cntx)
|
||||
{
|
||||
if (cntx)
|
||||
int cycles = 4096;
|
||||
if (cntx != nullptr)
|
||||
{
|
||||
int cycles;
|
||||
if (settings.platform.isNaomi2()) {
|
||||
cycles = 1500000;
|
||||
}
|
||||
|
@ -284,12 +287,10 @@ void scheduleRenderDone(TA_context *cntx)
|
|||
int size = 0;
|
||||
for (TA_context *c = cntx; c != nullptr; c = c->nextContext)
|
||||
size += c->tad.thd_data - c->tad.thd_root;
|
||||
cycles = std::min(200000 + size * 3, 1500000);
|
||||
cycles = std::min(550000 + size * 100, 1500000);
|
||||
}
|
||||
sh4_sched_request(render_end_schid, cycles);
|
||||
}
|
||||
else
|
||||
sh4_sched_request(render_end_schid, 4096);
|
||||
sh4_sched_request(render_end_schid, cycles);
|
||||
}
|
||||
|
||||
void spg_Serialize(Serializer& ser)
|
||||
|
|
|
@ -3,6 +3,10 @@
|
|||
#include "cfg/option.h"
|
||||
#include "Renderer_if.h"
|
||||
#include "serialize.h"
|
||||
#include "stdclass.h"
|
||||
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
|
||||
extern u32 fskip;
|
||||
static int RenderCount;
|
||||
|
|
|
@ -2,9 +2,11 @@
|
|||
#include "types.h"
|
||||
#include "ta_structs.h"
|
||||
#include "pvr_regs.h"
|
||||
#include "stdclass.h"
|
||||
#include "oslib/oslib.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
|
||||
class BaseTextureCacheData;
|
||||
struct N2LightModel;
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include "cfg/option.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <utility>
|
||||
|
||||
#define TACALL DYNACALL
|
||||
#ifdef NDEBUG
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "hw/sh4/sh4_opcode_list.h"
|
||||
#include "hw/sh4/sh4_sched.h"
|
||||
#include "hw/sh4/modules/mmu.h"
|
||||
|
||||
|
||||
#if defined(__unix__) && defined(DYNA_OPROF)
|
||||
|
|
|
@ -7,10 +7,8 @@
|
|||
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "hw/sh4/modules/mmu.h"
|
||||
#include "cfg/option.h"
|
||||
|
||||
#include <ctime>
|
||||
#include <cfloat>
|
||||
|
||||
#include "blockmanager.h"
|
||||
#include "ngen.h"
|
||||
|
@ -267,14 +265,17 @@ DynarecCodeEntryPtr DYNACALL rdv_BlockCheckFail(u32 addr)
|
|||
if (mmu_enabled())
|
||||
{
|
||||
RuntimeBlockInfoPtr block = bm_GetBlock(addr);
|
||||
blockcheck_failures = block->blockcheck_failures + 1;
|
||||
if (blockcheck_failures > 5)
|
||||
if (block)
|
||||
{
|
||||
bool inserted = smc_hotspots.insert(addr).second;
|
||||
if (inserted)
|
||||
DEBUG_LOG(DYNAREC, "rdv_BlockCheckFail SMC hotspot @ %08x fails %d", addr, blockcheck_failures);
|
||||
blockcheck_failures = block->blockcheck_failures + 1;
|
||||
if (blockcheck_failures > 5)
|
||||
{
|
||||
bool inserted = smc_hotspots.insert(addr).second;
|
||||
if (inserted)
|
||||
DEBUG_LOG(DYNAREC, "rdv_BlockCheckFail SMC hotspot @ %08x fails %d", addr, blockcheck_failures);
|
||||
}
|
||||
bm_DiscardBlock(block.get());
|
||||
}
|
||||
bm_DiscardBlock(block.get());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include "types.h"
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "hw/sh4/sh4_mmr.h"
|
||||
|
||||
#include "ngen.h"
|
||||
#include "hw/sh4/sh4_core.h"
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
#include <cstdio>
|
||||
#include <set>
|
||||
#include <map>
|
||||
#include <cmath>
|
||||
#include "types.h"
|
||||
#include "decoder.h"
|
||||
#include "hw/sh4/modules/mmu.h"
|
||||
|
|
|
@ -19,13 +19,15 @@
|
|||
along with reicast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
#include <map>
|
||||
#include <deque>
|
||||
#include "types.h"
|
||||
#include "decoder.h"
|
||||
#include "hw/sh4/modules/mmu.h"
|
||||
#include "ssa.h"
|
||||
|
||||
#include <deque>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
#define ssa_printf(...) DEBUG_LOG(DYNAREC, __VA_ARGS__)
|
||||
|
||||
template<typename nreg_t, typename nregf_t, bool AllocVec2 = false>
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
#include "../sh4_interrupts.h"
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "../sh4_sched.h"
|
||||
#include "hw/holly/sb.h"
|
||||
#include "../sh4_cache.h"
|
||||
#include "debug/gdb_server.h"
|
||||
|
||||
|
|
|
@ -9,9 +9,14 @@
|
|||
#include "hw/sh4/sh4_mmr.h"
|
||||
#include "hw/sh4/sh4_core.h"
|
||||
#include "hw/sh4/modules/ccn.h"
|
||||
#include "hw/sh4/modules/mmu.h"
|
||||
#include "hw/sh4/sh4_interrupts.h"
|
||||
#include "hw/sh4/sh4_cache.h"
|
||||
#include "debug/gdb_server.h"
|
||||
#include "hw/sh4/dyna/decoder.h"
|
||||
|
||||
#ifdef STRICT_MODE
|
||||
#include "hw/sh4/sh4_cache.h"
|
||||
#endif
|
||||
|
||||
#define iNimp cpu_iNimp
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include "types.h"
|
||||
#include "hw/hwreg.h"
|
||||
#include "hw/sh4/sh4_mmr.h"
|
||||
|
||||
//Init term res
|
||||
|
|
|
@ -25,8 +25,6 @@
|
|||
#ifdef FAST_MMU
|
||||
|
||||
#include "hw/mem/_vmem.h"
|
||||
|
||||
#include "ccn.h"
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
|
||||
extern TLB_Entry UTLB[64];
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "mmu.h"
|
||||
#include "hw/mem/_vmem.h"
|
||||
#include "hw/sh4/sh4_if.h"
|
||||
#include "hw/sh4/sh4_interrupts.h"
|
||||
#include "hw/sh4/sh4_core.h"
|
||||
|
@ -20,15 +21,11 @@ This is mostly hacked-on as the core was never meant to have mmu support
|
|||
There are two modes, one with 'full' mmu emulation (for wince/bleem/wtfever)
|
||||
and a fast-hack mode for 1mb sqremaps (for katana)
|
||||
*/
|
||||
#include "mmu.h"
|
||||
#include "hw/sh4/sh4_if.h"
|
||||
#ifndef FAST_MMU
|
||||
#include "ccn.h"
|
||||
#include "hw/sh4/sh4_interrupts.h"
|
||||
#include "hw/sh4/sh4_if.h"
|
||||
#endif
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
|
||||
#include "hw/mem/_vmem.h"
|
||||
|
||||
//#define TRACE_WINCE_SYSCALLS
|
||||
|
||||
#ifdef TRACE_WINCE_SYSCALLS
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#pragma once
|
||||
#include "types.h"
|
||||
#include "hw/sh4/sh4_mmr.h"
|
||||
#include "hw/mem/_vmem.h"
|
||||
#include "cfg/option.h"
|
||||
#include "hw/sh4/dyna/ngen.h"
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
The rtc isn't working on dreamcast I'm told
|
||||
*/
|
||||
#include "types.h"
|
||||
#include "hw/hwreg.h"
|
||||
#include "hw/sh4/sh4_mmr.h"
|
||||
|
||||
//Init term res
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
//ubc is disabled on dreamcast and can't be used ... but kos-debug uses it !...
|
||||
|
||||
#include "types.h"
|
||||
#include "hw/hwreg.h"
|
||||
#include "hw/sh4/sh4_mmr.h"
|
||||
|
||||
//Init term res
|
||||
|
|
|
@ -16,9 +16,9 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with reicast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifdef TRACE_WINCE_SYSCALLS
|
||||
#include "hw/sh4/sh4_sched.h"
|
||||
|
||||
#ifdef TRACE_WINCE_SYSCALLS
|
||||
#define PUserKData 0x00005800
|
||||
#define SYSHANDLE_OFFSET 0x004
|
||||
#define SYS_HANDLE_BASE 64
|
||||
|
|
|
@ -9,9 +9,13 @@
|
|||
#include "sh4_mmr.h"
|
||||
#include "hw/pvr/elan.h"
|
||||
#include "hw/pvr/pvr_mem.h"
|
||||
#include "hw/sh4/sh4_core.h"
|
||||
#include "cfg/option.h"
|
||||
#include "hw/mem/_vmem.h"
|
||||
#include "hw/sh4/modules/mmu.h"
|
||||
|
||||
#ifdef STRICT_MODE
|
||||
#include "sh4_cache.h"
|
||||
#endif
|
||||
|
||||
//main system mem
|
||||
VArray2 mem_b;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
extern VArray2 mem_b;
|
||||
|
||||
#include "hw/mem/_vmem.h"
|
||||
#include "modules/mmu.h"
|
||||
#include "sh4_if.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
typedef u8 (DYNACALL *ReadMem8Func)(u32 addr);
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
Sh4 internal register routing (P4 & 'area 7')
|
||||
*/
|
||||
#include <array>
|
||||
#include "types.h"
|
||||
#include "sh4_mmr.h"
|
||||
|
||||
|
@ -11,6 +10,9 @@
|
|||
#include "modules/modules.h"
|
||||
#include "sh4_cache.h"
|
||||
|
||||
#include <array>
|
||||
#include <map>
|
||||
|
||||
//64bytes of sq // now on context ~
|
||||
|
||||
std::array<u8, OnChipRAM_SIZE> OnChipRAM;
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
#include "types.h"
|
||||
#include "sh4_interrupts.h"
|
||||
#include "sh4_core.h"
|
||||
#include "sh4_if.h"
|
||||
#include "sh4_sched.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
|
||||
//sh4 scheduler
|
||||
|
||||
/*
|
||||
|
|
|
@ -24,11 +24,10 @@
|
|||
#include "emulator.h"
|
||||
#include "hw/maple/maple_devs.h"
|
||||
#include "hw/naomi/card_reader.h"
|
||||
#include "stdclass.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <climits>
|
||||
#include <fstream>
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
|
||||
#define MAPLE_PORT_CFG_PREFIX "maple_"
|
||||
|
||||
|
@ -49,6 +48,7 @@ std::mutex GamepadDevice::_gamepads_mutex;
|
|||
|
||||
#ifdef TEST_AUTOMATION
|
||||
#include "hw/sh4/sh4_sched.h"
|
||||
#include <cstdio>
|
||||
static FILE *record_input;
|
||||
#endif
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
#pragma once
|
||||
#include "types.h"
|
||||
#include "cfg/option.h"
|
||||
#include "gamepad_device.h"
|
||||
#include "rend/gui.h"
|
||||
#include <memory>
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "mouse.h"
|
||||
#include "cfg/option.h"
|
||||
#include "rend/gui.h"
|
||||
|
||||
// Mouse buttons
|
||||
|
|
|
@ -4,16 +4,17 @@
|
|||
#include "types.h"
|
||||
|
||||
#if defined(__unix__) || defined(__SWITCH__)
|
||||
#include "hw/sh4/dyna/blockmanager.h"
|
||||
#include "log/LogManager.h"
|
||||
#include "emulator.h"
|
||||
#include "rend/mainui.h"
|
||||
#include "oslib/directory.h"
|
||||
#include "oslib/oslib.h"
|
||||
#include "stdclass.h"
|
||||
|
||||
#include <cstdarg>
|
||||
#include <csignal>
|
||||
#include <string>
|
||||
#include <unistd.h>
|
||||
#include <vector>
|
||||
|
||||
#if defined(__SWITCH__)
|
||||
#include "nswitch.h"
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
#include <sys/time.h>
|
||||
#if defined(__linux__) && !defined(__ANDROID__)
|
||||
#include <sys/personality.h>
|
||||
#endif
|
||||
#if !defined(TARGET_BSD) && !defined(__ANDROID__) && defined(TARGET_VIDEOCORE)
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
#include <unistd.h>
|
||||
|
|
|
@ -71,20 +71,22 @@ static void getLocalInput(MapleInputState inputState[4])
|
|||
#include "emulator.h"
|
||||
#include "rend/gui.h"
|
||||
#include "hw/mem/mem_watch.h"
|
||||
#include "hw/sh4/sh4_sched.h"
|
||||
#include <string.h>
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
#include <mutex>
|
||||
#include <unordered_map>
|
||||
#include <numeric>
|
||||
#include <xxhash.h>
|
||||
#include "imgui/imgui.h"
|
||||
#include "miniupnp.h"
|
||||
#include "hw/naomi/naomi_cart.h"
|
||||
|
||||
//#define SYNC_TEST 1
|
||||
|
||||
#ifdef SYNC_TEST
|
||||
#include <xxhash.h>
|
||||
#endif
|
||||
|
||||
namespace ggpo
|
||||
{
|
||||
using namespace std::chrono;
|
||||
|
|
|
@ -20,9 +20,11 @@
|
|||
#ifndef FEAT_NO_MINIUPNPC
|
||||
#include <miniupnpc.h>
|
||||
#include <upnpcommands.h>
|
||||
#include "types.h"
|
||||
#include "log/Log.h"
|
||||
#include "miniupnp.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
#ifndef UPNP_LOCAL_PORT_ANY
|
||||
#define UPNP_LOCAL_PORT_ANY 0
|
||||
#endif
|
||||
|
|
|
@ -17,11 +17,14 @@
|
|||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include <utility>
|
||||
#ifndef FEAT_NO_MINIUPNPC
|
||||
#include <miniupnpc.h>
|
||||
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
class MiniUPnP
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
#include "hw/naomi/naomi_cart.h"
|
||||
#include "hw/naomi/naomi_flashrom.h"
|
||||
#include "cfg/option.h"
|
||||
#include "rend/gui.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
|
|
|
@ -20,11 +20,13 @@
|
|||
#include "types.h"
|
||||
#include "net_platform.h"
|
||||
#include "miniupnp.h"
|
||||
#include "rend/gui.h"
|
||||
#include "cfg/option.h"
|
||||
#include "emulator.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <atomic>
|
||||
#include <future>
|
||||
#include <vector>
|
||||
|
||||
class NaomiNetwork
|
||||
{
|
||||
|
|
|
@ -24,7 +24,10 @@
|
|||
#endif
|
||||
|
||||
#include "stdclass.h"
|
||||
|
||||
#ifdef BBA_PCAPNG_DUMP
|
||||
#include "oslib/oslib.h"
|
||||
#endif
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#define _POSIX_SOURCE
|
||||
|
@ -43,7 +46,6 @@ extern "C" {
|
|||
#include "net_platform.h"
|
||||
|
||||
#include "types.h"
|
||||
#include "cfg/cfg.h"
|
||||
#include "picoppp.h"
|
||||
#include "miniupnp.h"
|
||||
#include "reios/reios.h"
|
||||
|
@ -908,7 +910,8 @@ static void *pico_thread_func(void *)
|
|||
memcpy(&dnsaddr.addr, &addr, sizeof(addr));
|
||||
|
||||
// Create ppp/eth device
|
||||
if (!config::EmulateBBA)
|
||||
const bool usingPPP = !config::EmulateBBA;
|
||||
if (usingPPP)
|
||||
{
|
||||
// PPP
|
||||
pico_dev = pico_ppp_create();
|
||||
|
@ -1054,7 +1057,7 @@ static void *pico_thread_func(void *)
|
|||
|
||||
if (pico_dev)
|
||||
{
|
||||
if (!config::EmulateBBA)
|
||||
if (usingPPP)
|
||||
{
|
||||
pico_ppp_destroy(pico_dev);
|
||||
}
|
||||
|
|
|
@ -108,17 +108,17 @@ void dc_savestate(int index)
|
|||
|
||||
std::string filename = hostfs::getSavestatePath(index, true);
|
||||
#if 0
|
||||
FILE *f = nowide::fopen(filename.c_str(), "wb") ;
|
||||
FILE *f = nowide::fopen(filename.c_str(), "wb");
|
||||
|
||||
if ( f == NULL )
|
||||
{
|
||||
WARN_LOG(SAVESTATE, "Failed to save state - could not open %s for writing", filename.c_str()) ;
|
||||
WARN_LOG(SAVESTATE, "Failed to save state - could not open %s for writing", filename.c_str());
|
||||
gui_display_notification("Cannot open save file", 2000);
|
||||
free(data);
|
||||
return;
|
||||
}
|
||||
|
||||
std::fwrite(data, 1, ser.size(), f) ;
|
||||
std::fwrite(data, 1, ser.size(), f);
|
||||
std::fclose(f);
|
||||
#else
|
||||
RZipFile zipFile;
|
||||
|
@ -141,7 +141,7 @@ void dc_savestate(int index)
|
|||
#endif
|
||||
|
||||
free(data);
|
||||
INFO_LOG(SAVESTATE, "Saved state to %s size %d", filename.c_str(), (int)ser.size()) ;
|
||||
NOTICE_LOG(SAVESTATE, "Saved state to %s size %d", filename.c_str(), (int)ser.size());
|
||||
gui_display_notification("State saved", 1000);
|
||||
}
|
||||
|
||||
|
@ -169,11 +169,11 @@ void dc_loadstate(int index)
|
|||
}
|
||||
else
|
||||
{
|
||||
f = nowide::fopen(filename.c_str(), "rb") ;
|
||||
f = nowide::fopen(filename.c_str(), "rb");
|
||||
|
||||
if ( f == NULL )
|
||||
{
|
||||
WARN_LOG(SAVESTATE, "Failed to load state - could not open %s for reading", filename.c_str()) ;
|
||||
WARN_LOG(SAVESTATE, "Failed to load state - could not open %s for reading", filename.c_str());
|
||||
gui_display_notification("Save state not found", 2000);
|
||||
return;
|
||||
}
|
||||
|
@ -185,9 +185,9 @@ void dc_loadstate(int index)
|
|||
std::fseek(f, 0, SEEK_SET);
|
||||
}
|
||||
void *data = malloc(total_size);
|
||||
if ( data == NULL )
|
||||
if (data == nullptr)
|
||||
{
|
||||
WARN_LOG(SAVESTATE, "Failed to load state - could not malloc %d bytes", total_size) ;
|
||||
WARN_LOG(SAVESTATE, "Failed to load state - could not malloc %d bytes", total_size);
|
||||
gui_display_notification("Failed to load state - memory full", 2000);
|
||||
if (f != nullptr)
|
||||
std::fclose(f);
|
||||
|
@ -204,7 +204,7 @@ void dc_loadstate(int index)
|
|||
}
|
||||
else
|
||||
{
|
||||
read_size = fread(data, 1, total_size, f) ;
|
||||
read_size = fread(data, 1, total_size, f);
|
||||
std::fclose(f);
|
||||
}
|
||||
if (read_size != total_size)
|
||||
|
@ -218,6 +218,7 @@ void dc_loadstate(int index)
|
|||
try {
|
||||
Deserializer deser(data, total_size);
|
||||
dc_loadstate(deser);
|
||||
NOTICE_LOG(SAVESTATE, "Loaded state ver %d from %s size %d", deser.version(), filename.c_str(), total_size);
|
||||
if (deser.size() != total_size)
|
||||
WARN_LOG(SAVESTATE, "Savestate size %d but only %d bytes used", total_size, (int)deser.size());
|
||||
} catch (const Deserializer::Exception& e) {
|
||||
|
@ -226,7 +227,6 @@ void dc_loadstate(int index)
|
|||
|
||||
free(data);
|
||||
EventManager::event(Event::LoadState);
|
||||
INFO_LOG(SAVESTATE, "Loaded state from %s size %d", filename.c_str(), total_size) ;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include "audiostream.h"
|
||||
#include <alsa/asoundlib.h>
|
||||
#include "cfg/cfg.h"
|
||||
#include "cfg/option.h"
|
||||
|
||||
class AlsaAudioBackend : public AudioBackend
|
||||
{
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
*/
|
||||
#if defined(__APPLE__)
|
||||
#include "audiostream.h"
|
||||
#include "cfg/option.h"
|
||||
#include "stdclass.h"
|
||||
|
||||
#include <atomic>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "build.h"
|
||||
#if defined(_WIN32) && !defined(TARGET_UWP)
|
||||
#include "audiostream.h"
|
||||
#include "cfg/option.h"
|
||||
#include <initguid.h>
|
||||
#include <dsound.h>
|
||||
#include <vector>
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
#ifdef USE_OBOE
|
||||
#include "audiostream.h"
|
||||
#include "cfg/option.h"
|
||||
#include <oboe/Oboe.h>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#if USE_OMX
|
||||
#include "audiostream.h"
|
||||
#include "cfg/option.h"
|
||||
#include <IL/OMX_Broadcom.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#ifdef USE_PULSEAUDIO
|
||||
#include "audiostream.h"
|
||||
#include "cfg/option.h"
|
||||
#include <pulse/pulseaudio.h>
|
||||
|
||||
class PulseAudioBackend : public AudioBackend
|
||||
|
|
|
@ -2,10 +2,12 @@
|
|||
|
||||
#include <SDL.h>
|
||||
#include "audiostream.h"
|
||||
#include "cfg/option.h"
|
||||
#include "stdclass.h"
|
||||
|
||||
#include <mutex>
|
||||
#include <algorithm>
|
||||
#include <atomic>
|
||||
#include <mutex>
|
||||
|
||||
class SDLAudioBackend : AudioBackend
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#include "audiostream.h"
|
||||
#include <memory>
|
||||
#include "cfg/option.h"
|
||||
|
||||
struct SoundFrame { s16 l; s16 r; };
|
||||
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
#pragma once
|
||||
#include "types.h"
|
||||
#include "cfg/option.h"
|
||||
#include <vector>
|
||||
|
||||
#include <algorithm>
|
||||
#include <atomic>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class AudioBackend
|
||||
{
|
||||
|
|
|
@ -220,7 +220,7 @@ void uploadCrashes(const std::string& directory)
|
|||
NOTICE_LOG(COMMON, "Uploading minidump %s", line);
|
||||
std::vector<http::PostField> fields;
|
||||
fields.emplace_back("upload_file_minidump", dmpfile, "application/octet-stream");
|
||||
fields.emplace_back("flycast_version", std::string(GIT_VERSION));
|
||||
fields.emplace_back("sentry[release]", std::string(GIT_VERSION));
|
||||
if (file_exists(logfile))
|
||||
fields.emplace_back("flycast_log", logfile, "text/plain");
|
||||
// TODO config, gpu/driver, ...
|
||||
|
|
|
@ -11,7 +11,6 @@ using namespace Xbyak::util;
|
|||
#include "types.h"
|
||||
#include "hw/sh4/sh4_opcode_list.h"
|
||||
#include "hw/sh4/dyna/ngen.h"
|
||||
#include "hw/sh4/modules/ccn.h"
|
||||
#include "hw/sh4/modules/mmu.h"
|
||||
#include "hw/sh4/sh4_interrupts.h"
|
||||
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
*/
|
||||
|
||||
#include "descrambl.h"
|
||||
#include <algorithm>
|
||||
|
||||
#include <utility>
|
||||
|
||||
#define MAXCHUNK (2048*1024)
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include "hw/holly/holly_intc.h"
|
||||
#include "reios.h"
|
||||
#include "imgread/common.h"
|
||||
#include "hw/sh4/modules/mmu.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
|
@ -716,7 +717,7 @@ void gdrom_hle_op()
|
|||
// r4 = request id
|
||||
//
|
||||
// Returns: GDC_OK, GDC_ERR
|
||||
WARN_LOG(REIOS, "GDROM: HLE GDROM_ABORT_COMMAND req id%x", r[4]);
|
||||
INFO_LOG(REIOS, "GDROM: HLE GDROM_ABORT_COMMAND req id%x", r[4]);
|
||||
if (r[4] == gd_hle_state.last_request_id
|
||||
&& (gd_hle_state.status == GDC_CONTINUE || gd_hle_state.status == GDC_BUSY || gd_hle_state.status == GDC_COMPLETE))
|
||||
{
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
#include "hw/sh4/sh4_core.h"
|
||||
#undef r
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "hw/holly/sb_mem.h"
|
||||
#include "hw/holly/sb.h"
|
||||
#include "hw/naomi/naomi_cart.h"
|
||||
#include "font.h"
|
||||
|
@ -28,6 +27,7 @@
|
|||
#include "imgread/common.h"
|
||||
#include "imgread/isofs.h"
|
||||
#include "oslib/oslib.h"
|
||||
#include "hw/sh4/sh4_mmr.h"
|
||||
|
||||
#include <map>
|
||||
|
||||
|
@ -69,11 +69,6 @@ static bool reios_locate_bootfile(const char* bootfile)
|
|||
return false;
|
||||
}
|
||||
reios_pre_init();
|
||||
if (ip_meta.wince == '1' && descrambl)
|
||||
{
|
||||
ERROR_LOG(REIOS, "Unsupported CDI: wince == '1'");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Load IP.BIN bootstrap
|
||||
libGDR_ReadSector(GetMemPtr(0x8c008000, 0), base_fad, 16, 2048);
|
||||
|
@ -95,7 +90,7 @@ static bool reios_locate_bootfile(const char* bootfile)
|
|||
|
||||
u32 offset = 0;
|
||||
u32 size = bootFile->getSize();
|
||||
if (ip_meta.wince == '1')
|
||||
if (ip_meta.wince == '1' && !descrambl)
|
||||
{
|
||||
bootFile->read(GetMemPtr(0x8ce01000, 2048), 2048);
|
||||
offset = 2048;
|
||||
|
@ -394,6 +389,9 @@ static void reios_setup_state(u32 boot_addr)
|
|||
aicaWriteReg(SCILV1_addr, (u8)0x50);
|
||||
aicaWriteReg(SCILV2_addr, (u8)0x08);
|
||||
|
||||
// KOS seems to expect this
|
||||
DMAC_DMAOR.full = 0x8201;
|
||||
|
||||
// WinCE needs this to detect PAL
|
||||
if (config::Broadcast == 1)
|
||||
BSC_PDTRA.full = 4;
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with reicast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "TexCache.h"
|
||||
#include "CustomTexture.h"
|
||||
#include "cfg/cfg.h"
|
||||
#include "oslib/directory.h"
|
||||
#include "cfg/option.h"
|
||||
#include "oslib/oslib.h"
|
||||
|
@ -182,6 +182,11 @@ void CustomTexture::DumpTexture(u32 hash, int w, int h, TextureType textype, voi
|
|||
|
||||
u16 *src = (u16 *)src_buffer;
|
||||
u8 *dst_buffer = (u8 *)malloc(w * h * 4); // 32-bit per pixel
|
||||
if (dst_buffer == nullptr)
|
||||
{
|
||||
ERROR_LOG(RENDERER, "Dump texture: out of memory");
|
||||
return;
|
||||
}
|
||||
u8 *dst = dst_buffer;
|
||||
|
||||
for (int y = 0; y < h; y++)
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
#include "deps/xbrz/xbrz.h"
|
||||
#include "hw/pvr/pvr_mem.h"
|
||||
#include "hw/mem/_vmem.h"
|
||||
#include "hw/sh4/modules/mmu.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <mutex>
|
||||
|
|
|
@ -6,8 +6,10 @@
|
|||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <atomic>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
#include <utility>
|
||||
|
||||
extern const u8 *vq_codebook;
|
||||
extern u32 palette_index;
|
||||
|
@ -697,6 +699,9 @@ public:
|
|||
static void SetDirectXColorOrder(bool enabled);
|
||||
};
|
||||
|
||||
// TODO Split the texture cache in a separate header
|
||||
#include "CustomTexture.h"
|
||||
|
||||
template<typename Texture>
|
||||
class BaseTextureCache
|
||||
{
|
||||
|
@ -785,6 +790,7 @@ public:
|
|||
|
||||
void Clear()
|
||||
{
|
||||
custom_texture.Terminate();
|
||||
for (auto& pair : cache)
|
||||
pair.second.Delete();
|
||||
|
||||
|
|
|
@ -19,10 +19,13 @@
|
|||
#pragma once
|
||||
#include "scraper.h"
|
||||
#include "stdclass.h"
|
||||
#include <unordered_map>
|
||||
#include <memory>
|
||||
|
||||
#include <future>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
struct GameMedia;
|
||||
|
||||
|
|
|
@ -16,10 +16,13 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <map>
|
||||
#include "scraper.h"
|
||||
#include "json.hpp"
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace nlohmann;
|
||||
|
||||
class TheGamesDb : public Scraper
|
||||
|
|
|
@ -17,13 +17,13 @@
|
|||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "types.h"
|
||||
#include "json.hpp"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace nlohmann;
|
||||
|
||||
struct GameBoxart
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "hw/pvr/pvr_mem.h"
|
||||
#include "rend/gui.h"
|
||||
#include "rend/tileclip.h"
|
||||
#include "rend/sorter.h"
|
||||
|
||||
const D3D11_INPUT_ELEMENT_DESC MainLayout[]
|
||||
{
|
||||
|
@ -41,6 +42,11 @@ bool DX11Renderer::Init()
|
|||
NOTICE_LOG(RENDERER, "DX11 renderer initializing");
|
||||
device = theDX11Context.getDevice();
|
||||
deviceContext = theDX11Context.getDeviceContext();
|
||||
if (!device || !deviceContext)
|
||||
{
|
||||
WARN_LOG(RENDERER, "Null device or device context. Aborting");
|
||||
return false;
|
||||
}
|
||||
|
||||
shaders = &theDX11Context.getShaders();
|
||||
samplers = &theDX11Context.getSamplers();
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
#include "dx11_quad.h"
|
||||
#include "dx11_texture.h"
|
||||
#include "dx11_shaders.h"
|
||||
#include "rend/sorter.h"
|
||||
#include "dx11_renderstate.h"
|
||||
#include "dx11_naomi2.h"
|
||||
#ifndef LIBRETRO
|
||||
|
|
|
@ -141,8 +141,11 @@ bool DX11Context::init(bool keepCurrentWindow)
|
|||
|
||||
hr = dxgiFactory->CreateSwapChain(pDevice, &desc, &swapchain.get());
|
||||
}
|
||||
if (FAILED(hr))
|
||||
if (FAILED(hr)) {
|
||||
WARN_LOG(RENDERER, "D3D11 swap chain creation failed: %x", hr);
|
||||
pDevice.reset();
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifndef TARGET_UWP
|
||||
// Prevent DXGI from monitoring our message queue for ALT+Enter
|
||||
|
@ -193,7 +196,11 @@ void DX11Context::Present()
|
|||
frameRendered = false;
|
||||
bool swapOnVSync = !settings.input.fastForwardMode && config::VSync;
|
||||
HRESULT hr;
|
||||
if (swapOnVSync)
|
||||
if (!swapchain)
|
||||
{
|
||||
hr = DXGI_ERROR_DEVICE_RESET;
|
||||
}
|
||||
else if (swapOnVSync)
|
||||
{
|
||||
int swapInterval = std::min(4, std::max(1, (int)(settings.display.refreshRate / 60)));
|
||||
hr = swapchain->Present(swapInterval, 0);
|
||||
|
@ -213,25 +220,27 @@ void DX11Context::Present()
|
|||
|
||||
void DX11Context::EndImGuiFrame()
|
||||
{
|
||||
verify((bool)pDevice);
|
||||
if (!overlayOnly)
|
||||
if (pDevice && pDeviceContext && renderTargetView)
|
||||
{
|
||||
pDeviceContext->OMSetRenderTargets(1, &renderTargetView.get(), nullptr);
|
||||
const FLOAT black[4] { 0.f, 0.f, 0.f, 1.f };
|
||||
pDeviceContext->ClearRenderTargetView(renderTargetView, black);
|
||||
if (renderer != nullptr)
|
||||
renderer->RenderLastFrame();
|
||||
if (!overlayOnly)
|
||||
{
|
||||
pDeviceContext->OMSetRenderTargets(1, &renderTargetView.get(), nullptr);
|
||||
const FLOAT black[4] { 0.f, 0.f, 0.f, 1.f };
|
||||
pDeviceContext->ClearRenderTargetView(renderTargetView, black);
|
||||
if (renderer != nullptr)
|
||||
renderer->RenderLastFrame();
|
||||
}
|
||||
if (overlayOnly)
|
||||
{
|
||||
if (crosshairsNeeded() || config::FloatVMUs)
|
||||
overlay.draw(settings.display.width, settings.display.height, config::FloatVMUs, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
overlay.draw(settings.display.width, settings.display.height, true, false);
|
||||
}
|
||||
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
|
||||
}
|
||||
if (overlayOnly)
|
||||
{
|
||||
if (crosshairsNeeded() || config::FloatVMUs)
|
||||
overlay.draw(settings.display.width, settings.display.height, config::FloatVMUs, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
overlay.draw(settings.display.width, settings.display.height, true, false);
|
||||
}
|
||||
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
|
||||
frameRendered = true;
|
||||
}
|
||||
|
||||
|
@ -293,6 +302,7 @@ void DX11Context::resize()
|
|||
swapchain->GetDesc(&desc);
|
||||
settings.display.width = desc.BufferDesc.Width;
|
||||
settings.display.height = desc.BufferDesc.Height;
|
||||
NOTICE_LOG(RENDERER, "Swapchain resized: %d x %d", desc.BufferDesc.Width, desc.BufferDesc.Height);
|
||||
}
|
||||
}
|
||||
// TODO minimized window
|
||||
|
@ -300,10 +310,23 @@ void DX11Context::resize()
|
|||
|
||||
void DX11Context::handleDeviceLost()
|
||||
{
|
||||
if (pDevice)
|
||||
{
|
||||
HRESULT hr = pDevice->GetDeviceRemovedReason();
|
||||
WARN_LOG(RENDERER, "Device removed reason: %x", hr);
|
||||
}
|
||||
rend_term_renderer();
|
||||
term();
|
||||
init(true);
|
||||
rend_init_renderer();
|
||||
if (init(true))
|
||||
{
|
||||
rend_init_renderer();
|
||||
}
|
||||
else
|
||||
{
|
||||
Renderer* rend_norend();
|
||||
renderer = rend_norend();
|
||||
renderer->Init();
|
||||
}
|
||||
}
|
||||
#endif // !LIBRETRO
|
||||
|
||||
|
|
|
@ -22,10 +22,8 @@
|
|||
#include "../dx11context.h"
|
||||
#include "../dx11_renderer.h"
|
||||
#include "rend/transform_matrix.h"
|
||||
#include "../dx11_quad.h"
|
||||
#include "../dx11_texture.h"
|
||||
#include "dx11_oitshaders.h"
|
||||
#include "rend/sorter.h"
|
||||
#include "../dx11_renderstate.h"
|
||||
#include "dx11_oitbuffers.h"
|
||||
#include "dx11_oitshaders.h"
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "rend/osd.h"
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtx/transform.hpp>
|
||||
#include <tuple>
|
||||
|
||||
void D3DOverlay::drawQuad(const RECT& rect, D3DCOLOR color)
|
||||
{
|
||||
|
|
|
@ -65,7 +65,13 @@ public:
|
|||
{
|
||||
ComPtr<IDirect3DTexture9>& texture = textures[name];
|
||||
texture.reset();
|
||||
theDXContext.getDevice()->CreateTexture(width, height, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &texture.get(), 0);
|
||||
HRESULT hr = theDXContext.getDevice()->CreateTexture(width, height, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &texture.get(), 0);
|
||||
if (FAILED(hr) || !texture)
|
||||
{
|
||||
WARN_LOG(RENDERER, "CreateTexture failed (%d x %d): error %x", width, height, hr);
|
||||
textures.erase(name);
|
||||
return ImTextureID();
|
||||
}
|
||||
|
||||
width *= 4;
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "gl4naomi2.h"
|
||||
#include "rend/gl4/gl4.h"
|
||||
|
||||
extern const char *N2VertexShader;
|
||||
extern const char *N2ColorShader;
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
*/
|
||||
#pragma once
|
||||
#include "gl4.h"
|
||||
#include "rend/gles/naomi2.h"
|
||||
|
||||
class N2Vertex4Source : public OpenGl4Source
|
||||
{
|
||||
|
|
|
@ -18,9 +18,9 @@
|
|||
*/
|
||||
#include "gl4.h"
|
||||
#include "rend/gles/glcache.h"
|
||||
#include "rend/gles/naomi2.h"
|
||||
#include "rend/tileclip.h"
|
||||
#include "rend/osd.h"
|
||||
#include "gl4naomi2.h"
|
||||
|
||||
static gl4PipelineShader* CurrentShader;
|
||||
extern u32 gcflip;
|
||||
|
@ -236,7 +236,7 @@ static void SetGPState(const PolyParam* gp)
|
|||
if (nearest_filter)
|
||||
{
|
||||
//nearest-neighbor filtering
|
||||
glSamplerParameteri(texSamplers[i], GL_TEXTURE_MIN_FILTER, mipmapped ? GL_NEAREST_MIPMAP_LINEAR : GL_NEAREST);
|
||||
glSamplerParameteri(texSamplers[i], GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glSamplerParameteri(texSamplers[i], GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -22,7 +22,11 @@
|
|||
#include "rend/osd.h"
|
||||
#include "glsl.h"
|
||||
#include "gl4naomi2.h"
|
||||
#include "rend/gles/naomi2.h"
|
||||
|
||||
#ifdef LIBRETRO
|
||||
#include "rend/gles/postprocess.h"
|
||||
#endif
|
||||
|
||||
//Fragment and vertex shaders code
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include "glcache.h"
|
||||
#include "gles.h"
|
||||
#include "rend/sorter.h"
|
||||
#include "rend/tileclip.h"
|
||||
#include "rend/osd.h"
|
||||
#include "naomi2.h"
|
||||
|
@ -190,7 +189,7 @@ void SetGPState(const PolyParam* gp,u32 cflip=0)
|
|||
if (nearest_filter)
|
||||
{
|
||||
//nearest-neighbor filtering
|
||||
glcache.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mipmapped ? GL_NEAREST_MIPMAP_LINEAR : GL_NEAREST);
|
||||
glcache.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glcache.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include "glcache.h"
|
||||
#include "gles.h"
|
||||
#include "cfg/cfg.h"
|
||||
#include "hw/pvr/ta.h"
|
||||
#ifndef LIBRETRO
|
||||
#include "rend/gui.h"
|
||||
|
@ -15,6 +14,10 @@
|
|||
#include "naomi2.h"
|
||||
#include "rend/gles/postprocess.h"
|
||||
|
||||
#ifdef TEST_AUTOMATION
|
||||
#include "cfg/cfg.h"
|
||||
#endif
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#ifdef GLES
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
#include "hw/pvr/pvr_mem.h"
|
||||
#include "rend/TexCache.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <memory>
|
||||
|
||||
GlTextureCache TexCache;
|
||||
|
||||
|
|
|
@ -17,9 +17,9 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <array>
|
||||
#include "postprocess.h"
|
||||
#include "cfg/option.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
PostProcessor postProcessor;
|
||||
|
||||
|
|
|
@ -16,23 +16,18 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <mutex>
|
||||
#include "gui.h"
|
||||
#include "osd.h"
|
||||
#include "cfg/cfg.h"
|
||||
#include "hw/maple/maple_if.h"
|
||||
#include "hw/maple/maple_devs.h"
|
||||
#include "hw/naomi/naomi_cart.h"
|
||||
#include "imgui/imgui.h"
|
||||
#include "imgui/roboto_medium.h"
|
||||
#include "network/net_handshake.h"
|
||||
#include "network/ggpo.h"
|
||||
#include "wsi/context.h"
|
||||
#include "input/gamepad_device.h"
|
||||
#include "input/mouse.h"
|
||||
#include "gui_util.h"
|
||||
#include "gui_android.h"
|
||||
#include "game_scanner.h"
|
||||
#include "version.h"
|
||||
#include "oslib/oslib.h"
|
||||
|
@ -51,6 +46,12 @@
|
|||
#include "sdl/sdl.h"
|
||||
#endif
|
||||
|
||||
#ifdef __ANDROID__
|
||||
#include "gui_android.h"
|
||||
#endif
|
||||
|
||||
#include <mutex>
|
||||
|
||||
static bool game_started;
|
||||
|
||||
int insetLeft, insetRight, insetTop, insetBottom;
|
||||
|
@ -432,6 +433,7 @@ void gui_set_insets(int left, int right, int top, int bottom)
|
|||
|
||||
#if 0
|
||||
#include "oslib/timeseries.h"
|
||||
#include <vector>
|
||||
TimeSeries renderTimes;
|
||||
TimeSeries vblankTimes;
|
||||
|
||||
|
@ -518,48 +520,40 @@ static void gui_display_commands()
|
|||
|
||||
ImGui::Begin("##commands", NULL, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize);
|
||||
|
||||
bool loadSaveStateDisabled = settings.content.path.empty() || settings.network.online || settings.naomi.multiboard;
|
||||
if (loadSaveStateDisabled)
|
||||
{
|
||||
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
|
||||
}
|
||||
|
||||
// Load State
|
||||
if (ImGui::Button("Load State", ScaledVec2(110, 50)) && !loadSaveStateDisabled)
|
||||
{
|
||||
gui_state = GuiState::Closed;
|
||||
dc_loadstate(config::SavestateSlot);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
// Slot #
|
||||
std::string slot = "Slot " + std::to_string((int)config::SavestateSlot + 1);
|
||||
if (ImGui::Button(slot.c_str(), ImVec2(80 * settings.display.uiScale - ImGui::GetStyle().FramePadding.x, 50 * settings.display.uiScale)))
|
||||
ImGui::OpenPopup("slot_select_popup");
|
||||
if (ImGui::BeginPopup("slot_select_popup"))
|
||||
{
|
||||
for (int i = 0; i < 10; i++)
|
||||
if (ImGui::Selectable(std::to_string(i + 1).c_str(), config::SavestateSlot == i, 0,
|
||||
ImVec2(ImGui::CalcTextSize("Slot 8").x, 0))) {
|
||||
config::SavestateSlot = i;
|
||||
SaveSettings();
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
ImGui::SameLine();
|
||||
DisabledScope scope(settings.content.path.empty() || settings.network.online || settings.naomi.multiboard);
|
||||
|
||||
// Save State
|
||||
if (ImGui::Button("Save State", ScaledVec2(110, 50)) && !loadSaveStateDisabled)
|
||||
{
|
||||
gui_state = GuiState::Closed;
|
||||
dc_savestate(config::SavestateSlot);
|
||||
}
|
||||
if (loadSaveStateDisabled)
|
||||
{
|
||||
ImGui::PopItemFlag();
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
// Load State
|
||||
if (ImGui::Button("Load State", ScaledVec2(110, 50)) && !scope.isDisabled())
|
||||
{
|
||||
gui_state = GuiState::Closed;
|
||||
dc_loadstate(config::SavestateSlot);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
// Slot #
|
||||
std::string slot = "Slot " + std::to_string((int)config::SavestateSlot + 1);
|
||||
if (ImGui::Button(slot.c_str(), ImVec2(80 * settings.display.uiScale - ImGui::GetStyle().FramePadding.x, 50 * settings.display.uiScale)))
|
||||
ImGui::OpenPopup("slot_select_popup");
|
||||
if (ImGui::BeginPopup("slot_select_popup"))
|
||||
{
|
||||
for (int i = 0; i < 10; i++)
|
||||
if (ImGui::Selectable(std::to_string(i + 1).c_str(), config::SavestateSlot == i, 0,
|
||||
ImVec2(ImGui::CalcTextSize("Slot 8").x, 0))) {
|
||||
config::SavestateSlot = i;
|
||||
SaveSettings();
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
// Save State
|
||||
if (ImGui::Button("Save State", ScaledVec2(110, 50)) && !scope.isDisabled())
|
||||
{
|
||||
gui_state = GuiState::Closed;
|
||||
dc_savestate(config::SavestateSlot);
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Columns(2, "buttons", false);
|
||||
|
||||
|
@ -594,19 +588,11 @@ static void gui_display_commands()
|
|||
ImGui::NextColumn();
|
||||
|
||||
// Cheats
|
||||
if (settings.network.online)
|
||||
{
|
||||
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
|
||||
}
|
||||
if (ImGui::Button("Cheats", ScaledVec2(150, 50)) && !settings.network.online)
|
||||
{
|
||||
gui_state = GuiState::Cheats;
|
||||
}
|
||||
if (settings.network.online)
|
||||
{
|
||||
ImGui::PopItemFlag();
|
||||
ImGui::PopStyleVar();
|
||||
DisabledScope scope(settings.network.online);
|
||||
|
||||
if (ImGui::Button("Cheats", ScaledVec2(150, 50)) && !settings.network.online)
|
||||
gui_state = GuiState::Cheats;
|
||||
}
|
||||
ImGui::Columns(1, nullptr, false);
|
||||
|
||||
|
@ -1360,27 +1346,21 @@ static void gui_display_settings()
|
|||
"BIOS region");
|
||||
|
||||
const char *cable[] = { "VGA", "RGB Component", "TV Composite" };
|
||||
if (config::Cable.isReadOnly())
|
||||
{
|
||||
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
|
||||
}
|
||||
if (ImGui::BeginCombo("Cable", cable[config::Cable == 0 ? 0 : config::Cable - 1], ImGuiComboFlags_None))
|
||||
{
|
||||
for (int i = 0; i < IM_ARRAYSIZE(cable); i++)
|
||||
DisabledScope scope(config::Cable.isReadOnly());
|
||||
|
||||
if (ImGui::BeginCombo("Cable", cable[config::Cable == 0 ? 0 : config::Cable - 1], ImGuiComboFlags_None))
|
||||
{
|
||||
bool is_selected = i == 0 ? config::Cable <= 1 : config::Cable - 1 == i;
|
||||
if (ImGui::Selectable(cable[i], &is_selected))
|
||||
config::Cable = i == 0 ? 0 : i + 1;
|
||||
if (is_selected)
|
||||
ImGui::SetItemDefaultFocus();
|
||||
for (int i = 0; i < IM_ARRAYSIZE(cable); i++)
|
||||
{
|
||||
bool is_selected = i == 0 ? config::Cable <= 1 : config::Cable - 1 == i;
|
||||
if (ImGui::Selectable(cable[i], &is_selected))
|
||||
config::Cable = i == 0 ? 0 : i + 1;
|
||||
if (is_selected)
|
||||
ImGui::SetItemDefaultFocus();
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
if (config::Cable.isReadOnly())
|
||||
{
|
||||
ImGui::PopItemFlag();
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ShowHelpMarker("Video connection type");
|
||||
|
@ -1751,19 +1731,13 @@ static void gui_display_settings()
|
|||
OptionCheckbox("Fog", config::Fog, "Enable fog effects");
|
||||
OptionCheckbox("Widescreen", config::Widescreen,
|
||||
"Draw geometry outside of the normal 4:3 aspect ratio. May produce graphical glitches in the revealed areas.\nAspect Fit and shows the full 16:9 content.");
|
||||
if (!config::Widescreen)
|
||||
{
|
||||
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
|
||||
}
|
||||
ImGui::Indent();
|
||||
OptionCheckbox("Super Widescreen", config::SuperWidescreen,
|
||||
"Use the full width of the screen or window when its aspect ratio is greater than 16:9.\nAspect Fill and remove black bars.");
|
||||
ImGui::Unindent();
|
||||
if (!config::Widescreen)
|
||||
{
|
||||
ImGui::PopItemFlag();
|
||||
ImGui::PopStyleVar();
|
||||
{
|
||||
DisabledScope scope(!config::Widescreen);
|
||||
|
||||
ImGui::Indent();
|
||||
OptionCheckbox("Super Widescreen", config::SuperWidescreen,
|
||||
"Use the full width of the screen or window when its aspect ratio is greater than 16:9.\nAspect Fill and remove black bars.");
|
||||
ImGui::Unindent();
|
||||
}
|
||||
OptionCheckbox("Widescreen Game Cheats", config::WidescreenGameHacks,
|
||||
"Modify the game so that it displays in 16:9 anamorphic format and use horizontal screen stretching. Only some games are supported.");
|
||||
|
@ -1824,16 +1798,10 @@ static void gui_display_settings()
|
|||
if (isVulkan(config::RendererType))
|
||||
{
|
||||
ImGui::Indent();
|
||||
if (!config::VSync)
|
||||
{
|
||||
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
|
||||
}
|
||||
OptionCheckbox("Duplicate frames", config::DupeFrames, "Duplicate frames on high refresh rate monitors (120 Hz and higher)");
|
||||
if (!config::VSync)
|
||||
{
|
||||
ImGui::PopItemFlag();
|
||||
ImGui::PopStyleVar();
|
||||
{
|
||||
DisabledScope scope(!config::VSync);
|
||||
|
||||
OptionCheckbox("Duplicate frames", config::DupeFrames, "Duplicate frames on high refresh rate monitors (120 Hz and higher)");
|
||||
}
|
||||
ImGui::Unindent();
|
||||
}
|
||||
|
@ -2173,8 +2141,12 @@ static void gui_display_settings()
|
|||
ImGui::Spacing();
|
||||
header("Network");
|
||||
{
|
||||
OptionCheckbox("Broadband Adapter Emulation", config::EmulateBBA,
|
||||
"Emulate the Ethernet Broadband Adapter (BBA) instead of the Modem");
|
||||
{
|
||||
DisabledScope scope(game_started);
|
||||
|
||||
OptionCheckbox("Broadband Adapter Emulation", config::EmulateBBA,
|
||||
"Emulate the Ethernet Broadband Adapter (BBA) instead of the Modem");
|
||||
}
|
||||
OptionCheckbox("Enable GGPO Networking", config::GGPOEnable,
|
||||
"Enable networking using GGPO");
|
||||
OptionCheckbox("Enable Naomi Networking", config::NetworkEnable,
|
||||
|
|
|
@ -18,7 +18,8 @@
|
|||
*/
|
||||
#pragma once
|
||||
#include "types.h"
|
||||
#include "cfg/option.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
void gui_init();
|
||||
void gui_initFonts();
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#include "oslib/directory.h"
|
||||
#include "imgui/imgui.h"
|
||||
#include "imgui/imgui_internal.h"
|
||||
#include "hw/maple/maple_devs.h"
|
||||
#define STBI_ONLY_JPEG
|
||||
#define STBI_ONLY_PNG
|
||||
#include <stb_image.h>
|
||||
|
@ -636,20 +635,15 @@ void ShowHelpMarker(const char* desc)
|
|||
template<bool PerGameOption>
|
||||
bool OptionCheckbox(const char *name, config::Option<bool, PerGameOption>& option, const char *help)
|
||||
{
|
||||
bool b = option;
|
||||
if (option.isReadOnly())
|
||||
bool pressed;
|
||||
{
|
||||
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
|
||||
DisabledScope scope(option.isReadOnly());
|
||||
|
||||
bool b = option;
|
||||
pressed = ImGui::Checkbox(name, &b);
|
||||
if (pressed)
|
||||
option.set(b);
|
||||
}
|
||||
bool pressed = ImGui::Checkbox(name, &b);
|
||||
if (option.isReadOnly())
|
||||
{
|
||||
ImGui::PopItemFlag();
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
if (pressed)
|
||||
option.set(b);
|
||||
if (help != nullptr)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
|
@ -662,20 +656,15 @@ template bool OptionCheckbox(const char *name, config::Option<bool, false>& opti
|
|||
|
||||
bool OptionSlider(const char *name, config::Option<int>& option, int min, int max, const char *help)
|
||||
{
|
||||
int v = option;
|
||||
if (option.isReadOnly())
|
||||
bool valueChanged;
|
||||
{
|
||||
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
|
||||
DisabledScope scope(option.isReadOnly());
|
||||
|
||||
int v = option;
|
||||
valueChanged = ImGui::SliderInt(name, &v, min, max);
|
||||
if (valueChanged)
|
||||
option.set(v);
|
||||
}
|
||||
bool valueChanged = ImGui::SliderInt(name, &v, min, max);
|
||||
if (option.isReadOnly())
|
||||
{
|
||||
ImGui::PopItemFlag();
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
else if (valueChanged)
|
||||
option.set(v);
|
||||
if (help != nullptr)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
|
@ -696,24 +685,18 @@ bool OptionArrowButtons(const char *name, config::Option<int>& option, int min,
|
|||
ImGui::PopStyleVar();
|
||||
|
||||
ImGui::SameLine(0.0f, innerSpacing);
|
||||
ImGui::PushButtonRepeat(true);
|
||||
bool valueChanged = false;
|
||||
if (option.isReadOnly())
|
||||
ImGui::PushButtonRepeat(true);
|
||||
bool valueChanged = false;
|
||||
{
|
||||
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
|
||||
DisabledScope scope(option.isReadOnly());
|
||||
|
||||
if (ImGui::ArrowButton((id + "left").c_str(), ImGuiDir_Left)) { option.set(std::max(min, option - 1)); valueChanged = true; }
|
||||
ImGui::SameLine(0.0f, innerSpacing);
|
||||
if (ImGui::ArrowButton((id + "right").c_str(), ImGuiDir_Right)) { option.set(std::min(max, option + 1)); valueChanged = true; }
|
||||
}
|
||||
if (ImGui::ArrowButton((id + "left").c_str(), ImGuiDir_Left)) { option.set(std::max(min, option - 1)); valueChanged = true; }
|
||||
ImGui::SameLine(0.0f, innerSpacing);
|
||||
if (ImGui::ArrowButton((id + "right").c_str(), ImGuiDir_Right)) { option.set(std::min(max, option + 1)); valueChanged = true; }
|
||||
if (option.isReadOnly())
|
||||
{
|
||||
ImGui::PopItemFlag();
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
ImGui::PopButtonRepeat();
|
||||
ImGui::SameLine(0.0f, innerSpacing);
|
||||
ImGui::Text("%s", name);
|
||||
ImGui::PopButtonRepeat();
|
||||
ImGui::SameLine(0.0f, innerSpacing);
|
||||
ImGui::Text("%s", name);
|
||||
if (help != nullptr)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
|
@ -725,20 +708,15 @@ bool OptionArrowButtons(const char *name, config::Option<int>& option, int min,
|
|||
template<typename T>
|
||||
bool OptionRadioButton(const char *name, config::Option<T>& option, T value, const char *help)
|
||||
{
|
||||
int v = (int)option;
|
||||
if (option.isReadOnly())
|
||||
bool pressed;
|
||||
{
|
||||
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
|
||||
DisabledScope scope(option.isReadOnly());
|
||||
|
||||
int v = (int)option;
|
||||
pressed = ImGui::RadioButton(name, &v, (int)value);
|
||||
if (pressed)
|
||||
option.set((T)v);
|
||||
}
|
||||
bool pressed = ImGui::RadioButton(name, &v, (int)value);
|
||||
if (option.isReadOnly())
|
||||
{
|
||||
ImGui::PopItemFlag();
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
if (pressed)
|
||||
option.set((T)v);
|
||||
if (help != nullptr)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
|
@ -752,27 +730,21 @@ template bool OptionRadioButton<int>(const char *name, config::Option<int>& opti
|
|||
void OptionComboBox(const char *name, config::Option<int>& option, const char *values[], int count,
|
||||
const char *help)
|
||||
{
|
||||
if (option.isReadOnly())
|
||||
{
|
||||
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
|
||||
}
|
||||
if (ImGui::BeginCombo(name, values[option], ImGuiComboFlags_None))
|
||||
{
|
||||
for (int i = 0; i < count; i++)
|
||||
DisabledScope scope(option.isReadOnly());
|
||||
|
||||
if (ImGui::BeginCombo(name, values[option], ImGuiComboFlags_None))
|
||||
{
|
||||
bool is_selected = option == i;
|
||||
if (ImGui::Selectable(values[i], &is_selected))
|
||||
option = i;
|
||||
if (is_selected)
|
||||
ImGui::SetItemDefaultFocus();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
bool is_selected = option == i;
|
||||
if (ImGui::Selectable(values[i], &is_selected))
|
||||
option = i;
|
||||
if (is_selected)
|
||||
ImGui::SetItemDefaultFocus();
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
if (option.isReadOnly())
|
||||
{
|
||||
ImGui::PopItemFlag();
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
if (help != nullptr)
|
||||
{
|
||||
|
|
|
@ -18,14 +18,17 @@
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "types.h"
|
||||
#include "cfg/option.h"
|
||||
#include "imgui/imgui.h"
|
||||
#include "imgui/imgui_internal.h"
|
||||
#include "gui.h"
|
||||
#include "emulator.h"
|
||||
#include "stdclass.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <chrono>
|
||||
#include <future>
|
||||
#include <string>
|
||||
|
||||
typedef bool (*StringCallback)(bool cancelled, std::string selection);
|
||||
|
||||
|
@ -138,3 +141,30 @@ inline static ImVec2 operator/(const ImVec2& v, float f) {
|
|||
}
|
||||
|
||||
u8 *loadImage(const std::string& path, int& width, int& height);
|
||||
|
||||
class DisabledScope
|
||||
{
|
||||
public:
|
||||
DisabledScope(bool disabled) : disabled(disabled)
|
||||
{
|
||||
if (disabled)
|
||||
{
|
||||
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
|
||||
}
|
||||
}
|
||||
~DisabledScope()
|
||||
{
|
||||
if (disabled)
|
||||
{
|
||||
ImGui::PopItemFlag();
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
}
|
||||
bool isDisabled() const {
|
||||
return disabled;
|
||||
}
|
||||
|
||||
private:
|
||||
bool disabled;
|
||||
};
|
||||
|
|
|
@ -16,8 +16,7 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
#include "mainui.h"
|
||||
#include "hw/pvr/Renderer_if.h"
|
||||
#include "gui.h"
|
||||
|
@ -27,7 +26,9 @@
|
|||
#include "emulator.h"
|
||||
#include "imgui_driver.h"
|
||||
#include "profiler/fc_profiler.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
static bool mainui_enabled;
|
||||
u32 MainFrameCount;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "hw/pvr/ta.h"
|
||||
#include "hw/pvr/ta_ctx.h"
|
||||
#include "hw/pvr/Renderer_if.h"
|
||||
|
||||
struct norend : Renderer
|
||||
|
|
|
@ -18,8 +18,7 @@
|
|||
#include "types.h"
|
||||
#include "input/gamepad.h"
|
||||
#include "input/gamepad_device.h"
|
||||
#include "TexCache.h"
|
||||
#include "hw/maple/maple_devs.h"
|
||||
#include "stdclass.h"
|
||||
#ifdef LIBRETRO
|
||||
#include "vmu_xhair.h"
|
||||
#endif
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
along with reicast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
#include "types.h"
|
||||
#include "hw/pvr/ta_ctx.h"
|
||||
|
||||
// Use the first vertex as provoking vertex for flat-shaded triangles
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue