⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 专门为65XX系列芯片设计的变异调试环境的源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*-----------------------------------------------------------------------------
	6502 Macroassembler and Simulator

Copyright (C) 1995-2003 Michal Kowalski

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-----------------------------------------------------------------------------*/

// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
//#include "6502.h"
#include "MainFrm.h"
#include "DialAsmStat.h"
#include "Options.h"
#include "DialEditBrkp.h"
#include "SaveCode.h"
#include "LoadCode.h"
#include "Deasm6502View.h"
#include "Splash.h"#include "AFXPRIV.H"	// do podmiany LoadBarState()
#include "6502View.h"
#include "6502Doc.h"
#include "IntRequestGeneratorDlg.h"
#include "editcmd.h"
#include "DockBarEx.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//-----------------------------------------------------------------------------
// okna MainFrame, RegisterBar, IOWindow, MemoryView, ZeroPageView, IdentInfo
const HWND * /*const*/ CMainFrame::m_hWindows[]= {0,0,0,0,0,0,0,0,0,0};

WNDPROC CMainFrame::m_pfnOldProc;
CBitmap CMainFrame::m_bmpCode;		// obrazki w StatusBar
CBitmap CMainFrame::m_bmpDebug;
//-----------------------------------------------------------------------------
const TCHAR CMainFrame::REG_ENTRY_LAYOUT[]= _T("Bars\\Layout");
const TCHAR CMainFrame::REG_ENTRY_MAINFRM[]= _T("MainFrame");
const TCHAR CMainFrame::REG_POSX[]= _T("XPos");
const TCHAR CMainFrame::REG_POSY[]= _T("YPos");
const TCHAR CMainFrame::REG_SIZX[]= _T("Width");
const TCHAR CMainFrame::REG_SIZY[]= _T("Height");
const TCHAR CMainFrame::REG_STATE[]= _T("Maximize");

void CMainFrame::ConfigSettings(bool load)
{
	static const LOGFONT LogFont=
	{
		-12,// LONG lfHeight;
		0,	// LONG lfWidth;
		0,	// LONG lfEscapement;
		0,	// LONG lfOrientation;
		0,	// LONG lfWeight;
		0,	// BYTE lfItalic;
		0,	// BYTE lfUnderline;
		0,	// BYTE lfStrikeOut;
		0,	// BYTE lfCharSet;
		0,	// BYTE lfOutPrecision;
		0,	// BYTE lfClipPrecision;
		0,	// BYTE lfQuality;
		FIXED_PITCH,	// BYTE lfPitchAndFamily;
		"Fixedsys"	// CHAR lfFaceName[LF_FACESIZE];
	};

	static const TCHAR ENTRY_SYM[]= _T("Simulator");
	static const TCHAR SYM_FIN[]= _T("Finish");
	static const TCHAR SYM_IO_ADDR[]= _T("IOAddress");
	static const TCHAR SYM_IO_ENABLED[]= _T("IOEnabled");
	static const TCHAR SYM_PROT_MEM[]= _T("ProtectMem");
	static const TCHAR SYM_PROT_MEM_FROM[]= _T("ProtectMemFrom");
	static const TCHAR SYM_PROT_MEM_TO[]= _T("ProtectMemTo");
	static const TCHAR SYM_WND_X[]= _T("TerminalXPos");
	static const TCHAR SYM_WND_Y[]= _T("TerminalYPos");
	static const TCHAR SYM_WND_W[]= _T("TerminalWidth");
	static const TCHAR SYM_WND_H[]= _T("TerminalHeight");

	static const TCHAR ENTRY_ASM[]= _T("Assembler");
	static const TCHAR ASM_CASE[]= _T("CaseSensitive");
	static const TCHAR ASM_GEN_LST[]= _T("GenerateListing");
	static const TCHAR ASM_LST_FILE[]= _T("ListingFile");
	static const TCHAR ASM_GEN_BYTE[]= _T("GenerateBRKExtraByte");
	static const TCHAR ASM_BRK_BYTE[]= _T("BRKExtraByte");

	static const TCHAR ENTRY_EDIT[]= _T("Editor");
	static const TCHAR EDIT_FONT[]= _T("Font");
	static const TCHAR EDIT_TAB_STEP[]= _T("TabStep");
	static const TCHAR EDIT_AUTO_INDENT[]= _T("AutoIndent");
	static const TCHAR EDIT_SYNTAX_CHECK[]= _T("SyntaxChecking");
	static const TCHAR EDIT_CAPITALS[]= _T("AutoUppercase");
	static const TCHAR EDIT_FILENEW[]= _T("FileNew");

	static const TCHAR ENTRY_DEASM[]= _T("Deassembler");
	static const TCHAR DEASM_ADDR_COLOR[]= _T("AddrColor");
	static const TCHAR DEASM_CODE_COLOR[]= _T("CodeColor");
	static const TCHAR DEASM_SHOW_CODE[]= _T("ShowCode");

	static const TCHAR ENTRY_GEN[]= _T("General");
	static const TCHAR GEN_PROC[]= _T("ProcType");
	static const TCHAR GEN_BUS_WIDTH[]= _T("BusWidth");
	static const TCHAR GEN_PTR[]= _T("PointerColor");
	static const TCHAR GEN_BRKP[]= _T("BreakpointColor");
	static const TCHAR GEN_ERR[]= _T("ErrorColor");

	static const TCHAR ENTRY_VIEW[]= _T("View");
	static const TCHAR VIEW_IDENTS_X[]= _T("IdentsXPos");
	static const TCHAR VIEW_IDENTS_Y[]= _T("IdentsYPos");
	static const TCHAR VIEW_IDENTS_W[]= _T("IdentsW");
	static const TCHAR VIEW_IDENTS_H[]= _T("IdentsH");
	static const TCHAR VIEW_MEMO_X[]= _T("MemoryXPos");
	static const TCHAR VIEW_MEMO_Y[]= _T("MemoryYPos");
	static const TCHAR VIEW_MEMO_W[]= _T("MemoryW");
	static const TCHAR VIEW_MEMO_H[]= _T("MemoryH");
	static const TCHAR VIEW_MEMO_HID[]= _T("MemoryWndHidden");
	static const TCHAR VIEW_ZMEM_X[]= _T("ZeroPageXPos");
	static const TCHAR VIEW_ZMEM_Y[]= _T("ZeroPageYPos");
	static const TCHAR VIEW_ZMEM_W[]= _T("ZeroPageW");
	static const TCHAR VIEW_ZMEM_H[]= _T("ZeroPageH");
	static const TCHAR VIEW_ZMEM_HID[]= _T("ZeroPageWndHidden");
	static const TCHAR VIEW_STACK_X[]= _T("StackXPos");
	static const TCHAR VIEW_STACK_Y[]= _T("StackYPos");
	static const TCHAR VIEW_STACK_W[]= _T("StackW");
	static const TCHAR VIEW_STACK_H[]= _T("StackH");
	static const TCHAR VIEW_STACK_HID[]= _T("StackWndHidden");
	static const TCHAR VIEW_LOG_X[]= _T("LogWndXPos");
	static const TCHAR VIEW_LOG_Y[]= _T("LogWndYPos");
	static const TCHAR VIEW_LOG_W[]= _T("LogWndW");
	static const TCHAR VIEW_LOG_H[]= _T("LogWndH");
	static const TCHAR VIEW_LOG_HID[]= _T("LogWndHidden");
	static const TCHAR VIEW_IO_HID[]= _T("IOWndHidden");
	static const TCHAR VIEW_REGS_HID[]= _T("RegsWndHidden");
	static const TCHAR VIEW_FONT_ED[]= _T("FontEditor");
	static const TCHAR VIEW_ED_TCOL[]= _T("EditorTextColor");
	static const TCHAR VIEW_ED_BCOL[]= _T("EditorBkgndColor");
	static const TCHAR VIEW_FONT_SYM[]= _T("FontIOSymWnd");
	static const TCHAR VIEW_SYM_TCOL[]= _T("IOSymWndTextColor");
	static const TCHAR VIEW_SYM_BCOL[]= _T("IOSymWndBkgndColor");
	static const TCHAR VIEW_FONT_DEASM[]= _T("FontDeasm");
	static const TCHAR VIEW_DEASM_TCOL[]= _T("DeasmInstrColor");
	static const TCHAR VIEW_DEASM_BCOL[]= _T("DeasmBkgndColor");
	static const TCHAR VIEW_FONT_MEMO[]= _T("FontMemory");
	static const TCHAR VIEW_MEMO_TCOL[]= _T("MemoryTextColor");
	static const TCHAR VIEW_MEMO_BCOL[]= _T("MemoryBkgndColor");
	static const TCHAR VIEW_FONT_ZERO[]= _T("FontZeroPage");
	static const TCHAR VIEW_ZERO_TCOL[]= _T("ZeroPageTextColor");
	static const TCHAR VIEW_ZERO_BCOL[]= _T("ZeroPageBkgndColor");
	static const TCHAR VIEW_FONT_STACK[]= _T("FontStack");
	static const TCHAR VIEW_STACK_TCOL[]= _T("StackTextColor");
	static const TCHAR VIEW_STACK_BCOL[]= _T("StackBkgndColor");

	static const TCHAR * const idents[]=
	{ VIEW_FONT_ED, VIEW_FONT_SYM, VIEW_FONT_DEASM, VIEW_FONT_MEMO, VIEW_FONT_ZERO, VIEW_FONT_STACK };
	static const TCHAR * const tcolors[]=
	{ VIEW_ED_TCOL, VIEW_SYM_TCOL, VIEW_DEASM_TCOL, VIEW_MEMO_TCOL, VIEW_ZERO_TCOL, VIEW_STACK_TCOL };
	static const TCHAR * const bcolors[]=
	{ VIEW_ED_BCOL, VIEW_SYM_BCOL, VIEW_DEASM_BCOL, VIEW_MEMO_BCOL, VIEW_ZERO_BCOL, VIEW_STACK_BCOL };
	static const TCHAR * const syntax_colors[]=
	{ _T("ColorInstruction"), _T("ColorDirective"), _T("ColorComment"), _T("ColorNumber"), _T("ColorString"), _T("ColorSelection"), 0 };
	static const TCHAR * const syntax_font[]=
	{ _T("FontInstruction"), _T("FontDirective"), _T("FontComment"), _T("FontNumber"), _T("FontString"), 0 };

	CWinApp *pApp = AfxGetApp();

	if (load)		// odczyt?
	{
		theApp.m_global.SetSymFinish( (CAsm::Finish)(pApp->GetProfileInt(ENTRY_SYM, SYM_FIN, 0)) );
		CSym6502::io_addr    = pApp->GetProfileInt(ENTRY_SYM, SYM_IO_ADDR, 0xE000);
		CSym6502::io_enabled = pApp->GetProfileInt(ENTRY_SYM, SYM_IO_ENABLED, 1);
		CSym6502::s_bWriteProtectArea = !!pApp->GetProfileInt(ENTRY_SYM, SYM_PROT_MEM, 0);
		CSym6502::s_uProtectFromAddr = pApp->GetProfileInt(ENTRY_SYM, SYM_PROT_MEM_FROM, 0xC000);
		CSym6502::s_uProtectToAddr = pApp->GetProfileInt(ENTRY_SYM, SYM_PROT_MEM_TO, 0xCFFF);
		CPoint pos;
		pos.x = pApp->GetProfileInt(ENTRY_SYM, SYM_WND_X, 200);
		pos.y = pApp->GetProfileInt(ENTRY_SYM, SYM_WND_Y, 200);
		m_IOWindow.SetWndPos(pos);
		m_IOWindow.SetSize( pApp->GetProfileInt(ENTRY_SYM, SYM_WND_W, 40),
			pApp->GetProfileInt(ENTRY_SYM, SYM_WND_H, 12) );
//    m_IOWindow.SetColors( (COLORREF)pApp->GetProfileInt(ENTRY_SYM, SYM_WND_TEXT_COL, int(RGB(0, 0, 0))),
//      pApp->GetProfileInt(ENTRY_SYM, SYM_WND_BK_COL, int(RGB(255,255,255))) );

		CDeasm6502View::m_rgbAddress   = COLORREF(pApp->GetProfileInt(ENTRY_DEASM, DEASM_ADDR_COLOR, (int)RGB(127,127,127)));
		CDeasm6502View::m_rgbCode      = COLORREF(pApp->GetProfileInt(ENTRY_DEASM, DEASM_CODE_COLOR, (int)RGB(191,191,191)));
		//    CDeasm6502View::m_rgbInstr   = COLORREF(pApp->GetProfileInt(ENTRY_DEASM, DEASM_INSTR_COLOR, (int)RGB(0,0,0)));
		CDeasm6502View::m_bDrawCode    = pApp->GetProfileInt(ENTRY_DEASM, DEASM_SHOW_CODE, 1);

		CMarks::m_rgbPointer           = COLORREF(pApp->GetProfileInt(ENTRY_GEN, GEN_PTR, (int)RGB(255,255,0)));
		CMarks::m_rgbBreakpoint        = COLORREF(pApp->GetProfileInt(ENTRY_GEN, GEN_BRKP, (int)RGB(0,0,160)));
		CMarks::m_rgbError             = COLORREF(pApp->GetProfileInt(ENTRY_GEN, GEN_ERR, (int)RGB(255,0,0)));
		theApp.m_global.SetProcType( (bool) pApp->GetProfileInt(ENTRY_GEN, GEN_PROC, 1) );
		CSym6502::bus_width            = pApp->GetProfileInt(ENTRY_GEN, GEN_BUS_WIDTH, 16);
		theApp.m_global.m_bGenerateListing = (bool) pApp->GetProfileInt(ENTRY_ASM, ASM_GEN_LST, false);
		theApp.m_global.m_strListingFile   = pApp->GetProfileString(ENTRY_ASM, ASM_LST_FILE, NULL);
		CAsm6502::generateBRKExtraByte = (bool) pApp->GetProfileInt(ENTRY_ASM, ASM_GEN_BYTE, 1);
		CAsm6502::BRKExtraByte         = (UINT8)pApp->GetProfileInt(ENTRY_ASM, ASM_BRK_BYTE, 0);

		CSrc6502View::m_nTabStep       = pApp->GetProfileInt(ENTRY_EDIT, EDIT_TAB_STEP, 8);
		CSrc6502View::m_bAutoIndent    = pApp->GetProfileInt(ENTRY_EDIT, EDIT_AUTO_INDENT, 1);
		CSrc6502View::m_bAutoSyntax    = pApp->GetProfileInt(ENTRY_EDIT, EDIT_SYNTAX_CHECK, 1);
		CSrc6502View::m_bAutoUppercase = pApp->GetProfileInt(ENTRY_EDIT, EDIT_CAPITALS, 1);
		C6502App::m_bFileNew           = pApp->GetProfileInt(ENTRY_EDIT, EDIT_FILENEW, 0);

		CIdentInfo::m_WndRect.left     = pApp->GetProfileInt(ENTRY_VIEW, VIEW_IDENTS_X, 200);
		CIdentInfo::m_WndRect.top      = pApp->GetProfileInt(ENTRY_VIEW, VIEW_IDENTS_Y, 200);
		CIdentInfo::m_WndRect.right    = pApp->GetProfileInt(ENTRY_VIEW, VIEW_IDENTS_W, 400);
		CIdentInfo::m_WndRect.bottom   = pApp->GetProfileInt(ENTRY_VIEW, VIEW_IDENTS_H, 400);
		CIdentInfo::m_WndRect.bottom  += CIdentInfo::m_WndRect.top;
		CIdentInfo::m_WndRect.right   += CIdentInfo::m_WndRect.left;

		m_Memory.m_WndRect.left        = pApp->GetProfileInt(ENTRY_VIEW, VIEW_MEMO_X, 220);
		m_Memory.m_WndRect.top         = pApp->GetProfileInt(ENTRY_VIEW, VIEW_MEMO_Y, 220);
		m_Memory.m_WndRect.right       = pApp->GetProfileInt(ENTRY_VIEW, VIEW_MEMO_W, 400);
		m_Memory.m_WndRect.bottom      = pApp->GetProfileInt(ENTRY_VIEW, VIEW_MEMO_H, 400);
		m_Memory.m_WndRect.bottom     += m_Memory.m_WndRect.top;
		m_Memory.m_WndRect.right      += m_Memory.m_WndRect.left;

		m_ZeroPage.m_WndRect.left      = pApp->GetProfileInt(ENTRY_VIEW, VIEW_ZMEM_X, 240);
		m_ZeroPage.m_WndRect.top       = pApp->GetProfileInt(ENTRY_VIEW, VIEW_ZMEM_Y, 240);
		m_ZeroPage.m_WndRect.right     = pApp->GetProfileInt(ENTRY_VIEW, VIEW_ZMEM_W, 400);
		m_ZeroPage.m_WndRect.bottom    = pApp->GetProfileInt(ENTRY_VIEW, VIEW_ZMEM_H, 400);
		m_ZeroPage.m_WndRect.bottom   += m_ZeroPage.m_WndRect.top;
		m_ZeroPage.m_WndRect.right    += m_ZeroPage.m_WndRect.left;

		m_Stack.m_WndRect.left         = pApp->GetProfileInt(ENTRY_VIEW, VIEW_STACK_X, 260);
		m_Stack.m_WndRect.top          = pApp->GetProfileInt(ENTRY_VIEW, VIEW_STACK_Y, 260);
		m_Stack.m_WndRect.right        = pApp->GetProfileInt(ENTRY_VIEW, VIEW_STACK_W, 300);
		m_Stack.m_WndRect.bottom       = pApp->GetProfileInt(ENTRY_VIEW, VIEW_STACK_H, 400);
		m_Stack.m_WndRect.bottom      += m_Stack.m_WndRect.top;
		m_Stack.m_WndRect.right       += m_Stack.m_WndRect.left;

		m_wndLog.m_WndRect.left        = pApp->GetProfileInt(ENTRY_VIEW, VIEW_LOG_X, 280);
		m_wndLog.m_WndRect.top         = pApp->GetProfileInt(ENTRY_VIEW, VIEW_LOG_Y, 280);
		m_wndLog.m_WndRect.right       = pApp->GetProfileInt(ENTRY_VIEW, VIEW_LOG_W, 300);
		m_wndLog.m_WndRect.bottom      = pApp->GetProfileInt(ENTRY_VIEW, VIEW_LOG_H, 400);
		m_wndLog.m_WndRect.right       += m_wndLog.m_WndRect.left;
		m_wndLog.m_WndRect.bottom      += m_wndLog.m_WndRect.top;

		CIOWindow::m_bHidden           = pApp->GetProfileInt(ENTRY_VIEW, VIEW_IO_HID, 0);
		CRegisterBar::m_bHidden        = pApp->GetProfileInt(ENTRY_VIEW, VIEW_REGS_HID, 0);

		m_Memory.m_bHidden             = pApp->GetProfileInt(ENTRY_VIEW, VIEW_MEMO_HID, false) != 0;
		m_ZeroPage.m_bHidden           = pApp->GetProfileInt(ENTRY_VIEW, VIEW_ZMEM_HID, false) != 0;
		m_Stack.m_bHidden              = pApp->GetProfileInt(ENTRY_VIEW, VIEW_STACK_HID, false) != 0;
		m_wndLog.m_bHidden             = !!pApp->GetProfileInt(ENTRY_VIEW, VIEW_LOG_HID, false) != 0;

//    CMemoryInfo::m_bHidden = pApp->GetProfileInt(ENTRY_VIEW, VIEW_MEMO_HID, false) != 0;

		for (int i=0; fonts[i]; i++)	// odczyt info o fontach w programie
		{
			*fonts[i] = LogFont;	// domy渓ny font
			LPBYTE ptr= NULL;
			UINT bytes= sizeof *fonts[i];
			pApp->GetProfileBinary(ENTRY_VIEW, idents[i], &ptr, &bytes);
			if (ptr)
			{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -