mirror of
https://github.com/86Box/bios-tools.git
synced 2026-02-25 12:55:33 -07:00
bios_extract: Add AMI AFUDOS decompression
This commit is contained in:
@@ -619,3 +619,34 @@ NotCompressed:
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
Bool
|
||||
AFUDOSExtract(unsigned char *BIOSImage, int BIOSLength, int BIOSOffset,
|
||||
uint32_t AFUDOSOffset, uint32_t ROMOffset)
|
||||
{
|
||||
struct hdr {
|
||||
uint32_t ROMSize;
|
||||
uint32_t ExpSize;
|
||||
unsigned char Data[];
|
||||
} *hdr = (struct hdr *) (BIOSImage + ROMOffset + 16);
|
||||
|
||||
unsigned char *Buffer = MMapOutputFile("afudos.bin", hdr->ExpSize);
|
||||
if (!Buffer)
|
||||
return FALSE;
|
||||
|
||||
if (LH5Decode(hdr->Data, hdr->ROMSize, Buffer, hdr->ExpSize) == -1) {
|
||||
munmap(Buffer, hdr->ExpSize);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
munmap(Buffer, hdr->ExpSize);
|
||||
|
||||
char *argv[] = {"", "afudos.bin"};
|
||||
int ret = main(2, argv);
|
||||
unlink("afudos.bin");
|
||||
|
||||
return !ret;
|
||||
}
|
||||
|
||||
@@ -113,6 +113,7 @@ static struct {
|
||||
"AMIBIOSC07", NULL, AMI95Extract}, {
|
||||
"AMIBIOSC08", NULL, AMI95Extract}, {
|
||||
"AMIBIOSC09", NULL, AMI95Extract}, { /* Hyper-V legacy BIOS */
|
||||
"AMI Flash Utility for DOS Command mode.", "@ROM", AFUDOSExtract}, {
|
||||
"= Award Decompression Bios =", NULL, AwardExtract}, {
|
||||
"awardext.rom", NULL, AwardExtract}, {
|
||||
"Phoenix Technologies", "BCPSEGMENT", PhoenixExtract}, {
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
|
||||
/* bios_extract.c */
|
||||
unsigned char *MMapOutputFile(char *filename, int size);
|
||||
int main(int argc, char *argv[]);
|
||||
|
||||
/* ami.c */
|
||||
Bool AMI940725Extract(unsigned char *BIOSImage, int BIOSLength, int BIOSOffset,
|
||||
@@ -44,6 +45,8 @@ Bool AMI941010Extract(unsigned char *BIOSImage, int BIOSLength, int BIOSOffset,
|
||||
uint32_t Offset1, uint32_t Offset2);
|
||||
Bool AMI95Extract(unsigned char *BIOSImage, int BIOSLength, int BIOSOffset,
|
||||
uint32_t Offset1, uint32_t Offset2);
|
||||
Bool AFUDOSExtract(unsigned char *BIOSImage, int BIOSLength, int BIOSOffset,
|
||||
uint32_t Offset1, uint32_t Offset2);
|
||||
|
||||
/* phoenix.c */
|
||||
Bool PhoenixExtract(unsigned char *BIOSImage, int BIOSLength, int BIOSOffset,
|
||||
|
||||
Reference in New Issue
Block a user