Clean-up to CPU module

. Removed all obsolete DLL code
. Simplified CpuCalcCycles()
. Split 6502/65C02 emu into 2 funcs
. Removed redundant vars: pages, cpuemutype
Bug fix #8300 : 80-col text in Silvern Castle got corrupted
This commit is contained in:
tomch 2006-11-01 21:45:56 +00:00
parent 9d433c1395
commit 1832b7ccef
7 changed files with 712 additions and 885 deletions

View File

@ -46,9 +46,6 @@ bool g_bFullSpeed = false;
// Win32
HINSTANCE g_hInstance = (HINSTANCE)0;
static DWORD lastfastpaging = 0;
static DWORD lasttrimimages = 0;
AppMode_e g_nAppMode = MODE_LOGO;
static int lastmode = MODE_LOGO;
@ -70,21 +67,6 @@ bool g_bDisableDirectSound = false;
//===========================================================================
void CheckFastPaging ()
{
if ((pages >= 10) && CpuSupportsFastPaging())
{
lastfastpaging = cumulativecycles;
if (cpuemtype == CPU_COMPILING)
{
lasttrimimages = cumulativecycles;
MemSetFastPaging(1);
}
}
}
//===========================================================================
#define DBG_CALC_FREQ 0
#if DBG_CALC_FREQ
const UINT MAX_CNT = 256;
@ -145,7 +127,6 @@ void ContinueExecution()
cyclenum = dwExecutedCycles;
CheckFastPaging();
DiskUpdatePosition(dwExecutedCycles);
JoyUpdatePosition();
VideoUpdateVbl(g_dwCyclesThisFrame);
@ -155,21 +136,6 @@ void ContinueExecution()
//
if (cpuemtype == CPU_FASTPAGING) //?
{
if ((!pages) && (cumulativecycles-lastfastpaging > 500000))
{
MemSetFastPaging(0);
}
else if (cumulativecycles-lasttrimimages > 500000)
{
MemTrimImages();
lasttrimimages = cumulativecycles;
}
}
//
const DWORD CLKS_PER_MS = (DWORD)g_fCurrentCLK6502 / 1000;
emulmsec_frac += dwExecutedCycles;
@ -179,8 +145,6 @@ void ContinueExecution()
emulmsec_frac %= CLKS_PER_MS;
}
pages = 0; //?
//
// DETERMINE WHETHER THE SCREEN WAS UPDATED, THE DISK WAS SPINNING,
// OR THE KEYBOARD I/O PORTS WERE BEING EXCESSIVELY QUERIED THIS CLOCKTICK

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,5 @@
#pragma once
#define CPU_COMPILING 0
#define CPU_INTERPRETIVE 1
#define CPU_FASTPAGING 2
typedef struct _regsrec {
BYTE a; // accumulator
BYTE x; // index X
@ -14,20 +10,15 @@ typedef struct _regsrec {
BYTE bJammed; // CPU has crashed (NMOS 6502 only)
} regsrec, *regsptr;
extern DWORD cpuemtype;
extern regsrec regs;
extern unsigned __int64 g_nCumulativeCycles;
void CpuDestroy ();
void CpuCalcCycles(ULONG nCyclesLeft);
DWORD CpuExecute (DWORD);
void CpuGetCode (WORD,LPBYTE *,DWORD *);
ULONG CpuGetCyclesThisFrame();
void CpuInitialize ();
void CpuReinitialize ();
void CpuResetCompilerData ();
void CpuSetupBenchmark ();
BOOL CpuSupportsFastPaging ();
void CpuIrqReset();
void CpuIrqAssert(eIRQSRC Device);
void CpuIrqDeassert(eIRQSRC Device);

View File

@ -8147,11 +8147,6 @@ void DebugBegin ()
// This is called every time the emulator is reset.
// And everytime the debugger is entered.
if (cpuemtype == CPU_FASTPAGING)
{
MemSetFastPaging(0);
}
g_nAppMode = MODE_DEBUG;
FrameRefreshStatus(DRAW_TITLE);

View File

@ -581,7 +581,7 @@ static DWORD imagemode[MAXIMAGES];
LPBYTE memshadow[MAXIMAGES][0x100];
LPBYTE memwrite[MAXIMAGES][0x100];
static BOOL fastpaging = 0;
static BOOL fastpaging = 0; // Redundant: only ever set to 0, by MemSetFastPaging(0)
DWORD image = 0;
DWORD lastimage = 0;
static BOOL lastwriteram = 0;
@ -593,7 +593,6 @@ static LPBYTE memmain = NULL;
static DWORD memmode = MF_BANK2 | MF_SLOTCXROM | MF_WRITERAM;
static LPBYTE memrom = NULL;
static BOOL modechanging = 0;
DWORD pages = 0;
MemoryInitPattern_e g_eMemoryInitPattern = MIP_FF_FF_00_00;
@ -672,7 +671,6 @@ void UpdateFastPaging () {
mem = memimage+(image << 16);
UpdatePaging(1,0);
}
CpuReinitialize();
}
//===========================================================================
@ -1049,10 +1047,6 @@ void MemSetFastPaging (BOOL on) {
imagemode[0] = memmode;
if (!fastpaging)
UpdatePaging(1,0);
cpuemtype = fastpaging ? CPU_FASTPAGING : CPU_COMPILING;
CpuReinitialize();
if (cpuemtype == CPU_COMPILING)
CpuResetCompilerData();
}
//===========================================================================
@ -1108,8 +1102,6 @@ BYTE __stdcall MemSetPaging (WORD programcounter, BYTE address, BYTE write, BYTE
else
{
UpdatePaging(0,0);
if (cpuemtype == CPU_COMPILING)
CpuResetCompilerData();
}
}
break;
@ -1136,7 +1128,6 @@ BYTE __stdcall MemSetPaging (WORD programcounter, BYTE address, BYTE write, BYTE
// WRITE TABLES.
if ((lastmemmode != memmode) || modechanging) {
modechanging = 0;
++pages;
// IF FAST PAGING IS ACTIVE, WE KEEP MULTIPLE COMPLETE MEMORY IMAGES
// AND WRITE TABLES, AND SWITCH BETWEEN THEM. THE FAST PAGING VERSION
@ -1148,8 +1139,6 @@ BYTE __stdcall MemSetPaging (WORD programcounter, BYTE address, BYTE write, BYTE
// WRITE TABLE, AND UPDATE THEM EVERY TIME PAGING IS CHANGED.
else {
UpdatePaging(0,0);
if (cpuemtype == CPU_COMPILING)
CpuResetCompilerData();
}
}
@ -1181,7 +1170,6 @@ void MemTrimImages () {
image = realimage;
mem = memimage+(image << 16);
memmode = imagemode[image];
CpuReinitialize();
}
if (++trimnumber >= lastimage)
trimnumber = 0;
@ -1270,7 +1258,6 @@ DWORD MemSetSnapshot(SS_BaseMemory* pSS)
//
pages = 0;
modechanging = 0;
UpdatePaging(1,0); // Initialize=1, UpdateWriteOnly=0

View File

@ -17,7 +17,6 @@ extern DWORD image;
extern DWORD lastimage;
extern LPBYTE mem;
extern LPBYTE memdirty;
extern DWORD pages;
#ifdef RAMWORKS
extern UINT g_uMaxExPages; // user requested ram pages (from cmd line)

View File

@ -986,7 +986,7 @@ void SetLastDrawnImage () {
memcpy(vidlastmem+0x2000,g_pHiresBank0,0x2000);
if (SW_DHIRES && SW_HIRES)
memcpy(vidlastmem,g_pHiresBank1,0x2000);
if (SW_80COL && !SW_HIRES)
else if (SW_80COL) // Don't test for !SW_HIRES, as some 80-col text routines have SW_HIRES set (Bug #8300)
memcpy(vidlastmem,g_pTextBank1,0x400);
int loop;
for (loop = 0; loop < 256; loop++)
@ -2079,10 +2079,7 @@ BYTE __stdcall VideoSetMode (WORD, BYTE address, BYTE write, BYTE, ULONG) {
}
if (oldpage2 != SW_PAGE2) {
static DWORD lastrefresh = 0;
BOOL fastvideoslowcpu = 0;
if ((cpuemtype == CPU_FASTPAGING) && (emulmsec-lastrefresh >= 20))
fastvideoslowcpu = 1;
if ((displaypage2 && !SW_PAGE2) || (!behind) || fastvideoslowcpu) {
if ((displaypage2 && !SW_PAGE2) || (!behind)) {
displaypage2 = (SW_PAGE2 != 0);
if (!redrawfull) {
VideoRefreshScreen();