memory editor, remove focus delay

This commit is contained in:
April Ayres-Griffiths 2019-04-14 10:43:40 +10:00
parent 4bd6263c04
commit fa7b52b927
13 changed files with 569 additions and 145 deletions

View File

@ -1,7 +1,7 @@
object GUIForm: TGUIForm object GUIForm: TGUIForm
Left = 2434 Left = 2111
Height = 668 Height = 668
Top = 239 Top = 138
Width = 1014 Width = 1014
AlphaBlendValue = 128 AlphaBlendValue = 128
Caption = 'microM8 GUI' Caption = 'microM8 GUI'
@ -334,20 +334,20 @@ object GUIForm: TGUIForm
TabOrder = 2 TabOrder = 2
object sidecarPanel: TPanel object sidecarPanel: TPanel
Left = 844 Left = 844
Height = 589 Height = 552
Top = 0 Top = 0
Width = 170 Width = 170
Align = alRight Align = alRight
BevelOuter = bvNone BevelOuter = bvNone
Caption = 'sidecarPanel' Caption = 'sidecarPanel'
ClientHeight = 589 ClientHeight = 552
ClientWidth = 170 ClientWidth = 170
Color = clBlack Color = clBlack
ParentColor = False ParentColor = False
TabOrder = 0 TabOrder = 0
object Image1: TImage object Image1: TImage
Left = 0 Left = 0
Height = 589 Height = 552
Top = 0 Top = 0
Width = 170 Width = 170
Align = alClient Align = alClient
@ -5440,12 +5440,12 @@ object GUIForm: TGUIForm
end end
object embedPanel: TPanel object embedPanel: TPanel
Left = 0 Left = 0
Height = 589 Height = 552
Top = 0 Top = 0
Width = 844 Width = 844
Align = alClient Align = alClient
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 589 ClientHeight = 552
ClientWidth = 844 ClientWidth = 844
Color = clBlack Color = clBlack
Font.Color = clWhite Font.Color = clWhite
@ -5457,7 +5457,7 @@ object GUIForm: TGUIForm
OnMouseUp = FormMouseUp OnMouseUp = FormMouseUp
object backdrop: TImage object backdrop: TImage
Left = 0 Left = 0
Height = 589 Height = 552
Top = 0 Top = 0
Width = 844 Width = 844
Align = alClient Align = alClient
@ -5467,6 +5467,94 @@ object GUIForm: TGUIForm
Stretch = True Stretch = True
end end
end end
object pnlMemory: TPanel
Left = 0
Height = 37
Top = 552
Width = 1014
Align = alBottom
ClientHeight = 37
ClientWidth = 1014
ParentColor = False
TabOrder = 2
Visible = False
object txtAddress: TEdit
Left = 136
Height = 23
Top = 8
Width = 80
TabStop = False
TabOrder = 1
Text = '$0400'
end
object Label1: TLabel
Left = 9
Height = 15
Top = 10
Width = 122
Caption = 'Memory Address (hex):'
ParentColor = False
end
object Label2: TLabel
Left = 240
Height = 15
Top = 10
Width = 60
Caption = 'Value (hex):'
ParentColor = False
end
object txtValue: TEdit
Left = 312
Height = 23
Top = 8
Width = 80
OnKeyPress = txtValueKeyPress
TabStop = False
TabOrder = 2
Text = '$00'
end
object pnlMemButtons: TPanel
Left = 760
Height = 35
Top = 1
Width = 253
Align = alRight
BevelOuter = bvNone
ClientHeight = 35
ClientWidth = 253
TabOrder = 0
object btnRead: TButton
Left = 8
Height = 25
Top = 5
Width = 75
Caption = 'Read'
OnClick = btnReadClick
TabOrder = 0
TabStop = False
end
object btnWrite: TButton
Left = 88
Height = 25
Top = 5
Width = 75
Caption = 'Write'
OnClick = btnWriteClick
TabOrder = 1
TabStop = False
end
object btnHide: TButton
Left = 168
Height = 25
Top = 5
Width = 75
Caption = 'Close'
OnClick = btnHideClick
TabOrder = 2
TabStop = False
end
end
end
end end
object MainMenu1: TMainMenu object MainMenu1: TMainMenu
Images = ToolbarIcons Images = ToolbarIcons
@ -5969,6 +6057,10 @@ object GUIForm: TGUIForm
ShortCut = 24796 ShortCut = 24796
OnClick = miVideoScreenshotClick OnClick = miVideoScreenshotClick
end end
object miCopyText: TMenuItem
Caption = 'Copy Text Screen'
OnClick = miCopyTextClick
end
end end
object Input: TMenuItem object Input: TMenuItem
Caption = 'Input' Caption = 'Input'
@ -6454,6 +6546,10 @@ object GUIForm: TGUIForm
ShortCut = 24642 ShortCut = 24642
OnClick = miToolsWebDebuggerClick OnClick = miToolsWebDebuggerClick
end end
object miMemoryEdit: TMenuItem
Caption = 'Read/Write Memory'
OnClick = miMemoryEditClick
end
end end
object miHelp: TMenuItem object miHelp: TMenuItem
Caption = 'Help' Caption = 'Help'

View File

@ -22,6 +22,13 @@ type
{ TGUIForm } { TGUIForm }
TGUIForm = class(TForm) TGUIForm = class(TForm)
btnRead: TButton;
btnWrite: TButton;
btnHide: TButton;
Label1: TLabel;
Label2: TLabel;
miMemoryEdit: TMenuItem;
miCopyText: TMenuItem;
miPasteText: TMenuItem; miPasteText: TMenuItem;
N12: TMenuItem; N12: TMenuItem;
N11: TMenuItem; N11: TMenuItem;
@ -82,6 +89,8 @@ type
backdrop: TImage; backdrop: TImage;
Image1: TImage; Image1: TImage;
odFreezeFiles: TOpenDialog; odFreezeFiles: TOpenDialog;
pnlMemButtons: TPanel;
pnlMemory: TPanel;
pnlContainer: TPanel; pnlContainer: TPanel;
ProfileMenu: TPopupMenu; ProfileMenu: TPopupMenu;
RecordingMenu: TPopupMenu; RecordingMenu: TPopupMenu;
@ -302,7 +311,12 @@ type
tbRMColor: TToolButton; tbRMColor: TToolButton;
tbMasterVolume: TTrackBar; tbMasterVolume: TTrackBar;
TrackBar2: TTrackBar; TrackBar2: TTrackBar;
txtAddress: TEdit;
txtValue: TEdit;
procedure backdropClick(Sender: TObject); procedure backdropClick(Sender: TObject);
procedure btnHideClick(Sender: TObject);
procedure btnReadClick(Sender: TObject);
procedure btnWriteClick(Sender: TObject);
procedure Button1Click(Sender: TObject); procedure Button1Click(Sender: TObject);
procedure CheckTimerTimer(Sender: TObject); procedure CheckTimerTimer(Sender: TObject);
procedure DiskMenuClose(Sender: TObject); procedure DiskMenuClose(Sender: TObject);
@ -357,6 +371,7 @@ type
procedure miColorDotsClick(Sender: TObject); procedure miColorDotsClick(Sender: TObject);
procedure miColorRasterClick(Sender: TObject); procedure miColorRasterClick(Sender: TObject);
procedure miColorVoxelsClick(Sender: TObject); procedure miColorVoxelsClick(Sender: TObject);
procedure miCopyTextClick(Sender: TObject);
procedure miCPU6502Click(Sender: TObject); procedure miCPU6502Click(Sender: TObject);
procedure miCPUTypeClick(Sender: TObject); procedure miCPUTypeClick(Sender: TObject);
procedure miCPUWarpClick(Sender: TObject); procedure miCPUWarpClick(Sender: TObject);
@ -402,6 +417,7 @@ type
procedure miJSAxisSwapClick(Sender: TObject); procedure miJSAxisSwapClick(Sender: TObject);
procedure miJSXRevClick(Sender: TObject); procedure miJSXRevClick(Sender: TObject);
procedure miJSYRevClick(Sender: TObject); procedure miJSYRevClick(Sender: TObject);
procedure miMemoryEditClick(Sender: TObject);
procedure miMMHelpClick(Sender: TObject); procedure miMMHelpClick(Sender: TObject);
procedure miMonoDotsClick(Sender: TObject); procedure miMonoDotsClick(Sender: TObject);
procedure miMonoRasterClick(Sender: TObject); procedure miMonoRasterClick(Sender: TObject);
@ -472,6 +488,7 @@ type
procedure ToolTimerTimer(Sender: TObject); procedure ToolTimerTimer(Sender: TObject);
procedure tbMasterVolumeChange(Sender: TObject); procedure tbMasterVolumeChange(Sender: TObject);
procedure TrackBar2Change(Sender: TObject); procedure TrackBar2Change(Sender: TObject);
procedure txtValueKeyPress(Sender: TObject; var Key: char);
procedure UpdateRenderMode; procedure UpdateRenderMode;
procedure UnFreeze; procedure UnFreeze;
procedure HideM8; procedure HideM8;
@ -820,6 +837,14 @@ begin
UpdateConfig( 'video/init.video.hgrmode', '1', true ); UpdateConfig( 'video/init.video.hgrmode', '1', true );
end; end;
procedure TGUIForm.miCopyTextClick(Sender: TObject);
var
s: string;
begin
s := SimpleGet(baseUrl+'/api/control/memory/screen/text');
ClipBoard.SetAsHTML( s, s );
end;
procedure TGUIForm.miCPU6502Click(Sender: TObject); procedure TGUIForm.miCPU6502Click(Sender: TObject);
begin begin
UpdateConfig('hardware/current.cpu.model', TMenuItem(sender).Caption, false ); UpdateConfig('hardware/current.cpu.model', TMenuItem(sender).Caption, false );
@ -1147,6 +1172,11 @@ begin
UpdateConfig( 'input/init.joystick.reversey', '1', true ); UpdateConfig( 'input/init.joystick.reversey', '1', true );
end; end;
procedure TGUIForm.miMemoryEditClick(Sender: TObject);
begin
pnlMemory.Visible := (not pnlMemory.Visible);
end;
procedure TGUIForm.miMMHelpClick(Sender: TObject); procedure TGUIForm.miMMHelpClick(Sender: TObject);
begin begin
SimpleGet(baseUrl + '/api/control/system/help'); SimpleGet(baseUrl + '/api/control/system/help');
@ -1207,8 +1237,13 @@ end;
procedure TGUIForm.miPasteTextClick(Sender: TObject); procedure TGUIForm.miPasteTextClick(Sender: TObject);
var var
s: string; s: string;
Respo: TStringStream;
begin begin
s := ClipBoard.AsText; s := ClipBoard.AsText;
if length(s) > 0 then
begin
SimpleFormPost(baseUrl+'/api/control/paste', s, Respo);
end;
end; end;
procedure TGUIForm.miPDFTO5sClick(Sender: TObject); procedure TGUIForm.miPDFTO5sClick(Sender: TObject);
@ -1585,7 +1620,7 @@ end;
procedure TGUIForm.miToolsClick(Sender: TObject); procedure TGUIForm.miToolsClick(Sender: TObject);
begin begin
miMemoryEdit.Checked := pnlMemory.Visible;
end; end;
procedure TGUIForm.miToolsTrackerClick(Sender: TObject); procedure TGUIForm.miToolsTrackerClick(Sender: TObject);
@ -1951,6 +1986,14 @@ begin
end; end;
end; end;
procedure TGUIForm.txtValueKeyPress(Sender: TObject; var Key: char);
begin
if Key = #13 then
begin
btnWriteClick(sender);
end;
end;
procedure TGUIForm.UnFreeze; procedure TGUIForm.UnFreeze;
begin begin
SimpleGet(baseUrl + '/api/control/window/unfreeze'); SimpleGet(baseUrl + '/api/control/window/unfreeze');
@ -2307,6 +2350,44 @@ begin
end; end;
procedure TGUIForm.btnHideClick(Sender: TObject);
begin
pnlMemory.Visible := false;
end;
procedure TGUIForm.btnReadClick(Sender: TObject);
var
addr: string;
r: string;
begin
try
addr := IntToStr( StrToInt(txtAddress.Text) );
r := SimpleGet(baseUrl+'/api/control/memory/read/'+addr);
txtValue.Text := '$' + IntToHex( StrToInt(r), 2 );
except
on e: Exception do begin
// don't update
end;
end;
end;
procedure TGUIForm.btnWriteClick(Sender: TObject);
var
addr, value: string;
r: string;
begin
try
addr := IntToStr( StrToInt(txtAddress.Text) );
value := IntToStr( StrToInt(txtValue.Text) );
r := SimpleGet(baseUrl+'/api/control/memory/write/'+addr+'/'+value);
txtValue.Text := '$' + IntToHex( StrToInt(r), 2 );
except
on e: Exception do begin
// don't update
end;
end;
end;
{$IFDEF WINDOWS} {$IFDEF WINDOWS}
function TGUIForm.GetTitleOfActiveWindow: string; function TGUIForm.GetTitleOfActiveWindow: string;
var var
@ -2340,8 +2421,8 @@ procedure TGUIForm.CheckTimerTimer(Sender: TObject);
begin begin
if isFS then if isFS then
exit; exit;
if MilliSecondsBetween(Now(), lastFocusLostTime) < 250 then //if MilliSecondsBetween(Now(), lastFocusLostTime) < 250 then
exit; // exit;
if WindowState = wsMinimized then if WindowState = wsMinimized then
exit; exit;
if disableFocusStealing then if disableFocusStealing then

View File

@ -34,7 +34,7 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item2> </Item2>
</RequiredPackages> </RequiredPackages>
<Units Count="3"> <Units Count="4">
<Unit0> <Unit0>
<Filename Value="poc.lpr"/> <Filename Value="poc.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -53,6 +53,13 @@
<HasResources Value="True"/> <HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
</Unit2> </Unit2>
<Unit3>
<Filename Value="images\memory.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="memform"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit3>
</Units> </Units>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
@ -63,6 +70,7 @@
</Target> </Target>
<SearchPaths> <SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/> <IncludeFiles Value="$(ProjOutDir)"/>
<OtherUnitFiles Value="images"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths> </SearchPaths>
<Linking> <Linking>

View File

@ -4,7 +4,7 @@
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Version Value="11"/> <Version Value="11"/>
<BuildModes Active="Default"/> <BuildModes Active="Default"/>
<Units Count="5"> <Units Count="6">
<Unit0> <Unit0>
<Filename Value="poc.lpr"/> <Filename Value="poc.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -21,8 +21,8 @@
<HasResources Value="True"/> <HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/> <IsVisibleTab Value="True"/>
<TopLine Value="2315"/> <TopLine Value="1990"/>
<CursorPos X="72" Y="2328"/> <CursorPos X="29" Y="1994"/>
<UsageCount Value="323"/> <UsageCount Value="323"/>
<Loaded Value="True"/> <Loaded Value="True"/>
<LoadedDesigner Value="True"/> <LoadedDesigner Value="True"/>
@ -53,128 +53,107 @@
<CursorPos Y="654"/> <CursorPos Y="654"/>
<UsageCount Value="5"/> <UsageCount Value="5"/>
</Unit4> </Unit4>
<Unit5>
<Filename Value="images\memory.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="memform"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<EditorIndex Value="-1"/>
<TopLine Value="40"/>
<CursorPos X="17" Y="44"/>
<UsageCount Value="24"/>
</Unit5>
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="22" HistoryIndex="21">
<Position1> <Position1>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="473" Column="58" TopLine="455"/> <Caret Line="540" Column="30" TopLine="520"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="9" Column="60"/> <Caret Line="605" Column="25" TopLine="579"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="557" Column="41" TopLine="533"/> <Caret Line="1907" Column="46" TopLine="1965"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2046" Column="35" TopLine="1936"/> <Caret Line="1640" Column="3" TopLine="1638"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="503" Column="22" TopLine="479"/> <Caret Line="1647" Column="3" TopLine="1645"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="309" Column="43" TopLine="293"/> <Caret Line="838" Column="16" TopLine="825"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="503" Column="5" TopLine="485"/> <Caret Line="537" TopLine="519"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="508" Column="17" TopLine="486"/> <Caret Line="538" TopLine="520"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2362" Column="39" TopLine="2350"/> <Caret Line="540" TopLine="522"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2302" Column="47" TopLine="2289"/> <Caret Line="542" TopLine="524"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2362" Column="3" TopLine="2360"/> <Caret Line="543" TopLine="525"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2300" Column="44" TopLine="2289"/> <Caret Line="544" TopLine="526"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="14" Column="42"/> <Caret Line="545" TopLine="527"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="572" Column="37" TopLine="541"/> <Caret Line="547" TopLine="529"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="562" Column="29" TopLine="550"/> <Caret Line="2338" Column="29" TopLine="2336"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="590" Column="67" TopLine="662"/> <Caret Line="2361" Column="14" TopLine="2337"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2323" Column="34" TopLine="2297"/> <Caret Line="2362" Column="13" TopLine="623"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2326" Column="34" TopLine="2300"/> <Caret Line="2414" Column="26" TopLine="2404"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2533" Column="3" TopLine="2530"/> <Caret Line="2415" Column="26" TopLine="2405"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2557" Column="68" TopLine="2538"/> <Caret Line="1623" Column="23" TopLine="1620"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2352" Column="3" TopLine="2349"/> <Caret Line="1177" Column="48" TopLine="1175"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2368" Column="15" TopLine="2349"/> <Caret Line="1999" Column="28" TopLine="1995"/>
</Position22> </Position22>
<Position23>
<Filename Value="main.pas"/>
<Caret Line="2367" Column="15" TopLine="2348"/>
</Position23>
<Position24>
<Filename Value="main.pas"/>
<Caret Line="2555" Column="60" TopLine="2540"/>
</Position24>
<Position25>
<Filename Value="main.pas"/>
<Caret Line="2314" Column="46" TopLine="2060"/>
</Position25>
<Position26>
<Filename Value="main.pas"/>
<Caret Line="514" Column="43" TopLine="484"/>
</Position26>
<Position27>
<Filename Value="main.pas"/>
<Caret Line="515" Column="43" TopLine="485"/>
</Position27>
<Position28>
<Filename Value="main.pas"/>
<Caret Line="517" Column="43" TopLine="487"/>
</Position28>
<Position29>
<Filename Value="main.pas"/>
<Caret Line="2681" Column="50" TopLine="2651"/>
</Position29>
<Position30>
<Filename Value="main.pas"/>
<Caret Line="933" Column="51" TopLine="926"/>
</Position30>
</JumpHistory> </JumpHistory>
<RunParams> <RunParams>
<FormatVersion Value="2"/> <FormatVersion Value="2"/>

View File

@ -1,7 +1,7 @@
object GUIForm: TGUIForm object GUIForm: TGUIForm
Left = 2434 Left = 2111
Height = 668 Height = 668
Top = 239 Top = 138
Width = 1014 Width = 1014
AlphaBlendValue = 128 AlphaBlendValue = 128
Caption = 'microM8 GUI' Caption = 'microM8 GUI'
@ -334,20 +334,20 @@ object GUIForm: TGUIForm
TabOrder = 2 TabOrder = 2
object sidecarPanel: TPanel object sidecarPanel: TPanel
Left = 844 Left = 844
Height = 589 Height = 552
Top = 0 Top = 0
Width = 170 Width = 170
Align = alRight Align = alRight
BevelOuter = bvNone BevelOuter = bvNone
Caption = 'sidecarPanel' Caption = 'sidecarPanel'
ClientHeight = 589 ClientHeight = 552
ClientWidth = 170 ClientWidth = 170
Color = clBlack Color = clBlack
ParentColor = False ParentColor = False
TabOrder = 0 TabOrder = 0
object Image1: TImage object Image1: TImage
Left = 0 Left = 0
Height = 589 Height = 552
Top = 0 Top = 0
Width = 170 Width = 170
Align = alClient Align = alClient
@ -5440,12 +5440,12 @@ object GUIForm: TGUIForm
end end
object embedPanel: TPanel object embedPanel: TPanel
Left = 0 Left = 0
Height = 589 Height = 552
Top = 0 Top = 0
Width = 844 Width = 844
Align = alClient Align = alClient
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 589 ClientHeight = 552
ClientWidth = 844 ClientWidth = 844
Color = clBlack Color = clBlack
Font.Color = clWhite Font.Color = clWhite
@ -5457,7 +5457,7 @@ object GUIForm: TGUIForm
OnMouseUp = FormMouseUp OnMouseUp = FormMouseUp
object backdrop: TImage object backdrop: TImage
Left = 0 Left = 0
Height = 589 Height = 552
Top = 0 Top = 0
Width = 844 Width = 844
Align = alClient Align = alClient
@ -5467,6 +5467,95 @@ object GUIForm: TGUIForm
Stretch = True Stretch = True
end end
end end
object pnlMemory: TPanel
Left = 0
Height = 37
Top = 552
Width = 1014
Align = alBottom
ClientHeight = 37
ClientWidth = 1014
ParentColor = False
TabOrder = 2
Visible = False
object txtAddress: TEdit
Left = 136
Height = 23
Top = 8
Width = 80
OnKeyPress = txtAddressKeyPress
TabStop = False
TabOrder = 1
Text = '$0400'
end
object Label1: TLabel
Left = 9
Height = 15
Top = 10
Width = 122
Caption = 'Memory Address (hex):'
ParentColor = False
end
object Label2: TLabel
Left = 240
Height = 15
Top = 10
Width = 60
Caption = 'Value (hex):'
ParentColor = False
end
object txtValue: TEdit
Left = 312
Height = 23
Top = 8
Width = 80
OnKeyPress = txtValueKeyPress
TabStop = False
TabOrder = 2
Text = '$00'
end
object pnlMemButtons: TPanel
Left = 760
Height = 35
Top = 1
Width = 253
Align = alRight
BevelOuter = bvNone
ClientHeight = 35
ClientWidth = 253
TabOrder = 0
object btnRead: TButton
Left = 8
Height = 25
Top = 5
Width = 75
Caption = 'Read'
OnClick = btnReadClick
TabOrder = 0
TabStop = False
end
object btnWrite: TButton
Left = 88
Height = 25
Top = 5
Width = 75
Caption = 'Write'
OnClick = btnWriteClick
TabOrder = 1
TabStop = False
end
object btnHide: TButton
Left = 168
Height = 25
Top = 5
Width = 75
Caption = 'Close'
OnClick = btnHideClick
TabOrder = 2
TabStop = False
end
end
end
end end
object MainMenu1: TMainMenu object MainMenu1: TMainMenu
Images = ToolbarIcons Images = ToolbarIcons
@ -5969,6 +6058,10 @@ object GUIForm: TGUIForm
ShortCut = 24796 ShortCut = 24796
OnClick = miVideoScreenshotClick OnClick = miVideoScreenshotClick
end end
object miCopyText: TMenuItem
Caption = 'Copy Text Screen'
OnClick = miCopyTextClick
end
end end
object Input: TMenuItem object Input: TMenuItem
Caption = 'Input' Caption = 'Input'
@ -6454,6 +6547,10 @@ object GUIForm: TGUIForm
ShortCut = 24642 ShortCut = 24642
OnClick = miToolsWebDebuggerClick OnClick = miToolsWebDebuggerClick
end end
object miMemoryEdit: TMenuItem
Caption = 'Read/Write Memory'
OnClick = miMemoryEditClick
end
end end
object miHelp: TMenuItem object miHelp: TMenuItem
Caption = 'Help' Caption = 'Help'

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

113
main.lfm
View File

@ -1,7 +1,7 @@
object GUIForm: TGUIForm object GUIForm: TGUIForm
Left = 2434 Left = 2111
Height = 668 Height = 668
Top = 239 Top = 138
Width = 1014 Width = 1014
AlphaBlendValue = 128 AlphaBlendValue = 128
Caption = 'microM8 GUI' Caption = 'microM8 GUI'
@ -334,20 +334,20 @@ object GUIForm: TGUIForm
TabOrder = 2 TabOrder = 2
object sidecarPanel: TPanel object sidecarPanel: TPanel
Left = 844 Left = 844
Height = 589 Height = 552
Top = 0 Top = 0
Width = 170 Width = 170
Align = alRight Align = alRight
BevelOuter = bvNone BevelOuter = bvNone
Caption = 'sidecarPanel' Caption = 'sidecarPanel'
ClientHeight = 589 ClientHeight = 552
ClientWidth = 170 ClientWidth = 170
Color = clBlack Color = clBlack
ParentColor = False ParentColor = False
TabOrder = 0 TabOrder = 0
object Image1: TImage object Image1: TImage
Left = 0 Left = 0
Height = 589 Height = 552
Top = 0 Top = 0
Width = 170 Width = 170
Align = alClient Align = alClient
@ -5440,12 +5440,12 @@ object GUIForm: TGUIForm
end end
object embedPanel: TPanel object embedPanel: TPanel
Left = 0 Left = 0
Height = 589 Height = 552
Top = 0 Top = 0
Width = 844 Width = 844
Align = alClient Align = alClient
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 589 ClientHeight = 552
ClientWidth = 844 ClientWidth = 844
Color = clBlack Color = clBlack
Font.Color = clWhite Font.Color = clWhite
@ -5457,7 +5457,7 @@ object GUIForm: TGUIForm
OnMouseUp = FormMouseUp OnMouseUp = FormMouseUp
object backdrop: TImage object backdrop: TImage
Left = 0 Left = 0
Height = 589 Height = 552
Top = 0 Top = 0
Width = 844 Width = 844
Align = alClient Align = alClient
@ -5467,6 +5467,95 @@ object GUIForm: TGUIForm
Stretch = True Stretch = True
end end
end end
object pnlMemory: TPanel
Left = 0
Height = 37
Top = 552
Width = 1014
Align = alBottom
ClientHeight = 37
ClientWidth = 1014
ParentColor = False
TabOrder = 2
Visible = False
object txtAddress: TEdit
Left = 136
Height = 23
Top = 8
Width = 80
OnKeyPress = txtAddressKeyPress
TabStop = False
TabOrder = 1
Text = '$0400'
end
object Label1: TLabel
Left = 9
Height = 15
Top = 10
Width = 122
Caption = 'Memory Address (hex):'
ParentColor = False
end
object Label2: TLabel
Left = 240
Height = 15
Top = 10
Width = 60
Caption = 'Value (hex):'
ParentColor = False
end
object txtValue: TEdit
Left = 312
Height = 23
Top = 8
Width = 80
OnKeyPress = txtValueKeyPress
TabStop = False
TabOrder = 2
Text = '$00'
end
object pnlMemButtons: TPanel
Left = 760
Height = 35
Top = 1
Width = 253
Align = alRight
BevelOuter = bvNone
ClientHeight = 35
ClientWidth = 253
TabOrder = 0
object btnRead: TButton
Left = 8
Height = 25
Top = 5
Width = 75
Caption = 'Read'
OnClick = btnReadClick
TabOrder = 0
TabStop = False
end
object btnWrite: TButton
Left = 88
Height = 25
Top = 5
Width = 75
Caption = 'Write'
OnClick = btnWriteClick
TabOrder = 1
TabStop = False
end
object btnHide: TButton
Left = 168
Height = 25
Top = 5
Width = 75
Caption = 'Close'
OnClick = btnHideClick
TabOrder = 2
TabStop = False
end
end
end
end end
object MainMenu1: TMainMenu object MainMenu1: TMainMenu
Images = ToolbarIcons Images = ToolbarIcons
@ -5969,6 +6058,10 @@ object GUIForm: TGUIForm
ShortCut = 24796 ShortCut = 24796
OnClick = miVideoScreenshotClick OnClick = miVideoScreenshotClick
end end
object miCopyText: TMenuItem
Caption = 'Copy Text Screen'
OnClick = miCopyTextClick
end
end end
object Input: TMenuItem object Input: TMenuItem
Caption = 'Input' Caption = 'Input'
@ -6454,6 +6547,10 @@ object GUIForm: TGUIForm
ShortCut = 24642 ShortCut = 24642
OnClick = miToolsWebDebuggerClick OnClick = miToolsWebDebuggerClick
end end
object miMemoryEdit: TMenuItem
Caption = 'Read/Write Memory'
OnClick = miMemoryEditClick
end
end end
object miHelp: TMenuItem object miHelp: TMenuItem
Caption = 'Help' Caption = 'Help'

View File

@ -22,6 +22,13 @@ type
{ TGUIForm } { TGUIForm }
TGUIForm = class(TForm) TGUIForm = class(TForm)
btnRead: TButton;
btnWrite: TButton;
btnHide: TButton;
Label1: TLabel;
Label2: TLabel;
miMemoryEdit: TMenuItem;
miCopyText: TMenuItem;
miPasteText: TMenuItem; miPasteText: TMenuItem;
N12: TMenuItem; N12: TMenuItem;
N11: TMenuItem; N11: TMenuItem;
@ -82,6 +89,8 @@ type
backdrop: TImage; backdrop: TImage;
Image1: TImage; Image1: TImage;
odFreezeFiles: TOpenDialog; odFreezeFiles: TOpenDialog;
pnlMemButtons: TPanel;
pnlMemory: TPanel;
pnlContainer: TPanel; pnlContainer: TPanel;
ProfileMenu: TPopupMenu; ProfileMenu: TPopupMenu;
RecordingMenu: TPopupMenu; RecordingMenu: TPopupMenu;
@ -302,7 +311,12 @@ type
tbRMColor: TToolButton; tbRMColor: TToolButton;
tbMasterVolume: TTrackBar; tbMasterVolume: TTrackBar;
TrackBar2: TTrackBar; TrackBar2: TTrackBar;
txtAddress: TEdit;
txtValue: TEdit;
procedure backdropClick(Sender: TObject); procedure backdropClick(Sender: TObject);
procedure btnHideClick(Sender: TObject);
procedure btnReadClick(Sender: TObject);
procedure btnWriteClick(Sender: TObject);
procedure Button1Click(Sender: TObject); procedure Button1Click(Sender: TObject);
procedure CheckTimerTimer(Sender: TObject); procedure CheckTimerTimer(Sender: TObject);
procedure DiskMenuClose(Sender: TObject); procedure DiskMenuClose(Sender: TObject);
@ -357,6 +371,7 @@ type
procedure miColorDotsClick(Sender: TObject); procedure miColorDotsClick(Sender: TObject);
procedure miColorRasterClick(Sender: TObject); procedure miColorRasterClick(Sender: TObject);
procedure miColorVoxelsClick(Sender: TObject); procedure miColorVoxelsClick(Sender: TObject);
procedure miCopyTextClick(Sender: TObject);
procedure miCPU6502Click(Sender: TObject); procedure miCPU6502Click(Sender: TObject);
procedure miCPUTypeClick(Sender: TObject); procedure miCPUTypeClick(Sender: TObject);
procedure miCPUWarpClick(Sender: TObject); procedure miCPUWarpClick(Sender: TObject);
@ -402,6 +417,7 @@ type
procedure miJSAxisSwapClick(Sender: TObject); procedure miJSAxisSwapClick(Sender: TObject);
procedure miJSXRevClick(Sender: TObject); procedure miJSXRevClick(Sender: TObject);
procedure miJSYRevClick(Sender: TObject); procedure miJSYRevClick(Sender: TObject);
procedure miMemoryEditClick(Sender: TObject);
procedure miMMHelpClick(Sender: TObject); procedure miMMHelpClick(Sender: TObject);
procedure miMonoDotsClick(Sender: TObject); procedure miMonoDotsClick(Sender: TObject);
procedure miMonoRasterClick(Sender: TObject); procedure miMonoRasterClick(Sender: TObject);
@ -472,6 +488,8 @@ type
procedure ToolTimerTimer(Sender: TObject); procedure ToolTimerTimer(Sender: TObject);
procedure tbMasterVolumeChange(Sender: TObject); procedure tbMasterVolumeChange(Sender: TObject);
procedure TrackBar2Change(Sender: TObject); procedure TrackBar2Change(Sender: TObject);
procedure txtAddressKeyPress(Sender: TObject; var Key: char);
procedure txtValueKeyPress(Sender: TObject; var Key: char);
procedure UpdateRenderMode; procedure UpdateRenderMode;
procedure UnFreeze; procedure UnFreeze;
procedure HideM8; procedure HideM8;
@ -820,6 +838,14 @@ begin
UpdateConfig( 'video/init.video.hgrmode', '1', true ); UpdateConfig( 'video/init.video.hgrmode', '1', true );
end; end;
procedure TGUIForm.miCopyTextClick(Sender: TObject);
var
s: string;
begin
s := SimpleGet(baseUrl+'/api/control/memory/screen/text');
ClipBoard.SetAsHTML( s, s );
end;
procedure TGUIForm.miCPU6502Click(Sender: TObject); procedure TGUIForm.miCPU6502Click(Sender: TObject);
begin begin
UpdateConfig('hardware/current.cpu.model', TMenuItem(sender).Caption, false ); UpdateConfig('hardware/current.cpu.model', TMenuItem(sender).Caption, false );
@ -1147,6 +1173,11 @@ begin
UpdateConfig( 'input/init.joystick.reversey', '1', true ); UpdateConfig( 'input/init.joystick.reversey', '1', true );
end; end;
procedure TGUIForm.miMemoryEditClick(Sender: TObject);
begin
pnlMemory.Visible := (not pnlMemory.Visible);
end;
procedure TGUIForm.miMMHelpClick(Sender: TObject); procedure TGUIForm.miMMHelpClick(Sender: TObject);
begin begin
SimpleGet(baseUrl + '/api/control/system/help'); SimpleGet(baseUrl + '/api/control/system/help');
@ -1590,7 +1621,7 @@ end;
procedure TGUIForm.miToolsClick(Sender: TObject); procedure TGUIForm.miToolsClick(Sender: TObject);
begin begin
miMemoryEdit.Checked := pnlMemory.Visible;
end; end;
procedure TGUIForm.miToolsTrackerClick(Sender: TObject); procedure TGUIForm.miToolsTrackerClick(Sender: TObject);
@ -1956,6 +1987,22 @@ begin
end; end;
end; end;
procedure TGUIForm.txtAddressKeyPress(Sender: TObject; var Key: char);
begin
if Key = #13 then
begin
btnReadClick(sender);
end;
end;
procedure TGUIForm.txtValueKeyPress(Sender: TObject; var Key: char);
begin
if Key = #13 then
begin
btnWriteClick(sender);
end;
end;
procedure TGUIForm.UnFreeze; procedure TGUIForm.UnFreeze;
begin begin
SimpleGet(baseUrl + '/api/control/window/unfreeze'); SimpleGet(baseUrl + '/api/control/window/unfreeze');
@ -2312,6 +2359,44 @@ begin
end; end;
procedure TGUIForm.btnHideClick(Sender: TObject);
begin
pnlMemory.Visible := false;
end;
procedure TGUIForm.btnReadClick(Sender: TObject);
var
addr: string;
r: string;
begin
try
addr := IntToStr( StrToInt(txtAddress.Text) );
r := SimpleGet(baseUrl+'/api/control/memory/read/'+addr);
txtValue.Text := '$' + IntToHex( StrToInt(r), 2 );
except
on e: Exception do begin
// don't update
end;
end;
end;
procedure TGUIForm.btnWriteClick(Sender: TObject);
var
addr, value: string;
r: string;
begin
try
addr := IntToStr( StrToInt(txtAddress.Text) );
value := IntToStr( StrToInt(txtValue.Text) );
r := SimpleGet(baseUrl+'/api/control/memory/write/'+addr+'/'+value);
txtValue.Text := '$' + IntToHex( StrToInt(r), 2 );
except
on e: Exception do begin
// don't update
end;
end;
end;
{$IFDEF WINDOWS} {$IFDEF WINDOWS}
function TGUIForm.GetTitleOfActiveWindow: string; function TGUIForm.GetTitleOfActiveWindow: string;
var var
@ -2345,8 +2430,8 @@ procedure TGUIForm.CheckTimerTimer(Sender: TObject);
begin begin
if isFS then if isFS then
exit; exit;
if MilliSecondsBetween(Now(), lastFocusLostTime) < 250 then //if MilliSecondsBetween(Now(), lastFocusLostTime) < 250 then
exit; // exit;
if WindowState = wsMinimized then if WindowState = wsMinimized then
exit; exit;
if disableFocusStealing then if disableFocusStealing then

View File

@ -7,8 +7,7 @@ uses
cthreads, cthreads,
{$ENDIF}{$ENDIF} {$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset Interfaces, // this includes the LCL widgetset
Forms, lazopenglcontext, main, mixer Forms, lazopenglcontext, main, mixer;
{ you can add units after this };
{$R *.res} {$R *.res}

90
poc.lps
View File

@ -4,7 +4,7 @@
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Version Value="11"/> <Version Value="11"/>
<BuildModes Active="Default"/> <BuildModes Active="Default"/>
<Units Count="5"> <Units Count="6">
<Unit0> <Unit0>
<Filename Value="poc.lpr"/> <Filename Value="poc.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -21,8 +21,8 @@
<HasResources Value="True"/> <HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/> <IsVisibleTab Value="True"/>
<TopLine Value="1890"/> <TopLine Value="541"/>
<CursorPos X="23" Y="1927"/> <CursorPos X="24" Y="551"/>
<UsageCount Value="323"/> <UsageCount Value="323"/>
<Loaded Value="True"/> <Loaded Value="True"/>
<LoadedDesigner Value="True"/> <LoadedDesigner Value="True"/>
@ -53,124 +53,106 @@
<CursorPos Y="654"/> <CursorPos Y="654"/>
<UsageCount Value="5"/> <UsageCount Value="5"/>
</Unit4> </Unit4>
<Unit5>
<Filename Value="images\memory.pas"/>
<ComponentName Value="memform"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<EditorIndex Value="-1"/>
<TopLine Value="40"/>
<CursorPos X="17" Y="44"/>
<UsageCount Value="24"/>
</Unit5>
</Units> </Units>
<JumpHistory Count="29" HistoryIndex="28"> <JumpHistory Count="22" HistoryIndex="21">
<Position1> <Position1>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2046" Column="35" TopLine="1936"/> <Caret Line="540" Column="30" TopLine="520"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="503" Column="22" TopLine="479"/> <Caret Line="605" Column="25" TopLine="579"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="309" Column="43" TopLine="293"/> <Caret Line="1907" Column="46" TopLine="1965"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="503" Column="5" TopLine="485"/> <Caret Line="1640" Column="3" TopLine="1638"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="508" Column="17" TopLine="486"/> <Caret Line="1647" Column="3" TopLine="1645"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2362" Column="39" TopLine="2350"/> <Caret Line="838" Column="16" TopLine="825"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2302" Column="47" TopLine="2289"/> <Caret Line="537" TopLine="519"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2362" Column="3" TopLine="2360"/> <Caret Line="538" TopLine="520"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2300" Column="44" TopLine="2289"/> <Caret Line="540" TopLine="522"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="14" Column="42"/> <Caret Line="542" TopLine="524"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="572" Column="37" TopLine="541"/> <Caret Line="543" TopLine="525"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="562" Column="29" TopLine="550"/> <Caret Line="544" TopLine="526"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="590" Column="67" TopLine="662"/> <Caret Line="545" TopLine="527"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2323" Column="34" TopLine="2297"/> <Caret Line="547" TopLine="529"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2326" Column="34" TopLine="2300"/> <Caret Line="2338" Column="29" TopLine="2336"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2533" Column="3" TopLine="2530"/> <Caret Line="2361" Column="14" TopLine="2337"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2557" Column="68" TopLine="2538"/> <Caret Line="2362" Column="13" TopLine="623"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2352" Column="3" TopLine="2349"/> <Caret Line="2414" Column="26" TopLine="2404"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2368" Column="15" TopLine="2349"/> <Caret Line="2415" Column="26" TopLine="2405"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2367" Column="15" TopLine="2348"/> <Caret Line="1623" Column="23" TopLine="1620"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2555" Column="60" TopLine="2540"/> <Caret Line="1177" Column="48" TopLine="1175"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="main.pas"/> <Filename Value="main.pas"/>
<Caret Line="2314" Column="46" TopLine="2060"/> <Caret Line="1999" Column="28" TopLine="1995"/>
</Position22> </Position22>
<Position23>
<Filename Value="main.pas"/>
<Caret Line="514" Column="43" TopLine="484"/>
</Position23>
<Position24>
<Filename Value="main.pas"/>
<Caret Line="515" Column="43" TopLine="485"/>
</Position24>
<Position25>
<Filename Value="main.pas"/>
<Caret Line="517" Column="43" TopLine="487"/>
</Position25>
<Position26>
<Filename Value="main.pas"/>
<Caret Line="2681" Column="50" TopLine="2651"/>
</Position26>
<Position27>
<Filename Value="main.pas"/>
<Caret Line="933" Column="51" TopLine="926"/>
</Position27>
<Position28>
<Filename Value="main.pas"/>
<Caret Line="540" Column="30" TopLine="520"/>
</Position28>
<Position29>
<Filename Value="main.pas"/>
<Caret Line="605" Column="25" TopLine="579"/>
</Position29>
</JumpHistory> </JumpHistory>
<RunParams> <RunParams>
<FormatVersion Value="2"/> <FormatVersion Value="2"/>