Changeset 12 for trunk/Forms/FormDisassembler.pas
- Timestamp:
- Apr 21, 2026, 11:04:26 AM (6 days ago)
- File:
-
- 1 edited
-
trunk/Forms/FormDisassembler.pas (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Forms/FormDisassembler.pas
r11 r12 5 5 uses 6 6 Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, 7 ExtCtrls, Menus, Disassembler ;7 ExtCtrls, Menus, Disassembler, Z80; 8 8 9 9 type 10 T ChangePCEvent = procedure (Address: Word) of object;10 TAddressEvent = procedure (Address: Word) of object; 11 11 12 12 { TFormDisassembler } … … 14 14 TFormDisassembler = class(TForm) 15 15 ListView1: TListView; 16 MenuItemRemoveBreakPoint: TMenuItem; 17 MenuItemAddBreakPoint: TMenuItem; 16 18 MenuItemSetAddress: TMenuItem; 17 19 PopupMenu1: TPopupMenu; … … 21 23 procedure FormShow(Sender: TObject); 22 24 procedure ListView1Data(Sender: TObject; Item: TListItem); 25 procedure MenuItemAddBreakPointClick(Sender: TObject); 26 procedure MenuItemRemoveBreakPointClick(Sender: TObject); 23 27 procedure MenuItemSetAddressClick(Sender: TObject); 28 procedure PopupMenu1Popup(Sender: TObject); 24 29 private 25 FOnChangePC: TChangePCEvent; 30 FOnAddBreakPoint: TAddressEvent; 31 FOnChangePC: TAddressEvent; 26 32 procedure DoChangePC(Address: Word); 33 procedure DoAddBreakPoint(Address: Word); 27 34 public 35 Cpu: TCpuZ80; 28 36 Disassembler: TDisassembler; 29 37 procedure Disassemble(Sender: TObject); 30 38 procedure SelectAddress(Address: Word); 31 39 procedure ReloadList; 32 property OnChangePC: TChangePCEvent read FOnChangePC write FOnChangePC; 40 function GetCurrentAddress: Word; 41 property OnChangePC: TAddressEvent read FOnChangePC write FOnChangePC; 42 property OnAddBreakPoint: TAddressEvent read FOnAddBreakPoint write FOnAddBreakPoint; 33 43 end; 34 44 … … 64 74 65 75 procedure TFormDisassembler.ListView1Data(Sender: TObject; Item: TListItem); 76 var 77 BreakPoint: string; 66 78 begin 67 79 if Item.Index < Disassembler.DecodedInstructions.Count then 68 80 with TDecodedInstruction(Disassembler.DecodedInstructions[Item.Index]) do begin 69 Item.Caption := IntToHex(Address, 4); 81 if Cpu.BreakPoints.Contains(Address) then BreakPoint := ' @' 82 else BreakPoint := ''; 83 Item.Caption := IntToHex(Address, 4) + BreakPoint; 70 84 Item.Data := Disassembler.DecodedInstructions[Item.Index]; 71 85 Item.SubItems.Add(GetOpcodesText); … … 76 90 end; 77 91 92 procedure TFormDisassembler.MenuItemAddBreakPointClick(Sender: TObject); 93 begin 94 if Assigned(ListView1.Selected) then begin 95 Cpu.BreakPoints.Add(TDecodedInstruction(ListView1.Selected.Data).Address); 96 ReloadList; 97 end; 98 end; 99 100 procedure TFormDisassembler.MenuItemRemoveBreakPointClick(Sender: TObject); 101 begin 102 if Assigned(ListView1.Selected) then begin 103 Cpu.BreakPoints.Remove(TDecodedInstruction(ListView1.Selected.Data).Address); 104 ReloadList; 105 end; 106 end; 107 78 108 procedure TFormDisassembler.MenuItemSetAddressClick(Sender: TObject); 79 109 begin … … 81 111 DoChangePC(TDecodedInstruction(ListView1.Selected.Data).Address); 82 112 SelectAddress(TDecodedInstruction(ListView1.Selected.Data).Address); 113 end; 114 end; 115 116 procedure TFormDisassembler.PopupMenu1Popup(Sender: TObject); 117 begin 118 119 MenuItemSetAddress.Enabled := Assigned(ListView1.Selected); 120 if Assigned(ListView1.Selected) then begin 121 MenuItemRemoveBreakPoint.Enabled := Pos('@', ListView1.Selected.Caption) > 0; 122 MenuItemAddBreakPoint.Enabled := not MenuItemRemoveBreakPoint.Enabled; 123 end else begin 124 MenuItemRemoveBreakPoint.Enabled := False; 125 MenuItemAddBreakPoint.Enabled := False; 83 126 end; 84 127 end; … … 93 136 begin 94 137 if Assigned(FOnChangePC) then FOnChangePC(Address); 138 end; 139 140 procedure TFormDisassembler.DoAddBreakPoint(Address: Word); 141 begin 142 if Assigned(FOnAddBreakPoint) then FOnAddBreakPoint(Address); 95 143 end; 96 144 … … 124 172 end; 125 173 174 function TFormDisassembler.GetCurrentAddress: Word; 175 begin 176 if Assigned(ListView1.Selected) then 177 Result := TDecodedInstruction(ListView1.Selected.Data).Address 178 else Result := 0; 179 end; 180 126 181 end. 127 182
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)