www.pudn.com > DBG8051.rar > Dbg0.pas


library Dbg0; 
 
uses WinTypes, WinProcs, Strings; 
 
const 
  Nazwa:string[27]='DBG:PC i stan portów P0-P3'#0; 
 
var 
  MojeOkno:HWnd; 
  Otwarty:boolean; 
  selROM,selRAM,selRAMInt:word; 
  adresPC:^word; 
 
function BtoHEX(co:byte):string; 
const Hx:array[0..15] of char='0123456789ABCDEF'; 
begin 
  BtoHEX:=Hx[co shr 4]+Hx[co and 15]; 
end; 
 
function WtoHEX(co:word):string; 
begin 
  WtoHEX:=BtoHEX(Hi(co))+BtoHEX(Lo(co)); 
end; 
 
procedure Odrysuj(Okno:HWnd); 
const 
  Maska:array[0..7] of byte=(1,2,4,8,16,32,64,128); 
  Tabul:array[0..2] of word=(32,64,96); 
var 
  DC:HDC; 
  nr,p,c:byte; 
  li:string[3]; 
  s:string[22]; 
  n:array[0..22] of char; 
begin 
  DC:=GetDC(Okno); 
  SetBkColor(DC,RGB($C0,$C0,$C0)); 
  SelectObject(DC,GetStockObject(SYSTEM_FONT)); 
  s:='PC:'#9+WtoHEX(adresPC^)+' '; 
  StrPCopy(n,s); 
  TabbedTextOut(DC,2,0,n,9,3,Tabul,0); 
  for nr:=1 to 4 do 
  begin 
    p:=Mem[selRAMInt:$70+nr*$10]; 
    Str(p,li); 
    s:='P'+char(47+nr)+':'#9+BtoHEX(p)+'H'#9+li+#9; 
    for c:=7 downto 0 do 
      if (p and Maska[c])=0 then s:=s+'0' else s:=s+'1'; 
    StrPCopy(n,s); 
    TabbedTextOut(DC,2,16*nr,n,Length(s),3,Tabul,0); 
  end; 
  ReleaseDC(Okno,DC); 
end; 
 
function FunOkna(Okno:HWnd;Kod_meldunku,wParam:word;LParam:longint):longint;  EXPORT; 
begin 
  case Kod_meldunku of 
    wm_Paint: begin 
                DefWindowProc(Okno,Kod_meldunku,wParam,LParam); 
                Odrysuj(Okno); 
              end; 
  else FunOkna:=DefWindowProc(Okno,Kod_meldunku,WParam,LParam); 
  end; 
end; 
 
const 
  NaszaKlasa: TWndClass =( 
    style	        : 0; 
    lpfnWndProc	        : @FunOkna; 
    cbClsExtra	        : 0; 
    cbWndExtra   	: 0; 
    hInstance    	: 0; 
    hIcon		: 0; 
    hCursor      	: 0; 
    hbrBackground	: 0; 
    lpszMenuName 	: nil; 
    lpszClassName	: 'StanP0P3'); 
 
function Name:PChar; export; 
begin 
  Name:=@Nazwa[1]; 
end; 
 
procedure Stop(i:THandle); export; 
begin 
  if not Otwarty then Exit; 
  DestroyWindow(MojeOkno); 
  UnregisterClass('StanP0P3',i); 
  Otwarty:=false; 
end; 
 
function Change(i:THandle;o:HWnd;s1,s2,s3:word;apc:pointer):boolean; export; 
begin 
  if Otwarty then Stop(i) else 
  begin 
    selROM:=s1; selRAM:=s2; selRAMInt:=s3; adresPC:=apc; 
    NaszaKlasa.hInstance:=i; 
    NaszaKlasa.hBrBackground:=GetStockObject(LTGRAY_BRUSH); 
    NaszaKlasa.hCursor:=LoadCursor(0, idc_Arrow); 
    RegisterClass(NaszaKlasa); 
    MojeOkno:=CreateWindow('StanP0P3','PC i stan portów P0-P3',ws_Overlapped or ws_Visible, 
      cw_UseDefault,cw_UseDefault,180,100,o,0,i,nil); 
    Otwarty:=true; 
  end; 
  Change:=Otwarty; 
end; 
 
procedure Update; export; 
begin 
  if Otwarty then 
  begin 
    InvalidateRect(MojeOkno,nil,false); 
    Odrysuj(MojeOkno); 
  end; 
end; 
 
exports Name, Stop, Change, Update; 
 
begin 
  Otwarty:=false; 
end.