Changeset 15 for trunk/Forms


Ignore:
Timestamp:
Apr 21, 2026, 6:15:40 PM (3 weeks ago)
Author:
chronos
Message:
  • Modified: Faster instruction stepping.
Location:
trunk/Forms
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Forms/FormCallStack.lfm

    r13 r15  
    4141  end
    4242  object Timer1: TTimer
    43     Interval = 100
     43    Interval = 50
    4444    OnTimer = Timer1Timer
    4545    Left = 91
  • trunk/Forms/FormCpu.lfm

    r13 r15  
    99  DesignTimePPI = 144
    1010  LCLVersion = '4.6.0.0'
     11  OnCreate = FormCreate
     12  OnShow = FormShow
    1113  object GroupBox1: TGroupBox
    1214    Left = 8
     
    3335    end
    3436  end
    35   object TimerUpdate: TTimer
    36     Interval = 200
    37     OnTimer = TimerUpdateTimer
    38     Left = 324
    39     Top = 147
     37  object Timer1: TTimer
     38    Interval = 50
     39    OnTimer = Timer1Timer
     40    Left = 134
     41    Top = 214
    4042  end
    4143end
  • trunk/Forms/FormCpu.pas

    r11 r15  
    1313  TFormCpu = class(TForm)
    1414    GroupBox1: TGroupBox;
    15     TimerUpdate: TTimer;
     15    Timer1: TTimer;
    1616    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;
    1822  public
    1923    Cpu: TCpuZ80;
     24    procedure Reload;
    2025  end;
    2126
     
    2732{ TFormCpu }
    2833
    29 procedure TFormCpu.TimerUpdateTimer(Sender: TObject);
     34procedure TFormCpu.Timer1Timer(Sender: TObject);
    3035begin
    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;
     53end;
     54
     55procedure TFormCpu.FormCreate(Sender: TObject);
     56begin
     57  end;
     58
     59procedure TFormCpu.FormShow(Sender: TObject);
     60begin
     61  Reload;
     62end;
     63
     64procedure TFormCpu.Reload;
     65begin
     66  FReloadPending := True;
    4567end;
    4668
  • trunk/Forms/FormDisassembler.lfm

    r13 r15  
    6666  end
    6767  object Timer1: TTimer
    68     Interval = 100
     68    Interval = 50
    6969    OnTimer = Timer1Timer
    7070    Left = 568
  • trunk/Forms/FormDisassembler.pas

    r13 r15  
    3131    FOnAddBreakPoint: TAddressEvent;
    3232    FOnChangePC: TAddressEvent;
     33    FLastPC: Word;
    3334    procedure DoChangePC(Address: Word);
    3435    procedure DoAddBreakPoint(Address: Word);
     36    procedure UpdateDisassemblerPos;
    3537  public
    3638    Debugger: TDebugger;
     
    5557{ TFormDisassembler }
    5658
     59procedure TFormDisassembler.UpdateDisassemblerPos;
     60begin
     61  if FLastPc <> Debugger.Cpu.Pc then begin
     62    SelectAddress(Debugger.Cpu.PC);
     63    FLastPc := Debugger.Cpu.Pc;
     64  end;
     65end;
     66
    5767procedure TFormDisassembler.FormClose(Sender: TObject;
    5868  var CloseAction: TCloseAction);
     
    6272procedure TFormDisassembler.FormCreate(Sender: TObject);
    6373begin
     74  FLastPC := $ffff;
    6475end;
    6576
     
    128139procedure TFormDisassembler.Timer1Timer(Sender: TObject);
    129140begin
     141  UpdateDisassemblerPos;
    130142  if FReloadPending then begin
    131143    FReloadPending := False;
  • trunk/Forms/FormMemory.lfm

    r13 r15  
    5959  end
    6060  object Timer1: TTimer
    61     Interval = 100
     61    Interval = 50
    6262    OnTimer = Timer1Timer
    6363    Left = 469
  • trunk/Forms/FormMemory.pas

    r13 r15  
    55uses
    66  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, ExtCtrls,
    7   StdCtrls, MemoryTypes, Generics.Collections;
     7  StdCtrls, MemoryTypes, Generics.Collections, Math;
    88
    99type
     
    3131    procedure ReloadAreas;
    3232    procedure Reload;
     33    procedure ReloadList;
    3334  end;
    3435
     
    4647procedure TFormMemory.Reload;
    4748begin
    48   ListViewMemory.Items.Count := FSize div ItemsPerLine;
     49  FReloadPending := True;
     50end;
     51
     52procedure TFormMemory.ReloadList;
     53begin
     54  ListViewMemory.Items.Count := Ceil(FSize / ItemsPerLine);
    4955  ListViewMemory.Refresh;
    5056end;
     
    5662  Text: string;
    5763  One: Byte;
     64  Count: Byte;
     65  Address: Word;
    5866begin
    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;
    6072    Line := '';
    6173    Text := '';
    62     for I := 0 to ItemsPerLine - 1 do begin
    63       One := FMemory.Read(Item.Index * ItemsPerLine + I);
     74    for I := 0 to Count - 1 do begin
     75      One := FMemory.Read(Address + I);
    6476      Line := Line + IntToHex(One, 2) + ' ';
    6577      if One >= 32 then Text := Text + Char(One)
    6678        else Text := Text + ' ';
    6779    end;
    68     Item.Caption := IntToHex(Item.Index * ItemsPerLine, 8);
     80    Item.Caption := IntToHex(Address, 8);
    6981    Item.SubItems.Add(Line);
    7082    Item.SubItems.Add(Text);
     
    7688  ReloadAreas;
    7789  ComboBoxAreaSelect(nil);
    78   FReloadPending := True;
     90  Reload;
    7991end;
    8092
     
    105117  if FReloadPending then begin
    106118    FReloadPending := False;
    107     Reload;
     119    ReloadList;
    108120  end;
    109121end;
  • trunk/Forms/FormMessages.lfm

    r13 r15  
    2323  end
    2424  object Timer1: TTimer
    25     Interval = 100
     25    Interval = 50
    2626    OnTimer = Timer1Timer
    2727    Left = 357
Note: See TracChangeset for help on using the changeset viewer.