Changeset 5 for trunk/Core.pas


Ignore:
Timestamp:
Apr 18, 2026, 7:24:02 PM (9 days ago)
Author:
chronos
Message:
  • Added: Some I/O ports handling.
  • Added: Messages form for capturing error messages.
  • Added: Go to address action.
  • Added: Allow to view all used memory areas in Memory window.
  • Added: Allow to reset CPU execution.
  • Modified: Improved memory mapping for MZ-700 and MZ-800 modes.
  • Fixed: Focusing currently executed instruction position.
  • Fixed: Wrong order or 8-bit registers in 16-bit pair.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Core.pas

    r4 r5  
    55uses
    66  Classes, SysUtils, ActnList, Controls, FormMain, Forms, ExtCtrls, FormMemory,
    7   SharpMz800, FormDisassembler, FormCpu, FormScreen;
     7  SharpMz800, FormDisassembler, FormCpu, FormScreen, FormMessages;
    88
    99type
     
    1212
    1313  TCore = class(TDataModule)
     14    AViewMessages: TAction;
     15    AGoToAddress: TAction;
     16    AReset: TAction;
    1417    AViewScreen: TAction;
    1518    AViewCpu: TAction;
     
    2831    TimerUpdate: TTimer;
    2932    procedure AExitExecute(Sender: TObject);
     33    procedure AGoToAddressExecute(Sender: TObject);
    3034    procedure APauseExecute(Sender: TObject);
     35    procedure AResetExecute(Sender: TObject);
    3136    procedure ARunExecute(Sender: TObject);
    3237    procedure AStepInExecute(Sender: TObject);
     
    3742    procedure AViewDissssemblerExecute(Sender: TObject);
    3843    procedure AViewMemoryExecute(Sender: TObject);
     44    procedure AViewMessagesExecute(Sender: TObject);
    3945    procedure AViewScreenExecute(Sender: TObject);
    4046    procedure DataModuleCreate(Sender: TObject);
     
    4955    FormCpu: TFormCpu;
    5056    FormScreen: TFormScreen;
     57    FormMessages: TFormMessages;
    5158    SharpMz800: TSharpMz800;
    5259    procedure UpdateDisassemblerPos;
     
    6370
    6471uses
    65   CpuZ80;
     72  CpuZ80, FormGoToAddress;
    6673
    6774{ TCore }
     
    6976procedure TCore.DataModuleCreate(Sender: TObject);
    7077begin
     78  LastPc := $ffff;
    7179  SharpMz800 := TSharpMz800.Create;
    7280//  SharpMz800.PowerOn;
     
    8088end;
    8189
     90procedure TCore.AGoToAddressExecute(Sender: TObject);
     91var
     92  FormGoToAddress: TFormGoToAddress;
     93  Address: LongInt;
     94begin
     95  FormGoToAddress := TFormGoToAddress.Create(nil);
     96  try
     97    if FormGoToAddress.ShowModal = mrOk then begin
     98      if TryStrToInt(FormGoToAddress.EditAddress.Text, Address) then
     99        FormDisassembler.SelectAddress(Address);
     100    end;
     101  finally
     102    FormGoToAddress.Free;
     103  end;
     104end;
     105
    82106procedure TCore.APauseExecute(Sender: TObject);
    83107begin
    84108  SharpMz800.Cpu.Running := False;
     109  UpdateInterface;
     110end;
     111
     112procedure TCore.AResetExecute(Sender: TObject);
     113var
     114  IsRunning: Boolean;
     115begin
     116  IsRunning := SharpMz800.Cpu.Running;
     117  SharpMz800.Cpu.Running := False;
     118  SharpMz800.Cpu.Reset;
     119  SharpMz800.Cpu.Running := IsRunning;
    85120  UpdateInterface;
    86121end;
     
    142177  if not Assigned(FormMemory) then begin
    143178    FormMemory := TFormMemory.Create(nil);
    144     FormMemory.Size := SharpMz800.MappedMemory.Size;
    145     FormMemory.Memory := SharpMz800.MappedMemory;
     179    FormMemory.Areas.Add(SharpMz800.Memory);
     180    FormMemory.Areas.Add(SharpMz800.BaseRom);
     181    FormMemory.Areas.Add(SharpMz800.ExtendedRom);
     182    FormMemory.Areas.Add(SharpMz800.VideoRam);
     183    FormMemory.Areas.Add(SharpMz800.CharacterRom);
     184    FormMemory.Areas.Add(SharpMz800.MappedIO);
    146185  end;
    147186  FormMemory.Show;
     187end;
     188
     189procedure TCore.AViewMessagesExecute(Sender: TObject);
     190begin
     191  if not Assigned(FormMessages) then begin
     192    FormMessages := TFormMessages.Create(nil);
     193    SharpMz800.OnMessage := FormMessages.AddMessage;
     194  end;
     195  FormMessages.Show;
    148196end;
    149197
     
    162210  if Assigned(FormMemory) then FreeAndNil(FormMemory);
    163211  if Assigned(FormScreen) then FreeAndNil(FormScreen);
     212  if Assigned(FormMessages) then FreeAndNil(FormMessages);
    164213  FreeAndNil(FormMain);
    165214  FreeAndNil(SharpMz800);
Note: See TracChangeset for help on using the changeset viewer.