⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbg0.pas

📁 Borland Pascal写的8051单片机模拟仿真器。内有源码
💻 PAS
字号:
library Dbg0;

uses WinTypes, WinProcs, Strings;

const
  Nazwa:string[27]='DBG:PC i stan port體 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體 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.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -