source: branches/ByteArray/Forms/FormSourceEditor.pas

Last change on this file was 11, checked in by chronos, 2 months ago
  • Modified: Updated Common package.
  • Fixed: Wrong return address from CALL instruction.
File size: 4.8 KB
Line 
1unit FormSourceEditor;
2
3interface
4
5uses
6 Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, Menus,
7 ActnList, FormMessages, FormAssembler, Project, FormEx, Assembler,
8 Machine, IntMemory;
9
10type
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
91implementation
92
93{$R *.lfm}
94
95uses
96 Utils, Core;
97
98{ TFormSourceEditor }
99
100procedure TFormSourceEditor.FormCreate(Sender: TObject);
101begin
102 CompiledProgram := TMemory.Create;
103 Assembler := TAssembler.Create;
104 FormMessages := TFormMessages.Create(nil);
105 FormAssembler := TFormAssembler.Create(nil);
106 FormMessages.OnSelect := FormAssembler.Select;
107end;
108
109procedure TFormSourceEditor.ANewExecute(Sender: TObject);
110begin
111 Project.New;
112end;
113
114procedure TFormSourceEditor.ACloseExecute(Sender: TObject);
115begin
116 Project.Close;
117end;
118
119procedure TFormSourceEditor.ACompileExecute(Sender: TObject);
120begin
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;
134end;
135
136procedure TFormSourceEditor.AOpenExecute(Sender: TObject);
137var
138 OpenDialog: TOpenDialog;
139begin
140 OpenDialog := TOpenDialog.Create(nil);
141 try
142 if OpenDialog.Execute then
143 Project.Open(OpenDialog.FileName);
144 finally
145 OpenDialog.Free;
146 end;
147end;
148
149procedure TFormSourceEditor.ARunExecute(Sender: TObject);
150begin
151 ACompile.Execute;
152 Machine.PowerOn;
153end;
154
155procedure TFormSourceEditor.ASaveAsExecute(Sender: TObject);
156var
157 SaveDialog: TSaveDialog;
158begin
159 SaveDialog := TSaveDialog.Create(nil);
160 try
161 if SaveDialog.Execute then
162 Project.SaveAs(SaveDialog.FileName);
163 finally
164 SaveDialog.Free;
165 end;
166end;
167
168procedure TFormSourceEditor.ASaveExecute(Sender: TObject);
169begin
170 Project.Save;
171end;
172
173procedure TFormSourceEditor.AStopExecute(Sender: TObject);
174begin
175 Machine.PowerOff;
176end;
177
178procedure TFormSourceEditor.FormClose(Sender: TObject;
179 var CloseAction: TCloseAction);
180begin
181 if Core.Core.MainForm = Self then Application.Terminate;
182end;
183
184procedure TFormSourceEditor.FormDestroy(Sender: TObject);
185begin
186 FreeAndNil(FormAssembler);
187 FreeAndNil(FormMessages);
188 FreeAndNil(Assembler);
189 FreeAndNil(CompiledProgram);
190end;
191
192procedure TFormSourceEditor.FormShow(Sender: TObject);
193begin
194 DockInit;
195 FormAssembler.SynEdit1.Lines.LoadFromFile('Sample.asm');
196end;
197
198procedure TFormSourceEditor.DockInit;
199begin
200 DockForm(FormAssembler, PanelCenter);
201 DockForm(FormMessages, PanelBottom);
202 PanelBottom.Height := Height div 5;
203end;
204
205procedure TFormSourceEditor.UpdateInterface;
206begin
207
208end;
209
210end.
211
Note: See TracBrowser for help on using the repository browser.