| 1 | unit FormSourceEditor;
|
|---|
| 2 |
|
|---|
| 3 | interface
|
|---|
| 4 |
|
|---|
| 5 | uses
|
|---|
| 6 | Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, Menus,
|
|---|
| 7 | ActnList, FormMessages, FormAssembler, Project, FormEx, Assembler,
|
|---|
| 8 | Machine, IntMemory;
|
|---|
| 9 |
|
|---|
| 10 | type
|
|---|
| 11 |
|
|---|
| 12 | { TFormSourceEditor }
|
|---|
| 13 |
|
|---|
| 14 | TFormSourceEditor = class(TFormEx)
|
|---|
| 15 | AClose: TAction;
|
|---|
| 16 | ACompile: TAction;
|
|---|
| 17 | AStop: TAction;
|
|---|
| 18 | APause: TAction;
|
|---|
| 19 | AStepOver: TAction;
|
|---|
| 20 | AStepOut: TAction;
|
|---|
| 21 | AStepIn: TAction;
|
|---|
| 22 | ARunToCursor: TAction;
|
|---|
| 23 | ARun: TAction;
|
|---|
| 24 | ANew: TAction;
|
|---|
| 25 | ASaveAs: TAction;
|
|---|
| 26 | ASave: TAction;
|
|---|
| 27 | AOpenRecent: TAction;
|
|---|
| 28 | AOpen: TAction;
|
|---|
| 29 | AExit: TAction;
|
|---|
| 30 | ActionList1: TActionList;
|
|---|
| 31 | MainMenu1: TMainMenu;
|
|---|
| 32 | MenuItem1: TMenuItem;
|
|---|
| 33 | MenuItem10: TMenuItem;
|
|---|
| 34 | MenuItem11: TMenuItem;
|
|---|
| 35 | MenuItem12: TMenuItem;
|
|---|
| 36 | MenuItem13: TMenuItem;
|
|---|
| 37 | MenuItem14: TMenuItem;
|
|---|
| 38 | MenuItem15: TMenuItem;
|
|---|
| 39 | MenuItem16: TMenuItem;
|
|---|
| 40 | MenuItem17: TMenuItem;
|
|---|
| 41 | MenuItem18: TMenuItem;
|
|---|
| 42 | MenuItem19: TMenuItem;
|
|---|
| 43 | MenuItem2: TMenuItem;
|
|---|
| 44 | MenuItem20: TMenuItem;
|
|---|
| 45 | MenuItem21: TMenuItem;
|
|---|
| 46 | MenuItem22: TMenuItem;
|
|---|
| 47 | MenuItem23: TMenuItem;
|
|---|
| 48 | MenuItem24: TMenuItem;
|
|---|
| 49 | MenuItem25: TMenuItem;
|
|---|
| 50 | MenuItem26: TMenuItem;
|
|---|
| 51 | MenuItem27: TMenuItem;
|
|---|
| 52 | MenuItem28: TMenuItem;
|
|---|
| 53 | MenuItem29: TMenuItem;
|
|---|
| 54 | Separator3: TMenuItem;
|
|---|
| 55 | Separator2: TMenuItem;
|
|---|
| 56 | MenuItem3: TMenuItem;
|
|---|
| 57 | MenuItem4: TMenuItem;
|
|---|
| 58 | MenuItem5: TMenuItem;
|
|---|
| 59 | MenuItem6: TMenuItem;
|
|---|
| 60 | MenuItem7: TMenuItem;
|
|---|
| 61 | MenuItem8: TMenuItem;
|
|---|
| 62 | MenuItem9: TMenuItem;
|
|---|
| 63 | Separator1: TMenuItem;
|
|---|
| 64 | PanelBottom: TPanel;
|
|---|
| 65 | PanelCenter: TPanel;
|
|---|
| 66 | Splitter1: TSplitter;
|
|---|
| 67 | procedure ACloseExecute(Sender: TObject);
|
|---|
| 68 | procedure ACompileExecute(Sender: TObject);
|
|---|
| 69 | procedure ANewExecute(Sender: TObject);
|
|---|
| 70 | procedure AOpenExecute(Sender: TObject);
|
|---|
| 71 | procedure ARunExecute(Sender: TObject);
|
|---|
| 72 | procedure ASaveAsExecute(Sender: TObject);
|
|---|
| 73 | procedure ASaveExecute(Sender: TObject);
|
|---|
| 74 | procedure AStopExecute(Sender: TObject);
|
|---|
| 75 | procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
|---|
| 76 | procedure FormCreate(Sender: TObject);
|
|---|
| 77 | procedure FormDestroy(Sender: TObject);
|
|---|
| 78 | procedure FormShow(Sender: TObject);
|
|---|
| 79 | public
|
|---|
| 80 | Assembler: TAssembler;
|
|---|
| 81 | FormMessages: TFormMessages;
|
|---|
| 82 | FormAssembler: TFormAssembler;
|
|---|
| 83 | Project: TProject;
|
|---|
| 84 | CompiledProgram: TMemory;
|
|---|
| 85 | Machine: TMachine;
|
|---|
| 86 | procedure DockInit;
|
|---|
| 87 | procedure UpdateInterface;
|
|---|
| 88 | end;
|
|---|
| 89 |
|
|---|
| 90 |
|
|---|
| 91 | implementation
|
|---|
| 92 |
|
|---|
| 93 | {$R *.lfm}
|
|---|
| 94 |
|
|---|
| 95 | uses
|
|---|
| 96 | Utils, Core;
|
|---|
| 97 |
|
|---|
| 98 | { TFormSourceEditor }
|
|---|
| 99 |
|
|---|
| 100 | procedure TFormSourceEditor.FormCreate(Sender: TObject);
|
|---|
| 101 | begin
|
|---|
| 102 | CompiledProgram := TMemory.Create;
|
|---|
| 103 | Assembler := TAssembler.Create;
|
|---|
| 104 | FormMessages := TFormMessages.Create(nil);
|
|---|
| 105 | FormAssembler := TFormAssembler.Create(nil);
|
|---|
| 106 | FormMessages.OnSelect := FormAssembler.Select;
|
|---|
| 107 | end;
|
|---|
| 108 |
|
|---|
| 109 | procedure TFormSourceEditor.ANewExecute(Sender: TObject);
|
|---|
| 110 | begin
|
|---|
| 111 | Project.New;
|
|---|
| 112 | end;
|
|---|
| 113 |
|
|---|
| 114 | procedure TFormSourceEditor.ACloseExecute(Sender: TObject);
|
|---|
| 115 | begin
|
|---|
| 116 | Project.Close;
|
|---|
| 117 | end;
|
|---|
| 118 |
|
|---|
| 119 | procedure TFormSourceEditor.ACompileExecute(Sender: TObject);
|
|---|
| 120 | begin
|
|---|
| 121 | AStop.Execute;
|
|---|
| 122 | with Assembler do begin
|
|---|
| 123 | DataWidth := Machine.Cpu.DataWidth;
|
|---|
| 124 | AddressWidth := Machine.Cpu.AddressWidth;
|
|---|
| 125 | Compile(FormAssembler.SynEdit1.Lines.Text);
|
|---|
| 126 | Memory.SaveToFile('compiled.bin');
|
|---|
| 127 | CompiledProgram.Assign(Memory);
|
|---|
| 128 | Machine.Memory.Position := 0;
|
|---|
| 129 | Machine.Memory.WriteMemoryPos(CompiledProgram);
|
|---|
| 130 | FormMessages.Messages := Messages;
|
|---|
| 131 | end;
|
|---|
| 132 | if FormMessages.Visible then
|
|---|
| 133 | FormMessages.Reload;
|
|---|
| 134 | end;
|
|---|
| 135 |
|
|---|
| 136 | procedure TFormSourceEditor.AOpenExecute(Sender: TObject);
|
|---|
| 137 | var
|
|---|
| 138 | OpenDialog: TOpenDialog;
|
|---|
| 139 | begin
|
|---|
| 140 | OpenDialog := TOpenDialog.Create(nil);
|
|---|
| 141 | try
|
|---|
| 142 | if OpenDialog.Execute then
|
|---|
| 143 | Project.Open(OpenDialog.FileName);
|
|---|
| 144 | finally
|
|---|
| 145 | OpenDialog.Free;
|
|---|
| 146 | end;
|
|---|
| 147 | end;
|
|---|
| 148 |
|
|---|
| 149 | procedure TFormSourceEditor.ARunExecute(Sender: TObject);
|
|---|
| 150 | begin
|
|---|
| 151 | ACompile.Execute;
|
|---|
| 152 | Machine.PowerOn;
|
|---|
| 153 | end;
|
|---|
| 154 |
|
|---|
| 155 | procedure TFormSourceEditor.ASaveAsExecute(Sender: TObject);
|
|---|
| 156 | var
|
|---|
| 157 | SaveDialog: TSaveDialog;
|
|---|
| 158 | begin
|
|---|
| 159 | SaveDialog := TSaveDialog.Create(nil);
|
|---|
| 160 | try
|
|---|
| 161 | if SaveDialog.Execute then
|
|---|
| 162 | Project.SaveAs(SaveDialog.FileName);
|
|---|
| 163 | finally
|
|---|
| 164 | SaveDialog.Free;
|
|---|
| 165 | end;
|
|---|
| 166 | end;
|
|---|
| 167 |
|
|---|
| 168 | procedure TFormSourceEditor.ASaveExecute(Sender: TObject);
|
|---|
| 169 | begin
|
|---|
| 170 | Project.Save;
|
|---|
| 171 | end;
|
|---|
| 172 |
|
|---|
| 173 | procedure TFormSourceEditor.AStopExecute(Sender: TObject);
|
|---|
| 174 | begin
|
|---|
| 175 | Machine.PowerOff;
|
|---|
| 176 | end;
|
|---|
| 177 |
|
|---|
| 178 | procedure TFormSourceEditor.FormClose(Sender: TObject;
|
|---|
| 179 | var CloseAction: TCloseAction);
|
|---|
| 180 | begin
|
|---|
| 181 | if Core.Core.MainForm = Self then Application.Terminate;
|
|---|
| 182 | end;
|
|---|
| 183 |
|
|---|
| 184 | procedure TFormSourceEditor.FormDestroy(Sender: TObject);
|
|---|
| 185 | begin
|
|---|
| 186 | FreeAndNil(FormAssembler);
|
|---|
| 187 | FreeAndNil(FormMessages);
|
|---|
| 188 | FreeAndNil(Assembler);
|
|---|
| 189 | FreeAndNil(CompiledProgram);
|
|---|
| 190 | end;
|
|---|
| 191 |
|
|---|
| 192 | procedure TFormSourceEditor.FormShow(Sender: TObject);
|
|---|
| 193 | begin
|
|---|
| 194 | DockInit;
|
|---|
| 195 | FormAssembler.SynEdit1.Lines.LoadFromFile('Sample.asm');
|
|---|
| 196 | end;
|
|---|
| 197 |
|
|---|
| 198 | procedure TFormSourceEditor.DockInit;
|
|---|
| 199 | begin
|
|---|
| 200 | DockForm(FormAssembler, PanelCenter);
|
|---|
| 201 | DockForm(FormMessages, PanelBottom);
|
|---|
| 202 | PanelBottom.Height := Height div 5;
|
|---|
| 203 | end;
|
|---|
| 204 |
|
|---|
| 205 | procedure TFormSourceEditor.UpdateInterface;
|
|---|
| 206 | begin
|
|---|
| 207 |
|
|---|
| 208 | end;
|
|---|
| 209 |
|
|---|
| 210 | end.
|
|---|
| 211 |
|
|---|