Ignore:
Timestamp:
Nov 23, 2023, 10:42:57 PM (6 months ago)
Author:
chronos
Message:
  • Added: Settings form.
  • Added: Configurable theme and interface language.
  • Modified: Improved user interface.
  • Added: Allow to select what should be visible as main start up form.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ByteArray/Forms/FormMain.pas

    r56 r57  
    55uses
    66  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Menus, ActnList,
    7   FormConsole, FormScreen, Machine, Common.PersistentForm, FormSourceEditor,
    8   FormMemory, Common.FormEx, FormDisassembler, FormStorage;
     7  FormConsole, FormScreen, Common.PersistentForm, FormSourceEditor,
     8  FormMemory, Common.FormEx, FormDisassembler, FormStorage, FormDebugger;
    99
    1010type
     
    1414  TFormMain = class(TFormEx)
    1515    AConsole: TAction;
     16    AAbout: TAction;
     17    ASettings: TAction;
    1618    AScreen: TAction;
    1719    AStorage: TAction;
     
    2628    MainMenu1: TMainMenu;
    2729    MenuItem1: TMenuItem;
     30    MenuItem10: TMenuItem;
     31    MenuItem11: TMenuItem;
     32    MenuItem12: TMenuItem;
     33    Separator2: TMenuItem;
    2834    MenuItem2: TMenuItem;
    2935    MenuItem3: TMenuItem;
     
    3339    MenuItem7: TMenuItem;
    3440    MenuItem8: TMenuItem;
    35     PersistentForm1: TPersistentForm;
    3641    Separator1: TMenuItem;
    3742    MenuItem9: TMenuItem;
     
    3944    MenuItemViewStorage: TMenuItem;
    4045    MenuItemViewConsole: TMenuItem;
     46    procedure AAboutExecute(Sender: TObject);
    4147    procedure AConsoleExecute(Sender: TObject);
    4248    procedure ADebuggerExecute(Sender: TObject);
    4349    procedure ADisassemblerExecute(Sender: TObject);
    4450    procedure AExitExecute(Sender: TObject);
     51    procedure ASettingsExecute(Sender: TObject);
    4552    procedure AFullscreenExecute(Sender: TObject);
    4653    procedure AMemoryExecute(Sender: TObject);
     
    5865    FormDisassembler: TFormDisassembler;
    5966    FormStorage: TFormStorage;
    60     Machine: TMachine;
    61     procedure InitMachine;
    62   public
     67    FormDebugger: TFormDebugger;
    6368  end;
    6469
     
    7277
    7378uses
    74   Cpu, BigInt, Common;
     79  Core, Common, FormSettings, Common.FormAbout;
    7580
    7681{ TFormMain }
     
    7883procedure TFormMain.FormShow(Sender: TObject);
    7984begin
    80   DockForm(FormScreen, Self);
    81   Machine.PowerOn;
     85  if Core.Core.StartUpForm = 'Screen' then begin
     86    AScreen.Execute;
     87    DockForm(FormScreen, Self);
     88  end;
     89  if Core.Core.StartUpForm = 'Source editor' then begin
     90    ASourceEditor.Execute;
     91    DockForm(FormSourceEditor, Self);
     92  end;
     93  if Core.Core.StartUpForm = 'Debugger' then begin
     94    ADebugger.Execute;
     95    DockForm(FormDebugger, Self);
     96  end;
     97  if Core.Core.AutoStartMachine then
     98    Core.Core.Machine.PowerOn;
    8299end;
    83100
    84101procedure TFormMain.FormCreate(Sender: TObject);
    85102begin
    86   Machine := TMachine.Create;
    87   InitMachine;
    88   FormScreen := TFormScreen.Create(nil);
    89   FormConsole := TFormConsole.Create(nil);
    90   Machine.Serial.OnWrite := FormConsole.ConsoleWrite;
    91   FormScreen.FrameBuffer := Machine.FrameBuffer;
    92   Machine.FrameBuffer.OnChange := FormScreen.ScreenChange;
    93103end;
    94104
     
    101111  if Assigned(FormDisassembler) then FreeAndNil(FormDisassembler);
    102112  if Assigned(FormStorage) then FreeAndNil(FormStorage);
    103   FreeAndNil(Machine);
     113  if Assigned(FormDebugger) then FreeAndNil(FormDebugger);
    104114end;
    105115
     
    109119end;
    110120
     121procedure TFormMain.ASettingsExecute(Sender: TObject);
     122var
     123  FormSettings: TFormSettings;
     124begin
     125  FormSettings := TFormSettings.Create(nil);
     126  try
     127    FormSettings.ShowModal;
     128  finally
     129    FormSettings.Free;
     130  end;
     131end;
     132
    111133procedure TFormMain.AFullscreenExecute(Sender: TObject);
    112134begin
    113   PersistentForm1.SetFullScreen(not PersistentForm1.FormFullScreen);
     135  Core.Core.PersistentForm1.SetFullScreen(not Core.Core.PersistentForm1.FormFullScreen);
    114136end;
    115137
     
    118140  if not Assigned(FormMemory) then begin
    119141    FormMemory := TFormMemory.Create(nil);
    120     FormMemory.Memory := Machine.Memory;
     142    FormMemory.Memory := Core.Core.Machine.Memory;
    121143  end;
    122144  FormMemory.Show;
     
    125147procedure TFormMain.AScreenExecute(Sender: TObject);
    126148begin
     149  if not Assigned(FormScreen) then begin
     150    FormScreen := TFormScreen.Create(nil);
     151    FormScreen.FrameBuffer := Core.Core.Machine.FrameBuffer;
     152    Core.Core.Machine.FrameBuffer.OnChange := FormScreen.ScreenChange;
     153  end;
    127154  FormScreen.Show;
    128155end;
     
    130157procedure TFormMain.ADebuggerExecute(Sender: TObject);
    131158begin
     159  if not Assigned(FormDebugger) then begin
     160    FormDebugger := TFormDebugger.Create(nil);
     161  end;
     162  FormDebugger.Show;
    132163end;
    133164
    134165procedure TFormMain.AConsoleExecute(Sender: TObject);
    135166begin
     167  if not Assigned(FormConsole) then begin
     168    FormConsole := TFormConsole.Create(nil);
     169    Core.Core.Machine.Serial.OnWrite := FormConsole.ConsoleWrite;
     170  end;
    136171  FormConsole.Show;
     172end;
     173
     174procedure TFormMain.AAboutExecute(Sender: TObject);
     175var
     176  FormAbout: TFormAbout;
     177begin
     178  FormAbout := TFormAbout.Create(nil);
     179  try
     180    FormAbout.ApplicationInfo := Core.Core.ApplicationInfo1;
     181    FormAbout.ShowModal;
     182  finally
     183    FreeAndNil(FormAbout);
     184  end;
    137185end;
    138186
     
    141189  if not Assigned(FormDisassembler) then
    142190    FormDisassembler := TFormDisassembler.Create(nil);
    143   FormDisassembler.Disassembler.Memory := Machine.Memory;
     191  FormDisassembler.Disassembler.Memory := Core.Core.Machine.Memory;
    144192  FormDisassembler.Show;
    145193end;
     
    149197  if not Assigned(FormSourceEditor) then begin
    150198    FormSourceEditor := TFormSourceEditor.Create(nil);
    151     FormSourceEditor.Machine := Machine;
     199    FormSourceEditor.Machine := Core.Core.Machine;
    152200  end;
    153201  FormSourceEditor.Show;
     
    158206  if not Assigned(FormStorage) then begin
    159207    FormStorage := TFormStorage.Create(nil);
    160     FormStorage.Storage := Machine.Storage;
     208    FormStorage.Storage := Core.Core.Machine.Storage;
    161209  end;
    162210  FormStorage.Show;
    163211end;
    164212
    165 procedure TFormMain.InitMachine;
    166 var
    167   Loop: TBigInt;
    168 begin
    169   with Machine.Cpu do begin
    170     Reset;
    171 
    172     // LD A, 'A'
    173     WriteInstruction(inLoadConst);
    174     WriteRegister(riA);
    175     Write(DataWidth, Ord('A'));
    176 
    177     // LD B, 8
    178     WriteInstruction(inLoadConst);
    179     WriteRegister(riB);
    180     Write(DataWidth, Machine.Serial.BaseAddress);
    181 
    182     // OUT (B), A
    183     WriteInstruction(inOutput);
    184     WriteRegister(riB);
    185     WriteRegister(riA);
    186 
    187     // LD B,
    188     WriteInstruction(inLoadConst);
    189     WriteRegister(riB);
    190     Write(DataWidth, Machine.FrameBuffer.BaseAddress);
    191 
    192     WriteInstruction(inLoadConst);
    193     WriteRegister(riC);
    194     Write(DataWidth, 10);
    195 
    196     Loop := PC;
    197 
    198     WriteInstruction(inOutput);
    199     WriteRegister(riB);
    200     WriteRegister(riA);
    201 
    202     WriteInstruction(inInc);
    203     WriteRegister(riA);
    204 
    205     WriteInstruction(inDec);
    206     WriteRegister(riC);
    207 
    208     WriteInstruction(inJumpNotZero);
    209     WriteRegister(riC);
    210     Write(AddressWidth, Loop);
    211 
    212     WriteInstruction(inHalt);
    213   end;
    214 end;
    215 
    216213end.
    217214
Note: See TracChangeset for help on using the changeset viewer.