diff --git a/trunk/src/drivers/win/ppuview.cpp b/trunk/src/drivers/win/ppuview.cpp index aaf8229a..01cdcaa0 100644 --- a/trunk/src/drivers/win/ppuview.cpp +++ b/trunk/src/drivers/win/ppuview.cpp @@ -47,14 +47,14 @@ int mouse_x, mouse_y; #define PATTERNHEIGHT 128 #define PATTERNBITWIDTH PATTERNWIDTH*3 #define PATTERNDESTX_BASE 7 -#define PATTERNDESTY_BASE 16 +#define PATTERNDESTY_BASE 18 #define ZOOM 2 #define PALETTEWIDTH 32*4*4 #define PALETTEHEIGHT 32*2 #define PALETTEBITWIDTH PALETTEWIDTH*3 #define PALETTEDESTX_BASE 7 -#define PALETTEDESTY_BASE 16 +#define PALETTEDESTY_BASE 18 #define TBM_SETPOS (WM_USER+5) #define TBM_SETRANGE (WM_USER+6) diff --git a/trunk/src/drivers/win/res.rc b/trunk/src/drivers/win/res.rc index 3ae0e7a0..66b7469f 100644 --- a/trunk/src/drivers/win/res.rc +++ b/trunk/src/drivers/win/res.rc @@ -1177,14 +1177,14 @@ FONT 8, "MS Sans Serif", 400, 0, 0x0 BEGIN EDITTEXT IDC_TRACER_LOG,3,3,300,44,ES_MULTILINE | ES_NOHIDESEL | ES_READONLY | WS_HSCROLL SCROLLBAR IDC_SCRL_TRACER_LOG,303,3,11,44,SBS_VERT - CONTROL "Log last",IDC_RADIO_LOG_LAST,"Button",BS_AUTORADIOBUTTON | BS_LEFT,9,54,38,10 - COMBOBOX IDC_TRACER_LOG_SIZE,50,53,47,13,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "lines to this window",IDC_TEXT_LINES_TO_THIS_WINDOW,100,55,62,10 - DEFPUSHBUTTON "Start Logging",IDC_BTN_START_STOP_LOGGING,243,51,71,15,BS_CENTER | BS_VCENTER - CONTROL "Log to File",IDC_RADIO_LOG_TO_FILE,"Button",BS_AUTORADIOBUTTON | BS_LEFT,9,71,46,10 - PUSHBUTTON "Browse...",IDC_BTN_LOG_BROWSE,57,69,40,14,BS_CENTER | BS_VCENTER + CONTROL "Log last",IDC_RADIO_LOG_LAST,"Button",BS_AUTORADIOBUTTON | BS_LEFT,9,53,38,10 + COMBOBOX IDC_TRACER_LOG_SIZE,49,52,46,13,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "lines",IDC_TEXT_LINES_TO_THIS_WINDOW,97,54,17,10 + DEFPUSHBUTTON "Start Logging",IDC_BTN_START_STOP_LOGGING,135,51,49,15,BS_CENTER | BS_VCENTER + CONTROL "Log to File",IDC_RADIO_LOG_TO_FILE,"Button",BS_AUTORADIOBUTTON | BS_LEFT,9,70,46,10 + PUSHBUTTON "Browse...",IDC_BTN_LOG_BROWSE,56,68,39,14,BS_CENTER | BS_VCENTER CONTROL "Automatically update this window while logging",IDC_CHECK_LOG_UPDATE_WINDOW, - "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,113,71,156,10 + "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,113,70,156,10 GROUPBOX "Log Options",IDC_GROUP_LOG_OPTIONS,3,85,311,65 CONTROL "Log state of registers",IDC_CHECK_LOG_REGISTERS,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,8,96,99,10 CONTROL "Log Processor status flags",IDC_CHECK_LOG_PROCESSOR_STATUS, @@ -1628,18 +1628,18 @@ STYLE DS_SETFONT | DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_C CAPTION "PPU Viewer" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - GROUPBOX "Pattern Tables",GRP_PPUVIEW_TABLES,2,-1,351,204,WS_TABSTOP - LTEXT "Tile:",LBL_PPUVIEW_TILE1,6,169,50,9 - LTEXT "Tile:",LBL_PPUVIEW_TILE2,177,169,50,9 - CONTROL "",CTL_PPUVIEW_TRACKBAR,"msctls_trackbar32",WS_TABSTOP,227,178,106,11 - LTEXT "Refresh: More",-1,177,178,50,9 - LTEXT "Less",-1,334,178,18,10 - GROUPBOX "Palettes",LBL_PPUVIEW_PALETTES,2,204,351,53,WS_TABSTOP - LTEXT "Display on scanline:",-1,6,178,65,9 - EDITTEXT IDC_PPUVIEW_SCANLINE,72,176,27,12 + GROUPBOX "Pattern Tables",GRP_PPUVIEW_TABLES,2,-1,351,205,WS_TABSTOP + LTEXT "Tile:",LBL_PPUVIEW_TILE1,6,170,50,9 + LTEXT "Tile:",LBL_PPUVIEW_TILE2,177,170,50,9 + CONTROL "",CTL_PPUVIEW_TRACKBAR,"msctls_trackbar32",WS_TABSTOP,227,179,106,11 + LTEXT "Refresh: More",-1,177,179,50,9 + LTEXT "Less",-1,334,179,18,10 + GROUPBOX "Palettes",LBL_PPUVIEW_PALETTES,2,204,351,54,WS_TABSTOP + LTEXT "Display on scanline:",-1,6,179,65,9 + EDITTEXT IDC_PPUVIEW_SCANLINE,72,177,27,12 CONTROL "Mask unused graphics (needs Code/Data Logger)",IDC_MASK_UNUSED_GRAPHICS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,189,169,10 - CONTROL "Invert the mask",IDC_INVERT_THE_MASK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,177,189,61,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,190,169,10 + CONTROL "Invert the mask",IDC_INVERT_THE_MASK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,177,190,61,10 END ARCHIVECHOOSERDIALOG DIALOGEX 0, 0, 265, 159 diff --git a/trunk/src/drivers/win/tracer.cpp b/trunk/src/drivers/win/tracer.cpp index ea9b84e3..7c5c60c5 100644 --- a/trunk/src/drivers/win/tracer.cpp +++ b/trunk/src/drivers/win/tracer.cpp @@ -100,7 +100,6 @@ KnownWindowItemPosData tracerKnownWindowItems[] = { IDC_RADIO_LOG_LAST, WINDOW_ITEM_RESIZE_TYPE_LEFT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_LEFT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, IDC_TRACER_LOG_SIZE, WINDOW_ITEM_RESIZE_TYPE_LEFT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_LEFT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, IDC_TEXT_LINES_TO_THIS_WINDOW, WINDOW_ITEM_RESIZE_TYPE_LEFT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_LEFT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, - IDC_BTN_START_STOP_LOGGING, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, IDC_RADIO_LOG_TO_FILE, WINDOW_ITEM_RESIZE_TYPE_LEFT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_LEFT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, IDC_BTN_LOG_BROWSE, WINDOW_ITEM_RESIZE_TYPE_LEFT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_LEFT_ALIGNED, WINDOW_ITEM_RESIZE_TYPE_RIGHT_ALIGNED, }; @@ -113,10 +112,10 @@ int oldcodecount, olddatacount; SCROLLINFO tracesi; -char **tracelogbuf; +char **tracelogbuf = 0; std::vector> tracelogbufAddressesLog; -int tracelogbufsize, tracelogbufpos; -int tracelogbufusedsize; +int tracelogbufsize = 0, tracelogbufpos = 0; +int tracelogbufusedsize = 0; char str_axystate[LOG_AXYSTATE_MAX_LEN] = {0}, str_procstatus[LOG_PROCSTATUS_MAX_LEN] = {0}; char str_tabs[LOG_TABS_MASK+1] = {0}, str_address[LOG_ADDRESS_MAX_LEN] = {0}, str_data[LOG_DATA_MAX_LEN] = {0}, str_disassembly[LOG_DISASSEMBLY_MAX_LEN] = {0}; @@ -139,8 +138,10 @@ WNDPROC IDC_TRACER_LOG_oldWndProc = 0; void ShowLogDirDialog(void); void BeginLoggingSequence(void); -void EndLoggingSequence(void); +void ClearTraceLogBuf(); +void EndLoggingSequence(); void UpdateLogWindow(void); +void ScrollLogWindowToLastLine(); void UpdateLogText(void); void EnableTracerMenuItems(void); int PromptForCDLogger(void); @@ -474,7 +475,7 @@ BOOL CALLBACK TracerCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) if (tracesi.nPos < tracesi.nMin) tracesi.nPos = tracesi.nMin; SetScrollInfo(GetDlgItem(hTracer, IDC_SCRL_TRACER_LOG), SB_CTL, &tracesi, TRUE); - if (logging && !logtofile) + if (!logtofile) UpdateLogText(); } } @@ -506,8 +507,9 @@ BOOL CALLBACK TracerCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) } case WM_CLOSE: case WM_QUIT: - if(logging) + if (logging) EndLoggingSequence(); + ClearTraceLogBuf(); hTracer = 0; EndDialog(hwndDlg,0); break; @@ -519,8 +521,10 @@ BOOL CALLBACK TracerCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) switch(LOWORD(wParam)) { case IDC_BTN_START_STOP_LOGGING: - if(logging)EndLoggingSequence(); - else BeginLoggingSequence(); + if (logging) + EndLoggingSequence(); + else + BeginLoggingSequence(); EnableTracerMenuItems(); break; case IDC_RADIO_LOG_LAST: @@ -613,7 +617,7 @@ BOOL CALLBACK TracerCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { if (lParam) { - if ((!logging) || logtofile) + if (!tracelogbuf) break; if (!FCEUI_EmulationPaused() && !log_update_window) @@ -682,6 +686,8 @@ void BeginLoggingSequence(void) fprintf(LOG_FP,FCEU_NAME_AND_VERSION" - Trace Log File\n"); //mbg merge 7/19/06 changed string } else { + ClearTraceLogBuf(); + // create new log log_lines_option = SendDlgItemMessage(hTracer, IDC_TRACER_LOG_SIZE, CB_GETCURSEL, 0, 0); if (log_lines_option == CB_ERR) log_lines_option = 0; @@ -726,7 +732,8 @@ void FCEUD_TraceInstruction(uint8 *opcode, int size) // if instruction executed from the RAM, skip this, log all instead // TODO: loops folding mame-lyke style - if(GetPRGAddress(addr) != -1) { + if (GetPRGAddress(addr) != -1) + { if(((logging_options & LOG_NEW_INSTRUCTIONS) && (oldcodecount != codecount)) || ((logging_options & LOG_NEW_DATA) && (olddatacount != datacount))) { @@ -974,7 +981,22 @@ void OutputLogLine(const char *str, std::vector* addressesLog, bool add_ } } -void EndLoggingSequence(void) +void ClearTraceLogBuf(void) +{ + if (tracelogbuf) + { + int j = tracelogbufsize; + for(int i = 0; i < j;i++) + { + free(tracelogbuf[i]); + } + free(tracelogbuf); + tracelogbuf = 0; + } + tracelogbufAddressesLog.resize(0); +} + +void EndLoggingSequence() { int j, i; if (logtofile) @@ -982,19 +1004,15 @@ void EndLoggingSequence(void) fclose(LOG_FP); } else { - j = tracelogbufsize; - for(i = 0;i < j;i++) - { - free(tracelogbuf[i]); - } - free(tracelogbuf); - tracelogbufAddressesLog.resize(0); - - SetDlgItemText(hTracer, IDC_TRACER_LOG, "Welcome to the Trace Logger."); + strcpy(str_result, "Logging finished."); + OutputLogLine(str_result); + ScrollLogWindowToLastLine(); + UpdateLogText(); + // do not clear the log window + // ClearTraceLogBuf(); } logging = 0; SetDlgItemText(hTracer, IDC_BTN_START_STOP_LOGGING,"Start Logging"); - } void UpdateLogWindow(void) @@ -1013,14 +1031,7 @@ void UpdateLogWindow(void) } log_old_emu_paused = emu_paused; - tracesi.cbSize = sizeof(SCROLLINFO); - tracesi.fMask = SIF_ALL; - tracesi.nMin = 0; - tracesi.nMax = tracelogbufusedsize; - tracesi.nPos = tracesi.nMax - tracesi.nPage; - if (tracesi.nPos < tracesi.nMin) - tracesi.nPos = tracesi.nMin; - SetScrollInfo(GetDlgItem(hTracer,IDC_SCRL_TRACER_LOG),SB_CTL,&tracesi,TRUE); + ScrollLogWindowToLastLine(); if (logging_options & LOG_SYMBOLIC) loadNameFiles(); @@ -1030,12 +1041,24 @@ void UpdateLogWindow(void) return; } +void ScrollLogWindowToLastLine() +{ + tracesi.cbSize = sizeof(SCROLLINFO); + tracesi.fMask = SIF_ALL; + tracesi.nMin = 0; + tracesi.nMax = tracelogbufusedsize; + tracesi.nPos = tracesi.nMax - tracesi.nPage; + if (tracesi.nPos < tracesi.nMin) + tracesi.nPos = tracesi.nMin; + SetScrollInfo(GetDlgItem(hTracer,IDC_SCRL_TRACER_LOG),SB_CTL,&tracesi,TRUE); +} + void UpdateLogText(void) { int j; trace_str[0] = 0; - if (!tracelogbufpos) + if (!tracelogbuf || !tracelogbufpos || !tracelogbufsize) return; int last_line = tracesi.nPos + tracesi.nPage; @@ -1061,7 +1084,7 @@ void UpdateLogText(void) void EnableTracerMenuItems(void) { - if(logging) + if (logging) { EnableWindow(GetDlgItem(hTracer,IDC_RADIO_LOG_LAST),FALSE); EnableWindow(GetDlgItem(hTracer,IDC_RADIO_LOG_TO_FILE),FALSE); @@ -1076,7 +1099,7 @@ void EnableTracerMenuItems(void) EnableWindow(GetDlgItem(hTracer,IDC_BTN_LOG_BROWSE),TRUE); EnableWindow(GetDlgItem(hTracer,IDC_CHECK_LOG_NEW_INSTRUCTIONS),TRUE); - if(logtofile) + if (logtofile) { EnableWindow(GetDlgItem(hTracer,IDC_TRACER_LOG_SIZE),FALSE); EnableWindow(GetDlgItem(hTracer,IDC_BTN_LOG_BROWSE),TRUE);