2007-03-23 17:31:09 +01:00
model tiny , stdcall
p586N
locals
jumps
codeseg
option procalign : byte
2004-06-12 23:34:04 +02:00
2007-03-23 17:31:09 +01:00
include "..\include\fat.h"
include "..\include\mem.h"
include "..\include\divers.h"
2007-03-31 17:00:23 +02:00
include "..\include\pci.h"
include "..\include\cpu.h"
2004-06-12 23:34:04 +02:00
2007-03-23 17:31:09 +01:00
org 0h
2004-06-12 23:34:04 +02:00
start:
2007-03-23 17:31:09 +01:00
header exe < , 1 , 0 ,,, offset imports ,, offset realstart >
2004-11-29 23:41:00 +01:00
realstart:
2007-03-23 17:31:09 +01:00
call [ cs : print ], offset msginit
2004-06-12 23:34:04 +02:00
xor bp , bp
replay:
2007-03-23 17:31:09 +01:00
call [ cs : addline ]
2004-06-12 23:34:04 +02:00
noret:
2007-03-23 17:31:09 +01:00
call [ cs : addline ]
2004-11-30 20:30:30 +01:00
mov di , offset di r
2007-03-23 17:31:09 +01:00
call [ cs : getdir ], di
call [ cs : print ], di
call [ cs : print ], offset prompt
2004-06-12 23:34:04 +02:00
mov di , offset buffer
waitchar:
2007-03-23 17:31:09 +01:00
xor ax , ax
2004-06-12 23:34:04 +02:00
int 16h
2004-11-11 18:03:41 +01:00
call convertfr
2004-06-12 23:34:04 +02:00
cmp ah , 59
jne norr
cmp bp , 0
je waitchar
2007-03-23 17:31:09 +01:00
call [ print ],[ word ptr cs : bp ]
call [ copy ],[ word ptr cs : bp ], di
call [ getlength ], di
add di , ax
2004-06-12 23:34:04 +02:00
jmp waitchar
norr:
2004-11-30 20:30:30 +01:00
cmp al , 0dh ;entr<74> e
2004-06-12 23:34:04 +02:00
je entere
2004-11-30 20:30:30 +01:00
cmp al , 08h ;backspace
2004-11-10 17:50:43 +01:00
je backspace
2004-11-30 20:30:30 +01:00
cmp al , 27 ;echap
2004-11-10 17:50:43 +01:00
je es cape
2004-11-10 12:54:51 +01:00
cmp al , ' '
jb waitchar
2004-06-12 23:34:04 +02:00
cmp di , offset buffer + 256
je waitchar
mov [ di ], al
inc di
2007-03-23 17:31:09 +01:00
call [ cs : showchar ], ax
2004-06-12 23:34:04 +02:00
jmp waitchar
2004-11-10 17:50:43 +01:00
escape:
cmp di , offset buffer
je waitchar
2007-03-23 17:31:09 +01:00
call [ cs : getxy ]
2004-11-10 17:50:43 +01:00
mov dx , offset buffer
mov cx , di
sub cx , dx
js waitchar
je waitchar
2007-03-23 17:31:09 +01:00
sub ah , cl
mov cl , ah
xor ah , ah
xor ch , ch
call [ cs : setxy ], cx , ax
2004-11-10 17:50:43 +01:00
mov di , offset buffer
2007-03-23 17:31:09 +01:00
mov [ byte ptr di ], 0
jmp waitchar
2004-11-10 17:50:43 +01:00
backspace:
cmp di , offset buffer
je waitchar
2007-03-23 17:31:09 +01:00
call [ cs : getxy ]
dec ah
mov cl , ah
xor ah , ah
xor ch , ch
call [ cs : setxy ], cx , ax
call [ cs : showchar ], ' '
call [ cs : setxy ], cx , ax
2004-11-10 17:50:43 +01:00
dec di
2007-03-23 17:31:09 +01:00
mov [ byte ptr di ], 0
2004-11-10 17:50:43 +01:00
jmp waitchar
2004-06-12 23:34:04 +02:00
entere:
2007-03-23 17:31:09 +01:00
mov [ byte ptr di ], 0
cmp di , offset buffer
2004-06-12 23:34:04 +02:00
je noret
2007-03-23 17:31:09 +01:00
mov si , offset temp
call [ cs : addline ]
call [ cs : getitem ], offset buffer , si , 0 , ' '
call [ cs : uppercase ], si
2004-06-12 23:34:04 +02:00
mov bx , offset commands
xor bp , bp
2007-03-23 17:31:09 +01:00
xor dx , dx
2004-06-12 23:34:04 +02:00
tre:
mov di ,[ bx ]
cmp di , 0
je error
2007-03-23 17:31:09 +01:00
call [ cs : evalue ], si , di
cmp ax , dx
2004-06-12 23:34:04 +02:00
jb noadd
2007-03-23 17:31:09 +01:00
mov dx , ax
mov bp , bx
2004-11-30 20:30:30 +01:00
noadd:
2007-03-23 17:31:09 +01:00
call [ cs : cmpstr ], si , di
je strisok
add bx , 8
jmp tre
strisok:
mov di , offset temp
call [ cs : copy ], offset buffer , di
call [ cs : uppercase ], di
2004-06-12 23:34:04 +02:00
xor cx , cx
inc cx
2007-03-23 17:31:09 +01:00
call [ cs : getpointeritem ], di , cx , ' '
mov di , ax
cmp [ byte ptr di - 1 ], 0
2004-06-12 23:34:04 +02:00
jne nopod
2007-03-23 17:31:09 +01:00
mov [ byte ptr di ], 0
2004-06-12 23:34:04 +02:00
nopod:
2007-03-23 17:31:09 +01:00
call [ cs : ch ecksyntax ], di ,[ word ptr bx + 4 ], ' '
2004-06-12 23:34:04 +02:00
jc errorprec
2007-03-23 17:31:09 +01:00
mov bx ,[ bx + 2 ]
2004-06-12 23:34:04 +02:00
call bx
jmp replay
error:
mov di , offset buffer
2007-03-23 17:31:09 +01:00
call [ cs : searchchar ], di , '.'
je noaddext
call [ cs : concat ], offset extcom , di
2004-06-12 23:34:04 +02:00
noaddext:
2007-03-23 17:31:09 +01:00
call [ cs : execfile ], di
2004-06-12 23:34:04 +02:00
jc reallyerror
xor bp , bp
jmp replay
reallyerror:
2007-03-23 17:31:09 +01:00
push [ word ptr cs : bp ]
2004-11-30 20:30:30 +01:00
push offset error_syntax
2007-03-23 17:31:09 +01:00
call [ cs : print ]
2004-06-12 23:34:04 +02:00
jmp replay
errorprec:
2004-11-29 23:41:00 +01:00
push offset derror
2007-03-23 17:31:09 +01:00
call [ cs : print ]
2004-06-12 23:34:04 +02:00
jmp replay
2004-11-30 20:30:30 +01:00
code_exit:
2004-06-12 23:34:04 +02:00
pop ax
2004-11-29 23:41:00 +01:00
retf
2004-11-30 20:30:30 +01:00
2007-03-23 17:31:09 +01:00
code_version:
call [ cs : print ], offset version_text
2004-06-12 23:34:04 +02:00
ret
2004-11-30 20:30:30 +01:00
2007-03-28 23:49:41 +02:00
version_text db 'Cos 2000 version 1.4Fr par \c04MrNop\c07' , 0
2004-11-30 20:30:30 +01:00
code_cls:
2007-03-23 17:31:09 +01:00
call [ cs : cl earscreen ]
2004-06-12 23:34:04 +02:00
ret
2004-11-30 20:30:30 +01:00
code_reboot:
push 0ffffh
2004-06-12 23:34:04 +02:00
push 00000h
2004-11-30 20:30:30 +01:00
retf
2007-03-23 17:31:09 +01:00
code_command:
call [ cs : print ], offset def
2004-06-12 23:34:04 +02:00
mov bx , offset commands
showalls:
2007-03-23 17:31:09 +01:00
push [ word ptr bx + 4 ]
push [ word ptr bx + 6 ]
push [ word ptr bx ]
call [ cs : print ], offset commandes
2004-06-12 23:34:04 +02:00
add bx , 8
2007-03-23 17:31:09 +01:00
cmp [ word ptr bx ], 0
jne showalls
endoff:
2004-06-12 23:34:04 +02:00
ret
2007-03-28 23:49:41 +02:00
def db '\c02Liste des commandes internes\l\l\c07' , 0
2004-11-30 20:30:30 +01:00
commandes db '%0 \h10:\h12%0 \h70%0\l' , 0
2007-03-31 17:00:23 +02:00
code_detect:
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 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:
ret
thepci pciinf <>
thecpu cpu <>
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
2004-11-30 20:30:30 +01:00
code_mode:
2007-03-23 17:31:09 +01:00
call [ cs : gettypeditem ], di , 0 , ' '
2004-06-12 23:34:04 +02:00
and al , 1111b
2007-03-23 17:31:09 +01:00
call [ cs : setvideomode ], ax
call [ cs : cl earscreen ]
2004-06-12 23:34:04 +02:00
ret
2004-11-30 20:30:30 +01:00
code_dir:
2007-03-23 17:31:09 +01:00
call [ cs : getserial ]
push eax
mov si , offset nomdisque
call [ cs : getname ], si
push si
2004-11-30 20:30:30 +01:00
push offset present
2007-03-23 17:31:09 +01:00
call [ cs : print ]
xor ecx , ecx
2004-11-30 20:30:30 +01:00
mov di , offset bufferentry
2007-03-23 17:31:09 +01:00
call [ cs : findfirstfile ], di
2004-11-30 20:30:30 +01:00
jc nofiles
2004-06-12 23:34:04 +02:00
go:
2007-03-23 17:31:09 +01:00
push [ word ptr ( find di ) .result.fileattr ]
push [( find di ) .result.filesize ]
push [( find di ) .result.filetime ]
push [( find di ) .result.filedate ]
push [( find di ) .result.filetimecrea ]
push [( find di ) .result.filedatecrea ]
lea bx ,[( find di ) .result.filename ]
push bx
2004-11-30 20:30:30 +01:00
push offset line
2007-03-23 17:31:09 +01:00
call [ cs : print ]
inc ecx
call [ cs : findnextfile ], di
2004-11-30 20:30:30 +01:00
jnc go
2004-06-12 23:34:04 +02:00
nofiles:
2007-03-23 17:31:09 +01:00
push ecx
2004-11-30 20:30:30 +01:00
push offset filess
2007-03-23 17:31:09 +01:00
call [ cs : print ]
2004-11-30 20:30:30 +01:00
ret
nomdisque db 13 dup ( 0 )
bufferentry db 512 dup ( 0 )
present db '\c02Le volume insere est nomme %0, Numero de serie : %hD\l\l' , 0
line db '\c07%n %d %t %d %t %z %a\l' , 0
2007-03-23 17:31:09 +01:00
filess db '\l\l\c02%u Fichier(s) au total\l\c07' , 0
2004-06-12 23:34:04 +02:00
code_cd:
2007-03-23 17:31:09 +01:00
call [ cs : gettypeditem ], di , 0 , ' '
push ax
2004-11-30 20:30:30 +01:00
push offset ch anging
2007-03-23 17:31:09 +01:00
call [ cs : print ]
call [ cs : ch angedir ], ax
2004-11-30 20:30:30 +01:00
jnc okchange
push offset errorchanging
2007-03-23 17:31:09 +01:00
call [ cs : print ]
2004-06-12 23:34:04 +02:00
okchange:
2004-11-30 20:30:30 +01:00
ret
changing db 'Changement de repertoire vers %0\l' , 0
2007-03-28 23:49:41 +02:00
errorchanging db '\c04Impossible d' 'atteindre ce dossier\c07' , 0
2004-11-30 20:30:30 +01:00
code_kill:
2007-03-23 17:31:09 +01:00
call [ cs : gettypeditem ], di , 0 , ' '
push ax
2004-11-30 20:30:30 +01:00
push offset killing
2007-03-23 17:31:09 +01:00
call [ cs : print ]
call [ cs : mbfind ], ax
2004-11-30 20:30:30 +01:00
jc nochanged
2007-03-23 17:31:09 +01:00
call [ cs : mbfree ], ax
2004-11-30 20:30:30 +01:00
jnc okchanged
2007-03-27 16:51:28 +02:00
nochanged:
call [ cs : print ], offset errorkilling
2004-11-30 20:30:30 +01:00
okchanged:
ret
2007-03-27 16:51:28 +02:00
2004-11-30 20:30:30 +01:00
killing db 'Fermeture du processus %0\l' , 0
2007-03-28 23:49:41 +02:00
errorkilling db '\c04Impossible de fermer ce processus\c07' , 0
2004-06-12 23:34:04 +02:00
2007-03-28 17:50:22 +02:00
code_stack:
2007-03-31 17:00:23 +02:00
push ebp
push esp
push ss
push ss
call [ cs : print ], offset stackshow
mov cx , 12 ;12 derniers <20> l<EFBFBD> ments
xor esi , esi
mov si , sp
sub si , 2 * 12
showloop:
push [ dword ptr ss : si ]
push esi
push ss
push ss
call [ cs : print ], offset itemshow
inc si
inc si
cmp si , sp
jne notspshow
call [ cs : print ], offset stresp
notspshow:
cmp si , bp
jne nextshow
call [ cs : print ], offset strebp
nextshow:
dec cx
jnz showloop
ret
stackshow db '\l\c02Vidage de la pile systeme\l\l\c07'
db 'Segment SS : 0x%hW\l'
db 'Pointeur ESP : 0x%hD\l'
db 'Pointeur EBP : 0x%hD\l'
db 'Seg :Adr | Donnees' , 0
itemshow db '\l0x%hW:0x%hW | 0x%hW' , 0
strebp db '<-- BP' , 0
stresp db '<-- SP' , 0
2007-03-28 17:50:22 +02:00
code_dump:
2007-03-31 17:00:23 +02:00
call [ cs : gettypeditem ], di , 0 , ' '
call [ cs : mbfind ], di
jc notmbfind
mov fs , ax
dec ax
dec ax
mov gs , ax
cmp [ word ptr fs : 0x0 ], 'EC'
jne notace2
push offset oui ;CE? str0 2
jmp suitelikeace2
notace2:
push offset non
suitelikeace2:
cmp [ word ptr gs : mb.isnotlast ], true
je notlast2
push offset oui ;CE? str0 2
jmp suitelikelast2
notlast2:
push offset non
suitelikelast2:
mov dx , gs
push edx ;Emplacement memoire hex 2
;parent
cmp [ gs : mb.reference ], 0
jne nextdetect2
push cs
push offset none ;parent lstr0 2x2
add bx ,[ gs : mb.sizes ]
jmp suitemn2
nextdetect2:
mov dx ,[ gs : mb.reference ]
dec dx
dec dx
push dx ;parent lstr0 2x2
push offset ( mb ) .names
suitemn2:
cmp [ gs : mb.isresident ], true
jne notresident2
push offset oui ;resident str0 2
jmp suitelistmcb2
notresident2:
push offset non ;resident str0 2
suitelistmcb2:
xor edx , edx
mov dx ,[ gs : mb.sizes ]
shl edx , 4
push edx
push gs ;nom lstr0 2x2
push offset ( mb ) .names
push offset dumpshow ;ligne
call [ cs : print ]
cmp [ word ptr fs : 0x0 ], 'EC'
jne endofdumpformoment
push [ dword ptr fs : exe.starting ]
push fs
push fs
push [ dword ptr fs : exe.sections ]
push fs
push fs
push [ dword ptr fs : exe.imports ]
push fs
push fs
push [ dword ptr fs : exe.exports ]
push fs
push fs
cmp [ fs : exe.compressed ], true
jne notcompressed
push offset oui
jmp suiteiscompressed
notcompressed:
push offset non
suiteiscompressed:
push [ dword ptr fs : exe.checksum ]
push [ dword ptr fs : exe.major ]
call [ cs : print ], offset dumpshowce
endofdumpformoment:
ret
notmbfind:
call [ cs : print ], offset errornotmbfind
ret
errornotmbfind db '\c04Impossible de trouver le bloc specifie\l\l\c07' , 0
dumpshow db '\l\c02Dump du bloc de memoire nomme %0P\l\l'
db '\c02-----------------------------\l'
db '\c02Informations du bloc memoire\c07\l'
db 'Taille du bloc reserve : %u\l'
db 'Bloc resident en memoire : %0\l'
db 'Parent du bloc : %0P\l'
db 'Adresse du bloc memoire : 0x%hW:0x0000\l'
db 'Dernier bloc en memoire : %0\l'
db 'Heberge un format CE : %0\l' , 0
dumpshowce db '\c02-----------------------------\l'
db 'Informations du bloc executable\c07\l'
db 'Version de l' 'executable : %u\l'
db 'Somme de controle : %hD\l'
db 'Compression du code : %0\l'
db 'Exportation de fonctions : 0x%hW:0x%hW\l'
db 'Importation de fonctions : 0x%hW:0x%hW\l'
db 'Sections de donnees : 0x%hW:0x%hW\l'
db 'Point d' 'entree du code : 0x%hW:0x%hW\l' , 0
code_sections:
call [ cs : gettypeditem ], di , 0 , ' '
call [ cs : mbfind ], di
jc notmbfindssections
jmp haveatargetsections
notmbfindssections:
call [ cs : searchfile ], di
jc notmbfindall
call [ cs : projfile ], di
jc notmbfindall
call [ cs : mbfind ], di
jc notmbfindall
haveatargetsections:
mov fs , ax
cmp [ word ptr fs : 0x0 ], 'EC'
jne errornotace2
mov si ,[ fs : exe.sections ]
cmp si , 0
je errornosections
xor edx , edx
call [ cs : print ], offset rets
showallsections:
add si , 4
push fs
push si
call [ cs : print ], offset functions
inc edx
findnextsections:
inc si
cmp [ byte ptr fs : si ], 0
jne findnextsections
cmp [ dword ptr fs : si ], 0
je finishsections
inc si
jmp showallsections
finishsections:
push edx
call [ cs : print ], offset al lsections
ret
errornosections:
call [ cs : print ], offset errornosection
ret
allsections db '\c02\lIl y avait %u sections dans le bloc ou fichier\l\c07' , 0
errornosection db '\c02Aucune section dans le bloc ou fichier\l\c07' , 0
code_exports:
call [ cs : gettypeditem ], di , 0 , ' '
call [ cs : mbfind ], di
jc notmbfindsimports
jmp haveatargetexports
notmbfindsexports:
call [ cs : searchfile ], di
jc notmbfindall
call [ cs : projfile ], di
jc notmbfindall
call [ cs : mbfind ], di
jc notmbfindall
haveatargetexports:
mov fs , ax
cmp [ word ptr fs : 0x0 ], 'EC'
jne errornotace2
mov si ,[ fs : exe.exports ]
cmp si , 0
je errornoexports
xor edx , edx
call [ cs : print ], offset rets
showallexports:
push fs
push si
call [ cs : print ], offset functions
inc edx
findnextexports:
inc si
cmp [ byte ptr fs : si ], 0
jne findnextexports
add si , 3
cmp [ dword ptr fs : si ], 0
je finishexports
jmp showallexports
finishexports:
push edx
call [ cs : print ], offset al lexports
ret
errornoexports:
call [ cs : print ], offset errornoexport
ret
allexports db '\c02\lIl y avait %u exportations dans le bloc ou fichier\l\c07' , 0
errornoexport db '\c02Aucune exportation dans le bloc ou fichier\l\c07' , 0
code_imports:
call [ cs : gettypeditem ], di , 0 , ' '
call [ cs : mbfind ], di
jc notmbfindsimports
jmp haveatargetimports
notmbfindsimports:
call [ cs : searchfile ], di
jc notmbfindall
call [ cs : projfile ], di
jc notmbfindall
call [ cs : mbfind ], di
jc notmbfindall
haveatargetimports:
mov fs , ax
cmp [ word ptr fs : 0x0 ], 'EC'
jne errornotace2
mov si ,[ fs : exe.imports ]
cmp si , 0
je errornoimports
xor edx , edx
call [ cs : print ], offset rets
showallimports:
push fs
push si
call [ cs : print ], offset functions
inc edx
findnextimports:
inc si
cmp [ byte ptr fs : si ], 0
jne findnextimports
add si , 5
cmp [ dword ptr fs : si ], 0
je finishimports
jmp showallimports
finishimports:
push edx
call [ cs : print ], offset al limports
ret
errornoimports:
call [ cs : print ], offset errornoimport
ret
notmbfindall:
call [ cs : print ], offset errornotmborfilefind
ret
errornotace2:
call [ cs : print ], offset errornotcefind
ret
functions db '%0P\l' , 0
rets db '\l\l' , 0
allimports db '\c02\lIl y avait %u importations dans le bloc ou fichier\l\c07' , 0
errornoimport db '\c02Aucune importation dans le bloc ou fichier\l\c07' , 0
errornotcefind db '\c04Le bloc ou le fichier sp<73> cifi<66> n' 'est pas CE\l\c07' , 0
errornotmborfilefind db '\c04Impossible de trouver le bloc ou le fichier specifie\l\c07' , 0
2007-03-28 17:50:22 +02:00
code_regs:
call [ cs : savecontext ], offset al lregs
push 6
push eax
push eax
mov ax ,[ word ptr al lregs.sss ]
push 6
push eax
push eax
mov ax ,[ word ptr al lregs.sgs ]
push 6
push eax
push eax
mov ax ,[ word ptr al lregs.sfs ]
push 6
push eax
push eax
mov ax ,[ word ptr al lregs.ses ]
push 6
push eax
push eax
mov ax ,[ word ptr al lregs.sds ]
push 6
push eax
push eax
mov ax ,[ word ptr al lregs.scs ]
xor eax , eax
push 10
pushd [ dword ptr al lregs.seip ]
pushd [ dword ptr al lregs.seip ]
push 10
pushd [ dword ptr al lregs.sesp ]
pushd [ dword ptr al lregs.sesp ]
push 10
pushd [ dword ptr al lregs.sebp ]
pushd [ dword ptr al lregs.sebp ]
push 10
pushd [ dword ptr al lregs.sedi ]
pushd [ dword ptr al lregs.sedi ]
push 10
pushd [ dword ptr al lregs.sesi ]
pushd [ dword ptr al lregs.sesi ]
push 10
pushd [ dword ptr al lregs.sedx ]
pushd [ dword ptr al lregs.sedx ]
push 10
pushd [ dword ptr al lregs.secx ]
pushd [ dword ptr al lregs.secx ]
push 10
pushd [ dword ptr al lregs.sebx ]
pushd [ dword ptr al lregs.sebx ]
push 10
pushd [ dword ptr al lregs.seax ]
pushd [ dword ptr al lregs.seax ]
push 10
pushd [ dword ptr al lregs.seflags ]
pushd [ dword ptr al lregs.seflags ]
call [ cs : print ], offset registershow
ret
registershow db '\l\c02Liste des registres du Microprocesseur\l\l\c07'
db '\c04CPU\h30FPU\c07\l'
2007-03-31 17:00:23 +02:00
db 'EFGS: 0x%hD : %w |\h32ST(0): ??\l'
db 'EAX : 0x%hD : %w |\h32ST(1): ??\l'
db 'EBX : 0x%hD : %w |\h32ST(2): ??\l'
db 'ECX : 0x%hD : %w |\h32ST(3): ??\l'
db 'EDX : 0x%hD : %w |\h32ST(4): ??\l'
db 'ESI : 0x%hD : %w |\h32ST(5): ??\l'
db 'EDI : 0x%hD : %w |\h32ST(6): ??\l'
db 'EBP : 0x%hD : %w |\h32ST(7): ??\l'
2007-03-28 17:50:22 +02:00
db 'ESP : 0x%hD : %w |\h32\l'
db 'EIP : 0x%hD : %w |\h32\l'
db 'CS : 0x%hW : %w |\h32\l'
db 'DS : 0x%hW : %w |\h32\l'
db 'ES : 0x%hW : %w |\h32\l'
db 'FS : 0x%hW : %w |\h32\l'
db 'GS : 0x%hW : %w |\h32\l'
db 'SS : 0x%hW : %w |\h32\l' , 0
allregs regs <>
code_irqs:
2007-03-27 16:51:28 +02:00
call [ cs : mbfind ], offset interruptionbloc
jc erroronint
call [ cs : print ], offset irqmsg1
mov es , ax
xor ebx , ebx
intoirq:
xor eax , eax
mov al ,[ bx + offset irqmap ]
mov dx , si ze ints
mul dx
mov si , ax
pushd [ dword ptr es :( ints si ) .vector1.data.off ]
pushd [ dword ptr es :( ints si ) .vector1.data.seg ]
call [ cs : isrequestirq ], bx
jc requested
push ' '
jmp suiterequested
requested:
push 'X'
suiterequested:
call [ cs : isinserviceirq ], bx
jc inservice
push ' '
jmp suiteinservice
inservice:
push 'X'
suiteinservice:
call [ cs : isenableirq ], bx
jc activatemat
push ' '
jmp suiteactivatemat
activatemat:
push 'X'
suiteactivatemat:
cmp [ es :( ints si ) .activated ], 1
je activate2
push ' '
jmp suiteactivate2
activate2:
push 'X'
suiteactivate2:
cmp [ es :( ints si ) .locked ], 1
je verrouille2
push ' '
jmp suiteverrouille2
verrouille2:
push 'X'
suiteverrouille2:
pushd [ dword ptr es :( ints si ) .calledlow ]
pushd [ dword ptr es :( ints si ) .calledhigh ]
pushd [ dword ptr es :( ints si ) .launchedlow ]
pushd [ dword ptr es :( ints si ) .launchedhigh ]
push 3
xor eax , eax
mov al ,[ bx + offset irqmap ]
push eax
push 3
push ebx
call [ cs : print ], offset irqmsg2
inc bl
cmp bl , 16
jb intoirq
ret
irqmap db 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 0x70 , 0x71 , 0x72 , 0x73 , 0x74 , 0x75 , 0x76 , 0x77
irqmsg1 db '\l\c02Listes des IRQs\c07\l\l'
db 'IRQ | Int | Appels | Executions |Ver|Act|IMR|ISR|IRR| Vecteur 1 \l' , 0
irqmsg2 db '%w | %w | 0x%hW%hD | 0x%hW%hD | %c | %c | %c | %c | %c | 0x%hW:0x%hW\l' , 0
code_int:
call [ cs : mbfind ], offset interruptionbloc
jc erroronint
mov es , ax
call [ cs : gettypeditem ], di , 0 , ' '
xor edi , edi
mov di , ax
mov cx , si ze ints
mul cx
mov si , ax
pushd [ dword ptr es :( ints si ) .vector8.data.off ]
pushd [ dword ptr es :( ints si ) .vector8.data.seg ]
pushd [ dword ptr es :( ints si ) .vector7.data.off ]
pushd [ dword ptr es :( ints si ) .vector7.data.seg ]
pushd [ dword ptr es :( ints si ) .vector6.data.off ]
pushd [ dword ptr es :( ints si ) .vector6.data.seg ]
pushd [ dword ptr es :( ints si ) .vector5.data.off ]
pushd [ dword ptr es :( ints si ) .vector5.data.seg ]
pushd [ dword ptr es :( ints si ) .vector4.data.off ]
pushd [ dword ptr es :( ints si ) .vector4.data.seg ]
pushd [ dword ptr es :( ints si ) .vector3.data.off ]
pushd [ dword ptr es :( ints si ) .vector3.data.seg ]
pushd [ dword ptr es :( ints si ) .vector2.data.off ]
pushd [ dword ptr es :( ints si ) .vector2.data.seg ]
pushd [ dword ptr es :( ints si ) .vector1.data.off ]
pushd [ dword ptr es :( ints si ) .vector1.data.seg ]
pushd [ dword ptr es :( ints si ) .calledlow ]
pushd [ dword ptr es :( ints si ) .calledhigh ]
pushd [ dword ptr es :( ints si ) .launchedlow ]
pushd [ dword ptr es :( ints si ) .launchedhigh ]
cmp [ es :( ints si ) .activated ], 1
je activate
2007-03-31 17:00:23 +02:00
push offset oui
2007-03-27 16:51:28 +02:00
jmp suiteactivate
activate:
2007-03-31 17:00:23 +02:00
push offset non
2007-03-27 16:51:28 +02:00
suiteactivate:
cmp [ es :( ints si ) .locked ], 1
je verrouille
2007-03-31 17:00:23 +02:00
push offset oui
2007-03-27 16:51:28 +02:00
jmp suiteverrouille
verrouille:
2007-03-31 17:00:23 +02:00
push offset non
2007-03-27 16:51:28 +02:00
suiteverrouille:
push esi
push es
push es
push edi
call [ cs : print ], offset infosint
ret
erroronint:
call [ cs : print ], offset errorint
okint:
ret
interruptionbloc db '/interrupts' , 0
errorint db '\c04Le gestionnaire d' 'interruption n' 'est pas actif\l\c07' , 0
infosint db '\c07Le bloc d' 'interruption est charge en memoire et le gestionnaire est actif\l\l'
db 'Interruption %u\l'
db 'Pointeur : 0x%hW:0x%hW\l\c07'
db 'Active : %0\l'
db 'Verrouillage : %0\l'
db 'Nombre d' 'appels : 0x%hD%hD\l'
db 'Nombre de lancements : 0x%hD%hD\l'
db '\c02Vecteur 1 : 0x%hW:0x%hW\l'
db 'Vecteur 2 : 0x%hW:0x%hW\l'
db 'Vecteur 3 : 0x%hW:0x%hW\l'
db 'Vecteur 4 : 0x%hW:0x%hW\l'
db 'Vecteur 5 : 0x%hW:0x%hW\l'
db 'Vecteur 6 : 0x%hW:0x%hW\l'
db 'Vecteur 7 : 0x%hW:0x%hW\l'
db 'Vecteur 8 : 0x%hW:0x%hW\l\c07' , 0
2004-06-12 23:34:04 +02:00
code_refresh:
2007-03-23 17:31:09 +01:00
call [ cs : initdrive ]
2004-11-30 20:30:30 +01:00
jnc okrefresh
2007-03-23 17:31:09 +01:00
call [ cs : print ], offset errorrefreshing
2004-11-30 20:30:30 +01:00
ret
2004-06-12 23:34:04 +02:00
okrefresh:
2007-03-23 17:31:09 +01:00
call [ cs : getserial ]
push eax
mov si , offset nomdisque
call [ cs : getname ], si
push si
2004-11-30 20:30:30 +01:00
push offset present
2007-03-23 17:31:09 +01:00
call [ cs : print ]
2004-11-30 20:30:30 +01:00
ret
2007-03-27 16:51:28 +02:00
2004-11-29 23:41:00 +01:00
errorrefreshing db '\c04Impossible de lire le support' , 0
2004-11-30 20:30:30 +01:00
extcom db '.CE' , 0
2004-06-12 23:34:04 +02:00
2007-03-31 17:00:23 +02:00
2007-03-23 17:31:09 +01:00
code_mem:
call [ cs : print ], offset msg
2007-03-28 23:49:41 +02:00
xor edx , edx
2004-11-30 20:30:30 +01:00
xor ebx , ebx
xor cx , cx
2004-11-10 12:54:51 +01:00
listmcb:
2007-03-23 17:31:09 +01:00
call [ cs : mbget ], cx
2004-11-30 20:30:30 +01:00
jc fino
2007-03-28 23:49:41 +02:00
mov fs , ax
2007-03-23 17:31:09 +01:00
dec ax
dec ax
mov gs , ax
2004-11-30 20:30:30 +01:00
inc cx
2007-03-31 17:00:23 +02:00
cmp [ word ptr fs : 0x0 ], 'EC'
2007-03-28 23:49:41 +02:00
jne notace
2007-03-31 17:00:23 +02:00
push offset oui ;CE? str0 2
2007-03-28 23:49:41 +02:00
jmp suitelikeace
notace:
2007-03-31 17:00:23 +02:00
push offset non
2007-03-28 23:49:41 +02:00
suitelikeace:
mov dx , fs
2007-03-23 17:31:09 +01:00
push edx ;Emplacement memoire hex 2
2004-11-29 23:41:00 +01:00
;parent
2007-03-23 17:31:09 +01:00
cmp [ gs : mb.reference ], 0
2007-03-31 17:00:23 +02:00
jne nextdetect
2004-11-30 20:30:30 +01:00
push cs
2007-03-23 17:31:09 +01:00
push offset none ;parent lstr0 2x2
add bx ,[ gs : mb.sizes ]
2004-11-30 20:30:30 +01:00
jmp suitemn
2007-03-31 17:00:23 +02:00
nextdetect:
2007-03-23 17:31:09 +01:00
mov dx ,[ gs : mb.reference ]
2004-11-30 20:30:30 +01:00
dec dx
dec dx
2007-03-23 17:31:09 +01:00
push dx ;parent lstr0 2x2
push offset ( mb ) .names
2004-11-29 23:41:00 +01:00
suitemn:
2007-03-23 17:31:09 +01:00
cmp [ gs : mb.isresident ], true
2004-11-30 20:30:30 +01:00
jne notresident
2007-03-31 17:00:23 +02:00
push offset oui ;resident str0 2
2004-11-30 20:30:30 +01:00
jmp suitelistmcb
2004-11-10 12:54:51 +01:00
notresident:
2007-03-31 17:00:23 +02:00
push offset non ;resident str0 2
2004-11-10 12:54:51 +01:00
suitelistmcb:
2004-11-30 20:30:30 +01:00
xor edx , edx
2007-03-23 17:31:09 +01:00
mov dx ,[ gs : mb.sizes ]
2004-11-30 20:30:30 +01:00
shl edx , 4
2007-03-23 17:31:09 +01:00
push 6 ;decimal 4 + type 2
2004-11-30 20:30:30 +01:00
push edx
2007-03-23 17:31:09 +01:00
push gs ;nom lstr0 2x2
push offset ( mb ) .names
push offset line2 ;ligne
call [ cs : print ]
2004-11-30 20:30:30 +01:00
jmp listmcb
2004-11-10 12:54:51 +01:00
fino:
2004-11-30 20:30:30 +01:00
shl ebx , 4
push ebx
push offset fin
2007-03-23 17:31:09 +01:00
call [ cs : print ]
2004-11-30 20:30:30 +01:00
ret
2007-03-31 17:00:23 +02:00
oui db "oui" , 0
non db "non" , 0
2007-03-28 23:49:41 +02:00
line2 db "%0P\h15| %w\h24| %0\h30| %0P\h47| 0x%hW\h56| %0\l" , 0
2007-03-23 17:31:09 +01:00
fin db "\l\l\c02%u octets de memoire disponible\l\c07" , 0
2007-03-28 23:49:41 +02:00
msg db "\l\c02Plan de la memoire\c07\l\lNom | Taille | Res | Parent | Mem | CE \l" , 0
2007-03-31 17:00:23 +02:00
none db "?????" , 0
2004-11-10 12:54:51 +01:00
2004-11-11 18:03:41 +01:00
;converti le jeux scancode/ascii en fr ax->ax
convertfr:
2004-11-30 20:30:30 +01:00
push dx si
mov si , offset fr
2004-11-11 18:03:41 +01:00
searchtouch:
2007-03-23 17:31:09 +01:00
mov dx ,[ cs : si ]
2004-11-30 20:30:30 +01:00
cmp dx , 0
je endofconv
add si , 4
cmp dx , ax
jne searchtouch
2007-03-23 17:31:09 +01:00
mov ax ,[ cs : si - 2 ]
2004-11-11 18:03:41 +01:00
endofconv:
2004-11-30 20:30:30 +01:00
pop dx si
ret
2004-06-12 23:34:04 +02:00
2004-11-30 20:30:30 +01:00
fr: db '1' , 02 , '&' , 02
db '!' , 02 , '1' , 02
db '2' , 03 , '<27> ' , 03
db '@' , 03 , '2' , 03
db '3' , 04 , '"' , 04
db '#' , 04 , '3' , 04
db '4' , 05 , 39 , 05
db '$' , 05 , '4' , 05
db '5' , 06 , '(' , 06
db '%' , 06 , '5' , 06
db '6' , 07 , '-' , 07
db '^' , 07 , '6' , 07
db '7' , 08 , '<27> ' , 08
db '&' , 08 , '7' , 08
db '8' , 09 , '_' , 09
db '*' , 09 , '8' , 09
db '9' , 10 , '<27> ' , 10
db '(' , 10 , '9' , 10
db '0' , 11 , '<27> ' , 11
db ')' , 11 , '0' , 11
db '-' , 12 , ')' , 12
db '_' , 12 , '<27> ' , 12
db 'Q' , 16 , 'A' , 16
db 'q' , 16 , 'a' , 16
db 'W' , 17 , 'Z' , 17
db 'w' , 17 , 'z' , 17
db '{' , 26 , '<27> ' , 26
db '[' , 26 , '<27> ' , 26
db ']' , 27 , '$' , 27
db '}' , 27 , '<27> ' , 27
db 'A' , 30 , 'Q' , 30
db 'a' , 30 , 'q' , 30
db ':' , 39 , 'M' , 39
db ';' , 39 , 'm' , 39
db 39 , 40 , '<27> ' , 40
db '"' , 40 , '%' , 40
db 00 , 40 , '%' , 40
db '\', 43, ' * ' , 43
db '|' , 43 , '<27> ' , 43
db 'Z' , 44 , 'W' , 44
db 'z' , 44 , 'w' , 44
db 'm' , 50 , ',' , 50
db 'M' , 50 , '?' , 50
db ',' , 51 , ';' , 51
db '<' , 51 , '.' , 51
db '.' , 52 , ':' , 52
db '>' , 52 , '/' , 52
db '?' , 53 , '<27> ' , 53
db '/' , 53 , '!' , 53
db '\', 86, ' < ' , 86
db '|' , 86 , '>' , 86
db 00 , 79h , '~' , 03
db 00 , 7ah , '#' , 04
db 00 , 7bh , '{' , 05
db 00 , 7ch , '[' , 06
db 00 , 7dh , '|' , 07
db 00 , 7eh , '`' , 08
db 00 , 7fh , '\' , 09
db 00 , 80h , '^' , 10
db 00 , 81h , '@' , 11
db 00 , 82h , ']' , 12
db 00 , 83h , '}' , 13
db 00 , 00 , 00 , 00
commands dw str_exit , code_exit , syn_exit , help_exit
2007-03-28 17:50:22 +02:00
dw str_version , code_version , syn_version , help_version
dw str_cls , code_cls , syn_cls , help_cls
dw str_reboot , code_reboot , syn_reboot , help_reboot
dw str_command , code_command , syn_command , help_command
dw str_mode , code_mode , syn_mode , help_mode
dw str_dir , code_dir , syn_dir , help_dir
dw str_refresh , code_refresh , syn_refresh , help_refresh
dw str_cd , code_cd , syn_cd , help_cd
dw str_mem , code_mem , syn_mem , help_mem
dw str_kill , code_kill , syn_kill , help_kill
dw str_int , code_int , syn_int , help_int
dw str_irqs , code_irqs , syn_irqs , help_irqs
dw str_regs , code_regs , syn_regs , help_regs
dw str_stack , code_stack , syn_stack , help_stack
dw str_dump , code_dump , syn_dump , help_dump
2007-03-31 17:00:23 +02:00
dw str_detect , code_detect , syn_detect , help_detect
dw str_exports , code_exports , syn_exports , help_exports
dw str_imports , code_imports , syn_imports , help_imports
dw str_sections , code_sections , syn_sections , help_sections
2007-03-28 17:50:22 +02:00
dw 0
2004-11-30 20:30:30 +01:00
str_exit db 'QUIT' , 0
str_version db 'VERS' , 0
str_cls db 'CLEAR' , 0
str_reboot db 'REBOOT' , 0
str_command db 'CMDS' , 0
str_mode db 'MODE' , 0
str_dir db 'DIR' , 0
str_refresh db 'DISK' , 0
str_cd db 'CD' , 0
str_mem db 'MEM' , 0
2007-03-27 16:51:28 +02:00
str_kill db 'KILL' , 0
str_int db 'INT' , 0
2007-03-28 17:50:22 +02:00
str_irqs db 'IRQS' , 0
str_regs db 'REGS' , 0
str_stack db 'STACK' , 0
str_dump db 'DUMP' , 0
2007-03-31 17:00:23 +02:00
str_detect db 'DETECT' , 0
str_exports db 'EXPORTS' , 0
str_imports db 'IMPORTS' , 0
str_sections db 'SECTIONS' , 0
2004-11-30 20:30:30 +01:00
syn_exit db 0
syn_version db 0
syn_cls db 0
syn_reboot db 0
syn_command db 0
2007-03-23 17:31:09 +01:00
syn_mode db 'FFh' , 0
2004-11-30 20:30:30 +01:00
syn_dir db 0
syn_refresh db 0
2007-03-23 17:31:09 +01:00
syn_cd db '?' , 0
2004-11-30 20:30:30 +01:00
syn_mem db 0
2007-03-23 17:31:09 +01:00
syn_kill db '?' , 0
2007-03-27 16:51:28 +02:00
syn_int db 'FFh' , 0
2007-03-28 17:50:22 +02:00
syn_irqs db 0
syn_regs db 0
syn_stack db 0
syn_dump db '?' , 0
2007-03-31 17:00:23 +02:00
syn_detect db 0
syn_exports db '?' , 0
syn_imports db '?' , 0
syn_sections db '?' , 0
2004-11-30 20:30:30 +01:00
help_exit db 'Permet de quitter l' 'interpreteur' , 0
help_version db 'Affiche la version de COS' , 0
help_cls db 'Efface l' 'ecran' , 0
help_reboot db 'Redemarre l' 'ordinateur' , 0
help_command db 'Affiche le detail des commandes' , 0
help_mode db 'Modifie le mode video en cours' , 0
help_dir db 'Affiche le contenu du repertoire courant' , 0
help_refresh db 'Lit le support disquette insere' , 0
help_cd db 'Change le repertoire courant' , 0
help_mem db 'Affiche le plan de la memoire' , 0
help_kill db 'Termine le processus cible' , 0
2007-03-27 16:51:28 +02:00
help_int db 'Affiche des informations sur l' 'interruption' , 0
2007-03-28 17:50:22 +02:00
help_irqs db 'Affiche des informations sur les IRQs' , 0
help_regs db 'Affiche les registres du microprocesseur' , 0
help_stack db 'Affiche la pile systeme' , 0
help_dump db 'Affiche le contenu de la memoire' , 0
2007-03-31 17:00:23 +02:00
help_detect db 'Detecte et Affiche les peripheriques PCI et le CPU' , 0
help_exports db 'Affiche toutes les exportations du fichier specifie' , 0
help_imports db 'Affiche toutes les importations du fichier specifie' , 0
help_sections db 'Affiche toutes les sections du fichier specifie' , 0
2004-11-30 20:30:30 +01:00
derror db '\c04Erreur de Syntaxe !' , 0
2007-03-23 17:31:09 +01:00
error_syntax db '\c04La commande ou l' 'executable n' 'existe pas ! F1 pour %0' , 0
2004-11-30 20:30:30 +01:00
prompt db '\c07>' , 0
msginit db '\m02\e\c07\l\lInterpreteur de commande COS V1.9\lSous license \c05GPL\c07 - Ecrit par \c04MrNop\l\c07Utilisez la commande CMDS pour connaitres les commandes disponibles\l' , 0
dir db 32 dup ( 0 )
2007-03-23 17:31:09 +01:00
buffer db 256 dup ( 0 )
temp db 256 dup ( 0 )
2004-11-30 20:30:30 +01:00
2007-03-23 17:31:09 +01:00
import ing
2007-03-31 17:00:23 +02:00
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
2007-03-23 17:31:09 +01:00
use VIDEO , cl earscreen
use VIDEO , setvideomode
use VIDEO , getxy
use VIDEO , setxy
use VIDEO , addline
use VIDEO.LIB , showhex
use VIDEO.LIB , print
use VIDEO.LIB , showchar
use DI SQUE , getdir
use DI SQUE , getserial
use DI SQUE , getname
use DI SQUE , findfirstfile
use DI SQUE , findnextfile
use DI SQUE , execfile
use DI SQUE , initdrive
use DI SQUE , ch angedir
2007-03-31 17:00:23 +02:00
use DI SQUE , searchfile
use DI SQUE , projfile
2007-03-23 17:31:09 +01:00
use SYSTEME , mbget
use SYSTEME , mbfind
2007-03-27 16:51:28 +02:00
use SYSTEME , mbfindsb
2007-03-23 17:31:09 +01:00
use SYSTEME , mbfree
2007-03-27 16:51:28 +02:00
use SYSTEME , isenableirq
use SYSTEME , isinserviceirq
use SYSTEME , isrequestirq
2007-03-28 17:50:22 +02:00
use SYSTEME , savecontext
2007-03-23 17:31:09 +01:00
use STR0.LIB , uppercase
use STR0.LIB , evalue
use STR0.LIB , copy
use STR0.LIB , ch ecksyntax
use STR0.LIB , searchchar
use STR0.LIB , concat
use STR0.LIB , getitem
use STR0.LIB , cmpstr
use STR0.LIB , getpointeritem
use STR0.LIB , getlength
use STR0.LIB , gettypeditem
endi