AppleWin/source/frontends/qapple/qapple.cpp

129 lines
2.9 KiB
C++
Raw Normal View History

#include "qapple.h"
#include "StdAfx.h"
#include "Common.h"
#include "Applewin.h"
#include "Disk.h"
#include "Harddisk.h"
#include "Log.h"
#include "CPU.h"
#include "Frame.h"
#include "Memory.h"
#include "ParallelPrinter.h"
#include "Video.h"
#include "SaveState.h"
#include "linux/data.h"
#include "linux/configuration.h"
#include "emulator.h"
namespace
{
void initialiseEmulator()
{
g_fh = fopen("/tmp/applewin.txt", "w");
setbuf(g_fh, NULL);
InitializeRegistry("../qapple/applen.conf");
LogFileOutput("Initialisation\n");
ImageInitialize();
DiskInitialize();
}
void startEmulator()
{
LoadConfiguration();
CheckCpu();
FrameRefreshStatus(DRAW_LEDS | DRAW_BUTTON_DRIVES);
MemInitialize();
VideoInitialize();
}
void uninitialiseEmulator()
{
HD_Destroy();
PrintDestroy();
CpuDestroy();
MemDestroy();
DiskDestroy();
}
}
void FrameDrawDiskLEDS(HDC x) {}
void FrameDrawDiskStatus(HDC x) {}
void FrameRefreshStatus(int x, bool) {}
// Keyboard
BYTE KeybGetKeycode () {}
BYTE __stdcall KeybReadData (WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft) {}
BYTE __stdcall KeybReadFlag (WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft) {}
// Joystick
BYTE __stdcall JoyReadButton(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft) {}
BYTE __stdcall JoyReadPosition(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft) {}
BYTE __stdcall JoyResetPosition(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft) {}
// Speaker
BYTE __stdcall SpkrToggle (WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft) {}
void VideoInitialize() {}
QApple::QApple(QWidget *parent) :
QMainWindow(parent)
{
setupUi(this);
myEmulator = new Emulator(mdiArea);
mdiArea->addSubWindow(myEmulator, Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint);
myMSGap = 5;
initialiseEmulator();
startEmulator();
}
void QApple::timerEvent(QTimerEvent *event)
{
const double fUsecPerSec = 1.e6;
const UINT nExecutionPeriodUsec = 1000 * myMSGap;
const double fExecutionPeriodClks = g_fCurrentCLK6502 * ((double)nExecutionPeriodUsec / fUsecPerSec);
const DWORD uCyclesToExecute = fExecutionPeriodClks;
const bool bVideoUpdate = false;
const DWORD uActualCyclesExecuted = CpuExecute(uCyclesToExecute, bVideoUpdate);
g_dwCyclesThisFrame += uActualCyclesExecuted;
if (g_dwCyclesThisFrame >= dwClksPerFrame)
{
g_dwCyclesThisFrame -= dwClksPerFrame;
myEmulator->redrawScreen();
}
}
void QApple::on_actionStart_triggered()
{
myTimerID = startTimer(myMSGap);
actionPause->setEnabled(true);
actionStart->setEnabled(false);
}
void QApple::on_actionPause_triggered()
{
killTimer(myTimerID);
actionPause->setEnabled(false);
actionStart->setEnabled(true);
}