156 lines
4.8 KiB
ObjectPascal
156 lines
4.8 KiB
ObjectPascal
unit jtag.svfProgram;
|
|
|
|
interface
|
|
uses
|
|
jtag.svfAstNode,
|
|
System.Contnrs;
|
|
|
|
const
|
|
stRESET = 0;
|
|
stIDLE = 1;
|
|
|
|
stDRSELECT = 2;
|
|
stDRCAPTURE = 3;
|
|
stDRSHIFT = 4;
|
|
stDRPAUSE = 5;
|
|
stDREXIT1 = 6;
|
|
stDREXIT2 = 7;
|
|
stDRUPDATE = 8;
|
|
|
|
stIRSELECT = 9;
|
|
stIRCAPTURE = 10;
|
|
stIRSHIFT = 11;
|
|
stIRPAUSE = 12;
|
|
stIREXIT1 = 13;
|
|
stIREXIT2 = 14;
|
|
stIRUPDATE = 15;
|
|
|
|
stNONDEF = $ff;
|
|
|
|
type
|
|
TsvfProgram = class
|
|
private
|
|
fStatements : TObjectList;
|
|
|
|
function GetStatementCount : integer;
|
|
function GetStatement(i: integer): TsvfAstNode;
|
|
|
|
public
|
|
procedure AddStatement( Stmt: TsvfAstNode);
|
|
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
|
|
procedure Dump( FileName: string);
|
|
|
|
public
|
|
property StatementCount : integer read GetStatementCount;
|
|
property Statements[i: integer] : TsvfAstNode read GetStatement;
|
|
|
|
end;
|
|
|
|
implementation
|
|
uses
|
|
System.Classes;
|
|
|
|
{ TsvfProgram }
|
|
|
|
// @@@: Constructor/destructor ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
//
|
|
// Constructor/destructor
|
|
//
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ======================================================================================
|
|
// Constructor
|
|
// ======================================================================================
|
|
constructor TsvfProgram.Create;
|
|
begin
|
|
inherited;
|
|
fStatements := TObjectList.Create( true);
|
|
end;
|
|
|
|
// ======================================================================================
|
|
// Destructor
|
|
// ======================================================================================
|
|
destructor TsvfProgram.Destroy;
|
|
begin
|
|
fStatements.Free;
|
|
inherited;
|
|
end;
|
|
|
|
// @@@: Interface +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
//
|
|
// Interface
|
|
//
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ======================================================================================
|
|
// AddStatement
|
|
// ======================================================================================
|
|
procedure TsvfProgram.AddStatement(Stmt: TsvfAstNode);
|
|
begin
|
|
fStatements.Add( Stmt);
|
|
end;
|
|
|
|
// ================================================================================================
|
|
// Dump
|
|
// ================================================================================================
|
|
procedure TsvfProgram.Dump(FileName: string);
|
|
var
|
|
i : integer;
|
|
s : AnsiString;
|
|
stm : TMemoryStream;
|
|
|
|
|
|
begin
|
|
stm := TMemoryStream.Create;
|
|
|
|
for i:=0 to StatementCount -1 do
|
|
begin
|
|
s := Statements[i].AsText;
|
|
stm.Write(s[1], Length(s));
|
|
end;
|
|
|
|
stm.SaveToFile(FileName);
|
|
stm.Free
|
|
end;
|
|
|
|
|
|
// @@@: Property Handlers +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
//
|
|
// Property Handlers
|
|
//
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ======================================================================================
|
|
// GetStatementCount
|
|
// ======================================================================================
|
|
function TsvfProgram.GetStatementCount: integer;
|
|
begin
|
|
result := fStatements.Count;
|
|
end;
|
|
|
|
// ======================================================================================
|
|
// GetStatement
|
|
// ======================================================================================
|
|
function TsvfProgram.GetStatement(i: integer): TsvfAstNode;
|
|
begin
|
|
if (i>=0) and (i<fStatements.Count)
|
|
then result := fStatements[i] as TsvfAstNode
|
|
else result := nil
|
|
end;
|
|
|
|
|
|
end.
|