📄 main.~pas
字号:
NormalizeTopMosts;
MessageBox('指令执行完毕!','Finish!', MB_OK);
RestoreTopMosts;
end;
exit; // all completed
end;
Clock.count := Clock.count + 1;
Clocklabel.Caption:=inttostr(Clock.count);
CheckStartCount; // 检查是否有指令可以开始计数
for i:=1 to PC-1 do
if not Instr[i].completed then // 是否已执行完
begin
if Instr[i].ExecutionComplete>0 then
begin // 写会结果 1 个时钟
//Load[i].Busy:=false;
//广播结果
//BroadcastResult('Load'+inttostr(i),'M('+Load[i].Address+')');
//Load[i].Address:='';
Instr[i].WriteResult:=Clock.count;
Instr[i].completed:=true;
end;
end;
ResponseClockEvent; //响应时钟事件
if (PC<=InstrNum) and (Instr[PC].Issue=0) and CheckNoIssueConflict(PC)
then // 是否已经发射
begin
Instr[PC].Issue:=Clock.count; // 发射
IssueProcess;
RefreshIssue;
PC:=PC+1;
end
else
RefreshIssue;
end;
procedure TForm1.X1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.NextSpeedButtonClick(Sender: TObject);
begin
// DrawLine;
if PC<=0 then
exit;
form1.Repaint;
NextClockClick(Sender);
// DrawFromInstrToLoad(1,Clock.count);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
timer1.Enabled:=false;
ClearInstrMenuClick(Sender);
form1.Repaint;
// GetDC(application.Handle);
// paintbox1.getdcGetDC(Application.Handle)
end;
procedure Tform1.DrawFromInstrToLoad(Rowi,Rowj:integer);
var tempi,tempi1,tempj,tempj1:integer;
px,py:integer;
tempkx,tempky:integer;
begin
// paintbox1.Canvas.Handle:=GetWindowDC(form1.Handle);
paintbox1.Canvas.Handle:=GetDC(form1.Handle);
paintbox1.Canvas.Brush.Color:=clRed;
paintbox1.Canvas.Brush.Style:=bsClear;
paintbox1.Canvas.Pen.Color:=clRed;
paintbox1.Canvas.Pen.Width:=3;
tempi:=Rowi*InstructionGrid.DefaultRowHeight;
tempi1:=(Rowi-1)*InstructionGrid.DefaultRowHeight;
tempj:=LoadGrid.DefaultRowHeight*Rowj+10;
tempj1:=LoadGrid.DefaultRowHeight*(Rowj-1);
{ paintbox1.Canvas.Rectangle(5+InstructionGrid.left,InstructionGrid.Top+60+tempi1,
5+InstructionGrid.left+InstructionGrid.Width,InstructionGrid.Top+60+tempi);
paintbox1.Canvas.Rectangle(5+LoadGrid.left,LoadGrid.Top+59+tempj1,
5+LoadGrid.left+LoadGrid.Width,LoadGrid.Top+59+tempj);
}
{ line to }
tempkx:=InstructionGrid.left+InstructionGrid.Width;
tempky:=InstructionGrid.Top+tempi+10;
paintbox1.Canvas.MoveTo(tempkx,tempky);
paintbox1.Canvas.LineTo(tempkx+20,tempky);
// paintbox1.Canvas.LineTo(tempkx+20,tempky-40);
paintbox1.Canvas.LineTo(tempkx+20,60);
// paintbox1.Canvas.LineTo(tempkx+380,tempky-40);
paintbox1.Canvas.LineTo(tempkx+380,60);
paintbox1.Canvas.LineTo(tempkx+380,LoadGrid.Top+tempj);
paintbox1.Canvas.LineTo(LoadGrid.Left,LoadGrid.Top+tempj);
px:=-10;
py:=-10;
paintbox1.Canvas.LineTo(LoadGrid.Left+px
,LoadGrid.Top+tempj+py);
paintbox1.Canvas.MoveTo(LoadGrid.Left
,LoadGrid.Top+tempj);
paintbox1.Canvas.LineTo(LoadGrid.Left+px
,LoadGrid.Top+tempj-py);
end;
procedure Tform1.DrawFromInstrToFU(Rowi,Colj:integer);
var tempi,tempi1,tempj,tempj1:integer;
px,py:integer;
tempkx,tempky:integer;
begin
paintbox1.Canvas.Handle:=GetWindowDC(form1.Handle);
paintbox1.Canvas.Brush.Color:=clRed;
paintbox1.Canvas.Brush.Style:=bsClear;
paintbox1.Canvas.Pen.Color:=clRed;
paintbox1.Canvas.Pen.Width:=3;
tempi:=Rowi*InstructionGrid.DefaultRowHeight;
tempi1:=(Rowi-1)*InstructionGrid.DefaultRowHeight;
tempj:=FUGrid.DefaultColWidth*(Colj+1);
tempj1:=FUGrid.DefaultColWidth*Colj;
{ paintbox1.Canvas.Rectangle(5+InstructionGrid.left,InstructionGrid.Top+60+tempi1,
5+InstructionGrid.left+InstructionGrid.Width,InstructionGrid.Top+60+tempi);
paintbox1.Canvas.Rectangle(10+FUGrid.left+tempj1,FUGrid.Top+40,
10+FUGrid.left+tempj,FUGrid.Top+40+FUGrid.Height);}
{ line to }
tempkx:=5+InstructionGrid.left+InstructionGrid.Width;
tempky:=InstructionGrid.Top+50+tempi+2;
paintbox1.Canvas.MoveTo(tempkx,tempky);
paintbox1.Canvas.LineTo(tempkx+10,tempky);
// paintbox1.Canvas.LineTo(tempkx+10,tempky+320);
paintbox1.Canvas.LineTo(tempkx+10,490);
// paintbox1.Canvas.LineTo(-13+FUGrid.Left+tempj,tempky+320);
paintbox1.Canvas.LineTo(-32+FUGrid.Left+tempj,490);
paintbox1.Canvas.LineTo(-32+FUGrid.Left+tempj,FUGrid.Top+40);
px:=-10;
py:=-10;
paintbox1.Canvas.LineTo(-32+FUGrid.Left+tempj+px,FUGrid.Top+40+py);
paintbox1.Canvas.MoveTo(-32+FUGrid.Left+tempj,FUGrid.Top+40);
paintbox1.Canvas.LineTo(-32+FUGrid.Left+tempj-px,FUGrid.Top+40+py);
end;
procedure Tform1.DrawFromInstrToRS(Rowi,Rowj:integer);
var tempi,tempi1,tempj,tempj1:integer;
px,py:integer;
tempkx,tempky:integer;
begin
paintbox1.Canvas.Handle:=GetWindowDC(form1.Handle);
paintbox1.Canvas.Brush.Color:=clRed;
paintbox1.Canvas.Brush.Style:=bsClear;
paintbox1.Canvas.Pen.Color:=clRed;
paintbox1.Canvas.Pen.Width:=3;
tempi:=Rowi*InstructionGrid.DefaultRowHeight+45;
// tempi1:=(Rowi-1)*InstructionGrid.DefaultRowHeight;
tempj:=ReservationGrid.DefaultRowHeight*Rowj+10+45;
// tempj1:=ReservationGrid.DefaultRowHeight*(Rowj-1);
{ line to }
tempkx:=5+InstructionGrid.left+InstructionGrid.Width;
tempky:=InstructionGrid.Top+tempi+10-2;
paintbox1.Canvas.MoveTo(tempkx,tempky);
paintbox1.Canvas.LineTo(tempkx+30,tempky);
// paintbox1.Canvas.LineTo(tempkx+20,tempky-40);
paintbox1.Canvas.LineTo(tempkx+30,260);
// paintbox1.Canvas.LineTo(tempkx+380,tempky-40);
//paintbox1.Canvas.LineTo(tempkx+380,60);
paintbox1.Canvas.LineTo(tempkx+30,ReservationGrid.Top+tempj);
paintbox1.Canvas.LineTo(ReservationGrid.Left,ReservationGrid.Top+tempj);
px:=-10;
py:=-10;
paintbox1.Canvas.LineTo(ReservationGrid.Left+px
,ReservationGrid.Top+tempj+py);
paintbox1.Canvas.MoveTo(ReservationGrid.Left
,ReservationGrid.Top+tempj);
paintbox1.Canvas.LineTo(ReservationGrid.Left+px
,ReservationGrid.Top+tempj-py);
end;
{
procedure Tform1.DrawFromInstrToLoad(Rowi,Rowj:integer);
var tempi,tempi1,tempj,tempj1:integer;
px,py:integer;
begin
paintbox1.Canvas.Handle:=GetWindowDC(form1.Handle);
// paintbox1.Canvas.MoveTo(0,0);
// paintbox1.Canvas.LineTo(500,500);
paintbox1.Canvas.Brush.Color:=clRed;
paintbox1.Canvas.Brush.Style:=bsClear;
paintbox1.Canvas.Pen.Color:=clRed;
paintbox1.Canvas.Pen.Width:=3;
tempi:=Rowi*InstructionGrid.DefaultRowHeight;
tempi1:=(Rowi-1)*InstructionGrid.DefaultRowHeight;
tempj:=LoadGrid.DefaultRowHeight*Rowj;
tempj1:=LoadGrid.DefaultRowHeight*(Rowj-1);
paintbox1.Canvas.Rectangle(5+InstructionGrid.left,InstructionGrid.Top+60+tempi1,
5+InstructionGrid.left+InstructionGrid.Width,InstructionGrid.Top+60+tempi);
paintbox1.Canvas.Rectangle(5+LoadGrid.left,LoadGrid.Top+59+tempj1,
5+LoadGrid.left+LoadGrid.Width,LoadGrid.Top+59+tempj);
paintbox1.Canvas.MoveTo(5+InstructionGrid.left+InstructionGrid.Width
,InstructionGrid.Top+50+tempi);
paintbox1.Canvas.LineTo(5+LoadGrid.Left
,LoadGrid.Top+50+tempj);
px:=-10;
py:=-10;
paintbox1.Canvas.LineTo(5+LoadGrid.Left+px
,LoadGrid.Top+50+tempj+py);
paintbox1.Canvas.MoveTo(5+LoadGrid.Left
,LoadGrid.Top+50+tempj);
paintbox1.Canvas.LineTo(5+LoadGrid.Left+px
,LoadGrid.Top+50+tempj-py);
paintbox1.Canvas.Refresh;
end;
}
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
DefaulInputClick(Sender);
end;
procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
InputDlg1.Show;
end;
procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
SetValuedlg1.RegSetRadio.Checked:=false;
SetValuedlg1.MemSetRadio.Checked:=true;
SetValueDlg1.Show;
end;
procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
SetValuedlg1.RegSetRadio.Checked:=true;
SetValuedlg1.MemSetRadio.Checked:=false;
SetValueDlg1.Show;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
StartRunClick(Sender);
end;
procedure Tform1.DrawFromLoadToFU(Rowi,Colj:integer);
var tempi,tempi1,tempj,tempj1:integer;
px,py:integer;
tempkx,tempky:integer;
begin
paintbox1.Canvas.Handle:=GetWindowDC(form1.Handle);
paintbox1.Canvas.Brush.Color:=clBlue;
paintbox1.Canvas.Brush.Style:=bsClear;
paintbox1.Canvas.Pen.Color:=clBlue;
paintbox1.Canvas.Pen.Width:=3;
tempi:=Rowi*LoadGrid.DefaultRowHeight;
tempi1:=(Rowi-1)*LoadGrid.DefaultRowHeight;
tempj:=FUGrid.DefaultColWidth*(Colj+1);
tempj1:=FUGrid.DefaultColWidth*Colj;
{ paintbox1.Canvas.Rectangle(5+InstructionGrid.left,InstructionGrid.Top+60+tempi1,
5+InstructionGrid.left+InstructionGrid.Width,InstructionGrid.Top+60+tempi);
paintbox1.Canvas.Rectangle(10+FUGrid.left+tempj1,FUGrid.Top+40,
10+FUGrid.left+tempj,FUGrid.Top+40+FUGrid.Height);}
{ line to }
tempkx:=5+LoadGrid.left+LoadGrid.Width;
tempky:=LoadGrid.Top+50+tempi+2;
paintbox1.Canvas.MoveTo(tempkx,tempky);
paintbox1.Canvas.LineTo(tempkx+20,tempky);
// paintbox1.Canvas.LineTo(tempkx+10,tempky+320);
paintbox1.Canvas.LineTo(tempkx+20,500);
// paintbox1.Canvas.LineTo(-13+FUGrid.Left+tempj,tempky+320);
paintbox1.Canvas.LineTo(-13+FUGrid.Left+tempj,500);
paintbox1.Canvas.LineTo(-13+FUGrid.Left+tempj,FUGrid.Top+40);
px:=-10;
py:=-10;
paintbox1.Canvas.LineTo(-13+FUGrid.Left+tempj+px,FUGrid.Top+40+py);
paintbox1.Canvas.MoveTo(-13+FUGrid.Left+tempj,FUGrid.Top+40);
paintbox1.Canvas.LineTo(-13+FUGrid.Left+tempj-px,FUGrid.Top+40+py);
end;
procedure Tform1.DrawFromRSToFU(Rowi,Colj:integer);
var tempi,tempi1,tempj,tempj1:integer;
px,py:integer;
tempkx,tempky:integer;
begin
paintbox1.Canvas.Handle:=GetWindowDC(form1.Handle);
paintbox1.Canvas.Brush.Color:=clGreen;
paintbox1.Canvas.Brush.Style:=bsClear;
paintbox1.Canvas.Pen.Color:=clGreen;
paintbox1.Canvas.Pen.Width:=3;
tempi:=Rowi*ReservationGrid.DefaultRowHeight;
tempi1:=(Rowi-1)*ReservationGrid.DefaultRowHeight;
tempj:=FUGrid.DefaultColWidth*(Colj+1);
tempj1:=FUGrid.DefaultColWidth*Colj;
{ line to }
tempkx:=5+ReservationGrid.left+ReservationGrid.Width;
tempky:=ReservationGrid.Top+50+tempi+2;
paintbox1.Canvas.MoveTo(tempkx,tempky);
paintbox1.Canvas.LineTo(tempkx+20,tempky);
// paintbox1.Canvas.LineTo(tempkx+10,tempky+320);
paintbox1.Canvas.LineTo(tempkx+20,500);
// paintbox1.Canvas.LineTo(-13+FUGrid.Left+tempj,tempky+320);
paintbox1.Canvas.LineTo(-13+FUGrid.Left+tempj,500);
paintbox1.Canvas.LineTo(-13+FUGrid.Left+tempj,FUGrid.Top+40);
px:=-10;
py:=-10;
paintbox1.Canvas.LineTo(-13+FUGrid.Left+tempj+px,FUGrid.Top+40+py);
paintbox1.Canvas.MoveTo(-13+FUGrid.Left+tempj,FUGrid.Top+40);
paintbox1.Canvas.LineTo(-13+FUGrid.Left+tempj-px,FUGrid.Top+40+py);
end;
procedure Tform1.DrawFromMemToLoad(Address:integer; Row:integer);
var tempi,tempi1,tempj,tempj1:integer;
px,py:integer;
tempkx,tempky:integer;
FindIndex:integer;
i:integer;
begin
// paintbox1.Canvas.Handle:=GetWindowDC(form1.Handle);
FindIndex:=-1;
for i:=1 to MemNum do
if (Mem[i].Address=Address) then
begin
FindIndex:=i;
break;
end;
if (FindIndex<0) then exit; // no data in memory
paintbox1.Canvas.Handle:=GetDC(form1.Handle);
paintbox1.Canvas.Brush.Color:=clNavy;
paintbox1.Canvas.Brush.Style:=bsClear;
paintbox1.Canvas.Pen.Color:=clNavy;
paintbox1.Canvas.Pen.Width:=3;
tempi:=FindIndex*MemGrid.DefaultColWidth;
//tempi1:=(FindIndex-1)*InstructionGrid.DefaultRowHeight;
tempj:=LoadGrid.DefaultRowHeight*Row+10;
//tempj1:=LoadGrid.DefaultRowHeight*(Rowj-1);
{ line to }
tempkx:=MemGrid.left+tempi;//InstructionGrid.Width;
tempky:=MemGrid.Top;//+tempi+10;
paintbox1.Canvas.MoveTo(tempkx,tempky);
paintbox1.Canvas.LineTo(tempkx,tempky-50);
paintbox1.Canvas.LineTo(20,tempky-50);
paintbox1.Canvas.LineTo(20,tempky-260);
paintbox1.Canvas.LineTo(650,tempky-260);
paintbox1.Canvas.LineTo(650,LoadGrid.Top+tempj);
// paintbox1.Canvas.LineTo(tempkx+200,);
// paintbox1.Canvas.LineTo(tempkx+380,LoadGrid.Top+tempj);
paintbox1.Canvas.LineTo(LoadGrid.Left,LoadGrid.Top+tempj);
px:=-10;
py:=-10;
paintbox1.Canvas.LineTo(LoadGrid.Left+px
,LoadGrid.Top+tempj+py);
paintbox1.Canvas.MoveTo(LoadGrid.Left
,LoadGrid.Top+tempj);
paintbox1.Canvas.LineTo(LoadGrid.Left+px
,LoadGrid.Top+tempj-py);
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
timer1.Enabled:=false;
if (InstrNum<=0) then
begin
with Application do
begin
NormalizeTopMosts;
MessageBox(' 请先输入指令','Hint', MB_OK);
RestoreTopMosts;
end;
exit;
end;
timer1.Enabled:=true;
end;
procedure TForm1.TimerAction(Sender: TObject);
begin
// end;
if not timer1.Enabled then exit;
form1.Repaint;
if PC<=0 then
StartRunClick(Sender)
else
NextClockClick(Sender);
end;
procedure TForm1.ClockSpeedImageClick(Sender: TObject);
var bo:boolean;
begin
bo:=timer1.enabled;
timer1.Enabled:=false;
ClockSpeedDlg1.Show;
timer1.Enabled:=bo;
//timer1.Interval:=(1000*ClockSpeedDlg1.TimerTrackBar.Position) div 10;
end;
procedure TForm1.AboutA1Click(Sender: TObject);
begin
aboutbox.Show;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -