binary functions mostly done i think
This commit is contained in:
parent
f7bd4be3d5
commit
08d702bd97
2
Makefile
2
Makefile
|
@ -1,5 +1,5 @@
|
|||
TARGETS := hello test
|
||||
LIBS := binary.inc
|
||||
LIBS := binary.pas ihex.pas
|
||||
FPC_FLAGS := -g
|
||||
FPC := fpc $(FPC_FLAGS)
|
||||
|
||||
|
|
57
binary.inc
57
binary.inc
|
@ -1,57 +0,0 @@
|
|||
type
|
||||
ByteString = String[2]; { String representing a u8. }
|
||||
ShortString = String[4]; { String representing a u16. }
|
||||
|
||||
|
||||
function ValidHexDigit(bval: Byte): Boolean;
|
||||
var
|
||||
IsValid : Boolean = False;
|
||||
begin
|
||||
if ((bval >= $30) and (bval <= $39)) then
|
||||
IsValid := True;
|
||||
if ((bval >= $41) and (bval <= $46)) then
|
||||
IsValid := True;
|
||||
if ((bval >= $61) and (bval <= $66)) then
|
||||
IsValid := True;
|
||||
|
||||
ValidHexDigit := IsValid;
|
||||
end;
|
||||
|
||||
|
||||
function ReadDigit(bchr: Char): Byte;
|
||||
var
|
||||
bval : Byte = 0;
|
||||
label
|
||||
exitearly;
|
||||
begin
|
||||
bval := Byte(bchr);
|
||||
|
||||
if (not ValidHexDigit(bval)) then
|
||||
begin
|
||||
bval := 0;
|
||||
goto exitearly;
|
||||
end;
|
||||
|
||||
{Normalize downcase digits to upcase digits.}
|
||||
if (bchr >= 'a') then
|
||||
bval := bval xor $20;
|
||||
|
||||
{Perform the conversion.}
|
||||
if (bchr >= 'A') then
|
||||
bval := (bval - $41) + 10
|
||||
else
|
||||
bval := bval - $30;
|
||||
|
||||
exitearly:
|
||||
ReadDigit := bval;
|
||||
end;
|
||||
|
||||
|
||||
function ReadByte(bstr : ByteString): Byte;
|
||||
var
|
||||
out : Byte = 0;
|
||||
begin
|
||||
out := ReadDigit(bstr[1]) shl 4;
|
||||
out := out + ReadDigit(bstr[2]);
|
||||
ReadByte := out;
|
||||
end;
|
|
@ -0,0 +1,105 @@
|
|||
type
|
||||
BStr = String[2]; { String representing a u8. }
|
||||
WStr = String[4]; { String representing a u16. }
|
||||
|
||||
function ValidHexDigit(bval: Byte): Boolean;
|
||||
var
|
||||
IsValid : Boolean = False;
|
||||
begin
|
||||
if ((bval >= $30) and (bval <= $39)) then
|
||||
IsValid := True;
|
||||
if ((bval >= $41) and (bval <= $46)) then
|
||||
IsValid := True;
|
||||
if ((bval >= $61) and (bval <= $66)) then
|
||||
IsValid := True;
|
||||
|
||||
ValidHexDigit := IsValid;
|
||||
end;
|
||||
|
||||
|
||||
function ReadDigit(bchr: Char): Byte;
|
||||
var
|
||||
bval : Byte = 0;
|
||||
label
|
||||
exitearly;
|
||||
begin
|
||||
bval := Byte(bchr);
|
||||
|
||||
if (not ValidHexDigit(bval)) then
|
||||
begin
|
||||
bval := 0;
|
||||
goto exitearly;
|
||||
end;
|
||||
|
||||
{Normalize downcase digits to upcase digits.}
|
||||
if (bchr >= 'a') then
|
||||
bval := bval xor $20;
|
||||
|
||||
{Perform the conversion.}
|
||||
if (bchr >= 'A') then
|
||||
bval := (bval - $41) + 10
|
||||
else
|
||||
bval := bval - $30;
|
||||
|
||||
exitearly:
|
||||
ReadDigit := bval;
|
||||
end;
|
||||
|
||||
|
||||
function ReadByte(bstr : BStr): Byte;
|
||||
var
|
||||
out : Byte = 0;
|
||||
begin
|
||||
out := ReadDigit(bstr[1]) shl 4;
|
||||
out := out + ReadDigit(bstr[2]);
|
||||
ReadByte := out;
|
||||
end;
|
||||
|
||||
|
||||
function ReadWord(bstr : WStr): Integer;
|
||||
var
|
||||
out : Integer = 0;
|
||||
I : Integer = 1;
|
||||
begin
|
||||
for I := 1 to 4 do
|
||||
begin
|
||||
out := out shl 4;
|
||||
out := out + Integer(ReadDigit(bstr[I]));
|
||||
end;
|
||||
ReadWord := out;
|
||||
end;
|
||||
|
||||
|
||||
function ToDigit(digit : Byte): Char;
|
||||
var
|
||||
c : Char;
|
||||
begin
|
||||
c := Char(0);
|
||||
if (digit < $0A) then
|
||||
c := Char(digit + $30)
|
||||
else if (digit < $0F) then
|
||||
c := Char(digit + $41);
|
||||
|
||||
ToDigit := c;
|
||||
end;
|
||||
|
||||
|
||||
function WriteByte(bval : Byte): BStr;
|
||||
var
|
||||
s : BStr = '00';
|
||||
begin
|
||||
s[1] := ToDigit(bval shr 4);
|
||||
s[2] := ToDigit(bval and $0F);
|
||||
WriteByte := s;
|
||||
end;
|
||||
|
||||
function WriteWord(bval : Integer): WStr;
|
||||
var
|
||||
s : WStr = '0000';
|
||||
begin
|
||||
s[1] := ToDigit((bval shr $0C) and $000F);
|
||||
s[2] := ToDigit((bval shr $08) and $000F);
|
||||
s[3] := ToDigit((bval shr $04) and $000F);
|
||||
s[4] := ToDigit(bval and $000F);
|
||||
WriteWord := s;
|
||||
end;
|
|
@ -0,0 +1,12 @@
|
|||
const
|
||||
MaxRLen = 32;
|
||||
|
||||
type
|
||||
{irec stores an individual record.}
|
||||
irec = record
|
||||
Addr : Integer;
|
||||
Data : array[1...MaxRLen] of Byte;
|
||||
MaxCount : Byte;
|
||||
|
||||
{procedure RdDumpLn;}
|
||||
{procedure wrirec;}
|
12
test.pas
12
test.pas
|
@ -1,12 +1,10 @@
|
|||
program test;
|
||||
|
||||
{$I 'binary.inc'}
|
||||
|
||||
var
|
||||
bstr : String[2] = '41';
|
||||
bval : Byte;
|
||||
{$I 'binary.pas'}
|
||||
|
||||
begin
|
||||
bval := ReadByte(bstr);
|
||||
Writeln('hello', Char(bval));
|
||||
Writeln('ReadByte(''41'')->', ReadByte('41'));
|
||||
Writeln('WriteByte($41)->', WriteByte($41));
|
||||
Writeln('ReadWord(''4243'')->', ReadWord('4243'));
|
||||
Writeln('WriteByte($4243)->', WriteWord($4243));
|
||||
end.
|
||||
|
|
Loading…
Reference in New Issue