Browse Source

+ vector unit window

florian 20 years ago
parent
commit
6c2ea3f2b4
10 changed files with 487 additions and 16 deletions
  1. 6 1
      ide/fpconst.pas
  2. 6 1
      ide/fpdebug.pas
  3. 14 1
      ide/fpdesk.pas
  4. 11 4
      ide/fpide.pas
  5. 17 1
      ide/fpmdebug.inc
  6. 5 1
      ide/fpmwnd.inc
  7. 410 4
      ide/fpregs.pas
  8. 6 1
      ide/fpstre.inc
  9. 5 1
      ide/fpvars.pas
  10. 7 1
      ide/fpviews.pas

+ 6 - 1
ide/fpconst.pas

@@ -188,6 +188,7 @@ const
      cmRegisters         = 242;
      cmRegisters         = 242;
      cmFPURegisters      = 243;
      cmFPURegisters      = 243;
      cmDoReload          = 244;
      cmDoReload          = 244;
+     cmVectorRegisters   = 245;
 
 
      cmNotImplemented    = 1000;
      cmNotImplemented    = 1000;
      cmNewFromTemplate   = 1001;
      cmNewFromTemplate   = 1001;
@@ -405,6 +406,7 @@ const
      hcBreakPointList    = hcShift+cmBreakpointList;
      hcBreakPointList    = hcShift+cmBreakpointList;
      hcRegistersWindow   = hcShift+cmRegisters;
      hcRegistersWindow   = hcShift+cmRegisters;
      hcFPURegisters      = hcShift+cmFPURegisters;
      hcFPURegisters      = hcShift+cmFPURegisters;
+     hcVectorRegisters   = hcShift+cmVectorRegisters;
 
 
      hcOpenAtCursor      = hcShift+cmOpenAtCursor;
      hcOpenAtCursor      = hcShift+cmOpenAtCursor;
      hcBrowseAtCursor    = hcShift+cmBrowseAtCursor;
      hcBrowseAtCursor    = hcShift+cmBrowseAtCursor;
@@ -472,7 +474,10 @@ implementation
 END.
 END.
 {
 {
   $Log$
   $Log$
-  Revision 1.18  2004-12-30 16:14:13  florian
+  Revision 1.19  2005-01-08 11:43:18  florian
+    + vector unit window
+
+  Revision 1.18  2004/12/30 16:14:13  florian
     * ide version to 1.0.0 changed
     * ide version to 1.0.0 changed
 
 
   Revision 1.17  2004/11/21 20:53:26  peter
   Revision 1.17  2004/11/21 20:53:26  peter

+ 6 - 1
ide/fpdebug.pas

@@ -549,6 +549,8 @@ procedure UpdateDebugViews;
 {$endif NODEBUG}
 {$endif NODEBUG}
      If assigned(FPUWindow) then
      If assigned(FPUWindow) then
        FPUWindow^.Update;
        FPUWindow^.Update;
+     If assigned(VectorWindow) then
+       VectorWindow^.Update;
      DeskTop^.UnLock;
      DeskTop^.UnLock;
 {$ifdef SUPPORT_REMOTE}
 {$ifdef SUPPORT_REMOTE}
      PopStatus;
      PopStatus;
@@ -3665,7 +3667,10 @@ end.
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.59  2004-12-22 15:24:06  peter
+  Revision 1.60  2005-01-08 11:43:18  florian
+    + vector unit window
+
+  Revision 1.59  2004/12/22 15:24:06  peter
     * fixed NODEBUG
     * fixed NODEBUG
     * set default target to the default target of the compiler
     * set default target to the default target of the compiler
 
 

+ 14 - 1
ide/fpdesk.pas

@@ -392,6 +392,15 @@ begin
            end;
            end;
          W:=FPUWindow;
          W:=FPUWindow;
        end;
        end;
+     hcVectorRegisters:
+       begin
+         if VectorWindow=nil then
+           begin
+             New(VectorWindow,Init);
+             Desktop^.Insert(VectorWindow);
+           end;
+         W:=VectorWindow;
+       end;
      hcRegistersWindow:
      hcRegistersWindow:
        begin
        begin
          if RegistersWindow=nil then
          if RegistersWindow=nil then
@@ -550,6 +559,7 @@ begin
      (P^.HelpCtx=hcStackWindow) or
      (P^.HelpCtx=hcStackWindow) or
      (P^.HelpCtx=hcRegistersWindow) or
      (P^.HelpCtx=hcRegistersWindow) or
      (P^.HelpCtx=hcFPURegisters) or
      (P^.HelpCtx=hcFPURegisters) or
+     (P^.HelpCtx=hcVectorRegisters) or
      (P^.HelpCtx=hcWatchesWindow) or
      (P^.HelpCtx=hcWatchesWindow) or
      (P^.HelpCtx=hcBreakpointListWindow) or
      (P^.HelpCtx=hcBreakpointListWindow) or
      (P^.HelpCtx=hcASCIITableWindow)
      (P^.HelpCtx=hcASCIITableWindow)
@@ -950,7 +960,10 @@ end;
 END.
 END.
 {
 {
   $Log$
   $Log$
-  Revision 1.13  2004-12-29 20:12:25  florian
+  Revision 1.14  2005-01-08 11:43:18  florian
+    + vector unit window
+
+  Revision 1.13  2004/12/29 20:12:25  florian
     * packed removed for sparc and co.
     * packed removed for sparc and co.
 
 
   Revision 1.12  2004/12/22 15:24:07  peter
   Revision 1.12  2004/12/22 15:24:07  peter

+ 11 - 4
ide/fpide.pas

@@ -89,6 +89,7 @@ type
       procedure DoAddWatch;
       procedure DoAddWatch;
       procedure DoShowRegisters;
       procedure DoShowRegisters;
       procedure DoShowFPU;
       procedure DoShowFPU;
+      procedure DoShowVector;
       function  AskRecompileIfModified:boolean;
       function  AskRecompileIfModified:boolean;
       procedure Messages;
       procedure Messages;
       procedure Calculator;
       procedure Calculator;
@@ -377,21 +378,23 @@ begin
 {$ifdef SUPPORT_REMOTE}
 {$ifdef SUPPORT_REMOTE}
       NewItem(menu_debug_remote,'', kbNoKey, cmTransferRemote, hcTransferRemote,
       NewItem(menu_debug_remote,'', kbNoKey, cmTransferRemote, hcTransferRemote,
 {$endif SUPPORT_REMOTE}
 {$endif SUPPORT_REMOTE}
-      NewItem(menu_debug_registers,'', kbNoKey, cmRegisters, hcRegistersWindow,
-      NewItem(menu_debug_fpu_registers,'', kbNoKey, cmFPURegisters, hcRegistersWindow,
       NewItem(menu_debug_addwatch,menu_key_debug_addwatch, kbCtrlF7, cmAddWatch, hcAddWatch,
       NewItem(menu_debug_addwatch,menu_key_debug_addwatch, kbCtrlF7, cmAddWatch, hcAddWatch,
       NewItem(menu_debug_watches,'', kbNoKey, cmWatches, hcWatchesWindow,
       NewItem(menu_debug_watches,'', kbNoKey, cmWatches, hcWatchesWindow,
       NewItem(menu_debug_breakpoint,menu_key_debug_breakpoint, kbCtrlF8, cmToggleBreakpoint, hcToggleBreakpoint,
       NewItem(menu_debug_breakpoint,menu_key_debug_breakpoint, kbCtrlF8, cmToggleBreakpoint, hcToggleBreakpoint,
       NewItem(menu_debug_breakpointlist,'', kbNoKey, cmBreakpointList, hcBreakpointList,
       NewItem(menu_debug_breakpointlist,'', kbNoKey, cmBreakpointList, hcBreakpointList,
       NewItem(menu_debug_callstack,menu_key_debug_callstack, kbCtrlF3, cmStack, hcStackWindow,
       NewItem(menu_debug_callstack,menu_key_debug_callstack, kbCtrlF3, cmStack, hcStackWindow,
+      NewLine(
       NewItem(menu_debug_disassemble,'', kbNoKey, cmDisassemble, hcStackWindow,
       NewItem(menu_debug_disassemble,'', kbNoKey, cmDisassemble, hcStackWindow,
+      NewItem(menu_debug_registers,'', kbNoKey, cmRegisters, hcRegistersWindow,
+      NewItem(menu_debug_fpu_registers,'', kbNoKey, cmFPURegisters, hcFPURegisters,
+      NewItem(menu_debug_vector_registers,'', kbNoKey, cmVectorRegisters, hcVectorRegisters,
       NewLine(
       NewLine(
       NewItem(menu_debug_gdbwindow,'', kbNoKey, cmOpenGDBWindow, hcOpenGDBWindow,
       NewItem(menu_debug_gdbwindow,'', kbNoKey, cmOpenGDBWindow, hcOpenGDBWindow,
       nil
       nil
 {$ifdef SUPPORT_REMOTE}
 {$ifdef SUPPORT_REMOTE}
       )
       )
 {$endif SUPPORT_REMOTE}
 {$endif SUPPORT_REMOTE}
-      )))))))))))))),
+      )))))))))))))))),
     NewSubMenu(menu_tools, hcToolsMenu, NewMenu(
     NewSubMenu(menu_tools, hcToolsMenu, NewMenu(
       NewItem(menu_tools_messages,menu_key_tools_messages, kbF11, cmToolsMessages, hcToolsMessages,
       NewItem(menu_tools_messages,menu_key_tools_messages, kbF11, cmToolsMessages, hcToolsMessages,
       NewItem(menu_tools_msgnext,menu_key_tools_msgnext, kbAltF8, cmToolsMsgNext, hcToolsMsgNext,
       NewItem(menu_tools_msgnext,menu_key_tools_msgnext, kbAltF8, cmToolsMsgNext, hcToolsMsgNext,
@@ -701,6 +704,7 @@ begin
              cmOpenGDBWindow : DoOpenGDBWindow;
              cmOpenGDBWindow : DoOpenGDBWindow;
              cmRegisters     : DoShowRegisters;
              cmRegisters     : DoShowRegisters;
              cmFPURegisters     : DoShowFPU;
              cmFPURegisters     : DoShowFPU;
+             cmVectorRegisters : DoShowVector;
            { -- Options menu -- }
            { -- Options menu -- }
              cmSwitchesMode  : SetSwitchesMode;
              cmSwitchesMode  : SetSwitchesMode;
              cmCompiler      : DoCompilerSwitch;
              cmCompiler      : DoCompilerSwitch;
@@ -1246,7 +1250,10 @@ end;
 END.
 END.
 {
 {
   $Log$
   $Log$
-  Revision 1.36  2005-01-07 21:52:23  florian
+  Revision 1.37  2005-01-08 11:43:18  florian
+    + vector unit window
+
+  Revision 1.36  2005/01/07 21:52:23  florian
     * proper stepping in disassembler window now possible
     * proper stepping in disassembler window now possible
     + disassembler window to menu added
     + disassembler window to menu added
 
 

+ 17 - 1
ide/fpmdebug.inc

@@ -172,6 +172,19 @@ begin
 {$endif NODEBUG}
 {$endif NODEBUG}
 end;
 end;
 
 
+
+procedure TIDEApp.DoShowVector;
+begin
+{$ifdef NODEBUG}
+  NoDebugger;
+{$else}
+  If not assigned(VectorWindow) then
+    InitVectorWindow
+  else
+    VectorWindow^.MakeFirst;
+{$endif NODEBUG}
+end;
+
 procedure TIDEApp.DoShowBreakpointList;
 procedure TIDEApp.DoShowBreakpointList;
 begin
 begin
 {$ifdef NODEBUG}
 {$ifdef NODEBUG}
@@ -245,7 +258,10 @@ end;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.7  2005-01-07 21:52:23  florian
+  Revision 1.8  2005-01-08 11:43:18  florian
+    + vector unit window
+
+  Revision 1.7  2005/01/07 21:52:23  florian
     * proper stepping in disassembler window now possible
     * proper stepping in disassembler window now possible
     + disassembler window to menu added
     + disassembler window to menu added
 
 

+ 5 - 1
ide/fpmwnd.inc

@@ -86,6 +86,7 @@ begin
     hcStackWindow,
     hcStackWindow,
     hcRegistersWindow,
     hcRegistersWindow,
     hcFPURegisters,
     hcFPURegisters,
+    hcVectorRegisters,
     hcClipboardWindow,
     hcClipboardWindow,
     hcASCIITableWindow,
     hcASCIITableWindow,
     hcUserScreenWindow,
     hcUserScreenWindow,
@@ -258,7 +259,10 @@ end;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.6  2004-11-08 20:28:26  peter
+  Revision 1.7  2005-01-08 11:43:18  florian
+    + vector unit window
+
+  Revision 1.6  2004/11/08 20:28:26  peter
     * Breakpoints are now deleted when removed from source, disabling is
     * Breakpoints are now deleted when removed from source, disabling is
       still possible from the breakpoint list
       still possible from the breakpoint list
     * COMPILER_1_0, FVISION, GABOR defines removed, only support new
     * COMPILER_1_0, FVISION, GABOR defines removed, only support new

+ 410 - 4
ide/fpregs.pas

@@ -129,10 +129,70 @@ uses
       destructor  Done; virtual;
       destructor  Done; virtual;
     end;
     end;
 
 
+    tssereg = record
+      case byte of
+        1 : (bytearray : array[0..15] of byte);
+        2 : (wordarray : array[0..7] of word);
+        3 : (dwordarray : array[0..3] of dword);
+        4 : (qwordarray : array[0..1] of qword);
+        5 : (twordfield : array[0..1] of qword);
+        6 : (singlearray : array[0..3] of single);
+        7 : (doublearray : array[0..1] of double);
+    end;
+
+    tmmxreg = record
+      case byte of
+        1 : (bytearray : array[0..7] of byte);
+        2 : (wordarray : array[0..3] of word);
+        3 : (dwordarray : array[0..1] of dword);
+        4 : (qwordfield : qword);
+        6 : (singlearray : array[0..1] of single);
+    end;
+
+    TVectorRegs = record
+{$ifndef test_generic_cpu}
+{$ifdef I386}
+      xmm : array[0..7] of string;
+      mmx : array[0..7] of string;
+      mxcsr : string;
+{$endif I386}
+{$endif not test_generic_cpu}
+{$ifndef cpu_known}
+       vreg : array [0..MaxRegs-1] of string;
+{$endif not cpu_known}
+    end;
+
+
+    PVectorView = ^TVectorView;
+    TVectorView = object(TView)
+      NewReg,OldReg : TVectorRegs;
+      InDraw : boolean;
+      GDBCount : longint;
+{$ifndef cpu_known}
+      UseInfoFloat : boolean;
+{$endif not cpu_known}
+      constructor Init(var Bounds: TRect);
+      procedure   Draw;virtual;
+      destructor  Done; virtual;
+    end;
+
+    PVectorWindow = ^TVectorWindow;
+    TVectorWindow = Object(TFPDlgWindow)
+      RV : PVectorView;
+      Constructor Init;
+      constructor Load(var S: TStream);
+      procedure   Store(var S: TStream);
+      procedure   Update; virtual;
+      destructor  Done; virtual;
+    end;
+
+
   procedure InitRegistersWindow;
   procedure InitRegistersWindow;
   procedure DoneRegistersWindow;
   procedure DoneRegistersWindow;
   procedure InitFPUWindow;
   procedure InitFPUWindow;
   procedure DoneFPUWindow;
   procedure DoneFPUWindow;
+  procedure InitVectorWindow;
+  procedure DoneVectorWindow;
 
 
   procedure RegisterFPRegsViews;
   procedure RegisterFPRegsViews;
 
 
@@ -146,9 +206,7 @@ uses
 {$endif NODEBUG}
 {$endif NODEBUG}
   App,Menus,
   App,Menus,
   WViews,WEditor,
   WViews,WEditor,
-{$ifdef powerpc}
-  wutils, { for inttostr }
-{$endif powerpc}
+  wutils,
   FPConst,FPVars,
   FPConst,FPVars,
   FPString,
   FPString,
   FPDebug;
   FPDebug;
@@ -183,6 +241,13 @@ Const
      Store:   @TFPUView.Store
      Store:   @TFPUView.Store
   );
   );
 
 
+  RVectorView: TStreamRec = (
+     ObjType: 1715;
+     VmtLink: Ofs(TypeOf(TVectorView)^);
+     Load:    @TVectorView.Load;
+     Store:   @TVectorView.Store
+  );
+
 
 
 {****************************************************************************
 {****************************************************************************
                          TRegistersView
                          TRegistersView
@@ -1025,6 +1090,320 @@ Const
     end;
     end;
 
 
 
 
+{****************************************************************************
+                         TVectorView
+****************************************************************************}
+
+  function GetVectorRegs(var rs : TVectorRegs
+{$ifndef cpu_known}
+             ; UseInfoFloat : boolean
+{$endif not cpu_known}
+             ) : boolean;
+
+    var
+       p,po : pchar;
+       p1 : pchar;
+    {$ifndef NODEBUG}
+       reg,value : string;
+       buffer : array[0..255] of char;
+       v : string;
+       res : cardinal;
+       i : longint;
+       err : word;
+    {$endif}
+
+    begin
+       GetVectorRegs:=false;
+{$ifndef NODEBUG}
+{$ifndef cpu_known}
+       if UseInfoFloat then
+         begin
+           Debugger^.Command('info vector');
+           if Debugger^.Error then
+             begin
+               UseInfofloat:=false;
+               Debugger^.Command('info all');
+             end;
+         end
+       else
+{$endif not cpu_known}
+         Debugger^.Command('info vector');
+       if Debugger^.Error then
+         exit
+       else
+         begin
+            po:=StrNew(Debugger^.GetOutput);
+            p:=po;
+{$ifndef cpu_known}
+            i:=0;
+{$endif not cpu_known}
+            if assigned(p) then
+              begin
+                 fillchar(rs,sizeof(rs),0);
+                 p1:=strscan(p,' ');
+                 while assigned(p1) do
+                   begin
+                      strlcopy(buffer,p,p1-p);
+                      reg:=strpas(buffer);
+{$ifndef cpu_known}
+                      p1:=strscan(p,#10);
+                      if assigned(p1) then
+                        begin
+                          strlcopy(buffer,p,p1-p);
+                          rs.freg[i]:=ExtractTabs(strpas(buffer),8);
+                          if i<MaxRegs-1 then
+                            inc(i);
+                        end;
+{$else  cpu_known}
+                      p:=p1;
+                      while p^=' ' do
+                        inc(p);
+                      if p^='$' then
+                        p1:=strscan(p,#9)
+                      else
+                        p1:=strscan(p,#10);
+                      strlcopy(buffer,p,p1-p);
+                      v:=strpas(buffer);
+                      for i:=1 to length(v) do
+                        if v[i]=#9 then
+                          v[i]:=' ';
+                      val(v,res,err);
+{$ifdef i386}
+                      if reg[1]='x' then
+                        for i:=0 to 7 do
+                          begin
+                            if reg='xmm'+inttostr(i) then
+                              rs.xmm[i]:=v
+                          end
+                      else if reg='mxcsr' then
+                        rs.mxcsr:=v
+                      else if reg[1]='m' then
+                        for i:=0 to 7 do
+                          begin
+                            if reg='mm'+inttostr(i) then
+                              rs.mmx[i]:=v;
+                          end;
+{$endif i386}
+{$ifdef powerpc}
+                      { !!!! fixme }
+                      if reg[1]='v' then
+                        for i:=0 to 31 do
+                          if reg='v'+inttostr(i) then
+                            rs.f[i]:=v;
+{$endif powerpc}
+{$endif cpu_known}
+                      p:=strscan(p1,#10);
+                      if assigned(p) then
+                        begin
+                           p1:=strscan(p,' ');
+                           inc(p);
+                        end
+                      else
+                        break;
+                   end;
+                 { free allocated memory }
+                 strdispose(po);
+              end
+            else
+              exit;
+         end;
+       { do not open a messagebox for such errors }
+       Debugger^.got_error:=false;
+       GetVectorRegs:=true;
+{$endif}
+    end;
+
+  constructor TVectorView.Init(var Bounds: TRect);
+
+    begin
+       inherited init(Bounds);
+       GrowMode:=gfGrowHiX or GfGrowHiY;
+       InDraw:=false;
+       FillChar(OldReg,Sizeof(oldreg),#0);
+       FillChar(NewReg,Sizeof(newreg),#0);
+       GDBCount:=-1;
+{$ifndef cpu_known}
+       UseInfoFloat:=true;
+{$endif not cpu_known}
+    end;
+
+  procedure TVectorView.Draw;
+
+    var
+       rs : tVectorregs;
+       top : byte;
+       color :byte;
+       ok : boolean;
+       i : byte;
+    const
+      TypeStr : Array[0..3] of string[6] =
+      ('Valid ','Zero  ','Spec  ','Empty ');
+
+    procedure SetColor(Const x,y : string);
+    begin
+      if x=y then
+        color:=7
+      else
+        color:=8;
+    end;
+
+    procedure SetIColor(Const x,y : cardinal);
+    begin
+      if x=y then
+        color:=7
+      else
+        color:=8;
+    end;
+
+    begin
+       inherited draw;
+{$ifdef NODEBUG}
+       WriteStr(1,0,'<no values available>',7);
+{$else NODEBUG}
+       If not assigned(Debugger) then
+         begin
+            WriteStr(1,0,'<no values available>',7);
+            exit;
+         end;
+       if InDraw then
+         exit;
+       InDraw:=true;
+       if GDBCount<>Debugger^.RunCount then
+         begin
+           OldReg:=NewReg;
+           OK:=GetVectorRegs(rs
+{$ifndef cpu_known}
+             ,UseInfoFloat
+{$endif not cpu_known}
+             );
+           NewReg:=rs;
+           GDBCount:=Debugger^.RunCount;
+         end
+       else
+         begin
+           rs:=newreg;
+           OK:=true;
+         end;
+       if OK then
+         begin
+{$ifdef cpu_known}
+{$ifdef i386}
+            for i:=0 to 7 do
+              begin
+                SetColor(rs.xmm[i],OldReg.xmm[i]);
+                WriteStr(1,i,'xmm'+IntToStr(i)+'  '+rs.xmm[i],color);
+              end;
+
+            SetColor(rs.mxcsr,OldReg.mxcsr);
+            WriteStr(1,i,'mxcsr'+IntToStr(i)+'  '+rs.mxcsr,color);
+
+            for i:=0 to 7 do
+              begin
+                SetColor(rs.mmx[i],OldReg.mmx[i]);
+                WriteStr(1,i+8,'mmx'+IntToStr(i)+'  '+rs.mmx[i],color);
+              end;
+{$endif i386}
+{$ifdef powerpc}
+            for i:=0 to 31 do
+              begin
+                SetColor(rs.f[i],OldReg.f[i]);
+                if i<10 then
+                  WriteStr(1,i,'f'+IntToStr(i)+'  '+rs.f[i],color)
+                else
+                  WriteStr(1,i,'f'+IntToStr(i)+' '+rs.f[i],color);
+              end;
+{$endif powerpc}
+{$else not cpu_known}
+            for i:=0 to MaxRegs-1 do
+              begin
+                SetColor(rs.freg[i],OldReg.freg[i]);
+                WriteStr(1,i,rs.freg[i],color);
+              end;
+{$endif cpu_known}
+         end
+       else
+         WriteStr(0,0,'<debugger error>',7);
+       InDraw:=false;
+{$endif NODEBUG}
+    end;
+
+  destructor TVectorView.Done;
+
+    begin
+       inherited done;
+    end;
+
+{****************************************************************************
+                         TVectorWindow
+****************************************************************************}
+
+  constructor TVectorWindow.Init;
+
+    var
+       R : TRect;
+
+    begin
+       Desktop^.GetExtent(R);
+{$ifdef i386}
+       R.A.X:=R.B.X-60;
+       R.B.Y:=R.A.Y+19;
+{$endif i386}
+{$ifdef m68k}
+       R.A.X:=R.B.X-60;
+       R.B.Y:=R.A.Y+14;
+{$endif m68k}
+{$ifdef powerpc}
+       R.A.X:=R.B.X-60;
+       R.B.Y:=R.A.Y+33;
+{$endif powerpc}
+{$ifndef cpu_known}
+       R.A.X:=R.B.X-60;
+       R.B.Y:=R.A.Y+33;
+{$endif cpu_known}
+       inherited Init(R,dialog_Vector, wnNoNumber);
+       Flags:=wfClose or wfMove or wfgrow;
+       Palette:=wpCyanWindow;
+       HelpCtx:=hcVectorRegisters;
+       R.Assign(1,1,Size.X-2,Size.Y-2);
+       RV:=new(PVectorView,init(R));
+       Insert(RV);
+       If assigned(VectorWindow) then
+         dispose(VectorWindow,done);
+       VectorWindow:=@Self;
+       Update;
+    end;
+
+  constructor TVectorWindow.Load(var S: TStream);
+
+    begin
+       inherited load(S);
+       GetSubViewPtr(S,RV);
+       If assigned(VectorWindow) then
+         dispose(VectorWindow,done);
+       VectorWindow:=@Self;
+    end;
+
+  procedure TVectorWindow.Store(var S: TStream);
+
+    begin
+       inherited Store(s);
+       PutSubViewPtr(S,RV);
+    end;
+
+  procedure TVectorWindow.Update;
+
+    begin
+       ReDraw;
+    end;
+
+  destructor TVectorWindow.Done;
+
+    begin
+       VectorWindow:=nil;
+       inherited done;
+    end;
+
+
 procedure InitRegistersWindow;
 procedure InitRegistersWindow;
 begin
 begin
   if RegistersWindow=nil then
   if RegistersWindow=nil then
@@ -1034,6 +1413,7 @@ begin
     end;
     end;
 end;
 end;
 
 
+
 procedure DoneRegistersWindow;
 procedure DoneRegistersWindow;
 begin
 begin
   if assigned(RegistersWindow) then
   if assigned(RegistersWindow) then
@@ -1043,6 +1423,7 @@ begin
     end;
     end;
 end;
 end;
 
 
+
 procedure InitFPUWindow;
 procedure InitFPUWindow;
 begin
 begin
   if FPUWindow=nil then
   if FPUWindow=nil then
@@ -1052,6 +1433,7 @@ begin
     end;
     end;
 end;
 end;
 
 
+
 procedure DoneFPUWindow;
 procedure DoneFPUWindow;
 begin
 begin
   if assigned(FPUWindow) then
   if assigned(FPUWindow) then
@@ -1062,12 +1444,33 @@ begin
 end;
 end;
 
 
 
 
+procedure InitVectorWindow;
+begin
+  if VectorWindow=nil then
+    begin
+      new(VectorWindow,init);
+      DeskTop^.Insert(VectorWindow);
+    end;
+end;
+
+
+procedure DoneVectorWindow;
+begin
+  if assigned(VectorWindow) then
+    begin
+      DeskTop^.Delete(VectorWindow);
+      VectorWindow:=nil;
+    end;
+end;
+
+
 procedure RegisterFPRegsViews;
 procedure RegisterFPRegsViews;
 begin
 begin
   RegisterType(RRegistersWindow);
   RegisterType(RRegistersWindow);
   RegisterType(RRegistersView);
   RegisterType(RRegistersView);
   RegisterType(RFPUWindow);
   RegisterType(RFPUWindow);
   RegisterType(RFPUView);
   RegisterType(RFPUView);
+  RegisterType(RVectorView);
 end;
 end;
 
 
 end.
 end.
@@ -1075,7 +1478,10 @@ end.
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.5  2004-12-22 15:24:07  peter
+  Revision 1.6  2005-01-08 11:43:18  florian
+    + vector unit window
+
+  Revision 1.5  2004/12/22 15:24:07  peter
     * fixed NODEBUG
     * fixed NODEBUG
     * set default target to the default target of the compiler
     * set default target to the default target of the compiler
 
 

+ 6 - 1
ide/fpstre.inc

@@ -109,6 +109,7 @@ const
       menu_debug_remote      = '~S~end to remote';
       menu_debug_remote      = '~S~end to remote';
       menu_debug_registers   = '~R~egisters';
       menu_debug_registers   = '~R~egisters';
       menu_debug_fpu_registers   = '~F~loating Point Unit';
       menu_debug_fpu_registers   = '~F~loating Point Unit';
+      menu_debug_vector_registers   = '~V~ector Unit';
       menu_debug_addwatch    = '~A~dd Watch';
       menu_debug_addwatch    = '~A~dd Watch';
       menu_debug_watches     = '~W~atches';
       menu_debug_watches     = '~W~atches';
       menu_debug_breakpointlist = 'Breakpoint ~L~ist';
       menu_debug_breakpointlist = 'Breakpoint ~L~ist';
@@ -327,6 +328,7 @@ const
       dialog_registers = 'Register View';
       dialog_registers = 'Register View';
 
 
       dialog_fpu = 'FPU View';
       dialog_fpu = 'FPU View';
+      dialog_vector = 'Vector Unit View';
 
 
       dialog_callstack = 'Call Stack';
       dialog_callstack = 'Call Stack';
 
 
@@ -1061,7 +1063,10 @@ const
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.26  2005-01-07 21:52:23  florian
+  Revision 1.27  2005-01-08 11:43:18  florian
+    + vector unit window
+
+  Revision 1.26  2005/01/07 21:52:23  florian
     * proper stepping in disassembler window now possible
     * proper stepping in disassembler window now possible
     + disassembler window to menu added
     + disassembler window to menu added
 
 

+ 5 - 1
ide/fpvars.pas

@@ -67,6 +67,7 @@ const ClipboardWindow  : PClipboardWindow = nil;
       StackWindow      : PStackWindow = nil;
       StackWindow      : PStackWindow = nil;
       RegistersWindow  : PRegistersWindow = nil;
       RegistersWindow  : PRegistersWindow = nil;
       FPUWindow        : PFPUWindow = nil;
       FPUWindow        : PFPUWindow = nil;
+      VectorWindow     : PVectorWindow = nil;
 {$endif NODEBUG}
 {$endif NODEBUG}
       UserScreenWindow : PScreenWindow = nil;
       UserScreenWindow : PScreenWindow = nil;
 
 
@@ -127,7 +128,10 @@ implementation
 END.
 END.
 {
 {
   $Log$
   $Log$
-  Revision 1.10  2004-12-22 15:24:07  peter
+  Revision 1.11  2005-01-08 11:43:18  florian
+    + vector unit window
+
+  Revision 1.10  2004/12/22 15:24:07  peter
     * fixed NODEBUG
     * fixed NODEBUG
     * set default target to the default target of the compiler
     * set default target to the default target of the compiler
 
 

+ 7 - 1
ide/fpviews.pas

@@ -675,6 +675,7 @@ begin
      (P^.HelpCtx=hcWatchesWindow) or
      (P^.HelpCtx=hcWatchesWindow) or
      (P^.HelpCtx=hcRegistersWindow) or
      (P^.HelpCtx=hcRegistersWindow) or
      (P^.HelpCtx=hcFPURegisters) or
      (P^.HelpCtx=hcFPURegisters) or
+     (P^.HelpCtx=hcVectorRegisters) or
      (P^.HelpCtx=hcStackWindow) or
      (P^.HelpCtx=hcStackWindow) or
      (P^.HelpCtx=hcBreakpointListWindow) or
      (P^.HelpCtx=hcBreakpointListWindow) or
      (P^.HelpCtx=hcASCIITableWindow)
      (P^.HelpCtx=hcASCIITableWindow)
@@ -737,6 +738,7 @@ begin
      (P^.HelpCtx <> hcWatchesWindow) and
      (P^.HelpCtx <> hcWatchesWindow) and
      (P^.HelpCtx <> hcStackWindow) and
      (P^.HelpCtx <> hcStackWindow) and
      (P^.HelpCtx <> hcRegistersWindow) and
      (P^.HelpCtx <> hcRegistersWindow) and
+     (P^.HelpCtx <> hcVectorRegisters) and
      (P^.HelpCtx <> hcFPURegisters);
      (P^.HelpCtx <> hcFPURegisters);
 end;
 end;
 begin
 begin
@@ -1907,6 +1909,7 @@ begin
      (F^.HelpCtx = hcWatchesWindow) or
      (F^.HelpCtx = hcWatchesWindow) or
      (F^.HelpCtx = hcStackWindow) or
      (F^.HelpCtx = hcStackWindow) or
      (F^.HelpCtx = hcRegistersWindow) or
      (F^.HelpCtx = hcRegistersWindow) or
+     (F^.HelpCtx = hcVectorRegisters) or
      (F^.HelpCtx = hcFPURegisters)) do
      (F^.HelpCtx = hcFPURegisters)) do
     F:=F^.NextView;
     F:=F^.NextView;
   if F<>@Self then
   if F<>@Self then
@@ -4490,7 +4493,10 @@ end;
 END.
 END.
 {
 {
   $Log$
   $Log$
-  Revision 1.54  2005-01-07 19:09:28  florian
+  Revision 1.55  2005-01-08 11:43:18  florian
+    + vector unit window
+
+  Revision 1.54  2005/01/07 19:09:28  florian
     * highlight keywords of all language modes
     * highlight keywords of all language modes
 
 
   Revision 1.53  2004/12/22 15:24:07  peter
   Revision 1.53  2004/12/22 15:24:07  peter