From 2dba1d4217d3c213ff8a4e630960eb53e17bfd7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 23 Mar 2007 16:52:03 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20mise=20=C3=A0=20jour=20du=20code=20pour?= =?UTF-8?q?=20compilation=20sur=20LZASM=20en=20stdcall?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programs/detect.asm | 653 ++++++++------------------------------------ 1 file changed, 113 insertions(+), 540 deletions(-) diff --git a/programs/detect.asm b/programs/detect.asm index 7011638..16e330f 100644 --- a/programs/detect.asm +++ b/programs/detect.asm @@ -1,551 +1,124 @@ -.model tiny -.486 -smart -.code +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\divers.h" +include "..\include\cpu.h" +include "..\include\pci.h" org 0h -include ..\include\pci.h -include ..\include\mem.h start: -header exe <,1,0,,,offset imports,,> +header exe <,1,0,,,offset imports,,offset realstart> realstart: -call getpciinfos -mov [pciversion],bx -mov [nbbus],cl -mov [pcitype],al - -xor edx,edx -mov dl,[nbbus] -inc dl -push edx -mov dx,[pciversion] -push edx -mov dx,[pciversion] -shr dx,8 -push edx -push offset msg -call [print] - -mov di,offset types -mov bx,7 -mov al,pcitype -vote: -bt ax,bx -jnc nowas -shl bx,1 -push word ptr [di+bx] -call [print] -shr bx,1 -nowas: -dec bx -jns vote -push offset return -call [print] - -xor ax,ax -xor cx,cx -mov si,offset infos -search: -mov di,si -call Getallfunctionsinfos -jc stopthis -mov dh,[si+pci.subclass] -mov dl,[si+pci.class] -;sousclasse -mov di,offset subclasse -call getpcisubclass -push di -;classe -mov di,offset classe -call getpciclass -push di -;fonction -mov dl,ch -push edx -;device -mov dl,cl -push edx -;bus -mov dl,al -push edx -;device -mov dx,[si+pci.device] -push edx -;vendeur -mov dx,[si+pci.vendor] -push edx - -push offset msg2 -call [print] - -inc ch -cmp ch,7 -jbe search + call [cs:print],offset msg_cpu_detect + call [cs:cpuinfo],offset thecpu + call [cs:setinfo],offset thecpu,offset temp + call [cs:print],offset msg_ok2 + push offset temp + xor eax,eax + mov al,[thecpu.family] + push eax + mov al,[thecpu.models] + push eax + mov al,[thecpu.stepping] + push eax + push offset thecpu.names + push offset thecpu.vendor + call [cs:print],offset msg_cpu_detect_inf + call [cs:print],offset msg_pci + call [cs:pciinfo],offset thepci + jc nopci + call [cs:print],offset msg_ok2 + xor eax,eax + mov al,[thepci.maxbus] + push eax + mov al,[thepci.version_minor] + push eax + mov al,[thepci.version_major] + push eax + call [cs:print],offset msg_pci_info + call [cs:print],offset msg_pci_enum + xor bx,bx + xor cx,cx + xor si,si +searchpci: + call [cs:getcardinfo],bx,cx,si,offset temp + jc stopthis + mov al,[(pcidata offset temp).subclass] + push ax + mov al,[(pcidata offset temp).class] + push ax + call [cs:getpcisubclass] + push dx + push ax + mov al,[(pcidata offset temp).class] + xor ah,ah + push ax + call [cs:getpciclass] + push dx + push ax + push 4 + push esi + push 4 + push ecx + push 4 + push ebx + mov ax,[(pcidata offset temp).device] + push eax + mov ax,[(pcidata offset temp).vendor] + push eax + call [cs:print],offset msg_pci_card + inc si + cmp si,7 + jbe searchpci stopthis: -xor ch,ch -inc cl -cmp cl,31 -jbe search -xor cl,cl -inc al -cmp al,16 -jbe search -retf + xor si,si + inc cx + cmp cx,31 + jbe searchpci + xor cx,cx + inc bx + cmp bx,16 + jbe searchpci + jmp next +nopci: + call [cs:print],offset msg_echec2 +next: + call [cs:detectvmware] + jne novirtual + call [cs:print],offset msg_vmware +novirtual: + retf -msg db "COS2000 hardware detecteur V1.6\lBIOS PCI version %hB.%hB a ete detecte !\lNombre de bus : %u\lCaracterisques PCI: ",0 -msg2 db "Peripherique :%hW Constructeur :%hW Id :%hB.%hB.%hB Classe :%0.%0\l",0 -return db "\l",0 -classe db 128 dup (0) -subclasse db 128 dup (0) +importing +use VIDEO.LIB,print +use DETECT.LIB,cpuinfo +use DETECT.LIB,setinfo +use DETECT.LIB,pciinfo +use DETECT.LIB,getcardinfo +use DETECT.LIB,getpcisubclass +use DETECT.LIB,getpciclass +use DETECT.LIB,detectvmware +endi -types dw config1 - dw config2 - dw null - dw null - dw config3 - dw config4 - dw null - dw null - -null db 'indefini',0 -config1 db 'Config Mechanism 1',0 -config2 db 'Config Mechanism 2',0 -config3 db 'Special Cycle Mechanism 1',0 -config4 db 'Special Cycle Mechanism 2',0 +thepci pciinf <> +thecpu cpu <> +temp db 256 dup (0) -PciVersion dw 0 -Nbbus db 0 -PciType db 0 -infos db 256 dup (0) - -;fonction 0-7 bus 0-255 device 0-31 - -;renvoie en es:di de classe dl -getpciclass: -push ax cx dx si di ds es -push es -push di -mov di,dx -and di,0FFh -shl di,1 -mov di,[offset classes+di] -mov cx,0FFh -mov al,0 -push cs -pop es -repne scasb -sub cx,0FFh -neg cx -sub di,cx -mov si,di -push cs -pop ds -pop di -pop es -rep movsb -pop es ds di si dx cx ax -ret - -;renvoie en es:di la sous-classe de dh et de classe dl -getpcisubclass: -push ax cx dx si di ds es -push es -push di -mov di,dx -and di,0FFh -shl di,1 -mov di,[offset classesd+di] -xchg dh,dl -xor dh,dh -cmp dx,80h -jne suiteac -mov di,offset divers -jmp found -suiteac: -shl dx,1 -add di,dx -mov di,[di] -found: -mov cx,0FFh -mov al,0 -push cs -pop es -repne scasb -sub cx,0FFh -neg cx -sub di,cx -mov si,di -push cs -pop ds -pop di -pop es -rep movsb -pop es ds di si dx cx ax -ret -divers db 'divers',0 - -classes: -dw offset class0 -dw offset class1 -dw offset class2 -dw offset class3 -dw offset class4 -dw offset class5 -dw offset class6 -dw offset class7 -dw offset class8 -dw offset class9 -dw offset class10 -dw offset class11 -dw offset class12 -dw offset class13 -dw offset class14 -dw offset class15 -dw offset class16 -dw offset class17 -class0 db 'ancien',0 -class1 db 'stockage',0 -class2 db 'reseau',0 -class3 db 'affichage',0 -class4 db 'multimedia',0 -class5 db 'memoire',0 -class6 db 'pont',0 -class7 db 'communication',0 -class8 db 'systeme',0 -class9 db 'acquisition',0 -class10 db 'dock',0 -class11 db 'processeur',0 -class12 db 'bus serie',0 -class13 db 'sans fil',0 -class14 db 'intelligent',0 -class15 db 'satellite',0 -class16 db 'cryptage',0 -class17 db 'traitement signal',0 - - -;Classes et sous classes -classesd: -dw offset class0d -dw offset class1d -dw offset class2d -dw offset class3d -dw offset class4d -dw offset class5d -dw offset class6d -dw offset class7d -dw offset class8d -dw offset class9d -dw offset class10d -dw offset class11d -dw offset class12d -dw offset class13d -dw offset class14d -dw offset class15d -dw offset class16d -dw offset class17d - -class0d: -dw offset subclass00 -dw offset subclass01 -subclass00 db 'divers',0 -subclass01 db 'vga',0 - -class1d: -dw offset subclass10 -dw offset subclass11 -dw offset subclass12 -dw offset subclass13 -dw offset subclass14 -subclass10 db 'scsi',0 -subclass11 db 'ide',0 -subclass12 db 'disquette',0 -subclass13 db 'ipi',0 -subclass14 db 'raid',0 - -class2d: -dw offset subclass20 -dw offset subclass21 -dw offset subclass22 -dw offset subclass23 -dw offset subclass24 -subclass20 db 'ethernet',0 -subclass21 db 'token ring',0 -subclass22 db 'fddi',0 -subclass23 db 'atm',0 -subclass24 db 'isdn',0 - -class3d: -dw offset subclass30 -dw offset subclass31 -dw offset subclass32 -subclass30 db 'vga',0 -subclass31 db 'xga',0 -subclass32 db '3D',0 - -class4d: -dw offset subclass40 -dw offset subclass41 -dw offset subclass42 -subclass40 db 'video',0 -subclass41 db 'audio',0 -subclass42 db 'telephonie',0 - -class5d: -dw offset subclass50 -dw offset subclass51 -subclass50 db 'ram',0 -subclass51 db 'flash',0 - -class6d: -dw offset subclass60 -dw offset subclass61 -dw offset subclass62 -dw offset subclass63 -dw offset subclass64 -dw offset subclass65 -dw offset subclass66 -dw offset subclass67 -dw offset subclass68 -subclass60 db 'hote',0 -subclass61 db 'isa',0 -subclass62 db 'eisa',0 -subclass63 db 'mca',0 -subclass64 db 'pci',0 -subclass65 db 'pcmcia',0 -subclass66 db 'nubus',0 -subclass67 db 'cardbus',0 -subclass68 db 'RACEway',0 - -class7d: -dw offset subclass70 -dw offset subclass71 -dw offset subclass72 -dw offset subclass73 -subclass70 db 'serie',0 -subclass71 db 'parallele',0 -subclass72 db 'serie multiport',0 -subclass73 db 'modem',0 - -class8d: -dw offset subclass80 -dw offset subclass81 -dw offset subclass82 -dw offset subclass83 -dw offset subclass84 -subclass80 db 'pic',0 -subclass81 db 'dma',0 -subclass82 db 'timer',0 -subclass83 db 'rtc',0 -subclass84 db 'hotplug',0 - -class9d: -dw offset subclass90 -dw offset subclass91 -dw offset subclass92 -dw offset subclass93 -dw offset subclass94 -subclass90 db 'clavier',0 -subclass91 db 'stylo',0 -subclass92 db 'souris',0 -subclass93 db 'scanner',0 -subclass94 db 'joystick',0 - -class10d: -dw offset subclass100 -subclass100 db 'station',0 - -class11d: -dw offset subclass110 -dw offset subclass111 -dw offset subclass112 -dw offset subclass113 -dw offset subclass114 -subclass110 db '386',0 -subclass111 db '486',0 -subclass112 db 'pentium',0 -subclass113 db 'alpha',0 -subclass114 db 'coprocesseur',0 - -class12d: -dw offset subclass120 -dw offset subclass121 -dw offset subclass122 -dw offset subclass123 -dw offset subclass124 -dw offset subclass125 -subclass120 db 'firewire',0 -subclass121 db 'access',0 -subclass122 db 'ssa',0 -subclass123 db 'usb',0 -subclass124 db 'fibre',0 -subclass125 db 'smbus',0 - -class13d: -dw offset subclass130 -dw offset subclass131 -dw offset subclass132 -subclass130 db 'irda',0 -subclass131 db 'ir',0 -subclass132 db 'rf',0 - -class14d: -dw offset subclass140 -subclass140 db 'IO arch',0 - -class15d: -dw offset subclass150 -dw offset subclass151 -dw offset subclass152 -dw offset subclass153 -subclass150 db 'tv',0 -subclass151 db 'audio',0 -subclass152 db 'voix',0 -subclass153 db 'donnees',0 - -class16d: -dw offset subclass160 -dw offset subclass161 -subclass160 db 'reseau',0 -subclass161 db 'jeux',0 - -class17d: -dw offset subclass170 -subclass170 db 'dpio',0 - - -;bx pci version, cl nbbus, al pci type -getPciInfos: - push dx - mov ax,0B101h - xor edi,edi - mov edx," PCI" - int 1Ah - jc ErrorPci - cmp dx,04350h - jne ErrorPci - clc - pop dx - ret -errorpci: - stc - pop dx - ret - -;al=bus cl=deviceid ch=func es:di -Getallfunctionsinfos: - push ax bx dx di - cmp ch,0 - je amultiorfirst - mov bl,0Eh - push cx - xor ch,ch - call getfunctioninfo - pop cx - and dl,80h - cmp dl,0 - jne amultiorfirst - mov word ptr [di],0000h - jmp notexist -amultiorfirst: - xor bl,bl -goinfos: - call getfunctioninfo - inc bl - cmp bl,2 - ja notzarb - cmp dl,0FFh - je notexist -notzarb: - mov es:[di],dl - inc di - cmp bl,255 - jb goinfos - pop di - push di - cmp word ptr [di],0000h - je notexist - clc - pop di dx bx ax - ret -notexist: - stc - pop di dx bx ax - ret - - ; PCI TYPE 1 -;******************************************************************* -config1_addr equ 0CF8h -config1_data equ 0CFCh - -pci_type1_detect: - mov dx, config1_addr+3 - mov al, 01h - out dx,al - mov dx,config1_addr - in eax,dx - mov ecx,eax - mov eax,80000000h - out dx,eax - in eax,dx - cmp eax,80000000h - jne endofdetectiontype1 - mov eax,ecx - out dx,eax -endofdetectiontype1: - ret - - ;al=bus bl=index cl=deviceid ch=func->dl -getfunctioninfo: - push eax bx cx - mov ah,80h - shl eax,16 - mov ah,cl - shl ah,3 - or ah,ch - mov al,bl - and al,0fch - mov dx,0cf8h - out dx,eax - mov dx,0CFCh - and bl,3 - or dl,bl - in al,dx - mov dl,al - pop cx bx eax - ret - - -; PCI TYPE 2 -;******************************************************************* -config2_reg0 equ 0CFBh -config2_reg1 equ 0CF8h -config2_reg2 equ 0CFAh - -pci_type2_detect: - xor ax,ax - mov dx,config2_reg0 - out dx,ax - mov dx,config2_reg1 - out dx,ax - mov dx,config2_reg2 - out dx,ax - mov ax,config2_reg1 - in al,dx - cmp al,0 - jne endofdetectiontype2 - mov ax,config2_reg0 - in al,dx - cmp al,0 - jne endofdetectiontype2 -endofdetectiontype2: - ret - -imports: - db "VIDEO.LIB::print",0 -print dd 0 - dw 0 - -end start +msg_ok2 db "\h70 [\c02 Ok \c07]\l",0 +msg_echec2 db "\h70 [\c0CPasser\c07]\l",0 +msg_cpu_detect db "Dectection du processeur",0 +msg_cpu_detect_inf db " -Fondeur : %0\l -Modele : %0\l -Revision : %u\l -Version : %u\l -Famille : %u\l -Technologies: %0\l",0 +msg_pci db "Detection des systemes PCI",0 +msg_pci_info db " -Version : %yB.%yB\l -Numero bus max: %u\l",0 +msg_pci_enum db " -Enumeration des peripheriques PCI:\l" + db " |Vendeur|Modele|Bus |Dev.|Func|Classe.Sous-classe\l",0 +msg_pci_card db " | %hW | %hW |%w|%w|%w|%0P.%0P\l",0 +msg_vmware db "\c04 VMWare a ete detecte !!!\c07\l",0