Skip to content

Commit

Permalink
Merge branch 'master' of C:\d\git\TOWNSEMU
Browse files Browse the repository at this point in the history
  • Loading branch information
captainys committed Feb 8, 2025
2 parents 95e00d8 + 9f849e1 commit b1cc87c
Show file tree
Hide file tree
Showing 8 changed files with 69 additions and 16 deletions.
5 changes: 5 additions & 0 deletions gui/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ enable_testing()
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(UNIX)
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -Wno-unused-variable)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-unused-variable)
endif()

set(DISC_IMAGE_DIR "C:/D/TownsISO")

add_compile_definitions(YS_LITTLE_ENDIAN)
Expand Down
23 changes: 23 additions & 0 deletions gui/src/main_gui/fsguiapp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,9 @@ void FsGuiMainCanvas::Initialize(int argc,char *argv[])
View_ShowTip(nullptr);
}

ArrangeDialog();
FitWindowToGUI();

YsDisregardVariable(argc);
YsDisregardVariable(argv);
YsGLSLCreateSharedRenderer();
Expand Down Expand Up @@ -692,6 +695,7 @@ void FsGuiMainCanvas::ReallyRunWithinSameProcess(VMClass &VM)
{
AddDialog(profileDlg);
RemoveDialog(resumeVMDlg);
FitWindowToGUI();
}
SetNeedRedraw(YSTRUE);
}
Expand Down Expand Up @@ -836,6 +840,7 @@ bool FsGuiMainCanvas::ResumeVMIfSameProc(VMClass &VM)
{
AddDialog(profileDlg);
RemoveDialog(resumeVMDlg);
FitWindowToGUI();
}
SetNeedRedraw(YSTRUE);
return true;
Expand Down Expand Up @@ -989,6 +994,24 @@ YsWString FsGuiMainCanvas::GetDefaultNewEventLogFileName(void) const
return ful;
}

void FsGuiMainCanvas::FitWindowToGUI(void)
{
auto dim=GetGUIDimension();
FsResizeWindow(dim.x(),dim.y());
}

YsVec2i FsGuiMainCanvas::GetGUIDimension(void) const
{
YsVec2i dim(1,1);
if(nullptr!=profileDlg)
{
int xLim=profileDlg->GetLeftX()+profileDlg->GetWidth();
int yLim=profileDlg->GetTopY()+profileDlg->GetHeight();
dim.Set(xLim,yLim);
}
return dim;
}

std::vector <YsWString> FsGuiMainCanvas::CheckMissingROMFiles(void) const
{
std::vector <YsWString> missing;
Expand Down
3 changes: 3 additions & 0 deletions gui/src/main_gui/fsguiapp.h
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,9 @@ class FsGuiMainCanvas : public FsGuiCanvas
YsWString GetDefaultNewHardDiskImageFileName(void) const;
YsWString GetDefaultNewEventLogFileName(void) const;

void FitWindowToGUI(void);
YsVec2i GetGUIDimension(void) const;

public:
static std::string GamePortEmulationTypeToHumanReadable(unsigned int emuType);
static unsigned int HumanReadableToGamePortEmulationType(std::string);
Expand Down
2 changes: 1 addition & 1 deletion gui/src/main_gui/profiledlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1381,7 +1381,7 @@ TownsProfile ProfileDialog::GetProfile(void) const
for(int i=0; i<MAX_NUM_SHARED_DIR; ++i)
{
YsUnicodeToSystemEncoding(utf8,shareDirTxt[i]->GetWString());
std::string str=utf8;
std::string str=utf8.c_str();
if(""!=str)
{
profile.sharedDir.push_back(str);
Expand Down
5 changes: 5 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ project(TSUGARU)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(UNIX)
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -Wno-unused-variable)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-unused-variable)
endif()


if(APPLE)
set(DISC_IMAGE_DIR "$ENV{HOME}/TOWNSISO")
Expand Down
5 changes: 5 additions & 0 deletions src/main_cui/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,11 @@ int Run(FMTownsTemplate <CPUCLASS> &towns,const TownsARGV &argv,Outside_World &o
}

VMThread.join();

exit(towns.var.returnCode);
// CUI will wait for a command forever. Is there any way I can programmatically send CR to the terminal?
// I have already tried freopen(stdin).

UIThread.join();

return towns.var.returnCode;
Expand Down
40 changes: 25 additions & 15 deletions src/towns/sound/sound.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -258,16 +258,30 @@ void TownsSound::ProcessRecordPCMWrite(unsigned int reg,unsigned char data)
// Shadow of the Beast 2 expects the sampling value to be positive at one point.
// Really wonder why?
data=1;
if(var.PCMSamplePointer<var.waveToBeSentToVM.GetNumSamplePerChannel() &&
0<var.waveToBeSentToVM.GetNumChannel())
{
int sum=0;
for(int i=0; i<var.waveToBeSentToVM.GetNumChannel(); ++i)
if(var.PCMSamplePointer<var.waveToBeSentToVM.GetNumSamplePerChannel() &&
0<var.waveToBeSentToVM.GetNumChannel())
{
sum+=var.waveToBeSentToVM.GetSignedValue16(i,var.PCMSamplePointer);
}
sum/=var.waveToBeSentToVM.GetNumChannel();
for(int i=0; i<var.waveToBeSentToVM.GetNumChannel(); ++i)
{
sum+=var.waveToBeSentToVM.GetSignedValue16(i,var.PCMSamplePointer);
}
sum/=var.waveToBeSentToVM.GetNumChannel();
sum+=state.lastAudioOut;

// Wave pointer must be moved by wave sampling rate / PCM sampling rate.
var.PCMSamplePointerLeftOver+=var.waveToBeSentToVM.PlayBackRate();
while(var.PCMSamplingRate<=var.PCMSamplePointerLeftOver)
{
++var.PCMSamplePointer;
var.PCMSamplePointerLeftOver-=var.PCMSamplingRate;
}
}
else
{
sum=state.lastAudioOut;
}
sum*=126*var.PCMSamplingScale;
sum/=32768;
if(sum<-126)
Expand All @@ -280,19 +294,11 @@ void TownsSound::ProcessRecordPCMWrite(unsigned int reg,unsigned char data)
}
sum+=128;
data=sum;

// Wave pointer must be moved by wave sampling rate / PCM sampling rate.
var.PCMSamplePointerLeftOver+=var.waveToBeSentToVM.PlayBackRate();
while(var.PCMSamplingRate<=var.PCMSamplePointerLeftOver)
{
++var.PCMSamplePointer;
var.PCMSamplePointerLeftOver-=var.PCMSamplingRate;
}
}
var.nextPCMSampleReadyTime+=PER_SECOND/var.PCMSamplingRate;
if(var.nextPCMSampleReadyTime<townsPtr->state.townsTime)
{
// Maybe not used long time.
// Maybe this I/O was not used long time.
var.nextPCMSampleReadyTime=townsPtr->state.townsTime+PER_SECOND/var.PCMSamplingRate;
}
break;
Expand Down Expand Up @@ -458,6 +464,10 @@ void TownsSound::ProcessSound(void)

if(true!=outside_world->FMPCMChannelPlaying() && true!=nextFMPCMWave.empty())
{
int leftOut=cpputil::GetSignedWord(nextFMPCMWave.data());
int rightOut=cpputil::GetSignedWord(nextFMPCMWave.data()+2);
state.lastAudioOut=(leftOut+rightOut)/2;

// Hopefully FMPCM channel finishes play back previous wave piece before nextFMPCMWaveGenTime.
if(true==recordFMandPCM)
{
Expand Down
2 changes: 2 additions & 0 deletions src/towns/sound/sound.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ class TownsSound : public Device
unsigned int audioFlag;
unsigned int addrLatch[2];

int lastAudioOut=0; // This will not be state-saved. Updated in ProcessSound.

RF5C68 rf5c68;

void PowerOn(void);
Expand Down

0 comments on commit b1cc87c

Please sign in to comment.