home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 February / Chip_2004-02_cd1.bin / zkuste / konfig / download / msic / Demos / 3 / Main.pas < prev    next >
Pascal/Delphi Source File  |  2003-07-30  |  2KB  |  100 lines

  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, {Variants,} Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, Buttons, ExtCtrls, MSI_DMA;
  8.  
  9. type
  10.   TForm2 = class(TForm)
  11.     bShow: TButton;
  12.     Memo: TMemo;
  13.     Bevel1: TBevel;
  14.     bClose: TButton;
  15.     pTitle: TPanel;
  16.     Image1: TImage;
  17.     LabelAddress: TLabel;
  18.     LabelLength: TLabel;
  19.     EditAddress: TEdit;
  20.     EditLength: TEdit;
  21.     bSave: TButton;
  22.     sd: TSaveDialog;
  23.     procedure bShowClick(Sender: TObject);
  24.     procedure bSaveClick(Sender: TObject);
  25.     procedure FormCreate(Sender: TObject);
  26.     procedure bCloseClick(Sender: TObject);
  27.   private
  28.     DMA: TDMA;
  29.   public
  30.   end;
  31.  
  32. var
  33.   Form2: TForm2;
  34.  
  35. implementation
  36.  
  37. {$R *.dfm}
  38.  
  39. procedure TForm2.bShowClick(Sender: TObject);
  40.  
  41. function GetChar(Value: Char): Char;
  42. begin
  43.   if Value<' ' then
  44.     Result:='.'
  45.   else
  46.     Result:=Value;
  47. end;
  48.  
  49. var
  50.   Address, Line, Row: DWORD;
  51.   Size, LineCount: Integer;
  52.   LineStr: String;
  53. begin
  54.   with DMA do
  55.     try
  56.       Screen.Cursor:=crHourGlass;
  57.       Memo.Lines.Clear;
  58.       Memo.Lines.BeginUpdate;
  59.       Size:=StrToInt(EditLength.Text);
  60.       Address:=StrToInt(EditAddress.Text);
  61.       MapMemory(Address,Size);
  62.       LineCount:=Size div 16;
  63.       if Size mod 16 > 0 then
  64.         Inc(LineCount);
  65.       for Line:=0 to LineCount-1 do begin
  66.         LineStr:=IntToHex(Address+Line*16,8)+': ';
  67.         for Row:=0 to 15 do
  68.           LineStr:=LineStr+IntToHex(Byte(Memory[Line*16+Row]),2)+' ';
  69.         LineStr:=LineStr+' ';
  70.         for Row:=0 to 15 do
  71.           LineStr:=LineStr+GetChar(Memory[Line*16+Row]);
  72.         Memo.Lines.Add(LineStr);
  73.       end;
  74.       bSave.Enabled:=True;
  75.     finally
  76.       Memo.Lines.EndUpdate;
  77.       Screen.Cursor:=crDefault;
  78.     end;
  79. end;
  80.  
  81. procedure TForm2.bSaveClick(Sender: TObject);
  82. begin
  83.   sd.FileName:=Format('%8.8x-%8.8x.dmp',[DMA.StartAddress,DMA.StartAddress+DMA.MemorySize-1]);
  84.   if sd.Execute then begin
  85.     DMA.SaveToFile(sd.Filename);
  86.   end;
  87. end;
  88.  
  89. procedure TForm2.FormCreate(Sender: TObject);
  90. begin
  91.   DMA:=TDMA.Create;
  92. end;
  93.  
  94. procedure TForm2.bCloseClick(Sender: TObject);
  95. begin
  96.   Close;
  97. end;
  98.  
  99. end.
  100.