mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2024-11-14 13:27:41 -07:00
Compare commits
4 Commits
023c953972
...
e30e68e6cf
Author | SHA1 | Date | |
---|---|---|---|
|
e30e68e6cf | ||
|
7c1d2a64f4 | ||
|
b2f6fab6f4 | ||
|
47b4df3d63 |
@ -127,6 +127,8 @@ if (ENABLE_JIT)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
target_include_directories(core INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
|
|
||||||
set(MELONDS_VERSION_SUFFIX "$ENV{MELONDS_VERSION_SUFFIX}" CACHE STRING "Suffix to add to displayed melonDS version")
|
set(MELONDS_VERSION_SUFFIX "$ENV{MELONDS_VERSION_SUFFIX}" CACHE STRING "Suffix to add to displayed melonDS version")
|
||||||
option(MELONDS_EMBED_BUILD_INFO "Embed detailed build info into the binary" OFF)
|
option(MELONDS_EMBED_BUILD_INFO "Embed detailed build info into the binary" OFF)
|
||||||
set(MELONDS_GIT_BRANCH "$ENV{MELONDS_GIT_BRANCH}" CACHE STRING "The Git branch used for this build")
|
set(MELONDS_GIT_BRANCH "$ENV{MELONDS_GIT_BRANCH}" CACHE STRING "The Git branch used for this build")
|
||||||
@ -178,13 +180,14 @@ endif()
|
|||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
target_link_libraries(core PRIVATE ole32 comctl32 wsock32 ws2_32)
|
target_link_libraries(core PRIVATE ole32 comctl32 wsock32 ws2_32)
|
||||||
|
target_compile_definitions(core PUBLIC WIN32_LEAN_AND_MEAN NOMINMAX)
|
||||||
elseif(NOT APPLE AND NOT HAIKU)
|
elseif(NOT APPLE AND NOT HAIKU)
|
||||||
check_library_exists(rt shm_open "" NEED_LIBRT)
|
check_library_exists(rt shm_open "" NEED_LIBRT)
|
||||||
if (NEED_LIBRT)
|
if (NEED_LIBRT)
|
||||||
target_link_libraries(core PRIVATE rt)
|
target_link_libraries(core PRIVATE rt)
|
||||||
endif()
|
endif()
|
||||||
elseif(HAIKU)
|
elseif(HAIKU)
|
||||||
target_link_libraries(core PRIVATE network)
|
target_link_libraries(core PRIVATE network)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_JIT_PROFILING)
|
if (ENABLE_JIT_PROFILING)
|
||||||
|
@ -88,6 +88,8 @@ void DSi_TSC::SetTouchCoords(u16 x, u16 y)
|
|||||||
TouchX = x;
|
TouchX = x;
|
||||||
TouchY = y;
|
TouchY = y;
|
||||||
|
|
||||||
|
DeltaX = DeltaY = 0;
|
||||||
|
|
||||||
u8 oldpress = Bank3Regs[0x0E] & 0x01;
|
u8 oldpress = Bank3Regs[0x0E] & 0x01;
|
||||||
|
|
||||||
if (y == 0xFFF)
|
if (y == 0xFFF)
|
||||||
@ -121,6 +123,22 @@ void DSi_TSC::SetTouchCoords(u16 x, u16 y)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DSi_TSC::MoveTouchCoords(u16 x, u16 y)
|
||||||
|
{
|
||||||
|
if (TSCMode == 0x00) return TSC::MoveTouchCoords(x, y);
|
||||||
|
|
||||||
|
if (Bank3Regs[0x0E] & 0x01)
|
||||||
|
{
|
||||||
|
return SetTouchCoords(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
DeltaX = (x << 4) - (TouchX & ~0x8000);
|
||||||
|
DeltaY = (y << 4) - (TouchY & ~0x8000);
|
||||||
|
|
||||||
|
Bank3Regs[0x09] = 0x80;
|
||||||
|
Bank3Regs[0x0E] &= ~0x01;
|
||||||
|
}
|
||||||
|
|
||||||
void DSi_TSC::MicInputFrame(const s16* data, int samples)
|
void DSi_TSC::MicInputFrame(const s16* data, int samples)
|
||||||
{
|
{
|
||||||
if (TSCMode == 0x00) return TSC::MicInputFrame(data, samples);
|
if (TSCMode == 0x00) return TSC::MicInputFrame(data, samples);
|
||||||
@ -162,8 +180,9 @@ void DSi_TSC::Write(u8 val)
|
|||||||
{
|
{
|
||||||
// X coordinates
|
// X coordinates
|
||||||
|
|
||||||
if (id & 0x01) Data = TouchX >> 8;
|
u16 touchX = TouchX + CreateTouchOffset(DeltaX);
|
||||||
else Data = TouchX & 0xFF;
|
if (id & 0x01) Data = touchX >> 8;
|
||||||
|
else Data = touchX & 0xFF;
|
||||||
|
|
||||||
TouchX &= 0x7FFF;
|
TouchX &= 0x7FFF;
|
||||||
}
|
}
|
||||||
@ -171,8 +190,9 @@ void DSi_TSC::Write(u8 val)
|
|||||||
{
|
{
|
||||||
// Y coordinates
|
// Y coordinates
|
||||||
|
|
||||||
if (id & 0x01) Data = TouchY >> 8;
|
u16 touchY = TouchY + CreateTouchOffset(DeltaY);
|
||||||
else Data = TouchY & 0xFF;
|
if (id & 0x01) Data = touchY >> 8;
|
||||||
|
else Data = touchY & 0xFF;
|
||||||
|
|
||||||
TouchY &= 0x7FFF; // checkme
|
TouchY &= 0x7FFF; // checkme
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@ public:
|
|||||||
void SetMode(u8 mode);
|
void SetMode(u8 mode);
|
||||||
|
|
||||||
void SetTouchCoords(u16 x, u16 y) override;
|
void SetTouchCoords(u16 x, u16 y) override;
|
||||||
|
void MoveTouchCoords(u16 x, u16 y) override;
|
||||||
void MicInputFrame(const s16* data, int samples) override;
|
void MicInputFrame(const s16* data, int samples) override;
|
||||||
|
|
||||||
void Write(u8 val) override;
|
void Write(u8 val) override;
|
||||||
|
@ -1122,6 +1122,11 @@ void NDS::TouchScreen(u16 x, u16 y)
|
|||||||
SPI.GetTSC()->SetTouchCoords(x, y);
|
SPI.GetTSC()->SetTouchCoords(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NDS::MoveTouch(u16 x, u16 y)
|
||||||
|
{
|
||||||
|
SPI.GetTSC()->MoveTouchCoords(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
void NDS::ReleaseScreen()
|
void NDS::ReleaseScreen()
|
||||||
{
|
{
|
||||||
SPI.GetTSC()->SetTouchCoords(0x000, 0xFFF);
|
SPI.GetTSC()->SetTouchCoords(0x000, 0xFFF);
|
||||||
|
@ -392,6 +392,7 @@ public: // TODO: Encapsulate the rest of these members
|
|||||||
bool IsRunning() const noexcept { return Running; }
|
bool IsRunning() const noexcept { return Running; }
|
||||||
|
|
||||||
void TouchScreen(u16 x, u16 y);
|
void TouchScreen(u16 x, u16 y);
|
||||||
|
void MoveTouch(u16 x, u16 y);
|
||||||
void ReleaseScreen();
|
void ReleaseScreen();
|
||||||
|
|
||||||
void SetKeyMask(u32 mask);
|
void SetKeyMask(u32 mask);
|
||||||
|
23
src/SPI.cpp
23
src/SPI.cpp
@ -352,6 +352,12 @@ void PowerMan::Write(u8 val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
s16 TSC::CreateTouchOffset(s16 delta) const
|
||||||
|
{
|
||||||
|
// 560190 cycles per frame
|
||||||
|
s64 cyclepos = (s64)NDS.GetSysClockCycles(2);
|
||||||
|
return (cyclepos * delta) / 560190;
|
||||||
|
}
|
||||||
|
|
||||||
TSC::TSC(melonDS::NDS& nds) : SPIDevice(nds)
|
TSC::TSC(melonDS::NDS& nds) : SPIDevice(nds)
|
||||||
{
|
{
|
||||||
@ -392,6 +398,8 @@ void TSC::SetTouchCoords(u16 x, u16 y)
|
|||||||
TouchX = x;
|
TouchX = x;
|
||||||
TouchY = y;
|
TouchY = y;
|
||||||
|
|
||||||
|
DeltaX = DeltaY = 0;
|
||||||
|
|
||||||
if (y == 0xFFF)
|
if (y == 0xFFF)
|
||||||
{
|
{
|
||||||
// released
|
// released
|
||||||
@ -404,6 +412,17 @@ void TSC::SetTouchCoords(u16 x, u16 y)
|
|||||||
NDS.KeyInput &= ~(1 << (16+6));
|
NDS.KeyInput &= ~(1 << (16+6));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TSC::MoveTouchCoords(u16 x, u16 y)
|
||||||
|
{
|
||||||
|
if (NDS.KeyInput & (1 << (16+6)))
|
||||||
|
{
|
||||||
|
return SetTouchCoords(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
DeltaX = (x << 4) - TouchX;
|
||||||
|
DeltaY = (y << 4) - TouchY;
|
||||||
|
}
|
||||||
|
|
||||||
void TSC::MicInputFrame(const s16* data, int samples)
|
void TSC::MicInputFrame(const s16* data, int samples)
|
||||||
{
|
{
|
||||||
if (!data)
|
if (!data)
|
||||||
@ -433,8 +452,8 @@ void TSC::Write(u8 val)
|
|||||||
|
|
||||||
switch (ControlByte & 0x70)
|
switch (ControlByte & 0x70)
|
||||||
{
|
{
|
||||||
case 0x10: ConvResult = TouchY; break;
|
case 0x10: ConvResult = TouchY + CreateTouchOffset(DeltaY); break;
|
||||||
case 0x50: ConvResult = TouchX; break;
|
case 0x50: ConvResult = TouchX + CreateTouchOffset(DeltaX); break;
|
||||||
|
|
||||||
case 0x60:
|
case 0x60:
|
||||||
{
|
{
|
||||||
|
@ -121,6 +121,7 @@ public:
|
|||||||
virtual void DoSavestate(Savestate* file) override;
|
virtual void DoSavestate(Savestate* file) override;
|
||||||
|
|
||||||
virtual void SetTouchCoords(u16 x, u16 y);
|
virtual void SetTouchCoords(u16 x, u16 y);
|
||||||
|
virtual void MoveTouchCoords(u16 x, u16 y);
|
||||||
virtual void MicInputFrame(const s16* data, int samples);
|
virtual void MicInputFrame(const s16* data, int samples);
|
||||||
|
|
||||||
virtual void Write(u8 val) override;
|
virtual void Write(u8 val) override;
|
||||||
@ -131,9 +132,12 @@ protected:
|
|||||||
u16 ConvResult;
|
u16 ConvResult;
|
||||||
|
|
||||||
u16 TouchX, TouchY;
|
u16 TouchX, TouchY;
|
||||||
|
s16 DeltaX, DeltaY;
|
||||||
|
|
||||||
s16 MicBuffer[1024];
|
s16 MicBuffer[1024];
|
||||||
int MicBufferLen;
|
int MicBufferLen;
|
||||||
|
|
||||||
|
s16 CreateTouchOffset(s16 delta) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -91,8 +91,7 @@ add_compile_definitions(ARCHIVE_SUPPORT_ENABLED)
|
|||||||
add_executable(melonDS ${SOURCES_QT_SDL})
|
add_executable(melonDS ${SOURCES_QT_SDL})
|
||||||
|
|
||||||
add_subdirectory("../../net"
|
add_subdirectory("../../net"
|
||||||
"${CMAKE_BINARY_DIR}/net"
|
${CMAKE_BINARY_DIR}/net)
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries(melonDS PRIVATE net-utils)
|
target_link_libraries(melonDS PRIVATE net-utils)
|
||||||
|
|
||||||
@ -171,10 +170,10 @@ if (BUILD_STATIC)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_include_directories(melonDS PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
|
target_include_directories(melonDS PUBLIC
|
||||||
target_include_directories(melonDS PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/..")
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
target_include_directories(melonDS PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../..")
|
"${CMAKE_CURRENT_SOURCE_DIR}/..")
|
||||||
target_include_directories(melonDS PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../../net")
|
|
||||||
if (USE_QT6)
|
if (USE_QT6)
|
||||||
target_include_directories(melonDS PUBLIC ${Qt6Gui_PRIVATE_INCLUDE_DIRS})
|
target_include_directories(melonDS PUBLIC ${Qt6Gui_PRIVATE_INCLUDE_DIRS})
|
||||||
else()
|
else()
|
||||||
|
@ -11,9 +11,9 @@ add_library(net-utils STATIC
|
|||||||
MPInterface.cpp
|
MPInterface.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(net-utils PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
|
target_include_directories(net-utils PUBLIC
|
||||||
target_include_directories(net-utils PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/..")
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/..")
|
||||||
|
|
||||||
option(USE_SYSTEM_LIBSLIRP "Use system libslirp instead of the bundled version" OFF)
|
option(USE_SYSTEM_LIBSLIRP "Use system libslirp instead of the bundled version" OFF)
|
||||||
if (USE_SYSTEM_LIBSLIRP)
|
if (USE_SYSTEM_LIBSLIRP)
|
||||||
|
Loading…
Reference in New Issue
Block a user