Contributor: PEDRO EISMAN
{
I finally got ready my contribution to SWAG. I hope it will be
included in the August release :)
It consists of some software / hardware detection (pci boards, vesa
compliant cards, fpu, game port, xms, emm, 4dos, etc.)
Put it in the section that you think it's more appropiate. I think
HARDWARE would be nice (although it has some software routines) or maybe
MISC. I don't know. It's up to you :)
Anyway, I suppose you will include the appropiate keywords, won't you?
Well, here it is. Maybe I have time to send you some other
contributions for the August release.
 -------- cut ----------- cut ---------- cut ---------- cut ----------
}
program test_system;
uses crt;
{
 ***************************************************************
 This program detects some cool hardware and software stuff
 By Pedro Eisman, CRAMP / Dark Ritual, 1996
 Use it, modify it, etc. Please give credit when necessary ;-)
 Contribute to SWAG, so it will always be so cool!
 ***************************************************************
}
procedure biosdate; {Returns the bios date}
var
l:byte;
begin
 write('Bios date: ');
 for l:=1 to 8 do begin
 write(chr(mem[$f000:$fff4+l]))
 end;
 writeln;
end;
function pci:boolean; {Tells if there is a PCI board
 Returns TRUE if found}
 function ispci:byte;assembler;asm
 mov ax,0b101h
 int 01ah
 mov al,ah
 end;
begin
 if ispci=0 then pci:=true
 else pci:=false;
end;
function detectfpu:boolean; {Detects a coprocessor, not 100% reliable
 Returns true if found, false if not found}
var
val: byte;
begin
 val:= mem[0000ドル:0410ドル];
 if val and 2=2 then detectfpu:=true {Check bit 2}
 else detectfpu:=false;
end;
function detectgame:boolean; {Tells if there is a game card or joystick port
 Returns TRUE if found}
var
val: byte;
begin
 val:= mem[0000ドル:0411ドル];
 if val and 6=6 then detectgame:=true {Check bit 6}
 else detectgame:=false;
end;
function xms:boolean; {Tells if there is an extended memory manager
 Returns true if found}
 function checkxmm:byte;assembler;asm
 mov ax,4300h
 int 2fh
 end;
begin
 if checkxmm=80ドル then xms:=true
 else xms:=false;
end;
function emm:boolean; {Tells if there is an expanded memory manager, EMM386
 Returns TRUE if found (not tested with QEMM) }
var
l: byte;
e: boolean;
const
name:string[8]='EMMXXXX0'; {We have to look in memory for this string}
 function addressemm:word;assembler;asm {It returns the segment where 
 the memory manager resides}
 mov ax,3567h
 int 21h
 mov ax,es
 end;
begin
e:=true;
 for l:=10 to 17 do begin {This is where the string starts}
 if chr(mem[addressemm:l])name[l-9] then e:=false; {Compare it}
 end;
emm:=e;
end;
procedure svga; {Checks for a VESA compliant card}
var
infoptr: pointer; {Pointer where the cards gives us its info}
infoseg: word;
s,d: word;
i : byte;
fabric: string; {Card's manufacturer name}
function isvesa:byte;assembler;asm {Checks if there's a VESA compliant card
 and finds where to get allits info}
 mov ax,infoseg
 mov es,ax
 xor di,di
 mov ax,4f00h
 int 10h
 xchg ah,al
end;
begin
 getmem(infoptr,257); {Reserve memory for card's info}
 infoseg:=seg(infoptr^);
if isvesa0 then writeln ('No VESA card found')
 else begin
 writeln('VESA card found');
 writeln('Version: ',mem[infoseg:5],'.',mem[infoseg:4]);
 d:=memw[infoseg:6];
 s:=memw[infoseg:8];
 i:=0;
 repeat
 i:=i+1;
 fabric[i]:=chr(mem[s:d+i-1]); {The manufacturer's string is in}
 until (mem[s:d+i-1]=0); {ASCIIZ so this ends when 0 found}
 fabric[0]:=chr(i);
 writeln('Manufacturer: ',fabric);
 end;
 freemem(infoptr,257); {Free the info area}
end;
function cdrom:boolean;{Tells if MSCDEX is loaded (and consequently if there is
 a CD-ROM drive. Returns TRUE if found}
 function check:byte;assembler;asm
 mov ax,1100h
 int 2fh
 end;
begin
 if check=255 then cdrom:=true
 else cdrom:=false;
end;
procedure _4dos; {Tells us if 4DOS.COM is loaded and its version}
 function _4check:word;assembler;asm {This checks that is loaded}
 mov ax,0d44dh
 xor bh,bh
 int 2fh
 end;
 function major:byte;assembler;asm
 mov ax,0d44dh
 xor bh,bh
 int 2fh
 mov al,bl
 end;
 function minor:byte;assembler;asm
 mov ax,0d44dh
 xor bh,bh
 int 2fh
 mov al,bh
 end;
begin
 if _4check=44ドルdd then
 writeln('4DOS detected. Version: ',major,'.',minor)
 else
 writeln('4DOS not present');
end;
{Sample program using all functions and procedures}
begin
 clrscr; {No comments ;-) }
 biosdate; {Bios date}
 if pci then writeln ('PCI board found') {PCI Board}
 else writeln ('No PCI board found');
 if detectfpu then writeln ('Coprocessor found') {Coprocessor}
 else writeln ('No coprocessor found');
 if detectgame then writeln ('Joystick port found') {Joystick}
 else writeln ('No joystick port found');
 if xms then writeln ('Extended memory manager found') {XMM}
 else writeln ('No extended memory manager found');
 if emm then writeln ('Expanded memory manager found') {EMM}
 else writeln ('No expanded memory manager found');
 svga; {VESA card}
 if cdrom then writeln ('MSCDEX loaded, CD-ROM drive found') {CD-ROM}
 else writeln ('MSCDEX not loaded or there is no CD-ROM');
 _4dos; {4DOS.COM}
end.
{
 Well, that's all for today ;-). I have some other routines but I
didn't include them because they were so messy. I am also interested on
seing your routines :). A lot of this things can be easily taken out from
the famous Ralph Brown Interrupt List.
 Feel free to contact me for commentaries, questions, enhancements
or whatever.
 Pedro Eisman, Cramp / Dark Ritual Demo Group
 Fidonet: 2:341/70.108
 Internet: peisman@emporium.subred.org
 WWW: http://www.geocities.com/SiliconValley/Park/1216
}


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