view TOOLS/bios2dump.c @ 21477:706ee13d09f1

help_mp-de.h: r21367: If a glyph is not found in the current font, switch to another one. r21476: Open embedded fonts directly from memory. [...] mplayer.1: r21357: Cycling through video tracks works with libavformat as well. r21398: improve description of lavf's i_certify_that_my_video_stream_does_not_use_b_frames r21399: fix suggested by Diego r21410: document new meaning of dia=-1 introduced by lavc r7192 r21413: mark lavc's uneven multi-hexagon search as slow, remove stray '.' r21430: documented -mpegopts :[va]buf_size r21441: Audio track switching works for AVI and libavformat as well. r21446: Remove long-deprecated -vop option. r21449: Merge dga/nodga suboption of vo_vesa, no short forms. r21452: document s3fb video out driver r21484: documented -mpegopts :tele_src and :tele_dest r21486: Improoving readability of pullup filter section r21487: document s3fb suboption, [...]
author kraymer
date Mon, 04 Dec 2006 19:06:19 +0000
parents 51276a7f4ea1
children
line wrap: on
line source

/*
    bios2dump.c - Was designed to extract BIOS of your PC and save it to file.
    Usage: as argument requires DOS interrupt number in hexadecimal form.
    as output - will write 64KB file which will named: SSSS_OOOO.intXX
    where: SSSS - segment of BIOS interrupt handler
           OOOO - offset of BIOS interrupt handler
	   XX   - interrupt number which was passed as argument
    Licence: GNU GPL v2
    Copyright: Nick Kurshev <nickols_k@mail.ru>
*/
#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[])
{
  FILE * fd_mem, *fd_out;
  unsigned short int_seg,int_off;
  unsigned long bios_off;
  int int_no;
  size_t i;
  char outname[80];
  unsigned char ch;
  if(argc < 2)
  {
    printf("Usage: %s int_no(in hex)\n",argv[0]);
    return EXIT_FAILURE;
  }
  int_no = strtol(argv[1],NULL,16);
  if(!(fd_mem = fopen("/dev/mem","rb")))
  {
    perror("Can't open file - /dev/mem");
    return EXIT_FAILURE;
  }
  fseek(fd_mem,int_no*4,SEEK_SET);
  fread(&int_off,sizeof(unsigned short),1,fd_mem);
  fread(&int_seg,sizeof(unsigned short),1,fd_mem);
  sprintf(outname,"%04X_%04X.int%02X",int_seg,int_off,int_no);
  if(!(fd_out = fopen(outname,"wb")))
  {
    perror("Can't open output file");
    fclose(fd_mem);
    return EXIT_FAILURE;
  }
  bios_off = (int_seg << 4) + int_off;
  bios_off &= 0xf0000;
  fseek(fd_mem,bios_off,SEEK_SET);
  for(i=0;i<0x10000;i++)
  {
    fread(&ch,1,1,fd_mem);
    fwrite(&ch,1,1,fd_out);
  }
  fclose(fd_out);
  fclose(fd_mem);
  return EXIT_SUCCESS;
}