Changeset 15
- Timestamp:
- Apr 21, 2026, 6:15:40 PM (5 days ago)
- Location:
- trunk
- Files:
-
- 11 edited
-
Core.lfm (modified) (1 diff)
-
Core.pas (modified) (6 diffs)
-
Debugger.pas (modified) (2 diffs)
-
Forms/FormCallStack.lfm (modified) (1 diff)
-
Forms/FormCpu.lfm (modified) (2 diffs)
-
Forms/FormCpu.pas (modified) (2 diffs)
-
Forms/FormDisassembler.lfm (modified) (1 diff)
-
Forms/FormDisassembler.pas (modified) (4 diffs)
-
Forms/FormMemory.lfm (modified) (1 diff)
-
Forms/FormMemory.pas (modified) (6 diffs)
-
Forms/FormMessages.lfm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Core.lfm
r13 r15 113 113 end 114 114 object TimerUpdate: TTimer 115 Interval = 50 0115 Interval = 50 116 116 OnTimer = TimerUpdateTimer 117 117 Left = 328 -
trunk/Core.pas
r14 r15 54 54 procedure TimerUpdateTimer(Sender: TObject); 55 55 private 56 LastPc: Word;56 FUpdateInterfacePending: Boolean; 57 57 procedure DoChangePC(Address: Word); 58 58 procedure DebuggerChange(Sender: TObject); … … 68 68 Debugger: TDebugger; 69 69 Disassembler: TDisassembler; 70 procedure UpdateDisassemblerPos;71 70 procedure UpdateInterface; 72 71 end; … … 242 241 procedure TCore.DataModuleCreate(Sender: TObject); 243 242 begin 244 LastPc := $ffff;245 243 SharpMz800 := TSharpMz800.Create; 246 244 Disassembler := TDisassembler.Create; … … 250 248 Debugger.OnChange := DebuggerChange; 251 249 Debugger.Disassembler := Disassembler; 250 UpdateInterface; 252 251 FormMain := TFormMain.Create(nil); 253 252 FormMain.Show; … … 271 270 procedure TCore.TimerUpdateTimer(Sender: TObject); 272 271 begin 273 UpdateDisassemblerPos; 274 UpdateInterface; 272 if FUpdateInterfacePending then begin 273 FUpdateInterfacePending := False; 274 UpdateInterface; 275 end; 275 276 end; 276 277 … … 283 284 begin 284 285 if Assigned(FormCallStack) then FormCallStack.Reload; 285 end; 286 287 procedure TCore.UpdateDisassemblerPos; 288 begin 289 if LastPc <> SharpMz800.Cpu.Pc then begin 290 if Assigned(FormDisassembler) then 291 FormDisassembler.SelectAddress(SharpMz800.Cpu.PC); 292 LastPc := SharpMz800.Cpu.Pc; 293 end; 286 if Assigned(FormCpu) then FormCpu.Reload; 287 FUpdateInterfacePending := True; 294 288 end; 295 289 -
trunk/Debugger.pas
r14 r15 49 49 FDisassembler: TDisassembler; 50 50 FOnChange: TNotifyEvent; 51 procedure Pause; 51 52 procedure SetCpu(AValue: TCpuZ80); 52 53 procedure CpuCall(Address: Word); … … 109 110 end; 110 111 112 procedure TDebugger.Pause; 113 begin 114 DebugMode := dmNone; 115 Cpu.Paused := True; 116 DoOnChange; 117 end; 118 111 119 procedure TDebugger.CpuStep; 112 120 begin 113 121 if DebugMode <> dmNone then begin 114 122 if DebugMode = dmStepIn then begin 115 DebugMode := dmNone; 116 Cpu.Paused := True; 123 Pause; 117 124 end; 118 125 if (DebugMode = dmStopAddress) and (DebugStopAddress = Cpu.PC) then begin 119 DebugMode := dmNone; 120 Cpu.Paused := True; 126 Pause; 121 127 end; 122 128 if DebugMode = dmStepOver then begin 123 DebugMode := dmNone; 124 Cpu.Paused := True; 129 Pause; 125 130 end; 126 131 end; 127 132 if BreakPoints.Contains(Cpu.PC) then begin 128 DebugMode := dmNone;129 Cpu.Paused := True;130 end;133 Pause; 134 end; 135 DoOnChange; 131 136 end; 132 137 -
trunk/Forms/FormCallStack.lfm
r13 r15 41 41 end 42 42 object Timer1: TTimer 43 Interval = 10043 Interval = 50 44 44 OnTimer = Timer1Timer 45 45 Left = 91 -
trunk/Forms/FormCpu.lfm
r13 r15 9 9 DesignTimePPI = 144 10 10 LCLVersion = '4.6.0.0' 11 OnCreate = FormCreate 12 OnShow = FormShow 11 13 object GroupBox1: TGroupBox 12 14 Left = 8 … … 33 35 end 34 36 end 35 object Timer Update: TTimer36 Interval = 20037 OnTimer = Timer UpdateTimer38 Left = 32439 Top = 14737 object Timer1: TTimer 38 Interval = 50 39 OnTimer = Timer1Timer 40 Left = 134 41 Top = 214 40 42 end 41 43 end -
trunk/Forms/FormCpu.pas
r11 r15 13 13 TFormCpu = class(TForm) 14 14 GroupBox1: TGroupBox; 15 Timer Update: TTimer;15 Timer1: TTimer; 16 16 ValueListEditor1: TValueListEditor; 17 procedure TimerUpdateTimer(Sender: TObject); 17 procedure FormCreate(Sender: TObject); 18 procedure FormShow(Sender: TObject); 19 procedure Timer1Timer(Sender: TObject); 20 private 21 FReloadPending: Boolean; 18 22 public 19 23 Cpu: TCpuZ80; 24 procedure Reload; 20 25 end; 21 26 … … 27 32 { TFormCpu } 28 33 29 procedure TFormCpu.Timer UpdateTimer(Sender: TObject);34 procedure TFormCpu.Timer1Timer(Sender: TObject); 30 35 begin 31 ValueListEditor1.Values['AF'] := IntToHex(Cpu.AF.Value, 4); 32 ValueListEditor1.Values['BC'] := IntToHex(Cpu.BC.Value, 4); 33 ValueListEditor1.Values['DE'] := IntToHex(Cpu.DE.Value, 4); 34 ValueListEditor1.Values['HL'] := IntToHex(Cpu.HL.Value, 4); 35 ValueListEditor1.Values['PC'] := IntToHex(Cpu.PC, 4); 36 ValueListEditor1.Values['SP'] := IntToHex(Cpu.SP, 4); 37 ValueListEditor1.Values['IX'] := IntToHex(Cpu.IX, 4); 38 ValueListEditor1.Values['IY'] := IntToHex(Cpu.IY, 4); 39 ValueListEditor1.Values['R'] := IntToHex(Cpu.RegR, 2); 40 ValueListEditor1.Values['I'] := IntToHex(Cpu.RegI, 2); 41 ValueListEditor1.Values['IM'] := IntToStr(Cpu.InterruptMode); 42 ValueListEditor1.Values['EI'] := IntToStr(Byte(Cpu.InterruptEnabled)); 43 ValueListEditor1.Values['Cycles'] := IntToStr(Cpu.Cycles); 44 ValueListEditor1.Values['Ticks'] := IntToStr(Cpu.Ticks); 36 if FReloadPending then begin 37 FReloadPending := False; 38 ValueListEditor1.Values['AF'] := IntToHex(Cpu.AF.Value, 4); 39 ValueListEditor1.Values['BC'] := IntToHex(Cpu.BC.Value, 4); 40 ValueListEditor1.Values['DE'] := IntToHex(Cpu.DE.Value, 4); 41 ValueListEditor1.Values['HL'] := IntToHex(Cpu.HL.Value, 4); 42 ValueListEditor1.Values['PC'] := IntToHex(Cpu.PC, 4); 43 ValueListEditor1.Values['SP'] := IntToHex(Cpu.SP, 4); 44 ValueListEditor1.Values['IX'] := IntToHex(Cpu.IX, 4); 45 ValueListEditor1.Values['IY'] := IntToHex(Cpu.IY, 4); 46 ValueListEditor1.Values['R'] := IntToHex(Cpu.RegR, 2); 47 ValueListEditor1.Values['I'] := IntToHex(Cpu.RegI, 2); 48 ValueListEditor1.Values['IM'] := IntToStr(Cpu.InterruptMode); 49 ValueListEditor1.Values['EI'] := IntToStr(Byte(Cpu.InterruptEnabled)); 50 ValueListEditor1.Values['Cycles'] := IntToStr(Cpu.Cycles); 51 ValueListEditor1.Values['Ticks'] := IntToStr(Cpu.Ticks); 52 end; 53 end; 54 55 procedure TFormCpu.FormCreate(Sender: TObject); 56 begin 57 end; 58 59 procedure TFormCpu.FormShow(Sender: TObject); 60 begin 61 Reload; 62 end; 63 64 procedure TFormCpu.Reload; 65 begin 66 FReloadPending := True; 45 67 end; 46 68 -
trunk/Forms/FormDisassembler.lfm
r13 r15 66 66 end 67 67 object Timer1: TTimer 68 Interval = 10068 Interval = 50 69 69 OnTimer = Timer1Timer 70 70 Left = 568 -
trunk/Forms/FormDisassembler.pas
r13 r15 31 31 FOnAddBreakPoint: TAddressEvent; 32 32 FOnChangePC: TAddressEvent; 33 FLastPC: Word; 33 34 procedure DoChangePC(Address: Word); 34 35 procedure DoAddBreakPoint(Address: Word); 36 procedure UpdateDisassemblerPos; 35 37 public 36 38 Debugger: TDebugger; … … 55 57 { TFormDisassembler } 56 58 59 procedure TFormDisassembler.UpdateDisassemblerPos; 60 begin 61 if FLastPc <> Debugger.Cpu.Pc then begin 62 SelectAddress(Debugger.Cpu.PC); 63 FLastPc := Debugger.Cpu.Pc; 64 end; 65 end; 66 57 67 procedure TFormDisassembler.FormClose(Sender: TObject; 58 68 var CloseAction: TCloseAction); … … 62 72 procedure TFormDisassembler.FormCreate(Sender: TObject); 63 73 begin 74 FLastPC := $ffff; 64 75 end; 65 76 … … 128 139 procedure TFormDisassembler.Timer1Timer(Sender: TObject); 129 140 begin 141 UpdateDisassemblerPos; 130 142 if FReloadPending then begin 131 143 FReloadPending := False; -
trunk/Forms/FormMemory.lfm
r13 r15 59 59 end 60 60 object Timer1: TTimer 61 Interval = 10061 Interval = 50 62 62 OnTimer = Timer1Timer 63 63 Left = 469 -
trunk/Forms/FormMemory.pas
r13 r15 5 5 uses 6 6 Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, ExtCtrls, 7 StdCtrls, MemoryTypes, Generics.Collections ;7 StdCtrls, MemoryTypes, Generics.Collections, Math; 8 8 9 9 type … … 31 31 procedure ReloadAreas; 32 32 procedure Reload; 33 procedure ReloadList; 33 34 end; 34 35 … … 46 47 procedure TFormMemory.Reload; 47 48 begin 48 ListViewMemory.Items.Count := FSize div ItemsPerLine; 49 FReloadPending := True; 50 end; 51 52 procedure TFormMemory.ReloadList; 53 begin 54 ListViewMemory.Items.Count := Ceil(FSize / ItemsPerLine); 49 55 ListViewMemory.Refresh; 50 56 end; … … 56 62 Text: string; 57 63 One: Byte; 64 Count: Byte; 65 Address: Word; 58 66 begin 59 if Item.Index < FSize div ItemsPerLine then begin 67 Address := Item.Index * ItemsPerLine; 68 if Address < FSize then begin 69 Count := ItemsPerLine; 70 if (Address + Count) >= FSize then 71 Count := FSize - Address; 60 72 Line := ''; 61 73 Text := ''; 62 for I := 0 to ItemsPerLine- 1 do begin63 One := FMemory.Read( Item.Index * ItemsPerLine+ I);74 for I := 0 to Count - 1 do begin 75 One := FMemory.Read(Address + I); 64 76 Line := Line + IntToHex(One, 2) + ' '; 65 77 if One >= 32 then Text := Text + Char(One) 66 78 else Text := Text + ' '; 67 79 end; 68 Item.Caption := IntToHex( Item.Index * ItemsPerLine, 8);80 Item.Caption := IntToHex(Address, 8); 69 81 Item.SubItems.Add(Line); 70 82 Item.SubItems.Add(Text); … … 76 88 ReloadAreas; 77 89 ComboBoxAreaSelect(nil); 78 FReloadPending := True;90 Reload; 79 91 end; 80 92 … … 105 117 if FReloadPending then begin 106 118 FReloadPending := False; 107 Reload ;119 ReloadList; 108 120 end; 109 121 end; -
trunk/Forms/FormMessages.lfm
r13 r15 23 23 end 24 24 object Timer1: TTimer 25 Interval = 10025 Interval = 50 26 26 OnTimer = Timer1Timer 27 27 Left = 357
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/mzxemu/chrome/site/your_project_logo.png)