[Back to HARDWARE SWAG index] [Back to Main SWAG index] [Original]
{
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 isvesa<>0 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=$44dd 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
}
[Back to HARDWARE SWAG index] [Back to Main SWAG index] [Original]