📄 mainfrm.cpp
字号:
/*-----------------------------------------------------------------------------
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 + -