Files
bds.mr.jtg/src.jtag/svf/jtag.svfAstState.pas
T
2026-01-08 19:12:06 +01:00

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.