mirror of
https://github.com/SabreTools/BinaryObjectScanner.git
synced 2026-02-12 13:45:35 +00:00
109 lines
3.0 KiB
C#
109 lines
3.0 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using static psxt001z.Common;
|
|
|
|
namespace psxt001z
|
|
{
|
|
internal static class Functions
|
|
{
|
|
public static int CalculateEDC(in byte[] src, int srcPtr, int size, int[] edc_lut)
|
|
{
|
|
int edc = 0;
|
|
while (size-- != 0)
|
|
{
|
|
edc = (edc >> 8) ^ edc_lut[(edc ^ src[srcPtr++]) & 0xFF];
|
|
}
|
|
|
|
return edc;
|
|
}
|
|
|
|
public static bool ZeroCompare(byte[] buffer, int bufferPtr, int bsize)
|
|
{
|
|
for (int i = 0; i < bsize; i++)
|
|
{
|
|
if (buffer[bufferPtr + i] != 0x00)
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public static void MSF(long lba, byte[] buffer, int bufferOffset)
|
|
{
|
|
lba += 150;
|
|
|
|
double mindbl = lba / 60 / 75;
|
|
byte min = (byte)Math.Floor(mindbl);
|
|
double secdbl = (lba - (min * 60 * 75)) / 75;
|
|
byte sec = (byte)Math.Floor(secdbl);
|
|
byte frame = (byte)(lba - (min * 60 * 75) - (sec * 75));
|
|
|
|
buffer[bufferOffset] = itob(min);
|
|
buffer[bufferOffset + 1] = itob(sec);
|
|
buffer[bufferOffset + 2] = itob(frame);
|
|
|
|
return;
|
|
}
|
|
|
|
public static bool GetEDCStatus(Stream file)
|
|
{
|
|
long currentposition = file.Position;
|
|
|
|
file.Seek(30572, SeekOrigin.Begin);
|
|
|
|
byte[] buffer = new byte[4];
|
|
file.Read(buffer, 0, 4);
|
|
|
|
file.Seek(currentposition, SeekOrigin.Begin);
|
|
|
|
return BitConverter.ToInt32(buffer, 0) == 0;
|
|
}
|
|
|
|
public static byte[] ExecutableName(Stream file)
|
|
{
|
|
byte[] buffer = new byte[20];
|
|
byte[] exename = new byte[20];
|
|
|
|
//Searching for SYSTEM.CNF
|
|
file.Seek(51744, SeekOrigin.Begin);
|
|
while (Encoding.ASCII.GetString(buffer) != "SYSTEM.CNF")
|
|
{
|
|
file.Read(buffer, 0, 10);
|
|
buffer[10] = 0;
|
|
file.Seek(-9, SeekOrigin.Current);
|
|
}
|
|
|
|
file.Seek(-32, SeekOrigin.Current);
|
|
byte[] lba = new byte[4];
|
|
file.Read(lba, 0, 4);
|
|
file.Seek((2352 * BitConverter.ToInt32(lba, 0)) + 29, SeekOrigin.Begin);
|
|
file.Read(buffer, 0, 6);
|
|
buffer[6] = 0;
|
|
while (Encoding.ASCII.GetString(buffer) != "cdrom:")
|
|
{
|
|
file.Seek(-5, SeekOrigin.Current);
|
|
file.Read(buffer, 0, 6);
|
|
}
|
|
|
|
file.Read(buffer, 0, 1);
|
|
if (buffer[0] != '\\')
|
|
file.Seek(-1, SeekOrigin.Current);
|
|
|
|
int i = -1;
|
|
do
|
|
{
|
|
file.Read(buffer, ++i, 1);
|
|
} while (buffer[i] != ';');
|
|
|
|
for (int a = 0; a < i; a++)
|
|
{
|
|
exename[a] = (byte)char.ToUpper((char)buffer[a]);
|
|
}
|
|
|
|
exename[i] = 0;
|
|
return exename;
|
|
}
|
|
}
|
|
}
|