Changeset 57 for branches/ByteArray/Forms/FormMain.pas
- Timestamp:
- Nov 23, 2023, 10:42:57 PM (6 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ByteArray/Forms/FormMain.pas
r56 r57 5 5 uses 6 6 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; 9 9 10 10 type … … 14 14 TFormMain = class(TFormEx) 15 15 AConsole: TAction; 16 AAbout: TAction; 17 ASettings: TAction; 16 18 AScreen: TAction; 17 19 AStorage: TAction; … … 26 28 MainMenu1: TMainMenu; 27 29 MenuItem1: TMenuItem; 30 MenuItem10: TMenuItem; 31 MenuItem11: TMenuItem; 32 MenuItem12: TMenuItem; 33 Separator2: TMenuItem; 28 34 MenuItem2: TMenuItem; 29 35 MenuItem3: TMenuItem; … … 33 39 MenuItem7: TMenuItem; 34 40 MenuItem8: TMenuItem; 35 PersistentForm1: TPersistentForm;36 41 Separator1: TMenuItem; 37 42 MenuItem9: TMenuItem; … … 39 44 MenuItemViewStorage: TMenuItem; 40 45 MenuItemViewConsole: TMenuItem; 46 procedure AAboutExecute(Sender: TObject); 41 47 procedure AConsoleExecute(Sender: TObject); 42 48 procedure ADebuggerExecute(Sender: TObject); 43 49 procedure ADisassemblerExecute(Sender: TObject); 44 50 procedure AExitExecute(Sender: TObject); 51 procedure ASettingsExecute(Sender: TObject); 45 52 procedure AFullscreenExecute(Sender: TObject); 46 53 procedure AMemoryExecute(Sender: TObject); … … 58 65 FormDisassembler: TFormDisassembler; 59 66 FormStorage: TFormStorage; 60 Machine: TMachine; 61 procedure InitMachine; 62 public 67 FormDebugger: TFormDebugger; 63 68 end; 64 69 … … 72 77 73 78 uses 74 C pu, BigInt, Common;79 Core, Common, FormSettings, Common.FormAbout; 75 80 76 81 { TFormMain } … … 78 83 procedure TFormMain.FormShow(Sender: TObject); 79 84 begin 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; 82 99 end; 83 100 84 101 procedure TFormMain.FormCreate(Sender: TObject); 85 102 begin 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;93 103 end; 94 104 … … 101 111 if Assigned(FormDisassembler) then FreeAndNil(FormDisassembler); 102 112 if Assigned(FormStorage) then FreeAndNil(FormStorage); 103 FreeAndNil(Machine);113 if Assigned(FormDebugger) then FreeAndNil(FormDebugger); 104 114 end; 105 115 … … 109 119 end; 110 120 121 procedure TFormMain.ASettingsExecute(Sender: TObject); 122 var 123 FormSettings: TFormSettings; 124 begin 125 FormSettings := TFormSettings.Create(nil); 126 try 127 FormSettings.ShowModal; 128 finally 129 FormSettings.Free; 130 end; 131 end; 132 111 133 procedure TFormMain.AFullscreenExecute(Sender: TObject); 112 134 begin 113 PersistentForm1.SetFullScreen(notPersistentForm1.FormFullScreen);135 Core.Core.PersistentForm1.SetFullScreen(not Core.Core.PersistentForm1.FormFullScreen); 114 136 end; 115 137 … … 118 140 if not Assigned(FormMemory) then begin 119 141 FormMemory := TFormMemory.Create(nil); 120 FormMemory.Memory := Machine.Memory;142 FormMemory.Memory := Core.Core.Machine.Memory; 121 143 end; 122 144 FormMemory.Show; … … 125 147 procedure TFormMain.AScreenExecute(Sender: TObject); 126 148 begin 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; 127 154 FormScreen.Show; 128 155 end; … … 130 157 procedure TFormMain.ADebuggerExecute(Sender: TObject); 131 158 begin 159 if not Assigned(FormDebugger) then begin 160 FormDebugger := TFormDebugger.Create(nil); 161 end; 162 FormDebugger.Show; 132 163 end; 133 164 134 165 procedure TFormMain.AConsoleExecute(Sender: TObject); 135 166 begin 167 if not Assigned(FormConsole) then begin 168 FormConsole := TFormConsole.Create(nil); 169 Core.Core.Machine.Serial.OnWrite := FormConsole.ConsoleWrite; 170 end; 136 171 FormConsole.Show; 172 end; 173 174 procedure TFormMain.AAboutExecute(Sender: TObject); 175 var 176 FormAbout: TFormAbout; 177 begin 178 FormAbout := TFormAbout.Create(nil); 179 try 180 FormAbout.ApplicationInfo := Core.Core.ApplicationInfo1; 181 FormAbout.ShowModal; 182 finally 183 FreeAndNil(FormAbout); 184 end; 137 185 end; 138 186 … … 141 189 if not Assigned(FormDisassembler) then 142 190 FormDisassembler := TFormDisassembler.Create(nil); 143 FormDisassembler.Disassembler.Memory := Machine.Memory;191 FormDisassembler.Disassembler.Memory := Core.Core.Machine.Memory; 144 192 FormDisassembler.Show; 145 193 end; … … 149 197 if not Assigned(FormSourceEditor) then begin 150 198 FormSourceEditor := TFormSourceEditor.Create(nil); 151 FormSourceEditor.Machine := Machine;199 FormSourceEditor.Machine := Core.Core.Machine; 152 200 end; 153 201 FormSourceEditor.Show; … … 158 206 if not Assigned(FormStorage) then begin 159 207 FormStorage := TFormStorage.Create(nil); 160 FormStorage.Storage := Machine.Storage;208 FormStorage.Storage := Core.Core.Machine.Storage; 161 209 end; 162 210 FormStorage.Show; 163 211 end; 164 212 165 procedure TFormMain.InitMachine;166 var167 Loop: TBigInt;168 begin169 with Machine.Cpu do begin170 Reset;171 172 // LD A, 'A'173 WriteInstruction(inLoadConst);174 WriteRegister(riA);175 Write(DataWidth, Ord('A'));176 177 // LD B, 8178 WriteInstruction(inLoadConst);179 WriteRegister(riB);180 Write(DataWidth, Machine.Serial.BaseAddress);181 182 // OUT (B), A183 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 216 213 end. 217 214
Note:
See TracChangeset
for help on using the changeset viewer.