⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.~pas

📁 动态调度算法实验
💻 ~PAS
📖 第 1 页 / 共 4 页
字号:
       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 + -