169 lines
5.5 KiB
ObjectPascal
169 lines
5.5 KiB
ObjectPascal
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.
|