Initial check in
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
unit jtag.svfAstState;
|
||||
|
||||
interface
|
||||
uses
|
||||
jtag.svfAstNode;
|
||||
|
||||
type
|
||||
TsvfAstState = class( TsvfAstNode)
|
||||
private
|
||||
fStates : array[0..255] of byte;
|
||||
fCursor : integer;
|
||||
fAllowData : boolean;
|
||||
|
||||
function GetStateCount: integer;
|
||||
function GetState(i:integer): byte;
|
||||
|
||||
public
|
||||
constructor Create;
|
||||
|
||||
public
|
||||
function AsText: AnsiString; override;
|
||||
|
||||
procedure BeginData;
|
||||
procedure EndData;
|
||||
|
||||
procedure AddState( State: byte);
|
||||
|
||||
public
|
||||
property StateCount : integer read GetStateCount;
|
||||
property States[i:integer] : byte read GetState;
|
||||
end;
|
||||
|
||||
implementation
|
||||
uses
|
||||
jtag.svfProgram;
|
||||
|
||||
{ TsvfAstState }
|
||||
|
||||
// @@@: Constructor/destructor ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//
|
||||
// Constructor/destructor
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ======================================================================================
|
||||
// Constructor
|
||||
// ======================================================================================
|
||||
constructor TsvfAstState.Create;
|
||||
begin
|
||||
fCursor := 0;
|
||||
fAllowData := false;
|
||||
end;
|
||||
|
||||
// @@@: Property Handlers +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//
|
||||
// Property Handlers
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ======================================================================================
|
||||
// GetStateCount
|
||||
// ======================================================================================
|
||||
function TsvfAstState.GetStateCount: integer;
|
||||
begin
|
||||
result := fCursor;
|
||||
end;
|
||||
|
||||
// ======================================================================================
|
||||
// GetState
|
||||
// ======================================================================================
|
||||
function TsvfAstState.GetState(i:integer): byte;
|
||||
begin
|
||||
if (i>=0) and (i<fCursor)
|
||||
then result := fStates[i]
|
||||
else result := 0;
|
||||
end;
|
||||
|
||||
// @@@: Interface +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//
|
||||
// Interface
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ======================================================================================
|
||||
// BeginData
|
||||
// ======================================================================================
|
||||
procedure TsvfAstState.BeginData;
|
||||
begin
|
||||
fCursor := 0;
|
||||
fAllowData := true;
|
||||
end;
|
||||
|
||||
// ======================================================================================
|
||||
// EndData
|
||||
// ======================================================================================
|
||||
procedure TsvfAstState.EndData;
|
||||
begin
|
||||
fAllowData := false;
|
||||
end;
|
||||
|
||||
// ======================================================================================
|
||||
// AddState
|
||||
// ======================================================================================
|
||||
procedure TsvfAstState.AddState( State: byte);
|
||||
begin
|
||||
if fAllowData and (fCursor < 255) then
|
||||
begin
|
||||
fStates[fCursor] := State;
|
||||
INC(fCursor);
|
||||
end;
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// As Text
|
||||
// ================================================================================================
|
||||
function TsvfAstState.AsText: AnsiString;
|
||||
|
||||
function State( st: byte): AnsiString;
|
||||
begin
|
||||
case st of
|
||||
stRESET : result := 'RESET';
|
||||
stIDLE : result := 'IDLE';
|
||||
|
||||
stDRSELECT : result := 'DRSELECT';
|
||||
stDRCAPTURE : result := 'DRCAPTURE';
|
||||
stDRSHIFT : result := 'DRSHIFT';
|
||||
stDREXIT1 : result := 'DREXIT1';
|
||||
stDRPAUSE : result := 'DRPAUSE';
|
||||
stDREXIT2 : result := 'DREXIT2';
|
||||
stDRUPDATE : result := 'DRUPDATE';
|
||||
|
||||
stIRSELECT : result := 'IRSELECT';
|
||||
stIRCAPTURE : result := 'IRCAPTURE';
|
||||
stIRSHIFT : result := 'IRSHIFT';
|
||||
stIREXIT1 : result := 'IREXIT1';
|
||||
stIRPAUSE : result := 'IRPAUSE';
|
||||
stIREXIT2 : result := 'IREXIT2';
|
||||
stIRUPDATE : result := 'IRUPDATE';
|
||||
|
||||
else
|
||||
result := 'InVaLiD';
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
var
|
||||
i: integer;
|
||||
|
||||
begin
|
||||
result := 'STATE';
|
||||
|
||||
for i:=0 to StateCount -1 do
|
||||
result := result + ' '+ State( States[i]);
|
||||
|
||||
result := result +';' +#13#10;
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user