Changeset 13 for trunk/Core.pas


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/Core.pas

    r12 r13  
    55uses
    66  Classes, SysUtils, ActnList, Controls, FormMain, Forms, ExtCtrls, FormMemory,
    7   SharpMz800, FormDisassembler, FormCpu, FormScreen, FormMessages;
     7  SharpMz800, FormDisassembler, FormCpu, FormScreen, FormMessages, FormCallStack,
     8  Debugger, Disassembler;
    89
    910type
     
    1213
    1314  TCore = class(TDataModule)
     15    AViewCallStack: TAction;
    1416    AInstructionSetGen: TAction;
    1517    AViewMessages: TAction;
     
    4244    procedure AStepOverExecute(Sender: TObject);
    4345    procedure AStopExecute(Sender: TObject);
     46    procedure AViewCallStackExecute(Sender: TObject);
    4447    procedure AViewCpuExecute(Sender: TObject);
    4548    procedure AViewDissssemblerExecute(Sender: TObject);
     
    5356    LastPc: Word;
    5457    procedure DoChangePC(Address: Word);
     58    procedure DebuggerChange(Sender: TObject);
    5559  public
    5660    FormMain: TFormMain;
     
    6064    FormScreen: TFormScreen;
    6165    FormMessages: TFormMessages;
     66    FormCallStack: TFormCallStack;
    6267    SharpMz800: TSharpMz800;
     68    Debugger: TDebugger;
     69    Disassembler: TDisassembler;
    6370    procedure UpdateDisassemblerPos;
    6471    procedure UpdateInterface;
     
    8289  LastPc := $ffff;
    8390  SharpMz800 := TSharpMz800.Create;
     91  Disassembler := TDisassembler.Create;
     92  Disassembler.Memory := SharpMz800.MappedMemory;
     93  Debugger := TDebugger.Create;
     94  Debugger.Cpu := SharpMz800.Cpu;
     95  Debugger.OnChange := DebuggerChange;
     96  Debugger.Disassembler := Disassembler;
    8497//  SharpMz800.PowerOn;
    8598  FormMain := TFormMain.Create(nil);
     
    142155procedure TCore.ARunToCursorExecute(Sender: TObject);
    143156begin
    144   SharpMz800.Cpu.DebugMode := dmStopAddress;
    145   SharpMz800.Cpu.DebugStopAddress := FormDisassembler.GetCurrentAddress;
    146   SharpMz800.Cpu.Running := True;
     157  Debugger.DebugMode := dmStopAddress;
     158  Debugger.DebugStopAddress := FormDisassembler.GetCurrentAddress;
     159  Debugger.Cpu.Running := True;
    147160  UpdateInterface;
    148161end;
     
    150163procedure TCore.AStepInExecute(Sender: TObject);
    151164begin
    152   SharpMz800.Cpu.DebugMode := dmStepIn;
    153   SharpMz800.Cpu.Running := True;
     165  Debugger.DebugMode := dmStepIn;
     166  Debugger.Cpu.Running := True;
    154167  UpdateInterface;
    155168end;
     
    157170procedure TCore.AStepOutExecute(Sender: TObject);
    158171begin
    159   SharpMz800.Cpu.DebugMode := dmStepOut;
    160   SharpMz800.Cpu.Running := True;
     172  Debugger.DebugMode := dmStepOut;
     173  Debugger.Cpu.Running := True;
    161174  UpdateInterface;
    162175end;
     
    164177procedure TCore.AStepOverExecute(Sender: TObject);
    165178begin
    166   SharpMz800.Cpu.DebugMode := dmStepOver;
    167   SharpMz800.Cpu.Running := True;
     179  Debugger.DebugMode := dmStepOver;
     180  Debugger.Cpu.Running := True;
    168181  UpdateInterface;
    169182end;
     
    174187  SharpMz800.Cpu.Reset;
    175188  UpdateInterface;
     189end;
     190
     191procedure TCore.AViewCallStackExecute(Sender: TObject);
     192begin
     193  if not Assigned(FormCallStack) then begin
     194    FormCallStack := TFormCallStack.Create(nil);
     195    FormCallStack.Debugger := Debugger;
     196  end;
     197  FormCallStack.Show;
    176198end;
    177199
     
    189211  if not Assigned(FormDisassembler) then begin
    190212    FormDisassembler := TFormDisassembler.Create(nil);
    191     FormDisassembler.Disassembler.Memory := SharpMz800.MappedMemory;
    192213    FormDisassembler.OnChangePC := DoChangePC;
    193     FormDisassembler.Cpu := SharpMz800.Cpu;
     214    FormDisassembler.Debugger := Debugger;
     215    FormDisassembler.Disassembler := Disassembler;
    194216    SharpMz800.OnMemoryMappingChange := FormDisassembler.Disassemble;
    195217  end;
     
    236258  if Assigned(FormScreen) then FreeAndNil(FormScreen);
    237259  if Assigned(FormMessages) then FreeAndNil(FormMessages);
     260  if Assigned(FormCallStack) then FreeAndNil(FormCallStack);
    238261  FreeAndNil(FormMain);
     262  FreeAndNil(Debugger);
     263  FreeAndNil(Disassembler);
    239264  FreeAndNil(SharpMz800);
    240265end;
     
    249274begin
    250275  SharpMz800.Cpu.PC := Address;
     276end;
     277
     278procedure TCore.DebuggerChange(Sender: TObject);
     279begin
     280  if Assigned(FormCallStack) then FormCallStack.Reload;
    251281end;
    252282
Note: See TracChangeset for help on using the changeset viewer.