Contributor: LIN KE-FONG
{ Here is a small piece of code to detect if you are running under
 a Linux's dosemu dos box.
 Truly definitive version. .. update !!
 Copyright (C) 1996 Lin Ke-Fong. Donated to public domain.
 Feel free to ask me any questions at:
 * lin.ke-fong@ace.epita.fr
 * ke-fong.lin@nuxes.frmug.net.fr
}
function dosemu_Detect:boolean; assembler;
{ This function use two methods (which are "official") to detect dosemu.
 First if dosemu is present, the BIOS date string at 0xF000:0xFFF5 should
 be "02/25/93". Second interrupt $E6 called with ah = 0 should return $AA55
 in ax register when in a dosemu dos box. Note that interrupt $E6 should
 be "initialized" to point to an IRET instruction since it is often pointed
 on nothing by BIOS.
}
asm
 push ds
{ check for the BIOS date }
 mov ax,$F000
 mov ds,ax
 mov bx,$FFF5
 mov ax,'20'
 cmp word ptr [bx],'20'
 jne @no_dosemu
 cmp word ptr [bx+2],'2/'
 jne @no_dosemu
 cmp word ptr [bx+4],'/5'
 jne @no_dosemu
 cmp word ptr [bx+6],'39'
 jne @no_dosemu
{ initialize interrupt $E6 to an IRET }
 xor ax,ax
 mov ds,ax
 mov bx,$E6 * 4
 les di,[bx]
 mov bl,es:[di]
 mov byte ptr es:[di],$CF { put an iret instruction }
{ call the installation check interrupt (int $E6 with ah = 0) }
 xor ah,ah
 int $E6
 mov es:[di],bl { restore the old instruction }
 cmp ax,$AA55
 jne @no_dosemu
 mov ax,01h
 jmp #end
#no_dosemu:
 xor ax,ax
@end:
 pop ds
end;
begin
 if dosemu_Detect then
 writeln('Hello dosemu ! and hello Linux !')
 else
 writeln('dosemu> MSDOS 7 :-)');
end.


AltStyle によって変換されたページ (->オリジナル) /