Ignore:
Timestamp:
Apr 21, 2026, 2:55:51 PM (6 days ago)
Author:
chronos
Message:
  • Added: Call stack window.
  • Modified: Use reload pending boolean variable and reload from timer instead of Thread.Synchronize to not delay CPU execution.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Forms/FormDisassembler.pas

    r12 r13  
    55uses
    66  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls,
    7   ExtCtrls, Menus, Disassembler, Z80;
     7  ExtCtrls, Menus, Disassembler, Base, Debugger;
    88
    99type
    10   TAddressEvent = procedure (Address: Word) of object;
    11 
    1210  { TFormDisassembler }
    1311
     
    1816    MenuItemSetAddress: TMenuItem;
    1917    PopupMenu1: TPopupMenu;
     18    Timer1: TTimer;
    2019    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    2120    procedure FormCreate(Sender: TObject);
     
    2726    procedure MenuItemSetAddressClick(Sender: TObject);
    2827    procedure PopupMenu1Popup(Sender: TObject);
     28    procedure Timer1Timer(Sender: TObject);
    2929  private
     30    FReloadPending: Boolean;
    3031    FOnAddBreakPoint: TAddressEvent;
    3132    FOnChangePC: TAddressEvent;
     
    3334    procedure DoAddBreakPoint(Address: Word);
    3435  public
    35     Cpu: TCpuZ80;
     36    Debugger: TDebugger;
    3637    Disassembler: TDisassembler;
    3738    procedure Disassemble(Sender: TObject);
    3839    procedure SelectAddress(Address: Word);
    3940    procedure ReloadList;
     41    procedure Reload;
    4042    function GetCurrentAddress: Word;
    4143    property OnChangePC: TAddressEvent read FOnChangePC write FOnChangePC;
     
    6062procedure TFormDisassembler.FormCreate(Sender: TObject);
    6163begin
    62   Disassembler := TDisassembler.Create;
    6364end;
    6465
    6566procedure TFormDisassembler.FormDestroy(Sender: TObject);
    6667begin
    67   FreeAndNil(Disassembler);
    6868end;
    6969
    7070procedure TFormDisassembler.FormShow(Sender: TObject);
    7171begin
    72   Disassemble(nil);
     72  Reload;
    7373end;
    7474
     
    7979  if Item.Index < Disassembler.DecodedInstructions.Count then
    8080  with TDecodedInstruction(Disassembler.DecodedInstructions[Item.Index]) do begin
    81     if Cpu.BreakPoints.Contains(Address) then BreakPoint := ' @'
     81    if Debugger.BreakPoints.Contains(Address) then BreakPoint := ' @'
    8282      else BreakPoint := '';
    8383    Item.Caption := IntToHex(Address, 4) + BreakPoint;
     
    9393begin
    9494  if Assigned(ListView1.Selected) then begin
    95     Cpu.BreakPoints.Add(TDecodedInstruction(ListView1.Selected.Data).Address);
     95    Debugger.BreakPoints.Add(TDecodedInstruction(ListView1.Selected.Data).Address);
    9696    ReloadList;
    9797  end;
     
    101101begin
    102102  if Assigned(ListView1.Selected) then begin
    103     Cpu.BreakPoints.Remove(TDecodedInstruction(ListView1.Selected.Data).Address);
     103    Debugger.BreakPoints.Remove(TDecodedInstruction(ListView1.Selected.Data).Address);
    104104    ReloadList;
    105105  end;
     
    116116procedure TFormDisassembler.PopupMenu1Popup(Sender: TObject);
    117117begin
    118 
    119118  MenuItemSetAddress.Enabled := Assigned(ListView1.Selected);
    120119  if Assigned(ListView1.Selected) then begin
     
    127126end;
    128127
     128procedure TFormDisassembler.Timer1Timer(Sender: TObject);
     129begin
     130  if FReloadPending then begin
     131    FReloadPending := False;
     132    Disassembler.Disassemble;
     133    ReloadList;
     134  end;
     135end;
     136
    129137procedure TFormDisassembler.Disassemble(Sender: TObject);
    130138begin
    131   Disassembler.Disassemble;
    132   ReloadList;
     139  Reload;
    133140end;
    134141
     
    146153var
    147154  Item: TListItem;
    148   DecodedInstruction: TDecodedInstruction;
    149155  Index: Integer;
    150156begin
    151157  Index := Disassembler.DecodedInstructions.SearchAddressIndex(Address);
    152158  if Index >= 0 then begin
    153     DecodedInstruction := Disassembler.DecodedInstructions[Index];
    154159    Item := ListView1.Items[Index];
    155160    if Assigned(Item) then begin
     
    172177end;
    173178
     179procedure TFormDisassembler.Reload;
     180begin
     181  FReloadPending := True;
     182end;
     183
    174184function TFormDisassembler.GetCurrentAddress: Word;
    175185begin
Note: See TracChangeset for help on using the changeset viewer.